diff options
Diffstat (limited to 'include/libcollector.h')
-rw-r--r-- | include/libcollector.h | 89 |
1 files changed, 89 insertions, 0 deletions
diff --git a/include/libcollector.h b/include/libcollector.h new file mode 100644 index 0000000..e1c2a44 --- /dev/null +++ b/include/libcollector.h @@ -0,0 +1,89 @@ +/* Copyright (C) 2021-2023 Free Software Foundation, Inc. + Contributed by Oracle. + + This file is part of GNU Binutils. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3, or (at your option) + any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, 51 Franklin Street - Fifth Floor, Boston, + MA 02110-1301, USA. */ + +#ifndef _LIBCOLLECTOR_H +#define _LIBCOLLECTOR_H + +typedef struct +{ + unsigned int offset; + unsigned int lineno; +} Lineno; + +#ifdef __cplusplus +extern "C" +{ +#endif + + /* This file contains function prototypes for the user-callable API + routines in libcollector for C and C++ codes. */ + + /* Routine to record a sample in the experiment. */ + void collector_sample (char *name); + + /* Routine to suspend data collection during an experiment. */ + void collector_pause (void); + + /* Routine to resume data collection during an experiment. */ + void collector_resume (void); + + /* Routine to suspend per-thread data collection during an experiment. */ + void collector_thread_pause (unsigned int tid); + + /* Routine to resume per-thread data collection during an experiment. */ + void collector_thread_resume (unsigned int tid); + + /* Routine to close the experiment, and stop all data collection. */ + void collector_terminate_expt (void); + + /* Routines to let libcollector know about a dynamically loaded function. */ + void collector_func_load (char *name, char *alias, char *sourcename, + void *vaddr, int size, int lntsize, Lineno *lntable); + void collector_func_unload (void *vaddr); + + /* Define the weak symbols for the API. */ + void collector_sample () __attribute__ ((weak)); + void collector_pause () __attribute__ ((weak)); + void collector_resume () __attribute__ ((weak)); + void collector_thread_pause () __attribute__ ((weak)); + void collector_thread_resume () __attribute__ ((weak)); + void collector_terminate_expt () __attribute__ ((weak)); + void collector_func_load () __attribute__ ((weak)); + void collector_func_unload () __attribute__ ((weak)); + +#ifdef __cplusplus +} +#endif + +/* Define the macros that actually get inserted in the caller's code. */ +#define collector_sample(x) (collector_sample ? collector_sample(x), 0 : 0) +#define collector_pause() (collector_pause ? collector_pause(), 0 : 0) +#define collector_resume() (collector_resume ? collector_resume(),0 : 0 +#define collector_thread_pause(tid) \ + (collector_thread_pause ? collector_thread_pause(tid), 0 : 0) +#define collector_thread_resume(tid) \ + (collector_thread_resume ? collector_thread_resume(tid), 0 : 0) +#define collector_terminate_expt() \ + (collector_terminate_expt ? collector_terminate_expt(), 0 : 0) +#define collector_func_load(x0,x1,x2,x3,x4,x5,x6) \ + collector_func_load ? collector_func_load(x0,x1,x2,x3,x4,x5,x6), 0 : 0) +#define collector_func_unload(x) \ + (collector_func_unload ? collector_func_unload(x), 0 : 0) +#endif /* _LIBCOLLECTOR_H */ |