mirror of
https://sourceware.org/git/binutils-gdb.git
synced 2025-03-13 13:49:00 +08:00
Segfault on phdrs allocated but not created
A number of ARM tests show results like: ld-new: no address assigned to the veneers output section .gnu.sgstubs ld-new: can not size stub section: invalid operation ld-new: warning: cannot find entry symbol _start; defaulting to 0000000000010074 ld-new: tmpdir/cmse-veneers-no-gnu_sgstubs: warning: allocated section `.text' not in segment Segmentation fault PASS: Secure gateway veneers: no .gnu.sgstubs section The PASS despite the segv shows the danger of using "#..." to match error output. This patch doesn't try to fix the testuite, but does prevent the segfault. * elf.c (assign_file_positions_except_relocs): Don't segfault when actual number of phdrs is less than allocated. Delete outdated comment. Formatting.
This commit is contained in:
parent
df5f2391f7
commit
6838f2bed6
@ -1,3 +1,9 @@
|
||||
2018-02-26 Alan Modra <amodra@gmail.com>
|
||||
|
||||
* elf.c (assign_file_positions_except_relocs): Don't segfault
|
||||
when actual number of phdrs is less than allocated. Delete
|
||||
outdated comment. Formatting.
|
||||
|
||||
2018-02-26 Alan Modra <amodra@gmail.com>
|
||||
|
||||
* elf-m10300.c, * elf-s390-common.c, * elf32-arc.c, * elf32-cris.c,
|
||||
|
12
bfd/elf.c
12
bfd/elf.c
@ -6127,9 +6127,7 @@ assign_file_positions_except_relocs (bfd *abfd,
|
||||
}
|
||||
|
||||
/* Write out the program headers. */
|
||||
alloc = elf_program_header_size (abfd) / bed->s->sizeof_phdr;
|
||||
|
||||
/* Sort the program headers into the ordering required by the ELF standard. */
|
||||
alloc = elf_elfheader (abfd)->e_phnum;
|
||||
if (alloc == 0)
|
||||
return TRUE;
|
||||
|
||||
@ -6151,14 +6149,14 @@ assign_file_positions_except_relocs (bfd *abfd,
|
||||
alloc))
|
||||
&& tdata->phdr[1].p_type == PT_LOAD
|
||||
&& (tdata->phdr[1].p_vaddr > tdata->phdr[0].p_vaddr
|
||||
|| (tdata->phdr[1].p_vaddr + tdata->phdr[1].p_memsz)
|
||||
< (tdata->phdr[0].p_vaddr + tdata->phdr[0].p_memsz)))
|
||||
|| (tdata->phdr[1].p_vaddr + tdata->phdr[1].p_memsz
|
||||
< tdata->phdr[0].p_vaddr + tdata->phdr[0].p_memsz)))
|
||||
{
|
||||
/* The fix for this error is usually to edit the linker script being
|
||||
used and set up the program headers manually. Either that or
|
||||
leave room for the headers at the start of the SECTIONS. */
|
||||
_bfd_error_handler (_("\
|
||||
%pB: error: PHDR segment not covered by LOAD segment"),
|
||||
_bfd_error_handler (_("%pB: error: PHDR segment not covered"
|
||||
" by LOAD segment"),
|
||||
abfd);
|
||||
return FALSE;
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user