qemu-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Qemu-devel] [5274] Add signed versions of save/load functions


From: Anthony Liguori
Subject: Re: [Qemu-devel] [5274] Add signed versions of save/load functions
Date: Thu, 25 Sep 2008 14:59:56 -0500
User-agent: Thunderbird 2.0.0.16 (X11/20080723)

Blue Swirl wrote:
-int qemu_get_byte(QEMUFile *f)
+int8_t qemu_get_byte(QEMUFile *f)
 {
     if (f->buf_index >= f->buf_size) {
         qemu_fill_buffer(f);
@@ -6329,13 +6329,13 @@
     return pos;
 }

So this is the problem. While qemu_get_byte() returns an int, it returns f->buf[pos] and buf is a uint8_t *. This means that it will always return a positive number whereas the new qemu_get_byte() may return a negative number.

When dealing with something like qemu_get_be32(), where you're shifting qemu_get_byte(), the int8_t is going to get promoted to an int and when the int8_t is negative, the result is that the combination is an OR of 0xFFFFFFFX instead of 0x000000FX.

Which leads me to wonder, how much did you test this changeset? Because I don't think any save/restore could possibly have worked. Perhaps we should revert the whole patchset until it's a bit more flushed out? I'm concerned that integer promotion isn't taken into account in a number of places.

Regards,

Anthony Liguori





reply via email to

[Prev in Thread] Current Thread [Next in Thread]