Skip to content

Commit 8f58d6f

Browse files
committed
Suppress Cppcheck warnings: arithOperationsOnVoidPointer
Cppcheck was complaining: > When using void pointers in calculations, the behaviour is undefined. > [arithOperationsOnVoidPointer]
1 parent a26fdea commit 8f58d6f

File tree

4 files changed

+19
-15
lines changed

4 files changed

+19
-15
lines changed

src/pci.c

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ static void pci_address_io(void *owner,
1111
uint8_t size)
1212
{
1313
struct pci *pci = (struct pci *) owner;
14-
void *p = (void *) &pci->pci_addr + offset;
14+
void *p = (void *) ((uintptr_t) &pci->pci_addr + offset);
1515
/* The data in port 0xCF8 is as an address when Guest Linux accesses the
1616
* configuration space.
1717
*/
@@ -81,7 +81,7 @@ static void pci_config_write(struct pci_dev *dev,
8181
uint64_t offset,
8282
uint8_t size)
8383
{
84-
void *p = dev->hdr + offset;
84+
void *p = (void *) ((uintptr_t) dev->hdr + offset);
8585

8686
memcpy(p, data, size);
8787
if (offset == PCI_COMMAND) {
@@ -100,7 +100,7 @@ static void pci_config_read(struct pci_dev *dev,
100100
uint64_t offset,
101101
uint8_t size)
102102
{
103-
void *p = dev->hdr + offset;
103+
void *p = (void *) ((uintptr_t) dev->hdr + offset);
104104
memcpy(data, p, size);
105105
}
106106

src/pci.h

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,9 +19,10 @@ union pci_config_address {
1919
uint32_t value;
2020
};
2121

22-
#define PCI_HDR_READ(hdr, offset, width) (*((uint##width##_t *) (hdr + offset)))
22+
#define PCI_HDR_READ(hdr, offset, width) \
23+
(*((uint##width##_t *) ((uintptr_t) hdr + offset)))
2324
#define PCI_HDR_WRITE(hdr, offset, value, width) \
24-
((uint##width##_t *) (hdr + offset))[0] = value
25+
((uint##width##_t *) ((uintptr_t) hdr + offset))[0] = value
2526
#define PCI_BAR_OFFSET(bar) (PCI_BASE_ADDRESS_0 + ((bar) << 2))
2627

2728
struct pci_dev {

src/virtio-pci.c

Lines changed: 12 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -64,7 +64,7 @@ static void virtio_pci_select_virtq(struct virtio_pci_dev *dev)
6464

6565
if (select < config->num_queues) {
6666
uint64_t offset = offsetof(struct virtio_pci_common_cfg, queue_size);
67-
memcpy((void *) config + offset, &dev->vq[select].info,
67+
memcpy((void *) ((uintptr_t) config + offset), &dev->vq[select].info,
6868
sizeof(struct virtq_info));
6969
} else {
7070
config->queue_size = 0;
@@ -89,7 +89,7 @@ static void virtio_pci_space_write(struct virtio_pci_dev *dev,
8989
uint8_t size)
9090
{
9191
if (offset < offsetof(struct virtio_pci_config, dev_cfg)) {
92-
memcpy((void *) &dev->config + offset, data, size);
92+
memcpy((void *) ((uintptr_t) &dev->config + offset), data, size);
9393
switch (offset) {
9494
case VIRTIO_PCI_COMMON_DFSELECT:
9595
virtio_pci_select_device_feature(dev);
@@ -115,8 +115,9 @@ static void virtio_pci_space_write(struct virtio_pci_dev *dev,
115115
uint16_t select = dev->config.common_cfg.queue_select;
116116
uint64_t info_offset = offset - VIRTIO_PCI_COMMON_Q_SIZE;
117117
if (select < dev->config.common_cfg.num_queues)
118-
memcpy((void *) &dev->vq[select].info + info_offset, data,
119-
size);
118+
memcpy((void *) ((uintptr_t) &dev->vq[select].info +
119+
info_offset),
120+
data, size);
120121
}
121122
/* guest notify buffer avail */
122123
else if (offset ==
@@ -129,7 +130,7 @@ static void virtio_pci_space_write(struct virtio_pci_dev *dev,
129130
}
130131
/* dev config write */
131132
uint64_t dev_offset = offset - offsetof(struct virtio_pci_config, dev_cfg);
132-
memcpy((void *) dev->config.dev_cfg + dev_offset, data, size);
133+
memcpy((void *) ((uintptr_t) dev->config.dev_cfg + dev_offset), data, size);
133134
}
134135

135136
static void virtio_pci_space_read(struct virtio_pci_dev *dev,
@@ -138,15 +139,16 @@ static void virtio_pci_space_read(struct virtio_pci_dev *dev,
138139
uint8_t size)
139140
{
140141
if (offset < offsetof(struct virtio_pci_config, dev_cfg)) {
141-
memcpy(data, (void *) &dev->config + offset, size);
142+
memcpy(data, (void *) ((uintptr_t) &dev->config + offset), size);
142143
if (offset == offsetof(struct virtio_pci_config, isr_cap)) {
143144
dev->config.isr_cap.isr_status = 0;
144145
}
145146
} else {
146147
/* dev config read */
147148
uint64_t dev_offset =
148149
offset - offsetof(struct virtio_pci_config, dev_cfg);
149-
memcpy(data, (void *) dev->config.dev_cfg + dev_offset, size);
150+
memcpy(data, (void *) ((uintptr_t) dev->config.dev_cfg + dev_offset),
151+
size);
150152
}
151153
}
152154

@@ -169,7 +171,8 @@ static void virtio_pci_set_cap(struct virtio_pci_dev *dev, uint8_t next)
169171
struct virtio_pci_cap *caps[VIRTIO_PCI_CAP_NUM + 1];
170172

171173
for (int i = 1; i < VIRTIO_PCI_CAP_NUM + 1; i++) {
172-
caps[i] = dev->pci_dev.hdr + next;
174+
caps[i] =
175+
(struct virtio_pci_cap *) ((uintptr_t) dev->pci_dev.hdr + next);
173176
*caps[i] = (struct virtio_pci_cap){
174177
.cap_vndr = PCI_CAP_ID_VNDR,
175178
.cfg_type = i,
@@ -280,4 +283,4 @@ void virtio_pci_enable(struct virtio_pci_dev *dev)
280283
void virtio_pci_exit()
281284
{
282285
/* TODO: exit of the virtio pci device */
283-
}
286+
}

src/vm.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -100,7 +100,7 @@ int vm_load_diskimg(vm_t *v, const char *diskimg_file)
100100
void vm_handle_io(vm_t *v, struct kvm_run *run)
101101
{
102102
uint64_t addr = run->io.port;
103-
void *data = (void *) run + run->io.data_offset;
103+
void *data = (void *) ((uintptr_t) run + run->io.data_offset);
104104
bool is_write = run->io.direction == KVM_EXIT_IO_OUT;
105105

106106
for (int i = 0; i < run->io.count; i++) {

0 commit comments

Comments
 (0)