// Copyright 2013 The Go Authors.  All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

package runtime∕debug
#include "runtime.h"
#include "arch_GOARCH.h"
#include "malloc.h"
#include "stack.h"

func setMaxStack(in int) (out int) {
	out = runtime·maxstacksize;
	runtime·maxstacksize = in;
}

func setGCPercent(in int) (out int) {
	out = runtime·setgcpercent(in);
}

func setMaxThreads(in int) (out int) {
	out = runtime·setmaxthreads(in);
}

func SetPanicOnFault(enabled bool) (old bool) {
	old = g->paniconfault;
	g->paniconfault = enabled;
}
