Arnaud Le Blanc
73b1ebfa20
Fix linker failure when building Opcache statically
...
We use linker relocations to fetch the TLS index and offset of _tsrm_ls_cache.
When building Opcache statically, linkers may attempt to optimize that into a
more efficient code sequence (relaxing from "General Dynamic" to "Local Exec"
model [1]). Unfortunately, linkers will fail, rather than ignore our
relocations, when they don't recognize the exact code sequence they are
expecting.
This results in errors as reported by GH-15074:
TLS transition from R_X86_64_TLSGD to R_X86_64_GOTTPOFF against
`_tsrm_ls_cache' at 0x12fc3 in section `.text' failed"
Here I take a different approach:
* Emit the exact full code sequence expected by linkers
* Extract the TLS index/offset by inspecting the linked ASM code, rather than
executing it (execution would give us the thread-local address).
* We detect when the code was relaxed, in which case we can extract the TCB
offset instead.
* This is done in a conservative way so that if the linker did something we
didn't expect, we fallback to a safer (but slower) mechanism.
One additional benefit of that is we are now able to use the Local Exec model in
more cases, in JIT'ed code. This makes non-glibc builds faster in these cases.
Closes GH-18939.
Related RFC: https://wiki.php.net/rfc/make_opcache_required .
[1] https://www.akkadia.org/drepper/tls.pdf
2025-07-26 16:43:41 +02:00
..
2022-04-22 18:14:08 +02:00
2024-03-26 21:29:07 +01:00
2025-06-30 18:38:30 +02:00
2025-04-29 21:39:12 +02:00
2025-05-01 12:00:26 +02:00
2021-04-03 15:23:25 +02:00
2021-09-16 12:46:53 +02:00
2021-04-03 15:23:25 +02:00
2021-09-22 15:55:25 +02:00
2021-04-03 15:23:25 +02:00
2020-02-03 22:52:20 +01:00
2021-04-03 15:23:25 +02:00
2021-04-03 15:23:25 +02:00
2021-04-03 15:23:25 +02:00
2021-04-03 15:23:25 +02:00
2021-04-03 15:23:25 +02:00
2021-04-09 15:41:00 +02:00
2021-05-28 15:46:04 +02:00
2021-04-03 15:23:25 +02:00
2021-04-03 15:23:25 +02:00
2021-04-03 15:23:25 +02:00
2021-04-03 15:23:25 +02:00
2021-04-03 15:23:25 +02:00
2021-04-03 15:23:25 +02:00
2021-04-03 15:23:25 +02:00
2021-04-03 15:23:25 +02:00
2021-04-03 15:23:25 +02:00
2021-04-03 15:23:25 +02:00
2021-04-03 15:23:25 +02:00
2021-04-03 15:23:25 +02:00
2021-04-03 15:23:25 +02:00
2024-04-30 14:34:43 +02:00
2023-09-01 12:39:03 +02:00
2021-04-03 15:23:25 +02:00
2021-04-03 15:23:25 +02:00
2021-04-03 15:23:25 +02:00
2021-04-03 15:23:25 +02:00
2021-04-03 15:23:25 +02:00
2021-04-03 15:23:25 +02:00
2021-04-03 15:23:25 +02:00
2021-04-03 15:23:25 +02:00
2021-04-03 15:23:25 +02:00
2021-04-09 15:41:00 +02:00
2021-04-03 15:23:25 +02:00
2021-04-03 15:23:25 +02:00
2022-06-17 14:12:53 +02:00
2021-04-03 15:23:25 +02:00
2021-04-03 15:23:25 +02:00
2021-04-03 15:23:25 +02:00
2024-04-30 14:34:43 +02:00
2021-04-03 15:23:25 +02:00
2021-04-03 15:23:25 +02:00
2024-03-13 21:40:26 +01:00
2021-04-03 15:23:25 +02:00
2021-04-03 15:23:25 +02:00
2021-04-03 15:23:25 +02:00
2021-04-03 15:23:25 +02:00
2022-06-17 14:12:53 +02:00
2024-03-13 21:40:26 +01:00
2021-04-03 15:23:25 +02:00
2021-05-28 15:46:04 +02:00
2021-04-03 15:23:25 +02:00
2021-04-03 15:23:25 +02:00
2021-04-03 15:23:25 +02:00
2021-04-03 15:23:25 +02:00
2021-04-03 15:23:25 +02:00
2021-04-03 15:23:25 +02:00
2021-04-03 15:23:25 +02:00
2021-04-03 15:23:25 +02:00
2021-04-03 15:23:25 +02:00
2021-04-03 15:23:25 +02:00
2021-04-03 15:23:25 +02:00
2021-04-03 15:23:25 +02:00
2021-04-03 15:23:25 +02:00
2021-04-03 15:23:25 +02:00
2021-04-03 15:23:25 +02:00
2021-04-03 15:23:25 +02:00
2021-04-03 15:23:25 +02:00
2021-04-03 15:23:25 +02:00
2021-04-03 15:23:25 +02:00
2021-04-03 15:23:25 +02:00
2021-04-03 15:23:25 +02:00
2021-04-03 15:23:25 +02:00
2021-04-03 15:23:25 +02:00
2021-04-03 15:23:25 +02:00
2021-04-03 15:23:25 +02:00
2021-04-03 15:23:25 +02:00
2023-07-17 15:51:24 +01:00
2021-04-03 15:23:25 +02:00
2021-04-03 15:23:25 +02:00
2021-04-03 15:23:25 +02:00
2021-04-03 15:23:25 +02:00
2021-04-03 15:23:25 +02:00
2021-07-19 13:44:20 +02:00
2021-04-03 15:23:25 +02:00
2021-04-03 15:23:25 +02:00
2021-04-03 15:23:25 +02:00
2021-04-03 15:23:25 +02:00
2020-02-03 22:52:20 +01:00
2021-04-03 15:23:25 +02:00
2021-04-03 15:23:25 +02:00
2021-04-03 15:23:25 +02:00
2019-06-13 12:35:29 +02:00
2019-06-13 12:35:29 +02:00
2019-06-13 12:35:29 +02:00
2021-04-03 15:23:25 +02:00
2023-03-17 18:12:51 +01:00
2021-04-03 15:23:25 +02:00
2024-09-09 09:55:52 +03:00
2021-04-03 15:23:25 +02:00
2021-04-03 15:23:25 +02:00
2021-04-03 15:23:25 +02:00
2023-03-17 18:12:51 +01:00
2021-04-03 15:23:25 +02:00
2021-07-30 10:27:51 +02:00
2021-07-30 10:27:51 +02:00
2021-07-30 10:27:51 +02:00
2021-07-30 10:27:51 +02:00
2021-07-30 10:27:51 +02:00
2021-07-30 10:27:51 +02:00
2021-04-03 15:23:25 +02:00
2021-04-03 15:23:25 +02:00
2021-04-03 15:23:25 +02:00
2021-04-03 15:23:25 +02:00
2021-04-03 15:23:25 +02:00
2024-02-05 15:00:32 +01:00
2021-04-14 00:21:37 +08:00
2021-05-06 10:46:00 +02:00
2021-05-17 15:46:49 +02:00
2024-01-15 09:39:13 +01:00
2021-11-17 18:23:36 +03:00
2021-11-17 18:23:36 +03:00
2021-05-29 11:33:13 +02:00
2021-04-03 15:23:25 +02:00
2024-04-08 20:22:02 +02:00
2024-04-08 20:22:02 +02:00
2024-02-06 17:42:28 +01:00
2024-12-09 17:14:19 +01:00
2021-04-03 15:23:25 +02:00
2021-04-03 15:23:25 +02:00
2023-03-01 13:24:39 +01:00
2025-06-24 20:14:40 +02:00
2021-04-03 15:23:25 +02:00
2023-10-18 17:34:10 +02:00
2023-10-18 17:34:10 +02:00
2023-10-18 17:34:10 +02:00
2022-04-21 11:57:12 +02:00
2022-04-21 11:57:12 +02:00
2023-10-18 17:34:10 +02:00
2023-05-15 10:25:33 +02:00
2023-05-15 10:25:33 +02:00
2025-01-29 12:54:23 +01:00
2024-09-09 09:55:52 +03:00
2024-03-20 13:21:41 +03:00
2022-09-03 11:23:10 +02:00
2024-09-09 10:00:41 +03:00
2023-01-12 15:47:24 +00:00
2022-11-25 14:02:45 +01:00
2022-11-25 14:02:45 +01:00
2023-01-28 11:49:14 +01:00
2023-01-28 11:49:14 +01:00
2023-07-11 17:38:09 +02:00
2023-07-21 13:04:53 +02:00
2024-04-02 18:11:02 +02:00
2024-07-22 18:28:03 +02:00
2024-08-02 17:35:27 +02:00
2024-08-02 17:35:27 +02:00
2024-08-02 17:35:27 +02:00
2024-08-02 17:35:27 +02:00
2024-08-02 17:35:27 +02:00
2024-10-07 18:06:14 +02:00
2024-10-07 18:06:14 +02:00
2024-10-28 19:30:52 +01:00
2024-10-28 19:30:52 +01:00
2025-07-16 17:37:12 +02:00
2025-07-16 17:37:12 +02:00
2024-12-12 13:10:34 +01:00
2025-03-18 14:22:14 +01:00
2025-04-28 19:51:31 +02:00
2025-05-19 19:21:53 +02:00
2025-05-19 19:21:53 +02:00
2025-05-19 19:19:26 +02:00
2025-06-23 20:01:15 +02:00
2021-09-16 14:43:08 +02:00
2021-04-05 06:34:13 +01:00
2024-03-13 21:40:26 +01:00
2021-04-03 15:23:25 +02:00
2021-04-03 15:23:25 +02:00
2021-04-03 15:23:25 +02:00
2021-04-03 15:23:25 +02:00
2024-04-16 13:49:11 +02:00
2021-04-03 15:23:25 +02:00
2021-04-03 15:23:25 +02:00
2024-04-16 13:49:11 +02:00
2021-04-03 15:23:25 +02:00
2022-06-07 13:35:34 +01:00
2023-10-18 10:46:30 +02:00
2021-04-03 15:23:25 +02:00
2021-04-03 15:23:25 +02:00
2021-04-03 15:23:25 +02:00
2021-04-03 15:23:25 +02:00
2021-04-03 15:23:25 +02:00
2021-04-03 15:23:25 +02:00
2023-04-03 08:02:19 +02:00
2021-09-17 16:32:29 +02:00
2021-04-03 15:23:25 +02:00
2021-04-03 15:23:25 +02:00
2025-04-08 14:23:03 +02:00
2024-09-09 09:55:52 +03:00
2024-12-09 11:45:16 +01:00
2021-04-03 15:23:25 +02:00
2023-07-18 15:02:38 +02:00
2021-04-03 15:23:25 +02:00
2023-05-24 20:17:31 +02:00
2023-05-24 20:17:31 +02:00
2024-02-07 13:03:14 +01:00
2021-04-09 12:24:12 +02:00
2021-04-03 15:23:25 +02:00
2021-04-03 15:23:25 +02:00
2021-04-03 15:23:25 +02:00
2020-02-03 22:52:20 +01:00
2025-06-14 15:00:49 +02:00
2021-04-03 15:23:25 +02:00
2021-04-03 15:23:25 +02:00
2021-04-03 15:23:25 +02:00
2021-04-03 15:23:25 +02:00
2021-04-03 15:23:25 +02:00
2023-04-03 08:02:19 +02:00
2021-04-03 15:23:25 +02:00
2021-04-03 15:23:25 +02:00
2021-04-03 15:23:25 +02:00
2021-04-03 15:23:25 +02:00
2021-07-30 15:09:49 +02:00
2021-04-03 15:23:25 +02:00
2024-02-05 15:00:32 +01:00
2020-02-03 22:52:20 +01:00
2020-02-03 22:52:20 +01:00
2019-06-18 17:18:49 +03:00
2020-02-03 22:52:20 +01:00
2020-02-03 22:52:20 +01:00
2021-04-03 15:23:25 +02:00
2019-12-11 12:21:49 +03:00
2021-04-03 15:23:25 +02:00
2019-12-10 13:06:36 +01:00
2021-04-03 15:23:25 +02:00
2019-07-04 11:05:01 +02:00
2023-01-12 15:47:24 +00:00
2021-08-02 10:41:27 +02:00
2021-08-02 10:41:27 +02:00
2020-11-04 10:54:08 +01:00
2021-04-03 15:23:25 +02:00
2020-11-03 16:45:13 +01:00
2021-04-03 15:23:25 +02:00
2025-02-24 14:35:47 +01:00
2021-07-27 14:36:38 +02:00
2023-10-18 17:34:10 +02:00
2021-08-16 15:04:17 +02:00
2021-08-16 15:04:17 +02:00
2021-08-16 15:05:32 +02:00
2023-07-11 17:38:09 +02:00
2025-05-19 19:19:26 +02:00
2020-02-03 22:52:20 +01:00
2019-02-15 17:36:40 +01:00
2019-02-15 17:36:40 +01:00
2020-11-03 15:29:18 +01:00
2020-11-03 15:29:18 +01:00
2021-04-03 15:23:25 +02:00
2019-02-15 16:56:32 +01:00
2019-02-15 16:56:32 +01:00
2019-12-10 13:05:48 +01:00
2021-07-27 10:50:31 +02:00
2019-12-10 13:05:48 +01:00
2023-10-18 17:34:10 +02:00
2019-12-10 13:05:48 +01:00
2021-04-03 15:23:25 +02:00
2020-11-04 15:42:52 +01:00
2023-03-17 18:12:51 +01:00
2019-07-05 11:00:27 +02:00
2024-08-02 17:35:27 +02:00
2024-08-02 17:35:27 +02:00
2019-02-21 10:59:30 +01:00
2020-11-03 16:24:54 +01:00
2023-04-03 08:02:19 +02:00
2021-04-03 15:23:25 +02:00
2020-05-04 16:27:45 +02:00
2021-04-03 15:23:25 +02:00
2021-04-03 15:23:25 +02:00
2020-11-05 16:35:08 +01:00
2021-04-03 15:23:25 +02:00
2019-12-12 11:52:43 +01:00
2023-03-17 18:12:51 +01:00
2019-02-18 13:46:13 +03:00
2019-02-15 13:03:46 +01:00
2019-12-10 13:05:48 +01:00
2019-12-10 13:05:48 +01:00
2021-04-03 15:23:25 +02:00
2022-10-07 15:48:05 +02:00
2022-10-07 15:48:05 +02:00
2022-10-07 15:48:05 +02:00
2022-10-07 15:48:05 +02:00
2022-10-07 15:48:05 +02:00
2022-10-07 15:48:05 +02:00
2021-07-30 15:09:49 +02:00
2020-11-03 14:49:10 +01:00
2021-04-03 15:23:25 +02:00
2021-07-27 12:07:22 +02:00
2022-12-22 17:42:11 +01:00
2022-12-22 17:42:11 +01:00
2021-09-21 14:35:45 +02:00
2021-11-01 12:31:34 +01:00
2021-06-10 10:52:53 +02:00
2021-06-10 11:43:15 +03:00
2021-04-03 15:23:25 +02:00
2019-12-12 09:39:52 +01:00
2021-04-03 15:23:25 +02:00
2021-04-03 15:23:25 +02:00
2021-04-03 15:23:25 +02:00
2021-04-03 15:23:25 +02:00
2021-04-03 15:23:25 +02:00
2021-04-03 15:23:25 +02:00
2021-04-03 15:23:25 +02:00
2021-04-03 15:23:25 +02:00
2021-04-03 15:23:25 +02:00
2021-04-03 15:23:25 +02:00
2021-04-03 15:23:25 +02:00
2021-04-03 15:23:25 +02:00
2021-09-16 11:31:06 +02:00
2021-04-03 15:23:25 +02:00
2022-07-18 15:11:02 +03:00
2021-04-03 15:23:25 +02:00
2021-04-03 15:23:25 +02:00
2020-05-20 11:20:21 +02:00
2021-04-03 15:23:25 +02:00
2021-04-03 15:23:25 +02:00
2021-04-03 15:23:25 +02:00
2021-04-03 15:23:25 +02:00
2021-04-03 15:23:25 +02:00
2021-04-03 15:23:25 +02:00
2025-07-26 16:43:41 +02:00