diff --git a/BaS_GNU/bas.lk.in b/BaS_GNU/bas.lk.in index 7205203..de853e9 100644 --- a/BaS_GNU/bas.lk.in +++ b/BaS_GNU/bas.lk.in @@ -91,7 +91,11 @@ SECTIONS { objs/illegal_instruction.o(.text) *(.data) *(.bss) - . = ALIGN(4); + + /* The BaS copy routine assumes that tha BaS size + * is a multiple of the following value. + */ + . = ALIGN(16); } > ram __BAS_LMA = LOADADDR(.bas); diff --git a/BaS_GNU/sources/sysinit.c b/BaS_GNU/sources/sysinit.c index 673360a..ef6c2a0 100644 --- a/BaS_GNU/sources/sysinit.c +++ b/BaS_GNU/sources/sysinit.c @@ -807,14 +807,16 @@ void initialize_hardware(void) { end = (uint32_t *)(BAS_LMA + BAS_SIZE); dst = jmp = (uint32_t *)BAS_VMA; - /* FIXME: beware of possible alignment */ - do + /* The linker script will ensure that the Bas size + * is a multiple of the following. + */ + while (src < end) { *dst++ = *src++; *dst++ = *src++; *dst++ = *src++; *dst++ = *src++; - } while (src < end); + } /* we have copied a code area, so flush the caches */ flush_and_invalidate_caches();