<div dir="ltr">Oops.  Should be fixed in SVN r293008.<br><div class="gmail_extra"><br><div class="gmail_quote">On Mon, Jan 23, 2017 at 4:01 AM, Oliver Stannard <span dir="ltr"><<a href="mailto:Oliver.Stannard@arm.com" target="_blank">Oliver.Stannard@arm.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex">Hi Saleem,<br>
<br>
This patch is causing our internal runs of the libc++ and libc++abi tests to fail, because logDWARF is referenced but not defined in release builds (with NDEBUG defined).<br>
<br>
However, I see that all of the libc++ buildbots are passing. Does this patch need modifying to make _LIBUNWIND_TRACE_DWARF conditional on NDEBUG, or is there something in the Linux environment that we might need to replicate in our bare-metal environment to make this work?<br>
<br>
Thanks,<br>
Oliver<br>
<div class="gmail-HOEnZb"><div class="gmail-h5"><br>
> -----Original Message-----<br>
> From: cfe-commits [mailto:<a href="mailto:cfe-commits-bounces@lists.llvm.org">cfe-commits-bounces@<wbr>lists.llvm.org</a>] On Behalf Of<br>
> Saleem Abdulrasool via cfe-commits<br>
> Sent: 21 January 2017 16:23<br>
> To: <a href="mailto:cfe-commits@lists.llvm.org">cfe-commits@lists.llvm.org</a><br>
> Subject: [libunwind] r292722 - DWARF: allow enabling tracing at runtime<br>
><br>
> Author: compnerd<br>
> Date: Sat Jan 21 10:22:57 2017<br>
> New Revision: 292722<br>
><br>
> URL: <a href="http://llvm.org/viewvc/llvm-project?rev=292722&view=rev" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-<wbr>project?rev=292722&view=rev</a><br>
> Log:<br>
> DWARF: allow enabling tracing at runtime<br>
><br>
> Introduce `logDWARF` and the associated environment variable<br>
> `LIBUNWIND_PRINT_DWARF` to trace the CFI instructions.<br>
><br>
> Modified:<br>
>     libunwind/trunk/src/<wbr>DwarfParser.hpp<br>
>     libunwind/trunk/src/libunwind.<wbr>cpp<br>
><br>
> Modified: libunwind/trunk/src/<wbr>DwarfParser.hpp<br>
> URL: <a href="http://llvm.org/viewvc/llvm-" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-</a><br>
> project/libunwind/trunk/src/<wbr>DwarfParser.hpp?rev=292722&r1=<wbr>292721&r2=292722<br>
> &view=diff<br>
> ==============================<wbr>==============================<wbr>==============<br>
> ====<br>
> --- libunwind/trunk/src/<wbr>DwarfParser.hpp (original)<br>
> +++ libunwind/trunk/src/<wbr>DwarfParser.hpp Sat Jan 21 10:22:57 2017<br>
> @@ -23,6 +23,14 @@<br>
><br>
>  #include "AddressSpace.hpp"<br>
><br>
> +extern "C" bool logDWARF();<br>
> +<br>
> +#define _LIBUNWIND_TRACE_DWARF(...)<br>
> \<br>
> +  do {<br>
> \<br>
> +    if (logDWARF())<br>
> \<br>
> +      fprintf(stderr, __VA_ARGS__);<br>
> \<br>
> +  } while (0)<br>
> +<br>
>  namespace libunwind {<br>
><br>
>  /// CFI_Parser does basic parsing of a CFI (Call Frame Information)<br>
> records.<br>
> @@ -364,13 +372,12 @@ bool CFI_Parser<A>::<wbr>parseInstructions(A<br>
>                                        const CIE_Info &cieInfo, pint_t<br>
> pcoffset,<br>
>                                        PrologInfoStackEntry<br>
> *&rememberStack,<br>
>                                        PrologInfo *results) {<br>
> -  const bool logDwarf = false;<br>
>    pint_t p = instructions;<br>
>    pint_t codeOffset = 0;<br>
>    PrologInfo initialState = *results;<br>
> -  if (logDwarf)<br>
> -    fprintf(stderr, "parseInstructions(<wbr>instructions=0x%0" PRIx64 ")\n",<br>
> -            (uint64_t)instructionsEnd);<br>
> +<br>
> +  _LIBUNWIND_TRACE_DWARF("<wbr>parseInstructions(<wbr>instructions=0x%0" PRIx64<br>
> ")\n",<br>
> +                         static_cast<uint64_t>(<wbr>instructionsEnd));<br>
><br>
>    // see DWARF Spec, section 6.4.2 for details on unwind opcodes<br>
>    while ((p < instructionsEnd) && (codeOffset < pcoffset)) {<br>
> @@ -386,35 +393,30 @@ bool CFI_Parser<A>::<wbr>parseInstructions(A<br>
>      ++p;<br>
>      switch (opcode) {<br>
>      case DW_CFA_nop:<br>
> -      if (logDwarf)<br>
> -        fprintf(stderr, "DW_CFA_nop\n");<br>
> +      _LIBUNWIND_TRACE_DWARF("DW_<wbr>CFA_nop\n");<br>
>        break;<br>
>      case DW_CFA_set_loc:<br>
>        codeOffset =<br>
>            addressSpace.getEncodedP(p, instructionsEnd,<br>
> cieInfo.pointerEncoding);<br>
> -      if (logDwarf)<br>
> -        fprintf(stderr, "DW_CFA_set_loc\n");<br>
> +      _LIBUNWIND_TRACE_DWARF("DW_<wbr>CFA_set_loc\n");<br>
>        break;<br>
>      case DW_CFA_advance_loc1:<br>
>        codeOffset += (addressSpace.get8(p) * cieInfo.codeAlignFactor);<br>
>        p += 1;<br>
> -      if (logDwarf)<br>
> -        fprintf(stderr, "DW_CFA_advance_loc1: new offset=%" PRIu64 "\n",<br>
> -                (uint64_t)codeOffset);<br>
> +      _LIBUNWIND_TRACE_DWARF("DW_<wbr>CFA_advance_loc1: new offset=%" PRIu64<br>
> "\n",<br>
> +                             static_cast<uint64_t>(<wbr>codeOffset));<br>
>        break;<br>
>      case DW_CFA_advance_loc2:<br>
>        codeOffset += (addressSpace.get16(p) * cieInfo.codeAlignFactor);<br>
>        p += 2;<br>
> -      if (logDwarf)<br>
> -        fprintf(stderr, "DW_CFA_advance_loc2: new offset=%" PRIu64 "\n",<br>
> -                (uint64_t)codeOffset);<br>
> +      _LIBUNWIND_TRACE_DWARF("DW_<wbr>CFA_advance_loc2: new offset=%" PRIu64<br>
> "\n",<br>
> +                             static_cast<uint64_t>(<wbr>codeOffset));<br>
>        break;<br>
>      case DW_CFA_advance_loc4:<br>
>        codeOffset += (addressSpace.get32(p) * cieInfo.codeAlignFactor);<br>
>        p += 4;<br>
> -      if (logDwarf)<br>
> -        fprintf(stderr, "DW_CFA_advance_loc4: new offset=%" PRIu64 "\n",<br>
> -                (uint64_t)codeOffset);<br>
> +      _LIBUNWIND_TRACE_DWARF("DW_<wbr>CFA_advance_loc4: new offset=%" PRIu64<br>
> "\n",<br>
> +                             static_cast<uint64_t>(<wbr>codeOffset));<br>
>        break;<br>
>      case DW_CFA_offset_extended:<br>
>        reg = addressSpace.getULEB128(p, instructionsEnd);<br>
> @@ -426,21 +428,18 @@ bool CFI_Parser<A>::<wbr>parseInstructions(A<br>
>        }<br>
>        results->savedRegisters[reg].<wbr>location = kRegisterInCFA;<br>
>        results->savedRegisters[reg].<wbr>value = offset;<br>
> -      if (logDwarf)<br>
> -        fprintf(stderr,<br>
> -                "DW_CFA_offset_extended(reg=%" PRIu64 ", offset=%" PRId64<br>
> ")\n",<br>
> -                reg, offset);<br>
> +      _LIBUNWIND_TRACE_DWARF("DW_<wbr>CFA_offset_extended(reg=%" PRIu64 ", "<br>
> +                             "offset=%" PRId64 ")\n",<br>
> +                             reg, offset);<br>
>        break;<br>
>      case DW_CFA_restore_extended:<br>
>        reg = addressSpace.getULEB128(p, instructionsEnd);<br>
> -      ;<br>
>        if (reg > kMaxRegisterNumber) {<br>
>          _LIBUNWIND_LOG("malformed DWARF DW_CFA_restore_extended, reg too<br>
> big");<br>
>          return false;<br>
>        }<br>
>        results->savedRegisters[reg] = initialState.savedRegisters[<wbr>reg];<br>
> -      if (logDwarf)<br>
> -        fprintf(stderr, "DW_CFA_restore_extended(reg=%<wbr>" PRIu64 ")\n",<br>
> reg);<br>
> +      _LIBUNWIND_TRACE_DWARF("DW_<wbr>CFA_restore_extended(reg=%" PRIu64<br>
> ")\n", reg);<br>
>        break;<br>
>      case DW_CFA_undefined:<br>
>        reg = addressSpace.getULEB128(p, instructionsEnd);<br>
> @@ -449,8 +448,7 @@ bool CFI_Parser<A>::<wbr>parseInstructions(A<br>
>          return false;<br>
>        }<br>
>        results->savedRegisters[reg].<wbr>location = kRegisterUnused;<br>
> -      if (logDwarf)<br>
> -        fprintf(stderr, "DW_CFA_undefined(reg=%" PRIu64 ")\n", reg);<br>
> +      _LIBUNWIND_TRACE_DWARF("DW_<wbr>CFA_undefined(reg=%" PRIu64 ")\n", reg);<br>
>        break;<br>
>      case DW_CFA_same_value:<br>
>        reg = addressSpace.getULEB128(p, instructionsEnd);<br>
> @@ -465,8 +463,7 @@ bool CFI_Parser<A>::<wbr>parseInstructions(A<br>
>        results->savedRegisters[reg].<wbr>location = kRegisterUnused;<br>
>        // set flag to disable conversion to compact unwind<br>
>        results->sameValueUsed = true;<br>
> -      if (logDwarf)<br>
> -        fprintf(stderr, "DW_CFA_same_value(reg=%" PRIu64 ")\n", reg);<br>
> +      _LIBUNWIND_TRACE_DWARF("DW_<wbr>CFA_same_value(reg=%" PRIu64 ")\n",<br>
> reg);<br>
>        break;<br>
>      case DW_CFA_register:<br>
>        reg = addressSpace.getULEB128(p, instructionsEnd);<br>
> @@ -483,9 +480,8 @@ bool CFI_Parser<A>::<wbr>parseInstructions(A<br>
>        results->savedRegisters[reg].<wbr>value = (int64_t)reg2;<br>
>        // set flag to disable conversion to compact unwind<br>
>        results-><wbr>registersInOtherRegisters = true;<br>
> -      if (logDwarf)<br>
> -        fprintf(stderr, "DW_CFA_register(reg=%" PRIu64 ", reg2=%" PRIu64<br>
> ")\n",<br>
> -                reg, reg2);<br>
> +      _LIBUNWIND_TRACE_DWARF(<br>
> +          "DW_CFA_register(reg=%" PRIu64 ", reg2=%" PRIu64 ")\n", reg,<br>
> reg2);<br>
>        break;<br>
>  #if !defined(_LIBUNWIND_NO_HEAP)<br>
>      case DW_CFA_remember_state:<br>
> @@ -498,8 +494,7 @@ bool CFI_Parser<A>::<wbr>parseInstructions(A<br>
>        } else {<br>
>          return false;<br>
>        }<br>
> -      if (logDwarf)<br>
> -        fprintf(stderr, "DW_CFA_remember_state\n");<br>
> +      _LIBUNWIND_TRACE_DWARF("DW_<wbr>CFA_remember_state\n");<br>
>        break;<br>
>      case DW_CFA_restore_state:<br>
>        if (rememberStack != NULL) {<br>
> @@ -510,8 +505,7 @@ bool CFI_Parser<A>::<wbr>parseInstructions(A<br>
>        } else {<br>
>          return false;<br>
>        }<br>
> -      if (logDwarf)<br>
> -        fprintf(stderr, "DW_CFA_restore_state\n");<br>
> +      _LIBUNWIND_TRACE_DWARF("DW_<wbr>CFA_restore_state\n");<br>
>        break;<br>
>  #endif<br>
>      case DW_CFA_def_cfa:<br>
> @@ -523,9 +517,8 @@ bool CFI_Parser<A>::<wbr>parseInstructions(A<br>
>        }<br>
>        results->cfaRegister = (uint32_t)reg;<br>
>        results->cfaRegisterOffset = (int32_t)offset;<br>
> -      if (logDwarf)<br>
> -        fprintf(stderr, "DW_CFA_def_cfa(reg=%" PRIu64 ", offset=%" PRIu64<br>
> ")\n",<br>
> -                reg, offset);<br>
> +      _LIBUNWIND_TRACE_DWARF(<br>
> +          "DW_CFA_def_cfa(reg=%" PRIu64 ", offset=%" PRIu64 ")\n", reg,<br>
> offset);<br>
>        break;<br>
>      case DW_CFA_def_cfa_register:<br>
>        reg = addressSpace.getULEB128(p, instructionsEnd);<br>
> @@ -534,26 +527,23 @@ bool CFI_Parser<A>::<wbr>parseInstructions(A<br>
>          return false;<br>
>        }<br>
>        results->cfaRegister = (uint32_t)reg;<br>
> -      if (logDwarf)<br>
> -        fprintf(stderr, "DW_CFA_def_cfa_register(%" PRIu64 ")\n", reg);<br>
> +      _LIBUNWIND_TRACE_DWARF("DW_<wbr>CFA_def_cfa_register(%" PRIu64 ")\n",<br>
> reg);<br>
>        break;<br>
>      case DW_CFA_def_cfa_offset:<br>
>        results->cfaRegisterOffset = (int32_t)<br>
>                                    addressSpace.getULEB128(p,<br>
> instructionsEnd);<br>
>        results-><wbr>codeOffsetAtStackDecrement = (uint32_t)codeOffset;<br>
> -      if (logDwarf)<br>
> -        fprintf(stderr, "DW_CFA_def_cfa_offset(%d)\n",<br>
> -                results->cfaRegisterOffset);<br>
> +      _LIBUNWIND_TRACE_DWARF("DW_<wbr>CFA_def_cfa_offset(%d)\n",<br>
> +                             results->cfaRegisterOffset);<br>
>        break;<br>
>      case DW_CFA_def_cfa_expression:<br>
>        results->cfaRegister = 0;<br>
>        results->cfaExpression = (int64_t)p;<br>
>        length = addressSpace.getULEB128(p, instructionsEnd);<br>
>        p += length;<br>
> -      if (logDwarf)<br>
> -        fprintf(stderr, "DW_CFA_def_cfa_expression(<wbr>expression=0x%" PRIx64<br>
> -                        ", length=%" PRIu64 ")\n",<br>
> -                results->cfaExpression, length);<br>
> +      _LIBUNWIND_TRACE_DWARF("DW_<wbr>CFA_def_cfa_expression(<wbr>expression=0x%"<br>
> PRIx64<br>
> +                             ", length=%" PRIu64 ")\n",<br>
> +                             results->cfaExpression, length);<br>
>        break;<br>
>      case DW_CFA_expression:<br>
>        reg = addressSpace.getULEB128(p, instructionsEnd);<br>
> @@ -565,10 +555,10 @@ bool CFI_Parser<A>::<wbr>parseInstructions(A<br>
>        results->savedRegisters[reg].<wbr>value = (int64_t)p;<br>
>        length = addressSpace.getULEB128(p, instructionsEnd);<br>
>        p += length;<br>
> -      if (logDwarf)<br>
> -        fprintf(stderr, "DW_CFA_expression(reg=%" PRIu64<br>
> -                        ", expression=0x%" PRIx64 ", length=%" PRIu64<br>
> ")\n",<br>
> -                reg, results->savedRegisters[reg].<wbr>value, length);<br>
> +      _LIBUNWIND_TRACE_DWARF("DW_<wbr>CFA_expression(reg=%" PRIu64 ", "<br>
> +                             "expression=0x%" PRIx64 ", "<br>
> +                             "length=%" PRIu64 ")\n",<br>
> +                             reg, results->savedRegisters[reg].<wbr>value,<br>
> length);<br>
>        break;<br>
>      case DW_CFA_offset_extended_sf:<br>
>        reg = addressSpace.getULEB128(p, instructionsEnd);<br>
> @@ -581,10 +571,9 @@ bool CFI_Parser<A>::<wbr>parseInstructions(A<br>
>            addressSpace.getSLEB128(p, instructionsEnd) *<br>
> cieInfo.dataAlignFactor;<br>
>        results->savedRegisters[reg].<wbr>location = kRegisterInCFA;<br>
>        results->savedRegisters[reg].<wbr>value = offset;<br>
> -      if (logDwarf)<br>
> -        fprintf(stderr, "DW_CFA_offset_extended_sf(<wbr>reg=%" PRIu64<br>
> -                        ", offset=%" PRId64 ")\n",<br>
> -                reg, offset);<br>
> +      _LIBUNWIND_TRACE_DWARF("DW_<wbr>CFA_offset_extended_sf(reg=%" PRIu64 ",<br>
> "<br>
> +                             "offset=%" PRId64 ")\n",<br>
> +                             reg, offset);<br>
>        break;<br>
>      case DW_CFA_def_cfa_sf:<br>
>        reg = addressSpace.getULEB128(p, instructionsEnd);<br>
> @@ -596,18 +585,16 @@ bool CFI_Parser<A>::<wbr>parseInstructions(A<br>
>        }<br>
>        results->cfaRegister = (uint32_t)reg;<br>
>        results->cfaRegisterOffset = (int32_t)offset;<br>
> -      if (logDwarf)<br>
> -        fprintf(stderr,<br>
> -                "DW_CFA_def_cfa_sf(reg=%" PRIu64 ", offset=%" PRId64<br>
> ")\n", reg,<br>
> -                offset);<br>
> +      _LIBUNWIND_TRACE_DWARF("DW_<wbr>CFA_def_cfa_sf(reg=%" PRIu64 ", "<br>
> +                             "offset=%" PRId64 ")\n",<br>
> +                             reg, offset);<br>
>        break;<br>
>      case DW_CFA_def_cfa_offset_sf:<br>
>        results->cfaRegisterOffset = (int32_t)<br>
>          (addressSpace.getSLEB128(p, instructionsEnd) *<br>
> cieInfo.dataAlignFactor);<br>
>        results-><wbr>codeOffsetAtStackDecrement = (uint32_t)codeOffset;<br>
> -      if (logDwarf)<br>
> -        fprintf(stderr, "DW_CFA_def_cfa_offset_sf(%d)\<wbr>n",<br>
> -                results->cfaRegisterOffset);<br>
> +      _LIBUNWIND_TRACE_DWARF("DW_<wbr>CFA_def_cfa_offset_sf(%d)\n",<br>
> +                             results->cfaRegisterOffset);<br>
>        break;<br>
>      case DW_CFA_val_offset:<br>
>        reg = addressSpace.getULEB128(p, instructionsEnd);<br>
> @@ -615,10 +602,9 @@ bool CFI_Parser<A>::<wbr>parseInstructions(A<br>
>                                                      *<br>
> cieInfo.dataAlignFactor;<br>
>        results->savedRegisters[reg].<wbr>location = kRegisterOffsetFromCFA;<br>
>        results->savedRegisters[reg].<wbr>value = offset;<br>
> -      if (logDwarf)<br>
> -        fprintf(stderr,<br>
> -                "DW_CFA_val_offset(reg=%" PRIu64 ", offset=%" PRId64<br>
> "\n", reg,<br>
> -                offset);<br>
> +      _LIBUNWIND_TRACE_DWARF("DW_<wbr>CFA_val_offset(reg=%" PRIu64 ", "<br>
> +                             "offset=%" PRId64 "\n",<br>
> +                             reg, offset);<br>
>        break;<br>
>      case DW_CFA_val_offset_sf:<br>
>        reg = addressSpace.getULEB128(p, instructionsEnd);<br>
> @@ -630,10 +616,9 @@ bool CFI_Parser<A>::<wbr>parseInstructions(A<br>
>            addressSpace.getSLEB128(p, instructionsEnd) *<br>
> cieInfo.dataAlignFactor;<br>
>        results->savedRegisters[reg].<wbr>location = kRegisterOffsetFromCFA;<br>
>        results->savedRegisters[reg].<wbr>value = offset;<br>
> -      if (logDwarf)<br>
> -        fprintf(stderr,<br>
> -                "DW_CFA_val_offset_sf(reg=%" PRIu64 ", offset=%" PRId64<br>
> "\n",<br>
> -                reg, offset);<br>
> +      _LIBUNWIND_TRACE_DWARF("DW_<wbr>CFA_val_offset_sf(reg=%" PRIu64 ", "<br>
> +                             "offset=%" PRId64 "\n",<br>
> +                             reg, offset);<br>
>        break;<br>
>      case DW_CFA_val_expression:<br>
>        reg = addressSpace.getULEB128(p, instructionsEnd);<br>
> @@ -645,16 +630,14 @@ bool CFI_Parser<A>::<wbr>parseInstructions(A<br>
>        results->savedRegisters[reg].<wbr>value = (int64_t)p;<br>
>        length = addressSpace.getULEB128(p, instructionsEnd);<br>
>        p += length;<br>
> -      if (logDwarf)<br>
> -        fprintf(stderr, "DW_CFA_val_expression(reg=%" PRIu64<br>
> -                        ", expression=0x%" PRIx64 ", length=%" PRIu64<br>
> ")\n",<br>
> -                reg, results->savedRegisters[reg].<wbr>value, length);<br>
> +      _LIBUNWIND_TRACE_DWARF("DW_<wbr>CFA_val_expression(reg=%" PRIu64 ", "<br>
> +                             "expression=0x%" PRIx64 ", length=%" PRIu64<br>
> ")\n",<br>
> +                             reg, results->savedRegisters[reg].<wbr>value,<br>
> length);<br>
>        break;<br>
>      case DW_CFA_GNU_args_size:<br>
>        length = addressSpace.getULEB128(p, instructionsEnd);<br>
>        results->spExtraArgSize = (uint32_t)length;<br>
> -      if (logDwarf)<br>
> -        fprintf(stderr, "DW_CFA_GNU_args_size(%" PRIu64 ")\n", length);<br>
> +      _LIBUNWIND_TRACE_DWARF("DW_<wbr>CFA_GNU_args_size(%" PRIu64 ")\n",<br>
> length);<br>
>        break;<br>
>      case DW_CFA_GNU_negative_offset_<wbr>extended:<br>
>        reg = addressSpace.getULEB128(p, instructionsEnd);<br>
> @@ -667,9 +650,8 @@ bool CFI_Parser<A>::<wbr>parseInstructions(A<br>
>                                                      *<br>
> cieInfo.dataAlignFactor;<br>
>        results->savedRegisters[reg].<wbr>location = kRegisterInCFA;<br>
>        results->savedRegisters[reg].<wbr>value = -offset;<br>
> -      if (logDwarf)<br>
> -        fprintf(stderr, "DW_CFA_GNU_negative_offset_<wbr>extended(%" PRId64<br>
> ")\n",<br>
> -                offset);<br>
> +      _LIBUNWIND_TRACE_DWARF(<br>
> +          "DW_CFA_GNU_negative_offset_<wbr>extended(%" PRId64 ")\n", offset);<br>
>        break;<br>
>      default:<br>
>        operand = opcode & 0x3F;<br>
> @@ -680,25 +662,22 @@ bool CFI_Parser<A>::<wbr>parseInstructions(A<br>
>                                                      *<br>
> cieInfo.dataAlignFactor;<br>
>          results->savedRegisters[reg].<wbr>location = kRegisterInCFA;<br>
>          results->savedRegisters[reg].<wbr>value = offset;<br>
> -        if (logDwarf)<br>
> -          fprintf(stderr, "DW_CFA_offset(reg=%d, offset=%" PRId64 ")\n",<br>
> -                  operand, offset);<br>
> +        _LIBUNWIND_TRACE_DWARF("DW_<wbr>CFA_offset(reg=%d, offset=%" PRId64<br>
> ")\n",<br>
> +                               operand, offset);<br>
>          break;<br>
>        case DW_CFA_advance_loc:<br>
>          codeOffset += operand * cieInfo.codeAlignFactor;<br>
> -        if (logDwarf)<br>
> -          fprintf(stderr, "DW_CFA_advance_loc: new offset=%" PRIu64 "\n",<br>
> -                  (uint64_t)codeOffset);<br>
> +        _LIBUNWIND_TRACE_DWARF("DW_<wbr>CFA_advance_loc: new offset=%" PRIu64<br>
> "\n",<br>
> +                               static_cast<uint64_t>(<wbr>codeOffset));<br>
>          break;<br>
>        case DW_CFA_restore:<br>
>          reg = operand;<br>
>          results->savedRegisters[reg] = initialState.savedRegisters[<wbr>reg];<br>
> -        if (logDwarf)<br>
> -          fprintf(stderr, "DW_CFA_restore(reg=%" PRIu64 ")\n", reg);<br>
> +        _LIBUNWIND_TRACE_DWARF("DW_<wbr>CFA_restore(reg=%" PRIu64 ")\n",<br>
> +                               static_cast<long>(operand));<br>
>          break;<br>
>        default:<br>
> -        if (logDwarf)<br>
> -          fprintf(stderr, "unknown CFA opcode 0x%02X\n", opcode);<br>
> +        _LIBUNWIND_TRACE_DWARF("<wbr>unknown CFA opcode 0x%02X\n", opcode);<br>
>          return false;<br>
>        }<br>
>      }<br>
><br>
> Modified: libunwind/trunk/src/libunwind.<wbr>cpp<br>
> URL: <a href="http://llvm.org/viewvc/llvm-" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-</a><br>
> project/libunwind/trunk/src/<wbr>libunwind.cpp?rev=292722&r1=<wbr>292721&r2=292722&v<br>
> iew=diff<br>
> ==============================<wbr>==============================<wbr>==============<br>
> ====<br>
> --- libunwind/trunk/src/libunwind.<wbr>cpp (original)<br>
> +++ libunwind/trunk/src/libunwind.<wbr>cpp Sat Jan 21 10:22:57 2017<br>
> @@ -371,5 +371,17 @@ bool logUnwinding() {<br>
>    return log;<br>
>  }<br>
><br>
> +_LIBUNWIND_HIDDEN<br>
> +bool logDWARF() {<br>
> +  // do manual lock to avoid use of _cxa_guard_acquire or initializers<br>
> +  static bool checked = false;<br>
> +  static bool log = false;<br>
> +  if (!checked) {<br>
> +    log = (getenv("LIBUNWIND_PRINT_<wbr>DWARF") != NULL);<br>
> +    checked = true;<br>
> +  }<br>
> +  return log;<br>
> +}<br>
> +<br>
>  #endif // NDEBUG<br>
><br>
><br>
><br>
> ______________________________<wbr>_________________<br>
> cfe-commits mailing list<br>
> <a href="mailto:cfe-commits@lists.llvm.org">cfe-commits@lists.llvm.org</a><br>
> <a href="http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits" rel="noreferrer" target="_blank">http://lists.llvm.org/cgi-bin/<wbr>mailman/listinfo/cfe-commits</a><br>
</div></div></blockquote></div><br><br clear="all"><div><br></div>-- <br><div class="gmail_signature">Saleem Abdulrasool<br>compnerd (at) compnerd (dot) org</div>
</div></div>