|
Message-ID: <20120214132550.GA25497@albatros> Date: Tue, 14 Feb 2012 17:25:50 +0400 From: Vasiliy Kulikov <segoon@...nwall.com> To: owl-dev@...ts.openwall.com Subject: Re: glibc' time.h dependency on stdlib.h (was: glibc update) On Thu, Nov 24, 2011 at 00:12 +0100, Pavel Kankovsky wrote: > On Mon, 21 Nov 2011, Vasiliy Kulikov wrote: > > > build@...atros:~ $ gcc -D_GNU_SOURCE -Wall a.c -o a > > In file included from a.c:1:0: > > /usr/include/time.h:226:5: error: unknown type name '__locale_t' > > > > A bug in glibc headers dependency? Or time.h really must be included > > only after explicit stdlib.h, which was not forced by our old glibc? > > It is a bug. > > strftime_l and strftime_l used to be GNU extensions but the latter > function was adopted by POSIX 2008. #ifdef __USE_GNU was split into > #ifdef __USE_XOPEN2K8 followed by #ifdef __USE_GNU but there is only one > #include <xlocale.h> in the first conditional section. See > > <http://sourceware.org/git/?p=glibc.git;a=commitdiff;h=6cbe890a9d379d85fe849a8317010f05ace00809#patch14> > > It appears __USE_GNU is defined when your test case is compiled but > __USE_XOPEN2K8 is not defined. This should never happen. Yes, and glibc folks say the same thing: http://sourceware.org/bugzilla/show_bug.cgi?id=10456 However, I have almost the same time.h header on Ubuntu 10.04 (glibc 2.11, gcc 4.4.3) and this part of time.h is the same. However, the one-liner is compilable on Ubuntu and is not on Owl. I see no meaningful difference before the actual build failure place: (diff -uN of two 'gcc -E' outputs) --- time.h.log 2012-02-14 16:57:51.588117472 +0400 +++ time.h.log-ubuntu 2012-02-14 16:57:29.624008541 +0400 @@ -4,14 +4,17 @@ # 1 "<stdin>" # 1 "/usr/include/time.h" 1 3 4 # 28 "/usr/include/time.h" 3 4 -# 1 "/usr/lib64/gcc/x86_64-openwall-linux/4.6.1/include-fixed/features.h" 1 3 4 -# 323 "/usr/lib64/gcc/x86_64-openwall-linux/4.6.1/include-fixed/features.h" 3 4 +# 1 "/usr/include/features.h" 1 3 4 +# 313 "/usr/include/features.h" 3 4 +# 1 "/usr/include/bits/predefs.h" 1 3 4 +# 314 "/usr/include/features.h" 2 3 4 +# 346 "/usr/include/features.h" 3 4 # 1 "/usr/include/sys/cdefs.h" 1 3 4 # 353 "/usr/include/sys/cdefs.h" 3 4 # 1 "/usr/include/bits/wordsize.h" 1 3 4 # 354 "/usr/include/sys/cdefs.h" 2 3 4 -# 324 "/usr/lib64/gcc/x86_64-openwall-linux/4.6.1/include-fixed/features.h" 2 3 4 -# 346 "/usr/lib64/gcc/x86_64-openwall-linux/4.6.1/include-fixed/features.h" 3 4 +# 347 "/usr/include/features.h" 2 3 4 +# 378 "/usr/include/features.h" 3 4 # 1 "/usr/include/gnu/stubs.h" 1 3 4 @@ -24,7 +27,7 @@ # 1 "/usr/include/gnu/stubs-64.h" 1 3 4 # 10 "/usr/include/gnu/stubs.h" 2 3 4 -# 347 "/usr/lib64/gcc/x86_64-openwall-linux/4.6.1/include-fixed/features.h" 2 3 4 +# 379 "/usr/include/features.h" 2 3 4 # 29 "/usr/include/time.h" 2 3 4 @@ -35,15 +38,16 @@ -# 1 "/usr/lib64/gcc/x86_64-openwall-linux/4.6.1/include/stddef.h" 1 3 4 -# 212 "/usr/lib64/gcc/x86_64-openwall-linux/4.6.1/include/stddef.h" 3 4 +# 1 "/usr/lib/gcc/x86_64-linux-gnu/4.4.3/include/stddef.h" 1 3 4 +# 211 "/usr/lib/gcc/x86_64-linux-gnu/4.4.3/include/stddef.h" 3 4 typedef long unsigned int size_t; # 39 "/usr/include/time.h" 2 3 4 # 1 "/usr/include/bits/time.h" 1 3 4 -# 27 "/usr/include/bits/time.h" 3 4 +# 43 "/usr/include/time.h" 2 3 4 +# 56 "/usr/include/time.h" 3 4 # 1 "/usr/include/bits/types.h" 1 3 4 # 28 "/usr/include/bits/types.h" 3 4 # 1 "/usr/include/bits/wordsize.h" 1 3 4 @@ -138,58 +142,8 @@ typedef unsigned int __socklen_t; -# 28 "/usr/include/bits/time.h" 2 3 4 - - - -struct timeval - { - __time_t tv_sec; - __suseconds_t tv_usec; - }; -# 86 "/usr/include/bits/time.h" 3 4 -# 1 "/usr/include/bits/timex.h" 1 3 4 -# 24 "/usr/include/bits/timex.h" 3 4 -struct timex -{ - unsigned int modes; - long int offset; - long int freq; - long int maxerror; - long int esterror; - int status; - long int constant; - long int precision; - long int tolerance; - struct timeval time; - long int tick; - - long int ppsfreq; - long int jitter; - int shift; - long int stabil; - long int jitcnt; - long int calcnt; - long int errcnt; - long int stbcnt; - - int tai; - - - int :32; int :32; int :32; int :32; - int :32; int :32; int :32; int :32; - int :32; int :32; int :32; -}; -# 87 "/usr/include/bits/time.h" 2 3 4 - - - +# 57 "/usr/include/time.h" 2 3 4 -extern int clock_adjtime (__clockid_t __clock_id, struct timex *__utx) __attribute__ ((__nothrow__)); - - -# 43 "/usr/include/time.h" 2 3 4 -# 58 "/usr/include/time.h" 3 4 typedef __clock_t clock_t; @@ -298,7 +252,38 @@ extern char *strptime (__const char *__restrict __s, __const char *__restrict __fmt, struct tm *__tp) __attribute__ ((__nothrow__)); -# 224 "/usr/include/time.h" 3 4 + + + + + +# 1 "/usr/include/xlocale.h" 1 3 4 +# 28 "/usr/include/xlocale.h" 3 4 +typedef struct __locale_struct +{ + + struct locale_data *__locales[13]; + + + const unsigned short int *__ctype_b; + const int *__ctype_tolower; + const int *__ctype_toupper; + + + const char *__names[13]; +} *__locale_t; + + +typedef __locale_t locale_t; +# 216 "/usr/include/time.h" 2 3 4 + +extern size_t strftime_l (char *__restrict __s, size_t __maxsize, + __const char *__restrict __format, + __const struct tm *__restrict __tp, + __locale_t __loc) __attribute__ ((__nothrow__)); + + + extern char *strptime_l (__const char *__restrict __s, __const char *__restrict __fmt, struct tm *__tp, __locale_t __loc) __attribute__ ((__nothrow__)); -- Does anybody see anything suspicious? Thanks, -- Vasiliy
Powered by blists - more mailing lists
Confused about mailing lists and their use? Read about mailing lists on Wikipedia and check out these guidelines on proper formatting of your messages.