summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAmaury Pouly <pamaury@rockbox.org>2011-05-01 12:44:57 +0000
committerAmaury Pouly <pamaury@rockbox.org>2011-05-01 12:44:57 +0000
commit8da7237fd9d9f74cae7f23537fd3b63d05a1db5d (patch)
treef5d598f38e9b7fed817202a5b5d03ff51e1bf42f
parente75018ad66658c968b50767847ea1ed5408897ba (diff)
downloadrockbox-8da7237fd9d9f74cae7f23537fd3b63d05a1db5d.tar.gz
rockbox-8da7237fd9d9f74cae7f23537fd3b63d05a1db5d.zip
sbtools: do not rely on the ELF flags and always assume the entry point is valid
git-svn-id: svn://svn.rockbox.org/rockbox/trunk@29806 a1c6a512-1295-4272-9138-f99709370657
-rw-r--r--utils/sbtools/elf.c7
-rw-r--r--utils/sbtools/elftosb.c2
2 files changed, 4 insertions, 5 deletions
diff --git a/utils/sbtools/elf.c b/utils/sbtools/elf.c
index 0590a24692..0acaf8dcd8 100644
--- a/utils/sbtools/elf.c
+++ b/utils/sbtools/elf.c
@@ -360,7 +360,7 @@ bool elf_read_file(struct elf_params_t *params, elf_read_fn_t read,
360 if(ehdr.e_ident[EI_DATA] != ELFDATA2LSB) 360 if(ehdr.e_ident[EI_DATA] != ELFDATA2LSB)
361 error_printf("invalid elf data encoding: must be 32-bit lsb\n"); 361 error_printf("invalid elf data encoding: must be 32-bit lsb\n");
362 if(ehdr.e_ident[EI_VERSION] != EV_CURRENT) 362 if(ehdr.e_ident[EI_VERSION] != EV_CURRENT)
363 error_printf("invalid elf version"); 363 error_printf("invalid elf version\n");
364 if(ehdr.e_type != ET_EXEC) 364 if(ehdr.e_type != ET_EXEC)
365 error_printf("invalid elf file: must be an executable file\n"); 365 error_printf("invalid elf file: must be an executable file\n");
366 if(ehdr.e_machine != EM_ARM) 366 if(ehdr.e_machine != EM_ARM)
@@ -371,8 +371,7 @@ bool elf_read_file(struct elf_params_t *params, elf_read_fn_t read,
371 error_printf("invalid elf file: program header size mismatch\n"); 371 error_printf("invalid elf file: program header size mismatch\n");
372 if(ehdr.e_shnum > 0 && ehdr.e_shentsize != sizeof(Elf32_Shdr)) 372 if(ehdr.e_shnum > 0 && ehdr.e_shentsize != sizeof(Elf32_Shdr))
373 error_printf("invalid elf file: section header size mismatch\n"); 373 error_printf("invalid elf file: section header size mismatch\n");
374 if(ehdr.e_flags & EF_ARM_HASENTRY) 374 elf_set_start_addr(params, ehdr.e_entry);
375 elf_set_start_addr(params, ehdr.e_entry);
376 375
377 char *strtab = NULL; 376 char *strtab = NULL;
378 if(ehdr.e_shstrndx != SHN_UNDEF) 377 if(ehdr.e_shstrndx != SHN_UNDEF)
@@ -403,7 +402,7 @@ bool elf_read_file(struct elf_params_t *params, elf_read_fn_t read,
403 { 402 {
404 void *data = xmalloc(shdr.sh_size); 403 void *data = xmalloc(shdr.sh_size);
405 if(!read(user, shdr.sh_offset, data, shdr.sh_size)) 404 if(!read(user, shdr.sh_offset, data, shdr.sh_size))
406 error_printf("error read self section data"); 405 error_printf("error read self section data\n");
407 elf_add_load_section(params, shdr.sh_addr, shdr.sh_size, data); 406 elf_add_load_section(params, shdr.sh_addr, shdr.sh_size, data);
408 407
409 if(strtab) 408 if(strtab)
diff --git a/utils/sbtools/elftosb.c b/utils/sbtools/elftosb.c
index de041f9207..88c784734a 100644
--- a/utils/sbtools/elftosb.c
+++ b/utils/sbtools/elftosb.c
@@ -601,7 +601,7 @@ static struct sb_file_t *apply_cmd_file(struct cmd_file_t *cmd_file)
601 else if(cinst->type == CMD_JUMP || cinst->type == CMD_CALL) 601 else if(cinst->type == CMD_JUMP || cinst->type == CMD_CALL)
602 { 602 {
603 if(!elf_get_start_addr(elf, NULL)) 603 if(!elf_get_start_addr(elf, NULL))
604 bug("cannot jump/call '%s' because it has no starting point !", cinst->identifier); 604 bug("cannot jump/call '%s' because it has no starting point !\n", cinst->identifier);
605 sec->nr_insts++; 605 sec->nr_insts++;
606 } 606 }
607 607