diff options
author | H.J. Lu <hjl.tools@gmail.com> | 2019-03-15 22:19:01 +0800 |
---|---|---|
committer | H.J. Lu <hjl.tools@gmail.com> | 2019-03-15 22:19:20 +0800 |
commit | 2219ae0b0ebe14373850b000c2abaa31dab1d741 (patch) | |
tree | 8f138e44655f3af01b98d9567157c192f9d06ad2 /bfd | |
parent | 1c82ed745bec154a3cd8a8bbf36c5be5086041d5 (diff) | |
download | gdb-2219ae0b0ebe14373850b000c2abaa31dab1d741.zip gdb-2219ae0b0ebe14373850b000c2abaa31dab1d741.tar.gz gdb-2219ae0b0ebe14373850b000c2abaa31dab1d741.tar.bz2 |
COFF: Check for symbols defined in discarded section
For LTO, a symbol may defined in discarded section. We should mark it
as undefined so that LTO plugin will make IR definition available.
PR ld/24267
* coffgen.c (_bfd_coff_section_already_linked): Skip discarded
section.
* cofflink.c (coff_link_add_symbols): Check for symbols defined
in discarded section.
Diffstat (limited to 'bfd')
-rw-r--r-- | bfd/ChangeLog | 8 | ||||
-rw-r--r-- | bfd/coffgen.c | 3 | ||||
-rw-r--r-- | bfd/cofflink.c | 6 |
3 files changed, 16 insertions, 1 deletions
diff --git a/bfd/ChangeLog b/bfd/ChangeLog index b044fad..b019ca6 100644 --- a/bfd/ChangeLog +++ b/bfd/ChangeLog @@ -1,3 +1,11 @@ +2019-03-15 H.J. Lu <hongjiu.lu@intel.com> + + PR ld/24267 + * coffgen.c (_bfd_coff_section_already_linked): Skip discarded + section. + * cofflink.c (coff_link_add_symbols): Check for symbols defined + in discarded section. + 2019-03-15 Alan Modra <amodra@gmail.com> PR 24339 diff --git a/bfd/coffgen.c b/bfd/coffgen.c index 5db35c7..ccf4b43 100644 --- a/bfd/coffgen.c +++ b/bfd/coffgen.c @@ -2652,6 +2652,9 @@ _bfd_coff_section_already_linked (bfd *abfd, struct bfd_section_already_linked_hash_entry *already_linked_list; struct coff_comdat_info *s_comdat; + if (sec->output_section == bfd_abs_section_ptr) + return FALSE; + flags = sec->flags; if ((flags & SEC_LINK_ONCE) == 0) return FALSE; diff --git a/bfd/cofflink.c b/bfd/cofflink.c index e4031b9..ac07d05 100644 --- a/bfd/cofflink.c +++ b/bfd/cofflink.c @@ -310,7 +310,9 @@ coff_link_add_symbols (bfd *abfd, case COFF_SYMBOL_GLOBAL: flags = BSF_EXPORT | BSF_GLOBAL; section = coff_section_from_bfd_index (abfd, sym.n_scnum); - if (! obj_pe (abfd)) + if (discarded_section (section)) + section = bfd_und_section_ptr; + else if (! obj_pe (abfd)) value -= section->vma; break; @@ -327,6 +329,8 @@ coff_link_add_symbols (bfd *abfd, case COFF_SYMBOL_PE_SECTION: flags = BSF_SECTION_SYM | BSF_GLOBAL; section = coff_section_from_bfd_index (abfd, sym.n_scnum); + if (discarded_section (section)) + section = bfd_und_section_ptr; break; } |