Consultor Eletrônico



Kbase P97934: Errors (48) and (49) after migrating to 64-Bit caused by GET/SET-POINTER-VALUE
Autor   Progress Software Corporation - Progress
Acesso   Público
Publicação   9/17/2008
Status: Unverified

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
Progress 9.1E
OpenEdge 10.0x
OpenEdge 10.1A 64-bit

SYMPTOM(s):

Errors (48) and (49) after migrating to 64-Bit caused by GET/SET-POINTER-VALUE

SYSTEM ERROR: Bus error. (48)

SYSTEM ERROR: Memory violation. (49)

Using the GET-POINTER-VALUE and SET-POINTER-VALUE functions on 64-bit platforms

Progress generates a segment fault (GPF)

Stack Trace from _progres on HP-UX reads:

fmrawo
fmeval
rnasgsimple
rnexec_entry

CHANGE:

Upgraded to a 64-Bit Operating System

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.