aboutsummaryrefslogtreecommitdiff
path: root/gas
diff options
context:
space:
mode:
authorDaniel Jacobowitz <drow@false.org>2002-01-05 19:06:52 +0000
committerDaniel Jacobowitz <drow@false.org>2002-01-05 19:06:52 +0000
commit7a621144429a4760ba888069d08bd190e3557119 (patch)
treec64b347e23312963cc8437f410e53175fd008c5a /gas
parent7e89e3575daf98bac9dece8abfab33dc42664626 (diff)
downloadgdb-7a621144429a4760ba888069d08bd190e3557119.zip
gdb-7a621144429a4760ba888069d08bd190e3557119.tar.gz
gdb-7a621144429a4760ba888069d08bd190e3557119.tar.bz2
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 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.
Diffstat (limited to 'gas')
-rw-r--r--gas/ChangeLog12
-rw-r--r--gas/config/tc-mips.c47
-rw-r--r--gas/testsuite/ChangeLog9
-rw-r--r--gas/testsuite/gas/mips/jal-svr4pic.s4
-rw-r--r--gas/testsuite/gas/mips/mips-abi32-pic.s1
-rw-r--r--gas/testsuite/gas/mips/mips-gp32-fp32-pic.s1
-rw-r--r--gas/testsuite/gas/mips/mips-gp32-fp64-pic.s1
-rw-r--r--gas/testsuite/gas/mips/mips-gp64-fp32-pic.s1
-rw-r--r--gas/testsuite/gas/mips/mips-gp64-fp64-pic.s1
9 files changed, 76 insertions, 1 deletions
diff --git a/gas/ChangeLog b/gas/ChangeLog
index c1c52f3..b90a726 100644
--- a/gas/ChangeLog
+++ b/gas/ChangeLog
@@ -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.
diff --git a/gas/config/tc-mips.c b/gas/config/tc-mips.c
index 23cfc45..3646127 100644
--- a/gas/config/tc-mips.c
+++ b/gas/config/tc-mips.c
@@ -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));
diff --git a/gas/testsuite/ChangeLog b/gas/testsuite/ChangeLog
index 7fdf423..4fbd74d 100644
--- a/gas/testsuite/ChangeLog
+++ b/gas/testsuite/ChangeLog
@@ -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
diff --git a/gas/testsuite/gas/mips/jal-svr4pic.s b/gas/testsuite/gas/mips/jal-svr4pic.s
index 1174e94..5e2df1e 100644
--- a/gas/testsuite/gas/mips/jal-svr4pic.s
+++ b/gas/testsuite/gas/mips/jal-svr4pic.s
@@ -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
diff --git a/gas/testsuite/gas/mips/mips-abi32-pic.s b/gas/testsuite/gas/mips/mips-abi32-pic.s
index 066fb70..2b05a8e 100644
--- a/gas/testsuite/gas/mips/mips-abi32-pic.s
+++ b/gas/testsuite/gas/mips/mips-abi32-pic.s
@@ -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)
diff --git a/gas/testsuite/gas/mips/mips-gp32-fp32-pic.s b/gas/testsuite/gas/mips/mips-gp32-fp32-pic.s
index b5e06a7..d709810 100644
--- a/gas/testsuite/gas/mips/mips-gp32-fp32-pic.s
+++ b/gas/testsuite/gas/mips/mips-gp32-fp32-pic.s
@@ -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)
diff --git a/gas/testsuite/gas/mips/mips-gp32-fp64-pic.s b/gas/testsuite/gas/mips/mips-gp32-fp64-pic.s
index 0501244..6d718aa 100644
--- a/gas/testsuite/gas/mips/mips-gp32-fp64-pic.s
+++ b/gas/testsuite/gas/mips/mips-gp32-fp64-pic.s
@@ -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)
diff --git a/gas/testsuite/gas/mips/mips-gp64-fp32-pic.s b/gas/testsuite/gas/mips/mips-gp64-fp32-pic.s
index f138d13..6d62890 100644
--- a/gas/testsuite/gas/mips/mips-gp64-fp32-pic.s
+++ b/gas/testsuite/gas/mips/mips-gp64-fp32-pic.s
@@ -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)
diff --git a/gas/testsuite/gas/mips/mips-gp64-fp64-pic.s b/gas/testsuite/gas/mips/mips-gp64-fp64-pic.s
index 195dc5c..0d42de3 100644
--- a/gas/testsuite/gas/mips/mips-gp64-fp64-pic.s
+++ b/gas/testsuite/gas/mips/mips-gp64-fp64-pic.s
@@ -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)