980f9a0a4b
Add a little shell script to auto-generate runtime.sigtable from the known signal names. Force the main package to always import the runtime package. Otherwise some runtime package global variables may never be initialized. Set the syscallsp and syscallpc fields of g when entering a syscall, so that the runtime package knows when a g is executing a syscall. Fix runtime.funcPC to avoid dead store elimination of the interface value when the function is inlined. Reviewed-on: https://go-review.googlesource.com/33025 From-SVN: r242060
60 lines
999 B
C
60 lines
999 B
C
// Copyright 2011 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.
|
|
|
|
#include "config.h"
|
|
|
|
#include <stddef.h>
|
|
#include <sys/types.h>
|
|
#include <sys/time.h>
|
|
#include <sched.h>
|
|
#include <unistd.h>
|
|
|
|
#ifdef HAVE_SYS_SELECT_H
|
|
#include <sys/select.h>
|
|
#endif
|
|
|
|
#if defined (__i386__) || defined (__x86_64__)
|
|
#include <xmmintrin.h>
|
|
#endif
|
|
|
|
#include "runtime.h"
|
|
|
|
/* Spin wait. */
|
|
|
|
void
|
|
runtime_procyield (uint32 cnt)
|
|
{
|
|
volatile uint32 i;
|
|
|
|
for (i = 0; i < cnt; ++i)
|
|
{
|
|
#if defined (__i386__) || defined (__x86_64__)
|
|
_mm_pause ();
|
|
#endif
|
|
}
|
|
}
|
|
|
|
/* Ask the OS to reschedule this thread. */
|
|
|
|
void runtime_osyield(void)
|
|
__attribute__ ((no_split_stack));
|
|
|
|
void
|
|
runtime_osyield (void)
|
|
{
|
|
sched_yield ();
|
|
}
|
|
|
|
/* Sleep for some number of microseconds. */
|
|
|
|
void
|
|
runtime_usleep (uint32 us)
|
|
{
|
|
struct timeval tv;
|
|
|
|
tv.tv_sec = us / 1000000;
|
|
tv.tv_usec = us % 1000000;
|
|
select (0, NULL, NULL, NULL, &tv);
|
|
}
|