Commit 3beef5a94f

Luuk de Gram <luuk@degram.dev>
2022-10-02 18:38:52
CheckObjectStep: parsing and dumping producers
1 parent 43b55ea
Changed files (2)
lib
src
lib/std/build/CheckObjectStep.zig
@@ -644,6 +644,8 @@ const WasmDumper = struct {
 
                 if (mem.eql(u8, name, "name")) {
                     try parseDumpNames(reader, writer, data);
+                } else if (mem.eql(u8, name, "producers")) {
+                    try parseDumpProducers(reader, writer, data);
                 }
                 // TODO: Implement parsing and dumping other custom sections (such as relocations)
             },
@@ -863,4 +865,38 @@ const WasmDumper = struct {
             }
         }
     }
+
+    fn parseDumpProducers(reader: anytype, writer: anytype, data: []const u8) !void {
+        const field_count = try std.leb.readULEB128(u32, reader);
+        try writer.print("fields {d}\n", .{field_count});
+        var current_field: u32 = 0;
+        while (current_field < field_count) : (current_field += 1) {
+            const field_name_length = try std.leb.readULEB128(u32, reader);
+            const field_name = data[reader.context.pos..][0..field_name_length];
+            reader.context.pos += field_name_length;
+
+            const value_count = try std.leb.readULEB128(u32, reader);
+            try writer.print(
+                \\field_name {s}
+                \\values {d}
+            , .{ field_name, value_count });
+            try writer.writeByte('\n');
+            var current_value: u32 = 0;
+            while (current_value < value_count) : (current_value += 1) {
+                const value_length = try std.leb.readULEB128(u32, reader);
+                const value = data[reader.context.pos..][0..value_length];
+                reader.context.pos += value_length;
+
+                const version_length = try std.leb.readULEB128(u32, reader);
+                const version = data[reader.context.pos..][0..version_length];
+                reader.context.pos += version_length;
+
+                try writer.print(
+                    \\value_name {s}
+                    \\version {s}
+                , .{ value, version });
+                try writer.writeByte('\n');
+            }
+        }
+    }
 };
src/link/Wasm.zig
@@ -2671,7 +2671,7 @@ fn emitProducerSection(binary_bytes: *std.ArrayList(u8)) !void {
 
     // processed-by field
     {
-        const processed_by = "processed_by";
+        const processed_by = "processed-by";
         try leb.writeULEB128(writer, @intCast(u32, processed_by.len));
         try writer.writeAll(processed_by);