+ aslmsg asl_message = asl_new(ASL_TYPE_MSG);
+ if (asl_message) {
+ Dl_info info;
+ char message[256];
+ _osx_construct_message("Bug", code, asl_message, &info, message, sizeof(message));
+ if (!_osx_log_redirect(info.dli_fbase, message)) {
+ /* MessageTracer messages aren't logged to the regular syslog store,
+ * so we log the message without any MessageTracer attributes so
+ * that we can see it in our regular syslog.
+ */
+ (void)asl_log(NULL, NULL, ASL_LEVEL_ERR, "%s", message);
+ (void)asl_log(NULL, asl_message, ASL_LEVEL_ERR, "%s", message);
+ }
+
+ asl_free(asl_message);
+ }
+
+ if (_osx_abort_on_assumes()) {
+ __builtin_trap();
+ }
+}
+
+char *
+_osx_assert_log(uint64_t code)
+{
+ char *result = NULL;
+
+ aslmsg asl_message = asl_new(ASL_TYPE_MSG);
+ if (asl_message) {
+ Dl_info info;
+ char message[256];
+ _osx_construct_message("Fatal bug", code, asl_message, &info, message, sizeof(message));
+ if (!_osx_log_redirect(info.dli_fbase, message)) {
+ (void)asl_log(NULL, NULL, ASL_LEVEL_ERR, "%s", message);
+ (void)asl_log(NULL, asl_message, ASL_LEVEL_ERR, "%s", message);
+ }
+
+ asl_free(asl_message);
+ result = strdup(message);
+ }
+
+#if LIBC_NO_LIBCRASHREPORTERCLIENT
+ /* There is no crash report information facility on embedded, which is
+ * really regrettable. Fortunately, all we need to capture is the value
+ * which tripped up the assertion. We can just stuff that into the thread's
+ * name.
+ */
+ char name[64];
+ (void)pthread_getname_np(pthread_self(), name, sizeof(name));
+
+ char newname[64];
+ if (strlen(name) == 0) {
+ (void)snprintf(newname, sizeof(newname), "[Fatal bug: 0x%llx]", code);
+ } else {
+ (void)snprintf(newname, sizeof(newname), "%s [Fatal bug: 0x%llx]", name, code);
+ }
+
+ (void)pthread_setname_np(newname);
+#endif
+
+ return result;