aboutsummaryrefslogtreecommitdiff
path: root/src/codegen
diff options
context:
space:
mode:
Diffstat (limited to 'src/codegen')
-rw-r--r--src/codegen/llvm.zig5
-rw-r--r--src/codegen/llvm/bindings.zig9
2 files changed, 14 insertions, 0 deletions
diff --git a/src/codegen/llvm.zig b/src/codegen/llvm.zig
index 57bcbe9338..5e70710046 100644
--- a/src/codegen/llvm.zig
+++ b/src/codegen/llvm.zig
@@ -808,6 +808,11 @@ pub const Object = struct {
.Weak => llvm_global.setLinkage(.WeakODR),
.LinkOnce => llvm_global.setLinkage(.LinkOnceODR),
}
+ switch (exports[0].options.visibility) {
+ .default => llvm_global.setVisibility(.Default),
+ .hidden => llvm_global.setVisibility(.Hidden),
+ .protected => llvm_global.setVisibility(.Protected),
+ }
if (decl.val.castTag(.variable)) |variable| {
if (variable.data.is_threadlocal) {
llvm_global.setThreadLocalMode(.GeneralDynamicTLSModel);
diff --git a/src/codegen/llvm/bindings.zig b/src/codegen/llvm/bindings.zig
index c70a7d1553..f3987a8665 100644
--- a/src/codegen/llvm/bindings.zig
+++ b/src/codegen/llvm/bindings.zig
@@ -117,6 +117,9 @@ pub const Value = opaque {
pub const setLinkage = LLVMSetLinkage;
extern fn LLVMSetLinkage(Global: *const Value, Linkage: Linkage) void;
+ pub const setVisibility = LLVMSetVisibility;
+ extern fn LLVMSetVisibility(Global: *const Value, Linkage: Visibility) void;
+
pub const setUnnamedAddr = LLVMSetUnnamedAddr;
extern fn LLVMSetUnnamedAddr(Global: *const Value, HasUnnamedAddr: Bool) void;
@@ -1324,6 +1327,12 @@ pub const Linkage = enum(c_uint) {
LinkerPrivateWeak,
};
+pub const Visibility = enum(c_uint) {
+ Default,
+ Hidden,
+ Protected,
+};
+
pub const ThreadLocalMode = enum(c_uint) {
NotThreadLocal,
GeneralDynamicTLSModel,