| 101 | } |
| 102 | |
| 103 | void* KCore::Retrieve( uint64_t addr, uint64_t size ) const |
| 104 | { |
| 105 | if( m_fd == -1 ) return nullptr; |
| 106 | auto it = std::lower_bound( m_offsets.begin(), m_offsets.end(), addr, []( const Offset& lhs, uint64_t rhs ) { return lhs.start + lhs.size < rhs; } ); |
| 107 | if( it == m_offsets.end() ) return nullptr; |
| 108 | if( addr + size > it->start + it->size ) return nullptr; |
| 109 | if( lseek( m_fd, it->offset + addr - it->start, SEEK_SET ) == -1 ) return nullptr; |
| 110 | auto ptr = tracy_malloc( size ); |
| 111 | if( read( m_fd, ptr, size ) != ssize_t( size ) ) |
| 112 | { |
| 113 | tracy_free( ptr ); |
| 114 | return nullptr; |
| 115 | } |
| 116 | return ptr; |
| 117 | } |
| 118 | |
| 119 | } |
| 120 |
no test coverage detected