hey
This problem with busybox: http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=621137 seems to be a toolchain issue.
It occurs with FSF GCC 4.5.2 but not 4.6, and it doesn't occur with Linaro GCC 4.5 but it does with Debian gcc-4.5. I'm trying to identify the fix which Linaro applied to solve this! :-) Michael Hope told me he remembers we fixed something similar for Qt, but he couldn't find the patch and suggested I post here to get feedback.
I've pushed ash.i and .s at: http://people.linaro.org/~lool/ash.i which you can build with: gcc -save-temps -std=gnu99 -Wall -Wshadow -Wwrite-strings -Wundef -Wstrict-prototypes -Wunused -Wunused-parameter -Wunused-function -Wunused-value -Wmissing-prototypes -Wmissing-declarations -Wdeclaration-after-statement -Wold-style-definition -fno-builtin-strlen -finline-limit=0 -fomit-frame-pointer -ffunction-sections -fdata-sections -fno-guess-branch-probability -funsigned-char -static-libgcc -falign-functions=1 -falign-jumps=1 -falign-labels=1 -falign-loops=1 -g -Os -c -o ash2.o ash.i
the interesting part is that ash.s has tryexec as not returning, when it does return: grep ^tryexec ash.s -A5 | grep return
this seems to be due to the combination of tryexec being static, its parent being noreturn, and one argument of tryexec being unused.
Any idea of which Linaro patch solved this? :-)
Does it make sense to raise this to FSF GCC 4.5?
Thanks!