|
@@ -0,0 +1,85 @@
|
|
|
|
+From 524614455554163ec78b27b89ff52bbf7fe96958 Mon Sep 17 00:00:00 2001
|
|
|
|
+From: Glenn Strauss <gstrauss@gluelogic.com>
|
|
|
|
+Date: Wed, 24 Apr 2024 03:07:37 -0400
|
|
|
|
+Subject: [PATCH] [core] special value for Linux POLLRDHUP on SPARC (fixes
|
|
|
|
+ #3251)
|
|
|
|
+
|
|
|
|
+x-ref:
|
|
|
|
+ "[1.4.76] buildroot compile error with bootlin-sparc{64-g,-uc}libc"
|
|
|
|
+ https://redmine.lighttpd.net/issues/3251
|
|
|
|
+
|
|
|
|
+Signed-off-by: Waldemar Brodkorb <wbx@openadk.org>
|
|
|
|
+Upstream: https://redmine.lighttpd.net/projects/lighttpd/repository/14/revisions/524614455554163ec78b27b89ff52bbf7fe96958
|
|
|
|
+---
|
|
|
|
+ src/fdevent.h | 2 ++
|
|
|
|
+ src/fdevent_impl.c | 18 ++++++++++++++++++
|
|
|
|
+ 2 files changed, 20 insertions(+)
|
|
|
|
+
|
|
|
|
+diff --git a/src/fdevent.h b/src/fdevent.h
|
|
|
|
+index 1b0a062f..556a1445 100644
|
|
|
|
+--- a/src/fdevent.h
|
|
|
|
++++ b/src/fdevent.h
|
|
|
|
+@@ -40,6 +40,8 @@ struct fdnode_st {
|
|
|
|
+ #if (defined(__sun) && defined(__SVR4)) /* Solaris */ \
|
|
|
|
+ || defined(__FreeBSD__)
|
|
|
|
+ #define FDEVENT_RDHUP 0x4000
|
|
|
|
++#elif (defined(__linux__) && (defined(__sparc__) || defined(__sparc)))
|
|
|
|
++#define FDEVENT_RDHUP 0x2800 /*(0x2000 EPOLLRDHUP | 0x0800 POLLRDHUP)*/
|
|
|
|
+ #else
|
|
|
|
+ #define FDEVENT_RDHUP 0x2000
|
|
|
|
+ #endif
|
|
|
|
+diff --git a/src/fdevent_impl.c b/src/fdevent_impl.c
|
|
|
|
+index 8bfc1cc6..c84c8df5 100644
|
|
|
|
+--- a/src/fdevent_impl.c
|
|
|
|
++++ b/src/fdevent_impl.c
|
|
|
|
+@@ -338,6 +338,11 @@ fdevent_linux_sysepoll_event_set (fdevents *ev, fdnode *fdn, int events)
|
|
|
|
+ struct epoll_event ep;
|
|
|
|
+ #ifndef EPOLLRDHUP
|
|
|
|
+ events &= ~FDEVENT_RDHUP;
|
|
|
|
++ #elif (defined(__linux__) && (defined(__sparc__) || defined(__sparc)))
|
|
|
|
++ if (events & FDEVENT_RDHUP) {
|
|
|
|
++ events &= ~FDEVENT_RDHUP;
|
|
|
|
++ events |= EPOLLRDHUP;
|
|
|
|
++ }
|
|
|
|
+ #endif
|
|
|
|
+ ep.events = events | EPOLLERR | EPOLLHUP;
|
|
|
|
+ ep.data.ptr = fdn;
|
|
|
|
+@@ -376,7 +381,11 @@ fdevent_linux_sysepoll_init (fdevents *ev)
|
|
|
|
+ ck_static_assert(EPOLLERR == FDEVENT_ERR);
|
|
|
|
+ ck_static_assert(EPOLLHUP == FDEVENT_HUP);
|
|
|
|
+ #ifdef EPOLLRDHUP
|
|
|
|
++ #if (defined(__linux__) && (defined(__sparc__) || defined(__sparc)))
|
|
|
|
++ ck_static_assert(EPOLLRDHUP & FDEVENT_RDHUP);
|
|
|
|
++ #else
|
|
|
|
+ ck_static_assert(EPOLLRDHUP == FDEVENT_RDHUP);
|
|
|
|
++ #endif
|
|
|
|
+ #endif
|
|
|
|
+
|
|
|
|
+ ev->type = FDEVENT_HANDLER_LINUX_SYSEPOLL;
|
|
|
|
+@@ -770,6 +779,11 @@ fdevent_poll_event_set (fdevents *ev, fdnode *fdn, int events)
|
|
|
|
+
|
|
|
|
+ #ifndef POLLRDHUP
|
|
|
|
+ events &= ~FDEVENT_RDHUP;
|
|
|
|
++ #elif (defined(__linux__) && (defined(__sparc__) || defined(__sparc)))
|
|
|
|
++ if (events & FDEVENT_RDHUP) {
|
|
|
|
++ events &= ~FDEVENT_RDHUP;
|
|
|
|
++ events |= POLLRDHUP;
|
|
|
|
++ }
|
|
|
|
+ #endif
|
|
|
|
+
|
|
|
|
+ if (k >= 0) {
|
|
|
|
+@@ -854,7 +868,11 @@ fdevent_poll_init (fdevents *ev)
|
|
|
|
+ ck_static_assert(POLLHUP == FDEVENT_HUP);
|
|
|
|
+ ck_static_assert(POLLNVAL == FDEVENT_NVAL);
|
|
|
|
+ #ifdef POLLRDHUP
|
|
|
|
++ #if (defined(__linux__) && (defined(__sparc__) || defined(__sparc)))
|
|
|
|
++ ck_static_assert(POLLRDHUP & FDEVENT_RDHUP);
|
|
|
|
++ #else
|
|
|
|
+ ck_static_assert(POLLRDHUP == FDEVENT_RDHUP);
|
|
|
|
++ #endif
|
|
|
|
+ #endif
|
|
|
|
+
|
|
|
|
+ ev->type = FDEVENT_HANDLER_POLL;
|
|
|
|
+--
|
|
|
|
+2.30.2
|
|
|
|
+
|