On Solaris/x86, several hundred 32-bit tests `FAIL`, all in the same way:
env ASAN_OPTIONS=halt_on_error=false ./halt_on_error_suppress_equal_pcs.cpp.tmp
Segmentation Fault (core dumped)
They segfault during startup:
Thread 2 received signal SIGSEGV, Segmentation fault.
[Switching to Thread 1 (LWP 1)]
0x080f21f0 in __sanitizer::internal_mmap(void*, unsigned long, int, int, int, unsigned long long) () at /vol/llvm/src/llvm-project/dist/compiler-rt/lib/sanitizer_common/sanitizer_solaris.cpp:65
65 int prot, int flags, int fd, OFF_T offset) {
1: x/i $pc
=> 0x80f21f0 <_ZN11__sanitizer13internal_mmapEPvmiiiy+16>: movaps 0x30(%esp),%xmm0
(gdb) p/x $esp
$3 = 0xfeffd488
The problem is that `movaps` expects 16-byte alignment, while 32-bit Solaris/x86
only guarantees 4-byte alignment following the i386 psABI.
This patch updates `X86Subtarget::initSubtargetFeatures` accordingly,
handles Solaris/x86 in the corresponding testcase, and allows for some
variation in address alignment in
`compiler-rt/test/ubsan/TestCases/TypeCheck/vptr.cpp`.
Tested on `amd64-pc-solaris2.11` and `x86_64-pc-linux-gnu`.
Differential Revision: https://reviews.llvm.org/D87615
36 lines
1.6 KiB
LLVM
36 lines
1.6 KiB
LLVM
; RUN: llc < %s -mcpu=generic -mtriple=i386-linux | FileCheck %s -check-prefix=LINUX-I386
|
|
; RUN: llc < %s -mcpu=generic -mtriple=i386-kfreebsd | FileCheck %s -check-prefix=KFREEBSD-I386
|
|
; RUN: llc < %s -mcpu=generic -mtriple=i386-netbsd | FileCheck %s -check-prefix=NETBSD-I386
|
|
; RUN: llc < %s -mcpu=generic -mtriple=i686-apple-darwin8 | FileCheck %s -check-prefix=DARWIN-I386
|
|
; RUN: llc < %s -mcpu=generic -mtriple=i386-pc-solaris2.11 | FileCheck %s -check-prefix=SOLARIS-I386
|
|
; RUN: llc < %s -mcpu=generic -mtriple=x86_64-linux | FileCheck %s -check-prefix=LINUX-X86_64
|
|
; RUN: llc < %s -mcpu=generic -mtriple=x86_64-kfreebsd | FileCheck %s -check-prefix=KFREEBSD-X86_64
|
|
; RUN: llc < %s -mcpu=generic -mtriple=x86_64-netbsd | FileCheck %s -check-prefix=NETBSD-X86_64
|
|
; RUN: llc < %s -mcpu=generic -mtriple=x86_64-apple-darwin8 | FileCheck %s -check-prefix=DARWIN-X86_64
|
|
; RUN: llc < %s -mcpu=generic -mtriple=x86_64-pc-solaris2.11 | FileCheck %s -check-prefix=SOLARIS-X86_64
|
|
|
|
define i32 @test() nounwind {
|
|
entry:
|
|
call void @test2()
|
|
ret i32 0
|
|
|
|
; LINUX-I386: subl $12, %esp
|
|
; KFREEBSD-I386: subl $12, %esp
|
|
; DARWIN-I386: subl $12, %esp
|
|
; NETBSD-I386-NOT: subl {{.*}}, %esp
|
|
; SOLARIS-I386-NOT: subl {{.*}}, %esp
|
|
|
|
; LINUX-X86_64: pushq %{{.*}}
|
|
; LINUX-X86_64-NOT: subq {{.*}}, %rsp
|
|
; DARWIN-X86_64: pushq %{{.*}}
|
|
; DARWIN-X86_64-NOT: subq {{.*}}, %rsp
|
|
; NETBSD-X86_64: pushq %{{.*}}
|
|
; NETBSD-X86_64-NOT: subq {{.*}}, %rsp
|
|
; SOLARIS-X86_64: pushq %{{.*}}
|
|
; SOLARIS-X86_64-NOT: subq {{.*}}, %rsp
|
|
; KFREEBSD-X86_64: pushq %{{.*}}
|
|
; KFREEBSD-X86_64-NOT: subq {{.*}}, %rsp
|
|
}
|
|
|
|
declare void @test2()
|