From a6804ea9293fc10c85568c475ecdb402106fce8c Mon Sep 17 00:00:00 2001 From: Ian Lance Taylor Date: Wed, 16 Jan 2019 22:38:33 +0000 Subject: [PATCH] syscall: mark C syscall functions noescape Many C syscall functions take pointer arguments. The pointers don't escape in the C functions. Mark the C functions noescape so calling them doesn't need allocation. Reviewed-on: https://go-review.googlesource.com/c/158158 From-SVN: r267989 --- gcc/go/gofrontend/MERGE | 2 +- libgo/go/syscall/exec_linux.go | 1 + libgo/go/syscall/mksyscall.awk | 1 + 3 files changed, 3 insertions(+), 1 deletion(-) diff --git a/gcc/go/gofrontend/MERGE b/gcc/go/gofrontend/MERGE index b139151..67abd99 100644 --- a/gcc/go/gofrontend/MERGE +++ b/gcc/go/gofrontend/MERGE @@ -1,4 +1,4 @@ -9a79c333e896ea49f6a708d459148074d29a2af6 +ee94431c133a90ca5c3c5ebbebcb019c60258dac The first line of this file holds the git revision number of the last merge done from the gofrontend repository. diff --git a/libgo/go/syscall/exec_linux.go b/libgo/go/syscall/exec_linux.go index 4cc018b..e5ccc69 100644 --- a/libgo/go/syscall/exec_linux.go +++ b/libgo/go/syscall/exec_linux.go @@ -62,6 +62,7 @@ func runtime_AfterFork() func runtime_AfterForkInChild() // Implemented in clone_linux.c +//go:noescape func rawClone(flags _C_ulong, child_stack *byte, ptid *Pid_t, ctid *Pid_t, regs unsafe.Pointer) _C_long // Fork, dup fd onto 0..len(fd), and exec(argv0, argvv, envv) in child. diff --git a/libgo/go/syscall/mksyscall.awk b/libgo/go/syscall/mksyscall.awk index 6fbd2ac..50802d9 100644 --- a/libgo/go/syscall/mksyscall.awk +++ b/libgo/go/syscall/mksyscall.awk @@ -98,6 +98,7 @@ BEGIN { printf("// Automatically generated wrapper for %s/%s\n", gofnname, cfnname) if (!(cfnname in cfns)) { cfns[cfnname] = 1 + printf("//go:noescape\n") printf("//extern %s\n", cfnname) printf("func c_%s(%s) %s\n", cfnname, cfnparams, cfnresult) } -- 2.7.4