mirror of
https://github.com/espressif/binutils-gdb.git
synced 2025-05-31 10:09:16 +08:00
* breakpoint.c (breakpoint_re_set): #ifdef GET_LONGJMP_TARGET
around calls to create_longjmp_breakpoint. Why install the breakpoints if we can't find the longjmp target? * infrun.c (wait_for_inferior): Cleanup comments near call test. * remote-mips.c: Fixed a bunch of prototypes to avoid char/int complaint from picky compilers. Add comment to mips_expect. Replace all instances of sr_get_debug with remote_debug. * (mips_readchar): Don't jam init string to monitor. mips_initialize() handles that. * (mips_receive_header): Print better message when we get too much garbage. * (mips_request): Allow caller to pass in buff to allow them to analyze the returned message. * (mips_initialize): Re-do initialization to try sending a BREAK, a ^C, and then a download escape sequence. Cleanup protocol startup. Eliminate sleeps. Clear breakpoints (if using monitor breakpoints). Re-init frame. * (mips_detach): Close down target. start-sanitize-gm * (mips_resume): Pass signal down to target. * (mips_create_inferior): Start target with TARGET_SIGNAL_PWR. end-sanitize-gm * (mips_wait): Handle return status with registers, or breakpoint stuff. * (mips_kill): Add ^C handling. * (mips_insert_breakpoint mips_remove_breakpoint): Call new breakpoint stuff if enabled. * (calculate_mask remote_mips_set_watchpoint remote_mips_remove_watchpoint remote_mips_stopped_by_watchpoint): Hardware watchpoint/breakpoint stuff. * (common_breakpoint): Common code for new monitor breakpoint commands. * (mips_load): Don't use `prompt'. It's a global variable. * top.c (dont_repeat_command): New command for use in user-defined commands to suppress auto-repeat (by hittin return key). start-sanitize-gm * utils.c (request_quit): Call target_kill here. Good idea. Needs a better implementation. end-sanitize-gm * valops.c: Add start of auto function-call abandonment capability. start-sanitize-gm * c-exp.y: Add code (currently disabled) to handle GM dynamic structures (it conflicts with @!). * eval.c (evaluate_subexp_standard): ditto. * expprint.c (print_subexp dump_expression): ditto. * expression.h (enum exp_opcode): ditto. * parse.c (length_of_subexp): ditto. * configure, configure.in: Add mip*-*-magic* target. * magic.c magic.h: Special routines to handle GM stuff (like stepping through dispatcher). end-sanitize-gm
This commit is contained in:
114
gdb/expprint.c
114
gdb/expprint.c
@ -15,7 +15,7 @@ GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program; if not, write to the Free Software
|
||||
Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */
|
||||
Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
|
||||
|
||||
#include "defs.h"
|
||||
#include "symtab.h"
|
||||
@ -30,9 +30,6 @@ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */
|
||||
static void
|
||||
print_subexp PARAMS ((struct expression *, int *, GDB_FILE *, enum precedence));
|
||||
|
||||
static void
|
||||
print_simple_m2_func PARAMS ((char *, struct expression *, int *, GDB_FILE *));
|
||||
|
||||
void
|
||||
print_expression (exp, stream)
|
||||
struct expression *exp;
|
||||
@ -153,6 +150,13 @@ print_subexp (exp, pos, stream, prec)
|
||||
fputs_filtered (")", stream);
|
||||
return;
|
||||
|
||||
case OP_NAME:
|
||||
case OP_EXPRSTRING:
|
||||
nargs = longest_to_int (exp -> elts[pc + 1].longconst);
|
||||
(*pos) += 3 + BYTES_TO_EXP_ELEM (nargs + 1);
|
||||
fputs_filtered (&exp->elts[pc + 2].string, stream);
|
||||
return;
|
||||
|
||||
case OP_STRING:
|
||||
nargs = longest_to_int (exp -> elts[pc + 1].longconst);
|
||||
(*pos) += 3 + BYTES_TO_EXP_ELEM (nargs + 1);
|
||||
@ -163,8 +167,11 @@ print_subexp (exp, pos, stream, prec)
|
||||
return;
|
||||
|
||||
case OP_BITSTRING:
|
||||
error ("support for OP_BITSTRING unimplemented");
|
||||
break;
|
||||
nargs = longest_to_int (exp -> elts[pc + 1].longconst);
|
||||
(*pos)
|
||||
+= 3 + BYTES_TO_EXP_ELEM ((nargs + HOST_CHAR_BIT - 1) / HOST_CHAR_BIT);
|
||||
fprintf (stream, "B'<unimplemented>'");
|
||||
return;
|
||||
|
||||
case OP_ARRAY:
|
||||
(*pos) += 3;
|
||||
@ -266,6 +273,16 @@ print_subexp (exp, pos, stream, prec)
|
||||
fputs_filtered (")", stream);
|
||||
return;
|
||||
|
||||
case TERNOP_SLICE:
|
||||
case TERNOP_SLICE_COUNT:
|
||||
print_subexp (exp, pos, stream, PREC_SUFFIX);
|
||||
fputs_filtered ("(", stream);
|
||||
print_subexp (exp, pos, stream, PREC_ABOVE_COMMA);
|
||||
fputs_filtered (opcode == TERNOP_SLICE ? " : " : " UP ", stream);
|
||||
print_subexp (exp, pos, stream, PREC_ABOVE_COMMA);
|
||||
fputs_filtered (")", stream);
|
||||
return;
|
||||
|
||||
case STRUCTOP_STRUCT:
|
||||
tem = longest_to_int (exp->elts[pc + 1].longconst);
|
||||
(*pos) += 3 + BYTES_TO_EXP_ELEM (tem + 1);
|
||||
@ -283,6 +300,19 @@ print_subexp (exp, pos, stream, prec)
|
||||
fputs_filtered (&exp->elts[pc + 2].string, stream);
|
||||
return;
|
||||
|
||||
/* start-sanitize-gm */
|
||||
#ifdef GENERAL_MAGIC_HACKS
|
||||
case STRUCTOP_FIELD:
|
||||
tem = longest_to_int (exp->elts[pc + 1].longconst);
|
||||
(*pos) += 3 + BYTES_TO_EXP_ELEM (tem + 1);
|
||||
print_subexp (exp, pos, stream, PREC_SUFFIX);
|
||||
fputs_filtered ("@", stream);
|
||||
fputs_filtered (&exp->elts[pc + 2].string, stream);
|
||||
return;
|
||||
|
||||
#endif /* GENERAL_MAGIC_HACKS */
|
||||
/* end-sanitize-gm */
|
||||
|
||||
case BINOP_SUBSCRIPT:
|
||||
print_subexp (exp, pos, stream, PREC_SUFFIX);
|
||||
fputs_filtered ("[", stream);
|
||||
@ -386,46 +416,6 @@ print_subexp (exp, pos, stream, prec)
|
||||
print_subexp(exp,pos,stream,PREC_PREFIX);
|
||||
fprintf_unfiltered(stream,")");
|
||||
return;
|
||||
|
||||
case UNOP_CAP:
|
||||
print_simple_m2_func("CAP",exp,pos,stream);
|
||||
return;
|
||||
|
||||
case UNOP_CHR:
|
||||
print_simple_m2_func("CHR",exp,pos,stream);
|
||||
return;
|
||||
|
||||
case UNOP_ORD:
|
||||
print_simple_m2_func("ORD",exp,pos,stream);
|
||||
return;
|
||||
|
||||
case UNOP_ABS:
|
||||
print_simple_m2_func("ABS",exp,pos,stream);
|
||||
return;
|
||||
|
||||
case UNOP_FLOAT:
|
||||
print_simple_m2_func("FLOAT",exp,pos,stream);
|
||||
return;
|
||||
|
||||
case UNOP_HIGH:
|
||||
print_simple_m2_func("HIGH",exp,pos,stream);
|
||||
return;
|
||||
|
||||
case UNOP_MAX:
|
||||
print_simple_m2_func("MAX",exp,pos,stream);
|
||||
return;
|
||||
|
||||
case UNOP_MIN:
|
||||
print_simple_m2_func("MIN",exp,pos,stream);
|
||||
return;
|
||||
|
||||
case UNOP_ODD:
|
||||
print_simple_m2_func("ODD",exp,pos,stream);
|
||||
return;
|
||||
|
||||
case UNOP_TRUNC:
|
||||
print_simple_m2_func("TRUNC",exp,pos,stream);
|
||||
return;
|
||||
|
||||
case BINOP_INCL:
|
||||
case BINOP_EXCL:
|
||||
@ -450,6 +440,7 @@ print_subexp (exp, pos, stream, prec)
|
||||
error ("Invalid expression");
|
||||
}
|
||||
|
||||
/* Note that PREC_BUILTIN will always emit parentheses. */
|
||||
if ((int) myprec < (int) prec)
|
||||
fputs_filtered ("(", stream);
|
||||
if ((int) opcode > (int) BINOP_END)
|
||||
@ -464,7 +455,11 @@ print_subexp (exp, pos, stream, prec)
|
||||
{
|
||||
/* Unary prefix operator. */
|
||||
fputs_filtered (op_str, stream);
|
||||
if (myprec == PREC_BUILTIN_FUNCTION)
|
||||
fputs_filtered ("(", stream);
|
||||
print_subexp (exp, pos, stream, PREC_PREFIX);
|
||||
if (myprec == PREC_BUILTIN_FUNCTION)
|
||||
fputs_filtered (")", stream);
|
||||
}
|
||||
}
|
||||
else
|
||||
@ -493,23 +488,6 @@ print_subexp (exp, pos, stream, prec)
|
||||
fputs_filtered (")", stream);
|
||||
}
|
||||
|
||||
/* Print out something of the form <s>(<arg>).
|
||||
This is used to print out some builtin Modula-2
|
||||
functions.
|
||||
FIXME: There is probably some way to get the precedence
|
||||
rules to do this (print a unary operand with parens around it). */
|
||||
static void
|
||||
print_simple_m2_func(s,exp,pos,stream)
|
||||
char *s;
|
||||
register struct expression *exp;
|
||||
register int *pos;
|
||||
GDB_FILE *stream;
|
||||
{
|
||||
fprintf_unfiltered(stream,"%s(",s);
|
||||
print_subexp(exp,pos,stream,PREC_PREFIX);
|
||||
fprintf_unfiltered(stream,")");
|
||||
}
|
||||
|
||||
/* Return the operator corresponding to opcode OP as
|
||||
a string. NULL indicates that the opcode was not found in the
|
||||
current language table. */
|
||||
@ -596,6 +574,8 @@ dump_expression (exp, stream, note)
|
||||
case BINOP_CONCAT: opcode_name = "BINOP_CONCAT"; break;
|
||||
case BINOP_END: opcode_name = "BINOP_END"; break;
|
||||
case TERNOP_COND: opcode_name = "TERNOP_COND"; break;
|
||||
case TERNOP_SLICE: opcode_name = "TERNOP_SLICE"; break;
|
||||
case TERNOP_SLICE_COUNT: opcode_name = "TERNOP_SLICE_COUNT"; break;
|
||||
case OP_LONG: opcode_name = "OP_LONG"; break;
|
||||
case OP_DOUBLE: opcode_name = "OP_DOUBLE"; break;
|
||||
case OP_VAR_VALUE: opcode_name = "OP_VAR_VALUE"; break;
|
||||
@ -618,6 +598,9 @@ dump_expression (exp, stream, note)
|
||||
case UNOP_PREDECREMENT: opcode_name = "UNOP_PREDECREMENT"; break;
|
||||
case UNOP_POSTDECREMENT: opcode_name = "UNOP_POSTDECREMENT"; break;
|
||||
case UNOP_SIZEOF: opcode_name = "UNOP_SIZEOF"; break;
|
||||
case UNOP_LOWER: opcode_name = "UNOP_LOWER"; break;
|
||||
case UNOP_UPPER: opcode_name = "UNOP_UPPER"; break;
|
||||
case UNOP_LENGTH: opcode_name = "UNOP_LENGTH"; break;
|
||||
case UNOP_PLUS: opcode_name = "UNOP_PLUS"; break;
|
||||
case UNOP_CAP: opcode_name = "UNOP_CAP"; break;
|
||||
case UNOP_CHR: opcode_name = "UNOP_CHR"; break;
|
||||
@ -633,6 +616,11 @@ dump_expression (exp, stream, note)
|
||||
case OP_M2_STRING: opcode_name = "OP_M2_STRING"; break;
|
||||
case STRUCTOP_STRUCT: opcode_name = "STRUCTOP_STRUCT"; break;
|
||||
case STRUCTOP_PTR: opcode_name = "STRUCTOP_PTR"; break;
|
||||
/* start-sanitize-gm */
|
||||
#ifdef GENERAL_MAGIC_HACKS
|
||||
+ case STRUCTOP_FIELD: opcode_name = "STRUCTOP_FIELD"; break;
|
||||
#endif /* GENERAL_MAGIC_HACKS */
|
||||
/* end-sanitize-gm */
|
||||
case OP_THIS: opcode_name = "OP_THIS"; break;
|
||||
case OP_SCOPE: opcode_name = "OP_SCOPE"; break;
|
||||
case OP_TYPE: opcode_name = "OP_TYPE"; break;
|
||||
|
Reference in New Issue
Block a user