This is the mail archive of the mailing list for the glibc project.

Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Building tests from multiple object files

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 I have not been able to figure out which of the inclusions triggered this.

Is there a quick fix for this?

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;
+use_errno (int c)
+  int e = errno;
+  errno = c;
+  return e;

Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]