Hello Maxim,
I hit the situation well described in https://gcc.gnu.org/ml/gcc-help/2015-02/msg00029.html , and wonder if there's any updates to your answer since February?
I'm playing with Ubuntu 15.04, on Dragonboard (15.09 Linaro release). Grepping thru output of apt-cache search, I found gcc-4.9-multilib-arm-linux-gnueabi, installed it, which pulled armel and armhf toochains, but didn't change linking behavior of "gcc -mabi=ilp32". Trying to use a arm-linux-gnueabi-gcc-4.9 crosscompiler, it builds executable, but it errors out with "./a.out: No such file or directory" (missing dynamic linker?).
Btw, I had a suspicion that current gcc on that Ubuntu version (gcc (Ubuntu/Linaro 4.9.2-10ubuntu13) 4.9.2), when used with -mapi=ilp32, defines uint64_t to be 4 bytes, and indeed it's true:
#include <stdint.h>
int main() { printf("sizeof(uint64_t)=%d\n", sizeof(uint64_t)); }
gcc -mabi=ilp32 -S uint64.c
... add w0, w0, :lo12:.LC0 mov w1, 4 bl printf ...
Thanks, Paul
P.S. Any chance we could hope for -m32 switch, familiar from x86_64?