* printcmd.c (address_info): Use fprintf_symbol_filtered
to print the symbol name. * stabsread.c (define_symbol): Handle cfront lossage for struct/union/enums and typedefs. * partial-stab.h (case N_BINCL): Update psymtab_language as appropriate when changing subfiles. (case N_SOL): Update psymtab_language as appropriate when changing subfiles. Add typedef for structs, unions, and enums when processing C++ files.
This commit is contained in:
parent
3e80841e27
commit
91f8701603
@ -1,3 +1,17 @@
|
||||
Thu Nov 11 15:22:20 1993 Jeffrey A. Law (law@snake.cs.utah.edu)
|
||||
|
||||
* printcmd.c (address_info): Use fprintf_symbol_filtered
|
||||
to print the symbol name.
|
||||
|
||||
* stabsread.c (define_symbol): Handle cfront lossage for
|
||||
struct/union/enums and typedefs.
|
||||
|
||||
* partial-stab.h (case N_BINCL): Update psymtab_language
|
||||
as appropriate when changing subfiles.
|
||||
(case N_SOL): Update psymtab_language as appropriate when
|
||||
changing subfiles. Add typedef for structs, unions, and enums
|
||||
when processing C++ files.
|
||||
|
||||
Thu Nov 11 13:18:47 1993 Jim Kingdon (kingdon@lioth.cygnus.com)
|
||||
|
||||
* README: Remove information on languages and just cite the (newly
|
||||
|
@ -240,69 +240,96 @@ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */
|
||||
}
|
||||
|
||||
case N_BINCL:
|
||||
{
|
||||
#ifdef DBXREAD_ONLY
|
||||
/* Add this bincl to the bincl_list for future EXCLs. No
|
||||
need to save the string; it'll be around until
|
||||
read_dbx_symtab function returns */
|
||||
enum language tmp_language;
|
||||
/* Add this bincl to the bincl_list for future EXCLs. No
|
||||
need to save the string; it'll be around until
|
||||
read_dbx_symtab function returns */
|
||||
|
||||
SET_NAMESTRING();
|
||||
SET_NAMESTRING();
|
||||
|
||||
add_bincl_to_list (pst, namestring, CUR_SYMBOL_VALUE);
|
||||
tmp_language = deduce_language_from_filename (namestring);
|
||||
|
||||
/* Mark down an include file in the current psymtab */
|
||||
/* Only change the psymtab's language if we've learned
|
||||
something useful (eg. tmp_language is not language_unknown).
|
||||
In addition, to match what start_subfile does, never change
|
||||
from C++ to C. */
|
||||
if (tmp_language != language_unknown
|
||||
&& (tmp_language != language_c
|
||||
|| psymtab_language != language_cplus))
|
||||
psymtab_language = tmp_language;
|
||||
|
||||
goto record_include_file;
|
||||
add_bincl_to_list (pst, namestring, CUR_SYMBOL_VALUE);
|
||||
|
||||
/* Mark down an include file in the current psymtab */
|
||||
|
||||
goto record_include_file;
|
||||
|
||||
#else /* DBXREAD_ONLY */
|
||||
continue;
|
||||
#endif
|
||||
|
||||
case N_SOL:
|
||||
/* Mark down an include file in the current psymtab */
|
||||
|
||||
SET_NAMESTRING();
|
||||
|
||||
/* In C++, one may expect the same filename to come round many
|
||||
times, when code is coming alternately from the main file
|
||||
and from inline functions in other files. So I check to see
|
||||
if this is a file we've seen before -- either the main
|
||||
source file, or a previously included file.
|
||||
|
||||
This seems to be a lot of time to be spending on N_SOL, but
|
||||
things like "break c-exp.y:435" need to work (I
|
||||
suppose the psymtab_include_list could be hashed or put
|
||||
in a binary tree, if profiling shows this is a major hog). */
|
||||
if (pst && STREQ (namestring, pst->filename))
|
||||
continue;
|
||||
{
|
||||
register int i;
|
||||
for (i = 0; i < includes_used; i++)
|
||||
if (STREQ (namestring, psymtab_include_list[i]))
|
||||
{
|
||||
i = -1;
|
||||
break;
|
||||
}
|
||||
if (i == -1)
|
||||
continue;
|
||||
#endif
|
||||
}
|
||||
|
||||
#ifdef DBXREAD_ONLY
|
||||
record_include_file:
|
||||
#endif
|
||||
|
||||
psymtab_include_list[includes_used++] = namestring;
|
||||
if (includes_used >= includes_allocated)
|
||||
case N_SOL:
|
||||
{
|
||||
enum language tmp_language;
|
||||
/* Mark down an include file in the current psymtab */
|
||||
|
||||
SET_NAMESTRING();
|
||||
|
||||
tmp_language = deduce_language_from_filename (namestring);
|
||||
|
||||
/* Only change the psymtab's language if we've learned
|
||||
something useful (eg. tmp_language is not language_unknown).
|
||||
In addition, to match what start_subfile does, never change
|
||||
from C++ to C. */
|
||||
if (tmp_language != language_unknown
|
||||
&& (tmp_language != language_c
|
||||
|| psymtab_language != language_cplus))
|
||||
psymtab_language = tmp_language;
|
||||
|
||||
/* In C++, one may expect the same filename to come round many
|
||||
times, when code is coming alternately from the main file
|
||||
and from inline functions in other files. So I check to see
|
||||
if this is a file we've seen before -- either the main
|
||||
source file, or a previously included file.
|
||||
|
||||
This seems to be a lot of time to be spending on N_SOL, but
|
||||
things like "break c-exp.y:435" need to work (I
|
||||
suppose the psymtab_include_list could be hashed or put
|
||||
in a binary tree, if profiling shows this is a major hog). */
|
||||
if (pst && STREQ (namestring, pst->filename))
|
||||
continue;
|
||||
{
|
||||
char **orig = psymtab_include_list;
|
||||
|
||||
psymtab_include_list = (char **)
|
||||
alloca ((includes_allocated *= 2) *
|
||||
sizeof (char *));
|
||||
memcpy ((PTR)psymtab_include_list, (PTR)orig,
|
||||
includes_used * sizeof (char *));
|
||||
register int i;
|
||||
for (i = 0; i < includes_used; i++)
|
||||
if (STREQ (namestring, psymtab_include_list[i]))
|
||||
{
|
||||
i = -1;
|
||||
break;
|
||||
}
|
||||
if (i == -1)
|
||||
continue;
|
||||
}
|
||||
continue;
|
||||
|
||||
|
||||
#ifdef DBXREAD_ONLY
|
||||
record_include_file:
|
||||
#endif
|
||||
|
||||
psymtab_include_list[includes_used++] = namestring;
|
||||
if (includes_used >= includes_allocated)
|
||||
{
|
||||
char **orig = psymtab_include_list;
|
||||
|
||||
psymtab_include_list = (char **)
|
||||
alloca ((includes_allocated *= 2) *
|
||||
sizeof (char *));
|
||||
memcpy ((PTR)psymtab_include_list, (PTR)orig,
|
||||
includes_used * sizeof (char *));
|
||||
}
|
||||
continue;
|
||||
}
|
||||
case N_LSYM: /* Typedef or automatic variable. */
|
||||
case N_STSYM: /* Data seg var -- static */
|
||||
case N_LCSYM: /* BSS " */
|
||||
@ -375,6 +402,20 @@ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */
|
||||
objfile);
|
||||
p += 1;
|
||||
}
|
||||
/* The semantics of C++ state that "struct foo { ... }"
|
||||
also defines a typedef for "foo". Unfortuantely, cfront
|
||||
never makes the typedef when translating from C++ to C.
|
||||
We make the typedef here so that "ptype foo" works as
|
||||
expected for cfront translated code. */
|
||||
else if (psymtab_language == language_cplus)
|
||||
{
|
||||
/* Also a typedef with the same name. */
|
||||
ADD_PSYMBOL_TO_LIST (namestring, p - namestring,
|
||||
VAR_NAMESPACE, LOC_TYPEDEF,
|
||||
objfile->static_psymbols,
|
||||
CUR_SYMBOL_VALUE, psymtab_language,
|
||||
objfile);
|
||||
}
|
||||
}
|
||||
goto check_enum;
|
||||
case 't':
|
||||
|
@ -883,22 +883,32 @@ address_info (exp, from_tty)
|
||||
{
|
||||
if (is_a_field_of_this)
|
||||
{
|
||||
printf_unfiltered ("Symbol \"%s\" is a field of the local class variable `this'\n", exp);
|
||||
printf_unfiltered ("Symbol \"");
|
||||
fprintf_symbol_filtered (gdb_stdout, exp,
|
||||
current_language->la_language, DMGL_ANSI);
|
||||
printf_unfiltered ("\" is a field of the local class variable `this'\n");
|
||||
return;
|
||||
}
|
||||
|
||||
msymbol = lookup_minimal_symbol (exp, (struct objfile *) NULL);
|
||||
|
||||
if (msymbol != NULL)
|
||||
printf_unfiltered ("Symbol \"%s\" is at %s in a file compiled without debugging.\n",
|
||||
exp,
|
||||
local_hex_string((unsigned long) SYMBOL_VALUE_ADDRESS (msymbol)));
|
||||
{
|
||||
printf_unfiltered ("Symbol \"");
|
||||
fprintf_symbol_filtered (gdb_stdout, exp,
|
||||
current_language->la_language, DMGL_ANSI);
|
||||
printf_unfiltered ("\" is at %s in a file compiled without debugging.\n",
|
||||
local_hex_string((unsigned long) SYMBOL_VALUE_ADDRESS (msymbol)));
|
||||
}
|
||||
else
|
||||
error ("No symbol \"%s\" in current context.", exp);
|
||||
return;
|
||||
}
|
||||
|
||||
printf_unfiltered ("Symbol \"%s\" is ", SYMBOL_NAME (sym));
|
||||
printf_unfiltered ("Symbol \"");
|
||||
fprintf_symbol_filtered (gdb_stdout, SYMBOL_NAME (sym),
|
||||
current_language->la_language, DMGL_ANSI);
|
||||
printf_unfiltered ("\" is ", SYMBOL_NAME (sym));
|
||||
val = SYMBOL_VALUE (sym);
|
||||
basereg = SYMBOL_BASEREG (sym);
|
||||
|
||||
|
@ -1035,6 +1035,17 @@ define_symbol (valu, string, desc, type, objfile)
|
||||
strlen (SYMBOL_NAME (sym)),
|
||||
&objfile -> symbol_obstack);
|
||||
}
|
||||
/* The semantics of C++ state that "struct foo { ... }" also defines
|
||||
a typedef for "foo". Unfortunately, cfront never makes the typedef
|
||||
when translating C++ into C. We make the typedef here so that
|
||||
"ptype foo" works as expected for cfront translated code. */
|
||||
else if (current_subfile->language == language_cplus)
|
||||
{
|
||||
synonym = 1;
|
||||
type_synonym_name = obsavestring (SYMBOL_NAME (sym),
|
||||
strlen (SYMBOL_NAME (sym)),
|
||||
&objfile -> symbol_obstack);
|
||||
}
|
||||
|
||||
SYMBOL_TYPE (sym) = read_type (&p, objfile);
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user