diff options
author | ian <ian@138bc75d-0d04-0410-961f-82ee72b054a4> | 2012-03-30 21:10:32 +0000 |
---|---|---|
committer | ian <ian@138bc75d-0d04-0410-961f-82ee72b054a4> | 2012-03-30 21:10:32 +0000 |
commit | 9731acf5058127b5cd40d79134497c798f9188a1 (patch) | |
tree | 6b2c9662a2b212b86192a8ef1a2d7ac29c33eeb6 /libgo | |
parent | 6c925978bf931c7895790430f387c426459c7109 (diff) | |
download | gcc-9731acf5058127b5cd40d79134497c798f9188a1.tar.gz |
syscall: Convert errno to error after Exitsyscall.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@186020 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'libgo')
-rw-r--r-- | libgo/go/syscall/mksyscall.awk | 13 |
1 files changed, 12 insertions, 1 deletions
diff --git a/libgo/go/syscall/mksyscall.awk b/libgo/go/syscall/mksyscall.awk index 5e30e863231..b81796031ca 100644 --- a/libgo/go/syscall/mksyscall.awk +++ b/libgo/go/syscall/mksyscall.awk @@ -199,6 +199,7 @@ BEGIN { } printf("c_%s(%s)\n", cfnname, args) + seterr = 0 if (gofnresults != "") { fields = split(gofnresults, goresults, ", *") if (fields > 2) { @@ -218,13 +219,17 @@ BEGIN { gotype = goparam[2] if (goname == "err") { + print "\tvar errno Errno" + print "\tsetErrno := false" if (cfnresult ~ /^\*/) { print "\tif _r == nil {" } else { print "\tif _r < 0 {" } - print "\t\terr = GetErrno()" + print "\t\terrno = GetErrno()" + print "\t\tsetErrno = true" print "\t}" + seterr = 1 } else if (gotype == "uintptr" && cfnresult ~ /^\*/) { printf("\t%s = (%s)(unsafe.Pointer(_r))\n", goname, gotype) } else { @@ -243,6 +248,12 @@ BEGIN { print "\tExitsyscall()" } + if (seterr) { + print "\tif setErrno {" + print "\t\terr = errno" + print "\t}" + } + if (gofnresults != "") { print "\treturn" } |