From 05108a3b0a8eff70739b253b8995999b1861f9f2 Mon Sep 17 00:00:00 2001 From: grischka Date: Tue, 12 Feb 2013 19:13:28 +0100 Subject: libtcc: new LIBTCCAPI tcc_set_options(TCCState*, const char*str) This replaces -> use instead: ----------------------------------- - tcc_set_linker -> tcc_set_options(s, "-Wl,..."); - tcc_set_warning -> tcc_set_options(s, "-W..."); - tcc_enable_debug -> tcc_set_options(s, "-g"); parse_args is moved to libtcc.c (now tcc_parse_args). Also some cleanups: - reorder TCCState members - add some comments here and there - do not use argv's directly, make string copies - use const char* in tcc_set_linker - tccpe: use fd instead of fp tested with -D MEM_DEBUG: 0 bytes left --- win32/tcc-win32.txt | 44 +++++++++++++++++++++++--------------------- win32/tools/tiny_impdef.c | 33 +++++++++++++++++---------------- win32/tools/tiny_libmaker.c | 4 ++-- 3 files changed, 42 insertions(+), 39 deletions(-) (limited to 'win32') diff --git a/win32/tcc-win32.txt b/win32/tcc-win32.txt index 12f6ae7..dc06b8f 100644 --- a/win32/tcc-win32.txt +++ b/win32/tcc-win32.txt @@ -6,13 +6,11 @@ under MS-Windows. See tcc-doc.html to have all the features. - Installation from the binary ZIP package: ----------------------------------------- Unzip the package to a directory of your choice. - Set the system PATH: -------------------- To be able to invoke the compiler from everywhere on your computer by @@ -20,7 +18,6 @@ system PATH. - Examples: --------- Open a console window (DOS box) and 'cd' to the examples directory. @@ -39,9 +36,23 @@ tiny_impdef dll.dll (optional) tcc hello_dll.c dll.def - For the 'libtcc_test' example type - tcc examples/libtcc_test.c -I libtcc -L libtcc -ltcc + Using libtcc as JIT compiler in your program + -------------------------------------------- + Check out the 'libtcc_test' example: + + - Running it from source: + tcc -I libtcc libtcc/libtcc.def -run examples/libtcc_test.c + + - Compiling with TCC: + tcc examples/libtcc_test.c -I libtcc libtcc/libtcc.def + + - Compiling with MinGW: + gcc examples/libtcc_test.c -I libtcc libtcc.dll + + - Compiling with MSVC: + lib /def:libtcc\libtcc.def /out:libtcc.lib + cl /MD examples/libtcc_test.c -I libtcc libtcc.lib Import Definition Files: @@ -58,7 +69,6 @@ the TCC commandline to link a program that uses opengl32.dll. - Header Files: ------------- The system header files (except _mingw.h) are from the MinGW @@ -71,7 +81,6 @@ into your "tcc/include/winapi" directory. - Resource Files: --------------- TCC can link windows resources in coff format as generated by MinGW's @@ -81,7 +90,6 @@ tcc app.c appres.o -o app.exe - Tiny Libmaker: -------------- The included tiny_libmaker tool by Timovj Lahde can be used as @@ -90,29 +98,26 @@ tiny_libmaker [rcs] library objectfiles ... - Compilation from source: ------------------------ * You can use the MinGW and MSYS tools available at http://www.mingw.org - Untar the TCC archive and type in the MSYS shell: + Untar the TCC archive and type in the MSYS shell: - ./configure - make - make install + ./configure [--prefix installpath] + make + make install The default install location is c:\Program Files\tcc - * Alternatively you can compile TCC with just GCC from MinGW using - win32\build-tcc.bat - - To install, copy the entire contents of the win32 directory to - where you want. + build-tcc.bat (from the win32 directory) + To install, copy the entire contents of the win32 directory to + where you want. Limitations: @@ -128,7 +133,6 @@ - Bounds checking (option -b) is not supported on 64-bit OS. - Documentation and License: -------------------------- TCC is distributed under the GNU Lesser General Public License. (See @@ -139,7 +143,6 @@ http://fabrice.bellard.free.fr/tcc/ - WinAPI Help and 3rd-party tools: -------------------------------- The Windows API documentation (Win95) in a single .hlp file is @@ -150,5 +153,4 @@ "ResEd", available at the RadASM website. - --- grischka diff --git a/win32/tools/tiny_impdef.c b/win32/tools/tiny_impdef.c index 586c49d..1739549 100644 --- a/win32/tools/tiny_impdef.c +++ b/win32/tools/tiny_impdef.c @@ -25,9 +25,10 @@ #define WIN32_LEAN_AND_MEAN #include #include +#include #include -char *get_export_names(FILE *fp); +char *get_export_names(int fd); #define tcc_free free #define tcc_realloc realloc @@ -114,7 +115,7 @@ usage: if (v) printf("--> %s\n", file); - p = get_export_names(fp); + p = get_export_names(fileno(fp)); if (NULL == p) { fprintf(stderr, "tiny_impdef: could not get exported function names.\n"); goto the_end; @@ -149,18 +150,18 @@ the_end: return ret; } -/* -------------------------------------------------------------- */ - -int read_mem(FILE *fp, unsigned offset, void *buffer, unsigned len) +int read_mem(int fd, unsigned offset, void *buffer, unsigned len) { - fseek(fp, offset, 0); - return len == fread(buffer, 1, len, fp); + lseek(fd, offset, SEEK_SET); + return len == read(fd, buffer, len); } +/* -------------------------------------------------------------- */ + /* -------------------------------------------------------------- */ #endif -char *get_export_names(FILE *fp) +char *get_export_names(int fd) { int l, i, n, n0; char *p; @@ -182,20 +183,20 @@ char *get_export_names(FILE *fp) n = n0 = 0; p = NULL; - if (!read_mem(fp, 0, &dh, sizeof dh)) + if (!read_mem(fd, 0, &dh, sizeof dh)) goto the_end; - if (!read_mem(fp, dh.e_lfanew, &sig, sizeof sig)) + if (!read_mem(fd, dh.e_lfanew, &sig, sizeof sig)) goto the_end; if (sig != 0x00004550) goto the_end; pef_hdroffset = dh.e_lfanew + sizeof sig; - if (!read_mem(fp, pef_hdroffset, &ih, sizeof ih)) + if (!read_mem(fd, pef_hdroffset, &ih, sizeof ih)) goto the_end; if (MACHINE != ih.Machine) goto the_end; opt_hdroffset = pef_hdroffset + sizeof ih; sec_hdroffset = opt_hdroffset + sizeof oh; - if (!read_mem(fp, opt_hdroffset, &oh, sizeof oh)) + if (!read_mem(fd, opt_hdroffset, &oh, sizeof oh)) goto the_end; if (IMAGE_DIRECTORY_ENTRY_EXPORT >= oh.NumberOfRvaAndSizes) @@ -204,7 +205,7 @@ char *get_export_names(FILE *fp) addr = oh.DataDirectory[IMAGE_DIRECTORY_ENTRY_EXPORT].VirtualAddress; //printf("addr: %08x\n", addr); for (i = 0; i < ih.NumberOfSections; ++i) { - if (!read_mem(fp, sec_hdroffset + i * sizeof ish, &ish, sizeof ish)) + if (!read_mem(fd, sec_hdroffset + i * sizeof ish, &ish, sizeof ish)) goto the_end; //printf("vaddr: %08x\n", ish.VirtualAddress); if (addr >= ish.VirtualAddress && addr < ish.VirtualAddress + ish.SizeOfRawData) @@ -214,18 +215,18 @@ char *get_export_names(FILE *fp) found: ref = ish.VirtualAddress - ish.PointerToRawData; - if (!read_mem(fp, addr - ref, &ied, sizeof ied)) + if (!read_mem(fd, addr - ref, &ied, sizeof ied)) goto the_end; namep = ied.AddressOfNames - ref; for (i = 0; i < ied.NumberOfNames; ++i) { - if (!read_mem(fp, namep, &ptr, sizeof ptr)) + if (!read_mem(fd, namep, &ptr, sizeof ptr)) goto the_end; namep += sizeof ptr; for (l = 0;;) { if (n+1 >= n0) p = tcc_realloc(p, n0 = n0 ? n0 * 2 : 256); - if (!read_mem(fp, ptr - ref + l, p + n, 1) || ++l >= 80) { + if (!read_mem(fd, ptr - ref + l, p + n, 1) || ++l >= 80) { tcc_free(p), p = NULL; goto the_end; } diff --git a/win32/tools/tiny_libmaker.c b/win32/tools/tiny_libmaker.c index a85c685..62d2a2e 100644 --- a/win32/tools/tiny_libmaker.c +++ b/win32/tools/tiny_libmaker.c @@ -79,7 +79,7 @@ int main(int argc, char **argv) ElfW(Sym) *sym; int i, fsize, iarg; char *buf, *shstr, *symtab = NULL, *strtab = NULL; - int symtabsize = 0, strtabsize = 0; + int symtabsize = 0;//, strtabsize = 0; char *anames = NULL; int *afpos = NULL; int istrlen, strpos = 0, fpos = 0, funccnt = 0, funcmax, hofs; @@ -171,7 +171,7 @@ int main(int argc, char **argv) if (!strcmp(shstr + shdr->sh_name, ".strtab")) { strtab = (char *)(buf + shdr->sh_offset); - strtabsize = shdr->sh_size; + //strtabsize = shdr->sh_size; } } } -- cgit v1.3.1