Skip to content
  1. Jul 20, 2016
    • Chandler Carruth's avatar
      Add yet more explicit template instantiations. These were always needed · 1d175fbc
      Chandler Carruth authored
      but things happened to work on some platforms prior to r276133. This
      should be the complete set (I hope).
      
      llvm-svn: 276155
      1d175fbc
    • 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
    • Rui Ueyama's avatar
      Simplify output section ownership. · a7f7884d
      Rui Ueyama authored
      This patch simplifies output section management by making
      Factory class have ownership of sections that creates.
      
      Differential Revision: https://reviews.llvm.org/D22575
      
      llvm-svn: 276141
      a7f7884d
    • George Rimar's avatar
      [ELF] - Refactor of LinkerScript<ELFT>::getPhdrIndicesForSection · 31d842f5
      George Rimar authored
      Previously it was harder to read and also has a error:
      command kind was not checked.
      
      Differential revision: https://reviews.llvm.org/D22574
      
      llvm-svn: 276137
      31d842f5
    • Eugene Leviant's avatar
    • George Rimar's avatar
      Removed trailing whitespaces. NFC. · 70ce0a9f
      George Rimar authored
      llvm-svn: 276126
      70ce0a9f
    • Peter Smith's avatar
      Initial support for the local dynamic model ARM TLS relocations: · 441cf5d8
      Peter Smith authored
      - R_ARM_TLS_LDM32
      - R_ARM_TLS_LDO32
      
      The local dynamic implementation and tests follows the same model as 
      the other ARM TLS models. The R_ARM_TLS_LDO32 is implemented as R_ABS 
      expr type as the getVA() for a TLS symbol will return the offset from the 
      start of the TLS block.
      
      Differential Revision https://reviews.llvm.org/D22563
       
      
      llvm-svn: 276123
      441cf5d8
    • Eugene Leviant's avatar
      [ELF] Create output sections in LinkerScript class · e63d81bd
      Eugene Leviant authored
      llvm-svn: 276121
      e63d81bd
    • George Rimar's avatar
      [ELF] - Fixed integral constant overflow warning under MSVS 2015. NFC. · b084125d
      George Rimar authored
      Under MSVS 2015 I observed integral constant overflow warning when aggregate initialization was used
      to init the bit field. Patch fixes that.
      
      llvm-svn: 276118
      b084125d
    • 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
    • Peter Smith's avatar
      Support for standard model ARM TLS · 9d450256
      Peter Smith authored
          
      Add relocations and identification functions for the Initial Exec
      and Global Dynamic TLS model defined in Addenda to, and Errata in,
      the ABI for the ARM Architecture.
          
      ARM uses variant 1 of the thread local storage data
      structures as defined in ELF Handling for Thread-Local Storage.
          
      The "experimental" descriptor based model that can be selected in
      gcc, but not clang with -mtls-dialect=gnu2 is not supported.
          
      The relocations R_ARM_TLS_LE12 and R_ARM_TLS_IE12GP are not
      supported, I know of no ARM Toolchain that supports these relocations
      as they limit the size of the TLS block.
          
      No code relaxation is supported as the standard ARM TLS model puts
      the relocations on literal data.
          
      Support for the local dynamic model will come in a follow up patch.
      
      Differential Revision: https://reviews.llvm.org/D22462
      
      llvm-svn: 276095
      9d450256
  2. Jul 19, 2016
  3. Jul 18, 2016
  4. Jul 17, 2016
    • Rui Ueyama's avatar
      Unbreak msan buildbot. · 25a6d57b
      Rui Ueyama authored
      llvm-svn: 275728
      25a6d57b
    • Rui Ueyama's avatar
      Remove dead code. · 77fa5ee1
      Rui Ueyama authored
      llvm-svn: 275724
      77fa5ee1
    • Rui Ueyama's avatar
      Implement almost-zero-cost --trace-symbol. · 69c778c0
      Rui Ueyama authored
      --trace-symbol is a command line option to watch a symbol.
      Previosly, we looked up a hash table for a new symbol if the
      option is given. Any code that looks up a hash table for each
      symbol is expensive because the linker handles a lot of symbols.
      In our design, we look up a hash table strictly only once
      for a symbol, so --trace-symbol was an exception.
      
      This patch improves efficiency of the option by merging the
      hash table into the symbol table.
      
      Instead of looking up a separate hash table with a string,
      this patch sets `Traced` flag to symbols specified by --trace-symbol.
      So, if you insert a symbol and get a symbol with `Traced` flag on,
      you know that you need to print out a log message for the symbol.
      This is nearly zero cost.
      
      llvm-svn: 275716
      69c778c0
    • Rui Ueyama's avatar
      b06700fa
    • Rui Ueyama's avatar
      Remove duplicate public specifier. · bef5d16a
      Rui Ueyama authored
      llvm-svn: 275714
      bef5d16a
    • Rui Ueyama's avatar
      Print out file names for common symbols for --trace-symbol. · 2a7c1c15
      Rui Ueyama authored
      Previously, there was no way to get a file name for a DefinedCommon
      symbol. This patch adds it.
      
      llvm-svn: 275712
      2a7c1c15
    • Rui Ueyama's avatar
      Handle versioned symbols efficiently. · 663b8c27
      Rui Ueyama authored
      Versions can be assigned to symbols in two different ways.
      One is the usual version scripts, and the other is special
      symbol suffix '@'. If a symbol contains '@', the string after
      that is considered to specify a version name.
      
      Previously, we look for '@' for all symbols.
      
      Anything that works on every symbol can be expensive because
      the linker has to handle a lot of symbols. The search for '@'
      was not an exception.
      
      In this patch, I made two optimizations.
      
      The first optimization is to handle '@' only when at least one
      version is defined. If no versions are defined, no versions can
      be assigned to any symbols, so it's waste of time to search for '@'.
      
      The second optimization is to scan only suffixes of symbol names
      instead of entire symbol names. Symbol names can be very long, but
      symbol versions are usually short, so scanning entire symbol names
      is waste of time, too.
      
      There are some error cases which we no longer be able to detect
      with this patch. I don't think it's a major drawback because they
      are minor errors. Speed is more important.
      
      This change improves LLD with debug info self-link time from
      6.6993 seconds to 6.3426 seconds (or -5.3%).
      
      Differential Revision: https://reviews.llvm.org/D22433
      
      llvm-svn: 275711
      663b8c27
    • 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
    • Rui Ueyama's avatar
      Do not invoke FileCheck with `not` command. · 7a7a96e1
      Rui Ueyama authored
      We should use CHECK-NOT instead.
      
      llvm-svn: 275700
      7a7a96e1
  5. Jul 16, 2016
Loading