Changeset 245 for trunk/modules


Ignore:
Timestamp:
Aug 3, 2012, 7:59:32 PM (12 years ago)
Author:
alain
Message:

ntroducing a segmentation violation checking

Location:
trunk/modules/vci_mem_cache_v4/caba/source
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • trunk/modules/vci_mem_cache_v4/caba/source/include/vci_mem_cache_v4.h

    r222 r245  
    430430      sc_signal<int>         r_tgt_cmd_fsm;
    431431
    432       size_t nseg;
    433       size_t ncseg;
     432      size_t                   m_nseg;
     433      size_t                   m_ncseg;
    434434      soclib::common::Segment  **m_seg;
    435435      soclib::common::Segment  **m_cseg;
     436
    436437      ///////////////////////////////////////////////////////
    437438      // Registers controlled by the READ fsm
  • trunk/modules/vci_mem_cache_v4/caba/source/src/vci_mem_cache_v4.cpp

    r224 r245  
    313313    r_tgt_cmd_fsm("r_tgt_cmd_fsm"),
    314314   
    315     nseg(0),   
    316     ncseg(0),   
     315    m_nseg(0), 
     316    m_ncseg(0),
    317317
    318318    r_read_fsm("r_read_fsm"),
     
    373373      // Get the segments associated to the MemCache
    374374      std::list<soclib::common::Segment>::iterator seg;
     375      size_t i;
    375376
    376377      for(seg = m_seglist.begin(); seg != m_seglist.end() ; seg++) {
    377         nseg++;
     378        m_nseg++;
    378379      }
    379380      for(seg = m_cseglist.begin(); seg != m_cseglist.end() ; seg++) {
    380         ncseg++;
     381        m_ncseg++;
    381382      }
    382383
    383       m_seg = new soclib::common::Segment*[nseg];
    384       size_t i = 0;
     384      m_seg = new soclib::common::Segment*[m_nseg];
     385
     386      i = 0;
    385387      for ( seg = m_seglist.begin() ; seg != m_seglist.end() ; seg++ ) {
    386388        m_seg[i] = &(*seg);
    387389        i++;
    388390      }
    389       m_cseg = new soclib::common::Segment*[ncseg];
     391
     392      m_cseg = new soclib::common::Segment*[m_ncseg];
     393
    390394      i = 0;
    391395      for ( seg = m_cseglist.begin() ; seg != m_cseglist.end() ; seg++ ) {
     
    803807}
    804808#endif
     809                // checking segmentation violation
     810                vci_addr_t  address = p_vci_tgt.address.read();
     811                uint32_t    plen    = p_vci_tgt.plen.read();
     812                bool found = false;
     813                for ( size_t seg_id = 0 ; seg_id < m_nseg ; seg_id++ )
     814                {
     815                    if ( m_seg[seg_id]->contains(address) &&
     816                         m_seg[seg_id]->contains(address + plen - vci_param::B) )
     817                    {
     818                        found = true;
     819                    }
     820                }
     821                if ( not found )
     822                {
     823                    std::cout << "VCI_MEM_CACHE ERROR " << name() << std::endl;
     824                    std::cout << "Out of segment VCI address in TGT_CMD_IDLE state" << std::endl;
     825                    exit(0);
     826                }
     827
    805828                if ( p_vci_tgt.cmd.read() == vci_param::CMD_READ )
    806829                {
     
    32663289
    32673290                bool reached = false;
    3268                 for ( size_t index = 0 ; index < ncseg && !reached ; index++ )
     3291                for ( size_t index = 0 ; index < m_ncseg && !reached ; index++ )
    32693292                {
    32703293                    if ( m_cseg[index]->contains((addr_t)(p_vci_tgt_cleanup.address.read())) )
Note: See TracChangeset for help on using the changeset viewer.