[gentoo-commits] gentoo-x86 commit in sys-apps/util-linux/files: util-linux-2.25-lscpu-pic.patch

2014-09-05 Thread Lars Wendler (polynomial-c)
polynomial-c14/09/05 13:20:23

  Removed:  util-linux-2.25-lscpu-pic.patch
  Log:
  Version bump. Removed old
  
  (Portage version: 2.2.12/cvs/Linux x86_64, signed Manifest commit with key 
0x981CA6FC)



[gentoo-commits] gentoo-x86 commit in sys-apps/util-linux/files: util-linux-2.25-lscpu-pic.patch

2014-08-05 Thread Mike Frysinger (vapier)
vapier  14/08/05 23:04:39

  Added:util-linux-2.25-lscpu-pic.patch
  Log:
  Fix building on hardened systems #518936 by tka.
  
  (Portage version: 2.2.10/cvs/Linux x86_64, signed Manifest commit with key 
D2E96200)

Revision  ChangesPath
1.1  sys-apps/util-linux/files/util-linux-2.25-lscpu-pic.patch

file : 
http://sources.gentoo.org/viewvc.cgi/gentoo-x86/sys-apps/util-linux/files/util-linux-2.25-lscpu-pic.patch?rev=1.1view=markup
plain: 
http://sources.gentoo.org/viewvc.cgi/gentoo-x86/sys-apps/util-linux/files/util-linux-2.25-lscpu-pic.patch?rev=1.1content-type=text/plain

Index: util-linux-2.25-lscpu-pic.patch
===
From f86d649d5f2522c61b791366a96e9f00cd255668 Mon Sep 17 00:00:00 2001
From: Mike Frysinger vap...@gentoo.org
Date: Tue, 5 Aug 2014 18:58:52 -0400
Subject: [PATCH] lscpu: clean up vmware inline asm

This code is not PIC clean which means it fails to build on hardened
32bit x86 systems (i.e. building as PIE).

While here, optimize the existing cpuid logic slightly.

URL: https://bugs.gentoo.org/518936
Signed-off-by: Mike Frysinger vap...@gentoo.org
---
 sys-utils/lscpu.c | 36 ++--
 1 file changed, 26 insertions(+), 10 deletions(-)

diff --git a/sys-utils/lscpu.c b/sys-utils/lscpu.c
index 062dff5..9965eeb 100644
--- a/sys-utils/lscpu.c
+++ b/sys-utils/lscpu.c
@@ -546,10 +546,9 @@ cpuid(unsigned int op, unsigned int *eax, unsigned int 
*ebx,
__asm__(
 #if defined(__PIC__)  defined(__i386__)
/* x86 PIC cannot clobber ebx -- gcc bitches */
-   pushl %%ebx;
+   xchg %%ebx, %%esi;
cpuid;
-   movl %%ebx, %%esi;
-   popl %%ebx;
+   xchg %%esi, %%ebx;
: =S (*ebx),
 #else
cpuid;
@@ -656,12 +655,29 @@ read_hypervisor_powerpc(struct lscpu_desc *desc)
 #define VMWARE_BDOOR_PORT   0x5658
 #define VMWARE_BDOOR_CMD_GETVERSION 10
 
-#define VMWARE_BDOOR(eax, ebx, ecx, edx)  \
-__asm__(inl (%%dx), %%eax : \
-   =a(eax), =c(ecx), =d(edx), =b(ebx) :   \
-   0(VMWARE_BDOOR_MAGIC), 1(VMWARE_BDOOR_CMD_GETVERSION), \
-   2(VMWARE_BDOOR_PORT), 3(0) :   \
-   memory);
+static inline
+void vmware_bdoor(uint32_t *eax, uint32_t *ebx, uint32_t *ecx, uint32_t *edx)
+{
+   __asm__(
+#if defined(__PIC__)  defined(__i386__)
+   /* x86 PIC cannot clobber ebx -- gcc bitches */
+   xchg %%ebx, %%esi;
+   inl (%%dx), %%eax;
+   xchg %%esi, %%ebx;
+   : =S (*ebx),
+#else
+   inl (%%dx), %%eax;
+   : =b (*ebx),
+#endif
+ =a (*eax),
+ =c (*ecx),
+ =d (*edx)
+   : 0 (VMWARE_BDOOR_MAGIC),
+ 1 (VMWARE_BDOOR_CMD_GETVERSION),
+ 2 (VMWARE_BDOOR_PORT),
+ 3 (0)
+   : memory);
+}
 
 static jmp_buf segv_handler_env;
 
@@ -697,7 +713,7 @@ is_vmware_platform(void)
if (sigaction(SIGSEGV, act, oact))
err(EXIT_FAILURE, _(error: can not set signal handler));
 
-   VMWARE_BDOOR(eax, ebx, ecx, edx);
+   vmware_bdoor(eax, ebx, ecx, edx);
 
if (sigaction(SIGSEGV, oact, NULL))
err(EXIT_FAILURE, _(error: can not restore signal handler));
-- 
2.0.0