// 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.h"
#include "malloc.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 = runtime_g()->paniconfault;
	runtime_g()->paniconfault = enabled;
}
