Commit 66253e5b51

Jakub Konka <kubkon@jakubkonka.com>
2024-04-20 23:25:53
link/elf: populate current Zig version in .comment; test
1 parent bc0d84b
Changed files (2)
src
link
test
link
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);
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);