2016-10-13 3 views
0

Other Linker Flags-Wl,-sectcreate,__RESTRICT,__restrict,/dev/nullを追加すると、空のセクションが追加されるようです。コードでMachOバイナリに空のセクションを追加するには?

そして、コードでは、__attribute((used,section("segmentname,sectionname")))は、varまたは関数を宣言することができます。

しかし、コードで空のセクションを宣言するにはどうすればよいですか?

答えて

0

あなたは既にsection(...)属性を発見したが、関係なく、あなたが(でもstruct {}char[0])に適用するもの、それはつもりいくつかのスペースを取らず、非空のセグメントを作成しています。

正確には実際のCコードから何を求めているのかわかりませんが、インラインアセンブリを使用して回避策を達成できます。

は、どこかの関数の外に、このコードブロックを含める:

asm(".section __RESTRICT,__restrict\n" 
    "empty:\n" 
    ".no_dead_strip empty\n"); 

この意志:

  • 本当に空(ファイルサイズ:0)追加オブジェクトファイルにセグメント/セクションを。
  • は、あなたのシンボルテーブルにemptyシンボルを追加し、しかし:
    • それはつもりプライベート可能です(すなわち、非リンク可能)。
    • アンダースコアで始まらない限り、他のものと衝突する可能性は実質的にゼロです。
  • i386、x86_64、armおよびarm64アセンブリのすべてで動作します。
関連する問題