Re: ELF ABI

From: Rocco Rutte <pdmef(at)gmx.net>
Date: Thu, 16 Mar 2006 17:34:03 +0100

* Oliver Fromme <olli(at)lurza.secnetix.de>:
>Rocco Rutte <pdmef(at)gmx.net> wrote:

> > Wegen der Linux-Binary-Kompatibilität will ich auf FreeBSD auch Linux
> > Binaries/Libraries testen können, wo der Wert manchmal 0 und manchmal
> > korrekt ist. Auf Solaris zum Beispiel habe ich nur 0 gesehen (also
> > 'unused').

>Nö, 0 steht für SVR4. Ist also durchaus nicht ungewöhnlich,
>daß das unter Solaris auf 0 steht.

Bei Solaris ok. Aber halt auch bei vielen in /compat/linux/
installierten Libs. <sys/elf_common.h> definiert 0 als _NONE; für
Solaris gibt es einen Extraeintrag. Aber das ist nicht so wichtig.

FreeBSD mit der Linux-Emulation kommt mir spontan auch als einziges in
den Sinn, wo ich damit Files verschiedenen ABIs sauber getrennt
behandeln können möchte.

> > Deshalb meine Frage: gibt es einen anderen Weg als über
> > e_ident[EI_OSABI], um die ABI herauszubekommen?

>Ja, es gibt für genau diesen Zweck eine Standard-ELF-section
>namens ".note-ABI-tag". Kannst Du Dir z.B. mit objdump(1)
>anzeigen lassen:

[...]

Danke, dann gucke ich nochmal, wie ich das aus dem ELF-File direkt
ablesen kann. Wie portabel ist das eigentlich? Wird das nicht auch von
strip(1) entfernt, wenn man nicht aufpasst bzw. man es explizit
entfernen kann? Hmm, muss ich wohl doch mal den ELF-Standard lesen und
mehr Manpages/Sources lesen... :)

>FreeBSD verwendet ihn allerdings nicht (im Gegensatz z.B.
>zu DragonFly), jedenfalls nicht mit Prirität über die ELF-
>ABI-Nummer. FreeBSD 4 ignoriert den ABI-tag völlig, bei
>späteren Versionen weiß ich es nicht genau. FreeBSD 6
>scheint auch in die ".interp"-Section zu gucken, um die
>ABI-Entscheidung zu treffen, aber das ist nur eine Ver-
>mutung.

Hmm. Mein Tool ist auch nur ein übler Hack an den Systemtools und ld
vorbei (wegen Geschwindigkeit); ich werde mal die erkannten Libs mit
ldd(1) und einem Script überprüfen.

> > Wenn nicht, gibt es genau deshalb brandelf(1)?

>Eigentlich ist brandelf(1) nur ein übler Hack, der idealer-
>weise nicht existieren sollte.

Sowas habe ich mir gedacht, weil in /compat/linux die meisten Binaries
"korrekt" sind aber die Libs nicht und manchen Port-Makefiles
brandelf(1) benutzt wird, weshalb ich davon ausgegangen bin, dass die
Library-Entscheidungen vom "korrekten" Binary abgeleitet werden.

Danke für die Erläuterungen!

   bye, Rocco

-- 
:wq!
To Unsubscribe: send mail to majordomo(at)de.FreeBSD.org
with "unsubscribe de-bsd-questions" in the body of the message
Received on Thu 16 Mar 2006 - 17:35:45 CET

search this site