1663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng/* Target operations for the Valgrind remote server for GDB. 2663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng Copyright (C) 2002, 2003, 2004, 2005, 2012 3b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov Free Software Foundation, Inc. 4663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng Philippe Waroquiers. 5b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov 6b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov Contributed by MontaVista Software. 7b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov 8b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov This file is part of GDB. 9b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov It has been modified to integrate it in valgrind 10b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov 11b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov This program is free software; you can redistribute it and/or modify 12b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov it under the terms of the GNU General Public License as published by 13b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov the Free Software Foundation; either version 2 of the License, or 14b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov (at your option) any later version. 15b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov 16b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov This program is distributed in the hope that it will be useful, 17b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov but WITHOUT ANY WARRANTY; without even the implied warranty of 18b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 19b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov GNU General Public License for more details. 20b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov 21b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov You should have received a copy of the GNU General Public License 22b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov along with this program; if not, write to the Free Software 23b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov Foundation, Inc., 51 Franklin Street, Fifth Floor, 24b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov Boston, MA 02110-1301, USA. */ 25b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov 26b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov#ifndef TARGET_H 27b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov#define TARGET_H 28b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov 29663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng/* This file defines the architecture independent Valgrind gdbserver 30663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng high level operations such as read memory, get/set registers, ... 31663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng 32663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng These high level operations are called by the gdbserver 33663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng protocol implementation (e.g. typically server.c). 34663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng 35663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng For some of these high level operations, target.c will call 36663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng low level operations dependent on the architecture. 37663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng 38663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng For example, getting or setting the registers will work on a 39663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng register cache. The exact details of the registers (how much, 40663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng their size, etc) is not defined by target.c or the register cache. 41663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng 42663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng Such architecture dependent information is defined by 43663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng valgrind_low.h/valgrind-low-xxxxx.c providing 'low level operations' 44663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng specific to the xxxxx architecture (for example, 45663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng valgrind-low-x86.c, valgrind-low-armc.c). */ 46663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng 47663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng/* -------------------------------------------------------------------------- */ 48663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng/* ------------------------ Initialisation ---------------------------------- */ 49663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng/* -------------------------------------------------------------------------- */ 50663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng 51663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng/* Initialize the Valgrind high target. This will in turn 52663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng initialise the low (architecture specific) target. */ 53663860b1408516d02ebfcb3a9999a134e6cfb223Ben Chengextern void valgrind_initialize_target(void); 54663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng 55663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng/* initialize or re-initialize the register set of the low target. 56663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng if shadow_mode, then (re-)define the normal and valgrind shadow registers 57663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng else (re-)define only the normal registers. */ 58663860b1408516d02ebfcb3a9999a134e6cfb223Ben Chengextern void initialize_shadow_low (Bool shadow_mode); 59663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng 60663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng/* Returns the name of the xml target description file. 61663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng returns NULL if no xml target description available. 62663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng if shadow_mode, then returns the xml target description 63663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng with the shadow registers 64663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng else returns the xml target description only for 65663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng the normal registers. */ 66663860b1408516d02ebfcb3a9999a134e6cfb223Ben Chengextern char* valgrind_target_xml (Bool shadow_mode); 67663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng 68663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng 69663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng/* -------------------------------------------------------------------------- */ 70663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng/* --------------------------- Execution control ---------------------------- */ 71663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng/* -------------------------------------------------------------------------- */ 72663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng 73663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng/* This structure describes how to resume the execution. 74663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng Currently, there is no way to resume only a specific thread. */ 75b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstruct thread_resume 76b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{ 77b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov /* If non-zero, we want to single-step. */ 78b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov int step; 79b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov 80b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov /* If non-zero, send this signal when we resume. */ 81b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov int sig; 82b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}; 83b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov 84663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng/* Prepare to Resume (i.e. restart) the guest. 85663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng The resume info indicates how the resume will be done. 86663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng In case GDB has changed the program counter, valgrind_resume 87663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng will also ensure that the execution will be resumed at this 88663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng new program counter. 89663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng The Resume is really only executed once the gdbserver 90663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng returns (giving back the control to Valgrind). */ 91663860b1408516d02ebfcb3a9999a134e6cfb223Ben Chengextern void valgrind_resume (struct thread_resume *resume_info); 92663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng 93663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng/* When Valgrind gets the control, it will execute the guest 94663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng process till there is a reason to call the gdbserver 95663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng again (e.g. because a breakpoint is encountered or the 96663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng tool reports an error). 97663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng In such case, the executionof guest code stops, and the 98663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng control is given to gdbserver. Gdbserver will send a resume 99663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng reply packet to GDB. 100663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng 101663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng valgrind_wait gets from Valgrind data structures the 102663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng information needed produce the resume reply for GDB: 103663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng a.o. OURSTATUS will be filled in with a response code to send to GDB. 104663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng 105663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng Returns the signal which caused the process to stop, in the 106663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng remote protocol numbering (e.g. TARGET_SIGNAL_STOP), or the 107663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng exit code as an integer if *OURSTATUS is 'W'. */ 108663860b1408516d02ebfcb3a9999a134e6cfb223Ben Chengextern unsigned char valgrind_wait (char *outstatus); 109663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng 110663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng/* When execution is stopped and gdbserver has control, more 111663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng info about the stop reason can be retrieved using the following 112663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng functions. */ 113663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng 114663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng/* gets the addr at which a (possible) break must be ignored once. 115663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng If there is no such break to be ignored once, 0 is returned. 116663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng This is needed for the following case: 117663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng The user sets a break at address AAA. 118663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng The break is encountered. Then the user does stepi 119663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng (i.e. step one instruction). 120663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng In such a case, the already encountered break must be ignored 121663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng to ensure the stepi will advance by one instruction: a "break" 122663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng is implemented in valgrind by some helper code just after the 123663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng instruction mark at which the break is set. This helper code 124663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng verifies if either there is a break at the current PC 125663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng or if we are in stepping mode. If we are in stepping mode, 126663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng the already encountered break must be ignored once to advance 127663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng to the next instruction. 128663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng ??? need to check if this is *really* needed. */ 129663860b1408516d02ebfcb3a9999a134e6cfb223Ben Chengextern Addr valgrind_get_ignore_break_once(void); 130663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng 131663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng/* When addr > 0, ensures the next resume reply packet informs 132663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng gdb about the encountered watchpoint. 133663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng valgrind_stopped_by_watchpoint() will return 1 till reset. 134663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng Use addr 0x0 to reset. */ 135663860b1408516d02ebfcb3a9999a134e6cfb223Ben Chengextern void VG_(set_watchpoint_stop_address) (Addr addr); 136663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng 137663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng/* Returns 1 if target was stopped due to a watchpoint hit, 0 otherwise. */ 138663860b1408516d02ebfcb3a9999a134e6cfb223Ben Chengextern int valgrind_stopped_by_watchpoint (void); 139663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng 140663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng/* Returns the address associated with the watchpoint that hit, if any; 141663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng returns 0 otherwise. */ 142663860b1408516d02ebfcb3a9999a134e6cfb223Ben Chengextern CORE_ADDR valgrind_stopped_data_address (void); 143663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng 144663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng/* True if gdbserver is single stepping the valgrind process */ 145663860b1408516d02ebfcb3a9999a134e6cfb223Ben Chengextern Bool valgrind_single_stepping(void); 146663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng 147663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng/* Set Valgrind in single stepping mode or not according to Bool. */ 148663860b1408516d02ebfcb3a9999a134e6cfb223Ben Chengextern void valgrind_set_single_stepping(Bool); 149663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng 150663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng/* -------------------------------------------------------------------------- */ 151663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng/* ----------------- Examining/modifying data while stopped ----------------- */ 152663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng/* -------------------------------------------------------------------------- */ 153663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng 154663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng/* Return 1 iff the thread with ID tid is alive. */ 155663860b1408516d02ebfcb3a9999a134e6cfb223Ben Chengextern int valgrind_thread_alive (unsigned long tid); 156663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng 157663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng/* Allows to controls the thread (current_inferior) used for following 158663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng valgrind_(fetch|store)_registers calls. 159663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng If USE_GENERAL, 160663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng current_inferior is set to general_thread 161663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng else 162663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng current_inferior is set to step_thread or else cont_thread. 163663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng If the above gives no valid thread, then current_inferior is 164663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng set to the first valid thread. */ 165663860b1408516d02ebfcb3a9999a134e6cfb223Ben Chengextern void set_desired_inferior (int use_general); 166663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng 167663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng/* Fetch registers from the current_inferior thread. 168663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng If REGNO is -1, fetch all registers; otherwise, fetch at least REGNO. */ 169663860b1408516d02ebfcb3a9999a134e6cfb223Ben Chengextern void valgrind_fetch_registers (int regno); 170663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng 171663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng/* Store registers to the current_inferior thread. 172663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng If REGNO is -1, store all registers; otherwise, store at least REGNO. */ 173663860b1408516d02ebfcb3a9999a134e6cfb223Ben Chengextern void valgrind_store_registers (int regno); 174663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng 175663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng 176663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng 177663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng/* Read memory from the inferior process. 178663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng Read LEN bytes at MEMADDR into a buffer at MYADDR. 179663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng Returns 0 on success and errno on failure. */ 180663860b1408516d02ebfcb3a9999a134e6cfb223Ben Chengextern int valgrind_read_memory (CORE_ADDR memaddr, 181663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng unsigned char *myaddr, int len); 182663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng 183663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng/* Write memory to the inferior process. 184663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng Write LEN bytes from the buffer at MYADDR to MEMADDR. 185663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng Returns 0 on success and errno on failure. */ 186663860b1408516d02ebfcb3a9999a134e6cfb223Ben Chengextern int valgrind_write_memory (CORE_ADDR memaddr, 187663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng const unsigned char *myaddr, int len); 188663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng 189663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng 190663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng/* Insert and remove a hardware watchpoint. 191663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng Returns 0 on success, -1 on failure and 1 on unsupported. 192663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng The type is coded as follows: 193663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng 2 = write watchpoint 194663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng 3 = read watchpoint 195663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng 4 = access watchpoint 196663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng*/ 197663860b1408516d02ebfcb3a9999a134e6cfb223Ben Chengextern int valgrind_insert_watchpoint (char type, CORE_ADDR addr, int len); 198663860b1408516d02ebfcb3a9999a134e6cfb223Ben Chengextern int valgrind_remove_watchpoint (char type, CORE_ADDR addr, int len); 199663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng 200663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng 201663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng/* -------------------------------------------------------------------------- */ 202663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng/* ----------- Utils functions for low level arch specific files ------------ */ 203663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng/* -------------------------------------------------------------------------- */ 204663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng 205663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng/* returns a pointer to the architecture state corresponding to 206663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng the provided register set: 0 => normal guest registers, 207663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng 1 => shadow1 208663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng 2 => shadow2 209663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng*/ 210663860b1408516d02ebfcb3a9999a134e6cfb223Ben Chengextern VexGuestArchState* get_arch (int set, ThreadState* tst); 211b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov 212b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov/* like memcpy but first check if content of destination and source 213b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov differs. If no difference, no copy is done, *mod set to False. 214b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov If different; copy is done, *mod set to True. */ 215b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovextern void* VG_(dmemcpy) ( void *d, const void *s, SizeT sz, Bool *mod ); 216b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov 217b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovtypedef 218b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov enum { 219b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov valgrind_to_gdbserver, 220b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov gdbserver_to_valgrind} transfer_direction; 221b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov 222b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov// According to dir, calls VG_(dmemcpy) 223b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov// to copy data from/to valgrind to/from gdbserver. 224b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov// If the transferred data differs from what is currently stored, 225b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov// sets *mod to True otherwise set *mod to False. 226b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovextern void VG_(transfer) (void *valgrind, 227b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov void *gdbserver, 228b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov transfer_direction dir, 229b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov SizeT sz, 230b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov Bool *mod); 231b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov 232663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng 233663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng 234b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov#endif /* TARGET_H */ 235