Translates virtual addresses to elf file offsets.
More...
#include <rocprofiler-sdk/cxx/codeobj/code_printing.hpp>
|
| void | addDecoder (const char *filepath, marker_id_t id, uint64_t load_addr, uint64_t memsize) override |
| |
| void | addDecoder (const void *data, unsigned long memory_size, marker_id_t id, uint64_t load_addr, uint64_t memsize) override |
| |
| bool | removeDecoder (marker_id_t id, uint64_t load_addr) |
| |
| bool | removeDecoder (marker_id_t id) |
| |
| std::unique_ptr< Instruction > | get (uint64_t vaddr) |
| |
| std::unique_ptr< Instruction > | get (marker_id_t id, uint64_t offset) |
| |
| const char * | getSymbolName (uint64_t vaddr) |
| |
| std::map< uint64_t, SymbolInfo > | getSymbolMap () const |
| |
| std::map< uint64_t, SymbolInfo > | getSymbolMap (marker_id_t id) const |
| |
| virtual bool | removeDecoderbyId (marker_id_t id) |
| |
| const char * | getSymbolName (marker_id_t id, uint64_t offset) |
| |
|
| std::unordered_map< marker_id_t, std::shared_ptr< LoadedCodeobjDecoder > > | decoders {} |
| |
Translates virtual addresses to elf file offsets.
Definition at line 429 of file code_printing.hpp.
◆ addDecoder() [1/2]
| void rocprofiler::sdk::codeobj::disassembly::CodeobjAddressTranslate::addDecoder |
( |
const char * |
filepath, |
|
|
marker_id_t |
id, |
|
|
uint64_t |
load_addr, |
|
|
uint64_t |
memsize |
|
) |
| |
|
inlineoverridevirtual |
◆ addDecoder() [2/2]
| void rocprofiler::sdk::codeobj::disassembly::CodeobjAddressTranslate::addDecoder |
( |
const void * |
data, |
|
|
unsigned long |
memory_size, |
|
|
marker_id_t |
id, |
|
|
uint64_t |
load_addr, |
|
|
uint64_t |
memsize |
|
) |
| |
|
inlineoverridevirtual |
◆ get() [1/2]
| std::unique_ptr< Instruction > rocprofiler::sdk::codeobj::disassembly::CodeobjAddressTranslate::get |
( |
marker_id_t |
id, |
|
|
uint64_t |
offset |
|
) |
| |
|
inline |
Definition at line 477 of file code_printing.hpp.
478 {
479 if(id == 0)
480 return get(offset);
481 else
482 return this->Super::get(id, offset);
483 }
◆ get() [2/2]
| std::unique_ptr< Instruction > rocprofiler::sdk::codeobj::disassembly::CodeobjAddressTranslate::get |
( |
uint64_t |
vaddr | ) |
|
|
inline |
Definition at line 471 of file code_printing.hpp.
472 {
473 auto addr_range = table.find_codeobj_in_range(vaddr);
474 return this->Super::get(addr_range.id, vaddr - addr_range.addr);
475 }
◆ getSymbolMap() [1/2]
| std::map< uint64_t, SymbolInfo > rocprofiler::sdk::codeobj::disassembly::CodeobjAddressTranslate::getSymbolMap |
( |
| ) |
const |
|
inline |
Definition at line 495 of file code_printing.hpp.
496 {
497 std::map<uint64_t, SymbolInfo> symbols;
498
499 for(const auto& [_, dec] : decoders)
500 {
501 auto& smap = dec->getSymbolMap();
502 for(auto& [vaddr, sym] : smap)
503 symbols[vaddr + dec->load_addr] = sym;
504 }
505
506 return symbols;
507 }
◆ getSymbolMap() [2/2]
| std::map< uint64_t, SymbolInfo > rocprofiler::sdk::codeobj::disassembly::CodeobjAddressTranslate::getSymbolMap |
( |
marker_id_t |
id | ) |
const |
|
inline |
Definition at line 509 of file code_printing.hpp.
510 {
511 if(decoders.find(id) == decoders.end()) return {};
512
513 try
514 {
515 return decoders.at(id)->getSymbolMap();
516 } catch(...)
517 {
518 return {};
519 }
520 }
◆ getSymbolName() [1/2]
| const char * rocprofiler::sdk::codeobj::disassembly::CodeobjMap::getSymbolName |
( |
marker_id_t |
id, |
|
|
uint64_t |
offset |
|
) |
| |
|
inlineinherited |
Definition at line 410 of file code_printing.hpp.
411 {
412 try
413 {
414 auto& decoder = decoders.at(id);
415 uint64_t vaddr = decoder->begin() + offset;
416 if(decoder->inrange(vaddr)) return decoder->getSymbolName(vaddr);
417 } catch(std::out_of_range&)
418 {}
419 return nullptr;
420 }
◆ getSymbolName() [2/2]
| const char * rocprofiler::sdk::codeobj::disassembly::CodeobjAddressTranslate::getSymbolName |
( |
uint64_t |
vaddr | ) |
|
|
inline |
Definition at line 485 of file code_printing.hpp.
486 {
487 for(auto& [_, decoder] : decoders)
488 {
489 if(!decoder->inrange(vaddr)) continue;
490 return decoder->getSymbolName(vaddr);
491 }
492 return nullptr;
493 }
◆ removeDecoder() [1/2]
| bool rocprofiler::sdk::codeobj::disassembly::CodeobjAddressTranslate::removeDecoder |
( |
marker_id_t |
id | ) |
|
|
inline |
Definition at line 463 of file code_printing.hpp.
464 {
465 uint64_t addr = 0;
466 if(decoders.find(id) != decoders.end()) addr = decoders.at(id)->begin();
467
468 return removeDecoder(id, addr);
469 }
◆ removeDecoder() [2/2]
| bool rocprofiler::sdk::codeobj::disassembly::CodeobjAddressTranslate::removeDecoder |
( |
marker_id_t |
id, |
|
|
uint64_t |
load_addr |
|
) |
| |
|
inline |
Definition at line 458 of file code_printing.hpp.
459 {
460 return table.remove(load_addr) && this->Super::removeDecoderbyId(id);
461 }
◆ removeDecoderbyId()
| virtual bool rocprofiler::sdk::codeobj::disassembly::CodeobjMap::removeDecoderbyId |
( |
marker_id_t |
id | ) |
|
|
inlinevirtualinherited |
◆ decoders
| std::unordered_map<marker_id_t, std::shared_ptr<LoadedCodeobjDecoder> > rocprofiler::sdk::codeobj::disassembly::CodeobjMap::decoders {} |
|
protectedinherited |
The documentation for this class was generated from the following file: