aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorRainer Orth <ro@CeBiTec.Uni-Bielefeld.DE>2024-05-30 15:00:59 +0200
committerRainer Orth <ro@CeBiTec.Uni-Bielefeld.DE>2024-05-30 15:00:59 +0200
commit32f99225bcaae9b792aec143239d17f2b7e2c54b (patch)
tree73a34c13d0e4a8bfa2d31a5de25f720132cbf7b3 /gcc
parent0b3a3a66eb816b7c7e6bcb6f720813284e3eb0ef (diff)
downloadgcc-32f99225bcaae9b792aec143239d17f2b7e2c54b.zip
gcc-32f99225bcaae9b792aec143239d17f2b7e2c54b.tar.gz
gcc-32f99225bcaae9b792aec143239d17f2b7e2c54b.tar.bz2
ggc: Reduce GGC_QUIRE_SIZE on Solaris/SPARC [PR115031]
g++.dg/modules/pr99023_b.X currently FAILs on 32-bit Solaris/SPARC: FAIL: g++.dg/modules/pr99023_b.X -std=c++2a 1 blank line(s) in output FAIL: g++.dg/modules/pr99023_b.X -std=c++2a (test for excess errors) Excess errors: cc1plus: out of memory allocating 1048344 bytes after a total of 7913472 bytes It turns out that this exhaustion of the 32-bit address space happens due to a combination of three issues: * the SPARC pagesize of 8 kB, * ggc-page.cc's chunk size of 512 * pagesize, i.e. 4 MB, and * mmap adding two 8 kB unmapped red-zone pages to each mapping which result in the 4 MB mappings to actually consume 4.5 MB of address space. To avoid this, this patch reduces the chunk size so it remains at 4 MB even when combined with the red-zone pages, as recommended by mmap(2). Tested on sparc-sun-solaris2.11 and sparcv9-sun-solaris2.11. 2024-05-29 Rainer Orth <ro@CeBiTec.Uni-Bielefeld.DE> gcc: PR c++/115031 * config/sparc/sol2.h (GGC_QUIRE_SIZE): Define as 510.
Diffstat (limited to 'gcc')
-rw-r--r--gcc/config/sparc/sol2.h3
1 files changed, 3 insertions, 0 deletions
diff --git a/gcc/config/sparc/sol2.h b/gcc/config/sparc/sol2.h
index 552f58b..530e681 100644
--- a/gcc/config/sparc/sol2.h
+++ b/gcc/config/sparc/sol2.h
@@ -38,6 +38,9 @@ along with GCC; see the file COPYING3. If not see
#undef SPARC_DEFAULT_CMODEL
#define SPARC_DEFAULT_CMODEL CM_MEDMID
+/* Redue ggc-page.cc's chunk size to account for mmap red-zone pages. */
+#define GGC_QUIRE_SIZE 510
+
/* Select a format to encode pointers in exception handling data. CODE
is 0 for data, 1 for code labels, 2 for function pointers. GLOBAL is
true if the symbol may be affected by dynamic relocations.