Vous avez reçu un message "Your GitLab account has been locked ..." ? Pas d'inquiétude : lisez cet article https://docs.gricad-pages.univ-grenoble-alpes.fr/help/unlock/

DotModificator.cpp 1.53 KB
Newer Older
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
#include <iostream>
#include <fstream>

#include "DotModificator.h"

namespace lrusecurity
{

void DotModificator::modify(otawa::CFG *cfg, otawa::icache::Access *access, otawa::Address address, InstMatcher *intM)
{
    std::ofstream flux(_filename);

    if (flux){
        // On récupère le bloc correspondant à l'accès grâce à l'InstMatcher
        otawa::BasicBlock *bb_match = intM->match_access(access);

        // Permet de mettre des nodes au même niveau
        if (_first) {
            flux << "rankdir = TB;" << io::endl;
            _first = false;
        }

        // Copie de l'adresse de l'accès pour affichage
        string acc_addr;
        acc_addr << access->address();

        //Idem avec l'address "Unsafe"
        string addr;
        addr << address;

        // Creation du node UNSAFE
        flux << "Unsafe_" << _count << "[label=\"{UNSAFE " << acc_addr
            <<"| lead to a hit @" << addr <<"}\", color = red];" << io::endl;

        // On met au même niveau le node Unsafe et le BB auquel il correspond
        flux << "{rank = same; Unsafe_" << _count << "; "
            << cfg->name() << "_" << cfg->index() << "_" << bb_match->index() <<";}";   //TODO: à optimisé (1 par BB)

        // On incrémente
        _count++;
    } else {
        cout << "ERROR: Unable to open the file" << io::endl;
    }
}

void DotModificator::finish(void)
{
    std::ofstream flux(_filename);

    if (flux){
        flux << "}" << io::endl;
    } else {
        cout << "ERROR: Unable to open the file" << io::endl;
    }
}

}