| Commit message (Collapse) | Author | Age | Files | Lines |
| |
|
|
|
|
|
| |
Too much code. gcc 3.x doesn't have that either.
This reverts commit 41785a0bf9d505a3647a10ddc330417f52fd4528.
This reverts commit 21665f433890e2038626f0b3123b189a62a67dc9.
|
| |
|
|
|
|
|
|
|
|
|
|
| |
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)
|
| |
|
|
| |
- taking advantage of previous commit "incremental -Wl parsing"
|
| |
|
|
| |
parse -Wl linker options immediately
|
| |
|
|
|
|
|
|
|
| |
-- Not a fix
This reverts commit 089ce6235c99638ad4542a57af4d09e2be0efc88.
Revert "handle a -s option by executing sstrip/strip program"
-- related, not a fix.
This reverts commit 5cd4393a542ef4c64df7dcbb3fbe3a629666239d.
|
| |
|
|
| |
- does not change signature of tcc_add_file
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
- "utf8 in identifiers"
from 936819a1b90f2618bb3f86730189cf2895948ba0
- CValue: remove member str.data_allocated
- make tiny allocator private to tccpp
- allocate macro_stack objects on heap
because otherwise it could crash after error/setjmp
in preprocess_delete():end_macro()
- mov "TinyAlloc" defs to tccpp.c
- define_push: take int* str again
|
| |
|
|
|
|
|
|
|
| |
Also:
- allow more than one item per line
- respect "quoted items" and escaped quotes \"
(also for LIBTCCAPI tcc_setoptions)
- cleanup some copy & paste
|
| |
|
|
|
| |
Abusing filename[0] as type is just too much of a hack.
-- From 05364072042ff37904a7b0b14cdd85a1ea1ca11d
|
| |
|
|
|
|
|
|
|
|
|
| |
after several "fixes" and "improvements"
b3782c3cf5e66f74207303c381a305daabccdb12
5fb57bead41cd3a84f0aa3f98d00b5fe5de25a08
feature did not work at all
- Use 'once' flag, not 'ifndef_macro'
- Ignore filename letter case on _WIN32
- Increment global pp_once for each compilation
|
| |
|
|
|
|
|
|
|
|
|
|
| |
- would parse linker args in two different places
- would mess up "tcc -v ..." output:
tcc -v test.c
-> test.c
+> test.c
- would use function "tcc_load_alacarte()" to do the contrary of
what its name suggests.
This reverts commit 19a169ceb896f78205bc23b847938c58f14d1dda.
|
| | |
|
| | |
|
| |
|
|
| |
PUB_FUNC to allow tcc.exe build again.
|
| | |
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
A patch is implemented as suggested in tinycc-devel mail list.
From: Reuben Thomas
Date: Thu, 31 Jul 2014 16:52:53 +0100
Subject: [PATCH] Add --{no,}-whole-archive support
I resurrected the patch supplied to the mailing list in 2009
Since --whole-archive is a useful flag to get tcc working with
autotools, and of course in its own right, I suggest you have a look
at the patch and see if it is acceptable. I cannot see any suggestion
that it was actively rejected last time round, just no evidence that
it was ever added.
|
| |
|
|
|
|
|
|
|
| |
Fix it to actually be able to parse 64bit immediates (enlarge
operand value type). Then, generally there's no need for accepting
IM64 anywhere, except in the 0xba+r mov opcodes, so OP_IM is
unnecessary, as is OPT_IMNO64. Improve the generated code a bit
by preferring the 0xc7 opcode for im32->reg64, instead of the
im64->reg64 form (which we therefore hardcode).
|
| |
|
|
|
|
|
| |
The lexer is for reading files, not for writing.
Also :
- macro_is_equal(): avoid crash if redefining __FILE__
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
... for fast redeclaration checks
Also, check function parameters too:
void foo(int a) { int a; ... }
Also, try to fix struct/union/enum's on different scopes:
{ struct xxx { int x; };
{ struct xxx { int y; }; ... }}
and some (probably not all) combination with incomplete
declarations "struct xxx;"
Replaces 2bfedb18675228c3837c23fa523231f55e102c12
and 07d896c8e5d1b46bf4aebd403c78e5f7ffebe02a
Fixes cf95ac399cbce1ea8a519f91dd36a5cfd4ea7943
|
| |
|
|
|
|
|
|
|
|
|
|
|
| |
don't catch redefinition for local vars. With this option on
tcc accepts the following code:
int main()
{
int a = 0;
long a = 0;
}
But if you shure there is no problem with your local variables,
then a compilation speed can be improved if you have a lots of
the local variables (50000+)
|
| |
|
|
|
|
|
|
|
| |
- uses new `TinyAlloc`-ators for small `TokenSym`, `CString` and
`TokenString` instances
- conditional `TAL_DEBUG` for mem leaks and double frees detection
- on `TAL_DEBUG` collects allocation origin (file + line)
- conditional `TAL_INFO` for allocators stats (in release mode too)
- chain a new allocator twice current capacity on buffer exhaustion
|
| |
|
|
|
|
|
|
|
|
|
|
| |
- better `TOK_HASH_FUNC`
- increases `hash_ident` initial size to 16k (from 8k)
- `cstr_cat` uses single `realloc` + `memcpy`
- `cstr_cat` can append terminating zero
- `tok_str_realloc` initial size to 16 (from 8)
- `parse_define` uses static `tokstr_buf`
- `next` uses static `tokstr_buf`
- fixes two latent bugs (wrong deallocations in libtcc.c:482 and
tccpp.c:2987)
|
| |
|
|
|
| |
This is done by impression of the pcc -C option.
Usual execution path and speed are not changed.
|
| |
|
|
|
| |
gcc 3.4.6 don't understand "#if PATHCMP==stricmp"
where "#define PATHCMP stricmp"
|
| |
|
|
| |
These are used in `libtcc.c` now and cannot remain in `tccpe.c`
|
| |
|
|
|
|
|
| |
A problem was in TOK_ASMDIR_text:
- sprintf(sname, ".%s", get_tok_str(tok1, NULL));
+ sprintf(sname, "%s", get_tok_str(tok1, NULL));
When tok1 is '.text', then sname is '..text'
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
From: Vlad Vissoultchev
Date: Tue, 12 Apr 2016 20:43:15 +0300
Subject: Allow tcc arguments to be read from @listfiles
This allows all @ prefixed arguments to be treated as listfiles
containing list of source files or tcc options where each one is on a
separate line. Can be used to benchmark compilation speed with
non-trivial amount of source files.
The impl of `tcc_parse_args` had to be moved to a new function that is
able to be called recursively w/ the original one remaining as a driver
of the new one. Listfiles parsing happens in a new
`args_parser_add_listfile` function that uses `tcc_open`/`tcc_close/inp`
for buffered file input.
|
| |
|
|
|
|
|
|
|
|
|
|
|
| |
From: Vlad Vissoultchev
Date: Mon, 11 Apr 2016 01:32:28 +0300
Subject: Add VS2015 solution and project files to `win32/vs2015`
directory
This allows release/debug builds for both x86 and x64 targets. Some
warnings had to be suppressed.
Output libtcc.dll and tcc.exe are copied to parent `win32` directory
w/ a post-build action.
|
| |
|
|
|
|
|
|
| |
When tccboot kernels compiles with
'Identifiers can start and/or', this kernel don't start.
It is hard to find what is wrong.
PS: there was no test for identifiers in *.S with '.'
|
| |
|
|
|
|
| |
There was already support for -dD option but in contrast -dM dumps only `#define` directives w/o actual preprocessor output.
The original -dD output differs from gcc output by additional comment in front of `#define`s so this quirk is left for -dM as well.
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
modified version of the old one which don't allow '.'
in #define Identifiers. This allow correctly preprocess
the following code in *.S
#define SRC(y...) \
9999: y; \
.section __ex_table, "a"; \
.long 9999b, 6001f ; \
// .previous
SRC(1: movw (%esi), %bx)
6001:
A test included.
|
| |
|
|
|
|
| |
remove non-existent or duplicate directories from include paths
if -fnormalize-inc-dirs is specified. This will help
to compile current coreutils package
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
- Identifiers can start and/or contain '.' in PARSE_FLAG_ASM_FILE
- Move all GAS directives under TOK_ASMDIR prefix
This patches breaks compilation of the tccboot (linux 2.4.26
kernel). A test.S which fails with this patches:
#define SRC(y...) \
9999: y; \
.section __ex_table, "a"; \
.long 9999b, 6001f<---->; \
.previous
SRC(1:<>movw (%esi), %bx<------>)
// 029-test.S:7: error: macro 'SRC' used with too many args
|
| |
|
|
| |
Use only these tokens in `asm_parse_directive` and don't recycle others' tokens (like TOK_SECTION1)
|
| |
|
|
|
|
|
|
|
| |
A CString used to be copied into a token string, which is an int array.
On a 64-bit architecture the pointers were misaligned, so ASan gave
lots of warnings. On a 64-bit architecture that required memory
accesses to be correctly aligned it would not work at all.
The CString is now included in CValue instead.
|
| |
|
|
|
| |
There may be compiler-specific header files that should override
system headers. See TCC's include paths by running "tcc -vv".
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
tcc_normalize_inc_dirs: normally no problem to be absolutly
gcc compatible as long as it can be done the tiny way.
This reverts to the state before recent related commits and
reimplements a (small) part of it to fix the reported problem.
Also: Revert "parsing "..." sequence"
c3975cf27c792d493e76a2058a1eaf588324053e
&& p[1] == '.'
is not a reliable way to lookahead
|
| |
|
|
|
|
|
| |
- avoid memory allocation by using its (int) token number
- avoid additional function parameter by using Attribute
Also: fix some strange looking error messages
|
| | |
|
| |
|
|
|
| |
This stops UBSan from giving runtime misaligned address errors
and might eventually allow building on a non-little-endian host.
|
| | |
|
| |
|
|
|
|
| |
curremtly no one will try to compile a linux kernel
from the boot loader. With current tcc it is not
possible w/o additional tuning.
|
| |
|
|
|
| |
a cross-compilation from unix to win32 need a "sys/stat.h"
include file
|
| |
|
|
|
|
|
|
|
| |
include dirs are prepared as in gcc
- for each duplicate path keep just the first one
- remove each include_path that exists in sysinclude_paths
include_next streamlined by introducing inc_path_index
in the BufferedFile
|
| | |
|
| |
|
|
| |
This reverts commit 4e04f67c94c97b4f28a4d73759a0ad38fb3a10f7. Requested by grischka.
|
| | |
|
| |
|
|
|
|
|
|
|
|
| |
* 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...
|
| | |
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Jsut for testing. It works for me (don't break anything)
Small fixes for x86_64-gen.c in "tccpp: fix issues, add tests"
are dropped in flavor of this patch.
Pip Cet:
Okay, here's a first patch that fixes the problem (but I've found
another bug, yet unfixed, in the process), though it's not
particularly pretty code (I tried hard to keep the changes to the
minimum necessary). If we decide to actually get rid of VT_QLONG and
VT_QFLOAT (please, can we?), there are some further simplifications in
tccgen.c that might offset some of the cost of this patch.
The idea is that an integer is no longer enough to describe how an
argument is stored in registers. There are a number of possibilities
(none, integer register, two integer registers, float register, two
float registers, integer register plus float register, float register
plus integer register), and instead of enumerating them I've
introduced a RegArgs type that stores the offsets for each of our
registers (for the other architectures, it's simply an int specifying
the number of registers). If someone strongly prefers an enum, we
could do that instead, but I believe this is a place where keeping
things general is worth it, because this way it should be doable to
add SSE or AVX support.
There is one line in the patch that looks suspicious:
} else {
addr = (addr + align - 1) & -align;
param_addr = addr;
addr += size;
- sse_param_index += reg_count;
}
break;
However, this actually fixes one half of a bug we have when calling a
function with eight double arguments "interrupted" by a two-double
structure after the seventh double argument:
f(double,double,double,double,double,double,double,struct { double
x,y; },double);
In this case, the last argument should be passed in %xmm7. This patch
fixes the problem in gfunc_prolog, but not the corresponding problem
in gfunc_call, which I'll try tackling next.
|