2 * Check decoding of prctl PR_GET_NAME/PR_SET_NAME operations.
4 * Copyright (c) 2016 Eugene Syromyatnikov <evgsyr@gmail.com>
5 * Copyright (c) 2016 Dmitry V. Levin <ldv@altlinux.org>
6 * Copyright (c) 2016-2018 The strace developers.
9 * SPDX-License-Identifier: GPL-2.0-or-later
15 # include <sys/prctl.h>
18 #if defined HAVE_PRCTL && defined PR_GET_NAME && defined PR_SET_NAME
27 static const char str[] = "0123456789abcdef";
28 static const int len = sizeof(str) - 1;
29 char *name = tail_memdup(str, sizeof(str));
33 rc = prctl(PR_SET_NAME, NULL);
34 printf("prctl(PR_SET_NAME, NULL) = %s\n", sprintrc(rc));
36 for (i = 0; i <= len; ++i) {
37 rc = prctl(PR_SET_NAME, name + len - i);
38 printf("prctl(PR_SET_NAME, \"%.*s\"%s) = %s\n",
39 i < len - 1 ? i : len - 1,
41 i < len - 1 ? "" : "...",
47 memcpy(name, str, len);
49 for (i = 0; i <= len; ++i) {
50 rc = prctl(PR_SET_NAME, name + len - i);
52 printf("prctl(PR_SET_NAME, %p) = %s\n",
53 name + len - i, sprintrc(rc));
55 printf("prctl(PR_SET_NAME, \"%.*s\"...) = %s\n",
56 len - 1, str + len - i, sprintrc(rc));
59 rc = prctl(PR_GET_NAME, NULL);
60 printf("prctl(PR_GET_NAME, NULL) = %s\n", sprintrc(rc));
62 for (i = 0; i < len; ++i) {
63 rc = prctl(PR_GET_NAME, name + len - i);
64 printf("prctl(PR_GET_NAME, %p) = %s\n",
65 name + len - i, sprintrc(rc));
68 rc = prctl(PR_GET_NAME, name);
70 printf("prctl(PR_GET_NAME, %p) = %s\n",
73 printf("prctl(PR_GET_NAME, \"%.*s\") = %s\n",
74 len - 1, name, sprintrc(rc));
76 puts("+++ exited with 0 +++");
82 SKIP_MAIN_UNDEFINED("HAVE_PRCTL && PR_GET_NAME && PR_SET_NAME")