From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([2001:4830:134:3::10]:49225) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1fGfqd-00049N-Uh for qemu-devel@nongnu.org; Thu, 10 May 2018 03:18:45 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1fGfqY-0005xc-Vz for qemu-devel@nongnu.org; Thu, 10 May 2018 03:18:43 -0400 Received: from smtp23.cstnet.cn ([159.226.251.23]:50518 helo=cstnet.cn) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1fGfqY-0005uk-B6 for qemu-devel@nongnu.org; Thu, 10 May 2018 03:18:38 -0400 From: Su Hang Date: Thu, 10 May 2018 15:18:29 +0800 Message-Id: <1525936711-24538-1-git-send-email-suhang16@mails.ucas.ac.cn> Subject: [Qemu-devel] [PATCH v7 0/2] Implement Hex file loader and add test case List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: stefanha@gmail.com, darcysail@gmail.com Cc: qemu-devel@nongnu.org These series of patchs implement Intel Hexadecimal File loader and add QTest testcase to verify the correctness of Loader. v1: -- Basic version. v2: -- Replace `do{}while(cond);` block with `for(;;)` block. v3: -- Add two new files information in MAINTAINERS. v4: -- Correct the 'test.hex' path in hexloader-test.c. v5: -- Split huge parse_hex_blob() function into four small function; -- Add check for memory bounds; -- Check validation for Record type; -- Replace function ctoh() with glib function g_ascii_xdigit_value(); -- Remove check for '.hex' suffix; -- Remove unnecessary type cast; -- Remove duplicate zero-initialization; -- Correct typos; v6: -- Call Intel HEX loader after load_uimage_as(); -- Remove use of KERNEL_LOAD_ADDR; -- Change (hwaddr) type argument to (hwaddr *) type; -- Use new struct HexParser to contain all arguments needed by handle_record_type(); -- Enable discontiguous data records (again); -- Remove unnecessary memory clean: bin_buf and HexLine line; -- Correct typo; -- Remove unnecessary check for hex file size; -- Add entry point handle for START_SEG_ADDR_RECORD and START_LINEAR_ADDR_RECORD record type; -- Use hwaddr * type to store entry point; v7: -- Remove unnecessary code style changes; -- Replace `bool` with `size_t` for function `parse_record` return type; -- Replace `int` with `size_t` for struct `HexParser` member field `total_size` type; -- Replace `int` with `size_t` for function `handle_record_type` return type; -- Return an error when encountered unimplemented data type `START_SEG_ADDR_RECORD`; -- Add check for `START_LINEAR_ADDR_RECORD` data type: byte_count == 4 and address == 0; -- Rename struct `HexParser` member field `addr` to `start_addr`; -- Replace `int` with `size_t` for function `parse_hex_blob` return type; -- Stop incrementing `record_index` when encountered whitespace; -- Replace `if ((record_index >> 1) - LEN_EXCEPT_DATA != parser.line.byte_count)` with `if ((LEN_EXCEPT_DATA + parser.line.byte_count) * 2 != record_index)` -- Remove unused field `max_sz`; -- Replace `int` with `size_t` for local variable `total_size` in function `parse_hex_blob` -- Rename function `load_image_targphys_hex_as` argument `addr` to `entry`; Su Hang (2): Implement .hex file loader Add QTest testcase for the Intel Hexadecimal Object File Loader. MAINTAINERS | 6 + hw/arm/boot.c | 10 +- hw/core/loader.c | 246 +++++++++++++++++++++++++++++++++++ include/hw/loader.h | 15 +++ tests/Makefile.include | 2 + tests/hex-loader-check-data/test.hex | 12 ++ tests/hexloader-test.c | 56 ++++++++ 7 files changed, 345 insertions(+), 2 deletions(-) create mode 100644 tests/hex-loader-check-data/test.hex create mode 100644 tests/hexloader-test.c -- 2.7.4