| Index: emcore/trunk/export/emcoreapp.h | 
| — | — | @@ -8,6 +8,7 @@ | 
| 9 | 9 | "ldr\tr2, [r0]\n\tcmp\tr3, r2\n\tldrls\tr1, [r0,#4]\n\tcmpls\tr1, r3\n\t"    \ | 
| 10 | 10 | "movhi\tr0, #0\n\tldrhi\tr1, =__emcore_incompatible_api_str\n\t"             \ | 
| 11 | 11 | "swihi\t1\n\tldr\tr1, =__emcore_syscall\n\tstr\tr0, [r1]\n\t"                \ | 
|  | 12 | +                     "b\t__emcore_entrypoint_c\n\t.ltorg\n__emcore_entrypoint_c:\n\t"             \ | 
| 12 | 13 | ::: "r0", "r1", "r2", "r3", "r12", "lr", "cc", "memory");                        \ | 
| 13 | 14 | thread_set_name(NULL, threadnamestr);                                                     \ | 
| 14 | 15 | thread_set_priority(NULL, threadprio);                                                    \ | 
| Index: emcore/trunk/export/armhelpers.c | 
| — | — | @@ -31,7 +31,7 @@ | 
| 32 | 32 | int __clzsi2(int arg) __attribute__((naked,noinline)); | 
| 33 | 33 | int __clzsi2(int arg) | 
| 34 | 34 | { | 
| 35 |  | -    __asm__ volatile("ldr\tr12, =__emcore_syscall\n\tldr\tr12, [r12]\n\tldr\tpc, [r12,#8]\n\t"); | 
|  | 35 | +    __asm__ volatile("ldr\tr12, =__emcore_syscall\n\tldr\tr12, [r12]\n\tldr\tpc, [r12,#8]\n\t.ltorg\n\t"); | 
| 36 | 36 | } | 
| 37 | 37 |  | 
| 38 | 38 | // This one has a non-standard calling convention, so we just declare it as void | 
| — | — | @@ -38,7 +38,7 @@ | 
| 39 | 39 | void __aeabi_idivmod(void) __attribute__((naked,noinline)); | 
| 40 | 40 | void __aeabi_idivmod(void) | 
| 41 | 41 | { | 
| 42 |  | -    __asm__ volatile("ldr\tr12, =__emcore_syscall\n\tldr\tr12, [r12]\n\tldr\tpc, [r12,#0xc]\n\t"); | 
|  | 42 | +    __asm__ volatile("ldr\tr12, =__emcore_syscall\n\tldr\tr12, [r12]\n\tldr\tpc, [r12,#0xc]\n\t.ltorg\n\t"); | 
| 43 | 43 | } | 
| 44 | 44 |  | 
| 45 | 45 | // This one has a non-standard calling convention, so we just declare it as void | 
| — | — | @@ -45,7 +45,7 @@ | 
| 46 | 46 | void __aeabi_uidivmod(void) __attribute__((naked,noinline)); | 
| 47 | 47 | void __aeabi_uidivmod(void) | 
| 48 | 48 | { | 
| 49 |  | -    __asm__ volatile("ldr\tr12, =__emcore_syscall\n\tldr\tr12, [r12]\n\tldr\tpc, [r12,#0x10]\n\t"); | 
|  | 49 | +    __asm__ volatile("ldr\tr12, =__emcore_syscall\n\tldr\tr12, [r12]\n\tldr\tpc, [r12,#0x10]\n\t.ltorg\n\t"); | 
| 50 | 50 | } | 
| 51 | 51 |  | 
| 52 | 52 | extern __attribute__((alias("__aeabi_idivmod"))) void __aeabi_idiv(void); | 
| Index: emcore/trunk/export/emcorelib.h | 
| — | — | @@ -7,6 +7,7 @@ | 
| 8 | 8 | int __emcore_lib_init()                                                                       \ | 
| 9 | 9 | {                                                                                             \ | 
| 10 | 10 | asm volatile("swi\t2\n\tldr\tr1, =__emcore_syscall\n\tstr\tr0, [r1]\n\t"                  \ | 
|  | 11 | +                     "b\t__emcore_lib_init_c\n\t.ltorg\n__emcore_lib_init_c:\n\t"                 \ | 
| 11 | 12 | ::: "r0", "r1", "r2", "r3", "r12", "lr", "cc", "memory");                        \ | 
| 12 | 13 | if (__emcore_syscall->table_version < EMCORE_API_VERSION                                  \ | 
| 13 | 14 | || __emcore_syscall->table_minversion > EMCORE_API_VERSION)                              \ |