projects
/
platform
/
upstream
/
binutils.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Automatic date update in version.in
[platform/upstream/binutils.git]
/
gdb
/
jit.c
diff --git
a/gdb/jit.c
b/gdb/jit.c
index
6fc8524
..
c12a72f
100644
(file)
--- a/
gdb/jit.c
+++ b/
gdb/jit.c
@@
-1,6
+1,6
@@
/* Handle JIT code generation in the inferior for GDB, the GNU Debugger.
/* Handle JIT code generation in the inferior for GDB, the GNU Debugger.
- Copyright (C) 2009-201
3
Free Software Foundation, Inc.
+ Copyright (C) 2009-201
4
Free Software Foundation, Inc.
This file is part of GDB.
This file is part of GDB.
@@
-37,8
+37,7
@@
#include "symtab.h"
#include "target.h"
#include "gdb-dlfcn.h"
#include "symtab.h"
#include "target.h"
#include "gdb-dlfcn.h"
-#include "gdb_stat.h"
-#include "exceptions.h"
+#include <sys/stat.h>
#include "gdb_bfd.h"
static const char *jit_reader_dir = NULL;
#include "gdb_bfd.h"
static const char *jit_reader_dir = NULL;
@@
-189,7
+188,7
@@
jit_reader_load (const char *file_name)
if (funcs->reader_version != GDB_READER_INTERFACE_VERSION)
error (_("Reader version does not match GDB version."));
if (funcs->reader_version != GDB_READER_INTERFACE_VERSION)
error (_("Reader version does not match GDB version."));
- new_reader = X
ZALLOC
(struct jit_reader);
+ new_reader = X
CNEW
(struct jit_reader);
new_reader->functions = funcs;
new_reader->handle = so;
new_reader->functions = funcs;
new_reader->handle = so;
@@
-214,7
+213,7
@@
jit_reader_load_command (char *args, int from_tty)
if (IS_ABSOLUTE_PATH (args))
so_name = xstrdup (args);
else
if (IS_ABSOLUTE_PATH (args))
so_name = xstrdup (args);
else
- so_name = xstrprintf ("%s%s%s",
SLASH_STRING, jit_reader_dir
, args);
+ so_name = xstrprintf ("%s%s%s",
jit_reader_dir, SLASH_STRING
, args);
prev_cleanup = make_cleanup (xfree, so_name);
loaded_jit_reader = jit_reader_load (so_name);
prev_cleanup = make_cleanup (xfree, so_name);
loaded_jit_reader = jit_reader_load (so_name);
@@
-288,7
+287,7
@@
get_jit_objfile_data (struct objfile *objf)
objf_data = objfile_data (objf, jit_objfile_data);
if (objf_data == NULL)
{
objf_data = objfile_data (objf, jit_objfile_data);
if (objf_data == NULL)
{
- objf_data = X
ZALLOC
(struct jit_objfile_data);
+ objf_data = X
CNEW
(struct jit_objfile_data);
set_objfile_data (objf, jit_objfile_data, objf_data);
}
set_objfile_data (objf, jit_objfile_data, objf_data);
}
@@
-318,7
+317,7
@@
get_jit_program_space_data (void)
ps_data = program_space_data (current_program_space, jit_program_space_data);
if (ps_data == NULL)
{
ps_data = program_space_data (current_program_space, jit_program_space_data);
if (ps_data == NULL)
{
- ps_data = X
ZALLOC
(struct jit_program_space_data);
+ ps_data = X
CNEW
(struct jit_program_space_data);
set_program_space_data (current_program_space, jit_program_space_data,
ps_data);
}
set_program_space_data (current_program_space, jit_program_space_data,
ps_data);
}
@@
-357,7
+356,8
@@
jit_read_descriptor (struct gdbarch *gdbarch,
if (jit_debug)
fprintf_unfiltered (gdb_stdlog,
"jit_read_descriptor, descriptor_addr = %s\n",
if (jit_debug)
fprintf_unfiltered (gdb_stdlog,
"jit_read_descriptor, descriptor_addr = %s\n",
- paddress (gdbarch, SYMBOL_VALUE_ADDRESS (objf_data->descriptor)));
+ paddress (gdbarch, MSYMBOL_VALUE_ADDRESS (ps_data->objfile,
+ objf_data->descriptor)));
/* Figure out how big the descriptor is on the remote and how to read it. */
ptr_type = builtin_type (gdbarch)->builtin_data_ptr;
/* Figure out how big the descriptor is on the remote and how to read it. */
ptr_type = builtin_type (gdbarch)->builtin_data_ptr;
@@
-366,7
+366,8
@@
jit_read_descriptor (struct gdbarch *gdbarch,
desc_buf = alloca (desc_size);
/* Read the descriptor. */
desc_buf = alloca (desc_size);
/* Read the descriptor. */
- err = target_read_memory (SYMBOL_VALUE_ADDRESS (objf_data->descriptor),
+ err = target_read_memory (MSYMBOL_VALUE_ADDRESS (ps_data->objfile,
+ objf_data->descriptor),
desc_buf, desc_size);
if (err)
{
desc_buf, desc_size);
if (err)
{
@@
-504,7
+505,7
@@
jit_object_open_impl (struct gdb_symbol_callbacks *cb)
/* CB is not required right now, but sometime in the future we might
need a handle to it, and we'd like to do that without breaking
the ABI. */
/* CB is not required right now, but sometime in the future we might
need a handle to it, and we'd like to do that without breaking
the ABI. */
- return X
ZALLOC
(struct gdb_object);
+ return X
CNEW
(struct gdb_object);
}
/* Readers call into this function to open a new gdb_symtab, which,
}
/* Readers call into this function to open a new gdb_symtab, which,
@@
-519,7
+520,7
@@
jit_symtab_open_impl (struct gdb_symbol_callbacks *cb,
/* CB stays unused. See comment in jit_object_open_impl. */
/* CB stays unused. See comment in jit_object_open_impl. */
- ret = X
ZALLOC
(struct gdb_symtab);
+ ret = X
CNEW
(struct gdb_symtab);
ret->file_name = file_name ? xstrdup (file_name) : xstrdup ("");
ret->next = object->symtabs;
object->symtabs = ret;
ret->file_name = file_name ? xstrdup (file_name) : xstrdup ("");
ret->next = object->symtabs;
object->symtabs = ret;
@@
-557,7
+558,7
@@
jit_block_open_impl (struct gdb_symbol_callbacks *cb,
struct gdb_symtab *symtab, struct gdb_block *parent,
GDB_CORE_ADDR begin, GDB_CORE_ADDR end, const char *name)
{
struct gdb_symtab *symtab, struct gdb_block *parent,
GDB_CORE_ADDR begin, GDB_CORE_ADDR end, const char *name)
{
- struct gdb_block *block = X
ZALLOC
(struct gdb_block);
+ struct gdb_block *block = X
CNEW
(struct gdb_block);
block->next = symtab->blocks;
block->begin = (CORE_ADDR) begin;
block->next = symtab->blocks;
block->begin = (CORE_ADDR) begin;
@@
-635,8
+636,10
@@
finalize_symtab (struct gdb_symtab *stab, struct objfile *objfile)
struct symtab *symtab;
struct gdb_block *gdb_block_iter, *gdb_block_iter_tmp;
struct block *block_iter;
struct symtab *symtab;
struct gdb_block *gdb_block_iter, *gdb_block_iter_tmp;
struct block *block_iter;
- int actual_nblocks, i, blockvector_size;
+ int actual_nblocks, i;
+ size_t blockvector_size;
CORE_ADDR begin, end;
CORE_ADDR begin, end;
+ struct blockvector *bv;
actual_nblocks = FIRST_LOCAL_BLOCK + stab->nblocks;
actual_nblocks = FIRST_LOCAL_BLOCK + stab->nblocks;
@@
-647,9
+650,9
@@
finalize_symtab (struct gdb_symtab *stab, struct objfile *objfile)
/* Copy over the linetable entry if one was provided. */
if (stab->linetable)
{
/* Copy over the linetable entry if one was provided. */
if (stab->linetable)
{
-
in
t size = ((stab->linetable->nitems - 1)
- * sizeof (struct linetable_entry)
- + sizeof (struct linetable));
+
size_
t size = ((stab->linetable->nitems - 1)
+
* sizeof (struct linetable_entry)
+
+ sizeof (struct linetable));
LINETABLE (symtab) = obstack_alloc (&objfile->objfile_obstack, size);
memcpy (LINETABLE (symtab), stab->linetable, size);
}
LINETABLE (symtab) = obstack_alloc (&objfile->objfile_obstack, size);
memcpy (LINETABLE (symtab), stab->linetable, size);
}
@@
-660,16
+663,16
@@
finalize_symtab (struct gdb_symtab *stab, struct objfile *objfile)
blockvector_size = (sizeof (struct blockvector)
+ (actual_nblocks - 1) * sizeof (struct block *));
blockvector_size = (sizeof (struct blockvector)
+ (actual_nblocks - 1) * sizeof (struct block *));
- symtab->blockvector = obstack_alloc (&objfile->objfile_obstack,
-
blockvector_size)
;
+ bv = obstack_alloc (&objfile->objfile_obstack, blockvector_size);
+
symtab->blockvector = bv
;
/* (begin, end) will contain the PC range this entire blockvector
spans. */
/* (begin, end) will contain the PC range this entire blockvector
spans. */
- s
ymtab->primary = 1
;
- BLOCKVECTOR_MAP (
symtab->blockvector
) = NULL;
+ s
et_symtab_primary (symtab, 1)
;
+ BLOCKVECTOR_MAP (
bv
) = NULL;
begin = stab->blocks->begin;
end = stab->blocks->end;
begin = stab->blocks->begin;
end = stab->blocks->end;
- BLOCKVECTOR_NBLOCKS (
symtab->blockvector
) = actual_nblocks;
+ BLOCKVECTOR_NBLOCKS (
bv
) = actual_nblocks;
/* First run over all the gdb_block objects, creating a real block
object for each. Simultaneously, keep setting the real_block
/* First run over all the gdb_block objects, creating a real block
object for each. Simultaneously, keep setting the real_block
@@
-704,7
+707,7
@@
finalize_symtab (struct gdb_symtab *stab, struct objfile *objfile)
BLOCK_FUNCTION (new_block) = block_name;
BLOCK_FUNCTION (new_block) = block_name;
- BLOCKVECTOR_BLOCK (
symtab->blockvector
, i) = new_block;
+ BLOCKVECTOR_BLOCK (
bv
, i) = new_block;
if (begin > BLOCK_START (new_block))
begin = BLOCK_START (new_block);
if (end < BLOCK_END (new_block))
if (begin > BLOCK_START (new_block))
begin = BLOCK_START (new_block);
if (end < BLOCK_END (new_block))
@@
-730,7
+733,7
@@
finalize_symtab (struct gdb_symtab *stab, struct objfile *objfile)
BLOCK_START (new_block) = (CORE_ADDR) begin;
BLOCK_END (new_block) = (CORE_ADDR) end;
BLOCK_START (new_block) = (CORE_ADDR) begin;
BLOCK_END (new_block) = (CORE_ADDR) end;
- BLOCKVECTOR_BLOCK (
symtab->blockvector
, i) = new_block;
+ BLOCKVECTOR_BLOCK (
bv
, i) = new_block;
if (i == GLOBAL_BLOCK)
set_block_symtab (new_block, symtab);
if (i == GLOBAL_BLOCK)
set_block_symtab (new_block, symtab);
@@
-753,7
+756,7
@@
finalize_symtab (struct gdb_symtab *stab, struct objfile *objfile)
{
/* And if not, we set a default parent block. */
BLOCK_SUPERBLOCK (gdb_block_iter->real_block) =
{
/* And if not, we set a default parent block. */
BLOCK_SUPERBLOCK (gdb_block_iter->real_block) =
- BLOCKVECTOR_BLOCK (
symtab->blockvector
, STATIC_BLOCK);
+ BLOCKVECTOR_BLOCK (
bv
, STATIC_BLOCK);
}
}
}
}
@@
-785,13
+788,12
@@
jit_object_close_impl (struct gdb_symbol_callbacks *cb,
priv_data = cb->priv_data;
priv_data = cb->priv_data;
- objfile = allocate_objfile (NULL, 0);
- objfile->gdbarch = target_gdbarch ();
+ objfile = allocate_objfile (NULL, "<< JIT compiled code >>",
+ OBJF_NOT_FILENAME);
+ objfile->per_bfd->gdbarch = target_gdbarch ();
terminate_minimal_symbol_table (objfile);
terminate_minimal_symbol_table (objfile);
- objfile->name = "<< JIT compiled code >>";
-
j = NULL;
for (i = obj->symtabs; i; i = j)
{
j = NULL;
for (i = obj->symtabs; i; i = j)
{
@@
-927,7
+929,8
@@
JITed symbol file is not an object file, ignoring it.\n"));
/* This call does not take ownership of SAI. */
make_cleanup_bfd_unref (nbfd);
/* This call does not take ownership of SAI. */
make_cleanup_bfd_unref (nbfd);
- objfile = symbol_file_add_from_bfd (nbfd, 0, sai, OBJF_SHARED, NULL);
+ objfile = symbol_file_add_from_bfd (nbfd, bfd_get_filename (nbfd), 0, sai,
+ OBJF_SHARED | OBJF_NOT_FILENAME, NULL);
do_cleanups (old_cleanups);
add_objfile_entry (objfile, entry_addr);
do_cleanups (old_cleanups);
add_objfile_entry (objfile, entry_addr);
@@
-1016,7
+1019,7
@@
jit_breakpoint_re_set_internal (struct gdbarch *gdbarch,
struct jit_program_space_data *ps_data)
{
struct bound_minimal_symbol reg_symbol;
struct jit_program_space_data *ps_data)
{
struct bound_minimal_symbol reg_symbol;
- struct
minimal_symbol *
desc_symbol;
+ struct
bound_minimal_symbol
desc_symbol;
struct jit_objfile_data *objf_data;
CORE_ADDR addr;
struct jit_objfile_data *objf_data;
CORE_ADDR addr;
@@
-1026,24
+1029,25
@@
jit_breakpoint_re_set_internal (struct gdbarch *gdbarch,
assume we are not attached to a JIT. */
reg_symbol = lookup_minimal_symbol_and_objfile (jit_break_name);
if (reg_symbol.minsym == NULL
assume we are not attached to a JIT. */
reg_symbol = lookup_minimal_symbol_and_objfile (jit_break_name);
if (reg_symbol.minsym == NULL
- ||
SYMBOL_VALUE_ADDRESS (reg_symbol.minsym
) == 0)
+ ||
BMSYMBOL_VALUE_ADDRESS (reg_symbol
) == 0)
return 1;
desc_symbol = lookup_minimal_symbol (jit_descriptor_name, NULL,
reg_symbol.objfile);
return 1;
desc_symbol = lookup_minimal_symbol (jit_descriptor_name, NULL,
reg_symbol.objfile);
- if (desc_symbol == NULL || SYMBOL_VALUE_ADDRESS (desc_symbol) == 0)
+ if (desc_symbol.minsym == NULL
+ || BMSYMBOL_VALUE_ADDRESS (desc_symbol) == 0)
return 1;
objf_data = get_jit_objfile_data (reg_symbol.objfile);
objf_data->register_code = reg_symbol.minsym;
return 1;
objf_data = get_jit_objfile_data (reg_symbol.objfile);
objf_data->register_code = reg_symbol.minsym;
- objf_data->descriptor = desc_symbol;
+ objf_data->descriptor = desc_symbol
.minsym
;
ps_data->objfile = reg_symbol.objfile;
}
else
objf_data = get_jit_objfile_data (ps_data->objfile);
ps_data->objfile = reg_symbol.objfile;
}
else
objf_data = get_jit_objfile_data (ps_data->objfile);
- addr =
SYMBOL_VALUE_ADDRESS (
objf_data->register_code);
+ addr =
MSYMBOL_VALUE_ADDRESS (ps_data->objfile,
objf_data->register_code);
if (jit_debug)
fprintf_unfiltered (gdb_stdlog,
if (jit_debug)
fprintf_unfiltered (gdb_stdlog,
@@
-1181,11
+1185,11
@@
jit_frame_sniffer (const struct frame_unwind *self,
gdb_assert (!*cache);
gdb_assert (!*cache);
- *cache = X
ZALLOC
(struct jit_unwind_private);
+ *cache = X
CNEW
(struct jit_unwind_private);
priv_data = *cache;
priv_data->registers =
priv_data = *cache;
priv_data->registers =
- XC
ALLOC (gdbarch_num_regs (get_frame_arch (this_frame)),
-
struct gdb_reg_value *
);
+ XC
NEWVEC (struct gdb_reg_value *,
+
gdbarch_num_regs (get_frame_arch (this_frame))
);
priv_data->this_frame = this_frame;
callbacks.priv_data = priv_data;
priv_data->this_frame = this_frame;
callbacks.priv_data = priv_data;