A.2. binutils の変更点

Red Hat Developer Toolset 10.0 には binutils 2.35 が同梱されています。

以下の機能は、Red Hat Developer Toolset の以前のリリース以降に追加または変更されています。

アセンブラー

  • .symver ディレクティブは、元のシンボルの可視性を更新し、別のバージョンが付いたシンボルを 1 つの元の記号に割り当てるように拡張されました。
  • Intel SERIALIZE および TSXLDTRK 命令に対応するようになりました。
  • CVE-2020-0551 を軽減するために、-mlfence-after-load=-mlfence-before-indirect-branch=-mlfence-before-ret= オプションが x86 の assembler に追加されました。
  • この出力が生成されている場合は、DWARF 5 デバッグ出力を生成するためにアセンブラーに --gdwarf-5 オプションが追加されました。また、バージョン 5 .debug_line セクションを生成できるようになりました。
  • -malign-branch-boundary=NUM-malign-branch=TYPE[+TYPE…​]-malign-branch-prefix-size=NUM、および -mbranches-within-32B-boundaries オプションが追加され、セグメントプレフィックスまたは NOP 命令と固定境界内のブランチを合わせます。
  • --gdwarf-cie-version コマンドラインフラグが追加されました。このフラグは、アセンブラーが作成する DWARF CIE (Common Information Entries) のバージョンを制御します。

リンカー

  • シンボルを動的にするために、コマンドラインオプション --export-dynamic-symbol および --export-dynamic-symbol-list が追加されました。
  • -Map=filename コマンドラインオプションが拡張されました。filename がディレクトリーの場合は、リンカーにより、ファイル filename/output-filename.map ファイルが作成されます。
  • DT_TEXTREL が位置独立実行可能ファイルまたは共有オブジェクトで設定されていることを警告するために、--warn-textrel コマンドラインオプションが追加されました。
  • コマンドラインオプション --enable-non-contiguous-regions および --enable- non-contiguous-regions-warnings が追加されました。
  • リンカースクリプトの INPUT() および GROUP() ディレクティブの相対パス名が、他の検索パスの前にリンカースクリプトのディレクトリーに関連して検索されるようになりました。
  • -z start-stop-visibility=…​ コマンドラインオプションが追加され、synthetic __start_SECNAME__stop_SECNAME の記号の表示を制御できます。
  • コンパイラー -M および -MP オプションが書き込んだファイルなど、リンカーが参照する入力ファイルを一覧表示する Make 形式の依存関係ファイルを書き込むために、--dependency-file コマンドラインオプションが追加されました。
  • LOAD セグメントのエラーで対応していない PHDR セグメントld チェックがより効果的になりました。このチェックは、以前のバージョンの ld が正しく許可されていないケースをキャッチできるようになりました。このエラーが表示された場合は、正しくないリンカースクリプトでリンクしているか、構築しているバイナリーが動的ローダーによってロードされることが意図されていないことが考えられます。後者の場合は、--no-dynamic-linker オプションが適切です。
  • --no-print-map-discarded コマンドラインオプションが追加されました。

その他のバイナリーユーティリティー

  • readelf ツールは、ワイドモードが有効になっていない場合に、シンボル名を表示するようになりました。名前が長すぎると、短縮され、最後の 5 文字が「[…​]」に置き換えられます。-T または --silent-truncation オプションを使用すると、以前の動作を復元できます。
  • readelf ツールには、-L または --lint または --enable-checks オプションが追加されました。これにより、検証されているファイルに考えられる問題の警告メッセージが可能になりました。たとえば、このオプションを有効にすると、readelf がゼロサイズのセクションをチェックします。これは、ELF 標準により許可されますが、実際に何かが含まれていることをユーザーが予想している場合は危険になる可能性があります。
  • binutils が ELF/DWARF デバッグ情報とソースコードを配布するための HTTP サーバー debuginfod に対応するようになりました。debuginfod で構築すると、readelf および objdump は、このようなファイルが見つからない場合に、別のデバッグファイルについて dbuginfod サーバーに自動的にクエリーできます。debuginfodbinutils をビルドするには、--with-debuginfod 設定オプションを渡します。これには、、llibdebuginfod debuginfod が必要です。debuginfodelfutils で配布され、バージョン 0.178 で始まります。詳細は、https://sourceware.org/elfutils を参照してください。
  • ar プログラムに --output オプションが追加されました。このオプションを使用すると、アーカイブからメンバーを抽出する際に出力ディレクトリーを指定できます。
  • --keep-section オプションが objcopy および strip に追加されました。このオプションは、指定したセクションが削除されないようにします。
  • --source-comment[=<txt>] オプションが objdump に追加されました。無視して表示されるソースコード行の接頭辞を提供します。
  • セクションの調整を可能にするために objcopy--set-section-alignment <section-name>=<align> オプションが追加されました。
  • Verilog 16 進数形式でデータ要素の幅を制御するための Verilog ターゲットの objcopy--verilog-data-width オプションが追加されました。
  • そのようなリンクが複数ある場合は、readelf (--debug-dump=links および --debug-dump=follow) および objdump (--dwarf=links および --dwarf=follow-links) では、個別のデバッグ情報ファイルが表示されたり、複数のリンクをフォローするようになりました。これは通常、GCC -gsplit-dwarf オプションが使用される場合に発生します。

    さらに、objdump--dwarf=follow-links オプションは、他の表示オプションにも影響します。たとえば、--syms オプションと組み合わせると、リンクされたデバッグ情報ファイルのシンボルテーブルも表示されます。--disassemble オプションと組み合わせると、--dwarf= follow-links オプションにより、リンクされたファイルのシンボルテーブルが読み取られ、メインファイルでコードのアセンブル時に使用されます。

  • Compact Type Format でエンコードされたダンプタイプのダンプが objdump および readelf でサポートされるようになりました。