Allow multiple instrumentation attributes

Four because that's the new reasonable maximum for XRay instrumentation
attributes in the following commit.
This commit is contained in:
Oleksii Lozovskyi 2022-09-24 21:54:47 +09:00
parent d748f08547
commit b3cadd2dcf

View File

@ -118,7 +118,8 @@ pub fn frame_pointer_type_attr<'ll>(cx: &CodegenCx<'ll, '_>) -> Option<&'ll Attr
/// Tell LLVM what instrument function to insert. /// Tell LLVM what instrument function to insert.
#[inline] #[inline]
fn instrument_function_attr<'ll>(cx: &CodegenCx<'ll, '_>) -> Option<&'ll Attribute> { fn instrument_function_attr<'ll>(cx: &CodegenCx<'ll, '_>) -> SmallVec<[&'ll Attribute; 4]> {
let mut attrs = SmallVec::new();
if cx.sess().opts.unstable_opts.instrument_mcount { if cx.sess().opts.unstable_opts.instrument_mcount {
// Similar to `clang -pg` behavior. Handled by the // Similar to `clang -pg` behavior. Handled by the
// `post-inline-ee-instrument` LLVM pass. // `post-inline-ee-instrument` LLVM pass.
@ -127,14 +128,13 @@ fn instrument_function_attr<'ll>(cx: &CodegenCx<'ll, '_>) -> Option<&'ll Attribu
// See test/CodeGen/mcount.c in clang. // See test/CodeGen/mcount.c in clang.
let mcount_name = cx.sess().target.mcount.as_ref(); let mcount_name = cx.sess().target.mcount.as_ref();
Some(llvm::CreateAttrStringValue( attrs.push(llvm::CreateAttrStringValue(
cx.llcx, cx.llcx,
"instrument-function-entry-inlined", "instrument-function-entry-inlined",
&mcount_name, &mcount_name,
)) ));
} else {
None
} }
attrs
} }
fn nojumptables_attr<'ll>(cx: &CodegenCx<'ll, '_>) -> Option<&'ll Attribute> { fn nojumptables_attr<'ll>(cx: &CodegenCx<'ll, '_>) -> Option<&'ll Attribute> {