diff options
author | Nathan Sidwell <nathan@codesourcery.com> | 2009-08-06 13:05:24 +0000 |
---|---|---|
committer | Nathan Sidwell <nathan@codesourcery.com> | 2009-08-06 13:05:24 +0000 |
commit | 3ae046ccd31e26df008776124e52fce6174aa0df (patch) | |
tree | f91e2a978e0420c5c22d5f64e49b93818befdb35 | |
parent | 5f814c3b3f9d99ed724cce14c90a02e29776a90a (diff) | |
download | binutils-gdb-3ae046ccd31e26df008776124e52fce6174aa0df.tar.gz |
bfd/
* elf32-arm.c (elf32_arm_size_stubs): Call layout_sections_again
at least once when fixing cortex-a8.
ld/testsuite/
* ld-arm/arm-elf.exp: Add new test.
* ld-arm/cortex-a8-fix-hdr.d: New.
* ld-arm/cortex-a8-fix-hdr.s: New.
* ld-arm/cortex-a8-fix-hdr.t: New.
-rw-r--r-- | bfd/ChangeLog | 5 | ||||
-rw-r--r-- | bfd/elf32-arm.c | 10 | ||||
-rw-r--r-- | ld/testsuite/ChangeLog | 7 | ||||
-rw-r--r-- | ld/testsuite/ld-arm/arm-elf.exp | 4 | ||||
-rw-r--r-- | ld/testsuite/ld-arm/cortex-a8-fix-hdr.d | 24 | ||||
-rw-r--r-- | ld/testsuite/ld-arm/cortex-a8-fix-hdr.s | 14 | ||||
-rw-r--r-- | ld/testsuite/ld-arm/cortex-a8-fix-hdr.t | 10 |
7 files changed, 74 insertions, 0 deletions
diff --git a/bfd/ChangeLog b/bfd/ChangeLog index 95e033c1500..c63bc2f8237 100644 --- a/bfd/ChangeLog +++ b/bfd/ChangeLog @@ -1,3 +1,8 @@ +2009-08-06 Nathan Sidwell <nathan@codesourcery.com> + + * elf32-arm.c (elf32_arm_size_stubs): Call layout_sections_again + at least once when fixing cortex-a8. + 2009-08-05 Chao-ying Fu <fu@mips.com> * elf32-mips.c (mips_reloc_map): Add BFD_RELOC_MIPS_JALR. diff --git a/bfd/elf32-arm.c b/bfd/elf32-arm.c index 5aba3f360a7..fbb4454ae94 100644 --- a/bfd/elf32-arm.c +++ b/bfd/elf32-arm.c @@ -4246,6 +4246,16 @@ elf32_arm_size_stubs (bfd *output_bfd, group_sections (htab, stub_group_size, stubs_always_after_branch); + /* If we're applying the cortex A8 fix, we need to determine the + program header size now, because we cannot change it later -- + that could alter section placements. Notice the A8 erratum fix + ends up requiring the section addresses to remain unchanged + modulo the page size. That's something we cannot represent + inside BFD, and we don't want to force the section alignment to + be the page size. */ + if (htab->fix_cortex_a8) + (*htab->layout_sections_again) (); + while (1) { bfd *input_bfd; diff --git a/ld/testsuite/ChangeLog b/ld/testsuite/ChangeLog index 13861620a29..d0e1699d7f8 100644 --- a/ld/testsuite/ChangeLog +++ b/ld/testsuite/ChangeLog @@ -1,3 +1,10 @@ +2009-08-06 Nathan Sidwell <nathan@codesourcery.com> + + * ld-arm/arm-elf.exp: Add new test. + * ld-arm/cortex-a8-fix-hdr.d: New. + * ld-arm/cortex-a8-fix-hdr.s: New. + * ld-arm/cortex-a8-fix-hdr.t: New. + 2009-08-05 Trevor Smigiel <Trevor_Smigiel@playstation.sony.com> * ld-spu/fixup.d: New. diff --git a/ld/testsuite/ld-arm/arm-elf.exp b/ld/testsuite/ld-arm/arm-elf.exp index 941ef50c697..4fcee6817a2 100644 --- a/ld/testsuite/ld-arm/arm-elf.exp +++ b/ld/testsuite/ld-arm/arm-elf.exp @@ -209,6 +209,10 @@ set armelftests { "-EL -Ttext=0x00 --fix-cortex-a8 --defsym far_fn1=0x80000000 --defsym far_fn2=0x80000004 --defsym far_fn=0x7fff0000 --defsym _start=0" "-EL" {cortex-a8-far-1.s cortex-a8-far-2.s} {{objdump -dr cortex-a8-far.d}} "cortex-a8-far"} + {"Cortex-A8 erratum fix, headers" + "-EL --fix-cortex-a8 -T cortex-a8-fix-hdr.t" "-EL" {cortex-a8-fix-hdr.s} + {{objdump -dr cortex-a8-fix-hdr.d}} + "cortex-a8-fix-hdr"} {"Unwinding and -gc-sections" "-gc-sections" "" {gc-unwind.s} {{objdump -sj.data gc-unwind.d}} "gc-unwind"} diff --git a/ld/testsuite/ld-arm/cortex-a8-fix-hdr.d b/ld/testsuite/ld-arm/cortex-a8-fix-hdr.d new file mode 100644 index 00000000000..027d2a11519 --- /dev/null +++ b/ld/testsuite/ld-arm/cortex-a8-fix-hdr.d @@ -0,0 +1,24 @@ + +.*: file format .* + + +Disassembly of section \.text: + +00000fe0 <_start>: + fe0: bf00 nop + fe2: bf00 nop + fe4: bf00 nop + fe6: bf00 nop + fe8: bf00 nop + fea: bf00 nop + fec: bf00 nop + fee: bf00 nop + ff0: bf00 nop + ff2: bf00 nop + ff4: bf00 nop + ff6: bf00 nop + ff8: bf00 nop + ffa: ea81 0002 eor.w r0, r1, r2 + ffe: f000 b80f b.w 1020 <_start\+0x40> +#... + 1020: f7ff bfde b.w fe0 <_start> diff --git a/ld/testsuite/ld-arm/cortex-a8-fix-hdr.s b/ld/testsuite/ld-arm/cortex-a8-fix-hdr.s new file mode 100644 index 00000000000..827c0f8c078 --- /dev/null +++ b/ld/testsuite/ld-arm/cortex-a8-fix-hdr.s @@ -0,0 +1,14 @@ + .syntax unified + + .section .text, "ax" + + .align 5 + .globl _start + .thumb_func +_start: + .rept 13 + nop + .endr + eor r0, r1, r2 + b.w _start + diff --git a/ld/testsuite/ld-arm/cortex-a8-fix-hdr.t b/ld/testsuite/ld-arm/cortex-a8-fix-hdr.t new file mode 100644 index 00000000000..d3afacbe8e7 --- /dev/null +++ b/ld/testsuite/ld-arm/cortex-a8-fix-hdr.t @@ -0,0 +1,10 @@ + + +SECTIONS { + . = SIZEOF_HEADERS; + . += 0xf80; + .text : { + *(.text) + } = 0 + /DISCARD/ : { *(*) } +} |