authorgravatar for jacobly@ziglang.orgJacob Young <jacobly@ziglang.org> 2023-08-08 22:34:24-04:00
committergravatar for jacobly@ziglang.orgJacob Young <jacobly@ziglang.org> 2023-08-08 23:32:40-04:00
log3e1dd93bb2ac7e9d99fb340f1f4ca6868a52cb6b
tree3a67b92da2378f614bc52bf23133bcf22b5a5c4b
parent53bea0f7e44591e741c357297a1f25310d36ca78

llvm: force strip without libllvm to avoid unimplemented behavior

Also fix deinit bugs.

2 files changed, 21 insertions(+), 6 deletions(-)

src/codegen/llvm.zig+11-5
......@@ -823,7 +823,7 @@ pub const Object = struct {
823823 var builder = try Builder.init(.{
824824 .allocator = gpa,
825825 .use_lib_llvm = options.use_lib_llvm,
826 .strip = options.strip,
826 .strip = options.strip or !options.use_lib_llvm, // TODO
827827 .name = options.root_name,
828828 .target = options.target,
829829 .triple = llvm_target_triple,
......@@ -961,14 +961,17 @@ pub const Object = struct {
961961 }
962962
963963 pub fn deinit(self: *Object, gpa: Allocator) void {
964 self.di_map.deinit(gpa);
965 self.di_type_map.deinit(gpa);
966 self.target_data.dispose();
967 self.target_machine.dispose();
964 if (self.builder.useLibLlvm()) {
965 self.di_map.deinit(gpa);
966 self.di_type_map.deinit(gpa);
967 self.target_data.dispose();
968 self.target_machine.dispose();
969 }
968970 self.decl_map.deinit(gpa);
969971 self.named_enum_map.deinit(gpa);
970972 self.type_map.deinit(gpa);
971973 self.extern_collisions.deinit(gpa);
974 self.builder.deinit();
972975 self.* = undefined;
973976 }
974977
......@@ -1182,6 +1185,9 @@ pub const Object = struct {
11821185 emit_asm_msg, emit_bin_msg, emit_llvm_ir_msg, emit_llvm_bc_msg,
11831186 });
11841187
1188 if (emit_asm_path == null and emit_bin_path == null and
1189 emit_llvm_ir_path == null and emit_llvm_bc_path == null) return;
1190
11851191 if (!self.builder.useLibLlvm()) {
11861192 log.err("emitting without libllvm not implemented", .{});
11871193 return error.FailedToEmit;
src/zig_llvm.cpp+10-1
......@@ -1131,7 +1131,16 @@ void ZigLLVMEraseGlobalValue(LLVMValueRef GlobalVal) {
11311131}
11321132
11331133void ZigLLVMDeleteGlobalValue(LLVMValueRef GlobalVal) {
1134 delete unwrap<GlobalVariable>(GlobalVal);
1134 auto *GV = unwrap<GlobalValue>(GlobalVal);
1135 assert(GV->getParent() == nullptr);
1136 switch (GV->getValueID()) {
1137#define HANDLE_GLOBAL_VALUE(NAME) \
1138 case Value::NAME##Val: \
1139 delete static_cast<NAME *>(GV); \
1140 break;
1141#include <llvm/IR/Value.def>
1142 default: llvm_unreachable("Expected global value");
1143 }
11351144}
11361145
11371146void ZigLLVMSetInitializer(LLVMValueRef GlobalVar, LLVMValueRef ConstantVal) {