From 35903be00caecb8248eb38414b3fad3fee65fbe8 Mon Sep 17 00:00:00 2001 From: Catherine Moore Date: Fri, 9 May 2008 19:28:47 +0000 Subject: [PATCH] gas/ * config/tc-mips.c (mips_frob_file): Don't match MIPS16 relocs with non-MIPS16 relocs. gas/testsuite/ * gas/mips/mips16-hilo-match.s: New test. * gas/mips/mip16-hilo-match.d: New test output.Index: config/tc-mips.c --- gas/ChangeLog | 5 + gas/config/tc-mips.c | 11 +- gas/testsuite/ChangeLog | 5 + gas/testsuite/gas/mips/mips.exp | 1 + gas/testsuite/gas/mips/mips16-hilo-match.d | 40 ++++++ gas/testsuite/gas/mips/mips16-hilo-match.s | 148 +++++++++++++++++++++ 6 files changed, 208 insertions(+), 2 deletions(-) create mode 100644 gas/testsuite/gas/mips/mips16-hilo-match.d create mode 100644 gas/testsuite/gas/mips/mips16-hilo-match.s diff --git a/gas/ChangeLog b/gas/ChangeLog index 2d1a9d1ad6e..887e0bb546c 100644 --- a/gas/ChangeLog +++ b/gas/ChangeLog @@ -1,3 +1,8 @@ +2008-05-09 Catherine Moore + + * config/tc-mips.c (mips_frob_file): Don't match MIPS16 relocs + with non-MIPS16 relocs. + 2008-05-09 Chao-ying Fu * config/tc-mips.c (md_begin): Use strncmp to compare TARGET_OS, in diff --git a/gas/config/tc-mips.c b/gas/config/tc-mips.c index 4a84e4d6fa6..1cac6105eea 100644 --- a/gas/config/tc-mips.c +++ b/gas/config/tc-mips.c @@ -11749,6 +11749,7 @@ void mips_frob_file (void) { struct mips_hi_fixup *l; + bfd_reloc_code_real_type looking_for_rtype = BFD_RELOC_UNUSED; for (l = mips_hi_fixup_list; l != NULL; l = l->next) { @@ -11778,13 +11779,19 @@ mips_frob_file (void) hi_pos = NULL; lo_pos = NULL; matched_lo_p = FALSE; + + if (l->fixp->fx_r_type == BFD_RELOC_MIPS16_HI16 + || l->fixp->fx_r_type == BFD_RELOC_MIPS16_HI16_S) + looking_for_rtype = BFD_RELOC_MIPS16_LO16; + else + looking_for_rtype = BFD_RELOC_LO16; + for (pos = &seginfo->fix_root; *pos != NULL; pos = &(*pos)->fx_next) { if (*pos == l->fixp) hi_pos = pos; - if (((*pos)->fx_r_type == BFD_RELOC_LO16 - || (*pos)->fx_r_type == BFD_RELOC_MIPS16_LO16) + if ((*pos)->fx_r_type == looking_for_rtype && (*pos)->fx_addsy == l->fixp->fx_addsy && (*pos)->fx_offset >= l->fixp->fx_offset && (lo_pos == NULL diff --git a/gas/testsuite/ChangeLog b/gas/testsuite/ChangeLog index 17a4b3133db..0d8e43c5e12 100644 --- a/gas/testsuite/ChangeLog +++ b/gas/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2008-05-09 Catherine Moore + + * gas/mips/mips16-hilo-match.s: New test. + * gas/mips/mip16-hilo-match.d: New test output. + 2008-05-02 H.J. Lu * gas/i386/i386.exp: Run movbe, movbe-intel, inval-movbe, ept, diff --git a/gas/testsuite/gas/mips/mips.exp b/gas/testsuite/gas/mips/mips.exp index d540a1a4b7e..29cff0c5c60 100644 --- a/gas/testsuite/gas/mips/mips.exp +++ b/gas/testsuite/gas/mips/mips.exp @@ -528,6 +528,7 @@ if { [istarget mips*-*-vxworks*] } { if $has_newabi { run_dump_test "mips16-hilo-n32" } + run_dump_test "mips16-hilo-match" } run_list_test "mips-no-jalx" "-32" run_dump_test "delay" diff --git a/gas/testsuite/gas/mips/mips16-hilo-match.d b/gas/testsuite/gas/mips/mips16-hilo-match.d new file mode 100644 index 00000000000..effd9bbf2d3 --- /dev/null +++ b/gas/testsuite/gas/mips/mips16-hilo-match.d @@ -0,0 +1,40 @@ +#objdump: -r +#name: MIPS16 mips16-hilo-match + +.*: +file format .*mips.* + +RELOCATION RECORDS FOR \[\.text\]: +OFFSET TYPE VALUE +00000010 R_MIPS_HI16 var4 +00000018 R_MIPS_LO16 var4 +00000008 R_MIPS_HI16 __var1 +00000020 R_MIPS_LO16 __var1 +0000001c R_MIPS_HI16 .sbss +0000002c R_MIPS_LO16 .sbss +00000030 R_MIPS_26 func4 +00000028 R_MIPS_HI16 __var3 +00000034 R_MIPS_LO16 __var3 +00000038 R_MIPS_LO16 hilo_match +0000003c R_MIPS_HI16 .bss +00000044 R_MIPS_LO16 .bss +00000040 R_MIPS_HI16 .bss +00000048 R_MIPS_LO16 .bss +0000004c R_MIPS_26 func3 +00000024 R_MIPS_HI16 hilo_match +00000050 R_MIPS_LO16 hilo_match +0000005e R_MIPS16_HI16 .data +00000068 R_MIPS16_LO16 .data +0000006c R_MIPS16_26 func1 +00000072 R_MIPS16_26 func2 +00000078 R_MIPS16_HI16 hilo_match +00000080 R_MIPS16_LO16 hilo_match +00000086 R_MIPS16_LO16 hilo_match +0000008a R_MIPS16_26 func1 + + +RELOCATION RECORDS FOR \[\.pdr\]: +OFFSET TYPE VALUE +00000000 R_MIPS_32 _pinit +00000020 R_MIPS_32 pdelt + + diff --git a/gas/testsuite/gas/mips/mips16-hilo-match.s b/gas/testsuite/gas/mips/mips16-hilo-match.s new file mode 100644 index 00000000000..7510d5d1ec9 --- /dev/null +++ b/gas/testsuite/gas/mips/mips16-hilo-match.s @@ -0,0 +1,148 @@ + .align 2 + .globl _pinit +.LFB84: + .set nomips16 + .ent _pinit +_pinit: + + lw $3,8($23) + li $5,1 + lui $2,%hi(__var1) + ori $3,$3,0x1 + lui $4,%hi(var4) + sw $3,8($23) + addiu $4,$4,%lo(var4) + lui $3,%hi(var5) + sw $5,%lo(__var1)($2) + lui $19,%hi(hilo_match) +.LVL100: + lui $2,%hi(__var3) + sw $5,%lo(var5)($3) + .set noreorder + .set nomacro + jal func4 + sw $5,%lo(__var3)($2) + .set macro + .set reorder + + lw $17,%lo(hilo_match)($19) +.LVL101: + lui $2,%hi(var6) + lui $3,%hi(var6+704) + addiu $16,$2,%lo(var6) +.LVL102: + addiu $18,$3,%lo(var6+704) + .set noreorder + .set nomacro + jal func3 + sw $2,%lo(hilo_match)($19) + + .end _pinit +.LFE84: + .size _pinit, .-_pinit + .align 2 + .globl pdelt +.LFB120: + .set mips16 + .ent pdelt +pdelt: + .set macro + .set reorder + + li $2,16 +.L321: +.LVL212: + j $31 +.LVL213: +.L322: + lhu $2,36($17) + move $4,$16 + li $16,%hi(var2) + sll $16,$16,8 + addiu $2,1 + sll $16,$16,8 + addiu $16,%lo(var2) + .set noreorder + .set nomacro + jal func1 + sh $2,36($17) + .set macro + .set reorder + + .set noreorder + .set nomacro + jal func2 + move $4,$16 + .set macro + .set reorder + + li $3,%hi(hilo_match) + sll $3,$3,8 + sll $3,$3,8 + lw $2,%lo(hilo_match)($3) + sw $2,0($17) + sw $17,%lo(hilo_match)($3) + .set noreorder + .set nomacro + jal func1 + move $4,$16 + .set macro + .set reorder + +.LVL214: + .set noreorder + .set nomacro + j $31 + li $2,0 + .set macro + .set reorder + + .end pdelt + .align 2 + .weak __var3 + .section .sbss,"aw",@nobits + .align 2 + .type __var3, @object + .size __var3, 4 +__var3: + .space 4 + .weak __var1 + .align 2 + .type __var1, @object + .size __var1, 4 +__var1: + .space 4 + .data + .align 2 + .weak __hilo_match + .align 2 + .type __hilo_match, @object + .size __hilo_match, 4 +__hilo_match: + .space 4 + .data + .align 2 + .align 2 + .type var2, @object + .size var2, 32 +var2: + .word 0 + .word -1 + .word 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .word 0 + .word 0 + .half 0 + .space 6 + .align 2 + .rdata + .align 2 + .space 8 + .local var5 + .comm var5,4,4 + .align 2 + .local var6 + .comm var6,704,4 -- 2.30.2