Because the x86 and x86_64 versions of libunwind use different sets of registers for these architectures, the wrong values are passed to the accessreg callback. For example, when looking for the IP (RIP on 64, EIP on 32) it will still pass 16 to accessreg which corresponds to RIP on 64, but ST5 on 32. For 32, since it wants the IP, it should be passing 8, which corresponds to EIP. Because of this, it does not obtain the correct value for the IP, and the backtrace fails. To fix this, Frysk needs to check the elfclass of the binary and invoke the proper version of libunwund (libunwund-x86 for 32, libuwind-x86_64 for 64).
Created attachment 1543 [details] failed testDebug output of 32 bit.
Created attachment 1544 [details] successfull run of testDebug.
Down stream RHEL bug: https://bugzilla.redhat.com/bugzilla/show_bug.cgi?id=224452
March 23, 2007 frysk-core/frysk/rt/CL * StackAccessors.java (accessReg): Check that register sizes are the same. * StackFactory.java (createStackTrace): Use task's ISA to determine which Unwinder to create.
New bindings have been committed and activated. 2007-05-11 frysk-core/frysk/rt/CL * StackFactory.java: Switch to using RemoteFrame