共有ライブラリを32ビットから64ビットに移植しています。これは、いくつかのプロシージャと少し高レベルのCグルーコードをエクスポートするアセンブリ(NASM用に作成)で構成されています。NASM2.10.01とGNUld2.22を搭載した64ビットDebianマシンでビルドしています。
すべてのプッシュ/ポップの問題を修正しました(レジスタの32ビット部分のプッシュは64ビットモードでは明らかに機能しません)、オブジェクトをアセンブルしましたが、リンク段階で停止しました。これが私のコマンドラインです-アセンブリ:
nasm -Ox -dPTC_ARCH=X64 -f elf64 particl.asm -o particlasm.o
リンク:
ld -shared -lc -S -melf_x86_64 particlasm.o ptc_highlevel.o -o libparticlasm.so
(-lcスイッチは標準Cライブラリのリンクを強制します-アセンブリコードにその関数のいくつかが必要です)
ただし、リンカは次のメッセージで失敗します。
ld: particlasm.o: relocation R_X86_64_32 against `.text' can not be used when making a shared object; recompile with -fPIC
particlasm.o: could not read symbols: Bad value`
64ビットシステムでPICが必要な理由を知っています。NASMマニュアルのセクション9.2で説明されているように、私は実際にPICを使用しています。ただし、NASMがELFシンボルテーブルでコードをPICとしてマークしていないように見えます。これにより、リンカーが抗議し、これを修正するための関連するコマンドラインスイッチまたはディレクティブがマニュアルに見つかりません。
何か案は?