阅读164 返回首页    go 阿里云 go 技术社区[云栖]


O0的内核

新手来说, 调试内核c代码经常上下乱跳, 但是O0又无法通过编译, 做了一个实验, 对于所有的c文件, 先尝试O0, 如果错误的话, 用O1来编译, 但是最后有一些符号找不到, 因为O0会多调用一些函数, 在这些问题都解决了之后, 最后居然报出, 某个section太大了, 看来这个问题很复杂

下面是一个简单得方法, 不要一口气把所有的文件都O0, 需要调试哪个, 把具体文件O0就行了

make vmlinux KCFLAGS="-g3 -O1 -Wno-maybe-uninitialized" -j100 CFLAGS_page_alloc.o='-O0 -ftree-ter'

-O0 -ftree-ter就是把优化开到最小, 效果好很多, 不再上下乱跳了

那么这个是怎么找到的呢
就是把O1对应的所有flag都加上, 然后一个个去掉, 看能否通过编译, 获得最小集

gcc -O1 -Q --help=optimizers |grep enable |awk '{print $1}'

最后更新:2017-09-25 12:02:58

  上一篇:go  云生态下的基础架构资源管理利器Terraform
  下一篇:go  数字资产场外交易交易系统开发