[OpenBIOS] tokenizer bug

Mark Wenning wenning at us.ibm.com
Wed Mar 9 14:07:12 CET 2005


Greetings,

Our "OpenBIOS guy" thinks he found a bug in the tokenizer. 
Can you comment?
What's the procedure for submitting fixes?

Looks like my previous post attempt was screwed up by Lotus notes, 
trying again...

-----
Mark Wenning     wenning at us.ibm.com     1-512-838-6263
Global FirmWare:  Networking and I/O, FC lackey
-----
Experience is what you get when you were expecting something else.     - 
Anon
-----
----- Forwarded by Mark W Wenning/Austin/IBM on 03/07/2005 10:02 AM -----
David L Paktor/Almaden/IBM
03/04/2005 05:33 PM   
To
wenning at us.ibm.com
cc

Subject
Re: Found a serious bug in OpenBios Tokenizer
   

   



Hi, Mark.

As we spoke, I'm giving you some additional detail to describe the bug I 
found.

Here's a recap of what I wrote before:

It has to do with  fload ;  When your source  fload s a file, that file 
is supposed to be a continuation of your source-stream.

New definitions, as they are processed in the Tokenizer, are supposed to 
get successive FCode tokens assigned to them, starting at 0x0800.

But when the OpenBios Tokenizer  fload s a new file, it resets the FCode 
token-number, and starts assigning tokens from  0x0800 again.  So if you 
have:

definition A
definition B
definition C
definition D

\   and then

fload File1                       \  which has:

definition E
definition F
definition G
definition H

and then you have something that intends to invoke  A B C  or D   you 
will instead get  E F G  or  H , respectively....


Here's the additional material:


The source of the problem can be traced to the routines:  init_stream   
and  init_output   in the file stream.c  .  They are both called at the 
beginning of tokenization, one to prepare the source from which input 
will be scanned, and the other to prepare the area to which output will 
be delivered (broadly speaking).  When the  fload  directive is 
encountered, the input source is suspended and a new one is activated; 
when the new one is exhausted, the previous one is re-activated at the 
point from which it was suspended.  So far so good.  The  init_stream  
routine is called to effectuate that activation.  Unfortunately, the 
line that initializes the FCode token-numbers being assigning to new 
definitions -- the variable called nextfcode -- occurs inside the  
init_stream  routine.

 I believe that moving that line to the  init_output  routine is 
sufficient to fix this bug.



More information about the OpenBIOS mailing list