summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDmitry V. Levin <ldv@altlinux.org>2015-12-25 20:56:06 +0000
committerDmitry V. Levin <ldv@altlinux.org>2015-12-25 21:14:57 +0000
commit1e155f76e723dcd0d249817f8db36814079def65 (patch)
tree39e024901948af9ae924bf30b69fe6ad82c8890e
parentf7423af0df9d7126032a487375f76e2ac78732cf (diff)
downloadstrace-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.c6
-rw-r--r--tests/personality.c7
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",