1. 09 9月, 2020 1 次提交
  2. 04 2月, 2020 1 次提交
    • R
      move riscv64 register index constants to signal.h · 329e7929
      Rich Felker 提交于
      under _GNU_SOURCE for namespace cleanliness, analogous to other archs.
      the original placement in sys/reg.h seems not to have been motivated;
      such a header isn't even present on other implementations.
      329e7929
  3. 23 1月, 2020 1 次提交
    • L
      fix riscv64 a_cas inline asm operand sign extension · 83350eb1
      Luís Marques 提交于
      This patch adds an explicit cast to the int arguments passed to the
      inline asm used in the RISC-V's implementation of `a_cas`, to ensure
      that they are properly sign extended to 64 bits. They aren't
      automatically sign extended by Clang, and GCC technically also doesn't
      guarantee that they will be sign extended.
      83350eb1
  4. 31 12月, 2019 2 次提交
    • S
      add clone3 syscall number from linux v5.3 · fa765ca5
      Szabolcs Nagy 提交于
      the syscall number is reserved on all targets, but it is not wired up
      on all targets, see
      
        linux commit 8f6ccf6159aed1f04c6d179f61f6fb2691261e84
        Merge tag 'clone3-v5.3' of ... brauner/linux
      
        linux commit 8f3220a806545442f6f26195bc491520f5276e7c
        arch: wire-up clone3() syscall
      
        linux commit 7f192e3cd316ba58c88dfa26796cf77789dd9872
        fork: add clone3
      fa765ca5
    • S
      add pidfd_open syscall number from linux v5.3 · a4528911
      Szabolcs Nagy 提交于
      see
      
        linux commit 7615d9e1780e26e0178c93c55b73309a5dc093d7
        arch: wire-up pidfd_open()
      
        linux commit 32fcb426ec001cb6d5a4a195091a8486ea77e2df
        pid: add pidfd_open()
      a4528911
  5. 03 11月, 2019 2 次提交
    • R
      move time_t and suseconds_t definitions to common alltypes.h.in · d6dcfe4d
      Rich Felker 提交于
      now that all 32-bit archs have 64-bit time_t (and suseconds_t), the
      arch-provided _Int64 macro (long or long long, as appropriate) can be
      used to define them, and arch-specific definitions are no longer
      needed.
      d6dcfe4d
    • R
      move msghdr and cmsghdr out of bits/socket.h · a0252bc7
      Rich Felker 提交于
      these structures can now be defined generically in terms of endianness
      and long size. previously, the 32-bit archs all shared a common
      definition from the generic bits header, and each 64-bit arch had to
      repeat the 64-bit version, with endian conditionals if the arch had
      variants of each endianness.
      
      I would prefer getting rid of the preprocessor conditionals for
      padding and instead using unnamed bitfield members, like commit
      9b2921be did for struct timespec.
      however, at present sendmsg, recvmsg, and recvmmsg need access to the
      padding members by name to zero them. this could perhaps be cleaned up
      in the future.
      a0252bc7
  6. 18 10月, 2019 5 次提交
    • R
      move pthread types out of per-arch alltypes.h · 2d3083e7
      Rich Felker 提交于
      policy has long been that these definitions are purely a function of
      whether long/pointer is 32- or 64-bit, and that they are not allowed
      to vary per-arch. move the definition to the shared alltypes.h.in
      fragment, using integer constant expressions in terms of sizeof to
      vary the array dimensions appropriately. I'm not sure whether this is
      more or less ugly than using preprocessor conditionals and two sets of
      definitions here, but either way is a lot less ugly than repeating the
      same thing for every arch.
      2d3083e7
    • R
      define LONG_MAX via arch alltypes.h, strip down bits/limits.h · 7cc79d10
      Rich Felker 提交于
      LLONG_MAX is uniform for all archs we support and plenty of header and
      code level logic assumes it is, so it does not make sense for limits.h
      bits mechanism to pretend it's variable.
      
      LONG_BIT can be defined in terms of LONG_MAX; there's no reason to put
      it in bits.
      
      by moving LONG_MAX definition to __LONG_MAX in alltypes.h and moving
      LLONG_MAX out of bits, there are now no plain-C limits that are
      defined in the bits header, so the bits header only needs to be
      included in the POSIX or extended profiles. this allows the feature
      test macro logic to be removed from the bits header, facilitating a
      long-term goal of getting such logic out of bits.
      
      having __LONG_MAX in alltypes.h will allow further generalization of
      headers.
      
      archs without a constant PAGESIZE no longer need bits/limits.h at all.
      7cc79d10
    • R
      remove indirect use of endian.h from public headers · 71d23fbe
      Rich Felker 提交于
      building on commit 97d35a55,
      __BYTE_ORDER is now available wherever alltypes.h is included.
      endian.h should not be used since, in the future, it will expose
      identifiers that are not in the reserved namespace for the headers
      which were previously using it.
      71d23fbe
    • R
      move __BYTE_ORDER definition to alltypes.h · 97d35a55
      Rich Felker 提交于
      this change is motivated by the intersection of several factors.
      presently, despite being a nonstandard header, endian.h is exposing
      the unprefixed byte order macros and functions only if _BSD_SOURCE or
      _GNU_SOURCE is defined. this is to accommodate use of endian.h from
      other headers, including bits headers, which need to define structure
      layout in terms of endianness. with time64 switch-over, even more
      headers will need to do this.
      
      at the same time, the resolution of Austin Group issue 162 makes
      endian.h a standard header for POSIX-future, requiring that it expose
      the unprefixed macros and the functions even in standards-conforming
      profiles. changes to meet this new requirement would break existing
      internal usage of endian.h by causing it to violate namespace where
      it's used.
      
      instead, have the arch's alltypes.h define __BYTE_ORDER, either as a
      fixed constant or depending on the right arch-specific predefined
      macros for determining endianness. explicit literals 1234 and 4321 are
      used instead of __LITTLE_ENDIAN and __BIG_ENDIAN so that there's no
      danger of getting the wrong result if a macro is undefined and
      implicitly evaluates to 0 at the preprocessor level.
      
      the powerpc (32-bit) bits/endian.h being removed had logic for varying
      endianness, but our powerpc arch has never supported that and has
      always been big-endian-only. this logic is not carried over to the new
      __BYTE_ORDER definition in alltypes.h.
      97d35a55
    • R
      remove per-arch definitions for va_list · 00ec11d1
      Rich Felker 提交于
      now that commit f7f10797 removed the
      legacy i386 conditional definition, va_list is in no way
      arch-specific, and has no reason to be in the future. move it to the
      shared part of alltypes.h.in
      00ec11d1
  7. 02 10月, 2019 1 次提交
    • R
      reintroduce riscv64 struct sigcontext · a0993f8f
      Rich Felker 提交于
      commit ab3eb89a removed it as part of
      correcting the mcontext_t definition, but there is still code using
      struct sigcontext and expecting the member names present in it, most
      notably libgcc_eh. almost all such usage is incorrect, but bring back
      struct sigcontext at least for now so as not to introduce regressions.
      a0993f8f
  8. 30 9月, 2019 2 次提交
    • R
      fix riscv64 elf_fpregset_t type and member names mismatch · 2c2477da
      Rich Felker 提交于
      in order for sys/procfs.h (provided by sys/user.h) to be useful, it
      needs to match the API its consumers (gdb, etc.) expect, including the
      member names established by glibc.
      
      this partly reverts commit 29e8737f,
      which partly reverted d493206d,
      eliminating struct user_fpregs_struct which seems to have had no
      precedent and using union __riscv_mc_fp_state for elf_fpregset_t. this
      requires indirect inclusion of signal.h to make union
      __riscv_mc_fp_state visible, but being that these are nonstandard
      "junk" headers with no official restrictions on what they can pull in,
      that's no big deal.
      
      split off and expanded from patch by Khem Raj.
      2c2477da
    • R
      fix riscv64 signal.h namespace violations and ucontext API mismatches · ab3eb89a
      Rich Felker 提交于
      the top-level mcontext_t member names were namespace-violating in
      standards profiles before, and nested-level member names (some of them
      single-letter) were egregiously bad namespace impositions even in
      non-strict profiles. moreover, they mismatched those used in the
      public API first defined in glibc, breaking any code making use of
      them.
      
      unlike most archs, the public API used in glibc for riscv mcontext_t
      members was designed to be namespace-safe, so we can and should expose
      the members regardless of feature test macros. only the typedefs for
      greg_t, gregset_t, and fpregset_t need to be protected behind FTMs.
      
      the struct tags for mcontext_t and ucontext_t are also changed. for
      mcontext_t this is necessary to make the common definition across
      profiles namespace-safe. for ucontext_t, it's just a matter of
      matching the tag from the glibc-defined API.
      
      these changes are split off and expanded from a patch by Khem Raj.
      ab3eb89a
  9. 26 9月, 2019 1 次提交
    • P
      correct the operand specifiers in the riscv64 CAS routines · 7d5c5706
      Palmer Dabbelt 提交于
      The operand sepcifiers in a_cas and a_cas_p for riscv64 were incorrect:
      there's a backwards branch in the routine, so despite tmp being written
      at the end of the assembly fragment it cannot be allocated in one of the
      input registers because the input values may be needed for another trip
      around the loop.
      
      For code that follows the guaranteed forward progress requirements, the
      backwards branch is rarely taken: SiFive's hardware only fails a store
      conditional on execptional cases (ie, instruction cache misses inside
      the loop), and until recently a bug in QEMU allowed back-to-back
      store conditionals to succeed.  The bug has been fixed in the latest
      QEMU release, but it turns out that the fix caused this latent bug in
      musl to manifest.
      7d5c5706
  10. 11 9月, 2019 1 次提交
    • S
      add new syscall numbers from linux v5.2 · b6076309
      Szabolcs Nagy 提交于
      new mount api syscalls were added, same numers on all targets, see
      
        linux commit a07b20004793d8926f78d63eb5980559f7813404
        vfs: syscall: Add open_tree(2) to reference or clone a mount
      
        linux commit 2db154b3ea8e14b04fee23e3fdfd5e9d17fbc6ae
        vfs: syscall: Add move_mount(2) to move mounts around
      
        linux commit 24dcb3d90a1f67fe08c68a004af37df059d74005
        vfs: syscall: Add fsopen() to prepare for superblock creation
      
        linux commit ecdab150fddb42fe6a739335257949220033b782
        vfs: syscall: Add fsconfig() for configuring and managing a context
      
        linux commit 93766fbd2696c2c4453dd8e1070977e9cd4e6b6d
        vfs: syscall: Add fsmount() to create a mount for a superblock
      
        linux commit cf3cba4a429be43e5527a3f78859b1bfd9ebc5fb
        vfs: syscall: Add fspick() to select a superblock for reconfiguration
      
        linux commit 9c8ad7a2ff0bfe58f019ec0abc1fb965114dde7d
        uapi, x86: Fix the syscall numbering of the mount API syscalls [ver #2]
      
        linux commit d8076bdb56af5e5918376cd1573a6b0007fc1a89
        uapi: Wire up the mount API syscalls on non-x86 arches [ver #2]
      b6076309
  11. 14 8月, 2019 1 次提交
  12. 07 8月, 2019 2 次提交
    • R
      remove riscv64 bits/user.h contents · d493206d
      Rich Felker 提交于
      the contents conflicted with asm/ptrace.h. glibc does not provide
      anything in user.h for riscv, so software cannot be depending on it.
      
      simplified from patch submitted by Baruch Siach.
      d493206d
    • B
      fix risc64 conflict with kernel headers · 8acc6885
      Baruch Siach 提交于
      Rename user registers struct definitions to avoid conflict with the
      asm/ptrace.h kernel header that defines the same structs. Use the
      __riscv_mc prefix as glibc does.
      8acc6885
  13. 04 8月, 2019 1 次提交
    • R
      update riscv64 syscall numbers to linux v5.1 · 6fcb440d
      Rich Felker 提交于
      commit f3f96f2d added these for the
      rest of the archs, but the patch it corresponded to missed riscv64
      since riscv64 was not yet upstream at the time. this caused commit
      dfc81828 to break riscv64 build, due
      to a wrong assumption that SYS_statx was unconditionally defined.
      6fcb440d
  14. 31 7月, 2019 2 次提交
    • R
      remove gratuitously-different arch-specific bits/ipc.h files · 319b2d02
      Rich Felker 提交于
      these differ from generic only in using endian-matched padding with a
      short __ipc_perm_seq field in place of the int field in generic. this
      is not a documented public interface anyway, and the original intent
      was to use int here. some ports just inadvertently slipped in the
      kernel short+padding form.
      319b2d02
    • R
      move IPC_64 from public bits/ipc.h to syscall_arch.h · f56d57f8
      Rich Felker 提交于
      the definition of the IPC_64 macro controls the interface between libc
      and the kernel through syscalls; it's not a public API. the meaning is
      rather obscure. long ago, Linux's sysvipc *id_ds structures used
      16-bit uids/gids and wrong types for a few other fields. this was in
      the libc5 era, before glibc. the IPC_64 flag (64 is a misnomer; it's
      more like 32) tells the kernel to use the modern[-ish] versions of the
      structures.
      
      the definition of IPC_64 has nothing to do with whether the arch is
      32- or 64-bit. rather, due to either historical accident or
      intentional obnoxiousness, the kernel only accepts and masks off the
      0x100 IPC_64 flag conditional on CONFIG_ARCH_WANT_IPC_PARSE_VERSION,
      i.e. for archs that want to provide, or that accidentally provided,
      both. for archs which don't define this option, no masking is
      performed and commands with the 0x100 bit set will fail as invalid. so
      ultimately, the definition is just a matter of matching an arbitrary
      switch defined per-arch in the kernel.
      f56d57f8
  15. 30 7月, 2019 4 次提交
    • R
      remove duplicates of new generic bits/msg.h · b74b3eb4
      Rich Felker 提交于
      b74b3eb4
    • R
      remove duplicates of new generic bits/sem.h · de5e56ce
      Rich Felker 提交于
      some of these were not exact duplicates, but had gratuitously
      different naming for padding, or omitted the endian checks because the
      arch is fixed-endian.
      de5e56ce
    • R
      extricate bits/sem.h from x32 time_t hack · 1afe5f3e
      Rich Felker 提交于
      various padding fields in the generic bits/sem.h were defined in terms
      of time_t as a cheap hack standing in for "kernel long", to allow x32
      to use the generic version of the file. this was a really bad idea, as
      it ended up getting copied into lots of arch-specific versions of the
      bits file, and is a blocker to changing time_t to 64-bit on 32-bit
      archs.
      
      this commit adds an x32-specific version of the header, and changes
      padding type back from time_t to long (currently the same type on all
      archs but x32) in the generic header and all the others the hack got
      copied into.
      1afe5f3e
    • R
      remove duplicates of new generic bits/shm.h · 484c34fe
      Rich Felker 提交于
      484c34fe
  16. 19 7月, 2019 1 次提交
    • R
      decouple struct stat from kernel type · 01ae3fc6
      Rich Felker 提交于
      presently, all archs/ABIs have struct stat matching the kernel
      stat[64] type, except mips/mipsn32/mips64 which do conversion hacks in
      syscall_arch.h to work around bugs in the kernel type. this patch
      completely decouples them and adds a translation step to the success
      path of fstatat. at present, this is just a gratuitous copying, but it
      opens up multiple possibilities for future support for 64-bit time_t
      on 32-bit archs and for cleaned-up/unified ABIs.
      
      for clarity, the mips hacks are not yet removed in this commit, so the
      mips kstat structs still correspond to the output of the hacks in
      their syscall_arch.h files, not the raw kernel type. a subsequent
      commit will fix this.
      01ae3fc6
  17. 18 7月, 2019 3 次提交
    • R
      use register constraint instead of memory operand for riscv64 atomics · f0eb2e77
      Rich Felker 提交于
      the "A" constraint is simply for an address expression that's a single
      register, but it's not yet supported by clang, and has no advantage
      here over just using a register operand for the address. the latter is
      actually preferable in the a_cas_p case because it avoids aliasing an
      lvalue onto the memory.
      f0eb2e77
    • R
      fix riscv64 atomic asm constraints · 2dcbeabd
      Rich Felker 提交于
      most egregious problem was the lack of memory clobber and lack of
      volatile asm; this made the atomics memory barriers but not compiler
      barriers. use of "+r" rather than "=r" for a clobbered temp was also
      wrong, since the initial value is indeterminate.
      2dcbeabd
    • R
      fix riscv64 syscall asm constraint · 8eb49e04
      Rich Felker 提交于
      having "+r"(a0) is redundant with "0"(a0) in syscalls with at least 1
      arg, which is arguably a constraint violation (clang treats it as
      such), and an invalid input with indeterminate value in the 0-arg
      case. use the "=r"(a0) form instead.
      8eb49e04
  18. 05 7月, 2019 1 次提交
  19. 15 6月, 2019 1 次提交
    • R
      add riscv64 architecture support · 0a48860c
      Rich Felker 提交于
      Author: Alex Suykov <alex.suykov@gmail.com>
      Author: Aric Belsito <lluixhi@gmail.com>
      Author: Drew DeVault <sir@cmpwn.com>
      Author: Michael Clark <mjc@sifive.com>
      Author: Michael Forney <mforney@mforney.org>
      Author: Stefan O'Rear <sorear2@gmail.com>
      
      This port has involved the work of many people over several years. I
      have tried to ensure that everyone with substantial contributions has
      been credited above; if any omissions are found they will be noted
      later in an update to the authors/contributors list in the COPYRIGHT
      file.
      
      The version committed here comes from the riscv/riscv-musl repo's
      commit 3fe7e2c75df78eef42dcdc352a55757729f451e2, with minor changes by
      me for issues found during final review:
      
      - a_ll/a_sc atomics are removed (according to the ISA spec, lr/sc
        are not safe to use in separate inline asm fragments)
      
      - a_cas[_p] is fixed to be a memory barrier
      
      - the call from the _start assembly into the C part of crt1/ldso is
        changed to allow for the possibility that the linker does not place
        them nearby each other.
      
      - DTP_OFFSET is defined correctly so that local-dynamic TLS works
      
      - reloc.h LDSO_ARCH logic is simplified and made explicit.
      
      - unused, non-functional crti/n asm files are removed.
      
      - an empty .sdata section is added to crt1 so that the
        __global_pointer reference is resolvable.
      
      - indentation style errors in some asm files are fixed.
      0a48860c