This is the mail archive of the
libc-alpha@sourceware.org
mailing list for the glibc project.
Building tests from multiple object files
- From: Florian Weimer <fweimer at redhat dot com>
- To: GNU C Library <libc-alpha at sourceware dot org>
- Date: Tue, 12 Apr 2016 13:41:26 +0200
- Subject: Building tests from multiple object files
- Authentication-results: sourceware.org; auth=none
I'm still working on upstreaming our libresolv and NSS tests. During
that, I noticed the following.
The glibc makefiles do not provide a simple way to assemble a test
binary from multiple object files. One way to see this is to apply the
attached harmless patch and then run
make subdirs=elf check
(or whatever you do to run the test suite). Linking the test fails with:
/home/fweimer/src/gnu/glibc/build/elf/tst-tlsalign-vars.o: In function
`use_errno':
/home/fweimer/src/gnu/glibc/git/elf/tst-tlsalign-vars.c:36: undefined
reference to `__libc_errno'
collect2: error: ld returned 1 exit status
../Rules:154: recipe for target
'/home/fweimer/src/gnu/glibc/build/elf/tst-tlsalign-extern' failed
The apparent cause is that the second object file for the test was built
against internal glibc headers.
The incorrect make rule for the elf/tst-tlsalign-vars.o target is
created by o-iterator.mk. I have not been able to figure out which of
the inclusions triggered this.
Is there a quick fix for this?
Thanks,
Florian
diff --git a/elf/tst-tlsalign-vars.c b/elf/tst-tlsalign-vars.c
index 01b3501..840b079 100644
--- a/elf/tst-tlsalign-vars.c
+++ b/elf/tst-tlsalign-vars.c
@@ -2,6 +2,8 @@
purpose of the test that these definitions be in a separate translation
unit from the code using the variables. */
+#include <errno.h>
+
__thread int tdata1 = 1;
__thread int tdata2 __attribute__ ((aligned (0x10))) = 2;
__thread int tdata3 __attribute__ ((aligned (0x1000))) = 4;
@@ -26,3 +28,12 @@ unused (void)
tbss2 = -5;
tbss3 = -6;
}
+
+
+int
+use_errno (int c)
+{
+ int e = errno;
+ errno = c;
+ return e;
+}