2011-04-04 06:34:07 +08:00
|
|
|
//===- Object.cpp - C bindings to the object file library--------*- C++ -*-===//
|
|
|
|
//
|
|
|
|
// The LLVM Compiler Infrastructure
|
|
|
|
//
|
|
|
|
// This file is distributed under the University of Illinois Open Source
|
|
|
|
// License. See LICENSE.TXT for details.
|
|
|
|
//
|
|
|
|
//===----------------------------------------------------------------------===//
|
|
|
|
//
|
|
|
|
// This file defines the C bindings to the file-format-independent object
|
|
|
|
// library.
|
|
|
|
//
|
|
|
|
//===----------------------------------------------------------------------===//
|
|
|
|
|
|
|
|
#include "llvm/Object/ObjectFile.h"
|
|
|
|
#include "llvm-c/Object.h"
|
|
|
|
|
|
|
|
using namespace llvm;
|
|
|
|
using namespace object;
|
|
|
|
|
|
|
|
LLVMObjectFileRef LLVMCreateObjectFile(LLVMMemoryBufferRef MemBuf) {
|
|
|
|
return wrap(ObjectFile::createObjectFile(unwrap(MemBuf)));
|
|
|
|
}
|
|
|
|
|
|
|
|
void LLVMDisposeObjectFile(LLVMObjectFileRef ObjectFile) {
|
|
|
|
delete unwrap(ObjectFile);
|
|
|
|
}
|
|
|
|
|
|
|
|
LLVMSectionIteratorRef LLVMGetSections(LLVMObjectFileRef ObjectFile) {
|
2011-10-08 03:25:32 +08:00
|
|
|
section_iterator SI = unwrap(ObjectFile)->begin_sections();
|
|
|
|
return wrap(new section_iterator(SI));
|
2011-04-04 06:34:07 +08:00
|
|
|
}
|
|
|
|
|
|
|
|
void LLVMDisposeSectionIterator(LLVMSectionIteratorRef SI) {
|
|
|
|
delete unwrap(SI);
|
|
|
|
}
|
|
|
|
|
|
|
|
LLVMBool LLVMIsSectionIteratorAtEnd(LLVMObjectFileRef ObjectFile,
|
|
|
|
LLVMSectionIteratorRef SI) {
|
|
|
|
return (*unwrap(SI) == unwrap(ObjectFile)->end_sections()) ? 1 : 0;
|
|
|
|
}
|
|
|
|
|
|
|
|
void LLVMMoveToNextSection(LLVMSectionIteratorRef SI) {
|
2011-06-26 01:55:23 +08:00
|
|
|
error_code ec;
|
|
|
|
unwrap(SI)->increment(ec);
|
|
|
|
if (ec) report_fatal_error("LLVMMoveToNextSection failed: " + ec.message());
|
2011-04-04 06:34:07 +08:00
|
|
|
}
|
|
|
|
|
|
|
|
const char *LLVMGetSectionName(LLVMSectionIteratorRef SI) {
|
2011-06-26 01:55:23 +08:00
|
|
|
StringRef ret;
|
|
|
|
if (error_code ec = (*unwrap(SI))->getName(ret))
|
|
|
|
report_fatal_error(ec.message());
|
|
|
|
return ret.data();
|
2011-04-04 06:34:07 +08:00
|
|
|
}
|
|
|
|
|
|
|
|
uint64_t LLVMGetSectionSize(LLVMSectionIteratorRef SI) {
|
2011-06-26 01:55:23 +08:00
|
|
|
uint64_t ret;
|
|
|
|
if (error_code ec = (*unwrap(SI))->getSize(ret))
|
|
|
|
report_fatal_error(ec.message());
|
|
|
|
return ret;
|
2011-04-04 06:34:07 +08:00
|
|
|
}
|
|
|
|
|
|
|
|
const char *LLVMGetSectionContents(LLVMSectionIteratorRef SI) {
|
2011-06-26 01:55:23 +08:00
|
|
|
StringRef ret;
|
|
|
|
if (error_code ec = (*unwrap(SI))->getContents(ret))
|
|
|
|
report_fatal_error(ec.message());
|
|
|
|
return ret.data();
|
2011-04-04 06:34:07 +08:00
|
|
|
}
|