Skip to content

Commit 289cbd8

Browse files
committed
Fixed coverity issue in acl_kernel_if.cpp: Type: Reliance on integer endianness (INCOMPATIBLE_CAST)
In the three instances where this issue happens, the function acl_kernel_if_read_32b is used at the end of the scope to query about what's inside the acl_kernel_if* kern object. However, they don't do anything with the obtained information. I believe this read operation is performed to confirm that the acl_kernel_if* kern has been written properly. So if the read operation successed, then the write operation must have also succeeded as well. Therefore, instead of type-punning casting to pass an existing variable, I created a new dummy variable with the only purpose for the read operation to confirm that the read is correct.
1 parent ce73b52 commit 289cbd8

File tree

1 file changed

+23
-21
lines changed

1 file changed

+23
-21
lines changed

src/acl_kernel_if.cpp

Lines changed: 23 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -3,12 +3,12 @@
33

44
// System headers.
55
#include <cassert>
6+
#include <cinttypes>
67
#include <cstdint>
78
#include <stdio.h>
89
#include <stdlib.h>
910
#include <string>
1011
#include <vector>
11-
#include <cinttypes>
1212

1313
// Internal headers.
1414
#include <acl_auto_configure.h>
@@ -289,8 +289,8 @@ static int acl_kernel_if_read_32b(acl_kernel_if *kern, unsigned int addr,
289289
r = kern->io.read(&kern->io, (dev_addr_t)addr, (char *)val, (size_t)size);
290290
if (r < size) {
291291
kern->io.printf(
292-
"HAL Kern Error: Read failed from addr %x, read %zu expected %zu\n", addr,
293-
r, size);
292+
"HAL Kern Error: Read failed from addr %x, read %zu expected %zu\n",
293+
addr, r, size);
294294
return -1;
295295
}
296296
return 0;
@@ -335,8 +335,8 @@ static int acl_kernel_rom_read_block(acl_kernel_if *kern, unsigned int addr,
335335
r = kern->io.read(&kern->io, (dev_addr_t)addr, config_rom, (size_t)size);
336336
if (r < size) {
337337
kern->io.printf(
338-
"HAL Kern Error: Read failed from addr %x, read %zu expected %zu\n", addr,
339-
r, size);
338+
"HAL Kern Error: Read failed from addr %x, read %zu expected %zu\n",
339+
addr, r, size);
340340
return -1;
341341
}
342342
return 0;
@@ -382,9 +382,10 @@ static int acl_kernel_if_write_64b(acl_kernel_if *kern, unsigned int addr,
382382
r = (int)kern->io.write(&kern->io, (dev_addr_t)addr, (char *)&val,
383383
(size_t)size);
384384
if (r < size) {
385-
kern->io.printf("HAL Kern Error: Write failed to addr %x with value %" PRIu64 ", "
386-
"wrote %d, expected %d\n",
387-
addr, val, r, size);
385+
kern->io.printf(
386+
"HAL Kern Error: Write failed to addr %x with value %" PRIu64 ", "
387+
"wrote %d, expected %d\n",
388+
addr, val, r, size);
388389
return -1;
389390
}
390391
return 0;
@@ -452,8 +453,8 @@ static uintptr_t acl_kernel_cra_set_segment(acl_kernel_if *kern,
452453
acl_kernel_if_write_32b(kern, OFFSET_KERNEL_CRA_SEGMENT,
453454
(unsigned int)segment);
454455
kern->cur_segment = segment;
455-
acl_kernel_if_read_32b(kern, OFFSET_KERNEL_CRA_SEGMENT,
456-
(unsigned int *)&segment);
456+
unsigned int new_segment;
457+
acl_kernel_if_read_32b(kern, OFFSET_KERNEL_CRA_SEGMENT, &new_segment);
457458
}
458459

459460
return segment_offset;
@@ -469,8 +470,8 @@ static uintptr_t acl_kernel_cra_set_segment_rom(acl_kernel_if *kern,
469470
acl_kernel_if_write_32b(kern, OFFSET_KERNEL_CRA_SEGMENT,
470471
(unsigned int)segment);
471472
kern->cur_segment = segment;
472-
acl_kernel_if_read_32b(kern, OFFSET_KERNEL_CRA_SEGMENT,
473-
(unsigned int *)&segment);
473+
unsigned int new_segment;
474+
acl_kernel_if_read_32b(kern, OFFSET_KERNEL_CRA_SEGMENT, &new_segment);
474475
}
475476

476477
return segment_offset;
@@ -931,10 +932,10 @@ int acl_kernel_if_update(const acl_device_def_autodiscovery_t &devdef,
931932
OFFSET_KERNEL_CRA + devdef.hal_info[ii].csr.address;
932933
kern->accel_csr[ii].bytes = devdef.hal_info[ii].csr.num_bytes;
933934

934-
ACL_KERNEL_IF_DEBUG_MSG(kern, "Kernel_%s CSR { 0x%08" PRIuPTR ", 0x%08" PRIuPTR " }\n",
935-
devdef.accel[ii].iface.name.c_str(),
936-
kern->accel_csr[ii].address,
937-
kern->accel_csr[ii].bytes);
935+
ACL_KERNEL_IF_DEBUG_MSG(
936+
kern, "Kernel_%s CSR { 0x%08" PRIuPTR ", 0x%08" PRIuPTR " }\n",
937+
devdef.accel[ii].iface.name.c_str(), kern->accel_csr[ii].address,
938+
kern->accel_csr[ii].bytes);
938939
}
939940

940941
// The Kernel performance monitor registers
@@ -943,10 +944,10 @@ int acl_kernel_if_update(const acl_device_def_autodiscovery_t &devdef,
943944
OFFSET_KERNEL_CRA + devdef.hal_info[ii].perf_mon.address;
944945
kern->accel_perf_mon[ii].bytes = devdef.hal_info[ii].perf_mon.num_bytes;
945946

946-
ACL_KERNEL_IF_DEBUG_MSG(kern, "Kernel_%s perf_mon { 0x%08" PRIuPTR ", 0x%08" PRIuPTR " }\n",
947-
devdef.accel[ii].iface.name.c_str(),
948-
kern->accel_perf_mon[ii].address,
949-
kern->accel_perf_mon[ii].bytes);
947+
ACL_KERNEL_IF_DEBUG_MSG(
948+
kern, "Kernel_%s perf_mon { 0x%08" PRIuPTR ", 0x%08" PRIuPTR " }\n",
949+
devdef.accel[ii].iface.name.c_str(), kern->accel_perf_mon[ii].address,
950+
kern->accel_perf_mon[ii].bytes);
950951

951952
// printf info
952953
kern->accel_num_printfs[ii] =
@@ -1614,8 +1615,9 @@ void acl_kernel_if_update_status(acl_kernel_if *kern) {
16141615
acl_kernel_if_write_32b(kern, OFFSET_KERNEL_CRA_SEGMENT,
16151616
(unsigned int)segment_pre_irq);
16161617
kern->cur_segment = segment_pre_irq;
1618+
unsigned int new_segment_pre_irq;
16171619
acl_kernel_if_read_32b(kern, OFFSET_KERNEL_CRA_SEGMENT,
1618-
(unsigned int *)&segment_pre_irq);
1620+
&new_segment_pre_irq);
16191621
}
16201622
}
16211623

0 commit comments

Comments
 (0)