15cd605f62b687b22ff44a9de096b5f297eed74afGlenn Kasten/*
25cd605f62b687b22ff44a9de096b5f297eed74afGlenn Kasten * Copyright (C) 2011 The Android Open Source Project
35cd605f62b687b22ff44a9de096b5f297eed74afGlenn Kasten *
45cd605f62b687b22ff44a9de096b5f297eed74afGlenn Kasten * Licensed under the Apache License, Version 2.0 (the "License");
55cd605f62b687b22ff44a9de096b5f297eed74afGlenn Kasten * you may not use this file except in compliance with the License.
65cd605f62b687b22ff44a9de096b5f297eed74afGlenn Kasten * You may obtain a copy of the License at
75cd605f62b687b22ff44a9de096b5f297eed74afGlenn Kasten *
85cd605f62b687b22ff44a9de096b5f297eed74afGlenn Kasten *      http://www.apache.org/licenses/LICENSE-2.0
95cd605f62b687b22ff44a9de096b5f297eed74afGlenn Kasten *
105cd605f62b687b22ff44a9de096b5f297eed74afGlenn Kasten * Unless required by applicable law or agreed to in writing, software
115cd605f62b687b22ff44a9de096b5f297eed74afGlenn Kasten * distributed under the License is distributed on an "AS IS" BASIS,
125cd605f62b687b22ff44a9de096b5f297eed74afGlenn Kasten * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
135cd605f62b687b22ff44a9de096b5f297eed74afGlenn Kasten * See the License for the specific language governing permissions and
145cd605f62b687b22ff44a9de096b5f297eed74afGlenn Kasten * limitations under the License.
155cd605f62b687b22ff44a9de096b5f297eed74afGlenn Kasten */
165cd605f62b687b22ff44a9de096b5f297eed74afGlenn Kasten
175cd605f62b687b22ff44a9de096b5f297eed74afGlenn Kasten// Replace bionic/libc/stdlib/assert.c which logs to stderr with our version which does LOGF.
185cd605f62b687b22ff44a9de096b5f297eed74afGlenn Kasten// To be effective, add CFLAGS += -UNDEBUG and explicitly link in assert.c in all build modules.
195cd605f62b687b22ff44a9de096b5f297eed74afGlenn Kasten
205cd605f62b687b22ff44a9de096b5f297eed74afGlenn Kasten#include <utils/Log.h>
215cd605f62b687b22ff44a9de096b5f297eed74afGlenn Kasten
22aab8de637bbd54d3ca4cbaa43b8f66b0e9dfcac3Ben Cheng#pragma GCC visibility push(default)
23aab8de637bbd54d3ca4cbaa43b8f66b0e9dfcac3Ben Cheng
245cd605f62b687b22ff44a9de096b5f297eed74afGlenn Kastenvoid __assert(const char *file, int line, const char *failedexpr)
255cd605f62b687b22ff44a9de096b5f297eed74afGlenn Kasten{
265cd605f62b687b22ff44a9de096b5f297eed74afGlenn Kasten    LOG_ALWAYS_FATAL("assertion \"%s\" failed: file \"%s\", line %d", failedexpr, file, line);
275cd605f62b687b22ff44a9de096b5f297eed74afGlenn Kasten    // not reached
285cd605f62b687b22ff44a9de096b5f297eed74afGlenn Kasten}
295cd605f62b687b22ff44a9de096b5f297eed74afGlenn Kasten
305cd605f62b687b22ff44a9de096b5f297eed74afGlenn Kastenvoid __assert2(const char *file, int line, const char *func, const char *failedexpr)
315cd605f62b687b22ff44a9de096b5f297eed74afGlenn Kasten{
325cd605f62b687b22ff44a9de096b5f297eed74afGlenn Kasten    LOG_ALWAYS_FATAL("assertion \"%s\" failed: file \"%s\", line %d, function \"%s\"",
335cd605f62b687b22ff44a9de096b5f297eed74afGlenn Kasten            failedexpr, file, line, func);
345cd605f62b687b22ff44a9de096b5f297eed74afGlenn Kasten    // not reached
355cd605f62b687b22ff44a9de096b5f297eed74afGlenn Kasten}
36aab8de637bbd54d3ca4cbaa43b8f66b0e9dfcac3Ben Cheng
37aab8de637bbd54d3ca4cbaa43b8f66b0e9dfcac3Ben Cheng#pragma GCC visibility pop
38