[LLVMdev] How to run vmjc created .bc files?
Michael Wu
mmwu at princeton.edu
Tue Dec 8 21:01:37 PST 2009
I am using GNU classpath 0.97.2 as provided by Ubuntu.
Michael
Michael Wu wrote:
> Hi,
>
> I've managed to compile it the class down to a native executable.
> However, the executable runs for a while then spits out:
>
> terminate called without an active exception
> Aborted
>
> and dies.
>
> The program never gets to the normal output.
>
> Here is a stack trace from gdb:
>
> #0 0xf3f6baa6 in raise () from /lib/libc.so.6
> #1 0xf3f6d3a8 in abort () from /lib/libc.so.6
> #2 0xf41918f8 in __gnu_cxx::__verbose_terminate_handler () from
> /usr/lib/libstdc++.so.6
> #3 0xf418f7d5 in ?? () from /usr/lib/libstdc++.so.6
> #4 0xf418f812 in std::terminate () from /usr/lib/libstdc++.so.6
> #5 0xf418f94a in __cxa_throw () from /usr/lib/libstdc++.so.6
> #6 0x0806d4d0 in jnjvm::JavaThread::throwPendingException ()
> #7 0x0808c118 in jnjvm::JavaMethod::invokeJavaObjectStaticAP ()
> #8 0x0808c2ba in jnjvm::JavaMethod::invokeJavaObjectStatic ()
> #9 0x0806e3a0 in jnjvm::Jnjvm::loadAppClassLoader ()
> #10 0x08072488 in jnjvm::Jnjvm::loadBootstrap ()
> #11 0x080725e5 in jnjvm::Jnjvm::mainJavaStart ()
> #12 0x080b2556 in mvm::Thread::internalThreadStart ()
> #13 0xf408dfc0 in start_thread () from /lib/libpthread.so.0
> #14 0xf4011e7e in clone () from /lib/libc.so.6
>
> The java file itself is very simple:
>
> public class NumProcs {
>
> /**
> * Displays the number of processors available in the Java Virtual
> Machine
> */
> public static void main(String[] args) {
> Runtime runtime = Runtime.getRuntime();
>
> int nrOfProcessors = runtime.availableProcessors();
>
> System.out.println("Number of processors available to the Java
> Virtual Machine: " + nrOfProcessors);
> }
> }
>
> I just updated to the latest revision in svn.
>
> Michael
>
> nicolas geoffray wrote:
>
>> Hi Michael,
>>
>>
>> On Tue, Dec 8, 2009 at 6:26 PM, Michael Wu <mmwu at princeton.edu
>> <mailto:mmwu at princeton.edu>> wrote:
>>
>> Hi,
>>
>> Thanks a lot for the help! I am getting some errors though:
>>
>> I am on a 32 bit chroot on a x86_64 system. Thus llc guesses the
>> wrong architecture from the module bitcode and spits out x86_64
>> assembly. I fixed this by adding "-march=x86" to the llc options
>> in llcj.
>>
>>
>> OK.
>>
>>
>>
>> gcc doesn't know what -lgc is. I'm guessing it is the garbage
>> collection library. How can I get it or point gcc to the right
>> library?
>>
>>
>> -lgc is for the boehmgc in case you configured vmkit to use it. Since
>> you don't need it (vmkit uses its own gc by default), you should
>> change the tools/llcj/llcj.cpp file, remove the line with "-lgc" and
>> recompile it. Yes, it's _that_ of a new feature yet :)
>>
>>
>> llcj -mem2reg MemberVar.class
>> /usr/bin/ld: cannot find -lgc
>>
>> collect2: ld returned 1 exit status
>>
>> If I have class files that depends on other class files, will llcj
>> be able to find those and compile them into the executable as well?
>>
>>
>> No, but you can create a big .jar file containing all the class files
>> you need.
>>
>>
>> Also, I have an addition to the Java standard library backported
>> from Java 7, which is necessary for my project. JSR166:
>> http://gee.cs.oswego.edu/dl/concurrency-interest/
>>
>>
>> Add it to the big .jar file.
>>
>>
>> Of course, I'm not sure JnJvm supports multiple cores, but this is
>> more a proof of concept than anything.
>>
>>
>> OK, if it has native functions, chances are jnjvm does not implement them.
>>
>>
>> Should I just insert the necessary classes into glibj.zip and
>> recompile libvmjc.so?
>>
>>
>> You can do that, or just insert them to your .jar file.
>>
>> Cheers,
>> Nicolas
>>
>>
>> Thanks,
>> Michael
>>
>> nicolas geoffray wrote:
>>
>> Hi Michael,
>>
>> Currently, you can run vmjc created .bc files by statically
>> linking them with all the .o needed files. For that, you can
>> use the llcj tool, which works more or less like GCC's gcj tool.
>>
>> Note that you also need to create the libvmjc.so file, which
>> contains the standard library in native form. Do a make in the
>> tools/vmjc/libvmjc directory. Once this is done, update the
>> LD_LIBRARY_PATH shell variable to contain this file, and
>> update PATH to contain the llvm tools and the vmkit tools. You
>> will then be able to use llcj.
>>
>> Let me know if that helped. I will write a more detailed howto
>> on vmkit's website in a few days.
>>
>> Nicolas
>>
>> On Sun, Dec 6, 2009 at 10:07 PM, Michael Wu
>> <mmwu at princeton.edu <mailto:mmwu at princeton.edu>
>> <mailto:mmwu at princeton.edu <mailto:mmwu at princeton.edu>>> wrote:
>>
>> Hi,
>>
>> What do I need to link with vmjc created .bc files to
>> actually run
>> the .bc file? I tried running with lli but only got:
>> LLVM ERROR: Program used external function
>> 'StartJnjvmWithoutJIT'
>> which
>> could not be resolved!
>>
>> Thanks,
>> Michael
>> _______________________________________________
>> LLVM Developers mailing list
>> LLVMdev at cs.uiuc.edu <mailto:LLVMdev at cs.uiuc.edu>
>> <mailto:LLVMdev at cs.uiuc.edu <mailto:LLVMdev at cs.uiuc.edu>>
>> http://llvm.cs.uiuc.edu
>>
>> http://lists.cs.uiuc.edu/mailman/listinfo/llvmdev
>>
>>
>>
>>
> _______________________________________________
> LLVM Developers mailing list
> LLVMdev at cs.uiuc.edu http://llvm.cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/llvmdev
>
More information about the llvm-dev
mailing list