#build with:
#  as -mregnames -o elf.o elf.s
#  ld --oformat binary -o elf elf.o

ehdr:
	#elf file header
	.byte 0x7f, 'E', 'L', 'F'
	.byte 1, 2, 1, 0 # 32-bit, big-endian, version, padding
	.byte 0, 0, 0, 0 # padding...
	.byte 0, 0, 0, 0
	.word 2          # file type (EXEC)
	.word 20         # architecture (PPC)
	.int 1           # ELF version (1)
	.int _start      # entry point
	.int phdr-ehdr   # program header table offset
	.int 0           # section header table offset
	.int 0           # processor flags
	.word phdr-ehdr  # ELF header size
	.word s-phdr     # program header table entry size
	.word 1          # number of program header table entries
	.word 0x28       # section header table entry size
	.word 0          # number of section header table entries
	.word 0          # section header string table index

#offset 0x34 into file
phdr:
	#our sole program header
	.int 1         # type (PT_LOAD)
	.int 0         # file offset
	.int ehdr      # virtual address
	.int 0         # physical address (unused)
	.int e - s     # size in file
	.int 1024*1024 # size in memory (1 MB)
	.int 7         # flags (read/write/execute)
	.int 0x10000   # alignment (64K boundary)

s:
	.global _start
_start:
	li r3,17
	li r0,1
	sc

e:
