Commit Graph

5274 Commits

Author SHA1 Message Date
Luuk de Gram 803f9e5dd0 Implement more instructions for more control flow support 2021-03-22 19:56:35 +01:00
Jakub Konka 3b48ea874e zld: naively handle static initializers in C++ 2021-03-22 17:14:53 +01:00
Evan Haas dce612ac2b translate-c: Ensure assignments are within a block when necessary
Ensures that if an assignment statement is the sole statement within a
C if statement, for loop, do loop, or do while loop, then when translated
it resides within a block, even though it does not in the original C.

Fixes the following invalid translation:

`if (1) if (1) 2;` -> `if (true) if (true) _ = @as(c_int, 2);`

To this:
```zig
    if (true) if (true) {
        _ = @as(c_int, 2);
    };
```

Fixes #8159
2021-03-22 10:48:08 +02:00
Jakub Konka ba8ac46e1f stage1: add cmake flag for enabling logging
Now that we ship our own linker for MachO by default in both stage1
and stage2, we need a way to enable logs for verbose debugging.
This commit adds `ZIG_ENABLE_LOGGING` cmake option which is equivalent
to stage2's `-Dlog` flag.

To enable it when building stage1 with cmake, add:

```
cmake .. -DZIG_ENABLE_LOGGING=on
```
2021-03-21 18:03:55 -07:00
Jakub Konka 3913332145 Fix digest format specifier after std.fmt updates 2021-03-20 15:09:45 -07:00
Jakub Konka f6ba810f27 zld: apply offset for DICE in archive 2021-03-19 23:37:16 +01:00
Jakub Konka 652842637c zld: continue on invalid/missing debug info 2021-03-19 20:05:02 +01:00
Jakub Konka d1b376cac9 zld: fix parsing archive/object name from header 2021-03-19 11:06:51 +01:00
Andrew Kelley 5e5b35f107 stage1: small memory optimization for simple pointer types
Avoid storing extra IR instruction data for simple pointer types.
2021-03-18 14:04:02 -07:00
Andrew Kelley a6f5aa71ac stage1: small IR memory optimization on CheckSwitchProngs 2021-03-18 14:04:02 -07:00
Veikka Tuominen ac7217e1f5 translate-c: preserve zero fractional part in float literals 2021-03-18 22:46:00 +02:00
Andrew Kelley 5cbb642525 stage1: small mem usage improvement for IR
move a boolean field to be represented implicitly with the enum tag.
Just borrowing one of the many strategies of stage2.

This simple change took the peak mem usage from std lib tests on
my machine from 8.21 GiB to 8.11 GiB.
2021-03-18 13:14:26 -07:00
Jakub Konka 17c066e925 Merge pull request #8282 from kubkon/zld
macho: upstream zld linker
2021-03-18 19:14:17 +01:00
Evan Haas b54514d9dd translate-c: Use [N:0] arrays when initializer is a string literal (#8264)
* translate-c: Use [N:0] arrays when initializer is a string literal

Translate incomplete arrays as [N:0] when initialized by a string literal.
This preserves a bit more of the type information from the original C program.

Fixes #8215
2021-03-18 14:41:04 +02:00
Veikka Tuominen bcc97bc1ed Merge pull request #8247 from Ersikan/fmt-fix-encoding
zig fmt: fix non-UTF-8 encoding #2820
2021-03-18 14:30:11 +02:00
Jakub Konka f3b4f79c7f zld: temporarily disable testing shared lib linking 2021-03-18 11:10:31 +01:00
Jakub Konka 2cf1c1b96b macho: honor verbose_link when linking with zld 2021-03-18 11:10:09 +01:00
Jakub Konka 861ea64009 macho: remove now obsolete LLD fixups 2021-03-18 11:09:47 +01:00
Dimenus dfeca48e35 @intCast takes two args 2021-03-17 22:58:52 -07:00
Jakub Konka 7516dfff83 zld: use zld when linking aarch64 by default and cross-comp 2021-03-18 00:37:13 +01:00
Jakub Konka 900658a85d rebase with master 2021-03-17 20:05:29 +01:00
Jakub Konka 1ec620be62 zld: fix GOT loads and indirection on x86_64 2021-03-17 19:59:57 +01:00
Jakub Konka ac0c669473 zld: add/fix more issues
* fix debug info for static archives
* allow handling of empty object files
* fix some relocs for GOT loads
2021-03-17 19:59:13 +01:00
Jakub Konka de209afbba zld: fix TLV initializers 2021-03-17 19:59:13 +01:00
Jakub Konka 349f878ecf zld: mimick Apple and add __DATA_CONST seg 2021-03-17 19:59:13 +01:00
Jakub Konka 62f43fbc06 zld: clean up use of commands.zig module 2021-03-17 19:59:13 +01:00
Jakub Konka d484b3b3cb zld: use aarch64 for opcodes 2021-03-17 19:59:13 +01:00
Jakub Konka dc34ac2b9e zld: fix incorrect offset calc for DICE 2021-03-17 19:59:13 +01:00
Jakub Konka 5d8944edc1 Revert log.warn hack 2021-03-17 19:59:13 +01:00
Jakub Konka a1b0ec5277 zld: start bringing x64 up to speed 2021-03-17 19:59:13 +01:00
Jakub Konka 066c1386a3 zld: demote logs from warn to debug 2021-03-17 19:59:13 +01:00
Jakub Konka b0ee480177 zld: merge and sort sections 2021-03-17 19:59:13 +01:00
Jakub Konka 44ebf48631 zld: fix handling of section alignment 2021-03-17 19:59:13 +01:00
Jakub Konka 7c22f4f851 zld: pass test-std and test-compiler-rt 2021-03-17 19:59:13 +01:00
Jakub Konka 7cbdbab376 zld: differentiate locals from globals 2021-03-17 19:59:13 +01:00
Jakub Konka 7e32947871 zld: add nop to reloc module 2021-03-17 19:59:13 +01:00
Jakub Konka d2008db623 zld: bullet-proof stubs for long jumps 2021-03-17 19:59:13 +01:00
Jakub Konka 14590795b1 zld: cleanup section alignment when allocating 2021-03-17 19:59:13 +01:00
Jakub Konka 586c704212 zld: pass stage2 tests linked with zld! 2021-03-17 19:59:13 +01:00
Jakub Konka e825a15b05 zld: replace ldr with add if indivisible 2021-03-17 19:59:13 +01:00
Jakub Konka f52f23618d macho: start upstreaming zld 2021-03-17 19:59:13 +01:00
Jakub Konka e5234c0e9e macho: offset table part of GOT 2021-03-17 12:16:36 +01:00
Jakub Konka b9fa80e588 macho: use latest bind functionality 2021-03-17 12:10:39 +01:00
Jakub Konka 1181543dad macho: extract writing stub helper preamble into fn 2021-03-17 12:10:39 +01:00
Jakub Konka 3df2ae1f9d macho: clean up writing of stub helper section 2021-03-17 12:10:39 +01:00
Jakub Konka 643b4898f5 macho: handle all jumps in stubs on aarch64 2021-03-17 12:10:39 +01:00
Jakub Konka 3019676440 macho: apply some renames to bring closer to zld 2021-03-17 12:10:39 +01:00
Ersikan 8942243f7a zig fmt: factorize source file reading and decoding
Now reading a source file and decoding it from UTF-16LE to UTF-8 is
done in a single function. Error messages are improved, and an error is
emitted when the source file has a BOM not supported (UTF-16BE, UTF-32).

Please note that the BOM of UTF-32 is composed of the same bytes as the
BOM of UTF-16 followed by a null character. Therefore a source file in
UTF-16LE starting with a null byte will be interpreted as an UTF-32, and
rejeted because of an invalid format. In pratice this is not a problem,
as the code would have been rejected later anyway because of the null
character.
2021-03-17 10:27:26 +01:00
Ersikan a354000090 zig fmt: fix non-UTF-8 encoding #2820
Fixes #2820

After reading the source code, the first two bytes are inspected, and
if they correspond to a UTF-16 BOM in little-endian order, the source
code is converted to UTF-8.
2021-03-17 10:26:47 +01:00
Evan Haas 715370a10a translate-c: demote usage of un-implemented builtins 2021-03-17 09:06:47 +02:00