1

Qu'est-ce que ca veut dire ?
Je développe une lib, et au moment de lancer un prgm pour tester la lib, il me sort "Corrupted program".
J'ai cherché dans la doc de PreOS, y'a rien ! tongue

2

3

c'est preos : ca s'affiche dans la status bar, de la même manière qu'un "crash intercept"
ma lib ? elle s'appelle hiblib grin

4

5

Je viens de vérifier en éditant en hex la lib et le programme, y'a pas corrupted program.
D'ailleurs, en éditant la lib, j'ai vu qu'il y avait près de 8k de 0x00 ....... hum pour une lib de 32ko...
oui, je sais, je serais peut-être interessé, mais comme j'ai pas compris comment ca fonctionnait, j'attend la doc ^^

6

7

> D'ailleurs, en éditant la lib, j'ai vu qu'il y avait près de 8k de 0x00 ....... hum pour une lib de 32ko...
Cela semble typique de choses qui devraient être allouées.
avatar
Membre de la TI-Chess Team.
Co-mainteneur de GCC4TI (documentation en ligne de GCC4TI), TIEmu et TILP.
Co-admin de TI-Planet.

8

9

#7: pas foireux, mais mal utilisé.
C'est ce qui fait que CC est amélioré par les BSS, dont il utilise une quantité énorme, ce qui veut dire qu'il est écrit avec les pieds.
CC est un des rares tels programmes, et il est facile à comprendre pourquoi la majorité des programmes sont moins optimisés (taille et vitesse) avec des BSS: BSS = références xxx.l relogées à un bloc de mémoire ailleurs; BSS mergé avec section data = références dans la plupart des cas d(pc) - non relogées. Partant, il faut énormément (même TI-Chess n'est pas amélioré par l'utilisation de BSS, pourtant les siens sont bien plus gros que ceux de la grande majorité des programmes) de BSS pour que ça soit bénéfique en taille, comparé à l'initialisation à 0 et la place prise de façon permanente...
avatar
Membre de la TI-Chess Team.
Co-mainteneur de GCC4TI (documentation en ligne de GCC4TI), TIEmu et TILP.
Co-admin de TI-Planet.

10


Je développe une lib, et au moment de lancer un prgm pour tester la lib, il me sort "Corrupted program".

Ben ca veut dire que PreOS a detecte que ton programme et/ou librarie est corrompue et refuse de le lancer.
Peux-tu detailler exactement ce que tu fais ?

11

Martial Demolins :
ah... tu as édité la lib en cours d'utilisation? (éventuellement une section BSS initialisée)
non, je l'ai édité sur mon PC
sinon... c'est étrange... tu compiles avec quoi? C'est une lib dynamique je suppose
lib dynamique oui, kernel donc.
tprbuilder hibtest.tpr
tprbuilder: tigcc test.c testutils.c testlayout.c testreader.c testparse.c testother.c 
testmenu.c testload.c testfont.c testdraw.c testmenuVAT.c testmkhtxt.c hibliba.a  -o 
"hibtest" -n hibtest -Os -Wall -W -Wwrite-strings -ffunction-sections -fdata-sections 
-mno-bss -WA,-g,-t --optimize-nops --optimize-returns --optimize-branches 
--optimize-moves --optimize-tests --optimize-calcs --remove-unused --cut-ranges 
--reorder-sections --merge-constants -DUSE_TI89 -DUSE_TI92PLUS -DUSE_V200 
-DMIN_AMS=100 -DKERNEL_FORMAT_BSS -DKERNEL_FORMAT_DATA_VAR 
-DSAVE_SCREEN
Lionel Debroux :
> D'ailleurs, en éditant la lib, j'ai vu qu'il y avait près de 8k de 0x00 ....... hum.gif pour une lib de 32ko... Cela semble typique de choses qui devraient être allouées.
Je suis persuadé de ne pas avoir de donnée de 8ko en statique... je vais vérifier mais ca m'étonnerait que j'ai fait une erreur pareille.
Lionel Debroux :
#7: pas foireux, mais mal utilisé.
C'est ce qui fait que CC est amélioré par les BSS, dont il utilise une quantité énorme, ce qui veut dire qu'il est écrit avec les pieds. CC est un des rares tels programmes, et il est facile à comprendre pourquoi la majorité des programmes sont moins optimisés (taille et vitesse) avec des BSS: BSS = références xxx.l relogées à un bloc de mémoire ailleurs; BSS mergé avec section data = références dans la plupart des cas d(pc) - non relogées. Partant, il faut énormément (même TI-Chess n'est pas amélioré par l'utilisation de BSS, pourtant les siens sont bien plus gros que ceux de la grande majorité des programmes) de BSS pour que ça soit bénéfique en taille, comparé à l'initialisation à 0 et la place prise de façon permanente...
mais en fait, c'est quoi BSS ?
moi je ne connais que trois types d'espace : la pile (variables locales), le tas (malloc) et dans le programme (variables statiques).

12

13

PpHd
:

Je développe une lib, et au moment de lancer un prgm pour tester la lib, il me sort "Corrupted program".
Ben ca veut dire que PreOS a detecte que ton programme et/ou librarie est corrompue et refuse de le lancer.
mais ca veut dire quoi "corrompue" ? intuitivement pour moi ce serait un mauvais checksum.... mais je doute que ce soit ca.
Peux-tu detailler exactement ce que tu fais ?
je compile ma lib dynamique, je compile ma lib statique, je compile mon programme de test : tout est OK. Je mets tout ca sur tiemu (là j'ai AMS 2.05 HW1, tiemu 2.00 RC6), dessus j'ai preos 1.0.2 fraichement installé. Je lance mon programme, l'écran se rafraichi, et y'a "hibtest Done", et en bas "corrupted program".
voila ma fonction principale pour faire mes tests :
void _main(void)
{
	
	testMemIni=HeapAvail();
	FontSetSys(F_4x6);
	clrscr();
  graphlib_choosescreen=1;

  testparse();
//  testlayout();
//  testdraw();
//  testreader();
//  testmenuVAT();
//  testmkhtxt();

  clrscr();
	testPrintMem("fin");
	GKeyFlush();
	ngetchx();

}
cette version fait le "corrupted program".
Si je veux tester autre chose, je mets en commentaire testparse et je décommente un autre fonction, pas de pb.

14

Martial Demolins :
t'es sûr alors que c'est pas le header de ton fichier PC qui veut ça? trifus
ben non, puisque la taille du fichier sur PC et la taille sur la Ti est pratiquement la même

15


mais en fait, c'est quoi BSS ?
moi je ne connais que trois types d'espace : la pile (variables locales), le tas (malloc) et dans le programme (variables statiques).

Lorsque tu ecris.
char toto[1200];
toto sera alloue dans le tas, dans un handle cree pour recevoir l'ensemble de tes variables.
C'est le BSS.

16


mais ca veut dire quoi "corrompue" ? intuitivement pour moi ce serait un mauvais checksum.... mais je doute que ce soit ca.

Un offset de relogement qui se trouve hors des limites du programme par exemple.
Un extraram table non-alignee, quoi d'autres ?

je compile ma lib dynamique, je compile ma lib statique, je compile mon programme de test : tout est OK. Je mets tout ca sur tiemu (là j'ai AMS 2.05 HW1, tiemu 2.00 RC6), dessus j'ai preos 1.0.2 fraichement installé. Je lance mon programme, l'écran se rafraichi, et y'a "hibtest Done", et en bas "corrupted program".
voila ma fonction principale pour faire mes tests :

Peut-etre est-ce tigcc qui est buggee ?
Envoie moi les binaires et les sources.

17

Finalement, au vu de ce qu'hibou m'a envoye, il semblerait que ca soit tigcc le coupable. Comme je ne peux pas faire suivre a Kevin (close de confidentialite), j'attend qu'hibou le fasse.

18

Au passage, un simple
void _main(void) 
{  
}

fait apparaitre le bug.

19

20

Je ne sais pas trop, mais il y a d'autres fichier .o pour faire apparaitre le bug. Mais le bug apparait avec un _main vide smile

21

22

Il apparait aussi avec un main non vide. Je soupconne une optimisation du linkeur qui corromp le programme.

23

24

en fait, les options que j'ai datent des options par défaut de l'IDE windows. Etant donné que j'en connais pas la moitié, je les ai laissé...

PpHd>le _main vide, c'est le _main de mon projet, ou juste un projet avec juste un _main vide ?

25

Le _main de ton projet. Cf mon mail.