diff options
author | Ian Lance Taylor <iant@golang.org> | 2020-04-03 14:57:18 -0700 |
---|---|---|
committer | Ian Lance Taylor <iant@golang.org> | 2020-04-03 14:58:27 -0700 |
commit | 710d54ed4e343a08d2fa0abc6b63c53dec0d9bcb (patch) | |
tree | b52b7f2d554303b4f51ffbdb01c6d5e994f98334 | |
parent | bbcdf9bb3fd04adc59f41e4e1ff6293c84cbecc4 (diff) | |
download | gcc-710d54ed4e343a08d2fa0abc6b63c53dec0d9bcb.zip gcc-710d54ed4e343a08d2fa0abc6b63c53dec0d9bcb.tar.gz gcc-710d54ed4e343a08d2fa0abc6b63c53dec0d9bcb.tar.bz2 |
libgcc: avoid mmap/munmap hooks in split-stack code on GNU/Linux
* generic-morestack.c: On GNU/Linux use __mmap/__munmap rather
than mmap/munmap, to avoid hooks.
-rw-r--r-- | libgcc/ChangeLog | 5 | ||||
-rw-r--r-- | libgcc/generic-morestack.c | 17 |
2 files changed, 22 insertions, 0 deletions
diff --git a/libgcc/ChangeLog b/libgcc/ChangeLog index 7548e34..66e57ec 100644 --- a/libgcc/ChangeLog +++ b/libgcc/ChangeLog @@ -1,3 +1,8 @@ +2020-04-03 Ian Lance Taylor <iant@golang.org> + + * generic-morestack.c: On GNU/Linux use __mmap/__munmap rather + than mmap/munmap, to avoid hooks. + 2020-04-03 Jim Johnston <jjohnst@us.ibm.com> * config/s390/tpf-unwind.h (MIN_PATRANGE, MAX_PATRANGE) diff --git a/libgcc/generic-morestack.c b/libgcc/generic-morestack.c index c26dba1..bb9f67a 100644 --- a/libgcc/generic-morestack.c +++ b/libgcc/generic-morestack.c @@ -53,6 +53,23 @@ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see #include "generic-morestack.h" +/* Some systems use LD_PRELOAD or similar tricks to add hooks to + mmap/munmap. That breaks this code, because when we call mmap + there is enough stack space for the system call but there is not, + in general, enough stack space to run a hook. At least when using + glibc on GNU/Linux we can avoid the problem by calling __mmap and + __munmap. */ + +#ifdef __gnu_linux__ + +extern void *__mmap (void *, size_t, int, int, int, off_t); +extern int __munmap (void *, size_t); + +#define mmap __mmap +#define munmap __munmap + +#endif /* defined(__gnu_linux__) */ + typedef unsigned uintptr_type __attribute__ ((mode (pointer))); /* This file contains subroutines that are used by code compiled with |