Skip to content

Commit 5cbd836

Browse files
committed
---
yaml --- r: 1658 b: refs/heads/master c: b07634f h: refs/heads/master v: v3
1 parent 073c51a commit 5cbd836

File tree

3 files changed

+82
-4
lines changed

3 files changed

+82
-4
lines changed

[refs]

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,2 @@
11
---
2-
refs/heads/master: 400df70643820012edfdf4811c05a4ce72b82bfe
2+
refs/heads/master: b07634f212d7725040358815f08b575d930b4490

trunk/src/comp/lib/llvm.rs

+72
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,8 @@ import llvm.CallConv;
2222
import llvm.IntPredicate;
2323
import llvm.RealPredicate;
2424
import llvm.Opcode;
25+
import llvmext.ObjectFileRef;
26+
import llvmext.SectionIteratorRef;
2527

2628
type ULongLong = u64;
2729
type LongLong = i64;
@@ -735,6 +737,39 @@ native mod llvm = llvm_lib {
735737

736738
/** Adds a verification pass. */
737739
fn LLVMAddVerifierPass(PassManagerRef PM);
740+
741+
// TODO: LLVMCreateMemoryBufferWithContentsOfFile is unrepresentable. Make
742+
// a shim.
743+
/** Destroys the memory buffer. */
744+
fn LLVMDisposeMemoryBuffer(MemoryBufferRef MemBuf);
745+
}
746+
747+
native mod llvmext = llvmext_lib {
748+
type ObjectFileRef;
749+
type SectionIteratorRef;
750+
751+
/** Opens an object file. */
752+
fn LLVMCreateObjectFile(MemoryBufferRef MemBuf) -> ObjectFileRef;
753+
/** Closes an object file. */
754+
fn LLVMDisposeObjectFile(ObjectFileRef ObjectFile);
755+
756+
/** Enumerates the sections in an object file. */
757+
fn LLVMGetSections(ObjectFileRef ObjectFile) -> SectionIteratorRef;
758+
/** Destroys a section iterator. */
759+
fn LLVMDisposeSectionIterator(SectionIteratorRef SI);
760+
/** Returns true if the section iterator is at the end of the section
761+
list. */
762+
fn LLVMIsSectionIteratorAtEnd(ObjectFileRef ObjectFile,
763+
SectionIteratorRef SI) -> Bool;
764+
/** Moves the section iterator to point to the next section. */
765+
fn LLVMMoveToNextSection(SectionIteratorRef SI);
766+
/** Returns the current section name. */
767+
fn LLVMGetSectionName(SectionIteratorRef SI) -> sbuf;
768+
/** Returns the current section size.
769+
FIXME: The return value is actually a uint64_t! */
770+
fn LLVMGetSectionSize(SectionIteratorRef SI) -> uint;
771+
/** Returns the current section contents as a string buffer. */
772+
fn LLVMGetSectionContents(SectionIteratorRef SI) -> sbuf;
738773
}
739774

740775
/* Slightly more terse object-interface to LLVM's 'builder' functions. */
@@ -1339,6 +1374,43 @@ fn mk_pass_manager() -> pass_manager {
13391374
ret rec(llpm=llpm, dtor=pass_manager_dtor(llpm));
13401375
}
13411376

1377+
/* Memory-managed interface to memory buffers. */
1378+
1379+
obj memory_buffer_dtor(MemoryBufferRef MemBuf) {
1380+
drop { llvm.LLVMDisposeMemoryBuffer(MemBuf); }
1381+
}
1382+
1383+
type memory_buffer = rec(MemoryBufferRef llmb, memory_buffer_dtor dtor);
1384+
1385+
fn mk_memory_buffer() -> memory_buffer {
1386+
fail; // TODO
1387+
}
1388+
1389+
/* Memory-managed interface to object files. */
1390+
1391+
obj object_file_dtor(ObjectFileRef ObjectFile) {
1392+
drop { llvmext.LLVMDisposeObjectFile(ObjectFile); }
1393+
}
1394+
1395+
type object_file = rec(ObjectFileRef llof, object_file_dtor dtor);
1396+
1397+
fn mk_object_file(MemoryBufferRef llmb) -> object_file {
1398+
auto llof = llvmext.LLVMCreateObjectFile(llmb);
1399+
ret rec(llof=llof, dtor=object_file_dtor(llof));
1400+
}
1401+
1402+
/* Memory-managed interface to section iterators. */
1403+
1404+
obj section_iter_dtor(SectionIteratorRef SI) {
1405+
drop { llvmext.LLVMDisposeSectionIterator(SI); }
1406+
}
1407+
1408+
type section_iter = rec(SectionIteratorRef llsi, section_iter_dtor dtor);
1409+
1410+
fn mk_section_iter(ObjectFileRef llof) -> section_iter {
1411+
auto llsi = llvmext.LLVMGetSections(llof);
1412+
ret rec(llsi=llsi, dtor=section_iter_dtor(llsi));
1413+
}
13421414

13431415
//
13441416
// Local Variables:

trunk/src/comp/rustc.rc

+9-3
Original file line numberDiff line numberDiff line change
@@ -52,17 +52,23 @@ mod lib {
5252
alt (target_os) {
5353
case ("win32") {
5454
let (llvm_lib = "LLVM-3.0.dll") {
55-
mod llvm;
55+
let (llvmext_lib = "rustllvm.dll") {
56+
mod llvm;
57+
}
5658
}
5759
}
5860
case ("macos") {
5961
let (llvm_lib = "libLLVM-3.0svn.dylib") {
60-
mod llvm;
62+
let (llvmext_lib = "librustllvm.dylib") {
63+
mod llvm;
64+
}
6165
}
6266
}
6367
else {
6468
let (llvm_lib = "libLLVM-3.0svn.so") {
65-
mod llvm;
69+
let (llvmext_lib = "librustllvm.so") {
70+
mod llvm;
71+
}
6672
}
6773
}
6874
}

0 commit comments

Comments
 (0)