From 12ed8077286caa34507d6b59e6908939b01cfea2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=BCrgen=20Buchm=C3=BCller?= Date: Fri, 28 Aug 2015 11:21:03 +0200 Subject: [PATCH] qmc2: change to use a patch for -fPIC --- srcpkgs/qmc2/files/CpuArch.c | 182 ---------------------------- srcpkgs/qmc2/patches/i686_pic.patch | 21 ++++ srcpkgs/qmc2/template | 4 +- 3 files changed, 22 insertions(+), 185 deletions(-) delete mode 100644 srcpkgs/qmc2/files/CpuArch.c create mode 100644 srcpkgs/qmc2/patches/i686_pic.patch diff --git a/srcpkgs/qmc2/files/CpuArch.c b/srcpkgs/qmc2/files/CpuArch.c deleted file mode 100644 index 4ae9c2a5bc..0000000000 --- a/srcpkgs/qmc2/files/CpuArch.c +++ /dev/null @@ -1,182 +0,0 @@ -/* CpuArch.c -- CPU specific code -2012-05-29: Igor Pavlov : Public domain -2015-06-21: pullmoll: Adapted to old 7z types for qmc2 -*/ - -#include "CpuArch.h" - -#ifdef MY_CPU_X86_OR_AMD64 - -#if (defined(_MSC_VER) && !defined(MY_CPU_AMD64)) || defined(__GNUC__) -#define USE_ASM -#endif - -#if !defined(USE_ASM) && _MSC_VER >= 1500 -#include -#endif - -#if defined(USE_ASM) && !defined(MY_CPU_AMD64) -static UInt32_7z CheckFlag(UInt32_7z flag) -{ - #ifdef _MSC_VER - __asm pushfd; - __asm pop EAX; - __asm mov EDX, EAX; - __asm xor EAX, flag; - __asm push EAX; - __asm popfd; - __asm pushfd; - __asm pop EAX; - __asm xor EAX, EDX; - __asm push EDX; - __asm popfd; - __asm and flag, EAX; - #else - __asm__ __volatile__ ( - "pushf\n\t" - "pop %%EAX\n\t" - "movl %%EAX,%%EDX\n\t" - "xorl %0,%%EAX\n\t" - "push %%EAX\n\t" - "popf\n\t" - "pushf\n\t" - "pop %%EAX\n\t" - "xorl %%EDX,%%EAX\n\t" - "push %%EDX\n\t" - "popf\n\t" - "andl %%EAX, %0\n\t": - "=c" (flag) : "c" (flag)); - #endif - return flag; -} -#define CHECK_CPUID_IS_SUPPORTED if (CheckFlag(1 << 18) == 0 || CheckFlag(1 << 21) == 0) return False; -#else -#define CHECK_CPUID_IS_SUPPORTED -#endif - -static void MyCPUID(UInt32_7z function, UInt32_7z *a, UInt32_7z *b, UInt32_7z *c, UInt32_7z *d) -{ - #ifdef USE_ASM - - #ifdef _MSC_VER - - UInt32_7z a2, b2, c2, d2; - __asm xor EBX, EBX; - __asm xor ECX, ECX; - __asm xor EDX, EDX; - __asm mov EAX, function; - __asm cpuid; - __asm mov a2, EAX; - __asm mov b2, EBX; - __asm mov c2, ECX; - __asm mov d2, EDX; - - *a = a2; - *b = b2; - *c = c2; - *d = d2; - - #else - - __asm__ __volatile__ ( - #if defined(MY_CPU_X86) && defined(__PIC__) - "mov %%ebx, %%edi;" - "cpuid;" - "xchgl %%ebx, %%edi;" - : "=a" (*a) , - "=D" (*b) , - #else - "cpuid" - : "=a" (*a) , - "=b" (*b) , - #endif - "=c" (*c) , - "=d" (*d) - : "0" (function)) ; - - #endif - - #else - - int CPUInfo[4]; - __cpuid(CPUInfo, function); - *a = CPUInfo[0]; - *b = CPUInfo[1]; - *c = CPUInfo[2]; - *d = CPUInfo[3]; - - #endif -} - -Bool7z x86cpuid_CheckAndRead(Cx86cpuid *p) -{ - CHECK_CPUID_IS_SUPPORTED - MyCPUID(0, &p->maxFunc, &p->vendor[0], &p->vendor[2], &p->vendor[1]); - MyCPUID(1, &p->ver, &p->b, &p->c, &p->d); - return True; -} - -static UInt32_7z kVendors[][3] = -{ - { 0x756E6547, 0x49656E69, 0x6C65746E}, - { 0x68747541, 0x69746E65, 0x444D4163}, - { 0x746E6543, 0x48727561, 0x736C7561} -}; - -int x86cpuid_GetFirm(const Cx86cpuid *p) -{ - unsigned i; - for (i = 0; i < sizeof(kVendors) / sizeof(kVendors[i]); i++) - { - const UInt32_7z *v = kVendors[i]; - if (v[0] == p->vendor[0] && - v[1] == p->vendor[1] && - v[2] == p->vendor[2]) - return (int)i; - } - return -1; -} - -Bool7z CPU_Is_InOrder() -{ - Cx86cpuid p; - int firm; - UInt32_7z family, model; - if (!x86cpuid_CheckAndRead(&p)) - return True; - family = x86cpuid_GetFamily(&p); - model = x86cpuid_GetModel(&p); - firm = x86cpuid_GetFirm(&p); - switch (firm) - { - case CPU_FIRM_INTEL: return (family < 6 || (family == 6 && model == 0x100C)); - case CPU_FIRM_AMD: return (family < 5 || (family == 5 && (model < 6 || model == 0xA))); - case CPU_FIRM_VIA: return (family < 6 || (family == 6 && model < 0xF)); - } - return True; -} - -#if !defined(MY_CPU_AMD64) && defined(_WIN32) -static Bool7z CPU_Sys_Is_SSE_Supported() -{ - OSVERSIONINFO vi; - vi.dwOSVersionInfoSize = sizeof(vi); - if (!GetVersionEx(&vi)) - return False; - return (vi.dwMajorVersion >= 5); -} -#define CHECK_SYS_SSE_SUPPORT if (!CPU_Sys_Is_SSE_Supported()) return False; -#else -#define CHECK_SYS_SSE_SUPPORT -#endif - -Bool7z CPU_Is_Aes_Supported() -{ - Cx86cpuid p; - CHECK_SYS_SSE_SUPPORT - if (!x86cpuid_CheckAndRead(&p)) - return False; - return (p.c >> 25) & 1; -} - -#endif diff --git a/srcpkgs/qmc2/patches/i686_pic.patch b/srcpkgs/qmc2/patches/i686_pic.patch new file mode 100644 index 0000000000..d1b331e362 --- /dev/null +++ b/srcpkgs/qmc2/patches/i686_pic.patch @@ -0,0 +1,21 @@ +diff -ru qmc2.orig/lzma/CpuArch.c qmc2/lzma/CpuArch.c +--- lzma/CpuArch.c 2014-04-26 15:00:09.408414619 +0200 ++++ lzma/CpuArch.c 2015-08-28 10:22:31.421881641 +0200 +@@ -75,9 +75,17 @@ + #else + + __asm__ __volatile__ ( ++ #if defined(MY_CPU_X86) && defined(__PIC__) ++ "mov %%ebx, %%edi;" ++ "cpuid;" ++ "xchgl %%ebx, %%edi;" ++ : "=a" (*a) , ++ "=D" (*b) , ++ #else + "cpuid" + : "=a" (*a) , + "=b" (*b) , ++ #endif + "=c" (*c) , + "=d" (*d) + : "0" (function)) ; diff --git a/srcpkgs/qmc2/template b/srcpkgs/qmc2/template index 09eec59daf..9e60500bc9 100644 --- a/srcpkgs/qmc2/template +++ b/srcpkgs/qmc2/template @@ -1,7 +1,7 @@ # Template file for 'qmc2' pkgname=qmc2 version=0.55 -revision=1 +revision=2 wrksrc=${pkgname} build_style=gnu-makefile make_build_args="PREFIX=/usr DATADIR=/usr/share MAN_DIR=/usr/share/man TARGET=qmc2-mame" @@ -23,8 +23,6 @@ pre_build() { sed -e "s;sdl-config;sdl2-config;g" -i ${wrksrc}/scripts/sdl-version.sh # Replace obsolete -sdlmame suffix sed -e "s;-sdlmame;-mame;g" -i ${wrksrc}/Makefile - # Replace lzma/CpuArch.c with patched version (http://sourceforge.net/p/sevenzip/bugs/1338/) - cp -av ${FILESDIR}/CpuArch.c ${wrksrc}/lzma } do_build() { # Print configuration info