Object.cpp revision 224145
1221337Sdim//===- Object.cpp - C bindings to the object file library--------*- C++ -*-===// 2221337Sdim// 3221337Sdim// The LLVM Compiler Infrastructure 4221337Sdim// 5221337Sdim// This file is distributed under the University of Illinois Open Source 6221337Sdim// License. See LICENSE.TXT for details. 7221337Sdim// 8221337Sdim//===----------------------------------------------------------------------===// 9221337Sdim// 10221337Sdim// This file defines the C bindings to the file-format-independent object 11221337Sdim// library. 12221337Sdim// 13221337Sdim//===----------------------------------------------------------------------===// 14221337Sdim 15221337Sdim#include "llvm/Object/ObjectFile.h" 16221337Sdim#include "llvm-c/Object.h" 17221337Sdim 18221337Sdimusing namespace llvm; 19221337Sdimusing namespace object; 20221337Sdim 21221337SdimLLVMObjectFileRef LLVMCreateObjectFile(LLVMMemoryBufferRef MemBuf) { 22221337Sdim return wrap(ObjectFile::createObjectFile(unwrap(MemBuf))); 23221337Sdim} 24221337Sdim 25221337Sdimvoid LLVMDisposeObjectFile(LLVMObjectFileRef ObjectFile) { 26221337Sdim delete unwrap(ObjectFile); 27221337Sdim} 28221337Sdim 29221337SdimLLVMSectionIteratorRef LLVMGetSections(LLVMObjectFileRef ObjectFile) { 30221337Sdim ObjectFile::section_iterator SI = unwrap(ObjectFile)->begin_sections(); 31221337Sdim return wrap(new ObjectFile::section_iterator(SI)); 32221337Sdim} 33221337Sdim 34221337Sdimvoid LLVMDisposeSectionIterator(LLVMSectionIteratorRef SI) { 35221337Sdim delete unwrap(SI); 36221337Sdim} 37221337Sdim 38221337SdimLLVMBool LLVMIsSectionIteratorAtEnd(LLVMObjectFileRef ObjectFile, 39221337Sdim LLVMSectionIteratorRef SI) { 40221337Sdim return (*unwrap(SI) == unwrap(ObjectFile)->end_sections()) ? 1 : 0; 41221337Sdim} 42221337Sdim 43221337Sdimvoid LLVMMoveToNextSection(LLVMSectionIteratorRef SI) { 44224145Sdim error_code ec; 45224145Sdim unwrap(SI)->increment(ec); 46224145Sdim if (ec) report_fatal_error("LLVMMoveToNextSection failed: " + ec.message()); 47221337Sdim} 48221337Sdim 49221337Sdimconst char *LLVMGetSectionName(LLVMSectionIteratorRef SI) { 50224145Sdim StringRef ret; 51224145Sdim if (error_code ec = (*unwrap(SI))->getName(ret)) 52224145Sdim report_fatal_error(ec.message()); 53224145Sdim return ret.data(); 54221337Sdim} 55221337Sdim 56221337Sdimuint64_t LLVMGetSectionSize(LLVMSectionIteratorRef SI) { 57224145Sdim uint64_t ret; 58224145Sdim if (error_code ec = (*unwrap(SI))->getSize(ret)) 59224145Sdim report_fatal_error(ec.message()); 60224145Sdim return ret; 61221337Sdim} 62221337Sdim 63221337Sdimconst char *LLVMGetSectionContents(LLVMSectionIteratorRef SI) { 64224145Sdim StringRef ret; 65224145Sdim if (error_code ec = (*unwrap(SI))->getContents(ret)) 66224145Sdim report_fatal_error(ec.message()); 67224145Sdim return ret.data(); 68221337Sdim} 69