core.h File Reference

#include <libc.h>
#include <conven/queue.h>
#include <conven/bpt.h>
#include <area.h>
#include <core/main.h>
#include <core/suberrno.h>
#include <core/coresrv.h>
#include <core/core_tcb.h>
#include <core/core_mem.h>
#include <core/core_sig.h>
#include <core/core_cred.h>
#include <core/trap.h>
#include <core/pgflt.h>
#include <core/dblflt.h>
#include <core/stray.h>
#include <core/breakpoint.h>
#include <core/npx.h>
#include <core/syscall.h>
#include <core/syscallargs.h>
#include <core/vm86.h>

Go to the source code of this file.

Data Structures

struct  s_idt
struct  s_core_info
struct  s_runqop
struct  s_memdef
struct  s_as_export
struct  rlimit
struct  ptrace_io_desc
struct  s_iomap
struct  s_sigctx
struct  s_usig
struct  s_ucred
struct  s_ustat
struct  s_tcb_export
struct  s_procdef
union  wait
struct  rusage

Defines

#define __LSEOS_CORE_H__   1
#define CR3_SELF   ((u_int)-1)
#define CR3_SYSTEM   ((u_int)-2)
#define RUNQOP_RUN   1
#define RUNQOP_ASRELE   2
#define RUNQOP_TCBRELE   3
#define ASID_MINE   -1LL
#define PRSV_ANY   ((paddr_t)-1)
#define VRSV_ANY   ((paddr_t)-1)
#define VRSV_ANYNOTFIRSTMEG   ((paddr_t)-2)
#define MODE_UNDEF   0
#define VMODE_RSV   4
#define VMODE_VMAP   5
#define KMODE_RSV   8
#define PMODE_RSV   16
#define PMODE_SHARED_RW   17
#define PMODE_SHARED_RO   18
#define VMODEOPT_PERSISTENT_MAP   (1u<<0)
#define PMODEOPT_AGGREGATE   (1u<<0)
#define PMODEOPT_PERSISTENT   (1u<<1)
#define PMODEOPT_SYSTEM   (1u<<2)
#define PMODEOPT_USER_READ   (1u<<3)
#define PMODEOPT_USER_WRITE   (1u<<4)
#define PMODEOPT_GROUP_READ   (1u<<5)
#define PMODEOPT_GROUP_WRITE   (1u<<6)
#define PMODEOPT_OTHER_READ   (1u<<7)
#define PMODEOPT_OTHER_WRITE   (1u<<8)
#define PMODEOPT_ALL_READ   (PMODEOPT_USER_READ|PMODEOPT_GROUP_READ|PMODEOPT_OTHER_READ)
#define PMODEOPT_ALL_WRITE   (PMODEOPT_USER_WRITE|PMODEOPT_GROUP_WRITE|PMODEOPT_OTHER_WRITE)
#define KTYPE_UNDEF   0
#define KTYPE_REC   1
#define KTYPE_ASPACE   2
#define KTYPE_TCB   3
#define KTYPE_MEM   4
#define VUNMAP_NOALLOC   (1<<0u)
#define PRELE_DONTCLEAN   (1<<0u)
#define PRELE_NOALLOC   (1<<1u)
#define PRELE_NOASIDCHECK   (1<<2u)
#define PRELE_FORCE   (1<<3u)
#define PRELE_AGGREGATE   (1<<4u)
#define KRELE_NOALLOC   (1<<0u)
#define KRELE_NOASIDCHECK   (1<<1u)
#define VRELE_NOALLOC   (1<<0u)
#define ASREG_BPT   (1<<0u)
#define SPACE_SELF   ((asid_t)-1)
#define SPACE_KERN   ((asid_t)-2)
#define SPACE_PHYS   ((asid_t)-3)
#define SPACE_SYS0   ((asid_t)-4)
#define SPACE_SYS1   ((asid_t)-5)
#define MEMDEF_RM_ONLY   (1u<<0)
#define MEMDEF_VIRT_ONLY   (1u<<1)
#define ASF_RUNQ   (1<<0u)
#define ASF_PROTECTED   (1<<1u)
#define AS_EXPORT
#define ASOP_ATTACH   0
#define ASOP_DETACH   1
#define ASOP_NDATTACH   2
#define RLIMIT_CPU   0
#define RLIMIT_FSIZE   1
#define RLIMIT_DATA   2
#define RLIMIT_STACK   3
#define RLIMIT_CORE   4
#define RLIMIT_RSS   5
#define RLIMIT_MEMLOCK   6
#define RLIMIT_NPROC   7
#define RLIMIT_NOFILE   8
#define RLIM_NLIMITS   9
#define RLIM_INFINITY   (~((u_quad_t)1 << 63))
#define RLIM_SAVED_MAX   RLIM_INFINITY
#define RLIM_SAVED_CUR   RLIM_INFINITY
#define F_OK   0
#define X_OK   0x01
#define W_OK   0x02
#define R_OK   0x04
#define SEEK_SET   0
#define SEEK_CUR   1
#define SEEK_END   2
#define PT_TRACE_ME   0
#define PT_READ_I   1
#define PT_READ_D   2
#define PT_WRITE_I   4
#define PT_WRITE_D   5
#define PT_CONTINUE   7
#define PT_KILL   8
#define PT_ATTACH   9
#define PT_DETACH   10
#define PT_IO   11
#define IO_SETSIZE   65536
#define NBITS   (sizeof (u_long) * NBBY)
#define IO_CLR(n, p)   ((p)->masks[(n)/NBITS] &= ~(1 << ((n) % NBITS)))
#define IO_SET(n, p)   ((p)->masks[(n)/NBITS] |= (1 << ((n) % NBITS)))
#define IO_ISSET(n, p)   ((p)->masks[(n)/NBITS] & (1 << ((n) % NBITS)))
#define PRIORITY_DFLT   0
#define SIGF_TRIGGERED   (1<<1u)
#define SIGF_IGN   (1<<2u)
#define SIGF_NODFL   (1<<3u)
#define SIGCTX(Usig, Sig)   ((Usig)->sigctxs[(Sig)-1])
#define NGROUPS   16
#define MAXTCBNAME   15
#define OFF_CPU   -1
#define UNDEF_CPU   -2
#define CPU_ANY   -1
#define TCBS_IDLE   0
#define TCBS_RUN   1
#define TCBS_SLEEP   2
#define TCBS_STOP   3
#define TCBS_ZOMBIE   4
#define TCBS_DEAD   5
#define TCBC_UNDEF   0
#define TCBC_SCHED   1
#define TCBC_SERVICE   2
#define TCBC_REALTIME   3
#define TCBC_KERNEL   4
#define TCBF_ONPROC   (1<<0u)
#define TCBF_TRACED   (1<<1u)
#define TCBF_SIGNALABLE   (1<<2u)
#define TCBF_RUNQ   (1<<3u)
#define TCBF_IOMAP   (1<<4u)
#define TCBF_PAUSEMASK   (1<<5u)
#define TCBF_WAITINFO   (1<<6u)
#define TCBF_PTRACED   (1<<7u)
#define TCBF_WAITDONE   (1<<8u)
#define TCBF_COLLECTDONE   (1<<9u)
#define TCB_EXPORT
#define BSTRAP_PID   ((pid_t)0LL)
#define KERNEL_PID   ((pid_t)1LL)
#define KERNEL_ASID   ((asid_t)0LL)
#define NO_ASID   ((asid_t)-1LL)
#define PROCDEF_ONGDT   (1<<0u)
#define _W_INT(w)   (*(int *)(void *)&(w))
#define WCOREFLAG   0200
#define _WSTATUS(x)   (_W_INT(x) & 0177)
#define _WSTOPPED   0177
#define WIFSTOPPED(x)   (_WSTATUS(x) == _WSTOPPED)
#define WSTOPSIG(x)   ((int)(((unsigned int)_W_INT(x)) >> 8) & 0xff)
#define WIFSIGNALED(x)   (_WSTATUS(x) != _WSTOPPED && _WSTATUS(x) != 0)
#define WTERMSIG(x)   (_WSTATUS(x))
#define WIFEXITED(x)   (_WSTATUS(x) == 0)
#define WEXITSTATUS(x)   ((int)(((unsigned int)_W_INT(x)) >> 8) & 0xff)
#define WCOREDUMP(x)   (_W_INT(x) & WCOREFLAG)
#define W_EXITCODE(ret, sig)   ((ret) << 8 | (sig))
#define W_STOPCODE(sig)   ((sig) << 8 | _WSTOPPED)
#define WNOHANG   0x00000001
#define WUNTRACED   0x00000002
#define WALTSIG   0x00000004
#define WALLSIG   0x00000008
#define w_termsig   w_T.w_Termsig
#define w_coredump   w_T.w_Coredump
#define w_retcode   w_T.w_Retcode
#define w_stopval   w_S.w_Stopval
#define w_stopsig   w_S.w_Stopsig
#define WSTOPPED   _WSTOPPED
#define SET_SYS_RETURN(Tcb, Val, Errno, Suberrno)
#define SYS_RETURN(Tcb, Val, Errno, Suberrno)
#define SYS_ARG1(Tcb)   ((Tcb)->tss.ebx)
#define SYS_ARG2(Tcb)   ((Tcb)->tss.ecx)
#define SYS_ARG3(Tcb)   ((Tcb)->tss.edx)
#define SYS_ARG4(Tcb)   ((Tcb)->tss.esi)
#define SYS_ARG5(Tcb)   ((Tcb)->tss.edi)

Typedefs

typedef s_as_export t_as
typedef s_tcb_export t_tcb

Enumerations

enum  { SHARED_RW, SHARED_RO }


Define Documentation

#define __LSEOS_CORE_H__   1
 

#define _W_INT  )     (*(int *)(void *)&(w))
 

#define _WSTATUS  )     (_W_INT(x) & 0177)
 

#define _WSTOPPED   0177
 

#define AS_EXPORT
 

Value:

asid_t                  asid;   \
  pid_t                         pid;    \
  uid_t                         uid;    \
  u_int32_t                     flags;  \
  u_int32_t                     exec_pc;\
  u_int32_t                     exec_sp;\
  u_int32_t                     exec_fp;\
  int                           refcnt;
how many processes are on me

#define ASF_PROTECTED   (1<<1u)
 

security is activated

#define ASF_RUNQ   (1<<0u)
 

space is in runq

#define ASID_MINE   -1LL
 

constant usable in (most of) all asid syscalls

#define ASOP_ATTACH   0
 

address space operations attach to address space

#define ASOP_DETACH   1
 

detach from address space

#define ASOP_NDATTACH   2
 

non-destructive attach

#define ASREG_BPT   (1<<0u)
 

asreg(2) options create aspace with BPT

#define BSTRAP_PID   ((pid_t)0LL)
 

#define CPU_ANY   -1
 

run on any cpu

#define CR3_SELF   ((u_int)-1)
 

params of rcr3(2) return cr3 of caller

#define CR3_SYSTEM   ((u_int)-2)
 

return system cr3

#define F_OK   0
 

access function test for existence of file

#define IO_CLR n,
 )     ((p)->masks[(n)/NBITS] &= ~(1 << ((n) % NBITS)))
 

#define IO_ISSET n,
 )     ((p)->masks[(n)/NBITS] & (1 << ((n) % NBITS)))
 

#define IO_SET n,
 )     ((p)->masks[(n)/NBITS] |= (1 << ((n) % NBITS)))
 

#define IO_SETSIZE   65536
 

#define KERNEL_ASID   ((asid_t)0LL)
 

#define KERNEL_PID   ((pid_t)1LL)
 

#define KMODE_RSV   8
 

area is reserved

#define KRELE_NOALLOC   (1<<0u)
 

_krele(2) options only ring0 could use this

#define KRELE_NOASIDCHECK   (1<<1u)
 

only ring0 could use this

#define KTYPE_ASPACE   2
 

area contains an address space

#define KTYPE_MEM   4
 

area is simple memory

#define KTYPE_REC   1
 

area contains a memory record

#define KTYPE_TCB   3
 

area contains a tcb

#define KTYPE_UNDEF   0
 

kern area types undefined

#define MAXTCBNAME   15
 

#define MEMDEF_RM_ONLY   (1u<<0)
 

get only removable entries

#define MEMDEF_VIRT_ONLY   (1u<<1)
 

get only virtual (user) entries

#define MODE_UNDEF   0
 

area modes and options undefined mode

#define NBITS   (sizeof (u_long) * NBBY)
 

#define NGROUPS   16
 

#define NO_ASID   ((asid_t)-1LL)
 

#define OFF_CPU   -1
 

off cpu

#define PMODE_RSV   16
 

area is reserved

#define PMODE_SHARED_RO   18
 

shared read only

#define PMODE_SHARED_RW   17
 

area is shared

#define PMODEOPT_AGGREGATE   (1u<<0)
 

defines an aggregate

#define PMODEOPT_ALL_READ   (PMODEOPT_USER_READ|PMODEOPT_GROUP_READ|PMODEOPT_OTHER_READ)
 

#define PMODEOPT_ALL_WRITE   (PMODEOPT_USER_WRITE|PMODEOPT_GROUP_WRITE|PMODEOPT_OTHER_WRITE)
 

#define PMODEOPT_GROUP_READ   (1u<<5)
 

readable for group

#define PMODEOPT_GROUP_WRITE   (1u<<6)
 

writable for group

#define PMODEOPT_OTHER_READ   (1u<<7)
 

readable for world

#define PMODEOPT_OTHER_WRITE   (1u<<8)
 

writable for world

#define PMODEOPT_PERSISTENT   (1u<<1)
 

area is not removed after prele

#define PMODEOPT_SYSTEM   (1u<<2)
 

area will contain system info

#define PMODEOPT_USER_READ   (1u<<3)
 

readable for user

#define PMODEOPT_USER_WRITE   (1u<<4)
 

writable for user

#define PRELE_AGGREGATE   (1<<4u)
 

consider entire aggregate

#define PRELE_DONTCLEAN   (1<<0u)
 

_prele(2) options don't clean physical page

#define PRELE_FORCE   (1<<3u)
 

release persistent pages

#define PRELE_NOALLOC   (1<<1u)
 

only ring0 could use this

#define PRELE_NOASIDCHECK   (1<<2u)
 

ignore asid param (root)

#define PRIORITY_DFLT   0
 

#define PROCDEF_ONGDT   (1<<0u)
 

proc is on gdt

#define PRSV_ANY   ((paddr_t)-1)
 

reserve memory anywhere

#define PT_ATTACH   9
 

attach to running process

#define PT_CONTINUE   7
 

continue the child

#define PT_DETACH   10
 

detach from running process

#define PT_IO   11
 

do I/O to/from the stopped process

#define PT_KILL   8
 

kill the child process

#define PT_READ_D   2
 

read word in child's D space

#define PT_READ_I   1
 

read word in child's I space

#define PT_TRACE_ME   0
 

ptrace() values child declares it's being traced

#define PT_WRITE_D   5
 

write word in child's D space

#define PT_WRITE_I   4
 

write word in child's I space

#define R_OK   0x04
 

test for read permission

#define RLIM_INFINITY   (~((u_quad_t)1 << 63))
 

no limit

#define RLIM_NLIMITS   9
 

number of resource limits

#define RLIM_SAVED_CUR   RLIM_INFINITY
 

unrepresentable soft limit

#define RLIM_SAVED_MAX   RLIM_INFINITY
 

unrepresentable hard limit

#define RLIMIT_CORE   4
 

core file size

#define RLIMIT_CPU   0
 

Resource limits cpu time in milliseconds

#define RLIMIT_DATA   2
 

data size

#define RLIMIT_FSIZE   1
 

maximum file size

#define RLIMIT_MEMLOCK   6
 

locked-in-memory address space

#define RLIMIT_NOFILE   8
 

number of open files

#define RLIMIT_NPROC   7
 

number of processes

#define RLIMIT_RSS   5
 

resident set size

#define RLIMIT_STACK   3
 

stack size

#define RUNQOP_ASRELE   2
 

destroy address space

#define RUNQOP_RUN   1
 

run specified selector

#define RUNQOP_TCBRELE   3
 

destroy process

#define SEEK_CUR   1
 

set offset to current + offset

#define SEEK_END   2
 

set offset to EOF plus offset

#define SEEK_SET   0
 

whence values for lseek(2) set offset to offset

#define SET_SYS_RETURN Tcb,
Val,
Errno,
Suberrno   ) 
 

Value:

do {\
 (Tcb)->tss.eax = (Val);\
 (Tcb)->tss.ebx = (Errno);\
 (Tcb)->tss.ecx = (Suberrno);\
} while (/*CONSTCOND*/0)

#define SIGCTX Usig,
Sig   )     ((Usig)->sigctxs[(Sig)-1])
 

#define SIGF_IGN   (1<<2u)
 

true if signal is ignored

#define SIGF_NODFL   (1<<3u)
 

true if action is not default

#define SIGF_TRIGGERED   (1<<1u)
 

true if context is active

#define SPACE_KERN   ((asid_t)-2)
 

kernel space

#define SPACE_PHYS   ((asid_t)-3)
 

physical space

#define SPACE_SELF   ((asid_t)-1)
 

my virtual aspace

#define SPACE_SYS0   ((asid_t)-4)
 

sys0 physical space

#define SPACE_SYS1   ((asid_t)-5)
 

sys1 physical space

#define SYS_ARG1 Tcb   )     ((Tcb)->tss.ebx)
 

#define SYS_ARG2 Tcb   )     ((Tcb)->tss.ecx)
 

#define SYS_ARG3 Tcb   )     ((Tcb)->tss.edx)
 

#define SYS_ARG4 Tcb   )     ((Tcb)->tss.esi)
 

#define SYS_ARG5 Tcb   )     ((Tcb)->tss.edi)
 

#define SYS_RETURN Tcb,
Val,
Errno,
Suberrno   ) 
 

Value:

do {\
  SET_SYS_RETURN((Tcb), (Val), (Errno), (Suberrno));\
  return ;\
} while (/*CONSTCOND*/0)

#define TCB_EXPORT
 

Value:

t_tss                   tss;            \
  u_int                 sel;            \
  pid_t                 pid;            \
  pid_t                 ppid;           \
  pid_t                 pgid;           \
  asid_t                asid;           \
  char                  name[MAXTCBNAME + 1];\
  int                   priority;       \
  int                   cpu;            \
  int                   cpu_spec;       \
  u_int32_t             status;         \
  u_int32_t             class;          \
  u_int32_t             flags;          \
  u_int32_t             wstatus;        \
  u_int                 sq_gate;        \
  struct s_ucred        ucred;          \
  struct s_ustat        ustat;
statistics

#define TCBC_KERNEL   4
 

#define TCBC_REALTIME   3
 

#define TCBC_SCHED   1
 

#define TCBC_SERVICE   2
 

#define TCBC_UNDEF   0
 

#define TCBF_COLLECTDONE   (1<<9u)
 

notify_mgr has collected

#define TCBF_IOMAP   (1<<4u)
 

a iomap follows

#define TCBF_ONPROC   (1<<0u)
 

task is on a processor

#define TCBF_PAUSEMASK   (1<<5u)
 

restore pausemask

#define TCBF_PTRACED   (1<<7u)
 

task is ptraced

#define TCBF_RUNQ   (1<<3u)
 

task is in runq

#define TCBF_SIGNALABLE   (1<<2u)
 

task is signalable

#define TCBF_TRACED   (1<<1u)
 

task is traced

#define TCBF_WAITDONE   (1<<8u)
 

parent has waited (if notify_mgr here)

#define TCBF_WAITINFO   (1<<6u)
 

some info is present for wait(2)

#define TCBS_DEAD   5
 

task is dead

#define TCBS_IDLE   0
 

being created or not scheduled

#define TCBS_RUN   1
 

scheduled task

#define TCBS_SLEEP   2
 

process is paused

#define TCBS_STOP   3
 

process is stopped

#define TCBS_ZOMBIE   4
 

task is about do die

#define UNDEF_CPU   -2
 

cpu info not updated

#define VMODE_RSV   4
 

area is reserved

#define VMODE_VMAP   5
 

area is mapped

#define VMODEOPT_PERSISTENT_MAP   (1u<<0)
 

area isnt removed after vunmap

#define VRELE_NOALLOC   (1<<0u)
 

_vrele(2) options only ring0 could use this

#define VRSV_ANY   ((paddr_t)-1)
 

reserve memory anywhere

#define VRSV_ANYNOTFIRSTMEG   ((paddr_t)-2)
 

rsv memory anywhere above 1Mo

#define VUNMAP_NOALLOC   (1<<0u)
 

_vunmap(2) options only ring0 could use this

#define w_coredump   w_T.w_Coredump
 

#define W_EXITCODE ret,
sig   )     ((ret) << 8 | (sig))
 

#define W_OK   0x02
 

test for write permission

#define w_retcode   w_T.w_Retcode
 

#define W_STOPCODE sig   )     ((sig) << 8 | _WSTOPPED)
 

#define w_stopsig   w_S.w_Stopsig
 

#define w_stopval   w_S.w_Stopval
 

#define w_termsig   w_T.w_Termsig
 

#define WALLSIG   0x00000008
 

#define WALTSIG   0x00000004
 

#define WCOREDUMP  )     (_W_INT(x) & WCOREFLAG)
 

#define WCOREFLAG   0200
 

#define WEXITSTATUS  )     ((int)(((unsigned int)_W_INT(x)) >> 8) & 0xff)
 

#define WIFEXITED  )     (_WSTATUS(x) == 0)
 

#define WIFSIGNALED  )     (_WSTATUS(x) != _WSTOPPED && _WSTATUS(x) != 0)
 

#define WIFSTOPPED  )     (_WSTATUS(x) == _WSTOPPED)
 

#define WNOHANG   0x00000001
 

#define WSTOPPED   _WSTOPPED
 

#define WSTOPSIG  )     ((int)(((unsigned int)_W_INT(x)) >> 8) & 0xff)
 

#define WTERMSIG  )     (_WSTATUS(x))
 

#define WUNTRACED   0x00000002
 

#define X_OK   0x01
 

test for exec or srch perm


Typedef Documentation

typedef struct s_as_export t_as
 

typedef struct s_tcb_export t_tcb
 


Enumeration Type Documentation

anonymous enum
 

Enumerator:
SHARED_RW  shared read-write
SHARED_RO  shared read-only


Generated on Wed May 24 23:05:53 2006 for LSE/OS by  doxygen 1.4.6