From 9a9dc2442849528bc7b4e0d69bfc3c40a17d1d35 Mon Sep 17 00:00:00 2001 From: Paul Brook Date: Wed, 1 Dec 2004 23:23:12 +0000 Subject: [PATCH] 2004-12-01 Paul Brook bfd/ * elflink.c (elf_link_add_object_symbols): Make symbols from discarded sections undefined. ld/testsuite/ * ld-elf/group1.d: New test. * ld-elf/group.ld, ld-elf/group1a.s, ld-elf/group1b.s: New test. --- bfd/ChangeLog | 5 +++++ bfd/elflink.c | 6 ++++++ ld/testsuite/ChangeLog | 5 +++++ ld/testsuite/ld-elf/group.ld | 5 +++++ ld/testsuite/ld-elf/group1.d | 9 +++++++++ ld/testsuite/ld-elf/group1a.s | 4 ++++ ld/testsuite/ld-elf/group1b.s | 6 ++++++ 7 files changed, 40 insertions(+) create mode 100644 ld/testsuite/ld-elf/group.ld create mode 100644 ld/testsuite/ld-elf/group1.d create mode 100644 ld/testsuite/ld-elf/group1a.s create mode 100644 ld/testsuite/ld-elf/group1b.s diff --git a/bfd/ChangeLog b/bfd/ChangeLog index 6a1d301b58..dc0d93308d 100644 --- a/bfd/ChangeLog +++ b/bfd/ChangeLog @@ -1,3 +1,8 @@ +2004-12-01 Paul Brook + + * elflink.c (elf_link_add_object_symbols): Make symbols from discarded + sections undefined. + 2004-11-30 Paul Brook * elf32-arm.c (struct elf32_arm_link_hash_table): Remove diff --git a/bfd/elflink.c b/bfd/elflink.c index b0953127de..6e875960e1 100644 --- a/bfd/elflink.c +++ b/bfd/elflink.c @@ -3425,6 +3425,12 @@ elf_link_add_object_symbols (bfd *abfd, struct bfd_link_info *info) sec = bfd_section_from_elf_index (abfd, isym->st_shndx); if (sec == NULL) sec = bfd_abs_section_ptr; + else if (sec->kept_section) + { + /* Symbols from discarded section are undefined. */ + sec = bfd_und_section_ptr; + isym->st_shndx = SHN_UNDEF; + } else if ((abfd->flags & (EXEC_P | DYNAMIC)) != 0) value -= sec->vma; } diff --git a/ld/testsuite/ChangeLog b/ld/testsuite/ChangeLog index 05f91c9f23..d927189df6 100644 --- a/ld/testsuite/ChangeLog +++ b/ld/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2004-12-01 Paul Brook + + * ld-elf/group1.d: New test. + * ld-elf/group.ld, ld-elf/group1a.s, ld-elf/group1b.s: New test. + 2004-12-01 Daniel Jacobowitz * ld-selective/selective.exp: Use -print-libgcc-file-name for diff --git a/ld/testsuite/ld-elf/group.ld b/ld/testsuite/ld-elf/group.ld new file mode 100644 index 0000000000..d6b27d0494 --- /dev/null +++ b/ld/testsuite/ld-elf/group.ld @@ -0,0 +1,5 @@ +SECTIONS +{ + . = 0x1000; + .text : { *(.text) } +} diff --git a/ld/testsuite/ld-elf/group1.d b/ld/testsuite/ld-elf/group1.d new file mode 100644 index 0000000000..d2f1b58ce1 --- /dev/null +++ b/ld/testsuite/ld-elf/group1.d @@ -0,0 +1,9 @@ +#source: group1a.s +#source: group1b.s +#ld: -T group.ld +#readelf: -s +Symbol table '.symtab' contains .* entries: +#... + .*: 00001000 0 NOTYPE WEAK DEFAULT . foo + .*: 00000000 0 NOTYPE GLOBAL DEFAULT UND bar +#... diff --git a/ld/testsuite/ld-elf/group1a.s b/ld/testsuite/ld-elf/group1a.s new file mode 100644 index 0000000000..296e76ee44 --- /dev/null +++ b/ld/testsuite/ld-elf/group1a.s @@ -0,0 +1,4 @@ + .section .text,"axG",%progbits,foo_group,comdat + .weak foo +foo: + .word 0 diff --git a/ld/testsuite/ld-elf/group1b.s b/ld/testsuite/ld-elf/group1b.s new file mode 100644 index 0000000000..b66cba944d --- /dev/null +++ b/ld/testsuite/ld-elf/group1b.s @@ -0,0 +1,6 @@ + .section .text,"axG",%progbits,foo_group,comdat + .global foo + .global bar +foo: + .word 0 +bar: -- 2.11.0