linux/kernel/trace/trace_export.c
<<
>>
Prefs
   1/*
   2 * trace_export.c - export basic ftrace utilities to user space
   3 *
   4 * Copyright (C) 2009 Steven Rostedt <srostedt@redhat.com>
   5 */
   6#include <linux/stringify.h>
   7#include <linux/kallsyms.h>
   8#include <linux/seq_file.h>
   9#include <linux/debugfs.h>
  10#include <linux/uaccess.h>
  11#include <linux/ftrace.h>
  12#include <linux/module.h>
  13#include <linux/init.h>
  14#include <linux/fs.h>
  15
  16#include "trace_output.h"
  17
  18
  19#undef TRACE_STRUCT
  20#define TRACE_STRUCT(args...) args
  21
  22#undef TRACE_FIELD
  23#define TRACE_FIELD(type, item, assign)                                 \
  24        ret = trace_seq_printf(s, "\tfield:" #type " " #item ";\t"      \
  25                               "offset:%u;\tsize:%u;\n",                \
  26                               (unsigned int)offsetof(typeof(field), item), \
  27                               (unsigned int)sizeof(field.item));       \
  28        if (!ret)                                                       \
  29                return 0;
  30
  31
  32#undef TRACE_FIELD_SPECIAL
  33#define TRACE_FIELD_SPECIAL(type_item, item, cmd)                       \
  34        ret = trace_seq_printf(s, "\tfield special:" #type_item ";\t"   \
  35                               "offset:%u;\tsize:%u;\n",                \
  36                               (unsigned int)offsetof(typeof(field), item), \
  37                               (unsigned int)sizeof(field.item));       \
  38        if (!ret)                                                       \
  39                return 0;
  40
  41#undef TRACE_FIELD_ZERO_CHAR
  42#define TRACE_FIELD_ZERO_CHAR(item)                                     \
  43        ret = trace_seq_printf(s, "\tfield:char " #item ";\t"           \
  44                               "offset:%u;\tsize:0;\n",                 \
  45                               (unsigned int)offsetof(typeof(field), item)); \
  46        if (!ret)                                                       \
  47                return 0;
  48
  49
  50#undef TP_RAW_FMT
  51#define TP_RAW_FMT(args...) args
  52
  53#undef TRACE_EVENT_FORMAT
  54#define TRACE_EVENT_FORMAT(call, proto, args, fmt, tstruct, tpfmt)      \
  55static int                                                              \
  56ftrace_format_##call(struct trace_seq *s)                               \
  57{                                                                       \
  58        struct args field;                                              \
  59        int ret;                                                        \
  60                                                                        \
  61        tstruct;                                                        \
  62                                                                        \
  63        trace_seq_printf(s, "\nprint fmt: \"%s\"\n", tpfmt);            \
  64                                                                        \
  65        return ret;                                                     \
  66}
  67
  68#include "trace_event_types.h"
  69
  70#undef TRACE_ZERO_CHAR
  71#define TRACE_ZERO_CHAR(arg)
  72
  73#undef TRACE_FIELD
  74#define TRACE_FIELD(type, item, assign)\
  75        entry->item = assign;
  76
  77#undef TRACE_FIELD
  78#define TRACE_FIELD(type, item, assign)\
  79        entry->item = assign;
  80
  81#undef TP_CMD
  82#define TP_CMD(cmd...)  cmd
  83
  84#undef TRACE_ENTRY
  85#define TRACE_ENTRY     entry
  86
  87#undef TRACE_FIELD_SPECIAL
  88#define TRACE_FIELD_SPECIAL(type_item, item, cmd) \
  89        cmd;
  90
  91#undef TRACE_EVENT_FORMAT
  92#define TRACE_EVENT_FORMAT(call, proto, args, fmt, tstruct, tpfmt)      \
  93                                                                        \
  94static struct ftrace_event_call __used                                  \
  95__attribute__((__aligned__(4)))                                         \
  96__attribute__((section("_ftrace_events"))) event_##call = {             \
  97        .name                   = #call,                                \
  98        .id                     = proto,                                \
  99        .system                 = __stringify(TRACE_SYSTEM),            \
 100        .show_format            = ftrace_format_##call,                 \
 101}
 102#include "trace_event_types.h"
 103
lxr.linux.no kindly hosted by Redpill Linpro AS, provider of Linux consulting and operations services since 1995.