0005-RISC-V-Expand-PTHREAD_STACK_MIN-to-support-RVV-envir.patch 4.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293
  1. From 200ea75b0643350a162a22d3a7fa1f1a056337c1 Mon Sep 17 00:00:00 2001
  2. From: Vincent Chen <vincent.chen@sifive.com>
  3. Date: Mon, 13 Sep 2021 09:41:18 +0800
  4. Subject: [PATCH 5/8] RISC-V: Expand PTHREAD_STACK_MIN to support RVV
  5. environment
  6. In order to support all pthread operations in the RVV environment, here
  7. PTHREAD_STACK_MIN is set to 4 times GLRO(dl_minsigstacksize), and the
  8. default PTHREAD_STACK_MIN is expanded to 20K bytes.
  9. Signed-off-by: max.ma <max.ma@starfivetech.com>
  10. ---
  11. .../sysv/linux/riscv/bits/pthread_stack_min.h | 21 ++++++++++
  12. .../linux/riscv/sysconf-pthread_stack_min.h | 39 +++++++++++++++++++
  13. 2 files changed, 60 insertions(+)
  14. create mode 100644 sysdeps/unix/sysv/linux/riscv/bits/pthread_stack_min.h
  15. create mode 100644 sysdeps/unix/sysv/linux/riscv/sysconf-pthread_stack_min.h
  16. diff --git a/sysdeps/unix/sysv/linux/riscv/bits/pthread_stack_min.h b/sysdeps/unix/sysv/linux/riscv/bits/pthread_stack_min.h
  17. new file mode 100644
  18. index 0000000000..83585b39f3
  19. --- /dev/null
  20. +++ b/sysdeps/unix/sysv/linux/riscv/bits/pthread_stack_min.h
  21. @@ -0,0 +1,21 @@
  22. +/* Definition of PTHREAD_STACK_MIN. Linux/riscv version.
  23. + Copyright (C) 2021 Free Software Foundation, Inc.
  24. +
  25. + This file is part of the GNU C Library.
  26. +
  27. + The GNU C Library is free software; you can redistribute it and/or
  28. + modify it under the terms of the GNU Lesser General Public License as
  29. + published by the Free Software Foundation; either version 2.1 of the
  30. + License, or (at your option) any later version.
  31. +
  32. + The GNU C Library is distributed in the hope that it will be useful,
  33. + but WITHOUT ANY WARRANTY; without even the implied warranty of
  34. + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
  35. + Lesser General Public License for more details.
  36. +
  37. + You should have received a copy of the GNU Lesser General Public
  38. + License along with the GNU C Library. If not, see
  39. + <https://www.gnu.org/licenses/>. */
  40. +
  41. +/* Minimum size for a thread. We are free to choose a reasonable value. */
  42. +#define PTHREAD_STACK_MIN 20480
  43. diff --git a/sysdeps/unix/sysv/linux/riscv/sysconf-pthread_stack_min.h b/sysdeps/unix/sysv/linux/riscv/sysconf-pthread_stack_min.h
  44. new file mode 100644
  45. index 0000000000..53ba6a1142
  46. --- /dev/null
  47. +++ b/sysdeps/unix/sysv/linux/riscv/sysconf-pthread_stack_min.h
  48. @@ -0,0 +1,39 @@
  49. +/* __get_pthread_stack_min (). Linux version.
  50. + Copyright (C) 2021 Free Software Foundation, Inc.
  51. + This file is part of the GNU C Library.
  52. +
  53. + The GNU C Library is free software; you can redistribute it and/or
  54. + modify it under the terms of the GNU Lesser General Public
  55. + License as published by the Free Software Foundation; either
  56. + version 2.1 of the License, or (at your option) any later version.
  57. +
  58. + The GNU C Library is distributed in the hope that it will be useful,
  59. + but WITHOUT ANY WARRANTY; without even the implied warranty of
  60. + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
  61. + Lesser General Public License for more details.
  62. +
  63. + You should have received a copy of the GNU Lesser General Public
  64. + License along with the GNU C Library; if not, see
  65. + <https://www.gnu.org/licenses/>. */
  66. +
  67. +/* Return sysconf (_SC_THREAD_STACK_MIN). */
  68. +
  69. +static inline long int
  70. +__get_pthread_stack_min (void)
  71. +{
  72. + /* sysconf (_SC_THREAD_STACK_MIN) >= sysconf (_SC_MINSIGSTKSZ). */
  73. + long int pthread_stack_min = GLRO(dl_minsigstacksize) * 4;
  74. + assert (pthread_stack_min != 0);
  75. + _Static_assert (__builtin_constant_p (PTHREAD_STACK_MIN),
  76. + "PTHREAD_STACK_MIN is constant");
  77. + /* Return MAX (PTHREAD_STACK_MIN, pthread_stack_min). */
  78. + if (pthread_stack_min < PTHREAD_STACK_MIN)
  79. + pthread_stack_min = PTHREAD_STACK_MIN;
  80. + /* We have a private interface, __pthread_get_minstack@GLIBC_PRIVATE
  81. + which returns a larger size that includes the required TLS variable
  82. + space which has been determined at startup. For sysconf here we are
  83. + conservative and don't include the space required for TLS access.
  84. + Eventually the TLS variable space will not be part of the stack
  85. + (Bug 11787). */
  86. + return pthread_stack_min;
  87. +}
  88. --
  89. 2.33.1