summaryrefslogtreecommitdiff
path: root/libcpu/arm/common
diff options
context:
space:
mode:
authoryangjie11 <[email protected]>2020-11-18 09:56:35 +0800
committerGitHub <[email protected]>2020-11-18 09:56:35 +0800
commitd4a682e8d97fa131e5a8d795f8c5451d55cdd5b0 (patch)
tree4773b40cb012475c5daf74bfd55707e141477669 /libcpu/arm/common
parent2b98f4720c827ae1850df78299f6b273d568c8c7 (diff)
parent2ef3c9d861f55253620996a94831a4be31ca6620 (diff)
Merge pull request #3 from RT-Thread/master
sync
Diffstat (limited to 'libcpu/arm/common')
-rw-r--r--libcpu/arm/common/SConscript23
-rw-r--r--libcpu/arm/common/backtrace.c58
2 files changed, 52 insertions, 29 deletions
diff --git a/libcpu/arm/common/SConscript b/libcpu/arm/common/SConscript
new file mode 100644
index 0000000000..9ff30a796b
--- /dev/null
+++ b/libcpu/arm/common/SConscript
@@ -0,0 +1,23 @@
+# RT-Thread building script for component
+
+from building import *
+
+Import('rtconfig')
+
+cwd = GetCurrentDir()
+src = Glob('*.c') + Glob('*.cpp')
+CPPPATH = [cwd]
+
+if rtconfig.PLATFORM == 'armcc':
+ src += Glob('*_rvds.S')
+
+if rtconfig.PLATFORM == 'gcc':
+ src += Glob('*_init.S')
+ src += Glob('*_gcc.S')
+
+if rtconfig.PLATFORM == 'iar':
+ src += Glob('*_iar.S')
+
+group = DefineGroup('cpu', src, depend = [''], CPPPATH = CPPPATH)
+
+Return('group')
diff --git a/libcpu/arm/common/backtrace.c b/libcpu/arm/common/backtrace.c
index f61c69ef01..4fc87b20d1 100644
--- a/libcpu/arm/common/backtrace.c
+++ b/libcpu/arm/common/backtrace.c
@@ -13,51 +13,51 @@
#ifdef __GNUC__
/*
-->High Address,Stack Top
-PC<-----|
-LR |
-IP |
-FP |
-...... |
-PC<-| |
-LR | |
-IP | |
+PC<------|
+LR |
+IP |
+FP |
+...... |
+PC <-| |
+LR | |
+IP | |
FP---|-- |
-...... |
-PC |
-LR |
-IP |
+...... |
+PC |
+LR |
+IP |
FP---
-->Low Address,Stack Bottom
*/
void rt_hw_backtrace(rt_uint32_t *fp, rt_uint32_t thread_entry)
{
- rt_uint32_t i, pc, func_entry;
+ rt_uint32_t i, pc, func_entry;
- pc = *fp;
- rt_kprintf("[0x%x]\n", pc-0xC);
+ pc = *fp;
+ rt_kprintf("[0x%x]\n", pc-0xC);
- for(i=0; i<10; i++)
- {
- fp = (rt_uint32_t *)*(fp - 3);
- pc = *fp ;
+ for(i=0; i<10; i++)
+ {
+ fp = (rt_uint32_t *)*(fp - 3);
+ pc = *fp ;
- func_entry = pc - 0xC;
+ func_entry = pc - 0xC;
- if(func_entry <= 0x30000000) break;
+ if(func_entry <= 0x30000000) break;
- if(func_entry == thread_entry)
- {
- rt_kprintf("EntryPoint:0x%x\n", func_entry);
+ if(func_entry == thread_entry)
+ {
+ rt_kprintf("EntryPoint:0x%x\n", func_entry);
- break;
- }
+ break;
+ }
- rt_kprintf("[0x%x]\n", func_entry);
- }
+ rt_kprintf("[0x%x]\n", func_entry);
+ }
}
#else
void rt_hw_backtrace(rt_uint32_t *fp, rt_uint32_t thread_entry)
{
- /* old compiler implementation */
+ /* old compiler implementation */
}
#endif