]> Cypherpunks repositories - gostls13.git/commitdiff
runtime: os-specific types and code for setitimer
authorRuss Cox <rsc@golang.org>
Wed, 23 Mar 2011 15:31:42 +0000 (11:31 -0400)
committerRuss Cox <rsc@golang.org>
Wed, 23 Mar 2011 15:31:42 +0000 (11:31 -0400)
R=r
CC=golang-dev
https://golang.org/cl/4273097

18 files changed:
src/pkg/runtime/darwin/386/defs.h
src/pkg/runtime/darwin/386/sys.s
src/pkg/runtime/darwin/amd64/defs.h
src/pkg/runtime/darwin/amd64/sys.s
src/pkg/runtime/darwin/defs.c
src/pkg/runtime/darwin/os.h
src/pkg/runtime/freebsd/386/sys.s
src/pkg/runtime/freebsd/amd64/sys.s
src/pkg/runtime/freebsd/defs.c
src/pkg/runtime/freebsd/os.h
src/pkg/runtime/linux/386/defs.h
src/pkg/runtime/linux/386/sys.s
src/pkg/runtime/linux/amd64/defs.h
src/pkg/runtime/linux/amd64/sys.s
src/pkg/runtime/linux/arm/sys.s
src/pkg/runtime/linux/defs.c
src/pkg/runtime/linux/defs2.c
src/pkg/runtime/linux/os.h

index f9d874d85c41fcea001c4f90b0e34a6bb8b4242e..bb70207fdade5292ea40efbe9a0f78192ff12edc 100644 (file)
@@ -89,6 +89,9 @@ enum {
        BUS_OBJERR = 0x3,
        SEGV_MAPERR = 0x1,
        SEGV_ACCERR = 0x2,
+       ITIMER_REAL = 0,
+       ITIMER_VIRTUAL = 0x1,
+       ITIMER_PROF = 0x2,
 };
 
 // Types
@@ -139,14 +142,14 @@ struct StackT {
 
 typedef union Sighandler Sighandler;
 union Sighandler {
-       void *__sa_handler;
-       void *__sa_sigaction;
+       uint32 __sa_handler;
+       uint32 __sa_sigaction;
 };
 
 typedef struct Sigaction Sigaction;
 struct Sigaction {
        Sighandler __sigaction_u;
-       void *sa_tramp;
+       uint32 sa_tramp;
        uint32 sa_mask;
        int32 sa_flags;
 };
@@ -171,14 +174,26 @@ struct Siginfo {
        uint32 __pad[7];
 };
 
+typedef struct Timeval Timeval;
+struct Timeval {
+       int32 tv_sec;
+       int32 tv_usec;
+};
+
+typedef struct Itimerval Itimerval;
+struct Itimerval {
+       Timeval it_interval;
+       Timeval it_value;
+};
+
 typedef struct FPControl FPControl;
 struct FPControl {
-       byte pad0[2];
+       byte pad_godefs_0[2];
 };
 
 typedef struct FPStatus FPStatus;
 struct FPStatus {
-       byte pad0[2];
+       byte pad_godefs_0[2];
 };
 
 typedef struct RegMMST RegMMST;
@@ -214,7 +229,7 @@ struct Regs {
 
 typedef struct FloatState FloatState;
 struct FloatState {
-       int32 fpu_reserved[2];
+       uint64 fpu_reserved;
        FPControl fpu_fcw;
        FPStatus fpu_fsw;
        uint8 fpu_ftw;
@@ -267,7 +282,7 @@ struct Ucontext {
        int32 uc_onstack;
        uint32 uc_sigmask;
        StackT uc_stack;
-       Ucontext *uc_link;
+       uint32 uc_link;
        uint32 uc_mcsize;
        Mcontext *uc_mcontext;
 };
index 9d2caca0a1fde6278fa77112e2fb3bbf931df966..08eca9d5a87ca57376312bc9959c499a15582e49 100644 (file)
@@ -45,6 +45,11 @@ TEXT runtime·munmap(SB),7,$0
        CALL    runtime·notok(SB)
        RET
 
+TEXT runtime·setitimer(SB),7,$0
+       MOVL    $83, AX
+       INT     $0x80
+       RET
+
 // void gettime(int64 *sec, int32 *usec)
 TEXT runtime·gettime(SB), 7, $32
        LEAL    12(SP), AX      // must be non-nil, unused
index 09e595988d3ac488fa1e4b0f75a2feee8f67e274..90f798e8a7e057a1106edbfe11b8df1a0224f6b9 100644 (file)
@@ -89,6 +89,9 @@ enum {
        BUS_OBJERR = 0x3,
        SEGV_MAPERR = 0x1,
        SEGV_ACCERR = 0x2,
+       ITIMER_REAL = 0,
+       ITIMER_VIRTUAL = 0x1,
+       ITIMER_PROF = 0x2,
 };
 
 // Types
@@ -135,19 +138,19 @@ struct StackT {
        void *ss_sp;
        uint64 ss_size;
        int32 ss_flags;
-       byte pad0[4];
+       byte pad_godefs_0[4];
 };
 
 typedef union Sighandler Sighandler;
 union Sighandler {
-       void *__sa_handler;
-       void *__sa_sigaction;
+       uint64 __sa_handler;
+       uint64 __sa_sigaction;
 };
 
 typedef struct Sigaction Sigaction;
 struct Sigaction {
        Sighandler __sigaction_u;
-       void *sa_tramp;
+       uint64 sa_tramp;
        uint32 sa_mask;
        int32 sa_flags;
 };
@@ -172,14 +175,27 @@ struct Siginfo {
        uint64 __pad[7];
 };
 
+typedef struct Timeval Timeval;
+struct Timeval {
+       int64 tv_sec;
+       int32 tv_usec;
+       byte pad_godefs_0[4];
+};
+
+typedef struct Itimerval Itimerval;
+struct Itimerval {
+       Timeval it_interval;
+       Timeval it_value;
+};
+
 typedef struct FPControl FPControl;
 struct FPControl {
-       byte pad0[2];
+       byte pad_godefs_0[2];
 };
 
 typedef struct FPStatus FPStatus;
 struct FPStatus {
-       byte pad0[2];
+       byte pad_godefs_0[2];
 };
 
 typedef struct RegMMST RegMMST;
@@ -220,7 +236,7 @@ struct Regs {
 
 typedef struct FloatState FloatState;
 struct FloatState {
-       int32 fpu_reserved[2];
+       uint64 fpu_reserved;
        FPControl fpu_fcw;
        FPStatus fpu_fsw;
        uint8 fpu_ftw;
@@ -274,7 +290,7 @@ struct Mcontext {
        ExceptionState es;
        Regs ss;
        FloatState fs;
-       byte pad0[4];
+       byte pad_godefs_0[4];
 };
 
 typedef struct Ucontext Ucontext;
@@ -282,7 +298,7 @@ struct Ucontext {
        int32 uc_onstack;
        uint32 uc_sigmask;
        StackT uc_stack;
-       Ucontext *uc_link;
+       uint64 uc_link;
        uint64 uc_mcsize;
        Mcontext *uc_mcontext;
 };
index 4f9e0d77a5bc30ba9e810ff63b068db279b47a42..10d8f96df5298d46b429ce745ca3e85e85c11663 100644 (file)
@@ -38,11 +38,19 @@ TEXT runtime·write(SB),7,$0
        SYSCALL
        RET
 
+TEXT runtime·setitimer(SB), 7, $0
+       MOVL    8(SP), DI
+       MOVQ    16(SP), SI
+       MOVQ    24(SP), DX
+       MOVL    $(0x2000000+83), AX     // syscall entry
+       SYSCALL
+       RET
+
 // void gettime(int64 *sec, int32 *usec)
 TEXT runtime·gettime(SB), 7, $32
        MOVQ    SP, DI  // must be non-nil, unused
        MOVQ    $0, SI
-       MOVQ    $(0x2000000+116), AX
+       MOVL    $(0x2000000+116), AX
        SYSCALL
        MOVQ    sec+0(FP), DI
        MOVQ    AX, (DI)
index 1a1cdf880c0defe68fbcfe8faa771ffa49c5525a..032a6bcbb30b6a2f851a7ffb3717c3a3c6ed9abc 100644 (file)
@@ -116,6 +116,10 @@ enum {
        
        $SEGV_MAPERR = SEGV_MAPERR,
        $SEGV_ACCERR = SEGV_ACCERR,
+       
+       $ITIMER_REAL = ITIMER_REAL,
+       $ITIMER_VIRTUAL = ITIMER_VIRTUAL,
+       $ITIMER_PROF = ITIMER_PROF,
 };
 
 typedef mach_msg_body_t        $MachBody;
@@ -130,6 +134,8 @@ typedef struct __sigaction  $Sigaction;     // used in syscalls
 // typedef struct sigaction    $Sigaction;     // used by the C library
 typedef union sigval $Sigval;
 typedef siginfo_t $Siginfo;
+typedef struct timeval $Timeval;
+typedef struct itimerval       $Itimerval;
 
 typedef struct fp_control $FPControl;
 typedef struct fp_status $FPStatus;
index 35ef4e6d9e6407fea89e64e48f5856922647fbaf..339768e5163d56282062e6080dc848002028c6d9 100644 (file)
@@ -2,6 +2,9 @@
 // Use of this source code is governed by a BSD-style
 // license that can be found in the LICENSE file.
 
+#define SIG_DFL ((void*)0)
+#define SIG_IGN ((void*)1)
+
 int32  runtime·bsdthread_create(void*, M*, G*, void(*)(void));
 void   runtime·bsdthread_register(void);
 int32  runtime·mach_msg_trap(MachHeader*, int32, uint32, uint32, uint32, uint32, uint32);
@@ -23,3 +26,4 @@ struct StackT;
 void   runtime·sigaltstack(struct StackT*, struct StackT*);
 void   runtime·sigtramp(void);
 void   runtime·sigpanic(void);
+void   runtime·setitimer(int32, Itimerval*, Itimerval*);
index 60c189bf837c4999ba3725fe09b17277c7dd2f8d..c4715b668bb702bffb287751e6db163e3dd17ae1 100644 (file)
@@ -87,6 +87,11 @@ TEXT runtime·munmap(SB),7,$-4
        CALL    runtime·notok(SB)
        RET
 
+TEXT runtime·setitimer(SB), 7, $-4
+       MOVL    $83, AX
+       INT     $0x80
+       RET
+
 TEXT runtime·gettime(SB), 7, $32
        MOVL    $116, AX
        LEAL    12(SP), BX
index d986e9ac07e07adff30cd1538f824542100b94cd..9a6fdf1ac6c916d3b4904e21674a5fde7c86d501 100644 (file)
@@ -65,6 +65,14 @@ TEXT runtime·write(SB),7,$-8
        SYSCALL
        RET
 
+TEXT runtime·setitimer(SB), 7, $-8
+       MOVL    8(SP), DI
+       MOVQ    16(SP), SI
+       MOVQ    24(SP), DX
+       MOVL    $83, AX
+       SYSCALL
+       RET
+
 TEXT runtime·gettime(SB), 7, $32
        MOVL    $116, AX
        LEAQ    8(SP), DI
index 32a80f4756463b9b9d19016513914eaad775eb32..faa1447ccb5d8d3bc7ee2c8248c07a1fc43004ad 100644 (file)
@@ -86,6 +86,10 @@ enum {
        
        $SEGV_MAPERR = SEGV_MAPERR,
        $SEGV_ACCERR = SEGV_ACCERR,
+       
+       $ITIMER_REAL = ITIMER_REAL,
+       $ITIMER_VIRTUAL = ITIMER_VIRTUAL,
+       $ITIMER_PROF = ITIMER_PROF,
 };
 
 typedef struct rtprio  $Rtprio;
@@ -99,3 +103,4 @@ typedef siginfo_t $Siginfo;
 
 typedef mcontext_t $Mcontext;
 typedef ucontext_t $Ucontext;
+typedef struct itimerval $Itimerval;
index 455355bc700e4811522e2aaebb9dcd2039c80abe..fd954c0e6e7c92b29bdff5e11c0a516d8faefc75 100644 (file)
@@ -1,5 +1,9 @@
+#define SIG_DFL ((void*)0)
+#define SIG_IGN ((void*)1)
+
 int32 runtime·thr_new(ThrParam*, int32);
 void runtime·sigpanic(void);
 void runtime·sigaltstack(Sigaltstack*, Sigaltstack*);
 struct sigaction;
 void runtime·sigaction(int32, struct sigaction*, struct sigaction*);
+void   runtiem·setitimerval(int32, Itimerval*, Itimerval*);
index c1f58b2a0892b00718cebf185e1f9ac3d08ed678..6ae1c4e139acd640004616db2e7de9a020ed1e3d 100644 (file)
@@ -58,6 +58,9 @@ enum {
        BUS_OBJERR = 0x3,
        SEGV_MAPERR = 0x1,
        SEGV_ACCERR = 0x2,
+       ITIMER_REAL = 0,
+       ITIMER_VIRTUAL = 0x1,
+       ITIMER_PROF = 0x2,
 };
 
 // Types
@@ -98,7 +101,8 @@ struct Fpstate {
        uint32 reserved;
        Fpxreg _fxsr_st[8];
        Xmmreg _xmm[8];
-       uint32 padding[56];
+       uint32 padding1[44];
+       byte Pad_godefs_0[48];
 };
 
 typedef struct Timespec Timespec;
@@ -176,4 +180,10 @@ struct Ucontext {
        Sigcontext uc_mcontext;
        uint32 uc_sigmask;
 };
+
+typedef struct Itimerval Itimerval;
+struct Itimerval {
+       Timeval it_interval;
+       Timeval it_value;
+};
 #pragma pack off
index a684371beab5f6987b7fbbc9a793a383f632821d..c39ce253f064c338bb8e40f11f4436099a7208ab 100644 (file)
@@ -30,6 +30,15 @@ TEXT runtime·write(SB),7,$0
        INT     $0x80
        RET
 
+
+TEXT runtime·setitimer(SB),7,$0-24
+       MOVL    $104, AX                        // syscall - setitimer
+       MOVL    4(SP), BX
+       MOVL    8(SP), CX
+       MOVL    12(SP), DX
+       INT     $0x80
+       RET
+
 TEXT runtime·gettime(SB), 7, $32
        MOVL    $78, AX                 // syscall - gettimeofday
        LEAL    8(SP), BX
index 3e3d32f0d44f86c774d4f82fb12173585c0aac04..70d63145c694eda6a80872bdc6e06796d09006a2 100644 (file)
@@ -58,6 +58,9 @@ enum {
        BUS_OBJERR = 0x3,
        SEGV_MAPERR = 0x1,
        SEGV_ACCERR = 0x2,
+       ITIMER_REAL = 0,
+       ITIMER_VIRTUAL = 0x1,
+       ITIMER_PROF = 0x2,
 };
 
 // Types
@@ -88,9 +91,15 @@ struct Siginfo {
        int32 si_signo;
        int32 si_errno;
        int32 si_code;
-       byte pad0[4];
+       byte pad_godefs_0[4];
        byte _sifields[112];
 };
+
+typedef struct Itimerval Itimerval;
+struct Itimerval {
+       Timeval it_interval;
+       Timeval it_value;
+};
 #pragma pack off
 // godefs -f -m64 defs1.c
 
@@ -170,7 +179,7 @@ typedef struct Sigaltstack Sigaltstack;
 struct Sigaltstack {
        void *ss_sp;
        int32 ss_flags;
-       byte pad0[4];
+       byte pad_godefs_0[4];
        uint64 ss_size;
 };
 
index 1bf734dc06c1b6cf543b821bcec99d9d7c8263c3..11df1f894b27165f162733c63c446b44d3dc07a5 100644 (file)
@@ -36,6 +36,14 @@ TEXT runtime·write(SB),7,$0-24
        SYSCALL
        RET
 
+TEXT runtime·setitimer(SB),7,$0-24
+       MOVL    8(SP), DI
+       MOVQ    16(SP), SI
+       MOVQ    24(SP), DX
+       MOVL    $38, AX                 // syscall entry
+       SYSCALL
+       RET
+
 TEXT runtime·gettime(SB), 7, $32
        LEAQ    8(SP), DI
        MOVQ    $0, SI
index 9daf9c2e4dd657c1999d5af75337f3510e1243a7..2b01f0cbb304246c00173c2e92248a639bdfa3d7 100644 (file)
@@ -26,6 +26,7 @@
 #define SYS_futex (SYS_BASE + 240)
 #define SYS_exit_group (SYS_BASE + 248)
 #define SYS_munmap (SYS_BASE + 91)
+#define SYS_setitimer (SYS_BASE + 104)
 
 #define ARM_BASE (SYS_BASE + 0x0f0000)
 #define SYS_ARM_cacheflush (ARM_BASE + 2)
@@ -72,6 +73,14 @@ TEXT runtime·munmap(SB),7,$0
        SWI     $0
        RET
 
+TEXT runtime·getitimer(SB),7,$0
+       MOVW    0(FP), R0
+       MOVW    4(FP), R1
+       MOWW    8(FP), R2
+       MOVW    $SYS_setitimer, R7
+       SWI     $0
+       RET
+
 TEXT runtime·gettime(SB),7,$32
        /* dummy version - return 0,0 */
        MOVW    $0, R1
index 2044fd60c9b9968edad8c3aab6cfb6fccd0dc5c9..5dda787891a6b498ef261cc6aa4442ebc410360c 100644 (file)
@@ -15,6 +15,8 @@
 // headers for things like ucontext_t, so that happens in
 // a separate file, defs1.c.
 
+#include <asm/posix_types.h>
+#define size_t __kernel_size_t
 #include <asm/signal.h>
 #include <asm/siginfo.h>
 #include <asm/mman.h>
@@ -80,9 +82,14 @@ enum {
        
        $SEGV_MAPERR = SEGV_MAPERR,
        $SEGV_ACCERR = SEGV_ACCERR,
+       
+       $ITIMER_REAL = ITIMER_REAL,
+       $ITIMER_VIRTUAL = ITIMER_VIRTUAL,
+       $ITIMER_PROF = ITIMER_PROF,
 };
 
 typedef struct timespec $Timespec;
 typedef struct timeval $Timeval;
 typedef struct sigaction $Sigaction;
 typedef siginfo_t $Siginfo;
+typedef struct itimerval $Itimerval;
index 3c0b110fc99e6c1f0f23ad1e92e16c5c5eb965bf..ff641fff2be08370413ace9d51c2586da70666bb 100644 (file)
@@ -8,7 +8,7 @@
                -f -I/home/rsc/pub/linux-2.6/arch/x86/include \
                -f -I/home/rsc/pub/linux-2.6/include \
                -f -D_LOOSE_KERNEL_NAMES \
-               -f -D__ARCH_SI_UID_T=__kernel_uid32_t \
+               -f -D__ARCH_SI_UID_T'='__kernel_uid32_t \
                defs2.c >386/defs.h
 
  * The asm header tricks we have to use for Linux on amd64
@@ -100,6 +100,10 @@ enum {
        
        $SEGV_MAPERR = SEGV_MAPERR,
        $SEGV_ACCERR = SEGV_ACCERR,
+       
+       $ITIMER_REAL = ITIMER_REAL,
+       $ITIMER_VIRTUAL = ITIMER_VIRTUAL,
+       $ITIMER_PROF = ITIMER_PROF,
 };
 
 typedef struct _fpreg $Fpreg;
@@ -113,4 +117,4 @@ typedef siginfo_t $Siginfo;
 typedef struct sigaltstack $Sigaltstack;
 typedef struct sigcontext $Sigcontext;
 typedef struct ucontext $Ucontext;
-
+typedef struct itimerval $Itimerval;
index 772ade7da9f1253f462d06a496609a91ca455ca3..6ae08897772f085e5e4106199dd79437b638d115 100644 (file)
@@ -2,6 +2,9 @@
 // Use of this source code is governed by a BSD-style
 // license that can be found in the LICENSE file.
 
+#define SIG_DFL ((void*)0)
+#define SIG_IGN ((void*)1)
+
 // Linux-specific system calls
 int32  runtime·futex(uint32*, int32, uint32, Timespec*, uint32*, uint32);
 int32  runtime·clone(int32, void*, M*, G*, void(*)(void));
@@ -11,3 +14,4 @@ void  runtime·rt_sigaction(uintptr, struct Sigaction*, void*, uintptr);
 
 void   runtime·sigaltstack(Sigaltstack*, Sigaltstack*);
 void   runtime·sigpanic(void);
+void runtime·setitimer(int32, Itimerval*, Itimerval*);