0

同じオブジェクトを異なるメモリセクションに配置する必要があります。私は別々のデータとプログラムメモリを備えたDSPに取り組んでいます。.textセクションは通常、P-MEM内に保存されます。しかし、同じコードをデータメモリ内にも保存したいと思います。実行時にコピーすることは可能ですが、リンク時にもできるはずだと思います。

これは私が探しているものですが、同じコードを異なるセクションに配置できる「コピー」または「複製」命令が見つからなかったため、機能していません。

MEMORY
{
/* MAP 1*/

    VECS:     org=0x00000000 len=0x00000400

    PMEM:     org=0x00000400 len=0x0000FC00 

    DMEM:     org=0x80000000 len=0x0000F800
    DMEM_FT:  org=0x8000F800 len=0x00000800 

}

SECTIONS
{

    vectors    > VECS
    .text      > PMEM <----- containing ALL code (also including func1.obj(.text) )
    .bss       > DMEM
    .cinit     > DMEM
    .stack     > DMEM
    .far       > DMEM
    .switch    > DMEM
    .data      > DMEM
    .sysmem    > DMEM
    .const     > DMEM
    .cio       > DMEM
    dmem_mirror: 
    {
        func1.obj(.text)
    }        > DMEM_FT

}

上記のリンカースクリプトを使用している場合、それは明らかにセクションfunc1.obj内にのみ配置されていdmem_FTます(これはリンカーが行うことになっていることです!)が、それは私が望んでいることではありません:-/。Texas Instrumentsのコンパイラとリンカを使用していますが、構文はGCCリンカの場合と同じです。

4

1 に答える 1

0

GNU ld マニュアルをざっと見ても、明らかな解決策はありません。考えられる解決策の 1 つが思い浮かびます。func1.obj の部分 (ld -r) リンクを実行して、.text を除くすべてのセクションを特別なセクション/DISCARD/に送信し、.text セクションのみを func1a.obj などに出力することができます。残念ながら、実際に最終的なリンクを行うと、リンカーから複数のシンボル定義エラーが表示されると思います。

于 2011-05-28T11:57:57.010 に答える