mirror of
https://github.com/ziglang/zig.git
synced 2025-12-26 08:03:08 +00:00
Merge pull request #15193 from davidgm94/dwarf-64-bit-format
Expose an option for producing 64-bit DWARF format
This commit is contained in:
commit
304e4082a0
@ -69,6 +69,7 @@ disable_stack_probing: bool,
|
||||
disable_sanitize_c: bool,
|
||||
sanitize_thread: bool,
|
||||
rdynamic: bool,
|
||||
dwarf_format: ?std.dwarf.Format = null,
|
||||
import_memory: bool = false,
|
||||
/// For WebAssembly targets, this will allow for undefined symbols to
|
||||
/// be imported from the host environment.
|
||||
@ -1450,6 +1451,13 @@ fn make(step: *Step, prog_node: *std.Progress.Node) !void {
|
||||
try addFlag(&zig_args, "strip", self.strip);
|
||||
try addFlag(&zig_args, "unwind-tables", self.unwind_tables);
|
||||
|
||||
if (self.dwarf_format) |dwarf_format| {
|
||||
try zig_args.append(switch (dwarf_format) {
|
||||
.@"32" => "-gdwarf32",
|
||||
.@"64" => "-gdwarf64",
|
||||
});
|
||||
}
|
||||
|
||||
switch (self.compress_debug_sections) {
|
||||
.none => {},
|
||||
.zlib => try zig_args.append("--compress-debug-sections=zlib"),
|
||||
|
||||
@ -147,6 +147,8 @@ pub const CC = enum(u8) {
|
||||
GNU_borland_fastcall_i386 = 0x41,
|
||||
};
|
||||
|
||||
pub const Format = enum { @"32", @"64" };
|
||||
|
||||
const PcRange = struct {
|
||||
start: u64,
|
||||
end: u64,
|
||||
|
||||
@ -620,6 +620,7 @@ pub const InitOptions = struct {
|
||||
test_name_prefix: ?[]const u8 = null,
|
||||
test_runner_path: ?[]const u8 = null,
|
||||
subsystem: ?std.Target.SubSystem = null,
|
||||
dwarf_format: ?std.dwarf.Format = null,
|
||||
/// WASI-only. Type of WASI execution model ("command" or "reactor").
|
||||
wasi_exec_model: ?std.builtin.WasiExecModel = null,
|
||||
/// (Zig compiler development) Enable dumping linker's state as JSON.
|
||||
@ -1111,6 +1112,7 @@ pub fn create(gpa: Allocator, options: InitOptions) !*Compilation {
|
||||
cache.hash.add(link_libunwind);
|
||||
cache.hash.add(options.output_mode);
|
||||
cache.hash.add(options.machine_code_model);
|
||||
cache.hash.addOptional(options.dwarf_format);
|
||||
cache_helpers.addOptionalEmitLoc(&cache.hash, options.emit_bin);
|
||||
cache_helpers.addOptionalEmitLoc(&cache.hash, options.emit_implib);
|
||||
cache.hash.addBytes(options.root_name);
|
||||
@ -1517,6 +1519,7 @@ pub fn create(gpa: Allocator, options: InitOptions) !*Compilation {
|
||||
.disable_lld_caching = options.disable_lld_caching or cache_mode == .whole,
|
||||
.subsystem = options.subsystem,
|
||||
.is_test = options.is_test,
|
||||
.dwarf_format = options.dwarf_format,
|
||||
.wasi_exec_model = wasi_exec_model,
|
||||
.hash_style = options.hash_style,
|
||||
.enable_link_snapshots = options.enable_link_snapshots,
|
||||
@ -4488,7 +4491,13 @@ pub fn addCCArgs(
|
||||
// generation, it only changes the type of information generated.
|
||||
try argv.appendSlice(&.{ "-g", "-gcodeview" });
|
||||
},
|
||||
.elf, .macho => try argv.append("-gdwarf-4"),
|
||||
.elf, .macho => {
|
||||
try argv.append("-gdwarf-4");
|
||||
if (comp.bin_file.options.dwarf_format) |f| switch (f) {
|
||||
.@"32" => try argv.append("-gdwarf32"),
|
||||
.@"64" => try argv.append("-gdwarf64"),
|
||||
};
|
||||
},
|
||||
else => try argv.append("-g"),
|
||||
}
|
||||
}
|
||||
|
||||
@ -3870,13 +3870,62 @@ flagpd1("gcodeview-command-line"),
|
||||
flagpd1("gcodeview-ghash"),
|
||||
flagpd1("gcolumn-info"),
|
||||
flagpd1("gdbx"),
|
||||
flagpd1("gdwarf"),
|
||||
flagpd1("gdwarf32"),
|
||||
flagpd1("gdwarf64"),
|
||||
flagpd1("gdwarf-2"),
|
||||
flagpd1("gdwarf-3"),
|
||||
flagpd1("gdwarf-4"),
|
||||
flagpd1("gdwarf-5"),
|
||||
.{
|
||||
.name = "gdwarf",
|
||||
.syntax = .flag,
|
||||
.zig_equivalent = .debug,
|
||||
.pd1 = true,
|
||||
.pd2 = false,
|
||||
.psl = false,
|
||||
},
|
||||
.{
|
||||
.name = "gdwarf32",
|
||||
.syntax = .flag,
|
||||
.zig_equivalent = .gdwarf32,
|
||||
.pd1 = true,
|
||||
.pd2 = false,
|
||||
.psl = false,
|
||||
},
|
||||
.{
|
||||
.name = "gdwarf64",
|
||||
.syntax = .flag,
|
||||
.zig_equivalent = .gdwarf64,
|
||||
.pd1 = true,
|
||||
.pd2 = false,
|
||||
.psl = false,
|
||||
},
|
||||
.{
|
||||
.name = "gdwarf-2",
|
||||
.syntax = .flag,
|
||||
.zig_equivalent = .debug,
|
||||
.pd1 = true,
|
||||
.pd2 = false,
|
||||
.psl = false,
|
||||
},
|
||||
.{
|
||||
.name = "gdwarf-3",
|
||||
.syntax = .flag,
|
||||
.zig_equivalent = .debug,
|
||||
.pd1 = true,
|
||||
.pd2 = false,
|
||||
.psl = false,
|
||||
},
|
||||
.{
|
||||
.name = "gdwarf-4",
|
||||
.syntax = .flag,
|
||||
.zig_equivalent = .debug,
|
||||
.pd1 = true,
|
||||
.pd2 = false,
|
||||
.psl = false,
|
||||
},
|
||||
.{
|
||||
.name = "gdwarf-5",
|
||||
.syntax = .flag,
|
||||
.zig_equivalent = .debug,
|
||||
.pd1 = true,
|
||||
.pd2 = false,
|
||||
.psl = false,
|
||||
},
|
||||
flagpd1("gdwarf-aranges"),
|
||||
flagpd1("gembed-source"),
|
||||
sepd1("gen-cdb-fragment-path"),
|
||||
|
||||
@ -433,7 +433,7 @@ pub const Object = struct {
|
||||
if (!options.strip) {
|
||||
switch (options.target.ofmt) {
|
||||
.coff => llvm_module.addModuleCodeViewFlag(),
|
||||
else => llvm_module.addModuleDebugInfoFlag(),
|
||||
else => llvm_module.addModuleDebugInfoFlag(options.dwarf_format == std.dwarf.Format.@"64"),
|
||||
}
|
||||
const di_builder = llvm_module.createDIBuilder(true);
|
||||
opt_di_builder = di_builder;
|
||||
|
||||
@ -409,7 +409,7 @@ pub const Module = opaque {
|
||||
extern fn LLVMSetTarget(M: *Module, Triple: [*:0]const u8) void;
|
||||
|
||||
pub const addModuleDebugInfoFlag = ZigLLVMAddModuleDebugInfoFlag;
|
||||
extern fn ZigLLVMAddModuleDebugInfoFlag(module: *Module) void;
|
||||
extern fn ZigLLVMAddModuleDebugInfoFlag(module: *Module, dwarf64: bool) void;
|
||||
|
||||
pub const addModuleCodeViewFlag = ZigLLVMAddModuleCodeViewFlag;
|
||||
extern fn ZigLLVMAddModuleCodeViewFlag(module: *Module) void;
|
||||
|
||||
@ -200,6 +200,8 @@ pub const Options = struct {
|
||||
compatibility_version: ?std.builtin.Version,
|
||||
libc_installation: ?*const LibCInstallation,
|
||||
|
||||
dwarf_format: ?std.dwarf.Format,
|
||||
|
||||
/// WASI-only. Type of WASI execution model ("command" or "reactor").
|
||||
wasi_exec_model: std.builtin.WasiExecModel = undefined,
|
||||
|
||||
|
||||
16
src/main.zig
16
src/main.zig
@ -844,6 +844,7 @@ fn buildOutputType(
|
||||
var reference_trace: ?u32 = null;
|
||||
var error_tracing: ?bool = null;
|
||||
var pdb_out_path: ?[]const u8 = null;
|
||||
var dwarf_format: ?std.dwarf.Format = null;
|
||||
|
||||
// e.g. -m3dnow or -mno-outline-atomics. They correspond to std.Target llvm cpu feature names.
|
||||
// This array is populated by zig cc frontend and then has to be converted to zig-style
|
||||
@ -1355,6 +1356,10 @@ fn buildOutputType(
|
||||
strip = true;
|
||||
} else if (mem.eql(u8, arg, "-fno-strip")) {
|
||||
strip = false;
|
||||
} else if (mem.eql(u8, arg, "-gdwarf32")) {
|
||||
dwarf_format = .@"32";
|
||||
} else if (mem.eql(u8, arg, "-gdwarf64")) {
|
||||
dwarf_format = .@"64";
|
||||
} else if (mem.eql(u8, arg, "-fformatted-panics")) {
|
||||
formatted_panics = true;
|
||||
} else if (mem.eql(u8, arg, "-fno-formatted-panics")) {
|
||||
@ -1762,6 +1767,14 @@ fn buildOutputType(
|
||||
try clang_argv.appendSlice(it.other_args);
|
||||
}
|
||||
},
|
||||
.gdwarf32 => {
|
||||
strip = false;
|
||||
dwarf_format = .@"32";
|
||||
},
|
||||
.gdwarf64 => {
|
||||
strip = false;
|
||||
dwarf_format = .@"64";
|
||||
},
|
||||
.sanitize => {
|
||||
if (mem.eql(u8, it.only_arg, "undefined")) {
|
||||
want_sanitize_c = true;
|
||||
@ -3145,6 +3158,7 @@ fn buildOutputType(
|
||||
.test_runner_path = test_runner_path,
|
||||
.disable_lld_caching = !output_to_cache,
|
||||
.subsystem = subsystem,
|
||||
.dwarf_format = dwarf_format,
|
||||
.wasi_exec_model = wasi_exec_model,
|
||||
.debug_compile_errors = debug_compile_errors,
|
||||
.enable_link_snapshots = enable_link_snapshots,
|
||||
@ -5102,6 +5116,8 @@ pub const ClangArgIterator = struct {
|
||||
asm_only,
|
||||
optimize,
|
||||
debug,
|
||||
gdwarf32,
|
||||
gdwarf64,
|
||||
sanitize,
|
||||
linker_script,
|
||||
dry_run,
|
||||
|
||||
@ -1163,9 +1163,13 @@ void ZigLLVMGetNativeTarget(ZigLLVM_ArchType *arch_type,
|
||||
free(native_triple);
|
||||
}
|
||||
|
||||
void ZigLLVMAddModuleDebugInfoFlag(LLVMModuleRef module) {
|
||||
void ZigLLVMAddModuleDebugInfoFlag(LLVMModuleRef module, bool produce_dwarf64) {
|
||||
unwrap(module)->addModuleFlag(Module::Warning, "Debug Info Version", DEBUG_METADATA_VERSION);
|
||||
unwrap(module)->addModuleFlag(Module::Warning, "Dwarf Version", 4);
|
||||
|
||||
if (produce_dwarf64) {
|
||||
unwrap(module)->addModuleFlag(Module::Warning, "DWARF64", 1);
|
||||
}
|
||||
}
|
||||
|
||||
void ZigLLVMAddModuleCodeViewFlag(LLVMModuleRef module) {
|
||||
|
||||
@ -238,7 +238,7 @@ ZIG_EXTERN_C unsigned ZigLLVMTag_DW_union_type(void);
|
||||
|
||||
ZIG_EXTERN_C struct ZigLLVMDIBuilder *ZigLLVMCreateDIBuilder(LLVMModuleRef module, bool allow_unresolved);
|
||||
ZIG_EXTERN_C void ZigLLVMDisposeDIBuilder(struct ZigLLVMDIBuilder *dbuilder);
|
||||
ZIG_EXTERN_C void ZigLLVMAddModuleDebugInfoFlag(LLVMModuleRef module);
|
||||
ZIG_EXTERN_C void ZigLLVMAddModuleDebugInfoFlag(LLVMModuleRef module, bool produce_dwarf64);
|
||||
ZIG_EXTERN_C void ZigLLVMAddModuleCodeViewFlag(LLVMModuleRef module);
|
||||
ZIG_EXTERN_C void ZigLLVMSetModulePICLevel(LLVMModuleRef module);
|
||||
ZIG_EXTERN_C void ZigLLVMSetModulePIELevel(LLVMModuleRef module);
|
||||
|
||||
@ -241,23 +241,31 @@ const known_options = [_]KnownOpt{
|
||||
.ident = "debug",
|
||||
},
|
||||
.{
|
||||
.name = "g-dwarf",
|
||||
.name = "gdwarf32",
|
||||
.ident = "gdwarf32",
|
||||
},
|
||||
.{
|
||||
.name = "gdwarf64",
|
||||
.ident = "gdwarf64",
|
||||
},
|
||||
.{
|
||||
.name = "gdwarf",
|
||||
.ident = "debug",
|
||||
},
|
||||
.{
|
||||
.name = "g-dwarf-2",
|
||||
.name = "gdwarf-2",
|
||||
.ident = "debug",
|
||||
},
|
||||
.{
|
||||
.name = "g-dwarf-3",
|
||||
.name = "gdwarf-3",
|
||||
.ident = "debug",
|
||||
},
|
||||
.{
|
||||
.name = "g-dwarf-4",
|
||||
.name = "gdwarf-4",
|
||||
.ident = "debug",
|
||||
},
|
||||
.{
|
||||
.name = "g-dwarf-5",
|
||||
.name = "gdwarf-5",
|
||||
.ident = "debug",
|
||||
},
|
||||
.{
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user