Merge branch 'PHP-8.2' into PHP-8.3

* PHP-8.2:
  Hint the opcache shm mapping location only when JIT is enabled
  Fix the JIT buffer relocation failure at the corner case (#11266)
This commit is contained in:
Arnaud Le Blanc 2024-07-22 19:28:05 +02:00
commit ead61c7f29
No known key found for this signature in database
GPG Key ID: 0098C05DD15ABC13

View File

@ -20,6 +20,7 @@
*/
#include "zend_shared_alloc.h"
#include "jit/zend_jit.h"
#ifdef USE_MMAP
@ -48,7 +49,7 @@
# define MAP_HUGETLB MAP_ALIGNED_SUPER
#endif
#if (defined(__linux__) || defined(__FreeBSD__)) && (defined(__x86_64__) || defined (__aarch64__)) && !defined(__SANITIZE_ADDRESS__)
#if defined(HAVE_JIT) && (defined(__linux__) || defined(__FreeBSD__)) && (defined(__x86_64__) || defined (__aarch64__)) && !defined(__SANITIZE_ADDRESS__)
static void *find_prefered_mmap_base(size_t requested_size)
{
size_t huge_page_size = 2 * 1024 * 1024;
@ -197,8 +198,17 @@ static int create_segments(size_t requested_size, zend_shared_segment ***shared_
#ifdef PROT_MAX
flags |= PROT_MAX(PROT_READ | PROT_WRITE | PROT_EXEC);
#endif
#if (defined(__linux__) || defined(__FreeBSD__)) && (defined(__x86_64__) || defined (__aarch64__)) && !defined(__SANITIZE_ADDRESS__)
void *hint = find_prefered_mmap_base(requested_size);
#if defined(HAVE_JIT) && (defined(__linux__) || defined(__FreeBSD__)) && (defined(__x86_64__) || defined (__aarch64__)) && !defined(__SANITIZE_ADDRESS__)
void *hint;
if (JIT_G(enabled) && JIT_G(buffer_size)
&& zend_jit_check_support() == SUCCESS) {
hint = find_prefered_mmap_base(requested_size);
} else {
/* Do not use a hint if JIT is not enabled, as this profits only JIT and
* this is potentially unsafe when the only suitable candidate is just
* after the heap (e.g. in non-PIE builds) (GH-13775). */
hint = MAP_FAILED;
}
if (hint != MAP_FAILED) {
# ifdef MAP_HUGETLB
size_t huge_page_size = 2 * 1024 * 1024;