[RFC] D support for S/390

Rainer Orth ro@CeBiTec.Uni-Bielefeld.DE
Thu Apr 11 19:58:00 GMT 2019

Hi Robin,

>> This will occur on any 32-bit target.  The following patch (using
>> ssize_t instead) allowed the code to compile:
> thanks, included your fix and attempted a more generic version of the
> 186 test.
> I also continued debugging some fails further:
> - Most of the MurmurHash fails are simply due to the wrong byte order
> being asserted but I did not yet check whether multi-chunk hashes are
> more complicated to get right - I suppose not, though.
> - The regex searches are even documented to not work properly on
> big-endian platforms. I still guess they could be fixed without too much
> effort.
> - Math unit tests fail due to lower precision than on other machines.
> Maybe this is because I only tested using -O0.

good.  I'm seeing those two, but at the moment concentrate on a couple
of Solaris/SPARC specific issues (mcontext_t was wrong, causing memory
corruption; need a different variant of makecontext; stack needs
doubleword alignment; some minor stuff).  64-bit results are not too bad ATM:

                === gdc Summary for unix/-m64 ===

# of expected passes            29159
# of unexpected failures        199
# of unsupported tests          20

                === libphobos Summary for unix/-m64 ===

# of expected passes            398
# of unexpected failures        22

and some of the failures also occur on Solaris/x86, but 32-bit execution
tests are terrible right now, mostly due to the same issue, I believe:

FAIL: libphobos.aa/test_aa.d execution test

Thread 2 received signal SIGSEGV, Segmentation fault.
[Switching to Thread 1 (LWP 1)]
0x0009c9b0 in rt.aaA.Impl.length() const (this=...)
    at /vol/gcc/src/hg/trunk/solaris/libphobos/libdruntime/rt/aaA.d:87
87	        assert(used >= deleted);
(gdb) where
#0  0x0009c9b0 in rt.aaA.Impl.length() const (this=...)
    at /vol/gcc/src/hg/trunk/solaris/libphobos/libdruntime/rt/aaA.d:87
#1  0x0009c960 in rt.aaA.AA.empty() const (this=...)
    at /vol/gcc/src/hg/trunk/solaris/libphobos/libdruntime/rt/aaA.d:44
#2  0x0009e83c in _aaValues (aa=..., keysz=4, valsz=1, 
    tiValueArray=0x718fc <initializer for TypeInfo_AS7test_aa15testKeysValues1FZ1T>) at /vol/gcc/src/hg/trunk/solaris/libphobos/libdruntime/rt/aaA.d:513
#3  0x00082688 in object.values!(test_aa.testKeysValues1().T[int], test_aa.testKeysValues1().T, int).values(test_aa.testKeysValues1().T[int]) (aa=...)
    at /vol/gcc/src/hg/trunk/solaris/libphobos/libdruntime/object.d:2171
#4  0x00077a9c in test_aa.testKeysValues1() ()
    at /vol/gcc/src/hg/trunk/solaris/libphobos/testsuite/libphobos.aa/test_aa.d:56
#5  0x00077604 in D main ()
    at /vol/gcc/src/hg/trunk/solaris/libphobos/testsuite/libphobos.aa/test_aa.d:3

1: x/i $pc
=> 0x9c9b0 <_D2rt3aaA4Impl6lengthMxFNaNbNdNiZk+32>:	ld  [ %g1 + 8 ], %g2
(gdb) p/x $g1
$1 = 0x8

Investigating this is my next task.

> @Iain: With the patch as it is - hoping no additional tab/space damage
> :) - is there any chance of getting it upstream anytime soon?

I noticed you missed one piece of Iain's typeinfo.cc patch, btw.:

diff --git a/gcc/d/typeinfo.cc b/gcc/d/typeinfo.cc
--- a/gcc/d/typeinfo.cc
+++ b/gcc/d/typeinfo.cc
@@ -886,7 +886,7 @@ public:
 	if (cd->isCOMinterface ())
 	  flags |= ClassFlags::isCOMclass;
-	this->layout_field (build_integer_cst (flags));
+	this->layout_field (build_integer_cst (flags, d_uint_type));
 	/* void *deallocator;
 	   OffsetTypeInfo[] m_offTi;  (not implemented)


Rainer Orth, Center for Biotechnology, Bielefeld University

More information about the Gcc-patches mailing list