[rfc][26/37] Eliminate builtin_type_ macros: Use per-frame architecture

uweigand
2008-08-31T17:52:33Z

[-- Attachment #1: diff-type-frame --]
[-- Type: text/plain, Size: 6154 bytes --]

Hello,

a couple of places used builtin_type_ macros where we should be
determining the types from the frame architecture.

Bye,
Ulrich

ChangeLog:

* stack.c (return_command): Use frame architecture to determine
default integer return type.

* f-valprint.c (f77_get_dynamic_lowerbound): Use frame architecture
to determine pointer types.
(f77_get_dynamic_upperbound): Likewise.

* objc-lang.c (OBJC_FETCH_POINTER_ARGUMENT): Remove.
(resolve_msgsend): Use architecture of current frame to determine
pointer types. Inline OBJC_FETCH_POINTER_ARGUMENT.
(resolve_msgsend_stret, resolve_msgsend_super,
resolve_msgsend_super_stret): Likewise.

Index: gdb-head/gdb/f-valprint.c
===================================================================
--- gdb-head.orig/gdb/f-valprint.c
+++ gdb-head/gdb/f-valprint.c
@@ -99,10 +99,11 @@ f77_get_dynamic_lowerbound (struct type
current_frame_addr = get_frame_base (frame);
if (current_frame_addr > 0)
{
+ struct gdbarch *arch = get_frame_arch (frame);
ptr_to_lower_bound =
read_memory_typed_address (current_frame_addr +
TYPE_ARRAY_LOWER_BOUND_VALUE (type),
- builtin_type_void_data_ptr);
+ builtin_type (arch)->builtin_data_ptr);
*lower_bound = read_memory_integer (ptr_to_lower_bound, 4);
}
else
@@ -165,10 +166,11 @@ f77_get_dynamic_upperbound (struct type
current_frame_addr = get_frame_base (frame);
if (current_frame_addr > 0)
{
+ struct gdbarch *arch = get_frame_arch (frame);
ptr_to_upper_bound =
read_memory_typed_address (current_frame_addr +
TYPE_ARRAY_UPPER_BOUND_VALUE (type),
- builtin_type_void_data_ptr);
+ builtin_type (arch)->builtin_data_ptr);
*upper_bound = read_memory_integer (ptr_to_upper_bound, 4);
}
else
Index: gdb-head/gdb/objc-lang.c
===================================================================
--- gdb-head.orig/gdb/objc-lang.c
+++ gdb-head/gdb/objc-lang.c
@@ -1679,19 +1679,19 @@ find_implementation (CORE_ADDR object, C
return find_implementation_from_class (ostr.isa, sel);
}

-#define OBJC_FETCH_POINTER_ARGUMENT(argi) \
- gdbarch_fetch_pointer_argument (current_gdbarch, get_current_frame (), \
- argi, builtin_type_void_func_ptr)
-
static int
resolve_msgsend (CORE_ADDR pc, CORE_ADDR *new_pc)
{
+ struct frame_info *frame = get_current_frame ();
+ struct gdbarch *gdbarch = get_frame_arch (frame);
+ struct type *ptr_type = builtin_type (gdbarch)->builtin_func_ptr;
+
CORE_ADDR object;
CORE_ADDR sel;
CORE_ADDR res;

- object = OBJC_FETCH_POINTER_ARGUMENT (0);
- sel = OBJC_FETCH_POINTER_ARGUMENT (1);
+ object = gdbarch_fetch_pointer_argument (gdbarch, frame, 0, ptr_type);
+ sel = gdbarch_fetch_pointer_argument (gdbarch, frame, 1, ptr_type);

res = find_implementation (object, sel);
if (new_pc != 0)
@@ -1704,12 +1704,16 @@ resolve_msgsend (CORE_ADDR pc, CORE_ADDR
static int
resolve_msgsend_stret (CORE_ADDR pc, CORE_ADDR *new_pc)
{
+ struct frame_info *frame = get_current_frame ();
+ struct gdbarch *gdbarch = get_frame_arch (frame);
+ struct type *ptr_type = builtin_type (gdbarch)->builtin_func_ptr;
+
CORE_ADDR object;
CORE_ADDR sel;
CORE_ADDR res;

- object = OBJC_FETCH_POINTER_ARGUMENT (1);
- sel = OBJC_FETCH_POINTER_ARGUMENT (2);
+ object = gdbarch_fetch_pointer_argument (gdbarch, frame, 1, ptr_type);
+ sel = gdbarch_fetch_pointer_argument (gdbarch, frame, 2, ptr_type);

res = find_implementation (object, sel);
if (new_pc != 0)
@@ -1722,14 +1726,18 @@ resolve_msgsend_stret (CORE_ADDR pc, COR
static int
resolve_msgsend_super (CORE_ADDR pc, CORE_ADDR *new_pc)
{
+ struct frame_info *frame = get_current_frame ();
+ struct gdbarch *gdbarch = get_frame_arch (frame);
+ struct type *ptr_type = builtin_type (gdbarch)->builtin_func_ptr;
+
struct objc_super sstr;

CORE_ADDR super;
CORE_ADDR sel;
CORE_ADDR res;

- super = OBJC_FETCH_POINTER_ARGUMENT (0);
- sel = OBJC_FETCH_POINTER_ARGUMENT (1);
+ super = gdbarch_fetch_pointer_argument (gdbarch, frame, 0, ptr_type);
+ sel = gdbarch_fetch_pointer_argument (gdbarch, frame, 1, ptr_type);

read_objc_super (super, &sstr);
if (sstr.class == 0)
@@ -1746,14 +1754,18 @@ resolve_msgsend_super (CORE_ADDR pc, COR
static int
resolve_msgsend_super_stret (CORE_ADDR pc, CORE_ADDR *new_pc)
{
+ struct frame_info *frame = get_current_frame ();
+ struct gdbarch *gdbarch = get_frame_arch (frame);
+ struct type *ptr_type = builtin_type (gdbarch)->builtin_func_ptr;
+
struct objc_super sstr;

CORE_ADDR super;
CORE_ADDR sel;
CORE_ADDR res;

- super = OBJC_FETCH_POINTER_ARGUMENT (1);
- sel = OBJC_FETCH_POINTER_ARGUMENT (2);
+ super = gdbarch_fetch_pointer_argument (gdbarch, frame, 1, ptr_type);
+ sel = gdbarch_fetch_pointer_argument (gdbarch, frame, 2, ptr_type);

read_objc_super (super, &sstr);
if (sstr.class == 0)
Index: gdb-head/gdb/stack.c
===================================================================
--- gdb-head.orig/gdb/stack.c
+++ gdb-head/gdb/stack.c
@@ -1780,11 +1780,13 @@ down_command (char *count_exp, int from_
void
return_command (char *retval_exp, int from_tty)
{
+ struct frame_info *thisframe;
struct symbol *thisfun;
struct value *return_value = NULL;
const char *query_prefix = "";

- thisfun = get_frame_function (get_selected_frame ("No selected frame."));
+ thisframe = get_selected_frame ("No selected frame.");
+ thisfun = get_frame_function (thisframe);

/* Compute the return value. If the computation triggers an error,
let it bail. If the return type can't be handled, set
@@ -1803,7 +1805,7 @@ return_command (char *retval_exp, int fr
if (thisfun != NULL)
return_type = TYPE_TARGET_TYPE (SYMBOL_TYPE (thisfun));
if (return_type == NULL)
- return_type = builtin_type_int;
+ return_type = builtin_type (get_frame_arch (thisframe))->builtin_int;
CHECK_TYPEDEF (return_type);
return_value = value_cast (return_type, return_value);