aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--bfd/ChangeLog6
-rw-r--r--bfd/elflink.c6
-rw-r--r--ld/testsuite/ChangeLog8
-rw-r--r--ld/testsuite/ld-elf/group3a.d8
-rw-r--r--ld/testsuite/ld-elf/group3a.s5
-rw-r--r--ld/testsuite/ld-elf/group3b.d8
-rw-r--r--ld/testsuite/ld-elf/group3b.s6
7 files changed, 43 insertions, 4 deletions
diff --git a/bfd/ChangeLog b/bfd/ChangeLog
index 8b1911c..5e41f14 100644
--- a/bfd/ChangeLog
+++ b/bfd/ChangeLog
@@ -1,3 +1,9 @@
+2006-12-07 H.J. Lu <hjl@gnu.org>
+
+ PR ld/3666
+ * elflink.c (elf_link_add_object_symbols): Keep symbol
+ visibility for symbols from discarded section.
+
2006-12-06 Alan Modra <amodra@bigpond.net.au>
* elf64-alpha.c (elf64_alpha_merge_symbol_attribute): New function.
diff --git a/bfd/elflink.c b/bfd/elflink.c
index b0227d8..be018ba 100644
--- a/bfd/elflink.c
+++ b/bfd/elflink.c
@@ -3682,12 +3682,10 @@ elf_link_add_object_symbols (bfd *abfd, struct bfd_link_info *info)
sec = bfd_abs_section_ptr;
else if (sec->kept_section)
{
- /* Symbols from discarded section are undefined, and have
- default visibility. */
+ /* Symbols from discarded section are undefined. We keep
+ its visibility. */
sec = bfd_und_section_ptr;
isym->st_shndx = SHN_UNDEF;
- isym->st_other = (STV_DEFAULT
- | (isym->st_other & ~ ELF_ST_VISIBILITY (-1)));
}
else if ((abfd->flags & (EXEC_P | DYNAMIC)) != 0)
value -= sec->vma;
diff --git a/ld/testsuite/ChangeLog b/ld/testsuite/ChangeLog
index 7b4c64f..c5d9fb0 100644
--- a/ld/testsuite/ChangeLog
+++ b/ld/testsuite/ChangeLog
@@ -1,3 +1,11 @@
+2006-12-07 H.J. Lu <hjl@gnu.org>
+
+ PR ld/3666
+ * ld-elf/group3a.d: New file.
+ * ld-elf/group3a.s: Likewise.
+ * ld-elf/group3b.d: Likewise.
+ * ld-elf/group3b.s: Likewise.
+
2006-12-05 Alan Modra <amodra@bigpond.net.au>
* ld-alpha/tlspic.rd: Update for unused section removal.
diff --git a/ld/testsuite/ld-elf/group3a.d b/ld/testsuite/ld-elf/group3a.d
new file mode 100644
index 0000000..83c5161
--- /dev/null
+++ b/ld/testsuite/ld-elf/group3a.d
@@ -0,0 +1,8 @@
+#source: group3a.s
+#source: group3b.s
+#ld: -T group.ld
+#readelf: -s
+Symbol table '.symtab' contains .* entries:
+#...
+ .*: 0[0]*1000 0 OBJECT GLOBAL HIDDEN . foo
+#...
diff --git a/ld/testsuite/ld-elf/group3a.s b/ld/testsuite/ld-elf/group3a.s
new file mode 100644
index 0000000..5e6a686
--- /dev/null
+++ b/ld/testsuite/ld-elf/group3a.s
@@ -0,0 +1,5 @@
+ .section .data,"awG",%progbits,foo_group,comdat
+ .globl foo
+ .type foo,%object
+foo:
+ .word 0
diff --git a/ld/testsuite/ld-elf/group3b.d b/ld/testsuite/ld-elf/group3b.d
new file mode 100644
index 0000000..82c18e4
--- /dev/null
+++ b/ld/testsuite/ld-elf/group3b.d
@@ -0,0 +1,8 @@
+#source: group3b.s
+#source: group3a.s
+#ld: -T group.ld
+#readelf: -s
+Symbol table '.symtab' contains .* entries:
+#...
+ .*: 0[0]*1000 0 OBJECT GLOBAL HIDDEN . foo
+#...
diff --git a/ld/testsuite/ld-elf/group3b.s b/ld/testsuite/ld-elf/group3b.s
new file mode 100644
index 0000000..6c101bc5
--- /dev/null
+++ b/ld/testsuite/ld-elf/group3b.s
@@ -0,0 +1,6 @@
+ .section .data,"awG",%progbits,foo_group,comdat
+ .hidden foo
+ .globl foo
+ .type foo,%object
+foo:
+ .word 0