s390: add personality support

Introduce personality support for Linux on z Systems to run
particular services with a 64-bit or 31-bit personality.
This commit is contained in:
Hendrik Brueckner 2015-09-24 12:47:22 +02:00 committed by Harald Hoyer
parent 2e396de8b2
commit 7517f51ef9
4 changed files with 41 additions and 2 deletions

View file

@ -1502,6 +1502,7 @@ EXTRA_DIST += \
test/exec-ignoresigpipe-yes.service \ test/exec-ignoresigpipe-yes.service \
test/exec-personality-x86-64.service \ test/exec-personality-x86-64.service \
test/exec-personality-x86.service \ test/exec-personality-x86.service \
test/exec-personality-s390.service \
test/exec-privatedevices-no.service \ test/exec-privatedevices-no.service \
test/exec-privatedevices-yes.service \ test/exec-privatedevices-yes.service \
test/exec-privatetmp-no.service \ test/exec-privatetmp-no.service \

View file

@ -5261,6 +5261,19 @@ unsigned long personality_from_string(const char *p) {
if (streq(p, "x86")) if (streq(p, "x86"))
return PER_LINUX; 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 #endif
return PERSONALITY_INVALID; return PERSONALITY_INVALID;
@ -5280,6 +5293,20 @@ const char* personality_to_string(unsigned long p) {
if (p == PER_LINUX) if (p == PER_LINUX)
return "x86"; 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 #endif
return NULL; return NULL;

View file

@ -77,10 +77,14 @@ static void test_exec_workingdirectory(Manager *m) {
} }
static void test_exec_personality(Manager *m) { static void test_exec_personality(Manager *m) {
test(m, "exec-personality-x86.service", 0, CLD_EXITED);
#if defined(__x86_64__) #if defined(__x86_64__)
test(m, "exec-personality-x86-64.service", 0, CLD_EXITED); 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 #endif
} }

View file

@ -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