Added support for kernel-aware stack pointers to glibc
[akaros.git] / kern / include / ros / procdata.h
1 /* See COPYRIGHT for copyright information. */
2
3 #ifndef ROS_PROCDATA_H
4 #define ROS_PROCDATA_H
5
6 #include <ros/memlayout.h>
7 #include <ros/syscall.h>
8 #include <ros/ring_syscall.h>
9 #include <ros/common.h>
10 #include <ros/procinfo.h>
11 #include <arch/mmu.h>
12 #include <arch/arch.h>
13
14 typedef struct procdata {
15         // The actual ring buffers for communicating with user space
16         syscall_sring_t  syscallring;  // Per-process ring buffer for async syscalls
17         char padding1[SYSCALLRINGSIZE - sizeof(syscall_sring_t)];
18         sysevent_sring_t syseventring; // Per-process ring buffer for async sysevents
19         char padding2[SYSEVENTRINGSIZE - sizeof(sysevent_sring_t)];
20 #ifdef __i386__
21         segdesc_t *ldt;
22 #endif
23
24         intptr_t stack_pointers[MAX_NUM_CPUS];
25 } procdata_t;
26 #define PROCDATA_NUM_PAGES  ((sizeof(procdata_t)-1)/PGSIZE + 1)
27
28 // this is how user programs access the procdata page
29 #ifndef ROS_KERNEL
30 # define __procdata (*(procdata_t*)UDATA)
31 #endif
32
33 #endif // !ROS_PROCDATA_H