From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 16168 invoked by alias); 30 Aug 2009 03:03:38 -0000 Received: (qmail 15395 invoked by uid 22791); 30 Aug 2009 03:03:36 -0000 X-SWARE-Spam-Status: No, hits=-0.8 required=5.0 tests=AWL,BAYES_00,J_CHICKENPOX_43,J_CHICKENPOX_44,J_CHICKENPOX_48,SARE_MSGID_LONG40,SPF_PASS X-Spam-Check-By: sourceware.org Received: from mail-iw0-f183.google.com (HELO mail-iw0-f183.google.com) (209.85.223.183) by sourceware.org (qpsmtpd/0.43rc1) with ESMTP; Sun, 30 Aug 2009 03:03:24 +0000 Received: by iwn13 with SMTP id 13so1320009iwn.12 for ; Sat, 29 Aug 2009 20:03:22 -0700 (PDT) MIME-Version: 1.0 Received: by 10.231.122.208 with SMTP id m16mr3698253ibr.16.1251601402147; Sat, 29 Aug 2009 20:03:22 -0700 (PDT) In-Reply-To: References: From: Hui Zhu Date: Sun, 30 Aug 2009 03:09: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=0016e64078f0f9b50a0472532871 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/msg00554.txt.bz2 --0016e64078f0f9b50a0472532871 Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: quoted-printable Content-length: 16984 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 "siggn= al". > =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): New > =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 *gdbarc= h) > =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 into > --- 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 s= ignal) > +{ > + =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 *regcach= e, > - =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_sign= al 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_rec= ord " > - =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 "ad= dr =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 "ad= dr =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 (s= ignal)); > + > + =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.regca= che, 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_sig= nal 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 r= egcache *regcache, CORE_ADDR addr); > + =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0struct r= egcache *regcache, CORE_ADDR addr, > + =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0enum tar= get_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 *regcac= he, > - =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_sig= nal 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_re= cord " > - =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 "ad= dr =3D 0x%s\n", > - =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 paddress (target_gdbarch, a= ddr)); > + =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 "ad= dr =3D 0x%s signal =3D %s\n", > + =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 paddress (target_gdbarch, a= ddr), > + =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 target_signal_to_name (sign= al)); > > =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_re= ad_pc (regcache)); > + =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 regcache_re= ad_pc (regcache), > + =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0record_r= esume_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_beneath= _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 (reco= rd_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} > --0016e64078f0f9b50a0472532871 Content-Type: text/x-csrc; charset=US-ASCII; name="1.c" Content-Disposition: attachment; filename="1.c" Content-Transfer-Encoding: base64 X-Attachment-Id: f_fyz74zyb1 Content-length: 529 I2luY2x1ZGUgPHN5cy90eXBlcy5oPg0KI2luY2x1ZGUgPHN0ZGlvLmg+DQoj aW5jbHVkZSA8c3RkbGliLmg+DQojaW5jbHVkZSA8c3RyaW5nLmg+DQojaW5j bHVkZSA8dW5pc3RkLmg+DQojaW5jbHVkZSA8ZXJybm8uaD4NCiNpbmNsdWRl IDxzaWduYWwuaD4NCg0Kc3RhdGljIHZvaWQgc2lnX2NodWxpKGludCBzaWdu bykNCnsNCglwcmludGYoIiVkXG4iLHNpZ25vKTsNCglyZXR1cm47DQp9DQpp bnQgbWFpbihpbnQgYXJnYyxjaGFyICphcmd2W10pDQp7DQoJaWYgKHNpZ25h bChTSUdBTFJNLHNpZ19jaHVsaSk9PVNJR19FUlIpIHsNCgkJcGVycm9yKGFy Z3ZbMF0pOw0KCQlleGl0KGVycm5vKTsNCgl9DQoJYWxhcm0oMSk7DQoJcGF1 c2UoKTsNCglwcmludGYoImdvXG4iKTsNCn0NCg== --0016e64078f0f9b50a0472532871--