Skip to content
  1. Jul 15, 2017
  2. Jul 14, 2017
  3. Jul 06, 2017
  4. Jul 05, 2017
    • Peter Smith's avatar
      [ELF] Fix Windows build error · 283b9f2d
      Peter Smith authored
      Attempt to fix Windows buildbots From 307131 Replaced return {ET, false};
      with return std::make_pair(ET, false);
      
      llvm-svn: 307137
      283b9f2d
    • Peter Smith's avatar
      [ELF] Allow multiple thunks to be added for a symbol. · fa237642
      Peter Smith authored
      This change permits there to be more than one thunk to be associated with
      a symbol. For interworking thunks we only require one thunk, but range
      extension thunks may require more than one.
      
      Differential Revision: https://reviews.llvm.org/D34037
      
      llvm-svn: 307136
      fa237642
    • Peter Smith's avatar
      [ELF] Introduce Thunk reuse compatibility · 7d66e849
      Peter Smith authored
      On ARM the interworking thunks are only produced for branch instructions
      that can't be changed into a blx instruction so only Thumb callers would
      call Thumb thunks and only ARM callers would call ARM thunks. With range
      extension thunks branch and link instructions may need a Thunk. These
      instructions can be rewritten as a blx and can use either ARM or Thumb
      thunks.
      
      We introduce an isCompatibleWith() function so that a caller can check if
      an existing Thunk is compatible before reusing it.
      
      Differential Revision: https://reviews.llvm.org/D34035
      
      llvm-svn: 307132
      7d66e849
  5. Jul 04, 2017
  6. Jun 26, 2017
    • Peter Smith's avatar
      [ELF] Define _GLOBAL_OFFSET_TABLE_ symbol relative to .got · 113a59e7
      Peter Smith authored
      On many architectures gcc and clang will recognize _GLOBAL_OFFSET_TABLE_ - .
      and produce a relocation that can be processed without needing to know the
      value of _GLOBAL_OFFSET_TABLE_. This is not always the case; for example ARM
      gcc produces R_ARM_BASE_PREL but clang produces the more general
      R_ARM_REL32 to _GLOBAL_OFFSET_TABLE_. To evaluate this relocation
      correctly _GLOBAL_OFFSET_TABLE_ must be defined to be the either the base of
      the GOT or end of the GOT dependent on architecture..
      
      If/when llvm-mc is changed to recognize _GLOBAL_OFFSET_TABLE_ - . this
      change will not be necessary for new objects. However there may still be
      old objects and versions of clang.
      
      Differential Revision: https://reviews.llvm.org/D34355
      
      llvm-svn: 306282
      113a59e7
  7. Jun 16, 2017
    • Peter Smith's avatar
      [ELF] Enable createThunks to be called more than once. · 32980279
      Peter Smith authored
          
      In preparation for supporting range extension thunks we now continually
      call createThunks() until no more thunks are added. This requires us to
      record the thunks we add on each pass and only merge the new ones into the
      OutputSection. We also need to check if a Relocation is targeting a thunk
      to prevent us from infinitely creating more thunks.
          
      Differential Revision: https://reviews.llvm.org/D34034
      
      llvm-svn: 305555
      32980279
  8. Jun 08, 2017
  9. Jun 07, 2017
    • Peter Smith's avatar
      [ELF] Convert Thunks to use InputSectionDescriptions · 8e791463
      Peter Smith authored
      Thunks are now generated per InputSectionDescription instead of per
      OutputSection. This allows created ThunkSections to be inserted directly
      into InputSectionDescription.
      
      Changes in this patch:
      - Loop over InputSectionDescriptions to find relocations to Thunks
      - Generate a ThunkSection per InputSectionDescription
      - Remove synchronize() as we no longer need it
      - Move fabricateDefaultCommands() before createThunks
      
      Differential Revision: https://reviews.llvm.org/D33835
      
      llvm-svn: 304887
      8e791463
  10. Jun 06, 2017
  11. Jun 01, 2017
    • George Rimar's avatar
      [ELF] - Properly handle R_386_GOTPC relocation. · d6029872
      George Rimar authored
      This is PR33243. R_GOTONLY_PC_FROM_END was not in a list of link time constant
      expressions and that was a result of confusiing messages like PR shows:
      
      /usr/bin/ld.lld: error: /usr/lib/go/src/runtime/alg.go:47: 
      can't create dynamic relocation R_386_GOTPC against local symbol in readonly segment defined in /tmp/nice/go-link-597453838/go.o
      
      Though in reality we just should not have try to create a dynamic relocation for this case at all.
      
      Patch fixes the issue.
      
      Differential revision: https://reviews.llvm.org/D33717
      
      llvm-svn: 304393
      d6029872
  12. May 31, 2017
    • Rafael Espindola's avatar
      Store a single Parent pointer for InputSectionBase. · db5e56f7
      Rafael Espindola authored
      Before InputSectionBase had an OutputSection pointer, but that was not
      always valid. For example, if it was a merge section one actually had
      to look at MergeSec->OutSec.
      
      This was brittle and caused bugs like the one fixed by r304260.
      
      We now have a single Parent pointer that points to an OutputSection
      for InputSection, but to a SyntheticSection for merge sections and
      .eh_frame. This makes it impossible to accidentally access an invalid
      OutSec.
      
      llvm-svn: 304338
      db5e56f7
  13. May 18, 2017
    • Rafael Espindola's avatar
      Alternative way to detemplate GotSection. · a6465bbb
      Rafael Espindola authored
      GetSection is a template because write calls relocate.
      
      relocate has two parts. The non alloc code really has to be a
      template, as it is looking a raw input file data.
      
      The alloc part is only a template because of getSize.
      
      This patch folds the value of getSize early, detemplates
      getRelocTargetVA and splits relocate into a templated non alloc case
      and a regular function for the alloc case. This has the nice advantage
      of making sure we collect all the information we need for relocations
      before getting to InputSection::relocateNonAlloc.
      
      Since we know got is alloc, it can just call the function directly and
      avoid the template.
      
      llvm-svn: 303355
      a6465bbb
  14. May 17, 2017
  15. May 12, 2017
  16. May 11, 2017
  17. May 05, 2017
    • Rafael Espindola's avatar
      Remove isTlsLocalDynamicRel and isTlsInitialExecRel. · 81273c72
      Rafael Espindola authored
      This feels a bit hackish, but I think it is still an improvement.
      
      The way a tls address is computed in the various architectures is not
      that different. For example, for local dynamic we need the base of the
      tls (R_TLSLD or R_TLSLD_PC), and the offset of that particular symbol
      (R_ABS).
      
      Given the similarity, we can just use the expressions instead of
      having two additional target hooks.
      
      llvm-svn: 302279
      81273c72
  18. May 03, 2017
    • Rui Ueyama's avatar
      Accept archive files with no symbol table instad of warning on them. · fd7deda5
      Rui Ueyama authored
      It seems virtually everyone who tries to do LTO build with Clang and
      LLD was hit by a mistake to forget using llvm-ar command to create
      archive files. I wasn't an exception. Since this is an annoying common
      issue, it is probably better to handle that gracefully rather than
      reporting an error and tell the user to redo build with different
      configuration.
      
      Differential Revision: https://reviews.llvm.org/D32721
      
      llvm-svn: 302083
      fd7deda5
  19. Apr 13, 2017
  20. Apr 08, 2017
    • George Rimar's avatar
      [ELF] - Stop producing broken output for R_386_GOT32[X] relocations. · e7bf9688
      George Rimar authored
      Previously we silently produced broken output for R_386_GOT32X/R_386_GOT32 
      relocations if they were used to compute the address of the symbol’s global
      offset table entry without base register when position-independent code is disabled.
      
      Situation happened because of recent ABI changes. Released ABI mentions that
      R_386_GOT32X can be calculated in a two different ways (so we did not follow ABI here 
      before this patch), but draft ABI also mentions R_386_GOT32 relocation here. 
      We should use the same calculations for both relocations.
      
      Problem is that we always calculated them as G + A - GOT (offset from end of GOT),
      but for case when PIC is disabled, according to i386 ABI calculation should be G + A,
      what should produce just an address in GOT finally.
      
      ABI: https://github.com/hjl-tools/x86-psABI/wiki/intel386-psABI-draft.pdf (p36, p60).
      llvm-svn: 299812
      e7bf9688
  21. Apr 07, 2017
  22. Apr 06, 2017
    • Rui Ueyama's avatar
      Create GOT and PLT entries early in scanRelocs(). · 5036cc67
      Rui Ueyama authored
      scanRelocs() does a lot of things. It fills InputSection's Relocations vector,
      making a decision whether a TLS relocation should be relaxed or not,
      and making a decision whether a GOT/PLT slot needs to be created or not.
      
      They don't actually have to be done in a single loop. I want to separate
      them so that some of them can be run concurently. As a first step, this
      patch moves PLT/GOT slot assignment to beginning of the loop, so that
      they just fall through to the next statements. This should make it clear
      that that code doesn't affect other parts of the loop.
      
      llvm-svn: 299615
      5036cc67
    • Rui Ueyama's avatar
      Remove Target::isTlsGlobalDynamicRel() · c2a49bf9
      Rui Ueyama authored
      Relocations are abstracted as platform-independent R_TLS_* relocations,
      so we don't need to check platform-specific ones to see if a relocation
      is TLS GD.
      
      llvm-svn: 299614
      c2a49bf9
  23. Apr 05, 2017
    • Peter Smith's avatar
      [ELF] Make createThunks a class [NFC] · 56abf209
      Peter Smith authored
          
      For range extension thunks we will need to repeatedly call createThunks()
      until no more thunks are created. We will need to retain the state of
      Thunks that we have created so far to avoid recreating them on later
      passes. This change does not change the functionality of createThunks().
      
      Differential Revision: https://reviews.llvm.org/D31654
      
      llvm-svn: 299530
      56abf209
  24. Apr 03, 2017
    • Rui Ueyama's avatar
      Change the error message format for an incompatible relocation. · 6ea72527
      Rui Ueyama authored
      Previous error message style:
      
        error: /home/alice/src/bar.c:12: relocation R_X86_64_PLT32 cannot refer to absolute symbol 'answer' defined in /home/alice/src/foo.o
      
      New error message style:
      
        error: relocation R_X86_64_PLT32 cannot refer to absolute symbol: foo
        >>> defined in /home/alice/src/foo.o
        >>> referenced by bar.c:12 (/home/alice/src/bar.c:12)
        >>>               /home/alice/src/bar.o:(.text+0x1)
      
      llvm-svn: 299390
      6ea72527
  25. Mar 31, 2017
  26. Mar 30, 2017
  27. Mar 29, 2017
Loading