Restart CI for New Technology and UBSAN hunting

Continuous Integration (via runit and runitd) is now re-enabled on win7
and win10. The `make test` command, which runs the tests on all systems
is now the fastest and most stable it's been since the project started.

UBSAN is now enabled in MODE=dbg in addition to ASAN. Many instances of
undefined behavior have been removed. Mostly things like passing a NULL
argument to memcpy(), which works fine with Cosmopolitan Libc, but that
doesn't prevents the compiler from being unhappy. There was an issue w/
GNU make where static analysis claims a sprintf() call can overflow. We
also now have nicer looking crash reports on Windows since uname should
now be supported and msys64 addr2line works reliably.
This commit is contained in:
Justine Tunney 2022-03-21 03:46:16 -07:00
parent d5ff2c3fb9
commit 5e8ae2d5bc
80 changed files with 506 additions and 249 deletions

View file

@ -297,7 +297,7 @@ int bf_set(bf_t *r, const bf_t *a)
}
r->sign = a->sign;
r->expn = a->expn;
memcpy(r->tab, a->tab, a->len * sizeof(limb_t));
if (a->len) memcpy(r->tab, a->tab, a->len * sizeof(limb_t));
return 0;
}

View file

@ -24,6 +24,7 @@
*/
#include "libc/assert.h"
#include "libc/calls/weirdtypes.h"
#include "libc/dce.h"
#include "libc/log/log.h"
#include "libc/mem/mem.h"
#include "libc/runtime/runtime.h"
@ -328,6 +329,10 @@ int main(int argc, char **argv)
#endif
size_t stack_size = 0;
#if IsModeDbg()
ShowCrashReports();
#endif
#ifdef CONFIG_BIGNUM
/* load jscalc runtime if invoked as 'qjscalc' */
{

View file

@ -488,6 +488,11 @@ int main(int argc, char **argv)
BOOL bignum_ext = FALSE;
#endif
namelist_t dynamic_module_list;
#if IsModeDbg()
ShowCrashReports();
#endif
if (argc == 2 && !strcmp(argv[1], "-n")) return 0;
out_filename = NULL;
output_type = OUTPUT_EXECUTABLE;

View file

@ -10926,7 +10926,7 @@ typedef struct CodeContext {
#define M2(op1, op2) ((op1) | ((op2) << 8))
#define M3(op1, op2, op3) ((op1) | ((op2) << 8) | ((op3) << 16))
#define M4(op1, op2, op3, op4) ((op1) | ((op2) << 8) | ((op3) << 16) | ((op4) << 24))
#define M4(op1, op2, op3, op4) ((op1) | ((op2) << 8) | ((op3) << 16) | ((uint32_t)(op4) << 24))
static BOOL code_match(CodeContext *s, int pos, ...)
{

View file

@ -1950,7 +1950,7 @@ int main(int argc, char **argv)
BOOL is_test262_harness = FALSE;
BOOL is_module = FALSE;
showcrashreports();
ShowCrashReports();
#if !defined(_WIN32)
/* Date tests assume California local time */