mirror of git://sourceware.org/git/glibc.git
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>
This commit is contained in:
parent
090dfa40a5
commit
3e2be87832
|
@ -281,6 +281,8 @@ CFLAGS-temp_file.c += -D_FILE_OFFSET_BITS=64 -D_TIME_BITS=64
|
||||||
|
|
||||||
ifeq (,$(CXX))
|
ifeq (,$(CXX))
|
||||||
LINKS_DSO_PROGRAM = links-dso-program-c
|
LINKS_DSO_PROGRAM = links-dso-program-c
|
||||||
|
CFLAGS-links-dso-program-c.c += -fexceptions
|
||||||
|
LDLIBS-links-dso-program-c = -lgcc -lgcc_s $(libunwind)
|
||||||
else
|
else
|
||||||
LINKS_DSO_PROGRAM = links-dso-program
|
LINKS_DSO_PROGRAM = links-dso-program
|
||||||
LDLIBS-links-dso-program = -lstdc++ -lgcc -lgcc_s $(libunwind)
|
LDLIBS-links-dso-program = -lstdc++ -lgcc -lgcc_s $(libunwind)
|
||||||
|
|
|
@ -1,4 +1,5 @@
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
|
#include <dlfcn.h>
|
||||||
|
|
||||||
/* makedb needs selinux dso's. */
|
/* makedb needs selinux dso's. */
|
||||||
#ifdef HAVE_SELINUX
|
#ifdef HAVE_SELINUX
|
||||||
|
@ -13,6 +14,20 @@
|
||||||
such dependencies.
|
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
|
int
|
||||||
main (int argc, char **argv)
|
main (int argc, char **argv)
|
||||||
{
|
{
|
||||||
|
@ -22,5 +37,10 @@ main (int argc, char **argv)
|
||||||
/* This exists to force libselinux.so to be required. */
|
/* This exists to force libselinux.so to be required. */
|
||||||
printf ("selinux %d\n", is_selinux_enabled ());
|
printf ("selinux %d\n", is_selinux_enabled ());
|
||||||
#endif
|
#endif
|
||||||
|
/* Prevent invoke_callback from being optimized away. */
|
||||||
|
{
|
||||||
|
Dl_info dli;
|
||||||
|
dladdr (invoke_callback, &dli);
|
||||||
|
}
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue