Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 26864bf9 authored by Elliott Hughes's avatar Elliott Hughes
Browse files

Switch to the new bionic fatal logging interface.

This is more general and will work for anyone's custom logging
code, as long as they use ANDROID_LOG_FATAL priority.

Change-Id: Iaf7fc0858fce04f3af407882a58ee5a827d50ddd
parent b52a48af
Loading
Loading
Loading
Loading
+7 −6
Original line number Diff line number Diff line
@@ -323,6 +323,13 @@ int __android_log_write(int prio, const char *tag, const char *msg)
            tag = tmp_tag;
    }

#if __BIONIC__
    if (prio == ANDROID_LOG_FATAL) {
        extern void __android_set_abort_message(const char*);
        __android_set_abort_message(msg);
    }
#endif

    vec[0].iov_base   = (unsigned char *) &prio;
    vec[0].iov_len    = 1;
    vec[1].iov_base   = (void *) tag;
@@ -422,14 +429,8 @@ void __android_log_assert(const char *cond, const char *tag,
            strcpy(buf, "Unspecified assertion failed");
    }

#if __BIONIC__
    // Ensure debuggerd gets to see what went wrong by keeping the C library in the loop.
    extern __noreturn void __android_fatal(const char* tag, const char* format, ...) __printflike(2, 3);
    __android_fatal(tag ? tag : "", "%s", buf);
#else
    __android_log_write(ANDROID_LOG_FATAL, tag, buf);
    __builtin_trap(); /* trap so we have a chance to debug the situation */
#endif
    /* NOTREACHED */
}

+7 −6
Original line number Diff line number Diff line
@@ -173,6 +173,13 @@ int __android_log_write(int prio, const char *tag, const char *msg)
            tag = tmp_tag;
    }

#if __BIONIC__
    if (prio == ANDROID_LOG_FATAL) {
        extern void __android_set_abort_message(const char*);
        __android_set_abort_message(msg);
    }
#endif

    vec[0].iov_base   = (unsigned char *) &prio;
    vec[0].iov_len    = 1;
    vec[1].iov_base   = (void *) tag;
@@ -272,14 +279,8 @@ void __android_log_assert(const char *cond, const char *tag,
            strcpy(buf, "Unspecified assertion failed");
    }

#if __BIONIC__
    // Ensure debuggerd gets to see what went wrong by keeping the C library in the loop.
    extern __noreturn void __android_fatal(const char* tag, const char* format, ...) __printflike(2, 3);
    __android_fatal(tag ? tag : "", "%s", buf);
#else
    __android_log_write(ANDROID_LOG_FATAL, tag, buf);
    __builtin_trap(); /* trap so we have a chance to debug the situation */
#endif
    /* NOTREACHED */
}