PR25022 testcase segfault for generic ELF linker targets
Alan Modra
amodra@gmail.com
Tue Jul 28 07:28:30 GMT 2020
More information about the Binutils mailing list
Tue Jul 28 07:28:30 GMT 2020
- Previous message (by thread): Time to obsolete arm-symbian?
- Next message (by thread): PKG_CHECK_MODULES: Check if $pkg_cv_[]$1[]_LIBS works
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]
Even a testcase that is expected to fail shouldn't segfault.
* elf.c (assign_section_numbers): Comment. Don't segfault on
discarded sections when setting linked-to section for generic
ELF linker.
* elflink.c (bfd_elf_match_symbols_in_sections): Allow NULL info.
diff --git a/bfd/elf.c b/bfd/elf.c
index 991a71ca32..59fde16ca7 100644
--- a/bfd/elf.c
+++ b/bfd/elf.c
@@ -3704,7 +3704,8 @@ elf_get_reloc_section (asection *reloc_sec)
/* Assign all ELF section numbers. The dummy first section is handled here
too. The link/info pointers for the standard section types are filled
- in here too, while we're at it. */
+ in here too, while we're at it. LINK_INFO will be 0 when arriving
+ here for objcopy, and when using the generic ELF linker. */
static bfd_boolean
assign_section_numbers (bfd *abfd, struct bfd_link_info *link_info)
@@ -3889,48 +3890,37 @@ assign_section_numbers (bfd *abfd, struct bfd_link_info *link_info)
s = elf_linked_to_section (sec);
if (s)
{
- /* elf_linked_to_section points to the input section. */
- if (link_info != NULL)
+ /* Check discarded linkonce section. */
+ if (discarded_section (s))
{
- /* Check discarded linkonce section. */
- if (discarded_section (s))
- {
- asection *kept;
- _bfd_error_handler
- /* xgettext:c-format */
- (_("%pB: sh_link of section `%pA' points to"
- " discarded section `%pA' of `%pB'"),
- abfd, d->this_hdr.bfd_section,
- s, s->owner);
- /* Point to the kept section if it has the same
- size as the discarded one. */
- kept = _bfd_elf_check_kept_section (s, link_info);
- if (kept == NULL)
- {
- bfd_set_error (bfd_error_bad_value);
- return FALSE;
- }
- s = kept;
- }
-
- s = s->output_section;
- BFD_ASSERT (s != NULL);
- }
- else
- {
- /* Handle objcopy. */
- if (s->output_section == NULL)
+ asection *kept;
+ _bfd_error_handler
+ /* xgettext:c-format */
+ (_("%pB: sh_link of section `%pA' points to"
+ " discarded section `%pA' of `%pB'"),
+ abfd, d->this_hdr.bfd_section, s, s->owner);
+ /* Point to the kept section if it has the same
+ size as the discarded one. */
+ kept = _bfd_elf_check_kept_section (s, link_info);
+ if (kept == NULL)
{
- _bfd_error_handler
- /* xgettext:c-format */
- (_("%pB: sh_link of section `%pA' points to"
- " removed section `%pA' of `%pB'"),
- abfd, d->this_hdr.bfd_section, s, s->owner);
bfd_set_error (bfd_error_bad_value);
return FALSE;
}
- s = s->output_section;
+ s = kept;
+ }
+ /* Handle objcopy. */
+ else if (s->output_section == NULL)
+ {
+ _bfd_error_handler
+ /* xgettext:c-format */
+ (_("%pB: sh_link of section `%pA' points to"
+ " removed section `%pA' of `%pB'"),
+ abfd, d->this_hdr.bfd_section, s, s->owner);
+ bfd_set_error (bfd_error_bad_value);
+ return FALSE;
}
+ s = s->output_section;
d->this_hdr.sh_link = elf_section_data (s)->this_idx;
}
else
diff --git a/bfd/elflink.c b/bfd/elflink.c
index 286fc11250..a3823e6322 100644
--- a/bfd/elflink.c
+++ b/bfd/elflink.c
@@ -8179,7 +8179,7 @@ bfd_elf_match_symbols_in_sections (asection *sec1, asection *sec2,
if (isymbuf1 == NULL)
goto done;
- if (!info->reduce_memory_overheads)
+ if (info != NULL && !info->reduce_memory_overheads)
{
ssymbuf1 = elf_create_symbuf (symcount1, isymbuf1);
elf_tdata (bfd1)->symbuf = ssymbuf1;
@@ -8193,7 +8193,7 @@ bfd_elf_match_symbols_in_sections (asection *sec1, asection *sec2,
if (isymbuf2 == NULL)
goto done;
- if (ssymbuf1 != NULL && !info->reduce_memory_overheads)
+ if (ssymbuf1 != NULL && info != NULL && !info->reduce_memory_overheads)
{
ssymbuf2 = elf_create_symbuf (symcount2, isymbuf2);
elf_tdata (bfd2)->symbuf = ssymbuf2;
--
Alan Modra
Australia Development Lab, IBM
- Previous message (by thread): Time to obsolete arm-symbian?
- Next message (by thread): PKG_CHECK_MODULES: Check if $pkg_cv_[]$1[]_LIBS works
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]
More information about the Binutils mailing list