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.