From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from esa3.mentor.iphmx.com (esa3.mentor.iphmx.com [68.232.137.180]) by sourceware.org (Postfix) with ESMTPS id 6C8DC3858CDA; Mon, 5 Sep 2022 14:08:10 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.1 sourceware.org 6C8DC3858CDA Authentication-Results: sourceware.org; dmarc=none (p=none dis=none) header.from=codesourcery.com Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=mentor.com X-IronPort-AV: E=Sophos;i="5.93,291,1654588800"; d="scan'208";a="82353990" Received: from orw-gwy-01-in.mentorg.com ([192.94.38.165]) by esa3.mentor.iphmx.com with ESMTP; 05 Sep 2022 06:08:09 -0800 IronPort-SDR: NCLu45rxOv3l2Uit531hZ7NY5CzaIJj9zURfWBWlxNy2gCPdcym5EmHmGbhlS51Zb6/0//eZj0 mJdWill3cOghVSKp3lSfAVQnBNkIJjXanU/THSKiNRStrl2g/94CwKJFHEarphOEfgAYiLJ2wI wczhhBfrHK1UjwFDBIn7y4qPvV99RgQkCRmw1Ax/1eJpHxBg9/arrHfxMxbnfOFFKGD+6IFxQb zoSyVV8Wq5WytuQEgtg+md9zdMsO9/pFM0WWPiWz4iU/wBn6KxCKvQvA5xmPjziL7LT3AjAwqv 9w0= Content-Type: multipart/mixed; boundary="------------h6wDw00V4sCQ9iziEsH1fs7A" Message-ID: <84e92054-c87e-0d3e-9750-1b74d13e1539@codesourcery.com> Date: Mon, 5 Sep 2022 22:07:56 +0800 MIME-Version: 1.0 User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.13; rv:91.0) Gecko/20100101 Thunderbird/91.13.0 Subject: Re: [PATCH, OpenMP, Fortran] requires unified_shared_memory 2/2: insert USM allocators into libgfortran Content-Language: en-US From: Chung-Lin Tang To: gcc-patches , Fortran List , Tobias Burnus , Andrew Stubbs , Catherine Moore , Jakub Jelinek References: <81de6e4c-b8e1-9bdd-f84d-18a0c0b9806f@codesourcery.com> In-Reply-To: X-ClientProxiedBy: svr-orw-mbx-08.mgc.mentorg.com (147.34.90.208) To svr-orw-mbx-10.mgc.mentorg.com (147.34.90.210) X-Spam-Status: No, score=-11.2 required=5.0 tests=BAYES_00,GIT_PATCH_0,HEADER_FROM_DIFFERENT_DOMAINS,KAM_DMARC_STATUS,KAM_MANYTO,NICE_REPLY_A,SPF_HELO_PASS,SPF_PASS,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 List-Id: --------------h6wDw00V4sCQ9iziEsH1fs7A Content-Type: text/plain; charset="UTF-8"; format=flowed Content-Transfer-Encoding: 8bit On 2022/8/15 7:15 PM, Chung-Lin Tang wrote: > On 2022/8/15 7:06 PM, Chung-Lin Tang wrote: >> >> I know this is a big pile of yarn wrt how the main program/libgomp/libgfortran interacts, but it's >> finally working. Again tested without regressions. Preparing to commit to devel/omp/gcc-12, and seeking >> approval for mainline when the requires patches are in. > > Just realized that I don't have the new testcases added in this patch. > Will supplement them later :P Here's the USM allocator/libgfortran patch, with a libgomp.fortran testcase added. Thanks, Chung-Lin 2022-09-05 Chung-Lin Tang libgcc/ * Makefile.in (crtoffloadend$(objext)): Add $(PICFLAG) to compile rule. * offloadstuff.c (GOMP_offload_register_ver): Add declaration of weak symbol. (__OFFLOAD_TABLE__): Likewise. (init_non_offload): New function. libgfortran/ * gfortran.map (GFORTRAN_13): New namespace. (_gfortran_mem_allocators_init): New name inside GFORTRAN_13. * libgfortran.h (mem_allocators_init): New exported declaration. * runtime/main.c (do_init): Rename from init, add run-once guard code. (cleanup): Add run-once guard code. (GOMP_post_offload_register_callback): Declare weak symbol. (GOMP_pre_gomp_target_fini_callback): Likewise. (init): New constructor to register offload callbacks, or call do_init when not OpenMP. * runtime/memory.c (gfortran_malloc): New pointer variable. (gfortran_calloc): Likewise. (gfortran_realloc): Likewise. (gfortran_free): Likewise. (mem_allocators_init): New function. (xmalloc): Use gfortran_malloc. (xmallocarray): Use gfortran_malloc. (xcalloc): Use gfortran_calloc. (xrealloc): Use gfortran_realloc. (xfree): Use gfortran_free. libgomp/ * libgomp.map (GOMP_5.1.2): New version namespace. (GOMP_post_offload_register_callback): New name inside GOMP_5.1.2. (GOMP_pre_gomp_target_fini_callback): Likewise. (GOMP_DEFINE_CALLBACK_SET): Macro to define callback set. (post_offload_register): Define callback set for after offload image register. (pre_gomp_target_fini): Define callback set for before gomp_target_fini is called. (libgfortran_malloc_usm): New function. (libgfortran_calloc_usm): Likewise (libgfortran_realloc_usm): Likewise (libgfortran_free_usm): Likewise. (_gfortran_mem_allocators_init): Declare weak symbol. (gomp_libgfortran_omp_allocators_init): New function. (GOMP_offload_register_ver): Add handling of host_table == NULL, calling into libgfortran to set unified_shared_memory allocators, and execution of post_offload_register callbacks. (gomp_target_init): Register all pre_gomp_target_fini callbacks to run at end of main using atexit(). * testsuite/libgomp.fortran/target-unified_shared_memory-1.f90: New test. --------------h6wDw00V4sCQ9iziEsH1fs7A Content-Type: text/plain; charset="UTF-8"; name="fortran-usm-v2.patch" Content-Disposition: attachment; filename="fortran-usm-v2.patch" Content-Transfer-Encoding: base64 ZGlmZiAtLWdpdCBhL2xpYmdjYy9NYWtlZmlsZS5pbiBiL2xpYmdjYy9NYWtlZmlsZS5pbgpp bmRleCAwOWIzZWM4YmMyZS4uNzA3MjBjYzkxMGMgMTAwNjQ0Ci0tLSBhL2xpYmdjYy9NYWtl ZmlsZS5pbgorKysgYi9saWJnY2MvTWFrZWZpbGUuaW4KQEAgLTEwNDUsOCArMTA0NSw5IEBA IGNydGJlZ2luVCQob2JqZXh0KTogJChzcmNkaXIpL2NydHN0dWZmLmMKIGNydG9mZmxvYWRi ZWdpbiQob2JqZXh0KTogJChzcmNkaXIpL29mZmxvYWRzdHVmZi5jCiAJJChjcnRfY29tcGls ZSkgJChDUlRTVFVGRl9UX0NGTEFHUykgLWMgJDwgLURDUlRfQkVHSU4KIAorIyBjcnRvZmZs b2FkZW5kIGNvbnRhaW5zIGEgY29uc3RydWN0b3Igd2l0aCBjYWxscyB0byBsaWJnb21wLCBz byBidWlsZCBhcyBQSUMuCiBjcnRvZmZsb2FkZW5kJChvYmpleHQpOiAkKHNyY2Rpcikvb2Zm bG9hZHN0dWZmLmMKLQkkKGNydF9jb21waWxlKSAkKENSVFNUVUZGX1RfQ0ZMQUdTKSAtYyAk PCAtRENSVF9FTkQKKwkkKGNydF9jb21waWxlKSAkKENSVFNUVUZGX1RfQ0ZMQUdTKSAkKFBJ Q0ZMQUcpIC1jICQ8IC1EQ1JUX0VORAogCiBjcnRvZmZsb2FkdGFibGUkKG9iamV4dCk6ICQo c3JjZGlyKS9vZmZsb2Fkc3R1ZmYuYwogCSQoY3J0X2NvbXBpbGUpICQoQ1JUU1RVRkZfVF9D RkxBR1MpIC1jICQ8IC1EQ1JUX1RBQkxFCmRpZmYgLS1naXQgYS9saWJnY2Mvb2ZmbG9hZHN0 dWZmLmMgYi9saWJnY2Mvb2ZmbG9hZHN0dWZmLmMKaW5kZXggMTBlMWZlMTljOGUuLjJlZGI2 ODEwMDIxIDEwMDY0NAotLS0gYS9saWJnY2Mvb2ZmbG9hZHN0dWZmLmMKKysrIGIvbGliZ2Nj L29mZmxvYWRzdHVmZi5jCkBAIC02Myw2ICs2MywxOSBAQCBjb25zdCB2b2lkICpjb25zdCBf X29mZmxvYWRfdmFyc19lbmRbMF0KICAgX19hdHRyaWJ1dGVfXyAoKF9fdXNlZF9fLCB2aXNp YmlsaXR5ICgiaGlkZGVuIiksCiAJCSAgc2VjdGlvbiAoT0ZGTE9BRF9WQVJfVEFCTEVfU0VD VElPTl9OQU1FKSkpID0geyB9OwogCitleHRlcm4gdm9pZCBHT01QX29mZmxvYWRfcmVnaXN0 ZXJfdmVyICh1bnNpZ25lZCwgY29uc3Qgdm9pZCAqLCBpbnQsCisJCQkJICAgICAgIGNvbnN0 IHZvaWQgKik7CitleHRlcm4gY29uc3Qgdm9pZCAqY29uc3QgX19PRkZMT0FEX1RBQkxFX19b MF0gX19hdHRyaWJ1dGVfXyAoKHdlYWspKTsKK3N0YXRpYyB2b2lkIF9fYXR0cmlidXRlX18o KGNvbnN0cnVjdG9yKSkKK2luaXRfbm9uX29mZmxvYWQgKHZvaWQpCit7CisgIC8qIElmIGFu IE9wZW5NUCBwcm9ncmFtIGhhcyBubyBvZmZsb2FkaW5nLCBwb3N0LW9mZmxvYWRfcmVnaXN0 ZXIgY2FsbGJhY2tzCisgICAgIHRoYXQgbmVlZCB0byBydW4gd2lsbCByZXF1aXJlIGEgY2Fs bCB0byBHT01QX29mZmxvYWRfcmVnaXN0ZXJfdmVyLCBpbgorICAgICBvcmRlciB0byBwcm9w ZXJseSB0cmlnZ2VyIHRob3NlIGNhbGxiYWNrcyBkdXJpbmcgaW5pdC4gICovCisgIGlmIChf X09GRkxPQURfVEFCTEVfXyA9PSBOVUxMKQorICAgIEdPTVBfb2ZmbG9hZF9yZWdpc3Rlcl92 ZXIgKDAsIE5VTEwsIDAsIE5VTEwpOworfQorCiAjZWxpZiBkZWZpbmVkIENSVF9UQUJMRQog CiBleHRlcm4gY29uc3Qgdm9pZCAqY29uc3QgX19vZmZsb2FkX2Z1bmNfdGFibGVbXTsKZGlm ZiAtLWdpdCBhL2xpYmdmb3J0cmFuL2dmb3J0cmFuLm1hcCBiL2xpYmdmb3J0cmFuL2dmb3J0 cmFuLm1hcAppbmRleCBlMGU3OTVjM2Q0OC4uNTVkMmE1MjlhY2QgMTAwNjQ0Ci0tLSBhL2xp Ymdmb3J0cmFuL2dmb3J0cmFuLm1hcAorKysgYi9saWJnZm9ydHJhbi9nZm9ydHJhbi5tYXAK QEAgLTE3NTksMyArMTc1OSw4IEBAIEdGT1JUUkFOXzEyIHsKICAgX2dmb3J0cmFuX3RyYW5z ZmVyX3JlYWwxMjhfd3JpdGU7CiAjZW5kaWYKIH0gR0ZPUlRSQU5fMTAuMjsKKworR0ZPUlRS QU5fMTMgeworICBnbG9iYWw6CisgIF9nZm9ydHJhbl9tZW1fYWxsb2NhdG9yc19pbml0Owor fSBHRk9SVFJBTl8xMjsKZGlmZiAtLWdpdCBhL2xpYmdmb3J0cmFuL2xpYmdmb3J0cmFuLmgg Yi9saWJnZm9ydHJhbi9saWJnZm9ydHJhbi5oCmluZGV4IDBiODkzYTUxODUxLi5lNTE4YjM5 ODljZiAxMDA2NDQKLS0tIGEvbGliZ2ZvcnRyYW4vbGliZ2ZvcnRyYW4uaAorKysgYi9saWJn Zm9ydHJhbi9saWJnZm9ydHJhbi5oCkBAIC04NzQsNiArODc0LDExIEBAIGludGVybmFsX3By b3RvKHhyZWFsbG9jKTsKIGV4dGVybiB2b2lkIHhmcmVlICh2b2lkICopOwogaW50ZXJuYWxf cHJvdG8oeGZyZWUpOwogCisjaWZuZGVmIExJQkdGT1JfTUlOSU1BTAorZXh0ZXJuIHZvaWQg bWVtX2FsbG9jYXRvcnNfaW5pdCAodm9pZCAqLCB2b2lkICosIHZvaWQgKiwgdm9pZCAqKTsK K2V4cG9ydF9wcm90byhtZW1fYWxsb2NhdG9yc19pbml0KTsKKyNlbmRpZgorCiAvKiBlbnZp cm9uLmMgKi8KIAogZXh0ZXJuIHZvaWQgaW5pdF92YXJpYWJsZXMgKHZvaWQpOwpkaWZmIC0t Z2l0IGEvbGliZ2ZvcnRyYW4vcnVudGltZS9tYWluLmMgYi9saWJnZm9ydHJhbi9ydW50aW1l L21haW4uYwppbmRleCA1MTYyYThmZWNiMC4uOGFhNjg4ZTFkMGYgMTAwNjQ0Ci0tLSBhL2xp Ymdmb3J0cmFuL3J1bnRpbWUvbWFpbi5jCisrKyBiL2xpYmdmb3J0cmFuL3J1bnRpbWUvbWFp bi5jCkBAIC02MSw5ICs2MSwxNiBAQCBnZXRfYXJncyAoaW50ICphcmdjLCBjaGFyICoqKmFy Z3YpCiAKIC8qIEluaXRpYWxpemUgdGhlIHJ1bnRpbWUgbGlicmFyeS4gICovCiAKLXN0YXRp YyB2b2lkIF9fYXR0cmlidXRlX18oKGNvbnN0cnVjdG9yKSkKLWluaXQgKHZvaWQpCitzdGF0 aWMgdm9pZAorZG9faW5pdCAodm9pZCkKIHsKKyNpZm5kZWYgTElCR0ZPUl9NSU5JTUFMCisg IHN0YXRpYyBib29sIGRvX2luaXRfcmFuID0gZmFsc2U7CisgIGlmIChkb19pbml0X3JhbikK KyAgICByZXR1cm47CisgIGRvX2luaXRfcmFuID0gdHJ1ZTsKKyNlbmRpZgorCiAgIC8qIE11 c3QgYmUgZmlyc3QgKi8KICAgaW5pdF92YXJpYWJsZXMgKCk7CiAKQEAgLTgyLDUgKzg5LDM3 IEBAIGluaXQgKHZvaWQpCiBzdGF0aWMgdm9pZCBfX2F0dHJpYnV0ZV9fKChkZXN0cnVjdG9y KSkKIGNsZWFudXAgKHZvaWQpCiB7CisjaWZuZGVmIExJQkdGT1JfTUlOSU1BTAorICBzdGF0 aWMgYm9vbCBjbGVhbnVwX3JhbiA9IGZhbHNlOworICBpZiAoY2xlYW51cF9yYW4pCisgICAg cmV0dXJuOworICBjbGVhbnVwX3JhbiA9IHRydWU7CisjZW5kaWYKKwogICBjbG9zZV91bml0 cyAoKTsKIH0KKworI2lmbmRlZiBMSUJHRk9SX01JTklNQUwKK2V4dGVybiB2b2lkIF9fYXR0 cmlidXRlX18oKHdlYWspKQorR09NUF9wb3N0X29mZmxvYWRfcmVnaXN0ZXJfY2FsbGJhY2sg KHZvaWQgKCpmdW5jKSh2b2lkKSk7CisKK2V4dGVybiB2b2lkIF9fYXR0cmlidXRlX18oKHdl YWspKQorR09NUF9wcmVfZ29tcF90YXJnZXRfZmluaV9jYWxsYmFjayAodm9pZCAoKmZ1bmMp KHZvaWQpKTsKKyNlbmRpZgorCitzdGF0aWMgdm9pZCBfX2F0dHJpYnV0ZV9fKChjb25zdHJ1 Y3RvcikpCitpbml0ICh2b2lkKQoreworI2lmbmRlZiBMSUJHRk9SX01JTklNQUwKKyAgaWYg KEdPTVBfcG9zdF9vZmZsb2FkX3JlZ2lzdGVyX2NhbGxiYWNrKQorICAgIHsKKyAgICAgIEdP TVBfcG9zdF9vZmZsb2FkX3JlZ2lzdGVyX2NhbGxiYWNrIChkb19pbml0KTsKKyAgICAgIEdP TVBfcHJlX2dvbXBfdGFyZ2V0X2ZpbmlfY2FsbGJhY2sgKGNsZWFudXApOworICAgICAgcmV0 dXJuOworICAgIH0KKyNlbmRpZgorCisgIC8qIElmIGxpYmdvbXAgaXMgbm90IHByZXNlbnQs IHRoZW4gd2UgY2FuIGdvIGFoZWFkIGFuZCBjYWxsIGRvX2luaXQKKyAgICAgZGlyZWN0bHku ICAqLworICBkb19pbml0ICgpOworfQpkaWZmIC0tZ2l0IGEvbGliZ2ZvcnRyYW4vcnVudGlt ZS9tZW1vcnkuYyBiL2xpYmdmb3J0cmFuL3J1bnRpbWUvbWVtb3J5LmMKaW5kZXggY2JjZWM3 YzkyODEuLjhiZjViNjA1Zjg2IDEwMDY0NAotLS0gYS9saWJnZm9ydHJhbi9ydW50aW1lL21l bW9yeS5jCisrKyBiL2xpYmdmb3J0cmFuL3J1bnRpbWUvbWVtb3J5LmMKQEAgLTI2LDYgKzI2 LDI4IEBAIHNlZSB0aGUgZmlsZXMgQ09QWUlORzMgYW5kIENPUFlJTkcuUlVOVElNRSByZXNw ZWN0aXZlbHkuICBJZiBub3QsIHNlZQogI2luY2x1ZGUgImxpYmdmb3J0cmFuLmgiCiAjaW5j bHVkZSA8ZXJybm8uaD4KIAorI2lmbmRlZiBMSUJHRk9SX01JTklNQUwKK3N0YXRpYyB2b2lk ICogKCpnZm9ydHJhbl9tYWxsb2MpKHNpemVfdCkgPSBtYWxsb2M7CitzdGF0aWMgdm9pZCAq ICgqZ2ZvcnRyYW5fY2FsbG9jKShzaXplX3QsIHNpemVfdCkgPSBjYWxsb2M7CitzdGF0aWMg dm9pZCAqICgqZ2ZvcnRyYW5fcmVhbGxvYykodm9pZCAqLCBzaXplX3QpID0gcmVhbGxvYzsK K3N0YXRpYyB2b2lkICgqZ2ZvcnRyYW5fZnJlZSkodm9pZCAqKSA9IGZyZWU7CisKK3ZvaWQK K21lbV9hbGxvY2F0b3JzX2luaXQgKHZvaWQgKm1hbGxvY19wdHIsIHZvaWQgKmNhbGxvY19w dHIsCisJCSAgICAgdm9pZCAqcmVhbGxvY19wdHIsIHZvaWQgKmZyZWVfcHRyKQoreworICBn Zm9ydHJhbl9tYWxsb2MgPSBtYWxsb2NfcHRyOworICBnZm9ydHJhbl9jYWxsb2MgPSBjYWxs b2NfcHRyOworICBnZm9ydHJhbl9yZWFsbG9jID0gcmVhbGxvY19wdHI7CisgIGdmb3J0cmFu X2ZyZWUgPSBmcmVlX3B0cjsKK30KKworI2Vsc2UKKyNkZWZpbmUgZ2ZvcnRyYW5fbWFsbG9j IG1hbGxvYworI2RlZmluZSBnZm9ydHJhbl9jYWxsb2MgY2FsbG9jCisjZGVmaW5lIGdmb3J0 cmFuX3JlYWxsb2MgcmVhbGxvYworI2RlZmluZSBnZm9ydHJhbl9mcmVlIGZyZWUKKyNlbmRp ZgogCiB2b2lkICoKIHhtYWxsb2MgKHNpemVfdCBuKQpAQCAtMzUsNyArNTcsNyBAQCB4bWFs bG9jIChzaXplX3QgbikKICAgaWYgKG4gPT0gMCkKICAgICBuID0gMTsKIAotICBwID0gbWFs bG9jIChuKTsKKyAgcCA9IGdmb3J0cmFuX21hbGxvYyAobik7CiAKICAgaWYgKHAgPT0gTlVM TCkKICAgICBvc19lcnJvciAoIk1lbW9yeSBhbGxvY2F0aW9uIGZhaWxlZCIpOwpAQCAtNTcs NyArNzksNyBAQCB4bWFsbG9jYXJyYXkgKHNpemVfdCBubWVtYiwgc2l6ZV90IHNpemUpCiAg ICAgICBvc19lcnJvciAoIkludGVnZXIgb3ZlcmZsb3cgaW4geG1hbGxvY2FycmF5Iik7CiAg ICAgfQogCi0gIHAgPSBtYWxsb2MgKHByb2QpOworICBwID0gZ2ZvcnRyYW5fbWFsbG9jIChw cm9kKTsKIAogICBpZiAoIXApCiAgICAgb3NfZXJyb3IgKCJNZW1vcnkgYWxsb2NhdGlvbiBm YWlsZWQgaW4geG1hbGxvY2FycmF5Iik7CkBAIC03Myw3ICs5NSw3IEBAIHhjYWxsb2MgKHNp emVfdCBubWVtYiwgc2l6ZV90IHNpemUpCiAgIGlmICghbm1lbWIgfHwgIXNpemUpCiAgICAg bm1lbWIgPSBzaXplID0gMTsKIAotICB2b2lkICpwID0gY2FsbG9jIChubWVtYiwgc2l6ZSk7 CisgIHZvaWQgKnAgPSBnZm9ydHJhbl9jYWxsb2MgKG5tZW1iLCBzaXplKTsKICAgaWYgKCFw KQogICAgIG9zX2Vycm9yICgiQWxsb2NhdGluZyBjbGVhcmVkIG1lbW9yeSBmYWlsZWQiKTsK IApAQCAtODYsNyArMTA4LDcgQEAgeHJlYWxsb2MgKHZvaWQgKnB0ciwgc2l6ZV90IHNpemUp CiAgIGlmIChzaXplID09IDApCiAgICAgc2l6ZSA9IDE7CiAKLSAgdm9pZCAqbmV3cCA9IHJl YWxsb2MgKHB0ciwgc2l6ZSk7CisgIHZvaWQgKm5ld3AgPSBnZm9ydHJhbl9yZWFsbG9jIChw dHIsIHNpemUpOwogICBpZiAoIW5ld3ApCiAgICAgb3NfZXJyb3IgKCJNZW1vcnkgYWxsb2Nh dGlvbiBmYWlsdXJlIGluIHhyZWFsbG9jIik7CiAKQEAgLTk2LDUgKzExOCw1IEBAIHhyZWFs bG9jICh2b2lkICpwdHIsIHNpemVfdCBzaXplKQogdm9pZAogeGZyZWUgKHZvaWQgKnB0cikK IHsKLSAgZnJlZSAocHRyKTsKKyAgZ2ZvcnRyYW5fZnJlZSAocHRyKTsKIH0KZGlmZiAtLWdp dCBhL2xpYmdvbXAvbGliZ29tcC5tYXAgYi9saWJnb21wL2xpYmdvbXAubWFwCmluZGV4IDVh ZjVjMmQ4OTI5Li5jM2FmNzVjYzgwMCAxMDA2NDQKLS0tIGEvbGliZ29tcC9saWJnb21wLm1h cAorKysgYi9saWJnb21wL2xpYmdvbXAubWFwCkBAIC02MjQsMyArNjI0LDkgQEAgR09NUF9Q TFVHSU5fMS4zIHsKIAlHT01QX1BMVUdJTl9nb2FjY19wcm9maWxpbmdfZGlzcGF0Y2g7CiAJ R09NUF9QTFVHSU5fZ29hY2NfdGhyZWFkOwogfSBHT01QX1BMVUdJTl8xLjI7CisKK0dPTVBf NS4xLjIgeworICBnbG9iYWw6CisJR09NUF9wb3N0X29mZmxvYWRfcmVnaXN0ZXJfY2FsbGJh Y2s7CisJR09NUF9wcmVfZ29tcF90YXJnZXRfZmluaV9jYWxsYmFjazsKK30gR09NUF81LjEu MTsKZGlmZiAtLWdpdCBhL2xpYmdvbXAvdGFyZ2V0LmMgYi9saWJnb21wL3RhcmdldC5jCmlu ZGV4IDk5N2IyYWEyZjgwLi42YTVjMGJiMWIzNiAxMDA2NDQKLS0tIGEvbGliZ29tcC90YXJn ZXQuYworKysgYi9saWJnb21wL3RhcmdldC5jCkBAIC0yNTIyLDYgKzI1MjIsNzAgQEAgZ29t cF9yZXF1aXJlc190b19uYW1lIChjaGFyICpidWYsIHNpemVfdCBzaXplLCBpbnQgcmVxdWly ZXNfbWFzaykKIAkJICAgKHAgPT0gYnVmID8gIiIgOiAiLCAiKSk7CiB9CiAKKy8qIE1hY3Jv IHRvIGRlZmluZSBhIGNhbGxiYWNrIHNldCB3aXRoIGEgbmFtZSwgYW5kIHJvdXRpbmUgdG8g cmVnaXN0ZXIKKyAgIGEgY2FsbGJhY2sgZnVuY3Rpb24gaW50byBzZXQuICAqLworI2RlZmlu ZSBHT01QX0RFRklORV9DQUxMQkFDS19TRVQobmFtZSkJCQkJXAorICBzdGF0aWMgdW5zaWdu ZWQgaW50IG51bV8gIyMgbmFtZSAjIyBfY2FsbGJhY2tzID0gMDsJCVwKKyAgc3RhdGljIHZv aWQgKCpuYW1lICMjIF9jYWxsYmFja3NbNF0pKHZvaWQpOwkJCVwKKyAgdm9pZCBHT01QXyAj IyBuYW1lICMjIF9jYWxsYmFjayAodm9pZCAoKmZuKSh2b2lkKSkJCVwKKyAgewkJCQkJCQkJ XAorICAgIGlmIChudW1fICMjIG5hbWUgIyMgX2NhbGxiYWNrcwkJCQlcCisJPCAoc2l6ZW9m IChuYW1lICMjIF9jYWxsYmFja3MpCQkJCVwKKwkgICAvIHNpemVvZiAobmFtZSAjIyBfY2Fs bGJhY2tzWzBdKSkpCQkJXAorICAgICAgewkJCQkJCQkJXAorCW5hbWUgIyMgX2NhbGxiYWNr c1tudW1fICMjIG5hbWUgIyMgX2NhbGxiYWNrc10gPSBmbjsJXAorCW51bV8gIyMgbmFtZSAj IyBfY2FsbGJhY2tzICs9IDE7CQkJXAorICAgICAgfQkJCQkJCQkJXAorICB9CitHT01QX0RF RklORV9DQUxMQkFDS19TRVQocG9zdF9vZmZsb2FkX3JlZ2lzdGVyKQorR09NUF9ERUZJTkVf Q0FMTEJBQ0tfU0VUKHByZV9nb21wX3RhcmdldF9maW5pKQorI3VuZGVmIEdPTVBfREVGSU5F X0NBTExCQUNLX1NFVAorCisvKiBSb3V0aW5lcyB0byBpbnNlcnQgaW50byBsaWJnZm9ydHJh biwgdW5kZXIgdW5pZmllZF9zaGFyZWRfbWVtb3J5LiAgKi8KK3N0YXRpYyB2b2lkICoKK2xp Ymdmb3J0cmFuX21hbGxvY191c20gKHNpemVfdCBzaXplKQoreworICByZXR1cm4gb21wX2Fs bG9jIChzaXplLCBvbXB4X3VuaWZpZWRfc2hhcmVkX21lbV9hbGxvYyk7Cit9CisKK3N0YXRp YyB2b2lkICoKK2xpYmdmb3J0cmFuX2NhbGxvY191c20gKHNpemVfdCBuLCBzaXplX3Qgc2l6 ZSkKK3sKKyAgcmV0dXJuIG9tcF9jYWxsb2MgKG4sIHNpemUsIG9tcHhfdW5pZmllZF9zaGFy ZWRfbWVtX2FsbG9jKTsKK30KKworc3RhdGljIHZvaWQgKgorbGliZ2ZvcnRyYW5fcmVhbGxv Y191c20gKHZvaWQgKnB0ciwgc2l6ZV90IHNpemUpCit7CisgIHJldHVybiBvbXBfcmVhbGxv YyAocHRyLCBzaXplLCBvbXB4X3VuaWZpZWRfc2hhcmVkX21lbV9hbGxvYywKKwkJICAgICAg b21weF91bmlmaWVkX3NoYXJlZF9tZW1fYWxsb2MpOworfQorCitzdGF0aWMgdm9pZAorbGli Z2ZvcnRyYW5fZnJlZV91c20gKHZvaWQgKnB0cikKK3sKKyAgb21wX2ZyZWUgKHB0ciwgb21w eF91bmlmaWVkX3NoYXJlZF9tZW1fYWxsb2MpOworfQorCitleHRlcm4gdm9pZCBfX2F0dHJp YnV0ZV9fKCh3ZWFrKSkKK19nZm9ydHJhbl9tZW1fYWxsb2NhdG9yc19pbml0ICh2b2lkICos IHZvaWQgKiwgdm9pZCAqLCB2b2lkICopOworCitzdGF0aWMgdm9pZAorZ29tcF9saWJnZm9y dHJhbl9vbXBfYWxsb2NhdG9yc19pbml0IChpbnQgb21wX3JlcXVpcmVzX21hc2spCit7Cisg IHN0YXRpYyBib29sIGluaXQgPSBmYWxzZTsKKyAgaWYgKGluaXQpCisgICAgcmV0dXJuOwor ICBpbml0ID0gdHJ1ZTsKKworICBpZiAoKG9tcF9yZXF1aXJlc19tYXNrICYgR09NUF9SRVFV SVJFU19VTklGSUVEX1NIQVJFRF9NRU1PUlkpCisgICAgICAmJiBfZ2ZvcnRyYW5fbWVtX2Fs bG9jYXRvcnNfaW5pdCAhPSBOVUxMKQorICAgIF9nZm9ydHJhbl9tZW1fYWxsb2NhdG9yc19p bml0IChsaWJnZm9ydHJhbl9tYWxsb2NfdXNtLAorCQkJCSAgIGxpYmdmb3J0cmFuX2NhbGxv Y191c20sCisJCQkJICAgbGliZ2ZvcnRyYW5fcmVhbGxvY191c20sCisJCQkJICAgbGliZ2Zv cnRyYW5fZnJlZV91c20pOworfQorCiAvKiBUaGlzIGZ1bmN0aW9uIHNob3VsZCBiZSBjYWxs ZWQgZnJvbSBldmVyeSBvZmZsb2FkIGltYWdlIHdoaWxlIGxvYWRpbmcuCiAgICBJdCBnZXRz IHRoZSBkZXNjcmlwdG9yIG9mIHRoZSBob3N0IGZ1bmMgYW5kIHZhciB0YWJsZXMgSE9TVF9U QUJMRSwgVFlQRSBvZgogICAgdGhlIHRhcmdldCwgYW5kIERBVEEuICAqLwpAQCAtMjUzMiw2 ICsyNTk2LDkgQEAgR09NUF9vZmZsb2FkX3JlZ2lzdGVyX3ZlciAodW5zaWduZWQgdmVyc2lv biwgY29uc3Qgdm9pZCAqaG9zdF90YWJsZSwKIHsKICAgaW50IGk7CiAKKyAgaWYgKGhvc3Rf dGFibGUgPT0gTlVMTCkKKyAgICBnb3RvIGVuZDsKKwogICBpZiAoR09NUF9WRVJTSU9OX0xJ QiAodmVyc2lvbikgPiBHT01QX1ZFUlNJT04pCiAgICAgZ29tcF9mYXRhbCAoIkxpYnJhcnkg dG9vIG9sZCBmb3Igb2ZmbG9hZCAodmVyc2lvbiAldSA8ICV1KSIsCiAJCUdPTVBfVkVSU0lP TiwgR09NUF9WRVJTSU9OX0xJQiAodmVyc2lvbikpOwpAQCAtMjU5OCw2ICsyNjY1LDE0IEBA IEdPTVBfb2ZmbG9hZF9yZWdpc3Rlcl92ZXIgKHVuc2lnbmVkIHZlcnNpb24sIGNvbnN0IHZv aWQgKmhvc3RfdGFibGUsCiAKICAgbnVtX29mZmxvYWRfaW1hZ2VzKys7CiAgIGdvbXBfbXV0 ZXhfdW5sb2NrICgmcmVnaXN0ZXJfbG9jayk7CisKKyAgLyogQ2FsbCBpbnRvIGxpYmdmb3J0 cmFuIHRvIGluaXRpYWxpemUgT3Blbk1QIG1lbW9yeSBhbGxvY2F0b3JzLiAgKi8KKyAgZ29t cF9saWJnZm9ydHJhbl9vbXBfYWxsb2NhdG9yc19pbml0IChvbXBfcmVxdWlyZXNfbWFzayk7 CisKKyBlbmQ6CisgIGZvciAoaW50IGkgPSAwOyBpIDwgbnVtX3Bvc3Rfb2ZmbG9hZF9yZWdp c3Rlcl9jYWxsYmFja3M7IGkrKykKKyAgICBwb3N0X29mZmxvYWRfcmVnaXN0ZXJfY2FsbGJh Y2tzW2ldICgpOworICBudW1fcG9zdF9vZmZsb2FkX3JlZ2lzdGVyX2NhbGxiYWNrcyA9IDA7 CiB9CiAKIC8qIExlZ2FjeSBlbnRyeSBwb2ludC4gICovCkBAIC0yNzEwLDcgKzI3ODUsNyBA QCBnb21wX3VubG9hZF9kZXZpY2UgKHN0cnVjdCBnb21wX2RldmljZV9kZXNjciAqZGV2aWNl cCkKICAgaWYgKGRldmljZXAtPnN0YXRlID09IEdPTVBfREVWSUNFX0lOSVRJQUxJWkVEKQog ICAgIHsKICAgICAgIHVuc2lnbmVkIGk7Ci0gICAgICAKKwogICAgICAgLyogVW5sb2FkIGZy b20gZGV2aWNlIGFsbCBpbWFnZXMgcmVnaXN0ZXJlZCBhdCB0aGUgbW9tZW50LiAgKi8KICAg ICAgIGZvciAoaSA9IDA7IGkgPCBudW1fb2ZmbG9hZF9pbWFnZXM7IGkrKykKIAl7CkBAIC00 NTcwLDYgKzQ2NDUsMTMgQEAgZ29tcF90YXJnZXRfaW5pdCAodm9pZCkKICAgZGV2aWNlcyA9 IGRldnM7CiAgIGlmIChhdGV4aXQgKGdvbXBfdGFyZ2V0X2ZpbmkpICE9IDApCiAgICAgZ29t cF9mYXRhbCAoImF0ZXhpdCBmYWlsZWQiKTsKKworICAvKiBSZWdpc3RlciAncHJlX2dvbXBf dGFyZ2V0X2ZpbmknIGNhbGxiYWNrcyB0byBydW4gYmVmb3JlIGdvbXBfdGFyZ2V0X2ZpbmkK KyAgICAgZHVyaW5nIGZpbmFsaXphdGlvbi4gICovCisgIGZvciAoaW50IGkgPSAwOyBpIDwg bnVtX3ByZV9nb21wX3RhcmdldF9maW5pX2NhbGxiYWNrczsgaSsrKQorICAgIGlmIChhdGV4 aXQgKHByZV9nb21wX3RhcmdldF9maW5pX2NhbGxiYWNrc1tpXSkgIT0gMCkKKyAgICAgIGdv bXBfZmF0YWwgKCJhdGV4aXQgZmFpbGVkIik7CisgIG51bV9wcmVfZ29tcF90YXJnZXRfZmlu aV9jYWxsYmFja3MgPSAwOwogfQogCiAjZWxzZSAvKiBQTFVHSU5fU1VQUE9SVCAqLwpkaWZm IC0tZ2l0IGEvbGliZ29tcC90ZXN0c3VpdGUvbGliZ29tcC5mb3J0cmFuL3RhcmdldC11bmlm aWVkX3NoYXJlZF9tZW1vcnktMS5mOTAgYi9saWJnb21wL3Rlc3RzdWl0ZS9saWJnb21wLmZv cnRyYW4vdGFyZ2V0LXVuaWZpZWRfc2hhcmVkX21lbW9yeS0xLmY5MApuZXcgZmlsZSBtb2Rl IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uZjgyYjFjNzUyN2MKLS0tIC9kZXYvbnVsbAor KysgYi9saWJnb21wL3Rlc3RzdWl0ZS9saWJnb21wLmZvcnRyYW4vdGFyZ2V0LXVuaWZpZWRf c2hhcmVkX21lbW9yeS0xLmY5MApAQCAtMCwwICsxLDEzIEBACishIHsgZGctZG8gcnVuIH0K KworcHJvZ3JhbSByZXF1aXJlc191bmlmaWVkX3NoYXJlZF9tZW1vcnkKKyAgY2hhcmFjdGVy KDMyKSA6OiBzdHIKKyAgISRvbXAgcmVxdWlyZXMgdW5pZmllZF9zaGFyZWRfbWVtb3J5CisK KyAgc3RyID0gdHJpbSAoc3RyKQorCisgICEkb21wIHRhcmdldAorICBibG9jaworICBlbmQg YmxvY2sKKworZW5kIHByb2dyYW0gcmVxdWlyZXNfdW5pZmllZF9zaGFyZWRfbWVtb3J5Cg== --------------h6wDw00V4sCQ9iziEsH1fs7A--