Safe Haskell | None |
---|---|
Language | Haskell2010 |
Dwarf.Types
- data DwarfInfo
- = DwarfCompileUnit {
- dwChildren :: [DwarfInfo]
- dwName :: String
- dwProducer :: String
- dwCompDir :: String
- dwLineLabel :: LitString
- | DwarfSubprogram { }
- | DwarfBlock { }
- = DwarfCompileUnit {
- pprDwarfInfo :: Bool -> DwarfInfo -> SDoc
- pprAbbrevDecls :: Bool -> SDoc
- data DwarfFrame = DwarfFrame {}
- data DwarfFrameProc = DwarfFrameProc {}
- data DwarfFrameBlock = DwarfFrameBlock {}
- pprDwarfFrame :: DwarfFrame -> SDoc
- pprByte :: Word8 -> SDoc
- pprData4' :: SDoc -> SDoc
- pprDwWord :: SDoc -> SDoc
- pprWord :: SDoc -> SDoc
- pprLEBWord :: Word -> SDoc
- pprLEBInt :: Int -> SDoc
- wordAlign :: SDoc
- sectionOffset :: LitString -> LitString -> SDoc
Dwarf information
data DwarfInfo
Individual dwarf records. Each one will be encoded as an entry in the .debug_info section.
Constructors
DwarfCompileUnit | |
Fields
| |
DwarfSubprogram | |
DwarfBlock | |
pprDwarfInfo :: Bool -> DwarfInfo -> SDoc
Generate assembly for DWARF data
pprAbbrevDecls :: Bool -> SDoc
Abbreviation declaration. This explains the binary encoding we
use for representing DwarfInfo
.
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 |
pprDwarfFrame :: DwarfFrame -> SDoc
Header for the .debug_frame section. Here we emit the "Common Information Entry" record that etablishes general call frame parameters and the default stack layout.
Utilities
Assembly for a DWARF word of dynamic data. This means 32 bit, as we are generating 32 bit DWARF.
Assembly for a machine word of dynamic data. Depends on the architecture we are currently generating code for.
pprLEBWord :: Word -> SDoc
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 :: LitString -> LitString -> SDoc
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.