mirror of
https://github.com/espressif/binutils-gdb.git
synced 2025-06-19 17:18:24 +08:00
bfd/
2007-03-22 H.J. Lu <hongjiu.lu@intel.com> PR ld/4007 * elf.c (assign_file_positions_for_load_sections): Check if all sections are in the segment. ld/testsuite/ 2007-03-22 H.J. Lu <hongjiu.lu@intel.com> PR ld/4007 * ld-elf/note-1.d: New file. * ld-elf/note-1.s: Likewise. * ld-elf/note-1.t: Likewise. * ld-i386/alloc.d: Likewise. * ld-i386/alloc.s: Likewise. * ld-i386/alloc.t: Likewise. * ld-i386/i386.exp: Run "alloc".
This commit is contained in:
@ -1,3 +1,9 @@
|
|||||||
|
2007-03-22 H.J. Lu <hongjiu.lu@intel.com>
|
||||||
|
|
||||||
|
PR ld/4007
|
||||||
|
* elf.c (assign_file_positions_for_load_sections): Check if
|
||||||
|
all sections are in the segment.
|
||||||
|
|
||||||
2003-03-20 H.J. Lu <hongjiu.lu@intel.com>
|
2003-03-20 H.J. Lu <hongjiu.lu@intel.com>
|
||||||
|
|
||||||
PR ld/4208
|
PR ld/4208
|
||||||
|
29
bfd/elf.c
29
bfd/elf.c
@ -4246,7 +4246,7 @@ assign_file_positions_for_load_sections (bfd *abfd,
|
|||||||
file_ptr off, voff;
|
file_ptr off, voff;
|
||||||
bfd_size_type maxpagesize;
|
bfd_size_type maxpagesize;
|
||||||
unsigned int alloc;
|
unsigned int alloc;
|
||||||
unsigned int i;
|
unsigned int i, j;
|
||||||
|
|
||||||
if (link_info == NULL
|
if (link_info == NULL
|
||||||
&& !elf_modify_segment_map (abfd, link_info))
|
&& !elf_modify_segment_map (abfd, link_info))
|
||||||
@ -4284,9 +4284,9 @@ assign_file_positions_for_load_sections (bfd *abfd,
|
|||||||
off = bed->s->sizeof_ehdr;
|
off = bed->s->sizeof_ehdr;
|
||||||
off += alloc * bed->s->sizeof_phdr;
|
off += alloc * bed->s->sizeof_phdr;
|
||||||
|
|
||||||
for (m = elf_tdata (abfd)->segment_map, p = phdrs;
|
for (m = elf_tdata (abfd)->segment_map, p = phdrs, j = 0;
|
||||||
m != NULL;
|
m != NULL;
|
||||||
m = m->next, p++)
|
m = m->next, p++, j++)
|
||||||
{
|
{
|
||||||
asection **secpp;
|
asection **secpp;
|
||||||
|
|
||||||
@ -4604,6 +4604,29 @@ assign_file_positions_for_load_sections (bfd *abfd,
|
|||||||
p->p_flags |= PF_W;
|
p->p_flags |= PF_W;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Check if all sections are in the segment. Skip PT_GNU_RELRO
|
||||||
|
and PT_NOTE segments since they will be processed by
|
||||||
|
assign_file_positions_for_non_load_sections later. */
|
||||||
|
if (p->p_type != PT_GNU_RELRO
|
||||||
|
&& p->p_type != PT_NOTE)
|
||||||
|
for (i = 0, secpp = m->sections; i < m->count; i++, secpp++)
|
||||||
|
{
|
||||||
|
Elf_Internal_Shdr *this_hdr;
|
||||||
|
asection *sec;
|
||||||
|
|
||||||
|
sec = *secpp;
|
||||||
|
this_hdr = &(elf_section_data(sec)->this_hdr);
|
||||||
|
if (this_hdr->sh_size != 0
|
||||||
|
&& !ELF_IS_SECTION_IN_SEGMENT_FILE (this_hdr, p))
|
||||||
|
{
|
||||||
|
(*_bfd_error_handler)
|
||||||
|
(_("%B: section `%A' can't be allocated in segment %d"),
|
||||||
|
abfd, sec, j);
|
||||||
|
bfd_set_error (bfd_error_bad_value);
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
elf_tdata (abfd)->next_file_pos = off;
|
elf_tdata (abfd)->next_file_pos = off;
|
||||||
|
@ -1,3 +1,15 @@
|
|||||||
|
2007-03-22 H.J. Lu <hongjiu.lu@intel.com>
|
||||||
|
|
||||||
|
PR ld/4007
|
||||||
|
* ld-elf/note-1.d: New file.
|
||||||
|
* ld-elf/note-1.s: Likewise.
|
||||||
|
* ld-elf/note-1.t: Likewise.
|
||||||
|
* ld-i386/alloc.d: Likewise.
|
||||||
|
* ld-i386/alloc.s: Likewise.
|
||||||
|
* ld-i386/alloc.t: Likewise.
|
||||||
|
|
||||||
|
* ld-i386/i386.exp: Run "alloc".
|
||||||
|
|
||||||
2007-03-20 Paul Brook <paul@codesourcery.com>
|
2007-03-20 Paul Brook <paul@codesourcery.com>
|
||||||
|
|
||||||
* ld-arm/arm-elf.exp (ld-arm/arm-elf.exp): Add arm-pic-veneer.
|
* ld-arm/arm-elf.exp (ld-arm/arm-elf.exp): Add arm-pic-veneer.
|
||||||
|
8
ld/testsuite/ld-elf/note-1.d
Normal file
8
ld/testsuite/ld-elf/note-1.d
Normal file
@ -0,0 +1,8 @@
|
|||||||
|
#ld: -Tnote-1.t
|
||||||
|
#readelf: -l --wide
|
||||||
|
|
||||||
|
#...
|
||||||
|
Section to Segment mapping:
|
||||||
|
Segment Sections...
|
||||||
|
00 .foo
|
||||||
|
01 .note
|
6
ld/testsuite/ld-elf/note-1.s
Normal file
6
ld/testsuite/ld-elf/note-1.s
Normal file
@ -0,0 +1,6 @@
|
|||||||
|
.globl _entry
|
||||||
|
.section .foo,"awx",%progbits
|
||||||
|
_entry:
|
||||||
|
.byte 0
|
||||||
|
.section .note,"",%note
|
||||||
|
.byte 0
|
14
ld/testsuite/ld-elf/note-1.t
Normal file
14
ld/testsuite/ld-elf/note-1.t
Normal file
@ -0,0 +1,14 @@
|
|||||||
|
ENTRY(_entry)
|
||||||
|
PHDRS
|
||||||
|
{
|
||||||
|
data PT_LOAD;
|
||||||
|
note PT_NOTE;
|
||||||
|
}
|
||||||
|
SECTIONS
|
||||||
|
{
|
||||||
|
. = 0x1000000;
|
||||||
|
.foo : { *(.foo) } :data
|
||||||
|
. = 0x2000000;
|
||||||
|
.note : { *(.note) } :note
|
||||||
|
/DISCARD/ : { *(*) }
|
||||||
|
}
|
4
ld/testsuite/ld-i386/alloc.d
Normal file
4
ld/testsuite/ld-i386/alloc.d
Normal file
@ -0,0 +1,4 @@
|
|||||||
|
#name: Invalid allocated section
|
||||||
|
#as: --32
|
||||||
|
#ld: -melf_i386 -T alloc.t
|
||||||
|
#error: .*section `.foo' can't be allocated in segment 0.*
|
6
ld/testsuite/ld-i386/alloc.s
Normal file
6
ld/testsuite/ld-i386/alloc.s
Normal file
@ -0,0 +1,6 @@
|
|||||||
|
.section .bar,"ax","progbits"
|
||||||
|
.byte 0
|
||||||
|
.section .foo,"aw","progbits"
|
||||||
|
.byte 0
|
||||||
|
.bss
|
||||||
|
.long 0
|
13
ld/testsuite/ld-i386/alloc.t
Normal file
13
ld/testsuite/ld-i386/alloc.t
Normal file
@ -0,0 +1,13 @@
|
|||||||
|
OUTPUT_FORMAT("elf32-i386", "elf32-i386", "elf32-i386")
|
||||||
|
OUTPUT_ARCH(i386)
|
||||||
|
PHDRS {
|
||||||
|
text PT_LOAD FLAGS(5); /* R_E */
|
||||||
|
}
|
||||||
|
SECTIONS
|
||||||
|
{
|
||||||
|
. = 0xC0000000 + ((0x100000 + (0x100000 - 1)) & ~(0x100000 - 1));
|
||||||
|
.bar : AT(ADDR(.bar) - 0xC0000000) { *(.bar) } :text
|
||||||
|
.bss : AT(ADDR(.bss) - 0xC0000000) { *(.bss) }
|
||||||
|
.foo 0 : AT(ADDR(.bss) + SIZEOF(.bss) - 0xC0000000) { *(.foo) } :text
|
||||||
|
/DISCARD/ : { *(.*) }
|
||||||
|
}
|
@ -114,3 +114,4 @@ run_dump_test "abs"
|
|||||||
run_dump_test "pcrel8"
|
run_dump_test "pcrel8"
|
||||||
run_dump_test "pcrel16"
|
run_dump_test "pcrel16"
|
||||||
run_dump_test "pcrel16abs"
|
run_dump_test "pcrel16abs"
|
||||||
|
run_dump_test "alloc"
|
||||||
|
Reference in New Issue
Block a user