Skip to content
  • Rui Ueyama's avatar
    Select new undefined atom rather than old one if other conditions are the same. · b4dca7f0
    Rui Ueyama authored
    We can add multiple undefined atoms having the same name to the symbol table.
    If such atoms are added, the symbol table compares their canBeNull attributes,
    and select one having a stronger constraint. If their canBeNulls are the same,
    the choice is arbitrary. Currently it choose the existing one.
    
    This patch changes the preference, so that the symbol table choose the new one
    if the new atom has a greater canBeNull or a fallback atom. This shouldn't
    change the behavior except the case described below.
    
    A new undefined atom may have a new fallback atom attribute. By choosing the new
    atom, we can update the fallback atom during Core Linking. PE/COFF actually need
    that. For example, _lseek is an alias for __lseek on Windows. One of an object
    file in OLDNAMES.LIB has an undefined atom for _lseek with the fallback to
    __lseek. When the linker tries to resolve _read, it supposed to read the file
    from OLDNAMES.LIB and use the new fallback from the file. Currently LLD cannot
    handle such case because duplicate undefined atoms with the same attributes are
    ignored.
    
    Differential Revision: http://llvm-reviews.chandlerc.com/D2161
    
    llvm-svn: 194777
    b4dca7f0
Loading