This is an automated email from the ASF dual-hosted git repository. janc pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/mynewt-nimble.git
The following commit(s) were added to refs/heads/master by this push: new 3fde0852 nimble/phy/nrf: Fix build with GCC 11.1 3fde0852 is described below commit 3fde0852fc00b7984f3cec139d0dca90ad3d5399 Author: Szymon Janc <szymon.j...@codecoup.pl> AuthorDate: Mon Apr 25 11:17:31 2022 +0200 nimble/phy/nrf: Fix build with GCC 11.1 Looks like GCC 11.1 doesn't like current code. The looks OK though... Error: repos/apache-mynewt-nimble/nimble/drivers/nrf52/src/ble_hw.c: In function 'ble_hw_get_static_addr': repos/apache-mynewt-nimble/nimble/drivers/nrf52/src/ble_hw.c:118:9: error: 'memcpy' offset [0, 3] is out of the bounds [0, 0] [-Werror=array-bounds] 118 | memcpy(addr->val, (void *)&NRF_FICR->DEVICEADDR[0], 4); | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ repos/apache-mynewt-nimble/nimble/drivers/nrf52/src/ble_hw.c:119:9: error: 'memcpy' offset [0, 1] is out of the bounds [0, 0] [-Werror=array-bounds] 119 | memcpy(&addr->val[4], (void *)&NRF_FICR->DEVICEADDR[1], 2); --- nimble/drivers/nrf51/src/ble_hw.c | 10 ++++++++-- nimble/drivers/nrf52/src/ble_hw.c | 10 ++++++++-- nimble/drivers/nrf5340/src/ble_hw.c | 10 ++++++++-- 3 files changed, 24 insertions(+), 6 deletions(-) diff --git a/nimble/drivers/nrf51/src/ble_hw.c b/nimble/drivers/nrf51/src/ble_hw.c index 437efd4f..fb6e844b 100644 --- a/nimble/drivers/nrf51/src/ble_hw.c +++ b/nimble/drivers/nrf51/src/ble_hw.c @@ -88,11 +88,17 @@ ble_hw_get_public_addr(ble_addr_t *addr) int ble_hw_get_static_addr(ble_addr_t *addr) { + uint32_t addr_high; + uint32_t addr_low; int rc; if ((NRF_FICR->DEVICEADDRTYPE & 1) == 1) { - memcpy(addr->val, (void *)&NRF_FICR->DEVICEADDR[0], 4); - memcpy(&addr->val[4], (void *)&NRF_FICR->DEVICEADDR[1], 2); + addr_low = NRF_FICR->DEVICEADDR[0]; + addr_high = NRF_FICR->DEVICEADDR[1]; + + memcpy(addr->val, &addr_low, 4); + memcpy(&addr->val[4], &addr_high, 2); + addr->val[5] |= 0xc0; addr->type = BLE_ADDR_RANDOM; rc = 0; diff --git a/nimble/drivers/nrf52/src/ble_hw.c b/nimble/drivers/nrf52/src/ble_hw.c index ef4c28b0..0accbbf4 100644 --- a/nimble/drivers/nrf52/src/ble_hw.c +++ b/nimble/drivers/nrf52/src/ble_hw.c @@ -112,11 +112,17 @@ ble_hw_get_public_addr(ble_addr_t *addr) int ble_hw_get_static_addr(ble_addr_t *addr) { + uint32_t addr_high; + uint32_t addr_low; int rc; if ((NRF_FICR->DEVICEADDRTYPE & 1) == 1) { - memcpy(addr->val, (void *)&NRF_FICR->DEVICEADDR[0], 4); - memcpy(&addr->val[4], (void *)&NRF_FICR->DEVICEADDR[1], 2); + addr_low = NRF_FICR->DEVICEADDR[0]; + addr_high = NRF_FICR->DEVICEADDR[1]; + + memcpy(addr->val, &addr_low, 4); + memcpy(&addr->val[4], &addr_high, 2); + addr->val[5] |= 0xc0; addr->type = BLE_ADDR_RANDOM; rc = 0; diff --git a/nimble/drivers/nrf5340/src/ble_hw.c b/nimble/drivers/nrf5340/src/ble_hw.c index 92bf0249..e578fd05 100644 --- a/nimble/drivers/nrf5340/src/ble_hw.c +++ b/nimble/drivers/nrf5340/src/ble_hw.c @@ -83,11 +83,17 @@ ble_hw_get_public_addr(ble_addr_t *addr) int ble_hw_get_static_addr(ble_addr_t *addr) { + uint32_t addr_high; + uint32_t addr_low; int rc; if ((NRF_FICR_NS->DEVICEADDRTYPE & 1) == 1) { - memcpy(addr->val, (void *)&NRF_FICR_NS->DEVICEADDR[0], 4); - memcpy(&addr->val[4], (void *)&NRF_FICR_NS->DEVICEADDR[1], 2); + addr_low = NRF_FICR_NS->DEVICEADDR[0]; + addr_high = NRF_FICR_NS->DEVICEADDR[1]; + + memcpy(addr->val, &addr_low, 4); + memcpy(&addr->val[4], &addr_high, 2); + addr->val[5] |= 0xc0; addr->type = BLE_ADDR_RANDOM; rc = 0;