From b6f3cbe5f21b85ce515af24a21813df6924b74f8 Mon Sep 17 00:00:00 2001 From: Claude Date: Thu, 21 May 2026 19:10:51 +0000 Subject: [PATCH 1/2] rc/bin/ape/pcc: shadow native pcc with APExp cc wrapper The native 9front pcc script ignores -g and produces 6.out (no -o passed to 6l). This rc script shadows it via the apexp-sh bind mount, delegating to /$objtype/bin/ape/cc which is the APExp cc wrapper (9src/cc.c) with full -g / dwtypes / dw2elf pipeline support. https://claude.ai/code/session_01WGAwvvTwDg2yknFkmZ3qzs --- rc/bin/ape/pcc | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 rc/bin/ape/pcc diff --git a/rc/bin/ape/pcc b/rc/bin/ape/pcc new file mode 100644 index 000000000..7cfb44f7f --- /dev/null +++ b/rc/bin/ape/pcc @@ -0,0 +1,4 @@ +#!/bin/rc +# pcc — APExp wrapper: delegates to cc (sys/src/ape/9src/cc.c) which +# supports -g, -E, -S and the full APE include/link path setup. +exec /$objtype/bin/ape/cc $* From c30fa297ca7281c0fe02a86ddefe387ee5269217 Mon Sep 17 00:00:00 2001 From: Claude Date: Thu, 21 May 2026 19:20:06 +0000 Subject: [PATCH 2/2] 9src/cc: fix putenv/unsetenv, add pcc binary with .$O object naming MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - putenv("_DWTYPES=1") → putenv("_DWTYPES","1"): Plan9 libc uses 2-arg form - unsetenv("_DWTYPES") → putenv("_DWTYPES",""): no unsetenv in Plan9 libc - argv[0]-based object extension: cc→.o (configure compat), pcc→.$O (Plan9 native) - mkfile: install pcc as a copy of cc so the compiled binary shadows native pcc - Remove rc/bin/ape/pcc script (superseded by the compiled binary) https://claude.ai/code/session_01WGAwvvTwDg2yknFkmZ3qzs --- rc/bin/ape/pcc | 4 ---- sys/src/ape/9src/cc.c | 10 ++++++---- sys/src/ape/9src/mkfile | 6 ++++++ 3 files changed, 12 insertions(+), 8 deletions(-) delete mode 100644 rc/bin/ape/pcc diff --git a/rc/bin/ape/pcc b/rc/bin/ape/pcc deleted file mode 100644 index 7cfb44f7f..000000000 --- a/rc/bin/ape/pcc +++ /dev/null @@ -1,4 +0,0 @@ -#!/bin/rc -# pcc — APExp wrapper: delegates to cc (sys/src/ape/9src/cc.c) which -# supports -g, -E, -S and the full APE include/link path setup. -exec /$objtype/bin/ape/cc $* diff --git a/sys/src/ape/9src/cc.c b/sys/src/ape/9src/cc.c index 13ce22481..6739f20a8 100644 --- a/sys/src/ape/9src/cc.c +++ b/sys/src/ape/9src/cc.c @@ -61,13 +61,15 @@ void main(int argc, char *argv[]) { char *s, *suf, *ccpath, *lib; - char *oname; + char *oname, *objext; int haveoname = 0; int i, cppn, ccn; Objtype *ot; ot = findoty(); oname = "a.out"; + /* cc produces .o (for configure compat); pcc uses arch-native .$O */ + objext = (strcmp(argv[0], "cc") == 0) ? "o" : ot->o; append(&cpp, "cpp"); append(&cpp, "-D__STDC__=1"); /* ANSI says so */ append(&cpp, "-D_POSIX_SOURCE="); @@ -187,7 +189,7 @@ main(int argc, char *argv[]) cppn = cpp.n; ccn = cc.n; if(gflag) - putenv("_DWTYPES=1"); + putenv("_DWTYPES", "1"); for(i = 0; i < srcs.n; i++) { append(&cpp, srcs.strings[i]); if(Eflag) @@ -200,7 +202,7 @@ main(int argc, char *argv[]) if (haveoname && cflag) append(&cc, oname); else - append(&cc, changeext(srcs.strings[i], "o")); + append(&cc, changeext(srcs.strings[i], objext)); } dopipe("/bin/cpp", &cpp, ccpath, &cc); } @@ -208,7 +210,7 @@ main(int argc, char *argv[]) cc.n = ccn; } if(gflag) - unsetenv("_DWTYPES"); + putenv("_DWTYPES", ""); if(!cflag) { List dw2elf_cmd; append(&ld, "-o"); diff --git a/sys/src/ape/9src/mkfile b/sys/src/ape/9src/mkfile index 865eb1522..7bb80f7df 100644 --- a/sys/src/ape/9src/mkfile +++ b/sys/src/ape/9src/mkfile @@ -10,3 +10,9 @@ TARG=\ BIN=$APEXPROOT/$objtype/bin/ape <$APEXPROOT/sys/src/cmd/mkmany + +# pcc: same binary as cc; argv[0]=="pcc" selects .$O object extension +$BIN/pcc: $BIN/cc + cp $BIN/cc $BIN/pcc + +install:V: $BIN/cc $BIN/pcc