Brevet FR3046476A1 (20170707)
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 à\n<CLM>\1\t35