[macruby-changes] [4140] MacRuby/trunk
source_changes at macosforge.org
source_changes at macosforge.org
Mon May 24 01:41:50 PDT 2010
Revision: 4140
http://trac.macosforge.org/projects/ruby/changeset/4140
Author: lsansonetti at apple.com
Date: 2010-05-24 01:41:48 -0700 (Mon, 24 May 2010)
Log Message:
-----------
make sure there is a null byte at end of the kernel bitcode since it's required by earlier versions of MemoryBuffer::getMemBuffer (patch by Thibault)
Modified Paths:
--------------
MacRuby/trunk/rakelib/builder.rake
MacRuby/trunk/vm.cpp
Modified: MacRuby/trunk/rakelib/builder.rake
===================================================================
--- MacRuby/trunk/rakelib/builder.rake 2010-05-24 05:12:10 UTC (rev 4139)
+++ MacRuby/trunk/rakelib/builder.rake 2010-05-24 08:41:48 UTC (rev 4140)
@@ -42,8 +42,12 @@
includes = CFLAGS.scan(/-I[^\s]+/).join(' ')
ARCHS.each do |x|
output = "kernel-#{x}.bc"
+ # Compile the IR for the kernel.c source file & optimize it.
sh "#{llvm_gcc} -arch #{x} -fexceptions #{includes} --emit-llvm -c kernel.c -o #{output}"
sh "#{opt} -O3 #{output} -o=#{output}"
+ # Convert the bitcode into a C static array. We append a null byte to the bitcode file because
+ # xxd doesn't, and it's needed by the bitcode reader later at runtime.
+ sh "/bin/dd if=/dev/zero count=1 bs=1 conv=notrunc >> #{output} 2>/dev/null"
sh "/usr/bin/xxd -i #{output} >> kernel_data.c"
sh "/bin/rm #{output}"
end
Modified: MacRuby/trunk/vm.cpp
===================================================================
--- MacRuby/trunk/vm.cpp 2010-05-24 05:12:10 UTC (rev 4139)
+++ MacRuby/trunk/vm.cpp 2010-05-24 08:41:48 UTC (rev 4140)
@@ -4621,14 +4621,16 @@
// To not corrupt stack pointer (essential for backtracing).
llvm::NoFramePointerElim = true;
+ // Retrieve the kernel bitcode for the right architecture. We substract
+ // 1 to the length because it's NULL terminated.
const char *kernel_beg;
const char *kernel_end;
#if __LP64__
kernel_beg = (const char *)kernel_x86_64_bc;
- kernel_end = kernel_beg + kernel_x86_64_bc_len;
+ kernel_end = kernel_beg + kernel_x86_64_bc_len - 1;
#else
kernel_beg = (const char *)kernel_i386_bc;
- kernel_end = kernel_beg + kernel_i386_bc_len;
+ kernel_end = kernel_beg + kernel_i386_bc_len - 1;
#endif
MemoryBuffer *mbuf = MemoryBuffer::getMemBuffer(kernel_beg, kernel_end);
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.macosforge.org/pipermail/macruby-changes/attachments/20100524/593c0133/attachment.html>
More information about the macruby-changes
mailing list