gas/
authorRichard Sandiford <rdsandiford@googlemail.com>
Thu, 2 May 2013 22:30:11 +0000 (22:30 +0000)
committerRichard Sandiford <rdsandiford@googlemail.com>
Thu, 2 May 2013 22:30:11 +0000 (22:30 +0000)
* config/tc-mips.c (mips_pseudo_table): Add stabd and stabs entries.
(s_mips_stab): Do not restrict to stabn only.

gas/testsuite/
* gas/mips/mips16-stabs.s, gas/mips/mips16-stabs.d: New test.
* gas/mips/mips.exp: Run it.

gas/ChangeLog
gas/config/tc-mips.c
gas/testsuite/ChangeLog
gas/testsuite/gas/mips/mips.exp
gas/testsuite/gas/mips/mips16-stabs.d [new file with mode: 0644]
gas/testsuite/gas/mips/mips16-stabs.s [new file with mode: 0644]

index e4f896ad2d0f2c3588c9f2d6bb5a3325337b2671..417e5ed532d9c0415355c0ff5349a04b13ebf916 100644 (file)
@@ -1,3 +1,8 @@
+2013-05-02  Richard Sandiford  <rdsandiford@googlemail.com>
+
+       * config/tc-mips.c (mips_pseudo_table): Add stabd and stabs entries.
+       (s_mips_stab): Do not restrict to stabn only.
+
 2013-05-02  Nick Clifton  <nickc@redhat.com>
 
        * config/tc-msp430.c: Add support for the MSP430X architecture.
index 29d2c022541591a39a5499dff2f28eb8150a4737..012935d354c5c89acba808f7509405db218a74d3 100644 (file)
@@ -1472,7 +1472,9 @@ static const pseudo_typeS mips_pseudo_table[] =
   {"section", s_change_section, 0},
   {"short", s_cons, 1},
   {"single", s_float_cons, 'f'},
+  {"stabd", s_mips_stab, 'd'},
   {"stabn", s_mips_stab, 'n'},
+  {"stabs", s_mips_stab, 's'},
   {"text", s_change_sec, 't'},
   {"word", s_cons, 2},
 
@@ -17088,18 +17090,24 @@ s_insn (int ignore ATTRIBUTE_UNUSED)
   demand_empty_rest_of_line ();
 }
 
-/* Handle a .stabn directive.  We need these in order to mark a label
-   as being a mips16 text label correctly.  Sometimes the compiler
-   will emit a label, followed by a .stabn, and then switch sections.
-   If the label and .stabn are in mips16 mode, then the label is
-   really a mips16 text label.  */
+/* Handle a .stab[snd] directive.  Ideally these directives would be
+   implemented in a transparent way, so that removing them would not
+   have any effect on the generated instructions.  However, s_stab
+   internally changes the section, so in practice we need to decide
+   now whether the preceding label marks compressed code.  We do not
+   support changing the compression mode of a label after a .stab*
+   directive, such as in:
+
+   foo:
+       .stabs ...
+       .set mips16
+
+   so the current mode wins.  */
 
 static void
 s_mips_stab (int type)
 {
-  if (type == 'n')
-    mips_mark_labels ();
-
+  mips_mark_labels ();
   s_stab (type);
 }
 
index bd015c69952c27b74feec444c49d02ac2d1f1866..f73e188ebfe70c6b8335db9cc7de8931b9be1ccc 100644 (file)
@@ -1,3 +1,8 @@
+2013-05-02  Richard Sandiford  <rdsandiford@googlemail.com>
+
+       * gas/mips/mips16-stabs.s, gas/mips/mips16-stabs.d: New test.
+       * gas/mips/mips.exp: Run it.
+
 2013-05-02  Nick Clifton  <nickc@redhat.com>
 
        * gas/all/gas.exp: Skip the DIFF1 test for the MSP430.
index c387ce55b7bc48eb14716f3cfdcda30e42298ccf..48bd33e4fa370f25f344844de958b059b695951a 100644 (file)
@@ -1086,6 +1086,7 @@ if { [istarget mips*-*-vxworks*] } {
        if $has_newabi {
            run_dump_test "mips16-dwarf2-n32"
        }
+       run_dump_test "mips16-stabs"
     }
     if { !$no_mips16 } { 
         run_dump_test "mips16e-jrc"
diff --git a/gas/testsuite/gas/mips/mips16-stabs.d b/gas/testsuite/gas/mips/mips16-stabs.d
new file mode 100644 (file)
index 0000000..db7673a
--- /dev/null
@@ -0,0 +1,6 @@
+#as: -mips3 -EB
+#objdump: -dr
+#...
+0+ <foo>:
+   0:  e820            jr      ra
+#pass
diff --git a/gas/testsuite/gas/mips/mips16-stabs.s b/gas/testsuite/gas/mips/mips16-stabs.s
new file mode 100644 (file)
index 0000000..f44ad6a
--- /dev/null
@@ -0,0 +1,8 @@
+       .align  2
+       .set    mips16
+       .globl  foo
+       .ent    foo
+foo:
+       .stabs  "foo:F(0,49)",36,0,0,foo
+       jr      $31
+       .end    foo