File init.c changed (mode: 100644) (index c373242..bf22a45) |
4 |
4 |
//* <digital.ragnarok AT gmail dot com> |
//* <digital.ragnarok AT gmail dot com> |
5 |
5 |
//****************************************************************************** |
//****************************************************************************** |
6 |
6 |
#include <ulinux/compiler_types.h> |
#include <ulinux/compiler_types.h> |
7 |
|
#include <ulinux/arch/sysc.h> |
|
8 |
|
#include <ulinux/arch/types.h> |
|
|
7 |
|
#include <ulinux/sysc.h> |
|
8 |
|
#include <ulinux/types.h> |
9 |
9 |
#include <ulinux/error.h> |
#include <ulinux/error.h> |
10 |
10 |
#include <ulinux/socket/socket.h> |
#include <ulinux/socket/socket.h> |
11 |
11 |
#include <ulinux/socket/netlink.h> |
#include <ulinux/socket/netlink.h> |
File uevent.c changed (mode: 100644) (index e36d58f..ef452f3) |
4 |
4 |
//* <digital.ragnarok AT gmail dot com> |
//* <digital.ragnarok AT gmail dot com> |
5 |
5 |
//****************************************************************************** |
//****************************************************************************** |
6 |
6 |
#include <ulinux/compiler_types.h> |
#include <ulinux/compiler_types.h> |
7 |
|
#include <ulinux/arch/sysc.h> |
|
8 |
|
#include <ulinux/arch/types.h> |
|
|
7 |
|
#include <ulinux/sysc.h> |
|
8 |
|
#include <ulinux/types.h> |
9 |
9 |
#include <ulinux/error.h> |
#include <ulinux/error.h> |
10 |
10 |
#include <ulinux/socket/socket.h> |
#include <ulinux/socket/socket.h> |
11 |
11 |
#include <ulinux/socket/msg.h> |
#include <ulinux/socket/msg.h> |
File uevent_monitor.c changed (mode: 100644) (index b2b537a..75cce0f) |
4 |
4 |
//* <digital.ragnarok AT gmail dot com> |
//* <digital.ragnarok AT gmail dot com> |
5 |
5 |
//****************************************************************************** |
//****************************************************************************** |
6 |
6 |
#include <ulinux/compiler_types.h> |
#include <ulinux/compiler_types.h> |
7 |
|
#include <ulinux/arch/sysc.h> |
|
8 |
|
#include <ulinux/arch/types.h> |
|
|
7 |
|
#include <ulinux/sysc.h> |
|
8 |
|
#include <ulinux/types.h> |
9 |
9 |
#include <ulinux/error.h> |
#include <ulinux/error.h> |
10 |
10 |
#include <ulinux/file.h> |
#include <ulinux/file.h> |
11 |
11 |
#include <ulinux/stat.h> |
#include <ulinux/stat.h> |
File ulinux/archs/x86_64/sysc.h changed (mode: 100644) (index 3c51dd1..60cf45f) |
1 |
|
//********************************************************************************************** |
|
|
1 |
|
#ifndef ULINUX_ARCH_SYSC_H |
|
2 |
|
#define ULINUX_ARCH_SYSC_H |
|
3 |
|
//****************************************************************************** |
2 |
4 |
//*this code is protected by the GNU affero GPLv3 |
//*this code is protected by the GNU affero GPLv3 |
3 |
5 |
//*author:Sylvain BERTRAND (sylvain.bertrand AT gmail dot com) |
//*author:Sylvain BERTRAND (sylvain.bertrand AT gmail dot com) |
4 |
|
//********************************************************************************************** |
|
5 |
|
#ifndef ULINUX_SYSC_H |
|
6 |
|
#define ULINUX_SYSC_H |
|
|
6 |
|
//* <digital.ragnarok AT gmail dot com> |
|
7 |
|
//****************************************************************************** |
7 |
8 |
|
|
8 |
9 |
# define sysc(name, nr, args...) \ |
# define sysc(name, nr, args...) \ |
9 |
10 |
({ \ |
({ \ |
File ulinux/mmap.h changed (mode: 100644) (index 5ff1403..36f6fe8) |
1 |
|
//********************************************************************************************** |
|
2 |
|
//*this code is protected by the GNU affero GPLv3 |
|
3 |
|
//*author:Sylvain BERTRAND (sylvain.bertrand AT gmail dot com) |
|
4 |
|
//********************************************************************************************** |
|
5 |
1 |
#ifndef ULINUX_MMAP_H |
#ifndef ULINUX_MMAP_H |
6 |
2 |
#define ULINUX_MMAP_H |
#define ULINUX_MMAP_H |
|
3 |
|
//****************************************************************************** |
|
4 |
|
//*this code is protected by the GNU affero GPLv3 |
|
5 |
|
//*author:Sylvain BERTRAND (sylvain.bertrand AT gmail dot com) |
|
6 |
|
//* <digital.ragnarok AT gmail dot com> |
|
7 |
|
//****************************************************************************** |
7 |
8 |
#include <ulinux/arch/mmap.h> |
#include <ulinux/arch/mmap.h> |
8 |
9 |
|
|
9 |
10 |
#define K_PROT_READ 0x1//page can be read |
#define K_PROT_READ 0x1//page can be read |
|
11 |
12 |
#define K_PROT_EXEC 0x4//page can be executed |
#define K_PROT_EXEC 0x4//page can be executed |
12 |
13 |
#define K_PROT_SEM 0x8//page may be used for atomic ops |
#define K_PROT_SEM 0x8//page may be used for atomic ops |
13 |
14 |
#define K_PROT_NONE 0x0//page can not be accessed |
#define K_PROT_NONE 0x0//page can not be accessed |
14 |
|
#define K_PROT_GROWSDOWN 0x01000000//mprotect flag: extend change to start of growsdown vma |
|
15 |
|
#define K_PROT_GROWSUP 0x02000000//mprotect flag: extend change to end of growsup vma |
|
|
15 |
|
#define K_PROT_GROWSDOWN 0x01000000//mprotect flag: extend change to start of |
|
16 |
|
//growsdown vma |
|
17 |
|
#define K_PROT_GROWSUP 0x02000000//mprotect flag: extend change to end of |
|
18 |
|
//growsup vma |
16 |
19 |
|
|
17 |
20 |
#define K_MAP_SHARED 0x01//Share changes |
#define K_MAP_SHARED 0x01//Share changes |
18 |
21 |
#define K_MAP_PRIVATE 0x02//Changes are private |
#define K_MAP_PRIVATE 0x02//Changes are private |
|
27 |
30 |
#define K_MAP_NORESERVE 0x4000//don't check for reservations |
#define K_MAP_NORESERVE 0x4000//don't check for reservations |
28 |
31 |
#define K_MAP_POPULATE 0x8000//populate (prefault) pagetables |
#define K_MAP_POPULATE 0x8000//populate (prefault) pagetables |
29 |
32 |
#define K_MAP_NONBLOCK 0x10000//do not block on IO |
#define K_MAP_NONBLOCK 0x10000//do not block on IO |
30 |
|
#define K_MAP_STACK 0x20000//give out an address that is best suited for process/thread stacks |
|
|
33 |
|
#define K_MAP_STACK 0x20000//give out an address that is best suited for |
|
34 |
|
//process/thread stacks |
31 |
35 |
#define K_MAP_HUGETLB 0x40000//create a huge page mapping |
#define K_MAP_HUGETLB 0x40000//create a huge page mapping |
32 |
36 |
|
|
33 |
37 |
#define K_MCL_CURRENT 1//lock all current mappings |
#define K_MCL_CURRENT 1//lock all current mappings |
File ulinux/samples/epoll_signalfd/epoll_signalfd.c added (mode: 100644) (index 0000000..22d8c54) |
|
1 |
|
#include <ulinux/compiler_types.h> |
|
2 |
|
#include <ulinux/sysc.h> |
|
3 |
|
#include <ulinux/types.h> |
|
4 |
|
#include <ulinux/epoll.h> |
|
5 |
|
#include <ulinux/signal/signal.h> |
|
6 |
|
#include <ulinux/file.h> |
|
7 |
|
#include <ulinux/error.h> |
|
8 |
|
#include <ulinux/utils/mem.h> |
|
9 |
|
|
|
10 |
|
#define OUTC(s) sysc(write,3,0,s,sizeof(s)) |
|
11 |
|
#define SIGBIT(sig) (1<<(sig-1)) |
|
12 |
|
#define EPOLL_EVENTS_N 10 |
|
13 |
|
|
|
14 |
|
//don't let gcc optimize the thread entry function |
|
15 |
|
static void __attribute__((noreturn,noinline,noclone)) thread_entry(void) |
|
16 |
|
{ |
|
17 |
|
while(1); |
|
18 |
|
sysc(exit,1,0); |
|
19 |
|
} |
|
20 |
|
|
|
21 |
|
void _start(void) |
|
22 |
|
{ |
|
23 |
|
//synchronous treatement of signals with signalfd |
|
24 |
|
k_ul mask=(~0);//don't forget, you cannot even touch SIGKILL, neither SIGSTOP |
|
25 |
|
k_l r=sysc(rt_sigprocmask,4,K_SIG_BLOCK,&mask,0,sizeof(mask)); |
|
26 |
|
if(K_ISERR(r)) sysc(exit_group,1,-1); |
|
27 |
|
|
|
28 |
|
mask=SIGBIT(K_SIGUSR1)|SIGBIT(K_SIGUSR2); |
|
29 |
|
k_i sigs_fd=(k_i)sysc(signalfd4,4,-1,&mask,sizeof(mask),K_SFD_NONBLOCK); |
|
30 |
|
if(K_ISERR(sigs_fd)) sysc(exit_group,1,-2); |
|
31 |
|
|
|
32 |
|
k_i epfd=(k_i)sysc(epoll_create1,1,0); |
|
33 |
|
if(K_ISERR(epfd)) sysc(exit_group,1,-3); |
|
34 |
|
|
|
35 |
|
struct k_epoll_event evts[EPOLL_EVENTS_N]; |
|
36 |
|
u_memset(evts,0,sizeof(struct k_epoll_event)); |
|
37 |
|
evts[0].events=K_EPOLLET|K_EPOLLIN; |
|
38 |
|
evts[0].data.fd=sigs_fd; |
|
39 |
|
r=sysc(epoll_ctl,4,epfd,K_EPOLL_CTL_ADD,sigs_fd,&evts[0]); |
|
40 |
|
if(K_ISERR(r)) sysc(exit_group,1,-4); |
|
41 |
|
|
|
42 |
|
while(1){ |
|
43 |
|
do{ |
|
44 |
|
u_memset(evts,0,sizeof(evts)); |
|
45 |
|
r=sysc(epoll_wait,4,epfd,evts,EPOLL_EVENTS_N,-5); |
|
46 |
|
}while(r==-K_EINTR); |
|
47 |
|
if(K_ISERR(r)) sysc(exit_group,1,-6); |
|
48 |
|
|
|
49 |
|
for(k_l i=0;i<r;++i) |
|
50 |
|
if(evts[i].data.fd==sigs_fd){ |
|
51 |
|
if(evts[i].events&K_EPOLLIN){ |
|
52 |
|
struct k_signalfd_siginfo info; |
|
53 |
|
|
|
54 |
|
while(1){ |
|
55 |
|
do{ |
|
56 |
|
u_memset(&info,0,sizeof(info)); |
|
57 |
|
r=sysc(read,3,sigs_fd,&info,sizeof(info)); |
|
58 |
|
}while(r==-K_EINTR); |
|
59 |
|
if(r!=-K_EAGAIN&&((K_ISERR(r)||(r>0&&r!=sizeof(info))))) |
|
60 |
|
sysc(exit_group,1,-7); |
|
61 |
|
if(r==0||r==-K_EAGAIN) break; |
|
62 |
|
|
|
63 |
|
switch(info.ssi_signo){ |
|
64 |
|
case K_SIGUSR1: |
|
65 |
|
OUTC("SIGUSR1\n"); |
|
66 |
|
break; |
|
67 |
|
case K_SIGUSR2: |
|
68 |
|
OUTC("SIGUSR2\n"); |
|
69 |
|
break; |
|
70 |
|
} |
|
71 |
|
} |
|
72 |
|
}else sysc(exit_group,1,-8); |
|
73 |
|
} |
|
74 |
|
} |
|
75 |
|
} |
File ulinux/samples/epoll_signalfd/makefile added (mode: 100644) (index 0000000..d92a509) |
|
1 |
|
.PHONY:clean |
|
2 |
|
|
|
3 |
|
ARCH?=$(shell uname -m | sed -e s/i.86/i386/ -e s/parisc64/parisc/ -e s/sun4u/sparc64/ -e s/arm.*/arm/ -e s/sa110/arm/ -e s/sh.*/sh/) |
|
4 |
|
|
|
5 |
|
epoll_signalfd:epoll_signalfd.c ../../../ulinux/arch |
|
6 |
|
gcc -Wall -Wextra -std=gnu99 -O3 -march=native -fverbose-asm -I../../.. -S \ |
|
7 |
|
../../arch/utils/mem.c -o mem.s |
|
8 |
|
as mem.s -o mem.o |
|
9 |
|
gcc -Wall -Wextra -std=gnu99 -O3 -march=native -fverbose-asm -I../../.. -S \ |
|
10 |
|
epoll_signalfd.c -o epoll_signalfd.s |
|
11 |
|
as epoll_signalfd.s -o epoll_signalfd.o |
|
12 |
|
ld -O -nostdlib -Bstatic --strip-all mem.o epoll_signalfd.o --output epoll_signalfd |
|
13 |
|
|
|
14 |
|
../../../ulinux/arch: |
|
15 |
|
ln -s archs/$(ARCH) ../../../ulinux/arch |
|
16 |
|
|
|
17 |
|
clean: |
|
18 |
|
-rm -f ../../../ulinux/arch epoll_signalfd.s epoll_signalfd.o epoll_signalfd mem.s mem.o |
File ulinux/samples/thread/thread.c added (mode: 100644) (index 0000000..c1031c8) |
|
1 |
|
//x86-64 stack |
|
2 |
|
|
|
3 |
|
#include <ulinux/compiler_types.h> |
|
4 |
|
#include <ulinux/sysc.h> |
|
5 |
|
#include <ulinux/types.h> |
|
6 |
|
#include <ulinux/sched.h> |
|
7 |
|
#include <ulinux/mmap.h> |
|
8 |
|
|
|
9 |
|
#define STACK_SZ 8*1024*1024 |
|
10 |
|
|
|
11 |
|
//don't let gcc optimize the thread entry function |
|
12 |
|
static void __attribute__((noreturn,noinline,noclone)) thread_entry(void) |
|
13 |
|
{ |
|
14 |
|
while(1); |
|
15 |
|
sysc(exit,1,0); |
|
16 |
|
} |
|
17 |
|
|
|
18 |
|
void _start(void) |
|
19 |
|
{ |
|
20 |
|
k_l r=sysc(mmap,6,0,STACK_SZ,K_PROT_READ|K_PROT_WRITE,K_MAP_PRIVATE |
|
21 |
|
|K_MAP_ANONYMOUS|K_MAP_STACK,0,0); |
|
22 |
|
|
|
23 |
|
k_l stack_bottom=r; |
|
24 |
|
k_l stack_top_unaligned=stack_bottom+STACK_SZ; |
|
25 |
|
k_l stack_top_aligned=stack_top_unaligned & (~0x1f);//32 bytes aligned |
|
26 |
|
|
|
27 |
|
r=sysc(clone,5,K_CLONE_THREAD|K_CLONE_SIGHAND|K_CLONE_VM|K_CLONE_FILES |
|
28 |
|
|K_CLONE_FS|K_CLONE_IO|K_CLONE_SYSVSEM,stack_top_aligned,0,0, |
|
29 |
|
0); |
|
30 |
|
while(1); |
|
31 |
|
sysc(exit_group,1,0); |
|
32 |
|
} |
File ulinux/sysc.h copied from file modules.h (similarity 67%) (mode: 100644) (index f5e162a..1ebdf47) |
1 |
|
#ifndef MODULES_H |
|
2 |
|
#define MODULES_H |
|
|
1 |
|
#ifndef ULINUX_SYSC_H |
|
2 |
|
#define ULINUX_SYSC_H |
3 |
3 |
//****************************************************************************** |
//****************************************************************************** |
4 |
4 |
//*this code is protected by the GNU affero GPLv3 |
//*this code is protected by the GNU affero GPLv3 |
5 |
|
//*author:Sylvain BERTRAND <sylvain.bertrand AT gmail dot com> |
|
|
5 |
|
//*author:Sylvain BERTRAND (sylvain.bertrand AT gmail dot com) |
6 |
6 |
//* <digital.ragnarok AT gmail dot com> |
//* <digital.ragnarok AT gmail dot com> |
7 |
7 |
//****************************************************************************** |
//****************************************************************************** |
8 |
|
void modules_load(void); |
|
|
8 |
|
#include <ulinux/arch/sysc.h> |
9 |
9 |
#endif |
#endif |
File ulinux/types.h copied from file modules.h (similarity 66%) (mode: 100644) (index f5e162a..9373676) |
1 |
|
#ifndef MODULES_H |
|
2 |
|
#define MODULES_H |
|
|
1 |
|
#ifndef ULINUX_TYPES_H |
|
2 |
|
#define ULINUX_TYPES_H |
3 |
3 |
//****************************************************************************** |
//****************************************************************************** |
4 |
4 |
//*this code is protected by the GNU affero GPLv3 |
//*this code is protected by the GNU affero GPLv3 |
5 |
|
//*author:Sylvain BERTRAND <sylvain.bertrand AT gmail dot com> |
|
|
5 |
|
//*author:Sylvain BERTRAND (sylvain.bertrand AT gmail dot com) |
6 |
6 |
//* <digital.ragnarok AT gmail dot com> |
//* <digital.ragnarok AT gmail dot com> |
7 |
7 |
//****************************************************************************** |
//****************************************************************************** |
8 |
|
void modules_load(void); |
|
|
8 |
|
#include <ulinux/arch/types.h> |
9 |
9 |
#endif |
#endif |
|
10 |
|
|