https://gcc.gnu.org/bugzilla/show_bug.cgi?id=94391
--- Comment #17 from Yuxuan Shui <yshuiv7 at gmail dot com> --- (In reply to H.J. Lu from comment #16) > (In reply to Yuxuan Shui from comment #15) > > Your code is going to dereference the value stored in the ABS symbol as an > > address (e.g. if the symbol has value 10, your code will access (*(char > > *)10), barring the unwanted relocation), which is not the intention here. > > This works in all cases: > > unsigned long > size2 (void) > { > return ((unsigned long) &_binary_a_c_end > - (unsigned long) &_binary_a_c_start); > } Sorry, I am here to report a bug, not to find a workaround for my use case.