On 09-02-19 22:07, Ian Lance Taylor wrote:
> On Fri, Feb 8, 2019 at 9:26 AM Thomas Schwinge <tho...@codesourcery.com> 
> wrote:
>>
>> On Fri, 8 Feb 2019 10:41:47 +0100, Tom de Vries <tdevr...@suse.de> wrote:
>>> The backtrace functions backtrace_full, backtrace_print and backtrace_simple
>>> walk the call stack, but make sure to skip the first entry, in order to skip
>>> over the functions themselves, and start the backtrace at the caller of the
>>> functions.
>>>
>>> When compiling with -flto, the functions may be inlined, causing them to 
>>> skip
>>> over the caller instead.
>>
>> So, when recently working on the OpenACC Profiling Interface
>> implementation in libgomp, where I'm using libbacktrace to figure out the
>> caller of certain libgomp functions, I recently wondered about the very
>> same issue, that we reliably have to skip a few initial frames.
>>
>> So, "noinline" is how to do that reliably...  ;-/ That might be
>> non-obvious for the casual reader, so they might not understand...
>>
>>> Fix this by declaring the functions with __attribute__((noinline)).
>>
>> ... this alone.
>>
>> I'd suggest to have a common "#define LIBBACKTRACE_NOINLINE [...]" (or
>> similar), together with the explanatory comment given above, and use that
>> at the respective definition (or declaration?) sites.  Can that go into
>> the public libbacktrace "*.h" file, so that it can also be used
>> elsewhere, as described above?
>>
>> If you agree, want me to prepare a patch?
> 
> I think that at least for backtrace_full and backtrace_print we are
> arguably looking at the SKIP parameter in the wrong place.  We
> shouldn't look at it in unwind before calling backtrace_pcinfo.  We
> should count the inlined functions found by backtrace_pcinfo against
> the SKIP parameter.

FTR, filed as PR89273 - "Count inlined functions in skip parm for
backtrace_full and backtrace_print" (
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=89273 ).

Thanks,
- Tom

Reply via email to