6262// Map a new area and copy the original code there
6363// Use mmap using the start address with MAP_FIXED so we get exactly the
6464// same virtual address
65- // Use madvise with MADV_HUGE_PAGE to use Anonymous 2M Pages
65+ // Use madvise with MADV_HUGEPAGE to use Anonymous 2M Pages
6666// If successful copy the code there and unmap the original region.
6767
6868extern char __nodetext;
@@ -308,7 +308,7 @@ static bool IsSuperPagesEnabled() {
308308// a. map a new area and copy the original code there
309309// b. mmap using the start address with MAP_FIXED so we get exactly
310310// the same virtual address (except on macOS).
311- // c. madvise with MADV_HUGE_PAGE
311+ // c. madvise with MADV_HUGEPAGE
312312// d. If successful copy the code there and unmap the original region
313313int
314314#if !defined(__APPLE__)
@@ -333,9 +333,6 @@ MoveTextRegionToLargePages(const text_region& r) {
333333 PrintSystemError (errno);
334334 return -1 ;
335335 }
336- auto munmap_on_return = OnScopeLeave ([nmem, size]() {
337- if (-1 == munmap (nmem, size)) PrintSystemError (errno);
338- });
339336
340337 memcpy (nmem, r.from , size);
341338
@@ -352,13 +349,14 @@ MoveTextRegionToLargePages(const text_region& r) {
352349 return -1 ;
353350 }
354351
355- ret = madvise (tmem, size, MADV_HUGEPAGE);
352 <
67DE
td data-grid-cell-id="diff-930e2e7e309763acbb831b1cc081a2a76c92e2a3d0be150a9e933bdc7a1747f0-355-352-2" data-line-anchor="diff-930e2e7e309763acbb831b1cc081a2a76c92e2a3d0be150a9e933bdc7a1747f0R352" data-selected="false" role="gridcell" style="background-color:var(--diffBlob-additionLine-bgColor, var(--diffBlob-addition-bgColor-line));padding-right:24px" tabindex="-1" valign="top" class="focusable-grid-cell diff-text-cell right-side-diff-cell left-side">+ ret = madvise (tmem, size, 14 /* MADV_HUGEPAGE */ );
356353 if (ret == -1 ) {
357354 PrintSystemError (errno);
358355 ret = munmap (tmem, size);
359356 if (ret == -1 ) {
360357 PrintSystemError (errno);
361358 }
359+ if (-1 == munmap (nmem, size)) PrintSystemError (errno);
362360 return -1 ;
363361 }
364362 memcpy (start, nmem, size);
@@ -369,6 +367,7 @@ MoveTextRegionToLargePages(const text_region& r) {
369367 MAP_ALIGNED_SUPER, -1 , 0 );
370368 if (tmem == MAP_FAILED) {
371369 PrintSystemError (errno);
370+ if (-1 == munmap (nmem, size)) PrintSystemError (errno);
372371 return -1 ;
373372 }
374373#elif defined(__APPLE__)
@@ -383,6 +
65CE
382,7 @@ MoveTextRegionToLargePages(const text_region& r) {
383382 VM_FLAGS_SUPERPAGE_SIZE_2MB, 0 );
384383 if (tmem == MAP_FAILED) {
385384 PrintSystemError (errno);
385+ if (-1 == munmap (nmem, size)) PrintSystemError (errno);
386386 return -1 ;
387387 }
388388 memcpy (tmem, nmem, size);
@@ -393,6 +393,7 @@ MoveTextRegionToLargePages(const text_region& r) {
393393 if (ret == -1 ) {
394394 PrintSystemError (errno);
395395 }
396+ if (-1 == munmap (nmem, size)) PrintSystemError (errno);
396397 return -1 ;
397398 }
398399 memcpy (start, tmem, size);
@@ -405,8 +406,10 @@ MoveTextRegionToLargePages(const text_region& r) {
405406 if (ret == -1 ) {
406407 PrintSystemError (errno);
407408 }
409+ if (-1 == munmap (nmem, size)) PrintSystemError (errno);
408410 return -1 ;
409411 }
412+ if (-1 == munmap (nmem, size)) PrintSystemError (errno);
410413 return ret;
411414}
412415
@@ -418,12 +421,12 @@ int MapStaticCodeToLargePages() {
418421 return -1 ;
419422 }
420423
421- #if defined(__linux__)
424+ #if defined(__linux__) || defined(__FreeBSD__)
422425 if (r.from > reinterpret_cast <void *>(&MoveTextRegionToLargePages))
423426 return MoveTextRegionToLargePages (r);
424427
425428 return -1 ;
426- #elif defined(__FreeBSD__) || defined( __APPLE__)
429+ #elif defined(__APPLE__)
427430 return MoveTextRegionToLargePages (r);
428431#endif
429432}
0 commit comments