[PATCH] A fix for platform-dependent types in sanitizers' profiling support lib on x64 FreeBSD in 32-bit mode

Justin Bogner mail at justinbogner.com
Wed Feb 26 13:24:13 PST 2014


Viktor Kutuzov <vkutuzov at accesssoftek.com> writes:
> Index: lib/profile/GCDAProfiling.c
> ===================================================================
> --- lib/profile/GCDAProfiling.c
> +++ lib/profile/GCDAProfiling.c
> @@ -25,18 +25,25 @@
>  #include <stdio.h>
>  #include <stdlib.h>
>  #include <string.h>
> -#include <sys/stat.h>
>  #include <sys/mman.h>
> -#include <sys/types.h>
>  #ifdef _WIN32
>  #include <direct.h>
>  #endif
>  
> -#ifndef _MSC_VER
> -#include <stdint.h>
> -#else
> +#if defined(_MSC_VER)
>  typedef unsigned int uint32_t;
>  typedef unsigned int uint64_t;
> +#elif defined(__FreeBSD__) && defined(__i386__)
> +// System headers define 'size_t' incorrectly on x64 FreeBSD (prior to
> +// FreeBSD 10, r232261) when compiled in 32-bit mode.
> +typedef unsigned char uint8_t;
> +typedef unsigned int uint32_t;
> +typedef unsigned long long uint64_t;
> +int mkdir(const char*, unsigned short);
> +#else
> +#include <stdint.h>
> +#include <sys/stat.h>
> +#include <sys/types.h>
>  #endif

Are sys/stat.h and stdint.h not used for some reason in the _MSC_VER
case? This looks like a behaviour change that probably breaks windows.

>  /* #define DEBUG_GCDAPROFILING */
> Index: lib/profile/PGOProfiling.c
> ===================================================================
> --- lib/profile/PGOProfiling.c
> +++ lib/profile/PGOProfiling.c
> @@ -7,15 +7,22 @@
>  |*
>  \*===----------------------------------------------------------------------===*/
>  
> -#include <inttypes.h>
>  #include <stdio.h>
>  #include <stdlib.h>
>  
> -#ifndef _MSC_VER
> -#include <stdint.h>
> -#else
> +#if defined(_MSC_VER)
> +#include <inttypes.h>
>  typedef unsigned int uint32_t;
>  typedef unsigned int uint64_t;
> +#elif defined(__FreeBSD__) && defined(__i386__)
> +// System headers define 'size_t' incorrectly on x64 FreeBSD (prior to
> +// FreeBSD 10, r232261) when compiled in 32-bit mode.
> +#define PRIu64 "llu"
> +typedef unsigned int uint32_t;
> +typedef unsigned long long uint64_t;
> +#else
> +#include <inttypes.h>
> +#include <stdint.h>
>  #endif

Duplicating the include of inttypes in _MSC_VER and in the else seems
fairly awkward here.

Overall, this approach really doesn't seem scalable at all, and it will
be very difficult for people adding things in this area to get it right
without submitting to buildbots.

>  
>  static FILE *OutputFile = NULL;
>
> _______________________________________________
> llvm-commits mailing list
> llvm-commits at cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits



More information about the llvm-commits mailing list