Update copyright to LGPL on all files
[dyninst.git] / dyninstAPI / src / image-ia64.C
1 /*
2  * Copyright (c) 1996-2009 Barton P. Miller
3  * 
4  * We provide the Paradyn Parallel Performance Tools (below
5  * described as "Paradyn") on an AS IS basis, and do not warrant its
6  * validity or performance.  We reserve the right to update, modify,
7  * or discontinue this software at any time.  We shall have no
8  * obligation to supply such updates or modifications or any other
9  * form of support to you.
10  * 
11  * By your use of Paradyn, you understand and agree that we (or any
12  * other person or entity with proprietary rights in Paradyn) are
13  * under no obligation to provide either maintenance services,
14  * update services, notices of latent defects, or correction of
15  * defects for Paradyn.
16  * 
17  * This library is free software; you can redistribute it and/or
18  * modify it under the terms of the GNU Lesser General Public
19  * License as published by the Free Software Foundation; either
20  * version 2.1 of the License, or (at your option) any later version.
21  * 
22  * This library is distributed in the hope that it will be useful,
23  * but WITHOUT ANY WARRANTY; without even the implied warranty of
24  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
25  * Lesser General Public License for more details.
26  * 
27  * You should have received a copy of the GNU Lesser General Public
28  * License along with this library; if not, write to the Free Software
29  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
30  */
31
32 // $Id: image-ia64.C,v 1.14 2008/04/07 22:32:42 giri Exp $
33
34 #include "common/h/Vector.h"
35 #include "common/h/Dictionary.h"
36 #include "common/h/Vector.h"
37 #include "image-func.h"
38 #include "instPoint.h"
39 #include "symtab.h"
40 #include "dyninstAPI/h/BPatch_Set.h"
41 #include "InstrucIter.h"
42 #include "debug.h"
43 #include "arch.h"
44
45 bool image_func::archIsRealCall(InstrucIter & ah , bool &validTarget,
46                                 bool & /* simulateJump */)
47 {
48     Address callTarget;
49
50     if(ah.isADynamicCallInstruction())
51         return true;
52
53     callTarget = ah.getBranchTargetAddress();
54     validTarget = img()->isValidAddress( callTarget );
55     return validTarget;
56 }
57
58 bool image_func::archCheckEntry(InstrucIter &ah, image_func * /*func*/)
59 {
60     // x86 checks for functions in the PLT here and so should we.
61     // Actually, this should probably be checked when binding a
62     // stub function object to a call site during parsing. XXX
63     Region *sec;
64     if(!image_->getObject()->findRegion(sec, ".plt"))
65         return true;
66     if(!sec->isOffsetInRegion(*ah))
67         return true;
68 //    if(image_->getObject()->is_offset_in_plt(*ah))
69     return false;
70
71 //    return true;
72 }
73
74 // Not used on IA64
75 bool image_func::archIsUnparseable()
76 {
77     return false;
78 }
79
80 // Not used on IA64? FIXME -- probably *should* be just like x86. 
81 bool image_func::archAvoidParsing()
82 {
83     return false;
84 }
85
86
87 // Not used on IA64? FIXME -- see above
88 bool image_func::archNoRelocate()
89 {
90     return false;
91 }
92
93 // Not used on IA64
94 void image_func::archSetFrameSize(int /* frameSize */)
95 {
96     return;
97 }
98
99 // As Drew has noted, this really, really should not be an InstructIter
100 // operation. The extraneous arguments support architectures like x86,
101 // which (rightly) treat jump table processing as a control-sensitive
102 // data flow operation.
103 bool image_func::archGetMultipleJumpTargets(
104                                 BPatch_Set< Address >& targets,
105                                 image_basicBlock * /*currBlk*/,
106                                 InstrucIter &ah,
107                                 pdvector< instruction >& /*allInstructions*/)
108 {
109     return ah.getMultipleJumpTargets( targets );                 
110 }
111
112 bool image_func::archProcExceptionBlock(Address &/*catchStart*/, Address /*a*/)
113 {
114     // Agnostic about exceptions: the policy of champions!
115     return false;
116 }
117
118 // Not used on IA64
119 bool image_func::archIsATailCall(InstrucIter & /* ah */,
120                                  pdvector< instruction >& /*allInstructions*/)
121 {
122     // Seems like doing it like x86 would be a good idea. FIXME
123     return false;
124 }
125
126 // Not used on IA64 FIXME YET!
127 bool image_func::archIsIndirectTailCall(InstrucIter & /*ah*/)
128 {
129     return false;
130 }
131
132
133 // Not used on IA64
134 void image_func::archInstructionProc(InstructionAdapter &/*ah*/)
135 {
136     return;
137 }
138     
139
140 bool image_func::archIsIPRelativeBranch(InstrucIter& ah)
141 {
142   return false;
143 }