summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorElliott Hughes <enh@google.com>2014-06-06 16:49:39 -0700
committerElliott Hughes <enh@google.com>2014-06-06 16:49:39 -0700
commit47ba295b0679148970bbffc9b76a3651efea9502 (patch)
tree50c35c2ca079093c8f315c21cd53c7df8da0987a
parent6fa47ca484aa37b0a2a5734a9def32973d110cc6 (diff)
downloadbionic-47ba295b0679148970bbffc9b76a3651efea9502.zip
bionic-47ba295b0679148970bbffc9b76a3651efea9502.tar.gz
bionic-47ba295b0679148970bbffc9b76a3651efea9502.tar.bz2
Rewrite and hide longjmperror.
This shouldn't be public API, isn't supported on x86/x86_64, and it's unlikely anyone would have actually seen the message before anyway. Using __libc_fatal makes it much more likely to be seen. Bug: 11156955 Change-Id: Icf7f654b22a7dacd89668b60c11e5705c7215c08
-rw-r--r--libc/Android.mk1
-rw-r--r--libc/bionic/assert.cpp6
-rw-r--r--libc/include/setjmp.h1
-rw-r--r--libc/upstream-netbsd/lib/libc/gen/setjmperr.c56
4 files changed, 4 insertions, 60 deletions
diff --git a/libc/Android.mk b/libc/Android.mk
index ee8981a..08c9ddd 100644
--- a/libc/Android.mk
+++ b/libc/Android.mk
@@ -270,7 +270,6 @@ libc_upstream_netbsd_src_files := \
upstream-netbsd/lib/libc/gen/nice.c \
upstream-netbsd/lib/libc/gen/popen.c \
upstream-netbsd/lib/libc/gen/psignal.c \
- upstream-netbsd/lib/libc/gen/setjmperr.c \
upstream-netbsd/lib/libc/gen/utime.c \
upstream-netbsd/lib/libc/gen/utmp.c \
upstream-netbsd/lib/libc/isc/ev_streams.c \
diff --git a/libc/bionic/assert.cpp b/libc/bionic/assert.cpp
index ba67143..985fc38 100644
--- a/libc/bionic/assert.cpp
+++ b/libc/bionic/assert.cpp
@@ -34,10 +34,12 @@
void __assert(const char* file, int line, const char* failed_expression) {
__libc_fatal("%s:%d: assertion \"%s\" failed", file, line, failed_expression);
- /* NOTREACHED */
}
void __assert2(const char* file, int line, const char* function, const char* failed_expression) {
__libc_fatal("%s:%d: %s: assertion \"%s\" failed", file, line, function, failed_expression);
- /* NOTREACHED */
+}
+
+extern "C" __LIBC_HIDDEN__ void longjmperror() {
+ __libc_fatal("longjmp botch");
}
diff --git a/libc/include/setjmp.h b/libc/include/setjmp.h
index 68fdcef..02b06f5 100644
--- a/libc/include/setjmp.h
+++ b/libc/include/setjmp.h
@@ -50,7 +50,6 @@ __BEGIN_DECLS
int _setjmp(jmp_buf);
void _longjmp(jmp_buf, int);
-void longjmperror(void);
int setjmp(jmp_buf);
void longjmp(jmp_buf, int);
diff --git a/libc/upstream-netbsd/lib/libc/gen/setjmperr.c b/libc/upstream-netbsd/lib/libc/gen/setjmperr.c
deleted file mode 100644
index 5b1432e..0000000
--- a/libc/upstream-netbsd/lib/libc/gen/setjmperr.c
+++ /dev/null
@@ -1,56 +0,0 @@
-/* $NetBSD: setjmperr.c,v 1.8 2012/06/24 15:26:03 christos Exp $ */
-
-/*
- * Copyright (c) 1980, 1993
- * The Regents of the University of California. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- * 3. Neither the name of the University nor the names of its contributors
- * may be used to endorse or promote products derived from this software
- * without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- */
-
-#include <sys/cdefs.h>
-#if defined(LIBC_SCCS) && !defined(lint)
-#if 0
-static char sccsid[] = "@(#)setjmperr.c 8.1 (Berkeley) 6/4/93";
-#else
-__RCSID("$NetBSD: setjmperr.c,v 1.8 2012/06/24 15:26:03 christos Exp $");
-#endif
-#endif /* LIBC_SCCS and not lint */
-
-/*
- * This routine is called from longjmp() when an error occurs.
- * Programs that wish to exit gracefully from this error may
- * write their own versions.
- * If this routine returns, the program is aborted.
- */
-
-#include <setjmp.h>
-#include <unistd.h>
-
-void
-longjmperror(void)
-{
-#define ERRMSG "longjmp botch.\n"
- (void)write(STDERR_FILENO, ERRMSG, sizeof(ERRMSG) - 1);
-}