Skip to content

Commit d53fe63

Browse files
committed
lock: Avoid use of undefined DISPATCH_INTERNAL_CRASH
Building swift-corelibs-libdispatch on powerpc64le under Linux lead to the following build failure: /bin/bash ../libtool --tag=CXX --mode=compile /home/ubuntu/swift-dev/build/buildbot_incremental/llvm-linux-powerpc64le/bin/clang++ -DHAVE_CONFIG_H -I. -I../config -I.. -I.. -I../private -DDISPATCH_USE_DTRACE=0 -I../libpwq/include -Wall -fvisibility=hidden -momit-leaf-frame-pointer -isystem /usr/include/bsd -DLIBBSD_OVERLAY -fblocks -I../src/BlocksRuntime -std=gnu++11 -fno-exceptions -O2 -c -o libdispatch_la-block.lo `test -f 'block.cpp' || echo './'`block.cpp libtool: compile: /home/ubuntu/swift-dev/build/buildbot_incremental/llvm-linux-powerpc64le/bin/clang++ -DHAVE_CONFIG_H -I. -I../config -I.. -I.. -I../private -DDISPATCH_USE_DTRACE=0 -I../libpwq/include -Wall -fvisibility=hidden -momit-leaf-frame-pointer -isystem /usr/include/bsd -DLIBBSD_OVERLAY -fblocks -I../src/BlocksRuntime -std=gnu++11 -fno-exce ptions -O2 -c block.cpp -fPIC -DPIC -o .libs/libdispatch_la-block.o In file included from block.cpp:32: In file included from ./internal.h:628: In file included from ./shims.h:171: ./shims/lock.h:550:3: error: use of undeclared identifier 'DISPATCH_INTERNAL_CRASH' DISPATCH_INTERNAL_CRASH(errno, "sys_membarrier not supported"); ^ 1 error generated. Makefile:701: recipe for target 'libdispatch_la-block.lo' failed make[2]: *** [libdispatch_la-block.lo] Error 1 make[2]: Leaving directory '/home/ubuntu/swift-dev/swift-corelibs-libdispatch/src' Makefile:541: recipe for target 'all' failed make[1]: *** [all] Error 2 make[1]: Leaving directory '/home/ubuntu/swift-dev/swift-corelibs-libdispatch/src' Makefile:457: recipe for target 'all-recursive' failed make: *** [all-recursive] Error 1 Include ordering in internal.h is tightly constrained, so open-code the macro to avoid the dependency problem. Signed-off-by: Andrew Jeffery <andrew@aj.id.au>
1 parent d137aa4 commit d53fe63

File tree

1 file changed

+11
-1
lines changed

1 file changed

+11
-1
lines changed

src/shims/lock.h

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -547,7 +547,17 @@ _dispatch_once_xchg_done(dispatch_once_t *pred)
547547
return os_atomic_xchg(pred, DLOCK_ONCE_DONE, release);
548548
#elif defined(__linux__)
549549
if (unlikely(syscall(__NR_membarrier, MEMBARRIER_CMD_SHARED, 0) < 0)) {
550-
DISPATCH_INTERNAL_CRASH(errno, "sys_membarrier not supported");
550+
/*
551+
* sys_membarrier not supported
552+
*
553+
* Ideally we would call DISPATCH_INTERNAL_CRASH() here, but
554+
* due to ordering constraints in internal.h required by Darwin
555+
* the macro is undefined when this header is included.
556+
* Instead, open-code what would be a call to
557+
* _dispatch_hardware_crash() inside DISPATCH_INTERNAL_CRASH().
558+
*/
559+
__asm__("");
560+
__builtin_trap();
551561
}
552562
return os_atomic_xchg(pred, DLOCK_ONCE_DONE, relaxed);
553563
#else

0 commit comments

Comments
 (0)