2011-01-08 Michael Snyder <msnyder@vmware.com>
* h8300-tdep.c: Comment cleanup, mostly periods and spaces. * hppa-hpux-tdep.c: Ditto. * hppa-linux-nat.c: Ditto. * hppa-linux-tdep.c: Ditto. * hppanbsd-tdep.c: Ditto. * hppa-tdep.c: Ditto. * hppa-tdep.h: Ditto. * hpux-thread.c: Ditto. * i386-cygwin-tdep.c: Ditto. * i386-darwin-nat.c: Ditto. * i386gnu-nat.c: Ditto. * i386-linux-nat.c: Ditto. * i386-linux-tdep.c: Ditto. * i386-nat.c: Ditto. * i386-nat.h: Ditto. * i386nbsd-tdep.c: Ditto. * i386-sol2-nat.c: Ditto. * i386-stub.c: Ditto. * i386-tdep.c: Ditto. * i386-tdep.h: Ditto. * i387-tdep.c: Ditto. * ia64-linux-nat.c: Ditto. * ia64-linux-tdep.c: Ditto. * ia64-tdep.c: Ditto. * infcall.c: Ditto. * infcall.h: Ditto. * infcmd.c: Ditto. * inferior.c: Ditto. * inferior.h: Ditto. * infloop.c: Ditto. * inflow.c: Ditto. * infrun.c: Ditto. * interps.c: Ditto. * interps.h: Ditto. * iq2000-tdep.c: Ditto. * irix5-nat.c: Ditto. * jit.c: Ditto. * jit.h: Ditto. * jv-exp.y: Ditto. * jv-lang.c: Ditto. * jv-lang.h: Ditto. * jv-typeprint.c: Ditto. * jv-valprint.c: Ditto. * language.c: Ditto. * language.h: Ditto. * linespec.c: Ditto. * linux-fork.c: Ditto. * linux-nat.c: Ditto. * linux-thread-db.c: Ditto. * lm32-tdep.c: Ditto.
This commit is contained in:
parent
0cb2acab06
commit
1777feb0fe
51 changed files with 1002 additions and 822 deletions
|
@ -61,11 +61,11 @@ static const struct objfile_data *jv_type_objfile_data_key;
|
|||
|
||||
/* This objfile contains symtabs that have been dynamically created
|
||||
to record dynamically loaded Java classes and dynamically
|
||||
compiled java methods. */
|
||||
compiled java methods. */
|
||||
|
||||
static struct objfile *dynamics_objfile = NULL;
|
||||
|
||||
/* symtab contains classes read from the inferior. */
|
||||
/* symtab contains classes read from the inferior. */
|
||||
|
||||
static struct symtab *class_symtab = NULL;
|
||||
|
||||
|
@ -129,7 +129,7 @@ get_java_class_symtab (struct gdbarch *gdbarch)
|
|||
BLOCKVECTOR_NBLOCKS (bv) = 1;
|
||||
BLOCKVECTOR (class_symtab) = bv;
|
||||
|
||||
/* Allocate dummy STATIC_BLOCK. */
|
||||
/* Allocate dummy STATIC_BLOCK. */
|
||||
bl = allocate_block (&objfile->objfile_obstack);
|
||||
BLOCK_DICT (bl) = dict_create_linear (&objfile->objfile_obstack,
|
||||
NULL);
|
||||
|
@ -190,12 +190,12 @@ java_lookup_class (char *name)
|
|||
sym = lookup_symbol (name, expression_context_block, STRUCT_DOMAIN, NULL);
|
||||
if (sym != NULL)
|
||||
return SYMBOL_TYPE (sym);
|
||||
/* FIXME - should search inferior's symbol table. */
|
||||
/* FIXME - should search inferior's symbol table. */
|
||||
return NULL;
|
||||
}
|
||||
|
||||
/* Return a nul-terminated string (allocated on OBSTACK) for
|
||||
a name given by NAME (which has type Utf8Const*). */
|
||||
a name given by NAME (which has type Utf8Const*). */
|
||||
|
||||
char *
|
||||
get_java_utf8_name (struct obstack *obstack, struct value *name)
|
||||
|
@ -234,13 +234,14 @@ java_class_from_object (struct value *obj_val)
|
|||
static int
|
||||
java_class_is_primitive (struct value *clas)
|
||||
{
|
||||
struct value *vtable = value_struct_elt (&clas, NULL, "vtable", NULL, "struct");
|
||||
struct value *vtable = value_struct_elt (&clas, NULL, "vtable",
|
||||
NULL, "struct");
|
||||
CORE_ADDR i = value_as_address (vtable);
|
||||
|
||||
return (int) (i & 0x7fffffff) == (int) 0x7fffffff;
|
||||
}
|
||||
|
||||
/* Read a GCJ Class object, and generated a gdb (TYPE_CODE_STRUCT) type. */
|
||||
/* Read a GCJ Class object, and generated a gdb (TYPE_CODE_STRUCT) type. */
|
||||
|
||||
struct type *
|
||||
type_from_class (struct gdbarch *gdbarch, struct value *clas)
|
||||
|
@ -273,8 +274,8 @@ type_from_class (struct gdbarch *gdbarch, struct value *clas)
|
|||
return java_primitive_type (gdbarch, value_as_long (sig));
|
||||
}
|
||||
|
||||
/* Get Class name. */
|
||||
/* if clasloader non-null, prepend loader address. FIXME */
|
||||
/* Get Class name. */
|
||||
/* If clasloader non-null, prepend loader address. FIXME */
|
||||
temp = clas;
|
||||
utf8_name = value_struct_elt (&temp, NULL, "name", NULL, "structure");
|
||||
name = get_java_utf8_name (&objfile->objfile_obstack, utf8_name);
|
||||
|
@ -303,9 +304,10 @@ type_from_class (struct gdbarch *gdbarch, struct value *clas)
|
|||
name[namelen] = '\0';
|
||||
is_array = 1;
|
||||
temp = clas;
|
||||
/* Set array element type. */
|
||||
/* Set array element type. */
|
||||
temp = value_struct_elt (&temp, NULL, "methods", NULL, "structure");
|
||||
deprecated_set_value_type (temp, lookup_pointer_type (value_type (clas)));
|
||||
deprecated_set_value_type (temp,
|
||||
lookup_pointer_type (value_type (clas)));
|
||||
TYPE_TARGET_TYPE (type) = type_from_class (gdbarch, temp);
|
||||
}
|
||||
|
||||
|
@ -316,7 +318,7 @@ type_from_class (struct gdbarch *gdbarch, struct value *clas)
|
|||
return java_link_class_type (gdbarch, type, clas);
|
||||
}
|
||||
|
||||
/* Fill in class TYPE with data from the CLAS value. */
|
||||
/* Fill in class TYPE with data from the CLAS value. */
|
||||
|
||||
static struct type *
|
||||
java_link_class_type (struct gdbarch *gdbarch,
|
||||
|
@ -358,13 +360,15 @@ java_link_class_type (struct gdbarch *gdbarch,
|
|||
ninterfaces = 0;
|
||||
#else
|
||||
temp = clas;
|
||||
ninterfaces = value_as_long (value_struct_elt (&temp, NULL, "interface_len", NULL, "structure"));
|
||||
ninterfaces = value_as_long (value_struct_elt (&temp, NULL, "interface_len",
|
||||
NULL, "structure"));
|
||||
#endif
|
||||
TYPE_N_BASECLASSES (type) = (tsuper == NULL ? 0 : 1) + ninterfaces;
|
||||
temp = clas;
|
||||
nfields = value_as_long (value_struct_elt (&temp, NULL, "field_count", NULL, "structure"));
|
||||
nfields = value_as_long (value_struct_elt (&temp, NULL, "field_count",
|
||||
NULL, "structure"));
|
||||
nfields += TYPE_N_BASECLASSES (type);
|
||||
nfields++; /* Add one for dummy "class" field. */
|
||||
nfields++; /* Add one for dummy "class" field. */
|
||||
TYPE_NFIELDS (type) = nfields;
|
||||
TYPE_FIELDS (type) = (struct field *)
|
||||
TYPE_ALLOC (type, sizeof (struct field) * nfields);
|
||||
|
@ -398,17 +402,18 @@ java_link_class_type (struct gdbarch *gdbarch,
|
|||
if (i > 2 && name[i - 1] == ']' && tsuper != NULL)
|
||||
{
|
||||
/* FIXME */
|
||||
TYPE_LENGTH (type) = TYPE_LENGTH (tsuper) + 4; /* size with "length" */
|
||||
TYPE_LENGTH (type) = TYPE_LENGTH (tsuper) + 4; /* size with "length" */
|
||||
}
|
||||
else
|
||||
{
|
||||
temp = clas;
|
||||
temp = value_struct_elt (&temp, NULL, "size_in_bytes", NULL, "structure");
|
||||
temp = value_struct_elt (&temp, NULL, "size_in_bytes",
|
||||
NULL, "structure");
|
||||
TYPE_LENGTH (type) = value_as_long (temp);
|
||||
}
|
||||
|
||||
fields = NULL;
|
||||
nfields--; /* First set up dummy "class" field. */
|
||||
nfields--; /* First set up dummy "class" field. */
|
||||
SET_FIELD_PHYSADDR (TYPE_FIELD (type, nfields), value_address (clas));
|
||||
TYPE_FIELD_NAME (type, nfields) = "class";
|
||||
TYPE_FIELD_TYPE (type, nfields) = value_type (clas);
|
||||
|
@ -426,7 +431,7 @@ java_link_class_type (struct gdbarch *gdbarch,
|
|||
field = value_ind (fields);
|
||||
}
|
||||
else
|
||||
{ /* Re-use field value for next field. */
|
||||
{ /* Re-use field value for next field. */
|
||||
CORE_ADDR addr
|
||||
= value_address (field) + TYPE_LENGTH (value_type (field));
|
||||
|
||||
|
@ -497,11 +502,12 @@ java_link_class_type (struct gdbarch *gdbarch,
|
|||
if (methods == NULL)
|
||||
{
|
||||
temp = clas;
|
||||
methods = value_struct_elt (&temp, NULL, "methods", NULL, "structure");
|
||||
methods = value_struct_elt (&temp, NULL, "methods",
|
||||
NULL, "structure");
|
||||
method = value_ind (methods);
|
||||
}
|
||||
else
|
||||
{ /* Re-use method value for next method. */
|
||||
{ /* Re-use method value for next method. */
|
||||
CORE_ADDR addr
|
||||
= value_address (method) + TYPE_LENGTH (value_type (method));
|
||||
|
||||
|
@ -509,7 +515,7 @@ java_link_class_type (struct gdbarch *gdbarch,
|
|||
set_value_lazy (method, 1);
|
||||
}
|
||||
|
||||
/* Get method name. */
|
||||
/* Get method name. */
|
||||
temp = method;
|
||||
temp = value_struct_elt (&temp, NULL, "name", NULL, "structure");
|
||||
mname = get_java_utf8_name (&objfile->objfile_obstack, temp);
|
||||
|
@ -525,7 +531,7 @@ java_link_class_type (struct gdbarch *gdbarch,
|
|||
for (k = 0, j = TYPE_NFN_FIELDS (type);;)
|
||||
{
|
||||
if (--j < 0)
|
||||
{ /* No match - new method name. */
|
||||
{ /* No match - new method name. */
|
||||
j = TYPE_NFN_FIELDS (type)++;
|
||||
fn_fieldlists[j].name = mname;
|
||||
fn_fieldlists[j].length = 1;
|
||||
|
@ -534,15 +540,15 @@ java_link_class_type (struct gdbarch *gdbarch,
|
|||
break;
|
||||
}
|
||||
if (strcmp (mname, fn_fieldlists[j].name) == 0)
|
||||
{ /* Found an existing method with the same name. */
|
||||
{ /* Found an existing method with the same name. */
|
||||
int l;
|
||||
|
||||
if (mname != unqualified_name)
|
||||
obstack_free (&objfile->objfile_obstack, mname);
|
||||
mname = fn_fieldlists[j].name;
|
||||
fn_fieldlists[j].length++;
|
||||
k = i - k; /* Index of new slot. */
|
||||
/* Shift intervening fn_fields (between k and i) down. */
|
||||
k = i - k; /* Index of new slot. */
|
||||
/* Shift intervening fn_fields (between k and i) down. */
|
||||
for (l = i; l > k; l--)
|
||||
fn_fields[l] = fn_fields[l - 1];
|
||||
for (l = TYPE_NFN_FIELDS (type); --l > j;)
|
||||
|
@ -632,7 +638,8 @@ is_object_type (struct type *type)
|
|||
name = TYPE_TAG_NAME (ttype);
|
||||
if (name != NULL && strcmp (name, "java.lang.Object") == 0)
|
||||
return 1;
|
||||
name = TYPE_NFIELDS (ttype) > 0 ? TYPE_FIELD_NAME (ttype, 0) : (char *) 0;
|
||||
name
|
||||
= TYPE_NFIELDS (ttype) > 0 ? TYPE_FIELD_NAME (ttype, 0) : (char *) 0;
|
||||
if (name != NULL && strcmp (name, "vtable") == 0)
|
||||
{
|
||||
if (java_object_type == NULL)
|
||||
|
@ -673,7 +680,7 @@ java_primitive_type (struct gdbarch *gdbarch, int signature)
|
|||
}
|
||||
|
||||
/* If name[0 .. namelen-1] is the name of a primitive Java type,
|
||||
return that type. Otherwise, return NULL. */
|
||||
return that type. Otherwise, return NULL. */
|
||||
|
||||
struct type *
|
||||
java_primitive_type_from_name (struct gdbarch *gdbarch,
|
||||
|
@ -748,7 +755,7 @@ java_primitive_type_name (int signature)
|
|||
}
|
||||
|
||||
/* Return the length (in bytes) of demangled name of the Java type
|
||||
signature string SIGNATURE. */
|
||||
signature string SIGNATURE. */
|
||||
|
||||
static int
|
||||
java_demangled_signature_length (char *signature)
|
||||
|
@ -756,18 +763,19 @@ java_demangled_signature_length (char *signature)
|
|||
int array = 0;
|
||||
|
||||
for (; *signature == '['; signature++)
|
||||
array += 2; /* Two chars for "[]". */
|
||||
array += 2; /* Two chars for "[]". */
|
||||
switch (signature[0])
|
||||
{
|
||||
case 'L':
|
||||
/* Subtract 2 for 'L' and ';'. */
|
||||
/* Subtract 2 for 'L' and ';'. */
|
||||
return strlen (signature) - 2 + array;
|
||||
default:
|
||||
return strlen (java_primitive_type_name (signature[0])) + array;
|
||||
}
|
||||
}
|
||||
|
||||
/* Demangle the Java type signature SIGNATURE, leaving the result in RESULT. */
|
||||
/* Demangle the Java type signature SIGNATURE, leaving the result in
|
||||
RESULT. */
|
||||
|
||||
static void
|
||||
java_demangled_signature_copy (char *result, char *signature)
|
||||
|
@ -784,7 +792,7 @@ java_demangled_signature_copy (char *result, char *signature)
|
|||
switch (signature[0])
|
||||
{
|
||||
case 'L':
|
||||
/* Subtract 2 for 'L' and ';', but add 1 for final nul. */
|
||||
/* Subtract 2 for 'L' and ';', but add 1 for final nul. */
|
||||
signature++;
|
||||
ptr = result;
|
||||
for (; *signature != ';' && *signature != '\0'; signature++)
|
||||
|
@ -810,7 +818,7 @@ java_demangled_signature_copy (char *result, char *signature)
|
|||
}
|
||||
|
||||
/* Return the demangled name of the Java type signature string SIGNATURE,
|
||||
as a freshly allocated copy. */
|
||||
as a freshly allocated copy. */
|
||||
|
||||
char *
|
||||
java_demangle_type_signature (char *signature)
|
||||
|
@ -824,21 +832,21 @@ java_demangle_type_signature (char *signature)
|
|||
}
|
||||
|
||||
/* Return the type of TYPE followed by DIMS pairs of [ ].
|
||||
If DIMS == 0, TYPE is returned. */
|
||||
If DIMS == 0, TYPE is returned. */
|
||||
|
||||
struct type *
|
||||
java_array_type (struct type *type, int dims)
|
||||
{
|
||||
while (dims-- > 0)
|
||||
{
|
||||
/* FIXME This is bogus! Java arrays are not gdb arrays! */
|
||||
/* FIXME This is bogus! Java arrays are not gdb arrays! */
|
||||
type = lookup_array_range_type (type, 0, 0);
|
||||
}
|
||||
|
||||
return type;
|
||||
}
|
||||
|
||||
/* Create a Java string in the inferior from a (Utf8) literal. */
|
||||
/* Create a Java string in the inferior from a (Utf8) literal. */
|
||||
|
||||
static struct value *
|
||||
java_value_string (char *ptr, int len)
|
||||
|
@ -848,7 +856,7 @@ java_value_string (char *ptr, int len)
|
|||
|
||||
/* Print the character C on STREAM as part of the contents of a literal
|
||||
string whose delimiter is QUOTER. Note that that format for printing
|
||||
characters and strings is language specific. */
|
||||
characters and strings is language specific. */
|
||||
|
||||
static void
|
||||
java_emit_char (int c, struct type *type, struct ui_file *stream, int quoter)
|
||||
|
@ -921,7 +929,7 @@ evaluate_subexp_java (struct type *expect_type, struct expression *exp,
|
|||
goto nosideret;
|
||||
/* If the user attempts to subscript something that is not an
|
||||
array or pointer type (like a plain int variable for example),
|
||||
then report this as an error. */
|
||||
then report this as an error. */
|
||||
|
||||
arg1 = coerce_ref (arg1);
|
||||
type = check_typedef (value_type (arg1));
|
||||
|
@ -942,7 +950,7 @@ evaluate_subexp_java (struct type *expect_type, struct expression *exp,
|
|||
|
||||
struct value *clas = java_class_from_object (arg1);
|
||||
struct value *temp = clas;
|
||||
/* Get CLASS_ELEMENT_TYPE of the array type. */
|
||||
/* Get CLASS_ELEMENT_TYPE of the array type. */
|
||||
temp = value_struct_elt (&temp, NULL, "methods",
|
||||
NULL, "structure");
|
||||
deprecated_set_value_type (temp, value_type (clas));
|
||||
|
@ -985,7 +993,7 @@ evaluate_subexp_java (struct type *expect_type, struct expression *exp,
|
|||
|
||||
case STRUCTOP_PTR:
|
||||
arg1 = evaluate_subexp_standard (expect_type, exp, pos, noside);
|
||||
/* Convert object field (such as TYPE.class) to reference. */
|
||||
/* Convert object field (such as TYPE.class) to reference. */
|
||||
if (TYPE_CODE (value_type (arg1)) == TYPE_CODE_STRUCT)
|
||||
arg1 = value_addr (arg1);
|
||||
return arg1;
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue