linux/tools/perf/trace/beauty/pkey_alloc.c
<<
>>
Prefs
   1// SPDX-License-Identifier: LGPL-2.1
   2/*
   3 * trace/beauty/pkey_alloc.c
   4 *
   5 *  Copyright (C) 2017, Red Hat Inc, Arnaldo Carvalho de Melo <acme@redhat.com>
   6 */
   7
   8#include "trace/beauty/beauty.h"
   9#include <linux/kernel.h>
  10#include <linux/log2.h>
  11
  12size_t strarray__scnprintf_flags(struct strarray *sa, char *bf, size_t size, bool show_prefix, unsigned long flags)
  13{
  14        int i, printed = 0;
  15
  16        if (flags == 0) {
  17                const char *s = sa->entries[0];
  18                if (s)
  19                        return scnprintf(bf, size, "%s%s", show_prefix ? sa->prefix : "", s);
  20                return scnprintf(bf, size, "%d", 0);
  21        }
  22
  23        for (i = 1; i < sa->nr_entries; ++i) {
  24                unsigned long bit = 1UL << (i - 1);
  25
  26                if (!(flags & bit))
  27                        continue;
  28
  29                if (printed != 0)
  30                        printed += scnprintf(bf + printed, size - printed, "|");
  31
  32                if (sa->entries[i] != NULL)
  33                        printed += scnprintf(bf + printed, size - printed, "%s%s", show_prefix ? sa->prefix : "", sa->entries[i]);
  34                else
  35                        printed += scnprintf(bf + printed, size - printed, "0x%#", bit);
  36        }
  37
  38        return printed;
  39}
  40
  41static size_t pkey_alloc__scnprintf_access_rights(int access_rights, char *bf, size_t size, bool show_prefix)
  42{
  43#include "trace/beauty/generated/pkey_alloc_access_rights_array.c"
  44        static DEFINE_STRARRAY(pkey_alloc_access_rights, "PKEY_");
  45
  46        return strarray__scnprintf_flags(&strarray__pkey_alloc_access_rights, bf, size, show_prefix, access_rights);
  47}
  48
  49size_t syscall_arg__scnprintf_pkey_alloc_access_rights(char *bf, size_t size, struct syscall_arg *arg)
  50{
  51        unsigned long cmd = arg->val;
  52
  53        return pkey_alloc__scnprintf_access_rights(cmd, bf, size, arg->show_string_prefix);
  54}
  55