vadimk 09/11/07 13:46:15
Added: checkvm-pie-safety.patch
Log:
Bug 200376
(Portage version: 2.2_rc48/cvs/Linux x86_64)
Revision Changes Path
1.1 app-emulation/open-vm-tools/files/checkvm-pie-safety.patch
file : http://sources.gentoo.org/viewcvs.py/gentoo-x86/app-emulation/open-vm-tools/files/checkvm-pie-safety.patch?rev=1.1&view=markup
plain: http://sources.gentoo.org/viewcvs.py/gentoo-x86/app-emulation/open-vm-tools/files/checkvm-pie-safety.patch?rev=1.1&content-type=text/plain
Index: checkvm-pie-safety.patch
===================================================================
--- a/checkvm/checkvm.c
+++ b/checkvm/checkvm.c
@@ -79,8 +79,16 @@
{
uint32 eax, ebx, ecx, edx;
- __asm__ volatile("inl (%%dx)" :
- "=a"(eax), "=c"(ecx), "=d"(edx), "=b"(ebx) :
+ __asm__ volatile(
+#if defined __PIC__ && !vm_x86_64 // %ebx is reserved by the compiler.
+ "movl %%ebx, %3 \n\t"
+ "inl (%%dx) \n\t"
+ "xchgl %%ebx, %3 \n\t" :
+ "=a"(eax), "=c"(ecx), "=d"(edx), "=r"(ebx) :
+#else
+ "inl (%%dx)" :
+ "=a"(eax), "=c"(ecx), "=d"(edx), "=b"(ebx) :
+#endif
"0"(BDOOR_MAGIC), "1"(BDOOR_CMD_GETVERSION),
"2"(BDOOR_PORT) : "memory");
version[0] = eax;
@@ -96,8 +104,16 @@
{
uint32 eax, ebx, ecx, edx;
- __asm__ volatile("inl (%%dx)" :
- "=a"(eax), "=c"(ecx), "=d"(edx), "=b"(ebx) :
+ __asm__ volatile(
+#if defined __PIC__ && !vm_x86_64 // %ebx is reserved by the compiler.
+ "movl %%ebx, %3 \n\t"
+ "inl (%%dx) \n\t"
+ "xchgl %%ebx, %3 \n\t" :
+ "=a"(eax), "=c"(ecx), "=d"(edx), "=r"(ebx) :
+#else
+ "inl (%%dx)" :
+ "=a"(eax), "=c"(ecx), "=d"(edx), "=b"(ebx) :
+#endif
"0"(BDOOR_MAGIC), "1"(BDOOR_CMD_GETHWVERSION),
"2"(BDOOR_PORT) : "memory");
*hwVersion = eax;
@@ -112,8 +128,16 @@
{
uint32 eax, ebx, ecx, edx;
- __asm__ volatile("inl (%%dx)" :
- "=a"(eax), "=c"(ecx), "=d"(edx), "=b"(ebx) :
+ __asm__ volatile(
+#if defined __PIC__ && !vm_x86_64 // %ebx is reserved by the compiler.
+ "movl %%ebx, %3 \n\t"
+ "inl (%%dx) \n\t"
+ "xchgl %%ebx, %3 \n\t" :
+ "=a"(eax), "=c"(ecx), "=d"(edx), "=r"(ebx) :
+#else
+ "inl (%%dx)" :
+ "=a"(eax), "=c"(ecx), "=d"(edx), "=b"(ebx) :
+#endif
"0"(BDOOR_MAGIC), "1"(BDOOR_CMD_GETSCREENSIZE),
"2"(BDOOR_PORT) : "memory");
*screensize = eax;
|