X-Git-Url: http://drtracing.org/?a=blobdiff_plain;f=gdb%2Fgdbarch.c;h=26dd4043a609532b967915d9f01747f3d3a81244;hb=f5656eadf4383cc733b96ff49ba8efbea6922ad3;hp=8d009f344df7604eb99c6dad66feeb9cf042e9a8;hpb=a79378d4510226bd2df9e6eb776c125bdb875755;p=deliverable%2Fbinutils-gdb.git diff --git a/gdb/gdbarch.c b/gdb/gdbarch.c index 8d009f344d..26dd4043a6 100644 --- a/gdb/gdbarch.c +++ b/gdb/gdbarch.c @@ -1,4 +1,5 @@ -/* *INDENT-OFF* */ /* THIS FILE IS GENERATED */ +/* *INDENT-OFF* */ /* THIS FILE IS GENERATED -*- buffer-read-only: t -*- */ +/* vi:set ro: */ /* Dynamic architecture support for GDB, the GNU debugger. @@ -49,6 +50,7 @@ #include "gdb_obstack.h" #include "observer.h" #include "regcache.h" +#include "objfiles.h" /* Static function declarations */ @@ -59,7 +61,7 @@ static void alloc_gdbarch_data (struct gdbarch *); #ifndef GDBARCH_DEBUG #define GDBARCH_DEBUG 0 #endif -int gdbarch_debug = GDBARCH_DEBUG; +unsigned int gdbarch_debug = GDBARCH_DEBUG; static void show_gdbarch_debug (struct ui_file *file, int from_tty, struct cmd_list_element *c, const char *value) @@ -111,9 +113,6 @@ struct gdbarch unsigned nr_data; void **data; - /* per-architecture swap-regions. */ - struct gdbarch_swap *swap; - /* Multi-arch values. When extending this structure you must: @@ -199,6 +198,7 @@ struct gdbarch gdbarch_address_to_pointer_ftype *address_to_pointer; gdbarch_integer_to_address_ftype *integer_to_address; gdbarch_return_value_ftype *return_value; + gdbarch_return_in_first_hidden_param_p_ftype *return_in_first_hidden_param_p; gdbarch_skip_prologue_ftype *skip_prologue; gdbarch_skip_main_prologue_ftype *skip_main_prologue; gdbarch_inner_than_ftype *inner_than; @@ -260,7 +260,7 @@ struct gdbarch int sofun_address_maybe_missing; gdbarch_process_record_ftype *process_record; gdbarch_process_record_signal_ftype *process_record_signal; - gdbarch_target_signal_from_host_ftype *target_signal_from_host; + gdbarch_gdb_signal_from_target_ftype *gdb_signal_from_target; gdbarch_get_siginfo_type_ftype *get_siginfo_type; gdbarch_record_special_symbol_ftype *record_special_symbol; gdbarch_get_syscall_number_ftype *get_syscall_number; @@ -284,6 +284,7 @@ struct gdbarch int has_dos_based_file_system; gdbarch_gen_return_address_ftype *gen_return_address; gdbarch_info_proc_ftype *info_proc; + gdbarch_iterate_over_objfiles_in_search_order_ftype *iterate_over_objfiles_in_search_order; }; @@ -304,8 +305,8 @@ struct gdbarch startup_gdbarch = 0, /* target_desc */ /* target specific vector and its dump routine. */ NULL, NULL, - /*per-architecture data-pointers and swap regions. */ - 0, NULL, NULL, + /*per-architecture data-pointers. */ + 0, NULL, /* Multi-arch values */ 1, /* bits_big_endian */ 8 * sizeof (short), /* short_bit */ @@ -366,6 +367,7 @@ struct gdbarch startup_gdbarch = unsigned_address_to_pointer, /* address_to_pointer */ 0, /* integer_to_address */ 0, /* return_value */ + default_return_in_first_hidden_param_p, /* return_in_first_hidden_param_p */ 0, /* skip_prologue */ 0, /* skip_main_prologue */ 0, /* inner_than */ @@ -427,7 +429,7 @@ struct gdbarch startup_gdbarch = 0, /* sofun_address_maybe_missing */ 0, /* process_record */ 0, /* process_record_signal */ - default_target_signal_from_host, /* target_signal_from_host */ + 0, /* gdb_signal_from_target */ 0, /* get_siginfo_type */ 0, /* record_special_symbol */ 0, /* get_syscall_number */ @@ -451,10 +453,10 @@ struct gdbarch startup_gdbarch = 0, /* has_dos_based_file_system */ default_gen_return_address, /* gen_return_address */ 0, /* info_proc */ + default_iterate_over_objfiles_in_search_order, /* iterate_over_objfiles_in_search_order */ /* startup_gdbarch() */ }; -struct gdbarch *target_gdbarch = &startup_gdbarch; /* Create a new ``struct gdbarch'' based on information provided by ``struct gdbarch_info''. */ @@ -516,6 +518,7 @@ gdbarch_alloc (const struct gdbarch_info *info, gdbarch->value_from_register = default_value_from_register; gdbarch->pointer_to_address = unsigned_pointer_to_address; gdbarch->address_to_pointer = unsigned_address_to_pointer; + gdbarch->return_in_first_hidden_param_p = default_return_in_first_hidden_param_p; gdbarch->remote_breakpoint_from_pc = default_remote_breakpoint_from_pc; gdbarch->memory_insert_breakpoint = default_memory_insert_breakpoint; gdbarch->memory_remove_breakpoint = default_memory_remove_breakpoint; @@ -536,12 +539,12 @@ gdbarch_alloc (const struct gdbarch_info *info, gdbarch->displaced_step_free_closure = NULL; gdbarch->displaced_step_location = NULL; gdbarch->relocate_instruction = NULL; - gdbarch->target_signal_from_host = default_target_signal_from_host; gdbarch->has_shared_address_space = default_has_shared_address_space; gdbarch->fast_tracepoint_valid_at = default_fast_tracepoint_valid_at; gdbarch->auto_charset = default_auto_charset; gdbarch->auto_wide_charset = default_auto_wide_charset; gdbarch->gen_return_address = default_gen_return_address; + gdbarch->iterate_over_objfiles_in_search_order = default_iterate_over_objfiles_in_search_order; /* gdbarch_alloc() */ return gdbarch; @@ -662,6 +665,7 @@ verify_gdbarch (struct gdbarch *gdbarch) /* Skip verify of address_to_pointer, invalid_p == 0 */ /* Skip verify of integer_to_address, has predicate. */ /* Skip verify of return_value, has predicate. */ + /* Skip verify of return_in_first_hidden_param_p, invalid_p == 0 */ if (gdbarch->skip_prologue == 0) fprintf_unfiltered (log, "\n\tskip_prologue"); /* Skip verify of skip_main_prologue, has predicate. */ @@ -727,7 +731,7 @@ verify_gdbarch (struct gdbarch *gdbarch) /* Skip verify of sofun_address_maybe_missing, invalid_p == 0 */ /* Skip verify of process_record, has predicate. */ /* Skip verify of process_record_signal, has predicate. */ - /* Skip verify of target_signal_from_host, invalid_p == 0 */ + /* Skip verify of gdb_signal_from_target, has predicate. */ /* Skip verify of get_siginfo_type, has predicate. */ /* Skip verify of record_special_symbol, has predicate. */ /* Skip verify of get_syscall_number, has predicate. */ @@ -750,6 +754,7 @@ verify_gdbarch (struct gdbarch *gdbarch) /* Skip verify of has_dos_based_file_system, invalid_p == 0 */ /* Skip verify of gen_return_address, invalid_p == 0 */ /* Skip verify of info_proc, has predicate. */ + /* Skip verify of iterate_over_objfiles_in_search_order, invalid_p == 0 */ buf = ui_file_xstrdup (log, &length); make_cleanup (xfree, buf); if (length > 0) @@ -995,6 +1000,12 @@ gdbarch_dump (struct gdbarch *gdbarch, struct ui_file *file) fprintf_unfiltered (file, "gdbarch_dump: gcore_bfd_target = %s\n", pstring (gdbarch->gcore_bfd_target)); + fprintf_unfiltered (file, + "gdbarch_dump: gdbarch_gdb_signal_from_target_p() = %d\n", + gdbarch_gdb_signal_from_target_p (gdbarch)); + fprintf_unfiltered (file, + "gdbarch_dump: gdb_signal_from_target = <%s>\n", + host_address_to_string (gdbarch->gdb_signal_from_target)); fprintf_unfiltered (file, "gdbarch_dump: gen_return_address = <%s>\n", host_address_to_string (gdbarch->gen_return_address)); @@ -1061,6 +1072,9 @@ gdbarch_dump (struct gdbarch *gdbarch, struct ui_file *file) fprintf_unfiltered (file, "gdbarch_dump: integer_to_address = <%s>\n", host_address_to_string (gdbarch->integer_to_address)); + fprintf_unfiltered (file, + "gdbarch_dump: iterate_over_objfiles_in_search_order = <%s>\n", + host_address_to_string (gdbarch->iterate_over_objfiles_in_search_order)); fprintf_unfiltered (file, "gdbarch_dump: long_bit = %s\n", plongest (gdbarch->long_bit)); @@ -1229,6 +1243,9 @@ gdbarch_dump (struct gdbarch *gdbarch, struct ui_file *file) fprintf_unfiltered (file, "gdbarch_dump: remote_register_number = <%s>\n", host_address_to_string (gdbarch->remote_register_number)); + fprintf_unfiltered (file, + "gdbarch_dump: return_in_first_hidden_param_p = <%s>\n", + host_address_to_string (gdbarch->return_in_first_hidden_param_p)); fprintf_unfiltered (file, "gdbarch_dump: gdbarch_return_value_p() = %d\n", gdbarch_return_value_p (gdbarch)); @@ -1294,16 +1311,16 @@ gdbarch_dump (struct gdbarch *gdbarch, struct ui_file *file) host_address_to_string (gdbarch->stabs_argument_has_addr)); fprintf_unfiltered (file, "gdbarch_dump: stap_gdb_register_prefix = %s\n", - gdbarch->stap_gdb_register_prefix); + pstring (gdbarch->stap_gdb_register_prefix)); fprintf_unfiltered (file, "gdbarch_dump: stap_gdb_register_suffix = %s\n", - gdbarch->stap_gdb_register_suffix); + pstring (gdbarch->stap_gdb_register_suffix)); fprintf_unfiltered (file, "gdbarch_dump: stap_integer_prefix = %s\n", - gdbarch->stap_integer_prefix); + pstring (gdbarch->stap_integer_prefix)); fprintf_unfiltered (file, "gdbarch_dump: stap_integer_suffix = %s\n", - gdbarch->stap_integer_suffix); + pstring (gdbarch->stap_integer_suffix)); fprintf_unfiltered (file, "gdbarch_dump: gdbarch_stap_is_single_operand_p() = %d\n", gdbarch_stap_is_single_operand_p (gdbarch)); @@ -1318,16 +1335,16 @@ gdbarch_dump (struct gdbarch *gdbarch, struct ui_file *file) host_address_to_string (gdbarch->stap_parse_special_token)); fprintf_unfiltered (file, "gdbarch_dump: stap_register_indirection_prefix = %s\n", - gdbarch->stap_register_indirection_prefix); + pstring (gdbarch->stap_register_indirection_prefix)); fprintf_unfiltered (file, "gdbarch_dump: stap_register_indirection_suffix = %s\n", - gdbarch->stap_register_indirection_suffix); + pstring (gdbarch->stap_register_indirection_suffix)); fprintf_unfiltered (file, "gdbarch_dump: stap_register_prefix = %s\n", - gdbarch->stap_register_prefix); + pstring (gdbarch->stap_register_prefix)); fprintf_unfiltered (file, "gdbarch_dump: stap_register_suffix = %s\n", - gdbarch->stap_register_suffix); + pstring (gdbarch->stap_register_suffix)); fprintf_unfiltered (file, "gdbarch_dump: gdbarch_static_transform_name_p() = %d\n", gdbarch_static_transform_name_p (gdbarch)); @@ -1337,9 +1354,6 @@ gdbarch_dump (struct gdbarch *gdbarch, struct ui_file *file) fprintf_unfiltered (file, "gdbarch_dump: target_desc = %s\n", host_address_to_string (gdbarch->target_desc)); - fprintf_unfiltered (file, - "gdbarch_dump: target_signal_from_host = <%s>\n", - host_address_to_string (gdbarch->target_signal_from_host)); fprintf_unfiltered (file, "gdbarch_dump: gdbarch_unwind_pc_p() = %d\n", gdbarch_unwind_pc_p (gdbarch)); @@ -2545,6 +2559,23 @@ set_gdbarch_return_value (struct gdbarch *gdbarch, gdbarch->return_value = return_value; } +int +gdbarch_return_in_first_hidden_param_p (struct gdbarch *gdbarch, struct type *type) +{ + gdb_assert (gdbarch != NULL); + gdb_assert (gdbarch->return_in_first_hidden_param_p != NULL); + if (gdbarch_debug >= 2) + fprintf_unfiltered (gdb_stdlog, "gdbarch_return_in_first_hidden_param_p called\n"); + return gdbarch->return_in_first_hidden_param_p (gdbarch, type); +} + +void +set_gdbarch_return_in_first_hidden_param_p (struct gdbarch *gdbarch, + gdbarch_return_in_first_hidden_param_p_ftype return_in_first_hidden_param_p) +{ + gdbarch->return_in_first_hidden_param_p = return_in_first_hidden_param_p; +} + CORE_ADDR gdbarch_skip_prologue (struct gdbarch *gdbarch, CORE_ADDR ip) { @@ -3771,7 +3802,7 @@ gdbarch_process_record_signal_p (struct gdbarch *gdbarch) } int -gdbarch_process_record_signal (struct gdbarch *gdbarch, struct regcache *regcache, enum target_signal signal) +gdbarch_process_record_signal (struct gdbarch *gdbarch, struct regcache *regcache, enum gdb_signal signal) { gdb_assert (gdbarch != NULL); gdb_assert (gdbarch->process_record_signal != NULL); @@ -3787,21 +3818,28 @@ set_gdbarch_process_record_signal (struct gdbarch *gdbarch, gdbarch->process_record_signal = process_record_signal; } -enum target_signal -gdbarch_target_signal_from_host (struct gdbarch *gdbarch, int signo) +int +gdbarch_gdb_signal_from_target_p (struct gdbarch *gdbarch) { gdb_assert (gdbarch != NULL); - gdb_assert (gdbarch->target_signal_from_host != NULL); + return gdbarch->gdb_signal_from_target != NULL; +} + +enum gdb_signal +gdbarch_gdb_signal_from_target (struct gdbarch *gdbarch, int signo) +{ + gdb_assert (gdbarch != NULL); + gdb_assert (gdbarch->gdb_signal_from_target != NULL); if (gdbarch_debug >= 2) - fprintf_unfiltered (gdb_stdlog, "gdbarch_target_signal_from_host called\n"); - return gdbarch->target_signal_from_host (gdbarch, signo); + fprintf_unfiltered (gdb_stdlog, "gdbarch_gdb_signal_from_target called\n"); + return gdbarch->gdb_signal_from_target (gdbarch, signo); } void -set_gdbarch_target_signal_from_host (struct gdbarch *gdbarch, - gdbarch_target_signal_from_host_ftype target_signal_from_host) +set_gdbarch_gdb_signal_from_target (struct gdbarch *gdbarch, + gdbarch_gdb_signal_from_target_ftype gdb_signal_from_target) { - gdbarch->target_signal_from_host = target_signal_from_host; + gdbarch->gdb_signal_from_target = gdb_signal_from_target; } int @@ -4236,6 +4274,23 @@ set_gdbarch_info_proc (struct gdbarch *gdbarch, gdbarch->info_proc = info_proc; } +void +gdbarch_iterate_over_objfiles_in_search_order (struct gdbarch *gdbarch, iterate_over_objfiles_in_search_order_cb_ftype *cb, void *cb_data, struct objfile *current_objfile) +{ + gdb_assert (gdbarch != NULL); + gdb_assert (gdbarch->iterate_over_objfiles_in_search_order != NULL); + if (gdbarch_debug >= 2) + fprintf_unfiltered (gdb_stdlog, "gdbarch_iterate_over_objfiles_in_search_order called\n"); + gdbarch->iterate_over_objfiles_in_search_order (gdbarch, cb, cb_data, current_objfile); +} + +void +set_gdbarch_iterate_over_objfiles_in_search_order (struct gdbarch *gdbarch, + gdbarch_iterate_over_objfiles_in_search_order_ftype iterate_over_objfiles_in_search_order) +{ + gdbarch->iterate_over_objfiles_in_search_order = iterate_over_objfiles_in_search_order; +} + /* Keep a registry of per-architecture data-pointers required by GDB modules. */ @@ -4615,17 +4670,25 @@ deprecated_target_gdbarch_select_hack (struct gdbarch *new_gdbarch) { gdb_assert (new_gdbarch != NULL); gdb_assert (new_gdbarch->initialized_p); - target_gdbarch = new_gdbarch; + current_inferior ()->gdbarch = new_gdbarch; observer_notify_architecture_changed (new_gdbarch); registers_changed (); } +/* Return the current inferior's arch. */ + +struct gdbarch * +target_gdbarch (void) +{ + return current_inferior ()->gdbarch; +} + extern void _initialize_gdbarch (void); void _initialize_gdbarch (void) { - add_setshow_zinteger_cmd ("arch", class_maintenance, &gdbarch_debug, _("\ + add_setshow_zuinteger_cmd ("arch", class_maintenance, &gdbarch_debug, _("\ Set architecture debugging."), _("\ Show architecture debugging."), _("\ When non-zero, architecture debugging is enabled."),