diff options
Diffstat (limited to 'compiler/nativeGen/Dwarf.hs')
-rw-r--r-- | compiler/nativeGen/Dwarf.hs | 15 |
1 files changed, 13 insertions, 2 deletions
diff --git a/compiler/nativeGen/Dwarf.hs b/compiler/nativeGen/Dwarf.hs index 35ee9c90ab..6bf49f0e0d 100644 --- a/compiler/nativeGen/Dwarf.hs +++ b/compiler/nativeGen/Dwarf.hs @@ -83,11 +83,22 @@ dwarfGen df modLoc us blocks = do pprDwarfFrame (debugFrame framesU procs) -- .aranges section: Information about the bounds of compilation units - let aranges = dwarfARangesSection $$ - pprDwarfARange (DwarfARange lowLabel highLabel unitU) + let aranges' | gopt Opt_SplitSections df = map mkDwarfARange procs + | otherwise = [DwarfARange lowLabel highLabel] + let aranges = dwarfARangesSection $$ pprDwarfARanges aranges' unitU return (infoSct $$ abbrevSct $$ lineSct $$ frameSct $$ aranges, us'') +-- | Build an address range entry for one proc. +-- With split sections, each proc needs its own entry, since they may get +-- scattered in the final binary. Without split sections, we could make a +-- single arange based on the first/last proc. +mkDwarfARange :: DebugBlock -> DwarfARange +mkDwarfARange proc = DwarfARange start end + where + start = dblCLabel proc + end = mkAsmTempEndLabel start + -- | Header for a compilation unit, establishing global format -- parameters compileUnitHeader :: Unique -> SDoc |