blob: f75b936225f6420d17834c404c758ed6483bf377 [file] [log] [blame]
nethercoteebf1d862004-11-01 18:22:05 +00001
2/*--------------------------------------------------------------------*/
njnc7561b92005-06-19 01:24:32 +00003/*--- Header included by every tool C file. pub_tool_basics.h ---*/
nethercoteebf1d862004-11-01 18:22:05 +00004/*--------------------------------------------------------------------*/
5
6/*
njnb9c427c2004-12-01 14:14:42 +00007 This file is part of Valgrind, a dynamic binary instrumentation
8 framework.
nethercoteebf1d862004-11-01 18:22:05 +00009
njn53612422005-03-12 16:22:54 +000010 Copyright (C) 2000-2005 Julian Seward
nethercoteebf1d862004-11-01 18:22:05 +000011 jseward@acm.org
12
13 This program is free software; you can redistribute it and/or
14 modify it under the terms of the GNU General Public License as
15 published by the Free Software Foundation; either version 2 of the
16 License, or (at your option) any later version.
17
18 This program is distributed in the hope that it will be useful, but
19 WITHOUT ANY WARRANTY; without even the implied warranty of
20 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
21 General Public License for more details.
22
23 You should have received a copy of the GNU General Public License
24 along with this program; if not, write to the Free Software
25 Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
26 02111-1307, USA.
27
28 The GNU General Public License is contained in the file COPYING.
29*/
30
njnc7561b92005-06-19 01:24:32 +000031#ifndef __PUB_TOOL_BASICS_H
32#define __PUB_TOOL_BASICS_H
33
34//--------------------------------------------------------------------
35// PURPOSE: This header should be imported by every single C file in
36// tools. It contains the basic types and other things needed everywhere.
37// There is no corresponding C file because this isn't a module
38// containing executable code, it's all just declarations.
39//--------------------------------------------------------------------
40
41/* ---------------------------------------------------------------------
42 Other headers to include
43 ------------------------------------------------------------------ */
44
45// VEX defines Char, UChar, Short, UShort, Int, UInt, Long, ULong,
46// Addr32, Addr64, HWord, HChar, Bool, False and True.
47#include "libvex_basictypes.h"
48
49// For the VG_() macro
50#include "pub_tool_basics_asm.h"
51
52// For varargs types
53#include <stdarg.h>
54
njnc7561b92005-06-19 01:24:32 +000055// Kernel types. Might as well have them here, they're used so broadly
56// (eg. in pub_core_threadstate.h).
57#if defined(VGO_linux)
58# include "vki-linux.h"
59#else
60# error Unknown OS
61#endif
nethercoteebf1d862004-11-01 18:22:05 +000062
63/* ---------------------------------------------------------------------
njnd01fef72005-03-25 23:35:48 +000064 builtin types
nethercoteebf1d862004-11-01 18:22:05 +000065 ------------------------------------------------------------------ */
66
67// By choosing the right types, we can get these right for 32-bit and 64-bit
68// platforms without having to do any conditional compilation or anything.
nethercote8b5f40c2004-11-02 13:29:50 +000069//
nethercoteebf1d862004-11-01 18:22:05 +000070// Size in bits on: 32-bit archs 64-bit archs
71// ------------ ------------
nethercoteebf1d862004-11-01 18:22:05 +000072typedef unsigned long UWord; // 32 64
nethercoteebf1d862004-11-01 18:22:05 +000073
nethercoteebf1d862004-11-01 18:22:05 +000074typedef signed long Word; // 32 64
nethercoteebf1d862004-11-01 18:22:05 +000075
76typedef UWord Addr; // 32 64
sewardjfa8ec112005-01-19 11:55:34 +000077typedef UWord AddrH; // 32 64
nethercoteebf1d862004-11-01 18:22:05 +000078
nethercote7ac7f7b2004-11-02 12:36:02 +000079typedef UWord SizeT; // 32 64
80typedef Word SSizeT; // 32 64
81
nethercoteada0d2b2004-11-04 19:10:43 +000082typedef Word OffT; // 32 64
nethercote5b9fafd2004-11-04 18:39:22 +000083
njn21edee32005-06-11 04:44:38 +000084#if !defined(NULL)
85# define NULL ((void*)0)
86#endif
sewardjbc7df202005-05-02 10:25:34 +000087
njnc7561b92005-06-19 01:24:32 +000088/* ---------------------------------------------------------------------
89 non-builtin types
90 ------------------------------------------------------------------ */
91
92// These probably shouldn't be here, but moving them to their logical
93// modules results in a lot more #includes...
94
95/* ThreadIds are simply indices into the VG_(threads)[] array. */
96typedef UInt ThreadId;
97
98/* An abstraction of syscall return values.
99 When .isError == False, val holds the return value.
100 When .isError == True, val holds the error code.
101*/
102typedef struct {
103 UWord val;
104 Bool isError;
105}
106SysRes;
107
108/* ---------------------------------------------------------------------
sewardj6e340c72005-07-10 00:53:42 +0000109 Miscellaneous (word size, endianness, regparmness)
njnc7561b92005-06-19 01:24:32 +0000110 ------------------------------------------------------------------ */
111
sewardj6e340c72005-07-10 00:53:42 +0000112/* Word size: this is going to be either 4 or 8. */
njnc7561b92005-06-19 01:24:32 +0000113// It should probably be in m_machine.
114#define VG_WORDSIZE VEX_HOST_WORDSIZE
115
sewardj6e340c72005-07-10 00:53:42 +0000116/* Endianness */
117#undef VG_BIGENDIAN
118#undef VG_LITTLEENDIAN
119
120#if defined(VGA_x86) || defined(VGA_amd64)
121# define VG_LITTLEENDIAN 1
122#elif defined(VGA_ppc32)
123# define VG_BIGENDIAN 1
124#endif
125
126/* Regparmness */
njnf536bbb2005-06-13 04:21:38 +0000127#if defined(VGA_x86)
njnaf839f52005-06-23 03:27:57 +0000128# define VG_REGPARM(n) __attribute__((regparm(n)))
njn4a830152005-07-02 23:13:59 +0000129#elif defined(VGA_amd64) || defined(VGA_ppc32)
njnaf839f52005-06-23 03:27:57 +0000130# define VG_REGPARM(n) /* */
njnf536bbb2005-06-13 04:21:38 +0000131#else
132# error Unknown arch
133#endif
134
njnc7561b92005-06-19 01:24:32 +0000135#endif /* __PUB_TOOL_BASICS_H */
nethercoteebf1d862004-11-01 18:22:05 +0000136
137/*--------------------------------------------------------------------*/
138/*--- end ---*/
139/*--------------------------------------------------------------------*/