* [rfc][2/3] gdbserver bi-arch support: core s390x part
@ 2008-01-21 17:46 Ulrich Weigand
2008-01-29 20:28 ` Daniel Jacobowitz
0 siblings, 1 reply; 6+ messages in thread
From: Ulrich Weigand @ 2008-01-21 17:46 UTC (permalink / raw)
To: gdb-patches
Hello,
this patch makes gdbserver on s390x bi-arch capabable: it will now detect
whether the target is 31-bit or 64-bit and select the appropriate register
format definition.
The basic idea is to simply link gdbserver with both reg-s390.o and
reg-s390x.o (which no longer conflict), and change the compile-time
selection of the linux-s390-low version of the_low_target.arch_setup
into a run-time selection.
However, this isn't really sufficient: at the time the arch_setup routine
is currently called, there is no target attached, and thus there is no
way of detecting whether to use the 31-bit or 64-bit register set.
Thus the patch also changes the call location of arch_setup in linux-low.c
to just after the inferior is attached (but before any register access).
This point happens to be in linux_wait_for_process (when called for the
first time).
This exposes another problem: at this time, common code has already set up
a register cache for the initial thread, which may now turn out to be of
the wrong size. To fix this, the set_register_cache routine (which is
called by the generated init_register_... routine) now goes through all
register caches that may already have been allocated and re-sizes them
to the new size. (As a nice side-effect, this now also allows to call
init_register_... multiple times.)
Finally, the patch adapted s390_get_pc and s390_set_pc to properly work
in the bi-arch configuration. (Note that even so there are a couple of
problems that need to be fixed in a follow-on patch.)
Tested (together with the follow-on patch) on s390-linux and s390x-linux.
Bye,
Ulrich
ChangeLog:
* configure.srv [s390x-*-linux*]: Set srv_regobj to include both
reg-s390.o and reg-s390x.o.
* linux-low.c (linux_wait_for_process): Call the_low_target.arch_setup
after the target has stopped for the first time.
(initialize_low): Do not call the_low_target.arch_setup.
* linux-s390-low.c (s390_get_pc): Support bi-arch operation.
(s390_set_pc): Likewise.
(s390_arch_setup): New function.
(the_low_target): Use s390_arch_setup as arch_setup routine.
* regcache.c (realloc_register_cache): New function.
(set_register_cache): Call it for each existing regcache.
diff -urNp gdb-orig/gdb/gdbserver/configure.srv gdb-head/gdb/gdbserver/configure.srv
--- gdb-orig/gdb/gdbserver/configure.srv 2008-01-18 00:57:40.000000000 +0100
+++ gdb-head/gdb/gdbserver/configure.srv 2008-01-17 22:29:26.000000000 +0100
@@ -138,7 +138,7 @@ case "${target}" in
srv_linux_regsets=yes
srv_linux_thread_db=yes
;;
- s390x-*-linux*) srv_regobj=reg-s390x.o
+ s390x-*-linux*) srv_regobj="reg-s390.o reg-s390x.o"
srv_tgtobj="linux-low.o linux-s390-low.o"
srv_linux_usrregs=yes
srv_linux_regsets=yes
diff -urNp gdb-orig/gdb/gdbserver/linux-low.c gdb-head/gdb/gdbserver/linux-low.c
--- gdb-orig/gdb/gdbserver/linux-low.c 2008-01-18 00:57:40.000000000 +0100
+++ gdb-head/gdb/gdbserver/linux-low.c 2008-01-18 00:57:34.000000000 +0100
@@ -548,6 +548,7 @@ status_pending_p (struct inferior_list_e
static void
linux_wait_for_process (struct process_info **childp, int *wstatp)
{
+ static int arch_setup_done = 0;
int ret;
int to_wait_for = -1;
@@ -606,6 +607,16 @@ retry:
(*childp)->last_status = *wstatp;
+ /* Architecture-specific setup after inferior is running.
+ This needs to happen after we have attached to the inferior
+ and it is stopped for the first time, but before we access
+ any inferior registers. */
+ if (!arch_setup_done)
+ {
+ the_low_target.arch_setup ();
+ arch_setup_done = 1;
+ }
+
if (debug_threads
&& WIFSTOPPED (*wstatp))
{
@@ -2060,7 +2071,6 @@ initialize_low (void)
set_target_ops (&linux_target_ops);
set_breakpoint_data (the_low_target.breakpoint,
the_low_target.breakpoint_len);
- the_low_target.arch_setup ();
linux_init_signals ();
linux_test_for_tracefork ();
}
diff -urNp gdb-orig/gdb/gdbserver/linux-s390-low.c gdb-head/gdb/gdbserver/linux-s390-low.c
--- gdb-orig/gdb/gdbserver/linux-s390-low.c 2008-01-18 00:57:40.000000000 +0100
+++ gdb-head/gdb/gdbserver/linux-s390-low.c 2008-01-18 01:00:18.000000000 +0100
@@ -102,24 +102,61 @@ static const unsigned char s390_breakpoi
static CORE_ADDR
s390_get_pc ()
{
- unsigned long pc;
- collect_register_by_name ("pswa", &pc);
+ if (register_size (0) == 4)
+ {
+ unsigned int pc;
+ collect_register_by_name ("pswa", &pc);
#ifndef __s390x__
- pc &= 0x7fffffff;
+ pc &= 0x7fffffff;
#endif
- return pc;
+ return pc;
+ }
+ else
+ {
+ unsigned long pc;
+ collect_register_by_name ("pswa", &pc);
+ return pc;
+ }
}
static void
s390_set_pc (CORE_ADDR newpc)
{
- unsigned long pc = newpc;
+ if (register_size (0) == 4)
+ {
+ unsigned int pc = newpc;
#ifndef __s390x__
- pc |= 0x80000000;
+ pc |= 0x80000000;
#endif
- supply_register_by_name ("pswa", &pc);
+ supply_register_by_name ("pswa", &pc);
+ }
+ else
+ {
+ unsigned long pc = newpc;
+ supply_register_by_name ("pswa", &pc);
+ }
}
+
+static void
+s390_arch_setup (void)
+{
+ /* Assume 31-bit inferior process. */
+ init_registers_s390 ();
+
+ /* On a 64-bit host, check the low bit of the (31-bit) PSWM
+ -- if this is one, we actually have a 64-bit inferior. */
+#ifdef __s390x__
+ {
+ unsigned int pswm;
+ collect_register_by_name ("pswm", &pswm);
+ if (pswm & 1)
+ init_registers_s390x ();
+ }
+#endif
+}
+
+
static int
s390_breakpoint_at (CORE_ADDR pc)
{
@@ -130,11 +167,7 @@ s390_breakpoint_at (CORE_ADDR pc)
struct linux_target_ops the_low_target = {
-#ifndef __s390x__
- init_registers_s390,
-#else
- init_registers_s390x,
-#endif
+ s390_arch_setup,
s390_num_regs,
s390_regmap,
s390_cannot_fetch_register,
diff -urNp gdb-orig/gdb/gdbserver/regcache.c gdb-head/gdb/gdbserver/regcache.c
--- gdb-orig/gdb/gdbserver/regcache.c 2008-01-18 00:57:40.000000000 +0100
+++ gdb-head/gdb/gdbserver/regcache.c 2008-01-17 22:29:26.000000000 +0100
@@ -121,6 +121,15 @@ free_register_cache (void *regcache_p)
free (regcache);
}
+static void
+realloc_register_cache (struct inferior_list_entry *thread_p)
+{
+ struct thread_info *thread = (struct thread_info *) thread_p;
+
+ free_register_cache (inferior_regcache_data (thread));
+ set_inferior_regcache_data (thread, new_register_cache ());
+}
+
void
set_register_cache (struct reg *regs, int n)
{
@@ -137,6 +146,9 @@ set_register_cache (struct reg *regs, in
}
register_bytes = offset / 8;
+
+ /* Re-allocate all pre-existing register caches. */
+ for_each_inferior (&all_threads, realloc_register_cache);
}
void
--
Dr. Ulrich Weigand
GNU Toolchain for Linux on System z and Cell BE
Ulrich.Weigand@de.ibm.com
^ permalink raw reply [flat|nested] 6+ messages in thread* Re: [rfc][2/3] gdbserver bi-arch support: core s390x part 2008-01-21 17:46 [rfc][2/3] gdbserver bi-arch support: core s390x part Ulrich Weigand @ 2008-01-29 20:28 ` Daniel Jacobowitz 2008-01-29 23:35 ` Ulrich Weigand 0 siblings, 1 reply; 6+ messages in thread From: Daniel Jacobowitz @ 2008-01-29 20:28 UTC (permalink / raw) To: Ulrich Weigand; +Cc: gdb-patches On Mon, Jan 21, 2008 at 06:45:52PM +0100, Ulrich Weigand wrote: > @@ -548,6 +548,7 @@ status_pending_p (struct inferior_list_e > static void > linux_wait_for_process (struct process_info **childp, int *wstatp) > { > + static int arch_setup_done = 0; > int ret; > int to_wait_for = -1; > This isn't quite good enough. It's already possible for the architecture to change during a single gdbserver run, so I think we have to support re-calling arch_setup. Right now you have to run in extended mode and replace a 32-bit binary with a 64-bit one before restarting it, but I'll be checking in the support for "set remote exec-file" shortly if I catch up on patch review :-) All it takes is hopefully a global flag that we can reset when switching to a new inferior. > diff -urNp gdb-orig/gdb/gdbserver/linux-s390-low.c gdb-head/gdb/gdbserver/linux-s390-low.c > --- gdb-orig/gdb/gdbserver/linux-s390-low.c 2008-01-18 00:57:40.000000000 +0100 > +++ gdb-head/gdb/gdbserver/linux-s390-low.c 2008-01-18 01:00:18.000000000 +0100 > @@ -102,24 +102,61 @@ static const unsigned char s390_breakpoi > static CORE_ADDR > s390_get_pc () > { > - unsigned long pc; > - collect_register_by_name ("pswa", &pc); > + if (register_size (0) == 4) > + { > + unsigned int pc; > + collect_register_by_name ("pswa", &pc); > #ifndef __s390x__ > - pc &= 0x7fffffff; > + pc &= 0x7fffffff; > #endif > - return pc; > + return pc; > + } > + else > + { > + unsigned long pc; > + collect_register_by_name ("pswa", &pc); > + return pc; > + } > } This is harmlessly if dead if gdbserver is 32-bit, right? > +static void > +s390_arch_setup (void) > +{ > + /* Assume 31-bit inferior process. */ > + init_registers_s390 (); > + > + /* On a 64-bit host, check the low bit of the (31-bit) PSWM > + -- if this is one, we actually have a 64-bit inferior. */ > +#ifdef __s390x__ > + { > + unsigned int pswm; > + collect_register_by_name ("pswm", &pswm); > + if (pswm & 1) > + init_registers_s390x (); > + } > +#endif This makes my head hurt quite a lot. You're fetching registers into the cache before you know their size for sure? I think using ptrace directly in this case might be more obvious. -- Daniel Jacobowitz CodeSourcery ^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: [rfc][2/3] gdbserver bi-arch support: core s390x part 2008-01-29 20:28 ` Daniel Jacobowitz @ 2008-01-29 23:35 ` Ulrich Weigand 2008-02-01 0:04 ` Ulrich Weigand 2008-02-26 3:57 ` Daniel Jacobowitz 0 siblings, 2 replies; 6+ messages in thread From: Ulrich Weigand @ 2008-01-29 23:35 UTC (permalink / raw) To: Daniel Jacobowitz; +Cc: gdb-patches Daniel Jacobowitz wrote: > This isn't quite good enough. It's already possible for the > architecture to change during a single gdbserver run, so I think we > have to support re-calling arch_setup. Right now you have to run in > extended mode and replace a 32-bit binary with a 64-bit one before > restarting it, but I'll be checking in the support for "set remote > exec-file" shortly if I catch up on patch review :-) > > All it takes is hopefully a global flag that we can reset when > switching to a new inferior. I see. Something along the lines of the new version below? > > - unsigned long pc; > > - collect_register_by_name ("pswa", &pc); > > + if (register_size (0) == 4) > > + { > > + unsigned int pc; > > + collect_register_by_name ("pswa", &pc); > > #ifndef __s390x__ > > - pc &= 0x7fffffff; > > + pc &= 0x7fffffff; > > #endif > > - return pc; > > + return pc; > > + } > > + else > > + { > > + unsigned long pc; > > + collect_register_by_name ("pswa", &pc); > > + return pc; > > + } > > } > > This is harmlessly if dead if gdbserver is 32-bit, right? Yes. Note that there are two different issues: whether we need to clear the high bit depends on the architecture of gdbserver, but the size of the register depends on the architecture of the inferior. To simplify the latter issue, maybe it would be nice if generic code had a "collect_register_as_addr" helper that would check the register's size and convert its contents to CORE_ADDR as appropriate? > > +static void > > +s390_arch_setup (void) > > +{ > > + /* Assume 31-bit inferior process. */ > > + init_registers_s390 (); > > + > > + /* On a 64-bit host, check the low bit of the (31-bit) PSWM > > + -- if this is one, we actually have a 64-bit inferior. */ > > +#ifdef __s390x__ > > + { > > + unsigned int pswm; > > + collect_register_by_name ("pswm", &pswm); > > + if (pswm & 1) > > + init_registers_s390x (); > > + } > > +#endif > > This makes my head hurt quite a lot. You're fetching registers into > the cache before you know their size for sure? Well, it is not so much about "knowing" their size -- on a 64-bit gdbserver, ptrace will always give me 64-bit register values. I can simply choose whether to view those as if they were 32-bit by installing the s390 register map -- which I do. > I think using ptrace directly in this case might be more obvious. I tried this, but couldn't quite figure out which PID to use ... Also, getting all the header files and defines in place in the low target file (which doesn't use ptrace at all right now) seemed a bit tedious -- so I went with the above solution instead. Bye, Ulrich ChangeLog: * configure.srv [s390x-*-linux*]: Set srv_regobj to include both reg-s390.o and reg-s390x.o. * linux-low.c (new_inferior): New global variable. (linux_create_inferior, linux_attach): Set it. (linux_wait_for_process): Call the_low_target.arch_setup after the target has stopped for the first time. (initialize_low): Do not call the_low_target.arch_setup. * linux-s390-low.c (s390_get_pc): Support bi-arch operation. (s390_set_pc): Likewise. (s390_arch_setup): New function. (the_low_target): Use s390_arch_setup as arch_setup routine. * regcache.c (realloc_register_cache): New function. (set_register_cache): Call it for each existing regcache. diff -urNp gdb-orig/gdb/gdbserver/configure.srv gdb-head/gdb/gdbserver/configure.srv --- gdb-orig/gdb/gdbserver/configure.srv 2008-01-29 23:10:39.000000000 +0100 +++ gdb-head/gdb/gdbserver/configure.srv 2008-01-29 23:21:53.000000000 +0100 @@ -138,7 +138,7 @@ case "${target}" in srv_linux_regsets=yes srv_linux_thread_db=yes ;; - s390x-*-linux*) srv_regobj=reg-s390x.o + s390x-*-linux*) srv_regobj="reg-s390.o reg-s390x.o" srv_tgtobj="linux-low.o linux-s390-low.o" srv_linux_usrregs=yes srv_linux_regsets=yes diff -urNp gdb-orig/gdb/gdbserver/linux-low.c gdb-head/gdb/gdbserver/linux-low.c --- gdb-orig/gdb/gdbserver/linux-low.c 2008-01-29 23:21:45.000000000 +0100 +++ gdb-head/gdb/gdbserver/linux-low.c 2008-01-29 23:24:41.000000000 +0100 @@ -107,6 +107,11 @@ static int thread_db_active; static int must_set_ptrace_flags; +/* This flag is true iff we've just created or attached to a new inferior + but it has not stopped yet. As soon as it does, we need to call the + low target's arch_setup callback. */ +static int new_inferior; + static void linux_resume_one_process (struct inferior_list_entry *entry, int step, int signal, siginfo_t *info); static void linux_resume (struct thread_resume *resume_info); @@ -291,6 +296,7 @@ linux_create_inferior (char *program, ch new_process = add_process (pid); add_thread (pid, new_process, pid); must_set_ptrace_flags = 1; + new_inferior = 1; return pid; } @@ -346,6 +352,8 @@ linux_attach (unsigned long pid) process = (struct process_info *) find_inferior_id (&all_processes, pid); process->stop_expected = 0; + new_inferior = 1; + return 0; } @@ -606,6 +614,16 @@ retry: (*childp)->last_status = *wstatp; + /* Architecture-specific setup after inferior is running. + This needs to happen after we have attached to the inferior + and it is stopped for the first time, but before we access + any inferior registers. */ + if (new_inferior) + { + the_low_target.arch_setup (); + new_inferior = 1; + } + if (debug_threads && WIFSTOPPED (*wstatp)) { @@ -2060,7 +2078,6 @@ initialize_low (void) set_target_ops (&linux_target_ops); set_breakpoint_data (the_low_target.breakpoint, the_low_target.breakpoint_len); - the_low_target.arch_setup (); linux_init_signals (); linux_test_for_tracefork (); } diff -urNp gdb-orig/gdb/gdbserver/linux-s390-low.c gdb-head/gdb/gdbserver/linux-s390-low.c --- gdb-orig/gdb/gdbserver/linux-s390-low.c 2008-01-29 23:21:45.000000000 +0100 +++ gdb-head/gdb/gdbserver/linux-s390-low.c 2008-01-29 23:21:53.000000000 +0100 @@ -102,24 +102,61 @@ static const unsigned char s390_breakpoi static CORE_ADDR s390_get_pc () { - unsigned long pc; - collect_register_by_name ("pswa", &pc); + if (register_size (0) == 4) + { + unsigned int pc; + collect_register_by_name ("pswa", &pc); #ifndef __s390x__ - pc &= 0x7fffffff; + pc &= 0x7fffffff; #endif - return pc; + return pc; + } + else + { + unsigned long pc; + collect_register_by_name ("pswa", &pc); + return pc; + } } static void s390_set_pc (CORE_ADDR newpc) { - unsigned long pc = newpc; + if (register_size (0) == 4) + { + unsigned int pc = newpc; #ifndef __s390x__ - pc |= 0x80000000; + pc |= 0x80000000; #endif - supply_register_by_name ("pswa", &pc); + supply_register_by_name ("pswa", &pc); + } + else + { + unsigned long pc = newpc; + supply_register_by_name ("pswa", &pc); + } } + +static void +s390_arch_setup (void) +{ + /* Assume 31-bit inferior process. */ + init_registers_s390 (); + + /* On a 64-bit host, check the low bit of the (31-bit) PSWM + -- if this is one, we actually have a 64-bit inferior. */ +#ifdef __s390x__ + { + unsigned int pswm; + collect_register_by_name ("pswm", &pswm); + if (pswm & 1) + init_registers_s390x (); + } +#endif +} + + static int s390_breakpoint_at (CORE_ADDR pc) { @@ -130,11 +167,7 @@ s390_breakpoint_at (CORE_ADDR pc) struct linux_target_ops the_low_target = { -#ifndef __s390x__ - init_registers_s390, -#else - init_registers_s390x, -#endif + s390_arch_setup, s390_num_regs, s390_regmap, s390_cannot_fetch_register, diff -urNp gdb-orig/gdb/gdbserver/regcache.c gdb-head/gdb/gdbserver/regcache.c --- gdb-orig/gdb/gdbserver/regcache.c 2008-01-29 23:10:39.000000000 +0100 +++ gdb-head/gdb/gdbserver/regcache.c 2008-01-29 23:21:53.000000000 +0100 @@ -121,6 +121,15 @@ free_register_cache (void *regcache_p) free (regcache); } +static void +realloc_register_cache (struct inferior_list_entry *thread_p) +{ + struct thread_info *thread = (struct thread_info *) thread_p; + + free_register_cache (inferior_regcache_data (thread)); + set_inferior_regcache_data (thread, new_register_cache ()); +} + void set_register_cache (struct reg *regs, int n) { @@ -137,6 +146,9 @@ set_register_cache (struct reg *regs, in } register_bytes = offset / 8; + + /* Re-allocate all pre-existing register caches. */ + for_each_inferior (&all_threads, realloc_register_cache); } void -- Dr. Ulrich Weigand GNU Toolchain for Linux on System z and Cell BE Ulrich.Weigand@de.ibm.com ^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: [rfc][2/3] gdbserver bi-arch support: core s390x part 2008-01-29 23:35 ` Ulrich Weigand @ 2008-02-01 0:04 ` Ulrich Weigand 2008-02-26 3:57 ` Daniel Jacobowitz 1 sibling, 0 replies; 6+ messages in thread From: Ulrich Weigand @ 2008-02-01 0:04 UTC (permalink / raw) To: Ulrich Weigand; +Cc: Daniel Jacobowitz, gdb-patches Grrr, this is what I get for posting untested patches: > + /* Architecture-specific setup after inferior is running. > + This needs to happen after we have attached to the inferior > + and it is stopped for the first time, but before we access > + any inferior registers. */ > + if (new_inferior) > + { > + the_low_target.arch_setup (); > + new_inferior = 1; Obviously, the last line needs to read new_inferior = 0; I've re-tested the new patch set with this fix on s390-ibm-linux and on s390x-ibm-linux (both 64-bit and 31-bit compiler) using gdbserver locally. No regressions. Bye, Ulrich -- Dr. Ulrich Weigand GNU Toolchain for Linux on System z and Cell BE Ulrich.Weigand@de.ibm.com ^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: [rfc][2/3] gdbserver bi-arch support: core s390x part 2008-01-29 23:35 ` Ulrich Weigand 2008-02-01 0:04 ` Ulrich Weigand @ 2008-02-26 3:57 ` Daniel Jacobowitz 2008-02-27 3:44 ` Ulrich Weigand 1 sibling, 1 reply; 6+ messages in thread From: Daniel Jacobowitz @ 2008-02-26 3:57 UTC (permalink / raw) To: Ulrich Weigand; +Cc: gdb-patches You're welcome to prod me when I drop out in the middle of a conversation like this. Really. I'm sorry about the delay. On Wed, Jan 30, 2008 at 12:33:33AM +0100, Ulrich Weigand wrote: > Yes. Note that there are two different issues: whether we need > to clear the high bit depends on the architecture of gdbserver, > but the size of the register depends on the architecture of > the inferior. To simplify the latter issue, maybe it would be > nice if generic code had a "collect_register_as_addr" helper > that would check the register's size and convert its contents > to CORE_ADDR as appropriate? Then we'd have room to squabble about whether that function sign extended or not. Let's hold off on this one. > * configure.srv [s390x-*-linux*]: Set srv_regobj to include both > reg-s390.o and reg-s390x.o. > > * linux-low.c (new_inferior): New global variable. > (linux_create_inferior, linux_attach): Set it. > (linux_wait_for_process): Call the_low_target.arch_setup after the > target has stopped for the first time. > (initialize_low): Do not call the_low_target.arch_setup. > > * linux-s390-low.c (s390_get_pc): Support bi-arch operation. > (s390_set_pc): Likewise. > (s390_arch_setup): New function. > (the_low_target): Use s390_arch_setup as arch_setup routine. > > * regcache.c (realloc_register_cache): New function. > (set_register_cache): Call it for each existing regcache. This looks great to me. -- Daniel Jacobowitz CodeSourcery ^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: [rfc][2/3] gdbserver bi-arch support: core s390x part 2008-02-26 3:57 ` Daniel Jacobowitz @ 2008-02-27 3:44 ` Ulrich Weigand 0 siblings, 0 replies; 6+ messages in thread From: Ulrich Weigand @ 2008-02-27 3:44 UTC (permalink / raw) To: Daniel Jacobowitz; +Cc: gdb-patches Daniel Jacobowitz wrote: > You're welcome to prod me when I drop out in the middle of a > conversation like this. Really. I'm sorry about the delay. Hey, it's no problem ... I've been busy myself; I would have gotten around to pinging you sooner or later ;-) > On Wed, Jan 30, 2008 at 12:33:33AM +0100, Ulrich Weigand wrote: > > Yes. Note that there are two different issues: whether we need > > to clear the high bit depends on the architecture of gdbserver, > > but the size of the register depends on the architecture of > > the inferior. To simplify the latter issue, maybe it would be > > nice if generic code had a "collect_register_as_addr" helper > > that would check the register's size and convert its contents > > to CORE_ADDR as appropriate? > > Then we'd have room to squabble about whether that function sign > extended or not. Let's hold off on this one. Ah, right. Fine with me. > > * configure.srv [s390x-*-linux*]: Set srv_regobj to include both > > reg-s390.o and reg-s390x.o. > > > > * linux-low.c (new_inferior): New global variable. > > (linux_create_inferior, linux_attach): Set it. > > (linux_wait_for_process): Call the_low_target.arch_setup after the > > target has stopped for the first time. > > (initialize_low): Do not call the_low_target.arch_setup. > > > > * linux-s390-low.c (s390_get_pc): Support bi-arch operation. > > (s390_set_pc): Likewise. > > (s390_arch_setup): New function. > > (the_low_target): Use s390_arch_setup as arch_setup routine. > > > > * regcache.c (realloc_register_cache): New function. > > (set_register_cache): Call it for each existing regcache. > > This looks great to me. Thanks, I've checked this in now. Bye, Ulrich -- Dr. Ulrich Weigand GNU Toolchain for Linux on System z and Cell BE Ulrich.Weigand@de.ibm.com ^ permalink raw reply [flat|nested] 6+ messages in thread
end of thread, other threads:[~2008-02-27 3:43 UTC | newest] Thread overview: 6+ messages (download: mbox.gz / follow: Atom feed) -- links below jump to the message on this page -- 2008-01-21 17:46 [rfc][2/3] gdbserver bi-arch support: core s390x part Ulrich Weigand 2008-01-29 20:28 ` Daniel Jacobowitz 2008-01-29 23:35 ` Ulrich Weigand 2008-02-01 0:04 ` Ulrich Weigand 2008-02-26 3:57 ` Daniel Jacobowitz 2008-02-27 3:44 ` Ulrich Weigand
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox