summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDmitry Stogov <dmitry@zend.com>2019-05-22 12:20:34 +0300
committerDmitry Stogov <dmitry@zend.com>2019-05-22 12:20:34 +0300
commit7c99589be210eac023bf780263ed6ebcddf76a16 (patch)
treebd0a6b6bdbd31eff97c93733bed5bc8f27710f41
parentff4b0ce0e8d582e4b8f6c44270a77f511d28bacd (diff)
downloadphp-git-7c99589be210eac023bf780263ed6ebcddf76a16.tar.gz
.text segment may be not the first one
-rw-r--r--ext/opcache/ZendAccelerator.c23
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);