求解一个奇怪的现象

[复制链接]
查看11 | 回复7 | 2021-1-27 06:30:17 | 显示全部楼层 |阅读模式
这个问题是在一个显卡驱动中发现的,求高手帮忙,现在问题抽象如下:
voida()
{
...
b();
...
}
extern"c"voidb()
{
...
}
最初的问题是某个操作会导致系统hang,然后经过测试,发现在b函数中的任何地方(包括函数末尾)调用一个print或者一个简单的调用,都能解决这个问题。然而在a函数中b刚返回后接上任何相同语句却无效!
线索与尝试:
(1)为了架构清晰,显卡驱动分成不少模块,a所在的模块是用c语言写的,负责核心控制,b所在的模块式c++写的,负责地址映射,这里的externc是为了方便a能调用b
(2)尝试过换gcc版本,试过3.3.3和4.2等,似乎都不起作用
(3)在b中的末尾加入任何调用a所在模块的函数(即使该函数几乎什么都不做),都能解决这个问题。然而在b的末尾加延时或一些简单语句却不能解决这个问题。并且在返回到a后调用任何的相同语句不能解决!
各位大牛有没有什么思路或见解么?还需要什么线索我会尽快提供,谢谢!
分 -->
回复

使用道具 举报

千问 | 2021-1-27 06:30:17 | 显示全部楼层
理论上不会出现这现象啊,
回复

使用道具 举报

千问 | 2021-1-27 06:30:17 | 显示全部楼层
所以觉得很奇怪,出现这种情况还有什么可能么?
回复

使用道具 举报

千问 | 2021-1-27 06:30:17 | 显示全部楼层
是否是开了优化的关系。。。。。
回复

使用道具 举报

千问 | 2021-1-27 06:30:17 | 显示全部楼层
试过去除优化(就是加上Od),还是没有效果
回复

使用道具 举报

千问 | 2021-1-27 06:30:17 | 显示全部楼层
跟编译没事,跟链接有关系
回复

使用道具 举报

千问 | 2021-1-27 06:30:17 | 显示全部楼层
B负责地址映射?跟这个有关吗
回复

使用道具 举报

千问 | 2021-1-27 06:30:17 | 显示全部楼层
验证下来是和链接有关系,现在要解决这个问题有没有什么不升gcc解决的,只该链接参数什么的workaround方法么?
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行