Blue Swirl wrote:
Hmmmm that's strange. Perhaps since the CIF argument array is passed in by the client then we do need to respect pb->nrets since the client has allocated the appropriate memory? What happens if you simply add the missing "0" from r732 in forth/system/ciface.fs to r731 and leave libopenbios/client.c as it was?
I took the other approach and this seems to work:
diff --git a/forth/system/ciface.fs b/forth/system/ciface.fs index aada422..b2035bc 100644 --- a/forth/system/ciface.fs +++ b/forth/system/ciface.fs @@ -341,5 +341,4 @@ device-end : client-call-iface ( [args] name len -- [args] -1 | [rets] 0 ) ciface-ph find-method 0= if -1 exit then execute
- 0
;
AFAICT that really should not work because line 297 in libopenbios/client.c will drop the top-most stack argument for any successful call.
I wonder if it's calling the special code for "call-method" and "interpret" instead? Are you able to send me a DEBUG_CIF output for your Linux kernel boot against r732 or point me towards how you are booting the kernel so I can try myself?
Many thanks,
Mark.
-- Mark Cave-Ayland - Senior Technical Architect PostgreSQL - PostGIS Sirius Corporation plc - control through freedom http://www.siriusit.co.uk t: +44 870 608 0063
Sirius Labs: http://www.siriusit.co.uk/labs