From d47b9d50ef1cf862b20ff26fd76030b3df687c9e Mon Sep 17 00:00:00 2001 From: Cody Boone Ferguson <53008573+xexyl@users.noreply.github.com> Date: Sun, 21 May 2023 04:17:30 -0700 Subject: [PATCH] Add alt supplementary program to 2001/anonymous Running make alt will compile the anonymous.ten.c without specifying -m32: whether it'll end up being 64-bit or not would depend on the system but it'll be saved as anonymous.ten.64 anyway. The try.me.sh script will run this program directly, skipping the entry itself, if the anonymous.ten.c cannot be compiled as a 32-bit binary. Updated .gitignore. --- 2001/anonymous/.gitignore | 1 + 2001/anonymous/Makefile | 11 ++++++++--- 2001/anonymous/README.md | 2 ++ 2001/anonymous/try.me.sh | 7 +++++-- 4 files changed, 16 insertions(+), 5 deletions(-) diff --git a/2001/anonymous/.gitignore b/2001/anonymous/.gitignore index 28f278ffa..f596565bd 100644 --- a/2001/anonymous/.gitignore +++ b/2001/anonymous/.gitignore @@ -5,3 +5,4 @@ ten.bak.od ten.bak.txt ten.od ten.txt +anonymous.ten.64 diff --git a/2001/anonymous/Makefile b/2001/anonymous/Makefile index 0930f1df6..7937aa85f 100644 --- a/2001/anonymous/Makefile +++ b/2001/anonymous/Makefile @@ -117,10 +117,10 @@ PROG= ${ENTRY} # OBJ= ${PROG}.o DATA= -TARGET= ${PROG} ${PROG}.ten +TARGET= ${PROG} ${PROG}.ten ${PROG}.ten.64 # -ALT_OBJ= -ALT_TARGET= +ALT_OBJ= ${PROG}.ten.64.o +ALT_TARGET= ${PROG}.ten.64 ################# @@ -156,6 +156,11 @@ ${PROG}.ten: ${PROG}.ten.c @echo ${CC} ${CFLAGS} -m32 $< -o $@ ${LIBS} +${PROG}.ten.64: ${PROG}.ten.c + @echo "WARNING: the file created by this rule will NOT work with the entry itself;" + @echo "this is because it works ONLY on 32-bit ELF binaries! This however at least" + @echo "lets you see the supplementary program in action." + ${CC} ${CFLAGS} $< -o $@ ${LIBS} # alternative executable # diff --git a/2001/anonymous/README.md b/2001/anonymous/README.md index 7cb07ec00..8095eebd6 100644 --- a/2001/anonymous/README.md +++ b/2001/anonymous/README.md @@ -82,6 +82,8 @@ What happens if you try it on another file like [anonymous.c](anonymous.c)? Can you recompile it okay? What if you run it on `anonymous` itself? Can you run the program successfully after it without recompiling? +NOTE: if the 32-bit version cannot be compiled the script will at least run the +alternate version of the [anonymous.ten](anonymous.ten.c) program. ## Judges' remarks: diff --git a/2001/anonymous/try.me.sh b/2001/anonymous/try.me.sh index 36f6f7ff3..fc509fca7 100755 --- a/2001/anonymous/try.me.sh +++ b/2001/anonymous/try.me.sh @@ -1,6 +1,6 @@ #!/usr/bin/env bash -make clobber all >/dev/null 2>&1 +make clobber alt all >/dev/null 2>&1 TARGET="anonymous.ten" @@ -27,5 +27,8 @@ if [[ -f "$TARGET" ]]; then diff -s ten.txt ten.bak.txt else echo "cannot compile anonymous.ten.c as 32-bit, sorry." - exit 1 + echo "will run 64-bit version directly." + sleep 3 + echo "$ ./$TARGET.64" + ./"$TARGET".64 fi