From d3fca0b5d450cea85fba81558f8faa8486d99e69 Mon Sep 17 00:00:00 2001 From: "Maciej W. Rozycki" Date: Sat, 24 Jul 2010 01:51:53 +0000 Subject: [PATCH] gas/ * config/tc-mips.c (macro)[M_JAL_1, M_JAL_2]: Handle the JALR delay slot in the noreorder mode with the o32 ABI. gas/testsuite/ * gas/mips/jal-svr4pic-noreorder.d: New test case. * gas/mips/mips1@jal-svr4pic-noreorder.d: New test subarchitecture. * gas/mips/r3000@jal-svr4pic-noreorder.d: Likewise. * gas/mips/jal-svr4pic-noreorder.s: Source for the new test case. * gas/mips/mips.exp: Run the new test case. --- gas/ChangeLog | 5 ++ gas/config/tc-mips.c | 2 + gas/testsuite/ChangeLog | 10 ++++ .../gas/mips/jal-svr4pic-noreorder.d | 45 +++++++++++++++++ .../gas/mips/jal-svr4pic-noreorder.s | 25 ++++++++++ gas/testsuite/gas/mips/mips.exp | 2 + .../gas/mips/mips1@jal-svr4pic-noreorder.d | 48 +++++++++++++++++++ .../gas/mips/r3000@jal-svr4pic-noreorder.d | 5 ++ 8 files changed, 142 insertions(+) create mode 100644 gas/testsuite/gas/mips/jal-svr4pic-noreorder.d create mode 100644 gas/testsuite/gas/mips/jal-svr4pic-noreorder.s create mode 100644 gas/testsuite/gas/mips/mips1@jal-svr4pic-noreorder.d create mode 100644 gas/testsuite/gas/mips/r3000@jal-svr4pic-noreorder.d diff --git a/gas/ChangeLog b/gas/ChangeLog index 5ad0269b30d..09ee0a27e7c 100644 --- a/gas/ChangeLog +++ b/gas/ChangeLog @@ -1,3 +1,8 @@ +2010-07-24 Maciej W. Rozycki + + * config/tc-mips.c (macro)[M_JAL_1, M_JAL_2]: Handle the JALR + delay slot in the noreorder mode with the o32 ABI. + 2010-07-23 Naveen.H.S Ina Pandit diff --git a/gas/config/tc-mips.c b/gas/config/tc-mips.c index 21aedd9116e..103ab6f3588 100644 --- a/gas/config/tc-mips.c +++ b/gas/config/tc-mips.c @@ -6219,6 +6219,8 @@ macro (struct mips_cl_insn *ip) /* Quiet this warning. */ mips_cprestore_valid = 1; } + if (mips_opts.noreorder) + macro_build (NULL, "nop", ""); expr1.X_add_number = mips_cprestore_offset; macro_build_ldst_constoffset (&expr1, ADDRESS_LOAD_INSN, mips_gp_register, diff --git a/gas/testsuite/ChangeLog b/gas/testsuite/ChangeLog index a71657a0b29..aa1b0a4eb9d 100644 --- a/gas/testsuite/ChangeLog +++ b/gas/testsuite/ChangeLog @@ -1,3 +1,13 @@ +2010-07-24 Maciej W. Rozycki + + * gas/mips/jal-svr4pic-noreorder.d: New test case. + * gas/mips/mips1@jal-svr4pic-noreorder.d: New test + subarchitecture. + * gas/mips/r3000@jal-svr4pic-noreorder.d: Likewise. + * gas/mips/jal-svr4pic-noreorder.s: Source for the new test + case. + * gas/mips/mips.exp: Run the new test case. + 2010-07-24 Maciej W. Rozycki * gas/mips/jal-svr4pic.d: Rename to... diff --git a/gas/testsuite/gas/mips/jal-svr4pic-noreorder.d b/gas/testsuite/gas/mips/jal-svr4pic-noreorder.d new file mode 100644 index 00000000000..26a4cc1a57f --- /dev/null +++ b/gas/testsuite/gas/mips/jal-svr4pic-noreorder.d @@ -0,0 +1,45 @@ +#objdump: -dr --prefix-addresses --show-raw-insn +#name: MIPS jal-svr4pic noreorder +#as: -32 -KPIC +#source: jal-svr4pic-noreorder.s + +# Test the jal macro with -KPIC and `.set noreorder'. + +.*: +file format .*mips.* + +Disassembly of section \.text: +[0-9a-f]+ <[^>]*> 3c1c0000 lui gp,0x0 +[ ]*0: R_MIPS_HI16 _gp_disp +[0-9a-f]+ <[^>]*> 279c0000 addiu gp,gp,0 +[ ]*4: R_MIPS_LO16 _gp_disp +[0-9a-f]+ <[^>]*> 0399e021 addu gp,gp,t9 +[0-9a-f]+ <[^>]*> afbc0000 sw gp,0\(sp\) +[0-9a-f]+ <[^>]*> 0320f809 jalr t9 +[0-9a-f]+ <[^>]*> 00000000 nop +[0-9a-f]+ <[^>]*> 8fbc0000 lw gp,0\(sp\) +[0-9a-f]+ <[^>]*> 03202009 jalr a0,t9 +[0-9a-f]+ <[^>]*> 00000000 nop +[0-9a-f]+ <[^>]*> 8fbc0000 lw gp,0\(sp\) +[0-9a-f]+ <[^>]*> 8f990000 lw t9,0\(gp\) +[ ]*28: R_MIPS_GOT16 .text +[0-9a-f]+ <[^>]*> 27390000 addiu t9,t9,0 +[ ]*2c: R_MIPS_LO16 .text +[0-9a-f]+ <[^>]*> 0320f809 jalr t9 +[ ]*30: R_MIPS_JALR text_label +[0-9a-f]+ <[^>]*> 00000000 nop +[0-9a-f]+ <[^>]*> 8fbc0000 lw gp,0\(sp\) +[0-9a-f]+ <[^>]*> 8f990000 lw t9,0\(gp\) +[ ]*3c: R_MIPS_CALL16 weak_text_label +[0-9a-f]+ <[^>]*> 0320f809 jalr t9 +[ ]*40: R_MIPS_JALR weak_text_label +[0-9a-f]+ <[^>]*> 00000000 nop +[0-9a-f]+ <[^>]*> 8fbc0000 lw gp,0\(sp\) +[0-9a-f]+ <[^>]*> 8f990000 lw t9,0\(gp\) +[ ]*4c: R_MIPS_CALL16 external_text_label +[0-9a-f]+ <[^>]*> 0320f809 jalr t9 +[ ]*50: R_MIPS_JALR external_text_label +[0-9a-f]+ <[^>]*> 00000000 nop +[0-9a-f]+ <[^>]*> 8fbc0000 lw gp,0\(sp\) +[0-9a-f]+ <[^>]*> 1000ffe8 b 0+0000 +[0-9a-f]+ <[^>]*> 00000000 nop + \.\.\. diff --git a/gas/testsuite/gas/mips/jal-svr4pic-noreorder.s b/gas/testsuite/gas/mips/jal-svr4pic-noreorder.s new file mode 100644 index 00000000000..a8567147276 --- /dev/null +++ b/gas/testsuite/gas/mips/jal-svr4pic-noreorder.s @@ -0,0 +1,25 @@ +# Source file used to test the jal macro with -KPIC code. + + .weak weak_text_label + + .ent text_label +text_label: + .frame $sp,0,$31 + .set noreorder + .cpload $25 + .cprestore 0 + jal $25 + jal $4,$25 + jal text_label + jal weak_text_label + jal external_text_label + +# Test j as well. + j text_label + .set reorder + nop + .end text_label + +# Force at least 8 (non-delay-slot) zero bytes, to make 'objdump' print ... + .align 2 + .space 8 diff --git a/gas/testsuite/gas/mips/mips.exp b/gas/testsuite/gas/mips/mips.exp index e3aade423e7..b5f31fea671 100644 --- a/gas/testsuite/gas/mips/mips.exp +++ b/gas/testsuite/gas/mips/mips.exp @@ -465,6 +465,8 @@ if { [istarget mips*-*-vxworks*] } { if $elf { run_dump_test_arches "jal-svr4pic" \ [mips_arch_list_matching mips1] + run_dump_test_arches "jal-svr4pic-noreorder" \ + [mips_arch_list_matching mips1] } if $elf { run_dump_test "jal-xgot" } run_list_test_arches "jal-range" "-32" [mips_arch_list_matching mips1] diff --git a/gas/testsuite/gas/mips/mips1@jal-svr4pic-noreorder.d b/gas/testsuite/gas/mips/mips1@jal-svr4pic-noreorder.d new file mode 100644 index 00000000000..4ac9467e6f1 --- /dev/null +++ b/gas/testsuite/gas/mips/mips1@jal-svr4pic-noreorder.d @@ -0,0 +1,48 @@ +#objdump: -dr --prefix-addresses --show-raw-insn +#name: MIPS jal-svr4pic noreorder +#as: -32 -KPIC +#source: jal-svr4pic-noreorder.s + +# Test the jal macro with -KPIC and `.set noreorder' (MIPS1). + +.*: +file format .*mips.* + +Disassembly of section \.text: +[0-9a-f]+ <[^>]*> 3c1c0000 lui gp,0x0 +[ ]*0: R_MIPS_HI16 _gp_disp +[0-9a-f]+ <[^>]*> 279c0000 addiu gp,gp,0 +[ ]*4: R_MIPS_LO16 _gp_disp +[0-9a-f]+ <[^>]*> 0399e021 addu gp,gp,t9 +[0-9a-f]+ <[^>]*> afbc0000 sw gp,0\(sp\) +[0-9a-f]+ <[^>]*> 0320f809 jalr t9 +[0-9a-f]+ <[^>]*> 00000000 nop +[0-9a-f]+ <[^>]*> 8fbc0000 lw gp,0\(sp\) +[0-9a-f]+ <[^>]*> 03202009 jalr a0,t9 +[0-9a-f]+ <[^>]*> 00000000 nop +[0-9a-f]+ <[^>]*> 8fbc0000 lw gp,0\(sp\) +[0-9a-f]+ <[^>]*> 8f990000 lw t9,0\(gp\) +[ ]*28: R_MIPS_GOT16 .text +[0-9a-f]+ <[^>]*> 00000000 nop +[0-9a-f]+ <[^>]*> 27390000 addiu t9,t9,0 +[ ]*30: R_MIPS_LO16 .text +[0-9a-f]+ <[^>]*> 0320f809 jalr t9 +[ ]*34: R_MIPS_JALR text_label +[0-9a-f]+ <[^>]*> 00000000 nop +[0-9a-f]+ <[^>]*> 8fbc0000 lw gp,0\(sp\) +[0-9a-f]+ <[^>]*> 8f990000 lw t9,0\(gp\) +[ ]*40: R_MIPS_CALL16 weak_text_label +[0-9a-f]+ <[^>]*> 00000000 nop +[0-9a-f]+ <[^>]*> 0320f809 jalr t9 +[ ]*48: R_MIPS_JALR weak_text_label +[0-9a-f]+ <[^>]*> 00000000 nop +[0-9a-f]+ <[^>]*> 8fbc0000 lw gp,0\(sp\) +[0-9a-f]+ <[^>]*> 8f990000 lw t9,0\(gp\) +[ ]*54: R_MIPS_CALL16 external_text_label +[0-9a-f]+ <[^>]*> 00000000 nop +[0-9a-f]+ <[^>]*> 0320f809 jalr t9 +[ ]*5c: R_MIPS_JALR external_text_label +[0-9a-f]+ <[^>]*> 00000000 nop +[0-9a-f]+ <[^>]*> 8fbc0000 lw gp,0\(sp\) +[0-9a-f]+ <[^>]*> 1000ffe5 b 0+0000 +[0-9a-f]+ <[^>]*> 00000000 nop + \.\.\. diff --git a/gas/testsuite/gas/mips/r3000@jal-svr4pic-noreorder.d b/gas/testsuite/gas/mips/r3000@jal-svr4pic-noreorder.d new file mode 100644 index 00000000000..8419b82eecc --- /dev/null +++ b/gas/testsuite/gas/mips/r3000@jal-svr4pic-noreorder.d @@ -0,0 +1,5 @@ +#objdump: -dr --prefix-addresses --show-raw-insn +#name: MIPS jal-svr4pic noreorder +#as: -32 -KPIC +#source: jal-svr4pic-noreorder.s +#dump: mips1@jal-svr4pic-noreorder.d -- 2.30.2