1. 18 2月, 2016 1 次提交
    • R
      fix regression in SH/FDPIC dynamic linker · 2d0290de
      Rich Felker 提交于
      the dynamic linker was found to hang when used as the PT_INTERP, but
      not when invoked as a command. the mechanism of this failure was not
      determined, but the cause is clear:
      
      commit 5552ce52 removed the SHARED
      macro, but arch/sh/crt_arch.h is still using it to choose the right
      form of the crt/ldso entry point code. moving the forced definition
      from rcrt1.c to dlstart.c restores the old behavior. eventually the
      logic should be changed to fully remove the SHARED macro or at least
      rename it to something more reasonable.
      2d0290de
  2. 26 1月, 2016 1 次提交
    • R
      move dynamic linker to its own top-level directory, ldso · 5552ce52
      Rich Felker 提交于
      this eliminates the last need for the SHARED macro to control how
      files in the src tree are compiled. the same code is used for both
      libc.a and libc.so, with additional code for the dynamic linker (from
      the new ldso tree) being added to libc.so but not libc.a. separate .o
      and .lo object files still exist for the src tree, but the only
      difference is that the .lo files are built as PIC.
      
      in the future, if/when we add dlopen support for static-linked
      programs, much of the code in dynlink.c may be moved back into the src
      tree, but properly factored into separate source files. in that case,
      the code in the ldso tree will be reduced to just the dynamic linker
      entry point, self-relocation, and loading of libraries needed by the
      main application.
      5552ce52
  3. 16 10月, 2015 1 次提交
    • R
      fix visibility mismatch in dynamic linker stage 2 function definition · bc9b6ea0
      Rich Felker 提交于
      since commits 2907afb8 and
      6fc30c24, __dls2 is no longer called
      via symbol lookup, but instead uses relative addressing that needs to
      be resolved at link time. on some linker versions, and/or if
      -Bsymbolic-functions is not used, the linker may leave behind a
      dynamic relocation, which is not suitable for bootstrapping the
      dynamic linker, if the reference to __dls2 is marked hidden but the
      definition is not actually hidden. correcting the definition to use
      hidden visibility fixes the problem.
      
      the static-PIE entry point rcrt1 was likewise affected and is also
      fixed by this patch.
      bc9b6ea0
  4. 26 5月, 2015 1 次提交
    • R
      add rcrt1 start file for fully static-linked PIE · dc031ee0
      Rich Felker 提交于
      static-linked PIE files need startup code to relocate themselves, much
      like the dynamic linker does. rcrt1.c reuses the code in dlstart.c,
      stage 1 of the dynamic linker, which in turn reuses crt_arch.h, to
      achieve static PIE with no new code. only relative relocations are
      supported.
      
      existing toolchains that don't yet support static PIE directly can be
      repurposed by passing "-shared -Wl,-Bstatic -Wl,-Bsymbolic" instead of
      "-static -pie" and substituting rcrt1.o in place of crt1.o.
      
      all libraries being linked must be built as PIC/PIE; TEXTRELs are not
      supported at this time.
      dc031ee0
  5. 13 4月, 2015 1 次提交
    • R
      dynamic linker bootstrap overhaul · f3ddd173
      Rich Felker 提交于
      this overhaul further reduces the amount of arch-specific code needed
      by the dynamic linker and removes a number of assumptions, including:
      
      - that symbolic function references inside libc are bound at link time
        via the linker option -Bsymbolic-functions.
      
      - that libc functions used by the dynamic linker do not require
        access to data symbols.
      
      - that static/internal function calls and data accesses can be made
        without performing any relocations, or that arch-specific startup
        code handled any such relocations needed.
      
      removing these assumptions paves the way for allowing libc.so itself
      to be built with stack protector (among other things), and is achieved
      by a three-stage bootstrap process:
      
      1. relative relocations are processed with a flat function.
      2. symbolic relocations are processed with no external calls/data.
      3. main program and dependency libs are processed with a
         fully-functional libc/ldso.
      
      reduction in arch-specific code is achived through the following:
      
      - crt_arch.h, used for generating crt1.o, now provides the entry point
        for the dynamic linker too.
      
      - asm is no longer responsible for skipping the beginning of argv[]
        when ldso is invoked as a command.
      
      - the functionality previously provided by __reloc_self for heavily
        GOT-dependent RISC archs is now the arch-agnostic stage-1.
      
      - arch-specific relocation type codes are mapped directly as macros
        rather than via an inline translation function/switch statement.
      f3ddd173
  6. 26 7月, 2013 1 次提交
    • R
      new mostly-C crt1 implementation · c5e34dab
      Rich Felker 提交于
      the only immediate effect of this commit is enabling PIE support on
      some archs that did not previously have any Scrt1.s, since the
      existing asm files for crt1 override this C code. so some of the
      crt_arch.h files committed are only there for the sake of documenting
      what their archs "would do" if they used the new C-based crt1.
      
      the expectation is that new archs should use this new system rather
      than using heavy asm for crt1. aside from being easier and less
      error-prone, it also ensures that PIE support is available immediately
      (since Scrt1.o is generated from the same C source, using -fPIC)
      rather than having to be added as an afterthought in the porting
      process.
      c5e34dab
  7. 12 2月, 2011 1 次提交