diff --git a/CHANGELOG.md b/CHANGELOG.md index 5c618a75..ff21ad2d 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,41 @@ # stlink Changelog +# v1.8.1 + +Release date: 2024-09-01 + +This release drops support for some older operating systems. Check project README for details. + +Updated system requirements: +- `cmake` >= 3.13.0 +- `libusb` >= 1.0.22 +- `libgtk-dev` >= 3.22.30 + +Features: +- Added support for STLINK-V3PWR ([#1388](https://github.com/stlink-org/stlink/pull/1388), [#1389](https://github.com/stlink-org/stlink/pull/1389)) +- Dynamic SRAM size for F4 memory map ([#1390](https://github.com/stlink-org/stlink/pull/1390)) +- Modifications to allow building of toolset in OpenBSD ([#1392](https://github.com/stlink-org/stlink/pull/1392)) +- --mass-erase for st-flash write commands ([#1397](https://github.com/stlink-org/stlink/pull/1397)) +- Support for setting option bytes to STM32L41x_L42x (according to RM0394) ([#1405](https://github.com/stlink-org/stlink/pull/1405), [#1412](https://github.com/stlink-org/stlink/pull/1412), [#1413](https://github.com/stlink-org/stlink/pull/1413)) +- Improvements for stlink-gui ([#1411](https://github.com/stlink-org/stlink/pull/1411)) +- [STM32U575/585]: Added support for OTP bytes ([#1419](https://github.com/stlink-org/stlink/pull/1419)) +- [STM32Gx]: Added erase support for multi-bank products ([#1420](https://github.com/stlink-org/stlink/pull/1420)) + +Updates & changes: +- Debian 11 x64 doesn't work with v1.8.0 because of incompatible glibc ([#1376](https://github.com/stlink-org/stlink/pull/1376), commit [#ece34ef](https://github.com/stlink-org/stlink/commit/ece34efbce579ca7d367c58f903ffa6dc7bd96e6)) +- [STM32L4R5ZI]: gdb-multiarch uses wrong osabi ([#1386](https://github.com/stlink-org/stlink/pull/1386), [#1387](https://github.com/stlink-org/stlink/pull/1387), [#1394](https://github.com/stlink-org/stlink/pull/1394)) +- [doc] STM32H573 reports chipid 0x000 ([#1398](https://github.com/stlink-org/stlink/pull/1398), commit [#3655871](https://github.com/stlink-org/stlink/commit/3655871f8dd97294bbee191c1c7341c8a129af2f)) + +Fixes: + +- Cmake minimal version mismatch ([#1374](https://github.com/stlink-org/stlink/pull/1374), [#1375](https://github.com/stlink-org/stlink/pull/1375), commit [#1ee7f6b](https://github.com/stlink-org/stlink/commit/1ee7f6b6c05e305112bb070ae571ebbe26c55946)) +- Added a graceful way to terminate st-util ([#1395](https://github.com/stlink-org/stlink/pull/1395), [#1396](https://github.com/stlink-org/stlink/pull/1396)) +- [st-trace] Bug in function static bool read_trace( ) ([#1400](https://github.com/stlink-org/stlink/pull/1400), commit [#32ce4bf](https://github.com/stlink-org/stlink/commit/32ce4bf88a816fb6a9841a33e6c5f6b593a9b927)) +- Fixed STM32H7 FLASH_OPTCR unlock sequence ([#1401](https://github.com/stlink-org/stlink/pull/1401), [#1416](https://github.com/stlink-org/stlink/pull/1416)) +- Restored support for STM32G4 Cat4 device STM32G491 ([#1403](https://github.com/stlink-org/stlink/pull/1403), [#1414](https://github.com/stlink-org/stlink/pull/1414)) +- Fixed STM32H7 option byte programming ([#1417](https://github.com/stlink-org/stlink/pull/1417)) +- Latest release stlink-1.8.0-win32 doesn't run ([#1364](https://github.com/stlink-org/stlink/pull/1364), [#1410](https://github.com/stlink-org/stlink/pull/1410) commit [_commit-ID TBD_]) + # v1.8.0 Release date: 2024-02-01 diff --git a/cmake/modules/Findlibusb.cmake b/cmake/modules/Findlibusb.cmake index d26639b9..15afb000 100644 --- a/cmake/modules/Findlibusb.cmake +++ b/cmake/modules/Findlibusb.cmake @@ -12,15 +12,15 @@ include(FindPackageHandleStandardArgs) if (CMAKE_SYSTEM_NAME STREQUAL "FreeBSD") # FreeBSD; libusb is integrated into the system # libusb header file - FIND_PATH( - LIBUSB_INCLUDE_DIR NAMES libusb.h + FIND_PATH(LIBUSB_INCLUDE_DIR + NAMES libusb.h HINTS /usr/include ) # libusb library set(LIBUSB_NAME usb) - find_library( - LIBUSB_LIBRARY NAMES ${LIBUSB_NAME} + find_library(LIBUSB_LIBRARY + NAMES ${LIBUSB_NAME} HINTS /usr /usr/local /opt ) @@ -32,16 +32,16 @@ if (CMAKE_SYSTEM_NAME STREQUAL "FreeBSD") # FreeBSD; libus elseif (CMAKE_SYSTEM_NAME STREQUAL "OpenBSD") # OpenBSD; libusb is available from ports # libusb header file - FIND_PATH( - LIBUSB_INCLUDE_DIR NAMES libusb.h + FIND_PATH(LIBUSB_INCLUDE_DIR + NAMES libusb.h HINTS /usr/local/include PATH_SUFFIXES libusb-1.0 ) # libusb library set(LIBUSB_NAME usb-1.0) - find_library( - LIBUSB_LIBRARY NAMES ${LIBUSB_NAME} + find_library(LIBUSB_LIBRARY + NAMES ${LIBUSB_NAME} HINTS /usr/local ) @@ -87,8 +87,8 @@ elseif (WIN32 OR (MINGW AND EXISTS "/etc/debian_version")) # Windows OR cro ) # libusb header file - FIND_PATH( - LIBUSB_INCLUDE_DIR NAMES libusb.h + FIND_PATH(LIBUSB_INCLUDE_DIR + NAMES libusb.h HINTS ${LIBUSB_WIN_OUTPUT_FOLDER}/include PATH_SUFFIXES libusb-1.0 NO_DEFAULT_PATH @@ -97,19 +97,19 @@ elseif (WIN32 OR (MINGW AND EXISTS "/etc/debian_version")) # Windows OR cro if (MINGW OR MSYS) # libusb library (static) - set(LIBUSB_NAME usb-1.0) - find_library( - LIBUSB_LIBRARY NAMES ${LIBUSB_NAME} + set(LIBUSB_NAME libusb-1.0) + find_library(LIBUSB_LIBRARY + NAMES ${LIBUSB_NAME} HINTS ${LIBUSB_WIN_OUTPUT_FOLDER}/MinGW${ARCH}/static NO_DEFAULT_PATH NO_CMAKE_FIND_ROOT_PATH ) else (MSVC) # libusb library - set(LIBUSB_NAME libusb-1.0.lib) - find_library( - LIBUSB_LIBRARY NAMES ${LIBUSB_NAME} - HINTS ${LIBUSB_WIN_OUTPUT_FOLDER}/MS${ARCH}/dll + set(LIBUSB_NAME libusb-1.0) + find_library(LIBUSB_LIBRARY + NAMES ${LIBUSB_NAME} + HINTS ${LIBUSB_WIN_OUTPUT_FOLDER}/MinGW${ARCH}/dll NO_DEFAULT_PATH NO_CMAKE_FIND_ROOT_PATH ) @@ -122,16 +122,16 @@ elseif (WIN32 OR (MINGW AND EXISTS "/etc/debian_version")) # Windows OR cro else () # all other OS (unix-based) # libusb header file - FIND_PATH( - LIBUSB_INCLUDE_DIR NAMES libusb.h + FIND_PATH(LIBUSB_INCLUDE_DIR + NAMES libusb.h HINTS /usr/include PATH_SUFFIXES libusb-1.0 ) # libusb library set(LIBUSB_NAME usb-1.0) - find_library( - LIBUSB_LIBRARY NAMES ${LIBUSB_NAME} + find_library(LIBUSB_LIBRARY + NAMES ${LIBUSB_NAME} HINTS /usr /usr/local ) diff --git a/doc/compiling.md b/doc/compiling.md index 68fc5994..5cd709b2 100644 --- a/doc/compiling.md +++ b/doc/compiling.md @@ -1,5 +1,6 @@ # Compiling from sources + ## Microsoft Windows (10, 11) ### Common Requirements @@ -7,47 +8,36 @@ On Windows users should ensure that the following software is installed: - `git` (_optional, but recommended_) +- `7zip` - `cmake` -- `7-zip` -- `MinGW-w64` +- `MSYS2` ### Installation 1. Install `git` from -2. Install `cmake` from
+2. Install `cmake` from --> Binary distributions --> Windows x64 Installer
Ensure that you add cmake to the $PATH system variable when following the instructions by the setup assistant. -3. Install MinGW-w64
- Download **MinGW-w64** from . Extract content to `C:\mingw-w64\` and add `C:\mingw-w64\bin\` to PATH-Variable.
- -4. Create a new destination folder at a place of your choice -5. Open the command-line (cmd.exe) and execute `cd C:\$Path-to-your-destination-folder$\` -6. Fetch the project sourcefiles by running `git clone https://github.com/stlink-org/stlink.git`from the command-line (cmd.exe)
- or download and extract the stlink zip-sourcefolder from the Release page on GitHub. +3. Install `MSYS2` from
+ Follow the installation instructions on the website. +4. Install `mingw-w64` via the MSYS2 UCRT64 Shell: `pacman -S mingw-w64-x86_64-make` +5. Fetch the project sourcefiles by running `git clone https://github.com/stlink-org/stlink.git`from the command-line (cmd.exe)
+ or download and extract (`7zip`) the stlink zip-sourcefolder from the Release page on GitHub. ### Building -#### MinGW-w64 - -1. Open command-line with administrator privileges -2. Move to the `stlink` directory +1. Open the command-line (cmd.exe) with administrator privileges +2. Move to the `stlink` directory with `cd C:\$Path-to-your-stlink-folder$\` 3. Execute `mingw64-build.bat` -NOTE:
-Per default the build script (currently) uses `C:\mingw-w64\x86_64-8.1.0-release-win32-sjlj-rt_v6-rev0\mingw64\bin`.
-When installing different toolchains make sure to update the path in the `mingw64-build.bat`.
-This can be achieved by opening the .bat file with a common text editor. - -Options: - -- `/m` - compilation runs in parallel utilizing multiple cores -- `/p:Configuration=Release` - generates _Release_, optimized build. - -Directory `\build\Release` contains final executables. -(`st-util.exe` is located in `\build\src\gdbserver\Release`). +Depending on the flavour of compilation the final executables will be placed in the following directories: +- Local compilation: `\build-mingw\bin` +- Local installation: `C:\Program Files (x86)\stlink\bin` +- Package Generation (portable): `C:\Users\swift\Desktop\stlink\build-mingw\dist` **NOTE:** -[ST-LINK drivers](https://www.st.com/en/development-tools/stsw-link009.html) are required for `stlink` to work. +[ST-LINK drivers](https://www.st.com/en/development-tools/stsw-link009.html) are required for programmers to work with `stlink`. + ## Linux diff --git a/mingw64-build.bat b/mingw64-build.bat index 73561840..54207998 100644 --- a/mingw64-build.bat +++ b/mingw64-build.bat @@ -2,9 +2,9 @@ mkdir build-mingw cd build-mingw -set PATH=C:\Program Files\CMake\bin;C:\mingw-w64\x86_64-13.2.0-release-win32-seh-msvcrt-rt_v11-rev1\mingw64\bin;%PATH% +set PATH=C:\Program Files\CMake\bin;C:\msys64\ucrt64\bin;C:\msys64\mingw64\bin;%PATH% cmake -G "MinGW Makefiles" .. -mingw32-make clean +mingw32-make mingw32-make install mingw32-make package cd .. diff --git a/src/st-util/gdb-server.c b/src/st-util/gdb-server.c index c2541d4a..28dd9282 100644 --- a/src/st-util/gdb-server.c +++ b/src/st-util/gdb-server.c @@ -989,7 +989,7 @@ int32_t serve(stlink_t *sl, st_state_t *st) { } uint32_t queryNameLength = (uint32_t) (separator - &packet[1]); - char* queryName = calloc(queryNameLength + 1, 1); + char* queryName = calloc(1, queryNameLength + 1); strncpy(queryName, &packet[1], queryNameLength); DLOG("query: %s;%s\n", queryName, params); @@ -1032,7 +1032,7 @@ int32_t serve(stlink_t *sl, st_state_t *st) { if (length == 0) { reply = strdup("l"); } else { - reply = calloc(length + 2, 1); + reply = calloc(1, length + 2); reply[0] = 'm'; strncpy(&reply[1], data, length); } @@ -1191,7 +1191,7 @@ int32_t serve(stlink_t *sl, st_state_t *st) { // Length of decoded data cannot be more than encoded, as escapes are removed. // Additional byte is reserved for alignment fix. - uint8_t *decoded = calloc(data_length + 1, 1); + uint8_t *decoded = calloc(1, data_length + 1); uint32_t dec_index = 0; for (uint32_t i = 0; i < data_length; i++) { @@ -1347,7 +1347,7 @@ int32_t serve(stlink_t *sl, st_state_t *st) { if (ret) { DLOG("g packet: read_all_regs failed\n"); } - reply = calloc(8 * 16 + 1, 1); + reply = calloc(1, 8 * 16 + 1); for (int32_t i = 0; i < 16; i++) { sprintf(&reply[i * 8], "%08x", (uint32_t) htonl(regp.r[i])); @@ -1398,7 +1398,7 @@ int32_t serve(stlink_t *sl, st_state_t *st) { if (reply == NULL) { // if reply is set to "E00", skip - reply = calloc(8 + 1, 1); + reply = calloc(1, 8 + 1); sprintf(reply, "%08x", myreg); } @@ -1479,7 +1479,7 @@ int32_t serve(stlink_t *sl, st_state_t *st) { // read failed somehow, don't return stale buffer - reply = calloc(count * 2 + 1, 1); + reply = calloc(1, count * 2 + 1); for (uint32_t i = 0; i < count; i++) { reply[i * 2 + 0] = hex[sl->q_buf[i + adj_start] >> 4]; diff --git a/src/stlink-lib/common.c b/src/stlink-lib/common.c index 9ebc4ac3..83b9a46d 100644 --- a/src/stlink-lib/common.c +++ b/src/stlink-lib/common.c @@ -879,7 +879,7 @@ int32_t stlink_parse_ihex(const char *path, uint8_t erased_pattern, uint8_t **me } *size = (end - *begin) + 1; - data = calloc(*size, 1); // use calloc to get NULL if out of memory + data = calloc(1, *size); // use calloc to get NULL if out of memory if (!data) { ELOG("Cannot allocate %u bytes\n", (*size));