From: Peter Schauer Date: Sun, 13 Oct 1996 18:40:26 +0000 (+0000) Subject: * stabsread.c (define_symbol): If REG_STRUCT_HAS_ADDR is non-zero, X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=19406903ab6849e34361a3a0c2aabbf46cd029fc;p=binutils-gdb.git * stabsread.c (define_symbol): If REG_STRUCT_HAS_ADDR is non-zero, follow typedefs before checking TYPE_CODE for structures and unions. --- diff --git a/gdb/stabsread.c b/gdb/stabsread.c index adc0a3640b1..be312af7195 100644 --- a/gdb/stabsread.c +++ b/gdb/stabsread.c @@ -1777,21 +1777,25 @@ define_symbol (valu, string, desc, type, objfile) /* When passing structures to a function, some systems sometimes pass the address in a register, not the structure itself. */ - if (REG_STRUCT_HAS_ADDR (processing_gcc_compilation, - SYMBOL_TYPE (sym)) - && ((TYPE_CODE (SYMBOL_TYPE (sym)) == TYPE_CODE_STRUCT) - || (TYPE_CODE (SYMBOL_TYPE (sym)) == TYPE_CODE_UNION) - || (TYPE_CODE (SYMBOL_TYPE (sym)) == TYPE_CODE_BITSTRING) - || (TYPE_CODE (SYMBOL_TYPE (sym)) == TYPE_CODE_SET))) + if (REG_STRUCT_HAS_ADDR (processing_gcc_compilation, SYMBOL_TYPE (sym)) + && (SYMBOL_CLASS (sym) == LOC_REGPARM || SYMBOL_CLASS (sym) == LOC_ARG)) { - /* If REG_STRUCT_HAS_ADDR yields non-zero we have to - convert LOC_REGPARM to LOC_REGPARM_ADDR for structures and unions. */ - if (SYMBOL_CLASS (sym) == LOC_REGPARM) - 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). */ - else if (SYMBOL_CLASS (sym) == LOC_ARG) - SYMBOL_CLASS (sym) = LOC_REF_ARG; + struct type *symbol_type = check_typedef (SYMBOL_TYPE (sym)); + + if ((TYPE_CODE (symbol_type) == TYPE_CODE_STRUCT) + || (TYPE_CODE (symbol_type) == TYPE_CODE_UNION) + || (TYPE_CODE (symbol_type) == TYPE_CODE_BITSTRING) + || (TYPE_CODE (symbol_type) == TYPE_CODE_SET)) + { + /* If REG_STRUCT_HAS_ADDR yields non-zero we have to convert + LOC_REGPARM to LOC_REGPARM_ADDR for structures and unions. */ + if (SYMBOL_CLASS (sym) == LOC_REGPARM) + 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). */ + else if (SYMBOL_CLASS (sym) == LOC_ARG) + SYMBOL_CLASS (sym) = LOC_REF_ARG; + } } return sym;