From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 23887 invoked by alias); 22 Apr 2008 13:54:44 -0000 Received: (qmail 23870 invoked by uid 22791); 22 Apr 2008 13:54:42 -0000 X-Spam-Check-By: sourceware.org Received: from qnxmail.qnx.com (HELO nimbus.ott.qnx.com) (209.226.137.76) by sourceware.org (qpsmtpd/0.31) with ESMTP; Tue, 22 Apr 2008 13:54:09 +0000 Received: by nimbus.ott.qnx.com with Internet Mail Service (5.5.2653.19) id ; Tue, 22 Apr 2008 09:54:07 -0400 Message-ID: <480DEE05.3020505@qnx.com> From: Aleksandar Ristovski To: Aleksandar Ristovski Cc: Daniel Jacobowitz , GDB Patches Subject: Re: PR 2343 fix: signal number mismatch Date: Tue, 22 Apr 2008 15:56:00 -0000 MIME-Version: 1.0 X-Mailer: Internet Mail Service (5.5.2653.19) user-agent: Thunderbird 2.0.0.12 (Windows/20080213) Content-Type: multipart/mixed; boundary="----_=_NextPart_000_01C8A480.582973C1" X-IsSubscribed: yes Mailing-List: contact gdb-patches-help@sourceware.org; run by ezmlm Precedence: bulk List-Id: List-Subscribe: List-Archive: List-Post: List-Help: , Sender: gdb-patches-owner@sourceware.org X-SW-Source: 2008-04/txt/msg00470.txt.bz2 This message is in MIME format. Since your mail reader does not understand this format, some or all of this message may not be legible. ------_=_NextPart_000_01C8A480.582973C1 Content-Type: text/plain; charset="iso-8859-1" Content-length: 1670 Aleksandar Ristovski wrote: > Daniel Jacobowitz wrote: >> gdbarch.h and gdbarch.c are generated files (see the big comment at >> the top of them). You need to add the new function to the list in >> gdbarch.sh instead. >> > > Hello Daniel, > > I have made changes to gdbarch.sh. The attached patch is not complete (and > the generated gdbarch.c would not produce linkable gdb) but I just wanted to > double-check if this is correct. After you confirm I will add other > necessary changes. Added other changes anyway. The attached patch contains complete proposed patch. Typically, targets would install their own signal translation functions during the osabi registration. For gdb configured for the same host and target, no translation is needed, but for other cases, in general, it is. This patch effectively deprecates functions "target_signal_from_host" and "target_signal_to_host". 2008-04-22 Aleksandar Ristovski PR gdb/2343 * corelow.c (core_open): Use gdbarch_target_signal_from_host to translate signal numeric value from the target to GDB's enum target_signal. * gdbarch.c (gdbarch_target_signal_from_host, gdbarch_target_signal_to_host, set_gdbarch_target_signal_from_host, set_gdbarch_target_signal_to_host): New functions. Generated by gdbarch.sh. * gdbarch.h: Likewise. * gdbarch.sh: Added two new functions target_signal_from_host and target_signal_to_host. * target.h (default_target_signal_from_host, default_target_signal_to_host): New functions - declarations. * signals/signals.c (struct gdbarch): New declaration. (default_target_signal_to_host, default_target_signal_from_host): New functions. ------_=_NextPart_000_01C8A480.582973C1 Content-Type: text/plain; name="gdbarch.sh.target_signal.diff" Content-Transfer-Encoding: quoted-printable Content-Disposition: attachment; filename="gdbarch.sh.target_signal.diff" Content-length: 9742 Index: gdb/corelow.c =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D RCS file: /cvs/src/src/gdb/corelow.c,v retrieving revision 1.73 diff -u -p -r1.73 corelow.c --- gdb/corelow.c 9 Feb 2008 13:45:33 -0000 1.73 +++ gdb/corelow.c 22 Apr 2008 13:33:30 -0000 @@ -359,7 +359,8 @@ core_open (char *filename, int from_tty) value is called ``target_signal'' and this function got the name ..._from_host(). */ printf_filtered (_("Program terminated with signal %d, %s.\n"), siggy, - target_signal_to_string (target_signal_from_host (siggy))); + target_signal_to_string ( + gdbarch_target_signal_from_host (core_gdbarch, siggy))); =20 /* Build up thread list from BFD sections. */ =20 Index: gdb/gdbarch.c =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D RCS file: /cvs/src/src/gdb/gdbarch.c,v retrieving revision 1.422 diff -u -p -r1.422 gdbarch.c --- gdb/gdbarch.c 22 Apr 2008 11:03:41 -0000 1.422 +++ gdb/gdbarch.c 22 Apr 2008 13:33:30 -0000 @@ -230,6 +230,8 @@ struct gdbarch gdbarch_core_read_description_ftype *core_read_description; gdbarch_static_transform_name_ftype *static_transform_name; int sofun_address_maybe_missing; + gdbarch_target_signal_from_host_ftype *target_signal_from_host; + gdbarch_target_signal_to_host_ftype *target_signal_to_host; }; =20 =20 @@ -352,6 +354,8 @@ struct gdbarch startup_gdbarch =3D 0, /* core_read_description */ 0, /* static_transform_name */ 0, /* sofun_address_maybe_missing */ + default_target_signal_from_host, /* target_signal_from_host */ + default_target_signal_to_host, /* target_signal_to_host */ /* startup_gdbarch() */ }; =20 @@ -431,6 +435,8 @@ gdbarch_alloc (const struct gdbarch_info gdbarch->coff_make_msymbol_special =3D default_coff_make_msymbol_special; gdbarch->name_of_malloc =3D "malloc"; gdbarch->register_reggroup_p =3D default_register_reggroup_p; + gdbarch->target_signal_from_host =3D default_target_signal_from_host; + gdbarch->target_signal_to_host =3D default_target_signal_to_host; /* gdbarch_alloc() */ =20 return gdbarch; @@ -590,6 +596,8 @@ verify_gdbarch (struct gdbarch *gdbarch) /* Skip verify of core_read_description, has predicate */ /* Skip verify of static_transform_name, has predicate */ /* Skip verify of sofun_address_maybe_missing, invalid_p =3D=3D 0 */ + /* Skip verify of target_signal_from_host, invalid_p =3D=3D 0 */ + /* Skip verify of target_signal_to_host, invalid_p =3D=3D 0 */ buf =3D ui_file_xstrdup (log, &dummy); make_cleanup (xfree, buf); if (strlen (buf) > 0) @@ -979,6 +987,12 @@ gdbarch_dump (struct gdbarch *gdbarch, s "gdbarch_dump: target_desc =3D %s\n", paddr_d ((long) gdbarch->target_desc)); fprintf_unfiltered (file, + "gdbarch_dump: target_signal_from_host =3D <0x%lx>\n= ", + (long) gdbarch->target_signal_from_host); + fprintf_unfiltered (file, + "gdbarch_dump: target_signal_to_host =3D <0x%lx>\n", + (long) gdbarch->target_signal_to_host); + fprintf_unfiltered (file, "gdbarch_dump: gdbarch_unwind_dummy_id_p() =3D %d\n", gdbarch_unwind_dummy_id_p (gdbarch)); fprintf_unfiltered (file, @@ -2981,6 +2995,40 @@ set_gdbarch_sofun_address_maybe_missing=20 gdbarch->sofun_address_maybe_missing =3D sofun_address_maybe_missing; } =20 +enum target_signal +gdbarch_target_signal_from_host (struct gdbarch *gdbarch, int signo) +{ + gdb_assert (gdbarch !=3D NULL); + gdb_assert (gdbarch->target_signal_from_host !=3D NULL); + if (gdbarch_debug >=3D 2) + fprintf_unfiltered (gdb_stdlog, "gdbarch_target_signal_from_host calle= d\n"); + return gdbarch->target_signal_from_host (gdbarch, signo); +} + +void +set_gdbarch_target_signal_from_host (struct gdbarch *gdbarch, + gdbarch_target_signal_from_host_ftype= target_signal_from_host) +{ + gdbarch->target_signal_from_host =3D target_signal_from_host; +} + +int +gdbarch_target_signal_to_host (struct gdbarch *gdbarch, enum target_signal= ts) +{ + gdb_assert (gdbarch !=3D NULL); + gdb_assert (gdbarch->target_signal_to_host !=3D NULL); + if (gdbarch_debug >=3D 2) + fprintf_unfiltered (gdb_stdlog, "gdbarch_target_signal_to_host called\= n"); + return gdbarch->target_signal_to_host (gdbarch, ts); +} + +void +set_gdbarch_target_signal_to_host (struct gdbarch *gdbarch, + gdbarch_target_signal_to_host_ftype tar= get_signal_to_host) +{ + gdbarch->target_signal_to_host =3D target_signal_to_host; +} + =20 /* Keep a registry of per-architecture data-pointers required by GDB modules. */ Index: gdb/gdbarch.h =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D RCS file: /cvs/src/src/gdb/gdbarch.h,v retrieving revision 1.376 diff -u -p -r1.376 gdbarch.h --- gdb/gdbarch.h 22 Apr 2008 11:03:41 -0000 1.376 +++ gdb/gdbarch.h 22 Apr 2008 13:33:30 -0000 @@ -683,6 +683,20 @@ extern void set_gdbarch_static_transform extern int gdbarch_sofun_address_maybe_missing (struct gdbarch *gdbarch); extern void set_gdbarch_sofun_address_maybe_missing (struct gdbarch *gdbar= ch, int sofun_address_maybe_missing); =20 +/* Signal translation: translate inferior's signal (host's) number into + GDB's representation. */ + +typedef enum target_signal (gdbarch_target_signal_from_host_ftype) (struct= gdbarch *gdbarch, int signo); +extern enum target_signal gdbarch_target_signal_from_host (struct gdbarch = *gdbarch, int signo); +extern void set_gdbarch_target_signal_from_host (struct gdbarch *gdbarch, = gdbarch_target_signal_from_host_ftype *target_signal_from_host); + +/* Signal translation: translate GDB's signal number into inferior's host + signal number. */ + +typedef int (gdbarch_target_signal_to_host_ftype) (struct gdbarch *gdbarch= , enum target_signal ts); +extern int gdbarch_target_signal_to_host (struct gdbarch *gdbarch, enum ta= rget_signal ts); +extern void set_gdbarch_target_signal_to_host (struct gdbarch *gdbarch, gd= barch_target_signal_to_host_ftype *target_signal_to_host); + extern struct gdbarch_tdep *gdbarch_tdep (struct gdbarch *gdbarch); =20 =20 Index: gdb/gdbarch.sh =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D RCS file: /cvs/src/src/gdb/gdbarch.sh,v retrieving revision 1.462 diff -u -p -r1.462 gdbarch.sh --- gdb/gdbarch.sh 22 Apr 2008 11:03:41 -0000 1.462 +++ gdb/gdbarch.sh 22 Apr 2008 13:33:31 -0000 @@ -619,6 +619,13 @@ M:const struct target_desc *:core_read_d F:char *:static_transform_name:char *name:name # Set if the address in N_SO or N_FUN stabs may be zero. v:int:sofun_address_maybe_missing:::0:0::0 + +# Signal translation: translate inferior's signal (host's) number into +# GDB's representation. +m:enum target_signal:target_signal_from_host:int signo:signo::default_targ= et_signal_from_host::0 +# Signal translation: translate GDB's signal number into inferior's host +# signal number. +m:int:target_signal_to_host:enum target_signal ts:ts::default_target_signa= l_to_host::0 EOF } =20 Index: gdb/target.h =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D RCS file: /cvs/src/src/gdb/target.h,v retrieving revision 1.116 diff -u -p -r1.116 target.h --- gdb/target.h 8 Apr 2008 17:02:23 -0000 1.116 +++ gdb/target.h 22 Apr 2008 13:33:32 -0000 @@ -1233,6 +1233,11 @@ extern int target_signal_to_host_p (enum extern enum target_signal target_signal_from_host (int); extern int target_signal_to_host (enum target_signal); =20 +extern enum target_signal default_target_signal_from_host (struct gdbarch = *, + int); +extern int default_target_signal_to_host (struct gdbarch *,=20 + enum target_signal); + /* Convert from a number used in a GDB command to an enum target_signal. = */ extern enum target_signal target_signal_from_command (int); =20 Index: gdb/signals/signals.c =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D RCS file: /cvs/src/src/gdb/signals/signals.c,v retrieving revision 1.17 diff -u -p -r1.17 signals.c --- gdb/signals/signals.c 1 Jan 2008 22:53:15 -0000 1.17 +++ gdb/signals/signals.c 22 Apr 2008 13:33:34 -0000 @@ -30,6 +30,8 @@ #include #endif =20 +struct gdbarch; + /* Always use __SIGRTMIN if it's available. SIGRTMIN is the lowest _available_ realtime signal, not the lowest supported; glibc takes several for its own use. */ @@ -831,3 +833,15 @@ _initialize_signals (void) internal_error (__FILE__, __LINE__, "failed internal consistency check= "); } #endif + +int +default_target_signal_to_host (struct gdbarch *gdbarch, enum target_signal= ts) +{ + return target_signal_to_host (ts); +} + +enum target_signal +default_target_signal_from_host (struct gdbarch *gdbarch, int signo) +{ + return target_signal_from_host (signo); +} ------_=_NextPart_000_01C8A480.582973C1--