kaniini / libucontext

ucontext implementation featuring glibc-compatible ABI
Other
102 stars 41 forks source link

PowerPC assembler does not compile on Darwin: `Unknown pseudo-op: .weak` etc. #65

Closed barracuda156 closed 2 days ago

barracuda156 commented 1 month ago
--->  Configuring libucontext
Executing:  cd "/opt/local/var/macports/build/_opt_PPCSnowLeopardPorts_devel_libucontext/libucontext/work/libucontext-1.3.1" && /opt/local/bin/meson setup --prefix=/opt/local -Ddocs=false /opt/local/var/macports/build/_opt_PPCSnowLeopardPorts_devel_libucontext/libucontext/work/libucontext-1.3.1 /opt/local/var/macports/build/_opt_PPCSnowLeopardPorts_devel_libucontext/libucontext/work/build --wrap-mode=default 
The Meson build system
Version: 1.5.1
Source dir: /opt/local/var/macports/build/_opt_PPCSnowLeopardPorts_devel_libucontext/libucontext/work/libucontext-1.3.1
Build dir: /opt/local/var/macports/build/_opt_PPCSnowLeopardPorts_devel_libucontext/libucontext/work/build
Build type: native build
WARNING: You should add the boolean check kwarg to the run_command call.
         It currently defaults to false,
         but it will default to true in future releases of meson.
         See also: https://github.com/mesonbuild/meson/issues/9300
Project name: libucontext
Project version: 1.3.1

C compiler for the host machine: ccache /opt/local/bin/gcc-mp-14 (gcc 14.2.0 "gcc-mp-14 (MacPorts gcc14 14.2.0_1+stdlib_flag) 14.2.0")
C linker for the host machine: /opt/local/bin/gcc-mp-14 ld64 97.17
Host machine cpu family: ppc
Host machine cpu: power macintosh
Found pkg-config: YES (/opt/local/bin/pkg-config) 0.29.2
Build targets in project: 6

libucontext 1.3.1

  User defined options
    prefix   : /opt/local
    wrap_mode: default
    docs     : false

Found ninja-1.12.1 at /opt/local/bin/ninja

--->  Building libucontext
Executing:  cd "/opt/local/var/macports/build/_opt_PPCSnowLeopardPorts_devel_libucontext/libucontext/work/build" && /opt/local/bin/ninja -j6 -v 
[1/23] ccache /opt/local/bin/gcc-mp-14 -Ilibucontext.1.dylib.p -I. -I../libucontext-1.3.1 -I../libucontext-1.3.1/include -I../libucontext-1.3.1/arch/common -I../libucontext-1.3.1/arch/common/include -I/opt/local/include -fdiagnostics-color=always -Wall -Winvalid-pch -std=gnu11 -O0 -g -pipe -Os -arch ppc -D_DEFAULT_SOURCE -DEXPORT_UNPREFIXED -MD -MQ libucontext.1.dylib.p/arch_ppc_swapcontext.S.o -MF libucontext.1.dylib.p/arch_ppc_swapcontext.S.o.d -o libucontext.1.dylib.p/arch_ppc_swapcontext.S.o -c ../libucontext-1.3.1/arch/ppc/swapcontext.S
FAILED: libucontext.1.dylib.p/arch_ppc_swapcontext.S.o 
ccache /opt/local/bin/gcc-mp-14 -Ilibucontext.1.dylib.p -I. -I../libucontext-1.3.1 -I../libucontext-1.3.1/include -I../libucontext-1.3.1/arch/common -I../libucontext-1.3.1/arch/common/include -I/opt/local/include -fdiagnostics-color=always -Wall -Winvalid-pch -std=gnu11 -O0 -g -pipe -Os -arch ppc -D_DEFAULT_SOURCE -DEXPORT_UNPREFIXED -MD -MQ libucontext.1.dylib.p/arch_ppc_swapcontext.S.o -MF libucontext.1.dylib.p/arch_ppc_swapcontext.S.o.d -o libucontext.1.dylib.p/arch_ppc_swapcontext.S.o -c ../libucontext-1.3.1/arch/ppc/swapcontext.S
../libucontext-1.3.1/arch/ppc/swapcontext.S:15:Unknown pseudo-op: .weak
../libucontext-1.3.1/arch/ppc/swapcontext.S:15:Rest of line ignored. 1st junk character valued 115 (s).
../libucontext-1.3.1/arch/ppc/swapcontext.S:16:Unknown pseudo-op: .weak
../libucontext-1.3.1/arch/ppc/swapcontext.S:16:Rest of line ignored. 1st junk character valued 95 (_).
../libucontext-1.3.1/arch/ppc/swapcontext.S:19:Unknown pseudo-op: .weak
../libucontext-1.3.1/arch/ppc/swapcontext.S:19:Rest of line ignored. 1st junk character valued 108 (l).
../libucontext-1.3.1/arch/ppc/swapcontext.S:22:Unknown pseudo-op: .global
../libucontext-1.3.1/arch/ppc/swapcontext.S:22:Rest of line ignored. 1st junk character valued 95 (_).
../libucontext-1.3.1/arch/ppc/swapcontext.S:23:Parameter syntax error (parameter 1)
../libucontext-1.3.1/arch/ppc/swapcontext.S:24:Parameter syntax error (parameter 1)
../libucontext-1.3.1/arch/ppc/swapcontext.S:27:Unknown pseudo-op: .hidden
../libucontext-1.3.1/arch/ppc/swapcontext.S:27:Rest of line ignored. 1st junk character valued 95 (_).
../libucontext-1.3.1/arch/ppc/swapcontext.S:28:Invalid mnemonic 'local'
../libucontext-1.3.1/arch/ppc/swapcontext.S:29:Unknown pseudo-op: .end
../libucontext-1.3.1/arch/ppc/swapcontext.S:29:Rest of line ignored. 1st junk character valued 95 (_).
[2/23] ccache /opt/local/bin/gcc-mp-14 -Ilibucontext.1.dylib.p -I. -I../libucontext-1.3.1 -I../libucontext-1.3.1/include -I../libucontext-1.3.1/arch/common -I../libucontext-1.3.1/arch/common/include -I/opt/local/include -fdiagnostics-color=always -Wall -Winvalid-pch -std=gnu11 -O0 -g -pipe -Os -arch ppc -D_DEFAULT_SOURCE -DEXPORT_UNPREFIXED -MD -MQ libucontext.1.dylib.p/arch_ppc_getcontext.S.o -MF libucontext.1.dylib.p/arch_ppc_getcontext.S.o.d -o libucontext.1.dylib.p/arch_ppc_getcontext.S.o -c ../libucontext-1.3.1/arch/ppc/getcontext.S
FAILED: libucontext.1.dylib.p/arch_ppc_getcontext.S.o 
ccache /opt/local/bin/gcc-mp-14 -Ilibucontext.1.dylib.p -I. -I../libucontext-1.3.1 -I../libucontext-1.3.1/include -I../libucontext-1.3.1/arch/common -I../libucontext-1.3.1/arch/common/include -I/opt/local/include -fdiagnostics-color=always -Wall -Winvalid-pch -std=gnu11 -O0 -g -pipe -Os -arch ppc -D_DEFAULT_SOURCE -DEXPORT_UNPREFIXED -MD -MQ libucontext.1.dylib.p/arch_ppc_getcontext.S.o -MF libucontext.1.dylib.p/arch_ppc_getcontext.S.o.d -o libucontext.1.dylib.p/arch_ppc_getcontext.S.o -c ../libucontext-1.3.1/arch/ppc/getcontext.S
../libucontext-1.3.1/arch/ppc/getcontext.S:15:Unknown pseudo-op: .weak
../libucontext-1.3.1/arch/ppc/getcontext.S:15:Rest of line ignored. 1st junk character valued 103 (g).
../libucontext-1.3.1/arch/ppc/getcontext.S:16:Unknown pseudo-op: .weak
../libucontext-1.3.1/arch/ppc/getcontext.S:16:Rest of line ignored. 1st junk character valued 95 (_).
../libucontext-1.3.1/arch/ppc/getcontext.S:18:Unknown pseudo-op: .hidden
../libucontext-1.3.1/arch/ppc/getcontext.S:18:Rest of line ignored. 1st junk character valued 95 (_).
../libucontext-1.3.1/arch/ppc/getcontext.S:19:Unknown pseudo-op: .global
../libucontext-1.3.1/arch/ppc/getcontext.S:19:Rest of line ignored. 1st junk character valued 95 (_).
../libucontext-1.3.1/arch/ppc/getcontext.S:20:Parameter syntax error (parameter 1)
../libucontext-1.3.1/arch/ppc/getcontext.S:21:Invalid mnemonic 'local'
../libucontext-1.3.1/arch/ppc/getcontext.S:22:Unknown pseudo-op: .end
../libucontext-1.3.1/arch/ppc/getcontext.S:22:Rest of line ignored. 1st junk character valued 108 (l).
[3/23] ccache /opt/local/bin/gcc-mp-14 -Ilibucontext.1.dylib.p -I. -I../libucontext-1.3.1 -I../libucontext-1.3.1/include -I../libucontext-1.3.1/arch/common -I../libucontext-1.3.1/arch/common/include -I/opt/local/include -fdiagnostics-color=always -Wall -Winvalid-pch -std=gnu11 -O0 -g -pipe -Os -arch ppc -D_DEFAULT_SOURCE -DEXPORT_UNPREFIXED -MD -MQ libucontext.1.dylib.p/arch_ppc_setcontext.S.o -MF libucontext.1.dylib.p/arch_ppc_setcontext.S.o.d -o libucontext.1.dylib.p/arch_ppc_setcontext.S.o -c ../libucontext-1.3.1/arch/ppc/setcontext.S
FAILED: libucontext.1.dylib.p/arch_ppc_setcontext.S.o 
ccache /opt/local/bin/gcc-mp-14 -Ilibucontext.1.dylib.p -I. -I../libucontext-1.3.1 -I../libucontext-1.3.1/include -I../libucontext-1.3.1/arch/common -I../libucontext-1.3.1/arch/common/include -I/opt/local/include -fdiagnostics-color=always -Wall -Winvalid-pch -std=gnu11 -O0 -g -pipe -Os -arch ppc -D_DEFAULT_SOURCE -DEXPORT_UNPREFIXED -MD -MQ libucontext.1.dylib.p/arch_ppc_setcontext.S.o -MF libucontext.1.dylib.p/arch_ppc_setcontext.S.o.d -o libucontext.1.dylib.p/arch_ppc_setcontext.S.o -c ../libucontext-1.3.1/arch/ppc/setcontext.S
../libucontext-1.3.1/arch/ppc/setcontext.S:15:Unknown pseudo-op: .weak
../libucontext-1.3.1/arch/ppc/setcontext.S:15:Rest of line ignored. 1st junk character valued 115 (s).
../libucontext-1.3.1/arch/ppc/setcontext.S:16:Unknown pseudo-op: .weak
../libucontext-1.3.1/arch/ppc/setcontext.S:16:Rest of line ignored. 1st junk character valued 95 (_).
../libucontext-1.3.1/arch/ppc/setcontext.S:18:Unknown pseudo-op: .hidden
../libucontext-1.3.1/arch/ppc/setcontext.S:18:Rest of line ignored. 1st junk character valued 95 (_).
../libucontext-1.3.1/arch/ppc/setcontext.S:19:Unknown pseudo-op: .global
../libucontext-1.3.1/arch/ppc/setcontext.S:19:Rest of line ignored. 1st junk character valued 95 (_).
../libucontext-1.3.1/arch/ppc/setcontext.S:20:Parameter syntax error (parameter 1)
../libucontext-1.3.1/arch/ppc/setcontext.S:21:Parameter syntax error (parameter 1)
../libucontext-1.3.1/arch/ppc/setcontext.S:22:Invalid mnemonic 'local'
../libucontext-1.3.1/arch/ppc/setcontext.S:23:Unknown pseudo-op: .end
../libucontext-1.3.1/arch/ppc/setcontext.S:23:Rest of line ignored. 1st junk character valued 108 (l).
[4/23] ccache /opt/local/bin/gcc-mp-14 -Ilibucontext.1.dylib.p -I. -I../libucontext-1.3.1 -I../libucontext-1.3.1/include -I../libucontext-1.3.1/arch/common -I../libucontext-1.3.1/arch/common/include -I/opt/local/include -fdiagnostics-color=always -Wall -Winvalid-pch -std=gnu11 -O0 -g -pipe -Os -arch ppc -D_DEFAULT_SOURCE -DEXPORT_UNPREFIXED -MD -MQ libucontext.1.dylib.p/arch_ppc_startcontext.S.o -MF libucontext.1.dylib.p/arch_ppc_startcontext.S.o.d -o libucontext.1.dylib.p/arch_ppc_startcontext.S.o -c ../libucontext-1.3.1/arch/ppc/startcontext.S
FAILED: libucontext.1.dylib.p/arch_ppc_startcontext.S.o 
ccache /opt/local/bin/gcc-mp-14 -Ilibucontext.1.dylib.p -I. -I../libucontext-1.3.1 -I../libucontext-1.3.1/include -I../libucontext-1.3.1/arch/common -I../libucontext-1.3.1/arch/common/include -I/opt/local/include -fdiagnostics-color=always -Wall -Winvalid-pch -std=gnu11 -O0 -g -pipe -Os -arch ppc -D_DEFAULT_SOURCE -DEXPORT_UNPREFIXED -MD -MQ libucontext.1.dylib.p/arch_ppc_startcontext.S.o -MF libucontext.1.dylib.p/arch_ppc_startcontext.S.o.d -o libucontext.1.dylib.p/arch_ppc_startcontext.S.o -c ../libucontext-1.3.1/arch/ppc/startcontext.S
../libucontext-1.3.1/arch/ppc/startcontext.S:15:Unknown pseudo-op: .hidden
../libucontext-1.3.1/arch/ppc/startcontext.S:15:Rest of line ignored. 1st junk character valued 108 (l).
../libucontext-1.3.1/arch/ppc/startcontext.S:16:Unknown pseudo-op: .global
../libucontext-1.3.1/arch/ppc/startcontext.S:16:Rest of line ignored. 1st junk character valued 95 (_).
../libucontext-1.3.1/arch/ppc/startcontext.S:18:Parameter syntax error (parameter 1)
../libucontext-1.3.1/arch/ppc/startcontext.S:24:Invalid mnemonic 'local'
../libucontext-1.3.1/arch/ppc/startcontext.S:27:Invalid mnemonic 'GOT'
../libucontext-1.3.1/arch/ppc/startcontext.S:28:Unknown pseudo-op: .end
../libucontext-1.3.1/arch/ppc/startcontext.S:28:Rest of line ignored. 1st junk character valued 108 (l).
[5/23] ccache /opt/local/bin/gcc-mp-14 -Ilibucontext.1.dylib.p -I. -I../libucontext-1.3.1 -I../libucontext-1.3.1/include -I../libucontext-1.3.1/arch/common -I../libucontext-1.3.1/arch/common/include -I/opt/local/include -fdiagnostics-color=always -Wall -Winvalid-pch -std=gnu11 -O0 -g -pipe -Os -arch ppc -D_DEFAULT_SOURCE -DEXPORT_UNPREFIXED -MD -MQ libucontext.1.dylib.p/arch_ppc_makecontext.c.o -MF libucontext.1.dylib.p/arch_ppc_makecontext.c.o.d -o libucontext.1.dylib.p/arch_ppc_makecontext.c.o -c ../libucontext-1.3.1/arch/ppc/makecontext.c
FAILED: libucontext.1.dylib.p/arch_ppc_makecontext.c.o 
ccache /opt/local/bin/gcc-mp-14 -Ilibucontext.1.dylib.p -I. -I../libucontext-1.3.1 -I../libucontext-1.3.1/include -I../libucontext-1.3.1/arch/common -I../libucontext-1.3.1/arch/common/include -I/opt/local/include -fdiagnostics-color=always -Wall -Winvalid-pch -std=gnu11 -O0 -g -pipe -Os -arch ppc -D_DEFAULT_SOURCE -DEXPORT_UNPREFIXED -MD -MQ libucontext.1.dylib.p/arch_ppc_makecontext.c.o -MF libucontext.1.dylib.p/arch_ppc_makecontext.c.o.d -o libucontext.1.dylib.p/arch_ppc_makecontext.c.o -c ../libucontext-1.3.1/arch/ppc/makecontext.c
In file included from ../libucontext-1.3.1/include/libucontext/libucontext.h:5,
                 from ../libucontext-1.3.1/arch/ppc/makecontext.c:19:
../libucontext-1.3.1/arch/common/include/libucontext/bits.h:8:9: error: unknown type name 'greg_t'
    8 | typedef greg_t libucontext_greg_t;
      |         ^~~~~~
../libucontext-1.3.1/arch/ppc/makecontext.c: In function 'libucontext_makecontext':
../libucontext-1.3.1/arch/ppc/makecontext.c:39:25: error: 'ucp->uc_mcontext' is a pointer; did you mean to use '->'?
   39 |         ucp->uc_mcontext.gregs[REG_NIP]  = (uintptr_t) func;
      |                         ^
      |                         ->
../libucontext-1.3.1/arch/ppc/makecontext.c:40:25: error: 'ucp->uc_mcontext' is a pointer; did you mean to use '->'?
   40 |         ucp->uc_mcontext.gregs[REG_LNK]  = (uintptr_t) &libucontext_trampoline;
      |                         ^
      |                         ->
../libucontext-1.3.1/arch/ppc/makecontext.c:41:25: error: 'ucp->uc_mcontext' is a pointer; did you mean to use '->'?
   41 |         ucp->uc_mcontext.gregs[REG_R31]  = (uintptr_t) ucp->uc_link;
      |                         ^
      |                         ->
../libucontext-1.3.1/arch/ppc/makecontext.c:42:25: error: 'ucp->uc_mcontext' is a pointer; did you mean to use '->'?
   42 |         ucp->uc_mcontext.gregs[REG_SP]   = (uintptr_t) sp;
      |                         ^
      |                         ->
../libucontext-1.3.1/arch/ppc/makecontext.c:50:41: error: 'ucp->uc_mcontext' is a pointer; did you mean to use '->'?
   50 |                         ucp->uc_mcontext.gregs[i + 3] = va_arg (va, libucontext_greg_t);
      |                                         ^
      |                                         ->
../libucontext-1.3.1/arch/ppc/makecontext.c:59: confused by earlier errors, bailing out
[6/23] ccache /opt/local/bin/gcc-mp-14 -Ilibucontext.1.dylib.p -I. -I../libucontext-1.3.1 -I../libucontext-1.3.1/include -I../libucontext-1.3.1/arch/common -I../libucontext-1.3.1/arch/common/include -I/opt/local/include -fdiagnostics-color=always -Wall -Winvalid-pch -std=gnu11 -O0 -g -pipe -Os -arch ppc -D_DEFAULT_SOURCE -DEXPORT_UNPREFIXED -MD -MQ libucontext.1.dylib.p/arch_ppc_retfromsyscall.c.o -MF libucontext.1.dylib.p/arch_ppc_retfromsyscall.c.o.d -o libucontext.1.dylib.p/arch_ppc_retfromsyscall.c.o -c ../libucontext-1.3.1/arch/ppc/retfromsyscall.c
ninja: build stopped: subcommand failed.
barracuda156 commented 1 month ago

@kaniini Could you say how to fix register defs? Normally ELF ABI discards register prefices, so r0 in Darwin is 0 in ELF, etc. However that makes sense as long as there are corresponding physical registers (r0 through r31 for integer registers). defs.h has numbering going up to REG_R47, which does not seem to make sense on PowerPC. Not sure which hardware is assumed here.

kaniini commented 2 days ago

The ppc implementation is Linux-specific and not supported on Darwin. I have no plans on ever adding support for ppc versions of MacOS.

barracuda156 commented 2 days ago

@kaniini If you could briefly respond to my question, I may arrive at a solution. I am not asking you to write the thing (after all, one needs hardware to test it), but I need to understand what the current thing is doing. BTW, Linux can certainly run on physically identical hardware, the only two differences are trivial syntax and ABI (this may or may not be problematic to adjust). Physical registers are neither.