+ mortimer@ Krystian Lewandowski <k.lewandow...@me.com> wrote:
> Based on information from Dimitry Andric: > https://bugs.llvm.org/show_bug.cgi?id=42478 > - it does happen only for -triple aarch64-unknown-openbsd > - with -stack-protector 2 > I tried to find a reason for this behaviour. Please note I have no knowledge > about LLVM internals, dont trust me, double check. > > I'll point to OpenBSD (master branch) github links, I hope its fine with you. > > 1. So the crash is caused directly by: > https://github.com/openbsd/src/blob/master/gnu/llvm/lib/Target/AArch64/AArch64InstrInfo.cpp#L1500 > where getValue() is called on NULL pointer. > > 2. I think it is caused by Global being NULL here: > https://github.com/openbsd/src/blob/master/gnu/llvm/lib/CodeGen/GlobalISel/IRTranslator.cpp#L766 > It should be returned from provided module as __stack_chk_guard function. > https://github.com/openbsd/src/blob/master/gnu/llvm/lib/CodeGen/TargetLoweringBase.cpp#L1658 > > 3. This "__stack_chk_guard" function should be registered here: > https://github.com/openbsd/src/blob/master/gnu/llvm/lib/CodeGen/StackProtector.cpp#L341 > by > insertSSPDeclarations() call but this piece of code is never executed because > getStackGuard() returns earlier - getIRStackGuard() returns non-NULL value: > https://github.com/openbsd/src/blob/master/gnu/llvm/lib/CodeGen/TargetLoweringBase.cpp#L1635 > > Im not sure which one is valid: > a. with TargetLoweringBase::getIRStackGuard() returning non-NULL value, > TargetLoweringBase::getSDagStackGuard() should never be called by > IRTranslator::getStackGuard() and this flow should be handled in a different > manner > b. or insertSSPDeclarations() should be called in > StackProtector::getStackGuard() > in both cases > > I was able to get rid of crash by the diff below (b. case). > > -- > Krystian > > Index: StackProtector.cpp > =================================================================== > RCS file: /cvs/src/gnu/llvm/lib/CodeGen/StackProtector.cpp,v > retrieving revision 1.8 > diff -u -p -r1.8 StackProtector.cpp > --- StackProtector.cpp 23 Jun 2019 22:05:12 -0000 1.8 > +++ StackProtector.cpp 5 Jul 2019 20:41:17 -0000 > @@ -322,8 +322,10 @@ bool StackProtector::RequiresStackProtec > static Value *getStackGuard(const TargetLoweringBase *TLI, Module *M, > IRBuilder<> &B, > bool *SupportsSelectionDAGSP = nullptr) { > - if (Value *Guard = TLI->getIRStackGuard(B)) > + if (Value *Guard = TLI->getIRStackGuard(B)) { > + TLI->insertSSPDeclarations(*M); > return B.CreateLoad(Guard, true, "StackGuard"); > + } > > // Use SelectionDAG SSP handling, since there isn't an IR guard. > // > > > Wiadomość napisana przez Patrick Wildt <patr...@blueri.se> w dniu > > 05.07.2019, o godz. 09:02: > > > > On Tue, Jul 02, 2019 at 02:07:22PM +0200, Krystian Lewandowski wrote: > >> > >>> Wiadomość napisana przez Krystian Lewandowski <k.lewandow...@me.com> w > >>> dniu 01.07.2019, o godz. 21:50: > >>> > >>> I thought it would be a good idea to rebuild cross-tools because of LLVM > >>> version bump > >>> but - with recent src - I'm unable to do so: > >>> $ doas make -f Makefile.cross TARGET=${target} CROSSDIR="${destdir}" > >>> cross-tools > >>> fails with: > >>> aarch64-unknown-openbsd6: error: unable to execute command: Segmentation > >>> fault > >>> (core dumped) > >>> > >>> With updated /etc/mk.conf: > >>> DEBUG=-gline-tables-only > >>> (I think it’s unused for clang but disables stripping during > >>> installation?) > >>> > >>> and src/gnu/usr.bin/clang/Makefile.inc: > >>> CPPFLAGS+= -DNDEBUG -gline-tables-only > >>> (I think it’s similar to what cmake RelWithDebugInfo does.) > >>> > >>> I was eventually able to get debug symbols. More details in attached > >>> files. > >>> I reproduced this crash on other machine. > >>> > >>> Is this something for LLVM team to look at? > >>> > >>> If anyone would like to give it a quick try, then please just follow > >>> „Setup” section from: > >>> https://github.com/elewarr/openbsd-arm64-src-dev > >>> > >>> -- > >>> Krystian > >>> > >>> <cxa_demangle-042165.cpp.tgz><crash_log.txt><cxa_demangle-042165.sh><stack.txt> > >>> > >>> > >> > >> Reported to LLVM: https://bugs.llvm.org/show_bug.cgi?id=42478 > >> > >> -- > >> Krystian > >> > > > > I see this as well, what a bummer. What I can see is that if I use my > > make wrapper to compile the files, and -j1, it doesn't crash. I wonder > > what the big difference is. > > >