From 094722a6bfbe1170cf846446dcd4d628b068acf5 Mon Sep 17 00:00:00 2001 From: Pedro Alves Date: Fri, 9 Nov 2012 01:47:13 +0000 Subject: gdb/ 2012-11-09 Pedro Alves * gdbarch.sh (target_gdbarch) : Reimplement as macro. (get_target_gdbarch) : New function. (startup_gdbarch) : Declare. (target_gdbarch): Delete. (deprecated_target_gdbarch_select_hack): Set the current inferior's gdbarch. (get_target_gdbarch): New function. * inferior.c: Include target-descriptions.h. (free_inferior): Free target description info. (add_inferior_with_spaces): Set the inferior's initial architecture. (clone_inferior_command): Copy the original inferior's target description if it was user specified. (initialize_inferiors): Add comment. * inferior.h (struct target_desc_info): Forward declare. (struct inferior) : New field. * linux-nat.c: Include target-descriptions.h. (linux_child_follow_fork): Copy the parent's architecture and target description to the child. * target-descriptions.c: Include inferior.h. (struct target_desc_info): New structure, holding the equivalents of ... (target_desc_fetched, current_target_desc) (target_description_filename): ... these removed globals. (get_tdesc_info, target_desc_info_from_user_p) (copy_inferior_target_desc_info, target_desc_info_free): New. (target_desc_fetched, current_target_desc) (target_description_filename): Reimplemented as convenience macros. (tdesc_filename_cmd_string): New global. (set_tdesc_filename_cmd): Copy the string manipulated by the "set tdescs filename ..." commands to the per-inferior equivalent. (show_tdesc_filename_cmd): Get the value to show from the per-inferior description filename. (_initilize_target_descriptions): Change the "set/show tdesc filename" commands' variable. * target-descriptions.h (struct target_desc, struct target_desc_info) (struct inferior): Forward declare. (target_find_description, target_clear_description) (target_current_description): Adjust comments. (copy_inferior_target_desc_info, target_desc_info_free) (target_desc_info_from_user_p). Declare. gdb/testsuite/ 2012-11-09 Pedro Alves * gdb.multi/multi-arch.exp: New. --- gdb/inferior.c | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) (limited to 'gdb/inferior.c') diff --git a/gdb/inferior.c b/gdb/inferior.c index f46e1e336cc..5bb15140ec4 100644 --- a/gdb/inferior.c +++ b/gdb/inferior.c @@ -33,6 +33,8 @@ #include "environ.h" #include "cli/cli-utils.h" #include "continuations.h" +#include "arch-utils.h" +#include "target-descriptions.h" void _initialize_inferiors (void); @@ -98,6 +100,7 @@ free_inferior (struct inferior *inf) xfree (inf->args); xfree (inf->terminal); free_environ (inf->environment); + target_desc_info_free (inf->tdesc_info); xfree (inf->private); xfree (inf); } @@ -794,6 +797,7 @@ add_inferior_with_spaces (void) struct address_space *aspace; struct program_space *pspace; struct inferior *inf; + struct gdbarch_info info; /* If all inferiors share an address space on this system, this doesn't really return a new address space; otherwise, it @@ -804,6 +808,14 @@ add_inferior_with_spaces (void) inf->pspace = pspace; inf->aspace = pspace->aspace; + /* Setup the inferior's initial arch, based on information obtained + from the global "set ..." options. */ + gdbarch_info_init (&info); + inf->gdbarch = gdbarch_find_by_info (info); + /* The "set ..." options reject invalid settings, so we should + always have a valid arch by now. */ + gdb_assert (inf->gdbarch != NULL); + return inf; } @@ -942,6 +954,12 @@ clone_inferior_command (char *args, int from_tty) inf = add_inferior (0); inf->pspace = pspace; inf->aspace = pspace->aspace; + inf->gdbarch = orginf->gdbarch; + + /* If the original inferior had a user specified target + description, make the clone use it too. */ + if (target_desc_info_from_user_p (inf->tdesc_info)) + copy_inferior_target_desc_info (inf, orginf); printf_filtered (_("Added inferior %d.\n"), inf->num); @@ -977,6 +995,8 @@ initialize_inferiors (void) current_inferior_ = add_inferior (0); current_inferior_->pspace = current_program_space; current_inferior_->aspace = current_program_space->aspace; + /* The architecture will be initialized shortly, by + initialize_current_architecture. */ add_info ("inferiors", info_inferiors_command, _("IDs of specified inferiors (all inferiors if no argument).")); -- cgit v1.2.1