From: Richard Smith Date: Tue, 13 Nov 2012 23:55:06 +0000 (+0000) Subject: Support for building the ubsan runtime when using the autoconf build system on X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=6122d0692bf261ce4df586c7bb5625e1ede9da98;p=platform%2Fupstream%2Fllvm.git Support for building the ubsan runtime when using the autoconf build system on Darwin. Patch by Jean-Daniel Dupas, tweaked by Jonathan Sauer, simplified somewhat by me. llvm-svn: 167889 --- diff --git a/compiler-rt/SDKs/darwin/usr/include/stdio.h b/compiler-rt/SDKs/darwin/usr/include/stdio.h index 7441388..63b10a8 100644 --- a/compiler-rt/SDKs/darwin/usr/include/stdio.h +++ b/compiler-rt/SDKs/darwin/usr/include/stdio.h @@ -17,6 +17,10 @@ #ifndef __STDIO_H__ #define __STDIO_H__ +#if defined(__cplusplus) +extern "C" { +#endif + typedef struct __sFILE FILE; typedef __SIZE_TYPE__ size_t; @@ -63,12 +67,18 @@ extern FILE *__stderrp; int fclose(FILE *); int fflush(FILE *); -FILE *fopen(const char * restrict, const char * restrict) __asm(__FOPEN_NAME); -int fprintf(FILE * restrict, const char * restrict, ...); -size_t fwrite(const void * restrict, size_t, size_t, FILE * restrict) +FILE *fopen(const char * __restrict, const char * __restrict) __asm(__FOPEN_NAME); +int fprintf(FILE * __restrict, const char * __restrict, ...); +size_t fwrite(const void * __restrict, size_t, size_t, FILE * __restrict) __asm(__FWRITE_NAME); size_t fread(void * __restrict, size_t, size_t, FILE * __restrict); long ftell(FILE *); int fseek(FILE *, long, int); +int snprintf(char * __restrict, size_t, const char * __restrict, ...); + +#if defined(__cplusplus) +} +#endif + #endif /* __STDIO_H__ */ diff --git a/compiler-rt/lib/Makefile.mk b/compiler-rt/lib/Makefile.mk index 791921a..ea471e0 100644 --- a/compiler-rt/lib/Makefile.mk +++ b/compiler-rt/lib/Makefile.mk @@ -19,6 +19,7 @@ SubDirs += interception SubDirs += profile SubDirs += sanitizer_common SubDirs += tsan +SubDirs += ubsan # FIXME: We don't currently support building an atomic library, and as it must # be a separate library from the runtime library, we need to remove its source diff --git a/compiler-rt/lib/ubsan/Makefile.mk b/compiler-rt/lib/ubsan/Makefile.mk new file mode 100644 index 0000000..5702e0e --- /dev/null +++ b/compiler-rt/lib/ubsan/Makefile.mk @@ -0,0 +1,23 @@ +#===- lib/ubsan/Makefile.mk ---------------------------------*- Makefile -*--===# +# +# The LLVM Compiler Infrastructure +# +# This file is distributed under the University of Illinois Open Source +# License. See LICENSE.TXT for details. +# +#===------------------------------------------------------------------------===# + +ModuleName := ubsan +SubDirs := + +Sources := $(foreach file,$(wildcard $(Dir)/*.cc),$(notdir $(file))) +ObjNames := $(Sources:%.cc=%.o) + +Implementation := Generic + +# FIXME: use automatic dependencies? +Dependencies := $(wildcard $(Dir)/*.h) +Dependencies += $(wildcard $(Dir)/../sanitizer_common/*.h) + +# Define a convenience variable for all the ubsan functions. +UbsanFunctions := $(Sources:%.cc=%) diff --git a/compiler-rt/lib/ubsan/ubsan_value.h b/compiler-rt/lib/ubsan/ubsan_value.h index a855791..0c755ca 100644 --- a/compiler-rt/lib/ubsan/ubsan_value.h +++ b/compiler-rt/lib/ubsan/ubsan_value.h @@ -14,9 +14,9 @@ #ifndef UBSAN_VALUE_H #define UBSAN_VALUE_H -// For now, only support linux. Other platforms should be easy to add, and -// probably work as-is. -#if !defined(__linux__) +// For now, only support linux and darwin. Other platforms should be easy to +// add, and probably work as-is. +#if !defined(__linux__) && !defined(__APPLE__) #error "UBSan not supported for this platform!" #endif diff --git a/compiler-rt/make/platform/clang_darwin.mk b/compiler-rt/make/platform/clang_darwin.mk index 5bc0e10..399edee 100644 --- a/compiler-rt/make/platform/clang_darwin.mk +++ b/compiler-rt/make/platform/clang_darwin.mk @@ -76,6 +76,9 @@ UniversalArchs.asan_osx := $(call CheckArches,i386 x86_64,asan_osx) Configs += asan_osx_dynamic UniversalArchs.asan_osx_dynamic := $(call CheckArches,i386 x86_64,asan_osx_dynamic) +Configs += ubsan_osx +UniversalArchs.ubsan_osx := $(call CheckArches,i386 x86_64,ubsan_osx) + # Darwin 10.6 has a bug in cctools that makes it unable to use ranlib on our ARM # object files. If we are on that platform, strip out all ARM archs. We still # build the libraries themselves so that Clang can find them where it expects @@ -131,6 +134,8 @@ CFLAGS.asan_osx_dynamic := \ $(CFLAGS) -mmacosx-version-min=10.5 -fno-builtin \ -DMAC_INTERPOSE_FUNCTIONS=1 +CFLAGS.ubsan_osx := $(CFLAGS) $(OSX_DEPLOYMENT_ARGS) + CFLAGS.ios.i386 := $(CFLAGS) $(IOSSIM_DEPLOYMENT_ARGS) CFLAGS.ios.x86_64 := $(CFLAGS) $(IOSSIM_DEPLOYMENT_ARGS) CFLAGS.ios.armv7 := $(CFLAGS) $(IOS_DEPLOYMENT_ARGS) @@ -183,6 +188,8 @@ FUNCTIONS.asan_osx_dynamic := $(AsanFunctions) $(InterceptionFunctions) \ $(SanitizerCommonFunctions) \ $(AsanDynamicFunctions) +FUNCTIONS.ubsan_osx := $(UbsanFunctions) + CCKEXT_COMMON_FUNCTIONS := \ absvdi2 \ absvsi2 \