Conservative fix for the stack pointer passing problem.
[dyninst.git] / dataflowAPI / h / ABI.h
1 /*
2  * See the dyninst/COPYRIGHT file for copyright information.
3  * 
4  * We provide the Paradyn Tools (below described as "Paradyn")
5  * on an AS IS basis, and do not warrant its validity or performance.
6  * We reserve the right to update, modify, or discontinue this
7  * software at any time.  We shall have no obligation to supply such
8  * updates or modifications or any other form of support to you.
9  * 
10  * By your use of Paradyn, you understand and agree that we (or any
11  * other person or entity with proprietary rights in Paradyn) are
12  * under no obligation to provide either maintenance services,
13  * update services, notices of latent defects, or correction of
14  * defects for Paradyn.
15  * 
16  * This library is free software; you can redistribute it and/or
17  * modify it under the terms of the GNU Lesser General Public
18  * License as published by the Free Software Foundation; either
19  * version 2.1 of the License, or (at your option) any later version.
20  * 
21  * This library is distributed in the hope that it will be useful,
22  * but WITHOUT ANY WARRANTY; without even the implied warranty of
23  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
24  * Lesser General Public License for more details.
25  * 
26  * You should have received a copy of the GNU Lesser General Public
27  * License along with this library; if not, write to the Free Software
28  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
29  */
30 #ifndef ABI_H
31 #define ABI_H
32
33 #include "dyn_regs.h"
34 #include "bitArray.h"
35 #include <map>
36
37 using namespace Dyninst;
38 class ABI{
39
40     static ABI* globalABI_; 
41     static ABI* globalABI64_;
42     std::map<MachRegister,int> *index;
43     int addr_width;
44
45  public:
46     DATAFLOW_EXPORT const bitArray &getCallReadRegisters() const;
47     DATAFLOW_EXPORT const bitArray &getCallWrittenRegisters() const;
48     DATAFLOW_EXPORT const bitArray &getReturnReadRegisters() const;
49     DATAFLOW_EXPORT const bitArray &getReturnRegisters() const;
50     DATAFLOW_EXPORT const bitArray &getParameterRegisters() const;
51     // No such thing as return written...
52
53     // Syscall!
54     DATAFLOW_EXPORT const bitArray &getSyscallReadRegisters() const;
55     DATAFLOW_EXPORT const bitArray &getSyscallWrittenRegisters() const;
56
57     DATAFLOW_EXPORT const bitArray &getAllRegs() const;
58
59     DATAFLOW_EXPORT int getIndex(MachRegister machReg);
60     DATAFLOW_EXPORT std::map<MachRegister,int>* getIndexMap();
61
62     DATAFLOW_EXPORT static void initialize32();
63     DATAFLOW_EXPORT static void initialize64();
64
65     DATAFLOW_EXPORT static ABI* getABI(int addr_width);
66     DATAFLOW_EXPORT bitArray getBitArray();
67  private:
68     static bitArray callRead_;
69     static bitArray callRead64_;
70
71     static bitArray callWritten_;
72     static bitArray callWritten64_;
73
74     static bitArray returnRead_;
75     static bitArray returnRead64_;
76
77     static bitArray returnRegs_;
78     static bitArray returnRegs64_;
79
80     static bitArray callParam_;
81     static bitArray callParam64_;
82
83     static bitArray syscallRead_;
84     static bitArray syscallRead64_;
85
86     static bitArray syscallWritten_;
87     static bitArray syscallWritten64_;
88
89     static bitArray allRegs_;
90     static bitArray allRegs64_;
91
92     static bitArray getBitArray(int size){
93         return bitArray(size);
94     }
95
96     ABI(): index(NULL), addr_width(0) {}
97 };
98
99
100 #endif //ABI_H