diff --git a/components/app_update/esp_app_desc.c b/components/app_update/esp_app_desc.c index af3e4a5e82..db6a33529d 100644 --- a/components/app_update/esp_app_desc.c +++ b/components/app_update/esp_app_desc.c @@ -89,7 +89,10 @@ int IRAM_ATTR esp_ota_get_app_elf_sha256(char* dst, size_t size) static bool first_call = true; if (first_call) { first_call = false; - const uint8_t* src = esp_app_desc.app_elf_sha256; + // At -O2 optimization level, GCC optimizes out the copying of the first byte of the app_elf_sha256, + // because it is zero at compile time, and only modified afterwards by esptool. + // Casting to volatile disables the optimization. + const volatile uint8_t* src = (const volatile uint8_t*)esp_app_desc.app_elf_sha256; for (size_t i = 0; i < sizeof(s_app_elf_sha256); ++i) { s_app_elf_sha256[i] = src[i]; }