summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorFlorian Weimer <fweimer@redhat.com>2017-08-13 21:10:44 +0200
committerFlorian Weimer <fweimer@redhat.com>2017-08-13 21:10:44 +0200
commit1b0bfc6946b460bcebe9db19a015f2cac711f7f5 (patch)
treed762ca42d4287dcd595e69bbad767b15677edcee
parenta6bd872286b981b08577218c00e1ea693bad6095 (diff)
downloadglibc-1b0bfc6946b460bcebe9db19a015f2cac711f7f5.tar.gz
__fortify_fail: Remove internal_function attribute
__fortify_fail is called across DSO boundaries, so it should not use a non-standard calling convention.
-rw-r--r--ChangeLog10
-rw-r--r--debug/fortify_fail.c4
-rw-r--r--include/stdio.h5
-rw-r--r--sysdeps/mach/hurd/i386/____longjmp_chk.S2
-rw-r--r--sysdeps/unix/sysv/linux/i386/____longjmp_chk.S2
5 files changed, 18 insertions, 5 deletions
diff --git a/ChangeLog b/ChangeLog
index 4b6439680c..3ad08f3030 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,13 @@
+2017-08-13 Florian Weimer <fweimer@redhat.com>
+
+ * debug/fortify_fail.c (__fortify_fail, __fortify_fail_abort):
+ Remove internal_function.
+ * include/stdio.h (__fortify_fail, __fortify_fail_abort): Likewise.
+ * sysdeps/mach/hurd/i386/____longjmp_chk.S (CALL_FAIL): Pass
+ message argument on the stack.
+ * sysdeps/unix/sysv/linux/i386/____longjmp_chk.S (CALL_FAIL):
+ Likeweise.
+
2017-08-12 Mike FABIAN <mfabian@redhat.com>
Adapt test case data to the changes in the thousands
diff --git a/debug/fortify_fail.c b/debug/fortify_fail.c
index a0777ae570..add5625faf 100644
--- a/debug/fortify_fail.c
+++ b/debug/fortify_fail.c
@@ -23,7 +23,7 @@
extern char **__libc_argv attribute_hidden;
void
-__attribute__ ((noreturn)) internal_function
+__attribute__ ((noreturn))
__fortify_fail_abort (_Bool need_backtrace, const char *msg)
{
/* The loop is added only to keep gcc happy. Don't pass down
@@ -38,7 +38,7 @@ __fortify_fail_abort (_Bool need_backtrace, const char *msg)
}
void
-__attribute__ ((noreturn)) internal_function
+__attribute__ ((noreturn))
__fortify_fail (const char *msg)
{
__fortify_fail_abort (true, msg);
diff --git a/include/stdio.h b/include/stdio.h
index 215f919990..509447c528 100644
--- a/include/stdio.h
+++ b/include/stdio.h
@@ -98,10 +98,9 @@ extern void __libc_fatal (const char *__message)
__attribute__ ((__noreturn__));
extern void __libc_message (enum __libc_message_action action,
const char *__fnt, ...);
-extern void __fortify_fail (const char *msg)
- __attribute__ ((__noreturn__)) internal_function;
+extern void __fortify_fail (const char *msg) __attribute__ ((__noreturn__));
extern void __fortify_fail_abort (_Bool, const char *msg)
- __attribute__ ((__noreturn__)) internal_function;
+ __attribute__ ((__noreturn__));
libc_hidden_proto (__fortify_fail)
libc_hidden_proto (__fortify_fail_abort)
diff --git a/sysdeps/mach/hurd/i386/____longjmp_chk.S b/sysdeps/mach/hurd/i386/____longjmp_chk.S
index ac28c94e13..e7c988254f 100644
--- a/sysdeps/mach/hurd/i386/____longjmp_chk.S
+++ b/sysdeps/mach/hurd/i386/____longjmp_chk.S
@@ -36,9 +36,11 @@ longjmp_msg:
cfi_register(%ebx,%ecx); \
LOAD_PIC_REG (bx); \
leal longjmp_msg@GOTOFF(%ebx), %eax; \
+ movl %eax, (%esp); \
call HIDDEN_JUMPTARGET(__fortify_fail)
#else
# define CALL_FAIL movl $longjmp_msg, %eax; \
+ movl %eax, (%esp); \
call HIDDEN_JUMPTARGET(__fortify_fail)
#endif
diff --git a/sysdeps/unix/sysv/linux/i386/____longjmp_chk.S b/sysdeps/unix/sysv/linux/i386/____longjmp_chk.S
index d46ea84e30..2e4427abc8 100644
--- a/sysdeps/unix/sysv/linux/i386/____longjmp_chk.S
+++ b/sysdeps/unix/sysv/linux/i386/____longjmp_chk.S
@@ -33,9 +33,11 @@ longjmp_msg:
cfi_register(%ebx,%ecx); \
LOAD_PIC_REG (bx); \
leal longjmp_msg@GOTOFF(%ebx), %eax; \
+ movl %eax, (%esp); \
call HIDDEN_JUMPTARGET(__fortify_fail)
#else
# define CALL_FAIL movl $longjmp_msg, %eax; \
+ movl %eax, (%esp); \
call HIDDEN_JUMPTARGET(__fortify_fail)
#endif