7

mingw 4.4 でサードパーティのヘッダーを使用するプロジェクトをコンパイルしようとすると、次のエラーが発生しました。

アセンブラー メッセージ:
エラー: 行末のジャンク、認識されない最初の文字は '"'
エラー: 不明な疑似操作: '.previous'

含まれているヘッダーの 1 つの末尾に、次のコードが見つかりました。

__asm__(".section \".plc\"");
__asm__(".previous");

私はインライン アセンブラ命令の経験がまったくないので、その説明をグーグルで検索しましたが、私の 2 つの基本的な質問に対する答えが見つかりませんでした。実際には何をし__asm__(".previous");ているのか、なぜこれをヘッダーファイルの最後に置くのでしょうか。

これらは、__asm__プロジェクト全体で唯一の指示です。それらを安全に削除できますか? または、既知の疑似操作にするために .previous を定義する方法はありますか?

教えてください!

4

1 に答える 1

6

.previous2 つの elf セクション間で前後にスワップできるディレクティブです。これは、より高密度のアセンブリ ファイルを可能にするショートカットであり、たとえば、コード ストリーム内で初期化されたデータを宣言したり、その逆を行うことができます。

たとえば、データ セクションとコード セクションを含むアセンブラ ファイルがあるとします。

必要に応じて (関数の途中で) データ セグメントで定数を宣言すると、次のように .previous ステートメントを使用できます。

  nop            // some code

.previous        // swaps current section (code) with previous section (data)

MyConstant:
  .word 0x0001   // some data

.previous        // swaps curent section (data) with previous section (code)

  nop            // more code

詳細については、リファレンス マニュアルを参照してください。

http://sourceware.org/binutils/docs-2.19/as/Previous.html#Previous

于 2010-03-10T13:04:04.167 に答える