Skip to content
  • Stefano Sanfilippo's avatar
    perf jit: Add unwinding support · 0284fecd
    Stefano Sanfilippo authored
    
    
    This record is intended to provide unwinding information in the
    eh_frame format. This is required to unwind JITed code which
    does not maintain the frame pointer register during function calls.
    
    The eh_frame unwinding information can be emitted by V8 / Chromium
    when the --perf_prof_unwinding_info is passed.
    
    A record of type jr_code_unwinding_info comes before the jr_code_load
    it referred to and contains both the .eh_frame and .eh_frame_hdr.
    
    The fields in the header have the following meaning:
    
      * unwinding_size: size of the eh_frame and eh_frame_hdr, necessary
        for distinguishing the content from the padding.
    
      * eh_frame_hdr_size: as the name says.
    
      * mapped_size: size of the payload that was in memory at runtime.
        typically unwinding_size if the .eh_frame_hdr and .eh_frame were
        mapped, or 0 if they weren't. It should always be the former case,
        since the .eh_frame is guaranteed to be mapped in memory. However,
        certain JITs might want to inject an .eh_frame_hdr with an empty LUT
        to trigger fp-based unwinding fallback in libunwind. The only part
        of the .eh_frame_hdr that libunwind reads from remote memory is the
        LUT, and since there is none, mapping the unwinding info in memory
        is not necessary, and 0 in this field signifies that it wasn't.
        This practical hack allows to save bytes in code memory for those
        JIT compilers that might or might not maintain a valid frame pointer.
    
    The payload that follows is assumed to contain first the .eh_frame and
    then the .eh_header_hdr, with no padding between the two.
    
    Signed-off-by: default avatarStefano Sanfilippo <ssanfilippo@chromium.org>
    Signed-off-by: default avatarRoss McIlroy <rmcilroy@chromium.org>
    Reviewed-by: default avatarStephane Eranian <eranian@google.com>
    Cc: Anton Blanchard <anton@ozlabs.org>
    Cc: Jiri Olsa <jolsa@redhat.com>
    Cc: Namhyung Kim <namhyung@kernel.org>
    Cc: Peter Zijlstra <peterz@infradead.org>
    Link: http://lkml.kernel.org/r/1476356383-30100-7-git-send-email-eranian@google.com
    
    
    Signed-off-by: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
    0284fecd