Просмотр исходного кода

Fix issue when loading *.o when do internal function call

Fox example for the below example code:

#include <stdio.h>

void goodBye(void)
{
	printf("Good Bye!\n");
}

int main(int argc, char* argv[])
{
	printf("Hello World!\n");
	goodBye();
	return 0;
}
parai 7 лет назад
Родитель
Сommit
74622c6ed3
1 измененных файлов с 9 добавлено и 0 удалено
  1. 9 0
      src/module.c

+ 9 - 0
src/module.c

@@ -823,6 +823,15 @@ static struct rt_module* _load_relocated_object(const char *name,
                                                (Elf32_Addr)data_addr + sym->st_value);
                                                (Elf32_Addr)data_addr + sym->st_value);
                     }
                     }
                 }
                 }
+                else if (ELF_ST_TYPE(sym->st_info) == STT_FUNC)
+                {
+                    /* relocate function */
+                    rt_module_arm_relocate(module, rel,
+                                           (Elf32_Addr)((rt_uint8_t *)
+                                                        module->module_space
+                                                        - module_addr
+                                                        + sym->st_value));
+                }
             }
             }
             else if (ELF_ST_TYPE(sym->st_info) == STT_FUNC)
             else if (ELF_ST_TYPE(sym->st_info) == STT_FUNC)
             {
             {