From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 4486 invoked by alias); 19 Jul 2009 17:19:36 -0000 Received: (qmail 4400 invoked by uid 22791); 19 Jul 2009 17:19:11 -0000 X-SWARE-Spam-Status: No, hits=-1.4 required=5.0 tests=AWL,BAYES_00,J_CHICKENPOX_46,SARE_MSGID_LONG40,SPF_PASS X-Spam-Check-By: sourceware.org Received: from mail-px0-f183.google.com (HELO mail-px0-f183.google.com) (209.85.216.183) by sourceware.org (qpsmtpd/0.43rc1) with ESMTP; Sun, 19 Jul 2009 17:18:43 +0000 Received: by pxi13 with SMTP id 13so1458638pxi.12 for ; Sun, 19 Jul 2009 10:18:40 -0700 (PDT) MIME-Version: 1.0 Received: by 10.143.1.12 with SMTP id d12mr748107wfi.295.1248023920241; Sun, 19 Jul 2009 10:18:40 -0700 (PDT) In-Reply-To: <4A611BB8.2050808@vmware.com> References: <4A5A82F9.5050503@vmware.com> <4A611BB8.2050808@vmware.com> From: Hui Zhu Date: Sun, 19 Jul 2009 17:39:00 -0000 Message-ID: Subject: Re: [RFA/RFC Prec] Add Linux AMD64 process record support second version, (64 bits system call support) 2/3 To: Michael Snyder , Mark Kettenis Cc: gdb-patches ml Content-Type: multipart/mixed; boundary=001636e0a7746ff211046f123668 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-07/txt/msg00455.txt.bz2 --001636e0a7746ff211046f123668 Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: quoted-printable Content-length: 150516 On Sat, Jul 18, 2009 at 08:47, Michael Snyder wrote: > Hui Zhu wrote: > >> @@ -80,6 +81,133 @@ >> =A0#define RECORD_Q_XGETQSTAT =A0 =A0 (('5' << 8) + 5) >> =A0#define RECORD_Q_XGETQUOTA =A0 =A0 (('3' << 8) + 3) >> >> +#define OUTPUT_REG(val, num) =A0 =A0 =A0phex_nz ((val), \ >> + =A0 =A0TYPE_LENGTH (gdbarch_register_type (get_regcache_arch (regcache= ), >> (num)))) >> + >> +static int >> +record_linux_sockaddr (struct regcache *regcache, >> + =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 struct linux_record_tdep *= tdep, ULONGEST addr, >> + =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 ULONGEST len) >> +{ >> + =A0gdb_byte *a; >> + =A0int addrlen; >> + =A0struct gdbarch *gdbarch =3D get_regcache_arch (regcache); >> + =A0enum bfd_endian byte_order =3D gdbarch_byte_order (gdbarch); >> + >> + =A0if (!addr) >> + =A0 =A0return 0; >> + >> + =A0a =3D alloca (tdep->size_int); >> + >> + =A0if (record_arch_list_add_mem ((CORE_ADDR) len, tdep->size_int)) >> + =A0 =A0return -1; >> + >> + =A0/* Get the addrlen. =A0*/ >> + =A0if (target_read_memory ((CORE_ADDR) len, a, tdep->size_int)) >> + =A0 =A0{ >> + =A0 =A0 =A0if (record_debug) >> + =A0 =A0 =A0 =A0fprintf_unfiltered (gdb_stdlog, >> + =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0"Process record= : error reading " >> + =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0"memory at addr= =3D 0x%s len =3D %d.\n", >> + =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0phex_nz (len, t= dep->size_pointer), >> + =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0tdep->size_int); >> + =A0 =A0 =A0 =A0return -1; >> + =A0 =A0} >> + =A0addrlen =3D (int) extract_unsigned_integer(a, tdep->size_int, >> byte_order); > > Space between function name and left paren. > > >> + =A0/* msg_iov msg_iovlen */ >> + =A0addr =3D extract_unsigned_integer (a, tdep->size_pointer, byte_orde= r); >> + =A0a +=3D tdep->size_pointer; >> + =A0if (addr) >> + =A0 =A0{ >> + =A0 =A0 =A0ULONGEST i; >> + =A0 =A0 =A0ULONGEST len =3D extract_unsigned_integer (a, tdep->size_si= ze_t, >> + =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 = =A0 =A0 =A0 =A0 =A0 =A0 byte_order); >> + =A0 =A0 =A0gdb_byte *iov =3D alloca (tdep->size_iovec); >> + >> + =A0 =A0 =A0for (i =3D 0; i < len; i++) >> + =A0 =A0 =A0 =A0{ >> + =A0 =A0 =A0 =A0 =A0if (target_read_memory ((CORE_ADDR) addr, iov, >> tdep->size_iovec)) >> + =A0 =A0 =A0 =A0 =A0 =A0{ >> + =A0 =A0 =A0 =A0 =A0 =A0 =A0if (record_debug) >> + =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0fprintf_unfiltered (gdb_stdlog, >> + =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 = =A0"Process record: error " >> + =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 = =A0"reading memory at " >> + =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 = =A0"addr =3D 0x%s " >> + =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 = =A0"len =3D %d.\n", >> + =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 = =A0phex_nz (addr,tdep->size_pointer), >> + =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 = =A0tdep->size_iovec); >> + =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0return -1; >> + =A0 =A0 =A0 =A0 =A0 =A0} >> + =A0 =A0 =A0 =A0 =A0if (record_arch_list_add_mem ((CORE_ADDR) >> extract_unsigned_integer >> + =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 = =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0(iov, >> tdep->size_pointer, >> + =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 = =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 byte_order), >> + =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 = =A0 =A0 =A0(int) extract_unsigned_integer >> + =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 = =A0 =A0 =A0 =A0 =A0 =A0 =A0(iov + >> tdep->size_pointer, >> + =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 = =A0 =A0 =A0 =A0 =A0 =A0 =A0 tdep->size_size_t, >> + =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 = =A0 =A0 =A0 =A0 =A0 =A0 =A0 byte_order))) > > This statement is so ugly and badly indented. > It would be great if you could just use a couple of > temporary variables, one CORE_ADDR and one int, and > break up the line. =A0Call extract_unsigned_integer first, > and then record_arch_list_add_mem. > > >> + =A0 =A0 =A0 =A0 =A0 =A0return -1; >> + =A0 =A0 =A0 =A0 =A0addr +=3D tdep->size_iovec; >> + =A0 =A0 =A0 =A0} >> + =A0 =A0} >> + =A0a +=3D tdep->size_size_t; >> + >> + =A0/* msg_control msg_controllen */ >> + =A0addr =3D extract_unsigned_integer (a, tdep->size_pointer, byte_orde= r); >> + =A0a +=3D tdep->size_pointer; >> + =A0if (record_arch_list_add_mem ((CORE_ADDR) addr, >> + =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0(int) e= xtract_unsigned_integer >> + =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 = =A0 =A0 =A0(a, tdep->size_size_t, >> byte_order))) > > Same here, maybe use the same temporary variable. > > >> + =A0 =A0case 514: >> + =A0 =A0 =A0regcache_raw_read_unsigned (regcache, tdep->arg5, &tmpulong= est); >> + =A0 =A0 =A0if (tmpulongest) >> + =A0 =A0 =A0 =A0{ >> + =A0 =A0 =A0 =A0 =A0ULONGEST optvalp; >> + =A0 =A0 =A0 =A0 =A0gdb_byte *optlenp =3D alloca (tdep->size_int); >> + =A0 =A0 =A0 =A0 =A0if (target_read_memory ((CORE_ADDR) tmpulongest, op= tlenp, >> + =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0tde= p->size_int)) >> + =A0 =A0 =A0 =A0 =A0 =A0{ >> + =A0 =A0 =A0 =A0 =A0 =A0 =A0if (record_debug) >> + =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0fprintf_unfiltered (gdb_stdlog, >> + =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 = =A0"Process record: error reading " >> + =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 = =A0"memory at addr =3D 0x%s " >> + =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 = =A0"len =3D %d.\n", >> + =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 = =A0OUTPUT_REG (tmpulongest, tdep->arg5), >> + =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 = =A0tdep->size_int); >> + =A0 =A0 =A0 =A0 =A0 =A0 =A0return -1; >> + =A0 =A0 =A0 =A0 =A0 =A0} >> + =A0 =A0 =A0 =A0 =A0regcache_raw_read_unsigned (regcache, tdep->arg4, &= optvalp); >> + =A0 =A0 =A0 =A0 =A0if (record_arch_list_add_mem ((CORE_ADDR) optvalp, >> + =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 = =A0 =A0 =A0(int) extract_signed_integer >> + =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 = =A0 =A0 =A0 =A0 =A0 =A0 =A0(optlenp, tdep->size_int, >> + =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 = =A0 =A0 =A0 =A0 =A0 =A0 =A0 byte_order))) > > Another great place for a temporary variable, just to > avoid having to break up such a long line so awkwardly. > > > >> + =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0tmpulongest +=3D tdep->size_ulong; >> + =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0if (target_read_memory ((CORE_ADDR) tmp= ulongest, a, >> + =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 = =A0 =A0 =A0tdep->size_ulong * 2)) >> + =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0{ >> + =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0if (record_debug) >> + =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0fprintf_unfiltered (gdb_std= log, >> + =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 = =A0 =A0 =A0 =A0"Process record: error reading >> " >> + =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 = =A0 =A0 =A0 =A0"memory at addr =3D 0x%s len =3D >> %d.\n", >> + =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 = =A0 =A0 =A0 =A0OUTPUT_REG (tmpulongest, >> tdep->arg2), >> + =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 = =A0 =A0 =A0 =A0tdep->size_ulong * 2); >> + =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0return -1; >> + =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0} >> + =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0if (record_linux_sockaddr (regcache, td= ep, >> + =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 = =A0 =A0 =A0 =A0 extract_unsigned_integer >> + =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 = =A0 =A0 =A0 =A0 =A0 (a, tdep->size_ulong, >> byte_order), >> + =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 = =A0 =A0 =A0 =A0 extract_unsigned_integer >> + =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 = =A0 =A0 =A0 =A0 =A0 (a + tdep->size_ulong, >> + =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 = =A0 =A0 =A0 =A0 =A0 =A0tdep->size_ulong, >> byte_order))) > > ... and again, same thing. > >> + =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0return -1; >> + =A0 =A0 =A0 =A0 =A0 =A0 =A0} >> + =A0 =A0 =A0 =A0 =A0} >> + =A0 =A0 =A0 =A0 =A0break; >> >> - =A0 =A0 =A0 =A0 =A0 regcache_raw_read (regcache, tdep->arg2, >> - =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0(gdb_byte *= ) & tmpu32); >> - =A0 =A0 =A0 =A0 =A0 if (tmpu32) >> - =A0 =A0 =A0 =A0 =A0 =A0 { >> - =A0 =A0 =A0 =A0 =A0 =A0 =A0 if (target_read_memory (tmpu32, (gdb_byte = *) a, sizeof >> (a))) >> - =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 { >> - =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 if (record_debug) >> - =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 fprintf_unfiltered (gdb_stdlog, >> - =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 = =A0 =A0 =A0 "Process record: error reading " >> - =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 = =A0 =A0 =A0 "memory at addr =3D %s len =3D >> %lu.\n", >> - =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 = =A0 =A0 =A0 paddress (gdbarch, tmpu32), >> - =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 = =A0 =A0 =A0 (unsigned long)sizeof (a)); >> - =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 return -1; >> - =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 } >> - =A0 =A0 =A0 =A0 =A0 =A0 =A0 if (a[4]) >> - =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 { >> - =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 if (target_read_memory >> - =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 (a[4], (gdb_byte *) & av, = sizeof (av))) > > How about: =A0 =A0 =A0 =A0 =A0 =A0if (target_read_memory (a[4], > =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 = =A0 =A0 =A0 =A0 =A0gdb_byte *) & av, > =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 = =A0 =A0 =A0 =A0 =A0sizeof (av))) > > >> + =A0 =A0 =A0 =A0case RECORD_SYS_SOCKETPAIR: >> + =A0 =A0 =A0 =A0 =A0{ >> + =A0 =A0 =A0 =A0 =A0 =A0gdb_byte *a =3D alloca (tdep->size_ulong); >> + =A0 =A0 =A0 =A0 =A0 =A0regcache_raw_read_unsigned (regcache, tdep->arg= 2, >> + =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 = =A0 =A0 =A0&tmpulongest); >> + =A0 =A0 =A0 =A0 =A0 =A0if (tmpulongest) >> + =A0 =A0 =A0 =A0 =A0 =A0 =A0{ >> + =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0tmpulongest +=3D tdep->size_ulong * 3; >> + =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0if (target_read_memory ((CORE_ADDR) tmp= ulongest, a, >> + =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 = =A0 =A0 =A0tdep->size_ulong)) >> + =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0{ >> + =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0if (record_debug) >> + =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0fprintf_unfiltered (gdb_std= log, >> + =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 = =A0 =A0 =A0 =A0"Process record: error reading >> " >> + =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 = =A0 =A0 =A0 =A0"memory at addr =3D 0x%s len =3D >> %d.\n", >> + =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 = =A0 =A0 =A0 =A0OUTPUT_REG (tmpulongest, >> tdep->arg2), >> + =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 = =A0 =A0 =A0 =A0tdep->size_ulong); >> + =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0return -1; >> + =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0} >> + =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0if (record_arch_list_add_mem ((CORE_ADD= R) >> extract_unsigned_integer >> + =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 = =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 (a, >> + >> =A0tdep->size_ulong, >> + =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 = =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0byte_order), >> + =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 = =A0 =A0 =A0 =A0 =A0 =A0tdep->size_int)) > > And another great place for a temp variable. > > >> + =A0 =A0 =A0 =A0 =A0 =A0 =A0tmpulongest +=3D tdep->size_ulong * 4; >> + =A0 =A0 =A0 =A0 =A0 =A0 =A0if (target_read_memory ((CORE_ADDR) tmpulon= gest, a, >> + =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 = =A0 =A0tdep->size_ulong * 2)) >> + =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0{ >> + =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0if (record_debug) >> + =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0fprintf_unfiltered (gdb_stdlog, >> + =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 = =A0 =A0 =A0"Process record: error reading " >> + =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 = =A0 =A0 =A0"memory at addr =3D 0x%s len =3D >> %d.\n", >> + =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 = =A0 =A0 =A0OUTPUT_REG (tmpulongest, >> tdep->arg2), >> + =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 = =A0 =A0 =A0tdep->size_ulong * 2); >> + =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0return -1; >> + =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0} >> + =A0 =A0 =A0 =A0 =A0 =A0 =A0if (record_linux_sockaddr (regcache, tdep, >> + =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 = =A0 =A0 =A0 extract_unsigned_integer >> + =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 = =A0 =A0 =A0 =A0 (a, tdep->size_ulong, >> byte_order), >> + =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 = =A0 =A0 =A0 extract_unsigned_integer >> + =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 = =A0 =A0 =A0 =A0 (a + tdep->size_ulong, >> + =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 = =A0 =A0 =A0 =A0 =A0tdep->size_ulong, >> byte_order))) >> + =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0return -1; >> + =A0 =A0 =A0 =A0 =A0 =A0} >> + =A0 =A0 =A0 =A0case RECORD_SYS_RECV: > > And again... > >> + =A0 =A0 =A0 =A0 =A0regcache_raw_read_unsigned (regcache, tdep->arg2, >> + =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 = =A0 =A0&tmpulongest); >> + =A0 =A0 =A0 =A0 =A0if (tmpulongest) >> + =A0 =A0 =A0 =A0 =A0 =A0{ >> + =A0 =A0 =A0 =A0 =A0 =A0 =A0gdb_byte *a =3D alloca (tdep->size_ulong * = 2); >> + >> + =A0 =A0 =A0 =A0 =A0 =A0 =A0tmpulongest +=3D tdep->size_ulong; >> + =A0 =A0 =A0 =A0 =A0 =A0 =A0if (target_read_memory ((CORE_ADDR) tmpulon= gest, a, >> + =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 = =A0 =A0tdep->size_ulong)) >> + =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0{ >> + =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0if (record_debug) >> + =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0fprintf_unfiltered (gdb_stdlog, >> + =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 = =A0 =A0 =A0"Process record: error reading " >> + =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 = =A0 =A0 =A0"memory at addr =3D 0x%s len =3D >> %d.\n", >> + =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 = =A0 =A0 =A0OUTPUT_REG (tmpulongest, >> tdep->arg2), >> + =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 = =A0 =A0 =A0tdep->size_ulong); >> + =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0return -1; >> + =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0} >> + =A0 =A0 =A0 =A0 =A0 =A0 =A0tmpulongest =3D extract_unsigned_integer (a, >> tdep->size_ulong, >> + =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 = =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0byte_order); >> + =A0 =A0 =A0 =A0 =A0 =A0 =A0if (tmpulongest) >> + =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0{ >> + =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0a +=3D tdep->size_ulong; >> + =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0if (record_arch_list_add_mem >> + =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0((CORE_ADDR) tmpulonges= t, >> + =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 (int) extract_unsigned= _integer (a, >> tdep->size_ulong, >> + =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 = =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 byte_order))) >> + =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0return -1; >> + =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0} >> + =A0 =A0 =A0 =A0 =A0 =A0} >> + =A0 =A0 =A0 =A0 =A0break; >> + =A0 =A0 =A0 =A0case RECORD_SYS_SHUTDOWN: > > And again.... > > >> + =A0 =A0 =A0 =A0case RECORD_SYS_SETSOCKOPT: >> + =A0 =A0 =A0 =A0 =A0break; >> + =A0 =A0 =A0 =A0case RECORD_SYS_GETSOCKOPT: >> + =A0 =A0 =A0 =A0 =A0{ >> + =A0 =A0 =A0 =A0 =A0 =A0gdb_byte *a =3D alloca (tdep->size_ulong * 2); >> + =A0 =A0 =A0 =A0 =A0 =A0gdb_byte *av =3D alloca (tdep->size_int); >> + >> + =A0 =A0 =A0 =A0 =A0 =A0regcache_raw_read_unsigned (regcache, tdep->arg= 2, >> + =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 = =A0 =A0 =A0&tmpulongest); >> + =A0 =A0 =A0 =A0 =A0 =A0if (tmpulongest) >> + =A0 =A0 =A0 =A0 =A0 =A0 =A0{ >> + =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0tmpulongest +=3D tdep->size_ulong * 3; >> + =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0if (target_read_memory ((CORE_ADDR) tmp= ulongest, a, >> + =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 = =A0 =A0 =A0tdep->size_ulong * 2)) >> + =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0{ >> + =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0if (record_debug) >> + =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0fprintf_unfiltered (gdb_std= log, >> + =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 = =A0 =A0 =A0 =A0"Process record: error reading >> " >> + =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 = =A0 =A0 =A0 =A0"memory at addr =3D 0x%s len =3D >> %d.\n", >> + =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 = =A0 =A0 =A0 =A0OUTPUT_REG (tmpulongest, >> tdep->arg2), >> + =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 = =A0 =A0 =A0 =A0tdep->size_ulong * 2); >> + =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0return -1; >> + =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0} >> + =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0tmpulongest =3D extract_unsigned_intege= r (a + >> tdep->size_ulong, >> + =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 = =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0tdep->size_ulong, >> + =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 = =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0byte_order); >> + =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0if (tmpulongest) >> + =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0{ >> + =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0if (target_read_memory ((CORE_A= DDR) tmpulongest, av, >> + =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 = =A0 =A0 =A0 =A0 =A0tdep->size_int)) >> + =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0{ >> + =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0if (record_debug) >> + =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0fprintf_unfiltered = (gdb_stdlog, >> + =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 = =A0 =A0 =A0 =A0 =A0 =A0"Process record: error >> reading " >> + =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 = =A0 =A0 =A0 =A0 =A0 =A0"memory at addr =3D 0x%s " >> + =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 = =A0 =A0 =A0 =A0 =A0 =A0"len =3D %d.\n", >> + =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 = =A0 =A0 =A0 =A0 =A0 =A0phex_nz (tmpulongest, >> + =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 = =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 tdep->size_ulong), >> + =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 = =A0 =A0 =A0 =A0 =A0 =A0tdep->size_int); >> + =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0return -1; >> + =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0} >> + =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0if (record_arch_list_add_mem >> + =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0((CORE_ADDR) extrac= t_unsigned_integer >> + =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 = =A0 =A0 =A0 (a, tdep->size_ulong, >> byte_order), >> + =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 (int) extract_unsi= gned_integer (av, >> tdep->size_int, >> + =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 = =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 byte_order))) > > And again... > > >> + =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0return -1; >> + =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0a +=3D tdep->size_ulong; >> + =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0if (record_arch_list_add_mem >> + =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0((CORE_ADDR) extrac= t_unsigned_integer >> + =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 = =A0 =A0 =A0 (a, tdep->size_ulong, >> byte_order), >> + =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 tdep->size_int)) > > And again... > >> + =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0return -1; >> + =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0} >> + =A0 =A0 =A0 =A0 =A0 =A0 =A0} >> + =A0 =A0 =A0 =A0 =A0} >> + =A0 =A0 =A0 =A0 =A0break; >> + =A0 =A0 =A0 =A0case RECORD_SYS_SENDMSG: >> + =A0 =A0 =A0 =A0 =A0break; >> + =A0 =A0 =A0 =A0case RECORD_SYS_RECVMSG: >> + =A0 =A0 =A0 =A0 =A0{ >> + =A0 =A0 =A0 =A0 =A0 =A0gdb_byte *a =3D alloca (tdep->size_ulong); >> + >> + =A0 =A0 =A0 =A0 =A0 =A0regcache_raw_read_unsigned (regcache, tdep->arg= 2, >> + =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 = =A0 =A0 =A0&tmpulongest); >> + =A0 =A0 =A0 =A0 =A0 =A0if (tmpulongest) >> + =A0 =A0 =A0 =A0 =A0 =A0 =A0{ >> + =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0tmpulongest +=3D tdep->size_ulong; >> + =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0if (target_read_memory ((CORE_ADDR) tmp= ulongest, a, >> + =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 = =A0 =A0 =A0tdep->size_ulong)) >> + =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0{ >> + =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0if (record_debug) >> + =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0fprintf_unfiltered (gdb_std= log, >> + =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 = =A0 =A0 =A0 =A0"Process record: error reading >> " >> + =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 = =A0 =A0 =A0 =A0"memory at addr =3D 0x%s len =3D >> %d.\n", >> + =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 = =A0 =A0 =A0 =A0OUTPUT_REG (tmpulongest, >> tdep->arg2), >> + =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 = =A0 =A0 =A0 =A0tdep->size_ulong); >> + =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0return -1; >> + =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0} >> + =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0tmpulongest =3D extract_unsigned_intege= r (a, >> tdep->size_ulong, >> + =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 = =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0byte_order); >> + =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0if (record_linux_msghdr (regcache, tdep, >> + =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 = =A0 =A0 =A0 extract_unsigned_integer >> + =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 = =A0 =A0 =A0 =A0 (a, tdep->size_ulong, >> byte_order))) > > And again... > > >> @@ -1005,47 +1231,121 @@ record_linux_system_call (int num, struc >> >> =A0 =A0 =A0 /* sys_sysinfo */ >> =A0 =A0 case 116: >> - =A0 =A0 =A0regcache_raw_read (regcache, tdep->arg1, (gdb_byte *) & tmp= u32); >> - =A0 =A0 =A0if (record_arch_list_add_mem (tmpu32, tdep->size_sysinfo)) >> - =A0 =A0 =A0 return -1; >> + =A0 =A0 =A0regcache_raw_read_unsigned (regcache, tdep->arg1, &tmpulong= est); >> + =A0 =A0 =A0if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest, >> + =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 = =A0tdep->size_sysinfo)) >> + =A0 =A0 =A0 =A0return -1; >> + =A0 =A0 =A0break; >> + >> + =A0 =A0 =A0/* sys_shmget */ >> + =A0 =A0case 520: >> + =A0 =A0 =A0/* sys_semget */ >> + =A0 =A0case 523: >> + =A0 =A0 =A0/* sys_semop */ >> + =A0 =A0case 524: >> + =A0 =A0 =A0/* sys_msgget */ >> + =A0 =A0case 528: >> + =A0 =A0 =A0/* sys_shmdt */ >> + =A0 =A0 =A0/* XXX maybe need do some record works wiht sys_shmdt. =A0*/ > > "with" > > >> + =A0 =A0 =A0 =A0ULONGEST vec, vlen; >> + >> + =A0 =A0 =A0 =A0regcache_raw_read_unsigned (regcache, tdep->arg2, &vec); >> + =A0 =A0 =A0 =A0if (vec) >> + =A0 =A0 =A0 =A0 =A0{ >> + =A0 =A0 =A0 =A0 =A0 =A0gdb_byte *iov =3D alloca (tdep->size_iovec); >> + >> + =A0 =A0 =A0 =A0 =A0 =A0regcache_raw_read_unsigned (regcache, tdep->arg= 3, &vlen); >> + =A0 =A0 =A0 =A0 =A0 =A0for (tmpulongest =3D 0; tmpulongest < vlen; tmp= ulongest++) >> + =A0 =A0 =A0 =A0 =A0 =A0 =A0{ >> + =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0if (target_read_memory ((CORE_ADDR) vec= , iov, >> + =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 = =A0 =A0 =A0tdep->size_iovec)) >> + =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0{ >> + =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0if (record_debug) >> + =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0fprintf_unfiltered (gdb_std= log, >> + =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 = =A0 =A0 =A0 =A0"Process record: error reading >> " >> + =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 = =A0 =A0 =A0 =A0"memory at addr =3D 0x%s len =3D >> %d.\n", >> + =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 = =A0 =A0 =A0 =A0OUTPUT_REG (vec, tdep->arg2), >> + =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 = =A0 =A0 =A0 =A0tdep->size_iovec); >> + =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0return -1; >> + =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0} >> + =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0if (record_arch_list_add_mem >> + =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0((CORE_ADDR) extract_unsign= ed_integer >> + =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 = =A0 (iov, tdep->size_pointer, >> byte_order), >> + =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 (int) extract_unsigned_int= eger >> + =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 (iov + tde= p->size_pointer, >> tdep->size_size_t, >> + =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0byte_or= der))) > > And same thing... > > >> + =A0 =A0 =A0regcache_raw_read_unsigned (regcache, tdep->arg3, &tmpulong= est); >> + =A0 =A0 =A0if (tmpulongest) >> + =A0 =A0 =A0 =A0{ >> + =A0 =A0 =A0 =A0 =A0ULONGEST nr, i; >> + =A0 =A0 =A0 =A0 =A0gdb_byte *iocbp; >> + >> + =A0 =A0 =A0 =A0 =A0regcache_raw_read_unsigned (regcache, tdep->arg2, &= nr); >> + =A0 =A0 =A0 =A0 =A0iocbp =3D alloca (nr * tdep->size_pointer); >> + =A0 =A0 =A0 =A0 =A0if (target_read_memory ((CORE_ADDR) tmpulongest, io= cbp, >> + =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0nr = * tdep->size_pointer)) >> + =A0 =A0 =A0 =A0 =A0 =A0{ >> + =A0 =A0 =A0 =A0 =A0 =A0 =A0if (record_debug) >> + =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0fprintf_unfiltered (gdb_stdlog, >> + =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 = =A0"Process record: error reading memory >> " >> + =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 = =A0"at addr =3D 0x%s len =3D %u.\n", >> + =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 = =A0OUTPUT_REG (tmpulongest, tdep->arg2), >> + =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 = =A0(int) (nr * tdep->size_pointer)); >> + =A0 =A0 =A0 =A0 =A0 =A0 =A0return -1; >> + =A0 =A0 =A0 =A0 =A0 =A0} >> + =A0 =A0 =A0 =A0 =A0for (i =3D 0; i < nr; i++) >> + =A0 =A0 =A0 =A0 =A0 =A0{ >> + =A0 =A0 =A0 =A0 =A0 =A0 =A0if (record_arch_list_add_mem >> + =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0((CORE_ADDR) extract_unsigned_i= nteger (iocbp, >> + >> tdep->size_pointer, >> + =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 = =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 byte_order), >> + =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 tdep->size_iocb)) > > And again... > > >> =A0 =A0 case 319: >> - =A0 =A0 =A0regcache_raw_read (regcache, tdep->arg2, (gdb_byte *) & tmp= u32); >> - =A0 =A0 =A0if (tmpu32) >> - =A0 =A0 =A0 { >> - =A0 =A0 =A0 =A0 int32_t maxevents; >> - =A0 =A0 =A0 =A0 regcache_raw_read (regcache, tdep->arg3, >> - =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0(gdb_byte *) & = maxevents); >> - =A0 =A0 =A0 =A0 if (record_arch_list_add_mem >> - =A0 =A0 =A0 =A0 =A0 =A0 (tmpu32, maxevents * tdep->size_epoll_event)) >> - =A0 =A0 =A0 =A0 =A0 return -1; >> - =A0 =A0 =A0 } >> + =A0 =A0 =A0regcache_raw_read_unsigned (regcache, tdep->arg2, &tmpulong= est); >> + =A0 =A0 =A0if (tmpulongest) >> + =A0 =A0 =A0 =A0{ >> + =A0 =A0 =A0 =A0 =A0ULONGEST maxevents; >> + =A0 =A0 =A0 =A0 =A0regcache_raw_read_unsigned (regcache, tdep->arg3, &= maxevents); >> + =A0 =A0 =A0 =A0 =A0if (record_arch_list_add_mem ((CORE_ADDR) tmpulonge= st, >> + =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 = =A0 =A0 =A0(int) maxevents * >> tdep->size_epoll_event)) > > I think you don't need the (int) cast here, and if you > remove it, the line will be less than 80 chars. > > > Aside from those comments, this patch looks great! > > 2009-07-20 Hui Zhu Add process record Linux system call 64 bits support. * linux-record.h (linux_record_tdep): Add size_pointer, size_size_t, size_iovec and arg6. Change the values of size_int, size_long and size_ulong to gdbarch_int_bit (gdbarch) / TARGET_CHAR_BIT, gdbarch_long_bit (gdbarch) / TARGET_CHAR_BIT, gdbarch_long_bit (gdbarch) / TARGET_CHAR_BIT. * i386-linux-tdep.c (i386_linux_init_abi): Ditto. (i386_linux_intx80_sysenter_record): Add a check for system call number. * linux-record.c (record_linux_system_call): Make this function support 64 bits. --- i386-linux-tdep.c | 26 linux-record.c | 2570 ++++++++++++++++++++++++++++++-------------------= ----- linux-record.h | 5 3 files changed, 1489 insertions(+), 1112 deletions(-) --- a/i386-linux-tdep.c +++ b/i386-linux-tdep.c @@ -369,7 +369,14 @@ i386_linux_intx80_sysenter_record (struc int ret; uint32_t tmpu32; - regcache_raw_read (regcache, I386_EAX_REGNUM, (gdb_byte *)&tmpu32); + regcache_raw_read (regcache, I386_EAX_REGNUM, (gdb_byte *) &tmpu32); + + if (tmpu32 > 499) + { + printf_unfiltered (_("Process record and replay target doesn't " + "support syscall number %u\n"), tmpu32); + return -1; + } ret =3D record_linux_system_call (tmpu32, regcache, &i386_linux_record_tdep); @@ -481,6 +488,8 @@ i386_linux_init_abi (struct gdbarch_info /* Initialize the i386_linux_record_tdep. */ /* These values are the size of the type that will be used in a system call. They are obtained from Linux Kernel source. */ + i386_linux_record_tdep.size_pointer + =3D gdbarch_ptr_bit (gdbarch) / TARGET_CHAR_BIT; i386_linux_record_tdep.size__old_kernel_stat =3D 32; i386_linux_record_tdep.size_tms =3D 16; i386_linux_record_tdep.size_loff_t =3D 8; @@ -501,9 +510,12 @@ i386_linux_init_abi (struct gdbarch_info i386_linux_record_tdep.size_statfs =3D 64; i386_linux_record_tdep.size_statfs64 =3D 84; i386_linux_record_tdep.size_sockaddr =3D 16; - i386_linux_record_tdep.size_int =3D 4; - i386_linux_record_tdep.size_long =3D 4; - i386_linux_record_tdep.size_ulong =3D 4; + i386_linux_record_tdep.size_int + =3D gdbarch_int_bit (gdbarch) / TARGET_CHAR_BIT; + i386_linux_record_tdep.size_long + =3D gdbarch_long_bit (gdbarch) / TARGET_CHAR_BIT; + i386_linux_record_tdep.size_ulong + =3D gdbarch_long_bit (gdbarch) / TARGET_CHAR_BIT; i386_linux_record_tdep.size_msghdr =3D 28; i386_linux_record_tdep.size_itimerval =3D 16; i386_linux_record_tdep.size_stat =3D 88; @@ -536,7 +548,8 @@ i386_linux_init_abi (struct gdbarch_info i386_linux_record_tdep.size_io_event =3D 32; i386_linux_record_tdep.size_iocb =3D 64; i386_linux_record_tdep.size_epoll_event =3D 12; - i386_linux_record_tdep.size_itimerspec =3D i386_linux_record_tdep.size_timespec * 2; + i386_linux_record_tdep.size_itimerspec + =3D i386_linux_record_tdep.size_timespec * 2; i386_linux_record_tdep.size_mq_attr =3D 32; i386_linux_record_tdep.size_siginfo =3D 128; i386_linux_record_tdep.size_termios =3D 36; @@ -546,6 +559,8 @@ i386_linux_init_abi (struct gdbarch_info i386_linux_record_tdep.size_serial_struct =3D 60; i386_linux_record_tdep.size_serial_icounter_struct =3D 80; i386_linux_record_tdep.size_hayes_esp_config =3D 12; + i386_linux_record_tdep.size_size_t =3D 4; + i386_linux_record_tdep.size_iovec =3D 8; /* These values are the second argument of system call "sys_ioctl". They are obtained from Linux Kernel source. */ @@ -627,6 +642,7 @@ i386_linux_init_abi (struct gdbarch_info i386_linux_record_tdep.arg3 =3D I386_EDX_REGNUM; i386_linux_record_tdep.arg4 =3D I386_ESI_REGNUM; i386_linux_record_tdep.arg5 =3D I386_EDI_REGNUM; + i386_linux_record_tdep.arg6 =3D I386_EBP_REGNUM; tdep->i386_intx80_record =3D i386_linux_intx80_sysenter_record; tdep->i386_sysenter_record =3D i386_linux_intx80_sysenter_record; --- a/linux-record.c +++ b/linux-record.c @@ -19,6 +19,7 @@ #include "defs.h" #include "target.h" +#include "gdbtypes.h" #include "regcache.h" #include "record.h" #include "linux-record.h" @@ -80,6 +81,134 @@ #define RECORD_Q_XGETQSTAT (('5' << 8) + 5) #define RECORD_Q_XGETQUOTA (('3' << 8) + 3) +#define OUTPUT_REG(val, num) phex_nz ((val), \ + TYPE_LENGTH (gdbarch_register_type (get_regcache_arch (regcache), (num= )))) + +static int +record_linux_sockaddr (struct regcache *regcache, + struct linux_record_tdep *tdep, ULONGEST addr, + ULONGEST len) +{ + gdb_byte *a; + int addrlen; + struct gdbarch *gdbarch =3D get_regcache_arch (regcache); + enum bfd_endian byte_order =3D gdbarch_byte_order (gdbarch); + + if (!addr) + return 0; + + a =3D alloca (tdep->size_int); + + if (record_arch_list_add_mem ((CORE_ADDR) len, tdep->size_int)) + return -1; + + /* Get the addrlen. */ + if (target_read_memory ((CORE_ADDR) len, a, tdep->size_int)) + { + if (record_debug) + fprintf_unfiltered (gdb_stdlog, + "Process record: error reading " + "memory at addr =3D 0x%s len =3D %d.\n", + phex_nz (len, tdep->size_pointer), + tdep->size_int); + return -1; + } + addrlen =3D (int) extract_unsigned_integer (a, tdep->size_int, byte_orde= r); + if (addrlen <=3D 0 || addrlen > tdep->size_sockaddr) + addrlen =3D tdep->size_sockaddr; + + if (record_arch_list_add_mem ((CORE_ADDR) addr, addrlen)) + return -1; + + return 0; +} + +static int +record_linux_msghdr (struct regcache *regcache, + struct linux_record_tdep *tdep, ULONGEST addr) +{ + gdb_byte *a; + struct gdbarch *gdbarch =3D get_regcache_arch (regcache); + enum bfd_endian byte_order =3D gdbarch_byte_order (gdbarch); + CORE_ADDR tmpaddr; + int tmpint; + + if (!addr) + return 0; + + if (record_arch_list_add_mem ((CORE_ADDR) addr, tdep->size_msghdr)) + return -1; + + a =3D alloca (tdep->size_msghdr); + if (target_read_memory ((CORE_ADDR) addr, a, tdep->size_msghdr)) + { + if (record_debug) + fprintf_unfiltered (gdb_stdlog, + "Process record: error reading " + "memory at addr =3D 0x%s " + "len =3D %d.\n", + phex_nz (addr, tdep->size_pointer), + tdep->size_msghdr); + return -1; + } + + /* msg_name msg_namelen */ + addr =3D extract_unsigned_integer (a, tdep->size_pointer, byte_order); + a +=3D tdep->size_pointer; + if (record_arch_list_add_mem ((CORE_ADDR) addr, + (int) extract_unsigned_integer (a, + tdep->size_int, + byte_order))) + return -1; + a +=3D tdep->size_int; + + /* msg_iov msg_iovlen */ + addr =3D extract_unsigned_integer (a, tdep->size_pointer, byte_order); + a +=3D tdep->size_pointer; + if (addr) + { + ULONGEST i; + ULONGEST len =3D extract_unsigned_integer (a, tdep->size_size_t, + byte_order); + gdb_byte *iov =3D alloca (tdep->size_iovec); + + for (i =3D 0; i < len; i++) + { + if (target_read_memory ((CORE_ADDR) addr, iov, tdep->size_iovec)) + { + if (record_debug) + fprintf_unfiltered (gdb_stdlog, + "Process record: error " + "reading memory at " + "addr =3D 0x%s " + "len =3D %d.\n", + phex_nz (addr,tdep->size_pointer), + tdep->size_iovec); + return -1; + } + tmpaddr =3D (CORE_ADDR) extract_unsigned_integer (iov, + tdep->size_point= er, + byte_order); + tmpint =3D (int) extract_unsigned_integer (iov + tdep->size_poin= ter, + tdep->size_size_t, + byte_order); + if (record_arch_list_add_mem (tmpaddr, tmpint)); + return -1; + addr +=3D tdep->size_iovec; + } + } + a +=3D tdep->size_size_t; + + /* msg_control msg_controllen */ + addr =3D extract_unsigned_integer (a, tdep->size_pointer, byte_order); + a +=3D tdep->size_pointer; + tmpint =3D (int) extract_unsigned_integer (a, tdep->size_size_t, byte_or= der); + if (record_arch_list_add_mem ((CORE_ADDR) addr, tmpint)); + return -1; + + return 0; +} + /* When the architecture process record get a Linux syscall instruction, it will get a Linux syscall number of this architecture and convert it to the Linux syscall number "num" which @@ -94,10 +223,13 @@ int record_linux_system_call (int num, struct regcache *regcache, - struct linux_record_tdep *tdep) + struct linux_record_tdep *tdep) { struct gdbarch *gdbarch =3D get_regcache_arch (regcache); - uint32_t tmpu32; + enum bfd_endian byte_order =3D gdbarch_byte_order (gdbarch); + ULONGEST tmpulongest; + CORE_ADDR tmpaddr; + int tmpint; switch (num) { @@ -108,15 +240,14 @@ record_linux_system_call (int num, struc /* sys_exit */ case 1: { - int q; - target_terminal_ours (); - q =3D - yquery (_ ("The next instruction is syscall exit. " - "It will make the program exit. " - "Do you want to stop the program?")); - target_terminal_inferior (); - if (q) - return 1; + int q; + target_terminal_ours (); + q =3D yquery (_("The next instruction is syscall exit. " + "It will make the program exit. " + "Do you want to stop the program?")); + target_terminal_inferior (); + if (q) + return 1; } break; @@ -127,11 +258,11 @@ record_linux_system_call (int num, struc /* sys_read */ case 3: { - uint32_t addr, count; - regcache_raw_read (regcache, tdep->arg2, (gdb_byte *) & addr); - regcache_raw_read (regcache, tdep->arg3, (gdb_byte *) & count); - if (record_arch_list_add_mem (addr, count)) - return -1; + ULONGEST addr, count; + regcache_raw_read_unsigned (regcache, tdep->arg2, &addr); + regcache_raw_read_unsigned (regcache, tdep->arg3, &count); + if (record_arch_list_add_mem ((CORE_ADDR) addr, (int) count)) + return -1; } break; @@ -171,9 +302,10 @@ record_linux_system_call (int num, struc case 28: /* sys_lstat */ case 84: - regcache_raw_read (regcache, tdep->arg2, (gdb_byte *) & tmpu32); - if (record_arch_list_add_mem (tmpu32, tdep->size__old_kernel_stat)) - return -1; + regcache_raw_read_unsigned (regcache, tdep->arg2, &tmpulongest); + if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest, + tdep->size__old_kernel_stat)) + return -1; break; /* sys_lseek */ @@ -194,16 +326,16 @@ record_linux_system_call (int num, struc /* sys_ptrace */ case 26: - regcache_raw_read (regcache, tdep->arg1, (gdb_byte *) & tmpu32); - if (tmpu32 =3D=3D RECORD_PTRACE_PEEKTEXT - || tmpu32 =3D=3D RECORD_PTRACE_PEEKDATA - || tmpu32 =3D=3D RECORD_PTRACE_PEEKUSR) - { - regcache_raw_read (regcache, tdep->arg4, - (gdb_byte *) & tmpu32); - if (record_arch_list_add_mem (tmpu32, 4)) - return -1; - } + regcache_raw_read_unsigned (regcache, tdep->arg1, &tmpulongest); + if (tmpulongest =3D=3D RECORD_PTRACE_PEEKTEXT + || tmpulongest =3D=3D RECORD_PTRACE_PEEKDATA + || tmpulongest =3D=3D RECORD_PTRACE_PEEKUSR) + { + regcache_raw_read_unsigned (regcache, tdep->arg4, + &tmpulongest); + if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest, 4)) + return -1; + } break; /* sys_alarm */ @@ -240,9 +372,9 @@ record_linux_system_call (int num, struc /* sys_times */ case 43: - regcache_raw_read (regcache, tdep->arg1, (gdb_byte *) & tmpu32); - if (record_arch_list_add_mem (tmpu32, tdep->size_tms)) - return -1; + regcache_raw_read_unsigned (regcache, tdep->arg1, &tmpulongest); + if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest, tdep->size_tm= s)) + return -1; break; /* sys_ni_syscall */ @@ -270,149 +402,172 @@ record_linux_system_call (int num, struc /* sys_ioctl */ case 54: /* XXX Need to add a lot of support of other ioctl requests. */ - regcache_raw_read (regcache, tdep->arg2, (gdb_byte *) & tmpu32); - if (tmpu32 =3D=3D tdep->ioctl_FIOCLEX || tmpu32 =3D=3D tdep->ioctl_F= IONCLEX - || tmpu32 =3D=3D tdep->ioctl_FIONBIO || tmpu32 =3D=3D tdep->ioctl_FIOAS= YNC - || tmpu32 =3D=3D tdep->ioctl_TCSETS || tmpu32 =3D=3D tdep->ioctl_TCSETSW - || tmpu32 =3D=3D tdep->ioctl_TCSETSF || tmpu32 =3D=3D tdep->ioctl_TCSETA - || tmpu32 =3D=3D tdep->ioctl_TCSETAW || tmpu32 =3D=3D tdep->ioctl_TCSET= AF - || tmpu32 =3D=3D tdep->ioctl_TCSBRK || tmpu32 =3D=3D tdep->ioctl_TCXONC - || tmpu32 =3D=3D tdep->ioctl_TCFLSH || tmpu32 =3D=3D tdep->ioctl_TIOCEX= CL - || tmpu32 =3D=3D tdep->ioctl_TIOCNXCL - || tmpu32 =3D=3D tdep->ioctl_TIOCSCTTY - || tmpu32 =3D=3D tdep->ioctl_TIOCSPGRP || tmpu32 =3D=3D tdep->ioctl_TIO= CSTI - || tmpu32 =3D=3D tdep->ioctl_TIOCSWINSZ - || tmpu32 =3D=3D tdep->ioctl_TIOCMBIS || tmpu32 =3D=3D tdep->ioctl_TIOC= MBIC - || tmpu32 =3D=3D tdep->ioctl_TIOCMSET - || tmpu32 =3D=3D tdep->ioctl_TIOCSSOFTCAR - || tmpu32 =3D=3D tdep->ioctl_TIOCCONS - || tmpu32 =3D=3D tdep->ioctl_TIOCSSERIAL - || tmpu32 =3D=3D tdep->ioctl_TIOCPKT || tmpu32 =3D=3D tdep->ioctl_TIOCN= OTTY - || tmpu32 =3D=3D tdep->ioctl_TIOCSETD || tmpu32 =3D=3D tdep->ioctl_TCSB= RKP - || tmpu32 =3D=3D tdep->ioctl_TIOCTTYGSTRUCT - || tmpu32 =3D=3D tdep->ioctl_TIOCSBRK || tmpu32 =3D=3D tdep->ioctl_TIOC= CBRK - || tmpu32 =3D=3D tdep->ioctl_TCSETS2 || tmpu32 =3D=3D tdep->ioctl_TCSET= SW2 - || tmpu32 =3D=3D tdep->ioctl_TCSETSF2 - || tmpu32 =3D=3D tdep->ioctl_TIOCSPTLCK - || tmpu32 =3D=3D tdep->ioctl_TIOCSERCONFIG - || tmpu32 =3D=3D tdep->ioctl_TIOCSERGWILD - || tmpu32 =3D=3D tdep->ioctl_TIOCSERSWILD - || tmpu32 =3D=3D tdep->ioctl_TIOCSLCKTRMIOS - || tmpu32 =3D=3D tdep->ioctl_TIOCSERGETMULTI - || tmpu32 =3D=3D tdep->ioctl_TIOCSERSETMULTI - || tmpu32 =3D=3D tdep->ioctl_TIOCMIWAIT - || tmpu32 =3D=3D tdep->ioctl_TIOCSHAYESESP) - { - /* Nothing to do. */ - } - else if (tmpu32 =3D=3D tdep->ioctl_TCGETS || tmpu32 =3D=3D tdep->ioc= tl_TCGETA - || tmpu32 =3D=3D tdep->ioctl_TIOCGLCKTRMIOS) - { - regcache_raw_read (regcache, tdep->arg3, - (gdb_byte *) & tmpu32); - if (record_arch_list_add_mem (tmpu32, tdep->size_termios)) - return -1; - } - else if (tmpu32 =3D=3D tdep->ioctl_TIOCGPGRP - || tmpu32 =3D=3D tdep->ioctl_TIOCGSID) - { - regcache_raw_read (regcache, tdep->arg3, - (gdb_byte *) & tmpu32); - if (record_arch_list_add_mem (tmpu32, tdep->size_pid_t)) - return -1; - } - else if (tmpu32 =3D=3D tdep->ioctl_TIOCOUTQ - || tmpu32 =3D=3D tdep->ioctl_TIOCMGET - || tmpu32 =3D=3D tdep->ioctl_TIOCGSOFTCAR - || tmpu32 =3D=3D tdep->ioctl_FIONREAD - || tmpu32 =3D=3D tdep->ioctl_TIOCINQ - || tmpu32 =3D=3D tdep->ioctl_TIOCGETD - || tmpu32 =3D=3D tdep->ioctl_TIOCGPTN - || tmpu32 =3D=3D tdep->ioctl_TIOCSERGETLSR) - { - regcache_raw_read (regcache, tdep->arg3, - (gdb_byte *) & tmpu32); - if (record_arch_list_add_mem (tmpu32, tdep->size_int)) - return -1; - } - else if (tmpu32 =3D=3D tdep->ioctl_TIOCGWINSZ) - { - regcache_raw_read (regcache, tdep->arg3, - (gdb_byte *) & tmpu32); - if (record_arch_list_add_mem (tmpu32, tdep->size_winsize)) - return -1; - } - else if (tmpu32 =3D=3D tdep->ioctl_TIOCLINUX) - { - regcache_raw_read (regcache, tdep->arg3, - (gdb_byte *) & tmpu32); + regcache_raw_read_unsigned (regcache, tdep->arg2, &tmpulongest); + if (tmpulongest =3D=3D tdep->ioctl_FIOCLEX + || tmpulongest =3D=3D tdep->ioctl_FIONCLEX + || tmpulongest =3D=3D tdep->ioctl_FIONBIO + || tmpulongest =3D=3D tdep->ioctl_FIOASYNC + || tmpulongest =3D=3D tdep->ioctl_TCSETS + || tmpulongest =3D=3D tdep->ioctl_TCSETSW + || tmpulongest =3D=3D tdep->ioctl_TCSETSF + || tmpulongest =3D=3D tdep->ioctl_TCSETA + || tmpulongest =3D=3D tdep->ioctl_TCSETAW + || tmpulongest =3D=3D tdep->ioctl_TCSETAF + || tmpulongest =3D=3D tdep->ioctl_TCSBRK + || tmpulongest =3D=3D tdep->ioctl_TCXONC + || tmpulongest =3D=3D tdep->ioctl_TCFLSH + || tmpulongest =3D=3D tdep->ioctl_TIOCEXCL + || tmpulongest =3D=3D tdep->ioctl_TIOCNXCL + || tmpulongest =3D=3D tdep->ioctl_TIOCSCTTY + || tmpulongest =3D=3D tdep->ioctl_TIOCSPGRP + || tmpulongest =3D=3D tdep->ioctl_TIOCSTI + || tmpulongest =3D=3D tdep->ioctl_TIOCSWINSZ + || tmpulongest =3D=3D tdep->ioctl_TIOCMBIS + || tmpulongest =3D=3D tdep->ioctl_TIOCMBIC + || tmpulongest =3D=3D tdep->ioctl_TIOCMSET + || tmpulongest =3D=3D tdep->ioctl_TIOCSSOFTCAR + || tmpulongest =3D=3D tdep->ioctl_TIOCCONS + || tmpulongest =3D=3D tdep->ioctl_TIOCSSERIAL + || tmpulongest =3D=3D tdep->ioctl_TIOCPKT + || tmpulongest =3D=3D tdep->ioctl_TIOCNOTTY + || tmpulongest =3D=3D tdep->ioctl_TIOCSETD + || tmpulongest =3D=3D tdep->ioctl_TCSBRKP + || tmpulongest =3D=3D tdep->ioctl_TIOCTTYGSTRUCT + || tmpulongest =3D=3D tdep->ioctl_TIOCSBRK + || tmpulongest =3D=3D tdep->ioctl_TIOCCBRK + || tmpulongest =3D=3D tdep->ioctl_TCSETS2 + || tmpulongest =3D=3D tdep->ioctl_TCSETSW2 + || tmpulongest =3D=3D tdep->ioctl_TCSETSF2 + || tmpulongest =3D=3D tdep->ioctl_TIOCSPTLCK + || tmpulongest =3D=3D tdep->ioctl_TIOCSERCONFIG + || tmpulongest =3D=3D tdep->ioctl_TIOCSERGWILD + || tmpulongest =3D=3D tdep->ioctl_TIOCSERSWILD + || tmpulongest =3D=3D tdep->ioctl_TIOCSLCKTRMIOS + || tmpulongest =3D=3D tdep->ioctl_TIOCSERGETMULTI + || tmpulongest =3D=3D tdep->ioctl_TIOCSERSETMULTI + || tmpulongest =3D=3D tdep->ioctl_TIOCMIWAIT + || tmpulongest =3D=3D tdep->ioctl_TIOCSHAYESESP) + { + /* Nothing to do. */ + } + else if (tmpulongest =3D=3D tdep->ioctl_TCGETS + || tmpulongest =3D=3D tdep->ioctl_TCGETA + || tmpulongest =3D=3D tdep->ioctl_TIOCGLCKTRMIOS) + { + regcache_raw_read_unsigned (regcache, tdep->arg3, + &tmpulongest); + if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest, + tdep->size_termios)) + return -1; + } + else if (tmpulongest =3D=3D tdep->ioctl_TIOCGPGRP + || tmpulongest =3D=3D tdep->ioctl_TIOCGSID) + { + regcache_raw_read_unsigned (regcache, tdep->arg3, + &tmpulongest); + if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest, + tdep->size_pid_t)) + return -1; + } + else if (tmpulongest =3D=3D tdep->ioctl_TIOCOUTQ + || tmpulongest =3D=3D tdep->ioctl_TIOCMGET + || tmpulongest =3D=3D tdep->ioctl_TIOCGSOFTCAR + || tmpulongest =3D=3D tdep->ioctl_FIONREAD + || tmpulongest =3D=3D tdep->ioctl_TIOCINQ + || tmpulongest =3D=3D tdep->ioctl_TIOCGETD + || tmpulongest =3D=3D tdep->ioctl_TIOCGPTN + || tmpulongest =3D=3D tdep->ioctl_TIOCSERGETLSR) + { + regcache_raw_read_unsigned (regcache, tdep->arg3, + &tmpulongest); + if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest, + tdep->size_int)) + return -1; + } + else if (tmpulongest =3D=3D tdep->ioctl_TIOCGWINSZ) + { + regcache_raw_read_unsigned (regcache, tdep->arg3, + &tmpulongest); + if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest, + tdep->size_winsize)) + return -1; + } + else if (tmpulongest =3D=3D tdep->ioctl_TIOCLINUX) + { + regcache_raw_read_unsigned (regcache, tdep->arg3, + &tmpulongest); /* This syscall affect a char size memory. */ - if (record_arch_list_add_mem (tmpu32, 1)) - return -1; - } - else if (tmpu32 =3D=3D tdep->ioctl_TIOCGSERIAL) - { - regcache_raw_read (regcache, tdep->arg3, - (gdb_byte *) & tmpu32); - if (record_arch_list_add_mem (tmpu32, tdep->size_serial_struct)) - return -1; - } - else if (tmpu32 =3D=3D tdep->ioctl_TCGETS2) - { - regcache_raw_read (regcache, tdep->arg3, - (gdb_byte *) & tmpu32); - if (record_arch_list_add_mem (tmpu32, tdep->size_termios2)) - return -1; - } - else if (tmpu32 =3D=3D tdep->ioctl_FIOQSIZE) - { - regcache_raw_read (regcache, tdep->arg3, - (gdb_byte *) & tmpu32); - if (record_arch_list_add_mem (tmpu32, tdep->size_loff_t)) - return -1; - } - else if (tmpu32 =3D=3D tdep->ioctl_TIOCGICOUNT) - { - regcache_raw_read (regcache, tdep->arg3, - (gdb_byte *) & tmpu32); - if (record_arch_list_add_mem - (tmpu32, tdep->size_serial_icounter_struct)) - return -1; - } - else if (tmpu32 =3D=3D tdep->ioctl_TIOCGHAYESESP) - { - regcache_raw_read (regcache, tdep->arg3, - (gdb_byte *) & tmpu32); - if (record_arch_list_add_mem (tmpu32, tdep->size_hayes_esp_config)) - return -1; - } - else if (tmpu32 =3D=3D tdep->ioctl_TIOCSERGSTRUCT) - { - printf_unfiltered (_("Process record and replay target doesn't " - "support ioctl request TIOCSERGSTRUCT\n")); - return 1; - } + if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest, 1)) + return -1; + } + else if (tmpulongest =3D=3D tdep->ioctl_TIOCGSERIAL) + { + regcache_raw_read_unsigned (regcache, tdep->arg3, + &tmpulongest); + if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest, + tdep->size_serial_struct)) + return -1; + } + else if (tmpulongest =3D=3D tdep->ioctl_TCGETS2) + { + regcache_raw_read_unsigned (regcache, tdep->arg3, + &tmpulongest); + if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest, + tdep->size_termios2)) + return -1; + } + else if (tmpulongest =3D=3D tdep->ioctl_FIOQSIZE) + { + regcache_raw_read_unsigned (regcache, tdep->arg3, + &tmpulongest); + if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest, + tdep->size_loff_t)) + return -1; + } + else if (tmpulongest =3D=3D tdep->ioctl_TIOCGICOUNT) + { + regcache_raw_read_unsigned (regcache, tdep->arg3, + &tmpulongest); + if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest, + tdep->size_serial_icounter_struct)) + return -1; + } + else if (tmpulongest =3D=3D tdep->ioctl_TIOCGHAYESESP) + { + regcache_raw_read_unsigned (regcache, tdep->arg3, + &tmpulongest); + if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest, + tdep->size_hayes_esp_config)) + return -1; + } + else if (tmpulongest =3D=3D tdep->ioctl_TIOCSERGSTRUCT) + { + printf_unfiltered (_("Process record and replay target doesn't " + "support ioctl request TIOCSERGSTRUCT\n")); + return 1; + } else - { - printf_unfiltered (_("Process record and replay target doesn't " - "support ioctl request 0x%s.\n"), - phex_nz (tmpu32, 4)); - return 1; - } + { + printf_unfiltered (_("Process record and replay target doesn't " + "support ioctl request 0x%s.\n"), + OUTPUT_REG (tmpulongest, tdep->arg2)); + return 1; + } break; /* sys_fcntl */ case 55: /* XXX */ - regcache_raw_read (regcache, tdep->arg2, (gdb_byte *) & tmpu32); + regcache_raw_read_unsigned (regcache, tdep->arg2, &tmpulongest); sys_fcntl: - if (tmpu32 =3D=3D tdep->fcntl_F_GETLK) - { - regcache_raw_read (regcache, tdep->arg3, - (gdb_byte *) & tmpu32); - if (record_arch_list_add_mem (tmpu32, tdep->size_flock)) - return -1; - } + if (tmpulongest =3D=3D tdep->fcntl_F_GETLK) + { + regcache_raw_read_unsigned (regcache, tdep->arg3, + &tmpulongest); + if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest, + tdep->size_flock)) + return -1; + } break; /* sys_ni_syscall */ @@ -425,9 +580,10 @@ record_linux_system_call (int num, struc /* sys_olduname */ case 59: - regcache_raw_read (regcache, tdep->arg1, (gdb_byte *) & tmpu32); - if (record_arch_list_add_mem (tmpu32, tdep->size_oldold_utsname)) - return -1; + regcache_raw_read_unsigned (regcache, tdep->arg1, &tmpulongest); + if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest, + tdep->size_oldold_utsname)) + return -1; break; /* sys_umask */ @@ -438,9 +594,10 @@ record_linux_system_call (int num, struc /* sys_ustat */ case 62: - regcache_raw_read (regcache, tdep->arg2, (gdb_byte *) & tmpu32); - if (record_arch_list_add_mem (tmpu32, tdep->size_ustat)) - return -1; + regcache_raw_read_unsigned (regcache, tdep->arg2, &tmpulongest); + if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest, + tdep->size_ustat)) + return -1; break; /* sys_dup2 */ @@ -455,9 +612,10 @@ record_linux_system_call (int num, struc /* sys_sigaction */ case 67: - regcache_raw_read (regcache, tdep->arg3, (gdb_byte *) & tmpu32); - if (record_arch_list_add_mem (tmpu32, tdep->size_old_sigaction)) - return -1; + regcache_raw_read_unsigned (regcache, tdep->arg3, &tmpulongest); + if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest, + tdep->size_old_sigaction)) + return -1; break; /* sys_sgetmask */ @@ -474,9 +632,10 @@ record_linux_system_call (int num, struc /* sys_sigpending */ case 73: - regcache_raw_read (regcache, tdep->arg1, (gdb_byte *) & tmpu32); - if (record_arch_list_add_mem (tmpu32, tdep->size_old_sigset_t)) - return -1; + regcache_raw_read_unsigned (regcache, tdep->arg1, &tmpulongest); + if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest, + tdep->size_old_sigset_t)) + return -1; break; /* sys_sethostname */ @@ -487,26 +646,30 @@ record_linux_system_call (int num, struc /* sys_old_getrlimit */ case 76: - regcache_raw_read (regcache, tdep->arg2, (gdb_byte *) & tmpu32); - if (record_arch_list_add_mem (tmpu32, tdep->size_rlimit)) - return -1; + regcache_raw_read_unsigned (regcache, tdep->arg2, &tmpulongest); + if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest, + tdep->size_rlimit)) + return -1; break; /* sys_getrusage */ case 77: - regcache_raw_read (regcache, tdep->arg2, (gdb_byte *) & tmpu32); - if (record_arch_list_add_mem (tmpu32, tdep->size_rusage)) - return -1; + regcache_raw_read_unsigned (regcache, tdep->arg2, &tmpulongest); + if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest, + tdep->size_rusage)) + return -1; break; /* sys_gettimeofday */ case 78: - regcache_raw_read (regcache, tdep->arg1, (gdb_byte *) & tmpu32); - if (record_arch_list_add_mem (tmpu32, tdep->size_timeval)) - return -1; - regcache_raw_read (regcache, tdep->arg2, (gdb_byte *) & tmpu32); - if (record_arch_list_add_mem (tmpu32, tdep->size_timezone)) - return -1; + regcache_raw_read_unsigned (regcache, tdep->arg1, &tmpulongest); + if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest, + tdep->size_timeval)) + return -1; + regcache_raw_read_unsigned (regcache, tdep->arg2, &tmpulongest); + if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest, + tdep->size_timezone)) + return -1; break; /* sys_settimeofday */ @@ -515,53 +678,56 @@ record_linux_system_call (int num, struc /* sys_getgroups16 */ case 80: - regcache_raw_read (regcache, tdep->arg2, (gdb_byte *) & tmpu32); - if (record_arch_list_add_mem (tmpu32, tdep->size_old_gid_t)) - return -1; + regcache_raw_read_unsigned (regcache, tdep->arg2, &tmpulongest); + if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest, + tdep->size_old_gid_t)) + return -1; break; /* sys_setgroups16 */ case 81: - regcache_raw_read (regcache, tdep->arg2, (gdb_byte *) & tmpu32); - if (record_arch_list_add_mem (tmpu32, tdep->size_old_gid_t)) - return -1; + regcache_raw_read_unsigned (regcache, tdep->arg2, &tmpulongest); + if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest, + tdep->size_old_gid_t)) + return -1; break; /* old_select */ case 82: { - struct sel_arg_struct - { - CORE_ADDR n; - CORE_ADDR inp; - CORE_ADDR outp; - CORE_ADDR exp; - CORE_ADDR tvp; - } sel; + struct sel_arg_struct + { + CORE_ADDR n; + CORE_ADDR inp; + CORE_ADDR outp; + CORE_ADDR exp; + CORE_ADDR tvp; + } sel; - regcache_raw_read (regcache, tdep->arg1, - (gdb_byte *) & tmpu32); - if (tmpu32) - { - if (target_read_memory (tmpu32, (gdb_byte *) & sel, sizeof (sel))) - { - if (record_debug) - fprintf_unfiltered (gdb_stdlog, - "Process record: error reading memory " - "at addr =3D %s len =3D %lu.\n", - paddress (gdbarch, tmpu32), - (unsigned long)sizeof (sel)); - return -1; - } - if (record_arch_list_add_mem (sel.inp, tdep->size_fd_set)) - return -1; - if (record_arch_list_add_mem (sel.outp, tdep->size_fd_set)) - return -1; - if (record_arch_list_add_mem (sel.exp, tdep->size_fd_set)) - return -1; - if (record_arch_list_add_mem (sel.tvp, tdep->size_timeval)) - return -1; - } + regcache_raw_read_unsigned (regcache, tdep->arg1, + &tmpulongest); + if (tmpulongest) + { + if (target_read_memory (tmpulongest, (gdb_byte *) &sel, + sizeof(sel))) + { + if (record_debug) + fprintf_unfiltered (gdb_stdlog, + "Process record: error reading memor= y " + "at addr =3D 0x%s len =3D %lu.\n", + OUTPUT_REG (tmpulongest, tdep->arg1), + (unsigned long) sizeof (sel)); + return -1; + } + if (record_arch_list_add_mem (sel.inp, tdep->size_fd_set)) + return -1; + if (record_arch_list_add_mem (sel.outp, tdep->size_fd_set)) + return -1; + if (record_arch_list_add_mem (sel.exp, tdep->size_fd_set)) + return -1; + if (record_arch_list_add_mem (sel.tvp, tdep->size_timeval)) + return -1; + } } break; @@ -572,12 +738,12 @@ record_linux_system_call (int num, struc /* sys_readlink */ case 85: { - uint32_t len; - regcache_raw_read (regcache, tdep->arg2, - (gdb_byte *) & tmpu32); - regcache_raw_read (regcache, tdep->arg3, (gdb_byte *) & len); - if (record_arch_list_add_mem (tmpu32, len)) - return -1; + ULONGEST len; + regcache_raw_read_unsigned (regcache, tdep->arg2, + &tmpulongest); + regcache_raw_read_unsigned (regcache, tdep->arg3, &len); + if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest, (int) len)) + return -1; } break; @@ -590,23 +756,24 @@ record_linux_system_call (int num, struc /* sys_reboot */ case 88: { - int q; - target_terminal_ours (); - q =3D - yquery (_("The next instruction is syscall reboot. " - "It will restart the computer. " - "Do you want to stop the program?")); - target_terminal_inferior (); - if (q) - return 1; + int q; + target_terminal_ours (); + q =3D + yquery (_("The next instruction is syscall reboot. " + "It will restart the computer. " + "Do you want to stop the program?")); + target_terminal_inferior (); + if (q) + return 1; } break; /* old_readdir */ case 89: - regcache_raw_read (regcache, tdep->arg2, (gdb_byte *) & tmpu32); - if (record_arch_list_add_mem (tmpu32, tdep->size_dirent)) - return -1; + regcache_raw_read_unsigned (regcache, tdep->arg2, &tmpulongest); + if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest, + tdep->size_dirent)) + return -1; break; /* old_mmap */ @@ -616,22 +783,21 @@ record_linux_system_call (int num, struc /* sys_munmap */ case 91: { - int q; - uint32_t len; + int q; + ULONGEST len; - regcache_raw_read (regcache, tdep->arg1, - (gdb_byte *) & tmpu32); - regcache_raw_read (regcache, tdep->arg2, (gdb_byte *) & len); - target_terminal_ours (); - q =3D - yquery (_("The next instruction is syscall munmap. " - "It will free the memory addr =3D %s len =3D %u. " - "It will make record target get error. " - "Do you want to stop the program?"), - paddress (gdbarch, tmpu32), (int)len); - target_terminal_inferior (); - if (q) - return 1; + regcache_raw_read_unsigned (regcache, tdep->arg1, + &tmpulongest); + regcache_raw_read_unsigned (regcache, tdep->arg2, &len); + target_terminal_ours (); + q =3D yquery (_("The next instruction is syscall munmap. " + "It will free the memory addr =3D 0x%s len =3D %u. " + "It will make record target get error. " + "Do you want to stop the program?"), + OUTPUT_REG (tmpulongest, tdep->arg1), (int) len); + target_terminal_inferior (); + if (q) + return 1; } break; @@ -655,292 +821,349 @@ record_linux_system_call (int num, struc case 99: /* sys_fstatfs */ case 100: - regcache_raw_read (regcache, tdep->arg2, (gdb_byte *) & tmpu32); - if (record_arch_list_add_mem (tmpu32, tdep->size_statfs)) - return -1; + regcache_raw_read_unsigned (regcache, tdep->arg2, &tmpulongest); + if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest, + tdep->size_statfs)) + return -1; break; /* sys_ioperm */ case 101: break; + /* sys_socket */ + case 500: + /* sys_sendto */ + case 503: + /* sys_sendmsg */ + case 505: + /* sys_shutdown */ + case 507: + /* sys_bind */ + case 508: + /* sys_connect */ + case 501: + /* sys_listen */ + case 509: + /* sys_setsockopt */ + case 513: + break; + + /* sys_accept */ + case 502: + /* sys_getsockname */ + case 510: + /* sys_getpeername */ + case 511: + { + ULONGEST len; + regcache_raw_read_unsigned (regcache, tdep->arg2, &tmpulongest); + regcache_raw_read_unsigned (regcache, tdep->arg3, &len); + if (record_linux_sockaddr (regcache, tdep, tmpulongest, len)) + return -1; + } + break; + + /* sys_recvfrom */ + case 504: + { + ULONGEST len; + regcache_raw_read_unsigned (regcache, tdep->arg4, &tmpulongest); + regcache_raw_read_unsigned (regcache, tdep->arg5, &len); + if (record_linux_sockaddr (regcache, tdep, tmpulongest, len)) + return -1; + } + /* sys_recv */ + case 515: + { + ULONGEST size; + regcache_raw_read_unsigned (regcache, tdep->arg2, &tmpulongest); + regcache_raw_read_unsigned (regcache, tdep->arg3, &size); + if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest, (int) size)) + return -1; + } + break; + + /* sys_recvmsg */ + case 506: + regcache_raw_read_unsigned (regcache, tdep->arg2, &tmpulongest); + if (record_linux_msghdr (regcache, tdep, tmpulongest)) + return -1; + break; + + /* sys_socketpair */ + case 512: + regcache_raw_read_unsigned (regcache, tdep->arg4, &tmpulongest); + if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest, tdep->size_in= t)) + return -1; + break; + + /* sys_getsockopt */ + case 514: + regcache_raw_read_unsigned (regcache, tdep->arg5, &tmpulongest); + if (tmpulongest) + { + ULONGEST optvalp; + gdb_byte *optlenp =3D alloca (tdep->size_int); + if (target_read_memory ((CORE_ADDR) tmpulongest, optlenp, + tdep->size_int)) + { + if (record_debug) + fprintf_unfiltered (gdb_stdlog, + "Process record: error reading " + "memory at addr =3D 0x%s " + "len =3D %d.\n", + OUTPUT_REG (tmpulongest, tdep->arg5), + tdep->size_int); + return -1; + } + regcache_raw_read_unsigned (regcache, tdep->arg4, &optvalp); + tmpint =3D (int) extract_signed_integer (optlenp, tdep->size_int, + byte_order); + if (record_arch_list_add_mem ((CORE_ADDR) optvalp, tmpint)) + return -1; + if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest, + tdep->size_int)) + return -1; + } + break; + /* sys_socketcall */ case 102: - regcache_raw_read (regcache, tdep->arg1, (gdb_byte *) & tmpu32); - switch (tmpu32) - { - case RECORD_SYS_SOCKET: - case RECORD_SYS_BIND: - case RECORD_SYS_CONNECT: - case RECORD_SYS_LISTEN: - break; - case RECORD_SYS_ACCEPT: - case RECORD_SYS_GETSOCKNAME: - case RECORD_SYS_GETPEERNAME: - { - uint32_t a[3]; - regcache_raw_read (regcache, tdep->arg2, - (gdb_byte *) & tmpu32); - if (tmpu32) - { - if (target_read_memory (tmpu32, (gdb_byte *) a, sizeof (a))) - { - if (record_debug) - fprintf_unfiltered (gdb_stdlog, - "Process record: error reading " - "memory at addr =3D %s len =3D %lu.\n", - paddress (gdbarch, tmpu32), - (unsigned long)sizeof (a)); - return -1; - } - if (record_arch_list_add_mem (a[1], tdep->size_sockaddr)) - return -1; - if (record_arch_list_add_mem (a[2], tdep->size_int)) - return -1; - } - } - break; + regcache_raw_read_unsigned (regcache, tdep->arg1, &tmpulongest); + switch (tmpulongest) + { + case RECORD_SYS_SOCKET: + case RECORD_SYS_BIND: + case RECORD_SYS_CONNECT: + case RECORD_SYS_LISTEN: + break; + case RECORD_SYS_ACCEPT: + case RECORD_SYS_GETSOCKNAME: + case RECORD_SYS_GETPEERNAME: + { + regcache_raw_read_unsigned (regcache, tdep->arg2, + &tmpulongest); + if (tmpulongest) + { + gdb_byte *a =3D alloca (tdep->size_ulong * 2); + int addrlen; + gdb_byte *addrlenp; - case RECORD_SYS_SOCKETPAIR: - { - uint32_t a[4]; - regcache_raw_read (regcache, tdep->arg2, - (gdb_byte *) & tmpu32); - if (tmpu32) - { - if (target_read_memory (tmpu32, (gdb_byte *) a, sizeof (a))) - { - if (record_debug) - fprintf_unfiltered (gdb_stdlog, - "Process record: error reading " - "memory at addr =3D %s len =3D %lu.\n", - paddress (gdbarch, tmpu32), - (unsigned long)sizeof (a)); - return -1; - } - if (record_arch_list_add_mem (a[3], tdep->size_int)) - return -1; - } - } - break; - case RECORD_SYS_SEND: - case RECORD_SYS_SENDTO: - break; - case RECORD_SYS_RECV: - { - uint32_t a[3]; - regcache_raw_read (regcache, tdep->arg2, - (gdb_byte *) & tmpu32); - if (tmpu32) - { - if (target_read_memory (tmpu32, (gdb_byte *) a, sizeof (a))) - { - if (record_debug) - fprintf_unfiltered (gdb_stdlog, - "Process record: error reading " - "memory at addr =3D %s len =3D %lu.\n", - paddress (gdbarch, tmpu32), - (unsigned long)sizeof (a)); - return -1; - } - if (a[2]) - { - if (target_read_memory - (a[2], (gdb_byte *) & (a[2]), sizeof (a[2]))) - { - if (record_debug) - fprintf_unfiltered (gdb_stdlog, - "Process record: error reading " - "memory at addr =3D %s " - "len =3D %lu.\n", - paddress (gdbarch, a[2]), - (unsigned long)sizeof (a[2])); - return -1; - } - if (record_arch_list_add_mem (a[1], a[2])) - return -1; - } - } - } - break; - case RECORD_SYS_RECVFROM: - { - uint32_t a[6]; - regcache_raw_read (regcache, tdep->arg2, - (gdb_byte *) & tmpu32); - if (tmpu32) - { - if (target_read_memory (tmpu32, (gdb_byte *) a, sizeof (a))) - { - if (record_debug) - fprintf_unfiltered (gdb_stdlog, - "Process record: error reading " - "memory at addr =3D %s len =3D %lu.\n", - paddress (gdbarch, tmpu32), - (unsigned long)sizeof (a)); - return -1; - } - if (a[2]) - { - if (target_read_memory - (a[2], (gdb_byte *) & (a[2]), sizeof (a[2]))) - { - if (record_debug) - fprintf_unfiltered (gdb_stdlog, - "Process record: error reading " - "memory at addr =3D %s " - "len =3D %lu.\n", - paddress (gdbarch, a[2]), - (unsigned long)sizeof (a[2])); - return -1; - } - if (record_arch_list_add_mem (a[1], a[2])) - return -1; - if (record_arch_list_add_mem (a[4], tdep->size_sockaddr)) - return -1; - if (record_arch_list_add_mem (a[5], tdep->size_int)) - return -1; - } - } - } - break; - case RECORD_SYS_SHUTDOWN: - case RECORD_SYS_SETSOCKOPT: - break; - case RECORD_SYS_GETSOCKOPT: - { - uint32_t a[5]; - uint32_t av; + tmpulongest +=3D tdep->size_ulong; + if (target_read_memory ((CORE_ADDR) tmpulongest, a, + tdep->size_ulong * 2)) + { + if (record_debug) + fprintf_unfiltered (gdb_stdlog, + "Process record: error reading " + "memory at addr =3D 0x%s len =3D= %d.\n", + OUTPUT_REG (tmpulongest, tdep->a= rg2), + tdep->size_ulong * 2); + return -1; + } + if (record_linux_sockaddr (regcache, tdep, + extract_unsigned_integer + (a, tdep->size_ulong, byte_or= der), + extract_unsigned_integer + (a + tdep->size_ulong, + tdep->size_ulong, byte_order= ))) + return -1; + } + } + break; - regcache_raw_read (regcache, tdep->arg2, - (gdb_byte *) & tmpu32); - if (tmpu32) - { - if (target_read_memory (tmpu32, (gdb_byte *) a, sizeof (a))) - { - if (record_debug) - fprintf_unfiltered (gdb_stdlog, - "Process record: error reading " - "memory at addr =3D %s len =3D %lu.\n", - paddress (gdbarch, tmpu32), - (unsigned long)sizeof (a)); - return -1; - } - if (a[4]) - { - if (target_read_memory - (a[4], (gdb_byte *) & av, sizeof (av))) - { - if (record_debug) - fprintf_unfiltered (gdb_stdlog, - "Process record: error reading " - "memory at addr =3D %s " - "len =3D %lu.\n", - paddress (gdbarch, a[4]), - (unsigned long)sizeof (av)); - return -1; - } - if (record_arch_list_add_mem (a[3], av)) - return -1; - if (record_arch_list_add_mem (a[4], tdep->size_int)) - return -1; - } - } - } - break; - case RECORD_SYS_SENDMSG: - break; - case RECORD_SYS_RECVMSG: - { - uint32_t a[2], i; - struct record_msghdr - { - uint32_t msg_name; - uint32_t msg_namelen; - uint32_t msg_iov; - uint32_t msg_iovlen; - uint32_t msg_control; - uint32_t msg_controllen; - uint32_t msg_flags; - } rec; - struct record_iovec - { - uint32_t iov_base; - uint32_t iov_len; - } iov; + case RECORD_SYS_SOCKETPAIR: + { + gdb_byte *a =3D alloca (tdep->size_ulong); + regcache_raw_read_unsigned (regcache, tdep->arg2, + &tmpulongest); + if (tmpulongest) + { + tmpulongest +=3D tdep->size_ulong * 3; + if (target_read_memory ((CORE_ADDR) tmpulongest, a, + tdep->size_ulong)) + { + if (record_debug) + fprintf_unfiltered (gdb_stdlog, + "Process record: error reading " + "memory at addr =3D 0x%s len =3D= %d.\n", + OUTPUT_REG (tmpulongest, tdep->a= rg2), + tdep->size_ulong); + return -1; + } + tmpaddr + =3D (CORE_ADDR) extract_unsigned_integer (a, tdep->size_= ulong, + byte_order); + if (record_arch_list_add_mem (tmpaddr, tdep->size_int)) + return -1; + } + } + break; + case RECORD_SYS_SEND: + case RECORD_SYS_SENDTO: + break; + case RECORD_SYS_RECVFROM: + regcache_raw_read_unsigned (regcache, tdep->arg2, + &tmpulongest); + if (tmpulongest) + { + gdb_byte *a =3D alloca (tdep->size_ulong * 2); + int addrlen; + gdb_byte *addrlenp; - regcache_raw_read (regcache, tdep->arg2, - (gdb_byte *) & tmpu32); - if (tmpu32) - { - if (target_read_memory (tmpu32, (gdb_byte *) a, sizeof (a))) - { - if (record_debug) - fprintf_unfiltered (gdb_stdlog, - "Process record: error reading " - "memory at addr =3D %s len =3D %lu.\n", - paddress (gdbarch, tmpu32), - (unsigned long)sizeof (a)); - return -1; - } - if (record_arch_list_add_mem (a[1], tdep->size_msghdr)) - return -1; - if (a[1]) - { - if (target_read_memory - (a[1], (gdb_byte *) & rec, sizeof (rec))) - { - if (record_debug) - fprintf_unfiltered (gdb_stdlog, - "Process record: error reading " - "memory at addr =3D %s " - "len =3D %lu.\n", - paddress (gdbarch, a[1]), - (unsigned long)sizeof (rec)); - return -1; - } - if (record_arch_list_add_mem - (rec.msg_name, rec.msg_namelen)) - return -1; - if (record_arch_list_add_mem - (rec.msg_control, rec.msg_controllen)) - return -1; - if (rec.msg_iov) - { - for (i =3D 0; i < rec.msg_iovlen; i++) - { - if (target_read_memory - (rec.msg_iov, (gdb_byte *) & iov, - sizeof (iov))) - { - if (record_debug) - fprintf_unfiltered (gdb_stdlog, - "Process record: error " - "reading memory at " - "addr =3D %s " - "len =3D %lu.\n", - paddress (gdbarch, - rec.msg_iov), - (unsigned long)sizeof (iov)); - return -1; - } - if (record_arch_list_add_mem - (iov.iov_base, iov.iov_len)) - return -1; - rec.msg_iov +=3D sizeof (struct record_iovec); - } - } - } - } - } - break; - default: - printf_unfiltered (_("Process record and replay target " - "doesn't support socketcall call 0x%s\n"), - phex_nz (tmpu32, 4)); - return -1; - break; - } + tmpulongest +=3D tdep->size_ulong * 4; + if (target_read_memory ((CORE_ADDR) tmpulongest, a, + tdep->size_ulong * 2)) + { + if (record_debug) + fprintf_unfiltered (gdb_stdlog, + "Process record: error reading " + "memory at addr =3D 0x%s len =3D %= d.\n", + OUTPUT_REG (tmpulongest, tdep->arg= 2), + tdep->size_ulong * 2); + return -1; + } + if (record_linux_sockaddr (regcache, tdep, + extract_unsigned_integer + (a, tdep->size_ulong, byte_orde= r), + extract_unsigned_integer + (a + tdep->size_ulong, + tdep->size_ulong, byte_order))) + return -1; + } + case RECORD_SYS_RECV: + regcache_raw_read_unsigned (regcache, tdep->arg2, + &tmpulongest); + if (tmpulongest) + { + gdb_byte *a =3D alloca (tdep->size_ulong * 2); + + tmpulongest +=3D tdep->size_ulong; + if (target_read_memory ((CORE_ADDR) tmpulongest, a, + tdep->size_ulong)) + { + if (record_debug) + fprintf_unfiltered (gdb_stdlog, + "Process record: error reading " + "memory at addr =3D 0x%s len =3D %= d.\n", + OUTPUT_REG (tmpulongest, tdep->arg= 2), + tdep->size_ulong); + return -1; + } + tmpulongest =3D extract_unsigned_integer (a, tdep->size_ulon= g, + byte_order); + if (tmpulongest) + { + a +=3D tdep->size_ulong; + tmpint =3D (int) extract_unsigned_integer (a, tdep->size= _ulong, + byte_order); + if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest, + tmpint)) + return -1; + } + } + break; + case RECORD_SYS_SHUTDOWN: + case RECORD_SYS_SETSOCKOPT: + break; + case RECORD_SYS_GETSOCKOPT: + { + gdb_byte *a =3D alloca (tdep->size_ulong * 2); + gdb_byte *av =3D alloca (tdep->size_int); + + regcache_raw_read_unsigned (regcache, tdep->arg2, + &tmpulongest); + if (tmpulongest) + { + tmpulongest +=3D tdep->size_ulong * 3; + if (target_read_memory ((CORE_ADDR) tmpulongest, a, + tdep->size_ulong * 2)) + { + if (record_debug) + fprintf_unfiltered (gdb_stdlog, + "Process record: error reading " + "memory at addr =3D 0x%s len =3D= %d.\n", + OUTPUT_REG (tmpulongest, tdep->a= rg2), + tdep->size_ulong * 2); + return -1; + } + tmpulongest =3D extract_unsigned_integer (a + tdep->size_u= long, + tdep->size_ulong, + byte_order); + if (tmpulongest) + { + if (target_read_memory ((CORE_ADDR) tmpulongest, av, + tdep->size_int)) + { + if (record_debug) + fprintf_unfiltered (gdb_stdlog, + "Process record: error readi= ng " + "memory at addr =3D 0x%s " + "len =3D %d.\n", + phex_nz (tmpulongest, + tdep->size_ulong), + tdep->size_int); + return -1; + } + tmpaddr + =3D (CORE_ADDR) extract_unsigned_integer (a, + tdep->size_u= long, + byte_order); + tmpint =3D (int) extract_unsigned_integer (av, + tdep->size_in= t, + byte_order); + if (record_arch_list_add_mem (tmpaddr, tmpint)) + return -1; + a +=3D tdep->size_ulong; + tmpaddr + =3D (CORE_ADDR) extract_unsigned_integer (a, + tdep->size_u= long, + byte_order); + if (record_arch_list_add_mem (tmpaddr, tdep->size_int)) + return -1; + } + } + } + break; + case RECORD_SYS_SENDMSG: + break; + case RECORD_SYS_RECVMSG: + { + gdb_byte *a =3D alloca (tdep->size_ulong); + + regcache_raw_read_unsigned (regcache, tdep->arg2, + &tmpulongest); + if (tmpulongest) + { + tmpulongest +=3D tdep->size_ulong; + if (target_read_memory ((CORE_ADDR) tmpulongest, a, + tdep->size_ulong)) + { + if (record_debug) + fprintf_unfiltered (gdb_stdlog, + "Process record: error reading " + "memory at addr =3D 0x%s len =3D= %d.\n", + OUTPUT_REG (tmpulongest, tdep->a= rg2), + tdep->size_ulong); + return -1; + } + tmpulongest =3D extract_unsigned_integer (a, tdep->size_ul= ong, + byte_order); + if (record_linux_msghdr (regcache, tdep, + extract_unsigned_integer + (a, tdep->size_ulong, byte_orde= r))) + return -1; + } + } + break; + default: + printf_unfiltered (_("Process record and replay target " + "doesn't support socketcall call 0x%s\n"), + OUTPUT_REG (tmpulongest, tdep->arg1)); + return -1; + break; + } break; /* sys_syslog */ @@ -949,16 +1172,18 @@ record_linux_system_call (int num, struc /* sys_setitimer */ case 104: - regcache_raw_read (regcache, tdep->arg3, (gdb_byte *) & tmpu32); - if (record_arch_list_add_mem (tmpu32, tdep->size_itimerval)) - return -1; + regcache_raw_read_unsigned (regcache, tdep->arg3, &tmpulongest); + if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest, + tdep->size_itimerval)) + return -1; break; /* sys_getitimer */ case 105: - regcache_raw_read (regcache, tdep->arg2, (gdb_byte *) & tmpu32); - if (record_arch_list_add_mem (tmpu32, tdep->size_itimerval)) - return -1; + regcache_raw_read_unsigned (regcache, tdep->arg2, &tmpulongest); + if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest, + tdep->size_itimerval)) + return -1; break; /* sys_newstat */ @@ -967,16 +1192,19 @@ record_linux_system_call (int num, struc case 107: /* sys_newfstat */ case 108: - regcache_raw_read (regcache, tdep->arg2, (gdb_byte *) & tmpu32); - if (record_arch_list_add_mem (tmpu32, tdep->size_stat)) - return -1; + /* sys_newfstatat */ + case 540: + regcache_raw_read_unsigned (regcache, tdep->arg2, &tmpulongest); + if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest, tdep->size_st= at)) + return -1; break; /* sys_uname */ case 109: - regcache_raw_read (regcache, tdep->arg1, (gdb_byte *) & tmpu32); - if (record_arch_list_add_mem (tmpu32, tdep->size_old_utsname)) - return -1; + regcache_raw_read_unsigned (regcache, tdep->arg1, &tmpulongest); + if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest, + tdep->size_old_utsname)) + return -1; break; /* sys_iopl */ @@ -991,12 +1219,14 @@ record_linux_system_call (int num, struc /* sys_wait4 */ case 114: - regcache_raw_read (regcache, tdep->arg2, (gdb_byte *) & tmpu32); - if (record_arch_list_add_mem (tmpu32, tdep->size_int)) - return -1; - regcache_raw_read (regcache, tdep->arg4, (gdb_byte *) & tmpu32); - if (record_arch_list_add_mem (tmpu32, tdep->size_rusage)) - return -1; + regcache_raw_read_unsigned (regcache, tdep->arg2, &tmpulongest); + if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest, + tdep->size_int)) + return -1; + regcache_raw_read_unsigned (regcache, tdep->arg4, &tmpulongest); + if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest, + tdep->size_rusage)) + return -1; break; /* sys_swapoff */ @@ -1005,47 +1235,121 @@ record_linux_system_call (int num, struc /* sys_sysinfo */ case 116: - regcache_raw_read (regcache, tdep->arg1, (gdb_byte *) & tmpu32); - if (record_arch_list_add_mem (tmpu32, tdep->size_sysinfo)) - return -1; + regcache_raw_read_unsigned (regcache, tdep->arg1, &tmpulongest); + if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest, + tdep->size_sysinfo)) + return -1; + break; + + /* sys_shmget */ + case 520: + /* sys_semget */ + case 523: + /* sys_semop */ + case 524: + /* sys_msgget */ + case 528: + /* sys_shmdt */ + /* XXX maybe need do some record works wiht sys_shmdt. */ + case 527: + /* sys_msgsnd */ + case 529: + /* sys_semtimedop */ + case 532: + break; + + /* sys_shmat */ + case 521: + regcache_raw_read_unsigned (regcache, tdep->arg3, &tmpulongest); + if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest, + tdep->size_ulong)) + return -1; + break; + + /* sys_shmctl */ + case 522: + regcache_raw_read_unsigned (regcache, tdep->arg3, &tmpulongest); + if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest, + tdep->size_shmid_ds)) + return -1; + break; + + /* sys_semctl */ + /* XXX sys_semctl 525 still not support. */ + + /* sys_msgrcv */ + case 530: + { + ULONGEST msgp; + regcache_raw_read_signed (regcache, tdep->arg3, &tmpulongest); + regcache_raw_read_unsigned (regcache, tdep->arg2, &msgp); + tmpint =3D (int) tmpulongest + tdep->size_long; + if (record_arch_list_add_mem ((CORE_ADDR) msgp, tmpint)) + return -1; + } + break; + + /* sys_msgctl */ + case 531: + regcache_raw_read_unsigned (regcache, tdep->arg3, &tmpulongest); + if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest, + tdep->size_msqid_ds)) + return -1; break; /* sys_ipc */ case 117: - regcache_raw_read (regcache, tdep->arg1, (gdb_byte *) & tmpu32); - switch (tmpu32) - { - case RECORD_MSGRCV: - { - int32_t second; - uint32_t ptr; - regcache_raw_read (regcache, tdep->arg3, - (gdb_byte *) & second); - regcache_raw_read (regcache, tdep->arg5, - (gdb_byte *) & ptr); - if (record_arch_list_add_mem (ptr, second + tdep->size_long)) - return -1; - } - break; - case RECORD_MSGCTL: - regcache_raw_read (regcache, tdep->arg5, - (gdb_byte *) & tmpu32); - if (record_arch_list_add_mem (tmpu32, tdep->size_msqid_ds)) - return -1; - break; - case RECORD_SHMAT: - regcache_raw_read (regcache, tdep->arg4, - (gdb_byte *) & tmpu32); - if (record_arch_list_add_mem (tmpu32, tdep->size_ulong)) - return -1; - break; - case RECORD_SHMCTL: - regcache_raw_read (regcache, tdep->arg5, - (gdb_byte *) & tmpu32); - if (record_arch_list_add_mem (tmpu32, tdep->size_shmid_ds)) - return -1; - break; - } + regcache_raw_read_unsigned (regcache, tdep->arg1, &tmpulongest); + tmpulongest &=3D 0xffff; + switch (tmpulongest) + { + case RECORD_SEMOP: + case RECORD_SEMGET: + case RECORD_SEMTIMEDOP: + case RECORD_MSGSND: + case RECORD_MSGGET: + /* XXX maybe need do some record works wiht RECORD_SHMDT. */ + case RECORD_SHMDT: + case RECORD_SHMGET: + break; + case RECORD_MSGRCV: + { + ULONGEST second; + ULONGEST ptr; + regcache_raw_read_signed (regcache, tdep->arg3, &second); + regcache_raw_read_unsigned (regcache, tdep->arg5, &ptr); + tmpint =3D (int) second + tdep->size_long; + if (record_arch_list_add_mem ((CORE_ADDR) ptr, tmpint)) + return -1; + } + break; + case RECORD_MSGCTL: + regcache_raw_read_unsigned (regcache, tdep->arg5, + &tmpulongest); + if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest, + tdep->size_msqid_ds)) + return -1; + break; + case RECORD_SHMAT: + regcache_raw_read_unsigned (regcache, tdep->arg4, + &tmpulongest); + if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest, + tdep->size_ulong)) + return -1; + break; + case RECORD_SHMCTL: + regcache_raw_read_unsigned (regcache, tdep->arg5, + &tmpulongest); + if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest, + tdep->size_shmid_ds)) + return -1; + break; + default: + /* XXX RECORD_SEMCTL still not support. */ + printf_unfiltered (_("Process record and replay target doesn't " + "support ipc number %d\n"), (int) tmpulonge= st); + break; + } break; /* sys_fsync */ @@ -1060,30 +1364,30 @@ record_linux_system_call (int num, struc /* sys_newuname */ case 122: - regcache_raw_read (regcache, tdep->arg1, (gdb_byte *) & tmpu32); - if (record_arch_list_add_mem (tmpu32, tdep->size_new_utsname)) - return -1; + regcache_raw_read_unsigned (regcache, tdep->arg1, &tmpulongest); + if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest, + tdep->size_new_utsname)) + return -1; break; /* sys_modify_ldt */ case 123: - regcache_raw_read (regcache, tdep->arg1, (gdb_byte *) & tmpu32); - if (tmpu32 =3D=3D 0 || tmpu32 =3D=3D 2) - { - uint32_t ptr, bytecount; - regcache_raw_read (regcache, tdep->arg2, (gdb_byte *) & ptr); - regcache_raw_read (regcache, tdep->arg3, - (gdb_byte *) & bytecount); - if (record_arch_list_add_mem (ptr, bytecount)) - return -1; - } + regcache_raw_read_unsigned (regcache, tdep->arg1, &tmpulongest); + if (tmpulongest =3D=3D 0 || tmpulongest =3D=3D 2) + { + ULONGEST ptr, bytecount; + regcache_raw_read_unsigned (regcache, tdep->arg2, &ptr); + regcache_raw_read_unsigned (regcache, tdep->arg3, &bytecount); + if (record_arch_list_add_mem ((CORE_ADDR) ptr, (int) bytecount)) + return -1; + } break; /* sys_adjtimex */ case 124: - regcache_raw_read (regcache, tdep->arg1, (gdb_byte *) & tmpu32); - if (record_arch_list_add_mem (tmpu32, tdep->size_timex)) - return -1; + regcache_raw_read_unsigned (regcache, tdep->arg1, &tmpulongest); + if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest, tdep->size_ti= mex)) + return -1; break; /* sys_mprotect */ @@ -1092,9 +1396,10 @@ record_linux_system_call (int num, struc /* sys_sigprocmask */ case 126: - regcache_raw_read (regcache, tdep->arg3, (gdb_byte *) & tmpu32); - if (record_arch_list_add_mem (tmpu32, tdep->size_old_sigset_t)) - return -1; + regcache_raw_read_unsigned (regcache, tdep->arg3, &tmpulongest); + if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest, + tdep->size_old_sigset_t)) + return -1; break; /* sys_ni_syscall */ @@ -1109,35 +1414,39 @@ record_linux_system_call (int num, struc /* sys_quotactl */ case 131: - regcache_raw_read (regcache, tdep->arg1, (gdb_byte *) & tmpu32); - switch (tmpu32) - { - case RECORD_Q_GETFMT: - regcache_raw_read (regcache, tdep->arg4, - (gdb_byte *) & tmpu32); - if (record_arch_list_add_mem (tmpu32, 4)) - return -1; - break; - case RECORD_Q_GETINFO: - regcache_raw_read (regcache, tdep->arg4, - (gdb_byte *) & tmpu32); - if (record_arch_list_add_mem (tmpu32, tdep->size_mem_dqinfo)) - return -1; - break; - case RECORD_Q_GETQUOTA: - regcache_raw_read (regcache, tdep->arg4, - (gdb_byte *) & tmpu32); - if (record_arch_list_add_mem (tmpu32, tdep->size_if_dqblk)) - return -1; - break; - case RECORD_Q_XGETQSTAT: - case RECORD_Q_XGETQUOTA: - regcache_raw_read (regcache, tdep->arg4, - (gdb_byte *) & tmpu32); - if (record_arch_list_add_mem (tmpu32, tdep->size_fs_quota_stat)) - return -1; - break; - } + regcache_raw_read_unsigned (regcache, tdep->arg1, &tmpulongest); + switch (tmpulongest) + { + case RECORD_Q_GETFMT: + regcache_raw_read_unsigned (regcache, tdep->arg4, + &tmpulongest); + /* __u32 */ + if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest, 4)) + return -1; + break; + case RECORD_Q_GETINFO: + regcache_raw_read_unsigned (regcache, tdep->arg4, + &tmpulongest); + if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest, + tdep->size_mem_dqinfo)) + return -1; + break; + case RECORD_Q_GETQUOTA: + regcache_raw_read_unsigned (regcache, tdep->arg4, + &tmpulongest); + if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest, + tdep->size_if_dqblk)) + return -1; + break; + case RECORD_Q_XGETQSTAT: + case RECORD_Q_XGETQUOTA: + regcache_raw_read_unsigned (regcache, tdep->arg4, + &tmpulongest); + if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest, + tdep->size_fs_quota_stat)) + return -1; + break; + } break; /* sys_getpgid */ @@ -1150,15 +1459,15 @@ record_linux_system_call (int num, struc /* sys_sysfs */ case 135: - regcache_raw_read (regcache, tdep->arg1, (gdb_byte *) & tmpu32); - if (tmpu32 =3D=3D 2) - { - regcache_raw_read (regcache, tdep->arg3, - (gdb_byte *) & tmpu32); - /*XXX the size of memory is not very clear. */ - if (record_arch_list_add_mem (tmpu32, 10)) - return -1; - } + regcache_raw_read_unsigned (regcache, tdep->arg1, &tmpulongest); + if (tmpulongest =3D=3D 2) + { + regcache_raw_read_unsigned (regcache, tdep->arg3, + &tmpulongest); + /*XXX the size of memory is not very clear. */ + if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest, 10)) + return -1; + } break; /* sys_personality */ @@ -1173,37 +1482,43 @@ record_linux_system_call (int num, struc /* sys_llseek */ case 140: - regcache_raw_read (regcache, tdep->arg4, (gdb_byte *) & tmpu32); - if (record_arch_list_add_mem (tmpu32, tdep->size_loff_t)) - return -1; + regcache_raw_read_unsigned (regcache, tdep->arg4, &tmpulongest); + if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest, + tdep->size_loff_t)) + return -1; break; /* sys_getdents */ case 141: { - uint32_t count; - regcache_raw_read (regcache, tdep->arg2, - (gdb_byte *) & tmpu32); - regcache_raw_read (regcache, tdep->arg3, (gdb_byte *) & count); - if (record_arch_list_add_mem (tmpu32, tdep->size_dirent * count)) - return -1; + ULONGEST count; + regcache_raw_read_unsigned (regcache, tdep->arg2, + &tmpulongest); + regcache_raw_read_unsigned (regcache, tdep->arg3, &count); + if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest, + tdep->size_dirent * count)) + return -1; } break; /* sys_select */ case 142: - regcache_raw_read (regcache, tdep->arg2, (gdb_byte *) & tmpu32); - if (record_arch_list_add_mem (tmpu32, tdep->size_fd_set)) - return -1; - regcache_raw_read (regcache, tdep->arg3, (gdb_byte *) & tmpu32); - if (record_arch_list_add_mem (tmpu32, tdep->size_fd_set)) - return -1; - regcache_raw_read (regcache, tdep->arg4, (gdb_byte *) & tmpu32); - if (record_arch_list_add_mem (tmpu32, tdep->size_fd_set)) - return -1; - regcache_raw_read (regcache, tdep->arg5, (gdb_byte *) & tmpu32); - if (record_arch_list_add_mem (tmpu32, tdep->size_timeval)) - return -1; + regcache_raw_read_unsigned (regcache, tdep->arg2, &tmpulongest); + if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest, + tdep->size_fd_set)) + return -1; + regcache_raw_read_unsigned (regcache, tdep->arg3, &tmpulongest); + if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest, + tdep->size_fd_set)) + return -1; + regcache_raw_read_unsigned (regcache, tdep->arg4, &tmpulongest); + if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest, + tdep->size_fd_set)) + return -1; + regcache_raw_read_unsigned (regcache, tdep->arg5, &tmpulongest); + if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest, + tdep->size_timeval)) + return -1; break; /* sys_flock */ @@ -1215,36 +1530,40 @@ record_linux_system_call (int num, struc /* sys_readv */ case 145: { - uint32_t vec; - uint32_t vlen; - struct record_iovec - { - uint32_t iov_base; - uint32_t iov_len; - } iov; - regcache_raw_read (regcache, tdep->arg2, (gdb_byte *) & vec); - if (vec) - { - regcache_raw_read (regcache, tdep->arg3, - (gdb_byte *) & vlen); - for (tmpu32 =3D 0; tmpu32 < vlen; tmpu32++) - { - if (target_read_memory - (vec, (gdb_byte *) & iov, sizeof (struct record_iovec))) - { - if (record_debug) - fprintf_unfiltered (gdb_stdlog, - "Process record: error reading " - "memory at addr =3D %s len =3D %lu.\n", - paddress (gdbarch, vec), - (unsigned long)sizeof (struct record_iovec)); - return -1; - } - if (record_arch_list_add_mem (iov.iov_base, iov.iov_len)) - return -1; - vec +=3D sizeof (struct record_iovec); - } - } + ULONGEST vec, vlen; + + regcache_raw_read_unsigned (regcache, tdep->arg2, &vec); + if (vec) + { + gdb_byte *iov =3D alloca (tdep->size_iovec); + + regcache_raw_read_unsigned (regcache, tdep->arg3, &vlen); + for (tmpulongest =3D 0; tmpulongest < vlen; tmpulongest++) + { + if (target_read_memory ((CORE_ADDR) vec, iov, + tdep->size_iovec)) + { + if (record_debug) + fprintf_unfiltered (gdb_stdlog, + "Process record: error reading " + "memory at addr =3D 0x%s len =3D= %d.\n", + OUTPUT_REG (vec, tdep->arg2), + tdep->size_iovec); + return -1; + } + tmpaddr + =3D (CORE_ADDR) extract_unsigned_integer (iov, + tdep->size_point= er, + byte_order); + tmpint + =3D (int) extract_unsigned_integer (iov + tdep->size_poi= nter, + tdep->size_size_t, + byte_order); + if (record_arch_list_add_mem (tmpaddr, tmpint)) + return -1; + vec +=3D tdep->size_iovec; + } + } } break; @@ -1270,9 +1589,9 @@ record_linux_system_call (int num, struc /* sys_sched_getparam */ case 155: - regcache_raw_read (regcache, tdep->arg2, (gdb_byte *) & tmpu32); - if (record_arch_list_add_mem (tmpu32, tdep->size_int)) - return -1; + regcache_raw_read_unsigned (regcache, tdep->arg2, &tmpulongest); + if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest, tdep->size_in= t)) + return -1; break; /* sys_sched_setscheduler */ @@ -1291,9 +1610,10 @@ record_linux_system_call (int num, struc case 161: /* sys_nanosleep */ case 162: - regcache_raw_read (regcache, tdep->arg2, (gdb_byte *) & tmpu32); - if (record_arch_list_add_mem (tmpu32, tdep->size_timespec)) - return -1; + regcache_raw_read_unsigned (regcache, tdep->arg2, &tmpulongest); + if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest, + tdep->size_timespec)) + return -1; break; /* sys_mremap */ @@ -1304,15 +1624,18 @@ record_linux_system_call (int num, struc /* sys_getresuid16 */ case 165: - regcache_raw_read (regcache, tdep->arg1, (gdb_byte *) & tmpu32); - if (record_arch_list_add_mem (tmpu32, tdep->size_old_uid_t)) - return -1; - regcache_raw_read (regcache, tdep->arg2, (gdb_byte *) & tmpu32); - if (record_arch_list_add_mem (tmpu32, tdep->size_old_uid_t)) - return -1; - regcache_raw_read (regcache, tdep->arg3, (gdb_byte *) & tmpu32); - if (record_arch_list_add_mem (tmpu32, tdep->size_old_uid_t)) - return -1; + regcache_raw_read_unsigned (regcache, tdep->arg1, &tmpulongest); + if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest, + tdep->size_old_uid_t)) + return -1; + regcache_raw_read_unsigned (regcache, tdep->arg2, &tmpulongest); + if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest, + tdep->size_old_uid_t)) + return -1; + regcache_raw_read_unsigned (regcache, tdep->arg3, &tmpulongest); + if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest, + tdep->size_old_uid_t)) + return -1; break; /* sys_vm86 */ @@ -1323,32 +1646,32 @@ record_linux_system_call (int num, struc /* sys_poll */ case 168: - regcache_raw_read (regcache, tdep->arg1, (gdb_byte *) & tmpu32); - if (tmpu32) - { - uint32_t nfds; - regcache_raw_read (regcache, tdep->arg2, - (gdb_byte *) & nfds); - if (record_arch_list_add_mem (tmpu32, tdep->size_pollfd * nfds)) - return -1; - } + regcache_raw_read_unsigned (regcache, tdep->arg1, &tmpulongest); + if (tmpulongest) + { + ULONGEST nfds; + regcache_raw_read_unsigned (regcache, tdep->arg2, &nfds); + if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest, + tdep->size_pollfd * nfds)) + return -1; + } break; /* sys_nfsservctl */ case 169: - regcache_raw_read (regcache, tdep->arg1, (gdb_byte *) & tmpu32); - if (tmpu32 =3D=3D 7 || tmpu32 =3D=3D 8) - { - uint32_t rsize; - if (tmpu32 =3D=3D 7) - rsize =3D tdep->size_NFS_FHSIZE; - else - rsize =3D tdep->size_knfsd_fh; - regcache_raw_read (regcache, tdep->arg3, - (gdb_byte *) & tmpu32); - if (record_arch_list_add_mem (tmpu32, rsize)) - return -1; - } + regcache_raw_read_unsigned (regcache, tdep->arg1, &tmpulongest); + if (tmpulongest =3D=3D 7 || tmpulongest =3D=3D 8) + { + int rsize; + if (tmpulongest =3D=3D 7) + rsize =3D tdep->size_NFS_FHSIZE; + else + rsize =3D tdep->size_knfsd_fh; + regcache_raw_read_unsigned (regcache, tdep->arg3, + &tmpulongest); + if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest, rsize)) + return -1; + } break; /* sys_setresgid16 */ @@ -1357,35 +1680,40 @@ record_linux_system_call (int num, struc /* sys_getresgid16 */ case 171: - regcache_raw_read (regcache, tdep->arg1, (gdb_byte *) & tmpu32); - if (record_arch_list_add_mem (tmpu32, tdep->size_old_gid_t)) - return -1; - regcache_raw_read (regcache, tdep->arg2, (gdb_byte *) & tmpu32); - if (record_arch_list_add_mem (tmpu32, tdep->size_old_gid_t)) - return -1; - regcache_raw_read (regcache, tdep->arg3, (gdb_byte *) & tmpu32); - if (record_arch_list_add_mem (tmpu32, tdep->size_old_gid_t)) - return -1; + regcache_raw_read_unsigned (regcache, tdep->arg1, &tmpulongest); + if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest, + tdep->size_old_gid_t)) + return -1; + regcache_raw_read_unsigned (regcache, tdep->arg2, &tmpulongest); + if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest, + tdep->size_old_gid_t)) + return -1; + regcache_raw_read_unsigned (regcache, tdep->arg3, &tmpulongest); + if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest, + tdep->size_old_gid_t)) + return -1; break; /* sys_prctl */ case 172: - regcache_raw_read (regcache, tdep->arg1, (gdb_byte *) & tmpu32); - switch (tmpu32) - { - case 2: - regcache_raw_read (regcache, tdep->arg2, - (gdb_byte *) & tmpu32); - if (record_arch_list_add_mem (tmpu32, tdep->size_int)) - return -1; - break; - case 16: - regcache_raw_read (regcache, tdep->arg2, - (gdb_byte *) & tmpu32); - if (record_arch_list_add_mem (tmpu32, tdep->size_TASK_COMM_LEN)) - return -1; - break; - } + regcache_raw_read_unsigned (regcache, tdep->arg1, &tmpulongest); + switch (tmpulongest) + { + case 2: + regcache_raw_read_unsigned (regcache, tdep->arg2, + &tmpulongest); + if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest, + tdep->size_int)) + return -1; + break; + case 16: + regcache_raw_read_unsigned (regcache, tdep->arg2, + &tmpulongest); + if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest, + tdep->size_TASK_COMM_LEN)) + return -1; + break; + } break; /* sys_rt_sigreturn */ @@ -1394,36 +1722,39 @@ record_linux_system_call (int num, struc /* sys_rt_sigaction */ case 174: - regcache_raw_read (regcache, tdep->arg3, (gdb_byte *) & tmpu32); - if (record_arch_list_add_mem (tmpu32, tdep->size_sigaction)) - return -1; + regcache_raw_read_unsigned (regcache, tdep->arg3, &tmpulongest); + if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest, + tdep->size_sigaction)) + return -1; break; /* sys_rt_sigprocmask */ case 175: - regcache_raw_read (regcache, tdep->arg3, (gdb_byte *) & tmpu32); - if (record_arch_list_add_mem (tmpu32, tdep->size_sigset_t)) - return -1; + regcache_raw_read_unsigned (regcache, tdep->arg3, &tmpulongest); + if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest, + tdep->size_sigset_t)) + return -1; break; /* sys_rt_sigpending */ case 176: - regcache_raw_read (regcache, tdep->arg1, (gdb_byte *) & tmpu32); - if (tmpu32) - { - uint32_t sigsetsize; - regcache_raw_read (regcache, tdep->arg2, - (gdb_byte *) & sigsetsize); - if (record_arch_list_add_mem (tmpu32, sigsetsize)) - return -1; - } + regcache_raw_read_unsigned (regcache, tdep->arg1, &tmpulongest); + if (tmpulongest) + { + ULONGEST sigsetsize; + regcache_raw_read_unsigned (regcache, tdep->arg2,&sigsetsize); + if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest, + (int) sigsetsize)) + return -1; + } break; /* sys_rt_sigtimedwait */ case 177: - regcache_raw_read (regcache, tdep->arg2, (gdb_byte *) & tmpu32); - if (record_arch_list_add_mem (tmpu32, tdep->size_siginfo_t)) - return -1; + regcache_raw_read_unsigned (regcache, tdep->arg2, &tmpulongest); + if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest, + tdep->size_siginfo_t)) + return -1; break; /* sys_rt_sigqueueinfo */ @@ -1434,15 +1765,14 @@ record_linux_system_call (int num, struc /* sys_pread64 */ case 180: - regcache_raw_read (regcache, tdep->arg2, (gdb_byte *) & tmpu32); - if (tmpu32) - { - uint32_t count; - regcache_raw_read (regcache, tdep->arg3, - (gdb_byte *) & count); - if (record_arch_list_add_mem (tmpu32, count)) - return -1; - } + regcache_raw_read_unsigned (regcache, tdep->arg2, &tmpulongest); + if (tmpulongest) + { + ULONGEST count; + regcache_raw_read_unsigned (regcache, tdep->arg3,&count); + if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest, (int) cou= nt)) + return -1; + } break; /* sys_pwrite64 */ @@ -1453,22 +1783,22 @@ record_linux_system_call (int num, struc /* sys_getcwd */ case 183: - regcache_raw_read (regcache, tdep->arg1, (gdb_byte *) & tmpu32); - if (tmpu32) - { - uint32_t size; - regcache_raw_read (regcache, tdep->arg2, - (gdb_byte *) & size); - if (record_arch_list_add_mem (tmpu32, size)) - return -1; - } + regcache_raw_read_unsigned (regcache, tdep->arg1, &tmpulongest); + if (tmpulongest) + { + ULONGEST size; + regcache_raw_read_unsigned (regcache, tdep->arg2, &size); + if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest, (int) siz= e)) + return -1; + } break; /* sys_capget */ case 184: - regcache_raw_read (regcache, tdep->arg2, (gdb_byte *) & tmpu32); - if (record_arch_list_add_mem (tmpu32, tdep->size_cap_user_data_t)) - return -1; + regcache_raw_read_unsigned (regcache, tdep->arg2, &tmpulongest); + if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest, + tdep->size_cap_user_data_t)) + return -1; break; /* sys_capset */ @@ -1477,16 +1807,18 @@ record_linux_system_call (int num, struc /* sys_sigaltstack */ case 186: - regcache_raw_read (regcache, tdep->arg2, (gdb_byte *) & tmpu32); - if (record_arch_list_add_mem (tmpu32, tdep->size_stack_t)) - return -1; + regcache_raw_read_unsigned (regcache, tdep->arg2, &tmpulongest); + if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest, + tdep->size_stack_t)) + return -1; break; /* sys_sendfile */ case 187: - regcache_raw_read (regcache, tdep->arg3, (gdb_byte *) & tmpu32); - if (record_arch_list_add_mem (tmpu32, tdep->size_off_t)) - return -1; + regcache_raw_read_unsigned (regcache, tdep->arg3, &tmpulongest); + if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest, + tdep->size_off_t)) + return -1; break; /* sys_ni_syscall */ @@ -1499,9 +1831,10 @@ record_linux_system_call (int num, struc /* sys_getrlimit */ case 191: - regcache_raw_read (regcache, tdep->arg2, (gdb_byte *) & tmpu32); - if (record_arch_list_add_mem (tmpu32, tdep->size_rlimit)) - return -1; + regcache_raw_read_unsigned (regcache, tdep->arg2, &tmpulongest); + if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest, + tdep->size_rlimit)) + return -1; break; /* sys_mmap2 */ @@ -1520,9 +1853,10 @@ record_linux_system_call (int num, struc case 196: /* sys_fstat64 */ case 197: - regcache_raw_read (regcache, tdep->arg2, (gdb_byte *) & tmpu32); - if (record_arch_list_add_mem (tmpu32, tdep->size_stat64)) - return -1; + regcache_raw_read_unsigned (regcache, tdep->arg2, &tmpulongest); + if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest, + tdep->size_stat64)) + return -1; break; /* sys_lchown */ @@ -1543,16 +1877,16 @@ record_linux_system_call (int num, struc /* sys_getgroups */ case 205: - regcache_raw_read (regcache, tdep->arg2, (gdb_byte *) & tmpu32); - if (tmpu32) - { - int gidsetsize; - regcache_raw_read (regcache, tdep->arg1, - (gdb_byte *) & gidsetsize); - if (record_arch_list_add_mem - (tmpu32, tdep->size_gid_t * gidsetsize)) - return -1; - } + regcache_raw_read_unsigned (regcache, tdep->arg2, &tmpulongest); + if (tmpulongest) + { + ULONGEST gidsetsize; + regcache_raw_read_unsigned (regcache, tdep->arg1, + &gidsetsize); + tmpint =3D tdep->size_gid_t * (int) gidsetsize; + if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest, tmpint)) + return -1; + } break; /* sys_setgroups */ @@ -1565,15 +1899,15 @@ record_linux_system_call (int num, struc /* sys_getresuid */ case 209: - regcache_raw_read (regcache, tdep->arg1, (gdb_byte *) & tmpu32); - if (record_arch_list_add_mem (tmpu32, tdep->size_uid_t)) - return -1; - regcache_raw_read (regcache, tdep->arg2, (gdb_byte *) & tmpu32); - if (record_arch_list_add_mem (tmpu32, tdep->size_uid_t)) - return -1; - regcache_raw_read (regcache, tdep->arg3, (gdb_byte *) & tmpu32); - if (record_arch_list_add_mem (tmpu32, tdep->size_uid_t)) - return -1; + regcache_raw_read_unsigned (regcache, tdep->arg1, &tmpulongest); + if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest, tdep->size_ui= d_t)) + return -1; + regcache_raw_read_unsigned (regcache, tdep->arg2, &tmpulongest); + if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest, tdep->size_ui= d_t)) + return -1; + regcache_raw_read_unsigned (regcache, tdep->arg3, &tmpulongest); + if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest, tdep->size_ui= d_t)) + return -1; break; /* sys_setresgid */ @@ -1582,15 +1916,15 @@ record_linux_system_call (int num, struc /* sys_getresgid */ case 211: - regcache_raw_read (regcache, tdep->arg1, (gdb_byte *) & tmpu32); - if (record_arch_list_add_mem (tmpu32, tdep->size_gid_t)) - return -1; - regcache_raw_read (regcache, tdep->arg2, (gdb_byte *) & tmpu32); - if (record_arch_list_add_mem (tmpu32, tdep->size_gid_t)) - return -1; - regcache_raw_read (regcache, tdep->arg3, (gdb_byte *) & tmpu32); - if (record_arch_list_add_mem (tmpu32, tdep->size_gid_t)) - return -1; + regcache_raw_read_unsigned (regcache, tdep->arg1, &tmpulongest); + if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest, tdep->size_gi= d_t)) + return -1; + regcache_raw_read_unsigned (regcache, tdep->arg2, &tmpulongest); + if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest, tdep->size_gi= d_t)) + return -1; + regcache_raw_read_unsigned (regcache, tdep->arg3, &tmpulongest); + if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest, tdep->size_gi= d_t)) + return -1; break; /* sys_chown */ @@ -1609,9 +1943,10 @@ record_linux_system_call (int num, struc /* sys_mincore */ case 218: - regcache_raw_read (regcache, tdep->arg3, (gdb_byte *) & tmpu32); - if (record_arch_list_add_mem (tmpu32, tdep->size_PAGE_SIZE)) - return -1; + regcache_raw_read_unsigned (regcache, tdep->arg3, &tmpulongest); + if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest, + tdep->size_PAGE_SIZE)) + return -1; break; /* sys_madvise */ @@ -1621,30 +1956,32 @@ record_linux_system_call (int num, struc /* sys_getdents64 */ case 220: { - uint32_t count; - regcache_raw_read (regcache, tdep->arg2, - (gdb_byte *) & tmpu32); - regcache_raw_read (regcache, tdep->arg3, (gdb_byte *) & count); - if (record_arch_list_add_mem (tmpu32, tdep->size_dirent64 * count)) - return -1; + ULONGEST count; + regcache_raw_read_unsigned (regcache, tdep->arg2, + &tmpulongest); + regcache_raw_read_unsigned (regcache, tdep->arg3, &count); + if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest, + tdep->size_dirent64 * count)) + return -1; } break; /* sys_fcntl64 */ case 221: - regcache_raw_read (regcache, tdep->arg2, (gdb_byte *) & tmpu32); - if (tmpu32 =3D=3D tdep->fcntl_F_GETLK64) + regcache_raw_read_unsigned (regcache, tdep->arg2, &tmpulongest); + if (tmpulongest =3D=3D tdep->fcntl_F_GETLK64) { - regcache_raw_read (regcache, tdep->arg3, - (gdb_byte *) & tmpu32); - if (record_arch_list_add_mem (tmpu32, tdep->size_flock64)) - return -1; - } - else if (tmpu32 !=3D tdep->fcntl_F_SETLK64 - && tmpu32 !=3D tdep->fcntl_F_SETLKW64) + regcache_raw_read_unsigned (regcache, tdep->arg3, + &tmpulongest); + if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest, + tdep->size_flock64)) + return -1; + } + else if (tmpulongest !=3D tdep->fcntl_F_SETLK64 + && tmpulongest !=3D tdep->fcntl_F_SETLKW64) { - goto sys_fcntl; - } + goto sys_fcntl; + } break; /* sys_ni_syscall */ @@ -1669,15 +2006,14 @@ record_linux_system_call (int num, struc case 230: /* sys_fgetxattr */ case 231: - regcache_raw_read (regcache, tdep->arg3, (gdb_byte *) & tmpu32); - if (tmpu32) - { - uint32_t size; - regcache_raw_read (regcache, tdep->arg4, - (gdb_byte *) & size); - if (record_arch_list_add_mem (tmpu32, size)) - return -1; - } + regcache_raw_read_unsigned (regcache, tdep->arg3, &tmpulongest); + if (tmpulongest) + { + ULONGEST size; + regcache_raw_read_unsigned (regcache, tdep->arg4, &size); + if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest, (int) siz= e)) + return -1; + } break; /* sys_listxattr */ @@ -1686,15 +2022,14 @@ record_linux_system_call (int num, struc case 233: /* sys_flistxattr */ case 234: - regcache_raw_read (regcache, tdep->arg2, (gdb_byte *) & tmpu32); - if (tmpu32) - { - uint32_t size; - regcache_raw_read (regcache, tdep->arg3, - (gdb_byte *) & size); - if (record_arch_list_add_mem (tmpu32, size)) - return -1; - } + regcache_raw_read_unsigned (regcache, tdep->arg2, &tmpulongest); + if (tmpulongest) + { + ULONGEST size; + regcache_raw_read_unsigned (regcache, tdep->arg3, &size); + if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest, (int) siz= e)) + return -1; + } break; /* sys_removexattr */ @@ -1709,9 +2044,10 @@ record_linux_system_call (int num, struc /* sys_sendfile64 */ case 239: - regcache_raw_read (regcache, tdep->arg3, (gdb_byte *) & tmpu32); - if (record_arch_list_add_mem (tmpu32, tdep->size_loff_t)) - return -1; + regcache_raw_read_unsigned (regcache, tdep->arg3, &tmpulongest); + if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest, + tdep->size_loff_t)) + return -1; break; /* sys_futex */ @@ -1722,35 +2058,36 @@ record_linux_system_call (int num, struc /* sys_sched_getaffinity */ case 242: - regcache_raw_read (regcache, tdep->arg3, (gdb_byte *) & tmpu32); - if (tmpu32) - { - uint32_t len; - regcache_raw_read (regcache, tdep->arg2, (gdb_byte *) & len); - if (record_arch_list_add_mem (tmpu32, len)) - return -1; - } + regcache_raw_read_unsigned (regcache, tdep->arg3, &tmpulongest); + if (tmpulongest) + { + ULONGEST len; + regcache_raw_read_unsigned (regcache, tdep->arg2, &len); + if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest, (int) len= )) + return -1; + } break; /* sys_set_thread_area */ case 243: - regcache_raw_read (regcache, tdep->arg1, (gdb_byte *) & tmpu32); - if (record_arch_list_add_mem (tmpu32, tdep->size_int)) - return -1; + regcache_raw_read_unsigned (regcache, tdep->arg1, &tmpulongest); + if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest, tdep->size_in= t)) + return -1; break; /* sys_get_thread_area */ case 244: - regcache_raw_read (regcache, tdep->arg1, (gdb_byte *) & tmpu32); - if (record_arch_list_add_mem (tmpu32, tdep->size_user_desc)) - return -1; + regcache_raw_read_unsigned (regcache, tdep->arg1, &tmpulongest); + if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest, + tdep->size_user_desc)) + return -1; break; /* sys_io_setup */ case 245: - regcache_raw_read (regcache, tdep->arg2, (gdb_byte *) & tmpu32); - if (record_arch_list_add_mem (tmpu32, tdep->size_long)) - return -1; + regcache_raw_read_unsigned (regcache, tdep->arg2, &tmpulongest); + if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest, tdep->size_lo= ng)) + return -1; break; /* sys_io_destroy */ @@ -1759,49 +2096,57 @@ record_linux_system_call (int num, struc /* sys_io_getevents */ case 247: - regcache_raw_read (regcache, tdep->arg4, (gdb_byte *) & tmpu32); - if (tmpu32) - { - int32_t nr; - regcache_raw_read (regcache, tdep->arg3, (gdb_byte *) & nr); - if (record_arch_list_add_mem (tmpu32, nr * tdep->size_io_event)) - return -1; - } + regcache_raw_read_unsigned (regcache, tdep->arg4, &tmpulongest); + if (tmpulongest) + { + ULONGEST nr; + regcache_raw_read_unsigned (regcache, tdep->arg3, &nr); + if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest, + nr * tdep->size_io_event)) + return -1; + } break; /* sys_io_submit */ case 248: - regcache_raw_read (regcache, tdep->arg3, (gdb_byte *) & tmpu32); - if (tmpu32) - { - int32_t i, nr; - uint32_t *iocbp; - regcache_raw_read (regcache, tdep->arg2, (gdb_byte *) & nr); - iocbp =3D (uint32_t *) alloca (nr * tdep->size_int); - if (target_read_memory - (tmpu32, (gdb_byte *) iocbp, nr * tdep->size_int)) - { - if (record_debug) - fprintf_unfiltered (gdb_stdlog, - "Process record: error reading memory " - "at addr =3D %s len =3D %u.\n", - paddress (gdbarch, tmpu32), - (int)(nr * tdep->size_int)); - return -1; - } - for (i =3D 0; i < nr; i++) - { - if (record_arch_list_add_mem (iocbp[i], tdep->size_iocb)) - return -1; - } - } + regcache_raw_read_unsigned (regcache, tdep->arg3, &tmpulongest); + if (tmpulongest) + { + ULONGEST nr, i; + gdb_byte *iocbp; + + regcache_raw_read_unsigned (regcache, tdep->arg2, &nr); + iocbp =3D alloca (nr * tdep->size_pointer); + if (target_read_memory ((CORE_ADDR) tmpulongest, iocbp, + nr * tdep->size_pointer)) + { + if (record_debug) + fprintf_unfiltered (gdb_stdlog, + "Process record: error reading memory " + "at addr =3D 0x%s len =3D %u.\n", + OUTPUT_REG (tmpulongest, tdep->arg2), + (int) (nr * tdep->size_pointer)); + return -1; + } + for (i =3D 0; i < nr; i++) + { + tmpaddr + =3D (CORE_ADDR) extract_unsigned_integer (iocbp, + tdep->size_pointer, + byte_order); + if (record_arch_list_add_mem (tmpaddr, tdep->size_iocb)) + return -1; + iocbp +=3D tdep->size_pointer; + } + } break; /* sys_io_cancel */ case 249: - regcache_raw_read (regcache, tdep->arg3, (gdb_byte *) & tmpu32); - if (record_arch_list_add_mem (tmpu32, tdep->size_io_event)) - return -1; + regcache_raw_read_unsigned (regcache, tdep->arg3, &tmpulongest); + if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest, + tdep->size_io_event)) + return -1; break; /* sys_fadvise64 */ @@ -1813,28 +2158,27 @@ record_linux_system_call (int num, struc /* sys_exit_group */ case 252: { - int q; - target_terminal_ours (); - q =3D - yquery (_("The next instruction is syscall exit_group. " - "It will make the program exit. " - "Do you want to stop the program?")); - target_terminal_inferior (); - if (q) - return 1; + int q; + target_terminal_ours (); + q =3D yquery (_("The next instruction is syscall exit_group. " + "It will make the program exit. " + "Do you want to stop the program?")); + target_terminal_inferior (); + if (q) + return 1; } break; /* sys_lookup_dcookie */ case 253: - regcache_raw_read (regcache, tdep->arg2, (gdb_byte *) & tmpu32); - if (tmpu32) - { - uint32_t len; - regcache_raw_read (regcache, tdep->arg3, (gdb_byte *) & len); - if (record_arch_list_add_mem (tmpu32, len)) - return -1; - } + regcache_raw_read_unsigned (regcache, tdep->arg2, &tmpulongest); + if (tmpulongest) + { + ULONGEST len; + regcache_raw_read_unsigned (regcache, tdep->arg3, &len); + if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest, (int) len= )) + return -1; + } break; /* sys_epoll_create */ @@ -1845,16 +2189,15 @@ record_linux_system_call (int num, struc /* sys_epoll_wait */ case 256: - regcache_raw_read (regcache, tdep->arg2, (gdb_byte *) & tmpu32); - if (tmpu32) - { - int32_t maxevents; - regcache_raw_read (regcache, tdep->arg3, - (gdb_byte *) & maxevents); - if (record_arch_list_add_mem - (tmpu32, maxevents * tdep->size_epoll_event)) - return -1; - } + regcache_raw_read_unsigned (regcache, tdep->arg2, &tmpulongest); + if (tmpulongest) + { + ULONGEST maxevents; + regcache_raw_read_unsigned (regcache, tdep->arg3, &maxevents); + if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest, + maxevents * tdep->size_epoll_event= )) + return -1; + } break; /* sys_remap_file_pages */ @@ -1865,23 +2208,25 @@ record_linux_system_call (int num, struc /* sys_timer_create */ case 259: - regcache_raw_read (regcache, tdep->arg3, (gdb_byte *) & tmpu32); - if (record_arch_list_add_mem (tmpu32, tdep->size_int)) - return -1; + regcache_raw_read_unsigned (regcache, tdep->arg3, &tmpulongest); + if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest, tdep->size_in= t)) + return -1; break; /* sys_timer_settime */ case 260: - regcache_raw_read (regcache, tdep->arg4, (gdb_byte *) & tmpu32); - if (record_arch_list_add_mem (tmpu32, tdep->size_itimerspec)) - return -1; + regcache_raw_read_unsigned (regcache, tdep->arg4, &tmpulongest); + if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest, + tdep->size_itimerspec)) + return -1; break; /* sys_timer_gettime */ case 261: - regcache_raw_read (regcache, tdep->arg2, (gdb_byte *) & tmpu32); - if (record_arch_list_add_mem (tmpu32, tdep->size_itimerspec)) - return -1; + regcache_raw_read_unsigned (regcache, tdep->arg2, &tmpulongest); + if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest, + tdep->size_itimerspec)) + return -1; break; /* sys_timer_getoverrun */ @@ -1894,32 +2239,36 @@ record_linux_system_call (int num, struc /* sys_clock_gettime */ case 265: - regcache_raw_read (regcache, tdep->arg2, (gdb_byte *) & tmpu32); - if (record_arch_list_add_mem (tmpu32, tdep->size_timespec)) - return -1; + regcache_raw_read_unsigned (regcache, tdep->arg2, &tmpulongest); + if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest, + tdep->size_timespec)) + return -1; break; /* sys_clock_getres */ case 266: - regcache_raw_read (regcache, tdep->arg2, (gdb_byte *) & tmpu32); - if (record_arch_list_add_mem (tmpu32, tdep->size_timespec)) - return -1; + regcache_raw_read_unsigned (regcache, tdep->arg2, &tmpulongest); + if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest, + tdep->size_timespec)) + return -1; break; /* sys_clock_nanosleep */ case 267: - regcache_raw_read (regcache, tdep->arg4, (gdb_byte *) & tmpu32); - if (record_arch_list_add_mem (tmpu32, tdep->size_timespec)) - return -1; + regcache_raw_read_unsigned (regcache, tdep->arg4, &tmpulongest); + if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest, + tdep->size_timespec)) + return -1; break; /* sys_statfs64 */ case 268: /* sys_fstatfs64 */ case 269: - regcache_raw_read (regcache, tdep->arg3, (gdb_byte *) & tmpu32); - if (record_arch_list_add_mem (tmpu32, tdep->size_statfs64)) - return -1; + regcache_raw_read_unsigned (regcache, tdep->arg3, &tmpulongest); + if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest, + tdep->size_statfs64)) + return -1; break; /* sys_tgkill */ @@ -1936,18 +2285,18 @@ record_linux_system_call (int num, struc /* sys_get_mempolicy */ case 275: - regcache_raw_read (regcache, tdep->arg1, (gdb_byte *) & tmpu32); - if (record_arch_list_add_mem (tmpu32, tdep->size_int)) - return -1; - regcache_raw_read (regcache, tdep->arg2, (gdb_byte *) & tmpu32); - if (tmpu32) - { - uint32_t maxnode; - regcache_raw_read (regcache, tdep->arg3, - (gdb_byte *) & maxnode); - if (record_arch_list_add_mem (tmpu32, maxnode * tdep->size_long)) - return -1; - } + regcache_raw_read_unsigned (regcache, tdep->arg1, &tmpulongest); + if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest, tdep->size_in= t)) + return -1; + regcache_raw_read_unsigned (regcache, tdep->arg2, &tmpulongest); + if (tmpulongest) + { + ULONGEST maxnode; + regcache_raw_read_unsigned (regcache, tdep->arg3, &maxnode); + if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest, + maxnode * tdep->size_long)) + return -1; + } break; /* sys_set_mempolicy */ @@ -1962,18 +2311,18 @@ record_linux_system_call (int num, struc /* sys_mq_timedreceive */ case 280: - regcache_raw_read (regcache, tdep->arg2, (gdb_byte *) & tmpu32); - if (tmpu32) - { - uint32_t msg_len; - regcache_raw_read (regcache, tdep->arg3, - (gdb_byte *) & msg_len); - if (record_arch_list_add_mem (tmpu32, msg_len)) - return -1; - } - regcache_raw_read (regcache, tdep->arg4, (gdb_byte *) & tmpu32); - if (record_arch_list_add_mem (tmpu32, tdep->size_int)) - return -1; + regcache_raw_read_unsigned (regcache, tdep->arg2, &tmpulongest); + if (tmpulongest) + { + ULONGEST msg_len; + regcache_raw_read_unsigned (regcache, tdep->arg3, &msg_len); + if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest, + (int) msg_len)) + return -1; + } + regcache_raw_read_unsigned (regcache, tdep->arg4, &tmpulongest); + if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest, tdep->size_in= t)) + return -1; break; /* sys_mq_notify */ @@ -1982,9 +2331,10 @@ record_linux_system_call (int num, struc /* sys_mq_getsetattr */ case 282: - regcache_raw_read (regcache, tdep->arg3, (gdb_byte *) & tmpu32); - if (record_arch_list_add_mem (tmpu32, tdep->size_mq_attr)) - return -1; + regcache_raw_read_unsigned (regcache, tdep->arg3, &tmpulongest); + if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest, + tdep->size_mq_attr)) + return -1; break; /* sys_kexec_load */ @@ -1993,12 +2343,14 @@ record_linux_system_call (int num, struc /* sys_waitid */ case 284: - regcache_raw_read (regcache, tdep->arg3, (gdb_byte *) & tmpu32); - if (record_arch_list_add_mem (tmpu32, tdep->size_siginfo)) - return -1; - regcache_raw_read (regcache, tdep->arg5, (gdb_byte *) & tmpu32); - if (record_arch_list_add_mem (tmpu32, tdep->size_rusage)) - return -1; + regcache_raw_read_unsigned (regcache, tdep->arg3, &tmpulongest); + if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest, + tdep->size_siginfo)) + return -1; + regcache_raw_read_unsigned (regcache, tdep->arg5, &tmpulongest); + if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest, + tdep->size_rusage)) + return -1; break; /* sys_ni_syscall */ @@ -2011,20 +2363,20 @@ record_linux_system_call (int num, struc /* sys_keyctl */ case 288: - regcache_raw_read (regcache, tdep->arg1, (gdb_byte *) & tmpu32); - if (tmpu32 =3D=3D 6 || tmpu32 =3D=3D 11) - { - regcache_raw_read (regcache, tdep->arg3, - (gdb_byte *) & tmpu32); - if (tmpu32) - { - uint32_t buflen; - regcache_raw_read (regcache, tdep->arg4, - (gdb_byte *) & buflen); - if (record_arch_list_add_mem (tmpu32, buflen)) - return -1; - } - } + regcache_raw_read_unsigned (regcache, tdep->arg1, &tmpulongest); + if (tmpulongest =3D=3D 6 || tmpulongest =3D=3D 11) + { + regcache_raw_read_unsigned (regcache, tdep->arg3, + &tmpulongest); + if (tmpulongest) + { + ULONGEST buflen; + regcache_raw_read_unsigned (regcache, tdep->arg4, &buflen); + if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest, + (int) buflen)) + return -1; + } + } break; /* sys_ioprio_set */ @@ -2053,9 +2405,10 @@ record_linux_system_call (int num, struc /* sys_fstatat64 */ case 300: - regcache_raw_read (regcache, tdep->arg3, (gdb_byte *) & tmpu32); - if (record_arch_list_add_mem (tmpu32, tdep->size_stat64)) - return -1; + regcache_raw_read_unsigned (regcache, tdep->arg3, &tmpulongest); + if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest, + tdep->size_stat64)) + return -1; break; /* sys_unlinkat */ @@ -2070,15 +2423,14 @@ record_linux_system_call (int num, struc /* sys_readlinkat */ case 305: - regcache_raw_read (regcache, tdep->arg3, (gdb_byte *) & tmpu32); - if (tmpu32) - { - int32_t bufsiz; - regcache_raw_read (regcache, tdep->arg4, - (gdb_byte *) & bufsiz); - if (record_arch_list_add_mem (tmpu32, bufsiz)) - return -1; - } + regcache_raw_read_unsigned (regcache, tdep->arg3, &tmpulongest); + if (tmpulongest) + { + ULONGEST bufsiz; + regcache_raw_read_unsigned (regcache, tdep->arg4, &bufsiz); + if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest, (int) buf= siz)) + return -1; + } break; /* sys_fchmodat */ @@ -2089,34 +2441,39 @@ record_linux_system_call (int num, struc /* sys_pselect6 */ case 308: - regcache_raw_read (regcache, tdep->arg2, (gdb_byte *) & tmpu32); - if (record_arch_list_add_mem (tmpu32, tdep->size_fd_set)) - return -1; - regcache_raw_read (regcache, tdep->arg3, (gdb_byte *) & tmpu32); - if (record_arch_list_add_mem (tmpu32, tdep->size_fd_set)) - return -1; - regcache_raw_read (regcache, tdep->arg4, (gdb_byte *) & tmpu32); - if (record_arch_list_add_mem (tmpu32, tdep->size_fd_set)) - return -1; - regcache_raw_read (regcache, tdep->arg5, (gdb_byte *) & tmpu32); - if (record_arch_list_add_mem (tmpu32, tdep->size_timespec)) - return -1; + regcache_raw_read_unsigned (regcache, tdep->arg2, &tmpulongest); + if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest, + tdep->size_fd_set)) + return -1; + regcache_raw_read_unsigned (regcache, tdep->arg3, &tmpulongest); + if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest, + tdep->size_fd_set)) + return -1; + regcache_raw_read_unsigned (regcache, tdep->arg4, &tmpulongest); + if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest, + tdep->size_fd_set)) + return -1; + regcache_raw_read_unsigned (regcache, tdep->arg5, &tmpulongest); + if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest, + tdep->size_timespec)) + return -1; break; /* sys_ppoll */ case 309: - regcache_raw_read (regcache, tdep->arg1, (gdb_byte *) & tmpu32); - if (tmpu32) - { - uint32_t nfds; - regcache_raw_read (regcache, tdep->arg2, - (gdb_byte *) & nfds); - if (record_arch_list_add_mem (tmpu32, tdep->size_pollfd * nfds)) - return -1; - } - regcache_raw_read (regcache, tdep->arg3, (gdb_byte *) & tmpu32); - if (record_arch_list_add_mem (tmpu32, tdep->size_timespec)) - return -1; + regcache_raw_read_unsigned (regcache, tdep->arg1, &tmpulongest); + if (tmpulongest) + { + ULONGEST nfds; + regcache_raw_read_unsigned (regcache, tdep->arg2, &nfds); + if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest, + tdep->size_pollfd * nfds)) + return -1; + } + regcache_raw_read_unsigned (regcache, tdep->arg3, &tmpulongest); + if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest, + tdep->size_timespec)) + return -1; break; /* sys_unshare */ @@ -2127,22 +2484,24 @@ record_linux_system_call (int num, struc /* sys_get_robust_list */ case 312: - regcache_raw_read (regcache, tdep->arg2, (gdb_byte *) & tmpu32); - if (record_arch_list_add_mem (tmpu32, tdep->size_int)) - return -1; - regcache_raw_read (regcache, tdep->arg3, (gdb_byte *) & tmpu32); - if (record_arch_list_add_mem (tmpu32, tdep->size_int)) - return -1; + regcache_raw_read_unsigned (regcache, tdep->arg2, &tmpulongest); + if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest, tdep->size_in= t)) + return -1; + regcache_raw_read_unsigned (regcache, tdep->arg3, &tmpulongest); + if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest, tdep->size_in= t)) + return -1; break; /* sys_splice */ case 313: - regcache_raw_read (regcache, tdep->arg2, (gdb_byte *) & tmpu32); - if (record_arch_list_add_mem (tmpu32, tdep->size_loff_t)) - return -1; - regcache_raw_read (regcache, tdep->arg4, (gdb_byte *) & tmpu32); - if (record_arch_list_add_mem (tmpu32, tdep->size_loff_t)) - return -1; + regcache_raw_read_unsigned (regcache, tdep->arg2, &tmpulongest); + if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest, + tdep->size_loff_t)) + return -1; + regcache_raw_read_unsigned (regcache, tdep->arg4, &tmpulongest); + if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest, + tdep->size_loff_t)) + return -1; break; /* sys_sync_file_range */ @@ -2155,48 +2514,47 @@ record_linux_system_call (int num, struc /* sys_move_pages */ case 317: - regcache_raw_read (regcache, tdep->arg5, (gdb_byte *) & tmpu32); - if (tmpu32) - { - uint32_t nr_pages; - regcache_raw_read (regcache, tdep->arg2, - (gdb_byte *) & nr_pages); - if (record_arch_list_add_mem (tmpu32, nr_pages * tdep->size_int)) - return -1; - } + regcache_raw_read_unsigned (regcache, tdep->arg5, &tmpulongest); + if (tmpulongest) + { + ULONGEST nr_pages; + regcache_raw_read_unsigned (regcache, tdep->arg2, &nr_pages); + if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest, + nr_pages * tdep->size_int)) + return -1; + } break; /* sys_getcpu */ case 318: - regcache_raw_read (regcache, tdep->arg1, (gdb_byte *) & tmpu32); - if (record_arch_list_add_mem (tmpu32, tdep->size_int)) - return -1; - regcache_raw_read (regcache, tdep->arg2, (gdb_byte *) & tmpu32); - if (record_arch_list_add_mem (tmpu32, tdep->size_int)) - return -1; - regcache_raw_read (regcache, tdep->arg3, (gdb_byte *) & tmpu32); - if (record_arch_list_add_mem (tmpu32, tdep->size_ulong * 2)) - return -1; + regcache_raw_read_unsigned (regcache, tdep->arg1, &tmpulongest); + if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest, tdep->size_in= t)) + return -1; + regcache_raw_read_unsigned (regcache, tdep->arg2, &tmpulongest); + if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest, tdep->size_in= t)) + return -1; + regcache_raw_read_unsigned (regcache, tdep->arg3, &tmpulongest); + if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest, + tdep->size_ulong * 2)) + return -1; break; /* sys_epoll_pwait */ case 319: - regcache_raw_read (regcache, tdep->arg2, (gdb_byte *) & tmpu32); - if (tmpu32) - { - int32_t maxevents; - regcache_raw_read (regcache, tdep->arg3, - (gdb_byte *) & maxevents); - if (record_arch_list_add_mem - (tmpu32, maxevents * tdep->size_epoll_event)) - return -1; - } + regcache_raw_read_unsigned (regcache, tdep->arg2, &tmpulongest); + if (tmpulongest) + { + ULONGEST maxevents; + regcache_raw_read_unsigned (regcache, tdep->arg3, &maxevents); + tmpint =3D (int) maxevents * tdep->size_epoll_event; + if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest, tmpint)) + return -1; + } break; default: printf_unfiltered (_("Process record and replay target doesn't " - "support syscall number %u\n"), - (int)tmpu32); + "support syscall number %u\n"), num); return -1; break; } --- a/linux-record.h +++ b/linux-record.h @@ -23,6 +23,7 @@ struct linux_record_tdep { /* The size of the type that will be used in a system call. */ + int size_pointer; int size__old_kernel_stat; int size_tms; int size_loff_t; @@ -81,7 +82,6 @@ struct linux_record_tdep int size_itimerspec; int size_mq_attr; int size_siginfo; - int size_termios; int size_termios2; int size_pid_t; @@ -89,6 +89,8 @@ struct linux_record_tdep int size_serial_struct; int size_serial_icounter_struct; int size_hayes_esp_config; + int size_size_t; + int size_iovec; /* The values of the second argument of system call "sys_ioctl". */ int ioctl_TCGETS; @@ -171,6 +173,7 @@ struct linux_record_tdep int arg3; int arg4; int arg5; + int arg6; }; extern int record_linux_system_call (int num, struct regcache *regcache, --001636e0a7746ff211046f123668 Content-Type: text/plain; charset=US-ASCII; name="prec_syscall_64bits.txt" Content-Disposition: attachment; filename="prec_syscall_64bits.txt" Content-Transfer-Encoding: base64 X-Attachment-Id: f_fxc16yr60 Content-length: 162346 LS0tCiBpMzg2LWxpbnV4LXRkZXAuYyB8ICAgMjYgCiBsaW51eC1yZWNvcmQu YyAgICB8IDI1NzAgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tCiBsaW51eC1yZWNvcmQuaCAgICB8ICAg IDUgCiAzIGZpbGVzIGNoYW5nZWQsIDE0ODkgaW5zZXJ0aW9ucygrKSwgMTEx MiBkZWxldGlvbnMoLSkKCi0tLSBhL2kzODYtbGludXgtdGRlcC5jCisrKyBi L2kzODYtbGludXgtdGRlcC5jCkBAIC0zNjksNyArMzY5LDE0IEBAIGkzODZf bGludXhfaW50eDgwX3N5c2VudGVyX3JlY29yZCAoc3RydWMKICAgaW50IHJl dDsKICAgdWludDMyX3QgdG1wdTMyOwogCi0gIHJlZ2NhY2hlX3Jhd19yZWFk IChyZWdjYWNoZSwgSTM4Nl9FQVhfUkVHTlVNLCAoZ2RiX2J5dGUgKikmdG1w dTMyKTsKKyAgcmVnY2FjaGVfcmF3X3JlYWQgKHJlZ2NhY2hlLCBJMzg2X0VB WF9SRUdOVU0sIChnZGJfYnl0ZSAqKSAmdG1wdTMyKTsKKworICBpZiAodG1w dTMyID4gNDk5KQorICAgIHsKKyAgICAgIHByaW50Zl91bmZpbHRlcmVkIChf KCJQcm9jZXNzIHJlY29yZCBhbmQgcmVwbGF5IHRhcmdldCBkb2Vzbid0ICIK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICJzdXBwb3J0IHN5c2NhbGwg bnVtYmVyICV1XG4iKSwgdG1wdTMyKTsKKyAgICAgIHJldHVybiAtMTsKKyAg ICB9CiAKICAgcmV0ID0gcmVjb3JkX2xpbnV4X3N5c3RlbV9jYWxsICh0bXB1 MzIsIHJlZ2NhY2hlLAogCQkJCSAgJmkzODZfbGludXhfcmVjb3JkX3RkZXAp OwpAQCAtNDgxLDYgKzQ4OCw4IEBAIGkzODZfbGludXhfaW5pdF9hYmkgKHN0 cnVjdCBnZGJhcmNoX2luZm8KICAgLyogSW5pdGlhbGl6ZSB0aGUgaTM4Nl9s aW51eF9yZWNvcmRfdGRlcC4gICovCiAgIC8qIFRoZXNlIHZhbHVlcyBhcmUg dGhlIHNpemUgb2YgdGhlIHR5cGUgdGhhdCB3aWxsIGJlIHVzZWQgaW4gYSBz eXN0ZW0KICAgICAgY2FsbC4gIFRoZXkgYXJlIG9idGFpbmVkIGZyb20gTGlu dXggS2VybmVsIHNvdXJjZS4gICovCisgIGkzODZfbGludXhfcmVjb3JkX3Rk ZXAuc2l6ZV9wb2ludGVyCisgICAgPSBnZGJhcmNoX3B0cl9iaXQgKGdkYmFy Y2gpIC8gVEFSR0VUX0NIQVJfQklUOwogICBpMzg2X2xpbnV4X3JlY29yZF90 ZGVwLnNpemVfX29sZF9rZXJuZWxfc3RhdCA9IDMyOwogICBpMzg2X2xpbnV4 X3JlY29yZF90ZGVwLnNpemVfdG1zID0gMTY7CiAgIGkzODZfbGludXhfcmVj b3JkX3RkZXAuc2l6ZV9sb2ZmX3QgPSA4OwpAQCAtNTAxLDkgKzUxMCwxMiBA QCBpMzg2X2xpbnV4X2luaXRfYWJpIChzdHJ1Y3QgZ2RiYXJjaF9pbmZvCiAg IGkzODZfbGludXhfcmVjb3JkX3RkZXAuc2l6ZV9zdGF0ZnMgPSA2NDsKICAg aTM4Nl9saW51eF9yZWNvcmRfdGRlcC5zaXplX3N0YXRmczY0ID0gODQ7CiAg IGkzODZfbGludXhfcmVjb3JkX3RkZXAuc2l6ZV9zb2NrYWRkciA9IDE2Owot ICBpMzg2X2xpbnV4X3JlY29yZF90ZGVwLnNpemVfaW50ID0gNDsKLSAgaTM4 Nl9saW51eF9yZWNvcmRfdGRlcC5zaXplX2xvbmcgPSA0OwotICBpMzg2X2xp bnV4X3JlY29yZF90ZGVwLnNpemVfdWxvbmcgPSA0OworICBpMzg2X2xpbnV4 X3JlY29yZF90ZGVwLnNpemVfaW50CisgICAgPSBnZGJhcmNoX2ludF9iaXQg KGdkYmFyY2gpIC8gVEFSR0VUX0NIQVJfQklUOworICBpMzg2X2xpbnV4X3Jl Y29yZF90ZGVwLnNpemVfbG9uZworICAgID0gZ2RiYXJjaF9sb25nX2JpdCAo Z2RiYXJjaCkgLyBUQVJHRVRfQ0hBUl9CSVQ7CisgIGkzODZfbGludXhfcmVj b3JkX3RkZXAuc2l6ZV91bG9uZworICAgID0gZ2RiYXJjaF9sb25nX2JpdCAo Z2RiYXJjaCkgLyBUQVJHRVRfQ0hBUl9CSVQ7CiAgIGkzODZfbGludXhfcmVj b3JkX3RkZXAuc2l6ZV9tc2doZHIgPSAyODsKICAgaTM4Nl9saW51eF9yZWNv cmRfdGRlcC5zaXplX2l0aW1lcnZhbCA9IDE2OwogICBpMzg2X2xpbnV4X3Jl Y29yZF90ZGVwLnNpemVfc3RhdCA9IDg4OwpAQCAtNTM2LDcgKzU0OCw4IEBA IGkzODZfbGludXhfaW5pdF9hYmkgKHN0cnVjdCBnZGJhcmNoX2luZm8KICAg aTM4Nl9saW51eF9yZWNvcmRfdGRlcC5zaXplX2lvX2V2ZW50ID0gMzI7CiAg IGkzODZfbGludXhfcmVjb3JkX3RkZXAuc2l6ZV9pb2NiID0gNjQ7CiAgIGkz ODZfbGludXhfcmVjb3JkX3RkZXAuc2l6ZV9lcG9sbF9ldmVudCA9IDEyOwot ICBpMzg2X2xpbnV4X3JlY29yZF90ZGVwLnNpemVfaXRpbWVyc3BlYyA9IGkz ODZfbGludXhfcmVjb3JkX3RkZXAuc2l6ZV90aW1lc3BlYyAqIDI7CisgIGkz ODZfbGludXhfcmVjb3JkX3RkZXAuc2l6ZV9pdGltZXJzcGVjCisgICAgPSBp Mzg2X2xpbnV4X3JlY29yZF90ZGVwLnNpemVfdGltZXNwZWMgKiAyOwogICBp Mzg2X2xpbnV4X3JlY29yZF90ZGVwLnNpemVfbXFfYXR0ciA9IDMyOwogICBp Mzg2X2xpbnV4X3JlY29yZF90ZGVwLnNpemVfc2lnaW5mbyA9IDEyODsKICAg aTM4Nl9saW51eF9yZWNvcmRfdGRlcC5zaXplX3Rlcm1pb3MgPSAzNjsKQEAg LTU0Niw2ICs1NTksOCBAQCBpMzg2X2xpbnV4X2luaXRfYWJpIChzdHJ1Y3Qg Z2RiYXJjaF9pbmZvCiAgIGkzODZfbGludXhfcmVjb3JkX3RkZXAuc2l6ZV9z ZXJpYWxfc3RydWN0ID0gNjA7CiAgIGkzODZfbGludXhfcmVjb3JkX3RkZXAu c2l6ZV9zZXJpYWxfaWNvdW50ZXJfc3RydWN0ID0gODA7CiAgIGkzODZfbGlu dXhfcmVjb3JkX3RkZXAuc2l6ZV9oYXllc19lc3BfY29uZmlnID0gMTI7Cisg IGkzODZfbGludXhfcmVjb3JkX3RkZXAuc2l6ZV9zaXplX3QgPSA0OworICBp Mzg2X2xpbnV4X3JlY29yZF90ZGVwLnNpemVfaW92ZWMgPSA4OwogCiAgIC8q IFRoZXNlIHZhbHVlcyBhcmUgdGhlIHNlY29uZCBhcmd1bWVudCBvZiBzeXN0 ZW0gY2FsbCAic3lzX2lvY3RsIi4KICAgICAgVGhleSBhcmUgb2J0YWluZWQg ZnJvbSBMaW51eCBLZXJuZWwgc291cmNlLiAgKi8KQEAgLTYyNyw2ICs2NDIs NyBAQCBpMzg2X2xpbnV4X2luaXRfYWJpIChzdHJ1Y3QgZ2RiYXJjaF9pbmZv CiAgIGkzODZfbGludXhfcmVjb3JkX3RkZXAuYXJnMyA9IEkzODZfRURYX1JF R05VTTsKICAgaTM4Nl9saW51eF9yZWNvcmRfdGRlcC5hcmc0ID0gSTM4Nl9F U0lfUkVHTlVNOwogICBpMzg2X2xpbnV4X3JlY29yZF90ZGVwLmFyZzUgPSBJ Mzg2X0VESV9SRUdOVU07CisgIGkzODZfbGludXhfcmVjb3JkX3RkZXAuYXJn NiA9IEkzODZfRUJQX1JFR05VTTsKIAogICB0ZGVwLT5pMzg2X2ludHg4MF9y ZWNvcmQgPSBpMzg2X2xpbnV4X2ludHg4MF9zeXNlbnRlcl9yZWNvcmQ7CiAg IHRkZXAtPmkzODZfc3lzZW50ZXJfcmVjb3JkID0gaTM4Nl9saW51eF9pbnR4 ODBfc3lzZW50ZXJfcmVjb3JkOwotLS0gYS9saW51eC1yZWNvcmQuYworKysg Yi9saW51eC1yZWNvcmQuYwpAQCAtMTksNiArMTksNyBAQAogCiAjaW5jbHVk ZSAiZGVmcy5oIgogI2luY2x1ZGUgInRhcmdldC5oIgorI2luY2x1ZGUgImdk YnR5cGVzLmgiCiAjaW5jbHVkZSAicmVnY2FjaGUuaCIKICNpbmNsdWRlICJy ZWNvcmQuaCIKICNpbmNsdWRlICJsaW51eC1yZWNvcmQuaCIKQEAgLTgwLDYg KzgxLDEzNCBAQAogI2RlZmluZSBSRUNPUkRfUV9YR0VUUVNUQVQJKCgnNScg PDwgOCkgKyA1KQogI2RlZmluZSBSRUNPUkRfUV9YR0VUUVVPVEEJKCgnMycg PDwgOCkgKyAzKQogCisjZGVmaW5lIE9VVFBVVF9SRUcodmFsLCBudW0pICAg ICAgcGhleF9ueiAoKHZhbCksIFwKKyAgICBUWVBFX0xFTkdUSCAoZ2RiYXJj aF9yZWdpc3Rlcl90eXBlIChnZXRfcmVnY2FjaGVfYXJjaCAocmVnY2FjaGUp LCAobnVtKSkpKQorCitzdGF0aWMgaW50CityZWNvcmRfbGludXhfc29ja2Fk ZHIgKHN0cnVjdCByZWdjYWNoZSAqcmVnY2FjaGUsCisgICAgICAgICAgICAg ICAgICAgICAgIHN0cnVjdCBsaW51eF9yZWNvcmRfdGRlcCAqdGRlcCwgVUxP TkdFU1QgYWRkciwKKyAgICAgICAgICAgICAgICAgICAgICAgVUxPTkdFU1Qg bGVuKQoreworICBnZGJfYnl0ZSAqYTsKKyAgaW50IGFkZHJsZW47CisgIHN0 cnVjdCBnZGJhcmNoICpnZGJhcmNoID0gZ2V0X3JlZ2NhY2hlX2FyY2ggKHJl Z2NhY2hlKTsKKyAgZW51bSBiZmRfZW5kaWFuIGJ5dGVfb3JkZXIgPSBnZGJh cmNoX2J5dGVfb3JkZXIgKGdkYmFyY2gpOworCisgIGlmICghYWRkcikKKyAg ICByZXR1cm4gMDsKKworICBhID0gYWxsb2NhICh0ZGVwLT5zaXplX2ludCk7 CisKKyAgaWYgKHJlY29yZF9hcmNoX2xpc3RfYWRkX21lbSAoKENPUkVfQURE UikgbGVuLCB0ZGVwLT5zaXplX2ludCkpCisgICAgcmV0dXJuIC0xOworCisg IC8qIEdldCB0aGUgYWRkcmxlbi4gICovCisgIGlmICh0YXJnZXRfcmVhZF9t ZW1vcnkgKChDT1JFX0FERFIpIGxlbiwgYSwgdGRlcC0+c2l6ZV9pbnQpKQor ICAgIHsKKyAgICAgIGlmIChyZWNvcmRfZGVidWcpCisgICAgICAgIGZwcmlu dGZfdW5maWx0ZXJlZCAoZ2RiX3N0ZGxvZywKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAiUHJvY2VzcyByZWNvcmQ6IGVycm9yIHJlYWRpbmcgIgor ICAgICAgICAgICAgICAgICAgICAgICAgICAgICJtZW1vcnkgYXQgYWRkciA9 IDB4JXMgbGVuID0gJWQuXG4iLAorICAgICAgICAgICAgICAgICAgICAgICAg ICAgIHBoZXhfbnogKGxlbiwgdGRlcC0+c2l6ZV9wb2ludGVyKSwKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICB0ZGVwLT5zaXplX2ludCk7CisgICAg ICAgIHJldHVybiAtMTsKKyAgICB9CisgIGFkZHJsZW4gPSAoaW50KSBleHRy YWN0X3Vuc2lnbmVkX2ludGVnZXIgKGEsIHRkZXAtPnNpemVfaW50LCBieXRl X29yZGVyKTsKKyAgaWYgKGFkZHJsZW4gPD0gMCB8fCBhZGRybGVuID4gdGRl cC0+c2l6ZV9zb2NrYWRkcikKKyAgICBhZGRybGVuID0gdGRlcC0+c2l6ZV9z b2NrYWRkcjsKKworICBpZiAocmVjb3JkX2FyY2hfbGlzdF9hZGRfbWVtICgo Q09SRV9BRERSKSBhZGRyLCBhZGRybGVuKSkKKyAgICByZXR1cm4gLTE7CisK KyAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQKK3JlY29yZF9saW51eF9t c2doZHIgKHN0cnVjdCByZWdjYWNoZSAqcmVnY2FjaGUsCisgICAgICAgICAg ICAgICAgICAgICBzdHJ1Y3QgbGludXhfcmVjb3JkX3RkZXAgKnRkZXAsIFVM T05HRVNUIGFkZHIpCit7CisgIGdkYl9ieXRlICphOworICBzdHJ1Y3QgZ2Ri YXJjaCAqZ2RiYXJjaCA9IGdldF9yZWdjYWNoZV9hcmNoIChyZWdjYWNoZSk7 CisgIGVudW0gYmZkX2VuZGlhbiBieXRlX29yZGVyID0gZ2RiYXJjaF9ieXRl X29yZGVyIChnZGJhcmNoKTsKKyAgQ09SRV9BRERSIHRtcGFkZHI7CisgIGlu dCB0bXBpbnQ7CisKKyAgaWYgKCFhZGRyKQorICAgIHJldHVybiAwOworCisg IGlmIChyZWNvcmRfYXJjaF9saXN0X2FkZF9tZW0gKChDT1JFX0FERFIpIGFk ZHIsIHRkZXAtPnNpemVfbXNnaGRyKSkKKyAgICByZXR1cm4gLTE7CisKKyAg YSA9IGFsbG9jYSAodGRlcC0+c2l6ZV9tc2doZHIpOworICBpZiAodGFyZ2V0 X3JlYWRfbWVtb3J5ICgoQ09SRV9BRERSKSBhZGRyLCBhLCB0ZGVwLT5zaXpl X21zZ2hkcikpCisgICAgeworICAgICAgaWYgKHJlY29yZF9kZWJ1ZykKKyAg ICAgICAgZnByaW50Zl91bmZpbHRlcmVkIChnZGJfc3RkbG9nLAorICAgICAg ICAgICAgICAgICAgICAgICAgICAgICJQcm9jZXNzIHJlY29yZDogZXJyb3Ig cmVhZGluZyAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm1lbW9y eSBhdCBhZGRyID0gMHglcyAiCisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgImxlbiA9ICVkLlxuIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICBwaGV4X256IChhZGRyLCB0ZGVwLT5zaXplX3BvaW50ZXIpLAorICAgICAg ICAgICAgICAgICAgICAgICAgICAgIHRkZXAtPnNpemVfbXNnaGRyKTsKKyAg ICAgICAgcmV0dXJuIC0xOworICAgIH0KKworICAvKiBtc2dfbmFtZSBtc2df bmFtZWxlbiAqLworICBhZGRyID0gZXh0cmFjdF91bnNpZ25lZF9pbnRlZ2Vy IChhLCB0ZGVwLT5zaXplX3BvaW50ZXIsIGJ5dGVfb3JkZXIpOworICBhICs9 IHRkZXAtPnNpemVfcG9pbnRlcjsKKyAgaWYgKHJlY29yZF9hcmNoX2xpc3Rf YWRkX21lbSAoKENPUkVfQUREUikgYWRkciwKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgKGludCkgZXh0cmFjdF91bnNpZ25lZF9pbnRlZ2Vy IChhLAorCQkJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGRl cC0+c2l6ZV9pbnQsCisJCQkJICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBieXRlX29yZGVyKSkpCisgICAgcmV0dXJuIC0xOworICBhICs9IHRk ZXAtPnNpemVfaW50OworCisgIC8qIG1zZ19pb3YgbXNnX2lvdmxlbiAqLwor ICBhZGRyID0gZXh0cmFjdF91bnNpZ25lZF9pbnRlZ2VyIChhLCB0ZGVwLT5z aXplX3BvaW50ZXIsIGJ5dGVfb3JkZXIpOworICBhICs9IHRkZXAtPnNpemVf cG9pbnRlcjsKKyAgaWYgKGFkZHIpCisgICAgeworICAgICAgVUxPTkdFU1Qg aTsKKyAgICAgIFVMT05HRVNUIGxlbiA9IGV4dHJhY3RfdW5zaWduZWRfaW50 ZWdlciAoYSwgdGRlcC0+c2l6ZV9zaXplX3QsCisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ5dGVfb3JkZXIpOwor ICAgICAgZ2RiX2J5dGUgKmlvdiA9IGFsbG9jYSAodGRlcC0+c2l6ZV9pb3Zl Yyk7CisKKyAgICAgIGZvciAoaSA9IDA7IGkgPCBsZW47IGkrKykKKyAgICAg ICAgeworICAgICAgICAgIGlmICh0YXJnZXRfcmVhZF9tZW1vcnkgKChDT1JF X0FERFIpIGFkZHIsIGlvdiwgdGRlcC0+c2l6ZV9pb3ZlYykpCisgICAgICAg ICAgICB7CisgICAgICAgICAgICAgIGlmIChyZWNvcmRfZGVidWcpCisgICAg ICAgICAgICAgICAgZnByaW50Zl91bmZpbHRlcmVkIChnZGJfc3RkbG9nLAor ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlByb2Nlc3Mg cmVjb3JkOiBlcnJvciAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAicmVhZGluZyBtZW1vcnkgYXQgIgorICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgImFkZHIgPSAweCVzICIKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICJsZW4gPSAlZC5cbiIsCisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwaGV4X256IChh ZGRyLHRkZXAtPnNpemVfcG9pbnRlciksCisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICB0ZGVwLT5zaXplX2lvdmVjKTsKKyAgICAgICAg ICAgICAgICByZXR1cm4gLTE7CisgICAgICAgICAgICB9CisgICAgICAgICAg dG1wYWRkciA9IChDT1JFX0FERFIpIGV4dHJhY3RfdW5zaWduZWRfaW50ZWdl ciAoaW92LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIHRkZXAtPnNpemVfcG9pbnRlciwKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBieXRlX29yZGVyKTsKKyAgICAgICAgICB0bXBpbnQgPSAo aW50KSBleHRyYWN0X3Vuc2lnbmVkX2ludGVnZXIgKGlvdiArIHRkZXAtPnNp emVfcG9pbnRlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIHRkZXAtPnNpemVfc2l6ZV90LAorICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg Ynl0ZV9vcmRlcik7CisgICAgICAgICAgaWYgKHJlY29yZF9hcmNoX2xpc3Rf YWRkX21lbSAodG1wYWRkciwgdG1waW50KSk7CisgICAgICAgICAgICByZXR1 cm4gLTE7CisgICAgICAgICAgYWRkciArPSB0ZGVwLT5zaXplX2lvdmVjOwor ICAgICAgICB9CisgICAgfQorICBhICs9IHRkZXAtPnNpemVfc2l6ZV90Owor CisgIC8qIG1zZ19jb250cm9sIG1zZ19jb250cm9sbGVuICovCisgIGFkZHIg PSBleHRyYWN0X3Vuc2lnbmVkX2ludGVnZXIgKGEsIHRkZXAtPnNpemVfcG9p bnRlciwgYnl0ZV9vcmRlcik7CisgIGEgKz0gdGRlcC0+c2l6ZV9wb2ludGVy OworICB0bXBpbnQgPSAoaW50KSBleHRyYWN0X3Vuc2lnbmVkX2ludGVnZXIg KGEsIHRkZXAtPnNpemVfc2l6ZV90LCBieXRlX29yZGVyKTsKKyAgaWYgKHJl Y29yZF9hcmNoX2xpc3RfYWRkX21lbSAoKENPUkVfQUREUikgYWRkciwgdG1w aW50KSk7CisgICAgcmV0dXJuIC0xOworCisgIHJldHVybiAwOworfQorCiAv KiBXaGVuIHRoZSBhcmNoaXRlY3R1cmUgcHJvY2VzcyByZWNvcmQgZ2V0IGEg TGludXggc3lzY2FsbAogICAgaW5zdHJ1Y3Rpb24sIGl0IHdpbGwgZ2V0IGEg TGludXggc3lzY2FsbCBudW1iZXIgb2YgdGhpcwogICAgYXJjaGl0ZWN0dXJl IGFuZCBjb252ZXJ0IGl0IHRvIHRoZSBMaW51eCBzeXNjYWxsIG51bWJlciAi bnVtIiB3aGljaApAQCAtOTQsMTAgKzIyMywxMyBAQAogCiBpbnQKIHJlY29y ZF9saW51eF9zeXN0ZW1fY2FsbCAoaW50IG51bSwgc3RydWN0IHJlZ2NhY2hl ICpyZWdjYWNoZSwKLQkJCSAgc3RydWN0IGxpbnV4X3JlY29yZF90ZGVwICp0 ZGVwKQorICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgbGludXhf cmVjb3JkX3RkZXAgKnRkZXApCiB7CiAgIHN0cnVjdCBnZGJhcmNoICpnZGJh cmNoID0gZ2V0X3JlZ2NhY2hlX2FyY2ggKHJlZ2NhY2hlKTsKLSAgdWludDMy X3QgdG1wdTMyOworICBlbnVtIGJmZF9lbmRpYW4gYnl0ZV9vcmRlciA9IGdk YmFyY2hfYnl0ZV9vcmRlciAoZ2RiYXJjaCk7CisgIFVMT05HRVNUIHRtcHVs b25nZXN0OworICBDT1JFX0FERFIgdG1wYWRkcjsKKyAgaW50IHRtcGludDsK IAogICBzd2l0Y2ggKG51bSkKICAgICB7CkBAIC0xMDgsMTUgKzI0MCwxNCBA QCByZWNvcmRfbGludXhfc3lzdGVtX2NhbGwgKGludCBudW0sIHN0cnVjCiAg ICAgICAvKiBzeXNfZXhpdCAqLwogICAgIGNhc2UgMToKICAgICAgIHsKLQlp bnQgcTsKLQl0YXJnZXRfdGVybWluYWxfb3VycyAoKTsKLQlxID0KLQkgIHlx dWVyeSAoXyAoIlRoZSBuZXh0IGluc3RydWN0aW9uIGlzIHN5c2NhbGwgZXhp dC4gICIKLQkJICAgICAiSXQgd2lsbCBtYWtlIHRoZSBwcm9ncmFtIGV4aXQu ICAiCi0JCSAgICAgIkRvIHlvdSB3YW50IHRvIHN0b3AgdGhlIHByb2dyYW0/ IikpOwotCXRhcmdldF90ZXJtaW5hbF9pbmZlcmlvciAoKTsKLQlpZiAocSkK LQkgIHJldHVybiAxOworICAgICAgICBpbnQgcTsKKyAgICAgICAgdGFyZ2V0 X3Rlcm1pbmFsX291cnMgKCk7CisgICAgICAgIHEgPSB5cXVlcnkgKF8oIlRo ZSBuZXh0IGluc3RydWN0aW9uIGlzIHN5c2NhbGwgZXhpdC4gICIKKyAgICAg ICAgICAgICAgICAgICAgICAiSXQgd2lsbCBtYWtlIHRoZSBwcm9ncmFtIGV4 aXQuICAiCisgICAgICAgICAgICAgICAgICAgICAgIkRvIHlvdSB3YW50IHRv IHN0b3AgdGhlIHByb2dyYW0/IikpOworICAgICAgICB0YXJnZXRfdGVybWlu YWxfaW5mZXJpb3IgKCk7CisgICAgICAgIGlmIChxKQorICAgICAgICAgIHJl dHVybiAxOwogICAgICAgfQogICAgICAgYnJlYWs7CiAKQEAgLTEyNywxMSAr MjU4LDExIEBAIHJlY29yZF9saW51eF9zeXN0ZW1fY2FsbCAoaW50IG51bSwg c3RydWMKICAgICAgIC8qIHN5c19yZWFkICovCiAgICAgY2FzZSAzOgogICAg ICAgewotCXVpbnQzMl90IGFkZHIsIGNvdW50OwotCXJlZ2NhY2hlX3Jhd19y ZWFkIChyZWdjYWNoZSwgdGRlcC0+YXJnMiwgKGdkYl9ieXRlICopICYgYWRk cik7Ci0JcmVnY2FjaGVfcmF3X3JlYWQgKHJlZ2NhY2hlLCB0ZGVwLT5hcmcz LCAoZ2RiX2J5dGUgKikgJiBjb3VudCk7Ci0JaWYgKHJlY29yZF9hcmNoX2xp c3RfYWRkX21lbSAoYWRkciwgY291bnQpKQotCSAgcmV0dXJuIC0xOworICAg ICAgICBVTE9OR0VTVCBhZGRyLCBjb3VudDsKKyAgICAgICAgcmVnY2FjaGVf cmF3X3JlYWRfdW5zaWduZWQgKHJlZ2NhY2hlLCB0ZGVwLT5hcmcyLCAmYWRk cik7CisgICAgICAgIHJlZ2NhY2hlX3Jhd19yZWFkX3Vuc2lnbmVkIChyZWdj YWNoZSwgdGRlcC0+YXJnMywgJmNvdW50KTsKKyAgICAgICAgaWYgKHJlY29y ZF9hcmNoX2xpc3RfYWRkX21lbSAoKENPUkVfQUREUikgYWRkciwgKGludCkg Y291bnQpKQorICAgICAgICAgIHJldHVybiAtMTsKICAgICAgIH0KICAgICAg IGJyZWFrOwogCkBAIC0xNzEsOSArMzAyLDEwIEBAIHJlY29yZF9saW51eF9z eXN0ZW1fY2FsbCAoaW50IG51bSwgc3RydWMKICAgICBjYXNlIDI4OgogICAg ICAgLyogc3lzX2xzdGF0ICovCiAgICAgY2FzZSA4NDoKLSAgICAgIHJlZ2Nh Y2hlX3Jhd19yZWFkIChyZWdjYWNoZSwgdGRlcC0+YXJnMiwgKGdkYl9ieXRl ICopICYgdG1wdTMyKTsKLSAgICAgIGlmIChyZWNvcmRfYXJjaF9saXN0X2Fk ZF9tZW0gKHRtcHUzMiwgdGRlcC0+c2l6ZV9fb2xkX2tlcm5lbF9zdGF0KSkK LQlyZXR1cm4gLTE7CisgICAgICByZWdjYWNoZV9yYXdfcmVhZF91bnNpZ25l ZCAocmVnY2FjaGUsIHRkZXAtPmFyZzIsICZ0bXB1bG9uZ2VzdCk7CisgICAg ICBpZiAocmVjb3JkX2FyY2hfbGlzdF9hZGRfbWVtICgoQ09SRV9BRERSKSB0 bXB1bG9uZ2VzdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIHRkZXAtPnNpemVfX29sZF9rZXJuZWxfc3RhdCkpCisgICAgICAgIHJl dHVybiAtMTsKICAgICAgIGJyZWFrOwogCiAgICAgICAvKiBzeXNfbHNlZWsg Ki8KQEAgLTE5NCwxNiArMzI2LDE2IEBAIHJlY29yZF9saW51eF9zeXN0ZW1f Y2FsbCAoaW50IG51bSwgc3RydWMKIAogICAgICAgLyogc3lzX3B0cmFjZSAq LwogICAgIGNhc2UgMjY6Ci0gICAgICByZWdjYWNoZV9yYXdfcmVhZCAocmVn Y2FjaGUsIHRkZXAtPmFyZzEsIChnZGJfYnl0ZSAqKSAmIHRtcHUzMik7Ci0g ICAgICBpZiAodG1wdTMyID09IFJFQ09SRF9QVFJBQ0VfUEVFS1RFWFQKLQkg IHx8IHRtcHUzMiA9PSBSRUNPUkRfUFRSQUNFX1BFRUtEQVRBCi0JICB8fCB0 bXB1MzIgPT0gUkVDT1JEX1BUUkFDRV9QRUVLVVNSKQotCXsKLQkgIHJlZ2Nh Y2hlX3Jhd19yZWFkIChyZWdjYWNoZSwgdGRlcC0+YXJnNCwKLQkJCSAgICAg KGdkYl9ieXRlICopICYgdG1wdTMyKTsKLQkgIGlmIChyZWNvcmRfYXJjaF9s aXN0X2FkZF9tZW0gKHRtcHUzMiwgNCkpCi0JICAgIHJldHVybiAtMTsKLQl9 CisgICAgICByZWdjYWNoZV9yYXdfcmVhZF91bnNpZ25lZCAocmVnY2FjaGUs IHRkZXAtPmFyZzEsICZ0bXB1bG9uZ2VzdCk7CisgICAgICBpZiAodG1wdWxv bmdlc3QgPT0gUkVDT1JEX1BUUkFDRV9QRUVLVEVYVAorICAgICAgICAgIHx8 IHRtcHVsb25nZXN0ID09IFJFQ09SRF9QVFJBQ0VfUEVFS0RBVEEKKyAgICAg ICAgICB8fCB0bXB1bG9uZ2VzdCA9PSBSRUNPUkRfUFRSQUNFX1BFRUtVU1Ip CisgICAgICAgIHsKKyAgICAgICAgICByZWdjYWNoZV9yYXdfcmVhZF91bnNp Z25lZCAocmVnY2FjaGUsIHRkZXAtPmFyZzQsCisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICZ0bXB1bG9uZ2VzdCk7CisgICAgICAg ICAgaWYgKHJlY29yZF9hcmNoX2xpc3RfYWRkX21lbSAoKENPUkVfQUREUikg dG1wdWxvbmdlc3QsIDQpKQorICAgICAgICAgICAgcmV0dXJuIC0xOworICAg ICAgICB9CiAgICAgICBicmVhazsKIAogICAgICAgLyogc3lzX2FsYXJtICov CkBAIC0yNDAsOSArMzcyLDkgQEAgcmVjb3JkX2xpbnV4X3N5c3RlbV9jYWxs IChpbnQgbnVtLCBzdHJ1YwogCiAgICAgICAvKiBzeXNfdGltZXMgKi8KICAg ICBjYXNlIDQzOgotICAgICAgcmVnY2FjaGVfcmF3X3JlYWQgKHJlZ2NhY2hl LCB0ZGVwLT5hcmcxLCAoZ2RiX2J5dGUgKikgJiB0bXB1MzIpOwotICAgICAg aWYgKHJlY29yZF9hcmNoX2xpc3RfYWRkX21lbSAodG1wdTMyLCB0ZGVwLT5z aXplX3RtcykpCi0JcmV0dXJuIC0xOworICAgICAgcmVnY2FjaGVfcmF3X3Jl YWRfdW5zaWduZWQgKHJlZ2NhY2hlLCB0ZGVwLT5hcmcxLCAmdG1wdWxvbmdl c3QpOworICAgICAgaWYgKHJlY29yZF9hcmNoX2xpc3RfYWRkX21lbSAoKENP UkVfQUREUikgdG1wdWxvbmdlc3QsIHRkZXAtPnNpemVfdG1zKSkKKyAgICAg ICAgcmV0dXJuIC0xOwogICAgICAgYnJlYWs7CiAKICAgICAgIC8qIHN5c19u aV9zeXNjYWxsICovCkBAIC0yNzAsMTQ5ICs0MDIsMTcyIEBAIHJlY29yZF9s aW51eF9zeXN0ZW1fY2FsbCAoaW50IG51bSwgc3RydWMKICAgICAgIC8qIHN5 c19pb2N0bCAqLwogICAgIGNhc2UgNTQ6CiAgICAgICAvKiBYWFggTmVlZCB0 byBhZGQgYSBsb3Qgb2Ygc3VwcG9ydCBvZiBvdGhlciBpb2N0bCByZXF1ZXN0 cy4gICovCi0gICAgICByZWdjYWNoZV9yYXdfcmVhZCAocmVnY2FjaGUsIHRk ZXAtPmFyZzIsIChnZGJfYnl0ZSAqKSAmIHRtcHUzMik7Ci0gICAgICBpZiAo dG1wdTMyID09IHRkZXAtPmlvY3RsX0ZJT0NMRVggfHwgdG1wdTMyID09IHRk ZXAtPmlvY3RsX0ZJT05DTEVYCi0JICB8fCB0bXB1MzIgPT0gdGRlcC0+aW9j dGxfRklPTkJJTyB8fCB0bXB1MzIgPT0gdGRlcC0+aW9jdGxfRklPQVNZTkMK LQkgIHx8IHRtcHUzMiA9PSB0ZGVwLT5pb2N0bF9UQ1NFVFMgfHwgdG1wdTMy ID09IHRkZXAtPmlvY3RsX1RDU0VUU1cKLQkgIHx8IHRtcHUzMiA9PSB0ZGVw LT5pb2N0bF9UQ1NFVFNGIHx8IHRtcHUzMiA9PSB0ZGVwLT5pb2N0bF9UQ1NF VEEKLQkgIHx8IHRtcHUzMiA9PSB0ZGVwLT5pb2N0bF9UQ1NFVEFXIHx8IHRt cHUzMiA9PSB0ZGVwLT5pb2N0bF9UQ1NFVEFGCi0JICB8fCB0bXB1MzIgPT0g dGRlcC0+aW9jdGxfVENTQlJLIHx8IHRtcHUzMiA9PSB0ZGVwLT5pb2N0bF9U Q1hPTkMKLQkgIHx8IHRtcHUzMiA9PSB0ZGVwLT5pb2N0bF9UQ0ZMU0ggfHwg dG1wdTMyID09IHRkZXAtPmlvY3RsX1RJT0NFWENMCi0JICB8fCB0bXB1MzIg PT0gdGRlcC0+aW9jdGxfVElPQ05YQ0wKLQkgIHx8IHRtcHUzMiA9PSB0ZGVw LT5pb2N0bF9USU9DU0NUVFkKLQkgIHx8IHRtcHUzMiA9PSB0ZGVwLT5pb2N0 bF9USU9DU1BHUlAgfHwgdG1wdTMyID09IHRkZXAtPmlvY3RsX1RJT0NTVEkK LQkgIHx8IHRtcHUzMiA9PSB0ZGVwLT5pb2N0bF9USU9DU1dJTlNaCi0JICB8 fCB0bXB1MzIgPT0gdGRlcC0+aW9jdGxfVElPQ01CSVMgfHwgdG1wdTMyID09 IHRkZXAtPmlvY3RsX1RJT0NNQklDCi0JICB8fCB0bXB1MzIgPT0gdGRlcC0+ aW9jdGxfVElPQ01TRVQKLQkgIHx8IHRtcHUzMiA9PSB0ZGVwLT5pb2N0bF9U SU9DU1NPRlRDQVIKLQkgIHx8IHRtcHUzMiA9PSB0ZGVwLT5pb2N0bF9USU9D Q09OUwotCSAgfHwgdG1wdTMyID09IHRkZXAtPmlvY3RsX1RJT0NTU0VSSUFM Ci0JICB8fCB0bXB1MzIgPT0gdGRlcC0+aW9jdGxfVElPQ1BLVCB8fCB0bXB1 MzIgPT0gdGRlcC0+aW9jdGxfVElPQ05PVFRZCi0JICB8fCB0bXB1MzIgPT0g dGRlcC0+aW9jdGxfVElPQ1NFVEQgfHwgdG1wdTMyID09IHRkZXAtPmlvY3Rs X1RDU0JSS1AKLQkgIHx8IHRtcHUzMiA9PSB0ZGVwLT5pb2N0bF9USU9DVFRZ R1NUUlVDVAotCSAgfHwgdG1wdTMyID09IHRkZXAtPmlvY3RsX1RJT0NTQlJL IHx8IHRtcHUzMiA9PSB0ZGVwLT5pb2N0bF9USU9DQ0JSSwotCSAgfHwgdG1w dTMyID09IHRkZXAtPmlvY3RsX1RDU0VUUzIgfHwgdG1wdTMyID09IHRkZXAt PmlvY3RsX1RDU0VUU1cyCi0JICB8fCB0bXB1MzIgPT0gdGRlcC0+aW9jdGxf VENTRVRTRjIKLQkgIHx8IHRtcHUzMiA9PSB0ZGVwLT5pb2N0bF9USU9DU1BU TENLCi0JICB8fCB0bXB1MzIgPT0gdGRlcC0+aW9jdGxfVElPQ1NFUkNPTkZJ RwotCSAgfHwgdG1wdTMyID09IHRkZXAtPmlvY3RsX1RJT0NTRVJHV0lMRAot CSAgfHwgdG1wdTMyID09IHRkZXAtPmlvY3RsX1RJT0NTRVJTV0lMRAotCSAg fHwgdG1wdTMyID09IHRkZXAtPmlvY3RsX1RJT0NTTENLVFJNSU9TCi0JICB8 fCB0bXB1MzIgPT0gdGRlcC0+aW9jdGxfVElPQ1NFUkdFVE1VTFRJCi0JICB8 fCB0bXB1MzIgPT0gdGRlcC0+aW9jdGxfVElPQ1NFUlNFVE1VTFRJCi0JICB8 fCB0bXB1MzIgPT0gdGRlcC0+aW9jdGxfVElPQ01JV0FJVAotCSAgfHwgdG1w dTMyID09IHRkZXAtPmlvY3RsX1RJT0NTSEFZRVNFU1ApCi0JewotCSAgLyog Tm90aGluZyB0byBkby4gICovCi0JfQotICAgICAgZWxzZSBpZiAodG1wdTMy ID09IHRkZXAtPmlvY3RsX1RDR0VUUyB8fCB0bXB1MzIgPT0gdGRlcC0+aW9j dGxfVENHRVRBCi0JICAgICAgIHx8IHRtcHUzMiA9PSB0ZGVwLT5pb2N0bF9U SU9DR0xDS1RSTUlPUykKLQl7Ci0JICByZWdjYWNoZV9yYXdfcmVhZCAocmVn Y2FjaGUsIHRkZXAtPmFyZzMsCi0JCQkgICAgIChnZGJfYnl0ZSAqKSAmIHRt cHUzMik7Ci0JICBpZiAocmVjb3JkX2FyY2hfbGlzdF9hZGRfbWVtICh0bXB1 MzIsIHRkZXAtPnNpemVfdGVybWlvcykpCi0JICAgIHJldHVybiAtMTsKLQl9 Ci0gICAgICBlbHNlIGlmICh0bXB1MzIgPT0gdGRlcC0+aW9jdGxfVElPQ0dQ R1JQCi0JICAgICAgIHx8IHRtcHUzMiA9PSB0ZGVwLT5pb2N0bF9USU9DR1NJ RCkKLQl7Ci0JICByZWdjYWNoZV9yYXdfcmVhZCAocmVnY2FjaGUsIHRkZXAt PmFyZzMsCi0JCQkgICAgIChnZGJfYnl0ZSAqKSAmIHRtcHUzMik7Ci0JICBp ZiAocmVjb3JkX2FyY2hfbGlzdF9hZGRfbWVtICh0bXB1MzIsIHRkZXAtPnNp emVfcGlkX3QpKQotCSAgICByZXR1cm4gLTE7Ci0JfQotICAgICAgZWxzZSBp ZiAodG1wdTMyID09IHRkZXAtPmlvY3RsX1RJT0NPVVRRCi0JICAgICAgIHx8 IHRtcHUzMiA9PSB0ZGVwLT5pb2N0bF9USU9DTUdFVAotCSAgICAgICB8fCB0 bXB1MzIgPT0gdGRlcC0+aW9jdGxfVElPQ0dTT0ZUQ0FSCi0JICAgICAgIHx8 IHRtcHUzMiA9PSB0ZGVwLT5pb2N0bF9GSU9OUkVBRAotCSAgICAgICB8fCB0 bXB1MzIgPT0gdGRlcC0+aW9jdGxfVElPQ0lOUQotCSAgICAgICB8fCB0bXB1 MzIgPT0gdGRlcC0+aW9jdGxfVElPQ0dFVEQKLQkgICAgICAgfHwgdG1wdTMy ID09IHRkZXAtPmlvY3RsX1RJT0NHUFROCi0JICAgICAgIHx8IHRtcHUzMiA9 PSB0ZGVwLT5pb2N0bF9USU9DU0VSR0VUTFNSKQotCXsKLQkgIHJlZ2NhY2hl X3Jhd19yZWFkIChyZWdjYWNoZSwgdGRlcC0+YXJnMywKLQkJCSAgICAgKGdk Yl9ieXRlICopICYgdG1wdTMyKTsKLQkgIGlmIChyZWNvcmRfYXJjaF9saXN0 X2FkZF9tZW0gKHRtcHUzMiwgdGRlcC0+c2l6ZV9pbnQpKQotCSAgICByZXR1 cm4gLTE7Ci0JfQotICAgICAgZWxzZSBpZiAodG1wdTMyID09IHRkZXAtPmlv Y3RsX1RJT0NHV0lOU1opCi0JewotCSAgcmVnY2FjaGVfcmF3X3JlYWQgKHJl Z2NhY2hlLCB0ZGVwLT5hcmczLAotCQkJICAgICAoZ2RiX2J5dGUgKikgJiB0 bXB1MzIpOwotCSAgaWYgKHJlY29yZF9hcmNoX2xpc3RfYWRkX21lbSAodG1w dTMyLCB0ZGVwLT5zaXplX3dpbnNpemUpKQotCSAgICByZXR1cm4gLTE7Ci0J fQotICAgICAgZWxzZSBpZiAodG1wdTMyID09IHRkZXAtPmlvY3RsX1RJT0NM SU5VWCkKLQl7Ci0JICByZWdjYWNoZV9yYXdfcmVhZCAocmVnY2FjaGUsIHRk ZXAtPmFyZzMsCi0JCQkgICAgIChnZGJfYnl0ZSAqKSAmIHRtcHUzMik7Cisg ICAgICByZWdjYWNoZV9yYXdfcmVhZF91bnNpZ25lZCAocmVnY2FjaGUsIHRk ZXAtPmFyZzIsICZ0bXB1bG9uZ2VzdCk7CisgICAgICBpZiAodG1wdWxvbmdl c3QgPT0gdGRlcC0+aW9jdGxfRklPQ0xFWAorICAgICAgICAgIHx8IHRtcHVs b25nZXN0ID09IHRkZXAtPmlvY3RsX0ZJT05DTEVYCisgICAgICAgICAgfHwg dG1wdWxvbmdlc3QgPT0gdGRlcC0+aW9jdGxfRklPTkJJTworICAgICAgICAg IHx8IHRtcHVsb25nZXN0ID09IHRkZXAtPmlvY3RsX0ZJT0FTWU5DCisgICAg ICAgICAgfHwgdG1wdWxvbmdlc3QgPT0gdGRlcC0+aW9jdGxfVENTRVRTCisg ICAgICAgICAgfHwgdG1wdWxvbmdlc3QgPT0gdGRlcC0+aW9jdGxfVENTRVRT VworICAgICAgICAgIHx8IHRtcHVsb25nZXN0ID09IHRkZXAtPmlvY3RsX1RD U0VUU0YKKyAgICAgICAgICB8fCB0bXB1bG9uZ2VzdCA9PSB0ZGVwLT5pb2N0 bF9UQ1NFVEEKKyAgICAgICAgICB8fCB0bXB1bG9uZ2VzdCA9PSB0ZGVwLT5p b2N0bF9UQ1NFVEFXCisgICAgICAgICAgfHwgdG1wdWxvbmdlc3QgPT0gdGRl cC0+aW9jdGxfVENTRVRBRgorICAgICAgICAgIHx8IHRtcHVsb25nZXN0ID09 IHRkZXAtPmlvY3RsX1RDU0JSSworICAgICAgICAgIHx8IHRtcHVsb25nZXN0 ID09IHRkZXAtPmlvY3RsX1RDWE9OQworICAgICAgICAgIHx8IHRtcHVsb25n ZXN0ID09IHRkZXAtPmlvY3RsX1RDRkxTSAorICAgICAgICAgIHx8IHRtcHVs b25nZXN0ID09IHRkZXAtPmlvY3RsX1RJT0NFWENMCisgICAgICAgICAgfHwg dG1wdWxvbmdlc3QgPT0gdGRlcC0+aW9jdGxfVElPQ05YQ0wKKyAgICAgICAg ICB8fCB0bXB1bG9uZ2VzdCA9PSB0ZGVwLT5pb2N0bF9USU9DU0NUVFkKKyAg ICAgICAgICB8fCB0bXB1bG9uZ2VzdCA9PSB0ZGVwLT5pb2N0bF9USU9DU1BH UlAKKyAgICAgICAgICB8fCB0bXB1bG9uZ2VzdCA9PSB0ZGVwLT5pb2N0bF9U SU9DU1RJCisgICAgICAgICAgfHwgdG1wdWxvbmdlc3QgPT0gdGRlcC0+aW9j dGxfVElPQ1NXSU5TWgorICAgICAgICAgIHx8IHRtcHVsb25nZXN0ID09IHRk ZXAtPmlvY3RsX1RJT0NNQklTCisgICAgICAgICAgfHwgdG1wdWxvbmdlc3Qg PT0gdGRlcC0+aW9jdGxfVElPQ01CSUMKKyAgICAgICAgICB8fCB0bXB1bG9u Z2VzdCA9PSB0ZGVwLT5pb2N0bF9USU9DTVNFVAorICAgICAgICAgIHx8IHRt cHVsb25nZXN0ID09IHRkZXAtPmlvY3RsX1RJT0NTU09GVENBUgorICAgICAg ICAgIHx8IHRtcHVsb25nZXN0ID09IHRkZXAtPmlvY3RsX1RJT0NDT05TCisg ICAgICAgICAgfHwgdG1wdWxvbmdlc3QgPT0gdGRlcC0+aW9jdGxfVElPQ1NT RVJJQUwKKyAgICAgICAgICB8fCB0bXB1bG9uZ2VzdCA9PSB0ZGVwLT5pb2N0 bF9USU9DUEtUCisgICAgICAgICAgfHwgdG1wdWxvbmdlc3QgPT0gdGRlcC0+ aW9jdGxfVElPQ05PVFRZCisgICAgICAgICAgfHwgdG1wdWxvbmdlc3QgPT0g dGRlcC0+aW9jdGxfVElPQ1NFVEQKKyAgICAgICAgICB8fCB0bXB1bG9uZ2Vz dCA9PSB0ZGVwLT5pb2N0bF9UQ1NCUktQCisgICAgICAgICAgfHwgdG1wdWxv bmdlc3QgPT0gdGRlcC0+aW9jdGxfVElPQ1RUWUdTVFJVQ1QKKyAgICAgICAg ICB8fCB0bXB1bG9uZ2VzdCA9PSB0ZGVwLT5pb2N0bF9USU9DU0JSSworICAg ICAgICAgIHx8IHRtcHVsb25nZXN0ID09IHRkZXAtPmlvY3RsX1RJT0NDQlJL CisgICAgICAgICAgfHwgdG1wdWxvbmdlc3QgPT0gdGRlcC0+aW9jdGxfVENT RVRTMgorICAgICAgICAgIHx8IHRtcHVsb25nZXN0ID09IHRkZXAtPmlvY3Rs X1RDU0VUU1cyCisgICAgICAgICAgfHwgdG1wdWxvbmdlc3QgPT0gdGRlcC0+ aW9jdGxfVENTRVRTRjIKKyAgICAgICAgICB8fCB0bXB1bG9uZ2VzdCA9PSB0 ZGVwLT5pb2N0bF9USU9DU1BUTENLCisgICAgICAgICAgfHwgdG1wdWxvbmdl c3QgPT0gdGRlcC0+aW9jdGxfVElPQ1NFUkNPTkZJRworICAgICAgICAgIHx8 IHRtcHVsb25nZXN0ID09IHRkZXAtPmlvY3RsX1RJT0NTRVJHV0lMRAorICAg ICAgICAgIHx8IHRtcHVsb25nZXN0ID09IHRkZXAtPmlvY3RsX1RJT0NTRVJT V0lMRAorICAgICAgICAgIHx8IHRtcHVsb25nZXN0ID09IHRkZXAtPmlvY3Rs X1RJT0NTTENLVFJNSU9TCisgICAgICAgICAgfHwgdG1wdWxvbmdlc3QgPT0g dGRlcC0+aW9jdGxfVElPQ1NFUkdFVE1VTFRJCisgICAgICAgICAgfHwgdG1w dWxvbmdlc3QgPT0gdGRlcC0+aW9jdGxfVElPQ1NFUlNFVE1VTFRJCisgICAg ICAgICAgfHwgdG1wdWxvbmdlc3QgPT0gdGRlcC0+aW9jdGxfVElPQ01JV0FJ VAorICAgICAgICAgIHx8IHRtcHVsb25nZXN0ID09IHRkZXAtPmlvY3RsX1RJ T0NTSEFZRVNFU1ApCisgICAgICAgIHsKKyAgICAgICAgICAvKiBOb3RoaW5n IHRvIGRvLiAgKi8KKyAgICAgICAgfQorICAgICAgZWxzZSBpZiAodG1wdWxv bmdlc3QgPT0gdGRlcC0+aW9jdGxfVENHRVRTCisgICAgICAgICAgICAgICB8 fCB0bXB1bG9uZ2VzdCA9PSB0ZGVwLT5pb2N0bF9UQ0dFVEEKKyAgICAgICAg ICAgICAgIHx8IHRtcHVsb25nZXN0ID09IHRkZXAtPmlvY3RsX1RJT0NHTENL VFJNSU9TKQorICAgICAgICB7CisgICAgICAgICAgcmVnY2FjaGVfcmF3X3Jl YWRfdW5zaWduZWQgKHJlZ2NhY2hlLCB0ZGVwLT5hcmczLAorICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmdG1wdWxvbmdlc3QpOwor ICAgICAgICAgIGlmIChyZWNvcmRfYXJjaF9saXN0X2FkZF9tZW0gKChDT1JF X0FERFIpIHRtcHVsb25nZXN0LAorICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIHRkZXAtPnNpemVfdGVybWlvcykpCisgICAgICAg ICAgICByZXR1cm4gLTE7CisgICAgICAgIH0KKyAgICAgIGVsc2UgaWYgKHRt cHVsb25nZXN0ID09IHRkZXAtPmlvY3RsX1RJT0NHUEdSUAorICAgICAgICAg ICAgICAgfHwgdG1wdWxvbmdlc3QgPT0gdGRlcC0+aW9jdGxfVElPQ0dTSUQp CisgICAgICAgIHsKKyAgICAgICAgICByZWdjYWNoZV9yYXdfcmVhZF91bnNp Z25lZCAocmVnY2FjaGUsIHRkZXAtPmFyZzMsCisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICZ0bXB1bG9uZ2VzdCk7CisgICAgICAg ICAgaWYgKHJlY29yZF9hcmNoX2xpc3RfYWRkX21lbSAoKENPUkVfQUREUikg dG1wdWxvbmdlc3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgdGRlcC0+c2l6ZV9waWRfdCkpCisgICAgICAgICAgICByZXR1 cm4gLTE7CisgICAgICAgIH0KKyAgICAgIGVsc2UgaWYgKHRtcHVsb25nZXN0 ID09IHRkZXAtPmlvY3RsX1RJT0NPVVRRCisgICAgICAgICAgICAgICB8fCB0 bXB1bG9uZ2VzdCA9PSB0ZGVwLT5pb2N0bF9USU9DTUdFVAorICAgICAgICAg ICAgICAgfHwgdG1wdWxvbmdlc3QgPT0gdGRlcC0+aW9jdGxfVElPQ0dTT0ZU Q0FSCisgICAgICAgICAgICAgICB8fCB0bXB1bG9uZ2VzdCA9PSB0ZGVwLT5p b2N0bF9GSU9OUkVBRAorICAgICAgICAgICAgICAgfHwgdG1wdWxvbmdlc3Qg PT0gdGRlcC0+aW9jdGxfVElPQ0lOUQorICAgICAgICAgICAgICAgfHwgdG1w dWxvbmdlc3QgPT0gdGRlcC0+aW9jdGxfVElPQ0dFVEQKKyAgICAgICAgICAg ICAgIHx8IHRtcHVsb25nZXN0ID09IHRkZXAtPmlvY3RsX1RJT0NHUFROCisg ICAgICAgICAgICAgICB8fCB0bXB1bG9uZ2VzdCA9PSB0ZGVwLT5pb2N0bF9U SU9DU0VSR0VUTFNSKQorICAgICAgICB7CisgICAgICAgICAgcmVnY2FjaGVf cmF3X3JlYWRfdW5zaWduZWQgKHJlZ2NhY2hlLCB0ZGVwLT5hcmczLAorICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmdG1wdWxvbmdl c3QpOworICAgICAgICAgIGlmIChyZWNvcmRfYXJjaF9saXN0X2FkZF9tZW0g KChDT1JFX0FERFIpIHRtcHVsb25nZXN0LAorICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIHRkZXAtPnNpemVfaW50KSkKKyAgICAg ICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgfQorICAgICAgZWxzZSBpZiAo dG1wdWxvbmdlc3QgPT0gdGRlcC0+aW9jdGxfVElPQ0dXSU5TWikKKyAgICAg ICAgeworICAgICAgICAgIHJlZ2NhY2hlX3Jhd19yZWFkX3Vuc2lnbmVkIChy ZWdjYWNoZSwgdGRlcC0+YXJnMywKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgJnRtcHVsb25nZXN0KTsKKyAgICAgICAgICBpZiAo cmVjb3JkX2FyY2hfbGlzdF9hZGRfbWVtICgoQ09SRV9BRERSKSB0bXB1bG9u Z2VzdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICB0ZGVwLT5zaXplX3dpbnNpemUpKQorICAgICAgICAgICAgcmV0dXJuIC0x OworICAgICAgICB9CisgICAgICBlbHNlIGlmICh0bXB1bG9uZ2VzdCA9PSB0 ZGVwLT5pb2N0bF9USU9DTElOVVgpCisgICAgICAgIHsKKyAgICAgICAgICBy ZWdjYWNoZV9yYXdfcmVhZF91bnNpZ25lZCAocmVnY2FjaGUsIHRkZXAtPmFy ZzMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZ0 bXB1bG9uZ2VzdCk7CiAgICAgICAgICAgLyogVGhpcyBzeXNjYWxsIGFmZmVj dCBhIGNoYXIgc2l6ZSBtZW1vcnkuICAqLwotCSAgaWYgKHJlY29yZF9hcmNo X2xpc3RfYWRkX21lbSAodG1wdTMyLCAxKSkKLQkgICAgcmV0dXJuIC0xOwot CX0KLSAgICAgIGVsc2UgaWYgKHRtcHUzMiA9PSB0ZGVwLT5pb2N0bF9USU9D R1NFUklBTCkKLQl7Ci0JICByZWdjYWNoZV9yYXdfcmVhZCAocmVnY2FjaGUs IHRkZXAtPmFyZzMsCi0JCQkgICAgIChnZGJfYnl0ZSAqKSAmIHRtcHUzMik7 Ci0JICBpZiAocmVjb3JkX2FyY2hfbGlzdF9hZGRfbWVtICh0bXB1MzIsIHRk ZXAtPnNpemVfc2VyaWFsX3N0cnVjdCkpCi0JICAgIHJldHVybiAtMTsKLQl9 Ci0gICAgICBlbHNlIGlmICh0bXB1MzIgPT0gdGRlcC0+aW9jdGxfVENHRVRT MikKLQl7Ci0JICByZWdjYWNoZV9yYXdfcmVhZCAocmVnY2FjaGUsIHRkZXAt PmFyZzMsCi0JCQkgICAgIChnZGJfYnl0ZSAqKSAmIHRtcHUzMik7Ci0JICBp ZiAocmVjb3JkX2FyY2hfbGlzdF9hZGRfbWVtICh0bXB1MzIsIHRkZXAtPnNp emVfdGVybWlvczIpKQotCSAgICByZXR1cm4gLTE7Ci0JfQotICAgICAgZWxz ZSBpZiAodG1wdTMyID09IHRkZXAtPmlvY3RsX0ZJT1FTSVpFKQotCXsKLQkg IHJlZ2NhY2hlX3Jhd19yZWFkIChyZWdjYWNoZSwgdGRlcC0+YXJnMywKLQkJ CSAgICAgKGdkYl9ieXRlICopICYgdG1wdTMyKTsKLQkgIGlmIChyZWNvcmRf YXJjaF9saXN0X2FkZF9tZW0gKHRtcHUzMiwgdGRlcC0+c2l6ZV9sb2ZmX3Qp KQotCSAgICByZXR1cm4gLTE7Ci0JfQotICAgICAgZWxzZSBpZiAodG1wdTMy ID09IHRkZXAtPmlvY3RsX1RJT0NHSUNPVU5UKQotCXsKLQkgIHJlZ2NhY2hl X3Jhd19yZWFkIChyZWdjYWNoZSwgdGRlcC0+YXJnMywKLQkJCSAgICAgKGdk Yl9ieXRlICopICYgdG1wdTMyKTsKLQkgIGlmIChyZWNvcmRfYXJjaF9saXN0 X2FkZF9tZW0KLQkgICAgICAodG1wdTMyLCB0ZGVwLT5zaXplX3NlcmlhbF9p Y291bnRlcl9zdHJ1Y3QpKQotCSAgICByZXR1cm4gLTE7Ci0JfQotICAgICAg ZWxzZSBpZiAodG1wdTMyID09IHRkZXAtPmlvY3RsX1RJT0NHSEFZRVNFU1Ap Ci0JewotCSAgcmVnY2FjaGVfcmF3X3JlYWQgKHJlZ2NhY2hlLCB0ZGVwLT5h cmczLAotCQkJICAgICAoZ2RiX2J5dGUgKikgJiB0bXB1MzIpOwotCSAgaWYg KHJlY29yZF9hcmNoX2xpc3RfYWRkX21lbSAodG1wdTMyLCB0ZGVwLT5zaXpl X2hheWVzX2VzcF9jb25maWcpKQotCSAgICByZXR1cm4gLTE7Ci0JfQotICAg ICAgZWxzZSBpZiAodG1wdTMyID09IHRkZXAtPmlvY3RsX1RJT0NTRVJHU1RS VUNUKQotCXsKLQkgIHByaW50Zl91bmZpbHRlcmVkIChfKCJQcm9jZXNzIHJl Y29yZCBhbmQgcmVwbGF5IHRhcmdldCBkb2Vzbid0ICIKLQkJCSAgICAgICAi c3VwcG9ydCBpb2N0bCByZXF1ZXN0IFRJT0NTRVJHU1RSVUNUXG4iKSk7Ci0J ICByZXR1cm4gMTsKLQl9CisgICAgICAgICAgaWYgKHJlY29yZF9hcmNoX2xp c3RfYWRkX21lbSAoKENPUkVfQUREUikgdG1wdWxvbmdlc3QsIDEpKQorICAg ICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICB9CisgICAgICBlbHNlIGlm ICh0bXB1bG9uZ2VzdCA9PSB0ZGVwLT5pb2N0bF9USU9DR1NFUklBTCkKKyAg ICAgICAgeworICAgICAgICAgIHJlZ2NhY2hlX3Jhd19yZWFkX3Vuc2lnbmVk IChyZWdjYWNoZSwgdGRlcC0+YXJnMywKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgJnRtcHVsb25nZXN0KTsKKyAgICAgICAgICBp ZiAocmVjb3JkX2FyY2hfbGlzdF9hZGRfbWVtICgoQ09SRV9BRERSKSB0bXB1 bG9uZ2VzdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICB0ZGVwLT5zaXplX3NlcmlhbF9zdHJ1Y3QpKQorICAgICAgICAgICAg cmV0dXJuIC0xOworICAgICAgICB9CisgICAgICBlbHNlIGlmICh0bXB1bG9u Z2VzdCA9PSB0ZGVwLT5pb2N0bF9UQ0dFVFMyKQorICAgICAgICB7CisgICAg ICAgICAgcmVnY2FjaGVfcmF3X3JlYWRfdW5zaWduZWQgKHJlZ2NhY2hlLCB0 ZGVwLT5hcmczLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAmdG1wdWxvbmdlc3QpOworICAgICAgICAgIGlmIChyZWNvcmRfYXJj aF9saXN0X2FkZF9tZW0gKChDT1JFX0FERFIpIHRtcHVsb25nZXN0LAorICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRkZXAtPnNp emVfdGVybWlvczIpKQorICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAg ICB9CisgICAgICBlbHNlIGlmICh0bXB1bG9uZ2VzdCA9PSB0ZGVwLT5pb2N0 bF9GSU9RU0laRSkKKyAgICAgICAgeworICAgICAgICAgIHJlZ2NhY2hlX3Jh d19yZWFkX3Vuc2lnbmVkIChyZWdjYWNoZSwgdGRlcC0+YXJnMywKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnRtcHVsb25nZXN0 KTsKKyAgICAgICAgICBpZiAocmVjb3JkX2FyY2hfbGlzdF9hZGRfbWVtICgo Q09SRV9BRERSKSB0bXB1bG9uZ2VzdCwKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICB0ZGVwLT5zaXplX2xvZmZfdCkpCisgICAg ICAgICAgICByZXR1cm4gLTE7CisgICAgICAgIH0KKyAgICAgIGVsc2UgaWYg KHRtcHVsb25nZXN0ID09IHRkZXAtPmlvY3RsX1RJT0NHSUNPVU5UKQorICAg ICAgICB7CisgICAgICAgICAgcmVnY2FjaGVfcmF3X3JlYWRfdW5zaWduZWQg KHJlZ2NhY2hlLCB0ZGVwLT5hcmczLAorICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAmdG1wdWxvbmdlc3QpOworICAgICAgICAgIGlm IChyZWNvcmRfYXJjaF9saXN0X2FkZF9tZW0gKChDT1JFX0FERFIpIHRtcHVs b25nZXN0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIHRkZXAtPnNpemVfc2VyaWFsX2ljb3VudGVyX3N0cnVjdCkpCisgICAg ICAgICAgICByZXR1cm4gLTE7CisgICAgICAgIH0KKyAgICAgIGVsc2UgaWYg KHRtcHVsb25nZXN0ID09IHRkZXAtPmlvY3RsX1RJT0NHSEFZRVNFU1ApCisg ICAgICAgIHsKKyAgICAgICAgICByZWdjYWNoZV9yYXdfcmVhZF91bnNpZ25l ZCAocmVnY2FjaGUsIHRkZXAtPmFyZzMsCisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICZ0bXB1bG9uZ2VzdCk7CisgICAgICAgICAg aWYgKHJlY29yZF9hcmNoX2xpc3RfYWRkX21lbSAoKENPUkVfQUREUikgdG1w dWxvbmdlc3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgdGRlcC0+c2l6ZV9oYXllc19lc3BfY29uZmlnKSkKKyAgICAgICAg ICAgIHJldHVybiAtMTsKKyAgICAgICAgfQorICAgICAgZWxzZSBpZiAodG1w dWxvbmdlc3QgPT0gdGRlcC0+aW9jdGxfVElPQ1NFUkdTVFJVQ1QpCisgICAg ICAgIHsKKyAgICAgICAgICBwcmludGZfdW5maWx0ZXJlZCAoXygiUHJvY2Vz cyByZWNvcmQgYW5kIHJlcGxheSB0YXJnZXQgZG9lc24ndCAiCisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgInN1cHBvcnQgaW9jdGwgcmVxdWVz dCBUSU9DU0VSR1NUUlVDVFxuIikpOworICAgICAgICAgIHJldHVybiAxOwor ICAgICAgICB9CiAgICAgICBlbHNlCi0JewotCSAgcHJpbnRmX3VuZmlsdGVy ZWQgKF8oIlByb2Nlc3MgcmVjb3JkIGFuZCByZXBsYXkgdGFyZ2V0IGRvZXNu J3QgIgotCQkJICAgICAgICJzdXBwb3J0IGlvY3RsIHJlcXVlc3QgMHglcy5c biIpLAotCQkJICAgICBwaGV4X256ICh0bXB1MzIsIDQpKTsKLQkgIHJldHVy biAxOwotCX0KKyAgICAgICAgeworICAgICAgICAgIHByaW50Zl91bmZpbHRl cmVkIChfKCJQcm9jZXNzIHJlY29yZCBhbmQgcmVwbGF5IHRhcmdldCBkb2Vz bid0ICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAic3VwcG9y dCBpb2N0bCByZXF1ZXN0IDB4JXMuXG4iKSwKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgT1VUUFVUX1JFRyAodG1wdWxvbmdlc3QsIHRkZXAtPmFy ZzIpKTsKKyAgICAgICAgICByZXR1cm4gMTsKKyAgICAgICAgfQogICAgICAg YnJlYWs7CiAKICAgICAgIC8qIHN5c19mY250bCAqLwogICAgIGNhc2UgNTU6 CiAgICAgICAvKiBYWFggKi8KLSAgICAgIHJlZ2NhY2hlX3Jhd19yZWFkIChy ZWdjYWNoZSwgdGRlcC0+YXJnMiwgKGdkYl9ieXRlICopICYgdG1wdTMyKTsK KyAgICAgIHJlZ2NhY2hlX3Jhd19yZWFkX3Vuc2lnbmVkIChyZWdjYWNoZSwg dGRlcC0+YXJnMiwgJnRtcHVsb25nZXN0KTsKICAgICBzeXNfZmNudGw6Ci0g ICAgICBpZiAodG1wdTMyID09IHRkZXAtPmZjbnRsX0ZfR0VUTEspCi0Jewot CSAgcmVnY2FjaGVfcmF3X3JlYWQgKHJlZ2NhY2hlLCB0ZGVwLT5hcmczLAot CQkJICAgICAoZ2RiX2J5dGUgKikgJiB0bXB1MzIpOwotCSAgaWYgKHJlY29y ZF9hcmNoX2xpc3RfYWRkX21lbSAodG1wdTMyLCB0ZGVwLT5zaXplX2Zsb2Nr KSkKLQkgICAgcmV0dXJuIC0xOwotCX0KKyAgICAgIGlmICh0bXB1bG9uZ2Vz dCA9PSB0ZGVwLT5mY250bF9GX0dFVExLKQorICAgICAgICB7CisgICAgICAg ICAgcmVnY2FjaGVfcmF3X3JlYWRfdW5zaWduZWQgKHJlZ2NhY2hlLCB0ZGVw LT5hcmczLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAmdG1wdWxvbmdlc3QpOworICAgICAgICAgIGlmIChyZWNvcmRfYXJjaF9s aXN0X2FkZF9tZW0gKChDT1JFX0FERFIpIHRtcHVsb25nZXN0LAorICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRkZXAtPnNpemVf ZmxvY2spKQorICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICB9CiAg ICAgICBicmVhazsKIAogICAgICAgLyogc3lzX25pX3N5c2NhbGwgKi8KQEAg LTQyNSw5ICs1ODAsMTAgQEAgcmVjb3JkX2xpbnV4X3N5c3RlbV9jYWxsIChp bnQgbnVtLCBzdHJ1YwogCiAgICAgICAvKiBzeXNfb2xkdW5hbWUgKi8KICAg ICBjYXNlIDU5OgotICAgICAgcmVnY2FjaGVfcmF3X3JlYWQgKHJlZ2NhY2hl LCB0ZGVwLT5hcmcxLCAoZ2RiX2J5dGUgKikgJiB0bXB1MzIpOwotICAgICAg aWYgKHJlY29yZF9hcmNoX2xpc3RfYWRkX21lbSAodG1wdTMyLCB0ZGVwLT5z aXplX29sZG9sZF91dHNuYW1lKSkKLQlyZXR1cm4gLTE7CisgICAgICByZWdj YWNoZV9yYXdfcmVhZF91bnNpZ25lZCAocmVnY2FjaGUsIHRkZXAtPmFyZzEs ICZ0bXB1bG9uZ2VzdCk7CisgICAgICBpZiAocmVjb3JkX2FyY2hfbGlzdF9h ZGRfbWVtICgoQ09SRV9BRERSKSB0bXB1bG9uZ2VzdCwKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIHRkZXAtPnNpemVfb2xkb2xkX3V0 c25hbWUpKQorICAgICAgICByZXR1cm4gLTE7CiAgICAgICBicmVhazsKIAog ICAgICAgLyogc3lzX3VtYXNrICovCkBAIC00MzgsOSArNTk0LDEwIEBAIHJl Y29yZF9saW51eF9zeXN0ZW1fY2FsbCAoaW50IG51bSwgc3RydWMKIAogICAg ICAgLyogc3lzX3VzdGF0ICovCiAgICAgY2FzZSA2MjoKLSAgICAgIHJlZ2Nh Y2hlX3Jhd19yZWFkIChyZWdjYWNoZSwgdGRlcC0+YXJnMiwgKGdkYl9ieXRl ICopICYgdG1wdTMyKTsKLSAgICAgIGlmIChyZWNvcmRfYXJjaF9saXN0X2Fk ZF9tZW0gKHRtcHUzMiwgdGRlcC0+c2l6ZV91c3RhdCkpCi0JcmV0dXJuIC0x OworICAgICAgcmVnY2FjaGVfcmF3X3JlYWRfdW5zaWduZWQgKHJlZ2NhY2hl LCB0ZGVwLT5hcmcyLCAmdG1wdWxvbmdlc3QpOworICAgICAgaWYgKHJlY29y ZF9hcmNoX2xpc3RfYWRkX21lbSAoKENPUkVfQUREUikgdG1wdWxvbmdlc3Qs CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZGVwLT5z aXplX3VzdGF0KSkKKyAgICAgICAgcmV0dXJuIC0xOwogICAgICAgYnJlYWs7 CiAKICAgICAgIC8qIHN5c19kdXAyICovCkBAIC00NTUsOSArNjEyLDEwIEBA IHJlY29yZF9saW51eF9zeXN0ZW1fY2FsbCAoaW50IG51bSwgc3RydWMKIAog ICAgICAgLyogc3lzX3NpZ2FjdGlvbiAqLwogICAgIGNhc2UgNjc6Ci0gICAg ICByZWdjYWNoZV9yYXdfcmVhZCAocmVnY2FjaGUsIHRkZXAtPmFyZzMsIChn ZGJfYnl0ZSAqKSAmIHRtcHUzMik7Ci0gICAgICBpZiAocmVjb3JkX2FyY2hf bGlzdF9hZGRfbWVtICh0bXB1MzIsIHRkZXAtPnNpemVfb2xkX3NpZ2FjdGlv bikpCi0JcmV0dXJuIC0xOworICAgICAgcmVnY2FjaGVfcmF3X3JlYWRfdW5z aWduZWQgKHJlZ2NhY2hlLCB0ZGVwLT5hcmczLCAmdG1wdWxvbmdlc3QpOwor ICAgICAgaWYgKHJlY29yZF9hcmNoX2xpc3RfYWRkX21lbSAoKENPUkVfQURE UikgdG1wdWxvbmdlc3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICB0ZGVwLT5zaXplX29sZF9zaWdhY3Rpb24pKQorICAgICAgICBy ZXR1cm4gLTE7CiAgICAgICBicmVhazsKIAogICAgICAgLyogc3lzX3NnZXRt YXNrICovCkBAIC00NzQsOSArNjMyLDEwIEBAIHJlY29yZF9saW51eF9zeXN0 ZW1fY2FsbCAoaW50IG51bSwgc3RydWMKIAogICAgICAgLyogc3lzX3NpZ3Bl bmRpbmcgKi8KICAgICBjYXNlIDczOgotICAgICAgcmVnY2FjaGVfcmF3X3Jl YWQgKHJlZ2NhY2hlLCB0ZGVwLT5hcmcxLCAoZ2RiX2J5dGUgKikgJiB0bXB1 MzIpOwotICAgICAgaWYgKHJlY29yZF9hcmNoX2xpc3RfYWRkX21lbSAodG1w dTMyLCB0ZGVwLT5zaXplX29sZF9zaWdzZXRfdCkpCi0JcmV0dXJuIC0xOwor ICAgICAgcmVnY2FjaGVfcmF3X3JlYWRfdW5zaWduZWQgKHJlZ2NhY2hlLCB0 ZGVwLT5hcmcxLCAmdG1wdWxvbmdlc3QpOworICAgICAgaWYgKHJlY29yZF9h cmNoX2xpc3RfYWRkX21lbSAoKENPUkVfQUREUikgdG1wdWxvbmdlc3QsCisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZGVwLT5zaXpl X29sZF9zaWdzZXRfdCkpCisgICAgICAgIHJldHVybiAtMTsKICAgICAgIGJy ZWFrOwogCiAgICAgICAvKiBzeXNfc2V0aG9zdG5hbWUgKi8KQEAgLTQ4Nywy NiArNjQ2LDMwIEBAIHJlY29yZF9saW51eF9zeXN0ZW1fY2FsbCAoaW50IG51 bSwgc3RydWMKIAogICAgICAgLyogc3lzX29sZF9nZXRybGltaXQgKi8KICAg ICBjYXNlIDc2OgotICAgICAgcmVnY2FjaGVfcmF3X3JlYWQgKHJlZ2NhY2hl LCB0ZGVwLT5hcmcyLCAoZ2RiX2J5dGUgKikgJiB0bXB1MzIpOwotICAgICAg aWYgKHJlY29yZF9hcmNoX2xpc3RfYWRkX21lbSAodG1wdTMyLCB0ZGVwLT5z aXplX3JsaW1pdCkpCi0JcmV0dXJuIC0xOworICAgICAgcmVnY2FjaGVfcmF3 X3JlYWRfdW5zaWduZWQgKHJlZ2NhY2hlLCB0ZGVwLT5hcmcyLCAmdG1wdWxv bmdlc3QpOworICAgICAgaWYgKHJlY29yZF9hcmNoX2xpc3RfYWRkX21lbSAo KENPUkVfQUREUikgdG1wdWxvbmdlc3QsCisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICB0ZGVwLT5zaXplX3JsaW1pdCkpCisgICAgICAg IHJldHVybiAtMTsKICAgICAgIGJyZWFrOwogCiAgICAgICAvKiBzeXNfZ2V0 cnVzYWdlICovCiAgICAgY2FzZSA3NzoKLSAgICAgIHJlZ2NhY2hlX3Jhd19y ZWFkIChyZWdjYWNoZSwgdGRlcC0+YXJnMiwgKGdkYl9ieXRlICopICYgdG1w dTMyKTsKLSAgICAgIGlmIChyZWNvcmRfYXJjaF9saXN0X2FkZF9tZW0gKHRt cHUzMiwgdGRlcC0+c2l6ZV9ydXNhZ2UpKQotCXJldHVybiAtMTsKKyAgICAg IHJlZ2NhY2hlX3Jhd19yZWFkX3Vuc2lnbmVkIChyZWdjYWNoZSwgdGRlcC0+ YXJnMiwgJnRtcHVsb25nZXN0KTsKKyAgICAgIGlmIChyZWNvcmRfYXJjaF9s aXN0X2FkZF9tZW0gKChDT1JFX0FERFIpIHRtcHVsb25nZXN0LAorICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGRlcC0+c2l6ZV9ydXNh Z2UpKQorICAgICAgICByZXR1cm4gLTE7CiAgICAgICBicmVhazsKIAogICAg ICAgLyogc3lzX2dldHRpbWVvZmRheSAqLwogICAgIGNhc2UgNzg6Ci0gICAg ICByZWdjYWNoZV9yYXdfcmVhZCAocmVnY2FjaGUsIHRkZXAtPmFyZzEsIChn ZGJfYnl0ZSAqKSAmIHRtcHUzMik7Ci0gICAgICBpZiAocmVjb3JkX2FyY2hf bGlzdF9hZGRfbWVtICh0bXB1MzIsIHRkZXAtPnNpemVfdGltZXZhbCkpCi0J cmV0dXJuIC0xOwotICAgICAgcmVnY2FjaGVfcmF3X3JlYWQgKHJlZ2NhY2hl LCB0ZGVwLT5hcmcyLCAoZ2RiX2J5dGUgKikgJiB0bXB1MzIpOwotICAgICAg aWYgKHJlY29yZF9hcmNoX2xpc3RfYWRkX21lbSAodG1wdTMyLCB0ZGVwLT5z aXplX3RpbWV6b25lKSkKLQlyZXR1cm4gLTE7CisgICAgICByZWdjYWNoZV9y YXdfcmVhZF91bnNpZ25lZCAocmVnY2FjaGUsIHRkZXAtPmFyZzEsICZ0bXB1 bG9uZ2VzdCk7CisgICAgICBpZiAocmVjb3JkX2FyY2hfbGlzdF9hZGRfbWVt ICgoQ09SRV9BRERSKSB0bXB1bG9uZ2VzdCwKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIHRkZXAtPnNpemVfdGltZXZhbCkpCisgICAg ICAgIHJldHVybiAtMTsKKyAgICAgIHJlZ2NhY2hlX3Jhd19yZWFkX3Vuc2ln bmVkIChyZWdjYWNoZSwgdGRlcC0+YXJnMiwgJnRtcHVsb25nZXN0KTsKKyAg ICAgIGlmIChyZWNvcmRfYXJjaF9saXN0X2FkZF9tZW0gKChDT1JFX0FERFIp IHRtcHVsb25nZXN0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgdGRlcC0+c2l6ZV90aW1lem9uZSkpCisgICAgICAgIHJldHVybiAt MTsKICAgICAgIGJyZWFrOwogCiAgICAgICAvKiBzeXNfc2V0dGltZW9mZGF5 ICovCkBAIC01MTUsNTMgKzY3OCw1NiBAQCByZWNvcmRfbGludXhfc3lzdGVt X2NhbGwgKGludCBudW0sIHN0cnVjCiAKICAgICAgIC8qIHN5c19nZXRncm91 cHMxNiAqLwogICAgIGNhc2UgODA6Ci0gICAgICByZWdjYWNoZV9yYXdfcmVh ZCAocmVnY2FjaGUsIHRkZXAtPmFyZzIsIChnZGJfYnl0ZSAqKSAmIHRtcHUz Mik7Ci0gICAgICBpZiAocmVjb3JkX2FyY2hfbGlzdF9hZGRfbWVtICh0bXB1 MzIsIHRkZXAtPnNpemVfb2xkX2dpZF90KSkKLQlyZXR1cm4gLTE7CisgICAg ICByZWdjYWNoZV9yYXdfcmVhZF91bnNpZ25lZCAocmVnY2FjaGUsIHRkZXAt PmFyZzIsICZ0bXB1bG9uZ2VzdCk7CisgICAgICBpZiAocmVjb3JkX2FyY2hf bGlzdF9hZGRfbWVtICgoQ09SRV9BRERSKSB0bXB1bG9uZ2VzdCwKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRkZXAtPnNpemVfb2xk X2dpZF90KSkKKyAgICAgICAgcmV0dXJuIC0xOwogICAgICAgYnJlYWs7CiAK ICAgICAgIC8qIHN5c19zZXRncm91cHMxNiAqLwogICAgIGNhc2UgODE6Ci0g ICAgICByZWdjYWNoZV9yYXdfcmVhZCAocmVnY2FjaGUsIHRkZXAtPmFyZzIs IChnZGJfYnl0ZSAqKSAmIHRtcHUzMik7Ci0gICAgICBpZiAocmVjb3JkX2Fy Y2hfbGlzdF9hZGRfbWVtICh0bXB1MzIsIHRkZXAtPnNpemVfb2xkX2dpZF90 KSkKLQlyZXR1cm4gLTE7CisgICAgICByZWdjYWNoZV9yYXdfcmVhZF91bnNp Z25lZCAocmVnY2FjaGUsIHRkZXAtPmFyZzIsICZ0bXB1bG9uZ2VzdCk7Cisg ICAgICBpZiAocmVjb3JkX2FyY2hfbGlzdF9hZGRfbWVtICgoQ09SRV9BRERS KSB0bXB1bG9uZ2VzdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIHRkZXAtPnNpemVfb2xkX2dpZF90KSkKKyAgICAgICAgcmV0dXJu IC0xOwogICAgICAgYnJlYWs7CiAKICAgICAgIC8qIG9sZF9zZWxlY3QgKi8K ICAgICBjYXNlIDgyOgogICAgICAgewotCXN0cnVjdCBzZWxfYXJnX3N0cnVj dAotCXsKLQkgIENPUkVfQUREUiBuOwotCSAgQ09SRV9BRERSIGlucDsKLQkg IENPUkVfQUREUiBvdXRwOwotCSAgQ09SRV9BRERSIGV4cDsKLQkgIENPUkVf QUREUiB0dnA7Ci0JfSBzZWw7CisgICAgICAgIHN0cnVjdCBzZWxfYXJnX3N0 cnVjdAorICAgICAgICB7CisgICAgICAgICAgQ09SRV9BRERSIG47CisgICAg ICAgICAgQ09SRV9BRERSIGlucDsKKyAgICAgICAgICBDT1JFX0FERFIgb3V0 cDsKKyAgICAgICAgICBDT1JFX0FERFIgZXhwOworICAgICAgICAgIENPUkVf QUREUiB0dnA7CisgICAgICAgIH0gc2VsOwogCi0JcmVnY2FjaGVfcmF3X3Jl YWQgKHJlZ2NhY2hlLCB0ZGVwLT5hcmcxLAotCQkJICAgKGdkYl9ieXRlICop ICYgdG1wdTMyKTsKLQlpZiAodG1wdTMyKQotCSAgewotCSAgICBpZiAodGFy Z2V0X3JlYWRfbWVtb3J5ICh0bXB1MzIsIChnZGJfYnl0ZSAqKSAmIHNlbCwg c2l6ZW9mIChzZWwpKSkKLQkgICAgICB7Ci0JCWlmIChyZWNvcmRfZGVidWcp Ci0JCSAgZnByaW50Zl91bmZpbHRlcmVkIChnZGJfc3RkbG9nLAotCQkJCSAg ICAgICJQcm9jZXNzIHJlY29yZDogZXJyb3IgcmVhZGluZyBtZW1vcnkgIgot CQkJCSAgICAgICJhdCBhZGRyID0gJXMgbGVuID0gJWx1LlxuIiwKLQkJCQkg ICAgICBwYWRkcmVzcyAoZ2RiYXJjaCwgdG1wdTMyKSwKLQkJCQkgICAgICAo dW5zaWduZWQgbG9uZylzaXplb2YgKHNlbCkpOwotCQlyZXR1cm4gLTE7Ci0J ICAgICAgfQotCSAgICBpZiAocmVjb3JkX2FyY2hfbGlzdF9hZGRfbWVtIChz ZWwuaW5wLCB0ZGVwLT5zaXplX2ZkX3NldCkpCi0JICAgICAgcmV0dXJuIC0x OwotCSAgICBpZiAocmVjb3JkX2FyY2hfbGlzdF9hZGRfbWVtIChzZWwub3V0 cCwgdGRlcC0+c2l6ZV9mZF9zZXQpKQotCSAgICAgIHJldHVybiAtMTsKLQkg ICAgaWYgKHJlY29yZF9hcmNoX2xpc3RfYWRkX21lbSAoc2VsLmV4cCwgdGRl cC0+c2l6ZV9mZF9zZXQpKQotCSAgICAgIHJldHVybiAtMTsKLQkgICAgaWYg KHJlY29yZF9hcmNoX2xpc3RfYWRkX21lbSAoc2VsLnR2cCwgdGRlcC0+c2l6 ZV90aW1ldmFsKSkKLQkgICAgICByZXR1cm4gLTE7Ci0JICB9CisgICAgICAg IHJlZ2NhY2hlX3Jhd19yZWFkX3Vuc2lnbmVkIChyZWdjYWNoZSwgdGRlcC0+ YXJnMSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZ0 bXB1bG9uZ2VzdCk7CisgICAgICAgIGlmICh0bXB1bG9uZ2VzdCkKKyAgICAg ICAgICB7CisgICAgICAgICAgICBpZiAodGFyZ2V0X3JlYWRfbWVtb3J5ICh0 bXB1bG9uZ2VzdCwgKGdkYl9ieXRlICopICZzZWwsCisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBzaXplb2Yoc2VsKSkpCisgICAgICAg ICAgICAgIHsKKyAgICAgICAgICAgICAgICBpZiAocmVjb3JkX2RlYnVnKQor ICAgICAgICAgICAgICAgICAgZnByaW50Zl91bmZpbHRlcmVkIChnZGJfc3Rk bG9nLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAi UHJvY2VzcyByZWNvcmQ6IGVycm9yIHJlYWRpbmcgbWVtb3J5ICIKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImF0IGFkZHIgPSAw eCVzIGxlbiA9ICVsdS5cbiIsCisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIE9VVFBVVF9SRUcgKHRtcHVsb25nZXN0LCB0ZGVwLT5h cmcxKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg KHVuc2lnbmVkIGxvbmcpIHNpemVvZiAoc2VsKSk7CisgICAgICAgICAgICAg ICAgcmV0dXJuIC0xOworICAgICAgICAgICAgICB9CisgICAgICAgICAgICBp ZiAocmVjb3JkX2FyY2hfbGlzdF9hZGRfbWVtIChzZWwuaW5wLCB0ZGVwLT5z aXplX2ZkX3NldCkpCisgICAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAg ICAgICAgIGlmIChyZWNvcmRfYXJjaF9saXN0X2FkZF9tZW0gKHNlbC5vdXRw LCB0ZGVwLT5zaXplX2ZkX3NldCkpCisgICAgICAgICAgICAgIHJldHVybiAt MTsKKyAgICAgICAgICAgIGlmIChyZWNvcmRfYXJjaF9saXN0X2FkZF9tZW0g KHNlbC5leHAsIHRkZXAtPnNpemVfZmRfc2V0KSkKKyAgICAgICAgICAgICAg cmV0dXJuIC0xOworICAgICAgICAgICAgaWYgKHJlY29yZF9hcmNoX2xpc3Rf YWRkX21lbSAoc2VsLnR2cCwgdGRlcC0+c2l6ZV90aW1ldmFsKSkKKyAgICAg ICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICAgIH0KICAgICAgIH0KICAg ICAgIGJyZWFrOwogCkBAIC01NzIsMTIgKzczOCwxMiBAQCByZWNvcmRfbGlu dXhfc3lzdGVtX2NhbGwgKGludCBudW0sIHN0cnVjCiAgICAgICAvKiBzeXNf cmVhZGxpbmsgKi8KICAgICBjYXNlIDg1OgogICAgICAgewotCXVpbnQzMl90 IGxlbjsKLQlyZWdjYWNoZV9yYXdfcmVhZCAocmVnY2FjaGUsIHRkZXAtPmFy ZzIsCi0JCQkgICAoZ2RiX2J5dGUgKikgJiB0bXB1MzIpOwotCXJlZ2NhY2hl X3Jhd19yZWFkIChyZWdjYWNoZSwgdGRlcC0+YXJnMywgKGdkYl9ieXRlICop ICYgbGVuKTsKLQlpZiAocmVjb3JkX2FyY2hfbGlzdF9hZGRfbWVtICh0bXB1 MzIsIGxlbikpCi0JICByZXR1cm4gLTE7CisgICAgICAgIFVMT05HRVNUIGxl bjsKKyAgICAgICAgcmVnY2FjaGVfcmF3X3JlYWRfdW5zaWduZWQgKHJlZ2Nh Y2hlLCB0ZGVwLT5hcmcyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgJnRtcHVsb25nZXN0KTsKKyAgICAgICAgcmVnY2FjaGVfcmF3 X3JlYWRfdW5zaWduZWQgKHJlZ2NhY2hlLCB0ZGVwLT5hcmczLCAmbGVuKTsK KyAgICAgICAgaWYgKHJlY29yZF9hcmNoX2xpc3RfYWRkX21lbSAoKENPUkVf QUREUikgdG1wdWxvbmdlc3QsIChpbnQpIGxlbikpCisgICAgICAgICAgcmV0 dXJuIC0xOwogICAgICAgfQogICAgICAgYnJlYWs7CiAKQEAgLTU5MCwyMyAr NzU2LDI0IEBAIHJlY29yZF9saW51eF9zeXN0ZW1fY2FsbCAoaW50IG51bSwg c3RydWMKICAgICAgIC8qIHN5c19yZWJvb3QgKi8KICAgICBjYXNlIDg4Ogog ICAgICAgewotCWludCBxOwotCXRhcmdldF90ZXJtaW5hbF9vdXJzICgpOwot CXEgPQotCSAgeXF1ZXJ5IChfKCJUaGUgbmV4dCBpbnN0cnVjdGlvbiBpcyBz eXNjYWxsIHJlYm9vdC4gICIKLQkJICAgICJJdCB3aWxsIHJlc3RhcnQgdGhl IGNvbXB1dGVyLiAgIgotCQkgICAgIkRvIHlvdSB3YW50IHRvIHN0b3AgdGhl IHByb2dyYW0/IikpOwotCXRhcmdldF90ZXJtaW5hbF9pbmZlcmlvciAoKTsK LQlpZiAocSkKLQkgIHJldHVybiAxOworICAgICAgICBpbnQgcTsKKyAgICAg ICAgdGFyZ2V0X3Rlcm1pbmFsX291cnMgKCk7CisgICAgICAgIHEgPQorICAg ICAgICAgIHlxdWVyeSAoXygiVGhlIG5leHQgaW5zdHJ1Y3Rpb24gaXMgc3lz Y2FsbCByZWJvb3QuICAiCisgICAgICAgICAgICAgICAgICAgICJJdCB3aWxs IHJlc3RhcnQgdGhlIGNvbXB1dGVyLiAgIgorICAgICAgICAgICAgICAgICAg ICAiRG8geW91IHdhbnQgdG8gc3RvcCB0aGUgcHJvZ3JhbT8iKSk7CisgICAg ICAgIHRhcmdldF90ZXJtaW5hbF9pbmZlcmlvciAoKTsKKyAgICAgICAgaWYg KHEpCisgICAgICAgICAgcmV0dXJuIDE7CiAgICAgICB9CiAgICAgICBicmVh azsKIAogICAgICAgLyogb2xkX3JlYWRkaXIgKi8KICAgICBjYXNlIDg5Ogot ICAgICAgcmVnY2FjaGVfcmF3X3JlYWQgKHJlZ2NhY2hlLCB0ZGVwLT5hcmcy LCAoZ2RiX2J5dGUgKikgJiB0bXB1MzIpOwotICAgICAgaWYgKHJlY29yZF9h cmNoX2xpc3RfYWRkX21lbSAodG1wdTMyLCB0ZGVwLT5zaXplX2RpcmVudCkp Ci0JcmV0dXJuIC0xOworICAgICAgcmVnY2FjaGVfcmF3X3JlYWRfdW5zaWdu ZWQgKHJlZ2NhY2hlLCB0ZGVwLT5hcmcyLCAmdG1wdWxvbmdlc3QpOworICAg ICAgaWYgKHJlY29yZF9hcmNoX2xpc3RfYWRkX21lbSAoKENPUkVfQUREUikg dG1wdWxvbmdlc3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICB0ZGVwLT5zaXplX2RpcmVudCkpCisgICAgICAgIHJldHVybiAtMTsK ICAgICAgIGJyZWFrOwogCiAgICAgICAvKiBvbGRfbW1hcCAqLwpAQCAtNjE2 LDIyICs3ODMsMjEgQEAgcmVjb3JkX2xpbnV4X3N5c3RlbV9jYWxsIChpbnQg bnVtLCBzdHJ1YwogICAgICAgLyogc3lzX211bm1hcCAqLwogICAgIGNhc2Ug OTE6CiAgICAgICB7Ci0JaW50IHE7Ci0JdWludDMyX3QgbGVuOworICAgICAg ICBpbnQgcTsKKyAgICAgICAgVUxPTkdFU1QgbGVuOwogCi0JcmVnY2FjaGVf cmF3X3JlYWQgKHJlZ2NhY2hlLCB0ZGVwLT5hcmcxLAotCQkJICAgKGdkYl9i eXRlICopICYgdG1wdTMyKTsKLQlyZWdjYWNoZV9yYXdfcmVhZCAocmVnY2Fj aGUsIHRkZXAtPmFyZzIsIChnZGJfYnl0ZSAqKSAmIGxlbik7Ci0JdGFyZ2V0 X3Rlcm1pbmFsX291cnMgKCk7Ci0JcSA9Ci0JICB5cXVlcnkgKF8oIlRoZSBu ZXh0IGluc3RydWN0aW9uIGlzIHN5c2NhbGwgbXVubWFwLiAgIgotCQkgICAg Ikl0IHdpbGwgZnJlZSB0aGUgbWVtb3J5IGFkZHIgPSAlcyBsZW4gPSAldS4g ICIKLQkJICAgICJJdCB3aWxsIG1ha2UgcmVjb3JkIHRhcmdldCBnZXQgZXJy b3IuICAiCi0JCSAgICAiRG8geW91IHdhbnQgdG8gc3RvcCB0aGUgcHJvZ3Jh bT8iKSwKLQkJICBwYWRkcmVzcyAoZ2RiYXJjaCwgdG1wdTMyKSwgKGludCls ZW4pOwotCXRhcmdldF90ZXJtaW5hbF9pbmZlcmlvciAoKTsKLQlpZiAocSkK LQkgIHJldHVybiAxOworICAgICAgICByZWdjYWNoZV9yYXdfcmVhZF91bnNp Z25lZCAocmVnY2FjaGUsIHRkZXAtPmFyZzEsCisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAmdG1wdWxvbmdlc3QpOworICAgICAgICBy ZWdjYWNoZV9yYXdfcmVhZF91bnNpZ25lZCAocmVnY2FjaGUsIHRkZXAtPmFy ZzIsICZsZW4pOworICAgICAgICB0YXJnZXRfdGVybWluYWxfb3VycyAoKTsK KyAgICAgICAgcSA9IHlxdWVyeSAoXygiVGhlIG5leHQgaW5zdHJ1Y3Rpb24g aXMgc3lzY2FsbCBtdW5tYXAuICAiCisgICAgICAgICAgICAgICAgICAgICAg Ikl0IHdpbGwgZnJlZSB0aGUgbWVtb3J5IGFkZHIgPSAweCVzIGxlbiA9ICV1 LiAgIgorICAgICAgICAgICAgICAgICAgICAgICJJdCB3aWxsIG1ha2UgcmVj b3JkIHRhcmdldCBnZXQgZXJyb3IuICAiCisgICAgICAgICAgICAgICAgICAg ICAgIkRvIHlvdSB3YW50IHRvIHN0b3AgdGhlIHByb2dyYW0/IiksCisgICAg ICAgICAgICAgICAgICAgIE9VVFBVVF9SRUcgKHRtcHVsb25nZXN0LCB0ZGVw LT5hcmcxKSwgKGludCkgbGVuKTsKKyAgICAgICAgdGFyZ2V0X3Rlcm1pbmFs X2luZmVyaW9yICgpOworICAgICAgICBpZiAocSkKKyAgICAgICAgICByZXR1 cm4gMTsKICAgICAgIH0KICAgICAgIGJyZWFrOwogCkBAIC02NTUsMjkyICs4 MjEsMzQ5IEBAIHJlY29yZF9saW51eF9zeXN0ZW1fY2FsbCAoaW50IG51bSwg c3RydWMKICAgICBjYXNlIDk5OgogICAgICAgLyogc3lzX2ZzdGF0ZnMgKi8K ICAgICBjYXNlIDEwMDoKLSAgICAgIHJlZ2NhY2hlX3Jhd19yZWFkIChyZWdj YWNoZSwgdGRlcC0+YXJnMiwgKGdkYl9ieXRlICopICYgdG1wdTMyKTsKLSAg ICAgIGlmIChyZWNvcmRfYXJjaF9saXN0X2FkZF9tZW0gKHRtcHUzMiwgdGRl cC0+c2l6ZV9zdGF0ZnMpKQotCXJldHVybiAtMTsKKyAgICAgIHJlZ2NhY2hl X3Jhd19yZWFkX3Vuc2lnbmVkIChyZWdjYWNoZSwgdGRlcC0+YXJnMiwgJnRt cHVsb25nZXN0KTsKKyAgICAgIGlmIChyZWNvcmRfYXJjaF9saXN0X2FkZF9t ZW0gKChDT1JFX0FERFIpIHRtcHVsb25nZXN0LAorICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgdGRlcC0+c2l6ZV9zdGF0ZnMpKQorICAg ICAgICByZXR1cm4gLTE7CiAgICAgICBicmVhazsKIAogICAgICAgLyogc3lz X2lvcGVybSAqLwogICAgIGNhc2UgMTAxOgogICAgICAgYnJlYWs7CiAKKyAg ICAgIC8qIHN5c19zb2NrZXQgKi8KKyAgICBjYXNlIDUwMDoKKyAgICAgIC8q IHN5c19zZW5kdG8gKi8KKyAgICBjYXNlIDUwMzoKKyAgICAgIC8qIHN5c19z ZW5kbXNnICovCisgICAgY2FzZSA1MDU6CisgICAgICAvKiBzeXNfc2h1dGRv d24gKi8KKyAgICBjYXNlIDUwNzoKKyAgICAgIC8qIHN5c19iaW5kICovCisg ICAgY2FzZSA1MDg6CisgICAgICAvKiBzeXNfY29ubmVjdCAqLworICAgIGNh c2UgNTAxOgorICAgICAgLyogc3lzX2xpc3RlbiAqLworICAgIGNhc2UgNTA5 OgorICAgICAgLyogc3lzX3NldHNvY2tvcHQgKi8KKyAgICBjYXNlIDUxMzoK KyAgICAgIGJyZWFrOworCisgICAgICAvKiBzeXNfYWNjZXB0ICovCisgICAg Y2FzZSA1MDI6CisgICAgICAvKiBzeXNfZ2V0c29ja25hbWUgKi8KKyAgICBj YXNlIDUxMDoKKyAgICAgIC8qIHN5c19nZXRwZWVybmFtZSAqLworICAgIGNh c2UgNTExOgorICAgICAgeworICAgICAgICBVTE9OR0VTVCBsZW47CisgICAg ICAgIHJlZ2NhY2hlX3Jhd19yZWFkX3Vuc2lnbmVkIChyZWdjYWNoZSwgdGRl cC0+YXJnMiwgJnRtcHVsb25nZXN0KTsKKyAgICAgICAgcmVnY2FjaGVfcmF3 X3JlYWRfdW5zaWduZWQgKHJlZ2NhY2hlLCB0ZGVwLT5hcmczLCAmbGVuKTsK KyAgICAgICAgaWYgKHJlY29yZF9saW51eF9zb2NrYWRkciAocmVnY2FjaGUs IHRkZXAsIHRtcHVsb25nZXN0LCBsZW4pKQorICAgICAgICAgIHJldHVybiAt MTsKKyAgICAgIH0KKyAgICAgIGJyZWFrOworCisgICAgICAvKiBzeXNfcmVj dmZyb20gKi8KKyAgICBjYXNlIDUwNDoKKyAgICAgIHsKKyAgICAgICAgVUxP TkdFU1QgbGVuOworICAgICAgICByZWdjYWNoZV9yYXdfcmVhZF91bnNpZ25l ZCAocmVnY2FjaGUsIHRkZXAtPmFyZzQsICZ0bXB1bG9uZ2VzdCk7CisgICAg ICAgIHJlZ2NhY2hlX3Jhd19yZWFkX3Vuc2lnbmVkIChyZWdjYWNoZSwgdGRl cC0+YXJnNSwgJmxlbik7CisgICAgICAgIGlmIChyZWNvcmRfbGludXhfc29j a2FkZHIgKHJlZ2NhY2hlLCB0ZGVwLCB0bXB1bG9uZ2VzdCwgbGVuKSkKKyAg ICAgICAgICByZXR1cm4gLTE7CisgICAgICB9CisgICAgICAvKiBzeXNfcmVj diAqLworICAgIGNhc2UgNTE1OgorICAgICAgeworICAgICAgICBVTE9OR0VT VCBzaXplOworICAgICAgICByZWdjYWNoZV9yYXdfcmVhZF91bnNpZ25lZCAo cmVnY2FjaGUsIHRkZXAtPmFyZzIsICZ0bXB1bG9uZ2VzdCk7CisgICAgICAg IHJlZ2NhY2hlX3Jhd19yZWFkX3Vuc2lnbmVkIChyZWdjYWNoZSwgdGRlcC0+ YXJnMywgJnNpemUpOworICAgICAgICBpZiAocmVjb3JkX2FyY2hfbGlzdF9h ZGRfbWVtICgoQ09SRV9BRERSKSB0bXB1bG9uZ2VzdCwgKGludCkgc2l6ZSkp CisgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgfQorICAgICAgYnJlYWs7 CisKKyAgICAgIC8qIHN5c19yZWN2bXNnICovCisgICAgY2FzZSA1MDY6Cisg ICAgICByZWdjYWNoZV9yYXdfcmVhZF91bnNpZ25lZCAocmVnY2FjaGUsIHRk ZXAtPmFyZzIsICZ0bXB1bG9uZ2VzdCk7CisgICAgICBpZiAocmVjb3JkX2xp bnV4X21zZ2hkciAocmVnY2FjaGUsIHRkZXAsIHRtcHVsb25nZXN0KSkKKyAg ICAgICAgcmV0dXJuIC0xOworICAgICAgYnJlYWs7CisKKyAgICAgIC8qIHN5 c19zb2NrZXRwYWlyICovCisgICAgY2FzZSA1MTI6CisgICAgICByZWdjYWNo ZV9yYXdfcmVhZF91bnNpZ25lZCAocmVnY2FjaGUsIHRkZXAtPmFyZzQsICZ0 bXB1bG9uZ2VzdCk7CisgICAgICBpZiAocmVjb3JkX2FyY2hfbGlzdF9hZGRf bWVtICgoQ09SRV9BRERSKSB0bXB1bG9uZ2VzdCwgdGRlcC0+c2l6ZV9pbnQp KQorICAgICAgICByZXR1cm4gLTE7CisgICAgICBicmVhazsKKworICAgICAg Lyogc3lzX2dldHNvY2tvcHQgKi8KKyAgICBjYXNlIDUxNDoKKyAgICAgIHJl Z2NhY2hlX3Jhd19yZWFkX3Vuc2lnbmVkIChyZWdjYWNoZSwgdGRlcC0+YXJn NSwgJnRtcHVsb25nZXN0KTsKKyAgICAgIGlmICh0bXB1bG9uZ2VzdCkKKyAg ICAgICAgeworICAgICAgICAgIFVMT05HRVNUIG9wdHZhbHA7CisgICAgICAg ICAgZ2RiX2J5dGUgKm9wdGxlbnAgPSBhbGxvY2EgKHRkZXAtPnNpemVfaW50 KTsKKyAgICAgICAgICBpZiAodGFyZ2V0X3JlYWRfbWVtb3J5ICgoQ09SRV9B RERSKSB0bXB1bG9uZ2VzdCwgb3B0bGVucCwKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICB0ZGVwLT5zaXplX2ludCkpCisgICAgICAgICAg ICB7CisgICAgICAgICAgICAgIGlmIChyZWNvcmRfZGVidWcpCisgICAgICAg ICAgICAgICAgZnByaW50Zl91bmZpbHRlcmVkIChnZGJfc3RkbG9nLAorICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlByb2Nlc3MgcmVj b3JkOiBlcnJvciByZWFkaW5nICIKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICJtZW1vcnkgYXQgYWRkciA9IDB4JXMgIgorICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImxlbiA9ICVkLlxuIiwK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9VVFBVVF9S RUcgKHRtcHVsb25nZXN0LCB0ZGVwLT5hcmc1KSwKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIHRkZXAtPnNpemVfaW50KTsKKyAgICAg ICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICAgICAgfQorICAgICAgICAg IHJlZ2NhY2hlX3Jhd19yZWFkX3Vuc2lnbmVkIChyZWdjYWNoZSwgdGRlcC0+ YXJnNCwgJm9wdHZhbHApOworICAgICAgICAgIHRtcGludCA9IChpbnQpIGV4 dHJhY3Rfc2lnbmVkX2ludGVnZXIgKG9wdGxlbnAsIHRkZXAtPnNpemVfaW50 LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIGJ5dGVfb3JkZXIpOworICAgICAgICAgIGlmIChyZWNvcmRfYXJj aF9saXN0X2FkZF9tZW0gKChDT1JFX0FERFIpIG9wdHZhbHAsIHRtcGludCkp CisgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgICAgaWYgKHJlY29y ZF9hcmNoX2xpc3RfYWRkX21lbSAoKENPUkVfQUREUikgdG1wdWxvbmdlc3Qs CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGRl cC0+c2l6ZV9pbnQpKQorICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAg ICB9CisgICAgICBicmVhazsKKwogICAgICAgLyogc3lzX3NvY2tldGNhbGwg Ki8KICAgICBjYXNlIDEwMjoKLSAgICAgIHJlZ2NhY2hlX3Jhd19yZWFkIChy ZWdjYWNoZSwgdGRlcC0+YXJnMSwgKGdkYl9ieXRlICopICYgdG1wdTMyKTsK LSAgICAgIHN3aXRjaCAodG1wdTMyKQotCXsKLQljYXNlIFJFQ09SRF9TWVNf U09DS0VUOgotCWNhc2UgUkVDT1JEX1NZU19CSU5EOgotCWNhc2UgUkVDT1JE X1NZU19DT05ORUNUOgotCWNhc2UgUkVDT1JEX1NZU19MSVNURU46Ci0JICBi cmVhazsKLQljYXNlIFJFQ09SRF9TWVNfQUNDRVBUOgotCWNhc2UgUkVDT1JE X1NZU19HRVRTT0NLTkFNRToKLQljYXNlIFJFQ09SRF9TWVNfR0VUUEVFUk5B TUU6Ci0JICB7Ci0JICAgIHVpbnQzMl90IGFbM107Ci0JICAgIHJlZ2NhY2hl X3Jhd19yZWFkIChyZWdjYWNoZSwgdGRlcC0+YXJnMiwKLQkJCSAgICAgICAo Z2RiX2J5dGUgKikgJiB0bXB1MzIpOwotCSAgICBpZiAodG1wdTMyKQotCSAg ICAgIHsKLQkJaWYgKHRhcmdldF9yZWFkX21lbW9yeSAodG1wdTMyLCAoZ2Ri X2J5dGUgKikgYSwgc2l6ZW9mIChhKSkpCi0JCSAgewotCQkgICAgaWYgKHJl Y29yZF9kZWJ1ZykKLQkJICAgICAgZnByaW50Zl91bmZpbHRlcmVkIChnZGJf c3RkbG9nLAotCQkJCQkgICJQcm9jZXNzIHJlY29yZDogZXJyb3IgcmVhZGlu ZyAiCi0JCQkJCSAgIm1lbW9yeSBhdCBhZGRyID0gJXMgbGVuID0gJWx1Llxu IiwKLQkJCQkJICBwYWRkcmVzcyAoZ2RiYXJjaCwgdG1wdTMyKSwKLQkJCQkJ ICAodW5zaWduZWQgbG9uZylzaXplb2YgKGEpKTsKLQkJICAgIHJldHVybiAt MTsKLQkJICB9Ci0JCWlmIChyZWNvcmRfYXJjaF9saXN0X2FkZF9tZW0gKGFb MV0sIHRkZXAtPnNpemVfc29ja2FkZHIpKQotCQkgIHJldHVybiAtMTsKLQkJ aWYgKHJlY29yZF9hcmNoX2xpc3RfYWRkX21lbSAoYVsyXSwgdGRlcC0+c2l6 ZV9pbnQpKQotCQkgIHJldHVybiAtMTsKLQkgICAgICB9Ci0JICB9Ci0JICBi cmVhazsKKyAgICAgIHJlZ2NhY2hlX3Jhd19yZWFkX3Vuc2lnbmVkIChyZWdj YWNoZSwgdGRlcC0+YXJnMSwgJnRtcHVsb25nZXN0KTsKKyAgICAgIHN3aXRj aCAodG1wdWxvbmdlc3QpCisgICAgICAgIHsKKyAgICAgICAgY2FzZSBSRUNP UkRfU1lTX1NPQ0tFVDoKKyAgICAgICAgY2FzZSBSRUNPUkRfU1lTX0JJTkQ6 CisgICAgICAgIGNhc2UgUkVDT1JEX1NZU19DT05ORUNUOgorICAgICAgICBj YXNlIFJFQ09SRF9TWVNfTElTVEVOOgorICAgICAgICAgIGJyZWFrOworICAg ICAgICBjYXNlIFJFQ09SRF9TWVNfQUNDRVBUOgorICAgICAgICBjYXNlIFJF Q09SRF9TWVNfR0VUU09DS05BTUU6CisgICAgICAgIGNhc2UgUkVDT1JEX1NZ U19HRVRQRUVSTkFNRToKKyAgICAgICAgICB7CisgICAgICAgICAgICByZWdj YWNoZV9yYXdfcmVhZF91bnNpZ25lZCAocmVnY2FjaGUsIHRkZXAtPmFyZzIs CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnRt cHVsb25nZXN0KTsKKyAgICAgICAgICAgIGlmICh0bXB1bG9uZ2VzdCkKKyAg ICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGdkYl9ieXRlICphID0g YWxsb2NhICh0ZGVwLT5zaXplX3Vsb25nICogMik7CisgICAgICAgICAgICAg ICAgaW50IGFkZHJsZW47CisgICAgICAgICAgICAgICAgZ2RiX2J5dGUgKmFk ZHJsZW5wOwogCi0JY2FzZSBSRUNPUkRfU1lTX1NPQ0tFVFBBSVI6Ci0JICB7 Ci0JICAgIHVpbnQzMl90IGFbNF07Ci0JICAgIHJlZ2NhY2hlX3Jhd19yZWFk IChyZWdjYWNoZSwgdGRlcC0+YXJnMiwKLQkJCSAgICAgICAoZ2RiX2J5dGUg KikgJiB0bXB1MzIpOwotCSAgICBpZiAodG1wdTMyKQotCSAgICAgIHsKLQkJ aWYgKHRhcmdldF9yZWFkX21lbW9yeSAodG1wdTMyLCAoZ2RiX2J5dGUgKikg YSwgc2l6ZW9mIChhKSkpCi0JCSAgewotCQkgICAgaWYgKHJlY29yZF9kZWJ1 ZykKLQkJICAgICAgZnByaW50Zl91bmZpbHRlcmVkIChnZGJfc3RkbG9nLAot CQkJCQkgICJQcm9jZXNzIHJlY29yZDogZXJyb3IgcmVhZGluZyAiCi0JCQkJ CSAgIm1lbW9yeSBhdCBhZGRyID0gJXMgbGVuID0gJWx1LlxuIiwKLQkJCQkJ ICBwYWRkcmVzcyAoZ2RiYXJjaCwgdG1wdTMyKSwKLQkJCQkgICAgICAgICAg KHVuc2lnbmVkIGxvbmcpc2l6ZW9mIChhKSk7Ci0JCSAgICByZXR1cm4gLTE7 Ci0JCSAgfQotCQlpZiAocmVjb3JkX2FyY2hfbGlzdF9hZGRfbWVtIChhWzNd LCB0ZGVwLT5zaXplX2ludCkpCi0JCSAgcmV0dXJuIC0xOwotCSAgICAgIH0K LQkgIH0KLQkgIGJyZWFrOwotCWNhc2UgUkVDT1JEX1NZU19TRU5EOgotCWNh c2UgUkVDT1JEX1NZU19TRU5EVE86Ci0JICBicmVhazsKLQljYXNlIFJFQ09S RF9TWVNfUkVDVjoKLQkgIHsKLQkgICAgdWludDMyX3QgYVszXTsKLQkgICAg cmVnY2FjaGVfcmF3X3JlYWQgKHJlZ2NhY2hlLCB0ZGVwLT5hcmcyLAotCQkJ ICAgICAgIChnZGJfYnl0ZSAqKSAmIHRtcHUzMik7Ci0JICAgIGlmICh0bXB1 MzIpCi0JICAgICAgewotCQlpZiAodGFyZ2V0X3JlYWRfbWVtb3J5ICh0bXB1 MzIsIChnZGJfYnl0ZSAqKSBhLCBzaXplb2YgKGEpKSkKLQkJICB7Ci0JCSAg ICBpZiAocmVjb3JkX2RlYnVnKQotCQkgICAgICBmcHJpbnRmX3VuZmlsdGVy ZWQgKGdkYl9zdGRsb2csCi0JCQkJCSAgIlByb2Nlc3MgcmVjb3JkOiBlcnJv ciByZWFkaW5nICIKLQkJCQkJICAibWVtb3J5IGF0IGFkZHIgPSAlcyBsZW4g PSAlbHUuXG4iLAotCQkJCQkgIHBhZGRyZXNzIChnZGJhcmNoLCB0bXB1MzIp LAotCQkJCQkgICh1bnNpZ25lZCBsb25nKXNpemVvZiAoYSkpOwotCQkgICAg cmV0dXJuIC0xOwotCQkgIH0KLQkJaWYgKGFbMl0pCi0JCSAgewotCQkgICAg aWYgKHRhcmdldF9yZWFkX21lbW9yeQotCQkJKGFbMl0sIChnZGJfYnl0ZSAq KSAmIChhWzJdKSwgc2l6ZW9mIChhWzJdKSkpCi0JCSAgICAgIHsKLQkJCWlm IChyZWNvcmRfZGVidWcpCi0JCQkgIGZwcmludGZfdW5maWx0ZXJlZCAoZ2Ri X3N0ZGxvZywKLQkJCQkJICAgICAgIlByb2Nlc3MgcmVjb3JkOiBlcnJvciBy ZWFkaW5nICIKLQkJCQkJICAgICAgIm1lbW9yeSBhdCBhZGRyID0gJXMgIgot CQkJCQkgICAgICAibGVuID0gJWx1LlxuIiwKLQkJCQkJICAgICAgcGFkZHJl c3MgKGdkYmFyY2gsIGFbMl0pLAotCQkJCQkgICAgICAodW5zaWduZWQgbG9u ZylzaXplb2YgKGFbMl0pKTsKLQkJCXJldHVybiAtMTsKLQkJICAgICAgfQot CQkgICAgaWYgKHJlY29yZF9hcmNoX2xpc3RfYWRkX21lbSAoYVsxXSwgYVsy XSkpCi0JCSAgICAgIHJldHVybiAtMTsKLQkJICB9Ci0JICAgICAgfQotCSAg fQotCSAgYnJlYWs7Ci0JY2FzZSBSRUNPUkRfU1lTX1JFQ1ZGUk9NOgotCSAg ewotCSAgICB1aW50MzJfdCBhWzZdOwotCSAgICByZWdjYWNoZV9yYXdfcmVh ZCAocmVnY2FjaGUsIHRkZXAtPmFyZzIsCi0JCQkgICAgICAgKGdkYl9ieXRl ICopICYgdG1wdTMyKTsKLQkgICAgaWYgKHRtcHUzMikKLQkgICAgICB7Ci0J CWlmICh0YXJnZXRfcmVhZF9tZW1vcnkgKHRtcHUzMiwgKGdkYl9ieXRlICop IGEsIHNpemVvZiAoYSkpKQotCQkgIHsKLQkJICAgIGlmIChyZWNvcmRfZGVi dWcpCi0JCSAgICAgIGZwcmludGZfdW5maWx0ZXJlZCAoZ2RiX3N0ZGxvZywK LQkJCQkJICAiUHJvY2VzcyByZWNvcmQ6IGVycm9yIHJlYWRpbmcgIgotCQkJ CQkgICJtZW1vcnkgYXQgYWRkciA9ICVzIGxlbiA9ICVsdS5cbiIsCi0JCQkJ CSAgcGFkZHJlc3MgKGdkYmFyY2gsIHRtcHUzMiksCi0JCQkJCSAgKHVuc2ln bmVkIGxvbmcpc2l6ZW9mIChhKSk7Ci0JCSAgICByZXR1cm4gLTE7Ci0JCSAg fQotCQlpZiAoYVsyXSkKLQkJICB7Ci0JCSAgICBpZiAodGFyZ2V0X3JlYWRf bWVtb3J5Ci0JCQkoYVsyXSwgKGdkYl9ieXRlICopICYgKGFbMl0pLCBzaXpl b2YgKGFbMl0pKSkKLQkJICAgICAgewotCQkJaWYgKHJlY29yZF9kZWJ1ZykK LQkJCSAgZnByaW50Zl91bmZpbHRlcmVkIChnZGJfc3RkbG9nLAotCQkJCQkg ICAgICAiUHJvY2VzcyByZWNvcmQ6IGVycm9yIHJlYWRpbmcgIgotCQkJCQkg ICAgICAibWVtb3J5IGF0IGFkZHIgPSAlcyAiCi0JCQkJCSAgICAgICJsZW4g PSAlbHUuXG4iLAotCQkJCQkgICAgICBwYWRkcmVzcyAoZ2RiYXJjaCwgYVsy XSksCi0JCQkJCSAgICAgICh1bnNpZ25lZCBsb25nKXNpemVvZiAoYVsyXSkp OwotCQkJcmV0dXJuIC0xOwotCQkgICAgICB9Ci0JCSAgICBpZiAocmVjb3Jk X2FyY2hfbGlzdF9hZGRfbWVtIChhWzFdLCBhWzJdKSkKLQkJICAgICAgcmV0 dXJuIC0xOwotCQkgICAgaWYgKHJlY29yZF9hcmNoX2xpc3RfYWRkX21lbSAo YVs0XSwgdGRlcC0+c2l6ZV9zb2NrYWRkcikpCi0JCSAgICAgIHJldHVybiAt MTsKLQkJICAgIGlmIChyZWNvcmRfYXJjaF9saXN0X2FkZF9tZW0gKGFbNV0s IHRkZXAtPnNpemVfaW50KSkKLQkJICAgICAgcmV0dXJuIC0xOwotCQkgIH0K LQkgICAgICB9Ci0JICB9Ci0JICBicmVhazsKLQljYXNlIFJFQ09SRF9TWVNf U0hVVERPV046Ci0JY2FzZSBSRUNPUkRfU1lTX1NFVFNPQ0tPUFQ6Ci0JICBi cmVhazsKLQljYXNlIFJFQ09SRF9TWVNfR0VUU09DS09QVDoKLQkgIHsKLQkg ICAgdWludDMyX3QgYVs1XTsKLQkgICAgdWludDMyX3QgYXY7CisgICAgICAg ICAgICAgICAgdG1wdWxvbmdlc3QgKz0gdGRlcC0+c2l6ZV91bG9uZzsKKyAg ICAgICAgICAgICAgICBpZiAodGFyZ2V0X3JlYWRfbWVtb3J5ICgoQ09SRV9B RERSKSB0bXB1bG9uZ2VzdCwgYSwKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICB0ZGVwLT5zaXplX3Vsb25nICogMikpCisgICAg ICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGlmIChyZWNv cmRfZGVidWcpCisgICAgICAgICAgICAgICAgICAgICAgZnByaW50Zl91bmZp bHRlcmVkIChnZGJfc3RkbG9nLAorICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIlByb2Nlc3MgcmVjb3JkOiBlcnJvciByZWFk aW5nICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICJtZW1vcnkgYXQgYWRkciA9IDB4JXMgbGVuID0gJWQuXG4iLAorICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT1VUUFVU X1JFRyAodG1wdWxvbmdlc3QsIHRkZXAtPmFyZzIpLAorICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGRlcC0+c2l6ZV91bG9u ZyAqIDIpOworICAgICAgICAgICAgICAgICAgICByZXR1cm4gLTE7CisgICAg ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgaWYgKHJlY29yZF9s aW51eF9zb2NrYWRkciAocmVnY2FjaGUsIHRkZXAsCisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXh0cmFjdF91bnNpZ25l ZF9pbnRlZ2VyCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAoYSwgdGRlcC0+c2l6ZV91bG9uZywgYnl0ZV9vcmRlciks CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ZXh0cmFjdF91bnNpZ25lZF9pbnRlZ2VyCisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAoYSArIHRkZXAtPnNpemVfdWxv bmcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgdGRlcC0+c2l6ZV91bG9uZywgYnl0ZV9vcmRlcikpKQorICAgICAg ICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICAgICAgICB9CisgICAg ICAgICAgfQorICAgICAgICAgIGJyZWFrOwogCi0JICAgIHJlZ2NhY2hlX3Jh d19yZWFkIChyZWdjYWNoZSwgdGRlcC0+YXJnMiwKLQkJCSAgICAgICAoZ2Ri X2J5dGUgKikgJiB0bXB1MzIpOwotCSAgICBpZiAodG1wdTMyKQotCSAgICAg IHsKLQkJaWYgKHRhcmdldF9yZWFkX21lbW9yeSAodG1wdTMyLCAoZ2RiX2J5 dGUgKikgYSwgc2l6ZW9mIChhKSkpCi0JCSAgewotCQkgICAgaWYgKHJlY29y ZF9kZWJ1ZykKLQkJICAgICAgZnByaW50Zl91bmZpbHRlcmVkIChnZGJfc3Rk bG9nLAotCQkJCQkgICJQcm9jZXNzIHJlY29yZDogZXJyb3IgcmVhZGluZyAi Ci0JCQkJCSAgIm1lbW9yeSBhdCBhZGRyID0gJXMgbGVuID0gJWx1LlxuIiwK LQkJCQkJICBwYWRkcmVzcyAoZ2RiYXJjaCwgdG1wdTMyKSwKLQkJCQkJICAo dW5zaWduZWQgbG9uZylzaXplb2YgKGEpKTsKLQkJICAgIHJldHVybiAtMTsK LQkJICB9Ci0JCWlmIChhWzRdKQotCQkgIHsKLQkJICAgIGlmICh0YXJnZXRf cmVhZF9tZW1vcnkKLQkJCShhWzRdLCAoZ2RiX2J5dGUgKikgJiBhdiwgc2l6 ZW9mIChhdikpKQotCQkgICAgICB7Ci0JCQlpZiAocmVjb3JkX2RlYnVnKQot CQkJICBmcHJpbnRmX3VuZmlsdGVyZWQgKGdkYl9zdGRsb2csCi0JCQkJCSAg ICAgICJQcm9jZXNzIHJlY29yZDogZXJyb3IgcmVhZGluZyAiCi0JCQkJCSAg ICAgICJtZW1vcnkgYXQgYWRkciA9ICVzICIKLQkJCQkJICAgICAgImxlbiA9 ICVsdS5cbiIsCi0JCQkJCSAgICAgIHBhZGRyZXNzIChnZGJhcmNoLCBhWzRd KSwKLQkJCQkJICAgICAgKHVuc2lnbmVkIGxvbmcpc2l6ZW9mIChhdikpOwot CQkJcmV0dXJuIC0xOwotCQkgICAgICB9Ci0JCSAgICBpZiAocmVjb3JkX2Fy Y2hfbGlzdF9hZGRfbWVtIChhWzNdLCBhdikpCi0JCSAgICAgIHJldHVybiAt MTsKLQkJICAgIGlmIChyZWNvcmRfYXJjaF9saXN0X2FkZF9tZW0gKGFbNF0s IHRkZXAtPnNpemVfaW50KSkKLQkJICAgICAgcmV0dXJuIC0xOwotCQkgIH0K LQkgICAgICB9Ci0JICB9Ci0JICBicmVhazsKLQljYXNlIFJFQ09SRF9TWVNf U0VORE1TRzoKLQkgIGJyZWFrOwotCWNhc2UgUkVDT1JEX1NZU19SRUNWTVNH OgotCSAgewotCSAgICB1aW50MzJfdCBhWzJdLCBpOwotCSAgICBzdHJ1Y3Qg cmVjb3JkX21zZ2hkcgotCSAgICB7Ci0JICAgICAgdWludDMyX3QgbXNnX25h bWU7Ci0JICAgICAgdWludDMyX3QgbXNnX25hbWVsZW47Ci0JICAgICAgdWlu dDMyX3QgbXNnX2lvdjsKLQkgICAgICB1aW50MzJfdCBtc2dfaW92bGVuOwot CSAgICAgIHVpbnQzMl90IG1zZ19jb250cm9sOwotCSAgICAgIHVpbnQzMl90 IG1zZ19jb250cm9sbGVuOwotCSAgICAgIHVpbnQzMl90IG1zZ19mbGFnczsK LQkgICAgfSByZWM7Ci0JICAgIHN0cnVjdCByZWNvcmRfaW92ZWMKLQkgICAg ewotCSAgICAgIHVpbnQzMl90IGlvdl9iYXNlOwotCSAgICAgIHVpbnQzMl90 IGlvdl9sZW47Ci0JICAgIH0gaW92OworICAgICAgICBjYXNlIFJFQ09SRF9T WVNfU09DS0VUUEFJUjoKKyAgICAgICAgICB7CisgICAgICAgICAgICBnZGJf Ynl0ZSAqYSA9IGFsbG9jYSAodGRlcC0+c2l6ZV91bG9uZyk7CisgICAgICAg ICAgICByZWdjYWNoZV9yYXdfcmVhZF91bnNpZ25lZCAocmVnY2FjaGUsIHRk ZXAtPmFyZzIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgJnRtcHVsb25nZXN0KTsKKyAgICAgICAgICAgIGlmICh0bXB1bG9u Z2VzdCkKKyAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHRtcHVs b25nZXN0ICs9IHRkZXAtPnNpemVfdWxvbmcgKiAzOworICAgICAgICAgICAg ICAgIGlmICh0YXJnZXRfcmVhZF9tZW1vcnkgKChDT1JFX0FERFIpIHRtcHVs b25nZXN0LCBhLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIHRkZXAtPnNpemVfdWxvbmcpKQorICAgICAgICAgICAgICAgICAg eworICAgICAgICAgICAgICAgICAgICBpZiAocmVjb3JkX2RlYnVnKQorICAg ICAgICAgICAgICAgICAgICAgIGZwcmludGZfdW5maWx0ZXJlZCAoZ2RiX3N0 ZGxvZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICJQcm9jZXNzIHJlY29yZDogZXJyb3IgcmVhZGluZyAiCisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibWVtb3J5IGF0 IGFkZHIgPSAweCVzIGxlbiA9ICVkLlxuIiwKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIE9VVFBVVF9SRUcgKHRtcHVsb25n ZXN0LCB0ZGVwLT5hcmcyKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIHRkZXAtPnNpemVfdWxvbmcpOworICAgICAgICAg ICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgICAgICAgICAgICB9Cisg ICAgICAgICAgICAgICAgdG1wYWRkcgorICAgICAgICAgICAgICAgICAgPSAo Q09SRV9BRERSKSBleHRyYWN0X3Vuc2lnbmVkX2ludGVnZXIgKGEsIHRkZXAt PnNpemVfdWxvbmcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgYnl0ZV9vcmRlcik7CisgICAg ICAgICAgICAgICAgaWYgKHJlY29yZF9hcmNoX2xpc3RfYWRkX21lbSAodG1w YWRkciwgdGRlcC0+c2l6ZV9pbnQpKQorICAgICAgICAgICAgICAgICAgcmV0 dXJuIC0xOworICAgICAgICAgICAgICB9CisgICAgICAgICAgfQorICAgICAg ICAgIGJyZWFrOworICAgICAgICBjYXNlIFJFQ09SRF9TWVNfU0VORDoKKyAg ICAgICAgY2FzZSBSRUNPUkRfU1lTX1NFTkRUTzoKKyAgICAgICAgICBicmVh azsKKyAgICAgICAgY2FzZSBSRUNPUkRfU1lTX1JFQ1ZGUk9NOgorICAgICAg ICAgIHJlZ2NhY2hlX3Jhd19yZWFkX3Vuc2lnbmVkIChyZWdjYWNoZSwgdGRl cC0+YXJnMiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgJnRtcHVsb25nZXN0KTsKKyAgICAgICAgICBpZiAodG1wdWxvbmdlc3Qp CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIGdkYl9ieXRlICphID0g YWxsb2NhICh0ZGVwLT5zaXplX3Vsb25nICogMik7CisgICAgICAgICAgICAg IGludCBhZGRybGVuOworICAgICAgICAgICAgICBnZGJfYnl0ZSAqYWRkcmxl bnA7CiAKLQkgICAgcmVnY2FjaGVfcmF3X3JlYWQgKHJlZ2NhY2hlLCB0ZGVw LT5hcmcyLAotCQkJICAgICAgIChnZGJfYnl0ZSAqKSAmIHRtcHUzMik7Ci0J ICAgIGlmICh0bXB1MzIpCi0JICAgICAgewotCQlpZiAodGFyZ2V0X3JlYWRf bWVtb3J5ICh0bXB1MzIsIChnZGJfYnl0ZSAqKSBhLCBzaXplb2YgKGEpKSkK LQkJICB7Ci0JCSAgICBpZiAocmVjb3JkX2RlYnVnKQotCQkgICAgICBmcHJp bnRmX3VuZmlsdGVyZWQgKGdkYl9zdGRsb2csCi0JCQkJCSAgIlByb2Nlc3Mg cmVjb3JkOiBlcnJvciByZWFkaW5nICIKLQkJCQkJICAibWVtb3J5IGF0IGFk ZHIgPSAlcyBsZW4gPSAlbHUuXG4iLAotCQkJCQkgIHBhZGRyZXNzIChnZGJh cmNoLCB0bXB1MzIpLAotCQkJCQkgICh1bnNpZ25lZCBsb25nKXNpemVvZiAo YSkpOwotCQkgICAgcmV0dXJuIC0xOwotCQkgIH0KLQkJaWYgKHJlY29yZF9h cmNoX2xpc3RfYWRkX21lbSAoYVsxXSwgdGRlcC0+c2l6ZV9tc2doZHIpKQot CQkgIHJldHVybiAtMTsKLQkJaWYgKGFbMV0pCi0JCSAgewotCQkgICAgaWYg KHRhcmdldF9yZWFkX21lbW9yeQotCQkJKGFbMV0sIChnZGJfYnl0ZSAqKSAm IHJlYywgc2l6ZW9mIChyZWMpKSkKLQkJICAgICAgewotCQkJaWYgKHJlY29y ZF9kZWJ1ZykKLQkJCSAgZnByaW50Zl91bmZpbHRlcmVkIChnZGJfc3RkbG9n LAotCQkJCQkgICAgICAiUHJvY2VzcyByZWNvcmQ6IGVycm9yIHJlYWRpbmcg IgotCQkJCQkgICAgICAibWVtb3J5IGF0IGFkZHIgPSAlcyAiCi0JCQkJCSAg ICAgICJsZW4gPSAlbHUuXG4iLAotCQkJCQkgICAgICBwYWRkcmVzcyAoZ2Ri YXJjaCwgYVsxXSksCi0JCQkJCSAgICAgICh1bnNpZ25lZCBsb25nKXNpemVv ZiAocmVjKSk7Ci0JCQlyZXR1cm4gLTE7Ci0JCSAgICAgIH0KLQkJICAgIGlm IChyZWNvcmRfYXJjaF9saXN0X2FkZF9tZW0KLQkJCShyZWMubXNnX25hbWUs IHJlYy5tc2dfbmFtZWxlbikpCi0JCSAgICAgIHJldHVybiAtMTsKLQkJICAg IGlmIChyZWNvcmRfYXJjaF9saXN0X2FkZF9tZW0KLQkJCShyZWMubXNnX2Nv bnRyb2wsIHJlYy5tc2dfY29udHJvbGxlbikpCi0JCSAgICAgIHJldHVybiAt MTsKLQkJICAgIGlmIChyZWMubXNnX2lvdikKLQkJICAgICAgewotCQkJZm9y IChpID0gMDsgaSA8IHJlYy5tc2dfaW92bGVuOyBpKyspCi0JCQkgIHsKLQkJ CSAgICBpZiAodGFyZ2V0X3JlYWRfbWVtb3J5Ci0JCQkJKHJlYy5tc2dfaW92 LCAoZ2RiX2J5dGUgKikgJiBpb3YsCi0JCQkJIHNpemVvZiAoaW92KSkpCi0J CQkgICAgICB7Ci0JCQkJaWYgKHJlY29yZF9kZWJ1ZykKLQkJCQkgIGZwcmlu dGZfdW5maWx0ZXJlZCAoZ2RiX3N0ZGxvZywKLQkJCQkJCSAgICAgICJQcm9j ZXNzIHJlY29yZDogZXJyb3IgIgotCQkJCQkJICAgICAgInJlYWRpbmcgbWVt b3J5IGF0ICIKLQkJCQkJCSAgICAgICJhZGRyID0gJXMgIgotCQkJCQkJICAg ICAgImxlbiA9ICVsdS5cbiIsCi0JCQkJCQkgICAgICBwYWRkcmVzcyAoZ2Ri YXJjaCwKLQkJCQkJCQkJcmVjLm1zZ19pb3YpLAotCQkJCQkJICAgICAgKHVu c2lnbmVkIGxvbmcpc2l6ZW9mIChpb3YpKTsKLQkJCQlyZXR1cm4gLTE7Ci0J CQkgICAgICB9Ci0JCQkgICAgaWYgKHJlY29yZF9hcmNoX2xpc3RfYWRkX21l bQotCQkJCShpb3YuaW92X2Jhc2UsIGlvdi5pb3ZfbGVuKSkKLQkJCSAgICAg IHJldHVybiAtMTsKLQkJCSAgICByZWMubXNnX2lvdiArPSBzaXplb2YgKHN0 cnVjdCByZWNvcmRfaW92ZWMpOwotCQkJICB9Ci0JCSAgICAgIH0KLQkJICB9 Ci0JICAgICAgfQotCSAgfQotCSAgYnJlYWs7Ci0JZGVmYXVsdDoKLQkgIHBy aW50Zl91bmZpbHRlcmVkIChfKCJQcm9jZXNzIHJlY29yZCBhbmQgcmVwbGF5 IHRhcmdldCAiCi0JCQkgICAgICAgImRvZXNuJ3Qgc3VwcG9ydCBzb2NrZXRj YWxsIGNhbGwgMHglc1xuIiksCi0JCQkgICAgIHBoZXhfbnogKHRtcHUzMiwg NCkpOwotCSAgcmV0dXJuIC0xOwotCSAgYnJlYWs7Ci0JfQorICAgICAgICAg ICAgICB0bXB1bG9uZ2VzdCArPSB0ZGVwLT5zaXplX3Vsb25nICogNDsKKyAg ICAgICAgICAgICAgaWYgKHRhcmdldF9yZWFkX21lbW9yeSAoKENPUkVfQURE UikgdG1wdWxvbmdlc3QsIGEsCisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIHRkZXAtPnNpemVfdWxvbmcgKiAyKSkKKyAgICAgICAg ICAgICAgICB7CisgICAgICAgICAgICAgICAgICBpZiAocmVjb3JkX2RlYnVn KQorICAgICAgICAgICAgICAgICAgICBmcHJpbnRmX3VuZmlsdGVyZWQgKGdk Yl9zdGRsb2csCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIlByb2Nlc3MgcmVjb3JkOiBlcnJvciByZWFkaW5nICIKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibWVtb3J5IGF0 IGFkZHIgPSAweCVzIGxlbiA9ICVkLlxuIiwKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBPVVRQVVRfUkVHICh0bXB1bG9uZ2Vz dCwgdGRlcC0+YXJnMiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgdGRlcC0+c2l6ZV91bG9uZyAqIDIpOworICAgICAgICAg ICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICAgICAgICAgIH0KKyAgICAg ICAgICAgICAgaWYgKHJlY29yZF9saW51eF9zb2NrYWRkciAocmVnY2FjaGUs IHRkZXAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIGV4dHJhY3RfdW5zaWduZWRfaW50ZWdlcgorICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIChhLCB0ZGVwLT5zaXplX3Vs b25nLCBieXRlX29yZGVyKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgZXh0cmFjdF91bnNpZ25lZF9pbnRlZ2VyCisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGEgKyB0 ZGVwLT5zaXplX3Vsb25nLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICB0ZGVwLT5zaXplX3Vsb25nLCBieXRlX29yZGVy KSkpCisgICAgICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICAgICAg fQorICAgICAgICBjYXNlIFJFQ09SRF9TWVNfUkVDVjoKKyAgICAgICAgICBy ZWdjYWNoZV9yYXdfcmVhZF91bnNpZ25lZCAocmVnY2FjaGUsIHRkZXAtPmFy ZzIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZ0 bXB1bG9uZ2VzdCk7CisgICAgICAgICAgaWYgKHRtcHVsb25nZXN0KQorICAg ICAgICAgICAgeworICAgICAgICAgICAgICBnZGJfYnl0ZSAqYSA9IGFsbG9j YSAodGRlcC0+c2l6ZV91bG9uZyAqIDIpOworCisgICAgICAgICAgICAgIHRt cHVsb25nZXN0ICs9IHRkZXAtPnNpemVfdWxvbmc7CisgICAgICAgICAgICAg IGlmICh0YXJnZXRfcmVhZF9tZW1vcnkgKChDT1JFX0FERFIpIHRtcHVsb25n ZXN0LCBhLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICB0ZGVwLT5zaXplX3Vsb25nKSkKKyAgICAgICAgICAgICAgICB7CisgICAg ICAgICAgICAgICAgICBpZiAocmVjb3JkX2RlYnVnKQorICAgICAgICAgICAg ICAgICAgICBmcHJpbnRmX3VuZmlsdGVyZWQgKGdkYl9zdGRsb2csCisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlByb2Nlc3Mg cmVjb3JkOiBlcnJvciByZWFkaW5nICIKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAibWVtb3J5IGF0IGFkZHIgPSAweCVzIGxl biA9ICVkLlxuIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBPVVRQVVRfUkVHICh0bXB1bG9uZ2VzdCwgdGRlcC0+YXJnMiks CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGRl cC0+c2l6ZV91bG9uZyk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiAt MTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgIHRtcHVsb25n ZXN0ID0gZXh0cmFjdF91bnNpZ25lZF9pbnRlZ2VyIChhLCB0ZGVwLT5zaXpl X3Vsb25nLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgYnl0ZV9vcmRlcik7CisgICAgICAgICAgICAg IGlmICh0bXB1bG9uZ2VzdCkKKyAgICAgICAgICAgICAgICB7CisgICAgICAg ICAgICAgICAgICBhICs9IHRkZXAtPnNpemVfdWxvbmc7CisgICAgICAgICAg ICAgICAgICB0bXBpbnQgPSAoaW50KSBleHRyYWN0X3Vuc2lnbmVkX2ludGVn ZXIgKGEsIHRkZXAtPnNpemVfdWxvbmcsCisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ5dGVf b3JkZXIpOworICAgICAgICAgICAgICAgICAgaWYgKHJlY29yZF9hcmNoX2xp c3RfYWRkX21lbSAoKENPUkVfQUREUikgdG1wdWxvbmdlc3QsCisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0bXBp bnQpKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAg ICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgIGJyZWFrOwor ICAgICAgICBjYXNlIFJFQ09SRF9TWVNfU0hVVERPV046CisgICAgICAgIGNh c2UgUkVDT1JEX1NZU19TRVRTT0NLT1BUOgorICAgICAgICAgIGJyZWFrOwor ICAgICAgICBjYXNlIFJFQ09SRF9TWVNfR0VUU09DS09QVDoKKyAgICAgICAg ICB7CisgICAgICAgICAgICBnZGJfYnl0ZSAqYSA9IGFsbG9jYSAodGRlcC0+ c2l6ZV91bG9uZyAqIDIpOworICAgICAgICAgICAgZ2RiX2J5dGUgKmF2ID0g YWxsb2NhICh0ZGVwLT5zaXplX2ludCk7CisKKyAgICAgICAgICAgIHJlZ2Nh Y2hlX3Jhd19yZWFkX3Vuc2lnbmVkIChyZWdjYWNoZSwgdGRlcC0+YXJnMiwK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmdG1w dWxvbmdlc3QpOworICAgICAgICAgICAgaWYgKHRtcHVsb25nZXN0KQorICAg ICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgdG1wdWxvbmdlc3QgKz0g dGRlcC0+c2l6ZV91bG9uZyAqIDM7CisgICAgICAgICAgICAgICAgaWYgKHRh cmdldF9yZWFkX21lbW9yeSAoKENPUkVfQUREUikgdG1wdWxvbmdlc3QsIGEs CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGRl cC0+c2l6ZV91bG9uZyAqIDIpKQorICAgICAgICAgICAgICAgICAgeworICAg ICAgICAgICAgICAgICAgICBpZiAocmVjb3JkX2RlYnVnKQorICAgICAgICAg ICAgICAgICAgICAgIGZwcmludGZfdW5maWx0ZXJlZCAoZ2RiX3N0ZGxvZywK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJQ cm9jZXNzIHJlY29yZDogZXJyb3IgcmVhZGluZyAiCisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibWVtb3J5IGF0IGFkZHIg PSAweCVzIGxlbiA9ICVkLlxuIiwKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIE9VVFBVVF9SRUcgKHRtcHVsb25nZXN0LCB0 ZGVwLT5hcmcyKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIHRkZXAtPnNpemVfdWxvbmcgKiAyKTsKKyAgICAgICAgICAg ICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICAgICAgICAgICAgfQorICAg ICAgICAgICAgICAgIHRtcHVsb25nZXN0ID0gZXh0cmFjdF91bnNpZ25lZF9p bnRlZ2VyIChhICsgdGRlcC0+c2l6ZV91bG9uZywKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGRl cC0+c2l6ZV91bG9uZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgYnl0ZV9vcmRlcik7CisgICAg ICAgICAgICAgICAgaWYgKHRtcHVsb25nZXN0KQorICAgICAgICAgICAgICAg ICAgeworICAgICAgICAgICAgICAgICAgICBpZiAodGFyZ2V0X3JlYWRfbWVt b3J5ICgoQ09SRV9BRERSKSB0bXB1bG9uZ2VzdCwgYXYsCisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRkZXAtPnNpemVf aW50KSkKKyAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAg ICAgICAgICAgICBpZiAocmVjb3JkX2RlYnVnKQorICAgICAgICAgICAgICAg ICAgICAgICAgICBmcHJpbnRmX3VuZmlsdGVyZWQgKGdkYl9zdGRsb2csCisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IlByb2Nlc3MgcmVjb3JkOiBlcnJvciByZWFkaW5nICIKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibWVtb3J5IGF0 IGFkZHIgPSAweCVzICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAibGVuID0gJWQuXG4iLAorICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBoZXhfbnogKHRt cHVsb25nZXN0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIHRkZXAtPnNpemVfdWxvbmcpLAorICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRk ZXAtPnNpemVfaW50KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVy biAtMTsKKyAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAg ICAgICAgIHRtcGFkZHIKKyAgICAgICAgICAgICAgICAgICAgICA9IChDT1JF X0FERFIpIGV4dHJhY3RfdW5zaWduZWRfaW50ZWdlciAoYSwKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgdGRlcC0+c2l6ZV91bG9uZywKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg Ynl0ZV9vcmRlcik7CisgICAgICAgICAgICAgICAgICAgIHRtcGludCA9IChp bnQpIGV4dHJhY3RfdW5zaWduZWRfaW50ZWdlciAoYXYsCisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgdGRlcC0+c2l6ZV9pbnQsCisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnl0ZV9v cmRlcik7CisgICAgICAgICAgICAgICAgICAgIGlmIChyZWNvcmRfYXJjaF9s aXN0X2FkZF9tZW0gKHRtcGFkZHIsIHRtcGludCkpCisgICAgICAgICAgICAg ICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICAgICAgICAgICAgICBhICs9 IHRkZXAtPnNpemVfdWxvbmc7CisgICAgICAgICAgICAgICAgICAgIHRtcGFk ZHIKKyAgICAgICAgICAgICAgICAgICAgICA9IChDT1JFX0FERFIpIGV4dHJh Y3RfdW5zaWduZWRfaW50ZWdlciAoYSwKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGRl cC0+c2l6ZV91bG9uZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnl0ZV9vcmRlcik7 CisgICAgICAgICAgICAgICAgICAgIGlmIChyZWNvcmRfYXJjaF9saXN0X2Fk ZF9tZW0gKHRtcGFkZHIsIHRkZXAtPnNpemVfaW50KSkKKyAgICAgICAgICAg ICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgICAgICAgICAgICB9Cisg ICAgICAgICAgICAgIH0KKyAgICAgICAgICB9CisgICAgICAgICAgYnJlYWs7 CisgICAgICAgIGNhc2UgUkVDT1JEX1NZU19TRU5ETVNHOgorICAgICAgICAg IGJyZWFrOworICAgICAgICBjYXNlIFJFQ09SRF9TWVNfUkVDVk1TRzoKKyAg ICAgICAgICB7CisgICAgICAgICAgICBnZGJfYnl0ZSAqYSA9IGFsbG9jYSAo dGRlcC0+c2l6ZV91bG9uZyk7CisKKyAgICAgICAgICAgIHJlZ2NhY2hlX3Jh d19yZWFkX3Vuc2lnbmVkIChyZWdjYWNoZSwgdGRlcC0+YXJnMiwKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmdG1wdWxvbmdl c3QpOworICAgICAgICAgICAgaWYgKHRtcHVsb25nZXN0KQorICAgICAgICAg ICAgICB7CisgICAgICAgICAgICAgICAgdG1wdWxvbmdlc3QgKz0gdGRlcC0+ c2l6ZV91bG9uZzsKKyAgICAgICAgICAgICAgICBpZiAodGFyZ2V0X3JlYWRf bWVtb3J5ICgoQ09SRV9BRERSKSB0bXB1bG9uZ2VzdCwgYSwKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZGVwLT5zaXplX3Vs b25nKSkKKyAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAg ICAgaWYgKHJlY29yZF9kZWJ1ZykKKyAgICAgICAgICAgICAgICAgICAgICBm cHJpbnRmX3VuZmlsdGVyZWQgKGdkYl9zdGRsb2csCisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiUHJvY2VzcyByZWNvcmQ6 IGVycm9yIHJlYWRpbmcgIgorICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIm1lbW9yeSBhdCBhZGRyID0gMHglcyBsZW4gPSAl ZC5cbiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBPVVRQVVRfUkVHICh0bXB1bG9uZ2VzdCwgdGRlcC0+YXJnMiksCisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZGVw LT5zaXplX3Vsb25nKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIC0x OworICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHRtcHVs b25nZXN0ID0gZXh0cmFjdF91bnNpZ25lZF9pbnRlZ2VyIChhLCB0ZGVwLT5z aXplX3Vsb25nLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBieXRlX29yZGVyKTsKKyAgICAgICAg ICAgICAgICBpZiAocmVjb3JkX2xpbnV4X21zZ2hkciAocmVnY2FjaGUsIHRk ZXAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IGV4dHJhY3RfdW5zaWduZWRfaW50ZWdlcgorICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIChhLCB0ZGVwLT5zaXplX3Vsb25n LCBieXRlX29yZGVyKSkpCisgICAgICAgICAgICAgICAgICByZXR1cm4gLTE7 CisgICAgICAgICAgICAgIH0KKyAgICAgICAgICB9CisgICAgICAgICAgYnJl YWs7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgcHJpbnRmX3VuZmls dGVyZWQgKF8oIlByb2Nlc3MgcmVjb3JkIGFuZCByZXBsYXkgdGFyZ2V0ICIK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZG9lc24ndCBzdXBw b3J0IHNvY2tldGNhbGwgY2FsbCAweCVzXG4iKSwKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgT1VUUFVUX1JFRyAodG1wdWxvbmdlc3QsIHRkZXAt PmFyZzEpKTsKKyAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgICAgYnJl YWs7CisgICAgICAgIH0KICAgICAgIGJyZWFrOwogCiAgICAgICAvKiBzeXNf c3lzbG9nICovCkBAIC05NDksMTYgKzExNzIsMTggQEAgcmVjb3JkX2xpbnV4 X3N5c3RlbV9jYWxsIChpbnQgbnVtLCBzdHJ1YwogCiAgICAgICAvKiBzeXNf c2V0aXRpbWVyICovCiAgICAgY2FzZSAxMDQ6Ci0gICAgICByZWdjYWNoZV9y YXdfcmVhZCAocmVnY2FjaGUsIHRkZXAtPmFyZzMsIChnZGJfYnl0ZSAqKSAm IHRtcHUzMik7Ci0gICAgICBpZiAocmVjb3JkX2FyY2hfbGlzdF9hZGRfbWVt ICh0bXB1MzIsIHRkZXAtPnNpemVfaXRpbWVydmFsKSkKLQlyZXR1cm4gLTE7 CisgICAgICByZWdjYWNoZV9yYXdfcmVhZF91bnNpZ25lZCAocmVnY2FjaGUs IHRkZXAtPmFyZzMsICZ0bXB1bG9uZ2VzdCk7CisgICAgICBpZiAocmVjb3Jk X2FyY2hfbGlzdF9hZGRfbWVtICgoQ09SRV9BRERSKSB0bXB1bG9uZ2VzdCwK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRkZXAtPnNp emVfaXRpbWVydmFsKSkKKyAgICAgICAgcmV0dXJuIC0xOwogICAgICAgYnJl YWs7CiAKICAgICAgIC8qIHN5c19nZXRpdGltZXIgKi8KICAgICBjYXNlIDEw NToKLSAgICAgIHJlZ2NhY2hlX3Jhd19yZWFkIChyZWdjYWNoZSwgdGRlcC0+ YXJnMiwgKGdkYl9ieXRlICopICYgdG1wdTMyKTsKLSAgICAgIGlmIChyZWNv cmRfYXJjaF9saXN0X2FkZF9tZW0gKHRtcHUzMiwgdGRlcC0+c2l6ZV9pdGlt ZXJ2YWwpKQotCXJldHVybiAtMTsKKyAgICAgIHJlZ2NhY2hlX3Jhd19yZWFk X3Vuc2lnbmVkIChyZWdjYWNoZSwgdGRlcC0+YXJnMiwgJnRtcHVsb25nZXN0 KTsKKyAgICAgIGlmIChyZWNvcmRfYXJjaF9saXN0X2FkZF9tZW0gKChDT1JF X0FERFIpIHRtcHVsb25nZXN0LAorICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgdGRlcC0+c2l6ZV9pdGltZXJ2YWwpKQorICAgICAgICBy ZXR1cm4gLTE7CiAgICAgICBicmVhazsKIAogICAgICAgLyogc3lzX25ld3N0 YXQgKi8KQEAgLTk2NywxNiArMTE5MiwxOSBAQCByZWNvcmRfbGludXhfc3lz dGVtX2NhbGwgKGludCBudW0sIHN0cnVjCiAgICAgY2FzZSAxMDc6CiAgICAg ICAvKiBzeXNfbmV3ZnN0YXQgKi8KICAgICBjYXNlIDEwODoKLSAgICAgIHJl Z2NhY2hlX3Jhd19yZWFkIChyZWdjYWNoZSwgdGRlcC0+YXJnMiwgKGdkYl9i eXRlICopICYgdG1wdTMyKTsKLSAgICAgIGlmIChyZWNvcmRfYXJjaF9saXN0 X2FkZF9tZW0gKHRtcHUzMiwgdGRlcC0+c2l6ZV9zdGF0KSkKLQlyZXR1cm4g LTE7CisgICAgICAvKiBzeXNfbmV3ZnN0YXRhdCAqLworICAgIGNhc2UgNTQw OgorICAgICAgcmVnY2FjaGVfcmF3X3JlYWRfdW5zaWduZWQgKHJlZ2NhY2hl LCB0ZGVwLT5hcmcyLCAmdG1wdWxvbmdlc3QpOworICAgICAgaWYgKHJlY29y ZF9hcmNoX2xpc3RfYWRkX21lbSAoKENPUkVfQUREUikgdG1wdWxvbmdlc3Qs IHRkZXAtPnNpemVfc3RhdCkpCisgICAgICAgIHJldHVybiAtMTsKICAgICAg IGJyZWFrOwogCiAgICAgICAvKiBzeXNfdW5hbWUgKi8KICAgICBjYXNlIDEw OToKLSAgICAgIHJlZ2NhY2hlX3Jhd19yZWFkIChyZWdjYWNoZSwgdGRlcC0+ YXJnMSwgKGdkYl9ieXRlICopICYgdG1wdTMyKTsKLSAgICAgIGlmIChyZWNv cmRfYXJjaF9saXN0X2FkZF9tZW0gKHRtcHUzMiwgdGRlcC0+c2l6ZV9vbGRf dXRzbmFtZSkpCi0JcmV0dXJuIC0xOworICAgICAgcmVnY2FjaGVfcmF3X3Jl YWRfdW5zaWduZWQgKHJlZ2NhY2hlLCB0ZGVwLT5hcmcxLCAmdG1wdWxvbmdl c3QpOworICAgICAgaWYgKHJlY29yZF9hcmNoX2xpc3RfYWRkX21lbSAoKENP UkVfQUREUikgdG1wdWxvbmdlc3QsCisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICB0ZGVwLT5zaXplX29sZF91dHNuYW1lKSkKKyAgICAg ICAgcmV0dXJuIC0xOwogICAgICAgYnJlYWs7CiAKICAgICAgIC8qIHN5c19p b3BsICovCkBAIC05OTEsMTIgKzEyMTksMTQgQEAgcmVjb3JkX2xpbnV4X3N5 c3RlbV9jYWxsIChpbnQgbnVtLCBzdHJ1YwogCiAgICAgICAvKiBzeXNfd2Fp dDQgKi8KICAgICBjYXNlIDExNDoKLSAgICAgIHJlZ2NhY2hlX3Jhd19yZWFk IChyZWdjYWNoZSwgdGRlcC0+YXJnMiwgKGdkYl9ieXRlICopICYgdG1wdTMy KTsKLSAgICAgIGlmIChyZWNvcmRfYXJjaF9saXN0X2FkZF9tZW0gKHRtcHUz MiwgdGRlcC0+c2l6ZV9pbnQpKQotCXJldHVybiAtMTsKLSAgICAgIHJlZ2Nh Y2hlX3Jhd19yZWFkIChyZWdjYWNoZSwgdGRlcC0+YXJnNCwgKGdkYl9ieXRl ICopICYgdG1wdTMyKTsKLSAgICAgIGlmIChyZWNvcmRfYXJjaF9saXN0X2Fk ZF9tZW0gKHRtcHUzMiwgdGRlcC0+c2l6ZV9ydXNhZ2UpKQotCXJldHVybiAt MTsKKyAgICAgIHJlZ2NhY2hlX3Jhd19yZWFkX3Vuc2lnbmVkIChyZWdjYWNo ZSwgdGRlcC0+YXJnMiwgJnRtcHVsb25nZXN0KTsKKyAgICAgIGlmIChyZWNv cmRfYXJjaF9saXN0X2FkZF9tZW0gKChDT1JFX0FERFIpIHRtcHVsb25nZXN0 LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGRlcC0+ c2l6ZV9pbnQpKQorICAgICAgICByZXR1cm4gLTE7CisgICAgICByZWdjYWNo ZV9yYXdfcmVhZF91bnNpZ25lZCAocmVnY2FjaGUsIHRkZXAtPmFyZzQsICZ0 bXB1bG9uZ2VzdCk7CisgICAgICBpZiAocmVjb3JkX2FyY2hfbGlzdF9hZGRf bWVtICgoQ09SRV9BRERSKSB0bXB1bG9uZ2VzdCwKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIHRkZXAtPnNpemVfcnVzYWdlKSkKKyAg ICAgICAgcmV0dXJuIC0xOwogICAgICAgYnJlYWs7CiAKICAgICAgIC8qIHN5 c19zd2Fwb2ZmICovCkBAIC0xMDA1LDQ3ICsxMjM1LDEyMSBAQCByZWNvcmRf bGludXhfc3lzdGVtX2NhbGwgKGludCBudW0sIHN0cnVjCiAKICAgICAgIC8q IHN5c19zeXNpbmZvICovCiAgICAgY2FzZSAxMTY6Ci0gICAgICByZWdjYWNo ZV9yYXdfcmVhZCAocmVnY2FjaGUsIHRkZXAtPmFyZzEsIChnZGJfYnl0ZSAq KSAmIHRtcHUzMik7Ci0gICAgICBpZiAocmVjb3JkX2FyY2hfbGlzdF9hZGRf bWVtICh0bXB1MzIsIHRkZXAtPnNpemVfc3lzaW5mbykpCi0JcmV0dXJuIC0x OworICAgICAgcmVnY2FjaGVfcmF3X3JlYWRfdW5zaWduZWQgKHJlZ2NhY2hl LCB0ZGVwLT5hcmcxLCAmdG1wdWxvbmdlc3QpOworICAgICAgaWYgKHJlY29y ZF9hcmNoX2xpc3RfYWRkX21lbSAoKENPUkVfQUREUikgdG1wdWxvbmdlc3Qs CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZGVwLT5z aXplX3N5c2luZm8pKQorICAgICAgICByZXR1cm4gLTE7CisgICAgICBicmVh azsKKworICAgICAgLyogc3lzX3NobWdldCAqLworICAgIGNhc2UgNTIwOgor ICAgICAgLyogc3lzX3NlbWdldCAqLworICAgIGNhc2UgNTIzOgorICAgICAg Lyogc3lzX3NlbW9wICovCisgICAgY2FzZSA1MjQ6CisgICAgICAvKiBzeXNf bXNnZ2V0ICovCisgICAgY2FzZSA1Mjg6CisgICAgICAvKiBzeXNfc2htZHQg Ki8KKyAgICAgIC8qIFhYWCBtYXliZSBuZWVkIGRvIHNvbWUgcmVjb3JkIHdv cmtzIHdpaHQgc3lzX3NobWR0LiAgKi8KKyAgICBjYXNlIDUyNzoKKyAgICAg IC8qIHN5c19tc2dzbmQgKi8KKyAgICBjYXNlIDUyOToKKyAgICAgIC8qIHN5 c19zZW10aW1lZG9wICovCisgICAgY2FzZSA1MzI6CisgICAgICBicmVhazsK KworICAgICAgLyogc3lzX3NobWF0ICovCisgICAgY2FzZSA1MjE6CisgICAg ICByZWdjYWNoZV9yYXdfcmVhZF91bnNpZ25lZCAocmVnY2FjaGUsIHRkZXAt PmFyZzMsICZ0bXB1bG9uZ2VzdCk7CisgICAgICBpZiAocmVjb3JkX2FyY2hf bGlzdF9hZGRfbWVtICgoQ09SRV9BRERSKSB0bXB1bG9uZ2VzdCwKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRkZXAtPnNpemVfdWxv bmcpKQorICAgICAgICByZXR1cm4gLTE7CisgICAgICBicmVhazsKKworICAg ICAgLyogc3lzX3NobWN0bCAqLworICAgIGNhc2UgNTIyOgorICAgICAgcmVn Y2FjaGVfcmF3X3JlYWRfdW5zaWduZWQgKHJlZ2NhY2hlLCB0ZGVwLT5hcmcz LCAmdG1wdWxvbmdlc3QpOworICAgICAgaWYgKHJlY29yZF9hcmNoX2xpc3Rf YWRkX21lbSAoKENPUkVfQUREUikgdG1wdWxvbmdlc3QsCisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICB0ZGVwLT5zaXplX3NobWlkX2Rz KSkKKyAgICAgICAgcmV0dXJuIC0xOworICAgICAgYnJlYWs7CisKKyAgICAg IC8qIHN5c19zZW1jdGwgKi8KKyAgICAgIC8qIFhYWCBzeXNfc2VtY3RsIDUy NSBzdGlsbCBub3Qgc3VwcG9ydC4gICovCisKKyAgICAgIC8qIHN5c19tc2dy Y3YgKi8KKyAgICBjYXNlIDUzMDoKKyAgICAgIHsKKyAgICAgICAgVUxPTkdF U1QgbXNncDsKKyAgICAgICAgcmVnY2FjaGVfcmF3X3JlYWRfc2lnbmVkIChy ZWdjYWNoZSwgdGRlcC0+YXJnMywgJnRtcHVsb25nZXN0KTsKKyAgICAgICAg cmVnY2FjaGVfcmF3X3JlYWRfdW5zaWduZWQgKHJlZ2NhY2hlLCB0ZGVwLT5h cmcyLCAmbXNncCk7CisgICAgICAgIHRtcGludCA9IChpbnQpIHRtcHVsb25n ZXN0ICsgdGRlcC0+c2l6ZV9sb25nOworICAgICAgICBpZiAocmVjb3JkX2Fy Y2hfbGlzdF9hZGRfbWVtICgoQ09SRV9BRERSKSBtc2dwLCB0bXBpbnQpKQor ICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgIH0KKyAgICAgIGJyZWFrOwor CisgICAgICAvKiBzeXNfbXNnY3RsICovCisgICAgY2FzZSA1MzE6CisgICAg ICByZWdjYWNoZV9yYXdfcmVhZF91bnNpZ25lZCAocmVnY2FjaGUsIHRkZXAt PmFyZzMsICZ0bXB1bG9uZ2VzdCk7CisgICAgICBpZiAocmVjb3JkX2FyY2hf bGlzdF9hZGRfbWVtICgoQ09SRV9BRERSKSB0bXB1bG9uZ2VzdCwKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRkZXAtPnNpemVfbXNx aWRfZHMpKQorICAgICAgICByZXR1cm4gLTE7CiAgICAgICBicmVhazsKIAog ICAgICAgLyogc3lzX2lwYyAqLwogICAgIGNhc2UgMTE3OgotICAgICAgcmVn Y2FjaGVfcmF3X3JlYWQgKHJlZ2NhY2hlLCB0ZGVwLT5hcmcxLCAoZ2RiX2J5 dGUgKikgJiB0bXB1MzIpOwotICAgICAgc3dpdGNoICh0bXB1MzIpCi0Jewot CWNhc2UgUkVDT1JEX01TR1JDVjoKLQkgIHsKLQkgICAgaW50MzJfdCBzZWNv bmQ7Ci0JICAgIHVpbnQzMl90IHB0cjsKLQkgICAgcmVnY2FjaGVfcmF3X3Jl YWQgKHJlZ2NhY2hlLCB0ZGVwLT5hcmczLAotCQkJICAgICAgIChnZGJfYnl0 ZSAqKSAmIHNlY29uZCk7Ci0JICAgIHJlZ2NhY2hlX3Jhd19yZWFkIChyZWdj YWNoZSwgdGRlcC0+YXJnNSwKLQkJCSAgICAgICAoZ2RiX2J5dGUgKikgJiBw dHIpOwotCSAgICBpZiAocmVjb3JkX2FyY2hfbGlzdF9hZGRfbWVtIChwdHIs IHNlY29uZCArIHRkZXAtPnNpemVfbG9uZykpCi0JICAgICAgcmV0dXJuIC0x OwotCSAgfQotCSAgYnJlYWs7Ci0JY2FzZSBSRUNPUkRfTVNHQ1RMOgotCSAg cmVnY2FjaGVfcmF3X3JlYWQgKHJlZ2NhY2hlLCB0ZGVwLT5hcmc1LAotCQkJ ICAgICAoZ2RiX2J5dGUgKikgJiB0bXB1MzIpOwotCSAgaWYgKHJlY29yZF9h cmNoX2xpc3RfYWRkX21lbSAodG1wdTMyLCB0ZGVwLT5zaXplX21zcWlkX2Rz KSkKLQkgICAgcmV0dXJuIC0xOwotCSAgYnJlYWs7Ci0JY2FzZSBSRUNPUkRf U0hNQVQ6Ci0JICByZWdjYWNoZV9yYXdfcmVhZCAocmVnY2FjaGUsIHRkZXAt PmFyZzQsCi0JCQkgICAgIChnZGJfYnl0ZSAqKSAmIHRtcHUzMik7Ci0JICBp ZiAocmVjb3JkX2FyY2hfbGlzdF9hZGRfbWVtICh0bXB1MzIsIHRkZXAtPnNp emVfdWxvbmcpKQotCSAgICByZXR1cm4gLTE7Ci0JICBicmVhazsKLQljYXNl IFJFQ09SRF9TSE1DVEw6Ci0JICByZWdjYWNoZV9yYXdfcmVhZCAocmVnY2Fj aGUsIHRkZXAtPmFyZzUsCi0JCQkgICAgIChnZGJfYnl0ZSAqKSAmIHRtcHUz Mik7Ci0JICBpZiAocmVjb3JkX2FyY2hfbGlzdF9hZGRfbWVtICh0bXB1MzIs IHRkZXAtPnNpemVfc2htaWRfZHMpKQotCSAgICByZXR1cm4gLTE7Ci0JICBi cmVhazsKLQl9CisgICAgICByZWdjYWNoZV9yYXdfcmVhZF91bnNpZ25lZCAo cmVnY2FjaGUsIHRkZXAtPmFyZzEsICZ0bXB1bG9uZ2VzdCk7CisgICAgICB0 bXB1bG9uZ2VzdCAmPSAweGZmZmY7CisgICAgICBzd2l0Y2ggKHRtcHVsb25n ZXN0KQorICAgICAgICB7CisgICAgICAgIGNhc2UgUkVDT1JEX1NFTU9QOgor ICAgICAgICBjYXNlIFJFQ09SRF9TRU1HRVQ6CisgICAgICAgIGNhc2UgUkVD T1JEX1NFTVRJTUVET1A6CisgICAgICAgIGNhc2UgUkVDT1JEX01TR1NORDoK KyAgICAgICAgY2FzZSBSRUNPUkRfTVNHR0VUOgorICAgICAgICAgIC8qIFhY WCBtYXliZSBuZWVkIGRvIHNvbWUgcmVjb3JkIHdvcmtzIHdpaHQgUkVDT1JE X1NITURULiAgKi8KKyAgICAgICAgY2FzZSBSRUNPUkRfU0hNRFQ6CisgICAg ICAgIGNhc2UgUkVDT1JEX1NITUdFVDoKKyAgICAgICAgICBicmVhazsKKyAg ICAgICAgY2FzZSBSRUNPUkRfTVNHUkNWOgorICAgICAgICAgIHsKKyAgICAg ICAgICAgIFVMT05HRVNUIHNlY29uZDsKKyAgICAgICAgICAgIFVMT05HRVNU IHB0cjsKKyAgICAgICAgICAgIHJlZ2NhY2hlX3Jhd19yZWFkX3NpZ25lZCAo cmVnY2FjaGUsIHRkZXAtPmFyZzMsICZzZWNvbmQpOworICAgICAgICAgICAg cmVnY2FjaGVfcmF3X3JlYWRfdW5zaWduZWQgKHJlZ2NhY2hlLCB0ZGVwLT5h cmc1LCAmcHRyKTsKKyAgICAgICAgICAgIHRtcGludCA9IChpbnQpIHNlY29u ZCArIHRkZXAtPnNpemVfbG9uZzsKKyAgICAgICAgICAgIGlmIChyZWNvcmRf YXJjaF9saXN0X2FkZF9tZW0gKChDT1JFX0FERFIpIHB0ciwgdG1waW50KSkK KyAgICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICAgIH0KKyAgICAg ICAgICBicmVhazsKKyAgICAgICAgY2FzZSBSRUNPUkRfTVNHQ1RMOgorICAg ICAgICAgIHJlZ2NhY2hlX3Jhd19yZWFkX3Vuc2lnbmVkIChyZWdjYWNoZSwg dGRlcC0+YXJnNSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgJnRtcHVsb25nZXN0KTsKKyAgICAgICAgICBpZiAocmVjb3JkX2Fy Y2hfbGlzdF9hZGRfbWVtICgoQ09SRV9BRERSKSB0bXB1bG9uZ2VzdCwKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZGVwLT5z aXplX21zcWlkX2RzKSkKKyAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAg ICAgICBicmVhazsKKyAgICAgICAgY2FzZSBSRUNPUkRfU0hNQVQ6CisgICAg ICAgICAgcmVnY2FjaGVfcmF3X3JlYWRfdW5zaWduZWQgKHJlZ2NhY2hlLCB0 ZGVwLT5hcmc0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAmdG1wdWxvbmdlc3QpOworICAgICAgICAgIGlmIChyZWNvcmRfYXJj aF9saXN0X2FkZF9tZW0gKChDT1JFX0FERFIpIHRtcHVsb25nZXN0LAorICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRkZXAtPnNp emVfdWxvbmcpKQorICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICAg IGJyZWFrOworICAgICAgICBjYXNlIFJFQ09SRF9TSE1DVEw6CisgICAgICAg ICAgcmVnY2FjaGVfcmF3X3JlYWRfdW5zaWduZWQgKHJlZ2NhY2hlLCB0ZGVw LT5hcmc1LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAmdG1wdWxvbmdlc3QpOworICAgICAgICAgIGlmIChyZWNvcmRfYXJjaF9s aXN0X2FkZF9tZW0gKChDT1JFX0FERFIpIHRtcHVsb25nZXN0LAorICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRkZXAtPnNpemVf c2htaWRfZHMpKQorICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICAg IGJyZWFrOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgIC8qIFhYWCBS RUNPUkRfU0VNQ1RMIHN0aWxsIG5vdCBzdXBwb3J0LiAgKi8KKyAgICAgICAg ICBwcmludGZfdW5maWx0ZXJlZCAoXygiUHJvY2VzcyByZWNvcmQgYW5kIHJl cGxheSB0YXJnZXQgZG9lc24ndCAiCisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgInN1cHBvcnQgaXBjIG51bWJlciAlZFxuIiksIChpbnQpIHRt cHVsb25nZXN0KTsKKyAgICAgICAgICBicmVhazsKKyAgICAgICAgfQogICAg ICAgYnJlYWs7CiAKICAgICAgIC8qIHN5c19mc3luYyAqLwpAQCAtMTA2MCwz MCArMTM2NCwzMCBAQCByZWNvcmRfbGludXhfc3lzdGVtX2NhbGwgKGludCBu dW0sIHN0cnVjCiAKICAgICAgIC8qIHN5c19uZXd1bmFtZSAqLwogICAgIGNh c2UgMTIyOgotICAgICAgcmVnY2FjaGVfcmF3X3JlYWQgKHJlZ2NhY2hlLCB0 ZGVwLT5hcmcxLCAoZ2RiX2J5dGUgKikgJiB0bXB1MzIpOwotICAgICAgaWYg KHJlY29yZF9hcmNoX2xpc3RfYWRkX21lbSAodG1wdTMyLCB0ZGVwLT5zaXpl X25ld191dHNuYW1lKSkKLQlyZXR1cm4gLTE7CisgICAgICByZWdjYWNoZV9y YXdfcmVhZF91bnNpZ25lZCAocmVnY2FjaGUsIHRkZXAtPmFyZzEsICZ0bXB1 bG9uZ2VzdCk7CisgICAgICBpZiAocmVjb3JkX2FyY2hfbGlzdF9hZGRfbWVt ICgoQ09SRV9BRERSKSB0bXB1bG9uZ2VzdCwKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIHRkZXAtPnNpemVfbmV3X3V0c25hbWUpKQor ICAgICAgICByZXR1cm4gLTE7CiAgICAgICBicmVhazsKIAogICAgICAgLyog c3lzX21vZGlmeV9sZHQgKi8KICAgICBjYXNlIDEyMzoKLSAgICAgIHJlZ2Nh Y2hlX3Jhd19yZWFkIChyZWdjYWNoZSwgdGRlcC0+YXJnMSwgKGdkYl9ieXRl ICopICYgdG1wdTMyKTsKLSAgICAgIGlmICh0bXB1MzIgPT0gMCB8fCB0bXB1 MzIgPT0gMikKLQl7Ci0JICB1aW50MzJfdCBwdHIsIGJ5dGVjb3VudDsKLQkg IHJlZ2NhY2hlX3Jhd19yZWFkIChyZWdjYWNoZSwgdGRlcC0+YXJnMiwgKGdk Yl9ieXRlICopICYgcHRyKTsKLQkgIHJlZ2NhY2hlX3Jhd19yZWFkIChyZWdj YWNoZSwgdGRlcC0+YXJnMywKLQkJCSAgICAgKGdkYl9ieXRlICopICYgYnl0 ZWNvdW50KTsKLQkgIGlmIChyZWNvcmRfYXJjaF9saXN0X2FkZF9tZW0gKHB0 ciwgYnl0ZWNvdW50KSkKLQkgICAgcmV0dXJuIC0xOwotCX0KKyAgICAgIHJl Z2NhY2hlX3Jhd19yZWFkX3Vuc2lnbmVkIChyZWdjYWNoZSwgdGRlcC0+YXJn MSwgJnRtcHVsb25nZXN0KTsKKyAgICAgIGlmICh0bXB1bG9uZ2VzdCA9PSAw IHx8IHRtcHVsb25nZXN0ID09IDIpCisgICAgICAgIHsKKyAgICAgICAgICBV TE9OR0VTVCBwdHIsIGJ5dGVjb3VudDsKKyAgICAgICAgICByZWdjYWNoZV9y YXdfcmVhZF91bnNpZ25lZCAocmVnY2FjaGUsIHRkZXAtPmFyZzIsICZwdHIp OworICAgICAgICAgIHJlZ2NhY2hlX3Jhd19yZWFkX3Vuc2lnbmVkIChyZWdj YWNoZSwgdGRlcC0+YXJnMywgJmJ5dGVjb3VudCk7CisgICAgICAgICAgaWYg KHJlY29yZF9hcmNoX2xpc3RfYWRkX21lbSAoKENPUkVfQUREUikgcHRyLCAo aW50KSBieXRlY291bnQpKQorICAgICAgICAgICAgcmV0dXJuIC0xOworICAg ICAgICB9CiAgICAgICBicmVhazsKIAogICAgICAgLyogc3lzX2FkanRpbWV4 ICovCiAgICAgY2FzZSAxMjQ6Ci0gICAgICByZWdjYWNoZV9yYXdfcmVhZCAo cmVnY2FjaGUsIHRkZXAtPmFyZzEsIChnZGJfYnl0ZSAqKSAmIHRtcHUzMik7 Ci0gICAgICBpZiAocmVjb3JkX2FyY2hfbGlzdF9hZGRfbWVtICh0bXB1MzIs IHRkZXAtPnNpemVfdGltZXgpKQotCXJldHVybiAtMTsKKyAgICAgIHJlZ2Nh Y2hlX3Jhd19yZWFkX3Vuc2lnbmVkIChyZWdjYWNoZSwgdGRlcC0+YXJnMSwg JnRtcHVsb25nZXN0KTsKKyAgICAgIGlmIChyZWNvcmRfYXJjaF9saXN0X2Fk ZF9tZW0gKChDT1JFX0FERFIpIHRtcHVsb25nZXN0LCB0ZGVwLT5zaXplX3Rp bWV4KSkKKyAgICAgICAgcmV0dXJuIC0xOwogICAgICAgYnJlYWs7CiAKICAg ICAgIC8qIHN5c19tcHJvdGVjdCAqLwpAQCAtMTA5Miw5ICsxMzk2LDEwIEBA IHJlY29yZF9saW51eF9zeXN0ZW1fY2FsbCAoaW50IG51bSwgc3RydWMKIAog ICAgICAgLyogc3lzX3NpZ3Byb2NtYXNrICovCiAgICAgY2FzZSAxMjY6Ci0g ICAgICByZWdjYWNoZV9yYXdfcmVhZCAocmVnY2FjaGUsIHRkZXAtPmFyZzMs IChnZGJfYnl0ZSAqKSAmIHRtcHUzMik7Ci0gICAgICBpZiAocmVjb3JkX2Fy Y2hfbGlzdF9hZGRfbWVtICh0bXB1MzIsIHRkZXAtPnNpemVfb2xkX3NpZ3Nl dF90KSkKLQlyZXR1cm4gLTE7CisgICAgICByZWdjYWNoZV9yYXdfcmVhZF91 bnNpZ25lZCAocmVnY2FjaGUsIHRkZXAtPmFyZzMsICZ0bXB1bG9uZ2VzdCk7 CisgICAgICBpZiAocmVjb3JkX2FyY2hfbGlzdF9hZGRfbWVtICgoQ09SRV9B RERSKSB0bXB1bG9uZ2VzdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIHRkZXAtPnNpemVfb2xkX3NpZ3NldF90KSkKKyAgICAgICAg cmV0dXJuIC0xOwogICAgICAgYnJlYWs7CiAKICAgICAgIC8qIHN5c19uaV9z eXNjYWxsICovCkBAIC0xMTA5LDM1ICsxNDE0LDM5IEBAIHJlY29yZF9saW51 eF9zeXN0ZW1fY2FsbCAoaW50IG51bSwgc3RydWMKIAogICAgICAgLyogc3lz X3F1b3RhY3RsICovCiAgICAgY2FzZSAxMzE6Ci0gICAgICByZWdjYWNoZV9y YXdfcmVhZCAocmVnY2FjaGUsIHRkZXAtPmFyZzEsIChnZGJfYnl0ZSAqKSAm IHRtcHUzMik7Ci0gICAgICBzd2l0Y2ggKHRtcHUzMikKLQl7Ci0JY2FzZSBS RUNPUkRfUV9HRVRGTVQ6Ci0JICByZWdjYWNoZV9yYXdfcmVhZCAocmVnY2Fj aGUsIHRkZXAtPmFyZzQsCi0JCQkgICAgIChnZGJfYnl0ZSAqKSAmIHRtcHUz Mik7Ci0JICBpZiAocmVjb3JkX2FyY2hfbGlzdF9hZGRfbWVtICh0bXB1MzIs IDQpKQotCSAgICByZXR1cm4gLTE7Ci0JICBicmVhazsKLQljYXNlIFJFQ09S RF9RX0dFVElORk86Ci0JICByZWdjYWNoZV9yYXdfcmVhZCAocmVnY2FjaGUs IHRkZXAtPmFyZzQsCi0JCQkgICAgIChnZGJfYnl0ZSAqKSAmIHRtcHUzMik7 Ci0JICBpZiAocmVjb3JkX2FyY2hfbGlzdF9hZGRfbWVtICh0bXB1MzIsIHRk ZXAtPnNpemVfbWVtX2RxaW5mbykpCi0JICAgIHJldHVybiAtMTsKLQkgIGJy ZWFrOwotCWNhc2UgUkVDT1JEX1FfR0VUUVVPVEE6Ci0JICByZWdjYWNoZV9y YXdfcmVhZCAocmVnY2FjaGUsIHRkZXAtPmFyZzQsCi0JCQkgICAgIChnZGJf Ynl0ZSAqKSAmIHRtcHUzMik7Ci0JICBpZiAocmVjb3JkX2FyY2hfbGlzdF9h ZGRfbWVtICh0bXB1MzIsIHRkZXAtPnNpemVfaWZfZHFibGspKQotCSAgICBy ZXR1cm4gLTE7Ci0JICBicmVhazsKLQljYXNlIFJFQ09SRF9RX1hHRVRRU1RB VDoKLQljYXNlIFJFQ09SRF9RX1hHRVRRVU9UQToKLQkgIHJlZ2NhY2hlX3Jh d19yZWFkIChyZWdjYWNoZSwgdGRlcC0+YXJnNCwKLQkJCSAgICAgKGdkYl9i eXRlICopICYgdG1wdTMyKTsKLQkgIGlmIChyZWNvcmRfYXJjaF9saXN0X2Fk ZF9tZW0gKHRtcHUzMiwgdGRlcC0+c2l6ZV9mc19xdW90YV9zdGF0KSkKLQkg ICAgcmV0dXJuIC0xOwotCSAgYnJlYWs7Ci0JfQorICAgICAgcmVnY2FjaGVf cmF3X3JlYWRfdW5zaWduZWQgKHJlZ2NhY2hlLCB0ZGVwLT5hcmcxLCAmdG1w dWxvbmdlc3QpOworICAgICAgc3dpdGNoICh0bXB1bG9uZ2VzdCkKKyAgICAg ICAgeworICAgICAgICBjYXNlIFJFQ09SRF9RX0dFVEZNVDoKKyAgICAgICAg ICByZWdjYWNoZV9yYXdfcmVhZF91bnNpZ25lZCAocmVnY2FjaGUsIHRkZXAt PmFyZzQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICZ0bXB1bG9uZ2VzdCk7CisgICAgICAgICAgLyogX191MzIgKi8KKyAgICAg ICAgICBpZiAocmVjb3JkX2FyY2hfbGlzdF9hZGRfbWVtICgoQ09SRV9BRERS KSB0bXB1bG9uZ2VzdCwgNCkpCisgICAgICAgICAgICByZXR1cm4gLTE7Cisg ICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgUkVDT1JEX1FfR0VUSU5G TzoKKyAgICAgICAgICByZWdjYWNoZV9yYXdfcmVhZF91bnNpZ25lZCAocmVn Y2FjaGUsIHRkZXAtPmFyZzQsCisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICZ0bXB1bG9uZ2VzdCk7CisgICAgICAgICAgaWYgKHJl Y29yZF9hcmNoX2xpc3RfYWRkX21lbSAoKENPUkVfQUREUikgdG1wdWxvbmdl c3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg dGRlcC0+c2l6ZV9tZW1fZHFpbmZvKSkKKyAgICAgICAgICAgIHJldHVybiAt MTsKKyAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBSRUNPUkRfUV9H RVRRVU9UQToKKyAgICAgICAgICByZWdjYWNoZV9yYXdfcmVhZF91bnNpZ25l ZCAocmVnY2FjaGUsIHRkZXAtPmFyZzQsCisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICZ0bXB1bG9uZ2VzdCk7CisgICAgICAgICAg aWYgKHJlY29yZF9hcmNoX2xpc3RfYWRkX21lbSAoKENPUkVfQUREUikgdG1w dWxvbmdlc3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgdGRlcC0+c2l6ZV9pZl9kcWJsaykpCisgICAgICAgICAgICByZXR1 cm4gLTE7CisgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgUkVDT1JE X1FfWEdFVFFTVEFUOgorICAgICAgICBjYXNlIFJFQ09SRF9RX1hHRVRRVU9U QToKKyAgICAgICAgICByZWdjYWNoZV9yYXdfcmVhZF91bnNpZ25lZCAocmVn Y2FjaGUsIHRkZXAtPmFyZzQsCisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICZ0bXB1bG9uZ2VzdCk7CisgICAgICAgICAgaWYgKHJl Y29yZF9hcmNoX2xpc3RfYWRkX21lbSAoKENPUkVfQUREUikgdG1wdWxvbmdl c3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg dGRlcC0+c2l6ZV9mc19xdW90YV9zdGF0KSkKKyAgICAgICAgICAgIHJldHVy biAtMTsKKyAgICAgICAgICBicmVhazsKKyAgICAgICAgfQogICAgICAgYnJl YWs7CiAKICAgICAgIC8qIHN5c19nZXRwZ2lkICovCkBAIC0xMTUwLDE1ICsx NDU5LDE1IEBAIHJlY29yZF9saW51eF9zeXN0ZW1fY2FsbCAoaW50IG51bSwg c3RydWMKIAogICAgICAgLyogc3lzX3N5c2ZzICovCiAgICAgY2FzZSAxMzU6 Ci0gICAgICByZWdjYWNoZV9yYXdfcmVhZCAocmVnY2FjaGUsIHRkZXAtPmFy ZzEsIChnZGJfYnl0ZSAqKSAmIHRtcHUzMik7Ci0gICAgICBpZiAodG1wdTMy ID09IDIpCi0JewotCSAgcmVnY2FjaGVfcmF3X3JlYWQgKHJlZ2NhY2hlLCB0 ZGVwLT5hcmczLAotCQkJICAgICAoZ2RiX2J5dGUgKikgJiB0bXB1MzIpOwot CSAgLypYWFggdGhlIHNpemUgb2YgbWVtb3J5IGlzIG5vdCB2ZXJ5IGNsZWFy LiAgKi8KLQkgIGlmIChyZWNvcmRfYXJjaF9saXN0X2FkZF9tZW0gKHRtcHUz MiwgMTApKQotCSAgICByZXR1cm4gLTE7Ci0JfQorICAgICAgcmVnY2FjaGVf cmF3X3JlYWRfdW5zaWduZWQgKHJlZ2NhY2hlLCB0ZGVwLT5hcmcxLCAmdG1w dWxvbmdlc3QpOworICAgICAgaWYgKHRtcHVsb25nZXN0ID09IDIpCisgICAg ICAgIHsKKyAgICAgICAgICByZWdjYWNoZV9yYXdfcmVhZF91bnNpZ25lZCAo cmVnY2FjaGUsIHRkZXAtPmFyZzMsCisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICZ0bXB1bG9uZ2VzdCk7CisgICAgICAgICAgLypY WFggdGhlIHNpemUgb2YgbWVtb3J5IGlzIG5vdCB2ZXJ5IGNsZWFyLiAgKi8K KyAgICAgICAgICBpZiAocmVjb3JkX2FyY2hfbGlzdF9hZGRfbWVtICgoQ09S RV9BRERSKSB0bXB1bG9uZ2VzdCwgMTApKQorICAgICAgICAgICAgcmV0dXJu IC0xOworICAgICAgICB9CiAgICAgICBicmVhazsKIAogICAgICAgLyogc3lz X3BlcnNvbmFsaXR5ICovCkBAIC0xMTczLDM3ICsxNDgyLDQzIEBAIHJlY29y ZF9saW51eF9zeXN0ZW1fY2FsbCAoaW50IG51bSwgc3RydWMKIAogICAgICAg Lyogc3lzX2xsc2VlayAqLwogICAgIGNhc2UgMTQwOgotICAgICAgcmVnY2Fj aGVfcmF3X3JlYWQgKHJlZ2NhY2hlLCB0ZGVwLT5hcmc0LCAoZ2RiX2J5dGUg KikgJiB0bXB1MzIpOwotICAgICAgaWYgKHJlY29yZF9hcmNoX2xpc3RfYWRk X21lbSAodG1wdTMyLCB0ZGVwLT5zaXplX2xvZmZfdCkpCi0JcmV0dXJuIC0x OworICAgICAgcmVnY2FjaGVfcmF3X3JlYWRfdW5zaWduZWQgKHJlZ2NhY2hl LCB0ZGVwLT5hcmc0LCAmdG1wdWxvbmdlc3QpOworICAgICAgaWYgKHJlY29y ZF9hcmNoX2xpc3RfYWRkX21lbSAoKENPUkVfQUREUikgdG1wdWxvbmdlc3Qs CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZGVwLT5z aXplX2xvZmZfdCkpCisgICAgICAgIHJldHVybiAtMTsKICAgICAgIGJyZWFr OwogCiAgICAgICAvKiBzeXNfZ2V0ZGVudHMgKi8KICAgICBjYXNlIDE0MToK ICAgICAgIHsKLQl1aW50MzJfdCBjb3VudDsKLQlyZWdjYWNoZV9yYXdfcmVh ZCAocmVnY2FjaGUsIHRkZXAtPmFyZzIsCi0JCQkgICAoZ2RiX2J5dGUgKikg JiB0bXB1MzIpOwotCXJlZ2NhY2hlX3Jhd19yZWFkIChyZWdjYWNoZSwgdGRl cC0+YXJnMywgKGdkYl9ieXRlICopICYgY291bnQpOwotCWlmIChyZWNvcmRf YXJjaF9saXN0X2FkZF9tZW0gKHRtcHUzMiwgdGRlcC0+c2l6ZV9kaXJlbnQg KiBjb3VudCkpCi0JICByZXR1cm4gLTE7CisgICAgICAgIFVMT05HRVNUIGNv dW50OworICAgICAgICByZWdjYWNoZV9yYXdfcmVhZF91bnNpZ25lZCAocmVn Y2FjaGUsIHRkZXAtPmFyZzIsCisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAmdG1wdWxvbmdlc3QpOworICAgICAgICByZWdjYWNoZV9y YXdfcmVhZF91bnNpZ25lZCAocmVnY2FjaGUsIHRkZXAtPmFyZzMsICZjb3Vu dCk7CisgICAgICAgIGlmIChyZWNvcmRfYXJjaF9saXN0X2FkZF9tZW0gKChD T1JFX0FERFIpIHRtcHVsb25nZXN0LAorICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICB0ZGVwLT5zaXplX2RpcmVudCAqIGNvdW50KSkK KyAgICAgICAgICByZXR1cm4gLTE7CiAgICAgICB9CiAgICAgICBicmVhazsK IAogICAgICAgLyogc3lzX3NlbGVjdCAqLwogICAgIGNhc2UgMTQyOgotICAg ICAgcmVnY2FjaGVfcmF3X3JlYWQgKHJlZ2NhY2hlLCB0ZGVwLT5hcmcyLCAo Z2RiX2J5dGUgKikgJiB0bXB1MzIpOwotICAgICAgaWYgKHJlY29yZF9hcmNo X2xpc3RfYWRkX21lbSAodG1wdTMyLCB0ZGVwLT5zaXplX2ZkX3NldCkpCi0J cmV0dXJuIC0xOwotICAgICAgcmVnY2FjaGVfcmF3X3JlYWQgKHJlZ2NhY2hl LCB0ZGVwLT5hcmczLCAoZ2RiX2J5dGUgKikgJiB0bXB1MzIpOwotICAgICAg aWYgKHJlY29yZF9hcmNoX2xpc3RfYWRkX21lbSAodG1wdTMyLCB0ZGVwLT5z aXplX2ZkX3NldCkpCi0JcmV0dXJuIC0xOwotICAgICAgcmVnY2FjaGVfcmF3 X3JlYWQgKHJlZ2NhY2hlLCB0ZGVwLT5hcmc0LCAoZ2RiX2J5dGUgKikgJiB0 bXB1MzIpOwotICAgICAgaWYgKHJlY29yZF9hcmNoX2xpc3RfYWRkX21lbSAo dG1wdTMyLCB0ZGVwLT5zaXplX2ZkX3NldCkpCi0JcmV0dXJuIC0xOwotICAg ICAgcmVnY2FjaGVfcmF3X3JlYWQgKHJlZ2NhY2hlLCB0ZGVwLT5hcmc1LCAo Z2RiX2J5dGUgKikgJiB0bXB1MzIpOwotICAgICAgaWYgKHJlY29yZF9hcmNo X2xpc3RfYWRkX21lbSAodG1wdTMyLCB0ZGVwLT5zaXplX3RpbWV2YWwpKQot CXJldHVybiAtMTsKKyAgICAgIHJlZ2NhY2hlX3Jhd19yZWFkX3Vuc2lnbmVk IChyZWdjYWNoZSwgdGRlcC0+YXJnMiwgJnRtcHVsb25nZXN0KTsKKyAgICAg IGlmIChyZWNvcmRfYXJjaF9saXN0X2FkZF9tZW0gKChDT1JFX0FERFIpIHRt cHVsb25nZXN0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgdGRlcC0+c2l6ZV9mZF9zZXQpKQorICAgICAgICByZXR1cm4gLTE7Cisg ICAgICByZWdjYWNoZV9yYXdfcmVhZF91bnNpZ25lZCAocmVnY2FjaGUsIHRk ZXAtPmFyZzMsICZ0bXB1bG9uZ2VzdCk7CisgICAgICBpZiAocmVjb3JkX2Fy Y2hfbGlzdF9hZGRfbWVtICgoQ09SRV9BRERSKSB0bXB1bG9uZ2VzdCwKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRkZXAtPnNpemVf ZmRfc2V0KSkKKyAgICAgICAgcmV0dXJuIC0xOworICAgICAgcmVnY2FjaGVf cmF3X3JlYWRfdW5zaWduZWQgKHJlZ2NhY2hlLCB0ZGVwLT5hcmc0LCAmdG1w dWxvbmdlc3QpOworICAgICAgaWYgKHJlY29yZF9hcmNoX2xpc3RfYWRkX21l bSAoKENPUkVfQUREUikgdG1wdWxvbmdlc3QsCisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICB0ZGVwLT5zaXplX2ZkX3NldCkpCisgICAg ICAgIHJldHVybiAtMTsKKyAgICAgIHJlZ2NhY2hlX3Jhd19yZWFkX3Vuc2ln bmVkIChyZWdjYWNoZSwgdGRlcC0+YXJnNSwgJnRtcHVsb25nZXN0KTsKKyAg ICAgIGlmIChyZWNvcmRfYXJjaF9saXN0X2FkZF9tZW0gKChDT1JFX0FERFIp IHRtcHVsb25nZXN0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgdGRlcC0+c2l6ZV90aW1ldmFsKSkKKyAgICAgICAgcmV0dXJuIC0x OwogICAgICAgYnJlYWs7CiAKICAgICAgIC8qIHN5c19mbG9jayAqLwpAQCAt MTIxNSwzNiArMTUzMCw0MCBAQCByZWNvcmRfbGludXhfc3lzdGVtX2NhbGwg KGludCBudW0sIHN0cnVjCiAgICAgICAvKiBzeXNfcmVhZHYgKi8KICAgICBj YXNlIDE0NToKICAgICAgIHsKLQl1aW50MzJfdCB2ZWM7Ci0JdWludDMyX3Qg dmxlbjsKLQlzdHJ1Y3QgcmVjb3JkX2lvdmVjCi0JewotCSAgdWludDMyX3Qg aW92X2Jhc2U7Ci0JICB1aW50MzJfdCBpb3ZfbGVuOwotCX0gaW92OwotCXJl Z2NhY2hlX3Jhd19yZWFkIChyZWdjYWNoZSwgdGRlcC0+YXJnMiwgKGdkYl9i eXRlICopICYgdmVjKTsKLQlpZiAodmVjKQotCSAgewotCSAgICByZWdjYWNo ZV9yYXdfcmVhZCAocmVnY2FjaGUsIHRkZXAtPmFyZzMsCi0JCQkgICAgICAg KGdkYl9ieXRlICopICYgdmxlbik7Ci0JICAgIGZvciAodG1wdTMyID0gMDsg dG1wdTMyIDwgdmxlbjsgdG1wdTMyKyspCi0JICAgICAgewotCQlpZiAodGFy Z2V0X3JlYWRfbWVtb3J5Ci0JCSAgICAodmVjLCAoZ2RiX2J5dGUgKikgJiBp b3YsIHNpemVvZiAoc3RydWN0IHJlY29yZF9pb3ZlYykpKQotCQkgIHsKLQkJ ICAgIGlmIChyZWNvcmRfZGVidWcpCi0JCSAgICAgIGZwcmludGZfdW5maWx0 ZXJlZCAoZ2RiX3N0ZGxvZywKLQkJCQkJICAiUHJvY2VzcyByZWNvcmQ6IGVy cm9yIHJlYWRpbmcgIgotCQkJCQkgICJtZW1vcnkgYXQgYWRkciA9ICVzIGxl biA9ICVsdS5cbiIsCi0JCQkJCSAgcGFkZHJlc3MgKGdkYmFyY2gsIHZlYyks Ci0JCQkJCSAgKHVuc2lnbmVkIGxvbmcpc2l6ZW9mIChzdHJ1Y3QgcmVjb3Jk X2lvdmVjKSk7Ci0JCSAgICByZXR1cm4gLTE7Ci0JCSAgfQotCQlpZiAocmVj b3JkX2FyY2hfbGlzdF9hZGRfbWVtIChpb3YuaW92X2Jhc2UsIGlvdi5pb3Zf bGVuKSkKLQkJICByZXR1cm4gLTE7Ci0JCXZlYyArPSBzaXplb2YgKHN0cnVj dCByZWNvcmRfaW92ZWMpOwotCSAgICAgIH0KLQkgIH0KKyAgICAgICAgVUxP TkdFU1QgdmVjLCB2bGVuOworCisgICAgICAgIHJlZ2NhY2hlX3Jhd19yZWFk X3Vuc2lnbmVkIChyZWdjYWNoZSwgdGRlcC0+YXJnMiwgJnZlYyk7CisgICAg ICAgIGlmICh2ZWMpCisgICAgICAgICAgeworICAgICAgICAgICAgZ2RiX2J5 dGUgKmlvdiA9IGFsbG9jYSAodGRlcC0+c2l6ZV9pb3ZlYyk7CisKKyAgICAg ICAgICAgIHJlZ2NhY2hlX3Jhd19yZWFkX3Vuc2lnbmVkIChyZWdjYWNoZSwg dGRlcC0+YXJnMywgJnZsZW4pOworICAgICAgICAgICAgZm9yICh0bXB1bG9u Z2VzdCA9IDA7IHRtcHVsb25nZXN0IDwgdmxlbjsgdG1wdWxvbmdlc3QrKykK KyAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGlmICh0YXJnZXRf cmVhZF9tZW1vcnkgKChDT1JFX0FERFIpIHZlYywgaW92LAorICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRkZXAtPnNpemVfaW92 ZWMpKQorICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAg ICBpZiAocmVjb3JkX2RlYnVnKQorICAgICAgICAgICAgICAgICAgICAgIGZw cmludGZfdW5maWx0ZXJlZCAoZ2RiX3N0ZGxvZywKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICJQcm9jZXNzIHJlY29yZDog ZXJyb3IgcmVhZGluZyAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAibWVtb3J5IGF0IGFkZHIgPSAweCVzIGxlbiA9ICVk LlxuIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIE9VVFBVVF9SRUcgKHZlYywgdGRlcC0+YXJnMiksCisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZGVwLT5zaXplX2lv dmVjKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAg ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHRtcGFkZHIKKyAgICAg ICAgICAgICAgICAgID0gKENPUkVfQUREUikgZXh0cmFjdF91bnNpZ25lZF9p bnRlZ2VyIChpb3YsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgdGRlcC0+c2l6ZV9wb2ludGVy LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIGJ5dGVfb3JkZXIpOworICAgICAgICAgICAgICAg IHRtcGludAorICAgICAgICAgICAgICAgICAgPSAoaW50KSBleHRyYWN0X3Vu c2lnbmVkX2ludGVnZXIgKGlvdiArIHRkZXAtPnNpemVfcG9pbnRlciwKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICB0ZGVwLT5zaXplX3NpemVfdCwKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBieXRlX29yZGVyKTsK KyAgICAgICAgICAgICAgICBpZiAocmVjb3JkX2FyY2hfbGlzdF9hZGRfbWVt ICh0bXBhZGRyLCB0bXBpbnQpKQorICAgICAgICAgICAgICAgICAgcmV0dXJu IC0xOworICAgICAgICAgICAgICAgIHZlYyArPSB0ZGVwLT5zaXplX2lvdmVj OworICAgICAgICAgICAgICB9CisgICAgICAgICAgfQogICAgICAgfQogICAg ICAgYnJlYWs7CiAKQEAgLTEyNzAsOSArMTU4OSw5IEBAIHJlY29yZF9saW51 eF9zeXN0ZW1fY2FsbCAoaW50IG51bSwgc3RydWMKIAogICAgICAgLyogc3lz X3NjaGVkX2dldHBhcmFtICovCiAgICAgY2FzZSAxNTU6Ci0gICAgICByZWdj YWNoZV9yYXdfcmVhZCAocmVnY2FjaGUsIHRkZXAtPmFyZzIsIChnZGJfYnl0 ZSAqKSAmIHRtcHUzMik7Ci0gICAgICBpZiAocmVjb3JkX2FyY2hfbGlzdF9h ZGRfbWVtICh0bXB1MzIsIHRkZXAtPnNpemVfaW50KSkKLQlyZXR1cm4gLTE7 CisgICAgICByZWdjYWNoZV9yYXdfcmVhZF91bnNpZ25lZCAocmVnY2FjaGUs IHRkZXAtPmFyZzIsICZ0bXB1bG9uZ2VzdCk7CisgICAgICBpZiAocmVjb3Jk X2FyY2hfbGlzdF9hZGRfbWVtICgoQ09SRV9BRERSKSB0bXB1bG9uZ2VzdCwg dGRlcC0+c2l6ZV9pbnQpKQorICAgICAgICByZXR1cm4gLTE7CiAgICAgICBi cmVhazsKIAogICAgICAgLyogc3lzX3NjaGVkX3NldHNjaGVkdWxlciAqLwpA QCAtMTI5MSw5ICsxNjEwLDEwIEBAIHJlY29yZF9saW51eF9zeXN0ZW1fY2Fs bCAoaW50IG51bSwgc3RydWMKICAgICBjYXNlIDE2MToKICAgICAgIC8qIHN5 c19uYW5vc2xlZXAgKi8KICAgICBjYXNlIDE2MjoKLSAgICAgIHJlZ2NhY2hl X3Jhd19yZWFkIChyZWdjYWNoZSwgdGRlcC0+YXJnMiwgKGdkYl9ieXRlICop ICYgdG1wdTMyKTsKLSAgICAgIGlmIChyZWNvcmRfYXJjaF9saXN0X2FkZF9t ZW0gKHRtcHUzMiwgdGRlcC0+c2l6ZV90aW1lc3BlYykpCi0JcmV0dXJuIC0x OworICAgICAgcmVnY2FjaGVfcmF3X3JlYWRfdW5zaWduZWQgKHJlZ2NhY2hl LCB0ZGVwLT5hcmcyLCAmdG1wdWxvbmdlc3QpOworICAgICAgaWYgKHJlY29y ZF9hcmNoX2xpc3RfYWRkX21lbSAoKENPUkVfQUREUikgdG1wdWxvbmdlc3Qs CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZGVwLT5z aXplX3RpbWVzcGVjKSkKKyAgICAgICAgcmV0dXJuIC0xOwogICAgICAgYnJl YWs7CiAKICAgICAgIC8qIHN5c19tcmVtYXAgKi8KQEAgLTEzMDQsMTUgKzE2 MjQsMTggQEAgcmVjb3JkX2xpbnV4X3N5c3RlbV9jYWxsIChpbnQgbnVtLCBz dHJ1YwogCiAgICAgICAvKiBzeXNfZ2V0cmVzdWlkMTYgKi8KICAgICBjYXNl IDE2NToKLSAgICAgIHJlZ2NhY2hlX3Jhd19yZWFkIChyZWdjYWNoZSwgdGRl cC0+YXJnMSwgKGdkYl9ieXRlICopICYgdG1wdTMyKTsKLSAgICAgIGlmIChy ZWNvcmRfYXJjaF9saXN0X2FkZF9tZW0gKHRtcHUzMiwgdGRlcC0+c2l6ZV9v bGRfdWlkX3QpKQotCXJldHVybiAtMTsKLSAgICAgIHJlZ2NhY2hlX3Jhd19y ZWFkIChyZWdjYWNoZSwgdGRlcC0+YXJnMiwgKGdkYl9ieXRlICopICYgdG1w dTMyKTsKLSAgICAgIGlmIChyZWNvcmRfYXJjaF9saXN0X2FkZF9tZW0gKHRt cHUzMiwgdGRlcC0+c2l6ZV9vbGRfdWlkX3QpKQotCXJldHVybiAtMTsKLSAg ICAgIHJlZ2NhY2hlX3Jhd19yZWFkIChyZWdjYWNoZSwgdGRlcC0+YXJnMywg KGdkYl9ieXRlICopICYgdG1wdTMyKTsKLSAgICAgIGlmIChyZWNvcmRfYXJj aF9saXN0X2FkZF9tZW0gKHRtcHUzMiwgdGRlcC0+c2l6ZV9vbGRfdWlkX3Qp KQotCXJldHVybiAtMTsKKyAgICAgIHJlZ2NhY2hlX3Jhd19yZWFkX3Vuc2ln bmVkIChyZWdjYWNoZSwgdGRlcC0+YXJnMSwgJnRtcHVsb25nZXN0KTsKKyAg ICAgIGlmIChyZWNvcmRfYXJjaF9saXN0X2FkZF9tZW0gKChDT1JFX0FERFIp IHRtcHVsb25nZXN0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgdGRlcC0+c2l6ZV9vbGRfdWlkX3QpKQorICAgICAgICByZXR1cm4g LTE7CisgICAgICByZWdjYWNoZV9yYXdfcmVhZF91bnNpZ25lZCAocmVnY2Fj aGUsIHRkZXAtPmFyZzIsICZ0bXB1bG9uZ2VzdCk7CisgICAgICBpZiAocmVj b3JkX2FyY2hfbGlzdF9hZGRfbWVtICgoQ09SRV9BRERSKSB0bXB1bG9uZ2Vz dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRkZXAt PnNpemVfb2xkX3VpZF90KSkKKyAgICAgICAgcmV0dXJuIC0xOworICAgICAg cmVnY2FjaGVfcmF3X3JlYWRfdW5zaWduZWQgKHJlZ2NhY2hlLCB0ZGVwLT5h cmczLCAmdG1wdWxvbmdlc3QpOworICAgICAgaWYgKHJlY29yZF9hcmNoX2xp c3RfYWRkX21lbSAoKENPUkVfQUREUikgdG1wdWxvbmdlc3QsCisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZGVwLT5zaXplX29sZF91 aWRfdCkpCisgICAgICAgIHJldHVybiAtMTsKICAgICAgIGJyZWFrOwogCiAg ICAgICAvKiBzeXNfdm04NiAqLwpAQCAtMTMyMywzMiArMTY0NiwzMiBAQCBy ZWNvcmRfbGludXhfc3lzdGVtX2NhbGwgKGludCBudW0sIHN0cnVjCiAKICAg ICAgIC8qIHN5c19wb2xsICovCiAgICAgY2FzZSAxNjg6Ci0gICAgICByZWdj YWNoZV9yYXdfcmVhZCAocmVnY2FjaGUsIHRkZXAtPmFyZzEsIChnZGJfYnl0 ZSAqKSAmIHRtcHUzMik7Ci0gICAgICBpZiAodG1wdTMyKQotCXsKLQkgIHVp bnQzMl90IG5mZHM7Ci0JICByZWdjYWNoZV9yYXdfcmVhZCAocmVnY2FjaGUs IHRkZXAtPmFyZzIsCi0JCQkgICAgIChnZGJfYnl0ZSAqKSAmIG5mZHMpOwot CSAgaWYgKHJlY29yZF9hcmNoX2xpc3RfYWRkX21lbSAodG1wdTMyLCB0ZGVw LT5zaXplX3BvbGxmZCAqIG5mZHMpKQotCSAgICByZXR1cm4gLTE7Ci0JfQor ICAgICAgcmVnY2FjaGVfcmF3X3JlYWRfdW5zaWduZWQgKHJlZ2NhY2hlLCB0 ZGVwLT5hcmcxLCAmdG1wdWxvbmdlc3QpOworICAgICAgaWYgKHRtcHVsb25n ZXN0KQorICAgICAgICB7CisgICAgICAgICAgVUxPTkdFU1QgbmZkczsKKyAg ICAgICAgICByZWdjYWNoZV9yYXdfcmVhZF91bnNpZ25lZCAocmVnY2FjaGUs IHRkZXAtPmFyZzIsICZuZmRzKTsKKyAgICAgICAgICBpZiAocmVjb3JkX2Fy Y2hfbGlzdF9hZGRfbWVtICgoQ09SRV9BRERSKSB0bXB1bG9uZ2VzdCwKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZGVwLT5z aXplX3BvbGxmZCAqIG5mZHMpKQorICAgICAgICAgICAgcmV0dXJuIC0xOwor ICAgICAgICB9CiAgICAgICBicmVhazsKIAogICAgICAgLyogc3lzX25mc3Nl cnZjdGwgKi8KICAgICBjYXNlIDE2OToKLSAgICAgIHJlZ2NhY2hlX3Jhd19y ZWFkIChyZWdjYWNoZSwgdGRlcC0+YXJnMSwgKGdkYl9ieXRlICopICYgdG1w dTMyKTsKLSAgICAgIGlmICh0bXB1MzIgPT0gNyB8fCB0bXB1MzIgPT0gOCkK LQl7Ci0JICB1aW50MzJfdCByc2l6ZTsKLQkgIGlmICh0bXB1MzIgPT0gNykK LQkgICAgcnNpemUgPSB0ZGVwLT5zaXplX05GU19GSFNJWkU7Ci0JICBlbHNl Ci0JICAgIHJzaXplID0gdGRlcC0+c2l6ZV9rbmZzZF9maDsKLQkgIHJlZ2Nh Y2hlX3Jhd19yZWFkIChyZWdjYWNoZSwgdGRlcC0+YXJnMywKLQkJCSAgICAg KGdkYl9ieXRlICopICYgdG1wdTMyKTsKLQkgIGlmIChyZWNvcmRfYXJjaF9s aXN0X2FkZF9tZW0gKHRtcHUzMiwgcnNpemUpKQotCSAgICByZXR1cm4gLTE7 Ci0JfQorICAgICAgcmVnY2FjaGVfcmF3X3JlYWRfdW5zaWduZWQgKHJlZ2Nh Y2hlLCB0ZGVwLT5hcmcxLCAmdG1wdWxvbmdlc3QpOworICAgICAgaWYgKHRt cHVsb25nZXN0ID09IDcgfHwgdG1wdWxvbmdlc3QgPT0gOCkKKyAgICAgICAg eworICAgICAgICAgIGludCByc2l6ZTsKKyAgICAgICAgICBpZiAodG1wdWxv bmdlc3QgPT0gNykKKyAgICAgICAgICAgIHJzaXplID0gdGRlcC0+c2l6ZV9O RlNfRkhTSVpFOworICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHJzaXpl ID0gdGRlcC0+c2l6ZV9rbmZzZF9maDsKKyAgICAgICAgICByZWdjYWNoZV9y YXdfcmVhZF91bnNpZ25lZCAocmVnY2FjaGUsIHRkZXAtPmFyZzMsCisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZ0bXB1bG9uZ2Vz dCk7CisgICAgICAgICAgaWYgKHJlY29yZF9hcmNoX2xpc3RfYWRkX21lbSAo KENPUkVfQUREUikgdG1wdWxvbmdlc3QsIHJzaXplKSkKKyAgICAgICAgICAg IHJldHVybiAtMTsKKyAgICAgICAgfQogICAgICAgYnJlYWs7CiAKICAgICAg IC8qIHN5c19zZXRyZXNnaWQxNiAqLwpAQCAtMTM1NywzNSArMTY4MCw0MCBA QCByZWNvcmRfbGludXhfc3lzdGVtX2NhbGwgKGludCBudW0sIHN0cnVjCiAK ICAgICAgIC8qIHN5c19nZXRyZXNnaWQxNiAqLwogICAgIGNhc2UgMTcxOgot ICAgICAgcmVnY2FjaGVfcmF3X3JlYWQgKHJlZ2NhY2hlLCB0ZGVwLT5hcmcx LCAoZ2RiX2J5dGUgKikgJiB0bXB1MzIpOwotICAgICAgaWYgKHJlY29yZF9h cmNoX2xpc3RfYWRkX21lbSAodG1wdTMyLCB0ZGVwLT5zaXplX29sZF9naWRf dCkpCi0JcmV0dXJuIC0xOwotICAgICAgcmVnY2FjaGVfcmF3X3JlYWQgKHJl Z2NhY2hlLCB0ZGVwLT5hcmcyLCAoZ2RiX2J5dGUgKikgJiB0bXB1MzIpOwot ICAgICAgaWYgKHJlY29yZF9hcmNoX2xpc3RfYWRkX21lbSAodG1wdTMyLCB0 ZGVwLT5zaXplX29sZF9naWRfdCkpCi0JcmV0dXJuIC0xOwotICAgICAgcmVn Y2FjaGVfcmF3X3JlYWQgKHJlZ2NhY2hlLCB0ZGVwLT5hcmczLCAoZ2RiX2J5 dGUgKikgJiB0bXB1MzIpOwotICAgICAgaWYgKHJlY29yZF9hcmNoX2xpc3Rf YWRkX21lbSAodG1wdTMyLCB0ZGVwLT5zaXplX29sZF9naWRfdCkpCi0JcmV0 dXJuIC0xOworICAgICAgcmVnY2FjaGVfcmF3X3JlYWRfdW5zaWduZWQgKHJl Z2NhY2hlLCB0ZGVwLT5hcmcxLCAmdG1wdWxvbmdlc3QpOworICAgICAgaWYg KHJlY29yZF9hcmNoX2xpc3RfYWRkX21lbSAoKENPUkVfQUREUikgdG1wdWxv bmdlc3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0 ZGVwLT5zaXplX29sZF9naWRfdCkpCisgICAgICAgIHJldHVybiAtMTsKKyAg ICAgIHJlZ2NhY2hlX3Jhd19yZWFkX3Vuc2lnbmVkIChyZWdjYWNoZSwgdGRl cC0+YXJnMiwgJnRtcHVsb25nZXN0KTsKKyAgICAgIGlmIChyZWNvcmRfYXJj aF9saXN0X2FkZF9tZW0gKChDT1JFX0FERFIpIHRtcHVsb25nZXN0LAorICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGRlcC0+c2l6ZV9v bGRfZ2lkX3QpKQorICAgICAgICByZXR1cm4gLTE7CisgICAgICByZWdjYWNo ZV9yYXdfcmVhZF91bnNpZ25lZCAocmVnY2FjaGUsIHRkZXAtPmFyZzMsICZ0 bXB1bG9uZ2VzdCk7CisgICAgICBpZiAocmVjb3JkX2FyY2hfbGlzdF9hZGRf bWVtICgoQ09SRV9BRERSKSB0bXB1bG9uZ2VzdCwKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIHRkZXAtPnNpemVfb2xkX2dpZF90KSkK KyAgICAgICAgcmV0dXJuIC0xOwogICAgICAgYnJlYWs7CiAKICAgICAgIC8q IHN5c19wcmN0bCAqLwogICAgIGNhc2UgMTcyOgotICAgICAgcmVnY2FjaGVf cmF3X3JlYWQgKHJlZ2NhY2hlLCB0ZGVwLT5hcmcxLCAoZ2RiX2J5dGUgKikg JiB0bXB1MzIpOwotICAgICAgc3dpdGNoICh0bXB1MzIpCi0JewotCWNhc2Ug MjoKLQkgIHJlZ2NhY2hlX3Jhd19yZWFkIChyZWdjYWNoZSwgdGRlcC0+YXJn MiwKLQkJCSAgICAgKGdkYl9ieXRlICopICYgdG1wdTMyKTsKLQkgIGlmIChy ZWNvcmRfYXJjaF9saXN0X2FkZF9tZW0gKHRtcHUzMiwgdGRlcC0+c2l6ZV9p bnQpKQotCSAgICByZXR1cm4gLTE7Ci0JICBicmVhazsKLQljYXNlIDE2Ogot CSAgcmVnY2FjaGVfcmF3X3JlYWQgKHJlZ2NhY2hlLCB0ZGVwLT5hcmcyLAot CQkJICAgICAoZ2RiX2J5dGUgKikgJiB0bXB1MzIpOwotCSAgaWYgKHJlY29y ZF9hcmNoX2xpc3RfYWRkX21lbSAodG1wdTMyLCB0ZGVwLT5zaXplX1RBU0tf Q09NTV9MRU4pKQotCSAgICByZXR1cm4gLTE7Ci0JICBicmVhazsKLQl9Cisg ICAgICByZWdjYWNoZV9yYXdfcmVhZF91bnNpZ25lZCAocmVnY2FjaGUsIHRk ZXAtPmFyZzEsICZ0bXB1bG9uZ2VzdCk7CisgICAgICBzd2l0Y2ggKHRtcHVs b25nZXN0KQorICAgICAgICB7CisgICAgICAgIGNhc2UgMjoKKyAgICAgICAg ICByZWdjYWNoZV9yYXdfcmVhZF91bnNpZ25lZCAocmVnY2FjaGUsIHRkZXAt PmFyZzIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICZ0bXB1bG9uZ2VzdCk7CisgICAgICAgICAgaWYgKHJlY29yZF9hcmNoX2xp c3RfYWRkX21lbSAoKENPUkVfQUREUikgdG1wdWxvbmdlc3QsCisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGRlcC0+c2l6ZV9p bnQpKQorICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICAgIGJyZWFr OworICAgICAgICBjYXNlIDE2OgorICAgICAgICAgIHJlZ2NhY2hlX3Jhd19y ZWFkX3Vuc2lnbmVkIChyZWdjYWNoZSwgdGRlcC0+YXJnMiwKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnRtcHVsb25nZXN0KTsK KyAgICAgICAgICBpZiAocmVjb3JkX2FyY2hfbGlzdF9hZGRfbWVtICgoQ09S RV9BRERSKSB0bXB1bG9uZ2VzdCwKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICB0ZGVwLT5zaXplX1RBU0tfQ09NTV9MRU4pKQor ICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICAgIGJyZWFrOworICAg ICAgICB9CiAgICAgICBicmVhazsKIAogICAgICAgLyogc3lzX3J0X3NpZ3Jl dHVybiAqLwpAQCAtMTM5NCwzNiArMTcyMiwzOSBAQCByZWNvcmRfbGludXhf c3lzdGVtX2NhbGwgKGludCBudW0sIHN0cnVjCiAKICAgICAgIC8qIHN5c19y dF9zaWdhY3Rpb24gKi8KICAgICBjYXNlIDE3NDoKLSAgICAgIHJlZ2NhY2hl X3Jhd19yZWFkIChyZWdjYWNoZSwgdGRlcC0+YXJnMywgKGdkYl9ieXRlICop ICYgdG1wdTMyKTsKLSAgICAgIGlmIChyZWNvcmRfYXJjaF9saXN0X2FkZF9t ZW0gKHRtcHUzMiwgdGRlcC0+c2l6ZV9zaWdhY3Rpb24pKQotCXJldHVybiAt MTsKKyAgICAgIHJlZ2NhY2hlX3Jhd19yZWFkX3Vuc2lnbmVkIChyZWdjYWNo ZSwgdGRlcC0+YXJnMywgJnRtcHVsb25nZXN0KTsKKyAgICAgIGlmIChyZWNv cmRfYXJjaF9saXN0X2FkZF9tZW0gKChDT1JFX0FERFIpIHRtcHVsb25nZXN0 LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGRlcC0+ c2l6ZV9zaWdhY3Rpb24pKQorICAgICAgICByZXR1cm4gLTE7CiAgICAgICBi cmVhazsKIAogICAgICAgLyogc3lzX3J0X3NpZ3Byb2NtYXNrICovCiAgICAg Y2FzZSAxNzU6Ci0gICAgICByZWdjYWNoZV9yYXdfcmVhZCAocmVnY2FjaGUs IHRkZXAtPmFyZzMsIChnZGJfYnl0ZSAqKSAmIHRtcHUzMik7Ci0gICAgICBp ZiAocmVjb3JkX2FyY2hfbGlzdF9hZGRfbWVtICh0bXB1MzIsIHRkZXAtPnNp emVfc2lnc2V0X3QpKQotCXJldHVybiAtMTsKKyAgICAgIHJlZ2NhY2hlX3Jh d19yZWFkX3Vuc2lnbmVkIChyZWdjYWNoZSwgdGRlcC0+YXJnMywgJnRtcHVs b25nZXN0KTsKKyAgICAgIGlmIChyZWNvcmRfYXJjaF9saXN0X2FkZF9tZW0g KChDT1JFX0FERFIpIHRtcHVsb25nZXN0LAorICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgdGRlcC0+c2l6ZV9zaWdzZXRfdCkpCisgICAg ICAgIHJldHVybiAtMTsKICAgICAgIGJyZWFrOwogCiAgICAgICAvKiBzeXNf cnRfc2lncGVuZGluZyAqLwogICAgIGNhc2UgMTc2OgotICAgICAgcmVnY2Fj aGVfcmF3X3JlYWQgKHJlZ2NhY2hlLCB0ZGVwLT5hcmcxLCAoZ2RiX2J5dGUg KikgJiB0bXB1MzIpOwotICAgICAgaWYgKHRtcHUzMikKLQl7Ci0JICB1aW50 MzJfdCBzaWdzZXRzaXplOwotCSAgcmVnY2FjaGVfcmF3X3JlYWQgKHJlZ2Nh Y2hlLCB0ZGVwLT5hcmcyLAotCQkJICAgICAoZ2RiX2J5dGUgKikgJiBzaWdz ZXRzaXplKTsKLQkgIGlmIChyZWNvcmRfYXJjaF9saXN0X2FkZF9tZW0gKHRt cHUzMiwgc2lnc2V0c2l6ZSkpCi0JICAgIHJldHVybiAtMTsKLQl9CisgICAg ICByZWdjYWNoZV9yYXdfcmVhZF91bnNpZ25lZCAocmVnY2FjaGUsIHRkZXAt PmFyZzEsICZ0bXB1bG9uZ2VzdCk7CisgICAgICBpZiAodG1wdWxvbmdlc3Qp CisgICAgICAgIHsKKyAgICAgICAgICBVTE9OR0VTVCBzaWdzZXRzaXplOwor ICAgICAgICAgIHJlZ2NhY2hlX3Jhd19yZWFkX3Vuc2lnbmVkIChyZWdjYWNo ZSwgdGRlcC0+YXJnMiwmc2lnc2V0c2l6ZSk7CisgICAgICAgICAgaWYgKHJl Y29yZF9hcmNoX2xpc3RfYWRkX21lbSAoKENPUkVfQUREUikgdG1wdWxvbmdl c3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg KGludCkgc2lnc2V0c2l6ZSkpCisgICAgICAgICAgICByZXR1cm4gLTE7Cisg ICAgICAgIH0KICAgICAgIGJyZWFrOwogCiAgICAgICAvKiBzeXNfcnRfc2ln dGltZWR3YWl0ICovCiAgICAgY2FzZSAxNzc6Ci0gICAgICByZWdjYWNoZV9y YXdfcmVhZCAocmVnY2FjaGUsIHRkZXAtPmFyZzIsIChnZGJfYnl0ZSAqKSAm IHRtcHUzMik7Ci0gICAgICBpZiAocmVjb3JkX2FyY2hfbGlzdF9hZGRfbWVt ICh0bXB1MzIsIHRkZXAtPnNpemVfc2lnaW5mb190KSkKLQlyZXR1cm4gLTE7 CisgICAgICByZWdjYWNoZV9yYXdfcmVhZF91bnNpZ25lZCAocmVnY2FjaGUs IHRkZXAtPmFyZzIsICZ0bXB1bG9uZ2VzdCk7CisgICAgICBpZiAocmVjb3Jk X2FyY2hfbGlzdF9hZGRfbWVtICgoQ09SRV9BRERSKSB0bXB1bG9uZ2VzdCwK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRkZXAtPnNp emVfc2lnaW5mb190KSkKKyAgICAgICAgcmV0dXJuIC0xOwogICAgICAgYnJl YWs7CiAKICAgICAgIC8qIHN5c19ydF9zaWdxdWV1ZWluZm8gKi8KQEAgLTE0 MzQsMTUgKzE3NjUsMTQgQEAgcmVjb3JkX2xpbnV4X3N5c3RlbV9jYWxsIChp bnQgbnVtLCBzdHJ1YwogCiAgICAgICAvKiBzeXNfcHJlYWQ2NCAqLwogICAg IGNhc2UgMTgwOgotICAgICAgcmVnY2FjaGVfcmF3X3JlYWQgKHJlZ2NhY2hl LCB0ZGVwLT5hcmcyLCAoZ2RiX2J5dGUgKikgJiB0bXB1MzIpOwotICAgICAg aWYgKHRtcHUzMikKLQl7Ci0JICB1aW50MzJfdCBjb3VudDsKLQkgIHJlZ2Nh Y2hlX3Jhd19yZWFkIChyZWdjYWNoZSwgdGRlcC0+YXJnMywKLQkJCSAgICAg KGdkYl9ieXRlICopICYgY291bnQpOwotCSAgaWYgKHJlY29yZF9hcmNoX2xp c3RfYWRkX21lbSAodG1wdTMyLCBjb3VudCkpCi0JICAgIHJldHVybiAtMTsK LQl9CisgICAgICByZWdjYWNoZV9yYXdfcmVhZF91bnNpZ25lZCAocmVnY2Fj aGUsIHRkZXAtPmFyZzIsICZ0bXB1bG9uZ2VzdCk7CisgICAgICBpZiAodG1w dWxvbmdlc3QpCisgICAgICAgIHsKKyAgICAgICAgICBVTE9OR0VTVCBjb3Vu dDsKKyAgICAgICAgICByZWdjYWNoZV9yYXdfcmVhZF91bnNpZ25lZCAocmVn Y2FjaGUsIHRkZXAtPmFyZzMsJmNvdW50KTsKKyAgICAgICAgICBpZiAocmVj b3JkX2FyY2hfbGlzdF9hZGRfbWVtICgoQ09SRV9BRERSKSB0bXB1bG9uZ2Vz dCwgKGludCkgY291bnQpKQorICAgICAgICAgICAgcmV0dXJuIC0xOworICAg ICAgICB9CiAgICAgICBicmVhazsKIAogICAgICAgLyogc3lzX3B3cml0ZTY0 ICovCkBAIC0xNDUzLDIyICsxNzgzLDIyIEBAIHJlY29yZF9saW51eF9zeXN0 ZW1fY2FsbCAoaW50IG51bSwgc3RydWMKIAogICAgICAgLyogc3lzX2dldGN3 ZCAqLwogICAgIGNhc2UgMTgzOgotICAgICAgcmVnY2FjaGVfcmF3X3JlYWQg KHJlZ2NhY2hlLCB0ZGVwLT5hcmcxLCAoZ2RiX2J5dGUgKikgJiB0bXB1MzIp OwotICAgICAgaWYgKHRtcHUzMikKLQl7Ci0JICB1aW50MzJfdCBzaXplOwot CSAgcmVnY2FjaGVfcmF3X3JlYWQgKHJlZ2NhY2hlLCB0ZGVwLT5hcmcyLAot CQkJICAgICAoZ2RiX2J5dGUgKikgJiBzaXplKTsKLQkgIGlmIChyZWNvcmRf YXJjaF9saXN0X2FkZF9tZW0gKHRtcHUzMiwgc2l6ZSkpCi0JICAgIHJldHVy biAtMTsKLQl9CisgICAgICByZWdjYWNoZV9yYXdfcmVhZF91bnNpZ25lZCAo cmVnY2FjaGUsIHRkZXAtPmFyZzEsICZ0bXB1bG9uZ2VzdCk7CisgICAgICBp ZiAodG1wdWxvbmdlc3QpCisgICAgICAgIHsKKyAgICAgICAgICBVTE9OR0VT VCBzaXplOworICAgICAgICAgIHJlZ2NhY2hlX3Jhd19yZWFkX3Vuc2lnbmVk IChyZWdjYWNoZSwgdGRlcC0+YXJnMiwgJnNpemUpOworICAgICAgICAgIGlm IChyZWNvcmRfYXJjaF9saXN0X2FkZF9tZW0gKChDT1JFX0FERFIpIHRtcHVs b25nZXN0LCAoaW50KSBzaXplKSkKKyAgICAgICAgICAgIHJldHVybiAtMTsK KyAgICAgICAgfQogICAgICAgYnJlYWs7CiAKICAgICAgIC8qIHN5c19jYXBn ZXQgKi8KICAgICBjYXNlIDE4NDoKLSAgICAgIHJlZ2NhY2hlX3Jhd19yZWFk IChyZWdjYWNoZSwgdGRlcC0+YXJnMiwgKGdkYl9ieXRlICopICYgdG1wdTMy KTsKLSAgICAgIGlmIChyZWNvcmRfYXJjaF9saXN0X2FkZF9tZW0gKHRtcHUz MiwgdGRlcC0+c2l6ZV9jYXBfdXNlcl9kYXRhX3QpKQotCXJldHVybiAtMTsK KyAgICAgIHJlZ2NhY2hlX3Jhd19yZWFkX3Vuc2lnbmVkIChyZWdjYWNoZSwg dGRlcC0+YXJnMiwgJnRtcHVsb25nZXN0KTsKKyAgICAgIGlmIChyZWNvcmRf YXJjaF9saXN0X2FkZF9tZW0gKChDT1JFX0FERFIpIHRtcHVsb25nZXN0LAor ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGRlcC0+c2l6 ZV9jYXBfdXNlcl9kYXRhX3QpKQorICAgICAgICByZXR1cm4gLTE7CiAgICAg ICBicmVhazsKIAogICAgICAgLyogc3lzX2NhcHNldCAqLwpAQCAtMTQ3Nywx NiArMTgwNywxOCBAQCByZWNvcmRfbGludXhfc3lzdGVtX2NhbGwgKGludCBu dW0sIHN0cnVjCiAKICAgICAgIC8qIHN5c19zaWdhbHRzdGFjayAqLwogICAg IGNhc2UgMTg2OgotICAgICAgcmVnY2FjaGVfcmF3X3JlYWQgKHJlZ2NhY2hl LCB0ZGVwLT5hcmcyLCAoZ2RiX2J5dGUgKikgJiB0bXB1MzIpOwotICAgICAg aWYgKHJlY29yZF9hcmNoX2xpc3RfYWRkX21lbSAodG1wdTMyLCB0ZGVwLT5z aXplX3N0YWNrX3QpKQotCXJldHVybiAtMTsKKyAgICAgIHJlZ2NhY2hlX3Jh d19yZWFkX3Vuc2lnbmVkIChyZWdjYWNoZSwgdGRlcC0+YXJnMiwgJnRtcHVs b25nZXN0KTsKKyAgICAgIGlmIChyZWNvcmRfYXJjaF9saXN0X2FkZF9tZW0g KChDT1JFX0FERFIpIHRtcHVsb25nZXN0LAorICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgdGRlcC0+c2l6ZV9zdGFja190KSkKKyAgICAg ICAgcmV0dXJuIC0xOwogICAgICAgYnJlYWs7CiAKICAgICAgIC8qIHN5c19z ZW5kZmlsZSAqLwogICAgIGNhc2UgMTg3OgotICAgICAgcmVnY2FjaGVfcmF3 X3JlYWQgKHJlZ2NhY2hlLCB0ZGVwLT5hcmczLCAoZ2RiX2J5dGUgKikgJiB0 bXB1MzIpOwotICAgICAgaWYgKHJlY29yZF9hcmNoX2xpc3RfYWRkX21lbSAo dG1wdTMyLCB0ZGVwLT5zaXplX29mZl90KSkKLQlyZXR1cm4gLTE7CisgICAg ICByZWdjYWNoZV9yYXdfcmVhZF91bnNpZ25lZCAocmVnY2FjaGUsIHRkZXAt PmFyZzMsICZ0bXB1bG9uZ2VzdCk7CisgICAgICBpZiAocmVjb3JkX2FyY2hf bGlzdF9hZGRfbWVtICgoQ09SRV9BRERSKSB0bXB1bG9uZ2VzdCwKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRkZXAtPnNpemVfb2Zm X3QpKQorICAgICAgICByZXR1cm4gLTE7CiAgICAgICBicmVhazsKIAogICAg ICAgLyogc3lzX25pX3N5c2NhbGwgKi8KQEAgLTE0OTksOSArMTgzMSwxMCBA QCByZWNvcmRfbGludXhfc3lzdGVtX2NhbGwgKGludCBudW0sIHN0cnVjCiAK ICAgICAgIC8qIHN5c19nZXRybGltaXQgKi8KICAgICBjYXNlIDE5MToKLSAg ICAgIHJlZ2NhY2hlX3Jhd19yZWFkIChyZWdjYWNoZSwgdGRlcC0+YXJnMiwg KGdkYl9ieXRlICopICYgdG1wdTMyKTsKLSAgICAgIGlmIChyZWNvcmRfYXJj aF9saXN0X2FkZF9tZW0gKHRtcHUzMiwgdGRlcC0+c2l6ZV9ybGltaXQpKQot CXJldHVybiAtMTsKKyAgICAgIHJlZ2NhY2hlX3Jhd19yZWFkX3Vuc2lnbmVk IChyZWdjYWNoZSwgdGRlcC0+YXJnMiwgJnRtcHVsb25nZXN0KTsKKyAgICAg IGlmIChyZWNvcmRfYXJjaF9saXN0X2FkZF9tZW0gKChDT1JFX0FERFIpIHRt cHVsb25nZXN0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgdGRlcC0+c2l6ZV9ybGltaXQpKQorICAgICAgICByZXR1cm4gLTE7CiAg ICAgICBicmVhazsKIAogICAgICAgLyogc3lzX21tYXAyICovCkBAIC0xNTIw LDkgKzE4NTMsMTAgQEAgcmVjb3JkX2xpbnV4X3N5c3RlbV9jYWxsIChpbnQg bnVtLCBzdHJ1YwogICAgIGNhc2UgMTk2OgogICAgICAgLyogc3lzX2ZzdGF0 NjQgKi8KICAgICBjYXNlIDE5NzoKLSAgICAgIHJlZ2NhY2hlX3Jhd19yZWFk IChyZWdjYWNoZSwgdGRlcC0+YXJnMiwgKGdkYl9ieXRlICopICYgdG1wdTMy KTsKLSAgICAgIGlmIChyZWNvcmRfYXJjaF9saXN0X2FkZF9tZW0gKHRtcHUz MiwgdGRlcC0+c2l6ZV9zdGF0NjQpKQotCXJldHVybiAtMTsKKyAgICAgIHJl Z2NhY2hlX3Jhd19yZWFkX3Vuc2lnbmVkIChyZWdjYWNoZSwgdGRlcC0+YXJn MiwgJnRtcHVsb25nZXN0KTsKKyAgICAgIGlmIChyZWNvcmRfYXJjaF9saXN0 X2FkZF9tZW0gKChDT1JFX0FERFIpIHRtcHVsb25nZXN0LAorICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgdGRlcC0+c2l6ZV9zdGF0NjQp KQorICAgICAgICByZXR1cm4gLTE7CiAgICAgICBicmVhazsKIAogICAgICAg Lyogc3lzX2xjaG93biAqLwpAQCAtMTU0MywxNiArMTg3NywxNiBAQCByZWNv cmRfbGludXhfc3lzdGVtX2NhbGwgKGludCBudW0sIHN0cnVjCiAKICAgICAg IC8qIHN5c19nZXRncm91cHMgKi8KICAgICBjYXNlIDIwNToKLSAgICAgIHJl Z2NhY2hlX3Jhd19yZWFkIChyZWdjYWNoZSwgdGRlcC0+YXJnMiwgKGdkYl9i eXRlICopICYgdG1wdTMyKTsKLSAgICAgIGlmICh0bXB1MzIpCi0JewotCSAg aW50IGdpZHNldHNpemU7Ci0JICByZWdjYWNoZV9yYXdfcmVhZCAocmVnY2Fj aGUsIHRkZXAtPmFyZzEsCi0JCQkgICAgIChnZGJfYnl0ZSAqKSAmIGdpZHNl dHNpemUpOwotCSAgaWYgKHJlY29yZF9hcmNoX2xpc3RfYWRkX21lbQotCSAg ICAgICh0bXB1MzIsIHRkZXAtPnNpemVfZ2lkX3QgKiBnaWRzZXRzaXplKSkK LQkgICAgcmV0dXJuIC0xOwotCX0KKyAgICAgIHJlZ2NhY2hlX3Jhd19yZWFk X3Vuc2lnbmVkIChyZWdjYWNoZSwgdGRlcC0+YXJnMiwgJnRtcHVsb25nZXN0 KTsKKyAgICAgIGlmICh0bXB1bG9uZ2VzdCkKKyAgICAgICAgeworICAgICAg ICAgIFVMT05HRVNUIGdpZHNldHNpemU7CisgICAgICAgICAgcmVnY2FjaGVf cmF3X3JlYWRfdW5zaWduZWQgKHJlZ2NhY2hlLCB0ZGVwLT5hcmcxLAorICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmZ2lkc2V0c2l6 ZSk7CisgICAgICAgICAgdG1waW50ID0gdGRlcC0+c2l6ZV9naWRfdCAqIChp bnQpIGdpZHNldHNpemU7CisgICAgICAgICAgaWYgKHJlY29yZF9hcmNoX2xp c3RfYWRkX21lbSAoKENPUkVfQUREUikgdG1wdWxvbmdlc3QsIHRtcGludCkp CisgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgIH0KICAgICAgIGJy ZWFrOwogCiAgICAgICAvKiBzeXNfc2V0Z3JvdXBzICovCkBAIC0xNTY1LDE1 ICsxODk5LDE1IEBAIHJlY29yZF9saW51eF9zeXN0ZW1fY2FsbCAoaW50IG51 bSwgc3RydWMKIAogICAgICAgLyogc3lzX2dldHJlc3VpZCAqLwogICAgIGNh c2UgMjA5OgotICAgICAgcmVnY2FjaGVfcmF3X3JlYWQgKHJlZ2NhY2hlLCB0 ZGVwLT5hcmcxLCAoZ2RiX2J5dGUgKikgJiB0bXB1MzIpOwotICAgICAgaWYg KHJlY29yZF9hcmNoX2xpc3RfYWRkX21lbSAodG1wdTMyLCB0ZGVwLT5zaXpl X3VpZF90KSkKLQlyZXR1cm4gLTE7Ci0gICAgICByZWdjYWNoZV9yYXdfcmVh ZCAocmVnY2FjaGUsIHRkZXAtPmFyZzIsIChnZGJfYnl0ZSAqKSAmIHRtcHUz Mik7Ci0gICAgICBpZiAocmVjb3JkX2FyY2hfbGlzdF9hZGRfbWVtICh0bXB1 MzIsIHRkZXAtPnNpemVfdWlkX3QpKQotCXJldHVybiAtMTsKLSAgICAgIHJl Z2NhY2hlX3Jhd19yZWFkIChyZWdjYWNoZSwgdGRlcC0+YXJnMywgKGdkYl9i eXRlICopICYgdG1wdTMyKTsKLSAgICAgIGlmIChyZWNvcmRfYXJjaF9saXN0 X2FkZF9tZW0gKHRtcHUzMiwgdGRlcC0+c2l6ZV91aWRfdCkpCi0JcmV0dXJu IC0xOworICAgICAgcmVnY2FjaGVfcmF3X3JlYWRfdW5zaWduZWQgKHJlZ2Nh Y2hlLCB0ZGVwLT5hcmcxLCAmdG1wdWxvbmdlc3QpOworICAgICAgaWYgKHJl Y29yZF9hcmNoX2xpc3RfYWRkX21lbSAoKENPUkVfQUREUikgdG1wdWxvbmdl c3QsIHRkZXAtPnNpemVfdWlkX3QpKQorICAgICAgICByZXR1cm4gLTE7Cisg ICAgICByZWdjYWNoZV9yYXdfcmVhZF91bnNpZ25lZCAocmVnY2FjaGUsIHRk ZXAtPmFyZzIsICZ0bXB1bG9uZ2VzdCk7CisgICAgICBpZiAocmVjb3JkX2Fy Y2hfbGlzdF9hZGRfbWVtICgoQ09SRV9BRERSKSB0bXB1bG9uZ2VzdCwgdGRl cC0+c2l6ZV91aWRfdCkpCisgICAgICAgIHJldHVybiAtMTsKKyAgICAgIHJl Z2NhY2hlX3Jhd19yZWFkX3Vuc2lnbmVkIChyZWdjYWNoZSwgdGRlcC0+YXJn MywgJnRtcHVsb25nZXN0KTsKKyAgICAgIGlmIChyZWNvcmRfYXJjaF9saXN0 X2FkZF9tZW0gKChDT1JFX0FERFIpIHRtcHVsb25nZXN0LCB0ZGVwLT5zaXpl X3VpZF90KSkKKyAgICAgICAgcmV0dXJuIC0xOwogICAgICAgYnJlYWs7CiAK ICAgICAgIC8qIHN5c19zZXRyZXNnaWQgKi8KQEAgLTE1ODIsMTUgKzE5MTYs MTUgQEAgcmVjb3JkX2xpbnV4X3N5c3RlbV9jYWxsIChpbnQgbnVtLCBzdHJ1 YwogCiAgICAgICAvKiBzeXNfZ2V0cmVzZ2lkICovCiAgICAgY2FzZSAyMTE6 Ci0gICAgICByZWdjYWNoZV9yYXdfcmVhZCAocmVnY2FjaGUsIHRkZXAtPmFy ZzEsIChnZGJfYnl0ZSAqKSAmIHRtcHUzMik7Ci0gICAgICBpZiAocmVjb3Jk X2FyY2hfbGlzdF9hZGRfbWVtICh0bXB1MzIsIHRkZXAtPnNpemVfZ2lkX3Qp KQotCXJldHVybiAtMTsKLSAgICAgIHJlZ2NhY2hlX3Jhd19yZWFkIChyZWdj YWNoZSwgdGRlcC0+YXJnMiwgKGdkYl9ieXRlICopICYgdG1wdTMyKTsKLSAg ICAgIGlmIChyZWNvcmRfYXJjaF9saXN0X2FkZF9tZW0gKHRtcHUzMiwgdGRl cC0+c2l6ZV9naWRfdCkpCi0JcmV0dXJuIC0xOwotICAgICAgcmVnY2FjaGVf cmF3X3JlYWQgKHJlZ2NhY2hlLCB0ZGVwLT5hcmczLCAoZ2RiX2J5dGUgKikg JiB0bXB1MzIpOwotICAgICAgaWYgKHJlY29yZF9hcmNoX2xpc3RfYWRkX21l bSAodG1wdTMyLCB0ZGVwLT5zaXplX2dpZF90KSkKLQlyZXR1cm4gLTE7Cisg ICAgICByZWdjYWNoZV9yYXdfcmVhZF91bnNpZ25lZCAocmVnY2FjaGUsIHRk ZXAtPmFyZzEsICZ0bXB1bG9uZ2VzdCk7CisgICAgICBpZiAocmVjb3JkX2Fy Y2hfbGlzdF9hZGRfbWVtICgoQ09SRV9BRERSKSB0bXB1bG9uZ2VzdCwgdGRl cC0+c2l6ZV9naWRfdCkpCisgICAgICAgIHJldHVybiAtMTsKKyAgICAgIHJl Z2NhY2hlX3Jhd19yZWFkX3Vuc2lnbmVkIChyZWdjYWNoZSwgdGRlcC0+YXJn MiwgJnRtcHVsb25nZXN0KTsKKyAgICAgIGlmIChyZWNvcmRfYXJjaF9saXN0 X2FkZF9tZW0gKChDT1JFX0FERFIpIHRtcHVsb25nZXN0LCB0ZGVwLT5zaXpl X2dpZF90KSkKKyAgICAgICAgcmV0dXJuIC0xOworICAgICAgcmVnY2FjaGVf cmF3X3JlYWRfdW5zaWduZWQgKHJlZ2NhY2hlLCB0ZGVwLT5hcmczLCAmdG1w dWxvbmdlc3QpOworICAgICAgaWYgKHJlY29yZF9hcmNoX2xpc3RfYWRkX21l bSAoKENPUkVfQUREUikgdG1wdWxvbmdlc3QsIHRkZXAtPnNpemVfZ2lkX3Qp KQorICAgICAgICByZXR1cm4gLTE7CiAgICAgICBicmVhazsKIAogICAgICAg Lyogc3lzX2Nob3duICovCkBAIC0xNjA5LDkgKzE5NDMsMTAgQEAgcmVjb3Jk X2xpbnV4X3N5c3RlbV9jYWxsIChpbnQgbnVtLCBzdHJ1YwogCiAgICAgICAv KiBzeXNfbWluY29yZSAqLwogICAgIGNhc2UgMjE4OgotICAgICAgcmVnY2Fj aGVfcmF3X3JlYWQgKHJlZ2NhY2hlLCB0ZGVwLT5hcmczLCAoZ2RiX2J5dGUg KikgJiB0bXB1MzIpOwotICAgICAgaWYgKHJlY29yZF9hcmNoX2xpc3RfYWRk X21lbSAodG1wdTMyLCB0ZGVwLT5zaXplX1BBR0VfU0laRSkpCi0JcmV0dXJu IC0xOworICAgICAgcmVnY2FjaGVfcmF3X3JlYWRfdW5zaWduZWQgKHJlZ2Nh Y2hlLCB0ZGVwLT5hcmczLCAmdG1wdWxvbmdlc3QpOworICAgICAgaWYgKHJl Y29yZF9hcmNoX2xpc3RfYWRkX21lbSAoKENPUkVfQUREUikgdG1wdWxvbmdl c3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZGVw LT5zaXplX1BBR0VfU0laRSkpCisgICAgICAgIHJldHVybiAtMTsKICAgICAg IGJyZWFrOwogCiAgICAgICAvKiBzeXNfbWFkdmlzZSAqLwpAQCAtMTYyMSwz MCArMTk1NiwzMiBAQCByZWNvcmRfbGludXhfc3lzdGVtX2NhbGwgKGludCBu dW0sIHN0cnVjCiAgICAgICAvKiBzeXNfZ2V0ZGVudHM2NCAqLwogICAgIGNh c2UgMjIwOgogICAgICAgewotCXVpbnQzMl90IGNvdW50OwotCXJlZ2NhY2hl X3Jhd19yZWFkIChyZWdjYWNoZSwgdGRlcC0+YXJnMiwKLQkJCSAgIChnZGJf Ynl0ZSAqKSAmIHRtcHUzMik7Ci0JcmVnY2FjaGVfcmF3X3JlYWQgKHJlZ2Nh Y2hlLCB0ZGVwLT5hcmczLCAoZ2RiX2J5dGUgKikgJiBjb3VudCk7Ci0JaWYg KHJlY29yZF9hcmNoX2xpc3RfYWRkX21lbSAodG1wdTMyLCB0ZGVwLT5zaXpl X2RpcmVudDY0ICogY291bnQpKQotCSAgcmV0dXJuIC0xOworICAgICAgICBV TE9OR0VTVCBjb3VudDsKKyAgICAgICAgcmVnY2FjaGVfcmF3X3JlYWRfdW5z aWduZWQgKHJlZ2NhY2hlLCB0ZGVwLT5hcmcyLAorICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgJnRtcHVsb25nZXN0KTsKKyAgICAgICAg cmVnY2FjaGVfcmF3X3JlYWRfdW5zaWduZWQgKHJlZ2NhY2hlLCB0ZGVwLT5h cmczLCAmY291bnQpOworICAgICAgICBpZiAocmVjb3JkX2FyY2hfbGlzdF9h ZGRfbWVtICgoQ09SRV9BRERSKSB0bXB1bG9uZ2VzdCwKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgdGRlcC0+c2l6ZV9kaXJlbnQ2 NCAqIGNvdW50KSkKKyAgICAgICAgICByZXR1cm4gLTE7CiAgICAgICB9CiAg ICAgICBicmVhazsKIAogICAgICAgLyogc3lzX2ZjbnRsNjQgKi8KICAgICBj YXNlIDIyMToKLSAgICAgIHJlZ2NhY2hlX3Jhd19yZWFkIChyZWdjYWNoZSwg dGRlcC0+YXJnMiwgKGdkYl9ieXRlICopICYgdG1wdTMyKTsKLSAgICAgIGlm ICh0bXB1MzIgPT0gdGRlcC0+ZmNudGxfRl9HRVRMSzY0KQorICAgICAgcmVn Y2FjaGVfcmF3X3JlYWRfdW5zaWduZWQgKHJlZ2NhY2hlLCB0ZGVwLT5hcmcy LCAmdG1wdWxvbmdlc3QpOworICAgICAgaWYgKHRtcHVsb25nZXN0ID09IHRk ZXAtPmZjbnRsX0ZfR0VUTEs2NCkKICAgICAgICAgewotCSAgcmVnY2FjaGVf cmF3X3JlYWQgKHJlZ2NhY2hlLCB0ZGVwLT5hcmczLAotCQkJICAgICAoZ2Ri X2J5dGUgKikgJiB0bXB1MzIpOwotCSAgaWYgKHJlY29yZF9hcmNoX2xpc3Rf YWRkX21lbSAodG1wdTMyLCB0ZGVwLT5zaXplX2Zsb2NrNjQpKQotCSAgICBy ZXR1cm4gLTE7Ci0JfQotICAgICAgZWxzZSBpZiAodG1wdTMyICE9IHRkZXAt PmZjbnRsX0ZfU0VUTEs2NAotCSAgICAgICAmJiB0bXB1MzIgIT0gdGRlcC0+ ZmNudGxfRl9TRVRMS1c2NCkKKyAgICAgICAgICByZWdjYWNoZV9yYXdfcmVh ZF91bnNpZ25lZCAocmVnY2FjaGUsIHRkZXAtPmFyZzMsCisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICZ0bXB1bG9uZ2VzdCk7Cisg ICAgICAgICAgaWYgKHJlY29yZF9hcmNoX2xpc3RfYWRkX21lbSAoKENPUkVf QUREUikgdG1wdWxvbmdlc3QsCisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgdGRlcC0+c2l6ZV9mbG9jazY0KSkKKyAgICAgICAg ICAgIHJldHVybiAtMTsKKyAgICAgICAgfQorICAgICAgZWxzZSBpZiAodG1w dWxvbmdlc3QgIT0gdGRlcC0+ZmNudGxfRl9TRVRMSzY0CisgICAgICAgICAg ICAgICAmJiB0bXB1bG9uZ2VzdCAhPSB0ZGVwLT5mY250bF9GX1NFVExLVzY0 KQogICAgICAgICB7Ci0JICBnb3RvIHN5c19mY250bDsKLQl9CisgICAgICAg ICAgZ290byBzeXNfZmNudGw7CisgICAgICAgIH0KICAgICAgIGJyZWFrOwog CiAgICAgICAvKiBzeXNfbmlfc3lzY2FsbCAqLwpAQCAtMTY2OSwxNSArMjAw NiwxNCBAQCByZWNvcmRfbGludXhfc3lzdGVtX2NhbGwgKGludCBudW0sIHN0 cnVjCiAgICAgY2FzZSAyMzA6CiAgICAgICAvKiBzeXNfZmdldHhhdHRyICov CiAgICAgY2FzZSAyMzE6Ci0gICAgICByZWdjYWNoZV9yYXdfcmVhZCAocmVn Y2FjaGUsIHRkZXAtPmFyZzMsIChnZGJfYnl0ZSAqKSAmIHRtcHUzMik7Ci0g ICAgICBpZiAodG1wdTMyKQotCXsKLQkgIHVpbnQzMl90IHNpemU7Ci0JICBy ZWdjYWNoZV9yYXdfcmVhZCAocmVnY2FjaGUsIHRkZXAtPmFyZzQsCi0JCQkg ICAgIChnZGJfYnl0ZSAqKSAmIHNpemUpOwotCSAgaWYgKHJlY29yZF9hcmNo X2xpc3RfYWRkX21lbSAodG1wdTMyLCBzaXplKSkKLQkgICAgcmV0dXJuIC0x OwotCX0KKyAgICAgIHJlZ2NhY2hlX3Jhd19yZWFkX3Vuc2lnbmVkIChyZWdj YWNoZSwgdGRlcC0+YXJnMywgJnRtcHVsb25nZXN0KTsKKyAgICAgIGlmICh0 bXB1bG9uZ2VzdCkKKyAgICAgICAgeworICAgICAgICAgIFVMT05HRVNUIHNp emU7CisgICAgICAgICAgcmVnY2FjaGVfcmF3X3JlYWRfdW5zaWduZWQgKHJl Z2NhY2hlLCB0ZGVwLT5hcmc0LCAmc2l6ZSk7CisgICAgICAgICAgaWYgKHJl Y29yZF9hcmNoX2xpc3RfYWRkX21lbSAoKENPUkVfQUREUikgdG1wdWxvbmdl c3QsIChpbnQpIHNpemUpKQorICAgICAgICAgICAgcmV0dXJuIC0xOworICAg ICAgICB9CiAgICAgICBicmVhazsKIAogICAgICAgLyogc3lzX2xpc3R4YXR0 ciAqLwpAQCAtMTY4NiwxNSArMjAyMiwxNCBAQCByZWNvcmRfbGludXhfc3lz dGVtX2NhbGwgKGludCBudW0sIHN0cnVjCiAgICAgY2FzZSAyMzM6CiAgICAg ICAvKiBzeXNfZmxpc3R4YXR0ciAqLwogICAgIGNhc2UgMjM0OgotICAgICAg cmVnY2FjaGVfcmF3X3JlYWQgKHJlZ2NhY2hlLCB0ZGVwLT5hcmcyLCAoZ2Ri X2J5dGUgKikgJiB0bXB1MzIpOwotICAgICAgaWYgKHRtcHUzMikKLQl7Ci0J ICB1aW50MzJfdCBzaXplOwotCSAgcmVnY2FjaGVfcmF3X3JlYWQgKHJlZ2Nh Y2hlLCB0ZGVwLT5hcmczLAotCQkJICAgICAoZ2RiX2J5dGUgKikgJiBzaXpl KTsKLQkgIGlmIChyZWNvcmRfYXJjaF9saXN0X2FkZF9tZW0gKHRtcHUzMiwg c2l6ZSkpCi0JICAgIHJldHVybiAtMTsKLQl9CisgICAgICByZWdjYWNoZV9y YXdfcmVhZF91bnNpZ25lZCAocmVnY2FjaGUsIHRkZXAtPmFyZzIsICZ0bXB1 bG9uZ2VzdCk7CisgICAgICBpZiAodG1wdWxvbmdlc3QpCisgICAgICAgIHsK KyAgICAgICAgICBVTE9OR0VTVCBzaXplOworICAgICAgICAgIHJlZ2NhY2hl X3Jhd19yZWFkX3Vuc2lnbmVkIChyZWdjYWNoZSwgdGRlcC0+YXJnMywgJnNp emUpOworICAgICAgICAgIGlmIChyZWNvcmRfYXJjaF9saXN0X2FkZF9tZW0g KChDT1JFX0FERFIpIHRtcHVsb25nZXN0LCAoaW50KSBzaXplKSkKKyAgICAg ICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgfQogICAgICAgYnJlYWs7CiAK ICAgICAgIC8qIHN5c19yZW1vdmV4YXR0ciAqLwpAQCAtMTcwOSw5ICsyMDQ0 LDEwIEBAIHJlY29yZF9saW51eF9zeXN0ZW1fY2FsbCAoaW50IG51bSwgc3Ry dWMKIAogICAgICAgLyogc3lzX3NlbmRmaWxlNjQgKi8KICAgICBjYXNlIDIz OToKLSAgICAgIHJlZ2NhY2hlX3Jhd19yZWFkIChyZWdjYWNoZSwgdGRlcC0+ YXJnMywgKGdkYl9ieXRlICopICYgdG1wdTMyKTsKLSAgICAgIGlmIChyZWNv cmRfYXJjaF9saXN0X2FkZF9tZW0gKHRtcHUzMiwgdGRlcC0+c2l6ZV9sb2Zm X3QpKQotCXJldHVybiAtMTsKKyAgICAgIHJlZ2NhY2hlX3Jhd19yZWFkX3Vu c2lnbmVkIChyZWdjYWNoZSwgdGRlcC0+YXJnMywgJnRtcHVsb25nZXN0KTsK KyAgICAgIGlmIChyZWNvcmRfYXJjaF9saXN0X2FkZF9tZW0gKChDT1JFX0FE RFIpIHRtcHVsb25nZXN0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgdGRlcC0+c2l6ZV9sb2ZmX3QpKQorICAgICAgICByZXR1cm4g LTE7CiAgICAgICBicmVhazsKIAogICAgICAgLyogc3lzX2Z1dGV4ICovCkBA IC0xNzIyLDM1ICsyMDU4LDM2IEBAIHJlY29yZF9saW51eF9zeXN0ZW1fY2Fs bCAoaW50IG51bSwgc3RydWMKIAogICAgICAgLyogc3lzX3NjaGVkX2dldGFm ZmluaXR5ICovCiAgICAgY2FzZSAyNDI6Ci0gICAgICByZWdjYWNoZV9yYXdf cmVhZCAocmVnY2FjaGUsIHRkZXAtPmFyZzMsIChnZGJfYnl0ZSAqKSAmIHRt cHUzMik7Ci0gICAgICBpZiAodG1wdTMyKQotCXsKLQkgIHVpbnQzMl90IGxl bjsKLQkgIHJlZ2NhY2hlX3Jhd19yZWFkIChyZWdjYWNoZSwgdGRlcC0+YXJn MiwgKGdkYl9ieXRlICopICYgbGVuKTsKLQkgIGlmIChyZWNvcmRfYXJjaF9s aXN0X2FkZF9tZW0gKHRtcHUzMiwgbGVuKSkKLQkgICAgcmV0dXJuIC0xOwot CX0KKyAgICAgIHJlZ2NhY2hlX3Jhd19yZWFkX3Vuc2lnbmVkIChyZWdjYWNo ZSwgdGRlcC0+YXJnMywgJnRtcHVsb25nZXN0KTsKKyAgICAgIGlmICh0bXB1 bG9uZ2VzdCkKKyAgICAgICAgeworICAgICAgICAgIFVMT05HRVNUIGxlbjsK KyAgICAgICAgICByZWdjYWNoZV9yYXdfcmVhZF91bnNpZ25lZCAocmVnY2Fj aGUsIHRkZXAtPmFyZzIsICZsZW4pOworICAgICAgICAgIGlmIChyZWNvcmRf YXJjaF9saXN0X2FkZF9tZW0gKChDT1JFX0FERFIpIHRtcHVsb25nZXN0LCAo aW50KSBsZW4pKQorICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICB9 CiAgICAgICBicmVhazsKIAogICAgICAgLyogc3lzX3NldF90aHJlYWRfYXJl YSAqLwogICAgIGNhc2UgMjQzOgotICAgICAgcmVnY2FjaGVfcmF3X3JlYWQg KHJlZ2NhY2hlLCB0ZGVwLT5hcmcxLCAoZ2RiX2J5dGUgKikgJiB0bXB1MzIp OwotICAgICAgaWYgKHJlY29yZF9hcmNoX2xpc3RfYWRkX21lbSAodG1wdTMy LCB0ZGVwLT5zaXplX2ludCkpCi0JcmV0dXJuIC0xOworICAgICAgcmVnY2Fj aGVfcmF3X3JlYWRfdW5zaWduZWQgKHJlZ2NhY2hlLCB0ZGVwLT5hcmcxLCAm dG1wdWxvbmdlc3QpOworICAgICAgaWYgKHJlY29yZF9hcmNoX2xpc3RfYWRk X21lbSAoKENPUkVfQUREUikgdG1wdWxvbmdlc3QsIHRkZXAtPnNpemVfaW50 KSkKKyAgICAgICAgcmV0dXJuIC0xOwogICAgICAgYnJlYWs7CiAKICAgICAg IC8qIHN5c19nZXRfdGhyZWFkX2FyZWEgKi8KICAgICBjYXNlIDI0NDoKLSAg ICAgIHJlZ2NhY2hlX3Jhd19yZWFkIChyZWdjYWNoZSwgdGRlcC0+YXJnMSwg KGdkYl9ieXRlICopICYgdG1wdTMyKTsKLSAgICAgIGlmIChyZWNvcmRfYXJj aF9saXN0X2FkZF9tZW0gKHRtcHUzMiwgdGRlcC0+c2l6ZV91c2VyX2Rlc2Mp KQotCXJldHVybiAtMTsKKyAgICAgIHJlZ2NhY2hlX3Jhd19yZWFkX3Vuc2ln bmVkIChyZWdjYWNoZSwgdGRlcC0+YXJnMSwgJnRtcHVsb25nZXN0KTsKKyAg ICAgIGlmIChyZWNvcmRfYXJjaF9saXN0X2FkZF9tZW0gKChDT1JFX0FERFIp IHRtcHVsb25nZXN0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgdGRlcC0+c2l6ZV91c2VyX2Rlc2MpKQorICAgICAgICByZXR1cm4g LTE7CiAgICAgICBicmVhazsKIAogICAgICAgLyogc3lzX2lvX3NldHVwICov CiAgICAgY2FzZSAyNDU6Ci0gICAgICByZWdjYWNoZV9yYXdfcmVhZCAocmVn Y2FjaGUsIHRkZXAtPmFyZzIsIChnZGJfYnl0ZSAqKSAmIHRtcHUzMik7Ci0g ICAgICBpZiAocmVjb3JkX2FyY2hfbGlzdF9hZGRfbWVtICh0bXB1MzIsIHRk ZXAtPnNpemVfbG9uZykpCi0JcmV0dXJuIC0xOworICAgICAgcmVnY2FjaGVf cmF3X3JlYWRfdW5zaWduZWQgKHJlZ2NhY2hlLCB0ZGVwLT5hcmcyLCAmdG1w dWxvbmdlc3QpOworICAgICAgaWYgKHJlY29yZF9hcmNoX2xpc3RfYWRkX21l bSAoKENPUkVfQUREUikgdG1wdWxvbmdlc3QsIHRkZXAtPnNpemVfbG9uZykp CisgICAgICAgIHJldHVybiAtMTsKICAgICAgIGJyZWFrOwogCiAgICAgICAv KiBzeXNfaW9fZGVzdHJveSAqLwpAQCAtMTc1OSw0OSArMjA5Niw1NyBAQCBy ZWNvcmRfbGludXhfc3lzdGVtX2NhbGwgKGludCBudW0sIHN0cnVjCiAKICAg ICAgIC8qIHN5c19pb19nZXRldmVudHMgKi8KICAgICBjYXNlIDI0NzoKLSAg ICAgIHJlZ2NhY2hlX3Jhd19yZWFkIChyZWdjYWNoZSwgdGRlcC0+YXJnNCwg KGdkYl9ieXRlICopICYgdG1wdTMyKTsKLSAgICAgIGlmICh0bXB1MzIpCi0J ewotCSAgaW50MzJfdCBucjsKLQkgIHJlZ2NhY2hlX3Jhd19yZWFkIChyZWdj YWNoZSwgdGRlcC0+YXJnMywgKGdkYl9ieXRlICopICYgbnIpOwotCSAgaWYg KHJlY29yZF9hcmNoX2xpc3RfYWRkX21lbSAodG1wdTMyLCBuciAqIHRkZXAt PnNpemVfaW9fZXZlbnQpKQotCSAgICByZXR1cm4gLTE7Ci0JfQorICAgICAg cmVnY2FjaGVfcmF3X3JlYWRfdW5zaWduZWQgKHJlZ2NhY2hlLCB0ZGVwLT5h cmc0LCAmdG1wdWxvbmdlc3QpOworICAgICAgaWYgKHRtcHVsb25nZXN0KQor ICAgICAgICB7CisgICAgICAgICAgVUxPTkdFU1QgbnI7CisgICAgICAgICAg cmVnY2FjaGVfcmF3X3JlYWRfdW5zaWduZWQgKHJlZ2NhY2hlLCB0ZGVwLT5h cmczLCAmbnIpOworICAgICAgICAgIGlmIChyZWNvcmRfYXJjaF9saXN0X2Fk ZF9tZW0gKChDT1JFX0FERFIpIHRtcHVsb25nZXN0LAorICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5yICogdGRlcC0+c2l6ZV9p b19ldmVudCkpCisgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgIH0K ICAgICAgIGJyZWFrOwogCiAgICAgICAvKiBzeXNfaW9fc3VibWl0ICovCiAg ICAgY2FzZSAyNDg6Ci0gICAgICByZWdjYWNoZV9yYXdfcmVhZCAocmVnY2Fj aGUsIHRkZXAtPmFyZzMsIChnZGJfYnl0ZSAqKSAmIHRtcHUzMik7Ci0gICAg ICBpZiAodG1wdTMyKQotCXsKLQkgIGludDMyX3QgaSwgbnI7Ci0JICB1aW50 MzJfdCAqaW9jYnA7Ci0JICByZWdjYWNoZV9yYXdfcmVhZCAocmVnY2FjaGUs IHRkZXAtPmFyZzIsIChnZGJfYnl0ZSAqKSAmIG5yKTsKLQkgIGlvY2JwID0g KHVpbnQzMl90ICopIGFsbG9jYSAobnIgKiB0ZGVwLT5zaXplX2ludCk7Ci0J ICBpZiAodGFyZ2V0X3JlYWRfbWVtb3J5Ci0JICAgICAgKHRtcHUzMiwgKGdk Yl9ieXRlICopIGlvY2JwLCBuciAqIHRkZXAtPnNpemVfaW50KSkKLQkgICAg ewotCSAgICAgIGlmIChyZWNvcmRfZGVidWcpCi0JCWZwcmludGZfdW5maWx0 ZXJlZCAoZ2RiX3N0ZGxvZywKLQkJCQkgICAgIlByb2Nlc3MgcmVjb3JkOiBl cnJvciByZWFkaW5nIG1lbW9yeSAiCi0JCQkJICAgICJhdCBhZGRyID0gJXMg bGVuID0gJXUuXG4iLAotCQkJCSAgICBwYWRkcmVzcyAoZ2RiYXJjaCwgdG1w dTMyKSwKLQkJCQkgICAgKGludCkobnIgKiB0ZGVwLT5zaXplX2ludCkpOwot CSAgICAgIHJldHVybiAtMTsKLQkgICAgfQotCSAgZm9yIChpID0gMDsgaSA8 IG5yOyBpKyspCi0JICAgIHsKLQkgICAgICBpZiAocmVjb3JkX2FyY2hfbGlz dF9hZGRfbWVtIChpb2NicFtpXSwgdGRlcC0+c2l6ZV9pb2NiKSkKLQkJcmV0 dXJuIC0xOwotCSAgICB9Ci0JfQorICAgICAgcmVnY2FjaGVfcmF3X3JlYWRf dW5zaWduZWQgKHJlZ2NhY2hlLCB0ZGVwLT5hcmczLCAmdG1wdWxvbmdlc3Qp OworICAgICAgaWYgKHRtcHVsb25nZXN0KQorICAgICAgICB7CisgICAgICAg ICAgVUxPTkdFU1QgbnIsIGk7CisgICAgICAgICAgZ2RiX2J5dGUgKmlvY2Jw OworCisgICAgICAgICAgcmVnY2FjaGVfcmF3X3JlYWRfdW5zaWduZWQgKHJl Z2NhY2hlLCB0ZGVwLT5hcmcyLCAmbnIpOworICAgICAgICAgIGlvY2JwID0g YWxsb2NhIChuciAqIHRkZXAtPnNpemVfcG9pbnRlcik7CisgICAgICAgICAg aWYgKHRhcmdldF9yZWFkX21lbW9yeSAoKENPUkVfQUREUikgdG1wdWxvbmdl c3QsIGlvY2JwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IG5yICogdGRlcC0+c2l6ZV9wb2ludGVyKSkKKyAgICAgICAgICAgIHsKKyAg ICAgICAgICAgICAgaWYgKHJlY29yZF9kZWJ1ZykKKyAgICAgICAgICAgICAg ICBmcHJpbnRmX3VuZmlsdGVyZWQgKGdkYl9zdGRsb2csCisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAiUHJvY2VzcyByZWNvcmQ6IGVy cm9yIHJlYWRpbmcgbWVtb3J5ICIKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICJhdCBhZGRyID0gMHglcyBsZW4gPSAldS5cbiIsCisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPVVRQVVRfUkVH ICh0bXB1bG9uZ2VzdCwgdGRlcC0+YXJnMiksCisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAoaW50KSAobnIgKiB0ZGVwLT5zaXplX3Bv aW50ZXIpKTsKKyAgICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICAg ICAgfQorICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBucjsgaSsrKQorICAg ICAgICAgICAgeworICAgICAgICAgICAgICB0bXBhZGRyCisgICAgICAgICAg ICAgICAgPSAoQ09SRV9BRERSKSBleHRyYWN0X3Vuc2lnbmVkX2ludGVnZXIg KGlvY2JwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICB0ZGVwLT5zaXplX3BvaW50ZXIsCisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIGJ5dGVfb3JkZXIpOworICAgICAgICAgICAgICBpZiAocmVjb3Jk X2FyY2hfbGlzdF9hZGRfbWVtICh0bXBhZGRyLCB0ZGVwLT5zaXplX2lvY2Ip KQorICAgICAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgICAgICAg aW9jYnAgKz0gdGRlcC0+c2l6ZV9wb2ludGVyOworICAgICAgICAgICAgfQor ICAgICAgICB9CiAgICAgICBicmVhazsKIAogICAgICAgLyogc3lzX2lvX2Nh bmNlbCAqLwogICAgIGNhc2UgMjQ5OgotICAgICAgcmVnY2FjaGVfcmF3X3Jl YWQgKHJlZ2NhY2hlLCB0ZGVwLT5hcmczLCAoZ2RiX2J5dGUgKikgJiB0bXB1 MzIpOwotICAgICAgaWYgKHJlY29yZF9hcmNoX2xpc3RfYWRkX21lbSAodG1w dTMyLCB0ZGVwLT5zaXplX2lvX2V2ZW50KSkKLQlyZXR1cm4gLTE7CisgICAg ICByZWdjYWNoZV9yYXdfcmVhZF91bnNpZ25lZCAocmVnY2FjaGUsIHRkZXAt PmFyZzMsICZ0bXB1bG9uZ2VzdCk7CisgICAgICBpZiAocmVjb3JkX2FyY2hf bGlzdF9hZGRfbWVtICgoQ09SRV9BRERSKSB0bXB1bG9uZ2VzdCwKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRkZXAtPnNpemVfaW9f ZXZlbnQpKQorICAgICAgICByZXR1cm4gLTE7CiAgICAgICBicmVhazsKIAog ICAgICAgLyogc3lzX2ZhZHZpc2U2NCAqLwpAQCAtMTgxMywyOCArMjE1OCwy NyBAQCByZWNvcmRfbGludXhfc3lzdGVtX2NhbGwgKGludCBudW0sIHN0cnVj CiAgICAgICAvKiBzeXNfZXhpdF9ncm91cCAqLwogICAgIGNhc2UgMjUyOgog ICAgICAgewotCWludCBxOwotCXRhcmdldF90ZXJtaW5hbF9vdXJzICgpOwot CXEgPQotCSAgeXF1ZXJ5IChfKCJUaGUgbmV4dCBpbnN0cnVjdGlvbiBpcyBz eXNjYWxsIGV4aXRfZ3JvdXAuICAiCi0JCSAgICAiSXQgd2lsbCBtYWtlIHRo ZSBwcm9ncmFtIGV4aXQuICAiCi0JCSAgICAiRG8geW91IHdhbnQgdG8gc3Rv cCB0aGUgcHJvZ3JhbT8iKSk7Ci0JdGFyZ2V0X3Rlcm1pbmFsX2luZmVyaW9y ICgpOwotCWlmIChxKQotCSAgcmV0dXJuIDE7CisgICAgICAgIGludCBxOwor ICAgICAgICB0YXJnZXRfdGVybWluYWxfb3VycyAoKTsKKyAgICAgICAgcSA9 IHlxdWVyeSAoXygiVGhlIG5leHQgaW5zdHJ1Y3Rpb24gaXMgc3lzY2FsbCBl eGl0X2dyb3VwLiAgIgorICAgICAgICAgICAgICAgICAgICAgICJJdCB3aWxs IG1ha2UgdGhlIHByb2dyYW0gZXhpdC4gICIKKyAgICAgICAgICAgICAgICAg ICAgICAiRG8geW91IHdhbnQgdG8gc3RvcCB0aGUgcHJvZ3JhbT8iKSk7Cisg ICAgICAgIHRhcmdldF90ZXJtaW5hbF9pbmZlcmlvciAoKTsKKyAgICAgICAg aWYgKHEpCisgICAgICAgICAgcmV0dXJuIDE7CiAgICAgICB9CiAgICAgICBi cmVhazsKIAogICAgICAgLyogc3lzX2xvb2t1cF9kY29va2llICovCiAgICAg Y2FzZSAyNTM6Ci0gICAgICByZWdjYWNoZV9yYXdfcmVhZCAocmVnY2FjaGUs IHRkZXAtPmFyZzIsIChnZGJfYnl0ZSAqKSAmIHRtcHUzMik7Ci0gICAgICBp ZiAodG1wdTMyKQotCXsKLQkgIHVpbnQzMl90IGxlbjsKLQkgIHJlZ2NhY2hl X3Jhd19yZWFkIChyZWdjYWNoZSwgdGRlcC0+YXJnMywgKGdkYl9ieXRlICop ICYgbGVuKTsKLQkgIGlmIChyZWNvcmRfYXJjaF9saXN0X2FkZF9tZW0gKHRt cHUzMiwgbGVuKSkKLQkgICAgcmV0dXJuIC0xOwotCX0KKyAgICAgIHJlZ2Nh Y2hlX3Jhd19yZWFkX3Vuc2lnbmVkIChyZWdjYWNoZSwgdGRlcC0+YXJnMiwg JnRtcHVsb25nZXN0KTsKKyAgICAgIGlmICh0bXB1bG9uZ2VzdCkKKyAgICAg ICAgeworICAgICAgICAgIFVMT05HRVNUIGxlbjsKKyAgICAgICAgICByZWdj YWNoZV9yYXdfcmVhZF91bnNpZ25lZCAocmVnY2FjaGUsIHRkZXAtPmFyZzMs ICZsZW4pOworICAgICAgICAgIGlmIChyZWNvcmRfYXJjaF9saXN0X2FkZF9t ZW0gKChDT1JFX0FERFIpIHRtcHVsb25nZXN0LCAoaW50KSBsZW4pKQorICAg ICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICB9CiAgICAgICBicmVhazsK IAogICAgICAgLyogc3lzX2Vwb2xsX2NyZWF0ZSAqLwpAQCAtMTg0NSwxNiAr MjE4OSwxNSBAQCByZWNvcmRfbGludXhfc3lzdGVtX2NhbGwgKGludCBudW0s IHN0cnVjCiAKICAgICAgIC8qIHN5c19lcG9sbF93YWl0ICovCiAgICAgY2Fz ZSAyNTY6Ci0gICAgICByZWdjYWNoZV9yYXdfcmVhZCAocmVnY2FjaGUsIHRk ZXAtPmFyZzIsIChnZGJfYnl0ZSAqKSAmIHRtcHUzMik7Ci0gICAgICBpZiAo dG1wdTMyKQotCXsKLQkgIGludDMyX3QgbWF4ZXZlbnRzOwotCSAgcmVnY2Fj aGVfcmF3X3JlYWQgKHJlZ2NhY2hlLCB0ZGVwLT5hcmczLAotCQkJICAgICAo Z2RiX2J5dGUgKikgJiBtYXhldmVudHMpOwotCSAgaWYgKHJlY29yZF9hcmNo X2xpc3RfYWRkX21lbQotCSAgICAgICh0bXB1MzIsIG1heGV2ZW50cyAqIHRk ZXAtPnNpemVfZXBvbGxfZXZlbnQpKQotCSAgICByZXR1cm4gLTE7Ci0JfQor ICAgICAgcmVnY2FjaGVfcmF3X3JlYWRfdW5zaWduZWQgKHJlZ2NhY2hlLCB0 ZGVwLT5hcmcyLCAmdG1wdWxvbmdlc3QpOworICAgICAgaWYgKHRtcHVsb25n ZXN0KQorICAgICAgICB7CisgICAgICAgICAgVUxPTkdFU1QgbWF4ZXZlbnRz OworICAgICAgICAgIHJlZ2NhY2hlX3Jhd19yZWFkX3Vuc2lnbmVkIChyZWdj YWNoZSwgdGRlcC0+YXJnMywgJm1heGV2ZW50cyk7CisgICAgICAgICAgaWYg KHJlY29yZF9hcmNoX2xpc3RfYWRkX21lbSAoKENPUkVfQUREUikgdG1wdWxv bmdlc3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgbWF4ZXZlbnRzICogdGRlcC0+c2l6ZV9lcG9sbF9ldmVudCkpCisgICAg ICAgICAgICByZXR1cm4gLTE7CisgICAgICAgIH0KICAgICAgIGJyZWFrOwog CiAgICAgICAvKiBzeXNfcmVtYXBfZmlsZV9wYWdlcyAqLwpAQCAtMTg2NSwy MyArMjIwOCwyNSBAQCByZWNvcmRfbGludXhfc3lzdGVtX2NhbGwgKGludCBu dW0sIHN0cnVjCiAKICAgICAgIC8qIHN5c190aW1lcl9jcmVhdGUgKi8KICAg ICBjYXNlIDI1OToKLSAgICAgIHJlZ2NhY2hlX3Jhd19yZWFkIChyZWdjYWNo ZSwgdGRlcC0+YXJnMywgKGdkYl9ieXRlICopICYgdG1wdTMyKTsKLSAgICAg IGlmIChyZWNvcmRfYXJjaF9saXN0X2FkZF9tZW0gKHRtcHUzMiwgdGRlcC0+ c2l6ZV9pbnQpKQotCXJldHVybiAtMTsKKyAgICAgIHJlZ2NhY2hlX3Jhd19y ZWFkX3Vuc2lnbmVkIChyZWdjYWNoZSwgdGRlcC0+YXJnMywgJnRtcHVsb25n ZXN0KTsKKyAgICAgIGlmIChyZWNvcmRfYXJjaF9saXN0X2FkZF9tZW0gKChD T1JFX0FERFIpIHRtcHVsb25nZXN0LCB0ZGVwLT5zaXplX2ludCkpCisgICAg ICAgIHJldHVybiAtMTsKICAgICAgIGJyZWFrOwogCiAgICAgICAvKiBzeXNf dGltZXJfc2V0dGltZSAqLwogICAgIGNhc2UgMjYwOgotICAgICAgcmVnY2Fj aGVfcmF3X3JlYWQgKHJlZ2NhY2hlLCB0ZGVwLT5hcmc0LCAoZ2RiX2J5dGUg KikgJiB0bXB1MzIpOwotICAgICAgaWYgKHJlY29yZF9hcmNoX2xpc3RfYWRk X21lbSAodG1wdTMyLCB0ZGVwLT5zaXplX2l0aW1lcnNwZWMpKQotCXJldHVy biAtMTsKKyAgICAgIHJlZ2NhY2hlX3Jhd19yZWFkX3Vuc2lnbmVkIChyZWdj YWNoZSwgdGRlcC0+YXJnNCwgJnRtcHVsb25nZXN0KTsKKyAgICAgIGlmIChy ZWNvcmRfYXJjaF9saXN0X2FkZF9tZW0gKChDT1JFX0FERFIpIHRtcHVsb25n ZXN0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGRl cC0+c2l6ZV9pdGltZXJzcGVjKSkKKyAgICAgICAgcmV0dXJuIC0xOwogICAg ICAgYnJlYWs7CiAKICAgICAgIC8qIHN5c190aW1lcl9nZXR0aW1lICovCiAg ICAgY2FzZSAyNjE6Ci0gICAgICByZWdjYWNoZV9yYXdfcmVhZCAocmVnY2Fj aGUsIHRkZXAtPmFyZzIsIChnZGJfYnl0ZSAqKSAmIHRtcHUzMik7Ci0gICAg ICBpZiAocmVjb3JkX2FyY2hfbGlzdF9hZGRfbWVtICh0bXB1MzIsIHRkZXAt PnNpemVfaXRpbWVyc3BlYykpCi0JcmV0dXJuIC0xOworICAgICAgcmVnY2Fj aGVfcmF3X3JlYWRfdW5zaWduZWQgKHJlZ2NhY2hlLCB0ZGVwLT5hcmcyLCAm dG1wdWxvbmdlc3QpOworICAgICAgaWYgKHJlY29yZF9hcmNoX2xpc3RfYWRk X21lbSAoKENPUkVfQUREUikgdG1wdWxvbmdlc3QsCisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICB0ZGVwLT5zaXplX2l0aW1lcnNwZWMp KQorICAgICAgICByZXR1cm4gLTE7CiAgICAgICBicmVhazsKIAogICAgICAg Lyogc3lzX3RpbWVyX2dldG92ZXJydW4gKi8KQEAgLTE4OTQsMzIgKzIyMzks MzYgQEAgcmVjb3JkX2xpbnV4X3N5c3RlbV9jYWxsIChpbnQgbnVtLCBzdHJ1 YwogCiAgICAgICAvKiBzeXNfY2xvY2tfZ2V0dGltZSAqLwogICAgIGNhc2Ug MjY1OgotICAgICAgcmVnY2FjaGVfcmF3X3JlYWQgKHJlZ2NhY2hlLCB0ZGVw LT5hcmcyLCAoZ2RiX2J5dGUgKikgJiB0bXB1MzIpOwotICAgICAgaWYgKHJl Y29yZF9hcmNoX2xpc3RfYWRkX21lbSAodG1wdTMyLCB0ZGVwLT5zaXplX3Rp bWVzcGVjKSkKLQlyZXR1cm4gLTE7CisgICAgICByZWdjYWNoZV9yYXdfcmVh ZF91bnNpZ25lZCAocmVnY2FjaGUsIHRkZXAtPmFyZzIsICZ0bXB1bG9uZ2Vz dCk7CisgICAgICBpZiAocmVjb3JkX2FyY2hfbGlzdF9hZGRfbWVtICgoQ09S RV9BRERSKSB0bXB1bG9uZ2VzdCwKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIHRkZXAtPnNpemVfdGltZXNwZWMpKQorICAgICAgICBy ZXR1cm4gLTE7CiAgICAgICBicmVhazsKIAogICAgICAgLyogc3lzX2Nsb2Nr X2dldHJlcyAqLwogICAgIGNhc2UgMjY2OgotICAgICAgcmVnY2FjaGVfcmF3 X3JlYWQgKHJlZ2NhY2hlLCB0ZGVwLT5hcmcyLCAoZ2RiX2J5dGUgKikgJiB0 bXB1MzIpOwotICAgICAgaWYgKHJlY29yZF9hcmNoX2xpc3RfYWRkX21lbSAo dG1wdTMyLCB0ZGVwLT5zaXplX3RpbWVzcGVjKSkKLQlyZXR1cm4gLTE7Cisg ICAgICByZWdjYWNoZV9yYXdfcmVhZF91bnNpZ25lZCAocmVnY2FjaGUsIHRk ZXAtPmFyZzIsICZ0bXB1bG9uZ2VzdCk7CisgICAgICBpZiAocmVjb3JkX2Fy Y2hfbGlzdF9hZGRfbWVtICgoQ09SRV9BRERSKSB0bXB1bG9uZ2VzdCwKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRkZXAtPnNpemVf dGltZXNwZWMpKQorICAgICAgICByZXR1cm4gLTE7CiAgICAgICBicmVhazsK IAogICAgICAgLyogc3lzX2Nsb2NrX25hbm9zbGVlcCAqLwogICAgIGNhc2Ug MjY3OgotICAgICAgcmVnY2FjaGVfcmF3X3JlYWQgKHJlZ2NhY2hlLCB0ZGVw LT5hcmc0LCAoZ2RiX2J5dGUgKikgJiB0bXB1MzIpOwotICAgICAgaWYgKHJl Y29yZF9hcmNoX2xpc3RfYWRkX21lbSAodG1wdTMyLCB0ZGVwLT5zaXplX3Rp bWVzcGVjKSkKLQlyZXR1cm4gLTE7CisgICAgICByZWdjYWNoZV9yYXdfcmVh ZF91bnNpZ25lZCAocmVnY2FjaGUsIHRkZXAtPmFyZzQsICZ0bXB1bG9uZ2Vz dCk7CisgICAgICBpZiAocmVjb3JkX2FyY2hfbGlzdF9hZGRfbWVtICgoQ09S RV9BRERSKSB0bXB1bG9uZ2VzdCwKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIHRkZXAtPnNpemVfdGltZXNwZWMpKQorICAgICAgICBy ZXR1cm4gLTE7CiAgICAgICBicmVhazsKIAogICAgICAgLyogc3lzX3N0YXRm czY0ICovCiAgICAgY2FzZSAyNjg6CiAgICAgICAvKiBzeXNfZnN0YXRmczY0 ICovCiAgICAgY2FzZSAyNjk6Ci0gICAgICByZWdjYWNoZV9yYXdfcmVhZCAo cmVnY2FjaGUsIHRkZXAtPmFyZzMsIChnZGJfYnl0ZSAqKSAmIHRtcHUzMik7 Ci0gICAgICBpZiAocmVjb3JkX2FyY2hfbGlzdF9hZGRfbWVtICh0bXB1MzIs IHRkZXAtPnNpemVfc3RhdGZzNjQpKQotCXJldHVybiAtMTsKKyAgICAgIHJl Z2NhY2hlX3Jhd19yZWFkX3Vuc2lnbmVkIChyZWdjYWNoZSwgdGRlcC0+YXJn MywgJnRtcHVsb25nZXN0KTsKKyAgICAgIGlmIChyZWNvcmRfYXJjaF9saXN0 X2FkZF9tZW0gKChDT1JFX0FERFIpIHRtcHVsb25nZXN0LAorICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgdGRlcC0+c2l6ZV9zdGF0ZnM2 NCkpCisgICAgICAgIHJldHVybiAtMTsKICAgICAgIGJyZWFrOwogCiAgICAg ICAvKiBzeXNfdGdraWxsICovCkBAIC0xOTM2LDE4ICsyMjg1LDE4IEBAIHJl Y29yZF9saW51eF9zeXN0ZW1fY2FsbCAoaW50IG51bSwgc3RydWMKIAogICAg ICAgLyogc3lzX2dldF9tZW1wb2xpY3kgKi8KICAgICBjYXNlIDI3NToKLSAg ICAgIHJlZ2NhY2hlX3Jhd19yZWFkIChyZWdjYWNoZSwgdGRlcC0+YXJnMSwg KGdkYl9ieXRlICopICYgdG1wdTMyKTsKLSAgICAgIGlmIChyZWNvcmRfYXJj aF9saXN0X2FkZF9tZW0gKHRtcHUzMiwgdGRlcC0+c2l6ZV9pbnQpKQotCXJl dHVybiAtMTsKLSAgICAgIHJlZ2NhY2hlX3Jhd19yZWFkIChyZWdjYWNoZSwg dGRlcC0+YXJnMiwgKGdkYl9ieXRlICopICYgdG1wdTMyKTsKLSAgICAgIGlm ICh0bXB1MzIpCi0JewotCSAgdWludDMyX3QgbWF4bm9kZTsKLQkgIHJlZ2Nh Y2hlX3Jhd19yZWFkIChyZWdjYWNoZSwgdGRlcC0+YXJnMywKLQkJCSAgICAg KGdkYl9ieXRlICopICYgbWF4bm9kZSk7Ci0JICBpZiAocmVjb3JkX2FyY2hf bGlzdF9hZGRfbWVtICh0bXB1MzIsIG1heG5vZGUgKiB0ZGVwLT5zaXplX2xv bmcpKQotCSAgICByZXR1cm4gLTE7Ci0JfQorICAgICAgcmVnY2FjaGVfcmF3 X3JlYWRfdW5zaWduZWQgKHJlZ2NhY2hlLCB0ZGVwLT5hcmcxLCAmdG1wdWxv bmdlc3QpOworICAgICAgaWYgKHJlY29yZF9hcmNoX2xpc3RfYWRkX21lbSAo KENPUkVfQUREUikgdG1wdWxvbmdlc3QsIHRkZXAtPnNpemVfaW50KSkKKyAg ICAgICAgcmV0dXJuIC0xOworICAgICAgcmVnY2FjaGVfcmF3X3JlYWRfdW5z aWduZWQgKHJlZ2NhY2hlLCB0ZGVwLT5hcmcyLCAmdG1wdWxvbmdlc3QpOwor ICAgICAgaWYgKHRtcHVsb25nZXN0KQorICAgICAgICB7CisgICAgICAgICAg VUxPTkdFU1QgbWF4bm9kZTsKKyAgICAgICAgICByZWdjYWNoZV9yYXdfcmVh ZF91bnNpZ25lZCAocmVnY2FjaGUsIHRkZXAtPmFyZzMsICZtYXhub2RlKTsK KyAgICAgICAgICBpZiAocmVjb3JkX2FyY2hfbGlzdF9hZGRfbWVtICgoQ09S RV9BRERSKSB0bXB1bG9uZ2VzdCwKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBtYXhub2RlICogdGRlcC0+c2l6ZV9sb25nKSkK KyAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgfQogICAgICAgYnJl YWs7CiAKICAgICAgIC8qIHN5c19zZXRfbWVtcG9saWN5ICovCkBAIC0xOTYy LDE4ICsyMzExLDE4IEBAIHJlY29yZF9saW51eF9zeXN0ZW1fY2FsbCAoaW50 IG51bSwgc3RydWMKIAogICAgICAgLyogc3lzX21xX3RpbWVkcmVjZWl2ZSAq LwogICAgIGNhc2UgMjgwOgotICAgICAgcmVnY2FjaGVfcmF3X3JlYWQgKHJl Z2NhY2hlLCB0ZGVwLT5hcmcyLCAoZ2RiX2J5dGUgKikgJiB0bXB1MzIpOwot ICAgICAgaWYgKHRtcHUzMikKLQl7Ci0JICB1aW50MzJfdCBtc2dfbGVuOwot CSAgcmVnY2FjaGVfcmF3X3JlYWQgKHJlZ2NhY2hlLCB0ZGVwLT5hcmczLAot CQkJICAgICAoZ2RiX2J5dGUgKikgJiBtc2dfbGVuKTsKLQkgIGlmIChyZWNv cmRfYXJjaF9saXN0X2FkZF9tZW0gKHRtcHUzMiwgbXNnX2xlbikpCi0JICAg IHJldHVybiAtMTsKLQl9Ci0gICAgICByZWdjYWNoZV9yYXdfcmVhZCAocmVn Y2FjaGUsIHRkZXAtPmFyZzQsIChnZGJfYnl0ZSAqKSAmIHRtcHUzMik7Ci0g ICAgICBpZiAocmVjb3JkX2FyY2hfbGlzdF9hZGRfbWVtICh0bXB1MzIsIHRk ZXAtPnNpemVfaW50KSkKLQlyZXR1cm4gLTE7CisgICAgICByZWdjYWNoZV9y YXdfcmVhZF91bnNpZ25lZCAocmVnY2FjaGUsIHRkZXAtPmFyZzIsICZ0bXB1 bG9uZ2VzdCk7CisgICAgICBpZiAodG1wdWxvbmdlc3QpCisgICAgICAgIHsK KyAgICAgICAgICBVTE9OR0VTVCBtc2dfbGVuOworICAgICAgICAgIHJlZ2Nh Y2hlX3Jhd19yZWFkX3Vuc2lnbmVkIChyZWdjYWNoZSwgdGRlcC0+YXJnMywg Jm1zZ19sZW4pOworICAgICAgICAgIGlmIChyZWNvcmRfYXJjaF9saXN0X2Fk ZF9tZW0gKChDT1JFX0FERFIpIHRtcHVsb25nZXN0LAorICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIChpbnQpIG1zZ19sZW4pKQor ICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICB9CisgICAgICByZWdj YWNoZV9yYXdfcmVhZF91bnNpZ25lZCAocmVnY2FjaGUsIHRkZXAtPmFyZzQs ICZ0bXB1bG9uZ2VzdCk7CisgICAgICBpZiAocmVjb3JkX2FyY2hfbGlzdF9h ZGRfbWVtICgoQ09SRV9BRERSKSB0bXB1bG9uZ2VzdCwgdGRlcC0+c2l6ZV9p bnQpKQorICAgICAgICByZXR1cm4gLTE7CiAgICAgICBicmVhazsKIAogICAg ICAgLyogc3lzX21xX25vdGlmeSAqLwpAQCAtMTk4Miw5ICsyMzMxLDEwIEBA IHJlY29yZF9saW51eF9zeXN0ZW1fY2FsbCAoaW50IG51bSwgc3RydWMKIAog ICAgICAgLyogc3lzX21xX2dldHNldGF0dHIgKi8KICAgICBjYXNlIDI4MjoK LSAgICAgIHJlZ2NhY2hlX3Jhd19yZWFkIChyZWdjYWNoZSwgdGRlcC0+YXJn MywgKGdkYl9ieXRlICopICYgdG1wdTMyKTsKLSAgICAgIGlmIChyZWNvcmRf YXJjaF9saXN0X2FkZF9tZW0gKHRtcHUzMiwgdGRlcC0+c2l6ZV9tcV9hdHRy KSkKLQlyZXR1cm4gLTE7CisgICAgICByZWdjYWNoZV9yYXdfcmVhZF91bnNp Z25lZCAocmVnY2FjaGUsIHRkZXAtPmFyZzMsICZ0bXB1bG9uZ2VzdCk7Cisg ICAgICBpZiAocmVjb3JkX2FyY2hfbGlzdF9hZGRfbWVtICgoQ09SRV9BRERS KSB0bXB1bG9uZ2VzdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIHRkZXAtPnNpemVfbXFfYXR0cikpCisgICAgICAgIHJldHVybiAt MTsKICAgICAgIGJyZWFrOwogCiAgICAgICAvKiBzeXNfa2V4ZWNfbG9hZCAq LwpAQCAtMTk5MywxMiArMjM0MywxNCBAQCByZWNvcmRfbGludXhfc3lzdGVt X2NhbGwgKGludCBudW0sIHN0cnVjCiAKICAgICAgIC8qIHN5c193YWl0aWQg Ki8KICAgICBjYXNlIDI4NDoKLSAgICAgIHJlZ2NhY2hlX3Jhd19yZWFkIChy ZWdjYWNoZSwgdGRlcC0+YXJnMywgKGdkYl9ieXRlICopICYgdG1wdTMyKTsK LSAgICAgIGlmIChyZWNvcmRfYXJjaF9saXN0X2FkZF9tZW0gKHRtcHUzMiwg dGRlcC0+c2l6ZV9zaWdpbmZvKSkKLQlyZXR1cm4gLTE7Ci0gICAgICByZWdj YWNoZV9yYXdfcmVhZCAocmVnY2FjaGUsIHRkZXAtPmFyZzUsIChnZGJfYnl0 ZSAqKSAmIHRtcHUzMik7Ci0gICAgICBpZiAocmVjb3JkX2FyY2hfbGlzdF9h ZGRfbWVtICh0bXB1MzIsIHRkZXAtPnNpemVfcnVzYWdlKSkKLQlyZXR1cm4g LTE7CisgICAgICByZWdjYWNoZV9yYXdfcmVhZF91bnNpZ25lZCAocmVnY2Fj aGUsIHRkZXAtPmFyZzMsICZ0bXB1bG9uZ2VzdCk7CisgICAgICBpZiAocmVj b3JkX2FyY2hfbGlzdF9hZGRfbWVtICgoQ09SRV9BRERSKSB0bXB1bG9uZ2Vz dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRkZXAt PnNpemVfc2lnaW5mbykpCisgICAgICAgIHJldHVybiAtMTsKKyAgICAgIHJl Z2NhY2hlX3Jhd19yZWFkX3Vuc2lnbmVkIChyZWdjYWNoZSwgdGRlcC0+YXJn NSwgJnRtcHVsb25nZXN0KTsKKyAgICAgIGlmIChyZWNvcmRfYXJjaF9saXN0 X2FkZF9tZW0gKChDT1JFX0FERFIpIHRtcHVsb25nZXN0LAorICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgdGRlcC0+c2l6ZV9ydXNhZ2Up KQorICAgICAgICByZXR1cm4gLTE7CiAgICAgICBicmVhazsKIAogICAgICAg Lyogc3lzX25pX3N5c2NhbGwgKi8KQEAgLTIwMTEsMjAgKzIzNjMsMjAgQEAg cmVjb3JkX2xpbnV4X3N5c3RlbV9jYWxsIChpbnQgbnVtLCBzdHJ1YwogCiAg ICAgICAvKiBzeXNfa2V5Y3RsICovCiAgICAgY2FzZSAyODg6Ci0gICAgICBy ZWdjYWNoZV9yYXdfcmVhZCAocmVnY2FjaGUsIHRkZXAtPmFyZzEsIChnZGJf Ynl0ZSAqKSAmIHRtcHUzMik7Ci0gICAgICBpZiAodG1wdTMyID09IDYgfHwg dG1wdTMyID09IDExKQotCXsKLQkgIHJlZ2NhY2hlX3Jhd19yZWFkIChyZWdj YWNoZSwgdGRlcC0+YXJnMywKLQkJCSAgICAgKGdkYl9ieXRlICopICYgdG1w dTMyKTsKLQkgIGlmICh0bXB1MzIpCi0JICAgIHsKLQkgICAgICB1aW50MzJf dCBidWZsZW47Ci0JICAgICAgcmVnY2FjaGVfcmF3X3JlYWQgKHJlZ2NhY2hl LCB0ZGVwLT5hcmc0LAotCQkJCSAoZ2RiX2J5dGUgKikgJiBidWZsZW4pOwot CSAgICAgIGlmIChyZWNvcmRfYXJjaF9saXN0X2FkZF9tZW0gKHRtcHUzMiwg YnVmbGVuKSkKLQkJcmV0dXJuIC0xOwotCSAgICB9Ci0JfQorICAgICAgcmVn Y2FjaGVfcmF3X3JlYWRfdW5zaWduZWQgKHJlZ2NhY2hlLCB0ZGVwLT5hcmcx LCAmdG1wdWxvbmdlc3QpOworICAgICAgaWYgKHRtcHVsb25nZXN0ID09IDYg fHwgdG1wdWxvbmdlc3QgPT0gMTEpCisgICAgICAgIHsKKyAgICAgICAgICBy ZWdjYWNoZV9yYXdfcmVhZF91bnNpZ25lZCAocmVnY2FjaGUsIHRkZXAtPmFy ZzMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZ0 bXB1bG9uZ2VzdCk7CisgICAgICAgICAgaWYgKHRtcHVsb25nZXN0KQorICAg ICAgICAgICAgeworICAgICAgICAgICAgICBVTE9OR0VTVCBidWZsZW47Cisg ICAgICAgICAgICAgIHJlZ2NhY2hlX3Jhd19yZWFkX3Vuc2lnbmVkIChyZWdj YWNoZSwgdGRlcC0+YXJnNCwgJmJ1Zmxlbik7CisgICAgICAgICAgICAgIGlm IChyZWNvcmRfYXJjaF9saXN0X2FkZF9tZW0gKChDT1JFX0FERFIpIHRtcHVs b25nZXN0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAoaW50KSBidWZsZW4pKQorICAgICAgICAgICAgICAgIHJldHVy biAtMTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQogICAgICAgYnJlYWs7 CiAKICAgICAgIC8qIHN5c19pb3ByaW9fc2V0ICovCkBAIC0yMDUzLDkgKzI0 MDUsMTAgQEAgcmVjb3JkX2xpbnV4X3N5c3RlbV9jYWxsIChpbnQgbnVtLCBz dHJ1YwogCiAgICAgICAvKiBzeXNfZnN0YXRhdDY0ICovCiAgICAgY2FzZSAz MDA6Ci0gICAgICByZWdjYWNoZV9yYXdfcmVhZCAocmVnY2FjaGUsIHRkZXAt PmFyZzMsIChnZGJfYnl0ZSAqKSAmIHRtcHUzMik7Ci0gICAgICBpZiAocmVj b3JkX2FyY2hfbGlzdF9hZGRfbWVtICh0bXB1MzIsIHRkZXAtPnNpemVfc3Rh dDY0KSkKLQlyZXR1cm4gLTE7CisgICAgICByZWdjYWNoZV9yYXdfcmVhZF91 bnNpZ25lZCAocmVnY2FjaGUsIHRkZXAtPmFyZzMsICZ0bXB1bG9uZ2VzdCk7 CisgICAgICBpZiAocmVjb3JkX2FyY2hfbGlzdF9hZGRfbWVtICgoQ09SRV9B RERSKSB0bXB1bG9uZ2VzdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIHRkZXAtPnNpemVfc3RhdDY0KSkKKyAgICAgICAgcmV0dXJu IC0xOwogICAgICAgYnJlYWs7CiAKICAgICAgIC8qIHN5c191bmxpbmthdCAq LwpAQCAtMjA3MCwxNSArMjQyMywxNCBAQCByZWNvcmRfbGludXhfc3lzdGVt X2NhbGwgKGludCBudW0sIHN0cnVjCiAKICAgICAgIC8qIHN5c19yZWFkbGlu a2F0ICovCiAgICAgY2FzZSAzMDU6Ci0gICAgICByZWdjYWNoZV9yYXdfcmVh ZCAocmVnY2FjaGUsIHRkZXAtPmFyZzMsIChnZGJfYnl0ZSAqKSAmIHRtcHUz Mik7Ci0gICAgICBpZiAodG1wdTMyKQotCXsKLQkgIGludDMyX3QgYnVmc2l6 OwotCSAgcmVnY2FjaGVfcmF3X3JlYWQgKHJlZ2NhY2hlLCB0ZGVwLT5hcmc0 LAotCQkJICAgICAoZ2RiX2J5dGUgKikgJiBidWZzaXopOwotCSAgaWYgKHJl Y29yZF9hcmNoX2xpc3RfYWRkX21lbSAodG1wdTMyLCBidWZzaXopKQotCSAg ICByZXR1cm4gLTE7Ci0JfQorICAgICAgcmVnY2FjaGVfcmF3X3JlYWRfdW5z aWduZWQgKHJlZ2NhY2hlLCB0ZGVwLT5hcmczLCAmdG1wdWxvbmdlc3QpOwor ICAgICAgaWYgKHRtcHVsb25nZXN0KQorICAgICAgICB7CisgICAgICAgICAg VUxPTkdFU1QgYnVmc2l6OworICAgICAgICAgIHJlZ2NhY2hlX3Jhd19yZWFk X3Vuc2lnbmVkIChyZWdjYWNoZSwgdGRlcC0+YXJnNCwgJmJ1ZnNpeik7Cisg ICAgICAgICAgaWYgKHJlY29yZF9hcmNoX2xpc3RfYWRkX21lbSAoKENPUkVf QUREUikgdG1wdWxvbmdlc3QsIChpbnQpIGJ1ZnNpeikpCisgICAgICAgICAg ICByZXR1cm4gLTE7CisgICAgICAgIH0KICAgICAgIGJyZWFrOwogCiAgICAg ICAvKiBzeXNfZmNobW9kYXQgKi8KQEAgLTIwODksMzQgKzI0NDEsMzkgQEAg cmVjb3JkX2xpbnV4X3N5c3RlbV9jYWxsIChpbnQgbnVtLCBzdHJ1YwogCiAg ICAgICAvKiBzeXNfcHNlbGVjdDYgKi8KICAgICBjYXNlIDMwODoKLSAgICAg IHJlZ2NhY2hlX3Jhd19yZWFkIChyZWdjYWNoZSwgdGRlcC0+YXJnMiwgKGdk Yl9ieXRlICopICYgdG1wdTMyKTsKLSAgICAgIGlmIChyZWNvcmRfYXJjaF9s aXN0X2FkZF9tZW0gKHRtcHUzMiwgdGRlcC0+c2l6ZV9mZF9zZXQpKQotCXJl dHVybiAtMTsKLSAgICAgIHJlZ2NhY2hlX3Jhd19yZWFkIChyZWdjYWNoZSwg dGRlcC0+YXJnMywgKGdkYl9ieXRlICopICYgdG1wdTMyKTsKLSAgICAgIGlm IChyZWNvcmRfYXJjaF9saXN0X2FkZF9tZW0gKHRtcHUzMiwgdGRlcC0+c2l6 ZV9mZF9zZXQpKQotCXJldHVybiAtMTsKLSAgICAgIHJlZ2NhY2hlX3Jhd19y ZWFkIChyZWdjYWNoZSwgdGRlcC0+YXJnNCwgKGdkYl9ieXRlICopICYgdG1w dTMyKTsKLSAgICAgIGlmIChyZWNvcmRfYXJjaF9saXN0X2FkZF9tZW0gKHRt cHUzMiwgdGRlcC0+c2l6ZV9mZF9zZXQpKQotCXJldHVybiAtMTsKLSAgICAg IHJlZ2NhY2hlX3Jhd19yZWFkIChyZWdjYWNoZSwgdGRlcC0+YXJnNSwgKGdk Yl9ieXRlICopICYgdG1wdTMyKTsKLSAgICAgIGlmIChyZWNvcmRfYXJjaF9s aXN0X2FkZF9tZW0gKHRtcHUzMiwgdGRlcC0+c2l6ZV90aW1lc3BlYykpCi0J cmV0dXJuIC0xOworICAgICAgcmVnY2FjaGVfcmF3X3JlYWRfdW5zaWduZWQg KHJlZ2NhY2hlLCB0ZGVwLT5hcmcyLCAmdG1wdWxvbmdlc3QpOworICAgICAg aWYgKHJlY29yZF9hcmNoX2xpc3RfYWRkX21lbSAoKENPUkVfQUREUikgdG1w dWxvbmdlc3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICB0ZGVwLT5zaXplX2ZkX3NldCkpCisgICAgICAgIHJldHVybiAtMTsKKyAg ICAgIHJlZ2NhY2hlX3Jhd19yZWFkX3Vuc2lnbmVkIChyZWdjYWNoZSwgdGRl cC0+YXJnMywgJnRtcHVsb25nZXN0KTsKKyAgICAgIGlmIChyZWNvcmRfYXJj aF9saXN0X2FkZF9tZW0gKChDT1JFX0FERFIpIHRtcHVsb25nZXN0LAorICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGRlcC0+c2l6ZV9m ZF9zZXQpKQorICAgICAgICByZXR1cm4gLTE7CisgICAgICByZWdjYWNoZV9y YXdfcmVhZF91bnNpZ25lZCAocmVnY2FjaGUsIHRkZXAtPmFyZzQsICZ0bXB1 bG9uZ2VzdCk7CisgICAgICBpZiAocmVjb3JkX2FyY2hfbGlzdF9hZGRfbWVt ICgoQ09SRV9BRERSKSB0bXB1bG9uZ2VzdCwKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIHRkZXAtPnNpemVfZmRfc2V0KSkKKyAgICAg ICAgcmV0dXJuIC0xOworICAgICAgcmVnY2FjaGVfcmF3X3JlYWRfdW5zaWdu ZWQgKHJlZ2NhY2hlLCB0ZGVwLT5hcmc1LCAmdG1wdWxvbmdlc3QpOworICAg ICAgaWYgKHJlY29yZF9hcmNoX2xpc3RfYWRkX21lbSAoKENPUkVfQUREUikg dG1wdWxvbmdlc3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICB0ZGVwLT5zaXplX3RpbWVzcGVjKSkKKyAgICAgICAgcmV0dXJuIC0x OwogICAgICAgYnJlYWs7CiAKICAgICAgIC8qIHN5c19wcG9sbCAqLwogICAg IGNhc2UgMzA5OgotICAgICAgcmVnY2FjaGVfcmF3X3JlYWQgKHJlZ2NhY2hl LCB0ZGVwLT5hcmcxLCAoZ2RiX2J5dGUgKikgJiB0bXB1MzIpOwotICAgICAg aWYgKHRtcHUzMikKLQl7Ci0JICB1aW50MzJfdCBuZmRzOwotCSAgcmVnY2Fj aGVfcmF3X3JlYWQgKHJlZ2NhY2hlLCB0ZGVwLT5hcmcyLAotCQkJICAgICAo Z2RiX2J5dGUgKikgJiBuZmRzKTsKLQkgIGlmIChyZWNvcmRfYXJjaF9saXN0 X2FkZF9tZW0gKHRtcHUzMiwgdGRlcC0+c2l6ZV9wb2xsZmQgKiBuZmRzKSkK LQkgICAgcmV0dXJuIC0xOwotCX0KLSAgICAgIHJlZ2NhY2hlX3Jhd19yZWFk IChyZWdjYWNoZSwgdGRlcC0+YXJnMywgKGdkYl9ieXRlICopICYgdG1wdTMy KTsKLSAgICAgIGlmIChyZWNvcmRfYXJjaF9saXN0X2FkZF9tZW0gKHRtcHUz MiwgdGRlcC0+c2l6ZV90aW1lc3BlYykpCi0JcmV0dXJuIC0xOworICAgICAg cmVnY2FjaGVfcmF3X3JlYWRfdW5zaWduZWQgKHJlZ2NhY2hlLCB0ZGVwLT5h cmcxLCAmdG1wdWxvbmdlc3QpOworICAgICAgaWYgKHRtcHVsb25nZXN0KQor ICAgICAgICB7CisgICAgICAgICAgVUxPTkdFU1QgbmZkczsKKyAgICAgICAg ICByZWdjYWNoZV9yYXdfcmVhZF91bnNpZ25lZCAocmVnY2FjaGUsIHRkZXAt PmFyZzIsICZuZmRzKTsKKyAgICAgICAgICBpZiAocmVjb3JkX2FyY2hfbGlz dF9hZGRfbWVtICgoQ09SRV9BRERSKSB0bXB1bG9uZ2VzdCwKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZGVwLT5zaXplX3Bv bGxmZCAqIG5mZHMpKQorICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAg ICB9CisgICAgICByZWdjYWNoZV9yYXdfcmVhZF91bnNpZ25lZCAocmVnY2Fj aGUsIHRkZXAtPmFyZzMsICZ0bXB1bG9uZ2VzdCk7CisgICAgICBpZiAocmVj b3JkX2FyY2hfbGlzdF9hZGRfbWVtICgoQ09SRV9BRERSKSB0bXB1bG9uZ2Vz dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRkZXAt PnNpemVfdGltZXNwZWMpKQorICAgICAgICByZXR1cm4gLTE7CiAgICAgICBi cmVhazsKIAogICAgICAgLyogc3lzX3Vuc2hhcmUgKi8KQEAgLTIxMjcsMjIg KzI0ODQsMjQgQEAgcmVjb3JkX2xpbnV4X3N5c3RlbV9jYWxsIChpbnQgbnVt LCBzdHJ1YwogCiAgICAgICAvKiBzeXNfZ2V0X3JvYnVzdF9saXN0ICovCiAg ICAgY2FzZSAzMTI6Ci0gICAgICByZWdjYWNoZV9yYXdfcmVhZCAocmVnY2Fj aGUsIHRkZXAtPmFyZzIsIChnZGJfYnl0ZSAqKSAmIHRtcHUzMik7Ci0gICAg ICBpZiAocmVjb3JkX2FyY2hfbGlzdF9hZGRfbWVtICh0bXB1MzIsIHRkZXAt PnNpemVfaW50KSkKLQlyZXR1cm4gLTE7Ci0gICAgICByZWdjYWNoZV9yYXdf cmVhZCAocmVnY2FjaGUsIHRkZXAtPmFyZzMsIChnZGJfYnl0ZSAqKSAmIHRt cHUzMik7Ci0gICAgICBpZiAocmVjb3JkX2FyY2hfbGlzdF9hZGRfbWVtICh0 bXB1MzIsIHRkZXAtPnNpemVfaW50KSkKLQlyZXR1cm4gLTE7CisgICAgICBy ZWdjYWNoZV9yYXdfcmVhZF91bnNpZ25lZCAocmVnY2FjaGUsIHRkZXAtPmFy ZzIsICZ0bXB1bG9uZ2VzdCk7CisgICAgICBpZiAocmVjb3JkX2FyY2hfbGlz dF9hZGRfbWVtICgoQ09SRV9BRERSKSB0bXB1bG9uZ2VzdCwgdGRlcC0+c2l6 ZV9pbnQpKQorICAgICAgICByZXR1cm4gLTE7CisgICAgICByZWdjYWNoZV9y YXdfcmVhZF91bnNpZ25lZCAocmVnY2FjaGUsIHRkZXAtPmFyZzMsICZ0bXB1 bG9uZ2VzdCk7CisgICAgICBpZiAocmVjb3JkX2FyY2hfbGlzdF9hZGRfbWVt ICgoQ09SRV9BRERSKSB0bXB1bG9uZ2VzdCwgdGRlcC0+c2l6ZV9pbnQpKQor ICAgICAgICByZXR1cm4gLTE7CiAgICAgICBicmVhazsKIAogICAgICAgLyog c3lzX3NwbGljZSAqLwogICAgIGNhc2UgMzEzOgotICAgICAgcmVnY2FjaGVf cmF3X3JlYWQgKHJlZ2NhY2hlLCB0ZGVwLT5hcmcyLCAoZ2RiX2J5dGUgKikg JiB0bXB1MzIpOwotICAgICAgaWYgKHJlY29yZF9hcmNoX2xpc3RfYWRkX21l bSAodG1wdTMyLCB0ZGVwLT5zaXplX2xvZmZfdCkpCi0JcmV0dXJuIC0xOwot ICAgICAgcmVnY2FjaGVfcmF3X3JlYWQgKHJlZ2NhY2hlLCB0ZGVwLT5hcmc0 LCAoZ2RiX2J5dGUgKikgJiB0bXB1MzIpOwotICAgICAgaWYgKHJlY29yZF9h cmNoX2xpc3RfYWRkX21lbSAodG1wdTMyLCB0ZGVwLT5zaXplX2xvZmZfdCkp Ci0JcmV0dXJuIC0xOworICAgICAgcmVnY2FjaGVfcmF3X3JlYWRfdW5zaWdu ZWQgKHJlZ2NhY2hlLCB0ZGVwLT5hcmcyLCAmdG1wdWxvbmdlc3QpOworICAg ICAgaWYgKHJlY29yZF9hcmNoX2xpc3RfYWRkX21lbSAoKENPUkVfQUREUikg dG1wdWxvbmdlc3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICB0ZGVwLT5zaXplX2xvZmZfdCkpCisgICAgICAgIHJldHVybiAtMTsK KyAgICAgIHJlZ2NhY2hlX3Jhd19yZWFkX3Vuc2lnbmVkIChyZWdjYWNoZSwg dGRlcC0+YXJnNCwgJnRtcHVsb25nZXN0KTsKKyAgICAgIGlmIChyZWNvcmRf YXJjaF9saXN0X2FkZF9tZW0gKChDT1JFX0FERFIpIHRtcHVsb25nZXN0LAor ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGRlcC0+c2l6 ZV9sb2ZmX3QpKQorICAgICAgICByZXR1cm4gLTE7CiAgICAgICBicmVhazsK IAogICAgICAgLyogc3lzX3N5bmNfZmlsZV9yYW5nZSAqLwpAQCAtMjE1NSw0 OCArMjUxNCw0NyBAQCByZWNvcmRfbGludXhfc3lzdGVtX2NhbGwgKGludCBu dW0sIHN0cnVjCiAKICAgICAgIC8qIHN5c19tb3ZlX3BhZ2VzICovCiAgICAg Y2FzZSAzMTc6Ci0gICAgICByZWdjYWNoZV9yYXdfcmVhZCAocmVnY2FjaGUs IHRkZXAtPmFyZzUsIChnZGJfYnl0ZSAqKSAmIHRtcHUzMik7Ci0gICAgICBp ZiAodG1wdTMyKQotCXsKLQkgIHVpbnQzMl90IG5yX3BhZ2VzOwotCSAgcmVn Y2FjaGVfcmF3X3JlYWQgKHJlZ2NhY2hlLCB0ZGVwLT5hcmcyLAotCQkJICAg ICAoZ2RiX2J5dGUgKikgJiBucl9wYWdlcyk7Ci0JICBpZiAocmVjb3JkX2Fy Y2hfbGlzdF9hZGRfbWVtICh0bXB1MzIsIG5yX3BhZ2VzICogdGRlcC0+c2l6 ZV9pbnQpKQotCSAgICByZXR1cm4gLTE7Ci0JfQorICAgICAgcmVnY2FjaGVf cmF3X3JlYWRfdW5zaWduZWQgKHJlZ2NhY2hlLCB0ZGVwLT5hcmc1LCAmdG1w dWxvbmdlc3QpOworICAgICAgaWYgKHRtcHVsb25nZXN0KQorICAgICAgICB7 CisgICAgICAgICAgVUxPTkdFU1QgbnJfcGFnZXM7CisgICAgICAgICAgcmVn Y2FjaGVfcmF3X3JlYWRfdW5zaWduZWQgKHJlZ2NhY2hlLCB0ZGVwLT5hcmcy LCAmbnJfcGFnZXMpOworICAgICAgICAgIGlmIChyZWNvcmRfYXJjaF9saXN0 X2FkZF9tZW0gKChDT1JFX0FERFIpIHRtcHVsb25nZXN0LAorICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5yX3BhZ2VzICogdGRl cC0+c2l6ZV9pbnQpKQorICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAg ICB9CiAgICAgICBicmVhazsKIAogICAgICAgLyogc3lzX2dldGNwdSAqLwog ICAgIGNhc2UgMzE4OgotICAgICAgcmVnY2FjaGVfcmF3X3JlYWQgKHJlZ2Nh Y2hlLCB0ZGVwLT5hcmcxLCAoZ2RiX2J5dGUgKikgJiB0bXB1MzIpOwotICAg ICAgaWYgKHJlY29yZF9hcmNoX2xpc3RfYWRkX21lbSAodG1wdTMyLCB0ZGVw LT5zaXplX2ludCkpCi0JcmV0dXJuIC0xOwotICAgICAgcmVnY2FjaGVfcmF3 X3JlYWQgKHJlZ2NhY2hlLCB0ZGVwLT5hcmcyLCAoZ2RiX2J5dGUgKikgJiB0 bXB1MzIpOwotICAgICAgaWYgKHJlY29yZF9hcmNoX2xpc3RfYWRkX21lbSAo dG1wdTMyLCB0ZGVwLT5zaXplX2ludCkpCi0JcmV0dXJuIC0xOwotICAgICAg cmVnY2FjaGVfcmF3X3JlYWQgKHJlZ2NhY2hlLCB0ZGVwLT5hcmczLCAoZ2Ri X2J5dGUgKikgJiB0bXB1MzIpOwotICAgICAgaWYgKHJlY29yZF9hcmNoX2xp c3RfYWRkX21lbSAodG1wdTMyLCB0ZGVwLT5zaXplX3Vsb25nICogMikpCi0J cmV0dXJuIC0xOworICAgICAgcmVnY2FjaGVfcmF3X3JlYWRfdW5zaWduZWQg KHJlZ2NhY2hlLCB0ZGVwLT5hcmcxLCAmdG1wdWxvbmdlc3QpOworICAgICAg aWYgKHJlY29yZF9hcmNoX2xpc3RfYWRkX21lbSAoKENPUkVfQUREUikgdG1w dWxvbmdlc3QsIHRkZXAtPnNpemVfaW50KSkKKyAgICAgICAgcmV0dXJuIC0x OworICAgICAgcmVnY2FjaGVfcmF3X3JlYWRfdW5zaWduZWQgKHJlZ2NhY2hl LCB0ZGVwLT5hcmcyLCAmdG1wdWxvbmdlc3QpOworICAgICAgaWYgKHJlY29y ZF9hcmNoX2xpc3RfYWRkX21lbSAoKENPUkVfQUREUikgdG1wdWxvbmdlc3Qs IHRkZXAtPnNpemVfaW50KSkKKyAgICAgICAgcmV0dXJuIC0xOworICAgICAg cmVnY2FjaGVfcmF3X3JlYWRfdW5zaWduZWQgKHJlZ2NhY2hlLCB0ZGVwLT5h cmczLCAmdG1wdWxvbmdlc3QpOworICAgICAgaWYgKHJlY29yZF9hcmNoX2xp c3RfYWRkX21lbSAoKENPUkVfQUREUikgdG1wdWxvbmdlc3QsCisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZGVwLT5zaXplX3Vsb25n ICogMikpCisgICAgICAgIHJldHVybiAtMTsKICAgICAgIGJyZWFrOwogCiAg ICAgICAvKiBzeXNfZXBvbGxfcHdhaXQgKi8KICAgICBjYXNlIDMxOToKLSAg ICAgIHJlZ2NhY2hlX3Jhd19yZWFkIChyZWdjYWNoZSwgdGRlcC0+YXJnMiwg KGdkYl9ieXRlICopICYgdG1wdTMyKTsKLSAgICAgIGlmICh0bXB1MzIpCi0J ewotCSAgaW50MzJfdCBtYXhldmVudHM7Ci0JICByZWdjYWNoZV9yYXdfcmVh ZCAocmVnY2FjaGUsIHRkZXAtPmFyZzMsCi0JCQkgICAgIChnZGJfYnl0ZSAq KSAmIG1heGV2ZW50cyk7Ci0JICBpZiAocmVjb3JkX2FyY2hfbGlzdF9hZGRf bWVtCi0JICAgICAgKHRtcHUzMiwgbWF4ZXZlbnRzICogdGRlcC0+c2l6ZV9l cG9sbF9ldmVudCkpCi0JICAgIHJldHVybiAtMTsKLQl9CisgICAgICByZWdj YWNoZV9yYXdfcmVhZF91bnNpZ25lZCAocmVnY2FjaGUsIHRkZXAtPmFyZzIs ICZ0bXB1bG9uZ2VzdCk7CisgICAgICBpZiAodG1wdWxvbmdlc3QpCisgICAg ICAgIHsKKyAgICAgICAgICBVTE9OR0VTVCBtYXhldmVudHM7CisgICAgICAg ICAgcmVnY2FjaGVfcmF3X3JlYWRfdW5zaWduZWQgKHJlZ2NhY2hlLCB0ZGVw LT5hcmczLCAmbWF4ZXZlbnRzKTsKKyAgICAgICAgICB0bXBpbnQgPSAoaW50 KSBtYXhldmVudHMgKiB0ZGVwLT5zaXplX2Vwb2xsX2V2ZW50OworICAgICAg ICAgIGlmIChyZWNvcmRfYXJjaF9saXN0X2FkZF9tZW0gKChDT1JFX0FERFIp IHRtcHVsb25nZXN0LCB0bXBpbnQpKQorICAgICAgICAgICAgcmV0dXJuIC0x OworICAgICAgICB9CiAgICAgICBicmVhazsKIAogICAgIGRlZmF1bHQ6CiAg ICAgICBwcmludGZfdW5maWx0ZXJlZCAoXygiUHJvY2VzcyByZWNvcmQgYW5k IHJlcGxheSB0YXJnZXQgZG9lc24ndCAiCi0JCQkgICAic3VwcG9ydCBzeXNj YWxsIG51bWJlciAldVxuIiksCi0JCQkgKGludCl0bXB1MzIpOworICAgICAg ICAgICAgICAgICAgICAgICAgICAgInN1cHBvcnQgc3lzY2FsbCBudW1iZXIg JXVcbiIpLCBudW0pOwogICAgICAgcmV0dXJuIC0xOwogICAgICAgYnJlYWs7 CiAgICAgfQotLS0gYS9saW51eC1yZWNvcmQuaAorKysgYi9saW51eC1yZWNv cmQuaApAQCAtMjMsNiArMjMsNyBAQAogc3RydWN0IGxpbnV4X3JlY29yZF90 ZGVwCiB7CiAgIC8qIFRoZSBzaXplIG9mIHRoZSB0eXBlIHRoYXQgd2lsbCBi ZSB1c2VkIGluIGEgc3lzdGVtIGNhbGwuICAqLworICBpbnQgc2l6ZV9wb2lu dGVyOwogICBpbnQgc2l6ZV9fb2xkX2tlcm5lbF9zdGF0OwogICBpbnQgc2l6 ZV90bXM7CiAgIGludCBzaXplX2xvZmZfdDsKQEAgLTgxLDcgKzgyLDYgQEAg c3RydWN0IGxpbnV4X3JlY29yZF90ZGVwCiAgIGludCBzaXplX2l0aW1lcnNw ZWM7CiAgIGludCBzaXplX21xX2F0dHI7CiAgIGludCBzaXplX3NpZ2luZm87 Ci0KICAgaW50IHNpemVfdGVybWlvczsKICAgaW50IHNpemVfdGVybWlvczI7 CiAgIGludCBzaXplX3BpZF90OwpAQCAtODksNiArODksOCBAQCBzdHJ1Y3Qg bGludXhfcmVjb3JkX3RkZXAKICAgaW50IHNpemVfc2VyaWFsX3N0cnVjdDsK ICAgaW50IHNpemVfc2VyaWFsX2ljb3VudGVyX3N0cnVjdDsKICAgaW50IHNp emVfaGF5ZXNfZXNwX2NvbmZpZzsKKyAgaW50IHNpemVfc2l6ZV90OworICBp bnQgc2l6ZV9pb3ZlYzsKIAogICAvKiBUaGUgdmFsdWVzIG9mIHRoZSBzZWNv bmQgYXJndW1lbnQgb2Ygc3lzdGVtIGNhbGwgInN5c19pb2N0bCIuICAqLwog ICBpbnQgaW9jdGxfVENHRVRTOwpAQCAtMTcxLDYgKzE3Myw3IEBAIHN0cnVj dCBsaW51eF9yZWNvcmRfdGRlcAogICBpbnQgYXJnMzsKICAgaW50IGFyZzQ7 CiAgIGludCBhcmc1OworICBpbnQgYXJnNjsKIH07CiAKIGV4dGVybiBpbnQg cmVjb3JkX2xpbnV4X3N5c3RlbV9jYWxsIChpbnQgbnVtLCBzdHJ1Y3QgcmVn Y2FjaGUgKnJlZ2NhY2hlLAo= --001636e0a7746ff211046f123668--