std/os: macOS dylib/libSystem fallbacks for native + libc loaders

ober

6c169af9d1befe58de085e4fe36764003091f9cb

diff --git a/lib/std/os/epoll-native.sls b/lib/std/os/epoll-native.sls
index e1cce52..4b5a08a 100644
--- a/lib/std/os/epoll-native.sls
+++ b/lib/std/os/epoll-native.sls
@@ -22,8 +22,11 @@
       (if static?
           #t
           (or (guard (e [#t #f]) (load-shared-object "libjerboa_native.so") #t)
+              (guard (e [#t #f]) (load-shared-object "libjerboa_native.dylib") #t)
               (guard (e [#t #f]) (load-shared-object "lib/libjerboa_native.so") #t)
+              (guard (e [#t #f]) (load-shared-object "lib/libjerboa_native.dylib") #t)
               (guard (e [#t #f]) (load-shared-object "./lib/libjerboa_native.so") #t)
+              (guard (e [#t #f]) (load-shared-object "./lib/libjerboa_native.dylib") #t)
               (error 'std/os/epoll-native "libjerboa_native.so not found")))))
 
   ;; Constants
diff --git a/lib/std/os/posix.sls b/lib/std/os/posix.sls
index 3b07306..8be61e6 100644
--- a/lib/std/os/posix.sls
+++ b/lib/std/os/posix.sls
@@ -88,9 +88,13 @@
   ;; ========== libc loading ==========
   ;; In static builds (musl), symbols are already linked.
   ;; In dynamic builds, load libc.
+  ;; macOS: libc symbols live in libSystem; (load-shared-object "") is a no-op,
+  ;; so we must load libSystem explicitly or strerror et al never bind.
   (define _libc (or (guard (e [#t #f]) (load-shared-object "libc.so.7"))
                     (guard (e [#t #f]) (load-shared-object "libc.so.6"))
-                    (guard (e [#t #f]) (load-shared-object "libc.so"))))
+                    (guard (e [#t #f]) (load-shared-object "libc.so"))
+                    (guard (e [#t #f]) (load-shared-object "/usr/lib/libSystem.B.dylib"))
+                    (guard (e [#t #f]) (load-shared-object "libSystem.dylib"))))
   (define _libc2 (guard (e [#t #f]) (load-shared-object "")))
 
   ;; ========== Errno ==========