From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 12202 invoked by alias); 13 Dec 2007 16:12:15 -0000 Received: (qmail 12193 invoked by uid 22791); 13 Dec 2007 16:12:14 -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; Thu, 13 Dec 2007 16:12:04 +0000 Received: by nimbus.ott.qnx.com with Internet Mail Service (5.5.2653.19) id ; Thu, 13 Dec 2007 11:12:01 -0500 Message-ID: <3518719F06577C4F85DA618E3C37AB910DA17A41@nimbus.ott.qnx.com> From: Aleksandar Ristovski To: gdb-patches@sourceware.org Cc: Ryan Mansfield Subject: PR 2343 fix: signal number mismatch Date: Thu, 13 Dec 2007 17:05:00 -0000 MIME-Version: 1.0 X-Mailer: Internet Mail Service (5.5.2653.19) Content-Type: multipart/mixed; boundary="----_=_NextPart_000_01C83DA2.E26B009E" 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: 2007-12/txt/msg00174.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_01C83DA2.E26B009E Content-Type: text/plain Content-length: 1350 Hello, This patch fixes PR 2343: when host and target system OS differ, there can be mismatch between signal numeric values. This patch introduces new gdbarch function to allow different targets define their own mapping to enum target_signal. ChangeLog: 2007-12-13 Aleksandar Ristovski * gdbarch.h: (gdbarch_target_signal_from_target_p): New function. (gdbarch_target_signal_from_target_ftype): New typedef. (gdbarch_target_signal_from_target): New function. (set_gdbarch_target_signal_from_target): New function. * gdbarch.c: (struct gdbarch): New field - target_signal_from_target. (struct gdbarch startup_gdbarch): Initialization for the new field. (verify_gdbarch): Added comment, 'Skip verify...'. (gdbarch_dump): Printing debug info for the new field. (gdbarch_target_signal_from_target_p): New function definition. (gdbarch_target_signal_from_target_ftype): New typedef definition. (gdbarch_target_signal_from_target): New function definition. (set_gdbarch_target_signal_from_target): New function definition. * corelow.c: (core_open): Added logic for calling new function if specified. Thank you, Aleksandar ------ Attachments are virus free! This message has been scanned for viruses at the originating end by Nemx Anti-Virus for MS Exchange Server/IMC http://www.nemx.com/products/antivirus ------_=_NextPart_000_01C83DA2.E26B009E Content-Type: application/octet-stream; name="gdbPR2343fix.diff" Content-Transfer-Encoding: quoted-printable Content-Disposition: attachment; filename="gdbPR2343fix.diff" Content-length: 7179 Index: gdb/gdbarch.h=0A= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=0A= RCS file: /cvs/src/src/gdb/gdbarch.h,v=0A= retrieving revision 1.372=0A= diff -u -3 -p -r1.372 gdbarch.h=0A= --- gdb/gdbarch.h 6 Dec 2007 16:32:59 -0000 1.372=0A= +++ gdb/gdbarch.h 13 Dec 2007 16:07:16 -0000=0A= @@ -664,6 +664,16 @@ typedef const struct target_desc * (gdba=0A= extern const struct target_desc * gdbarch_core_read_description (struct gd= barch *gdbarch, struct target_ops *target, bfd *abfd);=0A= extern void set_gdbarch_core_read_description (struct gdbarch *gdbarch, gd= barch_core_read_description_ftype *core_read_description);=0A= =20=0A= +/* Name rationale: 'target_signal' comes from 'enum target_signal',=0A= + 'from_target' means from target as in inferior. */=0A= +=0A= +extern int gdbarch_target_signal_from_target_p (struct gdbarch *gdbarch);= =0A= +=0A= +typedef enum target_signal (gdbarch_target_signal_from_target_ftype) (int = signo);=0A= +extern enum target_signal gdbarch_target_signal_from_target (struct gdbarc= h *gdbarch, int signo);=0A= +extern void set_gdbarch_target_signal_from_target (struct gdbarch *gdbarch= , gdbarch_target_signal_from_target_ftype *target_signal_from_target);=0A= +=0A= +=0A= /* Handle special encoding of static variables in stabs debug info. */=0A= =20=0A= extern int gdbarch_static_transform_name_p (struct gdbarch *gdbarch);=0A= Index: gdb/gdbarch.c=0A= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=0A= RCS file: /cvs/src/src/gdb/gdbarch.c,v=0A= retrieving revision 1.418=0A= diff -u -3 -p -r1.418 gdbarch.c=0A= --- gdb/gdbarch.c 6 Dec 2007 16:32:59 -0000 1.418=0A= +++ gdb/gdbarch.c 13 Dec 2007 16:07:16 -0000=0A= @@ -227,6 +227,7 @@ struct gdbarch=0A= gdbarch_skip_permanent_breakpoint_ftype *skip_permanent_breakpoint;=0A= gdbarch_overlay_update_ftype *overlay_update;=0A= gdbarch_core_read_description_ftype *core_read_description;=0A= + gdbarch_target_signal_from_target_ftype *target_signal_from_target;=0A= gdbarch_static_transform_name_ftype *static_transform_name;=0A= int sofun_address_maybe_missing;=0A= };=0A= @@ -348,6 +349,7 @@ struct gdbarch startup_gdbarch =3D=0A= 0, /* skip_permanent_breakpoint */=0A= 0, /* overlay_update */=0A= 0, /* core_read_description */=0A= + 0, /* target_signal_from_target */=0A= 0, /* static_transform_name */=0A= 0, /* sofun_address_maybe_missing */=0A= /* startup_gdbarch() */=0A= @@ -584,6 +586,7 @@ verify_gdbarch (struct gdbarch *gdbarch)=0A= /* Skip verify of skip_permanent_breakpoint, has predicate */=0A= /* Skip verify of overlay_update, has predicate */=0A= /* Skip verify of core_read_description, has predicate */=0A= + /* Skip verify of target_signal_from_target, has predicate */=0A= /* Skip verify of static_transform_name, has predicate */=0A= /* Skip verify of sofun_address_maybe_missing, invalid_p =3D=3D 0 */=0A= buf =3D ui_file_xstrdup (log, &dummy);=0A= @@ -687,6 +690,12 @@ gdbarch_dump (struct gdbarch *gdbarch, s=0A= "gdbarch_dump: core_read_description =3D <0x%lx>\n",= =0A= (long) gdbarch->core_read_description);=0A= fprintf_unfiltered (file,=0A= + "gdbarch_dump: gdbarch_target_signal_from_target_p()= =3D %d\n",=0A= + gdbarch_target_signal_from_target_p (gdbarch));=0A= + fprintf_unfiltered (file,=0A= + "gdbarch_dump: target_signal_from_target =3D <0x%lx>= \n",=0A= + (long) gdbarch->target_signal_from_target);=0A= + fprintf_unfiltered (file,=0A= "gdbarch_dump: gdbarch_core_xfer_shared_libraries_p(= ) =3D %d\n",=0A= gdbarch_core_xfer_shared_libraries_p (gdbarch));=0A= fprintf_unfiltered (file,=0A= @@ -2917,6 +2926,32 @@ set_gdbarch_core_read_description (struc=0A= }=0A= =20=0A= int=0A= +gdbarch_target_signal_from_target_p (struct gdbarch *gdbarch)=0A= +{=0A= + gdb_assert (gdbarch !=3D NULL);=0A= + return gdbarch->target_signal_from_target !=3D NULL;=0A= +}=0A= +=0A= +enum target_signal=0A= +gdbarch_target_signal_from_target (struct gdbarch *gdbarch, int signo)=0A= +{=0A= + gdb_assert (gdbarch !=3D NULL);=0A= + if (gdbarch_debug >=3D 2)=0A= + fprintf_unfiltered (gdb_stdlog,=20=0A= + "gdbarch_target_signal_from_target called\n");=0A= + gdb_assert (gdbarch_target_signal_from_target_p (gdbarch));=0A= + return gdbarch->target_signal_from_target (signo);=0A= +}=0A= +=0A= +void=0A= +set_gdbarch_target_signal_from_target (struct gdbarch *gdbarch,=20=0A= + gdbarch_target_signal_from_target_ftype target_signal_from_targ= et)=0A= +{=0A= + gdbarch->target_signal_from_target =3D target_signal_from_target;=0A= +}=0A= +=0A= +=0A= +int=0A= gdbarch_static_transform_name_p (struct gdbarch *gdbarch)=0A= {=0A= gdb_assert (gdbarch !=3D NULL);=0A= Index: gdb/corelow.c=0A= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=0A= RCS file: /cvs/src/src/gdb/corelow.c,v=0A= retrieving revision 1.70=0A= diff -u -3 -p -r1.70 corelow.c=0A= --- gdb/corelow.c 15 Nov 2007 06:14:26 -0000 1.70=0A= +++ gdb/corelow.c 13 Dec 2007 16:07:17 -0000=0A= @@ -353,12 +353,19 @@ core_open (char *filename, int from_tty)=0A= =20=0A= siggy =3D bfd_core_file_failing_signal (core_bfd);=0A= if (siggy > 0)=0A= + {=0A= + enum target_signal gdb_sig;=0A= + if (core_gdbarch && gdbarch_target_signal_from_target_p (core_gdbarc= h))=0A= + gdb_sig =3D gdbarch_target_signal_from_target (core_gdbarch, siggy);=0A= + else=0A= + gdb_sig =3D target_signal_from_host (siggy);=0A= /* NOTE: target_signal_from_host() converts a target signal value=0A= into gdb's internal signal value. Unfortunately gdb's internal=0A= value is called ``target_signal'' and this function got the=0A= name ..._from_host(). */=0A= - printf_filtered (_("Program terminated with signal %d, %s.\n"), siggy,= =0A= - target_signal_to_string (target_signal_from_host (siggy)));=0A= + printf_filtered (_("Program terminated with signal %d, %s.\n"), sigg= y,=0A= + target_signal_to_string (gdb_sig));=0A= + }=0A= =20=0A= /* Build up thread list from BFD sections. */=0A= =20=0A= @@ -496,7 +503,7 @@ get_core_registers (struct regcache *reg=0A= get_core_register_section (regcache,=0A= ".reg-xfp", 3, "extended floating-point", 0);=0A= get_core_register_section (regcache,=0A= - ".reg-ppc-vmx", 3, "ppc Altivec", 0);=0A= + ".reg-ppc-vmx", 3, "ppc Altivec", 0);=0A= =20=0A= /* Supply dummy value for all registers not found in the core. */=0A= for (i =3D 0; i < gdbarch_num_regs (get_regcache_arch (regcache)); i++)= =0A= ------_=_NextPart_000_01C83DA2.E26B009E--