0003-core-special-value-for-Linux-POLLRDHUP-on-SPARC-fixe.patch 2.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485
  1. From 524614455554163ec78b27b89ff52bbf7fe96958 Mon Sep 17 00:00:00 2001
  2. From: Glenn Strauss <gstrauss@gluelogic.com>
  3. Date: Wed, 24 Apr 2024 03:07:37 -0400
  4. Subject: [PATCH] [core] special value for Linux POLLRDHUP on SPARC (fixes
  5. #3251)
  6. x-ref:
  7. "[1.4.76] buildroot compile error with bootlin-sparc{64-g,-uc}libc"
  8. https://redmine.lighttpd.net/issues/3251
  9. Signed-off-by: Waldemar Brodkorb <wbx@openadk.org>
  10. Upstream: https://redmine.lighttpd.net/projects/lighttpd/repository/14/revisions/524614455554163ec78b27b89ff52bbf7fe96958
  11. ---
  12. src/fdevent.h | 2 ++
  13. src/fdevent_impl.c | 18 ++++++++++++++++++
  14. 2 files changed, 20 insertions(+)
  15. diff --git a/src/fdevent.h b/src/fdevent.h
  16. index 1b0a062f..556a1445 100644
  17. --- a/src/fdevent.h
  18. +++ b/src/fdevent.h
  19. @@ -40,6 +40,8 @@ struct fdnode_st {
  20. #if (defined(__sun) && defined(__SVR4)) /* Solaris */ \
  21. || defined(__FreeBSD__)
  22. #define FDEVENT_RDHUP 0x4000
  23. +#elif (defined(__linux__) && (defined(__sparc__) || defined(__sparc)))
  24. +#define FDEVENT_RDHUP 0x2800 /*(0x2000 EPOLLRDHUP | 0x0800 POLLRDHUP)*/
  25. #else
  26. #define FDEVENT_RDHUP 0x2000
  27. #endif
  28. diff --git a/src/fdevent_impl.c b/src/fdevent_impl.c
  29. index 8bfc1cc6..c84c8df5 100644
  30. --- a/src/fdevent_impl.c
  31. +++ b/src/fdevent_impl.c
  32. @@ -338,6 +338,11 @@ fdevent_linux_sysepoll_event_set (fdevents *ev, fdnode *fdn, int events)
  33. struct epoll_event ep;
  34. #ifndef EPOLLRDHUP
  35. events &= ~FDEVENT_RDHUP;
  36. + #elif (defined(__linux__) && (defined(__sparc__) || defined(__sparc)))
  37. + if (events & FDEVENT_RDHUP) {
  38. + events &= ~FDEVENT_RDHUP;
  39. + events |= EPOLLRDHUP;
  40. + }
  41. #endif
  42. ep.events = events | EPOLLERR | EPOLLHUP;
  43. ep.data.ptr = fdn;
  44. @@ -376,7 +381,11 @@ fdevent_linux_sysepoll_init (fdevents *ev)
  45. ck_static_assert(EPOLLERR == FDEVENT_ERR);
  46. ck_static_assert(EPOLLHUP == FDEVENT_HUP);
  47. #ifdef EPOLLRDHUP
  48. + #if (defined(__linux__) && (defined(__sparc__) || defined(__sparc)))
  49. + ck_static_assert(EPOLLRDHUP & FDEVENT_RDHUP);
  50. + #else
  51. ck_static_assert(EPOLLRDHUP == FDEVENT_RDHUP);
  52. + #endif
  53. #endif
  54. ev->type = FDEVENT_HANDLER_LINUX_SYSEPOLL;
  55. @@ -770,6 +779,11 @@ fdevent_poll_event_set (fdevents *ev, fdnode *fdn, int events)
  56. #ifndef POLLRDHUP
  57. events &= ~FDEVENT_RDHUP;
  58. + #elif (defined(__linux__) && (defined(__sparc__) || defined(__sparc)))
  59. + if (events & FDEVENT_RDHUP) {
  60. + events &= ~FDEVENT_RDHUP;
  61. + events |= POLLRDHUP;
  62. + }
  63. #endif
  64. if (k >= 0) {
  65. @@ -854,7 +868,11 @@ fdevent_poll_init (fdevents *ev)
  66. ck_static_assert(POLLHUP == FDEVENT_HUP);
  67. ck_static_assert(POLLNVAL == FDEVENT_NVAL);
  68. #ifdef POLLRDHUP
  69. + #if (defined(__linux__) && (defined(__sparc__) || defined(__sparc)))
  70. + ck_static_assert(POLLRDHUP & FDEVENT_RDHUP);
  71. + #else
  72. ck_static_assert(POLLRDHUP == FDEVENT_RDHUP);
  73. + #endif
  74. #endif
  75. ev->type = FDEVENT_HANDLER_POLL;
  76. --
  77. 2.30.2