delorie.com/archives/browse.cgi   search  
Mail Archives: djgpp/2015/05/13/16:27:55

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: <CAA2C=vCgLHdH3BJxastGzUsJzhiRddytiYwB1MP_aaiiVpC4nA AT mail DOT gmail DOT com>
<83k2wcjt8e DOT fsf AT gnu DOT org>
<CAA2C=vB-YiGkyx5dJpa=hcBh0O4_NiEKh2tKm5OHyNX3vW7HsQ AT mail DOT gmail DOT com>
<83bnhojnwh DOT fsf AT gnu DOT org>
<CAA2C=vAEKFUktuYXGN_eYUEY0JuHQgXR_-q-N8xox=7PHPEqqw AT mail DOT gmail DOT com>
<838ucsjnbl DOT fsf AT gnu DOT org>
Date: Wed, 13 May 2015 23:27:39 +0300
Message-ID: <CAA2C=vAK_T9ixd6YpNrd2LYL80Lau-Dbf+T5vo89AdYXS0WYOw@mail.gmail.com>
Subject: Re: bad pragma in dir.h? (and our structrure packing)
From: "Ozkan Sezer (sezeroz AT gmail DOT com)" <djgpp AT delorie DOT com>
To: djgpp AT delorie DOT com
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

--089e0111c0164154430515fc7157
Content-Type: text/plain; charset=UTF-8

On 5/13/15, Eli Zaretskii (eliz AT gnu DOT org) <djgpp AT delorie DOT com> wrote:
>> Date: Wed, 13 May 2015 22:14:58 +0300
>> From: "Ozkan Sezer (sezeroz AT gmail DOT com)" <djgpp AT delorie 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) <djgpp AT delorie DOT com> 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--

- Raw text -


  webmaster     delorie software   privacy  
  Copyright © 2019   by DJ Delorie     Updated Jul 2019