Browse Source

[build] Use __builtin_offsetof() when available

Some newer versions of gcc (observed with a patched gcc 4.5.1) seem to
treat our offsetof() implementation as not being a compile-time
constant.  Fix by using __builtin_offsetof() when available.  (As with
the original offsetof() macro, this code is copied from the Linux
kernel's stddef.h.)

Reported-by: Arkadiusz Miskiewicz <arekm@maven.pl>
Signed-off-by: Michael Brown <mcb30@ipxe.org>
tags/v1.20.1
Michael Brown 14 years ago
parent
commit
795793b3a4
1 changed files with 4 additions and 0 deletions
  1. 4
    0
      src/include/stddef.h

+ 4
- 0
src/include/stddef.h View File

10
 #define NULL ((void *)0)
10
 #define NULL ((void *)0)
11
 
11
 
12
 #undef offsetof
12
 #undef offsetof
13
+#ifdef __compiler_offsetof
14
+#define offsetof(TYPE,MEMBER) __compiler_offsetof(TYPE,MEMBER)
15
+#else
13
 #define offsetof(TYPE, MEMBER) ((size_t) &((TYPE *)0)->MEMBER)
16
 #define offsetof(TYPE, MEMBER) ((size_t) &((TYPE *)0)->MEMBER)
17
+#endif
14
 
18
 
15
 #undef container_of
19
 #undef container_of
16
 #define container_of(ptr, type, member) ({                      \
20
 #define container_of(ptr, type, member) ({                      \

Loading…
Cancel
Save