[LLVMbugs] [Bug 11154] New: findModuleDefiningSymbol & findModuleDefiningSymbols have inconsistent view of symTab

bugzilla-daemon at llvm.org bugzilla-daemon at llvm.org
Mon Oct 17 08:35:40 PDT 2011


           Summary: findModuleDefiningSymbol & findModuleDefiningSymbols
                    have inconsistent view of symTab
           Product: tools
           Version: trunk
          Platform: PC
        OS/Version: Linux
            Status: NEW
          Severity: normal
          Priority: P
         Component: llvm-ld
        AssignedTo: unassignedbugs at nondot.org
        ReportedBy: gmalecha at eecs.harvard.edu
                CC: llvmbugs at cs.uiuc.edu

Created an attachment (id=7469)
 --> (http://llvm.org/bugs/attachment.cgi?id=7469)

It seems that the two functions Achive::findModuleDefiningSymbol and
Archive::findModulesDefiningSymbols are inconsistent in their use of the index
of the modules map. Code snippets:

Archive::findModulesDefiningSymbols (line 510)
const char* At  = base + firstFileOffset;
unsigned offset = At - base - firstFileOffset;
symTab.insert(std::make_pair(*I, offset)); // *I is the symbol
modules.insert(std::make_pair(offset, std::make_pair(M, mbr)));

Archive::findModuleDefininingSymbol (line 460)
SymTabType::iterator SI = symTab.find(symbol);
unsigned fileOffset =
    SI->second +                // offset in symbol-table-less file
    firstFileOffset;            // add offset to first "real" file in archive
ModuleMap::iterator MI = modules.find(fileOffset);

In findModuleDefiningSymbol, firstFileOffset is added in before looking up into
the map, while the offset associated with a symbol has this value subtracted
out. In most cases this just causes a cache miss, so the module would be loaded
but in some rare instances the offset points to a valid module which causes us
to look at the wrong module.

I think the appropriate fix is to fix the population of the modules map inside
findModulesDefiningSymbols (patch attached).

Configure bugmail: http://llvm.org/bugs/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
You are on the CC list for the bug.

More information about the llvm-bugs mailing list