backtrace: fix NULL pointer deref on linux

* dli_sname == NULL when no matching symbol can be found.

* Look for main() as the stack top, not start(). Don't use
  __libc_start_main(), glibc pushes a NULL return address on the stack
  (i.e. the pointer to the next stack frame is actually NULL.)