for weak references. GCC 4.2+ and Clang require static, older GCC wants
extern. Change __weak_reference to include sym. This requires changes
the existing users to not reuse the name of the symbol, but avoids
further differences between GCC 4.1 and GCC 4.2+/clang.
use it across the board.
crt0.c now contains stuff that REALLY IS machine-dependent, or stuff that
is completely intermingled in machdep code (and thus can't be separated
easily).
Expects additional register-passed arguments from the kernel on
exec(). If no such args ($a0 is zero), fall back to the old hack of
adjusting the current $sp with a hard-coded frame offset for __start's
local frame(!).
Suggested by Jason Thorpe (thorpej@nas.nasa.gov), debugged and
stackframe offsets updated by Jonathan Stone.