From 66253e5b5152c6fa59e285badd13250e05de47bb Mon Sep 17 00:00:00 2001 From: Jakub Konka Date: Sat, 20 Apr 2024 23:25:53 +0200 Subject: [PATCH] link/elf: populate current Zig version in .comment; test --- src/link/Elf.zig | 2 +- test/link/elf.zig | 34 ++++++++++++++++++++++++++++++++++ 2 files changed, 35 insertions(+), 1 deletion(-) diff --git a/src/link/Elf.zig b/src/link/Elf.zig index 5af7c7d6aa..473e1ab76a 100644 --- a/src/link/Elf.zig +++ b/src/link/Elf.zig @@ -3329,7 +3329,7 @@ fn checkDuplicates(self: *Elf) !void { pub fn addCommentString(self: *Elf) !void { const msec_index = try self.getOrCreateMergeSection(".comment", elf.SHF_MERGE | elf.SHF_STRINGS, elf.SHT_PROGBITS); const msec = self.mergeSection(msec_index); - const res = try msec.insertZ(self.base.comp.gpa, "zig version x.x.x"); // TODO get actual version + const res = try msec.insertZ(self.base.comp.gpa, "zig " ++ builtin.zig_version_string); if (res.found_existing) return; const msub_index = try self.addMergeSubsection(); const msub = self.mergeSubsection(msub_index); diff --git a/test/link/elf.zig b/test/link/elf.zig index 4b84dfb3e8..d97afd4d8f 100644 --- a/test/link/elf.zig +++ b/test/link/elf.zig @@ -61,6 +61,7 @@ pub fn testAll(b: *Build, build_opts: BuildOptions) *Step { elf_step.dependOn(testAbsSymbols(b, .{ .target = musl_target })); elf_step.dependOn(testCommonSymbols(b, .{ .target = musl_target })); elf_step.dependOn(testCommonSymbolsInArchive(b, .{ .target = musl_target })); + elf_step.dependOn(testCommentString(b, .{ .target = musl_target })); elf_step.dependOn(testEmptyObject(b, .{ .target = musl_target })); elf_step.dependOn(testEntryPoint(b, .{ .target = musl_target })); elf_step.dependOn(testGcSections(b, .{ .target = musl_target })); @@ -83,6 +84,7 @@ pub fn testAll(b: *Build, build_opts: BuildOptions) *Step { elf_step.dependOn(testAsNeeded(b, .{ .target = gnu_target })); // https://github.com/ziglang/zig/issues/17430 // elf_step.dependOn(testCanonicalPlt(b, .{ .target = gnu_target })); + elf_step.dependOn(testCommentString(b, .{ .target = gnu_target })); elf_step.dependOn(testCopyrel(b, .{ .target = gnu_target })); // https://github.com/ziglang/zig/issues/17430 // elf_step.dependOn(testCopyrelAlias(b, .{ .target = gnu_target })); @@ -154,6 +156,8 @@ pub fn testAll(b: *Build, build_opts: BuildOptions) *Step { elf_step.dependOn(testThunks(b, .{ .target = aarch64_musl })); // x86_64 self-hosted backend + elf_step.dependOn(testCommentString(b, .{ .use_llvm = false, .target = default_target })); + elf_step.dependOn(testCommentStringStaticLib(b, .{ .use_llvm = false, .target = default_target })); elf_step.dependOn(testEmitRelocatable(b, .{ .use_llvm = false, .target = x86_64_musl })); elf_step.dependOn(testEmitStaticLibZig(b, .{ .use_llvm = false, .target = x86_64_musl })); elf_step.dependOn(testGcSectionsZig(b, .{ .use_llvm = false, .target = default_target })); @@ -364,6 +368,36 @@ fn testCanonicalPlt(b: *Build, opts: Options) *Step { return test_step; } +fn testCommentString(b: *Build, opts: Options) *Step { + const test_step = addTestStep(b, "comment-string", opts); + + const exe = addExecutable(b, opts, .{ .name = "main", .zig_source_bytes = + \\pub fn main() void {} + }); + + const check = exe.checkObject(); + check.dumpSection(".comment"); + check.checkContains("zig"); + test_step.dependOn(&check.step); + + return test_step; +} + +fn testCommentStringStaticLib(b: *Build, opts: Options) *Step { + const test_step = addTestStep(b, "comment-string-static-lib", opts); + + const lib = addStaticLibrary(b, opts, .{ .name = "lib", .zig_source_bytes = + \\export fn foo() void {} + }); + + const check = lib.checkObject(); + check.dumpSection(".comment"); + check.checkContains("zig"); + test_step.dependOn(&check.step); + + return test_step; +} + fn testCommonSymbols(b: *Build, opts: Options) *Step { const test_step = addTestStep(b, "common-symbols", opts);