Laszlo Ersek 2f859f80c2 dump: eliminate DumpState.page_size ("guest's page size")
Use TARGET_PAGE_SIZE and ~TARGET_PAGE_MASK instead.

"DumpState.page_size" has type "size_t", whereas TARGET_PAGE_SIZE has type
"int". TARGET_PAGE_MASK is of type "int" and has negative value. The patch
affects the implicit type conversions as follows:

- create_header32() and create_header64(): assigned to "block_size", which
  has type "uint32_t". No change.

- get_next_page(): "block->target_start", "block->target_end" and "addr"
  have type "hwaddr" (uint64_t).

  Before the patch,
  - if "size_t" was "uint64_t", then no additional conversion was done as
    part of the usual arithmetic conversions,
  - If "size_t" was "uint32_t", then it was widened to uint64_t as part of
    the usual arithmetic conversions,
  for the remainder and addition operators.

  After the patch,
  - "~TARGET_PAGE_MASK" expands to  ~~((1 << TARGET_PAGE_BITS) - 1). It
    has type "int" and positive value (only least significant bits set).
    That's converted (widened) to "uint64_t" for the bit-ands. No visible
    change.
  - The same holds for the (addr + TARGET_PAGE_SIZE) addition.

- write_dump_pages():
  - TARGET_PAGE_SIZE passed as argument to a bunch of functions that all
    have prototypes. No change.

  - When incrementing "offset_data" (of type "off_t"): given that we never
    build for ILP32_OFF32 (see "-D_FILE_OFFSET_BITS=64" in configure),
    "off_t" is always "int64_t", and we only need to consider:
    - ILP32_OFFBIG: "size_t" is "uint32_t".
      - before: int64_t += uint32_t. Page size converted to int64_t for
        the addition.
      - after:  int64_t += int32_t. No change.
    - LP64_OFF64: "size_t" is "uint64_t".
      - before: int64_t += uint64_t. Offset converted to uint64_t for the
        addition, then the uint64_t result is converted to int64_t for
        storage.
      - after:  int64_t += int32_t. Same as the ILP32_OFFBIG/after case.
        No visible change.

  - (size_out < s->page_size) comparisons, and (size_out = s->page_size)
    assignment:
    - before: "size_out" is of type "size_t", no implicit conversion for
              either operator.
    - after: TARGET_PAGE_SIZE (of type "int" and positive value) is
             converted to "size_t" (for the relop because the latter is
             one of "uint32_t" and "uint64_t"). No visible change.

- dump_init():
  - DIV_ROUND_UP(DIV_ROUND_UP(s->max_mapnr, CHAR_BIT), s->page_size): The
    innermost "DumpState.max_mapnr" field has type uint64_t, which
    propagates through all implicit conversions at hand:

    #define DIV_ROUND_UP(n,d) (((n) + (d) - 1) / (d))

    regardless of the page size macro argument's type. In the outer macro
    replacement, the page size is converted from uint32_t and int32_t
    alike to uint64_t.

  - (tmp * s->page_size) multiplication: "tmp" has size "uint64_t"; the
    RHS is converted to that type from uint32_t and int32_t just the same
    if it's not uint64_t to begin with.

Signed-off-by: Laszlo Ersek <lersek@redhat.com>
Reviewed-by: Paolo Bonzini <pbonzini@redhat.com>
Signed-off-by: Luiz Capitulino <lcapitulino@redhat.com>
2014-06-11 10:10:28 -04:00
2014-06-10 19:39:34 +04:00
2014-06-09 15:43:40 +02:00
2013-04-18 13:50:53 +02:00
2014-06-10 20:07:01 +04:00
2014-05-20 13:05:58 +02:00
2014-06-02 16:49:00 +02:00
2014-05-19 11:36:48 +02:00
2014-06-02 16:49:00 +02:00
2014-06-09 15:43:40 +02:00
2014-06-05 16:10:33 +02:00
2014-06-05 16:10:33 +02:00
2014-06-05 16:10:33 +02:00
2014-06-05 16:10:33 +02:00
2014-06-10 09:50:27 +02:00
2014-06-05 16:10:33 +02:00
2014-06-09 15:00:21 +01:00
2014-06-10 12:36:36 +02:00
2012-09-07 09:02:44 +03:00
2014-03-12 17:26:32 +01:00
2013-09-05 09:40:31 -05:00
2014-06-09 15:43:40 +02:00
2013-10-11 09:34:56 -07:00
2014-06-09 15:43:40 +02:00
2014-06-05 16:10:33 +02:00
2013-07-23 02:41:31 +02:00
2014-05-20 11:57:52 +01:00
2013-08-12 09:15:12 -05:00
2014-06-09 15:43:40 +02:00
2014-06-09 15:43:40 +02:00
2013-09-03 12:25:55 +02:00
2014-06-05 16:10:33 +02:00
2014-05-24 00:07:29 +04:00
2014-03-13 14:34:16 +00:00
2014-05-28 17:36:21 +02:00
2014-04-18 10:33:36 +04:00
2014-06-04 11:30:32 +02:00
2014-06-09 15:43:40 +02:00
2014-05-28 14:28:46 +02:00
2014-05-24 00:07:29 +04:00
2013-10-11 09:34:56 -07:00
2014-05-09 22:59:40 +02:00
2014-02-17 11:57:23 -05:00
2014-06-05 16:10:33 +02:00
2014-04-17 20:39:32 +01:00
2013-10-11 09:34:56 -07:00
2014-06-09 15:43:40 +02:00
2014-05-07 16:16:43 +00:00
2013-04-08 18:13:10 +02:00

Read the documentation in qemu-doc.html or on http://wiki.qemu-project.org

- QEMU team
Description
No description provided
Readme 404 MiB
Languages
C 82.6%
C++ 6.5%
Python 3.4%
Dylan 2.9%
Shell 1.6%
Other 2.8%