mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2024-12-13 04:30:23 +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:
parent
036a67d670
commit
3529c53d2f
@ -76,6 +76,16 @@ uint64_t LLVMGetSymbolAddress(LLVMSymbolIteratorRef SI);
|
||||
uint64_t LLVMGetSymbolOffset(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
|
||||
}
|
||||
|
||||
|
@ -164,3 +164,48 @@ uint64_t LLVMGetSymbolSize(LLVMSymbolIteratorRef SI) {
|
||||
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;
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user