authorgravatar for kubkon@jakubkonka.comJakub Konka <kubkon@jakubkonka.com> 2023-11-12 11:08:27+01:00
committergravatar for jacobly@ziglang.orgJacob Young <jacobly@ziglang.org> 2023-11-12 18:12:41-05:00
log412519dd49ec2a42d0feb9842545dadaf1c6b68d
treea5ede12126d54f34be56861c51de60bb0def2317
parent0dab319e86f0918331be2e49dde22e9eaf93a46b

x86_64: seems like we will need to keep track of rax and reserve rax+rdi for TLS


1 files changed, 5 insertions(+), 5 deletions(-)

src/arch/x86_64/Lower.zig+5-5
...@@ -364,14 +364,14 @@ fn emit(lower: *Lower, prefix: Prefix, mnemonic: Mnemonic, ops: []const Operand)...@@ -364,14 +364,14 @@ fn emit(lower: *Lower, prefix: Prefix, mnemonic: Mnemonic, ops: []const Operand)
364 _ = lower.reloc(.{ .linker_tlsld = sym });364 _ = lower.reloc(.{ .linker_tlsld = sym });
365 lower.result_insts[lower.result_insts_len] =365 lower.result_insts[lower.result_insts_len] =
366 try Instruction.new(.none, .lea, &[_]Operand{366 try Instruction.new(.none, .lea, &[_]Operand{
367 .{ .reg = ops[0].reg.to64() },367 .{ .reg = .rdi },
368 .{ .mem = Memory.rip(mem_op.sib.ptr_size, 0) },368 .{ .mem = Memory.rip(mem_op.sib.ptr_size, 0) },
369 });369 });
370 lower.result_insts_len += 1;370 lower.result_insts_len += 1;
371 if (lower.bin_file.cast(link.File.Elf)) |elf_file| {371 if (lower.bin_file.cast(link.File.Elf)) |elf_file| {
372 _ = lower.reloc(.{ .linker_extern_fn = .{372 _ = lower.reloc(.{ .linker_extern_fn = .{
373 .atom_index = sym.atom_index,373 .atom_index = sym.atom_index,
374 .sym_index = try elf_file.getGlobalSymbol("__tls_get_address", null),374 .sym_index = try elf_file.getGlobalSymbol("__tls_get_addr", null),
375 } });375 } });
376 }376 }
377 lower.result_insts[lower.result_insts_len] =377 lower.result_insts[lower.result_insts_len] =
...@@ -386,8 +386,8 @@ fn emit(lower: *Lower, prefix: Prefix, mnemonic: Mnemonic, ops: []const Operand)...@@ -386,8 +386,8 @@ fn emit(lower: *Lower, prefix: Prefix, mnemonic: Mnemonic, ops: []const Operand)
386 }386 }
387 emit_mnemonic = .lea;387 emit_mnemonic = .lea;
388 break :op .{ .mem = Memory.sib(mem_op.sib.ptr_size, .{388 break :op .{ .mem = Memory.sib(mem_op.sib.ptr_size, .{
389 .base = .{ .reg = ops[0].reg.to64() },389 .base = .{ .reg = .rax },
390 .disp = undefined,390 .disp = std.math.minInt(i32),
391 }) };391 }) };
392 } else {392 } else {
393 // Since we are linking statically, we emit LE model directly.393 // Since we are linking statically, we emit LE model directly.
...@@ -405,7 +405,7 @@ fn emit(lower: *Lower, prefix: Prefix, mnemonic: Mnemonic, ops: []const Operand)...@@ -405,7 +405,7 @@ fn emit(lower: *Lower, prefix: Prefix, mnemonic: Mnemonic, ops: []const Operand)
405 emit_mnemonic = .lea;405 emit_mnemonic = .lea;
406 break :op .{ .mem = Memory.sib(mem_op.sib.ptr_size, .{406 break :op .{ .mem = Memory.sib(mem_op.sib.ptr_size, .{
407 .base = .{ .reg = ops[0].reg.to64() },407 .base = .{ .reg = ops[0].reg.to64() },
408 .disp = undefined,408 .disp = std.math.minInt(i32),
409 }) };409 }) };
410 }410 }
411 }411 }