Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
OpenHarmony
Kernel Liteos A
提交
14ed17ca
K
Kernel Liteos A
项目概览
OpenHarmony
/
Kernel Liteos A
1 年多 前同步成功
通知
460
Star
414
Fork
55
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
4
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
K
Kernel Liteos A
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
4
Issue
4
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
提交
14ed17ca
编写于
9月 28, 2020
作者:
L
l00517597
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Description:Fix the offset calculating of pc and lr in elf file.
Reviewed-by:huangjieliang zhushengle
上级
aa407d37
变更
1
隐藏空白更改
内联
并排
Showing
1 changed file
with
36 addition
and
2 deletion
+36
-2
arch/arm/arm/src/los_exc.c
arch/arm/arm/src/los_exc.c
+36
-2
未找到文件。
arch/arm/arm/src/los_exc.c
浏览文件 @
14ed17ca
...
...
@@ -55,6 +55,7 @@
#include "los_vm_phys.h"
#include "los_vm_fault.h"
#include "los_vm_common.h"
#include "los_load_elf.h"
#include "arm.h"
#include "los_bitmap.h"
#include "los_process_pri.h"
...
...
@@ -255,6 +256,39 @@ STATIC const CHAR *g_excTypeString[] = {
"irq"
};
STATIC
VADDR_T
OsGetTextRegionBase
(
LosVmMapRegion
*
region
,
LosProcessCB
*
runProcess
)
{
struct
file
*
curFilep
=
NULL
;
struct
file
*
lastFilep
=
NULL
;
LosVmMapRegion
*
curRegion
=
NULL
;
LosVmMapRegion
*
lastRegion
=
NULL
;
if
((
region
==
NULL
)
||
(
runProcess
==
NULL
))
{
return
0
;
}
if
(
!
LOS_IsRegionFileValid
(
region
))
{
return
region
->
range
.
base
;
}
lastRegion
=
region
;
do
{
curRegion
=
lastRegion
;
lastRegion
=
LOS_RegionFind
(
runProcess
->
vmSpace
,
curRegion
->
range
.
base
-
1
);
if
((
lastRegion
==
NULL
)
||
!
LOS_IsRegionFileValid
(
lastRegion
))
{
goto
DONE
;
}
curFilep
=
curRegion
->
unTypeData
.
rf
.
file
;
lastFilep
=
lastRegion
->
unTypeData
.
rf
.
file
;
}
while
(
!
strcmp
(
curFilep
->
f_path
,
lastFilep
->
f_path
));
DONE:
if
(
curRegion
->
range
.
base
==
EXEC_MMAP_BASE
)
{
return
0
;
}
return
curRegion
->
range
.
base
;
}
STATIC
VOID
OsExcSysInfo
(
UINT32
excType
,
const
ExcContext
*
excBufAddr
)
{
LosTaskCB
*
runTask
=
OsCurrTaskGet
();
...
...
@@ -289,7 +323,7 @@ STATIC VOID OsExcSysInfo(UINT32 excType, const ExcContext *excBufAddr)
region
=
LOS_RegionFind
(
runProcess
->
vmSpace
,
(
VADDR_T
)
excBufAddr
->
PC
);
if
(
region
!=
NULL
)
{
PrintExcInfo
(
"in %s ---> 0x%x"
,
OsGetRegionNameOrFilePath
(
region
),
(
VADDR_T
)
excBufAddr
->
PC
-
region
->
range
.
base
);
(
VADDR_T
)
excBufAddr
->
PC
-
OsGetTextRegionBase
(
region
,
runProcess
)
);
}
}
...
...
@@ -297,7 +331,7 @@ STATIC VOID OsExcSysInfo(UINT32 excType, const ExcContext *excBufAddr)
region
=
LOS_RegionFind
(
runProcess
->
vmSpace
,
(
VADDR_T
)
excBufAddr
->
ULR
);
if
(
region
!=
NULL
)
{
PrintExcInfo
(
"in %s ---> 0x%x"
,
OsGetRegionNameOrFilePath
(
region
),
(
VADDR_T
)
excBufAddr
->
ULR
-
region
->
range
.
base
);
(
VADDR_T
)
excBufAddr
->
ULR
-
OsGetTextRegionBase
(
region
,
runProcess
)
);
}
PrintExcInfo
(
"
\n
usp = 0x%x"
,
excBufAddr
->
USP
);
}
else
{
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录