mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2024-11-25 20:23:11 +01:00
2ffcbfec2c
Programs with very large __llvm_covmap sections may fail to link on Darwin because because of out-of-range 32-bit RIP relative references. It isn't possible to work around this by using the large code model because it isn't supported on Darwin. One solution is to move the __llvm_covmap section past the end of the __DATA segment. === Testing === In addition to check-{llvm,clang,profile}, I performed a link test on a simple object after injecting ~4GB of padding into __llvm_covmap: @__llvm_coverage_padding = internal constant [4000000000 x i8] zeroinitializer, section "__LLVM_COV,__llvm_covmap", align 8 (This test is too expensive to check-in.) === Backwards Compatibility === This patch should not pose any backwards-compatibility concerns. LLVM is expected to scan all of the sections in a binary for __llvm_covmap, so changing its segment shouldn't affect anything. I double-checked this by loading coverage produced by an unpatched compiler with a patched llvm-cov. Suggested by Nick Kledzik. llvm-svn: 285360
24 lines
1.2 KiB
LLVM
24 lines
1.2 KiB
LLVM
; This test checks that we are not instrumenting unnecessary globals
|
|
; (llvm.metadata and other llvm internal globals).
|
|
; RUN: opt < %s -asan -asan-module -S | FileCheck %s
|
|
|
|
target datalayout = "e-m:e-i64:64-f80:128-n8:16:32:64-S128"
|
|
target triple = "x86_64-apple-macosx10.10.0"
|
|
|
|
@foo_noinst = private global [19 x i8] c"scannerWithString:\00", section "__TEXT,__objc_methname,cstring_literals"
|
|
|
|
; CHECK: @foo_noinst = private global [19 x i8] c"scannerWithString:\00", section "__TEXT,__objc_methname,cstring_literals"
|
|
|
|
@.str_noinst = private unnamed_addr constant [4 x i8] c"aaa\00", section "llvm.metadata"
|
|
@.str_noinst_old_cov = private unnamed_addr constant [4 x i8] c"aaa\00", section "__DATA,__llvm_covmap"
|
|
@.str_noinst_new_cov = private unnamed_addr constant [4 x i8] c"aaa\00", section "__LLVM_COV,__llvm_covmap"
|
|
@.str_noinst_LLVM = private unnamed_addr constant [4 x i8] c"aaa\00", section "__LLVM,__not_visible"
|
|
@.str_inst = private unnamed_addr constant [4 x i8] c"aaa\00"
|
|
|
|
; CHECK-NOT: {{asan_gen.*str_noinst}}
|
|
; CHECK-NOT: {{asan_gen.*str_noinst_old_cov}}
|
|
; CHECK-NOT: {{asan_gen.*str_noinst_new_cov}}
|
|
; CHECK-NOT: {{asan_gen.*str_noinst_LLVM}}
|
|
; CHECK: {{asan_gen.*str_inst}}
|
|
; CHECK: @asan.module_ctor
|