Обсуждение: [MASSMAIL]some LLVM function checks missing in meson
I have been checking the pg_config.h generated by configure and meson to see if there is anything materially different. I found that HAVE_DECL_LLVMCREATEGDBREGISTRATIONLISTENER and HAVE_DECL_LLVMCREATEPERFJITEVENTLISTENER are missing on the meson side. Something like the below would appear to fix that: diff --git a/meson.build b/meson.build index 43fad5323c0..cdfd31377d1 100644 --- a/meson.build +++ b/meson.build @@ -2301,6 +2301,14 @@ decl_checks += [ ['pwritev', 'sys/uio.h'], ] +# Check presence of some optional LLVM functions. +if llvm.found() + decl_checks += [ + ['LLVMCreateGDBRegistrationListener', 'llvm-c/ExecutionEngine.h'], + ['LLVMCreatePerfJITEventListener', 'llvm-c/ExecutionEngine.h'], + ] +endif + foreach c : decl_checks func = c.get(0) header = c.get(1) I don't know what these functions do, but the symbols are used in the source code. Thoughts?
On 11/04/2024 18:26, Peter Eisentraut wrote: > I have been checking the pg_config.h generated by configure and meson to > see if there is anything materially different. I found that > > HAVE_DECL_LLVMCREATEGDBREGISTRATIONLISTENER and > HAVE_DECL_LLVMCREATEPERFJITEVENTLISTENER > > are missing on the meson side. > > Something like the below would appear to fix that: > > diff --git a/meson.build b/meson.build > index 43fad5323c0..cdfd31377d1 100644 > --- a/meson.build > +++ b/meson.build > @@ -2301,6 +2301,14 @@ decl_checks += [ > ['pwritev', 'sys/uio.h'], > ] > > +# Check presence of some optional LLVM functions. > +if llvm.found() > + decl_checks += [ > + ['LLVMCreateGDBRegistrationListener', 'llvm-c/ExecutionEngine.h'], > + ['LLVMCreatePerfJITEventListener', 'llvm-c/ExecutionEngine.h'], > + ] > +endif > + > foreach c : decl_checks > func = c.get(0) > header = c.get(1) > > I don't know what these functions do, but the symbols are used in the > source code. Thoughts? +1. I also don't know what they do, but clearly the configure and meson checks should be in sync. There's also this in llvmjit.c: > if (llvm_opt3_orc) > { > #if defined(HAVE_DECL_LLVMORCREGISTERPERF) && HAVE_DECL_LLVMORCREGISTERPERF > if (jit_profiling_support) > LLVMOrcUnregisterPerf(llvm_opt3_orc); > #endif > LLVMOrcDisposeInstance(llvm_opt3_orc); > llvm_opt3_orc = NULL; > } > > if (llvm_opt0_orc) > { > #if defined(HAVE_DECL_LLVMORCREGISTERPERF) && HAVE_DECL_LLVMORCREGISTERPERF > if (jit_profiling_support) > LLVMOrcUnregisterPerf(llvm_opt0_orc); > #endif > LLVMOrcDisposeInstance(llvm_opt0_orc); > llvm_opt0_orc = NULL; > } > } The autoconf test that set HAVE_DECL_LLVMORCREGISTERPERF was removed in commit e9a9843e13. I believe that's a leftover that should also have been removed. -- Heikki Linnakangas Neon (https://neon.tech)
On 13.04.24 10:25, Heikki Linnakangas wrote: > There's also this in llvmjit.c: > >> if (llvm_opt3_orc) >> { >> #if defined(HAVE_DECL_LLVMORCREGISTERPERF) && >> HAVE_DECL_LLVMORCREGISTERPERF >> if (jit_profiling_support) >> LLVMOrcUnregisterPerf(llvm_opt3_orc); >> #endif >> LLVMOrcDisposeInstance(llvm_opt3_orc); >> llvm_opt3_orc = NULL; >> } >> >> if (llvm_opt0_orc) >> { >> #if defined(HAVE_DECL_LLVMORCREGISTERPERF) && >> HAVE_DECL_LLVMORCREGISTERPERF >> if (jit_profiling_support) >> LLVMOrcUnregisterPerf(llvm_opt0_orc); >> #endif >> LLVMOrcDisposeInstance(llvm_opt0_orc); >> llvm_opt0_orc = NULL; >> } >> } > > The autoconf test that set HAVE_DECL_LLVMORCREGISTERPERF was removed in > commit e9a9843e13. I believe that's a leftover that should also have > been removed. Right, that was clearly forgotten. I have removed the dead code.
On 13.04.24 10:25, Heikki Linnakangas wrote: >> Something like the below would appear to fix that: >> >> diff --git a/meson.build b/meson.build >> index 43fad5323c0..cdfd31377d1 100644 >> --- a/meson.build >> +++ b/meson.build >> @@ -2301,6 +2301,14 @@ decl_checks += [ >> ['pwritev', 'sys/uio.h'], >> ] >> >> +# Check presence of some optional LLVM functions. >> +if llvm.found() >> + decl_checks += [ >> + ['LLVMCreateGDBRegistrationListener', 'llvm-c/ExecutionEngine.h'], >> + ['LLVMCreatePerfJITEventListener', 'llvm-c/ExecutionEngine.h'], >> + ] >> +endif >> + >> foreach c : decl_checks >> func = c.get(0) >> header = c.get(1) >> >> I don't know what these functions do, but the symbols are used in the >> source code. Thoughts? > > +1. I also don't know what they do, but clearly the configure and meson > checks should be in sync. Committed that, too.