* jv-lang.h (java_int_type, java_byte_type, java_short_type,
[deliverable/binutils-gdb.git] / gdb / jv-lang.c
1 /* Java language support routines for GDB, the GNU debugger.
2
3 Copyright (C) 1997, 1998, 1999, 2000, 2003, 2004, 2005, 2007, 2008, 2009
4 Free Software Foundation, Inc.
5
6 This file is part of GDB.
7
8 This program is free software; you can redistribute it and/or modify
9 it under the terms of the GNU General Public License as published by
10 the Free Software Foundation; either version 3 of the License, or
11 (at your option) any later version.
12
13 This program is distributed in the hope that it will be useful,
14 but WITHOUT ANY WARRANTY; without even the implied warranty of
15 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16 GNU General Public License for more details.
17
18 You should have received a copy of the GNU General Public License
19 along with this program. If not, see <http://www.gnu.org/licenses/>. */
20
21 #include "defs.h"
22 #include "symtab.h"
23 #include "gdbtypes.h"
24 #include "expression.h"
25 #include "parser-defs.h"
26 #include "language.h"
27 #include "gdbtypes.h"
28 #include "symtab.h"
29 #include "symfile.h"
30 #include "objfiles.h"
31 #include "gdb_string.h"
32 #include "value.h"
33 #include "c-lang.h"
34 #include "jv-lang.h"
35 #include "gdbcore.h"
36 #include "block.h"
37 #include "demangle.h"
38 #include "dictionary.h"
39 #include <ctype.h>
40 #include "gdb_assert.h"
41
42 /* Local functions */
43
44 extern void _initialize_java_language (void);
45
46 static int java_demangled_signature_length (char *);
47 static void java_demangled_signature_copy (char *, char *);
48
49 static struct symtab *get_java_class_symtab (void);
50 static char *get_java_utf8_name (struct obstack *obstack, struct value *name);
51 static int java_class_is_primitive (struct value *clas);
52 static struct value *java_value_string (char *ptr, int len);
53
54 static void java_emit_char (int c, struct type *type,
55 struct ui_file * stream, int quoter);
56
57 static char *java_class_name_from_physname (const char *physname);
58
59 /* This objfile contains symtabs that have been dynamically created
60 to record dynamically loaded Java classes and dynamically
61 compiled java methods. */
62
63 static struct objfile *dynamics_objfile = NULL;
64
65 static struct type *java_link_class_type (struct gdbarch *,
66 struct type *, struct value *);
67
68 /* FIXME: carlton/2003-02-04: This is the main or only caller of
69 allocate_objfile with first argument NULL; as a result, this code
70 breaks every so often. Somebody should write a test case that
71 exercises GDB in various ways (e.g. something involving loading a
72 dynamic library) after this code has been called. */
73
74 static struct objfile *
75 get_dynamics_objfile (void)
76 {
77 if (dynamics_objfile == NULL)
78 {
79 dynamics_objfile = allocate_objfile (NULL, 0);
80 }
81 return dynamics_objfile;
82 }
83
84 #if 1
85 /* symtab contains classes read from the inferior. */
86
87 static struct symtab *class_symtab = NULL;
88
89 static void free_class_block (struct symtab *symtab);
90
91 static struct symtab *
92 get_java_class_symtab (void)
93 {
94 if (class_symtab == NULL)
95 {
96 struct objfile *objfile = get_dynamics_objfile ();
97 struct blockvector *bv;
98 struct block *bl;
99 class_symtab = allocate_symtab ("<java-classes>", objfile);
100 class_symtab->language = language_java;
101 bv = (struct blockvector *)
102 obstack_alloc (&objfile->objfile_obstack,
103 sizeof (struct blockvector) + sizeof (struct block *));
104 BLOCKVECTOR_NBLOCKS (bv) = 1;
105 BLOCKVECTOR (class_symtab) = bv;
106
107 /* Allocate dummy STATIC_BLOCK. */
108 bl = allocate_block (&objfile->objfile_obstack);
109 BLOCK_DICT (bl) = dict_create_linear (&objfile->objfile_obstack,
110 NULL);
111 BLOCKVECTOR_BLOCK (bv, STATIC_BLOCK) = bl;
112
113 /* Allocate GLOBAL_BLOCK. */
114 bl = allocate_block (&objfile->objfile_obstack);
115 BLOCK_DICT (bl) = dict_create_hashed_expandable ();
116 BLOCKVECTOR_BLOCK (bv, GLOBAL_BLOCK) = bl;
117 class_symtab->free_func = free_class_block;
118 }
119 return class_symtab;
120 }
121
122 static void
123 add_class_symtab_symbol (struct symbol *sym)
124 {
125 struct symtab *symtab = get_java_class_symtab ();
126 struct blockvector *bv = BLOCKVECTOR (symtab);
127 dict_add_symbol (BLOCK_DICT (BLOCKVECTOR_BLOCK (bv, GLOBAL_BLOCK)), sym);
128 }
129
130 static struct symbol *add_class_symbol (struct type *type, CORE_ADDR addr);
131
132 static struct symbol *
133 add_class_symbol (struct type *type, CORE_ADDR addr)
134 {
135 struct symbol *sym;
136 sym = (struct symbol *)
137 obstack_alloc (&dynamics_objfile->objfile_obstack, sizeof (struct symbol));
138 memset (sym, 0, sizeof (struct symbol));
139 SYMBOL_LANGUAGE (sym) = language_java;
140 SYMBOL_SET_LINKAGE_NAME (sym, TYPE_TAG_NAME (type));
141 SYMBOL_CLASS (sym) = LOC_TYPEDEF;
142 /* SYMBOL_VALUE (sym) = valu; */
143 SYMBOL_TYPE (sym) = type;
144 SYMBOL_DOMAIN (sym) = STRUCT_DOMAIN;
145 SYMBOL_VALUE_ADDRESS (sym) = addr;
146 return sym;
147 }
148
149 /* Free the dynamic symbols block. */
150 static void
151 free_class_block (struct symtab *symtab)
152 {
153 struct blockvector *bv = BLOCKVECTOR (symtab);
154 struct block *bl = BLOCKVECTOR_BLOCK (bv, GLOBAL_BLOCK);
155
156 dict_free (BLOCK_DICT (bl));
157 }
158 #endif
159
160 struct type *
161 java_lookup_class (char *name)
162 {
163 struct symbol *sym;
164 sym = lookup_symbol (name, expression_context_block, STRUCT_DOMAIN, NULL);
165 if (sym != NULL)
166 return SYMBOL_TYPE (sym);
167 #if 0
168 CORE_ADDR addr;
169 if (called from parser)
170 {
171 call lookup_class (or similar) in inferior;
172 if not
173 found:
174 return NULL;
175 addr = found in inferior;
176 }
177 else
178 addr = 0;
179 struct type *type;
180 type = alloc_type (objfile);
181 TYPE_CODE (type) = TYPE_CODE_STRUCT;
182 INIT_CPLUS_SPECIFIC (type);
183 TYPE_TAG_NAME (type) = obsavestring (name, strlen (name), &objfile->objfile_obstack);
184 TYPE_STUB (type) = 1;
185 TYPE ? = addr;
186 return type;
187 #else
188 /* FIXME - should search inferior's symbol table. */
189 return NULL;
190 #endif
191 }
192
193 /* Return a nul-terminated string (allocated on OBSTACK) for
194 a name given by NAME (which has type Utf8Const*). */
195
196 char *
197 get_java_utf8_name (struct obstack *obstack, struct value *name)
198 {
199 char *chrs;
200 struct value *temp = name;
201 int name_length;
202 CORE_ADDR data_addr;
203 temp = value_struct_elt (&temp, NULL, "length", NULL, "structure");
204 name_length = (int) value_as_long (temp);
205 data_addr = value_address (temp) + TYPE_LENGTH (value_type (temp));
206 chrs = obstack_alloc (obstack, name_length + 1);
207 chrs[name_length] = '\0';
208 read_memory (data_addr, (gdb_byte *) chrs, name_length);
209 return chrs;
210 }
211
212 struct value *
213 java_class_from_object (struct value *obj_val)
214 {
215 /* This is all rather inefficient, since the offsets of vtable and
216 class are fixed. FIXME */
217 struct value *vtable_val;
218
219 if (TYPE_CODE (value_type (obj_val)) == TYPE_CODE_PTR
220 && TYPE_LENGTH (TYPE_TARGET_TYPE (value_type (obj_val))) == 0)
221 obj_val = value_at (get_java_object_type (),
222 value_as_address (obj_val));
223
224 vtable_val = value_struct_elt (&obj_val, NULL, "vtable", NULL, "structure");
225 return value_struct_elt (&vtable_val, NULL, "class", NULL, "structure");
226 }
227
228 /* Check if CLASS_IS_PRIMITIVE(value of clas): */
229 static int
230 java_class_is_primitive (struct value *clas)
231 {
232 struct value *vtable = value_struct_elt (&clas, NULL, "vtable", NULL, "struct");
233 CORE_ADDR i = value_as_address (vtable);
234 return (int) (i & 0x7fffffff) == (int) 0x7fffffff;
235 }
236
237 /* Read a GCJ Class object, and generated a gdb (TYPE_CODE_STRUCT) type. */
238
239 struct type *
240 type_from_class (struct gdbarch *gdbarch, struct value *clas)
241 {
242 struct type *type;
243 char *name;
244 struct value *temp;
245 struct objfile *objfile;
246 struct value *utf8_name;
247 char *nptr;
248 CORE_ADDR addr;
249 struct block *bl;
250 struct dict_iterator iter;
251 int is_array = 0;
252
253 type = check_typedef (value_type (clas));
254 if (TYPE_CODE (type) == TYPE_CODE_PTR)
255 {
256 if (value_logical_not (clas))
257 return NULL;
258 clas = value_ind (clas);
259 }
260 addr = value_address (clas);
261
262 #if 0
263 get_java_class_symtab ();
264 bl = BLOCKVECTOR_BLOCK (BLOCKVECTOR (class_symtab), GLOBAL_BLOCK);
265 ALL_BLOCK_SYMBOLS (block, iter, sym)
266 {
267 if (SYMBOL_VALUE_ADDRESS (sym) == addr)
268 return SYMBOL_TYPE (sym);
269 }
270 #endif
271
272 objfile = get_dynamics_objfile ();
273 if (java_class_is_primitive (clas))
274 {
275 struct value *sig;
276 temp = clas;
277 sig = value_struct_elt (&temp, NULL, "method_count", NULL, "structure");
278 return java_primitive_type (gdbarch, value_as_long (sig));
279 }
280
281 /* Get Class name. */
282 /* if clasloader non-null, prepend loader address. FIXME */
283 temp = clas;
284 utf8_name = value_struct_elt (&temp, NULL, "name", NULL, "structure");
285 name = get_java_utf8_name (&objfile->objfile_obstack, utf8_name);
286 for (nptr = name; *nptr != 0; nptr++)
287 {
288 if (*nptr == '/')
289 *nptr = '.';
290 }
291
292 type = java_lookup_class (name);
293 if (type != NULL)
294 return type;
295
296 /* Do not use the "fake" dynamics objfile to own dynamically generated
297 types, as it does not provide an architecture, and it would not help
298 manage the lifetime of these types anyway. */
299 type = alloc_type (NULL);
300 TYPE_CODE (type) = TYPE_CODE_STRUCT;
301 INIT_CPLUS_SPECIFIC (type);
302
303 if (name[0] == '[')
304 {
305 char *signature = name;
306 int namelen = java_demangled_signature_length (signature);
307 if (namelen > strlen (name))
308 name = obstack_alloc (&objfile->objfile_obstack, namelen + 1);
309 java_demangled_signature_copy (name, signature);
310 name[namelen] = '\0';
311 is_array = 1;
312 temp = clas;
313 /* Set array element type. */
314 temp = value_struct_elt (&temp, NULL, "methods", NULL, "structure");
315 deprecated_set_value_type (temp, lookup_pointer_type (value_type (clas)));
316 TYPE_TARGET_TYPE (type) = type_from_class (gdbarch, temp);
317 }
318
319 ALLOCATE_CPLUS_STRUCT_TYPE (type);
320 TYPE_TAG_NAME (type) = name;
321
322 add_class_symtab_symbol (add_class_symbol (type, addr));
323 return java_link_class_type (gdbarch, type, clas);
324 }
325
326 /* Fill in class TYPE with data from the CLAS value. */
327
328 struct type *
329 java_link_class_type (struct gdbarch *gdbarch,
330 struct type *type, struct value *clas)
331 {
332 struct value *temp;
333 char *unqualified_name;
334 char *name = TYPE_TAG_NAME (type);
335 int ninterfaces, nfields, nmethods;
336 int type_is_object = 0;
337 struct fn_field *fn_fields;
338 struct fn_fieldlist *fn_fieldlists;
339 struct value *fields;
340 struct value *methods;
341 struct value *method = NULL;
342 struct value *field = NULL;
343 int i, j;
344 struct objfile *objfile = get_dynamics_objfile ();
345 struct type *tsuper;
346
347 gdb_assert (name != NULL);
348 unqualified_name = strrchr (name, '.');
349 if (unqualified_name == NULL)
350 unqualified_name = name;
351
352 temp = clas;
353 temp = value_struct_elt (&temp, NULL, "superclass", NULL, "structure");
354 if (strcmp (name, "java.lang.Object") == 0)
355 {
356 tsuper = get_java_object_type ();
357 if (tsuper && TYPE_CODE (tsuper) == TYPE_CODE_PTR)
358 tsuper = TYPE_TARGET_TYPE (tsuper);
359 type_is_object = 1;
360 }
361 else
362 tsuper = type_from_class (gdbarch, temp);
363
364 #if 1
365 ninterfaces = 0;
366 #else
367 temp = clas;
368 ninterfaces = value_as_long (value_struct_elt (&temp, NULL, "interface_len", NULL, "structure"));
369 #endif
370 TYPE_N_BASECLASSES (type) = (tsuper == NULL ? 0 : 1) + ninterfaces;
371 temp = clas;
372 nfields = value_as_long (value_struct_elt (&temp, NULL, "field_count", NULL, "structure"));
373 nfields += TYPE_N_BASECLASSES (type);
374 nfields++; /* Add one for dummy "class" field. */
375 TYPE_NFIELDS (type) = nfields;
376 TYPE_FIELDS (type) = (struct field *)
377 TYPE_ALLOC (type, sizeof (struct field) * nfields);
378
379 memset (TYPE_FIELDS (type), 0, sizeof (struct field) * nfields);
380
381 TYPE_FIELD_PRIVATE_BITS (type) =
382 (B_TYPE *) TYPE_ALLOC (type, B_BYTES (nfields));
383 B_CLRALL (TYPE_FIELD_PRIVATE_BITS (type), nfields);
384
385 TYPE_FIELD_PROTECTED_BITS (type) =
386 (B_TYPE *) TYPE_ALLOC (type, B_BYTES (nfields));
387 B_CLRALL (TYPE_FIELD_PROTECTED_BITS (type), nfields);
388
389 TYPE_FIELD_IGNORE_BITS (type) =
390 (B_TYPE *) TYPE_ALLOC (type, B_BYTES (nfields));
391 B_CLRALL (TYPE_FIELD_IGNORE_BITS (type), nfields);
392
393 TYPE_FIELD_VIRTUAL_BITS (type) = (B_TYPE *)
394 TYPE_ALLOC (type, B_BYTES (TYPE_N_BASECLASSES (type)));
395 B_CLRALL (TYPE_FIELD_VIRTUAL_BITS (type), TYPE_N_BASECLASSES (type));
396
397 if (tsuper != NULL)
398 {
399 TYPE_BASECLASS (type, 0) = tsuper;
400 if (type_is_object)
401 SET_TYPE_FIELD_PRIVATE (type, 0);
402 }
403
404 i = strlen (name);
405 if (i > 2 && name[i - 1] == ']' && tsuper != NULL)
406 {
407 /* FIXME */
408 TYPE_LENGTH (type) = TYPE_LENGTH (tsuper) + 4; /* size with "length" */
409 }
410 else
411 {
412 temp = clas;
413 temp = value_struct_elt (&temp, NULL, "size_in_bytes", NULL, "structure");
414 TYPE_LENGTH (type) = value_as_long (temp);
415 }
416
417 fields = NULL;
418 nfields--; /* First set up dummy "class" field. */
419 SET_FIELD_PHYSADDR (TYPE_FIELD (type, nfields), value_address (clas));
420 TYPE_FIELD_NAME (type, nfields) = "class";
421 TYPE_FIELD_TYPE (type, nfields) = value_type (clas);
422 SET_TYPE_FIELD_PRIVATE (type, nfields);
423
424 for (i = TYPE_N_BASECLASSES (type); i < nfields; i++)
425 {
426 int accflags;
427 int boffset;
428 if (fields == NULL)
429 {
430 temp = clas;
431 fields = value_struct_elt (&temp, NULL, "fields", NULL, "structure");
432 field = value_ind (fields);
433 }
434 else
435 { /* Re-use field value for next field. */
436 CORE_ADDR addr
437 = value_address (field) + TYPE_LENGTH (value_type (field));
438 set_value_address (field, addr);
439 set_value_lazy (field, 1);
440 }
441 temp = field;
442 temp = value_struct_elt (&temp, NULL, "name", NULL, "structure");
443 TYPE_FIELD_NAME (type, i) =
444 get_java_utf8_name (&objfile->objfile_obstack, temp);
445 temp = field;
446 accflags = value_as_long (value_struct_elt (&temp, NULL, "accflags",
447 NULL, "structure"));
448 temp = field;
449 temp = value_struct_elt (&temp, NULL, "info", NULL, "structure");
450 boffset = value_as_long (value_struct_elt (&temp, NULL, "boffset",
451 NULL, "structure"));
452 if (accflags & 0x0001) /* public access */
453 {
454 /* ??? */
455 }
456 if (accflags & 0x0002) /* private access */
457 {
458 SET_TYPE_FIELD_PRIVATE (type, i);
459 }
460 if (accflags & 0x0004) /* protected access */
461 {
462 SET_TYPE_FIELD_PROTECTED (type, i);
463 }
464 if (accflags & 0x0008) /* ACC_STATIC */
465 SET_FIELD_PHYSADDR (TYPE_FIELD (type, i), boffset);
466 else
467 TYPE_FIELD_BITPOS (type, i) = 8 * boffset;
468 if (accflags & 0x8000) /* FIELD_UNRESOLVED_FLAG */
469 {
470 TYPE_FIELD_TYPE (type, i) = get_java_object_type (); /* FIXME */
471 }
472 else
473 {
474 struct type *ftype;
475 temp = field;
476 temp = value_struct_elt (&temp, NULL, "type", NULL, "structure");
477 ftype = type_from_class (gdbarch, temp);
478 if (TYPE_CODE (ftype) == TYPE_CODE_STRUCT)
479 ftype = lookup_pointer_type (ftype);
480 TYPE_FIELD_TYPE (type, i) = ftype;
481 }
482 }
483
484 temp = clas;
485 nmethods = value_as_long (value_struct_elt (&temp, NULL, "method_count",
486 NULL, "structure"));
487 TYPE_NFN_FIELDS_TOTAL (type) = nmethods;
488 j = nmethods * sizeof (struct fn_field);
489 fn_fields = (struct fn_field *)
490 obstack_alloc (&dynamics_objfile->objfile_obstack, j);
491 memset (fn_fields, 0, j);
492 fn_fieldlists = (struct fn_fieldlist *)
493 alloca (nmethods * sizeof (struct fn_fieldlist));
494
495 methods = NULL;
496 for (i = 0; i < nmethods; i++)
497 {
498 char *mname;
499 int k;
500 if (methods == NULL)
501 {
502 temp = clas;
503 methods = value_struct_elt (&temp, NULL, "methods", NULL, "structure");
504 method = value_ind (methods);
505 }
506 else
507 { /* Re-use method value for next method. */
508 CORE_ADDR addr
509 = value_address (method) + TYPE_LENGTH (value_type (method));
510 set_value_address (method, addr);
511 set_value_lazy (method, 1);
512 }
513
514 /* Get method name. */
515 temp = method;
516 temp = value_struct_elt (&temp, NULL, "name", NULL, "structure");
517 mname = get_java_utf8_name (&objfile->objfile_obstack, temp);
518 if (strcmp (mname, "<init>") == 0)
519 mname = unqualified_name;
520
521 /* Check for an existing method with the same name.
522 * This makes building the fn_fieldslists an O(nmethods**2)
523 * operation. That could be using hashing, but I doubt it
524 * is worth it. Note that we do maintain the order of methods
525 * in the inferior's Method table (as long as that is grouped
526 * by method name), which I think is desirable. --PB */
527 for (k = 0, j = TYPE_NFN_FIELDS (type);;)
528 {
529 if (--j < 0)
530 { /* No match - new method name. */
531 j = TYPE_NFN_FIELDS (type)++;
532 fn_fieldlists[j].name = mname;
533 fn_fieldlists[j].length = 1;
534 fn_fieldlists[j].fn_fields = &fn_fields[i];
535 k = i;
536 break;
537 }
538 if (strcmp (mname, fn_fieldlists[j].name) == 0)
539 { /* Found an existing method with the same name. */
540 int l;
541 if (mname != unqualified_name)
542 obstack_free (&objfile->objfile_obstack, mname);
543 mname = fn_fieldlists[j].name;
544 fn_fieldlists[j].length++;
545 k = i - k; /* Index of new slot. */
546 /* Shift intervening fn_fields (between k and i) down. */
547 for (l = i; l > k; l--)
548 fn_fields[l] = fn_fields[l - 1];
549 for (l = TYPE_NFN_FIELDS (type); --l > j;)
550 fn_fieldlists[l].fn_fields++;
551 break;
552 }
553 k += fn_fieldlists[j].length;
554 }
555 fn_fields[k].physname = "";
556 fn_fields[k].is_stub = 1;
557 /* FIXME */
558 fn_fields[k].type = lookup_function_type
559 (builtin_java_type (gdbarch)->builtin_void);
560 TYPE_CODE (fn_fields[k].type) = TYPE_CODE_METHOD;
561 }
562
563 j = TYPE_NFN_FIELDS (type) * sizeof (struct fn_fieldlist);
564 TYPE_FN_FIELDLISTS (type) = (struct fn_fieldlist *)
565 obstack_alloc (&dynamics_objfile->objfile_obstack, j);
566 memcpy (TYPE_FN_FIELDLISTS (type), fn_fieldlists, j);
567
568 return type;
569 }
570
571 static struct type *java_object_type;
572
573 struct type *
574 get_java_object_type (void)
575 {
576 if (java_object_type == NULL)
577 {
578 struct symbol *sym;
579 sym = lookup_symbol ("java.lang.Object", NULL, STRUCT_DOMAIN, NULL);
580 if (sym == NULL)
581 error (_("cannot find java.lang.Object"));
582 java_object_type = SYMBOL_TYPE (sym);
583 }
584 return java_object_type;
585 }
586
587 int
588 get_java_object_header_size (struct gdbarch *gdbarch)
589 {
590 struct type *objtype = get_java_object_type ();
591 if (objtype == NULL)
592 return (2 * gdbarch_ptr_bit (gdbarch) / TARGET_CHAR_BIT);
593 else
594 return TYPE_LENGTH (objtype);
595 }
596
597 int
598 is_object_type (struct type *type)
599 {
600 CHECK_TYPEDEF (type);
601 if (TYPE_CODE (type) == TYPE_CODE_PTR)
602 {
603 struct type *ttype = check_typedef (TYPE_TARGET_TYPE (type));
604 char *name;
605 if (TYPE_CODE (ttype) != TYPE_CODE_STRUCT)
606 return 0;
607 while (TYPE_N_BASECLASSES (ttype) > 0)
608 ttype = TYPE_BASECLASS (ttype, 0);
609 name = TYPE_TAG_NAME (ttype);
610 if (name != NULL && strcmp (name, "java.lang.Object") == 0)
611 return 1;
612 name = TYPE_NFIELDS (ttype) > 0 ? TYPE_FIELD_NAME (ttype, 0) : (char *) 0;
613 if (name != NULL && strcmp (name, "vtable") == 0)
614 {
615 if (java_object_type == NULL)
616 java_object_type = type;
617 return 1;
618 }
619 }
620 return 0;
621 }
622
623 struct type *
624 java_primitive_type (struct gdbarch *gdbarch, int signature)
625 {
626 const struct builtin_java_type *builtin = builtin_java_type (gdbarch);
627
628 switch (signature)
629 {
630 case 'B':
631 return builtin->builtin_byte;
632 case 'S':
633 return builtin->builtin_short;
634 case 'I':
635 return builtin->builtin_int;
636 case 'J':
637 return builtin->builtin_long;
638 case 'Z':
639 return builtin->builtin_boolean;
640 case 'C':
641 return builtin->builtin_char;
642 case 'F':
643 return builtin->builtin_float;
644 case 'D':
645 return builtin->builtin_double;
646 case 'V':
647 return builtin->builtin_void;
648 }
649 error (_("unknown signature '%c' for primitive type"), (char) signature);
650 }
651
652 /* If name[0 .. namelen-1] is the name of a primitive Java type,
653 return that type. Otherwise, return NULL. */
654
655 struct type *
656 java_primitive_type_from_name (struct gdbarch *gdbarch,
657 char *name, int namelen)
658 {
659 const struct builtin_java_type *builtin = builtin_java_type (gdbarch);
660
661 switch (name[0])
662 {
663 case 'b':
664 if (namelen == 4 && memcmp (name, "byte", 4) == 0)
665 return builtin->builtin_byte;
666 if (namelen == 7 && memcmp (name, "boolean", 7) == 0)
667 return builtin->builtin_boolean;
668 break;
669 case 'c':
670 if (namelen == 4 && memcmp (name, "char", 4) == 0)
671 return builtin->builtin_char;
672 case 'd':
673 if (namelen == 6 && memcmp (name, "double", 6) == 0)
674 return builtin->builtin_double;
675 break;
676 case 'f':
677 if (namelen == 5 && memcmp (name, "float", 5) == 0)
678 return builtin->builtin_float;
679 break;
680 case 'i':
681 if (namelen == 3 && memcmp (name, "int", 3) == 0)
682 return builtin->builtin_int;
683 break;
684 case 'l':
685 if (namelen == 4 && memcmp (name, "long", 4) == 0)
686 return builtin->builtin_long;
687 break;
688 case 's':
689 if (namelen == 5 && memcmp (name, "short", 5) == 0)
690 return builtin->builtin_short;
691 break;
692 case 'v':
693 if (namelen == 4 && memcmp (name, "void", 4) == 0)
694 return builtin->builtin_void;
695 break;
696 }
697 return NULL;
698 }
699
700 static char *
701 java_primitive_type_name (int signature)
702 {
703 switch (signature)
704 {
705 case 'B':
706 return "byte";
707 case 'S':
708 return "short";
709 case 'I':
710 return "int";
711 case 'J':
712 return "long";
713 case 'Z':
714 return "boolean";
715 case 'C':
716 return "char";
717 case 'F':
718 return "float";
719 case 'D':
720 return "double";
721 case 'V':
722 return "void";
723 }
724 error (_("unknown signature '%c' for primitive type"), (char) signature);
725 }
726
727 /* Return the length (in bytes) of demangled name of the Java type
728 signature string SIGNATURE. */
729
730 static int
731 java_demangled_signature_length (char *signature)
732 {
733 int array = 0;
734 for (; *signature == '['; signature++)
735 array += 2; /* Two chars for "[]". */
736 switch (signature[0])
737 {
738 case 'L':
739 /* Subtract 2 for 'L' and ';'. */
740 return strlen (signature) - 2 + array;
741 default:
742 return strlen (java_primitive_type_name (signature[0])) + array;
743 }
744 }
745
746 /* Demangle the Java type signature SIGNATURE, leaving the result in RESULT. */
747
748 static void
749 java_demangled_signature_copy (char *result, char *signature)
750 {
751 int array = 0;
752 char *ptr;
753 int i;
754 while (*signature == '[')
755 {
756 array++;
757 signature++;
758 }
759 switch (signature[0])
760 {
761 case 'L':
762 /* Subtract 2 for 'L' and ';', but add 1 for final nul. */
763 signature++;
764 ptr = result;
765 for (; *signature != ';' && *signature != '\0'; signature++)
766 {
767 if (*signature == '/')
768 *ptr++ = '.';
769 else
770 *ptr++ = *signature;
771 }
772 break;
773 default:
774 ptr = java_primitive_type_name (signature[0]);
775 i = strlen (ptr);
776 strcpy (result, ptr);
777 ptr = result + i;
778 break;
779 }
780 while (--array >= 0)
781 {
782 *ptr++ = '[';
783 *ptr++ = ']';
784 }
785 }
786
787 /* Return the demangled name of the Java type signature string SIGNATURE,
788 as a freshly allocated copy. */
789
790 char *
791 java_demangle_type_signature (char *signature)
792 {
793 int length = java_demangled_signature_length (signature);
794 char *result = xmalloc (length + 1);
795 java_demangled_signature_copy (result, signature);
796 result[length] = '\0';
797 return result;
798 }
799
800 /* Return the type of TYPE followed by DIMS pairs of [ ].
801 If DIMS == 0, TYPE is returned. */
802
803 struct type *
804 java_array_type (struct type *type, int dims)
805 {
806 struct type *range_type;
807
808 while (dims-- > 0)
809 {
810 range_type = create_range_type (NULL, builtin_type_int32, 0, 0);
811 /* FIXME This is bogus! Java arrays are not gdb arrays! */
812 type = create_array_type (NULL, type, range_type);
813 }
814
815 return type;
816 }
817
818 /* Create a Java string in the inferior from a (Utf8) literal. */
819
820 static struct value *
821 java_value_string (char *ptr, int len)
822 {
823 error (_("not implemented - java_value_string")); /* FIXME */
824 }
825
826 /* Print the character C on STREAM as part of the contents of a literal
827 string whose delimiter is QUOTER. Note that that format for printing
828 characters and strings is language specific. */
829
830 static void
831 java_emit_char (int c, struct type *type, struct ui_file *stream, int quoter)
832 {
833 switch (c)
834 {
835 case '\\':
836 case '\'':
837 fprintf_filtered (stream, "\\%c", c);
838 break;
839 case '\b':
840 fputs_filtered ("\\b", stream);
841 break;
842 case '\t':
843 fputs_filtered ("\\t", stream);
844 break;
845 case '\n':
846 fputs_filtered ("\\n", stream);
847 break;
848 case '\f':
849 fputs_filtered ("\\f", stream);
850 break;
851 case '\r':
852 fputs_filtered ("\\r", stream);
853 break;
854 default:
855 if (isprint (c))
856 fputc_filtered (c, stream);
857 else
858 fprintf_filtered (stream, "\\u%.4x", (unsigned int) c);
859 break;
860 }
861 }
862
863 static struct value *
864 evaluate_subexp_java (struct type *expect_type, struct expression *exp,
865 int *pos, enum noside noside)
866 {
867 int pc = *pos;
868 int i;
869 char *name;
870 enum exp_opcode op = exp->elts[*pos].opcode;
871 struct value *arg1;
872 struct value *arg2;
873 struct type *type;
874 switch (op)
875 {
876 case UNOP_IND:
877 if (noside == EVAL_SKIP)
878 goto standard;
879 (*pos)++;
880 arg1 = evaluate_subexp_java (NULL_TYPE, exp, pos, EVAL_NORMAL);
881 if (is_object_type (value_type (arg1)))
882 {
883 struct type *type;
884
885 type = type_from_class (exp->gdbarch, java_class_from_object (arg1));
886 arg1 = value_cast (lookup_pointer_type (type), arg1);
887 }
888 if (noside == EVAL_SKIP)
889 goto nosideret;
890 return value_ind (arg1);
891
892 case BINOP_SUBSCRIPT:
893 (*pos)++;
894 arg1 = evaluate_subexp_with_coercion (exp, pos, noside);
895 arg2 = evaluate_subexp_with_coercion (exp, pos, noside);
896 if (noside == EVAL_SKIP)
897 goto nosideret;
898 /* If the user attempts to subscript something that is not an
899 array or pointer type (like a plain int variable for example),
900 then report this as an error. */
901
902 arg1 = coerce_ref (arg1);
903 type = check_typedef (value_type (arg1));
904 if (TYPE_CODE (type) == TYPE_CODE_PTR)
905 type = check_typedef (TYPE_TARGET_TYPE (type));
906 name = TYPE_NAME (type);
907 if (name == NULL)
908 name = TYPE_TAG_NAME (type);
909 i = name == NULL ? 0 : strlen (name);
910 if (TYPE_CODE (type) == TYPE_CODE_STRUCT
911 && i > 2 && name[i - 1] == ']')
912 {
913 CORE_ADDR address;
914 long length, index;
915 struct type *el_type;
916 gdb_byte buf4[4];
917
918 struct value *clas = java_class_from_object (arg1);
919 struct value *temp = clas;
920 /* Get CLASS_ELEMENT_TYPE of the array type. */
921 temp = value_struct_elt (&temp, NULL, "methods",
922 NULL, "structure");
923 deprecated_set_value_type (temp, value_type (clas));
924 el_type = type_from_class (exp->gdbarch, temp);
925 if (TYPE_CODE (el_type) == TYPE_CODE_STRUCT)
926 el_type = lookup_pointer_type (el_type);
927
928 if (noside == EVAL_AVOID_SIDE_EFFECTS)
929 return value_zero (el_type, VALUE_LVAL (arg1));
930 address = value_as_address (arg1);
931 address += get_java_object_header_size (exp->gdbarch);
932 read_memory (address, buf4, 4);
933 length = (long) extract_signed_integer (buf4, 4);
934 index = (long) value_as_long (arg2);
935 if (index >= length || index < 0)
936 error (_("array index (%ld) out of bounds (length: %ld)"),
937 index, length);
938 address = (address + 4) + index * TYPE_LENGTH (el_type);
939 return value_at (el_type, address);
940 }
941 else if (TYPE_CODE (type) == TYPE_CODE_ARRAY)
942 {
943 if (noside == EVAL_AVOID_SIDE_EFFECTS)
944 return value_zero (TYPE_TARGET_TYPE (type), VALUE_LVAL (arg1));
945 else
946 return value_subscript (arg1, value_as_long (arg2));
947 }
948 if (name)
949 error (_("cannot subscript something of type `%s'"), name);
950 else
951 error (_("cannot subscript requested type"));
952
953 case OP_STRING:
954 (*pos)++;
955 i = longest_to_int (exp->elts[pc + 1].longconst);
956 (*pos) += 3 + BYTES_TO_EXP_ELEM (i + 1);
957 if (noside == EVAL_SKIP)
958 goto nosideret;
959 return java_value_string (&exp->elts[pc + 2].string, i);
960
961 case STRUCTOP_PTR:
962 arg1 = evaluate_subexp_standard (expect_type, exp, pos, noside);
963 /* Convert object field (such as TYPE.class) to reference. */
964 if (TYPE_CODE (value_type (arg1)) == TYPE_CODE_STRUCT)
965 arg1 = value_addr (arg1);
966 return arg1;
967 default:
968 break;
969 }
970 standard:
971 return evaluate_subexp_standard (expect_type, exp, pos, noside);
972 nosideret:
973 return value_from_longest (builtin_type_int8, (LONGEST) 1);
974 }
975
976 static char *java_demangle (const char *mangled, int options)
977 {
978 return cplus_demangle (mangled, options | DMGL_JAVA);
979 }
980
981 /* Find the member function name of the demangled name NAME. NAME
982 must be a method name including arguments, in order to correctly
983 locate the last component.
984
985 This function return a pointer to the first dot before the
986 member function name, or NULL if the name was not of the
987 expected form. */
988
989 static const char *
990 java_find_last_component (const char *name)
991 {
992 const char *p;
993
994 /* Find argument list. */
995 p = strchr (name, '(');
996
997 if (p == NULL)
998 return NULL;
999
1000 /* Back up and find first dot prior to argument list. */
1001 while (p > name && *p != '.')
1002 p--;
1003
1004 if (p == name)
1005 return NULL;
1006
1007 return p;
1008 }
1009
1010 /* Return the name of the class containing method PHYSNAME. */
1011
1012 static char *
1013 java_class_name_from_physname (const char *physname)
1014 {
1015 char *ret = NULL;
1016 const char *end;
1017 int depth = 0;
1018 char *demangled_name = java_demangle (physname, DMGL_PARAMS | DMGL_ANSI);
1019
1020 if (demangled_name == NULL)
1021 return NULL;
1022
1023 end = java_find_last_component (demangled_name);
1024 if (end != NULL)
1025 {
1026 ret = xmalloc (end - demangled_name + 1);
1027 memcpy (ret, demangled_name, end - demangled_name);
1028 ret[end - demangled_name] = '\0';
1029 }
1030
1031 xfree (demangled_name);
1032 return ret;
1033 }
1034
1035 /* Table mapping opcodes into strings for printing operators
1036 and precedences of the operators. */
1037
1038 const struct op_print java_op_print_tab[] =
1039 {
1040 {",", BINOP_COMMA, PREC_COMMA, 0},
1041 {"=", BINOP_ASSIGN, PREC_ASSIGN, 1},
1042 {"||", BINOP_LOGICAL_OR, PREC_LOGICAL_OR, 0},
1043 {"&&", BINOP_LOGICAL_AND, PREC_LOGICAL_AND, 0},
1044 {"|", BINOP_BITWISE_IOR, PREC_BITWISE_IOR, 0},
1045 {"^", BINOP_BITWISE_XOR, PREC_BITWISE_XOR, 0},
1046 {"&", BINOP_BITWISE_AND, PREC_BITWISE_AND, 0},
1047 {"==", BINOP_EQUAL, PREC_EQUAL, 0},
1048 {"!=", BINOP_NOTEQUAL, PREC_EQUAL, 0},
1049 {"<=", BINOP_LEQ, PREC_ORDER, 0},
1050 {">=", BINOP_GEQ, PREC_ORDER, 0},
1051 {">", BINOP_GTR, PREC_ORDER, 0},
1052 {"<", BINOP_LESS, PREC_ORDER, 0},
1053 {">>", BINOP_RSH, PREC_SHIFT, 0},
1054 {"<<", BINOP_LSH, PREC_SHIFT, 0},
1055 #if 0
1056 {">>>", BINOP_ ? ? ?, PREC_SHIFT, 0},
1057 #endif
1058 {"+", BINOP_ADD, PREC_ADD, 0},
1059 {"-", BINOP_SUB, PREC_ADD, 0},
1060 {"*", BINOP_MUL, PREC_MUL, 0},
1061 {"/", BINOP_DIV, PREC_MUL, 0},
1062 {"%", BINOP_REM, PREC_MUL, 0},
1063 {"-", UNOP_NEG, PREC_PREFIX, 0},
1064 {"!", UNOP_LOGICAL_NOT, PREC_PREFIX, 0},
1065 {"~", UNOP_COMPLEMENT, PREC_PREFIX, 0},
1066 {"*", UNOP_IND, PREC_PREFIX, 0},
1067 #if 0
1068 {"instanceof", ? ? ?, ? ? ?, 0},
1069 #endif
1070 {"++", UNOP_PREINCREMENT, PREC_PREFIX, 0},
1071 {"--", UNOP_PREDECREMENT, PREC_PREFIX, 0},
1072 {NULL, 0, 0, 0}
1073 };
1074
1075 enum java_primitive_types
1076 {
1077 java_primitive_type_int,
1078 java_primitive_type_short,
1079 java_primitive_type_long,
1080 java_primitive_type_byte,
1081 java_primitive_type_boolean,
1082 java_primitive_type_char,
1083 java_primitive_type_float,
1084 java_primitive_type_double,
1085 java_primitive_type_void,
1086 nr_java_primitive_types
1087 };
1088
1089 static void
1090 java_language_arch_info (struct gdbarch *gdbarch,
1091 struct language_arch_info *lai)
1092 {
1093 const struct builtin_java_type *builtin = builtin_java_type (gdbarch);
1094
1095 lai->string_char_type = builtin->builtin_char;
1096 lai->primitive_type_vector
1097 = GDBARCH_OBSTACK_CALLOC (gdbarch, nr_java_primitive_types + 1,
1098 struct type *);
1099 lai->primitive_type_vector [java_primitive_type_int]
1100 = builtin->builtin_int;
1101 lai->primitive_type_vector [java_primitive_type_short]
1102 = builtin->builtin_short;
1103 lai->primitive_type_vector [java_primitive_type_long]
1104 = builtin->builtin_long;
1105 lai->primitive_type_vector [java_primitive_type_byte]
1106 = builtin->builtin_byte;
1107 lai->primitive_type_vector [java_primitive_type_boolean]
1108 = builtin->builtin_boolean;
1109 lai->primitive_type_vector [java_primitive_type_char]
1110 = builtin->builtin_char;
1111 lai->primitive_type_vector [java_primitive_type_float]
1112 = builtin->builtin_float;
1113 lai->primitive_type_vector [java_primitive_type_double]
1114 = builtin->builtin_double;
1115 lai->primitive_type_vector [java_primitive_type_void]
1116 = builtin->builtin_void;
1117
1118 lai->bool_type_symbol = "boolean";
1119 lai->bool_type_default = builtin->builtin_boolean;
1120 }
1121
1122 const struct exp_descriptor exp_descriptor_java =
1123 {
1124 print_subexp_standard,
1125 operator_length_standard,
1126 op_name_standard,
1127 dump_subexp_body_standard,
1128 evaluate_subexp_java
1129 };
1130
1131 const struct language_defn java_language_defn =
1132 {
1133 "java", /* Language name */
1134 language_java,
1135 range_check_off,
1136 type_check_off,
1137 case_sensitive_on,
1138 array_row_major,
1139 macro_expansion_no,
1140 &exp_descriptor_java,
1141 java_parse,
1142 java_error,
1143 null_post_parser,
1144 c_printchar, /* Print a character constant */
1145 c_printstr, /* Function to print string constant */
1146 java_emit_char, /* Function to print a single character */
1147 java_print_type, /* Print a type using appropriate syntax */
1148 default_print_typedef, /* Print a typedef using appropriate syntax */
1149 java_val_print, /* Print a value using appropriate syntax */
1150 java_value_print, /* Print a top-level value */
1151 NULL, /* Language specific skip_trampoline */
1152 "this", /* name_of_this */
1153 basic_lookup_symbol_nonlocal, /* lookup_symbol_nonlocal */
1154 basic_lookup_transparent_type,/* lookup_transparent_type */
1155 java_demangle, /* Language specific symbol demangler */
1156 java_class_name_from_physname,/* Language specific class name */
1157 java_op_print_tab, /* expression operators for printing */
1158 0, /* not c-style arrays */
1159 0, /* String lower bound */
1160 default_word_break_characters,
1161 default_make_symbol_completion_list,
1162 java_language_arch_info,
1163 default_print_array_index,
1164 default_pass_by_reference,
1165 default_get_string,
1166 LANG_MAGIC
1167 };
1168
1169 static void *
1170 build_java_types (struct gdbarch *gdbarch)
1171 {
1172 struct builtin_java_type *builtin_java_type
1173 = GDBARCH_OBSTACK_ZALLOC (gdbarch, struct builtin_java_type);
1174
1175 builtin_java_type->builtin_int
1176 = init_type (TYPE_CODE_INT, 4, 0, "int", NULL);
1177 builtin_java_type->builtin_short
1178 = init_type (TYPE_CODE_INT, 2, 0, "short", NULL);
1179 builtin_java_type->builtin_long
1180 = init_type (TYPE_CODE_INT, 8, 0, "long", NULL);
1181 builtin_java_type->builtin_byte
1182 = init_type (TYPE_CODE_INT, 1, 0, "byte", NULL);
1183 builtin_java_type->builtin_boolean
1184 = init_type (TYPE_CODE_BOOL, 1, 0, "boolean", NULL);
1185 builtin_java_type->builtin_char
1186 = init_type (TYPE_CODE_CHAR, 2, TYPE_FLAG_UNSIGNED, "char", NULL);
1187 builtin_java_type->builtin_float
1188 = init_type (TYPE_CODE_FLT, 4, 0, "float", NULL);
1189 builtin_java_type->builtin_double
1190 = init_type (TYPE_CODE_FLT, 8, 0, "double", NULL);
1191 builtin_java_type->builtin_void
1192 = init_type (TYPE_CODE_VOID, 1, 0, "void", NULL);
1193
1194 return builtin_java_type;
1195 }
1196
1197 static struct gdbarch_data *java_type_data;
1198
1199 const struct builtin_java_type *
1200 builtin_java_type (struct gdbarch *gdbarch)
1201 {
1202 return gdbarch_data (gdbarch, java_type_data);
1203 }
1204
1205 void
1206 _initialize_java_language (void)
1207 {
1208 java_type_data = gdbarch_data_register_post_init (build_java_types);
1209
1210 add_language (&java_language_defn);
1211 }
This page took 0.055812 seconds and 5 git commands to generate.