aboutsummaryrefslogtreecommitdiff
path: root/tcccoff.c
diff options
context:
space:
mode:
authorbellard <bellard>2004-10-23 22:52:58 +0000
committerbellard <bellard>2004-10-23 22:52:58 +0000
commitbb07bf31aae1bcb4c3590f61210c46c0d3a37433 (patch)
treeb942e1baa8cce8e50147d3a39c069dc3091f6b5c /tcccoff.c
parenteb79471184b9771f0638d022a093c1885652e3fb (diff)
downloadtinycc-bb07bf31aae1bcb4c3590f61210c46c0d3a37433.tar.gz
tinycc-bb07bf31aae1bcb4c3590f61210c46c0d3a37433.tar.bz2
update
Diffstat (limited to 'tcccoff.c')
-rw-r--r--tcccoff.c32
1 files changed, 9 insertions, 23 deletions
diff --git a/tcccoff.c b/tcccoff.c
index 7f60ccf..ecc91ed 100644
--- a/tcccoff.c
+++ b/tcccoff.c
@@ -73,9 +73,8 @@ typedef struct {
unsigned short dummy4;
} AUXEF;
-int tcc_output_coff(TCCState *s1, const char *OutFile)
+int tcc_output_coff(TCCState *s1, FILE *f)
{
- FILE *f;
Section *tcc_sect;
SCNHDR *coff_sec;
int file_pointer;
@@ -84,12 +83,6 @@ int tcc_output_coff(TCCState *s1, const char *OutFile)
FILHDR file_hdr; /* FILE HEADER STRUCTURE */
Section *stext, *sdata, *sbss;
- f = fopen(OutFile, "wb");
-
- if (!f) {
- error("Unable to open output file");
- }
-
stext = FindSection(s1, ".text");
sdata = FindSection(s1, ".data");
sbss = FindSection(s1, ".bss");
@@ -237,7 +230,7 @@ int tcc_output_coff(TCCState *s1, const char *OutFile)
EndAddress[nFuncs] = pc;
FuncEntries[nFuncs] =
(file_pointer -
- LineNoFilePtr[nFuncs]) / LINESZ;
+ LineNoFilePtr[nFuncs]) / LINESZ - 1;
LastLineNo[nFuncs++] = last_line_num + 1;
} else {
// beginning of function
@@ -703,8 +696,6 @@ int tcc_output_coff(TCCState *s1, const char *OutFile)
tcc_free(Coff_str_table);
}
- fclose(f);
-
return 0;
}
@@ -843,18 +834,13 @@ int FindCoffSymbolIndex(const char *func_name)
return n; // total number of symbols
}
-
-
-
-
-
BOOL OutputTheSection(Section * sect)
{
const char *s = sect->name;
- if (s == ".text")
+ if (!strcmp(s, ".text"))
return true;
- else if (s == ".data")
+ else if (!strcmp(s, ".data"))
return true;
else
return 0;
@@ -862,15 +848,15 @@ BOOL OutputTheSection(Section * sect)
short int GetCoffFlags(const char *s)
{
- if (s == ".text")
+ if (!strcmp(s, ".text"))
return STYP_TEXT | STYP_DATA | STYP_ALIGN | 0x400;
- else if (s == ".data")
+ else if (!strcmp(s, ".data"))
return STYP_DATA;
- else if (s == ".bss")
+ else if (!strcmp(s, ".bss"))
return STYP_BSS;
- else if (s == ".stack")
+ else if (!strcmp(s, ".stack"))
return STYP_BSS | STYP_ALIGN | 0x200;
- else if (s == ".cinit")
+ else if (!strcmp(s, ".cinit"))
return STYP_COPY | STYP_DATA | STYP_ALIGN | 0x200;
else
return 0;