On 1/13/06, Sven Moritz Hallberg <[EMAIL PROTECTED]> wrote:
> Hello 9fans,
>
> I've tried to get drawterm to work on my Linux/PowerPC machine. I
> _think_ I have "dt2k". I got it from this CVS repo:
>
> :pserver:[EMAIL PROTECTED]/cvs drawterm
>
> (BTW, it was kind of hard to confirm that this -- appearently -- is in
> fact dt2k...)
>
> Unfortunately it doesn't work. The fmtprint functions seem to do stuff
> with va_lists that my system doesn't like. Specifically, fmtprint and
> many other functions try to assign va_list's to fields in a Fmt
> structure. This is simply rejected by my GCC (I tried versions 3.3, 3.4,
> and 4.0.2):
>
> gcc -Wall -Wno-missing-braces -ggdb -I.. -I../include -I../kern -c
> -I/usr/X11R6/include -D_THREAD_SAFE -pthread -O2 fmtprint.c
> fmtprint.c: In function 'fmtprint':
> fmtprint.c:20: error: incompatible types in assignment
>
> I tried to replace all the offending assignments with calls to memcpy:
>
> /* va = f->args; */
> memcpy(&va, &(f->args), sizeof(va_list));
>
> This results in successfull compilation, but immediately crashes drawterm:
>
> $ gdb ./drawterm
> [..snip..]
> (gdb) runStarting program: /home/pesco/Halde/drawterm/drawterm
> [Thread debugging using libthread_db enabled]
> [New Thread 805479776 (LWP 12368)]
>
> Program received signal SIGSEGV, Segmentation fault.
> [Switching to Thread 805479776 (LWP 12368)]
> 0x10048500 in _runefmt (f=0x7fb7f3f8) at dofmt.c:234
> 234 x[0] = va_arg(f->args, int);
>
> I've read in
>
> http://www.cs.bell-labs.com/wiki/plan9/THM_2005-06-23_Summary/
>
> that "[Ericvh] has [dt2k] working in ppc-linux". So:
>
>
> Eric, can I have your code?
>
> When will this find its way into the drawterm CVS?
>
> How can I help?
>
I'll dig up what I have and see about reving into to the most recent
versions of drawterm and then sending a patch here.
Essentially you were on the right path, but the wrong solution.
man va_copy and look at the plan9ports fmtprint code for how to do
this right on ppc/linux.
I'll try to send something out today.
-eric