๋น๋ ์ปค๋ฐ c7874f805c63c60285f2b190f6589da8ae5e47fa๋ฅผ ์๋ํฉ๋๋ค.
๊ทธ๋ฆฌ๊ณ ๋ค์ ์ค๋ฅ๋ก ์คํจํ์ต๋๋ค.
/builddir/build/BUILD/stlink-org-stlink-c7874f8/tests/usb.c: In function 'main':
/builddir/build/BUILD/stlink-org-stlink-c7874f8/tests/usb.c:34:9: error: 'cpuid.revision' may be used uninitialized in this func
tion [-Werror=maybe-uninitialized]
34 | printf("cpuid:part = %#x, rev = %#x\n", cpuid.part, cpuid.revision);
| ^
/builddir/build/BUILD/stlink-org-stlink-c7874f8/tests/usb.c:31:27: note: 'cpuid.revision' was declared here
31 | cortex_m3_cpuid_t cpuid;
| ^
/builddir/build/BUILD/stlink-org-stlink-c7874f8/tests/usb.c:34:9: error: 'cpuid.part' may be used uninitialized in this function [-Werror=maybe-uninitialized]
34 | printf("cpuid:part = %#x, rev = %#x\n", cpuid.part, cpuid.revision);
| ^
/builddir/build/BUILD/stlink-org-stlink-c7874f8/tests/usb.c:31:27: note: 'cpuid.part' was declared here
31 | cortex_m3_cpuid_t cpuid;
| ^
/builddir/build/BUILD/stlink-org-stlink-c7874f8/tests/usb.c:33:9: error: 'cpuid.variant' may be used uninitialized in this function [-Werror=maybe-uninitialized]
33 | printf("cpuid:impl_id = %0#x, variant = %#x\n", cpuid.implementer_id, cpuid.variant);
| ^
/builddir/build/BUILD/stlink-org-stlink-c7874f8/tests/usb.c:31:27: note: 'cpuid.variant' was declared here
31 | cortex_m3_cpuid_t cpuid;
| ^
/builddir/build/BUILD/stlink-org-stlink-c7874f8/tests/usb.c:33:9: error: 'cpuid.implementer_id' may be used uninitialized in this function [-Werror=maybe-uninitialized]
33 | printf("cpuid:impl_id = %0#x, variant = %#x\n", cpuid.implementer_id, cpuid.variant);
| ^
/builddir/build/BUILD/stlink-org-stlink-c7874f8/tests/usb.c:31:27: note: 'cpuid.implementer_id' was declared here
31 | cortex_m3_cpuid_t cpuid;
| ^
lto1: all warnings being treated as errors
์ด๋ป๊ฒ ๊ณ ์น ์ ์์ต๋๊น?
macOS์์๋ ์ฝ๋๊ฐ ์ ๋น๋๋ฉ๋๋ค.
src/common.c
int stlink_cpu_id(stlink_t *sl, cortex_m3_cpuid_t *cpuid) {
uint32_t raw;
if (stlink_read_debug32(sl, STLINK_REG_CM3_CPUID, &raw))
return -1;
cpuid->implementer_id = (raw >> 24) & 0x7f;
cpuid->variant = (raw >> 20) & 0xf;
cpuid->part = (raw >> 4) & 0xfff;
cpuid->revision = raw & 0xf;
return 0;
}
cpuid.part ๋ฐ cpuid.revision์ด ์ค์ ๋ก ์ฌ๊ธฐ์์ ์ด๊ธฐํ๋ ๊ฒ ๊ฐ์ต๋๋ค. ์ปดํ์ผ๋ฌ๊ฐ ์ค์๋ํ ์ ์์ต๋๊น?
if (stlink_read_debug32(sl, STLINK_REG_CM3_CPUID, &raw))
return -1;
์ด ๊ฒฝ์ฐ cpuid.*๋ ์ด๊ธฐํ๋์ง ์์ ์ํ๋ก ์ ์ง๋ฉ๋๋ค.
Ubuntu์์๋ ์ฑ๊ณต์ ์ผ๋ก ์ปดํ์ผ๋์์ต๋๋ค. ๋ ์ง์คํฐ ์ฝ๊ธฐ ์ค๋ฅ์ ๊ฒฝ์ฐ ๋ณ์ cpuid๋ uninited๋ฅผ ์ฌ์ฉํ ์ ์์ต๋๋ค.
--- a/tests/usb.c
+++ b/tests/usb.c
@@ -29,7 +29,11 @@ int main(int ac, char** av) {
printf("-- core_id: %#x\n", sl->core_id);cortex_m3_cpuid_t cpuid;
- stlink_cpu_id(sl, &cpuid);
+ if (stlink_cpu_id(sl, &cpuid))
+ {
+ printf("์ ์ ์๋ ์นฉ\n");
+ memset(&cpuid, 0, sizeof(cortex_m3_cpuid_t))
+ }
printf("cpuid:impl_id = %0#x, ๋ณํ = %#x\n", cpuid.implementer_id, cpuid.variant);
printf("cpuid:part = %#x, rev = %#x\n", cpuid.part, cpuid.revision);
stlink_cpu_id์ ๋ฐํ ๊ฐ ๊ฒ์ฌ๋ฅผ ์ถ๊ฐํ๊ณ ํด๋น ๊ฐ์ 0์ผ๋ก ์ด๊ธฐํํ๋ฉด ๋ฌธ์ ๊ฐ ํด๊ฒฐ๋ ์ ์๋ค๊ณ ์๊ฐํฉ๋๋ค. ๋๋ ๊ทธ๊ฒ์ ์๋ ํ ๊ฒ์ด๋ค.
๊ตฌ์ฑํ๋ ๋์ -Werror=maybe-uninitialized
์์ต๋๋ค.
-- Performing Test C_SUPPORTS_WMAYBE_UNINITIALIZED
-- Performing Test C_SUPPORTS_WMAYBE_UNINITIALIZED - Success
@Vascom ๋ด ์ง์ ์ ํ
์คํธ https://github.com/chenguokai/stlink/tree/issue937 ?
๊ทธ๊ฒ์ด ํจ๊ณผ๊ฐ ์๋ค๋ฉด, ๋๋ PR์ ์ฌ๋ฆด ๊ฒ์
๋๋ค.
@Vascom ๋ด ์ง์ ์ ํ ์คํธ https://github.com/chenguokai/stlink/tree/issue937 ?
๊ทธ๊ฒ์ด ํจ๊ณผ๊ฐ ์๋ค๋ฉด, ๋๋ PR์ ์ฌ๋ฆด ๊ฒ์ ๋๋ค.
์, ์๋ํฉ๋๋ค.