diff options
author | Nick Clifton <nickc@redhat.com> | 2008-01-30 10:37:43 +0000 |
---|---|---|
committer | Nick Clifton <nickc@redhat.com> | 2008-01-30 10:37:43 +0000 |
commit | 148b93f23647dd184641fd9e3585bc3a8b455708 (patch) | |
tree | 8d0d05fcefee433515e45b69dd4e1f04262bbabf /binutils/readelf.c | |
parent | f43691e3959d7e5bfb448448c6562a8c2a398fd4 (diff) | |
download | gdb-148b93f23647dd184641fd9e3585bc3a8b455708.zip gdb-148b93f23647dd184641fd9e3585bc3a8b455708.tar.gz gdb-148b93f23647dd184641fd9e3585bc3a8b455708.tar.bz2 |
Add OpenVMS extensions.
* ia64.h (SHF_IA_64_VMS_GLOBAL, SHF_IA_64_VMS_OVERLAID)
(SHF_IA_64_VMS_SHARED, SHF_IA_64_VMS_VECTOR)
(SHF_IA_64_VMS_ALLOC_64BIT, SHF_IA_64_VMS_PROTECTED)
(SHT_IA_64_VMS_TRACE, SHT_IA_64_VMS_TIE_SIGNATURES)
(SHT_IA_64_VMS_DEBUG, SHT_IA_64_VMS_DEBUG_STR)
(SHT_IA_64_VMS_LINKAGES, SHT_IA_64_VMS_SYMBOL_VECTOR)
(SHT_IA_64_VMS_FIXUP, DT_IA_64_VMS_SUBTYPE)
(DT_IA_64_VMS_IMGIOCNT, DT_IA_64_VMS_LNKFLAGS)
(DT_IA_64_VMS_VIR_MEM_BLK_SIZ, DT_IA_64_VMS_IDENT)
(DT_IA_64_VMS_NEEDED_IDENT, DT_IA_64_VMS_IMG_RELA_CNT)
(DT_IA_64_VMS_SEG_RELA_CNT, DT_IA_64_VMS_FIXUP_RELA_CNT)
(DT_IA_64_VMS_FIXUP_NEEDED, DT_IA_64_VMS_SYMVEC_CNT)
(DT_IA_64_VMS_XLATED, DT_IA_64_VMS_STACKSIZE)
(DT_IA_64_VMS_UNWINDSZ, DT_IA_64_VMS_UNWIND_CODSEG)
(DT_IA_64_VMS_UNWIND_INFOSEG, DT_IA_64_VMS_LINKTIME)
(DT_IA_64_VMS_SEG_NO, DT_IA_64_VMS_SYMVEC_OFFSET)
(DT_IA_64_VMS_SYMVEC_SEG, DT_IA_64_VMS_UNWIND_OFFSET)
(DT_IA_64_VMS_UNWIND_SEG, DT_IA_64_VMS_STRTAB_OFFSET)
(DT_IA_64_VMS_SYSVER_OFFSET, DT_IA_64_VMS_IMG_RELA_OFF)
(DT_IA_64_VMS_SEG_RELA_OFF, DT_IA_64_VMS_FIXUP_RELA_OFF)
(DT_IA_64_VMS_PLTGOT_OFFSET, DT_IA_64_VMS_PLTGOT_SEG)
(DT_IA_64_VMS_FPMODE, SHN_IA_64_VMS_SYMVEC): Define
* readelf.c (dump_relocations): Decode OpenVMS-specific sections.
(get_ia64_dynamic_type): Decode OpenVMS-specific tags.
(get_dynamic_type): Handle IA64-specific tags.
(get_ia64_section_type_name): Handle OpenVMS-specific sections.
(get_section_type_name): Handle OS-specific sections (and
particularly IA64 OpenVMS one).
(get_elf_section_flags): Makes flags static. Add entries for IA64 and
decode them.
Diffstat (limited to 'binutils/readelf.c')
-rw-r--r-- | binutils/readelf.c | 106 |
1 files changed, 99 insertions, 7 deletions
diff --git a/binutils/readelf.c b/binutils/readelf.c index 55ab842..404f070 100644 --- a/binutils/readelf.c +++ b/binutils/readelf.c @@ -1329,6 +1329,11 @@ dump_relocations (FILE *file, && elf_header.e_ident[EI_OSABI] == ELFOSABI_HPUX && psym->st_shndx == SHN_IA_64_ANSI_COMMON) sec_name = "ANSI_COM"; + else if (elf_header.e_machine == EM_IA_64 + && (elf_header.e_ident[EI_OSABI] + == ELFOSABI_OPENVMS) + && psym->st_shndx == SHN_IA_64_VMS_SYMVEC) + sec_name = "VMS_SYMVEC"; else { sprintf (name_buf, "<section 0x%x>", @@ -1522,7 +1527,37 @@ get_ia64_dynamic_type (unsigned long type) { switch (type) { - case DT_IA_64_PLT_RESERVE: return "IA_64_PLT_RESERVE"; + case DT_IA_64_PLT_RESERVE: return "IA_64_PLT_RESERVE"; + case DT_IA_64_VMS_SUBTYPE: return "VMS_SUBTYPE"; + case DT_IA_64_VMS_IMGIOCNT: return "VMS_IMGIOCNT"; + case DT_IA_64_VMS_LNKFLAGS: return "VMS_LNKFLAGS"; + case DT_IA_64_VMS_VIR_MEM_BLK_SIZ: return "VMS_VIR_MEM_BLK_SIZ"; + case DT_IA_64_VMS_IDENT: return "VMS_IDENT"; + case DT_IA_64_VMS_NEEDED_IDENT: return "VMS_NEEDED_IDENT"; + case DT_IA_64_VMS_IMG_RELA_CNT: return "VMS_IMG_RELA_CNT"; + case DT_IA_64_VMS_SEG_RELA_CNT: return "VMS_SEG_RELA_CNT"; + case DT_IA_64_VMS_FIXUP_RELA_CNT: return "VMS_FIXUP_RELA_CNT"; + case DT_IA_64_VMS_FIXUP_NEEDED: return "VMS_FIXUP_NEEDED"; + case DT_IA_64_VMS_SYMVEC_CNT: return "VMS_SYMVEC_CNT"; + case DT_IA_64_VMS_XLATED: return "VMS_XLATED"; + case DT_IA_64_VMS_STACKSIZE: return "VMS_STACKSIZE"; + case DT_IA_64_VMS_UNWINDSZ: return "VMS_UNWINDSZ"; + case DT_IA_64_VMS_UNWIND_CODSEG: return "VMS_UNWIND_CODSEG"; + case DT_IA_64_VMS_UNWIND_INFOSEG: return "VMS_UNWIND_INFOSEG"; + case DT_IA_64_VMS_LINKTIME: return "VMS_LINKTIME"; + case DT_IA_64_VMS_SEG_NO: return "VMS_SEG_NO"; + case DT_IA_64_VMS_SYMVEC_OFFSET: return "VMS_SYMVEC_OFFSET"; + case DT_IA_64_VMS_SYMVEC_SEG: return "VMS_SYMVEC_SEG"; + case DT_IA_64_VMS_UNWIND_OFFSET: return "VMS_UNWIND_OFFSET"; + case DT_IA_64_VMS_UNWIND_SEG: return "VMS_UNWIND_SEG"; + case DT_IA_64_VMS_STRTAB_OFFSET: return "VMS_STRTAB_OFFSET"; + case DT_IA_64_VMS_SYSVER_OFFSET: return "VMS_SYSVER_OFFSET"; + case DT_IA_64_VMS_IMG_RELA_OFF: return "VMS_IMG_RELA_OFF"; + case DT_IA_64_VMS_SEG_RELA_OFF: return "VMS_SEG_RELA_OFF"; + case DT_IA_64_VMS_FIXUP_RELA_OFF: return "VMS_FIXUP_RELA_OFF"; + case DT_IA_64_VMS_PLTGOT_OFFSET: return "VMS_PLTGOT_OFFSET"; + case DT_IA_64_VMS_PLTGOT_SEG: return "VMS_PLTGOT_SEG"; + case DT_IA_64_VMS_FPMODE: return "VMS_FPMODE"; default: return NULL; } @@ -1688,6 +1723,9 @@ get_dynamic_type (unsigned long type) case EM_PARISC: result = get_parisc_dynamic_type (type); break; + case EM_IA_64: + result = get_ia64_dynamic_type (type); + break; default: result = NULL; break; @@ -2657,9 +2695,16 @@ get_ia64_section_type_name (unsigned int sh_type) switch (sh_type) { - case SHT_IA_64_EXT: return "IA_64_EXT"; - case SHT_IA_64_UNWIND: return "IA_64_UNWIND"; - case SHT_IA_64_PRIORITY_INIT: return "IA_64_PRIORITY_INIT"; + case SHT_IA_64_EXT: return "IA_64_EXT"; + case SHT_IA_64_UNWIND: return "IA_64_UNWIND"; + case SHT_IA_64_PRIORITY_INIT: return "IA_64_PRIORITY_INIT"; + case SHT_IA_64_VMS_TRACE: return "VMS_TRACE"; + case SHT_IA_64_VMS_TIE_SIGNATURES: return "VMS_TIE_SIGNATURES"; + case SHT_IA_64_VMS_DEBUG: return "VMS_DEBUG"; + case SHT_IA_64_VMS_DEBUG_STR: return "VMS_DEBUG_STR"; + case SHT_IA_64_VMS_LINKAGES: return "VMS_LINKAGES"; + case SHT_IA_64_VMS_SYMBOL_VECTOR: return "VMS_SYMBOL_VECTOR"; + case SHT_IA_64_VMS_FIXUP: return "VMS_FIXUP"; default: break; } @@ -2763,7 +2808,24 @@ get_section_type_name (unsigned int sh_type) sprintf (buff, "LOPROC+%x", sh_type - SHT_LOPROC); } else if ((sh_type >= SHT_LOOS) && (sh_type <= SHT_HIOS)) - sprintf (buff, "LOOS+%x", sh_type - SHT_LOOS); + { + const char *result; + + switch (elf_header.e_machine) + { + case EM_IA_64: + result = get_ia64_section_type_name (sh_type); + break; + default: + result = NULL; + break; + } + + if (result != NULL) + return result; + + sprintf (buff, "LOOS+%x", sh_type - SHT_LOOS); + } else if ((sh_type >= SHT_LOUSER) && (sh_type <= SHT_HIUSER)) sprintf (buff, "LOUSER+%x", sh_type - SHT_LOUSER); else @@ -3908,7 +3970,7 @@ get_elf_section_flags (bfd_vma sh_flags) bfd_vma os_flags = 0; bfd_vma proc_flags = 0; bfd_vma unknown_flags = 0; - const struct + static const struct { const char *str; int len; @@ -3924,7 +3986,17 @@ get_elf_section_flags (bfd_vma sh_flags) { "LINK ORDER", 10 }, { "OS NONCONF", 10 }, { "GROUP", 5 }, - { "TLS", 3 } + { "TLS", 3 }, + /* IA-64 specific. */ + { "SHORT", 5 }, + { "NORECOV", 7 }, + /* IA-64 OpenVMS specific. */ + { "VMS_GLOBAL", 10 }, + { "VMS_OVERLAID", 12 }, + { "VMS_SHARED", 10 }, + { "VMS_VECTOR", 10 }, + { "VMS_ALLOC_64BIT", 15 }, + { "VMS_PROTECTED", 13} }; if (do_section_details) @@ -3958,6 +4030,26 @@ get_elf_section_flags (bfd_vma sh_flags) default: index = -1; + if (elf_header.e_machine == EM_IA_64) + { + if (flag == SHF_IA_64_SHORT) + index = 10; + else if (flag == SHF_IA_64_NORECOV) + index = 11; +#ifdef BFD64 + else if (elf_header.e_ident[EI_OSABI] == ELFOSABI_OPENVMS) + switch (flag) + { + case SHF_IA_64_VMS_GLOBAL: index = 12; break; + case SHF_IA_64_VMS_OVERLAID: index = 13; break; + case SHF_IA_64_VMS_SHARED: index = 14; break; + case SHF_IA_64_VMS_VECTOR: index = 15; break; + case SHF_IA_64_VMS_ALLOC_64BIT: index = 16; break; + case SHF_IA_64_VMS_PROTECTED: index = 17; break; + default: break; + } +#endif + } break; } |