源码基于:Linux 5.4
0. 前言
在之前的博文《Linux内核oops panic简析》中简单分析Linux 内核异常处理的流程。本文在此基础上总结下内存管理系统中(针对arm64架构)可能出现的BUG 或 oops 或panic,并对这些情况进行剖析。
因为涉及到的BUG 场景不一定相同,本篇博文应该是一个长期整理的过程。
1. BUG存在的形式
1.1 BUILD_BUG()
1.2 BUILD_BUG_ON()
include/linux/build_bug.h
#define BUILD_BUG() BUILD_BUG_ON_MSG(1, "BUILD_BUG failed")
#define BUILD_BUG_ON(condition) \
BUILD_BUG_ON_MSG(condition, "BUILD_BUG_ON failed: " #condition)
#define BUILD_BUG_ON_MSG(cond, msg) compiletime_assert(!(cond), msg)
这个是编译时候就需要检验的,如果condition 为 false,会停掉编译,并发出error msg 打印。
对于这类编译时需要检查的问题,本文暂时不重点分析。