Fantom's tester holds two copies of jsi, libjsi.so and the one Hermes's host build compiles into libhermesvm.so (ASan: odr-violation)
Maintainer thường phản hồi trong vòng 2 ngày
Chưa có ai nhận issue này.
Đánh giá
- Độ khó
- 3/5
- Thời gian dự kiến
- 1-2 ngày
- Mức phù hợp với người mới
- 55/100
- Loại issue
- Lỗi
- Độ rõ ràng
- Khá rõ ràng
- Mức độ hoạt động
- Sôi nổi
- Công nghệ
- cmake, cpp, docker, react-native
- Lĩnh vực
- build-system
Hướng nghiên cứu
Start from hermes-engine/build.gradle.kts and configureBuildForHermesCommandLineArgs, which should pass -DHERMES_BUILD_SHARED_JSI=True for host build like Android. Reproduce via ./fantom/reproduce.sh asan-jsi-twice in the Docker reproducer. Done means the tester runs under ASan without the odr-violation on jsi globals.
Do mô hình lập chỉ mục viết ra từ nội dung của issue.
Mô tả
Description
Fantom's tester links React Native's jsi target (ReactCommon/jsi, a shared library) and libhermesvm.so. Hermes's host build, configureBuildForHermesCommandLineArgs in hermes-engine/build.gradle.kts, passes no HERMES_BUILD_SHARED_JSI, so Hermes compiles jsi.cpp from the same JSI_DIR into libhermesvm.so and exports it, and the tester's process holds two copies of jsi's code and globals. The Android build passes -DHERMES_BUILD_SHARED_JSI=True and links one shared jsi.
Built with Hermes and the tester under AddressSanitizer, the tester stops before its first test on an odr-violation for jsi's globals, defined once in libhermesvm.so and once in the tester's libjsi.so.
Steps to reproduce
git clone https://github.com/YevheniiKotyrlo/react-native-fantom-reproducer && cd react-native-fantom-reproducer./fantom/reproduce.sh asan-jsi-twice(needs Docker). It clonesreact/react-nativeatmain, addsfolly/memory/SanitizeLeak.cppto the tester's folly (#59668), builds Hermes and the tester under AddressSanitizer, and runspackages/react-native/Libraries/Components/View/__tests__/View-itest.js.
The same on a checkout of main, with folly/memory/SanitizeLeak.cpp added to folly_runtime_SRC in private/react-native-fantom/tester/third-party/folly/CMakeLists.txt:
export CFLAGS="-fsanitize=address -fno-omit-frame-pointer"
export CXXFLAGS="-fsanitize=address -fno-omit-frame-pointer -Wno-error=deprecated-literal-operator"
export LDFLAGS="-fuse-ld=lld -fsanitize=address"
yarn workspace @react-native/fantom build
yarn fantom packages/react-native/Libraries/Components/View/__tests__/View-itest.js
The flags reach Hermes's CMake as well as the tester's, so both are instrumented.
Expected: one copy of jsi in the tester's process, so View-itest.js runs its tests under AddressSanitizer.
Seen: the tester stops before its first test on an AddressSanitizer odr-violation for typeinfo name for facebook::jsi::JSError, defined in both libhermesvm.so and the tester's libjsi.so (the log under Stacktrace or Logs).
React Native Version
0.88.0 (reproduced on main at 54905a2)
Affected Platforms
Build - Linux
Output of npx @react-native-community/cli info
System:
OS: Linux 6.18 Ubuntu 22.04.5 LTS 22.04.5 LTS (Jammy Jellyfish)
CPU: (24) x64 AMD Ryzen 9 9950X3D 16-Core Processor
Memory: 116.43 GB / 125.63 GB
Shell:
version: 5.1.16
path: /bin/bash
Binaries:
Node:
version: 22.14.0
path: /usr/local/bin/node
Yarn:
version: 1.22.22
path: /usr/local/bin/yarn
npm:
version: 10.9.2
path: /usr/local/bin/npm
Watchman: Not Found
SDKs:
Android SDK:
API Levels:
- "37"
Build Tools:
- 37.0.0
Android NDK: 28.2.13676358
IDEs:
Android Studio: Not Found
Languages:
Java:
version: 17.0.20.1
path: /usr/bin/javac
Ruby:
version: 3.0.2
path: /usr/bin/ruby
npmPackages:
"@react-native-community/cli": Not Found
react: Not Found
react-native: Not Found
npmGlobalPackages:
"*react-native*": Not Found
Android:
hermesEnabled: Not found
newArchEnabled: Not found
iOS:
hermesEnabled: Not found
newArchEnabled: Not found
Stacktrace or Logs
==7959==ERROR: AddressSanitizer: odr-violation (0x75bdfd4d9a40):
[1] size=24 'typeinfo name for facebook::jsi::JSError' /react-native/packages/react-native/ReactCommon/jsi/jsi/jsi.cpp in /react-native/packages/react-native/ReactAndroid/hermes-engine/build/hermes/lib/libhermesvm.so
[2] size=24 'typeinfo name for facebook::jsi::JSError' /react-native/packages/react-native/ReactCommon/jsi/jsi/jsi.cpp in /react-native/private/react-native-fantom/build/tester/ReactCommon/jsi/libjsi.so
These globals were registered at these points:
[1]:
#0 0x5784ae158509 in __asan_register_globals /home/runner/work/llvm-project/llvm-project/compiler-rt/lib/asan/asan_globals.cpp:431:3
#1 0x5784ae159639 in __asan_register_elf_globals /home/runner/work/llvm-project/llvm-project/compiler-rt/lib/asan/asan_globals.cpp:414:3
#2 0x75bdfdefe47d (/lib64/ld-linux-x86-64.so.2+0x647d) (BuildId: e6d3f5d4f2a24a5464ab59ae321b9474d70410f8)
[2]:
#0 0x5784ae158509 in __asan_register_globals /home/runner/work/llvm-project/llvm-project/compiler-rt/lib/asan/asan_globals.cpp:431:3
#1 0x5784ae159639 in __asan_register_elf_globals /home/runner/work/llvm-project/llvm-project/compiler-rt/lib/asan/asan_globals.cpp:414:3
#2 0x75bdfdefe47d (/lib64/ld-linux-x86-64.so.2+0x647d) (BuildId: e6d3f5d4f2a24a5464ab59ae321b9474d70410f8)
==7959==HINT: if you don't care about these errors you may set ASAN_OPTIONS=detect_odr_violation=0
SUMMARY: AddressSanitizer: odr-violation: global 'typeinfo name for facebook::jsi::JSError' at /react-native/packages/react-native/ReactCommon/jsi/jsi/jsi.cpp in /react-native/packages/react-native/ReactAndroid/hermes-engine/build/hermes/lib/libhermesvm.so
MANDATORY Reproducer
https://github.com/YevheniiKotyrlo/react-native-fantom-reproducer
Screenshots and Videos
No response
- Ngôn ngữ chính
- C++
- Star
- 127k
- Fork
- 25.5k
- Merge trung bình
- 3 ngày 18 giờ
- Pull request đã merge (30 ngày)
- 188
Chuẩn bị môi trường
- Không có Dockerfile hay tệp Docker Compose
- Có mẫu pull request
- Đọc hướng dẫn đóng góp
Bắt đầu từ đâu
- Đọc hết issue, rồi đọc hướng dẫn đóng góp của dự án.
- Bình luận trên issue rằng bạn sẽ nhận — tránh hai người làm cùng một việc.
- Fork repository và làm thay đổi trên một nhánh.
- Mở pull request có tham chiếu số hiệu của issue.
Issue khác của react/react-native
-
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 76/100
react/react-native#59945 ·
Maintainer thường phản hồi trong vòng 2 ngày
-
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 82/100
react/react-native#59944 ·
Maintainer thường phản hồi trong vòng 2 ngày
-
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 78/100
react/react-native#59942 ·
Maintainer thường phản hồi trong vòng 2 ngày
-
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 76/100
react/react-native#59939 ·
Maintainer thường phản hồi trong vòng 2 ngày
-
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 78/100
react/react-native#59929 · 1 bình luận ·
Maintainer thường phản hồi trong vòng 2 ngày
Tất cả issue của react/react-native
Issue tương tự
-
test(tools): two testkit cache tests fail unless GOCACHE and GOMODCACHE are in the environmentĐang mởbacklog
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 78/100
EchoTools/nevr-runtime#2385 ·
Maintainer thường phản hồi trong vòng 1 ngày
-
type:bug
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 65/100
tensorflow/tflite-micro#3995 ·
Maintainer thường phản hồi trong vòng 1 ngày
-
CPU update 1.31xĐang mởspeed-report
Độ khó 1/5 Dưới một giờ Mức phù hợp với người mới 75/100
mw00/project-maya#961 · 1 bình luận ·
Maintainer thường phản hồi trong vòng 1 ngày
-
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 78/100
-
not for AI lovers
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 76/100
OSGeo/gdal#15515 · 1 bình luận ·
Maintainer thường phản hồi trong vòng 1 ngày