Skip to content

Commit 7dba1a3

Browse files
committed
unittests/FEXLinuxTests: Fix for building with clang
1 parent f4dec5d commit 7dba1a3

File tree

5 files changed

+63
-61
lines changed

5 files changed

+63
-61
lines changed

unittests/FEXLinuxTests/tests/cpu/cpu_count.cpp

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,8 @@ struct cpuid_fn {
2525

2626
cpuid_fn get_cpuid(uint32_t func, uint32_t leaf = 0) {
2727
cpuid_fn fn {};
28-
__cpuid_count(func, leaf, fn.eax, fn.ebx, fn.ecx, fn.edx);
28+
__asm volatile("cpuid" : "=a"(fn.eax), "=b"(fn.ebx), "=c"(fn.ecx), "=d"(fn.edx) : "a"(func), "c"(leaf));
29+
2930
return fn;
3031
}
3132

unittests/FEXLinuxTests/tests/signal/Syscall_state.32.cpp

Lines changed: 13 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -29,21 +29,21 @@ __attribute__((naked)) void DoZeroRegSyscallFault(CPUState State) {
2929
__asm volatile(
3030
R"(
3131
// Load flags
32-
push dword [esp + %[FlagsOffset]]
32+
push dword ptr [esp + %[FlagsOffset]]
3333
popfd
3434
3535
// Do getpid syscall.
3636
// Overwrites some arguments.
3737
// Syscall num
38-
mov eax, qword [esp + %[RAXOffset]]
38+
mov eax, dword ptr [esp + %[RAXOffset]]
3939
4040
// Load remaining registers that we can
41-
mov ebx, qword [esp + %[RBXOffset]];
42-
mov ecx, qword [esp + %[RCXOffset]];
43-
mov edx, qword [esp + %[RDXOffset]]
44-
mov esi, qword [esp + %[RSIOffset]]
45-
mov edi, qword [esp + %[RDIOffset]];
46-
mov ebp, qword [esp + %[RBPOffset]];
41+
mov ebx, dword ptr [esp + %[RBXOffset]];
42+
mov ecx, dword ptr [esp + %[RCXOffset]];
43+
mov edx, dword ptr [esp + %[RDXOffset]]
44+
mov esi, dword ptr [esp + %[RSIOffset]]
45+
mov edi, dword ptr [esp + %[RDIOffset]];
46+
mov ebp, dword ptr [esp + %[RBPOffset]];
4747
// Can't load RSP
4848
4949
int 0x80;
@@ -54,12 +54,11 @@ __attribute__((naked)) void DoZeroRegSyscallFault(CPUState State) {
5454
// We long jump from the signal handler, so this won't continue.
5555
)"
5656
:
57-
// integers are offset by 8 for some reason.
58-
// But the stack is also offset by 4-bytes due to the call.
59-
: [RAXOffset] "i"(offsetof(CPUState, Registers[TEST_REG_EAX]) - 4), [RDXOffset] "i"(offsetof(CPUState, Registers[TEST_REG_EDX]) - 4),
60-
[RSIOffset] "i"(offsetof(CPUState, Registers[TEST_REG_ESI]) - 4), [RDIOffset] "i"(offsetof(CPUState, Registers[TEST_REG_EDI]) - 4),
61-
[RBXOffset] "i"(offsetof(CPUState, Registers[TEST_REG_EBX]) - 4), [RCXOffset] "i"(offsetof(CPUState, Registers[TEST_REG_ECX]) - 4),
62-
[RBPOffset] "i"(offsetof(CPUState, Registers[TEST_REG_EBP]) - 4), [FlagsOffset] "i"(offsetof(CPUState, eflags) - 4)
57+
// The stack is offset by 4-bytes due to the call.
58+
: [RAXOffset] "i"(offsetof(CPUState, Registers[TEST_REG_EAX]) + 4), [RDXOffset] "i"(offsetof(CPUState, Registers[TEST_REG_EDX]) + 4),
59+
[RSIOffset] "i"(offsetof(CPUState, Registers[TEST_REG_ESI]) + 4), [RDIOffset] "i"(offsetof(CPUState, Registers[TEST_REG_EDI]) + 4),
60+
[RBXOffset] "i"(offsetof(CPUState, Registers[TEST_REG_EBX]) + 4), [RCXOffset] "i"(offsetof(CPUState, Registers[TEST_REG_ECX]) + 4),
61+
[RBPOffset] "i"(offsetof(CPUState, Registers[TEST_REG_EBP]) + 4), [FlagsOffset] "i"(offsetof(CPUState, eflags) + 4)
6362

6463
: "memory");
6564
}

unittests/FEXLinuxTests/tests/signal/Syscall_state.64.cpp

Lines changed: 24 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -30,32 +30,32 @@ __attribute__((naked)) void DoZeroRegSyscallFault(CPUState* State) {
3030
push r15
3131
3232
// Load flags
33-
push qword [rdi + %[FlagsOffset]]
33+
push qword ptr [rdi + %[FlagsOffset]]
3434
popfq
3535
3636
// Do getpid syscall.
3737
// Overwrites some arguments.
3838
// Syscall num
39-
mov rax, qword [rdi + %[RAXOffset]]
39+
mov rax, qword ptr [rdi + %[RAXOffset]]
4040
4141
// Load remaining registers that we can
42-
mov rbx, qword [rdi + %[RBXOffset]];
43-
mov rcx, qword [rdi + %[RCXOffset]];
44-
mov rdx, qword [rdi + %[RDXOffset]]
45-
mov rsi, qword [rdi + %[RSIOffset]]
46-
mov rbp, qword [rdi + %[RBPOffset]];
42+
mov rbx, qword ptr [rdi + %[RBXOffset]];
43+
mov rcx, qword ptr [rdi + %[RCXOffset]];
44+
mov rdx, qword ptr [rdi + %[RDXOffset]]
45+
mov rsi, qword ptr [rdi + %[RSIOffset]]
46+
mov rbp, qword ptr [rdi + %[RBPOffset]];
4747
// Can't load RSP
48-
mov r8, qword [rdi + %[R8Offset]]
49-
mov r9, qword [rdi + %[R9Offset]];
50-
mov r10, qword [rdi + %[R10Offset]]
51-
mov r11, qword [rdi + %[R11Offset]];
52-
mov r12, qword [rdi + %[R12Offset]];
53-
mov r13, qword [rdi + %[R13Offset]];
54-
mov r14, qword [rdi + %[R14Offset]];
55-
mov r15, qword [rdi + %[R15Offset]];
48+
mov r8, qword ptr [rdi + %[R8Offset]]
49+
mov r9, qword ptr [rdi + %[R9Offset]];
50+
mov r10, qword ptr [rdi + %[R10Offset]]
51+
mov r11, qword ptr [rdi + %[R11Offset]];
52+
mov r12, qword ptr [rdi + %[R12Offset]];
53+
mov r13, qword ptr [rdi + %[R13Offset]];
54+
mov r14, qword ptr [rdi + %[R14Offset]];
55+
mov r15, qword ptr [rdi + %[R15Offset]];
5656
5757
// Overwrite RDI last.
58-
mov rdi, qword [rdi + %[RDIOffset]];
58+
mov rdi, qword ptr [rdi + %[RDIOffset]];
5959
6060
syscall;
6161
@@ -66,15 +66,14 @@ __attribute__((naked)) void DoZeroRegSyscallFault(CPUState* State) {
6666
// We long jump from the signal handler, so this won't continue.
6767
)"
6868
:
69-
// integers are offset by 8 for some reason.
70-
: [RAXOffset] "i"(offsetof(CPUState, Registers[REG_RAX]) - 8), [RDXOffset] "i"(offsetof(CPUState, Registers[REG_RDX]) - 8),
71-
[R10Offset] "i"(offsetof(CPUState, Registers[REG_R10]) - 8), [R8Offset] "i"(offsetof(CPUState, Registers[REG_R8]) - 8),
72-
[RSIOffset] "i"(offsetof(CPUState, Registers[REG_RSI]) - 8), [RDIOffset] "i"(offsetof(CPUState, Registers[REG_RDI]) - 8),
73-
[RBXOffset] "i"(offsetof(CPUState, Registers[REG_RBX]) - 8), [RCXOffset] "i"(offsetof(CPUState, Registers[REG_RCX]) - 8),
74-
[RBPOffset] "i"(offsetof(CPUState, Registers[REG_RBP]) - 8), [R9Offset] "i"(offsetof(CPUState, Registers[REG_R9]) - 8),
75-
[R11Offset] "i"(offsetof(CPUState, Registers[REG_R11]) - 8), [R12Offset] "i"(offsetof(CPUState, Registers[REG_R12]) - 8),
76-
[R13Offset] "i"(offsetof(CPUState, Registers[REG_R13]) - 8), [R14Offset] "i"(offsetof(CPUState, Registers[REG_R14]) - 8),
77-
[R15Offset] "i"(offsetof(CPUState, Registers[REG_R15]) - 8), [FlagsOffset] "i"(offsetof(CPUState, eflags) - 8)
69+
: [RAXOffset] "i"(offsetof(CPUState, Registers[REG_RAX])), [RDXOffset] "i"(offsetof(CPUState, Registers[REG_RDX])),
70+
[R10Offset] "i"(offsetof(CPUState, Registers[REG_R10])), [R8Offset] "i"(offsetof(CPUState, Registers[REG_R8])),
71+
[RSIOffset] "i"(offsetof(CPUState, Registers[REG_RSI])), [RDIOffset] "i"(offsetof(CPUState, Registers[REG_RDI])),
72+
[RBXOffset] "i"(offsetof(CPUState, Registers[REG_RBX])), [RCXOffset] "i"(offsetof(CPUState, Registers[REG_RCX])),
73+
[RBPOffset] "i"(offsetof(CPUState, Registers[REG_RBP])), [R9Offset] "i"(offsetof(CPUState, Registers[REG_R9])),
74+
[R11Offset] "i"(offsetof(CPUState, Registers[REG_R11])), [R12Offset] "i"(offsetof(CPUState, Registers[REG_R12])),
75+
[R13Offset] "i"(offsetof(CPUState, Registers[REG_R13])), [R14Offset] "i"(offsetof(CPUState, Registers[REG_R14])),
76+
[R15Offset] "i"(offsetof(CPUState, Registers[REG_R15])), [FlagsOffset] "i"(offsetof(CPUState, eflags))
7877

7978
: "memory");
8079
}

unittests/FEXLinuxTests/tests/signal/SystemInstructions.64.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -73,14 +73,14 @@ TEST(13, "mov dr0, rax", "mov dr0, rax", X86_TRAPNO_GP, 0, 0x80, SIGSEGV);
7373
TEST(14, "rdpmc", "rdpmc", X86_TRAPNO_GP, 0, 0x80, SIGSEGV);
7474
TEST(15, "sti", "sti", X86_TRAPNO_GP, 0, 0x80, SIGSEGV);
7575
TEST(16, "swapgs", "swapgs", X86_TRAPNO_GP, 0, 0x80, SIGSEGV);
76-
TEST(17, "sysret", "sysretd", X86_TRAPNO_GP, 0, 0x80, SIGSEGV);
76+
TEST(17, "sysret", "sysret", X86_TRAPNO_GP, 0, 0x80, SIGSEGV);
7777
TEST(18, "wrmsr", "wrmsr", X86_TRAPNO_GP, 0, 0x80, SIGSEGV);
7878

7979
// Instructions not implemented
8080
TEST(19, "monitor", "monitor", X86_TRAPNO_UD, 0, 2, SIGILL);
8181
TEST(20, "mwait", "mwait", X86_TRAPNO_UD, 0, 2, SIGILL);
8282
TEST(21, "sysenter", "sysenter", X86_TRAPNO_UD, 0, 2, SIGILL);
83-
TEST(22, "sysexit", "sysexitd", X86_TRAPNO_UD, 0, 2, SIGILL);
83+
TEST(22, "sysexit", "sysexit", X86_TRAPNO_UD, 0, 2, SIGILL);
8484

8585
// Differs between dr8 and dr0-7 variants.
8686
// dr0-7: SIGSEGV

unittests/FEXLinuxTests/tests/signal/x87_state.64.cpp

Lines changed: 22 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -42,13 +42,13 @@ __attribute__((naked, nocf_check)) static void TestFromSignal(const DataStruct*
4242
ffreep st(0);
4343
4444
// Now load **7** values. Keeping the last one zero and our stack top not wrapped around.
45-
fldt [rdi + (0 * 16)];
46-
fldt [rdi + (1 * 16)];
47-
fldt [rdi + (2 * 16)];
48-
fldt [rdi + (3 * 16)];
49-
fldt [rdi + (4 * 16)];
50-
fldt [rdi + (5 * 16)];
51-
fldt [rdi + (6 * 16)];
45+
fld tbyte ptr [rdi + (0 * 16)];
46+
fld tbyte ptr [rdi + (1 * 16)];
47+
fld tbyte ptr [rdi + (2 * 16)];
48+
fld tbyte ptr [rdi + (3 * 16)];
49+
fld tbyte ptr [rdi + (4 * 16)];
50+
fld tbyte ptr [rdi + (5 * 16)];
51+
fld tbyte ptr [rdi + (6 * 16)];
5252
5353
hlt;
5454
RetInstruction:
@@ -86,24 +86,27 @@ __attribute__((naked, nocf_check)) static void TestSetInSignal(DataStruct* data)
8686
8787
// Store values until the status word says nothing is left.
8888
mov eax, 0;
89-
.1:
89+
90+
2:
91+
9092
fstsw ax;
9193
and eax, (7 << 11);
92-
jz .2;
93-
fstpt [rdi];
94+
jz 3f;
95+
fstp tbyte ptr [rdi];
9496
add rdi, 16;
9597
96-
jmp .1;
97-
.2:
98+
jmp 2b
99+
100+
3:
98101
99102
// Now load **7** values. Keeping the last one zero and our stack top not wrapped around.
100-
fldt [rdi + (0 * 16)];
101-
fldt [rdi + (1 * 16)];
102-
fldt [rdi + (2 * 16)];
103-
fldt [rdi + (3 * 16)];
104-
fldt [rdi + (4 * 16)];
105-
fldt [rdi + (5 * 16)];
106-
fldt [rdi + (6 * 16)];
103+
fld tbyte ptr [rdi + (0 * 16)];
104+
fld tbyte ptr [rdi + (1 * 16)];
105+
fld tbyte ptr [rdi + (2 * 16)];
106+
fld tbyte ptr [rdi + (3 * 16)];
107+
fld tbyte ptr [rdi + (4 * 16)];
108+
fld tbyte ptr [rdi + (5 * 16)];
109+
fld tbyte ptr [rdi + (6 * 16)];
107110
108111
ret;
109112
)" ::

0 commit comments

Comments
 (0)