From b57819118ddf287a135b4c2fb7182615b402fbc2 Mon Sep 17 00:00:00 2001 From: Alex Rønne Petersen Date: Tue, 5 Nov 2024 14:29:44 +0100 Subject: Compilation: Move no_builtin to Package.Module. This option, by its very nature, needs to be attached to a module. If it isn't, the code in a module could break at random when compiled into an application that doesn't have this option set. After this change, skip_linker_dependencies no longer implies no_builtin in the LLVM backend. --- src/Compilation.zig | 22 +++++++++++++--------- 1 file changed, 13 insertions(+), 9 deletions(-) (limited to 'src/Compilation.zig') diff --git a/src/Compilation.zig b/src/Compilation.zig index 51877d7973..24ee899610 100644 --- a/src/Compilation.zig +++ b/src/Compilation.zig @@ -89,7 +89,6 @@ windows_libs: std.StringArrayHashMapUnmanaged(void), version: ?std.SemanticVersion, libc_installation: ?*const LibCInstallation, skip_linker_dependencies: bool, -no_builtin: bool, function_sections: bool, data_sections: bool, link_eh_frame_hdr: bool, @@ -852,6 +851,7 @@ pub const cache_helpers = struct { hh.add(mod.fuzz); hh.add(mod.unwind_tables); hh.add(mod.structured_cfg); + hh.add(mod.no_builtin); hh.addListOfBytes(mod.cc_argv); } @@ -1057,7 +1057,6 @@ pub const CreateOptions = struct { want_lto: ?bool = null, function_sections: bool = false, data_sections: bool = false, - no_builtin: bool = false, time_report: bool = false, stack_report: bool = false, link_eh_frame_hdr: bool = false, @@ -1353,7 +1352,6 @@ pub fn create(gpa: Allocator, arena: Allocator, options: CreateOptions) !*Compil cache.hash.add(options.config.link_mode); cache.hash.add(options.function_sections); cache.hash.add(options.data_sections); - cache.hash.add(options.no_builtin); cache.hash.add(link_libc); cache.hash.add(options.config.link_libcpp); cache.hash.add(options.config.link_libunwind); @@ -1490,7 +1488,6 @@ pub fn create(gpa: Allocator, arena: Allocator, options: CreateOptions) !*Compil .framework_dirs = options.framework_dirs, .llvm_opt_bisect_limit = options.llvm_opt_bisect_limit, .skip_linker_dependencies = options.skip_linker_dependencies, - .no_builtin = options.no_builtin, .job_queued_update_builtin_zig = have_zcu, .function_sections = options.function_sections, .data_sections = options.data_sections, @@ -5261,7 +5258,7 @@ pub fn addCCArgs( try argv.append("-fdata-sections"); } - if (comp.no_builtin) { + if (mod.no_builtin) { try argv.append("-fno-builtin"); } @@ -6189,6 +6186,7 @@ fn buildOutputFromZig( .pic = comp.root_mod.pic, .optimize_mode = optimize_mode, .structured_cfg = comp.root_mod.structured_cfg, + .no_builtin = true, .code_model = comp.root_mod.code_model, }, .global = config, @@ -6237,7 +6235,6 @@ fn buildOutputFromZig( }, .function_sections = true, .data_sections = true, - .no_builtin = true, .emit_h = null, .verbose_cc = comp.verbose_cc, .verbose_link = comp.verbose_link, @@ -6262,16 +6259,21 @@ fn buildOutputFromZig( comp.queueLinkTaskMode(crt_file.full_object_path, output_mode); } +pub const CrtFileOptions = struct { + pic: ?bool = null, + no_builtin: ?bool = null, +}; + pub fn build_crt_file( comp: *Compilation, root_name: []const u8, output_mode: std.builtin.OutputMode, - pic: ?bool, misc_task_tag: MiscTask, prog_node: std.Progress.Node, /// These elements have to get mutated to add the owner module after it is /// created within this function. c_source_files: []CSourceFile, + options: CrtFileOptions, ) !void { const tracy_trace = trace(@src()); defer tracy_trace.end(); @@ -6319,10 +6321,12 @@ pub fn build_crt_file( .omit_frame_pointer = comp.root_mod.omit_frame_pointer, .valgrind = false, .unwind_tables = false, - // Some CRT objects (rcrt1.o, Scrt1.o) are opinionated about PIC. - .pic = pic orelse comp.root_mod.pic, + // Some CRT objects (e.g. musl's rcrt1.o and Scrt1.o) are opinionated about PIC. + .pic = options.pic orelse comp.root_mod.pic, .optimize_mode = comp.compilerRtOptMode(), .structured_cfg = comp.root_mod.structured_cfg, + // Some libcs (e.g. musl) are opinionated about -fno-builtin. + .no_builtin = options.no_builtin orelse comp.root_mod.no_builtin, }, .global = config, .cc_argv = &.{}, -- cgit v1.2.3 From 7b1d2fa004ef8b1f59ff0b54327f47bb98e18563 Mon Sep 17 00:00:00 2001 From: Alex Rønne Petersen Date: Tue, 5 Nov 2024 14:31:42 +0100 Subject: Compilation: Also set essential module options when including compiler-rt.o. Closes #21831. --- src/Compilation.zig | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) (limited to 'src/Compilation.zig') diff --git a/src/Compilation.zig b/src/Compilation.zig index 24ee899610..acf85f9fc1 100644 --- a/src/Compilation.zig +++ b/src/Compilation.zig @@ -1298,7 +1298,11 @@ pub fn create(gpa: Allocator, arena: Allocator, options: CreateOptions) !*Compil }, .fully_qualified_name = "compiler_rt", .cc_argv = &.{}, - .inherited = .{}, + .inherited = .{ + .stack_check = false, + .stack_protector = 0, + .no_builtin = true, + }, .global = options.config, .parent = options.root_mod, .builtin_mod = options.root_mod.getBuiltinDependency(), -- cgit v1.2.3 From e88501a09076e134675160c373bbfb5321038541 Mon Sep 17 00:00:00 2001 From: Alex Rønne Petersen Date: Tue, 5 Nov 2024 18:10:26 +0100 Subject: Compilation: Fix unwind table logic for compiler-rt. This looks to be a refactoring leftover. --- src/Compilation.zig | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) (limited to 'src/Compilation.zig') diff --git a/src/Compilation.zig b/src/Compilation.zig index acf85f9fc1..b3684d7e61 100644 --- a/src/Compilation.zig +++ b/src/Compilation.zig @@ -6155,7 +6155,6 @@ fn buildOutputFromZig( assert(output_mode != .Exe); - const unwind_tables = comp.link_eh_frame_hdr; const strip = comp.compilerRtStrip(); const optimize_mode = comp.compilerRtOptMode(); @@ -6169,7 +6168,6 @@ fn buildOutputFromZig( .root_optimize_mode = optimize_mode, .root_strip = strip, .link_libc = comp.config.link_libc, - .any_unwind_tables = unwind_tables, }); const root_mod = try Package.Module.create(arena, .{ @@ -6186,7 +6184,7 @@ fn buildOutputFromZig( .stack_protector = 0, .red_zone = comp.root_mod.red_zone, .omit_frame_pointer = comp.root_mod.omit_frame_pointer, - .unwind_tables = unwind_tables, + .unwind_tables = comp.root_mod.unwind_tables, .pic = comp.root_mod.pic, .optimize_mode = optimize_mode, .structured_cfg = comp.root_mod.structured_cfg, -- cgit v1.2.3 From 7fef0b4a23ae616ebfec978d6af8e9f716a63555 Mon Sep 17 00:00:00 2001 From: Alex Rønne Petersen Date: Tue, 5 Nov 2024 15:33:28 +0100 Subject: musl: Pass -f(function,data)-sections via CrtFileOptions instead of CFLAGS. --- src/Compilation.zig | 4 ++++ src/musl.zig | 14 ++++++++++++-- 2 files changed, 16 insertions(+), 2 deletions(-) (limited to 'src/Compilation.zig') diff --git a/src/Compilation.zig b/src/Compilation.zig index b3684d7e61..0dcc121fac 100644 --- a/src/Compilation.zig +++ b/src/Compilation.zig @@ -6262,6 +6262,8 @@ fn buildOutputFromZig( } pub const CrtFileOptions = struct { + function_sections: ?bool = null, + data_sections: ?bool = null, pic: ?bool = null, no_builtin: ?bool = null, }; @@ -6356,6 +6358,8 @@ pub fn build_crt_file( .directory = null, // Put it in the cache directory. .basename = basename, }, + .function_sections = options.function_sections orelse false, + .data_sections = options.data_sections orelse false, .emit_h = null, .c_source_files = c_source_files, .verbose_cc = comp.verbose_cc, diff --git a/src/musl.zig b/src/musl.zig index ec2b0674ff..99662bbd2c 100644 --- a/src/musl.zig +++ b/src/musl.zig @@ -39,6 +39,8 @@ pub fn buildCrtFile(comp: *Compilation, in_crt_file: CrtFile, prog_node: std.Pro }, }; return comp.build_crt_file("crti", .Obj, .@"musl crti.o", prog_node, &files, .{ + .function_sections = true, + .data_sections = true, .no_builtin = true, }); }, @@ -53,6 +55,8 @@ pub fn buildCrtFile(comp: *Compilation, in_crt_file: CrtFile, prog_node: std.Pro }, }; return comp.build_crt_file("crtn", .Obj, .@"musl crtn.o", prog_node, &files, .{ + .function_sections = true, + .data_sections = true, .no_builtin = true, }); }, @@ -70,6 +74,8 @@ pub fn buildCrtFile(comp: *Compilation, in_crt_file: CrtFile, prog_node: std.Pro }, }; return comp.build_crt_file("crt1", .Obj, .@"musl crt1.o", prog_node, &files, .{ + .function_sections = true, + .data_sections = true, .no_builtin = true, }); }, @@ -87,6 +93,8 @@ pub fn buildCrtFile(comp: *Compilation, in_crt_file: CrtFile, prog_node: std.Pro }, }; return comp.build_crt_file("rcrt1", .Obj, .@"musl rcrt1.o", prog_node, &files, .{ + .function_sections = true, + .data_sections = true, .pic = true, .no_builtin = true, }); @@ -105,6 +113,8 @@ pub fn buildCrtFile(comp: *Compilation, in_crt_file: CrtFile, prog_node: std.Pro }, }; return comp.build_crt_file("Scrt1", .Obj, .@"musl Scrt1.o", prog_node, &files, .{ + .function_sections = true, + .data_sections = true, .pic = true, .no_builtin = true, }); @@ -201,6 +211,8 @@ pub fn buildCrtFile(comp: *Compilation, in_crt_file: CrtFile, prog_node: std.Pro }; } return comp.build_crt_file("c", .Lib, .@"musl libc.a", prog_node, c_source_files.items, .{ + .function_sections = true, + .data_sections = true, .no_builtin = true, }); }, @@ -448,8 +460,6 @@ fn addCcArgs( "-fomit-frame-pointer", "-fno-unwind-tables", "-fno-asynchronous-unwind-tables", - "-ffunction-sections", - "-fdata-sections", "-Qunused-arguments", "-w", // disable all warnings -- cgit v1.2.3 From 796d4845ff6747611c0061f8fe5c3c1c5b967226 Mon Sep 17 00:00:00 2001 From: Alex Rønne Petersen Date: Tue, 5 Nov 2024 14:47:36 +0100 Subject: musl: Pass -fomit-frame-pointer via CrtFileOptions. --- src/Compilation.zig | 4 +++- src/musl.zig | 7 ++++++- 2 files changed, 9 insertions(+), 2 deletions(-) (limited to 'src/Compilation.zig') diff --git a/src/Compilation.zig b/src/Compilation.zig index 0dcc121fac..f646ef258a 100644 --- a/src/Compilation.zig +++ b/src/Compilation.zig @@ -6264,6 +6264,7 @@ fn buildOutputFromZig( pub const CrtFileOptions = struct { function_sections: ?bool = null, data_sections: ?bool = null, + omit_frame_pointer: ?bool = null, pic: ?bool = null, no_builtin: ?bool = null, }; @@ -6322,7 +6323,8 @@ pub fn build_crt_file( .sanitize_c = false, .sanitize_thread = false, .red_zone = comp.root_mod.red_zone, - .omit_frame_pointer = comp.root_mod.omit_frame_pointer, + // Some libcs (e.g. musl) are opinionated about -fomit-frame-pointer. + .omit_frame_pointer = options.omit_frame_pointer orelse comp.root_mod.omit_frame_pointer, .valgrind = false, .unwind_tables = false, // Some CRT objects (e.g. musl's rcrt1.o and Scrt1.o) are opinionated about PIC. diff --git a/src/musl.zig b/src/musl.zig index 99662bbd2c..b1d47361a8 100644 --- a/src/musl.zig +++ b/src/musl.zig @@ -41,6 +41,7 @@ pub fn buildCrtFile(comp: *Compilation, in_crt_file: CrtFile, prog_node: std.Pro return comp.build_crt_file("crti", .Obj, .@"musl crti.o", prog_node, &files, .{ .function_sections = true, .data_sections = true, + .omit_frame_pointer = true, .no_builtin = true, }); }, @@ -57,6 +58,7 @@ pub fn buildCrtFile(comp: *Compilation, in_crt_file: CrtFile, prog_node: std.Pro return comp.build_crt_file("crtn", .Obj, .@"musl crtn.o", prog_node, &files, .{ .function_sections = true, .data_sections = true, + .omit_frame_pointer = true, .no_builtin = true, }); }, @@ -76,6 +78,7 @@ pub fn buildCrtFile(comp: *Compilation, in_crt_file: CrtFile, prog_node: std.Pro return comp.build_crt_file("crt1", .Obj, .@"musl crt1.o", prog_node, &files, .{ .function_sections = true, .data_sections = true, + .omit_frame_pointer = true, .no_builtin = true, }); }, @@ -95,6 +98,7 @@ pub fn buildCrtFile(comp: *Compilation, in_crt_file: CrtFile, prog_node: std.Pro return comp.build_crt_file("rcrt1", .Obj, .@"musl rcrt1.o", prog_node, &files, .{ .function_sections = true, .data_sections = true, + .omit_frame_pointer = true, .pic = true, .no_builtin = true, }); @@ -115,6 +119,7 @@ pub fn buildCrtFile(comp: *Compilation, in_crt_file: CrtFile, prog_node: std.Pro return comp.build_crt_file("Scrt1", .Obj, .@"musl Scrt1.o", prog_node, &files, .{ .function_sections = true, .data_sections = true, + .omit_frame_pointer = true, .pic = true, .no_builtin = true, }); @@ -213,6 +218,7 @@ pub fn buildCrtFile(comp: *Compilation, in_crt_file: CrtFile, prog_node: std.Pro return comp.build_crt_file("c", .Lib, .@"musl libc.a", prog_node, c_source_files.items, .{ .function_sections = true, .data_sections = true, + .omit_frame_pointer = true, .no_builtin = true, }); }, @@ -457,7 +463,6 @@ fn addCcArgs( o_arg, - "-fomit-frame-pointer", "-fno-unwind-tables", "-fno-asynchronous-unwind-tables", -- cgit v1.2.3