From b79e10fce4dfceddbc9adb706d7a3300df5fabe6 Mon Sep 17 00:00:00 2001 From: Markus Metzger Date: Mon, 16 Oct 2023 07:25:19 +0000 Subject: [PATCH 2/2] libipt, ptunit: avoid lto maybe-uninitialized warning Building with GCC 13 and -flto produces In function 'pt_qry_get_offset', inlined from 'get_offset_null' at .../libipt/test/src/ptunit-block_decoder.c:164:12, inlined from 'main' at .../libipt/test/src/ptunit-block_decoder.c:336:2: .../libipt/src/pt_query_decoder.c:380:16: error: 'decoder' may be used uninitialized [-Werror=maybe-uninitialized] 380 | return pt_evt_get_offset(&decoder->evdec, offset); | ^ .../libipt/src/pt_event_decoder.c: In function 'main': .../libipt/src/pt_event_decoder.c:1541:5: note: by argument 1 of type 'const struct pt_event_decoder *' to 'pt_evt_get_offset' declared here 1541 | int pt_evt_get_offset(const struct pt_event_decoder *decoder, uint64_t *offset) | ^ .../libipt/test/src/ptunit-block_decoder.c:157:33: note: 'decoder' declared here 157 | struct pt_block_decoder decoder; | ^ Those are false positive since the decoder object isn't actually used. In &decoder->evdec we compute the address of the event decoder object within the block decoder object. This adds an offset defined by the type. It does not actually dereference the pointer to access an uninitialized decoder object. Initialize the test decoder to avoid those warnings. Fixes #101. Signed-off-by: Markus Metzger --- libipt/test/src/ptunit-block_decoder.c | 4 ++++ libipt/test/src/ptunit-encoder.c | 2 ++ libipt/test/src/ptunit-insn_decoder.c | 4 ++++ libipt/test/src/ptunit-packet_decoder.c | 4 ++++ 4 files changed, 14 insertions(+) diff --git a/libipt/test/src/ptunit-block_decoder.c b/libipt/test/src/ptunit-block_decoder.c index 44249d3..d1ff288 100644 --- a/libipt/test/src/ptunit-block_decoder.c +++ b/libipt/test/src/ptunit-block_decoder.c @@ -158,6 +158,8 @@ static struct ptunit_result get_offset_null(void) uint64_t offset; int errcode; + memset(&decoder, 0, sizeof(decoder)); + errcode = pt_blk_get_offset(NULL, &offset); ptu_int_eq(errcode, -pte_invalid); @@ -184,6 +186,8 @@ static struct ptunit_result get_sync_offset_null(void) uint64_t offset; int errcode; + memset(&decoder, 0, sizeof(decoder)); + errcode = pt_blk_get_sync_offset(NULL, &offset); ptu_int_eq(errcode, -pte_invalid); diff --git a/libipt/test/src/ptunit-encoder.c b/libipt/test/src/ptunit-encoder.c index 15d5eb4..edabe9e 100644 --- a/libipt/test/src/ptunit-encoder.c +++ b/libipt/test/src/ptunit-encoder.c @@ -138,6 +138,8 @@ static struct ptunit_result get_offset_null(void) uint64_t offset; int errcode; + memset(&encoder, 0, sizeof(encoder)); + errcode = pt_enc_get_offset(NULL, &offset); ptu_int_eq(errcode, -pte_invalid); diff --git a/libipt/test/src/ptunit-insn_decoder.c b/libipt/test/src/ptunit-insn_decoder.c index c8447e7..c5a057c 100644 --- a/libipt/test/src/ptunit-insn_decoder.c +++ b/libipt/test/src/ptunit-insn_decoder.c @@ -158,6 +158,8 @@ static struct ptunit_result get_offset_null(void) uint64_t offset; int errcode; + memset(&decoder, 0, sizeof(decoder)); + errcode = pt_insn_get_offset(NULL, &offset); ptu_int_eq(errcode, -pte_invalid); @@ -184,6 +186,8 @@ static struct ptunit_result get_sync_offset_null(void) uint64_t offset; int errcode; + memset(&decoder, 0, sizeof(decoder)); + errcode = pt_insn_get_sync_offset(NULL, &offset); ptu_int_eq(errcode, -pte_invalid); diff --git a/libipt/test/src/ptunit-packet_decoder.c b/libipt/test/src/ptunit-packet_decoder.c index 39f1ede..4cb60ad 100644 --- a/libipt/test/src/ptunit-packet_decoder.c +++ b/libipt/test/src/ptunit-packet_decoder.c @@ -158,6 +158,8 @@ static struct ptunit_result get_offset_null(void) uint64_t offset; int errcode; + memset(&decoder, 0, sizeof(decoder)); + errcode = pt_pkt_get_offset(NULL, &offset); ptu_int_eq(errcode, -pte_invalid); @@ -199,6 +201,8 @@ static struct ptunit_result get_sync_offset_null(void) uint64_t offset; int errcode; + memset(&decoder, 0, sizeof(decoder)); + errcode = pt_pkt_get_sync_offset(NULL, &offset); ptu_int_eq(errcode, -pte_invalid); -- 2.41.0