Skip to content

Segmentation fault when calling cglobal inside a function #33413

Closed
@ronisbr

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

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Assignees

No one assigned

    Labels

    compiler:codegenGeneration of LLVM IR and native code

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions