Add more headers to include/ for conform tests
diff mbox

Message ID alpine.DEB.2.10.1411272041480.15307@digraph.polyomino.org.uk
State New
Headers show

Commit Message

Joseph Myers Nov. 27, 2014, 8:42 p.m. UTC
Carlos reported failures in conform/ tests in environments where the
compiler used could only find headers in glibc's source and build
trees, not any previously installed headers
<https://sourceware.org/ml/libc-alpha/2014-09/msg00040.html>.

This patch adds wrappers for the affected headers to include/, which
is the normal way to make headers visible when building or testing in
directories other than the one containing the header (I suppose these
headers weren't needed in any such directories except conform/, or
other build or test failures would have resulted).  I believe the same
issue applies at least to regexp.h and re_comp.h - we don't currently
have conform/ expectations for those, but when such expectations are
added we'll also need to add header wrappers.

The semaphore.h wrapper just includes nptl/semaphore.h - there's a
question about whether this is logically correct, given the
possibility of other thread library implementations.  I suggested a
couple of possible alternative approaches in
<https://sourceware.org/ml/libc-alpha/2014-09/msg00046.html>.

Tested for x86_64 (testsuite, and that installed stripped shared
libraries are unchanged by the patch).  I did *not* test a
configuration such as that in which Carlos saw failure.

2014-11-27  Joseph Myers  <joseph@codesourcery.com>

	* include/cpio.h: New file.
	* include/fmtmsg.h: Likewise.
	* include/semaphore.h: Likewise.

Comments

Carlos O'Donell Nov. 28, 2014, 7:28 p.m. UTC | #1
On 11/27/2014 03:42 PM, Joseph Myers wrote:
> Carlos reported failures in conform/ tests in environments where the
> compiler used could only find headers in glibc's source and build
> trees, not any previously installed headers
> <https://sourceware.org/ml/libc-alpha/2014-09/msg00040.html>.
> 
> This patch adds wrappers for the affected headers to include/, which
> is the normal way to make headers visible when building or testing in
> directories other than the one containing the header (I suppose these
> headers weren't needed in any such directories except conform/, or
> other build or test failures would have resulted).  I believe the same
> issue applies at least to regexp.h and re_comp.h - we don't currently
> have conform/ expectations for those, but when such expectations are
> added we'll also need to add header wrappers.
> 
> The semaphore.h wrapper just includes nptl/semaphore.h - there's a
> question about whether this is logically correct, given the
> possibility of other thread library implementations.  I suggested a
> couple of possible alternative approaches in
> <https://sourceware.org/ml/libc-alpha/2014-09/msg00046.html>.
> 
> Tested for x86_64 (testsuite, and that installed stripped shared
> libraries are unchanged by the patch).  I did *not* test a
> configuration such as that in which Carlos saw failure.
> 
> 2014-11-27  Joseph Myers  <joseph@codesourcery.com>
> 
> 	* include/cpio.h: New file.
> 	* include/fmtmsg.h: Likewise.
> 	* include/semaphore.h: Likewise.

This fixes the failures I see on Fedora 20.

Now I have only 200+ linknamespace failures :-)

Cheers,
Carlos.
Joseph Myers Nov. 28, 2014, 11:52 p.m. UTC | #2
On Fri, 28 Nov 2014, Carlos O'Donell wrote:

> Now I have only 200+ linknamespace failures :-)

What are those failures (what error messages where)?  At least on 
x86_64/x86, all the non-XFAILed tests ought to be passing (though the same 
include/ patch may be needed for them).
Carlos O'Donell Nov. 29, 2014, 12:18 a.m. UTC | #3
On 11/28/2014 06:52 PM, Joseph Myers wrote:
> On Fri, 28 Nov 2014, Carlos O'Donell wrote:
> 
>> Now I have only 200+ linknamespace failures :-)
> 
> What are those failures (what error messages where)?  At least on 
> x86_64/x86, all the non-XFAILed tests ought to be passing (though the same 
> include/ patch may be needed for them).

As an example on 32-bit ARM:

conform/ISO/assert.h/linknamespace.out:

[initial] __assert_fail -> [libc.a(assert.o)] __fxprintf -> [libc.a(fxprintf.o)] __vfwprintf -> [libc.a(vfwprintf.o)] _IO_fwide -> [libc.a(iofwide.o)] __pointer_chk_guard_local -> [libc.a(libc-start.o)] __pthread_initialize_minimal -> [libpthread.a(nptl-init.o)] __nptl_setxid_error -> [libpthread.a(pthread_create.o)] __resp -> [libc.a(res_libc.o)] __res_iclose -> [libc.a(res_init.o)] fgets_unlocked
[initial] __assert_fail -> [libc.a(assert.o)] __fxprintf -> [libc.a(fxprintf.o)] __vfwprintf -> [libc.a(vfwprintf.o)] _IO_fwide -> [libc.a(iofwide.o)] __pointer_chk_guard_local -> [libc.a(libc-start.o)] __pthread_initialize_minimal -> [libpthread.a(nptl-init.o)] __nptl_setxid_error -> [libpthread.a(pthread_create.o)] __resp -> [libc.a(res_libc.o)] __res_iclose -> [libc.a(res_init.o)] if_nametoindex -> [libc.a(if_index.o)] __netlink_close -> [libc.a(ifaddrs.o)] freeifaddrs
[initial] __assert_fail -> [libc.a(assert.o)] __fxprintf -> [libc.a(fxprintf.o)] __vfwprintf -> [libc.a(vfwprintf.o)] _IO_fwide -> [libc.a(iofwide.o)] __pointer_chk_guard_local -> [libc.a(libc-start.o)] __pthread_initialize_minimal -> [libpthread.a(nptl-init.o)] __nptl_setxid_error -> [libpthread.a(pthread_create.o)] __resp -> [libc.a(res_libc.o)] __res_iclose -> [libc.a(res_init.o)] if_nametoindex -> [libc.a(if_index.o)] __netlink_close -> [libc.a(ifaddrs.o)] getifaddrs
[initial] __assert_fail -> [libc.a(assert.o)] __fxprintf -> [libc.a(fxprintf.o)] __vfwprintf -> [libc.a(vfwprintf.o)] _IO_fwide -> [libc.a(iofwide.o)] __pointer_chk_guard_local -> [libc.a(libc-start.o)] __pthread_initialize_minimal -> [libpthread.a(nptl-init.o)] __nptl_setxid_error -> [libpthread.a(pthread_create.o)] __resp -> [libc.a(res_libc.o)] __res_iclose -> [libc.a(res_init.o)] if_nametoindex -> [libc.a(if_index.o)] if_freenameindex
[initial] __assert_fail -> [libc.a(assert.o)] __fxprintf -> [libc.a(fxprintf.o)] __vfwprintf -> [libc.a(vfwprintf.o)] _IO_fwide -> [libc.a(iofwide.o)] __pointer_chk_guard_local -> [libc.a(libc-start.o)] __pthread_initialize_minimal -> [libpthread.a(nptl-init.o)] __nptl_setxid_error -> [libpthread.a(pthread_create.o)] __resp -> [libc.a(res_libc.o)] __res_iclose -> [libc.a(res_init.o)] if_nametoindex -> [libc.a(if_index.o)] if_indextoname
[initial] __assert_fail -> [libc.a(assert.o)] __fxprintf -> [libc.a(fxprintf.o)] __vfwprintf -> [libc.a(vfwprintf.o)] _IO_fwide -> [libc.a(iofwide.o)] __pointer_chk_guard_local -> [libc.a(libc-start.o)] __pthread_initialize_minimal -> [libpthread.a(nptl-init.o)] __nptl_setxid_error -> [libpthread.a(pthread_create.o)] __resp -> [libc.a(res_libc.o)] __res_iclose -> [libc.a(res_init.o)] if_nametoindex -> [libc.a(if_index.o)] if_nameindex
[initial] __assert_fail -> [libc.a(assert.o)] __fxprintf -> [libc.a(fxprintf.o)] __vfwprintf -> [libc.a(vfwprintf.o)] _IO_fwide -> [libc.a(iofwide.o)] __pointer_chk_guard_local -> [libc.a(libc-start.o)] __pthread_initialize_minimal -> [libpthread.a(nptl-init.o)] __nptl_setxid_error -> [libpthread.a(pthread_create.o)] __resp -> [libc.a(res_libc.o)] __res_iclose -> [libc.a(res_init.o)] if_nametoindex
[initial] __assert_fail -> [libc.a(assert.o)] __fxprintf -> [libc.a(fxprintf.o)] __vfwprintf -> [libc.a(vfwprintf.o)] _IO_fwide -> [libc.a(iofwide.o)] __pointer_chk_guard_local -> [libc.a(libc-start.o)] __pthread_initialize_minimal -> [libpthread.a(nptl-init.o)] __nptl_setxid_error -> [libpthread.a(pthread_create.o)] __resp -> [libc.a(res_libc.o)] __res_iclose -> [libc.a(res_init.o)] __inet_aton -> [libc.a(inet_addr.o)] inet_addr
[initial] __assert_fail -> [libc.a(assert.o)] __fxprintf -> [libc.a(fxprintf.o)] __vfwprintf -> [libc.a(vfwprintf.o)] _IO_fwide -> [libc.a(iofwide.o)] __pointer_chk_guard_local -> [libc.a(libc-start.o)] __pthread_initialize_minimal -> [libpthread.a(nptl-init.o)] __nptl_setxid_error -> [libpthread.a(pthread_create.o)] __resp -> [libc.a(res_libc.o)] __res_iclose -> [libc.a(res_init.o)] inet_makeaddr
[initial] __assert_fail -> [libc.a(assert.o)] __fxprintf -> [libc.a(fxprintf.o)] __vfwprintf -> [libc.a(vfwprintf.o)] _IO_fwide -> [libc.a(iofwide.o)] __pointer_chk_guard_local -> [libc.a(libc-start.o)] __pthread_initialize_minimal -> [libpthread.a(nptl-init.o)] __nptl_setxid_error -> [libpthread.a(pthread_create.o)] __resp -> [libc.a(res_libc.o)] __res_iclose -> [libc.a(res_init.o)] inet_pton
[initial] __assert_fail -> [libc.a(assert.o)] __fxprintf -> [libc.a(fxprintf.o)] __vfwprintf -> [libc.a(vfwprintf.o)] _IO_fwide -> [libc.a(iofwide.o)] __pointer_chk_guard_local -> [libc.a(libc-start.o)] __pthread_initialize_minimal -> [libpthread.a(nptl-init.o)] __nptl_setxid_error -> [libpthread.a(pthread_create.o)] mmap
[initial] __assert_fail -> [libc.a(assert.o)] __fxprintf -> [libc.a(fxprintf.o)] __vfwprintf -> [libc.a(vfwprintf.o)] _IO_fwide -> [libc.a(iofwide.o)] __pointer_chk_guard_local -> [libc.a(libc-start.o)] __pthread_initialize_minimal -> [libpthread.a(nptl-init.o)] __nptl_setxid_error -> [libpthread.a(pthread_create.o)] mprotect
[initial] __assert_fail -> [libc.a(assert.o)] __fxprintf -> [libc.a(fxprintf.o)] __vfwprintf -> [libc.a(vfwprintf.o)] _IO_fwide -> [libc.a(iofwide.o)] __pointer_chk_guard_local -> [libc.a(libc-start.o)] __pthread_initialize_minimal -> [libpthread.a(nptl-init.o)] __nptl_setxid_error -> [libpthread.a(pthread_create.o)] munmap
[initial] __assert_fail -> [libc.a(assert.o)] _dl_pagesize -> [libc.a(dl-support.o)] _dl_nothread_init_static_tls -> [libc.a(dl-reloc.o)] _dl_runtime_profile -> [libc.a(dl-trampoline.o)] _dl_call_pltexit -> [libc.a(dl-runtime.o)] _dl_mcount -> [libc.a(dl-profile.o)] __profil -> [libc.a(profil.o)] profil_counter
[initial] __assert_fail -> [libc.a(assert.o)] __fxprintf -> [libc.a(fxprintf.o)] __vfwprintf -> [libc.a(vfwprintf.o)] _IO_fwide -> [libc.a(iofwide.o)] __pointer_chk_guard_local -> [libc.a(libc-start.o)] __pthread_initialize_minimal -> [libpthread.a(nptl-init.o)] __nptl_setxid_error -> [libpthread.a(pthread_create.o)] pthread_cancel
[initial] __assert_fail -> [libc.a(assert.o)] __fxprintf -> [libc.a(fxprintf.o)] __vfwprintf -> [libc.a(vfwprintf.o)] _IO_fwide -> [libc.a(iofwide.o)] __pointer_chk_guard_local -> [libc.a(libc-start.o)] __pthread_initialize_minimal -> [libpthread.a(nptl-init.o)] __nptl_setxid_error -> [libpthread.a(pthread_create.o)] pthread_cancel -> [libpthread.a(pthread_cancel.o)] pthread_create
[initial] __assert_fail -> [libc.a(assert.o)] __fxprintf -> [libc.a(fxprintf.o)] __vfwprintf -> [libc.a(vfwprintf.o)] _IO_fwide -> [libc.a(iofwide.o)] __pointer_chk_guard_local -> [libc.a(libc-start.o)] __pthread_initialize_minimal -> [libpthread.a(nptl-init.o)] __nptl_setxid_error -> [libpthread.a(pthread_create.o)] pthread_getspecific
[initial] __assert_fail -> [libc.a(assert.o)] __fxprintf -> [libc.a(fxprintf.o)] __vfwprintf -> [libc.a(vfwprintf.o)] _IO_fwide -> [libc.a(iofwide.o)] __pointer_chk_guard_local -> [libc.a(libc-start.o)] __pthread_initialize_minimal -> [libpthread.a(nptl-init.o)] __nptl_setxid_error -> [libpthread.a(pthread_create.o)] pthread_key_create
[initial] __assert_fail -> [libc.a(assert.o)] __fxprintf -> [libc.a(fxprintf.o)] __vfwprintf -> [libc.a(vfwprintf.o)] _IO_fwide -> [libc.a(iofwide.o)] __pointer_chk_guard_local -> [libc.a(libc-start.o)] __pthread_initialize_minimal -> [libpthread.a(nptl-init.o)] __nptl_setxid_error -> [libpthread.a(pthread_create.o)] pthread_key_delete
[initial] __assert_fail -> [libc.a(assert.o)] __fxprintf -> [libc.a(fxprintf.o)] __vfwprintf -> [libc.a(vfwprintf.o)] _IO_fwide -> [libc.a(iofwide.o)] __pointer_chk_guard_local -> [libc.a(libc-start.o)] __pthread_initialize_minimal -> [libpthread.a(nptl-init.o)] __nptl_setxid_error -> [libpthread.a(pthread_create.o)] pthread_mutex_lock
[initial] __assert_fail -> [libc.a(assert.o)] __fxprintf -> [libc.a(fxprintf.o)] __vfwprintf -> [libc.a(vfwprintf.o)] _IO_fwide -> [libc.a(iofwide.o)] __pointer_chk_guard_local -> [libc.a(libc-start.o)] __pthread_initialize_minimal -> [libpthread.a(nptl-init.o)] __nptl_setxid_error -> [libpthread.a(pthread_create.o)] pthread_mutex_trylock
[initial] __assert_fail -> [libc.a(assert.o)] __fxprintf -> [libc.a(fxprintf.o)] __vfwprintf -> [libc.a(vfwprintf.o)] _IO_fwide -> [libc.a(iofwide.o)] __pointer_chk_guard_local -> [libc.a(libc-start.o)] __pthread_initialize_minimal -> [libpthread.a(nptl-init.o)] __nptl_setxid_error -> [libpthread.a(pthread_create.o)] pthread_mutex_unlock
[initial] __assert_fail -> [libc.a(assert.o)] __fxprintf -> [libc.a(fxprintf.o)] __vfwprintf -> [libc.a(vfwprintf.o)] _IO_fwide -> [libc.a(iofwide.o)] __pointer_chk_guard_local -> [libc.a(libc-start.o)] __pthread_initialize_minimal -> [libpthread.a(nptl-init.o)] __nptl_setxid_error -> [libpthread.a(pthread_create.o)] pthread_once
[initial] __assert_fail -> [libc.a(assert.o)] __fxprintf -> [libc.a(fxprintf.o)] __vfwprintf -> [libc.a(vfwprintf.o)] _IO_fwide -> [libc.a(iofwide.o)] __pointer_chk_guard_local -> [libc.a(libc-start.o)] __pthread_initialize_minimal -> [libpthread.a(nptl-init.o)] __nptl_setxid_error -> [libpthread.a(pthread_create.o)] pthread_setspecific
[initial] __assert_fail -> [libc.a(assert.o)] __fxprintf -> [libc.a(fxprintf.o)] __vfwprintf -> [libc.a(vfwprintf.o)] _IO_fwide -> [libc.a(iofwide.o)] __pointer_chk_guard_local -> [libc.a(libc-start.o)] __pthread_initialize_minimal -> [libpthread.a(nptl-init.o)] __nptl_setxid_error -> [libpthread.a(pthread_create.o)] pthread_mutex_lock -> [libpthread.a(pthread_mutex_lock.o)] __pthread_current_priority -> [libpthread.a(tpp.o)] sched_get_priority_max
[initial] __assert_fail -> [libc.a(assert.o)] __fxprintf -> [libc.a(fxprintf.o)] __vfwprintf -> [libc.a(vfwprintf.o)] _IO_fwide -> [libc.a(iofwide.o)] __pointer_chk_guard_local -> [libc.a(libc-start.o)] __pthread_initialize_minimal -> [libpthread.a(nptl-init.o)] __nptl_setxid_error -> [libpthread.a(pthread_create.o)] pthread_mutex_lock -> [libpthread.a(pthread_mutex_lock.o)] __pthread_current_priority -> [libpthread.a(tpp.o)] sched_get_priority_min
[initial] __assert_fail -> [libc.a(assert.o)] __fxprintf -> [libc.a(fxprintf.o)] __vfwprintf -> [libc.a(vfwprintf.o)] _IO_fwide -> [libc.a(iofwide.o)] __pointer_chk_guard_local -> [libc.a(libc-start.o)] __pthread_initialize_minimal -> [libpthread.a(nptl-init.o)] __nptl_setxid_error -> [libpthread.a(pthread_create.o)] __resp -> [libc.a(res_libc.o)] __res_iclose -> [libc.a(res_init.o)] __gethostname -> [libc.a(gethostname.o)] uname

Cheers,
Carlos.
Joseph Myers Nov. 29, 2014, 1:53 a.m. UTC | #4
On Fri, 28 Nov 2014, Carlos O'Donell wrote:

> On 11/28/2014 06:52 PM, Joseph Myers wrote:
> > On Fri, 28 Nov 2014, Carlos O'Donell wrote:
> > 
> >> Now I have only 200+ linknamespace failures :-)
> > 
> > What are those failures (what error messages where)?  At least on 
> > x86_64/x86, all the non-XFAILed tests ought to be passing (though the same 
> > include/ patch may be needed for them).
> 
> As an example on 32-bit ARM:
> 
> conform/ISO/assert.h/linknamespace.out:
> 
> [initial] __assert_fail -> [libc.a(assert.o)] __fxprintf -> [libc.a(fxprintf.o)] __vfwprintf -> [libc.a(vfwprintf.o)] _IO_fwide -> [libc.a(iofwide.o)] __pointer_chk_guard_local -> [libc.a(libc-start.o)] __pthread_initialize_minimal -> [libpthread.a(nptl-init.o)] __nptl_setxid_error -> [libpthread.a(pthread_create.o)] __resp -> [libc.a(res_libc.o)] __res_iclose -> [libc.a(res_init.o)] fgets_unlocked

I hope the patch I just committed 
<https://sourceware.org/ml/libc-alpha/2014-11/msg00889.html> will fix many 
of these.  (However, such symbols appear in many of the existing XFAILed 
cases that end up bringing in the resolver etc. - they reflect genuine 
architecture-independent namespace bugs, it's just the appearance in this 
particular case that's architecture-specific.)

> [initial] __assert_fail -> [libc.a(assert.o)] _dl_pagesize -> [libc.a(dl-support.o)] _dl_nothread_init_static_tls -> [libc.a(dl-reloc.o)] _dl_runtime_profile -> [libc.a(dl-trampoline.o)] _dl_call_pltexit -> [libc.a(dl-runtime.o)] _dl_mcount -> [libc.a(dl-profile.o)] __profil -> [libc.a(profil.o)] profil_counter

This looks like an ordinary architecture-specific bug, however.  (On 
architectures where profil_counter is not static, i.e. ARM and SPARC, it 
should be a weak alias for __profil_counter.)
Carlos O'Donell Nov. 29, 2014, 2:16 a.m. UTC | #5
On 11/28/2014 08:53 PM, Joseph Myers wrote:
> On Fri, 28 Nov 2014, Carlos O'Donell wrote:
> 
>> On 11/28/2014 06:52 PM, Joseph Myers wrote:
>>> On Fri, 28 Nov 2014, Carlos O'Donell wrote:
>>>
>>>> Now I have only 200+ linknamespace failures :-)
>>>
>>> What are those failures (what error messages where)?  At least on 
>>> x86_64/x86, all the non-XFAILed tests ought to be passing (though the same 
>>> include/ patch may be needed for them).
>>
>> As an example on 32-bit ARM:
>>
>> conform/ISO/assert.h/linknamespace.out:
>>
>> [initial] __assert_fail -> [libc.a(assert.o)] __fxprintf -> [libc.a(fxprintf.o)] __vfwprintf -> [libc.a(vfwprintf.o)] _IO_fwide -> [libc.a(iofwide.o)] __pointer_chk_guard_local -> [libc.a(libc-start.o)] __pthread_initialize_minimal -> [libpthread.a(nptl-init.o)] __nptl_setxid_error -> [libpthread.a(pthread_create.o)] __resp -> [libc.a(res_libc.o)] __res_iclose -> [libc.a(res_init.o)] fgets_unlocked
> 
> I hope the patch I just committed 
> <https://sourceware.org/ml/libc-alpha/2014-11/msg00889.html> will fix many 
> of these.  (However, such symbols appear in many of the existing XFAILed 
> cases that end up bringing in the resolver etc. - they reflect genuine 
> architecture-independent namespace bugs, it's just the appearance in this 
> particular case that's architecture-specific.)

Thanks. I'm retesting with your patch.

>> [initial] __assert_fail -> [libc.a(assert.o)] _dl_pagesize -> [libc.a(dl-support.o)] _dl_nothread_init_static_tls -> [libc.a(dl-reloc.o)] _dl_runtime_profile -> [libc.a(dl-trampoline.o)] _dl_call_pltexit -> [libc.a(dl-runtime.o)] _dl_mcount -> [libc.a(dl-profile.o)] __profil -> [libc.a(profil.o)] profil_counter
> 
> This looks like an ordinary architecture-specific bug, however.  (On 
> architectures where profil_counter is not static, i.e. ARM and SPARC, it 
> should be a weak alias for __profil_counter.)

Agreed.

Cheers,
Carlos.
Joseph Myers Dec. 4, 2014, 3:37 p.m. UTC | #6
Ping.  This patch 
<https://sourceware.org/ml/libc-alpha/2014-11/msg00859.html> is pending 
review.  (Carlos said it fixed the problem he saw, but that's not a 
review.  The main question for review is the correct approach for handling 
semaphore.h.)
Joseph Myers Dec. 11, 2014, 2:46 p.m. UTC | #7
Ping^2.  This patch 
<https://sourceware.org/ml/libc-alpha/2014-11/msg00859.html> is still 
pending review.  (Carlos said it fixed the problem he saw, but that's not 
a review.  The main question for review is the correct approach for 
handling semaphore.h.)
Roland McGrath Dec. 11, 2014, 7:01 p.m. UTC | #8
I think moving semaphore.h to sysdeps/pthread/ is sound.
The other wrappers are fine.

Patch
diff mbox

diff --git a/include/cpio.h b/include/cpio.h
new file mode 100644
index 0000000..38e2ed1
--- /dev/null
+++ b/include/cpio.h
@@ -0,0 +1 @@ 
+#include <posix/cpio.h>
diff --git a/include/fmtmsg.h b/include/fmtmsg.h
new file mode 100644
index 0000000..6ac606d
--- /dev/null
+++ b/include/fmtmsg.h
@@ -0,0 +1 @@ 
+#include <stdlib/fmtmsg.h>
diff --git a/include/semaphore.h b/include/semaphore.h
new file mode 100644
index 0000000..01c7ba1
--- /dev/null
+++ b/include/semaphore.h
@@ -0,0 +1 @@ 
+#include <nptl/semaphore.h>