After tested under windows.
[dyninst.git] / dyninstAPI / src / Relocation / DynAddrSpace.C
1 /* Plugin Implementation */
2
3 #include "DynAddrSpace.h"
4 #include "DynObject.h"
5
6 using Dyninst::ParseAPI::CodeObject;
7 using Dyninst::PatchAPI::DynAddrSpace;
8 using Dyninst::PatchAPI::DynAddrSpacePtr;
9 using Dyninst::PatchAPI::DynObject;
10 using Dyninst::PatchAPI::PatchObject;
11
12 bool DynAddrSpace::loadLibrary(DynObject* obj) {
13   loadObject(obj);
14   if (obj) {
15     as_set_.insert(obj->as());
16     return false;
17   }
18   return true;
19 }
20
21 bool DynAddrSpace::initAs(DynObject* obj) {
22   init(obj);
23   first_as_ = obj->as();
24   as_set_.insert(obj->as());
25   return true;
26 }
27
28 DynAddrSpace::DynAddrSpace()
29   : AddrSpace(), recursive_(false) {
30 }
31
32 DynAddrSpacePtr DynAddrSpace::create(DynObject* obj) {
33   DynAddrSpacePtr ret = DynAddrSpacePtr(new DynAddrSpace());
34   if (!ret) return DynAddrSpacePtr();
35   ret->initAs(obj);
36   return ret;
37 }
38
39 bool DynAddrSpace::write(PatchObject* obj, Address to, Address from, size_t size) {
40   DynObject* dobj = dynamic_cast<DynObject*>(obj);
41   return dobj->as()->writeDataSpace(reinterpret_cast<void*>(to), size,
42                                      reinterpret_cast<void*>(from));
43 }
44
45 Address DynAddrSpace::malloc(PatchObject* obj, size_t size, Address near) {
46   DynObject* dobj = dynamic_cast<DynObject*>(obj);
47   return dobj->as()->inferiorMalloc(size);
48 }
49
50 bool DynAddrSpace::realloc(PatchObject* obj, Address orig, size_t size) {
51   DynObject* dobj = dynamic_cast<DynObject*>(obj);
52   return dobj->as()->inferiorRealloc(orig, size);
53 }
54
55 bool DynAddrSpace::free(PatchObject* obj, Address orig) {
56   DynObject* dobj = dynamic_cast<DynObject*>(obj);
57   dobj->as()->inferiorFree(orig);
58   return true;
59 }