[graalvm-users] Trying to run pgbouncer on GraalVM/Sulong
Alvaro Hernandez
aht at ongres.com
Sat Jun 30 13:19:27 PDT 2018
Hi!
I'm experimenting with running C programs on GraalVM (via Sulong,
of course). I was trying to run pgbouncer (https://urldefense.proofpoint.com/v2/url?u=https-3A__pgbouncer.github.io_&d=DwIDaQ&c=RoP1YumCXCgaWHvlZYR8PZh8Bv7qIrMUB65eapI_JnE&r=CUkXBxBNT_D5N6HMJ5T9Z6rmvNKYsqupcbk72K0lcoQ&m=Gco5cPtfzG1KXkzFZMUjdOvz53gzbxvOhpXBb2y49D8&s=eVSVV9UdDIAoukIzhGBU-o8Xehp5evajYYa9iMvVW88&e=)
a PostgreSQL's connection pooler written in C.
Following indications from
https://urldefense.proofpoint.com/v2/url?u=http-3A__gbalats.github.io_2015_12_10_compiling-2Dautotooled-2Dprojects-2Dto-2DLLVM-2Dbitcode.html&d=DwIDaQ&c=RoP1YumCXCgaWHvlZYR8PZh8Bv7qIrMUB65eapI_JnE&r=CUkXBxBNT_D5N6HMJ5T9Z6rmvNKYsqupcbk72K0lcoQ&m=Gco5cPtfzG1KXkzFZMUjdOvz53gzbxvOhpXBb2y49D8&s=cZZKamlG5JPUfuURIAaIi5I6EYBVX-IGHvZ3ia_4Ni0&e=
I have been able to compile it to IR. More precisely, the steps taken
have been:
export CC=clang
export CXX=clang++
export RANLIB=llvm-ranlib-6.0
export CFLAGS=" -flto -std=gnu99 "
export LDFLAGS=" -flto -fuse-ld=gold -Wl,-plugin-opt=save-temps "
./configure --without-openssl
make
I'm using clang 6.0. Build is fine (I had problems when building
with SSL, so I disabled it, that's fine for now). pgbouncer starts OK
when I provided the linked libraries (in .so), but throws
RuntimeException when trying to establish a connection through the proxy:
graalvm-ce-1.0.0-rc2/bin/lli --lib
/usr/lib/x86_64-linux-gnu/libevent-2.0.so.5
/tmp/pgbouncer-1.8.1/pgbouncer.0.5.precodegen.bc
/tmp/pgbouncer-1.8.1/etc/pgbouncer.ini
2018-06-30 23:01:50.132 31696 LOG File descriptor limit: 65536
(H:65536), max_client_conn: 100, max fds possible: 190
2018-06-30 23:01:50.145 31696 LOG Stale pidfile, removing
2018-06-30 23:01:50.165 31696 LOG listening on 127.0.0.1:6432
2018-06-30 23:01:50.167 31696 LOG listening on unix:/tmp/.s.PGSQL.6432
2018-06-30 23:01:50.170 31696 LOG process up: pgbouncer 1.8.1, libevent
2.0.21-stable (epoll), adns: evdns2, tls: unsupported
2018-06-30 23:01:51.443 31696 LOG C-0x44e13e0: aht/aht at unix(31703):6432
login attempt: db=aht user=aht
tls=no <----- connection attempted
2018-06-30 23:01:51.464 31696 LOG S-0x44e68c0: aht/aht at unix:5432 new
connection to server
java.lang.RuntimeException: unknown syscall 318
RC1 provided more info:
graalvm-1.0.0-rc1/bin/lli --lib
/usr/lib/x86_64-linux-gnu/libevent-2.0.so.5
/tmp/pgbouncer-1.8.1/pgbouncer.0.5.precodegen.bc
/tmp/pgbouncer-1.8.1/etc/pgbouncer.ini
2018-06-30 23:02:35.600 31804 LOG File descriptor limit: 65536
(H:65536), max_client_conn: 100, max fds possible: 190
2018-06-30 23:02:35.617 31804 LOG Stale pidfile, removing
2018-06-30 23:02:35.648 31804 LOG listening on 127.0.0.1:6432
2018-06-30 23:02:35.654 31804 LOG listening on unix:/tmp/.s.PGSQL.6432
2018-06-30 23:02:35.659 31804 LOG process up: pgbouncer 1.8.1, libevent
2.0.21-stable (epoll), adns: evdns2, tls: unsupported
2018-06-30 23:02:36.784 31804 LOG C-0x4ac2bc0: aht/aht at unix(31811):6432
login attempt: db=aht user=aht tls=no
2018-06-30 23:02:36.805 31804 LOG S-0x4ac7b90: aht/aht at unix:5432 new
connection to server
com.oracle.truffle.llvm.runtime.SulongRuntimeException: RuntimeException
unknown syscall 318
C stack trace:
LLVM IR Function @getrandom in pgbouncer.0.5.precodegen.bc in
Block {id: 0 name: %2}
LLVM IR Function @getentropy_getrandom in
pgbouncer.0.5.precodegen.bc in Block {id: 1 name: %7}
LLVM IR Function @usual_getentropy in
pgbouncer.0.5.precodegen.bc in Block {id: 3 name: %17}
LLVM IR Function @impl_init.1436 in
pgbouncer.0.5.precodegen.bc in Block {id: 0 name: %0}
LLVM IR Function @prng_check_and_lock in
pgbouncer.0.5.precodegen.bc in Block {id: 3 name: %12}
LLVM IR Function @csrandom_bytes in
pgbouncer.0.5.precodegen.bc in Block {id: 0 name: %2}
LLVM IR Function @get_random_bytes in
pgbouncer.0.5.precodegen.bc in Block {id: 0 name: %2}
LLVM IR Function @welcome_client in
pgbouncer.0.5.precodegen.bc in Block {id: 4 name: %26}
LLVM IR Function @finish_client_login in
pgbouncer.0.5.precodegen.bc in Block {id: 13 name: %59}
LLVM IR Function @handle_client_startup in
pgbouncer.0.5.precodegen.bc in Block {id: 4 name: %37}
LLVM IR Function @client_proto in pgbouncer.0.5.precodegen.bc
in Block {id: 20 name: %96}
LLVM IR Function @sbuf_call_proto in
pgbouncer.0.5.precodegen.bc in Block {id: 8 name: %28}
LLVM IR Function @sbuf_process_pending in
pgbouncer.0.5.precodegen.bc in Block {id: 10 name: %36}
LLVM IR Function @sbuf_main_loop in
pgbouncer.0.5.precodegen.bc in Block {id: 25 name: %88}
LLVM IR Function @sbuf_continue in pgbouncer.0.5.precodegen.bc
in Block {id: 6 name: %17}
LLVM IR Function @activate_client in
pgbouncer.0.5.precodegen.bc in Block {id: 4 name: %27}
LLVM IR Function @reuse_on_release in
pgbouncer.0.5.precodegen.bc in Block {id: 1 name: %14}
LLVM IR Function @release_server in
pgbouncer.0.5.precodegen.bc in Block {id: 24 name: %103}
LLVM IR Function @handle_server_startup in
pgbouncer.0.5.precodegen.bc in Block {id: 39 name: %171}
LLVM IR Function @server_proto in pgbouncer.0.5.precodegen.bc
in Block {id: 20 name: %98}
LLVM IR Function @sbuf_call_proto in
pgbouncer.0.5.precodegen.bc in Block {id: 8 name: %28}
LLVM IR Function @sbuf_process_pending in
pgbouncer.0.5.precodegen.bc in Block {id: 10 name: %36}
LLVM IR Function @sbuf_main_loop in
pgbouncer.0.5.precodegen.bc in Block {id: 25 name: %88}
LLVM IR Function @sbuf_recv_cb in pgbouncer.0.5.precodegen.bc
in Block {id: 0 name: %3}
pgbouncer is dynamically linked to:
ldd /tmp/pgbouncer-1.8.1/pgbouncer
linux-vdso.so.1 => (0x00007ffcb05d9000)
libevent-2.0.so.5 =>
/usr/lib/x86_64-linux-gnu/libevent-2.0.so.5 (0x00007f682b70e000)
libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f682b344000)
libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0
(0x00007f682b127000)
/lib64/ld-linux-x86-64.so.2 (0x00007f682b954000)
Even though I understood it was not necessary, I tried adding --lib
to all the libraries above that are on the system path, but result is
still the same.
Any hint on how I can continue? I also tried using --lib with the
IR version of libevent, but that fails even before, while loading the IR
version of libevent:
org.graalvm.launcher.Launcher$AbortException
Caused by: org.graalvm.polyglot.PolyglotException:
java.lang.IllegalArgumentException: load
"/tmp/libevent-2.1.8-stable/.libs/libevent-2.1.so.6.0.2.0.5.precodegen.bc"
even though it is LLVM IR code:
file
/tmp/libevent-2.1.8-stable/.libs/libevent-2.1.so.6.0.2.0.5.precodegen.bc
/tmp/libevent-2.1.8-stable/.libs/libevent-2.1.so.6.0.2.0.5.precodegen.bc:
LLVM IR bitcode
I'm not C or IR expert. I understand getrandom function is somehow
missing, but I don't see who should be providing it. Ideas are much
appreciated! Thank you,
Álvaro
--
Alvaro Hernandez
-----------
OnGres
More information about the GraalVM-Users
mailing list