我正在尝试为68000处理器构建温度控制应用程序。我目前正在使用GCC 8.2.0。我正在使用-msoft-float标志进行编译。但是,浮点库例程似乎已损坏。示例:
exampleForm: FormGroup;
checked: boolean;
ngOnInit() {
this.exampleForm = new FormGroup({
'second': new FormControl('', [this.validateIfChecked()]),
'first': new FormControl('example', [Validators.required])
});
}
validateIfChecked(): ValidatorFn {
return (control: AbstractControl): {
[key: string]: any
} | null => {
if (this.checked) {
return control.value ? null : {
'err': true
};
}
return null;
}
}
有人可以解释为什么生成此代码或此处发生了什么吗? 68000不会跳转到奇数地址。
更新 我一直在研究这个问题,并且似乎在链接期间注入了问题。从libgcc.a转储此函数的代码将显示以下内容:
'000174f4 <__ltdf2>:'
'174f4: 4e56 0000 linkw %fp,#0'
'174f8: 4878 0001 pea 1 <ADD>'
'174fc: 2f2e 0014 movel %fp@(20),%sp@-'
'17500: 2f2e 0010 movel %fp@(16),%sp@-'
'17504: 2f2e 000c movel %fp@(12),%sp@-'
'17508: 2f2e 0008 movel %fp@(8),%sp@-'
'1750c: 61ff bsrs 1750d <__ltdf2+0x19>'
'1750e: ffff .short 0xffff'
'17510: fd94 .short 0xfd94'
'17512: 4e5e unlk %fp'
'17514: 4e75 rts'
'17516: 4e71 nop'
因此,链接器必须尝试填写分支偏移并弄乱。由于此功能的来源是一串宏,因此我不确定它真正想跳转到的位置。