/
usr
/
share
/
systemtap
/
runtime
/
linux
/
/usr/share/systemtap/runtime/linux
mkdir
upload
Name
Size
Mode
Actions
uprobes/
-
0755
rm
uprobes2/
-
0755
rm
access_process_vm.h
4311
0644
edit
dl
rm
addr-map.c
9749
0644
edit
dl
rm
alloc.c
15900
0644
edit
dl
rm
arith.c
16799
0644
edit
dl
rm
autoconf-514-panic.c
68
0644
edit
dl
rm
autoconf-access_ok_2args.c
90
0644
edit
dl
rm
autoconf-alloc-percpu-align.c
118
0644
edit
dl
rm
autoconf-asm-syscall.c
51
0644
edit
dl
rm
autoconf-atomic_fetch_add_unless.c
94
0644
edit
dl
rm
autoconf-bio-bi_opf.c
824
0644
edit
dl
rm
autoconf-blk-types.c
359
0644
edit
dl
rm
autoconf-compat-utimbuf.c
53
0644
edit
dl
rm
autoconf-compat_sigaction.c
448
0644
edit
dl
rm
autoconf-constant-tsc.c
63
0644
edit
dl
rm
autoconf-cpu-clock.c
1277
0644
edit
dl
rm
autoconf-dpath-path.c
121
0644
edit
dl
rm
autoconf-files_lookup_fd_raw.c
136
0644
edit
dl
rm
autoconf-from_kuid_munged.c
191
0644
edit
dl
rm
autoconf-fs_supers-hlist.c
354
0644
edit
dl
rm
autoconf-generated-compile.c
56
0644
edit
dl
rm
autoconf-genhd.c
201
0644
edit
dl
rm
autoconf-get-kretprobe.c
107
0644
edit
dl
rm
autoconf-get_user_pages-flags.c
1549
0644
edit
dl
rm
autoconf-get_user_pages-notask_struct.c
1301
0644
edit
dl
rm
autoconf-get_user_pages_remote-flags.c
1550
0644
edit
dl
rm
autoconf-get_user_pages_remote-flags_locked.c
1331
0644
edit
dl
rm
autoconf-get_user_pages_remote-notask_struct.c
1438
0644
edit
dl
rm
autoconf-grsecurity.c
219
0644
edit
dl
rm
autoconf-hlist-4args.c
296
0644
edit
dl
rm
autoconf-hlist_add_tail_rcu.c
112
0644
edit
dl
rm
autoconf-hrtimer-getset-expires.c
126
0644
edit
dl
rm
autoconf-hrtimer-rel.c
87
0644
edit
dl
rm
autoconf-hw_breakpoint_context.c
315
0644
edit
dl
rm
autoconf-inode-private.c
173
0644
edit
dl
rm
autoconf-inode-rwsem.c
172
0644
edit
dl
rm
autoconf-inode-uretprobes.c
264
0644
edit
dl
rm
autoconf-kernel_read-new-args.c
1030
0644
edit
dl
rm
autoconf-kprobe-symbol-name.c
90
0644
edit
dl
rm
autoconf-ktime-get-real.c
98
0644
edit
dl
rm
autoconf-linux-sched_headers.c
1678
0644
edit
dl
rm
autoconf-local-clock.c
1282
0644
edit
dl
rm
autoconf-lockdown-debugfs.c
102
0644
edit
dl
rm
autoconf-lockdown-kernel.c
90
0644
edit
dl
rm
autoconf-mm-context-vdso-base.c
117
0644
edit
dl
rm
autoconf-mm-context-vdso.c
114
0644
edit
dl
rm
autoconf-mm-shmempages.c
72
0644
edit
dl
rm
autoconf-mmap_lock.c
175
0644
edit
dl
rm
autoconf-module-sect-attrs.c
158
0644
edit
dl
rm
autoconf-module_layout.c
52
0644
edit
dl
rm
autoconf-mod_kallsyms.c
51
0644
edit
dl
rm
autoconf-nameidata.c
96
0644
edit
dl
rm
autoconf-netfilter-4_1.c
769
0644
edit
dl
rm
autoconf-netfilter-4_4.c
1460
0644
edit
dl
rm
autoconf-netfilter-313b.c
602
0644
edit
dl
rm
autoconf-netfilter.c
422
0644
edit
dl
rm
autoconf-old-inode-uprobes.c
357
0644
edit
dl
rm
autoconf-oneachcpu-retry.c
957
0644
edit
dl
rm
autoconf-pagefault_disable.c
137
0644
edit
dl
rm
autoconf-pde_data.c
226
0644
edit
dl
rm
autoconf-perf-structpid.c
444
0644
edit
dl
rm
autoconf-procfs-owner.c
158
0644
edit
dl
rm
autoconf-proc_ops.c
566
0644
edit
dl
rm
autoconf-rcu_is_watching.c
385
0644
edit
dl
rm
autoconf-real-parent.c
427
0644
edit
dl
rm
autoconf-regset.c
239
0644
edit
dl
rm
autoconf-relay-umode_t.c
730
0644
edit
dl
rm
autoconf-relay_buf-per_cpu_ptr.c
920
0644
edit
dl
rm
autoconf-ring_buffer-flags.c
112
0644
edit
dl
rm
autoconf-ring_buffer_lost_events.c
296
0644
edit
dl
rm
autoconf-ring_buffer_read_prepare.c
181
0644
edit
dl
rm
autoconf-save-stack-trace-no-bp.c
498
0644
edit
dl
rm
autoconf-save-stack-trace.c
501
0644
edit
dl
rm
autoconf-set_fs.c
221
0644
edit
dl
rm
autoconf-smpcall-4args.c
166
0644
edit
dl
rm
autoconf-smpcall-5args.c
169
0644
edit
dl
rm
autoconf-stack-trace-save-regs.c
176
0644
edit
dl
rm
autoconf-stacktrace_ops-int-address.c
409
0644
edit
dl
rm
autoconf-stacktrace_ops-warning.c
188
0644
edit
dl
rm
autoconf-syscall_get_args_3args.c
239
0644
edit
dl
rm
autoconf-task-state.c
550
0644
edit
dl
rm
autoconf-task-uid.c
152
0644
edit
dl
rm
autoconf-task_work-struct.c
219
0644
edit
dl
rm
autoconf-time32-old.c
52
0644
edit
dl
rm
autoconf-time32.c
53
0644
edit
dl
rm
autoconf-timerfd.c
232
0644
edit
dl
rm
autoconf-trace-printk.c
151
0644
edit
dl
rm
autoconf-tracepoint-has-data.c
493
0644
edit
dl
rm
autoconf-tracepoint-strings.c
233
0644
edit
dl
rm
autoconf-uaccess.c
28
0644
edit
dl
rm
autoconf-uapi-mount.c
52
0644
edit
dl
rm
autoconf-udelay_simple.c
90
0644
edit
dl
rm
autoconf-uidgid.c
50
0644
edit
dl
rm
autoconf-unwind-stack-trace.c
326
0644
edit
dl
rm
autoconf-uprobe-get-pc.c
374
0644
edit
dl
rm
autoconf-utrace-regset.c
273
0644
edit
dl
rm
autoconf-utrace-via-tracepoints.c
1712
0644
edit
dl
rm
autoconf-vm-area-pte.c
141
0644
edit
dl
rm
autoconf-walk-stack.c
217
0644
edit
dl
rm
autoconf-x86-fs.c
90
0644
edit
dl
rm
autoconf-x86-gs.c
90
0644
edit
dl
rm
autoconf-x86-uniregs.c
140
0644
edit
dl
rm
autoconf-x86-xfs.c
91
0644
edit
dl
rm
common_session_state.h
3249
0644
edit
dl
rm
compat_net.h
858
0644
edit
dl
rm
compat_structs.h
4409
0644
edit
dl
rm
compat_unistd.h
68384
0644
edit
dl
rm
copy.c
2717
0644
edit
dl
rm
debug.h
2978
0644
edit
dl
rm
io.c
5291
0644
edit
dl
rm
itrace.c
14874
0644
edit
dl
rm
kprobes.c
25126
0644
edit
dl
rm
loc2c-runtime.h
29874
0644
edit
dl
rm
map_list.h
1220
0644
edit
dl
rm
map_runtime.h
5266
0644
edit
dl
rm
namespaces.h
7128
0644
edit
dl
rm
netfilter.c
1410
0644
edit
dl
rm
perf.c
7596
0644
edit
dl
rm
perf.h
1272
0644
edit
dl
rm
perf_event_counter_context.c
336
0644
edit
dl
rm
perf_probe_handler_nmi.c
278
0644
edit
dl
rm
perf_read.h
959
0644
edit
dl
rm
print.c
11402
0644
edit
dl
rm
probe_lock.h
1807
0644
edit
dl
rm
regs-ia64.c
3741
0644
edit
dl
rm
regs.c
13490
0644
edit
dl
rm
runtime.h
12591
0644
edit
dl
rm
runtime_context.h
6089
0644
edit
dl
rm
runtime_defines.h
1041
0644
edit
dl
rm
stap_mmap_lock.h
343
0644
edit
dl
rm
stat_runtime.h
1774
0644
edit
dl
rm
stp_tls.h
1181
0644
edit
dl
rm
stp_tracepoint.c
11481
0644
edit
dl
rm
stp_tracepoint.h
2270
0644
edit
dl
rm
syscalls-common.h
976
0644
edit
dl
rm
task_finder.c
53860
0644
edit
dl
rm
task_finder2.c
57640
0644
edit
dl
rm
task_finder_map.c
5194
0644
edit
dl
rm
task_finder_stubs.c
2442
0644
edit
dl
rm
task_work_compatibility.h
1283
0644
edit
dl
rm
timer.c
2200
0644
edit
dl
rm
timer.h
1383
0644
edit
dl
rm
timer_compatibility.h
2317
0644
edit
dl
rm
uprobes-common.c
15573
0644
edit
dl
rm
uprobes-common.h
1653
0644
edit
dl
rm
uprobes-inc.h
484
0644
edit
dl
rm
uprobes-inode.c
34086
0644
edit
dl
rm
Edit:
/usr/share/systemtap/runtime/linux/runtime.h
(12591B)
/* main header file for Linux * Copyright (C) 2005-2019 Red Hat Inc. * Copyright (C) 2005-2006 Intel Corporation. * * This file is part of systemtap, and is free software. You can * redistribute it and/or modify it under the terms of the GNU General * Public License (GPL); either version 2, or (at your option) any * later version. */ #ifndef _LINUX_RUNTIME_H_ #define _LINUX_RUNTIME_H_ #include <linux/module.h> #include <linux/ctype.h> #include <linux/kernel.h> #include <linux/miscdevice.h> #include <linux/init.h> #include <linux/hash.h> #include <linux/string.h> #include <linux/kprobes.h> #include <linux/proc_fs.h> #include <linux/vmalloc.h> #include <linux/slab.h> #include <linux/time.h> #include <linux/random.h> #include <linux/spinlock.h> #include <linux/hardirq.h> #include <asm/uaccess.h> #include <linux/kallsyms.h> #include <linux/version.h> #if LINUX_VERSION_CODE >= KERNEL_VERSION(3,17,0) #include <generated/utsrelease.h> #else #include <linux/vermagic.h> #endif #include <linux/utsname.h> #include <linux/compat.h> #include <linux/sched.h> #include <linux/mm.h> #include "timer_compatibility.h" #include <linux/delay.h> #include <linux/profile.h> #include <linux/rcupdate.h> //#include <linux/utsrelease.h> // newer kernels only //#include <linux/compile.h> #ifdef STAPCONF_GENERATED_COMPILE #include <generated/compile.h> #endif // PR26811: Replace some declarations after set_fs() removal in kernel 5.10+. // Should use the STP_* prefixed defines outside of STAPCONF_SET_FS. #if defined(STAPCONF_SET_FS) #define stp_mm_segment_t mm_segment_t #define STP_KERNEL_DS KERNEL_DS #define STP_USER_DS USER_DS // XXX MM_SEG_IS_KERNEL only used #ifndef STAPCONF_SET_FS #else #define stp_mm_segment_t unsigned long #define STP_KERNEL_DS 0 #define STP_USER_DS 1 #define MM_SEG_IS_KERNEL(seg) ((seg)==STP_KERNEL_DS) // Required for kernel write operations: static void *kallsyms_copy_to_kernel_nofault; #endif /* A fallthrough; macro to let the runtime survive -Wimplicit-fallthrough=5 */ /* from <linux/compiler_attribute.h> */ #ifndef fallthrough #if __GNUC__ < 5 # define fallthrough do {} while (0) /* fallthrough */ #else #if __has_attribute(__fallthrough__) # define fallthrough __attribute__((__fallthrough__)) #else # define fallthrough do {} while (0) /* fallthrough */ #endif #endif #endif #if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,23) #include <linux/user_namespace.h> #endif #if !defined (CONFIG_DEBUG_FS) && !defined (CONFIG_DEBUG_FS_MODULE) #error "DebugFS is required and was not found in the kernel." #endif #if defined(STAPCONF_UDELAY_SIMPLE_EXPORTED) #undef udelay #define udelay(x) udelay_simple(x) #elif defined(STAPCONF_UDELAY_SIMPLE) #undef udelay static void *kallsyms_udelay_simple; typedef typeof(&udelay_simple) udelay_simple_fn; #define udelay(x) ((* (udelay_simple_fn)(kallsyms_udelay_simple))((x))) #endif #ifndef clamp #define clamp(val, low, high) min(max(low, val), high) #endif #ifndef clamp_t #define clamp_t(type, val, low, high) min_t(type, max_t(type, low, val), high) #endif static void _stp_dbug (const char *func, int line, const char *fmt, ...) __attribute__ ((format (printf, 3, 4))); static void _stp_error (const char *fmt, ...) __attribute__ ((format (printf, 1, 2))); static void _stp_warn (const char *fmt, ...) __attribute__ ((format (printf, 1, 2))); static void _stp_exit(void); #ifdef STAPCONF_HLIST_4ARGS #define stap_hlist_for_each_entry(a,b,c,d) hlist_for_each_entry(a,b,c,d) #define stap_hlist_for_each_entry_rcu(a,b,c,d) hlist_for_each_entry_rcu(a,b,c,d) #define stap_hlist_for_each_entry_safe(a,b,c,d,e) hlist_for_each_entry_safe(a,b,c,d,e) #else #define stap_hlist_for_each_entry(a,b,c,d) (void) b; hlist_for_each_entry(a,c,d) #define stap_hlist_for_each_entry_rcu(a,b,c,d) (void) b; hlist_for_each_entry_rcu(a,c,d) #define stap_hlist_for_each_entry_safe(a,b,c,d,e) (void) b; hlist_for_each_entry_safe(a,c,d,e) #endif #ifndef preempt_enable_no_resched #ifdef CONFIG_PREEMPT_COUNT #define preempt_enable_no_resched() do { \ barrier(); \ preempt_count_dec(); \ } while (0) #else #define preempt_enable_no_resched() barrier() #endif #endif #ifndef rcu_dereference_sched #define rcu_dereference_sched(p) rcu_dereference(p) #endif /* unprivileged user support */ #ifdef STAPCONF_TASK_UID #define STP_CURRENT_EUID (current->euid) #else #if defined(CONFIG_USER_NS) || (LINUX_VERSION_CODE >= KERNEL_VERSION(3,14,0)) #ifndef STAPCONF_FROM_KUID_MUNGED #define from_kuid_munged(user_ns, uid) ((uid)) #define from_kgid_munged(user_ns, gid) ((gid)) #endif /* !STAPCONF_FROM_KUID_MUNGED */ #define STP_CURRENT_EUID (from_kuid_munged(current_user_ns(), task_euid(current))) #else #define STP_CURRENT_EUID (task_euid(current)) #endif #endif #define is_myproc() (STP_CURRENT_EUID == _stp_uid) /* Check whether the required privilege level has been attained. */ #define STP_PRIVILEGE_CONTAINS(actualPrivilege, requiredPrivilege) ( \ ((actualPrivilege) & (requiredPrivilege)) == (requiredPrivilege) \ ) /* Translate user privilege mask to text. */ static const char *privilege_to_text (int p) { if (STP_PRIVILEGE_CONTAINS (p, STP_PR_STAPDEV)) return "stapdev"; if (STP_PRIVILEGE_CONTAINS (p, STP_PR_STAPSYS)) return "stapsys"; if (STP_PRIVILEGE_CONTAINS (p, STP_PR_STAPUSR)) return "stapusr"; return "unknown"; } #if STP_PRIVILEGE_CONTAINS (STP_PRIVILEGE, STP_PR_STAPDEV) || \ STP_PRIVILEGE_CONTAINS (STP_PRIVILEGE, STP_PR_STAPSYS) #define assert_is_myproc() do {} while (0) #else #define assert_is_myproc() do { \ if (! is_myproc()) { \ snprintf (CONTEXT->error_buffer, MAXSTRINGLEN, STAP_MSG_RUNTIME_H_01, \ current->tgid, STP_CURRENT_EUID); \ CONTEXT->last_error = CONTEXT->error_buffer; \ goto out; \ } } while (0) #endif #include "debug.h" /* atomic globals */ static atomic_t _stp_transport_failures = ATOMIC_INIT (0); static struct { atomic_t ____cacheline_aligned_in_smp seq; } _stp_seq = { ATOMIC_INIT (0) }; #define _stp_seq_inc() (atomic_inc_return(&_stp_seq.seq)) /* dwarf unwinder only tested so far on arm, i386, x86_64, ppc64 and s390x. Only define STP_USE_DWARF_UNWINDER when STP_NEED_UNWIND_DATA, as set through a pragma:unwind in one of the [u]context-unwind.stp functions. */ #if (defined(__arm__) || defined(__i386__) || defined(__x86_64__) || defined(__powerpc64__)) || defined (__s390x__) || defined(__aarch64__) || defined(__mips__) || defined(__riscv) #ifdef STP_NEED_UNWIND_DATA #ifndef STP_USE_DWARF_UNWINDER #define STP_USE_DWARF_UNWINDER #endif #endif #endif // PR26074: Obtain kallsyms_*() addresses from relocations, // call via wrapper in runtime/sym.c: #if !defined(STAPCONF_KALLSYMS_LOOKUP_NAME_EXPORTED) static void *_stp_kallsyms_lookup_name; #endif // PR11514: kallsyms_on_each_symbol() should not be used on PPC64. #ifndef CONFIG_PPC64 #define STAPCONF_KALLSYMS_ON_EACH_SYMBOL #if !defined(STAPCONF_KALLSYMS_ON_EACH_SYMBOL_EXPORTED) // XXX Should not be static, since it is linked into kprobes.c. static void *_stp_kallsyms_on_each_symbol; #endif #endif // PR13489, inode-uprobes sometimes lacks the necessary SYMBOL_EXPORT's. #if !defined(STAPCONF_TASK_USER_REGSET_VIEW_EXPORTED) static void *kallsyms_task_user_regset_view; #endif #if !defined(STAPCONF_UPROBE_REGISTER_EXPORTED) static void *kallsyms_uprobe_register; #endif #if !defined(STAPCONF_UPROBE_UNREGISTER_EXPORTED) static void *kallsyms_uprobe_unregister; #endif #if !defined(STAPCONF_UPROBE_GET_SWBP_ADDR_EXPORTED) static void *kallsyms_uprobe_get_swbp_addr; #endif /* task_work functions lack the necessary SYMBOL_EXPORT's */ #if !defined(STAPCONF_TASK_WORK_ADD_EXPORTED) static void *kallsyms_task_work_add; #endif #if !defined(STAPCONF_TASK_WORK_CANCEL_EXPORTED) static void *kallsyms_task_work_cancel; #endif #if !defined(STAPCONF_TRY_TO_WAKE_UP_EXPORTED) && !defined(STAPCONF_WAKE_UP_STATE_EXPORTED) static void *kallsyms_wake_up_state; #endif #if !defined(STAPCONF_SIGNAL_WAKE_UP_STATE_EXPORTED) static void *kallsyms_signal_wake_up_state; #endif #if !defined(STAPCONF_SIGNAL_WAKE_UP_EXPORTED) static void *kallsyms_signal_wake_up; #endif #if !defined(STAPCONF___LOCK_TASK_SIGHAND_EXPORTED) static void *kallsyms___lock_task_sighand; #endif #if !defined(STAPCONF_GET_MM_EXE_FILE_EXPORTED) static void *kallsyms_get_mm_exe_file; #endif #include "access_process_vm.h" #include "loc2c-runtime.h" #include "alloc.c" #include "print.h" #include "stp_string.c" #include "arith.c" #include "copy.c" #include "../regs.c" #include "regs-ia64.c" #if (defined(CONFIG_UTRACE) || defined(STAPCONF_UTRACE_VIA_TRACEPOINTS)) #define HAVE_TASK_FINDER #include "task_finder.c" #else /* stub functionality that fails gracefully */ #include "task_finder_stubs.c" #endif #ifdef _HAVE_PERF_ /* Now that we've got the task_finder included (one way or another), * we can include the perf stuff (if needed). */ #include <linux/perf_event.h> #include "linux/perf.h" #endif #include "sym.c" #ifdef STP_PERFMON #include "perf.c" #endif #include "addr-map.c" #include "stat.c" /* DWARF unwinder only tested so far on i386, x86_64 and ppc64. We only need to compile in the unwinder when both STP_NEED_UNWIND_DATA (set when a stap script defines pragma:unwind, as done in [u]context-unwind.stp) is defined and the architecture actually supports dwarf unwinding (as defined by STP_USE_DWARF_UNWINDER in runtime.h). */ #ifdef STP_USE_DWARF_UNWINDER #include "unwind.c" #else /* We still need unwind.h for a few structures (unwind_context and * unwind_cache). */ #include "unwind/unwind.h" #endif #ifdef module_param_cb /* kernels >= 2.6.36 */ #define _STP_KERNEL_PARAM_ARG const struct kernel_param #else #define _STP_KERNEL_PARAM_ARG struct kernel_param #endif /* Support functions for int64_t module parameters. */ static int param_set_int64_t(const char *val, _STP_KERNEL_PARAM_ARG *kp) { char *endp; long long ll; if (!val) return -EINVAL; /* simple_strtoll isn't exported... */ if (*val == '-') ll = -simple_strtoull(val+1, &endp, 0); else ll = simple_strtoull(val, &endp, 0); if ((endp == val) || ((int64_t)ll != ll)) return -EINVAL; *((int64_t *)kp->arg) = ll; return 0; } static int param_get_int64_t(char *buffer, _STP_KERNEL_PARAM_ARG *kp) { return sprintf(buffer, "%lli", (long long)*((int64_t *)kp->arg)); } #define param_check_int64_t(name, p) __param_check(name, p, int64_t) #ifdef module_param_cb /* kernels >= 2.6.36 */ static struct kernel_param_ops param_ops_int64_t = { .set = param_set_int64_t, .get = param_get_int64_t, }; #endif #undef _STP_KERNEL_PARAM_ARG static inline void stp_synchronize_sched(void) { flush_scheduled_work(); #if defined(STAPCONF_SYNCHRONIZE_SCHED) synchronize_sched(); #elif defined(STAPCONF_SYNCHRONIZE_RCU) synchronize_rcu(); #elif defined(STAPCONF_SYNCHRONIZE_KERNEL) synchronize_kernel(); #else #error "No implementation for stp_synchronize_sched!" #endif } /************* Module Stuff ********************/ static int systemtap_kernel_module_init (void); static void systemtap_kernel_module_exit (void); static unsigned long stap_hash_seed; /* Init during module startup */ static int stap_init_module (void) { int rc; /* With deliberate hash-collision-inducing data conceivably fed to stap, it is beneficial to add some runtime-random value to the map hash. */ get_random_bytes(&stap_hash_seed, sizeof (stap_hash_seed)); rc = systemtap_kernel_module_init(); if (rc) return rc; rc = _stp_transport_init(); if (rc) systemtap_kernel_module_exit(); return rc; } module_init(stap_init_module); void stap_cleanup_module(void) { _stp_transport_close(); /* PR19833. /proc/systemtap/$MODULENAME may be disposed-of here, due to tapset-procfs.cxx cleaning up after procfs probes (such as in --monitor mode). */ systemtap_kernel_module_exit(); } module_exit(stap_cleanup_module); #define pseudo_atomic_cmpxchg(v, old, new) ({\ int ret;\ unsigned long flags;\ local_irq_save(flags);\ ret = atomic_read(v);\ if (likely(ret == old))\ atomic_set(v, new);\ local_irq_restore(flags);\ ret; }) #if defined(__ia64__) && defined(__GNUC__) && (__GNUC__ < 4) /* Due to http://gcc.gnu.org/PR21838, old gcc on ia64 generates calls to __ia64_save_stack_nonlocal(), since our generated code uses __label__ constructs since PR11004. This dummy declaration works around the undefined reference. */ void __ia64_save_stack_nonlocal (void) { } #endif MODULE_LICENSE("GPL"); #endif /* _LINUX_RUNTIME_H_ */
Save
cmd:
run