uses set/longjmp to call f()