tcpdump mailing list archives
Re: alignment
From: Guy Harris <guy () netapp com>
Date: Fri, 8 Nov 2002 20:03:28 -0800
On Sat, Nov 09, 2002 at 11:50:17AM +0900, Jun-ichiro itojun Hagino wrote:
if not, is it acceptable if we test the feature in configure.in and use it if available?I'd say so (as long as this doesn't involve peppering the code with #ifdefs - if the feature *isn't* available, you still have to use the EXTRACT macros),i was thinking about something like this: #if GCC #define __ATTRIBUTE_PACKED__ __attribute__((packed)) #else #define __ATTRIBUTE_PACKED__ #endif struct foo { u_int32_t bar; u_int32_t baz; } __ATTRIBUTE_PACKED__;
Or just use "__attribute((packed))", as "interface.h" does #ifndef HAVE___ATTRIBUTE__ #define __attribute__(x) #endif so that __attribute__ is no-oped out if the compiler doesn't support it. (Yes, this breaks if there's a compiler that supports it in a non-GCC-compatible fashion, but there's already stuff in tcpdump that depends on __attribute__ either not existing or working as it does in GCC.) Presumably then you'd do #if defined(LBL_ALIGN) && !defined(HAVE___ATTRIBUTE__) or something such as that in "extract.h", so that raw "ntohs()" and "ntohl()" will be used if either 1) the platform supports efficient unaligned memory accesses (LBL_ALIGN isn't defined) or 2) the platform supports __attribute__((packed)) so that the compiler will generate reasonably efficient code to fetch unaligned stuff and then convert references to use the EXTRACT_ macros.
although note that "__attribute((packed))", at least according to the GCC 3.2 manual: http://gcc.gnu.org/onlinedocs/gcc-3.2/gcc/Variable-Attributes.html#Variable%20Attributes changes the layout of the structure, so you'd have to add padding to structures that lack it.if they don't have padding, they do not work right even now.
I.e., a structure struct foo { u_int32_t a; u_int8_t b; u_int32_t c; }; won't work as a packet format description - you have to use struct foo { u_int32_t a; u_int8_t b; u_int8_t pad[3]; u_int32_t c; }; ? If so, are there any structures of the sort that won't work? - This is the TCPDUMP workers list. It is archived at http://www.tcpdump.org/lists/workers/index.html To unsubscribe use mailto:tcpdump-workers-request () tcpdump org?body=unsubscribe
Current thread:
- alignment itojun (Nov 08)
- Re: alignment Guy Harris (Nov 08)
- Re: alignment Jun-ichiro itojun Hagino (Nov 08)
- Re: alignment Guy Harris (Nov 08)
- Re: alignment Jun-ichiro itojun Hagino (Nov 08)
- Re: alignment Guy Harris (Nov 08)
- Re: alignment Jun-ichiro itojun Hagino (Nov 09)
- Re: alignment Guy Harris (Nov 09)
- Re: alignment Jun-ichiro itojun Hagino (Nov 08)
- Re: alignment Guy Harris (Nov 10)
- Re: alignment Guy Harris (Nov 08)
- Re: alignment Guy Harris (Dec 11)