Kevin KoflerLe 11/09/2008 à 11:29
_main et _exit sont renommés par un #define dans TIGCCLIB, ce hack fait en sorte que le nom mis par l'utilisateur est affiché.
La raison pour laquelle on renomme ces fonctions est simple: au tout début de TIGCC, ces noms ont été utilisés parce que c'étaient les fonctions attendues par le kernel. En _nostub, il y avait un code de démarrage minimal (juste jmp _main, en gros). Mais ensuite est venu le code de démarrage, et nous avons vite vu que ce code de démarrage est utile/nécessaire aussi pour les programmes kernel. Et du coup il faut que _main soit le début du code de démarrage pour que le kernel fasse la bonne chose. Mais comme tous les programmes existants utilisaient _main, nous ne pouvions pas changer le nom pour des raisons de compatibilité, donc problème... La solution a été de mettre un #define _main __main dans les headers de TIGCCLIB, le vrai _main pour le kernel se situe dans le code de démarrage, le _main utilisateur est renommé en __main par le #define et c'est le code de démarrage qui s'occupe d'appeler __main. Et pour simplifier le code de démarrage, _main est aussi renommé en __main en _nostub (alors que dans ce cas, ce ne serait pas strictement nécessaire).