See http://sources.redhat.com/ml/binutils/2004-07/msg00230.html gas/expr.c around line 1278 says /* If we have an absolute symbol or a reg, then we know its value now. */ This is *not* true. A symbol equated to an expression may have an absolute value, but not be resolvable immediately, such as when the expression involves the subtraction of two symbols in the same segment but in different frags. A simplified testcase is: .text _start: .set x,0 .long x .set x,.-_start .long x .balign 4 .set x,.-_start .long x
This should be fixed with http://sourceware.org/ml/binutils/2005-10/msg00112.html.