Nick Desaulniers
2019-Oct-07 19:57 UTC
[PATCH] x86/cpu/vmware: use the full form of inl in VMWARE_PORT
On Mon, Oct 7, 2019 at 12:21 PM 'Sami Tolvanen' via Clang Built Linux <clang-built-linux at googlegroups.com> wrote:> > LLVM's assembler doesn't accept the short form inl (%%dx) instruction, > but instead insists on the output register to be explicitly specified: > > <inline asm>:1:7: error: invalid operand for instruction > inl (%dx) > ^ > LLVM ERROR: Error parsing inline asm > > Use the full form of the instruction to fix the build. > > Signed-off-by: Sami Tolvanen <samitolvanen at google.com>Thanks Sami, this looks like it addresses: Link: https://github.com/ClangBuiltLinux/linux/issues/734 Looks like GAS' testsuite has some cases where the second operand is indeed implicitly %eax if unspecified. (This should still be fixed in Clang). Just to triple check that they're equivalent: $ cat inl.s inl (%dx) inl (%dx), %eax $ as inl.s $ objdump -d a.out a.out: file format elf64-x86-64 Disassembly of section .text: 0000000000000000 <.text>: 0: ed in (%dx),%eax 1: ed in (%dx),%eax Reviewed-by: Nick Desaulniers <ndesaulniers at google.com>> --- > arch/x86/kernel/cpu/vmware.c | 2 +- > 1 file changed, 1 insertion(+), 1 deletion(-) > > diff --git a/arch/x86/kernel/cpu/vmware.c b/arch/x86/kernel/cpu/vmware.c > index 9735139cfdf8..46d732696c1c 100644 > --- a/arch/x86/kernel/cpu/vmware.c > +++ b/arch/x86/kernel/cpu/vmware.c > @@ -49,7 +49,7 @@ > #define VMWARE_CMD_VCPU_RESERVED 31 > > #define VMWARE_PORT(cmd, eax, ebx, ecx, edx) \ > - __asm__("inl (%%dx)" : \ > + __asm__("inl (%%dx), %%eax" : \ > "=a"(eax), "=c"(ecx), "=d"(edx), "=b"(ebx) : \ > "a"(VMWARE_HYPERVISOR_MAGIC), \ > "c"(VMWARE_CMD_##cmd), \-- Thanks, ~Nick Desaulniers