diff --git a/src/Prev_Over/ExistHitPrevOAdapter.h b/src/Prev_Over/ExistHitPrevOAdapter.h
index 2b4d16caa1aa7f5a65fff3e764bf16352132b180..400e835cf55e47cd4f0172509d8ce612bbdab534 100644
--- a/src/Prev_Over/ExistHitPrevOAdapter.h
+++ b/src/Prev_Over/ExistHitPrevOAdapter.h
@@ -31,7 +31,7 @@ public:
void update(otawa::Block *v, t& d);
private:
- lrumc::ACSManager _mayManager;
+ lrupreanalysis::eh_em::ACSManager _mayManager;
domain_t _domain;
graph_t _graph;
store_t _store;
diff --git a/src/Prev_Over/ExistHitPrevODomain.h b/src/Prev_Over/ExistHitPrevODomain.h
index fe8b35bedb3fc3ea0670ccec89013dfe12a554df..6b35f4a1d2a4383711939bfc35b1f05ad74131c9 100644
--- a/src/Prev_Over/ExistHitPrevODomain.h
+++ b/src/Prev_Over/ExistHitPrevODomain.h
@@ -25,8 +25,8 @@ public:
inline void copy(t& d, const t& s) { d.copy(s); }
bool equals(const t& a, const t& b) const;
void join(t& d, const t& s);
- void fetch(t& a, const otawa::icache::Access& ac, lrumc::ACSManager& mayManager);
- void update(const otawa::icache::Access& access, t& a, lrumc::ACSManager& mayManager);
+ void fetch(t& a, const otawa::icache::Access& ac, lrupreanalysis::eh_em::ACSManager& mayManager);
+ void update(const otawa::icache::Access& access, t& a, lrupreanalysis::eh_em::ACSManager& mayManager);
private:
int _n;
diff --git a/src/Prev_Over/lrusecurity_ExistHitPrevODomain.cpp b/src/Prev_Over/lrusecurity_ExistHitPrevODomain.cpp
index 1e316e313c9c422030711d87bc7a9b335f5acd4d..d0799d9ff35c368740cdf14bb97323895429ea23 100644
--- a/src/Prev_Over/lrusecurity_ExistHitPrevODomain.cpp
+++ b/src/Prev_Over/lrusecurity_ExistHitPrevODomain.cpp
@@ -6,17 +6,17 @@ namespace lrusecurity
{
ExistHitPrevODomain::ExistHitPrevODomain(
- const icat3::LBlockCollection& coll,
- int set,
- const t *init) :
- _n(coll[set].count()),
- _bot(_n),
- _top(_n, Address(0x0)),//TO CHANGE
- _set(set),
+ const icat3::LBlockCollection& coll,
+ int set,
+ const t *init):
+ _n(coll[set].count()),
+ _bot(_n),
+ _top(_n, Address(0x0)), //TO CHANGE
+ _set(set),
_coll(coll),
- _A(coll.A()),
- _init(init ? *init : _top),
- _tmp(_n)
+ _A(coll.A()),
+ _init(init ? *init : _top),
+ _tmp(_n)
{
}
@@ -27,9 +27,10 @@ bool ExistHitPrevODomain::equals(const t& acss, const t& bcss) const
return false;
return true;
}
- void ExistHitPrevODomain::join(t& dcss, const t& scss)
+
+void ExistHitPrevODomain::join(t& dcss, const t& scss)
{
- for (int i = 0; i < _n; i++){
+ for (int i = 0; i < _n; i++){
int newsize = dcss[i].size()+scss[i].size();
Bag
newbag = Bag(newsize);
for (int j = 0; j < newsize; j++) {
@@ -40,45 +41,44 @@ bool ExistHitPrevODomain::equals(const t& acss, const t& bcss) const
}
dcss[i] = Bag(newbag);
}
-
-
}
- void ExistHitPrevODomain::fetch(t& acss, const icache::Access& access, lrumc::ACSManager& mayManager)
+
+void ExistHitPrevODomain::fetch(t& acss, const icache::Access& access, lrupreanalysis::eh_em::ACSManager& mayManager)
{
icat3::LBlock *lb = icat3::LBLOCK(access);
int b = lb->index();
for (int i = 0; i < _n; i++){
if (i == b){
- Address smol[] = {access.address()};
- acss[i] = Bag(1,smol);}
- else if (mayManager.mayAge(lb) == _A)
+ Address smol[] = {access.address()};
+ acss[i] = Bag(1, smol);
+ } else if (mayManager.mayAge(_coll[_set][i]) == _A)
acss[i] = Bag();
}
}
-void ExistHitPrevODomain::update(const icache::Access& access, t& a, lrumc::ACSManager& mayManager)
+void ExistHitPrevODomain::update(const icache::Access& access, t& a, lrupreanalysis::eh_em::ACSManager& mayManager)
{
- switch(access.kind()) {
+ switch(access.kind()) {
- case icache::FETCH:
- if(_coll.cache()->set(access.address()) == _set)
- fetch(a, access, mayManager);
- break;
+ case icache::FETCH:
+ if(_coll.cache()->set(access.address()) == _set)
+ fetch(a, access, mayManager);
+ break;
- case icache::PREFETCH:
- if(_coll.cache()->set(access.address()) == _set) {
- copy(_tmp, a);
- fetch(a, access, mayManager);
- join(a, _tmp);
- }
- break;
+ case icache::PREFETCH:
+ if(_coll.cache()->set(access.address()) == _set) {
+ copy(_tmp, a);
+ fetch(a, access, mayManager);
+ join(a, _tmp);
+ }
+ break;
- case icache::NONE:
- break;
+ case icache::NONE:
+ break;
- default:
- ASSERT(false);
- }
+ default:
+ ASSERT(false);
+ }
}
} // namespace lrusecurity
diff --git a/src/Prev_Under/lrusecurity_ExistHitPrevUAdapter.cpp b/src/Prev_Under/lrusecurity_ExistHitPrevUAdapter.cpp
index 48350e2d333645e820eb83127fa1ce690927a719..b8e3f509ed2810d88b726702fdab77e7ced6cf22 100644
--- a/src/Prev_Under/lrusecurity_ExistHitPrevUAdapter.cpp
+++ b/src/Prev_Under/lrusecurity_ExistHitPrevUAdapter.cpp
@@ -1,4 +1,3 @@
-
#include "ExistHitPrevUAdapter.h"
#include
@@ -7,13 +6,14 @@ using namespace otawa;
namespace lrusecurity
{
+
ExistHitPrevUAdapter::ExistHitPrevUAdapter(
int set,
const t* init,
const icat3::LBlockCollection& coll,
const CFGCollection& cfgs,
otawa::WorkSpace* ws) :
- _set(set),
+ _set(set),
_ehManager(ws),
_domain(coll, set, init),
_graph(cfgs),
@@ -29,7 +29,6 @@ void ExistHitPrevUAdapter::update(const Bag& accs, t& d)
}
}
-
void ExistHitPrevUAdapter::update(Block *v, t& d)
{
_domain.copy(d, _domain.bot());
@@ -44,11 +43,12 @@ void ExistHitPrevUAdapter::update(Block *v, t& d)
_domain.copy(s, _store.get(w));
_ehManager.start(w);
+
if(first) {
first = false;
_ehManager.ehDomain(_set).copy(d_eh, _ehManager.ehDomain(_set).bot());
}
-
+
// apply block
{
const Bag& accs = icache::ACCESSES(w);
@@ -68,6 +68,7 @@ void ExistHitPrevUAdapter::update(Block *v, t& d)
lrupreanalysis::eh_em::ExistHitDomain::t* tmp = _ehManager.ehValue(_set);
ASSERT(tmp && "tmp null");
lrupreanalysis::eh_em::ExistHitDomain::t& s_eh = *tmp;
+ ASSERT(d_eh.count() == s_eh.count());
_domain.join(d, s, d_eh, s_eh);
_ehManager.ehDomain(_set).join(d_eh, s_eh);
}
diff --git a/src/Prev_Under/lrusecurity_ExistHitPrevUAnalysis.cpp b/src/Prev_Under/lrusecurity_ExistHitPrevUAnalysis.cpp
index b90cbefe7c60477c7a48ece6af88e0f4fed77871..5cc6773010cdad11dbc5000233bd8d3419d88fda 100644
--- a/src/Prev_Under/lrusecurity_ExistHitPrevUAnalysis.cpp
+++ b/src/Prev_Under/lrusecurity_ExistHitPrevUAnalysis.cpp
@@ -1,4 +1,3 @@
-
#include "ExistHitPrevUAnalysis.h"
#include
@@ -12,6 +11,7 @@
#include "ExistHitPrevUAdapter.h"
#include "ExistHitPrevUDomain.h"
+
using namespace otawa;
namespace lrusecurity
@@ -24,6 +24,7 @@ ExistHitPrevUAnalysis::ExistHitPrevUAnalysis(p::declare& r) :
_cfgs(nullptr)
{
}
+
void ExistHitPrevUAnalysis::configure(const PropList& props)
{
Processor::configure(props);
@@ -61,13 +62,13 @@ void ExistHitPrevUAnalysis::setup(WorkSpace* ws)
if(logFor(LOG_FUN))
log << "\tExist Hit Prev Analysis running time: " << elapsed.count() << " s" << io::endl;
}
+
void ExistHitPrevUAnalysis::destroy(WorkSpace*)
{
for(CFGCollection::BlockIter b(_cfgs); b; b++)
EXIST_HIT_PREV_IN(b).remove();
}
-
void ExistHitPrevUAnalysis::processSet(int set, WorkSpace* ws)
{
// perform the analysis
diff --git a/src/Prev_Under/lrusecurity_ExistHitPrevUDomain.cpp b/src/Prev_Under/lrusecurity_ExistHitPrevUDomain.cpp
index 4b17b6f089b120d31f61551ca39b49ddec1a1520..ca8adeaf508f900024d1d2f7a614ee89bd9f4f2c 100644
--- a/src/Prev_Under/lrusecurity_ExistHitPrevUDomain.cpp
+++ b/src/Prev_Under/lrusecurity_ExistHitPrevUDomain.cpp
@@ -6,17 +6,17 @@ namespace lrusecurity
{
ExistHitPrevUDomain::ExistHitPrevUDomain(
- const icat3::LBlockCollection& coll,
- int set,
- const t *init) :
- _n(coll[set].count()),
- _bot(_n),
- _top(_n, Address(0x0)),//TO CHANGE
- _set(set),
+ const icat3::LBlockCollection& coll,
+ int set,
+ const t *init):
+ _n(coll[set].count()),
+ _bot(_n),
+ _top(_n, Address(0x0)), //TO CHANGE
+ _set(set),
_coll(coll),
- _A(coll.A()),
- _init(init ? *init : _top),
- _tmp(_n)
+ _A(coll.A()),
+ _init(init ? *init : _top),
+ _tmp(_n)
{
}
@@ -27,61 +27,62 @@ bool ExistHitPrevUDomain::equals(const t& acss, const t& bcss) const
return false;
return true;
}
- void ExistHitPrevUDomain::join(t& dcss, const t& scss, icat3::ACS d_eh, icat3::ACS s_eh)
+
+void ExistHitPrevUDomain::join(t& dcss, const t& scss, icat3::ACS d_eh, icat3::ACS s_eh)
{
- for (int i = 0; i < _n; i++){
- if (s_eh[i] < d_eh[i] || (d_eh[i] == -1 && s_eh[i] != -1)){
+ for (int i = 0; i < _n; i++) {
+ if (s_eh[i] < d_eh[i] || (d_eh[i] == -1 && s_eh[i] != -1)) {
dcss[i] = scss[i];
- }
- else if (s_eh[i] == d_eh[i]){
- int fullsize = (dcss[i]).size()+(scss[i]).size();
- Bag tmp = Bag(fullsize);
- for (int j = 0; j < fullsize; j++){
- if (j < (dcss[i]).size())
- tmp[j] = dcss[i][j] ;
- else
- tmp[j] = scss[i][j-dcss[i].size()];
+ } else if (s_eh[i] == d_eh[i]) {
+ int fullsize = (dcss[i]).size() + (scss[i]).size();
+ Bag tmp = Bag (fullsize);
+ for (int j = 0; j < fullsize; j++) {
+ if (j < (dcss[i]).size())
+ tmp[j] = dcss[i][j];
+ else
+ tmp[j] = scss[i][j - dcss[i].size()];
}
dcss[i] = tmp;
}
}
}
- void ExistHitPrevUDomain::fetch(t& acss, const icache::Access& access, lrupreanalysis::eh_em::ACSManager& ehManager)
+
+void ExistHitPrevUDomain::fetch(t& acss, const icache::Access& access, lrupreanalysis::eh_em:: ACSManager & ehManager)
{
icat3::LBlock *lb = icat3::LBLOCK(access);
int b = lb->index();
for (int i = 0; i < _n; i++){
if (i == b){
- Address smol[] = {access.address()};
- acss[i] = Bag(1,smol);}
- else if (ehManager.existHitAge(lb) == _A)
+ Address smol[] = {access.address()};
+ acss[i] = Bag(1, smol);
+ } else if (ehManager.existHitAge(_coll[_set][i]) == _A)
acss[i] = Bag();
}
}
void ExistHitPrevUDomain::update(const icache::Access& access, t& a, lrupreanalysis::eh_em::ACSManager& ehManager)
{
- switch(access.kind()) {
+ switch(access.kind()) {
- case icache::FETCH:
- if(_coll.cache()->set(access.address()) == _set)
- fetch(a, access, ehManager);
- break;
+ case icache::FETCH:
+ if(_coll.cache()->set(access.address()) == _set)
+ fetch(a, access, ehManager);
+ break;
- case icache::PREFETCH:
- if(_coll.cache()->set(access.address()) == _set) {
- copy(_tmp, a);
- fetch(a, access, ehManager);
- join(a, _tmp, icat3::ACS(), icat3::ACS());
- }
- break;
+ case icache::PREFETCH:
+ if(_coll.cache()->set(access.address()) == _set) {
+ copy(_tmp, a);
+ fetch(a, access, ehManager);
+ join(a, _tmp, icat3::ACS(), icat3::ACS());
+ }
+ break;
- case icache::NONE:
- break;
+ case icache::NONE:
+ break;
- default:
- ASSERT(false);
- }
+ default:
+ ASSERT(false);
+ }
}
} // namespace lrusecurity
diff --git a/src/lrusecurity_Displayer.cpp b/src/lrusecurity_Displayer.cpp
index e2b97c960866f08980057db08d7f54abf2c07119..5d17cf1f682644540669b2f522ef68ddca397873 100644
--- a/src/lrusecurity_Displayer.cpp
+++ b/src/lrusecurity_Displayer.cpp
@@ -7,7 +7,7 @@
#include
#include
//#include "SecCFGOutput.h"
- using namespace otawa;
+using namespace otawa;
namespace lrusecurity
{
@@ -57,7 +57,7 @@ protected:
_out.setStream(*_stream);
}
- _out << "ACCESS\t\tKIND\tCATEGORY\tBB\t";
+ _out << "ACCESS\t\tKIND\tCATEGORY\t\tBB\t";
if(_line)
_out << "\tLINE";
@@ -105,19 +105,29 @@ protected:
}
_out << "UNSAFE ";
int set = otawa::icat3::LBLOCK(access)->set();
+
+ int number = 0;
if (bb->hasProp(EXIST_HIT_PREV_IN)) {
ACSSecurity prev = (*EXIST_HIT_PREV_IN(bb))[set];
int index = otawa::icat3::LBLOCK(access)->index();
- for (int i = 0; i < prev[index].size(); i++)
- _out << prev[index][i];
+ number = prev[index].size();
+ for (int i = 0; i < number; i++)
+ _out << prev[index][i] << "\n\t\t\t\t\b";
+
+ // REMONTEE
+ for (int j = 0; j < number; j++)
+ _out << "\033[1A";
+
}
-
-
- _out << "\t\t";
- _out << "BB " << bb->index() << "\t\t";
+
+ _out << "\t\t\tBB " << bb->index() << "\t\t";
printLine(ws, bb->address(), bb->topAddress().offset());
- _out << io::endl;
- }
+
+ // DESCENTE
+ for (int i = 0; i < number-1; i++)
+ _out << "\n//";
+ _out << io::endl;
+ }
}
void printLine(WorkSpace* ws, Address begin, Address::offset_t offset)