ghc-8.2.1: The GHC API

Safe HaskellNone




Dwarf information

data DwarfInfo Source #

Individual dwarf records. Each one will be encoded as an entry in the .debug_info section.

pprDwarfInfo :: Bool -> DwarfInfo -> SDoc Source #

Generate assembly for DWARF data

pprAbbrevDecls :: Bool -> SDoc Source #

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 Source #

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.

pprDwarfARanges :: [DwarfARange] -> Unique -> SDoc Source #

Print assembler directives corresponding to a DWARF .debug_aranges address table entry.

Dwarf frame

data DwarfFrame Source #

Information about unwind instructions for a procedure. This corresponds to a "Common Information Entry" (CIE) in DWARF.

data DwarfFrameProc Source #

Unwind instructions for an individual procedure. Corresponds to a "Frame Description Entry" (FDE) in DWARF.




data DwarfFrameBlock Source #

Unwind instructions for a block. Will become part of the containing FDE.




pprDwarfFrame :: DwarfFrame -> SDoc Source #

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.


pprByte :: Word8 -> SDoc Source #

Assembly for a single byte of constant DWARF data

pprHalf :: Word16 -> SDoc Source #

Assembly for a two-byte constant integer

pprData4' :: SDoc -> SDoc Source #

Assembly for 4 bytes of dynamic DWARF data

pprDwWord :: SDoc -> SDoc Source #

Assembly for a DWARF word of dynamic data. This means 32 bit, as we are generating 32 bit DWARF.

pprWord :: SDoc -> SDoc Source #

Assembly for a machine word of dynamic data. Depends on the architecture we are currently generating code for.

pprLEBWord :: Word -> SDoc Source #

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.

pprLEBInt :: Int -> SDoc Source #

Same as pprLEBWord, but for a signed number

wordAlign :: SDoc Source #

Align assembly at (machine) word boundary

sectionOffset :: SDoc -> SDoc -> SDoc Source #

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.