mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-06-26 23:24:34 +00:00
Expose relocation accessors through the libObject C API.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@143109 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
@ -76,6 +76,16 @@ uint64_t LLVMGetSymbolAddress(LLVMSymbolIteratorRef SI);
|
|||||||
uint64_t LLVMGetSymbolOffset(LLVMSymbolIteratorRef SI);
|
uint64_t LLVMGetSymbolOffset(LLVMSymbolIteratorRef SI);
|
||||||
uint64_t LLVMGetSymbolSize(LLVMSymbolIteratorRef SI);
|
uint64_t LLVMGetSymbolSize(LLVMSymbolIteratorRef SI);
|
||||||
|
|
||||||
|
// RelocationRef accessors
|
||||||
|
uint64_t LLVMGetRelocationAddress(LLVMRelocationIteratorRef RI);
|
||||||
|
LLVMSymbolIteratorRef LLVMGetRelocationSymbol(LLVMRelocationIteratorRef RI);
|
||||||
|
uint64_t LLVMGetRelocationType(LLVMRelocationIteratorRef RI);
|
||||||
|
// NOTE: Caller takes ownership of returned string of the two
|
||||||
|
// following functions.
|
||||||
|
const char *LLVMGetRelocationTypeName(LLVMRelocationIteratorRef RI);
|
||||||
|
const char *LLVMGetRelocationValueString(LLVMRelocationIteratorRef RI);
|
||||||
|
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -164,3 +164,48 @@ uint64_t LLVMGetSymbolSize(LLVMSymbolIteratorRef SI) {
|
|||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// RelocationRef accessors
|
||||||
|
uint64_t LLVMGetRelocationAddress(LLVMRelocationIteratorRef RI) {
|
||||||
|
uint64_t ret;
|
||||||
|
if (error_code ec = (*unwrap(RI))->getAddress(ret))
|
||||||
|
report_fatal_error(ec.message());
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
LLVMSymbolIteratorRef LLVMGetRelocationSymbol(LLVMRelocationIteratorRef RI) {
|
||||||
|
SymbolRef ret;
|
||||||
|
if (error_code ec = (*unwrap(RI))->getSymbol(ret))
|
||||||
|
report_fatal_error(ec.message());
|
||||||
|
|
||||||
|
return wrap(new symbol_iterator(ret));
|
||||||
|
}
|
||||||
|
|
||||||
|
uint64_t LLVMGetRelocationType(LLVMRelocationIteratorRef RI) {
|
||||||
|
uint64_t ret;
|
||||||
|
if (error_code ec = (*unwrap(RI))->getType(ret))
|
||||||
|
report_fatal_error(ec.message());
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
// NOTE: Caller takes ownership of returned string.
|
||||||
|
const char *LLVMGetRelocationTypeName(LLVMRelocationIteratorRef RI) {
|
||||||
|
SmallVector<char, 0> ret;
|
||||||
|
if (error_code ec = (*unwrap(RI))->getTypeName(ret))
|
||||||
|
report_fatal_error(ec.message());
|
||||||
|
|
||||||
|
char *str = static_cast<char*>(malloc(ret.size()));
|
||||||
|
std::copy(ret.begin(), ret.end(), str);
|
||||||
|
return str;
|
||||||
|
}
|
||||||
|
|
||||||
|
// NOTE: Caller takes ownership of returned string.
|
||||||
|
const char *LLVMGetRelocationValueString(LLVMRelocationIteratorRef RI) {
|
||||||
|
SmallVector<char, 0> ret;
|
||||||
|
if (error_code ec = (*unwrap(RI))->getValueString(ret))
|
||||||
|
report_fatal_error(ec.message());
|
||||||
|
|
||||||
|
char *str = static_cast<char*>(malloc(ret.size()));
|
||||||
|
std::copy(ret.begin(), ret.end(), str);
|
||||||
|
return str;
|
||||||
|
}
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user