From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 23461 invoked by alias); 19 Jun 2013 13:30:33 -0000 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 Received: (qmail 23450 invoked by uid 89); 19 Jun 2013 13:30:33 -0000 X-Spam-SWARE-Status: No, score=-3.8 required=5.0 tests=AWL,BAYES_00,KHOP_RCVD_UNTRUST,KHOP_THREADED,RCVD_IN_DNSWL_MED,RCVD_IN_HOSTKARMA_W,RCVD_IN_HOSTKARMA_YE,TW_EG,TW_SR autolearn=ham version=3.3.1 Received: from co9ehsobe003.messaging.microsoft.com (HELO co9outboundpool.messaging.microsoft.com) (207.46.163.26) by sourceware.org (qpsmtpd/0.84/v0.84-167-ge50287c) with ESMTP; Wed, 19 Jun 2013 13:30:31 +0000 Received: from mail134-co9-R.bigfish.com (10.236.132.225) by CO9EHSOBE020.bigfish.com (10.236.130.83) with Microsoft SMTP Server id 14.1.225.23; Wed, 19 Jun 2013 13:30:29 +0000 Received: from mail134-co9 (localhost [127.0.0.1]) by mail134-co9-R.bigfish.com (Postfix) with ESMTP id D4464480746; Wed, 19 Jun 2013 13:30:29 +0000 (UTC) X-Forefront-Antispam-Report: CIP:59.163.77.177;KIP:(null);UIP:(null);IPV:NLI;H:KCHJEXHC02.kpit.com;RD:59.163.77.177.static.vsnl.net.in;EFVD:NLI X-SpamScore: 1 X-BigFish: VPS1(zz936eIc85fh154dIde40hc8kzz1f42h1ee6h1de0h1fdah1202h1e76h1d1ah1d2ah1fc6hzz177df4h17326ah8275bh8275dhz2dh2a8h668h839hd25hf0ah1288h12a5h12bdh137ah1441h14ddh1504h1537h153bh15d0h162dh1631h1758h18e1h1946h19b5h1b0ah1bceh1d0ch1d2eh1d3fh1dfeh1dffh1e1dh34h1155h) Received: from mail134-co9 (localhost.localdomain [127.0.0.1]) by mail134-co9 (MessageSwitch) id 1371648614443789_4598; Wed, 19 Jun 2013 13:30:14 +0000 (UTC) Received: from CO9EHSMHS014.bigfish.com (unknown [10.236.132.234]) by mail134-co9.bigfish.com (Postfix) with ESMTP id 627AB3C026B; Wed, 19 Jun 2013 13:30:14 +0000 (UTC) Received: from KCHJEXHC02.kpit.com (59.163.77.177) by CO9EHSMHS014.bigfish.com (10.236.130.24) with Microsoft SMTP Server (TLS) id 14.1.225.23; Wed, 19 Jun 2013 13:30:12 +0000 Received: from KCHJEXMB02.kpit.com ([169.254.2.54]) by KCHJEXHC02.kpit.com ([172.10.15.74]) with mapi id 14.03.0123.003; Wed, 19 Jun 2013 18:58:24 +0530 From: Kaushik Phatak To: "gdb-patches@sourceware.org" CC: Pedro Alves Subject: RE: [RFA 4/5] New port: CR16: gdbserver Date: Wed, 19 Jun 2013 14:10:00 -0000 Message-ID: References: <50CB742E.9090506@redhat.com> <50F97ABF.4060203@redhat.com> <50FFE596.20303@redhat.com> <50FFF730.9050108@redhat.com> In-Reply-To: <50FFF730.9050108@redhat.com> Content-Type: multipart/mixed; boundary="_002_C6CA53A2A46BA7469348BDBD663AB6585308FA32KCHJEXMB02kpitc_" MIME-Version: 1.0 X-OriginatorOrg: kpitcummins.com X-Virus-Found: No X-SW-Source: 2013-06/txt/msg00491.txt.bz2 --_002_C6CA53A2A46BA7469348BDBD663AB6585308FA32KCHJEXMB02kpitc_ Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: quoted-printable Content-length: 10007 Hi, Please find below an updated patch for the gdbserver port of the CR16 targe= t. This has been updated from my previous attempts of the same, http://sourceware.org/ml/gdb-patches/2012-10/msg00064.html The port has been updated based on feedback provided by Pedro in discussions earlier this year in Jan, http://sourceware.org/ml/gdb-patches/2013-01/msg00552.html In addition to the comments, the port has been base-lined against latest so= urces which needs the "initialize_low_arch" function. The below gdbserver port has following changes, 1. Remove register pair access over remote protocol in the .dat file. This allows for matching of the register numbers in the gdbserver with those in linux-tdep.c. This was done by simplifying the PTRACE_GETREGS inside ker= nel to read single registers. 2. Remove support for "r0r1_orig" register. This is a kernel internal regis= ter and need not be user visible. 3. Set cr16_num_regs to 20 and PC_REGNUM to 16. This will now match the gdb= port. 4. Add registers pc,usp,ra to the "expedite" set.=20 5. Move the ptrace macro defines like PT_TEXT_ADDR from linux-low.c to the = kernel's ptrace.h An updated gdb port for the same is also posted for this. 2013-06-19 Kaushik Phatak gdb/Changelog * regformats/reg-cr16.dat: New. gdb/gdbserver/Changelog * Makefile.in (clean): Remove reg-cr16.c. (linux-cr16-low.o, reg-cr16.o): New rules. * configure.srv: Add support for cr16-*-uclinux. * linux-cr16-low.c: New. Index: gdb/gdbserver/Makefile.in =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D RCS file: /cvs/src/src/gdb/gdbserver/Makefile.in,v retrieving revision 1.153 diff -u -r1.153 Makefile.in --- gdb/gdbserver/Makefile.in 7 Jun 2013 10:46:58 -0000 1.153 +++ gdb/gdbserver/Makefile.in 19 Jun 2013 12:05:16 -0000 @@ -138,6 +138,7 @@ $(srcdir)/remote-utils.c $(srcdir)/server.c $(srcdir)/target.c \ $(srcdir)/thread-db.c $(srcdir)/utils.c \ $(srcdir)/linux-arm-low.c $(srcdir)/linux-bfin-low.c \ + $(srcdir)/linux-cr16-low.c \ $(srcdir)/linux-cris-low.c $(srcdir)/linux-crisv32-low.c \ ${srcdir}/i386-low.c $(srcdir)/i387-fp.c \ $(srcdir)/linux-ia64-low.c $(srcdir)/linux-low.c \ @@ -319,7 +320,7 @@ rm -f aarch64.c rm -f reg-arm.c reg-bfin.c i386.c reg-ia64.c reg-m32r.c reg-m68k.c rm -f reg-sh.c reg-sparc.c reg-spu.c amd64.c i386-linux.c - rm -f reg-cris.c reg-crisv32.c amd64-linux.c reg-xtensa.c + rm -f reg-cr16.c reg-cris.c reg-crisv32.c amd64-linux.c reg-xtensa.c rm -f reg-tilegx.c reg-tilegx32.c rm -f arm-with-iwmmxt.c rm -f arm-with-vfpv2.c arm-with-vfpv3.c arm-with-neon.c @@ -584,6 +585,8 @@ $(SHELL) $(regdat_sh) $(srcdir)/../regformats/arm-with-neon.dat arm-with-= neon.c reg-bfin.c : $(srcdir)/../regformats/reg-bfin.dat $(regdat_sh) $(SHELL) $(regdat_sh) $(srcdir)/../regformats/reg-bfin.dat reg-bfin.c +reg-cr16.c : $(srcdir)/../regformats/reg-cr16.dat $(regdat_sh) + $(SHELL) $(regdat_sh) $(srcdir)/../regformats/reg-cr16.dat reg-cr16.c reg-cris.c : $(srcdir)/../regformats/reg-cris.dat $(regdat_sh) $(SHELL) $(regdat_sh) $(srcdir)/../regformats/reg-cris.dat reg-cris.c reg-crisv32.c : $(srcdir)/../regformats/reg-crisv32.dat $(regdat_sh) Index: gdb/gdbserver/configure.srv =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D RCS file: /cvs/src/src/gdb/gdbserver/configure.srv,v retrieving revision 1.76 diff -u -r1.76 configure.srv --- gdb/gdbserver/configure.srv 28 May 2013 10:41:17 -0000 1.76 +++ gdb/gdbserver/configure.srv 19 Jun 2013 12:05:16 -0000 @@ -88,6 +88,11 @@ srv_linux_usrregs=3Dyes srv_linux_thread_db=3Dyes ;; + cr16-*-uclinux) srv_regobj=3Dreg-cr16.o + srv_tgtobj=3D"linux-low.o linux-cr16-low.o" + srv_linux_usrregs=3Dyes + srv_linux_thread_db=3Dyes + ;; crisv32-*-linux*) srv_regobj=3Dreg-crisv32.o srv_tgtobj=3D"linux-low.o linux-osdata.o linux-crisv32-low.o linux-proc= fs.o" srv_tgtobj=3D"${srv_tgtobj} linux-ptrace.o" Index: gdb/gdbserver/cr16-linux-tdep.c =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D RCS file: gdb/gdbserver/linux-cr16-tdep.c diff -N gdb/gdbserver/linux-cr16-tdep.c --- /dev/null 2013-05-10 19:36:04.372328500 +0530 +++ ./gdb/gdbserver/linux-cr16-low.c 2013-06-19 17:44:04.000000000 +0530 @@ -0,0 +1,190 @@ +/* GNU/Linux/CR16 specific low level interface, for the remote server for = GDB. + + Copyright (C) 2012-2013 Free Software Foundation, Inc. + Contributed by Kaushik Phatak (kaushik.phatak@kpitcummins.com) + KPIT Cummins Infosystems Limited, Pune India.=20 + This file is part of GDB. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . = */ + +#include "server.h" +#include "linux-low.h" +#include + +/* Defined in auto-generated file reg-cr16.c. */ +void init_registers_cr16 (void); +extern const struct target_desc *tdesc_cr16; + +/* CR16C */ +#define cr16_num_regs 20 +#define PC_REGNUM 16 + +/* Locations need to match . */ +static int cr16_regmap[] =3D { + 0, 2, 4, 6, 8, + 10, 12, 14, 16, 18, + 20, 22, 24, 28, 32, + 36, 40, 44, 48, 52 +}; + +static int +cr16_cannot_store_register (int regno) +{ + if (cr16_regmap[regno] =3D=3D -1) + return 1; + + return (regno >=3D cr16_num_regs); +} + +static int +cr16_cannot_fetch_register (int regno) +{ + if (cr16_regmap[regno] =3D=3D -1) + return 1; + + return (regno >=3D cr16_num_regs); +} + +static void +cr16_set_pc (struct regcache *regcache, CORE_ADDR pc) +{ + unsigned long newpc =3D pc; + + supply_register_by_name (regcache, "pc", &newpc); +} + +static CORE_ADDR +cr16_get_pc (struct regcache *regcache) +{ + unsigned long pc; + + collect_register_by_name (regcache, "pc", &pc); + return pc; +} + +static void +cr16_collect_ptrace_register (struct regcache *regcache, int regno, char *= buf) +{ + unsigned long pc; +=20=20=20 + memset (buf, 0, sizeof (long)); + collect_register_by_name (regcache, "pc", &pc); + if (regno =3D=3D PC_REGNUM) + { + pc =3D pc >> 1; + cr16_set_pc (regcache, pc); + } + collect_register (regcache, regno, buf); +} + +static void +cr16_supply_ptrace_register (struct regcache *regcache, + int regno, const char *buf) +{ + unsigned long pc; + int size =3D register_size (regcache->tdesc, regno); + + supply_register (regcache, regno, buf); + collect_register_by_name (regcache, "pc", &pc); + + /* For PC, leftshift the output as only top 21 bits are stored + This will make the value human readable for the host. */ + if (regno =3D=3D PC_REGNUM) + { + pc =3D pc << 1; + cr16_set_pc (regcache, pc); + } +} + +static const unsigned short cr16_breakpoint =3D 0xc700; +#define cr16_breakpoint_len 2 + +static int +cr16_breakpoint_at (CORE_ADDR where) +{ + unsigned short insn; + + (*the_target->read_memory) (where, (unsigned char *) &insn, + cr16_breakpoint_len); + if (insn =3D=3D cr16_breakpoint) + return 1; + /* If necessary, recognize more trap instructions here. GDB only + uses the one. */ + return 0; +} + +/* We only place breakpoints in empty marker functions, and thread locking + is outside of the function. So rather than importing software single-s= tep, + we can just run until exit. */ +static CORE_ADDR +cr16_reinsert_addr (void) +{ + struct regcache *regcache =3D get_thread_regcache (current_inferior, 1); + unsigned long pc; + + /* R14/Ra is return address register */ + collect_register_by_name (regcache, "ra", &pc); + return pc; +} + +static void +cr16_arch_setup (void) +{ + current_process ()->tdesc =3D tdesc_cr16; +} + +static struct usrregs_info cr16_usrregs_info =3D + { + cr16_num_regs, + cr16_regmap, + }; + +static struct regs_info regs_info =3D + { + NULL, /* regset_bitmap */ + &cr16_usrregs_info, + }; + +static const struct regs_info * +cr16_regs_info (void) +{ + return ®s_info; +} + +struct linux_target_ops the_low_target =3D { + cr16_arch_setup, + cr16_regs_info, + cr16_cannot_fetch_register, + cr16_cannot_store_register, + NULL, + cr16_get_pc, + cr16_set_pc, + (const unsigned char *) &cr16_breakpoint, + cr16_breakpoint_len, + cr16_reinsert_addr, + 0, + cr16_breakpoint_at, + 0, + 0, + 0, + 0, + cr16_collect_ptrace_register, + cr16_supply_ptrace_register +}; + +void +initialize_low_arch (void) +{ + init_registers_cr16 (); +} Index: gdb/regformats/reg-cr16.dat =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D RCS file: gdb/regformats/reg-cr16.dat diff -N gdb/gdbserver/reg-cr16.dat --- /dev/null 2013-05-10 19:36:04.372328500 +0530 +++ ./gdb/regformats/reg-cr16.dat 2013-06-18 15:10:23.000000000 +0530 @@ -0,0 +1,22 @@ +name:cr16 +expedite:psr,pc,usp,ra +16:r0 +16:r1 +16:r2 +16:r3 +16:r4 +16:r5 +16:r6 +16:r7 +16:r8 +16:r9 +16:r10 +16:r11 +32:r12 +32:r13 +32:ra +32:psr +32:pc +32:intbase +32:usp +32:cfg=09 --_002_C6CA53A2A46BA7469348BDBD663AB6585308FA32KCHJEXMB02kpitc_ Content-Type: application/octet-stream; name="cr16_gdbserver.diff" Content-Description: cr16_gdbserver.diff Content-Disposition: attachment; filename="cr16_gdbserver.diff"; size=7864; creation-date="Wed, 19 Jun 2013 12:49:54 GMT"; modification-date="Wed, 19 Jun 2013 12:51:08 GMT" Content-Transfer-Encoding: base64 Content-length: 10663 SW5kZXg6IGdkYi9nZGJzZXJ2ZXIvTWFrZWZpbGUuaW4KPT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9zcmMvc3JjL2dkYi9nZGJzZXJ2 ZXIvTWFrZWZpbGUuaW4sdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMTUzCmRp ZmYgLXUgLXIxLjE1MyBNYWtlZmlsZS5pbgotLS0gZ2RiL2dkYnNlcnZlci9N YWtlZmlsZS5pbgk3IEp1biAyMDEzIDEwOjQ2OjU4IC0wMDAwCTEuMTUzCisr KyBnZGIvZ2Ric2VydmVyL01ha2VmaWxlLmluCTE5IEp1biAyMDEzIDEyOjA1 OjE2IC0wMDAwCkBAIC0xMzgsNiArMTM4LDcgQEAKIAkkKHNyY2RpcikvcmVt b3RlLXV0aWxzLmMgJChzcmNkaXIpL3NlcnZlci5jICQoc3JjZGlyKS90YXJn ZXQuYyBcCiAJJChzcmNkaXIpL3RocmVhZC1kYi5jICQoc3JjZGlyKS91dGls cy5jIFwKIAkkKHNyY2RpcikvbGludXgtYXJtLWxvdy5jICQoc3JjZGlyKS9s aW51eC1iZmluLWxvdy5jIFwKKwkkKHNyY2RpcikvbGludXgtY3IxNi1sb3cu YyBcCiAJJChzcmNkaXIpL2xpbnV4LWNyaXMtbG93LmMgJChzcmNkaXIpL2xp bnV4LWNyaXN2MzItbG93LmMgXAogCSR7c3JjZGlyfS9pMzg2LWxvdy5jICQo c3JjZGlyKS9pMzg3LWZwLmMgXAogCSQoc3JjZGlyKS9saW51eC1pYTY0LWxv dy5jICQoc3JjZGlyKS9saW51eC1sb3cuYyBcCkBAIC0zMTksNyArMzIwLDcg QEAKIAlybSAtZiBhYXJjaDY0LmMKIAlybSAtZiByZWctYXJtLmMgcmVnLWJm aW4uYyBpMzg2LmMgcmVnLWlhNjQuYyByZWctbTMyci5jIHJlZy1tNjhrLmMK IAlybSAtZiByZWctc2guYyByZWctc3BhcmMuYyByZWctc3B1LmMgYW1kNjQu YyBpMzg2LWxpbnV4LmMKLQlybSAtZiByZWctY3Jpcy5jIHJlZy1jcmlzdjMy LmMgYW1kNjQtbGludXguYyByZWcteHRlbnNhLmMKKwlybSAtZiByZWctY3Ix Ni5jIHJlZy1jcmlzLmMgcmVnLWNyaXN2MzIuYyBhbWQ2NC1saW51eC5jIHJl Zy14dGVuc2EuYwogCXJtIC1mIHJlZy10aWxlZ3guYyByZWctdGlsZWd4MzIu YwogCXJtIC1mIGFybS13aXRoLWl3bW14dC5jCiAJcm0gLWYgYXJtLXdpdGgt dmZwdjIuYyBhcm0td2l0aC12ZnB2My5jIGFybS13aXRoLW5lb24uYwpAQCAt NTg0LDYgKzU4NSw4IEBACiAJJChTSEVMTCkgJChyZWdkYXRfc2gpICQoc3Jj ZGlyKS8uLi9yZWdmb3JtYXRzL2FybS13aXRoLW5lb24uZGF0IGFybS13aXRo LW5lb24uYwogcmVnLWJmaW4uYyA6ICQoc3JjZGlyKS8uLi9yZWdmb3JtYXRz L3JlZy1iZmluLmRhdCAkKHJlZ2RhdF9zaCkKIAkkKFNIRUxMKSAkKHJlZ2Rh dF9zaCkgJChzcmNkaXIpLy4uL3JlZ2Zvcm1hdHMvcmVnLWJmaW4uZGF0IHJl Zy1iZmluLmMKK3JlZy1jcjE2LmMgOiAkKHNyY2RpcikvLi4vcmVnZm9ybWF0 cy9yZWctY3IxNi5kYXQgJChyZWdkYXRfc2gpCisJJChTSEVMTCkgJChyZWdk YXRfc2gpICQoc3JjZGlyKS8uLi9yZWdmb3JtYXRzL3JlZy1jcjE2LmRhdCBy ZWctY3IxNi5jCiByZWctY3Jpcy5jIDogJChzcmNkaXIpLy4uL3JlZ2Zvcm1h dHMvcmVnLWNyaXMuZGF0ICQocmVnZGF0X3NoKQogCSQoU0hFTEwpICQocmVn ZGF0X3NoKSAkKHNyY2RpcikvLi4vcmVnZm9ybWF0cy9yZWctY3Jpcy5kYXQg cmVnLWNyaXMuYwogcmVnLWNyaXN2MzIuYyA6ICQoc3JjZGlyKS8uLi9yZWdm b3JtYXRzL3JlZy1jcmlzdjMyLmRhdCAkKHJlZ2RhdF9zaCkKSW5kZXg6IGdk Yi9nZGJzZXJ2ZXIvY29uZmlndXJlLnNydgo9PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09ClJDUyBmaWxlOiAvY3ZzL3NyYy9zcmMvZ2RiL2dkYnNlcnZlci9jb25m aWd1cmUuc3J2LHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjc2CmRpZmYgLXUg LXIxLjc2IGNvbmZpZ3VyZS5zcnYKLS0tIGdkYi9nZGJzZXJ2ZXIvY29uZmln dXJlLnNydgkyOCBNYXkgMjAxMyAxMDo0MToxNyAtMDAwMAkxLjc2CisrKyBn ZGIvZ2Ric2VydmVyL2NvbmZpZ3VyZS5zcnYJMTkgSnVuIDIwMTMgMTI6MDU6 MTYgLTAwMDAKQEAgLTg4LDYgKzg4LDExIEBACiAJCQlzcnZfbGludXhfdXNy cmVncz15ZXMKIAkJCXNydl9saW51eF90aHJlYWRfZGI9eWVzCiAJCQk7Owor ICBjcjE2LSotdWNsaW51eCkJc3J2X3JlZ29iaj1yZWctY3IxNi5vCisJCQlz cnZfdGd0b2JqPSJsaW51eC1sb3cubyBsaW51eC1jcjE2LWxvdy5vIgorCQkJ c3J2X2xpbnV4X3VzcnJlZ3M9eWVzCisJCQlzcnZfbGludXhfdGhyZWFkX2Ri PXllcworCQkJOzsKICAgY3Jpc3YzMi0qLWxpbnV4KikJc3J2X3JlZ29iaj1y ZWctY3Jpc3YzMi5vCiAJCQlzcnZfdGd0b2JqPSJsaW51eC1sb3cubyBsaW51 eC1vc2RhdGEubyBsaW51eC1jcmlzdjMyLWxvdy5vIGxpbnV4LXByb2Nmcy5v IgogCQkJc3J2X3RndG9iaj0iJHtzcnZfdGd0b2JqfSBsaW51eC1wdHJhY2Uu byIKSW5kZXg6IGdkYi9nZGJzZXJ2ZXIvY3IxNi1saW51eC10ZGVwLmMKPT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogZ2RiL2dkYnNlcnZlci9s aW51eC1jcjE2LXRkZXAuYwpkaWZmIC1OIGdkYi9nZGJzZXJ2ZXIvbGludXgt Y3IxNi10ZGVwLmMKLS0tIC9kZXYvbnVsbAkyMDEzLTA1LTEwIDE5OjM2OjA0 LjM3MjMyODUwMCArMDUzMAorKysgLi9nZGIvZ2Ric2VydmVyL2xpbnV4LWNy MTYtbG93LmMJMjAxMy0wNi0xOSAxNzo0NDowNC4wMDAwMDAwMDAgKzA1MzAK QEAgLTAsMCArMSwxOTAgQEAKKy8qIEdOVS9MaW51eC9DUjE2IHNwZWNpZmlj IGxvdyBsZXZlbCBpbnRlcmZhY2UsIGZvciB0aGUgcmVtb3RlIHNlcnZlciBm b3IgR0RCLgorCisgICBDb3B5cmlnaHQgKEMpIDIwMTItMjAxMyBGcmVlIFNv ZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyAgIENvbnRyaWJ1dGVkIGJ5IEth dXNoaWsgUGhhdGFrIChrYXVzaGlrLnBoYXRha0BrcGl0Y3VtbWlucy5jb20p CisgICBLUElUIEN1bW1pbnMgSW5mb3N5c3RlbXMgTGltaXRlZCwgUHVuZSBJ bmRpYS4gCisgICBUaGlzIGZpbGUgaXMgcGFydCBvZiBHREIuCisKKyAgIFRo aXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJp YnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgICBpdCB1bmRlciB0aGUgdGVybXMg b2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hl ZCBieQorICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVy IHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IKKyAgIChhdCB5b3VyIG9w dGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgIFRoaXMgcHJvZ3JhbSBp cyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNl ZnVsLAorICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2 ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgIE1FUkNIQU5UQUJJTElU WSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0 aGUKKyAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRl dGFpbHMuCisKKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkg b2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICBhbG9uZyB3 aXRoIHRoaXMgcHJvZ3JhbS4gIElmIG5vdCwgc2VlIDxodHRwOi8vd3d3Lmdu dS5vcmcvbGljZW5zZXMvPi4gICovCisKKyNpbmNsdWRlICJzZXJ2ZXIuaCIK KyNpbmNsdWRlICJsaW51eC1sb3cuaCIKKyNpbmNsdWRlIDxzeXMvcHRyYWNl Lmg+CisKKy8qIERlZmluZWQgaW4gYXV0by1nZW5lcmF0ZWQgZmlsZSByZWct Y3IxNi5jLiAgKi8KK3ZvaWQgaW5pdF9yZWdpc3RlcnNfY3IxNiAodm9pZCk7 CitleHRlcm4gY29uc3Qgc3RydWN0IHRhcmdldF9kZXNjICp0ZGVzY19jcjE2 OworCisvKiBDUjE2QyAgKi8KKyNkZWZpbmUgY3IxNl9udW1fcmVncyAyMAor I2RlZmluZSBQQ19SRUdOVU0gMTYKKworLyogTG9jYXRpb25zIG5lZWQgdG8g bWF0Y2ggPGluY2x1ZGUvYXNtL2FyY2gvcHRyYWNlLmg+LiAgKi8KK3N0YXRp YyBpbnQgY3IxNl9yZWdtYXBbXSA9IHsKKyAgMCwgICAyLCAgNCwgIDYsICA4 LAorICAxMCwgMTIsIDE0LCAxNiwgMTgsCisgIDIwLCAyMiwgMjQsIDI4LCAz MiwKKyAgMzYsIDQwLCA0NCwgNDgsIDUyCit9OworCitzdGF0aWMgaW50Citj cjE2X2Nhbm5vdF9zdG9yZV9yZWdpc3RlciAoaW50IHJlZ25vKQoreworICBp ZiAoY3IxNl9yZWdtYXBbcmVnbm9dID09IC0xKQorICAgIHJldHVybiAxOwor CisgIHJldHVybiAocmVnbm8gPj0gY3IxNl9udW1fcmVncyk7Cit9CisKK3N0 YXRpYyBpbnQKK2NyMTZfY2Fubm90X2ZldGNoX3JlZ2lzdGVyIChpbnQgcmVn bm8pCit7CisgIGlmIChjcjE2X3JlZ21hcFtyZWdub10gPT0gLTEpCisgICAg cmV0dXJuIDE7CisKKyAgcmV0dXJuIChyZWdubyA+PSBjcjE2X251bV9yZWdz KTsKK30KKworc3RhdGljIHZvaWQKK2NyMTZfc2V0X3BjIChzdHJ1Y3QgcmVn Y2FjaGUgKnJlZ2NhY2hlLCBDT1JFX0FERFIgcGMpCit7CisgIHVuc2lnbmVk IGxvbmcgbmV3cGMgPSBwYzsKKworICBzdXBwbHlfcmVnaXN0ZXJfYnlfbmFt ZSAocmVnY2FjaGUsICJwYyIsICZuZXdwYyk7Cit9CisKK3N0YXRpYyBDT1JF X0FERFIKK2NyMTZfZ2V0X3BjIChzdHJ1Y3QgcmVnY2FjaGUgKnJlZ2NhY2hl KQoreworICB1bnNpZ25lZCBsb25nIHBjOworCisgIGNvbGxlY3RfcmVnaXN0 ZXJfYnlfbmFtZSAocmVnY2FjaGUsICJwYyIsICZwYyk7CisgIHJldHVybiBw YzsKK30KKworc3RhdGljIHZvaWQKK2NyMTZfY29sbGVjdF9wdHJhY2VfcmVn aXN0ZXIgKHN0cnVjdCByZWdjYWNoZSAqcmVnY2FjaGUsIGludCByZWdubywg Y2hhciAqYnVmKQoreworICB1bnNpZ25lZCBsb25nIHBjOworICAgCisgIG1l bXNldCAoYnVmLCAwLCBzaXplb2YgKGxvbmcpKTsKKyAgY29sbGVjdF9yZWdp c3Rlcl9ieV9uYW1lIChyZWdjYWNoZSwgInBjIiwgJnBjKTsKKyAgaWYgKHJl Z25vID09IFBDX1JFR05VTSkKKyAgICB7CisgICAgICBwYyA9IHBjID4+IDE7 CisgICAgICBjcjE2X3NldF9wYyAocmVnY2FjaGUsIHBjKTsKKyAgICB9Cisg IGNvbGxlY3RfcmVnaXN0ZXIgKHJlZ2NhY2hlLCByZWdubywgYnVmKTsKK30K Kworc3RhdGljIHZvaWQKK2NyMTZfc3VwcGx5X3B0cmFjZV9yZWdpc3RlciAo c3RydWN0IHJlZ2NhY2hlICpyZWdjYWNoZSwKKwkJCSAgICAgaW50IHJlZ25v LCBjb25zdCBjaGFyICpidWYpCit7CisgIHVuc2lnbmVkIGxvbmcgcGM7Cisg IGludCBzaXplID0gcmVnaXN0ZXJfc2l6ZSAocmVnY2FjaGUtPnRkZXNjLCBy ZWdubyk7CisKKyAgc3VwcGx5X3JlZ2lzdGVyIChyZWdjYWNoZSwgcmVnbm8s IGJ1Zik7CisgIGNvbGxlY3RfcmVnaXN0ZXJfYnlfbmFtZSAocmVnY2FjaGUs ICJwYyIsICZwYyk7CisKKyAgLyogRm9yIFBDLCBsZWZ0c2hpZnQgdGhlIG91 dHB1dCBhcyBvbmx5IHRvcCAyMSBiaXRzIGFyZSBzdG9yZWQKKyAgICAgVGhp cyB3aWxsIG1ha2UgdGhlIHZhbHVlIGh1bWFuIHJlYWRhYmxlIGZvciB0aGUg aG9zdC4gICovCisgIGlmIChyZWdubyA9PSBQQ19SRUdOVU0pCisgICAgewor ICAgICAgcGMgPSBwYyA8PCAxOworICAgICAgY3IxNl9zZXRfcGMgKHJlZ2Nh Y2hlLCBwYyk7CisgICAgfQorfQorCitzdGF0aWMgY29uc3QgdW5zaWduZWQg c2hvcnQgY3IxNl9icmVha3BvaW50ID0gMHhjNzAwOworI2RlZmluZSBjcjE2 X2JyZWFrcG9pbnRfbGVuIDIKKworc3RhdGljIGludAorY3IxNl9icmVha3Bv aW50X2F0IChDT1JFX0FERFIgd2hlcmUpCit7CisgIHVuc2lnbmVkIHNob3J0 IGluc247CisKKyAgKCp0aGVfdGFyZ2V0LT5yZWFkX21lbW9yeSkgKHdoZXJl LCAodW5zaWduZWQgY2hhciAqKSAmaW5zbiwKKwkJCSAgICAgIGNyMTZfYnJl YWtwb2ludF9sZW4pOworICBpZiAoaW5zbiA9PSBjcjE2X2JyZWFrcG9pbnQp CisgICAgcmV0dXJuIDE7CisgIC8qIElmIG5lY2Vzc2FyeSwgcmVjb2duaXpl IG1vcmUgdHJhcCBpbnN0cnVjdGlvbnMgaGVyZS4gIEdEQiBvbmx5CisgICAg IHVzZXMgdGhlIG9uZS4gICovCisgIHJldHVybiAwOworfQorCisvKiBXZSBv bmx5IHBsYWNlIGJyZWFrcG9pbnRzIGluIGVtcHR5IG1hcmtlciBmdW5jdGlv bnMsIGFuZCB0aHJlYWQgbG9ja2luZworICAgaXMgb3V0c2lkZSBvZiB0aGUg ZnVuY3Rpb24uICBTbyByYXRoZXIgdGhhbiBpbXBvcnRpbmcgc29mdHdhcmUg c2luZ2xlLXN0ZXAsCisgICB3ZSBjYW4ganVzdCBydW4gdW50aWwgZXhpdC4g ICovCitzdGF0aWMgQ09SRV9BRERSCitjcjE2X3JlaW5zZXJ0X2FkZHIgKHZv aWQpCit7CisgIHN0cnVjdCByZWdjYWNoZSAqcmVnY2FjaGUgPSBnZXRfdGhy ZWFkX3JlZ2NhY2hlIChjdXJyZW50X2luZmVyaW9yLCAxKTsKKyAgdW5zaWdu ZWQgbG9uZyBwYzsKKworICAvKiBSMTQvUmEgaXMgcmV0dXJuIGFkZHJlc3Mg cmVnaXN0ZXIgICovCisgIGNvbGxlY3RfcmVnaXN0ZXJfYnlfbmFtZSAocmVn Y2FjaGUsICJyYSIsICZwYyk7CisgIHJldHVybiBwYzsKK30KKworc3RhdGlj IHZvaWQKK2NyMTZfYXJjaF9zZXR1cCAodm9pZCkKK3sKKyAgY3VycmVudF9w cm9jZXNzICgpLT50ZGVzYyA9IHRkZXNjX2NyMTY7Cit9CisKK3N0YXRpYyBz dHJ1Y3QgdXNycmVnc19pbmZvIGNyMTZfdXNycmVnc19pbmZvID0KKyAgewor ICAgIGNyMTZfbnVtX3JlZ3MsCisgICAgY3IxNl9yZWdtYXAsCisgIH07CisK K3N0YXRpYyBzdHJ1Y3QgcmVnc19pbmZvIHJlZ3NfaW5mbyA9CisgIHsKKyAg ICBOVUxMLCAvKiByZWdzZXRfYml0bWFwICovCisgICAgJmNyMTZfdXNycmVn c19pbmZvLAorICB9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IHJlZ3NfaW5m byAqCitjcjE2X3JlZ3NfaW5mbyAodm9pZCkKK3sKKyAgcmV0dXJuICZyZWdz X2luZm87Cit9CisKK3N0cnVjdCBsaW51eF90YXJnZXRfb3BzIHRoZV9sb3df dGFyZ2V0ID0geworICBjcjE2X2FyY2hfc2V0dXAsCisgIGNyMTZfcmVnc19p bmZvLAorICBjcjE2X2Nhbm5vdF9mZXRjaF9yZWdpc3RlciwKKyAgY3IxNl9j YW5ub3Rfc3RvcmVfcmVnaXN0ZXIsCisgIE5VTEwsCisgIGNyMTZfZ2V0X3Bj LAorICBjcjE2X3NldF9wYywKKyAgKGNvbnN0IHVuc2lnbmVkIGNoYXIgKikg JmNyMTZfYnJlYWtwb2ludCwKKyAgY3IxNl9icmVha3BvaW50X2xlbiwKKyAg Y3IxNl9yZWluc2VydF9hZGRyLAorICAwLAorICBjcjE2X2JyZWFrcG9pbnRf YXQsCisgIDAsCisgIDAsCisgIDAsCisgIDAsCisgIGNyMTZfY29sbGVjdF9w dHJhY2VfcmVnaXN0ZXIsCisgIGNyMTZfc3VwcGx5X3B0cmFjZV9yZWdpc3Rl cgorfTsKKwordm9pZAoraW5pdGlhbGl6ZV9sb3dfYXJjaCAodm9pZCkKK3sK KyAgaW5pdF9yZWdpc3RlcnNfY3IxNiAoKTsKK30KSW5kZXg6IGdkYi9yZWdm b3JtYXRzL3JlZy1jcjE2LmRhdAo9PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJD UyBmaWxlOiBnZGIvcmVnZm9ybWF0cy9yZWctY3IxNi5kYXQKZGlmZiAtTiBn ZGIvZ2Ric2VydmVyL3JlZy1jcjE2LmRhdAotLS0gL2Rldi9udWxsCTIwMTMt MDUtMTAgMTk6MzY6MDQuMzcyMzI4NTAwICswNTMwCisrKyAuL2dkYi9yZWdm b3JtYXRzL3JlZy1jcjE2LmRhdAkyMDEzLTA2LTE4IDE1OjEwOjIzLjAwMDAw MDAwMCArMDUzMApAQCAtMCwwICsxLDIyIEBACituYW1lOmNyMTYKK2V4cGVk aXRlOnBzcixwYyx1c3AscmEKKzE2OnIwCisxNjpyMQorMTY6cjIKKzE2OnIz CisxNjpyNAorMTY6cjUKKzE2OnI2CisxNjpyNworMTY6cjgKKzE2OnI5Cisx NjpyMTAKKzE2OnIxMQorMzI6cjEyCiszMjpyMTMKKzMyOnJhCiszMjpwc3IK KzMyOnBjCiszMjppbnRiYXNlCiszMjp1c3AKKzMyOmNmZw== --_002_C6CA53A2A46BA7469348BDBD663AB6585308FA32KCHJEXMB02kpitc_--