@@ -681,7 +681,7 @@ pub(crate) fn run_pass_manager(
681681 let ti64 = cx. type_i64 ( ) ;
682682 let ti32 = cx. type_i32 ( ) ;
683683 let ti16 = cx. type_i16 ( ) ;
684- let ti16 = cx. type_i8 ( ) ;
684+ let ti8 = cx. type_i8 ( ) ;
685685 let tarr = cx. type_array ( ti32, 3 ) ;
686686
687687 let entry_elements = vec ! [ ti64, ti16, ti16, ti32, tptr, tptr, ti64, ti64, tptr] ;
@@ -729,17 +729,30 @@ pub(crate) fn run_pass_manager(
729729
730730 // Next: For each function, generate these three entries. A weak constant,
731731 // the llvm.rodata entry name, and the omp_offloading_entries value
732- // @.__omp_offloading_86fafab6_c40006a1__Z3fooPSt7complexIdES1_S0_m_l7.region_id = weak constant i8 0
733- // @.offloading.entry_name = internal unnamed_addr constant [66 x i8] c"__omp_offloading_86fafab6_c40006a1__Z3fooPSt7complexIdES1_S0_m_l7\00", section ".llvm.rodata.offloading", align 1
734- // @.offloading.entry.__omp_offloading_86fafab6_c40006a1__Z3fooPSt7complexIdES1_S0_m_l7 = weak constant %struct.__tgt_offload_entry { i64 0, i16 1, i16 1, i32 0, ptr @.__omp_offloading_86fafab6_c40006a1__Z3fooPSt7complexIdES1_S0_m_l7.region_id, ptr @.offloading.entry_name, i64 0, i64 0, ptr null }, section "omp_offloading_entries", align 1
735732
733+ // @.__omp_offloading_86fafab6_c40006a1__Z3fooPSt7complexIdES1_S0_m_l7.region_id = weak constant i8 0
736734 let name = format ! ( ".kernel_{num}.region_id" ) ;
737735 let name = CString :: new ( name) . unwrap ( ) ;
738736 let entry = llvm:: add_global ( cx. llmod , cx. type_i8 ( ) , & name) ;
739737 llvm:: set_global_constant ( entry, true ) ;
740738 llvm:: set_linkage ( entry, llvm:: Linkage :: WeakAnyLinkage ) ;
741739 llvm:: set_initializer ( entry, cx. get_const_i8 ( 0 ) ) ;
742740
741+
742+ let section_name = format ! ( ".llvm.rodata.offloading" ) ;
743+ let c_section_name = CString :: new ( section_name) . unwrap ( ) ;
744+
745+ let entry_name = format ! ( "kernel_{num}" ) ;
746+ let c_entry_name = CString :: new ( entry_name) . unwrap ( ) ;
747+ let c_val = c_entry_name. as_bytes_with_nul ( ) ;
748+ //let const_name = cx.const_bytes(c_val);
749+ let len = u64:: try_from ( c_val. len ( ) ) . expect ( "LLVMConstArray2 elements len overflow" ) ;
750+ let foo = unsafe { llvm:: LLVMConstArray2 ( ti8, c_val. as_ptr ( ) , len) } ;
751+ llvm:: set_alignment ( foo, rustc_abi:: Align :: ONE ) ;
752+ dbg ! ( & foo) ;
753+ // @.offloading.entry_name = internal unnamed_addr constant [66 x i8] c"__omp_offloading_86fafab6_c40006a1__Z3fooPSt7complexIdES1_S0_m_l7\00", section ".llvm.rodata.offloading", align 1
754+ // @.offloading.entry.__omp_offloading_86fafab6_c40006a1__Z3fooPSt7complexIdES1_S0_m_l7 = weak constant %struct.__tgt_offload_entry { i64 0, i16 1, i16 1, i32 0, ptr @.__omp_offloading_86fafab6_c40006a1__Z3fooPSt7complexIdES1_S0_m_l7.region_id, ptr @.offloading.entry_name, i64 0, i64 0, ptr null }, section "omp_offloading_entries", align 1
755+
743756 // typedef struct {
744757 // uint64_t Reserved;
745758 // uint16_t Version;
0 commit comments