Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

release/18.x: [lld/ELF] Avoid unnecessary TPOFF relocations in GOT for -pie (#81739) #81990

Merged
merged 1 commit into from
Feb 16, 2024

Commits on Feb 16, 2024

  1. [lld/ELF] Avoid unnecessary TPOFF relocations in GOT for -pie (llvm#8…

    …1739)
    
    With the new SystemZ port we noticed that -pie executables generated
    from files containing R_390_TLS_IEENT relocations will have unnecessary
    relocations in their GOT:
    
                            9e8d8: R_390_TLS_TPOFF  *ABS*+0x18
    
    This is caused by the config->isPic conditon in addTpOffsetGotEntry:
    
     static void addTpOffsetGotEntry(Symbol &sym) {
       in.got->addEntry(sym);
       uint64_t off = sym.getGotOffset();
       if (!sym.isPreemptible && !config->isPic) {
         in.got->addConstant({R_TPREL, target->symbolicRel, off, 0, &sym});
         return;
       }
    
    It is correct that we need to retain a TPOFF relocation if the target
    symbol is preemptible or if we're building a shared library. But when
    building a -pie executable, those values are fixed at link time and
    there's no need for any remaining dynamic relocation.
    
    Note that the equivalent MIPS-specific code in MipsGotSection::build
    checks for config->shared instead of config->isPic; we should use the
    same check here. (Note also that on many other platforms we're not even
    using addTpOffsetGotEntry in this case as an IE->LE relaxation is
    applied before; we don't have this type of relaxation on SystemZ.)
    
    (cherry picked from commit 6f90773)
    uweigand authored and tstellar committed Feb 16, 2024
    Configuration menu
    Copy the full SHA
    347977c View commit details
    Browse the repository at this point in the history