Anthony,
On 11/06/14 12:24, Anthony PERARD wrote:
> The BaseTools/Scripts/ConvertMasmToNasm.py script was used to convert
> X64/TestAndClearBit.asm to X64/TestAndClearBit.nasm
>
> Contributed-under: TianoCore Contribution Agreement 1.0
> Signed-off-by: Anthony PERARD <[email protected]>
> ---
> OvmfPkg/XenBusDxe/X64/TestAndClearBit.S | 12
> ------------
> .../X64/{TestAndClearBit.asm => TestAndClearBit.nasm} | 8 ++++----
> OvmfPkg/XenBusDxe/XenBusDxe.inf | 3 +--
> 3 files changed, 5 insertions(+), 18 deletions(-)
> delete mode 100644 OvmfPkg/XenBusDxe/X64/TestAndClearBit.S
> rename OvmfPkg/XenBusDxe/X64/{TestAndClearBit.asm => TestAndClearBit.nasm}
> (63%)
>
> diff --git a/OvmfPkg/XenBusDxe/X64/TestAndClearBit.S
> b/OvmfPkg/XenBusDxe/X64/TestAndClearBit.S
> deleted file mode 100644
> index 0372e83..0000000
> --- a/OvmfPkg/XenBusDxe/X64/TestAndClearBit.S
> +++ /dev/null
> @@ -1,12 +0,0 @@
> -# INT32
> -# EFIAPI
> -# TestAndClearBit (
> -# IN INT32 Bit, // rcx
> -# IN volatile VOID* Address // rdx
> -# );
> -ASM_GLOBAL ASM_PFX(TestAndClearBit)
> -ASM_PFX(TestAndClearBit):
> - lock
> - btrl %ecx, (%rdx)
> - sbbl %eax, %eax
> - ret
> diff --git a/OvmfPkg/XenBusDxe/X64/TestAndClearBit.asm
> b/OvmfPkg/XenBusDxe/X64/TestAndClearBit.nasm
> similarity index 63%
> rename from OvmfPkg/XenBusDxe/X64/TestAndClearBit.asm
> rename to OvmfPkg/XenBusDxe/X64/TestAndClearBit.nasm
> index 3a25879..38ac549 100644
> --- a/OvmfPkg/XenBusDxe/X64/TestAndClearBit.asm
> +++ b/OvmfPkg/XenBusDxe/X64/TestAndClearBit.nasm
> @@ -1,4 +1,5 @@
> -.code
> +DEFAULT REL
> +SECTION .text
>
> ; INT32
> ; EFIAPI
> @@ -6,11 +7,10 @@
> ; IN INT32 Bit, // rcx
> ; IN volatile VOID* Address // rdx
> ; );
> -TestAndClearBit PROC
> +global ASM_PFX(TestAndClearBit)
> +ASM_PFX(TestAndClearBit):
> lock
> btr [rdx], ecx
> sbb eax, eax
> ret
> -TestAndClearBit ENDP
>
> -END
> diff --git a/OvmfPkg/XenBusDxe/XenBusDxe.inf b/OvmfPkg/XenBusDxe/XenBusDxe.inf
> index 61f7568..4ce4743 100644
> --- a/OvmfPkg/XenBusDxe/XenBusDxe.inf
> +++ b/OvmfPkg/XenBusDxe/XenBusDxe.inf
> @@ -56,8 +56,7 @@
> [Sources.X64]
> X64/hypercall.nasm
> X64/InterlockedCompareExchange16.nasm
> - X64/TestAndClearBit.S
> - X64/TestAndClearBit.asm
> + X64/TestAndClearBit.nasm
>
> [LibraryClasses]
> UefiDriverEntryPoint
>
when building this, my nasm reports:
Build/OvmfX64/DEBUG_GCC48/X64/OvmfPkg/XenBusDxe/XenBusDxe/OUTPUT/X64/TestAndClearBit.iii:12:
warning: instruction is not lockable
Looking at the "insns.dat" file in the "nasm" source code, I can see
BTR mem,reg64 [mr: hle o64 0f b3 /r]
X64,SM,LOCK
So apparently the problem is that you don't pass the bit position in a 64-bit
register (rcx); you pass it in a 32-bit register (ecx). I tried the following
patch:
diff --git a/OvmfPkg/XenBusDxe/X64/TestAndClearBit.nasm
b/OvmfPkg/XenBusDxe/X64/TestAndClearBit.nasm
index 38ac549..ce49d7f 100644
--- a/OvmfPkg/XenBusDxe/X64/TestAndClearBit.nasm
+++ b/OvmfPkg/XenBusDxe/X64/TestAndClearBit.nasm
@@ -10,7 +10,7 @@ SECTION .text
global ASM_PFX(TestAndClearBit)
ASM_PFX(TestAndClearBit):
lock
- btr [rdx], ecx
+ btr [rdx], rcx
sbb eax, eax
ret
But nasm emits the same warning. Any ideas?
The warning is a bit strange though, because the disassembly confirms the BTR
is locked:
Disassembly of section .text:
0000000000000000 <TestAndClearBit>:
0: f0 48 0f b3 0a lock btr %rcx,(%rdx)
5: 19 c0 sbb %eax,%eax
7: c3 retq
So maybe it's a nasm bug.
Thanks
Laszlo
------------------------------------------------------------------------------
Comprehensive Server Monitoring with Site24x7.
Monitor 10 servers for $9/Month.
Get alerted through email, SMS, voice calls or mobile push notifications.
Take corrective actions from your mobile device.
http://pubads.g.doubleclick.net/gampad/clk?id=154624111&iu=/4140/ostg.clktrk
_______________________________________________
edk2-devel mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/edk2-devel