apache / apache/arrow-java

[JNI][Gandiva] LLVM generated code can't access some system functions on certain platforms

Open
#657 0 comments 0 reactions 0 assignees View on GitHub
Type: bug
Dominant language
Java
Stars
94
Forks
152
Avg merge
3d 16h
Merged PRs (30d)
11

Description

### Describe the bug, including details regarding any error messages, version, and platform.

When linux loads libraries there are different options for symbols visibility like: RTLD_LOCAL, RTLD_GLOBAL. Default in Java is RTLD_LOCAL which makes all symbols inside Gandiva library only visible to the Gandiva library.

The problem is when LLVM compiles code and loads it into Java process that code won't be able to find any symbols imported by Gandiva. One example is 'sinhl' from libgcc which causes sinh function to fail when it is present in SQL query executed by Dremio using Gandiva engine. By importing JNA package we can control how to load Gandiva library and set Global symbol visibility.

See also: https://github.com/apache/arrow/issues/40839

Contributor guide

Open the contributing guide

Research direction

Start with the JNI/Gandiva library-loading path and the Java default RTLD_LOCAL behavior described in the issue; compare it with the JNA approach and the related Apache Arrow issue. Reproduce the sinh failure involving sinhl on an affected Linux platform, then verify that LLVM-generated code can resolve Gandiva's imported system symbols.

Written by the indexing model from the issue text.

Assessment

Tech stack
java
Domain
backend
Issue type
Bug
Difficulty
4/5
Estimated time
3-5 days
Activity status
Stale
Clarity
Mostly clear
Newbie friendliness
35/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.