about summary refs log tree commit diff stats
path: root/subx/teensy
diff options
context:
space:
mode:
authorKartik Agaram <vc@akkartik.com>2018-07-03 16:36:37 -0700
committerKartik Agaram <vc@akkartik.com>2018-07-03 16:36:37 -0700
commitc1100182501e2dca7893b3c891470b33c43a71b1 (patch)
tree16226daf6178ce1356637b4c5278f5664a3cd5de /subx/teensy
parentc833fbad65e39c12dde44bdff09fadd822d2b52c (diff)
downloadmu-c1100182501e2dca7893b3c891470b33c43a71b1.tar.gz
4311 - subx running binaries with global variables
Learning to use the data segment.

Currently, subx can only run the teensy files generated from flat
assembler:
  test4
  test5
  test7

This is not a priority to fix. These files are just useful references to
have around.
Diffstat (limited to 'subx/teensy')
-rwxr-xr-xsubx/teensy/test6bin0 -> 5588 bytes
-rw-r--r--subx/teensy/test6-global.s13
-rwxr-xr-xsubx/teensy/test7bin0 -> 4100 bytes
-rw-r--r--subx/teensy/test7-global.s58
4 files changed, 71 insertions, 0 deletions
diff --git a/subx/teensy/test6 b/subx/teensy/test6
new file mode 100755
index 00000000..0c08219f
--- /dev/null
+++ b/subx/teensy/test6
Binary files differdiff --git a/subx/teensy/test6-global.s b/subx/teensy/test6-global.s
new file mode 100644
index 00000000..9b981b62
--- /dev/null
+++ b/subx/teensy/test6-global.s
@@ -0,0 +1,13 @@
+; Example with a data segment.
+; nasm -f elf test6-global.s
+; gcc -Wall -s test6-global.o -o test6
+BITS 32
+
+SECTION .data
+foo: dd 42
+
+SECTION .text
+GLOBAL main
+main:
+  mov eax, foo
+  ret
diff --git a/subx/teensy/test7 b/subx/teensy/test7
new file mode 100755
index 00000000..0d44519d
--- /dev/null
+++ b/subx/teensy/test7
Binary files differdiff --git a/subx/teensy/test7-global.s b/subx/teensy/test7-global.s
new file mode 100644
index 00000000..4cb4e8f3
--- /dev/null
+++ b/subx/teensy/test7-global.s
@@ -0,0 +1,58 @@
+; https://www.muppetlabs.com/~breadbox/software/tiny/teensy.html
+; nasm -f bin test7-global.s -o test7
+; chmod +x test7
+BITS 32
+
+              org     0x08048000
+
+ehdr:                                                 ; Elf32_Ehdr
+              db      0x7F, "ELF", 1, 1, 1, 0         ;   e_ident
+      times 8 db      0
+              dw      2                               ;   e_type
+              dw      3                               ;   e_machine
+              dd      1                               ;   e_version
+              dd      _start                          ;   e_entry
+              dd      phdr1 - $$                      ;   e_phoff
+              dd      0                               ;   e_shoff
+              dd      0                               ;   e_flags
+              dw      ehdrsize                        ;   e_ehsize
+              dw      phdrsize                        ;   e_phentsize
+              dw      2                               ;   e_phnum
+              dw      0                               ;   e_shentsize
+              dw      0                               ;   e_shnum
+              dw      0                               ;   e_shstrndx
+ehdrsize  equ  $ - ehdr
+
+phdr1:                                                ; Elf32_Phdr
+              dd      1                               ;   p_type
+              dd      0                               ;   p_offset
+              dd      $$                              ;   p_vaddr
+              dd      $$                              ;   p_paddr
+              dd      codesize                        ;   p_filesz
+              dd      codesize                        ;   p_memsz
+              dd      5                               ;   p_flags = r-x
+              dd      0x1000                          ;   p_align
+phdrsize  equ  $ - phdr1
+
+phdr2:
+              dd      1                               ;   p_type
+              dd      _data - $$                      ;   p_offset
+              dd      _data                           ;   p_vaddr
+              dd      _data                           ;   p_paddr
+              dd      datasize                        ;   p_filesz
+              dd      datasize                        ;   p_memsz
+              dd      6                               ;   p_flags = rw-
+              dd      0x1000                          ;   p_align
+
+_start:
+  mov ebx, [foo]
+  mov eax, 1
+  int 0x80
+
+codesize      equ     $ - $$  ; TODO: why include the headers?!
+
+alignb 0x1000
+_data:
+  foo:        dd      42
+
+datasize      equ     $ - _data