On Fri, Nov 13, 2020 at 09:55:01PM -0500, George Koehler wrote: > On Wed, 11 Nov 2020 01:38:04 +0100 > Charlene Wendling <juliana...@posteo.jp> wrote: > > > On Tue, 10 Nov 2020 07:50:26 +0100 > > Charlene Wendling wrote: > > > > New diff with aja's and sthen's suggestions. I tested on macppc and, even > > if it has no impact there, amd64. > > I built webkitgtk4 on macppc after you committed your fixes, and with > one more change: I deleted the -mlongcall flag. I suggest to keep > -mlongcall for now, but the next person to edit webkitgtk4/Makefile > should remove -mlongcall at the same time. > > Below the diff, I explain -mlongcall and -Wl,--relax flags. > > Index: Makefile > =================================================================== > RCS file: /cvs/ports/www/webkitgtk4/Makefile,v > retrieving revision 1.130 > diff -u -p -r1.130 Makefile > --- Makefile 11 Nov 2020 21:27:03 -0000 1.130 > +++ Makefile 13 Nov 2020 20:45:24 -0000 > @@ -119,8 +119,6 @@ LDFLAGS += -Wl,--no-keep-memory > .if ${MACHINE_ARCH} == "powerpc" > # XXX fix colors being off, it would be nice to fix the code > CONFIGURE_ARGS += -DENABLE_GRAPHICS_CONTEXT_GL=OFF > -CFLAGS += -mlongcall > -CXXFLAGS += -mlongcall > LDFLAGS += -Wl,--relax > PATCH_LIST = patch-* powerpc-patch-* > .endif > > In powerpc and powerpc64 code, the "bl" instruction for a direct > function call uses a signed 26-bit offset. This limits the branch > distance to plus or minus 32 megabytes. This works well when each > program or shared lib has less than 32M of code. > > libwebkit2gtk-4.0.so.3.3 is too big, because its LOAD segment with > the E flag (for code) has size > 32M = 0x2_000_000 bytes: > > $ readelf -l libwebkit2gtk-4.0.so.3.3|head > ... > Type Offset VirtAddr PhysAddr FileSiz MemSiz Flg Align > LOAD 0x000000 0x00000000 0x00000000 0x2e979e4 0x2e979e4 R E > 0x10000 > > With cc -mlongcall, each function call is indirect through a function > pointer. This would get around the 32M limit, but it doesn't work > because /usr/lib/crt*.o don't use -mlongcall. My test program with > code over 32M got linker errors from crtbegin.o and crt0.o. > > With cc -Wl,--relax, the linker ld.bfd can pass the 32M limit by > inserting a thunk (or branch island) between the "bl" and its > destination. This doesn't need -mlongcall and does work with crt*.o. > We use -Wl,--relax without -mlongcall in devel/llvm on powerpc. > > cc -Wl,--relax causes an error with ld.lld on powerpc64 (or with > cc -fuse-ld=lld on powerpc), but lld inserts thunks (branch islands) > by default. If macppc switches to lld, we would remove -Wl,--relax > from ports. --George
This reminds me I had a diff I was going to send out after I saw the recent discussion about webkitgtk4. There appear to be only two instances left in the tree. Index: games/godot/Makefile =================================================================== RCS file: /home/cvs/ports/games/godot/Makefile,v retrieving revision 1.16 diff -u -p -u -p -r1.16 Makefile --- games/godot/Makefile 19 Sep 2020 06:37:23 -0000 1.16 +++ games/godot/Makefile 14 Nov 2020 03:20:12 -0000 @@ -5,6 +5,7 @@ COMMENT = 2D and 3D game engine V = 3.2.3 DISTNAME = godot-${V}-stable PKGNAME = godot-${V} +REVISION = 0 CATEGORIES = games HOMEPAGE = https://godotengine.org/ MAINTAINER = Omar Polo <o...@omarpolo.com> @@ -78,8 +79,6 @@ WANTLIB += atomic # Fix relocation overflows .if ${MACHINE_ARCH:Mpowerpc} -CFLAGS += -mlongcall -CXXFLAGS += -mlongcall LDFLAGS += -Wl,--relax .endif Index: www/webkitgtk4/Makefile =================================================================== RCS file: /home/cvs/ports/www/webkitgtk4/Makefile,v retrieving revision 1.130 diff -u -p -u -p -r1.130 Makefile --- www/webkitgtk4/Makefile 11 Nov 2020 21:27:03 -0000 1.130 +++ www/webkitgtk4/Makefile 13 Nov 2020 06:04:51 -0000 @@ -14,7 +14,7 @@ PORTROACH = limitw:1,even COMMENT = GTK+ port of the WebKit rendering engine V = 2.30.2 -REVISION = 0 +REVISION = 1 DISTNAME = webkitgtk-${V} PKGNAME = webkitgtk4-${V} EXTRACT_SUFX = .tar.xz @@ -119,8 +119,6 @@ LDFLAGS += -Wl,--no-keep-memory .if ${MACHINE_ARCH} == "powerpc" # XXX fix colors being off, it would be nice to fix the code CONFIGURE_ARGS += -DENABLE_GRAPHICS_CONTEXT_GL=OFF -CFLAGS += -mlongcall -CXXFLAGS += -mlongcall LDFLAGS += -Wl,--relax PATCH_LIST = patch-* powerpc-patch-* .endif