forked from OSchip/llvm-project
				
			[asan] Nuke ASAN_FLEXIBLE_MAPPING_AND_OFFSET.
llvm-svn: 199370
This commit is contained in:
		
							parent
							
								
									4df2363a23
								
							
						
					
					
						commit
						e259b658e4
					
				| 
						 | 
					@ -38,16 +38,13 @@ set(ASAN_COMMON_DEFINITIONS
 | 
				
			||||||
 | 
					
 | 
				
			||||||
if(ANDROID)
 | 
					if(ANDROID)
 | 
				
			||||||
  list(APPEND ASAN_COMMON_DEFINITIONS
 | 
					  list(APPEND ASAN_COMMON_DEFINITIONS
 | 
				
			||||||
    ASAN_FLEXIBLE_MAPPING_AND_OFFSET=0
 | 
					 | 
				
			||||||
    ASAN_NEEDS_SEGV=0
 | 
					    ASAN_NEEDS_SEGV=0
 | 
				
			||||||
    ASAN_LOW_MEMORY=1)
 | 
					    ASAN_LOW_MEMORY=1)
 | 
				
			||||||
elseif(MSVC)
 | 
					elseif(MSVC)
 | 
				
			||||||
  list(APPEND ASAN_COMMON_DEFINITIONS
 | 
					  list(APPEND ASAN_COMMON_DEFINITIONS
 | 
				
			||||||
    ASAN_FLEXIBLE_MAPPING_AND_OFFSET=0
 | 
					 | 
				
			||||||
    ASAN_NEEDS_SEGV=0)
 | 
					    ASAN_NEEDS_SEGV=0)
 | 
				
			||||||
else()
 | 
					else()
 | 
				
			||||||
  list(APPEND ASAN_COMMON_DEFINITIONS
 | 
					  list(APPEND ASAN_COMMON_DEFINITIONS
 | 
				
			||||||
    ASAN_FLEXIBLE_MAPPING_AND_OFFSET=1
 | 
					 | 
				
			||||||
    ASAN_NEEDS_SEGV=1)
 | 
					    ASAN_NEEDS_SEGV=1)
 | 
				
			||||||
endif()
 | 
					endif()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -44,12 +44,6 @@
 | 
				
			||||||
# define ASAN_HAS_EXCEPTIONS 1
 | 
					# define ASAN_HAS_EXCEPTIONS 1
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// If set, asan uses the values of SHADOW_SCALE and SHADOW_OFFSET
 | 
					 | 
				
			||||||
// provided by the instrumented objects. Otherwise constants are used.
 | 
					 | 
				
			||||||
#ifndef ASAN_FLEXIBLE_MAPPING_AND_OFFSET
 | 
					 | 
				
			||||||
# define ASAN_FLEXIBLE_MAPPING_AND_OFFSET 0
 | 
					 | 
				
			||||||
#endif
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
// If set, values like allocator chunk size, as well as defaults for some flags
 | 
					// If set, values like allocator chunk size, as well as defaults for some flags
 | 
				
			||||||
// will be changed towards less memory overhead.
 | 
					// will be changed towards less memory overhead.
 | 
				
			||||||
#ifndef ASAN_LOW_MEMORY
 | 
					#ifndef ASAN_LOW_MEMORY
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -63,12 +63,6 @@ static const u64 kDefaultShadowOffset64 = 1ULL << 44;
 | 
				
			||||||
static const u64 kDefaultShort64bitShadowOffset = 0x7FFF8000;  // < 2G.
 | 
					static const u64 kDefaultShort64bitShadowOffset = 0x7FFF8000;  // < 2G.
 | 
				
			||||||
static const u64 kMIPS32_ShadowOffset32 = 0x0aaa8000;
 | 
					static const u64 kMIPS32_ShadowOffset32 = 0x0aaa8000;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#if ASAN_FLEXIBLE_MAPPING_AND_OFFSET == 1
 | 
					 | 
				
			||||||
extern "C" SANITIZER_INTERFACE_ATTRIBUTE uptr __asan_mapping_scale;
 | 
					 | 
				
			||||||
extern "C" SANITIZER_INTERFACE_ATTRIBUTE uptr __asan_mapping_offset;
 | 
					 | 
				
			||||||
# define SHADOW_SCALE (__asan_mapping_scale)
 | 
					 | 
				
			||||||
# define SHADOW_OFFSET (__asan_mapping_offset)
 | 
					 | 
				
			||||||
#else
 | 
					 | 
				
			||||||
#define SHADOW_SCALE kDefaultShadowScale
 | 
					#define SHADOW_SCALE kDefaultShadowScale
 | 
				
			||||||
#if SANITIZER_ANDROID
 | 
					#if SANITIZER_ANDROID
 | 
				
			||||||
# define SHADOW_OFFSET (0)
 | 
					# define SHADOW_OFFSET (0)
 | 
				
			||||||
| 
						 | 
					@ -87,7 +81,6 @@ extern "C" SANITIZER_INTERFACE_ATTRIBUTE uptr __asan_mapping_offset;
 | 
				
			||||||
#  endif
 | 
					#  endif
 | 
				
			||||||
# endif
 | 
					# endif
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
#endif  // ASAN_FLEXIBLE_MAPPING_AND_OFFSET
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
#define SHADOW_GRANULARITY (1ULL << SHADOW_SCALE)
 | 
					#define SHADOW_GRANULARITY (1ULL << SHADOW_SCALE)
 | 
				
			||||||
#define MEM_TO_SHADOW(mem) (((mem) >> SHADOW_SCALE) + (SHADOW_OFFSET))
 | 
					#define MEM_TO_SHADOW(mem) (((mem) >> SHADOW_SCALE) + (SHADOW_OFFSET))
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -1,20 +0,0 @@
 | 
				
			||||||
// RUN: %clangxx_asan -O0 %s -fsanitize-address-zero-base-shadow -pie -o %t && %t 2>&1 | FileCheck %s
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
// Zero-base shadow only works on x86_64 and i386.
 | 
					 | 
				
			||||||
// REQUIRES: x86_64-supported-target
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
// A regression test for time(NULL), which caused ASan to crash in the
 | 
					 | 
				
			||||||
// zero-based shadow mode on Linux.
 | 
					 | 
				
			||||||
// FIXME: this test does not work on Darwin, because the code pages of the
 | 
					 | 
				
			||||||
// executable interleave with the zero-based shadow.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
#include <stdio.h>
 | 
					 | 
				
			||||||
#include <stdlib.h>
 | 
					 | 
				
			||||||
#include <time.h>
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
int main() {
 | 
					 | 
				
			||||||
  time_t t = time(NULL);
 | 
					 | 
				
			||||||
  fprintf(stderr, "Time: %s\n", ctime(&t));  // NOLINT
 | 
					 | 
				
			||||||
  // CHECK: {{Time: .* .* .*}}
 | 
					 | 
				
			||||||
  return 0;
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
| 
						 | 
					@ -1,24 +0,0 @@
 | 
				
			||||||
// RUN: %clangxx_asan -O0 -fsanitize-address-zero-base-shadow -fPIE -pie %s -o %t
 | 
					 | 
				
			||||||
// RUN: not %t 2>&1 | FileCheck %s
 | 
					 | 
				
			||||||
// RUN: %clangxx_asan -O1 -fsanitize-address-zero-base-shadow -fPIE -pie %s -o %t
 | 
					 | 
				
			||||||
// RUN: not %t 2>&1 | FileCheck %s
 | 
					 | 
				
			||||||
// RUN: %clangxx_asan -O2 -fsanitize-address-zero-base-shadow -fPIE -pie %s -o %t
 | 
					 | 
				
			||||||
// RUN: not %t 2>&1 | FileCheck %s
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
// Zero-base shadow only works on x86_64 and i386.
 | 
					 | 
				
			||||||
// REQUIRES: i386-supported-target, asan-32-bits
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
#include <string.h>
 | 
					 | 
				
			||||||
int main(int argc, char **argv) {
 | 
					 | 
				
			||||||
  char x[10];
 | 
					 | 
				
			||||||
  memset(x, 0, 10);
 | 
					 | 
				
			||||||
  int res = x[argc * 10];  // BOOOM
 | 
					 | 
				
			||||||
  // CHECK: {{READ of size 1 at 0x.* thread T0}}
 | 
					 | 
				
			||||||
  // CHECK: {{    #0 0x.* in main .*zero-base-shadow32.cc:}}[[@LINE-2]]
 | 
					 | 
				
			||||||
  // CHECK: {{Address 0x.* is .* frame}}
 | 
					 | 
				
			||||||
  // CHECK: main
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  // Check that shadow for stack memory occupies lower part of address space.
 | 
					 | 
				
			||||||
  // CHECK: =>0x1
 | 
					 | 
				
			||||||
  return res;
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
| 
						 | 
					@ -1,24 +0,0 @@
 | 
				
			||||||
// RUN: %clangxx_asan -O0 -fsanitize-address-zero-base-shadow -fPIE -pie %s -o %t
 | 
					 | 
				
			||||||
// RUN: not %t 2>&1 | FileCheck %s
 | 
					 | 
				
			||||||
// RUN: %clangxx_asan -O1 -fsanitize-address-zero-base-shadow -fPIE -pie %s -o %t
 | 
					 | 
				
			||||||
// RUN: not %t 2>&1 | FileCheck %s
 | 
					 | 
				
			||||||
// RUN: %clangxx_asan -O2 -fsanitize-address-zero-base-shadow -fPIE -pie %s -o %t
 | 
					 | 
				
			||||||
// RUN: not %t 2>&1 | FileCheck %s
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
// Zero-base shadow only works on x86_64 and i386.
 | 
					 | 
				
			||||||
// REQUIRES: x86_64-supported-target, asan-64-bits
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
#include <string.h>
 | 
					 | 
				
			||||||
int main(int argc, char **argv) {
 | 
					 | 
				
			||||||
  char x[10];
 | 
					 | 
				
			||||||
  memset(x, 0, 10);
 | 
					 | 
				
			||||||
  int res = x[argc * 10];  // BOOOM
 | 
					 | 
				
			||||||
  // CHECK: {{READ of size 1 at 0x.* thread T0}}
 | 
					 | 
				
			||||||
  // CHECK: {{    #0 0x.* in main .*zero-base-shadow64.cc:}}[[@LINE-2]]
 | 
					 | 
				
			||||||
  // CHECK: {{Address 0x.* is .* frame}}
 | 
					 | 
				
			||||||
  // CHECK: main
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  // Check that shadow for stack memory occupies lower part of address space.
 | 
					 | 
				
			||||||
  // CHECK: =>0x0f
 | 
					 | 
				
			||||||
  return res;
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
| 
						 | 
					@ -50,11 +50,9 @@ list(APPEND ASAN_UNITTEST_COMMON_CFLAGS
 | 
				
			||||||
  -DASAN_UAR=0)
 | 
					  -DASAN_UAR=0)
 | 
				
			||||||
if(ANDROID)
 | 
					if(ANDROID)
 | 
				
			||||||
  list(APPEND ASAN_UNITTEST_COMMON_CFLAGS
 | 
					  list(APPEND ASAN_UNITTEST_COMMON_CFLAGS
 | 
				
			||||||
    -DASAN_FLEXIBLE_MAPPING_AND_OFFSET=0
 | 
					 | 
				
			||||||
    -DASAN_NEEDS_SEGV=0)
 | 
					    -DASAN_NEEDS_SEGV=0)
 | 
				
			||||||
else()
 | 
					else()
 | 
				
			||||||
  list(APPEND ASAN_UNITTEST_COMMON_CFLAGS
 | 
					  list(APPEND ASAN_UNITTEST_COMMON_CFLAGS
 | 
				
			||||||
    -DASAN_FLEXIBLE_MAPPING_AND_OFFSET=1
 | 
					 | 
				
			||||||
    -DASAN_NEEDS_SEGV=1)
 | 
					    -DASAN_NEEDS_SEGV=1)
 | 
				
			||||||
endif()
 | 
					endif()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -25,34 +25,6 @@
 | 
				
			||||||
#include <vector>
 | 
					#include <vector>
 | 
				
			||||||
#include <limits>
 | 
					#include <limits>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#if ASAN_FLEXIBLE_MAPPING_AND_OFFSET == 1
 | 
					 | 
				
			||||||
// Manually set correct ASan mapping scale and offset, as they won't be
 | 
					 | 
				
			||||||
// exported from instrumented sources (there are none).
 | 
					 | 
				
			||||||
# define FLEXIBLE_SHADOW_SCALE kDefaultShadowScale
 | 
					 | 
				
			||||||
# if SANITIZER_ANDROID
 | 
					 | 
				
			||||||
#  define FLEXIBLE_SHADOW_OFFSET (0)
 | 
					 | 
				
			||||||
# else
 | 
					 | 
				
			||||||
#  if SANITIZER_WORDSIZE == 32
 | 
					 | 
				
			||||||
#   if defined(__mips__)
 | 
					 | 
				
			||||||
#     define FLEXIBLE_SHADOW_OFFSET kMIPS32_ShadowOffset32
 | 
					 | 
				
			||||||
#   else
 | 
					 | 
				
			||||||
#     define FLEXIBLE_SHADOW_OFFSET kDefaultShadowOffset32
 | 
					 | 
				
			||||||
#   endif
 | 
					 | 
				
			||||||
#  else
 | 
					 | 
				
			||||||
#   if defined(__powerpc64__)
 | 
					 | 
				
			||||||
#    define FLEXIBLE_SHADOW_OFFSET kPPC64_ShadowOffset64
 | 
					 | 
				
			||||||
#   elif SANITIZER_MAC
 | 
					 | 
				
			||||||
#    define FLEXIBLE_SHADOW_OFFSET kDefaultShadowOffset64
 | 
					 | 
				
			||||||
#   else
 | 
					 | 
				
			||||||
#    define FLEXIBLE_SHADOW_OFFSET kDefaultShort64bitShadowOffset
 | 
					 | 
				
			||||||
#   endif
 | 
					 | 
				
			||||||
#  endif
 | 
					 | 
				
			||||||
# endif
 | 
					 | 
				
			||||||
SANITIZER_INTERFACE_ATTRIBUTE uptr __asan_mapping_scale = FLEXIBLE_SHADOW_SCALE;
 | 
					 | 
				
			||||||
SANITIZER_INTERFACE_ATTRIBUTE uptr __asan_mapping_offset =
 | 
					 | 
				
			||||||
    FLEXIBLE_SHADOW_OFFSET;
 | 
					 | 
				
			||||||
#endif  // ASAN_FLEXIBLE_MAPPING_AND_OFFSET
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
extern "C" {
 | 
					extern "C" {
 | 
				
			||||||
// Set specific ASan options for uninstrumented unittest.
 | 
					// Set specific ASan options for uninstrumented unittest.
 | 
				
			||||||
const char* __asan_default_options() {
 | 
					const char* __asan_default_options() {
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -150,16 +150,14 @@ CFLAGS.10.4		:= $(CFLAGS) $(OSX_DEPLOYMENT_ARGS)
 | 
				
			||||||
CFLAGS.asan_osx_dynamic := \
 | 
					CFLAGS.asan_osx_dynamic := \
 | 
				
			||||||
	$(CFLAGS) -mmacosx-version-min=10.6 -fno-builtin \
 | 
						$(CFLAGS) -mmacosx-version-min=10.6 -fno-builtin \
 | 
				
			||||||
	-gline-tables-only \
 | 
						-gline-tables-only \
 | 
				
			||||||
	-DMAC_INTERPOSE_FUNCTIONS=1 \
 | 
						-DMAC_INTERPOSE_FUNCTIONS=1
 | 
				
			||||||
  -DASAN_FLEXIBLE_MAPPING_AND_OFFSET=1
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
CFLAGS.asan_iossim_dynamic := \
 | 
					CFLAGS.asan_iossim_dynamic := \
 | 
				
			||||||
	$(CFLAGS) -mios-simulator-version-min=7.0 \
 | 
						$(CFLAGS) -mios-simulator-version-min=7.0 \
 | 
				
			||||||
        -isysroot $(IOSSIM_SDK_PATH) \
 | 
					        -isysroot $(IOSSIM_SDK_PATH) \
 | 
				
			||||||
        -fno-builtin \
 | 
					        -fno-builtin \
 | 
				
			||||||
	-gline-tables-only \
 | 
						-gline-tables-only \
 | 
				
			||||||
	-DMAC_INTERPOSE_FUNCTIONS=1 \
 | 
						-DMAC_INTERPOSE_FUNCTIONS=1
 | 
				
			||||||
  -DASAN_FLEXIBLE_MAPPING_AND_OFFSET=1
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
CFLAGS.ubsan_osx	:= $(CFLAGS) -mmacosx-version-min=10.6 -fno-builtin
 | 
					CFLAGS.ubsan_osx	:= $(CFLAGS) -mmacosx-version-min=10.6 -fno-builtin
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -94,10 +94,8 @@ CFLAGS.profile-i386 := $(CFLAGS) -m32
 | 
				
			||||||
CFLAGS.profile-x86_64 := $(CFLAGS) -m64
 | 
					CFLAGS.profile-x86_64 := $(CFLAGS) -m64
 | 
				
			||||||
CFLAGS.san-i386 := $(CFLAGS) -m32 $(SANITIZER_CFLAGS) -fno-rtti
 | 
					CFLAGS.san-i386 := $(CFLAGS) -m32 $(SANITIZER_CFLAGS) -fno-rtti
 | 
				
			||||||
CFLAGS.san-x86_64 := $(CFLAGS) -m64 $(SANITIZER_CFLAGS) -fno-rtti
 | 
					CFLAGS.san-x86_64 := $(CFLAGS) -m64 $(SANITIZER_CFLAGS) -fno-rtti
 | 
				
			||||||
CFLAGS.asan-i386 := $(CFLAGS) -m32 $(SANITIZER_CFLAGS) -fno-rtti \
 | 
					CFLAGS.asan-i386 := $(CFLAGS) -m32 $(SANITIZER_CFLAGS) -fno-rtti
 | 
				
			||||||
                    -DASAN_FLEXIBLE_MAPPING_AND_OFFSET=1
 | 
					CFLAGS.asan-x86_64 := $(CFLAGS) -m64 $(SANITIZER_CFLAGS) -fno-rtti
 | 
				
			||||||
CFLAGS.asan-x86_64 := $(CFLAGS) -m64 $(SANITIZER_CFLAGS) -fno-rtti \
 | 
					 | 
				
			||||||
                    -DASAN_FLEXIBLE_MAPPING_AND_OFFSET=1
 | 
					 | 
				
			||||||
CFLAGS.tsan-x86_64 := $(CFLAGS) -m64 $(SANITIZER_CFLAGS) -fno-rtti
 | 
					CFLAGS.tsan-x86_64 := $(CFLAGS) -m64 $(SANITIZER_CFLAGS) -fno-rtti
 | 
				
			||||||
CFLAGS.msan-x86_64 := $(CFLAGS) -m64 $(SANITIZER_CFLAGS) -fno-rtti
 | 
					CFLAGS.msan-x86_64 := $(CFLAGS) -m64 $(SANITIZER_CFLAGS) -fno-rtti
 | 
				
			||||||
CFLAGS.ubsan-i386 := $(CFLAGS) -m32 $(SANITIZER_CFLAGS) -fno-rtti
 | 
					CFLAGS.ubsan-i386 := $(CFLAGS) -m32 $(SANITIZER_CFLAGS) -fno-rtti
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
		Reference in New Issue