diff options
author | André Fabian Silva Delgado <andre@pc-01.localdomain> | 2012-02-21 11:39:38 -0200 |
---|---|---|
committer | André Fabian Silva Delgado <andre@pc-01.localdomain> | 2012-02-21 11:39:38 -0200 |
commit | 415e6b0a686989d0000a82ba8404d4ab9cd1e6b7 (patch) | |
tree | 4c78f30103549386aa7f645c7f2623c181ce0572 /kernels/xen/24345.patch | |
parent | 8446919c3950deb73699302e1c33cdc05b7d4add (diff) | |
download | abslibre-415e6b0a686989d0000a82ba8404d4ab9cd1e6b7.tar.gz abslibre-415e6b0a686989d0000a82ba8404d4ab9cd1e6b7.tar.bz2 abslibre-415e6b0a686989d0000a82ba8404d4ab9cd1e6b7.zip |
kernels/xe-guest-utilities
Diffstat (limited to 'kernels/xen/24345.patch')
-rw-r--r-- | kernels/xen/24345.patch | 31 |
1 files changed, 31 insertions, 0 deletions
diff --git a/kernels/xen/24345.patch b/kernels/xen/24345.patch new file mode 100644 index 000000000..e75a1b38c --- /dev/null +++ b/kernels/xen/24345.patch @@ -0,0 +1,31 @@ +--- a/tools/misc/xen-detect.c 2011-10-20 15:05:43.000000000 -0200 ++++ b/tools/misc/xen-detect.c 2012-02-15 00:05:55.524455578 -0200 +@@ -35,18 +35,21 @@ + + static void cpuid(uint32_t idx, uint32_t *regs, int pv_context) + { +- asm volatile ( + #ifdef __i386__ +-#define R(x) "%%e"#x"x" +-#else +-#define R(x) "%%r"#x"x" +-#endif +- "push "R(a)"; push "R(b)"; push "R(c)"; push "R(d)"\n\t" ++/* Use the stack to avoid reg constraint failures with some gcc flags */ ++ asm volatile ( ++ "push %%eax; push %%ebx; push %%ecx; push %%edx\n\t" + "test %1,%1 ; jz 1f ; ud2a ; .ascii \"xen\" ; 1: cpuid\n\t" + "mov %%eax,(%2); mov %%ebx,4(%2)\n\t" + "mov %%ecx,8(%2); mov %%edx,12(%2)\n\t" +- "pop "R(d)"; pop "R(c)"; pop "R(b)"; pop "R(a)"\n\t" ++ "pop %%edx; pop %%ecx; pop %%ebx; pop %%eax\n\t" + : : "a" (idx), "c" (pv_context), "S" (regs) : "memory" ); ++#else ++ asm volatile ( ++ "test %5,%5 ; jz 1f ; ud2a ; .ascii \"xen\" ; 1: cpuid\n\t" ++ : "=a" (regs[0]), "=b" (regs[1]), "=c" (regs[2]), "=d" (regs[3]) ++ : "0" (idx), "1" (pv_context), "2" (0) ); ++#endif + } + + static int check_for_xen(int pv_context) |