packages: ffcall/ffcall.spec, ffcall/ffcall-sparc64.patch (NEW) - try build...
tommat
tommat at pld-linux.org
Mon Jun 29 23:10:35 CEST 2009
Author: tommat Date: Mon Jun 29 21:10:35 2009 GMT
Module: packages Tag: HEAD
---- Log message:
- try build on sparc64
---- Files affected:
packages/ffcall:
ffcall.spec (1.13 -> 1.14) , ffcall-sparc64.patch (NONE -> 1.1) (NEW)
---- Diffs:
================================================================
Index: packages/ffcall/ffcall.spec
diff -u packages/ffcall/ffcall.spec:1.13 packages/ffcall/ffcall.spec:1.14
--- packages/ffcall/ffcall.spec:1.13 Mon Jun 29 22:28:34 2009
+++ packages/ffcall/ffcall.spec Mon Jun 29 23:10:29 2009
@@ -14,6 +14,8 @@
# Source0-md5: a5190885da8e701a012bb282bfb3c51b
Patch0: %{name}-make-jN.patch
Patch1: %{name}-sparcv9.patch
+# https://savannah.gnu.org/bugs/index.php?22081
+Patch2: %{name}-sparc64.patch
URL: http://savannah.gnu.org/projects/libffcall
BuildRoot: %{tmpdir}/%{name}-%{version}-root-%(id -u -n)
@@ -77,6 +79,7 @@
%setup -q -n %{name}-%{snap}
%patch0 -p1
%patch1 -p1
+%patch2 -p0
%build
%configure \
@@ -126,6 +129,9 @@
All persons listed below can be reached at <cvs_login>@pld-linux.org
$Log$
+Revision 1.14 2009/06/29 21:10:29 tommat
+- try build on sparc64
+
Revision 1.13 2009/06/29 20:28:34 tommat
- sparcv9 patch
================================================================
Index: packages/ffcall/ffcall-sparc64.patch
diff -u /dev/null packages/ffcall/ffcall-sparc64.patch:1.1
--- /dev/null Mon Jun 29 23:10:35 2009
+++ packages/ffcall/ffcall-sparc64.patch Mon Jun 29 23:10:29 2009
@@ -0,0 +1,218 @@
+Index: callback/vacall_r/vacall-sparc64.S
+===================================================================
+RCS file: /sources/libffcall/ffcall/callback/vacall_r/vacall-sparc64.S,v
+retrieving revision 1.3
+diff -u -r1.3 vacall-sparc64.S
+--- callback/vacall_r/vacall-sparc64.S 23 May 2005 10:15:06 -0000 1.3
++++ callback/vacall_r/vacall-sparc64.S 11 Mar 2008 21:52:48 -0000
+@@ -8,6 +8,8 @@
+ .type __vacall_r,$function
+ .proc 020
+ __vacall_r:
++ .register %g2, $scratch
++ .register %g3, $scratch
+ !$PROLOGUE$ 0
+ save %sp, -448, %sp
+ !$PROLOGUE$ 1
+Index: vacall/vacall-sparc64.S
+===================================================================
+RCS file: /sources/libffcall/ffcall/vacall/vacall-sparc64.S,v
+retrieving revision 1.4
+diff -u -r1.4 vacall-sparc64.S
+--- vacall/vacall-sparc64.S 23 May 2005 10:15:06 -0000 1.4
++++ vacall/vacall-sparc64.S 11 Mar 2008 21:52:50 -0000
+@@ -8,6 +8,8 @@
+ .type __vacall,$function
+ .proc 020
+ __vacall:
++ .register %g2, $scratch
++ .register %g3, $scratch
+ !$PROLOGUE$ 0
+ save %sp, -448, %sp
+ !$PROLOGUE$ 1
+Index: avcall/avcall.h.in
+===================================================================
+RCS file: /sources/libffcall/ffcall/avcall/avcall.h.in,v
+retrieving revision 1.25
+diff -u -r1.25 avcall.h.in
+--- avcall/avcall.h.in 2 Nov 2007 15:24:53 -0000 1.25
++++ avcall/avcall.h.in 11 Mar 2008 21:52:44 -0000
+@@ -345,8 +345,7 @@
+ #if defined(__sparc64__)
+ /* store the floating-point arguments in an extra array */
+ int anum; /* redundant: (LIST).aptr = &(LIST).args[(LIST).anum] */
+- unsigned int farg_mask; /* bitmask of those entries in farg[] which have a value */
+- unsigned int darg_mask; /* bitmask of those entries in args[] which have a double value */
++ unsigned int darg_mask; /* bitmask of those entries in args[] which have a float or double value */
+ #endif
+ #if defined(__ia64__) || defined(__x86_64__)
+ /* store the floating-point arguments in an extra array */
+@@ -430,7 +429,6 @@
+ #if defined(__sparc64__)
+ #define __av_start1(LIST) \
+ (LIST).anum = 0, \
+- (LIST).farg_mask = 0, \
+ (LIST).darg_mask = 0, \
+ (LIST).aptr = &(LIST).args[0], \
+ (LIST).eptr = &(LIST).args[__AV_ALIST_WORDS],
+@@ -870,8 +868,8 @@
+ */
+ #define av_float(LIST,VAL) \
+ ((LIST).aptr >= __av_eptr(LIST) \
+- ? -1 : (((LIST).anum < 16 && ((LIST).farg_mask |= (1 << (LIST).anum))), \
+- (*(float*)(LIST).aptr = (float)(VAL)), \
++ ? -1 : (((LIST).anum < 16 && ((LIST).darg_mask |= (1 << (LIST).anum))), \
++ (((float*)(LIST).aptr)[1] = (float)(VAL)), \
+ (LIST).anum++, \
+ (LIST).aptr++, \
+ 0))
+@@ -1300,10 +1298,8 @@
+ ? -1 : (ASSIGN(TYPE,TYPE_SIZE,TYPE_ALIGN,(void*)((__avword)(LIST).aptr-(TYPE_SIZE)),VAL),\
+ (LIST).aptr = (__avword*)(((__avword)(LIST).aptr+sizeof(__avword)-1) & -(long)sizeof(__avword)),\
+ ((LIST).anum < 16 \
+- && ((LIST).farg_mask |= (-1 << (LIST).anum), \
+- (LIST).darg_mask |= (-1 << (LIST).anum))), \
++ && ((LIST).darg_mask |= (-1 << (LIST).anum))), \
+ (LIST).anum += (((((TYPE_SIZE)+(TYPE_ALIGN)-1) & -(long)(TYPE_ALIGN)) + sizeof(__avword)-1) & -(long)sizeof(__avword))/sizeof(__avword),\
+- (LIST).farg_mask &= (1 << ((LIST).anum < 16 ? (LIST).anum : 16)) - 1, \
+ (LIST).darg_mask &= (1 << ((LIST).anum < 16 ? (LIST).anum : 16)) - 1, \
+ 0)))
+ #endif
+Index: avcall/avcall-sparc64.c
+===================================================================
+RCS file: /sources/libffcall/ffcall/avcall/avcall-sparc64.c,v
+retrieving revision 1.3
+diff -u -r1.3 avcall-sparc64.c
+--- avcall/avcall-sparc64.c 23 May 2005 10:17:21 -0000 1.3
++++ avcall/avcall-sparc64.c 11 Mar 2008 21:52:42 -0000
+@@ -86,7 +86,6 @@
+ #define RETURN(TYPE,VAL) (*(TYPE*)l->raddr = (TYPE)(VAL))
+ #define OFFSETOF(struct,member) ((int)&(((struct*)0)->member))
+
+-register void* callee __asm__("%g2"); /* any global or local register */
+ register __avword o0 __asm__("%o0");
+ register __avword o1 __asm__("%o1");
+ register __avword o2 __asm__("%o2");
+@@ -102,83 +101,58 @@
+ register double dret __asm__("%f0"); /* %f0,%f1 */
+
+ __avword trampoline[6]; /* room for a trampoline */
+- __avword space[__AV_ALIST_WORDS]; /* space for callee's stack frame */
+- __avword *argframe = sp + 17; /* stack offset for argument list */
+ int arglen = l->aptr - l->args;
+ __avword i;
+
+- if (l->farg_mask) {
+- /* push leading float args */
+- if (l->farg_mask & (1<<0))
+- __asm__("ld %1(%0),%%f1" : : "p" (l), "i" OFFSETOF(av_alist,args[0]));
+- if (l->farg_mask & (1<<1))
+- __asm__("ld %1(%0),%%f3" : : "p" (l), "i" OFFSETOF(av_alist,args[1]));
+- if (l->farg_mask & (1<<2))
+- __asm__("ld %1(%0),%%f5" : : "p" (l), "i" OFFSETOF(av_alist,args[2]));
+- if (l->farg_mask & (1<<3))
+- __asm__("ld %1(%0),%%f7" : : "p" (l), "i" OFFSETOF(av_alist,args[3]));
+- if (l->farg_mask & (1<<4))
+- __asm__("ld %1(%0),%%f9" : : "p" (l), "i" OFFSETOF(av_alist,args[4]));
+- if (l->farg_mask & (1<<5))
+- __asm__("ld %1(%0),%%f11" : : "p" (l), "i" OFFSETOF(av_alist,args[5]));
+- if (l->farg_mask & (1<<6))
+- __asm__("ld %1(%0),%%f13" : : "p" (l), "i" OFFSETOF(av_alist,args[6]));
+- if (l->farg_mask & (1<<7))
+- __asm__("ld %1(%0),%%f15" : : "p" (l), "i" OFFSETOF(av_alist,args[7]));
+- if (l->farg_mask & (1<<8))
+- __asm__("ld %1(%0),%%f17" : : "p" (l), "i" OFFSETOF(av_alist,args[8]));
+- if (l->farg_mask & (1<<9))
+- __asm__("ld %1(%0),%%f19" : : "p" (l), "i" OFFSETOF(av_alist,args[9]));
+- if (l->farg_mask & (1<<10))
+- __asm__("ld %1(%0),%%f21" : : "p" (l), "i" OFFSETOF(av_alist,args[10]));
+- if (l->farg_mask & (1<<11))
+- __asm__("ld %1(%0),%%f23" : : "p" (l), "i" OFFSETOF(av_alist,args[11]));
+- if (l->farg_mask & (1<<12))
+- __asm__("ld %1(%0),%%f25" : : "p" (l), "i" OFFSETOF(av_alist,args[12]));
+- if (l->farg_mask & (1<<13))
+- __asm__("ld %1(%0),%%f27" : : "p" (l), "i" OFFSETOF(av_alist,args[13]));
+- if (l->farg_mask & (1<<14))
+- __asm__("ld %1(%0),%%f29" : : "p" (l), "i" OFFSETOF(av_alist,args[14]));
+- if (l->farg_mask & (1<<15))
+- __asm__("ld %1(%0),%%f31" : : "p" (l), "i" OFFSETOF(av_alist,args[15]));
+- }
+ if (l->darg_mask) {
+- /* push leading double args */
++ /* push leading float/double args */
+ if (l->darg_mask & (1<<0))
+- __asm__("ldd %1(%0),%%f0" : : "p" (l), "i" OFFSETOF(av_alist,args[0]));
++ __asm__("ldd [%0+%1],%%f0" : : "p" (l), "i" OFFSETOF(av_alist,args[0]));
+ if (l->darg_mask & (1<<1))
+- __asm__("ldd %1(%0),%%f2" : : "p" (l), "i" OFFSETOF(av_alist,args[1]));
++ __asm__("ldd [%0+%1],%%f2" : : "p" (l), "i" OFFSETOF(av_alist,args[1]));
+ if (l->darg_mask & (1<<2))
+- __asm__("ldd %1(%0),%%f4" : : "p" (l), "i" OFFSETOF(av_alist,args[2]));
++ __asm__("ldd [%0+%1],%%f4" : : "p" (l), "i" OFFSETOF(av_alist,args[2]));
+ if (l->darg_mask & (1<<3))
+- __asm__("ldd %1(%0),%%f6" : : "p" (l), "i" OFFSETOF(av_alist,args[3]));
++ __asm__("ldd [%0+%1],%%f6" : : "p" (l), "i" OFFSETOF(av_alist,args[3]));
+ if (l->darg_mask & (1<<4))
+- __asm__("ldd %1(%0),%%f8" : : "p" (l), "i" OFFSETOF(av_alist,args[4]));
++ __asm__("ldd [%0+%1],%%f8" : : "p" (l), "i" OFFSETOF(av_alist,args[4]));
+ if (l->darg_mask & (1<<5))
+- __asm__("ldd %1(%0),%%f10" : : "p" (l), "i" OFFSETOF(av_alist,args[5]));
++ __asm__("ldd [%0+%1],%%f10" : : "p" (l), "i" OFFSETOF(av_alist,args[5]));
+ if (l->darg_mask & (1<<6))
+- __asm__("ldd %1(%0),%%f12" : : "p" (l), "i" OFFSETOF(av_alist,args[6]));
++ __asm__("ldd [%0+%1],%%f12" : : "p" (l), "i" OFFSETOF(av_alist,args[6]));
+ if (l->darg_mask & (1<<7))
+- __asm__("ldd %1(%0),%%f14" : : "p" (l), "i" OFFSETOF(av_alist,args[7]));
++ __asm__("ldd [%0+%1],%%f14" : : "p" (l), "i" OFFSETOF(av_alist,args[7]));
+ if (l->darg_mask & (1<<8))
+- __asm__("ldd %1(%0),%%f16" : : "p" (l), "i" OFFSETOF(av_alist,args[8]));
++ __asm__("ldd [%0+%1],%%f16" : : "p" (l), "i" OFFSETOF(av_alist,args[8]));
+ if (l->darg_mask & (1<<9))
+- __asm__("ldd %1(%0),%%f18" : : "p" (l), "i" OFFSETOF(av_alist,args[9]));
++ __asm__("ldd [%0+%1],%%f18" : : "p" (l), "i" OFFSETOF(av_alist,args[9]));
+ if (l->darg_mask & (1<<10))
+- __asm__("ldd %1(%0),%%f20" : : "p" (l), "i" OFFSETOF(av_alist,args[10]));
++ __asm__("ldd [%0+%1],%%f20" : : "p" (l), "i" OFFSETOF(av_alist,args[10]));
+ if (l->darg_mask & (1<<11))
+- __asm__("ldd %1(%0),%%f22" : : "p" (l), "i" OFFSETOF(av_alist,args[11]));
++ __asm__("ldd [%0+%1],%%f22" : : "p" (l), "i" OFFSETOF(av_alist,args[11]));
+ if (l->darg_mask & (1<<12))
+- __asm__("ldd %1(%0),%%f24" : : "p" (l), "i" OFFSETOF(av_alist,args[12]));
++ __asm__("ldd [%0+%1],%%f24" : : "p" (l), "i" OFFSETOF(av_alist,args[12]));
+ if (l->darg_mask & (1<<13))
+- __asm__("ldd %1(%0),%%f26" : : "p" (l), "i" OFFSETOF(av_alist,args[13]));
++ __asm__("ldd [%0+%1],%%f26" : : "p" (l), "i" OFFSETOF(av_alist,args[13]));
+ if (l->darg_mask & (1<<14))
+- __asm__("ldd %1(%0),%%f28" : : "p" (l), "i" OFFSETOF(av_alist,args[14]));
++ __asm__("ldd [%0+%1],%%f28" : : "p" (l), "i" OFFSETOF(av_alist,args[14]));
+ if (l->darg_mask & (1<<15))
+- __asm__("ldd %1(%0),%%f30" : : "p" (l), "i" OFFSETOF(av_alist,args[15]));
++ __asm__("ldd [%0+%1],%%f30" : : "p" (l), "i" OFFSETOF(av_alist,args[15]));
+ }
+
+- {
++ if (arglen > 6) {
++ /* alloca space is separated from the extra outgoing args area by
++ * the area for compiler temps (addressable with postive offsets from sp)
++ * but they shouldn't be needed for this function, so, effectively,
++ * space returned by alloca is safe to use as the area for extra args.
++ */
++ void *extra_args_area = __builtin_alloca(sizeof(__avword) * (arglen - 6));
++ __avword *argframe = (__avword *)extra_args_area - 6;
++#if 0
++ /* "by construction" */
++ assert(argframe == (void *)((unsigned long)(sp + 16)+2047));
++#endif
++
+ int i;
+ for (i = 6; i < arglen; i++) /* push excess function args */
+ argframe[i] = l->args[i];
+@@ -188,7 +162,7 @@
+ i = ({ register __avword iret __asm__ ("%o0");
+ iret = (*l->func)(l->args[0], l->args[1], l->args[2],
+ l->args[3], l->args[4], l->args[5]);
+- asm ("nop"); /* struct returning functions skip this instruction */
++ asm __volatile__("nop"); /* struct returning functions skip this instruction */
+ iret;
+ });
+
================================================================
---- CVS-web:
http://cvs.pld-linux.org/cgi-bin/cvsweb.cgi/packages/ffcall/ffcall.spec?r1=1.13&r2=1.14&f=u
More information about the pld-cvs-commit
mailing list