authorgravatar for andrew@ziglang.orgAndrew Kelley <andrew@ziglang.org> 2025-08-26 23:09:31-07:00
committergravatar for andrew@ziglang.orgAndrew Kelley <andrew@ziglang.org> 2025-08-28 18:30:57-07:00
log8f4cb4614fa7fe275dff360e9f281cb43b99261a
tree8f6544f9b41a723d720cbd541740f7511fd17910
parent5d7507214d5695842235cf0ad83849c5a2c97664

compiler: update not to use GenericWriter


4 files changed, 84 insertions(+), 91 deletions(-)

src/libs/freebsd.zig+36-39
...@@ -512,7 +512,7 @@ pub fn buildSharedObjects(comp: *Compilation, prog_node: std.Progress.Node) anye...@@ -512,7 +512,7 @@ pub fn buildSharedObjects(comp: *Compilation, prog_node: std.Progress.Node) anye
512 {512 {
513 var map_contents = std.array_list.Managed(u8).init(arena);513 var map_contents = std.array_list.Managed(u8).init(arena);
514 for (metadata.all_versions[0 .. target_ver_index + 1]) |ver| {514 for (metadata.all_versions[0 .. target_ver_index + 1]) |ver| {
515 try map_contents.writer().print("FBSD_{d}.{d} {{ }};\n", .{ ver.major, ver.minor });515 try map_contents.print("FBSD_{d}.{d} {{ }};\n", .{ ver.major, ver.minor });
516 }516 }
517 try o_directory.handle.writeFile(.{ .sub_path = all_map_basename, .data = map_contents.items });517 try o_directory.handle.writeFile(.{ .sub_path = all_map_basename, .data = map_contents.items });
518 map_contents.deinit();518 map_contents.deinit();
...@@ -524,20 +524,17 @@ pub fn buildSharedObjects(comp: *Compilation, prog_node: std.Progress.Node) anye...@@ -524,20 +524,17 @@ pub fn buildSharedObjects(comp: *Compilation, prog_node: std.Progress.Node) anye
524 for (libs, 0..) |lib, lib_i| {524 for (libs, 0..) |lib, lib_i| {
525 stubs_asm.shrinkRetainingCapacity(0);525 stubs_asm.shrinkRetainingCapacity(0);
526526
527 const stubs_writer = stubs_asm.writer();527 try stubs_asm.appendSlice(".text\n");
528
529 try stubs_writer.writeAll(".text\n");
530528
531 var sym_i: usize = 0;529 var sym_i: usize = 0;
532 var sym_name_buf = std.array_list.Managed(u8).init(arena);530 var sym_name_buf: std.Io.Writer.Allocating = .init(arena);
533 var opt_symbol_name: ?[]const u8 = null;531 var opt_symbol_name: ?[]const u8 = null;
534 var versions = try std.DynamicBitSetUnmanaged.initEmpty(arena, metadata.all_versions.len);532 var versions = try std.DynamicBitSetUnmanaged.initEmpty(arena, metadata.all_versions.len);
535 var weak_linkages = try std.DynamicBitSetUnmanaged.initEmpty(arena, metadata.all_versions.len);533 var weak_linkages = try std.DynamicBitSetUnmanaged.initEmpty(arena, metadata.all_versions.len);
536534
537 var inc_fbs = std.io.fixedBufferStream(metadata.inclusions);535 var inc_reader: std.Io.Reader = .fixed(metadata.inclusions);
538 var inc_reader = inc_fbs.reader();
539536
540 const fn_inclusions_len = try inc_reader.readInt(u16, .little);537 const fn_inclusions_len = try inc_reader.takeInt(u16, .little);
541538
542 // Pick the default symbol version:539 // Pick the default symbol version:
543 // - If there are no versions, don't emit it540 // - If there are no versions, don't emit it
...@@ -550,19 +547,19 @@ pub fn buildSharedObjects(comp: *Compilation, prog_node: std.Progress.Node) anye...@@ -550,19 +547,19 @@ pub fn buildSharedObjects(comp: *Compilation, prog_node: std.Progress.Node) anye
550 while (sym_i < fn_inclusions_len) : (sym_i += 1) {547 while (sym_i < fn_inclusions_len) : (sym_i += 1) {
551 const sym_name = opt_symbol_name orelse n: {548 const sym_name = opt_symbol_name orelse n: {
552 sym_name_buf.clearRetainingCapacity();549 sym_name_buf.clearRetainingCapacity();
553 try inc_reader.streamUntilDelimiter(sym_name_buf.writer(), 0, null);550 _ = try inc_reader.streamDelimiter(&sym_name_buf.writer, 0);
554551
555 opt_symbol_name = sym_name_buf.items;552 opt_symbol_name = sym_name_buf.written();
556 versions.unsetAll();553 versions.unsetAll();
557 weak_linkages.unsetAll();554 weak_linkages.unsetAll();
558 chosen_def_ver_index = 255;555 chosen_def_ver_index = 255;
559 chosen_unversioned_ver_index = 255;556 chosen_unversioned_ver_index = 255;
560557
561 break :n sym_name_buf.items;558 break :n sym_name_buf.written();
562 };559 };
563 {560 {
564 const targets = try std.leb.readUleb128(u64, inc_reader);561 const targets = try inc_reader.takeLeb128(u64);
565 var lib_index = try inc_reader.readByte();562 var lib_index = try inc_reader.takeByte();
566563
567 const is_unversioned = (lib_index & (1 << 5)) != 0;564 const is_unversioned = (lib_index & (1 << 5)) != 0;
568 const is_weak = (lib_index & (1 << 6)) != 0;565 const is_weak = (lib_index & (1 << 6)) != 0;
...@@ -576,7 +573,7 @@ pub fn buildSharedObjects(comp: *Compilation, prog_node: std.Progress.Node) anye...@@ -576,7 +573,7 @@ pub fn buildSharedObjects(comp: *Compilation, prog_node: std.Progress.Node) anye
576 ((targets & (@as(u64, 1) << @as(u6, @intCast(target_targ_index)))) != 0);573 ((targets & (@as(u64, 1) << @as(u6, @intCast(target_targ_index)))) != 0);
577574
578 while (true) {575 while (true) {
579 const byte = try inc_reader.readByte();576 const byte = try inc_reader.takeByte();
580 const last = (byte & 0b1000_0000) != 0;577 const last = (byte & 0b1000_0000) != 0;
581 const ver_i = @as(u7, @truncate(byte));578 const ver_i = @as(u7, @truncate(byte));
582 if (ok_lib_and_target and ver_i <= target_ver_index) {579 if (ok_lib_and_target and ver_i <= target_ver_index) {
...@@ -608,7 +605,7 @@ pub fn buildSharedObjects(comp: *Compilation, prog_node: std.Progress.Node) anye...@@ -608,7 +605,7 @@ pub fn buildSharedObjects(comp: *Compilation, prog_node: std.Progress.Node) anye
608 // .globl _Exit605 // .globl _Exit
609 // .type _Exit, %function606 // .type _Exit, %function
610 // _Exit: .long 0607 // _Exit: .long 0
611 try stubs_writer.print(608 try stubs_asm.print(
612 \\.balign {d}609 \\.balign {d}
613 \\.{s} {s}610 \\.{s} {s}
614 \\.type {s}, %function611 \\.type {s}, %function
...@@ -640,7 +637,7 @@ pub fn buildSharedObjects(comp: *Compilation, prog_node: std.Progress.Node) anye...@@ -640,7 +637,7 @@ pub fn buildSharedObjects(comp: *Compilation, prog_node: std.Progress.Node) anye
640 .{ sym_name, ver.major, ver.minor },637 .{ sym_name, ver.major, ver.minor },
641 );638 );
642639
643 try stubs_writer.print(640 try stubs_asm.print(
644 \\.balign {d}641 \\.balign {d}
645 \\.{s} {s}642 \\.{s} {s}
646 \\.type {s}, %function643 \\.type {s}, %function
...@@ -665,14 +662,14 @@ pub fn buildSharedObjects(comp: *Compilation, prog_node: std.Progress.Node) anye...@@ -665,14 +662,14 @@ pub fn buildSharedObjects(comp: *Compilation, prog_node: std.Progress.Node) anye
665 }662 }
666 }663 }
667664
668 try stubs_writer.writeAll(".data\n");665 try stubs_asm.appendSlice(".data\n");
669666
670 // FreeBSD's `libc.so.7` contains strong references to `__progname` and `environ` which are667 // FreeBSD's `libc.so.7` contains strong references to `__progname` and `environ` which are
671 // defined in the statically-linked startup code. Those references cause the linker to put668 // defined in the statically-linked startup code. Those references cause the linker to put
672 // the symbols in the dynamic symbol table. We need to create dummy references to them here669 // the symbols in the dynamic symbol table. We need to create dummy references to them here
673 // to get the same effect.670 // to get the same effect.
674 if (std.mem.eql(u8, lib.name, "c")) {671 if (std.mem.eql(u8, lib.name, "c")) {
675 try stubs_writer.print(672 try stubs_asm.print(
676 \\.balign {d}673 \\.balign {d}
677 \\.globl __progname674 \\.globl __progname
678 \\.globl environ675 \\.globl environ
...@@ -686,7 +683,7 @@ pub fn buildSharedObjects(comp: *Compilation, prog_node: std.Progress.Node) anye...@@ -686,7 +683,7 @@ pub fn buildSharedObjects(comp: *Compilation, prog_node: std.Progress.Node) anye
686 });683 });
687 }684 }
688685
689 const obj_inclusions_len = try inc_reader.readInt(u16, .little);686 const obj_inclusions_len = try inc_reader.takeInt(u16, .little);
690687
691 var sizes = try arena.alloc(u16, metadata.all_versions.len);688 var sizes = try arena.alloc(u16, metadata.all_versions.len);
692689
...@@ -696,21 +693,21 @@ pub fn buildSharedObjects(comp: *Compilation, prog_node: std.Progress.Node) anye...@@ -696,21 +693,21 @@ pub fn buildSharedObjects(comp: *Compilation, prog_node: std.Progress.Node) anye
696 while (sym_i < obj_inclusions_len) : (sym_i += 1) {693 while (sym_i < obj_inclusions_len) : (sym_i += 1) {
697 const sym_name = opt_symbol_name orelse n: {694 const sym_name = opt_symbol_name orelse n: {
698 sym_name_buf.clearRetainingCapacity();695 sym_name_buf.clearRetainingCapacity();
699 try inc_reader.streamUntilDelimiter(sym_name_buf.writer(), 0, null);696 _ = try inc_reader.streamDelimiter(&sym_name_buf.writer, 0);
700697
701 opt_symbol_name = sym_name_buf.items;698 opt_symbol_name = sym_name_buf.written();
702 versions.unsetAll();699 versions.unsetAll();
703 weak_linkages.unsetAll();700 weak_linkages.unsetAll();
704 chosen_def_ver_index = 255;701 chosen_def_ver_index = 255;
705 chosen_unversioned_ver_index = 255;702 chosen_unversioned_ver_index = 255;
706703
707 break :n sym_name_buf.items;704 break :n sym_name_buf.written();
708 };705 };
709706
710 {707 {
711 const targets = try std.leb.readUleb128(u64, inc_reader);708 const targets = try inc_reader.takeLeb128(u64);
712 const size = try std.leb.readUleb128(u16, inc_reader);709 const size = try inc_reader.takeLeb128(u16);
713 var lib_index = try inc_reader.readByte();710 var lib_index = try inc_reader.takeByte();
714711
715 const is_unversioned = (lib_index & (1 << 5)) != 0;712 const is_unversioned = (lib_index & (1 << 5)) != 0;
716 const is_weak = (lib_index & (1 << 6)) != 0;713 const is_weak = (lib_index & (1 << 6)) != 0;
...@@ -724,7 +721,7 @@ pub fn buildSharedObjects(comp: *Compilation, prog_node: std.Progress.Node) anye...@@ -724,7 +721,7 @@ pub fn buildSharedObjects(comp: *Compilation, prog_node: std.Progress.Node) anye
724 ((targets & (@as(u64, 1) << @as(u6, @intCast(target_targ_index)))) != 0);721 ((targets & (@as(u64, 1) << @as(u6, @intCast(target_targ_index)))) != 0);
725722
726 while (true) {723 while (true) {
727 const byte = try inc_reader.readByte();724 const byte = try inc_reader.takeByte();
728 const last = (byte & 0b1000_0000) != 0;725 const last = (byte & 0b1000_0000) != 0;
729 const ver_i = @as(u7, @truncate(byte));726 const ver_i = @as(u7, @truncate(byte));
730 if (ok_lib_and_target and ver_i <= target_ver_index) {727 if (ok_lib_and_target and ver_i <= target_ver_index) {
...@@ -758,7 +755,7 @@ pub fn buildSharedObjects(comp: *Compilation, prog_node: std.Progress.Node) anye...@@ -758,7 +755,7 @@ pub fn buildSharedObjects(comp: *Compilation, prog_node: std.Progress.Node) anye
758 // .type malloc_conf, %object755 // .type malloc_conf, %object
759 // .size malloc_conf, 4756 // .size malloc_conf, 4
760 // malloc_conf: .fill 4, 1, 0757 // malloc_conf: .fill 4, 1, 0
761 try stubs_writer.print(758 try stubs_asm.print(
762 \\.balign {d}759 \\.balign {d}
763 \\.{s} {s}760 \\.{s} {s}
764 \\.type {s}, %object761 \\.type {s}, %object
...@@ -794,7 +791,7 @@ pub fn buildSharedObjects(comp: *Compilation, prog_node: std.Progress.Node) anye...@@ -794,7 +791,7 @@ pub fn buildSharedObjects(comp: *Compilation, prog_node: std.Progress.Node) anye
794 .{ sym_name, ver.major, ver.minor },791 .{ sym_name, ver.major, ver.minor },
795 );792 );
796793
797 try stubs_asm.writer().print(794 try stubs_asm.print(
798 \\.balign {d}795 \\.balign {d}
799 \\.{s} {s}796 \\.{s} {s}
800 \\.type {s}, %object797 \\.type {s}, %object
...@@ -822,9 +819,9 @@ pub fn buildSharedObjects(comp: *Compilation, prog_node: std.Progress.Node) anye...@@ -822,9 +819,9 @@ pub fn buildSharedObjects(comp: *Compilation, prog_node: std.Progress.Node) anye
822 }819 }
823 }820 }
824821
825 try stubs_writer.writeAll(".tdata\n");822 try stubs_asm.appendSlice(".tdata\n");
826823
827 const tls_inclusions_len = try inc_reader.readInt(u16, .little);824 const tls_inclusions_len = try inc_reader.takeInt(u16, .little);
828825
829 sym_i = 0;826 sym_i = 0;
830 opt_symbol_name = null;827 opt_symbol_name = null;
...@@ -832,21 +829,21 @@ pub fn buildSharedObjects(comp: *Compilation, prog_node: std.Progress.Node) anye...@@ -832,21 +829,21 @@ pub fn buildSharedObjects(comp: *Compilation, prog_node: std.Progress.Node) anye
832 while (sym_i < tls_inclusions_len) : (sym_i += 1) {829 while (sym_i < tls_inclusions_len) : (sym_i += 1) {
833 const sym_name = opt_symbol_name orelse n: {830 const sym_name = opt_symbol_name orelse n: {
834 sym_name_buf.clearRetainingCapacity();831 sym_name_buf.clearRetainingCapacity();
835 try inc_reader.streamUntilDelimiter(sym_name_buf.writer(), 0, null);832 _ = try inc_reader.streamDelimiter(&sym_name_buf.writer, 0);
836833
837 opt_symbol_name = sym_name_buf.items;834 opt_symbol_name = sym_name_buf.written();
838 versions.unsetAll();835 versions.unsetAll();
839 weak_linkages.unsetAll();836 weak_linkages.unsetAll();
840 chosen_def_ver_index = 255;837 chosen_def_ver_index = 255;
841 chosen_unversioned_ver_index = 255;838 chosen_unversioned_ver_index = 255;
842839
843 break :n sym_name_buf.items;840 break :n sym_name_buf.written();
844 };841 };
845842
846 {843 {
847 const targets = try std.leb.readUleb128(u64, inc_reader);844 const targets = try inc_reader.takeLeb128(u64);
848 const size = try std.leb.readUleb128(u16, inc_reader);845 const size = try inc_reader.takeLeb128(u16);
849 var lib_index = try inc_reader.readByte();846 var lib_index = try inc_reader.takeByte();
850847
851 const is_unversioned = (lib_index & (1 << 5)) != 0;848 const is_unversioned = (lib_index & (1 << 5)) != 0;
852 const is_weak = (lib_index & (1 << 6)) != 0;849 const is_weak = (lib_index & (1 << 6)) != 0;
...@@ -860,7 +857,7 @@ pub fn buildSharedObjects(comp: *Compilation, prog_node: std.Progress.Node) anye...@@ -860,7 +857,7 @@ pub fn buildSharedObjects(comp: *Compilation, prog_node: std.Progress.Node) anye
860 ((targets & (@as(u64, 1) << @as(u6, @intCast(target_targ_index)))) != 0);857 ((targets & (@as(u64, 1) << @as(u6, @intCast(target_targ_index)))) != 0);
861858
862 while (true) {859 while (true) {
863 const byte = try inc_reader.readByte();860 const byte = try inc_reader.takeByte();
864 const last = (byte & 0b1000_0000) != 0;861 const last = (byte & 0b1000_0000) != 0;
865 const ver_i = @as(u7, @truncate(byte));862 const ver_i = @as(u7, @truncate(byte));
866 if (ok_lib_and_target and ver_i <= target_ver_index) {863 if (ok_lib_and_target and ver_i <= target_ver_index) {
...@@ -894,7 +891,7 @@ pub fn buildSharedObjects(comp: *Compilation, prog_node: std.Progress.Node) anye...@@ -894,7 +891,7 @@ pub fn buildSharedObjects(comp: *Compilation, prog_node: std.Progress.Node) anye
894 // .type _ThreadRuneLocale, %object891 // .type _ThreadRuneLocale, %object
895 // .size _ThreadRuneLocale, 4892 // .size _ThreadRuneLocale, 4
896 // _ThreadRuneLocale: .fill 4, 1, 0893 // _ThreadRuneLocale: .fill 4, 1, 0
897 try stubs_writer.print(894 try stubs_asm.print(
898 \\.balign {d}895 \\.balign {d}
899 \\.{s} {s}896 \\.{s} {s}
900 \\.type {s}, %tls_object897 \\.type {s}, %tls_object
...@@ -930,7 +927,7 @@ pub fn buildSharedObjects(comp: *Compilation, prog_node: std.Progress.Node) anye...@@ -930,7 +927,7 @@ pub fn buildSharedObjects(comp: *Compilation, prog_node: std.Progress.Node) anye
930 .{ sym_name, ver.major, ver.minor },927 .{ sym_name, ver.major, ver.minor },
931 );928 );
932929
933 try stubs_writer.print(930 try stubs_asm.print(
934 \\.balign {d}931 \\.balign {d}
935 \\.{s} {s}932 \\.{s} {s}
936 \\.type {s}, %tls_object933 \\.type {s}, %tls_object
src/libs/glibc.zig+24-25
...@@ -752,9 +752,9 @@ pub fn buildSharedObjects(comp: *Compilation, prog_node: std.Progress.Node) anye...@@ -752,9 +752,9 @@ pub fn buildSharedObjects(comp: *Compilation, prog_node: std.Progress.Node) anye
752 var map_contents = std.array_list.Managed(u8).init(arena);752 var map_contents = std.array_list.Managed(u8).init(arena);
753 for (metadata.all_versions[0 .. target_ver_index + 1]) |ver| {753 for (metadata.all_versions[0 .. target_ver_index + 1]) |ver| {
754 if (ver.patch == 0) {754 if (ver.patch == 0) {
755 try map_contents.writer().print("GLIBC_{d}.{d} {{ }};\n", .{ ver.major, ver.minor });755 try map_contents.print("GLIBC_{d}.{d} {{ }};\n", .{ ver.major, ver.minor });
756 } else {756 } else {
757 try map_contents.writer().print("GLIBC_{d}.{d}.{d} {{ }};\n", .{ ver.major, ver.minor, ver.patch });757 try map_contents.print("GLIBC_{d}.{d}.{d} {{ }};\n", .{ ver.major, ver.minor, ver.patch });
758 }758 }
759 }759 }
760 try o_directory.handle.writeFile(.{ .sub_path = all_map_basename, .data = map_contents.items });760 try o_directory.handle.writeFile(.{ .sub_path = all_map_basename, .data = map_contents.items });
...@@ -773,7 +773,7 @@ pub fn buildSharedObjects(comp: *Compilation, prog_node: std.Progress.Node) anye...@@ -773,7 +773,7 @@ pub fn buildSharedObjects(comp: *Compilation, prog_node: std.Progress.Node) anye
773 try stubs_asm.appendSlice(".text\n");773 try stubs_asm.appendSlice(".text\n");
774774
775 var sym_i: usize = 0;775 var sym_i: usize = 0;
776 var sym_name_buf = std.array_list.Managed(u8).init(arena);776 var sym_name_buf: std.Io.Writer.Allocating = .init(arena);
777 var opt_symbol_name: ?[]const u8 = null;777 var opt_symbol_name: ?[]const u8 = null;
778 var versions_buffer: [32]u8 = undefined;778 var versions_buffer: [32]u8 = undefined;
779 var versions_len: usize = undefined;779 var versions_len: usize = undefined;
...@@ -794,24 +794,23 @@ pub fn buildSharedObjects(comp: *Compilation, prog_node: std.Progress.Node) anye...@@ -794,24 +794,23 @@ pub fn buildSharedObjects(comp: *Compilation, prog_node: std.Progress.Node) anye
794 // twice, which causes a "duplicate symbol" assembler error.794 // twice, which causes a "duplicate symbol" assembler error.
795 var versions_written = std.AutoArrayHashMap(Version, void).init(arena);795 var versions_written = std.AutoArrayHashMap(Version, void).init(arena);
796796
797 var inc_fbs = std.io.fixedBufferStream(metadata.inclusions);797 var inc_reader: std.Io.Reader = .fixed(metadata.inclusions);
798 var inc_reader = inc_fbs.reader();
799798
800 const fn_inclusions_len = try inc_reader.readInt(u16, .little);799 const fn_inclusions_len = try inc_reader.takeInt(u16, .little);
801800
802 while (sym_i < fn_inclusions_len) : (sym_i += 1) {801 while (sym_i < fn_inclusions_len) : (sym_i += 1) {
803 const sym_name = opt_symbol_name orelse n: {802 const sym_name = opt_symbol_name orelse n: {
804 sym_name_buf.clearRetainingCapacity();803 sym_name_buf.clearRetainingCapacity();
805 try inc_reader.streamUntilDelimiter(sym_name_buf.writer(), 0, null);804 _ = try inc_reader.streamDelimiter(&sym_name_buf.writer, 0);
806805
807 opt_symbol_name = sym_name_buf.items;806 opt_symbol_name = sym_name_buf.written();
808 versions_buffer = undefined;807 versions_buffer = undefined;
809 versions_len = 0;808 versions_len = 0;
810809
811 break :n sym_name_buf.items;810 break :n sym_name_buf.written();
812 };811 };
813 const targets = try std.leb.readUleb128(u64, inc_reader);812 const targets = try inc_reader.takeLeb128(u64);
814 var lib_index = try inc_reader.readByte();813 var lib_index = try inc_reader.takeByte();
815814
816 const is_terminal = (lib_index & (1 << 7)) != 0;815 const is_terminal = (lib_index & (1 << 7)) != 0;
817 if (is_terminal) {816 if (is_terminal) {
...@@ -825,7 +824,7 @@ pub fn buildSharedObjects(comp: *Compilation, prog_node: std.Progress.Node) anye...@@ -825,7 +824,7 @@ pub fn buildSharedObjects(comp: *Compilation, prog_node: std.Progress.Node) anye
825 ((targets & (@as(u64, 1) << @as(u6, @intCast(target_targ_index)))) != 0);824 ((targets & (@as(u64, 1) << @as(u6, @intCast(target_targ_index)))) != 0);
826825
827 while (true) {826 while (true) {
828 const byte = try inc_reader.readByte();827 const byte = try inc_reader.takeByte();
829 const last = (byte & 0b1000_0000) != 0;828 const last = (byte & 0b1000_0000) != 0;
830 const ver_i = @as(u7, @truncate(byte));829 const ver_i = @as(u7, @truncate(byte));
831 if (ok_lib_and_target and ver_i <= target_ver_index) {830 if (ok_lib_and_target and ver_i <= target_ver_index) {
...@@ -880,7 +879,7 @@ pub fn buildSharedObjects(comp: *Compilation, prog_node: std.Progress.Node) anye...@@ -880,7 +879,7 @@ pub fn buildSharedObjects(comp: *Compilation, prog_node: std.Progress.Node) anye
880 "{s}_{d}_{d}",879 "{s}_{d}_{d}",
881 .{ sym_name, ver.major, ver.minor },880 .{ sym_name, ver.major, ver.minor },
882 );881 );
883 try stubs_asm.writer().print(882 try stubs_asm.print(
884 \\.balign {d}883 \\.balign {d}
885 \\.globl {s}884 \\.globl {s}
886 \\.type {s}, %function885 \\.type {s}, %function
...@@ -905,7 +904,7 @@ pub fn buildSharedObjects(comp: *Compilation, prog_node: std.Progress.Node) anye...@@ -905,7 +904,7 @@ pub fn buildSharedObjects(comp: *Compilation, prog_node: std.Progress.Node) anye
905 "{s}_{d}_{d}_{d}",904 "{s}_{d}_{d}_{d}",
906 .{ sym_name, ver.major, ver.minor, ver.patch },905 .{ sym_name, ver.major, ver.minor, ver.patch },
907 );906 );
908 try stubs_asm.writer().print(907 try stubs_asm.print(
909 \\.balign {d}908 \\.balign {d}
910 \\.globl {s}909 \\.globl {s}
911 \\.type {s}, %function910 \\.type {s}, %function
...@@ -950,7 +949,7 @@ pub fn buildSharedObjects(comp: *Compilation, prog_node: std.Progress.Node) anye...@@ -950,7 +949,7 @@ pub fn buildSharedObjects(comp: *Compilation, prog_node: std.Progress.Node) anye
950 // versions where the symbol didn't exist. We only care about modern glibc versions, so use949 // versions where the symbol didn't exist. We only care about modern glibc versions, so use
951 // a strong reference.950 // a strong reference.
952 if (std.mem.eql(u8, lib.name, "c")) {951 if (std.mem.eql(u8, lib.name, "c")) {
953 try stubs_asm.writer().print(952 try stubs_asm.print(
954 \\.balign {d}953 \\.balign {d}
955 \\.globl _IO_stdin_used954 \\.globl _IO_stdin_used
956 \\{s} _IO_stdin_used955 \\{s} _IO_stdin_used
...@@ -963,7 +962,7 @@ pub fn buildSharedObjects(comp: *Compilation, prog_node: std.Progress.Node) anye...@@ -963,7 +962,7 @@ pub fn buildSharedObjects(comp: *Compilation, prog_node: std.Progress.Node) anye
963962
964 try stubs_asm.appendSlice(".data\n");963 try stubs_asm.appendSlice(".data\n");
965964
966 const obj_inclusions_len = try inc_reader.readInt(u16, .little);965 const obj_inclusions_len = try inc_reader.takeInt(u16, .little);
967966
968 var sizes = try arena.alloc(u16, metadata.all_versions.len);967 var sizes = try arena.alloc(u16, metadata.all_versions.len);
969968
...@@ -974,17 +973,17 @@ pub fn buildSharedObjects(comp: *Compilation, prog_node: std.Progress.Node) anye...@@ -974,17 +973,17 @@ pub fn buildSharedObjects(comp: *Compilation, prog_node: std.Progress.Node) anye
974 while (sym_i < obj_inclusions_len) : (sym_i += 1) {973 while (sym_i < obj_inclusions_len) : (sym_i += 1) {
975 const sym_name = opt_symbol_name orelse n: {974 const sym_name = opt_symbol_name orelse n: {
976 sym_name_buf.clearRetainingCapacity();975 sym_name_buf.clearRetainingCapacity();
977 try inc_reader.streamUntilDelimiter(sym_name_buf.writer(), 0, null);976 _ = try inc_reader.streamDelimiter(&sym_name_buf.writer, 0);
978977
979 opt_symbol_name = sym_name_buf.items;978 opt_symbol_name = sym_name_buf.written();
980 versions_buffer = undefined;979 versions_buffer = undefined;
981 versions_len = 0;980 versions_len = 0;
982981
983 break :n sym_name_buf.items;982 break :n sym_name_buf.written();
984 };983 };
985 const targets = try std.leb.readUleb128(u64, inc_reader);984 const targets = try inc_reader.takeLeb128(u64);
986 const size = try std.leb.readUleb128(u16, inc_reader);985 const size = try inc_reader.takeLeb128(u16);
987 var lib_index = try inc_reader.readByte();986 var lib_index = try inc_reader.takeByte();
988987
989 const is_terminal = (lib_index & (1 << 7)) != 0;988 const is_terminal = (lib_index & (1 << 7)) != 0;
990 if (is_terminal) {989 if (is_terminal) {
...@@ -998,7 +997,7 @@ pub fn buildSharedObjects(comp: *Compilation, prog_node: std.Progress.Node) anye...@@ -998,7 +997,7 @@ pub fn buildSharedObjects(comp: *Compilation, prog_node: std.Progress.Node) anye
998 ((targets & (@as(u64, 1) << @as(u6, @intCast(target_targ_index)))) != 0);997 ((targets & (@as(u64, 1) << @as(u6, @intCast(target_targ_index)))) != 0);
999998
1000 while (true) {999 while (true) {
1001 const byte = try inc_reader.readByte();1000 const byte = try inc_reader.takeByte();
1002 const last = (byte & 0b1000_0000) != 0;1001 const last = (byte & 0b1000_0000) != 0;
1003 const ver_i = @as(u7, @truncate(byte));1002 const ver_i = @as(u7, @truncate(byte));
1004 if (ok_lib_and_target and ver_i <= target_ver_index) {1003 if (ok_lib_and_target and ver_i <= target_ver_index) {
...@@ -1055,7 +1054,7 @@ pub fn buildSharedObjects(comp: *Compilation, prog_node: std.Progress.Node) anye...@@ -1055,7 +1054,7 @@ pub fn buildSharedObjects(comp: *Compilation, prog_node: std.Progress.Node) anye
1055 "{s}_{d}_{d}",1054 "{s}_{d}_{d}",
1056 .{ sym_name, ver.major, ver.minor },1055 .{ sym_name, ver.major, ver.minor },
1057 );1056 );
1058 try stubs_asm.writer().print(1057 try stubs_asm.print(
1059 \\.balign {d}1058 \\.balign {d}
1060 \\.globl {s}1059 \\.globl {s}
1061 \\.type {s}, %object1060 \\.type {s}, %object
...@@ -1083,7 +1082,7 @@ pub fn buildSharedObjects(comp: *Compilation, prog_node: std.Progress.Node) anye...@@ -1083,7 +1082,7 @@ pub fn buildSharedObjects(comp: *Compilation, prog_node: std.Progress.Node) anye
1083 "{s}_{d}_{d}_{d}",1082 "{s}_{d}_{d}_{d}",
1084 .{ sym_name, ver.major, ver.minor, ver.patch },1083 .{ sym_name, ver.major, ver.minor, ver.patch },
1085 );1084 );
1086 try stubs_asm.writer().print(1085 try stubs_asm.print(
1087 \\.balign {d}1086 \\.balign {d}
1088 \\.globl {s}1087 \\.globl {s}
1089 \\.type {s}, %object1088 \\.type {s}, %object
src/libs/musl.zig+3-3
...@@ -140,21 +140,21 @@ pub fn buildCrtFile(comp: *Compilation, in_crt_file: CrtFile, prog_node: std.Pro...@@ -140,21 +140,21 @@ pub fn buildCrtFile(comp: *Compilation, in_crt_file: CrtFile, prog_node: std.Pro
140 if (!is_arch_specific) {140 if (!is_arch_specific) {
141 // Look for an arch specific override.141 // Look for an arch specific override.
142 override_path.shrinkRetainingCapacity(0);142 override_path.shrinkRetainingCapacity(0);
143 try override_path.writer().print("{s}" ++ s ++ "{s}" ++ s ++ "{s}.s", .{143 try override_path.print("{s}" ++ s ++ "{s}" ++ s ++ "{s}.s", .{
144 dirname, arch_name, noextbasename,144 dirname, arch_name, noextbasename,
145 });145 });
146 if (source_table.contains(override_path.items))146 if (source_table.contains(override_path.items))
147 continue;147 continue;
148148
149 override_path.shrinkRetainingCapacity(0);149 override_path.shrinkRetainingCapacity(0);
150 try override_path.writer().print("{s}" ++ s ++ "{s}" ++ s ++ "{s}.S", .{150 try override_path.print("{s}" ++ s ++ "{s}" ++ s ++ "{s}.S", .{
151 dirname, arch_name, noextbasename,151 dirname, arch_name, noextbasename,
152 });152 });
153 if (source_table.contains(override_path.items))153 if (source_table.contains(override_path.items))
154 continue;154 continue;
155155
156 override_path.shrinkRetainingCapacity(0);156 override_path.shrinkRetainingCapacity(0);
157 try override_path.writer().print("{s}" ++ s ++ "{s}" ++ s ++ "{s}.c", .{157 try override_path.print("{s}" ++ s ++ "{s}" ++ s ++ "{s}.c", .{
158 dirname, arch_name, noextbasename,158 dirname, arch_name, noextbasename,
159 });159 });
160 if (source_table.contains(override_path.items))160 if (source_table.contains(override_path.items))
src/libs/netbsd.zig+21-24
...@@ -460,18 +460,15 @@ pub fn buildSharedObjects(comp: *Compilation, prog_node: std.Progress.Node) anye...@@ -460,18 +460,15 @@ pub fn buildSharedObjects(comp: *Compilation, prog_node: std.Progress.Node) anye
460 for (libs, 0..) |lib, lib_i| {460 for (libs, 0..) |lib, lib_i| {
461 stubs_asm.shrinkRetainingCapacity(0);461 stubs_asm.shrinkRetainingCapacity(0);
462462
463 const stubs_writer = stubs_asm.writer();463 try stubs_asm.appendSlice(".text\n");
464
465 try stubs_writer.writeAll(".text\n");
466464
467 var sym_i: usize = 0;465 var sym_i: usize = 0;
468 var sym_name_buf = std.array_list.Managed(u8).init(arena);466 var sym_name_buf: std.Io.Writer.Allocating = .init(arena);
469 var opt_symbol_name: ?[]const u8 = null;467 var opt_symbol_name: ?[]const u8 = null;
470468
471 var inc_fbs = std.io.fixedBufferStream(metadata.inclusions);469 var inc_reader: std.Io.Reader = .fixed(metadata.inclusions);
472 var inc_reader = inc_fbs.reader();
473470
474 const fn_inclusions_len = try inc_reader.readInt(u16, .little);471 const fn_inclusions_len = try inc_reader.takeInt(u16, .little);
475472
476 var chosen_ver_index: usize = 255;473 var chosen_ver_index: usize = 255;
477 var chosen_is_weak: bool = undefined;474 var chosen_is_weak: bool = undefined;
...@@ -479,17 +476,17 @@ pub fn buildSharedObjects(comp: *Compilation, prog_node: std.Progress.Node) anye...@@ -479,17 +476,17 @@ pub fn buildSharedObjects(comp: *Compilation, prog_node: std.Progress.Node) anye
479 while (sym_i < fn_inclusions_len) : (sym_i += 1) {476 while (sym_i < fn_inclusions_len) : (sym_i += 1) {
480 const sym_name = opt_symbol_name orelse n: {477 const sym_name = opt_symbol_name orelse n: {
481 sym_name_buf.clearRetainingCapacity();478 sym_name_buf.clearRetainingCapacity();
482 try inc_reader.streamUntilDelimiter(sym_name_buf.writer(), 0, null);479 _ = try inc_reader.streamDelimiter(&sym_name_buf.writer, 0);
483480
484 opt_symbol_name = sym_name_buf.items;481 opt_symbol_name = sym_name_buf.written();
485 chosen_ver_index = 255;482 chosen_ver_index = 255;
486483
487 break :n sym_name_buf.items;484 break :n sym_name_buf.written();
488 };485 };
489486
490 {487 {
491 const targets = try std.leb.readUleb128(u64, inc_reader);488 const targets = try inc_reader.takeLeb128(u64);
492 var lib_index = try inc_reader.readByte();489 var lib_index = try inc_reader.takeByte();
493490
494 const is_weak = (lib_index & (1 << 6)) != 0;491 const is_weak = (lib_index & (1 << 6)) != 0;
495 const is_terminal = (lib_index & (1 << 7)) != 0;492 const is_terminal = (lib_index & (1 << 7)) != 0;
...@@ -502,7 +499,7 @@ pub fn buildSharedObjects(comp: *Compilation, prog_node: std.Progress.Node) anye...@@ -502,7 +499,7 @@ pub fn buildSharedObjects(comp: *Compilation, prog_node: std.Progress.Node) anye
502 ((targets & (@as(u64, 1) << @as(u6, @intCast(target_targ_index)))) != 0);499 ((targets & (@as(u64, 1) << @as(u6, @intCast(target_targ_index)))) != 0);
503500
504 while (true) {501 while (true) {
505 const byte = try inc_reader.readByte();502 const byte = try inc_reader.takeByte();
506 const last = (byte & 0b1000_0000) != 0;503 const last = (byte & 0b1000_0000) != 0;
507 const ver_i = @as(u7, @truncate(byte));504 const ver_i = @as(u7, @truncate(byte));
508 if (ok_lib_and_target and ver_i <= target_ver_index and505 if (ok_lib_and_target and ver_i <= target_ver_index and
...@@ -525,7 +522,7 @@ pub fn buildSharedObjects(comp: *Compilation, prog_node: std.Progress.Node) anye...@@ -525,7 +522,7 @@ pub fn buildSharedObjects(comp: *Compilation, prog_node: std.Progress.Node) anye
525 // .globl _Exit522 // .globl _Exit
526 // .type _Exit, %function523 // .type _Exit, %function
527 // _Exit: .long 0524 // _Exit: .long 0
528 try stubs_writer.print(525 try stubs_asm.print(
529 \\.balign {d}526 \\.balign {d}
530 \\.{s} {s}527 \\.{s} {s}
531 \\.type {s}, %function528 \\.type {s}, %function
...@@ -542,9 +539,9 @@ pub fn buildSharedObjects(comp: *Compilation, prog_node: std.Progress.Node) anye...@@ -542,9 +539,9 @@ pub fn buildSharedObjects(comp: *Compilation, prog_node: std.Progress.Node) anye
542 }539 }
543 }540 }
544541
545 try stubs_writer.writeAll(".data\n");542 try stubs_asm.appendSlice(".data\n");
546543
547 const obj_inclusions_len = try inc_reader.readInt(u16, .little);544 const obj_inclusions_len = try inc_reader.takeInt(u16, .little);
548545
549 sym_i = 0;546 sym_i = 0;
550 opt_symbol_name = null;547 opt_symbol_name = null;
...@@ -554,18 +551,18 @@ pub fn buildSharedObjects(comp: *Compilation, prog_node: std.Progress.Node) anye...@@ -554,18 +551,18 @@ pub fn buildSharedObjects(comp: *Compilation, prog_node: std.Progress.Node) anye
554 while (sym_i < obj_inclusions_len) : (sym_i += 1) {551 while (sym_i < obj_inclusions_len) : (sym_i += 1) {
555 const sym_name = opt_symbol_name orelse n: {552 const sym_name = opt_symbol_name orelse n: {
556 sym_name_buf.clearRetainingCapacity();553 sym_name_buf.clearRetainingCapacity();
557 try inc_reader.streamUntilDelimiter(sym_name_buf.writer(), 0, null);554 _ = try inc_reader.streamDelimiter(&sym_name_buf.writer, 0);
558555
559 opt_symbol_name = sym_name_buf.items;556 opt_symbol_name = sym_name_buf.written();
560 chosen_ver_index = 255;557 chosen_ver_index = 255;
561558
562 break :n sym_name_buf.items;559 break :n sym_name_buf.written();
563 };560 };
564561
565 {562 {
566 const targets = try std.leb.readUleb128(u64, inc_reader);563 const targets = try inc_reader.takeLeb128(u64);
567 const size = try std.leb.readUleb128(u16, inc_reader);564 const size = try inc_reader.takeLeb128(u16);
568 var lib_index = try inc_reader.readByte();565 var lib_index = try inc_reader.takeByte();
569566
570 const is_weak = (lib_index & (1 << 6)) != 0;567 const is_weak = (lib_index & (1 << 6)) != 0;
571 const is_terminal = (lib_index & (1 << 7)) != 0;568 const is_terminal = (lib_index & (1 << 7)) != 0;
...@@ -578,7 +575,7 @@ pub fn buildSharedObjects(comp: *Compilation, prog_node: std.Progress.Node) anye...@@ -578,7 +575,7 @@ pub fn buildSharedObjects(comp: *Compilation, prog_node: std.Progress.Node) anye
578 ((targets & (@as(u64, 1) << @as(u6, @intCast(target_targ_index)))) != 0);575 ((targets & (@as(u64, 1) << @as(u6, @intCast(target_targ_index)))) != 0);
579576
580 while (true) {577 while (true) {
581 const byte = try inc_reader.readByte();578 const byte = try inc_reader.takeByte();
582 const last = (byte & 0b1000_0000) != 0;579 const last = (byte & 0b1000_0000) != 0;
583 const ver_i = @as(u7, @truncate(byte));580 const ver_i = @as(u7, @truncate(byte));
584 if (ok_lib_and_target and ver_i <= target_ver_index and581 if (ok_lib_and_target and ver_i <= target_ver_index and
...@@ -603,7 +600,7 @@ pub fn buildSharedObjects(comp: *Compilation, prog_node: std.Progress.Node) anye...@@ -603,7 +600,7 @@ pub fn buildSharedObjects(comp: *Compilation, prog_node: std.Progress.Node) anye
603 // .type malloc_conf, %object600 // .type malloc_conf, %object
604 // .size malloc_conf, 4601 // .size malloc_conf, 4
605 // malloc_conf: .fill 4, 1, 0602 // malloc_conf: .fill 4, 1, 0
606 try stubs_writer.print(603 try stubs_asm.print(
607 \\.balign {d}604 \\.balign {d}
608 \\.{s} {s}605 \\.{s} {s}
609 \\.type {s}, %object606 \\.type {s}, %object