| Index: bfd/elfnn-ia64.c
|
| diff --git a/bfd/elfnn-ia64.c b/bfd/elfnn-ia64.c
|
| index 3e2ee0b030f1881e8e4090df5777aecb028b62a0..7021ff5355907263eac116b34256eacb81cfb98d 100644
|
| --- a/bfd/elfnn-ia64.c
|
| +++ b/bfd/elfnn-ia64.c
|
| @@ -1,6 +1,6 @@
|
| /* IA-64 support for 64-bit ELF
|
| Copyright 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007,
|
| - 2008, 2009, 2010, 2011 Free Software Foundation, Inc.
|
| + 2008, 2009, 2010, 2011, 2012 Free Software Foundation, Inc.
|
| Contributed by David Mosberger-Tang <davidm@hpl.hp.com>
|
|
|
| This file is part of BFD, the Binary File Descriptor library.
|
| @@ -41,14 +41,6 @@
|
| #define LOG_SECTION_ALIGN 2
|
| #endif
|
|
|
| -/* Only add code for vms when the vms target is enabled. This is required
|
| - because it depends on vms-lib.c for its archive format and we don't want
|
| - to compile that code if it is not used. */
|
| -#if ARCH_SIZE == 64 && \
|
| - (defined (HAVE_bfd_elf64_ia64_vms_vec) || defined (HAVE_all_vecs))
|
| -#define INCLUDE_IA64_VMS
|
| -#endif
|
| -
|
| typedef struct bfd_hash_entry *(*new_hash_entry_func)
|
| (struct bfd_hash_entry *, struct bfd_hash_table *, const char *);
|
|
|
| @@ -186,18 +178,18 @@ static bfd_boolean elfNN_ia64_choose_gp
|
| (bfd *abfd, struct bfd_link_info *info, bfd_boolean final);
|
| static void elfNN_ia64_dyn_sym_traverse
|
| (struct elfNN_ia64_link_hash_table *ia64_info,
|
| - bfd_boolean (*func) (struct elfNN_ia64_dyn_sym_info *, PTR),
|
| - PTR info);
|
| + bfd_boolean (*func) (struct elfNN_ia64_dyn_sym_info *, void *),
|
| + void * info);
|
| static bfd_boolean allocate_global_data_got
|
| - (struct elfNN_ia64_dyn_sym_info *dyn_i, PTR data);
|
| + (struct elfNN_ia64_dyn_sym_info *dyn_i, void * data);
|
| static bfd_boolean allocate_global_fptr_got
|
| - (struct elfNN_ia64_dyn_sym_info *dyn_i, PTR data);
|
| + (struct elfNN_ia64_dyn_sym_info *dyn_i, void * data);
|
| static bfd_boolean allocate_local_got
|
| - (struct elfNN_ia64_dyn_sym_info *dyn_i, PTR data);
|
| + (struct elfNN_ia64_dyn_sym_info *dyn_i, void * data);
|
| static bfd_boolean elfNN_ia64_hpux_vec
|
| (const bfd_target *vec);
|
| static bfd_boolean allocate_dynrel_entries
|
| - (struct elfNN_ia64_dyn_sym_info *dyn_i, PTR data);
|
| + (struct elfNN_ia64_dyn_sym_info *dyn_i, void * data);
|
| static asection *get_pltoff
|
| (bfd *abfd, struct bfd_link_info *info,
|
| struct elfNN_ia64_link_hash_table *ia64_info);
|
| @@ -530,7 +522,7 @@ elfNN_ia64_relax_section (bfd *abfd, asection *sec,
|
| symtype = h->type;
|
| }
|
|
|
| - if (tsec->sec_info_type == ELF_INFO_TYPE_MERGE)
|
| + if (tsec->sec_info_type == SEC_INFO_TYPE_MERGE)
|
| {
|
| /* At this stage in linking, no SEC_MERGE symbol has been
|
| adjusted, so all references to such symbols need to be
|
| @@ -1416,7 +1408,7 @@ elfNN_ia64_hash_table_create (bfd *abfd)
|
|
|
| static bfd_boolean
|
| elfNN_ia64_global_dyn_info_free (void **xentry,
|
| - PTR unused ATTRIBUTE_UNUSED)
|
| + void * unused ATTRIBUTE_UNUSED)
|
| {
|
| struct elfNN_ia64_link_hash_entry *entry
|
| = (struct elfNN_ia64_link_hash_entry *) xentry;
|
| @@ -1437,7 +1429,7 @@ elfNN_ia64_global_dyn_info_free (void **xentry,
|
|
|
| static bfd_boolean
|
| elfNN_ia64_local_dyn_info_free (void **slot,
|
| - PTR unused ATTRIBUTE_UNUSED)
|
| + void * unused ATTRIBUTE_UNUSED)
|
| {
|
| struct elfNN_ia64_local_hash_entry *entry
|
| = (struct elfNN_ia64_local_hash_entry *) *slot;
|
| @@ -1478,13 +1470,13 @@ elfNN_ia64_hash_table_free (struct bfd_link_hash_table *hash)
|
|
|
| struct elfNN_ia64_dyn_sym_traverse_data
|
| {
|
| - bfd_boolean (*func) (struct elfNN_ia64_dyn_sym_info *, PTR);
|
| - PTR data;
|
| + bfd_boolean (*func) (struct elfNN_ia64_dyn_sym_info *, void *);
|
| + void * data;
|
| };
|
|
|
| static bfd_boolean
|
| elfNN_ia64_global_dyn_sym_thunk (struct bfd_hash_entry *xentry,
|
| - PTR xdata)
|
| + void * xdata)
|
| {
|
| struct elfNN_ia64_link_hash_entry *entry
|
| = (struct elfNN_ia64_link_hash_entry *) xentry;
|
| @@ -1502,7 +1494,7 @@ elfNN_ia64_global_dyn_sym_thunk (struct bfd_hash_entry *xentry,
|
| }
|
|
|
| static bfd_boolean
|
| -elfNN_ia64_local_dyn_sym_thunk (void **slot, PTR xdata)
|
| +elfNN_ia64_local_dyn_sym_thunk (void **slot, void * xdata)
|
| {
|
| struct elfNN_ia64_local_hash_entry *entry
|
| = (struct elfNN_ia64_local_hash_entry *) *slot;
|
| @@ -1521,8 +1513,8 @@ elfNN_ia64_local_dyn_sym_thunk (void **slot, PTR xdata)
|
|
|
| static void
|
| elfNN_ia64_dyn_sym_traverse (struct elfNN_ia64_link_hash_table *ia64_info,
|
| - bfd_boolean (*func) (struct elfNN_ia64_dyn_sym_info *, PTR),
|
| - PTR data)
|
| + bfd_boolean (*func) (struct elfNN_ia64_dyn_sym_info *, void *),
|
| + void * data)
|
| {
|
| struct elfNN_ia64_dyn_sym_traverse_data xdata;
|
|
|
| @@ -1560,12 +1552,12 @@ elfNN_ia64_create_dynamic_sections (bfd *abfd,
|
| if (!get_pltoff (abfd, info, ia64_info))
|
| return FALSE;
|
|
|
| - s = bfd_make_section_with_flags (abfd, ".rela.IA_64.pltoff",
|
| - (SEC_ALLOC | SEC_LOAD
|
| - | SEC_HAS_CONTENTS
|
| - | SEC_IN_MEMORY
|
| - | SEC_LINKER_CREATED
|
| - | SEC_READONLY));
|
| + s = bfd_make_section_anyway_with_flags (abfd, ".rela.IA_64.pltoff",
|
| + (SEC_ALLOC | SEC_LOAD
|
| + | SEC_HAS_CONTENTS
|
| + | SEC_IN_MEMORY
|
| + | SEC_LINKER_CREATED
|
| + | SEC_READONLY));
|
| if (s == NULL
|
| || !bfd_set_section_alignment (abfd, s, LOG_SECTION_ALIGN))
|
| return FALSE;
|
| @@ -1994,13 +1986,14 @@ get_fptr (bfd *abfd, struct bfd_link_info *info,
|
| if (!dynobj)
|
| ia64_info->root.dynobj = dynobj = abfd;
|
|
|
| - fptr = bfd_make_section_with_flags (dynobj, ".opd",
|
| - (SEC_ALLOC
|
| - | SEC_LOAD
|
| - | SEC_HAS_CONTENTS
|
| - | SEC_IN_MEMORY
|
| - | (info->pie ? 0 : SEC_READONLY)
|
| - | SEC_LINKER_CREATED));
|
| + fptr = bfd_make_section_anyway_with_flags (dynobj, ".opd",
|
| + (SEC_ALLOC
|
| + | SEC_LOAD
|
| + | SEC_HAS_CONTENTS
|
| + | SEC_IN_MEMORY
|
| + | (info->pie ? 0
|
| + : SEC_READONLY)
|
| + | SEC_LINKER_CREATED));
|
| if (!fptr
|
| || !bfd_set_section_alignment (abfd, fptr, 4))
|
| {
|
| @@ -2013,12 +2006,12 @@ get_fptr (bfd *abfd, struct bfd_link_info *info,
|
| if (info->pie)
|
| {
|
| asection *fptr_rel;
|
| - fptr_rel = bfd_make_section_with_flags (dynobj, ".rela.opd",
|
| - (SEC_ALLOC | SEC_LOAD
|
| - | SEC_HAS_CONTENTS
|
| - | SEC_IN_MEMORY
|
| - | SEC_LINKER_CREATED
|
| - | SEC_READONLY));
|
| + fptr_rel = bfd_make_section_anyway_with_flags (dynobj, ".rela.opd",
|
| + (SEC_ALLOC | SEC_LOAD
|
| + | SEC_HAS_CONTENTS
|
| + | SEC_IN_MEMORY
|
| + | SEC_LINKER_CREATED
|
| + | SEC_READONLY));
|
| if (fptr_rel == NULL
|
| || !bfd_set_section_alignment (abfd, fptr_rel,
|
| LOG_SECTION_ALIGN))
|
| @@ -2048,14 +2041,14 @@ get_pltoff (bfd *abfd, struct bfd_link_info *info ATTRIBUTE_UNUSED,
|
| if (!dynobj)
|
| ia64_info->root.dynobj = dynobj = abfd;
|
|
|
| - pltoff = bfd_make_section_with_flags (dynobj,
|
| - ELF_STRING_ia64_pltoff,
|
| - (SEC_ALLOC
|
| - | SEC_LOAD
|
| - | SEC_HAS_CONTENTS
|
| - | SEC_IN_MEMORY
|
| - | SEC_SMALL_DATA
|
| - | SEC_LINKER_CREATED));
|
| + pltoff = bfd_make_section_anyway_with_flags (dynobj,
|
| + ELF_STRING_ia64_pltoff,
|
| + (SEC_ALLOC
|
| + | SEC_LOAD
|
| + | SEC_HAS_CONTENTS
|
| + | SEC_IN_MEMORY
|
| + | SEC_SMALL_DATA
|
| + | SEC_LINKER_CREATED));
|
| if (!pltoff
|
| || !bfd_set_section_alignment (abfd, pltoff, 4))
|
| {
|
| @@ -2088,15 +2081,15 @@ get_reloc_section (bfd *abfd,
|
| if (!dynobj)
|
| ia64_info->root.dynobj = dynobj = abfd;
|
|
|
| - srel = bfd_get_section_by_name (dynobj, srel_name);
|
| + srel = bfd_get_linker_section (dynobj, srel_name);
|
| if (srel == NULL && create)
|
| {
|
| - srel = bfd_make_section_with_flags (dynobj, srel_name,
|
| - (SEC_ALLOC | SEC_LOAD
|
| - | SEC_HAS_CONTENTS
|
| - | SEC_IN_MEMORY
|
| - | SEC_LINKER_CREATED
|
| - | SEC_READONLY));
|
| + srel = bfd_make_section_anyway_with_flags (dynobj, srel_name,
|
| + (SEC_ALLOC | SEC_LOAD
|
| + | SEC_HAS_CONTENTS
|
| + | SEC_IN_MEMORY
|
| + | SEC_LINKER_CREATED
|
| + | SEC_READONLY));
|
| if (srel == NULL
|
| || !bfd_set_section_alignment (dynobj, srel,
|
| LOG_SECTION_ALIGN))
|
| @@ -2666,7 +2659,7 @@ allocate_global_fptr_got (struct elfNN_ia64_dyn_sym_info *dyn_i,
|
|
|
| static bfd_boolean
|
| allocate_local_got (struct elfNN_ia64_dyn_sym_info *dyn_i,
|
| - PTR data)
|
| + void * data)
|
| {
|
| struct elfNN_ia64_allocate_data *x = (struct elfNN_ia64_allocate_data *)data;
|
|
|
| @@ -2701,7 +2694,7 @@ global_sym_index (struct elf_link_hash_entry *h)
|
| in a main executable that is not exported. */
|
|
|
| static bfd_boolean
|
| -allocate_fptr (struct elfNN_ia64_dyn_sym_info *dyn_i, PTR data)
|
| +allocate_fptr (struct elfNN_ia64_dyn_sym_info *dyn_i, void * data)
|
| {
|
| struct elfNN_ia64_allocate_data *x = (struct elfNN_ia64_allocate_data *)data;
|
|
|
| @@ -2748,7 +2741,7 @@ allocate_fptr (struct elfNN_ia64_dyn_sym_info *dyn_i, PTR data)
|
|
|
| static bfd_boolean
|
| allocate_plt_entries (struct elfNN_ia64_dyn_sym_info *dyn_i,
|
| - PTR data)
|
| + void * data)
|
| {
|
| struct elfNN_ia64_allocate_data *x = (struct elfNN_ia64_allocate_data *)data;
|
|
|
| @@ -2785,7 +2778,7 @@ allocate_plt_entries (struct elfNN_ia64_dyn_sym_info *dyn_i,
|
|
|
| static bfd_boolean
|
| allocate_plt2_entries (struct elfNN_ia64_dyn_sym_info *dyn_i,
|
| - PTR data)
|
| + void * data)
|
| {
|
| struct elfNN_ia64_allocate_data *x = (struct elfNN_ia64_allocate_data *)data;
|
|
|
| @@ -2812,7 +2805,7 @@ allocate_plt2_entries (struct elfNN_ia64_dyn_sym_info *dyn_i,
|
|
|
| static bfd_boolean
|
| allocate_pltoff_entries (struct elfNN_ia64_dyn_sym_info *dyn_i,
|
| - PTR data)
|
| + void * data)
|
| {
|
| struct elfNN_ia64_allocate_data *x = (struct elfNN_ia64_allocate_data *)data;
|
|
|
| @@ -2829,7 +2822,7 @@ allocate_pltoff_entries (struct elfNN_ia64_dyn_sym_info *dyn_i,
|
|
|
| static bfd_boolean
|
| allocate_dynrel_entries (struct elfNN_ia64_dyn_sym_info *dyn_i,
|
| - PTR data)
|
| + void * data)
|
| {
|
| struct elfNN_ia64_allocate_data *x = (struct elfNN_ia64_allocate_data *)data;
|
| struct elfNN_ia64_link_hash_table *ia64_info;
|
| @@ -2996,7 +2989,7 @@ elfNN_ia64_size_dynamic_sections (bfd *output_bfd ATTRIBUTE_UNUSED,
|
| if (ia64_info->root.dynamic_sections_created
|
| && info->executable)
|
| {
|
| - sec = bfd_get_section_by_name (dynobj, ".interp");
|
| + sec = bfd_get_linker_section (dynobj, ".interp");
|
| BFD_ASSERT (sec != NULL);
|
| sec->contents = (bfd_byte *) ELF_DYNAMIC_INTERPRETER;
|
| sec->size = strlen (ELF_DYNAMIC_INTERPRETER) + 1;
|
| @@ -3053,7 +3046,7 @@ elfNN_ia64_size_dynamic_sections (bfd *output_bfd ATTRIBUTE_UNUSED,
|
|
|
| /* If we've got a .plt, we need some extra memory for the dynamic
|
| linker. We stuff these in .got.plt. */
|
| - sec = bfd_get_section_by_name (dynobj, ".got.plt");
|
| + sec = bfd_get_linker_section (dynobj, ".got.plt");
|
| sec->size = 8 * PLT_RESERVED_WORDS;
|
| }
|
|
|
| @@ -3544,7 +3537,7 @@ elfNN_ia64_dtprel_base (struct bfd_link_info *info)
|
| static bfd *elfNN_ia64_unwind_entry_compare_bfd;
|
|
|
| static int
|
| -elfNN_ia64_unwind_entry_compare (const PTR a, const PTR b)
|
| +elfNN_ia64_unwind_entry_compare (const void * a, const void * b)
|
| {
|
| bfd_vma av, bv;
|
|
|
| @@ -3861,7 +3854,7 @@ elfNN_ia64_relocate_section (bfd *output_bfd,
|
| if (!info->relocatable
|
| && (sym_sec->flags & SEC_MERGE) != 0
|
| && ELF_ST_TYPE (sym->st_info) == STT_SECTION
|
| - && sym_sec->sec_info_type == ELF_INFO_TYPE_MERGE)
|
| + && sym_sec->sec_info_type == SEC_INFO_TYPE_MERGE)
|
| {
|
| struct elfNN_ia64_local_hash_entry *loc_h;
|
|
|
| @@ -3919,9 +3912,9 @@ elfNN_ia64_relocate_section (bfd *output_bfd,
|
| continue;
|
| }
|
|
|
| - if (sym_sec != NULL && elf_discarded_section (sym_sec))
|
| + if (sym_sec != NULL && discarded_section (sym_sec))
|
| RELOC_AGAINST_DISCARDED_SECTION (info, input_bfd, input_section,
|
| - rel, relend, howto, contents);
|
| + rel, 1, relend, howto, 0, contents);
|
|
|
| if (info->relocatable)
|
| continue;
|
| @@ -4620,8 +4613,8 @@ elfNN_ia64_finish_dynamic_sections (bfd *abfd,
|
| asection *sdyn, *sgotplt;
|
| bfd_vma gp_val;
|
|
|
| - sdyn = bfd_get_section_by_name (dynobj, ".dynamic");
|
| - sgotplt = bfd_get_section_by_name (dynobj, ".got.plt");
|
| + sdyn = bfd_get_linker_section (dynobj, ".dynamic");
|
| + sgotplt = bfd_get_linker_section (dynobj, ".got.plt");
|
| BFD_ASSERT (sdyn != NULL);
|
| dyncon = (ElfNN_External_Dyn *) sdyn->contents;
|
| dynconend = (ElfNN_External_Dyn *) (sdyn->contents + sdyn->size);
|
| @@ -4793,7 +4786,7 @@ elfNN_ia64_merge_private_bfd_data (bfd *ibfd, bfd *obfd)
|
| }
|
|
|
| static bfd_boolean
|
| -elfNN_ia64_print_private_bfd_data (bfd *abfd, PTR ptr)
|
| +elfNN_ia64_print_private_bfd_data (bfd *abfd, void * ptr)
|
| {
|
| FILE *file = (FILE *) ptr;
|
| flagword flags = elf_elfheader (abfd)->e_flags;
|
| @@ -4978,268 +4971,6 @@ elfNN_hpux_backend_symbol_processing (bfd *abfd ATTRIBUTE_UNUSED,
|
| break;
|
| }
|
| }
|
| -
|
| -#ifdef INCLUDE_IA64_VMS
|
| -
|
| -static bfd_boolean
|
| -elfNN_vms_section_from_shdr (bfd *abfd,
|
| - Elf_Internal_Shdr *hdr,
|
| - const char *name,
|
| - int shindex)
|
| -{
|
| - switch (hdr->sh_type)
|
| - {
|
| - case SHT_IA_64_VMS_TRACE:
|
| - case SHT_IA_64_VMS_DEBUG:
|
| - case SHT_IA_64_VMS_DEBUG_STR:
|
| - break;
|
| -
|
| - default:
|
| - return elfNN_ia64_section_from_shdr (abfd, hdr, name, shindex);
|
| - }
|
| -
|
| - if (! _bfd_elf_make_section_from_shdr (abfd, hdr, name, shindex))
|
| - return FALSE;
|
| -
|
| - return TRUE;
|
| -}
|
| -
|
| -static bfd_boolean
|
| -elfNN_vms_object_p (bfd *abfd)
|
| -{
|
| - Elf_Internal_Ehdr *i_ehdrp = elf_elfheader (abfd);
|
| - Elf_Internal_Phdr *i_phdr = elf_tdata (abfd)->phdr;
|
| - unsigned int i;
|
| - unsigned int num_text = 0;
|
| - unsigned int num_data = 0;
|
| - unsigned int num_rodata = 0;
|
| - char name[16];
|
| -
|
| - if (!elfNN_ia64_object_p (abfd))
|
| - return FALSE;
|
| -
|
| - for (i = 0; i < i_ehdrp->e_phnum; i++, i_phdr++)
|
| - {
|
| - /* Is there a section for this segment? */
|
| - bfd_vma base_vma = i_phdr->p_vaddr;
|
| - bfd_vma limit_vma = base_vma + i_phdr->p_filesz;
|
| -
|
| - if (i_phdr->p_type != PT_LOAD)
|
| - continue;
|
| -
|
| - again:
|
| - while (base_vma < limit_vma)
|
| - {
|
| - bfd_vma next_vma = limit_vma;
|
| - asection *nsec;
|
| - asection *sec;
|
| - flagword flags;
|
| - char *nname = NULL;
|
| -
|
| - /* Find a section covering base_vma. */
|
| - for (sec = abfd->sections; sec != NULL; sec = sec->next)
|
| - {
|
| - if ((sec->flags & (SEC_ALLOC | SEC_LOAD)) == 0)
|
| - continue;
|
| - if (sec->vma <= base_vma && sec->vma + sec->size > base_vma)
|
| - {
|
| - base_vma = sec->vma + sec->size;
|
| - goto again;
|
| - }
|
| - if (sec->vma < next_vma && sec->vma + sec->size >= base_vma)
|
| - next_vma = sec->vma;
|
| - }
|
| -
|
| - /* No section covering [base_vma; next_vma). Create a fake one. */
|
| - flags = SEC_ALLOC | SEC_LOAD | SEC_HAS_CONTENTS;
|
| - if (i_phdr->p_flags & PF_X)
|
| - {
|
| - flags |= SEC_CODE;
|
| - if (num_text++ == 0)
|
| - nname = ".text";
|
| - else
|
| - sprintf (name, ".text$%u", num_text);
|
| - }
|
| - else if ((i_phdr->p_flags & (PF_R | PF_W)) == PF_R)
|
| - {
|
| - flags |= SEC_READONLY;
|
| - sprintf (name, ".rodata$%u", num_rodata++);
|
| - }
|
| - else
|
| - {
|
| - flags |= SEC_DATA;
|
| - sprintf (name, ".data$%u", num_data++);
|
| - }
|
| -
|
| - /* Allocate name. */
|
| - if (nname == NULL)
|
| - {
|
| - size_t name_len = strlen (name) + 1;
|
| - nname = bfd_alloc (abfd, name_len);
|
| - if (nname == NULL)
|
| - return FALSE;
|
| - memcpy (nname, name, name_len);
|
| - }
|
| -
|
| - /* Create and fill new section. */
|
| - nsec = bfd_make_section_anyway_with_flags (abfd, nname, flags);
|
| - if (nsec == NULL)
|
| - return FALSE;
|
| - nsec->vma = base_vma;
|
| - nsec->size = next_vma - base_vma;
|
| - nsec->filepos = i_phdr->p_offset + (base_vma - i_phdr->p_vaddr);
|
| -
|
| - base_vma = next_vma;
|
| - }
|
| - }
|
| - return TRUE;
|
| -}
|
| -
|
| -static void
|
| -elfNN_vms_post_process_headers (bfd *abfd,
|
| - struct bfd_link_info *info ATTRIBUTE_UNUSED)
|
| -{
|
| - Elf_Internal_Ehdr *i_ehdrp = elf_elfheader (abfd);
|
| -
|
| - i_ehdrp->e_ident[EI_OSABI] = ELFOSABI_OPENVMS;
|
| - i_ehdrp->e_ident[EI_ABIVERSION] = 2;
|
| -}
|
| -
|
| -static bfd_boolean
|
| -elfNN_vms_section_processing (bfd *abfd ATTRIBUTE_UNUSED,
|
| - Elf_Internal_Shdr *hdr)
|
| -{
|
| - if (hdr->bfd_section != NULL)
|
| - {
|
| - const char *name = bfd_get_section_name (abfd, hdr->bfd_section);
|
| -
|
| - if (strcmp (name, ".text") == 0)
|
| - hdr->sh_flags |= SHF_IA_64_VMS_SHARED;
|
| - else if ((strcmp (name, ".debug") == 0)
|
| - || (strcmp (name, ".debug_abbrev") == 0)
|
| - || (strcmp (name, ".debug_aranges") == 0)
|
| - || (strcmp (name, ".debug_frame") == 0)
|
| - || (strcmp (name, ".debug_info") == 0)
|
| - || (strcmp (name, ".debug_loc") == 0)
|
| - || (strcmp (name, ".debug_macinfo") == 0)
|
| - || (strcmp (name, ".debug_pubnames") == 0)
|
| - || (strcmp (name, ".debug_pubtypes") == 0))
|
| - hdr->sh_type = SHT_IA_64_VMS_DEBUG;
|
| - else if ((strcmp (name, ".debug_line") == 0)
|
| - || (strcmp (name, ".debug_ranges") == 0))
|
| - hdr->sh_type = SHT_IA_64_VMS_TRACE;
|
| - else if (strcmp (name, ".debug_str") == 0)
|
| - hdr->sh_type = SHT_IA_64_VMS_DEBUG_STR;
|
| - else if (strcmp (name, ".vms_display_name_info") == 0)
|
| - {
|
| - int idx, symcount;
|
| - asymbol **syms;
|
| - struct elf_obj_tdata *t = elf_tdata (abfd);
|
| - int buf[2];
|
| - int demangler_sym_idx = -1;
|
| -
|
| - symcount = bfd_get_symcount (abfd);
|
| - syms = bfd_get_outsymbols (abfd);
|
| - for (idx = 0; idx < symcount; idx++)
|
| - {
|
| - asymbol *sym;
|
| - sym = syms[idx];
|
| - if ((sym->flags & (BSF_DEBUGGING | BSF_DYNAMIC))
|
| - && strchr (sym->name, '@')
|
| - && (strcmp (sym->section->name, BFD_ABS_SECTION_NAME) == 0))
|
| - {
|
| - demangler_sym_idx = sym->udata.i;
|
| - break;
|
| - }
|
| - }
|
| -
|
| - hdr->sh_type = SHT_IA_64_VMS_DISPLAY_NAME_INFO;
|
| - hdr->sh_entsize = 4;
|
| - hdr->sh_addralign = 0;
|
| - hdr->sh_link = t->symtab_section;
|
| -
|
| - /* Find symtab index of demangler routine and stuff it in
|
| - the second long word of section data. */
|
| -
|
| - if (demangler_sym_idx > -1)
|
| - {
|
| - bfd_seek (abfd, hdr->sh_offset, SEEK_SET);
|
| - bfd_bread (buf, hdr->sh_size, abfd);
|
| - buf [1] = demangler_sym_idx;
|
| - bfd_seek (abfd, hdr->sh_offset, SEEK_SET);
|
| - bfd_bwrite (buf, hdr->sh_size, abfd);
|
| - }
|
| - }
|
| - }
|
| -
|
| - return TRUE;
|
| -}
|
| -
|
| -/* The final processing done just before writing out a VMS IA-64 ELF
|
| - object file. */
|
| -
|
| -static void
|
| -elfNN_vms_final_write_processing (bfd *abfd,
|
| - bfd_boolean linker ATTRIBUTE_UNUSED)
|
| -{
|
| - Elf_Internal_Shdr *hdr;
|
| - asection *s;
|
| - int unwind_info_sect_idx = 0;
|
| -
|
| - for (s = abfd->sections; s; s = s->next)
|
| - {
|
| - hdr = &elf_section_data (s)->this_hdr;
|
| -
|
| - if (strcmp (bfd_get_section_name (abfd, hdr->bfd_section),
|
| - ".IA_64.unwind_info") == 0)
|
| - unwind_info_sect_idx = elf_section_data (s)->this_idx;
|
| -
|
| - switch (hdr->sh_type)
|
| - {
|
| - case SHT_IA_64_UNWIND:
|
| - /* VMS requires sh_info to point to the unwind info section. */
|
| - hdr->sh_info = unwind_info_sect_idx;
|
| - break;
|
| - }
|
| - }
|
| -
|
| - if (! elf_flags_init (abfd))
|
| - {
|
| - unsigned long flags = 0;
|
| -
|
| - if (abfd->xvec->byteorder == BFD_ENDIAN_BIG)
|
| - flags |= EF_IA_64_BE;
|
| - if (bfd_get_mach (abfd) == bfd_mach_ia64_elf64)
|
| - flags |= EF_IA_64_ABI64;
|
| -
|
| - elf_elfheader(abfd)->e_flags = flags;
|
| - elf_flags_init (abfd) = TRUE;
|
| - }
|
| -}
|
| -
|
| -static bfd_boolean
|
| -elfNN_vms_close_and_cleanup (bfd *abfd)
|
| -{
|
| - if (bfd_get_format (abfd) == bfd_object)
|
| - {
|
| - long isize, irsize;
|
| -
|
| - if (elf_shstrtab (abfd) != NULL)
|
| - _bfd_elf_strtab_free (elf_shstrtab (abfd));
|
| -
|
| - /* Pad to 8 byte boundary for IPF/VMS. */
|
| - isize = bfd_get_size (abfd);
|
| - if ((irsize = isize/8*8) < isize)
|
| - {
|
| - int ishort = (irsize + 8) - isize;
|
| - bfd_seek (abfd, isize, SEEK_SET);
|
| - bfd_bwrite (bfd_zmalloc (ishort), ishort, abfd);
|
| - }
|
| - }
|
| -
|
| - return _bfd_generic_close_and_cleanup (abfd);
|
| -}
|
| -#endif /* INCLUDE_IA64_VMS */
|
|
|
| #define TARGET_LITTLE_SYM bfd_elfNN_ia64_little_vec
|
| #define TARGET_LITTLE_NAME "elfNN-ia64-little"
|
| @@ -5372,86 +5103,3 @@ elfNN_vms_close_and_cleanup (bfd *abfd)
|
| #define elfNN_bed elfNN_ia64_hpux_bed
|
|
|
| #include "elfNN-target.h"
|
| -
|
| -/* VMS-specific vectors. */
|
| -#ifdef INCLUDE_IA64_VMS
|
| -
|
| -#undef TARGET_LITTLE_SYM
|
| -#define TARGET_LITTLE_SYM bfd_elfNN_ia64_vms_vec
|
| -#undef TARGET_LITTLE_NAME
|
| -#define TARGET_LITTLE_NAME "elfNN-ia64-vms"
|
| -#undef TARGET_BIG_SYM
|
| -#undef TARGET_BIG_NAME
|
| -
|
| -/* These are VMS specific functions. */
|
| -
|
| -#undef elf_backend_object_p
|
| -#define elf_backend_object_p elfNN_vms_object_p
|
| -
|
| -#undef elf_backend_section_from_shdr
|
| -#define elf_backend_section_from_shdr elfNN_vms_section_from_shdr
|
| -
|
| -#undef elf_backend_post_process_headers
|
| -#define elf_backend_post_process_headers elfNN_vms_post_process_headers
|
| -
|
| -#undef elf_backend_section_processing
|
| -#define elf_backend_section_processing elfNN_vms_section_processing
|
| -
|
| -#undef elf_backend_final_write_processing
|
| -#define elf_backend_final_write_processing elfNN_vms_final_write_processing
|
| -
|
| -#undef bfd_elfNN_close_and_cleanup
|
| -#define bfd_elfNN_close_and_cleanup elfNN_vms_close_and_cleanup
|
| -
|
| -#undef elf_backend_section_from_bfd_section
|
| -
|
| -#undef elf_backend_symbol_processing
|
| -
|
| -#undef elf_backend_want_p_paddr_set_to_zero
|
| -
|
| -#undef ELF_OSABI
|
| -#define ELF_OSABI ELFOSABI_OPENVMS
|
| -
|
| -#undef ELF_MAXPAGESIZE
|
| -#define ELF_MAXPAGESIZE 0x10000 /* 64KB */
|
| -
|
| -#undef elfNN_bed
|
| -#define elfNN_bed elfNN_ia64_vms_bed
|
| -
|
| -/* Use VMS-style archives (in particular, don't use the standard coff
|
| - archive format). */
|
| -#define bfd_elfNN_archive_functions
|
| -
|
| -#undef bfd_elfNN_archive_p
|
| -#define bfd_elfNN_archive_p _bfd_vms_lib_ia64_archive_p
|
| -#undef bfd_elfNN_write_archive_contents
|
| -#define bfd_elfNN_write_archive_contents _bfd_vms_lib_write_archive_contents
|
| -#undef bfd_elfNN_mkarchive
|
| -#define bfd_elfNN_mkarchive _bfd_vms_lib_ia64_mkarchive
|
| -
|
| -#define bfd_elfNN_archive_slurp_armap \
|
| - _bfd_vms_lib_slurp_armap
|
| -#define bfd_elfNN_archive_slurp_extended_name_table \
|
| - _bfd_vms_lib_slurp_extended_name_table
|
| -#define bfd_elfNN_archive_construct_extended_name_table \
|
| - _bfd_vms_lib_construct_extended_name_table
|
| -#define bfd_elfNN_archive_truncate_arname \
|
| - _bfd_vms_lib_truncate_arname
|
| -#define bfd_elfNN_archive_write_armap \
|
| - _bfd_vms_lib_write_armap
|
| -#define bfd_elfNN_archive_read_ar_hdr \
|
| - _bfd_vms_lib_read_ar_hdr
|
| -#define bfd_elfNN_archive_write_ar_hdr \
|
| - _bfd_vms_lib_write_ar_hdr
|
| -#define bfd_elfNN_archive_openr_next_archived_file \
|
| - _bfd_vms_lib_openr_next_archived_file
|
| -#define bfd_elfNN_archive_get_elt_at_index \
|
| - _bfd_vms_lib_get_elt_at_index
|
| -#define bfd_elfNN_archive_generic_stat_arch_elt \
|
| - _bfd_vms_lib_generic_stat_arch_elt
|
| -#define bfd_elfNN_archive_update_armap_timestamp \
|
| - _bfd_vms_lib_update_armap_timestamp
|
| -
|
| -#include "elfNN-target.h"
|
| -
|
| -#endif /* INCLUDE_IA64_VMS */
|
|
|