diff options
author | Ben Gamari <ben@smart-cactus.org> | 2019-12-26 20:58:15 -0500 |
---|---|---|
committer | Marge Bot <ben+marge-bot@smart-cactus.org> | 2020-11-15 03:35:45 -0500 |
commit | 0a7e592cb1883824a14639372ba284766849ff3a (patch) | |
tree | 0502d53f0f1069f1bb82f80a0f8a64baf36af278 /compiler/GHC/Cmm/CLabel.hs | |
parent | 24a86f09da3426cf1006004bc45d312725280dd5 (diff) | |
download | haskell-0a7e592cb1883824a14639372ba284766849ff3a.tar.gz |
nativeGen/dwarf: Fix procedure end addresses
Previously the `.debug_aranges` and `.debug_info` (DIE) DWARF
information would claim that procedures (represented with a
`DW_TAG_subprogram` DIE) would only span the range covered by their entry
block. This omitted all of the continuation blocks (represented by
`DW_TAG_lexical_block` DIEs), confusing `perf`. Fix this by introducing
a end-of-procedure label and using this as the `DW_AT_high_pc` of
procedure `DW_TAG_subprogram` DIEs
Fixes #17605.
Diffstat (limited to 'compiler/GHC/Cmm/CLabel.hs')
-rw-r--r-- | compiler/GHC/Cmm/CLabel.hs | 5 |
1 files changed, 5 insertions, 0 deletions
diff --git a/compiler/GHC/Cmm/CLabel.hs b/compiler/GHC/Cmm/CLabel.hs index d5df2dd1c5..75559edd2e 100644 --- a/compiler/GHC/Cmm/CLabel.hs +++ b/compiler/GHC/Cmm/CLabel.hs @@ -44,6 +44,7 @@ module GHC.Cmm.CLabel ( mkAsmTempLabel, mkAsmTempDerivedLabel, mkAsmTempEndLabel, + mkAsmTempProcEndLabel, mkAsmTempDieLabel, mkDirty_MUT_VAR_Label, @@ -755,6 +756,10 @@ mkAsmTempDerivedLabel = AsmTempDerivedLabel mkAsmTempEndLabel :: CLabel -> CLabel mkAsmTempEndLabel l = mkAsmTempDerivedLabel l (fsLit "_end") +-- | A label indicating the end of a procedure. +mkAsmTempProcEndLabel :: CLabel -> CLabel +mkAsmTempProcEndLabel l = mkAsmTempDerivedLabel l (fsLit "_proc_end") + -- | Construct a label for a DWARF Debug Information Entity (DIE) -- describing another symbol. mkAsmTempDieLabel :: CLabel -> CLabel |