From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.2 (2018-09-13) on dcvr.yhbt.net X-Spam-Level: X-Spam-Status: No, score=-4.1 required=3.0 tests=AWL,BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,MAILING_LIST_MULTI, SPF_HELO_PASS,SPF_PASS shortcircuit=no autolearn=ham autolearn_force=no version=3.4.2 Received: from sourceware.org (server2.sourceware.org [8.43.85.97]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256) (No client certificate requested) by dcvr.yhbt.net (Postfix) with ESMTPS id C4EA01F55B for ; Thu, 21 May 2020 11:11:56 +0000 (UTC) Received: from server2.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id A17E33972431; Thu, 21 May 2020 11:11:55 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org A17E33972431 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=sourceware.org; s=default; t=1590059515; bh=uPVjF0VhWMx2pKGSKBgon7C54KXEnSPWRvxaUtYAfyA=; h=References:In-Reply-To:Date:Subject:To:List-Id:List-Unsubscribe: List-Archive:List-Post:List-Help:List-Subscribe:From:Reply-To:Cc: From; b=eSrbiCfeKnzdFweoFrCAwqheViHmiEBj3THjIOa7RLnq8OWRuR+p8YOv91drmbhHo Kqmo484pRzlqvXh9UW55EkKy73xMXfwDjaIGgOCNN/2V6+7s5Gxy5I1uW1gex1ANEU +msJHGCziJIFXp61PmNu8hCD4IdNEBzKc1dD/5l8= Received: from mail-io1-xd43.google.com (mail-io1-xd43.google.com [IPv6:2607:f8b0:4864:20::d43]) by sourceware.org (Postfix) with ESMTPS id B11253858D34 for ; Thu, 21 May 2020 11:11:52 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.3.2 sourceware.org B11253858D34 Received: by mail-io1-xd43.google.com with SMTP id x5so6991300ioh.6 for ; Thu, 21 May 2020 04:11:52 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:mime-version:references:in-reply-to:from:date :message-id:subject:to:cc; bh=uPVjF0VhWMx2pKGSKBgon7C54KXEnSPWRvxaUtYAfyA=; b=fpa2/0wb0Jxq1QorbQu4G04gm7Dl9LG5AJb+1t2ZnZqLgl8pCChj3mx5EiYzj8Bm62 EYZJZ73CN3uXh8gBIWIB/vM1WCNSoeFXD4xUKrPW23h2Rq+B1R54wYdEvLqQGM+w0y5t aZQuN+09IPNDl4EtScoTntfGycw9FwOToXAIfPwuhHtVy/py0WfxpNVZ/X+DM6BwwngY 4GImAQmS3r5UBe3HLRATo5xO85uKpEQihbtlC2ZKJ9yKpDk+hIvgTQKPVbSUYJhKTf4z xX5dafgnQgYJ/SjF2cL1zEf23h1cgHy1GNW34i2wYsIHlvVZyY1/LwqS4P5BoLAOm3hX qW8g== X-Gm-Message-State: AOAM530UqnhEHvVXqe75zvc37C3t3TVKhXZ7ukMXtsEOO0jqYpf2s6HZ 5OZYsyM/cKKpFvHsjYUrK2J+MsS3XE5sVsTO7clAAfeS X-Google-Smtp-Source: ABdhPJxLwkZC+mWVLZFucDoLnUheQdDE+O5Ew/OM+bgR+SFyiB+dVdm7lqCd+Rhf/0mjuVAjREolimZvGjiAlf+BMAE= X-Received: by 2002:a6b:d10b:: with SMTP id l11mr7035397iob.51.1590059511870; Thu, 21 May 2020 04:11:51 -0700 (PDT) MIME-Version: 1.0 References: <20200505181605.22346-1-lukma@denx.de> <20200521122423.7d98dd96@jawa> In-Reply-To: <20200521122423.7d98dd96@jawa> Date: Thu, 21 May 2020 04:11:15 -0700 Message-ID: Subject: Re: [PATCH v3] y2038: Replace __clock_gettime with __clock_gettime64 To: Lukasz Majewski Content-Type: multipart/mixed; boundary="000000000000618e0805a6269416" X-BeenThere: libc-alpha@sourceware.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Libc-alpha mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , From: "H.J. Lu via Libc-alpha" Reply-To: "H.J. Lu" Cc: Florian Weimer , GNU C Library , Andreas Schwab , Alistair Francis , Joseph Myers Errors-To: libc-alpha-bounces@sourceware.org Sender: "Libc-alpha" --000000000000618e0805a6269416 Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable On Thu, May 21, 2020 at 3:24 AM Lukasz Majewski wrote: > > Hi "H.J. Lu", > > > On Tue, May 5, 2020 at 11:21 AM Lukasz Majewski wrote: > > > > > > The __clock_gettime internal function is not supporting 64 bit time > > > on architectures with __WORDSIZE =3D=3D 32 and __TIMESIZE !=3D 64 (li= ke > > > e.g. ARM 32 bit). > > > > > > The __clock_gettime64 function shall be used instead in the glibc > > > itself as it supports 64 bit time on those systems. > > > This patch does not bring any changes to systems with __WORDSIZE =3D= =3D > > > 64 as for them the __clock_gettime64 is aliased to __clock_gettime > > > (in ./include/time.h). > > > > > > --- > > > Changes for v3: > > > - Fix the commit message (add missing "function" after > > > __clock_gettime64) > > > - Refactor __nisfind_server() function to support 64 bit time > > > with struct timespec instead of struct timeval > > > - Change expires to __time64_t > > > > > > Changes for v2: > > > - Use only TIMESPEC_TO_TIMEVAL instead of > > > valid_timespec64_to_timeval in logout.c and logwtmp.c as it is > > > generic enough to also support struct __timespec64 conversion to > > > struct timeval --- > > > benchtests/bench-timing.h | 2 +- > > > include/random-bits.h | 4 ++-- > > > login/logout.c | 4 ++-- > > > login/logwtmp.c | 5 +++-- > > > nis/nis_call.c | 16 > > > +++++++--------- sysdeps/generic/hp-timing.h | > > > 4 ++-- sysdeps/generic/memusage.h | 4 ++-- > > > sysdeps/unix/sysv/linux/alpha/osf_gettimeofday.c | 4 ++-- > > > sysdeps/unix/sysv/linux/clock.c | 7 ++----- > > > 9 files changed, 23 insertions(+), 27 deletions(-) > > > > > > > Does this patch work with "make bench" when > > sysdeps/generic/hp-timing.h is used, like on arm? I got > > In file included from ./bench-timing.h:23, > > from ./bench-skeleton.c:25, > > from > > /export/build/gnu/tools-build/glibc-gitlab/build-x86_64-linux/benchtest= s/bench-rint.c:45: > > ./bench-skeleton.c: In function =E2=80=98main=E2=80=99: > > ../sysdeps/generic/hp-timing.h:37:23: error: storage size of =E2=80=98t= v=E2=80=99 > > isn=E2=80=99t known 37 | struct __timespec64 tv; \ > > | ^~ > > ./bench-timing.h:35:25: note: in expansion of macro =E2=80=98HP_TIMING_= NOW=E2=80=99 > > 35 | #define TIMING_NOW(var) HP_TIMING_NOW (var) > > | ^~~~~~~~~~~~~ > > ./bench-skeleton.c:82:8: note: in expansion of macro =E2=80=98TIMING_NO= W=E2=80=99 > > 82 | TIMING_NOW (start); > > | ^~~~~~~~~~ > > ../sysdeps/generic/hp-timing.h:38:3: error: implicit declaration of > > function =E2=80=98__clock_gettime64=E2=80=99; did you mean =E2=80=98clo= ck_gettime=E2=80=99? > > [-Werror=3Dimplicit-function-declaration] > > 38 | __clock_gettime64 (CLOCK_MONOTONIC, &tv); \ > > | ^~~~~~~~~~~~~~~~~ > > ./bench-timing.h:35:25: note: in expansion of macro =E2=80=98HP_TIMING_= NOW=E2=80=99 > > 35 | #define TIMING_NOW(var) HP_TIMING_NOW (var) > > | ^~~~~~~~~~~~~ > > ./bench-skeleton.c:82:8: note: in expansion of macro =E2=80=98TIMING_NO= W=E2=80=99 > > 82 | TIMING_NOW (start); > > | ^~~~~~~~~~ > > ../sysdeps/generic/hp-timing.h:37:23: error: unused variable =E2=80=98t= v=E2=80=99 > > [-Werror=3Dunused-variable] > > 37 | struct __timespec64 tv; \ > > | ^~ > > ./bench-timing.h:35:25: note: in expansion of macro =E2=80=98HP_TIMING_= NOW=E2=80=99 > > 35 | #define TIMING_NOW(var) HP_TIMING_NOW (var) > > | ^~~~~~~~~~~~~ > > ./bench-skeleton.c:82:8: note: in expansion of macro =E2=80=98TIMING_NO= W=E2=80=99 > > 82 | TIMING_NOW (start); > > | ^~~~~~~~~~ > > ../sysdeps/generic/hp-timing.h:37:23: error: storage size of =E2=80=98t= v=E2=80=99 > > isn=E2=80=99t known 37 | struct __timespec64 tv; \ > > | ^~ > > ./bench-timing.h:35:25: note: in expansion of macro =E2=80=98HP_TIMING_= NOW=E2=80=99 > > 35 | #define TIMING_NOW(var) HP_TIMING_NOW (var) > > | ^~~~~~~~~~~~~ > > ./bench-skeleton.c:86:8: note: in expansion of macro =E2=80=98TIMING_NO= W=E2=80=99 > > 86 | TIMING_NOW (end); > > | ^~~~~~~~~~ > > ../sysdeps/generic/hp-timing.h:37:23: error: unused variable =E2=80=98t= v=E2=80=99 > > [-Werror=3Dunused-variable] > > 37 | struct __timespec64 tv; \ > > | ^~ > > ./bench-timing.h:35:25: note: in expansion of macro =E2=80=98HP_TIMING_= NOW=E2=80=99 > > 35 | #define TIMING_NOW(var) HP_TIMING_NOW (var) > > | ^~~~~~~~~~~~~ > > ./bench-skeleton.c:86:8: note: in expansion of macro =E2=80=98TIMING_NO= W=E2=80=99 > > 86 | TIMING_NOW (end); > > | ^~~~~~~~~~ > > ../sysdeps/generic/hp-timing.h:37:23: error: storage size of =E2=80=98t= v=E2=80=99 > > isn=E2=80=99t known 37 | struct __timespec64 tv; \ > > | ^~ > > ./bench-timing.h:35:25: note: in expansion of macro =E2=80=98HP_TIMING_= NOW=E2=80=99 > > 35 | #define TIMING_NOW(var) HP_TIMING_NOW (var) > > | ^~~~~~~~~~~~~ > > ./bench-skeleton.c:90:8: note: in expansion of macro =E2=80=98TIMING_NO= W=E2=80=99 > > 90 | TIMING_NOW (start); > > | ^~~~~~~~~~ > > ../sysdeps/generic/hp-timing.h:37:23: error: unused variable =E2=80=98t= v=E2=80=99 > > [-Werror=3Dunused-variable] > > 37 | struct __timespec64 tv; \ > > | ^~ > > ./bench-timing.h:35:25: note: in expansion of macro =E2=80=98HP_TIMING_= NOW=E2=80=99 > > 35 | #define TIMING_NOW(var) HP_TIMING_NOW (var) > > | ^~~~~~~~~~~~~ > > ./bench-skeleton.c:90:8: note: in expansion of macro =E2=80=98TIMING_NO= W=E2=80=99 > > 90 | TIMING_NOW (start); > > | ^~~~~~~~~~ > > ../sysdeps/generic/hp-timing.h:37:23: error: storage size of =E2=80=98t= v=E2=80=99 > > isn=E2=80=99t known 37 | struct __timespec64 tv; \ > > | ^~ > > ./bench-timing.h:35:25: note: in expansion of macro =E2=80=98HP_TIMING_= NOW=E2=80=99 > > 35 | #define TIMING_NOW(var) HP_TIMING_NOW (var) > > | ^~~~~~~~~~~~~ > > ./bench-skeleton.c:94:8: note: in expansion of macro =E2=80=98TIMING_NO= W=E2=80=99 > > 94 | TIMING_NOW (end); > > | ^~~~~~~~~~ > > ../sysdeps/generic/hp-timing.h:37:23: error: unused variable =E2=80=98t= v=E2=80=99 > > [-Werror=3Dunused-variable] > > 37 | struct __timespec64 tv; \ > > | ^~ > > ./bench-timing.h:35:25: note: in expansion of macro =E2=80=98HP_TIMING_= NOW=E2=80=99 > > 35 | #define TIMING_NOW(var) HP_TIMING_NOW (var) > > | ^~~~~~~~~~~~~ > > ./bench-skeleton.c:94:8: note: in expansion of macro =E2=80=98TIMING_NO= W=E2=80=99 > > 94 | TIMING_NOW (end); > > | ^~~~~~~~~~ > > ../sysdeps/generic/hp-timing.h:37:23: error: storage size of =E2=80=98t= v=E2=80=99 > > isn=E2=80=99t known 37 | struct __timespec64 tv; \ > > | ^~ > > ./bench-timing.h:35:25: note: in expansion of macro =E2=80=98HP_TIMING_= NOW=E2=80=99 > > 35 | #define TIMING_NOW(var) HP_TIMING_NOW (var) > > | ^~~~~~~~~~~~~ > > ./bench-skeleton.c:103:3: note: in expansion of macro =E2=80=98TIMING_N= OW=E2=80=99 > > 103 | TIMING_NOW (start); > > | ^~~~~~~~~~ > > ../sysdeps/generic/hp-timing.h:37:23: error: unused variable =E2=80=98t= v=E2=80=99 > > [-Werror=3Dunused-variable] > > 37 | struct __timespec64 tv; \ > > | ^~ > > ./bench-timing.h:35:25: note: in expansion of macro =E2=80=98HP_TIMING_= NOW=E2=80=99 > > 35 | #define TIMING_NOW(var) HP_TIMING_NOW (var) > > | ^~~~~~~~~~~~~ > > ./bench-skeleton.c:103:3: note: in expansion of macro =E2=80=98TIMING_N= OW=E2=80=99 > > 103 | TIMING_NOW (start); > > | ^~~~~~~~~~ > > ../sysdeps/generic/hp-timing.h:37:23: error: storage size of =E2=80=98t= v=E2=80=99 > > isn=E2=80=99t known 37 | struct __timespec64 tv; \ > > | ^~ > > ./bench-timing.h:35:25: note: in expansion of macro =E2=80=98HP_TIMING_= NOW=E2=80=99 > > 35 | #define TIMING_NOW(var) HP_TIMING_NOW (var) > > | ^~~~~~~~~~~~~ > > ./bench-skeleton.c:106:3: note: in expansion of macro =E2=80=98TIMING_N= OW=E2=80=99 > > 106 | TIMING_NOW (end); > > | ^~~~~~~~~~ > > ../sysdeps/generic/hp-timing.h:37:23: error: unused variable =E2=80=98t= v=E2=80=99 > > [-Werror=3Dunused-variable] > > 37 | struct __timespec64 tv; \ > > | ^~ > > ./bench-timing.h:35:25: note: in expansion of macro =E2=80=98HP_TIMING_= NOW=E2=80=99 > > 35 | #define TIMING_NOW(var) HP_TIMING_NOW (var) > > | ^~~~~~~~~~~~~ > > ./bench-skeleton.c:106:3: note: in expansion of macro =E2=80=98TIMING_N= OW=E2=80=99 > > 106 | TIMING_NOW (end); > > | ^~~~~~~~~~ > > cc1: all warnings being treated as errors > > How shall I reproduce this error? Apply the enclosed patch and do $ make USE_CLOCK_GETTIME=3D1 bench > Was it supposed to be catch with build-many-glibc.py ? > No, "make bench" isn't tested by build-many-glibc.py. --=20 H.J. --000000000000618e0805a6269416 Content-Type: text/x-patch; charset="US-ASCII"; name="0001-benchtests-Restore-the-clock_gettime-option.patch" Content-Disposition: attachment; filename="0001-benchtests-Restore-the-clock_gettime-option.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_kagob5100 RnJvbSBhY2VmZjM4OTgwZGFhZDUxMmNhOTY5MzY0N2Y1ZjY0MWQwYWExZjZlIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiAiSC5KLiBMdSIgPGhqbC50b29sc0BnbWFpbC5jb20+CkRhdGU6 IE1vbiwgMTggTWF5IDIwMjAgMTc6Mjg6NDIgLTA3MDAKU3ViamVjdDogW1BBVENIXSBiZW5jaHRl c3RzOiBSZXN0b3JlIHRoZSBjbG9ja19nZXR0aW1lIG9wdGlvbgoKY29tbWl0IDc2MjFlMzhiZjNj NThiMmQwMzU5NTQ1ZjFmMjg5ODAxN2ZkODlkMDUKQXV0aG9yOiBXaWxjbyBEaWprc3RyYSA8V2ls Y28uRGlqa3N0cmFAYXJtLmNvbT4KRGF0ZTogICBUdWUgSmFuIDI5IDE3OjQzOjQ1IDIwMTkgKzAw MDAKCiAgICBBZGQgZ2VuZXJpYyBocC10aW1pbmcgc3VwcG9ydAoKcmVtb3ZlZCB0aGUgY2xvY2tf Z2V0dGltZSBvcHRpb24uICBSZXN0b3JlIHRoZSBjbG9ja19nZXR0aW1lIG9wdGlvbiBmb3IKc29t ZSB4ODYgQ1BVcyBvbiB3aGljaCB2YWx1ZSBmcm9tIFJEVFNDIG1heSBub3QgYmUgaW5jcmVtZW50 ZWQgYXQgYSBmaXhlZApyYXRlLgotLS0KIGJlbmNodGVzdHMvTWFrZWZpbGUgICAgICAgfCA2ICsr KysrKwogYmVuY2h0ZXN0cy9SRUFETUUgICAgICAgICB8IDcgKysrKysrLQogYmVuY2h0ZXN0cy9i ZW5jaC10aW1pbmcuaCB8IDYgKysrKystCiAzIGZpbGVzIGNoYW5nZWQsIDE3IGluc2VydGlvbnMo KyksIDIgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvYmVuY2h0ZXN0cy9NYWtlZmlsZSBiL2Jl bmNodGVzdHMvTWFrZWZpbGUKaW5kZXggMzM1ZDY0M2VjYi4uOTllOTBkMTdhMCAxMDA2NDQKLS0t IGEvYmVuY2h0ZXN0cy9NYWtlZmlsZQorKysgYi9iZW5jaHRlc3RzL01ha2VmaWxlCkBAIC0xMzIs MTEgKzEzMiwxNyBAQCBlbmRpZgogCiBDUFBGTEFHUy1ub25saWIgKz0gLUREVVJBVElPTj0kKEJF TkNIX0RVUkFUSU9OKSAtRF9JU09NQUMKIAorIyBVc2UgY2xvY2tfZ2V0dGltZSB0byBtZWFzdXJl IHBlcmZvcm1hbmNlIG9mIGZ1bmN0aW9ucy4gIFRoZSBkZWZhdWx0IGlzCisjIHRvIHVzZSB0aGUg YXJjaGl0ZWN0dXJlLXNwZWNpZmljIGhpZ2ggcHJlY2lzaW9uIHRpbWluZyBpbnN0cnVjdGlvbnMu CitpZmRlZiBVU0VfQ0xPQ0tfR0VUVElNRQorQ1BQRkxBR1Mtbm9ubGliICs9IC1EVVNFX0NMT0NL X0dFVFRJTUUKK2Vsc2UKICMgT24geDg2IHByb2Nlc3NvcnMsIHVzZSBSRFRTQ1AsIGluc3RlYWQg b2YgUkRUU0MsIHRvIG1lYXN1cmUgcGVyZm9ybWFuY2UKICMgb2YgZnVuY3Rpb25zLiAgQWxsIHg4 NiBwcm9jZXNzb3JzIHNpbmNlIDIwMTAgc3VwcG9ydCBSRFRTQ1AgaW5zdHJ1Y3Rpb24uCiBpZmRl ZiBVU0VfUkRUU0NQCiBDUFBGTEFHUy1ub25saWIgKz0gLURVU0VfUkRUU0NQCiBlbmRpZgorZW5k aWYKIAogREVUQUlMRURfT1BUIDo9CiAKZGlmZiAtLWdpdCBhL2JlbmNodGVzdHMvUkVBRE1FIGIv YmVuY2h0ZXN0cy9SRUFETUUKaW5kZXggYzRmMDNmZDg3Mi4uZjQ0MGYzMjk1YSAxMDA2NDQKLS0t IGEvYmVuY2h0ZXN0cy9SRUFETUUKKysrIGIvYmVuY2h0ZXN0cy9SRUFETUUKQEAgLTI3LDcgKzI3 LDEyIEBAIEJFTkNIX0RVUkFUSU9OLgogCiBUaGUgYmVuY2htYXJrIHN1aXRlIGRvZXMgZnVuY3Rp b24gY2FsbCBtZWFzdXJlbWVudHMgdXNpbmcgYXJjaGl0ZWN0dXJlLXNwZWNpZmljCiBoaWdoIHBy ZWNpc2lvbiB0aW1pbmcgaW5zdHJ1Y3Rpb25zIHdoZW5ldmVyIGF2YWlsYWJsZS4gIFdoZW4gc3Vj aCBzdXBwb3J0IGlzCi1ub3QgYXZhaWxhYmxlLCBpdCB1c2VzIGNsb2NrX2dldHRpbWUgKENMT0NL X01PTk9UT05JQykuCitub3QgYXZhaWxhYmxlLCBpdCB1c2VzIGNsb2NrX2dldHRpbWUgKENMT0NL X01PTk9UT05JQykuICBPbmUgY2FuIGZvcmNlIHRoZQorYmVuY2htYXJrIHRvIHVzZSBjbG9ja19n ZXR0aW1lIGJ5IGludm9raW5nIG1ha2UgYXMgZm9sbG93czoKKworICAkIG1ha2UgVVNFX0NMT0NL X0dFVFRJTUU9MSBiZW5jaAorCitBZ2Fpbiwgb25lIG11c3QgcnVuIGBtYWtlIGJlbmNoLWNsZWFu JyBiZWZvcmUgY2hhbmdpbmcgdGhlIG1lYXN1cmVtZW50IG1ldGhvZC4KIAogT24geDg2IHByb2Nl c3NvcnMsIFJEVFNDUCBpbnN0cnVjdGlvbiBwcm92aWRlcyBtb3JlIHByZWNpc2UgdGltaW5nIGRh dGEKIHRoYW4gUkRUU0MgaW5zdHJ1Y3Rpb24uICBBbGwgeDg2IHByb2Nlc3NvcnMgc2luY2UgMjAx MCBzdXBwb3J0IFJEVFNDUApkaWZmIC0tZ2l0IGEvYmVuY2h0ZXN0cy9iZW5jaC10aW1pbmcuaCBi L2JlbmNodGVzdHMvYmVuY2gtdGltaW5nLmgKaW5kZXggYTBkNmY4MjQ2NS4uMmJhYWE5MmI0OSAx MDA2NDQKLS0tIGEvYmVuY2h0ZXN0cy9iZW5jaC10aW1pbmcuaAorKysgYi9iZW5jaHRlc3RzL2Jl bmNoLXRpbWluZy5oCkBAIC0xOSw3ICsxOSwxMSBAQAogI3VuZGVmIGF0dHJpYnV0ZV9oaWRkZW4K ICNkZWZpbmUgYXR0cmlidXRlX2hpZGRlbgogI2RlZmluZSBfX2Nsb2NrX2dldHRpbWUgX19jbG9j a19nZXR0aW1lNjQKLSNpbmNsdWRlIDxocC10aW1pbmcuaD4KKyNpZmRlZiBVU0VfQ0xPQ0tfR0VU VElNRQorIyBpbmNsdWRlIDxzeXNkZXBzL2dlbmVyaWMvaHAtdGltaW5nLmg+CisjZWxzZQorIyBp bmNsdWRlIDxocC10aW1pbmcuaD4KKyNlbmRpZgogI2luY2x1ZGUgPHN0ZGludC5oPgogCiAjZGVm aW5lIEdMKHgpIF8jI3gKLS0gCjIuMjYuMgoK --000000000000618e0805a6269416--