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, [email protected] wrote:
> From: Dan Wilcox <[email protected]>
> 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 <[email protected]>
> Cc: [email protected]
>
>
> 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, [email protected] 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
_______________________________________________
Pd-dev mailing list
[email protected]
http://lists.puredata.info/listinfo/pd-dev