Corrected a bug in dedemangle(); corrected bugs in BPatch_type and linuxMT;
[dyninst.git] / dyninstAPI / src / inst-ia64.h
1 /* -*- Mode: C; indent-tabs-mode: true -*-; tab-width: 4 */
2
3 /*
4  * Copyright (c) 1996 Barton P. Miller
5  * 
6  * We provide the Paradyn Parallel Performance Tools (below
7  * described as Paradyn") on an AS IS basis, and do not warrant its
8  * validity or performance.  We reserve the right to update, modify,
9  * or discontinue this software at any time.  We shall have no
10  * obligation to supply such updates or modifications or any other
11  * form of support to you.
12  * 
13  * This license is for research uses.  For such uses, there is no
14  * charge. We define "research use" to mean you may freely use it
15  * inside your organization for whatever purposes you see fit. But you
16  * may not re-distribute Paradyn or parts of Paradyn, in any form
17  * source or binary (including derivatives), electronic or otherwise,
18  * to any other organization or entity without our permission.
19  * 
20  * (for other uses, please contact us at paradyn@cs.wisc.edu)
21  * 
22  * All warranties, including without limitation, any warranty of
23  * merchantability or fitness for a particular purpose, are hereby
24  * excluded.
25  * 
26  * By your use of Paradyn, you understand and agree that we (or any
27  * other person or entity with proprietary rights in Paradyn) are
28  * under no obligation to provide either maintenance services,
29  * update services, notices of latent defects, or correction of
30  * defects for Paradyn.
31  * 
32  * Even if advised of the possibility of such damages, under no
33  * circumstances shall we (or any other person or entity with
34  * proprietary rights in the software licensed hereunder) be liable
35  * to you or any third party for direct, indirect, or consequential
36  * damages of any character regardless of type of action, including,
37  * without limitation, loss of profits, loss of use, loss of good
38  * will, or computer failure or malfunction.  You agree to indemnify
39  * us (and any other person or entity with proprietary rights in the
40  * software licensed hereunder) for any and all liability it may
41  * incur to third parties resulting from your use of Paradyn.
42  */
43
44 // $Id: inst-ia64.h,v 1.9 2003/06/27 20:57:54 tlmiller Exp $
45
46 #ifndef INST_IA64_H
47 #define INST_IA64_H
48
49 #include "common/h/Types.h"     // Address
50 class process;
51 class IA64_bundle;
52 class IA64_instruction;
53
54 /* Required for ast.C */
55 #define REG_MT_POS      13
56
57 class InsnAddr {
58         public:
59                 /* prefix increment */
60                 InsnAddr operator++ ();
61
62                 /* prefix decrement */
63                 InsnAddr operator-- ();
64
65                 /* postfix increment */
66                 InsnAddr operator++ (int dummy);
67
68                 /* postfix decrement */
69                 InsnAddr operator-- (int dummy);
70
71                 /* sum of two InsnAddrs */
72                 friend InsnAddr operator + ( InsnAddr lhs, InsnAddr rhs );
73
74                 /* difference of two InsnAddrs */
75                 friend InsnAddr operator - ( InsnAddr lhs, InsnAddr rhs );
76
77                 /* Returns the left-aligned instruction at this address. */
78                 uint64_t operator * ();
79
80                 friend bool operator < ( InsnAddr lhs, InsnAddr rhs );
81                 friend bool operator <= ( InsnAddr lhs, InsnAddr rhs );
82                 friend bool operator > ( InsnAddr lhs, InsnAddr rhs );
83                 friend bool operator >= ( InsnAddr lhs, InsnAddr rhs );
84                 friend bool operator == ( InsnAddr lhs, InsnAddr rhs );
85                 friend bool operator != ( InsnAddr lhs, InsnAddr rhs );
86
87                 static InsnAddr generateFromAlignedDataAddress( Address addr, process * p );
88                 bool writeMyBundleFrom( const unsigned char * savedCodeBuffer );
89                 bool saveMyBundleTo( unsigned char * savedCodeBuffer );
90                 bool saveBundlesTo( unsigned char * savedCodeBuffer, unsigned int numberOfBundles );
91                 bool writeBundlesFrom( unsigned char * savedCodeBuffer, unsigned int numberOfBundles );
92                 bool replaceBundleWith( const IA64_bundle & bundle );
93                 bool replaceBundlesWith( const IA64_bundle * replacementBundles, unsigned int numberOfReplacementBundles );
94                 bool writeStringAtOffset( unsigned int offsetInBundles, const char * string, unsigned int length );
95
96         private:
97                 InsnAddr( Address addr, process * p ) : encodedAddress( addr ), myProc( p ) { }
98                 Address encodedAddress;
99                 process * myProc;
100 }; /* end class InsnAddr */
101
102 #include "arch-ia64.h"
103
104 class IA64_iterator {
105         /* FIXME: if/when InsnAddr and/or InstrucIter are implemented, move the
106            address-munging functionality here. */
107         public:
108                 IA64_iterator( Address addr );
109
110                 friend bool operator < ( IA64_iterator lhs, IA64_iterator rhs );
111
112                 /* Returns the left-aligned instruction at this address. */
113                 IA64_instruction * operator * ();
114                 
115                 /* postfix increment */
116                 const IA64_iterator operator++ (int dummy);
117
118                 Address getEncodedAddress() { return encodedAddress; }
119
120         private:
121                 Address encodedAddress;
122                 IA64_bundle currentBundle;
123 }; /* end class IA64_iterator */
124
125 #endif