From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 69658 invoked by alias); 10 Jan 2019 13:28:15 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Id: List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Received: (qmail 69420 invoked by uid 89); 10 Jan 2019 13:28:15 -0000 Authentication-Results: sourceware.org; auth=none X-Spam-SWARE-Status: No, score=-26.7 required=5.0 tests=BAYES_00,GIT_PATCH_0,GIT_PATCH_1,GIT_PATCH_2,GIT_PATCH_3,KAM_LOTSOFHASH,RCVD_IN_DNSWL_NONE,SPF_HELO_PASS,SPF_PASS autolearn=ham version=3.3.2 spammy=Hx-exchange-antispam-report-cfa-test:102415395, marks, Attachment, gotos X-HELO: EUR04-VI1-obe.outbound.protection.outlook.com Received: from mail-eopbgr80052.outbound.protection.outlook.com (HELO EUR04-VI1-obe.outbound.protection.outlook.com) (40.107.8.52) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with ESMTP; Thu, 10 Jan 2019 13:28:09 +0000 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=armh.onmicrosoft.com; s=selector1-arm-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=w1JVgSAAde/D1woeDzBk2wLZPVcRES3WEHXrpBi7VEI=; b=o4hpxl1u4wHAHYixiALT7cNui2d5yCJF+mucLFyeOKujfJTNJeioGW9K4XvZjcDZJ4lZWJokB1NMk/hUPWCfHRcWYkCur5Ja4RUxhTSkjEpl/94mFQo58NQc9000etDdGQUXr4E3A99PHOiFU6Hc7tzmwqmUwDNUlr4BBk1/aWY= Received: from VI1PR0801MB2014.eurprd08.prod.outlook.com (10.173.74.135) by VI1PR0801MB1965.eurprd08.prod.outlook.com (10.173.74.10) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.1495.7; Thu, 10 Jan 2019 13:28:05 +0000 Received: from VI1PR0801MB2014.eurprd08.prod.outlook.com ([fe80::8c38:caa4:10f3:5d0f]) by VI1PR0801MB2014.eurprd08.prod.outlook.com ([fe80::8c38:caa4:10f3:5d0f%10]) with mapi id 15.20.1495.011; Thu, 10 Jan 2019 13:28:05 +0000 From: Matthew Malcomson To: "gcc-patches@gcc.gnu.org" CC: "jason@redhat.com" , nd , "ccoutant@gmail.com" , "wilson@tuliptree.org" Subject: [RFC] [Patch] [Debug] Add new NOTE to be used for debugging. Date: Thu, 10 Jan 2019 13:28:00 -0000 Message-ID: authentication-results: spf=none (sender IP is ) smtp.mailfrom=Matthew.Malcomson@arm.com; received-spf: None (protection.outlook.com: arm.com does not designate permitted sender hosts) Content-Type: multipart/mixed; boundary="_002_VI1PR0801MB20140428B8AEB97CE5B7B750E0840VI1PR0801MB2014_" MIME-Version: 1.0 X-IsSubscribed: yes X-SW-Source: 2019-01/txt/msg00543.txt.bz2 --_002_VI1PR0801MB20140428B8AEB97CE5B7B750E0840VI1PR0801MB2014_ Content-Type: text/plain; charset="us-ascii" Content-ID: <724E0E2AC2AF3A498436CE5BEB7614AF@eurprd08.prod.outlook.com> Content-Transfer-Encoding: quoted-printable Content-length: 8121 At the moment NOTE_INSN_FUNCTION_BEG is used for three different purposes. The first is as a marker just before the first insn coming from a "source code statement" of the function. Bug 88432 is due to the fact that the note does not accurately point to this logical position in a function -- in that case the stack protect prologue is directly after NOTE_INSN_FUNCTION_BEG. The second is (I believe) to make assumptions about what values are in the parameter passing registers (in alias.c and calls.c). (I'm not sure about this second use, if I am correctly reading this code th= en it seems like a bug -- e.g. asan_emit_stack_protect inserts insns in the st= ream that break the assumption that seems to be made.) The third is as a marker to determine where to put extra code later in sjlj_emit_function_enter from except.c, where to insert profiling code for a function in final.c, and where to insert variable expansion code in pass_expand::execute from cfgexpand.c. These three uses seem to be at odds with each other -- insns that change the values in the parameter passing registers store can come from automatically inserted code like stack protection, and some requirements on where instruc= tions should get inserted have moved the position of this NOTE (e.g. see bugzilla= bug 81186). This patch splits the current note into two different notes, one to retain = uses 2 and 3 above, and one for use in genrating debug information. The first two uses are still attached to NOTE_INSN_FUNCTION_BEG, while the debugging use is now implemented with NOTE_INSN_DEBUG_FUNCTION_BEG. These two notes are put into the functions' insn chain in different places during the expand pass, and can hence satisfy their respective uses. Bootstrapped and regtested on aarch64. TODO -- Manual tests done on resulting debug information -- yet to be autom= ated. gcc/ChangeLog: 2019-01-10 Matthew Malcomson PR debug/88432 * cfgexpand.c (pass_expand::execute): Insert NOTE_INSN_DEBUG_FUNCTION_BEG. * function.c (thread_prologue_and_epilogue_insns): Account for NOTE_INSN_DEBUG_FUNCTION_BEG. * cfgrtl.c (duplicate_insn_chain): Account for new NOTE. * doc/rtl.texi: Document new NOTE. * dwarf2out.c (dwarf2out_source_line): Change comment to reference new NOTE. * final.c (asm_show_source): As above. (final_scan_insn_1): Split action on NOTE_INSN_FUNCTION_BEG into two, and move debugging info action to trigger on NOTE_INSN_DEBUG_FUNCTION_BEG. * insn-notes.def (INSN_NOTE): Add new NOTE. ############### Attachment also inlined for ease of reply ##########= ##### diff --git a/gcc/cfgexpand.c b/gcc/cfgexpand.c index 60c1cfb4556e1a659db19f6719adccc1dab0fe46..491f441d01de226ba5aff2af8c7= 1680b78648a12 100644 --- a/gcc/cfgexpand.c +++ b/gcc/cfgexpand.c @@ -6476,6 +6476,12 @@ pass_expand::execute (function *fun) if (crtl->stack_protect_guard && targetm.stack_protect_runtime_enabled_p= ()) stack_protect_prologue (); =20 + /* Insert a NOTE that marks the end of "generated code" and the start of= code + that comes from the user. This is the point which dwarf2out.c will t= reat + as the beginning of the users code in this function. e.g. GDB will s= top + just after this note when breaking on entry to the function. */ + emit_note (NOTE_INSN_DEBUG_FUNCTION_BEG); + expand_phi_nodes (&SA); =20 /* Release any stale SSA redirection data. */ diff --git a/gcc/cfgrtl.c b/gcc/cfgrtl.c index 172bdf585d036e27bcf53dba89c1ffc1b6cb84c7..d0cbca84aa3f14002a568a65e70= 016c3e15d6b9c 100644 --- a/gcc/cfgrtl.c +++ b/gcc/cfgrtl.c @@ -4215,6 +4215,7 @@ duplicate_insn_chain (rtx_insn *from, rtx_insn *to) case NOTE_INSN_DELETED_DEBUG_LABEL: /* No problem to strip these. */ case NOTE_INSN_FUNCTION_BEG: + case NOTE_INSN_DEBUG_FUNCTION_BEG: /* There is always just single entry to function. */ case NOTE_INSN_BASIC_BLOCK: /* We should only switch text sections once. */ diff --git a/gcc/doc/rtl.texi b/gcc/doc/rtl.texi index 583291018538722a19a9baf8c46c87cbdfe34216..a50d08483de0db84378e48c9334= b48ff12548190 100644 --- a/gcc/doc/rtl.texi +++ b/gcc/doc/rtl.texi @@ -3954,6 +3954,18 @@ identifies which region is associated with these not= es. Appears at the start of the function body, after the function prologue. =20 +@findex NOTE_INSN_DEBUG_FUNCTION_BEG +@item NOTE_INSN_DEBUG_FUNCTION_BEG +This NOTE is inserted at the start of a function during RTL expansion. +It is inserted at the point in a function where code coming directly from = the +"users source" starts. i.e. the first insn that appears after this note sh= ould +be generated from the user code (and not from automatic code generation to +support compiler features). +This NOTE is used to ensure the first debug line number after the start of= any +function is the line number of the first source code statement in that +function. GDB typically determines where to first stop in a function based= on +this first line number entry. + @findex NOTE_INSN_VAR_LOCATION @findex NOTE_VAR_LOCATION @item NOTE_INSN_VAR_LOCATION diff --git a/gcc/dwarf2out.c b/gcc/dwarf2out.c index 8d9a3849fa4289e246a10a66252667dd4c6e0f75..10d05cd51fc679cb4acfc85f76d= f415d1d9b1f0d 100644 --- a/gcc/dwarf2out.c +++ b/gcc/dwarf2out.c @@ -27807,7 +27807,7 @@ dwarf2out_source_line (unsigned int line, unsigned = int column, as the end_prologue debug hook. The NOTE_INSN_PROLOGUE_END note, to which the hook corresponds, follows the last insn that was=20 emitted by gen_prologue. What we need is to precede the first insn - that had been emitted after NOTE_INSN_FUNCTION_BEG, i.e. the first + that had been emitted after NOTE_INSN_DEBUG_FUNCTION_BEG, i.e. the fi= rst insn that corresponds to something the user wrote. These may be very different locations once scheduling is enabled. */ =20 diff --git a/gcc/final.c b/gcc/final.c index 6dc1cd1b0c8c4bd764a7a77cd4ed6a1fe95603c0..c80e5878feae21696d26b69c9f3= 013ac186b7231 100644 --- a/gcc/final.c +++ b/gcc/final.c @@ -2165,7 +2165,7 @@ asm_show_source (const char *filename, int linenum) =20 SEEN is used to track the end of the prologue, for emitting debug information. We force the emission of a line note after - both NOTE_INSN_PROLOGUE_END and NOTE_INSN_FUNCTION_BEG. */ + both NOTE_INSN_PROLOGUE_END and NOTE_INSN_DEBUG_FUNCTION_BEG. */ =20 static rtx_insn * final_scan_insn_1 (rtx_insn *insn, FILE *file, int optimize_p ATTRIBUTE_UN= USED, @@ -2299,6 +2299,9 @@ final_scan_insn_1 (rtx_insn *insn, FILE *file, int op= timize_p ATTRIBUTE_UNUSED, need_profile_function =3D false; } =20 + break; + + case NOTE_INSN_DEBUG_FUNCTION_BEG: app_disable (); if (!DECL_IGNORED_P (current_function_decl)) debug_hooks->end_prologue (last_linenum, last_filename); diff --git a/gcc/function.c b/gcc/function.c index cec344bdac8cd59ebca0364a165147d25f1e95cf..9e5950d712b9cf3142ddb0fc24b= 1188ee28539a7 100644 --- a/gcc/function.c +++ b/gcc/function.c @@ -6069,7 +6069,8 @@ thread_prologue_and_epilogue_insns (void) { next =3D NEXT_INSN (insn); if (NOTE_P (insn) - && (NOTE_KIND (insn) =3D=3D NOTE_INSN_FUNCTION_BEG)) + && ((NOTE_KIND (insn) =3D=3D NOTE_INSN_FUNCTION_BEG) + || (NOTE_KIND (insn) =3D=3D NOTE_INSN_DEBUG_FUNCTION_BEG))) reorder_insns (insn, insn, PREV_INSN (epilogue_seq)); } } diff --git a/gcc/insn-notes.def b/gcc/insn-notes.def index 337e9df8a75659cb73e4a9934842fa504b56a12e..2cb7f792fa45554b1379c265fab= d86285da594a5 100644 --- a/gcc/insn-notes.def +++ b/gcc/insn-notes.def @@ -51,6 +51,12 @@ INSN_NOTE (BLOCK_END) their homes, etc. */ INSN_NOTE (FUNCTION_BEG) =20 +/* This note indicates the start of user code. + This is different to FUNCTION_BEG above as FUNCTION_BEG is put before t= he + stack protection prologue, the code saving the stack location for nonlo= cal + gotos, and the code profiling code. */ +INSN_NOTE (DEBUG_FUNCTION_BEG) + /* This marks the point immediately after the last prologue insn. */ INSN_NOTE (PROLOGUE_END) =20 --_002_VI1PR0801MB20140428B8AEB97CE5B7B750E0840VI1PR0801MB2014_ Content-Type: text/plain; name="new-debug-function-note.patch" Content-Description: new-debug-function-note.patch Content-Disposition: attachment; filename="new-debug-function-note.patch"; size=5424; creation-date="Thu, 10 Jan 2019 13:28:05 GMT"; modification-date="Thu, 10 Jan 2019 13:28:05 GMT" Content-ID: <2AAF66F3AAC4934CAE0C4326B91BEB54@eurprd08.prod.outlook.com> Content-Transfer-Encoding: base64 Content-length: 7353 ZGlmZiAtLWdpdCBhL2djYy9jZmdleHBhbmQuYyBiL2djYy9jZmdleHBhbmQu YwppbmRleCA2MGMxY2ZiNDU1NmUxYTY1OWRiMTlmNjcxOWFkY2NjMWRhYjBm ZTQ2Li40OTFmNDQxZDAxZGUyMjZiYTVhZmYyYWY4YzcxNjgwYjc4NjQ4YTEy IDEwMDY0NAotLS0gYS9nY2MvY2ZnZXhwYW5kLmMKKysrIGIvZ2NjL2NmZ2V4 cGFuZC5jCkBAIC02NDc2LDYgKzY0NzYsMTIgQEAgcGFzc19leHBhbmQ6OmV4 ZWN1dGUgKGZ1bmN0aW9uICpmdW4pCiAgIGlmIChjcnRsLT5zdGFja19wcm90 ZWN0X2d1YXJkICYmIHRhcmdldG0uc3RhY2tfcHJvdGVjdF9ydW50aW1lX2Vu YWJsZWRfcCAoKSkKICAgICBzdGFja19wcm90ZWN0X3Byb2xvZ3VlICgpOwog CisgIC8qIEluc2VydCBhIE5PVEUgdGhhdCBtYXJrcyB0aGUgZW5kIG9mICJn ZW5lcmF0ZWQgY29kZSIgYW5kIHRoZSBzdGFydCBvZiBjb2RlCisgICAgIHRo YXQgY29tZXMgZnJvbSB0aGUgdXNlci4gIFRoaXMgaXMgdGhlIHBvaW50IHdo aWNoIGR3YXJmMm91dC5jIHdpbGwgdHJlYXQKKyAgICAgYXMgdGhlIGJlZ2lu bmluZyBvZiB0aGUgdXNlcnMgY29kZSBpbiB0aGlzIGZ1bmN0aW9uLiAgZS5n LiBHREIgd2lsbCBzdG9wCisgICAgIGp1c3QgYWZ0ZXIgdGhpcyBub3RlIHdo ZW4gYnJlYWtpbmcgb24gZW50cnkgdG8gdGhlIGZ1bmN0aW9uLiAgKi8KKyAg ZW1pdF9ub3RlIChOT1RFX0lOU05fREVCVUdfRlVOQ1RJT05fQkVHKTsKKwog ICBleHBhbmRfcGhpX25vZGVzICgmU0EpOwogCiAgIC8qIFJlbGVhc2UgYW55 IHN0YWxlIFNTQSByZWRpcmVjdGlvbiBkYXRhLiAgKi8KZGlmZiAtLWdpdCBh L2djYy9jZmdydGwuYyBiL2djYy9jZmdydGwuYwppbmRleCAxNzJiZGY1ODVk MDM2ZTI3YmNmNTNkYmE4OWMxZmZjMWI2Y2I4NGM3Li5kMGNiY2E4NGFhM2Yx NDAwMmE1NjhhNjVlNzAwMTZjM2UxNWQ2YjljIDEwMDY0NAotLS0gYS9nY2Mv Y2ZncnRsLmMKKysrIGIvZ2NjL2NmZ3J0bC5jCkBAIC00MjE1LDYgKzQyMTUs NyBAQCBkdXBsaWNhdGVfaW5zbl9jaGFpbiAocnR4X2luc24gKmZyb20sIHJ0 eF9pbnNuICp0bykKIAkgICAgY2FzZSBOT1RFX0lOU05fREVMRVRFRF9ERUJV R19MQUJFTDoKIAkgICAgICAvKiBObyBwcm9ibGVtIHRvIHN0cmlwIHRoZXNl LiAgKi8KIAkgICAgY2FzZSBOT1RFX0lOU05fRlVOQ1RJT05fQkVHOgorCSAg ICBjYXNlIE5PVEVfSU5TTl9ERUJVR19GVU5DVElPTl9CRUc6CiAJICAgICAg LyogVGhlcmUgaXMgYWx3YXlzIGp1c3Qgc2luZ2xlIGVudHJ5IHRvIGZ1bmN0 aW9uLiAgKi8KIAkgICAgY2FzZSBOT1RFX0lOU05fQkFTSUNfQkxPQ0s6CiAg ICAgICAgICAgICAgIC8qIFdlIHNob3VsZCBvbmx5IHN3aXRjaCB0ZXh0IHNl Y3Rpb25zIG9uY2UuICAqLwpkaWZmIC0tZ2l0IGEvZ2NjL2RvYy9ydGwudGV4 aSBiL2djYy9kb2MvcnRsLnRleGkKaW5kZXggNTgzMjkxMDE4NTM4NzIyYTE5 YTliYWY4YzQ2Yzg3Y2JkZmUzNDIxNi4uYTUwZDA4NDgzZGUwZGI4NDM3OGU0 OGM5MzM0YjQ4ZmYxMjU0ODE5MCAxMDA2NDQKLS0tIGEvZ2NjL2RvYy9ydGwu dGV4aQorKysgYi9nY2MvZG9jL3J0bC50ZXhpCkBAIC0zOTU0LDYgKzM5NTQs MTggQEAgaWRlbnRpZmllcyB3aGljaCByZWdpb24gaXMgYXNzb2NpYXRlZCB3 aXRoIHRoZXNlIG5vdGVzLgogQXBwZWFycyBhdCB0aGUgc3RhcnQgb2YgdGhl IGZ1bmN0aW9uIGJvZHksIGFmdGVyIHRoZSBmdW5jdGlvbgogcHJvbG9ndWUu CiAKK0BmaW5kZXggTk9URV9JTlNOX0RFQlVHX0ZVTkNUSU9OX0JFRworQGl0 ZW0gTk9URV9JTlNOX0RFQlVHX0ZVTkNUSU9OX0JFRworVGhpcyBOT1RFIGlz IGluc2VydGVkIGF0IHRoZSBzdGFydCBvZiBhIGZ1bmN0aW9uIGR1cmluZyBS VEwgZXhwYW5zaW9uLgorSXQgaXMgaW5zZXJ0ZWQgYXQgdGhlIHBvaW50IGlu IGEgZnVuY3Rpb24gd2hlcmUgY29kZSBjb21pbmcgZGlyZWN0bHkgZnJvbSB0 aGUKKyJ1c2VycyBzb3VyY2UiIHN0YXJ0cy4gaS5lLiB0aGUgZmlyc3QgaW5z biB0aGF0IGFwcGVhcnMgYWZ0ZXIgdGhpcyBub3RlIHNob3VsZAorYmUgZ2Vu ZXJhdGVkIGZyb20gdGhlIHVzZXIgY29kZSAoYW5kIG5vdCBmcm9tIGF1dG9t YXRpYyBjb2RlIGdlbmVyYXRpb24gdG8KK3N1cHBvcnQgY29tcGlsZXIgZmVh dHVyZXMpLgorVGhpcyBOT1RFIGlzIHVzZWQgdG8gZW5zdXJlIHRoZSBmaXJz dCBkZWJ1ZyBsaW5lIG51bWJlciBhZnRlciB0aGUgc3RhcnQgb2YgYW55Citm dW5jdGlvbiBpcyB0aGUgbGluZSBudW1iZXIgb2YgdGhlIGZpcnN0IHNvdXJj ZSBjb2RlIHN0YXRlbWVudCBpbiB0aGF0CitmdW5jdGlvbi4gR0RCIHR5cGlj YWxseSBkZXRlcm1pbmVzIHdoZXJlIHRvIGZpcnN0IHN0b3AgaW4gYSBmdW5j dGlvbiBiYXNlZCBvbgordGhpcyBmaXJzdCBsaW5lIG51bWJlciBlbnRyeS4K KwogQGZpbmRleCBOT1RFX0lOU05fVkFSX0xPQ0FUSU9OCiBAZmluZGV4IE5P VEVfVkFSX0xPQ0FUSU9OCiBAaXRlbSBOT1RFX0lOU05fVkFSX0xPQ0FUSU9O CmRpZmYgLS1naXQgYS9nY2MvZHdhcmYyb3V0LmMgYi9nY2MvZHdhcmYyb3V0 LmMKaW5kZXggOGQ5YTM4NDlmYTQyODllMjQ2YTEwYTY2MjUyNjY3ZGQ0YzZl MGY3NS4uMTBkMDVjZDUxZmM2NzljYjRhY2ZjODVmNzZkZjQxNWQxZDliMWYw ZCAxMDA2NDQKLS0tIGEvZ2NjL2R3YXJmMm91dC5jCisrKyBiL2djYy9kd2Fy ZjJvdXQuYwpAQCAtMjc4MDcsNyArMjc4MDcsNyBAQCBkd2FyZjJvdXRfc291 cmNlX2xpbmUgKHVuc2lnbmVkIGludCBsaW5lLCB1bnNpZ25lZCBpbnQgY29s dW1uLAogICAgICBhcyB0aGUgZW5kX3Byb2xvZ3VlIGRlYnVnIGhvb2suICBU aGUgTk9URV9JTlNOX1BST0xPR1VFX0VORCBub3RlLAogICAgICB0byB3aGlj aCB0aGUgaG9vayBjb3JyZXNwb25kcywgZm9sbG93cyB0aGUgbGFzdCBpbnNu IHRoYXQgd2FzIAogICAgICBlbWl0dGVkIGJ5IGdlbl9wcm9sb2d1ZS4gIFdo YXQgd2UgbmVlZCBpcyB0byBwcmVjZWRlIHRoZSBmaXJzdCBpbnNuCi0gICAg IHRoYXQgaGFkIGJlZW4gZW1pdHRlZCBhZnRlciBOT1RFX0lOU05fRlVOQ1RJ T05fQkVHLCBpLmUuIHRoZSBmaXJzdAorICAgICB0aGF0IGhhZCBiZWVuIGVt aXR0ZWQgYWZ0ZXIgTk9URV9JTlNOX0RFQlVHX0ZVTkNUSU9OX0JFRywgaS5l LiB0aGUgZmlyc3QKICAgICAgaW5zbiB0aGF0IGNvcnJlc3BvbmRzIHRvIHNv bWV0aGluZyB0aGUgdXNlciB3cm90ZS4gIFRoZXNlIG1heSBiZQogICAgICB2 ZXJ5IGRpZmZlcmVudCBsb2NhdGlvbnMgb25jZSBzY2hlZHVsaW5nIGlzIGVu YWJsZWQuICAqLwogCmRpZmYgLS1naXQgYS9nY2MvZmluYWwuYyBiL2djYy9m aW5hbC5jCmluZGV4IDZkYzFjZDFiMGM4YzRiZDc2NGE3YTc3Y2Q0ZWQ2YTFm ZTk1NjAzYzAuLmM4MGU1ODc4ZmVhZTIxNjk2ZDI2YjY5YzlmMzAxM2FjMTg2 YjcyMzEgMTAwNjQ0Ci0tLSBhL2djYy9maW5hbC5jCisrKyBiL2djYy9maW5h bC5jCkBAIC0yMTY1LDcgKzIxNjUsNyBAQCBhc21fc2hvd19zb3VyY2UgKGNv bnN0IGNoYXIgKmZpbGVuYW1lLCBpbnQgbGluZW51bSkKIAogICAgU0VFTiBp cyB1c2VkIHRvIHRyYWNrIHRoZSBlbmQgb2YgdGhlIHByb2xvZ3VlLCBmb3Ig ZW1pdHRpbmcKICAgIGRlYnVnIGluZm9ybWF0aW9uLiAgV2UgZm9yY2UgdGhl IGVtaXNzaW9uIG9mIGEgbGluZSBub3RlIGFmdGVyCi0gICBib3RoIE5PVEVf SU5TTl9QUk9MT0dVRV9FTkQgYW5kIE5PVEVfSU5TTl9GVU5DVElPTl9CRUcu ICAqLworICAgYm90aCBOT1RFX0lOU05fUFJPTE9HVUVfRU5EIGFuZCBOT1RF X0lOU05fREVCVUdfRlVOQ1RJT05fQkVHLiAgKi8KIAogc3RhdGljIHJ0eF9p bnNuICoKIGZpbmFsX3NjYW5faW5zbl8xIChydHhfaW5zbiAqaW5zbiwgRklM RSAqZmlsZSwgaW50IG9wdGltaXplX3AgQVRUUklCVVRFX1VOVVNFRCwKQEAg LTIyOTksNiArMjI5OSw5IEBAIGZpbmFsX3NjYW5faW5zbl8xIChydHhfaW5z biAqaW5zbiwgRklMRSAqZmlsZSwgaW50IG9wdGltaXplX3AgQVRUUklCVVRF X1VOVVNFRCwKIAkgICAgICBuZWVkX3Byb2ZpbGVfZnVuY3Rpb24gPSBmYWxz ZTsKIAkgICAgfQogCisJICBicmVhazsKKworCWNhc2UgTk9URV9JTlNOX0RF QlVHX0ZVTkNUSU9OX0JFRzoKIAkgIGFwcF9kaXNhYmxlICgpOwogCSAgaWYg KCFERUNMX0lHTk9SRURfUCAoY3VycmVudF9mdW5jdGlvbl9kZWNsKSkKIAkg ICAgZGVidWdfaG9va3MtPmVuZF9wcm9sb2d1ZSAobGFzdF9saW5lbnVtLCBs YXN0X2ZpbGVuYW1lKTsKZGlmZiAtLWdpdCBhL2djYy9mdW5jdGlvbi5jIGIv Z2NjL2Z1bmN0aW9uLmMKaW5kZXggY2VjMzQ0YmRhYzhjZDU5ZWJjYTAzNjRh MTY1MTQ3ZDI1ZjFlOTVjZi4uOWU1OTUwZDcxMmI5Y2YzMTQyZGRiMGZjMjRi MTE4OGVlMjg1MzlhNyAxMDA2NDQKLS0tIGEvZ2NjL2Z1bmN0aW9uLmMKKysr IGIvZ2NjL2Z1bmN0aW9uLmMKQEAgLTYwNjksNyArNjA2OSw4IEBAIHRocmVh ZF9wcm9sb2d1ZV9hbmRfZXBpbG9ndWVfaW5zbnMgKHZvaWQpCiAJewogCSAg bmV4dCA9IE5FWFRfSU5TTiAoaW5zbik7CiAJICBpZiAoTk9URV9QIChpbnNu KQotCSAgICAgICYmIChOT1RFX0tJTkQgKGluc24pID09IE5PVEVfSU5TTl9G VU5DVElPTl9CRUcpKQorCSAgICAgICYmICgoTk9URV9LSU5EIChpbnNuKSA9 PSBOT1RFX0lOU05fRlVOQ1RJT05fQkVHKQorCQkgIHx8IChOT1RFX0tJTkQg KGluc24pID09IE5PVEVfSU5TTl9ERUJVR19GVU5DVElPTl9CRUcpKSkKIAkg ICAgcmVvcmRlcl9pbnNucyAoaW5zbiwgaW5zbiwgUFJFVl9JTlNOIChlcGls b2d1ZV9zZXEpKTsKIAl9CiAgICAgfQpkaWZmIC0tZ2l0IGEvZ2NjL2luc24t bm90ZXMuZGVmIGIvZ2NjL2luc24tbm90ZXMuZGVmCmluZGV4IDMzN2U5ZGY4 YTc1NjU5Y2I3M2U0YTk5MzQ4NDJmYTUwNGI1NmExMmUuLjJjYjdmNzkyZmE0 NTU1NGIxMzc5YzI2NWZhYmQ4NjI4NWRhNTk0YTUgMTAwNjQ0Ci0tLSBhL2dj Yy9pbnNuLW5vdGVzLmRlZgorKysgYi9nY2MvaW5zbi1ub3Rlcy5kZWYKQEAg LTUxLDYgKzUxLDEyIEBAIElOU05fTk9URSAoQkxPQ0tfRU5EKQogICAgdGhl aXIgaG9tZXMsIGV0Yy4gICovCiBJTlNOX05PVEUgKEZVTkNUSU9OX0JFRykK IAorLyogVGhpcyBub3RlIGluZGljYXRlcyB0aGUgc3RhcnQgb2YgdXNlciBj b2RlLgorICAgVGhpcyBpcyBkaWZmZXJlbnQgdG8gRlVOQ1RJT05fQkVHIGFi b3ZlIGFzIEZVTkNUSU9OX0JFRyBpcyBwdXQgYmVmb3JlIHRoZQorICAgc3Rh Y2sgcHJvdGVjdGlvbiBwcm9sb2d1ZSwgdGhlIGNvZGUgc2F2aW5nIHRoZSBz dGFjayBsb2NhdGlvbiBmb3Igbm9ubG9jYWwKKyAgIGdvdG9zLCBhbmQgdGhl IGNvZGUgcHJvZmlsaW5nIGNvZGUuICovCitJTlNOX05PVEUgKERFQlVHX0ZV TkNUSU9OX0JFRykKKwogLyogVGhpcyBtYXJrcyB0aGUgcG9pbnQgaW1tZWRp YXRlbHkgYWZ0ZXIgdGhlIGxhc3QgcHJvbG9ndWUgaW5zbi4gICovCiBJTlNO X05PVEUgKFBST0xPR1VFX0VORCkKIAoK --_002_VI1PR0801MB20140428B8AEB97CE5B7B750E0840VI1PR0801MB2014_--