From 35247ccd31f45cb344e047bcbd2842988836bfe2 Mon Sep 17 00:00:00 2001 From: Stu Grossman Date: Mon, 17 May 1993 22:48:07 +0000 Subject: [PATCH] * findvar.c (write_register): Add sanity check for register size. (read_register): Fixup sanity check for register size to be consistent with write_register(). --- gdb/ChangeLog | 12 ++++++++++++ gdb/findvar.c | 31 ++++++++++++++----------------- 2 files changed, 26 insertions(+), 17 deletions(-) diff --git a/gdb/ChangeLog b/gdb/ChangeLog index 4795ebbc42c..4b69cc33d2d 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,3 +1,14 @@ +Mon May 17 15:43:03 1993 Stu Grossman (grossman@cygnus.com) + + * findvar.c (write_register): Add sanity check for register size. + (read_register): Fixup sanity check for register size to be + consistent with write_register(). + +Mon May 17 07:36:20 1993 Ian Lance Taylor (ian@cygnus.com) + + * sparclite/Makefile.in: Add dummy info, install and install-info + targets. + Thu May 13 07:30:22 1993 Ian Lance Taylor (ian@cygnus.com) * remote-nindy.c: Removed declaration of coffstrip. @@ -88,6 +99,7 @@ Thu May 6 20:55:35 1993 Fred Fish (fnf@cygnus.com) Thu May 6 15:47:45 1993 Stu Grossman (grossman@cygnus.com) * More patches from Jeffrey Law (law@cs.utah.edu). + * gdb/config/nm-hppab.h (PTRACE_ARG3_TYPE): Define as caddr_t. * gdb/config/pa/tm-hppah.h (millicode_start, millicode_end): Delete unnecessary declarations. diff --git a/gdb/findvar.c b/gdb/findvar.c index 33f5ad61457..e0d5e533a89 100644 --- a/gdb/findvar.c +++ b/gdb/findvar.c @@ -322,8 +322,8 @@ read_register (regno) SWAP_TARGET_AND_HOST (&lval, sizeof (lval)); return lval; default: - error ("Can't handle register size of %d for register %d\n", - REGISTER_RAW_SIZE(regno), regno); + error ("GDB Internal Error in read_register() for register %d, size %d", + regno, RAW_REGISTER_SIZE(regno)); } } @@ -367,6 +367,9 @@ write_register (regno, val) SWAP_TARGET_AND_HOST (&lval, sizeof (lval)); memcpy (®isters[REGISTER_BYTE (regno)], &lval, sizeof (lval)); break; + default: + error ("GDB Internal Error in write_register() for register %d, size %d", + regno, RAW_REGISTER_SIZE(regno)); } target_store_registers (regno); @@ -507,6 +510,7 @@ read_var_value (var, frame) case LOC_REGISTER: case LOC_REGPARM: + case LOC_REGPARM_ADDR: { struct block *b; @@ -516,20 +520,7 @@ read_var_value (var, frame) v = value_from_register (type, SYMBOL_VALUE (var), frame); - /* Nonzero if a struct which is located in a register or a LOC_ARG - really contains - the address of the struct, not the struct itself. GCC_P is nonzero - if the function was compiled with GCC. */ - /* A cleaner way to do this would be to add LOC_REGISTER_ADDR - (register contains the address of the value) and LOC_REGPARM_ADDR, - and have the symbol-reading code set them -kingdon. */ -#if !defined (REG_STRUCT_HAS_ADDR) -#define REG_STRUCT_HAS_ADDR(gcc_p) 0 -#endif - - if (REG_STRUCT_HAS_ADDR (BLOCK_GCC_COMPILED (b)) - && ( (TYPE_CODE (type) == TYPE_CODE_STRUCT) - || (TYPE_CODE (type) == TYPE_CODE_UNION))) + if (SYMBOL_CLASS (var) == LOC_REGPARM_ADDR) { addr = *(CORE_ADDR *)VALUE_CONTENTS (v); VALUE_LVAL (v) = lval_memory; @@ -539,6 +530,11 @@ read_var_value (var, frame) } break; + case LOC_OPTIMIZED_OUT: + VALUE_LVAL (v) = not_lval; + VALUE_OPTIMIZED_OUT (v) = 1; + return v; + default: error ("Cannot look up value of a botched symbol."); break; @@ -601,7 +597,8 @@ value_from_register (type, regnum, frame) numbers for the pointer & non-pointer form of the register. But, it doesn't, so we're stuck with this. */ - if (TYPE_CODE (type) == TYPE_CODE_PTR) + if (TYPE_CODE (type) == TYPE_CODE_PTR + && len > 2) { int page_regnum; -- 2.30.2