Author: mcayland Date: Sat Apr 3 10:25:47 2010 New Revision: 732 URL: http://tracker.coreboot.org/trac/openbios/changeset/732
Log: Fix two errors related to argument passing in the client interface:
i) client-call-iface did not set a return value of 0 on success; hence the top stack argument was dropped as part of the status check causing an off-by-one error.
ii) instead of setting pb->nret to be the number of arguments returned, the (random) value being passed in was being used to control the number of arguments being returned.
Signed-off-by: Mark Cave-Ayland mark.cave-ayland@siriusit.co.uk
Modified: trunk/openbios-devel/forth/system/ciface.fs trunk/openbios-devel/libopenbios/client.c
Modified: trunk/openbios-devel/forth/system/ciface.fs ============================================================================== --- trunk/openbios-devel/forth/system/ciface.fs Fri Apr 2 16:25:37 2010 (r731) +++ trunk/openbios-devel/forth/system/ciface.fs Sat Apr 3 10:25:47 2010 (r732) @@ -341,4 +341,5 @@ : client-call-iface ( [args] name len -- [args] -1 | [rets] 0 ) ciface-ph find-method 0= if -1 exit then execute + 0 ;
Modified: trunk/openbios-devel/libopenbios/client.c ============================================================================== --- trunk/openbios-devel/libopenbios/client.c Fri Apr 2 16:25:37 2010 (r731) +++ trunk/openbios-devel/libopenbios/client.c Sat Apr 3 10:25:47 2010 (r732) @@ -302,11 +302,11 @@ return -1; }
- for( i=0; i<pb->nret && dstackcnt > dstacksave ; i++ ) - pb->args[pb->nargs + i] = POP(); + for( pb->nret=0; dstackcnt > dstacksave ; pb->nret++ ) + pb->args[pb->nargs + pb->nret] = POP();
#ifdef DEBUG_CIF - if( i != pb->nret || dstackcnt != dstacksave ) { + if( dstackcnt != dstacksave ) { printk("service %s: argument count error (%d %d)\n", pb->service, i, dstackcnt - dstacksave ); dstackcnt = dstacksave;