summaryrefslogtreecommitdiffstats
path: root/tests/run-make/lto-linkage-used-attr/lib.rs
diff options
context:
space:
mode:
Diffstat (limited to 'tests/run-make/lto-linkage-used-attr/lib.rs')
-rw-r--r--tests/run-make/lto-linkage-used-attr/lib.rs50
1 files changed, 50 insertions, 0 deletions
diff --git a/tests/run-make/lto-linkage-used-attr/lib.rs b/tests/run-make/lto-linkage-used-attr/lib.rs
new file mode 100644
index 000000000..0a92ea9cd
--- /dev/null
+++ b/tests/run-make/lto-linkage-used-attr/lib.rs
@@ -0,0 +1,50 @@
+#![crate_type = "rlib"]
+#![crate_type = "cdylib"]
+
+#[macro_export]
+macro_rules! asm_func {
+ ($name:expr, $body:expr $(, $($args:tt)*)?) => {
+ core::arch::global_asm!(
+ concat!(
+ ".p2align 4\n",
+ ".hidden ", $name, "\n",
+ ".global ", $name, "\n",
+ ".type ", $name, ",@function\n",
+ $name, ":\n",
+ $body,
+ ".size ", $name, ",.-", $name,
+ )
+ $(, $($args)*)?
+ );
+ };
+}
+
+macro_rules! libcall_trampoline {
+ ($libcall:ident ; $libcall_impl:ident) => {
+ asm_func!(
+ stringify!($libcall),
+ concat!(
+ "
+ .cfi_startproc simple
+ .cfi_def_cfa_offset 0
+ jmp {}
+ .cfi_endproc
+ ",
+ ),
+ sym $libcall_impl
+ );
+ };
+}
+
+pub mod trampolines {
+ extern "C" {
+ pub fn table_fill_funcref();
+ pub fn table_fill_externref();
+ }
+
+ unsafe extern "C" fn impl_table_fill_funcref() {}
+ unsafe extern "C" fn impl_table_fill_externref() {}
+
+ libcall_trampoline!(table_fill_funcref ; impl_table_fill_funcref);
+ libcall_trampoline!(table_fill_externref ; impl_table_fill_externref);
+}