authorgravatar for david@vortan.devDavid Rubin <david@vortan.dev> 2024-08-14 17:17:13-07:00
committergravatar for kubkon@jakubkonka.comJakub Konka <kubkon@jakubkonka.com> 2024-08-15 08:53:41+02:00
log2e8351cc9e30c28a9415821ed99d664b76eb2062
tree658e247e459db49aea5ac3b3016382e2c8294310
parentc9db8878006fe53eb438bc6a6f2d2416cc5ef412

elf: fix up riscv for `.got.zig` rewrite


6 files changed, 4 insertions(+), 10 deletions(-)

src/arch/riscv64/CodeGen.zig+4-4
...@@ -4937,7 +4937,7 @@ fn genCall(...@@ -4937,7 +4937,7 @@ fn genCall(
4937 if (func.mod.pic) {4937 if (func.mod.pic) {
4938 return func.fail("TODO: genCall pic", .{});4938 return func.fail("TODO: genCall pic", .{});
4939 } else {4939 } else {
4940 try func.genSetReg(Type.u64, .ra, .{ .load_symbol = .{ .sym = sym_index } });4940 try func.genSetReg(Type.u64, .ra, .{ .lea_symbol = .{ .sym = sym_index } });
4941 _ = try func.addInst(.{4941 _ = try func.addInst(.{
4942 .tag = .jalr,4942 .tag = .jalr,
4943 .data = .{ .i_type = .{4943 .data = .{ .i_type = .{
...@@ -6120,7 +6120,7 @@ fn airAsm(func: *Func, inst: Air.Inst.Index) !void {...@@ -6120,7 +6120,7 @@ fn airAsm(func: *Func, inst: Air.Inst.Index) !void {
6120 arg_map.get(op_str["%[".len .. mod_index orelse op_str.len - "]".len]) orelse6120 arg_map.get(op_str["%[".len .. mod_index orelse op_str.len - "]".len]) orelse
6121 return func.fail("no matching constraint: '{s}'", .{op_str})6121 return func.fail("no matching constraint: '{s}'", .{op_str})
6122 ]) {6122 ]) {
6123 .load_symbol => |sym_off| if (mem.eql(u8, modifier, "plt")) blk: {6123 .lea_symbol => |sym_off| if (mem.eql(u8, modifier, "plt")) blk: {
6124 assert(sym_off.off == 0);6124 assert(sym_off.off == 0);
6125 break :blk .{ .sym = sym_off };6125 break :blk .{ .sym = sym_off };
6126 } else return func.fail("invalid modifier: '{s}'", .{modifier}),6126 } else return func.fail("invalid modifier: '{s}'", .{modifier}),
...@@ -6388,7 +6388,7 @@ fn genCopy(func: *Func, ty: Type, dst_mcv: MCValue, src_mcv: MCValue) !void {...@@ -6388,7 +6388,7 @@ fn genCopy(func: *Func, ty: Type, dst_mcv: MCValue, src_mcv: MCValue) !void {
6388 ty,6388 ty,
6389 src_mcv,6389 src_mcv,
6390 ),6390 ),
6391 .load_tlv => {6391 .load_symbol, .load_tlv => {
6392 const addr_reg, const addr_lock = try func.allocReg(.int);6392 const addr_reg, const addr_lock = try func.allocReg(.int);
6393 defer func.register_manager.unlockReg(addr_lock);6393 defer func.register_manager.unlockReg(addr_lock);
63946394
...@@ -6433,7 +6433,7 @@ fn genCopy(func: *Func, ty: Type, dst_mcv: MCValue, src_mcv: MCValue) !void {...@@ -6433,7 +6433,7 @@ fn genCopy(func: *Func, ty: Type, dst_mcv: MCValue, src_mcv: MCValue) !void {
6433 part_disp += @intCast(dst_ty.abiSize(func.pt));6433 part_disp += @intCast(dst_ty.abiSize(func.pt));
6434 }6434 }
6435 },6435 },
6436 else => return func.fail("TODO: genCopy to {s} from {s}", .{ @tagName(dst_mcv), @tagName(src_mcv) }),6436 else => return std.debug.panic("TODO: genCopy to {s} from {s}", .{ @tagName(dst_mcv), @tagName(src_mcv) }),
6437 }6437 }
6438}6438}
64396439
test/behavior/basic.zig-1
...@@ -733,7 +733,6 @@ test "extern variable with non-pointer opaque type" {...@@ -733,7 +733,6 @@ test "extern variable with non-pointer opaque type" {
733 if (builtin.zig_backend == .stage2_c) return error.SkipZigTest; // TODO733 if (builtin.zig_backend == .stage2_c) return error.SkipZigTest; // TODO
734 if (builtin.zig_backend == .stage2_x86_64 and builtin.target.ofmt != .elf and builtin.target.ofmt != .macho) return error.SkipZigTest;734 if (builtin.zig_backend == .stage2_x86_64 and builtin.target.ofmt != .elf and builtin.target.ofmt != .macho) return error.SkipZigTest;
735 if (builtin.zig_backend == .stage2_spirv64) return error.SkipZigTest; // TODO735 if (builtin.zig_backend == .stage2_spirv64) return error.SkipZigTest; // TODO
736 if (builtin.zig_backend == .stage2_riscv64) return error.SkipZigTest;
737736
738 @export(var_to_export, .{ .name = "opaque_extern_var" });737 @export(var_to_export, .{ .name = "opaque_extern_var" });
739 try expect(@as(*align(1) u32, @ptrCast(&opaque_extern_var)).* == 42);738 try expect(@as(*align(1) u32, @ptrCast(&opaque_extern_var)).* == 42);
test/behavior/export_builtin.zig-2
...@@ -48,7 +48,6 @@ test "exporting using field access" {...@@ -48,7 +48,6 @@ test "exporting using field access" {
48test "exporting comptime-known value" {48test "exporting comptime-known value" {
49 if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest;49 if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest;
50 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest;50 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest;
51 if (builtin.zig_backend == .stage2_riscv64) return error.SkipZigTest;
52 if (builtin.zig_backend == .stage2_x86_64 and51 if (builtin.zig_backend == .stage2_x86_64 and
53 (builtin.target.ofmt != .elf and52 (builtin.target.ofmt != .elf and
54 builtin.target.ofmt != .macho and53 builtin.target.ofmt != .macho and
...@@ -68,7 +67,6 @@ test "exporting comptime-known value" {...@@ -68,7 +67,6 @@ test "exporting comptime-known value" {
68test "exporting comptime var" {67test "exporting comptime var" {
69 if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest;68 if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest;
70 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest;69 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest;
71 if (builtin.zig_backend == .stage2_riscv64) return error.SkipZigTest;
72 if (builtin.zig_backend == .stage2_x86_64 and70 if (builtin.zig_backend == .stage2_x86_64 and
73 (builtin.target.ofmt != .elf and71 (builtin.target.ofmt != .elf and
74 builtin.target.ofmt != .macho and72 builtin.target.ofmt != .macho and
test/behavior/extern.zig-1
...@@ -7,7 +7,6 @@ test "anyopaque extern symbol" {...@@ -7,7 +7,6 @@ test "anyopaque extern symbol" {
7 if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest;7 if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest;
8 if (builtin.zig_backend == .stage2_x86_64 and builtin.target.ofmt != .elf and builtin.target.ofmt != .macho) return error.SkipZigTest;8 if (builtin.zig_backend == .stage2_x86_64 and builtin.target.ofmt != .elf and builtin.target.ofmt != .macho) return error.SkipZigTest;
9 if (builtin.zig_backend == .stage2_spirv64) return error.SkipZigTest;9 if (builtin.zig_backend == .stage2_spirv64) return error.SkipZigTest;
10 if (builtin.zig_backend == .stage2_riscv64) return error.SkipZigTest;
1110
12 const a = @extern(*anyopaque, .{ .name = "a_mystery_symbol" });11 const a = @extern(*anyopaque, .{ .name = "a_mystery_symbol" });
13 const b: *i32 = @alignCast(@ptrCast(a));12 const b: *i32 = @alignCast(@ptrCast(a));
test/behavior/fn.zig-1
...@@ -429,7 +429,6 @@ test "implicit cast function to function ptr" {...@@ -429,7 +429,6 @@ test "implicit cast function to function ptr" {
429 if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest; // TODO429 if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest; // TODO
430 if (builtin.zig_backend == .stage2_spirv64) return error.SkipZigTest;430 if (builtin.zig_backend == .stage2_spirv64) return error.SkipZigTest;
431 if (builtin.zig_backend == .stage2_x86_64 and builtin.target.ofmt != .elf and builtin.target.ofmt != .macho) return error.SkipZigTest;431 if (builtin.zig_backend == .stage2_x86_64 and builtin.target.ofmt != .elf and builtin.target.ofmt != .macho) return error.SkipZigTest;
432 if (builtin.zig_backend == .stage2_riscv64) return error.SkipZigTest;
433432
434 const S1 = struct {433 const S1 = struct {
435 export fn someFunctionThatReturnsAValue() c_int {434 export fn someFunctionThatReturnsAValue() c_int {
test/behavior/pointers.zig-1
...@@ -45,7 +45,6 @@ test "pointer-integer arithmetic" {...@@ -45,7 +45,6 @@ test "pointer-integer arithmetic" {
4545
46test "pointer subtraction" {46test "pointer subtraction" {
47 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO47 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO
48 if (builtin.zig_backend == .stage2_riscv64) return error.SkipZigTest;
4948
50 {49 {
51 const a: *u8 = @ptrFromInt(100);50 const a: *u8 = @ptrFromInt(100);