libsframe: testsuite: Fix testsuite build on Solaris [PR33168]

As reported in PR libsframe/33168, the libsframe tests don't build on
Solaris.  The failure is

In file included from libsframe/testsuite/libsframe.decode/be-flipping.c:28:
/usr/include/dejagnu.h:48:1: error: conflicting types for ‘wait’; have ‘void(void)’
   48 | wait (void)
      | ^~~~
In file included from /usr/include/stdlib.h:16,
                 from libsframe/testsuite/libsframe.decode/be-flipping.c:21:
/usr/include/sys/wait.h:85:14: note: previous declaration of ‘wait’ with type ‘pid_t(int *)’ {aka ‘long int(int *)’}
   85 | extern pid_t wait(int *);
      |              ^~~~

We have a combination of two factors here:

* Solaris <stdlib.h> has

  and configure.ac predefines __EXTENSIONS__ due to the use of
  AC_USE_SYSTEM_EXTENSIONS.

* This conflicts with <dejagnu.h>'s definition

void
wait (void)
{
...
}

While this version of wait was removed in upstream DejaGnu, the removal
only happened after the latest release, 1.6.3.

To avoid this, I've moved all testsuite includes into a new
sframe-test.h, adding a workaround for the wait conflict.

-Wall and -I$(srcdir) have been removed from AM_CPPFLAGS since they
don't seem to be needed.  To fix the Makefile fragment duplication, the
local.mk files now use $(testsuite_LDADD) and $(testsuite_CPPFLAGS)
throughout.

Tested on {i386,amd64}-pc-solaris2.11, {sparc,sparcv9}-sun-solaris2.11,
{x86_64,i686}-pc-linux-gnu, and amd64-pc-freebsd14.0.

Coauthored-By: Alan Modra <amodra@gmail.com>

2025-08-31  Rainer Orth  <ro@CeBiTec.Uni-Bielefeld.DE>
	    Alan Modra  <amodra@gmail.com>

	libsframe:
	PR libsframe/33168
	* testsuite/sframe-test.h: New file.
	* testsuite/libsframe.decode/be-flipping.c: Replace includes by
	sframe-test.h.
	* testsuite/libsframe.decode/frecnt-1.c: Likewise.
	* testsuite/libsframe.decode/frecnt-2.c: Likewise.
	* testsuite/libsframe.encode/encode-1.c: Likewise.
	* testsuite/libsframe.find/findfre-1.c: Likewise.
	* testsuite/libsframe.find/findfunc-1.c: Likewise.
	* testsuite/libsframe.find/plt-findfre-1.c: Likewise.
	* testsuite/libsframe.find/plt-findfre-2.c: Likewise.

	* Makefile.am (AM_CPPFLAGS): Remove -I$(srcdir).
	* Makefile.in: Regenerate.
	* testsuite/local.mk (testsuite_LDADD): New variable.
	(testsuite_CPPFLAGS): Likewise.
	* testsuite/libsframe.decode/local.mk: Use $(testsuite_LDADD),
	$(testsuite_CPPFLAGS).
	* testsuite/libsframe.encode/local.mk: Likewise.
	* testsuite/libsframe.find/local.mk: Likewise.
This commit is contained in:
Rainer Orth
2025-09-12 09:50:34 +02:00
parent e0e92df920
commit 13793e3983
15 changed files with 98 additions and 135 deletions

View File

@@ -27,7 +27,7 @@ MAINTAINERCLEANFILES =
INCDIR = $(srcdir)/../include
# include libctf for swap.h
AM_CPPFLAGS = -I$(srcdir) -I$(srcdir)/../include -I$(srcdir)/../libctf
AM_CPPFLAGS = -I$(srcdir)/../include -I$(srcdir)/../libctf
AM_CFLAGS = @ac_libsframe_warn_cflags@
libsframe_version_info = -version-info `grep -v '^\#' $(srcdir)/libtool-version`
# libsframe does not restrict the set of exported symbols. So, if linker does

View File

@@ -201,42 +201,37 @@ am_testsuite_libsframe_decode_be_flipping_OBJECTS = testsuite/libsframe.decode/t
testsuite_libsframe_decode_be_flipping_OBJECTS = \
$(am_testsuite_libsframe_decode_be_flipping_OBJECTS)
testsuite_libsframe_decode_be_flipping_DEPENDENCIES = \
${top_builddir}/libsframe.la
$(testsuite_LDADD)
am_testsuite_libsframe_decode_frecnt_1_OBJECTS = testsuite/libsframe.decode/testsuite_libsframe_decode_frecnt_1-frecnt-1.$(OBJEXT)
testsuite_libsframe_decode_frecnt_1_OBJECTS = \
$(am_testsuite_libsframe_decode_frecnt_1_OBJECTS)
testsuite_libsframe_decode_frecnt_1_DEPENDENCIES = \
${top_builddir}/libsframe.la
testsuite_libsframe_decode_frecnt_1_DEPENDENCIES = $(testsuite_LDADD)
am_testsuite_libsframe_decode_frecnt_2_OBJECTS = testsuite/libsframe.decode/testsuite_libsframe_decode_frecnt_2-frecnt-2.$(OBJEXT)
testsuite_libsframe_decode_frecnt_2_OBJECTS = \
$(am_testsuite_libsframe_decode_frecnt_2_OBJECTS)
testsuite_libsframe_decode_frecnt_2_DEPENDENCIES = \
${top_builddir}/libsframe.la
testsuite_libsframe_decode_frecnt_2_DEPENDENCIES = $(testsuite_LDADD)
am_testsuite_libsframe_encode_encode_1_OBJECTS = testsuite/libsframe.encode/testsuite_libsframe_encode_encode_1-encode-1.$(OBJEXT)
testsuite_libsframe_encode_encode_1_OBJECTS = \
$(am_testsuite_libsframe_encode_encode_1_OBJECTS)
testsuite_libsframe_encode_encode_1_DEPENDENCIES = \
${top_builddir}/libsframe.la
testsuite_libsframe_encode_encode_1_DEPENDENCIES = $(testsuite_LDADD)
am_testsuite_libsframe_find_findfre_1_OBJECTS = testsuite/libsframe.find/testsuite_libsframe_find_findfre_1-findfre-1.$(OBJEXT)
testsuite_libsframe_find_findfre_1_OBJECTS = \
$(am_testsuite_libsframe_find_findfre_1_OBJECTS)
testsuite_libsframe_find_findfre_1_DEPENDENCIES = \
${top_builddir}/libsframe.la
testsuite_libsframe_find_findfre_1_DEPENDENCIES = $(testsuite_LDADD)
am_testsuite_libsframe_find_findfunc_1_OBJECTS = testsuite/libsframe.find/testsuite_libsframe_find_findfunc_1-findfunc-1.$(OBJEXT)
testsuite_libsframe_find_findfunc_1_OBJECTS = \
$(am_testsuite_libsframe_find_findfunc_1_OBJECTS)
testsuite_libsframe_find_findfunc_1_DEPENDENCIES = \
${top_builddir}/libsframe.la
testsuite_libsframe_find_findfunc_1_DEPENDENCIES = $(testsuite_LDADD)
am_testsuite_libsframe_find_plt_findfre_1_OBJECTS = testsuite/libsframe.find/testsuite_libsframe_find_plt_findfre_1-plt-findfre-1.$(OBJEXT)
testsuite_libsframe_find_plt_findfre_1_OBJECTS = \
$(am_testsuite_libsframe_find_plt_findfre_1_OBJECTS)
testsuite_libsframe_find_plt_findfre_1_DEPENDENCIES = \
${top_builddir}/libsframe.la
$(testsuite_LDADD)
am_testsuite_libsframe_find_plt_findfre_2_OBJECTS = testsuite/libsframe.find/testsuite_libsframe_find_plt_findfre_2-plt-findfre-2.$(OBJEXT)
testsuite_libsframe_find_plt_findfre_2_OBJECTS = \
$(am_testsuite_libsframe_find_plt_findfre_2_OBJECTS)
testsuite_libsframe_find_plt_findfre_2_DEPENDENCIES = \
${top_builddir}/libsframe.la
$(testsuite_LDADD)
AM_V_P = $(am__v_P_@AM_V@)
am__v_P_ = $(am__v_P_@AM_DEFAULT_V@)
am__v_P_0 = false
@@ -535,7 +530,7 @@ DISTCLEANFILES = $(am__append_2)
MAINTAINERCLEANFILES = $(am__append_3)
INCDIR = $(srcdir)/../include
# include libctf for swap.h
AM_CPPFLAGS = -I$(srcdir) -I$(srcdir)/../include -I$(srcdir)/../libctf
AM_CPPFLAGS = -I$(srcdir)/../include -I$(srcdir)/../libctf
AM_CFLAGS = @ac_libsframe_warn_cflags@
libsframe_version_info = -version-info `grep -v '^\#' $(srcdir)/libtool-version`
@HAVE_LD_VERSION_SCRIPT_TRUE@@HAVE_SOLARIS_LD_FALSE@libsframe_version_script = -Wl,--version-script=$(srcdir)/libsframe.ver
@@ -557,30 +552,32 @@ EXTRA_DIST = libtool-version libsframe.ver
EXPECT = expect
RUNTEST = runtest
RUNTESTFLAGS =
testsuite_LDADD = $(top_builddir)/libsframe.la
testsuite_CPPFLAGS = -I$(srcdir)/testsuite -I$(srcdir)/../include
testsuite_libsframe_decode_be_flipping_SOURCES = testsuite/libsframe.decode/be-flipping.c
testsuite_libsframe_decode_be_flipping_LDADD = ${top_builddir}/libsframe.la
testsuite_libsframe_decode_be_flipping_CPPFLAGS = -I${top_srcdir}/../include -Wall
testsuite_libsframe_decode_be_flipping_LDADD = $(testsuite_LDADD)
testsuite_libsframe_decode_be_flipping_CPPFLAGS = $(testsuite_CPPFLAGS)
testsuite_libsframe_decode_frecnt_1_SOURCES = testsuite/libsframe.decode/frecnt-1.c
testsuite_libsframe_decode_frecnt_1_LDADD = ${top_builddir}/libsframe.la
testsuite_libsframe_decode_frecnt_1_CPPFLAGS = -I${top_srcdir}/../include -Wall
testsuite_libsframe_decode_frecnt_1_LDADD = $(testsuite_LDADD)
testsuite_libsframe_decode_frecnt_1_CPPFLAGS = $(testsuite_CPPFLAGS)
testsuite_libsframe_decode_frecnt_2_SOURCES = testsuite/libsframe.decode/frecnt-2.c
testsuite_libsframe_decode_frecnt_2_LDADD = ${top_builddir}/libsframe.la
testsuite_libsframe_decode_frecnt_2_CPPFLAGS = -I${top_srcdir}/../include -Wall
testsuite_libsframe_decode_frecnt_2_LDADD = $(testsuite_LDADD)
testsuite_libsframe_decode_frecnt_2_CPPFLAGS = $(testsuite_CPPFLAGS)
testsuite_libsframe_encode_encode_1_SOURCES = testsuite/libsframe.encode/encode-1.c
testsuite_libsframe_encode_encode_1_LDADD = ${top_builddir}/libsframe.la
testsuite_libsframe_encode_encode_1_CPPFLAGS = -I${top_srcdir}/../include -Wall
testsuite_libsframe_encode_encode_1_LDADD = $(testsuite_LDADD)
testsuite_libsframe_encode_encode_1_CPPFLAGS = $(testsuite_CPPFLAGS)
testsuite_libsframe_find_findfre_1_SOURCES = testsuite/libsframe.find/findfre-1.c
testsuite_libsframe_find_findfre_1_LDADD = ${top_builddir}/libsframe.la
testsuite_libsframe_find_findfre_1_CPPFLAGS = -I${top_srcdir}/../include -Wall
testsuite_libsframe_find_findfre_1_LDADD = $(testsuite_LDADD)
testsuite_libsframe_find_findfre_1_CPPFLAGS = $(testsuite_CPPFLAGS)
testsuite_libsframe_find_findfunc_1_SOURCES = testsuite/libsframe.find/findfunc-1.c
testsuite_libsframe_find_findfunc_1_LDADD = ${top_builddir}/libsframe.la
testsuite_libsframe_find_findfunc_1_CPPFLAGS = -I${top_srcdir}/../include -Wall
testsuite_libsframe_find_findfunc_1_LDADD = $(testsuite_LDADD)
testsuite_libsframe_find_findfunc_1_CPPFLAGS = $(testsuite_CPPFLAGS)
testsuite_libsframe_find_plt_findfre_1_SOURCES = testsuite/libsframe.find/plt-findfre-1.c
testsuite_libsframe_find_plt_findfre_1_LDADD = ${top_builddir}/libsframe.la
testsuite_libsframe_find_plt_findfre_1_CPPFLAGS = -I${top_srcdir}/../include -Wall
testsuite_libsframe_find_plt_findfre_1_LDADD = $(testsuite_LDADD)
testsuite_libsframe_find_plt_findfre_1_CPPFLAGS = $(testsuite_CPPFLAGS)
testsuite_libsframe_find_plt_findfre_2_SOURCES = testsuite/libsframe.find/plt-findfre-2.c
testsuite_libsframe_find_plt_findfre_2_LDADD = ${top_builddir}/libsframe.la
testsuite_libsframe_find_plt_findfre_2_CPPFLAGS = -I${top_srcdir}/../include -Wall
testsuite_libsframe_find_plt_findfre_2_LDADD = $(testsuite_LDADD)
testsuite_libsframe_find_plt_findfre_2_CPPFLAGS = $(testsuite_CPPFLAGS)
all: config.h
$(MAKE) $(AM_MAKEFLAGS) all-am

View File

@@ -15,17 +15,7 @@
You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>. */
#include "config.h"
#include <stdio.h>
#include <stdlib.h>
#include <sys/stat.h>
#include "sframe-api.h"
/* DejaGnu should not use gnulib's vsnprintf replacement here. */
#undef vsnprintf
#include <dejagnu.h>
#include "sframe-test.h"
/* SFrame info from the following source (1 fde 5 fres):
static int cnt;

View File

@@ -15,17 +15,7 @@
You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>. */
#include "config.h"
#include <stdio.h>
#include <stdlib.h>
#include <sys/stat.h>
#include "sframe-api.h"
/* DejaGnu should not use gnulib's vsnprintf replacement here. */
#undef vsnprintf
#include <dejagnu.h>
#include "sframe-test.h"
/*
* SFrame info from the following source (1 fde 4 fres):

View File

@@ -15,17 +15,7 @@
You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>. */
#include "config.h"
#include <stdio.h>
#include <stdlib.h>
#include <sys/stat.h>
#include "sframe-api.h"
/* DejaGnu should not use gnulib's vsnprintf replacement here. */
#undef vsnprintf
#include <dejagnu.h>
#include "sframe-test.h"
/*
* SFrame info from the following source (2 fde 8 fres):

View File

@@ -4,13 +4,13 @@ if HAVE_COMPAT_DEJAGNU
endif
%C%_be_flipping_SOURCES = %D%/be-flipping.c
%C%_be_flipping_LDADD = ${top_builddir}/libsframe.la
%C%_be_flipping_CPPFLAGS = -I${top_srcdir}/../include -Wall
%C%_be_flipping_LDADD = $(testsuite_LDADD)
%C%_be_flipping_CPPFLAGS = $(testsuite_CPPFLAGS)
%C%_frecnt_1_SOURCES = %D%/frecnt-1.c
%C%_frecnt_1_LDADD = ${top_builddir}/libsframe.la
%C%_frecnt_1_CPPFLAGS = -I${top_srcdir}/../include -Wall
%C%_frecnt_1_LDADD = $(testsuite_LDADD)
%C%_frecnt_1_CPPFLAGS = $(testsuite_CPPFLAGS)
%C%_frecnt_2_SOURCES = %D%/frecnt-2.c
%C%_frecnt_2_LDADD = ${top_builddir}/libsframe.la
%C%_frecnt_2_CPPFLAGS = -I${top_srcdir}/../include -Wall
%C%_frecnt_2_LDADD = $(testsuite_LDADD)
%C%_frecnt_2_CPPFLAGS = $(testsuite_CPPFLAGS)

View File

@@ -15,17 +15,7 @@
You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>. */
#include "config.h"
#include <stdlib.h>
#include <string.h>
#include <sys/stat.h>
#include "sframe-api.h"
/* DejaGnu should not use gnulib's vsnprintf replacement here. */
#undef vsnprintf
#include <dejagnu.h>
#include "sframe-test.h"
static int
add_fde1 (sframe_encoder_ctx *encode, uint32_t start_pc_vaddr,

View File

@@ -3,5 +3,5 @@ if HAVE_COMPAT_DEJAGNU
endif
%C%_encode_1_SOURCES = %D%/encode-1.c
%C%_encode_1_LDADD = ${top_builddir}/libsframe.la
%C%_encode_1_CPPFLAGS = -I${top_srcdir}/../include -Wall
%C%_encode_1_LDADD = $(testsuite_LDADD)
%C%_encode_1_CPPFLAGS = $(testsuite_CPPFLAGS)

View File

@@ -15,17 +15,7 @@
You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>. */
#include "config.h"
#include <stdlib.h>
#include <string.h>
#include <sys/stat.h>
#include "sframe-api.h"
/* DejaGnu should not use gnulib's vsnprintf replacement here. */
#undef vsnprintf
#include <dejagnu.h>
#include "sframe-test.h"
static int
add_fde1 (sframe_encoder_ctx *encode, uint32_t start_pc_vaddr,

View File

@@ -22,17 +22,7 @@
The tests in here stress the sframe_get_funcdesc_with_addr API via calls to
the sframe_find_fre (). */
#include "config.h"
#include <stdlib.h>
#include <string.h>
#include <sys/stat.h>
#include "sframe-api.h"
/* DejaGnu should not use gnulib's vsnprintf replacement here. */
#undef vsnprintf
#include <dejagnu.h>
#include "sframe-test.h"
static int
add_fde1 (sframe_encoder_ctx *encode, uint32_t start_pc_vaddr,

View File

@@ -4,17 +4,17 @@ if HAVE_COMPAT_DEJAGNU
endif
%C%_findfre_1_SOURCES = %D%/findfre-1.c
%C%_findfre_1_LDADD = ${top_builddir}/libsframe.la
%C%_findfre_1_CPPFLAGS = -I${top_srcdir}/../include -Wall
%C%_findfre_1_LDADD = $(testsuite_LDADD)
%C%_findfre_1_CPPFLAGS = $(testsuite_CPPFLAGS)
%C%_findfunc_1_SOURCES = %D%/findfunc-1.c
%C%_findfunc_1_LDADD = ${top_builddir}/libsframe.la
%C%_findfunc_1_CPPFLAGS = -I${top_srcdir}/../include -Wall
%C%_findfunc_1_LDADD = $(testsuite_LDADD)
%C%_findfunc_1_CPPFLAGS = $(testsuite_CPPFLAGS)
%C%_plt_findfre_1_SOURCES = %D%/plt-findfre-1.c
%C%_plt_findfre_1_LDADD = ${top_builddir}/libsframe.la
%C%_plt_findfre_1_CPPFLAGS = -I${top_srcdir}/../include -Wall
%C%_plt_findfre_1_LDADD = $(testsuite_LDADD)
%C%_plt_findfre_1_CPPFLAGS = $(testsuite_CPPFLAGS)
%C%_plt_findfre_2_SOURCES = %D%/plt-findfre-2.c
%C%_plt_findfre_2_LDADD = ${top_builddir}/libsframe.la
%C%_plt_findfre_2_CPPFLAGS = -I${top_srcdir}/../include -Wall
%C%_plt_findfre_2_LDADD = $(testsuite_LDADD)
%C%_plt_findfre_2_CPPFLAGS = $(testsuite_CPPFLAGS)

View File

@@ -15,17 +15,7 @@
You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>. */
#include "config.h"
#include <stdlib.h>
#include <string.h>
#include <sys/stat.h>
#include "sframe-api.h"
/* DejaGnu should not use gnulib's vsnprintf replacement here. */
#undef vsnprintf
#include <dejagnu.h>
#include "sframe-test.h"
static int
add_plt_fde1 (sframe_encoder_ctx *ectx, uint32_t plt_vaddr,

View File

@@ -16,17 +16,7 @@
You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>. */
#include "config.h"
#include <stdlib.h>
#include <string.h>
#include <sys/stat.h>
#include "sframe-api.h"
/* DejaGnu should not use gnulib's vsnprintf replacement here. */
#undef vsnprintf
#include <dejagnu.h>
#include "sframe-test.h"
/* s390x-specific size in bytes of plt0 and pltN. */
#define PLT_SIZE 32

View File

@@ -19,6 +19,9 @@ check-DEJAGNU: site.exp
else echo "WARNING: could not find \`runtest'" 1>&2; :;\
fi
testsuite_LDADD = $(top_builddir)/libsframe.la
testsuite_CPPFLAGS = -I$(srcdir)/testsuite -I$(srcdir)/../include
# libsframe encoder/decoder/find testsuite
include %D%/libsframe.decode/local.mk
include %D%/libsframe.encode/local.mk

View File

@@ -0,0 +1,43 @@
/* sframe-test.h -- Common libsframe testsuite header.
Copyright (C) 2022-2025 Free Software Foundation, Inc.
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>. */
#ifndef _SFRAME_TEST_H
#define _SFRAME_TEST_H
#include "config.h"
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/stat.h>
#include "sframe-api.h"
/* DejaGnu should not use gnulib's vsnprintf replacement here. */
#undef vsnprintf
/* PR 33168: Solaris <sys/wait.h> with __EXTENSIONS__ defined gets a
declaration of wait(). This conflicts with <dejagnu.h>'s wait
definition that is only removed after DejaGnu 1.6.3. */
#define wait dg_wait
/* Add prototype to avoid warning. */
void wait (void);
#include <dejagnu.h>
#undef wait
#endif /* _SFRAME_TEST_H */