We recently added --enable-optimizations in lang/python/3.* for PGO
(Profile Guided Optimization), on all platforms where the linker is
lld.  Turns out, this breaks on macppc (powerpc).  The build segfaults
as soon as it tries to run the linked python binary,

cc -pthread -L/usr/local/lib/  -flto -g -L/usr/obj/ports/Python-3.9.13/Python-3.
9.13 -L/usr/local/lib/ -fprofile-instr-generate -Wl,--export-dynamic -o python P
rograms/python.o -L. -lpython3.9 -lintl -lpthread  -lutil -lm   -lm 
LD_LIBRARY_PATH=/usr/obj/ports/Python-3.9.13/Python-3.9.13 ./python -E -S -m sys
config --generate-posix-vars ; if test $? -ne 0 ; then  echo "generate-posix-var
s failed" ;  rm -f ./pybuilddir.txt ;  exit 1 ;  fi
Segmentation fault (core dumped) 
*** Error 139 in . (Makefile:623 'pybuilddir.txt')

There is no problem on powerpc64; this seems to be a bug in clang or
lld specific to 32-bit powerpc.  I don't know how to reproduce this
bug outside of python.  All of python 3.8, 3.9, 3.10 are broken; they
all get packaged after I remove --enable-optimizations.

May I commit this diff, which removes --enable-optimizations on
powerpc?    --George

Index: Makefile.inc
===================================================================
RCS file: /cvs/ports/lang/python/Makefile.inc,v
retrieving revision 1.149
diff -u -p -r1.149 Makefile.inc
--- Makefile.inc        27 Jul 2022 06:20:10 -0000      1.149
+++ Makefile.inc        6 Aug 2022 21:35:35 -0000
@@ -122,7 +122,11 @@ CONFIGURE_ARGS +=  --with-fpectl \
 .if ${VERSION} != "2.7"
 CONFIGURE_ARGS +=      --enable-loadable-sqlite-extensions
 .  if ${PROPERTIES:Mlld}
-CONFIGURE_ARGS +=      --with-lto --enable-optimizations
+CONFIGURE_ARGS +=      --with-lto
+.    if ${MACHINE_ARCH} != "powerpc"
+# On powerpc, the python binary would crash by "Segmentation fault".
+CONFIGURE_ARGS +=      --enable-optimizations
+.    endif
 .  endif
 TEST_IS_INTERACTIVE =  Yes
 .endif

Reply via email to