IF_ARCH_alpha(SLIT("\t.data\n\t.align 3")
,IF_ARCH_sparc(SLIT(".data\n\t.align 8") {-<8 will break double constants -}
,IF_ARCH_i386(IF_OS_darwin(SLIT(".const_data\n.align 2"),
- SLIT(".section .rodata\n\t.align 4"))
+ SLIT(".section .data\n\t.align 4"))
,IF_ARCH_x86_64(IF_OS_darwin(SLIT(".const_data\n.align 3"),
- SLIT(".section .rodata\n\t.align 8"))
+ SLIT(".section .data\n\t.align 8"))
,IF_ARCH_powerpc(IF_OS_darwin(SLIT(".const_data\n.align 2"),
SLIT(".data\n\t.align 2"))
,)))))
-- Fortunately we're assuming the small memory model, in which
-- all such offsets will fit into 32 bits, so we have to stick
-- to 32-bit offset fields and modify the RTS appropriately
- -- (see InfoTables.h).
+ --
+ -- See Note [x86-64-relative] in includes/InfoTables.h
--
ppr_item I64 x
| isRelativeReloc x =
| otherwise =
[ptext SLIT("\t.quad\t") <> pprImm imm]
where
- isRelativeReloc (CmmLabelOff _ _) = True
isRelativeReloc (CmmLabelDiffOff _ _ _) = True
isRelativeReloc _ = False
#endif