forumti.gif
@_ö
(12:09)  Bienvenue ! - Inscrivez vous pour poster ! -
@Boo + 22 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 - 26203
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 ?
avatar<<< 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 - 35866
00:42  @Ximoon - Posté : 30-12-2009  M
Tu peux mettre la source que ça donne après la modification qui casse tout ?
avatarQue 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 - 26203
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.
avatar<<< 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 - 35866
00:52  @Ximoon - Posté : 30-12-2009  M
C'est marrant ça :D
avatarQue 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 - 60452
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 - 26203
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#
avatar<<< 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 - 38490
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) ? :)
avatarZeroblog

« Tout homme porte sur l'épaule gauche un singe et, sur l'épaule droite, un perroquet. » — Jean Cocteau

« Sur Atari tout le hardware tu trouvera, le driver toi même tu le codera » — GT Turbo
./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é. ^^
avatarla 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.
PolySnd 3.0.
./8
18.06.2001 - 26203
02:34  Folco - Posté : 30-12-2009  M
Sauf si HelpText est codé par moi en dur :p
avatar<<< 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 - 60452
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 - 26203
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 :(
avatar<<< 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 - 60452
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 - 26203
03:19  Folco - Posté : 30-12-2009  M
han, HelpText doit donc être un const char** alors ?
avatar<<< 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 - 60452
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 - 26203
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
avatar<<< 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. ^^
avatarla 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.
PolySnd 3.0.
./16
16.06.2001 - 60452
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).
avatarla 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.
PolySnd 3.0.
./18
16.06.2001 - 60452
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 - 26203
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#
avatar<<< 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 - 60452
03:43  squalyl - Posté : 30-12-2009  M
compilé sans optim, et cross posté la version -O3 ^^
./21
18.06.2001 - 26203
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"
avatar<<< 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 - 60452
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 - 26203
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#
avatar<<< 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 - 60452
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 - 26203
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
avatar<<< 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 - 26203
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. :)
avatar<<< 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 - 26203
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 :(
avatar<<< 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 - 26203
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
avatar<<< 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 - 60452
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
328ms | Statistiques