.globl bar .globl foo .section .bar bar: .4byte foo-. .4byte baz-. call foo call baz foo: .section .data baz: .4byte foo-. #.4byte .-foo # illegal .4byte baz-. .4byte .-baz .4byte foo+4-. # with constant .4byte .-baz+foo+4-. # both local and cross-segment (legal) #.4byte baz+foo+4-.-. # ditto, slightly different - GAS gets confused on this #.4byte (bar-.)+(foo-.) # illegal (too many cross-segment) .4byte baz-.+baz-. # two from same segment .section .text movl $5, foo-. movl $(foo-.), %eax call foo