gcc/libgo/runtime
Ian Lance Taylor f432d1282d re PR go/72814 (reflect FAILs on 32-bit Solaris/SPARC: SIGILL)
PR go/72814

    runtime: treat zero-sized result value as void
    
    Change the FFI interface to treat a call to a function that returns a
    zero-sized result as a call to a function that returns void.
    
    This is part of the fix for https://gcc.gnu.org/PR72814.  On 32-bit
    SPARC systems, a call to a function that returns a non-zero-sized struct
    is followed by an unimp instruction that describes the size of the
    struct.  The function returns to the address after the unimp
    instruction.  The libffi library can not represent a zero-sized struct,
    so we wind up treating it as a 1-byte struct.  Thus in that case libffi
    calls the function with an unimp instruction, but the function does not
    adjust the return address.  The result is that the program attempts to
    execute the unimp instruction, causing a crash.
    
    This is part of a change that fixes the crash by treating all functions
    that return zero bytes as functions that return void.
    
    Reviewed-on: https://go-review.googlesource.com/25585

	* go-gcc.cc (Gcc_backend::function_type): If the return type is
	zero bytes, treat the function as returning void.
	(return_statement): If the return type is zero bytes, don't
	actually return any values.

From-SVN: r239252
2016-08-08 19:53:44 +00:00
..
arch.h
array.h
chan.goc libgo: update to go1.7rc3 2016-07-22 18:15:38 +00:00
chan.h libgo: update to go1.7rc3 2016-07-22 18:15:38 +00:00
cpuprof.goc
defs.h
env_posix.c runtime: Remove now unnecessary pad field from ParFor. 2015-10-31 00:59:47 +00:00
getncpu-bsd.c
getncpu-irix.c
getncpu-linux.c
getncpu-none.c
getncpu-solaris.c
go-alloc.h
go-append.c
go-assert-interface.c
go-assert.c
go-assert.h
go-breakpoint.c
go-byte-array-to-string.c
go-caller.c libgo: update to go1.7rc3 2016-07-22 18:15:38 +00:00
go-callers.c compiler, runtime: mark stub methods, ignore them in runtime.Caller. 2016-02-03 06:54:41 +00:00
go-can-convert-interface.c
go-cdiv.c
go-cgo.c runtime: lock M during cgo call 2016-02-24 15:03:04 +00:00
go-check-interface.c
go-construct-map.c
go-convert-interface.c
go-copy.c
go-defer.c
go-defer.h
go-deferred-recover.c
go-eface-compare.c compiler, runtime: change type hash/equal to Go funcs 2015-10-29 17:14:51 +00:00
go-eface-val-compare.c compiler, runtime: change type hash/equal to Go funcs 2015-10-29 17:14:51 +00:00
go-ffi.c re PR go/72814 (reflect FAILs on 32-bit Solaris/SPARC: SIGILL) 2016-08-08 19:53:44 +00:00
go-ffi.h
go-fieldtrack.c
go-iface.goc
go-int-array-to-string.c
go-int-to-string.c
go-interface-compare.c compiler, runtime: change type hash/equal to Go funcs 2015-10-29 17:14:51 +00:00
go-interface-eface-compare.c compiler, runtime: change type hash/equal to Go funcs 2015-10-29 17:14:51 +00:00
go-interface-val-compare.c compiler, runtime: change type hash/equal to Go funcs 2015-10-29 17:14:51 +00:00
go-libmain.c runtime: For c-archive/c-shared, install signal handlers synchronously. 2016-02-12 22:10:09 +00:00
go-main.c re PR go/69357 (libgo refers to _end in a non-weak way) 2016-02-09 00:34:55 +00:00
go-make-slice.c
go-map-delete.c compiler, runtime: change type hash/equal to Go funcs 2015-10-29 17:14:51 +00:00
go-map-index.c compiler, runtime: change type hash/equal to Go funcs 2015-10-29 17:14:51 +00:00
go-map-len.c
go-map-range.c
go-matherr.c
go-memcmp.c
go-nanotime.c
go-new-map.c
go-new.c
go-nosys.c libgo: change build procedure to use build tags 2016-08-06 00:36:33 +00:00
go-now.c re PR go/66574 (Time is provided in millisecond precision instead of nanoseconds as described in go documentation) 2015-11-21 01:27:44 +00:00
go-panic.c
go-panic.h
go-print.c
go-recover.c
go-reflect-call.c re PR go/68496 ([libgo] reflect test fails on Linux x86-64) 2015-11-23 21:17:45 +00:00
go-reflect-map.c compiler, runtime: change type hash/equal to Go funcs 2015-10-29 17:14:51 +00:00
go-rune.c
go-runtime-error.c
go-setenv.c
go-signal.c libgo: Update to go1.6rc1. 2016-02-03 21:58:02 +00:00
go-strcmp.c
go-string-to-byte-array.c libgo: Update to final Go 1.6 release. 2016-02-18 05:56:46 +00:00
go-string-to-int-array.c
go-string.h
go-strplus.c
go-strslice.c
go-traceback.c
go-trampoline.c
go-type-complex.c compiler, runtime: change type hash/equal to Go funcs 2015-10-29 17:14:51 +00:00
go-type-eface.c compiler, runtime: change type hash/equal to Go funcs 2015-10-29 17:14:51 +00:00
go-type-error.c compiler, runtime: change type hash/equal to Go funcs 2015-10-29 17:14:51 +00:00
go-type-float.c compiler, runtime: change type hash/equal to Go funcs 2015-10-29 17:14:51 +00:00
go-type-identity.c compiler, runtime: change type hash/equal to Go funcs 2015-10-29 17:14:51 +00:00
go-type-interface.c compiler, runtime: change type hash/equal to Go funcs 2015-10-29 17:14:51 +00:00
go-type-string.c compiler, runtime: change type hash/equal to Go funcs 2015-10-29 17:14:51 +00:00
go-type.h compiler, reflect, runtime: remove zero field from type descriptor 2015-10-29 18:14:50 +00:00
go-typedesc-equal.c
go-unsafe-new.c
go-unsafe-newarray.c
go-unsafe-pointer.c compiler, reflect, runtime: remove zero field from type descriptor 2015-10-29 18:14:50 +00:00
go-unsetenv.c
go-unwind.c
go-varargs.c libgo: Solaris portability fixes. 2015-11-06 19:15:45 +00:00
goc2c.c
heapdump.c runtime: fix incorrectly commented out code in heapdump.c 2016-08-04 17:21:23 +00:00
interface.h
lfstack.goc runtime: Fix recent lfstack change on Solaris. 2015-09-24 13:33:20 +00:00
lock_futex.c
lock_sema.c
malloc.goc libgo: update to go1.7rc3 2016-07-22 18:15:38 +00:00
malloc.h runtime: Remove now unnecessary pad field from ParFor. 2015-10-31 00:59:47 +00:00
map.goc
map.h
mcache.c
mcentral.c
mem_posix_memalign.c
mem.c
mfixalloc.c
mgc0.c runtime: Remove now unnecessary pad field from ParFor. 2015-10-31 00:59:47 +00:00
mgc0.h
mheap.c
mprof.goc
msize.c
netpoll_epoll.c
netpoll_kqueue.c
netpoll_select.c re PR go/61303 (gccgo: segfault, regression since 4.8.2) 2015-11-26 00:24:21 +00:00
netpoll_stub.c
netpoll.goc
panic.c
parfor.c runtime: Remove now unnecessary pad field from ParFor. 2015-10-31 00:59:47 +00:00
print.c
proc.c libgo: update to go1.7rc3 2016-07-22 18:15:38 +00:00
rdebug.goc
reflect.goc
rtems-task-variable-add.c
runtime1.goc runtime: Remove now unnecessary pad field from ParFor. 2015-10-31 00:59:47 +00:00
runtime.c libgo: Update to go1.6rc1. 2016-02-03 21:58:02 +00:00
runtime.h libgo: update to go1.7rc3 2016-07-22 18:15:38 +00:00
sema.goc libgo: update to go1.7rc3 2016-07-22 18:15:38 +00:00
signal_unix.c runtime: For c-archive/c-shared, install signal handlers synchronously. 2016-02-12 22:10:09 +00:00
signal_unix.h
sigqueue.goc runtime: Remove now unnecessary pad field from ParFor. 2015-10-31 00:59:47 +00:00
string.goc
thread-linux.c
thread-sema.c
thread.c
time.goc
yield.c