mirror of
https://github.com/ossrs/srs.git
synced 2025-03-09 15:49:59 +00:00
Merge branch 'srs.master'
This commit is contained in:
commit
1e51462677
1 changed files with 203 additions and 511 deletions
|
@ -57,205 +57,33 @@
|
||||||
/*****************************************
|
/*****************************************
|
||||||
* Platform specifics
|
* Platform specifics
|
||||||
*/
|
*/
|
||||||
#if defined (AIX)
|
#if defined (LINUX)
|
||||||
#define MD_STACK_GROWS_DOWN
|
/* linux ok, defined bellow */
|
||||||
#define MD_USE_SYSV_ANON_MMAP
|
#elif defined (AIX)
|
||||||
#define MD_ACCEPT_NB_INHERITED
|
#error "AIX not supported"
|
||||||
#define MD_ALWAYS_UNSERIALIZED_ACCEPT
|
|
||||||
|
|
||||||
#ifndef MD_HAVE_SOCKLEN_T
|
|
||||||
#define MD_HAVE_SOCKLEN_T
|
|
||||||
#define socklen_t unsigned long
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#define MD_SETJMP(env) _setjmp(env)
|
|
||||||
#define MD_LONGJMP(env, val) _longjmp(env, val)
|
|
||||||
|
|
||||||
#define MD_INIT_CONTEXT(_thread, _sp, _main) \
|
|
||||||
ST_BEGIN_MACRO \
|
|
||||||
if (MD_SETJMP((_thread)->context)) \
|
|
||||||
_main(); \
|
|
||||||
(_thread)->context[3] = (long) (_sp); \
|
|
||||||
ST_END_MACRO
|
|
||||||
|
|
||||||
#define MD_GET_UTIME() \
|
|
||||||
timebasestruct_t rt; \
|
|
||||||
(void) read_real_time(&rt, TIMEBASE_SZ); \
|
|
||||||
(void) time_base_to_time(&rt, TIMEBASE_SZ); \
|
|
||||||
return (rt.tb_high * 1000000LL + rt.tb_low / 1000)
|
|
||||||
|
|
||||||
#elif defined (CYGWIN)
|
#elif defined (CYGWIN)
|
||||||
#define MD_STACK_GROWS_DOWN
|
#error "CYGWIN not supported"
|
||||||
#define MD_USE_BSD_ANON_MMAP
|
|
||||||
#define MD_ACCEPT_NB_NOT_INHERITED
|
|
||||||
#define MD_ALWAYS_UNSERIALIZED_ACCEPT
|
|
||||||
|
|
||||||
#define MD_SETJMP(env) setjmp(env)
|
|
||||||
#define MD_LONGJMP(env, val) longjmp(env, val)
|
|
||||||
|
|
||||||
#define MD_JB_SP 7
|
|
||||||
|
|
||||||
#define MD_GET_SP(_t) (_t)->context[MD_JB_SP]
|
|
||||||
|
|
||||||
#define MD_INIT_CONTEXT(_thread, _sp, _main) \
|
|
||||||
ST_BEGIN_MACRO \
|
|
||||||
if (MD_SETJMP((_thread)->context)) \
|
|
||||||
_main(); \
|
|
||||||
MD_GET_SP(_thread) = (long) (_sp); \
|
|
||||||
ST_END_MACRO
|
|
||||||
|
|
||||||
#define MD_GET_UTIME() \
|
|
||||||
struct timeval tv; \
|
|
||||||
(void) gettimeofday(&tv, NULL); \
|
|
||||||
return (tv.tv_sec * 1000000LL + tv.tv_usec)
|
|
||||||
|
|
||||||
#elif defined (DARWIN)
|
#elif defined (DARWIN)
|
||||||
#define MD_STACK_GROWS_DOWN
|
#error "DARWIN not supported"
|
||||||
#define MD_USE_BSD_ANON_MMAP
|
|
||||||
#define MD_ACCEPT_NB_INHERITED
|
|
||||||
#define MD_ALWAYS_UNSERIALIZED_ACCEPT
|
|
||||||
#define MD_HAVE_SOCKLEN_T
|
|
||||||
|
|
||||||
#define MD_SETJMP(env) _setjmp(env)
|
|
||||||
#define MD_LONGJMP(env, val) _longjmp(env, val)
|
|
||||||
|
|
||||||
#if defined(__ppc__)
|
|
||||||
#define MD_JB_SP 0
|
|
||||||
#elif defined(__i386__)
|
|
||||||
#define MD_JB_SP 9
|
|
||||||
#elif defined(__x86_64__)
|
|
||||||
#define MD_JB_SP 4
|
|
||||||
#else
|
|
||||||
#error Unknown CPU architecture
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#define MD_INIT_CONTEXT(_thread, _sp, _main) \
|
|
||||||
ST_BEGIN_MACRO \
|
|
||||||
if (MD_SETJMP((_thread)->context)) \
|
|
||||||
_main(); \
|
|
||||||
*((long *)&((_thread)->context[MD_JB_SP])) = (long) (_sp); \
|
|
||||||
ST_END_MACRO
|
|
||||||
|
|
||||||
#define MD_GET_UTIME() \
|
|
||||||
struct timeval tv; \
|
|
||||||
(void) gettimeofday(&tv, NULL); \
|
|
||||||
return (tv.tv_sec * 1000000LL + tv.tv_usec)
|
|
||||||
|
|
||||||
#elif defined (FREEBSD)
|
#elif defined (FREEBSD)
|
||||||
#define MD_STACK_GROWS_DOWN
|
#error "FREEBSD not supported"
|
||||||
#define MD_USE_BSD_ANON_MMAP
|
|
||||||
#define MD_ACCEPT_NB_INHERITED
|
|
||||||
#define MD_ALWAYS_UNSERIALIZED_ACCEPT
|
|
||||||
|
|
||||||
#define MD_SETJMP(env) _setjmp(env)
|
|
||||||
#define MD_LONGJMP(env, val) _longjmp(env, val)
|
|
||||||
|
|
||||||
#if defined(__i386__)
|
|
||||||
#define MD_JB_SP 2
|
|
||||||
#elif defined(__alpha__)
|
|
||||||
#define MD_JB_SP 34
|
|
||||||
#elif defined(__amd64__)
|
|
||||||
#define MD_JB_SP 2
|
|
||||||
#else
|
|
||||||
#error Unknown CPU architecture
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#define MD_INIT_CONTEXT(_thread, _sp, _main) \
|
|
||||||
ST_BEGIN_MACRO \
|
|
||||||
if (MD_SETJMP((_thread)->context)) \
|
|
||||||
_main(); \
|
|
||||||
(_thread)->context[0]._jb[MD_JB_SP] = (long) (_sp); \
|
|
||||||
ST_END_MACRO
|
|
||||||
|
|
||||||
#define MD_GET_UTIME() \
|
|
||||||
struct timeval tv; \
|
|
||||||
(void) gettimeofday(&tv, NULL); \
|
|
||||||
return (tv.tv_sec * 1000000LL + tv.tv_usec)
|
|
||||||
|
|
||||||
#elif defined (HPUX)
|
#elif defined (HPUX)
|
||||||
#define MD_STACK_GROWS_UP
|
#error "HPUX not supported"
|
||||||
#define MD_USE_BSD_ANON_MMAP
|
|
||||||
#define MD_ACCEPT_NB_INHERITED
|
|
||||||
#define MD_ALWAYS_UNSERIALIZED_ACCEPT
|
|
||||||
|
|
||||||
#define MD_SETJMP(env) _setjmp(env)
|
|
||||||
#define MD_LONGJMP(env, val) _longjmp(env, val)
|
|
||||||
|
|
||||||
#ifndef __LP64__
|
|
||||||
/* 32-bit mode (ILP32 data model) */
|
|
||||||
#define MD_INIT_CONTEXT(_thread, _sp, _main) \
|
|
||||||
ST_BEGIN_MACRO \
|
|
||||||
if (MD_SETJMP((_thread)->context)) \
|
|
||||||
_main(); \
|
|
||||||
((long *)((_thread)->context))[1] = (long) (_sp); \
|
|
||||||
ST_END_MACRO
|
|
||||||
#else
|
|
||||||
/* 64-bit mode (LP64 data model) */
|
|
||||||
#define MD_STACK_PAD_SIZE 256
|
|
||||||
/* Last stack frame must be preserved */
|
|
||||||
#define MD_INIT_CONTEXT(_thread, _sp, _main) \
|
|
||||||
ST_BEGIN_MACRO \
|
|
||||||
if (MD_SETJMP((_thread)->context)) \
|
|
||||||
_main(); \
|
|
||||||
memcpy((char *)(_sp) - MD_STACK_PAD_SIZE, \
|
|
||||||
((char **)((_thread)->context))[1] - MD_STACK_PAD_SIZE, \
|
|
||||||
MD_STACK_PAD_SIZE); \
|
|
||||||
((long *)((_thread)->context))[1] = (long) (_sp); \
|
|
||||||
ST_END_MACRO
|
|
||||||
#endif /* !__LP64__ */
|
|
||||||
|
|
||||||
#define MD_GET_UTIME() \
|
|
||||||
struct timeval tv; \
|
|
||||||
(void) gettimeofday(&tv, NULL); \
|
|
||||||
return (tv.tv_sec * 1000000LL + tv.tv_usec)
|
|
||||||
|
|
||||||
#elif defined (IRIX)
|
#elif defined (IRIX)
|
||||||
#include <sys/syssgi.h>
|
#error "IRIX not supported"
|
||||||
|
#elif defined (NETBSD)
|
||||||
|
#error "NETBSD not supported"
|
||||||
|
#elif defined (OPENBSD)
|
||||||
|
#error "OPENBSD not supported"
|
||||||
|
#elif defined (OSF1)
|
||||||
|
#error "OSF1 not supported"
|
||||||
|
#elif defined (SOLARIS)
|
||||||
|
#error "SOLARIS not supported"
|
||||||
|
#else
|
||||||
|
#error "Unknown OS"
|
||||||
|
#endif /* OS */
|
||||||
|
|
||||||
#define MD_STACK_GROWS_DOWN
|
/* linux only, defined bellow */
|
||||||
#define MD_USE_SYSV_ANON_MMAP
|
|
||||||
#define MD_ACCEPT_NB_INHERITED
|
|
||||||
#define MD_ALWAYS_UNSERIALIZED_ACCEPT
|
|
||||||
|
|
||||||
#define MD_SETJMP(env) setjmp(env)
|
|
||||||
#define MD_LONGJMP(env, val) longjmp(env, val)
|
|
||||||
|
|
||||||
#define MD_INIT_CONTEXT(_thread, _sp, _main) \
|
|
||||||
ST_BEGIN_MACRO \
|
|
||||||
(void) MD_SETJMP((_thread)->context); \
|
|
||||||
(_thread)->context[JB_SP] = (long) (_sp); \
|
|
||||||
(_thread)->context[JB_PC] = (long) _main; \
|
|
||||||
ST_END_MACRO
|
|
||||||
|
|
||||||
#define MD_GET_UTIME() \
|
|
||||||
static int inited = 0; \
|
|
||||||
static clockid_t clock_id = CLOCK_SGI_CYCLE; \
|
|
||||||
struct timespec ts; \
|
|
||||||
if (!inited) { \
|
|
||||||
if (syssgi(SGI_CYCLECNTR_SIZE) < 64) \
|
|
||||||
clock_id = CLOCK_REALTIME; \
|
|
||||||
inited = 1; \
|
|
||||||
} \
|
|
||||||
(void) clock_gettime(clock_id, &ts); \
|
|
||||||
return (ts.tv_sec * 1000000LL + ts.tv_nsec / 1000)
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Cap the stack by zeroing out the saved return address register
|
|
||||||
* value. This allows libexc, used by SpeedShop, to know when to stop
|
|
||||||
* backtracing since it won't find main, start, or any other known
|
|
||||||
* stack root function in a state thread's stack. Without this libexc
|
|
||||||
* traces right off the stack and crashes.
|
|
||||||
* The function preamble stores ra at 8(sp), this stores zero there.
|
|
||||||
* N.B. This macro is compiler/ABI dependent. It must change if ANY more
|
|
||||||
* automatic variables are added to the _st_thread_main() routine, because
|
|
||||||
* the address where ra is stored will change.
|
|
||||||
*/
|
|
||||||
#if !defined(__GNUC__) && defined(_MIPS_SIM) && _MIPS_SIM != _ABIO32
|
|
||||||
#define MD_CAP_STACK(var_addr) \
|
|
||||||
(((volatile __uint64_t *)(var_addr))[1] = 0)
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#elif defined (LINUX)
|
|
||||||
/*
|
/*
|
||||||
* These are properties of the linux kernel and are the same on every
|
* These are properties of the linux kernel and are the same on every
|
||||||
* flavor and architecture.
|
* flavor and architecture.
|
||||||
|
@ -444,142 +272,6 @@
|
||||||
#define MD_LONGJMP(env, val) longjmp(env, val)
|
#define MD_LONGJMP(env, val) longjmp(env, val)
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#elif defined (NETBSD)
|
|
||||||
#define MD_STACK_GROWS_DOWN
|
|
||||||
#define MD_USE_BSD_ANON_MMAP
|
|
||||||
#define MD_ACCEPT_NB_INHERITED
|
|
||||||
#define MD_ALWAYS_UNSERIALIZED_ACCEPT
|
|
||||||
#define MD_HAVE_SOCKLEN_T
|
|
||||||
|
|
||||||
#define MD_SETJMP(env) _setjmp(env)
|
|
||||||
#define MD_LONGJMP(env, val) _longjmp(env, val)
|
|
||||||
|
|
||||||
#if defined(__i386__)
|
|
||||||
#define MD_JB_SP 2
|
|
||||||
#elif defined(__alpha__)
|
|
||||||
#define MD_JB_SP 34
|
|
||||||
#elif defined(__sparc__)
|
|
||||||
#define MD_JB_SP 0
|
|
||||||
#elif defined(__vax__)
|
|
||||||
#define MD_JB_SP 2
|
|
||||||
#else
|
|
||||||
#error Unknown CPU architecture
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#define MD_INIT_CONTEXT(_thread, _sp, _main) \
|
|
||||||
ST_BEGIN_MACRO \
|
|
||||||
if (MD_SETJMP((_thread)->context)) \
|
|
||||||
_main(); \
|
|
||||||
(_thread)->context[MD_JB_SP] = (long) (_sp); \
|
|
||||||
ST_END_MACRO
|
|
||||||
|
|
||||||
#define MD_GET_UTIME() \
|
|
||||||
struct timeval tv; \
|
|
||||||
(void) gettimeofday(&tv, NULL); \
|
|
||||||
return (tv.tv_sec * 1000000LL + tv.tv_usec)
|
|
||||||
|
|
||||||
#elif defined (OPENBSD)
|
|
||||||
#define MD_STACK_GROWS_DOWN
|
|
||||||
#define MD_USE_BSD_ANON_MMAP
|
|
||||||
#define MD_ACCEPT_NB_INHERITED
|
|
||||||
#define MD_ALWAYS_UNSERIALIZED_ACCEPT
|
|
||||||
|
|
||||||
#define MD_SETJMP(env) _setjmp(env)
|
|
||||||
#define MD_LONGJMP(env, val) _longjmp(env, val)
|
|
||||||
|
|
||||||
#if defined(__i386__)
|
|
||||||
#define MD_JB_SP 2
|
|
||||||
#elif defined(__alpha__)
|
|
||||||
#define MD_JB_SP 34
|
|
||||||
#elif defined(__sparc__)
|
|
||||||
#define MD_JB_SP 0
|
|
||||||
#elif defined(__amd64__)
|
|
||||||
#define MD_JB_SP 6
|
|
||||||
#else
|
|
||||||
#error Unknown CPU architecture
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#define MD_INIT_CONTEXT(_thread, _sp, _main) \
|
|
||||||
ST_BEGIN_MACRO \
|
|
||||||
if (MD_SETJMP((_thread)->context)) \
|
|
||||||
_main(); \
|
|
||||||
(_thread)->context[MD_JB_SP] = (long) (_sp); \
|
|
||||||
ST_END_MACRO
|
|
||||||
|
|
||||||
#define MD_GET_UTIME() \
|
|
||||||
struct timeval tv; \
|
|
||||||
(void) gettimeofday(&tv, NULL); \
|
|
||||||
return (tv.tv_sec * 1000000LL + tv.tv_usec)
|
|
||||||
|
|
||||||
#elif defined (OSF1)
|
|
||||||
#include <signal.h>
|
|
||||||
|
|
||||||
#define MD_STACK_GROWS_DOWN
|
|
||||||
#define MD_USE_SYSV_ANON_MMAP
|
|
||||||
#define MD_ACCEPT_NB_NOT_INHERITED
|
|
||||||
#define MD_ALWAYS_UNSERIALIZED_ACCEPT
|
|
||||||
|
|
||||||
#define MD_SETJMP(env) _setjmp(env)
|
|
||||||
#define MD_LONGJMP(env, val) _longjmp(env, val)
|
|
||||||
|
|
||||||
#define MD_INIT_CONTEXT(_thread, _sp, _main) \
|
|
||||||
ST_BEGIN_MACRO \
|
|
||||||
if (MD_SETJMP((_thread)->context)) \
|
|
||||||
_main(); \
|
|
||||||
((struct sigcontext *)((_thread)->context))->sc_sp = (long) (_sp); \
|
|
||||||
ST_END_MACRO
|
|
||||||
|
|
||||||
#define MD_GET_UTIME() \
|
|
||||||
struct timeval tv; \
|
|
||||||
(void) gettimeofday(&tv, NULL); \
|
|
||||||
return (tv.tv_sec * 1000000LL + tv.tv_usec)
|
|
||||||
|
|
||||||
#elif defined (SOLARIS)
|
|
||||||
#include <sys/filio.h>
|
|
||||||
extern int getpagesize(void);
|
|
||||||
|
|
||||||
#define MD_STACK_GROWS_DOWN
|
|
||||||
#define MD_USE_SYSV_ANON_MMAP
|
|
||||||
#define MD_ACCEPT_NB_NOT_INHERITED
|
|
||||||
|
|
||||||
#define MD_SETJMP(env) setjmp(env)
|
|
||||||
#define MD_LONGJMP(env, val) longjmp(env, val)
|
|
||||||
|
|
||||||
#if defined(sparc) || defined(__sparc)
|
|
||||||
#ifdef _LP64
|
|
||||||
#define MD_STACK_PAD_SIZE 4095
|
|
||||||
#endif
|
|
||||||
#define MD_INIT_CONTEXT(_thread, _sp, _main) \
|
|
||||||
ST_BEGIN_MACRO \
|
|
||||||
(void) MD_SETJMP((_thread)->context); \
|
|
||||||
(_thread)->context[1] = (long) (_sp); \
|
|
||||||
(_thread)->context[2] = (long) _main; \
|
|
||||||
ST_END_MACRO
|
|
||||||
#elif defined(i386) || defined(__i386)
|
|
||||||
#define MD_INIT_CONTEXT(_thread, _sp, _main) \
|
|
||||||
ST_BEGIN_MACRO \
|
|
||||||
(void) MD_SETJMP((_thread)->context); \
|
|
||||||
(_thread)->context[4] = (long) (_sp); \
|
|
||||||
(_thread)->context[5] = (long) _main; \
|
|
||||||
ST_END_MACRO
|
|
||||||
#elif defined(__amd64__)
|
|
||||||
#define MD_INIT_CONTEXT(_thread, _sp, _main) \
|
|
||||||
ST_BEGIN_MACRO \
|
|
||||||
if (MD_SETJMP((_thread)->context)) \
|
|
||||||
_main(); \
|
|
||||||
(_thread)->context[6] = (long) (_sp); \
|
|
||||||
ST_END_MACRO
|
|
||||||
#else
|
|
||||||
#error Unknown CPU architecture
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#define MD_GET_UTIME() \
|
|
||||||
return (gethrtime() / 1000)
|
|
||||||
|
|
||||||
#else
|
|
||||||
#error Unknown OS
|
|
||||||
#endif /* OS */
|
|
||||||
|
|
||||||
/*****************************************
|
/*****************************************
|
||||||
* Other defines
|
* Other defines
|
||||||
*/
|
*/
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue