Avatar
#define DECLARE_SWIFT_SECTION(name) \ __asm__("\t.section " #name ",\"a\"\n"); \ __attribute__((__visibility__("hidden"),__aligned__(1))) extern const char __start_##name; \ __attribute__((__visibility__("hidden"),__aligned__(1))) extern const char __stop_##name; extern "C" { DECLARE_SWIFT_SECTION(swift5_protocols)
10:03 AM
このように書いておくことで、 asm文を使ってセクション名を指定しつつ、 extern宣言で、LLVMが埋め込んでおいた __start_section__stop_section のシンボルをリンクさせて・・・ (edited)
10:04 AM
#define SWIFT_SECTION_RANGE(name) \ { reinterpret_cast<uintptr_t>(&__start_##name), \ static_cast<uintptr_t>(&__stop_##name - &__start_##name) } ... SWIFT_SECTION_RANGE(swift5_protocols),
10:05 AM
このようにすることでそのstartシンボルのアドレスとstopシンボルのアドレスから、 イメージ中の、セクションデータのメモリアドレスとサイズを得る
10:05 AM
って仕掛けって理解でいいのかな?