2013-05-31 Paul Brook <paul@codesourcery.com>
authorCatherine Moore <clm@redhat.com>
Fri, 31 May 2013 17:04:53 +0000 (17:04 +0000)
committerCatherine Moore <clm@redhat.com>
Fri, 31 May 2013 17:04:53 +0000 (17:04 +0000)
gas/
* config/tc-mips.c (s_ehword): New.

2013-05-31  Catherine Moore  <clm@codesourcery.com>

gas/testsuite/
* gas/mips/ehword.d: New.
* gas/mips/ehword.s: New.
* gas/mips/mips.exp: Run ehword test.

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

index ae07be8be1e0699451ebb78602a2c61a8fba2bc0..d80bff8a28e70a4b5d6677230641534c83afe3e4 100644 (file)
@@ -1,3 +1,8 @@
+2013-05-31  Paul Brook  <paul@codesourcery.com>
+
+       gas/
+       * config/tc-mips.c (s_ehword): New.
+
 2013-05-30  Paul Brook  <paul@codesourcery.com>
 
        * config/tc-mips.c (md_apply_fix): Support BFD_RELOC_MIPS_EH.
index 02b3cf367a1ae29ce8e64e06557054030bf930a3..0e2e5f7cc7653dfc0977143b6ca0fc82f976ed19 100644 (file)
@@ -1368,6 +1368,7 @@ static void s_tpreldword (int);
 static void s_gpvalue (int);
 static void s_gpword (int);
 static void s_gpdword (int);
+static void s_ehword (int);
 static void s_cpadd (int);
 static void s_insn (int);
 static void md_obj_begin (void);
@@ -1450,6 +1451,7 @@ static const pseudo_typeS mips_pseudo_table[] =
   {"gpvalue", s_gpvalue, 0},
   {"gpword", s_gpword, 0},
   {"gpdword", s_gpdword, 0},
+  {"ehword", s_ehword, 0},
   {"cpadd", s_cpadd, 0},
   {"insn", s_insn, 0},
 
@@ -17155,6 +17157,34 @@ s_gpdword (int ignore ATTRIBUTE_UNUSED)
   demand_empty_rest_of_line ();
 }
 
+/* Handle the .ehword pseudo-op.  This is used when generating unwinding
+   tables.  It generates a R_MIPS_EH reloc.  */
+
+static void
+s_ehword (int ignore ATTRIBUTE_UNUSED)
+{
+  expressionS ex;
+  char *p;
+
+  mips_emit_delays ();
+
+  expression (&ex);
+  mips_clear_insn_labels ();
+
+  if (ex.X_op != O_symbol || ex.X_add_number != 0)
+    {
+      as_bad (_("Unsupported use of .ehword"));
+      ignore_rest_of_line ();
+    }
+
+  p = frag_more (4);
+  md_number_to_chars (p, 0, 4);
+  fix_new_exp (frag_now, p - frag_now->fr_literal, 4, &ex, FALSE,
+              BFD_RELOC_MIPS_EH);
+
+  demand_empty_rest_of_line ();
+}
+
 /* Handle the .cpadd pseudo-op.  This is used when dealing with switch
    tables in SVR4 PIC code.  */
 
index 76c9de8ef2e4b6660c1e5df60e999ccc21fbcb06..f8ae2b8615b8bfdd11234ea5a4f0ae890142814a 100644 (file)
@@ -1,3 +1,10 @@
+2013-05-31  Catherine Moore  <clm@codesourcery.com>
+
+       gas/testsuite/
+       * gas/mips/ehword.d: New.
+       * gas/mips/ehword.s: New.
+       * gas/mips/mips.exp: Run ehword test.
+
 2013-05-29  Maciej W. Rozycki  <macro@codesourcery.com>
 
        * gas/mips/jalr3.d: New test.
diff --git a/gas/testsuite/gas/mips/ehword.d b/gas/testsuite/gas/mips/ehword.d
new file mode 100644 (file)
index 0000000..4cbef12
--- /dev/null
@@ -0,0 +1,9 @@
+#objdump: -r -j .text
+#name MIPS .ehword
+#source ehword.s
+
+.*: +file format .*mips.*
+
+RELOCATION RECORDS FOR \[\.text\]:
+OFFSET   TYPE              VALUE 
+00000000 R_MIPS_EH         _ZTI5myExc
diff --git a/gas/testsuite/gas/mips/ehword.s b/gas/testsuite/gas/mips/ehword.s
new file mode 100644 (file)
index 0000000..152ad30
--- /dev/null
@@ -0,0 +1 @@
+       .ehword _ZTI5myExc
index a7b85ddb5122bb63890c1251e911042f14daff6b..95e9da7d5b151a33a00996f28b237c8e3e88a4ae 100644 (file)
@@ -1124,6 +1124,7 @@ if { [istarget mips*-*-vxworks*] } {
     run_dump_test "align2-el"
     run_dump_test "align3"
     run_dump_test "odd-float"
+    run_dump_test "ehword"
 
     run_list_test_arches "mips-macro-ill-sfp" "-32 -msingle-float" \
                                        [mips_arch_list_matching mips2]