From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 18607 invoked by alias); 31 Aug 2009 07:10:26 -0000 Received: (qmail 18589 invoked by uid 22791); 31 Aug 2009 07:10:21 -0000 X-SWARE-Spam-Status: No, hits=-1.4 required=5.0 tests=AWL,BAYES_00,J_CHICKENPOX_48,SARE_MSGID_LONG40,SPF_PASS X-Spam-Check-By: sourceware.org Received: from mail-gx0-f219.google.com (HELO mail-gx0-f219.google.com) (209.85.217.219) by sourceware.org (qpsmtpd/0.43rc1) with ESMTP; Mon, 31 Aug 2009 07:10:14 +0000 Received: by gxk19 with SMTP id 19so4957174gxk.0 for ; Mon, 31 Aug 2009 00:10:11 -0700 (PDT) MIME-Version: 1.0 Received: by 10.150.236.10 with SMTP id j10mr7305745ybh.313.1251702611554; Mon, 31 Aug 2009 00:10:11 -0700 (PDT) In-Reply-To: References: From: Hui Zhu Date: Mon, 31 Aug 2009 08:23:00 -0000 Message-ID: Subject: Re: [RFA/Prec] Add signal support for process record To: gdb-patches ml Cc: Michael Snyder , Anthony Green Content-Type: multipart/mixed; boundary=000e0cd566d086b60904726ab9a4 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: 2009-08/txt/msg00574.txt.bz2 --000e0cd566d086b60904726ab9a4 Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: quoted-printable Content-length: 18621 On Sun, Aug 30, 2009 at 11:03, Hui Zhu wrote: > This code can be use to test this patch. > > Thanks, > Hui > > On Thu, Aug 27, 2009 at 23:35, Hui Zhu wrote: >> Hi guys, >> >> I found that prec with signal has some bugs and support is not very >> well. =A0So I make a patch for it. >> What it include is: >> 1. Fix the bug in record_wait, it always send the same sig to the >> resume, it will make sig send to inferior again and agin. >> 2. Add a new argument sig to arch interface "process_record". =A0Then >> each arch can handle with sig with itself. =A0With linux, >> TARGET_SIGNAL_0 means not send a sig. =A0Update the each process_record >> of i386 and moxie. >> 3. =A0Add a new interface i386_signal_record in i386 to let each taget >> can add code to handle sig. >> >> Please post your comments about it. =A0Thanks a lot. =A0:) >> >> Hui >> >> 2009-08-27 =A0Hui Zhu =A0 >> >> =A0 =A0 =A0 =A0* gdbarch.sh (process_record): Add a argument "siggnal". >> =A0 =A0 =A0 =A0* record.c (record_message): Ditto. >> =A0 =A0 =A0 =A0(record_wait): Set record_resume_siggnal to TARGET_SIGNAL= _0. >> =A0 =A0 =A0 =A0Change the last argument of record_beneath_to_resume to >> =A0 =A0 =A0 =A0TARGET_SIGNAL_0. >> =A0 =A0 =A0 =A0* i386-tdep.c (i386_process_record): Add a argument "sigg= nal". >> =A0 =A0 =A0 =A0Call "i386_signal_record". >> =A0 =A0 =A0 =A0* i386-tdep.h (gdbarch_tdep): Add i386_signal_record. >> =A0 =A0 =A0 =A0* i386-linux-tdep.c (i386_linux_all_register_record): New >> =A0 =A0 =A0 =A0function. >> =A0 =A0 =A0 =A0(i386_linux_intx80_sysenter_record): Call >> =A0 =A0 =A0 =A0"i386_linux_all_register_record" if the syscall is >> =A0 =A0 =A0 =A0sys_sigreturn or sys_rt_sigreturn. >> =A0 =A0 =A0 =A0(i386_linux_signal_record): New function. >> =A0 =A0 =A0 =A0(i386_linux_init_abi): Set tdep->i386_signal_record to >> =A0 =A0 =A0 =A0i386_linux_signal_record. >> =A0 =A0 =A0 =A0* amd64-linux-tdep.c (amd64_linux_all_register_record): N= ew >> =A0 =A0 =A0 =A0function. >> =A0 =A0 =A0 =A0(amd64_linux_syscall_record): Call >> =A0 =A0 =A0 =A0"amd64_linux_all_register_record" if syscall is >> =A0 =A0 =A0 =A0sys_rt_sigreturn. >> =A0 =A0 =A0 =A0(amd64_linux_signal_record): New function. >> =A0 =A0 =A0 =A0(amd64_linux_init_abi): Set tdep->i386_signal_record to >> =A0 =A0 =A0 =A0amd64_linux_signal_record. >> =A0 =A0 =A0 =A0* moxie-tdep.c (moxie_process_record): Add a argument >> =A0 =A0 =A0 =A0"siggnal". >> >> --- >> =A0amd64-linux-tdep.c | =A0 63 +++++++++++++++++++++++++++++++++++++++++= +++++++++++- >> =A0gdbarch.c =A0 =A0 =A0 =A0 =A0| =A0 =A04 +-- >> =A0gdbarch.h =A0 =A0 =A0 =A0 =A0| =A0 =A04 +-- >> =A0gdbarch.sh =A0 =A0 =A0 =A0 | =A0 =A02 - >> =A0i386-linux-tdep.c =A0| =A0 51 +++++++++++++++++++++++++++++++++++++++= +++ >> =A0i386-tdep.c =A0 =A0 =A0 =A0| =A0 21 +++++++++++++++-- >> =A0i386-tdep.h =A0 =A0 =A0 =A0| =A0 =A06 ++++- >> =A0moxie-tdep.c =A0 =A0 =A0 | =A0 =A07 +++-- >> =A0record.c =A0 =A0 =A0 =A0 =A0 | =A0 10 +++++--- >> =A09 files changed, 152 insertions(+), 16 deletions(-) >> >> --- a/amd64-linux-tdep.c >> +++ b/amd64-linux-tdep.c >> @@ -275,6 +275,47 @@ static struct linux_record_tdep amd64_li >> =A0#define RECORD_ARCH_GET_GS =A0 =A0 0x1004 >> >> =A0static int >> +amd64_linux_all_register_record (struct regcache *regcache) >> +{ >> + =A0if (record_arch_list_add_reg (regcache, AMD64_RAX_REGNUM)) >> + =A0 =A0return -1; >> + =A0if (record_arch_list_add_reg (regcache, AMD64_RCX_REGNUM)) >> + =A0 =A0return -1; >> + =A0if (record_arch_list_add_reg (regcache, AMD64_RDX_REGNUM)) >> + =A0 =A0return -1; >> + =A0if (record_arch_list_add_reg (regcache, AMD64_RBX_REGNUM)) >> + =A0 =A0return -1; >> + =A0if (record_arch_list_add_reg (regcache, AMD64_RSP_REGNUM)) >> + =A0 =A0return -1; >> + =A0if (record_arch_list_add_reg (regcache, AMD64_RBP_REGNUM)) >> + =A0 =A0return -1; >> + =A0if (record_arch_list_add_reg (regcache, AMD64_RSI_REGNUM)) >> + =A0 =A0return -1; >> + =A0if (record_arch_list_add_reg (regcache, AMD64_RDI_REGNUM)) >> + =A0 =A0return -1; >> + =A0if (record_arch_list_add_reg (regcache, AMD64_R8_REGNUM)) >> + =A0 =A0return -1; >> + =A0if (record_arch_list_add_reg (regcache, AMD64_R9_REGNUM)) >> + =A0 =A0return -1; >> + =A0if (record_arch_list_add_reg (regcache, AMD64_R10_REGNUM)) >> + =A0 =A0return -1; >> + =A0if (record_arch_list_add_reg (regcache, AMD64_R11_REGNUM)) >> + =A0 =A0return -1; >> + =A0if (record_arch_list_add_reg (regcache, AMD64_R12_REGNUM)) >> + =A0 =A0return -1; >> + =A0if (record_arch_list_add_reg (regcache, AMD64_R13_REGNUM)) >> + =A0 =A0return -1; >> + =A0if (record_arch_list_add_reg (regcache, AMD64_R14_REGNUM)) >> + =A0 =A0return -1; >> + =A0if (record_arch_list_add_reg (regcache, AMD64_R15_REGNUM)) >> + =A0 =A0return -1; >> + =A0if (record_arch_list_add_reg (regcache, AMD64_EFLAGS_REGNUM)) >> + =A0 =A0return -1; >> + >> + =A0return 0; >> +} >> + >> +static int >> =A0amd64_linux_syscall_record (struct regcache *regcache) >> =A0{ >> =A0 int ret, num =3D -1; >> @@ -347,7 +388,9 @@ amd64_linux_syscall_record (struct regca >> =A0 =A0 =A0 break; >> =A0 =A0 =A0 /* sys_rt_sigreturn */ >> =A0 =A0 case 15: >> - =A0 =A0 =A0num =3D 173; >> + =A0 =A0 =A0if (amd64_linux_all_register_record (regcache)) >> + =A0 =A0 =A0 =A0return -1; >> + =A0 =A0 =A0return 0; >> =A0 =A0 =A0 break; >> =A0 =A0 =A0 /* sys_ioctl */ >> =A0 =A0 case 16: >> @@ -1384,6 +1427,22 @@ amd64_linux_syscall_record (struct regca >> =A0 return 0; >> =A0} >> >> +static int >> +amd64_linux_signal_record (struct regcache *regcache, >> + =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 enum target_signal= signal) >> +{ >> + =A0if (signal =3D=3D TARGET_SIGNAL_0) >> + =A0 =A0return 100; >> + >> + =A0if (amd64_linux_all_register_record (regcache)) >> + =A0 =A0return -1; >> + >> + =A0if (record_arch_list_add_reg (regcache, AMD64_RIP_REGNUM)) >> + =A0 =A0return -1; >> + >> + =A0return 0; >> +} >> + >> =A0static void >> =A0amd64_linux_init_abi (struct gdbarch_info info, struct gdbarch *gdbar= ch) >> =A0{ >> @@ -1599,6 +1658,8 @@ amd64_linux_init_abi (struct gdbarch_inf >> =A0 amd64_linux_record_tdep.arg6 =3D AMD64_R9_REGNUM; >> >> =A0 tdep->i386_syscall_record =3D amd64_linux_syscall_record; >> + >> + =A0tdep->i386_signal_record =3D amd64_linux_signal_record; >> =A0} >> >> >> --- a/gdbarch.c >> +++ b/gdbarch.c >> @@ -3282,13 +3282,13 @@ gdbarch_process_record_p (struct gdbarch >> =A0} >> >> =A0int >> -gdbarch_process_record (struct gdbarch *gdbarch, struct regcache >> *regcache, CORE_ADDR addr) >> +gdbarch_process_record (struct gdbarch *gdbarch, struct regcache >> *regcache, CORE_ADDR addr, enum target_signal siggnal) >> =A0{ >> =A0 gdb_assert (gdbarch !=3D NULL); >> =A0 gdb_assert (gdbarch->process_record !=3D NULL); >> =A0 if (gdbarch_debug >=3D 2) >> =A0 =A0 fprintf_unfiltered (gdb_stdlog, "gdbarch_process_record called\n= "); >> - =A0return gdbarch->process_record (gdbarch, regcache, addr); >> + =A0return gdbarch->process_record (gdbarch, regcache, addr, siggnal); >> =A0} >> >> =A0void >> --- a/gdbarch.h >> +++ b/gdbarch.h >> @@ -817,8 +817,8 @@ extern void set_gdbarch_sofun_address_ma >> >> =A0extern int gdbarch_process_record_p (struct gdbarch *gdbarch); >> >> -typedef int (gdbarch_process_record_ftype) (struct gdbarch *gdbarch, >> struct regcache *regcache, CORE_ADDR addr); >> -extern int gdbarch_process_record (struct gdbarch *gdbarch, struct >> regcache *regcache, CORE_ADDR addr); >> +typedef int (gdbarch_process_record_ftype) (struct gdbarch *gdbarch, >> struct regcache *regcache, CORE_ADDR addr, enum target_signal >> siggnal); >> +extern int gdbarch_process_record (struct gdbarch *gdbarch, struct >> regcache *regcache, CORE_ADDR addr, enum target_signal siggnal); >> =A0extern void set_gdbarch_process_record (struct gdbarch *gdbarch, >> gdbarch_process_record_ftype *process_record); >> >> =A0/* Signal translation: translate inferior's signal (host's) number in= to >> --- a/gdbarch.sh >> +++ b/gdbarch.sh >> @@ -707,7 +707,7 @@ v:int:sofun_address_maybe_missing:::0:0: >> =A0# the registers REGCACHE and memory ranges that will be affected when >> =A0# the instruction executes, along with their current values. >> =A0# Return -1 if something goes wrong, 0 otherwise. >> -M:int:process_record:struct regcache *regcache, CORE_ADDR addr:regcache= , addr >> +M:int:process_record:struct regcache *regcache, CORE_ADDR addr, enum >> target_signal siggnal:regcache, addr, siggnal >> >> =A0# Signal translation: translate inferior's signal (host's) number into >> =A0# GDB's representation. >> --- a/i386-linux-tdep.c >> +++ b/i386-linux-tdep.c >> @@ -364,6 +364,31 @@ i386_linux_write_pc (struct regcache *re >> =A0static struct linux_record_tdep i386_linux_record_tdep; >> >> =A0static int >> +i386_linux_all_register_record (struct regcache *regcache) >> +{ >> + =A0if (record_arch_list_add_reg (regcache, I386_EAX_REGNUM)) >> + =A0 =A0return -1; >> + =A0if (record_arch_list_add_reg (regcache, I386_ECX_REGNUM)) >> + =A0 =A0return -1; >> + =A0if (record_arch_list_add_reg (regcache, I386_EDX_REGNUM)) >> + =A0 =A0return -1; >> + =A0if (record_arch_list_add_reg (regcache, I386_EBX_REGNUM)) >> + =A0 =A0return -1; >> + =A0if (record_arch_list_add_reg (regcache, I386_ESP_REGNUM)) >> + =A0 =A0return -1; >> + =A0if (record_arch_list_add_reg (regcache, I386_EBP_REGNUM)) >> + =A0 =A0return -1; >> + =A0if (record_arch_list_add_reg (regcache, I386_ESI_REGNUM)) >> + =A0 =A0return -1; >> + =A0if (record_arch_list_add_reg (regcache, I386_EDI_REGNUM)) >> + =A0 =A0return -1; >> + =A0if (record_arch_list_add_reg (regcache, I386_EFLAGS_REGNUM)) >> + =A0 =A0return -1; >> + >> + =A0return 0; >> +} >> + >> +static int >> =A0i386_linux_intx80_sysenter_record (struct regcache *regcache) >> =A0{ >> =A0 int ret; >> @@ -378,6 +403,14 @@ i386_linux_intx80_sysenter_record (struc >> =A0 =A0 =A0 return -1; >> =A0 =A0 } >> >> + =A0if (tmpu32 =3D=3D 119 || tmpu32 =3D=3D 173) >> + =A0 =A0{ >> + =A0 =A0 =A0/* sys_sigreturn sys_rt_sigreturn */ >> + =A0 =A0 =A0if (i386_linux_all_register_record (regcache)) >> + =A0 =A0 =A0 =A0return -1; >> + =A0 =A0 =A0return 0; >> + =A0 =A0} >> + >> =A0 ret =3D record_linux_system_call (tmpu32, regcache, >> =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0&i386= _linux_record_tdep); >> =A0 if (ret) >> @@ -389,6 +422,22 @@ i386_linux_intx80_sysenter_record (struc >> >> =A0 return 0; >> =A0} >> + >> +static int >> +i386_linux_signal_record (struct regcache *regcache, >> + =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0enum target_signal = signal) >> +{ >> + =A0if (signal =3D=3D TARGET_SIGNAL_0) >> + =A0 =A0return 100; >> + >> + =A0if (i386_linux_all_register_record (regcache)) >> + =A0 =A0return -1; >> + >> + =A0if (record_arch_list_add_reg (regcache, I386_EIP_REGNUM)) >> + =A0 =A0return -1; >> + >> + =A0return 0; >> +} >> >> >> =A0/* The register sets used in GNU/Linux ELF core-dumps are identical to >> @@ -647,6 +696,8 @@ i386_linux_init_abi (struct gdbarch_info >> =A0 tdep->i386_intx80_record =3D i386_linux_intx80_sysenter_record; >> =A0 tdep->i386_sysenter_record =3D i386_linux_intx80_sysenter_record; >> >> + =A0tdep->i386_signal_record =3D i386_linux_signal_record; >> + >> =A0 /* N_FUN symbols in shared libaries have 0 for their values and need >> =A0 =A0 =A0to be relocated. */ >> =A0 set_gdbarch_sofun_address_maybe_missing (gdbarch, 1); >> --- a/i386-tdep.c >> +++ b/i386-tdep.c >> @@ -3205,7 +3205,7 @@ i386_record_push (struct i386_record_s * >> >> =A0int >> =A0i386_process_record (struct gdbarch *gdbarch, struct regcache *regcac= he, >> - =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0CORE_ADDR addr) >> + =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0CORE_ADDR addr, enum target_sig= nal signal) >> =A0{ >> =A0 int prefixes =3D 0; >> =A0 uint8_t tmpu8; >> @@ -3230,8 +3230,23 @@ i386_process_record (struct gdbarch *gdb >> >> =A0 if (record_debug > 1) >> =A0 =A0 fprintf_unfiltered (gdb_stdlog, "Process record: i386_process_re= cord " >> - =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 "a= ddr =3D %s\n", >> - =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 paddress (gdbarch, ir.addr= )); >> + =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 "a= ddr =3D %s signal =3D %s\n", >> + =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 paddress (gdbarch, ir.addr= ), >> + =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0target_signal_to_name (= signal)); >> + >> + =A0if (gdbarch_tdep (gdbarch)->i386_signal_record !=3D NULL) >> + =A0 =A0{ >> + =A0 =A0 =A0int ret; >> + >> + =A0 =A0 =A0/* If this signal is not be handled, return 100. =A0*/ >> + =A0 =A0 =A0ret =3D gdbarch_tdep (gdbarch)->i386_signal_record (ir.regc= ache, signal); >> + =A0 =A0 =A0if (ret < 100) >> + =A0 =A0 =A0 =A0{ >> + =A0 =A0 =A0 =A0 =A0if (record_arch_list_add_end ()) >> + =A0 =A0 =A0 =A0 =A0 =A0return -1; >> + =A0 =A0 =A0 =A0 =A0return ret; >> + =A0 =A0 =A0 =A0} >> + =A0 =A0} >> >> =A0 /* prefixes */ >> =A0 while (1) >> --- a/i386-tdep.h >> +++ b/i386-tdep.h >> @@ -114,6 +114,9 @@ struct gdbarch_tdep >> =A0 /* The map for registers because the AMD64's registers order >> =A0 =A0 =A0in GDB is not same as I386 instructions. =A0*/ >> =A0 const int *record_regmap; >> + =A0/* Parse signal args. =A0*/ >> + =A0int (*i386_signal_record) (struct regcache *regcache, >> + =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 enum target_si= gnal signal); >> =A0 /* Parse intx80 args. =A0*/ >> =A0 int (*i386_intx80_record) (struct regcache *regcache); >> =A0 /* Parse sysenter args. =A0*/ >> @@ -261,7 +264,8 @@ extern void i386_elf_init_abi (struct gd >> =A0extern void i386_svr4_init_abi (struct gdbarch_info, struct gdbarch *= ); >> >> =A0extern int i386_process_record (struct gdbarch *gdbarch, >> - =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0struct = regcache *regcache, CORE_ADDR addr); >> + =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0struct = regcache *regcache, CORE_ADDR addr, >> + =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0enum ta= rget_signal signal); >> >> >> =A0/* Functions and variables exported from i386bsd-tdep.c. =A0*/ >> --- a/moxie-tdep.c >> +++ b/moxie-tdep.c >> @@ -501,7 +501,7 @@ moxie_process_readu (CORE_ADDR addr, cha >> >> =A0int >> =A0moxie_process_record (struct gdbarch *gdbarch, struct regcache *regca= che, >> - =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 CORE_ADDR addr) >> + =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 CORE_ADDR addr, enum target_si= gnal signal) >> =A0{ >> =A0 gdb_byte buf[4]; >> =A0 uint16_t inst; >> @@ -510,8 +510,9 @@ moxie_process_record (struct gdbarch *gd >> >> =A0 if (record_debug > 1) >> =A0 =A0 fprintf_unfiltered (gdb_stdlog, "Process record: moxie_process_r= ecord " >> - =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 "a= ddr =3D 0x%s\n", >> - =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 paddress (target_gdbarch, = addr)); >> + =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 "a= ddr =3D 0x%s signal =3D %s\n", >> + =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 paddress (target_gdbarch, = addr), >> + =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 target_signal_to_name (sig= nal)); >> >> =A0 inst =3D (uint16_t) moxie_process_readu (addr, buf, 2, byte_order); >> >> --- a/record.c >> +++ b/record.c >> @@ -92,6 +92,8 @@ static int record_stop_at_limit =3D 1; >> =A0static int record_insn_max_num =3D DEFAULT_RECORD_INSN_MAX_NUM; >> =A0static int record_insn_num =3D 0; >> >> +static enum target_signal record_resume_siggnal; >> + >> =A0/* The target_ops of process record. =A0*/ >> =A0static struct target_ops record_ops; >> >> @@ -373,7 +375,8 @@ record_message (void *args) >> >> =A0 ret =3D gdbarch_process_record (get_regcache_arch (regcache), >> =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0regcache, >> - =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 regcache_r= ead_pc (regcache)); >> + =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 regcache_r= ead_pc (regcache), >> + =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0record_= resume_siggnal); >> =A0 if (ret > 0) >> =A0 =A0 error (_("Process record: inferior program stopped.")); >> =A0 if (ret < 0) >> @@ -514,7 +517,6 @@ record_close (int quitting) >> =A0} >> >> =A0static int record_resume_step =3D 0; >> -static enum target_signal record_resume_siggnal; >> =A0static int record_resume_error; >> >> =A0static void >> @@ -606,6 +608,8 @@ record_wait (struct target_ops *ops, >> =A0 =A0 =A0 =A0 =A0ptid_t ret; >> =A0 =A0 =A0 =A0 =A0CORE_ADDR tmp_pc; >> >> + =A0 =A0 =A0 =A0 =A0record_resume_siggnal =3D TARGET_SIGNAL_0; >> + >> =A0 =A0 =A0 =A0 =A0while (1) >> =A0 =A0 =A0 =A0 =A0 =A0{ >> =A0 =A0 =A0 =A0 =A0 =A0 =A0ret =3D record_beneath_to_wait (record_beneat= h_to_wait_ops, >> @@ -638,7 +642,7 @@ record_wait (struct target_ops *ops, >> =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0} >> =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0record_beneath_to_resume (rec= ord_beneath_to_resume_ops, >> =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 = =A0 =A0 =A0 =A0 =A0 =A0ptid, 1, >> - =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 = =A0 =A0 =A0 =A0 =A0 =A0 record_resume_siggnal); >> + =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 = =A0 =A0 =A0 =A0 =A0 =A0 TARGET_SIGNAL_0); >> =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0continue; >> =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0} >> =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0} >> > Hi guys, After discussion with Michael, we decide to deal with this issue step by s= tep. This is the fix bug patch. It will fix the after get sig, inferior get a lot of sig. Please help me with it. Thanks, Hui 2009-08-31 Hui Zhu * record.c (record_resume_siggnal): Deleted. (record_resume): Ditto. (record_wait): Change record_resume_siggnal to TARGET_SIGNAL_0. --- record.c | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) --- a/record.c +++ b/record.c @@ -514,7 +514,6 @@ record_close (int quitting) } static int record_resume_step =3D 0; -static enum target_signal record_resume_siggnal; static int record_resume_error; static void @@ -522,7 +521,6 @@ record_resume (struct target_ops *ops, p enum target_signal siggnal) { record_resume_step =3D step; - record_resume_siggnal =3D siggnal; if (!RECORD_IS_REPLAY) { @@ -638,7 +636,7 @@ record_wait (struct target_ops *ops, } record_beneath_to_resume (record_beneath_to_resume_ops, ptid, 1, - record_resume_siggnal); + TARGET_SIGNAL_0); continue; } } --000e0cd566d086b60904726ab9a4 Content-Type: text/plain; charset=US-ASCII; name="prec-fix-signal-bug.txt" Content-Disposition: attachment; filename="prec-fix-signal-bug.txt" Content-Transfer-Encoding: base64 X-Attachment-Id: f_fz0v7jf21 Content-length: 997 LS0tCiByZWNvcmQuYyB8ICAgIDQgKy0tLQogMSBmaWxlIGNoYW5nZWQsIDEg aW5zZXJ0aW9uKCspLCAzIGRlbGV0aW9ucygtKQoKLS0tIGEvcmVjb3JkLmMK KysrIGIvcmVjb3JkLmMKQEAgLTUxNCw3ICs1MTQsNiBAQCByZWNvcmRfY2xv c2UgKGludCBxdWl0dGluZykKIH0KIAogc3RhdGljIGludCByZWNvcmRfcmVz dW1lX3N0ZXAgPSAwOwotc3RhdGljIGVudW0gdGFyZ2V0X3NpZ25hbCByZWNv cmRfcmVzdW1lX3NpZ2duYWw7CiBzdGF0aWMgaW50IHJlY29yZF9yZXN1bWVf ZXJyb3I7CiAKIHN0YXRpYyB2b2lkCkBAIC01MjIsNyArNTIxLDYgQEAgcmVj b3JkX3Jlc3VtZSAoc3RydWN0IHRhcmdldF9vcHMgKm9wcywgcAogICAgICAg ICAgICAgICAgZW51bSB0YXJnZXRfc2lnbmFsIHNpZ2duYWwpCiB7CiAgIHJl Y29yZF9yZXN1bWVfc3RlcCA9IHN0ZXA7Ci0gIHJlY29yZF9yZXN1bWVfc2ln Z25hbCA9IHNpZ2duYWw7CiAKICAgaWYgKCFSRUNPUkRfSVNfUkVQTEFZKQog ICAgIHsKQEAgLTYzOCw3ICs2MzYsNyBAQCByZWNvcmRfd2FpdCAoc3RydWN0 IHRhcmdldF9vcHMgKm9wcywKIAkJCX0KIAkJICAgICAgcmVjb3JkX2JlbmVh dGhfdG9fcmVzdW1lIChyZWNvcmRfYmVuZWF0aF90b19yZXN1bWVfb3BzLAog CQkJCQkJcHRpZCwgMSwKLQkJCQkJCXJlY29yZF9yZXN1bWVfc2lnZ25hbCk7 CisJCQkJCQlUQVJHRVRfU0lHTkFMXzApOwogCQkgICAgICBjb250aW51ZTsK IAkJICAgIH0KIAkJfQo= --000e0cd566d086b60904726ab9a4--