summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMikle Kolyada <zlogene@gentoo.org>2018-12-29 20:45:26 +0300
committerMikle Kolyada <zlogene@gentoo.org>2018-12-29 20:45:47 +0300
commitb3fc94e26e94fdd3db193a8e77a4f0977d1591a4 (patch)
treee58cd190ded871597b420e041df7da99e871f261 /sys-apps/util-linux
parentapp-text/aspell: add support for musl (diff)
downloadgentoo-b3fc94e26e94fdd3db193a8e77a4f0977d1591a4.tar.gz
gentoo-b3fc94e26e94fdd3db193a8e77a4f0977d1591a4.tar.bz2
gentoo-b3fc94e26e94fdd3db193a8e77a4f0977d1591a4.zip
sys-apps/util-linux: fix set_arch detection for sparc
Signed-off-by: Mikle Kolyada <zlogene@gentoo.org> Package-Manager: Portage-2.3.51, Repoman-2.3.11
Diffstat (limited to 'sys-apps/util-linux')
-rw-r--r--sys-apps/util-linux/files/util-linux-2.33-sparc-setarch.patch80
-rw-r--r--sys-apps/util-linux/util-linux-2.33.ebuild3
2 files changed, 82 insertions, 1 deletions
diff --git a/sys-apps/util-linux/files/util-linux-2.33-sparc-setarch.patch b/sys-apps/util-linux/files/util-linux-2.33-sparc-setarch.patch
new file mode 100644
index 000000000000..cbae6c0f2631
--- /dev/null
+++ b/sys-apps/util-linux/files/util-linux-2.33-sparc-setarch.patch
@@ -0,0 +1,80 @@
+From 3fa06e049012218d883d0e1251df86bafbc446bf Mon Sep 17 00:00:00 2001
+From: Karel Zak <kzak@redhat.com>
+Date: Thu, 22 Nov 2018 11:03:35 +0100
+Subject: [PATCH] setarch: fix obscure sparc32bash use-case
+
+Reported-by: Carlos Santos <casantos@datacom.com.br>
+Signed-off-by: Karel Zak <kzak@redhat.com>
+---
+ sys-utils/setarch.c | 28 ++++++++++++++++++----------
+ 1 file changed, 18 insertions(+), 10 deletions(-)
+
+diff --git a/sys-utils/setarch.c b/sys-utils/setarch.c
+index a733f7b3c..7c0a63fbb 100644
+--- a/sys-utils/setarch.c
++++ b/sys-utils/setarch.c
+@@ -268,6 +268,7 @@ int main(int argc, char *argv[])
+ int c;
+ struct arch_domain *doms, *target;
+ unsigned long pers_value = 0;
++ char *shell = NULL, *shell_arg = NULL;
+
+ /* Options without equivalent short options */
+ enum {
+@@ -310,14 +311,14 @@ int main(int argc, char *argv[])
+ archwrapper = strcmp(program_invocation_short_name, "setarch") != 0;
+ if (archwrapper) {
+ arch = program_invocation_short_name; /* symlinks to setarch */
+-#if defined(__sparc64__) || defined(__sparc__)
++
++ /* Don't use ifdef sparc here, we get "Unrecognized architecture"
++ * error message later if necessary */
+ if (strcmp(arch, "sparc32bash") == 0) {
+- if (set_arch(arch, 0L, 0))
+- err(EXIT_FAILURE, _("Failed to set personality to %s"), arch);
+- execl("/bin/bash", "", NULL);
+- errexec("/bin/bash");
++ shell = "/bin/bash";
++ shell_arg = "";
++ goto set_arch;
+ }
+-#endif
+ } else {
+ if (1 < argc && *argv[1] != '-') {
+ arch = argv[1];
+@@ -391,6 +392,7 @@ int main(int argc, char *argv[])
+ argc -= optind;
+ argv += optind;
+
++set_arch:
+ /* get execution domain (architecture) */
+ if (arch) {
+ doms = init_arch_domains();
+@@ -422,17 +424,23 @@ int main(int argc, char *argv[])
+ if (arch)
+ verify_arch_domain(target, arch);
+
++ if (!argc) {
++ shell = "/bin/sh";
++ shell_arg = "-sh";
++ }
+ if (verbose) {
+- printf(_("Execute command `%s'.\n"), argc ? argv[0] : "/bin/sh");
++ printf(_("Execute command `%s'.\n"), shell ? shell : argv[0]);
+ /* flush all output streams before exec */
+ fflush(NULL);
+ }
+
+- if (!argc) {
+- execl("/bin/sh", "-sh", NULL);
+- errexec("/bin/sh");
++ /* Execute shell */
++ if (shell) {
++ execl(shell, shell_arg, NULL);
++ errexec(shell);
+ }
+
++ /* Execute on command line specified command */
+ execvp(argv[0], argv);
+ errexec(argv[0]);
+ }
diff --git a/sys-apps/util-linux/util-linux-2.33.ebuild b/sys-apps/util-linux/util-linux-2.33.ebuild
index c95e045cc204..cf66f3c521bb 100644
--- a/sys-apps/util-linux/util-linux-2.33.ebuild
+++ b/sys-apps/util-linux/util-linux-2.33.ebuild
@@ -1,4 +1,4 @@
-# Copyright 1999-2018 Gentoo Foundation and others
+# Copyright 1999-2018 Gentoo Authors and others
# Copyright 2018 Sony Interactive Entertainment Inc.
# Distributed under the terms of the GNU General Public License v2
@@ -65,6 +65,7 @@ S="${WORKDIR}/${MY_P}"
PATCHES=(
"${FILESDIR}/util-linux-2.32.1-skip-oids-test-when-uuidgen-is-not-available.patch"
+ "${FILESDIR}/${P}-sparc-setarch.patch"
)
src_prepare() {