From 75c0fb3644a43da6299660799d6c7ebbbe6fc4b7 Mon Sep 17 00:00:00 2001 From: Yuqian Yang Date: Sat, 8 Feb 2025 21:29:31 +0800 Subject: Port abseil to GNU/Hurd. abseil has failed to build on GNU/Hurd for a long time. Now let's make it work! :) Note that `__GNU__` is the macro for detecting GNU/Hurd. And `__MACH__` is also defined there besides on Apple platform. They are both "mach" but with different implementation and platform details. Here are the works, * Mark platform features (not) supported by GNU/Hurd. * Supports `mmap` and `write`. * Not supports `vdso`. It's specific to Linux. * Not supports `ELF_SYMBOLIZE` for now. GNU/Hurd uses ELF as the binary format. But symbolizing in abseil relies on reading object file path from `/proc/self/task//maps` (Linux specific) or `/proc/self/maps`. GNU/Hurd does have the latter. However, due to its micro-kernel design, it's currently unable to get the file path info there. * Disable stack consumption measurement. The problem behind it is that GNU/Hurd uses a very different way to implement signal handling. Due to compiler behavior, it is impossible to get a stable, valid and reliable statictic data. In my test environment, it's 96 bytes (< 100) for current codes. * GNU/Hurd uses different errno and messages than Linux. So related things are adjusted accordingly. * Fix a misuse of `__MACH__`, which should actually be `__APPLE__`. * Fix a missing including of `signal.h` for using `SIGABRT`. Otherwise compilation will fail with undefined symbol error on GNU/Hurd. Signed-off-by: Yuqian Yang --- absl/debugging/internal/vdso_support.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'absl/debugging/internal/vdso_support.h') diff --git a/absl/debugging/internal/vdso_support.h b/absl/debugging/internal/vdso_support.h index 6562c6c2..cfca78d3 100644 --- a/absl/debugging/internal/vdso_support.h +++ b/absl/debugging/internal/vdso_support.h @@ -48,7 +48,7 @@ #ifdef ABSL_HAVE_VDSO_SUPPORT #error ABSL_HAVE_VDSO_SUPPORT cannot be directly set -#else +#elif !defined(__GNU__) #define ABSL_HAVE_VDSO_SUPPORT 1 #endif -- cgit v1.2.3