問題タブ [linker-scripts]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
arm - .ARM.exidx が使用される場合
私は mbxxx ターゲットで Contiki 2.7 に取り組んでいます。私のコードをビルドしている間、リンカは .ARM.exidx と .data セクションのオーバーラップについて不平を言いました。リンカー スクリプト contiki-2.7/cpu/stm32w108/gnu-stm32w108.ld を少しいじった後、次のように置き換えて問題を修正しました。
と:
後で、objdump -h を使用して他のサンプル アプリケーションのヘッダー リストを表示しようとしたときに、この特定の .ARM.exidx セクションが見つかりませんでしたが、それはアプリケーションに存在していました。.ARM.exidx についてグーグルで調べたところ、C++ の例外処理に使用されていることがわかりました。私のコードは純粋な C コードなので、なぜこのセクションが私のコードにあるのですか? 通常、.ARM.exidx がコードに存在するのはいつで、そのユーティリティは何ですか?
================================================== ================================
いいえ、そのようなコンパイラ オプションはありません。私は実際に AxTLS API を使用しており、証明書を処理するコードを切り取って contiki に移植しました。さらに掘り下げてみると、bigint の実装で怪しい動作が見つかりました。簡単に言うと... bigint.c ファイルの関数の本体は次のとおりです。
コメントアウトされた部分 (r 変数の割り当て) がコメント解除されている場合、.ARM.exidx が表示されますが、それ以外の場合は表示されません! これで説明できる???
================================================== ================================
の実装で使用されている通常とは異なるものは見つかりませんでしたalloc()
。コードの別の領域で使用されている の参照が 2 つあり、これをおよびalloca()
に置き換えましたが、それでも問題は解決しませんでした。実装には、およびへの呼び出しのみがあります。malloc()
free()
alloc()
malloc()
realloc()
free()
c - このリンカ スクリプト エラーを解決するにはどうすればよいですか?
リンカー スクリプト ファイルを memory.ld として作成しました –</p>
Linux rtos で Eclipse IDE を使用しています。プロジェクトに –T memory.ld を追加しました – プロパティ – リンカー – ライブラリ – eclipse のその他 これを作成する理由: 0x0041c620 から始まるサイズ 30 の変数測定用の固定メモリ アドレスが必要です。
私の質問:これは正しい方法ですか?? 上記のようにすると、エラーが発生します–リンカー入力ファイルが使用されておらず、リンクが完了していません。
注:質問を再投稿しています。
linker - LOAD の初期化データがない GNU リンカ マーキング セクション - Raw バイナリ ヒュージ
ベア メタル ARM ブート ローダーを作成しており、アプリケーション コードと通信するためのスクラッチ パッドとして内部 SRAM を使用しようとしています。私のニーズでは、メモリを初期化またはゼロにする必要はありません。このスクリプトを使用すると、必要な変数をメモリに問題なく配置できます。
objcopy を使用して未加工のバイナリを作成すると、巨大なファイルが生成されます。これは、生のバイナリの最初のバイトが実際には内部メモリであり、.text セクションの先頭まで数メガバイトのパディングがあるためだと思います。Objdump -h は、内部変数が初期化されていないにもかかわらず、CONTENTS、LOAD、および DATA フラグでマークされている internal_ram セクションを示しています。
--remove-section=.internal_ram を使用して objcopy でこれをクリーンアップできますが、データが初期化されていないことをリンカに認識させる方法があるはずです。
セクションを適切にマークする方法はありますか?
microcontroller - コードからstm32w108のフラッシュメモリを書き込む方法
stm32w108 マイクロコントローラーのフラッシュからデータを読み書きする必要がある問題に取り組んでいます。私はdizic mb954ボードを使用しており、その上でcontikiを実行しています。.text セクション内に余分なセクション .flash_store を追加し、(rwx)属性をフラッシュに追加して、リンカ スクリプトを変更しようとしました。
__attribute__((.flash_store))
問題は、初期化された配列を適切に読み取ることはできますが、書き込み中にデフォルトのハンドラーにフォールバックしてそこでループすることです。
AVR マイクロコントローラでは、これは PROGMEM 属性を使用して簡単に実行できますが、stm32w108 に同様の回避策はありますか?
gcc - リンカー スクリプトでのロケーション カウンター (.) の更新
リンカー スクリプトのロケーション カウンターに問題があります。これがバグなのか、間違った出力が予想されるのかはわかりません。
私はBSSセクションを持っています
私の問題は、(__bss_end - __bss_start)
と等しくないこと__bss_size
です。__bss_end
代わりにセクションの外に割り当てる.bss
と、期待値が得られます。elfread でセクション ヘッダーを確認すると、予想される.bss
サイズが得られます。
私が使用しているリンカーは次のとおりです。
そしてGCC
問題は、ロケーション カウンター ( .
) をセクション定義内で更新する必要があるのか、それとも使い方が間違っているのかということです。
PS: 正しい用語を使用していることを願っています...