monterey updates
authorTimothy Wall <twall@alum.mit.edu>
Fri, 25 May 2001 12:42:28 +0000 (12:42 +0000)
committerTimothy Wall <twall@alum.mit.edu>
Fri, 25 May 2001 12:42:28 +0000 (12:42 +0000)
bfd/ChangeLog
bfd/elfxx-ia64.c
ld/ChangeLog
ld/emulparams/elf64_aix.sh

index 3e00b229bcb31b2d842e79d119f1cc144081b3ba..8ed90d37e204f61715f895e35780ff31b224fb6b 100644 (file)
@@ -1,3 +1,8 @@
+2001-05-25  Timothy Wall  <twall@redhat.com>
+
+       * 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  <hjl@gnu.org>
 
        * bfd-in2.h: Regenerated.
        * 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  <orjanf@axis.com>
+2000-09-28  \81Örjan Friberg  <orjanf@axis.com>
            Hans-Peter Nilsson  <hp@axis.com>
 
        * aout-cris.c (N_TXTADDR): Define.
 
        * libhppa.h (HPPA_R_CONSTANT): Cast argument to bfd_signed_vma.
 
-2000-05-03  Martin v. Löwis  <loewis@informatik.hu-berlin.de>
+2000-05-03  Martin v. L\81öwis  <loewis@informatik.hu-berlin.de>
 
        * elflink.h (elf_link_add_object_symbols): Reset dynindx for
        hidden and internal symbols.
index f0f64f654412425af84d3a28b1ac4803d499a91c..6d2d1910603df38556dbd9e7dcbfc351c57067e0 100644 (file)
@@ -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;
index 53c4d9fd942061ace00332a14b48319d2d9754b0..d04767638c0dd8f36524fa7dabc7ca6a1a9da97b 100644 (file)
@@ -1,3 +1,8 @@
+2001-05-25  Timothy Wall  <twall@oculustech.com>
+
+       * emulparams/elf64_aix.sh: Change settings to match IBM linker
+       output. 
+
 2001-05-25  Alan Modra  <amodra@one.net.au>
 
        * configure.host: Replace linuxoldld with linux*oldld.
index 057949b602b905f402faa8f37adbcc214952d8a4..af6b63a1ec32ba2d719082fa63556fffb65482ef 100644 (file)
@@ -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.*) }'