2004-02-17 Ulrich Weigand <Ulrich.Weigand@de.ibm.com>
Committed by Jim Blandy <jimb@redhat.com>. * eval.c (evaluate_subexp_standard, case OP_OBJC_MSGCALL): Use CORE_ADDR as type for selectors. Correct types for GNU run time message lookup function to use double indirection. * objc-lang.c (lookup_child_selector): Use CORE_ADDR as return type. * objc-lang.h (lookup_child_selector): Adapt prototype.
This commit is contained in:
parent
62f4b920f7
commit
c253954e00
@ -2,6 +2,12 @@
|
||||
|
||||
Committed by Jim Blandy <jimb@redhat.com>.
|
||||
|
||||
* eval.c (evaluate_subexp_standard, case OP_OBJC_MSGCALL): Use
|
||||
CORE_ADDR as type for selectors. Correct types for GNU run time
|
||||
message lookup function to use double indirection.
|
||||
* objc-lang.c (lookup_child_selector): Use CORE_ADDR as return type.
|
||||
* objc-lang.h (lookup_child_selector): Adapt prototype.
|
||||
|
||||
* s390-nat.c (SUBOFF): New macro.
|
||||
(supply_gregset, fill_gregset): Use it to handle debugging
|
||||
of 32-bit exectuables running under a 64-bit kernel.
|
||||
|
26
gdb/eval.c
26
gdb/eval.c
@ -697,10 +697,10 @@ evaluate_subexp_standard (struct type *expect_type,
|
||||
case OP_OBJC_MSGCALL:
|
||||
{ /* Objective C message (method) call. */
|
||||
|
||||
static unsigned long responds_selector = 0;
|
||||
static unsigned long method_selector = 0;
|
||||
static CORE_ADDR responds_selector = 0;
|
||||
static CORE_ADDR method_selector = 0;
|
||||
|
||||
unsigned long selector = 0;
|
||||
CORE_ADDR selector = 0;
|
||||
|
||||
int using_gcc = 0;
|
||||
int struct_return = 0;
|
||||
@ -750,8 +750,19 @@ evaluate_subexp_standard (struct type *expect_type,
|
||||
only). */
|
||||
if (gnu_runtime)
|
||||
{
|
||||
struct type *type;
|
||||
type = lookup_pointer_type (builtin_type_void);
|
||||
type = lookup_function_type (type);
|
||||
type = lookup_pointer_type (type);
|
||||
type = lookup_function_type (type);
|
||||
type = lookup_pointer_type (type);
|
||||
|
||||
msg_send = find_function_in_inferior ("objc_msg_lookup");
|
||||
msg_send_stret = find_function_in_inferior ("objc_msg_lookup");
|
||||
|
||||
msg_send = value_from_pointer (type, value_as_address (msg_send));
|
||||
msg_send_stret = value_from_pointer (type,
|
||||
value_as_address (msg_send_stret));
|
||||
}
|
||||
else
|
||||
{
|
||||
@ -936,14 +947,13 @@ evaluate_subexp_standard (struct type *expect_type,
|
||||
|
||||
if (gnu_runtime && (method != NULL))
|
||||
{
|
||||
ret = call_function_by_hand (argvec[0], nargs + 2, argvec + 1);
|
||||
/* Function objc_msg_lookup returns a pointer. */
|
||||
argvec[0] = ret;
|
||||
ret = call_function_by_hand (argvec[0], nargs + 2, argvec + 1);
|
||||
VALUE_TYPE (argvec[0]) = lookup_function_type
|
||||
(lookup_pointer_type (VALUE_TYPE (argvec[0])));
|
||||
argvec[0] = call_function_by_hand (argvec[0], nargs + 2, argvec + 1);
|
||||
}
|
||||
else
|
||||
ret = call_function_by_hand (argvec[0], nargs + 2, argvec + 1);
|
||||
|
||||
ret = call_function_by_hand (argvec[0], nargs + 2, argvec + 1);
|
||||
return ret;
|
||||
}
|
||||
break;
|
||||
|
@ -133,7 +133,7 @@ lookup_objc_class (char *classname)
|
||||
1, &classval));
|
||||
}
|
||||
|
||||
int
|
||||
CORE_ADDR
|
||||
lookup_child_selector (char *selname)
|
||||
{
|
||||
struct value * function, *selstring;
|
||||
@ -754,7 +754,7 @@ end_msglist(void)
|
||||
int val = msglist_len;
|
||||
struct selname *sel = selname_chain;
|
||||
char *p = msglist_sel;
|
||||
int selid;
|
||||
CORE_ADDR selid;
|
||||
|
||||
selname_chain = sel->next;
|
||||
msglist_len = sel->msglist_len;
|
||||
|
@ -39,7 +39,7 @@ extern int c_value_print (struct value *, struct ui_file *,
|
||||
int, enum val_prettyprint);
|
||||
|
||||
extern CORE_ADDR lookup_objc_class (char *classname);
|
||||
extern int lookup_child_selector (char *methodname);
|
||||
extern CORE_ADDR lookup_child_selector (char *methodname);
|
||||
|
||||
extern char *objc_demangle (const char *mangled, int options);
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user