1
0
mirror of https://github.com/php/php-src.git synced 2026-03-24 00:02:20 +01:00
Files
archived-php-src/ext/opcache/tests
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
..
2025-06-30 18:38:30 +02:00
2025-04-29 21:39:12 +02:00
2020-02-03 22:52:20 +01:00
2020-02-03 22:52:20 +01: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-14 00:21:37 +08:00
2021-05-06 10:46:00 +02:00
2021-05-17 15:46:49 +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
2023-10-18 17:34:10 +02:00
2025-01-29 12:54:23 +01:00
2024-03-20 13:21:41 +03:00
2023-01-28 11:49:14 +01:00
2023-01-28 11:49:14 +01:00
2023-04-03 08:02:19 +02:00
2020-02-03 22:52:20 +01:00
2023-04-03 08:02:19 +02:00
2020-02-03 22:52:20 +01:00
2020-02-03 22:52:20 +01:00
2020-02-03 22:52:20 +01:00
2020-02-03 22:52:20 +01: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
2020-02-03 22:52:20 +01:00
2019-07-05 11:00:27 +02:00
2022-10-07 15:48:05 +02:00
2021-06-10 10:52:53 +02:00