Browse Source

[dlmodule] Add cache ops in dlmodule.

Bernard Xiong 6 years ago
parent
commit
ba5c1bea44
3 changed files with 16 additions and 7 deletions
  1. 9 7
      components/finsh/msh.c
  2. 1 0
      components/libc/libdl/dlelf.c
  3. 6 0
      components/libc/libdl/dlmodule.c

+ 9 - 7
components/finsh/msh.c

@@ -376,25 +376,27 @@ int msh_exec(char *cmd, rt_size_t length)
     {
         return cmd_ret;
     }
-#if defined(RT_USING_MODULE) && defined(RT_USING_DFS)
-    if (msh_exec_module(cmd, length) == 0)
+#ifdef RT_USING_DFS
+#ifdef DFS_USING_WORKDIR
+    if (msh_exec_script(cmd, length) == 0)
     {
         return 0;
     }
 #endif
 
-#if defined(RT_USING_DFS) && defined(DFS_USING_WORKDIR)
-    if (msh_exec_script(cmd, length) == 0)
+#ifdef RT_USING_MODULE
+    if (msh_exec_module(cmd, length) == 0)
     {
         return 0;
     }
 #endif
 
-#if defined(RT_USING_LWP) && defined(RT_USING_DFS)
+#ifdef RT_USING_LWP
     if (_msh_exec_lwp(cmd, length) == 0)
     {
         return 0;
     }
+#endif
 #endif
 
     /* truncate the cmd at the first space. */
@@ -449,8 +451,8 @@ void msh_auto_complete_path(char *path)
     ptr = path;
     for (;;)
     {
-        if (*ptr == '/') index = ptr + 1; 
-        if (!*ptr) break; 
+        if (*ptr == '/') index = ptr + 1;
+        if (!*ptr) break;
 
         ptr ++;
     }

+ 1 - 0
components/libc/libdl/dlelf.c

@@ -277,6 +277,7 @@ rt_err_t dlmodule_load_relocated_object(struct rt_dlmodule* module, void *module
         rt_kprintf("Module: allocate space failed.\n");
         return -RT_ERROR;
     }
+    module->mem_size = module_size;
 
     /* zero all space */
     ptr = module->mem_space;

+ 6 - 0
components/libc/libdl/dlmodule.c

@@ -491,6 +491,12 @@ struct rt_dlmodule* dlmodule_load(const char* filename)
     /* increase module reference count */
     module->nref ++;
 
+    /* deal with cache */
+#ifdef RT_USING_CACHE
+    rt_hw_cpu_dcache_ops(RT_HW_CACHE_FLUSH, module->mem_space, module->mem_size);
+    rt_hw_cpu_icache_ops(RT_HW_CACHE_INVALIDATE, module->mem_space, module->mem_size);
+#endif
+
     /* set module initialization and cleanup function */
     module->init_func = dlsym(module, "module_init");
     module->cleanup_func = dlsym(module, "module_cleanup");