| Safe Haskell | None |
|---|---|
| Language | GHC2021 |
GHC.CmmToAsm.Dwarf.Types
Synopsis
- data DwarfInfo
- = DwarfCompileUnit {
- dwChildren :: [DwarfInfo]
- dwName :: String
- dwProducer :: String
- dwCompDir :: String
- dwLowLabel :: CLabel
- dwHighLabel :: CLabel
- | DwarfSubprogram { }
- | DwarfBlock { }
- | DwarfSrcNote { }
- = DwarfCompileUnit {
- pprDwarfInfo :: IsDoc doc => Platform -> Bool -> DwarfInfo -> doc
- pprAbbrevDecls :: IsDoc doc => Platform -> Bool -> doc
- data DwarfARange = DwarfARange {}
- pprDwarfARanges :: IsDoc doc => Platform -> [DwarfARange] -> Unique -> doc
- data DwarfFrame = DwarfFrame {}
- data DwarfFrameProc = DwarfFrameProc {}
- data DwarfFrameBlock = DwarfFrameBlock {}
- pprDwarfFrame :: IsDoc doc => Platform -> DwarfFrame -> doc
- pprByte :: IsDoc doc => Word8 -> doc
- pprHalf :: IsDoc doc => Word16 -> doc
- pprData4' :: IsDoc doc => Line doc -> doc
- pprDwWord :: IsDoc doc => Line doc -> doc
- pprWord :: IsDoc doc => Platform -> Line doc -> doc
- pprLEBWord :: IsDoc doc => Word -> doc
- pprLEBInt :: IsDoc doc => Int -> doc
- wordAlign :: IsDoc doc => Platform -> doc
- sectionOffset :: IsDoc doc => Platform -> Line doc -> Line doc -> doc
Dwarf information
Individual dwarf records. Each one will be encoded as an entry in
the .debug_info section.
Constructors
| DwarfCompileUnit | |
Fields
| |
| DwarfSubprogram | |
| DwarfBlock | |
| DwarfSrcNote | |
Fields | |
pprAbbrevDecls :: IsDoc doc => Platform -> Bool -> doc #
Abbreviation declaration. This explains the binary encoding we
use for representing DwarfInfo. Be aware that this must be updated
along with pprDwarfInfo.
Dwarf address range table
data DwarfARange #
A DWARF address range. This is used by the debugger to quickly locate which compilation unit a given address belongs to. This type assumes a non-segmented address-space.
Constructors
| DwarfARange | |
Fields | |
pprDwarfARanges :: IsDoc doc => Platform -> [DwarfARange] -> Unique -> doc #
Print assembler directives corresponding to a DWARF .debug_aranges
address table entry.
Dwarf frame
data DwarfFrame #
Information about unwind instructions for a procedure. This corresponds to a "Common Information Entry" (CIE) in DWARF.
Constructors
| DwarfFrame | |
Fields
| |
data DwarfFrameProc #
Unwind instructions for an individual procedure. Corresponds to a "Frame Description Entry" (FDE) in DWARF.
Constructors
| DwarfFrameProc | |
Fields
| |
data DwarfFrameBlock #
Unwind instructions for a block. Will become part of the containing FDE.
Constructors
| DwarfFrameBlock | |
Fields
| |
Instances
| OutputableP Platform DwarfFrameBlock # | |
Defined in GHC.CmmToAsm.Dwarf.Types Methods pdoc :: Platform -> DwarfFrameBlock -> SDoc # | |
pprDwarfFrame :: IsDoc doc => Platform -> DwarfFrame -> doc #
Header for the .debug_frame section. Here we emit the "Common
Information Entry" record that establishes general call frame
parameters and the default stack layout.
Utilities
pprDwWord :: IsDoc doc => Line doc -> doc #
Assembly for a DWARF word of dynamic data. This means 32 bit, as we are generating 32 bit DWARF.
pprWord :: IsDoc doc => Platform -> Line doc -> doc #
Assembly for a machine word of dynamic data. Depends on the architecture we are currently generating code for.
pprLEBWord :: IsDoc doc => Word -> doc #
Prints a number in "little endian base 128" format. The idea is to optimize for small numbers by stopping once all further bytes would be 0. The highest bit in every byte signals whether there are further bytes to read.
sectionOffset :: IsDoc doc => Platform -> Line doc -> Line doc -> doc #
Generate an offset into another section. This is tricky because this is handled differently depending on platform: Mac Os expects us to calculate the offset using assembler arithmetic. Linux expects us to just reference the target directly, and will figure out on their own that we actually need an offset. Finally, Windows has a special directive to refer to relative offsets. Fun.