2002-01-05 Daniel Jacobowitz <drow@mvista.com>
authorDaniel Jacobowitz <drow@false.org>
Sat, 5 Jan 2002 19:06:52 +0000 (19:06 +0000)
committerDaniel Jacobowitz <drow@false.org>
Sat, 5 Jan 2002 19:06:52 +0000 (19:06 +0000)
        * tc-mips.c (mips_cprestore_valid): New flag.
        (mips_frame_reg_valid): New flag.
        (macro) [M_JAL_2]: Check both flags.
        [M_JAL_A]: Likewise.
        (s_cprestore): Set mips_cprestore_valid.
        (tc_get_register): If setting mips_frame_reg, set
        mips_frame_reg_valid and clear mips_cprestore_valid.
        (s_mips_ent): Clear both flags.
        (s_mips_end): Clear both flags.

2002-01-05  Daniel Jacobowitz  <drow@mvista.com>

        * gas/mips/jal-svr4pic.s: Add .ent and .frame directives.
        * gas/mips/mips-abi32-pic.s: Add .frame directive.
        * gas/mips/mips-gp32-fp32-pic.s: Likewise.
        * gas/mips/mips-gp32-fp64-pic.s: Likewise.
        * gas/mips/mips-gp64-fp32-pic.s: Likewise.
        * gas/mips/mips-gp64-fp64-pic.s: Likewise.

gas/ChangeLog
gas/config/tc-mips.c
gas/testsuite/ChangeLog
gas/testsuite/gas/mips/jal-svr4pic.s
gas/testsuite/gas/mips/mips-abi32-pic.s
gas/testsuite/gas/mips/mips-gp32-fp32-pic.s
gas/testsuite/gas/mips/mips-gp32-fp64-pic.s
gas/testsuite/gas/mips/mips-gp64-fp32-pic.s
gas/testsuite/gas/mips/mips-gp64-fp64-pic.s

index c1c52f3..b90a726 100644 (file)
@@ -1,3 +1,15 @@
+2002-01-05  Daniel Jacobowitz  <drow@mvista.com>
+
+       * tc-mips.c (mips_cprestore_valid): New flag.
+       (mips_frame_reg_valid): New flag.
+       (macro) [M_JAL_2]: Check both flags.
+       [M_JAL_A]: Likewise.
+       (s_cprestore): Set mips_cprestore_valid.
+       (tc_get_register): If setting mips_frame_reg, set
+       mips_frame_reg_valid and clear mips_cprestore_valid.
+       (s_mips_ent): Clear both flags.
+       (s_mips_end): Clear both flags.
+
 2002-01-05  Alan Modra  <amodra@bigpond.net.au>
 
        * write.c (write_object_file): Make use of bfd_section_list_remove.
index 23cfc45..3646127 100644 (file)
@@ -412,10 +412,18 @@ static offsetT mips_cpreturn_offset = -1;
 static int mips_cpreturn_register = -1;
 static int mips_gp_register = GP;
 
+/* Whether mips_cprestore_offset has been set in the current function
+   (or whether it has already been warned about, if not).  */
+static int mips_cprestore_valid = 0;
+
 /* This is the register which holds the stack frame, as set by the
    .frame pseudo-op.  This is needed to implement .cprestore.  */
 static int mips_frame_reg = SP;
 
+/* Whether mips_frame_reg has been set in the current function
+   (or whether it has already been warned about, if not).  */
+static int mips_frame_reg_valid = 0;
+
 /* To output NOP instructions correctly, we need to keep information
    about the previous two instructions.  */
 
@@ -5110,6 +5118,18 @@ macro (ip)
                as_warn (_("No .cprestore pseudo-op used in PIC code"));
              else
                {
+                 if (! mips_frame_reg_valid)
+                   {
+                     as_warn (_("No .frame pseudo-op used in PIC code"));
+                     /* Quiet this warning.  */
+                     mips_frame_reg_valid = 1;
+                   }
+                 if (! mips_cprestore_valid)
+                   {
+                     as_warn (_("No .cprestore pseudo-op used in PIC code"));
+                     /* Quiet this warning.  */
+                     mips_cprestore_valid = 1;
+                   }
                  expr1.X_add_number = mips_cprestore_offset;
                  macro_build ((char *) NULL, &icnt, &expr1,
                               HAVE_32BIT_ADDRESSES ? "lw" : "ld", "t,o(b)",
@@ -5211,6 +5231,18 @@ macro (ip)
                as_warn (_("No .cprestore pseudo-op used in PIC code"));
              else
                {
+                 if (! mips_frame_reg_valid)
+                   {
+                     as_warn (_("No .frame pseudo-op used in PIC code"));
+                     /* Quiet this warning.  */
+                     mips_frame_reg_valid = 1;
+                   }
+                 if (! mips_cprestore_valid)
+                   {
+                     as_warn (_("No .cprestore pseudo-op used in PIC code"));
+                     /* Quiet this warning.  */
+                     mips_cprestore_valid = 1;
+                   }
                  if (mips_opts.noreorder)
                    macro_build ((char *) NULL, &icnt, (expressionS *) NULL,
                             "nop", "");
@@ -11472,6 +11504,7 @@ s_cprestore (ignore)
     }
 
   mips_cprestore_offset = get_absolute_expression ();
+  mips_cprestore_valid = 1;
 
   ex.X_op = O_constant;
   ex.X_add_symbol = NULL;
@@ -11738,7 +11771,11 @@ tc_get_register (frame)
       input_line_pointer += 2;
     }
   if (frame)
-    mips_frame_reg = reg != 0 ? reg : SP;
+    {
+      mips_frame_reg = reg != 0 ? reg : SP;
+      mips_frame_reg_valid = 1;
+      mips_cprestore_valid = 0;
+    }
   return reg;
 }
 
@@ -12806,6 +12843,10 @@ s_mips_end (x)
   symbolS *p;
   int maybe_text;
 
+  /* Following functions need their own .frame and .cprestore directives.  */
+  mips_frame_reg_valid = 0;
+  mips_cprestore_valid = 0;
+
   if (!is_end_of_line[(unsigned char) *input_line_pointer])
     {
       p = get_symbol ();
@@ -12923,6 +12964,10 @@ s_mips_ent (aent)
 
   if (!aent)
     {
+      /* This function needs its own .frame and .cprestore directives.  */
+      mips_frame_reg_valid = 0;
+      mips_cprestore_valid = 0;
+
       cur_proc_ptr = &cur_proc;
       memset (cur_proc_ptr, '\0', sizeof (procS));
 
index 7fdf423..4fbd74d 100644 (file)
@@ -1,3 +1,12 @@
+2002-01-05  Daniel Jacobowitz  <drow@mvista.com>
+
+       * gas/mips/jal-svr4pic.s: Add .ent and .frame directives.
+       * gas/mips/mips-abi32-pic.s: Add .frame directive.
+       * gas/mips/mips-gp32-fp32-pic.s: Likewise.
+       * gas/mips/mips-gp32-fp64-pic.s: Likewise.
+       * gas/mips/mips-gp64-fp32-pic.s: Likewise.
+       * gas/mips/mips-gp64-fp64-pic.s: Likewise.
+
 2002-01-02  Chris Demetriou  <cgd@broadcom.com>
 
        * gas/mips/empic3_e.d: New file to test -membedded-pic
index 1174e94..5e2df1e 100644 (file)
@@ -2,7 +2,9 @@
        
 .weak weak_text_label
 
+       .ent text_label
 text_label:    
+       .frame $sp,0,$31
        .set    noreorder
        .cpload $25
        .set    reorder
@@ -19,3 +21,5 @@ text_label:
 # Round to a 16 byte boundary, for ease in testing multiple targets.
        nop
        nop
+
+       .end text_label
index 066fb70..2b05a8e 100644 (file)
@@ -12,6 +12,7 @@ unshared:
        .text
        .ent    func
 func:
+       .frame $sp,0,$31
        .set noreorder
        .cpload $25             # 0000 lui      gp,hi(_gp_disp)
                                # 0004 addiu    gp,gp,lo(_gp_disp)
index b5e06a7..d709810 100644 (file)
@@ -12,6 +12,7 @@ unshared:
        .text
        .ent    func
 func:
+       .frame $sp,0,$31
        .set noreorder
        .cpload $25             # 0000 lui      gp,hi(_gp_disp)
                                # 0004 addiu    gp,gp,lo(_gp_disp)
index 0501244..6d718aa 100644 (file)
@@ -12,6 +12,7 @@ unshared:
        .text
        .ent    func
 func:
+       .frame $sp,0,$31
        .set noreorder
        .cpload $25             # 0000 lui      gp,hi(_gp_disp)
                                # 0004 addiu    gp,gp,lo(_gp_disp)
index f138d13..6d62890 100644 (file)
@@ -12,6 +12,7 @@ unshared:
        .text
        .ent    func
 func:
+       .frame $sp,0,$31
        .set noreorder
        .cpload $25             # 0000 lui      gp,hi(_gp_disp)
                                # 0004 addiu    gp,gp,lo(_gp_disp)
index 195dc5c..0d42de3 100644 (file)
@@ -12,6 +12,7 @@ unshared:
        .text
        .ent    func
 func:
+       .frame $sp,0,$31
        .set noreorder
        .cpload $25             # 0000 lui      gp,hi(_gp_disp)
                                # 0004 addiu    gp,gp,lo(_gp_disp)