next up previous
Nächste Seite: Suchverhalten des Linkers Aufwärts: Der Linker (m2l) Vorherige Seite: Aufruf und Bedienung

Optionen

Die einzelnen Optionen lassen sich mit ,,-`` löschen und mit ,,+`` setzen (siehe 2.2, Seite [*]). Gross- und Kleinschreibung spielen hier keine Rolle.

a
(AskModule) Durch die Option ,,+a`` gibt der Linker dem Benutzer die Möglichkeit, vor dem Einlesen jeder Datei alternative Dateinamen anzugeben. Hierbei zeigt er in eckigen Klammern den vorgegebenen Dateinamen an. Wenn Sie einfach drücken, wird die angezeigte Datei eingelesen, andernfalls die von Ihnen eingegebene. Dieser Vorgang wird solange wiederholt, bis die Datei erfolgreich eingelesen werden konnte. Geben Sie einfach nur ein Minuszeichen ein, wird für diesen Linkvorgang die Option ausgeschaltet und die restlichen, noch zu lesenden Dateien, ohne weitere Nachfrage geladen.

Diese Option ist sehr nützlich im Zusammenhang mit der bedingten Compilation. Falls beispielsweise ein Quelltext mit Hilfe der Compiler-Option ,,+oDemo`` als Demoversion kompiliert und dabei die t-Option des Compilers benutzt wurde, beispielsweise also mit

m2c -oDemo -tNameDemo
kann man den Linker zwingen, diese Demoversion statt der normalen zu laden.

i
Für das fertige Programm wird eine Workbench-Ikone erzeugt. Die Option ,,-i`` unterdrückt dies. Wurde der Linker von der Workbench gestartet, ist die Ikonen-Erzeugung standardmässig eingeschaltet, beim Start vom CLI ist sie ausgeschaltet.
c
steht für ``CODE``. ,,+c`` bewirkt, dass die einzelnen CODE-Hunks soweit wie möglich in maximal 32kByte grossen Hunks zusammengelegt werden, was zu einem erheblich kürzeren Programm führen kann. Standardeinstellung für diese Option ist ,,+``.

d
steht für ``DATA``. Nach ,,+d`` legt der Linker alle DATA- und BSS-Hunks gleichen Typs (CHIP, FAST,,,normal``) zusammen. Standardeinstellung für diese Option ist ,,+``. Hierdurch wird das fertige Programm etwas kleiner. In einem residenten Programm dürfen keine DATA- oder BSS-Hunks vorhanden sein, einzig MERGDATA- und MERGBSS-Hunks sind erlaubt (-Modell); diese werden immer unabhängig von der Option d zusammengelegt.

Falls jedoch sehr grosse Hunks erzeugt werden, kann ein Programm eventuell bei stark fragmentiertem Speicher nicht geladen werden, da kein genügend grosser zusammenhängender Speicherbereich zur Verfügung steht. In diesem Fall sollte man vorsichtshalber die Option mit ,,-d`` ausschalten.

p
Bei Aktivierung dieser Option wird eine Map-Datei generiert, aus der der Aufbau des Programms hervorgeht. Ohne Angabe wird keine Map-Datei generiert.

Meldet das Programm ,,enforcer`` Fehler im getesteten Programms, wird deren Position mit Hunk und Offset angegeben. Mit dieser Information kann man jedoch wenig anfangen, wenn man den genauen Aufbau seines Programms nicht kennt.

Mit Hilfe der Map-Datei und des Dekoders kann man nun die Fehlerposition relativ genau lokalisieren, indem man den entsprechenden Hunk und Offset aufsucht und dann mit m2decobj die exakte Position sucht. Zur weiteren Vereinfachung der Fehlersuche kann man auch mit der Option ,,+x`` linken, dann werden die Moduln komplett gelinkt und keine Prozeduren wegoptimiert. Dadurch erspart man sich etwas Rechnerei.

In der Map-Datei befindet sich zunächst eine Beschreibung der Hunks mit Grösse und Typ. Direkt daran schliesst sich die Symboltabelle des Linkers an. Diese ist jedoch nach unbrauchbaren Kriterien sortiert. Der Dos-Befehl sort schafft jedoch leicht Abhilfe. Die Zeilen sind so aufgebaut, dass die Struktur der Datei beim Sortieren erhalten bleibt (erst Hunks, dann die Symbole) und danach die Symbole in aufsteigender Hunk-, Offset-Reihenfolge stehen. Wegen des seltenen Gebrauchs wurde davon abgesehen, eine eigene Sortierroutine in den Linker zu integrieren, um ihn nicht unnötig zu vergrössern.


\begin{example}
Ein Beispiel f\uml {u}r eine sortierte Datei:
\begin{alltt}
\rel...
...AS
\\ Hunk:--- Wert: $0000002A (abs) __BSSLEN
\\ \relax \end{alltt}\end{example}

lLibFile
Hier ist ,,+`` oder ,,-`` ohne Wirkung. Durch diese Option wird dem Linker mitgeteilt, in welchen Dateien undefinierte Symbole zu finden sind. Das Argument LibFile muss den kompletten Pfad enthalten. Der Buchstabe ,,l`` kann sich direkt an die anderen Optionen anschliessen; falls jedoch mehrere Dateien geladen werden sollen, muss jeweils eine eigene Option hierfür angegeben werden, da alle Zeichen nach dem ,,l`` als Teil des Dateinamens eingelesen werden. Die Angabe einer oder mehreren zusätzlichen Dateien mit Symboldefinitionen gilt immer nur für die nächste zu erstellende Programmdatei. Danach oder auch bei Misserfolg werden diese Angaben vergessen.
\begin{example}
Ein Beispiel, in dem die zwei Dateien {\tt Menu.o} und
{\tt de...
...in{quote}\tt m2l +m-rlMenu.o -ldemos:Requester.o MyDemo
\end{quote}\end{example}

tTargetFile
bietet die Möglichkeit, der erzeugten Datei einen anderen Namen zu geben. Diese Option gilt (wie ,,l``) nur für den nächsten Linkvorgang. Direkt an den Buchstaben ,,t`` schliesst sich ein Dateiname einschliesslich des Pfads an. Standardeinstellung ist der Modulname.
\begin{example}
Der Compiler f\uml {u}r die 68020-CPU wird beispielsweise so erzeugt:
\begin{verbatim}m2l -2s20000 -tm2c68020 m2c\end{verbatim}\end{example}

sMinStack
Die Option ,,s`` erlaubt die Angabe einer Dezimalzahl, die nur für das Linken residenter Programme eine Bedeutung hat. Sie bestimmt die Grösse des Stacks, die das Programm mindestens benötigt. Falls der Stack zur Laufzeit kleiner als dieser angegebene Wert ist, wird der Speicher vom Laufzeitsystem Arts alloziert. Vorgabewert ist 4000 Byte. Die geänderte Einstellung gilt für alle weiteren Linkvorgänge.
\begin{example}
Ein Beispiel, in dem der Compiler mit einem Minimalstack von
20000 Byte gelinkt wird:
\begin{quote}\tt m2l -s20000 m2c
\end{quote}\end{example}

gDirectory
wechselt in das angegebene Verzeichnis. Siehe hierzu Abschnitt 2.2 auf Seite [*]. Die Option -gm2:Tools setzt ,,m2:Tools`` als aktuelles Verzeichnis, -g kehrt zurück ins Startverzeichnis.

012348
Auch hierbei sind ,,+`` oder ,,-`` wirkungslos. Durch die Ziffer -- nur eine, d.h. die zuletzt angegebene ist gültig -- wird dem Linker mitgeteilt, welche Art Objektdateien einzubinden sind, um den bestmöglichen Code für den Zielprozessor zu erzeugen. Gibt man etwa die Option ,,-8``, so verwendet der Linker möglichst ,,.ob8``-Files, damit das Programm mit einer 68881-FPU möglichst effizient läuft. Standardeinstellung ist ,,0``.

q
Durch ,,-q`` werden alle Meldungen des Linkers unterdrückt. Ausserdem wird im Fehlerfall nicht in den interaktiven Modus verzweigt, damit der Linker auch in Batch-Dateien aufgerufen werden kann.

r
steht für ``Resident`` Die Angabe ,,+r`` hat zur Folge, dass statt Arts.obj (oder Arts.ob1 usw.) das File RArts.obj geladen wird, was unter bestimmten, im Abschnitt 5.2 beschriebenen Bedingungen zu einem residentfähigen Programm führt. Wenn diese Bedingungen nicht erfüllt sind, wird das Programm zwar gelinkt, aber als nicht-residentfähig deklariert. Man sollte die Abschlussmeldungen des Linkers also immer genau lesen! Ohne spezielle Angaben wird die nicht residentfähige Version des Laufzeitsystems dazugebunden.

m
bestimmt zusammen mit der Option ,,r`` das zu ladende spezielle Arts. Hier steht ,,m`` für ,,Minimal``-Arts, das gegenüber dem normalen Arts kürzer, aber auch gefährlicher ist, da Laufzeitfehler nicht durch Requester abgefangen werden, sondern zu ,,Guru Meditationen`` führen.2.26 Standardeinstellung ist ,,-``.

x
ist vonnöten, um Debugger-fähige Programme zu linken. Mit der Option ,,+x`` -- der Vorgabe -- werden Informationen für den Debugger erzeugt und entsprechend der Option ,,r`` das Laufzeitsystem DArts.obj oder DRArts.obj eingebunden. Wird eines dieser beiden Laufzeitsysteme verlangt, ist die Option ,,+m`` ohne Wirkung! Das Debugger-fähige Laufzeitsystem braucht nämlich die gesamte Unterstützung. Ausserdem ist zu beachten, dass mit dieser Option alle Hunks -- also auch unbenutzte -- mit eingebunden werden. Die Optimierung ist auf Seite [*] beschrieben. Debugbare Programme sind also immer grösser als nicht debugfähige.

Die Optionen ,,r``, ,,m`` und ,,x`` bestimmen gemäss Tabelle 2.10 gemeinsam, welches Laufzeitsystem eingebunden wird:

Tabelle 2.10: Vom Linker zu verwendendes Laufzeitsystem
Option R Option M Option X zu ladendes Arts
- - - Arts
- - + DArts
- + - MArts
- + + DArts2.27
+ - - RArts
+ - + DRArts
+ + - MRArts
+ + + DRArts2.28


??
Die Eingabe zweier Fragezeichen zeigt die Version des Linkers und den aktuellen Zustand aller Optionen.

In der Tabelle 2.11 sind alle Optionen des Linkers in Kurzform dargestellt. Zu beachten ist zusätzlich die oben beschriebene Einschränkung bezüglich der Option ,,m`` in Zusammenhang mit der Option ,,x``.


Tabelle 2.11: Optionen des Linkers
Option Vorgabe Wirkung
?   Version und Syntax
??   Version, Syntax und Status
a - Abfrage der Dateinamen
c + SmallCode
d + SmallData
i WB:+, CLI:- Ikonen-Erzeugung
m - Minimal-Arts
p - Erzeugung einer Map-Datei
q + Ausgabe von Meldungen
r - reentrant
x + debugInfo
l   Lade Extradateien
s 4000 Minimale Stackgrösse
t Modulname Name der Zieldatei
g   Directory-Wechsel
012348 0 Typ der Objektdateien (.ob1 ...)



next up previous
Nächste Seite: Suchverhalten des Linkers Aufwärts: Der Linker (m2l) Vorherige Seite: Aufruf und Bedienung
Claudio Nieder 2000-11-12