CodeobjAddressTranslate Class Reference

CodeobjAddressTranslate Class Reference#

ROCprofiler-SDK developer API: rocprofiler::sdk::codeobj::disassembly::CodeobjAddressTranslate Class Reference
ROCprofiler-SDK developer API 1.0.0
ROCm Profiling API and tools
rocprofiler::sdk::codeobj::disassembly::CodeobjAddressTranslate Class Reference

Translates virtual addresses to elf file offsets. More...

#include <rocprofiler-sdk/cxx/codeobj/code_printing.hpp>

+ Inheritance diagram for rocprofiler::sdk::codeobj::disassembly::CodeobjAddressTranslate:
+ Collaboration diagram for rocprofiler::sdk::codeobj::disassembly::CodeobjAddressTranslate:

Public Member Functions

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)
 

Protected Attributes

std::unordered_map< marker_id_t, std::shared_ptr< LoadedCodeobjDecoder > > decoders {}
 

Detailed Description

Translates virtual addresses to elf file offsets.

Definition at line 429 of file code_printing.hpp.

Member Function Documentation

◆ 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

Reimplemented from rocprofiler::sdk::codeobj::disassembly::CodeobjMap.

Definition at line 437 of file code_printing.hpp.

441 {
442 this->Super::addDecoder(filepath, id, load_addr, memsize);
443 auto ptr = decoders.at(id);
444 table.insert({ptr->begin(), ptr->size(), id});
445 }

◆ 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

Reimplemented from rocprofiler::sdk::codeobj::disassembly::CodeobjMap.

Definition at line 447 of file code_printing.hpp.

452 {
453 this->Super::addDecoder(data, memory_size, id, load_addr, memsize);
454 auto ptr = decoders.at(id);
455 table.insert({ptr->begin(), ptr->size(), id});
456 }

◆ 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

Definition at line 395 of file code_printing.hpp.

395{ return decoders.erase(id) != 0; }

Field Documentation

◆ decoders

std::unordered_map<marker_id_t, std::shared_ptr<LoadedCodeobjDecoder> > rocprofiler::sdk::codeobj::disassembly::CodeobjMap::decoders {}
protectedinherited

Definition at line 423 of file code_printing.hpp.

423{};

The documentation for this class was generated from the following file: