summaryrefslogtreecommitdiff
path: root/gdb/objc-lang.c
diff options
context:
space:
mode:
authorAdam Fedor <fedor@gnu.org>2003-06-08 02:31:24 +0000
committerAdam Fedor <fedor@gnu.org>2003-06-08 02:31:24 +0000
commit59dcecdb7f83c2f80463c4833f0c4b176a8884f8 (patch)
treef662237f29fbfa15e3815e99d1b891ca998655ac /gdb/objc-lang.c
parent57d672598f2f77c7256a76af206795318477f863 (diff)
downloadgdb-59dcecdb7f83c2f80463c4833f0c4b176a8884f8.tar.gz
* gdb/objc-lang.c (FETCH_ARGUMENT): Remove macro.
(OBJC_FETCH_POINTER_ARGUMENT): Shorthand macro for using FETCH_POINTER_ARGUMENT with Objective-C method arguments. (find_implementation, resolve_msgsend, resolve_msgsend_stret, resolve_msgsend_super, resolve_msgsend_super_stret): Use it.
Diffstat (limited to 'gdb/objc-lang.c')
-rw-r--r--gdb/objc-lang.c54
1 files changed, 11 insertions, 43 deletions
diff --git a/gdb/objc-lang.c b/gdb/objc-lang.c
index 25d40ab9289..732da8f73be 100644
--- a/gdb/objc-lang.c
+++ b/gdb/objc-lang.c
@@ -1722,41 +1722,6 @@ _initialize_objc_language (void)
add_com_alias ("po", "print-object", class_vars, 1);
}
-#if 1
-/* Disable these functions until we put them in the gdbarch vector. */
-static unsigned long FETCH_ARGUMENT (int i)
-{
- internal_error (__FILE__, __LINE__, "FETCH_ARGUMENT not implemented");
- return 0;
-}
-#else
-#if defined (__powerpc__) || defined (__ppc__)
-static unsigned long FETCH_ARGUMENT (int i)
-{
- return read_register (3 + i);
-}
-#elif defined (__i386__)
-static unsigned long FETCH_ARGUMENT (int i)
-{
- CORE_ADDR stack = read_register (SP_REGNUM);
- return read_memory_unsigned_integer (stack + (4 * (i + 1)), 4);
-}
-#elif defined (__sparc__)
-static unsigned long FETCH_ARGUMENT (int i)
-{
- return read_register (O0_REGNUM + i);
-}
-#elif defined (__hppa__) || defined (__hppa)
-static unsigned long FETCH_ARGUMENT (int i)
-{
- return read_register (R0_REGNUM + 26 - i);
-}
-#else
-#error unknown architecture
-#endif
-
-#endif
-
static void
read_objc_method (CORE_ADDR addr, struct objc_method *method)
{
@@ -1871,6 +1836,9 @@ find_implementation (CORE_ADDR object, CORE_ADDR sel)
return find_implementation_from_class (ostr.isa, sel);
}
+#define OBJC_FETCH_POINTER_ARGUMENT(argi) \
+ FETCH_POINTER_ARGUMENT (get_current_frame (), argi, builtin_type_void_func_ptr)
+
static int
resolve_msgsend (CORE_ADDR pc, CORE_ADDR *new_pc)
{
@@ -1878,8 +1846,8 @@ resolve_msgsend (CORE_ADDR pc, CORE_ADDR *new_pc)
CORE_ADDR sel;
CORE_ADDR res;
- object = FETCH_ARGUMENT (0);
- sel = FETCH_ARGUMENT (1);
+ object = OBJC_FETCH_POINTER_ARGUMENT (0);
+ sel = OBJC_FETCH_POINTER_ARGUMENT (1);
res = find_implementation (object, sel);
if (new_pc != 0)
@@ -1896,8 +1864,8 @@ resolve_msgsend_stret (CORE_ADDR pc, CORE_ADDR *new_pc)
CORE_ADDR sel;
CORE_ADDR res;
- object = FETCH_ARGUMENT (1);
- sel = FETCH_ARGUMENT (2);
+ object = OBJC_FETCH_POINTER_ARGUMENT (1);
+ sel = OBJC_FETCH_POINTER_ARGUMENT (2);
res = find_implementation (object, sel);
if (new_pc != 0)
@@ -1916,8 +1884,8 @@ resolve_msgsend_super (CORE_ADDR pc, CORE_ADDR *new_pc)
CORE_ADDR sel;
CORE_ADDR res;
- super = FETCH_ARGUMENT (0);
- sel = FETCH_ARGUMENT (1);
+ super = OBJC_FETCH_POINTER_ARGUMENT (0);
+ sel = OBJC_FETCH_POINTER_ARGUMENT (1);
read_objc_super (super, &sstr);
if (sstr.class == 0)
@@ -1940,8 +1908,8 @@ resolve_msgsend_super_stret (CORE_ADDR pc, CORE_ADDR *new_pc)
CORE_ADDR sel;
CORE_ADDR res;
- super = FETCH_ARGUMENT (1);
- sel = FETCH_ARGUMENT (2);
+ super = OBJC_FETCH_POINTER_ARGUMENT (1);
+ sel = OBJC_FETCH_POINTER_ARGUMENT (2);
read_objc_super (super, &sstr);
if (sstr.class == 0)