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