- /// The section the symbol is defined in. This is null for undefined symbols,
- /// and the special AbsolutePseudoSection value for absolute symbols. If this
- /// is a variable symbol, this caches the variable value's section.
- mutable MCSection *Section;
+ /// If a symbol has a Fragment, the section is implied, so we only need
+ /// one pointer.
+ /// FIXME: We might be able to simplify this by having the asm streamer create
+ /// dummy fragments.
+ union {
+ /// The section the symbol is defined in. This is null for undefined
+ /// symbols, and the special AbsolutePseudoSection value for absolute
+ /// symbols. If this is a variable symbol, this caches the variable value's
+ /// section.
+ mutable MCSection *Section;
+
+ /// The fragment this symbol's value is relative to, if any.
+ mutable MCFragment *Fragment;
+ };