FR 3046476 A1 20170707 FR 1600022 A 20160106 1 PROCEDE DE CONVERSION DES MECANISMES D'ALLOCATION DYNAMIQUE DE MEMOIRE D'UN CODE SOURCE INITIAL D'UN LOGICIEL L'invention est relative aux logiciels aéronautiques. Pour pouvoir s'adapter à des cas d'utilisation variés, la plupart des logiciels, applications ou systèmes d'exploitation, gèrent dynamiquement l'espace mémoire dont ils ont besoin. Cette approche est largement utilisée dans le domaine grand public. Cependant, elle ne peut pas être utilisée dans le domaine aéronautique, car les contraintes de sureté aéronautique interdisent l'allocation dynamique de mémoire de manière à garantir le déterminisme d'exécution d'un logiciel applicatif aéronautique et, par conséquent, de la fonctionnalité associée. Cette différence dans la manière de gérer la mémoire est l'une des raisons qui conduisent à concevoir les logiciels aéronautiques d'une manière spécifique, différente des autres logiciels, dits logiciels non certifiés dans le présent document. Cette différence de conception n'est pas gênante dans le développement de logiciels aéronautiques, car les applications correspondantes fonctionnent avec des systèmes d'exploitation avioniques spécifiques. Les logiciels aéronautiques sont donc appelés à être exécutés dans des environnements très particuliers par rapport au reste du domaine informatique. Il est donc difficilement envisageable de réutiliser, dans le domaine aéronautique, en particulier pour des fonctions à haut niveau de criticité, des logiciels non certifiés développés pour d'autres domaines d'application. Cependant, ce contexte va évoluer. En effet, les systèmes d'exploitation avioniques se rapprochent peu à peu des systèmes d'exploitation utilisés dans le monde industriel : apparition d'interfaces POSIX certifiées, disponibilité prochaine de version de systèmes d'exploitation Linux certifiés, etc... Par ailleurs, les applications sont de plus en plus performantes et nécessitent par conséquent à ce que les plateformes qui les hébergent le soient également. Cette tendance générale va donc favoriser, dans le domaine aéronautique, la réutilisation ou l'adaptation de logiciels précédemment développés pour d'autres domaines d'application et par conséquent non certifiés. Cependant, l'impossibilité d'allouer dynamiquement la mémoire en fonction des besoins du logiciel, va introduire une difficulté importante pour la réutilisation ou le portage dans le domaine aéronautique de logiciels non certifiés. L'invention a donc pour but de répondre à ce problème. 3046476 2 L'invention a pour objet un procédé de conversion des mécanismes d'allocation dynamique de mémoire d'un code source initial d'un logiciel de manière à obtenir un code source final pour ledit logiciel, qui ne comporte plus de mécanismes d'allocation dynamique de mémoire, caractérisé en ce que, le code source initial comportant des 5 fichiers sources initiaux comportant des appels à des fonctions d'allocation dynamique de mémoire, le procédé de conversion consistant à : - substituer chaque appel à des fonctions d'allocation dynamique de mémoire dans les fichiers source initiaux, par un appel à une fonction de génération de traces équivalente, une fonction de génération de traces réalisant, lorsqu'elle est appelée, la 10 même fonction que la fonction d'allocation dynamique de mémoire qu'elle remplace, tout en renseignant un fichier de traces avec des informations relatives à l'appel de la fonction d'allocation dynamique de mémoire ; - générer un code binaire intermédiaire à partir des fichiers sources modifiés en sortie de l'étape de substitution ; 15 - exécuter le code binaire intermédiaire une pluralité de fois de manière à reproduire un ensemble représentatif des utilisations possibles du logiciel, chaque exécution conduisant à la production d'un fichier de traces ; - réaliser une synthèse des fichiers de traces de manière à générer une table de synthèse des allocations contenant, pour chaque appel d'une fonction d'allocation 20 dynamique de mémoire, la taille maximale des zones mémoire allouées lors dudit appel au cours des différentes exécutions du code binaire intermédiaire ; - allouer une zone mémoire pour chaque entrée de la table de synthèse des allocations et remplacer chaque appel d'une fonction d'allocation dynamique de mémoire dans les fichiers source initiaux par un appel à une fonction d'allocation statique de 25 mémoire dont les paramètres sont instanciés avec les informations relatives à la zone mémoire allouée audit appel, les fichiers source finaux du code source final ainsi obtenu ne comportant que des appels à des fonctions d'allocation statique de mémoire, définie comme étant des fonctions renvoyant une valeur correspondant à une adresse de la zone mémoire allouée statiquement. 30 Suivant des modes particuliers de réalisation, le procédé comporte une ou plusieurs des caractéristiques suivantes, prises isolément ou suivant toutes les combinaisons techniquement possibles : - l'étape de génération d'un code binaire intermédiaire prévoit la fourniture d'un fichier source pour chacune des fonctions de génération de traces. 3046476 3 - le procédé comporte, en outre, une étape d'analyse des fichiers de traces de manière à identifier des cas pour lesquels le remplacement automatique d'un appel à une fonction d'allocation dynamique de mémoire par un appel à une fonction d'allocation statique de mémoire est impossible. 5 - les cas pour lesquels un remplacement est impossible sont constitués par : - dans l'ensemble des fichiers de traces , un même appel à une fonction de réallocation de mémoire, a été effectué avec, en paramètre, un pointeur vers une zone mémoire de valeur nulle et un pointeur vers une zone mémoire de valeur non nulle ; - dans un même fichier de trace deux appels identiques à une fonction d'allocation de 10 mémoire ou à une fonction d'allocation et d'initialisation de mémoire ont été effectués sans que la première allocation n'ait été libérée à l'aide de la fonction de libération de mémoire avant la seconde allocation. le procédé comporte une étape consistant à compiler le code source final de manière à obtenir un code binaire cible , propre à être téléchargé en vue de son 15 exécution sur une plateforme cible du type avionique, ne présentant pas de capacité d'allocation dynamique de mémoire. les fichiers sources initiaux sont écrits en langage C, les fonctions d'allocation dynamique de mémoire étant constituées par les fonctions suivantes : - fonction malloc, d'allocation d'une zone mémoire ; 20 - fonction free, de libération d'une zone mémoire précédemment allouée ; - fonction calloc, d'allocation et d'initialisation d'une zone mémoire ; - fonction realloc, d'allocation d'une zone mémoire ou de modification de la taille d'une zone mémoire précédemment allouée. le code source final comporte, en plus des fichiers source finaux , un 25 premier fichier source d'allocation statique comportant : - la définition statique d'une zone mémoire pour chaque entrée de la table de synthèse des allocations ; - la définition d'une fonction d'allocation statique, qui reçoit une adresse de zone mémoire en tant que paramètre et, lorsqu'elle est appelée, retourne ladite adresse de zone 30 mémoire ; - la définition d'une fonction d'allocation et d'initialisation, qui reçoit une adresse de zone mémoire et une taille de zone mémoire en tant que paramètre et, lorsqu'elle est appelée initialise la zone mémoire et retourne ladite adresse de zone mémoire ; et un second fichier d'allocation statique comportant la déclaration des zones mémoire et 35 des fonctions définies dans le premier fichier. 3046476 4 l'étape de remplacement des appels aux fonctions d'allocation dynamique de mémoire par des appels à des fonctions d'allocation statique de mémoire consiste à ajouter les premier et second fichiers d'allocation statique, à supprimer les appels à la fonction free, à remplacer les appels à la fonction malloc, respectivement calloc et realloc, 5 par des appels à la fonction malloc_static, respectivement calloc_static et realloc_static, l'adresse et éventuellement la taille de la zone mémoire allouée à un appel étant passée en tant que paramètre de la fonction d'allocation statique de mémoire de remplacement correspondant audit appel. un fichier de trace comporte les informations suivantes, pour chaque appel 10 à une fonction de génération de traces : -nom du fichier source initial ; - position de l'appel à la fonction de génération de traces dans le fichier source initial ; - nom de la fonction appelée parmi malloc, calloc, realloc et free ; - adresse du premier octet de la zone mémoire passée en paramètre de la fonction 15 realloc ou free ; -adresse du la zone mémoire allouée par les fonctions malloc, calloc ou realloc ; - taille de la zone mémoire allouée par les fonctions malloc, calloc ou realloc. L'invention a également pour objet support de données, caractérisé en ce qu'il comporte des instructions qui, lorsqu'elles sont exécutées par un ordinateur , conduisent 20 à la mise en oeuvre d'un procédé de conversion conforme au procédé précédent. L'invention et ses avantages seront mieux compris à la lecture de la description détaillée qui va suivre d'un mode de réalisation particulier donné uniquement à titre d'exemple non limitatif. Cette description est faite en se référant aux dessins annexés sur lesquels : 25 - la figure 1 est une représentation sous forme de blocs du principe général du procédé de conversion selon l'invention ; et, - la figure 2 est une représentation sous forme de blocs de l'étape de conversion du procédé de la figure 1. Le procédé de conversion selon l'invention permet de convertir automatiquement 30 les mécanismes d'allocation dynamique de mémoire présents dans un logiciel non certifié que l'on souhaite porter dans le domaine aéronautique. Les mécanismes d'allocation dynamique de mémoire sont remplacés par des mécanismes d'allocation statique de mémoire dans le logiciel certifiable obtenu à l'issue de la mise en oeuvre du procédé de conversion. 3046476 5 En se référant à la figure 1, le logiciel non certifié est décrit dans un code source initial 10 comportant un ensemble de fichiers source initiaux. Les fichiers source initiaux comportent des appels à des fonctions d'allocation dynamique de mémoire. Une étape de conversion 20 est appliquée sur le code source initial 10 de manière 5 à obtenir un code source final 30. Le code source final 30 comporte un ensemble de fichiers sources finaux, chaque fichier source final étant similaire à l'un des fichiers source initiaux, à l'exception du fait que tout appel à une fonction d'allocation dynamique de mémoire a été remplacé par un appel à une fonction équivalente d'allocation statique de mémoire. Une telle fonction d'allocation statique de mémoire ne fait que renvoyer 10 l'adresse de la zone mémoire allouée statiquement au processus correspondant. Le code source final 30 comporte ainsi des fichiers supplémentaires d'allocation statique de mémoire, qui sont utilisés lors de l'initialisation du logiciel sur la plateforme cible afin d'associer une adresse de zone mémoire et une taille de zone mémoire à chaque processus. 15 Puis, à l'étape 40, le code source final 30 est compilé de manière à obtenir un code binaire cible 50. Les étapes de conversion et de compilation sont réalisées sur une plateforme informatique de génération 100, qui exécute notamment un système d'exploitation 110 classique du type permettant les allocations dynamiques de mémoire. 20 Le code binaire cible 50 est finalement téléchargé sur une plateforme cible 200. Celle-ci exécute notamment un système d'exploitation 210 dit critique qui ne comporte pas de capacité d'allocation dynamique de mémoire. L'allocation de la mémoire est faite de manière statique lors de l'initialisation du logiciel précédent son exécution. Les adresses de zone mémoire et les tailles de zone 25 mémoire sont allouées aux processus. Le code binaire cible 50 est exécuté par la plateforme cible 200 de manière à fournir la fonctionnalité souhaitée. Lors de l'appel d'une fonction d'allocation statique de mémoire, l'adresse de la zone mémoire allouée à l'initialisation est retournée. On comprend donc que l'étape de conversion 20 permet de faciliter grandement 30 l'adaptation pour le domaine aéronautique d'un logiciel existant, mais ayant été écrit pour un autre domaine d'application, dans lequel l'allocation dynamique de mémoire est autorisée. La figure 2 représente les étapes mises en oeuvre lors de l'exécution de l'étape de 35 conversion 20. Le mode de réalisation représenté sur la figure 2 est adapté à un code source initial 10 écrit en langage C. Le code source final 30 est également écrit en 3046476 6 langage C. L'étape de compilation 40 met par conséquence en oeuvre un compilateur adapté au langage C. Pour mémoire, la bibliothèque standard du langage C définit quatre fonctions d'allocation dynamique de mémoire. 5 La fonction malloc permet d'allouer dynamiquement une zone mémoire pour un processus. Le seul paramètre à passer à cette fonction est le nombre d'octets de la zone mémoire à allouer. La valeur retournée est l'adresse du premier octet de la zone mémoire allouée. Si l'allocation n'a pas pu être réalisée (par un manque de mémoire libre par exemple), la valeur retournée est la valeur NULL. 10 La fonction free permet de libérer une zone mémoire précédemment allouée. Le seul paramètre à passer à la fonction free est l'adresse du premier octet de la zone mémoire allouée et aucune valeur n'est retournée une fois cette fonction réalisée. Une zone mémoire allouée par la fonction malloc n'est pas initialisée automatiquement. Cette initialisation peut par exemple être réalisée ultérieurement à 15 l'aide de la fonction memset. La fonction calloc permet de réaliser en une seule étape une allocation et une initialisation d'une zone mémoire. Celle-ci est initialisée avec des zéros. Cette fonction prend comme premier paramètre, le nombre d'éléments à réserver et comme second paramètre, la taille en octets d'un élément. La valeur retournée est la même que pour la 20 fonction malloc. Enfin, la fonction realloc permet de modifier la taille de la mémoire précédemment allouée en utilisant la fonction malloc. Cette fonction prend comme premier paramètre, l'adresse du premier octet de la zone mémoire dont on désire modifier la taille et comme second paramètre, la nouvelle taille en octet de la zone mémoire. Il est également 25 possible d'appeler la fonction realloc avec la valeur NULL comme premier paramètre, auquel cas la fonction realloc est fonctionnellement équivalente à la fonction malloc. Le code source initial 10 regroupe l'ensemble des fichiers source initiaux 9 du logiciel non certifié à convertir. 30 L'étape de conversion proprement dite débute par une étape 21 d'insertion de commandes de génération de traces. Dans cette étape 21, les fichiers sources initiaux 9 sont convertis en remplaçant chaque appel à la fonction malloc, respectivement calloc, realloc et free, par un appel à des fonctions malloc_trace, respectivement calloc_trace, realloc_trace et free_trace. 3046476 7 Les fonctions de génération de traces (malloc trace, free_trace, calloc trace et realloc trace) sont des fonctions nouvellement introduites pour les besoins du présent procédé de conversion. Une fonction de génération de trace reprend la syntaxe de la fonction d'allocation 5 dynamique de mémoire correspondante, augmentée de deux paramètres : le nom du fichier source initial où se trouve cet appel à une fonction d'allocation dynamique de mémoire ; et la position de l'appel à cette fonction dans ce fichier source initial (c'est-à-dire la position où se trouve cet appel dans le fichier source initial, exprimée en nombre d'octets par rapport au début du fichier). 10 L'étape 20 conduit à la génération d'un code source intermédiaire 11. Puis, l'étape 22 est exécutée. Cette étape consiste à générer un code binaire intermédiaire 13 par compilation du code source intermédiaire 11 et des fichiers sources des fonctions de génération de traces, qui sont disponibles dans une bibliothèque enrichie 15 par rapport à la bibliothèque standard du langage C. Plus précisément, l'exécution de chaque fonction de génération de traces fait appel à la fonction d'allocation dynamique de mémoire qu'elle remplace, tout en renseignant un fichier de traces avec les informations suivantes : nom du fichier source initial ; 20 position de l'appel à la fonction dans ce fichier source initial ; nom de la fonction appelée (malloc, calloc, realloc ou free) ; adresse du premier octet de la zone mémoire passée en paramètre de la fonction realloc ou free ; adresse de la zone mémoire allouée par les fonctions malloc, calloc ou 25 realloc ; taille de la zone mémoire allouée par les fonctions malloc, calloc ou realloc. L'étape de conversion 20 se poursuit par l'exécution de l'étape 23, consistant à exécuter le code binaire intermédiaire 13. Le code 13 est en fait exécuté autant de fois 30 que nécessaire afin de pouvoir être représentatif de tous les cas d'utilisation possible du logiciel cible. A chaque exécution i du code binaire intermédiaire 13 un fichier de traces 14.i est généré. Sur la figure 2, le code binaire intermédiaire 13 ayant été exécuté N fois, N fichiers de traces 14.i sont produits. Le fichier de traces 14.i regroupe ainsi les 35 informations listées ci-dessus pour chaque appel d'une fonction de génération de traces au cours de la ième exécution du code binaire intermédiaire 13 sur la plateforme 100. 3046476 8 A l'étape suivante 24, les allocations dynamiques de mémoire non convertibles sont détectées. Plus précisément, tous les fichiers de traces 14.1 à 14.N sont parcourus 5 automatiquement afin de détecter la survenue de l'un des deux cas suivants, qui constituent des exceptions à la possibilité de remplacer des mécanismes d'allocation dynamique de mémoire par des mécanismes d'allocation statiques de mémoire : - dans l'ensemble des fichiers de trace, un même appel à la fonction realloc (même fichier source et même position dans ce fichier source) a été effectué une fois 10 avec une adresse de valeur nulle et une autre fois avec une adresse de valeur non nulle ; - dans un même fichier de trace 14.i, deux appels identiques à la fonction malloc ou à la fonction calloc (même fichier source et même position dans ce fichier source) ont été effectués sans que la première allocation n'ait été libérée à l'aide de la fonction free entre les deux appels. 15 Si, au cours de l'étape 24 un tel cas est identifié, un message d'erreur est affiché pour demander à l'opérateur de modifier le fichier source initial identifié comme comportant un mécanisme d'allocation mémoire non convertible. Le procédé de conversion s'achève alors. 20 Si aucun cas exceptionnel n'est détecté à l'étape 24, l'étape 25 de synthèse des fichiers de traces est réalisée. Chacun des fichiers de traces 14.i est analysé afin de supprimer les lignes relatives à la fonction realloc de la manière suivante : - si l'adresse passée en paramètre de la fonction realloc est nulle, alors la ligne est 25 remplacée, dans le fichier 14.i par une ligne correspondant à la fonction malloc ; - Sinon, la ligne de la fonction realloc est supprimée et la ligne de la fonction malloc ou calloc ayant allouée la zone mémoire redimensionnée par la fonction realloc supprimée est modifiée avec une nouvelle taille de zone mémoire, si celle-ci a augmentée, et éventuellement une nouvelle adresse d'une zone mémoire. 30 Dans cette étape 25, les lignes des fichiers de traces 14.i relatives à la fonction free sont également supprimées. L'ensemble des fichiers de traces 14.i ainsi nettoyés des fonctions realloc et free est ensuite analysé pour construire une table de synthèse des allocations 15. La table 15 contient, pour chaque appel d'une fonction d'allocation dynamique de 35 mémoire malloc ou calloc (même fichier source et même position dans ce fichier source), 3046476 9 la taille maximale de la zone mémoire allouée au cours des i exécutions du code binaire intermédiaire 13. Enfin, l'étape de conversion met en oeuvre l'étape 26 de remplacement des 5 fonctions d'allocation dynamique de mémoire dans le code source initial 10 en utilisant la table de synthèse des allocations 15 et de nouvelles fonctions d'allocation statique de mémoire. L'étape 26 conduit à la génération du code source final 30. Le code source final 30 comporte un premier fichier d'allocation statique 32 dénommé alloc_static.c. Le fichier alloc_static.c contient : 10 - la définition statique d'une zone mémoire pour chaque entrée de la table de synthèse des allocations 15 ; - la définition des fonctions d'allocation statique de mémoire, malloc_static et realloc_static, qui prennent comme paramètre une adresse d'une zone mémoire et se contente de retourner cette adresse comme valeur. 15 - la définition de la fonction d'allocation statique de mémoire calloc_static, qui prend en paramètre une adresse et une taille de zone mémoire. Cette fonction initialise à zéro la zone mémoire correspondante et retourne l'adresse de cette zone mémoire. Le code source final 30 comporte également un second fichier de déclaration d'allocation statique 33, dénommé alloc_static.h. Il contient la déclaration des zones 20 mémoire et fonctions définies dans le fichier alloc_static.c. Enfin, le code source final 30 comporte des fichiers source finaux 31. Chaque fichier 31 correspond à un fichier source initial 9 du code source initial 10, dans lequel chaque appel à une fonction d'allocation dynamique de mémoire parmi malloc, calloc et alloc a été remplacé par un appel à une fonction correspondante d'allocation statique de 25 mémoire (malloc_static, calloc_static et realloc_static), dont les paramètres sont instanciés avec l'adresse et éventuellement la taille de la zone mémoire définie dans le fichier alloc_static.c pour cette entrée de la table de synthèse des allocations 15. Par ailleurs, tout appel à la fonction d'allocation dynamique de mémoire free est supprimé. 30 Le code source final 30 ainsi obtenu est un code source en langage C. Il est compilé au cours de l'étape 40 de manière à obtenir le code binaire cible 50. Une fois le code binaire cible 50 téléchargé sur la plate-forme cible 200, l'initialisation du code binaire cible 50 conduit à allouer des zones mémoire fixes 35 conformément au fichier alloc_static.c. 3046476 10 Le code binaire cible 50 est ensuite exécuté. Lors de l'appel à une fonction malloc, calloc et realloc statique, celle-ci renvoie simplement l'adresse de la zone mémoire qui lui a été affectée statiquement. L'allocation de mémoire, effectuée lors de l'initialisation du logiciel, est faite pour 5 toute la durée de l'exécution de ce logiciel. Le procédé venant d'être décrit facilite donc la conversion d'un logiciel initialement développé pour un domaine autre que le domaine aéronautique. Ce procédé permet de garantir que le logiciel converti respectera la contrainte de certification consistant à ne pas 10 utiliser de mécanismes d'allocation dynamique de mémoire. Il est à noter que l'étape 23 de compilation est lancée par un opérateur de la plateforme de génération 100. Les étapes 21 et 22 sont réalisées automatiquement par un premier logiciel de conversion et les étapes 24, 25 et 26 par un second logiciel de conversion. 15 Ces logiciels de conversion correspondent à des instructions stockées dans une mémoire d'un ordinateur, tel que la plateforme de génération 100, et propres à être exécutées par un processeur dudit ordinateur. 20 REVENDICATIONS1.- Procédé de conversion des mécanismes d'allocation dynamique de mémoire d'un code source initial (10) d'un logiciel de manière à obtenir un code source final (30) pour ledit logiciel, qui ne comporte plus de mécanismes d'allocation dynamique de mémoire, caractérisé en ce que, le code source initial comportant des fichiers sources initiaux (9) comportant des appels à des fonctions d'allocation dynamique de mémoire, le procédé de conversion consistant à : - substituer (21) chaque appel à des fonctions d'allocation dynamique de mémoire dans les fichiers source initiaux, par un appel à une fonction de génération de traces équivalente, une fonction de génération de traces réalisant, lorsqu'elle est appelée, la même fonction que la fonction d'allocation dynamique de mémoire qu'elle remplace, tout en renseignant un fichier de traces (14.i) avec des informations relatives à l'appel de la fonction d'allocation dynamique de mémoire ; - générer (22) un code binaire intermédiaire (13) à partir des fichiers sources modifiés en sortie de l'étape de substitution ; - exécuter (23) le code binaire intermédiaire (13) une pluralité de fois de manière à reproduire un ensemble représentatif des utilisations possibles du logiciel, chaque exécution conduisant à la production d'un fichier de traces (14.i) ; - réaliser une synthèse (25) des fichiers de traces de manière à générer une table de synthèse des allocations (15) contenant, pour chaque appel d'une fonction d'allocation dynamique de mémoire, la taille maximale des zones mémoire allouées lors dudit appel au cours des différentes exécutions du code binaire intermédiaire ; - allouer une zone mémoire pour chaque entrée de la table de synthèse des allocations (15) et remplacer chaque appel d'une fonction d'allocation dynamique de mémoire dans les fichiers source initiaux (9) par un appel à une fonction d'allocation statique de mémoire dont les paramètres sont instanciés avec les informations relatives à la zone mémoire allouée audit appel, les fichiers source finaux (31) du code source final (30) ainsi obtenu ne comportant que des appels à des fonctions d'allocation statique de mémoire, définie comme étant des fonctions renvoyant une valeur correspondant à une adresse de la zone mémoire allouée statiquement. 2.- Procédé selon la revendication 1, dans lequel l'étape (22) de génération d'un code binaire intermédiaire (13) prévoit la fourniture d'un fichier source (12) pour chacune des fonctions de génération de traces. 3046476 12 3.- Procédé selon la revendication 1 ou la revendication 2, comportant, en outre, une étape (24) d'analyse des fichiers de traces (14.i) de manière à identifier des cas pour lesquels le remplacement automatique d'un appel à une fonction d'allocation dynamique de mémoire par un appel à une fonction d'allocation statique de mémoire est 5 impossible. 4.- Procédé selon la revendication 3, dans lequel les cas pour lesquels un remplacement est impossible sont constitués par : - dans l'ensemble des fichiers de traces (14.i), un même appel à une fonction de 10 réallocation de mémoire, a été effectué avec, en paramètre, un pointeur vers une zone mémoire de valeur nulle et un pointeur vers une zone mémoire de valeur non nulle ; - dans un même fichier de trace (14.i), deux appels identiques à une fonction d'allocation de mémoire ou à une fonction d'allocation et d'initialisation de mémoire ont été effectués sans que la première allocation n'ait été libérée à l'aide de la fonction de 15 libération de mémoire avant la seconde allocation. 5.- Procédé selon l'une quelconque des revendications précédentes, caractérisé en ce qu'il comporte une étape (40) consistant à compiler le code source final (30) de manière à obtenir un code binaire cible (50), propre à être téléchargé en vue de 20 son exécution sur une plateforme cible (200) du type avionique, ne présentant pas de capacité d'allocation dynamique de mémoire. 6.- Procédé selon l'une quelconque des revendications précédentes, dans lequel les fichiers sources initiaux (9) sont écrits en langage C, les fonctions d'allocation 25 dynamique de mémoire étant constituées par les fonctions suivantes : - fonction malloc, d'allocation d'une zone mémoire ; - fonction free, de libération d'une zone mémoire précédemment allouée ; - fonction calloc, d'allocation et d'initialisation d'une zone mémoire ; - fonction realloc, d'allocation d'une zone mémoire ou de modification de la taille 30 d'une zone mémoire précédemment allouée. 7.- Procédé selon la revendication 6, dans lequel le code source final (30) comporte, en plus des fichiers source finaux (31), un premier fichier source d'allocation statique (32) comportant : 35 - la définition statique d'une zone mémoire pour chaque entrée de la table de synthèse des allocations ; 3046476 13 - la définition d'une fonction d'allocation statique, qui reçoit une adresse de zone mémoire en tant que paramètre et, lorsqu'elle est appelée, retourne ladite adresse de zone mémoire ; - la définition d'une fonction d'allocation et d'initialisation, qui reçoit une adresse de 5 zone mémoire et une taille de zone mémoire en tant que paramètre et, lorsqu'elle est appelée initialise la zone mémoire et retourne ladite adresse de zone mémoire ; et un second fichier d'allocation statique (33) comportant la déclaration des zones mémoire et des fonctions définies dans le premier fichier. 10 8.- Procédé selon la revendication 7, dans lequel l'étape de remplacement des appels aux fonctions d'allocation dynamique de mémoire par des appels à des fonctions d'allocation statique de mémoire consiste à ajouter les premier et second fichiers d'allocation statique, à supprimer les appels à la fonction free, à remplacer les appels à la fonction malloc, respectivement calloc et realloc, par des appels à la fonction 15 malloc_static, respectivement calloc_static et realloc_static, l'adresse et éventuellement la taille de la zone mémoire allouée à un appel étant passée en tant que paramètre de la fonction d'allocation statique de mémoire de remplacement correspondant audit appel. 9.- Procédé selon l'une quelconque des revendications 6 à 8, dans lequel un 20 fichier de trace (14.i) comporte les informations suivantes, pour chaque appel à une fonction de génération de traces : nom du fichier source initial ; position de l'appel à la fonction de génération de traces dans le fichier source initial ; 25 nom de la fonction appelée parmi malloc, calloc, realloc et free ; adresse du premier octet de la zone mémoire passée en paramètre de la fonction realloc ou free ; adresse du la zone mémoire allouée par les fonctions malloc, calloc ou realloc ; 30 taille de la zone mémoire allouée par les fonctions malloc, calloc ou realloc. 10.- Support de données, caractérisé en ce qu'il comporte des instructions qui, lorsqu'elles sont exécutées par un ordinateur (100), conduisent à la mise en oeuvre d'un procédé de conversion conforme à l'une quelconque des revendications 1 à 9. 35