renamed directory
authorRalph Ronnquist <ralph.ronnquist@gmail.com>
Fri, 25 Mar 2022 23:33:19 +0000 (10:33 +1100)
committerRalph Ronnquist <ralph.ronnquist@gmail.com>
Fri, 25 Mar 2022 23:33:19 +0000 (10:33 +1100)
asm/.gitignore [new file with mode: 0644]
asm/Makefile [new file with mode: 0644]
asm/reaper.asm [new file with mode: 0644]
reaper/.gitignore [deleted file]
reaper/Makefile [deleted file]
reaper/reaper.asm [deleted file]

diff --git a/asm/.gitignore b/asm/.gitignore
new file mode 100644 (file)
index 0000000..da4ed25
--- /dev/null
@@ -0,0 +1 @@
+reaper
diff --git a/asm/Makefile b/asm/Makefile
new file mode 100644 (file)
index 0000000..4afe034
--- /dev/null
@@ -0,0 +1,6 @@
+reaper: reaper.asm
+       fasm $^ $@
+       chmod a+x $@
+
+clean:
+       rm -f reaper
diff --git a/asm/reaper.asm b/asm/reaper.asm
new file mode 100644 (file)
index 0000000..0086a8f
--- /dev/null
@@ -0,0 +1,73 @@
+;;; This is a "repear" program that merely waits for child processes
+;;; to appear and "reap" them, i.e. read their exit status to let them
+;;; exit. The program allows an arbitrary first argument that is
+;;; indended for identifying the reaper process.
+
+       format elf64 executable
+       entry main
+
+       ;; A data segment
+       segment readable writable
+
+       ;; sigset_t set -- bit mask for sigprocmask
+set:   dq -1   ; all bits set
+       
+;;; siginfo_t status -- all ignored
+status:        rept 16 { dq 0 }
+status$end:
+       
+;;; A code segment
+       segment readable executable
+       
+;;; Main entry point
+main:
+       ;; if (getpid() != 1) exit 1;
+       mov rax, qword 39
+       syscall
+       cmp rax, 1
+       je pid_1
+       
+       ;; exit(1)
+       mov rdi, qword 1
+       mov rax, qword 60
+        syscall                ; exit program
+
+       ;; Continue here for pid 1 only
+pid_1:
+       ;; Block all signals
+       ;; sigprocmask(SIG_BLOCK, &set, 0);
+       xor rdi, rdi            ; SIG_BLOCK = 0
+       lea rsi, [set]          ; *set
+       xor rdx, rdx            ; 0
+       xor r10, r10            ; 0
+       mov rax, qword 14       ; sys_rt_sigprocmask
+       syscall
+
+       ;; loop waiting for children, and reading their exit status
+reaper:
+       ;; first clear status area again
+       cld
+       xor rax, rax
+       lea rsi, [status$end]
+       lea rdi, [status]
+clear: stosq
+       cmp rdi,rsi
+       jl clear
+       
+       ;; waitid( idtype, id, *status, options )
+       xor rdi, rdi      ;  idtype_t idtype = P_ALL = 0
+       xor rsi, rsi      ; int id = 0
+       lea rdx, [status] ; siginfo_t* = &status
+       mov r10, 4        ; int options = WEXITED = 4
+       mov rax, 247      ; waitid
+       syscall
+
+       cmp rax,-10       ; -10 = ECHILD (no child processes)
+       jne reaper
+
+       mov rdi, rax
+       mov rax, qword 60
+        syscall        ; exit program
+
+;;; The rest of memory is not executable
+       segment readable writable
diff --git a/reaper/.gitignore b/reaper/.gitignore
deleted file mode 100644 (file)
index da4ed25..0000000
+++ /dev/null
@@ -1 +0,0 @@
-reaper
diff --git a/reaper/Makefile b/reaper/Makefile
deleted file mode 100644 (file)
index 4afe034..0000000
+++ /dev/null
@@ -1,6 +0,0 @@
-reaper: reaper.asm
-       fasm $^ $@
-       chmod a+x $@
-
-clean:
-       rm -f reaper
diff --git a/reaper/reaper.asm b/reaper/reaper.asm
deleted file mode 100644 (file)
index 0086a8f..0000000
+++ /dev/null
@@ -1,73 +0,0 @@
-;;; This is a "repear" program that merely waits for child processes
-;;; to appear and "reap" them, i.e. read their exit status to let them
-;;; exit. The program allows an arbitrary first argument that is
-;;; indended for identifying the reaper process.
-
-       format elf64 executable
-       entry main
-
-       ;; A data segment
-       segment readable writable
-
-       ;; sigset_t set -- bit mask for sigprocmask
-set:   dq -1   ; all bits set
-       
-;;; siginfo_t status -- all ignored
-status:        rept 16 { dq 0 }
-status$end:
-       
-;;; A code segment
-       segment readable executable
-       
-;;; Main entry point
-main:
-       ;; if (getpid() != 1) exit 1;
-       mov rax, qword 39
-       syscall
-       cmp rax, 1
-       je pid_1
-       
-       ;; exit(1)
-       mov rdi, qword 1
-       mov rax, qword 60
-        syscall                ; exit program
-
-       ;; Continue here for pid 1 only
-pid_1:
-       ;; Block all signals
-       ;; sigprocmask(SIG_BLOCK, &set, 0);
-       xor rdi, rdi            ; SIG_BLOCK = 0
-       lea rsi, [set]          ; *set
-       xor rdx, rdx            ; 0
-       xor r10, r10            ; 0
-       mov rax, qword 14       ; sys_rt_sigprocmask
-       syscall
-
-       ;; loop waiting for children, and reading their exit status
-reaper:
-       ;; first clear status area again
-       cld
-       xor rax, rax
-       lea rsi, [status$end]
-       lea rdi, [status]
-clear: stosq
-       cmp rdi,rsi
-       jl clear
-       
-       ;; waitid( idtype, id, *status, options )
-       xor rdi, rdi      ;  idtype_t idtype = P_ALL = 0
-       xor rsi, rsi      ; int id = 0
-       lea rdx, [status] ; siginfo_t* = &status
-       mov r10, 4        ; int options = WEXITED = 4
-       mov rax, 247      ; waitid
-       syscall
-
-       cmp rax,-10       ; -10 = ECHILD (no child processes)
-       jne reaper
-
-       mov rdi, rax
-       mov rax, qword 60
-        syscall        ; exit program
-
-;;; The rest of memory is not executable
-       segment readable writable