Consultor Eletrônico



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.