mirror of
https://github.com/darlinghq/darling-gdb.git
synced 2025-02-12 12:40:36 +00:00
gas/
* config/tc-mips.c (MIPS_JALR_HINT_P): Take an expr argument. Require the target to be a bare symbol on targets with in-place addends. (macro_build_jalr): Update accordingly. (mips_fix_adjustable): Don't reduce R_MIPS_JALRs on targets with in-place addends. gas/testsuite/ * gas/mips/jalr2.s, gas/mips/jalr2.d: New test. * gas/mips/jal-svr4pic.d: Don't expect R_MIPS_JALRs to be reduced. * gas/mips/jal-xgot.d: Likewise. * gas/mips/mips-abi32-pic2.d: Likewise. * gas/mips/mips.exp: Run it.
This commit is contained in:
parent
3c0bfb2a23
commit
1180b5a4de
@ -1,3 +1,12 @@
|
||||
2009-09-13 Richard Sandiford <rdsandiford@googlemail.com>
|
||||
|
||||
* config/tc-mips.c (MIPS_JALR_HINT_P): Take an expr argument.
|
||||
Require the target to be a bare symbol on targets with
|
||||
in-place addends.
|
||||
(macro_build_jalr): Update accordingly.
|
||||
(mips_fix_adjustable): Don't reduce R_MIPS_JALRs on targets
|
||||
with in-place addends.
|
||||
|
||||
2009-09-11 Nick Clifton <nickc@redhat.com>
|
||||
|
||||
* po/gas.pot: Updated by the Translation project.
|
||||
|
@ -292,10 +292,14 @@ static int file_ase_mips16;
|
||||
|
||||
/* True if we want to create R_MIPS_JALR for jalr $25. */
|
||||
#ifdef TE_IRIX
|
||||
#define MIPS_JALR_HINT_P HAVE_NEWABI
|
||||
#define MIPS_JALR_HINT_P(EXPR) HAVE_NEWABI
|
||||
#else
|
||||
/* As a GNU extension, we use R_MIPS_JALR for o32 too. */
|
||||
#define MIPS_JALR_HINT_P 1
|
||||
/* As a GNU extension, we use R_MIPS_JALR for o32 too. However,
|
||||
because there's no place for any addend, the only acceptable
|
||||
expression is a bare symbol. */
|
||||
#define MIPS_JALR_HINT_P(EXPR) \
|
||||
(!HAVE_IN_PLACE_ADDENDS \
|
||||
|| ((EXPR)->X_op == O_symbol && (EXPR)->X_add_number == 0))
|
||||
#endif
|
||||
|
||||
/* True if -mips3d was passed or implied by arguments passed on the
|
||||
@ -3930,13 +3934,13 @@ macro_build_jalr (expressionS *ep)
|
||||
{
|
||||
char *f = NULL;
|
||||
|
||||
if (MIPS_JALR_HINT_P)
|
||||
if (MIPS_JALR_HINT_P (ep))
|
||||
{
|
||||
frag_grow (8);
|
||||
f = frag_more (0);
|
||||
}
|
||||
macro_build (NULL, "jalr", "d,s", RA, PIC_CALL_REG);
|
||||
if (MIPS_JALR_HINT_P)
|
||||
if (MIPS_JALR_HINT_P (ep))
|
||||
fix_new_exp (frag_now, f - frag_now->fr_literal,
|
||||
4, ep, FALSE, BFD_RELOC_MIPS_JALR);
|
||||
}
|
||||
@ -14097,6 +14101,10 @@ mips_fix_adjustable (fixS *fixp)
|
||||
&& (S_GET_SEGMENT (fixp->fx_addsy)->flags & SEC_MERGE) != 0)
|
||||
return 0;
|
||||
|
||||
/* There is no place to store an in-place offset for JALR relocations. */
|
||||
if (fixp->fx_r_type == BFD_RELOC_MIPS_JALR && HAVE_IN_PLACE_ADDENDS)
|
||||
return 0;
|
||||
|
||||
#ifdef OBJ_ELF
|
||||
/* R_MIPS16_26 relocations against non-MIPS16 functions might resolve
|
||||
to a floating-point stub. The same is true for non-R_MIPS16_26
|
||||
|
@ -1,3 +1,11 @@
|
||||
2009-09-13 Richard Sandiford <rdsandiford@googlemail.com>
|
||||
|
||||
* gas/mips/jalr2.s, gas/mips/jalr2.d: New test.
|
||||
* gas/mips/jal-svr4pic.d: Don't expect R_MIPS_JALRs to be reduced.
|
||||
* gas/mips/jal-xgot.d: Likewise.
|
||||
* gas/mips/mips-abi32-pic2.d: Likewise.
|
||||
* gas/mips/mips.exp: Run it.
|
||||
|
||||
2009-09-13 Richard Sandiford <rdsandiford@googlemail.com>
|
||||
|
||||
* gas/mips/mips16-dwarf2-n32.d: Expect odd addresses.
|
||||
|
@ -26,7 +26,7 @@ Disassembly of section .text:
|
||||
0+0034 <[^>]*> addiu t9,t9,0
|
||||
[ ]*34: R_MIPS_LO16 .text
|
||||
0+0038 <[^>]*> jalr t9
|
||||
[ ]*38: R_MIPS_JALR .text
|
||||
[ ]*38: R_MIPS_JALR text_label
|
||||
0+003c <[^>]*> nop
|
||||
0+0040 <[^>]*> lw gp,0\(sp\)
|
||||
0+0044 <[^>]*> nop
|
||||
|
@ -27,7 +27,7 @@ Disassembly of section .text:
|
||||
0+0034 <[^>]*> addiu t9,t9,0
|
||||
[ ]*34: R_MIPS_LO16 .text
|
||||
0+0038 <[^>]*> jalr t9
|
||||
[ ]*38: R_MIPS_JALR .text
|
||||
[ ]*38: R_MIPS_JALR text_label
|
||||
0+003c <[^>]*> nop
|
||||
0+0040 <[^>]*> lw gp,0\(sp\)
|
||||
0+0044 <[^>]*> lui t9,0x0
|
||||
|
41
gas/testsuite/gas/mips/jalr2.d
Normal file
41
gas/testsuite/gas/mips/jalr2.d
Normal file
@ -0,0 +1,41 @@
|
||||
#as: -mips2 -32 -KPIC
|
||||
#objdump: -dr
|
||||
|
||||
.*
|
||||
|
||||
|
||||
Disassembly of section \.text:
|
||||
|
||||
.* <test>:
|
||||
.*: afbc0010 sw gp,16\(sp\)
|
||||
.*: 8f990000 lw t9,0\(gp\)
|
||||
.*: R_MIPS_GOT16 \.text
|
||||
.*: 2739004c addiu t9,t9,76
|
||||
.*: R_MIPS_LO16 \.text
|
||||
.*: 0320f809 jalr t9
|
||||
.*: R_MIPS_JALR local
|
||||
.*: 00000000 nop
|
||||
.*: 8fbc0010 lw gp,16\(sp\)
|
||||
.*: 8f990000 lw t9,0\(gp\)
|
||||
.*: R_MIPS_GOT16 \.text
|
||||
.*: 27390058 addiu t9,t9,88
|
||||
.*: R_MIPS_LO16 \.text
|
||||
# No R_MIPS_JALR here, because the target address had an addend.
|
||||
.*: 0320f809 jalr t9
|
||||
.*: 00000000 nop
|
||||
.*: 8fbc0010 lw gp,16\(sp\)
|
||||
.*: 8f990000 lw t9,0\(gp\)
|
||||
.*: R_MIPS_CALL16 global
|
||||
.*: 0320f809 jalr t9
|
||||
.*: R_MIPS_JALR global
|
||||
.*: 00000000 nop
|
||||
.*: 8fbc0010 lw gp,16\(sp\)
|
||||
.*: 8f99000c lw t9,12\(gp\)
|
||||
.*: R_MIPS_CALL16 global
|
||||
# No R_MIPS_JALR here either, for the same reason.
|
||||
.*: 0320f809 jalr t9
|
||||
.*: 00000000 nop
|
||||
.*: 8fbc0010 lw gp,16\(sp\)
|
||||
|
||||
.* <local>:
|
||||
\.\.\.
|
15
gas/testsuite/gas/mips/jalr2.s
Normal file
15
gas/testsuite/gas/mips/jalr2.s
Normal file
@ -0,0 +1,15 @@
|
||||
.ent test
|
||||
test:
|
||||
.frame $sp,32,$31
|
||||
.cprestore 16
|
||||
jal local
|
||||
jal local+12
|
||||
jal global
|
||||
jal global+12
|
||||
.end test
|
||||
|
||||
local:
|
||||
nop
|
||||
nop
|
||||
nop
|
||||
nop
|
@ -16,7 +16,7 @@ Disassembly of section \.text:
|
||||
0+014 <[^>]*> 273900cc addiu t9,t9,204
|
||||
14: R_MIPS_LO16 \.text
|
||||
0+018 <[^>]*> 0320f809 jalr t9
|
||||
18: R_MIPS_JALR \.text
|
||||
18: R_MIPS_JALR end
|
||||
0+01c <[^>]*> 00000000 nop
|
||||
0+020 <[^>]*> 8fbc0008 lw gp,8\(sp\)
|
||||
0+024 <[^>]*> 00000000 nop
|
||||
@ -36,7 +36,7 @@ Disassembly of section \.text:
|
||||
0+050 <[^>]*> 273900cc addiu t9,t9,204
|
||||
50: R_MIPS_LO16 \.text
|
||||
0+054 <[^>]*> 0320f809 jalr t9
|
||||
54: R_MIPS_JALR \.text
|
||||
54: R_MIPS_JALR end
|
||||
0+058 <[^>]*> 00000000 nop
|
||||
0+05c <[^>]*> 3c010001 lui at,0x1
|
||||
0+060 <[^>]*> 003d0821 addu at,at,sp
|
||||
@ -60,7 +60,7 @@ Disassembly of section \.text:
|
||||
0+09c <[^>]*> 273900cc addiu t9,t9,204
|
||||
9c: R_MIPS_LO16 \.text
|
||||
0+0a0 <[^>]*> 0320f809 jalr t9
|
||||
a0: R_MIPS_JALR \.text
|
||||
a0: R_MIPS_JALR end
|
||||
0+0a4 <[^>]*> 00000000 nop
|
||||
0+0a8 <[^>]*> 3c010001 lui at,0x1
|
||||
0+0ac <[^>]*> 003d0821 addu at,at,sp
|
||||
|
@ -706,6 +706,7 @@ if { [istarget mips*-*-vxworks*] } {
|
||||
|
||||
run_list_test "tls-ill" "-32"
|
||||
run_dump_test "tls-o32"
|
||||
run_dump_test "jalr2"
|
||||
}
|
||||
|
||||
if $has_newabi {
|
||||
|
Loading…
x
Reference in New Issue
Block a user