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 avoid the issue by defaulting to -mstackrealign, just like gcc.
Tested on amd64-pc-solaris2.11.
stackAlignment is initialized to 4 in the header, so stackAlignment = Align(4) here is a no-op.