[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[PATCH] test-open: avoid compilation error with -D_FORTIFY_SOURCE=2
From: |
Daiki Ueno |
Subject: |
[PATCH] test-open: avoid compilation error with -D_FORTIFY_SOURCE=2 |
Date: |
Fri, 21 Jun 2013 12:45:01 +0900 |
User-agent: |
Gnus/5.13 (Gnus v5.13) Emacs/24.3.50 (gnu/linux) |
I got the following error when compiling test-open.c with
-D_FORTIFY_SOURCE=2.
$ gcc -DHAVE_CONFIG_H -I. -DGNULIB_STRICT_CHECKING=1 -I. -I. -I.. -I./..
-I../gllib -I./../gllib -Wall -O1 -D_FORTIFY_SOURCE=2 -g -MT test-open.o -MD
-MP -MF .deps/test-open.Tpo -c -o test-open.o test-open.c
In file included from /usr/include/fcntl.h:296:0,
from ../gllib/fcntl.h:61,
from test-open.c:21:
test-open.h: In function 'main':
/usr/include/bits/fcntl2.h:41:1: error: inlining failed in call to
always_inline 'open': indirect function call with a yet undetermined callee
open (const char *__path, int __oflag, ...)
^
It seems that open cannot be directly passed to test_open as a function
pointer, since it is marked as always_inline. I'm attaching a patch.
Regards,
--
Daiki Ueno
>From f0ab4954d777a041c88964ce667a9b01e858b395 Mon Sep 17 00:00:00 2001
From: Daiki Ueno <address@hidden>
Date: Fri, 21 Jun 2013 12:37:20 +0900
Subject: [PATCH] test-open: avoid compilation error with -D_FORTIFY_SOURCE=2
* tests/test-open.c (do_open): New wrapper around the system open.
---
ChangeLog | 5 +++++
tests/test-open.c | 24 +++++++++++++++++++++++-
2 files changed, 28 insertions(+), 1 deletion(-)
diff --git a/ChangeLog b/ChangeLog
index 5e4f02f..90140fd 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,8 @@
+2013-06-21 Daiki Ueno <address@hidden>
+
+ test-open: avoid compilation error with -D_FORTIFY_SOURCE=2
+ * tests/test-open.c (do_open): New wrapper around the system open.
+
2013-06-18 Paul Eggert <address@hidden>
doc: document extern-inline
diff --git a/tests/test-open.c b/tests/test-open.c
index f04144f..c21b21c 100644
--- a/tests/test-open.c
+++ b/tests/test-open.c
@@ -34,8 +34,30 @@ SIGNATURE_CHECK (open, int, (char const *, int, ...));
#include "test-open.h"
+/* Wrapper around open to test it with test_open. When
+ -D_FORTIFY_SOURCE=2, open may be inlined and cannot be passed as a
+ function pointer. */
+static int
+do_open (char const *name, int flags, ...)
+{
+ if (flags & O_CREAT)
+ {
+ mode_t mode = 0;
+ va_list arg;
+ va_start (arg, flags);
+
+ /* We have to use PROMOTED_MODE_T instead of mode_t, otherwise GCC 4
+ creates crashing code when 'mode_t' is smaller than 'int'. */
+ mode = va_arg (arg, PROMOTED_MODE_T);
+
+ va_end (arg);
+ return open (name, flags, mode);
+ }
+ return open (name, flags);
+}
+
int
main (void)
{
- return test_open (open, true);
+ return test_open (do_open, true);
}
--
1.8.2.1
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [PATCH] test-open: avoid compilation error with -D_FORTIFY_SOURCE=2,
Daiki Ueno <=