From 19406903ab6849e34361a3a0c2aabbf46cd029fc Mon Sep 17 00:00:00 2001 From: Peter Schauer Date: Sun, 13 Oct 1996 18:40:26 +0000 Subject: [PATCH] * stabsread.c (define_symbol): If REG_STRUCT_HAS_ADDR is non-zero, follow typedefs before checking TYPE_CODE for structures and unions. --- gdb/stabsread.c | 32 ++++++++++++++++++-------------- 1 file changed, 18 insertions(+), 14 deletions(-) diff --git a/gdb/stabsread.c b/gdb/stabsread.c index adc0a36..be312af 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; -- 2.7.4