I agree it's pointless to argue it now, though I do question why there's a need to switch modes when x86_64 is a superset of x86. Shouldn't x86_64 functions just map to 32bit address when linked to 32bit applications? As long as the application knows to expect bigger addresses from pointer functions defined by x86_64 code then there'd be no issue. For example in the headers it could be as simple as
#ifdef __x86_64__
void* foo(...);
void* bar(...) { return foo(0,...); }
#else
uint64_t foo(...);
void* bar(...) { return (void*)(uintptr_t)foo(MAP_32BIT,...); }
#endif
The compiler will quickly catch any invalid usages and the define or inline wrapper could be right next to the function so that when it does the dev can see why their usage was invalid.