diff mbox series

posix/conformance/interfaces/sem_timedwait/2-1: add _GNU_SOURCE define

Message ID 20240910094755.57438-1-maxj.fnst@fujitsu.com
State New
Headers show
Series posix/conformance/interfaces/sem_timedwait/2-1: add _GNU_SOURCE define | expand

Commit Message

Ma Xinjian Sept. 10, 2024, 9:47 a.m. UTC
To get rid of error "‘MAP_ANONYMOUS’ undeclared (first use in this function)"
on some systems (Fedora 37, etc).

Signed-off-by: Ma Xinjian <maxj.fnst@fujitsu.com>
---
 .../conformance/interfaces/sem_timedwait/2-1.c                   | 1 +
 1 file changed, 1 insertion(+)

Comments

Cyril Hrubis Sept. 10, 2024, 10:11 a.m. UTC | #1
Hi!
> To get rid of error "‘MAP_ANONYMOUS’ undeclared (first use in this function)"
> on some systems (Fedora 37, etc).

That does not sound right, the open posix testsuite must not depend on
anything GNU specific.

Also MAP_ANONYMOUS is requiered to be there by POSIX so setting
_GNU_SOURCE does not seem to be a good solution.

> Signed-off-by: Ma Xinjian <maxj.fnst@fujitsu.com>
> ---
>  .../conformance/interfaces/sem_timedwait/2-1.c                   | 1 +
>  1 file changed, 1 insertion(+)
> 
> diff --git a/testcases/open_posix_testsuite/conformance/interfaces/sem_timedwait/2-1.c b/testcases/open_posix_testsuite/conformance/interfaces/sem_timedwait/2-1.c
> index 2eca8dff6..4ccef7261 100644
> --- a/testcases/open_posix_testsuite/conformance/interfaces/sem_timedwait/2-1.c
> +++ b/testcases/open_posix_testsuite/conformance/interfaces/sem_timedwait/2-1.c
> @@ -11,6 +11,7 @@
>   */
>  
>  
> +#define _GNU_SOURCE
>  #include <stdio.h>
>  #include <errno.h>
>  #include <unistd.h>
> -- 
> 2.42.0
> 
> 
> -- 
> Mailing list info: https://lists.linux.it/listinfo/ltp
Ma Xinjian Sept. 13, 2024, 4:07 a.m. UTC | #2
Hi Cyril

> Hi!
> > To get rid of error "‘MAP_ANONYMOUS’ undeclared (first use in this
> function)"
> > on some systems (Fedora 37, etc).
> 
> That does not sound right, the open posix testsuite must not depend on anything
> GNU specific.

I see. Thanks.
But I tested both on Fedora and Ubuntu, they reported the same error if using the params " -std=c99 -D_POSIX_C_SOURCE=200809L -D_XOPEN_SOURCE=700" for gcc.
How about manually defining MAP_ANONYMOUS like below?
diff --git a/testcases/open_posix_testsuite/conformance/interfaces/sem_timedwait/2-1.c b/testcases/open_posix_testsuite/conformance/interfaces/sem_timedwait/2-1.c
index 2eca8dff6..83d1894ec 100644
--- a/testcases/open_posix_testsuite/conformance/interfaces/sem_timedwait/2-1.c
+++ b/testcases/open_posix_testsuite/conformance/interfaces/sem_timedwait/2-1.c
@@ -27,6 +27,10 @@
 #define FUNCTION "sem_timedwait"
 #define ERROR_PREFIX "unexpected error: " FUNCTION " " TEST ": "

+#ifndef MAP_ANONYMOUS
+#define MAP_ANONYMOUS 0x20
+#endif
+
 int main(void)
 {
        sem_t *mysemp;

> Also MAP_ANONYMOUS is requiered to be there by POSIX so setting
> _GNU_SOURCE does not seem to be a good solution.

I checked the https://sourceware.org/glibc/manual/2.40/html_mono/libc.html#index-MAP_005fANONYMOUS
` MAP_ANONYMOUS ` is showed in GNU document, does this mean it follows the GNU rules?

Best regards
Ma
> 
> > Signed-off-by: Ma Xinjian <maxj.fnst@fujitsu.com>
> > ---
> >  .../conformance/interfaces/sem_timedwait/2-1.c                   | 1
> +
> >  1 file changed, 1 insertion(+)
> >
> > diff --git
> > a/testcases/open_posix_testsuite/conformance/interfaces/sem_timedwait/
> > 2-1.c
> > b/testcases/open_posix_testsuite/conformance/interfaces/sem_timedwait/
> > 2-1.c
> > index 2eca8dff6..4ccef7261 100644
> > ---
> > a/testcases/open_posix_testsuite/conformance/interfaces/sem_timedwait/
> > 2-1.c
> > +++ b/testcases/open_posix_testsuite/conformance/interfaces/sem_timedw
> > +++ ait/2-1.c
> > @@ -11,6 +11,7 @@
> >   */
> >
> >
> > +#define _GNU_SOURCE
> >  #include <stdio.h>
> >  #include <errno.h>
> >  #include <unistd.h>
> > --
> > 2.42.0
> >
> >
> > --
> > Mailing list info: https://lists.linux.it/listinfo/ltp
> 
> --
> Cyril Hrubis
> chrubis@suse.cz
Cyril Hrubis Sept. 17, 2024, 2:16 p.m. UTC | #3
Hi!
> > That does not sound right, the open posix testsuite must not depend on anything
> > GNU specific.
> 
> I see. Thanks.
> But I tested both on Fedora and Ubuntu, they reported the same error
> if using the params " -std=c99 -D_POSIX_C_SOURCE=200809L
> -D_XOPEN_SOURCE=700" for gcc.

That is certainly unexpected. I managed to reproduce this on Debian 12.

Looks that on certain systems the MMAP_ANONYMOUS seems to be guarded by
__USE_MISC. The __USE_MISC is defined in /usr/include/features.h and set
if _DEFAULT_SOURCE is set which is set by _GNU_SOURCE.

I did double check the POSIX and I was probably confusing MAP_PRIVATE
and MAP_ANONYMOUS, sorry. Looks like MAP_ANONYMOUS is indeed not a part
of POSIX.

> How about manually defining MAP_ANONYMOUS like below?

Does not seem to be a good solution either, that will work only on
Linux. The open posix testsuite is supposed to run on any POSIX
compatible OS.

I'm afraid that the only solution we can use is to allocate the shared
memory via the posix shm. That means to get the file descriptor for
mmap() from shm_open() (followed by shm_unlink()).
Ma Xinjian Sept. 19, 2024, 3:38 a.m. UTC | #4
Hi Cyril

> -----Original Message-----
> From: Cyril Hrubis <chrubis@suse.cz>
> Sent: 2024年9月17日 22:17
> To: Ma, Xinjian/马 新建 <maxj.fnst@fujitsu.com>
> Cc: ltp@lists.linux.it
> Subject: Re: [LTP] [PATCH] posix/conformance/interfaces/sem_timedwait/2-1:
> add _GNU_SOURCE define
> 
> Hi!
> > > That does not sound right, the open posix testsuite must not depend
> > > on anything GNU specific.
> >
> > I see. Thanks.
> > But I tested both on Fedora and Ubuntu, they reported the same error
> > if using the params " -std=c99 -D_POSIX_C_SOURCE=200809L
> > -D_XOPEN_SOURCE=700" for gcc.
> 
> That is certainly unexpected. I managed to reproduce this on Debian 12.
> 
> Looks that on certain systems the MMAP_ANONYMOUS seems to be guarded
> by __USE_MISC. The __USE_MISC is defined in /usr/include/features.h and set if
> _DEFAULT_SOURCE is set which is set by _GNU_SOURCE.
> 
> I did double check the POSIX and I was probably confusing MAP_PRIVATE and
> MAP_ANONYMOUS, sorry. Looks like MAP_ANONYMOUS is indeed not a part of
> POSIX.
> 
> > How about manually defining MAP_ANONYMOUS like below?
> 
> Does not seem to be a good solution either, that will work only on Linux. The
> open posix testsuite is supposed to run on any POSIX compatible OS.
> 
> I'm afraid that the only solution we can use is to allocate the shared memory via
> the posix shm. That means to get the file descriptor for
> mmap() from shm_open() (followed by shm_unlink()).

Thank you for the suggestion. I sent a new patch, PTAL.
https://lore.kernel.org/ltp/20240919032729.458711-1-maxj.fnst@fujitsu.com/T/#u

Best regards,
Ma
> 
> --
> Cyril Hrubis
> chrubis@suse.cz
diff mbox series

Patch

diff --git a/testcases/open_posix_testsuite/conformance/interfaces/sem_timedwait/2-1.c b/testcases/open_posix_testsuite/conformance/interfaces/sem_timedwait/2-1.c
index 2eca8dff6..4ccef7261 100644
--- a/testcases/open_posix_testsuite/conformance/interfaces/sem_timedwait/2-1.c
+++ b/testcases/open_posix_testsuite/conformance/interfaces/sem_timedwait/2-1.c
@@ -11,6 +11,7 @@ 
  */
 
 
+#define _GNU_SOURCE
 #include <stdio.h>
 #include <errno.h>
 #include <unistd.h>