From 0bae5108f26edd55e2996ae554f1c43adcda38de Mon Sep 17 00:00:00 2001 From: Timothy Wall Date: Fri, 25 May 2001 12:42:28 +0000 Subject: [PATCH] monterey updates --- bfd/ChangeLog | 9 +++++++-- bfd/elfxx-ia64.c | 43 ++++++++++++++++++++----------------------- ld/ChangeLog | 5 +++++ ld/emulparams/elf64_aix.sh | 7 +++---- 4 files changed, 35 insertions(+), 29 deletions(-) diff --git a/bfd/ChangeLog b/bfd/ChangeLog index 3e00b229b..8ed90d37e 100644 --- a/bfd/ChangeLog +++ b/bfd/ChangeLog @@ -1,3 +1,8 @@ +2001-05-25 Timothy Wall + + * elfxx-ia64.c (allocate_dynrel_entries): Don't allocate an entry + for __GLOB_DATA_PTR on AIX5. Clean up some relocation bugs. + 2001-05-25 H.J. Lu * bfd-in2.h: Regenerated. @@ -2217,7 +2222,7 @@ * elf.c (elf_fake_sections): Do not mark the section SHT_NOBITS if is has the SEC_HAS_CONTENTS flag set. -2000-09-28 Örjan Friberg +2000-09-28 �Örjan Friberg Hans-Peter Nilsson * aout-cris.c (N_TXTADDR): Define. @@ -4066,7 +4071,7 @@ * libhppa.h (HPPA_R_CONSTANT): Cast argument to bfd_signed_vma. -2000-05-03 Martin v. Löwis +2000-05-03 Martin v. L�öwis * elflink.h (elf_link_add_object_symbols): Reset dynindx for hidden and internal symbols. diff --git a/bfd/elfxx-ia64.c b/bfd/elfxx-ia64.c index f0f64f654..6d2d19106 100644 --- a/bfd/elfxx-ia64.c +++ b/bfd/elfxx-ia64.c @@ -1161,10 +1161,9 @@ elfNN_ia64_aix_add_symbol_hook (abfd, info, sym, namep, flagsp, secp, valp) { if (strcmp (*namep, "__GLOB_DATA_PTR") == 0) { - /* Define __GLOB_DATA_PTR. This is expected to be a linker-defined - symbol by the Aix C runtime startup code. Define the symbol - when it is encountered. IBM sez no one else should use it b/c it is - undocumented. */ + /* Define __GLOB_DATA_PTR when it is encountered. This is expected to + be a linker-defined symbol by the Aix C runtime startup code. IBM sez + no one else should use it b/c it is undocumented. */ struct elf_link_hash_entry *h; h = (struct elf_link_hash_entry *) bfd_link_hash_lookup (info->hash, *namep, false, false, false); @@ -1177,7 +1176,8 @@ elfNN_ia64_aix_add_symbol_hook (abfd, info, sym, namep, flagsp, secp, valp) ia64_info = elfNN_ia64_hash_table (info); if (!(_bfd_generic_link_add_one_symbol - (info, abfd, *namep, BSF_GLOBAL, ia64_info->got_sec, + (info, abfd, *namep, BSF_GLOBAL, + bfd_get_section_by_name (abfd, ".bss"), bed->got_symbol_offset, (const char *) NULL, false, bed->collect, (struct bfd_link_hash_entry **) &h))) return false; @@ -1185,8 +1185,7 @@ elfNN_ia64_aix_add_symbol_hook (abfd, info, sym, namep, flagsp, secp, valp) h->elf_link_hash_flags |= ELF_LINK_HASH_DEF_REGULAR; h->type = STT_OBJECT; - if (info->shared - && ! _bfd_elf_link_record_dynamic_symbol (info, h)) + if (! _bfd_elf_link_record_dynamic_symbol (info, h)) return false; } @@ -1198,9 +1197,8 @@ elfNN_ia64_aix_add_symbol_hook (abfd, info, sym, namep, flagsp, secp, valp) /* SHN_AIX_SYSCALL: Treat this as any other symbol. The special symbol is only relevant when compiling code for extended system calls. - Replace the "special" section with .text, if possible. */ - /* FIXME need to determine the proper section instead of defaulting to - .text. */ + Replace the "special" section with .text, if possible. + Note that these symbols are always assumed to be in .text. */ for (i = 1; i < elf_elfheader (abfd)->e_shnum; i++) { asection * sec = bfd_section_from_elf_index (abfd, i); @@ -2019,9 +2017,7 @@ elfNN_ia64_check_relocs (abfd, info, sec, relocs) case R_IA64_FPTR32LSB: case R_IA64_FPTR64MSB: case R_IA64_FPTR64LSB: - if (elfNN_ia64_aix_vec (abfd->xvec)) - need_entry = NEED_FPTR | NEED_DYNREL; - else if (info->shared || h) + if (info->shared || h || elfNN_ia64_aix_vec (abfd->xvec)) need_entry = NEED_FPTR | NEED_DYNREL; else need_entry = NEED_FPTR; @@ -2071,10 +2067,8 @@ elfNN_ia64_check_relocs (abfd, info, sec, relocs) case R_IA64_DIR64LSB: /* Shared objects will always need at least a REL relocation. */ if (info->shared || maybe_dynamic - /* On AIX, we always need a relocation, but make sure - __GLOB_DATA_PTR doesn't get an entry. */ || (elfNN_ia64_aix_vec (abfd->xvec) - && (!h || strcmp (h->root.root.string, + && (!h || strcmp (h->root.root.string, "__GLOB_DATA_PTR") != 0))) need_entry = NEED_DYNREL; dynrel_type = R_IA64_DIR64LSB; @@ -2198,7 +2192,9 @@ allocate_global_data_got (dyn_i, data) if (dyn_i->want_got && ! dyn_i->want_fptr && (elfNN_ia64_dynamic_symbol_p (dyn_i->h, x->info) - || elfNN_ia64_aix_vec (x->info->hash->creator))) + || (elfNN_ia64_aix_vec (x->info->hash->creator) + && (!dyn_i->h || strcmp (dyn_i->h->root.root.string, + "__GLOB_DATA_PTR") != 0)))) { dyn_i->got_offset = x->ofs; x->ofs += 8; @@ -2412,7 +2408,10 @@ allocate_dynrel_entries (dyn_i, data) ia64_info = elfNN_ia64_hash_table (x->info); dynamic_symbol = elfNN_ia64_dynamic_symbol_p (dyn_i->h, x->info) - || elfNN_ia64_aix_vec (x->info->hash->creator); + || (elfNN_ia64_aix_vec (x->info->hash->creator) + /* Don't allocate an entry for __GLOB_DATA_PTR */ + && (!dyn_i->h || strcmp (dyn_i->h->root.root.string, + "__GLOB_DATA_PTR") != 0)); shared = x->info->shared; /* Take care of the normal data relocations. */ @@ -3528,11 +3527,9 @@ elfNN_ia64_relocate_section (output_bfd, info, input_bfd, input_section, /* Install a dynamic relocation for this reloc. */ if ((dynamic_symbol_p || info->shared || (elfNN_ia64_aix_vec (info->hash->creator) - /* We want REL relocation for _GLOB_DATA_PTR, which would - otherwise be an IMM64, which isn't handled below. The - symbol comes from the C runtime. */ - && (!h || - strcmp (h->root.root.string, "__GLOB_DATA_PTR") != 0))) + /* Don't emit relocs for __GLOB_DATA_PTR on AIX. */ + && (!h || strcmp (h->root.root.string, + "__GLOB_DATA_PTR") != 0))) && (input_section->flags & SEC_ALLOC) != 0) { unsigned int dyn_r_type; diff --git a/ld/ChangeLog b/ld/ChangeLog index 53c4d9fd9..d04767638 100644 --- a/ld/ChangeLog +++ b/ld/ChangeLog @@ -1,3 +1,8 @@ +2001-05-25 Timothy Wall + + * emulparams/elf64_aix.sh: Change settings to match IBM linker + output. + 2001-05-25 Alan Modra * configure.host: Replace linuxoldld with linux*oldld. diff --git a/ld/emulparams/elf64_aix.sh b/ld/emulparams/elf64_aix.sh index 057949b60..af6b63a1e 100644 --- a/ld/emulparams/elf64_aix.sh +++ b/ld/emulparams/elf64_aix.sh @@ -5,12 +5,11 @@ TEMPLATE_NAME=elf32 OUTPUT_FORMAT="elf64-ia64-aix-little" ARCH=ia64 MACHINE= -MAXPAGESIZE=0x1000 -TEXT_START_ADDR="0x100000000" -DATA_ADDR="0x200000000 + (. & (${MAXPAGESIZE} - 1))" +MAXPAGESIZE=0x10000 +TEXT_START_ADDR="0x10000000" +DATA_ADDR="0x20000000 + (. & (${MAXPAGESIZE} - 1))" GENERATE_SHLIB_SCRIPT=yes NOP=0x00300000010070000002000001000400 # a bundle full of nops -OTHER_GOT_SYMBOLS='. = ALIGN (8); PROVIDE (__gp = . + 0x200000);' OTHER_GOT_SECTIONS='.IA_64.pltoff : { *(.IA_64.pltoff) }' OTHER_PLT_RELOC_SECTIONS='.rela.IA_64.pltoff : { *(.rela.IA_64.pltoff) }' OTHER_READONLY_SECTIONS='.opd : { *(.opd) } .IA_64.unwind_info : { *(.IA_64.unwind_info*) *(.gnu.linkonce.ia64unwi.*) } .IA_64.unwind : { *(.IA_64.unwind*) *(.gnu.linkonce.ia64unw.*) }' -- 2.11.4.GIT