https://gcc.gnu.org/bugzilla/show_bug.cgi?id=80881
--- Comment #50 from Eric Botcazou <ebotcazou at gcc dot gnu.org> --- > Please note that RIP-relative addresses are one byte shorter than absolute > addresses and are interchangeable on x86_64 Linux. If this is also true on > Windows (UNSPEC_PCREL was introduced for PE linkers) then the above should > also be emitted without flag_pic. The crucial bits are these in config/i386/cygming.h: /* Don't allow flag_pic to propagate since gas may produce invalid code otherwise. */ #undef SUBTARGET_OVERRIDE_OPTIONS #define SUBTARGET_OVERRIDE_OPTIONS \ do { \ flag_pic = TARGET_64BIT ? 1 : 0; \ } while (0) so 64-bit code is always PIC whereas 32-bit code is never PIC.