Commit Graph

1908 Commits

Author SHA1 Message Date
grischka
cf32bb8812 Revert "--whole-archive support"
- 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 19a169ceb8.
2016-10-01 19:56:25 +02:00
Pavlas, Zdenek
e238e6521b gtst_addr(): short conditional jumps (i386, x86_64) 2016-09-30 07:33:20 -07:00
Pavlas, Zdenek
fc0fc6aba3 switch: collect case ranges first, then generate code
Collect cases first, then emit lookup code. Elliminates
jumps to implement pass-through and jumps to link cases.
2016-09-30 07:33:20 -07:00
Jean-Claude Beaudoin
d5a1e32ac3 Prevent tail spin crash when option -pthread is used. 2016-09-29 16:23:11 -04:00
Jean-Claude Beaudoin
beab3f8c71 Use etags to produce target TAGS. 2016-09-29 16:18:23 -04:00
Jean-Claude Beaudoin
889ee28ed5 Rein in unintended external functions on Windows. 2016-09-27 01:43:40 -04:00
Jean-Claude Beaudoin
08335c1548 More properly propagate ONE_SOURCE. 2016-09-27 01:40:49 -04:00
Christian Jullien
e037fd3364 pstrcpy looks to be needed by Windows win32/win64 builds. Reverted as PUB_FUNC to allow tcc.exe build again. 2016-09-26 07:02:42 +02:00
Christian Jullien
6db7a2157b Merge branch 'mob' of git://repo.or.cz/tinycc into mypatch
Add Visual Studio processor identification
2016-09-26 06:42:43 +02:00
Christian Jullien
30238b1ebd Add Microsoft processor identification 2016-09-26 06:41:31 +02:00
Jean-Claude Beaudoin
ff158bffe6 Rein in unintended external functions. 2016-09-25 22:32:41 -04:00
Christian Jullien
e38f49e32a Fix test for __*LP*__ predefined macros 2016-09-25 12:13:17 +02:00
Christian Jullien
c1b101cbaf Improve __*LP*__ predefined macros 2016-09-25 12:03:23 +02:00
Christian Jullien
e91ce66dad Add test for __*LP*__ predefined macros 2016-09-25 12:01:10 +02:00
Pavlas, Zdenek
c948732efa x86_64/elf: only variadic calls need rax 2016-08-17 06:23:15 -07:00
David Mertens
0373fe0e2a Remove vestiges of earlier type merger 2016-08-16 15:25:09 -04:00
Pavlas, Zdenek
71b6220963 tccgen: return: avoid jmp to retsym if possible
When 'return' is the last statement of the top-level block
(very common and often recommended case) jump is not needed.
2016-08-11 05:02:40 -07:00
David Mertens
0a402f6e91 Avoid conflicting definition for va_list on 64-bit Macs 2016-08-04 13:14:52 -04:00
grischka
41349948f8 win64: fix va_arg
fixes 5c35ba66c5

Implementation was consistent within tcc but incompatible
with the ABI (for example library functions vprintf etc)

Also:
- tccpp.c/get_tok_str() : avoid "unknown format "%llu" warning
- x86_64_gen.c/gen_vla_alloc() : fix vstack leak
2016-07-10 20:44:49 +02:00
Vincent Lefevre
0360905124 fix typo in -Wl,-rpath documentation
Signed-off-by: Vincent Lefevre <vincent@vinc17.net>
2016-07-05 15:48:31 +02:00
Avi Halachmi (:avih)
1751588435 tiny_libmaker: fix a comment 2016-06-19 22:19:06 +03:00
Avi Halachmi (:avih)
3f21d81073 win32: _mingw.h: add definition for _TRUNCATE from newer _mingw.h 2016-06-19 14:44:31 +03:00
Avi Halachmi (:avih)
ab8422c8e7 win32: malloc.h: use alloca instead of (missing) _alloca
_alloca is not part of msvcrt (and therefore not found if used), and tcc has
an internal implementation for alloca for x86[_64] since d778bde7 - initally
as _alloca and later changed to alloca. Use it instead.
2016-06-19 14:44:18 +03:00
Avi Halachmi (:avih)
b67951bed4 win32: wchar.h: don't redifine WCHAR_MIN[/MAX] (after stdint.h) 2016-06-19 14:44:07 +03:00
Avi Halachmi (:avih)
100f94be99 tiny_libmaker: more robust arguments interpretation
- Syntax is now much closer to gnu ar, but still supports whatever was
  supported before, with the following exceptions (which gnu ar has too):
  - lib is now mandatory (was optional and defaulted to ar_test.a before).
  - Path cannot start with '-' (but ./-myfile.o is OK).
- Unlike gnu ar, modes are still optional (as before).
- Now supports also (like gnu ar):
  - First argument as options doesn't have to start with '-', later options do.
  - Now supports mode v (verbose) with same output format as gnu ar.
  - Any names for lib/objs (were limited to .a/.o - broke cmake on windows).
  - Now explicitly fail on options which would be destructive for the user.
  - Now doesn't get confused by options between file arguments.
- Still ignores other unknown options - as before.
- Now doesn't read out-of-bounds if an option is one char.

- As a result, cmake for windows can now use tiny_libmaker as ar, and
  configure can also detect tiny_libmaker as a valid ar (both couldn't before).

Ignoring all options could previously cause to misinterpret the mode in a
destructive way, e.g. if the user wanted to do something with an existing
archive (such as p - print, or x - extract, etc), then it would instead just
delete (re-create) the archive.

Modes which can be destructive if ignored now explicitly fail. These include
[habdioptxN]. Note that 'h' can be ignored, but this way we also implicitly
print the usage for -h/--help.

The .a/.o name limitations previously resulted in complete failure on some
cases, such as cmake on windows which uses <filename>.obj and <libname>.lib .

Fixed: e.g. 'tiny_libmaker r x.a x.o' was reading out of bounds [-1] for 'r'.
2016-06-19 14:43:46 +03:00
grischka
1ca685f887 tccgen: gen_assign_cast(): cannot cast struct to scalar
The case below previously was causing an assertion failure
in the target specific generator.

It probably is not incorrect not to allow this even if
gcc does.

    struct S { long b; };

    void f(struct S *x)
    {
        struct S y[1] = { *x };
    }
2016-05-25 18:52:08 +02:00
grischka
9e0e05eb4e Redo "fix line number in macro redefined message"
Smaller change to fix more cases

This reverts commit 0f36f60faa.
2016-05-25 18:51:36 +02:00
seyko
bab4519617 Allow to perform tests from the custom build dir:
mkdir build; cd build
    ../configure --prefix=./package
    make
    make test
    make install
2016-05-20 16:02:42 +03:00
seyko
d0e48c51c7 [avih] a custom build dir fix for lib/Makefile
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
2016-05-20 15:55:36 +03:00
seyko
18cbe62e69 fix a mingw64 build on Linux with --enable-tcc64-mingw
* define CONFIG_WIN64=yes when ARCH=x86-64 (not CONFIG_WIN32=yes)
    * CONFIG_WIN64 now use a windows install part (not a Linux one)
2016-05-20 15:48:02 +03:00
seyko
824b1b582f make and install tiny_libmaker on all platforms
not only on Windows/Darwin.
2016-05-20 15:33:53 +03:00
seyko
778ec44adc [avih] configure: support custom ar with --ar=
Author: Avi Halachmi (:avih)
    Date:   Mon Nov 2 18:46:32 2015 +0200

    configure: support custom ar with --ar=
2016-05-20 15:27:22 +03:00
seyko
4e7a8906a1 configure: docdir fix
was /usr/local/share/doc/usr/local/lib/tcc
    now /usr/local/share/doc
2016-05-20 15:21:26 +03:00
seyko
19a169ceb8 --whole-archive support
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.
2016-05-20 15:12:32 +03:00
Christian Jullien
1339d04759 Microsoft says that _spawnp must be used instead of spawnp. It fixes a warning when compiled with MinGW 32/64 gcc compilers 2016-05-16 17:58:56 +02:00
seyko
3f233ab127 fix asm_expr_unary()
keep unary unsigned.
    problem is exposed on i386 with unary like 0xC0000000.
    In this case a sign is extended in
        pe->v = n;
    if n declared as long.
2016-05-16 08:53:24 +03:00
Michael Matz
f2a4cb0a0e x86-asm: Reject some invalid arith imm8 instruction
There were two errors in the arithmetic imm8 instruction.  They accept
only REGW, and in case the user write a xxxb opcode that variant
needs to be rejected as well (it's not automatically rejected by REGW
in case the destination is memory).
2016-05-16 05:10:21 +02:00
seyko
0f36f60faa fix line number in macro redefined message 2016-05-16 03:21:26 +03:00
seyko
a37f8cfc80 short_call_convention patch from tcc bugzilla
BUGZILLA:
    interfacing with other compilers

    extend the return value to the whole register if necessary.
    visual studio and gcc do not always set the whole eax register
    when assigning the return value of a function.

    We've encountered wrong execution results on i386 platforms with an
    application that uses both code compiled with TCC and code compiled
    with other compilers (namely: Visual Studio on Windows, and GCC on
    Linux).

    When calling a function that returns an integer value shorter than 32
    bits, TCC reads the return value from the whole EAX register,
    although the code generated by the other compilers can only sets AL
    for 8 bit values or AX for 16 bits values, and the rest of EAX can be
    anything.

    We worked around this with the attached patch on i386 for the version
    0.9.26, but we did not look at other platforms to find if there are
    similar issues.
2016-05-15 21:10:06 +03:00
seyko
9d679e3916 memory model macros __{L,}LP64__
a patch from tcc bugzilla.
    From: Reuben Thomas
    Date: Thu, 31 Jul 2014 13:50:13 +0100
    Subject: [PATCH] libtcc.c: add memory model macros __{L,}LP64__
2016-05-15 21:07:05 +03:00
Michael Matz
7cfd21440b x86-asm: Add .fill test 2016-05-14 04:41:06 +02:00
Michael Matz
4f27e217a8 x86-asm: Fix signed constants and opcode order
Two things: negative constants were rejected (e.g. "add $-15,%eax").
Second the insn order was such that the arithmetic IM8S forms
weren't used (always the IM32 ones).  Switching them prefers those
but requires a fix for size calculation in case the opcodes were
OPC_ARITH and OPC_WLX (whose size starts with 1, not zero).
2016-05-14 04:33:41 +02:00
Michael Matz
080ec9fadd x86-asm: Consolidate insn descriptions
Use OPC_BWLX and OPC_WLX in i386-asm.h and x86_64-asm.h to
reduce number of differences between both.
2016-05-14 04:05:34 +02:00
grischka
5e4d0718ff tcc -E -P10 : output all numbers as decimals
This may be used to preprocess Fabrice Bellards initial revision
in this repository to demonstrate its capability to compile and
run itself (on i386 32-bit linux or windows).

Initial revision: 27f6e16bae

Also needed:
* an empty stdio.h
* a wrapper named tc.c with

  void expr(void);
  void decl(int);
  void next(void);
  #include "tcc.c"

* an hello.c such as

  int main()
  {
      printf("Hello World\n");
      return 0;
  }

All files with unix LF only lines.  Then ...

* preprocess the source
  $ tcc -E -P10 -I. tcc.c -o tc1.c
* compile the compiler
  $ tcc -w -I. tc.c -o tc -ldl
* run it to compile and
   run itself to compile and
    run itself to compile and
     run itself to compile and
      run hello.c
$ ./tc tc1.c tc1.c tc1.c hello.c

--> Hello World!

------------------------------------------------------
* On i386 windows this may be added to the tc.c wrapper

  #ifdef _WIN32
  #include <windows.h>
  void *dlsym(int x, const char *func)
  {
      if (0 == strcmp(func, "dlsym"))
          return &dlsym;
      return GetProcAddress(LoadLibrary("msvcrt"), func);
  }
  #endif
2016-05-12 10:25:50 +02:00
Michael Matz
a66ba1f2a1 Error out on operations on structs
The check for structs was too late and on amd64 and aarch64 could
lead to accepting and then asserting with code like:
  struct S {...} s;
  char *c = (char*)0x10 - s;
2016-05-12 01:12:04 +02:00
Michael Matz
6bd8c936e3 x86-64-asm: Add mov[sz]xq opcodes
This adds the zero/sign-extending opcodes with 64bit destinations.
2016-05-12 00:57:02 +02:00
Michael Matz
b9f01dffc6 x86-64-asm: Clean up 64bit immediate support
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).
2016-05-11 23:47:02 +02:00
Michael Matz
f3cee9ceff x86-asm: Get rid of is_short_jump
Can be implemented differently.
2016-05-11 23:45:14 +02:00
Michael Matz
55bd08c5ae x86-asm: Remove old ASM_16 code
This code was inactive since a long time (and was deactivated because
it was wrong to start with) and just clutters the sources.  Remove
it.
2016-05-11 19:13:38 +02:00
Michael Matz
f0fa5603cf x86-64: Run asmtest as well
This fixes and activates the asm test that's part of tcctest.c
also on x86-64, requiring a small fix for the 'm' constraint.
2016-05-11 19:00:02 +02:00