Stlink: 開発ブランチからのビルドエラー、cpuidの問題

作成日 2020年04月20日  ·  7コメント  ·  ソース: stlink-org/stlink

ビルドコミット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

どうすれば修正できますか?

bucompilation bufixed errocompilation olinux staturesolved

全てのコメント7件

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は初期化されていないものを使用する場合があります。

--- 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、variant =%#x \ n"、cpuid.implementer_id、cpuid.variant);
printf( "cpuid:part =%#x、rev =%#x \ n"、cpuid.part、cpuid.revision);

stlink_cpu_idに戻り値チェックを追加し、それらの値をゼロに初期化することで修正できると思います。 やってみます。

構成中に次の理由で-Werror=maybe-uninitializedがあります。

-- Performing Test C_SUPPORTS_WMAYBE_UNINITIALIZED
-- Performing Test C_SUPPORTS_WMAYBE_UNINITIALIZED - Success

@Vascom私のブランチをテストしてます
うまくいけばPRを上げます。

@Vascom私のブランチをテストしてます
うまくいけばPRを上げます。

はい、動作します。

このページは役に立ちましたか?
0 / 5 - 0 評価

関連する問題

bolorkhuu picture bolorkhuu  ·  11コメント

rayslinky picture rayslinky  ·  12コメント

maked0n picture maked0n  ·  8コメント

Vascom picture Vascom  ·  7コメント

gorynch picture gorynch  ·  5コメント