gas/
authorCatherine Moore <clm@redhat.com>
Fri, 9 May 2008 19:28:47 +0000 (19:28 +0000)
committerCatherine Moore <clm@redhat.com>
Fri, 9 May 2008 19:28:47 +0000 (19:28 +0000)
        * 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
gas/config/tc-mips.c
gas/testsuite/ChangeLog
gas/testsuite/gas/mips/mips.exp
gas/testsuite/gas/mips/mips16-hilo-match.d [new file with mode: 0644]
gas/testsuite/gas/mips/mips16-hilo-match.s [new file with mode: 0644]

index 2d1a9d1ad6eb82a965651614f9f801057f8f34c2..887e0bb546cff01bc0502be4722f5c7c4e583023 100644 (file)
@@ -1,3 +1,8 @@
+2008-05-09  Catherine Moore  <clm@codesourcery.com>
+
+       * config/tc-mips.c (mips_frob_file): Don't match MIPS16 relocs
+       with non-MIPS16 relocs.
+
 2008-05-09  Chao-ying Fu  <fu@mips.com>
 
        * config/tc-mips.c (md_begin): Use strncmp to compare TARGET_OS, in
index 4a84e4d6fa6f27b24bd7f1a3288bf3298d9b9fbc..1cac6105eea79e1175c79d2836cabe1e281ccfba 100644 (file)
@@ -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
index 17a4b3133db484326ac3bb0f65b7926f597263ea..0d8e43c5e122af25f2fda4f52f4f36d0394e5f9d 100644 (file)
@@ -1,3 +1,8 @@
+2008-05-09  Catherine Moore  <clm@codesourcery.com>
+
+       * gas/mips/mips16-hilo-match.s: New test.
+       * gas/mips/mip16-hilo-match.d: New test output.
+
 2008-05-02  H.J. Lu  <hongjiu.lu@intel.com>
 
        * gas/i386/i386.exp: Run movbe, movbe-intel, inval-movbe, ept,
index d540a1a4b7ec556d1e4c85daf132264d15ba6570..29cff0c5c607758f57ade320c3f2e45809efe54c 100644 (file)
@@ -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 (file)
index 0000000..effd9bb
--- /dev/null
@@ -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 (file)
index 0000000..7510d5d
--- /dev/null
@@ -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