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.
This commit is contained in:
Nick Clifton 2008-01-30 10:37:43 +00:00
parent f43691e395
commit 148b93f236
4 changed files with 206 additions and 13 deletions

View File

@ -1,3 +1,14 @@
2008-01-30 Tristan Gingold <gingold@adacore.com>
* 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.
2008-01-29 Nick Clifton <nickc@redhat.com> 2008-01-29 Nick Clifton <nickc@redhat.com>
* dwarf.c (print_dwarf_vma): New function. Display the value of a * dwarf.c (print_dwarf_vma): New function. Display the value of a

View File

@ -1329,6 +1329,11 @@ dump_relocations (FILE *file,
&& elf_header.e_ident[EI_OSABI] == ELFOSABI_HPUX && elf_header.e_ident[EI_OSABI] == ELFOSABI_HPUX
&& psym->st_shndx == SHN_IA_64_ANSI_COMMON) && psym->st_shndx == SHN_IA_64_ANSI_COMMON)
sec_name = "ANSI_COM"; 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 else
{ {
sprintf (name_buf, "<section 0x%x>", sprintf (name_buf, "<section 0x%x>",
@ -1523,6 +1528,36 @@ get_ia64_dynamic_type (unsigned long type)
switch (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: default:
return NULL; return NULL;
} }
@ -1688,6 +1723,9 @@ get_dynamic_type (unsigned long type)
case EM_PARISC: case EM_PARISC:
result = get_parisc_dynamic_type (type); result = get_parisc_dynamic_type (type);
break; break;
case EM_IA_64:
result = get_ia64_dynamic_type (type);
break;
default: default:
result = NULL; result = NULL;
break; break;
@ -2660,6 +2698,13 @@ get_ia64_section_type_name (unsigned int sh_type)
case SHT_IA_64_EXT: return "IA_64_EXT"; case SHT_IA_64_EXT: return "IA_64_EXT";
case SHT_IA_64_UNWIND: return "IA_64_UNWIND"; case SHT_IA_64_UNWIND: return "IA_64_UNWIND";
case SHT_IA_64_PRIORITY_INIT: return "IA_64_PRIORITY_INIT"; 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: default:
break; break;
} }
@ -2763,7 +2808,24 @@ get_section_type_name (unsigned int sh_type)
sprintf (buff, "LOPROC+%x", sh_type - SHT_LOPROC); sprintf (buff, "LOPROC+%x", sh_type - SHT_LOPROC);
} }
else if ((sh_type >= SHT_LOOS) && (sh_type <= SHT_HIOS)) else if ((sh_type >= SHT_LOOS) && (sh_type <= SHT_HIOS))
{
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); sprintf (buff, "LOOS+%x", sh_type - SHT_LOOS);
}
else if ((sh_type >= SHT_LOUSER) && (sh_type <= SHT_HIUSER)) else if ((sh_type >= SHT_LOUSER) && (sh_type <= SHT_HIUSER))
sprintf (buff, "LOUSER+%x", sh_type - SHT_LOUSER); sprintf (buff, "LOUSER+%x", sh_type - SHT_LOUSER);
else else
@ -3908,7 +3970,7 @@ get_elf_section_flags (bfd_vma sh_flags)
bfd_vma os_flags = 0; bfd_vma os_flags = 0;
bfd_vma proc_flags = 0; bfd_vma proc_flags = 0;
bfd_vma unknown_flags = 0; bfd_vma unknown_flags = 0;
const struct static const struct
{ {
const char *str; const char *str;
int len; int len;
@ -3924,7 +3986,17 @@ get_elf_section_flags (bfd_vma sh_flags)
{ "LINK ORDER", 10 }, { "LINK ORDER", 10 },
{ "OS NONCONF", 10 }, { "OS NONCONF", 10 },
{ "GROUP", 5 }, { "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) if (do_section_details)
@ -3958,6 +4030,26 @@ get_elf_section_flags (bfd_vma sh_flags)
default: default:
index = -1; 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; break;
} }

View File

@ -1,3 +1,29 @@
2008-01-30 Tristan Gingold <gingold@adacore.com>
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
2008-01-16 Mark Kettenis <kettenis@gnu.org> 2008-01-16 Mark Kettenis <kettenis@gnu.org>
* common.h (AT_SUN_AUXFLAGS): Define. * common.h (AT_SUN_AUXFLAGS): Define.

View File

@ -1,5 +1,5 @@
/* IA-64 ELF support for BFD. /* IA-64 ELF support for BFD.
Copyright 1998, 1999, 2000, 2001, 2002, 2003 Copyright 1998, 1999, 2000, 2001, 2002, 2003, 2008
Free Software Foundation, Inc. Free Software Foundation, Inc.
Contributed by David Mosberger-Tang <davidm@hpl.hp.com> Contributed by David Mosberger-Tang <davidm@hpl.hp.com>
@ -59,6 +59,13 @@
#define SHF_IA_64_HP_TLS 0x01000000 /* HP specific TLS flag. */ #define SHF_IA_64_HP_TLS 0x01000000 /* HP specific TLS flag. */
#define SHF_IA_64_VMS_GLOBAL 0x0100000000ULL /* Global for clustering. */
#define SHF_IA_64_VMS_OVERLAID 0x0200000000ULL /* To be overlaid. */
#define SHF_IA_64_VMS_SHARED 0x0400000000ULL /* Shared btw processes. */
#define SHF_IA_64_VMS_VECTOR 0x0800000000ULL /* Priv change mode vect. */
#define SHF_IA_64_VMS_ALLOC_64BIT 0x1000000000ULL /* Allocate beyond 2GB. */
#define SHF_IA_64_VMS_PROTECTED 0x2000000000ULL /* Export from sharable. */
/* Possible values for sh_type in Elf64_Shdr: */ /* Possible values for sh_type in Elf64_Shdr: */
#define SHT_IA_64_EXT (SHT_LOPROC + 0) /* Extension bits. */ #define SHT_IA_64_EXT (SHT_LOPROC + 0) /* Extension bits. */
@ -74,6 +81,26 @@
annotate or sed will turn it into 32 or 64 during the build. */ annotate or sed will turn it into 32 or 64 during the build. */
#define SHT_IA_64_HP_OPT_ANOT 0x60000004 #define SHT_IA_64_HP_OPT_ANOT 0x60000004
/* OpenVMS section types. */
/* The section contains PC-to-source correlation information for use by the
VMS RTL's traceback facility. */
#define SHT_IA_64_VMS_TRACE 0x60000000
/* The section contains routine signature information for use by the
translated image executive. */
#define SHT_IA_64_VMS_TIE_SIGNATURES 0x60000001
/* The section contains dwarf-3 information. */
#define SHT_IA_64_VMS_DEBUG 0x60000002
/* The section contains the dwarf-3 string table. */
#define SHT_IA_64_VMS_DEBUG_STR 0x60000003
/* The section contains linkage information to perform consistency checking
accross object modules. */
#define SHT_IA_64_VMS_LINKAGES 0x60000004
/* The section allows the symbol vector in an image to be location through
the section table. */
#define SHT_IA_64_VMS_SYMBOL_VECTOR 0x60000005
/* The section contains inter-image fixups. */
#define SHT_IA_64_VMS_FIXUP 0x60000006
/* Bits in the p_flags field of Elf64_Phdr: */ /* Bits in the p_flags field of Elf64_Phdr: */
#define PF_IA_64_NORECOV 0x80000000 #define PF_IA_64_NORECOV 0x80000000
@ -95,11 +122,48 @@
#define DT_IA_64_PLT_RESERVE (DT_LOPROC + 0) #define DT_IA_64_PLT_RESERVE (DT_LOPROC + 0)
/* VMS specific values for d_tag in Elf64_Dyn: */
#define DT_IA_64_VMS_SUBTYPE (DT_LOOS + 0)
#define DT_IA_64_VMS_IMGIOCNT (DT_LOOS + 2)
#define DT_IA_64_VMS_LNKFLAGS (DT_LOOS + 8)
#define DT_IA_64_VMS_VIR_MEM_BLK_SIZ (DT_LOOS + 10)
#define DT_IA_64_VMS_IDENT (DT_LOOS + 12)
#define DT_IA_64_VMS_NEEDED_IDENT (DT_LOOS + 16)
#define DT_IA_64_VMS_IMG_RELA_CNT (DT_LOOS + 18)
#define DT_IA_64_VMS_SEG_RELA_CNT (DT_LOOS + 20)
#define DT_IA_64_VMS_FIXUP_RELA_CNT (DT_LOOS + 22)
#define DT_IA_64_VMS_FIXUP_NEEDED (DT_LOOS + 24)
#define DT_IA_64_VMS_SYMVEC_CNT (DT_LOOS + 26)
#define DT_IA_64_VMS_XLATED (DT_LOOS + 30)
#define DT_IA_64_VMS_STACKSIZE (DT_LOOS + 32)
#define DT_IA_64_VMS_UNWINDSZ (DT_LOOS + 34)
#define DT_IA_64_VMS_UNWIND_CODSEG (DT_LOOS + 36)
#define DT_IA_64_VMS_UNWIND_INFOSEG (DT_LOOS + 38)
#define DT_IA_64_VMS_LINKTIME (DT_LOOS + 40)
#define DT_IA_64_VMS_SEG_NO (DT_LOOS + 42)
#define DT_IA_64_VMS_SYMVEC_OFFSET (DT_LOOS + 44)
#define DT_IA_64_VMS_SYMVEC_SEG (DT_LOOS + 46)
#define DT_IA_64_VMS_UNWIND_OFFSET (DT_LOOS + 48)
#define DT_IA_64_VMS_UNWIND_SEG (DT_LOOS + 50)
#define DT_IA_64_VMS_STRTAB_OFFSET (DT_LOOS + 52)
#define DT_IA_64_VMS_SYSVER_OFFSET (DT_LOOS + 54)
#define DT_IA_64_VMS_IMG_RELA_OFF (DT_LOOS + 56)
#define DT_IA_64_VMS_SEG_RELA_OFF (DT_LOOS + 58)
#define DT_IA_64_VMS_FIXUP_RELA_OFF (DT_LOOS + 60)
#define DT_IA_64_VMS_PLTGOT_OFFSET (DT_LOOS + 62)
#define DT_IA_64_VMS_PLTGOT_SEG (DT_LOOS + 64)
#define DT_IA_64_VMS_FPMODE (DT_LOOS + 66)
/* This section only used by HP-UX, The HP linker gives weak symbols /* This section only used by HP-UX, The HP linker gives weak symbols
precedence over regular common symbols. We want common to override precedence over regular common symbols. We want common to override
weak. Using this common instead of SHN_COMMON does that. */ weak. Using this common instead of SHN_COMMON does that. */
#define SHN_IA_64_ANSI_COMMON 0xFF00 #define SHN_IA_64_ANSI_COMMON 0xFF00
/* This section is only used by OpenVMS. Symbol is defined in the symbol
vector (only possible for image files). */
#define SHN_IA_64_VMS_SYMVEC 0xff20
/* IA64-specific relocation types: */ /* IA64-specific relocation types: */
/* Relocs apply to specific instructions within a bundle. The least /* Relocs apply to specific instructions within a bundle. The least