tinycc/tests/tests2
herman ten brugge 853a498f2c Fix boundschecking for signal/sigaction/fork
The BOUNDS_CHECKING_ON/BOUNDS_CHECKING_OFF is not working for
signal/sigaction/fork. The reason is that the code stops bound checking
for the whole application. This result in wrong handling of
__bound_local_new/__bound_local_delete and malloc/calloc/realloc/free.
Consider the following code:

void tst(int n) {
  int i, arr[n];
  for (i = 0; i < n; i++) arr[i] = 0;
}

void *some_thread(void *dummy) {
  while (running) { tst(10); tst(20); }
}

void signal_handler(int sig) { ... }

When the signal handler is called the some_thread code can be interrupted when
is just registered the arr[10] data. When the signal handler is leaved the
arr[10] is still registered and did not see the call to deregister arr[10] and
then register arr[20]. The code resumes when tst(20) is running. This results
in a bound checking error when i >= 10.

To solve the above problem I changed the bound checking code to use
tls (thread local storage) for the no_checking variable.
This also makes it now possible to redirect signal/sigaction/fork code
through the bound checking library and disable checking when a signal is
running and to correct the bounds_sem for the fork child process.
The BOUNDS_CHECKING_ON/BOUNDS_CHECKING_OFF is not needed any more for
signal/sigaction/fork. In fact I could remove them from all my applications.

The use of the tls function code slows down the code by about 10%.
So if the slowdown due to bound checking was 5. It is now 5.5 times slower.

For x86_64/i386 I also allowed to use __thread variable in bcheck.c when
compiled with gcc with:
make x86_64-libtcc1-usegcc=yes
make i386-libtcc1-usegcc=yes
This makes code run faster due to use of gcc and __thread variable.
With the __thread variable there is no 10% slowdown.
For other targets this does not work because stabs is not supported.

Changes:

lib/bcheck.c:
- Add TRY_SEM
- Add HAVE_SIGNAL/HAVE_SIGACTION/HAVE_FORK/HAVE_TLS_FUNC/HAVE_TLS_VAR
  - HAVE_SIGNAL: redirect signal() call if set.
  - HAVE_SIGACTION: redirect sigaction() call if set.
  - HAVE_FORK: redirect fork() call if set.
  - HAVE_TLS_FUNC: If target has tls function calls.
  - HAVE_TLS_VAR: If target has __thread tls support.
- Replace all no_checking refecrences to NO_CHECKING_SET/NO_CHECKING_GET macros

tcc-doc.texi:
- Remove examples for signal/sigaction/fork code.
- Add some explanation for signal/sigaction/fork code.
- Add documentaion for __bounds_checking().

tccelf.c:
- Add support for SHF_TLS

tests/tests2/114_bound_signal.c:
- Remove BOUNDS_CHECKING_ON/BOUNDS_CHECKING_OFF
- Add code to trigger failure when tls is not working.

x86_64-link.c:
- Add support for R_X86_64_TLSGD/R_X86_64_TLSLD/R_X86_64_DTPOFF32/R_X86_64_TPOFF32

i386-link.c:
- Add support for R_386_TLS_GD/R_386_TLS_LDM/R_386_TLS_LDO_32/R_386_TLS_LE
2020-09-08 14:31:58 +02:00
..
00_assignment.c tests2: move into tests 2013-02-05 13:22:36 +01:00
00_assignment.expect tests2: move into tests 2013-02-05 13:22:36 +01:00
01_comment.c tests2: move into tests 2013-02-05 13:22:36 +01:00
01_comment.expect tests2: move into tests 2013-02-05 13:22:36 +01:00
02_printf.c tests2: move into tests 2013-02-05 13:22:36 +01:00
02_printf.expect tests2: move into tests 2013-02-05 13:22:36 +01:00
03_struct.c extend test 03_struct for attr. __cleanup__ 2020-02-09 18:31:19 +01:00
03_struct.expect extend test 03_struct for attr. __cleanup__ 2020-02-09 18:31:19 +01:00
04_for.c tests2: move into tests 2013-02-05 13:22:36 +01:00
04_for.expect tests2: move into tests 2013-02-05 13:22:36 +01:00
05_array.c tests2: move into tests 2013-02-05 13:22:36 +01:00
05_array.expect tests2: move into tests 2013-02-05 13:22:36 +01:00
06_case.c tests2: move into tests 2013-02-05 13:22:36 +01:00
06_case.expect tests2: move into tests 2013-02-05 13:22:36 +01:00
07_function.c zfunc works again on ARM after Pursuer fix 2018-12-22 19:14:22 +01:00
07_function.expect tests2: move into tests 2013-02-05 13:22:36 +01:00
08_while.c tests2: move into tests 2013-02-05 13:22:36 +01:00
08_while.expect tests2: move into tests 2013-02-05 13:22:36 +01:00
09_do_while.c tests2: move into tests 2013-02-05 13:22:36 +01:00
09_do_while.expect tests2: move into tests 2013-02-05 13:22:36 +01:00
10_pointer.c tests2: move into tests 2013-02-05 13:22:36 +01:00
10_pointer.expect tests2: move into tests 2013-02-05 13:22:36 +01:00
11_precedence.c Rework expr_landor 2020-01-20 05:48:48 +01:00
11_precedence.expect tests2: move into tests 2013-02-05 13:22:36 +01:00
12_hashdefine.c tests2: move into tests 2013-02-05 13:22:36 +01:00
12_hashdefine.expect tests2: move into tests 2013-02-05 13:22:36 +01:00
13_integer_literals.c tests2: move into tests 2013-02-05 13:22:36 +01:00
13_integer_literals.expect tests2: move into tests 2013-02-05 13:22:36 +01:00
14_if.c tests2: move into tests 2013-02-05 13:22:36 +01:00
14_if.expect tests2: move into tests 2013-02-05 13:22:36 +01:00
15_recursion.c tests2: move into tests 2013-02-05 13:22:36 +01:00
15_recursion.expect tests2: move into tests 2013-02-05 13:22:36 +01:00
16_nesting.c tests2: move into tests 2013-02-05 13:22:36 +01:00
16_nesting.expect tests: cleanup 2013-02-05 14:27:38 +01:00
17_enum.c enums: Accept GNU extension 2017-07-10 22:20:34 +02:00
17_enum.expect enums: Accept GNU extension 2017-07-10 22:20:34 +02:00
18_include.c tests2: move into tests 2013-02-05 13:22:36 +01:00
18_include.expect tests: cleanup 2013-02-05 14:27:38 +01:00
18_include.h tests: cleanup 2013-02-05 14:27:38 +01:00
19_pointer_arithmetic.c tests2: move into tests 2013-02-05 13:22:36 +01:00
19_pointer_arithmetic.expect tests2: move into tests 2013-02-05 13:22:36 +01:00
20_pointer_comparison.c tests2: move into tests 2013-02-05 13:22:36 +01:00
20_pointer_comparison.expect tests2: move into tests 2013-02-05 13:22:36 +01:00
21_char_array.c tests2: move into tests 2013-02-05 13:22:36 +01:00
21_char_array.expect tests2: move into tests 2013-02-05 13:22:36 +01:00
22_floating_point.c Fix float conversion in arm64 backend 2019-11-08 07:55:05 +01:00
22_floating_point.expect tests2: move into tests 2013-02-05 13:22:36 +01:00
23_type_coercion.c tests2: move into tests 2013-02-05 13:22:36 +01:00
23_type_coercion.expect tests2: move into tests 2013-02-05 13:22:36 +01:00
24_math_library.c round() in test (24_math_library) fail because there are no defs included. 2015-01-05 18:23:32 +03:00
24_math_library.expect tests2: move into tests 2013-02-05 13:22:36 +01:00
25_quicksort.c tests2: move into tests 2013-02-05 13:22:36 +01:00
25_quicksort.expect tests2: move into tests 2013-02-05 13:22:36 +01:00
26_character_constants.c tests2: move into tests 2013-02-05 13:22:36 +01:00
26_character_constants.expect tests2: move into tests 2013-02-05 13:22:36 +01:00
27_sizeof.c tccgen.c: Try to make sizeof(!x) work. 2015-11-22 00:00:36 +00:00
27_sizeof.expect tccgen.c: Try to make sizeof(!x) work. 2015-11-22 00:00:36 +00:00
28_strings.c Use ISO C string functions instead of obsolete BSD ones that used to be in strings.h. It allows more systems -- i.e. Windows -- to use those tests 2016-10-12 06:18:38 +02:00
28_strings.expect tests2: move into tests 2013-02-05 13:22:36 +01:00
29_array_address.c tests2: move into tests 2013-02-05 13:22:36 +01:00
29_array_address.expect tests2: move into tests 2013-02-05 13:22:36 +01:00
30_hanoi.c tests2: fix 30_hanoi test and enable it. 2014-04-12 13:37:37 -04:00
30_hanoi.expect tests2: move into tests 2013-02-05 13:22:36 +01:00
31_args.c tests2: cleanup 2014-04-07 11:20:45 +02:00
31_args.expect tests2: cleanup 2014-04-07 11:20:45 +02:00
32_led.c tests2: move into tests 2013-02-05 13:22:36 +01:00
32_led.expect tests2: move into tests 2013-02-05 13:22:36 +01:00
33_ternary_op.c rework type coercion in ternary expr (a bit) and uncomment previously failing test. Be more explicit in diagnostic messages. 2020-02-17 18:25:43 +01:00
33_ternary_op.expect Factor out common type combination 2020-04-15 02:44:12 +02:00
34_array_assignment.c tests2: move into tests 2013-02-05 13:22:36 +01:00
34_array_assignment.expect tests2: move into tests 2013-02-05 13:22:36 +01:00
35_sizeof.c tests2: move into tests 2013-02-05 13:22:36 +01:00
35_sizeof.expect tests2: move into tests 2013-02-05 13:22:36 +01:00
36_array_initialisers.c tests2: move into tests 2013-02-05 13:22:36 +01:00
36_array_initialisers.expect tests2: move into tests 2013-02-05 13:22:36 +01:00
37_sprintf.c tests2: move into tests 2013-02-05 13:22:36 +01:00
37_sprintf.expect tests2: move into tests 2013-02-05 13:22:36 +01:00
38_multiple_array_index.c tests2: move into tests 2013-02-05 13:22:36 +01:00
38_multiple_array_index.expect tests2: move into tests 2013-02-05 13:22:36 +01:00
39_typedef.c Fix function types 2017-07-14 17:42:48 +02:00
39_typedef.expect tests2: move into tests 2013-02-05 13:22:36 +01:00
40_stdio.c tests2: move into tests 2013-02-05 13:22:36 +01:00
40_stdio.expect tests2: move into tests 2013-02-05 13:22:36 +01:00
41_hashif.c tests2: move into tests 2013-02-05 13:22:36 +01:00
41_hashif.expect tests2: move into tests 2013-02-05 13:22:36 +01:00
42_function_pointer.c Fix gawk miscompile 2016-12-18 05:20:14 +01:00
42_function_pointer.expect tests2: move into tests 2013-02-05 13:22:36 +01:00
43_void_param.c tests2: move into tests 2013-02-05 13:22:36 +01:00
43_void_param.expect tests2: move into tests 2013-02-05 13:22:36 +01:00
44_scoped_declarations.c tests: cleanup 2013-02-05 14:27:38 +01:00
44_scoped_declarations.expect tests2: move into tests 2013-02-05 13:22:36 +01:00
45_empty_for.c tests: cleanup 2013-02-05 14:27:38 +01:00
45_empty_for.expect tests2: move into tests 2013-02-05 13:22:36 +01:00
46_grep.c Update bounds checking. 2019-12-12 12:56:06 +01:00
46_grep.expect tests2: fix and enable 46_grep test. 2014-04-12 14:04:10 -04:00
47_switch_return.c tests2: move into tests 2013-02-05 13:22:36 +01:00
47_switch_return.expect tests2: move into tests 2013-02-05 13:22:36 +01:00
48_nested_break.c tests2: move into tests 2013-02-05 13:22:36 +01:00
48_nested_break.expect tests2: move into tests 2013-02-05 13:22:36 +01:00
49_bracket_evaluation.c tests2: move into tests 2013-02-05 13:22:36 +01:00
49_bracket_evaluation.expect tests2: move into tests 2013-02-05 13:22:36 +01:00
50_logical_second_arg.c tests: cleanup 2013-02-05 14:27:38 +01:00
50_logical_second_arg.expect tests2: move into tests 2013-02-05 13:22:36 +01:00
51_static.c tests2: move into tests 2013-02-05 13:22:36 +01:00
51_static.expect tests2: move into tests 2013-02-05 13:22:36 +01:00
52_unnamed_enum.c tests2: move into tests 2013-02-05 13:22:36 +01:00
52_unnamed_enum.expect tests2: move into tests 2013-02-05 13:22:36 +01:00
54_goto.c tests: cleanup 2013-02-05 14:27:38 +01:00
54_goto.expect tests2: move into tests 2013-02-05 13:22:36 +01:00
55_lshift_type.c tests2: move into tests 2013-02-05 13:22:36 +01:00
55_lshift_type.expect tests2: move into tests 2013-02-05 13:22:36 +01:00
60_errors_and_warnings.c Fix gcc testsuite problems 2020-07-05 14:01:50 +02:00
60_errors_and_warnings.expect Fix gcc testsuite problems 2020-07-05 14:01:50 +02:00
61_integers.c __builtin_/__bound_: A 'stay tiny' approach to the matter 2020-07-06 13:42:02 +02:00
61_integers.expect __builtin_/__bound_: A 'stay tiny' approach to the matter 2020-07-06 13:42:02 +02:00
64_macro_nesting.c Turn on a implicit-function-declaration warning by default. 2015-03-03 16:32:25 +03:00
64_macro_nesting.expect Add new tests for macro nesting 2014-04-07 23:30:57 +08:00
67_macro_concat.c Fix preprocessor concat with empty arg 2014-04-12 16:11:42 +08:00
67_macro_concat.expect Fix preprocessor concat with empty arg 2014-04-12 16:11:42 +08:00
70_floating_point_literals.c Fix parsing of binary floating point number 2014-12-15 16:32:08 +08:00
70_floating_point_literals.expect Fix parsing of binary floating point number 2014-12-15 16:32:08 +08:00
71_macro_empty_arg.c Fix macro expansion of empty args. 2015-01-18 22:00:10 +01:00
71_macro_empty_arg.expect Fix macro expansion of empty args. 2015-01-18 22:00:10 +01:00
72_long_long_constant.c tccpp: fix issues, add tests 2015-05-09 14:29:39 +02:00
72_long_long_constant.expect tccpp: fix issues, add tests 2015-05-09 14:29:39 +02:00
73_arm64.c Fix arm64-gen.c when passing a struct ptr to va_arg. 2020-03-22 08:26:03 +01:00
73_arm64.expect arm64: Optimise some integer operations with a constant operand. 2015-03-07 17:42:08 +00:00
75_array_in_struct_init.c A right fix for the array in struct initialization w/o '{' 2015-03-23 08:27:16 +03:00
75_array_in_struct_init.expect A right fix for the array in struct initialization w/o '{' 2015-03-23 08:27:16 +03:00
76_dollars_in_identifiers.c add missing test from -fdollar-in-identifiers commit 2015-04-20 12:03:45 +01:00
76_dollars_in_identifiers.expect add missing test from -fdollar-in-identifiers commit 2015-04-20 12:03:45 +01:00
77_push_pop_macro.c a test for the #pragma push/pop_macro 2015-04-25 15:03:50 +03:00
77_push_pop_macro.expect a test for the #pragma push/pop_macro 2015-04-25 15:03:50 +03:00
78_vla_label.c tccgen.c: Bug fix for 992cbda and 3ff77a1: set nocode_wanted. 2015-11-21 23:58:58 +00:00
78_vla_label.expect tccgen.c: Bug fix for 992cbda and 3ff77a1: set nocode_wanted. 2015-11-21 23:58:58 +00:00
79_vla_continue.c tests/tests2/79_vla_continue.c: Fix off-by-one error. 2015-11-13 21:49:29 +00:00
79_vla_continue.expect VLA fix: save stack pointer right after modification 2015-04-28 09:23:29 +00:00
80_flexarray.c tccgen.c: Fix flex array members some more 2016-03-11 22:35:44 +01:00
80_flexarray.expect tccgen.c: Fix flex array members some more 2016-03-11 22:35:44 +01:00
81_types.c Some types testcases 2019-04-09 04:39:38 +02:00
81_types.expect Fix type parsing 2016-03-24 15:44:01 +01:00
82_attribs_position.c Fix more attribute placements 2018-12-31 22:00:31 +01:00
82_attribs_position.expect Fix misparsed type in presence of attributes 2018-07-28 18:55:54 +02:00
83_utf8_in_identifiers.c utf8 in identifiers 2016-04-05 13:05:09 +03:00
83_utf8_in_identifiers.expect utf8 in identifiers 2016-04-05 13:05:09 +03:00
84_hex-float.c updates & cleanups (tcc-doc/Changelog/TODO ...) 2017-02-13 19:03:29 +01:00
84_hex-float.expect updates & cleanups (tcc-doc/Changelog/TODO ...) 2017-02-13 19:03:29 +01:00
85_asm-outside-function.c rework leading underscores 2020-07-06 13:00:47 +02:00
85_asm-outside-function.expect updates & cleanups (tcc-doc/Changelog/TODO ...) 2017-02-13 19:03:29 +01:00
86_memory-model.c updates & cleanups (tcc-doc/Changelog/TODO ...) 2017-02-13 19:03:29 +01:00
86_memory-model.expect updates & cleanups (tcc-doc/Changelog/TODO ...) 2017-02-13 19:03:29 +01:00
87_dead_code.c Code suppression fixes 2018-01-05 02:19:26 +01:00
87_dead_code.expect Code suppression fixes 2018-01-05 02:19:26 +01:00
88_codeopt.c update gen_cast 2019-12-16 21:37:44 +01:00
88_codeopt.expect Fix some code suppression fallout 2016-12-20 04:58:34 +01:00
89_nocode_wanted.c updates & cleanups (tcc-doc/Changelog/TODO ...) 2017-02-13 19:03:29 +01:00
89_nocode_wanted.expect updates & cleanups (tcc-doc/Changelog/TODO ...) 2017-02-13 19:03:29 +01:00
90_struct-init.c Fix invalid size with GNU designated initializers 2019-07-21 21:14:58 +02:00
90_struct-init.expect Fix invalid size with GNU designated initializers 2019-07-21 21:14:58 +02:00
91_ptr_longlong_arith32.c updates & cleanups (tcc-doc/Changelog/TODO ...) 2017-02-13 19:03:29 +01:00
91_ptr_longlong_arith32.expect updates & cleanups (tcc-doc/Changelog/TODO ...) 2017-02-13 19:03:29 +01:00
92_enum_bitfield.c nocode, noreturn 2019-06-24 11:40:01 +02:00
92_enum_bitfield.expect Fix unsigned enum bit-fields 2017-05-05 23:16:43 +02:00
93_integer_promotion.c bitfields: promote to signed int 2017-05-09 18:36:24 +02:00
93_integer_promotion.expect bitfields: promote to signed int 2017-05-09 18:36:24 +02:00
94_generic.c Fix type completion for array types as well 2018-11-30 23:43:30 +01:00
94_generic.expect patch type_to_str to handle complex function-ptr decls better 2018-04-01 00:38:11 +02:00
95_bitfields_ms.c #pragma comment(option,"-..."), bitfields test, etc... 2017-07-14 19:26:01 +02:00
95_bitfields_ms.expect Fix long bitfield 2020-08-09 07:50:34 +02:00
95_bitfields.c Fix testcase 95 for windows 2020-08-09 08:28:45 +02:00
95_bitfields.expect Fix long bitfield 2020-08-09 07:50:34 +02:00
96_nodata_wanted.c misc fixes 2018-06-01 12:52:01 +02:00
96_nodata_wanted.expect update gen_cast 2019-12-16 21:37:44 +01:00
97_utf8_string_literal.c Add test case for wide char handling in wide string literal 2017-09-10 16:50:19 +08:00
97_utf8_string_literal.expect Add test case for wide char handling in wide string literal 2017-09-10 16:50:19 +08:00
98_al_ax_extend.c rework leading underscores 2020-07-06 13:00:47 +02:00
98_al_ax_extend.expect Add test case for AL/AX extending problem 2017-09-10 17:03:34 +08:00
99_fastcall.c rework leading underscores 2020-07-06 13:00:47 +02:00
99_fastcall.expect Add test case for fastcall calling convention 2017-09-10 18:22:48 +08:00
100_c99array-decls.c Don't fail on const/restrict/static/* inside [] 2018-04-01 00:48:09 +02:00
100_c99array-decls.expect Don't fail on const/restrict/static/* inside [] 2018-04-01 00:48:09 +02:00
101_cleanup.c add tests for cleanup loop 2019-05-03 12:32:55 +02:00
101_cleanup.expect add tests for cleanup loop 2019-05-03 12:32:55 +02:00
102_alignas.c Make 102_alignas independend of architecture 2019-04-11 00:37:07 +02:00
102_alignas.expect Make 102_alignas independend of architecture 2019-04-11 00:37:07 +02:00
103_implicit_memmove.c Add attribute bound_no_checking 2020-08-13 11:19:11 +02:00
103_implicit_memmove.expect Add 103_implicit_memmove testcase 2019-04-18 03:42:23 +02:00
104_inline.c test 104: adjust to (unwritten) tests2 suite conventions 2019-06-22 00:26:31 +02:00
104_inline.expect test 104: adjust to (unwritten) tests2 suite conventions 2019-06-22 00:26:31 +02:00
104+_inline.c test 104: adjust to (unwritten) tests2 suite conventions 2019-06-22 00:26:31 +02:00
105_local_extern.c Add testcase for 69a46b0 2019-06-17 19:08:08 +02:00
105_local_extern.expect Add testcase for 69a46b0 2019-06-17 19:08:08 +02:00
106_pthread.c Add testcase for elf_version 2019-10-22 20:43:30 +02:00
106_pthread.expect Add testcase for elf_version 2019-10-22 20:43:30 +02:00
107_stack_safe.c Fix bug in gen_cvt_ftoi1. Add test 107_stack_safe for this fix. 2019-10-24 00:57:59 +08:00
107_stack_safe.expect Fix bug in gen_cvt_ftoi1. Add test 107_stack_safe for this fix. 2019-10-24 00:57:59 +08:00
108_constructor.c Add constructor/destructor support 2019-10-29 07:02:58 +01:00
108_constructor.expect Add constructor/destructor support 2019-10-29 07:02:58 +01:00
109_float_struct_calling.c rename testcase 2019-10-29 12:02:58 +01:00
109_float_struct_calling.expect rename testcase 2019-10-29 12:02:58 +01:00
110_average.c Fix bounds checking for linux/windows 2019-12-10 08:07:25 +01:00
110_average.expect Fix bounds checking for linux/windows 2019-12-10 08:07:25 +01:00
111_conversion.c Fix bounds checking for linux/windows 2019-12-10 08:07:25 +01:00
111_conversion.expect Fix bounds checking for linux/windows 2019-12-10 08:07:25 +01:00
112_backtrace.c macos: Adjust tests2.112 and tests2 Makefile 2020-06-20 22:14:38 +02:00
112_backtrace.expect backtrace: test with DLLs 2020-01-19 11:46:07 +01:00
113_btdll.c backtrace: test with DLLs 2020-01-19 11:46:07 +01:00
113_btdll.expect backtrace: test with DLLs 2020-01-19 11:46:07 +01:00
114_bound_signal.c Fix boundschecking for signal/sigaction/fork 2020-09-08 14:31:58 +02:00
114_bound_signal.expect Allow signal handlers when bound checking 2020-05-05 08:31:57 +02:00
115_bound_setjmp.c Add setjmp/longjmp bound checking support 2020-05-23 20:02:41 +02:00
115_bound_setjmp.expect Add setjmp/longjmp bound checking support 2020-05-23 20:02:41 +02:00
116_bound_setjmp2.c Add setjmp/longjmp bound checking support 2020-05-23 20:02:41 +02:00
116_bound_setjmp2.expect Add setjmp/longjmp bound checking support 2020-05-23 20:02:41 +02:00
117_builtins.c tests2: rework 117..119 to follow our conventions 2020-08-21 21:44:11 +02:00
117_builtins.expect tests2: rework 117..119 to follow our conventions 2020-08-21 21:44:11 +02:00
118_switch.c tests2: rework 117..119 to follow our conventions 2020-08-21 21:44:11 +02:00
118_switch.expect tests2: rework 117..119 to follow our conventions 2020-08-21 21:44:11 +02:00
119_random_stuff.c tests2: rework 117..119 to follow our conventions 2020-08-21 21:44:11 +02:00
119_random_stuff.expect tests2: rework 117..119 to follow our conventions 2020-08-21 21:44:11 +02:00
LICENSE tests2: move into tests 2013-02-05 13:22:36 +01:00
Makefile tests2: rework 117..119 to follow our conventions 2020-08-21 21:44:11 +02:00