# HG changeset patch # User Michael Spacefalcon # Date 1367212865 0 # Node ID ddda170fa6f464f746bc9dd8539ec31a3810239c # Parent da98dc08f57576cce60f49d8d622645880cbfe47 loadagent.elf compiled and linked, no printf yet diff -r da98dc08f575 -r ddda170fa6f4 .hgignore --- a/.hgignore Mon Apr 29 03:21:00 2013 +0000 +++ b/.hgignore Mon Apr 29 05:21:05 2013 +0000 @@ -1,6 +1,7 @@ syntax: regexp \.[oa]$ +\.elf$ ^toolchain/binutils-2.21.1/ ^toolchain/binutils-build/ diff -r da98dc08f575 -r ddda170fa6f4 loadagent/Makefile --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/loadagent/Makefile Mon Apr 29 05:21:05 2013 +0000 @@ -0,0 +1,17 @@ +CC= arm-elf-gcc +CFLAGS= -Os -fno-builtin +LD= arm-elf-ld + +OBJS= crt0.o main.o serio.o serwait.o + +TC_LIBS=`${CC} -print-file-name=libc.a` \ + `${CC} -print-file-name=libgcc.a` + +all: loadagent.elf + +loadagent.elf: ${OBJS} loadagent.lds + ${LD} -N -T loadagent.lds -o $@ ${OBJS} \ + --start-group ${TC_LIBS} --end-group + +clean: + rm -f *.o *errs *core *.elf *.bin *.srec diff -r da98dc08f575 -r ddda170fa6f4 loadagent/crt0.S --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/loadagent/crt0.S Mon Apr 29 05:21:05 2013 +0000 @@ -0,0 +1,19 @@ +#include "halt.h" + + .text + .code 32 + .global _entry +_entry: + ldr sp, =stack_bottom +@ zero bss + ldr r0, =__bss_start + ldr r2, =__bss_end + sub r1, r2, r0 + bl bzero +@ C code entry + bl main + mov r0, #HALTCODE_MAINEXITED + .global _exit +_exit: nop +1: nop + b 1b diff -r da98dc08f575 -r ddda170fa6f4 loadagent/loadagent.lds --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/loadagent/loadagent.lds Mon Apr 29 05:21:05 2013 +0000 @@ -0,0 +1,44 @@ +OUTPUT_FORMAT("elf32-littlearm", "elf32-littlearm", "elf32-littlearm") +OUTPUT_ARCH(arm) +ENTRY(_entry) +SECTIONS +{ + /* code */ + . = 0x800750; + .text : { + /* regular code */ + *(.text*) + /* gcc voodoo */ + *(.glue_7t) *(.glue_7) *(.vfp11_veneer) *(.v4_bx) + . = ALIGN(4); + } + + /* read-only data */ + . = ALIGN(4); + .rodata : { + *(.rodata*) + } + + /* initialized data */ + . = ALIGN(4); + .data : { + *(.data) + } + PROVIDE(edata = .); + + /* uninitialized data */ + .bss (NOLOAD) : { + . = ALIGN(4); + __bss_start = .; + *(.bss) + } + . = ALIGN(4); + __bss_end = .; + /* end of image */ + _end = .; + PROVIDE(end = .); +} + +/* a few absolute definitions */ +rom_vars = 0x800518; +stack_bottom = 0x83FFFC; diff -r da98dc08f575 -r ddda170fa6f4 loadagent/main.c --- a/loadagent/main.c Mon Apr 29 03:21:00 2013 +0000 +++ b/loadagent/main.c Mon Apr 29 05:21:05 2013 +0000 @@ -29,3 +29,18 @@ _exit(HALTCODE_INVALIDUART); } } + +main() +{ + uart_select_init(); +#if 0 + printf("FreeCalypso loadagent running\n"); + printf("Loaded via UART %d (%s) at baud rate #%d\n", rom_vars.uart_id, + uart_name, rom_vars.baud_rate_code); + printf("TCXO clock input autodetected to be %d MHz\n", + rom_vars.clktcxo_13mhz ? 13 : 26); +#endif + /* interactive command mode to be implemented */ + while (1) + ; +}