[PATCH] S/390:

Stefan Liebler stli@linux.vnet.ibm.com
Tue Mar 18 12:48:00 GMT 2014


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.
---
-------------- next part --------------
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


More information about the Libc-alpha mailing list