| Commit message (Collapse) | Author | Age | Files | Lines |
| ... | |
| | | |
|
| | | |
|
| | | |
|
| | | |
|
| | |
| |
| |
| |
| |
| |
| |
| |
| | |
- remove -norunsrc switch
Meaning and usage (-run -norun...???) look sort of screwed. Also
general usefulness is unclear, so it was actually to support exactly
one (not even very interesting) test
This partially reverts e31579b0769e1f9c0947d12e83316d1149307b1a
|
| | |
| |
| |
| |
| | |
gcc/mingw produces msvc compatible pecoff objects, tcc only
knows ELF.
|
| | |
| |
| |
| |
| |
| | |
For conformance to ISO C the stdbool.h header has to provide
the macro __bool_true_false_are_defined (defined to 1). Yep,
that name is really in the standard.
|
| | |
| |
| |
| |
| | |
Some old glibcs <wctype.h> require <stddef.h> to provide
wint_t, accomodate them.
|
| | |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| | |
*** UNCONDITIONALLY ***
Esp. sihce tinycc winapi headers are not as complete as people might
expect this can otherwise lead to obscure problems that are difficult
to debug.
(Originally 'warn_implicit_function_declaration' was set to 1
always for windows but someone must have deleted that line)
|
| | |
| |
| |
| |
| | |
The last users of it went away, no use in keeping
this code.
|
| | |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| | |
Same as with x86_64, disable the runtime_plt_and_got hack
for -run on arm as well. For that we need to handle several
relocations as (potentially) generating PLT slots as well.
Tested with mpfr-3.1.2 and gawk (both using --disable-shared),
there are two resp. five pre-existing problems, so no regressions.
This also works toward enabling real shared libs for arm,
but it's not there yet.
|
| | |
| |
| |
| |
| |
| | |
This makes us use the normal PLT/GOT codepaths also for -run,
which formerly used an on-the-side blob for the jump tables.
For x86_64 only for now, arm coming up.
|
| | |
| |
| |
| |
| |
| | |
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.
|
| | | |
|
| | |
| |
| |
| |
| | |
The individual tests in tests2 are checked only with -run. Build
(and check) executables as well, to test also building executables.
|
| | |
| |
| |
| |
| |
| |
| | |
These relocations are used to express a dependency on a certain
symbol (e.g. for EABIs exception handling to the
__aeabi_unwind_cpp_pr{0,1,2} routines). Just ignore them in
reloc processing.
|
| | |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| | |
This was going wrong (case TOK_LAND in unary: computed labels)
- vset(&s->type, VT_CONST | VT_SYM, 0);
- vtop->sym = s;
This does the right thing and is shorter:
+ vpushsym(&s->type, s);
Test case was:
int main(int argc, char **argv)
{
int x;
static void *label_return = &&lbl_return;
printf("label_return = %p\n", label_return);
goto *label_return; //<<<<< here segfault on linux X86_64 without the memset on vset
printf("unreachable\n");
lbl_return:
return 0;
}
Also::
- Rename "void* CValue.ptr" to more usable "addr_t ptr_offset"
and start to use it in obvious cases.
- use __attribute__ ((noreturn)) only with gnu compiler
- Revert CValue memsets ("After several days searching ...")
commit 4bc83ac3933efa565ae3326b55fcd711b63c073d
Doesn't mean that the vsetX/vpush thingy isn't brittle and
there still might be bugs as to differences in how the CValue
union was set and is then interpreted later on.
However the big memset hammer was just too slow (-3% overall).
|
| | |
| |
| |
| |
| |
| |
| | |
When output is memory we applied the correct GOT offset for certain
relocations (e.g. _GOT32), but we forgot to actually fill the got
entries with the final symbol values, so unconditionally create relocs
against .got as well.
|
| | |
| |
| |
| |
| |
| |
| |
| | |
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).
|
| | |
| |
| |
| |
| | |
The x86-64 uses different segment alignment (2MB) and a different
start address.
|
| | |
| |
| |
| |
| | |
TCCs runtime library must be compiled as position independend code,
so it can be linked into shared libraries.
|
| | | |
|
| | | |
|
| | | |
|
| | |
| |
| |
| |
| |
| |
| |
| |
| |
| | |
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.
|
| | |
| |
| |
| | |
Initial support for shared libraries on x86-64.
|
| | |
| |
| |
| | |
This make use of static analysis tools like scan-build report less false positives.
|
| | |
| |
| |
| |
| |
| |
| |
| |
| | |
Add tests for the fixes made in commits
76cb1144ef91924c53c57ea71e6f67ce73ce1cc6,
a465b7f58fdea15caa1bfb81ff5e985c94c4df4a,
0f522fb32a635dafce30f3ce3ff2cb15bcec809e,
82969f045c99b4d1ef833de35117c17b326b46c0 and
673befd2d7745a90c1c4fcb6d2f0e266c04f8c97.
|
| | | |
|
| | |
| |
| |
| |
| |
| | |
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.
|
| | |
| |
| |
| |
| |
| | |
... and make future reordering possibly easier
related to 9a6ee577f6165dccfde424732bfc6f16f1e2811b
|
| | |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| | |
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 commit aa561d70119accb59a17f10f9ba69076fb0ab516 by setting
has_plt_entry once the plt has been created, not before.
|
| | |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| | |
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.
|
| | |
| |
| |
| |
| |
| |
| | |
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.
|
| | |
| |
| |
| |
| |
| | |
have the undesired side effect of programs compiled with
debug info segfaulting after debug info been striped
more tought must be done here
|
| | |
| |
| |
| | |
memory, with this when compiling fossil-scm with tcc on linux X86_64 it works fine.
|
| | |
| |
| |
| | |
false positive, thanks to grischka for pointing it.
|
| | |
| |
| |
| |
| |
| | |
valgrind complain with:
Inconsistency detected by ld.so: rtld.c: 1284: dl_main: Assertion `_rtld_local._dl_rtld_map.l_libname' failed!
|
| | | |
|
| | |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| | |
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
|
| | |
| |
| |
| |
| |
| |
| |
| | |
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.
|
| | |
| |
| |
| | |
"clean"
|
| | |
| |
| |
| | |
tcctest.c with tcc.
|
| | |
| |
| |
| |
| |
| |
| | |
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.
|
| | |
| |
| |
| | |
On x86 tcc call to function in libtcc1.a to implement va_* functions.
|
| | |
| |
| |
| |
| | |
* Adapt tests2 Makefile to support testing tcc error reporting
* Add test for previous commit
|
| | |
| |
| |
| |
| |
| | |
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.
|
| | | |
|