Message ID | 570CDEE6.3030808@redhat.com |
---|---|
State | New |
Headers | show |
Florian Weimer <fweimer@redhat.com> writes: > 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. No, the problem is that it is built with MODULE_NAME=libc. It should be nonlib, so it needs to be put on test-extras (and on extra-test-objs to get dependency right). Andreas.
On 04/12/2016 02:16 PM, Andreas Schwab wrote: > Florian Weimer <fweimer@redhat.com> writes: > >> 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. > > No, the problem is that it is built with MODULE_NAME=libc. It should be > nonlib, so it needs to be put on test-extras (and on extra-test-objs to > get dependency right). Thanks, this fixed the build issue for me, also for my actual test. 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; +}