diff options
author | Jim Kingdon <jkingdon@engr.sgi.com> | 1994-03-10 18:21:02 +0000 |
---|---|---|
committer | Jim Kingdon <jkingdon@engr.sgi.com> | 1994-03-10 18:21:02 +0000 |
commit | f26137106836aa7d2d733f775c4f1cd9e07b6fc5 (patch) | |
tree | 987831bdd433d60861bf60f58d388e82d4b0347e | |
parent | 27677e75f4c55f847f5223b360aa93c2be6ef165 (diff) | |
download | gdb-f26137106836aa7d2d733f775c4f1cd9e07b6fc5.zip gdb-f26137106836aa7d2d733f775c4f1cd9e07b6fc5.tar.gz gdb-f26137106836aa7d2d733f775c4f1cd9e07b6fc5.tar.bz2 |
* stabsread.c (define_symbol): If REG_STRUCT_HAS_ADDR, also
convert a LOC_ARG to a LOC_REF_ARG. Update code which combines
'p' and 'r' symbol descriptors into a single symbol to look for a
LOC_REF_ARG.
* README, config/sparc/tm-sparc.h: Update comments.
-rw-r--r-- | gdb/config/sparc/tm-sparc.h | 4 | ||||
-rw-r--r-- | gdb/stabsread.c | 10 |
2 files changed, 10 insertions, 4 deletions
diff --git a/gdb/config/sparc/tm-sparc.h b/gdb/config/sparc/tm-sparc.h index 69899b8..5fe91a8 100644 --- a/gdb/config/sparc/tm-sparc.h +++ b/gdb/config/sparc/tm-sparc.h @@ -28,10 +28,8 @@ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */ not the structure itself. It (under SunOS4) creates two symbols, which we need to combine to a LOC_REGPARM. Gcc version two (as of 1.92) behaves like sun cc. REG_STRUCT_HAS_ADDR is smart enough to - distinguish between Sun cc, gcc version 1 and gcc version 2. + distinguish between Sun cc, gcc version 1 and gcc version 2. */ - This still doesn't work if the argument is not one passed in a - register (i.e. it's the 7th or later argument). */ #define REG_STRUCT_HAS_ADDR(gcc_p) (gcc_p != 1) /* Sun /bin/cc gets this right as of SunOS 4.1.x. We need to define diff --git a/gdb/stabsread.c b/gdb/stabsread.c index 4a6ccda..ec88be1 100644 --- a/gdb/stabsread.c +++ b/gdb/stabsread.c @@ -989,7 +989,7 @@ define_symbol (valu, string, desc, type, objfile) { struct symbol *prev_sym; prev_sym = local_symbols->symbol[local_symbols->nsyms - 1]; - if (SYMBOL_CLASS (prev_sym) == LOC_ARG + if (SYMBOL_CLASS (prev_sym) == LOC_REF_ARG && STREQ (SYMBOL_NAME (prev_sym), SYMBOL_NAME(sym))) { SYMBOL_CLASS (prev_sym) = LOC_REGPARM; @@ -1181,6 +1181,14 @@ define_symbol (valu, string, desc, type, objfile) || (TYPE_CODE (SYMBOL_TYPE (sym)) == TYPE_CODE_UNION))) SYMBOL_CLASS (sym) = LOC_REGPARM_ADDR; + /* Likewise for converting LOC_ARG to LOC_REF_ARG (for the 7th and + subsequent arguments on the sparc, for example). */ + if (SYMBOL_CLASS (sym) == LOC_ARG + && REG_STRUCT_HAS_ADDR (processing_gcc_compilation) + && ((TYPE_CODE (SYMBOL_TYPE (sym)) == TYPE_CODE_STRUCT) + || (TYPE_CODE (SYMBOL_TYPE (sym)) == TYPE_CODE_UNION))) + SYMBOL_CLASS (sym) = LOC_REF_ARG; + return sym; } |