diff options
author | Vladimir Mezentsev <vladimir.mezentsev@oracle.com> | 2022-03-11 08:58:31 +0000 |
---|---|---|
committer | Nick Clifton <nickc@redhat.com> | 2022-03-11 08:58:31 +0000 |
commit | bb368aad297fe3ad40cf397e6fc85aa471429a28 (patch) | |
tree | 0ab25909b8fe789d676bbdb00d501d4d485e4afe /include | |
parent | a655f19af95eb685ba64f48ee8fc2b3b7a3d886a (diff) | |
download | gdb-bb368aad297fe3ad40cf397e6fc85aa471429a28.zip gdb-bb368aad297fe3ad40cf397e6fc85aa471429a28.tar.gz gdb-bb368aad297fe3ad40cf397e6fc85aa471429a28.tar.bz2 |
gprofng: a new GNU profiler
top-level
* Makefile.def: Add gprofng module.
* configure.ac: Add --enable-gprofng option.
* src-release.sh: Add gprofng.
* Makefile.in: Regenerate.
* configure: Regenerate.
* gprofng: New directory.
binutils
* MAINTAINERS: Add gprofng maintainer.
* README-how-to-make-a-release: Add gprofng.
include.
* collectorAPI.h: New file.
* libcollector.h: New file.
* libfcollector.h: New file.
Diffstat (limited to 'include')
-rw-r--r-- | include/ChangeLog | 6 | ||||
-rw-r--r-- | include/collectorAPI.h | 73 | ||||
-rw-r--r-- | include/libcollector.h | 89 | ||||
-rw-r--r-- | include/libfcollector.h | 42 |
4 files changed, 210 insertions, 0 deletions
diff --git a/include/ChangeLog b/include/ChangeLog index 416fb6b..6cda7e6 100644 --- a/include/ChangeLog +++ b/include/ChangeLog @@ -1,3 +1,9 @@ +2022-03-11 Vladimir Mezentsev <vladimir.mezentsev@oracle.com> + + * collectorAPI.h: New file. + * libcollector.h: New file. + * libfcollector.h: New file. + 2022-01-25 Klaus Ziegler <klausz@haus-gisela.de> PR 28816 diff --git a/include/collectorAPI.h b/include/collectorAPI.h new file mode 100644 index 0000000..df0d0cd --- /dev/null +++ b/include/collectorAPI.h @@ -0,0 +1,73 @@ +/* Copyright (C) 2021-2022 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 _COLLECTORAPI_H +#define _COLLECTORAPI_H + +/* This file contains function prototypes for the user-callable API + routines in libcollector. */ + +#include <pthread.h> + +#ifdef __cplusplus +extern "C" +{ +#endif + /* Routine to record a sample in the experiment. */ + extern void collector_sample (const char *name); + + /* Routine to suspend data collection during an experiment. */ + extern void collector_pause (void); + + /* Routine to resume data collection during an experiment. */ + extern void collector_resume (void); + + /* Routine to suspend per-thread data collection during an experiment. */ + extern void collector_thread_pause (pthread_t tid); + + /* Routine to resume per-thread data collection during an experiment. */ + extern void collector_thread_resume (pthread_t tid); + + /* Routine to close the experiment, and stop all data collection. */ + extern void collector_terminate_expt (void); + + typedef struct + { + unsigned int offset; + unsigned int lineno; + } Lineno; + + /* Routines to let libcollector know about dynamically loaded functions. */ + extern void collector_func_load (const char *name, const char *alias, + const char *sourcename, void *vaddr, + int size, int lntsize, Lineno *lntable); + + extern void collector_func_unload (void *vaddr); + +#ifdef NEED_COLLECTOR_MODULE + extern void collector_module_load (const char *modulename, void *vaddr); + extern void collector_module_unload (void *vaddr); +#endif + +#ifdef __cplusplus +} +#endif + +#endif /* _COLLECTORAPI_H */ diff --git a/include/libcollector.h b/include/libcollector.h new file mode 100644 index 0000000..5627cfd --- /dev/null +++ b/include/libcollector.h @@ -0,0 +1,89 @@ +/* Copyright (C) 2021-2022 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 */ diff --git a/include/libfcollector.h b/include/libfcollector.h new file mode 100644 index 0000000..c9a840a --- /dev/null +++ b/include/libfcollector.h @@ -0,0 +1,42 @@ +! Copyright (C) 2021-2022 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. +! +! Developer Sampling Collector interface include file + + interface + + ! Routine to record a sample in the experiment. + subroutine collector_sample(name) + character(len=*), intent(in) :: name + end subroutine + + ! Routine to suspend data collection during an experiment. + subroutine collector_pause() + end subroutine + + ! Routine to resume data collection during an experiment. + subroutine collector_resume() + end subroutine + + ! Routine to stop all data collection and close the experiment. + subroutine collector_terminate_expt() + end subroutine + + end interface |