Commit 8f4cb4614f
Changed files (4)
src/libs/freebsd.zig
@@ -512,7 +512,7 @@ pub fn buildSharedObjects(comp: *Compilation, prog_node: std.Progress.Node) anye
{
var map_contents = std.array_list.Managed(u8).init(arena);
for (metadata.all_versions[0 .. target_ver_index + 1]) |ver| {
- try map_contents.writer().print("FBSD_{d}.{d} {{ }};\n", .{ ver.major, ver.minor });
+ try map_contents.print("FBSD_{d}.{d} {{ }};\n", .{ ver.major, ver.minor });
}
try o_directory.handle.writeFile(.{ .sub_path = all_map_basename, .data = map_contents.items });
map_contents.deinit();
@@ -524,20 +524,17 @@ pub fn buildSharedObjects(comp: *Compilation, prog_node: std.Progress.Node) anye
for (libs, 0..) |lib, lib_i| {
stubs_asm.shrinkRetainingCapacity(0);
- const stubs_writer = stubs_asm.writer();
-
- try stubs_writer.writeAll(".text\n");
+ try stubs_asm.appendSlice(".text\n");
var sym_i: usize = 0;
- var sym_name_buf = std.array_list.Managed(u8).init(arena);
+ var sym_name_buf: std.Io.Writer.Allocating = .init(arena);
var opt_symbol_name: ?[]const u8 = null;
var versions = try std.DynamicBitSetUnmanaged.initEmpty(arena, metadata.all_versions.len);
var weak_linkages = try std.DynamicBitSetUnmanaged.initEmpty(arena, metadata.all_versions.len);
- var inc_fbs = std.io.fixedBufferStream(metadata.inclusions);
- var inc_reader = inc_fbs.reader();
+ var inc_reader: std.Io.Reader = .fixed(metadata.inclusions);
- const fn_inclusions_len = try inc_reader.readInt(u16, .little);
+ const fn_inclusions_len = try inc_reader.takeInt(u16, .little);
// Pick the default symbol version:
// - If there are no versions, don't emit it
@@ -550,19 +547,19 @@ pub fn buildSharedObjects(comp: *Compilation, prog_node: std.Progress.Node) anye
while (sym_i < fn_inclusions_len) : (sym_i += 1) {
const sym_name = opt_symbol_name orelse n: {
sym_name_buf.clearRetainingCapacity();
- try inc_reader.streamUntilDelimiter(sym_name_buf.writer(), 0, null);
+ _ = try inc_reader.streamDelimiter(&sym_name_buf.writer, 0);
- opt_symbol_name = sym_name_buf.items;
+ opt_symbol_name = sym_name_buf.written();
versions.unsetAll();
weak_linkages.unsetAll();
chosen_def_ver_index = 255;
chosen_unversioned_ver_index = 255;
- break :n sym_name_buf.items;
+ break :n sym_name_buf.written();
};
{
- const targets = try std.leb.readUleb128(u64, inc_reader);
- var lib_index = try inc_reader.readByte();
+ const targets = try inc_reader.takeLeb128(u64);
+ var lib_index = try inc_reader.takeByte();
const is_unversioned = (lib_index & (1 << 5)) != 0;
const is_weak = (lib_index & (1 << 6)) != 0;
@@ -576,7 +573,7 @@ pub fn buildSharedObjects(comp: *Compilation, prog_node: std.Progress.Node) anye
((targets & (@as(u64, 1) << @as(u6, @intCast(target_targ_index)))) != 0);
while (true) {
- const byte = try inc_reader.readByte();
+ const byte = try inc_reader.takeByte();
const last = (byte & 0b1000_0000) != 0;
const ver_i = @as(u7, @truncate(byte));
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
// .globl _Exit
// .type _Exit, %function
// _Exit: .long 0
- try stubs_writer.print(
+ try stubs_asm.print(
\\.balign {d}
\\.{s} {s}
\\.type {s}, %function
@@ -640,7 +637,7 @@ pub fn buildSharedObjects(comp: *Compilation, prog_node: std.Progress.Node) anye
.{ sym_name, ver.major, ver.minor },
);
- try stubs_writer.print(
+ try stubs_asm.print(
\\.balign {d}
\\.{s} {s}
\\.type {s}, %function
@@ -665,14 +662,14 @@ pub fn buildSharedObjects(comp: *Compilation, prog_node: std.Progress.Node) anye
}
}
- try stubs_writer.writeAll(".data\n");
+ try stubs_asm.appendSlice(".data\n");
// FreeBSD's `libc.so.7` contains strong references to `__progname` and `environ` which are
// defined in the statically-linked startup code. Those references cause the linker to put
// the symbols in the dynamic symbol table. We need to create dummy references to them here
// to get the same effect.
if (std.mem.eql(u8, lib.name, "c")) {
- try stubs_writer.print(
+ try stubs_asm.print(
\\.balign {d}
\\.globl __progname
\\.globl environ
@@ -686,7 +683,7 @@ pub fn buildSharedObjects(comp: *Compilation, prog_node: std.Progress.Node) anye
});
}
- const obj_inclusions_len = try inc_reader.readInt(u16, .little);
+ const obj_inclusions_len = try inc_reader.takeInt(u16, .little);
var sizes = try arena.alloc(u16, metadata.all_versions.len);
@@ -696,21 +693,21 @@ pub fn buildSharedObjects(comp: *Compilation, prog_node: std.Progress.Node) anye
while (sym_i < obj_inclusions_len) : (sym_i += 1) {
const sym_name = opt_symbol_name orelse n: {
sym_name_buf.clearRetainingCapacity();
- try inc_reader.streamUntilDelimiter(sym_name_buf.writer(), 0, null);
+ _ = try inc_reader.streamDelimiter(&sym_name_buf.writer, 0);
- opt_symbol_name = sym_name_buf.items;
+ opt_symbol_name = sym_name_buf.written();
versions.unsetAll();
weak_linkages.unsetAll();
chosen_def_ver_index = 255;
chosen_unversioned_ver_index = 255;
- break :n sym_name_buf.items;
+ break :n sym_name_buf.written();
};
{
- const targets = try std.leb.readUleb128(u64, inc_reader);
- const size = try std.leb.readUleb128(u16, inc_reader);
- var lib_index = try inc_reader.readByte();
+ const targets = try inc_reader.takeLeb128(u64);
+ const size = try inc_reader.takeLeb128(u16);
+ var lib_index = try inc_reader.takeByte();
const is_unversioned = (lib_index & (1 << 5)) != 0;
const is_weak = (lib_index & (1 << 6)) != 0;
@@ -724,7 +721,7 @@ pub fn buildSharedObjects(comp: *Compilation, prog_node: std.Progress.Node) anye
((targets & (@as(u64, 1) << @as(u6, @intCast(target_targ_index)))) != 0);
while (true) {
- const byte = try inc_reader.readByte();
+ const byte = try inc_reader.takeByte();
const last = (byte & 0b1000_0000) != 0;
const ver_i = @as(u7, @truncate(byte));
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
// .type malloc_conf, %object
// .size malloc_conf, 4
// malloc_conf: .fill 4, 1, 0
- try stubs_writer.print(
+ try stubs_asm.print(
\\.balign {d}
\\.{s} {s}
\\.type {s}, %object
@@ -794,7 +791,7 @@ pub fn buildSharedObjects(comp: *Compilation, prog_node: std.Progress.Node) anye
.{ sym_name, ver.major, ver.minor },
);
- try stubs_asm.writer().print(
+ try stubs_asm.print(
\\.balign {d}
\\.{s} {s}
\\.type {s}, %object
@@ -822,9 +819,9 @@ pub fn buildSharedObjects(comp: *Compilation, prog_node: std.Progress.Node) anye
}
}
- try stubs_writer.writeAll(".tdata\n");
+ try stubs_asm.appendSlice(".tdata\n");
- const tls_inclusions_len = try inc_reader.readInt(u16, .little);
+ const tls_inclusions_len = try inc_reader.takeInt(u16, .little);
sym_i = 0;
opt_symbol_name = null;
@@ -832,21 +829,21 @@ pub fn buildSharedObjects(comp: *Compilation, prog_node: std.Progress.Node) anye
while (sym_i < tls_inclusions_len) : (sym_i += 1) {
const sym_name = opt_symbol_name orelse n: {
sym_name_buf.clearRetainingCapacity();
- try inc_reader.streamUntilDelimiter(sym_name_buf.writer(), 0, null);
+ _ = try inc_reader.streamDelimiter(&sym_name_buf.writer, 0);
- opt_symbol_name = sym_name_buf.items;
+ opt_symbol_name = sym_name_buf.written();
versions.unsetAll();
weak_linkages.unsetAll();
chosen_def_ver_index = 255;
chosen_unversioned_ver_index = 255;
- break :n sym_name_buf.items;
+ break :n sym_name_buf.written();
};
{
- const targets = try std.leb.readUleb128(u64, inc_reader);
- const size = try std.leb.readUleb128(u16, inc_reader);
- var lib_index = try inc_reader.readByte();
+ const targets = try inc_reader.takeLeb128(u64);
+ const size = try inc_reader.takeLeb128(u16);
+ var lib_index = try inc_reader.takeByte();
const is_unversioned = (lib_index & (1 << 5)) != 0;
const is_weak = (lib_index & (1 << 6)) != 0;
@@ -860,7 +857,7 @@ pub fn buildSharedObjects(comp: *Compilation, prog_node: std.Progress.Node) anye
((targets & (@as(u64, 1) << @as(u6, @intCast(target_targ_index)))) != 0);
while (true) {
- const byte = try inc_reader.readByte();
+ const byte = try inc_reader.takeByte();
const last = (byte & 0b1000_0000) != 0;
const ver_i = @as(u7, @truncate(byte));
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
// .type _ThreadRuneLocale, %object
// .size _ThreadRuneLocale, 4
// _ThreadRuneLocale: .fill 4, 1, 0
- try stubs_writer.print(
+ try stubs_asm.print(
\\.balign {d}
\\.{s} {s}
\\.type {s}, %tls_object
@@ -930,7 +927,7 @@ pub fn buildSharedObjects(comp: *Compilation, prog_node: std.Progress.Node) anye
.{ sym_name, ver.major, ver.minor },
);
- try stubs_writer.print(
+ try stubs_asm.print(
\\.balign {d}
\\.{s} {s}
\\.type {s}, %tls_object
src/libs/glibc.zig
@@ -752,9 +752,9 @@ pub fn buildSharedObjects(comp: *Compilation, prog_node: std.Progress.Node) anye
var map_contents = std.array_list.Managed(u8).init(arena);
for (metadata.all_versions[0 .. target_ver_index + 1]) |ver| {
if (ver.patch == 0) {
- try map_contents.writer().print("GLIBC_{d}.{d} {{ }};\n", .{ ver.major, ver.minor });
+ try map_contents.print("GLIBC_{d}.{d} {{ }};\n", .{ ver.major, ver.minor });
} else {
- try map_contents.writer().print("GLIBC_{d}.{d}.{d} {{ }};\n", .{ ver.major, ver.minor, ver.patch });
+ try map_contents.print("GLIBC_{d}.{d}.{d} {{ }};\n", .{ ver.major, ver.minor, ver.patch });
}
}
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
try stubs_asm.appendSlice(".text\n");
var sym_i: usize = 0;
- var sym_name_buf = std.array_list.Managed(u8).init(arena);
+ var sym_name_buf: std.Io.Writer.Allocating = .init(arena);
var opt_symbol_name: ?[]const u8 = null;
var versions_buffer: [32]u8 = undefined;
var versions_len: usize = undefined;
@@ -794,24 +794,23 @@ pub fn buildSharedObjects(comp: *Compilation, prog_node: std.Progress.Node) anye
// twice, which causes a "duplicate symbol" assembler error.
var versions_written = std.AutoArrayHashMap(Version, void).init(arena);
- var inc_fbs = std.io.fixedBufferStream(metadata.inclusions);
- var inc_reader = inc_fbs.reader();
+ var inc_reader: std.Io.Reader = .fixed(metadata.inclusions);
- const fn_inclusions_len = try inc_reader.readInt(u16, .little);
+ const fn_inclusions_len = try inc_reader.takeInt(u16, .little);
while (sym_i < fn_inclusions_len) : (sym_i += 1) {
const sym_name = opt_symbol_name orelse n: {
sym_name_buf.clearRetainingCapacity();
- try inc_reader.streamUntilDelimiter(sym_name_buf.writer(), 0, null);
+ _ = try inc_reader.streamDelimiter(&sym_name_buf.writer, 0);
- opt_symbol_name = sym_name_buf.items;
+ opt_symbol_name = sym_name_buf.written();
versions_buffer = undefined;
versions_len = 0;
- break :n sym_name_buf.items;
+ break :n sym_name_buf.written();
};
- const targets = try std.leb.readUleb128(u64, inc_reader);
- var lib_index = try inc_reader.readByte();
+ const targets = try inc_reader.takeLeb128(u64);
+ var lib_index = try inc_reader.takeByte();
const is_terminal = (lib_index & (1 << 7)) != 0;
if (is_terminal) {
@@ -825,7 +824,7 @@ pub fn buildSharedObjects(comp: *Compilation, prog_node: std.Progress.Node) anye
((targets & (@as(u64, 1) << @as(u6, @intCast(target_targ_index)))) != 0);
while (true) {
- const byte = try inc_reader.readByte();
+ const byte = try inc_reader.takeByte();
const last = (byte & 0b1000_0000) != 0;
const ver_i = @as(u7, @truncate(byte));
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
"{s}_{d}_{d}",
.{ sym_name, ver.major, ver.minor },
);
- try stubs_asm.writer().print(
+ try stubs_asm.print(
\\.balign {d}
\\.globl {s}
\\.type {s}, %function
@@ -905,7 +904,7 @@ pub fn buildSharedObjects(comp: *Compilation, prog_node: std.Progress.Node) anye
"{s}_{d}_{d}_{d}",
.{ sym_name, ver.major, ver.minor, ver.patch },
);
- try stubs_asm.writer().print(
+ try stubs_asm.print(
\\.balign {d}
\\.globl {s}
\\.type {s}, %function
@@ -950,7 +949,7 @@ pub fn buildSharedObjects(comp: *Compilation, prog_node: std.Progress.Node) anye
// versions where the symbol didn't exist. We only care about modern glibc versions, so use
// a strong reference.
if (std.mem.eql(u8, lib.name, "c")) {
- try stubs_asm.writer().print(
+ try stubs_asm.print(
\\.balign {d}
\\.globl _IO_stdin_used
\\{s} _IO_stdin_used
@@ -963,7 +962,7 @@ pub fn buildSharedObjects(comp: *Compilation, prog_node: std.Progress.Node) anye
try stubs_asm.appendSlice(".data\n");
- const obj_inclusions_len = try inc_reader.readInt(u16, .little);
+ const obj_inclusions_len = try inc_reader.takeInt(u16, .little);
var sizes = try arena.alloc(u16, metadata.all_versions.len);
@@ -974,17 +973,17 @@ pub fn buildSharedObjects(comp: *Compilation, prog_node: std.Progress.Node) anye
while (sym_i < obj_inclusions_len) : (sym_i += 1) {
const sym_name = opt_symbol_name orelse n: {
sym_name_buf.clearRetainingCapacity();
- try inc_reader.streamUntilDelimiter(sym_name_buf.writer(), 0, null);
+ _ = try inc_reader.streamDelimiter(&sym_name_buf.writer, 0);
- opt_symbol_name = sym_name_buf.items;
+ opt_symbol_name = sym_name_buf.written();
versions_buffer = undefined;
versions_len = 0;
- break :n sym_name_buf.items;
+ break :n sym_name_buf.written();
};
- const targets = try std.leb.readUleb128(u64, inc_reader);
- const size = try std.leb.readUleb128(u16, inc_reader);
- var lib_index = try inc_reader.readByte();
+ const targets = try inc_reader.takeLeb128(u64);
+ const size = try inc_reader.takeLeb128(u16);
+ var lib_index = try inc_reader.takeByte();
const is_terminal = (lib_index & (1 << 7)) != 0;
if (is_terminal) {
@@ -998,7 +997,7 @@ pub fn buildSharedObjects(comp: *Compilation, prog_node: std.Progress.Node) anye
((targets & (@as(u64, 1) << @as(u6, @intCast(target_targ_index)))) != 0);
while (true) {
- const byte = try inc_reader.readByte();
+ const byte = try inc_reader.takeByte();
const last = (byte & 0b1000_0000) != 0;
const ver_i = @as(u7, @truncate(byte));
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
"{s}_{d}_{d}",
.{ sym_name, ver.major, ver.minor },
);
- try stubs_asm.writer().print(
+ try stubs_asm.print(
\\.balign {d}
\\.globl {s}
\\.type {s}, %object
@@ -1083,7 +1082,7 @@ pub fn buildSharedObjects(comp: *Compilation, prog_node: std.Progress.Node) anye
"{s}_{d}_{d}_{d}",
.{ sym_name, ver.major, ver.minor, ver.patch },
);
- try stubs_asm.writer().print(
+ try stubs_asm.print(
\\.balign {d}
\\.globl {s}
\\.type {s}, %object
src/libs/musl.zig
@@ -140,21 +140,21 @@ pub fn buildCrtFile(comp: *Compilation, in_crt_file: CrtFile, prog_node: std.Pro
if (!is_arch_specific) {
// Look for an arch specific override.
override_path.shrinkRetainingCapacity(0);
- try override_path.writer().print("{s}" ++ s ++ "{s}" ++ s ++ "{s}.s", .{
+ try override_path.print("{s}" ++ s ++ "{s}" ++ s ++ "{s}.s", .{
dirname, arch_name, noextbasename,
});
if (source_table.contains(override_path.items))
continue;
override_path.shrinkRetainingCapacity(0);
- try override_path.writer().print("{s}" ++ s ++ "{s}" ++ s ++ "{s}.S", .{
+ try override_path.print("{s}" ++ s ++ "{s}" ++ s ++ "{s}.S", .{
dirname, arch_name, noextbasename,
});
if (source_table.contains(override_path.items))
continue;
override_path.shrinkRetainingCapacity(0);
- try override_path.writer().print("{s}" ++ s ++ "{s}" ++ s ++ "{s}.c", .{
+ try override_path.print("{s}" ++ s ++ "{s}" ++ s ++ "{s}.c", .{
dirname, arch_name, noextbasename,
});
if (source_table.contains(override_path.items))
src/libs/netbsd.zig
@@ -460,18 +460,15 @@ pub fn buildSharedObjects(comp: *Compilation, prog_node: std.Progress.Node) anye
for (libs, 0..) |lib, lib_i| {
stubs_asm.shrinkRetainingCapacity(0);
- const stubs_writer = stubs_asm.writer();
-
- try stubs_writer.writeAll(".text\n");
+ try stubs_asm.appendSlice(".text\n");
var sym_i: usize = 0;
- var sym_name_buf = std.array_list.Managed(u8).init(arena);
+ var sym_name_buf: std.Io.Writer.Allocating = .init(arena);
var opt_symbol_name: ?[]const u8 = null;
- var inc_fbs = std.io.fixedBufferStream(metadata.inclusions);
- var inc_reader = inc_fbs.reader();
+ var inc_reader: std.Io.Reader = .fixed(metadata.inclusions);
- const fn_inclusions_len = try inc_reader.readInt(u16, .little);
+ const fn_inclusions_len = try inc_reader.takeInt(u16, .little);
var chosen_ver_index: usize = 255;
var chosen_is_weak: bool = undefined;
@@ -479,17 +476,17 @@ pub fn buildSharedObjects(comp: *Compilation, prog_node: std.Progress.Node) anye
while (sym_i < fn_inclusions_len) : (sym_i += 1) {
const sym_name = opt_symbol_name orelse n: {
sym_name_buf.clearRetainingCapacity();
- try inc_reader.streamUntilDelimiter(sym_name_buf.writer(), 0, null);
+ _ = try inc_reader.streamDelimiter(&sym_name_buf.writer, 0);
- opt_symbol_name = sym_name_buf.items;
+ opt_symbol_name = sym_name_buf.written();
chosen_ver_index = 255;
- break :n sym_name_buf.items;
+ break :n sym_name_buf.written();
};
{
- const targets = try std.leb.readUleb128(u64, inc_reader);
- var lib_index = try inc_reader.readByte();
+ const targets = try inc_reader.takeLeb128(u64);
+ var lib_index = try inc_reader.takeByte();
const is_weak = (lib_index & (1 << 6)) != 0;
const is_terminal = (lib_index & (1 << 7)) != 0;
@@ -502,7 +499,7 @@ pub fn buildSharedObjects(comp: *Compilation, prog_node: std.Progress.Node) anye
((targets & (@as(u64, 1) << @as(u6, @intCast(target_targ_index)))) != 0);
while (true) {
- const byte = try inc_reader.readByte();
+ const byte = try inc_reader.takeByte();
const last = (byte & 0b1000_0000) != 0;
const ver_i = @as(u7, @truncate(byte));
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
// .globl _Exit
// .type _Exit, %function
// _Exit: .long 0
- try stubs_writer.print(
+ try stubs_asm.print(
\\.balign {d}
\\.{s} {s}
\\.type {s}, %function
@@ -542,9 +539,9 @@ pub fn buildSharedObjects(comp: *Compilation, prog_node: std.Progress.Node) anye
}
}
- try stubs_writer.writeAll(".data\n");
+ try stubs_asm.appendSlice(".data\n");
- const obj_inclusions_len = try inc_reader.readInt(u16, .little);
+ const obj_inclusions_len = try inc_reader.takeInt(u16, .little);
sym_i = 0;
opt_symbol_name = null;
@@ -554,18 +551,18 @@ pub fn buildSharedObjects(comp: *Compilation, prog_node: std.Progress.Node) anye
while (sym_i < obj_inclusions_len) : (sym_i += 1) {
const sym_name = opt_symbol_name orelse n: {
sym_name_buf.clearRetainingCapacity();
- try inc_reader.streamUntilDelimiter(sym_name_buf.writer(), 0, null);
+ _ = try inc_reader.streamDelimiter(&sym_name_buf.writer, 0);
- opt_symbol_name = sym_name_buf.items;
+ opt_symbol_name = sym_name_buf.written();
chosen_ver_index = 255;
- break :n sym_name_buf.items;
+ break :n sym_name_buf.written();
};
{
- const targets = try std.leb.readUleb128(u64, inc_reader);
- const size = try std.leb.readUleb128(u16, inc_reader);
- var lib_index = try inc_reader.readByte();
+ const targets = try inc_reader.takeLeb128(u64);
+ const size = try inc_reader.takeLeb128(u16);
+ var lib_index = try inc_reader.takeByte();
const is_weak = (lib_index & (1 << 6)) != 0;
const is_terminal = (lib_index & (1 << 7)) != 0;
@@ -578,7 +575,7 @@ pub fn buildSharedObjects(comp: *Compilation, prog_node: std.Progress.Node) anye
((targets & (@as(u64, 1) << @as(u6, @intCast(target_targ_index)))) != 0);
while (true) {
- const byte = try inc_reader.readByte();
+ const byte = try inc_reader.takeByte();
const last = (byte & 0b1000_0000) != 0;
const ver_i = @as(u7, @truncate(byte));
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
// .type malloc_conf, %object
// .size malloc_conf, 4
// malloc_conf: .fill 4, 1, 0
- try stubs_writer.print(
+ try stubs_asm.print(
\\.balign {d}
\\.{s} {s}
\\.type {s}, %object