/* Java language support routines for GDB, the GNU debugger.
- Copyright (C) 1997-2013 Free Software Foundation, Inc.
+ Copyright (C) 1997-2015 Free Software Foundation, Inc.
This file is part of GDB.
#include "expression.h"
#include "parser-defs.h"
#include "language.h"
-#include "gdbtypes.h"
-#include "symtab.h"
#include "symfile.h"
#include "objfiles.h"
-#include "gdb_string.h"
#include "value.h"
#include "c-lang.h"
#include "jv-lang.h"
+#include "varobj.h"
#include "gdbcore.h"
#include "block.h"
#include "demangle.h"
#include "dictionary.h"
#include <ctype.h>
-#include "gdb_assert.h"
#include "charset.h"
#include "valprint.h"
#include "cp-support.h"
static int java_demangled_signature_length (const char *);
static void java_demangled_signature_copy (char *, const char *);
-static struct symtab *get_java_class_symtab (struct gdbarch *gdbarch);
+static struct compunit_symtab *get_java_class_symtab (struct gdbarch *gdbarch);
static char *get_java_utf8_name (struct obstack *obstack, struct value *name);
static int java_class_is_primitive (struct value *clas);
static struct value *java_value_string (char *ptr, int len);
static void
jv_per_objfile_free (struct objfile *objfile, void *data)
{
- struct jv_per_objfile_data *jv_data = data;
+ struct jv_per_objfile_data *jv_data = (struct jv_per_objfile_data *) data;
struct objfile *dynamics_objfile;
- dynamics_objfile = program_space_data (current_program_space,
- jv_dynamics_progspace_key);
+ dynamics_objfile
+ = (struct objfile *) program_space_data (current_program_space,
+ jv_dynamics_progspace_key);
gdb_assert (objfile == dynamics_objfile);
if (jv_data->dict)
{
struct objfile *dynamics_objfile;
- dynamics_objfile = program_space_data (current_program_space,
- jv_dynamics_progspace_key);
+ dynamics_objfile
+ = (struct objfile *) program_space_data (current_program_space,
+ jv_dynamics_progspace_key);
if (dynamics_objfile == NULL)
{
/* Mark it as shared so that it is cleared when the inferior is
re-run. */
- dynamics_objfile = allocate_objfile (NULL, OBJF_SHARED);
- dynamics_objfile->gdbarch = gdbarch;
+ dynamics_objfile = allocate_objfile (NULL, NULL,
+ OBJF_SHARED | OBJF_NOT_FILENAME);
+ dynamics_objfile->per_bfd->gdbarch = gdbarch;
data = XCNEW (struct jv_per_objfile_data);
set_objfile_data (dynamics_objfile, jv_dynamics_objfile_data_key, data);
return dynamics_objfile;
}
-static struct symtab *
+static struct compunit_symtab *
get_java_class_symtab (struct gdbarch *gdbarch)
{
struct objfile *objfile = get_dynamics_objfile (gdbarch);
- struct symtab *class_symtab = objfile->symtabs;
+ struct compunit_symtab *class_symtab = objfile->compunit_symtabs;
if (class_symtab == NULL)
{
struct block *bl;
struct jv_per_objfile_data *jv_data;
- class_symtab = allocate_symtab ("<java-classes>", objfile);
- class_symtab->language = language_java;
+ class_symtab = allocate_compunit_symtab (objfile, "<java-classes>");
+ add_compunit_symtab_to_objfile (class_symtab);
+ allocate_symtab (class_symtab, "<java-classes>");
+
+ COMPUNIT_FILETABS (class_symtab)->language = language_java;
bv = (struct blockvector *)
obstack_alloc (&objfile->objfile_obstack,
sizeof (struct blockvector) + sizeof (struct block *));
BLOCKVECTOR_NBLOCKS (bv) = 1;
- BLOCKVECTOR (class_symtab) = bv;
+ COMPUNIT_BLOCKVECTOR (class_symtab) = bv;
/* Allocate dummy STATIC_BLOCK. */
bl = allocate_block (&objfile->objfile_obstack);
/* Allocate GLOBAL_BLOCK. */
bl = allocate_global_block (&objfile->objfile_obstack);
BLOCK_DICT (bl) = dict_create_hashed_expandable ();
- set_block_symtab (bl, class_symtab);
+ set_block_compunit_symtab (bl, class_symtab);
BLOCKVECTOR_BLOCK (bv, GLOBAL_BLOCK) = bl;
/* Arrange to free the dict. */
- jv_data = objfile_data (objfile, jv_dynamics_objfile_data_key);
+ jv_data = ((struct jv_per_objfile_data *)
+ objfile_data (objfile, jv_dynamics_objfile_data_key));
jv_data->dict = BLOCK_DICT (bl);
}
return class_symtab;
static void
add_class_symtab_symbol (struct symbol *sym)
{
- struct symtab *symtab
- = get_java_class_symtab (get_objfile_arch (SYMBOL_SYMTAB (sym)->objfile));
- struct blockvector *bv = BLOCKVECTOR (symtab);
+ struct compunit_symtab *cust = get_java_class_symtab (symbol_arch (sym));
+ const struct blockvector *bv = COMPUNIT_BLOCKVECTOR (cust);
dict_add_symbol (BLOCK_DICT (BLOCKVECTOR_BLOCK (bv, GLOBAL_BLOCK)), sym);
}
{
struct symbol *sym;
- sym = lookup_symbol (name, expression_context_block, STRUCT_DOMAIN, NULL);
+ sym = lookup_symbol (name, expression_context_block, STRUCT_DOMAIN,
+ NULL).symbol;
if (sym != NULL)
return SYMBOL_TYPE (sym);
/* FIXME - should search inferior's symbol table. */
temp = value_struct_elt (&temp, NULL, "length", NULL, "structure");
name_length = (int) value_as_long (temp);
data_addr = value_address (temp) + TYPE_LENGTH (value_type (temp));
- chrs = obstack_alloc (obstack, name_length + 1);
+ chrs = (char *) obstack_alloc (obstack, name_length + 1);
chrs[name_length] = '\0';
read_memory (data_addr, (gdb_byte *) chrs, name_length);
return chrs;
int namelen = java_demangled_signature_length (signature);
if (namelen > strlen (name))
- name = obstack_alloc (&objfile->objfile_obstack, namelen + 1);
+ name = (char *) obstack_alloc (&objfile->objfile_obstack, namelen + 1);
java_demangled_signature_copy (name, signature);
name[namelen] = '\0';
temp = clas;
{
struct symbol *sym;
- sym = lookup_symbol ("java.lang.Object", NULL, STRUCT_DOMAIN, NULL);
+ sym = lookup_symbol ("java.lang.Object", NULL, STRUCT_DOMAIN, NULL).symbol;
if (sym == NULL)
error (_("cannot find java.lang.Object"));
return SYMBOL_TYPE (sym);
int
is_object_type (struct type *type)
{
- CHECK_TYPEDEF (type);
+ type = check_typedef (type);
if (TYPE_CODE (type) == TYPE_CODE_PTR)
{
struct type *ttype = check_typedef (TYPE_TARGET_TYPE (type));
java_demangle_type_signature (const char *signature)
{
int length = java_demangled_signature_length (signature);
- char *result = xmalloc (length + 1);
+ char *result = (char *) xmalloc (length + 1);
java_demangled_signature_copy (result, signature);
result[length] = '\0';
end = java_find_last_component (demangled_name);
if (end != NULL)
{
- ret = xmalloc (end - demangled_name + 1);
+ ret = (char *) xmalloc (end - demangled_name + 1);
memcpy (ret, demangled_name, end - demangled_name);
ret[end - demangled_name] = '\0';
}
{"*", UNOP_IND, PREC_PREFIX, 0},
{"++", UNOP_PREINCREMENT, PREC_PREFIX, 0},
{"--", UNOP_PREDECREMENT, PREC_PREFIX, 0},
- {NULL, 0, 0, 0}
+ {NULL, OP_NULL, PREC_PREFIX, 0}
};
enum java_primitive_types
const struct language_defn java_language_defn =
{
"java", /* Language name */
+ "Java",
language_java,
range_check_off,
case_sensitive_on,
default_get_string,
NULL, /* la_get_symbol_name_cmp */
iterate_over_symbols,
+ &java_varobj_ops,
+ NULL,
+ NULL,
LANG_MAGIC
};
const struct builtin_java_type *
builtin_java_type (struct gdbarch *gdbarch)
{
- return gdbarch_data (gdbarch, java_type_data);
+ return ((const struct builtin_java_type *)
+ gdbarch_data (gdbarch, java_type_data));
}
void