pub_core_machine.h revision cae0cc22b83ffb260ee8379e92099c5a701944cb
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 100f157ddb404bcde7815a1c5bf2d7e41c114f3d73sewardj Copyright (C) 2000-2013 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" 41535fb1b49a80f2e880f755ee618381de3e222ddfflorian#include "pub_core_basics.h" // UnwindStartRegs 42f536bbbd4bf2024926574c5ed99b3e6251c6ff44njn 43265aae7509903e05e907ff0ea4eb2da9446b9763njn// XXX: this is *really* the wrong spot for these things 44f1c91e04aa395a74092e26da815dbde4d769ee0asewardj#if defined(VGP_x86_linux) 456e340c7a2c09971ac5ead854c40bbc0491b67636sewardj# define VG_ELF_DATA2XXX ELFDATA2LSB 46af839f52d74df156d655201a889954133ab01be7njn# define VG_ELF_MACHINE EM_386 47af839f52d74df156d655201a889954133ab01be7njn# define VG_ELF_CLASS ELFCLASS32 48f1c91e04aa395a74092e26da815dbde4d769ee0asewardj# undef VG_PLAT_USES_PPCTOC 49f1c91e04aa395a74092e26da815dbde4d769ee0asewardj#elif defined(VGP_amd64_linux) 506e340c7a2c09971ac5ead854c40bbc0491b67636sewardj# define VG_ELF_DATA2XXX ELFDATA2LSB 51af839f52d74df156d655201a889954133ab01be7njn# define VG_ELF_MACHINE EM_X86_64 52af839f52d74df156d655201a889954133ab01be7njn# define VG_ELF_CLASS ELFCLASS64 53f1c91e04aa395a74092e26da815dbde4d769ee0asewardj# undef VG_PLAT_USES_PPCTOC 54f1c91e04aa395a74092e26da815dbde4d769ee0asewardj#elif defined(VGP_ppc32_linux) 556e340c7a2c09971ac5ead854c40bbc0491b67636sewardj# define VG_ELF_DATA2XXX ELFDATA2MSB 56af839f52d74df156d655201a889954133ab01be7njn# define VG_ELF_MACHINE EM_PPC 57af839f52d74df156d655201a889954133ab01be7njn# define VG_ELF_CLASS ELFCLASS32 58f1c91e04aa395a74092e26da815dbde4d769ee0asewardj# undef VG_PLAT_USES_PPCTOC 59cae0cc22b83ffb260ee8379e92099c5a701944cbcarll#elif defined(VGP_ppc64be_linux) 602c48c7b0a453d32375a4df17e153011b797ef28csewardj# define VG_ELF_DATA2XXX ELFDATA2MSB 612c48c7b0a453d32375a4df17e153011b797ef28csewardj# define VG_ELF_MACHINE EM_PPC64 622c48c7b0a453d32375a4df17e153011b797ef28csewardj# define VG_ELF_CLASS ELFCLASS64 63f1c91e04aa395a74092e26da815dbde4d769ee0asewardj# define VG_PLAT_USES_PPCTOC 1 6459570ffbe31930ab4d678754daaeec0715117a3dsewardj#elif defined(VGP_arm_linux) 6559570ffbe31930ab4d678754daaeec0715117a3dsewardj# define VG_ELF_DATA2XXX ELFDATA2LSB 6659570ffbe31930ab4d678754daaeec0715117a3dsewardj# define VG_ELF_MACHINE EM_ARM 6759570ffbe31930ab4d678754daaeec0715117a3dsewardj# define VG_ELF_CLASS ELFCLASS32 6859570ffbe31930ab4d678754daaeec0715117a3dsewardj# undef VG_PLAT_USES_PPCTOC 69f0c1250e324f6684757c6a15545366447ef1d64fsewardj#elif defined(VGP_arm64_linux) 70f0c1250e324f6684757c6a15545366447ef1d64fsewardj# define VG_ELF_DATA2XXX ELFDATA2LSB 71f0c1250e324f6684757c6a15545366447ef1d64fsewardj# define VG_ELF_MACHINE EM_AARCH64 72f0c1250e324f6684757c6a15545366447ef1d64fsewardj# define VG_ELF_CLASS ELFCLASS64 73f0c1250e324f6684757c6a15545366447ef1d64fsewardj# undef VG_PLAT_USES_PPCTOC 74f76d27a697a7b0bf3b84490baf60623fc96a23afnjn#elif defined(VGO_darwin) 75f76d27a697a7b0bf3b84490baf60623fc96a23afnjn# undef VG_ELF_DATA2XXX 76f76d27a697a7b0bf3b84490baf60623fc96a23afnjn# undef VG_ELF_MACHINE 77f76d27a697a7b0bf3b84490baf60623fc96a23afnjn# undef VG_ELF_CLASS 78f76d27a697a7b0bf3b84490baf60623fc96a23afnjn# undef VG_PLAT_USES_PPCTOC 79b5b87408c0c99f9f6938d8cd921e2a5f420577c4sewardj#elif defined(VGP_s390x_linux) 80b5b87408c0c99f9f6938d8cd921e2a5f420577c4sewardj# define VG_ELF_DATA2XXX ELFDATA2MSB 81b5b87408c0c99f9f6938d8cd921e2a5f420577c4sewardj# define VG_ELF_MACHINE EM_S390 82b5b87408c0c99f9f6938d8cd921e2a5f420577c4sewardj# define VG_ELF_CLASS ELFCLASS64 83b5b87408c0c99f9f6938d8cd921e2a5f420577c4sewardj# undef VG_PLAT_USES_PPCTOC 845db15403e889d4db339b342bc2a824ef0bfaa654sewardj#elif defined(VGP_mips32_linux) 855db15403e889d4db339b342bc2a824ef0bfaa654sewardj# if defined (VG_LITTLEENDIAN) 865db15403e889d4db339b342bc2a824ef0bfaa654sewardj# define VG_ELF_DATA2XXX ELFDATA2LSB 875db15403e889d4db339b342bc2a824ef0bfaa654sewardj# elif defined (VG_BIGENDIAN) 885db15403e889d4db339b342bc2a824ef0bfaa654sewardj# define VG_ELF_DATA2XXX ELFDATA2MSB 895db15403e889d4db339b342bc2a824ef0bfaa654sewardj# else 905db15403e889d4db339b342bc2a824ef0bfaa654sewardj# error "Unknown endianness" 915db15403e889d4db339b342bc2a824ef0bfaa654sewardj# endif 925db15403e889d4db339b342bc2a824ef0bfaa654sewardj# define VG_ELF_MACHINE EM_MIPS 935db15403e889d4db339b342bc2a824ef0bfaa654sewardj# define VG_ELF_CLASS ELFCLASS32 945db15403e889d4db339b342bc2a824ef0bfaa654sewardj# undef VG_PLAT_USES_PPCTOC 954df0bfc0614379192c780c944415dc420d9cfe8epetarj#elif defined(VGP_mips64_linux) 964df0bfc0614379192c780c944415dc420d9cfe8epetarj# if defined (VG_LITTLEENDIAN) 974df0bfc0614379192c780c944415dc420d9cfe8epetarj# define VG_ELF_DATA2XXX ELFDATA2LSB 984df0bfc0614379192c780c944415dc420d9cfe8epetarj# elif defined (VG_BIGENDIAN) 994df0bfc0614379192c780c944415dc420d9cfe8epetarj# define VG_ELF_DATA2XXX ELFDATA2MSB 1004df0bfc0614379192c780c944415dc420d9cfe8epetarj# else 1014df0bfc0614379192c780c944415dc420d9cfe8epetarj# error "Unknown endianness" 1024df0bfc0614379192c780c944415dc420d9cfe8epetarj# endif 1034df0bfc0614379192c780c944415dc420d9cfe8epetarj# define VG_ELF_MACHINE EM_MIPS 1044df0bfc0614379192c780c944415dc420d9cfe8epetarj# define VG_ELF_CLASS ELFCLASS64 1054df0bfc0614379192c780c944415dc420d9cfe8epetarj# undef VG_PLAT_USES_PPCTOC 106f536bbbd4bf2024926574c5ed99b3e6251c6ff44njn#else 107f1c91e04aa395a74092e26da815dbde4d769ee0asewardj# error Unknown platform 108f536bbbd4bf2024926574c5ed99b3e6251c6ff44njn#endif 109f536bbbd4bf2024926574c5ed99b3e6251c6ff44njn 110f536bbbd4bf2024926574c5ed99b3e6251c6ff44njn#if defined(VGA_x86) 111af839f52d74df156d655201a889954133ab01be7njn# define VG_INSTR_PTR guest_EIP 112af839f52d74df156d655201a889954133ab01be7njn# define VG_STACK_PTR guest_ESP 113af839f52d74df156d655201a889954133ab01be7njn# define VG_FRAME_PTR guest_EBP 114f536bbbd4bf2024926574c5ed99b3e6251c6ff44njn#elif defined(VGA_amd64) 115af839f52d74df156d655201a889954133ab01be7njn# define VG_INSTR_PTR guest_RIP 116af839f52d74df156d655201a889954133ab01be7njn# define VG_STACK_PTR guest_RSP 117af839f52d74df156d655201a889954133ab01be7njn# define VG_FRAME_PTR guest_RBP 11885665ca6fa29dd64754dabe50eb98f25896e752acerion#elif defined(VGA_ppc32) 119af839f52d74df156d655201a889954133ab01be7njn# define VG_INSTR_PTR guest_CIA 120af839f52d74df156d655201a889954133ab01be7njn# define VG_STACK_PTR guest_GPR1 121af839f52d74df156d655201a889954133ab01be7njn# define VG_FRAME_PTR guest_GPR1 // No frame ptr for PPC 122cae0cc22b83ffb260ee8379e92099c5a701944cbcarll#elif defined(VGA_ppc64be) || defined(VGA_ppc64le) 1232c48c7b0a453d32375a4df17e153011b797ef28csewardj# define VG_INSTR_PTR guest_CIA 1242c48c7b0a453d32375a4df17e153011b797ef28csewardj# define VG_STACK_PTR guest_GPR1 1252c48c7b0a453d32375a4df17e153011b797ef28csewardj# define VG_FRAME_PTR guest_GPR1 // No frame ptr for PPC 12659570ffbe31930ab4d678754daaeec0715117a3dsewardj#elif defined(VGA_arm) 1271dbd3376656236debf5d35a9b5d8a507a6c307f0sewardj# define VG_INSTR_PTR guest_R15T 12859570ffbe31930ab4d678754daaeec0715117a3dsewardj# define VG_STACK_PTR guest_R13 12959570ffbe31930ab4d678754daaeec0715117a3dsewardj# define VG_FRAME_PTR guest_R11 130f0c1250e324f6684757c6a15545366447ef1d64fsewardj#elif defined(VGA_arm64) 131f0c1250e324f6684757c6a15545366447ef1d64fsewardj# define VG_INSTR_PTR guest_PC 1320345188cc1524a809b8d7fe8785e1da098d9cbe4sewardj# define VG_STACK_PTR guest_XSP 1330345188cc1524a809b8d7fe8785e1da098d9cbe4sewardj# define VG_FRAME_PTR guest_X29 // FIXME: is this right? 134b5b87408c0c99f9f6938d8cd921e2a5f420577c4sewardj#elif defined(VGA_s390x) 135b5b87408c0c99f9f6938d8cd921e2a5f420577c4sewardj# define VG_INSTR_PTR guest_IA 136b5b87408c0c99f9f6938d8cd921e2a5f420577c4sewardj# define VG_STACK_PTR guest_SP 137b5b87408c0c99f9f6938d8cd921e2a5f420577c4sewardj# define VG_FRAME_PTR guest_FP 138ccb843b2ba2c176708bfa1764ca8e4db31722e90florian# define VG_FPC_REG guest_fpc 1395db15403e889d4db339b342bc2a824ef0bfaa654sewardj#elif defined(VGA_mips32) 1405db15403e889d4db339b342bc2a824ef0bfaa654sewardj# define VG_INSTR_PTR guest_PC 1415db15403e889d4db339b342bc2a824ef0bfaa654sewardj# define VG_STACK_PTR guest_r29 1425db15403e889d4db339b342bc2a824ef0bfaa654sewardj# define VG_FRAME_PTR guest_r30 1434df0bfc0614379192c780c944415dc420d9cfe8epetarj#elif defined(VGA_mips64) 1444df0bfc0614379192c780c944415dc420d9cfe8epetarj# define VG_INSTR_PTR guest_PC 1454df0bfc0614379192c780c944415dc420d9cfe8epetarj# define VG_STACK_PTR guest_r29 1464df0bfc0614379192c780c944415dc420d9cfe8epetarj# define VG_FRAME_PTR guest_r30 147f536bbbd4bf2024926574c5ed99b3e6251c6ff44njn#else 148f536bbbd4bf2024926574c5ed99b3e6251c6ff44njn# error Unknown arch 149f536bbbd4bf2024926574c5ed99b3e6251c6ff44njn#endif 150f536bbbd4bf2024926574c5ed99b3e6251c6ff44njn 1517821e2ed55ac6c2303eb51a06bafd5baada2423dsewardj 152f536bbbd4bf2024926574c5ed99b3e6251c6ff44njn// Offsets for the Vex state 153af839f52d74df156d655201a889954133ab01be7njn#define VG_O_STACK_PTR (offsetof(VexGuestArchState, VG_STACK_PTR)) 154cda2f0fbda4c4b2644babc830244be8aed95de1dnjn#define VG_O_INSTR_PTR (offsetof(VexGuestArchState, VG_INSTR_PTR)) 155ccb843b2ba2c176708bfa1764ca8e4db31722e90florian#define VG_O_FPC_REG (offsetof(VexGuestArchState, VG_FPC_REG)) 156f536bbbd4bf2024926574c5ed99b3e6251c6ff44njn 1577821e2ed55ac6c2303eb51a06bafd5baada2423dsewardj 158e2d1e670d412ff85c824ba5c043161816b9e26bdsewardj//------------------------------------------------------------- 1591dbd3376656236debf5d35a9b5d8a507a6c307f0sewardj// Guest state accessors that are not visible to tools. The only 1601dbd3376656236debf5d35a9b5d8a507a6c307f0sewardj// ones that are visible are get_IP and get_SP. 1611dbd3376656236debf5d35a9b5d8a507a6c307f0sewardj 1621dbd3376656236debf5d35a9b5d8a507a6c307f0sewardj//Addr VG_(get_IP) ( ThreadId tid ); // in pub_tool_machine.h 1631dbd3376656236debf5d35a9b5d8a507a6c307f0sewardj//Addr VG_(get_SP) ( ThreadId tid ); // in pub_tool_machine.h 1641dbd3376656236debf5d35a9b5d8a507a6c307f0sewardjAddr VG_(get_FP) ( ThreadId tid ); 1651dbd3376656236debf5d35a9b5d8a507a6c307f0sewardj 1661dbd3376656236debf5d35a9b5d8a507a6c307f0sewardjvoid VG_(set_IP) ( ThreadId tid, Addr encip ); 1671dbd3376656236debf5d35a9b5d8a507a6c307f0sewardjvoid VG_(set_SP) ( ThreadId tid, Addr sp ); 1681dbd3376656236debf5d35a9b5d8a507a6c307f0sewardj 1691dbd3376656236debf5d35a9b5d8a507a6c307f0sewardj 1701dbd3376656236debf5d35a9b5d8a507a6c307f0sewardj//------------------------------------------------------------- 17159570ffbe31930ab4d678754daaeec0715117a3dsewardj// Get hold of the values needed for a stack unwind, for the specified 17259570ffbe31930ab4d678754daaeec0715117a3dsewardj// (client) thread. 17359570ffbe31930ab4d678754daaeec0715117a3dsewardjvoid VG_(get_UnwindStartRegs) ( /*OUT*/UnwindStartRegs* regs, 17459570ffbe31930ab4d678754daaeec0715117a3dsewardj ThreadId tid ); 17559570ffbe31930ab4d678754daaeec0715117a3dsewardj 17659570ffbe31930ab4d678754daaeec0715117a3dsewardj 17759570ffbe31930ab4d678754daaeec0715117a3dsewardj//------------------------------------------------------------- 178e2d1e670d412ff85c824ba5c043161816b9e26bdsewardj/* Details about the capabilities of the underlying (host) CPU. These 179e2d1e670d412ff85c824ba5c043161816b9e26bdsewardj details are acquired by (1) enquiring with the CPU at startup, or 1801f0d814045aba94e01e62e04e968ca8b970b3d44cerion (2) from the AT_SYSINFO entries the kernel gave us (ppc cache 181e2d1e670d412ff85c824ba5c043161816b9e26bdsewardj line size). It's a bit nasty in the sense that there's no obvious 182e2d1e670d412ff85c824ba5c043161816b9e26bdsewardj way to stop uses of some of this info before it's ready to go. 183e2d1e670d412ff85c824ba5c043161816b9e26bdsewardj 184e2d1e670d412ff85c824ba5c043161816b9e26bdsewardj Current dependencies are: 185e2d1e670d412ff85c824ba5c043161816b9e26bdsewardj 186e2d1e670d412ff85c824ba5c043161816b9e26bdsewardj x86: initially: call VG_(machine_get_hwcaps) 187e2d1e670d412ff85c824ba5c043161816b9e26bdsewardj 188e2d1e670d412ff85c824ba5c043161816b9e26bdsewardj then safe to use VG_(machine_get_VexArchInfo) 189e2d1e670d412ff85c824ba5c043161816b9e26bdsewardj and VG_(machine_x86_have_mxcsr) 190e2d1e670d412ff85c824ba5c043161816b9e26bdsewardj ------------- 191e2d1e670d412ff85c824ba5c043161816b9e26bdsewardj amd64: initially: call VG_(machine_get_hwcaps) 192e2d1e670d412ff85c824ba5c043161816b9e26bdsewardj 193e2d1e670d412ff85c824ba5c043161816b9e26bdsewardj then safe to use VG_(machine_get_VexArchInfo) 194e2d1e670d412ff85c824ba5c043161816b9e26bdsewardj ------------- 195e2d1e670d412ff85c824ba5c043161816b9e26bdsewardj ppc32: initially: call VG_(machine_get_hwcaps) 196e2d1e670d412ff85c824ba5c043161816b9e26bdsewardj call VG_(machine_ppc32_set_clszB) 197e2d1e670d412ff85c824ba5c043161816b9e26bdsewardj 198e2d1e670d412ff85c824ba5c043161816b9e26bdsewardj then safe to use VG_(machine_get_VexArchInfo) 1992c36d4285afacafc10232e2f70978e0519216138sewardj and VG_(machine_ppc32_has_FP) 200e2d1e670d412ff85c824ba5c043161816b9e26bdsewardj and VG_(machine_ppc32_has_VMX) 2012c48c7b0a453d32375a4df17e153011b797ef28csewardj ------------- 2022c48c7b0a453d32375a4df17e153011b797ef28csewardj ppc64: initially: call VG_(machine_get_hwcaps) 2032c48c7b0a453d32375a4df17e153011b797ef28csewardj call VG_(machine_ppc64_set_clszB) 2042c48c7b0a453d32375a4df17e153011b797ef28csewardj 2052c48c7b0a453d32375a4df17e153011b797ef28csewardj then safe to use VG_(machine_get_VexArchInfo) 2062c48c7b0a453d32375a4df17e153011b797ef28csewardj and VG_(machine_ppc64_has_VMX) 207a3551be497f6c4afc5dfbbbcd7c7a955a68fb22bsewardj ------------- 208a3551be497f6c4afc5dfbbbcd7c7a955a68fb22bsewardj arm: initially: call VG_(machine_get_hwcaps) 209a3551be497f6c4afc5dfbbbcd7c7a955a68fb22bsewardj call VG_(machine_arm_set_has_NEON) 210a3551be497f6c4afc5dfbbbcd7c7a955a68fb22bsewardj 211a3551be497f6c4afc5dfbbbcd7c7a955a68fb22bsewardj then safe to use VG_(machine_get_VexArchInfo) 2120daa4e31a3407ce0b0db8a90be8dd14bd8eccb35florian ------------- 2130daa4e31a3407ce0b0db8a90be8dd14bd8eccb35florian s390x: initially: call VG_(machine_get_hwcaps) 2140daa4e31a3407ce0b0db8a90be8dd14bd8eccb35florian 2150daa4e31a3407ce0b0db8a90be8dd14bd8eccb35florian then safe to use VG_(machine_get_VexArchInfo) 216e2d1e670d412ff85c824ba5c043161816b9e26bdsewardj 217e2d1e670d412ff85c824ba5c043161816b9e26bdsewardj VG_(machine_get_hwcaps) may use signals (although it attempts to 218e2d1e670d412ff85c824ba5c043161816b9e26bdsewardj leave signal state unchanged) and therefore should only be 219e2d1e670d412ff85c824ba5c043161816b9e26bdsewardj called before m_main sets up the client's signal state. 220e2d1e670d412ff85c824ba5c043161816b9e26bdsewardj*/ 221e2d1e670d412ff85c824ba5c043161816b9e26bdsewardj 222e2d1e670d412ff85c824ba5c043161816b9e26bdsewardj/* Determine what insn set and insn set variant the host has, and 223e2d1e670d412ff85c824ba5c043161816b9e26bdsewardj record it. To be called once at system startup. Returns False if 224e2d1e670d412ff85c824ba5c043161816b9e26bdsewardj this a CPU incapable of running Valgrind. */ 225e2d1e670d412ff85c824ba5c043161816b9e26bdsewardjextern Bool VG_(machine_get_hwcaps)( void ); 22610f08cf5b84882eebbb6712a7be890577650e8adsewardj 2277862701c0e3f556e4a0c7ec4074a40526c73a4efflorian/* Determine information about the cache system this host has and 2287862701c0e3f556e4a0c7ec4074a40526c73a4efflorian record it. Returns False, if cache information cannot be auto-detected. */ 2297862701c0e3f556e4a0c7ec4074a40526c73a4efflorianextern Bool VG_(machine_get_cache_info)( VexArchInfo * ); 230e2d1e670d412ff85c824ba5c043161816b9e26bdsewardj 231e2d1e670d412ff85c824ba5c043161816b9e26bdsewardj/* Notify host cpu cache line size, as per above comment. */ 232bc28f66763b196f4107a06d00e5dd17d594b9b94cerion#if defined(VGA_ppc32) 233e2d1e670d412ff85c824ba5c043161816b9e26bdsewardjextern void VG_(machine_ppc32_set_clszB)( Int ); 23410f08cf5b84882eebbb6712a7be890577650e8adsewardj#endif 23510f08cf5b84882eebbb6712a7be890577650e8adsewardj 236cae0cc22b83ffb260ee8379e92099c5a701944cbcarll#if defined(VGA_ppc64be) || defined(VGA_ppc64le) 2372c48c7b0a453d32375a4df17e153011b797ef28csewardjextern void VG_(machine_ppc64_set_clszB)( Int ); 2382c48c7b0a453d32375a4df17e153011b797ef28csewardj#endif 2392c48c7b0a453d32375a4df17e153011b797ef28csewardj 240a3551be497f6c4afc5dfbbbcd7c7a955a68fb22bsewardj#if defined(VGA_arm) 241a3551be497f6c4afc5dfbbbcd7c7a955a68fb22bsewardjextern void VG_(machine_arm_set_has_NEON)( Bool ); 242a3551be497f6c4afc5dfbbbcd7c7a955a68fb22bsewardj#endif 243a3551be497f6c4afc5dfbbbcd7c7a955a68fb22bsewardj 244e2d1e670d412ff85c824ba5c043161816b9e26bdsewardj/* X86: set to 1 if the host is able to do {ld,st}mxcsr (load/store 245e2d1e670d412ff85c824ba5c043161816b9e26bdsewardj the SSE control/status register), else zero. Is referenced from 246e2d1e670d412ff85c824ba5c043161816b9e26bdsewardj assembly code, so do not change from a 32-bit int. */ 2477821e2ed55ac6c2303eb51a06bafd5baada2423dsewardj#if defined(VGA_x86) 248e2d1e670d412ff85c824ba5c043161816b9e26bdsewardjextern UInt VG_(machine_x86_have_mxcsr); 249e2d1e670d412ff85c824ba5c043161816b9e26bdsewardj#endif 250e2d1e670d412ff85c824ba5c043161816b9e26bdsewardj 251e2d1e670d412ff85c824ba5c043161816b9e26bdsewardj/* PPC32: set to 1 if FP instructions are supported in user-space, 252e2d1e670d412ff85c824ba5c043161816b9e26bdsewardj else 0. Is referenced from assembly code, so do not change from a 253e2d1e670d412ff85c824ba5c043161816b9e26bdsewardj 32-bit int. */ 254e2d1e670d412ff85c824ba5c043161816b9e26bdsewardj#if defined(VGA_ppc32) 2552c36d4285afacafc10232e2f70978e0519216138sewardjextern UInt VG_(machine_ppc32_has_FP); 2567821e2ed55ac6c2303eb51a06bafd5baada2423dsewardj#endif 2577821e2ed55ac6c2303eb51a06bafd5baada2423dsewardj 258e2d1e670d412ff85c824ba5c043161816b9e26bdsewardj/* PPC32: set to 1 if Altivec instructions are supported in 259e2d1e670d412ff85c824ba5c043161816b9e26bdsewardj user-space, else 0. Is referenced from assembly code, so do not 260e2d1e670d412ff85c824ba5c043161816b9e26bdsewardj change from a 32-bit int. */ 261e2d1e670d412ff85c824ba5c043161816b9e26bdsewardj#if defined(VGA_ppc32) 262e2d1e670d412ff85c824ba5c043161816b9e26bdsewardjextern UInt VG_(machine_ppc32_has_VMX); 263e2d1e670d412ff85c824ba5c043161816b9e26bdsewardj#endif 2647821e2ed55ac6c2303eb51a06bafd5baada2423dsewardj 2652c48c7b0a453d32375a4df17e153011b797ef28csewardj/* PPC64: set to 1 if Altivec instructions are supported in 2662c48c7b0a453d32375a4df17e153011b797ef28csewardj user-space, else 0. Is referenced from assembly code, so do not 2672c48c7b0a453d32375a4df17e153011b797ef28csewardj change from a 64-bit int. */ 268cae0cc22b83ffb260ee8379e92099c5a701944cbcarll#if defined(VGA_ppc64be) || defined(VGA_ppc64le) 2692c48c7b0a453d32375a4df17e153011b797ef28csewardjextern ULong VG_(machine_ppc64_has_VMX); 2702c48c7b0a453d32375a4df17e153011b797ef28csewardj#endif 2712c48c7b0a453d32375a4df17e153011b797ef28csewardj 2721dbd3376656236debf5d35a9b5d8a507a6c307f0sewardj#if defined(VGA_arm) 2731dbd3376656236debf5d35a9b5d8a507a6c307f0sewardjextern Int VG_(machine_arm_archlevel); 2741dbd3376656236debf5d35a9b5d8a507a6c307f0sewardj#endif 2751dbd3376656236debf5d35a9b5d8a507a6c307f0sewardj 276f536bbbd4bf2024926574c5ed99b3e6251c6ff44njn#endif // __PUB_CORE_MACHINE_H 277f536bbbd4bf2024926574c5ed99b3e6251c6ff44njn 278f536bbbd4bf2024926574c5ed99b3e6251c6ff44njn/*--------------------------------------------------------------------*/ 279f536bbbd4bf2024926574c5ed99b3e6251c6ff44njn/*--- end ---*/ 280f536bbbd4bf2024926574c5ed99b3e6251c6ff44njn/*--------------------------------------------------------------------*/ 281