2
0
Fork 0
genodepkgs/packages/genodelabs/patches/libc.patch

163 lines
5.8 KiB
Diff

commit f3a7fb548c8600a6e290d306b933725ebc546cd0
Author: Emery Hemingway <ehmry@posteo.net>
Date: Wed May 6 04:38:35 2020 +0530
libc: add siginterrupt dummy
diff --git a/repos/libports/src/lib/libc/signal.cc b/repos/libports/src/lib/libc/signal.cc
index dc9af2d443..784257c48e 100644
--- a/repos/libports/src/lib/libc/signal.cc
+++ b/repos/libports/src/lib/libc/signal.cc
@@ -131,6 +131,9 @@ extern "C" int sigaction(int signum, const struct sigaction *act, struct sigacti
}
+extern "C" int siginterrupt(int sig, int flag) { return 0; };
+
+
extern "C" int _sigaction(int, const struct sigaction *, struct sigaction *) __attribute__((weak, alias("sigaction")));
extern "C" int __sys_sigaction(int, const struct sigaction *, struct sigaction *) __attribute__((weak, alias("sigaction")));
extern "C" int __libc_sigaction(int, const struct sigaction *, struct sigaction *) __attribute__((weak, alias("sigaction")));
commit 65244c99c250767922b9afca9663ddcb7a7753f8
Author: Emery Hemingway <ehmry@posteo.net>
Date: Wed May 6 04:59:56 2020 +0530
libc: add upstream mbsinit
diff --git a/repos/libports/lib/mk/libc-locale.mk b/repos/libports/lib/mk/libc-locale.mk
index 8e75e59589..2bb98b1456 100644
--- a/repos/libports/lib/mk/libc-locale.mk
+++ b/repos/libports/lib/mk/libc-locale.mk
@@ -6,7 +6,7 @@ CC_OPT += -D_Thread_local=""
FILTER_OUT = \
c16rtomb.c c32rtomb_iconv.c mbrtoc16_iconv.c mbrtoc32_iconv.c \
setlocale.c xlocale.c setrunelocale.c \
- ascii.c big5.c euc.co gb18030.c gb2312.c gbk.c mbsinit.c mskanji.c utf8.c \
+ ascii.c big5.c euc.co gb18030.c gb2312.c gbk.c mskanji.c utf8.c \
SRC_C = $(filter-out $(FILTER_OUT),$(notdir $(wildcard $(LIBC_LOCALE_DIR)/*.c)))
commit 81fc78f8e0ac66a7275e149f7f7fdc5f4f1f2979
Author: Emery Hemingway <ehmry@posteo.net>
Date: Wed May 27 16:35:16 2020 +0530
libc: add mlock and munlock dummies
diff --git a/repos/libports/src/lib/libc/dummies.cc b/repos/libports/src/lib/libc/dummies.cc
index 37c2c83f89..bc2f15a90a 100644
--- a/repos/libports/src/lib/libc/dummies.cc
+++ b/repos/libports/src/lib/libc/dummies.cc
@@ -221,5 +221,15 @@ int __attribute__((weak)) madvise(void *addr, size_t length, int advice)
const struct res_sym __p_type_syms[] = { };
+#define DUMMY_EPERM(ret_type, ret_val, name, args) __attribute__((weak)) \
+ret_type name args \
+{ \
+ errno = EPERM; \
+ return ret_val; \
+}
+
+DUMMY_EPERM(int, -1, mlock, (const void *, size_t));
+DUMMY_EPERM(int, -1, munlock, (const void *, size_t));
+
} /* extern "C" */
commit f45e11626aca92be04bc9c8ed74f010ff62862dd
Author: Emery Hemingway <ehmry@posteo.net>
Date: Fri May 29 09:26:50 2020 +0530
libc: return 0 from getpgrp and getppid dummies
diff --git a/repos/libports/src/lib/libc/dummies.cc b/repos/libports/src/lib/libc/dummies.cc
index 150640ddf3..e511897600 100644
--- a/repos/libports/src/lib/libc/dummies.cc
+++ b/repos/libports/src/lib/libc/dummies.cc
@@ -109,8 +109,8 @@ DUMMY(char *, 0, _getlogin, (void))
DUMMY(int , -1, getnameinfo, (const sockaddr *, socklen_t, char *, size_t, char *, size_t, int))
DUMMY(struct servent *, 0, getservbyname, (const char *, const char *))
DUMMY(int , -1, getsid, (pid_t))
-DUMMY_SILENT(pid_t , -1, getppid, (void))
-DUMMY(pid_t , -1, getpgrp, (void))
+DUMMY_SILENT(pid_t , 0, getpgrp, (void))
+DUMMY_SILENT(pid_t , 0, getppid, (void))
DUMMY(int , -1, getpriority, (int, int))
DUMMY(int , -1, getrusage, (int, rusage *))
DUMMY_SILENT(uid_t , 0, getuid, (void))
From 01bac4b0add9da8bbb4fcbe339605533ab7e7be5 Mon Sep 17 00:00:00 2001
From: Emery Hemingway <ehmry@posteo.net>
Date: Thu, 26 Nov 2020 12:47:30 +0100
Subject: [PATCH] libc: always set argv and envp to valid arrays
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
The argument array passed to main(…) must be a null terminated array, even
if argc is zero. Set at least one environment variable in any case.
Fix #3955
---
repos/libports/include/libc/args.h | 29 +++++++++++++++++++++++++----
1 file changed, 25 insertions(+), 4 deletions(-)
diff --git a/repos/libports/include/libc/args.h b/repos/libports/include/libc/args.h
index 76645d82cb..fab299b8d3 100644
--- a/repos/libports/include/libc/args.h
+++ b/repos/libports/include/libc/args.h
@@ -25,6 +25,7 @@ static void populate_args_and_env(Libc::Env &env, int &argc, char **&argv, char
{
using Genode::Xml_node;
using Genode::Xml_attribute;
+ using Genode::max;
env.config([&] (Xml_node const &node) {
@@ -40,12 +41,25 @@ static void populate_args_and_env(Libc::Env &env, int &argc, char **&argv, char
++envc;
});
- if (argc == 0 && envc == 0)
+ if (argc == 0 && envc == 0) {
+ /*
+ * If argc is zero then argv is still a NULL-terminated array.
+ *
+ * Invent an enviromental variable in case the application
+ * does not handle an empty environment. SHLVL=0 is
+ * just an indication that this application lacks a parent
+ * shell.
+ */
+ static char const *args[] = { nullptr, "SHLVL=0", nullptr };
+ argc = 0;
+ argv = (char**)&args;
+ envp = &argv[1];
return; /* from lambda */
+ }
- /* arguments and environment are a contiguous array (but don't count on it) */
- argv = (char**)malloc((argc + envc + 1) * sizeof(char*));
- envp = &argv[argc];
+ /* arguments and environment are arranged System V style (but don't count on it) */
+ argv = (char**)malloc((argc + max(envc, 1) + 2) * sizeof(char*));
+ envp = &argv[argc+1];
/* read the arguments */
int arg_i = 0;
@@ -123,6 +137,13 @@ static void populate_args_and_env(Libc::Env &env, int &argc, char **&argv, char
catch (Xml_node::Nonexistent_attribute) { }
});
+ /* argv and envp are both NULL terminated */
+
+ argv[arg_i] = NULL;
+
+ /* invent an env-var if none are present, see note above */
+ if (env_i == 0)
+ envp[env_i++] = (char*)"SHLVL=0";
envp[env_i] = NULL;
});
}
--
2.29.2