On Thu, Oct 3, 2019 at 10:15 AM Ilya Maximets <i.maxim...@ovn.org> wrote: > > On 03.10.2019 18:13, Ilya Maximets wrote: > > On 02.10.2019 20:15, William Tu wrote: > >> 32-bit and 64-bit libunwind can not be installed at the same time. > >> For 32-bit build, this patch removes the 64-bit libunwind and install > >> 32-bit version. > >> > >> Tested-at: https://travis-ci.org/williamtu/ovs-travis/builds/592649311 > >> Fixes: e2ed6fbeb18c ("fatal-signal: Catch SIGSEGV and print backtrace.") > >> Signed-off-by: William Tu <u9012...@gmail.com> > >> --- > >> .travis/linux-prepare.sh | 6 ++++++ > >> 1 file changed, 6 insertions(+) > >> > >> diff --git a/.travis/linux-prepare.sh b/.travis/linux-prepare.sh > >> index 70fd98f715ed..164adf7ec4f8 100755 > >> --- a/.travis/linux-prepare.sh > >> +++ b/.travis/linux-prepare.sh > >> @@ -14,3 +14,9 @@ cd .. > >> pip install --disable-pip-version-check --user six flake8 hacking > >> pip install --user --upgrade docutils > >> + > >> +if [[ $BUILD_ENV =~ "-m32" ]]; then > >> + # 32-bit and 64-bit libunwind can not be installed at the same time. > >> + # This will remove the 64-bit libunwind and install 32-bit version. > >> + sudo apt-get install -y libunwind-dev:i386 > >> +fi > >> > > > > Thanks for the new version. > > > > One thing I noticed is that without additional changes[1] this > > patch just makes 'configure' script to fail the library check, > > because 32bit library can't be linked with 64bit binary it checks: > > > > checking for unw_backtrace in -lunwind... no > > > > But it should work as intended with the patch I posted: > > > > [1] https://patchwork.ozlabs.org/patch/1171259/ > > > > Note that I replaced $BUILD_ENV with $M32 variable, so one of the > > patches will need to be updated depending on the order of applying. > > i.e. following diff should be squashed to one of them: > > > > -if [[ $BUILD_ENV =~ "-m32" ]]; then > > +if [ "$M32" ]; then > > > > Other than that, > > Acked-by: Ilya Maximets <i.maxim...@ovn.org> > > > Hmm, I tried to apply this patch and check the build and it > failed: > > lib/backtrace.c: In function ‘log_received_backtrace’: > lib/backtrace.c:105:23: error: format ‘%lx’ expects argument of type ‘long > unsigned int’, but argument 4 has type ‘unw_word_t {aka unsigned int}’ > [-Werror=format=] > VLOG_WARN("0x%016lx <%s+0x%lx>\n", > ^ > ./include/openvswitch/vlog.h:277:41: note: in definition of macro ‘VLOG’ > vlog(&this_module, level__, __VA_ARGS__); \ > > lib/backtrace.c:105:13: note: in expansion of macro ‘VLOG_WARN’ > VLOG_WARN("0x%016lx <%s+0x%lx>\n", > ^ > lib/backtrace.c:105:23: error: format ‘%lx’ expects argument of type ‘long > unsigned int’, but argument 6 has type ‘unw_word_t {aka unsigned int}’ > [-Werror=format=] > VLOG_WARN("0x%016lx <%s+0x%lx>\n", > ^ > ./include/openvswitch/vlog.h:277:41: note: in definition of macro ‘VLOG’ > vlog(&this_module, level__, __VA_ARGS__); \ > > lib/backtrace.c:105:13: note: in expansion of macro ‘VLOG_WARN’ > > VLOG_WARN("0x%016lx <%s+0x%lx>\n", > ^ > > Full log: > https://travis-ci.org/igsilya/ovs/jobs/593132451
Thanks! For 32-bit libunwind, the unw_word_t is defined as uint32_t, and for 64-bit libunwind, it is defined as uint64_t. Here actually it is printing a pointer, so I will change it to use PRIxPTR diff --git a/lib/backtrace.c b/lib/backtrace.c index 9347634487c8..2853d5ff150d 100644 --- a/lib/backtrace.c +++ b/lib/backtrace.c @@ -102,7 +102,7 @@ log_received_backtrace(int fd) { if (backtrace[i].func[0] == 0) { break; } - VLOG_WARN("0x%016lx <%s+0x%lx>\n", + VLOG_WARN("0x%016"PRIxPTR" <%s+0x%"PRIxPTR">\n", backtrace[i].ip, backtrace[i].func, backtrace[i].offset); I clone your upstream_freebsd_11.3 branch, and tested-at https://travis-ci.org/williamtu/ovs-travis/builds/593284524 I will send a patch based on your patch. Regards, William _______________________________________________ dev mailing list d...@openvswitch.org https://mail.openvswitch.org/mailman/listinfo/ovs-dev