第27章 コンパイラーおよびツール
GDB は 64 ビット ARM アーキテクチャー上で非整列ウォッチポイントヒットを登録します
以前は、
GDB
デバッガーは、64 ビット ARM アーキテクチャー上の watch、rwatch、および awatch GDB
コマンドによって使用される、調整されていないハードウェアウォッチポイントに対する限定的なサポートのみを提供していました。その結果、そのようなシステムで実行されている GDB
はいくつかのウォッチポイントヒットを登録できず、その後デバッグされたプログラムを停止しませんでした。
GDB
は、この状況に対処するために拡張されました。その結果、非整列のものも含め、64 ビット ARM アーキテクチャー上のあらゆるハードウェアウォッチポイントを正しく処理できます。(BZ#1347993)
IBM Z アーキテクチャー上の GCC での Retpoline のサポート
この更新により、IBM Z アーキテクチャー上の GNU Compiler Collection (GCC) での retpoline 生成のサポートが追加されました。Retpolines は、CVE-2017-5715 で説明されている Spectre Variant 2 攻撃を軽減するオーバーヘッドを削減するためにカーネルによって使用される手法です。(BZ#1552021)
binutils リンカーは、絶対アドレスに対する再配置が発生したときに予期せず終了しなくなりました。
以前は、binutils パッケージのリンカーは、絶対アドレスに対する再配置を適切に処理できませんでした。結果として、このような再配置が発生すると、リンカーのセグメンテーション違反が発生しました。
リンカは絶対アドレスに対する再配置を処理できるように拡張されており、問題は発生しなくなりました。(BZ#1557346)
認証情報を GNOME キーリングに保存するヘルパーが git-gnome-keyring サブパッケージで利用できるようになりました
以前は、認証情報を GNOME キーリングに保存するヘルパーが
git
パッケージの一部であったため、git
をインストールすると、GNOME コンポーネントが依存関係として自動的にインストールされました。この更新により、ヘルパーは別の git-gnome-keyring サブパッケージに移動されました。その結果、git
インストールのサイズが小さくなります。
サブパッケージをインストールするには、以下を行います。
# yum install git-gnome-keyring
(BZ#1284081)
git instaweb
は追加の設定なしで動作し、別のサブパッケージで利用できるようになりました。
以前は、
git instaweb
コマンドには Web サーバーが必要で、デフォルトのインストールでは機能しませんでした。この更新により、git instaweb
は別の git-instaweb サブパッケージに移動されました。このサブパッケージは Apache
Web サーバーに依存し、Web サーバーを自動的に使用するように設定されます。その結果、git-instaweb が インストールされている場合、追加の設定を行わなくても git instaweb
が動作するようになりました。サブパッケージをインストールするには、以下を行います。
# yum install git-instaweb
(BZ#1213059)
man
ユーティリティーは、深夜以降に gimme gimme gimme を出力しなくなりました。
この更新より前は、現地時間の 00:30 に標準エラー出力に gimme gimme gimme を出力するイースターエッグが
man
ユーティリティーにありました。その結果、特定の状況下では、予期しない出力が自動化ツールの誤解を招く可能性があります。この更新により、イースターエッグが削除され、上記の問題は発生しなくなります。(BZ#1515352)
sysctl
で、カーネルパラメーターをリセットするための tuned
が可能になりました
この更新より前は、
sysctl
のバグにより、カーネルパラメーターをデフォルト値に設定できませんでした。その結果、tuned
ユーティリティーは sysctl
を使用してデフォルトのカーネルパラメーターを設定できませんでした。この更新により、sysctl
はカーネルパラメーターをリセットするためにデフォルト値を受け入れます。その結果、tuned
は期待どおりに機能し、カーネルパラメーターをデフォルト値にリセットできます。(BZ#1507356)
ncat は
UDP モードで環境変数を正しく設定するようになりました。
以前は、
ncat
ユーティリティーはユーザーデータグラムプロトコル (UDP) 接続の環境変数を適切に設定しませんでした。その結果、ユーザーのスクリプトは UDP モードで失敗しました。この更新により、いくつかの内部値が設定され、環境変数が適切に設定されるようになりました。(BZ#1573411)
ncat
は、すべてのプロキシータイプに対してデフォルトの HTTP ポートを使用しなくなりました
以前は、
Socks4
や Socks5
などの別のタイプのプロキシーが指定されている場合でも、HTTP プロキシーのデフォルトポートが使用されていました。その結果、ncat
ユーティリティーは、デフォルト以外のポートを介してプロキシータイプに接続しようとしましたが、失敗しました。この更新では、HTTP プロキシーポートがデフォルトで使用されないようにコードが修正されます。その結果、ncat
はプロキシータイプに応じて適切なデフォルトポートを設定するようになりました。(BZ#1546246)
JPEG 2000 イメージのデコードと変換が正しく動作するようになりました。
以前は、
openjpeg
ライブラリーのバグにより、JPEG 2000 イメージのデコードと変換が正しく動作しませんでした。この更新により、基礎となるソースコードが修正され、JPEG 2000 イメージのデコードと変換が期待どおりに動作するようになりました。(BZ#1553235)
strip
は、新しい BFD
ライブラリーバージョンを使用するツールで構築されたバイナリーファイルを不正に作成しなくなりました
以前は、ファイルが元々、
strip
よりも新しいバージョンの BFD
ライブラリーを使用するツールによって作成された場合、strip
ツールは無効なバイナリーファイルを作成しました。その結果、生成されたバイナリーファイルの実行が失敗し、解決できない再配置に関するエラーメッセージが生成されました。BFD
は、将来の機能を含むコードを損傷するのではなく、将来の機能を認識できない状況を報告するように変更されました。その結果、この状況では strip
はエラーメッセージを生成し、中止されるようになりました。(BZ#1553842)
プロセス共有の堅牢なミューテックスのバグを修正
以前は、POSIX スレッドの堅牢なミューテックスの実装のバグにより、そのようなミューテックスが回復できなくなる可能性がありました。その結果、インターフェイスのユーザーは、プロセスが終了することは確認できますが、ミューテックスを回復しようとした別のプロセスに
EOWNERDEAD
を返すことはできませんでした。この更新では、スレッドライブラリーと、堅牢なミューテックスのすべての既知の修正可能なバグが修正されます。(BZ#1401665)
別のコンテナー内のプロセスにアタッチすると、GDB サーバーが正しく動作しない
状況によっては、GDB デバッガーがコンテナー内で実行されている GDB サーバーに接続できず、コンテナーのデバッグが不可能ではないにしても、問題が発生していました。socketpair not available on this host が返されるバグが修正され、GDB と GDBserver の両方がコンテナーにデバッグできるようになりました。(BZ#1578378)
operf
は、クラッシュせずに終了するプロセスのカーネルイベントサンプルを処理するようになりました。
以前は、Red Hat Enterprise Linux カーネル 4.14 は、終了プロセスのパフォーマンスイベントサンプルで返される PID 値を -1 に変更しました。その結果、カーネル perf イベントサブシステムによる -1 の使用は、
operf
によるフラグとしての -1 の内部使用と競合しました。このフラグは、プロセス情報を取得するために初期化作業が必要であることを示すために使用されました。ただし、その情報を取得しようとすると、operf
がクラッシュしてしまいます。
この更新により、プロセス情報にフラグを立てるために別の値を使用するように
oprofile
コードが調整され、その結果、プロセスの終了に使用される -1 と競合しなくなります。(BZ#1561103)
SystemTap
は完全なカーネルバックトレースを提供します
アドレス空間レイアウトのランダム化 (ASLR) に関連するカーネルの変更により、
SystemTap
ツールによって収集されたカーネルバックトレースが不完全でした。SystemTap
は、この状況に対処するために拡張されました。その結果、SystemTap
は完全なカーネルバックトレースを提供します。(BZ#1567356)
ドキュメントによると、fallocate()
フラグが再び利用可能になりました
以前は、glibc パッケージの
fcntl.h
ヘッダーファイルには、fallocate ()
関数のフラグが含まれていませんでした。その結果、マニュアルページに従って fallocate ()
を使用するプログラムはコンパイルされませんでした。欠落していたフラグは、<linux/falloc.h>
ファイルを間接的に組み込むことによって追加され、そのようなプログラムのコンパイルが再び可能になりました。(BZ#1476120)
nscd
ネットグループキャッシュが有効期限を適切に処理する
以前は、
nscd
サービスを使用してネットグループの LDAP リクエストをキャッシュすると、キャッシュ内の一部のエントリーが正しく期限切れにならない場合がありました。その結果、nscd
キャッシュはサービスデータベース (LDAP など) を正しく反映しませんでした。キャッシュの有効期限コードが修正され、ネットグループの変更が再びキャッシュに正しく反映されます。(BZ#1505647)
llvm-private は、より新しいバージョンの libstdc++
ライブラリーと一緒に使用してもクラッシュしなくなりました
以前は、グラフィックスレンダリング用のドライバーを提供する llvm-private パッケージ内の実行可能ファイルは、
libstdc++
ライブラリーに対して静的にリンクされていました。その結果、GLX、Mesa llvmpipe
レンダラー、および異なる libstdc++
バージョンを使用してプログラムを実行すると、無効なポインターに関するメッセージが表示されて予期せず終了します。llvm-private が変更され、libstdc++
に対して静的にリンクされなくなりました。その結果、このドライバーを使用するプログラムは、この状況でも予期せず終了しなくなりました。(BZ#1417663)