# New Ticket Created by "Sean O'Rourke" # Please include the string: [perl #19090] # in the subject line of all future correspondence about this issue. # <URL: http://rt.perl.org/rt2/Ticket/Display.html?id=19090 >
The following defines a macro VA_TO_VAPTR(x) to convert va_list arguments to pointers in a platform-independent way. Works for me on Linux-ppc. Could someone with another CPU give it a spin and/or make sure I hid the macro in the right part of {config/,lib/Parrot/Configure,...}? /s -- attachment 1 ------------------------------------------------------ url: http://rt.perl.org/rt2/attach/45059/35500/f05e2e/va.patch
Index: misc.c =================================================================== RCS file: /cvs/public/parrot/misc.c,v retrieving revision 1.30 diff -p -u -w -r1.30 misc.c --- misc.c 10 Dec 2002 14:24:12 -0000 1.30 +++ misc.c 12 Dec 2002 23:51:53 -0000 @@ -35,7 +35,7 @@ STRING * Parrot_vsprintf_s(struct Parrot_Interp *interpreter, STRING *pat, va_list args) { SPRINTF_OBJ obj = va_core; - obj.data = &args; + obj.data = VA_TO_VAPTR(args); return Parrot_sprintf_format(interpreter, pat, &obj); } Index: config/gen/feature_h/feature_h.in =================================================================== RCS file: /cvs/public/parrot/config/gen/feature_h/feature_h.in,v retrieving revision 1.1 diff -p -u -w -r1.1 feature_h.in --- config/gen/feature_h/feature_h.in 12 Dec 2002 11:20:44 -0000 1.1 +++ config/gen/feature_h/feature_h.in 12 Dec 2002 23:51:55 -0000 @@ -15,6 +15,15 @@ if (${jit_i386} && ${jit_i386} eq 'fcomi print OUT "#endif\n"; } +if (${jitcpuarch} eq 'ppc') { + print OUT <<'END'; +#define VA_TO_VAPTR(x) (x) +END +} else { + print OUT <<'END'; +#define VA_TO_VAPTR(x) (&(x)) +END +} #endif guard print OUT "\n\n#endif\n"