Commit Graph

292 Commits

Author SHA1 Message Date
deesix 55db771e29 tests: get proof from test0025 stderr (and other minor fixes)
We were checking an empty proof because the test writes to stderr and we
were redirecting stdout to the file. With the correct redirection the hash
is different, so proof.answer is also adjusted.

The x86 test was calling blood-elf with the 64bits flag. Removed to ask for
32bits behaviour.

For consistency, --BaseAddress is now using the usual value for the arch.

Also, unused input file is removed here.
2021-01-17 00:00:00 +01:00
deesix e9553d5f13 M2libc with standard architecture naming
Every AArch64 test script is affected because AArch64 -> aarch64. test0101
needs i386 -> x86 because it verifies the resulting AArch64 binary (hex2)
creating some x86 proof.

Also, a couple of x86 tests (test0000 and test0025) that are M2libc aware,
again because i386 -> x86 (hex2 ELF parts).
2021-01-16 00:00:00 +01:00
deesix bcd0f49859 Use M2libc in all AArch64 tests < test1000
Finally test0021, now that M2libc has getcwd.

See b83086642e
2021-01-15 00:00:00 +01:00
Jeremiah Orians 204d2612d7 whitespace 2021-01-12 02:57:35 +01:00
Jeremiah Orians f5f996626a tests: --output-sync for readability 2021-01-12 02:57:35 +01:00
Jeremiah Orians d34bb92b0d tests: workaround parallel clean/test make error
Something weird happens if one tries to clean and test at the same time
with a command like:

make clean test -j2

See https://lists.gnu.org/archive/html/help-make/2021-01/msg00000.html

To be safe until further investigation, we breakup the makefile into 2
files and serialize the first where M2-Planet is built.
2021-01-12 02:57:35 +01:00
deesix 9f26dbcc68 tests: support for make -j
For any test there's a directory with a script for each architecture.

These scripts generate intermediate files in the dir during compilation,
with the same names no matter the arch. So if one tries to execute the
scripts in parallel they all fight for the files.

To allow for parallel testing, now we create a temporal dir named after
the arch to isolate the intermediate files. Scripts are patched
accordingly.

This also allows easier clean-up: now, removing the temporal dirs is
almost all that we need (and the per-test .gitignore files are replaced
with a couple of lines in test/.gitignore). A common script replaces
the per-test cleanup.sh. It gets the number of the test as an argument
and takes care of some minor special cases. The makefile is adapted to
use this new test/cleanup_test.sh script.

Those special files are created during the last stage of each test, but
only if the host arch matches the test. They're _not_ isolated here
because it's harder (due to how we do the checksum) and they cannot
collide unless emulation is used and several calls to make are made at
the same time.
2021-01-12 00:00:00 +01:00
deesix 3aa8327334 tests: prettier scripts
One line per flag for the major calls. This simplifies a bit the automated
patching for parallel testing that comes next.
2021-01-12 00:00:00 +01:00
Jeremiah Orians 4def464475
Merge remote-tracking branch 'yt/array' 2021-01-10 20:07:38 -05:00
Jeremiah Orians 768f229c1d
Updated M2libc 2021-01-10 18:29:28 -05:00
Sanne Wouda 0e3d5b609a Add support for global char foo[12]; definitions
- only enabled in --bootstrap-mode

- allocates space for both the char array and the pointer to the start of
  the array
2021-01-10 23:01:08 +00:00
Sanne Wouda b83086642e Use M2libc in nearly all AArch64 tests
- disables --bootstrap-mode where it was enabled, except for test1000
  which needs to build in bootstrap-mode to check that M2-Planet can be
  compiled by cc_*

- the only hold-out is test0021 which needs getcwd which is missing in
  M2libc

- note that test0106 needs a fix to fgetc or it will never notice it has
  reached the end of stdin
2021-01-10 22:02:29 +00:00
Jeremiah Orians 674a6f5569
Update M2libc to working standard 2021-01-10 12:55:51 -05:00
Sanne Wouda dd1f5db9f1 Port AArch64 test0008 to M2libc 2021-01-10 17:50:04 +00:00
Jeremiah Orians bb3b4eebd8
Upgrade M2libc to include armv7l and prototype AArch64 2021-01-10 12:16:22 -05:00
Sanne Wouda c4d329b6cc Fixup libc-core -> libc-full
Causes a segfault due to uninitialised pointer in the FILE struct
2021-01-10 17:00:12 +00:00
Sanne Wouda 45685d0c30 Update first few tests to use M2libc 2021-01-10 16:47:13 +00:00
Jeremiah Orians 810d7da9fc
Update M2libc to add support for AMD64 2021-01-10 11:21:31 -05:00
Jeremiah Orians bc2f0e164d
Starting to prepare for the use of the M2libc standard 2021-01-10 10:02:58 -05:00
Sanne Wouda 09acd6253d Implement simple macro expansion
- no longer generate CONSTANT lines for #defined constants

- "#define FOO 1" turns "return FOO;" into "return 1;"

- Macros expanding into a macro is not supported:
  #define FOO 1
  #define BAR FOO
  will expand BAR to FOO, not to 1

- Expansion inside #if conditions is not supported.

- Function-like macros are not supported.
2021-01-09 17:39:48 +00:00
Sanne Wouda a8551f2fcd Implement --bootstrap-mode for preprocessor
- // and # lines always appear in the result of read_all_tokens

- in bootstrap mode, // tokens (but not the subsequent lines) and #
  lines are stripped. no preprocessing happens.

- in non-bootstrap mode, // lines are stripped and # lines stay for the
  preprocessing phase

- updates tests to pass --bootstrap-mode when necessary
2021-01-09 17:38:50 +00:00
Sanne Wouda 6f2cebc4ca Add a test for supported preprocessor features 2021-01-08 21:32:03 +00:00
Sanne Wouda 4550eec19e Extend macro #define support
- now supports #if defined(FOO)
- translation of #define FOO 1 to CONSTANT FOO 1 is still supported
2021-01-08 21:31:43 +00:00
Jeremiah Orians 3c4c09b95e
Added hacky version of #define support 2021-01-06 19:24:16 -05:00
Jeremiah Orians 25fd5e66c9
Another set of segfaults cleared out 2021-01-05 23:22:26 -05:00
Jeremiah Orians bdd4e65580
Catch some basic segfaults 2021-01-05 23:00:58 -05:00
Jeremiah Orians 0ab7cb78eb
Adjusted cc_macro.c formatting with astyle -A1tSxejz2fpUxV 2021-01-05 22:22:33 -05:00
Sanne Wouda 63bb59404d Improve error reporting for unexpected non-newline 2021-01-05 22:56:30 +00:00
Sanne Wouda 49fbe8942f Add error checking for unexpected #endif 2021-01-05 22:56:30 +00:00
Sanne Wouda 89c6513cd8 Add support for conditional inclusion
- support for #if, #elif, #else, #endif, but no macro expansion just
  yet. Any macro is treated as undefined and expands to 0.

for example:
./bin/M2-Planet -E test.c

 #if 1 == FOO
foo
 #else
bar
 #endif

results in

bar
2021-01-05 22:54:30 +00:00
Sanne Wouda cd96f65a23 Add macro directives to token_list
- change the lexer to not remove preprocessor directives
- preprocess() removes any lines starting with a macro directive that it
  doesn't understand (which is currently all of them)
2021-01-05 22:53:39 +00:00
Sanne Wouda 7b8a99db3c Add a preprocessor-only mode
- Very useful for testing and debugging
- Add preprocess() stub and skip compilation in preprocessor mode
2021-01-05 22:53:04 +00:00
Sanne Wouda a18e0c1782 Add newline tokens to parse stream
- needed to determine start and end of macro directives
- the main parser doesn't need them, so strip out the newline tokens
  before parsing to avoid changing it
2021-01-05 22:23:15 +00:00
Sanne Wouda fa0f135ebb Fix typo 2021-01-03 13:16:55 +00:00
Jeremiah Orians 921cc86ce6
First generation implemention of typedef 2021-01-02 22:00:02 -05:00
Jeremiah Orians 358b6cfb96
Fix modulus behavior that is wrong.
Thank you janneke
2021-01-01 16:39:27 -05:00
Jeremiah Orians e451abd667
Fix e25c1995aa SCM MES regression 2021-01-01 15:55:34 -05:00
Jeremiah Orians cc1a17a040
Revert "file.c: introduce output buffering for x86"
This reverts commit 5afeb0743e.
2021-01-01 15:28:30 -05:00
Jeremiah Orians 07baf02efe
Looks like I got x86/AMD64 signed and unsigned division backwards.
Thanks for finding that janneke
2021-01-01 10:52:23 -05:00
Jeremiah Orians c220d14928
Catching some segfaults 2020-12-31 09:53:05 -05:00
Jeremiah Orians e25c1995aa
Make types more proper 2020-12-27 21:51:46 -05:00
Jeremiah Orians 6a3d3e78e0
expand the known issues list 2020-12-24 14:41:14 -05:00
Jeremiah Orians 44e14bb662
Make known issues public 2020-12-24 12:12:52 -05:00
Jeremiah Orians 0ed81de9e1
Merge remote-tracking branch 'mihi/io-buffering-x86' 2020-12-22 22:19:44 -05:00
Jeremiah Orians 4de11b1bc6
Update checksums to reflect new fclose 2020-12-21 22:26:22 -05:00
Michael Schierl 5afeb0743e file.c: introduce output buffering for x86
Note that this is a backwards incompatible change: Unlike POSIX, exit()
will not flush all open streams, so you are responsible for flushing or
closing all your streams before successful exit.

Also, file.c will now also require calloc.c (and malloc.c).

Updated the test cases accordingly.

Only implemented and tested for x86.
2020-12-21 16:57:17 +01:00
Michael Schierl 608fba306f Fix x86 close syscall and test 0104
The close syscall was missing an indirection and therefore closed random
file descriptors (very visible in strace output).

Test 0104 did not properly null terminate the envp, resulting in -EFAULT
on execve syscall in case the next value in memory does not happen to be
0 (which it seems to be right now).
2020-12-21 16:57:17 +01:00
Michael Schierl 91bab2ef98 Close files that were fopen:ed 2020-12-21 16:57:17 +01:00
Jeremiah Orians 6fe6f44a29
Make type information localized to the inside of statements 2020-12-19 16:35:33 -05:00
Jeremiah Orians e7a0ecd244
Cleared out non-essential string primitives and added support for --max-string 2020-12-19 09:46:22 -05:00