From patchwork Sat Apr 18 08:59:09 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Bin Meng X-Patchwork-Id: 237982 List-Id: U-Boot discussion From: bmeng.cn at gmail.com (Bin Meng) Date: Sat, 18 Apr 2020 01:59:09 -0700 Subject: [PATCH 1/3] tools: Remove the out-of-date MinGW support codes Message-ID: <1587200351-12590-1-git-send-email-bmeng.cn@gmail.com> From: Bin Meng MinGW build for U-Boot tools has been broken for years. The official support of Windows build is now MSYS2. Remove the MinGW support codes. Signed-off-by: Bin Meng --- README | 10 ----- tools/mingw_support.c | 113 -------------------------------------------------- tools/mingw_support.h | 45 -------------------- tools/os_support.c | 7 ++-- tools/os_support.h | 3 -- 5 files changed, 3 insertions(+), 175 deletions(-) delete mode 100644 tools/mingw_support.c delete mode 100644 tools/mingw_support.h diff --git a/README b/README index 19dae14..d0af6c6 100644 --- a/README +++ b/README @@ -3186,16 +3186,6 @@ necessary. For example using the ELDK on a 4xx CPU, please enter: $ CROSS_COMPILE=ppc_4xx- $ export CROSS_COMPILE -Note: If you wish to generate Windows versions of the utilities in - the tools directory you can use the MinGW toolchain - (http://www.mingw.org). Set your HOST tools to the MinGW - toolchain and execute 'make tools'. For example: - - $ make HOSTCC=i586-mingw32msvc-gcc HOSTSTRIP=i586-mingw32msvc-strip tools - - Binaries such as tools/mkimage.exe will be created which can - be executed on computers running Windows. - U-Boot is intended to be simple to build. After installing the sources you must configure U-Boot for one specific board type. This is done by typing: diff --git a/tools/mingw_support.c b/tools/mingw_support.c deleted file mode 100644 index 2b17bf7..0000000 --- a/tools/mingw_support.c +++ /dev/null @@ -1,113 +0,0 @@ -// SPDX-License-Identifier: GPL-2.0+ -/* - * Copyright 2008 Extreme Engineering Solutions, Inc. - * - * mmap/munmap implementation derived from: - * Clamav Native Windows Port : mmap win32 compatibility layer - * Copyright (c) 2005-2006 Gianluigi Tiesi - * Parts by Kees Zeelenberg (LibGW32C) - */ - -#include "mingw_support.h" -#include -#include -#include -#include -#include -#include - -int fsync(int fd) -{ - return _commit(fd); -} - -void *mmap(void *addr, size_t len, int prot, int flags, int fd, int offset) -{ - void *map = NULL; - HANDLE handle = INVALID_HANDLE_VALUE; - DWORD cfm_flags = 0, mvf_flags = 0; - - switch (prot) { - case PROT_READ | PROT_WRITE: - cfm_flags = PAGE_READWRITE; - mvf_flags = FILE_MAP_ALL_ACCESS; - break; - case PROT_WRITE: - cfm_flags = PAGE_READWRITE; - mvf_flags = FILE_MAP_WRITE; - break; - case PROT_READ: - cfm_flags = PAGE_READONLY; - mvf_flags = FILE_MAP_READ; - break; - default: - return MAP_FAILED; - } - - handle = CreateFileMappingA((HANDLE) _get_osfhandle(fd), NULL, - cfm_flags, HIDWORD(len), LODWORD(len), NULL); - if (!handle) - return MAP_FAILED; - - map = MapViewOfFile(handle, mvf_flags, HIDWORD(offset), - LODWORD(offset), len); - CloseHandle(handle); - - if (!map) - return MAP_FAILED; - - return map; -} - -int munmap(void *addr, size_t len) -{ - if (!UnmapViewOfFile(addr)) - return -1; - - return 0; -} - -/* Reentrant string tokenizer. Generic version. - Copyright (C) 1991,1996-1999,2001,2004,2007 Free Software Foundation, Inc. - This file is part of the GNU C Library. - */ - -/* Parse S into tokens separated by characters in DELIM. - If S is NULL, the saved pointer in SAVE_PTR is used as - the next starting point. For example: - char s[] = "-abc-=-def"; - char *sp; - x = strtok_r(s, "-", &sp); // x = "abc", sp = "=-def" - x = strtok_r(NULL, "-=", &sp); // x = "def", sp = NULL - x = strtok_r(NULL, "=", &sp); // x = NULL - // s = "abc\0-def\0" -*/ -char *strtok_r(char *s, const char *delim, char **save_ptr) -{ - char *token; - - if (s == NULL) - s = *save_ptr; - - /* Scan leading delimiters. */ - s += strspn(s, delim); - if (*s == '\0') { - *save_ptr = s; - return NULL; - } - - /* Find the end of the token. */ - token = s; - s = strpbrk (token, delim); - if (s == NULL) { - /* This token finishes the string. */ - *save_ptr = memchr(token, '\0', strlen(token)); - } else { - /* Terminate the token and make *SAVE_PTR point past it. */ - *s = '\0'; - *save_ptr = s + 1; - } - return token; -} - -#include "getline.c" diff --git a/tools/mingw_support.h b/tools/mingw_support.h deleted file mode 100644 index e0b8ac3..0000000 --- a/tools/mingw_support.h +++ /dev/null @@ -1,45 +0,0 @@ -/* SPDX-License-Identifier: LGPL-2.0+ */ -/* - * Copyright 2008 Extreme Engineering Solutions, Inc. - */ - -#ifndef __MINGW_SUPPORT_H_ -#define __WINGW_SUPPORT_H_ 1 - -/* Defining __INSIDE_MSYS__ helps to prevent u-boot/mingw overlap */ -#define __INSIDE_MSYS__ 1 - -#include - -/* mmap protections */ -#define PROT_READ 0x1 /* Page can be read */ -#define PROT_WRITE 0x2 /* Page can be written */ -#define PROT_EXEC 0x4 /* Page can be executed */ -#define PROT_NONE 0x0 /* Page can not be accessed */ - -/* Sharing types (must choose one and only one of these) */ -#define MAP_SHARED 0x01 /* Share changes */ -#define MAP_PRIVATE 0x02 /* Changes are private */ - -/* File perms */ -#ifndef S_IRGRP -# define S_IRGRP 0 -#endif -#ifndef S_IWGRP -# define S_IWGRP 0 -#endif - -/* Windows 64-bit access macros */ -#define LODWORD(x) ((DWORD)((DWORDLONG)(x))) -#define HIDWORD(x) ((DWORD)(((DWORDLONG)(x) >> 32) & 0xffffffff)) - -typedef UINT uint; -typedef ULONG ulong; - -int fsync(int fd); -void *mmap(void *, size_t, int, int, int, int); -int munmap(void *, size_t); -char *strtok_r(char *s, const char *delim, char **save_ptr); -#include "getline.h" - -#endif /* __MINGW_SUPPORT_H_ */ diff --git a/tools/os_support.c b/tools/os_support.c index 21e43c8..6890c31 100644 --- a/tools/os_support.c +++ b/tools/os_support.c @@ -3,13 +3,12 @@ * Copyright 2009 Extreme Engineering Solutions, Inc. */ +#include "compiler.h" + /* * Include additional files required for supporting different operating systems */ -#include "compiler.h" -#ifdef __MINGW32__ -#include "mingw_support.c" -#endif + #if defined(__APPLE__) && __DARWIN_C_LEVEL < 200809L #include "getline.c" #endif diff --git a/tools/os_support.h b/tools/os_support.h index 3a2106e..471d605 100644 --- a/tools/os_support.h +++ b/tools/os_support.h @@ -11,9 +11,6 @@ /* * Include additional files required for supporting different operating systems */ -#ifdef __MINGW32__ -#include "mingw_support.h" -#endif #if defined(__APPLE__) && __DARWIN_C_LEVEL < 200809L #include "getline.h" From patchwork Sat Apr 18 08:59:10 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Bin Meng X-Patchwork-Id: 237981 List-Id: U-Boot discussion From: bmeng.cn at gmail.com (Bin Meng) Date: Sat, 18 Apr 2020 01:59:10 -0700 Subject: [PATCH 2/3] mkimage: fit: Unmmap the memory before closing fd in fit_import_data() In-Reply-To: <1587200351-12590-1-git-send-email-bmeng.cn@gmail.com> References: <1587200351-12590-1-git-send-email-bmeng.cn@gmail.com> Message-ID: <1587200351-12590-2-git-send-email-bmeng.cn@gmail.com> From: Lihua Zhao Without calling munmap(), the follow-up call to open() the same file with a flag O_TRUNC seems not to cause any issue on Linux, but it fails on Windows with error like below: Can't open kernel_fdt.itb.tmp: Permission denied Fix this by unmapping the memory before closing fd in fit_import_data(). Signed-off-by: Lihua Zhao Signed-off-by: Bin Meng --- tools/fit_image.c | 24 ++++++++++++++---------- 1 file changed, 14 insertions(+), 10 deletions(-) diff --git a/tools/fit_image.c b/tools/fit_image.c index dd61a81..05c1f00 100644 --- a/tools/fit_image.c +++ b/tools/fit_image.c @@ -556,21 +556,21 @@ static int fit_import_data(struct image_tool_params *params, const char *fname) fprintf(stderr, "%s: Failed to allocate memory (%d bytes)\n", __func__, size); ret = -ENOMEM; - goto err_has_fd; + goto err_munmap; } ret = fdt_open_into(old_fdt, fdt, size); if (ret) { debug("%s: Failed to expand FIT: %s\n", __func__, fdt_strerror(errno)); ret = -EINVAL; - goto err_has_fd; + goto err_munmap; } images = fdt_path_offset(fdt, FIT_IMAGES_PATH); if (images < 0) { debug("%s: Cannot find /images node: %d\n", __func__, images); ret = -EINVAL; - goto err_has_fd; + goto err_munmap; } for (node = fdt_first_subnode(fdt, images); @@ -591,10 +591,12 @@ static int fit_import_data(struct image_tool_params *params, const char *fname) debug("%s: Failed to write property: %s\n", __func__, fdt_strerror(ret)); ret = -EINVAL; - goto err_has_fd; + goto err_munmap; } } + munmap(old_fdt, sbuf.st_size); + /* Close the old fd so we can re-use it. */ close(fd); @@ -609,22 +611,24 @@ static int fit_import_data(struct image_tool_params *params, const char *fname) fprintf(stderr, "%s: Can't open %s: %s\n", params->cmdname, fname, strerror(errno)); ret = -EIO; - goto err_no_fd; + goto err; } if (write(fd, fdt, new_size) != new_size) { debug("%s: Failed to write external data to file %s\n", __func__, strerror(errno)); ret = -EIO; - goto err_has_fd; + goto err; } - ret = 0; - -err_has_fd: + free(fdt); close(fd); -err_no_fd: + return 0; + +err_munmap: munmap(old_fdt, sbuf.st_size); +err: free(fdt); + close(fd); return ret; } From patchwork Sat Apr 18 08:59:11 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Bin Meng X-Patchwork-Id: 237983 List-Id: U-Boot discussion From: bmeng.cn at gmail.com (Bin Meng) Date: Sat, 18 Apr 2020 01:59:11 -0700 Subject: [PATCH 3/3] mkimage: fit: Free buf directly in fit_extract_data() In-Reply-To: <1587200351-12590-1-git-send-email-bmeng.cn@gmail.com> References: <1587200351-12590-1-git-send-email-bmeng.cn@gmail.com> Message-ID: <1587200351-12590-3-git-send-email-bmeng.cn@gmail.com> From: Bin Meng If given ptr to free() is NULL, no operation is performed. Hence we can just free buf directly in fit_extract_data(). Signed-off-by: Bin Meng --- tools/fit_image.c | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/tools/fit_image.c b/tools/fit_image.c index 05c1f00..965061d 100644 --- a/tools/fit_image.c +++ b/tools/fit_image.c @@ -527,8 +527,7 @@ static int fit_extract_data(struct image_tool_params *params, const char *fname) err_munmap: munmap(fdt, sbuf.st_size); err: - if (buf) - free(buf); + free(buf); close(fd); return ret; }