作者: BigLoser 访问次数: 276 创建时间: 2022-12-08 21:39:01 更新时间: 2024-04-27 01:59:38
在下周 Linux 6.2 合并窗口打开之前的早期拉取请求中,有一项更改是默认为 Linux 内核构建启用 “-funsigned-char”,这意味着如果没有指定,“-funsigned-char” 编译器标志会将所有 “char” 字符类型设为无符号。
C 的 char 字符数据类型分为 signed char 和 unsigned char,其中 unsigned char 占用内存的所有 8 位并且没有符号位。
char 在标准中是 unsigned,但不同的 CPU 体系结构 / 编译器能将其实现为 signed,也可以实现为 unsigned 。但此更改合并后,对于使用普通 “char” 类型编写的内核代码, 将普遍将默认 char 类型视为 unsigned 。
WireGuard 首席开发人员 Jason Donenfeld 领导了 Linux 内核的 -funsigned-char 转换工作。早在 Linux 6.1 版本,Jason Donenfeld 在 ARM 上编译驱动程序时触发了构建错误,当时驱动程序假定裸 char
类型已签名,但 ARM 将其视为未签名, C 标准则表示它依赖于体系结构。
发现这个 Char 类型混乱的问题后,他提出了 “treat char as always unsigned” 构建请求。并为 Linux 6.2 发送了一个默认启用 unsigned char 行为的早期 PR ,以及针对内核代码对 char 类型的符号性做出不同假设的各种内核修复。
感兴趣的朋友可以在构建请求和早期 PR 邮件中查阅更多详情。
语言: zh-CN
翻译人员:
原作者:
转载地址:
源网址: https://www.oschina.net/news/220977/linux-6-2-funsigned-char
版权: 本站所有内容, 版权归原作者所有。发表原创内容将会获得现金奖励, 并且随着时间倍数增长, 请了解我们的内容奖励计划。