Hi George --

On 10/10/2021 10:17 PM, George Koehler wrote:
Hello,

This diff unbreaks lang/gcc/11 on powerpc64, adds dlang to powerpc64,
and changes D's fibers on all archs; ok to commit?

gcc 11 was broken in powerpc64 bulks,
http://build-failures.rhaalovely.net/powerpc64/2021-09-27/lang/gcc/11,-c++.log

Unbreak by adding gnu-user.h (patch-gcc_config_gcc).  Also add
PFRAG.powerpc64-main, to be like other archs; this PFRAG is still
missing in gcc 8.  The rest of this diff is for the D programming
language, with parts for powerpc64, 32-bit powerpc, and all archs.

Add powerpc64 to ONLY_FOR_ARCHS-dlang.  Add enough PPC64 code to
libphobos to complete the build.  (I might be the 1st person to try D
on powerpc64.)  This PPC64 code is trivial, except the code for fibers
(https://tour.dlang.org/tour/en/multithreading/fibers), where I wrote
some powerpc64 asm.  I found 2 other problems with fibers:

  1. The fiber crashed SIGSEGV, because it didn't pass MAP_STACK to
     mmap(2).  The fix is easy, and affects all archs.

  2. The existing code for 32-bit powerpc was wrong; it saved the
     link register at 8(%r1), should be 4(%r1), and allowed signal
     handlers to clobber the values saved below %r1.  I change
     almost every line of 32-bit asm as I add the 64-bit asm.

The attachment "dfiber.d" is my fiber example.  I can run it on macppc
and powerpc64, and you should be able to run it on any dlang arch,

$ egdc -o dfiber dfiber.d
$ ./dfiber
adder(1, 1, 1)()
1, 1, 3, 5, 9, 15, 25, 41, 67, 109, 177, 287, 465, 753

But on macppc, egdc works only with ld.bfd,

$ ln -s /usr/bin/ld.bfd ld
$ PATH=$PWD:$PATH
$ egdc -o dfiber dfiber.d

Bump REVISION-dlang for libphobos.  Don't bump REVISION, because
the other changes (patch-gcc_config_gcc, and %%powerpc64%% in
PLIST-main) affect only powerpc64, which was broken.

--George


I don't have a powerpc64 machine, but I will definitely test out the fibers fix and get back to you--thanks!

~Brian

Reply via email to