runtime/dyninst/stapdyn.h - systemtap
Macros defined
Source code
/* 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_ */