s390: add personality support
authorHendrik Brueckner <brueckner@linux.vnet.ibm.com>
Thu, 24 Sep 2015 10:47:22 +0000 (12:47 +0200)
committerHarald Hoyer <harald@redhat.com>
Thu, 24 Sep 2015 11:03:18 +0000 (13:03 +0200)
Introduce personality support for Linux on z Systems to run
particular services with a 64-bit or 31-bit personality.

Makefile.am
src/basic/util.c
src/test/test-execute.c
test/exec-personality-s390.service [new file with mode: 0644]

index 41bfdfb..e9ad723 100644 (file)
@@ -1502,6 +1502,7 @@ EXTRA_DIST += \
        test/exec-ignoresigpipe-yes.service \
        test/exec-personality-x86-64.service \
        test/exec-personality-x86.service \
+       test/exec-personality-s390.service \
        test/exec-privatedevices-no.service \
        test/exec-privatedevices-yes.service \
        test/exec-privatetmp-no.service \
index 18be0bf..40a4b8f 100644 (file)
@@ -5261,6 +5261,19 @@ unsigned long personality_from_string(const char *p) {
 
         if (streq(p, "x86"))
                 return PER_LINUX;
+
+#elif defined(__s390x__)
+
+        if (streq(p, "s390"))
+                return PER_LINUX32;
+
+        if (streq(p, "s390x"))
+                return PER_LINUX;
+
+#elif defined(__s390__)
+
+        if (streq(p, "s390"))
+                return PER_LINUX;
 #endif
 
         return PERSONALITY_INVALID;
@@ -5280,6 +5293,20 @@ const char* personality_to_string(unsigned long p) {
 
         if (p == PER_LINUX)
                 return "x86";
+
+#elif defined(__s390x__)
+
+        if (p == PER_LINUX)
+                return "s390x";
+
+        if (p == PER_LINUX32)
+                return "s390";
+
+#elif defined(__s390__)
+
+        if (p == PER_LINUX)
+                return "s390";
+
 #endif
 
         return NULL;
index dd8ab7d..fa6336f 100644 (file)
@@ -77,10 +77,14 @@ static void test_exec_workingdirectory(Manager *m) {
 }
 
 static void test_exec_personality(Manager *m) {
-        test(m, "exec-personality-x86.service", 0, CLD_EXITED);
-
 #if defined(__x86_64__)
         test(m, "exec-personality-x86-64.service", 0, CLD_EXITED);
+
+#elif defined(__s390__)
+        test(m, "exec-personality-s390.service", 0, CLD_EXITED);
+
+#else
+        test(m, "exec-personality-x86.service", 0, CLD_EXITED);
 #endif
 }
 
diff --git a/test/exec-personality-s390.service b/test/exec-personality-s390.service
new file mode 100644 (file)
index 0000000..f3c3b03
--- /dev/null
@@ -0,0 +1,7 @@
+[Unit]
+Description=Test for Personality=s390
+
+[Service]
+ExecStart=/bin/sh -c 'echo $(uname -m); exit $(test $(uname -m) = "s390")'
+Type=oneshot
+Personality=s390