@@ -515,6 +515,29 @@ void jl_dump_native_impl(void *native_code,
515515 DumpOutput{asm_Archive, asm_fname ? " text.s" : " " },
516516 true , threads);
517517
518+ if (imaging_mode) {
519+ bool has_veccall = false ;
520+ if (auto md = dataM->getModuleFlag (" julia.mv.veccall" )) {
521+ has_veccall = cast<ConstantInt>(cast<ConstantAsMetadata>(md)->getValue ())->isOneValue ();
522+ }
523+ orc::ThreadSafeModule metadata (std::make_unique<Module>(" metadata" , Context), TSCtx);
524+ auto metadataM = metadata.getModuleUnlocked ();
525+ metadataM->setTargetTriple (dataM->getTargetTriple ());
526+ metadataM->setDataLayout (dataM->getDataLayout ());
527+ #if JL_LLVM_VERSION >= 130000
528+ metadataM->setStackProtectorGuard (dataM->getStackProtectorGuard ());
529+ metadataM->setOverrideStackAlignment (dataM->getOverrideStackAlignment ());
530+ #endif
531+ metadataM->addModuleFlag (Module::ModFlagBehavior::Error, " julia.mv.disable" , 1 );
532+ add_sysimage_targets (*metadataM, has_veccall, threads, data->jl_sysimg_fvars .size (), data->jl_sysimg_gvars .size (), T_pgcstack_getter->getPointerTo ());
533+ add_output (*TM, *metadataM, outputs,
534+ DumpOutput{unopt_bc_Archive, " metadata.bc" },
535+ DumpOutput{bc_Archive, " metadata.bc" },
536+ DumpOutput{obj_Archive, " metadata.o" },
537+ DumpOutput{asm_Archive, " metadata.s" },
538+ false , 1 );
539+ }
540+
518541 orc::ThreadSafeModule sysimage (std::make_unique<Module>(" sysimage" , Context), TSCtx);
519542 auto sysimageM = sysimage.getModuleUnlocked ();
520543 sysimageM->setTargetTriple (dataM->getTargetTriple ());
@@ -523,13 +546,7 @@ void jl_dump_native_impl(void *native_code,
523546 sysimageM->setStackProtectorGuard (dataM->getStackProtectorGuard ());
524547 sysimageM->setOverrideStackAlignment (dataM->getOverrideStackAlignment ());
525548#endif
526- if (imaging_mode) {
527- bool has_veccall = false ;
528- if (auto md = dataM->getModuleFlag (" julia.mv.veccall" )) {
529- has_veccall = cast<ConstantInt>(cast<ConstantAsMetadata>(md)->getValue ())->isOneValue ();
530- }
531- add_sysimage_targets (*sysimageM, has_veccall, threads, data->jl_sysimg_fvars .size (), data->jl_sysimg_gvars .size (), T_pgcstack_getter->getPointerTo ());
532- }
549+ sysimageM->addModuleFlag (Module::ModFlagBehavior::Error, " julia.mv.disable" , 1 );
533550 data->M = orc::ThreadSafeModule (); // free memory for data->M
534551
535552 if (sysimg_data) {
0 commit comments