1. 09 9月, 2020 1 次提交
  2. 26 6月, 2019 1 次提交
    • R
      remove unnecessary and problematic _Noreturn from crt/ldso startup · 54b7564b
      Rich Felker 提交于
      after commit a48ccc15 removed the use
      of _Noreturn on the stage3_func type (which only worked due to it
      being defined to the "GNU C" attribute in C99 mode), GCC could no
      longer assume that the ends of __dls2 and __dls2b are unreachable, and
      produced a warning that a function marked _Noreturn returns.
      
      also, since commit 4390383b, the
      _Noreturn declaration for __libc_start_main in crt1/rcrt1 has been not
      only inconsistent with the definition, but wrong. formally,
      __libc_start_main does return, via a (hopefully) tail call to a helper
      function after the barrier. incorrect usage of _Noreturn in the
      declaration was probably formal UB.
      
      the _Noreturn specifiers were not useful in any of these places, so
      remove them all. now, the only remaining usage of _Noreturn is in
      public interfaces where _Noreturn is part of their contract.
      54b7564b
  3. 06 9月, 2018 1 次提交
    • R
      define and use internal macros for hidden visibility, weak refs · 9b95fd09
      Rich Felker 提交于
      this cleans up what had become widespread direct inline use of "GNU C"
      style attributes directly in the source, and lowers the barrier to
      increased use of hidden visibility, which will be useful to recovering
      some of the efficiency lost when the protected visibility hack was
      dropped in commit dc2f368e, especially
      on archs where the PLT ABI is costly.
      9b95fd09
  4. 12 11月, 2016 1 次提交
  5. 09 5月, 2016 1 次提交
  6. 18 4月, 2016 1 次提交
  7. 07 3月, 2016 1 次提交
    • R
      add mips64 port · 83933573
      Rich Felker 提交于
      patch by Mahesh Bodapati and Jaydeep Patil of Imagination
      Technologies.
      83933573
  8. 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
  9. 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
  10. 10 11月, 2015 2 次提交
    • R
      explicitly assemble all arm asm sources as UAL · 4e73d121
      Rich Felker 提交于
      these files are all accepted as legacy arm syntax when producing arm
      code, but legacy syntax cannot be used for producing thumb2 with
      access to the full ISA. even after switching to UAL, some asm source
      files contain instructions which are not valid in thumb mode, so these
      will need to be addressed separately.
      4e73d121
    • R
      remove non-working pre-armv4t support from arm asm · 9f290a49
      Rich Felker 提交于
      the idea of the three-instruction sequence being removed was to be
      able to return to thumb code when used on armv4t+ from a thumb caller,
      but also to be able to run on armv4 without the bx instruction
      available (in which case the low bit of lr would always be 0).
      however, without compiler support for generating such a sequence from
      C code, which does not exist and which there is unlikely to be
      interest in implementing, there is little point in having it in the
      asm, and it would likely be easier to add pre-armv4t support via
      enhanced linker handling of R_ARM_V4BX than at the compiler level.
      
      removing this code simplifies adding support for building libc in
      thumb2-only form (for cortex-m).
      9f290a49
  11. 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
  12. 15 10月, 2015 1 次提交
    • R
      remove hand-written crt1.s and Scrt1.s files for all archs · 6fef8caf
      Rich Felker 提交于
      since commit c5e34dab, crt1.c has
      provided a "mostly-C" implementation of the crt1 start file that
      avoids the need for arch-specific symbol referencing, PIC/PIE-specific
      code variants, etc. but for archs that had existing hand-written
      versions, the new code was initially unused, and later only used as
      the dynamic linker entry point. this commit switches all archs to
      using the new code.
      
      the code being removed was a recurring source of subtle errors, and
      was still broken at least on arm, where it failed to properly align
      the stack pointer before calling into C code.
      6fef8caf
  13. 12 9月, 2015 1 次提交
  14. 26 5月, 2015 2 次提交
    • 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
    • R
      mark mips crt code as code · 967bcbf6
      Rich Felker 提交于
      otherwise disassemblers treat it as data.
      967bcbf6
  15. 28 4月, 2015 1 次提交
  16. 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
  17. 12 3月, 2015 1 次提交
    • S
      add aarch64 port · 01ef3dd9
      Szabolcs Nagy 提交于
      This adds complete aarch64 target support including bigendian subarch.
      
      Some of the long double math functions are known to be broken otherwise
      interfaces should be fully functional, but at this point consider this
      port experimental.
      
      Initial work on this port was done by Sireesh Tripurari and Kevin Bortis.
      01ef3dd9
  18. 19 7月, 2014 1 次提交
    • S
      add or1k (OpenRISC 1000) architecture port · 200d1547
      Stefan Kristiansson 提交于
      With the exception of a fenv implementation, the port is fully featured.
      The port has been tested in or1ksim, the golden reference functional
      simulator for OpenRISC 1000.
      It passes all libc-test tests (except the math tests that
      requires a fenv implementation).
      
      The port assumes an or1k implementation that has support for
      atomic instructions (l.lwa/l.swa).
      
      Although it passes all the libc-test tests, the port is still
      in an experimental state, and has yet experienced very little
      'real-world' use.
      200d1547
  19. 24 2月, 2014 1 次提交
  20. 23 2月, 2014 1 次提交
  21. 16 8月, 2013 1 次提交
    • R
      add function types to arm crt assembly · badaa04a
      Rich Felker 提交于
      without these, calls may be resolved incorrectly if the calling code
      has been compiled to thumb instead of arm. it's not clear to me at
      this point whether crt_arch.h is even working if crt1.c is built as
      thumb; this needs testing. but the _init and _fini issues were known
      to cause crashes in static-linked apps when libc was built as thumb,
      and this commit should fix that issue.
      badaa04a
  22. 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
  23. 21 7月, 2013 1 次提交
  24. 11 7月, 2013 1 次提交
  25. 04 6月, 2013 1 次提交
  26. 03 2月, 2013 1 次提交
  27. 08 12月, 2012 1 次提交
    • R
      add support for ctors/dtors on arm with modern gcc · 34aa169d
      Rich Felker 提交于
      a while back, gcc switched from using the old _init/_fini fragments
      method for calling ctors and dtors on arm to the __init_array and
      __fini_array method. unfortunately, on glibc this depends on ugly
      hacks involving making libc.so a linker script and pulling parts of
      libc into the main program binary. so I cheat a little bit, and just
      write asm to iterate over the init/fini arrays from the _init/_fini
      asm. the same approach could be used on any arch it's needed on, but
      for now arm is the only one.
      34aa169d
  28. 24 11月, 2012 1 次提交
  29. 14 11月, 2012 2 次提交
  30. 29 9月, 2012 1 次提交
    • R
      microblaze port · 8c0a3d9e
      Rich Felker 提交于
      based on initial work by rdp, with heavy modifications. some features
      including threads are untested because qemu app-level emulation seems
      to be broken and I do not have a proper system image for testing.
      8c0a3d9e
  31. 18 8月, 2012 1 次提交
    • R
      crt1 must align stack pointer on mips · 259071c2
      Rich Felker 提交于
      it's naturally aligned when entered with the kernel argv array, but if
      ld.so has been invoked explicitly to run a program, the stack will not
      be aligned due to having thrown away argv[0].
      259071c2
  32. 06 8月, 2012 1 次提交
    • R
      align mips _init/_fini functions · 32e7bd78
      Rich Felker 提交于
      since .init and .fini are not .text, the toolchain does not seem to
      align them for code by default. this yields random breakage depending
      on the object sizes the linker is dealing with.
      32e7bd78
  33. 11 7月, 2012 1 次提交
    • R
      initial version of mips (o32) port, based on work by Richard Pennington (rdp) · 6315004f
      Rich Felker 提交于
      basically, this version of the code was obtained by starting with
      rdp's work from his ellcc source tree, adapting it to musl's build
      system and coding style, auditing the bits headers for discrepencies
      with kernel definitions or glibc/LSB ABI or large file issues, fixing
      up incompatibility with the old binutils from aboriginal linux, and
      adding some new special cases to deal with the oddities of sigaction
      and pipe syscall interfaces on mips.
      
      at present, minimal test programs work, but some interfaces are broken
      or missing. threaded programs probably will not link.
      6315004f
  34. 26 6月, 2012 1 次提交
    • R
      fix arm crti/crtn code · 9abab94b
      Rich Felker 提交于
      lr must be saved because init/fini-section code from the compiler
      clobbers it. this was not a problem when i tested without gcc's
      crtbegin/crtend files present, but with them, musl on arm fails to
      work (infinite loop in _init).
      9abab94b
  35. 03 5月, 2012 3 次提交