@@ -7709,14 +7709,14 @@ static jl_cgval_t emit_cfunction(jl_codectx_t &ctx, jl_value_t *output_type, con
77097709
77107710// do codegen to create a C-callable alias/wrapper, or if sysimg_handle is set,
77117711// restore one from a loaded system image.
7712- const char *jl_generate_ccallable (Module *llvmmod, void *sysimg_handle , jl_value_t *declrt, jl_value_t *sigt, jl_codegen_params_t ¶ms)
7712+ const char *jl_generate_ccallable (Module *llvmmod, jl_value_t *nameval , jl_value_t *declrt, jl_value_t *sigt, jl_codegen_params_t ¶ms)
77137713{
77147714 ++GeneratedCCallables;
77157715 jl_datatype_t *ft = (jl_datatype_t *)jl_tparam0 (sigt);
77167716 assert (jl_is_datatype (ft));
77177717 jl_value_t *ff = ft->instance ;
77187718 assert (ff);
7719- const char *name = jl_symbol_name (ft->name ->mt ->name );
7719+ const char *name = ! jl_is_string (nameval) ? jl_symbol_name (ft->name ->mt ->name ) : jl_string_data (nameval );
77207720 jl_value_t *crt = declrt;
77217721 if (jl_is_abstract_ref_type (declrt)) {
77227722 declrt = jl_tparam0 (declrt);
@@ -7738,25 +7738,12 @@ const char *jl_generate_ccallable(Module *llvmmod, void *sysimg_handle, jl_value
77387738 function_sig_t sig (" cfunction" , lcrt, crt, toboxed, false ,
77397739 argtypes, NULL , false , CallingConv::C, false , ¶ms);
77407740 if (sig.err_msg .empty ()) {
7741- if (sysimg_handle) {
7742- // restore a ccallable from the system image
7743- void *addr;
7744- int found = jl_dlsym (sysimg_handle, name, &addr, 0 );
7745- if (found)
7746- add_named_global (name, addr);
7747- else {
7748- err = jl_get_exceptionf (jl_errorexception_type, " %s not found in sysimg" , name);
7749- jl_throw (err);
7750- }
7751- }
7752- else {
7753- // Safe b/c params holds context lock
7754- Function *cw = gen_cfun_wrapper (llvmmod, params, sig, ff, name, declrt, sigt, NULL , NULL , NULL );
7755- auto alias = GlobalAlias::create (cw->getValueType (), cw->getType ()->getAddressSpace (),
7756- GlobalValue::ExternalLinkage, name, cw, llvmmod);
7757- if (params.TargetTriple .isOSBinFormatCOFF ()) {
7758- alias->setDLLStorageClass (GlobalValue::DLLStorageClassTypes::DLLExportStorageClass);
7759- }
7741+ // Safe b/c params holds context lock
7742+ Function *cw = gen_cfun_wrapper (llvmmod, params, sig, ff, name, declrt, sigt, NULL , NULL , NULL );
7743+ auto alias = GlobalAlias::create (cw->getValueType (), cw->getType ()->getAddressSpace (),
7744+ GlobalValue::ExternalLinkage, name, cw, llvmmod);
7745+ if (params.TargetTriple .isOSBinFormatCOFF ()) {
7746+ alias->setDLLStorageClass (GlobalValue::DLLStorageClassTypes::DLLExportStorageClass);
77607747 }
77617748 JL_GC_POP ();
77627749 return name;
0 commit comments