File tree Expand file tree Collapse file tree 1 file changed +11
-4
lines changed Expand file tree Collapse file tree 1 file changed +11
-4
lines changed Original file line number Diff line number Diff line change @@ -506,13 +506,20 @@ static void setup_trampoline(void) {
506506 assert (entry -> trampoline == NULL );
507507
508508 /* allocate memory at the aligned reachable address */
509- entry -> trampoline =
510- mmap ((void * )range_min , mem_size , PROT_READ | PROT_WRITE | PROT_EXEC ,
511- MAP_ANONYMOUS | MAP_PRIVATE | MAP_FIXED , -1 , 0 );
512- if (entry -> trampoline == MAP_FAILED ) {
509+ void * trampoline = MAP_FAILED ;
510+ for (uintptr_t addr = range_min ; addr < range_max ; addr += PAGE_SIZE ) {
511+ trampoline = mmap ((void * )addr , mem_size , PROT_READ | PROT_WRITE ,
512+ MAP_ANONYMOUS | MAP_PRIVATE | MAP_FIXED , -1 , 0 );
513+ if (trampoline != MAP_FAILED ) {
514+ break ;
515+ }
516+ }
517+
518+ if (trampoline == MAP_FAILED ) {
513519 fprintf (stderr , "map failed\n" );
514520 exit (1 );
515521 }
522+ entry -> trampoline = trampoline ;
516523
517524 /*
518525 * The trampoline code uses the following temporary registers:
You can’t perform that action at this time.
0 commit comments