remove unnecessary assertion for unknown phdr_type (#757)
[dyninst.git] / dyninstAPI / src / BPatch_instruction.C
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
31 #include "common/src/Types.h"
32
33 #include <stdlib.h>
34 #include <string.h>
35 #include <assert.h>
36 #include "BPatch.h"
37 #include "BPatch_instruction.h"
38 #include "BPatch_basicBlock.h"
39 #include "BPatch_libInfo.h"
40 #include "BPatch_process.h"
41 #include "util.h"
42 #include "function.h"
43 #include "instPoint.h"
44 #include "addressSpace.h"
45
46 #include "legacy-instruction.h"
47
48 /**************************************************************************
49  * BPatch_instruction
50  *************************************************************************/
51
52 #if defined(arch_x86) || defined(arch_x86_64)
53 const unsigned int BPatch_instruction::nmaxacc_NP = 2;
54 #else
55 const unsigned int BPatch_instruction::nmaxacc_NP = 1;
56 #endif
57
58 BPatch_instruction::BPatch_instruction(internal_instruction *insn,
59                                        Address addr_)
60  : nacc(0), insn_(insn), parent(NULL), addr(addr_)
61 {
62   isLoad = new bool[nmaxacc_NP];
63   isStore = new bool[nmaxacc_NP];
64   preFcn = new int[nmaxacc_NP];
65   condition = new int[nmaxacc_NP];
66   nonTemporal = new bool[nmaxacc_NP];
67
68   for (unsigned int i=0; i < nmaxacc_NP; i++) {
69     isLoad[i] = false;
70     isStore[i] = false;
71     preFcn[i] = -1;
72     condition[i] = -1;
73     nonTemporal[i] = false;
74   }
75
76 }
77
78 internal_instruction *BPatch_instruction::insn() { return insn_; }
79
80 BPatch_instruction::~BPatch_instruction() {
81
82    delete[] isLoad;
83    delete[] isStore;
84    delete[] preFcn;
85    delete[] condition;
86    delete[] nonTemporal;
87
88    if(insn_)
89     delete insn_;
90 }
91
92 BPatch_basicBlock *BPatch_instruction::getParent()
93 {
94   return parent;
95 }
96
97 void *BPatch_instruction::getAddress()
98 {
99   return (void *)addr;
100 }
101 BPatch_point *BPatch_instruction::getInstPoint()
102 {
103    func_instance *ifunc = parent->ifunc();
104    AddressSpace *proc = ifunc->proc();
105    BPatch_addressSpace *bpproc = (BPatch_addressSpace *)proc->up_ptr();
106    assert(bpproc);
107    instPoint *point = instPoint::preInsn(ifunc,
108                                          parent->block(),
109                                          addr);
110    
111    BPatch_point *ret = bpproc->findOrCreateBPPoint(NULL, point, BPatch_locInstruction);
112    
113    if (!ret)
114       fprintf(stderr, "%s[%d]:  getInstPoint failing!\n", FILE__, __LINE__);
115    return ret;
116 }
117
118 std::string BPatch_register::name() const{
119     return name_;
120 }
121