Open tsutsui opened 1 month ago
https://gnats.netbsd.org/4265 にあるが、NetBSD/hp300 の 68040 で invalid な F line 命令を実行しようとするとハングするという問題が大昔からある。
手元のテストプログラムだと以下:
#include <malloc.h> #include <stdio.h> #include <string.h> #define BUFSIZE 1024 void (*bomb)(void); static const unsigned char a[] = { //0xf2, 0x43, 0xf4, 0x7a, // silent hard hang //0xf2, 0x43, 0xf5, 0x18, // silent hard hang //0xf2, 0x44, 0xf4, 0x7a, // silent hard hang //0xf2, 0x44, 0xf0, 0x00, // silent hard hang //0xf2, 0x44, 0xf0, 0x00, 0x4e, 0x75 // 0xf2, 0x44, 0x00, 0x00, // SIGSEGV //0xf2, 0x43, 0x4e, 0x75, // SIGSEGV //0xf2, 0x43, 0x4e, 0x7b, 0x00, 0x02, // SIGSEGV //0xf6, 0x32, 0xf5, 0x18, // SIGILL }; int main(int argc, char *argv[]) { unsigned char *p; p = malloc(BUFSIZE); memset(p, 0, BUFSIZE); memcpy(p, a, sizeof(a)); bomb = (void *)p; printf("address = %p\n", p); (*bomb)(); return 0; }
この問題について、PRにあるとおり「XC68040 では再現するが MC68040 では再現しない」という仮説がある。
https://www.nxp.com/docs/en/errata/MC68040DE_D.txt のエラッタを確認するところからだが、まずは MC68040 を入手してあるので HP9000/380 とかに挿してみて XC68040 の HP300/382 との差異を確認するところから。
https://gnats.netbsd.org/4265 にあるが、NetBSD/hp300 の 68040 で invalid な F line 命令を実行しようとするとハングするという問題が大昔からある。
手元のテストプログラムだと以下:
この問題について、PRにあるとおり「XC68040 では再現するが MC68040 では再現しない」という仮説がある。
https://www.nxp.com/docs/en/errata/MC68040DE_D.txt のエラッタを確認するところからだが、まずは MC68040 を入手してあるので HP9000/380 とかに挿してみて XC68040 の HP300/382 との差異を確認するところから。