aboutsummaryrefslogtreecommitdiff
Commit message (Collapse)AuthorAgeFilesLines
* ELF: Make first PT_LOAD cover headersMichael Matz2014-04-031-5/+10
| | | | | | | | This makes it so that the first PT_LOAD segment covers ELF and program header and .interp (contained in the same page anyway, right before the start of the first loaded section). binutils strip creates invalid output otherwise (which strictly is a binutils bug, but let's be nice anyway).
* x86-64: Use correct ELF valuesMichael Matz2014-04-031-2/+2
| | | | | The x86-64 uses different segment alignment (2MB) and a different start address.
* 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.
* Allow local redefinition of enumeratorThomas Preud'homme2014-03-314-2/+17
|
* Fixed typo from commit 0ac8aaab1bef770929e5592d02bc06d3a529952eVincent Lefevre2014-03-311-1/+1
|
* Update Changelog from git changelog entriesThomas Preud'homme2014-03-311-0/+2
|
* x86-64: shared libs improvementMichael Matz2014-03-312-26/+46
| | | | | | | | | | This correctly resolves local references to global functions from shared libs to their PLT slot (instead of directly to the target symbol), so that interposition works. This is still not 100% conforming (executables don't export symbols that are also defined in linked shared libs, as they must), but normal shared lib situations work.
* x86-64: Add basic shared lib supportMichael Matz2014-03-312-37/+41
| | | | Initial support for shared libraries on x86-64.
* Add __attribute__ ((noreturn)) to tcc_error and expect functions.mingodad2014-03-301-2/+2
| | | | This make use of static analysis tools like scan-build report less false positives.
* Add tests for previous fixesThomas Preud'homme2014-03-3011-1/+30
| | | | | | | | | Add tests for the fixes made in commits 76cb1144ef91924c53c57ea71e6f67ce73ce1cc6, a465b7f58fdea15caa1bfb81ff5e985c94c4df4a, 0f522fb32a635dafce30f3ce3ff2cb15bcec809e, 82969f045c99b4d1ef833de35117c17b326b46c0 and 673befd2d7745a90c1c4fcb6d2f0e266c04f8c97.
* Update Changelog from git changelog entriesThomas Preud'homme2014-03-301-4/+54
|
* x86_64: pass va_list as pointerDaniel Glöckner2014-03-301-4/+4
| | | | | | The ABI requires that va_list is passed as a pointer although its contents is a kept in a structure. Therefore make it a single element array.
* tccpp: reorder some tokensgrischka2014-03-292-21/+56
| | | | | | ... and make future reordering possibly easier related to 9a6ee577f6165dccfde424732bfc6f16f1e2811b
* ARM: Fix passing arrays to varadic functionsDaniel Glöckner2014-03-291-1/+3
| | | | | | | | | | | | | | | | TinyCC miscompiled void g(int,...); void f(void) { char b[4000]; g(1, 2, 3, 4, b); } in two ways: 1. It didn't align the stack to 8 bytes before the call 2. It added sizeof(b) to the stack pointer after the call
* Fix typo in code added by b018bac9c8Thomas Preud'homme2014-03-291-1/+1
|
* Fix again GOT32 + PLT32 reloc commitThomas Preud'homme2014-03-291-4/+3
| | | | | Fix commit aa561d70119accb59a17f10f9ba69076fb0ab516 by setting has_plt_entry once the plt has been created, not before.
* Create bcheck region for argv and arge argumentThomas Preud'homme2014-03-293-0/+23
| | | | | | | | | | | 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.
* Make get_tok_str support NULL as second param.Thomas Preud'homme2014-03-291-0/+6
| | | | | | | As was pointed out on tinycc-devel, many uses of get_tok_str gives as second parameter the value NULL. However, that pointer was unconditionally dereferenced in get_tok_ptr. This commit explicitely add support for thas case.
* The hack to allow valgrind works with tcc compiled programsmingodad2014-03-281-1/+5
| | | | | | have the undesired side effect of programs compiled with debug info segfaulting after debug info been striped more tought must be done here
* New implementation of va_list/va_start/var_copy that do not use dynamic ↵mingodad2014-03-282-30/+28
| | | | memory, with this when compiling fossil-scm with tcc on linux X86_64 it works fine.
* Remove the fix from my last commit, it was pointed by scan-build and is a ↵mingodad2014-03-281-1/+1
| | | | false positive, thanks to grischka for pointing it.
* This allow valgrind to work on linux, some how the PHDR is missing and then ↵mingodad2014-03-281-1/+1
| | | | | | valgrind complain with: Inconsistency detected by ld.so: rtld.c: 1284: dl_main: Assertion `_rtld_local._dl_rtld_map.l_libname' failed!
* Fix a incorrect size for malloc.mingodad2014-03-271-1/+1
|
* After several days searching why my code refactoring to remove globals was ↵mingodad2014-03-262-5/+20
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | crashing, I found the problem it was because CValue stack variables have rubish as it inital values and assigning to a member that is smaller than the big union item and trying to recover it later as a different member gives bak garbage. ST_FUNC void vset(TCCState* tcc_state, CType *type, int r, int v) { CValue cval; memset(&cval, 0, sizeof(CValue)); cval.i = v; //,<<<<<<<<<<< here is the main bug that mix with garbage vsetc(tcc_state, type, r, &cval); } /* store a value or an expression directly in global data or in local array */ static void init_putv(TCCState* tcc_state, CType *type, Section *sec, unsigned long c, int v, int expr_type) { ... case VT_PTR: if (tcc_state->tccgen_vtop->r & VT_SYM) { greloc(tcc_state, sec, tcc_state->tccgen_vtop->sym, c, R_DATA_PTR); } //<<< on the next line is where we try to get the assigned value to cvalue.i as cvalue.ull *(addr_t *)ptr |= (tcc_state->tccgen_vtop->c.ull & bit_mask) << bit_pos; break; Also this patch makes vla tests pass on linux 32 bits
* Simplify and fix GOT32 + PLT32 reloc commitThomas Preud'homme2014-03-262-3/+3
| | | | | | | | Introduce a new attribute to check the existence of a PLT entry for a given symbol has the presence of an entry for that symbol in the dynsym section is not proof that a PLT entry exists. This fixes commit dc8ea93b13faefb565fb937f8b8c08c40c063549.
* Add the generated executables ending with "-cc" and "-tcc" to the makefile ↵mingodad2014-03-261-3/+4
| | | | "clean"
* A possible fix for the memory leak reported by valgrind when running ↵mingodad2014-03-252-0/+3
| | | | tcctest.c with tcc.
* Support GOT32 and PLT32 reloc for same symbolThomas Preud'homme2014-03-251-11/+31
| | | | | | | Some symbol (such as __gmon_start__ but this one does not matter to tcc) can have both a R_386_GOT32 and R_386_PLT32 relocation. It is thus not enough to test if a GOT reloc was already done when deciding whether to return early from put_got_entry.
* Always link libtcc1.a in (useful for va_* on x86)Thomas Preud'homme2014-03-252-6/+3
| | | | On x86 tcc call to function in libtcc1.a to implement va_* functions.
* Add test for previous commitThomas Preud'homme2014-03-255-4/+10
| | | | | * Adapt tests2 Makefile to support testing tcc error reporting * Add test for previous commit
* Warn about soft float ABI not being supportedThomas Preud'homme2014-03-251-0/+3
| | | | | | For ARM target, tcc uses the soft float ABI when not asked to use hard float ABI. This means machine without a VFP co-processor generate code that they cannot run. This commit add a warning for such cases.
* Deprecate FPA and OABI support for ARMThomas Preud'homme2014-03-251-1/+11
|
* Make parse_btype only accept one basic typeThomas Preud'homme2014-03-241-8/+15
| | | | | This makes int char c; and struct {} int c; generate an error. Thanks Mobi Phil for reporting.
* Fix relocation of __bound_initThomas Preud'homme2014-03-171-2/+8
| | | | | | | When bound check is enabled, tcc tries to relocate a call to __bound_init in _init. This means that relocation (in tcc_add_bcheck) must be done after libtcc1.a (which countains __bound_init) is loaded but before crtn.o is loaded as this finalize _init.
* Fix __clear_cache implementationThomas Preud'homme2014-03-111-1/+2
| | | | Forgot to give the parameters to syscall function, doh!
* Adjust relocation offset for thumb to ARM veneerThomas Preud'homme2014-03-111-1/+1
|
* Don't hardcode gcc in tests MakefileThomas Preud'homme2014-03-092-8/+8
|
* Fix warning of clangThomas Preud'homme2014-03-093-24/+24
|
* Use intptr_t to cast pointerThomas Preud'homme2014-03-091-1/+3
|
* Undefine __va* in libtcc1 to avoid errors w/ clangThomas Preud'homme2014-03-091-0/+5
|
* Make condition in libtcc1 based on targetThomas Preud'homme2014-03-091-5/+5
| | | | | | Prior to this commit runtime library was compiled according to the host because of the macro used to detec what architecture to choose. This commit fixes this by using the TARGET_* macro instead.
* Fix type_to_str test for unsigned intThomas Preud'homme2014-03-091-1/+1
|
* Fix various errors uncovered by static analysisThomas Preud'homme2014-03-084-5/+2
| | | | Reported-by: Carlos Montiers <cmontiers@gmail.com>
* libtcc: ignore linker optizimization and as-needed options. This allows ↵Austin English2014-03-061-0/+4
| | | | compiling some packages from Gentoo's portage
* Call fill_got_entry unconditionallyThomas Preud'homme2014-02-101-2/+0
| | | | | | Call fill_got_entry unconditionally from fill_got so as to avoid warnings on !x86-64 architectures. This can be done since this code path is only followed by x86-64 architecture anyway.
* Define float_eabi only in arm-gen.oThomas Preud'homme2014-02-091-2/+2
|
* conftest: fix globbing to match MSVCAustin English2014-02-081-0/+4
|
* Fix warning about undeclared __clear_cache function call.Christian Jullien2014-02-081-0/+1
|
* Ignore VT_DEFSIGN in load on x86-64 archThomas Preud'homme2014-02-071-1/+1
| | | | | This fixes commit b0b5165d1668373c5d7b7933da599426f33e723b for x86-64 targets.
* Def signedness != signed != unsigned for charThomas Preud'homme2014-02-064-15/+26
| | | | | | | | When checking for exact compatibility between types (such as in __builtin_types_compatible_p) consider the case of default signedness to be incompatible with both of the explicit signedness for char. That is, char is incompatible with signed char *and* unsigned char, no matter what the default signedness for char is.