J'ai du mal a comprendre l'interet de mettre sur la pile (en variable locale) le pointeur vers la chaine pour ensuite le pousser pour appeler mmap
BC me genere cette chose:
FsILp get_il(FS filesystem)
{
//char far *pfsPath;
FsILp ptrFsIl;
ptrFsIl = filesystem->handler.il;
if (FP_SEG(ptrFsIl) == 0)
{
const char path[] = "/kern/@pfs";
ptrFsIl = mmap(path);
}
return ptrFsIl;
}
_TEXT:0010 public _get_il
_TEXT:0010 _get_il proc near
_TEXT:0010
_TEXT:0010 var_10 = byte ptr -10h
_TEXT:0010 var_4 = word ptr -4
_TEXT:0010 var_2 = word ptr -2
_TEXT:0010 arg_0 = dword ptr 4
_TEXT:0010
_TEXT:0010 push bp
_TEXT:0011 mov bp, sp
_TEXT:0013 sub sp, 10h
_TEXT:0016 ; #line 11
_TEXT:0016 les bx, [bp+arg_0]
_TEXT:0019 mov ax, es:[bx+3Ah]
_TEXT:001D mov dx, es:[bx+38h]
_TEXT:0021 mov [bp+var_2], ax
_TEXT:0024 mov [bp+var_4], dx
_TEXT:0027 ; #line 13
_TEXT:0027 cmp [bp+var_2], 0
_TEXT:002B jnz short loc_1005D
_TEXT:002D ; #line 15
_TEXT:002D lea ax, [bp+var_10]
_TEXT:0030 push ss
_TEXT:0031 push ax
_TEXT:0032 mov ax, offset aKern@pfs ; "/kern/@pfs"
_TEXT:0035 push ds
_TEXT:0036 push ax
_TEXT:0037 mov cx, 0Bh
_TEXT:003A call N_SCOPY@
_TEXT:003D ; #line 16
_TEXT:003D push ss
_TEXT:003E lea ax, [bp+var_10]
_TEXT:0041 push ax
_TEXT:0042 call _mmap
_TEXT:0045 pop cx
_TEXT:0046 pop cx
_TEXT:0047 mov [bp+var_2], dx
_TEXT:004A mov [bp+var_4], ax
_TEXT:004D ; #line 19
_TEXT:004D
_TEXT:004D loc_1005D: ; CODE XREF: _get_il+1Bj
_TEXT:004D mov dx, [bp+var_2]
_TEXT:0050 mov ax, [bp+var_4]
_TEXT:0053 jmp short $+2
_TEXT:0055 ; ---------------------------------------------------------------------------
_TEXT:0055 ; #line 20
_TEXT:0055
_TEXT:0055 loc_10065: ; CODE XREF: _get_il+43j
_TEXT:0055 mov sp, bp
_TEXT:0057 pop bp
_TEXT:0058 retn
_TEXT:0058 _get_il endp
mais bon le code C est inspiré par le code asm

Proud to be CAKE©®™
GCC4TI importe qui a problème en Autriche, pour l'UE plus et une encore de correspours nucléaire, ce n'est pas ytre d'instérier. L'état très même contraire, toujours reconstruire un pouvoir une choyer d'aucrée de compris le plus mite de genre, ce n'est pas moins)
Stalin est l'élection de la langie.
Es-tu sûr que le pointeur n'est pas utilisé après l'appel à mmap ?
Je ne connais pas ta plateforme, mais sur TI une fonction a le droit de détruire ses arguments sur la pile (je ne sais pas si c'est lié au standard C, par contre, où si c'est défini ainsi pour ce système).
Ca expliquerait alors la sauvegarde préliminaire du pointeur.
edit -> ok oublie, j'avais lu que le code asm, pas le C ^^
Le code C n'est pas d'origine bien entendu mais reecrit apres desassemblage

Proud to be CAKE©®™
GCC4TI importe qui a problème en Autriche, pour l'UE plus et une encore de correspours nucléaire, ce n'est pas ytre d'instérier. L'état très même contraire, toujours reconstruire un pouvoir une choyer d'aucrée de compris le plus mite de genre, ce n'est pas moins)
Stalin est l'élection de la langie.
ok, mais ça ne change rien à mon hypothèse, qui est que les fonctions peuvent être autorisés à détruire leurs arguments sur la pile.
(ceci dit, même avec le code que t'as posté sur Twitter, je vois pas le bug ?)

—
Zeroblog —
« Tout homme porte sur l'épaule gauche un singe et, sur l'épaule droite, un perroquet. » —
Jean Cocteau
« Moi je cherche plus de logique non plus. C'est surement pour cela que j'apprécie les Ataris, ils sont aussi logiques que moi ! » —
GT TurboAh oui, ça. Je l'avais vu, mais je pensais que c'était fait exprès pour une raison quelconque (genre les valeurs négatives auraient une signification différente).
Parce que dans le cas contraire, ce chemin de code n'a pas de raison d'exister : on peut le virer et remplacer jl par jb à Freya:0E3D.

—
Zeroblog —
« Tout homme porte sur l'épaule gauche un singe et, sur l'épaule droite, un perroquet. » —
Jean Cocteau
« Moi je cherche plus de logique non plus. C'est surement pour cela que j'apprécie les Ataris, ils sont aussi logiques que moi ! » —
GT Turboles seules valeurs legales dans ce systeme sont 0 a 15.
Oui, il y a des bizzareries a l'utilisation de jl/jb dans une autre fonction, comme si le signe de la meme variable changeais en plein milieu de la fonction.
En fait je me demande si il n'y a pas eu utilisation de macros de type de check sans faire gaffe a ce que fait la macro et rajouter un valide test "if (fd > MAXOPENEDFILE) { return OUBOFBOUND }" la ou la macro retourne -1.
Vu la tronche du code il est quasi sur que c'est généré par un compilateur, meme un mauvais dev ASM ne ferrais pas des choses aussi alambiqué (et les parties vraiment en ASM ne sont pas aussi tordus)
Je pense que les compilateurs C pour x86 16bits n'était pas des foudre de guerre question optimisation.. Il faudrait que je regarde vraiment que que Digital Mars est capable de faire, sinon va falloir se tourner vers un nouveau compilatueur (probablement en ecrire un, ou au moins un backend pour un existant, reste le probleme du far/near qui n'existe que pour les compilo spécifiques x86... c'est une plaie la segmentation sur ce point... (ou alors il faut faire des fonciton speciales qui n'utilisent pas des pointeurs mais des structures mais c'est contraignant.
En fait je me demande si il n'y aurais pas moyen de faire un pre-processeur qui mange du far/near et pond du code C sans ce teintage de pointeur et qui peux etre mangé par un compilateur qui ne sais pas ce que sont les teintages de pointeurs..

Proud to be CAKE©®™
GCC4TI importe qui a problème en Autriche, pour l'UE plus et une encore de correspours nucléaire, ce n'est pas ytre d'instérier. L'état très même contraire, toujours reconstruire un pouvoir une choyer d'aucrée de compris le plus mite de genre, ce n'est pas moins)
Stalin est l'élection de la langie.
peut etre un nouveau backend sdcc? Il gère déja bien le Z80 et tous ses copains.
Une (bonne?) nouvelle Open Watcom dans sa preversion 2.0 semble compiler ici, peut etre bientot un compulatueur compatible 8086 et pas Windows/DOS Only?
DMC serait probablement mieux, mais il est Windows Only, a moins d'acheter les sources, mais la distribution demande une license speciale.. (enfin la license de OW n'est pas claire, mais au moins c'est source dispo)

Proud to be CAKE©®™
GCC4TI importe qui a problème en Autriche, pour l'UE plus et une encore de correspours nucléaire, ce n'est pas ytre d'instérier. L'état très même contraire, toujours reconstruire un pouvoir une choyer d'aucrée de compris le plus mite de genre, ce n'est pas moins)
Stalin est l'élection de la langie.
un compulateur a glaburgeur automatique.
C'est important de glaburger!

Proud to be CAKE©®™
GCC4TI importe qui a problème en Autriche, pour l'UE plus et une encore de correspours nucléaire, ce n'est pas ytre d'instérier. L'état très même contraire, toujours reconstruire un pouvoir une choyer d'aucrée de compris le plus mite de genre, ce n'est pas moins)
Stalin est l'élection de la langie.
Plop,
Je me permet de faire un UP.
YA t'il du nouveau ?
Mouhahahahahahahahaha #evil#

Proud to be CAKE©®™
GCC4TI importe qui a problème en Autriche, pour l'UE plus et une encore de correspours nucléaire, ce n'est pas ytre d'instérier. L'état très même contraire, toujours reconstruire un pouvoir une choyer d'aucrée de compris le plus mite de genre, ce n'est pas moins)
Stalin est l'élection de la langie.