Closed
Description
Hi!
I need to get an exported symbol from a library inside a function. The following code works fine:
macOS
julia> libc = dlopen("libc")
Ptr{Nothing} @0x000000010ed40ff8
julia> cglobal(dlsym(libc,:atol))
Ptr{Nothing} @0x00007fff77b084ed
Linux
julia> libc = dlopen("libc.so.6")
Ptr{Nothing} @0x00007fa04fe803c0
julia> cglobal(dlsym(libc,:atol))
Ptr{Nothing} @0x00007fa04f73af70
However, if I put the very same code inside a function, then I get a segmentation fault:
macOS
julia> function teste()
libc = dlopen("libc")
cglobal( dlsym( libc, :sin), Cvoid )
end
teste (generic function with 1 method)
julia> teste()
signal (11): Segmentation fault: 11
in expression starting at REPL[2]:1
Linux
julia> using Libdl
julia> function teste()
libc = dlopen("libc.so.6")
cglobal(dlsym(libc,:atol))
end
teste (generic function with 1 method)
julia> teste()
signal (11): Falha de segmentação
in expression starting at REPL[3]:1
_ZNK4llvm5Value10getContextEv at /usr/bin/../lib64/julia/libLLVM-6.0.so (unknown line)
_ZN4llvm5Value11setNameImplERKNS_5TwineE at /usr/bin/../lib64/julia/libLLVM-6.0.so (unknown line)
_ZN4llvm5Value7setNameERKNS_5TwineE at /usr/bin/../lib64/julia/libLLVM-6.0.so (unknown line)
CreateLoad at /home/abuild/rpmbuild/BUILD/julia-1.2.0/usr/include/llvm/IR/IRBuilder.h:68
emit_varinfo at /home/abuild/rpmbuild/BUILD/julia-1.2.0/src/codegen.cpp:3516
emit_expr at /home/abuild/rpmbuild/BUILD/julia-1.2.0/src/codegen.cpp:3564
emit_call at /home/abuild/rpmbuild/BUILD/julia-1.2.0/src/codegen.cpp:3249
emit_expr at /home/abuild/rpmbuild/BUILD/julia-1.2.0/src/codegen.cpp:4029
interpret_symbol_arg at /home/abuild/rpmbuild/BUILD/julia-1.2.0/src/ccall.cpp:569
emit_cglobal at /home/abuild/rpmbuild/BUILD/julia-1.2.0/src/ccall.cpp:677 [inlined]
emit_intrinsic at /home/abuild/rpmbuild/BUILD/julia-1.2.0/src/intrinsics.cpp:877
emit_call at /home/abuild/rpmbuild/BUILD/julia-1.2.0/src/codegen.cpp:3243
emit_expr at /home/abuild/rpmbuild/BUILD/julia-1.2.0/src/codegen.cpp:4029
emit_ssaval_assign at /home/abuild/rpmbuild/BUILD/julia-1.2.0/src/codegen.cpp:3734
emit_function at /home/abuild/rpmbuild/BUILD/julia-1.2.0/src/codegen.cpp:3926
jl_compile_linfo at /home/abuild/rpmbuild/BUILD/julia-1.2.0/src/codegen.cpp:1196
jl_compile_method_internal at /home/abuild/rpmbuild/BUILD/julia-1.2.0/src/gf.c:1775
jl_apply_generic at /home/abuild/rpmbuild/BUILD/julia-1.2.0/src/gf.c:2196
do_call at /home/abuild/rpmbuild/BUILD/julia-1.2.0/src/interpreter.c:323
eval_value at /home/abuild/rpmbuild/BUILD/julia-1.2.0/src/interpreter.c:411
eval_stmt_value at /home/abuild/rpmbuild/BUILD/julia-1.2.0/src/interpreter.c:362 [inlined]
eval_body at /home/abuild/rpmbuild/BUILD/julia-1.2.0/src/interpreter.c:754
jl_interpret_toplevel_thunk_callback at /home/abuild/rpmbuild/BUILD/julia-1.2.0/src/interpreter.c:884
unknown function (ip: 0xfffffffffffffffe)
unknown function (ip: 0x7effd3c4d68f)
unknown function (ip: 0xffffffffffffffff)
jl_interpret_toplevel_thunk at /home/abuild/rpmbuild/BUILD/julia-1.2.0/src/interpreter.c:893
jl_toplevel_eval_flex at /home/abuild/rpmbuild/BUILD/julia-1.2.0/src/toplevel.c:815
jl_toplevel_eval_flex at /home/abuild/rpmbuild/BUILD/julia-1.2.0/src/toplevel.c:764
jl_toplevel_eval_in at /home/abuild/rpmbuild/BUILD/julia-1.2.0/src/toplevel.c:844
eval at ./boot.jl:330
eval_user_input at /home/abuild/rpmbuild/BUILD/julia-1.2.0/usr/share/julia/stdlib/v1.2/REPL/src/REPL.jl:86
macro expansion at /home/abuild/rpmbuild/BUILD/julia-1.2.0/usr/share/julia/stdlib/v1.2/REPL/src/REPL.jl:118 [inlined]
#26 at ./task.jl:268
jl_apply at /home/abuild/rpmbuild/BUILD/julia-1.2.0/src/julia.h:1614 [inlined]
start_task at /home/abuild/rpmbuild/BUILD/julia-1.2.0/src/task.c:596
unknown function (ip: 0xffffffffffffffff)
Allocations: 2334197 (Pool: 2333643; Big: 554); GC: 4
Falha de segmentação (imagem do núcleo gravada)
ronan.arraes@install:~/.julia/dev/TextUserInterfaces/src/ncurses>
Everything works if I declare libc
as global
. Is it expected?
Activity