Date: Tue, 12 Mar 2019 12:20:28 -0700 From: Mark Millard <marklmi@yahoo.com> To: FreeBSD PowerPC ML <freebsd-ppc@freebsd.org>, FreeBSD Toolchain <freebsd-toolchain@freebsd.org> Subject: powerpc64 head -r345044: WITH_LLVM_LIBUNWIND= based buildworld leads to thrown C++ exceptions segmentation faulting Message-ID: <36A485AF-E786-4BDB-8DD8-863BAB38D359@yahoo.com>
next in thread | raw e-mail | index | archive | help
[I sometimes experiment with building powerpc64 (and 32-bit) via more modern toolchains, here a amd64->powerpc64 cross build via system-clang (so 8.0.0).] buildworld with WITH_LLVM_LIBUNWIND=3D completes for powerpc64 (but not 32-bit powerpc). However, for a system installed from such for pwoerpc64, the following program (for example) gets a segmentation fault: # more ~/c_tests/exception_test.cpp=20 #include <exception> int main(void) { try { throw std::exception(); } catch (std::exception& e) {} return 0; } (Note: the same a.out works under a WITHOUT_LLVM_LIBUNWIND=3D environment, that was patched for DW_CFA_remember_state and DW_CFA_restore_state handling, with the system built via devel/powerpc64-xtoolchain-gcc related materials. So the failure is on the system library does of things for the WITH_LLVM_LIBUNWIND=3D context.) Unfortunately: A) devel/gdb makes extensive use of thrown C++ exceptions and so does not work for a powerpc64 system based on WITH_LLVM_LIBUNWIND=3D . B) The world built is not using dwarf-2 so /usr/libexec/gdb is not handy/useful. C) CFLAGS+=3D-gdwarf-2 leads to system-clang having an Abort trap during buildworld's compile of gcrt1.s . (Reference material later, below.) D) lldb crashes in llvm_unreachable in lldb::RegisterContextSP FreeBSDThread::GetRegisterContext() on powerpc64. (Reference material later, below.) So I've not managed to check the backtrace for the segmentation fault in the short example. For reference . . . For (C) ( -gdwarf-2 use ): QUOTES (gdb) bt #0 thr_kill () at thr_kill.S:3 #1 0x000000000474afcf in __raise (s=3D6) at = /usr/src/lib/libc/gen/raise.c:52 #2 0x00000000046cd386 in abort () at = /usr/src/lib/libc/stdlib/abort.c:79 #3 0x00000000047394ba in __assert (func=3D<optimized out>, = file=3D<optimized out>, line=3D<optimized out>, failedexpr=3D<optimized = out>) at /usr/src/lib/libc/gen/assert.c:51 #4 0x000000000429aa9f in resetRootFile () at = /usr/src/contrib/llvm/include/llvm/MC/MCDwarf.h:316 #5 parseDirectiveFile () at = /usr/src/contrib/llvm/lib/MC/MCParser/AsmParser.cpp:3377 #6 parseStatement () at = /usr/src/contrib/llvm/lib/MC/MCParser/AsmParser.cpp:2023 #7 0x000000000428cc12 in Run () at = /usr/src/contrib/llvm/lib/MC/MCParser/AsmParser.cpp:884 #8 0x000000000163c649 in ExecuteAssembler () at = /usr/src/contrib/llvm/tools/clang/tools/driver/cc1as_main.cpp:503 #9 cc1as_main () at = /usr/src/contrib/llvm/tools/clang/tools/driver/cc1as_main.cpp:589 #10 0x0000000001643d10 in ExecuteCC1Tool () at = /usr/src/contrib/llvm/tools/clang/tools/driver/driver.cpp:312 #11 main () at = /usr/src/contrib/llvm/tools/clang/tools/driver/driver.cpp:382 void resetRootFile() { assert(Header.MCDwarfFiles.empty()); Header.RootFile.Name.clear(); Header.resetMD5Usage(); Header.HasSource =3D false; } --- lib/csu__L --- cc: error: unable to execute command: Abort trap (core dumped) cc: error: clang integrated assembler command failed due to signal (use = -v to see invocation) FreeBSD clang version 8.0.0 (branches/release_80 355677) (based on LLVM = 8.0.0) Target: powerpc64-unknown-freebsd13.0 Thread model: posix InstalledDir: /usr/bin cc: note: diagnostic msg: PLEASE submit a bug report to = https://bugs.freebsd.org/submit/ and include the crash backtrace, = preprocessed source, and associated run script. cc: note: diagnostic msg: Error generating preprocessed source(s) - no = preprocessable inputs. *** [gcrt1.o] Error code 254 make[5]: stopped in /usr/src/lib/csu/powerpc64 .ERROR_TARGET=3D'gcrt1.o' = .ERROR_META_FILE=3D'/usr/obj/powerpc64vtsc_clang_altbinutils/powerpc.power= pc64/usr/src/powerpc.powerpc64/lib/csu/powerpc64/gcrt1.o.meta' .MAKE.LEVEL=3D'5' MAKEFILE=3D'' .MAKE.MODE=3D'meta missing-filemon=3Dyes missing-meta=3Dyes silent=3Dyes = verbose' _ERROR_CMD=3D'cc -gdwarf-2 -target powerpc64-unknown-freebsd13.0 = --sysroot=3D/usr/obj/powerpc64vtsc_clang_altbinutils/powerpc.powerpc64/usr= /src/powerpc.powerpc64/tmp = -B/usr/local/powerpc64-unknown-freebsd13.0/bin/ -O2 -pipe = -I/usr/src/lib/csu/common -I/usr/src/lib/libc/include -mlongcall = -DCRT_IRELOC_SUPPRESS -std=3Dgnu99 -Wsystem-headers -Wall = -Wno-format-y2k -W -Wno-unused-parameter -Wstrict-prototypes = -Wmissing-prototypes -Wpointer-arith -Wreturn-type -Wcast-qual = -Wwrite-strings -Wswitch -Wshadow -Wunused-parameter -Wcast-align = -Wchar-subscripts -Winline -Wnested-externs -Wredundant-decls = -Wold-style-definition -Wno-pointer-sign -Wthread-safety -Wno-empty-body = -Wno-string-plus-int -Wno-unused-const-variable -Qunused-arguments -c = -o gcrt1.o gcrt1.s;' .CURDIR=3D'/usr/src/lib/csu/powerpc64' .MAKE=3D'make' = .OBJDIR=3D'/usr/obj/powerpc64vtsc_clang_altbinutils/powerpc.powerpc64/usr/= src/powerpc.powerpc64/lib/csu/powerpc64' .TARGETS=3D'all' = DESTDIR=3D'/usr/obj/powerpc64vtsc_clang_altbinutils/powerpc.powerpc64/usr/= src/powerpc.powerpc64/tmp' LD_LIBRARY_PATH=3D'' MACHINE=3D'powerpc' MACHINE_ARCH=3D'powerpc64' MAKEOBJDIRPREFIX=3D'' MAKESYSPATH=3D'/usr/src/share/mk' MAKE_VERSION=3D'20181221' = PATH=3D'/usr/obj/powerpc64vtsc_clang_altbinutils/powerpc.powerpc64/usr/src= /powerpc.powerpc64/tmp/usr/sbin:/usr/obj/powerpc64vtsc_clang_altbinutils/p= owerpc.powerpc64/usr/src/powerpc.powerpc64/tmp/usr/bin:/usr/obj/powerpc64v= tsc_clang_altbinutils/powerpc.powerpc64/usr/src/powerpc.powerpc64/tmp/lega= cy/usr/sbin:/usr/obj/powerpc64vtsc_clang_altbinutils/powerpc.powerpc64/usr= /src/powerpc.powerpc64/tmp/legacy/usr/bin:/usr/obj/powerpc64vtsc_clang_alt= binutils/powerpc.powerpc64/usr/src/powerpc.powerpc64/tmp/legacy/bin::/sbin= :/bin:/usr/sbin:/usr/bin' SRCTOP=3D'/usr/src' = OBJTOP=3D'/usr/obj/powerpc64vtsc_clang_altbinutils/powerpc.powerpc64/usr/s= rc/powerpc.powerpc64' .MAKE.MAKEFILES=3D'/usr/src/share/mk/sys.mk = /usr/src/share/mk/local.sys.env.mk /usr/src/share/mk/src.sys.env.mk = /root/src.configs/src.conf.powerpc64-clang_altbinutils-bootstrap.amd64-hos= t /usr/src/share/mk/bsd.mkopt.mk /usr/src/share/mk/src.sys.obj.mk = /usr/src/share/mk/auto.obj.mk /usr/src/share/mk/bsd.suffixes.mk = /root/src.configs/make.conf /usr/src/share/mk/local.sys.mk = /usr/src/share/mk/src.sys.mk /dev/null = /usr/src/lib/csu/powerpc64/Makefile /usr/src/share/mk/bsd.lib.mk = /usr/src/share/mk/bsd.init.mk /usr/src/share/mk/bsd.opts.mk = /usr/src/share/mk/bsd.cpu.mk /usr/src/share/mk/local.init.mk = /usr/src/share/mk/src.init.mk /usr/src/lib/csu/powerpc64/../Makefile.inc = /usr/src/share/mk/src.opts.mk /usr/src/share/mk/bsd.own.mk = /usr/src/share/mk/bsd.compiler.mk /usr/src/share/mk/bsd.linker.mk = /usr/src/lib/csu/powerpc64/../../Makefile.inc = /usr/src/share/mk/bsd.libnames.mk /usr/src/share/mk/src.libnames.mk = /usr/src/share/mk/bsd.symver.mk /usr/src/share/mk/bsd.nls.mk = /usr/src/share/mk/bsd.confs.mk /usr/src/share/mk/bsd.files.mk = /usr/src/share/mk/bsd.dirs.mk /usr/src/share/mk/bsd.incs.mk = /usr/src/share/mk/bsd.links.mk /usr/src/share/mk/bsd.dep.mk = /usr/src/share/mk/bsd.clang-analyze.mk /usr/src/share/mk/bsd.obj.mk = /usr/src/share/mk/bsd.subdir.mk /usr/src/share/mk/bsd.sys.mk' .PATH=3D'. /usr/src/lib/csu/powerpc64 /usr/src/lib/csu/common' 1 error END QUOTES For (D) (lldb): QUOTES CPU not supported UNREACHABLE executed at = /usr/src/contrib/llvm/tools/lldb/source/Plugins/Process/FreeBSD/FreeBSDThr= ead.cpp:192! Abort trap (core dumped) (gdb) bt #0 0x0000000813715208 in .__sys_thr_kill () at thr_kill.S:3 #1 0x00000008137147cc in __raise (s=3D<optimized out>) at = /usr/src/lib/libc/gen/raise.c:52 #2 0x000000081366b5d8 in abort () at = /usr/src/lib/libc/stdlib/abort.c:79 #3 0x0000000011df6fb8 in llvm::llvm_unreachable_internal () at = /usr/src/contrib/llvm/lib/Support/ErrorHandling.cpp:222 #4 0x00000000103aaaf8 in FreeBSDThread::GetRegisterContext () at = /usr/src/contrib/llvm/tools/lldb/source/Plugins/Process/FreeBSD/FreeBSDThr= ead.cpp:192 #5 0x00000000105807d4 in lldb_private::Thread::SetupForResume () at = /usr/src/contrib/llvm/tools/lldb/source/Target/Thread.cpp:613 #6 0x0000000010571bc8 in lldb_private::ThreadList::WillResume () at = /usr/src/contrib/llvm/tools/lldb/source/Target/ThreadList.cpp:541 #7 0x00000000105da23c in lldb_private::Process::PrivateResume () at = /usr/src/contrib/llvm/tools/lldb/source/Target/Process.cpp:3281 #8 0x00000000105a00c8 in lldb_private::Target::Launch () at = /usr/src/contrib/llvm/tools/lldb/source/Target/Target.cpp:2922 #9 0x000000001073f550 in CommandObjectProcessLaunch::DoExecute () at = /usr/src/contrib/llvm/tools/lldb/source/Commands/CommandObjectProcess.cpp:= 221 #10 0x00000000106c36c4 in lldb_private::CommandObjectParsed::Execute () = at = /usr/src/contrib/llvm/tools/lldb/source/Interpreter/CommandObject.cpp:975 #11 0x00000000106d8b44 in = lldb_private::CommandInterpreter::HandleCommand () at = /usr/src/contrib/llvm/tools/lldb/source/Interpreter/CommandInterpreter.cpp= :1761 #12 0x00000000106da0a0 in = lldb_private::CommandInterpreter::IOHandlerInputComplete () at = /usr/src/contrib/llvm/tools/lldb/source/Interpreter/CommandInterpreter.cpp= :2801 #13 0x00000000107c0a08 in lldb_private::IOHandlerEditline::Run () at = /usr/src/contrib/llvm/tools/lldb/source/Core/IOHandler.cpp:558 #14 0x0000000010346e5c in lldb_private::Debugger::ExecuteIOHandlers () = at /usr/src/contrib/llvm/tools/lldb/source/Core/Debugger.cpp:988 #15 0x00000000106c8ddc in = lldb_private::CommandInterpreter::RunCommandInterpreter () at = /usr/src/contrib/llvm/tools/lldb/source/Interpreter/CommandInterpreter.cpp= :3003 #16 0x000000001034feb4 in lldb::SBDebugger::RunCommandInterpreter () at = /usr/src/contrib/llvm/tools/lldb/source/API/SBDebugger.cpp:935 #17 0x00000000101de878 in Driver::MainLoop () at = /usr/src/contrib/llvm/tools/lldb/tools/driver/Driver.cpp:756 #18 0x00000000101a0088 in main () at = /usr/src/contrib/llvm/tools/lldb/tools/driver/Driver.cpp:936 lldb::RegisterContextSP FreeBSDThread::GetRegisterContext() { if (!m_reg_context_sp) { m_posix_thread =3D nullptr; RegisterInfoInterface *reg_interface =3D nullptr; const ArchSpec &target_arch =3D = GetProcess()->GetTarget().GetArchitecture(); switch (target_arch.GetMachine()) { case llvm::Triple::aarch64: reg_interface =3D new RegisterInfoPOSIX_arm64(target_arch); break; case llvm::Triple::arm: reg_interface =3D new RegisterInfoPOSIX_arm(target_arch); break; case llvm::Triple::ppc: #ifndef __powerpc64__ reg_interface =3D new = RegisterContextFreeBSD_powerpc32(target_arch); break; #endif case llvm::Triple::ppc64: reg_interface =3D new = RegisterContextFreeBSD_powerpc64(target_arch); break; case llvm::Triple::mips64: reg_interface =3D new RegisterContextFreeBSD_mips64(target_arch); break; case llvm::Triple::x86: reg_interface =3D new RegisterContextFreeBSD_i386(target_arch); break; case llvm::Triple::x86_64: reg_interface =3D new RegisterContextFreeBSD_x86_64(target_arch); break; default: llvm_unreachable("CPU not supported"); } END QUOTES. =3D=3D=3D Mark Millard marklmi at yahoo.com ( dsl-only.net went away in early 2018-Mar)
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?36A485AF-E786-4BDB-8DD8-863BAB38D359>