Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

画面のスクロールによるSIGABRT(OpenBSD) #17

Open
jg1uaa opened this issue Apr 16, 2024 · 0 comments
Open

画面のスクロールによるSIGABRT(OpenBSD) #17

jg1uaa opened this issue Apr 16, 2024 · 0 comments

Comments

@jg1uaa
Copy link
Contributor

jg1uaa commented Apr 16, 2024

OpenBSD-7.5/amd64上でIchigoJam-BASICのconsole版を動作させ、filesコマンドを何回か実行するとSIGABRTにより動作が必ず停止します。(追記:filesコマンドの実行に限らずスクロールを伴う表示を幾度か行うと必ずSIGABRTが発生するため、実用にならない状態です。:追記ここまで)

これはscreen.hのscreen_scroll()のcase 30:にあるmemcpy4(vram, vram + SCREEN_W, SCREEN_W * (SCREEN_H - 1)); // okにより引き起こされており、/var/log/messageにはApr 16 21:54:14 framboise IchigoJam_BASIC: backwards memcpyというメッセージが残っていました。

他環境については知りませんが、OpenBSDは重なった領域に対するmemcpy()を認めていないため、memcpy()ではなくmemmove()を使う必要があります。

システム標準ライブラリのmemcpy()との衝突を回避するためにNO_MEMCPYを定義してichigojam-stddef.h内蔵のmemcpy()を回避しているようですが、むしろこちらを積極的に使うよう以下の修正を行うのは如何でしょうか。

・ichigojam_stddef.h内蔵のmemcpy()はmemcopy()とする
・memcpy()は使用禁止(全てmemcopy()の呼び出しとする、ext_iot.hは修正が必要)
・NO_MEMCPYは廃止

もちろん、LPC1114版がnewlib由来のmemcpy()を使っていたり速度を重視する場合は、別のアプローチが必要です。

@jg1uaa jg1uaa changed the title filesコマンドによるSIGABRT(OpenBSD) 画面のスクロールによるSIGABRT(OpenBSD) Apr 19, 2024
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant