1
0
mirror of https://sourceware.org/git/glibc.git synced 2025-04-19 01:04:13 +03:00
glibc/support/links-dso-program-c.c
Florian Weimer 3e2be87832 support: Link links-dso-program-c against libgcc_s
If C++ support is not available, links-dso-program-c is used
instead of the C++ version.  The C version was not linked against
libgcc_s, which meant that thread cancellation and the backtrace
function did not work in containers tests in that situation.

Reviewed-by: Sam James <sam@gentoo.org>
2025-03-21 11:45:00 +01:00

47 lines
1.2 KiB
C

#include <stdio.h>
#include <dlfcn.h>
/* makedb needs selinux dso's. */
#ifdef HAVE_SELINUX
# include <selinux/selinux.h>
#endif
/* The purpose of this file is to indicate to the build system which
shared objects need to be copied into the testroot, such as gcc or
selinux support libraries. This program is never executed, only
scanned for dependencies on shared objects, so the code below may
seem weird - it's written to survive gcc optimization and force
such dependencies.
*/
/* Use attribute cleanup to force linking against libgcc_s. */
static void
cleanup_function (int *ignored)
{
puts ("cleanup performed");
}
void
invoke_callback (void (*callback) (int *))
{
__attribute__ ((cleanup (cleanup_function))) int i = 0;
callback (&i);
}
int
main (int argc, char **argv)
{
/* Complexity to keep gcc from optimizing this away. */
printf ("This is a test %s.\n", argc > 1 ? argv[1] : "null");
#ifdef HAVE_SELINUX
/* This exists to force libselinux.so to be required. */
printf ("selinux %d\n", is_selinux_enabled ());
#endif
/* Prevent invoke_callback from being optimized away. */
{
Dl_info dli;
dladdr (invoke_callback, &dli);
}
return 0;
}