Skip to content
  1. Sep 06, 2016
  2. Sep 01, 2016
  3. Aug 22, 2016
  4. Aug 19, 2016
  5. Aug 18, 2016
    • Petr Hosek's avatar
      [ELF] Improve error reporting for relocations · 4071b1ba
      Petr Hosek authored
      We should always include symbol name when reporting relocations
      error to simplify debugging of these issues. Without symbol names
      users have to manually investigate which of the libraries contain
      invalid relocations which can be cumbersome when linking multiple
      libraries.
      
      Differential Revision: https://reviews.llvm.org/D23690
      
      llvm-svn: 279162
      4071b1ba
  6. Jul 21, 2016
  7. Jul 20, 2016
    • Rafael Espindola's avatar
      Delete EhInputSection::getOffset. · 2197311c
      Rafael Espindola authored
      We no longer need it for relocations in .eh_frame.
      
      The only relocations that point to .eh_frame are the ones trying to
      find the output .eh_frame.
      
      This actually fixes a bug in the symbol value code. It was not
      handling -1 as an indicator for a piece not being included in the
      output.
      
      llvm-svn: 276175
      2197311c
    • Rafael Espindola's avatar
      Avoid use of uninitialized iterators. · 228d27c7
      Rafael Espindola authored
      llvm-svn: 276157
      228d27c7
    • Rafael Espindola's avatar
      Create thunks before regular relocation scan. · 0f7cedaa
      Rafael Espindola authored
      We will need to do something like this to support range extension
      thunks since that process is iterative.
      
      Doing this also has the advantage that when doing the regular
      relocation scan the offset in the output section is known and we can
      just store that. This reduces the number of times we have to run
      getOffset and I think will allow a more specialized .eh_frame
      representation.
      
      By itself this is already a performance win.
      
      firefox
        master 7.295045737
        patch  7.209466989 0.98826892235
      chromium
        master 4.531254468
        patch  4.509221804 0.995137623774
      chromium fast
        master 1.836928973
        patch  1.823805241 0.992855612714
      the gold plugin
        master 0.379768791
        patch  0.380043405 1.00072310839
      clang
        master 0.642698284
        patch  0.642215663 0.999249070657
      llvm-as
        master 0.036665467
        patch  0.036456225 0.994293213284
      the gold plugin fsds
        master 0.40395817
        patch  0.404384555 1.0010555177
      clang fsds
        master 0.722045545
        patch  0.720946135 0.998477367518
      llvm-as fsds
        master 0.03292646
        patch  0.032759965 0.994943428477
      scylla
        master 3.427376378
        patch  3.368316181 0.98276810292
      
      llvm-svn: 276146
      0f7cedaa
    • Rafael Espindola's avatar
      Use iterators to avoid dereferencing end(). · f53f4f5a
      Rafael Espindola authored
      Thanks to George Rimar for finding the problem.
      
      llvm-svn: 276144
      f53f4f5a
    • Rafael Espindola's avatar
      Avoid some binary searches. · 5b7a79f9
      Rafael Espindola authored
      In here we are iterating relocations in order, so we can do the same
      with the pieces of .eh_frame and avoid a binary search.
      
      The link times I got with this patch were:
      
      firefox
        master 7.22977811
        patch  7.141041442 0.987726225252
      chromium
        master 4.478966851
        patch  4.506602207 1.00617002914
      chromium fast
        master 1.894713371
        patch  1.866446889 0.98508139414
      the gold plugin
        master 0.386193907
        patch  0.382374918 0.990111213743
      clang
        master 0.654849589
        patch  0.647899815 0.989387220949
      llvm-as
        master 0.037212718
        patch  0.036858172 0.990472450843
      the gold plugin fsds
        master 0.410876711
        patch  0.407418613 0.991583611562
      clang fsds
        master 0.734623069
        patch  0.728237526 0.991307728726
      llvm-as fsds
        master 0.033446197
        patch  0.03302833 0.987506292569
      scylla
        master 3.38134402
        patch  3.414188846 1.00971354166
      
      llvm-svn: 276108
      5b7a79f9
  8. Jul 17, 2016
    • Rui Ueyama's avatar
      Add a pointer to a source file to SymbolBody. · 434b5617
      Rui Ueyama authored
      Previously, each subclass of SymbolBody had a pointer to a source
      file from which it was created. So, there was no single way to get
      a source file for a symbol. We had getSourceFile<ELFT>(), but the
      function was a bit inconvenient as it's a template.
      
      This patch makes SymbolBody have a pointer to a source file.
      If a symbol is not created from a file, the pointer has a nullptr.
      
      llvm-svn: 275701
      434b5617
  9. Jul 08, 2016
    • Peter Smith's avatar
      Recommit R274836 Add Thunk support framework for ARM and Mips · fb05cd99
      Peter Smith authored
      The TinyPtrVector of const Thunk<ELFT>* in InputSections.h can cause 
      build failures on certain compiler/library combinations when Thunk<ELFT> 
      is not a complete type or is an abstract class. Fixed by making Thunk<ELFT>
      non Abstract.
      
      type or is an abstract class 
      
      llvm-svn: 274863
      fb05cd99
    • Peter Smith's avatar
      Revert R274836 Add Thunk support framework for ARM and Mips · eeb82744
      Peter Smith authored
      This seems to be causing a buildbot failure on lld-x86_64-freebsd. Will
      reproduce locally and fix. 
      
      llvm-svn: 274841
      eeb82744
    • Peter Smith's avatar
      Add Thunk support framework for ARM and Mips · de01b98a
      Peter Smith authored
          
          Generalise the Mips LA25 Thunk code and implement ARM and Thumb
          interworking Thunks.
          
          - Introduce a new module Thunks.cpp to store the Target Specific Thunk
            implementations.
          - DefinedRegular and Shared have a ThunkData field to record Thunk.
          - A Target can have more than one type of Thunk.
          - Support PC-relative calls to Thunks.
          - Support Thunks to PLT entries.
          - Existing Mips LA25 Thunk code integrated.
          - Support for ARMv7A interworking Thunks.
          
          Limitations:
          - Only one Thunk per SymbolBody, this is sufficient for all currently
            implemented Thunks.
          - ARM thunks assume presence of V6T2 MOVT and MOVW instructions.
      
          Differential revision: http://reviews.llvm.org/D21891
      
      llvm-svn: 274836
      de01b98a
  10. Jun 23, 2016
    • Simon Atanasyan's avatar
      [ELF][MIPS] Support MIPS TLS relocations · 002e2447
      Simon Atanasyan authored
      The patch adds one more partition to the MIPS GOT. This time it is for
      TLS related GOT entries. Such entries are located after 'local' and 'global'
      ones. We cannot get a final offset for these entries at the time of
      creation because we do not know size of 'local' and 'global' partitions.
      So we have to adjust the offset later using `getMipsTlsOffset()` method.
      
      All MIPS TLS relocations which need GOT entries operates MIPS style GOT
      offset - 'offset from the GOT's beginning' - MipsGPOffset constant. That
      is why I add new types of relocation expressions.
      
      One more difference from othe ABIs is that the MIPS ABI does not support
      any TLS relocation relaxations. I decided to make a separate function
      `handleMipsTlsRelocation` and put MIPS TLS relocation handling code
      there. It is similar to `handleTlsRelocation` routine and duplicates its
      code. But it allows to make the code cleaner and prevent pollution of
      the `handleTlsRelocation` by MIPS 'if' statements.
      
      Differential Revision: http://reviews.llvm.org/D21606
      
      llvm-svn: 273569
      002e2447
    • Rui Ueyama's avatar
      Fix a bug that MIPS thunks can overwrite other section contents. · 809d8e2d
      Rui Ueyama authored
      Peter Smith found while trying to support thunk creation for ARM that
      LLD sometimes creates broken thunks for MIPS. The cause of the bug is
      that we assign file offsets to input sections too early. We need to
      create all sections and then assign section offsets because appending
      thunks changes file offsets for all following sections.
      
      This patch separates the pass to assign file offsets from thunk
      creation pass. This effectively reverts r265673.
      
      Differential Revision: http://reviews.llvm.org/D21598
      
      llvm-svn: 273532
      809d8e2d
  11. Jun 22, 2016
    • Rui Ueyama's avatar
      Do not scan relocations twice for MIPS. · d2ada2ea
      Rui Ueyama authored
      Previously, relocations for MIPS were scanned twice; once in regular
      scanRelocs() and the other is in scanRelocsForThunks. In the former
      function, we computed types of relocations and skipped R_THUNK relocations.
      In the latter function, we computed the same value again and skipped
      all but R_THUNK relocations. It was wasteful. This patch fixes that.
      Now R_THUNK relocations are handled in the regular manner.
      
      llvm-svn: 273346
      d2ada2ea
  12. Jun 20, 2016
  13. Jun 19, 2016
    • Simon Atanasyan's avatar
      [ELF][MIPS] Support GOT entries for non-preemptible symbols with different addends · 4132511c
      Simon Atanasyan authored
      There are two motivations for this patch. The first one is a preparation
      for support MIPS TLS relocations. It might sound like a joke but for GOT
      entries related to TLS relocations MIPS ABI uses almost regular approach
      with creation of dynamic relocations for each GOT enty etc. But we need
      to separate these 'regular' TLS related entries from MIPS specific local
      and global parts of GOT. ABI declare simple solution - all TLS related
      entries allocated at the end of GOT after local/global parts. The second
      motivation it to support GOT relocations for non-preemptible symbols
      with addends. If we have more than one GOT relocations against symbol S
      with different addends we need to create GOT entries for each unique
      Symbol/Addend pairs.
      
      So we store all MIPS GOT entries in separate containers. For non-preemptible
      symbols we have to maintain two data structures. The first one is MipsLocal
      vector. Each entry corresponds to the GOT entry from the 'local' part
      of the GOT contains the symbol's address plus addend. The second one
      is MipsLocalMap. It is a map from Symbol/Addend pair to the GOT index.
      
      Differential Revision: http://reviews.llvm.org/D21297
      
      llvm-svn: 273127
      4132511c
  14. Jun 17, 2016
  15. Jun 10, 2016
  16. Jun 09, 2016
  17. Jun 08, 2016
  18. Jun 05, 2016
  19. Jun 04, 2016
  20. Jun 02, 2016
    • Rafael Espindola's avatar
      Start adding tlsdesc support for aarch64. · e37d13b9
      Rafael Espindola authored
      This is mostly extracted from http://reviews.llvm.org/D18960.
      
      The general idea for tlsdesc is that the two GD got entries are used
      for a function pointer and its argument. The dynamic linker sets
      both. In the non-dlopen case the dynamic linker sets the function to
      the identity and the argument to the offset in the tls block.
      
      All that the static linker has to do in the non-dlopen case is
      relocate the code to point to the got entries and create a dynamic
      relocation.
      
      The dlopen case is more complicated, but can be implemented in another patch.
      
      llvm-svn: 271569
      e37d13b9
  21. Jun 01, 2016
Loading