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