1. 27 1月, 2016 1 次提交
    • S
      change the internal socketcall selection logic · a5e133bf
      Szabolcs Nagy 提交于
      only use SYS_socketcall if SYSCALL_USE_SOCKETCALL is defined
      internally, otherwise use direct syscalls.
      
      this commit does not change the current behaviour, it is
      preparation for adding direct syscall numbers for i386.
      a5e133bf
  2. 26 1月, 2016 12 次提交
    • R
      add ssp suppression to some arch-override files that may need it · f9b8df46
      Rich Felker 提交于
      these were not covered by the parent-level rules with the new build
      system. in the old build system, the equivalent files were often in
      arch/$(ARCH)/src and likewise lacked the suppression. this could lead
      to early crashing (before thread pointer init) when libc itself was
      built with stack protector enabled.
      f9b8df46
    • R
      use same object files for libc.a and libc.so if compiler produces PIC · 1619127c
      Rich Felker 提交于
      now that .lo and .o files differ only by whether -fPIC is passed (and
      no longer at the source level based on the SHARED macro), it's
      possible to use the same object files for both static and shared libc
      when the compiler would produce PIC for the static files anyway. this
      happens if the user has included -fPIC in their CFLAGS or if the
      compiler has been configured to produce PIE by default.
      
      we use the .lo files for both, and still append -fPIC to the CFLAGS,
      rather than using the .o files so that libc.so does not break
      catastrophically if the user later removes -fPIC from CFLAGS in
      config.mak or on the make command line. this also ensures that we get
      full -fPIC in case -fpic, -fPIE, or some other lesser-PIC option was
      passed in CFLAGS.
      1619127c
    • 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
    • R
      adapt static dl_iterate_phdr not to depend on !defined(SHARED) · 16f70388
      Rich Felker 提交于
      like elsewhere, use a weak alias that the dynamic linker will override
      with a more complete version capable of handling shared libraries.
      16f70388
    • R
      move static-linked stub dlsym out of dynlink.c · 4058795d
      Rich Felker 提交于
      the function name is still __-prefixed because it requires an asm
      wrapper to pass the caller's address in order for RTLD_NEXT to work.
      
      since this was the last function in dynlink.c still used for static
      linking, now the whole file is conditional on SHARED being defined.
      4058795d
    • R
      move static-linked stub dlopen out of dynlink.c · 14469371
      Rich Felker 提交于
      14469371
    • R
      move dlinfo out of dynlink.c · b9841473
      Rich Felker 提交于
      b9841473
    • R
      move dlclose out of dynlink.c to its own source file · da1fe7f5
      Rich Felker 提交于
      da1fe7f5
    • R
    • R
      move static/stub version of dladdr out of dynlink.c · 4f8f0380
      Rich Felker 提交于
      4f8f0380
    • R
      factor dlerror and error-setting code out of dynlink.c · a4fbc82c
      Rich Felker 提交于
      the ultimate goal of this change is to get all code used in libc.a out
      of dynlink.c, so that the dynamic linker code can be moved to its own
      tree and object files in the src tree can all be shared between libc.a
      and libc.so.
      a4fbc82c
    • R
      fix arm a_crash for big endian · e7a11189
      Rich Felker 提交于
      contrary to commit 89e149d2, big
      endian arm does need the instruction bytes in big endian order. rather
      than trying to use a special encoding that works as arm or thumb,
      simply encode the simplest/canonical undefined instructions dependent
      on whether __thumb__ is defined.
      e7a11189
  3. 25 1月, 2016 10 次提交
    • R
      add native a_crash primitive for arm · 89e149d2
      Rich Felker 提交于
      the .byte directive encodes a guaranteed-undefined instruction, the
      same one Linux fills the kuser helper page with when it's disabled.
      the udf mnemonic and and .insn directives are not supported by old
      binutils versions, and larger-than-byte integer directives would
      produce the wrong output on big-endian.
      89e149d2
    • S
      add new IP_BIND_ADDRESS_NO_PORT and IPPROTO_MPLS to netinet/in.h · 2c9acc51
      Szabolcs Nagy 提交于
      IP_BIND_ADDRESS_NO_PORT is a SOL_IP socket option to delay src port
      allocation until connect in case src ip is set with bind(port=0).
      new in linux v4.2, commit 90c337da1524863838658078ec34241f45d8394d
      
      IPPROTO_MPLS protocol number for mpls over ip.
      new in linux v4.2, commit 730fc4371333636a00fed32c587fc1e85c5367e2
      2c9acc51
    • S
      update netinet/tcp.h for linux v4.2 · 4da2d965
      Szabolcs Nagy 提交于
      TCP_CC_INFO is a new socket option to get congestion control info without
      netlink (union tcp_cc_info is in linux/inet_diag.h kernel header).
      linux commit 6e9250f59ef9efb932c84850cd221f22c2a03c4a
      
      TCP_SAVE_SYN, TCP_SAVED_SYN socket options are for saving and getting the
      SYN headers of passive connections in a server application.
      linux commit cd8ae85299d54155702a56811b2e035e63064d3d
      
      Add new tcpi_* fields to struct tcp_info implementing RFC4898 counters.
      linux commit 2efd055c53c06b7e89c167c98069bab9afce7e59
      4da2d965
    • S
      add MS_LAZYTIME mount option to sys/mount.h · ecf02f4e
      Szabolcs Nagy 提交于
      new in linux 4.0 commit 0ae45f63d4ef8d8eeec49c7d8b44a1775fff13e8,
      used to update atime/mtime/ctime only in memory when possible.
      ecf02f4e
    • S
      add AF_MPLS (PF_MPLS) address family to socket.h · 9f52c17e
      Szabolcs Nagy 提交于
      new in linux 4.0 commit 0189197f441602acdca3f97750d392a895b778fd.
      9f52c17e
    • S
      add MSG_FASTOPEN sendmsg/sendto flag to socket.h · ea4fc27d
      Szabolcs Nagy 提交于
      This was new in linux 3.5 in commit cf60af03ca4e71134206809ea892e49b92a88896,
      needed for tcp fastopen feature (sending data in TCP SYN packet).
      ea4fc27d
    • S
      clean powerpc syscall.h · bc443c3f
      Szabolcs Nagy 提交于
      remove ifdefs for powerpc64.
      bc443c3f
    • S
      add missing powerpc specific PROT_SAO memory protection flag · f9c3a2e0
      Szabolcs Nagy 提交于
      this flag for strong access ordering was added in linux v2.6.27
      commit aba46c5027cb59d98052231b36efcbbde9c77a1d
      f9c3a2e0
    • S
      fix powerpc MCL_* mlockall flags in bits/mman.h · 2f6f3dcc
      Szabolcs Nagy 提交于
      the definitions didn't match the linux uapi headers.
      2f6f3dcc
    • S
      fix aarch64 atomics to load/store 32bit only · 2d14fa39
      Szabolcs Nagy 提交于
      a_ll/a_sc inline asm used 64bit register operands (%0) instead of 32bit
      ones (%w0), this at least broke a_and_64 (which always cleared the top
      32bit, leaking memory in malloc).
      2d14fa39
  4. 24 1月, 2016 1 次提交
    • R
      improve aarch64 atomics · b17fbd35
      Rich Felker 提交于
      aarch64 provides ll/sc variants with acquire/release memory order,
      freeing us from the need to have full barriers both before and after
      the ll/sc operation. previously they were not used because the a_cas
      can fail without performing a_sc, in which case half of the barrier
      would be omitted. instead, define a custom version of a_cas for
      aarch64 which uses a_barrier explicitly when aborting the cas
      operation. aside from cas, other operations built on top of ll/sc are
      not affected since they never abort but rather loop until they
      succeed.
      
      a split ll/sc version of the pointer-sized a_cas_p is also introduced
      using the same technique.
      
      patch by Szabolcs Nagy.
      b17fbd35
  5. 22 1月, 2016 15 次提交
    • R
      0f5eb3de
    • R
      remove arch/$(ARCH)/src from the build system · 5a2e8825
      Rich Felker 提交于
      the files that used to come from extra src dirs under the arch dir
      have all been removed or moved to appropriate places under the main
      src tree.
      5a2e8825
    • R
      remove sh port's __fpscr_values source file · 4de1bc11
      Rich Felker 提交于
      commit f3ddd173, the dynamic linker
      bootstrap overhaul, silently disabled the definition of __fpscr_values
      in this file since libc.so's copy of __fpscr_values now comes from
      crt_arch.h, the same place the public definition in the main program's
      crt1.o ultimately comes from. remove this file which is no longer in
      use.
      4de1bc11
    • R
    • R
      230bfe1a
    • R
      move x32 sysinfo impl and syscall fixup code out of arch/x32/src · 66215afc
      Rich Felker 提交于
      all such arch-specific translation units are being moved to
      appropriate arch dirs under the main src tree.
      66215afc
    • R
      overhaul powerpc atomics for new atomics framework · 513c0436
      Rich Felker 提交于
      previously powerpc had a_cas defined in terms of its native ll/sc
      style operations, but all other atomics were defined in terms of
      a_cas. instead define a_ll and a_sc so the compiler can generate
      optimized versions of all the atomic ops and perform better inlining
      of a_cas.
      
      extracting the result of the sc (stwcx.) instruction is rather awkward
      because it's natively stored in a condition flag, which is not
      representable in inline asm. but even with this limitation the new
      code still seems significantly better.
      513c0436
    • R
      clean up x86_64 (and x32) atomics for new atomics framework · 16b55298
      Rich Felker 提交于
      this commit mostly makes consistent things like spacing, function
      ordering in atomic_arch.h, argument names, use of volatile, etc.
      a_ctz_l was also removed from x86_64 since atomic.h provides it
      automatically using a_ctz_64.
      16b55298
    • R
      clean up i386 atomics for new atomics framework · e24984ef
      Rich Felker 提交于
      this commit mostly makes consistent things like spacing, function
      ordering in atomic_arch.h, argument names, use of volatile, etc. the
      fake 64-bit and/or atomics are also removed because the shared
      atomic.h does a better job of implementing them; it avoids making two
      atomic memory accesses when only one 32-bit half needs to be touched.
      
      no major overhaul is needed or possible because x86 actually has
      native versions of all the usual atomic operations, rather than using
      ll/sc or needing cas loops.
      e24984ef
    • R
      overhaul mips atomics for new atomics framework · 369b22f9
      Rich Felker 提交于
      369b22f9
    • R
      move arm-specific translation units out of arch/arm/src, to src/*/arm · e617b9ee
      Rich Felker 提交于
      this is possible with the new build system that allows src/*/$(ARCH)/*
      files which do not shadow a file in the parent directory, and yields a
      more logical organization. eventually it will be possible to remove
      arch/*/src from the build system.
      e617b9ee
    • R
      overhaul arm atomics for new atomics framework · 397f0a6a
      Rich Felker 提交于
      switch to ll/sc model so that new atomic.h can provide optimized
      versions of all the atomic primitives without needing an ll/sc loop
      written in asm for each one.
      
      all isa levels which use ldrex/strex now use the inline ll/sc model
      even if the type of barrier to use is not known until runtime (v6).
      the cas model is only used for arm v5 and earlier, and it has been
      optimized to make the call via inline asm with custom constraints
      rather than as a C function call.
      397f0a6a
    • R
      overhaul aarch64 atomics for new atomics framework · aa0db4b5
      Rich Felker 提交于
      aa0db4b5
    • R
      overhaul sh atomics for new atomics framework, add j-core cas.l backend · 61b1e75f
      Rich Felker 提交于
      sh needs runtime-selected atomic backends since there are a number of
      supported models that use non-forwards-compatible (non-smp-compatible)
      atomic mechanisms. previously, the code paths for this were highly
      inefficient since they involved C function calls with multiple
      branches in the callee and heavy spills in the caller. the new code
      performs calls the runtime-selected asm fragment from inline asm with
      extremely minimal clobbers, rather than using a function call.
      
      for the sh4a case where the atomic mechanism is known and there is no
      forward-compatibility issue, the movli.l and movco.l instructions are
      provided as a_ll and a_sc, allowing the new shared atomic.h to
      generate efficient inline versions of all the basic atomic operations
      without needing a cas loop.
      61b1e75f
    • R
      refactor internal atomic.h · 1315596b
      Rich Felker 提交于
      rather than having each arch provide its own atomic.h, there is a new
      shared atomic.h in src/internal which pulls arch-specific definitions
      from arc/$(ARCH)/atomic_arch.h. the latter can be extremely minimal,
      defining only a_cas or new ll/sc type primitives which the shared
      atomic.h will use to construct everything else.
      
      this commit avoids making heavy changes to the individual archs'
      atomic implementations. definitions which are identical or
      near-identical to what the new shared atomic.h would produce have been
      removed, but otherwise the changes made are just hooking up the
      arch-specific files to the new infrastructure. major changes to take
      advantage of the new system will come in subsequent commits.
      1315596b
  6. 21 1月, 2016 1 次提交