Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[pcre2] Disable JIT when targeting iOS #37059

Merged
merged 1 commit into from
Mar 5, 2024

Conversation

fwcd
Copy link
Contributor

@fwcd fwcd commented Mar 1, 2024

PCRE2 JIT compilation is unsupported on iOS as per https://codereview.qt-project.org/c/qt/qtbase/+/204514

Since our Qt port uses the separately built pcre2 port (instead of the bundled version):

-DQT_USE_BUNDLED_BundledPcre2:BOOL=FALSE

...the linked Qt fix doesn't apply to us, so we'll have to disable it explicitly.

Background

I ran into this today while debugging a crash of a Qt app built for the iOS simulator (using vcpkg-built libraries):

Crash Log
Exception Type:  EXC_BAD_ACCESS (SIGBUS)
Exception Subtype: KERN_PROTECTION_FAILURE at 0x000000010dbb8008
Exception Codes: 0x0000000000000002, 0x000000010dbb8008
VM Region Info: 0x10dbb8008 is in 0x10dbb8000-0x10dbc8000;  bytes after start: 8  bytes before end: 65527
      REGION TYPE                    START - END         [ VSIZE] PRT/MAX SHRMOD  REGION DETAIL
      ColorSync                   10dbb0000-10dbb8000    [   32K] r--/r-- SM=PRV  
--->  VM_ALLOCATE                 10dbb8000-10dbc8000    [   64K] rwx/rwx SM=PRV  
      GAP OF 0x38000 BYTES
      MALLOC_TINY                 10dc00000-10dd00000    [ 1024K] rw-/rwx SM=PRV  
Termination Reason: SIGNAL 10 Bus error: 10
Terminating Process: exc handler [98229]

Triggered by Thread:  0

Thread 0 Crashed::  Dispatch queue: com.apple.main-thread
0   Mixxx                         	       0x107b8ec24 sljit_malloc_exec + 236
1   Mixxx                         	       0x107b8ea80 pcre2_jit_compile_16 + 160
2   Mixxx                         	       0x104ec52d4 QRegularExpressionPrivate::compilePattern() + 252
3   Mixxx                         	       0x104ec6058 QRegularExpression::isValid() const + 24
4   Mixxx                         	       0x104e30194 QtPrivate::contains(QStringView, QString const*, QRegularExpression const&, QRegularExpressionMatch*) + 52
5   Mixxx                         	       0x10599a8ec QIOSScreen::QIOSScreen(UIScreen*) + 1060
6   Mixxx                         	       0x105998850 QIOSIntegration::initialize() + 272
7   Mixxx                         	       0x104d8165c QCoreApplicationPrivate::init() + 1640
8   Mixxx                         	       0x1076c80e0 QGuiApplicationPrivate::init() + 60
9   Mixxx                         	       0x105d9d20c QApplicationPrivate::init() + 24
10  Mixxx                         	       0x105d9d1e0 QApplication::QApplication(int&, char**, int) + 140

This fixes the problem.

Checklist

  • Changes comply with the maintainer guide.
  • SHA512s are updated for each updated download (not applicable).
  • The "supports" clause reflects platforms that may be fixed by this new version.
  • Any fixed CI baseline entries are removed from that file (not applicable).
  • Any patches that are no longer applied are deleted from the port's directory (not applicable).
  • The version database is fixed by rerunning ./vcpkg x-add-version --all and committing the result.
  • Only one version is added to each modified port's versions file.

@fwcd fwcd mentioned this pull request Mar 1, 2024
54 tasks
@WangWeiLin-MV WangWeiLin-MV added category:port-bug The issue is with a library, which is something the port should already support category:community-triplet A PR or issue related to community triplets not officially validated by the vcpkg team. labels Mar 1, 2024
@WangWeiLin-MV
Copy link
Contributor

WangWeiLin-MV commented Mar 1, 2024

P.S. According to the comment PCRE2Project/pcre2#212 (comment) from upstream, PCRE2 should disable JIT when the target is iOS.

@WangWeiLin-MV WangWeiLin-MV added the info:reviewed Pull Request changes follow basic guidelines label Mar 4, 2024
@vicroms vicroms merged commit ea6202d into microsoft:master Mar 5, 2024
16 checks passed
@fwcd fwcd deleted the disable-pcre2-jit-ios branch March 5, 2024 19:01
fwcd added a commit to fwcd/vcpkg that referenced this pull request Mar 5, 2024
PCRE2 JIT compilation is unsupported on iOS as per
https://codereview.qt-project.org/c/qt/qtbase/+/204514

Since our Qt port uses the separately built `pcre2` port (instead of the
bundled version):


https://github.com/microsoft/vcpkg/blob/3f966cf6a8654a0bc067738bcb95d489e197ad68/ports/qtbase/portfile.cmake#L315

...the linked Qt fix doesn't apply to us, so we'll have to disable it
explicitly.

### Background

I ran into this today while debugging a crash of a Qt app built for the
iOS simulator (using vcpkg-built libraries):

<details>

<summary>Crash Log</summary>

```
Exception Type:  EXC_BAD_ACCESS (SIGBUS)
Exception Subtype: KERN_PROTECTION_FAILURE at 0x000000010dbb8008
Exception Codes: 0x0000000000000002, 0x000000010dbb8008
VM Region Info: 0x10dbb8008 is in 0x10dbb8000-0x10dbc8000;  bytes after start: 8  bytes before end: 65527
      REGION TYPE                    START - END         [ VSIZE] PRT/MAX SHRMOD  REGION DETAIL
      ColorSync                   10dbb0000-10dbb8000    [   32K] r--/r-- SM=PRV  
--->  VM_ALLOCATE                 10dbb8000-10dbc8000    [   64K] rwx/rwx SM=PRV  
      GAP OF 0x38000 BYTES
      MALLOC_TINY                 10dc00000-10dd00000    [ 1024K] rw-/rwx SM=PRV  
Termination Reason: SIGNAL 10 Bus error: 10
Terminating Process: exc handler [98229]

Triggered by Thread:  0

Thread 0 Crashed::  Dispatch queue: com.apple.main-thread
0   Mixxx                         	       0x107b8ec24 sljit_malloc_exec + 236
1   Mixxx                         	       0x107b8ea80 pcre2_jit_compile_16 + 160
2   Mixxx                         	       0x104ec52d4 QRegularExpressionPrivate::compilePattern() + 252
3   Mixxx                         	       0x104ec6058 QRegularExpression::isValid() const + 24
4   Mixxx                         	       0x104e30194 QtPrivate::contains(QStringView, QString const*, QRegularExpression const&, QRegularExpressionMatch*) + 52
5   Mixxx                         	       0x10599a8ec QIOSScreen::QIOSScreen(UIScreen*) + 1060
6   Mixxx                         	       0x105998850 QIOSIntegration::initialize() + 272
7   Mixxx                         	       0x104d8165c QCoreApplicationPrivate::init() + 1640
8   Mixxx                         	       0x1076c80e0 QGuiApplicationPrivate::init() + 60
9   Mixxx                         	       0x105d9d20c QApplicationPrivate::init() + 24
10  Mixxx                         	       0x105d9d1e0 QApplication::QApplication(int&, char**, int) + 140
```

</details>

This fixes the problem.

### Checklist

- [x] Changes comply with the [maintainer
guide](https://github.com/microsoft/vcpkg-docs/blob/main/vcpkg/contributing/maintainer-guide.md).
- [x] SHA512s are updated for each updated download (not applicable).
- [x] The "supports" clause reflects platforms that may be fixed by this
new version.
- [x] Any fixed [CI
baseline](https://github.com/microsoft/vcpkg/blob/master/scripts/ci.baseline.txt)
entries are removed from that file (not applicable).
- [x] Any patches that are no longer applied are deleted from the port's
directory (not applicable).
- [x] The version database is fixed by rerunning `./vcpkg x-add-version
--all` and committing the result.
- [x] Only one version is added to each modified port's versions file.
JoergAtGithub added a commit to mixxxdj/vcpkg that referenced this pull request Mar 6, 2024
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
category:community-triplet A PR or issue related to community triplets not officially validated by the vcpkg team. category:port-bug The issue is with a library, which is something the port should already support info:reviewed Pull Request changes follow basic guidelines
Projects
None yet
Development

Successfully merging this pull request may close these issues.

4 participants