[llvm-dev] multi-entry function (debug info)

via llvm-dev llvm-dev at lists.llvm.org
Tue Oct 23 08:41:59 PDT 2018


Hi Muhui,

In general the function's start address would be the low_pc.  From time to time I hear about people wanting to put cold code blocks before the entry point; I think so far that has not been implemented, but if it is, then low_pc would be the lowest code address in the function and DW_AT_entry_pc would record the entrypoint address.

Regarding multi-entry functions, I'm aware of two cases where this occurs in a source language.  One is when you have optional parameters in C++, which effectively creates one or more overloads for the function; the other is PL/I which allows defining an entry label within the body of the function.  For the C++ case, I'd expect the front-end to create stubs that fill in the defaulted parameters and then tail-call the main function; in this case, each stub would have its own debug-info entry and be treated as its own independent function for debug-info purposes.  For PL/I, I would probably do the same, although I admit it has been a long time since I did any PL/I programming and I never worked on a PL/I compiler.

If I am not covering the cases you are interested in, please provide more details.
Thanks,
--paulr

From: llvm-dev [mailto:llvm-dev-bounces at lists.llvm.org] On Behalf Of Muhui Jiang via llvm-dev
Sent: Tuesday, October 23, 2018 10:56 AM
To: llvm-dev
Subject: [llvm-dev] multi-entry function

Hi

I could get the functions boundary by the attribute low_pc and high_pc in the dwarf debugging information. I assume the low_pc should be the function's start address. Is it right? If not, what should be the right way to get the function's start address, what if a function has multi-entry block?

Regards
Muhui
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20181023/6a2debc2/attachment.html>


More information about the llvm-dev mailing list