X-Authentication-Warning: delorie.com: mail set sender to djgpp-bounces using -f X-Recipient: djgpp AT delorie DOT com X-Original-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=mime-version:in-reply-to:references:date:message-id:subject:from:to :content-type; bh=qvRFmImttfj57d2IUgqt1t2d7YYLpzVwo+vSz0hPB+U=; b=ES6ypKXBYBHCHPvATPZvIqqB3jA4iOc5JhCw8eK3Nn9pouZxE/UCnueOZM1kAO0yB5 SGDLrzJKxR/rZzEFgxpsA+k7L1VkhfoK7CxTxDcXkrIaB8ev3E2USYoaGFWANhVPsJYR VIJi2kR+A/zV7Ufe/ytQw+7uqnai9KgnGSFjUx9OV8KtmsNSqQF0ZUFOzVysD5PPcakB zYDzhpCQmd5C7zE6ZoJoi3S7FwB+nZCPQwxu0mdUKeZPDR/9Qb5IB5rZS78/ZbX8o33y uJaZ/1RHjeqj6UcZ3qRKlb2DESq/9VRPATM1HPHNsXR9H66gMPTflaTJYKw65/Zyivgc 5FPw== MIME-Version: 1.0 X-Received: by 10.50.43.227 with SMTP id z3mr30997745igl.22.1431548859572; Wed, 13 May 2015 13:27:39 -0700 (PDT) In-Reply-To: <838ucsjnbl.fsf@gnu.org> References: <83k2wcjt8e DOT fsf AT gnu DOT org> <83bnhojnwh DOT fsf AT gnu DOT org> <838ucsjnbl DOT fsf AT gnu DOT org> Date: Wed, 13 May 2015 23:27:39 +0300 Message-ID: Subject: Re: bad pragma in dir.h? (and our structrure packing) From: "Ozkan Sezer (sezeroz AT gmail DOT com)" To: djgpp AT delorie DOT com Content-Type: multipart/mixed; boundary=089e0111c0164154430515fc7157 Reply-To: djgpp AT delorie DOT com Errors-To: nobody AT delorie DOT com X-Mailing-List: djgpp AT delorie DOT com X-Unsubscribes-To: listserv AT delorie DOT com Precedence: bulk --089e0111c0164154430515fc7157 Content-Type: text/plain; charset=UTF-8 On 5/13/15, Eli Zaretskii (eliz AT gnu DOT org) wrote: >> Date: Wed, 13 May 2015 22:14:58 +0300 >> From: "Ozkan Sezer (sezeroz AT gmail DOT com)" >> >> >> > Wasn't that already fixed in the past? >> >> >> >> Well, obviously not. that pragma pack(4) is there in the cvs >> > >> > People make mistakes when they commit, so it could well be that the >> > problem was fixed at some point and then broken again in a subsequent >> > commit. >> > >> >> Alright then. OK to commit the following? >> >> Index: dir.h >> =================================================================== >> RCS file: /cvs/djgpp/djgpp/include/dir.h,v >> retrieving revision 1.6 >> diff -U 5 -r1.6 dir.h >> --- dir.h 2 May 2015 07:31:44 -0000 1.6 >> +++ dir.h 13 May 2015 19:12:02 -0000 >> @@ -52,11 +52,11 @@ >> unsigned long long fd_reserved __attribute__((packed)); >> char fd_longname[260] __attribute__((packed)); >> char fd_name[14] __attribute__((packed)); >> }; >> >> -#pragma pack(4) >> +#pragma pack() > > "pack()" or "pack(0)"? > pack(), without the 0. Actually it may even be better to use the push/pop variant of the pragma, like: #pragma pack(push,1) ... #pragma pack(pop) which have different semantics http://gcc.gnu.org/onlinedocs/gcc/Structure-Packing-Pragmas.html Ideas? >> > However, note that the latter will only work when you compile it as a >> > C >> > source; C++ doesn't allow such syntax, and you will have to fall back >> > to >> > declaring each struct member with the packed attribute. Therefore, >> > it's >> > best >> > to only use declarations such as above if you are *certain* it won't >> > be >> > ever >> > compiled as a C++ source. >> > >> > Once again, a lot has changed in C++ since then, so if all the >> > versions of GCC we want to support allow the above, there's no reason >> > to keep the attribute on each member of those structs. >> >> IIRC, never had such a problem with C++, although I haven't used >> g++ older than v3.0 > > If you (or someone else) can verify that the size of the structure and > the offsets of each member are the same in both C and C++ programs, > then I see no reason to keep the attribute on every member. I did the following as a foo.c and foo.cc: #define COMPILE_TIME_ASSERT(name, x) \ typedef int _djchk_ ## name[(x) * 2 - 1] #include "dos.h" COMPILE_TIME_ASSERT(find_t,sizeof(struct _find_t)==286); #include "dir.h" COMPILE_TIME_ASSERT(ffblk,sizeof(struct ffblk)==290); COMPILE_TIME_ASSERT(ffblklfn,sizeof(struct ffblklfn)==318); #include "coff.h" COMPILE_TIME_ASSERT(exln,sizeof(struct external_lineno)==6); COMPILE_TIME_ASSERT(exse,sizeof(struct external_syment)==18); COMPILE_TIME_ASSERT(exau,sizeof(union external_auxent)==18); COMPILE_TIME_ASSERT(exrl,sizeof(struct external_reloc)==10); Compiled using existing and modified headers for djgpp using gcc/g++ v3.4.6 and 5.1.0, no errors. I also compiled its coff.h-only parts for linux (i686 gcc-4.3.0 and clang-3.4.2), osx (ppc gcc-4.0.1 and x86_64 gcc-4.2.1), mingw (gcc-3.4.5), mingw-w64 (x86_64 gcc-4.5.4): no errors. Diff for the modified headers is attached (1.patch) Ideas? On 5/13/15, Andris Pavenis (andris DOT pavenis AT iki DOT fi) wrote: > I guess it would be a good idea to have small test in build process to > verify that offsets of > members are correct for structures intended for DOS calls. So build would > fail if something is > wrong with member packing > > Andris We can add compile-time asserts like the above to the headers: ideas? -- O.S. --089e0111c0164154430515fc7157 Content-Type: application/octet-stream; name="1.patch" Content-Disposition: attachment; filename="1.patch" Content-Transfer-Encoding: base64 X-Attachment-Id: file0 SW5kZXg6IGNvZmYuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL2RqZ3BwL2RqZ3BwL2luY2x1 ZGUvY29mZi5oLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjcKZGlmZiAtdSAtcjEuNyBjb2ZmLmgK LS0tIGNvZmYuaAkyMyBTZXAgMjAxMiAwNzo0OTowOCAtMDAwMAkxLjcKKysrIGNvZmYuaAkxMyBN YXkgMjAxNSAyMDoxNTo1MiAtMDAwMApAQCAtMTUyLDggKzE1Miw4IEBACiAgKi8KIHN0cnVjdCBl eHRlcm5hbF9saW5lbm8gewogICB1bmlvbiB7Ci0gICAgVUxPTkczMiBsX3N5bW5keCBfX2F0dHJp YnV0ZV9fKChwYWNrZWQpKTsJLyogZnVuY3Rpb24gbmFtZSBzeW1ib2wgaW5kZXgsIGlmZiBsX2xu bm8gPT0gMCAqLwotICAgIFVMT05HMzIgbF9wYWRkciBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsJ LyogKHBoeXNpY2FsKSBhZGRyZXNzIG9mIGxpbmUgbnVtYmVyICovCisgICAgVUxPTkczMiBsX3N5 bW5keDsJCQkJLyogZnVuY3Rpb24gbmFtZSBzeW1ib2wgaW5kZXgsIGlmZiBsX2xubm8gPT0gMCAq LworICAgIFVMT05HMzIgbF9wYWRkcjsJCQkJLyogKHBoeXNpY2FsKSBhZGRyZXNzIG9mIGxpbmUg bnVtYmVyICovCiAgIH0gbF9hZGRyOwogICB1bnNpZ25lZCBzaG9ydCBsX2xubm87CQkJLyogbGlu ZSBudW1iZXIgKi8KIH0gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CkBAIC0xNzQsMTEgKzE3NCwx MSBAQAogICB1bmlvbiB7CiAgICAgY2hhciBlX25hbWVbRV9TWU1OTUxFTl07CiAgICAgc3RydWN0 IHsKLSAgICAgIFVMT05HMzIgZV96ZXJvZXMgX19hdHRyaWJ1dGVfXygocGFja2VkKSk7Ci0gICAg ICBVTE9ORzMyIGVfb2Zmc2V0IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworICAgICAgVUxPTkcz MiBlX3plcm9lczsKKyAgICAgIFVMT05HMzIgZV9vZmZzZXQ7CiAgICAgfSBlOwogICB9IGU7Ci0g IFVMT05HMzIgZV92YWx1ZSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKKyAgVUxPTkczMiBlX3Zh bHVlOwogICBzaG9ydCBlX3NjbnVtOwogICB1bnNpZ25lZCBzaG9ydCBlX3R5cGU7CiAgIHVuc2ln bmVkIGNoYXIgZV9zY2xhc3M7CkBAIC0xOTIsNDUgKzE5Miw0NSBAQAogICAKIHVuaW9uIGV4dGVy bmFsX2F1eGVudCB7CiAgIHN0cnVjdCB7Ci0gICAgVUxPTkczMiB4X3RhZ25keCBfX2F0dHJpYnV0 ZV9fKChwYWNrZWQpKTsJCS8qIHN0ciwgdW4sIG9yIGVudW0gdGFnIGluZHggKi8KKyAgICBVTE9O RzMyIHhfdGFnbmR4OwkJCQkJLyogc3RyLCB1biwgb3IgZW51bSB0YWcgaW5keCAqLwogICAgIHVu aW9uIHsKICAgICAgIHN0cnVjdCB7CiAgICAgICAgIHVuc2lnbmVkIHNob3J0IHhfbG5ubzsJCQkJ LyogZGVjbGFyYXRpb24gbGluZSBudW1iZXIgKi8KICAgICAgICAgdW5zaWduZWQgc2hvcnQgeF9z aXplOwkJCQkvKiBzdHIvdW5pb24vYXJyYXkgc2l6ZSAqLwogICAgICAgfSB4X2xuc3o7Ci0gICAg ICBVTE9ORzMyIHhfZnNpemUgX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CQkvKiBzaXplIG9mIGZ1 bmN0aW9uICovCisgICAgICBVTE9ORzMyIHhfZnNpemU7CQkJCQkvKiBzaXplIG9mIGZ1bmN0aW9u ICovCiAgICAgfSB4X21pc2M7CiAgICAgdW5pb24gewogICAgICAgc3RydWN0IHsJCQkJCQkvKiBp ZiBJU0ZDTiwgdGFnLCBvciAuYmIgKi8KLSAgICAgICAgVUxPTkczMiB4X2xubm9wdHIgX19hdHRy aWJ1dGVfXygocGFja2VkKSk7CS8qIHB0ciB0byBmY24gbGluZSAjICovCi0gICAgICAgIFVMT05H MzIgeF9lbmRuZHggX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CS8qIGVudHJ5IG5keCBwYXN0IGJs b2NrIGVuZCAqLworICAgICAgICBVTE9ORzMyIHhfbG5ub3B0cjsJCQkJLyogcHRyIHRvIGZjbiBs aW5lICMgKi8KKyAgICAgICAgVUxPTkczMiB4X2VuZG5keDsJCQkJLyogZW50cnkgbmR4IHBhc3Qg YmxvY2sgZW5kICovCiAgICAgICB9IHhfZmNuOwogICAgICAgc3RydWN0IHsJCQkJCQkvKiBpZiBJ U0FSWSwgdXAgdG8gNCBkaW1lbi4gKi8KICAgICAgICAgdW5zaWduZWQgc2hvcnQgeF9kaW1lbltF X0RJTU5VTV07CiAgICAgICB9IHhfYXJ5OwotICAgIH0geF9mY25hcnk7CisgICAgfSBfX2F0dHJp YnV0ZV9fKChwYWNrZWQpKSB4X2ZjbmFyeTsKICAgICB1bnNpZ25lZCBzaG9ydCB4X3R2bmR4OwkJ CQkvKiB0diBpbmRleCAqLwotICB9IHhfc3ltOworICB9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkp IHhfc3ltOwogCiAgIHVuaW9uIHsKICAgICBjaGFyIHhfZm5hbWVbRV9GSUxOTUxFTl07CiAgICAg c3RydWN0IHsKLSAgICAgIFVMT05HMzIgeF96ZXJvZXMgX19hdHRyaWJ1dGVfXygocGFja2VkKSk7 Ci0gICAgICBVTE9ORzMyIHhfb2Zmc2V0IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworICAgICAg VUxPTkczMiB4X3plcm9lczsKKyAgICAgIFVMT05HMzIgeF9vZmZzZXQ7CiAgICAgfSB4X247Ci0g IH0geF9maWxlOworICB9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpIHhfZmlsZTsKIAogICBzdHJ1 Y3QgewotICAgIFVMT05HMzIgeF9zY25sZW4gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CQkvKiBz ZWN0aW9uIGxlbmd0aCAqLworICAgIFVMT05HMzIgeF9zY25sZW47CQkJCQkvKiBzZWN0aW9uIGxl bmd0aCAqLwogICAgIHVuc2lnbmVkIHNob3J0IHhfbnJlbG9jOwkJCQkvKiAjIHJlbG9jYXRpb24g ZW50cmllcyAqLwogICAgIHVuc2lnbmVkIHNob3J0IHhfbmxpbm5vOwkJCQkvKiAjIGxpbmUgbnVt YmVycyAqLwotICB9IHhfc2NuOworICB9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpIHhfc2NuOwog CiAgIHN0cnVjdCB7Ci0gICAgVUxPTkczMiB4X3R2ZmlsbCBfX2F0dHJpYnV0ZV9fKChwYWNrZWQp KTsJCS8qIHR2IGZpbGwgdmFsdWUgKi8KKyAgICBVTE9ORzMyIHhfdHZmaWxsOwkJCQkJLyogdHYg ZmlsbCB2YWx1ZSAqLwogICAgIHVuc2lnbmVkIHNob3J0IHhfdHZsZW47CQkJCS8qIGxlbmd0aCBv ZiAudHYgKi8KICAgICB1bnNpZ25lZCBzaG9ydCB4X3R2cmFuWzJdOwkJCQkvKiB0diByYW5nZSAq LwotICB9IHhfdHY7CQkJCQkJLyogaW5mbyBhYm91dCAudHYgc2VjdGlvbiAoaW4gYXV4ZW50IG9m IHN5bWJvbCAudHYpKSAqLworICB9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpIHhfdHY7CQkJLyog aW5mbyBhYm91dCAudHYgc2VjdGlvbiAoaW4gYXV4ZW50IG9mIHN5bWJvbCAudHYpKSAqLwogCiB9 IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOwogCkBAIC0zMjcsOCArMzI3LDggQEAKIAogCiBzdHJ1 Y3QgZXh0ZXJuYWxfcmVsb2MgewotICBVTE9ORzMyICAgICAgICByX3ZhZGRyIF9fYXR0cmlidXRl X18oKHBhY2tlZCkpOwotICBVTE9ORzMyICAgICAgICByX3N5bW5keCBfX2F0dHJpYnV0ZV9fKChw YWNrZWQpKTsKKyAgVUxPTkczMiAgICAgICAgcl92YWRkcjsKKyAgVUxPTkczMiAgICAgICAgcl9z eW1uZHg7CiAgIHVuc2lnbmVkIHNob3J0IHJfdHlwZTsKIH0gX19hdHRyaWJ1dGVfXygocGFja2Vk KSk7CiAKSW5kZXg6IGRpci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvZGpncHAvZGpncHAv aW5jbHVkZS9kaXIuaCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS42CmRpZmYgLXUgLXIxLjYgZGly LmgKLS0tIGRpci5oCTIgTWF5IDIwMTUgMDc6MzE6NDQgLTAwMDAJMS42CisrKyBkaXIuaAkxMyBN YXkgMjAxNSAyMDoxNTo1MiAtMDAwMApAQCAtMjUsMzYgKzI1LDM2IEBACiAgICBpcyBzZXQgdG8g TEZOMzIgKi8KIAogLyogVGhpcyBpcyBmb3IgZysrIDIuNy4yIGFuZCBiZWxvdyAqLwotI3ByYWdt YSBwYWNrKDEpCisvLyNwcmFnbWEgcGFjaygxKQogICAKIHN0cnVjdCBmZmJsayB7Ci0gIGNoYXIg bGZuX21hZ2ljWzZdIF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOwkJCS8qIExGTiAqLwotICBzaG9y dCBsZm5faGFuZGxlIF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOwkJCS8qIExGTiAqLwotICB1bnNp Z25lZCBzaG9ydCBsZm5fY3RpbWUgX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CQkvKiBMRk4gKi8K LSAgdW5zaWduZWQgc2hvcnQgbGZuX2NkYXRlIF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOwkJLyog TEZOICovCi0gIHVuc2lnbmVkIHNob3J0IGxmbl9hdGltZSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQp KTsJCS8qIExGTiAqLwotICB1bnNpZ25lZCBzaG9ydCBsZm5fYWRhdGUgX19hdHRyaWJ1dGVfXygo cGFja2VkKSk7CQkvKiBMRk4gKi8KLSAgY2hhciBfZmZfcmVzZXJ2ZWRbNV0gX19hdHRyaWJ1dGVf XygocGFja2VkKSk7Ci0gIHVuc2lnbmVkIGNoYXIgIGZmX2F0dHJpYiBfX2F0dHJpYnV0ZV9fKChw YWNrZWQpKTsKLSAgdW5zaWduZWQgc2hvcnQgZmZfZnRpbWUgX19hdHRyaWJ1dGVfXygocGFja2Vk KSk7Ci0gIHVuc2lnbmVkIHNob3J0IGZmX2ZkYXRlIF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOwot ICB1bnNpZ25lZCBsb25nICBmZl9mc2l6ZSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKLSAgY2hh ciBmZl9uYW1lWzI2MF0gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7Ci19OworICBjaGFyIGxmbl9t YWdpY1s2XTsJCQkvKiBMRk4gKi8KKyAgc2hvcnQgbGZuX2hhbmRsZTsJCQkvKiBMRk4gKi8KKyAg dW5zaWduZWQgc2hvcnQgbGZuX2N0aW1lOwkJLyogTEZOICovCisgIHVuc2lnbmVkIHNob3J0IGxm bl9jZGF0ZTsJCS8qIExGTiAqLworICB1bnNpZ25lZCBzaG9ydCBsZm5fYXRpbWU7CQkvKiBMRk4g Ki8KKyAgdW5zaWduZWQgc2hvcnQgbGZuX2FkYXRlOwkJLyogTEZOICovCisgIGNoYXIgX2ZmX3Jl c2VydmVkWzVdOworICB1bnNpZ25lZCBjaGFyICBmZl9hdHRyaWI7CisgIHVuc2lnbmVkIHNob3J0 IGZmX2Z0aW1lOworICB1bnNpZ25lZCBzaG9ydCBmZl9mZGF0ZTsKKyAgdW5zaWduZWQgbG9uZyAg ZmZfZnNpemU7CisgIGNoYXIgZmZfbmFtZVsyNjBdOworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQp KTsKIAogc3RydWN0IGZmYmxrbGZuIHsKLSAgdW5zaWduZWQgbG9uZyAgICAgIGZkX2F0dHJpYiBf X2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKLSAgdW5zaWduZWQgbG9uZyBsb25nIGZkX2N0aW1lIF9f YXR0cmlidXRlX18oKHBhY2tlZCkpOwotICB1bnNpZ25lZCBsb25nIGxvbmcgZmRfYXRpbWUgX19h dHRyaWJ1dGVfXygocGFja2VkKSk7Ci0gIHVuc2lnbmVkIGxvbmcgbG9uZyBmZF9tdGltZSBfX2F0 dHJpYnV0ZV9fKChwYWNrZWQpKTsKLSAgdW5zaWduZWQgbG9uZyAgICAgIGZkX3NpemVoaSBfX2F0 dHJpYnV0ZV9fKChwYWNrZWQpKTsKLSAgdW5zaWduZWQgbG9uZyAgICAgIGZkX3NpemUgX19hdHRy aWJ1dGVfXygocGFja2VkKSk7Ci0gIHVuc2lnbmVkIGxvbmcgbG9uZyBmZF9yZXNlcnZlZCBfX2F0 dHJpYnV0ZV9fKChwYWNrZWQpKTsKLSAgY2hhciAgICAgICAgICAgICAgIGZkX2xvbmduYW1lWzI2 MF0gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7Ci0gIGNoYXIgICAgICAgICAgICAgICBmZF9uYW1l WzE0XSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKLX07CisgIHVuc2lnbmVkIGxvbmcgICAgICBm ZF9hdHRyaWI7CisgIHVuc2lnbmVkIGxvbmcgbG9uZyBmZF9jdGltZTsKKyAgdW5zaWduZWQgbG9u ZyBsb25nIGZkX2F0aW1lOworICB1bnNpZ25lZCBsb25nIGxvbmcgZmRfbXRpbWU7CisgIHVuc2ln bmVkIGxvbmcgICAgICBmZF9zaXplaGk7CisgIHVuc2lnbmVkIGxvbmcgICAgICBmZF9zaXplOwor ICB1bnNpZ25lZCBsb25nIGxvbmcgZmRfcmVzZXJ2ZWQ7CisgIGNoYXIgICAgICAgICAgICAgICBm ZF9sb25nbmFtZVsyNjBdOworICBjaGFyICAgICAgICAgICAgICAgZmRfbmFtZVsxNF07Cit9IF9f YXR0cmlidXRlX18oKHBhY2tlZCkpOwogCi0jcHJhZ21hIHBhY2soNCkKKy8vI3ByYWdtYSBwYWNr KCkKIAogI2RlZmluZSBGQV9SRE9OTFkgICAgICAgMQogI2RlZmluZSBGQV9ISURERU4gICAgICAg MgpJbmRleDogZG9zLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9kamdwcC9kamdwcC9pbmNs dWRlL2Rvcy5oLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjE1CmRpZmYgLXUgLXIxLjE1IGRvcy5o Ci0tLSBkb3MuaAkyIE1heSAyMDE1IDA3OjMxOjQ0IC0wMDAwCTEuMTUKKysrIGRvcy5oCTEzIE1h eSAyMDE1IDIwOjE1OjUyIC0wMDAwCkBAIC0yMTcsMTEgKzIxNywxMSBAQAogc3RydWN0IF9maW5k X3QgewogICBjaGFyIHJlc2VydmVkWzIxXTsKICAgdW5zaWduZWQgY2hhciBhdHRyaWI7Ci0gIHVu c2lnbmVkIHNob3J0IHdyX3RpbWUgX19hdHRyaWJ1dGVfXygocGFja2VkKSk7Ci0gIHVuc2lnbmVk IHNob3J0IHdyX2RhdGUgX19hdHRyaWJ1dGVfXygocGFja2VkKSk7Ci0gIHVuc2lnbmVkIGxvbmcg c2l6ZSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKKyAgdW5zaWduZWQgc2hvcnQgd3JfdGltZTsK KyAgdW5zaWduZWQgc2hvcnQgd3JfZGF0ZTsKKyAgdW5zaWduZWQgbG9uZyBzaXplOwogICBjaGFy IG5hbWVbMjU2XTsKLX07Cit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOwogI2RlZmluZSBmaW5k X3QgX2ZpbmRfdAogCiBzdHJ1Y3QgX2Rpc2tmcmVlX3Qgewo= --089e0111c0164154430515fc7157--