Skip to content
Snippets Groups Projects
Commit c985fb07 authored by jdh8d's avatar jdh8d
Browse files

added contents to scoops

Former-commit-id: 589996f6bef79940c04ad67b813969c69950723b
parent b2c26041
No related branches found
No related tags found
No related merge requests found
...@@ -30,29 +30,35 @@ class DataScoop_t : public BaseObj_t ...@@ -30,29 +30,35 @@ class DataScoop_t : public BaseObj_t
libIRDB::AddressID_t* p_start, libIRDB::AddressID_t* p_start,
libIRDB::AddressID_t* p_end, libIRDB::AddressID_t* p_end,
libIRDB::Type_t* p_type, libIRDB::Type_t* p_type,
int p_permissions) int p_permissions,
std::string p_contents)
: :
BaseObj_t(NULL), BaseObj_t(NULL),
name(p_name), name(p_name),
start(p_start), start(p_start),
end(p_end), end(p_end),
type(p_type), type(p_type),
permissions(p_permissions) permissions(p_permissions),
contents(p_contents)
{ {
assert(start && end);
SetBaseID(id); SetBaseID(id);
} }
std::string GetName() const { return name; } std::string GetName() const { return name; }
std::string GetContents() const { return contents; }
libIRDB::AddressID_t* GetStart() const { return start; } libIRDB::AddressID_t* GetStart() const { return start; }
libIRDB::AddressID_t* GetEnd() const { return end; } libIRDB::AddressID_t* GetEnd() const { return end; }
libIRDB::Type_t* GetType() const { return type; } libIRDB::Type_t* GetType() const { return type; }
libIRDB::virtual_offset_t GetSize() { assert(start && end); return end->GetVirtualOffset() - start->GetVirtualOffset() ; }
bool isReadable() const { return (permissions & permissions_r) == permissions_r; } bool isReadable() const { return (permissions & permissions_r) == permissions_r; }
bool isWriteable() const { return (permissions & permissions_w) == permissions_w; }; bool isWriteable() const { return (permissions & permissions_w) == permissions_w; };
bool isExecuteable() const { return (permissions & permissions_x) == permissions_x; }; bool isExecuteable() const { return (permissions & permissions_x) == permissions_x; };
void SetName(const std::string &n) { name=n; } void SetName(const std::string &n) { name=n; }
void SetStart( libIRDB::AddressID_t* addr) { start=addr; } void SetContents(const std::string &n) { contents=n; }
void SetEnd( libIRDB::AddressID_t* addr ) { end=addr; } void SetStart( libIRDB::AddressID_t* addr) { assert(addr); start=addr; }
void SetEnd( libIRDB::AddressID_t* addr ) { assert(addr); end=addr; }
void SetType( libIRDB::Type_t* t) { type=t; } void SetType( libIRDB::Type_t* t) { type=t; }
void SetReadable() { permissions |= permissions_r; } void SetReadable() { permissions |= permissions_r; }
...@@ -75,6 +81,7 @@ class DataScoop_t : public BaseObj_t ...@@ -75,6 +81,7 @@ class DataScoop_t : public BaseObj_t
libIRDB::AddressID_t* end; libIRDB::AddressID_t* end;
libIRDB::Type_t* type; libIRDB::Type_t* type;
int permissions; int permissions;
std::string contents;
}; };
......
...@@ -1174,8 +1174,9 @@ std::map<db_id_t,DataScoop_t*> FileIR_t::ReadScoopsFromDB ...@@ -1174,8 +1174,9 @@ std::map<db_id_t,DataScoop_t*> FileIR_t::ReadScoopsFromDB
db_id_t end_id=atoi(dbintr->GetResultColumn("end_address_id").c_str()); db_id_t end_id=atoi(dbintr->GetResultColumn("end_address_id").c_str());
AddressID_t* end_addr=addrMap[end_id]; AddressID_t* end_addr=addrMap[end_id];
int permissions=atoi(dbintr->GetResultColumn("permissions").c_str()); int permissions=atoi(dbintr->GetResultColumn("permissions").c_str());
std::string contents=dbintr->GetResultColumn("data");
DataScoop_t* newscoop=new DataScoop_t(sid,name,start_addr,end_addr,type,permissions); DataScoop_t* newscoop=new DataScoop_t(sid,name,start_addr,end_addr,type,permissions,contents);
assert(newscoop); assert(newscoop);
GetDataScoops().insert(newscoop); GetDataScoops().insert(newscoop);
dbintr->MoveToNextRow(); dbintr->MoveToNextRow();
......
...@@ -469,7 +469,13 @@ void fill_in_scoops(FileIR_t *firp) ...@@ -469,7 +469,13 @@ void fill_in_scoops(FileIR_t *firp)
endaddr->SetFileID(firp->GetFile()->GetBaseID()); endaddr->SetFileID(firp->GetFile()->GetBaseID());
firp->GetAddresses().insert(endaddr); firp->GetAddresses().insert(endaddr);
Type_t *chunk_type=NULL; /* FIXME -- need to figure out the type system for schoops, but NULL should remain valid */ string the_contents;
the_contents.resize(elfiop.sections[secndx]->get_size());
// deal with .bss segments that are 0 init'd.
if (elfiop.sections[secndx]->get_data())
the_contents.assign(elfiop.sections[secndx]->get_data(),elfiop.sections[secndx]->get_size());
Type_t *chunk_type=NULL; /* FIXME -- need to figure out the type system for scoops, but NULL should remain valid */
/* permissions */ /* permissions */
int permissions= int permissions=
...@@ -477,7 +483,7 @@ void fill_in_scoops(FileIR_t *firp) ...@@ -477,7 +483,7 @@ void fill_in_scoops(FileIR_t *firp)
( elfiop.sections[secndx]->isWriteable() << 1 ) | ( elfiop.sections[secndx]->isWriteable() << 1 ) |
( elfiop.sections[secndx]->isExecutable() << 0 ) ; ( elfiop.sections[secndx]->isExecutable() << 0 ) ;
DataScoop_t *newscoop=new DataScoop_t(BaseObj_t::NOT_IN_DATABASE, name, startaddr, endaddr, NULL, permissions); DataScoop_t *newscoop=new DataScoop_t(BaseObj_t::NOT_IN_DATABASE, name, startaddr, endaddr, NULL, permissions, the_contents);
assert(newscoop); assert(newscoop);
firp->GetDataScoops().insert(newscoop); firp->GetDataScoops().insert(newscoop);
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment