commit 3dc5f13989676ae0bfb9389e2b162e3945b38241 (tree)
parent 4b85f05f060ee3365bd86e1885bbefb9e685c81b
Author: Jacob Young <jacobly0@users.noreply.github.com>
Date: Fri, 27 Mar 2026 20:57:53 -0400
llvm: fix `-fstrip` keeping globals only referenced by the symbol table
Diffstat:
1 file changed, 8 insertions(+), 8 deletions(-)
diff --git a/src/codegen/llvm.zig b/src/codegen/llvm.zig
@@ -1674,7 +1674,7 @@ pub const Object = struct {
} else {
const fqn = try self.builder.strtabString(ip.getNav(nav_index).fqn.toSlice(ip));
try global_index.rename(fqn, &self.builder);
- global_index.setLinkage(.internal, &self.builder);
+ global_index.setLinkage(if (self.builder.strip) .private else .internal, &self.builder);
if (comp.config.dll_export_fns)
global_index.setDllStorageClass(.default, &self.builder);
global_index.setUnnamedAddr(.unnamed_addr, &self.builder);
@@ -2694,7 +2694,7 @@ pub const Object = struct {
defer attributes.deinit(&o.builder);
if (!is_extern) {
- function_index.setLinkage(.internal, &o.builder);
+ function_index.setLinkage(if (o.builder.strip) .private else .internal, &o.builder);
function_index.setUnnamedAddr(.unnamed_addr, &o.builder);
} else {
if (target.cpu.arch.isWasm()) {
@@ -2926,7 +2926,7 @@ pub const Object = struct {
gop.value_ptr.* = variable_index.ptrConst(&o.builder).global;
try variable_index.setInitializer(try o.lowerValue(pt, uav), &o.builder);
- variable_index.setLinkage(.internal, &o.builder);
+ variable_index.setLinkage(if (o.builder.strip) .private else .internal, &o.builder);
variable_index.setMutability(.constant, &o.builder);
variable_index.setUnnamedAddr(.unnamed_addr, &o.builder);
variable_index.setAlignment(alignment.toLlvm(), &o.builder);
@@ -2967,7 +2967,7 @@ pub const Object = struct {
// This is needed for declarations created by `@extern`.
switch (linkage) {
.internal => {
- variable_index.setLinkage(.internal, &o.builder);
+ variable_index.setLinkage(if (o.builder.strip) .private else .internal, &o.builder);
variable_index.setUnnamedAddr(.unnamed_addr, &o.builder);
},
.strong, .weak => {
@@ -4269,7 +4269,7 @@ pub const Object = struct {
defer attributes.deinit(&o.builder);
try o.addCommonFnAttributes(&attributes, zcu.root_mod, zcu.root_mod.omit_frame_pointer);
- function_index.setLinkage(.internal, &o.builder);
+ function_index.setLinkage(if (o.builder.strip) .private else .internal, &o.builder);
function_index.setCallConv(.fastcc, &o.builder);
function_index.setAttributes(try attributes.finish(&o.builder), &o.builder);
return function_index;
@@ -4297,7 +4297,7 @@ pub const Object = struct {
defer attributes.deinit(&o.builder);
try o.addCommonFnAttributes(&attributes, zcu.root_mod, zcu.root_mod.omit_frame_pointer);
- function_index.setLinkage(.internal, &o.builder);
+ function_index.setLinkage(if (o.builder.strip) .private else .internal, &o.builder);
function_index.setCallConv(.fastcc, &o.builder);
function_index.setAttributes(try attributes.finish(&o.builder), &o.builder);
gop.value_ptr.* = function_index.ptrConst(&o.builder).global;
@@ -4377,7 +4377,7 @@ pub const Object = struct {
defer attributes.deinit(builder);
try o.addCommonFnAttributes(&attributes, zcu.root_mod, zcu.root_mod.omit_frame_pointer);
- function_index.setLinkage(.internal, builder);
+ function_index.setLinkage(if (o.builder.strip) .private else .internal, builder);
function_index.setCallConv(.fastcc, builder);
function_index.setAttributes(try attributes.finish(builder), builder);
@@ -6351,7 +6351,7 @@ pub const FuncGen = struct {
.default,
);
try table_variable.setInitializer(table_val, &o.builder);
- table_variable.setLinkage(.internal, &o.builder);
+ table_variable.setLinkage(if (o.builder.strip) .private else .internal, &o.builder);
table_variable.setUnnamedAddr(.unnamed_addr, &o.builder);
const table_includes_else = item_count != table_len;