mirror of
https://github.com/espressif/binutils-gdb.git
synced 2025-10-17 12:53:17 +08:00
Revert previous change. Not obvious.
This commit is contained in:
@ -1,3 +1,10 @@
|
|||||||
|
2002-09-18 Andrew Cagney <ac131313@redhat.com>
|
||||||
|
|
||||||
|
* breakpoint.c, c-exp.y, defs.h, elfread.c, expression.h,
|
||||||
|
jv-exp.y, language.c, language.h, p-exp.y, parse.c, parser-defs.h,
|
||||||
|
printcmd.c, source.c, stabsread.c, symfile.c, symtab.h, utils.c,
|
||||||
|
valops.c, value.h: Revert previous change.
|
||||||
|
|
||||||
2002-09-18 Michael Snyder <msnyder@redhat.com>
|
2002-09-18 Michael Snyder <msnyder@redhat.com>
|
||||||
|
|
||||||
Preliminary support for Objective-C:
|
Preliminary support for Objective-C:
|
||||||
|
@ -4618,16 +4618,13 @@ parse_breakpoint_sals (char **address,
|
|||||||
current_source_symtab (which is decode_line_1's default). This
|
current_source_symtab (which is decode_line_1's default). This
|
||||||
should produce the results we want almost all of the time while
|
should produce the results we want almost all of the time while
|
||||||
leaving default_breakpoint_* alone. */
|
leaving default_breakpoint_* alone. */
|
||||||
/* Also ignore objc method name. FIXME better comment? */
|
|
||||||
if (default_breakpoint_valid
|
if (default_breakpoint_valid
|
||||||
&& (!current_source_symtab
|
&& (!current_source_symtab
|
||||||
|| ((strchr ("+-", (*address)[0]) != NULL)
|
|| (strchr ("+-", (*address)[0]) != NULL)))
|
||||||
&& ((*address)[1] != '['))))
|
|
||||||
*sals = decode_line_1 (address, 1, default_breakpoint_symtab,
|
*sals = decode_line_1 (address, 1, default_breakpoint_symtab,
|
||||||
default_breakpoint_line, addr_string);
|
default_breakpoint_line, addr_string);
|
||||||
else
|
else
|
||||||
*sals = decode_line_1 (address, 1, (struct symtab *) NULL,
|
*sals = decode_line_1 (address, 1, (struct symtab *) NULL, 0, addr_string);
|
||||||
0, addr_string);
|
|
||||||
}
|
}
|
||||||
/* For any SAL that didn't have a canonical string, fill one in. */
|
/* For any SAL that didn't have a canonical string, fill one in. */
|
||||||
if (sals->nelts > 0 && *addr_string == NULL)
|
if (sals->nelts > 0 && *addr_string == NULL)
|
||||||
|
@ -49,7 +49,6 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
|
|||||||
#include "bfd.h" /* Required by objfiles.h. */
|
#include "bfd.h" /* Required by objfiles.h. */
|
||||||
#include "symfile.h" /* Required by objfiles.h. */
|
#include "symfile.h" /* Required by objfiles.h. */
|
||||||
#include "objfiles.h" /* For have_full_symbols and have_partial_symbols */
|
#include "objfiles.h" /* For have_full_symbols and have_partial_symbols */
|
||||||
#include "completer.h" /* For skip_quoted(). */
|
|
||||||
|
|
||||||
/* Flag indicating we're dealing with HP-compiled objects */
|
/* Flag indicating we're dealing with HP-compiled objects */
|
||||||
extern int hp_som_som_object_present;
|
extern int hp_som_som_object_present;
|
||||||
|
@ -208,7 +208,6 @@ enum language
|
|||||||
language_auto, /* Placeholder for automatic setting */
|
language_auto, /* Placeholder for automatic setting */
|
||||||
language_c, /* C */
|
language_c, /* C */
|
||||||
language_cplus, /* C++ */
|
language_cplus, /* C++ */
|
||||||
language_objc, /* Objective-C */
|
|
||||||
language_java, /* Java */
|
language_java, /* Java */
|
||||||
/* OBSOLETE language_chill, */ /* Chill */
|
/* OBSOLETE language_chill, */ /* Chill */
|
||||||
language_fortran, /* Fortran */
|
language_fortran, /* Fortran */
|
||||||
@ -446,8 +445,6 @@ extern void puts_filtered (const char *);
|
|||||||
|
|
||||||
extern void puts_unfiltered (const char *);
|
extern void puts_unfiltered (const char *);
|
||||||
|
|
||||||
extern void puts_filtered_tabular (char *string, int width, int right);
|
|
||||||
|
|
||||||
extern void puts_debug (char *prefix, char *string, char *suffix);
|
extern void puts_debug (char *prefix, char *string, char *suffix);
|
||||||
|
|
||||||
extern void vprintf_filtered (const char *, va_list) ATTR_FORMAT (printf, 1, 0);
|
extern void vprintf_filtered (const char *, va_list) ATTR_FORMAT (printf, 1, 0);
|
||||||
@ -534,6 +531,8 @@ extern void print_transfer_performance (struct ui_file *stream,
|
|||||||
|
|
||||||
typedef void initialize_file_ftype (void);
|
typedef void initialize_file_ftype (void);
|
||||||
|
|
||||||
|
extern char *skip_quoted (char *);
|
||||||
|
|
||||||
extern char *gdb_readline (char *);
|
extern char *gdb_readline (char *);
|
||||||
|
|
||||||
extern char *gdb_readline_wrapper (char *);
|
extern char *gdb_readline_wrapper (char *);
|
||||||
|
@ -349,13 +349,7 @@ elf_symtab_read (struct objfile *objfile, int dynamic)
|
|||||||
}
|
}
|
||||||
else if (sym->section->flags & SEC_CODE)
|
else if (sym->section->flags & SEC_CODE)
|
||||||
{
|
{
|
||||||
if (sym->name[0] == '.'
|
if (sym->flags & BSF_GLOBAL)
|
||||||
&& (strncmp (sym->name + 1, "objc_", 4) == 0))
|
|
||||||
{
|
|
||||||
/* Looks like an Objective-C special symbol */
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
else if (sym->flags & BSF_GLOBAL)
|
|
||||||
{
|
{
|
||||||
ms_type = mst_text;
|
ms_type = mst_text;
|
||||||
}
|
}
|
||||||
|
@ -181,12 +181,6 @@ enum exp_opcode
|
|||||||
making three exp_elements. */
|
making three exp_elements. */
|
||||||
OP_FUNCALL,
|
OP_FUNCALL,
|
||||||
|
|
||||||
/* OP_MSGCALL is followed by a string in the next exp_element and then an
|
|
||||||
integer. The string is the selector string. The integer is the number
|
|
||||||
of arguments to the message call. That many plus one values are used,
|
|
||||||
the first one being the object pointer. This is an Objective C message */
|
|
||||||
OP_MSGCALL,
|
|
||||||
|
|
||||||
/* This is EXACTLY like OP_FUNCALL but is semantically different.
|
/* This is EXACTLY like OP_FUNCALL but is semantically different.
|
||||||
In F77, array subscript expressions, substring expressions
|
In F77, array subscript expressions, substring expressions
|
||||||
and function calls are all exactly the same syntactically. They may
|
and function calls are all exactly the same syntactically. They may
|
||||||
@ -279,18 +273,11 @@ enum exp_opcode
|
|||||||
STRUCTOP_STRUCT,
|
STRUCTOP_STRUCT,
|
||||||
STRUCTOP_PTR,
|
STRUCTOP_PTR,
|
||||||
|
|
||||||
/* C++:
|
/* C++ */
|
||||||
OP_THIS is just a placeholder for the class instance variable.
|
/* OP_THIS is just a placeholder for the class instance variable.
|
||||||
It just comes in a tight (OP_THIS, OP_THIS) pair. */
|
It just comes in a tight (OP_THIS, OP_THIS) pair. */
|
||||||
OP_THIS,
|
OP_THIS,
|
||||||
|
|
||||||
/* Objective C: "@selector" pseudo-operator */
|
|
||||||
OP_SELECTOR,
|
|
||||||
|
|
||||||
/* Objective C: OP_SELF is just a placeholder for the class instance
|
|
||||||
variable. It just comes in a tight (OP_SELF, OP_SELF) pair. */
|
|
||||||
OP_SELF,
|
|
||||||
|
|
||||||
/* OP_SCOPE surrounds a type name and a field name. The type
|
/* OP_SCOPE surrounds a type name and a field name. The type
|
||||||
name is encoded as one element, but the field name stays as
|
name is encoded as one element, but the field name stays as
|
||||||
a string, which, of course, is variable length. */
|
a string, which, of course, is variable length. */
|
||||||
@ -318,10 +305,7 @@ enum exp_opcode
|
|||||||
OP_NAME,
|
OP_NAME,
|
||||||
|
|
||||||
/* An unparsed expression. Used for Scheme (for now at least) */
|
/* An unparsed expression. Used for Scheme (for now at least) */
|
||||||
OP_EXPRSTRING,
|
OP_EXPRSTRING
|
||||||
|
|
||||||
/* An Objective C Foundation Class NSString constant */
|
|
||||||
OP_NSSTRING
|
|
||||||
};
|
};
|
||||||
|
|
||||||
union exp_element
|
union exp_element
|
||||||
@ -366,7 +350,7 @@ extern struct block *innermost_block;
|
|||||||
|
|
||||||
/* From eval.c */
|
/* From eval.c */
|
||||||
|
|
||||||
/* Values of NOSIDE argument to evaluate_subexp. */
|
/* Values of NOSIDE argument to eval_subexp. */
|
||||||
|
|
||||||
enum noside
|
enum noside
|
||||||
{
|
{
|
||||||
|
@ -48,7 +48,6 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
|
|||||||
#include "bfd.h" /* Required by objfiles.h. */
|
#include "bfd.h" /* Required by objfiles.h. */
|
||||||
#include "symfile.h" /* Required by objfiles.h. */
|
#include "symfile.h" /* Required by objfiles.h. */
|
||||||
#include "objfiles.h" /* For have_full_symbols and have_partial_symbols */
|
#include "objfiles.h" /* For have_full_symbols and have_partial_symbols */
|
||||||
#include "completer.h" /* For skip_quoted(). */
|
|
||||||
|
|
||||||
/* Remap normal yacc parser interface names (yyparse, yylex, yyerror, etc),
|
/* Remap normal yacc parser interface names (yyparse, yylex, yyerror, etc),
|
||||||
as well as gratuitiously global symbol names, so we can have multiple
|
as well as gratuitiously global symbol names, so we can have multiple
|
||||||
|
@ -549,7 +549,6 @@ binop_result_type (struct value *v1, struct value *v2)
|
|||||||
{
|
{
|
||||||
case language_c:
|
case language_c:
|
||||||
case language_cplus:
|
case language_cplus:
|
||||||
case language_objc:
|
|
||||||
if (TYPE_CODE (t1) == TYPE_CODE_FLT)
|
if (TYPE_CODE (t1) == TYPE_CODE_FLT)
|
||||||
return TYPE_CODE (t2) == TYPE_CODE_FLT && l2 > l1 ?
|
return TYPE_CODE (t2) == TYPE_CODE_FLT && l2 > l1 ?
|
||||||
VALUE_TYPE (v2) : VALUE_TYPE (v1);
|
VALUE_TYPE (v2) : VALUE_TYPE (v1);
|
||||||
@ -787,7 +786,6 @@ integral_type (struct type *type)
|
|||||||
{
|
{
|
||||||
case language_c:
|
case language_c:
|
||||||
case language_cplus:
|
case language_cplus:
|
||||||
case language_objc:
|
|
||||||
return (TYPE_CODE (type) != TYPE_CODE_INT) &&
|
return (TYPE_CODE (type) != TYPE_CODE_INT) &&
|
||||||
(TYPE_CODE (type) != TYPE_CODE_ENUM) ? 0 : 1;
|
(TYPE_CODE (type) != TYPE_CODE_ENUM) ? 0 : 1;
|
||||||
case language_m2:
|
case language_m2:
|
||||||
@ -830,7 +828,6 @@ character_type (struct type *type)
|
|||||||
|
|
||||||
case language_c:
|
case language_c:
|
||||||
case language_cplus:
|
case language_cplus:
|
||||||
case language_objc:
|
|
||||||
return (TYPE_CODE (type) == TYPE_CODE_INT) &&
|
return (TYPE_CODE (type) == TYPE_CODE_INT) &&
|
||||||
TYPE_LENGTH (type) == sizeof (char)
|
TYPE_LENGTH (type) == sizeof (char)
|
||||||
? 1 : 0;
|
? 1 : 0;
|
||||||
@ -853,7 +850,6 @@ string_type (struct type *type)
|
|||||||
|
|
||||||
case language_c:
|
case language_c:
|
||||||
case language_cplus:
|
case language_cplus:
|
||||||
case language_objc:
|
|
||||||
/* C does not have distinct string type. */
|
/* C does not have distinct string type. */
|
||||||
return (0);
|
return (0);
|
||||||
default:
|
default:
|
||||||
@ -872,7 +868,6 @@ boolean_type (struct type *type)
|
|||||||
{
|
{
|
||||||
case language_c:
|
case language_c:
|
||||||
case language_cplus:
|
case language_cplus:
|
||||||
case language_objc:
|
|
||||||
/* Might be more cleanly handled by having a
|
/* Might be more cleanly handled by having a
|
||||||
TYPE_CODE_INT_NOT_BOOL for (OBSOLETE) CHILL and such
|
TYPE_CODE_INT_NOT_BOOL for (OBSOLETE) CHILL and such
|
||||||
languages, or a TYPE_CODE_INT_OR_BOOL for C. */
|
languages, or a TYPE_CODE_INT_OR_BOOL for C. */
|
||||||
@ -909,7 +904,6 @@ structured_type (struct type *type)
|
|||||||
{
|
{
|
||||||
case language_c:
|
case language_c:
|
||||||
case language_cplus:
|
case language_cplus:
|
||||||
case language_objc:
|
|
||||||
return (TYPE_CODE (type) == TYPE_CODE_STRUCT) ||
|
return (TYPE_CODE (type) == TYPE_CODE_STRUCT) ||
|
||||||
(TYPE_CODE (type) == TYPE_CODE_UNION) ||
|
(TYPE_CODE (type) == TYPE_CODE_UNION) ||
|
||||||
(TYPE_CODE (type) == TYPE_CODE_ARRAY);
|
(TYPE_CODE (type) == TYPE_CODE_ARRAY);
|
||||||
@ -1130,7 +1124,6 @@ binop_type_check (struct value *arg1, struct value *arg2, int op)
|
|||||||
#ifdef _LANG_c
|
#ifdef _LANG_c
|
||||||
case language_c:
|
case language_c:
|
||||||
case language_cplus:
|
case language_cplus:
|
||||||
case language_objc:
|
|
||||||
switch (op)
|
switch (op)
|
||||||
{
|
{
|
||||||
case BINOP_DIV:
|
case BINOP_DIV:
|
||||||
|
@ -288,8 +288,7 @@ language_mode;
|
|||||||
/* "cast" really means conversion */
|
/* "cast" really means conversion */
|
||||||
/* FIXME -- should be a setting in language_defn */
|
/* FIXME -- should be a setting in language_defn */
|
||||||
#define CAST_IS_CONVERSION (current_language->la_language == language_c || \
|
#define CAST_IS_CONVERSION (current_language->la_language == language_c || \
|
||||||
current_language->la_language == language_cplus || \
|
current_language->la_language == language_cplus)
|
||||||
current_language->la_language == language_objc)
|
|
||||||
|
|
||||||
extern void language_info (int);
|
extern void language_info (int);
|
||||||
|
|
||||||
|
@ -56,7 +56,6 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
|
|||||||
#include "bfd.h" /* Required by objfiles.h. */
|
#include "bfd.h" /* Required by objfiles.h. */
|
||||||
#include "symfile.h" /* Required by objfiles.h. */
|
#include "symfile.h" /* Required by objfiles.h. */
|
||||||
#include "objfiles.h" /* For have_full_symbols and have_partial_symbols */
|
#include "objfiles.h" /* For have_full_symbols and have_partial_symbols */
|
||||||
#include "completer.h" /* For skip_quoted(). */
|
|
||||||
|
|
||||||
/* Remap normal yacc parser interface names (yyparse, yylex, yyerror, etc),
|
/* Remap normal yacc parser interface names (yyparse, yylex, yyerror, etc),
|
||||||
as well as gratuitiously global symbol names, so we can have multiple
|
as well as gratuitiously global symbol names, so we can have multiple
|
||||||
|
16
gdb/parse.c
16
gdb/parse.c
@ -867,11 +867,6 @@ length_of_subexp (register struct expression *expr, register int endpos)
|
|||||||
args = 1 + longest_to_int (expr->elts[endpos - 2].longconst);
|
args = 1 + longest_to_int (expr->elts[endpos - 2].longconst);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case OP_MSGCALL: /* Objective C message (method) call */
|
|
||||||
oplen = 4;
|
|
||||||
args = 1 + longest_to_int (expr->elts[endpos - 2].longconst);
|
|
||||||
break;
|
|
||||||
|
|
||||||
case UNOP_MAX:
|
case UNOP_MAX:
|
||||||
case UNOP_MIN:
|
case UNOP_MIN:
|
||||||
oplen = 3;
|
oplen = 3;
|
||||||
@ -903,8 +898,6 @@ length_of_subexp (register struct expression *expr, register int endpos)
|
|||||||
/* fall through */
|
/* fall through */
|
||||||
case OP_M2_STRING:
|
case OP_M2_STRING:
|
||||||
case OP_STRING:
|
case OP_STRING:
|
||||||
case OP_NSSTRING: /* Objective C Foundation Class NSString constant */
|
|
||||||
case OP_SELECTOR: /* Objective C "@selector" pseudo-op */
|
|
||||||
case OP_NAME:
|
case OP_NAME:
|
||||||
case OP_EXPRSTRING:
|
case OP_EXPRSTRING:
|
||||||
oplen = longest_to_int (expr->elts[endpos - 2].longconst);
|
oplen = longest_to_int (expr->elts[endpos - 2].longconst);
|
||||||
@ -943,7 +936,6 @@ length_of_subexp (register struct expression *expr, register int endpos)
|
|||||||
|
|
||||||
/* C++ */
|
/* C++ */
|
||||||
case OP_THIS:
|
case OP_THIS:
|
||||||
case OP_SELF:
|
|
||||||
oplen = 2;
|
oplen = 2;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
@ -1012,11 +1004,6 @@ prefixify_subexp (register struct expression *inexpr,
|
|||||||
args = 1 + longest_to_int (inexpr->elts[inend - 2].longconst);
|
args = 1 + longest_to_int (inexpr->elts[inend - 2].longconst);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case OP_MSGCALL: /* Objective C message (method) call */
|
|
||||||
oplen = 4;
|
|
||||||
args = 1 + longest_to_int (inexpr->elts[inend - 2].longconst);
|
|
||||||
break;
|
|
||||||
|
|
||||||
case UNOP_MIN:
|
case UNOP_MIN:
|
||||||
case UNOP_MAX:
|
case UNOP_MAX:
|
||||||
oplen = 3;
|
oplen = 3;
|
||||||
@ -1047,8 +1034,6 @@ prefixify_subexp (register struct expression *inexpr,
|
|||||||
/* fall through */
|
/* fall through */
|
||||||
case OP_M2_STRING:
|
case OP_M2_STRING:
|
||||||
case OP_STRING:
|
case OP_STRING:
|
||||||
case OP_NSSTRING: /* Objective C Foundation Class NSString constant */
|
|
||||||
case OP_SELECTOR: /* Objective C "@selector" pseudo-op */
|
|
||||||
case OP_NAME:
|
case OP_NAME:
|
||||||
case OP_EXPRSTRING:
|
case OP_EXPRSTRING:
|
||||||
oplen = longest_to_int (inexpr->elts[inend - 2].longconst);
|
oplen = longest_to_int (inexpr->elts[inend - 2].longconst);
|
||||||
@ -1087,7 +1072,6 @@ prefixify_subexp (register struct expression *inexpr,
|
|||||||
|
|
||||||
/* C++ */
|
/* C++ */
|
||||||
case OP_THIS:
|
case OP_THIS:
|
||||||
case OP_SELF:
|
|
||||||
oplen = 2;
|
oplen = 2;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
@ -79,14 +79,6 @@ struct symtoken
|
|||||||
int is_a_field_of_this;
|
int is_a_field_of_this;
|
||||||
};
|
};
|
||||||
|
|
||||||
struct objc_class_str
|
|
||||||
{
|
|
||||||
struct stoken stoken;
|
|
||||||
struct type *type;
|
|
||||||
int class;
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
/* For parsing of complicated types.
|
/* For parsing of complicated types.
|
||||||
An array should be preceded in the list by the size of the array. */
|
An array should be preceded in the list by the size of the array. */
|
||||||
enum type_pieces
|
enum type_pieces
|
||||||
@ -224,11 +216,6 @@ struct op_print
|
|||||||
|
|
||||||
extern int target_map_name_to_register (char *, int);
|
extern int target_map_name_to_register (char *, int);
|
||||||
|
|
||||||
/* for parsing Objective C */
|
|
||||||
extern void start_msglist (void);
|
|
||||||
extern void add_msglist (struct stoken *str, int addcolon);
|
|
||||||
extern int end_msglist (void);
|
|
||||||
|
|
||||||
/* Function used to avoid direct calls to fprintf
|
/* Function used to avoid direct calls to fprintf
|
||||||
in the code generated by the bison parser. */
|
in the code generated by the bison parser. */
|
||||||
|
|
||||||
|
@ -1104,11 +1104,7 @@ address_info (char *exp, int from_tty)
|
|||||||
printf_filtered ("Symbol \"");
|
printf_filtered ("Symbol \"");
|
||||||
fprintf_symbol_filtered (gdb_stdout, exp,
|
fprintf_symbol_filtered (gdb_stdout, exp,
|
||||||
current_language->la_language, DMGL_ANSI);
|
current_language->la_language, DMGL_ANSI);
|
||||||
printf_filtered ("\" is a field of the local class variable ");
|
printf_filtered ("\" is a field of the local class variable `this'\n");
|
||||||
if (current_language->la_language == language_objc)
|
|
||||||
printf_filtered ("'self'\n"); /* ObjC equivalent of "this" */
|
|
||||||
else
|
|
||||||
printf_filtered ("'this'\n");
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1114,9 +1114,8 @@ print_source_lines (struct symtab *s, int line, int stopline, int noerror)
|
|||||||
|
|
||||||
/* Print a list of files and line numbers which a user may choose from
|
/* Print a list of files and line numbers which a user may choose from
|
||||||
in order to list a function which was specified ambiguously (as with
|
in order to list a function which was specified ambiguously (as with
|
||||||
`list classname::overloadedfuncname', or 'list objectiveCSelector:).
|
`list classname::overloadedfuncname', for example). The vector in
|
||||||
The vector in SALS provides the filenames and line numbers.
|
SALS provides the filenames and line numbers. */
|
||||||
NOTE: some of the SALS may have no filename or line information! */
|
|
||||||
|
|
||||||
static void
|
static void
|
||||||
ambiguous_line_spec (struct symtabs_and_lines *sals)
|
ambiguous_line_spec (struct symtabs_and_lines *sals)
|
||||||
|
@ -1267,37 +1267,13 @@ symbol_reference_defined (char **string)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static char *
|
|
||||||
objc_find_colon (name)
|
|
||||||
char *name;
|
|
||||||
{
|
|
||||||
char *s = name;
|
|
||||||
if (s[0] == '-' || *s == '+')
|
|
||||||
{
|
|
||||||
if (s[1] != '[')
|
|
||||||
{
|
|
||||||
error ("invalid symbol name \"%s\"", name);
|
|
||||||
}
|
|
||||||
s = strchr (s, ']');
|
|
||||||
if (s == NULL)
|
|
||||||
{
|
|
||||||
error ("invalid symbol name \"%s\"", name);
|
|
||||||
}
|
|
||||||
return strchr (s, ':');
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
return strchr (s, ':');
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/* ARGSUSED */
|
/* ARGSUSED */
|
||||||
struct symbol *
|
struct symbol *
|
||||||
define_symbol (CORE_ADDR valu, char *string, int desc, int type,
|
define_symbol (CORE_ADDR valu, char *string, int desc, int type,
|
||||||
struct objfile *objfile)
|
struct objfile *objfile)
|
||||||
{
|
{
|
||||||
register struct symbol *sym;
|
register struct symbol *sym;
|
||||||
char *p = (char *) objc_find_colon (string);
|
char *p = (char *) strchr (string, ':');
|
||||||
int deftype;
|
int deftype;
|
||||||
int synonym = 0;
|
int synonym = 0;
|
||||||
register int i;
|
register int i;
|
||||||
@ -2030,8 +2006,7 @@ define_symbol (CORE_ADDR valu, char *string, int desc, int type,
|
|||||||
a typedef for "foo". Unfortunately, cfront never makes the typedef
|
a typedef for "foo". Unfortunately, cfront never makes the typedef
|
||||||
when translating C++ into C. We make the typedef here so that
|
when translating C++ into C. We make the typedef here so that
|
||||||
"ptype foo" works as expected for cfront translated code. */
|
"ptype foo" works as expected for cfront translated code. */
|
||||||
else if ((current_subfile->language == language_cplus)
|
else if (current_subfile->language == language_cplus)
|
||||||
|| (current_subfile->language == language_objc))
|
|
||||||
synonym = 1;
|
synonym = 1;
|
||||||
|
|
||||||
SYMBOL_TYPE (sym) = read_type (&p, objfile);
|
SYMBOL_TYPE (sym) = read_type (&p, objfile);
|
||||||
|
@ -1951,7 +1951,6 @@ init_filename_language_table (void)
|
|||||||
/* OBSOLETE add_filename_language (".ch", language_chill); */
|
/* OBSOLETE add_filename_language (".ch", language_chill); */
|
||||||
/* OBSOLETE add_filename_language (".c186", language_chill); */
|
/* OBSOLETE add_filename_language (".c186", language_chill); */
|
||||||
/* OBSOLETE add_filename_language (".c286", language_chill); */
|
/* OBSOLETE add_filename_language (".c286", language_chill); */
|
||||||
add_filename_language (".m", language_objc);
|
|
||||||
add_filename_language (".f", language_fortran);
|
add_filename_language (".f", language_fortran);
|
||||||
add_filename_language (".F", language_fortran);
|
add_filename_language (".F", language_fortran);
|
||||||
add_filename_language (".s", language_asm);
|
add_filename_language (".s", language_asm);
|
||||||
|
16
gdb/symtab.h
16
gdb/symtab.h
@ -89,11 +89,6 @@ struct general_symbol_info
|
|||||||
char *demangled_name;
|
char *demangled_name;
|
||||||
}
|
}
|
||||||
cplus_specific;
|
cplus_specific;
|
||||||
struct objc_specific
|
|
||||||
{
|
|
||||||
char *demangled_name;
|
|
||||||
}
|
|
||||||
objc_specific;
|
|
||||||
#if 0
|
#if 0
|
||||||
/* OBSOLETE struct chill_specific *//* For Chill */
|
/* OBSOLETE struct chill_specific *//* For Chill */
|
||||||
/* OBSOLETE { */
|
/* OBSOLETE { */
|
||||||
@ -151,10 +146,6 @@ extern CORE_ADDR symbol_overlayed_address (CORE_ADDR, asection *);
|
|||||||
{ \
|
{ \
|
||||||
SYMBOL_CPLUS_DEMANGLED_NAME (symbol) = NULL; \
|
SYMBOL_CPLUS_DEMANGLED_NAME (symbol) = NULL; \
|
||||||
} \
|
} \
|
||||||
else if (SYMBOL_LANGUAGE (symbol) == language_objc) \
|
|
||||||
{ \
|
|
||||||
SYMBOL_OBJC_DEMANGLED_NAME (symbol) = NULL; \
|
|
||||||
} \
|
|
||||||
/* OBSOLETE else if (SYMBOL_LANGUAGE (symbol) == language_chill) */ \
|
/* OBSOLETE else if (SYMBOL_LANGUAGE (symbol) == language_chill) */ \
|
||||||
/* OBSOLETE { */ \
|
/* OBSOLETE { */ \
|
||||||
/* OBSOLETE SYMBOL_CHILL_DEMANGLED_NAME (symbol) = NULL; */ \
|
/* OBSOLETE SYMBOL_CHILL_DEMANGLED_NAME (symbol) = NULL; */ \
|
||||||
@ -179,18 +170,13 @@ extern void symbol_init_demangled_name (struct general_symbol_info *symbol,
|
|||||||
(SYMBOL_LANGUAGE (symbol) == language_cplus \
|
(SYMBOL_LANGUAGE (symbol) == language_cplus \
|
||||||
|| SYMBOL_LANGUAGE (symbol) == language_java \
|
|| SYMBOL_LANGUAGE (symbol) == language_java \
|
||||||
? SYMBOL_CPLUS_DEMANGLED_NAME (symbol) \
|
? SYMBOL_CPLUS_DEMANGLED_NAME (symbol) \
|
||||||
: (SYMBOL_LANGUAGE (symbol) == language_objc \
|
|
||||||
? SYMBOL_OBJC_DEMANGLED_NAME (symbol) \
|
|
||||||
: /* OBSOLETE (SYMBOL_LANGUAGE (symbol) == language_chill */ \
|
: /* OBSOLETE (SYMBOL_LANGUAGE (symbol) == language_chill */ \
|
||||||
/* OBSOLETE ? SYMBOL_CHILL_DEMANGLED_NAME (symbol) */ \
|
/* OBSOLETE ? SYMBOL_CHILL_DEMANGLED_NAME (symbol) */ \
|
||||||
NULL))
|
NULL)
|
||||||
|
|
||||||
/* OBSOLETE #define SYMBOL_CHILL_DEMANGLED_NAME(symbol) */
|
/* OBSOLETE #define SYMBOL_CHILL_DEMANGLED_NAME(symbol) */
|
||||||
/* OBSOLETE (symbol)->ginfo.language_specific.chill_specific.demangled_name */
|
/* OBSOLETE (symbol)->ginfo.language_specific.chill_specific.demangled_name */
|
||||||
|
|
||||||
#define SYMBOL_OBJC_DEMANGLED_NAME(symbol) \
|
|
||||||
(symbol)->ginfo.language_specific.objc_specific.demangled_name
|
|
||||||
|
|
||||||
/* Macro that returns the "natural source name" of a symbol. In C++ this is
|
/* Macro that returns the "natural source name" of a symbol. In C++ this is
|
||||||
the "demangled" form of the name if demangle is on and the "mangled" form
|
the "demangled" form of the name if demangle is on and the "mangled" form
|
||||||
of the name if demangle is off. In other languages this is just the
|
of the name if demangle is off. In other languages this is just the
|
||||||
|
77
gdb/utils.c
77
gdb/utils.c
@ -152,13 +152,13 @@ int quit_flag;
|
|||||||
|
|
||||||
int immediate_quit;
|
int immediate_quit;
|
||||||
|
|
||||||
/* Nonzero means that encoded C++/ObjC names should be printed out in their
|
/* Nonzero means that encoded C++ names should be printed out in their
|
||||||
C++/ObjC form rather than raw. */
|
C++ form rather than raw. */
|
||||||
|
|
||||||
int demangle = 1;
|
int demangle = 1;
|
||||||
|
|
||||||
/* Nonzero means that encoded C++/ObjC names should be printed out in their
|
/* Nonzero means that encoded C++ names should be printed out in their
|
||||||
C++/ObjC form even in assembler language displays. If this is set, but
|
C++ form even in assembler language displays. If this is set, but
|
||||||
DEMANGLE is zero, names are printed raw, i.e. DEMANGLE controls. */
|
DEMANGLE is zero, names are printed raw, i.e. DEMANGLE controls. */
|
||||||
|
|
||||||
int asm_demangle = 0;
|
int asm_demangle = 0;
|
||||||
@ -1776,51 +1776,6 @@ wrap_here (char *indent)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Print input string to gdb_stdout, filtered, with wrap,
|
|
||||||
arranging strings in columns of n chars. String can be
|
|
||||||
right or left justified in the column. Never prints
|
|
||||||
trailing spaces. String should never be longer than
|
|
||||||
width. FIXME: this could be useful for the EXAMINE
|
|
||||||
command, which currently doesn't tabulate very well. */
|
|
||||||
|
|
||||||
void
|
|
||||||
puts_filtered_tabular (char *string, int width, int right)
|
|
||||||
{
|
|
||||||
int spaces = 0;
|
|
||||||
int stringlen;
|
|
||||||
char *spacebuf;
|
|
||||||
|
|
||||||
gdb_assert (chars_per_line > 0);
|
|
||||||
if (chars_per_line == UINT_MAX)
|
|
||||||
{
|
|
||||||
fputs_filtered (string, gdb_stdout);
|
|
||||||
fputs_filtered ("\n", gdb_stdout);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (((chars_printed - 1) / width + 2) * width >= chars_per_line)
|
|
||||||
fputs_filtered ("\n", gdb_stdout);
|
|
||||||
|
|
||||||
if (width >= chars_per_line)
|
|
||||||
width = chars_per_line - 1;
|
|
||||||
|
|
||||||
stringlen = strlen (string);
|
|
||||||
|
|
||||||
if (chars_printed > 0)
|
|
||||||
spaces = width - (chars_printed - 1) % width - 1;
|
|
||||||
if (right)
|
|
||||||
spaces += width - stringlen;
|
|
||||||
|
|
||||||
spacebuf = alloca (spaces + 1);
|
|
||||||
spacebuf[spaces] = '\0';
|
|
||||||
while (spaces--)
|
|
||||||
spacebuf[spaces] = ' ';
|
|
||||||
|
|
||||||
fputs_filtered (spacebuf, gdb_stdout);
|
|
||||||
fputs_filtered (string, gdb_stdout);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/* Ensure that whatever gets printed next, using the filtered output
|
/* Ensure that whatever gets printed next, using the filtered output
|
||||||
commands, starts at the beginning of the line. I.E. if there is
|
commands, starts at the beginning of the line. I.E. if there is
|
||||||
any pending output for the current line, flush it and start a new
|
any pending output for the current line, flush it and start a new
|
||||||
@ -2248,18 +2203,15 @@ print_spaces_filtered (int n, struct ui_file *stream)
|
|||||||
fputs_filtered (n_spaces (n), stream);
|
fputs_filtered (n_spaces (n), stream);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* C++/ObjC demangler stuff. */
|
/* C++ demangler stuff. */
|
||||||
|
|
||||||
/* fprintf_symbol_filtered attempts to demangle NAME, a symbol in
|
/* fprintf_symbol_filtered attempts to demangle NAME, a symbol in language
|
||||||
language LANG, using demangling args ARG_MODE, and print it
|
LANG, using demangling args ARG_MODE, and print it filtered to STREAM.
|
||||||
filtered to STREAM. If the name is not mangled, or the language
|
If the name is not mangled, or the language for the name is unknown, or
|
||||||
for the name is unknown, or demangling is off, the name is printed
|
demangling is off, the name is printed in its "raw" form. */
|
||||||
in its "raw" form. */
|
|
||||||
|
|
||||||
void
|
void
|
||||||
fprintf_symbol_filtered (struct ui_file *stream,
|
fprintf_symbol_filtered (struct ui_file *stream, char *name, enum language lang,
|
||||||
char *name,
|
|
||||||
enum language lang,
|
|
||||||
int arg_mode)
|
int arg_mode)
|
||||||
{
|
{
|
||||||
char *demangled;
|
char *demangled;
|
||||||
@ -2281,11 +2233,6 @@ fprintf_symbol_filtered (struct ui_file *stream,
|
|||||||
case language_java:
|
case language_java:
|
||||||
demangled = cplus_demangle (name, arg_mode | DMGL_JAVA);
|
demangled = cplus_demangle (name, arg_mode | DMGL_JAVA);
|
||||||
break;
|
break;
|
||||||
#if 0 /* Enable once objective-c support is turned on. */
|
|
||||||
case language_objc:
|
|
||||||
demangled = objc_demangle (name);
|
|
||||||
break;
|
|
||||||
#endif
|
|
||||||
#if 0
|
#if 0
|
||||||
/* OBSOLETE case language_chill: */
|
/* OBSOLETE case language_chill: */
|
||||||
/* OBSOLETE demangled = chill_demangle (name); */
|
/* OBSOLETE demangled = chill_demangle (name); */
|
||||||
@ -2405,7 +2352,7 @@ initialize_utils (void)
|
|||||||
add_show_from_set
|
add_show_from_set
|
||||||
(add_set_cmd ("demangle", class_support, var_boolean,
|
(add_set_cmd ("demangle", class_support, var_boolean,
|
||||||
(char *) &demangle,
|
(char *) &demangle,
|
||||||
"Set demangling of encoded C++/ObjC names when displaying symbols.",
|
"Set demangling of encoded C++ names when displaying symbols.",
|
||||||
&setprintlist),
|
&setprintlist),
|
||||||
&showprintlist);
|
&showprintlist);
|
||||||
|
|
||||||
@ -2433,7 +2380,7 @@ initialize_utils (void)
|
|||||||
add_show_from_set
|
add_show_from_set
|
||||||
(add_set_cmd ("asm-demangle", class_support, var_boolean,
|
(add_set_cmd ("asm-demangle", class_support, var_boolean,
|
||||||
(char *) &asm_demangle,
|
(char *) &asm_demangle,
|
||||||
"Set demangling of C++/ObjC names in disassembly listings.",
|
"Set demangling of C++ names in disassembly listings.",
|
||||||
&setprintlist),
|
&setprintlist),
|
||||||
&showprintlist);
|
&showprintlist);
|
||||||
}
|
}
|
||||||
|
61
gdb/valops.c
61
gdb/valops.c
@ -48,8 +48,10 @@ extern int overload_debug;
|
|||||||
static int typecmp (int staticp, int varargs, int nargs,
|
static int typecmp (int staticp, int varargs, int nargs,
|
||||||
struct field t1[], struct value *t2[]);
|
struct field t1[], struct value *t2[]);
|
||||||
|
|
||||||
|
static CORE_ADDR find_function_addr (struct value *, struct type **);
|
||||||
static struct value *value_arg_coerce (struct value *, struct type *, int);
|
static struct value *value_arg_coerce (struct value *, struct type *, int);
|
||||||
|
|
||||||
|
|
||||||
static CORE_ADDR value_push (CORE_ADDR, struct value *);
|
static CORE_ADDR value_push (CORE_ADDR, struct value *);
|
||||||
|
|
||||||
static struct value *search_struct_field (char *, struct value *, int,
|
static struct value *search_struct_field (char *, struct value *, int,
|
||||||
@ -89,6 +91,7 @@ int overload_resolution = 0;
|
|||||||
int unwind_on_signal_p = 0;
|
int unwind_on_signal_p = 0;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/* Find the address of function name NAME in the inferior. */
|
/* Find the address of function name NAME in the inferior. */
|
||||||
|
|
||||||
struct value *
|
struct value *
|
||||||
@ -1216,7 +1219,7 @@ value_arg_coerce (struct value *arg, struct type *param_type,
|
|||||||
/* Determine a function's address and its return type from its value.
|
/* Determine a function's address and its return type from its value.
|
||||||
Calls error() if the function is not valid for calling. */
|
Calls error() if the function is not valid for calling. */
|
||||||
|
|
||||||
CORE_ADDR
|
static CORE_ADDR
|
||||||
find_function_addr (struct value *function, struct type **retval_type)
|
find_function_addr (struct value *function, struct type **retval_type)
|
||||||
{
|
{
|
||||||
register struct type *ftype = check_typedef (VALUE_TYPE (function));
|
register struct type *ftype = check_typedef (VALUE_TYPE (function));
|
||||||
@ -1886,23 +1889,6 @@ call_function_by_hand (struct value *function, int nargs, struct value **args)
|
|||||||
error ("Cannot invoke functions on this machine.");
|
error ("Cannot invoke functions on this machine.");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
struct value *
|
|
||||||
call_function_by_hand_expecting_type (struct value *function,
|
|
||||||
struct type *expect_type,
|
|
||||||
int nargs, struct value **args,
|
|
||||||
int restore_frame)
|
|
||||||
{
|
|
||||||
if (CALL_DUMMY_P)
|
|
||||||
{
|
|
||||||
/* FIXME: Changes to func not implemented yet */
|
|
||||||
return hand_function_call (function, nargs, args);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
error ("Cannot invoke functions on this machine.");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@ -3317,17 +3303,21 @@ value_full_object (struct value *argp, struct type *rtype, int xfull, int xtop,
|
|||||||
return new_val;
|
return new_val;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Return the value of the local variable, if one exists.
|
|
||||||
|
|
||||||
|
|
||||||
|
/* C++: return the value of the class instance variable, if one exists.
|
||||||
Flag COMPLAIN signals an error if the request is made in an
|
Flag COMPLAIN signals an error if the request is made in an
|
||||||
inappropriate context. */
|
inappropriate context. */
|
||||||
|
|
||||||
struct value *
|
struct value *
|
||||||
value_of_local (const char *name, int complain)
|
value_of_this (int complain)
|
||||||
{
|
{
|
||||||
struct symbol *func, *sym;
|
struct symbol *func, *sym;
|
||||||
struct block *b;
|
struct block *b;
|
||||||
int i;
|
int i;
|
||||||
struct value * ret;
|
static const char funny_this[] = "this";
|
||||||
|
struct value *this;
|
||||||
|
|
||||||
if (selected_frame == 0)
|
if (selected_frame == 0)
|
||||||
{
|
{
|
||||||
@ -3341,7 +3331,7 @@ value_of_local (const char *name, int complain)
|
|||||||
if (!func)
|
if (!func)
|
||||||
{
|
{
|
||||||
if (complain)
|
if (complain)
|
||||||
error ("no %s in nameless context", name);
|
error ("no `this' in nameless context");
|
||||||
else
|
else
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
@ -3351,39 +3341,26 @@ value_of_local (const char *name, int complain)
|
|||||||
if (i <= 0)
|
if (i <= 0)
|
||||||
{
|
{
|
||||||
if (complain)
|
if (complain)
|
||||||
error ("no args, no %s", name);
|
error ("no args, no `this'");
|
||||||
else
|
else
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Calling lookup_block_symbol is necessary to get the LOC_REGISTER
|
/* Calling lookup_block_symbol is necessary to get the LOC_REGISTER
|
||||||
symbol instead of the LOC_ARG one (if both exist). */
|
symbol instead of the LOC_ARG one (if both exist). */
|
||||||
sym = lookup_block_symbol (b, name, NULL, VAR_NAMESPACE);
|
sym = lookup_block_symbol (b, funny_this, NULL, VAR_NAMESPACE);
|
||||||
if (sym == NULL)
|
if (sym == NULL)
|
||||||
{
|
{
|
||||||
if (complain)
|
if (complain)
|
||||||
error ("current stack frame does not contain a variable named \"%s\"", name);
|
error ("current stack frame not in method");
|
||||||
else
|
else
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
ret = read_var_value (sym, selected_frame);
|
this = read_var_value (sym, selected_frame);
|
||||||
if (ret == 0 && complain)
|
if (this == 0 && complain)
|
||||||
error ("%s argument unreadable", name);
|
error ("`this' argument at unknown address");
|
||||||
return ret;
|
return this;
|
||||||
}
|
|
||||||
|
|
||||||
/* C++/Objective-C: return the value of the class instance variable,
|
|
||||||
if one exists. Flag COMPLAIN signals an error if the request is
|
|
||||||
made in an inappropriate context. */
|
|
||||||
|
|
||||||
struct value *
|
|
||||||
value_of_this (int complain)
|
|
||||||
{
|
|
||||||
if (current_language->la_language == language_objc)
|
|
||||||
return value_of_local ("self", complain);
|
|
||||||
else
|
|
||||||
return value_of_local ("this", complain);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Create a slice (sub-string, sub-array) of ARRAY, that is LENGTH elements
|
/* Create a slice (sub-string, sub-array) of ARRAY, that is LENGTH elements
|
||||||
|
12
gdb/value.h
12
gdb/value.h
@ -535,12 +535,6 @@ extern void clear_value_history (void);
|
|||||||
|
|
||||||
extern void clear_internalvars (void);
|
extern void clear_internalvars (void);
|
||||||
|
|
||||||
/* Objective-C */
|
|
||||||
|
|
||||||
extern struct value *value_of_local (const char *name, int complain);
|
|
||||||
|
|
||||||
extern struct value *value_nsstring (char *ptr, int len);
|
|
||||||
|
|
||||||
/* From values.c */
|
/* From values.c */
|
||||||
|
|
||||||
extern struct value *value_copy (struct value *);
|
extern struct value *value_copy (struct value *);
|
||||||
@ -554,10 +548,6 @@ extern struct value *value_slice (struct value *, int, int);
|
|||||||
extern struct value *call_function_by_hand (struct value *, int,
|
extern struct value *call_function_by_hand (struct value *, int,
|
||||||
struct value **);
|
struct value **);
|
||||||
|
|
||||||
extern struct value *call_function_by_hand_expecting_type (struct value *,
|
|
||||||
struct type *, int,
|
|
||||||
struct value **, int);
|
|
||||||
|
|
||||||
extern int default_coerce_float_to_double (struct type *, struct type *);
|
extern int default_coerce_float_to_double (struct type *, struct type *);
|
||||||
|
|
||||||
extern int standard_coerce_float_to_double (struct type *, struct type *);
|
extern int standard_coerce_float_to_double (struct type *, struct type *);
|
||||||
@ -576,6 +566,4 @@ extern CORE_ADDR default_push_arguments (int nargs, struct value ** args,
|
|||||||
CORE_ADDR sp, int struct_return,
|
CORE_ADDR sp, int struct_return,
|
||||||
CORE_ADDR struct_addr);
|
CORE_ADDR struct_addr);
|
||||||
|
|
||||||
extern CORE_ADDR find_function_addr (struct value *, struct type **);
|
|
||||||
|
|
||||||
#endif /* !defined (VALUE_H) */
|
#endif /* !defined (VALUE_H) */
|
||||||
|
Reference in New Issue
Block a user