Make EXEC_BACKEND more convenient on macOS.
authorThomas Munro
Thu, 12 Aug 2021 22:38:22 +0000 (10:38 +1200)
committerThomas Munro
Thu, 12 Aug 2021 23:11:38 +0000 (11:11 +1200)
It's hard to disable ASLR on current macOS releases, for testing with
-DEXEC_BACKEND.  You could already set the environment variable
PG_SHMEM_ADDR to something not likely to collide with mappings created
earlier in process startup.  Let's also provide a default value that
works on current releases and architectures, for developer convenience.

As noted in the pre-existing comment, this is a horrible hack, but
-DEXEC_BACKEND is only used by Unix-based PostgreSQL developers for
testing some otherwise Windows-only code paths, so it seems excusable.

Back-patch to all supported branches.

Reviewed-by: Tom Lane
Discussion: https://postgr.es/m/20210806032944.m4tz7j2w47mant26%40alap3.anarazel.de

src/backend/port/sysv_shmem.c

index 198a6985bf3f3de6ce0ad78e122cc203ec374ffb..63a4de54b506554dc1e3d8485c877050d9dbe435 100644 (file)
@@ -142,6 +142,16 @@ InternalIpcMemoryCreate(IpcMemoryKey memKey, Size size)
 
        if (pg_shmem_addr)
            requestedAddress = (void *) strtoul(pg_shmem_addr, NULL, 0);
+       else
+       {
+#if defined(__darwin__) && SIZEOF_VOID_P == 8
+           /*
+            * Provide a default value that is believed to avoid problems with
+            * ASLR on the current macOS release.
+            */
+           requestedAddress = (void *) 0x80000000000;
+#endif
+       }
    }
 #endif