readelf.c

来自「基于4个mips核的noc设计」· C语言 代码 · 共 2,305 行 · 第 1/5 页

C
2,305
字号
	case EM_PARISC:	  rtype = elf_hppa_reloc_type (type);	  break;	case EM_PJ:	  rtype = elf_pj_reloc_type (type);	  break;	case EM_IA_64:	  rtype = elf_ia64_reloc_type (type);	  break;	case EM_CRIS:	  rtype = elf_cris_reloc_type (type);	  break;	case EM_860:	  rtype = elf_i860_reloc_type (type);	  break;	case EM_X86_64:	  rtype = elf_x86_64_reloc_type (type);	  break;	}      if (rtype == NULL)#ifdef _bfd_int64_low	printf (_("unrecognised: %-7lx"), _bfd_int64_low (type));#else	printf (_("unrecognised: %-7lx"), type);#endif      else	printf ("%-21.21s", rtype);      if (symtab_index)	{	  if (symtab != NULL)	    {	      if (symtab_index >= nsyms)		printf (" bad symbol index: %08lx", (unsigned long) symtab_index);	      else		{		  Elf_Internal_Sym * psym;		  psym = symtab + symtab_index;		  printf (" ");		  print_vma (psym->st_value, LONG_HEX);		  printf ("  ");		  if (psym->st_name == 0)		    printf ("%-25.25s",			    SECTION_NAME (section_headers + psym->st_shndx));		  else if (strtab == NULL)		    printf (_("<string table index %3ld>"), psym->st_name);		  else		    printf ("%-25.25s", strtab + psym->st_name);		  if (is_rela)		    printf (" + %lx", (unsigned long) relas [i].r_addend);		}	    }	}      else if (is_rela)	{	  printf ("%*c", is_32bit_elf ? 34 : 26, ' ');	  print_vma (relas[i].r_addend, LONG_HEX);	}      if (elf_header.e_machine == EM_SPARCV9	  && !strcmp (rtype, "R_SPARC_OLO10"))	printf (" + %lx", (unsigned long) ELF64_R_TYPE_DATA (info));      putchar ('\n');    }  if (is_rela)    free (relas);  else    free (rels);  return 1;}static const char *get_mips_dynamic_type (type)     unsigned long type;{  switch (type)    {    case DT_MIPS_RLD_VERSION: return "MIPS_RLD_VERSION";    case DT_MIPS_TIME_STAMP: return "MIPS_TIME_STAMP";    case DT_MIPS_ICHECKSUM: return "MIPS_ICHECKSUM";    case DT_MIPS_IVERSION: return "MIPS_IVERSION";    case DT_MIPS_FLAGS: return "MIPS_FLAGS";    case DT_MIPS_BASE_ADDRESS: return "MIPS_BASE_ADDRESS";    case DT_MIPS_MSYM: return "MIPS_MSYM";    case DT_MIPS_CONFLICT: return "MIPS_CONFLICT";    case DT_MIPS_LIBLIST: return "MIPS_LIBLIST";    case DT_MIPS_LOCAL_GOTNO: return "MIPS_LOCAL_GOTNO";    case DT_MIPS_CONFLICTNO: return "MIPS_CONFLICTNO";    case DT_MIPS_LIBLISTNO: return "MIPS_LIBLISTNO";    case DT_MIPS_SYMTABNO: return "MIPS_SYMTABNO";    case DT_MIPS_UNREFEXTNO: return "MIPS_UNREFEXTNO";    case DT_MIPS_GOTSYM: return "MIPS_GOTSYM";    case DT_MIPS_HIPAGENO: return "MIPS_HIPAGENO";    case DT_MIPS_RLD_MAP: return "MIPS_RLD_MAP";    case DT_MIPS_DELTA_CLASS: return "MIPS_DELTA_CLASS";    case DT_MIPS_DELTA_CLASS_NO: return "MIPS_DELTA_CLASS_NO";    case DT_MIPS_DELTA_INSTANCE: return "MIPS_DELTA_INSTANCE";    case DT_MIPS_DELTA_INSTANCE_NO: return "MIPS_DELTA_INSTANCE_NO";    case DT_MIPS_DELTA_RELOC: return "MIPS_DELTA_RELOC";    case DT_MIPS_DELTA_RELOC_NO: return "MIPS_DELTA_RELOC_NO";    case DT_MIPS_DELTA_SYM: return "MIPS_DELTA_SYM";    case DT_MIPS_DELTA_SYM_NO: return "MIPS_DELTA_SYM_NO";    case DT_MIPS_DELTA_CLASSSYM: return "MIPS_DELTA_CLASSSYM";    case DT_MIPS_DELTA_CLASSSYM_NO: return "MIPS_DELTA_CLASSSYM_NO";    case DT_MIPS_CXX_FLAGS: return "MIPS_CXX_FLAGS";    case DT_MIPS_PIXIE_INIT: return "MIPS_PIXIE_INIT";    case DT_MIPS_SYMBOL_LIB: return "MIPS_SYMBOL_LIB";    case DT_MIPS_LOCALPAGE_GOTIDX: return "MIPS_LOCALPAGE_GOTIDX";    case DT_MIPS_LOCAL_GOTIDX: return "MIPS_LOCAL_GOTIDX";    case DT_MIPS_HIDDEN_GOTIDX: return "MIPS_HIDDEN_GOTIDX";    case DT_MIPS_PROTECTED_GOTIDX: return "MIPS_PROTECTED_GOTIDX";    case DT_MIPS_OPTIONS: return "MIPS_OPTIONS";    case DT_MIPS_INTERFACE: return "MIPS_INTERFACE";    case DT_MIPS_DYNSTR_ALIGN: return "MIPS_DYNSTR_ALIGN";    case DT_MIPS_INTERFACE_SIZE: return "MIPS_INTERFACE_SIZE";    case DT_MIPS_RLD_TEXT_RESOLVE_ADDR: return "MIPS_RLD_TEXT_RESOLVE_ADDR";    case DT_MIPS_PERF_SUFFIX: return "MIPS_PERF_SUFFIX";    case DT_MIPS_COMPACT_SIZE: return "MIPS_COMPACT_SIZE";    case DT_MIPS_GP_VALUE: return "MIPS_GP_VALUE";    case DT_MIPS_AUX_DYNAMIC: return "MIPS_AUX_DYNAMIC";    default:      return NULL;    }}static const char *get_sparc64_dynamic_type (type)     unsigned long type;{  switch (type)    {    case DT_SPARC_REGISTER: return "SPARC_REGISTER";    default:      return NULL;    }}static const char *get_parisc_dynamic_type (type)     unsigned long type;{  switch (type)    {    case DT_HP_LOAD_MAP:	return "HP_LOAD_MAP";    case DT_HP_DLD_FLAGS:	return "HP_DLD_FLAGS";    case DT_HP_DLD_HOOK:	return "HP_DLD_HOOK";    case DT_HP_UX10_INIT:	return "HP_UX10_INIT";    case DT_HP_UX10_INITSZ:	return "HP_UX10_INITSZ";    case DT_HP_PREINIT:		return "HP_PREINIT";    case DT_HP_PREINITSZ:	return "HP_PREINITSZ";    case DT_HP_NEEDED:		return "HP_NEEDED";    case DT_HP_TIME_STAMP:	return "HP_TIME_STAMP";    case DT_HP_CHECKSUM:	return "HP_CHECKSUM";    case DT_HP_GST_SIZE:	return "HP_GST_SIZE";    case DT_HP_GST_VERSION:	return "HP_GST_VERSION";    case DT_HP_GST_HASHVAL:	return "HP_GST_HASHVAL";    default:      return NULL;    }}static const char *get_dynamic_type (type)     unsigned long type;{  static char buff [32];  switch (type)    {    case DT_NULL:	return "NULL";    case DT_NEEDED:	return "NEEDED";    case DT_PLTRELSZ:	return "PLTRELSZ";    case DT_PLTGOT:	return "PLTGOT";    case DT_HASH:	return "HASH";    case DT_STRTAB:	return "STRTAB";    case DT_SYMTAB:	return "SYMTAB";    case DT_RELA:	return "RELA";    case DT_RELASZ:	return "RELASZ";    case DT_RELAENT:	return "RELAENT";    case DT_STRSZ:	return "STRSZ";    case DT_SYMENT:	return "SYMENT";    case DT_INIT:	return "INIT";    case DT_FINI:	return "FINI";    case DT_SONAME:	return "SONAME";    case DT_RPATH:	return "RPATH";    case DT_SYMBOLIC:	return "SYMBOLIC";    case DT_REL:	return "REL";    case DT_RELSZ:	return "RELSZ";    case DT_RELENT:	return "RELENT";    case DT_PLTREL:	return "PLTREL";    case DT_DEBUG:	return "DEBUG";    case DT_TEXTREL:	return "TEXTREL";    case DT_JMPREL:	return "JMPREL";    case DT_BIND_NOW:   return "BIND_NOW";    case DT_INIT_ARRAY: return "INIT_ARRAY";    case DT_FINI_ARRAY: return "FINI_ARRAY";    case DT_INIT_ARRAYSZ: return "INIT_ARRAYSZ";    case DT_FINI_ARRAYSZ: return "FINI_ARRAYSZ";    case DT_RUNPATH:    return "RUNPATH";    case DT_FLAGS:      return "FLAGS";    case DT_PREINIT_ARRAY: return "PREINIT_ARRAY";    case DT_PREINIT_ARRAYSZ: return "PREINIT_ARRAYSZ";    case DT_CHECKSUM:	return "CHECKSUM";    case DT_PLTPADSZ:	return "PLTPADSZ";    case DT_MOVEENT:	return "MOVEENT";    case DT_MOVESZ:	return "MOVESZ";    case DT_FEATURE:	return "FEATURE";    case DT_POSFLAG_1:	return "POSFLAG_1";    case DT_SYMINSZ:	return "SYMINSZ";    case DT_SYMINENT:	return "SYMINENT"; /* aka VALRNGHI */    case DT_ADDRRNGLO:  return "ADDRRNGLO";    case DT_CONFIG:	return "CONFIG";    case DT_DEPAUDIT:	return "DEPAUDIT";    case DT_AUDIT:	return "AUDIT";    case DT_PLTPAD:	return "PLTPAD";    case DT_MOVETAB:	return "MOVETAB";    case DT_SYMINFO:	return "SYMINFO"; /* aka ADDRRNGHI */    case DT_VERSYM:	return "VERSYM";    case DT_RELACOUNT:	return "RELACOUNT";    case DT_RELCOUNT:	return "RELCOUNT";    case DT_FLAGS_1:	return "FLAGS_1";    case DT_VERDEF:	return "VERDEF";    case DT_VERDEFNUM:	return "VERDEFNUM";    case DT_VERNEED:	return "VERNEED";    case DT_VERNEEDNUM:	return "VERNEEDNUM";    case DT_AUXILIARY:	return "AUXILIARY";    case DT_USED:	return "USED";    case DT_FILTER:	return "FILTER";    default:      if ((type >= DT_LOPROC) && (type <= DT_HIPROC))	{	  const char * result;	  switch (elf_header.e_machine)	    {	    case EM_MIPS:	    case EM_MIPS_RS3_LE:	      result = get_mips_dynamic_type (type);	      break;	    case EM_SPARCV9:	      result = get_sparc64_dynamic_type (type);	      break;	    default:	      result = NULL;	      break;	    }	  if (result != NULL)	    return result;	  sprintf (buff, _("Processor Specific: %lx"), type);	}      else if ((type >= DT_LOOS) && (type <= DT_HIOS))	{	  const char * result;	  switch (elf_header.e_machine)	    {	    case EM_PARISC:	      result = get_parisc_dynamic_type (type);	      break;	    default:	      result = NULL;	      break;	    }	  if (result != NULL)	    return result;	  sprintf (buff, _("Operating System specific: %lx"), type);	}      else	sprintf (buff, _("<unknown>: %lx"), type);      return buff;    }}static char *get_file_type (e_type)     unsigned e_type;{  static char buff [32];  switch (e_type)    {    case ET_NONE:	return _("NONE (None)");    case ET_REL:	return _("REL (Relocatable file)");    case ET_EXEC:       return _("EXEC (Executable file)");    case ET_DYN:        return _("DYN (Shared object file)");    case ET_CORE:       return _("CORE (Core file)");    default:      if ((e_type >= ET_LOPROC) && (e_type <= ET_HIPROC))	sprintf (buff, _("Processor Specific: (%x)"), e_type);      else if ((e_type >= ET_LOOS) && (e_type <= ET_HIOS))	sprintf (buff, _("OS Specific: (%x)"), e_type);      else	sprintf (buff, _("<unknown>: %x"), e_type);      return buff;    }}static char *get_machine_name (e_machine)     unsigned e_machine;{  static char buff [64]; /* XXX */  switch (e_machine)    {    case EM_NONE:	return _("None");    case EM_M32:	return "WE32100";    case EM_SPARC:	return "Sparc";    case EM_386:	return "Intel 80386";    case EM_68K:	return "MC68000";    case EM_88K:	return "MC88000";    case EM_486:	return "Intel 80486";    case EM_860:	return "Intel 80860";    case EM_MIPS:	return "MIPS R3000";    case EM_S370:	return "IBM System/370";    case EM_MIPS_RS3_LE:	return "MIPS R4000 big-endian";    case EM_OLD_SPARCV9:	return "Sparc v9 (old)";    case EM_PARISC:	return "HPPA";    case EM_PPC_OLD:		return "Power PC (old)";    case EM_SPARC32PLUS:	return "Sparc v8+" ;    case EM_960:	return "Intel 90860";    case EM_PPC:	return "PowerPC";    case EM_V800:	return "NEC V800";    case EM_FR20:	return "Fujitsu FR20";    case EM_RH32:	return "TRW RH32";    case EM_MCORE:	        return "MCORE";    case EM_ARM:		return "ARM";    case EM_OLD_ALPHA:		return "Digital Alpha (old)";    case EM_SH:			return "Hitachi SH";    case EM_SPARCV9:	return "Sparc v9";    case EM_TRICORE:	return "Siemens Tricore";    case EM_ARC:		return "ARC";    case EM_H8_300:		return "Hitachi H8/300";    case EM_H8_300H:		return "Hitachi H8/300H";    case EM_H8S:		return "Hitachi H8S";    case EM_H8_500:		return "Hitachi H8/500";    case EM_IA_64:		return "Intel IA-64";    case EM_MIPS_X:		return "Stanford MIPS-X";    case EM_COLDFIRE:		return "Motorola Coldfire";    case EM_68HC12:		return "Motorola M68HC12";    case EM_ALPHA:	return "Alpha";    case EM_CYGNUS_D10V:        return "d10v";    case EM_CYGNUS_D30V:        return "d30v";    case EM_CYGNUS_ARC:		return "ARC";    case EM_CYGNUS_M32R:	return "Mitsubishi M32r";    case EM_CYGNUS_V850:	return "NEC v850";    case EM_CYGNUS_MN10300:	return "mn10300";    case EM_CYGNUS_MN10200:	return "mn10200";    case EM_CYGNUS_FR30:	return "Fujitsu FR30";    case EM_PJ:                 return "picoJava";    case EM_MMA:		return "Fujitsu Multimedia Accelerator";    case EM_PCP:		return "Siemens PCP";    case EM_NCPU:		return "Sony nCPU embedded RISC processor";    case EM_NDR1:		return "Denso NDR1 microprocesspr";    case EM_STARCORE:		return "Motorola Star*Core processor";    case EM_ME16:		return "Toyota ME16 processor";    case EM_ST100:		return "STMicroelectronics ST100 processor";    case EM_TINYJ:		return "Advanced Logic Corp. TinyJ embedded processor";    case EM_FX66:		return "Siemens FX66 microcontroller";    case EM_ST9PLUS:		return "STMicroelectronics ST9+ 8/16 bit microcontroller";    case EM_ST7:		return "STMicroelectronics ST7 8-bit microcontroller";    case EM_68HC16:		return "Motorola MC68HC16 Microcontroller";    case EM_68HC11:		return "Motorola MC68HC11 Microcontroller";    case EM_68HC08:		return "Motorola MC68HC08 Microcontroller";    case EM_68HC05:		return "Motorola MC68HC05 Microcontroller";    case EM_SVX:		return "Silicon Graphics SVx";    case EM_ST19:		return "STMicroelectronics ST19 8-bit microcontroller";    case EM_VAX:		return "Digital VAX";    case EM_AVR:                return "Atmel AVR 8-bit microcontroller";    case EM_CRIS:		return "Axis Communications 32-bit embedded processor";    case EM_JAVELIN:	return "Infineon Technologies 32-bit embedded cpu";    case EM_FIREPATH:	return "Element 14 64-bit DSP processor";    case EM_ZSP:	return "LSI Logic's 16-bit DSP processor";    case EM_MMIX:	        return "Donald Knuth's educational 64-bit processor";    case EM_HUANY:	return "Harvard Universitys's machine-independent object format";    case EM_PRISM:	return "SiTera Prism";    case EM_X86_64:		return "Advanced Micro Devices X86-64";    default:      sprintf (buff, _("<unknown>: %x"), e_machine);      return buff;    }}static voiddecode_ARM_machine_flags (e_flags, buf)     unsigned e_flags;     char buf[];{  unsigned eabi;  int unknown = 0;  eabi = EF_ARM_EABI_VERSION (e_flags);  e_flags &= ~ EF_ARM_EABIMASK;  /* Handle "generic" ARM flags.  */  if (e_flags & EF_ARM_RELEXEC)    {      strcat (buf, ", relocatable executable");      e_flags &= ~ EF_ARM_RELEXEC;    }  if (e_flags & EF_ARM_HASENTRY)    {      strcat (buf, ", has entry point");      e_flags &= ~ EF_ARM_HASENTRY;    }  /* Now handle EABI specific flags.  */  switch (eabi)    {    default:      strcat (buf, ", <unknown EABI>");      if (e_flags)	unknown = 1;      break;    case EF_ARM_EABI_VER1:      while (e_flags)	{	  unsigned flag;	  /* Process flags one bit at a time.  */	  flag = e_flags & - e_flags;	  e_flags &= ~ flag;	  switch (flag)	    {	    case EF_ARM_SYMSARESORTED: /* Conflicts with EF_INTERWORK.  */	      strcat (buf, ", sorted symbol tables");	      break;	    default:	      unknown = 1;	      break;	    }

⌨️ 快捷键说明

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