| delorie.com/archives/browse.cgi | search |
| 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=DjfUh+Bpd6jLb4oXiyq3uiSYp18mGaU+y4lgPyrOdfY=; | |
| b=0fwd8ATcD1knu/ONAZ0b7/h6x+pCJ3TzI6BFaVwCw8nYVFS4fUwxtxD9AXYg88HlU3 | |
| J9LVz3A1fAXkbt1XkPh7AWiHS03/DvDqbeCWC/NfNuVYXhGcq9qsg8aVqFq2Gp0dopmD | |
| Dt8KWTxLC3mtOQ45nfI2aijVmcVJST2AEchTODLztd4tq3obVzj/k2miEsG5KxrtNLuG | |
| CaM5GpCczJkAytIaLHpgtZOJtjnf3bN4qMslhL7vVxXQlSbHNRmd4rvar+dSV65dtqpR | |
| mzZNc6Am3TLl6bWInNSyErYw/7liG05Jb93wuhjU4HEpCGPWywkS/CQ/X+waf70ZIujI | |
| nn4A== | |
| MIME-Version: | 1.0 |
| X-Received: | by 10.107.138.130 with SMTP id c2mr6961705ioj.74.1431626700516; |
| Thu, 14 May 2015 11:05:00 -0700 (PDT) | |
| In-Reply-To: | <5554DF05.7020707@iki.fi> |
| 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> | |
| <CAA2C=vAK_T9ixd6YpNrd2LYL80Lau-Dbf+T5vo89AdYXS0WYOw AT mail DOT gmail DOT com> | |
| <83vbfvi3t1 DOT fsf AT gnu DOT org> | |
| <CAA2C=vAUa61rumTN9fyCDdtdGXzqfzZLdtz4Nw+8gWX-J-x0bg AT mail DOT gmail DOT com> | |
| <5554DF05 DOT 7020707 AT iki DOT fi> | |
| Date: | Thu, 14 May 2015 21:05:00 +0300 |
| Message-ID: | <CAA2C=vD_NVLdHdqz8RSUeU3VniwrQ85=fn+WD0+pxMbZziuyHg@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 |
On 5/14/15, Andris Pavenis (andris DOT pavenis AT iki DOT fi) <djgpp AT delorie DOT com> wrote:
> On 05/14/2015 07:34 PM, Ozkan Sezer (sezeroz AT gmail DOT com) wrote:
>> On 5/14/15, Eli Zaretskii (eliz AT gnu DOT org) <djgpp AT delorie DOT com> wrote:
>>>> Date: Wed, 13 May 2015 23:27:39 +0300
>>>> From: "Ozkan Sezer (sezeroz AT gmail DOT com)" <djgpp AT delorie DOT com>
>>>>
>>>>> 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?
>>> LGTM, thanks.
>>>
>> OK, fixed the broken pragma in dir.h as of r1.7.
>>
>> Moved the packed attributes from members to structures as
>> of dir.h r1.8, dos.h r1.16 and coff.h r1.8.
>>
>>
>>>> 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?
>>> I think a test in djtst would be better.
>>>
>>> Thanks.
>>>
>> I would feel safer if the compile time asserts reside in the relevant
>> headers and checked every time something is compiled against them.
>>
>> How about the following patch: (also attached as 3a.patch)
>>
>> coff.h, dos.h, dir.h: conditionalize packed pragma to gcc < 3.
>> add compile time assertions to make sure of correct structure packing.
>>
>> -/* This is for g++ 2.7.2 and below */
>> +#if (__GNUC__ < 3) /* This is for g++ 2.7.2 and below */
>> #pragma pack(1)
>> +#endif
>>
>> struct ffblk {
>> char lfn_magic[6]; /* LFN */
>> @@ -54,7 +55,12 @@
>> char fd_name[14];
>> } __attribute__((packed));
>>
>> +#if (__GNUC__ < 3)
>> #pragma pack()
>> +#endif
>> +/* make sure that structure packing is correct */
>> +typedef int _DJCHK_FFBLK0[(sizeof(struct ffblk) ==290)*3 - 1];
>> +typedef int _DJCHK_FFBLK1[(sizeof(struct ffblklfn)==318)*3 - 1];
>
> This way also cross-compiler will detect problems with member packing. At
> least it seems to be OK
> with gcc-5.1.
>
OK,
> There are however some doubts after I took a look at STATIC_ASSERT
> implementation in Boost:
>
> http://www.boost.org/doc/libs/1_58_0/boost/static_assert.hpp
>
> We do not need all details (we're not interested about MSVC and like) but
> even for GCC there is
> more than 1 variant.
Do want to implement a public static_assert macro ?
The above is compiler-independent.
>
> Andris
>
>
>
>
> Looks OK with
>
With ??
--
O.S.
| webmaster | delorie software privacy |
| Copyright © 2019 by DJ Delorie | Updated Jul 2019 |