summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorian <ian@138bc75d-0d04-0410-961f-82ee72b054a4>2012-03-30 21:10:32 +0000
committerian <ian@138bc75d-0d04-0410-961f-82ee72b054a4>2012-03-30 21:10:32 +0000
commit9731acf5058127b5cd40d79134497c798f9188a1 (patch)
tree6b2c9662a2b212b86192a8ef1a2d7ac29c33eeb6
parent6c925978bf931c7895790430f387c426459c7109 (diff)
downloadgcc-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
-rw-r--r--libgo/go/syscall/mksyscall.awk13
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"
}