On 3/20/21 5:57 PM, Richard Henderson wrote: > There's a change in mprotect() behaviour [1] in the latest macOS > on M1 and it's not yet clear if it's going to be fixed by Apple. > > As a short-term fix, ignore failures setting up the guard pages. > > [1] https://gist.github.com/hikalium/75ae822466ee4da13cbbe486498a191f > > Buglink: https://bugs.launchpad.net/qemu/+bug/1914849 > Signed-off-by: Richard Henderson <richard.hender...@linaro.org> > --- > tcg/tcg.c | 10 +++++++--- > 1 file changed, 7 insertions(+), 3 deletions(-) > > diff --git a/tcg/tcg.c b/tcg/tcg.c > index 88c9e6f8a4..1fbe0b686d 100644 > --- a/tcg/tcg.c > +++ b/tcg/tcg.c > @@ -864,11 +864,15 @@ void tcg_region_init(void) > */ > for (i = 0; i < region.n; i++) { > void *start, *end; > - int rc; > > tcg_region_bounds(i, &start, &end); > - rc = qemu_mprotect_none(end, page_size);
What about: #ifdef CONFIG_DARWIN /* ... */ (void)rc; #else > - g_assert(!rc); #endif > + > + /* > + * macOS 11.2 has a bug (Apple Feedback FB8994773) in which mprotect > + * rejects a permission change from RWX -> NONE. Guard pages are > + * nice for bug detection but are not essential; ignore any failure. > + */ > + (void)qemu_mprotect_none(end, page_size); > } > > tcg_region_trees_init(); >