Difference between revisions of "System unit structure/fr"
Line 91: | Line 91: | ||
(note: c'est actuellement en état de démarrage et s'applique seulement à la cible i386-win32) | (note: c'est actuellement en état de démarrage et s'applique seulement à la cible i386-win32) | ||
+ | Supporter les paquets d'exécution nécessite de pouvoir relier l'unité System et le programme principal en différents modules exécutables. Par conséquent, l'information globale générée par compilateur, telle que la table d'initialisation de l'unité, ne peut pas être directement référencée à partir de l'unité System. Au lieu de cela, il est référencé à partir d'une petite unité distincte ('sysinit') et transmis à des routines dans l'unité du système via les arguments de fonction. Le point d'entrée du module est placé dans l'unité sysinit, aussi. Une copie de l'unité de sysinit est liée statiquement dans chaque module exécutable, de sorte que chaque module se termine en contenant la table d'initialisation seulement pour les unités qu'il contient réellement. | ||
− | + | Cette information globale n'est pas limitée à la table d'initialisation de l'unité, voir l'enregistrement TEntryInformation pour une liste complète. | |
− | + | Une cible peut avoir plus d'une unité Sysinit, chacune résolvant des tâches d'initialisation spécifiques. Une unité particulière à utiliser est déterminée par le compilateur, voir la méthode InitSysInitUnitName de la classe TLinker. Par exemple, bien qu'utilisant normalement sysinitpas.pp, le compilateur peut utiliser sysinitcyg.pp à la place s'il détecte une liaison avec des bibbliothèques Cygwin. | |
− | |||
− | |||
=== Spécifique à une plate-forme === | === Spécifique à une plate-forme === |
Revision as of 13:02, 25 October 2014
An editor has declared this article to be a stub, meaning that it needs more information. Can you help out and add some? If you have some useful information, you can help the Free Pascal Wiki by clicking on the edit box on the left and expanding this page.
│
English (en) │
español (es) │
français (fr) │
Structure de l'unité System
(travail en cours - incomplet!)
Cette page est censée documenter les fonctions et procédures servant comme "interfaces" entre les parties communes et celles spécifique à une plate-forme de l'unité System aussi bien que les sous-routines utilisée communément pour des tâches particulières réalisées pendant l'initialisation et spécifie leur comportement. Cela pourrait alors servir de spécification pour les mainteneurs des plate-formes existantes ou à venir pour garantir un comportement totalement compatible (en prenant en compte autant que possible les limitations individuelles des plate-formes).
Toutes les routines listées sont obligatoires (au moins comme stub) sauf indication contraire. Si le nom du fichier source habituel contenant l'implémentation d'une routine particulière n'est pas mentionné, il est supposé être system.pas pour le code spécifique à une plate-forme et system.inc pour les routines partagées entre les plate-formes.
Types
Les types suivants sont supposés définis dans l'interface de la partie spécifique plate-forme de l'unité System.
- THandle
- TThreadID
- TRTLCriticalSection
- PRTLCriticalSection
Constantes et variables
La liste suivante énumère les constantes et variables qui doivent être déclarées (et habituellement initialisées à une valeur raisonnable pour la plate-forme particulière) pour toutes les plates-formes:
- LineEnding
- DirectorySeparator
- DriveSeparator
- PathSeparator
- MaxExitCode
- MaxPathLen
- UnusedHandle
- StdInputHandle
- StdOutputHandle
- StdErrorHandle
- LFNSupport
- FileNameCaseSensitive
- CtrlZMarksEof
- sLineBreak
- DefaultTextLineBreakStyle
- ArgC
- ArgV
- EnvC
- EnvP
<TODO>
Initialization
Partagé
InitHeap
Implémenté dans heap.inc.
Initialisation des structutres internes utilisées par le gestionnaire de tas par défault. Aucun tas ne peut être utilisé avant avoir appelé InitHeap.
SysInitExceptions
Initialisation des structures internes utilisées par le support des exceptions.
<TODO>
OpenStdIO
Partie commune de l'initialisation des variables fichier standard. C'est similaire aux appels Assign et Reset/Rewrite pour les fichiers texte, mais ces fichiers sont associés à des noms de fichiers vides et aucune tentative n'est faite pour ouvrir les fichiers (ils sont censés être déjà ouverts).
<TODO>
InitSystemThreads
<TODO>
SetThreadManager
<TODO>
InitHeapMutexes
<TODO>
InitVariantManager
<TODO>
InitWideStringManager
<TODO>
Sysinit unit and indirect entry information
(note: c'est actuellement en état de démarrage et s'applique seulement à la cible i386-win32)
Supporter les paquets d'exécution nécessite de pouvoir relier l'unité System et le programme principal en différents modules exécutables. Par conséquent, l'information globale générée par compilateur, telle que la table d'initialisation de l'unité, ne peut pas être directement référencée à partir de l'unité System. Au lieu de cela, il est référencé à partir d'une petite unité distincte ('sysinit') et transmis à des routines dans l'unité du système via les arguments de fonction. Le point d'entrée du module est placé dans l'unité sysinit, aussi. Une copie de l'unité de sysinit est liée statiquement dans chaque module exécutable, de sorte que chaque module se termine en contenant la table d'initialisation seulement pour les unités qu'il contient réellement.
Cette information globale n'est pas limitée à la table d'initialisation de l'unité, voir l'enregistrement TEntryInformation pour une liste complète.
Une cible peut avoir plus d'une unité Sysinit, chacune résolvant des tâches d'initialisation spécifiques. Une unité particulière à utiliser est déterminée par le compilateur, voir la méthode InitSysInitUnitName de la classe TLinker. Par exemple, bien qu'utilisant normalement sysinitpas.pp, le compilateur peut utiliser sysinitcyg.pp à la place s'il détecte une liaison avec des bibbliothèques Cygwin.
Spécifique à une plate-forme
Initialisation de l'unité
The following tasks are performed:
- IsLibrary variable initialization (true if running in a shared library, false otherwise)
- ProcessID and ThreadID variables initialization
- IsConsole variable initialization (true if running in a text console, false if running in windowed GUI application)
- ExitProc variable initialization <TODO>
- Heap initialization (calling shared InitHeap)
- Initialization of potential procedural variables and/or parameters needed to support System unit routines requiring different implementation depending on detected version of operating system (possibly including dynamic loading of procedures or functions from shared libraries where appropriate) - see OS aware RTL
- InOutRes variable initialization (set to 0)
- Environment variables initialization (EnvC and EnvP), usually by calling InitEnvironment - only needed for platforms not providing access to these variables natively
- Internal thread manager is initialized by calling InitSystemThreads
- Internal variant manager is initialized by calling InitVariantManager
- Internal widestring manager is initialized by calling InitWideStringManager
InitEnvironment
Only needed for platforms not providing access to EnvC and EnvP variables natively.
Procedure checks amount of environment variables and stores it in EnvC. Then memory for EnvP^ is allocated from heap (array of EnvC + 1 items of type PChar - the list pointer will point to nil). Finally the individual items in the array are initialized with PChars pointing to null terminated strings containing the environment variable name, equal sign and the environment variable value. Memory for the individual null terminated strings may be allocated from heap for these strings and they may be copied there if needed (i.e. if the particular platform doesn't provide pointer to a fixed location for these strings in required format).
InitArguments
Only needed for platforms not providing access to ArgC, ArgV and/or CmdLine variables natively.
<TODO>
SysInitStdIO
Initialisation des variables de fichier standard (Input, Output, ErrOutput, StdOut et StdErr).
<TODO>
InitSystemThreads
<TODO>
Tâches générales
Platform specific
Manipulation de fichier
Habituellement implémenté dans sysfile.inc.
Do_Close
Do_Erase
Do_Rename
Do_Read
Do_Write
Do_FilePos
Do_Seek
Do_SeekEnd
Do_FileSize
Do_Truncate
Do_Open
Do_IsDevice
Gestion du tas
SysOSAlloc
SysOSFree
Support du Threading
SysInitThreadVar
SysRelocateThreadVar
Autre
System_Exit
Routines publiques
Les routines suivantes font partie de l'interface de l'unité System et sont supposées être pleinement implémentées spécifiquement à chaque plate-forme. Leur spécification est disponible dans la documentation de FPC, donc elles sont listées ici principalement dans un souci de complétude pour fournir une liste complète à des fins de portage.
Manipulation de répertoire
Habituellement implémenté dans sysdir.inc.
- MkDir
- RmDir
- ChDir
- GetDir
Autres
- Randomize
- ParamCount, ParamStr (peut-être déplacé dans le commun - <TODO>)
Finalization
Partagés
InternalExit
<TODO>
FinalizeHeap
<TODO>
Platform specific
FinalDeallocation
<TODO>