In try/hello, the use of arrays triggers stack smashing protection
This is a subtle problem.
The example try/hello compiles with
gcc -m16 -O1 -Wall -fno-pic -fno-asynchronous-unwind-tables -c libc.S -fno-builtin -o libc.o
gcc -m16 -O1 -Wall -fno-pic -fno-asynchronous-unwind-tables -c crt0.S -fno-builtin -o crt0.o
gcc -m16 main.o libc.o -nostartfiles -nostdlib -T hello.ld -orphan-handling=discard -o hello.bin
and it works like a charm. However, if the student resolving the exercise implements an array, it seems that GCC automatically inserts the stack protection canary. Since the program does not link with the standard lib, the symbol __stack_chk_fail remains unresolved and the linking breaks.
It's better to enable -fno-stack-protectior by default (here and in other code examples where the problem can emerge).