* ld-spu/ear.s: New.
* ld-spu/ear.d: New.
* ld-spu/embed.rd: New.
* ld-spu/ovl2.s: New.
* ld-spu/ovl2.d: New.
+2007-03-27 Alan Modra <amodra@bigpond.net.au>
+
+ * ld-spu/spu.exp (embed_test): New.
+ * ld-spu/ear.s: New.
+ * ld-spu/ear.d: New.
+ * ld-spu/embed.rd: New.
+ * ld-spu/ovl2.s: New.
+ * ld-spu/ovl2.d: New.
+
2007-03-24 Alan Modra <amodra@bigpond.net.au>
* ld-elf/overlay.d: -u symbols we want to see in the output.
--- /dev/null
+#as:
+#objdump: -Dr
+#name: ear
+
+.*: +file format .*
+
+Disassembly of section \.text:
+
+0+00 <_start>:
+ 0: 32 00 00 00 br 0
+ 0: SPU_REL16 _start
+
+Disassembly of section \.data:
+
+0+00 <_EAR_main>:
+ \.\.\.
+
+0+20 <_EAR_foo>:
+ \.\.\.
+Disassembly of section \.toe:
+
+0+00 <_EAR_>:
+ \.\.\.
+
+0+10 <_EAR_bar>:
+ \.\.\.
+Disassembly of section \.data\.blah:
+
+0+00 <_EAR_blah>:
+ \.\.\.
--- /dev/null
+ .text
+ .global _start
+_start:
+ br _start
+
+#test old-style toe _EAR_ syms
+ .section .toe,"a",@nobits
+_EAR_:
+ .space 16
+_EAR_bar:
+ .space 16
+
+#test new-style _EAR_ syms
+ .data
+_EAR_main:
+ .space 16
+
+#new ones don't need to be 16 bytes apart
+ .space 16
+_EAR_foo:
+ .space 16
+
+ .section .data.blah,"aw",@progbits
+_EAR_blah:
+ .space 16
--- /dev/null
+
+Relocation section '\.rela\.rodata\.speelf' at .* contains 3 entries:
+ Offset Info Type Sym\. Value Symbol's Name \+ Addend
+00000184 00000601 R_PPC_ADDR32 00000000 main \+ 0
+000001a4 00000901 R_PPC_ADDR32 00000000 foo \+ 0
+000001b4 00000701 R_PPC_ADDR32 00000000 blah \+ 0
+
+Relocation section '\.rela\.data' at .* contains 2 entries:
+ Offset Info Type Sym\. Value Symbol's Name \+ Addend
+00000004 00000201 R_PPC_ADDR32 00000000 \.rodata\.speelf \+ 0
+00000008 00000401 R_PPC_ADDR32 00000000 \.data\.spetoe \+ 0
+
+Relocation section '\.rela\.data\.spetoe' at .* contains 2 entries:
+ Offset Info Type Sym\. Value Symbol's Name \+ Addend
+00000004 00000201 R_PPC_ADDR32 00000000 \.rodata\.speelf \+ 0
+00000014 00000a01 R_PPC_ADDR32 00000000 bar \+ 0
--- /dev/null
+#source: ovl2.s
+#ld: -N -T ovl.lnk --emit-relocs
+#objdump: -D -r
+
+.*elf32-spu
+
+Disassembly of section \.text:
+
+00000100 <_start>:
+ 100: 33 00 06 00 brsl \$0,130 <00000000\.ovl_call\.f1_a1> # 130
+ 100: SPU_REL16 f1_a1
+ 104: 33 00 03 80 brsl \$0,120 <00000000\.ovl_call\.10:4> # 120
+ 104: SPU_REL16 setjmp
+ 108: 32 7f ff 00 br 100 <_start> # 100
+ 108: SPU_REL16 _start
+
+0000010c <setjmp>:
+ 10c: 35 00 00 00 bi \$0
+
+00000110 <longjmp>:
+ 110: 35 00 00 00 bi \$0
+ ...
+
+00000120 <00000000\.ovl_call.10:4>:
+ 120: 42 00 86 4f ila \$79,268 # 10c
+ 124: 40 20 00 00 nop \$0
+ 128: 42 00 00 4e ila \$78,0
+ 12c: 32 00 0a 80 br 180 <__ovly_load> # 180
+
+00000130 <00000000\.ovl_call.f1_a1>:
+ 130: 42 02 00 4f ila \$79,1024 # 400
+ 134: 40 20 00 00 nop \$0
+ 138: 42 00 00 ce ila \$78,1
+ 13c: 32 00 08 80 br 180 <__ovly_load> # 180
+
+00000140 <00000000\.ovl_call\._SPUEAR_f1_a2>:
+ 140: 42 02 00 4f ila \$79,1024 # 400
+ 144: 40 20 00 00 nop \$0
+ 148: 42 00 01 4e ila \$78,2
+ 14c: 32 00 06 80 br 180 <__ovly_load> # 180
+#...
+Disassembly of section \.ov_a1:
+
+00000400 <f1_a1>:
+ 400: 35 00 00 00 bi \$0
+ \.\.\.
+Disassembly of section \.ov_a2:
+
+00000400 <_SPUEAR_f1_a2>:
+ 400: 32 7f a2 00 br 110 <longjmp> # 110
+ 400: SPU_REL16 longjmp
+ \.\.\.
+Disassembly of section \.data:
+
+00000410 <_ovly_table>:
+ 410: 00 00 04 00 .*
+ 414: 00 00 00 10 .*
+ 418: 00 00 02 c0 .*
+ 41c: 00 00 00 01 .*
+ 420: 00 00 04 00 .*
+ 424: 00 00 00 10 .*
+ 428: 00 00 02 d0 .*
+ 42c: 00 00 00 01 .*
+
+00000430 <_ovly_buf_table>:
+ 430: 00 00 00 00 .*
+Disassembly of section \.toe:
+
+00000440 <_EAR_>:
+ \.\.\.
+Disassembly of section \.note\.spu_name:
+
+.* <\.note\.spu_name>:
+.*: 00 00 00 08 .*
+.*: 00 00 00 0c .*
+.*: 00 00 00 01 .*
+.*: 53 50 55 4e .*
+.*: 41 4d 45 00 .*
+.*: 74 6d 70 64 .*
+.*: 69 72 2f 64 .*
+.*: 75 6d 70 00 .*
--- /dev/null
+ .text
+ .p2align 2
+ .global _start
+_start:
+ brsl lr,f1_a1
+ brsl lr,setjmp
+ br _start
+
+ .type setjmp,@function
+setjmp:
+ bi lr
+ .size setjmp,.-setjmp
+
+ .type longjmp,@function
+longjmp:
+ bi lr
+ .size longjmp,.-longjmp
+
+ .section .ov_a1,"ax",@progbits
+ .p2align 2
+ .global f1_a1
+ .type f1_a1,@function
+f1_a1:
+ bi lr
+ .size f1_a1,.-f1_a1
+
+ .section .ov_a2,"ax",@progbits
+ .p2align 2
+ .type f1_a2,@function
+f1_a2:
+ br longjmp
+ .size f1_a2,.-f1_a2
+
+_SPUEAR_f1_a2 = f1_a2
+ .global _SPUEAR_f1_a2
return
}
+proc embed_test { } {
+ global subdir srcdir
+ global AS ASFLAGS LD LDFLAGS READELF READELFFLAGS
+
+ set cmd "$AS $ASFLAGS -o tmpdir/ear.o $srcdir/$subdir/ear.s"
+ send_log "$cmd\n"
+ set cmdret [catch "exec $cmd" comp_output]
+ set comp_output [prune_warnings $comp_output]
+ if { $cmdret != 0 || $comp_output != ""} then {
+ send_log "$comp_output\n"
+ verbose "$comp_output" 3
+ fail "ear assembly"
+ return
+ }
+
+ set cmd "$LD $LDFLAGS -o tmpdir/ear tmpdir/ear.o"
+ send_log "$cmd\n"
+ set cmdret [catch "exec $cmd" comp_output]
+ set comp_output [prune_warnings $comp_output]
+ if { $cmdret != 0 || $comp_output != ""} then {
+ send_log "$comp_output\n"
+ verbose "$comp_output" 3
+ fail "ear link"
+ return
+ }
+
+ set cmd "sh $srcdir/../../binutils/embedspu.sh -m32 ear tmpdir/ear tmpdir/embed.o"
+ send_log "$cmd\n"
+ set cmdret [catch "exec $cmd" comp_output]
+ set comp_output [prune_warnings $comp_output]
+ if { $cmdret != 0 || $comp_output != ""} then {
+ send_log "$comp_output\n"
+ verbose "$comp_output" 3
+ if { [regexp "unknown pseudo-op: `.reloc'" $comp_output] } {
+ untested "ear embedspu"
+ return
+ }
+ fail "ear embedspu"
+ return
+ }
+
+ set cmd "$READELF $READELFFLAGS -r --wide tmpdir/embed.o > tmpdir/embed.out"
+ send_log "$cmd\n"
+ set cmdret [catch "exec $cmd" comp_output]
+ set comp_output [prune_warnings $comp_output]
+ if { $cmdret != 0 || $comp_output != ""} then {
+ send_log "$comp_output\n"
+ verbose "$comp_output" 3
+ fail "ear embed readelf"
+ return
+ }
+
+ if { [regexp_diff "tmpdir/embed.out" $srcdir/$subdir/embed.rd] } then {
+ fail "ear embed output"
+ return
+ }
+
+ pass "ear embed"
+}
+
set rd_test_list [lsort [glob -nocomplain $srcdir/$subdir/*.d]]
foreach sputest $rd_test_list {
verbose [file rootname $sputest]
run_dump_test [file rootname $sputest]
}
+
+if { [isbuild "powerpc*-*-linux*"] } {
+ embed_test
+}