アフィリエイト広告を利用しています

2024年01月06日

システム管理: OpenBSD のアップグレード作業 ── 2024 年 1 月 (3)

間が空いたが, OpenBSD ベースシステムのコンパイルエラーについて調べる.

前回, stable のベースシステムのコンパイルを行ったところ, current のベースシステムのコンパイルで起こったエラー:

/usr/src/gnu/usr.bin/clang/libclangAST/../../../llvm/clang/lib/AST/Interp/ByteCodeExprGen.cpp:119:18: error: no member named 'emitCast' in 'clang::interp::ByteCodeExprGen'
return this->emitCast(*FromT, *ToT, CE);
~~~~ ^
/usr/src/gnu/usr.bin/clang/libclangAST/../../../llvm/clang/lib/AST/Interp/ByteCodeExprGen.cpp:1428:16: note: in instantiation of member function 'clang::interp::ByteCodeExprGen::VisitCastExpr' requested here
template class ByteCodeExprGen;
^
. . . .

fatal error: too many errors emitted, stopping now [-ferror-limit=]
20 errors generated.
*** Error 1 in gnu/usr.bin/clang/libclangAST (:67 'ByteCodeExprGen.o': @c++ -O2 -pipe -fno-ret-protector -mno-retpoline -ffunct...)
*** Error 2 in gnu/usr.bin/clang (:48 'all': @for entry in include/llvm/Config libLLVMSupport libLLVMTableGen llvm-tblgen inc...)
*** Error 2 in gnu/usr.bin (:48 'all': @for entry in clang cvs binutils binutils-2.17 perl texinfo; do set -e; if test -d /u...)
*** Error 2 in gnu (:48 'all': @for entry in lib usr.bin usr.sbin; do set -e; if test -d /usr/src/gnu/${entry}.amd64; then ...)
*** Error 2 in . (:48 'all': @for entry in lib include bin libexec sbin usr.bin usr.sbin share games gnu sys; do set -e; if ...)
*** Error 2 in . (Makefile:97 'do-build')
*** Error 2 in /usr/src (Makefile:74 'build')

は発生せずうまく通った.

それが反映されている可能性もあると思い, ベースシステムの current のソースコードをあらためて取得し直してコンパイルしてみる.

$ cd /usr
# mv src src.stable
$ cvs -qd anoncvs@anoncvs.example.org:/cvs checkout -P src
# make obj && make build

stable 版と同様, 以前のエラーは出ない.

しかし, 次のようなエラーが発生した.

error: error opening 'ByteCodeStmtGen.o.d': Permission denied

この ByteCodeStmtGen.o.d というファイルは中間ファイルのようだが, それに対するアクセスパーミッションが無いというのである.
調べてみると, この部分に対する make がオーナー build で実行されているにも拘らず, ByteCodeStmtGen.o.d のオーナーは root になっている. おそらくこれが原因だろうと思う.
同じディレクトリーに Interp.o.d というファイルがあるが, これもオーナーは root になっている.
それぞれのファイルのオーナーを build に変更する.

# cd /usr/obj/gnu/usr.bin/clang/libclangAST
# chown build ByteCodeStmtGen.o.d Interp.o.d

中間ファイルは, そのままもう一度 make build を走らせると削除され, 作り直されてしまうので, /usr/src/Makefile に次のような変更を加えてそれを防ぐ.

$ diff Makefile.orig Makefile
86,87c86,87
< exec ${MAKE} cleandir
< exec ${MAKE} includes
---
> # exec ${MAKE} cleandir
> # exec ${MAKE} includes

こうしておいて make build を実行する.
ある程度コンパイルは進んだが, 今度は次のようなエラーが発生した.

In file included from /usr/src/gnu/usr.bin/clang/lldb-server/../../../llvm/lldb/tools/lldb-server/lldb-gdbserver.cpp:289:
/usr/src/gnu/usr.bin/clang/lldb-server/obj/LLGSOptions.inc:14:1: error: no matching function for call to 'size'
PREFIX(prefix_0, {nullptr})
^~~~~~~~~~~~~~~~~~~~~~~~~~~
/usr/src/gnu/usr.bin/clang/lldb-server/../../../llvm/lldb/tools/lldb-server/lldb-gdbserver.cpp:288:20: note: expanded from macro 'PREFIX'
NAME##_init, std::size(NAME##_init) - 1);
^~~~~~~~~
/usr/include/c++/v1/__iterator/size.h:30:16: note: candidate template ignored: substitution failure [with _Cont = llvm::StringLiteral[]]: member reference base type 'const llvm::StringLiteral[]' is not a structure or union
constexpr auto size(const _Cont& __c)
. . . .

12 errors generated.
*** Error 1 in gnu/usr.bin/clang/lldb-server (:124 'lldb-gdbserver.o')
*** Error 2 in gnu/usr.bin/clang (:48 'all': @for entry in include/llvm/Config libLLVMSupport libLLVMTableGen llvm-tblgen inc...)
*** Error 2 in gnu/usr.bin (:48 'all': @for entry in clang cvs binutils binutils-2.17 perl texinfo; do set -e; if test -d /u...)
*** Error 2 in gnu (:48 'all': @for entry in lib usr.bin usr.sbin; do set -e; if test -d /usr/src/gnu/${entry}.amd64; then ...)
*** Error 2 in . (:48 'all': @for entry in lib include bin libexec sbin usr.bin usr.sbin share games gnu sys; do set -e; if ...)
*** Error 2 in . (Makefile:97 'do-build')
*** Error 2 in /usr/src (Makefile:74 'build')

つまり, 中間ファイル /usr/src/gnu/usr.bin/clang/lldb-server/obj/LLGSOptions.inc というファイル内の記述:

PREFIX(prefix_0, {nullptr})

における型 nullptr_t を持つ nullptr という変数を型 const llvm::StringLiteral に変換できないというものである.

同様のエラーが出ている箇所が他にもある.
いろいろ試行錯誤した結果, 汚いやり方だが次のような変更を行うことでコンパイルは通るようになった.

# cd /usr/src/gnu/llvm/lldb/tools/lldb-server
# diff lldb-gdbserver.cpp.orig lldb-gdbserver.cpp
292c292
< static constexpr opt::OptTable::Info InfoTable[] = {
---
> static opt::OptTable::Info InfoTable[] = {
# cd /usr/obj/gnu/usr.bin/clang/lldb-server
# diff LLGSOptions.inc.orig LLGSOptions.inc
14,17c14,17
< PREFIX(prefix_0, {nullptr})
< PREFIX(prefix_2, {"-" COMMA nullptr})
< PREFIX(prefix_3, {"--" COMMA nullptr})
< PREFIX(prefix_1, {"--" COMMA "-" COMMA nullptr})
---
> PREFIX(prefix_0, {""})
> PREFIX(prefix_2, {"-" COMMA ""})
> PREFIX(prefix_3, {"--" COMMA ""})
> PREFIX(prefix_1, {"--" COMMA "-" COMMA ""})
25c25
< OPTION(nullptr, "connection", grp_connect, Group, INVALID, INVALID, nullptr, 0, 0,
---
> OPTION({""}, "connection", grp_connect, Group, INVALID, INVALID, nullptr, 0, 0,
27c27
< OPTION(nullptr, "general options", grp_general, Group, INVALID, INVALID, nullptr, 0, 0,
---
> OPTION({""}, "general options", grp_general, Group, INVALID, INVALID, "", 0, 0,
29c29
< OPTION(nullptr, "target selection", grp_target, Group, INVALID, INVALID, nullptr, 0, 0,
---
> OPTION({""}, "target selection", grp_target, Group, INVALID, INVALID, nullptr, 0, 0,

ベースシステムのコンパイルとインストールができたので, マージ作業とデバイスファイルの作成を行う.

# sysmerge
# cd /dev/ && ./MAKEDEV all

これで OpenBSD のアップグレード作業がひとまず終了する.
この記事へのコメント
コメントを書く

お名前:

メールアドレス:


ホームページアドレス:

コメント:

この記事へのトラックバックURL
https://fanblogs.jp/tb/12375303

この記事へのトラックバック
ファン
検索
<< 2024年11月 >>
          1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
最新記事
最新コメント
眼科の定期検査 〜 散歩 by コトタマ (02/15)
眼科の定期検査 by 三文字寄れば文殊のヒフミヨ (09/21)
本を読んで過ごす by 底彦 (12/13)
本を読んで過ごす by ねこ (12/12)
数学の計算をする by 底彦 (12/04)
タグクラウド
カテゴリアーカイブ
仕事(59)
社会復帰(22)
(44)
コンピューター(211)
(1448)
借金(8)
勉強(13)
(13)
数学(97)
運動(8)
日常生活(1404)
(204)
健康(38)
読書(21)
プロフィール

ブログランキング・にほんブログ村へ
にほんブログ村
にほんブログ村 メンタルヘルスブログ うつ病(鬱病)へ
にほんブログ村
にほんブログ村 科学ブログ 数学へ
にほんブログ村
にほんブログ村 IT技術ブログ プログラム・プログラマーへ
にほんブログ村