DE19924437A1 - Verfahren, Computerprogrammprodukte und Vorrichtung zur Initialisierung von globalen Registern - Google Patents
Verfahren, Computerprogrammprodukte und Vorrichtung zur Initialisierung von globalen RegisternInfo
- Publication number
- DE19924437A1 DE19924437A1 DE19924437A DE19924437A DE19924437A1 DE 19924437 A1 DE19924437 A1 DE 19924437A1 DE 19924437 A DE19924437 A DE 19924437A DE 19924437 A DE19924437 A DE 19924437A DE 19924437 A1 DE19924437 A1 DE 19924437A1
- Authority
- DE
- Germany
- Prior art keywords
- global
- file
- object file
- symbol
- information
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Withdrawn
Links
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
- G06F8/41—Compilation
- G06F8/44—Encoding
- G06F8/441—Register allocation; Assignment of physical memory space to logical memory space
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
- G06F8/54—Link editing before load time
Landscapes
- Engineering & Computer Science (AREA)
- General Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Software Systems (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Devices For Executing Special Programs (AREA)
- Stored Programmes (AREA)
Abstract
Ein System, ein Verfahren und ein Computerprogrammprodukt zum Kompilieren einer Quellendatei und zum Erzeugen einer Datenstruktur, die ein globales Symbol einem globalen Register, auf das in der Quellendatei Bezug genommen wird, zuordnet. Die Datenstruktur ermöglicht, daß ein Binderprogramm die globalen Register initialisiert. Der Kompilierer erzeugt auch eine Objektdatei aus der Quellendatei. Die Objektdatei enthält die Informationen für globale Register. Ein Binderprogramm verknüpft die Objektdatei potentiell mit mindestens einer weiteren Objektdatei oder gemeinsam genutzten Bibliothek, um dadurch eine ausführbare Datei oder gemeinsam genutzte Bibliothek zu erzeugen. Das Binderprogramm verwendet die Informationen für globale Symbole, die in der Objektdatei enthalten sind, um die globalen Register zu initialisieren und Verschiebungsoperationen durchzuführen.
Description
Diese Anmeldung bezieht sich auf die gemeinsam übertragene
US-Patentanmeldung mit den Seriennrn. . . . und
. . ., eingereicht am gleichen Datum hierzu, jeweils
erfunden von Stephen Chessin, Rod Evans und Michael Walker;
und Stephen Chessin. Auf jede dieser zusammengehörenden
Patentanmeldungen wird hiermit ausdrücklich verwiesen, sie
werden hierin integriert und zu einem Teil hiervon gemacht.
Das Gebiet dieser Erfindung betrifft Verfahren,
Computerprogrammprodukte und Systeme zur Initialisierung
von globalen Registern in Verbindung mit der Kompilierung
und Verknüpfung von Objektdateien, die zum Entwickeln einer
ausführbaren oder Bibliothekssoftwaredatei oder einer
Ausführungsabbildung zur Verwendung in einem
Computerprogrammiersystem oder -netzwerk verwendet werden.
Die Kennzeichnung von einem oder mehreren der
Computersystemregister als global hinsichtlich des
Gültigkeitsbereichs erhöht die Betriebsflexibilität auf dem
Gebiet der Computersysteme und -software. Lokale Register
besitzen im Gegensatz zu globalen Registern einen auf das
spezielle Modul oder Unterprogramm begrenzten
Gültigkeitsbereich. Im Gegensatz dazu sind globale Register
ausgewählte Register, die von einem Computerprogramm
allgemein und nicht nur von speziellen Modulen oder
Unterprogrammen des Computerprogramms verwendet werden.
Globale Variablen oder Symbole werden in Verbindung mit
solchen globalen Registern zur allgemeinen Verwendung
während der Ausführung des Computerprogramms verwendet.
Globale Variablen und Symbole, die in Computerprogrammen
verwendet werden, werden typischerweise am Beginn der
Programmausführung initialisiert, um Anfangswerte zur
Verwendung in Routinen und Algorithmen bereitzustellen, die
während der Operation implementiert werden. Obwohl solche
Variablen und Symbole üblicherweise im Computerspeicher
initialisiert werden, besteht jedoch ein Mangel an der
Bereitstellung einer Initialisierung für globale Register.
Wenn verschiedene Teile eines speziellen Programms ein
bestimmtes globales Register verwenden, das nicht korrekt
initialisiert wurde, kann es zu einer falschen Bezugnahme
und einem fehlerhaften Gültigkeitsbereich von Variablen
kommen. Ein solcher Mangel an Initialisierung eines
globalen Registers verursacht gewöhnlich falsche
Programmergebnisse, da sich in dem globalen Register zu der
Zeit, in der auf es zugegriffen wird, ein fehlerhafter
Variablenwert oder überhaupt kein Wert befindet.
Es ist erwünscht, die Initialisierung von globalen Werten,
die bei einer Softwareoperation vorkommen, zu ermöglichen.
Obwohl bekannte Mechanismen zur Initialisierung von
Variablen im Speicher auf gegebene Werte, bevor die
Programmausführung beginnt, existieren, gibt es keine
solchen bekannten Mechanismen zur Initialisierung eines
Registers, das eine globale Variable enthalten soll, die
auf einen ausgewählten Wert gesetzt werden muß, bevor die
Ausführung beginnt.
Gemäß der vorliegenden Erfindung werden individuell
kompilierte Softwareeinheiten zu einer kombinierten
ausführbaren Datei verknüpft und spezielle Variablen werden
in speziellen globalen Registern auf vorbestimmte
Anfangswerte gesetzt. Statische und dynamische
Binderprogramme führen jeweils Verknüpfungsoperationen aus,
um ausführbare Dateien und eine Ausführungsabbildung zu
erzeugen. Ferner werden globale Register auf gewünschte
Werte initialisiert, bevor die Programmausführung beginnt.
Gemäß einer Ausführungsform der vorliegenden Erfindung gibt
ein vorbestimmter Teil einer Symboltabelleneintragung an,
ob ein Initialisierer für ein spezielles globales Register
vorhanden ist oder nicht. Gemäß speziellen
Ausführungsformen der vorliegenden Erfindung gibt ein
Verschiebungstyp, R_SPARC_REGISTER, oder eine einheitliche
Datenstruktur einen Anfangswert für ein globales Register
an.
Ferner erzeugt gemäß der vorliegenden Erfindung ein
Kompilierer Symboltabelleneintragungen, um anzugeben, ob
eine enthaltende Objektdatei anwendungsreservierte globale
Register verwendet, und wenn ja, welche die Anfangswerte
der speziellen globalen Register sind. Das statische
Binderprogramm prüft die erzeugten Symboltabellen
eintragungen für alle Objektdateien, die zu einer
speziellen Zielobjektdatei kombiniert werden, um
sicherzustellen, daß die Symboltabellen Anfangswerte für
mindestens eine wesentliche Anzahl der globalen Register
enthalten, auf die durch die verschiedenen Quellenelemente
Bezug genommen wird, und daß diese Anfangswerte kompatibel
verwendet werden. Die erzeugte resultierende Objektdatei
umfaßt diese Symboltabelleneintragungen, um die Verwendung
der globalen Register von der resultierenden Objektdatei
anzuzeigen. Das statische Binderprogramm warnt, wenn
irgendeine Objektdatei, auf die während der Verknüpfung
Bezug genommen wurde, globale Register verwendet, die
inkompatibel initialisiert oder initialisierbar sind. Das
statische Binderprogramm erzeugt eine Warnung, wenn eine
gemeinsam genutzte Objektdatei erstellt wird, die ein
globales Register inkompatibel initialisiert.
Gemäß der vorliegenden Erfindung umfaßt ein System und ein
Verfahren zur Initialisierung einer ausführbaren
Softwaredatei einen Kompilierer zum Erzeugen einer
Symboltabelle, die speziellen globalen Registern bestimmte
Anfangswerte zuordnet. Die Symboltabelleninformationen
reichen aus, um zu ermöglichen, daß ein Binderprogramm eine
Initialisierung durchführt. Die Symboltabelleninformationen
sind in der vom Kompilierer erzeugten Objektdatei
enthalten. Der Kompilierer erzeugt insbesondere
Objektdateien derart, daß die Identifikation von
Verwendungskonflikten und die Durchführung von
Verschiebungsoperationen hinsichtlich eines Fehlers der
Initialisierung bis zur Operation des Binderprogramms
verzögert werden. Ein Binderprogramm verknüpft die
Objektdatei mit anderen Objektdateien und gemeinsam
genutzten Bibliotheken, um dadurch entweder eine
ausführbare Datei oder eine gemeinsam genutzte Bibliothek
zu erzeugen, die vorinitialisierte globale Werte verwendet.
Fig. 1 ist ein Kompilierungs-Datenflußdiagramm gemäß
einer bevorzugten Ausführungsform der
vorliegenden Erfindung, der die Erstellung von
Objektdateien durch einen Kompilierer zeigt,
welche zu einer ausführbaren Datei oder zu einer
Ausführungsabbildung jeweils durch ein statisches
Binderprogramm und ein Ablauf-Binderprogramm
verbunden werden, das sich durch einen
Initialisierungsprozessor für globale Register
auszeichnet, der Anfangswerte für globale
Register bereitstellt, bevor die
Ausführungsabbildung abläuft;
Fig. 2 ist ein Blockdiagramm eines Computersystems gemäß
einer bevorzugten Ausführungsform der
vorliegenden Erfindung;
Fig. 3A ist ein Ablaufplan eines Binderprogrammprozesses
zur Verwendung in Verbindung mit der vorliegenden
Erfindung;
Fig. 3B ist ein Ablaufplan eines Binderprogrammprozesses
gemäß einer Ausführungsform der vorliegenden
Erfindung, der die Initialisierung von globalen
Registern umfaßt;
Fig. 3C ist ein Ablaufplan der Initialisierung von
globalen Registern gemäß der vorliegenden
Erfindung;
Fig. 4A ist ein Blockdiagramm einer Objektdatei, die von
einem Kompilierer gemäß einer bevorzugten
Ausführungsform der vorliegenden Erfindung
erzeugt wird, wobei Objektdateien durch den
Kompilierer mit Initialisierungsinformationen für
die globalen Register erzeugt werden, welche vom
Ablauf-Binderprogramm verwendet werden;
Fig. 4B ist ein Blockdiagramm einer Datenstruktur gemäß
einer Ausführungsform der vorliegenden Erfindung,
einschließlich einer Verwendungsinformation und
einer Initialisierungsinformation, um die
Bereitstellung von Initialisierungsinformationen
für den Initialisierungsprozessor für globale
Register gemäß der vorliegenden Erfindung zu
ermöglichen;
Fig. 4C ist ein Blockdiagramm des Protokolls für die
Verwendungsinformation in einer Datenstruktur
gemäß der vorliegenden Erfindung;
Fig. 4D ist ein Blockdiagramm des Protokolls für die
Initialisierungsinformation in einer
Datenstruktur gemäß der vorliegenden Erfindung;
Fig. 5 ist ein Ablaufplan eines
Kompilierungs-/Verknüpfungsprozesses gemäß einer
bevorzugten Ausführungsform der vorliegenden
Erfindung;
Fig. 6 ist ein detaillierter Ablaufplan der
Verknüpfungsverarbeitung gemäß einer bevorzugten
Ausführungsform der vorliegenden Erfindung;
Fig. 7 ist ein Beispiel einer Symboltabelle, die von
einem Kompilierer gemäß einer bevorzugten
Ausführungsform der vorliegenden Erfindung
erzeugt wird, wobei die
Symboltabelleninformationen Angaben des
Symboltyps, des Symbolwerts, des Symbolnamens,
der Größe und des Bindungsstatus enthalten,
welcher festlegt, ob das Symbol eine lokale oder
eine globale Variable darstellt; und
Fig. 8 ist eine Verschiebungstabelle gemäß einer
Ausführungsform der vorliegenden Erfindung.
Fig. 1 ist ein Kompilierungs-Datenflußdiagramm gemäß einer
bevorzugten Ausführungsform der vorliegenden Erfindung, der
die Erstellung von Objektdateien durch einen Kompilierer
zeigt, welche eine Datenstruktur (DS) enthalten, um die
Feststellung von Konflikten zwischen Zuordnungen von
globalen Registern durch das statische und das Ablauf-
Binderprogramm zu ermöglichen und die globalen Register zu
initialisieren. Insbesondere stellt Fig. 1 einen
Kompilierer 104, ein statisches Binderprogramm 114 und ein
Ablauf-Binderprogramm 118 gemäß einer Implementierung der
vorliegenden Erfindung dar. Das Ablauf-Binderprogramm 118
umfaßt einen Prozessor 119 zur Initialisierung von globalen
Registern gemäß der vorliegenden Erfindung. Der Kompilierer
104 erzeugt aus einer Quellendatei 102 eine Objektdatei 106
mit einer Datenstruktur zur Feststellung von Konflikten von
globalen Registern gemäß der vorliegenden Erfindung. Die
Quellendatei 102 ist gemäß verschiedenen Ausführungsformen
der vorliegenden Erfindung in den gut bekannten
Computerprogrammiersprachen C, C++ oder Fortran
geschrieben. Es ist wichtig zu beachten, daß die
vorliegende Erfindung keine Einschränkungen dahingehend
auferlegt, wie Entwickler die zur Erzeugung der
Quellendatei 102 ausgewählte spezielle Sprache verwenden
können. Gemäß einer Ausführungsform der vorliegenden
Erfindung umfaßt das statische Binderprogramm 114 einen
Verschiebungscode-Abschnitt, der verwendet wird, um globale
Registersymbole zu initialisieren. Die Datenstruktur
besitzt einen Namen, .rela; einen Typ, SHT_RELA; und keine
Attribute. Folglich ist die folgende Tabelle gültig:
.rela sh_link enthält den Abschnittskopfindex der
zugehörigen Symboltabelle; und sh_info ist 0, was
anzeigt, daß dieser Abschnitt nur
Registerverschiebungen enthält.
Die Objektdatei 106 sowie Null oder mehrere andere
Objektdateien 108 und/oder Null oder mehrere gemeinsam
genutzte Bibliotheken 110 werden gemäß einer
Ausführungsform der vorliegenden Erfindung zu einem
statischen Binderprogramm 114 übertragen. Die anderen
Objektdateien 108 wurden vorher vom Kompilierer 104 der
vorliegenden Erfindung kompiliert, und die gemeinsam
genutzten Bibliotheken 110 wurden vorher vom statischen
Binderprogramm 114 erstellt. Das statische Binderprogramm
114 erzeugt eine ausführbare Datei 116 oder eine gemeinsam
genutzte Bibliothek. Gemäß einer Ausführungsform der
vorliegenden Erfindung erzeugt das statische Binderprogramm
114 eine weitere gemeinsam genutzte Bibliothek. Wie zu
erkennen ist, ist eine gemeinsam genutzte Bibliothek eine
Form einer Objektdatei. Folglich werden hierin die Begriffe
"Objektdatei" und "gemeinsam genutzte Bibliothek"
austauschbar verwendet. Wie für Fachleute zu erkennen ist,
umfaßt die ausführbare Datei 116 einen Code, Daten und
andere Informationen aus den Objektdateien 106, 108 und
enthält auch Verweise auf gemeinsam genutzte Bibliotheken
110 (d. h. ein Code, Daten usw. aus den gemeinsam genutzten
Bibliotheken 110 sind nicht tatsächlich in die ausführbare
Datei 204 eingebettet). Während der Ablaufzeit werden die
ausführbare Datei 116 und die gemeinsam genutzten
Bibliotheken 110 zu einem Ablauf-Binderprogramm 118
übertragen. Das Ablauf-Binderprogramm 118 löst die in der
ausführbaren Datei 116 enthaltenen Verweise auf die
gemeinsam genutzten Bibliotheken 110 auf, initialisiert die
globalen Register mit dem Prozessor 119 zur Initialisierung
von globalen Registern und erzeugt eine
Ausführungsabbildung 120. Die Ausführungsabbildung 120 wird
im Hauptspeicher 208 gespeichert und durch eine
Zentraleinheit 204 (Fig. 2) ausgeführt. Im allgemeinen kann
die Operation des statischen Binderprogramms 114 und des
Ablauf-Binderprogramms 118 in vier Phasen unterteilt
werden, wie nachstehend ausführlich erörtert.
Fig. 2 ist ein Blockdiagramm eines Computersystems 202
gemäß einer bevorzugten Ausführungsform der vorliegenden
Erfindung. Das Computersystem 202 umfaßt einen oder mehrere
Prozessoren, wie z. B. eine Zentraleinheit (CPU) 204, die
mit einem Übertragungsmedium, wie z. B. einem Bus 206,
verbunden sind. Das Computersystem 202 umfaßt ferner einen
Hauptspeicher (z. B. ohne Einschränkung ein Direkt
zugriffsspeicher (RAM)) 208, der ebenfalls mit dem Bus 206
verbunden ist. Das Computersystem 202 umfaßt des weiteren
einen Kompilierer 104 und ein erstes und ein zweites
Binderprogramm, einschließlich eines statischen
Binderprogramms 114 und eines Ablauf-Binderprogramms 118,
die gemäß einer Ausführungsform im Hauptspeicher 208
gespeichert sind. Insbesondere sind die Quellendatei 102;
die Objektdateien 106 und 108; die gemeinsam genutzten
Bibliotheken 110; und die Ausführungsabbildung 120
ebenfalls vorzugsweise im Hauptspeicher 208 gespeichert.
Das Computersystem 202 umfaßt ferner eine Vielzahl von
Registern 210, einschließlich eines oder mehrerer globaler
Register. Gemäß einer Ausführungsform der vorliegenden
Erfindung umfaßt ein Computerprogrammprodukt (wie z. B. eine
Platte 214) gemäß der vorliegenden Erfindung
maschinenlesbare Medien mit einer darauf aufgezeichneten
Computerprogrammlogik. Insbesondere wird die Computerlogik
in dem Computersystem 202 ausgeführt, um zu ermöglichen,
daß das Computersystem 202 die Funktionen der vorliegenden
Erfindung ausführt. Die Computerlogik wird beispielsweise
von einem Diskettenlaufwerk 212 gelesen. Die
Computerprogrammlogik, die den Kompilierer 104 und die
Binderprogramme, einschließlich des statischen
Binderprogramms 114 und des Ablauf-Binderprogramms 118,
darstellt, kann dann in den Hauptspeicher 208 (wie gezeigt)
geladen werden und von der CPU 204 ausgeführt werden. Eine
geeignete Form für das Computersystem 202 ist ein Sun
Microsystems Arbeitsplatzrechner, der von Sun Microsystems,
Inc., in Mountain View, Kalifornien, hergestellt wird. Ein
beliebiges anderes geeignetes Computersystem könnte
alternativ verwendet werden.
Fig. 3A ist ein Ablaufplan eines Binderprogrammprozesses,
der in Verbindung mit der vorliegenden Erfindung verwendet
werden kann. Mit Bezug auf einen Ablaufplan 302, der in
Fig. 3A gezeigt ist, führt das statische Binderprogramm 114
eine Lesephase 306, eine Aufbauphase 308, eine
Verschiebungsphase 310 und eine Schreibphase 312 aus. Diese
Binderprogrammphasen 306, 308, 310 und 312 werden in
Verbindung mit der vorliegenden Erfindung ausgeführt.
Fig. 3B ist ein Ablaufplan eines Binderprogrammprozesses
gemäß einer Ausführungsform der vorliegenden Erfindung, der
die Initialisierung von globalen Registern umfaßt. Mit
Bezug auf einen Ablaufplan 302, der in Fig. 3B gezeigt ist,
führt das Ablauf-Binderprogramm 118 insbesondere eine
Lesephase 306, eine Aufbauphase 308, eine
Verschiebungsphase 310, eine Phase 312 des Schreibens in
den Speicher, eine Phase 364 der Initialisierung von
globalen Registern gemäß der vorliegenden Erfindung und
eine Phase 366 der Steuerungsübergabe an die ausführbare
Datei, gefolgt von einem Zustand 369 der Beendigung oder
des Endes der Ausführung durch.
Fig. 3C ist ein Ablaufplan der Initialisierung von
globalen Registern gemäß der vorliegenden Erfindung.
Insbesondere zeigt Fig. 3C einen Initialisierungsprozeß
382 gemäß einer Ausführungsform der vorliegenden Erfindung.
Die Initialisierung umfaßt das Lesen 386 von
Initialisierungsinformationen aus einer Datenstruktur gemäß
der vorliegenden Erfindung, die Initialisierungs
informationen für vorbestimmte globale Register enthält.
Gemäß einer Ausführungsform der vorliegenden Erfindung ist
die Datenstruktur eine Symboltabelle. Gemäß einer weiteren
Ausführungsform der vorliegenden Erfindung ist die
Datenstruktur eine einheitliche Datenstruktur, wie in der
zugehörigen Anmeldung mit dem Titel "Unitary Data Structure
Systems, Methods and Computer Products, for Global Conflict
Determination" gezeigt, die in ihrer Gesamtheit durch den
Hinweis ausdrücklich hierin integriert wird. Die
Initialisierung umfaßt außerdem die Verarbeitung 388 der
Initialisierungsinformation, die gelesen wurden, unter
Verwendung des Prozessors zur Initialisierung von globalen
Registern (GRIE) gemäß der vorliegenden Erfindung. Ferner
umfaßt die Initialisierung das Schreiben 390 der
verarbeiteten Initialisierungsinformationen in vorbestimmte
globale Register. Schließlich ist die Initialisierung
vollendet 394.
Fig. 4A ist ein Blockdiagramm einer Objektdatei, die von
einem Kompilierer gemäß einer bevorzugten Ausführungsform
der vorliegenden Erfindung erzeugt wird, wobei die
Objektdateien von dem Kompilierer mit einer Datenstruktur
für globale Register (GRDS) 406 erzeugt werden, um die
Feststellung von Konflikten zwischen Zuordnungen von
globalen Registern durch das statische und das Ablauf-
Binderprogramm zu ermöglichen. Wie in Fig. 4A gezeigt,
umfaßt die Objektdatei 106 einen Code und Daten 402, eine
Symboltabelle 404, eine Verschiebungstabelle 412 und eine
GRDS 406 gemäß der vorliegenden Erfindung. Die Art und
Weise, in der der Kompilierer 104 einen solchen Code und
Daten 402, die Symboltabelle 404 und die
Verschiebungstabelle 412 erzeugt, wird für Fachleute
ersichtlich sein. Gemäß der vorliegenden Erfindung
identifiziert der Kompilierer 104 nicht globale
Symbolkonflikte und führt keine Verschiebungen durch. Statt
dessen erzeugt der Kompilierer 104 Informationen für
globale Symbole und globale Register und bettet solche
Informationen in eine Datenstruktur für globale Register
(GRDS) 406 ein, die wiederum in der Objektdatei 106
enthalten ist. Solche Informationen für globale Symbole und
globale Register umfassen Informationen über globale
Symbole und globale Register, die in der Quellendatei 102
definiert sind und/oder auf die dort Bezug genommen wird,
und umfassen zusätzliche Informationen darüber, wie solche
globalen Symbole und globalen Register von der Quellendatei
102 verwendet werden. Die Informationen 406 für globale
Symbole und globale Register, die vom Kompilierer 104
erzeugt werden, ermöglichen, daß das Binderprogramm 112
Konflikte von globalen Symbolen und Konflikte von globalen
Registern identifiziert und je nachdem Verschiebungen
durchführt, um Symbole Speicherstellen und globalen
Registern zuzuordnen. Die Datenstruktur für globale
Register (GRDS) 406 wird nachstehend weiter beschrieben.
Fig. 4B ist ein Blockdiagramm einer GRDS 406 gemäß einer
Ausführungsform der vorliegenden Erfindung, einschließlich
einer Verwendungsinformation (UI) 440 und einer
Initialisierungsinformation (II) 441, um die Feststellung
von Konflikten zwischen Zuordnungen von globalen Registern
durch das statische und das Ablauf-Binderprogramm zu
ermöglichen. Die GRDS 406 kommuniziert mit dem Prozessor
zur Initialisierung von globalen Registern (GRIE) 119, um
die Initialisierung von globalen Registern mit den
Initialisierungsinformationen 441 gemäß der vorliegenden
Erfindung zu ermöglichen.
Fig. 4C ist ein Blockdiagramm des Protokolls für die UI
440 in der GRDS 406 gemäß der vorliegenden Erfindung.
Insbesondere umfaßt das UI-Protokoll eine Nummer eines
globalen Registers (GRN) 450 und eine Information für ein
globales Symbol (GSI) 451.
Fig. 4D ist ein Blockdiagramm des Protokolls für die II
441 in einer GRDS 406 gemäß der vorliegenden Erfindung.
Insbesondere enthält die II 441 einen Anfangswert (IV) für
jedes globale Register sowie Kennzeichen 461 zur
Bereitstellung einer Initialisierer-Anwesenheitsanzeige 471
und einer Anzeige 472 für die Abwesenheit eines Namens. Wie
vorstehend erörtert, identifiziert der Kompilierer 104
nicht Konflikte von globalen Symbolen und führt keine
Verschiebungen durch. Statt dessen wird die Identifikation
von Konflikten von globalen Symbolen von der
Kompilierungszeit bis zur Verknüpfungszeit verzögert. In
Schritt 506 von Fig. 5 erzeugt der Kompilierer 104
Informationen über globale Symbole und darüber, wie sie
verwendet werden. Solche Informationen werden
Symbolinformationen 406 genannt und werden in die vom
Kompilierer 104 erzeugte Objektdatei 106 eingebettet.
Fig. 5 ist ein Ablaufplan eines Kompilierungs-/
Verknüpfungsprozesses gemäß einer bevorzugten
Ausführungsform der vorliegenden Erfindung. Insbesondere
zeigt Fig. 5 einen Ablaufplan 502 gemäß der vorliegenden
Erfindung, der die problemorientierte Operation des
Kompilierers 104 und des anwendbaren der Binderprogramme
114, 118 darstellt. Der Kompilierer 104 führt den Schritt
506 aus, wenn die Quellendatei 104 kompiliert wird, und das
anwendbare der Binderprogramme 114, 118 führt den Schritt
508 aus, wenn die Objektdateien 106 und 108 und die
gemeinsam genutzten Bibliotheken 110 verarbeitet werden.
Der Ablaufplan 502 beginnt mit Schritt 504, wo die
Steuerung zu Schritt 506 übergeht. Der Kompilierer erzeugt
Tabelleneintragungen für globale Symbole, um anzugeben, wie
die enthaltende Objektdatei die anwendungsreservierten
globalen Register verwendet. Der Programmierer zeigt dem
Kompilierer beispielsweise durch Kennzeichen gemäß einer
Ausführungsform der vorliegenden Erfindung oder dem
Assemblierer durch Kennzechen oder Übersetzungsanweisungen
gemäß einer Ausführungsform der Erfindung an, welche die
Verwendung der globalen Register ist. In Schritt 506
erzeugt der Kompilierer 104 aus der Quellendatei 102 eine
Objektdatei 106. In Schritt 508 erzeugt das anwendbare der
Binderprogramme 114, 118 eine ausführbare Datei 116 und
dann eine Ausführungsabbildung 120 aus den Objektdateien
106 und 108 und den gemeinsam genutzten Bibliotheken 110.
Wie vorstehend erörtert, führen während der Erzeugung der
ausführbaren Datei 116 und der Ausführungsabbildung 120 das
statische Binderprogramm 114 und das Ablauf-Binderprogramm
118 eine Lesephase 306, eine Aufbauphase 308, eine
Verschiebungsphase 310 und eine Schreibphase 312 durch.
Gemäß der vorliegenden Erfindung werden diese
Binderprogrammphasen 306, 308, 310 und 312 derart
modifiziert, daß das statische Binderprogramm 114 und das
Ablauf-Binderprogramm 118 Konflikte von globalen Symbolen
identifizieren und Verschiebungen durchführen. Die
Operation des statischen Binderprogramms 114 und des
Ablauf-Binderprogramms 118 wird nachstehend weiter
erörtert. Nachdem Schritt 508 vollständig ausgeführt ist,
ist die Operation des Ablaufplans 502 vollständig, wie
durch Schritt 510 angezeigt. Das statische Binderprogramm
prüft diese Symboltabelleneintragungen in allen
Objektdateien, die zu einer ausführbaren Datei oder
gemeinsam genutzten Bibliothek kombiniert werden, um
sicherzustellen, daß die globalen Register kompatibel
verwendet werden. Das resultierende Objekt enthält gemäß
der vorliegenden Erfindung Eintragungen in seiner
Symboltabelle, um die Verwendung der globalen Register des
resultierenden Objekts anzuzeigen. Das statische
Binderprogramm warnt, wenn irgendeine gemeinsam genutzte
Bibliothek, auf die während der Verknüpfung Bezug genommen
wurde, globale Register in einer mit dem erstellten Objekt
inkompatiblen Weise verwendet. Ferner erzeugt gemäß der
vorliegenden Erfindung das statische Binderprogramm eine
Warnung, wenn ein gemeinsam genutztes Objekt erstellt wird,
das anwendungsreservierte globale Register verwendet. Das
dynamische Binderprogramm gemäß der vorliegenden Erfindung
prüft, ob alle Objektdateien, die in den Zielprozeß
eingebunden werden, kompatible Verwendungen der
anwendungsreservierten globalen Register aufweisen. Ein
dlopen() eines Objekts, das nicht mit dem Anwendungsprozeß
kompatibel ist, versagt beispielsweise mit einem Fehler.
Das Zwischensymbol gemäß der vorliegenden Erfindung wird
als Symbol behandelt, da ein Nullname nur einem Nullnamen
entspricht und Zwischenregister gemäß der vorliegenden
Erfindung einen globalen Gültigkeitsbereich besitzen.
Es folgt eine Matrix von zulässigen Kombinationen von
st_shndx für das gleiche Registersymbol:
Die Symbolinformationen 406 enthalten gemäß einer
Ausführungsform der vorliegenden Erfindung:
- 1. eine Symboltabelle 408, die eine Liste von globalen Symbolen enthält; und
- 2. eine Verschiebungstabelle 412, die eine Liste von globalen Symbolen enthält.
Unter Verwendung der Symbolinformationen 406 legt das
Binderprogramm 114 oder 118, wie in Schritt 508 anwendbar,
den exakten Aufbau des globalen Symbols, das von einer
Anwendung verwendet wird, fest und erfüllt dann die
erforderlichen Verschiebungen. Die Symboltabelle 408 umfaßt
eine Vielzahl von Eintragungen, wobei jede Eintragung einem
Symbol entspricht. Diese Eintragungen werden von den
Binderprogrammen 114 und 118 während des
Verschiebungsprozesses verwendet.
Fig. 6 ist ein detaillierter Ablaufplan der
Verknüpfungsverarbeitung gemäß einer bevorzugten
Ausführungsform der vorliegenden Erfindung. Fig. 6 ist ein
detaillierter Ablaufplan eines Binderprogramms, der im
allgemeinen in vier Phasen unterteilt werden kann: eine
Lesephase 306, eine Aufbauphase 308, eine
Verschiebungsphase 310 und eine Schreibphase 312, wie
vorstehend mit Bezug auf Fig. 3 angegeben. Gemäß der
vorliegenden Erfindung werden diese Binderprogrammphasen
306, 308, 310 und 312 derart umstrukturiert, daß das
anwendbare Binderprogramm Konflikte von globalen Symbolen
auf der Basis der Informationen, die in einer oder mehreren
der einheitlichen Datenstrukturen (UDS) 406 enthalten sind,
identifiziert. Solche Modifikationen sind in einem
Ablaufplan 602 gezeigt, der in Fig. 6 dargestellt ist.
Insbesondere wird Schritt 606 vorzugsweise in der Lesephase
306 ausgeführt, um die in den ausgewählten Objekten
gefundenen Informationen für die globalen Symbole zu
mischen. Schritt 608 der Binderprogrammoperation wird
vorzugsweise zwischen der Lesephase 306 und der Aufbauphase
308 ausgeführt, welcher die Identifizierung von Konflikten
von globalen Registern durchführt. Die Schritte 612 und 614
werden vorzugsweise zwischen der Aufbauphase 308 und der
Verschiebungsphase 310 während der Operation des
anwendbaren Binderprogramms ausgeführt. Schritt 616
betrifft Verschiebungen zu modifizierten Speicheradressen
oder globalen Registern und wird vorzugsweise während der
Verschiebungsphase 310 ausgeführt. Der Ablaufplan 602 soll
nun ausführlicher beschrieben werden. Der Ablaufplan 602
beginnt insbesondere mit Schritt 604, wo die Steuerung
unmittelbar zu Schritt 606 übergeht, um die Vereinigung der
Informationen für die globalen Symbole durchzuführen. In
Schritt 606 liest das anwendbare Binderprogramm in den
Objektdateien 106, 108 und den gemeinsam genutzten
Bibliotheken 110 und mischt die Informationen 406 für die
globalen Symbole, die in der UDS 406 enthalten sind,
miteinander. Ferner mischt das anwendbare Binderprogramm
die in diesen Dateien enthaltene UDS 406 miteinander, um
eine gemischte UDS zu erzeugen. Ebenso mischt das
anwendbare Binderprogramm die Verschiebungstabellen 412
miteinander, um eine gemischte Klassenverschiebungstabelle
zu erzeugen. Als nächstes identifiziert in Schritt 608 das
anwendbare Binderprogramm Konflikte von globalen Symbolen.
Insbesondere verarbeitet das anwendbare Binderprogramm die
gemischten Tabellen und stellt den Aufbau jedes Symbols
(beispielsweise die Größe und Ausrichtung jedes Symbols,
die Anzahl der Felder, die Datentypen der Felder, die
Anzahl der Bytes vom oberen Ende des Symbols zu jedem der
Felder usw.) fest. Das anwendbare Binderprogramm erstellt
insbesondere eine separate Datenstruktur für jedes Symbol
und speichert diese symbolspezifischen Informationen in
solchen separaten Datenstrukturen. Diese Datenstrukturen
werden für Bezugszwecke "Aufbau-Datenstrukturen" genannte.
Nach Vollendung von Schritt 608 kennt das anwendbare
Binderprogramm viel von den zu einem Symbol gehörenden
Informationen, die von einem Kompilierer erzeugt wurden.
Gemäß Schritt 610 werden Konflikte von globalen Symbolen
identifiziert. In Schritt 612 wertet das anwendbare
Binderprogramm die Symbole in der gemischten UDS aus.
Insbesondere stellt das anwendbare Binderprogramm den Wert
des Symbols in jeder Eintragung der gemischten
Symboltabelle fest und speichert diesen Wert im Wertefeld
dieser Eintragung. Man betrachte beispielsweise die
beispielhafte UDS 406 in Fig. 4B. Das anwendbare
Binderprogramm stellt die Werte von speziellen Eintragungen
durch Bezugnahme auf eine zugehörige Aufbau-Datenstruktur
fest. Das anwendbare Binderprogramm speichert diese Werte
in den Wertefeldern der Eintragungen der UDS 406, die in
der UI 440 der UDS 406 enthalten sind. Die Art und Weise,
in der das Binderprogramm 112 die Werte von anderen
Symboltypen berechnet, ist vorstehend beschrieben. In
Schritt 614 initialisiert das anwendbare Binderprogramm
globale Registerstrukturen. Insbesondere erzeugt das
anwendbare Binderprogramm während Schritt 614 Tabellen und
Tabellenzeiger-Informationstabellen einschließlich UDSs 406
und speichert diese Tabellen in den entsprechenden
Datenstrukturen, die zugewiesen wurden. In Schritt 616
führt das anwendbare Binderprogramm die in den Eintragungen
der gemischten Verschiebungstabelle festgelegten
Verschiebungen durch. Die Art und Weise, in der das
anwendbare Binderprogramm diese Funktion ausführt, ist
vorstehend beschrieben. Nachdem Schritt 616 vollständig
durchgeführt ist, ist die Operation des Ablaufplans 602
vollständig, wie durch Schritt 618 angezeigt. Wie für
Fachleute ersichtlich ist, wird die vorstehend beschriebene
Operation des anwendbaren Binderprogramms in der Praxis vom
statischen Binderprogramm 114 und vom Ablauf-Binderprogramm
118 gemeinsam durchgeführt. Ob die vorstehend beschriebenen
Operationen vom statischen Binderprogramm 114 oder vom
Ablauf-Binderprogramm 118 durchgeführt werden, ist bei der
vorliegenden Erfindung nicht von Bedeutung. Vorzugsweise
versucht jedoch das statische Binderprogramm 114,
ausführbare und gemeinsam genutzte Objekte vorab zu
verknüpfen, so daß, wenn sich die ausführbaren und
gemeinsam genutzten Objekte im gleichen Zustand befinden
wie bei ihrer Erstellung, dann das Ablauf-Binderprogramm
118 nur die Dateien laden und den Ablauf starten muß. In
der Praxis kann das Ablauf-Binderprogramm 118 viele der
Verschiebungen, die vom statischen Binderprogramm 114
durchgeführt wurden, noch einmal ausführen müssen.
Fig. 7 ist ein Beispiel einer Symboltabelle, die von einem
Kompilierer gemäß einer bevorzugten Ausführungsform der
vorliegenden Erfindung erzeugt wird. Fig. 7 zeigt
insbesondere erste und zweite Symboltabelleneintragungen
714 und 718 in einer beispielhaften Symboltabelle 408. Jede
Eintragung in der Symboltabelle 408 enthält eine
Information, die den Symboltyp identifiziert, und eine
Information, die den Wert des Symbols für diese Klasse
angibt. Eintragungen für spezielle Symbole können außerdem
weitere Felder enthalten, einschließlich beispielsweise
eines Symbolnamens, einer Symbolgröße, einer Symbolbindung
und eines Symbolabschnittsindex. Der Symbolname enthält,
wenn er passend ist, den Namen einer Eintragung. Die Liste
der Symboltypen ist spezifisch für die Implementierung und
hängt von einer Anzahl von Faktoren ab, wie z. B. der
Computerprogrammiersprache und dem Zielcomputer.
Beispielhafte Symboltypen werden für Fachleute ersichtlich
sein.
Wie nachstehend beschrieben, berechnet das anwendbare
Binderprogramm die Werte der Symbole in der Symboltabelle
408 gemäß der vorliegenden Erfindung vor der Verarbeitung
der Verschiebungseintragungen in der Verschiebungstabelle
412. Bei der Verarbeitung jeder Verschiebungseintragung
wird der Wert aus der Symboltabelle entnommen und wird an
der gegebenen Adresse gemäß dem Typ der
Verschiebungseintragung gespeichert. Man betrachte das
Beispiel von Fig. 7. Vor der Verarbeitung der
Verschiebungseintragungen in der Verschiebungstabelle 412
wertet das anwendbare Binderprogramm die Symboleintragungen
714, 718 in der Symboltabelle 408 aus und liest den zu
jeder Symboleintragung gehörenden Wert. Das anwendbare
Binderprogramm fügt dann den gelesenen Wert in das
Wertefeld der Symboleintragung 714 ein. Gemäß einer
Ausführungsform der vorliegenden Erfindung fügt das
anwendbare Binderprogramm diesen Wert (8 Bytes) in das
Wertefeld der Symboleintragung 718 ein. Während der
Verarbeitung einer speziellen Verschiebungseintragung
ersetzt das anwendbare Binderprogramm gemäß der
vorliegenden Erfindung einen Platzhalter in der Anweisung
an einer speziellen Adresse durch den Wert in der
Symboleintragung 714. Dies kann ein Fallzeiger in einer
Verschiebungseintragung sein, der auf eine Symboleintragung
714 verweist. Ebenso ersetzt das anwendbare Binderprogramm
während der Verarbeitung einer speziellen
Verschiebungseintragung für die Verschiebungstabelle 412
den Platzhalter, wie z. B. eine Null (d. h. beispielsweise
"0"), in der Anweisung an einer speziellen Adresse durch
den in der Symboleintragung 714 vorgesehenen Wert. Ein
Registersymbol in einer Symboltabelle gemäß einer
Ausführungsform der vorliegenden Erfindung wird durch einen
speziellen zusätzlichen Symboltyp und Wert angezeigt, wie
nachstehend dargelegt:
Eine Symboltabelleneintragung für ein Registersymbol gemäß
einer Ausführungsform der vorliegenden Erfindung umfaßt
insbesondere die folgenden Elemente:
st_name: Index in die Zeichenfolgetabelle des Namens des
Symbols. Ein Indexwert von 0, der auf den
Nullnamen in der Zeichenfolgetabelle verweist,
zeigt an, daß das Register als Zwischenregister
verwendet wird. Ein Zwischenregister muß die
Bindung STB_GLOBAL aufweisen.
st_value: Registernummer. Registernummern entsprechen den Zuordnungen im SPARC-Architektur-Handbuch für Ganzzahlenregister.
st_size: unbenutzt (0)
st_info: ELF64_ST_INFO (bind.type) bind ist typischerweise STB_GLOBAL, spiegelt jedoch nicht den tatsächlichen angegebenen Gültigkeitsbereich des Namens wider (das heißt, es könnte STB_WEAK oder STB_LOCAL sein). type muß STT_REGISTER (13) sein.
st_other: unbenutzt (0)
st_shndx: SHN_ABS, wenn dieses Objekt dieses Registersymbol initialisiert; ansonsten SHN_UNDEF. Ein Initialisierer für ein SHN_ABS- Registersymbol wird mit einem speziellen Registerverschiebungstyp festgelegt.
st_value: Registernummer. Registernummern entsprechen den Zuordnungen im SPARC-Architektur-Handbuch für Ganzzahlenregister.
st_size: unbenutzt (0)
st_info: ELF64_ST_INFO (bind.type) bind ist typischerweise STB_GLOBAL, spiegelt jedoch nicht den tatsächlichen angegebenen Gültigkeitsbereich des Namens wider (das heißt, es könnte STB_WEAK oder STB_LOCAL sein). type muß STT_REGISTER (13) sein.
st_other: unbenutzt (0)
st_shndx: SHN_ABS, wenn dieses Objekt dieses Registersymbol initialisiert; ansonsten SHN_UNDEF. Ein Initialisierer für ein SHN_ABS- Registersymbol wird mit einem speziellen Registerverschiebungstyp festgelegt.
Die Abwesenheit einer Eintragung für ein spezielles
globales Register zeigt an, daß dieses spezielle globale
Register von dem Objekt nicht verwendet wird. Ein Objekt
gemäß der vorliegenden Erfindung verwendet ein oder mehrere
der anwendungsreservierten globalen Register und zeigt
diese Verwendung mit einer geeigneten Symboltabellen
eintragung an. Das folgende Kennzeichen einer dynamischen
Feldgruppe wird darüber hinaus gemäß einer Ausführungsform
der vorliegenden Erfindung zur Symboltabelle hinzugefügt:
Der Kompilierer 104 gemäß der vorliegenden Erfindung
erzeugt folglich einen Code, der zur Verknüpfungszeit
verschoben wird. Wenn auf eine Variable in einer
Quellendatei Bezug genommen wird, erzeugt der Kompilierer
104 insbesondere sowohl eine Symboltabelle 408 als auch
eine Verschiebungstabelle 412. Gemäß einer Ausführungsform
der vorliegenden Erfindung wird die Erzeugung von Symbol-
und Verschiebungstabellen mit einem spezialisierten
Verschiebungstyp für globale Register durchgeführt, der zur
Identifikation von Konflikten von globalen Registern und
zur Initialisierung der globalen Register vor der
Ausführung der Ausführungsabbildung, die erzeugt wird,
verwendet wird.
Fig. 8 ist ein Beispiel einer Verschiebungstabelle gemäß
einer Ausführungsform der vorliegenden Erfindung. Die
Verschiebungstabelle 412 enthält eine Liste der
Verschiebungen, die vom anwendbaren Binderprogramm während
der Verknüpfungszeit durchgeführt werden müssen. Jede
Eintragung in der Verschiebungstabelle 412 umfaßt einen
Verschiebungstyp, eine Adresse von entweder einer Anweisung
oder einem Datenelement, das verschoben werden muß, und in
jedem außer einem Fall, einen Zeiger zu einer Eintragung in
der Symboltabelle 408. Der folgende Verschiebungstyp wird
gemäß der vorliegenden Erfindung zur Verschiebungstabelle
hinzugefügt:
Obwohl verschiedene Ausführungsformen der vorliegenden
Erfindung vorstehend beschrieben wurden, sollte es
selbstverständlich sein, daß sie nur als Beispiel und nicht
als Begrenzung dargestellt wurden. Folglich sollten die
Breite und der Schutzbereich der vorliegenden Erfindung
nicht durch irgendeine der vorstehend beschriebenen
beispielhaften Ausführungsformen begrenzt werden, sondern
sollten nur gemäß den folgenden Ansprüchen und ihren
Äquivalenten definiert sein.
Claims (14)
1. Verfahren zur Initialisierung eines globalen
Registers, umfassend:
Erzeugen, durch einen Kompilierer, von Informationen für globale Register, die mindestens eine einzelne globale Variable betreffen, auf die in einer Quellendatei Bezug genommen wird;
Erzeugen, durch den Kompilierer, einer Objektdatei aus der Quellendatei, wobei die Objektdatei die Informationen für globale Variablen umfaßt; und
Verknüpfen, durch ein Binderprogramm, der Objektdatei mit mindestens einer von einer weiteren Objektdatei und einer gemein genutzten Bibliothek, um dadurch eine ausführbare Datei zu erzeugen, unter Verwendung der Informationen für globalen Variablen, die in der Objektdatei enthalten sind, um mindestens ein einzelnes globales Register zu initialisieren und Variablenkonflikte bezüglich des mindestens einen einzelnen globalen Registers zu identifizieren.
Erzeugen, durch einen Kompilierer, von Informationen für globale Register, die mindestens eine einzelne globale Variable betreffen, auf die in einer Quellendatei Bezug genommen wird;
Erzeugen, durch den Kompilierer, einer Objektdatei aus der Quellendatei, wobei die Objektdatei die Informationen für globale Variablen umfaßt; und
Verknüpfen, durch ein Binderprogramm, der Objektdatei mit mindestens einer von einer weiteren Objektdatei und einer gemein genutzten Bibliothek, um dadurch eine ausführbare Datei zu erzeugen, unter Verwendung der Informationen für globalen Variablen, die in der Objektdatei enthalten sind, um mindestens ein einzelnes globales Register zu initialisieren und Variablenkonflikte bezüglich des mindestens einen einzelnen globalen Registers zu identifizieren.
2. Verfahren nach Anspruch 1, einschließlich des
Erzeugens einer Datenstruktur innerhalb einer ausgewählten
Objektdatei, die Initialisierungswerte für globale Register
enthält.
3. Verfahren nach Anspruch 2, umfassend:
Auswählen eines solchen globalen Registers;
Festlegen eines Anfangswerts eines ausgewählten globalen Registers; und
Speichern des Werts in einem Feld einer solchen Datenstruktur, die mit dem globalen Register verknüpft ist.
Auswählen eines solchen globalen Registers;
Festlegen eines Anfangswerts eines ausgewählten globalen Registers; und
Speichern des Werts in einem Feld einer solchen Datenstruktur, die mit dem globalen Register verknüpft ist.
4. Verfahren nach Anspruch 3, welches ferner das
Erstellen einer Datenstruktur innerhalb einer ausgewählten
Objektdatei umfaßt, um die Initialisierung von globalen
Registern zu ermöglichen.
5. Verfahren nach Anspruch 1, einschließlich des
Festlegens von Anfangswerten für globale Register gemäß
Benutzeranforderungen.
6. System zur Initialisierung von globalen Registern,
umfassend:
einen Kompilierer mit einem Informationsgenerator, der konfiguriert ist, um Anfangswertinformationen zu erzeugen, die globale Register betreffen, auf die in der Quellendatei Bezug genommen wird, wobei die Informationen die Initialisierung von globalen Registern während der Verknüpfungszeit ermöglichen;
einen Objektdateigenerator, der konfiguriert ist, um aus der Quellendatei eine Objektdatei zu erzeugen, wobei die Objektdatei eine Datenstruktur umfaßt, die die Initialisierung von globalen Registern ermöglicht; und
ein Binderprogramm zum Verknüpfen der Objektdatei mit mindestens einer weiteren Objektdatei, um eine ausführbare Datei zu erzeugen, wobei das Binderprogramm ein Mittel zur Verwendung der in der Objektdatei enthaltenen Symbolinformationen umfaßt.
einen Kompilierer mit einem Informationsgenerator, der konfiguriert ist, um Anfangswertinformationen zu erzeugen, die globale Register betreffen, auf die in der Quellendatei Bezug genommen wird, wobei die Informationen die Initialisierung von globalen Registern während der Verknüpfungszeit ermöglichen;
einen Objektdateigenerator, der konfiguriert ist, um aus der Quellendatei eine Objektdatei zu erzeugen, wobei die Objektdatei eine Datenstruktur umfaßt, die die Initialisierung von globalen Registern ermöglicht; und
ein Binderprogramm zum Verknüpfen der Objektdatei mit mindestens einer weiteren Objektdatei, um eine ausführbare Datei zu erzeugen, wobei das Binderprogramm ein Mittel zur Verwendung der in der Objektdatei enthaltenen Symbolinformationen umfaßt.
7. System nach Anspruch 6, welches ferner ein Mittel zum
Erzeugen einer Datenstruktur mit einer Symboleintragung für
ein anwendbares Symbol, das einer Bezugnahme in einer
Quellendatei zugeordnet ist, und einem Wertefeld mit einem
Wert des Symboltyps umfaßt.
8. System nach Anspruch 7, wobei das System umfaßt:
ein Mittel zum Festlegen eines Werts eines Symboltyps; und
ein Mittel zum Speichern des Werts in dem Wertefeld der ausgewählten Symboleintragung.
ein Mittel zum Festlegen eines Werts eines Symboltyps; und
ein Mittel zum Speichern des Werts in dem Wertefeld der ausgewählten Symboleintragung.
9. System nach Anspruch 8, welches ein Mittel zum
Erzeugen einer Datenstruktur umfaßt, die die
Initialisierung von globalen Registern ermöglicht.
10. System nach Anspruch 9, wobei das System ein Mittel
zur Initialisierung von globalen Registern umfaßt.
11. Computerprogrammprodukt mit einem maschinenlesbaren
Medium mit einer darauf aufgezeichneten
Computerprogrammlogik, um zu ermöglichen, daß ein
Computersystem eine Quellendatei kompiliert, wobei das
Computerprogrammprodukt umfaßt:
einen Mechanismus, um zu ermöglichen, daß das Computersystem während der Kompilierungszeit Informationen erzeugt, die globale Register betreffen, auf die in der Quellendatei Bezug genommen wird, wobei die Informationen die Initialisierung von globalen Registern während der Verknüpfungszeit ermöglichen;
einen Objektdatei-Erzeugungsmechanismus, um zu ermöglichen, daß das Computersystem während der Kompilierungszeit aus der Quellendatei eine Objektdatei erzeugt; und
einen Verknüpfungsmechanismus, um zu ermöglichen, daß das Computersystem während der Verknüpfungszeit die Objektdatei mit mindestens einer weiteren Objektdatei verknüpft, um dadurch eine ausführbare Datei zu erzeugen.
einen Mechanismus, um zu ermöglichen, daß das Computersystem während der Kompilierungszeit Informationen erzeugt, die globale Register betreffen, auf die in der Quellendatei Bezug genommen wird, wobei die Informationen die Initialisierung von globalen Registern während der Verknüpfungszeit ermöglichen;
einen Objektdatei-Erzeugungsmechanismus, um zu ermöglichen, daß das Computersystem während der Kompilierungszeit aus der Quellendatei eine Objektdatei erzeugt; und
einen Verknüpfungsmechanismus, um zu ermöglichen, daß das Computersystem während der Verknüpfungszeit die Objektdatei mit mindestens einer weiteren Objektdatei verknüpft, um dadurch eine ausführbare Datei zu erzeugen.
12. Computersystem, umfassend:
einen Prozessor; und
eine Steuereinheit, um zu ermöglichen, daß der Prozessor eine Quellendatei kompiliert und verknüpft, wobei die Steuereinheit umfaßt:
einen Symbolinformationsmechanismus, um zu ermöglichen, daß der Prozessor während der Kompilierungszeit Informationen erzeugt, die globale Register betreffen, auf die in der Quellendatei Bezug genommen wird, wobei die Symbolinformationen die Initialisierung von globalen Registern während der Verknüpfungszeit ermöglichen;
einen Objektdateigenerator, um zu ermöglichen, daß der Prozessor während der Kompilierungszeit aus der Quellendatei eine Objektdatei erzeugt, wobei die Objektdatei eine Datenstruktur, um die Initialisierung von globalen Registern zur Verknüpfungszeit zu ermöglichen, enthält; und
ein Binderprogramm, um zu ermöglichen, daß der Prozessor während der Verknüpfungszeit die Objektdatei mit mindestens einer weiteren Objektdatei verknüpft.
einen Prozessor; und
eine Steuereinheit, um zu ermöglichen, daß der Prozessor eine Quellendatei kompiliert und verknüpft, wobei die Steuereinheit umfaßt:
einen Symbolinformationsmechanismus, um zu ermöglichen, daß der Prozessor während der Kompilierungszeit Informationen erzeugt, die globale Register betreffen, auf die in der Quellendatei Bezug genommen wird, wobei die Symbolinformationen die Initialisierung von globalen Registern während der Verknüpfungszeit ermöglichen;
einen Objektdateigenerator, um zu ermöglichen, daß der Prozessor während der Kompilierungszeit aus der Quellendatei eine Objektdatei erzeugt, wobei die Objektdatei eine Datenstruktur, um die Initialisierung von globalen Registern zur Verknüpfungszeit zu ermöglichen, enthält; und
ein Binderprogramm, um zu ermöglichen, daß der Prozessor während der Verknüpfungszeit die Objektdatei mit mindestens einer weiteren Objektdatei verknüpft.
13. Steuereinheit, um zu ermöglichen, daß ein Prozessor
eine Quellendatei kompiliert, wobei die Steuereinheit
umfaßt:
ein Informationserzeugungsmittel, um zu ermöglichen, daß der Prozessor während der Kompilierungszeit Informationen erzeugt, die globale Symbole betreffen, auf die in der Quellendatei Bezug genommen wird, wobei die Informationen ausreichen, um die Initialisierung von globalen Registern während der Verknüpfungszeit zu ermöglichen;
ein Objektdatei-Erzeugungsmittel, um zu ermöglichen, daß der Prozessor während der Kompilierungszeit aus der Quellendatei eine Objektdatei erzeugt, wobei die Objektdatei eine Datenstruktur, um die Initialisierung von globalen Registern zur Verknüpfungszeit zu ermöglichen, enthält; und
ein Verknüpfungsmittel, um zu ermöglichen, daß der Prozessor während der Verknüpfungszeit die Objektdatei mit mindestens einer weiteren Objektdatei verknüpft, um dadurch eine ausführbare Datei zu erzeugen, wobei das Verknüpfungsmittel ein Mittel zur Verwendung der in der Objektdatei enthaltenen Informationen zur Initialisierung der globalen Register umfaßt.
ein Informationserzeugungsmittel, um zu ermöglichen, daß der Prozessor während der Kompilierungszeit Informationen erzeugt, die globale Symbole betreffen, auf die in der Quellendatei Bezug genommen wird, wobei die Informationen ausreichen, um die Initialisierung von globalen Registern während der Verknüpfungszeit zu ermöglichen;
ein Objektdatei-Erzeugungsmittel, um zu ermöglichen, daß der Prozessor während der Kompilierungszeit aus der Quellendatei eine Objektdatei erzeugt, wobei die Objektdatei eine Datenstruktur, um die Initialisierung von globalen Registern zur Verknüpfungszeit zu ermöglichen, enthält; und
ein Verknüpfungsmittel, um zu ermöglichen, daß der Prozessor während der Verknüpfungszeit die Objektdatei mit mindestens einer weiteren Objektdatei verknüpft, um dadurch eine ausführbare Datei zu erzeugen, wobei das Verknüpfungsmittel ein Mittel zur Verwendung der in der Objektdatei enthaltenen Informationen zur Initialisierung der globalen Register umfaßt.
14. System zur Initialisierung von globalen Registern,
umfassend:
einen Kompilierer mit einem Informationserzeugungsmittel zum Erzeugen von Anfangswertinformationen, die globale Register betreffen, auf die in der Quellendatei Bezug genommen wird, wobei die Informationen die Initialisierung von globalen Registern während der Verknüpfungszeit gestatten;
ein Objektdatei-Erzeugungsmittel zum Erzeugen einer Objektdatei aus der Quellendatei, wobei die Objektdatei eine Datenstruktur enthält, die die Initialisierung von globalen Registern ermöglicht; und
ein Binderprogramm zum Verknüpfen der Objektdatei mit mindestens einer weiteren Objektdatei, um eine ausführbare Datei zu erzeugen, wobei das Binderprogramm ein Mittel zur Verwendung der in der Objektdatei enthaltenen Symbolinformationen umfaßt.
einen Kompilierer mit einem Informationserzeugungsmittel zum Erzeugen von Anfangswertinformationen, die globale Register betreffen, auf die in der Quellendatei Bezug genommen wird, wobei die Informationen die Initialisierung von globalen Registern während der Verknüpfungszeit gestatten;
ein Objektdatei-Erzeugungsmittel zum Erzeugen einer Objektdatei aus der Quellendatei, wobei die Objektdatei eine Datenstruktur enthält, die die Initialisierung von globalen Registern ermöglicht; und
ein Binderprogramm zum Verknüpfen der Objektdatei mit mindestens einer weiteren Objektdatei, um eine ausführbare Datei zu erzeugen, wobei das Binderprogramm ein Mittel zur Verwendung der in der Objektdatei enthaltenen Symbolinformationen umfaßt.
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US09/087,344 US6026242A (en) | 1998-05-29 | 1998-05-29 | Methods, computer program products, and apparatus for initializing global registers |
Publications (1)
Publication Number | Publication Date |
---|---|
DE19924437A1 true DE19924437A1 (de) | 2000-02-03 |
Family
ID=22204633
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
DE19924437A Withdrawn DE19924437A1 (de) | 1998-05-29 | 1999-05-28 | Verfahren, Computerprogrammprodukte und Vorrichtung zur Initialisierung von globalen Registern |
Country Status (4)
Country | Link |
---|---|
US (1) | US6026242A (de) |
JP (1) | JP2000010791A (de) |
DE (1) | DE19924437A1 (de) |
GB (1) | GB2342200B (de) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN113741411A (zh) * | 2021-11-08 | 2021-12-03 | 西安热工研究院有限公司 | 一种分散控制系统全局变量点产物文件生成方法和系统 |
Families Citing this family (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6298479B1 (en) * | 1998-05-29 | 2001-10-02 | Sun Microsystems, Inc. | Method and system for compiling and linking source files |
US8769517B2 (en) * | 2002-03-15 | 2014-07-01 | International Business Machines Corporation | Generating a common symbol table for symbols of independent applications |
US7503040B2 (en) * | 2004-09-30 | 2009-03-10 | International Business Machines Corporation | Configuring a shared library to accommodate relocatable data in a pervasive device |
US8516469B2 (en) * | 2005-07-25 | 2013-08-20 | Flexera Software Llc | Function binding method and system |
US20110246966A1 (en) * | 2010-04-06 | 2011-10-06 | Sony Computer Entertainment America Inc. | Embedding source files into program symbol files |
CN102902568B (zh) | 2011-07-27 | 2016-08-17 | 国际商业机器公司 | 一种用于处理应用程序的内容表访问溢出的方法和系统 |
CN110688320B (zh) * | 2019-09-30 | 2023-05-23 | 潍柴动力股份有限公司 | 全局变量的检测方法、装置及终端设备 |
Family Cites Families (12)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US4435753A (en) * | 1980-10-31 | 1984-03-06 | International Business Machines Corporation | Register allocation system using recursive queuing during source code compilation |
EP0423989A3 (en) * | 1989-10-16 | 1992-09-23 | Hewlett-Packard Company | Software compiler and linker with improved line number table |
US5428793A (en) * | 1989-11-13 | 1995-06-27 | Hewlett-Packard Company | Method and apparatus for compiling computer programs with interproceduural register allocation |
US5339428A (en) * | 1991-09-04 | 1994-08-16 | Digital Equipment Corporation | Compiler allocating a register to a data item used between a use and store of another data item previously allocated to the register |
US5278986A (en) * | 1991-12-13 | 1994-01-11 | Thinking Machines Corporation | System and method for compiling a source code supporting data parallel variables |
US5481708A (en) * | 1992-06-05 | 1996-01-02 | Borland International, Inc. | System and methods for optimizing object-oriented compilations |
US5367651A (en) * | 1992-11-30 | 1994-11-22 | Intel Corporation | Integrated register allocation, instruction scheduling, instruction reduction and loop unrolling |
US5375242A (en) * | 1993-09-29 | 1994-12-20 | Hewlett-Packard Company | Compiler architecture for cross-module optimization |
EP0676691A3 (de) * | 1994-04-06 | 1996-12-11 | Hewlett Packard Co | Vorrichtung zur Registersicherstellung und Umspeicherung in einem digitalen Rechner. |
US5680622A (en) * | 1994-06-30 | 1997-10-21 | Borland International, Inc. | System and methods for quickly detecting shareability of symbol and type information in header files |
US5613120A (en) * | 1994-10-20 | 1997-03-18 | Silicon Graphics, Inc. | System and method for enabling, without recompilation, modification of class definitions and implementations in an object-oriented computer program |
US6298479B1 (en) * | 1998-05-29 | 2001-10-02 | Sun Microsystems, Inc. | Method and system for compiling and linking source files |
-
1998
- 1998-05-29 US US09/087,344 patent/US6026242A/en not_active Expired - Lifetime
-
1999
- 1999-05-21 GB GB9911953A patent/GB2342200B/en not_active Expired - Fee Related
- 1999-05-26 JP JP11146388A patent/JP2000010791A/ja active Pending
- 1999-05-28 DE DE19924437A patent/DE19924437A1/de not_active Withdrawn
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN113741411A (zh) * | 2021-11-08 | 2021-12-03 | 西安热工研究院有限公司 | 一种分散控制系统全局变量点产物文件生成方法和系统 |
CN113741411B (zh) * | 2021-11-08 | 2022-02-01 | 西安热工研究院有限公司 | 一种分散控制系统全局变量点产物文件生成方法和系统 |
Also Published As
Publication number | Publication date |
---|---|
US6026242A (en) | 2000-02-15 |
GB2342200A (en) | 2000-04-05 |
GB2342200B (en) | 2003-08-13 |
GB9911953D0 (en) | 1999-07-21 |
JP2000010791A (ja) | 2000-01-14 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
EP0689694B1 (de) | Verfahren zur maschinellen erzeugung von nebenläufig bearbeitbaren befehlsgruppen aus einem programm für superskalare mikroprozessoren | |
DE69924857T2 (de) | Programm-kode-umwandlung | |
EP0502857B1 (de) | Verfahren zur dynamischen bindung von definierbaren programmelementen eines interaktiven datenverarbeitungssystems | |
DE69832932T2 (de) | Programmkonvertiergerät für konstantenrekonstruierenden VLIW Prozessor | |
DE69932371T2 (de) | Verschiebbare Instrumentationskennzeichen für die Prüfung und die Fehlerbeseitigung eines Computerprogramms | |
DE69730276T2 (de) | Vorrichtung und Verfahren zur Erleichterung der Vermeidung von exzeptionellen bestimmten Zuständen während des Ablaufs eines Programmes | |
DE60010420T2 (de) | Automatisches Regressionstesten von Arbeitsplatz-Software | |
EP1723513B1 (de) | Verfahren zur konfiguration eines computerprogramms | |
DE19924702A1 (de) | Systeme mit einheitlicher Datenstruktur, Verfahren und Computerprogrammprodukte zur Feststellung von globalen Konflikten | |
DE19945992A1 (de) | Dynamisch optimierender Objektcode-Übersetzer zur Architekturemulation und dynamisches optimierendes Objektcode-Übersetzungsverfahren | |
DE69133571T2 (de) | Datenprozessor mit der Fähigkeit, zwei Befehle gleichzeitig auszuführen | |
EP1738257B1 (de) | Verfahren zum vermeiden von dateninkonsistenz zwischen zugriffen verschiedener funktionen einer anwendung auf eine globale variable in einer datenverarbeitungsanlage | |
DE3842289C2 (de) | Verfahren zur Entwicklung von Programmen für ein verteiltes Datenverarbeitungssystem | |
DE10006417A1 (de) | Computersystem mit Einzelverarbeitungsumgebung für die Ausführung von mehreren Anwendungsprogrammen | |
DE19581754B4 (de) | System und Verfahren zum bedingten Kompilieren einer Software-Kompiliereinheit | |
DE19924437A1 (de) | Verfahren, Computerprogrammprodukte und Vorrichtung zur Initialisierung von globalen Registern | |
DE112018002316T5 (de) | Codeabdeckungsverfolgung für ein mikrocontroller-programm | |
DE2458286A1 (de) | Datenverarbeitungssystem zum verschieben von datenfeldern mit verschiedenen strukturen | |
DE4104568A1 (de) | Verfahren und vorrichtung zur programmverarbeitung | |
DE69712965T9 (de) | Verfahren, System und Rechnerprogrammprodukt zur Registerzuweisung unter Verwendung mehrerer Interferenzgraphen | |
EP3015995A1 (de) | Verfahren zum konfigurieren einer schnittstelleneinheit eines computersystems | |
WO1998001805A1 (de) | Verfahren zur migration von programmen mit portierbaren und nicht-portierbaren programmteilen | |
DE2249852A1 (de) | Computersystem | |
DE102020119853B3 (de) | Verfahren zum Steuern eines Automatisierungssystems mit Visualisierung von Programmobjekten eines Steuerprogramms des Automatisierungssystems und Automatisierungssystem | |
DE10325843B4 (de) | Verfahren, Drucksystem, Computer und Computerprogramm zum Verwalten von Resourcen zur Verwendung in einem resourcenbasierten Dokumentendatenstrom |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
OP8 | Request for examination as to paragraph 44 patent law | ||
8130 | Withdrawal |