Good news Miller. The report so far is that your latest fix is working for arm64 iOS:
https://github.com/libpd/libpd/issues/56#issuecomment-37010342 On Feb 23, 2014, at 2:48 PM, Dan Wilcox <danomat...@gmail.com> wrote: > Could we just make that t_gotfn1 update to chaos? I could provide a patch etc > if required. If that's the only conflict, why not just zap it now? > > On Feb 23, 2014, at 1:58 PM, Miller Puckette <m...@ucsd.edu> wrote: > >> That checks with what I found... looks like the only major change will be >> that chaos will need to quite relying on t_gotfn and either use t_gotfn1 >> or (better) define it sown type for the way it's getting used. Anyhow, the >> code won't work in arm64 without changes in any way I can see. >> >> cheers >> Miller >> >> On Sun, Feb 23, 2014 at 11:13:59AM -0500, Dan Wilcox wrote: >>> Howdy again Miller, >>> >>> I manually applied your last 2 commits to the libpd pd_0.45-4 branch. >>> Hopefully people with the actual hardware will give it a test and chime in. >>> >>> I also put together a little script to check for string patterns in source >>> files and ran it on the externals in the sourceforge svn for the mess* >>> functions and t_got_fn. It doesn't look that bad overall. >>> >>> Here's the output: >>> >>> -------------------------------------------------------------------------------- >>> Checking for " mess1(" ... >>> >>> ./algocomp/m_pd.h: >>> 231:#define mess1(x, s, a) ((*getfn((x), (s)))((x), (a))) >>> >>> ./grill/dynext/src/main.cpp: >>> 952: mess1((t_pd *)canvas,const_cast<t_symbol *>(sym_dsp),NULL); >>> >>> -------------------------------------------------------------------------------- >>> Checking for " mess2(" ... >>> >>> ./algocomp/m_pd.h: >>> 232:#define mess2(x, s, a,b) ((*getfn((x), (s)))((x), (a),(b))) >>> >>> -------------------------------------------------------------------------------- >>> Checking for " mess3(" ... >>> >>> ./algocomp/m_pd.h: >>> 233:#define mess3(x, s, a,b,c) ((*getfn((x), (s)))((x), (a),(b),(c))) >>> >>> -------------------------------------------------------------------------------- >>> Checking for " mess4(" ... >>> >>> ./algocomp/m_pd.h: >>> 234:#define mess4(x, s, a,b,c,d) ((*getfn((x), (s)))((x), (a),(b),(c),(d))) >>> >>> -------------------------------------------------------------------------------- >>> Checking for " mess5(" ... >>> >>> ./algocomp/m_pd.h: >>> 235:#define mess5(x, s, a,b,c,d,e) ((*getfn((x), (s)))((x), >>> (a),(b),(c),(d),(e))) >>> >>> -------------------------------------------------------------------------------- >>> Checking for "t_gotfn" ... >>> >>> ./algocomp/m_pd.h: >>> 204:typedef void (*t_gotfn)(void *x, ...); 226:EXTERN t_gotfn getfn(t_pd >>> *x, t_symbol *s); 227:EXTERN t_gotfn zgetfn(t_pd *x, t_symbol *s); >>> >>> ./chaos/attract1.c: >>> 168: if (lyapunov_full((void *) attract1, (t_gotfn) calc, >>> M_var_count, attract1 -> vars, results) != NULL) { 297: attract1 >>> -> lyap_exp = lyapunov((void *) attract1, (t_gotfn) calc, M_var_count, >>> (double *) attract1 -> vars); >>> >>> ./chaos/base.c: >>> 135: if (lyapunov_full((void *) base, (t_gotfn) calc, M_var_count, >>> base -> vars, results) != NULL) { 212: base -> lyap_exp = >>> lyapunov((void *) base, (t_gotfn) calc, M_var_count, (double *) base -> >>> vars); >>> >>> ./chaos/base3.c: >>> 135: if (lyapunov_full((void *) base3, (t_gotfn) calc, M_var_count, >>> base3 -> vars, results) != NULL) { 212: base3 -> lyap_exp = >>> lyapunov((void *) base3, (t_gotfn) calc, M_var_count, (double *) base3 -> >>> vars); >>> >>> ./chaos/chaos.h: >>> 17:double lyapunov(void *fractal, t_gotfn calc, int var_count, double >>> *vars); 25:double *lyapunov_full(void *fractal, t_gotfn calc, int >>> var_count, double *vars, double *results); >>> >>> ./chaos/dejong.c: >>> 156: if (lyapunov_full((void *) dejong, (t_gotfn) calc, M_var_count, >>> dejong -> vars, results) != NULL) { 259: dejong -> lyap_exp >>> = lyapunov((void *) dejong, (t_gotfn) calc, M_var_count, (double *) dejong >>> -> vars); >>> >>> ./chaos/henon.c: >>> 144: if (lyapunov_full((void *) henon, (t_gotfn) calc, M_var_count, >>> henon -> vars, results) != NULL) { 221: henon -> lyap_exp = >>> lyapunov((void *) henon, (t_gotfn) calc, M_var_count, (double *) henon -> >>> vars); >>> >>> ./chaos/hopalong.c: >>> 150: if (lyapunov_full((void *) hopalong, (t_gotfn) calc, >>> M_var_count, hopalong -> vars, results) != NULL) { 240: hopalong >>> -> lyap_exp = lyapunov((void *) hopalong, (t_gotfn) calc, M_var_count, >>> (double *) hopalong -> vars); >>> >>> ./chaos/ikeda.c: >>> 159: if (lyapunov_full((void *) ikeda, (t_gotfn) calc, M_var_count, >>> ikeda -> vars, results) != NULL) { 262: ikeda -> lyap_exp = >>> lyapunov((void *) ikeda, (t_gotfn) calc, M_var_count, (double *) ikeda -> >>> vars); >>> >>> ./chaos/latoocarfian.c: >>> 156: if (lyapunov_full((void *) latoocarfian, (t_gotfn) calc, >>> M_var_count, latoocarfian -> vars, results) != NULL) { 259: >>> latoocarfian -> lyap_exp = lyapunov((void *) latoocarfian, (t_gotfn) calc, >>> M_var_count, (double *) latoocarfian -> vars); >>> >>> ./chaos/latoomutalpha.c: >>> 156: if (lyapunov_full((void *) latoomutalpha, (t_gotfn) calc, >>> M_var_count, latoomutalpha -> vars, results) != NULL) { 259: >>> latoomutalpha -> lyap_exp = lyapunov((void *) latoomutalpha, (t_gotfn) >>> calc, M_var_count, (double *) latoomutalpha -> vars); >>> >>> ./chaos/latoomutbeta.c: >>> 156: if (lyapunov_full((void *) latoomutbeta, (t_gotfn) calc, >>> M_var_count, latoomutbeta -> vars, results) != NULL) { 259: >>> latoomutbeta -> lyap_exp = lyapunov((void *) latoomutbeta, (t_gotfn) calc, >>> M_var_count, (double *) latoomutbeta -> vars); >>> >>> ./chaos/latoomutgamma.c: >>> 156: if (lyapunov_full((void *) latoomutgamma, (t_gotfn) calc, >>> M_var_count, latoomutgamma -> vars, results) != NULL) { 259: >>> latoomutgamma -> lyap_exp = lyapunov((void *) latoomutgamma, (t_gotfn) >>> calc, M_var_count, (double *) latoomutgamma -> vars); >>> >>> ./chaos/libchaos.c: >>> 22:double lyapunov_eval(void *fractal, t_gotfn calc, int var_count, double >>> *vars, double *test) { 53:double lyapunov(void *fractal, t_gotfn calc, int >>> var_count, double *vars) { 65:double *lyapunov_full(void *fractal, t_gotfn >>> calc, int var_count, double *vars, double *results) { >>> >>> ./chaos/logistic.c: >>> 129: if (lyapunov_full((void *) logistic, (t_gotfn) calc, >>> M_var_count, logistic -> vars, results) != NULL) { 193: logistic >>> -> lyap_exp = lyapunov((void *) logistic, (t_gotfn) calc, M_var_count, >>> (double *) logistic -> vars); >>> >>> ./chaos/lorenz.c: >>> 163: if (lyapunov_full((void *) lorenz, (t_gotfn) calc, M_var_count, >>> lorenz -> vars, results) != NULL) { 266: lorenz -> lyap_exp >>> = lyapunov((void *) lorenz, (t_gotfn) calc, M_var_count, (double *) lorenz >>> -> vars); >>> >>> ./chaos/lotkavolterra.c: >>> 156: if (lyapunov_full((void *) lotkavolterra, (t_gotfn) calc, >>> M_var_count, lotkavolterra -> vars, results) != NULL) { 259: >>> lotkavolterra -> lyap_exp = lyapunov((void *) lotkavolterra, (t_gotfn) >>> calc, M_var_count, (double *) lotkavolterra -> vars); >>> >>> ./chaos/martin.c: >>> 138: if (lyapunov_full((void *) martin, (t_gotfn) calc, M_var_count, >>> martin -> vars, results) != NULL) { 202: martin -> lyap_exp >>> = lyapunov((void *) martin, (t_gotfn) calc, M_var_count, (double *) martin >>> -> vars); >>> >>> ./chaos/mlogistic.c: >>> 129: if (lyapunov_full((void *) mlogistic, (t_gotfn) calc, >>> M_var_count, mlogistic -> vars, results) != NULL) { 193: mlogistic >>> -> lyap_exp = lyapunov((void *) mlogistic, (t_gotfn) calc, M_var_count, >>> (double *) mlogistic -> vars); >>> >>> ./chaos/pickover.c: >>> 163: if (lyapunov_full((void *) pickover, (t_gotfn) calc, >>> M_var_count, pickover -> vars, results) != NULL) { 266: pickover >>> -> lyap_exp = lyapunov((void *) pickover, (t_gotfn) calc, M_var_count, >>> (double *) pickover -> vars); >>> >>> ./chaos/popcorn.c: >>> 138: if (lyapunov_full((void *) popcorn, (t_gotfn) calc, >>> M_var_count, popcorn -> vars, results) != NULL) { 202: popcorn >>> -> lyap_exp = lyapunov((void *) popcorn, (t_gotfn) calc, M_var_count, >>> (double *) popcorn -> vars); >>> >>> ./chaos/quadruptwo.c: >>> 150: if (lyapunov_full((void *) quadruptwo, (t_gotfn) calc, >>> M_var_count, quadruptwo -> vars, results) != NULL) { 240: >>> quadruptwo -> lyap_exp = lyapunov((void *) quadruptwo, (t_gotfn) calc, >>> M_var_count, (double *) quadruptwo -> vars); >>> >>> ./chaos/rossler.c: >>> 163: if (lyapunov_full((void *) rossler, (t_gotfn) calc, >>> M_var_count, rossler -> vars, results) != NULL) { 266: rossler >>> -> lyap_exp = lyapunov((void *) rossler, (t_gotfn) calc, M_var_count, >>> (double *) rossler -> vars); >>> >>> ./chaos/standardmap.c: >>> 138: if (lyapunov_full((void *) standardmap, (t_gotfn) calc, >>> M_var_count, standardmap -> vars, results) != NULL) { 202: >>> standardmap -> lyap_exp = lyapunov((void *) standardmap, (t_gotfn) calc, >>> M_var_count, (double *) standardmap -> vars); >>> >>> ./chaos/strange1.c: >>> 204: if (lyapunov_full((void *) strange1, (t_gotfn) calc, >>> M_var_count, strange1 -> vars, results) != NULL) { 411: strange1 >>> -> lyap_exp = lyapunov((void *) strange1, (t_gotfn) calc, M_var_count, >>> (double *) strange1 -> vars); >>> >>> ./chaos/tent.c: >>> 129: if (lyapunov_full((void *) tent, (t_gotfn) calc, M_var_count, >>> tent -> vars, results) != NULL) { 193: tent -> lyap_exp = >>> lyapunov((void *) tent, (t_gotfn) calc, M_var_count, (double *) tent -> >>> vars); >>> >>> ./chaos/three_d.c: >>> 169: if (lyapunov_full((void *) three_d, (t_gotfn) calc, >>> M_var_count, three_d -> vars, results) != NULL) { 285: three_d >>> -> lyap_exp = lyapunov((void *) three_d, (t_gotfn) calc, M_var_count, >>> (double *) three_d -> vars); >>> >>> ./chaos/threeply.c: >>> 150: if (lyapunov_full((void *) threeply, (t_gotfn) calc, >>> M_var_count, threeply -> vars, results) != NULL) { 240: threeply >>> -> lyap_exp = lyapunov((void *) threeply, (t_gotfn) calc, M_var_count, >>> (double *) threeply -> vars); >>> >>> ./chaos/tinkerbell.c: >>> 156: if (lyapunov_full((void *) tinkerbell, (t_gotfn) calc, >>> M_var_count, tinkerbell -> vars, results) != NULL) { 259: >>> tinkerbell -> lyap_exp = lyapunov((void *) tinkerbell, (t_gotfn) calc, >>> M_var_count, (double *) tinkerbell -> vars); >>> >>> ./miXed/riddle/riddle.c: >>> 873: t_gotfn freefn = zgetfn((t_pd *)rd, gensym("_free")); >>> >>> ./miXed/shared/unstable/fragile.c: >>> 54: if (mp->me_fun == (t_gotfn)thiscall) 102: if (mp->me_name == >>> cname && mp->me_fun != (t_gotfn)thiscall) >>> >>> ./miXed/shared/unstable/pd_imp.h: >>> 17: t_gotfn me_fun; >>> >>> -------------------------------------------------------------------------------- >>> >>> On Feb 22, 2014, at 6:00 AM, pd-dev-requ...@iem.at wrote: >>> >>>> From: Dan Wilcox <danomat...@gmail.com> >>>> Subject: Re: [PD-dev] libpd iOS 64 bit crash with variadic function >>>> pointers >>>> Date: February 21, 2014 at 8:58:25 AM EST >>>> To: Miller Puckette <m...@ucsd.edu> >>>> Cc: pd-dev@iem.at >>>> >>>> >>>> Thanks Miller. Is that to the Sourceforge git or some other place? I'll >>>> pull it down into libpd and get people to test it. >>>> >>>> On Feb 21, 2014, at 6:00 AM, pd-dev-requ...@iem.at wrote: >>>> >>>>> It looks like the whole mess1() (etc) macro system is going to fail on >>>>> 64-bit ARM - I can't see how to patch that. I can fix the local problems >>>>> in >>>>> the Pd vanilla source but I don't know whether it's better to take out the >>>>> "mess()" macros altogether, or to take them out only for ARM64. (The >>>>> former would be source incompatible but object compatible, but I'm >>>>> thinking >>>>> source compatibilty with a non-working feature is maybe actually worse >>>>> than >>>>> simply being source incompatible.) >>>>> >>>>> I've gone ahead and git-pushed an attempted fix (changing mess1() etc, >>>>> potentially source-incompatibly) but am open to other ideas how to fix >>>>> this. >>>> >>>> -------- >>>> Dan Wilcox >>>> @danomatika >>>> danomatika.com >>>> robotcowboy.com >>> >>> -------- >>> Dan Wilcox >>> @danomatika >>> danomatika.com >>> robotcowboy.com >>> >>> >>> >>> >>> > > -------- > Dan Wilcox > @danomatika > danomatika.com > robotcowboy.com > > > > > -------- Dan Wilcox @danomatika danomatika.com robotcowboy.com
_______________________________________________ Pd-dev mailing list Pd-dev@iem.at http://lists.puredata.info/listinfo/pd-dev