With _FORTIFY_SOURCE >= 2 (enabled by -fhardened), vfprintf-chk-1.c's
__vfprintf_chk ends up calling __vprintf_chk rather than vprintf.

```
--- a/fortify.s
+++ b/no-fortify.s
@@ -8,27 +8,28 @@
[...]
 __vfprintf_chk:
[...]
        movl    $1, should_optimize(%rip)
-       jmp     __vfprintf_chk
+       jmp     vfprintf@PLT
```

2024-02-15      Sam James <s...@gentoo.org>

gcc/testsuite/ChangeLog:
        * gcc.c-torture/execute/vfprintf-chk-1.c (__vfprintf_chk): Undefine 
_FORTIFY_SOURCE
        to call the real vfprintf.
---
The test, AIUI, is trying to test GCC's own basic _chk bits rather than
any of e.g. glibc's _FORTIFY_SOURCE handling.

I'm curious as to why only vfprintf triggers this right now. If this patch is 
right,
perhaps we should do printf-chk-1.c, fprintf-chk-1.c, and vprintf-chk-1.

Please push if OK as I don't have access.

 gcc/testsuite/gcc.c-torture/execute/vfprintf-chk-1.c | 1 +
 1 file changed, 1 insertion(+)

diff --git a/gcc/testsuite/gcc.c-torture/execute/vfprintf-chk-1.c 
b/gcc/testsuite/gcc.c-torture/execute/vfprintf-chk-1.c
index 401eaf4304a4..a8e5689e3fe6 100644
--- a/gcc/testsuite/gcc.c-torture/execute/vfprintf-chk-1.c
+++ b/gcc/testsuite/gcc.c-torture/execute/vfprintf-chk-1.c
@@ -1,6 +1,7 @@
 /* { dg-skip-if "requires io" { freestanding } }  */
 
 #ifndef test
+#undef _FORTIFY_SOURCE
 #include <stdio.h>
 #include <stdlib.h>
 #include <stdarg.h>
-- 
2.43.1

Reply via email to