aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--Changelog3
-rw-r--r--tcccoff.c32
-rw-r--r--tcctest.c9
-rw-r--r--tcctok.h2
4 files changed, 23 insertions, 23 deletions
diff --git a/Changelog b/Changelog
index 6864475..9f3f249 100644
--- a/Changelog
+++ b/Changelog
@@ -14,6 +14,9 @@ version 0.9.21:
- '-Ttext' linker option
- section alignment fixes
- bit fields fixes
+- do not generate code for unused inline functions
+- '-oformat' linker option.
+- added 'binary' output format.
version 0.9.20:
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;
diff --git a/tcctest.c b/tcctest.c
index 7113428..f1ebfac 100644
--- a/tcctest.c
+++ b/tcctest.c
@@ -1599,6 +1599,15 @@ void longlong_test(void)
printf("%lld\n", value(&a));
}
lloptest(0x80000000, 0);
+
+ /* another long long spill test */
+ {
+ long long *p, v;
+ v = 1;
+ p = &v;
+ p[0]++;
+ printf("%lld\n", *p);
+ }
}
void vprintf1(const char *fmt, ...)
diff --git a/tcctok.h b/tcctok.h
index dc9849a..bda455c 100644
--- a/tcctok.h
+++ b/tcctok.h
@@ -181,6 +181,8 @@
DEF_ASM(skip)
DEF_ASM(space)
DEF_ASM(string)
+ DEF_ASM(asciz)
+ DEF_ASM(ascii)
DEF_ASM(globl)
DEF_ASM(global)
DEF_ASM(text)