diff --git a/ffcall-i386.patch b/ffcall-i386.patch new file mode 100644 index 0000000..9febf0b --- /dev/null +++ b/ffcall-i386.patch @@ -0,0 +1,56 @@ +--- common/asm-i386.hh.orig 2017-02-23 14:48:41.000000000 -0700 ++++ common/asm-i386.hh 2017-02-24 14:00:27.428126212 -0700 +@@ -160,6 +160,7 @@ + #define MEM(base)(R(base)) + #define MEM_DISP(base,displacement)displacement(R(base)) + #define MEM_INDEX(base,index)(R(base),R(index)) ++#define MEM_DISPINDEX(base,displacement,index) displacement(R(base),R(index)) + #define MEM_SHINDEX(base,index,size)(R(base),R(index),size) + #define MEM_DISP_SHINDEX0(displacement,index,size)displacement(,R(index),size) + #define MEM_DISP_SHINDEX(base,displacement,index,size)displacement(R(base),R(index),size) +@@ -167,6 +168,7 @@ + #define INSNCONC(mnemonic,size_suffix)mnemonic##size_suffix + #define INSN1(mnemonic,size_suffix,dst)INSNCONC(mnemonic,size_suffix) dst + #define INSN2(mnemonic,size_suffix,src,dst)INSNCONC(mnemonic,size_suffix) src,dst ++#define INSN3(mnemonic,size_suffix,displacement,src,dst)INSNCONC(mnemonic,size_suffix) displacement,src,dst + #define INSN2MOVX(mnemonic,size_suffix,src,dst)INSNCONC(mnemonic,size_suffix##l) src,dst + #if defined(BSD_SYNTAX) || defined(COHERENT) + #define INSN2SHCL(mnemonic,size_suffix,src,dst)INSNCONC(mnemonic,size_suffix) R(cl),src,dst +@@ -199,6 +201,7 @@ + #define MEM(base) [base] + #define MEM_DISP(base,displacement) [base+(displacement)] + #define MEM_INDEX(base,index) [base+index] ++#define MEM_DISPINDEX(base,displacement,index) [base+(displacement)+index] + #define MEM_SHINDEX(base,index,size) [base+index*size] + #define MEM_DISP_SHINDEX0(displacement,index,size) [(displacement)+index*size] + #define MEM_DISP_SHINDEX(base,displacement,index,size) [base+(displacement)+index*size] +@@ -206,6 +209,7 @@ + #define INSNCONC(mnemonic,suffix)mnemonic##suffix + #define INSN1(mnemonic,size_suffix,dst)mnemonic dst + #define INSN2(mnemonic,size_suffix,src,dst)mnemonic dst,src ++#define INSN3(mnemonic,size_suffix,displacement,src,dst) displacement,dst,src + #define INSN2MOVX(mnemonic,size_suffix,src,dst)INSNCONC(mnemonic,x) dst,src + #define INSN2SHCL(mnemonic,size_suffix,src,dst)mnemonic dst,src,R(cl) + #define REPZ repz +--- common/asm-i386.sh.orig 2017-02-23 14:48:41.000000000 -0700 ++++ common/asm-i386.sh 2017-02-24 14:02:19.403144281 -0700 +@@ -82,15 +82,17 @@ s/[(]%\(e..\)[)]/MEM(\1)/g + s/\([-+0-9A-Z_]\+\)[(],%\(e..\),\([0-9]*\)[)]/MEM_DISP_SHINDEX0(\1,\2,\3)/g + s/\([-+0-9A-Z_]\+\)[(]%\(e..\),%\(e..\),\([0-9]*\)[)]/MEM_DISP_SHINDEX(\2,\1,\3,\4)/g + s/[(]%\(e..\),%\(e..\),\([0-9]*\)[)]/MEM_SHINDEX(\1,\2,\3)/g ++s/\([-+0-9A-Z_]\+\)[(]%\(e..\),%\(e..\)[)]/MEM_DISPINDEX(\2,\1,\3)/g + s/[(]%\(e..\),%\(e..\)[)]/MEM_INDEX(\1,\2)/g + EOF + + cat > $tmpscript05 << \EOF + # ----------- Introduce macro syntax for instructions ++s/\(imul\)\(.\)\([ ]\+\)\(.*\)$/INSN3(\1,\2 ,\4)/ + s/\(push\|pop\|mul\|div\|not\|neg\|inc\|dec\|fld\|fstp\)\(.\)\([ ]\+\)\(.*\)$/INSN1(\1,\2 ,\4)/ +-s/\(call\|jmp\|jc\|jnc\|je\|jne\|jz\|jnz\|ja\|jae\|jb\|jbe\|jl\|jge\|js\|jns\)\([ ]\+\)\(.*\)$/INSN1(\1,_ ,\3)/ ++s/\(call\|jmp\|jc\|jnc\|je\|jne\|jz\|jnz\|ja\|jae\|jb\|jbe\|jl\|jle\|jg\|jge\|js\|jns\)\([ ]\+\)\(.*\)$/INSN1(\1,_ ,\3)/ + s/\(movs\|movz\)\(.\)l\([ ]\+\)\(.*\)$/INSN2MOVX(\1,\2,\4)/ +-s/\(mov\|add\|sub\|adc\|sbb\|xor\|test\|cmp\|rcl\|rcr\|and\|or\|sar\|shr\|shl\|lea\)\(.\)\([ ]\+\)\(.*\)$/INSN2(\1,\2 ,\4)/ ++s/\([[:blank:]]\+\)\(mov\|add\|sub\|adc\|sbb\|xor\|test\|cmp\|rcl\|rcr\|and\|or\|sar\|shr\|shl\|lea\)\(.\)\([ ]\+\)\(.*\)$/\1INSN2(\2,\3 ,\5)/ + s/\(shld\|shrd\)\(.\)\([ ]\+\)shcl\( \+\)\(.*\)$/INSN2SHCL(\1,\2 ,\5)/ + s/rep[ ];/REP/ + s/repz[ ];/REPZ/ diff --git a/ffcall.spec b/ffcall.spec index 472a87b..805ace8 100644 --- a/ffcall.spec +++ b/ffcall.spec @@ -8,7 +8,7 @@ Name: ffcall Version: 1.13 -Release: 1%{?dist} +Release: 2%{?dist} Summary: Libraries for foreign function call interfaces License: GPLv2+ @@ -21,6 +21,8 @@ URL: http://www.gnu.org/software/libffcall/ # cd .. # tar cJf ffcall-%%{version}.tar.xz libfcall Source0: %{name}-%{version}.tar.xz +# Fix multiple errors in the 32-bit x86 assembly syntax conversion +Patch0: %{name}-i386.patch BuildRequires: gcc BuildRequires: gnulib-devel @@ -43,6 +45,7 @@ packages are: %prep %setup -q -n libffcall +%patch0 # Preserve timestamps for fil in $(find . -name Makefile\*); do @@ -98,6 +101,10 @@ CFLAGS="$CFLAGS -fno-strict-aliasing" # Find out what ffcall thinks the arch name is FFARCH=$(sed -n "s/HOST_CPU_C_ABI='\(.*\)'/\1/p" config.log) +%ifarch %{ix86} +make -f Makefile.maint common/asm-i386.h +%endif + # Construct files needed for the build; failure is not necessarily fatal make -C avcall -f Makefile.devel avcall-$FFARCH-linux.s || : make -C avcall -f Makefile.devel avcall-$FFARCH-macro.S || : @@ -144,6 +151,9 @@ done %changelog +* Fri Feb 24 2017 Jerry James - 1.13-2 +- Fix missing symbols in the i386 build + * Fri Feb 24 2017 Jerry James - 1.13-1 - New upstream release