On 3/17/23 14:49, Ales Musil wrote:
> 
> 
> On Fri, Mar 17, 2023 at 2:42 PM Ilya Maximets <i.maxim...@ovn.org 
> <mailto:i.maxim...@ovn.org>> wrote:
> 
>     On 3/17/23 14:03, Ales Musil wrote:
>     > Use the backtrace functions that is provided by libc
>     > this allows us to get backtrace that is independent of
>     > the current memory ap of the process. Which in turn can
>     > be used for debugging/tracing purpose. The backtrace
>     > is not 100% accurate due to various optimizations, most
>     > notably "-fomit-frame-pointer" and LTO. This might result
>     > that the line in source file doesn't correspond to the
>     > real line. However, it should be able to pinpoint at least
>     > the function where the backtrace was called.
>     >
>     > The backtrace is not marked as signal safe however the backtrace
>     > manual page gives more detailed explanation why it might be the
>     > case [0]. Load the "libgcc" in advance within the "fatal_signal_init"
>     > which should ensure that subsequent calls to backtrace* do not
>     > call malloc and are signal safe.
>     >
>     > The typical backtrace will look similar to the one below:
>     > /lib64/libopenvswitch-3.1.so 
> <http://libopenvswitch-3.1.so>.0(backtrace_capture+0x1e) [0x7fc5db298dfe]
>     > /lib64/libopenvswitch-3.1.so 
> <http://libopenvswitch-3.1.so>.0(log_backtrace_at+0x57) [0x7fc5db2999e7]
>     > /lib64/libovsdb-3.1.so.0(ovsdb_txn_complete+0x7b) [0x7fc5db56247b]
>     > /lib64/libovsdb-3.1.so.0(ovsdb_txn_propose_commit_block+0x8d) 
> [0x7fc5db563a8d]
>     > ovsdb-server(+0xa661) [0x562cfce2e661]
>     > ovsdb-server(+0x7e39) [0x562cfce2be39]
>     > /lib64/libc.so.6(+0x27b4a) [0x7fc5db048b4a]
>     > /lib64/libc.so.6(__libc_start_main+0x8b) [0x7fc5db048c0b]
>     > ovsdb-server(+0x8c35) [0x562cfce2cc35]
>     >
>     > backtrace.h elaborates on how to effectively get the line
>     > information associated with the addressed presented in the
>     > backtrace.
>     >
>     > [0]
>     > backtrace() and backtrace_symbols_fd() don't call malloc()
>     > explicitly, but they are part of libgcc, which gets loaded
>     > dynamically when first used.  Dynamic loading usually triggers
>     > a call to malloc(3).  If you need certain calls to these two
>     > functions to not allocate memory (in signal handlers, for
>     > example), you need to make sure libgcc is loaded beforehand
>     >
>     > Reported-at: https://bugzilla.redhat.com/2177760 
> <https://bugzilla.redhat.com/2177760>
>     > Signed-off-by: Ales Musil <amu...@redhat.com <mailto:amu...@redhat.com>>
>     > ---
>     >  include/openvswitch/vlog.h |   4 +-
>     >  lib/backtrace.c            |  71 ++++++++------------------
>     >  lib/backtrace.h            |  76 +++++++++++++---------------
>     >  lib/daemon-unix.c          |   1 -
>     >  lib/fatal-signal.c         | 100 +++++++++----------------------------
>     >  lib/ovsdb-error.c          |  15 ++----
>     >  lib/vlog.c                 |  14 ++----
>     >  m4/openvswitch.m4          |  20 +++-----
>     >  tests/atlocal.in <http://atlocal.in>           |   1 +
>     >  tests/daemon.at <http://daemon.at>            |  71 
> ++++++++++++++++++++++++++
>     >  10 files changed, 165 insertions(+), 208 deletions(-)
> 
>     Hi, Ales.  I didn't read the patch, but I do not agree with the name. :)
> 
> 
> Hi Ilya,
>  
> 
>     I'm not sure if need to replace libunwind.  Can we use libunwind whenever
>     possible and fall back to backtrace, if libunwind is not available?
> 
> 
> The BZ talked about replacing, I guess it might be possible to have both and 
> use whatever is
> configured.

Unless both solutions are available on the same range of systems,
including different OS, OS versions, compilers, libc implementation,
and so on, we should keep libunwind support.

>  
> 
> 
>     Also, libgcc is part of GCC, right?  How does it work with clang?  We
>     probably shouldn't mention it in logs if it's not what is actually used.
> 
> 
> It works with clang as well (I've tested it), it's part of libc and I have no 
> idea why it's called libgcc :)

Maybe I'm reading that wrong but on my fedora system libgcc is
provided by the gcc package, not glibc.

>  
> 
> 
> 
>     Best regards, Ilya Maximets.
> 
> 
> Thanks,
> Ales
> 
> -- 
> 
> Ales Musil
> 
> Senior Software Engineer - OVN Core
> 
> Red Hat EMEA <https://www.redhat.com>
> 
> amu...@redhat.com <mailto:amu...@redhat.com>    IM: amusil
> 
> <https://red.ht/sig>
> 

_______________________________________________
dev mailing list
d...@openvswitch.org
https://mail.openvswitch.org/mailman/listinfo/ovs-dev

Reply via email to