This is the mail archive of the libc-hacker@sourceware.org mailing list for the glibc project.
Note that libc-hacker is a closed list. You may look at the archives of this list, but subscription and posting are not open.
Index Nav: | [Date Index] [Subject Index] [Author Index] [Thread Index] | |
---|---|---|
Message Nav: | [Date Prev] [Date Next] | [Thread Prev] [Thread Next] |
Other format: | [Raw text] |
Hi! On 64-bit arches and non-GCC compilers, <sys/types.h> uses long long resp. unsigned long long types for int64_t/u_int64_t. But, <stdint.h> uses there long resp. unsigned long and so does <sys/types.h> for GCC (it uses DImode int, which mangles as l rather than x). With those compilers, depending if you include <stdint.h> or <sys/types.h> first thus affects mangling, the same function can mangle differently based on the order of the above headers included. The following patch is an ABI change with those compilers, makes even non-GCC compilers do the same as GCC (and the same as <stdint.h> already does). 2006-02-28 Jakub Jelinek <jakub@redhat.com> * posix/sys/types.h [!__GNUC_PREREQ (2, 7)] (int64_t, u_int64_t): typedef to long int resp. unsigned long int on 64-bit arches. --- libc/posix/sys/types.h.jj 2002-10-24 01:48:51.000000000 +0200 +++ libc/posix/sys/types.h 2006-02-28 13:34:44.000000000 +0100 @@ -1,4 +1,4 @@ -/* Copyright (C) 1991,1992,1994,1995,1996,1997,1998,1999,2000,2001,2002 +/* Copyright (C) 1991,1992,1994,1995,1996,1997,1998,1999,2000,2001,2002,2006 Free Software Foundation, Inc. This file is part of the GNU C Library. @@ -163,7 +163,9 @@ typedef unsigned int uint; typedef char int8_t; typedef short int int16_t; typedef int int32_t; -# if __GLIBC_HAVE_LONG_LONG +# if __WORDSIZE == 64 +typedef long int int64_t; +# elif __GLIBC_HAVE_LONG_LONG __extension__ typedef long long int int64_t; # endif # endif @@ -172,7 +174,9 @@ __extension__ typedef long long int int6 typedef unsigned char u_int8_t; typedef unsigned short int u_int16_t; typedef unsigned int u_int32_t; -# if __GLIBC_HAVE_LONG_LONG +# if __WORDSIZE == 64 +typedef unsigned long int u_int64_t; +# elif __GLIBC_HAVE_LONG_LONG __extension__ typedef unsigned long long int u_int64_t; # endif Jakub
Index Nav: | [Date Index] [Subject Index] [Author Index] [Thread Index] | |
---|---|---|
Message Nav: | [Date Prev] [Date Next] | [Thread Prev] [Thread Next] |