Kevin KoflerLe 28/02/2008 à 17:27
Le compilateur fait exactement ça avec -ffunction-sections -fdata-sections d'ailleurs (ce qui est mis par défaut pour les nouveaux projets dans TIGCC IDE et KTIGCC).
Pour réordonner les sections, j'avait fait une heuristique compliquée et lente, mais Sebastian a trouvé une solution beaucoup plus simple qui a donné de meilleurs résultats (et plus rapidement): on essaie de mettre les sections les plus référencées au milieu, et on choisit de grandir à gauche ou à droite selon ce qui s'optimise mieux. Un cas particulier: il essaie de mettre une section juste après une autre quand ça permet de faire des reférences en .s voire d'enchaîner directement (jsr+rts -> jmp (optimisation tailcall) -> rien si on peut mettre la destination juste après). Mon ancien algorithme est encore utilisé pour réordonner les sections de démarrage portant le même numéro (les sections de démarrage sont triées par numéro, mais si le numéro est le même, l'ordre n'a aucune importance, donc on peut réordonner si ça permet de créer des références .s), là il y en a très peu à chaque fois, donc la complexité de mon heuristique ne se fait pas remarquer.