summaryrefslogtreecommitdiff
path: root/lib/linker.c
diff options
context:
space:
mode:
Diffstat (limited to 'lib/linker.c')
-rw-r--r--lib/linker.c20
1 files changed, 20 insertions, 0 deletions
diff --git a/lib/linker.c b/lib/linker.c
index 5fe1162..f28bc0f 100644
--- a/lib/linker.c
+++ b/lib/linker.c
@@ -10,6 +10,8 @@
#include "exceptions.h"
#include "hash.h"
+/* Les quelques structures de données utiles */
+
typedef struct object_t {
Uint32 s_text, s_data, s_bss, * text, * data, textstart, datastart, bssstart;
} object_t;
@@ -22,6 +24,8 @@ typedef struct symbol_t {
struct symbol_t * next;
} symbol_t;
+/* Et les variables globales */
+
Uint32 startpoint = -1, textsize = 0, datasize = 0, bsssize = 0;
object_t ** objects;
@@ -30,6 +34,8 @@ int objindex = 0, nbrsymbs = 0;
_TableauVariable symbs;
+/* Quelques fonctions pour nous simplifier la vie... */
+
static FILE * openfilewriting(char * name) {
FILE * f;
@@ -82,6 +88,8 @@ static char * readstring(FILE * f) {
return r;
}
+/* Rajoute un symbole dans la pile */
+
static void addsymbol(char * name, int offset, int type) {
symbol_t * newsymbol;
@@ -102,6 +110,8 @@ static void addsymbol(char * name, int offset, int type) {
}
}
+/* Rajoute un fichier dans les structures */
+
void addfile(char * nom) {
FILE * f;
Uint32 start, nbsymbols, type, offset;
@@ -164,6 +174,8 @@ void addfile(char * nom) {
popcontext();
}
+/* Simplification de vie... */
+
static void dumptab(Uint32 * tab, int s, FILE * f) {
int i;
@@ -172,6 +184,8 @@ static void dumptab(Uint32 * tab, int s, FILE * f) {
}
}
+/* Nous dumpons la mémoire dans le fichier */
+
static void dumptext(object_t * obj, FILE * f) {
dumptab(obj->text, obj->s_text, f);
}
@@ -180,6 +194,8 @@ static void dumpdata(object_t * obj, FILE * f) {
dumptab(obj->data, obj->s_data, f);
}
+/* Cette fonction va calculer les quelques relogements statiques et dynamiques que nous a laissé l'assembleur */
+
static void dumprelog(FILE * f) {
symbol_t * s = symbols, * t;
char trouve, err[BUFSIZ];
@@ -234,6 +250,8 @@ static void dumprelog(FILE * f) {
}
}
+/* Cette fonction sert à écrire le fichier de sortie. */
+
void dumpfile(char * nom) {
FILE * f;
int i;
@@ -273,6 +291,8 @@ void dumpfile(char * nom) {
fclose(f);
}
+/* Fonctions d'initialisations et de libération de mémoire */
+
void init(int n) {
int i;