diff options
author | Jim Kingdon <jkingdon@engr.sgi.com> | 1994-03-02 03:01:34 +0000 |
---|---|---|
committer | Jim Kingdon <jkingdon@engr.sgi.com> | 1994-03-02 03:01:34 +0000 |
commit | 25200748a2ad772bb72958902dd18b314ec4e6c9 (patch) | |
tree | 01a1e4e75536ec6fc99cca358f17d3224a87f49c /gdb/stabsread.c | |
parent | 6e2194f0772c505e0ee872611664188c8513a0b1 (diff) | |
download | gdb-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.c | 113 |
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() */ |