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