관리-도구
편집 파일: stapdyn.h
/* stapdyn interface header * Copyright (C) 2012-2013 Red Hat Inc. * * 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 _STAPDYN_H_ #define _STAPDYN_H_ #ifdef __cplusplus extern "C" { #endif #include <stdint.h> #include <asm/ptrace.h> /* These are declarations of all interfaces that stapdyn may call in the * module, either directly or via dyninst in the mutatee. To maintain * compatibility as much as possible, function signatures should not be * changed between releases, only deprecated/renamed as necessary. * * NB: These are organized by the systemtap release in which each was first * added, so we can keep some idea of the ABI progression. */ /* With -fvisibility=hidden, we have to expose these manually. * Using "protected" keeps internal references always internal. */ #pragma GCC visibility push(protected) /**** STAP 2.0 : ****/ extern int stp_dyninst_session_init(void); extern void stp_dyninst_session_exit(void); extern uint64_t stp_dyninst_target_count(void); extern const char* stp_dyninst_target_path(uint64_t index); extern uint64_t stp_dyninst_probe_count(void); extern uint64_t stp_dyninst_probe_target(uint64_t index); extern uint64_t stp_dyninst_probe_offset(uint64_t index); extern uint64_t stp_dyninst_probe_semaphore(uint64_t index); extern int enter_dyninst_uprobe(uint64_t index, struct pt_regs *regs); /* This is somewhat of a hack until we can figure out how to build a pt_regs * struct directly with stapdyn. The varargs are all unsigned long, giving * first the original PC, then DWARF-ordered registers. */ extern int enter_dyninst_uprobe_regs(uint64_t index, unsigned long nregs, ...); /**** STAP 2.1 : ****/ /* uprobes-like flags */ #define STAPDYN_PROBE_FLAG_RETURN 0x1 /* utrace-like flags */ #define STAPDYN_PROBE_FLAG_PROC_BEGIN 0x100 #define STAPDYN_PROBE_FLAG_PROC_END 0x200 #define STAPDYN_PROBE_FLAG_THREAD_BEGIN 0x400 #define STAPDYN_PROBE_FLAG_THREAD_END 0x800 extern uint64_t stp_dyninst_probe_flags(uint64_t index); extern int enter_dyninst_utrace_probe(uint64_t index, struct pt_regs *regs); extern const char* stp_dyninst_shm_init(void); extern int stp_dyninst_shm_connect(const char* name); /**** STAP 2.2 : ****/ /* The following function is dynamically generated by systemtap, and * used by stapdyn to modify global variables at module startup only * (that is, *before* running stp_dyninst_session_init()). If the * name starts with '@', the name is assumed to be an internal value. */ extern int stp_global_setter(const char *name, const char *value); /**** STAP 2.3 : ****/ /* Just returns an exit code, for indicating errors in the script. * This should be called after stp_dyninst_session_exit (which really * should have returned int itself, but now it's a legacy API). */ int stp_dyninst_exit_status(void); /**** STAP 2.x : ****/ /* STAPDYN_PROBE_ALL_FLAGS was first added for 2.1, but is placed here so * it can continue to be updated with new flags too. */ #define STAPDYN_PROBE_ALL_FLAGS (uint64_t)(STAPDYN_PROBE_FLAG_RETURN \ | STAPDYN_PROBE_FLAG_PROC_BEGIN | STAPDYN_PROBE_FLAG_PROC_END \ | STAPDYN_PROBE_FLAG_THREAD_BEGIN | STAPDYN_PROBE_FLAG_THREAD_END) #pragma GCC visibility pop #ifdef __cplusplus } #endif #endif /* _STAPDYN_H_ */