Commit 904255eb authored by Ben Gamari's avatar Ben Gamari Committed by Ben Gamari
Browse files

DWARF: Use .short to render half-machine-words

The binutils documentation states that .short is a synonym for .word,
which I assumed to mean "machine word", leading me to believe that we
needed to use .hword to render half-machine-words. However, Darwin's
toolchain doesn't understand .hword, so there we instead used .short.

However, as it turns out the binutils documentation confusingly uses
"word" to refer to a 16-bit word, so .short should work fine. Moreover,
LLVM's internal assembler also doesn't understand .hword, so using
.short consistently simplies things remarkably.

Test Plan: Validate using binutils and LLVM internal assembler,
validate on Darwin

Reviewers: niteria, austin

Reviewed By: niteria

Subscribers: rwbarton, thomie

GHC Trac Issues: #13866

Differential Revision: https://phabricator.haskell.org/D3667
parent a48464a7
......@@ -517,14 +517,7 @@ pprByte x = text "\t.byte " <> ppr (fromIntegral x :: Word)
-- | Assembly for a two-byte constant integer
pprHalf :: Word16 -> SDoc
pprHalf x = sdocWithPlatform $ \plat ->
-- Naturally Darwin doesn't support `.hword` and binutils uses `.short`
-- as a synonym for `.word` (but only some of the time!). The madness
-- is nearly too much to bear.
let dir = case platformOS plat of
OSDarwin -> text ".short"
_ -> text ".hword"
in text "\t" <> dir <+> ppr (fromIntegral x :: Word)
pprHalf x = text "\t.short" <+> ppr (fromIntegral x :: Word)
-- | Assembly for a constant DWARF flag
pprFlag :: Bool -> SDoc
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment