App crashes on first open (libc.so, libjsc.so)

Please provide the following:

  1. SDK Version: 44.0.0
  2. Platforms(Android/iOS/web/all): Android
  3. Add the appropriate “Tag” based on what Expo library you have a question on.

We were trying to investigate a “libc.so” crash on firebase crashlytics, but so far nothing has helped.

Problem:
app immediately crashes on first launch, works second launch onwards

I’ve been able to reproduce the issue a few times on the android simulator, and capture logcat output. The (seemingly) significant bit in the logs looks like so:

[15:23:50] F | libc ▶︎ Fatal signal 4 (SIGILL), code 1 (ILL_ILLOPC), fault addr 0x7a1c095de0 in tid 24002 (mqt_js), pid 23857 (pp.android)
[15:23:50] F | DEBUG ▶︎ Process uptime: 6s
                     │ Cmdline: com.example.app.android
                     │ pid: 23857, tid: 24002, name: mqt_js  >>> com.example.app.android <<<
                     │ uid: 10168
                     │ tagged_addr_ctrl: 0000000000000001 (PR_TAGGED_ADDR_ENABLE)
                     │ pac_enabled_keys: 0000000000000000
                     │ signal 4 (SIGILL), code 1 (ILL_ILLOPC), fault addr 0x0000007a1c095de0
                     │ x0  00000079fdaea2e4  x1  0000000000000000  x2  000000000000000f  x3  00000079f4cef758
                     │ x4  0000000000000000  x5  0000000000000000  x6  910103ff17ffffa5  x7  5280000192800000
                     │ x8  0000007a1c095de0  x9  000000000000000c  x10 0000000000000001  x11 0000000000000001
                     │ x12 0000007a1c096000  x13 910103ff17ffffa5  x14 000000009ce0e9df  x15 0000000000000001
                     │ x16 0000007a5bf120c0  x17 0000007d9a02a690  x18 0000000000000084  x19 00000079f29e4000
                     │ x20 0000000000000000  x21 0000007a05c26970  x22 0000007a05c30500  x23 0000000000000000
                     │ x24 00000079f6b00000  x25 0000000000000000  x26 00000079f4cef758  x27 ffff000000000000
                     │ x28 0000007a05c770e0  x29 00000079f4cef860
                     │ lr  0000007a5bbfa4a4  sp  00000079f4cef690  pc  0000007a1c095de0  pst 0000000060001000
                     │ backtrace:
                     │ #00 pc 00000000001dbde0  <anonymous:7a1beba000>
                     │ #01 pc 00000000005584a0  /data/app/~~o4r1_GeEcuYbOLn9Ka-94A==/com.example.app.android-X7zo6iCz-0O_zrNqxWZhvw==/lib/arm64/libjsc.so (JSC::RegExpObject::execInline(JSC::ExecState*, JSC::JSGlobalObject*, JSC::JSString*)+868)
                     └ #02 pc 00000000000d908c  <anonymous:7a1bcff000>

this seems to co-relate with the crashlogs on firebase crashlytics (the hex numbers match, but local version has additional info).

Before this log, there are a few of these:

[15:23:49] E | unknown:ReactContextBaseJavaModule ▶︎ Unhandled SoftException
java.lang.RuntimeException: Catalyst Instance has already disappeared: requested by Timing
at com.facebook.react.bridge.ReactContextBaseJavaModule.getReactApplicationContextIfActiveOrWarn(ReactContextBaseJavaModule.java:67)

So far I’ve tried to generate the debug symbols in gradle build settings, but haven’t been able to get it right. My naive read on it is some codepath on the JS side is triggering the native thread to fail on the android side.

How does one go about investigating these type of issues and possibly finding a fix?

:astonished: SIGILL means the app was killed because of an “Illegal instruction” signal.

Basically, the CPU tried to execute a nonsensical instruction.

This indicates some sort of memory corruption. e.g. caused by something overwriting a function return address or an uninitialized function pointer or maybe referencing something after it was freed or something like that.

So unfortunately that doesn’t really narrow down the cause of the problem.

I have found an RN issue for this, which has some possible workarounds:

1 Like

Thanks. Things are looking a lot more stable after switching to hermes.

1 Like

This topic was automatically closed 30 days after the last reply. New replies are no longer allowed.