Skip site navigation (1)Skip section navigation (2)
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>