http://llvm.org/bugs/show_bug.cgi?id=11154

           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: [email protected]
        ReportedBy: [email protected]
                CC: [email protected]


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

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.
_______________________________________________
LLVMbugs mailing list
[email protected]
http://lists.cs.uiuc.edu/mailman/listinfo/llvmbugs

Reply via email to