pub_core_machine.h revision 7821e2ed55ac6c2303eb51a06bafd5baada2423d
1f536bbbd4bf2024926574c5ed99b3e6251c6ff44njn 2f536bbbd4bf2024926574c5ed99b3e6251c6ff44njn/*--------------------------------------------------------------------*/ 3f536bbbd4bf2024926574c5ed99b3e6251c6ff44njn/*--- Machine-related things. pub_core_machine.h ---*/ 4f536bbbd4bf2024926574c5ed99b3e6251c6ff44njn/*--------------------------------------------------------------------*/ 5f536bbbd4bf2024926574c5ed99b3e6251c6ff44njn 6f536bbbd4bf2024926574c5ed99b3e6251c6ff44njn/* 7f536bbbd4bf2024926574c5ed99b3e6251c6ff44njn This file is part of Valgrind, a dynamic binary instrumentation 8f536bbbd4bf2024926574c5ed99b3e6251c6ff44njn framework. 9f536bbbd4bf2024926574c5ed99b3e6251c6ff44njn 10f536bbbd4bf2024926574c5ed99b3e6251c6ff44njn Copyright (C) 2000-2005 Julian Seward 11f536bbbd4bf2024926574c5ed99b3e6251c6ff44njn jseward@acm.org 12f536bbbd4bf2024926574c5ed99b3e6251c6ff44njn 13f536bbbd4bf2024926574c5ed99b3e6251c6ff44njn This program is free software; you can redistribute it and/or 14f536bbbd4bf2024926574c5ed99b3e6251c6ff44njn modify it under the terms of the GNU General Public License as 15f536bbbd4bf2024926574c5ed99b3e6251c6ff44njn published by the Free Software Foundation; either version 2 of the 16f536bbbd4bf2024926574c5ed99b3e6251c6ff44njn License, or (at your option) any later version. 17f536bbbd4bf2024926574c5ed99b3e6251c6ff44njn 18f536bbbd4bf2024926574c5ed99b3e6251c6ff44njn This program is distributed in the hope that it will be useful, but 19f536bbbd4bf2024926574c5ed99b3e6251c6ff44njn WITHOUT ANY WARRANTY; without even the implied warranty of 20f536bbbd4bf2024926574c5ed99b3e6251c6ff44njn MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 21f536bbbd4bf2024926574c5ed99b3e6251c6ff44njn General Public License for more details. 22f536bbbd4bf2024926574c5ed99b3e6251c6ff44njn 23f536bbbd4bf2024926574c5ed99b3e6251c6ff44njn You should have received a copy of the GNU General Public License 24f536bbbd4bf2024926574c5ed99b3e6251c6ff44njn along with this program; if not, write to the Free Software 25f536bbbd4bf2024926574c5ed99b3e6251c6ff44njn Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 26f536bbbd4bf2024926574c5ed99b3e6251c6ff44njn 02111-1307, USA. 27f536bbbd4bf2024926574c5ed99b3e6251c6ff44njn 28f536bbbd4bf2024926574c5ed99b3e6251c6ff44njn The GNU General Public License is contained in the file COPYING. 29f536bbbd4bf2024926574c5ed99b3e6251c6ff44njn*/ 30f536bbbd4bf2024926574c5ed99b3e6251c6ff44njn 31f536bbbd4bf2024926574c5ed99b3e6251c6ff44njn#ifndef __PUB_CORE_MACHINE_H 32f536bbbd4bf2024926574c5ed99b3e6251c6ff44njn#define __PUB_CORE_MACHINE_H 33f536bbbd4bf2024926574c5ed99b3e6251c6ff44njn 34f536bbbd4bf2024926574c5ed99b3e6251c6ff44njn//-------------------------------------------------------------------- 35f536bbbd4bf2024926574c5ed99b3e6251c6ff44njn// PURPOSE: This module contains code related to the particular 36f536bbbd4bf2024926574c5ed99b3e6251c6ff44njn// architecture, things like accessing guest state, endianness, word size, 37f536bbbd4bf2024926574c5ed99b3e6251c6ff44njn// etc. 38f536bbbd4bf2024926574c5ed99b3e6251c6ff44njn//-------------------------------------------------------------------- 39f536bbbd4bf2024926574c5ed99b3e6251c6ff44njn 40f536bbbd4bf2024926574c5ed99b3e6251c6ff44njn#include "pub_tool_machine.h" 41f536bbbd4bf2024926574c5ed99b3e6251c6ff44njn 42f536bbbd4bf2024926574c5ed99b3e6251c6ff44njn#if defined(VGA_x86) 436e340c7a2c09971ac5ead854c40bbc0491b67636sewardj# define VG_ELF_DATA2XXX ELFDATA2LSB 44af839f52d74df156d655201a889954133ab01be7njn# define VG_ELF_MACHINE EM_386 45af839f52d74df156d655201a889954133ab01be7njn# define VG_ELF_CLASS ELFCLASS32 46f536bbbd4bf2024926574c5ed99b3e6251c6ff44njn#elif defined(VGA_amd64) 476e340c7a2c09971ac5ead854c40bbc0491b67636sewardj# define VG_ELF_DATA2XXX ELFDATA2LSB 48af839f52d74df156d655201a889954133ab01be7njn# define VG_ELF_MACHINE EM_X86_64 49af839f52d74df156d655201a889954133ab01be7njn# define VG_ELF_CLASS ELFCLASS64 5085665ca6fa29dd64754dabe50eb98f25896e752acerion#elif defined(VGA_ppc32) 516e340c7a2c09971ac5ead854c40bbc0491b67636sewardj# define VG_ELF_DATA2XXX ELFDATA2MSB 52af839f52d74df156d655201a889954133ab01be7njn# define VG_ELF_MACHINE EM_PPC 53af839f52d74df156d655201a889954133ab01be7njn# define VG_ELF_CLASS ELFCLASS32 54f536bbbd4bf2024926574c5ed99b3e6251c6ff44njn#else 55f536bbbd4bf2024926574c5ed99b3e6251c6ff44njn# error Unknown arch 56f536bbbd4bf2024926574c5ed99b3e6251c6ff44njn#endif 57f536bbbd4bf2024926574c5ed99b3e6251c6ff44njn 58f536bbbd4bf2024926574c5ed99b3e6251c6ff44njn#if defined(VGA_x86) 59af839f52d74df156d655201a889954133ab01be7njn# define VG_INSTR_PTR guest_EIP 60af839f52d74df156d655201a889954133ab01be7njn# define VG_STACK_PTR guest_ESP 61af839f52d74df156d655201a889954133ab01be7njn# define VG_FRAME_PTR guest_EBP 62f536bbbd4bf2024926574c5ed99b3e6251c6ff44njn#elif defined(VGA_amd64) 63af839f52d74df156d655201a889954133ab01be7njn# define VG_INSTR_PTR guest_RIP 64af839f52d74df156d655201a889954133ab01be7njn# define VG_STACK_PTR guest_RSP 65af839f52d74df156d655201a889954133ab01be7njn# define VG_FRAME_PTR guest_RBP 6685665ca6fa29dd64754dabe50eb98f25896e752acerion#elif defined(VGA_ppc32) 67af839f52d74df156d655201a889954133ab01be7njn# define VG_INSTR_PTR guest_CIA 68af839f52d74df156d655201a889954133ab01be7njn# define VG_STACK_PTR guest_GPR1 69af839f52d74df156d655201a889954133ab01be7njn# define VG_FRAME_PTR guest_GPR1 // No frame ptr for PPC 70f536bbbd4bf2024926574c5ed99b3e6251c6ff44njn#else 71f536bbbd4bf2024926574c5ed99b3e6251c6ff44njn# error Unknown arch 72f536bbbd4bf2024926574c5ed99b3e6251c6ff44njn#endif 73f536bbbd4bf2024926574c5ed99b3e6251c6ff44njn 747821e2ed55ac6c2303eb51a06bafd5baada2423dsewardj 75f536bbbd4bf2024926574c5ed99b3e6251c6ff44njn// Offsets for the Vex state 76af839f52d74df156d655201a889954133ab01be7njn#define VG_O_STACK_PTR (offsetof(VexGuestArchState, VG_STACK_PTR)) 77f536bbbd4bf2024926574c5ed99b3e6251c6ff44njn 787821e2ed55ac6c2303eb51a06bafd5baada2423dsewardj 7910f08cf5b84882eebbb6712a7be890577650e8adsewardj// Architecture specifics 8010f08cf5b84882eebbb6712a7be890577650e8adsewardj 8110f08cf5b84882eebbb6712a7be890577650e8adsewardj// PPC: what is the cache line size (for dcbz etc) ? 8210f08cf5b84882eebbb6712a7be890577650e8adsewardj// This info is harvested on Linux at startup from the AT_SYSINFO 8310f08cf5b84882eebbb6712a7be890577650e8adsewardj// entries. 8410f08cf5b84882eebbb6712a7be890577650e8adsewardj#if defined(VGA_ppc32) 8510f08cf5b84882eebbb6712a7be890577650e8adsewardjextern Int VG_(cache_line_size_ppc32); 8610f08cf5b84882eebbb6712a7be890577650e8adsewardj#endif 8710f08cf5b84882eebbb6712a7be890577650e8adsewardj 887821e2ed55ac6c2303eb51a06bafd5baada2423dsewardj// X86: set to 1 if the host is able to do {ld,st}mxcsr (load/store 897821e2ed55ac6c2303eb51a06bafd5baada2423dsewardj// the SSE control/status register. 907821e2ed55ac6c2303eb51a06bafd5baada2423dsewardj#if defined(VGA_x86) 917821e2ed55ac6c2303eb51a06bafd5baada2423dsewardjextern Int VG_(have_mxcsr_x86); 927821e2ed55ac6c2303eb51a06bafd5baada2423dsewardj#endif 937821e2ed55ac6c2303eb51a06bafd5baada2423dsewardj 947821e2ed55ac6c2303eb51a06bafd5baada2423dsewardj 95f536bbbd4bf2024926574c5ed99b3e6251c6ff44njn#endif // __PUB_CORE_MACHINE_H 96f536bbbd4bf2024926574c5ed99b3e6251c6ff44njn 97f536bbbd4bf2024926574c5ed99b3e6251c6ff44njn/*--------------------------------------------------------------------*/ 98f536bbbd4bf2024926574c5ed99b3e6251c6ff44njn/*--- end ---*/ 99f536bbbd4bf2024926574c5ed99b3e6251c6ff44njn/*--------------------------------------------------------------------*/ 100