From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 25397 invoked by alias); 11 Oct 2011 23:30:46 -0000 Received: (qmail 25376 invoked by uid 22791); 11 Oct 2011 23:30:43 -0000 X-SWARE-Spam-Status: No, hits=-2.6 required=5.0 tests=AWL,BAYES_00,DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,RP_MATCHES_RCVD,SPF_HELO_PASS,TW_BJ,TW_DL X-Spam-Check-By: sourceware.org Received: from smtp-out.google.com (HELO smtp-out.google.com) (74.125.121.67) by sourceware.org (qpsmtpd/0.43rc1) with ESMTP; Tue, 11 Oct 2011 23:30:26 +0000 Received: from hpaq3.eem.corp.google.com (hpaq3.eem.corp.google.com [172.25.149.3]) by smtp-out.google.com with ESMTP id p9BNUO3x021834 for ; Tue, 11 Oct 2011 16:30:24 -0700 Received: from gyc15 (gyc15.prod.google.com [10.243.49.143]) by hpaq3.eem.corp.google.com with ESMTP id p9BNRqLu024856 (version=TLSv1/SSLv3 cipher=RC4-SHA bits=128 verify=NOT) for ; Tue, 11 Oct 2011 16:30:23 -0700 Received: by gyc15 with SMTP id 15so215527gyc.2 for ; Tue, 11 Oct 2011 16:30:22 -0700 (PDT) Received: by 10.101.142.31 with SMTP id u31mr4960365ann.112.1318375822567; Tue, 11 Oct 2011 16:30:22 -0700 (PDT) MIME-Version: 1.0 Received: by 10.101.142.31 with SMTP id u31mr4960360ann.112.1318375822371; Tue, 11 Oct 2011 16:30:22 -0700 (PDT) Received: by 10.100.225.14 with HTTP; Tue, 11 Oct 2011 16:30:22 -0700 (PDT) In-Reply-To: <4E94CFDA.6000301@redhat.com> References: <20111011.185517.2020323061809487779.davem@davemloft.net> <4E94CFDA.6000301@redhat.com> Date: Tue, 11 Oct 2011 23:30:00 -0000 Message-ID: Subject: Re: build broken by dwarf2read.c changes From: Sterling Augustine To: Keith Seitz Cc: gdb-patches@sourceware.org Content-Type: multipart/mixed; boundary=0016e68f9ec092aa7204af0e4a42 X-System-Of-Record: true 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: 2011-10/txt/msg00337.txt.bz2 --0016e68f9ec092aa7204af0e4a42 Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: quoted-printable Content-length: 29735 Checked in as obvious. Sterling 2011-10-11 =A0Sterling Augustine =A0 * dwarf2read.c: Undo inadvertent changes in previous commit. On Tue, Oct 11, 2011 at 4:23 PM, Keith Seitz wrote: > On 10/11/2011 03:55 PM, David Miller wrote: >> >> The recent commit which claims to rearrange conditional logic >> in partial_die_parent_scope() does a lot of other things to >> dwarf2read.c > > $ cvs log dwarf2read.c > [snip] > revision 1.569 > date: 2011/10/11 19:19:07; =A0author: sterling; =A0state: Exp; =A0lines: = +52 -408 > gdb/ChangeLog > 2011-10-11 =A0Sterling Augustine =A0 > > =A0 =A0 =A0 =A0* dwarf2read.c (partial_die_parent_scope): Rearrange condi= tional > =A0 =A0 =A0 =A0logic. > > gdb/testsuite/ChangeLog > 2011-10-11 =A0Sterling Augustine =A0 > > =A0 =A0 =A0 =A0* gdb.cp/Makefile.in: Add namespace-enum test. > =A0 =A0 =A0 =A0* gdb.cp/namespace-enum.exp: New file. > =A0 =A0 =A0 =A0* gdb.cp/namespace-enum.c: New file. > =A0 =A0 =A0 =A0* gdb.cp/namespace-enum-main.c: New file. > [snip] > > $ cvs diff -r 1.568 -r 1.569 dwarf2read.c > Index: dwarf2read.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: /cvs/src/src/gdb/dwarf2read.c,v > retrieving revision 1.568 > retrieving revision 1.569 > diff -u -p -r1.568 -r1.569 > --- dwarf2read.c =A0 =A0 =A0 =A09 Oct 2011 19:34:18 -0000 =A0 =A0 =A0 1.5= 68 > +++ dwarf2read.c =A0 =A0 =A0 =A011 Oct 2011 19:19:07 -0000 =A0 =A0 =A01.5= 69 > @@ -407,9 +407,6 @@ struct dwarf2_cu > =A0 =A0 =A0after all type information has been read. =A0*/ > =A0 VEC (delayed_method_info) *method_list; > > - =A0/* To be copied to symtab->call_site_htab. =A0*/ > - =A0htab_t call_site_htab; > - > =A0 /* Mark used when releasing cached dies. =A0*/ > =A0 unsigned int mark : 1; > > @@ -1082,8 +1079,6 @@ static void read_func_scope (struct die_ > > =A0static void read_lexical_block_scope (struct die_info *, struct dwarf2= _cu > *); > > -static void read_call_site_scope (struct die_info *die, struct dwarf2_cu > *cu); > - > =A0static int dwarf2_ranges_read (unsigned, CORE_ADDR *, CORE_ADDR *, > =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 struct dwarf2= _cu *, struct partial_symtab *); > > @@ -2655,21 +2650,7 @@ dw2_find_symbol_file (struct objfile *ob > > =A0 /* index_table is NULL if OBJF_READNOW. =A0*/ > =A0 if (!dwarf2_per_objfile->index_table) > - =A0 =A0{ > - =A0 =A0 =A0struct symtab *s; > - > - =A0 =A0 =A0ALL_OBJFILE_SYMTABS (objfile, s) > - =A0 =A0 =A0 if (s->primary) > - =A0 =A0 =A0 =A0 { > - =A0 =A0 =A0 =A0 =A0 struct blockvector *bv =3D BLOCKVECTOR (s); > - =A0 =A0 =A0 =A0 =A0 const struct block *block =3D BLOCKVECTOR_BLOCK (bv, > GLOBAL_BLOCK); > - =A0 =A0 =A0 =A0 =A0 struct symbol *sym =3D lookup_block_symbol (block, = name, > VAR_DOMAIN); > - > - =A0 =A0 =A0 =A0 =A0 if (sym) > - =A0 =A0 =A0 =A0 =A0 =A0 return sym->symtab->filename; > - =A0 =A0 =A0 =A0 } > - =A0 =A0 =A0return NULL; > - =A0 =A0} > + =A0 =A0return NULL; > > =A0 if (!find_slot_in_mapped_hash (dwarf2_per_objfile->index_table, > =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 name, &ve= c)) > @@ -3897,7 +3878,10 @@ partial_die_parent_scope (struct partial > =A0 =A0 =A0 return NULL; > =A0 =A0 } > > - =A0if (parent->tag =3D=3D DW_TAG_namespace > + =A0if (pdi->tag =3D=3D DW_TAG_enumerator) > + =A0 =A0/* Enumerators should not get the name of the enumeration as a p= refix. > =A0*/ > + =A0 =A0parent->scope =3D grandparent_scope; > + =A0else if (parent->tag =3D=3D DW_TAG_namespace > =A0 =A0 =A0 || parent->tag =3D=3D DW_TAG_module > =A0 =A0 =A0 || parent->tag =3D=3D DW_TAG_structure_type > =A0 =A0 =A0 || parent->tag =3D=3D DW_TAG_class_type > @@ -3912,9 +3896,6 @@ partial_die_parent_scope (struct partial > =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 = =A0 =A0 grandparent_scope, > =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 = =A0 =A0 parent->name, 0, cu); > =A0 =A0 } > - =A0else if (parent->tag =3D=3D DW_TAG_enumerator) > - =A0 =A0/* Enumerators should not get the name of the enumeration as a p= refix. > =A0*/ > - =A0 =A0parent->scope =3D grandparent_scope; > =A0 else > =A0 =A0 { > =A0 =A0 =A0 /* FIXME drow/2004-04-01: What should we be doing with > @@ -4804,8 +4785,6 @@ process_full_comp_unit (struct dwarf2_pe > > =A0 =A0 =A0 if (gcc_4_minor >=3D 5) > =A0 =A0 =A0 =A0symtab->epilogue_unwind_valid =3D 1; > - > - =A0 =A0 =A0symtab->call_site_htab =3D cu->call_site_htab; > =A0 =A0 } > > =A0 if (dwarf2_per_objfile->using_index) > @@ -4844,9 +4823,6 @@ process_die (struct die_info *die, struc > =A0 =A0 case DW_TAG_catch_block: > =A0 =A0 =A0 read_lexical_block_scope (die, cu); > =A0 =A0 =A0 break; > - =A0 =A0case DW_TAG_GNU_call_site: > - =A0 =A0 =A0read_call_site_scope (die, cu); > - =A0 =A0 =A0break; > =A0 =A0 case DW_TAG_class_type: > =A0 =A0 case DW_TAG_interface_type: > =A0 =A0 case DW_TAG_structure_type: > @@ -6141,258 +6117,6 @@ read_lexical_block_scope (struct die_inf > =A0 using_directives =3D new->using_directives; > =A0} > > -/* Read in DW_TAG_GNU_call_site and insert it to CU->call_site_htab. =A0= */ > - > -static void > -read_call_site_scope (struct die_info *die, struct dwarf2_cu *cu) > -{ > - =A0struct objfile *objfile =3D cu->objfile; > - =A0struct gdbarch *gdbarch =3D get_objfile_arch (objfile); > - =A0CORE_ADDR pc, baseaddr; > - =A0struct attribute *attr; > - =A0struct call_site *call_site, call_site_local; > - =A0void **slot; > - =A0int nparams; > - =A0struct die_info *child_die; > - > - =A0baseaddr =3D ANOFFSET (objfile->section_offsets, SECT_OFF_TEXT (objf= ile)); > - > - =A0attr =3D dwarf2_attr (die, DW_AT_low_pc, cu); > - =A0if (!attr) > - =A0 =A0{ > - =A0 =A0 =A0complaint (&symfile_complaints, > - =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0_("missing DW_AT_low_pc for DW_TAG_GNU_c= all_site " > - =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0"DIE 0x%x [in module %s]"), > - =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0die->offset, cu->objfile->name); > - =A0 =A0 =A0return; > - =A0 =A0} > - =A0pc =3D DW_ADDR (attr) + baseaddr; > - > - =A0if (cu->call_site_htab =3D=3D NULL) > - =A0 =A0cu->call_site_htab =3D htab_create_alloc_ex (16, core_addr_hash, > core_addr_eq, > - =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0= =A0 =A0 =A0 =A0 =A0NULL, > &objfile->objfile_obstack, > - =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0= =A0 =A0 =A0 =A0 =A0hashtab_obstack_allocate, > NULL); > - =A0call_site_local.pc =3D pc; > - =A0slot =3D htab_find_slot (cu->call_site_htab, &call_site_local, INSER= T); > - =A0if (*slot !=3D NULL) > - =A0 =A0{ > - =A0 =A0 =A0complaint (&symfile_complaints, > - =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0_("Duplicate PC %s for DW_TAG_GNU_call_s= ite " > - =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0"DIE 0x%x [in module %s]"), > - =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0paddress (gdbarch, pc), die->offset, cu-= >objfile->name); > - =A0 =A0 =A0return; > - =A0 =A0} > - > - =A0/* Count parameters at the caller. =A0*/ > - > - =A0nparams =3D 0; > - =A0for (child_die =3D die->child; child_die && child_die->tag; > - =A0 =A0 =A0 child_die =3D sibling_die (child_die)) > - =A0 =A0{ > - =A0 =A0 =A0if (child_die->tag !=3D DW_TAG_GNU_call_site_parameter) > - =A0 =A0 =A0 { > - =A0 =A0 =A0 =A0 complaint (&symfile_complaints, > - =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0_("Tag %d is not DW_TAG_GNU_call= _site_parameter in " > - =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0"DW_TAG_GNU_call_site child = DIE 0x%x [in module > %s]"), > - =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0child_die->tag, child_die->offse= t, cu->objfile->name); > - =A0 =A0 =A0 =A0 continue; > - =A0 =A0 =A0 } > - > - =A0 =A0 =A0nparams++; > - =A0 =A0} > - > - =A0call_site =3D obstack_alloc (&objfile->objfile_obstack, > - =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0(sizeof (*call_s= ite) > - =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 + (sizeof (*cal= l_site->parameter) > - =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0* (npara= ms - 1)))); > - =A0*slot =3D call_site; > - =A0memset (call_site, 0, sizeof (*call_site) - sizeof > (*call_site->parameter)); > - =A0call_site->pc =3D pc; > - > - =A0if (dwarf2_flag_true_p (die, DW_AT_GNU_tail_call, cu)) > - =A0 =A0{ > - =A0 =A0 =A0struct die_info *func_die; > - > - =A0 =A0 =A0/* Skip also over DW_TAG_inlined_subroutine. =A0*/ > - =A0 =A0 =A0for (func_die =3D die->parent; > - =A0 =A0 =A0 =A0 =A0func_die && func_die->tag !=3D DW_TAG_subprogram > - =A0 =A0 =A0 =A0 =A0&& func_die->tag !=3D DW_TAG_subroutine_type; > - =A0 =A0 =A0 =A0 =A0func_die =3D func_die->parent); > - > - =A0 =A0 =A0/* DW_AT_GNU_all_call_sites is a superset > - =A0 =A0 =A0 =A0of DW_AT_GNU_all_tail_call_sites. =A0*/ > - =A0 =A0 =A0if (func_die > - =A0 =A0 =A0 =A0 =A0&& !dwarf2_flag_true_p (func_die, DW_AT_GNU_all_call= _sites, cu) > - =A0 =A0 =A0 =A0 && !dwarf2_flag_true_p (func_die, DW_AT_GNU_all_tail_ca= ll_sites, > cu)) > - =A0 =A0 =A0 { > - =A0 =A0 =A0 =A0 /* TYPE_TAIL_CALL_LIST is not interesting in functions = where it is > - =A0 =A0 =A0 =A0 =A0 =A0not complete. =A0But keep CALL_SITE for look ups= via > call_site_htab, > - =A0 =A0 =A0 =A0 =A0 =A0both the initial caller containing the real retu= rn address PC > and > - =A0 =A0 =A0 =A0 =A0 =A0the final callee containing the current PC of a = chain of tail > - =A0 =A0 =A0 =A0 =A0 =A0calls do not need to have the tail call list com= plete. =A0But any > - =A0 =A0 =A0 =A0 =A0 =A0function candidate for a virtual tail call frame= searched via > - =A0 =A0 =A0 =A0 =A0 =A0TYPE_TAIL_CALL_LIST must have the tail call list= complete to be > - =A0 =A0 =A0 =A0 =A0 =A0determined unambiguously. =A0*/ > - =A0 =A0 =A0 } > - =A0 =A0 =A0else > - =A0 =A0 =A0 { > - =A0 =A0 =A0 =A0 struct type *func_type =3D NULL; > - > - =A0 =A0 =A0 =A0 if (func_die) > - =A0 =A0 =A0 =A0 =A0 func_type =3D get_die_type (func_die, cu); > - =A0 =A0 =A0 =A0 if (func_type !=3D NULL) > - =A0 =A0 =A0 =A0 =A0 { > - =A0 =A0 =A0 =A0 =A0 =A0 gdb_assert (TYPE_CODE (func_type) =3D=3D TYPE_C= ODE_FUNC); > - > - =A0 =A0 =A0 =A0 =A0 =A0 /* Enlist this call site to the function. =A0*/ > - =A0 =A0 =A0 =A0 =A0 =A0 call_site->tail_call_next =3D TYPE_TAIL_CALL_LI= ST (func_type); > - =A0 =A0 =A0 =A0 =A0 =A0 TYPE_TAIL_CALL_LIST (func_type) =3D call_site; > - =A0 =A0 =A0 =A0 =A0 } > - =A0 =A0 =A0 =A0 else > - =A0 =A0 =A0 =A0 =A0 complaint (&symfile_complaints, > - =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0_("Cannot find function owni= ng DW_TAG_GNU_call_site " > - =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0"DIE 0x%x [in module %s]= "), > - =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0die->offset, cu->objfile->na= me); > - =A0 =A0 =A0 } > - =A0 =A0} > - > - =A0attr =3D dwarf2_attr (die, DW_AT_GNU_call_site_target, cu); > - =A0if (attr =3D=3D NULL) > - =A0 =A0attr =3D dwarf2_attr (die, DW_AT_abstract_origin, cu); > - =A0SET_FIELD_DWARF_BLOCK (call_site->target, NULL); > - =A0if (!attr || (attr_form_is_block (attr) && DW_BLOCK (attr)->size =3D= =3D 0)) > - =A0 =A0/* Keep NULL DWARF_BLOCK. =A0*/; > - =A0else if (attr_form_is_block (attr)) > - =A0 =A0{ > - =A0 =A0 =A0struct dwarf2_locexpr_baton *dlbaton; > - > - =A0 =A0 =A0dlbaton =3D obstack_alloc (&objfile->objfile_obstack, sizeof > (*dlbaton)); > - =A0 =A0 =A0dlbaton->data =3D DW_BLOCK (attr)->data; > - =A0 =A0 =A0dlbaton->size =3D DW_BLOCK (attr)->size; > - =A0 =A0 =A0dlbaton->per_cu =3D cu->per_cu; > - > - =A0 =A0 =A0SET_FIELD_DWARF_BLOCK (call_site->target, dlbaton); > - =A0 =A0} > - =A0else if (is_ref_attr (attr)) > - =A0 =A0{ > - =A0 =A0 =A0struct objfile *objfile =3D cu->objfile; > - =A0 =A0 =A0struct dwarf2_cu *target_cu =3D cu; > - =A0 =A0 =A0struct die_info *target_die; > - > - =A0 =A0 =A0target_die =3D follow_die_ref_or_sig (die, attr, &target_cu); > - =A0 =A0 =A0gdb_assert (target_cu->objfile =3D=3D objfile); > - =A0 =A0 =A0if (die_is_declaration (target_die, target_cu)) > - =A0 =A0 =A0 { > - =A0 =A0 =A0 =A0 const char *target_physname; > - > - =A0 =A0 =A0 =A0 target_physname =3D dwarf2_physname (NULL, target_die, = target_cu); > - =A0 =A0 =A0 =A0 if (target_physname =3D=3D NULL) > - =A0 =A0 =A0 =A0 =A0 complaint (&symfile_complaints, > - =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0_("DW_AT_GNU_call_site_targe= t target DIE has invalid > " > - =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0"physname, for referenci= ng DIE 0x%x [in module > %s]"), > - =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0die->offset, cu->objfile->na= me); > - =A0 =A0 =A0 =A0 else > - =A0 =A0 =A0 =A0 =A0 SET_FIELD_PHYSNAME (call_site->target, (char *) > target_physname); > - =A0 =A0 =A0 } > - =A0 =A0 =A0else > - =A0 =A0 =A0 { > - =A0 =A0 =A0 =A0 CORE_ADDR lowpc; > - > - =A0 =A0 =A0 =A0 /* DW_AT_entry_pc should be preferred. =A0*/ > - =A0 =A0 =A0 =A0 if (!dwarf2_get_pc_bounds (target_die, &lowpc, NULL, ta= rget_cu, > NULL)) > - =A0 =A0 =A0 =A0 =A0 complaint (&symfile_complaints, > - =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0_("DW_AT_GNU_call_site_targe= t target DIE has invalid > " > - =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0"low pc, for referencing= DIE 0x%x [in module %s]"), > - =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0die->offset, cu->objfile->na= me); > - =A0 =A0 =A0 =A0 else > - =A0 =A0 =A0 =A0 =A0 SET_FIELD_PHYSADDR (call_site->target, lowpc + base= addr); > - =A0 =A0 =A0 } > - =A0 =A0} > - =A0else > - =A0 =A0complaint (&symfile_complaints, > - =A0 =A0 =A0 =A0 =A0 =A0 =A0_("DW_TAG_GNU_call_site DW_AT_GNU_call_site_= target is neither > " > - =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0"block nor reference, for DIE 0x%x [in m= odule %s]"), > - =A0 =A0 =A0 =A0 =A0 =A0 =A0die->offset, cu->objfile->name); > - > - =A0call_site->per_cu =3D cu->per_cu; > - > - =A0for (child_die =3D die->child; > - =A0 =A0 =A0 child_die && child_die->tag; > - =A0 =A0 =A0 child_die =3D sibling_die (child_die)) > - =A0 =A0{ > - =A0 =A0 =A0struct dwarf2_locexpr_baton *dlbaton; > - =A0 =A0 =A0struct call_site_parameter *parameter; > - > - =A0 =A0 =A0if (child_die->tag !=3D DW_TAG_GNU_call_site_parameter) > - =A0 =A0 =A0 { > - =A0 =A0 =A0 =A0 /* Already printed the complaint above. =A0*/ > - =A0 =A0 =A0 =A0 continue; > - =A0 =A0 =A0 } > - > - =A0 =A0 =A0gdb_assert (call_site->parameter_count < nparams); > - =A0 =A0 =A0parameter =3D &call_site->parameter[call_site->parameter_cou= nt]; > - > - =A0 =A0 =A0/* DW_AT_location specifies the register number. =A0Value of= the data > - =A0 =A0 =A0 =A0assumed for the register is contained in DW_AT_GNU_call_= site_value. > =A0*/ > - > - =A0 =A0 =A0attr =3D dwarf2_attr (child_die, DW_AT_location, cu); > - =A0 =A0 =A0if (!attr || !attr_form_is_block (attr)) > - =A0 =A0 =A0 { > - =A0 =A0 =A0 =A0 complaint (&symfile_complaints, > - =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0_("No DW_FORM_block* DW_AT_locat= ion for " > - =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0"DW_TAG_GNU_call_site child = DIE 0x%x [in module > %s]"), > - =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0child_die->offset, cu->objfile->= name); > - =A0 =A0 =A0 =A0 continue; > - =A0 =A0 =A0 } > - =A0 =A0 =A0parameter->dwarf_reg =3D dwarf_block_to_dwarf_reg (DW_BLOCK > (attr)->data, > - =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0&DW_BLOC= K (attr)->data[DW_BLOCK > (attr)->size]); > - =A0 =A0 =A0if (parameter->dwarf_reg =3D=3D -1 > - =A0 =A0 =A0 =A0 && !dwarf_block_to_sp_offset (gdbarch, DW_BLOCK (attr)-= >data, > - =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 &DW_BLO= CK (attr)->data[DW_BLOCK > (attr)->size], > - =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0= =A0 ¶meter->fb_offset)) > - =A0 =A0 =A0 { > - =A0 =A0 =A0 =A0 complaint (&symfile_complaints, > - =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0_("Only single DW_OP_reg or DW_O= P_fbreg is supported " > - =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0"for DW_FORM_block* DW_AT_lo= cation for " > - =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0"DW_TAG_GNU_call_site child = DIE 0x%x [in module > %s]"), > - =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0child_die->offset, cu->objfile->= name); > - =A0 =A0 =A0 =A0 continue; > - =A0 =A0 =A0 } > - > - =A0 =A0 =A0attr =3D dwarf2_attr (child_die, DW_AT_GNU_call_site_value, = cu); > - =A0 =A0 =A0if (!attr_form_is_block (attr)) > - =A0 =A0 =A0 { > - =A0 =A0 =A0 =A0 complaint (&symfile_complaints, > - =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0_("No DW_FORM_block* DW_AT_GNU_c= all_site_value for " > - =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0"DW_TAG_GNU_call_site child = DIE 0x%x [in module > %s]"), > - =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0child_die->offset, cu->objfile->= name); > - =A0 =A0 =A0 =A0 continue; > - =A0 =A0 =A0 } > - =A0 =A0 =A0parameter->value =3D DW_BLOCK (attr)->data; > - =A0 =A0 =A0parameter->value_size =3D DW_BLOCK (attr)->size; > - > - =A0 =A0 =A0/* Parameters are not pre-cleared by memset above. =A0*/ > - =A0 =A0 =A0parameter->data_value =3D NULL; > - =A0 =A0 =A0parameter->data_value_size =3D 0; > - =A0 =A0 =A0call_site->parameter_count++; > - > - =A0 =A0 =A0attr =3D dwarf2_attr (child_die, DW_AT_GNU_call_site_data_va= lue, cu); > - =A0 =A0 =A0if (attr) > - =A0 =A0 =A0 { > - =A0 =A0 =A0 =A0 if (!attr_form_is_block (attr)) > - =A0 =A0 =A0 =A0 =A0 complaint (&symfile_complaints, > - =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0_("No DW_FORM_block* DW_AT_G= NU_call_site_data_value > for " > - =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0"DW_TAG_GNU_call_site ch= ild DIE 0x%x [in module > %s]"), > - =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0child_die->offset, cu->objfi= le->name); > - =A0 =A0 =A0 =A0 else > - =A0 =A0 =A0 =A0 =A0 { > - =A0 =A0 =A0 =A0 =A0 =A0 parameter->data_value =3D DW_BLOCK (attr)->data; > - =A0 =A0 =A0 =A0 =A0 =A0 parameter->data_value_size =3D DW_BLOCK (attr)-= >size; > - =A0 =A0 =A0 =A0 =A0 } > - =A0 =A0 =A0 } > - =A0 =A0} > -} > - > =A0/* Get low and high pc attributes from DW_AT_ranges attribute value OF= FSET. > =A0 =A0Return 1 if the attributes are present and valid, otherwise, retur= n 0. > =A0 =A0If RANGES_PST is not NULL we should setup `objfile->psymtabs_addrm= ap'. > =A0*/ > @@ -6592,8 +6316,7 @@ dwarf2_get_pc_bounds (struct die_info *d > =A0 =A0 return 0; > > =A0 *lowpc =3D low; > - =A0if (highpc) > - =A0 =A0*highpc =3D high; > + =A0*highpc =3D high; > =A0 return ret; > =A0} > > @@ -10078,10 +9801,9 @@ fixup_partial_die (struct partial_die_in > =A0 /* GCC might emit a nameless struct or union that has a linkage > =A0 =A0 =A0name. =A0See http://gcc.gnu.org/bugzilla/show_bug.cgi?id=3D475= 10. =A0*/ > =A0 if (part_die->name =3D=3D NULL > - =A0 =A0 =A0&& (part_die->tag =3D=3D DW_TAG_class_type > - =A0 =A0 =A0 =A0 || part_die->tag =3D=3D DW_TAG_interface_type > - =A0 =A0 =A0 =A0 || part_die->tag =3D=3D DW_TAG_structure_type > - =A0 =A0 =A0 =A0 || part_die->tag =3D=3D DW_TAG_union_type) > + =A0 =A0 =A0&& (part_die->tag =3D=3D DW_TAG_structure_type > + =A0 =A0 =A0 =A0 || part_die->tag =3D=3D DW_TAG_union_type > + =A0 =A0 =A0 =A0 || part_die->tag =3D=3D DW_TAG_class_type) > =A0 =A0 =A0 && part_die->linkage_name !=3D NULL) > =A0 =A0 { > =A0 =A0 =A0 char *demangled; > @@ -10089,17 +9811,7 @@ fixup_partial_die (struct partial_die_in > =A0 =A0 =A0 demangled =3D cplus_demangle (part_die->linkage_name, DMGL_TY= PES); > =A0 =A0 =A0 if (demangled) > =A0 =A0 =A0 =A0{ > - =A0 =A0 =A0 =A0 const char *base; > - > - =A0 =A0 =A0 =A0 /* Strip any leading namespaces/classes, keep only the = base name. > - =A0 =A0 =A0 =A0 =A0 =A0DW_AT_name for named DIEs does not contain the p= refixes. =A0*/ > - =A0 =A0 =A0 =A0 base =3D strrchr (demangled, ':'); > - =A0 =A0 =A0 =A0 if (base && base > demangled && base[-1] =3D=3D ':') > - =A0 =A0 =A0 =A0 =A0 base++; > - =A0 =A0 =A0 =A0 else > - =A0 =A0 =A0 =A0 =A0 base =3D demangled; > - > - =A0 =A0 =A0 =A0 part_die->name =3D obsavestring (base, strlen (base), > + =A0 =A0 =A0 =A0 part_die->name =3D obsavestring (demangled, strlen (dem= angled), > =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 = =A0 =A0 &cu->objfile->objfile_obstack); > =A0 =A0 =A0 =A0 =A0xfree (demangled); > =A0 =A0 =A0 =A0} > @@ -12448,42 +12160,6 @@ guess_full_die_structure_name (struct di > =A0 return NULL; > =A0} > > -/* GCC might emit a nameless typedef that has a linkage name. Determine = the > - =A0 prefix part in such case. =A0See > - =A0 http://gcc.gnu.org/bugzilla/show_bug.cgi?id=3D47510. =A0*/ > - > -static char * > -anonymous_struct_prefix (struct die_info *die, struct dwarf2_cu *cu) > -{ > - =A0struct attribute *attr; > - =A0char *base; > - > - =A0if (die->tag !=3D DW_TAG_class_type && die->tag !=3D DW_TAG_interfac= e_type > - =A0 =A0 =A0&& die->tag !=3D DW_TAG_structure_type && die->tag !=3D > DW_TAG_union_type) > - =A0 =A0return NULL; > - > - =A0attr =3D dwarf2_attr (die, DW_AT_name, cu); > - =A0if (attr !=3D NULL && DW_STRING (attr) !=3D NULL) > - =A0 =A0return NULL; > - > - =A0attr =3D dwarf2_attr (die, DW_AT_linkage_name, cu); > - =A0if (attr =3D=3D NULL) > - =A0 =A0attr =3D dwarf2_attr (die, DW_AT_MIPS_linkage_name, cu); > - =A0if (attr =3D=3D NULL || DW_STRING (attr) =3D=3D NULL) > - =A0 =A0return NULL; > - > - =A0/* dwarf2_name had to be already called. =A0*/ > - =A0gdb_assert (DW_STRING_IS_CANONICAL (attr)); > - > - =A0/* Strip the base name, keep any leading namespaces/classes. =A0*/ > - =A0base =3D strrchr (DW_STRING (attr), ':'); > - =A0if (base =3D=3D NULL || base =3D=3D DW_STRING (attr) || base[-1] != =3D ':') > - =A0 =A0return ""; > - > - =A0return obsavestring (DW_STRING (attr), &base[-1] - DW_STRING (attr), > - =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0&cu->objfile->objfile_obstac= k); > -} > - > =A0/* Return the name of the namespace/class that DIE is defined within, > =A0 =A0or "" if we can't tell. =A0The caller should not xfree the result. > > @@ -12505,16 +12181,11 @@ determine_prefix (struct die_info *die, > =A0 struct die_info *parent, *spec_die; > =A0 struct dwarf2_cu *spec_cu; > =A0 struct type *parent_type; > - =A0char *retval; > > =A0 if (cu->language !=3D language_cplus && cu->language !=3D language_ja= va > =A0 =A0 =A0 && cu->language !=3D language_fortran) > =A0 =A0 return ""; > > - =A0retval =3D anonymous_struct_prefix (die, cu); > - =A0if (retval) > - =A0 =A0return retval; > - > =A0 /* We have to be careful in the presence of DW_AT_specification. > =A0 =A0 =A0For example, with GCC 3.4, given the code > > @@ -12806,21 +12477,12 @@ dwarf2_name (struct die_info *die, struc > > =A0 =A0 =A0 =A0 =A0if (demangled) > =A0 =A0 =A0 =A0 =A0 =A0{ > - =A0 =A0 =A0 =A0 =A0 =A0 char *base; > - > =A0 =A0 =A0 =A0 =A0 =A0 =A0/* FIXME: we already did this for the partial = symbol... */ > - =A0 =A0 =A0 =A0 =A0 =A0 DW_STRING (attr) =3D obsavestring (demangled, s= trlen > (demangled), > - > =A0&cu->objfile->objfile_obstack); > + =A0 =A0 =A0 =A0 =A0 =A0 DW_STRING (attr) > + =A0 =A0 =A0 =A0 =A0 =A0 =A0 =3D obsavestring (demangled, strlen (demang= led), > + =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 &cu->objfil= e->objfile_obstack); > =A0 =A0 =A0 =A0 =A0 =A0 =A0DW_STRING_IS_CANONICAL (attr) =3D 1; > =A0 =A0 =A0 =A0 =A0 =A0 =A0xfree (demangled); > - > - =A0 =A0 =A0 =A0 =A0 =A0 /* Strip any leading namespaces/classes, keep o= nly the base > name. > - =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0DW_AT_name for named DIEs does not conta= in the prefixes. > =A0*/ > - =A0 =A0 =A0 =A0 =A0 =A0 base =3D strrchr (DW_STRING (attr), ':'); > - =A0 =A0 =A0 =A0 =A0 =A0 if (base && base > DW_STRING (attr) && base[-1]= =3D=3D ':') > - =A0 =A0 =A0 =A0 =A0 =A0 =A0 return &base[1]; > - =A0 =A0 =A0 =A0 =A0 =A0 else > - =A0 =A0 =A0 =A0 =A0 =A0 =A0 return DW_STRING (attr); > =A0 =A0 =A0 =A0 =A0 =A0} > =A0 =A0 =A0 =A0} > =A0 =A0 =A0 break; > @@ -13004,8 +12666,6 @@ dwarf_tag_name (unsigned tag) > =A0 =A0 =A0 return "DW_TAG_PGI_kanji_type"; > =A0 =A0 case DW_TAG_PGI_interface_block: > =A0 =A0 =A0 return "DW_TAG_PGI_interface_block"; > - =A0 =A0case DW_TAG_GNU_call_site: > - =A0 =A0 =A0return "DW_TAG_GNU_call_site"; > =A0 =A0 default: > =A0 =A0 =A0 return "DW_TAG_"; > =A0 =A0 } > @@ -14488,7 +14148,6 @@ decode_locdesc (struct dwarf_block *blk, > > =A0 ctx->gdbarch =3D get_objfile_arch (objfile); > =A0 ctx->addr_size =3D cu->header.addr_size; > - =A0ctx->ref_addr_size =3D dwarf2_per_cu_ref_addr_size (cu->per_cu); > =A0 ctx->offset =3D ANOFFSET (objfile->section_offsets, SECT_OFF_TEXT > (objfile)); > =A0 ctx->baton =3D ctx; > =A0 ctx->funcs =3D &decode_locdesc_ctx_funcs; > @@ -15528,42 +15187,26 @@ dwarf2_per_cu_objfile (struct dwarf2_per > =A0 return objfile; > =A0} > > -/* Return comp_unit_head for PER_CU, either already available in PER_CU-= >CU > - =A0 (CU_HEADERP is unused in such case) or prepare a temporary copy at > - =A0 CU_HEADERP first. =A0*/ > - > -static const struct comp_unit_head * > -per_cu_header_read_in (struct comp_unit_head *cu_headerp, > - =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0struct dwarf2_per_cu_data *p= er_cu) > -{ > - =A0struct objfile *objfile; > - =A0struct dwarf2_per_objfile *per_objfile; > - =A0gdb_byte *info_ptr; > - > - =A0if (per_cu->cu) > - =A0 =A0return &per_cu->cu->header; > - > - =A0objfile =3D per_cu->objfile; > - =A0per_objfile =3D objfile_data (objfile, dwarf2_objfile_data_key); > - =A0info_ptr =3D per_objfile->info.buffer + per_cu->offset; > - > - =A0memset (cu_headerp, 0, sizeof (*cu_headerp)); > - =A0read_comp_unit_head (cu_headerp, info_ptr, objfile->obfd); > - > - =A0return cu_headerp; > -} > - > =A0/* Return the address size given in the compilation unit header for CU= . =A0*/ > > =A0CORE_ADDR > =A0dwarf2_per_cu_addr_size (struct dwarf2_per_cu_data *per_cu) > =A0{ > - =A0struct comp_unit_head cu_header_local; > - =A0const struct comp_unit_head *cu_headerp; > - > - =A0cu_headerp =3D per_cu_header_read_in (&cu_header_local, per_cu); > - > - =A0return cu_headerp->addr_size; > + =A0if (per_cu->cu) > + =A0 =A0return per_cu->cu->header.addr_size; > + =A0else > + =A0 =A0{ > + =A0 =A0 =A0/* If the CU is not currently read in, we re-read its header= . =A0*/ > + =A0 =A0 =A0struct objfile *objfile =3D per_cu->objfile; > + =A0 =A0 =A0struct dwarf2_per_objfile *per_objfile > + =A0 =A0 =A0 =3D objfile_data (objfile, dwarf2_objfile_data_key); > + =A0 =A0 =A0gdb_byte *info_ptr =3D per_objfile->info.buffer + per_cu->of= fset; > + =A0 =A0 =A0struct comp_unit_head cu_header; > + > + =A0 =A0 =A0memset (&cu_header, 0, sizeof cu_header); > + =A0 =A0 =A0read_comp_unit_head (&cu_header, info_ptr, objfile->obfd); > + =A0 =A0 =A0return cu_header.addr_size; > + =A0 =A0} > =A0} > > =A0/* Return the offset size given in the compilation unit header for CU.= =A0*/ > @@ -15571,28 +15214,21 @@ dwarf2_per_cu_addr_size (struct dwarf2_p > =A0int > =A0dwarf2_per_cu_offset_size (struct dwarf2_per_cu_data *per_cu) > =A0{ > - =A0struct comp_unit_head cu_header_local; > - =A0const struct comp_unit_head *cu_headerp; > - > - =A0cu_headerp =3D per_cu_header_read_in (&cu_header_local, per_cu); > - > - =A0return cu_headerp->offset_size; > -} > - > -/* See its dwarf2loc.h declaration. =A0*/ > - > -int > -dwarf2_per_cu_ref_addr_size (struct dwarf2_per_cu_data *per_cu) > -{ > - =A0struct comp_unit_head cu_header_local; > - =A0const struct comp_unit_head *cu_headerp; > - > - =A0cu_headerp =3D per_cu_header_read_in (&cu_header_local, per_cu); > - > - =A0if (cu_headerp->version =3D=3D 2) > - =A0 =A0return cu_headerp->addr_size; > + =A0if (per_cu->cu) > + =A0 =A0return per_cu->cu->header.offset_size; > =A0 else > - =A0 =A0return cu_headerp->offset_size; > + =A0 =A0{ > + =A0 =A0 =A0/* If the CU is not currently read in, we re-read its header= . =A0*/ > + =A0 =A0 =A0struct objfile *objfile =3D per_cu->objfile; > + =A0 =A0 =A0struct dwarf2_per_objfile *per_objfile > + =A0 =A0 =A0 =3D objfile_data (objfile, dwarf2_objfile_data_key); > + =A0 =A0 =A0gdb_byte *info_ptr =3D per_objfile->info.buffer + per_cu->of= fset; > + =A0 =A0 =A0struct comp_unit_head cu_header; > + > + =A0 =A0 =A0memset (&cu_header, 0, sizeof cu_header); > + =A0 =A0 =A0read_comp_unit_head (&cu_header, info_ptr, objfile->obfd); > + =A0 =A0 =A0return cu_header.offset_size; > + =A0 =A0} > =A0} > > =A0/* Return the text offset of the CU. =A0The returned offset comes from > @@ -16691,6 +16327,14 @@ write_one_signatured_type (void **slot, > =A0 return 1; > =A0} > > +/* A cleanup function for an htab_t. =A0*/ > + > +static void > +cleanup_htab (void *arg) > +{ > + =A0htab_delete (arg); > +} > + > =A0/* Create an index file for OBJFILE in the directory DIR. =A0*/ > > =A0static void > @@ -16747,7 +16391,7 @@ write_psymtabs_to_index (struct objfile > > =A0 psyms_seen =3D htab_create_alloc (100, htab_hash_pointer, htab_eq_poi= nter, > =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0NULL, = xcalloc, xfree); > - =A0make_cleanup_htab_delete (psyms_seen); > + =A0make_cleanup (cleanup_htab, psyms_seen); > > =A0 /* While we're scanning CU's create a table that maps a psymtab point= er > =A0 =A0 =A0(which is what addrmap records) to its index (which is what is= recorded > @@ -16757,7 +16401,7 @@ write_psymtabs_to_index (struct objfile > =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 h= ash_psymtab_cu_index, > =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 e= q_psymtab_cu_index, > =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 N= ULL, xcalloc, xfree); > - =A0make_cleanup_htab_delete (cu_index_htab); > + =A0make_cleanup (cleanup_htab, cu_index_htab); > =A0 psymtab_cu_index_map =3D (struct psymtab_cu_index_map *) > =A0 =A0 xmalloc (sizeof (struct psymtab_cu_index_map) > =A0 =A0 =A0 =A0 =A0 =A0 * dwarf2_per_objfile->n_comp_units); > --0016e68f9ec092aa7204af0e4a42 Content-Type: application/octet-stream; name=fix-patch Content-Disposition: attachment; filename=fix-patch Content-Transfer-Encoding: base64 X-Attachment-Id: f_gtniwn8u0 Content-length: 26633 SW5kZXg6IGR3YXJmMnJlYWQuYwo9PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJD UyBmaWxlOiAvY3ZzL3NyYy9zcmMvZ2RiL2R3YXJmMnJlYWQuYyx2CnJldHJp ZXZpbmcgcmV2aXNpb24gMS41NjkKZGlmZiAtZCAtdSAtcjEuNTY5IGR3YXJm MnJlYWQuYwotLS0gZHdhcmYycmVhZC5jCTExIE9jdCAyMDExIDE5OjE5OjA3 IC0wMDAwCTEuNTY5CisrKyBkd2FyZjJyZWFkLmMJMTEgT2N0IDIwMTEgMjM6 MjI6NDYgLTAwMDAKQEAgLTQwNyw2ICs0MDcsOSBAQAogICAgICBhZnRlciBh bGwgdHlwZSBpbmZvcm1hdGlvbiBoYXMgYmVlbiByZWFkLiAgKi8KICAgVkVD IChkZWxheWVkX21ldGhvZF9pbmZvKSAqbWV0aG9kX2xpc3Q7CiAKKyAgLyog VG8gYmUgY29waWVkIHRvIHN5bXRhYi0+Y2FsbF9zaXRlX2h0YWIuICAqLwor ICBodGFiX3QgY2FsbF9zaXRlX2h0YWI7CisKICAgLyogTWFyayB1c2VkIHdo ZW4gcmVsZWFzaW5nIGNhY2hlZCBkaWVzLiAgKi8KICAgdW5zaWduZWQgaW50 IG1hcmsgOiAxOwogCkBAIC0xMDc5LDYgKzEwODIsOCBAQAogCiBzdGF0aWMg dm9pZCByZWFkX2xleGljYWxfYmxvY2tfc2NvcGUgKHN0cnVjdCBkaWVfaW5m byAqLCBzdHJ1Y3QgZHdhcmYyX2N1ICopOwogCitzdGF0aWMgdm9pZCByZWFk X2NhbGxfc2l0ZV9zY29wZSAoc3RydWN0IGRpZV9pbmZvICpkaWUsIHN0cnVj dCBkd2FyZjJfY3UgKmN1KTsKKwogc3RhdGljIGludCBkd2FyZjJfcmFuZ2Vz X3JlYWQgKHVuc2lnbmVkLCBDT1JFX0FERFIgKiwgQ09SRV9BRERSICosCiAJ CQkgICAgICAgc3RydWN0IGR3YXJmMl9jdSAqLCBzdHJ1Y3QgcGFydGlhbF9z eW10YWIgKik7CiAKQEAgLTI2NTAsNyArMjY1NSwyMSBAQAogCiAgIC8qIGlu ZGV4X3RhYmxlIGlzIE5VTEwgaWYgT0JKRl9SRUFETk9XLiAgKi8KICAgaWYg KCFkd2FyZjJfcGVyX29iamZpbGUtPmluZGV4X3RhYmxlKQotICAgIHJldHVy biBOVUxMOworICAgIHsKKyAgICAgIHN0cnVjdCBzeW10YWIgKnM7CisKKyAg ICAgIEFMTF9PQkpGSUxFX1NZTVRBQlMgKG9iamZpbGUsIHMpCisJaWYgKHMt PnByaW1hcnkpCisJICB7CisJICAgIHN0cnVjdCBibG9ja3ZlY3RvciAqYnYg PSBCTE9DS1ZFQ1RPUiAocyk7CisJICAgIGNvbnN0IHN0cnVjdCBibG9jayAq YmxvY2sgPSBCTE9DS1ZFQ1RPUl9CTE9DSyAoYnYsIEdMT0JBTF9CTE9DSyk7 CisJICAgIHN0cnVjdCBzeW1ib2wgKnN5bSA9IGxvb2t1cF9ibG9ja19zeW1i b2wgKGJsb2NrLCBuYW1lLCBWQVJfRE9NQUlOKTsKKworCSAgICBpZiAoc3lt KQorCSAgICAgIHJldHVybiBzeW0tPnN5bXRhYi0+ZmlsZW5hbWU7CisJICB9 CisgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CiAKICAgaWYgKCFmaW5kX3Ns b3RfaW5fbWFwcGVkX2hhc2ggKGR3YXJmMl9wZXJfb2JqZmlsZS0+aW5kZXhf dGFibGUsCiAJCQkJIG5hbWUsICZ2ZWMpKQpAQCAtNDc4NSw2ICs0ODA0LDgg QEAKIAogICAgICAgaWYgKGdjY180X21pbm9yID49IDUpCiAJc3ltdGFiLT5l cGlsb2d1ZV91bndpbmRfdmFsaWQgPSAxOworCisgICAgICBzeW10YWItPmNh bGxfc2l0ZV9odGFiID0gY3UtPmNhbGxfc2l0ZV9odGFiOwogICAgIH0KIAog ICBpZiAoZHdhcmYyX3Blcl9vYmpmaWxlLT51c2luZ19pbmRleCkKQEAgLTQ4 MjMsNiArNDg0NCw5IEBACiAgICAgY2FzZSBEV19UQUdfY2F0Y2hfYmxvY2s6 CiAgICAgICByZWFkX2xleGljYWxfYmxvY2tfc2NvcGUgKGRpZSwgY3UpOwog ICAgICAgYnJlYWs7CisgICAgY2FzZSBEV19UQUdfR05VX2NhbGxfc2l0ZToK KyAgICAgIHJlYWRfY2FsbF9zaXRlX3Njb3BlIChkaWUsIGN1KTsKKyAgICAg IGJyZWFrOwogICAgIGNhc2UgRFdfVEFHX2NsYXNzX3R5cGU6CiAgICAgY2Fz ZSBEV19UQUdfaW50ZXJmYWNlX3R5cGU6CiAgICAgY2FzZSBEV19UQUdfc3Ry dWN0dXJlX3R5cGU6CkBAIC02MTE3LDYgKzYxNDEsMjU4IEBACiAgIHVzaW5n X2RpcmVjdGl2ZXMgPSBuZXctPnVzaW5nX2RpcmVjdGl2ZXM7CiB9CiAKKy8q IFJlYWQgaW4gRFdfVEFHX0dOVV9jYWxsX3NpdGUgYW5kIGluc2VydCBpdCB0 byBDVS0+Y2FsbF9zaXRlX2h0YWIuICAqLworCitzdGF0aWMgdm9pZAorcmVh ZF9jYWxsX3NpdGVfc2NvcGUgKHN0cnVjdCBkaWVfaW5mbyAqZGllLCBzdHJ1 Y3QgZHdhcmYyX2N1ICpjdSkKK3sKKyAgc3RydWN0IG9iamZpbGUgKm9iamZp bGUgPSBjdS0+b2JqZmlsZTsKKyAgc3RydWN0IGdkYmFyY2ggKmdkYmFyY2gg PSBnZXRfb2JqZmlsZV9hcmNoIChvYmpmaWxlKTsKKyAgQ09SRV9BRERSIHBj LCBiYXNlYWRkcjsKKyAgc3RydWN0IGF0dHJpYnV0ZSAqYXR0cjsKKyAgc3Ry dWN0IGNhbGxfc2l0ZSAqY2FsbF9zaXRlLCBjYWxsX3NpdGVfbG9jYWw7Cisg IHZvaWQgKipzbG90OworICBpbnQgbnBhcmFtczsKKyAgc3RydWN0IGRpZV9p bmZvICpjaGlsZF9kaWU7CisKKyAgYmFzZWFkZHIgPSBBTk9GRlNFVCAob2Jq ZmlsZS0+c2VjdGlvbl9vZmZzZXRzLCBTRUNUX09GRl9URVhUIChvYmpmaWxl KSk7CisKKyAgYXR0ciA9IGR3YXJmMl9hdHRyIChkaWUsIERXX0FUX2xvd19w YywgY3UpOworICBpZiAoIWF0dHIpCisgICAgeworICAgICAgY29tcGxhaW50 ICgmc3ltZmlsZV9jb21wbGFpbnRzLAorCQkgXygibWlzc2luZyBEV19BVF9s b3dfcGMgZm9yIERXX1RBR19HTlVfY2FsbF9zaXRlICIKKwkJICAgIkRJRSAw eCV4IFtpbiBtb2R1bGUgJXNdIiksCisJCSBkaWUtPm9mZnNldCwgY3UtPm9i amZpbGUtPm5hbWUpOworICAgICAgcmV0dXJuOworICAgIH0KKyAgcGMgPSBE V19BRERSIChhdHRyKSArIGJhc2VhZGRyOworCisgIGlmIChjdS0+Y2FsbF9z aXRlX2h0YWIgPT0gTlVMTCkKKyAgICBjdS0+Y2FsbF9zaXRlX2h0YWIgPSBo dGFiX2NyZWF0ZV9hbGxvY19leCAoMTYsIGNvcmVfYWRkcl9oYXNoLCBjb3Jl X2FkZHJfZXEsCisJCQkJCSAgICAgICBOVUxMLCAmb2JqZmlsZS0+b2JqZmls ZV9vYnN0YWNrLAorCQkJCQkgICAgICAgaGFzaHRhYl9vYnN0YWNrX2FsbG9j YXRlLCBOVUxMKTsKKyAgY2FsbF9zaXRlX2xvY2FsLnBjID0gcGM7CisgIHNs b3QgPSBodGFiX2ZpbmRfc2xvdCAoY3UtPmNhbGxfc2l0ZV9odGFiLCAmY2Fs bF9zaXRlX2xvY2FsLCBJTlNFUlQpOworICBpZiAoKnNsb3QgIT0gTlVMTCkK KyAgICB7CisgICAgICBjb21wbGFpbnQgKCZzeW1maWxlX2NvbXBsYWludHMs CisJCSBfKCJEdXBsaWNhdGUgUEMgJXMgZm9yIERXX1RBR19HTlVfY2FsbF9z aXRlICIKKwkJICAgIkRJRSAweCV4IFtpbiBtb2R1bGUgJXNdIiksCisJCSBw YWRkcmVzcyAoZ2RiYXJjaCwgcGMpLCBkaWUtPm9mZnNldCwgY3UtPm9iamZp bGUtPm5hbWUpOworICAgICAgcmV0dXJuOworICAgIH0KKworICAvKiBDb3Vu dCBwYXJhbWV0ZXJzIGF0IHRoZSBjYWxsZXIuICAqLworCisgIG5wYXJhbXMg PSAwOworICBmb3IgKGNoaWxkX2RpZSA9IGRpZS0+Y2hpbGQ7IGNoaWxkX2Rp ZSAmJiBjaGlsZF9kaWUtPnRhZzsKKyAgICAgICBjaGlsZF9kaWUgPSBzaWJs aW5nX2RpZSAoY2hpbGRfZGllKSkKKyAgICB7CisgICAgICBpZiAoY2hpbGRf ZGllLT50YWcgIT0gRFdfVEFHX0dOVV9jYWxsX3NpdGVfcGFyYW1ldGVyKQor CXsKKwkgIGNvbXBsYWludCAoJnN5bWZpbGVfY29tcGxhaW50cywKKwkJICAg ICBfKCJUYWcgJWQgaXMgbm90IERXX1RBR19HTlVfY2FsbF9zaXRlX3BhcmFt ZXRlciBpbiAiCisJCSAgICAgICAiRFdfVEFHX0dOVV9jYWxsX3NpdGUgY2hp bGQgRElFIDB4JXggW2luIG1vZHVsZSAlc10iKSwKKwkJICAgICBjaGlsZF9k aWUtPnRhZywgY2hpbGRfZGllLT5vZmZzZXQsIGN1LT5vYmpmaWxlLT5uYW1l KTsKKwkgIGNvbnRpbnVlOworCX0KKworICAgICAgbnBhcmFtcysrOworICAg IH0KKworICBjYWxsX3NpdGUgPSBvYnN0YWNrX2FsbG9jICgmb2JqZmlsZS0+ b2JqZmlsZV9vYnN0YWNrLAorCQkJICAgICAoc2l6ZW9mICgqY2FsbF9zaXRl KQorCQkJICAgICAgKyAoc2l6ZW9mICgqY2FsbF9zaXRlLT5wYXJhbWV0ZXIp CisJCQkJICogKG5wYXJhbXMgLSAxKSkpKTsKKyAgKnNsb3QgPSBjYWxsX3Np dGU7CisgIG1lbXNldCAoY2FsbF9zaXRlLCAwLCBzaXplb2YgKCpjYWxsX3Np dGUpIC0gc2l6ZW9mICgqY2FsbF9zaXRlLT5wYXJhbWV0ZXIpKTsKKyAgY2Fs bF9zaXRlLT5wYyA9IHBjOworCisgIGlmIChkd2FyZjJfZmxhZ190cnVlX3Ag KGRpZSwgRFdfQVRfR05VX3RhaWxfY2FsbCwgY3UpKQorICAgIHsKKyAgICAg IHN0cnVjdCBkaWVfaW5mbyAqZnVuY19kaWU7CisKKyAgICAgIC8qIFNraXAg YWxzbyBvdmVyIERXX1RBR19pbmxpbmVkX3N1YnJvdXRpbmUuICAqLworICAg ICAgZm9yIChmdW5jX2RpZSA9IGRpZS0+cGFyZW50OworCSAgIGZ1bmNfZGll ICYmIGZ1bmNfZGllLT50YWcgIT0gRFdfVEFHX3N1YnByb2dyYW0KKwkgICAm JiBmdW5jX2RpZS0+dGFnICE9IERXX1RBR19zdWJyb3V0aW5lX3R5cGU7CisJ ICAgZnVuY19kaWUgPSBmdW5jX2RpZS0+cGFyZW50KTsKKworICAgICAgLyog RFdfQVRfR05VX2FsbF9jYWxsX3NpdGVzIGlzIGEgc3VwZXJzZXQKKwkgb2Yg RFdfQVRfR05VX2FsbF90YWlsX2NhbGxfc2l0ZXMuICAqLworICAgICAgaWYg KGZ1bmNfZGllCisgICAgICAgICAgJiYgIWR3YXJmMl9mbGFnX3RydWVfcCAo ZnVuY19kaWUsIERXX0FUX0dOVV9hbGxfY2FsbF9zaXRlcywgY3UpCisJICAm JiAhZHdhcmYyX2ZsYWdfdHJ1ZV9wIChmdW5jX2RpZSwgRFdfQVRfR05VX2Fs bF90YWlsX2NhbGxfc2l0ZXMsIGN1KSkKKwl7CisJICAvKiBUWVBFX1RBSUxf Q0FMTF9MSVNUIGlzIG5vdCBpbnRlcmVzdGluZyBpbiBmdW5jdGlvbnMgd2hl cmUgaXQgaXMKKwkgICAgIG5vdCBjb21wbGV0ZS4gIEJ1dCBrZWVwIENBTExf U0lURSBmb3IgbG9vayB1cHMgdmlhIGNhbGxfc2l0ZV9odGFiLAorCSAgICAg Ym90aCB0aGUgaW5pdGlhbCBjYWxsZXIgY29udGFpbmluZyB0aGUgcmVhbCBy ZXR1cm4gYWRkcmVzcyBQQyBhbmQKKwkgICAgIHRoZSBmaW5hbCBjYWxsZWUg Y29udGFpbmluZyB0aGUgY3VycmVudCBQQyBvZiBhIGNoYWluIG9mIHRhaWwK KwkgICAgIGNhbGxzIGRvIG5vdCBuZWVkIHRvIGhhdmUgdGhlIHRhaWwgY2Fs bCBsaXN0IGNvbXBsZXRlLiAgQnV0IGFueQorCSAgICAgZnVuY3Rpb24gY2Fu ZGlkYXRlIGZvciBhIHZpcnR1YWwgdGFpbCBjYWxsIGZyYW1lIHNlYXJjaGVk IHZpYQorCSAgICAgVFlQRV9UQUlMX0NBTExfTElTVCBtdXN0IGhhdmUgdGhl IHRhaWwgY2FsbCBsaXN0IGNvbXBsZXRlIHRvIGJlCisJICAgICBkZXRlcm1p bmVkIHVuYW1iaWd1b3VzbHkuICAqLworCX0KKyAgICAgIGVsc2UKKwl7CisJ ICBzdHJ1Y3QgdHlwZSAqZnVuY190eXBlID0gTlVMTDsKKworCSAgaWYgKGZ1 bmNfZGllKQorCSAgICBmdW5jX3R5cGUgPSBnZXRfZGllX3R5cGUgKGZ1bmNf ZGllLCBjdSk7CisJICBpZiAoZnVuY190eXBlICE9IE5VTEwpCisJICAgIHsK KwkgICAgICBnZGJfYXNzZXJ0IChUWVBFX0NPREUgKGZ1bmNfdHlwZSkgPT0g VFlQRV9DT0RFX0ZVTkMpOworCisJICAgICAgLyogRW5saXN0IHRoaXMgY2Fs bCBzaXRlIHRvIHRoZSBmdW5jdGlvbi4gICovCisJICAgICAgY2FsbF9zaXRl LT50YWlsX2NhbGxfbmV4dCA9IFRZUEVfVEFJTF9DQUxMX0xJU1QgKGZ1bmNf dHlwZSk7CisJICAgICAgVFlQRV9UQUlMX0NBTExfTElTVCAoZnVuY190eXBl KSA9IGNhbGxfc2l0ZTsKKwkgICAgfQorCSAgZWxzZQorCSAgICBjb21wbGFp bnQgKCZzeW1maWxlX2NvbXBsYWludHMsCisJCSAgICAgICBfKCJDYW5ub3Qg ZmluZCBmdW5jdGlvbiBvd25pbmcgRFdfVEFHX0dOVV9jYWxsX3NpdGUgIgor CQkJICJESUUgMHgleCBbaW4gbW9kdWxlICVzXSIpLAorCQkgICAgICAgZGll LT5vZmZzZXQsIGN1LT5vYmpmaWxlLT5uYW1lKTsKKwl9CisgICAgfQorCisg IGF0dHIgPSBkd2FyZjJfYXR0ciAoZGllLCBEV19BVF9HTlVfY2FsbF9zaXRl X3RhcmdldCwgY3UpOworICBpZiAoYXR0ciA9PSBOVUxMKQorICAgIGF0dHIg PSBkd2FyZjJfYXR0ciAoZGllLCBEV19BVF9hYnN0cmFjdF9vcmlnaW4sIGN1 KTsKKyAgU0VUX0ZJRUxEX0RXQVJGX0JMT0NLIChjYWxsX3NpdGUtPnRhcmdl dCwgTlVMTCk7CisgIGlmICghYXR0ciB8fCAoYXR0cl9mb3JtX2lzX2Jsb2Nr IChhdHRyKSAmJiBEV19CTE9DSyAoYXR0ciktPnNpemUgPT0gMCkpCisgICAg LyogS2VlcCBOVUxMIERXQVJGX0JMT0NLLiAgKi87CisgIGVsc2UgaWYgKGF0 dHJfZm9ybV9pc19ibG9jayAoYXR0cikpCisgICAgeworICAgICAgc3RydWN0 IGR3YXJmMl9sb2NleHByX2JhdG9uICpkbGJhdG9uOworCisgICAgICBkbGJh dG9uID0gb2JzdGFja19hbGxvYyAoJm9iamZpbGUtPm9iamZpbGVfb2JzdGFj aywgc2l6ZW9mICgqZGxiYXRvbikpOworICAgICAgZGxiYXRvbi0+ZGF0YSA9 IERXX0JMT0NLIChhdHRyKS0+ZGF0YTsKKyAgICAgIGRsYmF0b24tPnNpemUg PSBEV19CTE9DSyAoYXR0ciktPnNpemU7CisgICAgICBkbGJhdG9uLT5wZXJf Y3UgPSBjdS0+cGVyX2N1OworCisgICAgICBTRVRfRklFTERfRFdBUkZfQkxP Q0sgKGNhbGxfc2l0ZS0+dGFyZ2V0LCBkbGJhdG9uKTsKKyAgICB9CisgIGVs c2UgaWYgKGlzX3JlZl9hdHRyIChhdHRyKSkKKyAgICB7CisgICAgICBzdHJ1 Y3Qgb2JqZmlsZSAqb2JqZmlsZSA9IGN1LT5vYmpmaWxlOworICAgICAgc3Ry dWN0IGR3YXJmMl9jdSAqdGFyZ2V0X2N1ID0gY3U7CisgICAgICBzdHJ1Y3Qg ZGllX2luZm8gKnRhcmdldF9kaWU7CisKKyAgICAgIHRhcmdldF9kaWUgPSBm b2xsb3dfZGllX3JlZl9vcl9zaWcgKGRpZSwgYXR0ciwgJnRhcmdldF9jdSk7 CisgICAgICBnZGJfYXNzZXJ0ICh0YXJnZXRfY3UtPm9iamZpbGUgPT0gb2Jq ZmlsZSk7CisgICAgICBpZiAoZGllX2lzX2RlY2xhcmF0aW9uICh0YXJnZXRf ZGllLCB0YXJnZXRfY3UpKQorCXsKKwkgIGNvbnN0IGNoYXIgKnRhcmdldF9w aHlzbmFtZTsKKworCSAgdGFyZ2V0X3BoeXNuYW1lID0gZHdhcmYyX3BoeXNu YW1lIChOVUxMLCB0YXJnZXRfZGllLCB0YXJnZXRfY3UpOworCSAgaWYgKHRh cmdldF9waHlzbmFtZSA9PSBOVUxMKQorCSAgICBjb21wbGFpbnQgKCZzeW1m aWxlX2NvbXBsYWludHMsCisJCSAgICAgICBfKCJEV19BVF9HTlVfY2FsbF9z aXRlX3RhcmdldCB0YXJnZXQgRElFIGhhcyBpbnZhbGlkICIKKwkJICAgICAg ICAgInBoeXNuYW1lLCBmb3IgcmVmZXJlbmNpbmcgRElFIDB4JXggW2luIG1v ZHVsZSAlc10iKSwKKwkJICAgICAgIGRpZS0+b2Zmc2V0LCBjdS0+b2JqZmls ZS0+bmFtZSk7CisJICBlbHNlCisJICAgIFNFVF9GSUVMRF9QSFlTTkFNRSAo Y2FsbF9zaXRlLT50YXJnZXQsIChjaGFyICopIHRhcmdldF9waHlzbmFtZSk7 CisJfQorICAgICAgZWxzZQorCXsKKwkgIENPUkVfQUREUiBsb3dwYzsKKwor CSAgLyogRFdfQVRfZW50cnlfcGMgc2hvdWxkIGJlIHByZWZlcnJlZC4gICov CisJICBpZiAoIWR3YXJmMl9nZXRfcGNfYm91bmRzICh0YXJnZXRfZGllLCAm bG93cGMsIE5VTEwsIHRhcmdldF9jdSwgTlVMTCkpCisJICAgIGNvbXBsYWlu dCAoJnN5bWZpbGVfY29tcGxhaW50cywKKwkJICAgICAgIF8oIkRXX0FUX0dO VV9jYWxsX3NpdGVfdGFyZ2V0IHRhcmdldCBESUUgaGFzIGludmFsaWQgIgor CQkgICAgICAgICAibG93IHBjLCBmb3IgcmVmZXJlbmNpbmcgRElFIDB4JXgg W2luIG1vZHVsZSAlc10iKSwKKwkJICAgICAgIGRpZS0+b2Zmc2V0LCBjdS0+ b2JqZmlsZS0+bmFtZSk7CisJICBlbHNlCisJICAgIFNFVF9GSUVMRF9QSFlT QUREUiAoY2FsbF9zaXRlLT50YXJnZXQsIGxvd3BjICsgYmFzZWFkZHIpOwor CX0KKyAgICB9CisgIGVsc2UKKyAgICBjb21wbGFpbnQgKCZzeW1maWxlX2Nv bXBsYWludHMsCisJICAgICAgIF8oIkRXX1RBR19HTlVfY2FsbF9zaXRlIERX X0FUX0dOVV9jYWxsX3NpdGVfdGFyZ2V0IGlzIG5laXRoZXIgIgorCQkgImJs b2NrIG5vciByZWZlcmVuY2UsIGZvciBESUUgMHgleCBbaW4gbW9kdWxlICVz XSIpLAorCSAgICAgICBkaWUtPm9mZnNldCwgY3UtPm9iamZpbGUtPm5hbWUp OworCisgIGNhbGxfc2l0ZS0+cGVyX2N1ID0gY3UtPnBlcl9jdTsKKworICBm b3IgKGNoaWxkX2RpZSA9IGRpZS0+Y2hpbGQ7CisgICAgICAgY2hpbGRfZGll ICYmIGNoaWxkX2RpZS0+dGFnOworICAgICAgIGNoaWxkX2RpZSA9IHNpYmxp bmdfZGllIChjaGlsZF9kaWUpKQorICAgIHsKKyAgICAgIHN0cnVjdCBkd2Fy ZjJfbG9jZXhwcl9iYXRvbiAqZGxiYXRvbjsKKyAgICAgIHN0cnVjdCBjYWxs X3NpdGVfcGFyYW1ldGVyICpwYXJhbWV0ZXI7CisKKyAgICAgIGlmIChjaGls ZF9kaWUtPnRhZyAhPSBEV19UQUdfR05VX2NhbGxfc2l0ZV9wYXJhbWV0ZXIp CisJeworCSAgLyogQWxyZWFkeSBwcmludGVkIHRoZSBjb21wbGFpbnQgYWJv dmUuICAqLworCSAgY29udGludWU7CisJfQorCisgICAgICBnZGJfYXNzZXJ0 IChjYWxsX3NpdGUtPnBhcmFtZXRlcl9jb3VudCA8IG5wYXJhbXMpOworICAg ICAgcGFyYW1ldGVyID0gJmNhbGxfc2l0ZS0+cGFyYW1ldGVyW2NhbGxfc2l0 ZS0+cGFyYW1ldGVyX2NvdW50XTsKKworICAgICAgLyogRFdfQVRfbG9jYXRp b24gc3BlY2lmaWVzIHRoZSByZWdpc3RlciBudW1iZXIuICBWYWx1ZSBvZiB0 aGUgZGF0YQorCSBhc3N1bWVkIGZvciB0aGUgcmVnaXN0ZXIgaXMgY29udGFp bmVkIGluIERXX0FUX0dOVV9jYWxsX3NpdGVfdmFsdWUuICAqLworCisgICAg ICBhdHRyID0gZHdhcmYyX2F0dHIgKGNoaWxkX2RpZSwgRFdfQVRfbG9jYXRp b24sIGN1KTsKKyAgICAgIGlmICghYXR0ciB8fCAhYXR0cl9mb3JtX2lzX2Js b2NrIChhdHRyKSkKKwl7CisJICBjb21wbGFpbnQgKCZzeW1maWxlX2NvbXBs YWludHMsCisJCSAgICAgXygiTm8gRFdfRk9STV9ibG9jayogRFdfQVRfbG9j YXRpb24gZm9yICIKKwkJICAgICAgICJEV19UQUdfR05VX2NhbGxfc2l0ZSBj aGlsZCBESUUgMHgleCBbaW4gbW9kdWxlICVzXSIpLAorCQkgICAgIGNoaWxk X2RpZS0+b2Zmc2V0LCBjdS0+b2JqZmlsZS0+bmFtZSk7CisJICBjb250aW51 ZTsKKwl9CisgICAgICBwYXJhbWV0ZXItPmR3YXJmX3JlZyA9IGR3YXJmX2Js b2NrX3RvX2R3YXJmX3JlZyAoRFdfQkxPQ0sgKGF0dHIpLT5kYXRhLAorCQkJ CSAmRFdfQkxPQ0sgKGF0dHIpLT5kYXRhW0RXX0JMT0NLIChhdHRyKS0+c2l6 ZV0pOworICAgICAgaWYgKHBhcmFtZXRlci0+ZHdhcmZfcmVnID09IC0xCisJ ICAmJiAhZHdhcmZfYmxvY2tfdG9fc3Bfb2Zmc2V0IChnZGJhcmNoLCBEV19C TE9DSyAoYXR0ciktPmRhdGEsCisJCQkJICAmRFdfQkxPQ0sgKGF0dHIpLT5k YXRhW0RXX0JMT0NLIChhdHRyKS0+c2l6ZV0sCisJCQkJCSZwYXJhbWV0ZXIt PmZiX29mZnNldCkpCisJeworCSAgY29tcGxhaW50ICgmc3ltZmlsZV9jb21w bGFpbnRzLAorCQkgICAgIF8oIk9ubHkgc2luZ2xlIERXX09QX3JlZyBvciBE V19PUF9mYnJlZyBpcyBzdXBwb3J0ZWQgIgorCQkgICAgICAgImZvciBEV19G T1JNX2Jsb2NrKiBEV19BVF9sb2NhdGlvbiBmb3IgIgorCQkgICAgICAgIkRX X1RBR19HTlVfY2FsbF9zaXRlIGNoaWxkIERJRSAweCV4IFtpbiBtb2R1bGUg JXNdIiksCisJCSAgICAgY2hpbGRfZGllLT5vZmZzZXQsIGN1LT5vYmpmaWxl LT5uYW1lKTsKKwkgIGNvbnRpbnVlOworCX0KKworICAgICAgYXR0ciA9IGR3 YXJmMl9hdHRyIChjaGlsZF9kaWUsIERXX0FUX0dOVV9jYWxsX3NpdGVfdmFs dWUsIGN1KTsKKyAgICAgIGlmICghYXR0cl9mb3JtX2lzX2Jsb2NrIChhdHRy KSkKKwl7CisJICBjb21wbGFpbnQgKCZzeW1maWxlX2NvbXBsYWludHMsCisJ CSAgICAgXygiTm8gRFdfRk9STV9ibG9jayogRFdfQVRfR05VX2NhbGxfc2l0 ZV92YWx1ZSBmb3IgIgorCQkgICAgICAgIkRXX1RBR19HTlVfY2FsbF9zaXRl IGNoaWxkIERJRSAweCV4IFtpbiBtb2R1bGUgJXNdIiksCisJCSAgICAgY2hp bGRfZGllLT5vZmZzZXQsIGN1LT5vYmpmaWxlLT5uYW1lKTsKKwkgIGNvbnRp bnVlOworCX0KKyAgICAgIHBhcmFtZXRlci0+dmFsdWUgPSBEV19CTE9DSyAo YXR0ciktPmRhdGE7CisgICAgICBwYXJhbWV0ZXItPnZhbHVlX3NpemUgPSBE V19CTE9DSyAoYXR0ciktPnNpemU7CisKKyAgICAgIC8qIFBhcmFtZXRlcnMg YXJlIG5vdCBwcmUtY2xlYXJlZCBieSBtZW1zZXQgYWJvdmUuICAqLworICAg ICAgcGFyYW1ldGVyLT5kYXRhX3ZhbHVlID0gTlVMTDsKKyAgICAgIHBhcmFt ZXRlci0+ZGF0YV92YWx1ZV9zaXplID0gMDsKKyAgICAgIGNhbGxfc2l0ZS0+ cGFyYW1ldGVyX2NvdW50Kys7CisKKyAgICAgIGF0dHIgPSBkd2FyZjJfYXR0 ciAoY2hpbGRfZGllLCBEV19BVF9HTlVfY2FsbF9zaXRlX2RhdGFfdmFsdWUs IGN1KTsKKyAgICAgIGlmIChhdHRyKQorCXsKKwkgIGlmICghYXR0cl9mb3Jt X2lzX2Jsb2NrIChhdHRyKSkKKwkgICAgY29tcGxhaW50ICgmc3ltZmlsZV9j b21wbGFpbnRzLAorCQkgICAgICAgXygiTm8gRFdfRk9STV9ibG9jayogRFdf QVRfR05VX2NhbGxfc2l0ZV9kYXRhX3ZhbHVlIGZvciAiCisJCQkgIkRXX1RB R19HTlVfY2FsbF9zaXRlIGNoaWxkIERJRSAweCV4IFtpbiBtb2R1bGUgJXNd IiksCisJCSAgICAgICBjaGlsZF9kaWUtPm9mZnNldCwgY3UtPm9iamZpbGUt Pm5hbWUpOworCSAgZWxzZQorCSAgICB7CisJICAgICAgcGFyYW1ldGVyLT5k YXRhX3ZhbHVlID0gRFdfQkxPQ0sgKGF0dHIpLT5kYXRhOworCSAgICAgIHBh cmFtZXRlci0+ZGF0YV92YWx1ZV9zaXplID0gRFdfQkxPQ0sgKGF0dHIpLT5z aXplOworCSAgICB9CisJfQorICAgIH0KK30KKwogLyogR2V0IGxvdyBhbmQg aGlnaCBwYyBhdHRyaWJ1dGVzIGZyb20gRFdfQVRfcmFuZ2VzIGF0dHJpYnV0 ZSB2YWx1ZSBPRkZTRVQuCiAgICBSZXR1cm4gMSBpZiB0aGUgYXR0cmlidXRl cyBhcmUgcHJlc2VudCBhbmQgdmFsaWQsIG90aGVyd2lzZSwgcmV0dXJuIDAu CiAgICBJZiBSQU5HRVNfUFNUIGlzIG5vdCBOVUxMIHdlIHNob3VsZCBzZXR1 cCBgb2JqZmlsZS0+cHN5bXRhYnNfYWRkcm1hcCcuICAqLwpAQCAtNjMxNiw3 ICs2NTkyLDggQEAKICAgICByZXR1cm4gMDsKIAogICAqbG93cGMgPSBsb3c7 Ci0gICpoaWdocGMgPSBoaWdoOworICBpZiAoaGlnaHBjKQorICAgICpoaWdo cGMgPSBoaWdoOwogICByZXR1cm4gcmV0OwogfQogCkBAIC05ODAxLDkgKzEw MDc4LDEwIEBACiAgIC8qIEdDQyBtaWdodCBlbWl0IGEgbmFtZWxlc3Mgc3Ry dWN0IG9yIHVuaW9uIHRoYXQgaGFzIGEgbGlua2FnZQogICAgICBuYW1lLiAg U2VlIGh0dHA6Ly9nY2MuZ251Lm9yZy9idWd6aWxsYS9zaG93X2J1Zy5jZ2k/ aWQ9NDc1MTAuICAqLwogICBpZiAocGFydF9kaWUtPm5hbWUgPT0gTlVMTAot ICAgICAgJiYgKHBhcnRfZGllLT50YWcgPT0gRFdfVEFHX3N0cnVjdHVyZV90 eXBlCi0JICB8fCBwYXJ0X2RpZS0+dGFnID09IERXX1RBR191bmlvbl90eXBl Ci0JICB8fCBwYXJ0X2RpZS0+dGFnID09IERXX1RBR19jbGFzc190eXBlKQor ICAgICAgJiYgKHBhcnRfZGllLT50YWcgPT0gRFdfVEFHX2NsYXNzX3R5cGUK KwkgIHx8IHBhcnRfZGllLT50YWcgPT0gRFdfVEFHX2ludGVyZmFjZV90eXBl CisJICB8fCBwYXJ0X2RpZS0+dGFnID09IERXX1RBR19zdHJ1Y3R1cmVfdHlw ZQorCSAgfHwgcGFydF9kaWUtPnRhZyA9PSBEV19UQUdfdW5pb25fdHlwZSkK ICAgICAgICYmIHBhcnRfZGllLT5saW5rYWdlX25hbWUgIT0gTlVMTCkKICAg ICB7CiAgICAgICBjaGFyICpkZW1hbmdsZWQ7CkBAIC05ODExLDcgKzEwMDg5 LDE3IEBACiAgICAgICBkZW1hbmdsZWQgPSBjcGx1c19kZW1hbmdsZSAocGFy dF9kaWUtPmxpbmthZ2VfbmFtZSwgRE1HTF9UWVBFUyk7CiAgICAgICBpZiAo ZGVtYW5nbGVkKQogCXsKLQkgIHBhcnRfZGllLT5uYW1lID0gb2JzYXZlc3Ry aW5nIChkZW1hbmdsZWQsIHN0cmxlbiAoZGVtYW5nbGVkKSwKKwkgIGNvbnN0 IGNoYXIgKmJhc2U7CisKKwkgIC8qIFN0cmlwIGFueSBsZWFkaW5nIG5hbWVz cGFjZXMvY2xhc3Nlcywga2VlcCBvbmx5IHRoZSBiYXNlIG5hbWUuCisJICAg ICBEV19BVF9uYW1lIGZvciBuYW1lZCBESUVzIGRvZXMgbm90IGNvbnRhaW4g dGhlIHByZWZpeGVzLiAgKi8KKwkgIGJhc2UgPSBzdHJyY2hyIChkZW1hbmds ZWQsICc6Jyk7CisJICBpZiAoYmFzZSAmJiBiYXNlID4gZGVtYW5nbGVkICYm IGJhc2VbLTFdID09ICc6JykKKwkgICAgYmFzZSsrOworCSAgZWxzZQorCSAg ICBiYXNlID0gZGVtYW5nbGVkOworCisJICBwYXJ0X2RpZS0+bmFtZSA9IG9i c2F2ZXN0cmluZyAoYmFzZSwgc3RybGVuIChiYXNlKSwKIAkJCQkJICZjdS0+ b2JqZmlsZS0+b2JqZmlsZV9vYnN0YWNrKTsKIAkgIHhmcmVlIChkZW1hbmds ZWQpOwogCX0KQEAgLTEyMTYwLDYgKzEyNDQ4LDQyIEBACiAgIHJldHVybiBO VUxMOwogfQogCisvKiBHQ0MgbWlnaHQgZW1pdCBhIG5hbWVsZXNzIHR5cGVk ZWYgdGhhdCBoYXMgYSBsaW5rYWdlIG5hbWUuICBEZXRlcm1pbmUgdGhlCisg ICBwcmVmaXggcGFydCBpbiBzdWNoIGNhc2UuICBTZWUKKyAgIGh0dHA6Ly9n Y2MuZ251Lm9yZy9idWd6aWxsYS9zaG93X2J1Zy5jZ2k/aWQ9NDc1MTAuICAq LworCitzdGF0aWMgY2hhciAqCithbm9ueW1vdXNfc3RydWN0X3ByZWZpeCAo c3RydWN0IGRpZV9pbmZvICpkaWUsIHN0cnVjdCBkd2FyZjJfY3UgKmN1KQor eworICBzdHJ1Y3QgYXR0cmlidXRlICphdHRyOworICBjaGFyICpiYXNlOwor CisgIGlmIChkaWUtPnRhZyAhPSBEV19UQUdfY2xhc3NfdHlwZSAmJiBkaWUt PnRhZyAhPSBEV19UQUdfaW50ZXJmYWNlX3R5cGUKKyAgICAgICYmIGRpZS0+ dGFnICE9IERXX1RBR19zdHJ1Y3R1cmVfdHlwZSAmJiBkaWUtPnRhZyAhPSBE V19UQUdfdW5pb25fdHlwZSkKKyAgICByZXR1cm4gTlVMTDsKKworICBhdHRy ID0gZHdhcmYyX2F0dHIgKGRpZSwgRFdfQVRfbmFtZSwgY3UpOworICBpZiAo YXR0ciAhPSBOVUxMICYmIERXX1NUUklORyAoYXR0cikgIT0gTlVMTCkKKyAg ICByZXR1cm4gTlVMTDsKKworICBhdHRyID0gZHdhcmYyX2F0dHIgKGRpZSwg RFdfQVRfbGlua2FnZV9uYW1lLCBjdSk7CisgIGlmIChhdHRyID09IE5VTEwp CisgICAgYXR0ciA9IGR3YXJmMl9hdHRyIChkaWUsIERXX0FUX01JUFNfbGlu a2FnZV9uYW1lLCBjdSk7CisgIGlmIChhdHRyID09IE5VTEwgfHwgRFdfU1RS SU5HIChhdHRyKSA9PSBOVUxMKQorICAgIHJldHVybiBOVUxMOworCisgIC8q IGR3YXJmMl9uYW1lIGhhZCB0byBiZSBhbHJlYWR5IGNhbGxlZC4gICovCisg IGdkYl9hc3NlcnQgKERXX1NUUklOR19JU19DQU5PTklDQUwgKGF0dHIpKTsK KworICAvKiBTdHJpcCB0aGUgYmFzZSBuYW1lLCBrZWVwIGFueSBsZWFkaW5n IG5hbWVzcGFjZXMvY2xhc3Nlcy4gICovCisgIGJhc2UgPSBzdHJyY2hyIChE V19TVFJJTkcgKGF0dHIpLCAnOicpOworICBpZiAoYmFzZSA9PSBOVUxMIHx8 IGJhc2UgPT0gRFdfU1RSSU5HIChhdHRyKSB8fCBiYXNlWy0xXSAhPSAnOicp CisgICAgcmV0dXJuICIiOworCisgIHJldHVybiBvYnNhdmVzdHJpbmcgKERX X1NUUklORyAoYXR0ciksICZiYXNlWy0xXSAtIERXX1NUUklORyAoYXR0ciks CisJCSAgICAgICAmY3UtPm9iamZpbGUtPm9iamZpbGVfb2JzdGFjayk7Cit9 CisKIC8qIFJldHVybiB0aGUgbmFtZSBvZiB0aGUgbmFtZXNwYWNlL2NsYXNz IHRoYXQgRElFIGlzIGRlZmluZWQgd2l0aGluLAogICAgb3IgIiIgaWYgd2Ug Y2FuJ3QgdGVsbC4gIFRoZSBjYWxsZXIgc2hvdWxkIG5vdCB4ZnJlZSB0aGUg cmVzdWx0LgogCkBAIC0xMjE4MSwxMSArMTI1MDUsMTYgQEAKICAgc3RydWN0 IGRpZV9pbmZvICpwYXJlbnQsICpzcGVjX2RpZTsKICAgc3RydWN0IGR3YXJm Ml9jdSAqc3BlY19jdTsKICAgc3RydWN0IHR5cGUgKnBhcmVudF90eXBlOwor ICBjaGFyICpyZXR2YWw7CiAKICAgaWYgKGN1LT5sYW5ndWFnZSAhPSBsYW5n dWFnZV9jcGx1cyAmJiBjdS0+bGFuZ3VhZ2UgIT0gbGFuZ3VhZ2VfamF2YQog ICAgICAgJiYgY3UtPmxhbmd1YWdlICE9IGxhbmd1YWdlX2ZvcnRyYW4pCiAg ICAgcmV0dXJuICIiOwogCisgIHJldHZhbCA9IGFub255bW91c19zdHJ1Y3Rf cHJlZml4IChkaWUsIGN1KTsKKyAgaWYgKHJldHZhbCkKKyAgICByZXR1cm4g cmV0dmFsOworCiAgIC8qIFdlIGhhdmUgdG8gYmUgY2FyZWZ1bCBpbiB0aGUg cHJlc2VuY2Ugb2YgRFdfQVRfc3BlY2lmaWNhdGlvbi4KICAgICAgRm9yIGV4 YW1wbGUsIHdpdGggR0NDIDMuNCwgZ2l2ZW4gdGhlIGNvZGUKIApAQCAtMTI0 NzcsMTIgKzEyODA2LDIxIEBACiAKIAkgIGlmIChkZW1hbmdsZWQpCiAJICAg IHsKKwkgICAgICBjaGFyICpiYXNlOworCiAJICAgICAgLyogRklYTUU6IHdl IGFscmVhZHkgZGlkIHRoaXMgZm9yIHRoZSBwYXJ0aWFsIHN5bWJvbC4uLiAq LwotCSAgICAgIERXX1NUUklORyAoYXR0cikKLQkJPSBvYnNhdmVzdHJpbmcg KGRlbWFuZ2xlZCwgc3RybGVuIChkZW1hbmdsZWQpLAotCQkJCSZjdS0+b2Jq ZmlsZS0+b2JqZmlsZV9vYnN0YWNrKTsKKwkgICAgICBEV19TVFJJTkcgKGF0 dHIpID0gb2JzYXZlc3RyaW5nIChkZW1hbmdsZWQsIHN0cmxlbiAoZGVtYW5n bGVkKSwKKwkJCQkJICAgICAgICZjdS0+b2JqZmlsZS0+b2JqZmlsZV9vYnN0 YWNrKTsKIAkgICAgICBEV19TVFJJTkdfSVNfQ0FOT05JQ0FMIChhdHRyKSA9 IDE7CiAJICAgICAgeGZyZWUgKGRlbWFuZ2xlZCk7CisKKwkgICAgICAvKiBT dHJpcCBhbnkgbGVhZGluZyBuYW1lc3BhY2VzL2NsYXNzZXMsIGtlZXAgb25s eSB0aGUgYmFzZSBuYW1lLgorCQkgRFdfQVRfbmFtZSBmb3IgbmFtZWQgRElF cyBkb2VzIG5vdCBjb250YWluIHRoZSBwcmVmaXhlcy4gICovCisJICAgICAg YmFzZSA9IHN0cnJjaHIgKERXX1NUUklORyAoYXR0ciksICc6Jyk7CisJICAg ICAgaWYgKGJhc2UgJiYgYmFzZSA+IERXX1NUUklORyAoYXR0cikgJiYgYmFz ZVstMV0gPT0gJzonKQorCQlyZXR1cm4gJmJhc2VbMV07CisJICAgICAgZWxz ZQorCQlyZXR1cm4gRFdfU1RSSU5HIChhdHRyKTsKIAkgICAgfQogCX0KICAg ICAgIGJyZWFrOwpAQCAtMTI2NjYsNiArMTMwMDQsOCBAQAogICAgICAgcmV0 dXJuICJEV19UQUdfUEdJX2thbmppX3R5cGUiOwogICAgIGNhc2UgRFdfVEFH X1BHSV9pbnRlcmZhY2VfYmxvY2s6CiAgICAgICByZXR1cm4gIkRXX1RBR19Q R0lfaW50ZXJmYWNlX2Jsb2NrIjsKKyAgICBjYXNlIERXX1RBR19HTlVfY2Fs bF9zaXRlOgorICAgICAgcmV0dXJuICJEV19UQUdfR05VX2NhbGxfc2l0ZSI7 CiAgICAgZGVmYXVsdDoKICAgICAgIHJldHVybiAiRFdfVEFHXzx1bmtub3du PiI7CiAgICAgfQpAQCAtMTQxNDgsNiArMTQ0ODgsNyBAQAogCiAgIGN0eC0+ Z2RiYXJjaCA9IGdldF9vYmpmaWxlX2FyY2ggKG9iamZpbGUpOwogICBjdHgt PmFkZHJfc2l6ZSA9IGN1LT5oZWFkZXIuYWRkcl9zaXplOworICBjdHgtPnJl Zl9hZGRyX3NpemUgPSBkd2FyZjJfcGVyX2N1X3JlZl9hZGRyX3NpemUgKGN1 LT5wZXJfY3UpOwogICBjdHgtPm9mZnNldCA9IEFOT0ZGU0VUIChvYmpmaWxl LT5zZWN0aW9uX29mZnNldHMsIFNFQ1RfT0ZGX1RFWFQgKG9iamZpbGUpKTsK ICAgY3R4LT5iYXRvbiA9IGN0eDsKICAgY3R4LT5mdW5jcyA9ICZkZWNvZGVf bG9jZGVzY19jdHhfZnVuY3M7CkBAIC0xNTE4NywyNiArMTU1MjgsNDIgQEAK ICAgcmV0dXJuIG9iamZpbGU7CiB9CiAKKy8qIFJldHVybiBjb21wX3VuaXRf aGVhZCBmb3IgUEVSX0NVLCBlaXRoZXIgYWxyZWFkeSBhdmFpbGFibGUgaW4g UEVSX0NVLT5DVQorICAgKENVX0hFQURFUlAgaXMgdW51c2VkIGluIHN1Y2gg Y2FzZSkgb3IgcHJlcGFyZSBhIHRlbXBvcmFyeSBjb3B5IGF0CisgICBDVV9I RUFERVJQIGZpcnN0LiAgKi8KKworc3RhdGljIGNvbnN0IHN0cnVjdCBjb21w X3VuaXRfaGVhZCAqCitwZXJfY3VfaGVhZGVyX3JlYWRfaW4gKHN0cnVjdCBj b21wX3VuaXRfaGVhZCAqY3VfaGVhZGVycCwKKwkJICAgICAgIHN0cnVjdCBk d2FyZjJfcGVyX2N1X2RhdGEgKnBlcl9jdSkKK3sKKyAgc3RydWN0IG9iamZp bGUgKm9iamZpbGU7CisgIHN0cnVjdCBkd2FyZjJfcGVyX29iamZpbGUgKnBl cl9vYmpmaWxlOworICBnZGJfYnl0ZSAqaW5mb19wdHI7CisKKyAgaWYgKHBl cl9jdS0+Y3UpCisgICAgcmV0dXJuICZwZXJfY3UtPmN1LT5oZWFkZXI7CisK KyAgb2JqZmlsZSA9IHBlcl9jdS0+b2JqZmlsZTsKKyAgcGVyX29iamZpbGUg PSBvYmpmaWxlX2RhdGEgKG9iamZpbGUsIGR3YXJmMl9vYmpmaWxlX2RhdGFf a2V5KTsKKyAgaW5mb19wdHIgPSBwZXJfb2JqZmlsZS0+aW5mby5idWZmZXIg KyBwZXJfY3UtPm9mZnNldDsKKworICBtZW1zZXQgKGN1X2hlYWRlcnAsIDAs IHNpemVvZiAoKmN1X2hlYWRlcnApKTsKKyAgcmVhZF9jb21wX3VuaXRfaGVh ZCAoY3VfaGVhZGVycCwgaW5mb19wdHIsIG9iamZpbGUtPm9iZmQpOworCisg IHJldHVybiBjdV9oZWFkZXJwOworfQorCiAvKiBSZXR1cm4gdGhlIGFkZHJl c3Mgc2l6ZSBnaXZlbiBpbiB0aGUgY29tcGlsYXRpb24gdW5pdCBoZWFkZXIg Zm9yIENVLiAgKi8KIAogQ09SRV9BRERSCiBkd2FyZjJfcGVyX2N1X2FkZHJf c2l6ZSAoc3RydWN0IGR3YXJmMl9wZXJfY3VfZGF0YSAqcGVyX2N1KQogewot ICBpZiAocGVyX2N1LT5jdSkKLSAgICByZXR1cm4gcGVyX2N1LT5jdS0+aGVh ZGVyLmFkZHJfc2l6ZTsKLSAgZWxzZQotICAgIHsKLSAgICAgIC8qIElmIHRo ZSBDVSBpcyBub3QgY3VycmVudGx5IHJlYWQgaW4sIHdlIHJlLXJlYWQgaXRz IGhlYWRlci4gICovCi0gICAgICBzdHJ1Y3Qgb2JqZmlsZSAqb2JqZmlsZSA9 IHBlcl9jdS0+b2JqZmlsZTsKLSAgICAgIHN0cnVjdCBkd2FyZjJfcGVyX29i amZpbGUgKnBlcl9vYmpmaWxlCi0JPSBvYmpmaWxlX2RhdGEgKG9iamZpbGUs IGR3YXJmMl9vYmpmaWxlX2RhdGFfa2V5KTsKLSAgICAgIGdkYl9ieXRlICpp bmZvX3B0ciA9IHBlcl9vYmpmaWxlLT5pbmZvLmJ1ZmZlciArIHBlcl9jdS0+ b2Zmc2V0OwotICAgICAgc3RydWN0IGNvbXBfdW5pdF9oZWFkIGN1X2hlYWRl cjsKKyAgc3RydWN0IGNvbXBfdW5pdF9oZWFkIGN1X2hlYWRlcl9sb2NhbDsK KyAgY29uc3Qgc3RydWN0IGNvbXBfdW5pdF9oZWFkICpjdV9oZWFkZXJwOwog Ci0gICAgICBtZW1zZXQgKCZjdV9oZWFkZXIsIDAsIHNpemVvZiBjdV9oZWFk ZXIpOwotICAgICAgcmVhZF9jb21wX3VuaXRfaGVhZCAoJmN1X2hlYWRlciwg aW5mb19wdHIsIG9iamZpbGUtPm9iZmQpOwotICAgICAgcmV0dXJuIGN1X2hl YWRlci5hZGRyX3NpemU7Ci0gICAgfQorICBjdV9oZWFkZXJwID0gcGVyX2N1 X2hlYWRlcl9yZWFkX2luICgmY3VfaGVhZGVyX2xvY2FsLCBwZXJfY3UpOwor CisgIHJldHVybiBjdV9oZWFkZXJwLT5hZGRyX3NpemU7CiB9CiAKIC8qIFJl dHVybiB0aGUgb2Zmc2V0IHNpemUgZ2l2ZW4gaW4gdGhlIGNvbXBpbGF0aW9u IHVuaXQgaGVhZGVyIGZvciBDVS4gICovCkBAIC0xNTIxNCwyMSArMTU1NzEs MjggQEAKIGludAogZHdhcmYyX3Blcl9jdV9vZmZzZXRfc2l6ZSAoc3RydWN0 IGR3YXJmMl9wZXJfY3VfZGF0YSAqcGVyX2N1KQogewotICBpZiAocGVyX2N1 LT5jdSkKLSAgICByZXR1cm4gcGVyX2N1LT5jdS0+aGVhZGVyLm9mZnNldF9z aXplOwotICBlbHNlCi0gICAgewotICAgICAgLyogSWYgdGhlIENVIGlzIG5v dCBjdXJyZW50bHkgcmVhZCBpbiwgd2UgcmUtcmVhZCBpdHMgaGVhZGVyLiAg Ki8KLSAgICAgIHN0cnVjdCBvYmpmaWxlICpvYmpmaWxlID0gcGVyX2N1LT5v YmpmaWxlOwotICAgICAgc3RydWN0IGR3YXJmMl9wZXJfb2JqZmlsZSAqcGVy X29iamZpbGUKLQk9IG9iamZpbGVfZGF0YSAob2JqZmlsZSwgZHdhcmYyX29i amZpbGVfZGF0YV9rZXkpOwotICAgICAgZ2RiX2J5dGUgKmluZm9fcHRyID0g cGVyX29iamZpbGUtPmluZm8uYnVmZmVyICsgcGVyX2N1LT5vZmZzZXQ7Ci0g ICAgICBzdHJ1Y3QgY29tcF91bml0X2hlYWQgY3VfaGVhZGVyOworICBzdHJ1 Y3QgY29tcF91bml0X2hlYWQgY3VfaGVhZGVyX2xvY2FsOworICBjb25zdCBz dHJ1Y3QgY29tcF91bml0X2hlYWQgKmN1X2hlYWRlcnA7CiAKLSAgICAgIG1l bXNldCAoJmN1X2hlYWRlciwgMCwgc2l6ZW9mIGN1X2hlYWRlcik7Ci0gICAg ICByZWFkX2NvbXBfdW5pdF9oZWFkICgmY3VfaGVhZGVyLCBpbmZvX3B0ciwg b2JqZmlsZS0+b2JmZCk7Ci0gICAgICByZXR1cm4gY3VfaGVhZGVyLm9mZnNl dF9zaXplOwotICAgIH0KKyAgY3VfaGVhZGVycCA9IHBlcl9jdV9oZWFkZXJf cmVhZF9pbiAoJmN1X2hlYWRlcl9sb2NhbCwgcGVyX2N1KTsKKworICByZXR1 cm4gY3VfaGVhZGVycC0+b2Zmc2V0X3NpemU7Cit9CisKKy8qIFNlZSBpdHMg ZHdhcmYybG9jLmggZGVjbGFyYXRpb24uICAqLworCitpbnQKK2R3YXJmMl9w ZXJfY3VfcmVmX2FkZHJfc2l6ZSAoc3RydWN0IGR3YXJmMl9wZXJfY3VfZGF0 YSAqcGVyX2N1KQoreworICBzdHJ1Y3QgY29tcF91bml0X2hlYWQgY3VfaGVh ZGVyX2xvY2FsOworICBjb25zdCBzdHJ1Y3QgY29tcF91bml0X2hlYWQgKmN1 X2hlYWRlcnA7CisKKyAgY3VfaGVhZGVycCA9IHBlcl9jdV9oZWFkZXJfcmVh ZF9pbiAoJmN1X2hlYWRlcl9sb2NhbCwgcGVyX2N1KTsKKworICBpZiAoY3Vf aGVhZGVycC0+dmVyc2lvbiA9PSAyKQorICAgIHJldHVybiBjdV9oZWFkZXJw LT5hZGRyX3NpemU7CisgIGVsc2UKKyAgICByZXR1cm4gY3VfaGVhZGVycC0+ b2Zmc2V0X3NpemU7CiB9CiAKIC8qIFJldHVybiB0aGUgdGV4dCBvZmZzZXQg b2YgdGhlIENVLiAgVGhlIHJldHVybmVkIG9mZnNldCBjb21lcyBmcm9tCkBA IC0xNjMyNywxNCArMTY2OTEsNiBAQAogICByZXR1cm4gMTsKIH0KIAotLyog QSBjbGVhbnVwIGZ1bmN0aW9uIGZvciBhbiBodGFiX3QuICAqLwotCi1zdGF0 aWMgdm9pZAotY2xlYW51cF9odGFiICh2b2lkICphcmcpCi17Ci0gIGh0YWJf ZGVsZXRlIChhcmcpOwotfQotCiAvKiBDcmVhdGUgYW4gaW5kZXggZmlsZSBm b3IgT0JKRklMRSBpbiB0aGUgZGlyZWN0b3J5IERJUi4gICovCiAKIHN0YXRp YyB2b2lkCkBAIC0xNjM5MSw3ICsxNjc0Nyw3IEBACiAKICAgcHN5bXNfc2Vl biA9IGh0YWJfY3JlYXRlX2FsbG9jICgxMDAsIGh0YWJfaGFzaF9wb2ludGVy LCBodGFiX2VxX3BvaW50ZXIsCiAJCQkJICBOVUxMLCB4Y2FsbG9jLCB4ZnJl ZSk7Ci0gIG1ha2VfY2xlYW51cCAoY2xlYW51cF9odGFiLCBwc3ltc19zZWVu KTsKKyAgbWFrZV9jbGVhbnVwX2h0YWJfZGVsZXRlIChwc3ltc19zZWVuKTsK IAogICAvKiBXaGlsZSB3ZSdyZSBzY2FubmluZyBDVSdzIGNyZWF0ZSBhIHRh YmxlIHRoYXQgbWFwcyBhIHBzeW10YWIgcG9pbnRlcgogICAgICAod2hpY2gg aXMgd2hhdCBhZGRybWFwIHJlY29yZHMpIHRvIGl0cyBpbmRleCAod2hpY2gg aXMgd2hhdCBpcyByZWNvcmRlZApAQCAtMTY0MDEsNyArMTY3NTcsNyBAQAog CQkJCSAgICAgaGFzaF9wc3ltdGFiX2N1X2luZGV4LAogCQkJCSAgICAgZXFf cHN5bXRhYl9jdV9pbmRleCwKIAkJCQkgICAgIE5VTEwsIHhjYWxsb2MsIHhm cmVlKTsKLSAgbWFrZV9jbGVhbnVwIChjbGVhbnVwX2h0YWIsIGN1X2luZGV4 X2h0YWIpOworICBtYWtlX2NsZWFudXBfaHRhYl9kZWxldGUgKGN1X2luZGV4 X2h0YWIpOwogICBwc3ltdGFiX2N1X2luZGV4X21hcCA9IChzdHJ1Y3QgcHN5 bXRhYl9jdV9pbmRleF9tYXAgKikKICAgICB4bWFsbG9jIChzaXplb2YgKHN0 cnVjdCBwc3ltdGFiX2N1X2luZGV4X21hcCkKIAkgICAgICogZHdhcmYyX3Bl cl9vYmpmaWxlLT5uX2NvbXBfdW5pdHMpOwo= --0016e68f9ec092aa7204af0e4a42--