Kbase P11415: GET-POINTER-VALUE and SET-POINTER-VALUE are unreliable on 64-bit platforms
Autor |
  Progress Software Corporation - Progress |
Acesso |
  Público |
Publicação |
  10/8/2008 |
|
Status: Verified
SYMPTOM(s):
Using the GET-POINTER-VALUE and SET-POINTER-VALUE functions on 64-bit platforms
GET-POINTER-VALUE returns the unknown value or incorrect values on 64-bit operating systems
GET-POINTER-VALUE and SET-POINTER-VALUE may cause the session to crash
One or more of the following errors may occur:
Unable to evaluate expression with UNKNOWN value in argument. (4391)
SYSTEM ERROR: Bus error. (48)
SYSTEM ERROR: Memory violation. (49)
Progress generates a segment fault (GPF)
Stack Trace from _progres on HP-UX reads:
fmrawo
fmeval
rnasgsimple
rnexec_entry
FACT(s) (Environment):
HP-UX 11.0 64-bit
HP-UX 11i 64-bit
HP-UX 11i Itanium
IBM AIX POWER 5.1 64-bit
IBM AIX POWER 5.2 64-bit
IBM AIX POWER 5.3 64-bit
Linux x86 64-bit
Solaris SPARC 2.8 64-bit
Solaris SPARC 8 64-bit
Solaris SPARC 9 64-bit
Solaris SPARC 10 64-bit
Progress 9.1D 64-bit
Progress 9.1E 64-bit
OpenEdge 10.0A 64-bit
OpenEdge 10.0B 64-bit
OpenEdge 10.1A 64-bit
CHANGE:
Upgraded to a 64-Bit Operating System and 64-Bit OpenEdge release
CAUSE:
This is a product limitation.
Although Progress runs on 64-bit machines, the 4GL does not support a 64-bit integer data type. Internally, the 4GL is set up to handle 64-bit pointers. However, the INTEGER data type is still a 32 bit number so when the GET-POINTER-VALUE function attempts to return the 64-bit address of the pointer, it will not fit into a 32-bit integer. Consequently the 32-bit integer variable is assigned the unknown value. SET-POINTER-VALUE suffers a similar problem, and should not be used on 64-bit platforms.
FIX:
Upgrade to OpenEdge 10.1B or later release.
OpenEdge 10.1B introduces support for 64-bit integer data type (INT64), and thus removes this limitation.