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>
diff --git a/src/shims/lock.h b/src/shims/lock.h
index 3178793..4bbbb42 100644
--- a/src/shims/lock.h
+++ b/src/shims/lock.h
@@ -548,7 +548,17 @@
 	return os_atomic_xchg(pred, DLOCK_ONCE_DONE, release);
 #elif defined(__linux__)
 	if (unlikely(syscall(__NR_membarrier, MEMBARRIER_CMD_SHARED, 0) < 0)) {
-		DISPATCH_INTERNAL_CRASH(errno, "sys_membarrier not supported");
+		/*
+		 * sys_membarrier not supported
+		 *
+		 * Ideally we would call DISPATCH_INTERNAL_CRASH() here, but
+		 * due to ordering constraints in internal.h required by Darwin
+		 * the macro is undefined when this header is included.
+		 * Instead, open-code what would be a call to
+		 * _dispatch_hardware_crash() inside DISPATCH_INTERNAL_CRASH().
+		 */
+		__asm__("");
+		__builtin_trap();
 	}
 	return os_atomic_xchg(pred, DLOCK_ONCE_DONE, relaxed);
 #else