Преглед изворни кода

fix memory access error in list_tc() under bsp/simulator

git-svn-id: https://rt-thread.googlecode.com/svn/trunk@2550 bbd45198-f89e-11dd-88c7-29a3b14d5316
rogerz.zhang@gmail.com пре 12 година
родитељ
комит
d573786d52

+ 3 - 0
bsp/simulator/SConstruct

@@ -75,6 +75,9 @@ if GetDepend('RT_USING_RTGUI'):
         objs = objs + SConscript(RTT_ROOT + '/examples/gui/SConscript', 
 				variant_dir='build/examples/gui', duplicate=0)
 
+if GetDepend('RT_USING_TC'):
+    objs = objs + SConscript(RTT_ROOT + '/examples/kernel/SConscript', variant_dir = 'build/tc/kernel', duplicate=0)
+
 # build program 
 program = env.Program(TARGET, objs)
 

+ 2 - 17
components/finsh/cmd.c

@@ -32,21 +32,6 @@
 
 #include <rtthread.h>
 #include "finsh.h"
-#if defined(_MSC_VER)
-static struct finsh_syscall* _next_syscall(struct finsh_syscall* call)
-{
-	unsigned int *ptr;
-	ptr = (unsigned int*) (call + 1);
-	while ((*ptr == 0) && ((unsigned int*)ptr < (unsigned int*) _syscall_table_end))
-		ptr ++;
-
-	return (struct finsh_syscall*)ptr;
-}
-#define _NEXT_SYSCALl(index)  index=_next_syscall(index)
-#else
-#define _NEXT_SYSCALl(index)  index++
-#endif
-
 
 rt_inline unsigned int rt_list_len(const rt_list_t *l)
 {
@@ -564,7 +549,7 @@ long list(void)
     rt_kprintf("--Function List:\n");
     {
         struct finsh_syscall *index;
-        for (index = _syscall_table_begin; index < _syscall_table_end;  _NEXT_SYSCALl(index))
+        for (index = _syscall_table_begin; index < _syscall_table_end; FINSH_NEXT_SYSCALL(index))
         {
 #ifdef FINSH_USING_DESCRIPTION
             rt_kprintf("%-16s -- %s\n", index->name, index->desc);
@@ -649,7 +634,7 @@ void list_prefix(char *prefix)
     /* checks in system function call */
     {
         struct finsh_syscall* index;
-        for (index = _syscall_table_begin; index < _syscall_table_end;  _NEXT_SYSCALl(index))
+        for (index = _syscall_table_begin; index < _syscall_table_end;  FINSH_NEXT_SYSCALL(index))
         {
             if (str_is_prefix(prefix, index->name) == 0)
             {

+ 7 - 0
components/finsh/finsh.h

@@ -148,6 +148,13 @@ struct finsh_sysvar
 	void*		 var ;		/* the address of variable */
 };
 
+#if defined(_MSC_VER)
+struct finsh_syscall* finsh_syscall_next(struct finsh_syscall* call);
+#define FINSH_NEXT_SYSCALL(index)  index=finsh_syscall_next(index)
+#else
+#define FINSH_NEXT_SYSCALL(index)  index++
+#endif
+
 /* system variable item */
 struct finsh_sysvar_item
 {

+ 3 - 6
components/finsh/finsh_vm.c

@@ -83,8 +83,8 @@ void finsh_syscall_append(const char* name, syscall_func func)
 }
 #endif
 
-#if defined(_MSC_VER)
-static struct finsh_syscall* _next_syscall(struct finsh_syscall* call)
+#ifdef _MSC_VER
+struct finsh_syscall* finsh_syscall_next(struct finsh_syscall* call)
 {
 	unsigned int *ptr;
 	ptr = (unsigned int*) (call + 1);
@@ -93,9 +93,6 @@ static struct finsh_syscall* _next_syscall(struct finsh_syscall* call)
 
 	return (struct finsh_syscall*)ptr;
 }
-#define _NEXT_SYSCALL(index)  index=_next_syscall(index)
-#else
-#define _NEXT_SYSCALL(index)  index++
 #endif
 
 struct finsh_syscall* finsh_syscall_lookup(const char* name)
@@ -103,7 +100,7 @@ struct finsh_syscall* finsh_syscall_lookup(const char* name)
 	struct finsh_syscall* index;
 	struct finsh_syscall_item* item;
 
-	for (index = _syscall_table_begin; index < _syscall_table_end; _NEXT_SYSCALL(index))
+	for (index = _syscall_table_begin; index < _syscall_table_end; FINSH_NEXT_SYSCALL(index))
 	{
 		if (strcmp(index->name, name) == 0)
 			return index;

+ 2 - 2
examples/kernel/tc_comm.c

@@ -27,7 +27,7 @@ void tc_thread_entry(void* parameter)
 
 	while (_tc_stat & TC_STAT_RUNNING)
 	{
-		for (index = _syscall_table_begin; index < _syscall_table_end; index ++)
+		for (index = _syscall_table_begin; index < _syscall_table_end; FINSH_NEXT_SYSCALL(index))
 		{
 			/* search testcase */
 			if (rt_strstr(index->name, _tc_prefix) == index->name)
@@ -158,7 +158,7 @@ void list_tc()
 	struct finsh_syscall* index;
 
 	rt_kprintf("TestCases List:\n");
-	for (index = _syscall_table_begin; index < _syscall_table_end; index ++)
+	for (index = _syscall_table_begin; index < _syscall_table_end; FINSH_NEXT_SYSCALL(index))
 	{
 		/* search testcase */
 		if (rt_strstr(index->name, "_tc_") == index->name)