diff --git a/bfd/ChangeLog b/bfd/ChangeLog index 8b1911c715c..5e41f1431f1 100644 --- a/bfd/ChangeLog +++ b/bfd/ChangeLog @@ -1,3 +1,9 @@ +2006-12-07 H.J. Lu + + PR ld/3666 + * elflink.c (elf_link_add_object_symbols): Keep symbol + visibility for symbols from discarded section. + 2006-12-06 Alan Modra * elf64-alpha.c (elf64_alpha_merge_symbol_attribute): New function. diff --git a/bfd/elflink.c b/bfd/elflink.c index b0227d8bea3..be018babcf7 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 7b4c64f7e8a..c5d9fb02db1 100644 --- a/ld/testsuite/ChangeLog +++ b/ld/testsuite/ChangeLog @@ -1,3 +1,11 @@ +2006-12-07 H.J. Lu + + 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 * 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 00000000000..83c516134d3 --- /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 00000000000..5e6a68648cb --- /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 00000000000..82c18e4b4d9 --- /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 00000000000..6c101bc5262 --- /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