img
@_ö
(18:00)  Bienvenue ! - Inscrivez vous pour poster ! -
@Boo + 10 inconnu(s)

Login :  Mot de passe :      Se souvenir de moi.  Mot de passe perdu ?
/!\:: Cliquez ici pour vous inscrire et poster, créer des sujets ou des forums ! ::/!\
 « - 1/3 - Suivant » :: Pages
 Index » Forum Ti 89, Titanium / 92+ / Voyage 200 et TI-Nspire » Prog C TI (74r) » Test case qui renvoie "Corrupted program"
./Post de départ - Test case qui renvoie "Corrupted program"
18.06.2001 - 25145
00:39  Folco - Posté : 30-12-2009  M

yop,

Sous AMS 2.09, le dernier PreOS, un programme compilé avec la denière version de GCC4TI :
build : 
 
tigcc -v -O2 -Wall -W --cut-ranges --optimize-code --remove-unused --optimize-relocs --merge-constants --reorder-section \ 
  truc.c   \ 
  machin.c   \ 
  -o bidule 2>> log

truc.c 
 
#include  "kernel.h" 
#include  "funcs.h" 
 
void main(void) 
{ 
  clrscr(); 
  ESI ArgPtr = top_estack; 
 
  if (*ArgPtr == END_TAG) 
  { 
    CommandHelp(); 
    return; 
  } 
}

machin.c 
 
#include "kernel.h" 
#include "funcs.h" 
void CommandHelp(void) 
{ 
  printf("abc"); 
  ngetchx(); 
}


Dans ce cas là, tout marche bien.
Maintenant, si je rajoute "const char* HelpText" dans machin.c, j'ai un Corrupted program au runtime. Le binaire fait 4 octets de plus, et je ne sais pas ce qui merde.

Mon but étant de passer évidemment HelpText à printf et non "abc", c'est mal emmanché pour le moment. :(

Une idée ?


<<< Kernel Extremist©®™ >>> WIP : r6 - 2014-03-08

Les ministres ne sont que des commis chargés d'exécuter les ordres des grands banquiers, des pantins dont la Haute Banque tire les ficelles. Alexandre Millerand, président du conseil des ministres...

Un des bienfaits de la Révolution est d'avoir livré la France aux hommes d'argent qui, depuis cent ans, la dévorent. Anatole France
./Publicité AdSense
./1
30.06.2001 - 35526
00:42  @Ximoon - Posté : 30-12-2009  M

Tu peux mettre la source que ça donne après la modification qui casse tout ?


Que cache le pays des Dieux ? - Ximoon's Box - Forum Ghibli - Forum Littéraire

La fin d'un monde souillé est venue. L'oiseau blanc plane dans le ciel annonçant le début d'une longue ère de purification. Détachons-nous à jamais de notre vie dans ce monde de souffrance. Ô toi l'oiseau blanc, l'être vêtu de bleu, guide nous vers ce monde de pureté. - Sutra originel dork.
./2
18.06.2001 - 25145
00:49  Folco - Posté : 30-12-2009  M

machin.c  
  
#include "kernel.h"  
#include "funcs.h"  
 
+ const char* HelpText; 
 
void CommandHelp(void)  
{  
  printf("abc");  
  ngetchx();  
}

Sans le '+' évidemment.


<<< Kernel Extremist©®™ >>> WIP : r6 - 2014-03-08

Les ministres ne sont que des commis chargés d'exécuter les ordres des grands banquiers, des pantins dont la Haute Banque tire les ficelles. Alexandre Millerand, président du conseil des ministres...

Un des bienfaits de la Révolution est d'avoir livré la France aux hommes d'argent qui, depuis cent ans, la dévorent. Anatole France
./3
30.06.2001 - 35526
00:52  @Ximoon - Posté : 30-12-2009  M

C'est marrant ça :D


Que cache le pays des Dieux ? - Ximoon's Box - Forum Ghibli - Forum Littéraire

La fin d'un monde souillé est venue. L'oiseau blanc plane dans le ciel annonçant le début d'une longue ère de purification. Détachons-nous à jamais de notre vie dans ce monde de souffrance. Ô toi l'oiseau blanc, l'être vêtu de bleu, guide nous vers ce monde de pureté. - Sutra originel dork.
./4
16.06.2001 - 59012
01:58  squalyl - Posté : 30-12-2009  M

bon je sais pas si c'est ça mais si tu dis "const char *" c'est qu'on attend que tu mettes des données.

ok ça devrait pas faire planter mais bon.

essaye ça:

machin.c  
  
#include "kernel.h"  
#include "funcs.h"  
 
const char* HelpText="turlututu"; 
 
void CommandHelp(void)  
{  
  printf("%s",HelpText);  
  ngetchx();  
}

Sans printf(UneVariable) évidemment #oui#


./5
18.06.2001 - 25145
02:04  Folco - Posté : 30-12-2009  M

Merci, je vais essayer.

Tiens, question : pourquoi mets-tu :

printf("%s",HelpText)
et non
printf(HelpText) ?

printf attend un const char*, et HelpText en est un.

Par contre, quand je regarde le code assembleur, si j'écris
printf(HelpText);
il me sort ça :
move.l HelpText,(sp)

Ce qui est évidemment faux, il faut pousser l'adresse et non le contenu de la chaine.

Je mets donc un
printf(&HelpText);
Là ok, il me sort ça :
pea HelpText

Et c'est bien ce que j'attends !

Par contre, il me balance un warning : "Passing argument 1 of printf from incompatible pointer type". Ca peut se comprendre, HelpText est du bon type et donc pas &HelpText, mais c'est pourtant avec ça que le code généré est bon !

Là je coince, je demande une explication #hypno#


<<< Kernel Extremist©®™ >>> WIP : r6 - 2014-03-08

Les ministres ne sont que des commis chargés d'exécuter les ordres des grands banquiers, des pantins dont la Haute Banque tire les ficelles. Alexandre Millerand, président du conseil des ministres...

Un des bienfaits de la Révolution est d'avoir livré la France aux hommes d'argent qui, depuis cent ans, la dévorent. Anatole France
./6
27.04.2006 - 36098
02:11  @Zerosquare - Posté : 30-12-2009  @_ö

Folco (./5) :
printf("%s",HelpText)
et non
printf(HelpText) ?
Exercice : que se passe-t-il dans le second cas si la chaîne HelpTest contient un backslash (ou pire, un signe pourcentage) ? :)


Zeroblog

« Tout homme porte sur l'épaule gauche un singe et, sur l'épaule droite, un perroquet. » — Jean Cocteau
./7
06.02.2003 - 7268
02:31  geogeo - Posté : 30-12-2009  M

En effet printf(HelpText) représente une belle faille de sécurité. ^^


la Nature nous montre seulement la queue du lion. Mais je suis certain que le lion a qui elle appartient pense qu'il ne peut pas se révéler en une fois en raison de son immense taille.

- Fondateur de Ti-Gen -: http://www.tigen.org

- Membre du Groupe Orage Studio -: http://oragestudio.free.fr/
- Mon site perso -: http://tisofts.free.fr Projets TI68K en cours: GFA-Basic = http://www.tigen.org/gfabasic Arkanoid. PolySn
./8
18.06.2001 - 25145
02:34  Folco - Posté : 30-12-2009  M

Sauf si HelpText est codé par moi en dur :p


<<< Kernel Extremist©®™ >>> WIP : r6 - 2014-03-08

Les ministres ne sont que des commis chargés d'exécuter les ordres des grands banquiers, des pantins dont la Haute Banque tire les ficelles. Alexandre Millerand, président du conseil des ministres...

Un des bienfaits de la Révolution est d'avoir livré la France aux hommes d'argent qui, depuis cent ans, la dévorent. Anatole France
./9
16.06.2001 - 59012
02:59  squalyl - Posté : 30-12-2009  M

ça change rien, suffit de changer l'adresse de ta variable :o

et dans ce cas tu l'écris directement en plus :o


./10
18.06.2001 - 25145
03:11  Folco - Posté : 30-12-2009  M

Et ça change rien à mon problème de type et de warnings du ./5 que je comprends toujours pas :(


<<< Kernel Extremist©®™ >>> WIP : r6 - 2014-03-08

Les ministres ne sont que des commis chargés d'exécuter les ordres des grands banquiers, des pantins dont la Haute Banque tire les ficelles. Alexandre Millerand, président du conseil des ministres...

Un des bienfaits de la Révolution est d'avoir livré la France aux hommes d'argent qui, depuis cent ans, la dévorent. Anatole France
./11
16.06.2001 - 59012
03:15  squalyl - Posté : 30-12-2009  M

bah si, printf attend const char* en premier arg, si tu lui files &(Hello) et que hello est un const char*, le résultat est un const char ** donc warning mauvais type.

pour faire mieux faudrait écrire printf( (const char*)(&Hello) ) ce qui forcerait le type et éviterait le ouarningue, mais explique pas pkoi l'asm est mauvais.


mais en fait ça c'est juste:

printf(HelpText);
il me sort ça :
move.l HelpText,(sp)


oublie pas que HelpText est une variable pointeur, donc le contenu de la mémoire à l'adresse HelpText contient l'adresse de la chaine #trioui#

quand tu fais de l'asm et que t'écris:

Helptext: .ascii "prout"

en fait c'est comme si tu déclarais un tableau de char:

const char Helptext[]="prout";

et quand tu fais lea Helptext, ça fait &(HelpText[0]), parce que lea <ea> est equivalent à &(<ea>)

et que si tu fais move Helptext,%d0, %d0 va contenir *(HelpText)


enfin bref toujours la même magouille et le pb des variables C et des symboles ASM qui correspondent à des adresses en asm, mais a des vraies variables en C, parce que justement le move direct,ea fait un dereferencement de direct.

Edité par squalyl le 30-12-2009 à 03:20:56.

./12
18.06.2001 - 25145
03:19  Folco - Posté : 30-12-2009  M

han, HelpText doit donc être un const char** alors ?


<<< Kernel Extremist©®™ >>> WIP : r6 - 2014-03-08

Les ministres ne sont que des commis chargés d'exécuter les ordres des grands banquiers, des pantins dont la Haute Banque tire les ficelles. Alexandre Millerand, président du conseil des ministres...

Un des bienfaits de la Révolution est d'avoir livré la France aux hommes d'argent qui, depuis cent ans, la dévorent. Anatole France
./13
16.06.2001 - 59012
03:20  squalyl - Posté : 30-12-2009  M

non non relis moi j'ai crossédité.

la magouille c'est que toutes les variables en C sont en RAM, donc elles sont toutes en accès move direct, ... ou move ..., direct

int a = 3;
int *b = &a;

ça fera en asm
a: .long 3
b: .long a

l'opération int a = 3 ça fait pour un assembleux 3 ->mem[a] (move a,3) et pas 3->a
par contre int *a = 3, ça fait pour un assembleux 3->a, ce qui est pas possible "tel quel" en asm car a est un label/symbole, donc pas changeable
et int b=*a ça fait mem[mem[a]]->mem[b ] (move a, (b) )

du coup on a été obligé d'inventer les variables pointeurs qui puissent contenir l'adresse d'autres variables

Edité par squalyl le 30-12-2009 à 03:29:26.

./14
18.06.2001 - 25145
03:28  Folco - Posté : 30-12-2009  M

Ouep, c'est bien beau tout ça, tu as raison c'est chiant.

Mai j'ai toujours pas trouvé la solution académique pour virer ces warnings :D


<<< Kernel Extremist©®™ >>> WIP : r6 - 2014-03-08

Les ministres ne sont que des commis chargés d'exécuter les ordres des grands banquiers, des pantins dont la Haute Banque tire les ficelles. Alexandre Millerand, président du conseil des ministres...

Un des bienfaits de la Révolution est d'avoir livré la France aux hommes d'argent qui, depuis cent ans, la dévorent. Anatole France
./15
06.02.2003 - 7268
03:30  geogeo - Posté : 30-12-2009  M

Tu supprimes le flag -W. ^^


la Nature nous montre seulement la queue du lion. Mais je suis certain que le lion a qui elle appartient pense qu'il ne peut pas se révéler en une fois en raison de son immense taille.

- Fondateur de Ti-Gen -: http://www.tigen.org

- Membre du Groupe Orage Studio -: http://oragestudio.free.fr/
- Mon site perso -: http://tisofts.free.fr Projets TI68K en cours: GFA-Basic = http://www.tigen.org/gfabasic Arkanoid. PolySn
./16
16.06.2001 - 59012
03:31  squalyl - Posté : 30-12-2009  M

mais il était bon ton code. T'as essayé de l'exécuter? ^^

char *plop = "pwet"; 
void func() { 
  printf("%s",plop); 
} 
 
void foobarbaz() { 
  printf(plop); // sale mais bon on s'en accomodera 
}


geo²: c'est cela, oui #trioui#


./17
06.02.2003 - 7268
03:35  geogeo - Posté : 30-12-2009  M

En effet le
printf("%s", plop) est la meilleure solution mais un
printf((const char*)plop); fonctionne tout aussi bien (malgré que cela soit moins propre).


la Nature nous montre seulement la queue du lion. Mais je suis certain que le lion a qui elle appartient pense qu'il ne peut pas se révéler en une fois en raison de son immense taille.

- Fondateur de Ti-Gen -: http://www.tigen.org

- Membre du Groupe Orage Studio -: http://oragestudio.free.fr/
- Mon site perso -: http://tisofts.free.fr Projets TI68K en cours: GFA-Basic = http://www.tigen.org/gfabasic Arkanoid. PolySn
./18
16.06.2001 - 59012
03:37  squalyl - Posté : 30-12-2009  M

c'est pas le pb.

Folco: regarde bien ce qui est généré par tigcc
#include <stdio.h> 
 
char *plop = "pwet"; 
 
.LC0: 
	.ascii "pwet\0" 
	.even 
plop: 
	.long	.LC0 
.LC1: 
	.ascii "%s\0" 
	.text 
	.even 
	.globl	boo 
 
void boo() { 
	printf("%s",plop); 
} 
 
boo: 
	link.w %fp,#0 
	move.l plop,%d0 
	move.l %d0,-(%sp) 
	pea .LC1 
	jbsr printf 
	addq.l #8,%sp 
	unlk %fp 
	rts 
	.even 
	.globl	far 
 
void far() { 
	printf(plop); 
} 
 
far: 
	link.w %fp,#0 
	move.l plop,%d0 
	move.l %d0,-(%sp) 
	jbsr printf 
	addq.l #4,%sp 
	unlk %fp 
	rts


je fais un zoom:
.LC0: 
	.ascii "pwet\0" 
	.even 
plop: 
	.long	.LC0 

toi tu as l'habitude de faire pea .LC0
mais regarde mieux: plop contient l'ADRESSE de .LC0
Du coup il fait pas faire pea plop, mais bien move plop, %d0

c'est cuefdé! :D

PS: on remarque que comme on l'a explicitement demandé, le compilo pisse une variable supplémentaire "plop" qui contient l'adresse de .LC0
Et tu remarques que le "%s" est une valeur "anonyme en C", et là il fait direct pea .LC1 puisqu'il n'a pas besoin de son adresse!

PPS: pareil avec -O3
	.globl	far 
far: 
	move.l plop,-(%sp) 
	jbsr printf 
	addq.l #4,%sp 
	rts 
	.section	.rodata.__unalignedstr,"dmu" 
.LC0: 
	.ascii "%s\0" 
	.text 
	.even 
	.globl	boo 
boo: 
	move.l plop,-(%sp) 
	pea .LC0 
	jbsr printf 
	addq.l #8,%sp 
	rts 
	.globl	plop 
	.section	.rodata.__unalignedstr,"dmu" 
.LC1: 
	.ascii "pwet\0" 
	.text 
	.even 
plop: 
	.long	.LC1


./19
18.06.2001 - 25145
03:43  Folco - Posté : 30-12-2009  M

Ah ok, c'est cool merci bien.

Pas contre, j'avais auto-zoomé sur ça moi :
	move.l plop,%d0  
	move.l %d0,-(%sp) 

#trifus#


<<< Kernel Extremist©®™ >>> WIP : r6 - 2014-03-08

Les ministres ne sont que des commis chargés d'exécuter les ordres des grands banquiers, des pantins dont la Haute Banque tire les ficelles. Alexandre Millerand, président du conseil des ministres...

Un des bienfaits de la Révolution est d'avoir livré la France aux hommes d'argent qui, depuis cent ans, la dévorent. Anatole France
./20
16.06.2001 - 59012
03:43  squalyl - Posté : 30-12-2009  M

compilé sans optim, et cross posté la version -O3 ^^


./21
18.06.2001 - 25145
03:49  Folco - Posté : 30-12-2009  M

Oué bon, ça génère toujours pas ça chez moi :
const char InvalidCall[] = "Invalid call"

const char* InvalidCall; 
	if (ArgCount == 2) 
	{ 
		printf(InvalidCall); 
		ngetchx(); 
		return; 
	}

	cmp.w #2,%d0 
	jbne .L10 
	move.l InvalidCall,-(%sp) 
.L11: 
	jbsr printf 
	jsr _ROM_CALL_51:l

	.globl	InvalidCall 
	.section	.rodata.InvalidCall,"d" 
InvalidCall: 
	.ascii "Invalid call.\0"


<<< Kernel Extremist©®™ >>> WIP : r6 - 2014-03-08

Les ministres ne sont que des commis chargés d'exécuter les ordres des grands banquiers, des pantins dont la Haute Banque tire les ficelles. Alexandre Millerand, président du conseil des ministres...

Un des bienfaits de la Révolution est d'avoir livré la France aux hommes d'argent qui, depuis cent ans, la dévorent. Anatole France
./22
16.06.2001 - 59012
07:58  squalyl - Posté : 30-12-2009  M

c'est bien pour ça que j'ai écrit

const char * InvalidCall = "invalid call";

et pas

const char InvalidCall[] = "truc";


./23
18.06.2001 - 25145
10:00  Folco - Posté : 30-12-2009  M

J'ai changé, c'était écrit const char* avant. Mais je me décourage pas, je réessaye, parce que j'aime me prendre des beignes dans la gueule #trioui# #trifouet#

edit -> c'est bien ça, j'ai toujours de l'assembleur invalide à la sortie #trioui#


<<< Kernel Extremist©®™ >>> WIP : r6 - 2014-03-08

Les ministres ne sont que des commis chargés d'exécuter les ordres des grands banquiers, des pantins dont la Haute Banque tire les ficelles. Alexandre Millerand, président du conseil des ministres...

Un des bienfaits de la Révolution est d'avoir livré la France aux hommes d'argent qui, depuis cent ans, la dévorent. Anatole France
./24
16.06.2001 - 59012
10:47  squalyl - Posté : 30-12-2009  M

mais t'as essayé de l'exécuter ou pas #trifus#

d'après moi il est valide cet asm, j'ai au grand jamais eu de problèmes avec print sur ti68k!!


./25
18.06.2001 - 25145
10:53  Folco - Posté : 30-12-2009  M

Pas essayé, non. :D Je vois pas pourquoi ça marcherait si l'assembleur est invalide, à moins que j'ai pas vu le patcheur à chaud fourni par GCC4TI :p


<<< Kernel Extremist©®™ >>> WIP : r6 - 2014-03-08

Les ministres ne sont que des commis chargés d'exécuter les ordres des grands banquiers, des pantins dont la Haute Banque tire les ficelles. Alexandre Millerand, président du conseil des ministres...

Un des bienfaits de la Révolution est d'avoir livré la France aux hommes d'argent qui, depuis cent ans, la dévorent. Anatole France
./26
18.06.2001 - 25145
10:54  Folco - Posté : 30-12-2009  M

Ben quand j'exécute ça, j'ai un "Corrupted program", pourtant mon code a bien changé depuis hier soir. :)


<<< Kernel Extremist©®™ >>> WIP : r6 - 2014-03-08

Les ministres ne sont que des commis chargés d'exécuter les ordres des grands banquiers, des pantins dont la Haute Banque tire les ficelles. Alexandre Millerand, président du conseil des ministres...

Un des bienfaits de la Révolution est d'avoir livré la France aux hommes d'argent qui, depuis cent ans, la dévorent. Anatole France
./27
18.06.2001 - 25145
11:18  Folco - Posté : 30-12-2009  M

Bon, ben j'ai casté avec un (const char*), j'ai toujours un "corrupted program". J'ai plus qu'à me retrousser les manches direction le code de PedroM pour voir ce qui peut provoquer une telle erreur :(


<<< Kernel Extremist©®™ >>> WIP : r6 - 2014-03-08

Les ministres ne sont que des commis chargés d'exécuter les ordres des grands banquiers, des pantins dont la Haute Banque tire les ficelles. Alexandre Millerand, président du conseil des ministres...

Un des bienfaits de la Révolution est d'avoir livré la France aux hommes d'argent qui, depuis cent ans, la dévorent. Anatole France
./28
18.06.2001 - 25145
11:48  Folco - Posté : 30-12-2009  M

Bon, ras le fion, un e-bisou à qui m'aidera à trouver la solution. Je continue à coder, mais c'est chiant de pas comprendre, j'aime pas ça #mad#
#tromb# Fichier joint : asti68k_c.7z


<<< Kernel Extremist©®™ >>> WIP : r6 - 2014-03-08

Les ministres ne sont que des commis chargés d'exécuter les ordres des grands banquiers, des pantins dont la Haute Banque tire les ficelles. Alexandre Millerand, président du conseil des ministres...

Un des bienfaits de la Révolution est d'avoir livré la France aux hommes d'argent qui, depuis cent ans, la dévorent. Anatole France
./29
16.06.2001 - 59012
12:24  squalyl - Posté : 30-12-2009  M

essaye sur ams ou vti si possible.


./Publicité AdSense
 « - 1/3 - Suivant » :: Pages
 Index » Forum Ti 89, Titanium / 92+ / Voyage 200 et TI-Nspire » Prog C TI (74r) » Test case qui renvoie "Corrupted program"

./Poster un nouveau message. - Ouvrir dans une nouvelle fenêtre
Login : Mot de passe :

url - image - media  
spoiler - pre - fixed
quote - box - hr
poll - code





Smileys
Smileys perso
Pièce jointe
     Flood control (?) :    
Les messages postés sont la propriété de leurs auteurs. Nous ne sommes pas responsables de leurs contenus.

» yN ©1624 - Aide / Charte / Crédits
51ms | Statistiques