Your SlideShare is downloading. ×
NetBSD6.X (i386)が2038年問題に対応、その余波
Upcoming SlideShare
Loading in...5
×

Thanks for flagging this SlideShare!

Oops! An error has occurred.

×
Saving this for later? Get the SlideShare app to save on your phone or tablet. Read anywhere, anytime – even offline.
Text the download link to your phone
Standard text messaging rates apply

NetBSD6.X (i386)が2038年問題に対応、その余波

1,097
views

Published on

NetBSD6.X (i386)が2038年問題に対応しましたが、その余波で clu2c が同OSで動かなくなりました。そのりゆうについて述べます。

NetBSD6.X (i386)が2038年問題に対応しましたが、その余波で clu2c が同OSで動かなくなりました。そのりゆうについて述べます。

Published in: Technology

0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total Views
1,097
On Slideshare
0
From Embeds
0
Number of Embeds
1
Actions
Shares
0
Downloads
2
Comments
0
Likes
0
Embeds 0
No embeds

Report content
Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
No notes for slide

Transcript

  • 1. NetBSD 6.X (i386)が2038年問題に対応その余波東平洋史
  • 2. こんなん動態保存してます
  • 3. clu2c(くるーつーしー)とは何ですか?プログラミング言語CLUの処理系• プログラミング言語CLUで書かれたプログラムをCで書かれたプログラムに変換(CLU to C)• Cで書かれたプログラムを実行形式(a.out)にコンパイルCLUのプログラムCのプログラムclu2cライブラリclulink実行形式a.out
  • 4. clu2cでの戻り値の処理• Cの関数の戻り値– 正常終了か例外発生するかのフラグ• CLUの戻り値– 大域変数に格納retval_area[0]retval_area[1]…オブジェクトintポインタ
  • 5. 整数型とビット数データモデルシステム long longlongポインタILP32 NetBSD 5.X(i386)32 64 32ILP32 NetBSD 6.X(i386)32 64 32LP64 64bit Linux 64 64 64LP64 NetBSD 6.X(amd64)64 64 64
  • 6. clu2cでのint型(CLU)とビット数データモデルシステムint型(CLU)戻り値用大域変数ポインタILP32NetBSD 5.X(i386)32 32 32ILP32NetBSD 6.X(i386)32 32 32LP64 64bit Linux 64 64 64LP64NetBSD 6.X(amd64)64 64 64
  • 7. 稼働確認済みの環境(一部)• Cygwin• Ubuntu 13.04– i386– amd64• OpenSUSE 12.3– 32bit– 64bit• FreeBSD 9.1– i386• NetBSD 5.2– I386– amd64• NetBSD 6.0.1– i386– amd64• NetBSD 6.1– i386– amd64
  • 8. 稼働確認済みの環境(NetBSD)• NetBSD 6.0.1–i386–amd64• NetBSD 6.1–i386–amd64• NetBSD 5.2–I386–amd64
  • 9. NetBSD 6.Xでは64bitでのみ可動
  • 10. その前に
  • 11. 西暦2038年問題(C言語のtime_t型)• 西暦2038年1月19日3時14分7秒(UTC)過ぎにC言語のtime_t型を使ったプログラムが誤作動– 西暦1970年1月1日0時0分0秒(UTC)からの経過秒数で時間を表現– 32ビット符号つきの整数で実装した場合に問題発生– 西暦2038年1月19日3時14分7秒(UTC)⇒西暦1901年12月13日20時45分7(UTC)•2^31 – 1 = 2147483647 の次を -2^31 = -2147483648 と認識0 1111111111111111111111111111111 = 2^31 - 11 0000000000000000000000000000000 = -2^311 1111111111111111111111111111111 = -1先頭のビットが1の時はマイナスの数になる
  • 12. NetBSD 6.X になって…In addition to many other features, NetBSD6.0 includes significant developments invarious ports. Some highlights:• time_t is now a 64-bit quantity on allNetBSD ports. This means that theNetBSD world no longer ends in 2037.<http://www.netbsd.org/releases/formal-6/NetBSD-6.0.html>
  • 13. NetBSD 6.X のtime_t型 は64bit
  • 14. clu2cでのtime_t型intとして扱う使用例get_atime = proc(S: _external_struct_stat) returns(int)% effects Returns the `st_atime member of S.end get_atimeget_mtime = proc(S: _external_struct_stat) returns(int)% effects Returns the `st_mtime member of S.end get_mtime
  • 15. 整数型とtime_t型とビット数データモデルシステム time_tCLUのint戻り値用大域変数ポインタILP32NetBSD 5.X(i386)32 32 32 32ILP32NetBSD 6.X(i386)64 32 32 32LP64 64bit Linux 64 64 64 64LP64NetBSD 6.X(amd64)64 64 64 64
  • 16. 整数型とtime_t型とビット数データモデルシステム time_tCLUのint戻り値用大域変数ポインタILP32NetBSD 6.X(i386)64 32 32 32ココだけ違う
  • 17. というわけで
  • 18. NetBSD 6.X で clu2c が動かない理由• Cの time_t 型が64bitになった– NetBSD 5.X までは 32bit• clu2cはCの time_t 型をCLUの int 型 として扱っていた• 32bit アプリケーションではCLUの int 型を32bitにしていた
  • 19. 解決策(実装作業中)• Cの time_t 型専用の型を作成• CLUの time_t 型の具体表現を32/64bit両対応にCの time_t 型ポインタ32bit or 64bit32bit
  • 20. おしまい(^.^)/~~~

×