bfd/
authorH.J. Lu <hjl.tools@gmail.com>
Tue, 12 Sep 2006 22:10:31 +0000 (22:10 +0000)
committerH.J. Lu <hjl.tools@gmail.com>
Tue, 12 Sep 2006 22:10:31 +0000 (22:10 +0000)
2006-09-12  H.J. Lu  <hongjiu.lu@intel.com>

PR ld/3197
* elflink.c (elf_link_output_extsym): Compute bucket only if
needed.

ld/testsuite/

2006-09-12  H.J. Lu  <hongjiu.lu@intel.com>

PR ld/3197
* ld-elf/hash.d: New test.

bfd/ChangeLog
bfd/elflink.c
ld/testsuite/ChangeLog
ld/testsuite/ld-elf/hash.d [new file with mode: 0644]

index 0d4a95e..1e22c44 100644 (file)
@@ -1,3 +1,9 @@
+2006-09-12  H.J. Lu  <hongjiu.lu@intel.com>
+
+       PR ld/3197
+       * elflink.c (elf_link_output_extsym): Compute bucket only if
+       needed.
+
 2006-09-10  H.J. Lu  <hongjiu.lu@intel.com>
 
        PR binutils/3186
index d3f9b62..a1bc864 100644 (file)
@@ -7061,8 +7061,6 @@ elf_link_output_extsym (struct elf_link_hash_entry *h, void *data)
   if (h->dynindx != -1
       && elf_hash_table (finfo->info)->dynamic_sections_created)
     {
-      size_t bucketcount;
-      size_t bucket;
       bfd_byte *esym;
 
       sym.st_name = h->dynstr_index;
@@ -7074,14 +7072,16 @@ elf_link_output_extsym (struct elf_link_hash_entry *h, void *data)
        }
       bed->s->swap_symbol_out (finfo->output_bfd, &sym, esym, 0);
 
-      bucketcount = elf_hash_table (finfo->info)->bucketcount;
-      bucket = h->u.elf_hash_value % bucketcount;
-
       if (finfo->hash_sec != NULL)
        {
          size_t hash_entry_size;
          bfd_byte *bucketpos;
          bfd_vma chain;
+         size_t bucketcount;
+         size_t bucket;
+
+         bucketcount = elf_hash_table (finfo->info)->bucketcount;
+         bucket = h->u.elf_hash_value % bucketcount;
 
          hash_entry_size
            = elf_section_data (finfo->hash_sec)->this_hdr.sh_entsize;
index 9e90891..d482c48 100644 (file)
@@ -1,3 +1,8 @@
+2006-09-12  H.J. Lu  <hongjiu.lu@intel.com>
+
+       PR ld/3197
+       * ld-elf/hash.d: New test.
+
 2006-09-04  Vladimir Prus  <vladimir@codesourcery.com>
 
        * ld-arm/use-thumb-lib.sym: Use regexps instead of
diff --git a/ld/testsuite/ld-elf/hash.d b/ld/testsuite/ld-elf/hash.d
new file mode 100644 (file)
index 0000000..20c7790
--- /dev/null
@@ -0,0 +1,8 @@
+#source: start.s
+#readelf: -d 
+#ld: -shared --hash-style=gnu
+#target: *-*-linux*
+
+#...
+[      ]*0x[0-9a-z]+[  ]+\(GNU_HASH\)[         ]+0x[0-9a-z]+
+#...