编译内核需要用这个特殊的binutil 补丁 这个补丁是基于2.16.x的, 等一会儿把它移植到 2.18.50
补丁对binutils增加了一个参数-mfix-gs2f-kernel
在内核源码的menuconfig中打开 [Machine selection/ fix random instruction fetch's side effect to device for loongson cpu(special compiler)]
在编译内核时就会启用这个参数
只有打过这个补丁, 才可以使用 -mfix-gs2f-kernel 参数编译内核.这个访问地址不会在一般软件中出现, 只会在内核中出现..
原因应该在于loongson的分支预测.跟amd5536之间
张福新老师是这么解释的
"通过修改binutils在jr/jalr前把指令地址限制到
0xffffffffcfffffff,保证一定不会出现 bfd0xxxx从而避免发出非预期IO
南桥挂掉)"
只有在压力测试下,才会暴露这个bug,
附件1是对binutil-2.16.x的补丁,
附件2是debian下的binutil-2.18.50-20080530+的dpatch补丁。
放在binutils-2.18.50-20080530/debian/patches下,并修改此目录下的索引文件。
附件 | 大小 |
---|---|
binutils-2.16.jr.jalr.patch.tgz | 2.05 千字节 |
999_loongson2f_amd5536_jr_jalr.dpatch.gz | 2.62 千字节 |