問題タブ [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.

0 投票する
1 に答える
1517 参照

linker-scripts - Cortex-M4 の GNU リンカ スクリプトのメモリ セクション

メモリのセグメンテーションに関する情報が見つからないため、がっかりしています。メモリを、コンパイルされたプログラムのオブジェクト ファイルで使用される .text、.data、.bss、.stack などの基本的なセクションに分割する必要があることはわかっています。他にも多くのセクションがあり、C に必要なセクションと C++ に必要なセクションがあることは知っています。リンカ スクリプトに含める必要があるセクションについての情報を検索しています。

0 投票する
1 に答える
645 参照

linux - 特定のライブラリからのシンボルのリンクを強制する方法は?

Linux で実行可能ファイルをリンクすると、次のような「未定義の参照」エラーが発生します。

私は「SOMELIB」を制御できませんが、自分の共有ライブラリの 1 つにシンボルを持っています。symbol@SOMELIB_1.0symbolが私のライブラリのシンボルと同じ (まったく同じ機能を提供する) ことは間違いありません。実際には、ソース コードでさえほぼ同じです。

symbol@SOMELIB_1.0からではなく、ライブラリからリンクするように強制/エイリアスする方法はSOMELIB_1.0? リンカ スクリプトである種のシンボル バージョニング トリックを考えていましたが、解決策や手がかりさえ見つかりませんでした。

前もって感謝します。

0 投票する
5 に答える
18382 参照

c++ - リンカー スクリプト - メモリ領域の最後にセクションを配置する

私はこれを行う方法を広範囲に検索しましたが、答えを見つけることができませんでした。

私のメモリレイアウトは次のとおりです。

スタックの最後にヒープを配置します。これは成長し、スタックは私が使用しているARMチップの完全な下降スタックです。

今、私がしたいことは、1 つのセクションを配置することです.persist。RAM の最後に常駐させ、これをリンカー スクリプトにプログラムしたいと考えています。ただし、この.persistセクションのサイズは私が定義したものではなく、含まれるシンボルからコンパイラによって計算されます。

これまでのところ、私はそれを行う良い方法を思い付いていません。RAM の開始アドレスと SIZE を知っているので、セクションのサイズが分かっていれば、セクションをどこに移動する必要があるかを計算するのは簡単です。ただし、GNU リンカーのドキュメント (pg 74)によると、次のようです。

SIZEOF(section) 指定されたセクションが割り当てられている場合、そのセクションのサイズをバイト単位で返します。これが評価されるときにセクションが割り当てられていない場合、リンカーはエラーを報告します。

そのため、リンカースクリプトでセクションのサイズを計算できません(配置/割り当ての前にサイズを計算したいため)。

これを行う良い方法を知っている人はいますか?

0 投票する
1 に答える
1542 参照

gcc - メモリ領域の上部にあるセクションをロードする load スクリプト

ARM M0 を使用して、組み込みシステムのプロジェクトに取り組んでいます。

ROM アプリケーションを作成する必要があります。その唯一の目的は、ROM にデータを保存し、必要に応じて data セクションと bss セクションを初期化することです。

これまでのロードスクリプトは次のとおりです。

data と bss 部分がメモリ領域の下部ではなく上部の RAM にロードされるように、loadscript を変更したいと考えています。

どうやってやるの?

0 投票する
3 に答える
12643 参照

gcc - ld リンカー スクリプトで INCLUDE コマンドを使用する方法

私は 2 つのリンカー スクリプトを持っています。common.ldいくつかのシンボルを定義するスクリプトとapp.ld、これらの定義を使用してセクションを配置するスクリプトです。

2 つのファイルを一緒に cat し、それを (gcc 経由で) ld にフィードすると、機能します。INCLUDEコマンドを使用する場合:

INCLUDE common.ld

エラーが発生します:

ld.exe: フラグの構文が無効です

collect2: ld が 1 つの終了ステータスを返しました

私は何を間違っていますか?別のロード スクリプトを含める正しいステートメントはどれですか?


http://www.scoberlin.de/content/media/http/informatik/gcc_docs/ld_3.html#IDX204から:

ファイル名を含める

この時点で、リンカー スクリプトのファイル名を含めます。ファイルは、現在のディレクトリ、および -L オプションで指定された任意のディレクトリで検索されます。INCLUDE の呼び出しは、最大 10 レベルの深さまでネストできます。

:コードレッドのフルバージョンのarm gccツールを使用して、Windows 7 PCでこれを実行しています:

arm-none-eabi-gcc (GNU Tools for ARM Embedded Processors) 4.6.2 20121016 (release) [ARM/embedded-4_6-branch revision 192487

0 投票する
1 に答える
2117 参照

c - GNU リンカー スクリプトにセクションを追加する

こんにちは、リンカー スクリプトで次の方法でカスタム セクションを定義しようとしています。

構造体を含む C ファイルをコンパイルしていますが、その構造体を常にこの version_section に格納したいと考えています。

さて、この段階まではすべて正常に動作します。しかし、そのように生成されたセクションにはフラグ「AW」がありますが、フラグを「A」にする必要があります。

したがって、このセクションを次のような「A」フラグを持つように定義したアセンブラー ファイルを使用しています。

しかし、version_section へのデフォルトのフラグがまだ表示されます。readelf の AW

ここで何が間違っていますか?