aboutsummaryrefslogtreecommitdiff
path: root/lib
Commit message (Collapse)AuthorAgeFilesLines
* tests: OOT build fixes etc.grischka2016-12-201-11/+6
| | | | | | | | | | | | | | | | | | | | | | tests/Makefile: fix out-of-tree build issues Also: - win64: align(16) MEM_DEBUG user memory on win64 the struct jmp_buf in the TCCState structure which we allocate by tcc_malloc needs alignment 16 because the msvcrt setjmp uses MMX instructions. - libtcc_test.c: win32/64 need __attribute__((dllimport)) for extern data objects - tcctest.c: exclude stuff that gcc does not compile except for relocation_test() the other issues are mostly ASM related. We should probably check GCC versions but I have no idea which mingw/gcc versions support what and which don't. - lib/Makefile: use tcc to compile libtcc1.a (except on arm which needs arm-asm
* libtcc1: Don't use stdlib functionsMichael Matz2016-12-151-3/+0
| | | | | | | | | | | libtcc1 is the compiler support library and therefore needs to function in a freestanding environment. In particular it can't just use fprintf or stderr, which it was on x86-64 (but only when compiled by GCC). The tight integration between libtcc1 and tcc itself makes it impossible to ever reach that case so the abort() there is enough. abort() is strictly speaking also not available in a freestanding environment, but it often is nevertheless.
* Remove warning when __builtin_frame_address is used with gcc >= 6.Christian Jullien2016-11-301-0/+13
|
* lib/libtcc1.c: cleanupgrischka2016-10-191-35/+15
| | | | | | | - remove #include dependencies from libtcc1.c for easier cross compilation - clear_cache only on ARM - error-message for mprotect failure
* configure: --triplet= option, Makefile: cleanupgrischka2016-10-171-5/+4
|
* win32/64: msys2 supportgrischka2016-10-021-5/+6
| | | | | | | | | | | | Support ./configure && make under msys2 (a new msys fork) on win32 and win64. Get rid of CONFIG_WIN64 make-var. (On windows, WIN32 in general is used for both 32 and 64 bit platforms) Also: - cleanup win32/build-tcc.bat - adjust win32/(doc/)tcc-win32.tx
* Incorrect function call code on ARMv6Balazs Kezes2016-10-011-1/+1
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | On 2016-08-11 09:24 +0100, Balazs Kezes wrote: > I think it's just that that copy_params() never restores the spilled > registers. Maybe it needs some extra code at the end to see if any > parameters have been spilled to stack and then restore them? I've spent some time on this and I've found an alternative solution. Although I'm not entirely sure about it but I've attached a patch nevertheless. And while poking at that I've found another problem affecting the unsigned long long division on arm and I've attached a patch for that too. More details in the patches themselves. Please review and consider them for merging! Thank you! -- Balazs [PATCH 1/2] Fix slow unsigned long long division on ARM The macro AEABI_UXDIVMOD expands to this bit: #define AEABI_UXDIVMOD(name,type, rettype, typemacro) \ ... while (num >= den) { \ ... while ((q << 1) * den <= num && q * den <= typemacro ## _MAX / 2) \ q <<= 1; \ ... With the current ULONG_MAX version the inner loop goes only until 4 billion so the outer loop will progress very slowly if num is large. With ULLONG_MAX the inner loop works as expected. The current version is probably a result of a typo. The following bash snippet demonstrates the bug: $ uname -a Linux eper 4.4.16-2-ARCH #1 Wed Aug 10 20:03:13 MDT 2016 armv6l GNU/Linux $ cat div.c int printf(const char *, ...); int main(void) { unsigned long long num, denom; num = 12345678901234567ULL; denom = 7; printf("%lld\n", num / denom); return 0; } $ time tcc -run div.c 1763668414462081 real 0m16.291s user 0m15.860s sys 0m0.020s [PATCH 2/2] Fix long long dereference during argument passing on ARMv6 For some reason the code spills the register to the stack. copy_params in arm-gen.c doesn't expect this so bad code is generated. It's not entirely clear why the saving part is necessary. It was added in commit 59c35638 with the comment "fixed long long code gen bug" with no further clarification. Given that tcctest.c passes without this, maybe it's no longer needed? Let's remove it. Also add a new testcase just for this. After I've managed to make the tests compile on a raspberry pi, I get the following diff without this patch: --- test.ref 2016-08-22 22:12:43.380000000 +0100 +++ test.out3 2016-08-22 22:12:49.990000000 +0100 @@ -499,7 +499,7 @@ 2 1 0 1 0 4886718345 -shift: 9 9 9312 +shift: 291 291 291 shiftc: 36 36 2328 shiftc: 0 0 9998683865088 manyarg_test: More discussion on this thread: https://lists.nongnu.org/archive/html/tinycc-devel/2016-08/msg00004.html
* build: restore out-of-tree supportgrischka2016-10-011-8/+8
|
* build: revert Makefiles to 0.9.26 state (mostly)grischka2016-10-011-58/+42
| | | | | | | | | | | | Except - that libtcc1.a is now installed in subdirs i386/ etc. - the support for arm and arm64 - some of the "Darwin" fixes - tests are mosly unchanged Also - removed the "legacy links for cross compilers" (was total mess) - removed "out-of-tree" build support (was broken anyway)
* Revert part of "fix installation amd bcheck for Windows"grischka2016-10-012-28/+36
| | | | | | | tccelf.c : force linking bcheck by adding elf symbol __bound_init bcheck.c : use (size_t)1 for x86_64 Fixes 7e7e6148fdb4adbda936f80b5d4ac3d738908d95
* Remove misc. filesgrischka2016-10-011-510/+0
| | | | | | | | | | | | - from win32/include/winapi: various .h The winapi header set cannot be complete no matter what. So lets have just the minimal set necessary to compile the examples. - remove CMake support (hard to keep up to date) - some other files Also, drop useless changes in win32/lib/(win)crt1.c
* [avih] a custom build dir fix for lib/Makefileseyko2016-05-201-4/+4
| | | | | | | | | | | mkdir build; cd build ../configure && make ../../lib/libtcc1.c:31: error: include file 'stddef.h' not found Author: Avi Halachmi Date: Sat Nov 14 18:40:36 2015 +0200 When building from the root tcc dir, $TOP and $top_srcdir are the same, but with a custom build dir, we need top_srcdir
* fix a mingw64 build on Linux with --enable-tcc64-mingwseyko2016-05-201-1/+1
| | | | | * define CONFIG_WIN64=yes when ARCH=x86-64 (not CONFIG_WIN32=yes) * CONFIG_WIN64 now use a windows install part (not a Linux one)
* lib/Makefile: filter-out -b flag from XFLAGSseyko2015-11-081-1/+1
| | | | | to build tcc with bound checking ./configure --cc=tcc --extra-cflags-b
* lib/libtcc1.c: Replace "long" with "unsigned int" in union float_long.Edmund Grimley Evans2015-11-041-1/+1
|
* Correct prototype: void __clear_cache(void *, void *).Edmund Grimley Evans2015-10-152-3/+3
|
* Revert all of my changes to directories & codingstyle.gus knight2015-07-293-49/+49
|
* Reorganize the source tree.gus knight2015-07-271-8/+8
| | | | | | | | | | * Documentation is now in "docs". * Source code is now in "src". * Misc. fixes here and there so that everything still works. I think I got everything in this commit, but I only tested this on Linux (Make) and Windows (CMake), so I might've messed something up on other platforms...
* Trim trailing spaces everywhere.gus knight2015-07-272-41/+41
|
* a bounds checking code for the ARCH=x86_64seyko2015-04-103-54/+119
|
* fix installation amd bcheck for Windowsseyko2015-04-102-10/+25
| | | | | | | | | | | | | | | | | | | | | | * define targetos=Windows when --enable-tcc32-mingw, --enable-cygwin, ... * use TARGETOS insteed HOST_OS when selecting PROGS * use "$(tccdir)" insteed $(tccdir) on install (spaces in path) * install tcc.exe too * produce bcheck.o when cross-compiling too (lib/Makefile) * force bcheck.o linking by compiling inside tcc_set_output_type() a dummy program with local array. Otherwise bcheck.o may be not linked. * replace %xz format specifier with %p in bcheck (don't supported on Windows) * call a __bound_init when __bound_ptr_add, __bound_ptr_indir, __bound_new_region, __bound_delete_region called. This is because a __bound_init inside ".init" section is not called on Windows for unknown reason. * print on stderr a message when an illegal pointer is returned: there is no segmentation violation on Windows for a program compiled with "tcc -b" * remove "C:" subdir on clean if $HOST_OS = "Linux" * default CFLAGS="-Wall -g -O0" insteed CFLAGS="-Wall -g -O2" to speed up compilation and more precise debugging.
* a small revers for bcheck.o changes (d80593bc4d43)seyko2015-03-301-1/+1
| | | | | | replacing (addr > e->size) with (addr >= e->size) was correct only in one place, a second replacing is reversed by this commit.
* Fix for Microsoft compilersseyko2015-03-291-1/+1
| | | | | Miccrosoft Visual Sudio (Express) 2008 and 2010 do not accept variable definitions C99 style, reported by Fabio <oldfaber@gmail.com>
* fix for the bcheck.o (bug #14958)seyko2015-03-291-13/+59
| | | | | | | | | | | | | | | | | | | | | | | | | | | - care about __attribute__ redefinition in the system headers - an invalid pointer must be returned when (addr >= e->size), and not (addr > e->size) A test program: #include <stdio.h> #include <stdlib.h> int main () { int v[10]; fprintf(stderr, "&v[0] = %p\n", &v[0]); fprintf(stderr, "&v[10] = %p\n", &v[10]); exit(1); return 0; } // tcc -b test.c The output before a patch: &v[0] = 0xbf929d8c &v[10] = 0xbf929db4 The output after a patch: &v[0] = 0xbff6e33c &v[10] = 0xfffffffe
* make a bound checking more compatible with Windows 64seyko2015-03-261-38/+38
| | | | | | On Linux 32: sizeof(long)=32 == sizeof(void *)=32 on Linux 64: sizeof(long)=64 == sizeof(void *)=64 on Windows 64: sizeof(long)=32 != sizeof(void *)=64
* libtcc1.a while "configure --enable-cross"seyko2015-03-201-1/+1
| | | | | build and install libtcc1.a for i386, x86_64 and arm64 (libtcc1.a for x86_64 was not installed on i386)
* "configure --enable-cross" on x86: build a libtcc1.a for x86_64seyko2015-03-191-4/+2
|
* lib/Makefile: Partial revert of 896a0c881ac3.Edmund Grimley Evans2015-03-101-1/+0
| | | | lib/lib-arm64.c must be compiled by tcc.
* don't use a *-tcc to compile *.S files for ARM*seyko2015-03-101-0/+2
| | | | | A tcc for ARM* don't have an assembler. This is partial reverse of the commit build-libtcc1-by-tcc: use a new tcc to compile a libtcc1.c and alloca.S
* x86-64: Fix stdarg for large non-float structsMichael Matz2015-03-091-4/+3
| | | | | | | | | | Some structs are passed in registers. When they need more than one the implementation of __va_arg on x86-64 didn't correctly account for this. This fixes only the cases where the structs consist of integer types, as there the register save area is consecutive. Fixes some tests from 73_arm64.c, but still leaves those failing that use floating point in the large-but-regpassed structs.
* arm64: Implement __clear_cache.Edmund Grimley Evans2015-03-081-1/+1
| | | | | | __clear_cache is defined in lib-arm64.c with a single call to __arm64_clear_cache, which is the real built-in function and is turned into inline assembler by gen_clear_cache in arm64-gen.c
* partial revert of the commit 4ad186c5ef61seyko2015-03-041-0/+14
| | | | | | | | | | | | | | | A test program: /* result of the new version inroduced in 4ad186c5ef61: t2a = 44100312 */ #include<stdio.h> int main() { int t1 = 176401255; float f = 0.25f; int t2a = (int)(t1 * f); // must be 44100313 int t2b = (int)(t1 * (float)0.25f); printf("t2a=%d t2b=%d \n",t2a,t2b); return 0; }
* gcc options and mingw: move a gcc options detection from a makefile to the ↵seyko2015-03-041-3/+3
| | | | | | | | configure + define XCC and XAR if mingw32 defined + use XCC and XAR in lib/Makefile if defined Try "./configure --enable-mingw32; make". This must work
* an unification of the tcc cross names for a windowsseyko2015-03-041-5/+5
| | | | | | | | | | | | | | | | | | | | | | produce a i386-win-mingw32-tcc i386-win-tcc x86_64-win-mingw32-tcc x86_64-win-tcc arm-win-mingw32ce-tcc arm-win-tcc instead of the i386-w64-mingw32-tcc i386-win32-tcc x86_64-w64-mingw32-tcc x86_64-win32-tcc arm-wince-mingw32ce-tcc arm-win32-tcc Replacing a *-win32 directory names with a *-win names because this names are based on the names of the tcc x86_64-win32-tcc, i386-win32-tcc
* build-libtcc1-by-tcc: use a new tcc to compile a libtcc1.c and alloca.Sseyko2015-03-041-7/+0
| | | | | | | This will allow to build a libtcc1.a even if a bootstrap compiler don't support a target arch. There was alrady this feature but only for OS Darwin.
* x86_64-tcc and libtcc1.c: size_t definition is needed for a x86_64-tcc to ↵seyko2015-03-031-1/+2
| | | | parse memset()
* remove a gcc warning for bcheck on x86_64 arch: conversion to pointer from ↵seyko2015-03-031-2/+4
| | | | integer of different size
* Add arm64 (AArch64) as a target architecture.Edmund Grimley Evans2015-02-233-0/+1174
|
* Don't build libtcc1 with -fstack-protector-strongMatteo Cypriani2014-09-071-0/+4
| | | | | | | Prevent libtcc1.a to be compiled with -fstack-protector-strong, so that linking with tcc doesn't fail because symbol '__stack_chk_fail_local' is not present in libtcc1.a. This is useful only if the CFLAGS passed from the main Makefile contain this flag.
* Fix mistake. Change jb by jbe. tiny c round (INT_MAX = 0x7FFFFFFF) to a ↵Carlos Montiers2014-07-103-3/+3
| | | | DWORD boundary and it becomes 0x80000000. Jle treats as -214783648, but Jbe treats as 214783648. Thanks to Jason Hood for explain me this.
* Fix problem using alloca function, executable crashed even with a exception ↵Carlos Montiers2014-07-103-6/+6
| | | | handler function, when try to allocate INT_MAX. Patch provided by Jason Hood in private e-mail, when I ask to him for help. He say: Feel free to pass it on to the mailing list.
* Specify license of lib/armeabi.cThomas Preud'homme2014-07-011-0/+21
|
* build: add initial NetBSD support.minux2014-04-121-2/+2
| | | | | | | | | | | | Not able to generate ELF files on NetBSD yet (lacks the note and crt1.o is actually named crt0.o on NetBSD), but -run works with these extra defines: -D__lint__ -D"__symbolrename(x)=asm(#x)" -D__NetBSD__ The -D__lint__ is an ugly hack, TCC should be able to emulate GCC just fine, but it seems TCC doesn't support __builtin_va_list yet? typedef __builtin_va_list __va_list; /usr/include/sys/ansi.h:72: error: ';' expected (got "__va_list")
* Corrected spelling mistakes in comments and stringsVincent Lefevre2014-04-071-1/+1
|
* win32: libtcc1.a needs to be built with tccgrischka2014-04-071-2/+5
| | | | | gcc/mingw produces msvc compatible pecoff objects, tcc only knows ELF.
* arm: Provide alloca()Michael Matz2014-04-052-2/+13
| | | | | | This provides a simple implementation of alloca for ARM (and enables the associated testcase). As tcc for ARM doesn't contain an assembler, we'll have to resort using gcc for compiling it.
* shared libs: Build libtcc1.a with -fPICMichael Matz2014-04-021-1/+5
| | | | | TCCs runtime library must be compiled as position independend code, so it can be linked into shared libraries.
* Create bcheck region for argv and arge argumentThomas Preud'homme2014-03-291-0/+7
| | | | | | | | | | | For program manipulating argv or arge as pointer with construct such as: (while *argv++) { do_something_with_argv; } it is necessary to have argv and arge inside a region. This patch create regions argv and arge) if main is declared with those parameters.
* New implementation of va_list/va_start/var_copy that do not use dynamic ↵mingodad2014-03-281-21/+9
| | | | memory, with this when compiling fossil-scm with tcc on linux X86_64 it works fine.
* Fix __clear_cache implementationThomas Preud'homme2014-03-111-1/+2
| | | | Forgot to give the parameters to syscall function, doh!