Solved

Delphi 4 bug?

Posted on 1998-11-23
6
364 Views
Last Modified: 2010-04-03
Why my open, save and compile doesn't work and sometimes work. I patched my delphi 4 to 4.01, i still get the weird message when i exit delphi. Do i need the patch delphi 4.01 to 4.02.
0
Comment
Question by:mhieta
6 Comments
 
LVL 2

Author Comment

by:mhieta
ID: 1347629
Edited text of question
0
 
LVL 3

Expert Comment

by:philipleighs
ID: 1347630
What message?
0
 
LVL 2

Author Comment

by:mhieta
ID: 1347631
Runtime error 216

mhieta
0
Active Directory Webinar

We all know we need to protect and secure our privileges, but where to start? Join Experts Exchange and ManageEngine on Tuesday, April 11, 2017 10:00 AM PDT to learn how to track and secure privileged users in Active Directory.

 

Expert Comment

by:Yoni
ID: 1347632
I haven't encountered this bug but the only way you can deal with any bugs in delphi is having the most updated version. That is downloading any service pack for Delphi released by Borland
Try it
Yoni
0
 

Accepted Solution

by:
Llysander earned 10 total points
ID: 1347633
Area: compiler\delphi\code generation\optimization
You need to upgrade to SP2.  See fixes document below.

Reference Number: 473 (Published: 10/28/98)

Status: Fixed in Version 4 Update Pack 2
Date Reported: 8/18/98

Severity: Commonly Encountered

Type: Crash

Problem:

The Delphi 3.02 linker is a bit too clever when
removing symbols.

It also has a severe code generation bug (the
compiler may be involved
too - I just don't care, since the net effect is the
same)

In a nutshell, if one tries to FLD (BASM) data that
has been declared
using the absolute directive, then bad code is
generated. This will
make the application crash at runtime with access
violations.

You will get an access violation (in this case a
Runtime Error 216,
otherwise an exception EAccessViolation) on
execution of

    fld test1

This is because the first few lines of assembler code
look like this


  fld test1
0052768C:  DD0502504A30 FLD QWORD PTR
[+02504A30]

  fld test2

00527692:  DD0500528884 FLD QWORD PTR
[+00528884]


[my applications are always based at $500000]
 

First result:
-------------
  Clearly [+02504A30] looks a bit like garbage (and
it is plain
  wrong, of course)... This explains the crash, since
$2504A30
  is way beyond reach for this application.


Second result:
--------------
   Run the code as shown above up to the first FLD
(breakpoint
   or single-step).

   Have tooltip expression or "Evaluate" tell you
that:
      test1  -- > "Symbol was eliminated by linker"
 
 

"Touching" the Constant variable, e.g. Constant[1]
:= 0;, does
apparently make the linker sort of include "test1",
but does _NOT_
remove the crash (!).

Even worse, touching the Test1 variable, e.g.
Test1 := 0;, does not
change this behaviour, either.

The only solution to this problem is to have the
absolute declaration
turned around, e.g.

  Test3: double = 0;
  Constant2: array[1..8] of byte absolute Test3;
Steps:

Found on the delphi.basm newsgroup:

{$A+,B-,C+,D+,E-,F-,G+,H+,I+,J+,K-,L+,M-,N+,O+,P
+,Q+,R+,S-,T+,U-,V+,W-,X+,Y+,Z1}
unit TestMe;

interface

implementation

var
  Constant: array[1..8] of byte;

  Test1: double absolute Constant;
  Test2: double = 0;

procedure RunMe;
asm
  fld test1
  fld test2

  fstp st(0)
  fstp st(0)
end;

initialization

  RunMe;

end.

0
 
LVL 2

Author Comment

by:mhieta
ID: 1347634
Thanks to Llysander and all of you by answered to my question.

mhieta
0

Featured Post

Free Tool: Site Down Detector

Helpful to verify reports of your own downtime, or to double check a downed website you are trying to access.

One of a set of tools we are providing to everyone as a way of saying thank you for being a part of the community.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

Suggested Solutions

Title # Comments Views Activity
Process Javascript errors with Delphi TWebBrowser 1 178
select query - oracle 16 100
Firemonkey android show image from resource ? 1 46
Tidtcpserver listening on multiports? 1 35
A lot of questions regard threads in Delphi.   One of the more specific questions is how to show progress of the thread.   Updating a progressbar from inside a thread is a mistake. A solution to this would be to send a synchronized message to the…
In my programming career I have only very rarely run into situations where operator overloading would be of any use in my work.  Normally those situations involved math with either overly large numbers (hundreds of thousands of digits or accuracy re…

830 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question