S/390:

Message ID lg9f99$e01$1@ger.gmane.org
State Committed
Headers

Commit Message

Stefan Liebler March 18, 2014, 12:47 p.m. UTC
  On 03/14/2014 03:18 PM, Joseph S. Myers wrote:
> On Fri, 14 Mar 2014, Stefan Liebler wrote:
>
>> Hi,
>>
>> The conformance tests for ISO99, ISO11, XOPEN2K, POSIX2008 and XOPEN2K8
>> are failing on S390 for the inttypes.h and stdint.h headers.
>> The problem is that on S390 size_t / __SIZE_TYPE__
>> are defined as long unsigned int,
>> which has the same size as unsigned int (on S390).
>> SIZE_MAX is defined in sysdeps/generic/stdint.h as 4294967295U.
>> The conformance-test checks the type of SIZE_MAX,
>> which should be promoted to __SIZE_TYPE__, but it is unsigned int.
>
> You should fix the header rather than marking these tests as expected to
> fail.  (Of course, file a bug in Bugzilla before fixing it, as usual.)  To
> avoid duplicating the whole header, maybe add a macro <bits/wordsize.h>
> can define such as __WORDSIZE32_SIZE_ULONG, and then test that macro in
> <stdint.h>.
>
> (You have two identical bits/wordsize.h files for S/390.  Just one should
> suffice.)
>

I fixed the header as mentioned. The tests pass on s390/s390x.
Unifying s390/s390-32/bits/wordsize.h and s390/s390-64/wordsize.h to 
s390/bits/wordsize.h leads to a build error:

gcc   -shared -static-libgcc -Wl,-O1  -Wl,-z,defs 
-Wl,-dynamic-linker=/lib/ld.so.1  -Bglibc-build/csu/ 
-Wl,--version-script=glibc-build/libm.map -Wl,-soname=libm.so.6 
-Wl,-z,combreloc -Wl,-z,relro -Wl,--hash-style=both  -Lglibc-build 
-Lglibc-build/math -Lglibc-build/elf -Lglibc-build/dlfcn 
-Lglibc-build/nss -Lglibc-build/nis -Lglibc-build/rt 
-Lglibc-build/resolv -Lglibc-build/crypt -Lglibc-build/nptl 
-Wl,-rpath-link=glibc-build:glibc-build/math:glibc-build/elf:glibc-build/dlfcn:glibc-build/nss:glibc-build/nis:glibc-build/rt:glibc-build/resolv:glibc-build/crypt:glibc-build/nptl 
-o glibc-build/math/libm.so -T glibc-build/shlib.lds 
glibc-build/csu/abi-note.o -Wl,--whole-archive 
glibc-build/math/libm_pic.a -Wl,--no-whole-archive 
glibc-build/elf/interp.os  -Wl,--start-group glibc-build/libc.so 
glibc-build/libc_nonshared.a -Wl,--as-needed glibc-build/elf/ld.so 
-Wl,--no-as-needed -Wl,--end-group
glibc-build/math/libm_pic.a(s_nanl.os): In function `nanl@@GLIBC_2.4':
s_nanl.c:(.text+0xb4): undefined reference to `strtold'
collect2: error: ld returned 1 exit status
make[2]: *** [glibc-build/math/libm.so] Error 1

Bye.

---
2014-03-18  Stefan Liebler  <stli@linux.vnet.ibm.com>

	[BZ #16712]
	* sysdeps/s390/s390-32/bits/wordsize.h
	(__WORDSIZE32_SIZE_ULONG): New define.
	* sysdeps/s390/s390-64/bits/wordsize.h
	(__WORDSIZE32_SIZE_ULONG): Likewise.
	* sysdeps/generic/stdint.h (SIZE_MAX):
	Define as UL if __WORDSIZE32_SIZE_ULONG.
---
  

Comments

Joseph Myers March 18, 2014, 2:11 p.m. UTC | #1
On Tue, 18 Mar 2014, Stefan Liebler wrote:

> I fixed the header as mentioned. The tests pass on s390/s390x.
> Unifying s390/s390-32/bits/wordsize.h and s390/s390-64/wordsize.h to
> s390/bits/wordsize.h leads to a build error:

I suppose there must be some non-obvious sysdeps directory ordering issue, 
so another bits/wordsize.h gets found if you unify those headers?

> 2014-03-18  Stefan Liebler  <stli@linux.vnet.ibm.com>
> 
> 	[BZ #16712]
> 	* sysdeps/s390/s390-32/bits/wordsize.h
> 	(__WORDSIZE32_SIZE_ULONG): New define.
> 	* sysdeps/s390/s390-64/bits/wordsize.h
> 	(__WORDSIZE32_SIZE_ULONG): Likewise.
> 	* sysdeps/generic/stdint.h (SIZE_MAX):
> 	Define as UL if __WORDSIZE32_SIZE_ULONG.

OK.

I believe there's a previous approval of mine for (part of) a patch of 
yours <https://sourceware.org/ml/libc-alpha/2014-02/msg00819.html> that 
hasn't been committed.
  
Stefan Liebler March 19, 2014, 4:06 p.m. UTC | #2
On 03/18/2014 03:11 PM, Joseph S. Myers wrote:
> On Tue, 18 Mar 2014, Stefan Liebler wrote:
>
>> I fixed the header as mentioned. The tests pass on s390/s390x.
>> Unifying s390/s390-32/bits/wordsize.h and s390/s390-64/wordsize.h to
>> s390/bits/wordsize.h leads to a build error:
>
> I suppose there must be some non-obvious sysdeps directory ordering issue,
> so another bits/wordsize.h gets found if you unify those headers?

yes that´s right. The used one is sysdeps/wordsize-32/bits/wordsize.h 
(on s390), which is the next include-dir specified by gcc invocation: 
-Isysdeps/s390/s390-32  -Isysdeps/wordsize-32  -Inptl/sysdeps/s390 
-Isysdeps/s390

The other header-files in sysdeps/s390/bits/ are not available in
-Isysdeps/wordsize-32  -Inptl/sysdeps/s390, so there it´s no problem.

Is it possible to change the directory ordering?

>
>> 2014-03-18  Stefan Liebler  <stli@linux.vnet.ibm.com>
>>
>> 	[BZ #16712]
>> 	* sysdeps/s390/s390-32/bits/wordsize.h
>> 	(__WORDSIZE32_SIZE_ULONG): New define.
>> 	* sysdeps/s390/s390-64/bits/wordsize.h
>> 	(__WORDSIZE32_SIZE_ULONG): Likewise.
>> 	* sysdeps/generic/stdint.h (SIZE_MAX):
>> 	Define as UL if __WORDSIZE32_SIZE_ULONG.
>
> OK.
>
> I believe there's a previous approval of mine for (part of) a patch of
> yours <https://sourceware.org/ml/libc-alpha/2014-02/msg00819.html> that
> hasn't been committed.
>
Thanks for the hint. I´ll forward the part of the patch
(posix/Makefile: before-compile += testcases.h ptestcases.h) to Andreas 
Krebbel, so he can commit it.

Bye
  
Joseph Myers March 24, 2014, 4:17 p.m. UTC | #3
The commit of these patches appears to have omitted to add the numbers of 
the fixed bugs to NEWS.  In general, when checking in a patch that fixes a 
bug in Bugzilla, you need to add the bug number to NEWS first, then close 
the bug in Bugzilla afterwards; please complete both steps.
  

Patch

diff --git a/sysdeps/generic/stdint.h b/sysdeps/generic/stdint.h
index 4660748..f5d9556 100644
--- a/sysdeps/generic/stdint.h
+++ b/sysdeps/generic/stdint.h
@@ -260,7 +260,11 @@  typedef unsigned long long int	uintmax_t;
 # if __WORDSIZE == 64
 #  define SIZE_MAX		(18446744073709551615UL)
 # else
-#  define SIZE_MAX		(4294967295U)
+#  ifdef __WORDSIZE32_SIZE_ULONG
+#   define SIZE_MAX		(4294967295UL)
+#  else
+#   define SIZE_MAX		(4294967295U)
+#  endif
 # endif
 
 /* Limits of `wchar_t'.  */
diff --git a/sysdeps/s390/s390-32/bits/wordsize.h b/sysdeps/s390/s390-32/bits/wordsize.h
index b416612..da791fa 100644
--- a/sysdeps/s390/s390-32/bits/wordsize.h
+++ b/sysdeps/s390/s390-32/bits/wordsize.h
@@ -4,6 +4,7 @@ 
 # define __WORDSIZE	64
 #else
 # define __WORDSIZE	32
+# define __WORDSIZE32_SIZE_ULONG       1
 #endif
 
 #if !defined __NO_LONG_DOUBLE_MATH && !defined __LONG_DOUBLE_MATH_OPTIONAL
diff --git a/sysdeps/s390/s390-64/bits/wordsize.h b/sysdeps/s390/s390-64/bits/wordsize.h
index b416612..da791fa 100644
--- a/sysdeps/s390/s390-64/bits/wordsize.h
+++ b/sysdeps/s390/s390-64/bits/wordsize.h
@@ -4,6 +4,7 @@ 
 # define __WORDSIZE	64
 #else
 # define __WORDSIZE	32
+# define __WORDSIZE32_SIZE_ULONG       1
 #endif
 
 #if !defined __NO_LONG_DOUBLE_MATH && !defined __LONG_DOUBLE_MATH_OPTIONAL