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
512512 {
513513 var map_contents = std.array_list.Managed(u8).init(arena);
514514 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 });
516516 }
517517 try o_directory.handle.writeFile(.{ .sub_path = all_map_basename, .data = map_contents.items });
518518 map_contents.deinit();
......@@ -524,20 +524,17 @@ pub fn buildSharedObjects(comp: *Compilation, prog_node: std.Progress.Node) anye
524524 for (libs, 0..) |lib, lib_i| {
525525 stubs_asm.shrinkRetainingCapacity(0);
526526
527 const stubs_writer = stubs_asm.writer();
528
529 try stubs_writer.writeAll(".text\n");
527 try stubs_asm.appendSlice(".text\n");
530528
531529 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);
533531 var opt_symbol_name: ?[]const u8 = null;
534532 var versions = try std.DynamicBitSetUnmanaged.initEmpty(arena, metadata.all_versions.len);
535533 var weak_linkages = try std.DynamicBitSetUnmanaged.initEmpty(arena, metadata.all_versions.len);
536534
537 var inc_fbs = std.io.fixedBufferStream(metadata.inclusions);
538 var inc_reader = inc_fbs.reader();
535 var inc_reader: std.Io.Reader = .fixed(metadata.inclusions);
539536
540 const fn_inclusions_len = try inc_reader.readInt(u16, .little);
537 const fn_inclusions_len = try inc_reader.takeInt(u16, .little);
541538
542539 // Pick the default symbol version:
543540 // - If there are no versions, don't emit it
......@@ -550,19 +547,19 @@ pub fn buildSharedObjects(comp: *Compilation, prog_node: std.Progress.Node) anye
550547 while (sym_i < fn_inclusions_len) : (sym_i += 1) {
551548 const sym_name = opt_symbol_name orelse n: {
552549 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();
556553 versions.unsetAll();
557554 weak_linkages.unsetAll();
558555 chosen_def_ver_index = 255;
559556 chosen_unversioned_ver_index = 255;
560557
561 break :n sym_name_buf.items;
558 break :n sym_name_buf.written();
562559 };
563560 {
564 const targets = try std.leb.readUleb128(u64, inc_reader);
565 var lib_index = try inc_reader.readByte();
561 const targets = try inc_reader.takeLeb128(u64);
562 var lib_index = try inc_reader.takeByte();
566563
567564 const is_unversioned = (lib_index & (1 << 5)) != 0;
568565 const is_weak = (lib_index & (1 << 6)) != 0;
......@@ -576,7 +573,7 @@ pub fn buildSharedObjects(comp: *Compilation, prog_node: std.Progress.Node) anye
576573 ((targets & (@as(u64, 1) << @as(u6, @intCast(target_targ_index)))) != 0);
577574
578575 while (true) {
579 const byte = try inc_reader.readByte();
576 const byte = try inc_reader.takeByte();
580577 const last = (byte & 0b1000_0000) != 0;
581578 const ver_i = @as(u7, @truncate(byte));
582579 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
608605 // .globl _Exit
609606 // .type _Exit, %function
610607 // _Exit: .long 0
611 try stubs_writer.print(
608 try stubs_asm.print(
612609 \\.balign {d}
613610 \\.{s} {s}
614611 \\.type {s}, %function
......@@ -640,7 +637,7 @@ pub fn buildSharedObjects(comp: *Compilation, prog_node: std.Progress.Node) anye
640637 .{ sym_name, ver.major, ver.minor },
641638 );
642639
643 try stubs_writer.print(
640 try stubs_asm.print(
644641 \\.balign {d}
645642 \\.{s} {s}
646643 \\.type {s}, %function
......@@ -665,14 +662,14 @@ pub fn buildSharedObjects(comp: *Compilation, prog_node: std.Progress.Node) anye
665662 }
666663 }
667664
668 try stubs_writer.writeAll(".data\n");
665 try stubs_asm.appendSlice(".data\n");
669666
670667 // FreeBSD's `libc.so.7` contains strong references to `__progname` and `environ` which are
671668 // defined in the statically-linked startup code. Those references cause the linker to put
672669 // the symbols in the dynamic symbol table. We need to create dummy references to them here
673670 // to get the same effect.
674671 if (std.mem.eql(u8, lib.name, "c")) {
675 try stubs_writer.print(
672 try stubs_asm.print(
676673 \\.balign {d}
677674 \\.globl __progname
678675 \\.globl environ
......@@ -686,7 +683,7 @@ pub fn buildSharedObjects(comp: *Compilation, prog_node: std.Progress.Node) anye
686683 });
687684 }
688685
689 const obj_inclusions_len = try inc_reader.readInt(u16, .little);
686 const obj_inclusions_len = try inc_reader.takeInt(u16, .little);
690687
691688 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
696693 while (sym_i < obj_inclusions_len) : (sym_i += 1) {
697694 const sym_name = opt_symbol_name orelse n: {
698695 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();
702699 versions.unsetAll();
703700 weak_linkages.unsetAll();
704701 chosen_def_ver_index = 255;
705702 chosen_unversioned_ver_index = 255;
706703
707 break :n sym_name_buf.items;
704 break :n sym_name_buf.written();
708705 };
709706
710707 {
711 const targets = try std.leb.readUleb128(u64, inc_reader);
712 const size = try std.leb.readUleb128(u16, inc_reader);
713 var lib_index = try inc_reader.readByte();
708 const targets = try inc_reader.takeLeb128(u64);
709 const size = try inc_reader.takeLeb128(u16);
710 var lib_index = try inc_reader.takeByte();
714711
715712 const is_unversioned = (lib_index & (1 << 5)) != 0;
716713 const is_weak = (lib_index & (1 << 6)) != 0;
......@@ -724,7 +721,7 @@ pub fn buildSharedObjects(comp: *Compilation, prog_node: std.Progress.Node) anye
724721 ((targets & (@as(u64, 1) << @as(u6, @intCast(target_targ_index)))) != 0);
725722
726723 while (true) {
727 const byte = try inc_reader.readByte();
724 const byte = try inc_reader.takeByte();
728725 const last = (byte & 0b1000_0000) != 0;
729726 const ver_i = @as(u7, @truncate(byte));
730727 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
758755 // .type malloc_conf, %object
759756 // .size malloc_conf, 4
760757 // malloc_conf: .fill 4, 1, 0
761 try stubs_writer.print(
758 try stubs_asm.print(
762759 \\.balign {d}
763760 \\.{s} {s}
764761 \\.type {s}, %object
......@@ -794,7 +791,7 @@ pub fn buildSharedObjects(comp: *Compilation, prog_node: std.Progress.Node) anye
794791 .{ sym_name, ver.major, ver.minor },
795792 );
796793
797 try stubs_asm.writer().print(
794 try stubs_asm.print(
798795 \\.balign {d}
799796 \\.{s} {s}
800797 \\.type {s}, %object
......@@ -822,9 +819,9 @@ pub fn buildSharedObjects(comp: *Compilation, prog_node: std.Progress.Node) anye
822819 }
823820 }
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
829826 sym_i = 0;
830827 opt_symbol_name = null;
......@@ -832,21 +829,21 @@ pub fn buildSharedObjects(comp: *Compilation, prog_node: std.Progress.Node) anye
832829 while (sym_i < tls_inclusions_len) : (sym_i += 1) {
833830 const sym_name = opt_symbol_name orelse n: {
834831 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();
838835 versions.unsetAll();
839836 weak_linkages.unsetAll();
840837 chosen_def_ver_index = 255;
841838 chosen_unversioned_ver_index = 255;
842839
843 break :n sym_name_buf.items;
840 break :n sym_name_buf.written();
844841 };
845842
846843 {
847 const targets = try std.leb.readUleb128(u64, inc_reader);
848 const size = try std.leb.readUleb128(u16, inc_reader);
849 var lib_index = try inc_reader.readByte();
844 const targets = try inc_reader.takeLeb128(u64);
845 const size = try inc_reader.takeLeb128(u16);
846 var lib_index = try inc_reader.takeByte();
850847
851848 const is_unversioned = (lib_index & (1 << 5)) != 0;
852849 const is_weak = (lib_index & (1 << 6)) != 0;
......@@ -860,7 +857,7 @@ pub fn buildSharedObjects(comp: *Compilation, prog_node: std.Progress.Node) anye
860857 ((targets & (@as(u64, 1) << @as(u6, @intCast(target_targ_index)))) != 0);
861858
862859 while (true) {
863 const byte = try inc_reader.readByte();
860 const byte = try inc_reader.takeByte();
864861 const last = (byte & 0b1000_0000) != 0;
865862 const ver_i = @as(u7, @truncate(byte));
866863 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
894891 // .type _ThreadRuneLocale, %object
895892 // .size _ThreadRuneLocale, 4
896893 // _ThreadRuneLocale: .fill 4, 1, 0
897 try stubs_writer.print(
894 try stubs_asm.print(
898895 \\.balign {d}
899896 \\.{s} {s}
900897 \\.type {s}, %tls_object
......@@ -930,7 +927,7 @@ pub fn buildSharedObjects(comp: *Compilation, prog_node: std.Progress.Node) anye
930927 .{ sym_name, ver.major, ver.minor },
931928 );
932929
933 try stubs_writer.print(
930 try stubs_asm.print(
934931 \\.balign {d}
935932 \\.{s} {s}
936933 \\.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
752752 var map_contents = std.array_list.Managed(u8).init(arena);
753753 for (metadata.all_versions[0 .. target_ver_index + 1]) |ver| {
754754 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 });
756756 } 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 });
758758 }
759759 }
760760 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
773773 try stubs_asm.appendSlice(".text\n");
774774
775775 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);
777777 var opt_symbol_name: ?[]const u8 = null;
778778 var versions_buffer: [32]u8 = undefined;
779779 var versions_len: usize = undefined;
......@@ -794,24 +794,23 @@ pub fn buildSharedObjects(comp: *Compilation, prog_node: std.Progress.Node) anye
794794 // twice, which causes a "duplicate symbol" assembler error.
795795 var versions_written = std.AutoArrayHashMap(Version, void).init(arena);
796796
797 var inc_fbs = std.io.fixedBufferStream(metadata.inclusions);
798 var inc_reader = inc_fbs.reader();
797 var inc_reader: std.Io.Reader = .fixed(metadata.inclusions);
799798
800 const fn_inclusions_len = try inc_reader.readInt(u16, .little);
799 const fn_inclusions_len = try inc_reader.takeInt(u16, .little);
801800
802801 while (sym_i < fn_inclusions_len) : (sym_i += 1) {
803802 const sym_name = opt_symbol_name orelse n: {
804803 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();
808807 versions_buffer = undefined;
809808 versions_len = 0;
810809
811 break :n sym_name_buf.items;
810 break :n sym_name_buf.written();
812811 };
813 const targets = try std.leb.readUleb128(u64, inc_reader);
814 var lib_index = try inc_reader.readByte();
812 const targets = try inc_reader.takeLeb128(u64);
813 var lib_index = try inc_reader.takeByte();
815814
816815 const is_terminal = (lib_index & (1 << 7)) != 0;
817816 if (is_terminal) {
......@@ -825,7 +824,7 @@ pub fn buildSharedObjects(comp: *Compilation, prog_node: std.Progress.Node) anye
825824 ((targets & (@as(u64, 1) << @as(u6, @intCast(target_targ_index)))) != 0);
826825
827826 while (true) {
828 const byte = try inc_reader.readByte();
827 const byte = try inc_reader.takeByte();
829828 const last = (byte & 0b1000_0000) != 0;
830829 const ver_i = @as(u7, @truncate(byte));
831830 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
880879 "{s}_{d}_{d}",
881880 .{ sym_name, ver.major, ver.minor },
882881 );
883 try stubs_asm.writer().print(
882 try stubs_asm.print(
884883 \\.balign {d}
885884 \\.globl {s}
886885 \\.type {s}, %function
......@@ -905,7 +904,7 @@ pub fn buildSharedObjects(comp: *Compilation, prog_node: std.Progress.Node) anye
905904 "{s}_{d}_{d}_{d}",
906905 .{ sym_name, ver.major, ver.minor, ver.patch },
907906 );
908 try stubs_asm.writer().print(
907 try stubs_asm.print(
909908 \\.balign {d}
910909 \\.globl {s}
911910 \\.type {s}, %function
......@@ -950,7 +949,7 @@ pub fn buildSharedObjects(comp: *Compilation, prog_node: std.Progress.Node) anye
950949 // versions where the symbol didn't exist. We only care about modern glibc versions, so use
951950 // a strong reference.
952951 if (std.mem.eql(u8, lib.name, "c")) {
953 try stubs_asm.writer().print(
952 try stubs_asm.print(
954953 \\.balign {d}
955954 \\.globl _IO_stdin_used
956955 \\{s} _IO_stdin_used
......@@ -963,7 +962,7 @@ pub fn buildSharedObjects(comp: *Compilation, prog_node: std.Progress.Node) anye
963962
964963 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
968967 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
974973 while (sym_i < obj_inclusions_len) : (sym_i += 1) {
975974 const sym_name = opt_symbol_name orelse n: {
976975 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();
980979 versions_buffer = undefined;
981980 versions_len = 0;
982981
983 break :n sym_name_buf.items;
982 break :n sym_name_buf.written();
984983 };
985 const targets = try std.leb.readUleb128(u64, inc_reader);
986 const size = try std.leb.readUleb128(u16, inc_reader);
987 var lib_index = try inc_reader.readByte();
984 const targets = try inc_reader.takeLeb128(u64);
985 const size = try inc_reader.takeLeb128(u16);
986 var lib_index = try inc_reader.takeByte();
988987
989988 const is_terminal = (lib_index & (1 << 7)) != 0;
990989 if (is_terminal) {
......@@ -998,7 +997,7 @@ pub fn buildSharedObjects(comp: *Compilation, prog_node: std.Progress.Node) anye
998997 ((targets & (@as(u64, 1) << @as(u6, @intCast(target_targ_index)))) != 0);
999998
1000999 while (true) {
1001 const byte = try inc_reader.readByte();
1000 const byte = try inc_reader.takeByte();
10021001 const last = (byte & 0b1000_0000) != 0;
10031002 const ver_i = @as(u7, @truncate(byte));
10041003 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
10551054 "{s}_{d}_{d}",
10561055 .{ sym_name, ver.major, ver.minor },
10571056 );
1058 try stubs_asm.writer().print(
1057 try stubs_asm.print(
10591058 \\.balign {d}
10601059 \\.globl {s}
10611060 \\.type {s}, %object
......@@ -1083,7 +1082,7 @@ pub fn buildSharedObjects(comp: *Compilation, prog_node: std.Progress.Node) anye
10831082 "{s}_{d}_{d}_{d}",
10841083 .{ sym_name, ver.major, ver.minor, ver.patch },
10851084 );
1086 try stubs_asm.writer().print(
1085 try stubs_asm.print(
10871086 \\.balign {d}
10881087 \\.globl {s}
10891088 \\.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
140140 if (!is_arch_specific) {
141141 // Look for an arch specific override.
142142 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", .{
144144 dirname, arch_name, noextbasename,
145145 });
146146 if (source_table.contains(override_path.items))
147147 continue;
148148
149149 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", .{
151151 dirname, arch_name, noextbasename,
152152 });
153153 if (source_table.contains(override_path.items))
154154 continue;
155155
156156 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", .{
158158 dirname, arch_name, noextbasename,
159159 });
160160 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
460460 for (libs, 0..) |lib, lib_i| {
461461 stubs_asm.shrinkRetainingCapacity(0);
462462
463 const stubs_writer = stubs_asm.writer();
464
465 try stubs_writer.writeAll(".text\n");
463 try stubs_asm.appendSlice(".text\n");
466464
467465 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);
469467 var opt_symbol_name: ?[]const u8 = null;
470468
471 var inc_fbs = std.io.fixedBufferStream(metadata.inclusions);
472 var inc_reader = inc_fbs.reader();
469 var inc_reader: std.Io.Reader = .fixed(metadata.inclusions);
473470
474 const fn_inclusions_len = try inc_reader.readInt(u16, .little);
471 const fn_inclusions_len = try inc_reader.takeInt(u16, .little);
475472
476473 var chosen_ver_index: usize = 255;
477474 var chosen_is_weak: bool = undefined;
......@@ -479,17 +476,17 @@ pub fn buildSharedObjects(comp: *Compilation, prog_node: std.Progress.Node) anye
479476 while (sym_i < fn_inclusions_len) : (sym_i += 1) {
480477 const sym_name = opt_symbol_name orelse n: {
481478 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();
485482 chosen_ver_index = 255;
486483
487 break :n sym_name_buf.items;
484 break :n sym_name_buf.written();
488485 };
489486
490487 {
491 const targets = try std.leb.readUleb128(u64, inc_reader);
492 var lib_index = try inc_reader.readByte();
488 const targets = try inc_reader.takeLeb128(u64);
489 var lib_index = try inc_reader.takeByte();
493490
494491 const is_weak = (lib_index & (1 << 6)) != 0;
495492 const is_terminal = (lib_index & (1 << 7)) != 0;
......@@ -502,7 +499,7 @@ pub fn buildSharedObjects(comp: *Compilation, prog_node: std.Progress.Node) anye
502499 ((targets & (@as(u64, 1) << @as(u6, @intCast(target_targ_index)))) != 0);
503500
504501 while (true) {
505 const byte = try inc_reader.readByte();
502 const byte = try inc_reader.takeByte();
506503 const last = (byte & 0b1000_0000) != 0;
507504 const ver_i = @as(u7, @truncate(byte));
508505 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
525522 // .globl _Exit
526523 // .type _Exit, %function
527524 // _Exit: .long 0
528 try stubs_writer.print(
525 try stubs_asm.print(
529526 \\.balign {d}
530527 \\.{s} {s}
531528 \\.type {s}, %function
......@@ -542,9 +539,9 @@ pub fn buildSharedObjects(comp: *Compilation, prog_node: std.Progress.Node) anye
542539 }
543540 }
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
549546 sym_i = 0;
550547 opt_symbol_name = null;
......@@ -554,18 +551,18 @@ pub fn buildSharedObjects(comp: *Compilation, prog_node: std.Progress.Node) anye
554551 while (sym_i < obj_inclusions_len) : (sym_i += 1) {
555552 const sym_name = opt_symbol_name orelse n: {
556553 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();
560557 chosen_ver_index = 255;
561558
562 break :n sym_name_buf.items;
559 break :n sym_name_buf.written();
563560 };
564561
565562 {
566 const targets = try std.leb.readUleb128(u64, inc_reader);
567 const size = try std.leb.readUleb128(u16, inc_reader);
568 var lib_index = try inc_reader.readByte();
563 const targets = try inc_reader.takeLeb128(u64);
564 const size = try inc_reader.takeLeb128(u16);
565 var lib_index = try inc_reader.takeByte();
569566
570567 const is_weak = (lib_index & (1 << 6)) != 0;
571568 const is_terminal = (lib_index & (1 << 7)) != 0;
......@@ -578,7 +575,7 @@ pub fn buildSharedObjects(comp: *Compilation, prog_node: std.Progress.Node) anye
578575 ((targets & (@as(u64, 1) << @as(u6, @intCast(target_targ_index)))) != 0);
579576
580577 while (true) {
581 const byte = try inc_reader.readByte();
578 const byte = try inc_reader.takeByte();
582579 const last = (byte & 0b1000_0000) != 0;
583580 const ver_i = @as(u7, @truncate(byte));
584581 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
603600 // .type malloc_conf, %object
604601 // .size malloc_conf, 4
605602 // malloc_conf: .fill 4, 1, 0
606 try stubs_writer.print(
603 try stubs_asm.print(
607604 \\.balign {d}
608605 \\.{s} {s}
609606 \\.type {s}, %object