diff options
| author | Dmitry Stogov <dmitry@zend.com> | 2019-05-22 12:20:34 +0300 |
|---|---|---|
| committer | Dmitry Stogov <dmitry@zend.com> | 2019-05-22 12:20:34 +0300 |
| commit | 7c99589be210eac023bf780263ed6ebcddf76a16 (patch) | |
| tree | bd0a6b6bdbd31eff97c93733bed5bc8f27710f41 | |
| parent | ff4b0ce0e8d582e4b8f6c44270a77f511d28bacd (diff) | |
| download | php-git-7c99589be210eac023bf780263ed6ebcddf76a16.tar.gz | |
.text segment may be not the first one
| -rw-r--r-- | ext/opcache/ZendAccelerator.c | 23 |
1 files changed, 15 insertions, 8 deletions
diff --git a/ext/opcache/ZendAccelerator.c b/ext/opcache/ZendAccelerator.c index e28db6361d..7824ff9160 100644 --- a/ext/opcache/ZendAccelerator.c +++ b/ext/opcache/ZendAccelerator.c @@ -2692,14 +2692,21 @@ static void accel_move_code_to_huge_pages(void) char perm[5], dev[6], name[MAXPATHLEN]; int ret; - ret = fscanf(f, "%lx-%lx %4s %lx %5s %ld %s\n", &start, &end, perm, &offset, dev, &inode, name); - if (ret == 7 && perm[0] == 'r' && perm[1] == '-' && perm[2] == 'x' && name[0] == '/') { - long unsigned int seg_start = ZEND_MM_ALIGNED_SIZE_EX(start, huge_page_size); - long unsigned int seg_end = (end & ~(huge_page_size-1L)); - - if (seg_end > seg_start) { - zend_accel_error(ACCEL_LOG_DEBUG, "remap to huge page %lx-%lx %s \n", seg_start, seg_end, name); - accel_remap_huge_pages((void*)seg_start, seg_end - seg_start, name, offset + seg_start - start); + while (1) { + ret = fscanf(f, "%lx-%lx %4s %lx %5s %ld %s\n", &start, &end, perm, &offset, dev, &inode, name); + if (ret == 7) { + if (perm[0] == 'r' && perm[1] == '-' && perm[2] == 'x' && name[0] == '/') { + long unsigned int seg_start = ZEND_MM_ALIGNED_SIZE_EX(start, huge_page_size); + long unsigned int seg_end = (end & ~(huge_page_size-1L)); + + if (seg_end > seg_start) { + zend_accel_error(ACCEL_LOG_DEBUG, "remap to huge page %lx-%lx %s \n", seg_start, seg_end, name); + accel_remap_huge_pages((void*)seg_start, seg_end - seg_start, name, offset + seg_start - start); + } + break; + } + } else { + break; } } fclose(f); |
