cat usr.manifest /usr/lib/jvm/java-8-openjdk-amd64/jre/**: /usr/lib/jvm/java-8-openjdk-amd64/jre/**/usr/lib/libjli.so: -> /usr/lib/jvm/java-8-openjdk-amd64/jre/lib/amd64/jli/libjli.so/Hello.class: ${MODULE_DIR}/Hello.class(gdb) bt#0 sched::thread::switch_to (this=0xffff800000aa7040, this@entry=0xffff800001e73040) at arch/x64/arch-switch.hh:108#1 0x00000000003fd104 in sched::cpu::reschedule_from_interrupt (this=0xffff80000096b040, called_from_yield=called_from_yield@entry=false, preempt_after=..., preempt_after@entry=...) at core/sched.cc:339#2 0x00000000003fd5fc in sched::cpu::schedule () at include/osv/sched.hh:1309#3 0x00000000003fdd22 in sched::thread::wait (this=this@entry=0xffff800002f87040) at core/sched.cc:1214#4 0x00000000003e096f in sched::thread::do_wait_until<sched::noninterruptible, sched::thread::dummy_lock, waiter::wait(sched::timer*) const::{lambda()#1}>(sched::thread::dummy_lock&, waiter::wait(sched::timer*) const::{lambda()#1}) (pred=..., mtx=<synthetic pointer>...) at include/osv/sched.hh:938#5 sched::thread::wait_until<waiter::wait(sched::timer*) const::{lambda()#1}>(waiter::wait(sched::timer*) const::{lambda()#1}) (pred=...) at include/osv/sched.hh:1076#6 waiter::wait (tmr=0x0, this=0x2000105ce670) at include/osv/wait_record.hh:46#7 condvar::wait (this=0xffffa00002c61280, user_mutex=0xffffa00002c5b140, tmr=<optimized out>) at core/condvar.cc:43#8 0x0000100000c9842b in SharedRuntime::generate_native_wrapper(MacroAssembler*, methodHandle, int, BasicType*, VMRegPair*, BasicType) ()#9 0x0000100000c8036d in SharedRuntime::throw_StackOverflowError(JavaThread*) ()#10 0x0000000000000000 in ?? ()@@ -1149,6 +1150,9 @@ std::shared_ptr<elf::object> program::load_object(std::string name, std::vector<std::string> extra_path, std::vector<std::shared_ptr<object>> &loaded_objects) {+ if( name == "libjli.so" ) {+ name = "/usr/lib/jvm/java-8-openjdk-amd64/jre/lib/amd64/jli/libjli.so";+ } fileref f;/usr/lib/jvm/java-8-openjdk-amd64/jre/bin/java: failed looking up symbol JLI_Launch
[backtrace]0x000000000035cb8d <elf::object::symbol(unsigned int, bool)+1325>0x000000000035cc4f <elf::object::resolve_pltgot(unsigned int)+127>0x000000000035ce29 <elf_resolve_pltgot+57>0x00000000003a2d1f <???+3812639>0x00002000001ffe9f <???+2096799>0x000000000042e97c <osv::application::run_main()+60>0x000000000042eaae <__libc_start_main+46>0x00001000000060c9 <???+24777>As I was researching OSv ability to run unmodified Linux pie as is from host I did quick experiment with Java 8.I created an app that took all java 8 artifacts as is from host (so no wrapper):and I was able to run it with two caveatscat usr.manifest/usr/lib/jvm/java-8-openjdk-amd64/jre/**: /usr/lib/jvm/java-8-openjdk-amd64/jre/**/usr/lib/libjli.so: -> /usr/lib/jvm/java-8-openjdk-amd64/jre/lib/amd64/jli/libjli.so/Hello.class: ${MODULE_DIR}/Hello.class1. After executing java apps OSv did not terminate and after I connected with gdb and some Java threads were stuck like this:(gdb) bt#0 sched::thread::switch_to (this=0xffff800000aa7040, this@entry=0xffff800001e73040) at arch/x64/arch-switch.hh:108#1 0x00000000003fd104 in sched::cpu::reschedule_from_interrupt (this=0xffff80000096b040,called_from_yield=called_from_yield@entry=false, preempt_after=..., preempt_after@entry=...) at core/sched.cc:339#2 0x00000000003fd5fc in sched::cpu::schedule () at include/osv/sched.hh:1309#3 0x00000000003fdd22 in sched::thread::wait (this=this@entry=0xffff800002f87040) at core/sched.cc:1214#4 0x00000000003e096f in sched::thread::do_wait_until<sched::noninterruptible, sched::thread::dummy_lock, waiter::wait(sched::timer*) const::{lambda()#1}>(sched::thread::dummy_lock&, waiter::wait(sched::timer*) const::{lambda()#1}) (pred=...,mtx=<synthetic pointer>...) at include/osv/sched.hh:938#5 sched::thread::wait_until<waiter::wait(sched::timer*) const::{lambda()#1}>(waiter::wait(sched::timer*) const::{lambda()#1}) (pred=...) at include/osv/sched.hh:1076#6 waiter::wait (tmr=0x0, this=0x2000105ce670) at include/osv/wait_record.hh:46#7 condvar::wait (this=0xffffa00002c61280, user_mutex=0xffffa00002c5b140, tmr=<optimized out>) at core/condvar.cc:43#8 0x0000100000c9842b in SharedRuntime::generate_native_wrapper(MacroAssembler*, methodHandle, int, BasicType*, VMRegPair*, BasicType) ()#9 0x0000100000c8036d in SharedRuntime::throw_StackOverflowError(JavaThread*) ()#10 0x0000000000000000 in ?? ()I wonder if that is similar to why we have special logic to terminate all java threads in wrapper (java.cc). Ctrl-C does not work.
2. I believe there is a bug in elf.cc::program::load_object() where I had to hack it to force finding and loading one of the shared object java pie executable depended on (all other so loaded fine). There may be actually 2 bugs:
- there is a bug that prevents loading libjli.so by java pie; adding this nasty hack worked:
@@ -1149,6 +1150,9 @@ std::shared_ptr<elf::object>program::load_object(std::string name, std::vector<std::string> extra_path,std::vector<std::shared_ptr<object>> &loaded_objects){+ if( name == "libjli.so" ) {+ name = "/usr/lib/jvm/java-8-openjdk-amd64/jre/lib/amd64/jli/libjli.so";+ }fileref f;
- there is a bug that silently ignores the fact that shared file has not been loaded and ends up OSv report this:
/usr/lib/jvm/java-8-openjdk-amd64/jre/bin/java: failed looking up symbol JLI_Launch[backtrace]0x000000000035cb8d <elf::object::symbol(unsigned int, bool)+1325>0x000000000035cc4f <elf::object::resolve_pltgot(unsigned int)+127>0x000000000035ce29 <elf_resolve_pltgot+57>0x00000000003a2d1f <???+3812639>0x00002000001ffe9f <???+2096799>0x000000000042e97c <osv::application::run_main()+60>0x000000000042eaae <__libc_start_main+46>0x00001000000060c9 <???+24777>I also ran more complicated examples like vertx REST service one and it worked perfectly.Waldek
--
You received this message because you are subscribed to the Google Groups "OSv Development" group.
To unsubscribe from this group and stop receiving emails from it, send an email to osv-dev+u...@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.
/scripts/run.py -e '/usr/lib/jvm/jdk-zulu11.31.11-ca-jdk11.0.3-linux_x64-java-base/bin/java --version'
/scripts/run.py -e '/java --version'
Dynamic section at offset 0x1018 contains 30 entries: Tag Type Name/Value 0x0000000000000001 (NEEDED) Shared library: [libz.so.1] 0x0000000000000001 (NEEDED) Shared library: [libpthread.so.0] 0x0000000000000001 (NEEDED) Shared library: [libjli.so] 0x0000000000000001 (NEEDED) Shared library: [libdl.so.2] 0x0000000000000001 (NEEDED) Shared library: [libc.so.6] 0x000000000000000f (RPATH) Library rpath: [$ORIGIN/../lib/jli:$ORIGIN/../lib] .../usr/lib/jvm/jdk-zulu11.31.11-ca-jdk11.0.3-linux_x64-java-base/lib/jli/libjli.so
/usr/lib/jvm/jdk-zulu11.31.11-ca-jdk11.0.3-linux_x64-java-base/bin/java
/java -> /usr/lib/jvm/jdk-zulu11.31.11-ca-jdk11.0.3-linux_x64-java-base/bin/javaTo unsubscribe from this group and stop receiving emails from it, send an email to osv-dev+u...@googlegroups.com.
To view this discussion on the web visit https://groups.google.com/d/msgid/osv-dev/d768b6be-ffa2-4391-abeb-6b558493e299%40googlegroups.com.