| |
| /*--------------------------------------------------------------------*/ |
| /*--- Declarations common for vgdb and implementations ---*/ |
| /*--- of vgdb-invoker. vgdb.h ---*/ |
| /*--------------------------------------------------------------------*/ |
| |
| /* |
| This file is part of Valgrind, a dynamic binary instrumentation |
| framework. |
| |
| Copyright (C) 2011-2013 Philippe Waroquiers |
| |
| 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 2 of the |
| License, 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, Inc., 59 Temple Place, Suite 330, Boston, MA |
| 02111-1307, USA. |
| |
| The GNU General Public License is contained in the file COPYING. |
| */ |
| |
| #ifndef __VGDB_H |
| #define __VGDB_H |
| |
| #include "pub_core_basics.h" |
| #include "pub_core_vki.h" |
| #include "pub_core_gdbserver.h" |
| |
| #include <sys/types.h> |
| |
| extern int debuglevel; |
| extern struct timeval dbgtv; |
| /* if level <= debuglevel, print timestamp, then print provided by debug info */ |
| #define DEBUG(level, ...) (level <= debuglevel ? \ |
| gettimeofday(&dbgtv, NULL), \ |
| fprintf(stderr, "%ld.%6.6ld ", \ |
| (long int)dbgtv.tv_sec, \ |
| (long int)dbgtv.tv_usec), \ |
| fprintf(stderr, __VA_ARGS__),fflush(stderr) \ |
| : 0) |
| |
| /* same as DEBUG but does not print time stamp info */ |
| #define PDEBUG(level, ...) (level <= debuglevel ? \ |
| fprintf(stderr, __VA_ARGS__),fflush(stderr) \ |
| : 0) |
| |
| /* if errno != 0, |
| report the errno and fprintf the ... varargs on stderr. */ |
| #define ERROR(errno, ...) ((errno == 0 ? 0 : perror("syscall failed")), \ |
| fprintf(stderr, __VA_ARGS__), \ |
| fflush(stderr)) |
| /* same as ERROR, but also exits with status 1 */ |
| #define XERROR(errno, ...) ((errno == 0 ? 0 : perror("syscall failed")), \ |
| fprintf(stderr, __VA_ARGS__), \ |
| fflush(stderr), \ |
| exit(1)) |
| |
| /* Calls malloc (size). Exits if memory can't be allocated. */ |
| extern void *vmalloc(size_t size); |
| /* Calls realloc (size). Exits if memory can't be allocated. */ |
| extern void *vrealloc(void *ptr,size_t size); |
| |
| /* Will be set to True when any condition indicating we have to shutdown |
| is encountered. */ |
| extern Bool shutting_down; |
| |
| extern VgdbShared32 *shared32; |
| extern VgdbShared64 *shared64; |
| |
| /*--------------------------------------------------------------------*/ |
| /*--- Below is vgdb-invoker interface which must be implemented by ---*/ |
| /*--- all vgdb-invoker implementations. ---*/ |
| /*--------------------------------------------------------------------*/ |
| |
| /* Possibly produces additional usage information documenting the |
| invoker restrictions. */ |
| void invoker_restrictions_msg(void); |
| |
| /* Restore the registers to the saved value, then detaches from all threads. |
| Used as a cleanup handler for thread cancellation. */ |
| void invoker_cleanup_restore_and_detach(void *v_pid); |
| |
| /* Ensures that the gdbserver code is invoked by pid. |
| If an error occurs, resets the valgrind process |
| to the state it had before being invoked. |
| Returns True if invoke successful, False otherwise. */ |
| Bool invoker_invoke_gdbserver(pid_t pid); |
| |
| /* Called when connection with valgrind is lost. In case we |
| have lost the connection, it means that Valgrind has closed the |
| connection and is busy exiting. We can't and don't have to stop it in |
| this case. */ |
| void invoker_valgrind_dying(void); |
| |
| #endif // __VGDB_H |
| |
| /*--------------------------------------------------------------------*/ |
| /*--- end ---*/ |
| /*--------------------------------------------------------------------*/ |