aboutsummaryrefslogtreecommitdiff
path: root/gdb/stabsread.c
diff options
context:
space:
mode:
authorJim Kingdon <jkingdon@engr.sgi.com>1994-03-02 03:01:34 +0000
committerJim Kingdon <jkingdon@engr.sgi.com>1994-03-02 03:01:34 +0000
commit25200748a2ad772bb72958902dd18b314ec4e6c9 (patch)
tree01a1e4e75536ec6fc99cca358f17d3224a87f49c /gdb/stabsread.c
parent6e2194f0772c505e0ee872611664188c8513a0b1 (diff)
downloadgdb-25200748a2ad772bb72958902dd18b314ec4e6c9.zip
gdb-25200748a2ad772bb72958902dd18b314ec4e6c9.tar.gz
gdb-25200748a2ad772bb72958902dd18b314ec4e6c9.tar.bz2
* os9kread.c (os9k_process_one_symbol): Rename
VARIABLES_INSIDE_BLOCK to OS9K_VARIABLES_INSIDE_BLOCK. * symfile.c (symbol_file_command): Check for (CORE_ADDR)-1, not (CORE_ADDR)0, from target_link, since that is what it uses. Process name at end, not during parsing (like we did before Kung's change), so that -readnow and -mapped can appear anywhere. Make text_relocation a local variable. * config/i386/i386os9k.mt: Fix comment. * Makefile.in (ALLDEPFILES): Add remote-os9k.c. * os9kread.c: Put "comments" after #endif inside /* */. * stabsread.h: Add os9k_stabs variable. * stabsread.c (start_stabs), os9kread.c (os9k_process_one_symbol): Set it. * stabsread.c (define_symbol): If os9k_stabs, put a 'V' symbol descriptor in global_symbols not local_symbols. (read_type): If os9k_stabs, accept 'c', 'i', and 'b' type descriptors. (read_type): If os9k_stabs, accept function parameters after 'f' type descriptor. (read_array_type): If os9k_stabs, don't expect index type and expect lower and upper to be separated by ',' not ';'. (read_enum_type): If os9k_stabs, read a number before the first enumeration constant. (os9k_init_type_vector): New function. (dbx_lookup_type): Call it when starting new type vector. * config/i386/tm-i386os9k.h: Define BELIEVE_PCC_PROMOTION. * (os9k_process_one_symbol): Call define_symbol not os9k_define_symbol. * os9kstab.c: Removed. * Makefile.in: Update accordingly. * objfiles.c (objfile_relocate_data): Removed. * remote-os9k.c (rombug_wait): Call objfile_relocate not objfile_relocate_data. * objfiles.h, objfiles.c: Remove find_pc_objfile. * remote-os9k.c (rombug_wait): Call find_pc_section not find_pc_objfile. * main.c (quit_command): Check inferior_pid; revert Kung change. * remote-os9k.c (rombug_create_inferior): Set inferior_pid.
Diffstat (limited to 'gdb/stabsread.c')
-rw-r--r--gdb/stabsread.c113
1 files changed, 96 insertions, 17 deletions
diff --git a/gdb/stabsread.c b/gdb/stabsread.c
index e31a0e3..860d72a 100644
--- a/gdb/stabsread.c
+++ b/gdb/stabsread.c
@@ -198,8 +198,36 @@ static int undef_types_length;
if (**(pp) == '\\' || (**(pp) == '?' && (*(pp))[1] == '\0')) \
*(pp) = next_symbol_text (); \
} while (0)
-
+/* FIXME: These probably should be our own types (like rs6000_builtin_type
+ has its own types) rather than builtin_type_*. */
+static struct type **os9k_type_vector[] = {
+ 0,
+ &builtin_type_int,
+ &builtin_type_char,
+ &builtin_type_long,
+ &builtin_type_short,
+ &builtin_type_unsigned_char,
+ &builtin_type_unsigned_short,
+ &builtin_type_unsigned_long,
+ &builtin_type_unsigned_int,
+ &builtin_type_float,
+ &builtin_type_double,
+ &builtin_type_void,
+ &builtin_type_long_double
+};
+
+static void os9k_init_type_vector PARAMS ((struct type **));
+
+static void
+os9k_init_type_vector(tv)
+ struct type **tv;
+{
+ int i;
+ for (i=0; i<sizeof(os9k_type_vector)/sizeof(struct type **); i++)
+ tv[i] = (os9k_type_vector[i] == 0 ? 0 : *(os9k_type_vector[i]));
+}
+
/* Look up a dbx type-number pair. Return the address of the slot
where the type for that number-pair is stored.
The number-pair is in TYPENUMS.
@@ -265,6 +293,10 @@ Invalid symbol data: type number (%d,%d) out of range at symtab pos %d.",
(type_vector_length * sizeof (struct type *)));
memset (&type_vector[old_len], 0,
(type_vector_length - old_len) * sizeof (struct type *));
+
+ if (os9k_stabs)
+ /* Deal with OS9000 fundamental types. */
+ os9k_init_type_vector (type_vector);
}
return (&type_vector[index]);
}
@@ -1100,7 +1132,10 @@ define_symbol (valu, string, desc, type, objfile)
SYMBOL_CLASS (sym) = LOC_STATIC;
SYMBOL_VALUE_ADDRESS (sym) = valu;
SYMBOL_NAMESPACE (sym) = VAR_NAMESPACE;
- add_symbol_to_list (sym, &local_symbols);
+ if (os9k_stabs)
+ add_symbol_to_list (sym, &global_symbols);
+ else
+ add_symbol_to_list (sym, &local_symbols);
break;
case 'v':
@@ -1482,16 +1517,36 @@ read_type (pp, objfile)
break;
case 'f': /* Function returning another type */
+ if (os9k_stabs && **pp == '(')
+ {
+ /* Function prototype; skip it.
+ We must conditionalize this on os9k_stabs because otherwise
+ it could be confused with a Sun-style (1,3) typenumber
+ (I think). */
+ while (**pp != ')')
+ ++*pp;
+ ++*pp;
+ }
type1 = read_type (pp, objfile);
type = make_function_type (type1, dbx_lookup_type (typenums));
break;
- case 'k': /* Const qualifier on some type (Sun) */
+ case 'k': /* Const qualifier on some type (Sun) */
+ case 'c': /* Const qualifier on some type (OS9000) */
+ /* Because 'c' means other things to AIX and 'k' is perfectly good,
+ only accept 'c' in the os9k_stabs case. */
+ if (type_descriptor == 'c' && !os9k_stabs)
+ return error_type (pp);
type = read_type (pp, objfile);
/* FIXME! For now, we ignore const and volatile qualifiers. */
break;
- case 'B': /* Volatile qual on some type (Sun) */
+ case 'B': /* Volatile qual on some type (Sun) */
+ case 'i': /* Volatile qual on some type (OS9000) */
+ /* Because 'i' means other things to AIX and 'B' is perfectly good,
+ only accept 'i' in the os9k_stabs case. */
+ if (type_descriptor == 'i' && !os9k_stabs)
+ return error_type (pp);
type = read_type (pp, objfile);
/* FIXME! For now, we ignore const and volatile qualifiers. */
break;
@@ -1552,10 +1607,17 @@ read_type (pp, objfile)
*dbx_lookup_type (typenums) = type;
break;
- case 'b': /* Sun ACC builtin int type */
- type = read_sun_builtin_type (pp, typenums, objfile);
- if (typenums[0] != -1)
- *dbx_lookup_type (typenums) = type;
+ case 'b':
+ if (os9k_stabs)
+ /* Const and volatile qualified type. */
+ type = read_type (pp, objfile);
+ else
+ {
+ /* Sun ACC builtin int type */
+ type = read_sun_builtin_type (pp, typenums, objfile);
+ if (typenums[0] != -1)
+ *dbx_lookup_type (typenums) = type;
+ }
break;
case 'R': /* Sun ACC builtin float type */
@@ -2825,24 +2887,29 @@ read_array_type (pp, type, objfile)
int nbits;
/* Format of an array type:
- "ar<index type>;lower;upper;<array_contents_type>". Put code in
- to handle this.
+ "ar<index type>;lower;upper;<array_contents_type>".
+ OS9000: "arlower,upper;<array_contents_type>".
Fortran adjustable arrays use Adigits or Tdigits for lower or upper;
for these, produce a type like float[][]. */
- index_type = read_type (pp, objfile);
- if (**pp != ';')
- /* Improper format of array type decl. */
- return error_type (pp);
- ++*pp;
+ if (os9k_stabs)
+ index_type = builtin_type_int;
+ else
+ {
+ index_type = read_type (pp, objfile);
+ if (**pp != ';')
+ /* Improper format of array type decl. */
+ return error_type (pp);
+ ++*pp;
+ }
if (!(**pp >= '0' && **pp <= '9') && **pp != '-')
{
(*pp)++;
adjustable = 1;
}
- lower = read_huge_number (pp, ';', &nbits);
+ lower = read_huge_number (pp, os9k_stabs ? ',' : ';', &nbits);
if (nbits != 0)
return error_type (pp);
@@ -2902,6 +2969,7 @@ read_enum_type (pp, type, objfile)
struct pending **symlist;
struct pending *osyms, *syms;
int o_nsyms;
+ int nbits;
#if 0
/* FIXME! The stabs produced by Sun CC merrily define things that ought
@@ -2915,12 +2983,21 @@ read_enum_type (pp, type, objfile)
osyms = *symlist;
o_nsyms = osyms ? osyms->nsyms : 0;
+ if (os9k_stabs)
+ {
+ /* Size. Perhaps this does not have to be conditionalized on
+ os9k_stabs (assuming the name of an enum constant can't start
+ with a digit). */
+ read_huge_number (pp, 0, &nbits);
+ if (nbits != 0)
+ return error_type (pp);
+ }
+
/* Read the value-names and their values.
The input syntax is NAME:VALUE,NAME:VALUE, and so on.
A semicolon or comma instead of a NAME means the end. */
while (**pp && **pp != ';' && **pp != ',')
{
- int nbits;
STABS_CONTINUE (pp);
p = *pp;
while (*p != ':') p++;
@@ -3766,6 +3843,8 @@ void start_stabs ()
/* FIXME: If common_block_name is not already NULL, we should complain(). */
common_block_name = NULL;
+
+ os9k_stabs = 0;
}
/* Call after end_symtab() */