diff --git a/core/loader/elfloader-arch.h b/core/loader/elfloader-arch.h index f901c87db..4a9e97428 100644 --- a/core/loader/elfloader-arch.h +++ b/core/loader/elfloader-arch.h @@ -28,7 +28,7 @@ * * This file is part of the Contiki operating system. * - * @(#)$Id: elfloader-arch.h,v 1.2 2006/12/18 12:11:15 adamdunkels Exp $ + * @(#)$Id: elfloader-arch.h,v 1.3 2006/12/18 14:54:04 fros4943 Exp $ */ /** * \addtogroup elfloader @@ -101,6 +101,7 @@ void *elfloader_arch_allocate_rom(int size); * \brief Perform a relocation. * \param fd The file descriptor for the ELF file. * \param sectionoffset The file offset at which the relocation can be found. + * \param sectionaddr The section start address (absolute runtime). * \param rela A pointer to an ELF32 rela structure (struct elf32_rela). * \param addr The relocated address. * @@ -116,11 +117,13 @@ void *elfloader_arch_allocate_rom(int size); * processor. */ void elfloader_arch_relocate(int fd, unsigned int sectionoffset, - struct elf32_rela *rela, char *addr); + char *sectionaddr, + struct elf32_rela *rela, char *addr); /** - * \brief Write the program code (text segment) into program memory. + * \brief Write to read-only memory (for example the text segment). * \param fd The file descriptor for the ELF file. + * \param textoff Offset of text segment relative start of file. * \param size The size of the text segment. * \param mem A pointer to the where the text segment should be flashed * @@ -129,7 +132,7 @@ void elfloader_arch_relocate(int fd, unsigned int sectionoffset, * module into memory. The function is called when all * relocations have been performed. */ -void elfloader_arch_write_text(int fd, unsigned int size, char *mem); +void elfloader_arch_write_rom(int fd, unsigned short textoff, unsigned int size, char *mem); #endif /* __ELFLOADER_ARCH_H__ */ diff --git a/core/loader/elfloader-avr.c b/core/loader/elfloader-avr.c index d36b8e685..b17f38019 100644 --- a/core/loader/elfloader-avr.c +++ b/core/loader/elfloader-avr.c @@ -28,7 +28,7 @@ * * This file is part of the Contiki operating system. * - * @(#)$Id: elfloader-avr.c,v 1.2 2006/09/01 07:10:01 adamdunkels Exp $ + * @(#)$Id: elfloader-avr.c,v 1.3 2006/12/18 14:54:04 fros4943 Exp $ */ #include "elfloader-arch.h" @@ -76,7 +76,7 @@ elfloader_arch_allocate_rom(int size) /*---------------------------------------------------------------------------*/ #define READSIZE 32 void -elfloader_arch_write_text(int fd, unsigned int size, char *mem) +elfloader_arch_write_rom(int fd, unsigned short textoff, unsigned int size, char *mem) { #if 0 int i; @@ -87,6 +87,7 @@ elfloader_arch_write_text(int fd, unsigned int size, char *mem) flashptr = (unsigned short *)elfloader_arch_textmemory; + cfs_seek(fd, textoff); for(ptr = 0; ptr < size; ptr += READSIZE) { /* Read data from file into RAM. */ @@ -122,6 +123,7 @@ write_ldi(int fd, unsigned char *instr, unsigned char byte) /*---------------------------------------------------------------------------*/ void elfloader_arch_relocate(int fd, unsigned int sectionoffset, + char *sectionaddr, struct elf32_rela *rela, char *addr) { unsigned int type; diff --git a/core/loader/elfloader-msp430.c b/core/loader/elfloader-msp430.c index feebe5447..cbcc4126f 100644 --- a/core/loader/elfloader-msp430.c +++ b/core/loader/elfloader-msp430.c @@ -28,7 +28,7 @@ * * This file is part of the Contiki operating system. * - * @(#)$Id: elfloader-msp430.c,v 1.1 2006/06/17 22:41:18 adamdunkels Exp $ + * @(#)$Id: elfloader-msp430.c,v 1.2 2006/12/18 14:54:04 fros4943 Exp $ */ #include "elfloader-arch.h" @@ -54,7 +54,7 @@ elfloader_arch_allocate_rom(int size) /*---------------------------------------------------------------------------*/ #define READSIZE 32 void -elfloader_arch_write_text(int fd, unsigned int size, char *mem) +elfloader_arch_write_rom(int fd, unsigned short textoff, unsigned int size, char *mem) { int i; unsigned int ptr; @@ -64,6 +64,7 @@ elfloader_arch_write_text(int fd, unsigned int size, char *mem) flashptr = (unsigned short *)mem; + cfs_seek(fd, textoff); for(ptr = 0; ptr < size; ptr += READSIZE) { /* Read data from file into RAM. */ @@ -90,6 +91,7 @@ elfloader_arch_write_text(int fd, unsigned int size, char *mem) /*---------------------------------------------------------------------------*/ void elfloader_arch_relocate(int fd, unsigned int sectionoffset, + char *sectionaddr, struct elf32_rela *rela, char *addr) { addr += rela->r_addend; diff --git a/core/loader/elfloader-stub.c b/core/loader/elfloader-stub.c index 3b582ef1b..08352a70e 100644 --- a/core/loader/elfloader-stub.c +++ b/core/loader/elfloader-stub.c @@ -28,7 +28,7 @@ * * This file is part of the Contiki operating system. * - * @(#)$Id: elfloader-stub.c,v 1.1 2006/06/17 22:41:18 adamdunkels Exp $ + * @(#)$Id: elfloader-stub.c,v 1.2 2006/12/18 14:54:04 fros4943 Exp $ */ #include "elfloader-arch.h" @@ -48,15 +48,16 @@ elfloader_arch_allocate_rom(int size) } /*---------------------------------------------------------------------------*/ void -elfloader_arch_write_text(int fd, unsigned int size, char *mem) +elfloader_arch_write_rom(int fd, unsigned short textoff, unsigned int size, char *mem) { - printf("elfloader_arch_write_text: size %d, mem %p\n", size, mem); + printf("elfloader_arch_write_rom: size %d, offset %i, mem %p\n", size, textoff, mem); } /*---------------------------------------------------------------------------*/ void elfloader_arch_relocate(int fd, unsigned int sectionoffset, + char *sectionaddr, struct elf32_rela *rela, char *addr) { - printf("elfloader_arch_relocate: sectionoffset 0x%04x, r_offset 0x%04x, r_info 0x%04x, r_addend 0x%04x, addr %p\n", sectionoffset, rela->r_offset, rela->r_info, rela->r_addend, addr); + printf("elfloader_arch_relocate: sectionoffset 0x%04x, sectionaddr %p, r_offset 0x%04x, r_info 0x%04x, r_addend 0x%04x, addr %p\n", sectionoffset, sectionaddr, rela->r_offset, rela->r_info, rela->r_addend, addr); } /*---------------------------------------------------------------------------*/ diff --git a/core/loader/elfloader-x86.c b/core/loader/elfloader-x86.c index f64048502..20e32f1b7 100644 --- a/core/loader/elfloader-x86.c +++ b/core/loader/elfloader-x86.c @@ -28,7 +28,7 @@ * * This file is part of the Contiki operating system. * - * @(#)$Id: elfloader-x86.c,v 1.1 2006/10/25 10:53:31 fros4943 Exp $ + * @(#)$Id: elfloader-x86.c,v 1.2 2006/12/18 14:54:04 fros4943 Exp $ */ #include "elfloader-arch.h" #include @@ -67,8 +67,9 @@ elfloader_arch_allocate_rom(int size) } /*---------------------------------------------------------------------------*/ void -elfloader_arch_write_text(int fd, unsigned int size, char *mem) +elfloader_arch_write_rom(int fd, unsigned short textoff, unsigned int size, char *mem) { + cfs_seek(fd, textoff); cfs_read(fd, (unsigned char *)mem, size); } /*---------------------------------------------------------------------------*/