Extract helper method module_add_named_metadata_node
This commit is contained in:
@@ -494,16 +494,7 @@ impl<'ll> CodegenCx<'ll, '_> {
|
||||
let bytes = alloc.inspect_with_uninit_and_ptr_outside_interpreter(0..alloc.len());
|
||||
let alloc = self.create_metadata(bytes);
|
||||
let data = [section, alloc];
|
||||
let meta =
|
||||
unsafe { llvm::LLVMMDNodeInContext2(self.llcx, data.as_ptr(), data.len()) };
|
||||
let val = self.get_metadata_value(meta);
|
||||
unsafe {
|
||||
llvm::LLVMAddNamedMetadataOperand(
|
||||
self.llmod,
|
||||
c"wasm.custom_sections".as_ptr(),
|
||||
val,
|
||||
)
|
||||
};
|
||||
self.module_add_named_metadata_node(self.llmod(), c"wasm.custom_sections", &data);
|
||||
}
|
||||
} else {
|
||||
base::set_link_section(g, attrs);
|
||||
|
||||
@@ -34,7 +34,7 @@ use smallvec::SmallVec;
|
||||
use crate::back::write::to_llvm_code_model;
|
||||
use crate::callee::get_fn;
|
||||
use crate::debuginfo::metadata::apply_vcall_visibility_metadata;
|
||||
use crate::llvm::{Metadata, MetadataKindId};
|
||||
use crate::llvm::{Metadata, MetadataKindId, Module};
|
||||
use crate::type_::Type;
|
||||
use crate::value::Value;
|
||||
use crate::{attributes, common, coverageinfo, debuginfo, llvm, llvm_util};
|
||||
@@ -495,14 +495,7 @@ pub(crate) unsafe fn create_module<'ll>(
|
||||
format!("rustc version {}", option_env!("CFG_VERSION").expect("CFG_VERSION"));
|
||||
|
||||
let name_metadata = cx.create_metadata(rustc_producer.as_bytes());
|
||||
|
||||
unsafe {
|
||||
llvm::LLVMAddNamedMetadataOperand(
|
||||
llmod,
|
||||
c"llvm.ident".as_ptr(),
|
||||
&cx.get_metadata_value(llvm::LLVMMDNodeInContext2(llcx, &name_metadata, 1)),
|
||||
);
|
||||
}
|
||||
cx.module_add_named_metadata_node(llmod, c"llvm.ident", &[name_metadata]);
|
||||
|
||||
// Emit RISC-V specific target-abi metadata
|
||||
// to workaround lld as the LTO plugin not
|
||||
@@ -1031,6 +1024,21 @@ impl<'ll, CX: Borrow<SCx<'ll>>> GenericCx<'ll, CX> {
|
||||
let md = self.md_node_in_context(md_list);
|
||||
self.set_metadata(instruction, kind_id, md);
|
||||
}
|
||||
|
||||
/// Helper method for the sequence of calls:
|
||||
/// - `LLVMMDNodeInContext2` (to create an `llvm::MDNode` from a list of metadata)
|
||||
/// - `LLVMMetadataAsValue` (to adapt that node to an `llvm::Value`)
|
||||
/// - `LLVMAddNamedMetadataOperand` (to set that node as metadata of `kind_name` for `module`)
|
||||
pub(crate) fn module_add_named_metadata_node(
|
||||
&self,
|
||||
module: &'ll Module,
|
||||
kind_name: &CStr,
|
||||
md_list: &[&'ll Metadata],
|
||||
) {
|
||||
let md = self.md_node_in_context(md_list);
|
||||
let md_as_val = self.get_metadata_value(md);
|
||||
unsafe { llvm::LLVMAddNamedMetadataOperand(module, kind_name.as_ptr(), md_as_val) };
|
||||
}
|
||||
}
|
||||
|
||||
impl HasDataLayout for CodegenCx<'_, '_> {
|
||||
|
||||
Reference in New Issue
Block a user