From 5ed92fa89a78886c28ecf48a5debdd6a1513bdbf Mon Sep 17 00:00:00 2001 From: Ulrich Weigand Date: Thu, 11 Sep 2008 14:23:51 +0000 Subject: [PATCH] * 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. --- gdb/ChangeLog | 15 +++++++++++++++ gdb/f-valprint.c | 6 ++++-- gdb/objc-lang.c | 36 ++++++++++++++++++++++++------------ gdb/stack.c | 6 ++++-- 4 files changed, 47 insertions(+), 16 deletions(-) diff --git a/gdb/ChangeLog b/gdb/ChangeLog index 23ebcebdcb0..d39d45b9254 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,3 +1,18 @@ +2008-09-11 Ulrich Weigand + + * 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. + 2008-09-11 Ulrich Weigand * alpha-tdep.c (alpha_register_type): Use builtin_type (gdbarch) diff --git a/gdb/f-valprint.c b/gdb/f-valprint.c index 69c3395c482..9dbaf184c34 100644 --- a/gdb/f-valprint.c +++ b/gdb/f-valprint.c @@ -99,10 +99,11 @@ f77_get_dynamic_lowerbound (struct type *type, int *lower_bound) 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 *type, int *upper_bound) 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 diff --git a/gdb/objc-lang.c b/gdb/objc-lang.c index 7dea97ef96e..0ff2ebc8cba 100644 --- a/gdb/objc-lang.c +++ b/gdb/objc-lang.c @@ -1679,19 +1679,19 @@ find_implementation (CORE_ADDR object, CORE_ADDR sel) 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 *new_pc) 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, CORE_ADDR *new_pc) 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, CORE_ADDR *new_pc) 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) diff --git a/gdb/stack.c b/gdb/stack.c index 61c799da526..1725dc6b174 100644 --- a/gdb/stack.c +++ b/gdb/stack.c @@ -1780,11 +1780,13 @@ down_command (char *count_exp, int from_tty) 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 from_tty) 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); -- 2.30.2