From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.129.124]) by sourceware.org (Postfix) with ESMTPS id E2D6B3858421 for ; Tue, 16 Aug 2022 08:56:23 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.1 sourceware.org E2D6B3858421 Received: from mail-oi1-f197.google.com (mail-oi1-f197.google.com [209.85.167.197]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_128_GCM_SHA256) id us-mta-517-KO0sgNPeOAOgyO732RKVxw-1; Tue, 16 Aug 2022 04:56:16 -0400 X-MC-Unique: KO0sgNPeOAOgyO732RKVxw-1 Received: by mail-oi1-f197.google.com with SMTP id h7-20020aca3a07000000b0034098c50f3eso2481015oia.22 for ; Tue, 16 Aug 2022 01:56:16 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:x-gm-message-state:from:to:cc; bh=rVNwmEQ+o1AKS8rDA+M8jUoif9IC2kizZZOTzxPOyJY=; b=nmhbDu58XgqkoKX97JSuwWn73N6vlRAOVi3G2cFRUtZ70fx0ly73I9jlDVB0OtvCB7 HzhBcmyVtYRBazIU2wZuG9UIY2kNlCmGrOIi6EWUvXUONuHcwIZ3+Y1R0D/HjJU6/1Fb qLx1aaG7U2sRf5kPmmGdAdpg3hOivKkOrrPXKCUtHJJMpo7pbq+OC71iWPCAUzEZ99HO P3k0Iv4tywFYsKNcWgJPcEHXAbTBr/+lYFrVQR2AKraKDCna9migxb6X7MFLSF2f21KB CwEiVCuJ1LZDHUA70d+xPKBduZz6lP2xk0RR8bHQYloJGAdNQGQ4Sx6gr6I40RAXPYXd VdaQ== X-Gm-Message-State: ACgBeo0mY/OPrRh7sdWr+Ss5MSMWDh2Gk5NozK7OYBJFnZFb5LE66zU7 sTo353etmBh3PIrUuZIWOXPrwbv3Thit0mm8PbycLyEmRyIJGvqElQCLmUiWLBes4U1COefOS5V 0TgTsgyE2LD1pIy218ZO/8PMjhQpk/R3n5A== X-Received: by 2002:a05:6808:f0f:b0:343:2e0e:ac52 with SMTP id m15-20020a0568080f0f00b003432e0eac52mr11943492oiw.36.1660640175626; Tue, 16 Aug 2022 01:56:15 -0700 (PDT) X-Google-Smtp-Source: AA6agR6lVHJUJ0XKKae3eDg30PS5nnEBAgRmklK3Q9e4p/g8noasUXmVIcAY9k5R34DIg8y0twSXKp3yQAuQyJEeF/4= X-Received: by 2002:a05:6808:f0f:b0:343:2e0e:ac52 with SMTP id m15-20020a0568080f0f00b003432e0eac52mr11943485oiw.36.1660640175272; Tue, 16 Aug 2022 01:56:15 -0700 (PDT) MIME-Version: 1.0 References: <73820.122081107421800679@us-mta-533.us.mimecast.lan> In-Reply-To: From: Aldy Hernandez Date: Tue, 16 Aug 2022 10:56:04 +0200 Message-ID: Subject: Re: [PATCH] Tame path_range_query::compute_imports To: Richard Biener Cc: Andrew MacLeod , gcc-patches X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: redhat.com Content-Type: multipart/mixed; boundary="000000000000bf7c0b05e657eb3e" X-Spam-Status: No, score=-12.3 required=5.0 tests=BAYES_00, DKIMWL_WL_HIGH, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, DKIM_VALID_EF, GIT_PATCH_0, RCVD_IN_DNSWL_LOW, SPF_HELO_NONE, SPF_NONE, TXREP, T_SCC_BODY_TEXT_LINE autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on server2.sourceware.org X-BeenThere: gcc-patches@gcc.gnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Gcc-patches mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 16 Aug 2022 08:56:28 -0000 --000000000000bf7c0b05e657eb3e Content-Type: text/plain; charset="UTF-8" On Mon, Aug 15, 2022 at 11:53 AM Richard Biener wrote: > > On Thu, 11 Aug 2022, Aldy Hernandez wrote: > > > On Thu, Aug 11, 2022 at 3:59 PM Andrew MacLeod wrote: > > > > > > > > > On 8/11/22 07:42, Richard Biener wrote: > > > > This avoids going BBs outside of the path when adding def chains > > > > to the set of imports. It also syncs the code with > > > > range_def_chain::get_def_chain to not miss out on some imports > > > > this function would identify. > > > > > > > > Bootstrap / regtest pending on x86_64-unknown-linux-gnu. > > > > > > > > The question still stands on what the path_range_query::compute_ranges > > > > actually needs in its m_imports - at least I don't easily see how > > > > the range-folds will use the path range cache or be path sensitive > > > > at all. > > > > > > All the range folding code is in gimple_range_fold.{h,cc}, and its > > > driven by the mystical FUR_source classes. fur_source stands for > > > Fold_Using_Range source, and its basically just an API class which all > > > the folding routines use to make queries. it is used by all the fold > > > routines to ask any questions about valueizing relations, ssa name, > > > etc.. but abstracts the actual source of the information. Its the > > > distillation from previous incarnations where I use to pass an edge, a > > > stmt and other stuff to each routine that it might need, and decided to > > > abstract since it was very unwieldy. The base class requires only a > > > range_query which is then used for all queries. > > > > Note that not only is ranger and path_query a range_query, so is > > vr_values from legacy land. It all shares the same API. And the > > simplify_using_ranges class takes a range_query, so it can work with > > legacy or ranger, or even (untested) the path_query class. > > > > > > > > Then I derive fur_stmt which is instantiated additionally with the stmt > > > you wish to fold at, and it will perform queries using that stmt as the > > > context source.. Any requests for ranges/relations/etc will occur as > > > if that stmt location is the source. If folding a particular stmt, you > > > use that stmt as the fur_stmt source. This is also how I do > > > recalculations.. when we see > > > bb4: > > > a_32 = f_16 + 10 > > > <...> > > > bb88: > > > if (f_16 < 20) > > > b_8 = a_32 + 8 > > > and there is sufficient reason to think that a_32 would have a different > > > value , we can invoke a re-fold of a_32's defintion stmt at the use > > > point in b_8.. using that stmt as the fur_source. Ranger will take into > > > account the range of f_16 being [0,19] at that spot, and recalculate > > > a_32 as [10,29]. Its expensive to do this at every use point, so we > > > only do it if we think there is a good reason at this point. > > > > > > The point is that the fur_source mechanism is how we provide a context, > > > and that class talkes care of the details of what the source actually is. > > > > > > There are other fur_sources.. fur_edge allows all the same questions to > > > be answered, but using an edge as the source. Meaning we can calculate > > > an arbitrary stmt/expressions as if it occurs on an edge. > > > > > > There are also a couple of specialized fur_sources.. there is an > > > internal one in ranger which communicates some other information called > > > fur_depend which acts like range_of_stmt, but with additional > > > functionality to register dependencies in GORI as they are seen. > > > > This is a really good explanation. I think you should save it and > > included it in the documentation when you/we get around to writing it > > ;-). > > > > > > > > Aldy overloads the fur_depend class (called jt_fur_source-- Im not sure > > > the origination of the name) to work with the values in the path_query > > > class. You will note that the path_range_query class inherits from a > > > range_query, so it supports all the range_of_expr, range_of_stmt, and > > > range_on_edge aspect of rangers API. > > > > The name comes from "jump thread" fur_source. I should probably > > rename that to path_fur_source. Note that even though the full > > range_query API is available in path_range_query, only range_of_expr > > and range_of_stmt are supported (or tested). As I mention in the > > comment for the class: > > > > // This class is a basic block path solver. Given a set of BBs > > // indicating a path through the CFG, range_of_expr and range_of_stmt > > // will calculate the range of an SSA or STMT as if the BBs in the > > // path would have been executed in order. > > > > So using range_on_edge would probably give unexpected results, using > > stuff in the cache as it would appear at the end of the path, or some > > such. We could definitely harden this class and make it work solidly > > across the entire API, but we've had no uses so far for anything but > > range_of_expr and range_of_stmt-- and even those are only supported > > for a range as it would appear at the end of the path. So if you call > > range_of_expr with a statement anywhere but the end of the path, > > you're asking for trouble. > > > > > > > > I believe all attempts are first made to pick up the value from the path > > > cache, and failing that, a query is made from ranger at the start of the > > > path. So as the walk thru the path happens, and edges are taken/chosen, > > > all the context information local to the path should be placed into the > > > path cache, and used in any future queries using the path_range_query. > > > Ranger will only be invoked if there is no entry in the path query, and > > > it would provide the range as it would appear at entry to the path. > > > > > > Thats my high level understanding of how the path_query class provides > > > context. > > > > That's actually a really good explanation of how it all works (or at > > least how it's supposed to work ;-)). Thanks. > > Yes, thanks - that was helpful (and the general back threader stuff > confirms what I reverse engineered). > > > > > > > So I think to answer the other question, the m_imports list Is probably > > > the list of ssa-names that may have relevant context information which > > > the path_query would provide ranges during the walk instead of ranger? > > > I think Aldy pre-calculates all those during the walk, and then uses > > > this pre-filled cache to answer questions at the thread exit? Thats my > > > guess > > > > Yeah, though I should probably sit down and do some testing, making > > sure we're not adding more imports than we need to. Richi has found a > > whole bunch of imports that ended up in the list that were ultimately > > not needed. My original comment that adding more imports to the > > bitmap had no penalty should be nuked-- it obviously has a performance > > effect, especially for pathological cases. > > > > Regarding the name "imports". I think it's confusing all of us, > > because GORI has a very clear definition of what imports are. OTOH, > > the path solver starts with the imports from GORI land, but ends up > > adding more SSA names that would be useful to solve, to provide > > context as Andrew says. Maybe, we should call the "imports" in the > > path solver something else to avoid confusion. Interesting names? > > Must-be-solved? Context-SSA? Suggestions? > > I understand them to be path exit dependences, the 'interesting names' > thing is already used. So maybe > s/compute_imports/compute_exit_dependences/, this name clash did > confuse me a bit. Though we do stop at the path entry and have > the "path imports" in the list of dependences as well (but not > the dependences of those imports). Yeah, I much prefer the exit dependencies name as it avoids confusion and makes things clearer. This is what I have in mind. Do you agree? Is it clearer now? Aldy --000000000000bf7c0b05e657eb3e Content-Type: text/x-patch; charset="US-ASCII"; name="0001-Rename-imports-nomenclature-in-path_range_query-to-e.patch" Content-Disposition: attachment; filename="0001-Rename-imports-nomenclature-in-path_range_query-to-e.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_l6vy8sn90 RnJvbSA0OGU5NzI0MGE1MjU1ZmZkNzJkY2E4ZDJjMjM5MzcwMjlhZmY4ODJiIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBBbGR5IEhlcm5hbmRleiA8YWxkeWhAcmVkaGF0LmNvbT4KRGF0 ZTogVHVlLCAxNiBBdWcgMjAyMiAxMDo1MjozNyArMDIwMApTdWJqZWN0OiBbUEFUQ0hdIFJlbmFt ZSBpbXBvcnRzIG5vbWVuY2xhdHVyZSBpbiBwYXRoX3JhbmdlX3F1ZXJ5IHRvCiBleGl0X2RlcGVu ZGVuY2llcy4KClRoZSBwdXJwb3NlIG9mIHRoaXMgY2hhbmdlIGlzIHRvIGRpc2FtYmlndWF0ZSB0 aGUgaW1wb3J0cyBuYW1lIHdpdGgKaXRzIHVzZSBpbiBHT1JJLgoKZ2NjL0NoYW5nZUxvZzoKCgkq IGdpbXBsZS1yYW5nZS1wYXRoLmNjIChwYXRoX3JhbmdlX3F1ZXJ5OjppbXBvcnRfcCk6IFJlbmFt ZSB0by4uLgoJKHBhdGhfcmFuZ2VfcXVlcnk6OmV4aXRfZGVwZW5kZW5jeV9wKTogLi4udGhpcy4K CShwYXRoX3JhbmdlX3F1ZXJ5OjpkdW1wKTogUmVuYW1lIGltcG9ydHMgdG8gZXhpdCBkZXBlbmRl bmNpZXMuCgkocGF0aF9yYW5nZV9xdWVyeTo6Y29tcHV0ZV9yYW5nZXNfaW5fcGhpcyk6IFNhbWUu CgkocGF0aF9yYW5nZV9xdWVyeTo6Y29tcHV0ZV9yYW5nZXNfaW5fYmxvY2spOiBTYW1lLgoJKHBh dGhfcmFuZ2VfcXVlcnk6OmFkanVzdF9mb3Jfbm9uX251bGxfdXNlcyk6IFNhbWUuCgkocGF0aF9y YW5nZV9xdWVyeTo6Y29tcHV0ZV9yYW5nZXMpOiBTYW1lLgoJKHBhdGhfcmFuZ2VfcXVlcnk6OmNv bXB1dGVfcGhpX3JlbGF0aW9ucyk6IFNhbWUuCgkocGF0aF9yYW5nZV9xdWVyeTo6YWRkX3RvX2lt cG9ydHMpOiBSZW5hbWUgdG8uLi4KCShwYXRoX3JhbmdlX3F1ZXJ5OjphZGRfdG9fZXhpdF9kZXBl bmRlbmNpZXMpOiAuLi50aGlzLgoJKHBhdGhfcmFuZ2VfcXVlcnk6OmNvbXB1dGVfaW1wb3J0cyk6 IFJlbmFtZSB0by4uLgoJKHBhdGhfcmFuZ2VfcXVlcnk6OmNvbXB1dGVfZXhpdF9kZXBlbmRlbmNp ZXMpOiAuLi50aGlzLgoJKiBnaW1wbGUtcmFuZ2UtcGF0aC5oIChjbGFzcyBwYXRoX3JhbmdlX3F1 ZXJ5KTogUmVuYW1lIGltcG9ydHMgdG8KCWV4aXQgZGVwZW5kZW5jaWVzLgotLS0KIGdjYy9naW1w bGUtcmFuZ2UtcGF0aC5jYyB8IDc5ICsrKysrKysrKysrKysrKysrKystLS0tLS0tLS0tLS0tLS0t LS0tLS0KIGdjYy9naW1wbGUtcmFuZ2UtcGF0aC5oICB8IDE5ICsrKysrKystLS0KIDIgZmlsZXMg Y2hhbmdlZCwgNTEgaW5zZXJ0aW9ucygrKSwgNDcgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEv Z2NjL2dpbXBsZS1yYW5nZS1wYXRoLmNjIGIvZ2NjL2dpbXBsZS1yYW5nZS1wYXRoLmNjCmluZGV4 IDc4MTQ2ZjU2ODNlLi5jOTlkNzdkZDM0MCAxMDA2NDQKLS0tIGEvZ2NjL2dpbXBsZS1yYW5nZS1w YXRoLmNjCisrKyBiL2djYy9naW1wbGUtcmFuZ2UtcGF0aC5jYwpAQCAtNjIsMTMgKzYyLDEzIEBA IHBhdGhfcmFuZ2VfcXVlcnk6On5wYXRoX3JhbmdlX3F1ZXJ5ICgpCiAgIGRlbGV0ZSBtX2NhY2hl OwogfQogCi0vLyBSZXR1cm4gVFJVRSBpZiBOQU1FIGlzIGluIHRoZSBpbXBvcnQgYml0bWFwLgor Ly8gUmV0dXJuIFRSVUUgaWYgTkFNRSBpcyBhbiBleGl0IGRlcGVuZW5jeSBmb3IgdGhlIHBhdGgu CiAKIGJvb2wKLXBhdGhfcmFuZ2VfcXVlcnk6OmltcG9ydF9wICh0cmVlIG5hbWUpCitwYXRoX3Jh bmdlX3F1ZXJ5OjpleGl0X2RlcGVuZGVuY3lfcCAodHJlZSBuYW1lKQogewogICByZXR1cm4gKFRS RUVfQ09ERSAobmFtZSkgPT0gU1NBX05BTUUKLQkgICYmIGJpdG1hcF9iaXRfcCAobV9pbXBvcnRz LCBTU0FfTkFNRV9WRVJTSU9OIChuYW1lKSkpOworCSAgJiYgYml0bWFwX2JpdF9wIChtX2V4aXRf ZGVwZW5kZW5jaWVzLCBTU0FfTkFNRV9WRVJTSU9OIChuYW1lKSkpOwogfQogCiAvLyBNYXJrIGNh Y2hlIGVudHJ5IGZvciBOQU1FIGFzIHVudXNlZC4KQEAgLTExOCw4ICsxMTgsOCBAQCBwYXRoX3Jh bmdlX3F1ZXJ5OjpkdW1wIChGSUxFICpkdW1wX2ZpbGUpCiAKICAgZHVtcF9yYW5nZXIgKGR1bXBf ZmlsZSwgbV9wYXRoKTsKIAotICBmcHJpbnRmIChkdW1wX2ZpbGUsICJJbXBvcnRzOlxuIik7Ci0g IEVYRUNVVEVfSUZfU0VUX0lOX0JJVE1BUCAobV9pbXBvcnRzLCAwLCBpLCBiaSkKKyAgZnByaW50 ZiAoZHVtcF9maWxlLCAiRXhpdCBkZXBlbmRlbmNpZXM6XG4iKTsKKyAgRVhFQ1VURV9JRl9TRVRf SU5fQklUTUFQIChtX2V4aXRfZGVwZW5kZW5jaWVzLCAwLCBpLCBiaSkKICAgICB7CiAgICAgICB0 cmVlIG5hbWUgPSBzc2FfbmFtZSAoaSk7CiAgICAgICBwcmludF9nZW5lcmljX2V4cHIgKGR1bXBf ZmlsZSwgbmFtZSwgVERGX1NMSU0pOwpAQCAtMzU2LDcgKzM1Niw3IEBAIHBhdGhfcmFuZ2VfcXVl cnk6OmNvbXB1dGVfcmFuZ2VzX2luX3BoaXMgKGJhc2ljX2Jsb2NrIGJiKQogICAgICAgZ3BoaSAq cGhpID0gaXRlci5waGkgKCk7CiAgICAgICB0cmVlIG5hbWUgPSBnaW1wbGVfcGhpX3Jlc3VsdCAo cGhpKTsKIAotICAgICAgaWYgKCFpbXBvcnRfcCAobmFtZSkpCisgICAgICBpZiAoIWV4aXRfZGVw ZW5kZW5jeV9wIChuYW1lKSkKIAljb250aW51ZTsKIAogICAgICAgVmFsdWVfUmFuZ2UgciAoVFJF RV9UWVBFIChuYW1lKSk7CkBAIC00MDAsMTcgKzQwMCwxNyBAQCBwYXRoX3JhbmdlX3F1ZXJ5Ojpj b21wdXRlX3Jhbmdlc19pbl9ibG9jayAoYmFzaWNfYmxvY2sgYmIpCiAKICAgLy8gRm9yY2UgcmVj YWxjdWxhdGlvbiBvZiBhbnkgbmFtZXMgaW4gdGhlIGNhY2hlIHRoYXQgYXJlIGRlZmluZWQgaW4K ICAgLy8gdGhpcyBibG9jay4gIFRoaXMgY2FuIGhhcHBlbiBvbiBpbnRlcmRlcGVuZGVudCBTU0Ev cGhpcyBpbiBsb29wcy4KLSAgRVhFQ1VURV9JRl9TRVRfSU5fQklUTUFQIChtX2ltcG9ydHMsIDAs IGksIGJpKQorICBFWEVDVVRFX0lGX1NFVF9JTl9CSVRNQVAgKG1fZXhpdF9kZXBlbmRlbmNpZXMs IDAsIGksIGJpKQogICAgIHsKICAgICAgIHRyZWUgbmFtZSA9IHNzYV9uYW1lIChpKTsKICAgICAg IGlmIChzc2FfZGVmaW5lZF9pbl9iYiAobmFtZSwgYmIpKQogCWNsZWFyX2NhY2hlIChuYW1lKTsK ICAgICB9CiAKLSAgLy8gU29sdmUgaW1wb3J0cyBkZWZpbmVkIGluIHRoaXMgYmxvY2ssIHN0YXJ0 aW5nIHdpdGggdGhlIFBISXMuLi4KKyAgLy8gU29sdmUgZGVwZW5kZW5jaWVzIGRlZmluZWQgaW4g dGhpcyBibG9jaywgc3RhcnRpbmcgd2l0aCB0aGUgUEhJcy4uLgogICBjb21wdXRlX3Jhbmdlc19p bl9waGlzIChiYik7Ci0gIC8vIC4uLmFuZCB0aGVuIHRoZSByZXN0IG9mIHRoZSBpbXBvcnRzLgot ICBFWEVDVVRFX0lGX1NFVF9JTl9CSVRNQVAgKG1faW1wb3J0cywgMCwgaSwgYmkpCisgIC8vIC4u LmFuZCB0aGVuIHRoZSByZXN0IG9mIHRoZSBkZXBlbmRlbmNpZXMuCisgIEVYRUNVVEVfSUZfU0VU X0lOX0JJVE1BUCAobV9leGl0X2RlcGVuZGVuY2llcywgMCwgaSwgYmkpCiAgICAgewogICAgICAg dHJlZSBuYW1lID0gc3NhX25hbWUgKGkpOwogICAgICAgVmFsdWVfUmFuZ2UgciAoVFJFRV9UWVBF IChuYW1lKSk7CkBAIC00MjMsNyArNDIzLDcgQEAgcGF0aF9yYW5nZV9xdWVyeTo6Y29tcHV0ZV9y YW5nZXNfaW5fYmxvY2sgKGJhc2ljX2Jsb2NrIGJiKQogICBpZiAoYXRfZXhpdCAoKSkKICAgICBy ZXR1cm47CiAKLSAgLy8gU29sdmUgaW1wb3J0cyB0aGF0IGFyZSBleHBvcnRlZCB0byB0aGUgbmV4 dCBibG9jay4KKyAgLy8gU29sdmUgZGVwZW5kZW5jaWVzIHRoYXQgYXJlIGV4cG9ydGVkIHRvIHRo ZSBuZXh0IGJsb2NrLgogICBiYXNpY19ibG9jayBuZXh0ID0gbmV4dF9iYiAoKTsKICAgZWRnZSBl ID0gZmluZF9lZGdlIChiYiwgbmV4dCk7CiAKQEAgLTQ0NCw3ICs0NDQsNyBAQCBwYXRoX3Jhbmdl X3F1ZXJ5Ojpjb21wdXRlX3Jhbmdlc19pbl9ibG9jayAoYmFzaWNfYmxvY2sgYmIpCiAKICAgZ29y aV9jb21wdXRlICZnID0gbV9yYW5nZXItPmdvcmkgKCk7CiAgIGJpdG1hcCBleHBvcnRzID0gZy5l eHBvcnRzIChiYik7Ci0gIEVYRUNVVEVfSUZfQU5EX0lOX0JJVE1BUCAobV9pbXBvcnRzLCBleHBv cnRzLCAwLCBpLCBiaSkKKyAgRVhFQ1VURV9JRl9BTkRfSU5fQklUTUFQIChtX2V4aXRfZGVwZW5k ZW5jaWVzLCBleHBvcnRzLCAwLCBpLCBiaSkKICAgICB7CiAgICAgICB0cmVlIG5hbWUgPSBzc2Ff bmFtZSAoaSk7CiAgICAgICBWYWx1ZV9SYW5nZSByIChUUkVFX1RZUEUgKG5hbWUpKTsKQEAgLTQ3 Miw3ICs0NzIsNyBAQCBwYXRoX3JhbmdlX3F1ZXJ5Ojpjb21wdXRlX3Jhbmdlc19pbl9ibG9jayAo YmFzaWNfYmxvY2sgYmIpCiAgICAgY29tcHV0ZV9vdXRnb2luZ19yZWxhdGlvbnMgKGJiLCBuZXh0 KTsKIH0KIAotLy8gQWRqdXN0IGFsbCBwb2ludGVyIGltcG9ydHMgaW4gQkIgd2l0aCBub24tbnVs bCBpbmZvcm1hdGlvbi4KKy8vIEFkanVzdCBhbGwgcG9pbnRlciBleGl0IGRlcGVuZGVuY2llcyBp biBCQiB3aXRoIG5vbi1udWxsIGluZm9ybWF0aW9uLgogCiB2b2lkCiBwYXRoX3JhbmdlX3F1ZXJ5 OjphZGp1c3RfZm9yX25vbl9udWxsX3VzZXMgKGJhc2ljX2Jsb2NrIGJiKQpAQCAtNDgxLDcgKzQ4 MSw3IEBAIHBhdGhfcmFuZ2VfcXVlcnk6OmFkanVzdF9mb3Jfbm9uX251bGxfdXNlcyAoYmFzaWNf YmxvY2sgYmIpCiAgIGJpdG1hcF9pdGVyYXRvciBiaTsKICAgdW5zaWduZWQgaTsKIAotICBFWEVD VVRFX0lGX1NFVF9JTl9CSVRNQVAgKG1faW1wb3J0cywgMCwgaSwgYmkpCisgIEVYRUNVVEVfSUZf U0VUX0lOX0JJVE1BUCAobV9leGl0X2RlcGVuZGVuY2llcywgMCwgaSwgYmkpCiAgICAgewogICAg ICAgdHJlZSBuYW1lID0gc3NhX25hbWUgKGkpOwogCkBAIC01MDEsMzkgKzUwMSwzMyBAQCBwYXRo X3JhbmdlX3F1ZXJ5OjphZGp1c3RfZm9yX25vbl9udWxsX3VzZXMgKGJhc2ljX2Jsb2NrIGJiKQog ICAgIH0KIH0KIAotLy8gSWYgTkFNRSBpcyBhIHN1cHBvcnRlZCBTU0FfTkFNRSwgYWRkIGl0IHRo ZSBiaXRtYXAgaW4gSU1QT1JUUy4KKy8vIElmIE5BTUUgaXMgYSBzdXBwb3J0ZWQgU1NBX05BTUUs IGFkZCBpdCB0byB0aGUgYml0bWFwIGluIGRlcGVuZGVuY2llcy4KIAogYm9vbAotcGF0aF9yYW5n ZV9xdWVyeTo6YWRkX3RvX2ltcG9ydHMgKHRyZWUgbmFtZSwgYml0bWFwIGltcG9ydHMpCitwYXRo X3JhbmdlX3F1ZXJ5OjphZGRfdG9fZXhpdF9kZXBlbmRlbmNpZXMgKHRyZWUgbmFtZSwgYml0bWFw IGRlcGVuZGVuY2llcykKIHsKICAgaWYgKFRSRUVfQ09ERSAobmFtZSkgPT0gU1NBX05BTUUKICAg ICAgICYmIFZhbHVlX1JhbmdlOjpzdXBwb3J0c190eXBlX3AgKFRSRUVfVFlQRSAobmFtZSkpKQot ICAgIHJldHVybiBiaXRtYXBfc2V0X2JpdCAoaW1wb3J0cywgU1NBX05BTUVfVkVSU0lPTiAobmFt ZSkpOworICAgIHJldHVybiBiaXRtYXBfc2V0X2JpdCAoZGVwZW5kZW5jaWVzLCBTU0FfTkFNRV9W RVJTSU9OIChuYW1lKSk7CiAgIHJldHVybiBmYWxzZTsKIH0KIAotLy8gQ29tcHV0ZSB0aGUgaW1w b3J0cyB0byBQQVRILiAgVGhlc2UgYXJlCi0vLyBlc3NlbnRpYWxseSB0aGUgU1NBIG5hbWVzIHVz ZWQgdG8gY2FsY3VsYXRlIHRoZSBmaW5hbCBjb25kaXRpb25hbAotLy8gYWxvbmcgdGhlIHBhdGgu Ci0vLwotLy8gVGhleSBhcmUgaGludHMgZm9yIHRoZSBzb2x2ZXIuICBBZGRpbmcgbW9yZSBlbGVt ZW50cyBkb2Vzbid0IHNsb3cKLS8vIHVzIGRvd24sIGJlY2F1c2Ugd2UgZG9uJ3Qgc29sdmUgYW55 dGhpbmcgdGhhdCBkb2Vzbid0IGFwcGVhciBpbiB0aGUKLS8vIHBhdGguICBPbiB0aGUgb3RoZXIg aGFuZCwgbm90IGhhdmluZyBlbm91Z2ggaW1wb3J0cyB3aWxsIGxpbWl0IHdoYXQKLS8vIHdlIGNh biBzb2x2ZS4KKy8vIENvbXB1dGUgdGhlIGV4aXQgZGVwZW5kZW5jaWVzIHRvIFBBVEguICBUaGVz ZSBhcmUgZXNzZW50aWFsbHkgdGhlCisvLyBTU0EgbmFtZXMgdXNlZCB0byBjYWxjdWxhdGUgdGhl IGZpbmFsIGNvbmRpdGlvbmFsIGFsb25nIHRoZSBwYXRoLgogCiB2b2lkCi1wYXRoX3JhbmdlX3F1 ZXJ5Ojpjb21wdXRlX2ltcG9ydHMgKGJpdG1hcCBpbXBvcnRzLCBjb25zdCB2ZWM8YmFzaWNfYmxv Y2s+ICZwYXRoKQorcGF0aF9yYW5nZV9xdWVyeTo6Y29tcHV0ZV9leGl0X2RlcGVuZGVuY2llcyAo Yml0bWFwIGRlcGVuZGVuY2llcywKKwkJCQkJICAgICBjb25zdCB2ZWM8YmFzaWNfYmxvY2s+ICZw YXRoKQogewogICAvLyBTdGFydCB3aXRoIHRoZSBpbXBvcnRzIGZyb20gdGhlIGV4aXQgYmxvY2su Li4KICAgYmFzaWNfYmxvY2sgZXhpdCA9IHBhdGhbMF07CiAgIGdvcmlfY29tcHV0ZSAmZ29yaSA9 IG1fcmFuZ2VyLT5nb3JpICgpOwotICBiaXRtYXAgcl9pbXBvcnRzID0gZ29yaS5pbXBvcnRzIChl eGl0KTsKLSAgYml0bWFwX2NvcHkgKGltcG9ydHMsIHJfaW1wb3J0cyk7CisgIGJpdG1hcF9jb3B5 IChkZXBlbmRlbmNpZXMsIGdvcmkuaW1wb3J0cyAoZXhpdCkpOwogCi0gIGF1dG9fdmVjPHRyZWU+ IHdvcmtsaXN0IChiaXRtYXBfY291bnRfYml0cyAoaW1wb3J0cykpOworICBhdXRvX3ZlYzx0cmVl PiB3b3JrbGlzdCAoYml0bWFwX2NvdW50X2JpdHMgKGRlcGVuZGVuY2llcykpOwogICBiaXRtYXBf aXRlcmF0b3IgYmk7CiAgIHVuc2lnbmVkIGk7Ci0gIEVYRUNVVEVfSUZfU0VUX0lOX0JJVE1BUCAo aW1wb3J0cywgMCwgaSwgYmkpCisgIEVYRUNVVEVfSUZfU0VUX0lOX0JJVE1BUCAoZGVwZW5kZW5j aWVzLCAwLCBpLCBiaSkKICAgICB7CiAgICAgICB0cmVlIG5hbWUgPSBzc2FfbmFtZSAoaSk7CiAg ICAgICB3b3JrbGlzdC5xdWlja19wdXNoIChuYW1lKTsKQEAgLTU1Nyw3ICs1NTEsNyBAQCBwYXRo X3JhbmdlX3F1ZXJ5Ojpjb21wdXRlX2ltcG9ydHMgKGJpdG1hcCBpbXBvcnRzLCBjb25zdCB2ZWM8 YmFzaWNfYmxvY2s+ICZwYXRoKQogCiAJICAgICAgaWYgKFRSRUVfQ09ERSAoYXJnKSA9PSBTU0Ff TkFNRQogCQkgICYmIHBhdGguY29udGFpbnMgKGUtPnNyYykKLQkJICAmJiBiaXRtYXBfc2V0X2Jp dCAoaW1wb3J0cywgU1NBX05BTUVfVkVSU0lPTiAoYXJnKSkpCisJCSAgJiYgYml0bWFwX3NldF9i aXQgKGRlcGVuZGVuY2llcywgU1NBX05BTUVfVkVSU0lPTiAoYXJnKSkpCiAJCXdvcmtsaXN0LnNh ZmVfcHVzaCAoYXJnKTsKIAkgICAgfQogCX0KQEAgLTU4MSw3ICs1NzUsNyBAQCBwYXRoX3Jhbmdl X3F1ZXJ5Ojpjb21wdXRlX2ltcG9ydHMgKGJpdG1hcCBpbXBvcnRzLCBjb25zdCB2ZWM8YmFzaWNf YmxvY2s+ICZwYXRoKQogCSAgZm9yICh1bnNpZ25lZCBqID0gMDsgaiA8IDM7ICsraikKIAkgICAg ewogCSAgICAgIHRyZWUgcmhzID0gc3NhW2pdOwotCSAgICAgIGlmIChyaHMgJiYgYWRkX3RvX2lt cG9ydHMgKHJocywgaW1wb3J0cykpCisJICAgICAgaWYgKHJocyAmJiBhZGRfdG9fZXhpdF9kZXBl bmRlbmNpZXMgKHJocywgZGVwZW5kZW5jaWVzKSkKIAkJd29ya2xpc3Quc2FmZV9wdXNoIChyaHMp OwogCSAgICB9CiAJfQpAQCAtNTk0LDE5ICs1ODgsMjAgQEAgcGF0aF9yYW5nZV9xdWVyeTo6Y29t cHV0ZV9pbXBvcnRzIChiaXRtYXAgaW1wb3J0cywgY29uc3QgdmVjPGJhc2ljX2Jsb2NrPiAmcGF0 aCkKIAl0cmVlIG5hbWU7CiAJRk9SX0VBQ0hfR09SSV9FWFBPUlRfTkFNRSAoZ29yaSwgYmIsIG5h bWUpCiAJICBpZiAoVFJFRV9DT0RFIChUUkVFX1RZUEUgKG5hbWUpKSA9PSBCT09MRUFOX1RZUEUp Ci0JICAgIGJpdG1hcF9zZXRfYml0IChpbXBvcnRzLCBTU0FfTkFNRV9WRVJTSU9OIChuYW1lKSk7 CisJICAgIGJpdG1hcF9zZXRfYml0IChkZXBlbmRlbmNpZXMsIFNTQV9OQU1FX1ZFUlNJT04gKG5h bWUpKTsKICAgICAgIH0KIH0KIAotLy8gQ29tcHV0ZSB0aGUgcmFuZ2VzIGZvciBJTVBPUlRTIGFs b25nIFBBVEguCisvLyBDb21wdXRlIHRoZSByYW5nZXMgZm9yIERFUEVOREVOQ0lFUyBhbG9uZyBQ QVRILgogLy8KLS8vIElNUE9SVFMgYXJlIHRoZSBzZXQgb2YgU1NBIG5hbWVzLCBhbnkgb2Ygd2hp Y2ggY291bGQgcG90ZW50aWFsbHkKLS8vIGNoYW5nZSB0aGUgdmFsdWUgb2YgdGhlIGZpbmFsIGNv bmRpdGlvbmFsIGluIFBBVEguICBEZWZhdWx0IHRvIHRoZQotLy8gaW1wb3J0cyBvZiB0aGUgbGFz dCBibG9jayBpbiB0aGUgcGF0aCBpZiBub25lIGlzIGdpdmVuLgorLy8gREVQRU5ERU5DSUVTIGFy ZSBwYXRoIGV4aXQgZGVwZW5kZW5jaWVzLiAgVGhleSBhcmUgdGhlIHNldCBvZiBTU0EKKy8vIG5h bWVzLCBhbnkgb2Ygd2hpY2ggY291bGQgcG90ZW50aWFsbHkgY2hhbmdlIHRoZSB2YWx1ZSBvZiB0 aGUgZmluYWwKKy8vIGNvbmRpdGlvbmFsIGluIFBBVEguICBJZiBub25lIGlzIGdpdmVuLCB0aGUg ZXhpdCBkZXBlbmRlbmNpZXMgYXJlCisvLyBjYWxjdWxhdGVkIGZyb20gdGhlIGZpbmFsIGNvbmRp dGlvbmFsIGluIHRoZSBwYXRoLgogCiB2b2lkCiBwYXRoX3JhbmdlX3F1ZXJ5Ojpjb21wdXRlX3Jh bmdlcyAoY29uc3QgdmVjPGJhc2ljX2Jsb2NrPiAmcGF0aCwKLQkJCQkgIGNvbnN0IGJpdG1hcF9o ZWFkICppbXBvcnRzKQorCQkJCSAgY29uc3QgYml0bWFwX2hlYWQgKmRlcGVuZGVuY2llcykKIHsK ICAgaWYgKERFQlVHX1NPTFZFUikKICAgICBmcHJpbnRmIChkdW1wX2ZpbGUsICJcbj09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiIpOwpAQCAtNjE0LDEwICs2 MDksMTAgQEAgcGF0aF9yYW5nZV9xdWVyeTo6Y29tcHV0ZV9yYW5nZXMgKGNvbnN0IHZlYzxiYXNp Y19ibG9jaz4gJnBhdGgsCiAgIHNldF9wYXRoIChwYXRoKTsKICAgbV91bmRlZmluZWRfcGF0aCA9 IGZhbHNlOwogCi0gIGlmIChpbXBvcnRzKQotICAgIGJpdG1hcF9jb3B5IChtX2ltcG9ydHMsIGlt cG9ydHMpOworICBpZiAoZGVwZW5kZW5jaWVzKQorICAgIGJpdG1hcF9jb3B5IChtX2V4aXRfZGVw ZW5kZW5jaWVzLCBkZXBlbmRlbmNpZXMpOwogICBlbHNlCi0gICAgY29tcHV0ZV9pbXBvcnRzICht X2ltcG9ydHMsIG1fcGF0aCk7CisgICAgY29tcHV0ZV9leGl0X2RlcGVuZGVuY2llcyAobV9leGl0 X2RlcGVuZGVuY2llcywgbV9wYXRoKTsKIAogICBpZiAobV9yZXNvbHZlKQogICAgIGdldF9wYXRo X29yYWNsZSAoKS0+cmVzZXRfcGF0aCAoKTsKQEAgLTgwOSw3ICs4MDQsNyBAQCBwYXRoX3Jhbmdl X3F1ZXJ5Ojpjb21wdXRlX3BoaV9yZWxhdGlvbnMgKGJhc2ljX2Jsb2NrIGJiLCBiYXNpY19ibG9j ayBwcmV2KQogICAgICAgdHJlZSByZXN1bHQgPSBnaW1wbGVfcGhpX3Jlc3VsdCAocGhpKTsKICAg ICAgIHVuc2lnbmVkIG5hcmdzID0gZ2ltcGxlX3BoaV9udW1fYXJncyAocGhpKTsKIAotICAgICAg aWYgKCFpbXBvcnRfcCAocmVzdWx0KSkKKyAgICAgIGlmICghZXhpdF9kZXBlbmRlbmN5X3AgKHJl c3VsdCkpCiAJY29udGludWU7CiAKICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbmFyZ3M7 ICsraSkKZGlmZiAtLWdpdCBhL2djYy9naW1wbGUtcmFuZ2UtcGF0aC5oIGIvZ2NjL2dpbXBsZS1y YW5nZS1wYXRoLmgKaW5kZXggZTc4M2UwMGIyZjUuLjNjYjc5NGUzNGE5IDEwMDY0NAotLS0gYS9n Y2MvZ2ltcGxlLXJhbmdlLXBhdGguaAorKysgYi9nY2MvZ2ltcGxlLXJhbmdlLXBhdGguaApAQCAt MzUsOSArMzUsMTAgQEAgcHVibGljOgogICBwYXRoX3JhbmdlX3F1ZXJ5IChib29sIHJlc29sdmUg PSB0cnVlLCBjbGFzcyBnaW1wbGVfcmFuZ2VyICpyYW5nZXIgPSBOVUxMKTsKICAgdmlydHVhbCB+ cGF0aF9yYW5nZV9xdWVyeSAoKTsKICAgdm9pZCBjb21wdXRlX3JhbmdlcyAoY29uc3QgdmVjPGJh c2ljX2Jsb2NrPiAmLAotCQkgICAgICAgY29uc3QgYml0bWFwX2hlYWQgKmltcG9ydHMgPSBOVUxM KTsKKwkJICAgICAgIGNvbnN0IGJpdG1hcF9oZWFkICpkZXBlbmRlbmNpZXMgPSBOVUxMKTsKICAg dm9pZCBjb21wdXRlX3JhbmdlcyAoZWRnZSBlKTsKLSAgdm9pZCBjb21wdXRlX2ltcG9ydHMgKGJp dG1hcCBpbXBvcnRzLCBjb25zdCB2ZWM8YmFzaWNfYmxvY2s+ICYpOworICB2b2lkIGNvbXB1dGVf ZXhpdF9kZXBlbmRlbmNpZXMgKGJpdG1hcCBkZXBlbmRlbmNpZXMsCisJCQkJICBjb25zdCB2ZWM8 YmFzaWNfYmxvY2s+ICYpOwogICBib29sIHJhbmdlX29mX2V4cHIgKHZyYW5nZSAmciwgdHJlZSBu YW1lLCBnaW1wbGUgKiA9IE5VTEwpIG92ZXJyaWRlOwogICBib29sIHJhbmdlX29mX3N0bXQgKHZy YW5nZSAmciwgZ2ltcGxlICosIHRyZWUgbmFtZSA9IE5VTEwpIG92ZXJyaWRlOwogICBib29sIHVu cmVhY2hhYmxlX3BhdGhfcCAoKTsKQEAgLTY0LDggKzY1LDggQEAgcHJpdmF0ZToKICAgdm9pZCBj b21wdXRlX291dGdvaW5nX3JlbGF0aW9ucyAoYmFzaWNfYmxvY2sgYmIsIGJhc2ljX2Jsb2NrIG5l eHQpOwogICB2b2lkIGNvbXB1dGVfcGhpX3JlbGF0aW9ucyAoYmFzaWNfYmxvY2sgYmIsIGJhc2lj X2Jsb2NrIHByZXYpOwogICB2b2lkIG1heWJlX3JlZ2lzdGVyX3BoaV9yZWxhdGlvbiAoZ3BoaSAq LCBlZGdlIGUpOwotICBib29sIGFkZF90b19pbXBvcnRzICh0cmVlIG5hbWUsIGJpdG1hcCBpbXBv cnRzKTsKLSAgYm9vbCBpbXBvcnRfcCAodHJlZSBuYW1lKTsKKyAgYm9vbCBhZGRfdG9fZXhpdF9k ZXBlbmRlbmNpZXMgKHRyZWUgbmFtZSwgYml0bWFwIGRlcGVuZGVuY2llcyk7CisgIGJvb2wgZXhp dF9kZXBlbmRlbmN5X3AgKHRyZWUgbmFtZSk7CiAgIGJvb2wgc3NhX2RlZmluZWRfaW5fYmIgKHRy ZWUgbmFtZSwgYmFzaWNfYmxvY2sgYmIpOwogICBib29sIHJlbGF0aW9uc19tYXlfYmVfaW52YWxp ZGF0ZWQgKGVkZ2UpOwogCkBAIC04OSw3ICs5MCwxNSBAQCBwcml2YXRlOgogICAvLyBQYXRoIGJl aW5nIGFuYWx5emVkLgogICBhdXRvX3ZlYzxiYXNpY19ibG9jaz4gbV9wYXRoOwogCi0gIGF1dG9f Yml0bWFwIG1faW1wb3J0czsKKyAgLy8gVGhpcyBpcyBhIGxpc3Qgb2YgU1NBIG5hbWVzIHRoYXQg bWF5IGhhdmUgcmVsZXZhbnQgY29udGV4dAorICAvLyBpbmZvcm1hdGlvbiBmb3Igc29sdmluZyB0 aGUgZmluYWwgY29uZGl0aW9uYWwgYWxvbmcgdGhlIHBhdGguCisgIC8vIFJhbmdlcyBmb3IgdGhl c2UgU1NBIG5hbWVzIGFyZSBwcmUtY2FsY3VsYXRlZCBhbmQgY2FjaGVkIGR1cmluZyBhCisgIC8v IHRvcC1kb3duIHRyYXZlcnNhbCBvZiB0aGUgcGF0aCwgYW5kIGFyZSB0aGVuIHVzZWQgdG8gYW5z d2VyCisgIC8vIHF1ZXN0aW9ucyBhdCB0aGUgcGF0aCBleGl0LgorICBhdXRvX2JpdG1hcCBtX2V4 aXRfZGVwZW5kZW5jaWVzOworCisgIC8vIEEgcmFuZ2VyIHVzZWQgdG8gcmVzb2x2ZSByYW5nZXMg Zm9yIFNTQSBuYW1lcyB3aG9zZSB2YWx1ZXMgY29tZQorICAvLyBmcm9tIG91dHNpZGUgdGhlIHBh dGguCiAgIGdpbXBsZV9yYW5nZXIgKm1fcmFuZ2VyOwogCiAgIC8vIEN1cnJlbnQgcGF0aCBwb3Np dGlvbi4KLS0gCjIuMzcuMQoK --000000000000bf7c0b05e657eb3e--