]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
[PATCH v2]: pch, target: update host hooks for NetBSD and OpenBSD
authorKalvis Duckmanton <kalvisd@gmail.com>
Sun, 4 Jan 2026 17:54:48 +0000 (10:54 -0700)
committerJeff Law <jeffrey.law@oss.qualcomm.com>
Sun, 4 Jan 2026 17:54:48 +0000 (10:54 -0700)
The PCH use_address hooks for NetBSD hosts have not yet been updated to allow
compiled headers to be loaded at an address different from their preferred
address.

This change updates host-netbsd.cc:netbsd_gt_pch_use_address() thus: if a
compiled header cannot be mapped at its preferred address, a region of memory
is allocated and the base address of this region is passed back to the caller
(ggc-common.cc:gt_pch_restore() I believe).  Note that in this case the return
value is 0, allowing gt_pch_restore() to load the header.  In this respect the
behaviour is slightly different from that of the use_address hook for other
hosts (e.g. Linux).

This change against GCC 15.2.0 builds on the work in pch/71934 (and
target/58937)

gcc/
* config/host-netbsd.cc (netbsd_gt_pch_use_address): Support PCH
loading at addresses other than its preferred address.
* config/host-openbsd.cc (openbsd_gt_pch_use_address): Likewise.

gcc/config/host-netbsd.cc
gcc/config/host-openbsd.cc

index a6f12d0ecf0dd66bb6160aa6a38493c6a00feeb3..a5b44994493922fc240fee864a0fe76f4429821b 100644 (file)
@@ -78,7 +78,21 @@ netbsd_gt_pch_use_address (void *&base, size_t size, int fd, size_t offset)
 
   addr = mmap (base, size, PROT_READ | PROT_WRITE, MAP_PRIVATE | MAP_FIXED, fd, offset);
 
-  return addr == base ? 1 : -1;
+  if (addr == base)
+    return 1;
+
+  if (addr != (void *) MAP_FAILED)
+    munmap(addr, size);
+
+  addr = mmap (base, size, PROT_READ | PROT_WRITE, MAP_PRIVATE | MAP_ANONYMOUS, -1, 0);
+
+  if (addr == (void *) MAP_FAILED)
+    return -1;
+
+  /* Signal to the caller that whilst memory has been allocated, it
+     must read the PCH data */
+  base = addr;
+  return 0;
 }
 
 
index ee09df361820f9e6caa2c34f3b9924ef476ad14f..ac5f913ed91449e11d418ff4447beadd29142f5d 100644 (file)
@@ -78,7 +78,21 @@ openbsd_gt_pch_use_address (void *&base, size_t size, int fd, size_t offset)
 
   addr = mmap (base, size, PROT_READ | PROT_WRITE, MAP_PRIVATE, fd, offset);
 
-  return addr == base ? 1 : -1;
+  if (addr == base)
+    return 1;
+
+  if (addr != (void *) MAP_FAILED)
+    munmap(addr, size);
+
+  addr = mmap (base, size, PROT_READ | PROT_WRITE, MAP_PRIVATE | MAP_ANONYMOUS, -1, 0);
+
+  if (addr == (void *) MAP_FAILED)
+    return -1;
+
+  /* Signal to the caller that whilst memory has been allocated, it
+     must read the PCH data */
+  base = addr;
+  return 0;
 }
 
 \f