Skip to content
  1. Jun 16, 2017
  2. Jun 15, 2017
    • Rafael Espindola's avatar
      Move clearOutputSections before sortSections. · 383971d2
      Rafael Espindola authored
      This is probably the main patch left in unifying our intermediary
      representation.
      
      It moves the creation of default commands before section sorting. This
      has the nice effect that we now have one location where we decide
      where an orphan section should be placed.
      
      Before this patch sortSections would decide the relative location of
      orphan sections to other sections, but it was up to placeOrphanSection
      to decide on the exact location.
      
      We now only sort sections we created since the linker script is
      already in the correct order.
      
      llvm-svn: 305512
      383971d2
    • Petr Hosek's avatar
      [ELF] Mark symbols referenced from linker script as live · 40f2866a
      Petr Hosek authored
      This is necessary to ensure that sections containing symbols referenced
      from linker scripts (e.g. in data commands) don't get GC'd.
      
      Differential Revision: https://reviews.llvm.org/D34195
      
      llvm-svn: 305452
      40f2866a
    • Leslie Zhai's avatar
      [ELF] Initial migration of AVR target · 49ba795d
      Leslie Zhai authored
      Reviewers: ruiu, rafael, grimar, atanasyan, psmith, dylanmckay
      
      Reviewed By: ruiu, rafael, grimar, dylanmckay
      
      Differential Revision: https://reviews.llvm.org/D32991
      
      llvm-svn: 305444
      49ba795d
  3. Jun 14, 2017
  4. Jun 13, 2017
    • Rafael Espindola's avatar
      Set non alloc section address to 0 earlier. · dece2808
      Rafael Espindola authored
      Currently we do layout as if non alloc sections had an actual address
      and then set it to zero. This produces a few odd results where a
      symbol has an address that is inconsistent with the section address.
      
      The simplest way to fix it is probably to just set the address earlier.
      
      The behavior of bfd seems to be similar, but it only sets the non
      alloc section address is missing from the linker script or if the
      script has an explicit " : 0" setting the address of the output
      section (which the default script does).
      
      llvm-svn: 305323
      dece2808
  5. Jun 12, 2017
  6. Jun 11, 2017
  7. Jun 10, 2017
    • Rafael Espindola's avatar
      Relax the overflow checking of R_386_PC16. · 07c87416
      Rafael Espindola authored
      Currently the freebsd early boot code fails to link. The issue reduces
      to 16 bit code at position 0x7000 wanting to jump to position
      0x9000. That is represented in the .o file as a relocation with no
      symbol and an addend of 0x9000 - 2 (The -2 is because i386 uses the ip
      after the current instruction for jumps).
      
      If the addend is interpreted as signed (it should), it is -28674. In a
      32 bit architecture, that is the address 0xffff8ffe. To get there from
      0x7000 we have to add 4294909950 (too big) or subtract 57346 (too
      small). We then produce an error.
      
      What lld is missing is the fact that at runtime this will actually be
      a 16 bit architecture and adding 0x1ffe produces 0x8ffe which is the
      correct result in 16 bits (-28674).
      
      Since we have a 16 bit addend and a 16 bit PC, the relocation can move
      the PC to any 16 bit address and that is the only thing we really need
      to check: if the address we are pointing to fits in 16 bits. This is
      unfortunately hard to do since we have to delay subtracting the PC and
      if we want to do that outside of Target.cpp, we have to move the
      overflow check out too.  An incomplete patch that tries to do that is
      at https://reviews.llvm.org/D34070
      
      This patch instead just relaxes the check. Since the value we have is
      the destination minus the PC and the PC is 16 bits, it should fit in
      17 bits if the destination fits in 16 too.
      
      bfd had a similar issue for some time and got a similar fix:
      https://sourceware.org/ml/binutils/2005-08/msg00001.html
      
      llvm-svn: 305135
      07c87416
    • Rui Ueyama's avatar
      [ICF] Ignore SHF_GROUP flag when comparing two sections. · 1c837b5f
      Rui Ueyama authored
      SHF_GROUP bit doesn't make sense in executables or DSOs, so linkers are
      expected to remove that bit from section flags. We did that when we create
      output sections.
      
      This patch is to do that earlier than before. Now the flag is dropped when
      we instantiate input section objects.
      
      This change improves ICF. Previously, two sections that differ only in
      SHF_GROUP flag were not merged, because when the control reached ICF,
      the flag was still there. Now the flag is dropped before reaching to ICF,
      so the difference is ignored naturally.
      
      This issue was found by pcc.
      
      Differential Revision: https://reviews.llvm.org/D34074
      
      llvm-svn: 305134
      1c837b5f
  8. Jun 09, 2017
    • Rui Ueyama's avatar
      Simplify. NFC. · d97265f7
      Rui Ueyama authored
      llvm-svn: 305112
      d97265f7
    • George Rimar's avatar
      [ELF] - Allow producing -r output if only empty archive is given. · 1840901a
      George Rimar authored
      This is used by linux kernel build system.
      
      (https://www.kernel.org/doc/Documentation/kbuild/makefiles.txt "3.2 Built-in object goals")
      
      It has for example next configuration for linking built-in.o files:
      drivers-y	:= $(patsubst %/, %/built-in.o, $(drivers-y))
      drivers-$(CONFIG_PCI)		+= arch/ia64/pci/
      ...
      drivers-$(CONFIG_OPROFILE)	+= arch/ia64/oprofile/
      
      Im most simple case all CONFIG_* options are off. That means linker is called with empty input archive, 
      emulation option and no inputs and expected to generate some relocatable output. 
      ld.bfd is able to do that, we dont.
      
      Patch allows to support this case.
      
      Differential revision: https://reviews.llvm.org/D33937
      
      llvm-svn: 305069
      1840901a
    • Peter Smith's avatar
      [ELF] Be more precise about Thumb state bit in ARM thunks · 28285576
      Peter Smith authored
      The symbols generated for Thunks have type STT_FUNC, to permit a thunk to
      be reused via a blx instruction the Thumb bit (0) needs to be set properly.
      
      Differential Revision: https://reviews.llvm.org/D34036
      
      llvm-svn: 305065
      28285576
    • George Rimar's avatar
      [ELF] - Fix build bot. · b4b7b74b
      George Rimar authored
      SyntheticSections.cpp:1773:29: error: chosen constructor is explicit in copy-initialization
              CuVectors.push_back({});
                                  ^~
      /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/../lib/c++/v1/set:428:14: note: constructor declared here
          explicit set(const value_compare& __comp = value_compare())
                   ^
      /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/../lib/c++/v1/vector:702:59: note: passing argument to parameter '__x' here
          _LIBCPP_INLINE_VISIBILITY void push_back(value_type&& __x);
      
      llvm-svn: 305054
      b4b7b74b
    • Rui Ueyama's avatar
      Simplify. NFC. · f08b38cb
      Rui Ueyama authored
      llvm-svn: 305048
      f08b38cb
    • Rui Ueyama's avatar
      Simplify. NFC. · a1ba859a
      Rui Ueyama authored
      llvm-svn: 305047
      a1ba859a
  9. Jun 08, 2017
  10. Jun 07, 2017
Loading