/* Find a variable's value in memory, for GDB, the GNU debugger.
- Copyright 1986, 87, 89, 91, 94, 95, 96, 1998
+ Copyright 1986, 1987, 1988, 1989, 1990, 1991, 1992, 1993, 1994, 1995,
+ 1996, 1997, 1998, 1999, 2000, 2001
Free Software Foundation, Inc.
This file is part of GDB.
#include "gdb_string.h"
#include "floatformat.h"
#include "symfile.h" /* for overlay functions */
+#include "regcache.h"
/* This is used to indicate that we don't know the format of the floating point
number. Typically, this is useful for native ports, where the actual format
{
if (TYPE_CODE (type) != TYPE_CODE_PTR
&& TYPE_CODE (type) != TYPE_CODE_REF)
- internal_error ("findvar.c (extract_typed_address): "
+ internal_error (__FILE__, __LINE__,
+ "extract_typed_address: "
"type is not a pointer or reference");
return POINTER_TO_ADDRESS (type, buf);
{
if (TYPE_CODE (type) != TYPE_CODE_PTR
&& TYPE_CODE (type) != TYPE_CODE_REF)
- internal_error ("findvar.c (store_typed_address): "
+ internal_error (__FILE__, __LINE__,
+ "store_typed_address: "
"type is not a pointer or reference");
ADDRESS_TO_POINTER (type, buf, addr);
Caller will check return value or die! */
value_ptr
-value_of_register (regnum)
- int regnum;
+value_of_register (int regnum)
{
CORE_ADDR addr;
int optim;
register value_ptr reg_val;
- char raw_buffer[MAX_REGISTER_RAW_SIZE];
+ char *raw_buffer = (char*) alloca (MAX_REGISTER_RAW_SIZE);
enum lval_type lval;
get_saved_register (raw_buffer, &optim, &addr,
memcpy (VALUE_CONTENTS_RAW (reg_val), raw_buffer,
REGISTER_RAW_SIZE (regnum));
else
- internal_error ("Register \"%s\" (%d) has conflicting raw (%d) and virtual (%d) size",
+ internal_error (__FILE__, __LINE__,
+ "Register \"%s\" (%d) has conflicting raw (%d) and virtual (%d) size",
REGISTER_NAME (regnum),
regnum,
REGISTER_RAW_SIZE (regnum),
up caring what frame it is being evaluated relative to? SYM must
be non-NULL. */
int
-symbol_read_needs_frame (sym)
- struct symbol *sym;
+symbol_read_needs_frame (struct symbol *sym)
{
switch (SYMBOL_CLASS (sym))
{
If FRAME is NULL, use the selected_frame. */
value_ptr
-read_var_value (var, frame)
- register struct symbol *var;
- struct frame_info *frame;
+read_var_value (register struct symbol *var, struct frame_info *frame)
{
register value_ptr v;
struct type *type = SYMBOL_TYPE (var);
case LOC_BASEREG:
case LOC_BASEREG_ARG:
{
- char buf[MAX_REGISTER_RAW_SIZE];
+ char *buf = (char*) alloca (MAX_REGISTER_RAW_SIZE);
get_saved_register (buf, NULL, NULL, frame, SYMBOL_BASEREG (var),
NULL);
addr = extract_address (buf, REGISTER_RAW_SIZE (SYMBOL_BASEREG (var)));
case LOC_THREAD_LOCAL_STATIC:
{
- char buf[MAX_REGISTER_RAW_SIZE];
+ char *buf = (char*) alloca (MAX_REGISTER_RAW_SIZE);
get_saved_register (buf, NULL, NULL, frame, SYMBOL_BASEREG (var),
NULL);
Caller will check return value or die! */
value_ptr
-value_from_register (type, regnum, frame)
- struct type *type;
- int regnum;
- struct frame_info *frame;
+value_from_register (struct type *type, int regnum, struct frame_info *frame)
{
- char raw_buffer[MAX_REGISTER_RAW_SIZE];
+ char *raw_buffer = (char*) alloca (MAX_REGISTER_RAW_SIZE);
CORE_ADDR addr;
int optim;
value_ptr v = allocate_value (type);
VALUE_ADDRESS (v) = first_addr;
}
else
- internal_error ("value_from_register: Value not stored anywhere!");
+ internal_error (__FILE__, __LINE__,
+ "value_from_register: Value not stored anywhere!");
VALUE_OPTIMIZED_OUT (v) = optim;
address. */
value_ptr
-locate_var_value (var, frame)
- register struct symbol *var;
- struct frame_info *frame;
+locate_var_value (register struct symbol *var, struct frame_info *frame)
{
CORE_ADDR addr = 0;
struct type *type = SYMBOL_TYPE (var);