Re: [PATCH] x86/cpu/vmware: use the full form of inl in VMWARE_PORT
On Mon, Oct 07, 2019 at 12:21:29PM -0700, Sami Tolvanen wrote: > LLVM's assembler doesn't accept the short form inl (%%dx) instruction, > but instead insists on the output register to be explicitly specified: > > :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 Reviewed-by: Kees Cook -Kees > --- > 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), \ > -- > 2.23.0.581.g78d2f28ef7-goog > -- Kees Cook
Re: [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 wrote: > > LLVM's assembler doesn't accept the short form inl (%%dx) instruction, > but instead insists on the output register to be explicitly specified: > > :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 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: <.text>: 0: edin (%dx),%eax 1: edin (%dx),%eax Reviewed-by: Nick Desaulniers > --- > 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
Re: [PATCH] x86/cpu/vmware: use the full form of inl in VMWARE_PORT
On 10/7/19 9:21 PM, Sami Tolvanen wrote: > LLVM's assembler doesn't accept the short form inl (%%dx) instruction, > but instead insists on the output register to be explicitly specified: > > :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 Acked-by: Thomas Hellstrom > --- > 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), \
[PATCH] x86/cpu/vmware: use the full form of inl in VMWARE_PORT
LLVM's assembler doesn't accept the short form inl (%%dx) instruction, but instead insists on the output register to be explicitly specified: :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 --- 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), \ -- 2.23.0.581.g78d2f28ef7-goog