From d82f3052c813f671561362126d0fbe08568542d3 Mon Sep 17 00:00:00 2001 From: lemon Date: Sat, 6 Dec 2025 11:41:44 +0100 Subject: add command-line predefined macros (-D, -U) --- amd64/sysv.c | 1 - c/lex.c | 56 ++++++++++++++++++++++++++++++++++++++++++++++++++++---- common.h | 3 +++ io.c | 39 +++++++++++++++++++++++++++++++++++---- ir/ir.h | 2 -- main.c | 7 +++++-- obj/elf.c | 6 +++--- targ.c | 4 +++- test/07-pp.c | 6 ++++-- test/run.sh | 3 ++- 10 files changed, 107 insertions(+), 20 deletions(-) diff --git a/amd64/sysv.c b/amd64/sysv.c index 712652a..299d35c 100644 --- a/amd64/sysv.c +++ b/amd64/sysv.c @@ -298,7 +298,6 @@ const struct mctarg t_amd64_sysv = { .rglob = 1<isa) { + switch (targ_mcisa) { case ISamd64: hdr.h32.machine = EM_X86_64; break; } hdr.h32.version = ELFVERSION; @@ -148,7 +148,7 @@ elfreloc(const char *sym, enum relockind kind, enum section section, uint off, v case Sdata: ++ndatarel; break; } assert(kind < NRELOCKIND); - vpush(&relocs, ((struct reloc) { section, relktab[mctarg->isa][kind], snam, off, addend })); + vpush(&relocs, ((struct reloc) { section, relktab[targ_mcisa][kind], snam, off, addend })); } static void @@ -365,7 +365,7 @@ elffini(struct wbuf *out) shnam_strtab = 36, shnam_symtab = 44, shnam_reltext = 52, shnam_relrodata = 63, shnam_reldata = 76 }; int align = targ_64bit ? 8 : 4; - bool userela = userelatab[mctarg->isa]; + bool userela = userelatab[targ_mcisa]; char shstrs[] = "\0.text\0.rodata\0.data\0.bss\0.shstrtab\0.strtab\0.symtab\0" ".rela.text\0.rela.rodata\0.rela.data"; if (!userela) { diff --git a/targ.c b/targ.c index 019f784..6a4a5bd 100644 --- a/targ.c +++ b/targ.c @@ -9,8 +9,9 @@ static const struct targ { bool charsigned; uchar sizetype, ptrdifftype, wchartype; const struct mctarg *mctarg; + enum mcisa isa; } targs[] = { - { "amd64-sysv", {8, 8, 8, 24}, {8, 8, 8, 8}, 1, TYULONG, TYLONG, TYINT, &t_amd64_sysv }, + { "amd64-sysv", {8, 8, 8, 24}, {8, 8, 8, 8}, 1, TYULONG, TYLONG, TYINT, &t_amd64_sysv, ISamd64 }, { "i686-sysv", {4, 8, 4, 8}, {4, 4, 4, 4}, 1, TYUINT, TYINT, TYINT } }; @@ -19,6 +20,7 @@ uchar targ_primalign[TYPTR+1]; uint targ_valistsize; enum typetag targ_sizetype, targ_ptrdifftype, targ_wchartype; bool targ_charsigned, targ_bigendian, targ_64bit; +enum mcisa targ_mcisa; const struct mctarg *mctarg; void diff --git a/test/07-pp.c b/test/07-pp.c index c26105d..6a50571 100644 --- a/test/07-pp.c +++ b/test/07-pp.c @@ -1,3 +1,4 @@ +/* CFLAGS: -D CMD_WORKING -DV=void */ /* EXPECT: ok /1 "\n"n ;.& 05.5 ADD(1,2) hi from header ;73 @@ -30,9 +31,10 @@ u\ t\ s - +#ifdef CMD_WORKING int -main(void) +main(V) +#endif { int CATl(foo); ++foobar; diff --git a/test/run.sh b/test/run.sh index 5e0bc0f..34d8101 100755 --- a/test/run.sh +++ b/test/run.sh @@ -16,11 +16,12 @@ run() { echo ---- $f ---- >> log.txt mkdir -p build/ args=$(awk '/\/\* ARGS:.*$/ {ORS=" ";for (i=3;i "$expected" if [ $? == 0 ]; then obj=build/"$(echo "$f" | sed -s 's/\.c$/.o/')" exe=build/"$(echo "$f" | sed -s 's/\.c$//')" - if ! ( x $ANTCC "$f" -c -o "$obj" && x $ANTCC "$obj" -o "$exe" ); then + if ! ( x $ANTCC $cflags "$f" -c -o "$obj" && x $ANTCC $cflags "$obj" -o "$exe" ); then echo !TEST ERROR $f echo !FAILED TO COMPILE echo '-------' -- cgit v1.2.3