diff options
author | Daniel Jacobowitz <drow@false.org> | 2002-01-05 19:06:52 +0000 |
---|---|---|
committer | Daniel Jacobowitz <drow@false.org> | 2002-01-05 19:06:52 +0000 |
commit | 7a621144429a4760ba888069d08bd190e3557119 (patch) | |
tree | c64b347e23312963cc8437f410e53175fd008c5a /gas/config | |
parent | 7e89e3575daf98bac9dece8abfab33dc42664626 (diff) | |
download | gdb-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/config')
-rw-r--r-- | gas/config/tc-mips.c | 47 |
1 files changed, 46 insertions, 1 deletions
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)); |