[LLVMdev] ExecutionEngine/Interpreter/ExternalFunctions.cpp

Reid Spencer reid at x10sys.com
Tue May 11 20:34:01 PDT 2004


And, one more weird thing in this function. The FILESize static variable
is never initialized so its likely initial value is 0 due to zero fill
on many MMUs. The value is never written and used as a divisor. Why
hasn't this function caused an arithmetic violation? Because the IOBBase
point, also a static variable is initialized to zero and never modified
and used in a conditional that thwarts the second if statement.

This function amounts to a hugely expensive cast to File* on its
argument!

What was the _intent_ of all this?

Reid.

On Tue, 2004-05-11 at 18:28, Reid Spencer wrote:
> I mis-stated what I think should be deleted. 
> 
> The block of code from "GlobalVariable *IOB = 0;" to the end of the loop
> should be delted because the only effect the loop has is on the IOB
> variable and that variable is never used after the loop.
> 
> Reid.
> 
> On Tue, 2004-05-11 at 18:14, Reid Spencer wrote:
> > Hi,
> > 
> > I'm working on bug 122, consolidating the interface to the SymbolTable
> > class. In doing so, I found the function below which traverses the
> > symbol table but apparently unnecessarily. Before I remove the
> > traversal, I thought I better check with you guys. Posted this to the
> > list because it looks like _everyone_ has edited this file :)
> > 
> > In the code below, the IOB variable is the only thing in the loop that
> > seems to get modified. However, it is never used in the subsequent code.
> > Perhaps there's some subtle usage here I'm missing.  I'd like to delete
> > all the code from the start of the function to the end of the loop.
> > 
> > Could someone who knows check this, please?
> > 
> > Thanks,
> > 
> > Reid.
> > 
> > 
> > static FILE *getFILE(void *Ptr) {
> >   static Module *LastMod = 0;
> >   static PointerTy IOBBase = 0;
> >   static unsigned FILESize;
> >                                                                                                                                             
> >   if (LastMod != &TheInterpreter->getModule()) { // Module change or initialize?
> >     Module *M = LastMod = &TheInterpreter->getModule();
> >                                                                                                                                             
> >     // Check to see if the currently loaded module contains an __iob symbol...
> >     GlobalVariable *IOB = 0;
> >     SymbolTable &ST = M->getSymbolTable();
> >     for (SymbolTable::iterator I = ST.begin(), E = ST.end(); I != E; ++I) {
> >       SymbolTable::VarMap &M = I->second;
> >       for (SymbolTable::VarMap::iterator J = M.begin(), E = M.end();
> >            J != E; ++J)
> >         if (J->first == "__iob")
> >           if ((IOB = dyn_cast<GlobalVariable>(J->second)))
> >             break;
> >       if (IOB) break;
> >     }
> >   }
> >                                                                                                                                             
> >   // Check to see if this is a reference to __iob...
> >   if (IOBBase) {
> >     unsigned FDNum = ((unsigned long)Ptr-IOBBase)/FILESize;
> >     if (FDNum == 0)
> >       return stdin;
> >     else if (FDNum == 1)
> >       return stdout;
> >     else if (FDNum == 2)
> >       return stderr;
> >   }
> >                                                                                                                                             
> >   return (FILE*)Ptr;
> > }
> 
> 
> _______________________
> Reid Spencer
> President & CTO
> eXtensible Systems, Inc.
rspencer at x10sys.com


_______________________
Reid Spencer
President & CTO
eXtensible Systems, Inc.
rspencer at x10sys.com
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 189 bytes
Desc: This is a digitally signed message part
URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20040511/462939f5/attachment.sig>


More information about the llvm-dev mailing list