cachepc-linux

Fork of AMDESE/linux with modifications for CachePC side-channel attack
git clone https://git.sinitax.com/sinitax/cachepc-linux
Log | Files | Refs | README | LICENSE | sfeed.txt

kcmp.c (1240B)


      1// SPDX-License-Identifier: LGPL-2.1
      2/*
      3 * trace/beauty/kcmp.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 <sys/types.h>
     11#include <machine.h>
     12#include <uapi/linux/kcmp.h>
     13
     14#include "trace/beauty/generated/kcmp_type_array.c"
     15
     16size_t syscall_arg__scnprintf_kcmp_idx(char *bf, size_t size, struct syscall_arg *arg)
     17{
     18	unsigned long fd = arg->val;
     19	int type = syscall_arg__val(arg, 2);
     20	pid_t pid;
     21
     22	if (type != KCMP_FILE)
     23		return syscall_arg__scnprintf_long(bf, size, arg);
     24
     25	pid = syscall_arg__val(arg, arg->idx == 3 ? 0 : 1); /* idx1 -> pid1, idx2 -> pid2 */
     26	return pid__scnprintf_fd(arg->trace, pid, fd, bf, size);
     27}
     28
     29static size_t kcmp__scnprintf_type(int type, char *bf, size_t size, bool show_prefix)
     30{
     31	static DEFINE_STRARRAY(kcmp_types, "KCMP_");
     32	return strarray__scnprintf(&strarray__kcmp_types, bf, size, "%d", show_prefix, type);
     33}
     34
     35size_t syscall_arg__scnprintf_kcmp_type(char *bf, size_t size, struct syscall_arg *arg)
     36{
     37	unsigned long type = arg->val;
     38
     39	if (type != KCMP_FILE)
     40		arg->mask |= (1 << 3) | (1 << 4); /* Ignore idx1 and idx2 */
     41
     42	return kcmp__scnprintf_type(type, bf, size, arg->show_string_prefix);
     43}