- as_fatal (_("operand must be absolute in range %d..%d, not %d"),
- min, max, (int) e->X_add_number);
+ /* Special case: sign extend negative 32-bit values to offsetT size. */
+ if ((e->X_add_number >> 31) == 1)
+ e->X_add_number |= -((addressT) (1U << 31));
+
+ if (e->X_add_number < min || e->X_add_number > max)
+ {
+ as_fatal (_("operand must be absolute in range %lx..%lx, not %lx"),
+ (long) min, (long) max, (long) e->X_add_number);
+ }