Re: [PATCH] Native spinlock support on RISC-V

From: Thomas Munro <thomas(dot)munro(at)gmail(dot)com>
To: Andres Freund <andres(at)anarazel(dot)de>
Cc: Christoph Berg <myon(at)debian(dot)org>, Tom Lane <tgl(at)sss(dot)pgh(dot)pa(dot)us>, Marek Szuba <marecki(at)gentoo(dot)org>, PostgreSQL Development <pgsql-hackers(at)postgresql(dot)org>
Subject: Re: [PATCH] Native spinlock support on RISC-V
Date: 2021-11-03 21:06:34
Message-ID: CA+hUKGKH2Xg0GBqrBfT6qdxjXFpAWhCfC18bWROoqrZTwA_uBA@mail.gmail.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-hackers

On Wed, Nov 3, 2021 at 5:41 PM Thomas Munro <thomas(dot)munro(at)gmail(dot)com> wrote:
> 'generic' is not a recognized processor for this target (ignoring processor)

I still don't know what's wrong but I spent 20 minutes searching for
more clues this morning...

First, 'generic' is coming from LLVMGetHostCPUName(), and yet it's not
accepted by LLVMCreateTargetMachine(). Ok then, let's try something
else:

$ clang12 --print-supported-cpus

Target: riscv64-portbld-freebsd13.0
Thread model: posix
InstalledDir: /usr/local/llvm12/bin
Available CPUs for this target:

generic-rv32
generic-rv64
rocket-rv32
rocket-rv64
sifive-7-rv32
sifive-7-rv64
sifive-e31
sifive-e76
sifive-u54
sifive-u74

So I hacked my copy of PostgreSQL thusly:

+ cpu = LLVMCreateMessage("generic-rv64");

... and now I get:

2021-11-03 20:27:28.487 UTC [26880] FATAL: fatal llvm error:
Relocation type not implemented yet!

Taking that at face value, instead of LLVMRelocDefault, I tried a
couple of other values like LLVMRelocDynamicNoPic, but same result.
So I attached a debugger to see the stack producing the error, and
huh, I see a clue that it's confusing this architecture with SystemZ
(= IBM mainframe).

(gdb) break fatal_llvm_error_handler
Function "fatal_llvm_error_handler" not defined.
Make breakpoint pending on future shared library load? (y or [n]) y
Breakpoint 1 (fatal_llvm_error_handler) pending.
(gdb) cont
Continuing.

Breakpoint 1, fatal_llvm_error_handler (user_data=0x0,
reason="Relocation type not implemented yet!", gen_crash_diag=true) at
llvmjit_error.cpp:147
147 ereport(FATAL,
(gdb) bt
#0 fatal_llvm_error_handler (user_data=0x0, reason="Relocation type
not implemented yet!", gen_crash_diag=true) at llvmjit_error.cpp:147
#1 0x000000004dc3729a in llvm::report_fatal_error(llvm::Twine const&,
bool) () from /usr/local/llvm12/lib/libLLVM-12.so
#2 0x000000004dc371d0 in llvm::report_fatal_error(char const*, bool)
() from /usr/local/llvm12/lib/libLLVM-12.so
#3 0x000000004ef61010 in
llvm::RuntimeDyldELF::resolveSystemZRelocation(llvm::SectionEntry
const&, unsigned long, unsigned long, unsigned int, long) () from
/usr/local/llvm12/lib/libLLVM-12.so
#4 0x000000004ef547c6 in
llvm::RuntimeDyldImpl::applyExternalSymbolRelocations(llvm::StringMap<llvm::JITEvaluatedSymbol,
llvm::MallocAllocator>) () from /usr/local/llvm12/lib/libLLVM-12.so
#5 0x000000004ef54fb4 in ?? () from /usr/local/llvm12/lib/libLLVM-12.so
#6 0x000000004ef54be6 in
llvm::RuntimeDyldImpl::finalizeAsync(std::__1::unique_ptr<llvm::RuntimeDyldImpl,
std::__1::default_delete<llvm::RuntimeDyldImpl> >,
llvm::unique_function<void
(llvm::object::OwningBinary<llvm::object::ObjectFile>,
std::__1::unique_ptr<llvm::RuntimeDyld::LoadedObjectInfo,
std::__1::default_delete<llvm::RuntimeDyld::LoadedObjectInfo> >,
llvm::Error)>, llvm::object::OwningBinary<llvm::object::ObjectFile>,
std::__1::unique_ptr<llvm::RuntimeDyld::LoadedObjectInfo,
std::__1::default_delete<llvm::RuntimeDyld::LoadedObjectInfo> >) ()
from /usr/local/llvm12/lib/libLLVM-12.so
#7 0x000000004ef55e2a in
llvm::jitLinkForORC(llvm::object::OwningBinary<llvm::object::ObjectFile>,
llvm::RuntimeDyld::MemoryManager&, llvm::JITSymbolResolver&, bool,
llvm::unique_function<llvm::Error (llvm::object::ObjectFile const&,
llvm::RuntimeDyld::LoadedObjectInfo&, std::__1::map<llvm::StringRef,
llvm::JITEvaluatedSymbol, std::__1::less<llvm::StringRef>,
std::__1::allocator<std::__1::pair<llvm::StringRef const,
llvm::JITEvaluatedSymbol> > >)>, llvm::unique_function<void
(llvm::object::OwningBinary<llvm::object::ObjectFile>,
std::__1::unique_ptr<llvm::RuntimeDyld::LoadedObjectInfo,
std::__1::default_delete<llvm::RuntimeDyld::LoadedObjectInfo> >,
llvm::Error)>) ()
from /usr/local/llvm12/lib/libLLVM-12.so
#8 0x000000004ef421ea in
llvm::orc::RTDyldObjectLinkingLayer::emit(std::__1::unique_ptr<llvm::orc::MaterializationResponsibility,
std::__1::default_delete<llvm::orc::MaterializationResponsibility> >,
std::__1::unique_ptr<llvm::MemoryBuffer,
std::__1::default_delete<llvm::MemoryBuffer> >) () from
/usr/local/llvm12/lib/libLLVM-12.so
#9 0x000000004ef3e946 in
llvm::orc::ObjectTransformLayer::emit(std::__1::unique_ptr<llvm::orc::MaterializationResponsibility,
std::__1::default_delete<llvm::orc::MaterializationResponsibility> >,
std::__1::unique_ptr<llvm::MemoryBuffer,
std::__1::default_delete<llvm::MemoryBuffer> >) () from
/usr/local/llvm12/lib/libLLVM-12.so
#10 0x000000004ef25c0c in
llvm::orc::IRCompileLayer::emit(std::__1::unique_ptr<llvm::orc::MaterializationResponsibility,
std::__1::default_delete<llvm::orc::MaterializationResponsibility> >,
llvm::orc::ThreadSafeModule) () from
/usr/local/llvm12/lib/libLLVM-12.so
#11 0x000000004ef25fb2 in
llvm::orc::IRTransformLayer::emit(std::__1::unique_ptr<llvm::orc::MaterializationResponsibility,
std::__1::default_delete<llvm::orc::MaterializationResponsibility> >,
llvm::orc::ThreadSafeModule) () from
/usr/local/llvm12/lib/libLLVM-12.so
#12 0x000000004ef25fb2 in
llvm::orc::IRTransformLayer::emit(std::__1::unique_ptr<llvm::orc::MaterializationResponsibility,
std::__1::default_delete<llvm::orc::MaterializationResponsibility> >,
llvm::orc::ThreadSafeModule) () from
/usr/local/llvm12/lib/libLLVM-12.so
#13 0x000000004ef2a614 in
llvm::orc::BasicIRLayerMaterializationUnit::materialize(std::__1::unique_ptr<llvm::orc::MaterializationResponsibility,
std::__1::default_delete<llvm::orc::MaterializationResponsibility> >)
() from /usr/local/llvm12/lib/libLLVM-12.so
#14 0x000000004ef08dc2 in ?? () from /usr/local/llvm12/lib/libLLVM-12.so
#15 0x000000004ef0f61c in std::__1::__function::__func<void
(*)(std::__1::unique_ptr<llvm::orc::MaterializationUnit,
std::__1::default_delete<llvm::orc::MaterializationUnit> >,
std::__1::unique_ptr<llvm::orc::MaterializationResponsibility,
std::__1::default_delete<llvm::orc::MaterializationResponsibility> >),
std::__1::allocator<void
(*)(std::__1::unique_ptr<llvm::orc::MaterializationUnit,
std::__1::default_delete<llvm::orc::MaterializationUnit> >,
std::__1::unique_ptr<llvm::orc::MaterializationResponsibility,
std::__1::default_delete<llvm::orc::MaterializationResponsibility>
>)>, void (std::__1::unique_ptr<llvm::orc::MaterializationUnit,
std::__1::default_delete<llvm::orc::MaterializationUnit> >,
std::__1::unique_ptr<llvm::orc::MaterializationResponsibility,
std::__1::default_delete<llvm::orc::MaterializationResponsibility>
>)>::operator()(std::__1::unique_ptr<llvm::orc::MaterializationUnit,
std::__1::default_delete<llvm::orc::MaterializationUnit> >&&,
std::__1::unique_ptr<llvm::orc::MaterializationResponsibility,
std::__1::default_delete<llvm::orc::MaterializationResponsibility>
>&&) ()
from /usr/local/llvm12/lib/libLLVM-12.so
#16 0x000000004ef09c12 in
llvm::orc::ExecutionSession::dispatchOutstandingMUs() () from
/usr/local/llvm12/lib/libLLVM-12.so
#17 0x000000004ef0b684 in
llvm::orc::ExecutionSession::OL_completeLookup(std::__1::unique_ptr<llvm::orc::InProgressLookupState,
std::__1::default_delete<llvm::orc::InProgressLookupState> >,
std::__1::shared_ptr<llvm::orc::AsynchronousSymbolQuery>,
std::__1::function<void (llvm::DenseMap<llvm::orc::JITDylib*,
llvm::DenseSet<llvm::orc::SymbolStringPtr,
llvm::DenseMapInfo<llvm::orc::SymbolStringPtr> >,
llvm::DenseMapInfo<llvm::orc::JITDylib*>,
llvm::detail::DenseMapPair<llvm::orc::JITDylib*,
llvm::DenseSet<llvm::orc::SymbolStringPtr,
llvm::DenseMapInfo<llvm::orc::SymbolStringPtr> > > > const&)>) () from
/usr/local/llvm12/lib/libLLVM-12.so
#18 0x000000004ef141ee in ?? () from /usr/local/llvm12/lib/libLLVM-12.so
#19 0x000000004ef01c1e in
llvm::orc::ExecutionSession::OL_applyQueryPhase1(std::__1::unique_ptr<llvm::orc::InProgressLookupState,
std::__1::default_delete<llvm::orc::InProgressLookupState> >,
llvm::Error) () from /usr/local/llvm12/lib/libLLVM-12.so
#20 0x000000004ef0096c in
llvm::orc::ExecutionSession::lookup(llvm::orc::LookupKind,
std::__1::vector<std::__1::pair<llvm::orc::JITDylib*,
llvm::orc::JITDylibLookupFlags>,
std::__1::allocator<std::__1::pair<llvm::orc::JITDylib*,
llvm::orc::JITDylibLookupFlags> > > const&,
llvm::orc::SymbolLookupSet, llvm::orc::SymbolState,
llvm::unique_function<void
(llvm::Expected<llvm::DenseMap<llvm::orc::SymbolStringPtr,
llvm::JITEvaluatedSymbol,
llvm::DenseMapInfo<llvm::orc::SymbolStringPtr>,
llvm::detail::DenseMapPair<llvm::orc::SymbolStringPtr,
llvm::JITEvaluatedSy--Type <RET> for more, q to quit, c to continue
without paging--
mbol> > >)>, std::__1::function<void
(llvm::DenseMap<llvm::orc::JITDylib*,
llvm::DenseSet<llvm::orc::SymbolStringPtr,
llvm::DenseMapInfo<llvm::orc::SymbolStringPtr> >,
llvm::DenseMapInfo<llvm::orc::JITDylib*>,
llvm::detail::DenseMapPair<llvm::orc::JITDylib*,
llvm::DenseSet<llvm::orc::SymbolStringPtr,
llvm::DenseMapInfo<llvm::orc::SymbolStringPtr> > > > const&)>) () from
/usr/local/llvm12/lib/libLLVM-12.so
#21 0x000000004ef09f8a in
llvm::orc::ExecutionSession::lookup(std::__1::vector<std::__1::pair<llvm::orc::JITDylib*,
llvm::orc::JITDylibLookupFlags>,
std::__1::allocator<std::__1::pair<llvm::orc::JITDylib*,
llvm::orc::JITDylibLookupFlags> > > const&, llvm::orc::SymbolLookupSet
const&, llvm::orc::LookupKind, llvm::orc::SymbolState,
std::__1::function<void (llvm::DenseMap<llvm::orc::JITDylib*,
llvm::DenseSet<llvm::orc::SymbolStringPtr,
llvm::DenseMapInfo<llvm::orc::SymbolStringPtr> >,
llvm::DenseMapInfo<llvm::orc::JITDylib*>,
llvm::detail::DenseMapPair<llvm::orc::JITDylib*,
llvm::DenseSet<llvm::orc::SymbolStringPtr,
llvm::DenseMapInfo<llvm::orc::SymbolStringPtr> > > > const&)>) ()
from /usr/local/llvm12/lib/libLLVM-12.so
#22 0x000000004ef0a2ba in
llvm::orc::ExecutionSession::lookup(std::__1::vector<std::__1::pair<llvm::orc::JITDylib*,
llvm::orc::JITDylibLookupFlags>,
std::__1::allocator<std::__1::pair<llvm::orc::JITDylib*,
llvm::orc::JITDylibLookupFlags> > > const&,
llvm::orc::SymbolStringPtr, llvm::orc::SymbolState) () from
/usr/local/llvm12/lib/libLLVM-12.so
#23 0x000000004ef2b724 in
llvm::orc::LLJIT::lookupLinkerMangled(llvm::orc::JITDylib&,
llvm::orc::SymbolStringPtr) ()
from /usr/local/llvm12/lib/libLLVM-12.so
#24 0x000000004ef41364 in LLVMOrcLLJITLookup () from
/usr/local/llvm12/lib/libLLVM-12.so
#25 0x0000000041a67c06 in llvm_get_function (context=0x41f75530,
funcname=0x41ff8070 "evalexpr_0_0") at llvmjit.c:311
#26 0x0000000041a73b9c in ExecRunCompiledExpr (state=0x41ff7770,
econtext=0x41ff7470, isNull=0x3fffffd5b7) at llvmjit_expr.c:2402
#27 0x00000000004f70ea in ExecEvalExprSwitchContext (state=0x41ff7770,
econtext=0x41ff7470, isNull=0x3fffffd5b7)
at ../../../src/include/executor/executor.h:339
#28 ExecProject (projInfo=0x41ff7768) at
../../../src/include/executor/executor.h:373
#29 ExecResult (pstate=<optimized out>) at nodeResult.c:136
#30 0x00000000004c90b0 in ExecProcNode (node=0x41ff7358) at
../../../src/include/executor/executor.h:257
#31 ExecutePlan (estate=0x41ff7120, planstate=0x41ff7358,
use_parallel_mode=<optimized out>, operation=<optimized out>,
numberTuples=<optimized out>, direction=<optimized out>,
dest=0x41ff5d80, execute_once=<optimized out>, sendTuples=<optimized
out>)
at execMain.c:1551
#32 standard_ExecutorRun (queryDesc=0x41e9c520, direction=<optimized
out>, count=<optimized out>, execute_once=<optimized out>)
at execMain.c:361
#33 0x000000000064e356 in PortalRunSelect (portal=0x41f24120,
forward=<optimized out>, count=0, dest=<optimized out>) at
pquery.c:921
#34 0x000000000064df50 in PortalRun (portal=0x41f24120,
count=9223372036854775807, isTopLevel=true, run_once=<optimized out>,
dest=0x41ff5d80, altdest=0x41ff5d80, qc=0x3fffffd9b8) at pquery.c:765
#35 0x000000000064d040 in exec_simple_query (query_string=0x41e1f120
"select 1 + 1;") at postgres.c:1214
#36 0x000000000064a674 in PostgresMain (dbname=<optimized out>,
username=<optimized out>) at postgres.c:4313
#37 0x00000000005b62d6 in BackendRun (port=<optimized out>) at postmaster.c:4560
#38 0x00000000005b5ab2 in BackendStartup (port=0x41ec2000) at postmaster.c:4288
#39 ServerLoop () at postmaster.c:1801
#40 0x00000000005b2fec in PostmasterMain (argc=3, argv=0x3fffffeac0)
at postmaster.c:1473
#41 0x000000000051d8ca in main (argc=3, argv=0x3fffffeac0) at main.c:198

In response to

Browse pgsql-hackers by date

  From Date Subject
Next Message David Christensen 2021-11-03 21:50:20 Re: [PATCH] Proof of concept for GUC improvements
Previous Message Daniel Gustafsson 2021-11-03 20:43:07 Re: On login trigger: take three