aboutsummaryrefslogtreecommitdiff
path: root/src/llvm_backend_general.cpp
diff options
context:
space:
mode:
authorgingerBill <bill@gingerbill.org>2021-11-04 12:40:50 +0000
committergingerBill <bill@gingerbill.org>2021-11-04 12:40:50 +0000
commit6ded538546cca4f1e50a011a64932f7f3c784cc2 (patch)
tree03ac73c9042cc45ab20da51a93de3f9bf6f8de0f /src/llvm_backend_general.cpp
parent3fa7dabaa87e99386e469bd5e4badab23f89aaef (diff)
`@(linkage=<string>)` for procedures and variables; `@(require)` for procedures; `package runtime` linkage improvements; Subsequence improvements to `lb_run_remove_unused_function_pass`
Diffstat (limited to 'src/llvm_backend_general.cpp')
-rw-r--r--src/llvm_backend_general.cpp13
1 files changed, 13 insertions, 0 deletions
diff --git a/src/llvm_backend_general.cpp b/src/llvm_backend_general.cpp
index b1c1f924b..5c664f0e0 100644
--- a/src/llvm_backend_general.cpp
+++ b/src/llvm_backend_general.cpp
@@ -2692,3 +2692,16 @@ lbAddr lb_add_local_generated_temp(lbProcedure *p, Type *type, i64 min_alignment
lb_try_update_alignment(res.addr, cast(unsigned)min_alignment);
return res;
}
+
+
+void lb_set_linkage_from_entity_flags(lbModule *m, LLVMValueRef value, u64 flags) {
+ if (flags & EntityFlag_CustomLinkage_Internal) {
+ LLVMSetLinkage(value, LLVMInternalLinkage);
+ } else if (flags & EntityFlag_CustomLinkage_Strong) {
+ LLVMSetLinkage(value, LLVMExternalLinkage);
+ } else if (flags & EntityFlag_CustomLinkage_Weak) {
+ LLVMSetLinkage(value, LLVMExternalWeakLinkage);
+ } else if (flags & EntityFlag_CustomLinkage_LinkOnce) {
+ LLVMSetLinkage(value, LLVMLinkOnceAnyLinkage);
+ }
+}