The syscall return path on ppc64 checks if the error is between
-LAST_ERRNO and 0, if it is, does the usual inversion along with
setting a CR bit indicating to glibc that an error occured.
However, we had an interesting bug where we used a 32 bits logica
(unsigned) comparison, thus possibly doing false positives for
valid 64 bits unsigned values whose low 32 bits happen to be in
the error range.
Fix that.
91:
#endif
li r10,-_LAST_ERRNO
- cmpl 0,r3,r10
+ cmpld 0,r3,r10
blt 30f
neg r3,r3
22: ld r10,_CCR(r1) /* Set SO bit in CR */