This is the mail archive of the
gdb-patches@sources.redhat.com
mailing list for the GDB project.
[commit] Consolidate current_gdbarch swap code
- From: Andrew Cagney <cagney at gnu dot org>
- To: gdb-patches at sources dot redhat dot com
- Date: Sun, 09 Nov 2003 21:51:39 -0500
- Subject: [commit] Consolidate current_gdbarch swap code
Hello,
The attached consolidates the current_gdbarch swap code, replacing:
-static void init_gdbarch_swap (struct gdbarch *);
-static void clear_gdbarch_swap (struct gdbarch *);
-static void swapout_gdbarch_swap (struct gdbarch *);
-static void swapin_gdbarch_swap (struct gdbarch *);
with:
+void current_gdbarch_swap_init_hack (void)
+struct gdbarch *current_gdbarch_swap_out_hack (void)
+void current_gdbarch_swap_in_hack (struct gdbarch *new_gdbarch)
The main intent is to make it very clear how these methods are:
- hacks
- rely on a valid current_gdbarch
committed,
Andrew
2003-11-09 Andrew Cagney <cagney@redhat.com>
* gdbarch.sh (clear_gdbarch_swap): Delete function.
(swapout_gdbarch_swap): Delete function.
(swapin_gdbarch_swap): Delete function.
(init_gdbarch_swap): Delete function.
(initialize_non_multiarch): Delete function.
(current_gdbarch_swap_in_hack): New function.
(current_gdbarch_swap_out_hack): New function.
(current_gdbarch_swap_init_hack): New function.
* gdbarch.c: Re-generate.
Index: gdbarch.sh
===================================================================
RCS file: /cvs/src/src/gdb/gdbarch.sh,v
retrieving revision 1.283
diff -u -r1.283 gdbarch.sh
--- gdbarch.sh 10 Nov 2003 01:10:55 -0000 1.283
+++ gdbarch.sh 10 Nov 2003 02:17:38 -0000
@@ -1250,11 +1250,6 @@
extern void initialize_current_architecture (void);
-/* For non-multiarched targets, do any initialization of the default
- gdbarch object necessary after the _initialize_MODULE functions
- have run. */
-extern void initialize_non_multiarch (void);
-
/* gdbarch trace variable */
extern int gdbarch_debug;
@@ -1295,10 +1290,6 @@
/* Static function declarations */
static void alloc_gdbarch_data (struct gdbarch *);
-static void init_gdbarch_swap (struct gdbarch *);
-static void clear_gdbarch_swap (struct gdbarch *);
-static void swapout_gdbarch_swap (struct gdbarch *);
-static void swapin_gdbarch_swap (struct gdbarch *);
/* Non-zero if we want to trace architecture code. */
@@ -1422,24 +1413,11 @@
};
struct gdbarch *current_gdbarch = &startup_gdbarch;
-
-/* Do any initialization needed for a non-multiarch configuration
- after the _initialize_MODULE functions have been run. */
-void
-initialize_non_multiarch (void)
-{
- alloc_gdbarch_data (&startup_gdbarch);
- /* Ensure that all swap areas are zeroed so that they again think
- they are starting from scratch. */
- clear_gdbarch_swap (&startup_gdbarch);
- init_gdbarch_swap (&startup_gdbarch);
-}
EOF
# Create a new gdbarch struct
-printf "\n"
-printf "\n"
cat <<EOF
+
/* Create a new \`\`struct gdbarch'' based on information provided by
\`\`struct gdbarch_info''. */
EOF
@@ -1959,31 +1937,21 @@
}
static void
-clear_gdbarch_swap (struct gdbarch *gdbarch)
-{
- struct gdbarch_swap *curr;
- for (curr = gdbarch->swap;
- curr != NULL;
- curr = curr->next)
- {
- memset (curr->source->data, 0, curr->source->sizeof_data);
- }
-}
-
-static void
-init_gdbarch_swap (struct gdbarch *gdbarch)
+current_gdbarch_swap_init_hack (void)
{
struct gdbarch_swap_registration *rego;
- struct gdbarch_swap **curr = &gdbarch->swap;
+ struct gdbarch_swap **curr = ¤t_gdbarch->swap;
for (rego = gdbarch_swap_registry.registrations;
rego != NULL;
rego = rego->next)
{
if (rego->data != NULL)
{
- (*curr) = GDBARCH_OBSTACK_ZALLOC (gdbarch, struct gdbarch_swap);
+ (*curr) = GDBARCH_OBSTACK_ZALLOC (current_gdbarch,
+ struct gdbarch_swap);
(*curr)->source = rego;
- (*curr)->swap = gdbarch_obstack_zalloc (gdbarch, rego->sizeof_data);
+ (*curr)->swap = gdbarch_obstack_zalloc (current_gdbarch,
+ rego->sizeof_data);
(*curr)->next = NULL;
curr = &(*curr)->next;
}
@@ -1992,24 +1960,35 @@
}
}
-static void
-swapout_gdbarch_swap (struct gdbarch *gdbarch)
+static struct gdbarch *
+current_gdbarch_swap_out_hack (void)
{
+ struct gdbarch *old_gdbarch = current_gdbarch;
struct gdbarch_swap *curr;
- for (curr = gdbarch->swap;
+
+ gdb_assert (old_gdbarch != NULL);
+ for (curr = old_gdbarch->swap;
curr != NULL;
curr = curr->next)
- memcpy (curr->swap, curr->source->data, curr->source->sizeof_data);
+ {
+ memcpy (curr->swap, curr->source->data, curr->source->sizeof_data);
+ memset (curr->source->data, 0, curr->source->sizeof_data);
+ }
+ current_gdbarch = NULL;
+ return old_gdbarch;
}
static void
-swapin_gdbarch_swap (struct gdbarch *gdbarch)
+current_gdbarch_swap_in_hack (struct gdbarch *new_gdbarch)
{
struct gdbarch_swap *curr;
- for (curr = gdbarch->swap;
+
+ gdb_assert (current_gdbarch == NULL);
+ for (curr = new_gdbarch->swap;
curr != NULL;
curr = curr->next)
memcpy (curr->source->data, curr->swap, curr->source->sizeof_data);
+ current_gdbarch = new_gdbarch;
}
@@ -2189,8 +2168,7 @@
/* Swap the data belonging to the old target out setting the
installed data to zero. This stops the ->init() function trying
to refer to the previous architecture's global data structures. */
- swapout_gdbarch_swap (current_gdbarch);
- clear_gdbarch_swap (current_gdbarch);
+ current_gdbarch_swap_out_hack ();
/* Save the previously selected architecture, setting the global to
NULL. This stops ->init() trying to use the previous
@@ -2210,8 +2188,7 @@
{
if (gdbarch_debug)
fprintf_unfiltered (gdb_stdlog, "gdbarch_update: Target rejected architecture\\n");
- swapin_gdbarch_swap (old_gdbarch);
- current_gdbarch = old_gdbarch;
+ current_gdbarch_swap_in_hack (old_gdbarch);
return 0;
}
@@ -2223,8 +2200,7 @@
fprintf_unfiltered (gdb_stdlog, "gdbarch_update: Architecture 0x%08lx (%s) unchanged\\n",
(long) new_gdbarch,
new_gdbarch->bfd_arch_info->printable_name);
- swapin_gdbarch_swap (old_gdbarch);
- current_gdbarch = old_gdbarch;
+ current_gdbarch_swap_in_hack (old_gdbarch);
return 1;
}
@@ -2252,8 +2228,7 @@
this->next = rego->arches;
rego->arches = this;
/* Copy the new architecture in. */
- current_gdbarch = new_gdbarch;
- swapin_gdbarch_swap (new_gdbarch);
+ current_gdbarch_swap_in_hack (new_gdbarch);
architecture_changed_event ();
return 1;
}
@@ -2288,7 +2263,7 @@
/* Initialize the per-architecture memory (swap) areas.
CURRENT_GDBARCH must be update before these modules are
called. */
- init_gdbarch_swap (new_gdbarch);
+ current_gdbarch_swap_init_hack ();
/* Initialize the per-architecture data. CURRENT_GDBARCH
must be updated before these modules are called. */