(root)/
strace-6.5/
tests-mx32/
personality.c
       1  /*
       2   * Copyright (c) 2015 Dmitry V. Levin <ldv@strace.io>
       3   * Copyright (c) 2015-2021 The strace developers.
       4   * All rights reserved.
       5   *
       6   * SPDX-License-Identifier: GPL-2.0-or-later
       7   */
       8  
       9  #include "tests.h"
      10  #include <stdio.h>
      11  #include <sys/personality.h>
      12  
      13  #if XLAT_RAW
      14  # define linux_type_str	"0"
      15  # define good_type_str	"0x6"
      16  # define bad_type_str	"0x1f"
      17  # define good_flags_str	"0x7000000"
      18  # define bad_flags_str	"0x10000"
      19  # define good_bad_flags_str	"0x7010000"
      20  #elif XLAT_VERBOSE
      21  # define linux_type_str	"0 /\\* PER_LINUX \\*/"
      22  # define good_type_str	"0x6 /\\* PER_BSD \\*/"
      23  # define bad_type_str	"0x1f /\\* PER_\\?\\?\\? \\*/"
      24  # define good_flags_str	\
      25  	"0x7000000 /\\* SHORT_INODE\\|WHOLE_SECONDS\\|STICKY_TIMEOUTS \\*/"
      26  # define bad_flags_str	"0x10000"
      27  # define good_bad_flags_str	\
      28  	"0x7010000 /\\* SHORT_INODE\\|WHOLE_SECONDS\\|STICKY_TIMEOUTS" \
      29  		"\\|0x10000 \\*/"
      30  #else
      31  # define linux_type_str	"PER_LINUX"
      32  # define good_type_str	"PER_BSD"
      33  # define bad_type_str	"0x1f /\\* PER_\\?\\?\\? \\*/"
      34  # define good_flags_str	"SHORT_INODE\\|WHOLE_SECONDS\\|STICKY_TIMEOUTS"
      35  # define bad_flags_str	"0x10000"
      36  # define good_bad_flags_str \
      37  	"SHORT_INODE\\|WHOLE_SECONDS\\|STICKY_TIMEOUTS\\|0x10000"
      38  #endif
      39  
      40  int main(void)
      41  {
      42  	const unsigned int good_type = PER_BSD;
      43  
      44  	const unsigned int bad_type = 0x1f;
      45  
      46  	const unsigned int good_flags =
      47  		SHORT_INODE | WHOLE_SECONDS | STICKY_TIMEOUTS;
      48  
      49  	const unsigned int bad_flags = 0x10000;
      50  
      51  	const unsigned int saved_pers = personality(0xffffffff);
      52  	printf("personality\\(0xffffffff\\) = %#x \\([^)]*\\)\n", saved_pers);
      53  
      54  	/* PER_LINUX */
      55  	personality(PER_LINUX);
      56  	printf("personality\\(%s\\) = %#x \\([^)]*\\)\n",
      57  	       linux_type_str, saved_pers);
      58  
      59  	personality(0xffffffff);
      60  	printf("personality\\(0xffffffff\\) = 0 \\(%s\\)\n", linux_type_str);
      61  
      62  	personality(good_flags);
      63  	printf("personality\\(%s\\|%s\\) = 0 \\(%s\\)\n",
      64  	       linux_type_str, good_flags_str, linux_type_str);
      65  
      66  	personality(bad_flags);
      67  	printf("personality\\(%s\\|%s\\)"
      68  	       " = %#x \\(%s\\|%s\\)\n",
      69  	       linux_type_str, bad_flags_str,
      70  	       good_flags, linux_type_str, good_flags_str);
      71  
      72  	personality(good_flags | bad_flags);
      73  	printf("personality\\(%s\\|%s\\)"
      74  	       " = %#x \\(%s\\|%s\\)\n",
      75  	       linux_type_str, good_bad_flags_str,
      76  	       bad_flags, linux_type_str, bad_flags_str);
      77  
      78  	/* another valid type */
      79  	personality(good_type);
      80  	printf("personality\\(%s\\) = %#x \\(%s\\|%s\\)\n",
      81  	       good_type_str, good_flags | bad_flags,
      82  	       linux_type_str, good_bad_flags_str);
      83  
      84  	personality(good_type | good_flags);
      85  	printf("personality\\(%s\\|%s\\) = %#x \\(%s\\)\n",
      86  	       good_type_str, good_flags_str, good_type, good_type_str);
      87  
      88  	personality(good_type | bad_flags);
      89  	printf("personality\\(%s\\|%s\\) = %#x \\(%s\\|%s\\)\n",
      90  	       good_type_str, bad_flags_str, good_type | good_flags,
      91  	       good_type_str, good_flags_str);
      92  
      93  	personality(good_type | good_flags | bad_flags);
      94  	printf("personality\\(%s\\|%s\\) = %#x \\(%s\\|%s\\)\n",
      95  	       good_type_str, good_bad_flags_str,
      96  	       good_type | bad_flags,
      97  	       good_type_str, bad_flags_str);
      98  
      99  	/* invalid type */
     100  	personality(bad_type);
     101  	printf("personality\\(%s\\) = %#x \\(%s\\|%s\\)\n",
     102  	       bad_type_str, good_type | good_flags | bad_flags,
     103  	       good_type_str, good_bad_flags_str);
     104  
     105  	personality(bad_type | good_flags);
     106  	printf("personality\\(%s\\|%s\\) = %#x \\(%s\\)\n",
     107  	       bad_type_str, good_flags_str, bad_type, bad_type_str);
     108  
     109  	personality(bad_type | bad_flags);
     110  	printf("personality\\(%s\\|%s\\) = %#x \\(%s\\|%s\\)\n",
     111  	       bad_type_str, bad_flags_str, bad_type | good_flags,
     112  	       bad_type_str, good_flags_str);
     113  
     114  	personality(bad_type | good_flags | bad_flags);
     115  	printf("personality\\(%s\\|%s\\) = %#x \\(%s\\|%s\\)\n",
     116  	       bad_type_str, good_bad_flags_str,
     117  	       bad_type | bad_flags, bad_type_str, bad_flags_str);
     118  
     119  	personality(saved_pers);
     120  	printf("personality\\([^)]*\\) = %#x \\(%s\\|%s\\)\n",
     121  	       bad_type | good_flags | bad_flags,
     122  	       bad_type_str, good_bad_flags_str);
     123  
     124  	return 0;
     125  }