⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ld-insn.c

📁 这个是LINUX下的GDB调度工具的源码
💻 C
📖 第 1 页 / 共 4 页
字号:
voidinsn_table_traverse_insn (lf *file,			  insn_table *isa,			  insn_entry_handler * handler, void *data){  insn_entry *insn;  for (insn = isa->insns; insn != NULL; insn = insn->next)    {      handler (file, isa, insn, data);    }}static voiddump_function_entry (lf *file,		     char *prefix, function_entry * entry, char *suffix){  lf_printf (file, "%s(function_entry *) 0x%lx", prefix, (long) entry);  if (entry != NULL)    {      dump_line_ref (file, "\n(line ", entry->line, ")");      dump_filter (file, "\n(flags ", entry->flags, ")");      lf_printf (file, "\n(type \"%s\")", entry->type);      lf_printf (file, "\n(name \"%s\")", entry->name);      lf_printf (file, "\n(param \"%s\")", entry->param);      dump_table_entry (file, "\n(code ", entry->code, ")");      lf_printf (file, "\n(is_internal %d)", entry->is_internal);      lf_printf (file, "\n(next 0x%lx)", (long) entry->next);    }  lf_printf (file, "%s", suffix);}static voiddump_function_entries (lf *file,		       char *prefix, function_entry * entry, char *suffix){  lf_printf (file, "%s", prefix);  lf_indent (file, +1);  while (entry != NULL)    {      dump_function_entry (file, "\n(", entry, ")");      entry = entry->next;    }  lf_indent (file, -1);  lf_printf (file, "%s", suffix);}static char *cache_entry_type_to_str (cache_entry_type type){  switch (type)    {    case scratch_value:      return "scratch";    case cache_value:      return "cache";    case compute_value:      return "compute";    }  ERROR ("Bad switch");  return 0;}static voiddump_cache_entry (lf *file, char *prefix, cache_entry *entry, char *suffix){  lf_printf (file, "%s(cache_entry *) 0x%lx", prefix, (long) entry);  if (entry != NULL)    {      dump_line_ref (file, "\n(line ", entry->line, ")");      dump_filter (file, "\n(flags ", entry->flags, ")");      lf_printf (file, "\n(entry_type \"%s\")",		 cache_entry_type_to_str (entry->entry_type));      lf_printf (file, "\n(name \"%s\")", entry->name);      dump_filter (file, "\n(original_fields ", entry->original_fields, ")");      lf_printf (file, "\n(type \"%s\")", entry->type);      lf_printf (file, "\n(expression \"%s\")", entry->expression);      lf_printf (file, "\n(next 0x%lx)", (long) entry->next);    }  lf_printf (file, "%s", suffix);}voiddump_cache_entries (lf *file, char *prefix, cache_entry *entry, char *suffix){  lf_printf (file, "%s", prefix);  lf_indent (file, +1);  while (entry != NULL)    {      dump_cache_entry (file, "\n(", entry, ")");      entry = entry->next;    }  lf_indent (file, -1);  lf_printf (file, "%s", suffix);}static voiddump_model_data (lf *file, char *prefix, model_data *entry, char *suffix){  lf_printf (file, "%s(model_data *) 0x%lx", prefix, (long) entry);  if (entry != NULL)    {      lf_indent (file, +1);      dump_line_ref (file, "\n(line ", entry->line, ")");      dump_filter (file, "\n(flags ", entry->flags, ")");      dump_table_entry (file, "\n(entry ", entry->entry, ")");      dump_table_entry (file, "\n(code ", entry->code, ")");      lf_printf (file, "\n(next 0x%lx)", (long) entry->next);      lf_indent (file, -1);    }  lf_printf (file, "%s", prefix);}static voiddump_model_datas (lf *file, char *prefix, model_data *entry, char *suffix){  lf_printf (file, "%s", prefix);  lf_indent (file, +1);  while (entry != NULL)    {      dump_model_data (file, "\n(", entry, ")");      entry = entry->next;    }  lf_indent (file, -1);  lf_printf (file, "%s", suffix);}static voiddump_model_entry (lf *file, char *prefix, model_entry *entry, char *suffix){  lf_printf (file, "%s(model_entry *) 0x%lx", prefix, (long) entry);  if (entry != NULL)    {      lf_indent (file, +1);      dump_line_ref (file, "\n(line ", entry->line, ")");      dump_filter (file, "\n(flags ", entry->flags, ")");      lf_printf (file, "\n(name \"%s\")", entry->name);      lf_printf (file, "\n(full_name \"%s\")", entry->full_name);      lf_printf (file, "\n(unit_data \"%s\")", entry->unit_data);      lf_printf (file, "\n(next 0x%lx)", (long) entry->next);      lf_indent (file, -1);    }  lf_printf (file, "%s", prefix);}static voiddump_model_entries (lf *file, char *prefix, model_entry *entry, char *suffix){  lf_printf (file, "%s", prefix);  lf_indent (file, +1);  while (entry != NULL)    {      dump_model_entry (file, "\n(", entry, ")");      entry = entry->next;    }  lf_indent (file, -1);  lf_printf (file, "%s", suffix);}static voiddump_model_table (lf *file, char *prefix, model_table *entry, char *suffix){  lf_printf (file, "%s(model_table *) 0x%lx", prefix, (long) entry);  if (entry != NULL)    {      lf_indent (file, +1);      dump_filter (file, "\n(processors ", entry->processors, ")");      lf_printf (file, "\n(nr_models %d)", entry->nr_models);      dump_model_entries (file, "\n(models ", entry->models, ")");      dump_model_datas (file, "\n(macros ", entry->macros, ")");      dump_model_datas (file, "\n(data ", entry->data, ")");      dump_function_entries (file, "\n(statics ", entry->statics, ")");      dump_function_entries (file, "\n(internals ", entry->functions, ")");      dump_function_entries (file, "\n(functions ", entry->functions, ")");      lf_indent (file, -1);    }  lf_printf (file, "%s", suffix);}static char *insn_field_type_to_str (insn_field_type type){  switch (type)    {    case insn_field_invalid:      ASSERT (0);      return "(invalid)";    case insn_field_int:      return "int";    case insn_field_reserved:      return "reserved";    case insn_field_wild:      return "wild";    case insn_field_string:      return "string";    }  ERROR ("bad switch");  return 0;}voiddump_insn_field (lf *file,		 char *prefix, insn_field_entry *field, char *suffix){  char *sep = " ";  lf_printf (file, "%s(insn_field_entry *) 0x%lx", prefix, (long) field);  if (field != NULL)    {      lf_indent (file, +1);      lf_printf (file, "%s(first %d)", sep, field->first);      lf_printf (file, "%s(last %d)", sep, field->last);      lf_printf (file, "%s(width %d)", sep, field->width);      lf_printf (file, "%s(type %s)", sep,		 insn_field_type_to_str (field->type));      switch (field->type)	{	case insn_field_invalid:	  ASSERT (0);	  break;	case insn_field_int:	  lf_printf (file, "%s(val 0x%lx)", sep, (long) field->val_int);	  break;	case insn_field_reserved:	  /* nothing output */	  break;	case insn_field_wild:	  /* nothing output */	  break;	case insn_field_string:	  lf_printf (file, "%s(val \"%s\")", sep, field->val_string);	  break;	}      lf_printf (file, "%s(next 0x%lx)", sep, (long) field->next);      lf_printf (file, "%s(prev 0x%lx)", sep, (long) field->prev);      lf_indent (file, -1);    }  lf_printf (file, "%s", suffix);}voiddump_insn_word_entry (lf *file,		      char *prefix, insn_word_entry *word, char *suffix){  lf_printf (file, "%s(insn_word_entry *) 0x%lx", prefix, (long) word);  if (word != NULL)    {      int i;      insn_field_entry *field;      lf_indent (file, +1);      lf_printf (file, "\n(first 0x%lx)", (long) word->first);      lf_printf (file, "\n(last 0x%lx)", (long) word->last);      lf_printf (file, "\n(bit");      for (i = 0; i < options.insn_bit_size; i++)	lf_printf (file, "\n ((value %d) (mask %d) (field 0x%lx))",		   word->bit[i]->value, word->bit[i]->mask,		   (long) word->bit[i]->field);      lf_printf (file, ")");      for (field = word->first; field != NULL; field = field->next)	dump_insn_field (file, "\n(", field, ")");      dump_filter (file, "\n(field_names ", word->field_names, ")");      lf_printf (file, "\n(next 0x%lx)", (long) word->next);      lf_indent (file, -1);    }  lf_printf (file, "%s", suffix);}static voiddump_insn_word_entries (lf *file,			char *prefix, insn_word_entry *word, char *suffix){  lf_printf (file, "%s", prefix);  while (word != NULL)    {      dump_insn_word_entry (file, "\n(", word, ")");      word = word->next;    }  lf_printf (file, "%s", suffix);}static voiddump_insn_model_entry (lf *file,		       char *prefix, insn_model_entry *model, char *suffix){  lf_printf (file, "%s(insn_model_entry *) 0x%lx", prefix, (long) model);  if (model != NULL)    {      lf_indent (file, +1);      dump_line_ref (file, "\n(line ", model->line, ")");      dump_filter (file, "\n(names ", model->names, ")");      lf_printf (file, "\n(full_name \"%s\")", model->full_name);      lf_printf (file, "\n(unit_data \"%s\")", model->unit_data);      lf_printf (file, "\n(insn (insn_entry *) 0x%lx)", (long) model->insn);      lf_printf (file, "\n(next (insn_model_entry *) 0x%lx)",		 (long) model->next);      lf_indent (file, -1);    }  lf_printf (file, "%s", suffix);}static voiddump_insn_model_entries (lf *file,			 char *prefix, insn_model_entry *model, char *suffix){  lf_printf (file, "%s", prefix);  while (model != NULL)    {      dump_insn_model_entry (file, "\n", model, "");      model = model->next;    }  lf_printf (file, "%s", suffix);}static voiddump_insn_mnemonic_entry (lf *file,			  char *prefix,			  insn_mnemonic_entry *mnemonic, char *suffix){  lf_printf (file, "%s(insn_mnemonic_entry *) 0x%lx", prefix,	     (long) mnemonic);  if (mnemonic != NULL)    {      lf_indent (file, +1);      dump_line_ref (file, "\n(line ", mnemonic->line, ")");      lf_printf (file, "\n(format \"%s\")", mnemonic->format);      lf_printf (file, "\n(condition \"%s\")", mnemonic->condition);      lf_printf (file, "\n(insn (insn_entry *) 0x%lx)",		 (long) mnemonic->insn);      lf_printf (file, "\n(next (insn_mnemonic_entry *) 0x%lx)",		 (long) mnemonic->next);      lf_indent (file, -1);    }  lf_printf (file, "%s", suffix);}static voiddump_insn_mnemonic_entries (lf *file,			    char *prefix,			    insn_mnemonic_entry *mnemonic, char *suffix){  lf_printf (file, "%s", prefix);  while (mnemonic != NULL)    {      dump_insn_mnemonic_entry (file, "\n", mnemonic, "");      mnemonic = mnemonic->next;    }  lf_printf (file, "%s", suffix);}voiddump_insn_entry (lf *file, char *prefix, insn_entry * entry, char *suffix){  lf_printf (file, "%s(insn_entry *) 0x%lx", prefix, (long) entry);  if (entry != NULL)    {      int i;      lf_indent (file, +1);      dump_line_ref (file, "\n(line ", entry->line, ")");      dump_filter (file, "\n(flags ", entry->flags, ")");      lf_printf (file, "\n(nr_words %d)", entry->nr_words);      dump_insn_word_entries (file, "\n(words ", entry->words, ")");      lf_printf (file, "\n(word");      for (i = 0; i < entry->nr_models; i++)	lf_printf (file, " 0x%lx", (long) entry->word[i]);      lf_printf (file, ")");      dump_filter (file, "\n(field_names ", entry->field_names, ")");      lf_printf (file, "\n(format_name \"%s\")", entry->format_name);      dump_filter (file, "\n(options ", entry->options, ")");      lf_printf (file, "\n(name \"%s\")", entry->name);      lf_printf (file, "\n(nr_models %d)", entry->nr_models);      dump_insn_model_entries (file, "\n(models ", entry->models, ")");      lf_printf (file, "\n(model");      for (i = 0; i < entry->nr_models; i++)	lf_printf (file, " 0x%lx", (long) entry->model[i]);      lf_printf (file, ")");      dump_filter (file, "\n(processors ", entry->processors, ")");      dump_insn_mnemonic_entries (file, "\n(mnemonics ", entry->mnemonics,				  ")");      dump_table_entry (file, "\n(code ", entry->code, ")");      lf_printf (file, "\n(next 0x%lx)", (long) entry->next);      lf_indent (file, -1);    }  lf_printf (file, "%s", suffix);}static voiddump_insn_entries (lf *file, char *prefix, insn_entry * entry, char *suffix){  lf_printf (file, "%s", prefix);  lf_indent (file, +1);  while (entry != NULL)    {      dump_insn_entry (file, "\n(", entry, ")");      entry = entry->next;    }  lf_indent (file, -1);  lf_printf (file, "%s", suffix);}voiddump_insn_table (lf *file, char *prefix, insn_table *isa, char *suffix){  lf_printf (file, "%s(insn_table *) 0x%lx", prefix, (long) isa);  if (isa != NULL)    {      lf_indent (file, +1);      dump_cache_entries (file, "\n(caches ", isa->caches, ")");      lf_printf (file, "\n(nr_insns %d)", isa->nr_insns);      lf_printf (file, "\n(max_nr_words %d)", isa->max_nr_words);      dump_insn_entries (file, "\n(insns ", isa->insns, ")");      dump_function_entries (file, "\n(functions ", isa->functions, ")");      dump_insn_entry (file, "\n(illegal_insn ", isa->illegal_insn, ")");      dump_model_table (file, "\n(model ", isa->model, ")");      dump_filter (file, "\n(flags ", isa->flags, ")");      dump_filter (file, "\n(options ", isa->options, ")");      lf_indent (file, -1);    }  lf_printf (file, "%s", suffix);}#ifdef MAINigen_options options;intmain (int argc, char **argv){  insn_table *isa;  lf *l;  INIT_OPTIONS (options);  if (argc == 3)    filter_parse (&options.flags_filter, argv[2]);  else if (argc != 2)    error (NULL, "Usage: insn <insn-table> [ <filter-in> ]\n");  isa = load_insn_table (argv[1], NULL);  l = lf_open ("-", "stdout", lf_omit_references, lf_is_text, "tmp-ld-insn");  dump_insn_table (l, "(isa ", isa, ")\n");  return 0;}#endif

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -