Home | History | Annotate | Download | only in Object
      1 //===- Object.cpp - C bindings to the object file library--------*- C++ -*-===//
      2 //
      3 //                     The LLVM Compiler Infrastructure
      4 //
      5 // This file is distributed under the University of Illinois Open Source
      6 // License. See LICENSE.TXT for details.
      7 //
      8 //===----------------------------------------------------------------------===//
      9 //
     10 // This file defines the C bindings to the file-format-independent object
     11 // library.
     12 //
     13 //===----------------------------------------------------------------------===//
     14 
     15 #include "llvm/Object/ObjectFile.h"
     16 #include "llvm-c/Object.h"
     17 
     18 using namespace llvm;
     19 using namespace object;
     20 
     21 LLVMObjectFileRef LLVMCreateObjectFile(LLVMMemoryBufferRef MemBuf) {
     22   return wrap(ObjectFile::createObjectFile(unwrap(MemBuf)));
     23 }
     24 
     25 void LLVMDisposeObjectFile(LLVMObjectFileRef ObjectFile) {
     26   delete unwrap(ObjectFile);
     27 }
     28 
     29 LLVMSectionIteratorRef LLVMGetSections(LLVMObjectFileRef ObjectFile) {
     30   section_iterator SI = unwrap(ObjectFile)->begin_sections();
     31   return wrap(new section_iterator(SI));
     32 }
     33 
     34 void LLVMDisposeSectionIterator(LLVMSectionIteratorRef SI) {
     35   delete unwrap(SI);
     36 }
     37 
     38 LLVMBool LLVMIsSectionIteratorAtEnd(LLVMObjectFileRef ObjectFile,
     39                                 LLVMSectionIteratorRef SI) {
     40   return (*unwrap(SI) == unwrap(ObjectFile)->end_sections()) ? 1 : 0;
     41 }
     42 
     43 void LLVMMoveToNextSection(LLVMSectionIteratorRef SI) {
     44   error_code ec;
     45   unwrap(SI)->increment(ec);
     46   if (ec) report_fatal_error("LLVMMoveToNextSection failed: " + ec.message());
     47 }
     48 
     49 const char *LLVMGetSectionName(LLVMSectionIteratorRef SI) {
     50   StringRef ret;
     51   if (error_code ec = (*unwrap(SI))->getName(ret))
     52    report_fatal_error(ec.message());
     53   return ret.data();
     54 }
     55 
     56 uint64_t LLVMGetSectionSize(LLVMSectionIteratorRef SI) {
     57   uint64_t ret;
     58   if (error_code ec = (*unwrap(SI))->getSize(ret))
     59     report_fatal_error(ec.message());
     60   return ret;
     61 }
     62 
     63 const char *LLVMGetSectionContents(LLVMSectionIteratorRef SI) {
     64   StringRef ret;
     65   if (error_code ec = (*unwrap(SI))->getContents(ret))
     66     report_fatal_error(ec.message());
     67   return ret.data();
     68 }
     69