mirror of
https://github.com/darlinghq/darling-gdb.git
synced 2024-11-24 20:49:43 +00:00
bfd/
* elf32-spu.c (spu_elf_modify_segment_map): Move all PF_OVERLAY segments first amongst the program headers. ld/testsuite/ * ld-spu/icache.d: Update file offsets. * ld-spu/ovl.d: Likewise. * ld-spu/ovl1.d: Likewise.
This commit is contained in:
parent
d342a8b157
commit
452de53c12
@ -1,3 +1,8 @@
|
||||
2009-05-14 Ulrich Weigand <uweigand@de.ibm.com>
|
||||
|
||||
* elf32-spu.c (spu_elf_modify_segment_map): Move all PF_OVERLAY
|
||||
segments first amongst the program headers.
|
||||
|
||||
2009-05-14 Ulrich Weigand <uweigand@de.ibm.com>
|
||||
|
||||
* elf32-spu.c (spu_elf_relocate_section): Only encode overlay index
|
||||
|
@ -5045,7 +5045,8 @@ static bfd_boolean
|
||||
spu_elf_modify_segment_map (bfd *abfd, struct bfd_link_info *info)
|
||||
{
|
||||
asection *toe, *s;
|
||||
struct elf_segment_map *m;
|
||||
struct elf_segment_map *m, *m_overlay;
|
||||
struct elf_segment_map **p, **p_overlay;
|
||||
unsigned int i;
|
||||
|
||||
if (info == NULL)
|
||||
@ -5092,6 +5093,37 @@ spu_elf_modify_segment_map (bfd *abfd, struct bfd_link_info *info)
|
||||
break;
|
||||
}
|
||||
|
||||
|
||||
/* Some SPU ELF loaders ignore the PF_OVERLAY flag and just load all
|
||||
PT_LOAD segments. This can cause the .ovl.init section to be
|
||||
overwritten with the contents of some overlay segment. To work
|
||||
around this issue, we ensure that all PF_OVERLAY segments are
|
||||
sorted first amongst the program headers; this ensures that even
|
||||
with a broken loader, the .ovl.init section (which is not marked
|
||||
as PF_OVERLAY) will be placed into SPU local store on startup. */
|
||||
|
||||
/* Move all overlay segments onto a separate list. */
|
||||
p = &elf_tdata (abfd)->segment_map;
|
||||
p_overlay = &m_overlay;
|
||||
while (*p != NULL)
|
||||
{
|
||||
if ((*p)->p_type == PT_LOAD && (*p)->count == 1
|
||||
&& spu_elf_section_data ((*p)->sections[0])->u.o.ovl_index != 0)
|
||||
{
|
||||
struct elf_segment_map *m = *p;
|
||||
*p = m->next;
|
||||
*p_overlay = m;
|
||||
p_overlay = &m->next;
|
||||
continue;
|
||||
}
|
||||
|
||||
p = &((*p)->next);
|
||||
}
|
||||
|
||||
/* Re-insert overlay segments at the head of the segment map. */
|
||||
*p_overlay = elf_tdata (abfd)->segment_map;
|
||||
elf_tdata (abfd)->segment_map = m_overlay;
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
|
@ -1,3 +1,9 @@
|
||||
2009-05-14 Ulrich Weigand <uweigand@de.ibm.com>
|
||||
|
||||
* ld-spu/icache.d: Update file offsets.
|
||||
* ld-spu/ovl.d: Likewise.
|
||||
* ld-spu/ovl1.d: Likewise.
|
||||
|
||||
2009-05-14 Alan Modra <amodra@bigpond.net.au>
|
||||
|
||||
* ld-spu/icache1.d: Update for changed overlay manager placement.
|
||||
|
@ -8,7 +8,7 @@
|
||||
Disassembly of section .ovl.init:
|
||||
00000800 <__icache_fileoff>:
|
||||
.* 00 00 00 00.*
|
||||
.* 00 00 07 00.*
|
||||
.* 00 00 02 00.*
|
||||
\.\.\.
|
||||
|
||||
Disassembly of section \.ovly1:
|
||||
|
@ -151,12 +151,12 @@ Disassembly of section .data:
|
||||
450: 00 00 04 00 .*
|
||||
454: 00 00 00 20 .*
|
||||
# 458: 00 00 03 40 .*
|
||||
458: 00 00 03 90 .*
|
||||
458: 00 00 01 00 .*
|
||||
45c: 00 00 00 01 .*
|
||||
460: 00 00 04 00 .*
|
||||
464: 00 00 00 40 .*
|
||||
# 468: 00 00 03 60 .*
|
||||
468: 00 00 03 b0 .*
|
||||
468: 00 00 01 20 .*
|
||||
46c: 00 00 00 01 .*
|
||||
|
||||
00000470 <_ovly_buf_table>:
|
||||
|
@ -104,12 +104,12 @@ Disassembly of section \.data:
|
||||
.*00 00 04 00 .*
|
||||
.*00 00 00 20 .*
|
||||
#.*00 00 03 10 .*
|
||||
.*00 00 03 60 .*
|
||||
.*00 00 01 00 .*
|
||||
.*00 00 00 01 .*
|
||||
.*00 00 04 00 .*
|
||||
.*00 00 00 20 .*
|
||||
#.*00 00 03 20 .*
|
||||
.*00 00 03 80 .*
|
||||
.*00 00 01 20 .*
|
||||
.*00 00 00 01 .*
|
||||
|
||||
00000450 <_ovly_buf_table>:
|
||||
|
Loading…
Reference in New Issue
Block a user