The x32 ABI (a.k.a AMD64 ILP32) necessitates to push or pop a 64-bit
register even though ILP32 uses 32-bit integers, longs and pointers.

This fixes the following build errors:

  arch/x86/tests/regs_load.S:65: Error: operand type mismatch for `push'
  arch/x86/tests/regs_load.S:72: Error: operand type mismatch for `pop'

Signed-off-by: Vincent Stehlé <vincent.ste...@intel.com>
Cc: Peter Zijlstra <pet...@infradead.org>
Cc: Ingo Molnar <mi...@redhat.com>
Cc: Arnaldo Carvalho de Melo <a...@kernel.org>
Cc: Jiri Olsa <jo...@redhat.com>
Cc: Adrian Hunter <adrian.hun...@intel.com>
---
 tools/perf/arch/x86/tests/regs_load.S | 8 ++++++++
 1 file changed, 8 insertions(+)

diff --git a/tools/perf/arch/x86/tests/regs_load.S 
b/tools/perf/arch/x86/tests/regs_load.S
index 60875d5..4fa7943 100644
--- a/tools/perf/arch/x86/tests/regs_load.S
+++ b/tools/perf/arch/x86/tests/regs_load.S
@@ -62,14 +62,22 @@ ENTRY(perf_regs_load)
 ENDPROC(perf_regs_load)
 #else
 ENTRY(perf_regs_load)
+#if defined(__x86_64__) && defined(__ILP32__)
+       pushq %rdi
+#else
        push %edi
+#endif
        movl 8(%esp), %edi
        movl %eax, AX(%edi)
        movl %ebx, BX(%edi)
        movl %ecx, CX(%edi)
        movl %edx, DX(%edi)
        movl %esi, SI(%edi)
+#if defined(__x86_64__) && defined(__ILP32__)
+       popq %rax
+#else
        pop %eax
+#endif
        movl %eax, DI(%edi)
        movl %ebp, BP(%edi)
 
-- 
2.9.3

Reply via email to