diff options
author | Dmitry V. Levin <ldv@altlinux.org> | 2015-12-25 20:56:06 +0000 |
---|---|---|
committer | Dmitry V. Levin <ldv@altlinux.org> | 2015-12-25 21:14:57 +0000 |
commit | 1e155f76e723dcd0d249817f8db36814079def65 (patch) | |
tree | 39e024901948af9ae924bf30b69fe6ad82c8890e | |
parent | f7423af0df9d7126032a487375f76e2ac78732cf (diff) | |
download | strace-1e155f76e723dcd0d249817f8db36814079def65.tar.gz |
Print personality value 0xffffffff properly
Value 0xffffffff of personality syscall first argument has a special
meaning, it is not a set of personality flags.
* personality.c (SYS_FUNC(personality)): If personality equals
to 0xffffffff, print it verbatim.
* tests/personality.c (main): Test it.
-rw-r--r-- | personality.c | 6 | ||||
-rw-r--r-- | tests/personality.c | 7 |
2 files changed, 12 insertions, 1 deletions
diff --git a/personality.c b/personality.c index 2030374e7..4df4cf334 100644 --- a/personality.c +++ b/personality.c @@ -7,7 +7,11 @@ SYS_FUNC(personality) { if (entering(tcp)) { - printflags(personality_options, tcp->u_arg[0], "PER_???"); + const unsigned int pers = tcp->u_arg[0]; + if (0xffffffff == pers) + tprints("0xffffffff"); + else + printflags(personality_options, pers, "PER_???"); return 0; } diff --git a/tests/personality.c b/tests/personality.c index 82200fa10..836388560 100644 --- a/tests/personality.c +++ b/tests/personality.c @@ -8,9 +8,16 @@ int main(void) const unsigned int saved_pers = personality(0); printf("personality\\(PER_LINUX\\) = %#x \\([^)]*\\)\n", saved_pers); + personality(test_pers); puts("personality\\(SHORT_INODE\\|WHOLE_SECONDS\\|STICKY_TIMEOUTS\\)" " = 0 \\(PER_LINUX\\)"); + + personality(0xffffffff); + printf("personality\\(0xffffffff\\) = %#x" + " \\(SHORT_INODE\\|WHOLE_SECONDS\\|STICKY_TIMEOUTS\\)\n", + test_pers); + personality(saved_pers); printf("personality\\([^)]*\\) = %#x" " \\(SHORT_INODE\\|WHOLE_SECONDS\\|STICKY_TIMEOUTS\\)\n", |