clang-format on arm-gen.c and tcccoff.c.
They now mostly follow the same coding style as everything else.
This commit is contained in:
parent
9e1b6bf517
commit
694d0fdade
2 changed files with 2082 additions and 2067 deletions
168
tcccoff.c
168
tcccoff.c
|
@ -38,14 +38,14 @@ int EndAddress[MAX_FUNCS];
|
||||||
int LastLineNo[MAX_FUNCS];
|
int LastLineNo[MAX_FUNCS];
|
||||||
int FuncEntries[MAX_FUNCS];
|
int FuncEntries[MAX_FUNCS];
|
||||||
|
|
||||||
int OutputTheSection(Section * sect);
|
int OutputTheSection(Section* sect);
|
||||||
short int GetCoffFlags(const char *s);
|
short int GetCoffFlags(const char* s);
|
||||||
void SortSymbolTable(void);
|
void SortSymbolTable(void);
|
||||||
Section *FindSection(TCCState * s1, const char *sname);
|
Section* FindSection(TCCState* s1, const char* sname);
|
||||||
|
|
||||||
int C67_main_entry_point;
|
int C67_main_entry_point;
|
||||||
|
|
||||||
int FindCoffSymbolIndex(const char *func_name);
|
int FindCoffSymbolIndex(const char* func_name);
|
||||||
int nb_syms;
|
int nb_syms;
|
||||||
|
|
||||||
typedef struct {
|
typedef struct {
|
||||||
|
@ -74,15 +74,15 @@ typedef struct {
|
||||||
unsigned short dummy4;
|
unsigned short dummy4;
|
||||||
} AUXEF;
|
} AUXEF;
|
||||||
|
|
||||||
ST_FUNC int tcc_output_coff(TCCState *s1, FILE *f)
|
ST_FUNC int tcc_output_coff(TCCState* s1, FILE* f)
|
||||||
{
|
{
|
||||||
Section *tcc_sect;
|
Section* tcc_sect;
|
||||||
SCNHDR *coff_sec;
|
SCNHDR* coff_sec;
|
||||||
int file_pointer;
|
int file_pointer;
|
||||||
char *Coff_str_table, *pCoff_str_table;
|
char* Coff_str_table, *pCoff_str_table;
|
||||||
int CoffTextSectionNo, coff_nb_syms;
|
int CoffTextSectionNo, coff_nb_syms;
|
||||||
FILHDR file_hdr; /* FILE HEADER STRUCTURE */
|
FILHDR file_hdr; /* FILE HEADER STRUCTURE */
|
||||||
Section *stext, *sdata, *sbss;
|
Section* stext, *sdata, *sbss;
|
||||||
int i, NSectionsToOutput = 0;
|
int i, NSectionsToOutput = 0;
|
||||||
|
|
||||||
Coff_str_table = pCoff_str_table = NULL;
|
Coff_str_table = pCoff_str_table = NULL;
|
||||||
|
@ -102,14 +102,14 @@ ST_FUNC int tcc_output_coff(TCCState *s1, FILE *f)
|
||||||
|
|
||||||
o_filehdr.magic = 0x0108; /* see magic.h */
|
o_filehdr.magic = 0x0108; /* see magic.h */
|
||||||
o_filehdr.vstamp = 0x0190; /* version stamp */
|
o_filehdr.vstamp = 0x0190; /* version stamp */
|
||||||
o_filehdr.tsize = stext->data_offset; /* text size in bytes, padded to FW bdry */
|
o_filehdr.tsize =
|
||||||
|
stext->data_offset; /* text size in bytes, padded to FW bdry */
|
||||||
o_filehdr.dsize = sdata->data_offset; /* initialized data " " */
|
o_filehdr.dsize = sdata->data_offset; /* initialized data " " */
|
||||||
o_filehdr.bsize = sbss->data_offset; /* uninitialized data " " */
|
o_filehdr.bsize = sbss->data_offset; /* uninitialized data " " */
|
||||||
o_filehdr.entrypt = C67_main_entry_point; /* entry pt. */
|
o_filehdr.entrypt = C67_main_entry_point; /* entry pt. */
|
||||||
o_filehdr.text_start = stext->sh_addr; /* base of text used for this file */
|
o_filehdr.text_start = stext->sh_addr; /* base of text used for this file */
|
||||||
o_filehdr.data_start = sdata->sh_addr; /* base of data used for this file */
|
o_filehdr.data_start = sdata->sh_addr; /* base of data used for this file */
|
||||||
|
|
||||||
|
|
||||||
// create all the section headers
|
// create all the section headers
|
||||||
|
|
||||||
file_pointer = FILHSZ + sizeof(AOUTHDR);
|
file_pointer = FILHSZ + sizeof(AOUTHDR);
|
||||||
|
@ -124,7 +124,9 @@ ST_FUNC int tcc_output_coff(TCCState *s1, FILE *f)
|
||||||
NSectionsToOutput++;
|
NSectionsToOutput++;
|
||||||
|
|
||||||
if (CoffTextSectionNo == -1 && tcc_sect == stext)
|
if (CoffTextSectionNo == -1 && tcc_sect == stext)
|
||||||
CoffTextSectionNo = NSectionsToOutput; // rem which coff sect number the .text sect is
|
CoffTextSectionNo = NSectionsToOutput; // rem which coff sect
|
||||||
|
// number the .text sect
|
||||||
|
// is
|
||||||
|
|
||||||
strcpy(coff_sec->s_name, tcc_sect->name); /* section name */
|
strcpy(coff_sec->s_name, tcc_sect->name); /* section name */
|
||||||
|
|
||||||
|
@ -148,14 +150,14 @@ ST_FUNC int tcc_output_coff(TCCState *s1, FILE *f)
|
||||||
// now loop through and determine file pointer locations
|
// now loop through and determine file pointer locations
|
||||||
// for the raw data
|
// for the raw data
|
||||||
|
|
||||||
|
|
||||||
for (i = 1; i < s1->nb_sections; i++) {
|
for (i = 1; i < s1->nb_sections; i++) {
|
||||||
coff_sec = §ion_header[i];
|
coff_sec = §ion_header[i];
|
||||||
tcc_sect = s1->sections[i];
|
tcc_sect = s1->sections[i];
|
||||||
|
|
||||||
if (OutputTheSection(tcc_sect)) {
|
if (OutputTheSection(tcc_sect)) {
|
||||||
// put raw data
|
// put raw data
|
||||||
coff_sec->s_scnptr = file_pointer; /* file ptr to raw data for section */
|
coff_sec->s_scnptr =
|
||||||
|
file_pointer; /* file ptr to raw data for section */
|
||||||
file_pointer += coff_sec->s_size;
|
file_pointer += coff_sec->s_size;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -192,28 +194,25 @@ ST_FUNC int tcc_output_coff(TCCState *s1, FILE *f)
|
||||||
// also find association between source file name and function
|
// also find association between source file name and function
|
||||||
// so we can sort the symbol table
|
// so we can sort the symbol table
|
||||||
|
|
||||||
|
Stab_Sym* sym, *sym_end;
|
||||||
Stab_Sym *sym, *sym_end;
|
|
||||||
char func_name[MAX_FUNC_NAME_LENGTH],
|
char func_name[MAX_FUNC_NAME_LENGTH],
|
||||||
last_func_name[MAX_FUNC_NAME_LENGTH];
|
last_func_name[MAX_FUNC_NAME_LENGTH];
|
||||||
unsigned long func_addr, last_pc, pc;
|
unsigned long func_addr, last_pc, pc;
|
||||||
const char *incl_files[INCLUDE_STACK_SIZE];
|
const char* incl_files[INCLUDE_STACK_SIZE];
|
||||||
int incl_index, len, last_line_num;
|
int incl_index, len, last_line_num;
|
||||||
const char *str, *p;
|
const char* str, *p;
|
||||||
|
|
||||||
coff_sec->s_lnnoptr = file_pointer; /* file ptr to linno */
|
coff_sec->s_lnnoptr = file_pointer; /* file ptr to linno */
|
||||||
|
|
||||||
|
|
||||||
func_name[0] = '\0';
|
func_name[0] = '\0';
|
||||||
func_addr = 0;
|
func_addr = 0;
|
||||||
incl_index = 0;
|
incl_index = 0;
|
||||||
last_func_name[0] = '\0';
|
last_func_name[0] = '\0';
|
||||||
last_pc = 0xffffffff;
|
last_pc = 0xffffffff;
|
||||||
last_line_num = 1;
|
last_line_num = 1;
|
||||||
sym = (Stab_Sym *) stab_section->data + 1;
|
sym = (Stab_Sym*)stab_section->data + 1;
|
||||||
sym_end =
|
sym_end =
|
||||||
(Stab_Sym *) (stab_section->data +
|
(Stab_Sym*)(stab_section->data + stab_section->data_offset);
|
||||||
stab_section->data_offset);
|
|
||||||
|
|
||||||
nFuncs = 0;
|
nFuncs = 0;
|
||||||
while (sym < sym_end) {
|
while (sym < sym_end) {
|
||||||
|
@ -231,8 +230,7 @@ ST_FUNC int tcc_output_coff(TCCState *s1, FILE *f)
|
||||||
func_addr = 0;
|
func_addr = 0;
|
||||||
EndAddress[nFuncs] = pc;
|
EndAddress[nFuncs] = pc;
|
||||||
FuncEntries[nFuncs] =
|
FuncEntries[nFuncs] =
|
||||||
(file_pointer -
|
(file_pointer - LineNoFilePtr[nFuncs]) / LINESZ - 1;
|
||||||
LineNoFilePtr[nFuncs]) / LINESZ - 1;
|
|
||||||
LastLineNo[nFuncs++] = last_line_num + 1;
|
LastLineNo[nFuncs++] = last_line_num + 1;
|
||||||
} else {
|
} else {
|
||||||
// beginning of function
|
// beginning of function
|
||||||
|
@ -241,9 +239,7 @@ ST_FUNC int tcc_output_coff(TCCState *s1, FILE *f)
|
||||||
coff_sec->s_nlnno++;
|
coff_sec->s_nlnno++;
|
||||||
file_pointer += LINESZ;
|
file_pointer += LINESZ;
|
||||||
|
|
||||||
str =
|
str = (const char*)stabstr_section->data + sym->n_strx;
|
||||||
(const char *) stabstr_section->data +
|
|
||||||
sym->n_strx;
|
|
||||||
|
|
||||||
p = strchr(str, ':');
|
p = strchr(str, ':');
|
||||||
if (!p) {
|
if (!p) {
|
||||||
|
@ -281,8 +277,7 @@ ST_FUNC int tcc_output_coff(TCCState *s1, FILE *f)
|
||||||
break;
|
break;
|
||||||
/* include files */
|
/* include files */
|
||||||
case N_BINCL:
|
case N_BINCL:
|
||||||
str =
|
str = (const char*)stabstr_section->data + sym->n_strx;
|
||||||
(const char *) stabstr_section->data + sym->n_strx;
|
|
||||||
add_incl:
|
add_incl:
|
||||||
if (incl_index < INCLUDE_STACK_SIZE) {
|
if (incl_index < INCLUDE_STACK_SIZE) {
|
||||||
incl_files[incl_index++] = str;
|
incl_files[incl_index++] = str;
|
||||||
|
@ -296,9 +291,7 @@ ST_FUNC int tcc_output_coff(TCCState *s1, FILE *f)
|
||||||
if (sym->n_strx == 0) {
|
if (sym->n_strx == 0) {
|
||||||
incl_index = 0; /* end of translation unit */
|
incl_index = 0; /* end of translation unit */
|
||||||
} else {
|
} else {
|
||||||
str =
|
str = (const char*)stabstr_section->data + sym->n_strx;
|
||||||
(const char *) stabstr_section->data +
|
|
||||||
sym->n_strx;
|
|
||||||
/* do not add path */
|
/* do not add path */
|
||||||
len = strlen(str);
|
len = strlen(str);
|
||||||
if (len > 0 && str[len - 1] != '/')
|
if (len > 0 && str[len - 1] != '/')
|
||||||
|
@ -309,7 +302,6 @@ ST_FUNC int tcc_output_coff(TCCState *s1, FILE *f)
|
||||||
sym++;
|
sym++;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
file_hdr.f_symptr = file_pointer; /* file pointer to symtab */
|
file_hdr.f_symptr = file_pointer; /* file pointer to symtab */
|
||||||
|
@ -323,7 +315,6 @@ ST_FUNC int tcc_output_coff(TCCState *s1, FILE *f)
|
||||||
|
|
||||||
// OK now we are all set to write the file
|
// OK now we are all set to write the file
|
||||||
|
|
||||||
|
|
||||||
fwrite(&file_hdr, FILHSZ, 1, f);
|
fwrite(&file_hdr, FILHSZ, 1, f);
|
||||||
fwrite(&o_filehdr, sizeof(o_filehdr), 1, f);
|
fwrite(&o_filehdr, sizeof(o_filehdr), 1, f);
|
||||||
|
|
||||||
|
@ -361,7 +352,6 @@ ST_FUNC int tcc_output_coff(TCCState *s1, FILE *f)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
// group the symbols in order of filename, func1, func2, etc
|
// group the symbols in order of filename, func1, func2, etc
|
||||||
// finally global symbols
|
// finally global symbols
|
||||||
|
|
||||||
|
@ -377,13 +367,12 @@ ST_FUNC int tcc_output_coff(TCCState *s1, FILE *f)
|
||||||
if (s1->do_debug && tcc_sect == stext) {
|
if (s1->do_debug && tcc_sect == stext) {
|
||||||
// count how many line nos data
|
// count how many line nos data
|
||||||
|
|
||||||
|
Stab_Sym* sym, *sym_end;
|
||||||
Stab_Sym *sym, *sym_end;
|
|
||||||
char func_name[128], last_func_name[128];
|
char func_name[128], last_func_name[128];
|
||||||
unsigned long func_addr, last_pc, pc;
|
unsigned long func_addr, last_pc, pc;
|
||||||
const char *incl_files[INCLUDE_STACK_SIZE];
|
const char* incl_files[INCLUDE_STACK_SIZE];
|
||||||
int incl_index, len, last_line_num;
|
int incl_index, len, last_line_num;
|
||||||
const char *str, *p;
|
const char* str, *p;
|
||||||
|
|
||||||
LINENO CoffLineNo;
|
LINENO CoffLineNo;
|
||||||
|
|
||||||
|
@ -393,10 +382,9 @@ ST_FUNC int tcc_output_coff(TCCState *s1, FILE *f)
|
||||||
last_func_name[0] = '\0';
|
last_func_name[0] = '\0';
|
||||||
last_pc = 0;
|
last_pc = 0;
|
||||||
last_line_num = 1;
|
last_line_num = 1;
|
||||||
sym = (Stab_Sym *) stab_section->data + 1;
|
sym = (Stab_Sym*)stab_section->data + 1;
|
||||||
sym_end =
|
sym_end =
|
||||||
(Stab_Sym *) (stab_section->data +
|
(Stab_Sym*)(stab_section->data + stab_section->data_offset);
|
||||||
stab_section->data_offset);
|
|
||||||
|
|
||||||
while (sym < sym_end) {
|
while (sym < sym_end) {
|
||||||
switch (sym->n_type) {
|
switch (sym->n_type) {
|
||||||
|
@ -415,10 +403,7 @@ ST_FUNC int tcc_output_coff(TCCState *s1, FILE *f)
|
||||||
} else {
|
} else {
|
||||||
// beginning of function
|
// beginning of function
|
||||||
|
|
||||||
str =
|
str = (const char*)stabstr_section->data + sym->n_strx;
|
||||||
(const char *) stabstr_section->data +
|
|
||||||
sym->n_strx;
|
|
||||||
|
|
||||||
|
|
||||||
p = strchr(str, ':');
|
p = strchr(str, ':');
|
||||||
if (!p) {
|
if (!p) {
|
||||||
|
@ -448,7 +433,6 @@ ST_FUNC int tcc_output_coff(TCCState *s1, FILE *f)
|
||||||
case N_SLINE:
|
case N_SLINE:
|
||||||
pc = sym->n_value + func_addr;
|
pc = sym->n_value + func_addr;
|
||||||
|
|
||||||
|
|
||||||
/* XXX: slow! */
|
/* XXX: slow! */
|
||||||
strcpy(last_func_name, func_name);
|
strcpy(last_func_name, func_name);
|
||||||
|
|
||||||
|
@ -471,8 +455,7 @@ ST_FUNC int tcc_output_coff(TCCState *s1, FILE *f)
|
||||||
|
|
||||||
/* include files */
|
/* include files */
|
||||||
case N_BINCL:
|
case N_BINCL:
|
||||||
str =
|
str = (const char*)stabstr_section->data + sym->n_strx;
|
||||||
(const char *) stabstr_section->data + sym->n_strx;
|
|
||||||
add_incl2:
|
add_incl2:
|
||||||
if (incl_index < INCLUDE_STACK_SIZE) {
|
if (incl_index < INCLUDE_STACK_SIZE) {
|
||||||
incl_files[incl_index++] = str;
|
incl_files[incl_index++] = str;
|
||||||
|
@ -486,9 +469,7 @@ ST_FUNC int tcc_output_coff(TCCState *s1, FILE *f)
|
||||||
if (sym->n_strx == 0) {
|
if (sym->n_strx == 0) {
|
||||||
incl_index = 0; /* end of translation unit */
|
incl_index = 0; /* end of translation unit */
|
||||||
} else {
|
} else {
|
||||||
str =
|
str = (const char*)stabstr_section->data + sym->n_strx;
|
||||||
(const char *) stabstr_section->data +
|
|
||||||
sym->n_strx;
|
|
||||||
/* do not add path */
|
/* do not add path */
|
||||||
len = strlen(str);
|
len = strlen(str);
|
||||||
if (len > 0 && str[len - 1] != '/')
|
if (len > 0 && str[len - 1] != '/')
|
||||||
|
@ -509,17 +490,16 @@ ST_FUNC int tcc_output_coff(TCCState *s1, FILE *f)
|
||||||
AUXBF auxbf;
|
AUXBF auxbf;
|
||||||
AUXEF auxef;
|
AUXEF auxef;
|
||||||
int i;
|
int i;
|
||||||
Elf32_Sym *p;
|
Elf32_Sym* p;
|
||||||
const char *name;
|
const char* name;
|
||||||
int nstr;
|
int nstr;
|
||||||
int n = 0;
|
int n = 0;
|
||||||
|
|
||||||
Coff_str_table = (char *) tcc_malloc(MAX_STR_TABLE);
|
Coff_str_table = (char*)tcc_malloc(MAX_STR_TABLE);
|
||||||
pCoff_str_table = Coff_str_table;
|
pCoff_str_table = Coff_str_table;
|
||||||
nstr = 0;
|
nstr = 0;
|
||||||
|
|
||||||
p = (Elf32_Sym *) symtab_section->data;
|
p = (Elf32_Sym*)symtab_section->data;
|
||||||
|
|
||||||
|
|
||||||
for (i = 0; i < nb_syms; i++) {
|
for (i = 0; i < nb_syms; i++) {
|
||||||
|
|
||||||
|
@ -536,8 +516,7 @@ ST_FUNC int tcc_output_coff(TCCState *s1, FILE *f)
|
||||||
tcc_error("String table too large");
|
tcc_error("String table too large");
|
||||||
|
|
||||||
csym._n._n_n._n_zeroes = 0;
|
csym._n._n_n._n_zeroes = 0;
|
||||||
csym._n._n_n._n_offset =
|
csym._n._n_n._n_offset = pCoff_str_table - Coff_str_table + 4;
|
||||||
pCoff_str_table - Coff_str_table + 4;
|
|
||||||
|
|
||||||
strcpy(pCoff_str_table, name);
|
strcpy(pCoff_str_table, name);
|
||||||
pCoff_str_table += strlen(name) + 1; // skip over null
|
pCoff_str_table += strlen(name) + 1; // skip over null
|
||||||
|
@ -648,7 +627,6 @@ ST_FUNC int tcc_output_coff(TCCState *s1, FILE *f)
|
||||||
csym.n_sclass = C_LABEL;
|
csym.n_sclass = C_LABEL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
csym.n_value = p->st_value;
|
csym.n_value = p->st_value;
|
||||||
csym.n_scnum = 2;
|
csym.n_scnum = 2;
|
||||||
csym.n_numaux = 1;
|
csym.n_numaux = 1;
|
||||||
|
@ -662,7 +640,6 @@ ST_FUNC int tcc_output_coff(TCCState *s1, FILE *f)
|
||||||
fwrite(&auxfunc, 18, 1, f);
|
fwrite(&auxfunc, 18, 1, f);
|
||||||
n++;
|
n++;
|
||||||
n++;
|
n++;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
p++;
|
p++;
|
||||||
|
@ -685,21 +662,18 @@ ST_FUNC int tcc_output_coff(TCCState *s1, FILE *f)
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
// group the symbols in order of filename, func1, func2, etc
|
// group the symbols in order of filename, func1, func2, etc
|
||||||
// finally global symbols
|
// finally global symbols
|
||||||
|
|
||||||
void SortSymbolTable(void)
|
void SortSymbolTable(void)
|
||||||
{
|
{
|
||||||
int i, j, k, n = 0;
|
int i, j, k, n = 0;
|
||||||
Elf32_Sym *p, *p2, *NewTable;
|
Elf32_Sym* p, *p2, *NewTable;
|
||||||
char *name, *name2;
|
char* name, *name2;
|
||||||
|
|
||||||
NewTable = (Elf32_Sym *) tcc_malloc(nb_syms * sizeof(Elf32_Sym));
|
NewTable = (Elf32_Sym*)tcc_malloc(nb_syms * sizeof(Elf32_Sym));
|
||||||
|
|
||||||
p = (Elf32_Sym *) symtab_section->data;
|
|
||||||
|
|
||||||
|
p = (Elf32_Sym*)symtab_section->data;
|
||||||
|
|
||||||
// find a file symbol, copy it over
|
// find a file symbol, copy it over
|
||||||
// then scan the whole symbol list and copy any function
|
// then scan the whole symbol list and copy any function
|
||||||
|
@ -707,20 +681,19 @@ void SortSymbolTable(void)
|
||||||
|
|
||||||
for (i = 0; i < nb_syms; i++) {
|
for (i = 0; i < nb_syms; i++) {
|
||||||
if (p->st_info == 4) {
|
if (p->st_info == 4) {
|
||||||
name = (char *) symtab_section->link->data + p->st_name;
|
name = (char*)symtab_section->link->data + p->st_name;
|
||||||
|
|
||||||
// this is a file symbol, copy it over
|
// this is a file symbol, copy it over
|
||||||
|
|
||||||
NewTable[n++] = *p;
|
NewTable[n++] = *p;
|
||||||
|
|
||||||
p2 = (Elf32_Sym *) symtab_section->data;
|
p2 = (Elf32_Sym*)symtab_section->data;
|
||||||
|
|
||||||
for (j = 0; j < nb_syms; j++) {
|
for (j = 0; j < nb_syms; j++) {
|
||||||
if (p2->st_info == 0x12) {
|
if (p2->st_info == 0x12) {
|
||||||
// this is a func symbol
|
// this is a func symbol
|
||||||
|
|
||||||
name2 =
|
name2 = (char*)symtab_section->link->data + p2->st_name;
|
||||||
(char *) symtab_section->link->data + p2->st_name;
|
|
||||||
|
|
||||||
// find the function data index
|
// find the function data index
|
||||||
|
|
||||||
|
@ -730,7 +703,8 @@ void SortSymbolTable(void)
|
||||||
}
|
}
|
||||||
|
|
||||||
if (k >= nFuncs) {
|
if (k >= nFuncs) {
|
||||||
tcc_error("debug (sort) info can't find function: %s", name2);
|
tcc_error("debug (sort) info can't find function: %s",
|
||||||
|
name2);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (strcmp(AssociatedFile[k], name) == 0) {
|
if (strcmp(AssociatedFile[k], name) == 0) {
|
||||||
|
@ -748,7 +722,7 @@ void SortSymbolTable(void)
|
||||||
// now all the filename and func symbols should have been copied over
|
// now all the filename and func symbols should have been copied over
|
||||||
// copy all the rest over (all except file and funcs)
|
// copy all the rest over (all except file and funcs)
|
||||||
|
|
||||||
p = (Elf32_Sym *) symtab_section->data;
|
p = (Elf32_Sym*)symtab_section->data;
|
||||||
for (i = 0; i < nb_syms; i++) {
|
for (i = 0; i < nb_syms; i++) {
|
||||||
if (p->st_info != 4 && p->st_info != 0x12) {
|
if (p->st_info != 4 && p->st_info != 0x12) {
|
||||||
NewTable[n++] = *p;
|
NewTable[n++] = *p;
|
||||||
|
@ -761,7 +735,7 @@ void SortSymbolTable(void)
|
||||||
|
|
||||||
// copy it all back
|
// copy it all back
|
||||||
|
|
||||||
p = (Elf32_Sym *) symtab_section->data;
|
p = (Elf32_Sym*)symtab_section->data;
|
||||||
for (i = 0; i < nb_syms; i++) {
|
for (i = 0; i < nb_syms; i++) {
|
||||||
*p++ = NewTable[i];
|
*p++ = NewTable[i];
|
||||||
}
|
}
|
||||||
|
@ -769,18 +743,17 @@ void SortSymbolTable(void)
|
||||||
tcc_free(NewTable);
|
tcc_free(NewTable);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int FindCoffSymbolIndex(const char* func_name)
|
||||||
int FindCoffSymbolIndex(const char *func_name)
|
|
||||||
{
|
{
|
||||||
int i, n = 0;
|
int i, n = 0;
|
||||||
Elf32_Sym *p;
|
Elf32_Sym* p;
|
||||||
char *name;
|
char* name;
|
||||||
|
|
||||||
p = (Elf32_Sym *) symtab_section->data;
|
p = (Elf32_Sym*)symtab_section->data;
|
||||||
|
|
||||||
for (i = 0; i < nb_syms; i++) {
|
for (i = 0; i < nb_syms; i++) {
|
||||||
|
|
||||||
name = (char *) symtab_section->link->data + p->st_name;
|
name = (char*)symtab_section->link->data + p->st_name;
|
||||||
|
|
||||||
if (p->st_info == 4) {
|
if (p->st_info == 4) {
|
||||||
// put a filename symbol
|
// put a filename symbol
|
||||||
|
@ -814,9 +787,9 @@ int FindCoffSymbolIndex(const char *func_name)
|
||||||
return n; // total number of symbols
|
return n; // total number of symbols
|
||||||
}
|
}
|
||||||
|
|
||||||
int OutputTheSection(Section * sect)
|
int OutputTheSection(Section* sect)
|
||||||
{
|
{
|
||||||
const char *s = sect->name;
|
const char* s = sect->name;
|
||||||
|
|
||||||
if (!strcmp(s, ".text"))
|
if (!strcmp(s, ".text"))
|
||||||
return 1;
|
return 1;
|
||||||
|
@ -826,7 +799,7 @@ int OutputTheSection(Section * sect)
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
short int GetCoffFlags(const char *s)
|
short int GetCoffFlags(const char* s)
|
||||||
{
|
{
|
||||||
if (!strcmp(s, ".text"))
|
if (!strcmp(s, ".text"))
|
||||||
return STYP_TEXT | STYP_DATA | STYP_ALIGN | 0x400;
|
return STYP_TEXT | STYP_DATA | STYP_ALIGN | 0x400;
|
||||||
|
@ -842,9 +815,9 @@ short int GetCoffFlags(const char *s)
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
Section *FindSection(TCCState * s1, const char *sname)
|
Section* FindSection(TCCState* s1, const char* sname)
|
||||||
{
|
{
|
||||||
Section *s;
|
Section* s;
|
||||||
int i;
|
int i;
|
||||||
|
|
||||||
for (i = 1; i < s1->nb_sections; i++) {
|
for (i = 1; i < s1->nb_sections; i++) {
|
||||||
|
@ -858,13 +831,13 @@ Section *FindSection(TCCState * s1, const char *sname)
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
ST_FUNC int tcc_load_coff(TCCState * s1, int fd)
|
ST_FUNC int tcc_load_coff(TCCState* s1, int fd)
|
||||||
{
|
{
|
||||||
// tktk TokenSym *ts;
|
// tktk TokenSym *ts;
|
||||||
|
|
||||||
FILE *f;
|
FILE* f;
|
||||||
unsigned int str_size;
|
unsigned int str_size;
|
||||||
char *Coff_str_table, *name;
|
char* Coff_str_table, *name;
|
||||||
int i, k;
|
int i, k;
|
||||||
struct syment csym;
|
struct syment csym;
|
||||||
char name2[9];
|
char name2[9];
|
||||||
|
@ -889,8 +862,7 @@ ST_FUNC int tcc_load_coff(TCCState * s1, int fd)
|
||||||
if (fread(&str_size, sizeof(int), 1, f) != 1)
|
if (fread(&str_size, sizeof(int), 1, f) != 1)
|
||||||
tcc_error("error reading .out file for input");
|
tcc_error("error reading .out file for input");
|
||||||
|
|
||||||
|
Coff_str_table = (char*)tcc_malloc(str_size);
|
||||||
Coff_str_table = (char *) tcc_malloc(str_size);
|
|
||||||
|
|
||||||
if (fread(Coff_str_table, str_size - 4, 1, f) != 1)
|
if (fread(Coff_str_table, str_size - 4, 1, f) != 1)
|
||||||
tcc_error("error reading .out file for input");
|
tcc_error("error reading .out file for input");
|
||||||
|
@ -920,11 +892,15 @@ ST_FUNC int tcc_load_coff(TCCState * s1, int fd)
|
||||||
name = name2;
|
name = name2;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
// if (strcmp("_DAC_Buffer",name)==0) // tktk
|
// if (strcmp("_DAC_Buffer",name)==0) // tktk
|
||||||
// name[0]=0;
|
// name[0]=0;
|
||||||
|
|
||||||
if (((csym.n_type & 0x30) == 0x20 && csym.n_sclass == 0x2) || ((csym.n_type & 0x30) == 0x30 && csym.n_sclass == 0x2) || (csym.n_type == 0x4 && csym.n_sclass == 0x2) || (csym.n_type == 0x8 && csym.n_sclass == 0x2) || // structures
|
if (((csym.n_type & 0x30) == 0x20 && csym.n_sclass == 0x2) ||
|
||||||
(csym.n_type == 0x18 && csym.n_sclass == 0x2) || // pointer to structure
|
((csym.n_type & 0x30) == 0x30 && csym.n_sclass == 0x2) ||
|
||||||
|
(csym.n_type == 0x4 && csym.n_sclass == 0x2) ||
|
||||||
|
(csym.n_type == 0x8 && csym.n_sclass == 0x2) || // structures
|
||||||
|
(csym.n_type == 0x18 &&
|
||||||
|
csym.n_sclass == 0x2) || // pointer to structure
|
||||||
(csym.n_type == 0x7 && csym.n_sclass == 0x2) || // doubles
|
(csym.n_type == 0x7 && csym.n_sclass == 0x2) || // doubles
|
||||||
(csym.n_type == 0x6 && csym.n_sclass == 0x2)) // floats
|
(csym.n_type == 0x6 && csym.n_sclass == 0x2)) // floats
|
||||||
{
|
{
|
||||||
|
|
Loading…
Add table
Reference in a new issue