Non è la tua versione del kernel il problema.
Il caricatore sul tuo sistema non supporta il nuovo Linux
ABI. Fino a tempi relativamente recenti, i binari ELF di Linux utilizzavano il System V
ABI. Recentemente, a supporto di STT_GNU_IFUNC, il Linux
ABI è stato aggiunto. Dovresti aggiornare il tuo sistema libreria C per avere un caricatore che supporti STT_GNU_IFUNC, e quindi riconoscerà anche gli oggetti ELF con Linux
Tipo ABI.
Guarda il post sul blog di Dave Miller su STT_GNU_IFUNC per Sparc (archiviato) per capire cosa fa STT_GNU_IFUNC, se ti interessa.
Se metti le mani nel caricatore da un sistema più recente, potresti essere in grado di farlo funzionare usando quello. Ma dovrai portare il caricatore ovunque vada il tuo programma. Puoi compilare il tuo programma per usare quel caricatore come spiegato qui, o compilare il tuo programma e correggerlo successivamente usando patchelf, in un modo simile a quello che menziono qui. Sono stato in grado di eseguire un programma che mi dava il OS ABI invalid
errore su un Linux 2.6.18 (più vecchio del tuo) che aveva ld-2.5.so, copiando un ld-2.15.so da qualche altra parte.
NOTA:NON sovrascrivi il tuo sistema ld*.so o ld-linux.;-/
È possibile che la tua glibc sia stata creata con il --enable-multiarch
flag che ha forzato l'utilizzo di ifunc e new LINUX ABI