in rts/linker/Elf.c [584:620]
static SectionKind getSectionKind_ELF( Elf_Shdr *hdr, int *is_bss )
{
*is_bss = false;
if (hdr->sh_type == SHT_PROGBITS
&& (hdr->sh_flags & SHF_ALLOC) && (hdr->sh_flags & SHF_EXECINSTR)) {
/* .text-style section */
return SECTIONKIND_CODE_OR_RODATA;
}
if (hdr->sh_type == SHT_PROGBITS
&& (hdr->sh_flags & SHF_ALLOC) && (hdr->sh_flags & SHF_WRITE)) {
/* .data-style section */
return SECTIONKIND_RWDATA;
}
if (hdr->sh_type == SHT_PROGBITS
&& (hdr->sh_flags & SHF_ALLOC) && !(hdr->sh_flags & SHF_WRITE)) {
/* .rodata-style section */
return SECTIONKIND_CODE_OR_RODATA;
}
#if defined(SHT_INIT_ARRAY)
if (hdr->sh_type == SHT_INIT_ARRAY
&& (hdr->sh_flags & SHF_ALLOC) && (hdr->sh_flags & SHF_WRITE)) {
/* .init_array section */
return SECTIONKIND_INIT_ARRAY;
}
#endif /* not SHT_INIT_ARRAY */
if (hdr->sh_type == SHT_NOBITS
&& (hdr->sh_flags & SHF_ALLOC) && (hdr->sh_flags & SHF_WRITE)) {
/* .bss-style section */
*is_bss = true;
return SECTIONKIND_RWDATA;
}
return SECTIONKIND_OTHER;
}