diff --git a/include/c/portable.h b/include/c/portable.h index 650dff24d..7595921a9 100644 --- a/include/c/portable.h +++ b/include/c/portable.h @@ -188,12 +188,7 @@ /* Entropy */ -# if defined(U3_OS_bsd) && defined(__OpenBSD__) -# define c3_rand(rd) (getentropy((void*)rd, 64) == 0 ? \ - (void)0 : c3_assert(!"ent")) -# else -# define c3_rand u3_sist_rand -# endif +#define c3_rand u3_sist_rand /* Static assertion */ diff --git a/include/config.h.in b/include/config.h.in index e8063e87e..563cfa05a 100644 --- a/include/config.h.in +++ b/include/config.h.in @@ -12,5 +12,6 @@ #mesondefine U3_MEMORY_DEBUG #mesondefine U3_CPU_DEBUG +#mesondefine U3_EVENT_TIME_DEBUG #endif /*CONFIG_H*/ diff --git a/meson.build b/meson.build index 03c1b613c..e1da8d14e 100644 --- a/meson.build +++ b/meson.build @@ -240,6 +240,7 @@ conf_data = configuration_data() conf_data.set('URBIT_VERSION', '"0.6.0"') conf_data.set('U3_MEMORY_DEBUG', get_option('gc')) conf_data.set('U3_CPU_DEBUG', get_option('prof')) +conf_data.set('U3_EVENT_TIME_DEBUG', get_option('event-time')) osdet = build_machine.system() os_c_flags = ['-funsigned-char','-ffast-math'] @@ -271,13 +272,20 @@ elif osdet == 'darwin' os_deps = os_deps + [ncurses_dep] -elif osdet == 'bsd' +elif osdet == 'bsd' or osdet == 'freebsd' conf_data.set('U3_OS_bsd', true) pthread_dep = meson.get_compiler('c').find_library('pthread') kvm_dep = meson.get_compiler('c').find_library('kvm') ncurses_dep = dependency('ncurses') os_deps = os_deps + [kvm_dep, pthread_dep, ncurses_dep] + +elif osdet == 'openbsd' + conf_data.set('U3_OS_bsd', true) + os_link_flags = ['-L/usr/local/lib', '-lgmp', '-lsigsegv', '-lcurses'] + gmp_dep = [] + sigsegv_dep = [] + else error('Unsupported OS detected:' + osdet) endif @@ -295,7 +303,7 @@ configure_file(input : 'include/config.h.in', configuration : conf_data) # We expect these libs to supplied with the distribution -curl_dep = dependency('libcurl', version: '>=7.35.0') +curl_dep = dependency('libcurl', version: '>=7.19.0') if osdet == 'darwin' and not get_option('nix') libcrypto = meson.get_compiler('c').find_library('crypto', dirs: [ '/usr/local/opt/openssl/lib/' ]) @@ -308,7 +316,7 @@ endif if(legacy_meson) gmp_dep = find_library('gmp') sigsegv_dep = find_library('sigsegv') -else +elif osdet != 'openbsd' gmp_dep = meson.get_compiler('c').find_library('gmp') sigsegv_dep = meson.get_compiler('c').find_library('sigsegv') endif diff --git a/meson_options.txt b/meson_options.txt index 0785290ba..b09e525d0 100644 --- a/meson_options.txt +++ b/meson_options.txt @@ -2,5 +2,7 @@ option('gc', type : 'boolean', value : false, description : 'Add debugging information to heap. Run with -g. Breaks image.') option('prof', type : 'boolean', value : false, description : 'Activate profiling. Run with -P.') +option('event-time', type : 'boolean', value : false, + description : 'Print timing information per event.') option('nix', type: 'boolean', value: false, description: 'Build using nix.') diff --git a/noun/manage.c b/noun/manage.c index 94ba35f3e..7d3517da3 100644 --- a/noun/manage.c +++ b/noun/manage.c @@ -625,14 +625,15 @@ u3m_bail(u3_noun how) } else { c3_assert(_(u3ud(u3h(how)))); - fprintf(stderr, "\r\nbail: %d\r\n", u3h(how)); - u3m_p("bail", u3t(how)); } } switch ( how ) { - case c3__fail: + case c3__fail: { + break; + } + case c3__meme: { fprintf(stderr, "bailing out\r\n"); abort(); diff --git a/noun/trace.c b/noun/trace.c index d2a9e9a0c..ef5a171ff 100644 --- a/noun/trace.c +++ b/noun/trace.c @@ -45,7 +45,7 @@ u3_lo_tank(c3_l tab_l, u3_noun tac); void u3t_slog(u3_noun hod) { -#ifdef GHETTO +#ifdef U3_EVENT_TIME_DEBUG static int old; static struct timeval b4, f2, d0; c3_w ms_w; @@ -604,7 +604,7 @@ u3t_boot(void) setitimer(ITIMER_PROF, &itm_v, 0); } #elif defined(U3_OS_bsd) -# error "Profiling isn't yet supported on BSD" + // XX "Profiling isn't yet supported on BSD" #else # error "port: profiling" #endif @@ -644,7 +644,7 @@ u3t_boff(void) } #elif defined(U3_OS_bsd) -# error "Profiling isn't yet supported on BSD" + // XX "Profiling isn't yet supported on BSD" #else # error "port: profiling" #endif diff --git a/subprojects/secp256k1 b/subprojects/secp256k1 index 66a72cf20..87f73ffad 160000 --- a/subprojects/secp256k1 +++ b/subprojects/secp256k1 @@ -1 +1 @@ -Subproject commit 66a72cf2084799d0799874d4fa3c530a73713d81 +Subproject commit 87f73ffad3d3047baf1ed134fb7827a9dca163ee diff --git a/vere/main.c b/vere/main.c index b4194433b..9aebe6fef 100644 --- a/vere/main.c +++ b/vere/main.c @@ -186,6 +186,13 @@ _main_getopt(c3_i argc, c3_c** argv) } } +#if defined(U3_OS_bsd) + if (u3_Host.ops_u.pro == c3y) { + fprintf(stderr, "profiling isn't yet supported on BSD\r\n"); + return c3n; + } +#endif + if ( 0 != u3_Host.ops_u.fak_c ) { if ( 28 < strlen(u3_Host.ops_u.fak_c) ) { fprintf(stderr, "fake comets are disallowed\r\n"); diff --git a/vere/raft.c b/vere/raft.c index f2db8aa9a..ee8dade84 100644 --- a/vere/raft.c +++ b/vere/raft.c @@ -1559,7 +1559,7 @@ _raft_lame(u3_noun ovo, u3_noun why, u3_noun tan) static u3_noun _raft_punk(u3_noun ovo) { -#ifdef GHETTO +#ifdef U3_EVENT_TIME_DEBUG c3_c* txt_c = u3r_string(u3h(u3t(ovo))); #endif c3_w sec_w; @@ -1574,7 +1574,7 @@ _raft_punk(u3_noun ovo) sec_w = 0; } else sec_w = 600; -#ifdef GHETTO +#ifdef U3_EVENT_TIME_DEBUG struct timeval b4, f2, d0; gettimeofday(&b4, 0); if( c3__belt != u3h(u3t(ovo)) ){ @@ -1587,7 +1587,7 @@ _raft_punk(u3_noun ovo) gon = u3m_soft(sec_w, u3v_poke, u3k(ovo)); u3t_event_trace("Running", 'e'); -#ifdef GHETTO +#ifdef U3_EVENT_TIME_DEBUG c3_w ms_w; c3_w clr_w; @@ -2015,8 +2015,7 @@ _raft_pump(u3_noun ovo) ron = u3ke_jam(u3nc(u3k(u3A->now), ovo)); c3_assert(u3A->key); - // don't encrypt for the moment, bootstrapping - // ron = u3dc("en:crua", u3k(u3A->key), ron); + ron = u3dc("en:crub:crypto", u3k(u3A->key), ron); len_w = u3r_met(5, ron); bob_w = c3_malloc(len_w * 4L); diff --git a/vere/sist.c b/vere/sist.c index f20b1d4b2..cbfa17f32 100644 --- a/vere/sist.c +++ b/vere/sist.c @@ -415,12 +415,18 @@ _sist_bask(c3_c* pop_c, u3_noun may) void u3_sist_rand(c3_w* rad_w) { +#if defined(U3_OS_bsd) && defined(__OpenBSD__) + if (-1 == getentropy(rad_w, 64)) { + c3_assert(!"lo_rand"); + } +#else c3_i fid_i = open(DEVRANDOM, O_RDONLY); if ( 64 != read(fid_i, (c3_y*) rad_w, 64) ) { c3_assert(!"lo_rand"); } close(fid_i); +#endif } /* _sist_fast(): offer to save passcode by mug in home directory. @@ -971,13 +977,10 @@ _sist_rest() continue; } -#if 0 - // disable encryption for now - // if ( u3A->key ) { u3_noun dep; - dep = u3dc("de:crua", u3k(u3A->key), ron); + dep = u3dc("de:crub:crypto", u3k(u3A->key), ron); if ( c3n == u3du(dep) ) { uL(fprintf(uH, "record (%s) is corrupt (k)\n", ful_c)); u3_lo_bail(); @@ -987,7 +990,7 @@ _sist_rest() u3z(dep); } } -#endif + roe = u3nc(u3ke_cue(ron), roe); } u3A->ent_d = c3_max(las_d + 1ULL, old_d);