41,6 → 41,7 |
meos_section_info* code_sections; |
meos_section_info* data_sections; |
meos_section_info* bss_sections; |
meos_section_info* imp_sections; // Pointers to imported libraries and functions |
} me_info; |
|
int tcc_output_dbgme(const char *filename, me_info* me); |
64,6 → 65,11 |
if (si->sec_num==num) |
return si; |
} |
for (si=me->imp_sections;si;si=si->next) |
{ |
if (si->sec_num==num) |
return si; |
} |
return (meos_section_info*)0; |
} |
|
162,7 → 168,17 |
me->bss_sections=si; |
continue; |
} |
if (strcmp(".imp.@.",s->name)==0) |
{ |
si=tcc_malloc(sizeof(meos_section_info)); |
si->data=s->data; |
si->data_size=s->data_offset; |
si->next=me->imp_sections; |
si->sec_num=i; |
me->imp_sections=si; |
continue; |
} |
} |
int addr; |
addr=sizeof(IMAGE_MEOS_FILE_HEADER); |
for (si=me->code_sections;si;si=si->next) |
175,6 → 191,11 |
si->sh_addr=addr; |
addr+=si->data_size; |
} |
for (si=me->imp_sections;si;si=si->next) |
{ |
si->sh_addr=addr; |
addr+=si->data_size; |
} |
me->header.image_size=addr; |
for (si=me->bss_sections;si;si=si->next) |
{ |
269,6 → 290,13 |
fwrite(si->data,1,si->data_size,f); |
for (si=me.data_sections;si;si=si->next) |
fwrite(si->data,1,si->data_size,f); |
// IMPORTANT: Write ".imp.@." sections at the very end! |
// BSS sections don't count, they should not be in the file at all |
// Cause MENUET header filled assuming that file size does not include BSS |
// We just emit it for smaller entrophia, sometimes |
// it makes the kex file being packed better |
for (si=me.imp_sections;si;si=si->next) |
fwrite(si->data,1,si->data_size,f); |
if (!s1->nobss) |
{ |
for (si=me.bss_sections;si;si=si->next) |