1b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov/* Definitions of interface to the "low" (arch specific) functions 2b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov needed for interfacing the Valgrind gdbserver with the Valgrind 3b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov guest. 4b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov 5b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov Copyright (C) 2011 6b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov Free Software Foundation, Inc. 7b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov 8b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov This file has been inspired from a file that 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 VALGRIND_LOW_H 27b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov#define VALGRIND_LOW_H 28b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov 29b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov/* defines the characteristics of the "low" valgrind target architecture. 30b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov In other words, struct valgrind_target_ops defines the functions and 31b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov data which are specific to the architecture (x86 or amd64 or 32b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov ppc32 or ...). */ 33b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstruct valgrind_target_ops 34b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{ 35b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov int num_regs; 36b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov struct reg *reg_defs; 37b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov 38b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov int stack_pointer_regno; 39b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov /* register number of the stack pointer register */ 40b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov 41b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov /* transfer the register regno from/to valgrind (guest state) 42b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov to/from buf 43b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov according to transfer_direction. 44b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov *mod set to True if destination content is modified by the transfer 45b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov otherwise it is set to False. */ 46b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov void (*transfer_register) (ThreadId tid, int regno, void * buf, 47b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov transfer_direction dir, int size, Bool *mod); 48b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov 49b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov 50b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov CORE_ADDR (*get_pc) (void); 51b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov void (*set_pc) (CORE_ADDR newpc); 52b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov 53b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov /* What string to report to GDB when it asks for the architecture, 54b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov or NULL not to answer. */ 55b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov const char *arch_string; 56b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov 57663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng /* Returns the target xml description of the set of registers. 58b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov For some architectures (e.g. arm), it is mandatory 59b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov to give a description of the registers, otherwise 60b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov gdb does not understand the reply to the 'g' packet 61663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng (which is used to get the registers). 62663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng If shadow_mode, returns a target xml description 63663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng including the two shadow registers sets. 64663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng This is mandatory to use the option --vgdb-shadow-registers=yes. 65663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng Returns NULL if there is no target xml file*/ 66663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng char* (*target_xml) (Bool shadow_mode); 67b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov 68b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}; 69b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov 70b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovextern void x86_init_architecture (struct valgrind_target_ops *target); 71b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovextern void amd64_init_architecture (struct valgrind_target_ops *target); 72b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovextern void arm_init_architecture (struct valgrind_target_ops *target); 73b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovextern void ppc32_init_architecture (struct valgrind_target_ops *target); 74b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovextern void ppc64_init_architecture (struct valgrind_target_ops *target); 75b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovextern void s390x_init_architecture (struct valgrind_target_ops *target); 76663860b1408516d02ebfcb3a9999a134e6cfb223Ben Chengextern void mips32_init_architecture (struct valgrind_target_ops *target); 77b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov 78b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov#endif 79