diff options
author | Peter Wortmann <scpmw@leeds.ac.uk> | 2014-12-08 16:54:16 +0100 |
---|---|---|
committer | Austin Seipp <austin@well-typed.com> | 2014-12-16 18:34:08 -0600 |
commit | 64678e9e8ff0107cac956f0c7b799a1dd317b963 (patch) | |
tree | cce702b5aa2af2461f1e161a1696395b58c4283b /compiler/nativeGen/X86/Instr.hs | |
parent | ea788f0fc53000afd264f0452f23b597887df9f9 (diff) | |
download | haskell-64678e9e8ff0107cac956f0c7b799a1dd317b963.tar.gz |
Generate .loc/.file directives from source ticks
This generates DWARF, albeit indirectly using the assembler. This is
the easiest (and, apparently, quite standard) method of generating the
.debug_line DWARF section.
Notes:
* Note we have to make sure that .file directives appear correctly
before the respective .loc. Right now we ppr them manually, which makes
them absent from dumps. Fixing this would require .file to become a
native instruction.
* We have to pass a lot of things around the native code generator. I
know Ian did quite a bit of refactoring already, but having one common
monad could *really* simplify things here...
* To support SplitObjcs, we need to emit/reset all DWARF data at every
split. We use the occassion to move split marker generation to
cmmNativeGenStream as well, so debug data extraction doesn't have to
choke on it.
(From Phabricator D396)
Diffstat (limited to 'compiler/nativeGen/X86/Instr.hs')
-rw-r--r-- | compiler/nativeGen/X86/Instr.hs | 6 |
1 files changed, 6 insertions, 0 deletions
diff --git a/compiler/nativeGen/X86/Instr.hs b/compiler/nativeGen/X86/Instr.hs index 0d85376868..8677badb02 100644 --- a/compiler/nativeGen/X86/Instr.hs +++ b/compiler/nativeGen/X86/Instr.hs @@ -165,6 +165,9 @@ data Instr -- comment pseudo-op = COMMENT FastString + -- location pseudo-op (file, line, col, name) + | LOCATION Int Int Int String + -- some static data spat out during code -- generation. Will be extracted before -- pretty-printing. @@ -444,6 +447,7 @@ x86_regUsageOfInstr platform instr FETCHPC reg -> mkRU [] [reg] COMMENT _ -> noUsage + LOCATION{} -> noUsage DELTA _ -> noUsage POPCNT _ src dst -> mkRU (use_R src []) [dst] @@ -616,6 +620,7 @@ x86_patchRegsOfInstr instr env NOP -> instr COMMENT _ -> instr + LOCATION {} -> instr DELTA _ -> instr JXX _ _ -> instr @@ -776,6 +781,7 @@ x86_isMetaInstr x86_isMetaInstr instr = case instr of COMMENT{} -> True + LOCATION{} -> True LDATA{} -> True NEWBLOCK{} -> True DELTA{} -> True |