summary refs log tree commit diff
path: root/hello.e
blob: 63f19c4f020d2490733c06d96649c04c4949b8ca (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
~ cat labels.e elf.e hello.e | ./quine > hello && chmod 755 hello && ./hello

: output-start-routine
  current-offset L' start set-label
  1 :rax mov-reg64-imm32
  1 :rdi mov-reg64-imm64
  origin L' greeting use-label + :rsi mov-reg64-imm64
  L' greeting-size use-label :rdx mov-reg64-imm64
  syscall
  60 :rax mov-reg64-imm32
  0 :rdi mov-reg64-imm32
  syscall
  ;

: output-greeting
  current-offset dup L' greeting set-label 3unroll
  s" Hello, Irenes!" packstring
  current-offset 4 roll - L' greeting-size set-label ;

~ (output memory start, current output point
~  -- output memory start, current output point)
~
~ Everything directly called by all-contents has this same interface.
~
: all-contents
  elf-file-header
  elf-program-header
  output-start-routine
  output-greeting
  current-offset L' total-size set-label
  ;

' all-contents entry-to-execution-token label-loop
swap sys-write bye