1. 25 5月, 2015 1 次提交
    • R
      fix stack alignment code in mips crt_arch.h · 9f26ebde
      Rich Felker 提交于
      the instruction used to align the stack, "and $sp, $sp, -8", does not
      actually exist; it's expanded to 2 instructions using the 'at'
      (assembler temporary) register, and thus cannot be used in a branch
      delay slot. since alignment mod 16 commutes with subtracting 8, simply
      swapping these two operations fixes the problem.
      
      crt1.o was not affected because it's still being generated from a
      dedicated asm source file. dlstart.lo was not affected because the
      stack pointer it receives is already aligned by the kernel. but
      Scrt1.o was affected in cases where the dynamic linker gave it a
      misaligned stack pointer.
      9f26ebde
  2. 22 5月, 2015 1 次提交
    • R
      add .text section directive to all crt_arch.h files missing it · 63caf1d2
      Rich Felker 提交于
      i386 and x86_64 versions already had the .text directive; other archs
      did not. normally, top-level (file scope) __asm__ starts in the .text
      section anyway, but problems were reported with some versions of
      clang, and it seems preferable to set it explicitly anyway, at least
      for the sake of consistency between archs.
      63caf1d2
  3. 18 4月, 2015 1 次提交
  4. 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
  5. 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