compile: Distribute scope, add scope_data
Provide a way to access current 'scope' during the do_module_cleanup stage and associate more data with it. gdb/ChangeLog 2015-05-16 Jan Kratochvil <jan.kratochvil@redhat.com> * cli/cli-script.c (execute_control_command): Update eval_compile_command caller. * compile/compile-object-load.c (compile_object_load): Add parameters scope and scope_data. Set them. * compile/compile-object-load.h (struct compile_module): Add fields scope and scope_data. (compile_object_load): Add parameters scope and scope_data. * compile/compile-object-run.c (struct do_module_cleanup): Add fields scope and scope_data. (compile_object_run): Propagate the fields scope and scope_data. * compile/compile.c (compile_file_command, compile_code_command): Update eval_compile_command callers. (eval_compile_command): Add parameter scope_data. Pass it plus scope. * compile/compile.h (eval_compile_command): Add parameter scope_data. * defs.h (struct command_line): Add field scope_data.
This commit is contained in:
parent
1c88ceb1be
commit
5c65b58a58
8 changed files with 47 additions and 9 deletions
|
@ -1,3 +1,21 @@
|
||||||
|
2015-05-16 Jan Kratochvil <jan.kratochvil@redhat.com>
|
||||||
|
|
||||||
|
* cli/cli-script.c (execute_control_command): Update
|
||||||
|
eval_compile_command caller.
|
||||||
|
* compile/compile-object-load.c (compile_object_load): Add parameters
|
||||||
|
scope and scope_data. Set them.
|
||||||
|
* compile/compile-object-load.h (struct compile_module): Add fields
|
||||||
|
scope and scope_data.
|
||||||
|
(compile_object_load): Add parameters scope and scope_data.
|
||||||
|
* compile/compile-object-run.c (struct do_module_cleanup): Add fields
|
||||||
|
scope and scope_data.
|
||||||
|
(compile_object_run): Propagate the fields scope and scope_data.
|
||||||
|
* compile/compile.c (compile_file_command, compile_code_command):
|
||||||
|
Update eval_compile_command callers.
|
||||||
|
(eval_compile_command): Add parameter scope_data. Pass it plus scope.
|
||||||
|
* compile/compile.h (eval_compile_command): Add parameter scope_data.
|
||||||
|
* defs.h (struct command_line): Add field scope_data.
|
||||||
|
|
||||||
2015-05-16 Jan Kratochvil <jan.kratochvil@redhat.com>
|
2015-05-16 Jan Kratochvil <jan.kratochvil@redhat.com>
|
||||||
|
|
||||||
* printcmd.c (struct format_data): Move it to valprint.h.
|
* printcmd.c (struct format_data): Move it to valprint.h.
|
||||||
|
|
|
@ -615,7 +615,8 @@ execute_control_command (struct command_line *cmd)
|
||||||
}
|
}
|
||||||
|
|
||||||
case compile_control:
|
case compile_control:
|
||||||
eval_compile_command (cmd, NULL, cmd->control_u.compile.scope);
|
eval_compile_command (cmd, NULL, cmd->control_u.compile.scope,
|
||||||
|
cmd->control_u.compile.scope_data);
|
||||||
ret = simple_control;
|
ret = simple_control;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
|
|
@ -464,7 +464,8 @@ store_regs (struct type *regs_type, CORE_ADDR regs_base)
|
||||||
function returns. */
|
function returns. */
|
||||||
|
|
||||||
struct compile_module *
|
struct compile_module *
|
||||||
compile_object_load (const char *object_file, const char *source_file)
|
compile_object_load (const char *object_file, const char *source_file,
|
||||||
|
enum compile_i_scope_types scope, void *scope_data)
|
||||||
{
|
{
|
||||||
struct cleanup *cleanups, *cleanups_free_objfile;
|
struct cleanup *cleanups, *cleanups_free_objfile;
|
||||||
bfd *abfd;
|
bfd *abfd;
|
||||||
|
@ -597,5 +598,7 @@ compile_object_load (const char *object_file, const char *source_file)
|
||||||
retval->source_file = xstrdup (source_file);
|
retval->source_file = xstrdup (source_file);
|
||||||
retval->func_addr = func_addr;
|
retval->func_addr = func_addr;
|
||||||
retval->regs_addr = regs_addr;
|
retval->regs_addr = regs_addr;
|
||||||
|
retval->scope = scope;
|
||||||
|
retval->scope_data = scope_data;
|
||||||
return retval;
|
return retval;
|
||||||
}
|
}
|
||||||
|
|
|
@ -31,9 +31,16 @@ struct compile_module
|
||||||
/* Inferior registers address or NULL if the inferior function does not
|
/* Inferior registers address or NULL if the inferior function does not
|
||||||
require any. */
|
require any. */
|
||||||
CORE_ADDR regs_addr;
|
CORE_ADDR regs_addr;
|
||||||
|
|
||||||
|
/* The "scope" of this compilation. */
|
||||||
|
enum compile_i_scope_types scope;
|
||||||
|
|
||||||
|
/* User data for SCOPE in use. */
|
||||||
|
void *scope_data;
|
||||||
};
|
};
|
||||||
|
|
||||||
extern struct compile_module *compile_object_load (const char *object_file,
|
extern struct compile_module *compile_object_load
|
||||||
const char *source_file);
|
(const char *object_file, const char *source_file,
|
||||||
|
enum compile_i_scope_types scope, void *scope_data);
|
||||||
|
|
||||||
#endif /* GDB_COMPILE_OBJECT_LOAD_H */
|
#endif /* GDB_COMPILE_OBJECT_LOAD_H */
|
||||||
|
|
|
@ -36,6 +36,10 @@ struct do_module_cleanup
|
||||||
/* .c file OBJFILE was built from. It needs to be xfree-d. */
|
/* .c file OBJFILE was built from. It needs to be xfree-d. */
|
||||||
char *source_file;
|
char *source_file;
|
||||||
|
|
||||||
|
/* Copy from struct compile_module. */
|
||||||
|
enum compile_i_scope_types scope;
|
||||||
|
void *scope_data;
|
||||||
|
|
||||||
/* objfile_name of our objfile. */
|
/* objfile_name of our objfile. */
|
||||||
char objfile_name_string[1];
|
char objfile_name_string[1];
|
||||||
};
|
};
|
||||||
|
@ -96,6 +100,8 @@ compile_object_run (struct compile_module *module)
|
||||||
data->executedp = &executed;
|
data->executedp = &executed;
|
||||||
data->source_file = xstrdup (module->source_file);
|
data->source_file = xstrdup (module->source_file);
|
||||||
strcpy (data->objfile_name_string, objfile_name_s);
|
strcpy (data->objfile_name_string, objfile_name_s);
|
||||||
|
data->scope = module->scope;
|
||||||
|
data->scope_data = module->scope_data;
|
||||||
|
|
||||||
xfree (module->source_file);
|
xfree (module->source_file);
|
||||||
xfree (module);
|
xfree (module);
|
||||||
|
|
|
@ -117,7 +117,7 @@ compile_file_command (char *arg, int from_tty)
|
||||||
make_cleanup (xfree, arg);
|
make_cleanup (xfree, arg);
|
||||||
buffer = xstrprintf ("#include \"%s\"\n", arg);
|
buffer = xstrprintf ("#include \"%s\"\n", arg);
|
||||||
make_cleanup (xfree, buffer);
|
make_cleanup (xfree, buffer);
|
||||||
eval_compile_command (NULL, buffer, scope);
|
eval_compile_command (NULL, buffer, scope, NULL);
|
||||||
do_cleanups (cleanup);
|
do_cleanups (cleanup);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -150,7 +150,7 @@ compile_code_command (char *arg, int from_tty)
|
||||||
}
|
}
|
||||||
|
|
||||||
if (arg && *arg)
|
if (arg && *arg)
|
||||||
eval_compile_command (NULL, arg, scope);
|
eval_compile_command (NULL, arg, scope, NULL);
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
struct command_line *l = get_command_line (compile_control, "");
|
struct command_line *l = get_command_line (compile_control, "");
|
||||||
|
@ -560,7 +560,7 @@ compile_command (char *args, int from_tty)
|
||||||
|
|
||||||
void
|
void
|
||||||
eval_compile_command (struct command_line *cmd, const char *cmd_string,
|
eval_compile_command (struct command_line *cmd, const char *cmd_string,
|
||||||
enum compile_i_scope_types scope)
|
enum compile_i_scope_types scope, void *scope_data)
|
||||||
{
|
{
|
||||||
char *object_file, *source_file;
|
char *object_file, *source_file;
|
||||||
|
|
||||||
|
@ -574,7 +574,8 @@ eval_compile_command (struct command_line *cmd, const char *cmd_string,
|
||||||
make_cleanup (xfree, source_file);
|
make_cleanup (xfree, source_file);
|
||||||
cleanup_unlink = make_cleanup (cleanup_unlink_file, object_file);
|
cleanup_unlink = make_cleanup (cleanup_unlink_file, object_file);
|
||||||
make_cleanup (cleanup_unlink_file, source_file);
|
make_cleanup (cleanup_unlink_file, source_file);
|
||||||
compile_module = compile_object_load (object_file, source_file);
|
compile_module = compile_object_load (object_file, source_file,
|
||||||
|
scope, scope_data);
|
||||||
discard_cleanups (cleanup_unlink);
|
discard_cleanups (cleanup_unlink);
|
||||||
do_cleanups (cleanup_xfree);
|
do_cleanups (cleanup_xfree);
|
||||||
compile_object_run (compile_module);
|
compile_object_run (compile_module);
|
||||||
|
|
|
@ -30,7 +30,8 @@ struct dynamic_prop;
|
||||||
|
|
||||||
extern void eval_compile_command (struct command_line *cmd,
|
extern void eval_compile_command (struct command_line *cmd,
|
||||||
const char *cmd_string,
|
const char *cmd_string,
|
||||||
enum compile_i_scope_types scope);
|
enum compile_i_scope_types scope,
|
||||||
|
void *scope_data);
|
||||||
|
|
||||||
/* Compile a DWARF location expression to C, suitable for use by the
|
/* Compile a DWARF location expression to C, suitable for use by the
|
||||||
compiler.
|
compiler.
|
||||||
|
|
|
@ -397,6 +397,7 @@ struct command_line
|
||||||
struct
|
struct
|
||||||
{
|
{
|
||||||
enum compile_i_scope_types scope;
|
enum compile_i_scope_types scope;
|
||||||
|
void *scope_data;
|
||||||
}
|
}
|
||||||
compile;
|
compile;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue