If a panic happens in the runtime we turn that into a fatal error. We use the caller's PC to determine if the panic call is inside the runtime. getcallerpc returns the PC immediately after the call instruction. If the call is the very last instruction of a function, it may not find this PC belong to a runtime function, giving false result. We need to back off the PC by 1 to the call instruction. The gc runtime doesn't do this because the gc compiler always emit an instruction following a panic call, presumably an UNDEF instruction which turns into an architecture-specific illegal instruction. Our compiler doesn't do this. Reviewed-on: https://go-review.googlesource.com/c/159437 From-SVN: r268358 |
||
---|---|---|
.. | ||
aeshash.c | ||
arch.h | ||
array.h | ||
defs.h | ||
env_posix.c | ||
getncpu-aix.c | ||
getncpu-bsd.c | ||
getncpu-irix.c | ||
getncpu-linux.c | ||
getncpu-none.c | ||
getncpu-solaris.c | ||
go-assert.c | ||
go-assert.h | ||
go-caller.c | ||
go-callers.c | ||
go-cdiv.c | ||
go-cgo.c | ||
go-construct-map.c | ||
go-ffi.c | ||
go-fieldtrack.c | ||
go-libmain.c | ||
go-main.c | ||
go-matherr.c | ||
go-memclr.c | ||
go-memcmp.c | ||
go-memequal.c | ||
go-memmove.c | ||
go-nanotime.c | ||
go-nosys.c | ||
go-now.c | ||
go-reflect-call.c | ||
go-runtime-error.c | ||
go-setenv.c | ||
go-signal.c | ||
go-string.h | ||
go-strslice.c | ||
go-type.h | ||
go-typedesc-equal.c | ||
go-unsafe-pointer.c | ||
go-unsetenv.c | ||
go-unwind.c | ||
go-varargs.c | ||
panic.c | ||
print.c | ||
proc.c | ||
rtems-task-variable-add.c | ||
runtime.h | ||
runtime_c.c | ||
stack.c | ||
thread.c | ||
yield.c |