Porting packages to MIPS (Deutsch) - ParabolaWiki

# Porting packages to MIPS (Deutsch)

Diese Seite listet einige Probleme und mögliche Lösungen bei der Portierung von Parabola-Paketen nach MIPS.

## Bevor dem Versuch das Paket zu reparieren

- Überprüfe ob das Problem mit der neuesten Version des Paketes auftritt.
- Im Fall von Kompilierfehlern, überprüfe auf x86_64. Der Fehler wird üblicherweise auftreten und schneller zu beheben sein.
- Überprüfe ob andere Distributionen mit Unterstützung für MIPS n32 einen Patch dafür haben.
- Überprüfe ob es optionale Reparaturen, Patches oder Fehlerberichte für MIPS o32, SPARC oder andere Architekturen gibt.
- Wenn der Fehler während der Laufzeit beobachtet wird, überprüfe ob das Paket automatisierte Tests hat, die ähnlich fehlschlagen.

## Linken mit statischen Bibliotheken

Der folgende Fehler tritt beim Kompilieren eines Paketes auf:

    /usr/bin/ld: /usr/lib/gcc/mips64el-unknown-linux-gnu/4.5.2/../../../libc-client.a(osdep.o): \
    relocation R_MIPS_HI16 against `__gnu_local_gp' can not be used when making a shared object; recompile with -fPIC

Der Fehler ist im Paket welches die genannte Bibliothek enthält, in diesem Fall imap (Der Paketname kann mit `pacman -Qo /usr/lib/gcc/mips64el-unknown-linux-gnu/4.5.2/../../../libc-client.a` gefunden werden).

Note: Wie auch x86_64, benötigt mips64el, dass gemeinsam genutzte Bibliotheken mit -fPIC kompiliert werden, aber in diesem Fall wurde versucht eine gemeinsam genutzte Bibliothek mit einer statischen zu linken und es ist fehlgeschlagen. Wenn das Paket x86_64 unterstützt, fügt der PKGBUILD wahrscheinlich schon diese Option für die Kompilation unter x86_64 hinzu, es auch für mips64el zu aktivieren würde das Problem lösen.

Die richtige Lösung wäre es gemeinsam genutzte an Stelle von statischen Bibliotheken zu erstellen.

## Busfehler während der Laufzeit des Paketes

Der Zugriff auf unausgerichtete Daten verursacht solche Fehler. Wenn ein Paket unter o32 und typischen 64bit-Architekturen, die Ausrichtung verlangen, funktioniert, so ist der Fehler wahrscheinlich die Ausrichtung von Doubles auf 4 an Stelle von 8 Byte.

Benutze gdb um den Code zu finden, der das Problem verursacht, d.h. einen unausgerichteten Zeiger erstellt und es Code als eine Struktur, die ein Double enthält, übergibt. Das Problem würde behoben indem man Füllung hinzufügt um die Struktur auf 8 Byte auszurichten.

Beispiel-Fehlerbericht: [1].

## Unerlaubte Anweisung während der Laufzeit eines Paketes

Benutze gdb um den Code zu disassemblieren. Anweisungen wie `madd.s` verursachen diesen Fehler, wenn sie mit NaN als Argument benutzt werden.

Ein eine Fehlerumgehung ist es die Pakete mit `-march=mips3` in CFLAGS an Stelle von `-march=loongson2f` zu kompilieren, so dass diese Anweisungen nicht benutzt werden.

Beispiel: [2].

## Linker: kein freier Hauptspeicher (Out of memory)

Dies tritt häufiger auf, wenn Debug-Symole aktiviert sind (`-ggdb` in CFLAGS). Der Linker schreibt, dass er keinen Speicher reservieren konnte oder schlägt einfach mit einer Segmentationsverletzung fehl.

Das Hinzufügen von `-Wl,--reduce-memory-overhead -Wl,--no-keep-memory` zu LDFLAGS lässt ihn weniger Hauptspeicher nutzen und behebt das Problem in mindests einem Fall. Es verlangsamt das Linken allerdings und sollte so nicht aktiviert werden, wenn es nicht nötig ist.

Beispiel: [3].

## `soelim` oder eine andere Anweisung nicht von `configure` gefunden

Dies ist kein MIPS-spezifisches Problem, sondern wird dadurch verursacht, dass Arch-Pakete nicht in einer sauberen "chroot" gebaut werden und dadurch Pakete installiert sind, die nicht in `depends` oder `makedepends` spezifiziert sind.

Füge die Pakete, die die fehlenden Anweisungen bereitstellen zu `makedepends` hinzu.

Manchmal fehlt ein Paket obwohl es zur `base` oder `base-devel` Groppe gehört. In diesem Fall sollte es einfach in der "chroot" installiert werden. Wenn es von `libremakepkg -c` entfernt wird, dann sollte es (oder seine Abhängigkeit) zu `/etc/libretools.d/cleansystem` hinzugefügt werden (und ein Fehlerbericht erstellt werden).

## `config.guess` erkennt die Architektur nicht

Übergebe das `--build=$CHOST` oder `--host=$CHOST` Argument zu `./configure`, abhängig von der Fehlermeldung. In seltenen Fällen sollte `--target=$CHOST` benutzt werden, aber das ist wahrscheinlich ein Fehler im Paket, da die meisten Programme kein Zielsystem haben. (Es ist nur für Kompilierer nützlich.)

Category:

- MIPS