[LLVMdev] ExecutionEngine/Interpreter/ExternalFunctions.cpp

Reid Spencer reid at x10sys.com
Tue May 11 20:15:05 PDT 2004


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;
}

-------------- 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/ac5d2e18/attachment.sig>


More information about the llvm-dev mailing list