linux中arm64体系结构中WARN_ON()是如何实现的
时间: 2024-05-15 08:14:04 浏览: 251
在Linux内核中,WARN_ON()是一个用于发出警告的宏定义。在ARM64架构中,该宏定义的实现是通过调用内核中的__warn函数来实现的。
具体来说,在ARM64架构中,WARN_ON()宏定义的代码如下:
```
#define WARN_ON(condition) ({ \
int __ret_warn_on = !!(condition); \
if (__ret_warn_on) \
__warn("WARNING: at %s:%d %s()\n", \
__FILE__, __LINE__, __func__); \
unlikely(__ret_warn_on); \
})
```
这里的__warn函数实现了警告信息的输出。在ARM64架构中,__warn函数的实现位于arch/arm64/kernel/debug-monitors.c文件中,其代码如下:
```
void __warn(const char *fmt, ...)
{
va_list args;
va_start(args, fmt);
vprintk(fmt, args);
va_end(args);
}
```
该函数使用了vprintk函数来输出警告信息。
需要注意的是,WARN_ON()宏定义实际上是使用了一个带有返回值的语句表达式。该语句表达式首先计算condition表达式的值,并将其转换为bool类型。然后,如果condition表达式的值为true,就调用__warn函数输出警告信息。最后,该语句表达式返回condition表达式的值。
由于WARN_ON()宏定义使用了unlikely()函数,因此编译器会将其编译成一个不太可能执行的分支,以减少代码的执行时间。
阅读全文
相关推荐
![-](https://img-home.csdnimg.cn/images/20241231044955.png)
![-](https://img-home.csdnimg.cn/images/20241231044930.png)
![-](https://img-home.csdnimg.cn/images/20241231044930.png)
![pdf](https://img-home.csdnimg.cn/images/20241231044930.png)
![zip](https://img-home.csdnimg.cn/images/20241231045053.png)
![whl](https://img-home.csdnimg.cn/images/20250102104920.png)
![zip](https://img-home.csdnimg.cn/images/20241231045053.png)
![zip](https://img-home.csdnimg.cn/images/20241231045053.png)
![rar](https://img-home.csdnimg.cn/images/20241231044955.png)
![gz](https://img-home.csdnimg.cn/images/20210720083447.png)
![rar](https://img-home.csdnimg.cn/images/20241231044955.png)
![rar](https://img-home.csdnimg.cn/images/20241231044955.png)
![rar](https://img-home.csdnimg.cn/images/20241231044955.png)