From bb07bf31aae1bcb4c3590f61210c46c0d3a37433 Mon Sep 17 00:00:00 2001 From: bellard Date: Sat, 23 Oct 2004 22:52:58 +0000 Subject: [PATCH] update --- Changelog | 3 +++ tcccoff.c | 32 +++++++++----------------------- tcctest.c | 9 +++++++++ tcctok.h | 2 ++ 4 files changed, 23 insertions(+), 23 deletions(-) diff --git a/Changelog b/Changelog index 6864475e..9f3f2493 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 7f60ccfb..ecc91eda 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 7113428b..f1ebfacd 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 dc9849ae..bda455cd 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)