summaryrefslogtreecommitdiff
path: root/www-servers/lighttpd/files/lighttpd-1.4.75-sparc.patch
diff options
context:
space:
mode:
Diffstat (limited to 'www-servers/lighttpd/files/lighttpd-1.4.75-sparc.patch')
-rw-r--r--www-servers/lighttpd/files/lighttpd-1.4.75-sparc.patch74
1 files changed, 74 insertions, 0 deletions
diff --git a/www-servers/lighttpd/files/lighttpd-1.4.75-sparc.patch b/www-servers/lighttpd/files/lighttpd-1.4.75-sparc.patch
new file mode 100644
index 000000000000..d7bd72973b94
--- /dev/null
+++ b/www-servers/lighttpd/files/lighttpd-1.4.75-sparc.patch
@@ -0,0 +1,74 @@
+https://bugs.gentoo.org/931305
+https://github.com/lighttpd/lighttpd1.4/commit/524614455554163ec78b27b89ff52bbf7fe96958
+
+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
+--- 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
+--- 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;
+