FreeBSD + Strings --> crash
Peter Gerwinski
peter at agnes.dida.physik.uni-essen.de
Sat Nov 2 20:13:21 CET 1996
Hello folks,
perhaps somebody can help me with a strange error which occurs
when using Strings under FreeBSD. (It does not occur on DJGPP,
EMX, or Linux.)
The error is triggered by the program
Program Crash;
Type
WrkString = String ( 80 );
Var
S: WrkString;
begin
S:= 'A';
if S = 'A' then
writeln ( 'Hurra!' );
end.
It compiles fine, the assembly code looks nice, but it gets a signal
"iot" (whatever that means) when running. The error happens in the
RTS function _p_string() (see rts/rts-string.c):
/* First arg is always a string or char */
if (argument_mask & P_STR_FIRST_IS_CHAR)
{
c1 = va_arg (p, char);
s1 = &c1;
len1 = 1;
}
else
{
/* It's a string */
s1 = va_arg (p, char *);
len1 = va_arg (p, int); /* <------ SIGIOT */
}
When examining the variables with gdb, everything looks nice, too.
*p == 'A', etc.
A similar error happens when running the following variant:
Program Crash;
uses
CPtr;
Var
C: Char value 'A';
P: CharPtr;
begin
P:= @C;
if P^ = 'A' then
writeln ( 'Hurra!' );
end.
It is essential that the type "CharPtr = ^Char" is exported by a
Unit, not declared in the program.
First, we get a warning about assignment of incompatible pointers for
"P:= @C" which is, of course, nonsense, but I can explain it with the
mechanism of forward references in pointer declarations.
Again, the assembler code looks fine, but when running the program,
I get a signal. :(
And again, the error does not occur with DJGPP, EMX, or Linux - only
with FreeBSD.
DOES ANYBODY HAVE AN IDEA?
Yours,
Peter
e-mail: peter.gerwinski at uni-essen.de
home address: D\"usseldorfer Str. 35, 45145 Essen, Germany
WWW: http://agnes.dida.physik.uni-essen.de/~peter/
More information about the Gpc
mailing list