mirror of
https://github.com/frida/tinycc
synced 2024-12-25 14:36:49 +03:00
1c2dfa1f4b
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.
111 lines
4.0 KiB
Plaintext
111 lines
4.0 KiB
Plaintext
TODO list:
|
|
|
|
Bugs:
|
|
|
|
- fix macro substitution with nested definitions (ShangHongzhang)
|
|
- FPU st(0) is left unclean (kwisatz haderach). Incompatible with
|
|
optimized gcc/msc code
|
|
|
|
- constructors
|
|
- cast bug (Peter Wang)
|
|
- define incomplete type if defined several times (Peter Wang).
|
|
- test binutils/gcc compile
|
|
- tci patch + argument.
|
|
- see -lxxx bug (Michael Charity).
|
|
- see transparent union pb in /urs/include/sys/socket.h
|
|
- precise behaviour of typeof with arrays ? (__put_user macro)
|
|
but should suffice for most cases)
|
|
- handle '? x, y : z' in unsized variable initialization (',' is
|
|
considered incorrectly as separator in preparser)
|
|
- transform functions to function pointers in function parameters
|
|
(net/ipv4/ip_output.c)
|
|
- fix function pointer type display
|
|
- check lcc test suite -> fix bitfield binary operations
|
|
- check section alignment in C
|
|
- fix invalid cast in comparison 'if (v == (int8_t)v)'
|
|
- finish varargs.h support (gcc 3.2 testsuite issue)
|
|
- fix static functions declared inside block
|
|
- fix multiple unions init
|
|
- sizeof, alignof, typeof can still generate code in some cases.
|
|
- Fix the remaining libtcc memory leaks.
|
|
- make libtcc fully reentrant (except for the compilation stage itself).
|
|
- struct/union/enum definitions in nested scopes (see also Debian bug #770657)
|
|
- __STDC_IEC_559__: float f(void) { static float x = 0.0 / 0.0; return x; }
|
|
|
|
Portability:
|
|
|
|
- it is assumed that int is 32-bit and sizeof(int) == 4
|
|
- int is used when host or target size_t would make more sense
|
|
- TCC handles target floating-point (fp) values using the host's fp
|
|
arithmetic, which is simple and fast but may lead to exceptions
|
|
and inaccuracy and wrong representations when cross-compiling
|
|
|
|
Linking:
|
|
|
|
- static linking does not work
|
|
- with "-run" and libtcc, no PLT is used, so branches may be out of
|
|
range and relocations may fail; as a result libtest fails on arm64; see:
|
|
https://lists.gnu.org/archive/html/tinycc-devel/2015-03/msg00111.html
|
|
|
|
Bound checking:
|
|
|
|
- '-b' bug.
|
|
- fix bound exit on RedHat 7.3
|
|
- setjmp is not supported properly in bound checking.
|
|
- fix bound check code with '&' on local variables (currently done
|
|
only for local arrays).
|
|
- bound checking and float/long long/struct copy code. bound
|
|
checking and symbol + offset optimization
|
|
|
|
Missing features:
|
|
|
|
- disable-asm and disable-bcheck options
|
|
- __builtin_expect()
|
|
- improve '-E' option.
|
|
- atexit (Nigel Horne)
|
|
- packed attribute
|
|
- C99: add complex types (gcc 3.2 testsuite issue)
|
|
- postfix compound literals (see 20010124-1.c)
|
|
|
|
Optimizations:
|
|
|
|
- suppress specific anonymous symbol handling
|
|
- more parse optimizations (=even faster compilation)
|
|
- memory alloc optimizations (=even faster compilation)
|
|
- optimize VT_LOCAL + const
|
|
- better local variables handling (needed for other targets)
|
|
|
|
Not critical:
|
|
|
|
- C99: fix multiple compound literals inits in blocks (ISOC99
|
|
normative example - only relevant when using gotos! -> must add
|
|
boolean variable to tell if compound literal was already
|
|
initialized).
|
|
- add PowerPC or ARM code generator and improve codegen for RISC (need
|
|
to suppress VT_LOCAL and use a base register instead).
|
|
- interactive mode / integrated debugger
|
|
- fix preprocessor symbol redefinition
|
|
- add portable byte code generator and interpreter for other
|
|
unsupported architectures.
|
|
- C++: variable declaration in for, minimal 'class' support.
|
|
- win32: __intxx. use resolve for bchecked malloc et al.
|
|
check exception code (exception filter func).
|
|
- handle void (__attribute__() *ptr)()
|
|
- VLAs are implemented in a way that is not compatible with signals:
|
|
http://lists.gnu.org/archive/html/tinycc-devel/2015-11/msg00018.html
|
|
|
|
Fixed (probably):
|
|
|
|
- bug with defines:
|
|
#define spin_lock(lock) do { } while (0)
|
|
#define wq_spin_lock spin_lock
|
|
#define TEST() wq_spin_lock(a)
|
|
- typedefs can be structure fields
|
|
- see bugfixes.diff + improvement.diff from Daniel Glockner
|
|
- long long constant evaluation
|
|
- add alloca()
|
|
- gcc '-E' option.
|
|
- #include_next support for /usr/include/limits ?
|
|
- function pointers/lvalues in ? : (linux kernel net/core/dev.c)
|
|
- win32: add __stdcall, check GetModuleHandle for dlls.
|