From 501d652f17f7bb00fa0892b12ed3d3b3d09ab1c5 Mon Sep 17 00:00:00 2001 From: Bartlomiej Paczek Date: Fri, 8 Aug 2025 13:46:06 +0200 Subject: [PATCH 01/13] MISRA: Adapting Kernel to MISRA: - compliant with all required rules - parasoft suppress added in places where complaince is not possible YT ID: DO-3 Co-authored-by: JKwacz --- .codespell_ignore | 1 + .gitignore | 1 + hal/aarch64/arch/cpu.h | 8 +- hal/aarch64/cpu.c | 2 +- hal/aarch64/exceptions.c | 2 +- hal/aarch64/hal.c | 1 - hal/aarch64/string.c | 2 +- hal/aarch64/zynqmp/zynqmp.c | 13 +- hal/aarch64/zynqmp/zynqmp.h | 2 +- hal/aarch64/zynqmp/zynqmp_regs.h | 90 +-- hal/armv7a/_armv7a.S | 4 +- hal/armv7a/_interrupts.S | 2 +- hal/armv7a/arch/cpu.h | 22 +- hal/armv7a/arch/pmap.h | 30 +- hal/armv7a/cpu.c | 2 +- hal/armv7a/exceptions.c | 2 +- hal/armv7a/hal.c | 3 +- hal/armv7a/imx6ull/config.h | 4 +- hal/armv7a/pmap.c | 2 +- hal/armv7a/string.c | 2 +- hal/armv7m/arch/cpu.h | 22 +- hal/armv7m/arch/pmap.h | 24 +- hal/armv7m/cpu.c | 4 +- hal/armv7m/exceptions.c | 2 +- hal/armv7m/hal.c | 3 - hal/armv7m/imxrt/_init.S | 4 +- hal/armv7m/imxrt/interrupts.c | 2 +- hal/armv7m/pmap.c | 19 +- hal/armv7m/stm32/_init.S | 4 +- hal/armv7m/string.c | 2 +- hal/armv7r/arch/cpu.h | 89 +-- hal/armv7r/arch/interrupts.h | 2 +- hal/armv7r/arch/spinlock.h | 1 + hal/armv7r/arch/types.h | 1 - hal/armv7r/armv7r.h | 15 +- hal/armv7r/cpu.c | 134 ++--- hal/armv7r/exceptions.c | 131 ++--- hal/armv7r/hal.c | 11 +- hal/armv7r/pmap.c | 58 +- hal/armv7r/spinlock.c | 2 +- hal/armv7r/string.c | 15 +- hal/armv7r/zynqmp/config.h | 2 +- hal/armv7r/zynqmp/console.c | 32 +- hal/armv7r/zynqmp/interrupts.c | 158 +++--- hal/armv7r/zynqmp/timer.c | 50 +- hal/armv7r/zynqmp/zynqmp.c | 342 +++++------ hal/armv7r/zynqmp/zynqmp.h | 2 +- hal/armv7r/zynqmp/zynqmp_regs.h | 92 +-- hal/armv8m/arch/cpu.h | 6 +- hal/armv8m/cpu.c | 4 +- hal/armv8m/exceptions.c | 2 +- hal/armv8m/mcx/_init.S | 2 +- hal/armv8m/mcx/n94x/mcxn94x.c | 10 +- hal/armv8m/mcx/n94x/mcxn94x.h | 3 - hal/armv8m/nrf/91/nrf91.c | 1 + hal/armv8m/nrf/91/nrf91.h | 3 - hal/armv8m/nrf/_init.S | 4 +- hal/armv8m/pmap.c | 2 +- hal/armv8m/stm32/_init.S | 2 +- hal/armv8m/stm32/n6/stm32n6.c | 1 + hal/armv8m/stm32/stm32.h | 3 - hal/armv8m/string.c | 2 +- hal/armv8r/arch/cpu.h | 8 +- hal/armv8r/cpu.c | 5 +- hal/armv8r/exceptions.c | 2 +- hal/armv8r/pmap.c | 2 +- hal/armv8r/string.c | 2 +- hal/common.c | 4 +- hal/console.h | 8 +- hal/cpu.h | 76 +-- hal/exceptions.h | 4 +- hal/gaisler/ambapp.c | 2 +- hal/hal.h | 6 + hal/ia32/arch/cpu.h | 13 +- hal/ia32/cpu.c | 4 +- hal/ia32/exceptions.c | 2 +- hal/ia32/pmap.c | 2 +- hal/ia32/string.c | 2 +- hal/list.h | 12 +- hal/pmap.h | 5 +- hal/riscv64/arch/cpu.h | 26 +- hal/riscv64/cpu.c | 2 +- hal/riscv64/exceptions.c | 2 +- hal/riscv64/hal.c | 3 - hal/riscv64/string.c | 2 +- hal/sparcv8leon/arch/cpu.h | 10 +- hal/sparcv8leon/cpu.c | 2 +- hal/sparcv8leon/exceptions-nommu.c | 2 +- hal/sparcv8leon/exceptions.c | 2 +- hal/sparcv8leon/gaisler/generic/generic.c | 1 + hal/sparcv8leon/gaisler/generic/generic.h | 3 - hal/sparcv8leon/gaisler/gr712rc/gr712rc.c | 1 + hal/sparcv8leon/gaisler/gr712rc/gr712rc.h | 4 - hal/sparcv8leon/gaisler/gr716/gr716.c | 1 + hal/sparcv8leon/gaisler/gr716/gr716.h | 3 - hal/sparcv8leon/gaisler/gr740/gr740.c | 1 + hal/sparcv8leon/gaisler/gr740/gr740.h | 3 - hal/sparcv8leon/pmap-nommu.c | 2 +- hal/sparcv8leon/pmap.c | 6 +- hal/sparcv8leon/string.c | 2 +- hal/string.h | 4 +- hal/timer.h | 2 +- hal/types.h | 2 +- include/arch/aarch64/zynqmp/zynqmp.h | 12 +- include/arch/armv7r/stdtypes.h | 4 +- include/arch/armv7r/zynqmp/syspage.h | 4 +- include/arch/armv7r/zynqmp/zynqmp.h | 76 +-- include/errno.h | 76 +-- include/ioctl.h | 3 +- include/limits.h | 2 +- include/mman.h | 32 +- include/msg.h | 4 +- include/posix-fcntl.h | 26 +- include/posix-poll.h | 24 +- include/posix-socket.h | 54 +- include/posix-stat.h | 52 +- include/posix-types.h | 2 +- include/syscalls.h | 6 + include/sysinfo.h | 26 +- include/types.h | 9 +- include/utsname.h | 2 +- lib/assert.c | 5 +- lib/assert.h | 4 +- lib/bsearch.c | 20 +- lib/bsearch.h | 3 +- lib/cbuffer.c | 34 +- lib/cbuffer.h | 22 +- lib/idtree.c | 22 +- lib/idtree.h | 7 +- lib/lib.h | 22 +- lib/list.c | 13 +- lib/list.h | 12 +- lib/printf.c | 385 ++++++++----- lib/printf.h | 8 +- lib/rand.c | 6 +- lib/rb.c | 125 ++-- lib/rb.h | 9 +- lib/strutil.c | 10 +- lib/strutil.h | 2 +- log/log.c | 58 +- main.c | 30 +- posix/fdpass.c | 83 +-- posix/fdpass.h | 4 +- posix/inet.c | 93 +-- posix/posix.c | 658 ++++++++++++---------- posix/posix.h | 8 +- posix/posix_private.h | 78 +-- posix/sockdefs.h | 6 +- posix/sockport.h | 4 +- posix/unix.c | 423 ++++++++------ proc/cond.c | 10 +- proc/elf.h | 18 +- proc/lock.h | 2 +- proc/msg-nommu.c | 44 +- proc/msg.c | 2 +- proc/mutex.c | 14 +- proc/mutex.h | 3 - proc/name.c | 170 +++--- proc/name.h | 20 +- proc/ports.c | 50 +- proc/ports.h | 2 +- proc/proc.c | 4 +- proc/process.c | 341 ++++++----- proc/process.h | 12 +- proc/resource.c | 36 +- proc/resource.h | 2 +- proc/threads.c | 445 ++++++++------- proc/threads.h | 44 +- proc/userintr.c | 26 +- proc/userintr.h | 4 +- syscalls.c | 122 ++-- syscalls.h | 2 +- syspage.c | 43 +- test/msg.c | 59 +- test/proc.c | 70 +-- test/rb.c | 45 +- test/test.c | 12 +- test/vm.c | 57 +- usrv.c | 6 +- vm/amap.c | 174 +++--- vm/amap.h | 8 +- vm/kmalloc.c | 117 ++-- vm/map.c | 556 ++++++++++-------- vm/map.h | 21 +- vm/object.c | 138 +++-- vm/object.h | 2 +- vm/page-nommu.c | 61 +- vm/page.c | 16 +- vm/page.h | 4 +- vm/vm.c | 9 +- vm/zone.c | 46 +- vm/zone.h | 8 +- 192 files changed, 3885 insertions(+), 3216 deletions(-) diff --git a/.codespell_ignore b/.codespell_ignore index 9e5577af6..2f0f70f43 100644 --- a/.codespell_ignore +++ b/.codespell_ignore @@ -8,3 +8,4 @@ hart SME spOffs DED +inout diff --git a/.gitignore b/.gitignore index 09114aa87..0c2dffb6e 100644 --- a/.gitignore +++ b/.gitignore @@ -12,3 +12,4 @@ CMakeLists.txt .idea/ cmake-build-debug/ .vscode/* +.cpptest diff --git a/hal/aarch64/arch/cpu.h b/hal/aarch64/arch/cpu.h index 6c80f8ee1..a4bd73d59 100644 --- a/hal/aarch64/arch/cpu.h +++ b/hal/aarch64/arch/cpu.h @@ -22,14 +22,14 @@ #define SIZE_PAGE 0x1000uL #define SIZE_PDIR SIZE_PAGE -#define SIZE_INITIAL_KSTACK (2 * SIZE_PAGE) /* Must be multiple of page size */ +#define SIZE_INITIAL_KSTACK (2U * SIZE_PAGE) /* Must be multiple of page size */ #ifndef SIZE_KSTACK -#define SIZE_KSTACK (2 * SIZE_PAGE) +#define SIZE_KSTACK (2U * SIZE_PAGE) #endif #ifndef SIZE_USTACK -#define SIZE_USTACK (8 * SIZE_PAGE) +#define SIZE_USTACK (8U * SIZE_PAGE) #endif #define MODE_nAARCH64 0x10 @@ -215,7 +215,7 @@ static inline void hal_cpuAtomicInc(volatile u32 *dst) } -extern unsigned int hal_cpuGetCount(void); +unsigned int hal_cpuGetCount(void); #endif diff --git a/hal/aarch64/cpu.c b/hal/aarch64/cpu.c index 9cde8b0b7..0e243d7ac 100644 --- a/hal/aarch64/cpu.c +++ b/hal/aarch64/cpu.c @@ -24,7 +24,7 @@ #define CONST_STR_SIZE(x) x, (sizeof(x) - 1) /* Function creates new cpu context on top of given thread kernel stack */ -int hal_cpuCreateContext(cpu_context_t **nctx, void *start, void *kstack, size_t kstacksz, void *ustack, void *arg, hal_tls_t *tls) +int hal_cpuCreateContext(cpu_context_t **nctx, void (*start)(void *harg), void *kstack, size_t kstacksz, void *ustack, void *arg, hal_tls_t *tls) { cpu_context_t *ctx; int i; diff --git a/hal/aarch64/exceptions.c b/hal/aarch64/exceptions.c index 281dfb05e..c349d8ef5 100644 --- a/hal/aarch64/exceptions.c +++ b/hal/aarch64/exceptions.c @@ -127,7 +127,7 @@ static const char *exceptionClassStr(int excClass) } -void hal_exceptionsDumpContext(char *buff, exc_context_t *ctx, int n) +void hal_exceptionsDumpContext(char *buff, exc_context_t *ctx, unsigned int n) { size_t i = 0, j; const char *toAdd; diff --git a/hal/aarch64/hal.c b/hal/aarch64/hal.c index fdd243462..843c947f8 100644 --- a/hal/aarch64/hal.c +++ b/hal/aarch64/hal.c @@ -28,7 +28,6 @@ u64 relOffs; u32 schedulerLocked = 0; -extern void _hal_platformInit(void); extern void _hal_cpuInit(void); diff --git a/hal/aarch64/string.c b/hal/aarch64/string.c index 08a860620..58db2cb65 100644 --- a/hal/aarch64/string.c +++ b/hal/aarch64/string.c @@ -110,7 +110,7 @@ char *hal_strncpy(char *dest, const char *src, size_t n) } -unsigned long hal_i2s(const char *prefix, char *s, unsigned long i, unsigned char b, char zero) +unsigned long hal_i2s(const char *prefix, char *s, unsigned long i, u8 b, u8 zero) { static const char digits[] = "0123456789abcdef"; char c; diff --git a/hal/aarch64/zynqmp/zynqmp.c b/hal/aarch64/zynqmp/zynqmp.c index efbecea29..02e0eebad 100644 --- a/hal/aarch64/zynqmp/zynqmp.c +++ b/hal/aarch64/zynqmp/zynqmp.c @@ -14,6 +14,7 @@ */ #include "hal/cpu.h" +#include "hal/hal.h" #include "hal/aarch64/aarch64.h" #include "hal/aarch64/interrupts_gicv2.h" #include "hal/spinlock.h" @@ -125,7 +126,7 @@ int _zynqmp_getDevClock(int dev, char *src, char *div0, char *div1, char *active } -static void _zynqmp_setMIOMuxing(unsigned pin, char l0, char l1, char l2, char l3) +static void _zynqmp_setMIOMuxing(unsigned pin, u8 l0, u8 l1, u8 l2, u8 l3) { u32 val = ((l0 & 0x1) << 1) | ((l1 & 0x1) << 2) | ((l2 & 0x3) << 3) | ((l3 & 0x7) << 5); *(zynq_common.iou_slcr + iou_slcr_mio_pin_0 + pin) = (*(zynq_common.iou_slcr + iou_slcr_mio_pin_0 + pin) & ~0xff) | val; @@ -169,7 +170,7 @@ static void _zynqmp_setMIOControl(unsigned pin, char config) } -int _zynqmp_setMIO(unsigned pin, char l0, char l1, char l2, char l3, char config) +int _zynqmp_setMIO(unsigned pin, u8 l0, u8 l1, u8 l2, u8 l3, u8 config) { if (pin > 77) { return -1; @@ -183,7 +184,7 @@ int _zynqmp_setMIO(unsigned pin, char l0, char l1, char l2, char l3, char config } -static void _zynqmp_getMIOMuxing(unsigned pin, char *l0, char *l1, char *l2, char *l3) +static void _zynqmp_getMIOMuxing(unsigned pin, u8 *l0, u8 *l1, u8 *l2, u8 *l3) { u32 val = *(zynq_common.iou_slcr + iou_slcr_mio_pin_0 + pin) & 0xff; *l0 = (val >> 1) & 0x1; @@ -193,7 +194,7 @@ static void _zynqmp_getMIOMuxing(unsigned pin, char *l0, char *l1, char *l2, cha } -static void _zynqmp_getMIOTristate(unsigned pin, char *config) +static void _zynqmp_getMIOTristate(unsigned pin, u8 *config) { u32 reg = pin / 32 + iou_slcr_mio_mst_tri0; u32 bit = pin % 32; @@ -202,7 +203,7 @@ static void _zynqmp_getMIOTristate(unsigned pin, char *config) } } -static void _zynqmp_getMIOControl(unsigned pin, char *config) +static void _zynqmp_getMIOControl(unsigned pin, u8 *config) { u32 reg = (pin / 26) * (iou_slcr_bank1_ctrl0 - iou_slcr_bank0_ctrl0) + iou_slcr_bank0_ctrl0; u32 bit = pin % 26; @@ -222,7 +223,7 @@ static void _zynqmp_getMIOControl(unsigned pin, char *config) } -static int _zynqmp_getMIO(unsigned pin, char *l0, char *l1, char *l2, char *l3, char *config) +static int _zynqmp_getMIO(unsigned pin, u8 *l0, u8 *l1, u8 *l2, u8 *l3, u8 *config) { if (pin > 77) { return -1; diff --git a/hal/aarch64/zynqmp/zynqmp.h b/hal/aarch64/zynqmp/zynqmp.h index c2ec1d5ea..e6aa5bfca 100644 --- a/hal/aarch64/zynqmp/zynqmp.h +++ b/hal/aarch64/zynqmp/zynqmp.h @@ -20,7 +20,7 @@ #include "include/arch/aarch64/zynqmp/zynqmp.h" -extern int _zynqmp_setMIO(unsigned pin, char l0, char l1, char l2, char l3, char config); +extern int _zynqmp_setMIO(unsigned pin, u8 l0, u8 l1, u8 l2, u8 l3, u8 config); extern int _zynq_setDevRst(int dev, unsigned int state); diff --git a/hal/aarch64/zynqmp/zynqmp_regs.h b/hal/aarch64/zynqmp/zynqmp_regs.h index b30f94c1d..55503b16f 100644 --- a/hal/aarch64/zynqmp/zynqmp_regs.h +++ b/hal/aarch64/zynqmp/zynqmp_regs.h @@ -18,14 +18,14 @@ #define _ZYNQMP_REGS_H_ enum { - iou_slcr_mio_pin_0 = 0x0, /* 78 registers */ - iou_slcr_bank0_ctrl0 = 0x4e, /* 6 registers */ - iou_slcr_bank0_status = 0x54, + iou_slcr_mio_pin_0 = 0x0UL, /* 78 registers */ + iou_slcr_bank0_ctrl0 = 0x4eUL, /* 6 registers */ + iou_slcr_bank0_status = 0x54UL, iou_slcr_bank1_ctrl0, /* 6 registers */ - iou_slcr_bank1_status = 0x5b, + iou_slcr_bank1_status = 0x5bUL, iou_slcr_bank2_ctrl0, /* 6 registers */ - iou_slcr_bank2_status = 0x62, - iou_slcr_mio_loopback = 0x80, + iou_slcr_bank2_status = 0x62UL, + iou_slcr_mio_loopback = 0x80UL, iou_slcr_mio_mst_tri0, /* 3 registers */ iou_slcr_wdt_clk_sel = 0xc0, iou_slcr_can_mio_ctrl, @@ -45,19 +45,19 @@ enum { iou_slcr_sd_sdr50prset, iou_slcr_sd_sdr104prst, iou_slcr_sd_ddr50preset, - iou_slcr_sd_maxcur1p8 = 0xd3, + iou_slcr_sd_maxcur1p8 = 0xd3UL, iou_slcr_sd_maxcur3p0, iou_slcr_sd_maxcur3p1, iou_slcr_sd_dll_ctrl, iou_slcr_sd_cdn_ctrl, iou_slcr_gem_ctrl, - iou_slcr_iou_ttc_apb_clk = 0xe0, - iou_slcr_iou_tapdly_bypass = 0xe4, - iou_slcr_iou_coherent_ctrl = 0x100, + iou_slcr_iou_ttc_apb_clk = 0xe0UL, + iou_slcr_iou_tapdly_bypass = 0xe4UL, + iou_slcr_iou_coherent_ctrl = 0x100UL, iou_slcr_video_pss_clk_sel, iou_slcr_iou_interconnect_route, - iou_slcr_ctrl = 0x180, - iou_slcr_isr = 0x1c0, + iou_slcr_ctrl = 0x180UL, + iou_slcr_isr = 0x1c0UL, iou_slcr_imr, iou_slcr_ier, iou_slcr_idr, @@ -65,14 +65,14 @@ enum { }; enum { - apu_err_ctrl = 0x0, - apu_isr = 0x4, + apu_err_ctrl = 0x0UL, + apu_isr = 0x4UL, apu_imr, apu_ien, apu_ids, apu_config_0, apu_config_1, - apu_rvbaraddr0l = 0x10, + apu_rvbaraddr0l = 0x10UL, apu_rvbaraddr0h, apu_rvbaraddr1l, apu_rvbaraddr1h, @@ -81,18 +81,18 @@ enum { apu_rvbaraddr3l, apu_rvbaraddr3h, apu_ace_ctrl, - apu_snoop_ctrl = 0x20, - apu_pwrctl = 0x24, + apu_snoop_ctrl = 0x20UL, + apu_pwrctl = 0x24UL, apu_pwrstat, }; enum { - crf_apb_err_ctrl = 0x0, + crf_apb_err_ctrl = 0x0UL, crf_apb_ir_status, crf_apb_ir_mask, crf_apb_ir_enable, crf_apb_ir_disable, - crf_apb_crf_wprot = 0x7, + crf_apb_crf_wprot = 0x7UL, crf_apb_apll_ctrl, crf_apb_apll_cfg, crf_apb_apll_frac_cfg, @@ -106,40 +106,40 @@ enum { crf_apb_apll_to_lpd_ctrl, crf_apb_dpll_to_lpd_ctrl, crf_apb_vpll_to_lpd_ctrl, - crf_apb_acpu_ctrl = 0x18, + crf_apb_acpu_ctrl = 0x18UL, crf_apb_dbg_trace_ctrl, crf_apb_dbg_fpd_ctrl, - crf_apb_dp_video_ref_ctrl = 0x1c, + crf_apb_dp_video_ref_ctrl = 0x1cUL, crf_apb_dp_audio_ref_ctrl, - crf_apb_dp_stc_ref_ctrl = 0x1f, + crf_apb_dp_stc_ref_ctrl = 0x1fUL, crf_apb_ddr_ctrl, crf_apb_gpu_ref_ctrl, - crf_apb_sata_ref_ctrl = 0x28, - crf_apb_pcie_ref_ctrl = 0x2d, + crf_apb_sata_ref_ctrl = 0x28UL, + crf_apb_pcie_ref_ctrl = 0x2dUL, crf_apb_fpd_dma_ref_ctrl, crf_apb_dpdma_ref_ctrl, crf_apb_topsw_main_ctrl, crf_apb_topsw_lsbus_ctrl, - crf_apb_dbg_tstmp_ctrl = 0x3e, - crf_apb_rst_fpd_top = 0x40, + crf_apb_dbg_tstmp_ctrl = 0x3eUL, + crf_apb_rst_fpd_top = 0x40UL, crf_apb_rst_fpd_apu, crf_apb_rst_ddr_ss, }; enum { - crl_apb_err_ctrl = 0x0, + crl_apb_err_ctrl = 0x0UL, crl_apb_ir_status, crl_apb_ir_mask, crl_apb_ir_enable, crl_apb_ir_disable, - crl_apb_crl_wprot = 0x7, + crl_apb_crl_wprot = 0x7UL, crl_apb_iopll_ctrl, crl_apb_iopll_cfg, crl_apb_iopll_frac_cfg, - crl_apb_rpll_ctrl = 0xc, + crl_apb_rpll_ctrl = 0xcUL, crl_apb_rpll_cfg, crl_apb_rpll_frac_cfg, - crl_apb_pll_status = 0x10, + crl_apb_pll_status = 0x10UL, crl_apb_iopll_to_fpd_ctrl, crl_apb_rpll_to_fpd_ctrl, crl_apb_usb3_dual_ref_ctrl, @@ -158,8 +158,8 @@ enum { crl_apb_spi1_ref_ctrl, crl_apb_can0_ref_ctrl, crl_apb_can1_ref_ctrl, - crl_apb_cpu_r5_ctrl = 0x24, - crl_apb_iou_switch_ctrl = 0x27, + crl_apb_cpu_r5_ctrl = 0x24UL, + crl_apb_iou_switch_ctrl = 0x27UL, crl_apb_csu_pll_ctrl, crl_apb_pcap_ctrl, crl_apb_lpd_switch_ctrl, @@ -167,7 +167,7 @@ enum { crl_apb_dbg_lpd_ctrl, crl_apb_nand_ref_ctrl, crl_apb_lpd_dma_ref_ctrl, - crl_apb_pl0_ref_ctrl = 0x30, + crl_apb_pl0_ref_ctrl = 0x30UL, crl_apb_pl1_ref_ctrl, crl_apb_pl2_ref_ctrl, crl_apb_pl3_ref_ctrl, @@ -178,35 +178,35 @@ enum { crl_apb_pl2_thr_ctrl, crl_apb_pl2_thr_cnt, crl_apb_pl3_thr_ctrl, - crl_apb_pl3_thr_cnt = 0x3f, + crl_apb_pl3_thr_cnt = 0x3fUL, crl_apb_gem_tsu_ref_ctrl, crl_apb_dll_ref_ctrl, crl_apb_pssysmon_ref_ctrl, - crl_apb_i2c0_ref_ctrl = 0x48, + crl_apb_i2c0_ref_ctrl = 0x48UL, crl_apb_i2c1_ref_ctrl, crl_apb_timestamp_ref_ctrl, - crl_apb_safety_chk = 0x4c, - crl_apb_clkmon_status = 0x50, + crl_apb_safety_chk = 0x4cUL, + crl_apb_clkmon_status = 0x50UL, crl_apb_clkmon_mask, crl_apb_clkmon_enable, crl_apb_clkmon_disable, crl_apb_clkmon_trigger, - crl_apb_chkr0_clka_upper = 0x58, /* 8 banks of 4 registers */ + crl_apb_chkr0_clka_upper = 0x58UL, /* 8 banks of 4 registers */ crl_apb_chkr0_clka_lower, crl_apb_chkr0_clkb_cnt, crl_apb_chkr0_ctrl, - crl_apb_boot_mode_user = 0x80, + crl_apb_boot_mode_user = 0x80UL, crl_apb_boot_mode_por, - crl_apb_reset_ctrl = 0x86, + crl_apb_reset_ctrl = 0x86UL, crl_apb_blockonly_rst, crl_apb_reset_reason, - crl_apb_rst_lpd_iou0 = 0x8c, - crl_apb_rst_lpd_iou2 = 0x8e, + crl_apb_rst_lpd_iou0 = 0x8cUL, + crl_apb_rst_lpd_iou2 = 0x8eUL, crl_apb_rst_lpd_top, crl_apb_rst_lpd_dbg, - crl_apb_boot_pin_ctrl = 0x94, - crl_apb_bank3_ctrl0 = 0x9c, /* 6 registers */ - crl_apb_bank3_status = 0xa2, + crl_apb_boot_pin_ctrl = 0x94UL, + crl_apb_bank3_ctrl0 = 0x9cUL, /* 6 registers */ + crl_apb_bank3_status = 0xa2UL, }; #endif /* _ZYNQMP_REGS_H_ */ diff --git a/hal/armv7a/_armv7a.S b/hal/armv7a/_armv7a.S index dfee5a599..179d08336 100644 --- a/hal/armv7a/_armv7a.S +++ b/hal/armv7a/_armv7a.S @@ -289,8 +289,8 @@ _hal_cpuSetKernelStack: .type hal_jmp, %function hal_jmp: cpsid if - /* ustack != NULL means that the jump is to user */ - cmp r2, #NULL + /* ustack != 0 means that the jump is to user */ + cmp r2, #0 bne 2f /* kargs are passed on the stack */ ldr r5, [sp] diff --git a/hal/armv7a/_interrupts.S b/hal/armv7a/_interrupts.S index 252b42bd4..45227a505 100644 --- a/hal/armv7a/_interrupts.S +++ b/hal/armv7a/_interrupts.S @@ -159,7 +159,7 @@ hal_cpuReschedule: mrs r4, cpsr - cmp r0, #NULL + cmp r0, #0 beq 1f add r0, #12 diff --git a/hal/armv7a/arch/cpu.h b/hal/armv7a/arch/cpu.h index 8ad745a20..d2e5c8a33 100644 --- a/hal/armv7a/arch/cpu.h +++ b/hal/armv7a/arch/cpu.h @@ -19,15 +19,15 @@ #include "hal/types.h" #include "config.h" -#define SIZE_PAGE 0x1000 -#define SIZE_PDIR 0x2000 +#define SIZE_PAGE 0x1000U +#define SIZE_PDIR 0x2000U #ifndef SIZE_KSTACK -#define SIZE_KSTACK (8 * 1024) +#define SIZE_KSTACK (8U * 1024U) #endif #ifndef SIZE_USTACK -#define SIZE_USTACK (8 * SIZE_PAGE) +#define SIZE_USTACK (8U * SIZE_PAGE) #endif #define USR_MODE 0x10 @@ -93,19 +93,19 @@ typedef struct _cpu_context_t { static inline void hal_cpuDisableInterrupts(void) { - __asm__ volatile ("cpsid if"); + __asm__ volatile("cpsid if"); } static inline void hal_cpuEnableInterrupts(void) { - __asm__ volatile ("cpsie aif"); + __asm__ volatile("cpsie aif"); } static inline void hal_cpuHalt(void) { - __asm__ volatile ("wfi"); + __asm__ volatile("wfi"); } @@ -118,7 +118,7 @@ static inline unsigned int hal_cpuGetLastBit(unsigned long v) { int pos; - __asm__ volatile ("clz %0, %1" : "=r" (pos) : "r" (v)); + __asm__ volatile("clz %0, %1" : "=r"(pos) : "r"(v)); return 31 - pos; } @@ -128,9 +128,9 @@ static inline unsigned int hal_cpuGetFirstBit(unsigned long v) { unsigned pos; - __asm__ volatile ("\ + __asm__ volatile("\ rbit %0, %1; \ - clz %0, %0;" : "=r" (pos) : "r" (v)); + clz %0, %0;" : "=r"(pos) : "r"(v)); return pos; } @@ -244,7 +244,7 @@ static inline void hal_cpuAtomicInc(volatile u32 *dst) } -extern unsigned int hal_cpuGetCount(void); +unsigned int hal_cpuGetCount(void); #endif diff --git a/hal/armv7a/arch/pmap.h b/hal/armv7a/arch/pmap.h index 16da3c216..d5bfd8aab 100644 --- a/hal/armv7a/arch/pmap.h +++ b/hal/armv7a/arch/pmap.h @@ -19,10 +19,10 @@ #include "hal/types.h" /* Predefined virtual adresses */ -#define VADDR_KERNEL 0xc0000000 /* base virtual address of kernel space */ -#define VADDR_MIN 0x00000000 -#define VADDR_MAX 0xffffffff -#define VADDR_USR_MAX 0x80000000 +#define VADDR_KERNEL 0xc0000000 /* base virtual address of kernel space */ +#define VADDR_MIN 0x00000000 +#define VADDR_MAX 0xffffffff +#define VADDR_USR_MAX 0x80000000 /* (MOD) */ #define VADDR_SCRATCHPAD_TTL 0xfff00000 @@ -40,18 +40,18 @@ /* Page flags */ -#define PAGE_FREE 0x00000001 +#define PAGE_FREE 0x00000001 -#define PAGE_OWNER_BOOT (0 << 1) -#define PAGE_OWNER_KERNEL (1 << 1) -#define PAGE_OWNER_APP (2 << 1) +#define PAGE_OWNER_BOOT (0 << 1) +#define PAGE_OWNER_KERNEL (1 << 1) +#define PAGE_OWNER_APP (2 << 1) -#define PAGE_KERNEL_SYSPAGE (1 << 4) -#define PAGE_KERNEL_CPU (2 << 4) -#define PAGE_KERNEL_PTABLE (3 << 4) -#define PAGE_KERNEL_PMAP (4 << 4) -#define PAGE_KERNEL_STACK (5 << 4) -#define PAGE_KERNEL_HEAP (6 << 4) +#define PAGE_KERNEL_SYSPAGE (1 << 4) +#define PAGE_KERNEL_CPU (2 << 4) +#define PAGE_KERNEL_PTABLE (3 << 4) +#define PAGE_KERNEL_PMAP (4 << 4) +#define PAGE_KERNEL_STACK (5 << 4) +#define PAGE_KERNEL_HEAP (6 << 4) #ifndef __ASSEMBLY__ @@ -68,7 +68,7 @@ typedef struct _page_t { typedef struct _pmap_t { u8 asid_ix; u32 *pdir; - addr_t addr; /* physical address of pdir */ + addr_t addr; /* physical address of pdir */ void *start; void *end; void *pmapv; diff --git a/hal/armv7a/cpu.c b/hal/armv7a/cpu.c index 113e63bb4..9de86e939 100644 --- a/hal/armv7a/cpu.c +++ b/hal/armv7a/cpu.c @@ -23,7 +23,7 @@ /* Function creates new cpu context on top of given thread kernel stack */ -int hal_cpuCreateContext(cpu_context_t **nctx, void *start, void *kstack, size_t kstacksz, void *ustack, void *arg, hal_tls_t *tls) +int hal_cpuCreateContext(cpu_context_t **nctx, void (*start)(void *harg), void *kstack, size_t kstacksz, void *ustack, void *arg, hal_tls_t *tls) { cpu_context_t *ctx; int i; diff --git a/hal/armv7a/exceptions.c b/hal/armv7a/exceptions.c index f5d5748c5..05888b5a1 100644 --- a/hal/armv7a/exceptions.c +++ b/hal/armv7a/exceptions.c @@ -49,7 +49,7 @@ struct { enum { exc_reset = 0, exc_undef, exc_svc, exc_prefetch, exc_abort }; -void hal_exceptionsDumpContext(char *buff, exc_context_t *ctx, int n) +void hal_exceptionsDumpContext(char *buff, exc_context_t *ctx, unsigned int n) { static const char *const mnemonics[] = { "0 #Reset", "1 #Undef", "2 #Syscall", "3 #Prefetch", diff --git a/hal/armv7a/hal.c b/hal/armv7a/hal.c index 197e47296..03957239d 100644 --- a/hal/armv7a/hal.c +++ b/hal/armv7a/hal.c @@ -26,7 +26,6 @@ unsigned int relOffs; u32 schedulerLocked = 0; -extern void _hal_platformInit(void); extern void _hal_cpuInit(void); @@ -81,7 +80,7 @@ void hal_lockScheduler(void) } -__attribute__ ((section (".init"))) void _hal_init(void) +__attribute__((section(".init"))) void _hal_init(void) { schedulerLocked = 0; _hal_spinlockInit(); diff --git a/hal/armv7a/imx6ull/config.h b/hal/armv7a/imx6ull/config.h index a9cf03ac2..ef71bf4ab 100644 --- a/hal/armv7a/imx6ull/config.h +++ b/hal/armv7a/imx6ull/config.h @@ -16,8 +16,8 @@ #ifndef _HAL_CONFIG_H_ #define _HAL_CONFIG_H_ -#define ADDR_DDR 0x80000000 -#define SIZE_DDR 0x7ffffff +#define ADDR_DDR 0x80000000 +#define SIZE_DDR 0x7ffffff #define NUM_CPUS 1 diff --git a/hal/armv7a/pmap.c b/hal/armv7a/pmap.c index 3ae8742ff..f81ddcf8c 100644 --- a/hal/armv7a/pmap.c +++ b/hal/armv7a/pmap.c @@ -201,7 +201,7 @@ addr_t pmap_destroy(pmap_t *pmap, int *i) hal_spinlockClear(&pmap_common.lock, &sc); while (*i < max) { - if (pmap->pdir[*i] != NULL) { + if (pmap->pdir[*i] != 0) { *i += 4; return pmap->pdir[*i - 4] & ~0xfff; } diff --git a/hal/armv7a/string.c b/hal/armv7a/string.c index 8fc36ae1d..dda26ef72 100644 --- a/hal/armv7a/string.c +++ b/hal/armv7a/string.c @@ -167,7 +167,7 @@ char *hal_strncpy(char *dest, const char *src, size_t n) } -unsigned long hal_i2s(const char *prefix, char *s, unsigned long i, unsigned char b, char zero) +unsigned long hal_i2s(const char *prefix, char *s, unsigned long i, u8 b, u8 zero) { static const char digits[] = "0123456789abcdef"; char c; diff --git a/hal/armv7m/arch/cpu.h b/hal/armv7m/arch/cpu.h index cf724fcf1..b3ca5a21b 100644 --- a/hal/armv7m/arch/cpu.h +++ b/hal/armv7m/arch/cpu.h @@ -27,14 +27,14 @@ #include "hal/types.h" -#define SIZE_PAGE 0x200 +#define SIZE_PAGE 0x200U #ifndef SIZE_USTACK -#define SIZE_USTACK (3 * SIZE_PAGE) +#define SIZE_USTACK (3U * SIZE_PAGE) #endif #ifndef SIZE_KSTACK -#define SIZE_KSTACK (4 * SIZE_PAGE) +#define SIZE_KSTACK (4U * SIZE_PAGE) #endif #ifdef CPU_IMXRT @@ -148,20 +148,20 @@ typedef struct _cpu_context_t { static inline void hal_cpuDisableInterrupts(void) { - __asm__ volatile ("cpsid if"); + __asm__ volatile("cpsid if"); } static inline void hal_cpuEnableInterrupts(void) { - __asm__ volatile ("cpsie if"); + __asm__ volatile("cpsie if"); } static inline void hal_cpuHalt(void) { #ifndef __CPU_IMXRT117X - __asm__ volatile ("\ + __asm__ volatile("\ wfi; \ nop; "); #endif @@ -175,7 +175,7 @@ static inline unsigned int hal_cpuGetLastBit(unsigned long v) { int pos; - __asm__ volatile ("clz %0, %1" : "=r" (pos) : "r" (v)); + __asm__ volatile("clz %0, %1" : "=r"(pos) : "r"(v)); return 31 - pos; } @@ -185,9 +185,9 @@ static inline unsigned int hal_cpuGetFirstBit(unsigned long v) { unsigned pos; - __asm__ volatile ("\ + __asm__ volatile("\ rbit %0, %1; \ - clz %0, %0;" : "=r" (pos) : "r" (v)); + clz %0, %0;" : "=r"(pos) : "r"(v)); return pos; } @@ -203,7 +203,7 @@ static inline void hal_cpuSetCtxGot(cpu_context_t *ctx, void *got) static inline void hal_cpuSetGot(void *got) { - __asm__ volatile ("mov r9, %0" :: "r" (got)); + __asm__ volatile("mov r9, %0" ::"r"(got)); } @@ -211,7 +211,7 @@ static inline void *hal_cpuGetGot(void) { void *got; - __asm__ volatile ("mov %0, r9" : "=r" (got)); + __asm__ volatile("mov %0, r9" : "=r"(got)); return got; } diff --git a/hal/armv7m/arch/pmap.h b/hal/armv7m/arch/pmap.h index 7a7f7a7c0..313fa5cac 100644 --- a/hal/armv7m/arch/pmap.h +++ b/hal/armv7m/arch/pmap.h @@ -28,18 +28,18 @@ #define PGHD_READ 0x00 /* Page flags */ -#define PAGE_FREE 0x00000001 - -#define PAGE_OWNER_BOOT (0 << 1) -#define PAGE_OWNER_KERNEL (1 << 1) -#define PAGE_OWNER_APP (2 << 1) - -#define PAGE_KERNEL_SYSPAGE (1 << 4) -#define PAGE_KERNEL_CPU (2 << 4) -#define PAGE_KERNEL_PTABLE (3 << 4) -#define PAGE_KERNEL_PMAP (4 << 4) -#define PAGE_KERNEL_STACK (5 << 4) -#define PAGE_KERNEL_HEAP (6 << 4) +#define PAGE_FREE 0x00000001 + +#define PAGE_OWNER_BOOT (0 << 1) +#define PAGE_OWNER_KERNEL (1 << 1) +#define PAGE_OWNER_APP (2 << 1) + +#define PAGE_KERNEL_SYSPAGE (1 << 4) +#define PAGE_KERNEL_CPU (2 << 4) +#define PAGE_KERNEL_PTABLE (3 << 4) +#define PAGE_KERNEL_PMAP (4 << 4) +#define PAGE_KERNEL_STACK (5 << 4) +#define PAGE_KERNEL_HEAP (6 << 4) #ifndef __ASSEMBLY__ diff --git a/hal/armv7m/cpu.c b/hal/armv7m/cpu.c index 1d8f50911..3e2336e03 100644 --- a/hal/armv7m/cpu.c +++ b/hal/armv7m/cpu.c @@ -77,7 +77,7 @@ void hal_cpuSetDevBusy(int s) } -int hal_cpuCreateContext(cpu_context_t **nctx, void *start, void *kstack, size_t kstacksz, void *ustack, void *arg, hal_tls_t *tls) +int hal_cpuCreateContext(cpu_context_t **nctx, void (*start)(void *harg), void *kstack, size_t kstacksz, void *ustack, void *arg, hal_tls_t *tls) { cpu_context_t *ctx; @@ -99,7 +99,7 @@ int hal_cpuCreateContext(cpu_context_t **nctx, void *start, void *kstack, size_t hal_memset(ctx, 0, sizeof(*ctx)); ctx->savesp = (u32)ctx; - ctx->psp = (ustack != NULL) ? (u32)ustack - (HWCTXSIZE * sizeof(int)) : NULL; + ctx->psp = (ustack != NULL) ? (u32)ustack - (HWCTXSIZE * sizeof(int)) : 0; ctx->msp = (ustack != NULL) ? (u32)kstack + kstacksz : (u32)&ctx->hwctx; ctx->r4 = 0x44444444; ctx->r5 = 0x55555555; diff --git a/hal/armv7m/exceptions.c b/hal/armv7m/exceptions.c index 67672b2d4..eacb952c4 100644 --- a/hal/armv7m/exceptions.c +++ b/hal/armv7m/exceptions.c @@ -31,7 +31,7 @@ static struct { extern void hal_exceptionJump(unsigned int n, exc_context_t *ctx, void (*handler)(unsigned int, exc_context_t *)); -void hal_exceptionsDumpContext(char *buff, exc_context_t *ctx, int n) +void hal_exceptionsDumpContext(char *buff, exc_context_t *ctx, unsigned int n) { static const char *mnemonics[] = { "0 #InitialSP", "1 #Reset", "2 #NMI", "3 #HardFault", diff --git a/hal/armv7m/hal.c b/hal/armv7m/hal.c index 37787e242..7699aed87 100644 --- a/hal/armv7m/hal.c +++ b/hal/armv7m/hal.c @@ -22,9 +22,6 @@ struct { hal_syspage_t *syspage; -extern void _hal_cpuInit(void); - - void *hal_syspageRelocate(void *data) { return data; diff --git a/hal/armv7m/imxrt/_init.S b/hal/armv7m/imxrt/_init.S index 2703d4d97..11da38fac 100644 --- a/hal/armv7m/imxrt/_init.S +++ b/hal/armv7m/imxrt/_init.S @@ -299,7 +299,7 @@ hal_cpuReschedule: eor r0, r0, r0 /* default return value */ bl _hal_invokePendSV pop {r1-r3, lr} - cmp r1, #NULL + cmp r1, #0 beq hal_cpuReschedule0 push {r3-r4} add r1, r1, #12 @@ -327,7 +327,7 @@ hal_jmp: cpsid if isb - cmp r2, #NULL + cmp r2, #0 bne hal_jmp_user /* kargs has been passed on the stack */ diff --git a/hal/armv7m/imxrt/interrupts.c b/hal/armv7m/imxrt/interrupts.c index 87c484e1e..e289d5b81 100644 --- a/hal/armv7m/imxrt/interrupts.c +++ b/hal/armv7m/imxrt/interrupts.c @@ -109,7 +109,7 @@ char *hal_interruptsFeatures(char *features, unsigned int len) } -__attribute__ ((section (".init"))) void _hal_interruptsInit(void) +__attribute__((section(".init"))) void _hal_interruptsInit(void) { unsigned int n; diff --git a/hal/armv7m/pmap.c b/hal/armv7m/pmap.c index 5f18b14f6..699a25dd6 100644 --- a/hal/armv7m/pmap.c +++ b/hal/armv7m/pmap.c @@ -20,8 +20,19 @@ #include #include -enum { mpu_type, mpu_ctrl, mpu_rnr, mpu_rbar, mpu_rasr, mpu_rbar_a1, mpu_rasr_a1, mpu_rbar_a2, mpu_rasr_a2, - mpu_rbar_a3, mpu_rasr_a3 }; +enum { + mpu_type, + mpu_ctrl, + mpu_rnr, + mpu_rbar, + mpu_rasr, + mpu_rbar_a1, + mpu_rasr_a1, + mpu_rbar_a2, + mpu_rasr_a2, + mpu_rbar_a3, + mpu_rasr_a3 +}; /* Linker symbols */ extern unsigned int _end; @@ -143,7 +154,7 @@ int pmap_getPage(page_t *page, addr_t *addr) char pmap_marker(page_t *p) { - return 0; + return '\0'; } @@ -222,7 +233,7 @@ void _pmap_init(pmap_t *pmap, void **vstart, void **vend) * region and allow this region instead. */ /* Find kernel code region */ - __asm__ volatile ("\tmov %0, pc;" : "=r" (pc)); + __asm__ volatile("\tmov %0, pc;" : "=r"(pc)); ikmap = syspage_mapAddrResolve(pc); if (ikmap == NULL) { hal_consolePrint(ATTR_BOLD, "pmap: Kernel code map not found. Bad system config\n"); diff --git a/hal/armv7m/stm32/_init.S b/hal/armv7m/stm32/_init.S index 387a9c23b..4036a99e7 100644 --- a/hal/armv7m/stm32/_init.S +++ b/hal/armv7m/stm32/_init.S @@ -267,7 +267,7 @@ hal_cpuReschedule: eor r0, r0, r0 /* default return value */ bl _hal_invokePendSV pop {r1-r3, lr} - cmp r1, #NULL + cmp r1, #0 beq hal_cpuReschedule0 push {r3-r4} add r1, r1, #12 @@ -295,7 +295,7 @@ hal_jmp: cpsid if isb - cmp r2, #NULL + cmp r2, #0 bne hal_jmp_user /* kargs has been passed on the stack */ diff --git a/hal/armv7m/string.c b/hal/armv7m/string.c index 8ad10d8d8..6737e3fe5 100644 --- a/hal/armv7m/string.c +++ b/hal/armv7m/string.c @@ -168,7 +168,7 @@ char *hal_strncpy(char *dest, const char *src, size_t n) } -unsigned long hal_i2s(const char *prefix, char *s, unsigned long i, unsigned char b, char zero) +unsigned long hal_i2s(const char *prefix, char *s, unsigned long i, u8 b, u8 zero) { static const char digits[] = "0123456789abcdef"; char c; diff --git a/hal/armv7r/arch/cpu.h b/hal/armv7r/arch/cpu.h index 7a9cbaa90..d6985bdae 100644 --- a/hal/armv7r/arch/cpu.h +++ b/hal/armv7r/arch/cpu.h @@ -16,17 +16,17 @@ #ifndef _HAL_ARMV7R_CPU_H_ #define _HAL_ARMV7R_CPU_H_ -#define SIZE_PAGE 0x1000 +#define SIZE_PAGE 0x1000U #define SIZE_INITIAL_KSTACK SIZE_PAGE #define INITIAL_KSTACK_SHIFT 12 #ifndef SIZE_KSTACK -#define SIZE_KSTACK (8 * 1024) +#define SIZE_KSTACK (8U * 1024U) #endif #ifndef SIZE_USTACK -#define SIZE_USTACK (8 * SIZE_PAGE) +#define SIZE_USTACK (8U * SIZE_PAGE) #endif /* ARMv7 processor modes */ @@ -45,7 +45,7 @@ #define NO_IRQ 0x80 /* mask to disable IRQ */ #define NO_FIQ 0x40 /* mask to disable FIQ */ #define NO_INT (NO_IRQ | NO_FIQ) /* mask to disable IRQ and FIQ */ -#define THUMB_STATE 0x20 +#define THUMB_STATE 0x20U #ifndef __ASSEMBLY__ @@ -58,13 +58,14 @@ #define SIZE_STACK_ARG(sz) (((sz) + 3u) & ~0x3u) - +/* parasoft-begin-suppress MISRAC2012-RULE_20_7-a 't' within *(t *) can not be put in the parentheses due to compilation error */ #define GETFROMSTACK(ustack, t, v, n) \ do { \ - ustack = (void *)(((addr_t)ustack + sizeof(t) - 1) & ~(sizeof(t) - 1)); \ - (v) = *(t *)ustack; \ - ustack += SIZE_STACK_ARG(sizeof(t)); \ + (ustack) = (void *)(((addr_t)(ustack) + sizeof(t) - 1U) & ~(sizeof(t) - 1U)); \ + (v) = *(t *)(ustack); \ + (ustack) += SIZE_STACK_ARG(sizeof(t)); \ } while (0) +/* parasoft-end-suppress MISRAC2012-RULE_20_7-a */ typedef struct _cpu_context_t { u32 savesp; @@ -119,19 +120,20 @@ static inline void hal_cpuSetDevBusy(int s) { } - +/* parasoft-suppress-next-line MISRAC2012-DIR_4_3 "Assembly is required for low-level operations" */ static inline unsigned int hal_cpuGetLastBit(unsigned long v) { - int pos; + unsigned int pos; /* clang-format off */ __asm__ volatile ("clz %0, %1" : "=r" (pos) : "r" (v)); /* clang-format on */ - return 31 - pos; + return 31U - pos; } +/* parasoft-suppress-next-line MISRAC2012-DIR_4_3 "Assembly is required for low-level operations" */ static inline unsigned int hal_cpuGetFirstBit(unsigned long v) { unsigned pos; @@ -162,6 +164,7 @@ static inline void hal_cpuSetGot(void *got) } +/* parasoft-suppress-next-line MISRAC2012-DIR_4_3 "Assembly is required for low-level operations" */ static inline void *hal_cpuGetGot(void) { void *got; @@ -200,72 +203,18 @@ static inline void *hal_cpuGetUserSP(cpu_context_t *ctx) static inline int hal_cpuSupervisorMode(cpu_context_t *ctx) { - return ctx->psr & 0xf; + return (int)(unsigned int)(ctx->psr & 0xfU); } +/* parasoft-suppress-next-line MISRAC2012-DIR_4_3 "Assembly is required for low-level operations" */ static inline unsigned int hal_cpuGetID(void) { unsigned mpidr; /* clang-format off */ __asm__ volatile ("mrc p15, 0, %0, c0, c0, 5": "=r"(mpidr)); /* clang-format on */ - return mpidr & 0xf; -} - - -static inline void hal_cpuSignalEvent(void) -{ - /* clang-format off */ - __asm__ volatile ("sev"); - /* clang-format on */ -} - - -static inline void hal_cpuWaitForEvent(void) -{ - /* clang-format off */ - __asm__ volatile ( - "dsb\n\t" - "wfe" - ); - /* clang-format on */ -} - - -static inline u32 hal_cpuAtomicGet(volatile u32 *dst) -{ - u32 result; - /* clang-format off */ - __asm__ volatile ( - "dmb\n\t" - "ldr %0, [%1]\n\t" - "dmb" - : "=r"(result) - : "r"(dst) - ); - /* clang-format on */ - return result; -} - - -static inline void hal_cpuAtomicInc(volatile u32 *dst) -{ - /* clang-format off */ - __asm__ volatile ( - "dmb\n" - "1:\n\t" - "ldrex r2, [%0]\n\t" - "add r2, r2, #1\n\t" - "strex r1, r2, [%0]\n\t" - "cmp r1, #0\n\t" - "bne 1b\n\t" - "dmb" - : - : "r"(dst) - : "r1", "r2", "memory" - ); - /* clang-format on */ + return mpidr & 0xfU; } @@ -273,10 +222,6 @@ static inline void hal_cpuSmpSync(void) { } - -extern unsigned int hal_cpuGetCount(void); - - #endif diff --git a/hal/armv7r/arch/interrupts.h b/hal/armv7r/arch/interrupts.h index 98b42b14d..b06bf6e6e 100644 --- a/hal/armv7r/arch/interrupts.h +++ b/hal/armv7r/arch/interrupts.h @@ -22,7 +22,7 @@ typedef struct _intr_handler_t { struct _intr_handler_t *next; struct _intr_handler_t *prev; unsigned int n; - int (*f)(unsigned int, cpu_context_t *, void *); + int (*f)(unsigned int n, cpu_context_t *ctx, void *arg); void *data; void *got; } intr_handler_t; diff --git a/hal/armv7r/arch/spinlock.h b/hal/armv7r/arch/spinlock.h index dd535c2c3..e17c4d8d4 100644 --- a/hal/armv7r/arch/spinlock.h +++ b/hal/armv7r/arch/spinlock.h @@ -24,6 +24,7 @@ typedef struct _spinlock_t { struct _spinlock_t *prev; u8 lock; + } __attribute__((packed)) spinlock_t; diff --git a/hal/armv7r/arch/types.h b/hal/armv7r/arch/types.h index 368d2ad57..6a9e5b3dc 100644 --- a/hal/armv7r/arch/types.h +++ b/hal/armv7r/arch/types.h @@ -28,7 +28,6 @@ typedef __u32 ptr_t; typedef unsigned int size_t; - #endif diff --git a/hal/armv7r/armv7r.h b/hal/armv7r/armv7r.h index 070b105f1..39c075022 100644 --- a/hal/armv7r/armv7r.h +++ b/hal/armv7r/armv7r.h @@ -22,26 +22,15 @@ /* Barriers */ -static inline void hal_cpuDataMemoryBarrier(void) -{ - __asm__ volatile("dmb"); -} - - static inline void hal_cpuDataSyncBarrier(void) { __asm__ volatile("dsb"); } -static inline void hal_cpuInstrBarrier(void) -{ - __asm__ volatile("isb"); -} - - /* Memory Management */ +/* parasoft-begin-suppress MISRAC2012-RULE_8_6 "Each function has definition in assembly code" */ /* Invalidate entire branch predictor array */ extern void hal_cpuBranchInval(void); @@ -73,4 +62,6 @@ extern u32 hal_cpuGetPFR0(void); extern u32 hal_cpuGetPFR1(void); +/* parasoft-end-suppress MISRAC2012-RULE_8_6*/ + #endif diff --git a/hal/armv7r/cpu.c b/hal/armv7r/cpu.c index c55381fa4..7cf476ae8 100644 --- a/hal/armv7r/cpu.c +++ b/hal/armv7r/cpu.c @@ -22,29 +22,26 @@ #include "config.h" -extern void _hal_platformInit(void); - - -int hal_cpuCreateContext(cpu_context_t **nctx, void *start, void *kstack, size_t kstacksz, void *ustack, void *arg, hal_tls_t *tls) +int hal_cpuCreateContext(cpu_context_t **nctx, void (*start)(void *harg), void *kstack, size_t kstacksz, void *ustack, void *arg, hal_tls_t *tls) { cpu_context_t *ctx; int i; (void)tls; - *nctx = 0; + *nctx = NULL; if (kstack == NULL) { return -1; } - kstacksz &= ~0x3; + kstacksz &= ~0x3U; if (kstacksz < sizeof(cpu_context_t)) { return -1; } /* Align user stack to 8 bytes */ - ustack = (void *)((ptr_t)ustack & ~0x7); + ustack = (void *)((ptr_t)ustack & ~0x7U); /* Prepare initial kernel stack */ ctx = (cpu_context_t *)(kstack + kstacksz - sizeof(cpu_context_t)); @@ -52,7 +49,7 @@ int hal_cpuCreateContext(cpu_context_t **nctx, void *start, void *kstack, size_t /* Set all registers to sNAN */ for (i = 0; i < 32; i += 2) { ctx->freg[i] = 0; - ctx->freg[i + 1] = 0xfff10000; + ctx->freg[i + 1] = 0xfff10000UL; } ctx->fpsr = 0; @@ -60,20 +57,21 @@ int hal_cpuCreateContext(cpu_context_t **nctx, void *start, void *kstack, size_t ctx->padding = 0; ctx->r0 = (u32)arg; - ctx->r1 = 0x11111111; - ctx->r2 = 0x22222222; - ctx->r3 = 0x33333333; - ctx->r4 = 0x44444444; - ctx->r5 = 0x55555555; - ctx->r6 = 0x66666666; - ctx->r7 = 0x77777777; - ctx->r8 = 0x88888888; - ctx->r9 = 0x99999999; - ctx->r10 = 0xaaaaaaaa; - - ctx->ip = 0xcccccccc; - ctx->lr = 0xeeeeeeee; - + ctx->r1 = 0x11111111UL; + ctx->r2 = 0x22222222UL; + ctx->r3 = 0x33333333UL; + ctx->r4 = 0x44444444UL; + ctx->r5 = 0x55555555UL; + ctx->r6 = 0x66666666UL; + ctx->r7 = 0x77777777UL; + ctx->r8 = 0x88888888UL; + ctx->r9 = 0x99999999UL; + ctx->r10 = 0xaaaaaaaaUL; + + ctx->ip = 0xccccccccUL; + ctx->lr = 0xeeeeeeeeUL; + + /* parasoft-suppress-next-line MISRAC2012-RULE_11_1 "Need to assign to processor register function address" */ ctx->pc = (u32)start; /* Enable interrupts, set normal execution mode */ @@ -87,8 +85,8 @@ int hal_cpuCreateContext(cpu_context_t **nctx, void *start, void *kstack, size_t } /* Thumb mode? */ - if ((ctx->pc & 1) != 0) { - ctx->psr |= 1 << 5; + if ((ctx->pc & 0x1U) != 0U) { + ctx->psr |= 0x1U << 5; } ctx->fp = ctx->sp; @@ -114,10 +112,11 @@ int hal_cpuPushSignal(void *kstack, void (*handler)(void), cpu_context_t *signal hal_memcpy(signalCtx, ctx, sizeof(cpu_context_t)); - signalCtx->pc = (u32)handler & ~1; + /* parasoft-suppress-next-line MISRAC2012-RULE_11_1 "program counter must be set to the address of the function" */ + signalCtx->pc = (u32)handler & ~0x1U; signalCtx->sp -= sizeof(cpu_context_t); - - if (((u32)handler & 1) != 0) { + /* parasoft-suppress-next-line MISRAC2012-RULE_11_1 "checking in what processor mode code must be executed" */ + if (((u32)handler & 0x1U) != 0U) { signalCtx->psr |= THUMB_STATE; } else { @@ -144,31 +143,34 @@ char *hal_cpuInfo(char *info) size_t n = 0; u32 midr; - hal_strcpy(info, HAL_NAME_PLATFORM); - n = sizeof(HAL_NAME_PLATFORM) - 1; + (void)hal_strcpy(info, HAL_NAME_PLATFORM); + n = sizeof(HAL_NAME_PLATFORM) - 1U; midr = hal_cpuGetMIDR(); - if (((midr >> 16) & 0xf) == 0xf) { - hal_strcpy(&info[n], "ARMv7 "); - n += 6; + if (((midr >> 16) & 0xfU) == 0xfU) { + (void)hal_strcpy(&info[n], "ARMv7 "); + n += 6U; } - if (((midr >> 4) & 0xfff) == 0xc15) { - hal_strcpy(&info[n], "Cortex-R5 "); + if (((midr >> 4) & 0xfffUL) == 0xc15UL) { + (void)hal_strcpy(&info[n], "Cortex-R5 "); n += hal_strlen("Cortex-R5 "); } - + /* parasoft-begin-suppress MISRAC2012-RULE_10_2 | MISRAC2012-RULE_10_3 + * "Correctness of char operation in following block is guaranteed by design" + */ info[n++] = 'r'; - info[n++] = '0' + ((midr >> 20) & 0xf); + info[n++] = '0' + ((midr >> 20) & 0xfUL); info[n++] = 'p'; - info[n++] = '0' + (midr & 0xf); + info[n++] = '0' + (midr & 0xfUL); info[n++] = ' '; info[n++] = 'x'; info[n++] = '0' + hal_cpuGetCount(); info[n] = '\0'; + /* parasoft-end-suppress MISRAC2012-RULE_10_2 | MISRAC2012-RULE_10_3 */ return info; } @@ -179,51 +181,52 @@ char *hal_cpuFeatures(char *features, unsigned int len) unsigned int n = 0; u32 pfr0 = hal_cpuGetPFR0(), pfr1 = hal_cpuGetPFR1(); - if (!len) + if (len == 0U) { return features; + } - if ((pfr0 >> 12) & 0xf && len - n > 9) { - hal_strcpy(&features[n], "ThumbEE, "); - n += 9; + if (((pfr0 >> 12) & 0xfUL) != 0U && (len - n) > 9U) { + (void)hal_strcpy(&features[n], "ThumbEE, "); + n += 9U; } - if ((pfr0 >> 8) & 0xf && len - n > 9) { - hal_strcpy(&features[n], "Jazelle, "); - n += 9; + if (((pfr0 >> 8) & 0xfUL) != 0U && (len - n) > 9U) { + (void)hal_strcpy(&features[n], "Jazelle, "); + n += 9U; } - if ((pfr0 >> 4) & 0xf && len - n > 7) { - hal_strcpy(&features[n], "Thumb, "); - n += 7; + if (((pfr0 >> 4) & 0xfUL) != 0U && (len - n) > 7U) { + (void)hal_strcpy(&features[n], "Thumb, "); + n += 7U; } - if (pfr0 & 0xf && len - n > 5) { - hal_strcpy(&features[n], "ARM, "); - n += 5; + if ((pfr0 & 0xfUL) != 0U && (len - n) > 5U) { + (void)hal_strcpy(&features[n], "ARM, "); + n += 5U; } - if ((pfr1 >> 16) & 0xf && len - n > 15) { - hal_strcpy(&features[n], "Generic Timer, "); - n += 15; + if (((pfr1 >> 16) & 0xfUL) != 0U && (len - n) > 15U) { + (void)hal_strcpy(&features[n], "Generic Timer, "); + n += 15U; } - if ((pfr1 >> 12) & 0xf && len - n > 16) { - hal_strcpy(&features[n], "Virtualization, "); - n += 16; + if (((pfr1 >> 12) & 0xfUL) != 0U && (len - n) > 16U) { + (void)hal_strcpy(&features[n], "Virtualization, "); + n += 16U; } - if ((pfr1 >> 8) & 0xf && len - n > 5) { - hal_strcpy(&features[n], "MCU, "); - n += 5; + if (((pfr1 >> 8) & 0xfUL) != 0U && (len - n) > 5U) { + (void)hal_strcpy(&features[n], "MCU, "); + n += 5U; } - if ((pfr1 >> 4) & 0xf && len - n > 10) { - hal_strcpy(&features[n], "Security, "); - n += 10; + if (((pfr1 >> 4) & 0xfUL) != 0U && (len - n) > 10U) { + (void)hal_strcpy(&features[n], "Security, "); + n += 10U; } - if (n > 0) { - features[n - 2] = '\0'; + if (n > 0U) { + features[n - 2U] = '\0'; } else { features[0] = '\0'; @@ -233,12 +236,13 @@ char *hal_cpuFeatures(char *features, unsigned int len) } +/* parasoft-suppress-next-line MISRAC2012-DIR_4_3 "Assembly is required for low-level operations" */ void hal_cpuTlsSet(hal_tls_t *tls, cpu_context_t *ctx) { /* In theory there should be 8-byte thread control block but * it's stored elsewhere so we need to subtract 8 from the pointer */ - ptr_t ptr = tls->tls_base - 8; + ptr_t ptr = tls->tls_base - 8U; __asm__ volatile("mcr p15, 0, %[value], cr13, cr0, 3;" ::[value] "r"(ptr)); } diff --git a/hal/armv7r/exceptions.c b/hal/armv7r/exceptions.c index 0b6f0ced5..7ca6ce95f 100644 --- a/hal/armv7r/exceptions.c +++ b/hal/armv7r/exceptions.c @@ -21,27 +21,27 @@ #include "include/mman.h" -#define EXC_ASYNC_EXTERNAL 0x16 -#define EXC_PERM_PAGE 0x0f -#define EXC_SYNC_EXTERNAL_TTW2 0x0e -#define EXC_PERM_SECTION 0x0d -#define EXC_SYNC_EXTERNAL_TTW1 0x0c -#define EXC_DOMAIN_PAGE 0x0b -#define EXC_DOMAIN_SECTION 0x0a -#define EXC_SYNC_EXTERNAL 0x08 -#define EXC_TRANSLATION_PAGE 0x07 -#define EXC_ACCESS_PAGE 0x06 -#define EXC_TRANSLATION_SECTION 0x05 -#define EXC_CACHE 0x04 -#define EXC_ACCESS_SECTION 0x03 -#define EXC_DEBUG 0x02 -#define EXC_ALIGMENT 0x01 - - -struct { - void (*undefHandler)(unsigned int, exc_context_t *); - void (*abortHandler)(unsigned int, exc_context_t *); - void (*defaultHandler)(unsigned int, exc_context_t *); +#define EXC_ASYNC_EXTERNAL 0x16U +#define EXC_PERM_PAGE 0x0fU +#define EXC_SYNC_EXTERNAL_TTW2 0x0eU +#define EXC_PERM_SECTION 0x0dU +#define EXC_SYNC_EXTERNAL_TTW1 0x0cU +#define EXC_DOMAIN_PAGE 0x0bU +#define EXC_DOMAIN_SECTION 0x0aU +#define EXC_SYNC_EXTERNAL 0x08U +#define EXC_TRANSLATION_PAGE 0x07U +#define EXC_ACCESS_PAGE 0x06U +#define EXC_TRANSLATION_SECTION 0x05U +#define EXC_CACHE 0x04U +#define EXC_ACCESS_SECTION 0x03U +#define EXC_DEBUG 0x02U +#define EXC_ALIGMENT 0x01U + + +static struct { + void (*undefHandler)(unsigned int n, exc_context_t *ctx); + void (*abortHandler)(unsigned int n, exc_context_t *ctx); + void (*defaultHandler)(unsigned int n, exc_context_t *ctx); spinlock_t lock; } exceptions; @@ -51,7 +51,7 @@ enum { exc_reset = 0, exc_undef, exc_svc, exc_prefetch, exc_abort }; /* clang-format on */ -void hal_exceptionsDumpContext(char *buff, exc_context_t *ctx, int n) +void hal_exceptionsDumpContext(char *buff, exc_context_t *ctx, unsigned int n) { static const char *const mnemonics[] = { "0 #Reset", "1 #Undef", "2 #Syscall", "3 #Prefetch", @@ -59,43 +59,43 @@ void hal_exceptionsDumpContext(char *buff, exc_context_t *ctx, int n) }; size_t i = 0; - n &= 0x7; + n = n & 0x7U; - hal_strcpy(buff, "\nException: "); - hal_strcpy(buff += hal_strlen(buff), mnemonics[n]); - hal_strcpy(buff += hal_strlen(buff), "\n"); + (void)hal_strcpy(buff, "\nException: "); + (void)hal_strcpy(buff += hal_strlen(buff), mnemonics[n]); + (void)hal_strcpy(buff += hal_strlen(buff), "\n"); buff += hal_strlen(buff); - i += hal_i2s(" r0=", &buff[i], ctx->cpuCtx.r0, 16, 1); - i += hal_i2s(" r1=", &buff[i], ctx->cpuCtx.r1, 16, 1); - i += hal_i2s(" r2=", &buff[i], ctx->cpuCtx.r2, 16, 1); - i += hal_i2s(" r3=", &buff[i], ctx->cpuCtx.r3, 16, 1); + i += hal_i2s(" r0=", &buff[i], ctx->cpuCtx.r0, 16, 1U); + i += hal_i2s(" r1=", &buff[i], ctx->cpuCtx.r1, 16, 1U); + i += hal_i2s(" r2=", &buff[i], ctx->cpuCtx.r2, 16, 1U); + i += hal_i2s(" r3=", &buff[i], ctx->cpuCtx.r3, 16, 1U); - i += hal_i2s("\n r4=", &buff[i], ctx->cpuCtx.r4, 16, 1); - i += hal_i2s(" r5=", &buff[i], ctx->cpuCtx.r5, 16, 1); - i += hal_i2s(" r6=", &buff[i], ctx->cpuCtx.r6, 16, 1); - i += hal_i2s(" r7=", &buff[i], ctx->cpuCtx.r7, 16, 1); + i += hal_i2s("\n r4=", &buff[i], ctx->cpuCtx.r4, 16, 1U); + i += hal_i2s(" r5=", &buff[i], ctx->cpuCtx.r5, 16, 1U); + i += hal_i2s(" r6=", &buff[i], ctx->cpuCtx.r6, 16, 1U); + i += hal_i2s(" r7=", &buff[i], ctx->cpuCtx.r7, 16, 1U); - i += hal_i2s("\n r8=", &buff[i], ctx->cpuCtx.r8, 16, 1); - i += hal_i2s(" r9=", &buff[i], ctx->cpuCtx.r9, 16, 1); - i += hal_i2s(" r10=", &buff[i], ctx->cpuCtx.r10, 16, 1); - i += hal_i2s(" fp=", &buff[i], ctx->cpuCtx.fp, 16, 1); + i += hal_i2s("\n r8=", &buff[i], ctx->cpuCtx.r8, 16, 1U); + i += hal_i2s(" r9=", &buff[i], ctx->cpuCtx.r9, 16, 1U); + i += hal_i2s(" r10=", &buff[i], ctx->cpuCtx.r10, 16, 1U); + i += hal_i2s(" fp=", &buff[i], ctx->cpuCtx.fp, 16, 1U); - i += hal_i2s("\n ip=", &buff[i], ctx->cpuCtx.ip, 16, 1); - i += hal_i2s(" sp=", &buff[i], ctx->cpuCtx.sp, 16, 1); - i += hal_i2s(" lr=", &buff[i], ctx->cpuCtx.lr, 16, 1); - i += hal_i2s(" pc=", &buff[i], ctx->cpuCtx.pc, 16, 1); + i += hal_i2s("\n ip=", &buff[i], ctx->cpuCtx.ip, 16, 1U); + i += hal_i2s(" sp=", &buff[i], ctx->cpuCtx.sp, 16, 1U); + i += hal_i2s(" lr=", &buff[i], ctx->cpuCtx.lr, 16, 1U); + i += hal_i2s(" pc=", &buff[i], ctx->cpuCtx.pc, 16, 1U); - i += hal_i2s("\npsr=", &buff[i], ctx->cpuCtx.psr, 16, 1); - i += hal_i2s(" dfs=", &buff[i], ctx->dfsr, 16, 1); - i += hal_i2s(" dfa=", &buff[i], ctx->dfar, 16, 1); - i += hal_i2s(" ifs=", &buff[i], ctx->ifsr, 16, 1); + i += hal_i2s("\npsr=", &buff[i], ctx->cpuCtx.psr, 16, 1U); + i += hal_i2s(" dfs=", &buff[i], ctx->dfsr, 16, 1U); + i += hal_i2s(" dfa=", &buff[i], ctx->dfar, 16, 1U); + i += hal_i2s(" ifs=", &buff[i], ctx->ifsr, 16, 1U); - i += hal_i2s("\nifa=", &buff[i], ctx->ifar, 16, 1); + i += hal_i2s("\nifa=", &buff[i], ctx->ifar, 16, 1U); buff[i++] = '\n'; - buff[i] = 0; + buff[i] = '\0'; } @@ -120,13 +120,13 @@ static void exceptions_defaultHandler(unsigned int n, exc_context_t *ctx) extern void threads_setupUserReturn(void *retval, cpu_context_t *ctx); - +/* parasoft-suppress-next-line MISRAC2012-RULE_8_4 "function is used in assembly" */ void exceptions_dispatch(unsigned int n, exc_context_t *ctx) { - if (n == exc_prefetch || n == exc_abort) { + if (n == (unsigned int)exc_prefetch || n == (unsigned int)exc_abort) { exceptions.abortHandler(n, ctx); } - else if (n == exc_undef) { + else if (n == (unsigned int)exc_undef) { exceptions.undefHandler(n, ctx); } else { @@ -142,30 +142,30 @@ void exceptions_dispatch(unsigned int n, exc_context_t *ctx) int hal_exceptionsFaultType(unsigned int n, exc_context_t *ctx) { - int prot; + unsigned prot; u32 status; - if (n == exc_prefetch) { + if (n == (unsigned int)exc_prefetch) { prot = PROT_EXEC | PROT_READ; - status = ctx->ifsr & 0x1f; + status = ctx->ifsr & 0x1fU; } - else if (n == exc_abort) { + else if (n == (unsigned int)exc_abort) { prot = PROT_READ; - status = ctx->dfsr & 0x1f; + status = ctx->dfsr & 0x1fU; - if (ctx->dfsr & (1 << 11)) { + if ((ctx->dfsr & (0x1UL << 11)) != 0U) { prot |= PROT_WRITE; } } else { - return PROT_NONE; + return (int)PROT_NONE; } if (status == EXC_PERM_SECTION || status == EXC_PERM_PAGE) { prot |= PROT_USER; } - return prot; + return (int)prot; } ptr_t hal_exceptionsPC(exc_context_t *ctx) @@ -179,12 +179,12 @@ void *hal_exceptionsFaultAddr(unsigned int n, exc_context_t *ctx) u32 status; void *addr = NULL; - if (n == exc_prefetch) { - status = ctx->ifsr & 0x1f; + if (n == (unsigned int)exc_prefetch) { + status = ctx->ifsr & 0x1fU; addr = (void *)ctx->ifar; } - else if (n == exc_abort) { - status = ctx->dfsr & 0x1f; + else if (n == (unsigned int)exc_abort) { + status = ctx->dfsr & 0x1fU; addr = (void *)ctx->dfar; } else { @@ -193,14 +193,15 @@ void *hal_exceptionsFaultAddr(unsigned int n, exc_context_t *ctx) if (status != EXC_ACCESS_SECTION && status != EXC_ACCESS_PAGE && status != EXC_PERM_SECTION && status != EXC_PERM_PAGE && - status != EXC_TRANSLATION_PAGE && status != EXC_TRANSLATION_SECTION) + status != EXC_TRANSLATION_PAGE && status != EXC_TRANSLATION_SECTION) { return NULL; + } return addr; } -int hal_exceptionsSetHandler(unsigned int n, void (*handler)(unsigned int, exc_context_t *)) +int hal_exceptionsSetHandler(unsigned int n, void (*handler)(unsigned int n, exc_context_t *ctx)) { int ret = 0; spinlock_ctx_t sc; diff --git a/hal/armv7r/hal.c b/hal/armv7r/hal.c index cf4ea816a..cc8e29288 100644 --- a/hal/armv7r/hal.c +++ b/hal/armv7r/hal.c @@ -23,13 +23,16 @@ static struct { } hal_common; +/* parasoft-begin-suppress MISRAC2012-RULE_8_4 "Global variables used in assembler code" */ +/* parasoft-begin-suppress MISRAC2012-RULE_5_8 "Another variable with this name used + * inside the structure so it shouldn't cause this violation" + */ syspage_t *syspage; +/* parasoft-end-suppress MISRAC2012-RULE_5_8 */ + u32 relOffs; u32 schedulerLocked = 0; - - -extern void _hal_platformInit(void); -extern void _hal_cpuInit(void); +/* parasoft-end-suppress MISRAC2012-RULE_8_4 */ void *hal_syspageRelocate(void *data) diff --git a/hal/armv7r/pmap.c b/hal/armv7r/pmap.c index 6f88de279..32bb1482e 100644 --- a/hal/armv7r/pmap.c +++ b/hal/armv7r/pmap.c @@ -18,14 +18,17 @@ #include "config.h" #include "syspage.h" #include "halsyspage.h" -#include +#include /*Should be given full path arm7rarch/cpu.h -TBC*/ #include - +/* parasoft-begin-suppress MISRAC2012-RULE_8_6 "Definition in assembly code" */ /* Linker symbols */ extern unsigned int _end; extern unsigned int __bss_start; +/* parasoft-end-suppress MISRAC2012-RULE_8_6 */ + +// parasoft-suppress-next-line MISRAC2012-RULE_8_4 "Global variable used in assembler code" u8 _init_stack[NUM_CPUS][SIZE_INITIAL_KSTACK] __attribute__((aligned(8))); @@ -42,34 +45,37 @@ static void pmap_mpu_setMemRegionNumber(u32 num) } +/* parasoft-suppress-next-line MISRAC2012-DIR_4_3 "Assembly is required for low-level operations" */ static void pmap_mpu_setMemRegionRasr(u32 rasr) { /* ARMv7-R uses the same region attribute bits as ARMv7-M, but they are split over two registers */ - u32 rser = rasr & 0xffff; + u32 rser = rasr & 0xffffU; u32 racr = rasr >> 16; __asm__ volatile("mcr p15, 0, %0, c6, c1, 2" ::"r"(rser)); __asm__ volatile("mcr p15, 0, %0, c6, c1, 4" ::"r"(racr)); } +/* parasoft-suppress-next-line MISRAC2012-DIR_4_3 "Assembly is required for low-level operations" */ static void pmap_mpu_setMemRegionStatus(int enable) { u32 val; __asm__ volatile("mrc p15, 0, %0, c6, c1, 2" : "=r"(val)); if (enable != 0) { - val |= 1; + val |= 0x1U; } else { - val &= ~1; + val &= ~0x1U; } __asm__ volatile("mcr p15, 0, %0, c6, c1, 2" ::"r"(val)); } +/* parasoft-suppress-next-line MISRAC2012-DIR_4_3 "Assembly is required for low-level operations" */ static void pmap_mpu_setMemRegionRbar(u32 addr) { - addr &= ~((1 << 5) - 1); + addr &= ~((0x1U << 5) - 1U); __asm__ volatile("mcr p15, 0, %0, c6, c1, 0" ::"r"(addr)); } @@ -117,12 +123,12 @@ static unsigned int pmap_map2region(unsigned int map) return 1; } - int i; - unsigned int mask = 0; + unsigned int i; + unsigned int mask = 0U; - for (i = 0; i < sizeof(syspage->hs.mpu.map) / sizeof(*syspage->hs.mpu.map); ++i) { + for (i = 0U; i < sizeof(syspage->hs.mpu.map) / sizeof(*syspage->hs.mpu.map); ++i) { if (map == syspage->hs.mpu.map[i]) { - mask |= (1 << i); + mask |= (1UL << i); } } @@ -137,7 +143,7 @@ int pmap_addMap(pmap_t *pmap, unsigned int map) } unsigned int rmask = pmap_map2region(map); - if (rmask == 0) { + if (rmask == 0U) { return -1; } @@ -162,7 +168,7 @@ void pmap_switch(pmap_t *pmap) pmap_mpu_setMemRegionNumber(i); /* Enable/disable region according to the mask */ - pmap_mpu_setMemRegionStatus((pmap->regions & (1 << i)) != 0); + pmap_mpu_setMemRegionStatus(((pmap->regions & (1UL << i)) != 0U) ? 1 : 0); } hal_spinlockClear(&pmap_common.lock, &sc); @@ -170,13 +176,13 @@ void pmap_switch(pmap_t *pmap) } -int pmap_enter(pmap_t *pmap, addr_t pa, void *vaddr, int attr, page_t *alloc) +int pmap_enter(pmap_t *pmap, addr_t addr, void *vaddr, int attrs, page_t *alloc) { return 0; } -int pmap_remove(pmap_t *pmap, void *vstart, void *vend) +int pmap_remove(pmap_t *pmap, void *vaddr, void *vend) { return 0; } @@ -202,7 +208,7 @@ int pmap_isAllowed(pmap_t *pmap, const void *vaddr, size_t size) } rmask = pmap_map2region(map->id); - return ((pmap->regions & rmask) == 0) ? 0 : 1; + return ((pmap->regions & rmask) == 0U) ? 0 : 1; } @@ -214,7 +220,7 @@ int pmap_getPage(page_t *page, addr_t *addr) char pmap_marker(page_t *p) { - return 0; + return '\0'; } @@ -226,13 +232,13 @@ int _pmap_kernelSpaceExpand(pmap_t *pmap, void **start, void *end, page_t *dp) int pmap_segment(unsigned int i, void **vaddr, size_t *size, int *prot, void **top) { - if (i != 0) { + if (i != 0U) { return -1; } /* Returns region above basic kernel's .bss section */ *vaddr = (void *)&_end; - *size = (((size_t)(*top) + SIZE_PAGE - 1) & ~(SIZE_PAGE - 1)) - (size_t)&_end; + *size = (((size_t)(*top) + SIZE_PAGE - 0x1U) & ~(SIZE_PAGE - 0x1U)) - (size_t)&_end; return 0; } @@ -245,17 +251,18 @@ void _pmap_init(pmap_t *pmap, void **vstart, void **vend) u32 t; unsigned int i, cnt = syspage->hs.mpu.allocCnt; - (*vstart) = (void *)(((ptr_t)&_end + 7) & ~7u); + (*vstart) = (void *)(((ptr_t)&_end + 7U) & ~7U); (*vend) = (*((char **)vstart)) + SIZE_PAGE; pmap->start = (void *)&__bss_start; /* Initial size of kernel map */ - pmap->end = (void *)((addr_t)&__bss_start + 32 * 1024); - pmap->regions = (1 << cnt) - 1; + pmap->end = (void *)((addr_t)&__bss_start + 32U * 1024U); + + pmap->regions = (1UL << cnt) - 1U; - if (cnt == 0) { + if (cnt == 0U) { hal_spinlockCreate(&pmap_common.lock, "pmap"); pmap_common.mpu_enabled = 0; pmap_common.kernelCodeRegion = 0; @@ -270,7 +277,7 @@ void _pmap_init(pmap_t *pmap, void **vstart, void **vend) for (i = 0; i < cnt; ++i) { pmap_mpu_setMemRegionNumber(i); t = syspage->hs.mpu.table[i].rbar; - if ((t & (1 << 4)) == 0) { + if ((t & (0x1U << 4)) == 0U) { continue; } @@ -291,7 +298,8 @@ void _pmap_init(pmap_t *pmap, void **vstart, void **vend) * region and allow this region instead. */ /* Find kernel code region */ - ikmap = syspage_mapAddrResolve((addr_t)(void *)_pmap_init); + /* parasoft-suppress-next-line MISRAC2012-RULE_11_1 "We need address of this function in numeric type" */ + ikmap = syspage_mapAddrResolve((addr_t)_pmap_init); if (ikmap == NULL) { hal_consolePrint(ATTR_BOLD, "pmap: Kernel code map not found. Bad system config\n"); for (;;) { @@ -300,7 +308,7 @@ void _pmap_init(pmap_t *pmap, void **vstart, void **vend) } ikregion = pmap_map2region(ikmap->id); - if (ikregion == 0) { + if (ikregion == 0U) { hal_consolePrint(ATTR_BOLD, "pmap: Kernel code map has no assigned region. Bad system config\n"); for (;;) { hal_cpuHalt(); diff --git a/hal/armv7r/spinlock.c b/hal/armv7r/spinlock.c index f5713003d..c360893ab 100644 --- a/hal/armv7r/spinlock.c +++ b/hal/armv7r/spinlock.c @@ -66,7 +66,7 @@ void hal_spinlockClear(spinlock_t *spinlock, spinlock_ctx_t *sc) } -void _hal_spinlockCreate(spinlock_t *spinlock, const char *name) +static void _hal_spinlockCreate(spinlock_t *spinlock, const char *name) { spinlock->lock = 1; diff --git a/hal/armv7r/string.c b/hal/armv7r/string.c index 340f6777e..09caf5e6f 100644 --- a/hal/armv7r/string.c +++ b/hal/armv7r/string.c @@ -16,6 +16,7 @@ #include "hal/string.h" +/* parasoft-suppress-next-line MISRAC2012-DIR_4_3 "Assembly is required for low-level operations" */ int hal_memcmp(const void *ptr1, const void *ptr2, size_t num) { int res = 0; @@ -45,6 +46,7 @@ int hal_memcmp(const void *ptr1, const void *ptr2, size_t num) } +/* parasoft-suppress-next-line MISRAC2012-DIR_4_3 "Assembly is required for low-level operations" */ unsigned int hal_strlen(const char *s) { unsigned int k = 0; @@ -66,6 +68,7 @@ unsigned int hal_strlen(const char *s) } +/* parasoft-suppress-next-line MISRAC2012-DIR_4_3 "Assembly is required for low-level operations" */ int hal_strcmp(const char *s1, const char *s2) { int res = 0; @@ -96,6 +99,7 @@ int hal_strcmp(const char *s1, const char *s2) } +/* parasoft-suppress-next-line MISRAC2012-DIR_4_3 "Assembly is required for low-level operations" */ int hal_strncmp(const char *s1, const char *s2, unsigned int count) { int res = 0; @@ -129,6 +133,7 @@ int hal_strncmp(const char *s1, const char *s2, unsigned int count) } +/* parasoft-suppress-next-line MISRAC2012-DIR_4_3 "Assembly is required for low-level operations" */ char *hal_strcpy(char *dest, const char *src) { char *p = dest; @@ -149,6 +154,7 @@ char *hal_strcpy(char *dest, const char *src) } +/* parasoft-suppress-next-line MISRAC2012-DIR_4_3 "Assembly is required for low-level operations" */ char *hal_strncpy(char *dest, const char *src, size_t n) { char *p = dest; @@ -173,7 +179,7 @@ char *hal_strncpy(char *dest, const char *src, size_t n) } -unsigned long hal_i2s(const char *prefix, char *s, unsigned long i, unsigned char b, char zero) +unsigned long hal_i2s(const char *prefix, char *s, unsigned long i, u8 b, u8 zero) { static const char digits[] = "0123456789abcdef"; char c; @@ -181,11 +187,14 @@ unsigned long hal_i2s(const char *prefix, char *s, unsigned long i, unsigned cha m = hal_strlen(prefix); hal_memcpy(s, prefix, m); + k = m; - for (k = m, l = (unsigned long)-1; l; i /= b, l /= b) { - if (!zero && !i) + for (l = (unsigned long)-1; l != 0U; l /= b) { + if ((zero == 0U) && (i == 0U)) { break; + } s[k++] = digits[i % b]; + i /= b; } l = k--; diff --git a/hal/armv7r/zynqmp/config.h b/hal/armv7r/zynqmp/config.h index 6e79fca09..106330dfd 100644 --- a/hal/armv7r/zynqmp/config.h +++ b/hal/armv7r/zynqmp/config.h @@ -18,7 +18,7 @@ #define NUM_CPUS 1 -#define SIZE_INTERRUPTS 188 +#define SIZE_INTERRUPTS 188U #ifndef __ASSEMBLY__ diff --git a/hal/armv7r/zynqmp/console.c b/hal/armv7r/zynqmp/console.c index 58bf3a4e4..ad7651945 100644 --- a/hal/armv7r/zynqmp/console.c +++ b/hal/armv7r/zynqmp/console.c @@ -26,16 +26,16 @@ #define UART_RX UART0_RX #define UART_TX UART0_TX #define UART_RESET pctl_devreset_lpd_uart0 -#define UART_BASE 0xff000000 +#define UART_BASE 0xff000000U #else #define UART_RX UART1_RX #define UART_TX UART1_TX #define UART_RESET pctl_devreset_lpd_uart1 -#define UART_BASE 0xff010000 +#define UART_BASE 0xff010000U #endif -struct { +static struct { volatile u32 *uart; u32 speed; } console_common; @@ -63,11 +63,11 @@ enum { static void _hal_consolePrint(const char *s) { - for (; *s; s++) { + for (; *s != '\0'; s++) { hal_consolePutch(*s); } - while ((*(console_common.uart + sr) & (1 << 3)) == 0) { + while ((*(console_common.uart + sr) & (0x1U << 3)) == 0U) { /* Wait until TX fifo is empty */ } } @@ -81,6 +81,10 @@ void hal_consolePrint(int attr, const char *s) else if (attr != ATTR_USER) { _hal_consolePrint(CONSOLE_CYAN); } + else { + /* No action required */ + } + _hal_consolePrint(s); _hal_consolePrint(CONSOLE_NORMAL); @@ -89,11 +93,11 @@ void hal_consolePrint(int attr, const char *s) void hal_consolePutch(char c) { - while ((*(console_common.uart + sr) & (1 << 3)) == 0) { + while ((*(console_common.uart + sr) & (0x1U << 3)) == 0U) { /* Wait until TX fifo is empty */ } - *(console_common.uart + fifo) = c; + *(console_common.uart + fifo) = (u32)c; } @@ -102,20 +106,20 @@ __attribute__((section(".init"))) void _hal_consoleInit(void) console_common.uart = (void *)UART_BASE; console_common.speed = 115200; - _zynqmp_setMIO(UART_TX, 0, 0, 0, 6, PCTL_MIO_SLOW_nFAST | PCTL_MIO_PULL_UP_nDOWN | PCTL_MIO_PULL_ENABLE); - _zynqmp_setMIO(UART_RX, 0, 0, 0, 6, PCTL_MIO_SLOW_nFAST | PCTL_MIO_PULL_UP_nDOWN | PCTL_MIO_PULL_ENABLE | PCTL_MIO_TRI_ENABLE); + (void)_zynqmp_setMIO(UART_TX, 0U, 0U, 0U, 6U, PCTL_MIO_SLOW_nFAST | PCTL_MIO_PULL_UP_nDOWN | PCTL_MIO_PULL_ENABLE); + (void)_zynqmp_setMIO(UART_RX, 0U, 0U, 0U, 6U, PCTL_MIO_SLOW_nFAST | PCTL_MIO_PULL_UP_nDOWN | PCTL_MIO_PULL_ENABLE | PCTL_MIO_TRI_ENABLE); - _zynq_setDevRst(UART_RESET, 0); + (void)_zynq_setDevRst(UART_RESET, 0); - *(console_common.uart + idr) = 0xfff; + *(console_common.uart + idr) = 0xfffU; /* Uart Mode Register * normal mode, 1 stop bit, no parity, 8 bits, uart_ref_clk as source clock * PAR = 0x4 */ - *(console_common.uart + mr) = (*(console_common.uart + mr) & ~0x000003ff) | 0x00000020; + *(console_common.uart + mr) = (*(console_common.uart + mr) & ~0x000003ffU) | 0x00000020U; /* Disable TX and RX */ - *(console_common.uart + cr) = (*(console_common.uart + cr) & ~0x000001ff) | 0x00000028; + *(console_common.uart + cr) = (*(console_common.uart + cr) & ~0x000001ffU) | 0x00000028U; /* Assumptions: * - baudrate : 115200 @@ -126,5 +130,5 @@ __attribute__((section(".init"))) void _hal_consoleInit(void) /* Uart Control Register * TXEN = 0x1; RXEN = 0x1; TXRES = 0x1; RXRES = 0x1 */ - *(console_common.uart + cr) = (*(console_common.uart + cr) & ~0x000001ff) | 0x00000017; + *(console_common.uart + cr) = (*(console_common.uart + cr) & ~0x000001ffU) | 0x00000017U; } diff --git a/hal/armv7r/zynqmp/interrupts.c b/hal/armv7r/zynqmp/interrupts.c index 028715ecf..1dea33579 100644 --- a/hal/armv7r/zynqmp/interrupts.c +++ b/hal/armv7r/zynqmp/interrupts.c @@ -34,33 +34,33 @@ enum { /* Distributor registers */ - gicd_ctlr = 0x0, + gicd_ctlr = 0x0U, gicd_typer, gicd_iidr, - gicd_igroupr0 = 0x20, /* 6 registers */ - gicd_isenabler0 = 0x40, /* 6 registers */ - gicd_icenabler0 = 0x60, /* 6 registers */ - gicd_ispendr0 = 0x80, /* 6 registers */ - gicd_icpendr0 = 0xa0, /* 6 registers */ - gicd_isactiver0 = 0xc0, /* 6 registers */ - gicd_icactiver0 = 0xe0, /* 6 registers */ - gicd_ipriorityr0 = 0x100, /* 48 registers */ - gicd_itargetsr0 = 0x200, /* 48 registers */ - gicd_icfgr0 = 0x300, /* 12 registers */ - gicd_ppisr = 0x340, + gicd_igroupr0 = 0x20U, /* 6 registers */ + gicd_isenabler0 = 0x40U, /* 6 registers */ + gicd_icenabler0 = 0x60U, /* 6 registers */ + gicd_ispendr0 = 0x80U, /* 6 registers */ + gicd_icpendr0 = 0xa0U, /* 6 registers */ + gicd_isactiver0 = 0xc0U, /* 6 registers */ + gicd_icactiver0 = 0xe0U, /* 6 registers */ + gicd_ipriorityr0 = 0x100U, /* 48 registers */ + gicd_itargetsr0 = 0x200U, /* 48 registers */ + gicd_icfgr0 = 0x300U, /* 12 registers */ + gicd_ppisr = 0x340U, gicd_spisr0, /* 5 registers */ - gicd_sgir = 0x3c0, - gicd_cpendsgir0 = 0x3c4, /* 4 registers */ - gicd_spendsgir0 = 0x3c8, /* 4 registers */ - gicd_pidr4 = 0x3f4, /* 4 registers */ - gicd_pidr0 = 0x3f8, /* 4 registers */ - gicd_cidr0 = 0x3fc, /* 4 registers */ + gicd_sgir = 0x3c0U, + gicd_cpendsgir0 = 0x3c4U, /* 4 registers */ + gicd_spendsgir0 = 0x3c8U, /* 4 registers */ + gicd_pidr4 = 0x3f4U, /* 4 registers */ + gicd_pidr0 = 0x3f8U, /* 4 registers */ + gicd_cidr0 = 0x3fcU, /* 4 registers */ }; enum { /* CPU interface registers */ - gicc_ctlr = 0x0, + gicc_ctlr = 0x0U, gicc_pmr, gicc_bpr, gicc_iar, @@ -71,13 +71,13 @@ enum { gicc_aiar, gicc_aeoir, gicc_ahppir, - gicc_apr0 = 0x34, - gicc_nsapr0 = 0x38, - gicc_iidr = 0x3f, + gicc_apr0 = 0x34U, + gicc_nsapr0 = 0x38U, + gicc_iidr = 0x3fU, }; -struct { +static struct { volatile u32 *gicd; volatile u32 *gicc; spinlock_t spinlock[SIZE_INTERRUPTS]; @@ -86,11 +86,13 @@ struct { } interrupts_common; +/* parasoft-suppress-next-line MISRAC2012-RULE_8_6 "Definition in assembly code" */ void _hal_interruptsInitPerCPU(void); extern int threads_schedule(unsigned int n, cpu_context_t *context, void *arg); +/* parasoft-begin-suppress MISRAC2012-RULE_2_2 MISRAC2012-RULE_8_4 "Function is used externally within assembler code" */ int interrupts_dispatch(unsigned int n, cpu_context_t *ctx) { intr_handler_t *h; @@ -98,7 +100,7 @@ int interrupts_dispatch(unsigned int n, cpu_context_t *ctx) spinlock_ctx_t sc; u32 ciarValue = *(interrupts_common.gicc + gicc_iar); - n = ciarValue & 0x3ff; + n = ciarValue & 0x3ffU; if (n >= SIZE_INTERRUPTS) { return 0; @@ -111,12 +113,14 @@ int interrupts_dispatch(unsigned int n, cpu_context_t *ctx) if ((h = interrupts_common.handlers[n]) != NULL) { do { hal_cpuSetGot(h->got); - reschedule |= h->f(n, ctx, h->data); + if (h->f(n, ctx, h->data) != 0) { + reschedule = 1; + } } while ((h = h->next) != interrupts_common.handlers[n]); } - if (reschedule) { - threads_schedule(n, ctx, NULL); + if (reschedule != 0) { + (void)threads_schedule(n, ctx, NULL); } *(interrupts_common.gicc + gicc_eoir) = ciarValue; @@ -125,62 +129,53 @@ int interrupts_dispatch(unsigned int n, cpu_context_t *ctx) return reschedule; } - +/* parasoft-end-suppress MISRAC2012-RULE_2_2 MISRAC2012-RULE_8_4 */ static void interrupts_enableIRQ(unsigned int irqn) { - unsigned int irq_reg = irqn / 32; - unsigned int irq_offs = irqn % 32; - *(interrupts_common.gicd + gicd_isenabler0 + irq_reg) = 1u << irq_offs; + unsigned int irq_reg = irqn / 32U; + unsigned int irq_offs = irqn % 32U; + *(interrupts_common.gicd + gicd_isenabler0 + irq_reg) = 1UL << irq_offs; } static void interrupts_disableIRQ(unsigned int irqn) { - unsigned int irq_reg = irqn / 32; - unsigned int irq_offs = irqn % 32; - *(interrupts_common.gicd + gicd_icenabler0 + irq_reg) = 1u << irq_offs; + unsigned int irq_reg = irqn / 32U; + unsigned int irq_offs = irqn % 32U; + *(interrupts_common.gicd + gicd_icenabler0 + irq_reg) = 1UL << irq_offs; } static void interrupts_setConf(unsigned int irqn, u32 conf) { - unsigned int irq_reg = irqn / 16; - unsigned int irq_offs = (irqn % 16) * 2; + unsigned int irq_reg = irqn / 16U; + unsigned int irq_offs = (irqn % 16U) * 2U; u32 mask; - mask = *(interrupts_common.gicd + gicd_icfgr0 + irq_reg) & ~(0x3 << irq_offs); - *(interrupts_common.gicd + gicd_icfgr0 + irq_reg) = mask | ((conf & 0x3) << irq_offs); + mask = *(interrupts_common.gicd + gicd_icfgr0 + irq_reg) & ~(0x3U << irq_offs); + *(interrupts_common.gicd + gicd_icfgr0 + irq_reg) = mask | ((conf & 0x3U) << irq_offs); } -void interrupts_setCPU(unsigned int irqn, unsigned int cpuMask) +static void interrupts_setCPU(unsigned int irqn, unsigned int cpuMask) { - unsigned int irq_reg = irqn / 4; - unsigned int irq_offs = (irqn % 4) * 8; + unsigned int irq_reg = irqn / 4U; + unsigned int irq_offs = (irqn % 4U) * 8U; u32 mask; - mask = *(interrupts_common.gicd + gicd_itargetsr0 + irq_reg) & ~(0xff << irq_offs); - *(interrupts_common.gicd + gicd_itargetsr0 + irq_reg) = mask | ((cpuMask & 0xff) << irq_offs); + mask = *(interrupts_common.gicd + gicd_itargetsr0 + irq_reg) & ~(0xffU << irq_offs); + *(interrupts_common.gicd + gicd_itargetsr0 + irq_reg) = mask | ((cpuMask & 0xffU) << irq_offs); } static void interrupts_setPriority(unsigned int irqn, u32 priority) { - unsigned int irq_reg = irqn / 4; - unsigned int irq_offs = (irqn % 4) * 8; - u32 mask = *(interrupts_common.gicd + gicd_ipriorityr0 + irq_reg) & ~(0xff << irq_offs); - - *(interrupts_common.gicd + gicd_ipriorityr0 + irq_reg) = mask | ((priority & 0xff) << irq_offs); -} - - -static inline u32 interrupts_getPriority(unsigned int irqn) -{ - unsigned int irq_reg = irqn / 4; - unsigned int irq_offs = (irqn % 4) * 8; + unsigned int irq_reg = irqn / 4U; + unsigned int irq_offs = (irqn % 4U) * 8U; + u32 mask = *(interrupts_common.gicd + gicd_ipriorityr0 + irq_reg) & ~(0xffU << irq_offs); - return (*(interrupts_common.gicd + gicd_ipriorityr0 + irq_reg) >> irq_offs) & 0xff; + *(interrupts_common.gicd + gicd_ipriorityr0 + irq_reg) = mask | ((priority & 0xffU) << irq_offs); } @@ -208,8 +203,8 @@ int hal_interruptsSetHandler(intr_handler_t *h) char *hal_interruptsFeatures(char *features, unsigned int len) { - hal_strncpy(features, "Using GIC interrupt controller", len); - features[len - 1] = 0; + (void)hal_strncpy(features, "Using GIC interrupt controller", len); + features[len - 1U] = '\0'; return features; } @@ -236,19 +231,19 @@ int hal_interruptsDeleteHandler(intr_handler_t *h) } -int _interrupts_gicv2_classify(unsigned int irqn) +static unsigned int _interrupts_gicv2_classify(unsigned int irqn) { /* ZynqMP specific: most interrupts are high level, some are reserved. * PL to PS interrupts can be either high level or rising edge, here we configure * lower half as high level, upper half as rising edge */ - if ((irqn < 40) || ((irqn >= 129) && (irqn <= 135))) { - return 0; + if ((irqn < 40U) || ((irqn >= 129U) && (irqn <= 135U))) { + return 0U; } - else if ((irqn >= 136) && (irqn <= 143)) { - return 3; + else if ((irqn >= 136U) && (irqn <= 143U)) { + return 3U; } else { - return 1; + return 1U; } } @@ -257,9 +252,8 @@ int _interrupts_gicv2_classify(unsigned int irqn) void _hal_interruptsInit(void) { u32 i; - - interrupts_common.gicd = (void *)0xf9000000; - interrupts_common.gicc = (void *)0xf9001000; + interrupts_common.gicd = (void *)0xf9000000U; + interrupts_common.gicc = (void *)0xf9001000U; for (i = 0; i < SIZE_INTERRUPTS; ++i) { interrupts_common.handlers[i] = NULL; @@ -268,18 +262,18 @@ void _hal_interruptsInit(void) } /* Clear pending and disable interrupts */ - for (i = 0; i < (SIZE_INTERRUPTS + 31) / 32; i++) { - *(interrupts_common.gicd + gicd_icenabler0 + i) = 0xffffffff; - *(interrupts_common.gicd + gicd_icpendr0 + i) = 0xffffffff; - *(interrupts_common.gicd + gicd_icactiver0 + i) = 0xffffffff; + for (i = 0; i < (SIZE_INTERRUPTS + 31U) / 32U; i++) { + *(interrupts_common.gicd + gicd_icenabler0 + i) = 0xffffffffU; + *(interrupts_common.gicd + gicd_icpendr0 + i) = 0xffffffffU; + *(interrupts_common.gicd + gicd_icactiver0 + i) = 0xffffffffU; } - for (i = 0; i < 4; i++) { - *(interrupts_common.gicd + gicd_cpendsgir0 + i) = 0xffffffff; + for (i = 0; i < 4U; i++) { + *(interrupts_common.gicd + gicd_cpendsgir0 + i) = 0xffffffffU; } /* Disable distributor */ - *(interrupts_common.gicd + gicd_ctlr) &= ~0x3; + *(interrupts_common.gicd + gicd_ctlr) &= ~0x3U; /* Set default priorities - 128 for the SGI (IRQID: 0 - 15), PPI (IRQID: 16 - 31), SPI (IRQID: 32 - 188) */ for (i = 0; i < SIZE_INTERRUPTS; ++i) { @@ -293,29 +287,29 @@ void _hal_interruptsInit(void) } /* enable_secure = 1 */ - *(interrupts_common.gicd + gicd_ctlr) |= 0x3; + *(interrupts_common.gicd + gicd_ctlr) |= 0x3U; - *(interrupts_common.gicc + gicc_ctlr) &= ~0x3; + *(interrupts_common.gicc + gicc_ctlr) &= ~0x3U; /* Initialize CPU Interface of the gic * Set the maximum priority mask and binary point */ - *(interrupts_common.gicc + gicc_bpr) = 3; - *(interrupts_common.gicc + gicc_pmr) = 0xff; + *(interrupts_common.gicc + gicc_bpr) = 0x3U; + *(interrupts_common.gicc + gicc_pmr) = 0xffU; /* EnableGrp0 = 1; EnableGrp1 = 1; AckCtl = 1; FIQEn = 1 in secure mode * EnableGrp1 = 1 in non-secure mode, other bits are ignored */ - *(interrupts_common.gicc + gicc_ctlr) = *(interrupts_common.gicc + gicc_ctlr) | 0x7; + *(interrupts_common.gicc + gicc_ctlr) = *(interrupts_common.gicc + gicc_ctlr) | 0x7U; } -static void hal_cpuSendSGI(u8 targetFilter, u8 targetList, u8 intID) +static void hal_cpuSendSGI(u32 targetFilter, u32 targetList, u32 intID) { - *(interrupts_common.gicd + gicd_sgir) = ((targetFilter & 0x3) << 24) | (targetList << 16) | (intID & 0xf); + *(interrupts_common.gicd + gicd_sgir) = ((targetFilter & 0x3UL) << 24) | (targetList << 16) | (intID & 0xfU); hal_cpuDataSyncBarrier(); } void hal_cpuBroadcastIPI(unsigned int intr) { - hal_cpuSendSGI(SGI_FLT_OTHER_CPUS, 0, intr); + hal_cpuSendSGI(SGI_FLT_OTHER_CPUS, 0U, intr); } diff --git a/hal/armv7r/zynqmp/timer.c b/hal/armv7r/zynqmp/timer.c index 16ff58b8a..363ca481e 100644 --- a/hal/armv7r/zynqmp/timer.c +++ b/hal/armv7r/zynqmp/timer.c @@ -21,11 +21,11 @@ #include "zynqmp.h" -#define TTC0_BASE_ADDR ((addr_t)0x00ff110000) -#define TIMER_SRC_CLK_CPU_1x 99990000 -#define TIMER_IRQ_ID 68 +#define TTC0_BASE_ADDR ((addr_t)0x00ff110000U) +#define TIMER_SRC_CLK_CPU_1x 99990000U +#define TIMER_IRQ_ID 68U -struct { +static struct { volatile u32 *ttc; intr_handler_t handler; volatile time_t jiffies; @@ -53,8 +53,8 @@ static int _timer_irqHandler(unsigned int n, cpu_context_t *ctx, void *arg) spinlock_ctx_t sc; hal_spinlockSet(&timer_common.sp, &sc); /* Interval IRQ */ - if ((*(timer_common.ttc + isr) & 1) != 0) { - timer_common.jiffies += timer_common.ticksPerFreq; + if ((*(timer_common.ttc + isr) & 0x1U) != 0U) { + timer_common.jiffies += (time_t)timer_common.ticksPerFreq; } hal_spinlockClear(&timer_common.sp, &sc); @@ -67,7 +67,7 @@ static int _timer_irqHandler(unsigned int n, cpu_context_t *ctx, void *arg) static time_t hal_timerCyc2Us(time_t cyc) { - return (cyc * 1000LL) / (time_t)(timer_common.ticksPerFreq * hal_cpuGetCount()); + return (cyc * 1000LL) / ((time_t)timer_common.ticksPerFreq * (time_t)hal_cpuGetCount()); } @@ -81,9 +81,9 @@ static time_t hal_timerGetCyc(void) jiffies = timer_common.jiffies; /* Check if there's pending jiffies increment */ - if ((*(timer_common.ttc + isr) & 1) != 0) { + if ((*(timer_common.ttc + isr) & 0x1U) != 0U) { /* ISR register is clear on read, we have to update jiffies now */ - timer_common.jiffies += timer_common.ticksPerFreq; + timer_common.jiffies += (time_t)timer_common.ticksPerFreq; /* Timer might've just wrapped-around, * take counter value again */ @@ -109,7 +109,7 @@ time_t hal_timerGetUs(void) } -int hal_timerRegister(int (*f)(unsigned int, cpu_context_t *, void *), void *data, intr_handler_t *h) +int hal_timerRegister(int (*f)(unsigned int harg_1, cpu_context_t *harg_2, void *harg_3), void *data, intr_handler_t *h) { h->f = f; h->n = TIMER_IRQ_ID; @@ -124,16 +124,16 @@ static void hal_timerSetPrescaler(u32 freq) u32 ticks = TIMER_SRC_CLK_CPU_1x / freq; u32 prescaler = 0; - while ((ticks >= 0xffff) && (prescaler < 0x10)) { + while ((ticks >= 0xffffU) && (prescaler < 0x10U)) { prescaler++; - ticks /= 2; + ticks /= 2U; } - if (prescaler) { + if (prescaler != 0U) { /* Enable and set prescaler */ prescaler--; - *(timer_common.ttc + clk_ctrl) = (*(timer_common.ttc + clk_ctrl) & ~0x1f) | (prescaler << 1); - *(timer_common.ttc + clk_ctrl) |= 0x1; + *(timer_common.ttc + clk_ctrl) = (*(timer_common.ttc + clk_ctrl) & ~0x1fU) | (prescaler << 1); + *(timer_common.ttc + clk_ctrl) |= 0x1U; } timer_common.ticksPerFreq = ticks; @@ -142,8 +142,8 @@ static void hal_timerSetPrescaler(u32 freq) char *hal_timerFeatures(char *features, unsigned int len) { - hal_strncpy(features, "Using Triple Timer Counter", len); - features[len - 1] = '\0'; + (void)hal_strncpy(features, "Using Triple Timer Counter", len); + features[len - 1U] = '\0'; return features; } @@ -151,14 +151,14 @@ char *hal_timerFeatures(char *features, unsigned int len) void _hal_timerInit(u32 interval) { timer_common.ttc = (void *)TTC0_BASE_ADDR; - _zynq_setDevRst(pctl_devreset_lpd_ttc0, 0); + (void)_zynq_setDevRst(pctl_devreset_lpd_ttc0, 0); timer_common.jiffies = 0; /* Disable timer */ *(timer_common.ttc + clk_ctrl) = 0; /* Reset count control register */ - *(timer_common.ttc + cnt_ctrl) = 0x00000021; + *(timer_common.ttc + cnt_ctrl) = 0x00000021U; /* Reset registers */ *(timer_common.ttc + interval_val) = 0; @@ -168,10 +168,10 @@ void _hal_timerInit(u32 interval) *(timer_common.ttc + match1_cnt2) = 0; *(timer_common.ttc + match2_cnt3) = 0; *(timer_common.ttc + ier) = 0; - *(timer_common.ttc + isr) = 0x1f; + *(timer_common.ttc + isr) = 0x1fU; /* Reset counters and restart counting */ - *(timer_common.ttc + cnt_ctrl) = 0x10; + *(timer_common.ttc + cnt_ctrl) = 0x10U; hal_timerSetPrescaler(interval * hal_cpuGetCount()); @@ -179,12 +179,12 @@ void _hal_timerInit(u32 interval) timer_common.handler.f = _timer_irqHandler; timer_common.handler.n = TIMER_IRQ_ID; timer_common.handler.data = NULL; - hal_interruptsSetHandler(&timer_common.handler); + (void)hal_interruptsSetHandler(&timer_common.handler); - *(timer_common.ttc + interval_val) |= timer_common.ticksPerFreq & 0xffff; + *(timer_common.ttc + interval_val) |= timer_common.ticksPerFreq & 0xffffU; /* Reset counter */ - *(timer_common.ttc + cnt_ctrl) = 0x2; + *(timer_common.ttc + cnt_ctrl) = 0x2U; /* Enable interval irq timer */ - *(timer_common.ttc + ier) = 0x1; + *(timer_common.ttc + ier) = 0x1U; } diff --git a/hal/armv7r/zynqmp/zynqmp.c b/hal/armv7r/zynqmp/zynqmp.c index 9e75a7aab..c6390caf1 100644 --- a/hal/armv7r/zynqmp/zynqmp.c +++ b/hal/armv7r/zynqmp/zynqmp.c @@ -14,23 +14,26 @@ */ #include "hal/cpu.h" +#include "hal/hal.h" #include "hal/armv7r/armv7r.h" #include "hal/spinlock.h" #include "include/arch/armv7r/zynqmp/zynqmp.h" +#include "zynqmp.h" #include "hal/armv7r/halsyspage.h" -#include "zynqmp_regs.h" +#include "zynqmp_regs.h" /*TBC - hal/armv7r/zynqmp_regs.h*/ -#define IOU_SLCR_BASE_ADDRESS 0xff180000 -#define APU_BASE_ADDRESS 0xfd5c0000 -#define CRF_APB_BASE_ADDRESS 0xfd1a0000 -#define CRL_APB_BASE_ADDRESS 0xff5e0000 +#define IOU_SLCR_BASE_ADDRESS 0xff180000U +#define APU_BASE_ADDRESS 0xfd5c0000U +#define CRF_APB_BASE_ADDRESS 0xfd1a0000U +#define CRL_APB_BASE_ADDRESS 0xff5e0000U /* PLO entrypoint */ +/* parasoft-suppress-next-line MISRAC2012-RULE_8_6 "Definition in assembly code" */ extern void _start(void); -struct { +static struct { volatile u32 *iou_slcr; volatile u32 *crf_apb; volatile u32 *crl_apb; @@ -38,20 +41,20 @@ struct { } zynq_common; -static int _zynqmp_setBasicGenerator(volatile u32 *reg, int dev, char src, char div0, char div1, char active) +static int _zynqmp_setBasicGenerator(volatile u32 *reg, u32 dev, u8 src, u8 div0, u8 div1, u8 active) { u32 val = src; - if (dev == pctl_devclock_lpd_timestamp) { - val &= 0x7; + if (dev == (unsigned int)pctl_devclock_lpd_timestamp) { + val &= 0x7U; } else { - val &= 0x3; + val &= 0x3U; } - val |= ((div0 & 0x3f) << 8) | ((div1 & 0x3f) << 16) | (active << 24); - if (dev == pctl_devclock_lpd_cpu_r5) { + val |= (((u32)div0 & 0x3fU) << 8) | (((u32)div1 & 0x3fU) << 16) | ((u32)active << 24); + if (dev == (unsigned int)pctl_devclock_lpd_cpu_r5) { /* According to docs turning this bit off could lead to system hang - ensure it is on */ - val |= (1 << 24); + val |= (0x01UL << 24); } *reg = val; @@ -60,61 +63,63 @@ static int _zynqmp_setBasicGenerator(volatile u32 *reg, int dev, char src, char } -int _zynqmp_setDevClock(int dev, char src, char div0, char div1, char active) +static int _zynqmp_setDevClock(u32 dev, u8 src, u8 div0, u8 div1, u8 active) { - if ((dev >= pctl_devclock_lpd_usb3_dual) && (dev <= pctl_devclock_lpd_timestamp)) { - unsigned regOffset = (dev - pctl_devclock_lpd_usb3_dual) + crl_apb_usb3_dual_ref_ctrl; + if ((dev >= (unsigned int)pctl_devclock_lpd_usb3_dual) && (dev <= (unsigned int)pctl_devclock_lpd_timestamp)) { + unsigned regOffset = (dev - (unsigned int)pctl_devclock_lpd_usb3_dual) + (unsigned int)crl_apb_usb3_dual_ref_ctrl; return _zynqmp_setBasicGenerator(zynq_common.crl_apb + regOffset, dev, src, div0, div1, active); } else if ((dev >= pctl_devclock_fpd_acpu) && (dev <= pctl_devclock_fpd_dbg_tstmp)) { - unsigned regOffset = (dev - pctl_devclock_fpd_acpu) + crf_apb_acpu_ctrl; + unsigned regOffset = (dev - (unsigned int)pctl_devclock_fpd_acpu) + (unsigned long)crf_apb_acpu_ctrl; return _zynqmp_setBasicGenerator(zynq_common.crf_apb + regOffset, dev, src, div0, div1, active); } - - return -1; + else { + return -1; + } } -static int _zynqmp_getBasicGenerator(volatile u32 *reg, char *src, char *div0, char *div1, char *active) +static int _zynqmp_getBasicGenerator(volatile u32 *reg, u8 *src, u8 *div0, u8 *div1, u8 *active) { u32 val = *reg; - *src = val & 0x7; - *div0 = (val >> 8) & 0x3f; - *div1 = (val >> 16) & 0x3f; - *active = val >> 24; + *src = (u8)(val & 0x7U); + *div0 = (u8)((val >> 8) & 0x3fU); + *div1 = (u8)((val >> 16) & 0x3fU); + *active = (u8)(val >> 24U); return 0; } -int _zynqmp_getDevClock(int dev, char *src, char *div0, char *div1, char *active) +static int _zynqmp_getDevClock(u32 dev, u8 *src, u8 *div0, u8 *div1, u8 *active) { - if ((dev >= pctl_devclock_lpd_usb3_dual) && (dev <= pctl_devclock_lpd_timestamp)) { - unsigned regOffset = (dev - pctl_devclock_lpd_usb3_dual) + crl_apb_usb3_dual_ref_ctrl; + if ((dev >= (unsigned int)pctl_devclock_lpd_usb3_dual) && (dev <= (unsigned int)pctl_devclock_lpd_timestamp)) { + unsigned regOffset = (dev - (unsigned int)pctl_devclock_lpd_usb3_dual) + (unsigned int)crl_apb_usb3_dual_ref_ctrl; return _zynqmp_getBasicGenerator(zynq_common.crl_apb + regOffset, src, div0, div1, active); } else if ((dev >= pctl_devclock_fpd_acpu) && (dev <= pctl_devclock_fpd_dbg_tstmp)) { - unsigned regOffset = (dev - pctl_devclock_fpd_acpu) + crf_apb_acpu_ctrl; + unsigned regOffset = (dev - (unsigned int)pctl_devclock_fpd_acpu) + (unsigned int)crf_apb_acpu_ctrl; return _zynqmp_getBasicGenerator(zynq_common.crf_apb + regOffset, src, div0, div1, active); } - - return -1; + else { + return -1; + } } -static void _zynqmp_setMIOMuxing(unsigned pin, char l0, char l1, char l2, char l3) +static void _zynqmp_setMIOMuxing(unsigned pin, u8 l0, u8 l1, u8 l2, u8 l3) { - u32 val = ((l0 & 0x1) << 1) | ((l1 & 0x1) << 2) | ((l2 & 0x3) << 3) | ((l3 & 0x7) << 5); - *(zynq_common.iou_slcr + iou_slcr_mio_pin_0 + pin) = (*(zynq_common.iou_slcr + iou_slcr_mio_pin_0 + pin) & ~0xff) | val; + u32 val = ((l0 & 0x1UL) << 1) | ((l1 & 0x1UL) << 2) | ((l2 & 0x3UL) << 3) | ((l3 & 0x7UL) << 5); + *(zynq_common.iou_slcr + iou_slcr_mio_pin_0 + pin) = (*(zynq_common.iou_slcr + iou_slcr_mio_pin_0 + pin) & ~0xffU) | val; } -static void _zynqmp_setMIOTristate(unsigned pin, char config) +static void _zynqmp_setMIOTristate(unsigned pin, u8 config) { - u32 reg = pin / 32 + iou_slcr_mio_mst_tri0; - u32 bit = pin % 32; - u32 mask = 1 << bit; + u32 reg = pin / 32U + (unsigned int)iou_slcr_mio_mst_tri0; + u32 bit = pin % 32U; + u32 mask = 0x01UL << bit; - if ((config & PCTL_MIO_TRI_ENABLE) != 0) { + if ((config & PCTL_MIO_TRI_ENABLE) != 0U) { *(zynq_common.iou_slcr + reg) |= mask; } else { @@ -122,20 +127,20 @@ static void _zynqmp_setMIOTristate(unsigned pin, char config) } } -static void _zynqmp_setMIOControl(unsigned pin, char config) +static void _zynqmp_setMIOControl(unsigned pin, u8 config) { - u32 reg = (pin / 26) * (iou_slcr_bank1_ctrl0 - iou_slcr_bank0_ctrl0) + iou_slcr_bank0_ctrl0; - u32 bit = pin % 26; - u32 mask = 1 << bit; - int i; + u32 reg = (pin / 26U) * (unsigned int)(iou_slcr_bank1_ctrl0 - iou_slcr_bank0_ctrl0) + (unsigned int)iou_slcr_bank0_ctrl0; + u32 bit = pin % 26U; + u32 mask = 0x01UL << bit; + unsigned int i; - for (i = 0; i <= 6; i++) { - if (i == 2) { + for (i = 0U; i <= 6U; i++) { + if (i == 2U) { /* ctrl2 registers don't exist, skip */ continue; } - if ((config & (1 << i)) != 0) { + if ((config & (0x1U << i)) != 0U) { *(zynq_common.iou_slcr + reg + i) |= mask; } else { @@ -145,9 +150,9 @@ static void _zynqmp_setMIOControl(unsigned pin, char config) } -int _zynqmp_setMIO(unsigned pin, char l0, char l1, char l2, char l3, char config) +int _zynqmp_setMIO(unsigned pin, u8 l0, u8 l1, u8 l2, u8 l3, u8 config) { - if (pin > 77) { + if (pin > 77U) { return -1; } @@ -159,52 +164,52 @@ int _zynqmp_setMIO(unsigned pin, char l0, char l1, char l2, char l3, char config } -static void _zynqmp_getMIOMuxing(unsigned pin, char *l0, char *l1, char *l2, char *l3) +static void _zynqmp_getMIOMuxing(unsigned pin, u8 *l0, u8 *l1, u8 *l2, u8 *l3) { - u32 val = *(zynq_common.iou_slcr + iou_slcr_mio_pin_0 + pin) & 0xff; - *l0 = (val >> 1) & 0x1; - *l1 = (val >> 2) & 0x1; - *l2 = (val >> 3) & 0x3; - *l3 = (val >> 5) & 0x7; + u32 val = *(zynq_common.iou_slcr + iou_slcr_mio_pin_0 + pin) & 0xffU; + *l0 = (u8)(val >> 1) & 0x1U; + *l1 = (u8)(val >> 2) & 0x1U; + *l2 = (u8)(val >> 3) & 0x3U; + *l3 = (u8)(val >> 5) & 0x7U; } -static void _zynqmp_getMIOTristate(unsigned pin, char *config) +static void _zynqmp_getMIOTristate(unsigned pin, u8 *config) { - u32 reg = pin / 32 + iou_slcr_mio_mst_tri0; - u32 bit = pin % 32; - if (*(zynq_common.iou_slcr + reg) & (1 << bit)) { + u32 reg = pin / 32U + (unsigned int)iou_slcr_mio_mst_tri0; + u32 bit = pin % 32U; + if ((*(zynq_common.iou_slcr + reg) & (1UL << bit)) != 0U) { *config |= PCTL_MIO_TRI_ENABLE; } } -static void _zynqmp_getMIOControl(unsigned pin, char *config) +static void _zynqmp_getMIOControl(unsigned pin, u8 *config) { - u32 reg = (pin / 26) * (iou_slcr_bank1_ctrl0 - iou_slcr_bank0_ctrl0) + iou_slcr_bank0_ctrl0; - u32 bit = pin % 26; - u32 mask = 1 << bit; - int i; + u32 reg = (pin / 26U) * (unsigned int)(iou_slcr_bank1_ctrl0 - iou_slcr_bank0_ctrl0) + (unsigned int)iou_slcr_bank0_ctrl0; + u32 bit = pin % 26U; + u32 mask = 0x01UL << bit; + unsigned int i; - for (i = 0; i <= 6; i++) { - if (i == 2) { + for (i = 0U; i <= 6U; i++) { + if (i == 2U) { /* ctrl2 registers don't exist, skip */ continue; } - if ((*(zynq_common.iou_slcr + reg + i) & mask) != 0) { - *config |= (1 << i); + if ((*(zynq_common.iou_slcr + reg + i) & mask) != 0U) { + *config |= (0x1U << i); } } } -static int _zynqmp_getMIO(unsigned pin, char *l0, char *l1, char *l2, char *l3, char *config) +static int _zynqmp_getMIO(unsigned pin, u8 *l0, u8 *l1, u8 *l2, u8 *l3, u8 *config) { - if (pin > 77) { + if (pin > 77U) { return -1; } - *config = 0; + *config = 0U; _zynqmp_getMIOMuxing(pin, l0, l1, l2, l3); _zynqmp_getMIOTristate(pin, config); _zynqmp_getMIOControl(pin, config); @@ -215,83 +220,83 @@ static int _zynqmp_getMIO(unsigned pin, char *l0, char *l1, char *l2, char *l3, static int _zynqmp_parseReset(int dev, volatile u32 **reg, u32 *bit) { - static const u32 lookup[] = { - [pctl_devreset_lpd_gem0] = crl_apb_rst_lpd_iou0 | (0 << 12), - [pctl_devreset_lpd_gem1] = crl_apb_rst_lpd_iou0 | (1 << 12), - [pctl_devreset_lpd_gem2] = crl_apb_rst_lpd_iou0 | (2 << 12), - [pctl_devreset_lpd_gem3] = crl_apb_rst_lpd_iou0 | (3 << 12), - [pctl_devreset_lpd_qspi] = crl_apb_rst_lpd_iou2 | (0 << 12), - [pctl_devreset_lpd_uart0] = crl_apb_rst_lpd_iou2 | (1 << 12), - [pctl_devreset_lpd_uart1] = crl_apb_rst_lpd_iou2 | (2 << 12), - [pctl_devreset_lpd_spi0] = crl_apb_rst_lpd_iou2 | (3 << 12), - [pctl_devreset_lpd_spi1] = crl_apb_rst_lpd_iou2 | (4 << 12), - [pctl_devreset_lpd_sdio0] = crl_apb_rst_lpd_iou2 | (5 << 12), - [pctl_devreset_lpd_sdio1] = crl_apb_rst_lpd_iou2 | (6 << 12), - [pctl_devreset_lpd_can0] = crl_apb_rst_lpd_iou2 | (7 << 12), - [pctl_devreset_lpd_can1] = crl_apb_rst_lpd_iou2 | (8 << 12), - [pctl_devreset_lpd_i2c0] = crl_apb_rst_lpd_iou2 | (9 << 12), - [pctl_devreset_lpd_i2c1] = crl_apb_rst_lpd_iou2 | (10 << 12), - [pctl_devreset_lpd_ttc0] = crl_apb_rst_lpd_iou2 | (11 << 12), - [pctl_devreset_lpd_ttc1] = crl_apb_rst_lpd_iou2 | (12 << 12), - [pctl_devreset_lpd_ttc2] = crl_apb_rst_lpd_iou2 | (13 << 12), - [pctl_devreset_lpd_ttc3] = crl_apb_rst_lpd_iou2 | (14 << 12), - [pctl_devreset_lpd_swdt] = crl_apb_rst_lpd_iou2 | (15 << 12), - [pctl_devreset_lpd_nand] = crl_apb_rst_lpd_iou2 | (16 << 12), - [pctl_devreset_lpd_lpd_dma] = crl_apb_rst_lpd_iou2 | (17 << 12), - [pctl_devreset_lpd_gpio] = crl_apb_rst_lpd_iou2 | (18 << 12), - [pctl_devreset_lpd_iou_cc] = crl_apb_rst_lpd_iou2 | (19 << 12), - [pctl_devreset_lpd_timestamp] = crl_apb_rst_lpd_iou2 | (20 << 12), - [pctl_devreset_lpd_rpu_r50] = crl_apb_rst_lpd_top | (0 << 12), - [pctl_devreset_lpd_rpu_r51] = crl_apb_rst_lpd_top | (1 << 12), - [pctl_devreset_lpd_rpu_amba] = crl_apb_rst_lpd_top | (2 << 12), - [pctl_devreset_lpd_ocm] = crl_apb_rst_lpd_top | (3 << 12), - [pctl_devreset_lpd_rpu_pge] = crl_apb_rst_lpd_top | (4 << 12), - [pctl_devreset_lpd_usb0_corereset] = crl_apb_rst_lpd_top | (6 << 12), - [pctl_devreset_lpd_usb1_corereset] = crl_apb_rst_lpd_top | (7 << 12), - [pctl_devreset_lpd_usb0_hiberreset] = crl_apb_rst_lpd_top | (8 << 12), - [pctl_devreset_lpd_usb1_hiberreset] = crl_apb_rst_lpd_top | (9 << 12), - [pctl_devreset_lpd_usb0_apb] = crl_apb_rst_lpd_top | (10 << 12), - [pctl_devreset_lpd_usb1_apb] = crl_apb_rst_lpd_top | (11 << 12), - [pctl_devreset_lpd_ipi] = crl_apb_rst_lpd_top | (14 << 12), - [pctl_devreset_lpd_apm] = crl_apb_rst_lpd_top | (15 << 12), - [pctl_devreset_lpd_rtc] = crl_apb_rst_lpd_top | (16 << 12), - [pctl_devreset_lpd_sysmon] = crl_apb_rst_lpd_top | (17 << 12), - [pctl_devreset_lpd_s_axi_lpd] = crl_apb_rst_lpd_top | (19 << 12), - [pctl_devreset_lpd_lpd_swdt] = crl_apb_rst_lpd_top | (20 << 12), - [pctl_devreset_lpd_fpd] = crl_apb_rst_lpd_top | (23 << 12), - [pctl_devreset_lpd_dbg_fpd] = crl_apb_rst_lpd_dbg | (0 << 12), - [pctl_devreset_lpd_dbg_lpd] = crl_apb_rst_lpd_dbg | (1 << 12), - [pctl_devreset_lpd_rpu_dbg0] = crl_apb_rst_lpd_dbg | (4 << 12), - [pctl_devreset_lpd_rpu_dbg1] = crl_apb_rst_lpd_dbg | (5 << 12), - [pctl_devreset_lpd_dbg_ack] = crl_apb_rst_lpd_dbg | (15 << 12), - [pctl_devreset_fpd_sata] = crf_apb_rst_fpd_top | (1 << 12), - [pctl_devreset_fpd_gt] = crf_apb_rst_fpd_top | (2 << 12), - [pctl_devreset_fpd_gpu] = crf_apb_rst_fpd_top | (3 << 12), - [pctl_devreset_fpd_gpu_pp0] = crf_apb_rst_fpd_top | (4 << 12), - [pctl_devreset_fpd_gpu_pp1] = crf_apb_rst_fpd_top | (5 << 12), - [pctl_devreset_fpd_fpd_dma] = crf_apb_rst_fpd_top | (6 << 12), - [pctl_devreset_fpd_s_axi_hpc_0_fpd] = crf_apb_rst_fpd_top | (7 << 12), - [pctl_devreset_fpd_s_axi_hpc_1_fpd] = crf_apb_rst_fpd_top | (8 << 12), - [pctl_devreset_fpd_s_axi_hp_0_fpd] = crf_apb_rst_fpd_top | (9 << 12), - [pctl_devreset_fpd_s_axi_hp_1_fpd] = crf_apb_rst_fpd_top | (10 << 12), - [pctl_devreset_fpd_s_axi_hpc_2_fpd] = crf_apb_rst_fpd_top | (11 << 12), - [pctl_devreset_fpd_s_axi_hpc_3_fpd] = crf_apb_rst_fpd_top | (12 << 12), - [pctl_devreset_fpd_swdt] = crf_apb_rst_fpd_top | (15 << 12), - [pctl_devreset_fpd_dp] = crf_apb_rst_fpd_top | (16 << 12), - [pctl_devreset_fpd_pcie_ctrl] = crf_apb_rst_fpd_top | (17 << 12), - [pctl_devreset_fpd_pcie_bridge] = crf_apb_rst_fpd_top | (18 << 12), - [pctl_devreset_fpd_pcie_cfg] = crf_apb_rst_fpd_top | (19 << 12), - [pctl_devreset_fpd_acpu0] = crf_apb_rst_fpd_apu | (0 << 12), - [pctl_devreset_fpd_acpu1] = crf_apb_rst_fpd_apu | (1 << 12), - [pctl_devreset_fpd_acpu2] = crf_apb_rst_fpd_apu | (2 << 12), - [pctl_devreset_fpd_acpu3] = crf_apb_rst_fpd_apu | (3 << 12), - [pctl_devreset_fpd_apu_l2] = crf_apb_rst_fpd_apu | (8 << 12), - [pctl_devreset_fpd_acpu0_pwron] = crf_apb_rst_fpd_apu | (10 << 12), - [pctl_devreset_fpd_acpu1_pwron] = crf_apb_rst_fpd_apu | (11 << 12), - [pctl_devreset_fpd_acpu2_pwron] = crf_apb_rst_fpd_apu | (12 << 12), - [pctl_devreset_fpd_acpu3_pwron] = crf_apb_rst_fpd_apu | (13 << 12), - [pctl_devreset_fpd_ddr_apm] = crf_apb_rst_ddr_ss | (2 << 12), - [pctl_devreset_fpd_ddr_reserved] = crf_apb_rst_ddr_ss | (3 << 12), + static const u32 lookup[76] = { + [pctl_devreset_lpd_gem0] = (unsigned int)crl_apb_rst_lpd_iou0 | (0UL << 12), + [pctl_devreset_lpd_gem1] = (unsigned int)crl_apb_rst_lpd_iou0 | (1UL << 12), + [pctl_devreset_lpd_gem2] = (unsigned int)crl_apb_rst_lpd_iou0 | (2UL << 12), + [pctl_devreset_lpd_gem3] = (unsigned int)crl_apb_rst_lpd_iou0 | (3UL << 12), + [pctl_devreset_lpd_qspi] = (unsigned int)crl_apb_rst_lpd_iou2 | (0UL << 12), + [pctl_devreset_lpd_uart0] = (unsigned int)crl_apb_rst_lpd_iou2 | (1UL << 12), + [pctl_devreset_lpd_uart1] = (unsigned int)crl_apb_rst_lpd_iou2 | (2UL << 12), + [pctl_devreset_lpd_spi0] = (unsigned int)crl_apb_rst_lpd_iou2 | (3UL << 12), + [pctl_devreset_lpd_spi1] = (unsigned int)crl_apb_rst_lpd_iou2 | (4UL << 12), + [pctl_devreset_lpd_sdio0] = (unsigned int)crl_apb_rst_lpd_iou2 | (5UL << 12), + [pctl_devreset_lpd_sdio1] = (unsigned int)crl_apb_rst_lpd_iou2 | (6UL << 12), + [pctl_devreset_lpd_can0] = (unsigned int)crl_apb_rst_lpd_iou2 | (7UL << 12), + [pctl_devreset_lpd_can1] = (unsigned int)crl_apb_rst_lpd_iou2 | (8UL << 12), + [pctl_devreset_lpd_i2c0] = (unsigned int)crl_apb_rst_lpd_iou2 | (9UL << 12), + [pctl_devreset_lpd_i2c1] = (unsigned int)crl_apb_rst_lpd_iou2 | (10UL << 12), + [pctl_devreset_lpd_ttc0] = (unsigned int)crl_apb_rst_lpd_iou2 | (11UL << 12), + [pctl_devreset_lpd_ttc1] = (unsigned int)crl_apb_rst_lpd_iou2 | (12UL << 12), + [pctl_devreset_lpd_ttc2] = (unsigned int)crl_apb_rst_lpd_iou2 | (13UL << 12), + [pctl_devreset_lpd_ttc3] = (unsigned int)crl_apb_rst_lpd_iou2 | (14UL << 12), + [pctl_devreset_lpd_swdt] = (unsigned int)crl_apb_rst_lpd_iou2 | (15UL << 12), + [pctl_devreset_lpd_nand] = (unsigned int)crl_apb_rst_lpd_iou2 | (16UL << 12), + [pctl_devreset_lpd_lpd_dma] = (unsigned int)crl_apb_rst_lpd_iou2 | (17UL << 12), + [pctl_devreset_lpd_gpio] = (unsigned int)crl_apb_rst_lpd_iou2 | (18UL << 12), + [pctl_devreset_lpd_iou_cc] = (unsigned int)crl_apb_rst_lpd_iou2 | (19UL << 12), + [pctl_devreset_lpd_timestamp] = (unsigned int)crl_apb_rst_lpd_iou2 | (20UL << 12), + [pctl_devreset_lpd_rpu_r50] = (unsigned int)crl_apb_rst_lpd_top | (0UL << 12), + [pctl_devreset_lpd_rpu_r51] = (unsigned int)crl_apb_rst_lpd_top | (1UL << 12), + [pctl_devreset_lpd_rpu_amba] = (unsigned int)crl_apb_rst_lpd_top | (2UL << 12), + [pctl_devreset_lpd_ocm] = (unsigned int)crl_apb_rst_lpd_top | (3UL << 12), + [pctl_devreset_lpd_rpu_pge] = (unsigned int)crl_apb_rst_lpd_top | (4UL << 12), + [pctl_devreset_lpd_usb0_corereset] = (unsigned int)crl_apb_rst_lpd_top | (6UL << 12), + [pctl_devreset_lpd_usb1_corereset] = (unsigned int)crl_apb_rst_lpd_top | (7UL << 12), + [pctl_devreset_lpd_usb0_hiberreset] = (unsigned int)crl_apb_rst_lpd_top | (8UL << 12), + [pctl_devreset_lpd_usb1_hiberreset] = (unsigned int)crl_apb_rst_lpd_top | (9UL << 12), + [pctl_devreset_lpd_usb0_apb] = (unsigned int)crl_apb_rst_lpd_top | (10UL << 12), + [pctl_devreset_lpd_usb1_apb] = (unsigned int)crl_apb_rst_lpd_top | (11UL << 12), + [pctl_devreset_lpd_ipi] = (unsigned int)crl_apb_rst_lpd_top | (14UL << 12), + [pctl_devreset_lpd_apm] = (unsigned int)crl_apb_rst_lpd_top | (15UL << 12), + [pctl_devreset_lpd_rtc] = (unsigned int)crl_apb_rst_lpd_top | (16UL << 12), + [pctl_devreset_lpd_sysmon] = (unsigned int)crl_apb_rst_lpd_top | (17UL << 12), + [pctl_devreset_lpd_s_axi_lpd] = (unsigned int)crl_apb_rst_lpd_top | (19UL << 12), + [pctl_devreset_lpd_lpd_swdt] = (unsigned int)crl_apb_rst_lpd_top | (20UL << 12), + [pctl_devreset_lpd_fpd] = (unsigned int)crl_apb_rst_lpd_top | (23UL << 12), + [pctl_devreset_lpd_dbg_fpd] = (unsigned int)crl_apb_rst_lpd_dbg | (0UL << 12), + [pctl_devreset_lpd_dbg_lpd] = (unsigned int)crl_apb_rst_lpd_dbg | (1UL << 12), + [pctl_devreset_lpd_rpu_dbg0] = (unsigned int)crl_apb_rst_lpd_dbg | (4UL << 12), + [pctl_devreset_lpd_rpu_dbg1] = (unsigned int)crl_apb_rst_lpd_dbg | (5UL << 12), + [pctl_devreset_lpd_dbg_ack] = (unsigned int)crl_apb_rst_lpd_dbg | (15UL << 12), + [pctl_devreset_fpd_sata] = (unsigned int)crf_apb_rst_fpd_top | (1UL << 12), + [pctl_devreset_fpd_gt] = (unsigned int)crf_apb_rst_fpd_top | (2UL << 12), + [pctl_devreset_fpd_gpu] = (unsigned int)crf_apb_rst_fpd_top | (3UL << 12), + [pctl_devreset_fpd_gpu_pp0] = (unsigned int)crf_apb_rst_fpd_top | (4UL << 12), + [pctl_devreset_fpd_gpu_pp1] = (unsigned int)crf_apb_rst_fpd_top | (5UL << 12), + [pctl_devreset_fpd_fpd_dma] = (unsigned int)crf_apb_rst_fpd_top | (6UL << 12), + [pctl_devreset_fpd_s_axi_hpc_0_fpd] = (unsigned int)crf_apb_rst_fpd_top | (7UL << 12), + [pctl_devreset_fpd_s_axi_hpc_1_fpd] = (unsigned int)crf_apb_rst_fpd_top | (8UL << 12), + [pctl_devreset_fpd_s_axi_hp_0_fpd] = (unsigned int)crf_apb_rst_fpd_top | (9UL << 12), + [pctl_devreset_fpd_s_axi_hp_1_fpd] = (unsigned int)crf_apb_rst_fpd_top | (10UL << 12), + [pctl_devreset_fpd_s_axi_hpc_2_fpd] = (unsigned int)crf_apb_rst_fpd_top | (11UL << 12), + [pctl_devreset_fpd_s_axi_hpc_3_fpd] = (unsigned int)crf_apb_rst_fpd_top | (12UL << 12), + [pctl_devreset_fpd_swdt] = (unsigned int)crf_apb_rst_fpd_top | (15UL << 12), + [pctl_devreset_fpd_dp] = (unsigned int)crf_apb_rst_fpd_top | (16UL << 12), + [pctl_devreset_fpd_pcie_ctrl] = (unsigned int)crf_apb_rst_fpd_top | (17UL << 12), + [pctl_devreset_fpd_pcie_bridge] = (unsigned int)crf_apb_rst_fpd_top | (18UL << 12), + [pctl_devreset_fpd_pcie_cfg] = (unsigned int)crf_apb_rst_fpd_top | (19UL << 12), + [pctl_devreset_fpd_acpu0] = (unsigned int)crf_apb_rst_fpd_apu | (0UL << 12), + [pctl_devreset_fpd_acpu1] = (unsigned int)crf_apb_rst_fpd_apu | (1UL << 12), + [pctl_devreset_fpd_acpu2] = (unsigned int)crf_apb_rst_fpd_apu | (2UL << 12), + [pctl_devreset_fpd_acpu3] = (unsigned int)crf_apb_rst_fpd_apu | (3UL << 12), + [pctl_devreset_fpd_apu_l2] = (unsigned int)crf_apb_rst_fpd_apu | (8UL << 12), + [pctl_devreset_fpd_acpu0_pwron] = (unsigned int)crf_apb_rst_fpd_apu | (10UL << 12), + [pctl_devreset_fpd_acpu1_pwron] = (unsigned int)crf_apb_rst_fpd_apu | (11UL << 12), + [pctl_devreset_fpd_acpu2_pwron] = (unsigned int)crf_apb_rst_fpd_apu | (12UL << 12), + [pctl_devreset_fpd_acpu3_pwron] = (unsigned int)crf_apb_rst_fpd_apu | (13UL << 12), + [pctl_devreset_fpd_ddr_apm] = (unsigned int)crf_apb_rst_ddr_ss | (2UL << 12), + [pctl_devreset_fpd_ddr_reserved] = (unsigned int)crf_apb_rst_ddr_ss | (3UL << 12), }; if ((dev < pctl_devreset_lpd_gem0) || (dev > pctl_devreset_fpd_ddr_reserved)) { @@ -299,13 +304,13 @@ static int _zynqmp_parseReset(int dev, volatile u32 **reg, u32 *bit) } if (dev >= pctl_devreset_fpd_sata) { - *reg = zynq_common.crf_apb + (lookup[dev] & ((1 << 12) - 1)); + *reg = zynq_common.crf_apb + (lookup[dev] & ((0x1UL << 12) - 1U)); } else { - *reg = zynq_common.crl_apb + (lookup[dev] & ((1 << 12) - 1)); + *reg = zynq_common.crl_apb + (lookup[dev] & ((0x1UL << 12) - 1U)); } - *bit = (1u << (lookup[dev] >> 12)); + *bit = (0x1UL << (lookup[dev] >> 12U)); return 0; } @@ -319,7 +324,7 @@ int _zynq_setDevRst(int dev, unsigned int state) return -1; } - if (state != 0) { + if (state != 0U) { *reg |= bit; } else { @@ -340,7 +345,7 @@ static int _zynq_getDevRst(int dev, unsigned int *state) return -1; } - *state = ((*reg & bit) != 0) ? 1 : 0; + *state = ((*reg & bit) != 0U) ? 1 : 0; return 0; } @@ -348,7 +353,7 @@ static int _zynq_getDevRst(int dev, unsigned int *state) static void zynqmp_softRst(void) { /* Equivalent to PS_SRST_B signal */ - *(zynq_common.crl_apb + crl_apb_reset_ctrl) |= (1 << 4); + *(zynq_common.crl_apb + crl_apb_reset_ctrl) |= (1UL << 4); } @@ -375,27 +380,40 @@ int hal_platformctl(void *ptr) switch (data->type) { case pctl_devclock: - if (data->action == pctl_set) + if (data->action == pctl_set) { ret = _zynqmp_setDevClock(data->devclock.dev, data->devclock.src, data->devclock.div0, data->devclock.div1, data->devclock.active); - else if (data->action == pctl_set) + } + else if (data->action == pctl_set) { ret = _zynqmp_getDevClock(data->devclock.dev, &data->devclock.src, &data->devclock.div0, &data->devclock.div1, &data->devclock.active); + } + else { + /* No action required */ + } break; case pctl_mio: - if (data->action == pctl_set) + if (data->action == pctl_set) { ret = _zynqmp_setMIO(data->mio.pin, data->mio.l0, data->mio.l1, data->mio.l2, data->mio.l3, data->mio.config); - else if (data->action == pctl_get) + } + else if (data->action == pctl_get) { ret = _zynqmp_getMIO(data->mio.pin, &data->mio.l0, &data->mio.l1, &data->mio.l2, &data->mio.l3, &data->mio.config); + } + else { + /* No action required */ + } break; case pctl_devreset: if (data->action == pctl_set) { - ret = _zynq_setDevRst(data->devreset.dev, data->devreset.state); + ret = _zynq_setDevRst((int)data->devreset.dev, data->devreset.state); } else if (data->action == pctl_get) { - ret = _zynq_getDevRst(data->devreset.dev, &t); + ret = _zynq_getDevRst((int)data->devreset.dev, &t); data->devreset.state = t; } + else { + /* No action required */ + } break; case pctl_reboot: @@ -404,11 +422,15 @@ int hal_platformctl(void *ptr) } else if (data->action == pctl_get) { ret = 0; - data->reboot.reason = syspage->hs.resetReason; + data->reboot.reason = (unsigned int)syspage->hs.resetReason; + } + else { + /* No action required */ } break; default: + /* Error by default */ break; } diff --git a/hal/armv7r/zynqmp/zynqmp.h b/hal/armv7r/zynqmp/zynqmp.h index 6d58ab3c8..d1637bef6 100644 --- a/hal/armv7r/zynqmp/zynqmp.h +++ b/hal/armv7r/zynqmp/zynqmp.h @@ -20,7 +20,7 @@ #include "include/arch/armv7r/zynqmp/zynqmp.h" -extern int _zynqmp_setMIO(unsigned pin, char l0, char l1, char l2, char l3, char config); +extern int _zynqmp_setMIO(unsigned pin, u8 l0, u8 l1, u8 l2, u8 l3, u8 config); extern int _zynq_setDevRst(int dev, unsigned int state); diff --git a/hal/armv7r/zynqmp/zynqmp_regs.h b/hal/armv7r/zynqmp/zynqmp_regs.h index b30f94c1d..05629d78d 100644 --- a/hal/armv7r/zynqmp/zynqmp_regs.h +++ b/hal/armv7r/zynqmp/zynqmp_regs.h @@ -18,16 +18,16 @@ #define _ZYNQMP_REGS_H_ enum { - iou_slcr_mio_pin_0 = 0x0, /* 78 registers */ - iou_slcr_bank0_ctrl0 = 0x4e, /* 6 registers */ - iou_slcr_bank0_status = 0x54, + iou_slcr_mio_pin_0 = 0x0UL, /* 78 registers */ + iou_slcr_bank0_ctrl0 = 0x4eUL, /* 6 registers */ + iou_slcr_bank0_status = 0x54UL, iou_slcr_bank1_ctrl0, /* 6 registers */ - iou_slcr_bank1_status = 0x5b, + iou_slcr_bank1_status = 0x5bUL, iou_slcr_bank2_ctrl0, /* 6 registers */ - iou_slcr_bank2_status = 0x62, - iou_slcr_mio_loopback = 0x80, + iou_slcr_bank2_status = 0x62UL, + iou_slcr_mio_loopback = 0x80UL, iou_slcr_mio_mst_tri0, /* 3 registers */ - iou_slcr_wdt_clk_sel = 0xc0, + iou_slcr_wdt_clk_sel = 0xc0UL, iou_slcr_can_mio_ctrl, iou_slcr_gem_clk_ctrl, iou_slcr_sdio_clk_ctrl, @@ -45,19 +45,19 @@ enum { iou_slcr_sd_sdr50prset, iou_slcr_sd_sdr104prst, iou_slcr_sd_ddr50preset, - iou_slcr_sd_maxcur1p8 = 0xd3, + iou_slcr_sd_maxcur1p8 = 0xd3UL, iou_slcr_sd_maxcur3p0, iou_slcr_sd_maxcur3p1, iou_slcr_sd_dll_ctrl, iou_slcr_sd_cdn_ctrl, iou_slcr_gem_ctrl, - iou_slcr_iou_ttc_apb_clk = 0xe0, - iou_slcr_iou_tapdly_bypass = 0xe4, - iou_slcr_iou_coherent_ctrl = 0x100, + iou_slcr_iou_ttc_apb_clk = 0xe0UL, + iou_slcr_iou_tapdly_bypass = 0xe4UL, + iou_slcr_iou_coherent_ctrl = 0x100UL, iou_slcr_video_pss_clk_sel, iou_slcr_iou_interconnect_route, - iou_slcr_ctrl = 0x180, - iou_slcr_isr = 0x1c0, + iou_slcr_ctrl = 0x180UL, + iou_slcr_isr = 0x1c0UL, iou_slcr_imr, iou_slcr_ier, iou_slcr_idr, @@ -65,14 +65,14 @@ enum { }; enum { - apu_err_ctrl = 0x0, - apu_isr = 0x4, + apu_err_ctrl = 0x0UL, + apu_isr = 0x4UL, apu_imr, apu_ien, apu_ids, apu_config_0, apu_config_1, - apu_rvbaraddr0l = 0x10, + apu_rvbaraddr0l = 0x10UL, apu_rvbaraddr0h, apu_rvbaraddr1l, apu_rvbaraddr1h, @@ -81,18 +81,18 @@ enum { apu_rvbaraddr3l, apu_rvbaraddr3h, apu_ace_ctrl, - apu_snoop_ctrl = 0x20, - apu_pwrctl = 0x24, + apu_snoop_ctrl = 0x20UL, + apu_pwrctl = 0x24UL, apu_pwrstat, }; enum { - crf_apb_err_ctrl = 0x0, + crf_apb_err_ctrl = 0x0UL, crf_apb_ir_status, crf_apb_ir_mask, crf_apb_ir_enable, crf_apb_ir_disable, - crf_apb_crf_wprot = 0x7, + crf_apb_crf_wprot = 0x7UL, crf_apb_apll_ctrl, crf_apb_apll_cfg, crf_apb_apll_frac_cfg, @@ -106,40 +106,40 @@ enum { crf_apb_apll_to_lpd_ctrl, crf_apb_dpll_to_lpd_ctrl, crf_apb_vpll_to_lpd_ctrl, - crf_apb_acpu_ctrl = 0x18, + crf_apb_acpu_ctrl = 0x18UL, crf_apb_dbg_trace_ctrl, crf_apb_dbg_fpd_ctrl, - crf_apb_dp_video_ref_ctrl = 0x1c, + crf_apb_dp_video_ref_ctrl = 0x1cUL, crf_apb_dp_audio_ref_ctrl, - crf_apb_dp_stc_ref_ctrl = 0x1f, + crf_apb_dp_stc_ref_ctrl = 0x1fUL, crf_apb_ddr_ctrl, crf_apb_gpu_ref_ctrl, - crf_apb_sata_ref_ctrl = 0x28, - crf_apb_pcie_ref_ctrl = 0x2d, + crf_apb_sata_ref_ctrl = 0x28UL, + crf_apb_pcie_ref_ctrl = 0x2dUL, crf_apb_fpd_dma_ref_ctrl, crf_apb_dpdma_ref_ctrl, crf_apb_topsw_main_ctrl, crf_apb_topsw_lsbus_ctrl, - crf_apb_dbg_tstmp_ctrl = 0x3e, - crf_apb_rst_fpd_top = 0x40, + crf_apb_dbg_tstmp_ctrl = 0x3eUL, + crf_apb_rst_fpd_top = 0x40UL, crf_apb_rst_fpd_apu, crf_apb_rst_ddr_ss, }; enum { - crl_apb_err_ctrl = 0x0, + crl_apb_err_ctrl = 0x0UL, crl_apb_ir_status, crl_apb_ir_mask, crl_apb_ir_enable, crl_apb_ir_disable, - crl_apb_crl_wprot = 0x7, + crl_apb_crl_wprot = 0x7UL, crl_apb_iopll_ctrl, crl_apb_iopll_cfg, crl_apb_iopll_frac_cfg, - crl_apb_rpll_ctrl = 0xc, + crl_apb_rpll_ctrl = 0xcUL, crl_apb_rpll_cfg, crl_apb_rpll_frac_cfg, - crl_apb_pll_status = 0x10, + crl_apb_pll_status = 0x10UL, crl_apb_iopll_to_fpd_ctrl, crl_apb_rpll_to_fpd_ctrl, crl_apb_usb3_dual_ref_ctrl, @@ -158,8 +158,8 @@ enum { crl_apb_spi1_ref_ctrl, crl_apb_can0_ref_ctrl, crl_apb_can1_ref_ctrl, - crl_apb_cpu_r5_ctrl = 0x24, - crl_apb_iou_switch_ctrl = 0x27, + crl_apb_cpu_r5_ctrl = 0x24UL, + crl_apb_iou_switch_ctrl = 0x27UL, crl_apb_csu_pll_ctrl, crl_apb_pcap_ctrl, crl_apb_lpd_switch_ctrl, @@ -167,7 +167,7 @@ enum { crl_apb_dbg_lpd_ctrl, crl_apb_nand_ref_ctrl, crl_apb_lpd_dma_ref_ctrl, - crl_apb_pl0_ref_ctrl = 0x30, + crl_apb_pl0_ref_ctrl = 0x30UL, crl_apb_pl1_ref_ctrl, crl_apb_pl2_ref_ctrl, crl_apb_pl3_ref_ctrl, @@ -178,35 +178,35 @@ enum { crl_apb_pl2_thr_ctrl, crl_apb_pl2_thr_cnt, crl_apb_pl3_thr_ctrl, - crl_apb_pl3_thr_cnt = 0x3f, + crl_apb_pl3_thr_cnt = 0x3fUL, crl_apb_gem_tsu_ref_ctrl, crl_apb_dll_ref_ctrl, crl_apb_pssysmon_ref_ctrl, - crl_apb_i2c0_ref_ctrl = 0x48, + crl_apb_i2c0_ref_ctrl = 0x48UL, crl_apb_i2c1_ref_ctrl, crl_apb_timestamp_ref_ctrl, - crl_apb_safety_chk = 0x4c, - crl_apb_clkmon_status = 0x50, + crl_apb_safety_chk = 0x4cUL, + crl_apb_clkmon_status = 0x50UL, crl_apb_clkmon_mask, crl_apb_clkmon_enable, crl_apb_clkmon_disable, crl_apb_clkmon_trigger, - crl_apb_chkr0_clka_upper = 0x58, /* 8 banks of 4 registers */ + crl_apb_chkr0_clka_upper = 0x58UL, /* 8 banks of 4 registers */ crl_apb_chkr0_clka_lower, crl_apb_chkr0_clkb_cnt, crl_apb_chkr0_ctrl, - crl_apb_boot_mode_user = 0x80, + crl_apb_boot_mode_user = 0x80UL, crl_apb_boot_mode_por, - crl_apb_reset_ctrl = 0x86, + crl_apb_reset_ctrl = 0x86UL, crl_apb_blockonly_rst, crl_apb_reset_reason, - crl_apb_rst_lpd_iou0 = 0x8c, - crl_apb_rst_lpd_iou2 = 0x8e, + crl_apb_rst_lpd_iou0 = 0x8cUL, + crl_apb_rst_lpd_iou2 = 0x8eUL, crl_apb_rst_lpd_top, crl_apb_rst_lpd_dbg, - crl_apb_boot_pin_ctrl = 0x94, - crl_apb_bank3_ctrl0 = 0x9c, /* 6 registers */ - crl_apb_bank3_status = 0xa2, + crl_apb_boot_pin_ctrl = 0x94UL, + crl_apb_bank3_ctrl0 = 0x9cUL, /* 6 registers */ + crl_apb_bank3_status = 0xa2UL, }; #endif /* _ZYNQMP_REGS_H_ */ diff --git a/hal/armv8m/arch/cpu.h b/hal/armv8m/arch/cpu.h index e1c7f11e1..8feabe2fa 100644 --- a/hal/armv8m/arch/cpu.h +++ b/hal/armv8m/arch/cpu.h @@ -18,14 +18,14 @@ #include "hal/types.h" -#define SIZE_PAGE 0x200 +#define SIZE_PAGE 0x200U #ifndef SIZE_USTACK -#define SIZE_USTACK (3 * SIZE_PAGE) +#define SIZE_USTACK (3U * SIZE_PAGE) #endif #ifndef SIZE_KSTACK -#define SIZE_KSTACK (4 * SIZE_PAGE) +#define SIZE_KSTACK (4U * SIZE_PAGE) #endif /* values based on EXC_RETURN requirements */ diff --git a/hal/armv8m/cpu.c b/hal/armv8m/cpu.c index 44a7bd3aa..5b620fe9c 100644 --- a/hal/armv8m/cpu.c +++ b/hal/armv8m/cpu.c @@ -69,7 +69,7 @@ void hal_cpuSetDevBusy(int s) } -int hal_cpuCreateContext(cpu_context_t **nctx, void *start, void *kstack, size_t kstacksz, void *ustack, void *arg, hal_tls_t *tls) +int hal_cpuCreateContext(cpu_context_t **nctx, void (*start)(void *harg), void *kstack, size_t kstacksz, void *ustack, void *arg, hal_tls_t *tls) { cpu_context_t *ctx; @@ -93,7 +93,7 @@ int hal_cpuCreateContext(cpu_context_t **nctx, void *start, void *kstack, size_t hal_memset(ctx, 0, sizeof(*ctx)); ctx->savesp_s = (u32)ctx; - ctx->psp = (ustack != NULL) ? (u32)ustack - (HWCTXSIZE * sizeof(int)) : NULL; + ctx->psp = (ustack != NULL) ? (u32)ustack - (HWCTXSIZE * sizeof(int)) : 0; ctx->msp = (ustack != NULL) ? (u32)kstack + kstacksz : (u32)&ctx->hwctx; ctx->r4 = 0x44444444u; ctx->r5 = 0x55555555u; diff --git a/hal/armv8m/exceptions.c b/hal/armv8m/exceptions.c index ab45f0c4c..73fd76d83 100644 --- a/hal/armv8m/exceptions.c +++ b/hal/armv8m/exceptions.c @@ -38,7 +38,7 @@ enum exceptions { }; -void hal_exceptionsDumpContext(char *buff, exc_context_t *ctx, int n) +void hal_exceptionsDumpContext(char *buff, exc_context_t *ctx, unsigned int n) { static const char *mnemonics[] = { "0 #InitialSP", "1 #Reset", "2 #NMI", "3 #HardFault", diff --git a/hal/armv8m/mcx/_init.S b/hal/armv8m/mcx/_init.S index 5faf78a15..cd9061bb3 100644 --- a/hal/armv8m/mcx/_init.S +++ b/hal/armv8m/mcx/_init.S @@ -289,7 +289,7 @@ hal_jmp: cpsid if isb - cmp r2, #NULL + cmp r2, #0 bne hal_jmp_user /* kargs has been passed on the stack */ diff --git a/hal/armv8m/mcx/n94x/mcxn94x.c b/hal/armv8m/mcx/n94x/mcxn94x.c index fb256b5fe..475dd4411 100644 --- a/hal/armv8m/mcx/n94x/mcxn94x.c +++ b/hal/armv8m/mcx/n94x/mcxn94x.c @@ -18,6 +18,8 @@ #include "hal/arm/scs.h" #include "hal/cpu.h" +#include "hal/hal.h" + #include "include/errno.h" @@ -176,7 +178,7 @@ u64 _mcxn94x_sysconGray2Bin(u64 gray) hal_cpuDataMemoryBarrier(); ret = *(n94x_common.syscon + syscon_binarycodelsb); - ret |= ((u64)*(n94x_common.syscon + syscon_binarycodemsb)) << 32; + ret |= ((u64) * (n94x_common.syscon + syscon_binarycodemsb)) << 32; return ret; } @@ -425,7 +427,7 @@ static int _mcxn94x_sysconGetRegs(int dev, volatile u32 **selr, volatile u32 **d *divr = n94x_common.syscon + syscon_sai1clkdiv; break; - /* enet TODO */ + /* enet TODO */ case pctl_micfil: *selr = n94x_common.syscon + syscon_micfilfclksel; @@ -565,7 +567,7 @@ int hal_platformctl(void *ptr) case pctl_devclk: if (data->action == pctl_set) { ret = _mcxn94x_sysconSetDevClk(data->devClk.dev, data->devClk.sel, - data->devClk.div, data->devClk.enable); + data->devClk.div, data->devClk.enable); } else if (data->action == pctl_get) { ret = _mcxn94x_sysconGetDevClk(data->devClk.dev, &sel, &div, &enable); @@ -595,7 +597,7 @@ int hal_platformctl(void *ptr) } else { ret = _mcxn94x_portPinConfig(data->pinConf.pin, data->pinConf.mux, - data->pinConf.options); + data->pinConf.options); } break; diff --git a/hal/armv8m/mcx/n94x/mcxn94x.h b/hal/armv8m/mcx/n94x/mcxn94x.h index 1a5a72faf..349f586e8 100644 --- a/hal/armv8m/mcx/n94x/mcxn94x.h +++ b/hal/armv8m/mcx/n94x/mcxn94x.h @@ -37,9 +37,6 @@ extern int _mcxn94x_sysconDevReset(int dev, int state); extern int hal_platformctl(void *ptr); -extern void _hal_platformInit(void); - - extern void _mcxn94x_scbSetPriorityGrouping(u32 group); diff --git a/hal/armv8m/nrf/91/nrf91.c b/hal/armv8m/nrf/91/nrf91.c index 53cbcaed1..c6784835e 100644 --- a/hal/armv8m/nrf/91/nrf91.c +++ b/hal/armv8m/nrf/91/nrf91.c @@ -17,6 +17,7 @@ #include "hal/arm/scs.h" +#include "hal/hal.h" #include "hal/cpu.h" #include "include/errno.h" diff --git a/hal/armv8m/nrf/91/nrf91.h b/hal/armv8m/nrf/91/nrf91.h index 9ff015e2b..97782e754 100644 --- a/hal/armv8m/nrf/91/nrf91.h +++ b/hal/armv8m/nrf/91/nrf91.h @@ -36,9 +36,6 @@ enum { scb_actlr = 2, scb_cpuid = 832, scb_icsr, scb_vtor, scb_aircr, scb_scr, s extern int hal_platformctl(void *); -extern void _hal_platformInit(void); - - extern int _nrf91_systickInit(u32 interval); diff --git a/hal/armv8m/nrf/_init.S b/hal/armv8m/nrf/_init.S index a247084ca..6d2620bb3 100644 --- a/hal/armv8m/nrf/_init.S +++ b/hal/armv8m/nrf/_init.S @@ -265,7 +265,7 @@ hal_cpuReschedule: eor r0, r0, r0 /* default return value */ bl _hal_invokePendSV pop {r1-r3, lr} - cmp r1, #NULL + cmp r1, #0 beq hal_cpuReschedule0 push {r3-r4} add r1, r1, #12 @@ -293,7 +293,7 @@ hal_jmp: cpsid if isb - cmp r2, #NULL + cmp r2, #0 bne hal_jmp_user /* kargs has been passed on the stack */ diff --git a/hal/armv8m/pmap.c b/hal/armv8m/pmap.c index 94a029da9..504fcb8c4 100644 --- a/hal/armv8m/pmap.c +++ b/hal/armv8m/pmap.c @@ -167,7 +167,7 @@ int pmap_getPage(page_t *page, addr_t *addr) char pmap_marker(page_t *p) { - return 0; + return '\0'; } diff --git a/hal/armv8m/stm32/_init.S b/hal/armv8m/stm32/_init.S index a29763d42..b11f3e7da 100644 --- a/hal/armv8m/stm32/_init.S +++ b/hal/armv8m/stm32/_init.S @@ -290,7 +290,7 @@ hal_jmp: cpsid if isb - cmp r2, #NULL + cmp r2, #0 bne hal_jmp_user /* kargs has been passed on the stack */ diff --git a/hal/armv8m/stm32/n6/stm32n6.c b/hal/armv8m/stm32/n6/stm32n6.c index 2d23952a9..2314cfd57 100644 --- a/hal/armv8m/stm32/n6/stm32n6.c +++ b/hal/armv8m/stm32/n6/stm32n6.c @@ -19,6 +19,7 @@ #include "hal/armv8m/stm32/halsyspage.h" #include "hal/cpu.h" +#include "hal/hal.h" #include "include/errno.h" #include "hal/arm/scs.h" diff --git a/hal/armv8m/stm32/stm32.h b/hal/armv8m/stm32/stm32.h index 354a2ed8a..0c302444a 100644 --- a/hal/armv8m/stm32/stm32.h +++ b/hal/armv8m/stm32/stm32.h @@ -57,9 +57,6 @@ enum gpio_pupds { extern int hal_platformctl(void *); -extern void _hal_platformInit(void); - - /* Sets peripheral's bus clock */ extern int _stm32_rccSetDevClock(unsigned int dev, u32 status, u32 lpStatus); diff --git a/hal/armv8m/string.c b/hal/armv8m/string.c index 4e62b74c3..15245d6f7 100644 --- a/hal/armv8m/string.c +++ b/hal/armv8m/string.c @@ -169,7 +169,7 @@ char *hal_strncpy(char *dest, const char *src, size_t n) } -unsigned long hal_i2s(const char *prefix, char *s, unsigned long i, unsigned char b, char zero) +unsigned long hal_i2s(const char *prefix, char *s, unsigned long i, u8 b, u8 zero) { static const char digits[] = "0123456789abcdef"; char c; diff --git a/hal/armv8r/arch/cpu.h b/hal/armv8r/arch/cpu.h index 8b53b4873..5910eb0f6 100644 --- a/hal/armv8r/arch/cpu.h +++ b/hal/armv8r/arch/cpu.h @@ -16,17 +16,17 @@ #ifndef _HAL_ARMV8R_CPU_H_ #define _HAL_ARMV8R_CPU_H_ -#define SIZE_PAGE 0x1000 +#define SIZE_PAGE 0x1000U #define SIZE_INITIAL_KSTACK SIZE_PAGE #define INITIAL_KSTACK_SHIFT 12 #ifndef SIZE_KSTACK -#define SIZE_KSTACK (8 * 1024) +#define SIZE_KSTACK (8U * 1024U) #endif #ifndef SIZE_USTACK -#define SIZE_USTACK (8 * SIZE_PAGE) +#define SIZE_USTACK (8U * SIZE_PAGE) #endif /* ARMv8 processor modes */ @@ -274,7 +274,7 @@ static inline void hal_cpuSmpSync(void) } -extern unsigned int hal_cpuGetCount(void); +unsigned int hal_cpuGetCount(void); #endif diff --git a/hal/armv8r/cpu.c b/hal/armv8r/cpu.c index 9bb18560d..97fa3f940 100644 --- a/hal/armv8r/cpu.c +++ b/hal/armv8r/cpu.c @@ -22,10 +22,7 @@ #include "config.h" -extern void _hal_platformInit(void); - - -int hal_cpuCreateContext(cpu_context_t **nctx, void *start, void *kstack, size_t kstacksz, void *ustack, void *arg, hal_tls_t *tls) +int hal_cpuCreateContext(cpu_context_t **nctx, void (*start)(void *harg), void *kstack, size_t kstacksz, void *ustack, void *arg, hal_tls_t *tls) { cpu_context_t *ctx; int i; diff --git a/hal/armv8r/exceptions.c b/hal/armv8r/exceptions.c index 40d7fd84e..d56716e8d 100644 --- a/hal/armv8r/exceptions.c +++ b/hal/armv8r/exceptions.c @@ -51,7 +51,7 @@ enum { exc_reset = 0, exc_undef, exc_svc, exc_prefetch, exc_abort }; /* clang-format on */ -void hal_exceptionsDumpContext(char *buff, exc_context_t *ctx, int n) +void hal_exceptionsDumpContext(char *buff, exc_context_t *ctx, unsigned int n) { static const char *const mnemonics[] = { "0 #Reset", "1 #Undef", "2 #Syscall", "3 #Prefetch", diff --git a/hal/armv8r/pmap.c b/hal/armv8r/pmap.c index fb5d7d70b..75775c9f0 100644 --- a/hal/armv8r/pmap.c +++ b/hal/armv8r/pmap.c @@ -82,7 +82,7 @@ int pmap_getPage(page_t *page, addr_t *addr) char pmap_marker(page_t *p) { - return 0; + return '\0'; } diff --git a/hal/armv8r/string.c b/hal/armv8r/string.c index 340f6777e..574354041 100644 --- a/hal/armv8r/string.c +++ b/hal/armv8r/string.c @@ -173,7 +173,7 @@ char *hal_strncpy(char *dest, const char *src, size_t n) } -unsigned long hal_i2s(const char *prefix, char *s, unsigned long i, unsigned char b, char zero) +unsigned long hal_i2s(const char *prefix, char *s, unsigned long i, u8 b, u8 zero) { static const char digits[] = "0123456789abcdef"; char c; diff --git a/hal/common.c b/hal/common.c index ce1cbdd21..0b70497a4 100644 --- a/hal/common.c +++ b/hal/common.c @@ -20,7 +20,7 @@ #include "hal/types.h" /* STACK_ALIGN is most strict stack alignment constraint across all supported architectures. */ -#define STACK_ALIGN 16 +#define STACK_ALIGN 16U void hal_stackPutArgs(void **stackp, size_t argc, const struct stackArg *argv) @@ -32,7 +32,7 @@ void hal_stackPutArgs(void **stackp, size_t argc, const struct stackArg *argv) argsz += SIZE_STACK_ARG(argv[i].sz); } - misalign = (stack - argsz) & (STACK_ALIGN - 1); + misalign = (stack - argsz) & (STACK_ALIGN - 1U); stack -= misalign; for (i = 0; i < argc; i++) { diff --git a/hal/console.h b/hal/console.h index 87ca3ecf4..830bf3628 100644 --- a/hal/console.h +++ b/hal/console.h @@ -22,9 +22,11 @@ #define ATTR_BOLD 0x0f #define ATTR_USER 0x07 -#define CONSOLE_CYAN "\033[36m" -#define CONSOLE_NORMAL "\033[0m" -#define CONSOLE_BOLD "\033[1m" +/* clang-format off */ +#define CONSOLE_CYAN "\033" "[36m" +#define CONSOLE_NORMAL "\033" "[0m" +#define CONSOLE_BOLD "\033" "[1m" +/* clang-format on */ extern void hal_consolePrint(int attr, const char *s); diff --git a/hal/cpu.h b/hal/cpu.h index cde1b94a9..6b921f3ed 100644 --- a/hal/cpu.h +++ b/hal/cpu.h @@ -34,125 +34,135 @@ struct stackArg { size_t sz; }; +/* parasoft-begin-suppress MISRAC2012-RULE_1_5 MISRAC2012-RULE_8_8 + * "Depending on the architecture it may be beneficial to static inline + * implementation of those usually small functions, the extern however + * needs to stay in order for the code to be portable between different + * approaches to implementation" + */ /* interrupts */ -extern void hal_cpuDisableInterrupts(void); +void hal_cpuDisableInterrupts(void); -extern void hal_cpuEnableInterrupts(void); +void hal_cpuEnableInterrupts(void); /* performance */ -extern void hal_cpuLowPower(time_t us, spinlock_t *spinlock, spinlock_ctx_t *sc); +void hal_cpuLowPower(time_t us, spinlock_t *spinlock, spinlock_ctx_t *sc); -extern void hal_cpuSetDevBusy(int s); +void hal_cpuSetDevBusy(int s); -extern void hal_cpuHalt(void); +void hal_cpuHalt(void); -extern void hal_cpuGetCycles(cycles_t *cb); +/* parasoft-suppress-next-line MISRAC2012-RULE_8_6 "Definition in assembly code" */ +void hal_cpuGetCycles(cycles_t *cb); /* bit operations */ -extern unsigned int hal_cpuGetLastBit(unsigned long v); +unsigned int hal_cpuGetLastBit(unsigned long v); -extern unsigned int hal_cpuGetFirstBit(unsigned long v); +unsigned int hal_cpuGetFirstBit(unsigned long v); /* context management */ -extern void hal_cpuSetCtxGot(cpu_context_t *ctx, void *got); +void hal_cpuSetCtxGot(cpu_context_t *ctx, void *got); -extern void hal_cpuSetGot(void *got); +void hal_cpuSetGot(void *got); -extern void *hal_cpuGetGot(void); +void *hal_cpuGetGot(void); -extern int hal_cpuCreateContext(cpu_context_t **nctx, void *start, void *kstack, size_t kstacksz, void *ustack, void *arg, struct _hal_tls_t *tls); +int hal_cpuCreateContext(cpu_context_t **nctx, void (*start)(void *harg), void *kstack, size_t kstacksz, void *ustack, void *arg, struct _hal_tls_t *tls); -extern int hal_cpuReschedule(struct _spinlock_t *spinlock, spinlock_ctx_t *scp); +/* parasoft-suppress-next-line MISRAC2012-RULE_8_6 "Definition in assembly code" */ +int hal_cpuReschedule(struct _spinlock_t *spinlock, spinlock_ctx_t *scp); -extern void hal_cpuRestore(cpu_context_t *curr, cpu_context_t *next); +void hal_cpuRestore(cpu_context_t *curr, cpu_context_t *next); -extern void hal_cpuSetReturnValue(cpu_context_t *ctx, void *retval); +void hal_cpuSetReturnValue(cpu_context_t *ctx, void *retval); -extern void _hal_cpuSetKernelStack(void *kstack); +/* parasoft-suppress-next-line MISRAC2012-RULE_8_6 "Definition in assembly code" */ +void _hal_cpuSetKernelStack(void *kstack); -extern void *hal_cpuGetSP(cpu_context_t *ctx); +void *hal_cpuGetSP(cpu_context_t *ctx); -extern void *hal_cpuGetUserSP(cpu_context_t *ctx); +void *hal_cpuGetUserSP(cpu_context_t *ctx); -extern int hal_cpuSupervisorMode(cpu_context_t *ctx); +int hal_cpuSupervisorMode(cpu_context_t *ctx); /* oldmask: mask to be restored in sigreturn after handling the signal */ -extern int hal_cpuPushSignal(void *kstack, void (*handler)(void), cpu_context_t *signalCtx, int n, unsigned int oldmask, const int src); +int hal_cpuPushSignal(void *kstack, void (*handler)(void), cpu_context_t *signalCtx, int n, unsigned int oldmask, const int src); -extern void hal_cpuSigreturn(void *kstack, void *ustack, cpu_context_t **ctx); +void hal_cpuSigreturn(void *kstack, void *ustack, cpu_context_t **ctx); -extern void hal_jmp(void *f, void *kstack, void *ustack, size_t kargc, const arg_t *kargs); +/* parasoft-suppress-next-line MISRAC2012-RULE_8_6 "Definition in assembly code" */ +void hal_jmp(void *f, void *kstack, void *ustack, size_t kargc, const arg_t *kargs); /* core management */ -extern unsigned int hal_cpuGetID(void); +unsigned int hal_cpuGetID(void); -extern unsigned int hal_cpuGetCount(void); +unsigned int hal_cpuGetCount(void); -extern char *hal_cpuInfo(char *info); +char *hal_cpuInfo(char *info); -extern char *hal_cpuFeatures(char *features, unsigned int len); +char *hal_cpuFeatures(char *features, unsigned int len); -extern void hal_cpuBroadcastIPI(unsigned int intr); +void hal_cpuBroadcastIPI(unsigned int intr); -extern void hal_cpuReboot(void); +void hal_cpuReboot(void); -extern void hal_cpuSmpSync(void); +void hal_cpuSmpSync(void); /* thread local storage */ -extern void hal_cpuTlsSet(struct _hal_tls_t *tls, cpu_context_t *ctx); +void hal_cpuTlsSet(struct _hal_tls_t *tls, cpu_context_t *ctx); /* cache management */ -extern void hal_cleanDCache(ptr_t start, size_t len); +void hal_cleanDCache(ptr_t start, size_t len); /* stack management */ -extern void hal_stackPutArgs(void **stack, size_t argc, const struct stackArg *argv); - +void hal_stackPutArgs(void **stackp, size_t argc, const struct stackArg *argv); +/* parasoft-end-suppress MISRAC2012-RULE_1_5 MISRAC2012-RULE_8_8 */ #endif diff --git a/hal/exceptions.h b/hal/exceptions.h index 793e03523..e9234e355 100644 --- a/hal/exceptions.h +++ b/hal/exceptions.h @@ -28,10 +28,10 @@ extern void *hal_exceptionsFaultAddr(unsigned int n, exc_context_t *ctx); extern ptr_t hal_exceptionsPC(exc_context_t *ctx); -extern void hal_exceptionsDumpContext(char *buff, exc_context_t *ctx, int n); +extern void hal_exceptionsDumpContext(char *buff, exc_context_t *ctx, unsigned int n); -extern int hal_exceptionsSetHandler(unsigned int n, void (*handler)(unsigned int, exc_context_t *)); +extern int hal_exceptionsSetHandler(unsigned int n, void (*handler)(unsigned int n, exc_context_t *ctx)); extern void _hal_exceptionsInit(void); diff --git a/hal/gaisler/ambapp.c b/hal/gaisler/ambapp.c index 490004b44..16919f2a4 100644 --- a/hal/gaisler/ambapp.c +++ b/hal/gaisler/ambapp.c @@ -232,5 +232,5 @@ void ambapp_init(void) /* NOTE: on GR740 uncacheable areas (AMBA PnP) must be mapped as such */ ambapp_common.ahbpnp = (ptr_t)_pmap_halMap(AMBAPP_AHB_MSTR, NULL, SIZE_PAGE, PGHD_READ | PGHD_NOT_CACHED | PGHD_PRESENT); - ambapp_common.apbpnp = (ptr_t)_pmap_halMap(NULL, NULL, SIZE_PAGE, PGHD_READ | PGHD_NOT_CACHED | PGHD_PRESENT); + ambapp_common.apbpnp = (ptr_t)_pmap_halMap(0, NULL, SIZE_PAGE, PGHD_READ | PGHD_NOT_CACHED | PGHD_PRESENT); } diff --git a/hal/hal.h b/hal/hal.h index 2976d0a5f..215620bb4 100644 --- a/hal/hal.h +++ b/hal/hal.h @@ -62,4 +62,10 @@ extern void _hal_init(void); extern void hal_lockScheduler(void); +extern void _hal_cpuInit(void); + + +extern void _hal_platformInit(void); + + #endif diff --git a/hal/ia32/arch/cpu.h b/hal/ia32/arch/cpu.h index 76d894e1e..f095838f0 100644 --- a/hal/ia32/arch/cpu.h +++ b/hal/ia32/arch/cpu.h @@ -19,16 +19,16 @@ #include "hal/types.h" -#define SIZE_PAGE 0x1000u +#define SIZE_PAGE 0x1000U /* Default kernel and user stack sizes */ #ifndef SIZE_KSTACK -#define SIZE_KSTACK (2 * SIZE_PAGE) +#define SIZE_KSTACK (2U * SIZE_PAGE) #endif #ifndef SIZE_USTACK -#define SIZE_USTACK (8 * SIZE_PAGE) +#define SIZE_USTACK (8U * SIZE_PAGE) #endif @@ -192,7 +192,6 @@ } while (0) - #pragma pack(push, 1) typedef struct { @@ -281,13 +280,13 @@ void hal_cpuSendIPI(unsigned int cpu, unsigned int intrAndFlags); static inline void hal_cpuDisableInterrupts(void) { - __asm__ volatile ("cli":); + __asm__ volatile("cli"); } static inline void hal_cpuEnableInterrupts(void) { - __asm__ volatile ("sti":); + __asm__ volatile("sti"); } @@ -296,7 +295,7 @@ static inline void hal_cpuEnableInterrupts(void) static inline void hal_cpuHalt(void) { - __asm__ volatile ("hlt":); + __asm__ volatile("hlt"); } diff --git a/hal/ia32/cpu.c b/hal/ia32/cpu.c index 93915f3bf..f33caae63 100644 --- a/hal/ia32/cpu.c +++ b/hal/ia32/cpu.c @@ -114,7 +114,7 @@ u32 cpu_getEFLAGS(void) } -int hal_cpuCreateContext(cpu_context_t **nctx, void *start, void *kstack, size_t kstacksz, void *ustack, void *arg, hal_tls_t *tls) +int hal_cpuCreateContext(cpu_context_t **nctx, void (*start)(void *harg), void *kstack, size_t kstacksz, void *ustack, void *arg, hal_tls_t *tls) { cpu_context_t *ctx; @@ -339,7 +339,7 @@ static void _cpu_gdtInsert(unsigned int idx, u32 base, u32 limit, u32 type) } descrh = (base & 0xff000000) | (type & 0x00c00000) | (limit & 0x000f0000) | - (type & 0x0000ff00) | ((base >> 16) & 0x000000ff); + (type & 0x0000ff00) | ((base >> 16) & 0x000000ff); descrl = (base << 16) | (limit & 0xffff); diff --git a/hal/ia32/exceptions.c b/hal/ia32/exceptions.c index 373bc488f..4ab6c5649 100644 --- a/hal/ia32/exceptions.c +++ b/hal/ia32/exceptions.c @@ -112,7 +112,7 @@ ptr_t hal_exceptionsPC(exc_context_t *ctx) } -void hal_exceptionsDumpContext(char *buff, exc_context_t *ctx, int n) +void hal_exceptionsDumpContext(char *buff, exc_context_t *ctx, unsigned int n) { static const char *const mnemonics[] = { "0 #DE", "1 #DB", "2 #NMI", "3 #BP", "4 #OF", "5 #BR", "6 #UD", "7 #NM", diff --git a/hal/ia32/pmap.c b/hal/ia32/pmap.c index f559feefb..02e57f5fb 100644 --- a/hal/ia32/pmap.c +++ b/hal/ia32/pmap.c @@ -62,7 +62,7 @@ addr_t pmap_destroy(pmap_t *pmap, int *i) int kernel = ((VADDR_KERNEL + SIZE_PAGE) & ~(SIZE_PAGE - 1)) >> 22; while (*i < kernel) { - if (pmap->pdir[*i] != NULL) { + if (pmap->pdir[*i] != 0) { return pmap->pdir[(*i)++] & ~(SIZE_PAGE - 1); } (*i)++; diff --git a/hal/ia32/string.c b/hal/ia32/string.c index 8e73c85ab..a0f686469 100644 --- a/hal/ia32/string.c +++ b/hal/ia32/string.c @@ -160,7 +160,7 @@ char *hal_strncpy(char *dest, const char *src, size_t n) } -unsigned long hal_i2s(const char *prefix, char *s, unsigned long i, unsigned char b, char zero) +unsigned long hal_i2s(const char *prefix, char *s, unsigned long i, u8 b, u8 zero) { static const char digits[] = "0123456789abcdef"; char c; diff --git a/hal/list.h b/hal/list.h index f7309c073..7327035f9 100644 --- a/hal/list.h +++ b/hal/list.h @@ -23,8 +23,9 @@ #define HAL_LIST_ADD(list, t) \ do { \ - if ((t) == NULL) \ + if ((t) == NULL) { \ break; \ + } \ if (*(list) == NULL) { \ (t)->next = (t); \ (t)->prev = (t); \ @@ -40,15 +41,18 @@ #define HAL_LIST_REMOVE(list, t) \ do { \ - if ((t) == NULL) \ + if ((t) == NULL) { \ break; \ - if (((t)->next == (t)) && ((t)->prev == (t))) \ + } \ + if (((t)->next == (t)) && ((t)->prev == (t))) { \ (*(list)) = NULL; \ + } \ else { \ (t)->prev->next = (t)->next; \ (t)->next->prev = (t)->prev; \ - if ((t) == (*(list))) \ + if ((t) == (*(list))) { \ (*(list)) = (t)->next; \ + } \ } \ (t)->next = NULL; \ (t)->prev = NULL; \ diff --git a/hal/pmap.h b/hal/pmap.h index 034ab172e..20c9395c8 100644 --- a/hal/pmap.h +++ b/hal/pmap.h @@ -19,9 +19,10 @@ #include +/* parasoft-suppress-next-line MISRAC2012-RULE_2_1 "Used only in targets with MMU" */ static inline int pmap_belongs(pmap_t *pmap, void *addr) { - return addr >= pmap->start && addr < pmap->end; + return ((ptr_t)addr >= (ptr_t)pmap->start && (ptr_t)addr < (ptr_t)pmap->end) ? 1 : 0; } @@ -66,6 +67,6 @@ extern int _pmap_kernelSpaceExpand(pmap_t *pmap, void **start, void *end, page_t extern int pmap_segment(unsigned int i, void **vaddr, size_t *size, int *prot, void **top); -extern void _pmap_init(pmap_t *pmap, void **start, void **end); +extern void _pmap_init(pmap_t *pmap, void **vstart, void **vend); #endif diff --git a/hal/riscv64/arch/cpu.h b/hal/riscv64/arch/cpu.h index d67acf1d3..8a4ac361e 100644 --- a/hal/riscv64/arch/cpu.h +++ b/hal/riscv64/arch/cpu.h @@ -18,20 +18,20 @@ #include "hal/types.h" -#define SIZE_PAGE 0x1000 +#define SIZE_PAGE 0x1000UL #define MAX_CPU_COUNT 8 -#define SIZE_INITIAL_KSTACK (4 * SIZE_PAGE) +#define SIZE_INITIAL_KSTACK (4U * SIZE_PAGE) #define INITIAL_KSTACK_BIT (14) /* Default kernel and user stack sizes */ #ifndef SIZE_KSTACK -#define SIZE_KSTACK (4 * SIZE_PAGE) +#define SIZE_KSTACK (4U * SIZE_PAGE) #endif #ifndef SIZE_USTACK -#define SIZE_USTACK (8 * SIZE_PAGE) +#define SIZE_USTACK (8U * SIZE_PAGE) #endif /* Supervisor Cause Register */ @@ -42,21 +42,21 @@ #define SCAUSE_ECALL 8u /* Environment call from S-mode */ /* Supervisor Status Register */ -#define SSTATUS_SIE (1u << 1) /* Supervisor Interrupt Enable */ -#define SSTATUS_SPP (1u << 8) /* Previous Supervisor */ -#define SSTATUS_SPIE (1u << 5) /* Previous Supervisor IE */ -#define SSTATUS_FS (3u << 13) /* FPU status */ -#define SSTATUS_SUM (1u << 18) /* Supervisor may access User Memory */ -#define SSTATUS_MXR (1u << 19) /* Make eXecutable Readable */ +#define SSTATUS_SIE (1U << 1) /* Supervisor Interrupt Enable */ +#define SSTATUS_SPP (1U << 8) /* Previous Supervisor */ +#define SSTATUS_SPIE (1U << 5) /* Previous Supervisor IE */ +#define SSTATUS_FS (3U << 13) /* FPU status */ +#define SSTATUS_SUM (1U << 18) /* Supervisor may access User Memory */ +#define SSTATUS_MXR (1U << 19) /* Make eXecutable Readable */ /* Interrupts */ #define CLINT_IRQ_FLG (1u << 31) /* Marks that interrupt handler is installed for CLINT, not PLIC */ /* Supervisor Interrupt Pending Register */ -#define SIP_SSIP (1u << 1) +#define SIP_SSIP (1U << 1) -#define CPU_CTX_SIZE 0x230u +#define CPU_CTX_SIZE 0x230U #ifndef __ASSEMBLY__ @@ -67,7 +67,7 @@ #define SYSTICK_INTERVAL 1000 -#define SIZE_STACK_ARG(sz) (((sz) + 7u) & ~0x7u) +#define SIZE_STACK_ARG(sz) (((sz) + 7u) & ~0x7U) #define GETFROMSTACK(ustack, t, v, n) \ diff --git a/hal/riscv64/cpu.c b/hal/riscv64/cpu.c index 6a947d900..6c982808c 100644 --- a/hal/riscv64/cpu.c +++ b/hal/riscv64/cpu.c @@ -116,7 +116,7 @@ unsigned int hal_cpuGetFirstBit(unsigned long v) /* context management */ -int hal_cpuCreateContext(cpu_context_t **nctx, void *start, void *kstack, size_t kstacksz, void *ustack, void *arg, hal_tls_t *tls) +int hal_cpuCreateContext(cpu_context_t **nctx, void (*start)(void *harg), void *kstack, size_t kstacksz, void *ustack, void *arg, hal_tls_t *tls) { cpu_context_t *ctx; diff --git a/hal/riscv64/exceptions.c b/hal/riscv64/exceptions.c index 0b2f9293f..2bc79961e 100644 --- a/hal/riscv64/exceptions.c +++ b/hal/riscv64/exceptions.c @@ -31,7 +31,7 @@ static struct { } exceptions_common; -void hal_exceptionsDumpContext(char *buff, exc_context_t *ctx, int n) +void hal_exceptionsDumpContext(char *buff, exc_context_t *ctx, unsigned int n) { unsigned int i = 0; diff --git a/hal/riscv64/hal.c b/hal/riscv64/hal.c index 41ca554d2..7c457c7a9 100644 --- a/hal/riscv64/hal.c +++ b/hal/riscv64/hal.c @@ -30,9 +30,6 @@ volatile u32 hal_multilock; extern void _hal_cpuInit(void); -extern void _hal_platformInit(void); - - void *hal_syspageRelocate(void *data) { return ((u8 *)data + hal_relOffs); diff --git a/hal/riscv64/string.c b/hal/riscv64/string.c index e58020548..94791a590 100644 --- a/hal/riscv64/string.c +++ b/hal/riscv64/string.c @@ -108,7 +108,7 @@ char *hal_strncpy(char *dest, const char *src, size_t n) } -unsigned long hal_i2s(const char *prefix, char *s, unsigned long i, unsigned char b, char zero) +unsigned long hal_i2s(const char *prefix, char *s, unsigned long i, u8 b, u8 zero) { static const char digits[] = "0123456789abcdef"; char c; diff --git a/hal/sparcv8leon/arch/cpu.h b/hal/sparcv8leon/arch/cpu.h index 155a567bd..c5aa4e8c9 100644 --- a/hal/sparcv8leon/arch/cpu.h +++ b/hal/sparcv8leon/arch/cpu.h @@ -19,20 +19,20 @@ #ifdef NOMMU -#define SIZE_PAGE 0x200 +#define SIZE_PAGE 0x200U /* Default kernel and user stack sizes */ #ifndef SIZE_KSTACK -#define SIZE_KSTACK (8 * SIZE_PAGE) +#define SIZE_KSTACK (8U * SIZE_PAGE) #endif #ifndef SIZE_USTACK -#define SIZE_USTACK (8 * SIZE_PAGE) +#define SIZE_USTACK (8U * SIZE_PAGE) #endif #else -#define SIZE_PAGE 0x1000 +#define SIZE_PAGE 0x1000U /* Default kernel and user stack sizes */ #ifndef SIZE_KSTACK @@ -40,7 +40,7 @@ #endif #ifndef SIZE_USTACK -#define SIZE_USTACK (4 * SIZE_PAGE) +#define SIZE_USTACK (4U * SIZE_PAGE) #endif #endif diff --git a/hal/sparcv8leon/cpu.c b/hal/sparcv8leon/cpu.c index 44cf5d71b..9fcfe0e24 100644 --- a/hal/sparcv8leon/cpu.c +++ b/hal/sparcv8leon/cpu.c @@ -57,7 +57,7 @@ static const char *hal_cpuGetFpuOption(void) } -int hal_cpuCreateContext(cpu_context_t **nctx, void *start, void *kstack, size_t kstacksz, void *ustack, void *arg, hal_tls_t *tls) +int hal_cpuCreateContext(cpu_context_t **nctx, void (*start)(void *harg), void *kstack, size_t kstacksz, void *ustack, void *arg, hal_tls_t *tls) { cpu_context_t *ctx; cpu_winContext_t *wctx; diff --git a/hal/sparcv8leon/exceptions-nommu.c b/hal/sparcv8leon/exceptions-nommu.c index ba5c68aac..a78186742 100644 --- a/hal/sparcv8leon/exceptions-nommu.c +++ b/hal/sparcv8leon/exceptions-nommu.c @@ -66,7 +66,7 @@ static const char *const hal_exceptionsType(int n) } -void hal_exceptionsDumpContext(char *buff, exc_context_t *ctx, int n) +void hal_exceptionsDumpContext(char *buff, exc_context_t *ctx, unsigned int n) { cpu_winContext_t *win = (cpu_winContext_t *)ctx->cpuCtx.sp; size_t i = hal_i2s("\033[0m\nException: 0x", buff, n, 16, 0); diff --git a/hal/sparcv8leon/exceptions.c b/hal/sparcv8leon/exceptions.c index 7f7d1c118..3ef7a4bd8 100644 --- a/hal/sparcv8leon/exceptions.c +++ b/hal/sparcv8leon/exceptions.c @@ -74,7 +74,7 @@ static const char *const hal_exceptionsType(int n) } -void hal_exceptionsDumpContext(char *buff, exc_context_t *ctx, int n) +void hal_exceptionsDumpContext(char *buff, exc_context_t *ctx, unsigned int n) { cpu_winContext_t *win = (cpu_winContext_t *)ctx->cpuCtx.sp; size_t i = hal_i2s("\033[0m\nException: 0x", buff, n, 16, 0); diff --git a/hal/sparcv8leon/gaisler/generic/generic.c b/hal/sparcv8leon/gaisler/generic/generic.c index 2e642f30e..c78088bfb 100644 --- a/hal/sparcv8leon/gaisler/generic/generic.c +++ b/hal/sparcv8leon/gaisler/generic/generic.c @@ -16,6 +16,7 @@ #include #include "hal/cpu.h" +#include "hal/hal.h" #include "hal/interrupts.h" #include "hal/tlb/tlb.h" #include "hal/sparcv8leon/sparcv8leon.h" diff --git a/hal/sparcv8leon/gaisler/generic/generic.h b/hal/sparcv8leon/gaisler/generic/generic.h index 5ed86c34d..b14ec4942 100644 --- a/hal/sparcv8leon/gaisler/generic/generic.h +++ b/hal/sparcv8leon/gaisler/generic/generic.h @@ -34,9 +34,6 @@ int gaisler_setIomuxCfg(u8 pin, u8 opt, u8 pullup, u8 pulldn); int hal_platformctl(void *ptr); -void _hal_platformInit(void); - - #endif /* __ASSEMBLY__ */ diff --git a/hal/sparcv8leon/gaisler/gr712rc/gr712rc.c b/hal/sparcv8leon/gaisler/gr712rc/gr712rc.c index c16ba2a18..c908a3ef2 100644 --- a/hal/sparcv8leon/gaisler/gr712rc/gr712rc.c +++ b/hal/sparcv8leon/gaisler/gr712rc/gr712rc.c @@ -16,6 +16,7 @@ #include #include "hal/cpu.h" +#include "hal/hal.h" #include "hal/interrupts.h" #include "hal/tlb/tlb.h" #include "hal/sparcv8leon/sparcv8leon.h" diff --git a/hal/sparcv8leon/gaisler/gr712rc/gr712rc.h b/hal/sparcv8leon/gaisler/gr712rc/gr712rc.h index 42569f8db..6e96ad8d6 100644 --- a/hal/sparcv8leon/gaisler/gr712rc/gr712rc.h +++ b/hal/sparcv8leon/gaisler/gr712rc/gr712rc.h @@ -43,10 +43,6 @@ int _gr712rc_cguClkStatus(u32 device); int hal_platformctl(void *ptr); - -void _hal_platformInit(void); - - #endif /* __ASSEMBLY__ */ diff --git a/hal/sparcv8leon/gaisler/gr716/gr716.c b/hal/sparcv8leon/gaisler/gr716/gr716.c index f3262ff36..c1189a311 100644 --- a/hal/sparcv8leon/gaisler/gr716/gr716.c +++ b/hal/sparcv8leon/gaisler/gr716/gr716.c @@ -15,6 +15,7 @@ #include "hal/sparcv8leon/sparcv8leon.h" #include "hal/cpu.h" +#include "hal/hal.h" #include "hal/spinlock.h" #include "hal/gaisler/ambapp.h" diff --git a/hal/sparcv8leon/gaisler/gr716/gr716.h b/hal/sparcv8leon/gaisler/gr716/gr716.h index a51b3212f..3ec87b515 100644 --- a/hal/sparcv8leon/gaisler/gr716/gr716.h +++ b/hal/sparcv8leon/gaisler/gr716/gr716.h @@ -47,9 +47,6 @@ extern int _gr716_cguClkStatus(u32 cgu, u32 device); extern int hal_platformctl(void *ptr); -extern void _hal_platformInit(void); - - #endif /* __ASSEMBLY__ */ diff --git a/hal/sparcv8leon/gaisler/gr740/gr740.c b/hal/sparcv8leon/gaisler/gr740/gr740.c index be662c395..bc40863f1 100644 --- a/hal/sparcv8leon/gaisler/gr740/gr740.c +++ b/hal/sparcv8leon/gaisler/gr740/gr740.c @@ -16,6 +16,7 @@ #include #include "hal/cpu.h" +#include "hal/hal.h" #include "hal/interrupts.h" #include "hal/tlb/tlb.h" #include "hal/sparcv8leon/gaisler/l2cache.h" diff --git a/hal/sparcv8leon/gaisler/gr740/gr740.h b/hal/sparcv8leon/gaisler/gr740/gr740.h index 640053bdf..847d5134d 100644 --- a/hal/sparcv8leon/gaisler/gr740/gr740.h +++ b/hal/sparcv8leon/gaisler/gr740/gr740.h @@ -44,9 +44,6 @@ int _gr740_cguClkStatus(u32 device); int hal_platformctl(void *ptr); -void _hal_platformInit(void); - - #endif /* __ASSEMBLY__ */ diff --git a/hal/sparcv8leon/pmap-nommu.c b/hal/sparcv8leon/pmap-nommu.c index 1b2a3080c..d63926d59 100644 --- a/hal/sparcv8leon/pmap-nommu.c +++ b/hal/sparcv8leon/pmap-nommu.c @@ -82,7 +82,7 @@ int pmap_getPage(page_t *page, addr_t *addr) char pmap_marker(page_t *p) { - return 0; + return '\0'; } diff --git a/hal/sparcv8leon/pmap.c b/hal/sparcv8leon/pmap.c index 4bb3b3e2b..39c8a1978 100644 --- a/hal/sparcv8leon/pmap.c +++ b/hal/sparcv8leon/pmap.c @@ -215,17 +215,17 @@ addr_t pmap_destroy(pmap_t *pmap, int *i) if (pmap->context != CONTEXT_INVALID) { hal_spinlockSet(&pmap_common.lock, &sc); - pmap_common.ctxTable[pmap->context] = NULL; + pmap_common.ctxTable[pmap->context] = 0; _pmap_contextDealloc(pmap); hal_spinlockClear(&pmap_common.lock, &sc); } while (*i < idx1) { pdir2 = PTD_TO_ADDR(pmap->pdir1[*i]); - if (pdir2 != NULL) { + if (pdir2 != 0) { for (j = 0; j < 64; j++) { pdir3 = PTD_TO_ADDR(hal_cpuLoadPaddr(&((u32 *)pdir2)[j])); - if (pdir3 != NULL) { + if (pdir3 != 0) { hal_cpuStorePaddr(&((u32 *)pdir2)[j], 0); hal_cpuflushDCacheL1(); diff --git a/hal/sparcv8leon/string.c b/hal/sparcv8leon/string.c index 4c608ac47..f988b5a63 100644 --- a/hal/sparcv8leon/string.c +++ b/hal/sparcv8leon/string.c @@ -278,7 +278,7 @@ char *hal_strncpy(char *dest, const char *src, size_t n) } -unsigned long hal_i2s(const char *prefix, char *s, unsigned long i, unsigned char b, char zero) +unsigned long hal_i2s(const char *prefix, char *s, unsigned long i, u8 b, u8 zero) { static const char digits[] = "0123456789abcdef"; char c; diff --git a/hal/string.h b/hal/string.h index f588429a5..866c56d2c 100644 --- a/hal/string.h +++ b/hal/string.h @@ -20,12 +20,14 @@ #include "hal/types.h" +/* parasoft-suppress-next-line MISRAC2012-RULE_8_6 "Definition in assembly code" */ extern void hal_memcpy(void *dst, const void *src, size_t l); extern int hal_memcmp(const void *ptr1, const void *ptr2, size_t num); +/* parasoft-suppress-next-line MISRAC2012-RULE_8_6 "Definition in assembly code" */ extern void hal_memset(void *dst, int v, size_t l); @@ -44,7 +46,7 @@ extern char *hal_strcpy(char *dest, const char *src); extern char *hal_strncpy(char *dest, const char *src, size_t n); -extern unsigned long hal_i2s(const char *prefix, char *s, unsigned long i, unsigned char b, char zero); +extern unsigned long hal_i2s(const char *prefix, char *s, unsigned long i, u8 b, u8 zero); #endif diff --git a/hal/timer.h b/hal/timer.h index d4cf517ba..2141bec21 100644 --- a/hal/timer.h +++ b/hal/timer.h @@ -26,7 +26,7 @@ extern time_t hal_timerGetUs(void); extern void hal_timerSetWakeup(u32 waitUs); -extern int hal_timerRegister(int (*f)(unsigned int, cpu_context_t *, void *), void *data, intr_handler_t *h); +extern int hal_timerRegister(int (*f)(unsigned int n, cpu_context_t *ctx, void *arg), void *data, intr_handler_t *h); extern void _hal_timerInit(u32 interval); diff --git a/hal/types.h b/hal/types.h index 59b9b6b76..e5fafaa43 100644 --- a/hal/types.h +++ b/hal/types.h @@ -17,7 +17,7 @@ #define _HAL_TYPES_H_ -#define NULL 0 +#define NULL ((void *)0) #ifndef __ASSEMBLY__ diff --git a/include/arch/aarch64/zynqmp/zynqmp.h b/include/arch/aarch64/zynqmp/zynqmp.h index 69db65f4e..d5e4f7b4e 100644 --- a/include/arch/aarch64/zynqmp/zynqmp.h +++ b/include/arch/aarch64/zynqmp/zynqmp.h @@ -140,12 +140,12 @@ typedef struct { } devclock; struct { - unsigned pin; - char l3; - char l2; - char l1; - char l0; - char config; + __u32 pin; + __u8 l3; + __u8 l2; + __u8 l1; + __u8 l0; + __u8 config; } mio; struct { diff --git a/include/arch/armv7r/stdtypes.h b/include/arch/armv7r/stdtypes.h index c8758e2fc..0e784c456 100644 --- a/include/arch/armv7r/stdtypes.h +++ b/include/arch/armv7r/stdtypes.h @@ -13,8 +13,8 @@ * %LICENSE% */ -#ifndef _PHOENIX_ARCH_ARMV7R_STDTYPES_H_ -#define _PHOENIX_ARCH_ARMV7R_STDTYPES_H_ +#ifndef _ARCH_ARMV7R_STDTYPES_H_ +#define _ARCH_ARMV7R_STDTYPES_H_ #ifndef __ASSEMBLY__ diff --git a/include/arch/armv7r/zynqmp/syspage.h b/include/arch/armv7r/zynqmp/syspage.h index fad6224ed..8f2433673 100644 --- a/include/arch/armv7r/zynqmp/syspage.h +++ b/include/arch/armv7r/zynqmp/syspage.h @@ -13,8 +13,8 @@ * %LICENSE% */ -#ifndef _PHOENIX_SYSPAGE_ARMV7R_ZYNQMP_H_ -#define _PHOENIX_SYSPAGE_ARMV7R_ZYNQMP_H_ +#ifndef _SYSPAGE_ARMV7R_ZYNQMP_H_ +#define _SYSPAGE_ARMV7R_ZYNQMP_H_ typedef struct { diff --git a/include/arch/armv7r/zynqmp/zynqmp.h b/include/arch/armv7r/zynqmp/zynqmp.h index 69db65f4e..4defcb915 100644 --- a/include/arch/armv7r/zynqmp/zynqmp.h +++ b/include/arch/armv7r/zynqmp/zynqmp.h @@ -18,21 +18,21 @@ #define PCTL_REBOOT_MAGIC 0xaa55aa55UL -#define PCTL_MIO_DRIVE_2mA (0x0) -#define PCTL_MIO_DRIVE_4mA (0x1) -#define PCTL_MIO_DRIVE_8mA (0x2) -#define PCTL_MIO_DRIVE_12mA (0x3) -#define PCTL_MIO_SCHMITT_nCMOS (1 << 3) -#define PCTL_MIO_PULL_UP_nDOWN (1 << 4) -#define PCTL_MIO_PULL_ENABLE (1 << 5) -#define PCTL_MIO_SLOW_nFAST (1 << 6) -#define PCTL_MIO_TRI_ENABLE (1 << 7) +#define PCTL_MIO_DRIVE_2mA (0x0U) +#define PCTL_MIO_DRIVE_4mA (0x1U) +#define PCTL_MIO_DRIVE_8mA (0x2U) +#define PCTL_MIO_DRIVE_12mA (0x3U) +#define PCTL_MIO_SCHMITT_nCMOS (0x1U << 3) +#define PCTL_MIO_PULL_UP_nDOWN (0x1U << 4) +#define PCTL_MIO_PULL_ENABLE (0x1U << 5) +#define PCTL_MIO_SLOW_nFAST (0x1U << 6) +#define PCTL_MIO_TRI_ENABLE (0x1U << 7) /* clang-format off */ /* Devices' clocks controllers */ enum { - pctl_devclock_lpd_usb3_dual = 0x12, + pctl_devclock_lpd_usb3_dual = 0x12U, pctl_devclock_lpd_gem0, pctl_devclock_lpd_gem1, pctl_devclock_lpd_gem2, @@ -48,8 +48,8 @@ enum { pctl_devclock_lpd_spi1, pctl_devclock_lpd_can0, pctl_devclock_lpd_can1, - pctl_devclock_lpd_cpu_r5 = 0x24, - pctl_devclock_lpd_iou_switch = 0x27, + pctl_devclock_lpd_cpu_r5 = 0x24U, + pctl_devclock_lpd_iou_switch = 0x27U, pctl_devclock_lpd_csu_pll, pctl_devclock_lpd_pcap, pctl_devclock_lpd_lpd_switch, @@ -57,36 +57,36 @@ enum { pctl_devclock_lpd_dbg_lpd, pctl_devclock_lpd_nand, pctl_devclock_lpd_lpd_dma, - pctl_devclock_lpd_pl0 = 0x30, + pctl_devclock_lpd_pl0 = 0x30U, pctl_devclock_lpd_pl1, pctl_devclock_lpd_pl2, pctl_devclock_lpd_pl3, - pctl_devclock_lpd_gem_tsu = 0x40, + pctl_devclock_lpd_gem_tsu = 0x40U, pctl_devclock_lpd_dll, pctl_devclock_lpd_pssysmon, - pctl_devclock_lpd_i2c0 = 0x48, + pctl_devclock_lpd_i2c0 = 0x48U, pctl_devclock_lpd_i2c1, pctl_devclock_lpd_timestamp, - pctl_devclock_fpd_acpu = 0x50 + 0x18, + pctl_devclock_fpd_acpu = 0x50U + 0x18U, pctl_devclock_fpd_dbg_trace, pctl_devclock_fpd_dbg_fpd, - pctl_devclock_fpd_dp_video = 0x50 + 0x1c, + pctl_devclock_fpd_dp_video = 0x50U + 0x1cU, pctl_devclock_fpd_dp_audio, - pctl_devclock_fpd_dp_stc = 0x50 + 0x1f, + pctl_devclock_fpd_dp_stc = 0x50U + 0x1fU, pctl_devclock_fpd_ddr, pctl_devclock_fpd_gpu, - pctl_devclock_fpd_sata = 0x50 + 0x28, - pctl_devclock_fpd_pcie = 0x50 + 0x2d, + pctl_devclock_fpd_sata = 0x50U + 0x28U, + pctl_devclock_fpd_pcie = 0x50U + 0x2dU, pctl_devclock_fpd_fpd_dma, pctl_devclock_fpd_dpdma, pctl_devclock_fpd_topsw_main, pctl_devclock_fpd_topsw_lsbus, - pctl_devclock_fpd_dbg_tstmp = 0x50 + 0x3e, + pctl_devclock_fpd_dbg_tstmp = 0x50U + 0x3eU, }; /* Devices' reset controllers */ enum { - pctl_devreset_lpd_gem0 = 0, pctl_devreset_lpd_gem1, pctl_devreset_lpd_gem2, pctl_devreset_lpd_gem3, pctl_devreset_lpd_qspi, + pctl_devreset_lpd_gem0 = 0x0UL, pctl_devreset_lpd_gem1, pctl_devreset_lpd_gem2, pctl_devreset_lpd_gem3, pctl_devreset_lpd_qspi, pctl_devreset_lpd_uart0, pctl_devreset_lpd_uart1, pctl_devreset_lpd_spi0, pctl_devreset_lpd_spi1, pctl_devreset_lpd_sdio0, pctl_devreset_lpd_sdio1, pctl_devreset_lpd_can0, pctl_devreset_lpd_can1, pctl_devreset_lpd_i2c0, pctl_devreset_lpd_i2c1, pctl_devreset_lpd_ttc0, pctl_devreset_lpd_ttc1, pctl_devreset_lpd_ttc2, pctl_devreset_lpd_ttc3, pctl_devreset_lpd_swdt, @@ -132,32 +132,32 @@ typedef struct { /* clang-format on */ union { struct { - int dev; - char src; /* 0, 2, 3 for most devices, 0, 2, 3, 4 for pctl_devclock_lpd_timestamp */ - char div0; /* 0 ~ 63 */ - char div1; /* 0 ~ 63 if supported by selected generator, otherwise 0 */ - char active; /* 0, 1 for most devices, some have additional active bits */ + __u32 dev; + __u8 src; /* 0, 2, 3 for most devices, 0, 2, 3, 4 for pctl_devclock_lpd_timestamp */ + __u8 div0; /* 0 ~ 63 */ + __u8 div1; /* 0 ~ 63 if supported by selected generator, otherwise 0 */ + __u8 active; /* 0, 1 for most devices, some have additional active bits */ } devclock; struct { - unsigned pin; - char l3; - char l2; - char l1; - char l0; - char config; + __u32 pin; + __u8 l3; + __u8 l2; + __u8 l1; + __u8 l0; + __u8 config; } mio; struct { - int dev; - unsigned int state; + __u32 dev; + __u32 state; } devreset; struct { - unsigned int magic; - unsigned int reason; + __u32 magic; + __u32 reason; } reboot; }; -} __attribute__((packed)) platformctl_t; +} __attribute__((packed)) platformctl_t; /* __attribute__((packed)) TBC*/ #endif diff --git a/include/errno.h b/include/errno.h index 7676a1603..26fc54de8 100644 --- a/include/errno.h +++ b/include/errno.h @@ -16,47 +16,47 @@ #ifndef _PHOENIX_ERRNO_H_ #define _PHOENIX_ERRNO_H_ -#define EOK 0 /* No error */ -#define EPERM 1 /* Operation not permitted */ -#define ENOENT 2 /* No such file or directory */ -#define ESRCH 3 /* No such process */ -#define EINTR 4 /* Interrupted system call */ -#define EIO 5 /* I/O error */ -#define ENXIO 6 /* No such device or address */ -#define E2BIG 7 /* Argument list too long */ -#define ENOEXEC 8 /* Exec format error */ -#define EBADF 9 /* Bad file number */ -#define ECHILD 10 /* No child processes */ -#define EAGAIN 11 /* Try again */ -#define ENOMEM 12 /* Out of memory */ -#define EACCES 13 /* Permission denied */ -#define EFAULT 14 /* Bad address */ -#define ENOTBLK 15 /* Block device required */ -#define EBUSY 16 /* Device or resource busy */ -#define EEXIST 17 /* File exists */ -#define EXDEV 18 /* Cross-device link */ -#define ENODEV 19 /* No such device */ -#define ENOTDIR 20 /* Not a directory */ -#define EISDIR 21 /* Is a directory */ -#define EINVAL 22 /* Invalid argument */ -#define ENFILE 23 /* File table overflow */ -#define EMFILE 24 /* Too many open files */ -#define ENOTTY 25 /* Not a typewriter */ -#define ETXTBSY 26 /* Text file busy */ -#define EFBIG 27 /* File too large */ -#define ENOSPC 28 /* No space left on device */ -#define ESPIPE 29 /* Illegal seek */ -#define EROFS 30 /* Read-only file system */ -#define EMLINK 31 /* Too many links */ -#define EPIPE 32 /* Broken pipe */ -#define EDOM 33 /* Math argument out of domain of func */ -#define ERANGE 34 /* Math result not representable */ +#define EOK 0 /* No error */ +#define EPERM 1 /* Operation not permitted */ +#define ENOENT 2 /* No such file or directory */ +#define ESRCH 3 /* No such process */ +#define EINTR 4 /* Interrupted system call */ +#define EIO 5 /* I/O error */ +#define ENXIO 6 /* No such device or address */ +#define E2BIG 7 /* Argument list too long */ +#define ENOEXEC 8 /* Exec format error */ +#define EBADF 9 /* Bad file number */ +#define ECHILD 10 /* No child processes */ +#define EAGAIN 11 /* Try again */ +#define ENOMEM 12 /* Out of memory */ +#define EACCES 13 /* Permission denied */ +#define EFAULT 14 /* Bad address */ +#define ENOTBLK 15 /* Block device required */ +#define EBUSY 16 /* Device or resource busy */ +#define EEXIST 17 /* File exists */ +#define EXDEV 18 /* Cross-device link */ +#define ENODEV 19 /* No such device */ +#define ENOTDIR 20 /* Not a directory */ +#define EISDIR 21 /* Is a directory */ +#define EINVAL 22 /* Invalid argument */ +#define ENFILE 23 /* File table overflow */ +#define EMFILE 24 /* Too many open files */ +#define ENOTTY 25 /* Not a typewriter */ +#define ETXTBSY 26 /* Text file busy */ +#define EFBIG 27 /* File too large */ +#define ENOSPC 28 /* No space left on device */ +#define ESPIPE 29 /* Illegal seek */ +#define EROFS 30 /* Read-only file system */ +#define EMLINK 31 /* Too many links */ +#define EPIPE 32 /* Broken pipe */ +#define EDOM 33 /* Math argument out of domain of func */ +#define ERANGE 34 /* Math result not representable */ -#define ENOSYS 35 /* Function not supported */ -#define ENAMETOOLONG 36 /* Name too long */ +#define ENOSYS 35 /* Function not supported */ +#define ENAMETOOLONG 36 /* Name too long */ #define ETIME 37 #define EDEADLK 38 -#define EWOULDBLOCK EAGAIN /* Operation would block */ +#define EWOULDBLOCK EAGAIN /* Operation would block */ #define ENOTSOCK 88 #define EMSGSIZE 90 diff --git a/include/ioctl.h b/include/ioctl.h index 088bffcca..42c2745cb 100644 --- a/include/ioctl.h +++ b/include/ioctl.h @@ -19,7 +19,8 @@ typedef struct { unsigned long request; - char data[]; + char data[0]; + /* parasoft-suppress-next-line MISRAC2012-RULE_5_6 "function, which is the standard, with definition in posix may cause this violation" */ } ioctl_in_t; diff --git a/include/limits.h b/include/limits.h index 4cd4c669c..b0777fd24 100644 --- a/include/limits.h +++ b/include/limits.h @@ -17,6 +17,6 @@ #define _PHOENIX_LIMITS_H_ -#define HOST_NAME_MAX 255 +#define HOST_NAME_MAX 255U #endif diff --git a/include/mman.h b/include/mman.h index a9fd56cf5..6ec6c3518 100644 --- a/include/mman.h +++ b/include/mman.h @@ -17,25 +17,25 @@ #define _PHOENIX_MMAN_H_ -#define MAP_NONE 0x0 -#define MAP_NEEDSCOPY (1 << 0) -#define MAP_UNCACHED (1 << 1) -#define MAP_DEVICE (1 << 2) -#define MAP_NOINHERIT (1 << 3) -#define MAP_PHYSMEM (1 << 4) -#define MAP_CONTIGUOUS (1 << 5) -#define MAP_ANONYMOUS (1 << 6) -#define MAP_FIXED (1 << 7) +#define MAP_NONE 0x0U +#define MAP_NEEDSCOPY (0x1U << 0) +#define MAP_UNCACHED (0x1U << 1) +#define MAP_DEVICE (0x1U << 2) +#define MAP_NOINHERIT (0x1U << 3) +#define MAP_PHYSMEM (0x1U << 4) +#define MAP_CONTIGUOUS (0x1U << 5) +#define MAP_ANONYMOUS (0x1U << 6) +#define MAP_FIXED (0x1U << 7) /* NOTE: vm uses u8 to store flags, if more flags are needed this type needs to be changed. */ -#define MAP_SHARED 0x0 -#define MAP_PRIVATE 0x0 +#define MAP_SHARED 0x0U +#define MAP_PRIVATE 0x0U -#define PROT_NONE 0x0 -#define PROT_READ 0x1 -#define PROT_WRITE 0x2 -#define PROT_EXEC 0x4 -#define PROT_USER 0x8 +#define PROT_NONE 0x0U +#define PROT_READ 0x1U +#define PROT_WRITE 0x2U +#define PROT_EXEC 0x4U +#define PROT_USER 0x8U #define MAP_FAILED (void *)-1 diff --git a/include/msg.h b/include/msg.h index 12407c59d..10cd7a6dd 100644 --- a/include/msg.h +++ b/include/msg.h @@ -73,7 +73,7 @@ struct _attrAll { typedef struct _msg_t { int type; - unsigned int pid; + int pid; unsigned int priority; oid_t oid; @@ -81,7 +81,7 @@ typedef struct _msg_t { union { /* OPEN/CLOSE */ struct { - int flags; + unsigned int flags; } openclose; /* READ/WRITE/TRUNCATE */ diff --git a/include/posix-fcntl.h b/include/posix-fcntl.h index be1251211..d4b36c3ab 100644 --- a/include/posix-fcntl.h +++ b/include/posix-fcntl.h @@ -17,20 +17,20 @@ #define _PHOENIX_POSIX_FCNTL_H_ -#define FD_CLOEXEC 1 - -#define O_RDONLY 0x0001 -#define O_WRONLY 0x0002 -#define O_RDWR 0x0004 -#define O_APPEND 0x0008 -#define O_CREAT 0x0100 -#define O_TRUNC 0x0200 -#define O_EXCL 0x0400 -#define O_SYNC 0x0800 -#define O_NONBLOCK 0x1000 +#define FD_CLOEXEC 0x1U + +#define O_RDONLY 0x0001U +#define O_WRONLY 0x0002U +#define O_RDWR 0x0004U +#define O_APPEND 0x0008U +#define O_CREAT 0x0100U +#define O_TRUNC 0x0200U +#define O_EXCL 0x0400U +#define O_SYNC 0x0800U +#define O_NONBLOCK 0x1000U #define O_NDELAY O_NONBLOCK -#define O_NOCTTY 0x2000 -#define O_CLOEXEC 0x4000 +#define O_NOCTTY 0x2000U +#define O_CLOEXEC 0x4000U /* clang-format off */ diff --git a/include/posix-poll.h b/include/posix-poll.h index 756bf9897..468df31cf 100644 --- a/include/posix-poll.h +++ b/include/posix-poll.h @@ -17,16 +17,16 @@ #define _PHOENIX_POSIX_POLL_H_ -#define POLLIN 0x1 -#define POLLRDNORM 0x2 -#define POLLRDBAND 0x4 -#define POLLPRI 0x8 -#define POLLOUT 0x10 -#define POLLWRNORM 0x20 -#define POLLWRBAND 0x40 -#define POLLERR 0x80 -#define POLLHUP 0x100 -#define POLLNVAL 0x200 +#define POLLIN 0x1U +#define POLLRDNORM 0x2U +#define POLLRDBAND 0x4U +#define POLLPRI 0x8U +#define POLLOUT 0x10U +#define POLLWRNORM 0x20U +#define POLLWRBAND 0x40U +#define POLLERR 0x80U +#define POLLHUP 0x100U +#define POLLNVAL 0x200U typedef unsigned int nfds_t; @@ -34,8 +34,8 @@ typedef unsigned int nfds_t; struct pollfd { int fd; - short events; - short revents; + unsigned short events; + unsigned short revents; }; diff --git a/include/posix-socket.h b/include/posix-socket.h index 5c89af07c..13dc28537 100644 --- a/include/posix-socket.h +++ b/include/posix-socket.h @@ -34,38 +34,38 @@ #define PF_KEY AF_KEY #define PF_PACKET AF_PACKET -#define SOCK_STREAM 1 -#define SOCK_DGRAM 2 -#define SOCK_RAW 3 -#define SOCK_SEQPACKET 4 -#define SOCK_RDM 5 +#define SOCK_STREAM 1U +#define SOCK_DGRAM 2U +#define SOCK_RAW 3U +#define SOCK_SEQPACKET 4U +#define SOCK_RDM 5U #define SOL_SOCKET 0xFFF -#define SO_ACCEPTCONN 0x0002 -#define SO_BROADCAST 0x0020 -#define SO_DEBUG 0x0001 -#define SO_DONTROUTE 0x0010 +#define SO_ACCEPTCONN 0x0002U +#define SO_BROADCAST 0x0020U +#define SO_DEBUG 0x0001U +#define SO_DONTROUTE 0x0010U #define SO_ERROR 0x1007 -#define SO_KEEPALIVE 0x0008 -#define SO_LINGER 0x0080 -#define SO_OOBINLINE 0x0100 +#define SO_KEEPALIVE 0x0008U +#define SO_LINGER 0x0080U +#define SO_OOBINLINE 0x0100U #define SO_RCVBUF 0x1002 -#define SO_RCVLOWAT 0x1004 -#define SO_RCVTIMEO 0x1006 -#define SO_REUSEADDR 0x0004 -#define SO_SNDBUF 0x1001 -#define SO_SNDLOWAT 0x1003 -#define SO_SNDTIMEO 0x1005 -#define SO_TYPE 0x1008 -#define SO_BINDTODEVICE 0x100b - -#define MSG_PEEK 0x01 -#define MSG_WAITALL 0x02 -#define MSG_OOB 0x04 -#define MSG_DONTWAIT 0x08 -#define MSG_MORE 0x10 -#define MSG_NOSIGNAL 0x20 +#define SO_RCVLOWAT 0x1004U +#define SO_RCVTIMEO 0x1006U +#define SO_REUSEADDR 0x0004U +#define SO_SNDBUF 0x1001U +#define SO_SNDLOWAT 0x1003U +#define SO_SNDTIMEO 0x1005U +#define SO_TYPE 0x1008U +#define SO_BINDTODEVICE 0x100bU + +#define MSG_PEEK 0x01U +#define MSG_WAITALL 0x02U +#define MSG_OOB 0x04U +#define MSG_DONTWAIT 0x08U +#define MSG_MORE 0x10U +#define MSG_NOSIGNAL 0x20U #define SCM_RIGHTS 1 diff --git a/include/posix-stat.h b/include/posix-stat.h index 795dd78e2..0a2b83e8c 100644 --- a/include/posix-stat.h +++ b/include/posix-stat.h @@ -22,14 +22,14 @@ /* File type */ -#define S_IFMT 0xf000 /* File type mask */ -#define S_IFSOCK 0xc000 /* Socket */ -#define S_IFLNK 0xa000 /* Symbolic link */ -#define S_IFREG 0x8000 /* Regular file */ -#define S_IFBLK 0x6000 /* Block device */ -#define S_IFDIR 0x4000 /* Directory */ -#define S_IFCHR 0x2000 /* Character device */ -#define S_IFIFO 0x1000 /* FIFO */ +#define S_IFMT 0xf000ULL /* File type mask */ +#define S_IFSOCK 0xc000U /* Socket */ +#define S_IFLNK 0xa000ULL /* Symbolic link */ +#define S_IFREG 0x8000ULL /* Regular file */ +#define S_IFBLK 0x6000ULL /* Block device */ +#define S_IFDIR 0x4000ULL /* Directory */ +#define S_IFCHR 0x2000U /* Character device */ +#define S_IFIFO 0x1000U /* FIFO */ #define S_ISSOCK(m) (((m) & S_IFMT) == S_IFSOCK) /* Socket */ #define S_ISLNK(m) (((m) & S_IFMT) == S_IFLNK) /* Symbolic link */ @@ -41,24 +41,24 @@ /* File permissions */ -#define S_ISUID 0x0800 /* Set user ID on execution */ -#define S_ISGID 0x0400 /* Set group ID on execution */ -#define S_ISVTX 0x0200 /* Sticky bit */ - -#define S_IRWXU 0x01c0 /* RWX mask for owner */ -#define S_IRUSR 0x0100 /* R for owner */ -#define S_IWUSR 0x0080 /* W for owner */ -#define S_IXUSR 0x0040 /* X for owner */ - -#define S_IRWXG 0x0038 /* RWX mask for group */ -#define S_IRGRP 0x0020 /* R for group */ -#define S_IWGRP 0x0010 /* W for group */ -#define S_IXGRP 0x0008 /* X for group */ - -#define S_IRWXO 0x0007 /* RWX mask for other */ -#define S_IROTH 0x0004 /* R for other */ -#define S_IWOTH 0x0002 /* W for other */ -#define S_IXOTH 0x0001 /* X for other */ +#define S_ISUID 0x0800U /* Set user ID on execution */ +#define S_ISGID 0x0400U /* Set group ID on execution */ +#define S_ISVTX 0x0200U /* Sticky bit */ + +#define S_IRWXU 0x01c0U /* RWX mask for owner */ +#define S_IRUSR 0x0100U /* R for owner */ +#define S_IWUSR 0x0080U /* W for owner */ +#define S_IXUSR 0x0040U /* X for owner */ + +#define S_IRWXG 0x0038U /* RWX mask for group */ +#define S_IRGRP 0x0020U /* R for group */ +#define S_IWGRP 0x0010U /* W for group */ +#define S_IXGRP 0x0008U /* X for group */ + +#define S_IRWXO 0x0007U /* RWX mask for other */ +#define S_IROTH 0x0004U /* R for other */ +#define S_IWOTH 0x0002U /* W for other */ +#define S_IXOTH 0x0001U /* X for other */ /* BSD compatibility macros */ diff --git a/include/posix-types.h b/include/posix-types.h index badac33d1..e65930505 100644 --- a/include/posix-types.h +++ b/include/posix-types.h @@ -18,7 +18,7 @@ typedef int pid_t; -typedef int mode_t; +typedef unsigned int mode_t; typedef int gid_t; typedef int uid_t; diff --git a/include/syscalls.h b/include/syscalls.h index 174e25cb6..7a455f142 100644 --- a/include/syscalls.h +++ b/include/syscalls.h @@ -13,8 +13,11 @@ * %LICENSE% */ +#ifndef _PHOENIX_SYSCALLS_H_ +#define _PHOENIX_SYSCALLS_H_ /* clang-format off */ +/* parasoft-begin-suppress MISRAC2012-RULE_20_7-a "ID can not be put in parentheses as it is a macro" */ #define SYSCALLS(ID) \ ID(debug) \ ID(sys_mmap) \ @@ -125,4 +128,7 @@ \ ID(sys_statvfs) \ ID(sys_uname) +/* parasoft-end-suppress MISRAC2012-RULE_20_7-a */ /* clang-format on */ + +#endif /* _PHOENIX_SYSCALLS_H_ */ diff --git a/include/sysinfo.h b/include/sysinfo.h index 3f85bf8d5..469b2a827 100644 --- a/include/sysinfo.h +++ b/include/sysinfo.h @@ -25,9 +25,9 @@ typedef struct _syspageprog_t { typedef struct _threadinfo_t { - unsigned int pid; + pid_t pid; unsigned int tid; - unsigned int ppid; + pid_t ppid; int load; time_t cpuTime; @@ -50,7 +50,9 @@ typedef struct _entryinfo_t { unsigned char protOrig; off_t offs; - enum { OBJECT_ANONYMOUS, OBJECT_MEMORY, OBJECT_OID } object; + enum { OBJECT_ANONYMOUS, + OBJECT_MEMORY, + OBJECT_OID } object; oid_t oid; } entryinfo_t; @@ -74,6 +76,7 @@ typedef struct { } mapinfo_t; +/* TODO: Consider changing type of kmaps mapsz from int to unsigned int */ typedef struct _meminfo_t { struct { unsigned int alloc, free, boot, sz; @@ -96,7 +99,10 @@ typedef struct _meminfo_t { } meminfo_t; -enum { perf_evScheduling, perf_evEnqueued, perf_evWaking, perf_evPreempted }; +enum { perf_evScheduling, + perf_evEnqueued, + perf_evWaking, + perf_evPreempted }; typedef struct { @@ -106,7 +112,11 @@ typedef struct { } __attribute__((packed)) perf_event_t; -enum { perf_levBegin, perf_levEnd, perf_levFork, perf_levKill, perf_levExec }; +enum { perf_levBegin, + perf_levEnd, + perf_levFork, + perf_levKill, + perf_levExec }; typedef struct { @@ -137,7 +147,7 @@ typedef struct { unsigned deltaTimestamp : 12; unsigned type : 3; - unsigned tid: 18; + unsigned tid : 18; unsigned ppid : 18; unsigned pid : 18; } __attribute__((packed)) perf_levent_fork_t; @@ -149,7 +159,7 @@ typedef struct { unsigned deltaTimestamp : 12; unsigned type : 3; - unsigned tid: 18; + unsigned tid : 18; unsigned pid : 18; } __attribute__((packed)) perf_levent_kill_t; @@ -160,7 +170,7 @@ typedef struct { unsigned deltaTimestamp : 12; unsigned type : 3; - unsigned tid: 18; + unsigned tid : 18; char path[32]; } __attribute__((packed)) perf_levent_exec_t; diff --git a/include/types.h b/include/types.h index d4acd6140..904b26ff8 100644 --- a/include/types.h +++ b/include/types.h @@ -21,8 +21,10 @@ #include "arch/ia32/types.h" #elif defined(__ARM_ARCH_6M__) || defined(__ARM_ARCH_7M__) || defined(__ARM_ARCH_7EM__) #include "arch/armv7m/types.h" -#elif defined(__ARM_ARCH_7A__) || defined(__ARM_ARCH_7R__) || defined(__ARM_ARCH_8A__) || defined(__ARM_ARCH_7__) +#elif defined(__ARM_ARCH_7A__) || defined(__ARM_ARCH_8A__) || defined(__ARM_ARCH_7__) #include "arch/armv7a/types.h" +#elif defined(__ARM_ARCH_7R__) +#include "arch/armv7r/types.h" #elif defined(__ARM_ARCH_4T__) || defined(__ARM_ARCH_5TE__) /* not currently supported, map to 7M for libgcc to compile */ #include "arch/armv7m/types.h" #elif defined(__ARM_ARCH_8M_BASE__) || defined(__ARM_ARCH_8M_MAIN__) @@ -31,15 +33,18 @@ #include "arch/armv8r/types.h" #elif defined(__aarch64__) #include "arch/aarch64/types.h" +/* parasoft-begin-suppress MISRAC2012-RULE_20_9 "macro defined in riscv architecture, + * we won't check value of __riscv_xlen if __riscv is not defined" + */ #elif defined(__riscv) && (__riscv_xlen == 64) #include "arch/riscv64/types.h" +/*parasoft-end-suppress MISRAC2012-RULE_20_9*/ #elif defined(__sparc__) #include "arch/sparcv8leon/types.h" #else #error "unsupported architecture" #endif - #include "posix-types.h" diff --git a/include/utsname.h b/include/utsname.h index 78b9de567..f51cd63ac 100644 --- a/include/utsname.h +++ b/include/utsname.h @@ -22,7 +22,7 @@ struct utsname { char sysname[16]; - char nodename[HOST_NAME_MAX + 1]; + char nodename[HOST_NAME_MAX + 1U]; char release[16]; char version[32]; char machine[16]; diff --git a/lib/assert.c b/lib/assert.c index 70c50014a..a42fa5d3d 100644 --- a/lib/assert.c +++ b/lib/assert.c @@ -13,6 +13,7 @@ * %LICENSE% */ +/* parasoft-begin-suppress MISRAC2012-RULE_17_1 "stdarg.h required for custom functions that are like printf" */ #include #include "assert.h" #include "printf.h" @@ -28,10 +29,12 @@ void lib_assertPanic(const char *func, int line, const char *fmt, ...) hal_cpuDisableInterrupts(); lib_printf("kernel (%s:%d): ", func, line); va_start(ap, fmt); - lib_vprintf(fmt, ap); + (void)lib_vprintf(fmt, ap); va_end(ap); lib_putch('\n'); + /* parasoft-end-suppress MISRAC2012-RULE_17_1 */ + #ifdef NDEBUG hal_cpuReboot(); #endif diff --git a/lib/assert.h b/lib/assert.h index a1aa54fc2..3af76c801 100644 --- a/lib/assert.h +++ b/lib/assert.h @@ -22,12 +22,12 @@ void lib_assertPanic(const char *func, int line, const char *fmt, ...); #define LIB_ASSERT_ALWAYS(condition, fmt, ...) \ if (!(condition)) { \ - lib_assertPanic(__FUNCTION__, __LINE__, fmt, ##__VA_ARGS__); \ + lib_assertPanic(__FUNCTION__, __LINE__, (fmt), ##__VA_ARGS__); \ } #ifndef NDEBUG -#define LIB_ASSERT(condition, fmt, ...) LIB_ASSERT_ALWAYS(condition, fmt, ##__VA_ARGS__) +#define LIB_ASSERT(condition, fmt, ...) LIB_ASSERT_ALWAYS((condition), (fmt), ##__VA_ARGS__) #else diff --git a/lib/bsearch.c b/lib/bsearch.c index efd875e34..ecb5a96fb 100644 --- a/lib/bsearch.c +++ b/lib/bsearch.c @@ -18,26 +18,30 @@ #include "bsearch.h" -void *lib_bsearch(void *key, void *base, size_t nmemb, size_t size, int (*compar)(void *, void *)) +void *lib_bsearch(void *key, void *base, size_t nmemb, size_t size, int (*compar)(void *n1, void *n2)) { - int l = 0, r = nmemb - 1, m; + ssize_t l = 0, r = (ssize_t)nmemb - 1, m; int cmp; - if (nmemb == 0) + if (nmemb == 0U) { return NULL; + } while (l <= r) { m = (l + r) / 2; - cmp = compar(key, base + m * size); + cmp = compar(key, base + m * (ssize_t)size); - if (cmp == 0) - return base + m * size; + if (cmp == 0) { + return base + m * (ssize_t)size; + } - if (cmp > 0) + if (cmp > 0) { l = m + 1; - else + } + else { r = m - 1; + } } return NULL; } diff --git a/lib/bsearch.h b/lib/bsearch.h index 4e2b27ac0..906775765 100644 --- a/lib/bsearch.h +++ b/lib/bsearch.h @@ -18,7 +18,6 @@ #define LIB_BSEARCH_H_ -extern void *lib_bsearch(void *key, void *base, size_t nmemb, size_t size, int (*compar)(void *, void *)); - +extern void *lib_bsearch(void *key, void *base, size_t nmemb, size_t size, int (*compar)(void *n1, void *n2)); #endif diff --git a/lib/cbuffer.c b/lib/cbuffer.c index f8ecf9590..eb61525e8 100644 --- a/lib/cbuffer.c +++ b/lib/cbuffer.c @@ -18,29 +18,31 @@ #include "vm/vm.h" -int _cbuffer_init(cbuffer_t *buf, void *data, size_t sz) +unsigned int _cbuffer_init(cbuffer_t *buf, void *data, size_t sz) { hal_memset(buf, 0, sizeof(cbuffer_t)); buf->sz = sz; buf->data = data; - return 0; + return 0U; } -int _cbuffer_write(cbuffer_t *buf, const void *data, size_t sz) +unsigned int _cbuffer_write(cbuffer_t *buf, const void *data, size_t sz) { - int bytes = 0; + unsigned int bytes = 0; - if (!sz || buf->full) + if (sz == 0U || buf->full != 0U) { return 0; + } if (buf->r > buf->w) { hal_memcpy(buf->data + buf->w, data, bytes = min(sz, buf->r - buf->w)); } + else { hal_memcpy(buf->data + buf->w, data, bytes = min(sz, buf->sz - buf->w)); - if (bytes < sz && buf->r) { + if ((bytes < sz) && (buf->r != 0U)) { data += bytes; sz -= bytes; hal_memcpy(buf->data, data, min(sz, buf->r)); @@ -48,19 +50,19 @@ int _cbuffer_write(cbuffer_t *buf, const void *data, size_t sz) } } - buf->w = (buf->w + bytes) & (buf->sz - 1); - buf->full = buf->w == buf->r; + buf->w = (buf->w + bytes) & (buf->sz - 1U); + buf->full = (buf->w == buf->r) ? 1U : 0U; return bytes; } -int _cbuffer_read(cbuffer_t *buf, void *data, size_t sz) +unsigned int _cbuffer_read(cbuffer_t *buf, void *data, size_t sz) { - int bytes = _cbuffer_peek(buf, data, sz); + unsigned int bytes = _cbuffer_peek(buf, data, sz); - if (bytes > 0) { - buf->r = (buf->r + bytes) & (buf->sz - 1); + if (bytes > 0U) { + buf->r = (buf->r + bytes) & (buf->sz - 1U); buf->full = 0; } @@ -68,13 +70,13 @@ int _cbuffer_read(cbuffer_t *buf, void *data, size_t sz) } -int _cbuffer_peek(const cbuffer_t *buf, void *data, size_t sz) +unsigned int _cbuffer_peek(const cbuffer_t *buf, void *data, size_t sz) { - int bytes = 0; + unsigned int bytes = 0; - if (!sz || (buf->r == buf->w && !buf->full)) + if (sz == 0U || (buf->r == buf->w && buf->full == 0U)) { return 0; - + } if (buf->w > buf->r) { hal_memcpy(data, buf->data + buf->r, bytes = min(sz, buf->w - buf->r)); } diff --git a/lib/cbuffer.h b/lib/cbuffer.h index e9eba118d..9a62e217c 100644 --- a/lib/cbuffer.h +++ b/lib/cbuffer.h @@ -18,17 +18,17 @@ typedef struct { size_t sz, r, w; - char full, mark; + unsigned char full, mark; void *data; } cbuffer_t; static inline size_t _cbuffer_free(cbuffer_t *buf) { - if (buf->w == buf->r) - return buf->full ? 0 : buf->sz; - - return (buf->r - buf->w + buf->sz) & (buf->sz - 1); + if (buf->w == buf->r) { + return (buf->full != 0U) ? 0U : buf->sz; + } + return (buf->r - buf->w + buf->sz) & (buf->sz - 1U); } @@ -41,23 +41,23 @@ static inline size_t _cbuffer_avail(cbuffer_t *buf) static inline size_t _cbuffer_discard(cbuffer_t *buf, size_t sz) { size_t cnt = min(_cbuffer_avail(buf), sz); - buf->r = (buf->r + cnt) & (buf->sz - 1); - if (cnt > 0) { + buf->r = (buf->r + cnt) & (buf->sz - 1U); + if (cnt > 0U) { buf->full = 0; } return cnt; } -extern int _cbuffer_init(cbuffer_t *buf, void *data, size_t sz); +extern unsigned int _cbuffer_init(cbuffer_t *buf, void *data, size_t sz); -extern int _cbuffer_read(cbuffer_t *buf, void *data, size_t sz); +extern unsigned int _cbuffer_read(cbuffer_t *buf, void *data, size_t sz); -extern int _cbuffer_write(cbuffer_t *buf, const void *data, size_t sz); +extern unsigned int _cbuffer_write(cbuffer_t *buf, const void *data, size_t sz); -extern int _cbuffer_peek(const cbuffer_t *buf, void *data, size_t sz); +extern unsigned int _cbuffer_peek(const cbuffer_t *buf, void *data, size_t sz); #endif diff --git a/lib/idtree.c b/lib/idtree.c index bfaac039c..4e51c6869 100644 --- a/lib/idtree.c +++ b/lib/idtree.c @@ -21,6 +21,7 @@ static int lib_idtreeCmp(rbnode_t *n1, rbnode_t *n2) idnode_t *i1 = lib_treeof(idnode_t, linkage, n1); idnode_t *i2 = lib_treeof(idnode_t, linkage, n2); + /* parasoft-suppress-next-line MISRAC2012-DIR_4_1 "Variable pass to lib_treeof will not be NULL, so lib_treeof will not be NULL either" */ return i1->id - i2->id; } @@ -39,10 +40,12 @@ static void lib_idtreeAugment(rbnode_t *node) } } + /* parasoft-suppress-next-line MISRAC2012-DIR_4_1 "Variable pass to lib_treeof will not be NULL, so lib_treeof will not be NULL either" */ n->lmaxgap = (n->id <= p->id) ? n->id : (n->id - p->id - 1); } else { l = lib_treeof(idnode_t, linkage, node->left); + /* parasoft-suppress-next-line MISRAC2012-DIR_4_1 "Variable pass to lib_treeof will not be NULL, so lib_treeof will not be NULL either" */ n->lmaxgap = max(l->lmaxgap, l->rmaxgap); } @@ -54,7 +57,7 @@ static void lib_idtreeAugment(rbnode_t *node) } } - n->rmaxgap = (n->id >= p->id) ? (MAX_ID - n->id - 1) : (p->id - n->id - 1); + n->rmaxgap = (n->id >= p->id) ? ((int)MAX_ID - n->id - 1) : (p->id - n->id - 1); } else { r = lib_treeof(idnode_t, linkage, node->right); @@ -131,23 +134,23 @@ int lib_idtreeId(idnode_t *node) } -int lib_idtreeAlloc(idtree_t *tree, idnode_t *n, int min) +int lib_idtreeAlloc(idtree_t *tree, idnode_t *n, int minimum) { idnode_t *f; - if (min > MAX_ID) { + if ((minimum > (int)MAX_ID) || (minimum < 0)) { return -1; } - n->id = min; + n->id = minimum; - f = lib_idtreeFind(tree, min); + f = lib_idtreeFind(tree, minimum); if (f != NULL) { - /* Go back until some space > min is found */ + /* Go back until some space > minimum is found */ while (f->rmaxgap == 0) { f = lib_treeof(idnode_t, linkage, f->linkage.parent); if (f == NULL) { - /* Only id < min are available, fail */ + /* Only id < minimum are available, fail */ return -1; } } @@ -155,7 +158,7 @@ int lib_idtreeAlloc(idtree_t *tree, idnode_t *n, int min) /* Got rmaxgap now */ n->id = f->id + 1; - /* Go right at least once so id > min */ + /* Go right at least once so id > minimum */ f = lib_treeof(idnode_t, linkage, f->linkage.right); /* Find minimal free space */ @@ -173,7 +176,7 @@ int lib_idtreeAlloc(idtree_t *tree, idnode_t *n, int min) LIB_ASSERT(lib_idtreeFind(tree, n->id) == NULL, "ID alloc failed - got existing ID %d", n->id); - lib_rbInsert(tree, &n->linkage); + (void)lib_rbInsert(tree, &n->linkage); return n->id; } @@ -182,6 +185,7 @@ int lib_idtreeAlloc(idtree_t *tree, idnode_t *n, int min) static void _lib_idtreeDump(rbnode_t *node) { idnode_t *n = lib_treeof(idnode_t, linkage, node); + /* parasoft-suppress-next-line MISRAC2012-DIR_4_1 "Variable pass to lib_treeof will not be NULL, so lib_treeof will not be NULL either" */ lib_printf("%d <0x%p>]", n->id, n); } diff --git a/lib/idtree.h b/lib/idtree.h index 49b13191f..c5dc44cfe 100644 --- a/lib/idtree.h +++ b/lib/idtree.h @@ -19,7 +19,7 @@ #include "rb.h" -#define MAX_ID ((1LL << (__CHAR_BIT__ * (sizeof(int)) - 1)) - 1) +#define MAX_ID ((1ULL << ((unsigned int)__CHAR_BIT__ * (sizeof(int)) - 1U)) - 1ULL) typedef rbtree_t idtree_t; @@ -31,12 +31,13 @@ typedef struct { int id; } idnode_t; - +/* parasoft-begin-suppress MISRAC2012-RULE_20_7-a 'type' within (type *) can not be put in the parentheses due to compilation error */ #define lib_idtreeof(type, node_field, node) ({ \ long _off = (long)&(((type *)0)->node_field); \ idnode_t *tmpnode = (node); \ (type *)((tmpnode == NULL) ? NULL : ((void *)tmpnode - _off)); \ }) +/* parasoft-end-suppress MISRAC2012-RULE_20_7-a */ idnode_t *lib_idtreeFind(idtree_t *tree, int id); @@ -57,7 +58,7 @@ void lib_idtreeRemove(idtree_t *tree, idnode_t *node); int lib_idtreeId(idnode_t *node); -int lib_idtreeAlloc(idtree_t *tree, idnode_t *n, int min); +int lib_idtreeAlloc(idtree_t *tree, idnode_t *n, int minimum); void lib_idtreeDump(rbnode_t *node); diff --git a/lib/lib.h b/lib/lib.h index 98c12189c..472070685 100644 --- a/lib/lib.h +++ b/lib/lib.h @@ -28,22 +28,22 @@ #include "idtree.h" -#define lib_atomicIncrement(ptr) __atomic_add_fetch(ptr, 1, __ATOMIC_RELAXED) +#define lib_atomicIncrement(ptr) __atomic_add_fetch((ptr), 1, __ATOMIC_RELAXED) -#define lib_atomicDecrement(ptr) __atomic_add_fetch(ptr, -1, __ATOMIC_ACQ_REL) +#define lib_atomicDecrement(ptr) __atomic_add_fetch((ptr), -1, __ATOMIC_ACQ_REL) #define max(a, b) ({ \ - __typeof__ (a) _a = (a); \ - __typeof__ (b) _b = (b); \ + __typeof__(a) _a = (a); \ + __typeof__(b) _b = (b); \ _a > _b ? _a : _b; \ }) #define min(a, b) ({ \ - __typeof__ (a) _a = (a); \ - __typeof__ (b) _b = (b); \ + __typeof__(a) _a = (a); \ + __typeof__(b) _b = (b); \ _a > _b ? _b : _a; \ }) @@ -52,19 +52,13 @@ #define swap(a, b) ({ \ - __typeof__ (a) tmp = (a); \ + __typeof__(a) tmp = (a); \ (a) = (b); \ (b) = (tmp); \ }) -static inline int abs(int val) -{ - return (val < 0 ? -val : val); -} - - -#define round_page(x) (((x) + SIZE_PAGE - 1) & ~(SIZE_PAGE - 1)) +#define round_page(x) (((x) + SIZE_PAGE - 1U) & ~(SIZE_PAGE - 1U)) #endif diff --git a/lib/list.c b/lib/list.c index 7ef4cbc61..eeab09704 100644 --- a/lib/list.c +++ b/lib/list.c @@ -19,8 +19,9 @@ void lib_listAdd(void **list, void *t, size_t noff, size_t poff) { - if (t == NULL) + if (t == NULL) { return; + } if (*list == NULL) { *((addr_t *)(t + noff)) = (addr_t)t; *((addr_t *)(t + poff)) = (addr_t)t; @@ -37,19 +38,21 @@ void lib_listAdd(void **list, void *t, size_t noff, size_t poff) void lib_listRemove(void **list, void *t, size_t noff, size_t poff) { - if (t == NULL) + if (t == NULL) { return; + } if (*((addr_t *)(t + noff)) == (addr_t)t && *((addr_t *)(t + poff)) == (addr_t)t) { *list = NULL; } else { *((addr_t *)((void *)(*((addr_t *)(t + poff))) + noff)) = *((addr_t *)(t + noff)); *((addr_t *)((void *)(*((addr_t *)(t + noff))) + poff)) = *((addr_t *)(t + poff)); - if (t == *list) + if (t == *list) { *list = (void *)*((addr_t *)(t + noff)); + } } - *((addr_t *)(t + noff)) = NULL; - *((addr_t *)(t + poff)) = NULL; + *((addr_t *)(t + noff)) = 0; + *((addr_t *)(t + poff)) = 0; } diff --git a/lib/list.h b/lib/list.h index 998534d3b..f87a8889e 100644 --- a/lib/list.h +++ b/lib/list.h @@ -29,23 +29,23 @@ extern int lib_listBelongs(void **list, void *t, size_t noff, size_t poff); #define LIST_ADD_EX(list, t, next, prev) \ - lib_listAdd((void **)(list), (void *)(t), (size_t)&(((typeof(t))0)->next), (size_t)&(((typeof(t))0)->prev)) + lib_listAdd((void **)(list), (void *)(t), (size_t) & (((typeof(t))0)->next), (size_t) & (((typeof(t))0)->prev)) -#define LIST_ADD(list, t) LIST_ADD_EX(list, t, next, prev) +#define LIST_ADD(list, t) LIST_ADD_EX((list), (t), next, prev) #define LIST_REMOVE_EX(list, t, next, prev) \ - lib_listRemove((void **)(list), (void *)(t), (size_t)&(((typeof(t))0)->next), (size_t)&(((typeof(t))0)->prev)) + lib_listRemove((void **)(list), (void *)(t), (size_t) & (((typeof(t))0)->next), (size_t) & (((typeof(t))0)->prev)) -#define LIST_REMOVE(list, t) LIST_REMOVE_EX(list, t, next, prev) +#define LIST_REMOVE(list, t) LIST_REMOVE_EX((list), (t), next, prev) #define LIST_BELONGS_EX(list, t, next, prev) \ - lib_listBelongs((void **)(list), (void *)t, (size_t)&(((typeof(t))0)->next), (size_t)&(((typeof(t))0)->prev)) + lib_listBelongs((void **)(list), (void *)(t), (size_t) & (((typeof(t))0)->next), (size_t) & (((typeof(t))0)->prev)) -#define LIST_BELONGS(list, t) LIST_BELONGS_EX(list, t, next, prev) +#define LIST_BELONGS(list, t) LIST_BELONGS_EX((list), (t), next, prev) #endif diff --git a/lib/printf.c b/lib/printf.c index 0786acedb..a64ca2942 100644 --- a/lib/printf.c +++ b/lib/printf.c @@ -14,6 +14,9 @@ * %LICENSE% */ +/* parasoft-begin-suppress MISRAC2012-RULE_17_1 "stdarg.h required for custom functions that are like printf" */ + + #include #include "hal/hal.h" @@ -21,27 +24,31 @@ #include "log/log.h" /* Flags used for printing */ -#define FLAG_SIGNED 0x1 -#define FLAG_64BIT 0x2 -#define FLAG_SPACE 0x10 -#define FLAG_ZERO 0x20 -#define FLAG_PLUS 0x40 -#define FLAG_HEX 0x80 -#define FLAG_LARGE_DIGITS 0x100 +#define FLAG_SIGNED 0x1UL +#define FLAG_64BIT 0x2UL +#define FLAG_SPACE 0x10UL +#define FLAG_ZERO 0x20UL +#define FLAG_PLUS 0x40UL +#define FLAG_HEX 0x80UL +#define FLAG_LARGE_DIGITS 0x100UL static char *printf_sprintf_int(char *out, u64 num64, u32 flags, int min_number_len) { - const char *digits = (flags & FLAG_LARGE_DIGITS) ? "0123456789ABCDEF" : "0123456789abcdef"; + const char *digits = (flags & FLAG_LARGE_DIGITS) != 0U ? "0123456789ABCDEF" : "0123456789abcdef"; char tmp_buf[32]; - char sign = 0; + char sign = '\0'; char *tmp = tmp_buf; u32 num32 = (u32)num64; u32 num_high = (u32)(num64 >> 32); - if (flags & FLAG_SIGNED) { - if (flags & FLAG_64BIT) { + /* parasoft-begin-suppress MISRAC2012-RULE_10_3 + * "This function uses clever tricks to convert + * radix of the incoming num64" + */ + if ((flags & FLAG_SIGNED) != 0U) { + if ((flags & FLAG_64BIT) != 0U) { if ((s32)num_high < 0) { num64 = -(s64)num64; num32 = (u32)num64; @@ -53,80 +60,94 @@ static char *printf_sprintf_int(char *out, u64 num64, u32 flags, int min_number_ num32 = -(s32)num32; sign = '-'; } + else { + /* No action required */ + } + - if (sign == 0) { - if (flags & FLAG_SPACE) { + if (sign == '\0') { + if ((flags & FLAG_SPACE) != 0U) { sign = ' '; } - else if (flags & FLAG_PLUS) { + else if ((flags & FLAG_PLUS) != 0U) { sign = '+'; } + else { + /* No action required */ + } } } + /* parasoft-end-suppress MISRAC2012-RULE_10_3 */ - if ((flags & FLAG_64BIT) && num_high == 0x0) + if ((flags & FLAG_64BIT) != 0U && num_high == 0x0U) { flags &= ~FLAG_64BIT; + } - if (num64 == 0) { + if (num64 == 0U) { *tmp++ = '0'; } - else if (flags & FLAG_HEX) { - if (flags & FLAG_64BIT) { + else if ((flags & FLAG_HEX) != 0U) { + if ((flags & FLAG_64BIT) != 0U) { int i; for (i = 0; i < 8; ++i) { - *tmp++ = digits[num32 & 0x0f]; + *tmp++ = digits[num32 & 0x0fU]; num32 >>= 4; } - while (num_high != 0) { - *tmp++ = digits[num_high & 0x0f]; + while (num_high != 0U) { + *tmp++ = digits[num_high & 0x0fU]; num_high >>= 4; } } else { - while (num32 != 0) { - *tmp++ = digits[num32 & 0x0f]; + while (num32 != 0U) { + *tmp++ = digits[num32 & 0x0fU]; num32 >>= 4; } } } else { - if (flags & FLAG_64BIT) { // TODO: optimize - while (num64 != 0) { - *tmp++ = digits[num64 % 10]; - num64 /= 10; + if ((flags & FLAG_64BIT) != 0U) { // TODO: optimize + while (num64 != 0U) { + *tmp++ = digits[num64 % 10U]; + num64 /= 10U; } } else { - while (num32 != 0) { - *tmp++ = digits[num32 % 10]; - num32 /= 10; + while (num32 != 0U) { + *tmp++ = digits[num32 % 10U]; + num32 /= 10U; } } } const int digits_cnt = tmp - tmp_buf; - int pad_len = min_number_len - digits_cnt - (sign ? 1 : 0); + int pad_len = min_number_len - digits_cnt - (sign != '\0' ? 1 : 0); /* pad, if needed */ - if (pad_len > 0 && !(flags & FLAG_ZERO)) { - while (pad_len-- > 0) + if (pad_len > 0 && (flags & FLAG_ZERO) == 0U) { + while (pad_len-- > 0) { *out++ = ' '; + } } - if (sign) + if (sign != '\0') { *out++ = sign; + } /* pad, if needed */ - if (pad_len > 0 && (flags & FLAG_ZERO)) { - while (pad_len-- > 0) + if (pad_len > 0 && (flags & FLAG_ZERO) != 0U) { + while (pad_len-- > 0) { *out++ = '0'; + } } /* copy reversed */ - while ((--tmp) >= tmp_buf) + while (tmp > tmp_buf) { + --tmp; *out++ = *tmp; + } return out; } @@ -139,19 +160,23 @@ void lib_putch(char s) c[0] = s; c[1] = '\0'; - log_write(c, 1); + (void)log_write(c, 1); } int lib_vsprintf(char *out, const char *format, va_list args) { - char * const out_start = out; + char *const out_start = out; + u64 number; + int is_pointer, is_number; + out[0] = '\0'; for (;;) { char fmt = *format++; - if (!fmt) - goto end; + if (fmt == '\0') { + break; + } if (fmt != '%') { *out++ = fmt; @@ -159,97 +184,124 @@ int lib_vsprintf(char *out, const char *format, va_list args) } fmt = *format++; - if (fmt == 0) { + if (fmt == '\0') { *out++ = '%'; - goto end; + break; } /* precision, padding (set default to 6 digits) */ u32 flags = 0, min_number_len = 0; for (;;) { - if (fmt == ' ') + if (fmt == ' ') { flags |= FLAG_SPACE; - else if (fmt == '0') + } + else if (fmt == '0') { flags |= FLAG_ZERO; - else if (fmt == '+') + } + else if (fmt == '+') { flags |= FLAG_PLUS; - else + } + else { break; + } fmt = *format++; - if (fmt == 0) - goto bad_format; + if (fmt == '\0') { + break; + } + } + + if (fmt == '\0') { + break; } /* leading number digits-cnt */ while (fmt >= '0' && fmt <= '9') { - min_number_len = min_number_len * 10 + fmt - '0'; + min_number_len = min_number_len * 10U + (unsigned int)fmt - (unsigned int)'0'; fmt = *format++; - if (fmt == 0) - goto bad_format; + if (fmt == '\0') { + break; + } + } + + if (fmt == '\0') { + break; } /* fractional number digits-cnt (only a single digit is acceptable in this impl.) */ - if (fmt == '.') - goto bad_format; + if (fmt == '.') { + break; + } if (fmt == 'l') { fmt = *format++; - if (fmt == 0) - goto bad_format; + if (fmt == '\0') { + break; + } if (fmt == 'l') { flags |= FLAG_64BIT; fmt = *format++; - if (fmt == 0) - goto bad_format; + if (fmt == '\0') { + break; + } } } if (fmt == 'z') { fmt = *format++; - if (fmt == 0) - goto bad_format; - if (sizeof(void *) == sizeof(u64)) // FIXME "size_t" is undefined? + if (fmt == '\0') { + break; + } + + /* parasoft-suppress-next-line MISRAC2012-RULE_14_3 "sizeof(void *) depends on the architecture - providing portable code that supports both pointer sizes" */ + if (sizeof(void *) == sizeof(u64)) { flags |= FLAG_64BIT; + } } - u64 number = 0; + number = 0; + is_number = 0; + is_pointer = 0; switch (fmt) { - case 's': - { + case 's': { const char *s = va_arg(args, char *); - if (s == NULL) + if (s == NULL) { s = "(null)"; + } const unsigned int s_len = hal_strlen(s); hal_memcpy(out, s, s_len); out += s_len; - } - break; + } break; - case 'c': - { - const char c = (char) va_arg(args,int); + case 'c': { + const char c = (char)va_arg(args, int); *out++ = c; - } - break; + } break; case 'X': flags |= FLAG_LARGE_DIGITS; + flags |= FLAG_HEX; + is_number = 1; + break; case 'x': flags |= FLAG_HEX; - goto get_number; + is_number = 1; + break; case 'd': case 'i': flags |= FLAG_SIGNED; + is_number = 1; + break; case 'u': - goto get_number; - case 'p': - { - const void *s = va_arg(args,void*); + flags |= FLAG_SIGNED; + is_number = 1; + break; + case 'p': { + const void *s = va_arg(args, void *); if (s == NULL) { *out++ = '('; *out++ = 'n'; @@ -260,37 +312,31 @@ int lib_vsprintf(char *out, const char *format, va_list args) } number = (u64)(size_t)s; flags |= (FLAG_ZERO | FLAG_HEX); - if (sizeof(void *) == sizeof(u64)) + /* parasoft-suppress-next-line MISRAC2012-RULE_14_3 "sizeof(void *) depends on the architecture" */ + if (sizeof(void *) == sizeof(u64)) { flags |= FLAG_64BIT; - min_number_len = sizeof(void *) * 2; - goto handle_number; - } - break; + } + min_number_len = sizeof(void *) * 2U; + is_number = 1; + is_pointer = 1; + } break; case '%': *out++ = '%'; - break; + break; default: *out++ = '%'; *out++ = fmt; - break; + break; + } + if (is_number != 0) { + if (is_pointer == 0) { + number = (flags & FLAG_64BIT) ? va_arg(args, u64) : va_arg(args, u32); + } + out = printf_sprintf_int(out, number, flags, (int)min_number_len); } - continue; - -get_number:; - if (flags & FLAG_64BIT) - number = va_arg(args, u64); - else - number = va_arg(args, u32); - -handle_number:; - out = printf_sprintf_int(out, number, flags, min_number_len); - continue; } -bad_format: -end: - *out = '\0'; return out - out_start; } @@ -305,15 +351,18 @@ int lib_vprintf(const char *format, va_list ap) u64 number; char buff[24]; char *sptr, *eptr; + int is_number, is_pointer; s = CONSOLE_CYAN; - while (*s) + while (*s != '\0') { lib_putch(*(s++)); + } for (;;) { fmt = *format++; - if (fmt == '\0') - goto end; + if (fmt == '\0') { + break; + } if (fmt != '%') { lib_putch(fmt); @@ -326,7 +375,7 @@ int lib_vprintf(const char *format, va_list ap) if (fmt == '\0') { lib_putch('%'); i++; - goto end; + break; } /* precission, padding (set default to 6 digits) */ @@ -334,68 +383,91 @@ int lib_vprintf(const char *format, va_list ap) min_number_len = 0; for (;;) { - if (fmt == ' ') + if (fmt == ' ') { flags |= FLAG_SPACE; - else if (fmt == '0') + } + else if (fmt == '0') { flags |= FLAG_ZERO; - else if (fmt == '+') + } + else if (fmt == '+') { flags |= FLAG_PLUS; - else + } + else { break; + } fmt = *format++; - if (fmt == '\0') - goto end; + if (fmt == '\0') { + break; + } + } + + if (fmt == '\0') { + break; } /* leading number digits-cnt */ while (fmt >= '0' && fmt <= '9') { - min_number_len = min_number_len * 10 + fmt - '0'; + min_number_len = min_number_len * 10U + ((unsigned int)fmt - (unsigned int)'0'); fmt = *format++; - if (fmt == '\0') - goto end; + if (fmt == '\0') { + break; + } + } + + if (fmt == '\0') { + break; } /* fractional number digits-cnt (only a single digit is acceptable in this impl.) */ - if (fmt == '.') - goto end; + if (fmt == '.') { + break; + } if (fmt == 'l') { fmt = *format++; - if (fmt == '\0') - goto end; + if (fmt == '\0') { + break; + } if (fmt == 'l') { flags |= FLAG_64BIT; fmt = *format++; - if (fmt == '\0') - goto end; + if (fmt == '\0') { + break; + } } } if (fmt == 'z') { fmt = *format++; - if (fmt == '\0') - goto end; - - if (sizeof(void *) == sizeof(u64)) + if (fmt == '\0') { + break; + } + /* parasoft-suppress-next-line MISRAC2012-RULE_14_3 "sizeof depends on the architecture" */ + if (sizeof(void *) == sizeof(u64)) { flags |= FLAG_64BIT; + } } number = 0; + is_number = 0; + is_pointer = 0; + switch (fmt) { case 's': { s = va_arg(ap, char *); - if (s == NULL) + if (s == NULL) { s = "(null)"; + } while (*s != '\0') { lib_putch(*s++); @@ -415,18 +487,28 @@ int lib_vprintf(const char *format, va_list ap) case 'X': flags |= FLAG_LARGE_DIGITS; + flags |= FLAG_HEX; + is_number = 1; + break; case 'x': flags |= FLAG_HEX; - goto get_number; + is_number = 1; + break; case 'd': case 'i': flags |= FLAG_SIGNED; + is_number = 1; + + break; + case 'u': - goto get_number; + is_number = 1; + + break; case 'p': { - const void *s = va_arg(ap,void*); + const void *s = va_arg(ap, void *); if (s == NULL) { lib_putch('('); lib_putch('n'); @@ -439,12 +521,13 @@ int lib_vprintf(const char *format, va_list ap) number = (u64)(size_t)s; flags |= (FLAG_ZERO | FLAG_HEX); - - if (sizeof(void *) == sizeof(u64)) + /* parasoft-suppress-next-line MISRAC2012-RULE_14_3 "sizeof depends on the architecture" */ + if (sizeof(void *) == sizeof(u64)) { flags |= FLAG_64BIT; - - min_number_len = sizeof(void *) * 2; - goto handle_number; + } + min_number_len = sizeof(void *) * 2U; + is_number = 1; + is_pointer = 1; break; } @@ -460,47 +543,37 @@ int lib_vprintf(const char *format, va_list ap) i += 2; break; } + if (is_number == 1) { + if (is_pointer == 0) { + number = (flags & FLAG_64BIT) ? va_arg(ap, u64) : va_arg(ap, u32); + } + eptr = printf_sprintf_int(buff, number, flags, (int)min_number_len); + sptr = buff; - continue; - -get_number:; - - if (flags & FLAG_64BIT) - number = va_arg(ap, u64); - else - number = va_arg(ap, u32); - -handle_number:; - eptr = printf_sprintf_int(buff, number, flags, min_number_len); - sptr = buff; - - while (sptr != eptr) { - lib_putch(*sptr++); - ++i; + while (sptr != eptr) { + lib_putch(*sptr++); + ++i; + } } - - continue; } -end: + s = CONSOLE_NORMAL; - while (*s) + while (*s != '\0') { lib_putch(*(s++)); + } return i; } -int lib_printf(const char *format, ...) +void lib_printf(const char *format, ...) { va_list ap; - int ret; va_start(ap, format); - ret = lib_vprintf(format, ap); + (void)lib_vprintf(format, ap); va_end(ap); - - return ret; } @@ -515,3 +588,5 @@ int lib_sprintf(char *out, const char *format, ...) return ret; } + +/* parasoft-end-suppress MISRAC2012-RULE_17_1 */ diff --git a/lib/printf.h b/lib/printf.h index 542d6ed1f..15e3e3620 100644 --- a/lib/printf.h +++ b/lib/printf.h @@ -14,6 +14,8 @@ * %LICENSE% */ +/* parasoft-begin-suppress MISRAC2012-RULE_17_1 "stdarg.h required for custom functions that are like printf" */ + #ifndef _LIB_PRINTF_H_ #define _LIB_PRINTF_H_ @@ -25,13 +27,15 @@ extern int lib_sprintf(char *out, const char *format, ...); extern int lib_vsprintf(char *out, const char *format, va_list args); -extern int lib_printf(const char *fmt, ...); +extern void lib_printf(const char *format, ...); extern int lib_vprintf(const char *format, va_list ap); -extern void lib_putch(char c); +extern void lib_putch(char s); #endif + +/* parasoft-end-suppress MISRAC2012-RULE_17_1 */ diff --git a/lib/rand.c b/lib/rand.c index 64fd4b246..510e3f0b6 100644 --- a/lib/rand.c +++ b/lib/rand.c @@ -13,11 +13,11 @@ * %LICENSE% */ -#include "hal/hal.h" +#include "lib/rand.h" int lib_rand(unsigned int *seedp) { - *seedp = (*seedp * 1103515245 + 12345); - return((unsigned)(*seedp / 2)); + *seedp = (*seedp * 1103515245U + 12345U); + return ((int)((unsigned int)(*seedp / 2U))); } diff --git a/lib/rb.c b/lib/rb.c index 18de82709..878cff583 100644 --- a/lib/rb.c +++ b/lib/rb.c @@ -28,11 +28,13 @@ void lib_rbInit(rbtree_t *tree, rbcomp_t compare, rbaugment_t augment) static inline void rb_augment(rbtree_t *tree, rbnode_t *node) { - if (node == NULL) + if (node == NULL) { return; + } - if (tree->augment != NULL) + if (tree->augment != NULL) { tree->augment(node); + } } @@ -41,16 +43,20 @@ static void rb_rotateLeft(rbtree_t *tree, rbnode_t *x) rbnode_t *y = x->right; x->right = y->left; - if (y->left != NULL) + if (y->left != NULL) { y->left->parent = x; + } y->parent = x->parent; - if (x->parent == NULL) + if (x->parent == NULL) { tree->root = y; - else if (x == x->parent->left) + } + else if (x == x->parent->left) { x->parent->left = y; - else + } + else { x->parent->right = y; + } y->left = x; x->parent = y; @@ -65,16 +71,20 @@ static void rb_rotateRight(rbtree_t *tree, rbnode_t *x) rbnode_t *y = x->left; x->left = y->right; - if (y->right != NULL) + if (y->right != NULL) { y->right->parent = x; + } y->parent = x->parent; - if (x->parent == NULL) + if (x->parent == NULL) { tree->root = y; - else if (x == x->parent->right) + } + else if (x == x->parent->right) { x->parent->right = y; - else + } + else { x->parent->left = y; + } y->right = x; x->parent = y; @@ -142,8 +152,9 @@ static void lib_rbRemoveBalance(rbtree_t *tree, rbnode_t *parent, rbnode_t *node rbnode_t *x = (node == NULL) ? &nil : node; rbnode_t *w; - if (tree->root == NULL) + if (tree->root == NULL) { return; + } while (x != tree->root && x->color == RB_BLACK) { if (x == x->parent->left || (x == &nil && x->parent->left == NULL)) { @@ -157,7 +168,7 @@ static void lib_rbRemoveBalance(rbtree_t *tree, rbnode_t *parent, rbnode_t *node } if ((w->left == NULL || w->left->color == RB_BLACK) && - (w->right == NULL || w->right->color == RB_BLACK)) { + (w->right == NULL || w->right->color == RB_BLACK)) { w->color = RB_RED; x = x->parent; } @@ -165,7 +176,6 @@ static void lib_rbRemoveBalance(rbtree_t *tree, rbnode_t *parent, rbnode_t *node w->left->color = RB_BLACK; w->color = RB_RED; rb_rotateRight(tree, w); - w = x->parent->right; } else { w->color = x->parent->color; @@ -186,7 +196,7 @@ static void lib_rbRemoveBalance(rbtree_t *tree, rbnode_t *parent, rbnode_t *node } if ((w->right == NULL || w->right->color == RB_BLACK) && - (w->left == NULL || w->left->color == RB_BLACK)) { + (w->left == NULL || w->left->color == RB_BLACK)) { w->color = RB_RED; x = x->parent; } @@ -194,7 +204,6 @@ static void lib_rbRemoveBalance(rbtree_t *tree, rbnode_t *parent, rbnode_t *node w->right->color = RB_BLACK; w->color = RB_RED; rb_rotateLeft(tree, w); - w = x->parent->left; } else { w->color = x->parent->color; @@ -213,18 +222,21 @@ static void lib_rbRemoveBalance(rbtree_t *tree, rbnode_t *parent, rbnode_t *node static void rb_transplant(rbtree_t *tree, rbnode_t *u, rbnode_t *v) { if (u->parent != NULL) { - if (u == u->parent->left) + if (u == u->parent->left) { u->parent->left = v; - else + } + else { u->parent->right = v; - + } rb_augment(tree, u->parent); } - else + else { tree->root = v; + } - if (v != NULL) + if (v != NULL) { v->parent = u->parent; + } rb_augment(tree, v); } @@ -240,19 +252,23 @@ int lib_rbInsert(rbtree_t *tree, rbnode_t *z) y = x; c = tree->compare(y, z); - if (c == 0) + if (c == 0) { return -EEXIST; + } x = (c > 0) ? x->left : x->right; } z->parent = y; - if (y == NULL) + if (y == NULL) { tree->root = z; - else if (c > 0) + } + else if (c > 0) { y->left = z; - else + } + else { y->right = z; + } z->left = NULL; z->right = NULL; @@ -282,11 +298,13 @@ void lib_rbRemove(rbtree_t *tree, rbnode_t *z) } else { y = lib_rbMinimum(z->right); + /* parasoft-suppress-next-line MISRAC2012-DIR_4_7-a "We are sure that if we delete node from the tree it's not NULL" */ c = y->color; x = y->right; - if (y->parent == z) + if (y->parent == z) { p = y; + } else { p = y->parent; @@ -304,11 +322,13 @@ void lib_rbRemove(rbtree_t *tree, rbnode_t *z) rb_augment(tree, t); t = lib_rbMinimum(y->right); + /* parasoft-suppress-next-line MISRAC2012-DIR_4_7-q "rb_augment checks if t in not NULL" */ rb_augment(tree, t); } - if (c == RB_BLACK) + if (c == RB_BLACK) { lib_rbRemoveBalance(tree, p, x); + } } @@ -316,11 +336,13 @@ rbnode_t *lib_rbMinimum(rbnode_t *node) { rbnode_t *x = node; - if (x == NULL) + if (x == NULL) { return x; + } - while (x->left != NULL) + while (x->left != NULL) { x = x->left; + } return x; } @@ -330,11 +352,13 @@ rbnode_t *lib_rbMaximum(rbnode_t *node) { rbnode_t *x = node; - if (x == NULL) + if (x == NULL) { return x; + } - while (x->right != NULL) + while (x->right != NULL) { x = x->right; + } return x; } @@ -344,11 +368,13 @@ rbnode_t *lib_rbPrev(rbnode_t *node) { rbnode_t *x = node; - if (x->left != NULL) + if (x->left != NULL) { return lib_rbMaximum(x->left); + } - while (x->parent != NULL && x == x->parent->left) + while (x->parent != NULL && x == x->parent->left) { x = x->parent; + } return x->parent; } @@ -358,12 +384,13 @@ rbnode_t *lib_rbNext(rbnode_t *node) { rbnode_t *x = node; - if (x->right != NULL) + if (x->right != NULL) { return lib_rbMinimum(x->right); + } - while (x->parent != NULL && x == x->parent->right) + while (x->parent != NULL && x == x->parent->right) { x = x->parent; - + } return x->parent; } @@ -381,8 +408,9 @@ rbnode_t *lib_rbFindEx(rbnode_t *root, rbnode_t *node, rbcomp_t compare) while (it != NULL) { c = compare(it, node); - if (c == 0) + if (c == 0) { return it; + } it = (c > 0) ? it->left : it->right; } @@ -391,39 +419,42 @@ rbnode_t *lib_rbFindEx(rbnode_t *root, rbnode_t *node, rbcomp_t compare) } -#define RB_DUMP_DEPTH 16 +#define RB_DUMP_DEPTH 16U -void lib_rbDumpEx(rbnode_t *node, rbdump_t dump, unsigned int *depth, unsigned char d[RB_DUMP_DEPTH]) +static void lib_rbDumpEx(rbnode_t *node, rbdump_t dump, unsigned int *depth, unsigned char d[RB_DUMP_DEPTH]) { unsigned int i; - for (i = 0; i < *depth; i++) - lib_printf("%c ", d[i] ? '|' : ' '); + for (i = 0; i < *depth; i++) { + lib_printf("%c ", (d[i] != 0U) ? '|' : ' '); + } if (node == NULL) { - lib_printf("%s() *\n", *depth ? "`-" : ""); + lib_printf("%s() *\n", (*depth != 0U) ? "`-" : ""); return; } - lib_printf("%s(", *depth ? "`-" : ""); + lib_printf("%s(", (*depth != 0U) ? "`-" : ""); dump(node); lib_printf(")%c\n", node->color == RB_BLACK ? '*' : ' '); (*depth)++; + /* FIXME: dead MISRA Rule 17.2*/ if ((node->left != NULL) || (node->right != NULL)) { - + /* parasoft-begin-suppress MISRAC2012-RULE_17_2 "Dead code, used only for debug (for testing)" */ if (*depth < RB_DUMP_DEPTH) { d[*depth] = 1; lib_rbDumpEx(node->left, dump, depth, d); d[*depth] = 0; lib_rbDumpEx(node->right, dump, depth, d); } + /* parasoft-end-suppress MISRAC2012-RULE_17_2 */ else { - for (i = 0; i < *depth; i++) - lib_printf("%c ", d[i] ? '|' : ' '); - - lib_printf("%s(..)\n", *depth ? "`-" : ""); + for (i = 0; i < *depth; i++) { + lib_printf("%c ", (d[i] != 0U) ? '|' : ' '); + } + lib_printf("%s(..)\n", (*depth != 0U) ? "`-" : ""); } } (*depth)--; diff --git a/lib/rb.h b/lib/rb.h index 0c7ecdab6..ffcfad736 100644 --- a/lib/rb.h +++ b/lib/rb.h @@ -16,7 +16,7 @@ #ifndef _LIB_RB_H_ #define _LIB_RB_H_ - +/* parasoft-begin-suppress MISRAC2012-RULE_20_7-a 'type' within *(type *) can not be put in the parentheses due to compilation error */ #define lib_treeof(type, node_field, node) ({ \ long _off = (long)&(((type *)0)->node_field); \ rbnode_t *tmpnode = (node); \ @@ -25,7 +25,8 @@ typedef enum _rbcolor_t { - RB_RED, RB_BLACK + RB_RED, + RB_BLACK } rbcolor_t; @@ -56,10 +57,10 @@ typedef struct _rbtree_t { extern void lib_rbInit(rbtree_t *tree, rbcomp_t compare, rbaugment_t augment); -extern int lib_rbInsert(rbtree_t *tree, rbnode_t *node); +extern int lib_rbInsert(rbtree_t *tree, rbnode_t *z); -extern void lib_rbRemove(rbtree_t *tree, rbnode_t *node); +extern void lib_rbRemove(rbtree_t *tree, rbnode_t *z); extern rbnode_t *lib_rbMinimum(rbnode_t *node); diff --git a/lib/strutil.c b/lib/strutil.c index 6fe55094b..657b18f20 100644 --- a/lib/strutil.c +++ b/lib/strutil.c @@ -15,9 +15,9 @@ #include "hal/hal.h" #include "vm/kmalloc.h" +#include "lib/strutil.h" - -static char *lib_strrchr(char *s, int c) +static char *lib_strrchr(char *s, char c) { char *p = NULL; char *i; @@ -34,7 +34,7 @@ static char *lib_strrchr(char *s, int c) char *lib_strdup(const char *str) { - size_t len = hal_strlen(str) + 1; + size_t len = hal_strlen(str) + 1U; char *ptr = vm_kmalloc(len); if (ptr != NULL) { @@ -45,7 +45,7 @@ char *lib_strdup(const char *str) } -void lib_splitname(char *path, char **base, char **dir) +void lib_splitname(char *path, char **base, const char **dir) { char *slash; @@ -62,6 +62,6 @@ void lib_splitname(char *path, char **base, char **dir) else { *dir = path; *base = slash + 1; - *slash = 0; + *slash = '\0'; } } diff --git a/lib/strutil.h b/lib/strutil.h index daea27d0e..80fc5dff7 100644 --- a/lib/strutil.h +++ b/lib/strutil.h @@ -20,7 +20,7 @@ char *lib_strdup(const char *str); -void lib_splitname(char *path, char **base, char **dir); +void lib_splitname(char *path, char **base, const char **dir); #endif /* _LIB_STRUTIL_H_ */ diff --git a/log/log.c b/log/log.c index abcd0f3e9..1a96eb06f 100644 --- a/log/log.c +++ b/log/log.c @@ -30,7 +30,7 @@ #define KERNEL_LOG_SIZE 2048 #endif -#define TCGETS 0x405c7401 +#define TCGETS 0x405c7401UL typedef struct _log_rmsg_t { @@ -139,7 +139,7 @@ static void _log_msgRespond(log_reader_t *r, ssize_t err) msg.o.size = rmsg->osize; msg.o.err = err; - proc_respond(rmsg->oid.port, &msg, rmsg->rid); + (void)proc_respond(rmsg->oid.port, &msg, (int)rmsg->rid); vm_kfree(rmsg); } @@ -172,9 +172,9 @@ static log_reader_t *log_readerFind(pid_t pid) { log_reader_t *r; - proc_lockSet(&log_common.lock); + (void)proc_lockSet(&log_common.lock); r = _log_readerFind(pid); - proc_lockClear(&log_common.lock); + (void)proc_lockClear(&log_common.lock); return r; } @@ -197,9 +197,9 @@ static void _log_readerPut(log_reader_t **r) static void log_readerPut(log_reader_t **r) { - proc_lockSet(&log_common.lock); + (void)proc_lockSet(&log_common.lock); _log_readerPut(r); - proc_lockClear(&log_common.lock); + (void)proc_lockClear(&log_common.lock); } @@ -224,10 +224,10 @@ static int log_readerAdd(pid_t pid, unsigned nonblocking) r->pid = pid; r->refs = 1; - proc_lockSet(&log_common.lock); + (void)proc_lockSet(&log_common.lock); r->ridx = log_common.head; LIST_ADD(&log_common.readers, r); - proc_lockClear(&log_common.lock); + (void)proc_lockClear(&log_common.lock); return 0; } @@ -254,9 +254,9 @@ static ssize_t log_read(log_reader_t *r, char *buf, size_t sz) { ssize_t ret; - proc_lockSet(&log_common.lock); + (void)proc_lockSet(&log_common.lock); ret = _log_read(r, buf, sz); - proc_lockClear(&log_common.lock); + (void)proc_lockClear(&log_common.lock); return ret; } @@ -296,9 +296,9 @@ static int log_readerBlock(log_reader_t *r, msg_t *msg, oid_t oid, unsigned long rmsg->rid = rid; rmsg->oid = oid; - proc_lockSet(&log_common.lock); + (void)proc_lockSet(&log_common.lock); LIST_ADD(&r->msgs, rmsg); - proc_lockClear(&log_common.lock); + (void)proc_lockClear(&log_common.lock); return EOK; } @@ -308,14 +308,14 @@ static void log_close(pid_t pid) { log_reader_t *r; - proc_lockSet(&log_common.lock); + (void)proc_lockSet(&log_common.lock); r = _log_readerFind(pid); if (r != NULL) { /* Put 2 times to decrement initial reference too */ _log_readerPut(&r); _log_readerPut(&r); } - proc_lockClear(&log_common.lock); + (void)proc_lockClear(&log_common.lock); } @@ -336,7 +336,7 @@ void log_msgHandler(msg_t *msg, oid_t oid, unsigned long int rid) switch (msg->type) { case mtOpen: - if (msg->i.openclose.flags & O_WRONLY) { + if ((msg->i.openclose.flags & O_WRONLY) != 0U) { msg->o.err = EOK; } else { @@ -350,15 +350,19 @@ void log_msgHandler(msg_t *msg, oid_t oid, unsigned long int rid) } else { msg->o.err = log_read(r, msg->o.data, msg->o.size); - if ((msg->o.err == 0) && (r->nonblocking == 0)) { + if ((msg->o.err == 0) && (r->nonblocking == 0U)) { msg->o.err = log_readerBlock(r, msg, oid, rid); if (msg->o.err == EOK) { respond = 0; } } - else if ((msg->o.err == 0) && (r->nonblocking != 0)) { + else if ((msg->o.err == 0) && (r->nonblocking != 0U)) { msg->o.err = -EAGAIN; } + else { + /* No action required */ + } + log_readerPut(&r); } break; @@ -379,7 +383,7 @@ void log_msgHandler(msg_t *msg, oid_t oid, unsigned long int rid) } if (respond == 1) { - proc_respond(oid.port, msg, rid); + (void)proc_respond(oid.port, msg, (int)rid); } } @@ -390,7 +394,7 @@ int log_write(const char *data, size_t len) char c; if (log_common.enabled != 0) { - proc_lockSet(&log_common.lock); + (void)proc_lockSet(&log_common.lock); /* No need to check log_common.enabled again, * it's used only on kernel panic */ @@ -405,10 +409,10 @@ int log_write(const char *data, size_t len) } } - if (i > 0) { + if (i > 0U) { log_common.updated = 1; } - proc_lockClear(&log_common.lock); + (void)proc_lockClear(&log_common.lock); } else { for (i = 0; i < len; ++i) { @@ -416,11 +420,11 @@ int log_write(const char *data, size_t len) } } - return len; + return (int)len; } -void _log_scrub(void) +static void _log_scrub(void) { if (log_common.updated != 0) { _log_readersUpdate(); @@ -434,9 +438,9 @@ void log_scrub(void) /* Treat log_common.updated as atomic to * avoid taking lock in most cases */ if (log_common.updated != 0) { - proc_lockSet(&log_common.lock); + (void)proc_lockSet(&log_common.lock); _log_scrub(); - proc_lockClear(&log_common.lock); + (void)proc_lockClear(&log_common.lock); } } @@ -448,7 +452,7 @@ void log_scrubTry(void) if (log_common.updated != 0) { if (proc_lockTry(&log_common.lock) == 0) { _log_scrub(); - proc_lockClear(&log_common.lock); + (void)proc_lockClear(&log_common.lock); } } } @@ -463,7 +467,7 @@ void log_disable(void) void _log_init(void) { hal_memset(&log_common, 0, sizeof(log_common)); - proc_lockInit(&log_common.lock, &proc_lockAttrDefault, "log.common"); + (void)proc_lockInit(&log_common.lock, &proc_lockAttrDefault, "log.common"); log_common.enabled = 1; } diff --git a/main.c b/main.c index 7567e7f10..9ce877563 100644 --- a/main.c +++ b/main.c @@ -26,7 +26,7 @@ #include "test/test.h" -struct { +static struct { vm_map_t kmap; vm_object_t kernel; page_t *page; @@ -35,7 +35,7 @@ struct { } main_common; -void main_initthr(void *unused) +static void main_initthr(void *unused) { int res; unsigned int argc; @@ -51,7 +51,7 @@ void main_initthr(void *unused) syspage_progShow(); posix_init(); - posix_clone(-1); + (void)posix_clone(-1); /* Start programs from syspage */ if ((prog = syspage_progList()) != NULL) { @@ -59,8 +59,9 @@ void main_initthr(void *unused) cmdline = prog->argv; /* If app shouldn't be executed then args should be discarded */ if (*cmdline != 'X') { - while (*cmdline != ';' && *cmdline != '\0') + while (*cmdline != ';' && *cmdline != '\0') { ++cmdline; + } *cmdline = '\0'; continue; @@ -69,20 +70,24 @@ void main_initthr(void *unused) /* 'X' is no longer useful */ ++prog->argv; cmdline = prog->argv; - for (argc = 0; argc < (sizeof(argv) / sizeof(*argv) - 1);) { + argc = 0; + while (argc < (sizeof(argv) / sizeof(*argv) - 1U)) { argv[argc++] = cmdline; - while (*cmdline != ';' && *cmdline != '\0') + while (*cmdline != ';' && *cmdline != '\0') { ++cmdline; + } - if (*cmdline == '\0') + if (*cmdline == '\0') { break; + } *(cmdline++) = '\0'; } - argv[argc++] = NULL; + argv[argc] = NULL; - if ((res = proc_syspageSpawn(prog, vm_getSharedMap(prog->imaps[0]), vm_getSharedMap(prog->dmaps[0]), argv[0], argv)) < 0) + if ((res = proc_syspageSpawn(prog, vm_getSharedMap((int)prog->imaps[0]), vm_getSharedMap((int)prog->dmaps[0]), argv[0], argv)) < 0) { lib_printf("main: failed to spawn %s (%d)\n", argv[0], res); + } } while ((prog = prog->next) != syspage_progList()); } @@ -101,13 +106,14 @@ int main(void) _usrv_init(); hal_consolePrint(ATTR_BOLD, "Phoenix-RTOS microkernel v. " RELEASE " rev. " VERSION "\n"); + lib_printf("hal: %s\n", hal_cpuInfo(s)); lib_printf("hal: %s\n", hal_cpuFeatures(s, sizeof(s))); lib_printf("hal: %s\n", hal_interruptsFeatures(s, sizeof(s))); lib_printf("hal: %s\n", hal_timerFeatures(s, sizeof(s))); _vm_init(&main_common.kmap, &main_common.kernel); - _proc_init(&main_common.kmap, &main_common.kernel); + (void)_proc_init(&main_common.kmap, &main_common.kernel); _syscalls_init(); #if 0 /* Basic kernel tests */ @@ -120,11 +126,11 @@ int main(void) test_proc_exit(); #endif - proc_start(main_initthr, NULL, (const char *)"init"); + (void)proc_start(main_initthr, NULL, (const char *)"init"); /* Start scheduling, leave current stack */ hal_cpuEnableInterrupts(); - hal_cpuReschedule(NULL, NULL); + (void)hal_cpuReschedule(NULL, NULL); return 0; } diff --git a/posix/fdpass.c b/posix/fdpass.c index 0ca984d24..db39ed42c 100644 --- a/posix/fdpass.c +++ b/posix/fdpass.c @@ -16,25 +16,34 @@ #include "fdpass.h" -#define CMSG_ALIGN(n) (((n) + sizeof(socklen_t) - 1) & ~(sizeof(socklen_t) - 1)) -#define CMSG_SPACE(n) (sizeof(struct cmsghdr) + CMSG_ALIGN(n)) -#define CMSG_LEN(n) (sizeof(struct cmsghdr) + (n)) -#define CMSG_DATA(c) ((unsigned char *)((struct cmsghdr *)(c) + 1)) -#define CMSG_FIRSTHDR(d, l) ((l) < sizeof(struct cmsghdr) ? NULL : (struct cmsghdr *)(d)) +#define CMSG_ALIGN(n) (((n) + sizeof(socklen_t) - 1U) & ~(sizeof(socklen_t) - 1U)) +#define CMSG_SPACE(n) (sizeof(struct cmsghdr) + CMSG_ALIGN(n)) +#define CMSG_LEN(n) (sizeof(struct cmsghdr) + (n)) +#define CMSG_DATA(c) ((unsigned char *)((struct cmsghdr *)(c) + 1)) +#define CMSG_DATA_CONST(c) ((const unsigned char *)((const struct cmsghdr *)(c) + 1)) +#define CMSG_FIRSTHDR(d, l) ((l) < sizeof(struct cmsghdr) ? NULL : (struct cmsghdr *)(d)) +#define CMSG_FIRSTHDR_CONST(d, l) ((l) < sizeof(struct cmsghdr) ? NULL : (const struct cmsghdr *)(d)) #define CMSG_NXTHDR(d, l, c) \ ({ \ struct cmsghdr *_c = (struct cmsghdr *)(c); \ char *_n = (char *)_c + CMSG_SPACE(_c->cmsg_len); \ char *_e = (char *)(d) + (l); \ - (_n > _e ? (struct cmsghdr *)NULL : (struct cmsghdr *)_n); \ + ((ptr_t)_n > (ptr_t)_e ? (struct cmsghdr *)NULL : (struct cmsghdr *)_n); \ + }) + +#define CMSG_NXTHDR_CONST(d, l, c) \ + ({ \ + const char *_n = (const char *)(c) + CMSG_SPACE((c)->cmsg_len); \ + const char *_e = (const char *)(d) + (l); \ + ((ptr_t)_n > (ptr_t)_e ? NULL : (const struct cmsghdr *)_n); \ }) #define FDPACK_PUSH(p, of, fl) \ do { \ - (p)->fd[(p)->first + (p)->cnt].file = of; \ - (p)->fd[(p)->first + (p)->cnt].flags = fl; \ + (p)->fd[(p)->first + (p)->cnt].file = (of); \ + (p)->fd[(p)->first + (p)->cnt].flags = (fl); \ ++(p)->cnt; \ } while (0) @@ -57,52 +66,56 @@ int fdpass_pack(fdpack_t **packs, const void *control, socklen_t controllen) { fdpack_t *pack; - struct cmsghdr *cmsg; - unsigned char *cmsg_data, *cmsg_end; + const struct cmsghdr *cmsg; + const unsigned char *cmsg_data, *cmsg_end; open_file_t *file; unsigned int cnt, tot_cnt; int fd, err; - if (controllen > MAX_MSG_CONTROLLEN) + if (controllen > MAX_MSG_CONTROLLEN) { return -ENOMEM; + } + tot_cnt = 0; /* calculate total number of file descriptors */ - for (tot_cnt = 0, cmsg = CMSG_FIRSTHDR(control, controllen); cmsg; cmsg = CMSG_NXTHDR(control, controllen, cmsg)) { - cmsg_data = CMSG_DATA(cmsg); - cmsg_end = (unsigned char *)cmsg + cmsg->cmsg_len; - cnt = (cmsg_end - cmsg_data) / sizeof(int); + for (cmsg = CMSG_FIRSTHDR_CONST(control, controllen); cmsg != NULL; cmsg = CMSG_NXTHDR_CONST(control, controllen, cmsg)) { + cmsg_data = CMSG_DATA_CONST(cmsg); + cmsg_end = (const unsigned char *)cmsg + cmsg->cmsg_len; + cnt = ((addr_t)cmsg_end - (addr_t)cmsg_data) / sizeof(int); - if (cmsg->cmsg_level != SOL_SOCKET || cmsg->cmsg_type != SCM_RIGHTS) + if (cmsg->cmsg_level != SOL_SOCKET || cmsg->cmsg_type != SCM_RIGHTS) { return -EINVAL; + } tot_cnt += cnt; } - if (tot_cnt == 0) { + if (tot_cnt == 0U) { /* control data valid but no file descriptors */ *packs = NULL; return 0; } - if ((pack = vm_kmalloc(sizeof(fdpack_t) + sizeof(fildes_t) * tot_cnt)) == NULL) + if ((pack = vm_kmalloc(sizeof(fdpack_t) + sizeof(fildes_t) * tot_cnt)) == NULL) { return -ENOMEM; + } hal_memset(pack, 0, sizeof(fdpack_t)); LIST_ADD(packs, pack); /* reference and pack file descriptors */ - for (cmsg = CMSG_FIRSTHDR(control, controllen); cmsg; cmsg = CMSG_NXTHDR(control, controllen, cmsg)) { - cmsg_data = CMSG_DATA(cmsg); - cmsg_end = (unsigned char *)cmsg + cmsg->cmsg_len; - cnt = (cmsg_end - cmsg_data) / sizeof(int); + for (cmsg = CMSG_FIRSTHDR_CONST(control, controllen); cmsg != NULL; cmsg = CMSG_NXTHDR_CONST(control, controllen, cmsg)) { + cmsg_data = CMSG_DATA_CONST(cmsg); + cmsg_end = (const unsigned char *)cmsg + cmsg->cmsg_len; + cnt = ((addr_t)cmsg_end - (addr_t)cmsg_data) / sizeof(int); - while (cnt) { + while (cnt != 0U) { hal_memcpy(&fd, cmsg_data, sizeof(int)); if ((err = posix_getOpenFile(fd, &file)) < 0) { /* revert everything we have done so far */ - fdpass_discard(packs); + (void)fdpass_discard(packs); return err; } @@ -127,7 +140,7 @@ int fdpass_unpack(fdpack_t **packs, void *control, socklen_t *controllen) unsigned int cnt, flags; int fd; - if (!(*packs) || *controllen < CMSG_LEN(sizeof(int))) { + if (*packs == NULL || *controllen < CMSG_LEN(sizeof(int))) { *controllen = 0; return 0; } @@ -137,7 +150,7 @@ int fdpass_unpack(fdpack_t **packs, void *control, socklen_t *controllen) return -1; } - proc_lockSet(&p->lock); + (void)proc_lockSet(&p->lock); cmsg = CMSG_FIRSTHDR(control, *controllen); cmsg_data = CMSG_DATA(cmsg); @@ -149,12 +162,12 @@ int fdpass_unpack(fdpack_t **packs, void *control, socklen_t *controllen) cnt = 0; /* unpack and add file descriptors */ - while (pack && pack->cnt && *controllen >= CMSG_LEN(sizeof(int) * (cnt + 1))) { + while (pack != NULL && pack->cnt != 0U && *controllen >= CMSG_LEN(sizeof(int) * (cnt + 1U))) { FDPACK_POP_FILE_AND_FLAGS(pack, file, flags); fd = _posix_addOpenFile(p, file, flags); if (fd < 0) { - posix_fileDeref(file); + (void)posix_fileDeref(file); } else { hal_memcpy(cmsg_data, &fd, sizeof(int)); @@ -162,7 +175,7 @@ int fdpass_unpack(fdpack_t **packs, void *control, socklen_t *controllen) ++cnt; } - if (pack->cnt == 0) { + if (pack->cnt == 0U) { LIST_REMOVE(packs, pack); vm_kfree(pack); pack = *packs; @@ -171,7 +184,7 @@ int fdpass_unpack(fdpack_t **packs, void *control, socklen_t *controllen) *controllen = cmsg->cmsg_len = CMSG_LEN(sizeof(int) * cnt); - proc_lockClear(&p->lock); + (void)proc_lockClear(&p->lock); pinfo_put(p); return 0; } @@ -188,18 +201,18 @@ int fdpass_discard(fdpack_t **packs) return -1; } - proc_lockSet(&p->lock); + (void)proc_lockSet(&p->lock); - while ((pack = *packs)) { - while (pack->cnt) { + while ((pack = *packs) != NULL) { + while (pack->cnt != 0U) { FDPACK_POP_FILE(pack, file); - posix_fileDeref(file); + (void)posix_fileDeref(file); } LIST_REMOVE(packs, pack); vm_kfree(pack); } - proc_lockClear(&p->lock); + (void)proc_lockClear(&p->lock); pinfo_put(p); return 0; } diff --git a/posix/fdpass.h b/posix/fdpass.h index 825001cc7..891ba4b54 100644 --- a/posix/fdpass.h +++ b/posix/fdpass.h @@ -19,14 +19,14 @@ #include "posix_private.h" -#define MAX_MSG_CONTROLLEN 256 +#define MAX_MSG_CONTROLLEN 256U /* NOTE: file descriptors are added & removed FIFO style */ typedef struct fdpack_s { struct fdpack_s *next, *prev; unsigned int first, cnt; - fildes_t fd[]; + fildes_t fd[0]; } fdpack_t; diff --git a/posix/inet.c b/posix/inet.c index e013d625d..01f058c19 100644 --- a/posix/inet.c +++ b/posix/inet.c @@ -26,40 +26,45 @@ static int socksrvcall(msg_t *msg) oid_t oid; int err; - if ((err = proc_lookup(PATH_SOCKSRV, NULL, &oid)) < 0) + if ((err = proc_lookup(PATH_SOCKSRV, NULL, &oid)) < 0) { return err; + } - if ((err = proc_send(oid.port, msg)) < 0) + if ((err = proc_send(oid.port, msg)) < 0) { return err; + } return 0; } -static ssize_t sockcall(unsigned socket, msg_t *msg) +static ssize_t sockcall(unsigned int socket, msg_t *msg) { sockport_resp_t *smo = (void *)msg->o.raw; int err; - if ((err = proc_send(socket, msg)) < 0) + if ((err = proc_send((u32)socket, msg)) < 0) { return err; + } err = smo->ret; return err; } -static ssize_t socknamecall(unsigned socket, msg_t *msg, struct sockaddr *address, socklen_t *address_len) +static ssize_t socknamecall(unsigned int socket, msg_t *msg, struct sockaddr *address, socklen_t *address_len) { sockport_resp_t *smo = (void *)msg->o.raw; ssize_t err; - if ((err = sockcall(socket, msg)) < 0) + if ((err = sockcall(socket, msg)) < 0) { return err; + } if (address_len != NULL) { - if (smo->sockname.addrlen > *address_len) + if (smo->sockname.addrlen > *address_len) { smo->sockname.addrlen = *address_len; + } hal_memcpy(address, smo->sockname.addr, smo->sockname.addrlen); *address_len = smo->sockname.addrlen; @@ -69,12 +74,13 @@ static ssize_t socknamecall(unsigned socket, msg_t *msg, struct sockaddr *addres } -static ssize_t sockdestcall(unsigned socket, msg_t *msg, const struct sockaddr *address, socklen_t address_len) +static ssize_t sockdestcall(unsigned int socket, msg_t *msg, const struct sockaddr *address, socklen_t address_len) { sockport_msg_t *smi = (void *)msg->i.raw; - if (address_len > sizeof(smi->send.addr)) + if (address_len > sizeof(smi->send.addr)) { return -EINVAL; + } smi->send.addrlen = address_len; hal_memcpy(smi->send.addr, address, address_len); @@ -83,7 +89,7 @@ static ssize_t sockdestcall(unsigned socket, msg_t *msg, const struct sockaddr * } -int inet_accept4(unsigned socket, struct sockaddr *address, socklen_t *address_len, int flags) +int inet_accept4(unsigned int socket, struct sockaddr *address, socklen_t *address_len, unsigned int flags) { ssize_t err; msg_t msg; @@ -95,14 +101,15 @@ int inet_accept4(unsigned socket, struct sockaddr *address, socklen_t *address_l msg.type = sockmAccept; smi->send.flags = flags; - if ((err = socknamecall(socket, &msg, address, address_len)) < 0) + if ((err = socknamecall(socket, &msg, address, address_len)) < 0) { return err; + } return err; } -int inet_bind(unsigned socket, const struct sockaddr *address, socklen_t address_len) +int inet_bind(unsigned int socket, const struct sockaddr *address, socklen_t address_len) { msg_t msg; @@ -113,7 +120,7 @@ int inet_bind(unsigned socket, const struct sockaddr *address, socklen_t address } -int inet_connect(unsigned socket, const struct sockaddr *address, socklen_t address_len) +int inet_connect(unsigned int socket, const struct sockaddr *address, socklen_t address_len) { msg_t msg; @@ -124,7 +131,7 @@ int inet_connect(unsigned socket, const struct sockaddr *address, socklen_t addr } -int inet_getpeername(unsigned socket, struct sockaddr *address, socklen_t *address_len) +int inet_getpeername(unsigned int socket, struct sockaddr *address, socklen_t *address_len) { msg_t msg; @@ -135,7 +142,7 @@ int inet_getpeername(unsigned socket, struct sockaddr *address, socklen_t *addre } -int inet_getsockname(unsigned socket, struct sockaddr *address, socklen_t *address_len) +int inet_getsockname(unsigned int socket, struct sockaddr *address, socklen_t *address_len) { msg_t msg; @@ -146,7 +153,7 @@ int inet_getsockname(unsigned socket, struct sockaddr *address, socklen_t *addre } -int inet_getsockopt(unsigned socket, int level, int optname, void *optval, socklen_t *optlen) +int inet_getsockopt(unsigned int socket, int level, int optname, void *optval, socklen_t *optlen) { msg_t msg; sockport_msg_t *smi = (void *)msg.i.raw; @@ -161,15 +168,16 @@ int inet_getsockopt(unsigned socket, int level, int optname, void *optval, sockl ret = sockcall(socket, &msg); - if (ret < 0) + if (ret < 0) { return ret; + } - *optlen = ret; + *optlen = (socklen_t)ret; return 0; } -int inet_listen(unsigned socket, int backlog) +int inet_listen(unsigned int socket, int backlog) { msg_t msg; sockport_msg_t *smi = (void *)msg.i.raw; @@ -182,7 +190,7 @@ int inet_listen(unsigned socket, int backlog) } -ssize_t inet_recvfrom(unsigned socket, void *message, size_t length, int flags, struct sockaddr *src_addr, socklen_t *src_len) +ssize_t inet_recvfrom(unsigned int socket, void *message, size_t length, unsigned int flags, struct sockaddr *src_addr, socklen_t *src_len) { msg_t msg; sockport_msg_t *smi = (void *)msg.i.raw; @@ -197,7 +205,7 @@ ssize_t inet_recvfrom(unsigned socket, void *message, size_t length, int flags, } -ssize_t inet_sendto(unsigned socket, const void *message, size_t length, int flags, const struct sockaddr *dest_addr, socklen_t dest_len) +ssize_t inet_sendto(unsigned int socket, const void *message, size_t length, unsigned int flags, const struct sockaddr *dest_addr, socklen_t dest_len) { msg_t msg; sockport_msg_t *smi = (void *)msg.i.raw; @@ -205,28 +213,31 @@ ssize_t inet_sendto(unsigned socket, const void *message, size_t length, int fla hal_memset(&msg, 0, sizeof(msg)); msg.type = sockmSend; smi->send.flags = flags; - msg.i.data = (void *)message; + msg.i.data = (const void *)message; msg.i.size = length; return sockdestcall(socket, &msg, dest_addr, dest_len); } -ssize_t inet_recvmsg(unsigned socket, struct msghdr *msg, int flags) +ssize_t inet_recvmsg(unsigned int socket, struct msghdr *msg, unsigned int flags) { ssize_t ret = 0; /* multiple buffers are not supported */ - if (msg->msg_iovlen > 1) + if (msg->msg_iovlen > 1) { return -EINVAL; + } - if (msg->msg_iovlen == 1) + if (msg->msg_iovlen == 1) { ret = inet_recvfrom(socket, msg->msg_iov->iov_base, msg->msg_iov->iov_len, flags, msg->msg_name, &msg->msg_namelen); + } if (ret >= 0) { /* control data is not supported */ - if (msg->msg_controllen > 0) + if (msg->msg_controllen > 0U) { msg->msg_controllen = 0; + } /* output flags are not supported */ msg->msg_flags = 0; @@ -236,20 +247,23 @@ ssize_t inet_recvmsg(unsigned socket, struct msghdr *msg, int flags) } -ssize_t inet_sendmsg(unsigned socket, const struct msghdr *msg, int flags) +ssize_t inet_sendmsg(unsigned int socket, const struct msghdr *msg, unsigned int flags) { ssize_t ret = 0; /* multiple buffers are not supported */ - if (msg->msg_iovlen > 1) + if (msg->msg_iovlen > 1) { return -EINVAL; + } /* control data is not supported */ - if (msg->msg_controllen > 0) + if (msg->msg_controllen > 0U) { return -EINVAL; + } - if (msg->msg_iovlen == 1) + if (msg->msg_iovlen == 1) { ret = inet_sendto(socket, msg->msg_iov->iov_base, msg->msg_iov->iov_len, flags, msg->msg_name, msg->msg_namelen); + } return ret; } @@ -267,27 +281,28 @@ int inet_socket(int domain, int type, int protocol) smi->socket.type = type; smi->socket.protocol = protocol; - if ((err = socksrvcall(&msg)) < 0) + if ((err = socksrvcall(&msg)) < 0) { return err; + } - return (msg.o.err < 0) ? msg.o.err : msg.o.lookup.dev.port; + return (msg.o.err < 0) ? msg.o.err : (int)msg.o.lookup.dev.port; } -int inet_shutdown(unsigned socket, int how) +int inet_shutdown(unsigned int socket, int how) { msg_t msg; sockport_msg_t *smi = (void *)msg.i.raw; hal_memset(&msg, 0, sizeof(msg)); msg.type = sockmShutdown; - smi->send.flags = how; + smi->send.flags = (unsigned int)how; return sockcall(socket, &msg); } -int inet_setsockopt(unsigned socket, int level, int optname, const void *optval, socklen_t optlen) +int inet_setsockopt(unsigned int socket, int level, int optname, const void *optval, socklen_t optlen) { msg_t msg; sockport_msg_t *smi = (void *)msg.i.raw; @@ -296,27 +311,27 @@ int inet_setsockopt(unsigned socket, int level, int optname, const void *optval, msg.type = sockmSetOpt; smi->opt.level = level; smi->opt.optname = optname; - msg.i.data = (void *)optval; + msg.i.data = optval; msg.i.size = optlen; return sockcall(socket, &msg); } -int inet_setfl(unsigned socket, int flags) +int inet_setfl(unsigned int socket, int flags) { msg_t msg; sockport_msg_t *smi = (void *)msg.i.raw; hal_memset(&msg, 0, sizeof(msg)); msg.type = sockmSetFl; - smi->send.flags = flags; + smi->send.flags = (unsigned int)flags; return sockcall(socket, &msg); } -int inet_getfl(unsigned socket) +int inet_getfl(unsigned int socket) { msg_t msg; diff --git a/posix/posix.c b/posix/posix.c index 9975eb837..570d0e76f 100644 --- a/posix/posix.c +++ b/posix/posix.c @@ -47,23 +47,23 @@ typedef struct { typedef struct _event_t { oid_t oid; - unsigned type; + unsigned int type; - unsigned flags; - unsigned count; - unsigned data; + unsigned int flags; + unsigned int count; + unsigned int data; } event_t; -struct { +static struct { rbtree_t pid; lock_t lock; id_t fresh; - char hostname[HOST_NAME_MAX + 1]; + char hostname[HOST_NAME_MAX + 1U]; } posix_common; -process_info_t *_pinfo_find(unsigned int pid) +static process_info_t *_pinfo_find(int pid) { process_info_t pi, *r; @@ -77,31 +77,31 @@ process_info_t *_pinfo_find(unsigned int pid) } -process_info_t *pinfo_find(unsigned int pid) +process_info_t *pinfo_find(int pid) { process_info_t *r; - proc_lockSet(&posix_common.lock); + (void)proc_lockSet(&posix_common.lock); r = _pinfo_find(pid); - proc_lockClear(&posix_common.lock); + (void)proc_lockClear(&posix_common.lock); return r; } void pinfo_put(process_info_t *p) { - proc_lockSet(&posix_common.lock); + (void)proc_lockSet(&posix_common.lock); p->refs--; if (p->refs != 0) { - proc_lockClear(&posix_common.lock); + (void)proc_lockClear(&posix_common.lock); return; } lib_rbRemove(&posix_common.pid, &p->linkage); - proc_lockClear(&posix_common.lock); + (void)proc_lockClear(&posix_common.lock); vm_kfree(p->fds); - proc_lockDone(&p->lock); + (void)proc_lockDone(&p->lock); vm_kfree(p); } @@ -110,10 +110,10 @@ int posix_fileDeref(open_file_t *f) { int err = EOK; - proc_lockSet(&f->lock); + (void)proc_lockSet(&f->lock); --f->refs; - if (f->refs == 0) { - if (f->type == ftUnixSocket) { + if (f->refs == 0U) { + if (f->type == (char)ftUnixSocket) { err = unix_close(f->oid.id); } else { @@ -122,11 +122,11 @@ int posix_fileDeref(open_file_t *f) } while (err == -EINTR); } - proc_lockDone(&f->lock); + (void)proc_lockDone(&f->lock); vm_kfree(f); } else { - proc_lockClear(&f->lock); + (void)proc_lockClear(&f->lock); } return err; } @@ -137,7 +137,7 @@ static void posix_putUnusedFile(process_info_t *p, int fd) open_file_t *f; f = p->fds[fd].file; - proc_lockDone(&f->lock); + (void)proc_lockDone(&f->lock); vm_kfree(f); p->fds[fd].file = NULL; } @@ -152,19 +152,19 @@ int posix_getOpenFile(int fd, open_file_t **f) return -ENOSYS; } - proc_lockSet(&p->lock); + (void)proc_lockSet(&p->lock); if ((fd < 0) || (fd >= p->fdsz) || (p->fds[fd].file == NULL)) { - proc_lockClear(&p->lock); + (void)proc_lockClear(&p->lock); pinfo_put(p); return -EBADF; } *f = p->fds[fd].file; - proc_lockSet(&(*f)->lock); + (void)proc_lockSet(&(*f)->lock); (*f)->refs++; - proc_lockClear(&(*f)->lock); - proc_lockClear(&p->lock); + (void)proc_lockClear(&(*f)->lock); + (void)proc_lockClear(&p->lock); pinfo_put(p); return 0; @@ -187,13 +187,13 @@ static int _posix_allocfd(process_info_t *p, int fd) nfdsz = p->maxfd; } - nfds = vm_kmalloc(nfdsz * sizeof(*nfds)); + nfds = vm_kmalloc((unsigned int)nfdsz * sizeof(*nfds)); if (nfds == NULL) { return -1; } - hal_memcpy(nfds, p->fds, p->fdsz * sizeof(*nfds)); - hal_memset(nfds + p->fdsz, 0, (nfdsz - p->fdsz) * sizeof(*nfds)); + hal_memcpy(nfds, p->fds, (unsigned int)p->fdsz * sizeof(*nfds)); + hal_memset(nfds + p->fdsz, 0, ((unsigned int)nfdsz - (unsigned int)p->fdsz) * sizeof(*nfds)); vm_kfree(p->fds); @@ -219,11 +219,11 @@ int posix_newFile(process_info_t *p, int fd) return -ENOMEM; } - proc_lockSet(&p->lock); + (void)proc_lockSet(&p->lock); fd = _posix_allocfd(p, fd); if (fd < 0) { - proc_lockClear(&p->lock); + (void)proc_lockClear(&p->lock); vm_kfree(f); return -ENFILE; } @@ -233,8 +233,8 @@ int posix_newFile(process_info_t *p, int fd) hal_memset(f, 0, sizeof(open_file_t)); f->refs = 1; f->offset = 0; - proc_lockInit(&f->lock, &proc_lockAttrDefault, "posix.file"); - proc_lockClear(&p->lock); + (void)proc_lockInit(&f->lock, &proc_lockAttrDefault, "posix.file"); + (void)proc_lockClear(&p->lock); return fd; } @@ -260,18 +260,20 @@ static int pinfo_cmp(rbnode_t *n1, rbnode_t *n2) process_info_t *p1 = lib_treeof(process_info_t, linkage, n1); process_info_t *p2 = lib_treeof(process_info_t, linkage, n2); + /* parasoft-suppress-next-line MISRAC2012-DIR_4_1 "Variable pass to lib_treeof will not be NULL, so lib_treeof will not be NULL either" */ if (p1->process < p2->process) { return -1; } else if (p1->process > p2->process) { return 1; } - - return 0; + else { + return 0; + } } -int posix_truncate(oid_t *oid, off_t length) +static int posix_truncate(oid_t *oid, off_t length) { msg_t msg; int err = -EINVAL; @@ -280,7 +282,7 @@ int posix_truncate(oid_t *oid, off_t length) hal_memset(&msg, 0, sizeof(msg)); msg.type = mtTruncate; hal_memcpy(&msg.oid, oid, sizeof(oid_t)); - msg.i.io.len = length; + msg.i.io.len = (unsigned int)length; err = proc_send(oid->port, &msg); } @@ -294,7 +296,7 @@ int posix_clone(int ppid) process_info_t *p, *pp; process_t *proc; - int i; + int i, j; oid_t console; open_file_t *f; @@ -306,7 +308,7 @@ int posix_clone(int ppid) } hal_memset(&console, 0, sizeof(console)); - proc_lockInit(&p->lock, &proc_lockAttrDefault, "posix.process"); + (void)proc_lockInit(&p->lock, &proc_lockAttrDefault, "posix.process"); p->children = NULL; p->zombies = NULL; p->wait = NULL; @@ -316,7 +318,7 @@ int posix_clone(int ppid) pp = pinfo_find(ppid); if (pp != NULL) { TRACE("clone: got parent"); - proc_lockSet(&pp->lock); + (void)proc_lockSet(&pp->lock); p->maxfd = pp->maxfd; p->fdsz = pp->fdsz; LIST_ADD(&pp->children, p); @@ -330,51 +332,51 @@ int posix_clone(int ppid) p->process = process_getPid(proc); - p->fds = vm_kmalloc(p->fdsz * sizeof(fildes_t)); + p->fds = vm_kmalloc((unsigned int)p->fdsz * sizeof(fildes_t)); if (p->fds == NULL) { - proc_lockDone(&p->lock); + (void)proc_lockDone(&p->lock); vm_kfree(p); if (pp != NULL) { - proc_lockClear(&pp->lock); + (void)proc_lockClear(&pp->lock); pinfo_put(pp); } return -ENOMEM; } if (pp != NULL) { - hal_memcpy(p->fds, pp->fds, pp->fdsz * sizeof(fildes_t)); + hal_memcpy(p->fds, pp->fds, (unsigned int)pp->fdsz * sizeof(fildes_t)); for (i = 0; i < p->fdsz; ++i) { f = p->fds[i].file; if (f != NULL) { - proc_lockSet(&f->lock); + (void)proc_lockSet(&f->lock); ++f->refs; - proc_lockClear(&f->lock); + (void)proc_lockClear(&f->lock); } } - proc_lockClear(&pp->lock); + (void)proc_lockClear(&pp->lock); } else { - hal_memset(p->fds, 0, p->fdsz * sizeof(fildes_t)); + hal_memset(p->fds, 0, (unsigned int)p->fdsz * sizeof(fildes_t)); for (i = 0; i < 3; ++i) { f = vm_kmalloc(sizeof(open_file_t)); p->fds[i].file = f; if (f == NULL) { - for (--i; i >= 0; --i) { - posix_putUnusedFile(p, i); + for (j = 0; j < i; j++) { + posix_putUnusedFile(p, j); } - proc_lockDone(&p->lock); + (void)proc_lockDone(&p->lock); vm_kfree(p->fds); vm_kfree(p); return -ENOMEM; } - proc_lockInit(&f->lock, &proc_lockAttrDefault, "posix.file"); + (void)proc_lockInit(&f->lock, &proc_lockAttrDefault, "posix.file"); f->refs = 1; f->offset = 0; - f->type = ftTty; + f->type = (char)ftTty; p->fds[i].flags = 0; hal_memcpy(&f->oid, &console, sizeof(oid_t)); } @@ -392,9 +394,9 @@ int posix_clone(int ppid) p->pgid = p->process; } - proc_lockSet(&posix_common.lock); - lib_rbInsert(&posix_common.pid, &p->linkage); - proc_lockClear(&posix_common.lock); + (void)proc_lockSet(&posix_common.lock); + (void)lib_rbInsert(&posix_common.pid, &p->linkage); + (void)proc_lockClear(&posix_common.lock); return EOK; } @@ -412,14 +414,14 @@ int posix_exec(void) return -1; } - proc_lockSet(&p->lock); + (void)proc_lockSet(&p->lock); for (fd = 0; fd < p->fdsz; ++fd) { - if ((p->fds[fd].file != NULL) && ((p->fds[fd].flags & FD_CLOEXEC) != 0)) { - posix_fileDeref(p->fds[fd].file); + if ((p->fds[fd].file != NULL) && ((p->fds[fd].flags & FD_CLOEXEC) != 0U)) { + (void)posix_fileDeref(p->fds[fd].file); p->fds[fd].file = NULL; } } - proc_lockClear(&p->lock); + (void)proc_lockClear(&p->lock); pinfo_put(p); return 0; @@ -432,13 +434,13 @@ static int posix_exit(process_info_t *p, int code) p->exitcode = code; - proc_lockSet(&p->lock); + (void)proc_lockSet(&p->lock); for (fd = 0; fd < p->fdsz; ++fd) { if (p->fds[fd].file != NULL) { - posix_fileDeref(p->fds[fd].file); + (void)posix_fileDeref(p->fds[fd].file); } } - proc_lockClear(&p->lock); + (void)proc_lockClear(&p->lock); return 0; } @@ -450,7 +452,8 @@ static int posix_create(const char *filename, int type, mode_t mode, oid_t dev, int err; oid_t dir; - char *name, *basename, *dirname; + char *name, *basename; + const char *dirname; name = lib_strdup(filename); if (name == NULL) { @@ -517,7 +520,7 @@ int posix_statvfs(const char *path, int fildes, struct statvfs *buf) return -EIO; } - if (S_ISDIR(msg.o.attr.val)) { + if (S_ISDIR((unsigned long long)msg.o.attr.val)) { oidp = devp; } } @@ -559,9 +562,9 @@ int posix_open(const char *filename, int oflag, char *ustack) open_file_t *f; mode_t mode; - hal_memset(&pipesrv, 0xff, sizeof(oid_t)); - - (void)proc_lookup("/dev/posix/pipes", NULL, &pipesrv); + if (proc_lookup("/dev/posix/pipes", NULL, &pipesrv) != 0) { + hal_memset(&pipesrv, 0xff, sizeof(oid_t)); + } p = pinfo_find(process_getPid(proc_current()->process)); if (p == NULL) { @@ -570,7 +573,7 @@ int posix_open(const char *filename, int oflag, char *ustack) hal_memset(&dev, 0, sizeof(oid_t)); - proc_lockSet(&p->lock); + (void)proc_lockSet(&p->lock); do { fd = _posix_allocfd(p, fd); @@ -586,15 +589,15 @@ int posix_open(const char *filename, int oflag, char *ustack) } p->fds[fd].file = f; - proc_lockInit(&f->lock, &proc_lockAttrDefault, "posix.file"); - proc_lockClear(&p->lock); + (void)proc_lockInit(&f->lock, &proc_lockAttrDefault, "posix.file"); + (void)proc_lockClear(&p->lock); do { err = proc_lookup(filename, &ln, &oid); - if ((err == -ENOENT) && ((oflag & O_CREAT) != 0)) { + if ((err == -ENOENT) && (((unsigned int)oflag & O_CREAT) != 0U)) { GETFROMSTACK(ustack, mode_t, mode, 2); - if (posix_create(filename, 1 /* otFile */, mode | S_IFREG, dev, &oid) < 0) { + if (posix_create(filename, 1 /* otFile */, mode | (unsigned int)S_IFREG, dev, &oid) < 0) { err = -EIO; break; } @@ -603,17 +606,20 @@ int posix_open(const char *filename, int oflag, char *ustack) else if (err < 0) { break; } + else { + /* No action required */ + } if (oid.port != US_PORT) { - err = proc_open(oid, oflag); + err = proc_open(oid, (unsigned int)oflag); if (err < 0) { break; } } - proc_lockSet(&p->lock); - p->fds[fd].flags = oflag & O_CLOEXEC ? FD_CLOEXEC : 0; - proc_lockClear(&p->lock); + (void)proc_lockSet(&p->lock); + p->fds[fd].flags = ((unsigned int)oflag & O_CLOEXEC) != 0U ? FD_CLOEXEC : 0U; + (void)proc_lockClear(&p->lock); if (err == 0) { hal_memcpy(&f->oid, &oid, sizeof(oid)); @@ -621,7 +627,10 @@ int posix_open(const char *filename, int oflag, char *ustack) else { /* multiplexer, e.g. /dev/ptmx */ f->oid.port = oid.port; - f->oid.id = err; + f->oid.id = (unsigned int)err; + /* FIXME Error can also be assign to -EINVAL + * which is -22. How to handle that? + */ } hal_memcpy(&f->ln, &ln, sizeof(ln)); @@ -630,40 +639,40 @@ int posix_open(const char *filename, int oflag, char *ustack) /* TODO: check for other types */ if (oid.port == US_PORT) { - f->type = ftUnixSocket; + f->type = (char)ftUnixSocket; } else if (oid.port == pipesrv.port) { - f->type = ftPipe; + f->type = (char)ftPipe; } else { - f->type = ftRegular; + f->type = (char)ftRegular; } - if ((oflag & O_APPEND) != 0) { + if (((unsigned int)oflag & O_APPEND) != 0U) { f->offset = proc_size(f->oid); } else { f->offset = 0; } - if ((oflag & O_TRUNC) != 0) { - posix_truncate(&f->oid, 0); + if (((unsigned int)oflag & O_TRUNC) != 0U) { + (void)posix_truncate(&f->oid, 0); } - f->status = oflag & ~(O_CREAT | O_EXCL | O_NOCTTY | O_TRUNC | O_CLOEXEC); + f->status = (unsigned int)oflag & ~(O_CREAT | O_EXCL | O_NOCTTY | O_TRUNC | O_CLOEXEC); pinfo_put(p); return fd; } while (0); - proc_lockSet(&p->lock); + (void)proc_lockSet(&p->lock); p->fds[fd].file = NULL; - proc_lockDone(&f->lock); + (void)proc_lockDone(&f->lock); vm_kfree(f); } while (0); - proc_lockClear(&p->lock); + (void)proc_lockClear(&p->lock); pinfo_put(p); return err; } @@ -681,7 +690,7 @@ int posix_close(int fildes) return -1; } - proc_lockSet(&p->lock); + (void)proc_lockSet(&p->lock); do { if ((fildes < 0) || (fildes >= p->fdsz)) { @@ -694,13 +703,13 @@ int posix_close(int fildes) f = p->fds[fildes].file; p->fds[fildes].file = NULL; - proc_lockClear(&p->lock); + (void)proc_lockClear(&p->lock); pinfo_put(p); return posix_fileDeref(f); } while (0); - proc_lockClear(&p->lock); + (void)proc_lockClear(&p->lock); pinfo_put(p); return err; } @@ -721,8 +730,8 @@ ssize_t posix_read(int fildes, void *buf, size_t nbyte, off_t offset) return err; } - if ((f->status & O_WRONLY) != 0) { - posix_fileDeref(f); + if ((f->status & O_WRONLY) != 0U) { + (void)posix_fileDeref(f); return -EBADF; } @@ -731,28 +740,28 @@ ssize_t posix_read(int fildes, void *buf, size_t nbyte, off_t offset) return -ESPIPE; } - proc_lockSet(&f->lock); + (void)proc_lockSet(&f->lock); /* offset < 0 means use current fd offset */ if (offset < 0) { offs = f->offset; } status = f->status; - proc_lockClear(&f->lock); + (void)proc_lockClear(&f->lock); - if (f->type == ftUnixSocket) { - rcnt = unix_recvfrom(f->oid.id, buf, nbyte, 0, NULL, 0); + if (f->type == (char)ftUnixSocket) { + rcnt = unix_recvfrom(f->oid.id, buf, nbyte, 0, NULL, NULL); } else { rcnt = proc_read(f->oid, offs, buf, nbyte, status); } if (rcnt > 0 && offset < 0) { - proc_lockSet(&f->lock); + (void)proc_lockSet(&f->lock); f->offset += rcnt; - proc_lockClear(&f->lock); + (void)proc_lockClear(&f->lock); } - posix_fileDeref(f); + (void)posix_fileDeref(f); return rcnt; } @@ -773,8 +782,8 @@ ssize_t posix_write(int fildes, void *buf, size_t nbyte, off_t offset) return err; } - if ((f->status & O_RDONLY) != 0) { - posix_fileDeref(f); + if ((f->status & O_RDONLY) != 0U) { + (void)posix_fileDeref(f); return -EBADF; } @@ -783,15 +792,15 @@ ssize_t posix_write(int fildes, void *buf, size_t nbyte, off_t offset) return -ESPIPE; } - proc_lockSet(&f->lock); + (void)proc_lockSet(&f->lock); /* offset < 0 means use current fd offset */ if (offset < 0) { offs = f->offset; } status = f->status; - proc_lockClear(&f->lock); + (void)proc_lockClear(&f->lock); - if (f->type == ftUnixSocket) { + if (f->type == (char)ftUnixSocket) { rcnt = unix_sendto(f->oid.id, buf, nbyte, 0, NULL, 0); } else { @@ -799,12 +808,12 @@ ssize_t posix_write(int fildes, void *buf, size_t nbyte, off_t offset) } if (rcnt > 0 && offset < 0) { - proc_lockSet(&f->lock); + (void)proc_lockSet(&f->lock); f->offset += rcnt; - proc_lockClear(&f->lock); + (void)proc_lockClear(&f->lock); } - posix_fileDeref(f); + (void)posix_fileDeref(f); return rcnt; } @@ -822,7 +831,7 @@ int posix_getOid(int fildes, oid_t *oid) hal_memcpy(oid, &f->oid, sizeof(oid_t)); - posix_fileDeref(f); + (void)posix_fileDeref(f); return EOK; } @@ -841,7 +850,7 @@ int posix_dup(int fildes) return -1; } - proc_lockSet(&p->lock); + (void)proc_lockSet(&p->lock); do { if ((fildes < 0) || (fildes >= p->fdsz)) { @@ -860,22 +869,22 @@ int posix_dup(int fildes) p->fds[newfd].file = f; p->fds[newfd].flags = 0; - proc_lockSet(&f->lock); + (void)proc_lockSet(&f->lock); f->refs++; - proc_lockClear(&f->lock); - proc_lockClear(&p->lock); + (void)proc_lockClear(&f->lock); + (void)proc_lockClear(&p->lock); pinfo_put(p); return newfd; } while (0); - proc_lockClear(&p->lock); + (void)proc_lockClear(&p->lock); pinfo_put(p); return -EBADF; } -int _posix_dup2(process_info_t *p, int fildes, int fildes2) +static int _posix_dup2(process_info_t *p, int fildes, int fildes2) { open_file_t *f, *f2; int nfd2; @@ -911,15 +920,15 @@ int _posix_dup2(process_info_t *p, int fildes, int fildes2) if (p->fds[fildes2].file != NULL) { p->fds[fildes2].file = NULL; - posix_fileDeref(f2); + (void)posix_fileDeref(f2); } p->fds[fildes2].file = f; p->fds[fildes2].flags = 0; - proc_lockSet(&f->lock); + (void)proc_lockSet(&f->lock); f->refs++; - proc_lockClear(&f->lock); + (void)proc_lockClear(&f->lock); return fildes2; } @@ -936,9 +945,9 @@ int posix_dup2(int fildes, int fildes2) return -1; } - proc_lockSet(&p->lock); + (void)proc_lockSet(&p->lock); fildes2 = _posix_dup2(p, fildes, fildes2); - proc_lockClear(&p->lock); + (void)proc_lockClear(&p->lock); pinfo_put(p); return fildes2; @@ -989,14 +998,14 @@ int posix_pipe(int fildes[2]) return -ENOMEM; } - proc_lockSet(&p->lock); + (void)proc_lockSet(&p->lock); fildes[0] = _posix_allocfd(p, 0); if (fildes[0] >= 0) { fildes[1] = _posix_allocfd(p, fildes[0] + 1); } if ((fildes[0] < 0) || (fildes[1] < 0)) { - proc_lockClear(&p->lock); + (void)proc_lockClear(&p->lock); vm_kfree(fo); vm_kfree(fi); @@ -1008,22 +1017,22 @@ int posix_pipe(int fildes[2]) p->fds[fildes[0]].flags = p->fds[fildes[1]].flags = 0; p->fds[fildes[0]].file = fo; - proc_lockInit(&fo->lock, &proc_lockAttrDefault, "posix.file"); + (void)proc_lockInit(&fo->lock, &proc_lockAttrDefault, "posix.file"); hal_memcpy(&fo->oid, &oid, sizeof(oid)); fo->refs = 1; fo->offset = 0; - fo->type = ftPipe; + fo->type = (char)ftPipe; fo->status = O_RDONLY; p->fds[fildes[1]].file = fi; - proc_lockInit(&fi->lock, &proc_lockAttrDefault, "posix.file"); + (void)proc_lockInit(&fi->lock, &proc_lockAttrDefault, "posix.file"); hal_memcpy(&fi->oid, &oid, sizeof(oid)); fi->refs = 1; fi->offset = 0; - fi->type = ftPipe; + fi->type = (char)ftPipe; fi->status = O_WRONLY; - proc_lockClear(&p->lock); + (void)proc_lockClear(&p->lock); pinfo_put(p); return 0; } @@ -1043,7 +1052,7 @@ int posix_mkfifo(const char *pathname, mode_t mode) return -ENOSYS; } - ret = proc_create(pipesrv.port, pxBufferedPipe, 0, oid, pipesrv, NULL, &oid); + ret = proc_create(pipesrv.port, pxBufferedPipe, 0U, oid, pipesrv, NULL, &oid); if (ret < 0) { return ret; } @@ -1081,6 +1090,7 @@ int posix_chmod(const char *pathname, mode_t mode) msg.type = mtSetAttr; msg.i.attr.type = atMode; + // parasoft-suppress-next-line MISRAC2012-RULE_10_3-b "" msg.i.attr.val = mode & ALLPERMS; err = proc_send(oid.port, &msg); @@ -1098,14 +1108,15 @@ int posix_link(const char *path1, const char *path2) oid_t oid, dev, dir; int err; - char *name, *basename, *dirname; + char *name, *basename; + const char *dirname; name = lib_strdup(path2); if (name == NULL) { return -ENOMEM; } - lib_splitname(name, &basename, &dirname); + (void)lib_splitname(name, &basename, &dirname); do { err = proc_lookup(dirname, NULL, &dir); @@ -1150,14 +1161,15 @@ int posix_unlink(const char *pathname) oid_t oid, dir; int err; - char *name, *basename, *dirname; + char *name, *basename; + const char *dirname; name = lib_strdup(pathname); if (name == NULL) { return -ENOMEM; } - lib_splitname(name, &basename, &dirname); + (void)lib_splitname(name, &basename, &dirname); do { err = proc_lookup(dirname, NULL, &dir); @@ -1177,7 +1189,7 @@ int posix_unlink(const char *pathname) if (dir.port != oid.port) { if (oid.port == US_PORT) { - unix_unlink(oid.id); + (void)unix_unlink(oid.id); } else { /* Signal unlink to device */ @@ -1213,11 +1225,11 @@ int posix_lseek(int fildes, off_t *offset, int whence) /* TODO: Find a better way to check fd type */ scnt = proc_size(f->oid); if (scnt < 0) { - posix_fileDeref(f); + (void)posix_fileDeref(f); return -ESPIPE; } - proc_lockSet(&f->lock); + (void)proc_lockSet(&f->lock); switch (whence) { case SEEK_SET: scnt = *offset; @@ -1243,9 +1255,9 @@ int posix_lseek(int fildes, off_t *offset, int whence) err = -EINVAL; } - proc_lockClear(&f->lock); + (void)proc_lockClear(&f->lock); - posix_fileDeref(f); + (void)posix_fileDeref(f); *offset = scnt; @@ -1262,13 +1274,13 @@ int posix_ftruncate(int fildes, off_t length) err = posix_getOpenFile(fildes, &f); if (err >= 0) { - if ((f->status & O_RDONLY) == 0) { + if ((f->status & O_RDONLY) == 0U) { err = posix_truncate(&f->oid, length); } else { err = -EBADF; } - posix_fileDeref(f); + (void)posix_fileDeref(f); } return err; @@ -1292,11 +1304,11 @@ int posix_fstat(int fd, struct stat *buf) hal_memset(buf, 0, sizeof(struct stat)); hal_memset(&msg, 0, sizeof(msg_t)); - buf->st_dev = f->ln.port; + buf->st_dev = (int)f->ln.port; buf->st_ino = (int)f->ln.id; /* FIXME */ - buf->st_rdev = f->oid.port; + buf->st_rdev = (int)f->oid.port; - if (f->type == ftRegular) { + if (f->type == (char)ftRegular) { msg.type = mtGetAttrAll; hal_memcpy(&msg.oid, &f->oid, sizeof(oid_t)); msg.o.data = &attrs; @@ -1339,25 +1351,25 @@ int posix_fstat(int fd, struct stat *buf) if (err < 0) { break; } - buf->st_nlink = attrs.links.val; + buf->st_nlink = (int)attrs.links.val; err = attrs.mode.err; if (err < 0) { break; } - buf->st_mode = attrs.mode.val; + buf->st_mode = (unsigned int)attrs.mode.val; err = attrs.uid.err; if (err < 0) { break; } - buf->st_uid = attrs.uid.val; + buf->st_uid = (int)attrs.uid.val; err = attrs.gid.err; if (err < 0) { break; } - buf->st_gid = attrs.gid.val; + buf->st_gid = (int)attrs.gid.val; err = attrs.size.err; if (err < 0) { @@ -1375,11 +1387,11 @@ int posix_fstat(int fd, struct stat *buf) if (err < 0) { break; } - buf->st_blksize = attrs.ioblock.val; + buf->st_blksize = (int)attrs.ioblock.val; } while (0); } else { - switch (f->type) { + switch ((int)f->type) { case ftRegular: break; case ftPipe: @@ -1403,7 +1415,7 @@ int posix_fstat(int fd, struct stat *buf) buf->st_size = proc_size(f->oid); } - posix_fileDeref(f); + (void)posix_fileDeref(f); return err; } @@ -1431,7 +1443,7 @@ int posix_fsync(int fd) err = proc_send(f->oid.port, &msg); - posix_fileDeref(f); + (void)posix_fileDeref(f); return err; } @@ -1447,26 +1459,31 @@ static int posix_fcntlDup(int fd, int fd2, int cloexec) return -1; } - proc_lockSet(&p->lock); + (void)proc_lockSet(&p->lock); if ((fd < 0) || (fd >= p->fdsz) || (fd2 < 0) || (fd2 >= p->maxfd)) { - proc_lockClear(&p->lock); + (void)proc_lockClear(&p->lock); pinfo_put(p); return -EBADF; } fd2 = _posix_allocfd(p, fd2); + if (fd2 < 0) { + (void)proc_lockClear(&p->lock); + pinfo_put(p); + return fd2; + } err = _posix_dup2(p, fd, fd2); if ((err == fd2) && (cloexec != 0)) { p->fds[fd2].flags = FD_CLOEXEC; } - proc_lockClear(&p->lock); + (void)proc_lockClear(&p->lock); pinfo_put(p); return err; } -static int posix_fcntlSetFd(int fd, unsigned flags) +static int posix_fcntlSetFd(int fd, int flags) { process_info_t *p; int err = EOK; @@ -1476,20 +1493,20 @@ static int posix_fcntlSetFd(int fd, unsigned flags) return -ENOSYS; } - proc_lockSet(&p->lock); + (void)proc_lockSet(&p->lock); if ((fd < 0) || (fd >= p->fdsz)) { - proc_lockClear(&p->lock); + (void)proc_lockClear(&p->lock); pinfo_put(p); return -EBADF; } if (p->fds[fd].file != NULL) { - p->fds[fd].flags = flags; + p->fds[fd].flags = (unsigned int)flags; } else { err = -EBADF; } - proc_lockClear(&p->lock); + (void)proc_lockClear(&p->lock); pinfo_put(p); return err; } @@ -1505,20 +1522,20 @@ static int posix_fcntlGetFd(int fd) return -ENOSYS; } - proc_lockSet(&p->lock); + (void)proc_lockSet(&p->lock); if ((fd < 0) || (fd >= p->fdsz)) { - proc_lockClear(&p->lock); + (void)proc_lockClear(&p->lock); pinfo_put(p); return -EBADF; } if (p->fds[fd].file != NULL) { - err = p->fds[fd].flags; + err = (int)p->fds[fd].flags; } else { err = -EBADF; } - proc_lockClear(&p->lock); + (void)proc_lockClear(&p->lock); pinfo_put(p); return err; } @@ -1529,23 +1546,23 @@ static int posix_fcntlSetFl(int fd, int val) open_file_t *f; int err; /* Creation and access mode flags shall be ignored */ - int ignorefl = O_CREAT | O_EXCL | O_NOCTTY | O_TRUNC | O_RDONLY | O_RDWR | O_WRONLY; + unsigned ignorefl = O_CREAT | O_EXCL | O_NOCTTY | O_TRUNC | O_RDONLY | O_RDWR | O_WRONLY; err = posix_getOpenFile(fd, &f); if (err == 0) { - switch (f->type) { + switch ((int)f->type) { case ftInetSocket: err = inet_setfl(f->oid.port, val); break; case ftUnixSocket: - err = unix_setfl(f->oid.id, val); + err = unix_setfl(f->oid.id, (unsigned int)val); break; default: - f->status = (val & ~ignorefl) | (f->status & ignorefl); + f->status = ((unsigned int)val & ~ignorefl) | (f->status & ignorefl); break; } - posix_fileDeref(f); + (void)posix_fileDeref(f); } return err; @@ -1559,7 +1576,7 @@ static int posix_fcntlGetFl(int fd) err = posix_getOpenFile(fd, &f); if (err == 0) { - switch (f->type) { + switch ((int)f->type) { case ftInetSocket: err = inet_getfl(f->oid.port); break; @@ -1567,11 +1584,11 @@ static int posix_fcntlGetFl(int fd) err = unix_getfl(f->oid.id); break; default: - err = f->status; + err = (int)f->status; break; } - posix_fileDeref(f); + (void)posix_fileDeref(f); } return err; @@ -1588,7 +1605,6 @@ int posix_fcntl(int fd, unsigned int cmd, char *ustack) switch (cmd) { case F_DUPFD_CLOEXEC: - cloexec = 1; case F_DUPFD: GETFROMSTACK(ustack, int, fd2, 2); err = posix_fcntlDup(fd, fd2, cloexec); @@ -1600,7 +1616,7 @@ int posix_fcntl(int fd, unsigned int cmd, char *ustack) case F_SETFD: GETFROMSTACK(ustack, unsigned long, arg, 2); - err = posix_fcntlSetFd(fd, arg); + err = posix_fcntlSetFd(fd, (long)arg); break; case F_GETFL: @@ -1609,7 +1625,7 @@ int posix_fcntl(int fd, unsigned int cmd, char *ustack) case F_SETFL: GETFROMSTACK(ustack, unsigned int, arg, 2); - err = posix_fcntlSetFl(fd, arg); + err = posix_fcntlSetFl(fd, (long)arg); break; case F_GETLK: @@ -1617,9 +1633,11 @@ int posix_fcntl(int fd, unsigned int cmd, char *ustack) case F_SETLKW: /* TODO: implement */ err = EOK; + break; case F_GETOWN: case F_SETOWN: default: + /* Handles any value of 'cmd' not covered by the case labels. */ break; } @@ -1627,17 +1645,17 @@ int posix_fcntl(int fd, unsigned int cmd, char *ustack) } -#define IOCPARM_MASK 0x1fff +#define IOCPARM_MASK 0x1fffUL #define IOCPARM_LEN(x) (((x) >> 16) & IOCPARM_MASK) -#define IOC_OUT 0x40000000 -#define IOC_IN 0x80000000 +#define IOC_OUT 0x40000000UL +#define IOC_IN 0x80000000UL #define IOC_INOUT (IOC_IN | IOC_OUT) -#define _IOC(inout, group, num, len) ((unsigned long)(inout | ((len & IOCPARM_MASK) << 16) | ((group) << 8) | (num))) +#define _IOC(inout, group, num, len) ((unsigned long)((inout) | (((len) & IOCPARM_MASK) << 16) | (((unsigned int)(group)) << 8) | (num))) -#define SIOCGIFCONF _IOC(IOC_INOUT, 'S', 0x12, sizeof(struct ifconf)) -#define SIOCADDRT _IOC(IOC_IN, 'S', 0x44, sizeof(struct rtentry)) -#define SIOCDELRT _IOC(IOC_IN, 'S', 0x45, sizeof(struct rtentry)) +#define SIOCGIFCONF _IOC(IOC_INOUT, 'S', 0x12U, sizeof(struct ifconf)) +#define SIOCADDRT _IOC(IOC_IN, 'S', 0x44U, sizeof(struct rtentry)) +#define SIOCDELRT _IOC(IOC_IN, 'S', 0x45U, sizeof(struct rtentry)) static void ioctl_pack(msg_t *msg, unsigned long request, void *data, oid_t *oid) @@ -1656,8 +1674,8 @@ static void ioctl_pack(msg_t *msg, unsigned long request, void *data, oid_t *oid ioctl->request = request; - if ((request & IOC_INOUT) != 0) { - if ((request & IOC_IN) != 0) { + if ((request & IOC_INOUT) != 0U) { + if ((request & IOC_IN) != 0U) { if (size <= (sizeof(msg->i.raw) - sizeof(ioctl_in_t))) { hal_memcpy(ioctl->data, data, size); } @@ -1667,16 +1685,20 @@ static void ioctl_pack(msg_t *msg, unsigned long request, void *data, oid_t *oid } } - if (((request & IOC_OUT) != 0) && (size > sizeof(msg->o.raw))) { + if (((request & IOC_OUT) != 0U) && (size > sizeof(msg->o.raw))) { msg->o.data = data; msg->o.size = size; } } - else if (size > 0) { + else if (size > 0U) { /* the data is passed by value instead of pointer */ size = min(size, sizeof(void *)); hal_memcpy(ioctl->data, &data, size); } + else { + /* No action required */ + } + /* ioctl special case: arg is structure with pointer - has to be custom-packed into message */ if (request == SIOCGIFCONF) { @@ -1688,13 +1710,16 @@ static void ioctl_pack(msg_t *msg, unsigned long request, void *data, oid_t *oid rt = (struct rtentry *)data; if (rt->rt_dev != NULL) { msg->o.data = rt->rt_dev; - msg->o.size = hal_strlen(rt->rt_dev) + 1; + msg->o.size = hal_strlen(rt->rt_dev) + 1U; } } + else { + /* No action required */ + } } -int ioctl_processResponse(const msg_t *msg, unsigned long request, void *data) +static int ioctl_processResponse(const msg_t *msg, unsigned long request, void *data) { size_t size = IOCPARM_LEN(request); int err; @@ -1702,7 +1727,7 @@ int ioctl_processResponse(const msg_t *msg, unsigned long request, void *data) err = msg->o.err; - if (((request & IOC_OUT) != 0) && (size <= sizeof(msg->o.raw))) { + if (((request & IOC_OUT) != 0U) && (size <= sizeof(msg->o.raw))) { hal_memcpy(data, msg->o.raw, size); } @@ -1726,22 +1751,19 @@ int posix_ioctl(int fildes, unsigned long request, char *ustack) err = posix_getOpenFile(fildes, &f); if (err == 0) { - switch (request) { - /* TODO: handle POSIX defined requests */ - default: - if (((request & IOC_INOUT) != 0) || (IOCPARM_LEN(request) > 0)) { - GETFROMSTACK(ustack, void *, data, 2); - } + /* TODO: handle POSIX defined requests with `switch (request)` */ + if (((request & IOC_INOUT) != 0U) || (IOCPARM_LEN(request) > 0U)) { + GETFROMSTACK(ustack, void *, data, 2); + } - ioctl_pack(&msg, request, data, &f->oid); + ioctl_pack(&msg, request, data, &f->oid); - err = proc_send(f->oid.port, &msg); - if (err == EOK) { - err = ioctl_processResponse(&msg, request, data); - } + err = proc_send(f->oid.port, &msg); + if (err == EOK) { + err = ioctl_processResponse(&msg, request, data); } - posix_fileDeref(f); + (void)posix_fileDeref(f); } return err; @@ -1770,9 +1792,9 @@ int posix_socket(int domain, int type, int protocol) case AF_UNIX: err = unix_socket(domain, type, protocol); if (err >= 0) { - p->fds[fd].file->type = ftUnixSocket; - p->fds[fd].file->oid.port = -1; - p->fds[fd].file->oid.id = err; + p->fds[fd].file->type = (char)ftUnixSocket; + p->fds[fd].file->oid.port = US_PORT; + p->fds[fd].file->oid.id = (unsigned int)err; } break; case AF_INET: @@ -1781,9 +1803,9 @@ int posix_socket(int domain, int type, int protocol) case AF_PACKET: err = inet_socket(domain, type, protocol); if (err >= 0) { - p->fds[fd].file->type = ftInetSocket; - p->fds[fd].file->oid.port = err; - p->fds[fd].file->oid.id = 0; + p->fds[fd].file->type = (char)ftInetSocket; + p->fds[fd].file->oid.port = (unsigned int)err; + p->fds[fd].file->oid.id = 0U; } break; default: @@ -1797,7 +1819,7 @@ int posix_socket(int domain, int type, int protocol) return err; } - if ((type & SOCK_CLOEXEC) != 0) { + if (((unsigned int)type & SOCK_CLOEXEC) != 0U) { p->fds[fd].flags = FD_CLOEXEC; } @@ -1837,14 +1859,14 @@ int posix_socketpair(int domain, int type, int protocol, int sv[2]) err = unix_socketpair(domain, type, protocol, id); if (err == 0) { - p->fds[sv[0]].file->type = ftUnixSocket; - p->fds[sv[1]].file->type = ftUnixSocket; - p->fds[sv[0]].file->oid.port = -1; - p->fds[sv[1]].file->oid.port = -1; - p->fds[sv[0]].file->oid.id = id[0]; - p->fds[sv[1]].file->oid.id = id[1]; - - if ((type & SOCK_CLOEXEC) != 0) { + p->fds[sv[0]].file->type = (char)ftUnixSocket; + p->fds[sv[1]].file->type = (char)ftUnixSocket; + p->fds[sv[0]].file->oid.port = US_PORT; + p->fds[sv[1]].file->oid.port = US_PORT; + p->fds[sv[0]].file->oid.id = (id_t)id[0]; + p->fds[sv[1]].file->oid.id = (id_t)id[1]; + + if (((unsigned int)type & SOCK_CLOEXEC) != 0U) { p->fds[sv[0]].flags = FD_CLOEXEC; p->fds[sv[1]].flags = FD_CLOEXEC; } @@ -1880,21 +1902,21 @@ int posix_accept4(int socket, struct sockaddr *address, socklen_t *address_len, err = posix_getOpenFile(socket, &f); if (err == 0) { - switch (f->type) { + switch ((int)f->type) { case ftInetSocket: - err = inet_accept4(f->oid.port, address, address_len, flags); + err = inet_accept4(f->oid.port, address, address_len, (unsigned int)flags); if (err >= 0) { - p->fds[fd].file->type = ftInetSocket; - p->fds[fd].file->oid.port = err; + p->fds[fd].file->type = (char)ftInetSocket; + p->fds[fd].file->oid.port = (unsigned int)err; p->fds[fd].file->oid.id = 0; } break; case ftUnixSocket: - err = unix_accept4(f->oid.id, address, address_len, flags); + err = unix_accept4(f->oid.id, address, address_len, (unsigned int)flags); if (err >= 0) { - p->fds[fd].file->type = ftUnixSocket; - p->fds[fd].file->oid.port = -1; - p->fds[fd].file->oid.id = err; + p->fds[fd].file->type = (char)ftUnixSocket; + p->fds[fd].file->oid.port = US_PORT; + p->fds[fd].file->oid.id = (unsigned int)err; } break; default: @@ -1902,7 +1924,7 @@ int posix_accept4(int socket, struct sockaddr *address, socklen_t *address_len, break; } - posix_fileDeref(f); + (void)posix_fileDeref(f); } if (err < 0) { @@ -1911,7 +1933,7 @@ int posix_accept4(int socket, struct sockaddr *address, socklen_t *address_len, return err; } - if ((flags & SOCK_CLOEXEC) != 0) { + if (((unsigned int)flags & SOCK_CLOEXEC) != 0U) { p->fds[fd].flags = FD_CLOEXEC; } @@ -1935,7 +1957,7 @@ int posix_bind(int socket, const struct sockaddr *address, socklen_t address_len err = posix_getOpenFile(socket, &f); if (err == 0) { - switch (f->type) { + switch ((int)f->type) { case ftInetSocket: err = inet_bind(f->oid.port, address, address_len); break; @@ -1947,7 +1969,7 @@ int posix_bind(int socket, const struct sockaddr *address, socklen_t address_len break; } - posix_fileDeref(f); + (void)posix_fileDeref(f); } return err; @@ -1963,7 +1985,7 @@ int posix_connect(int socket, const struct sockaddr *address, socklen_t address_ err = posix_getOpenFile(socket, &f); if (err == 0) { - switch (f->type) { + switch ((int)f->type) { case ftInetSocket: err = inet_connect(f->oid.port, address, address_len); break; @@ -1975,7 +1997,7 @@ int posix_connect(int socket, const struct sockaddr *address, socklen_t address_ break; } - posix_fileDeref(f); + (void)posix_fileDeref(f); } return err; @@ -1986,16 +2008,16 @@ int posix_uname(struct utsname *name) { TRACE("uname()"); - hal_strncpy(name->sysname, "Phoenix-RTOS", sizeof(name->sysname) - 1); - name->sysname[sizeof(name->sysname) - 1] = '\0'; - hal_strncpy(name->nodename, posix_common.hostname, sizeof(name->nodename) - 1); - name->nodename[sizeof(name->nodename) - 1] = '\0'; - hal_strncpy(name->release, RELEASE, sizeof(name->release) - 1); - name->release[sizeof(name->release) - 1] = '\0'; - hal_strncpy(name->version, VERSION, sizeof(name->version) - 1); - name->version[sizeof(name->version) - 1] = '\0'; - hal_strncpy(name->machine, TARGET_FAMILY, sizeof(name->machine) - 1); - name->machine[sizeof(name->machine) - 1] = '\0'; + (void)hal_strncpy(name->sysname, "Phoenix-RTOS", sizeof(name->sysname) - 1U); + name->sysname[sizeof(name->sysname) - 1U] = '\0'; + (void)hal_strncpy(name->nodename, posix_common.hostname, sizeof(name->nodename) - 1U); + name->nodename[sizeof(name->nodename) - 1U] = '\0'; + (void)hal_strncpy(name->release, RELEASE, sizeof(name->release) - 1U); + name->release[sizeof(name->release) - 1U] = '\0'; + (void)hal_strncpy(name->version, VERSION, sizeof(name->version) - 1U); + name->version[sizeof(name->version) - 1U] = '\0'; + (void)hal_strncpy(name->machine, TARGET_FAMILY, sizeof(name->machine) - 1U); + name->machine[sizeof(name->machine) - 1U] = '\0'; return 0; } @@ -2005,7 +2027,7 @@ int posix_gethostname(char *name, size_t namelen) { TRACE("gethostname(%zu)", namelen); - hal_strncpy(name, posix_common.hostname, namelen); + (void)hal_strncpy(name, posix_common.hostname, namelen); return 0; } @@ -2020,7 +2042,7 @@ int posix_getpeername(int socket, struct sockaddr *address, socklen_t *address_l err = posix_getOpenFile(socket, &f); if (err == 0) { - switch (f->type) { + switch ((int)f->type) { case ftInetSocket: err = inet_getpeername(f->oid.port, address, address_len); break; @@ -2032,7 +2054,7 @@ int posix_getpeername(int socket, struct sockaddr *address, socklen_t *address_l break; } - posix_fileDeref(f); + (void)posix_fileDeref(f); } return err; @@ -2048,7 +2070,7 @@ int posix_getsockname(int socket, struct sockaddr *address, socklen_t *address_l err = posix_getOpenFile(socket, &f); if (err == 0) { - switch (f->type) { + switch ((int)f->type) { case ftInetSocket: err = inet_getsockname(f->oid.port, address, address_len); break; @@ -2060,7 +2082,7 @@ int posix_getsockname(int socket, struct sockaddr *address, socklen_t *address_l break; } - posix_fileDeref(f); + (void)posix_fileDeref(f); } return err; @@ -2076,7 +2098,7 @@ int posix_getsockopt(int socket, int level, int optname, void *optval, socklen_t err = posix_getOpenFile(socket, &f); if (err == 0) { - switch (f->type) { + switch ((int)f->type) { case ftInetSocket: err = inet_getsockopt(f->oid.port, level, optname, optval, optlen); break; @@ -2088,7 +2110,7 @@ int posix_getsockopt(int socket, int level, int optname, void *optval, socklen_t break; } - posix_fileDeref(f); + (void)posix_fileDeref(f); } return err; @@ -2104,7 +2126,7 @@ int posix_listen(int socket, int backlog) err = posix_getOpenFile(socket, &f); if (err == 0) { - switch (f->type) { + switch ((int)f->type) { case ftInetSocket: err = inet_listen(f->oid.port, backlog); break; @@ -2116,7 +2138,7 @@ int posix_listen(int socket, int backlog) break; } - posix_fileDeref(f); + (void)posix_fileDeref(f); } return err; @@ -2132,19 +2154,19 @@ ssize_t posix_recvfrom(int socket, void *message, size_t length, int flags, stru err = posix_getOpenFile(socket, &f); if (err == 0) { - switch (f->type) { + switch ((int)f->type) { case ftInetSocket: - err = inet_recvfrom(f->oid.port, message, length, flags, src_addr, src_len); + err = inet_recvfrom(f->oid.port, message, length, (unsigned int)flags, src_addr, src_len); break; case ftUnixSocket: - err = unix_recvfrom(f->oid.id, message, length, flags, src_addr, src_len); + err = unix_recvfrom(f->oid.id, message, length, (unsigned int)flags, src_addr, src_len); break; default: err = -ENOTSOCK; break; } - posix_fileDeref(f); + (void)posix_fileDeref(f); } return err; @@ -2160,19 +2182,19 @@ ssize_t posix_sendto(int socket, const void *message, size_t length, int flags, err = posix_getOpenFile(socket, &f); if (err == 0) { - switch (f->type) { + switch ((int)f->type) { case ftInetSocket: - err = inet_sendto(f->oid.port, message, length, flags, dest_addr, dest_len); + err = inet_sendto(f->oid.port, message, length, (unsigned int)flags, dest_addr, dest_len); break; case ftUnixSocket: - err = unix_sendto(f->oid.id, message, length, flags, dest_addr, dest_len); + err = unix_sendto(f->oid.id, message, length, (unsigned int)flags, dest_addr, dest_len); break; default: err = -ENOTSOCK; break; } - posix_fileDeref(f); + (void)posix_fileDeref(f); } return err; @@ -2188,19 +2210,19 @@ ssize_t posix_recvmsg(int socket, struct msghdr *msg, int flags) err = posix_getOpenFile(socket, &f); if (err == 0) { - switch (f->type) { + switch ((int)f->type) { case ftInetSocket: - err = inet_recvmsg(f->oid.port, msg, flags); + err = inet_recvmsg(f->oid.port, msg, (unsigned int)flags); break; case ftUnixSocket: - err = unix_recvmsg(f->oid.id, msg, flags); + err = unix_recvmsg(f->oid.id, msg, (unsigned int)flags); break; default: err = -ENOTSOCK; break; } - posix_fileDeref(f); + (void)posix_fileDeref(f); } return err; @@ -2216,19 +2238,19 @@ ssize_t posix_sendmsg(int socket, const struct msghdr *msg, int flags) err = posix_getOpenFile(socket, &f); if (err == 0) { - switch (f->type) { + switch ((int)f->type) { case ftInetSocket: - err = inet_sendmsg(f->oid.port, msg, flags); + err = inet_sendmsg(f->oid.port, msg, (unsigned int)flags); break; case ftUnixSocket: - err = unix_sendmsg(f->oid.id, msg, flags); + err = unix_sendmsg(f->oid.id, msg, (unsigned int)flags); break; default: err = -ENOTSOCK; break; } - posix_fileDeref(f); + (void)posix_fileDeref(f); } return err; @@ -2244,7 +2266,7 @@ int posix_shutdown(int socket, int how) err = posix_getOpenFile(socket, &f); if (err == 0) { - switch (f->type) { + switch ((int)f->type) { case ftInetSocket: err = inet_shutdown(f->oid.port, how); break; @@ -2256,7 +2278,7 @@ int posix_shutdown(int socket, int how) break; } - posix_fileDeref(f); + (void)posix_fileDeref(f); } return err; @@ -2271,7 +2293,7 @@ int posix_sethostname(const char *name, size_t namelen) return -EINVAL; } - hal_strncpy(posix_common.hostname, name, namelen); + (void)hal_strncpy(posix_common.hostname, name, namelen); posix_common.hostname[namelen] = '\0'; return 0; @@ -2285,7 +2307,7 @@ int posix_setsockopt(int socket, int level, int optname, const void *optval, soc err = posix_getOpenFile(socket, &f); if (err == 0) { - switch (f->type) { + switch ((int)f->type) { case ftInetSocket: err = inet_setsockopt(f->oid.port, level, optname, optval, optlen); break; @@ -2297,7 +2319,7 @@ int posix_setsockopt(int socket, int level, int optname, const void *optval, soc break; } - posix_fileDeref(f); + (void)posix_fileDeref(f); } return err; @@ -2323,18 +2345,18 @@ int posix_futimens(int fildes, const struct timespec *times) hal_memcpy(&msg.oid, &f->oid, sizeof(oid_t)); msg.i.attr.type = atMTime; - msg.i.attr.val = times[1].tv_sec; + msg.i.attr.val = (long long)times[1].tv_sec; err = proc_send(f->oid.port, &msg); if ((err >= 0) && (msg.o.err >= 0)) { msg.i.attr.type = atATime; - msg.i.attr.val = times[0].tv_sec; + msg.i.attr.val = (long long)times[0].tv_sec; err = proc_send(f->oid.port, &msg); } if (err >= 0) { err = msg.o.err; } - posix_fileDeref(f); + (void)posix_fileDeref(f); return err; } @@ -2343,7 +2365,7 @@ int posix_futimens(int fildes, const struct timespec *times) static int do_poll_iteration(struct pollfd *fds, nfds_t nfds) { msg_t msg; - size_t ready = 0, i; + int ready = 0, i; int err; open_file_t *f; @@ -2352,27 +2374,28 @@ static int do_poll_iteration(struct pollfd *fds, nfds_t nfds) msg.type = mtGetAttr; msg.i.attr.type = atPollStatus; - for (i = 0; i < nfds; ++i) { + for (i = 0; i < (int)nfds; ++i) { if (fds[i].fd < 0) { continue; } - msg.i.attr.val = fds[i].events; + msg.i.attr.val = (long long)fds[i].events; if (posix_getOpenFile(fds[i].fd, &f) < 0) { - err = POLLNVAL; + err = (int)POLLNVAL; } else { hal_memcpy(&msg.oid, &f->oid, sizeof(oid_t)); - posix_fileDeref(f); + (void)posix_fileDeref(f); - if (f->type == ftUnixSocket) { - err = unix_poll(msg.oid.id, fds[i].events); + if (f->type == (char)ftUnixSocket) { + err = unix_poll((unsigned int)msg.oid.id, fds[i].events); } else { err = proc_send(msg.oid.port, &msg); if (err >= 0) { - err = (msg.o.err >= 0) ? msg.o.attr.val : msg.o.err; + /* FIXME: 8 byte attr assigned to 4 byte err */ + err = (msg.o.err >= 0) ? (int)msg.o.attr.val : msg.o.err; } } } @@ -2385,12 +2408,15 @@ static int do_poll_iteration(struct pollfd *fds, nfds_t nfds) fds[i].revents |= POLLHUP; } else if (err > 0) { - fds[i].revents |= err; + fds[i].revents |= (unsigned short)err; + } + else { + /* No action required */ } fds[i].revents &= ~(~fds[i].events & (POLLIN | POLLOUT | POLLPRI | POLLRDNORM | POLLWRNORM | POLLRDBAND | POLLWRBAND)); - if (fds[i].revents != 0) { + if (fds[i].revents != 0U) { ++ready; } } @@ -2401,26 +2427,30 @@ static int do_poll_iteration(struct pollfd *fds, nfds_t nfds) #if 1 int posix_poll(struct pollfd *fds, nfds_t nfds, int timeout_ms) { - size_t i, n, ready; + unsigned int i, n; + int ready; time_t timeout, now; - for (i = n = 0; i < nfds; ++i) { + n = 0U; + + for (i = 0U; i < nfds; ++i) { fds[i].revents = 0; if (fds[i].fd >= 0) { ++n; } } - if (n == 0) { + if (n == 0U) { if (timeout_ms > 0) { - proc_threadSleep(timeout_ms * 1000LL); + (void)proc_threadSleep(timeout_ms * 1000LL); } return 0; } if (timeout_ms >= 0) { proc_gettime(&timeout, NULL); - timeout += timeout_ms * 1000LL + !timeout_ms; + timeout += timeout_ms * 1000LL; + timeout += (timeout_ms == 0L) ? 1LL : 0LL; } else { timeout = 0; @@ -2443,7 +2473,7 @@ int posix_poll(struct pollfd *fds, nfds_t nfds, int timeout_ms) now = POLL_INTERVAL; } - proc_threadSleep(now); + (void)proc_threadSleep(now); ready = do_poll_iteration(fds, nfds); } @@ -2566,7 +2596,7 @@ static int posix_killOne(pid_t pid, int tid, int sig) else { thr = threads_findThread(tid); if (thr == NULL) { - proc_put(proc); + (void)proc_put(proc); pinfo_put(pinfo); return -EINVAL; } @@ -2580,8 +2610,7 @@ static int posix_killOne(pid_t pid, int tid, int sig) threads_put(thr); } - - proc_put(proc); + (void)proc_put(proc); pinfo_put(pinfo); return err; @@ -2593,15 +2622,15 @@ static int posix_killGroup(pid_t pgid, int sig) process_info_t *pinfo; rbnode_t *node; - proc_lockSet(&posix_common.lock); + (void)proc_lockSet(&posix_common.lock); for (node = lib_rbMinimum(posix_common.pid.root); node != NULL; node = lib_rbNext(node)) { pinfo = lib_treeof(process_info_t, linkage, node); if (pinfo->pgid == pgid) { - proc_sigpost(pinfo->process, sig); + (void)proc_sigpost(pinfo->process, sig); } } - proc_lockClear(&posix_common.lock); + (void)proc_lockClear(&posix_common.lock); return EOK; } @@ -2630,7 +2659,7 @@ int posix_tkill(pid_t pid, int tid, int sig) void posix_sigchild(pid_t ppid) { - posix_tkill(ppid, NULL, SIGCHLD); + (void)posix_tkill(ppid, 0, SIGCHLD); } @@ -2655,9 +2684,9 @@ int posix_setpgid(pid_t pid, pid_t pgid) return -ESRCH; } - proc_lockSet(&pinfo->lock); + (void)proc_lockSet(&pinfo->lock); pinfo->pgid = pgid; - proc_lockClear(&pinfo->lock); + (void)proc_lockClear(&pinfo->lock); pinfo_put(pinfo); return EOK; } @@ -2681,9 +2710,9 @@ pid_t posix_getpgid(pid_t pid) return -ESRCH; } - proc_lockSet(&pinfo->lock); + (void)proc_lockSet(&pinfo->lock); res = pinfo->pgid; - proc_lockClear(&pinfo->lock); + (void)proc_lockClear(&pinfo->lock); pinfo_put(pinfo); return res; @@ -2703,22 +2732,22 @@ pid_t posix_setsid(void) } /* FIXME (pedantic): Should check if any process has my group id */ - proc_lockSet(&pinfo->lock); + (void)proc_lockSet(&pinfo->lock); if (pinfo->pgid == pid) { - proc_lockClear(&pinfo->lock); + (void)proc_lockClear(&pinfo->lock); pinfo_put(pinfo); return -EPERM; } pinfo->pgid = pid; - proc_lockClear(&pinfo->lock); + (void)proc_lockClear(&pinfo->lock); pinfo_put(pinfo); return pid; } -int posix_waitpid(pid_t child, int *status, int options) +int posix_waitpid(pid_t child, int *status, unsigned options) { process_info_t *pinfo, *c; pid_t pid; @@ -2729,7 +2758,7 @@ int posix_waitpid(pid_t child, int *status, int options) pinfo = pinfo_find(pid); LIB_ASSERT_ALWAYS(pinfo != NULL, "pinfo not found, pid: %d", pid); - proc_lockSet(&pinfo->lock); + (void)proc_lockSet(&pinfo->lock); for (;;) { /* Do this in the loop in case someone has a bad idea of doing multithreaded waitpid */ if ((pinfo->children == NULL) && (pinfo->zombies == NULL)) { @@ -2747,7 +2776,7 @@ int posix_waitpid(pid_t child, int *status, int options) if (status != NULL) { *status = c->exitcode; } - proc_lockClear(&pinfo->lock); + (void)proc_lockClear(&pinfo->lock); pinfo_put(c); pinfo_put(pinfo); @@ -2758,7 +2787,7 @@ int posix_waitpid(pid_t child, int *status, int options) } while (c != pinfo->zombies); } - if ((options & 1) != 0) { /* WNOHANG */ + if ((options & 1U) != 0U) { /* WNOHANG */ err = EOK; break; } @@ -2776,8 +2805,11 @@ int posix_waitpid(pid_t child, int *status, int options) /* Should not happen */ break; } + else { + /* No action required */ + } } - proc_lockClear(&pinfo->lock); + (void)proc_lockClear(&pinfo->lock); pinfo_put(pinfo); return err; @@ -2797,12 +2829,12 @@ void posix_died(pid_t pid, int exit) ppinfo = pinfo_find(pinfo->parent); - posix_exit(pinfo, exit); + (void)posix_exit(pinfo, exit); /* We might not find a parent if it died just now */ if (ppinfo != NULL) { /* Make a zombie, wakeup waitpid */ - proc_lockSet(&ppinfo->lock); + (void)proc_lockSet(&ppinfo->lock); /* Check if we didn't get adopted by the init in the meantime */ if ((ppinfo != init) && (LIST_BELONGS(&ppinfo->children, pinfo) != 0)) { LIST_REMOVE(&ppinfo->children, pinfo); @@ -2810,11 +2842,11 @@ void posix_died(pid_t pid, int exit) waited = proc_threadBroadcast(&ppinfo->wait); adopted = 0; } - proc_lockClear(&ppinfo->lock); + (void)proc_lockClear(&ppinfo->lock); pinfo_put(ppinfo); } - proc_lockSet2(&pinfo->lock, &init->lock); + (void)proc_lockSet2(&pinfo->lock, &init->lock); /* Collect all zombies */ zombies = pinfo->zombies; pinfo->zombies = NULL; @@ -2830,14 +2862,14 @@ void posix_died(pid_t pid, int exit) if (adopted != 0) { LIB_ASSERT(LIST_BELONGS(&init->children, pinfo) != 0, - "zombie's neither parent nor init child, pid: %d, ppid: %d", pid, pinfo->parent); + "zombie's neither parent nor init child, pid: %d, ppid: %d", pid, pinfo->parent); /* We were adopted by the init at some point */ LIST_REMOVE(&init->children, pinfo); LIST_ADD(&zombies, pinfo); waited = 1; } - proc_lockClear(&pinfo->lock); - proc_lockClear(&init->lock); + (void)proc_lockClear(&pinfo->lock); + (void)proc_lockClear(&init->lock); pinfo_put(init); /* Reap all orphaned zombies */ @@ -2876,7 +2908,7 @@ pid_t posix_getppid(pid_t pid) void posix_init(void) { - proc_lockInit(&posix_common.lock, &proc_lockAttrDefault, "posix.common"); + (void)proc_lockInit(&posix_common.lock, &proc_lockAttrDefault, "posix.common"); lib_rbInit(&posix_common.pid, pinfo_cmp, NULL); unix_sockets_init(); posix_common.fresh = 0; diff --git a/posix/posix.h b/posix/posix.h index 0f4a78a52..06c8b3ae6 100644 --- a/posix/posix.h +++ b/posix/posix.h @@ -70,16 +70,16 @@ extern int posix_fcntl(int fd, unsigned int cmd, char *ustack); extern int posix_pipe(int fildes[2]); -extern int posix_mkfifo(const char *path, mode_t mode); +extern int posix_mkfifo(const char *pathname, mode_t mode); -extern int posix_chmod(const char *path, mode_t mode); +extern int posix_chmod(const char *pathname, mode_t mode); extern int posix_fstat(int fd, struct stat *buf); -extern int posix_statvfs(const char *path, int fd, struct statvfs *buf); +extern int posix_statvfs(const char *path, int fildes, struct statvfs *buf); extern int posix_fsync(int fd); @@ -178,7 +178,7 @@ extern pid_t posix_setsid(void); extern void posix_died(pid_t pid, int exit); -extern int posix_waitpid(pid_t child, int *status, int options); +extern int posix_waitpid(pid_t child, int *status, unsigned options); extern void posix_init(void); diff --git a/posix/posix_private.h b/posix/posix_private.h index e26d72668..11bcf3f4e 100644 --- a/posix/posix_private.h +++ b/posix/posix_private.h @@ -20,20 +20,22 @@ #include "proc/proc.h" #include "posix.h" - -#define US_PORT (-1) /* FIXME */ - - -#define SIGHUP 1 -#define SIGINT 2 -#define SIGQUIT 3 -#define SIGILL 4 -#define SIGTRAP 5 -#define SIGABRT 6 -#define SIGIOT SIGABRT -#define SIGEMT 7 -#define SIGFPE 8 -#define SIGKILL 9 +/* This define is used against oid_t.id which is __u32 + * hence the implicit bit value instead of -1 + */ +#define US_PORT 0xFFFFFFFFU /* FIXME */ + + +#define SIGHUP 1 +#define SIGINT 2 +#define SIGQUIT 3 +#define SIGILL 4 +#define SIGTRAP 5 +#define SIGABRT 6 +#define SIGIOT SIGABRT +#define SIGEMT 7 +#define SIGFPE 8 +#define SIGKILL 9 #define SIGBUS 10 #define SIGSEGV 11 #define SIGSYS 12 @@ -63,14 +65,21 @@ #define SIG_DFL (-2) #define SIG_IGN (-3) -#define HOST_NAME_MAX 255 +#define HOST_NAME_MAX 255U -enum { ftRegular, ftPipe, ftFifo, ftInetSocket, ftUnixSocket, ftTty }; +enum { ftRegular, + ftPipe, + ftFifo, + ftInetSocket, + ftUnixSocket, + ftTty }; /* FIXME: share with posixsrv */ -enum { pxBufferedPipe, pxPipe, pxPTY }; +enum { pxBufferedPipe, + pxPipe, + pxPTY }; #define F_SEEKABLE(type) ((type) == ftRegular) @@ -89,7 +98,7 @@ typedef struct { typedef struct { open_file_t *file; - unsigned flags; + unsigned int flags; } fildes_t; @@ -116,13 +125,12 @@ typedef struct _process_info_t { /* SIOCGIFCONF ioctl special case: arg is structure with pointer */ struct ifconf { - int ifc_len; /* size of buffer */ - char *ifc_buf; /* buffer address */ + unsigned int ifc_len; /* size of buffer */ + char *ifc_buf; /* buffer address */ }; /* SIOADDRT and SIOCDELRT ioctls special case: arg is structure with pointer */ -struct rtentry -{ +struct rtentry { struct sockaddr rt_dst; struct sockaddr rt_gateway; struct sockaddr rt_genmask; @@ -147,13 +155,13 @@ extern int posix_newFile(process_info_t *p, int fd); extern int _posix_addOpenFile(process_info_t *p, open_file_t *f, unsigned int flags); -extern process_info_t *pinfo_find(unsigned int pid); +extern process_info_t *pinfo_find(int pid); extern void pinfo_put(process_info_t *p); -extern int inet_accept4(unsigned socket, struct sockaddr *address, socklen_t *address_len, int flags); +extern int inet_accept4(unsigned socket, struct sockaddr *address, socklen_t *address_len, unsigned int flags); extern int inet_bind(unsigned socket, const struct sockaddr *address, socklen_t address_len); @@ -174,16 +182,16 @@ extern int inet_getsockopt(unsigned socket, int level, int optname, void *optval extern int inet_listen(unsigned socket, int backlog); -extern ssize_t inet_recvfrom(unsigned socket, void *message, size_t length, int flags, struct sockaddr *src_addr, socklen_t *src_len); +extern ssize_t inet_recvfrom(unsigned socket, void *message, size_t length, unsigned int flags, struct sockaddr *src_addr, socklen_t *src_len); -extern ssize_t inet_sendto(unsigned socket, const void *message, size_t length, int flags, const struct sockaddr *dest_addr, socklen_t dest_len); +extern ssize_t inet_sendto(unsigned socket, const void *message, size_t length, unsigned int flags, const struct sockaddr *dest_addr, socklen_t dest_len); -extern ssize_t inet_recvmsg(unsigned socket, struct msghdr *msg, int flags); +extern ssize_t inet_recvmsg(unsigned socket, struct msghdr *msg, unsigned int flags); -extern ssize_t inet_sendmsg(unsigned socket, const struct msghdr *msg, int flags); +extern ssize_t inet_sendmsg(unsigned socket, const struct msghdr *msg, unsigned int flags); extern int inet_socket(int domain, int type, int protocol); @@ -201,7 +209,7 @@ extern int inet_setfl(unsigned socket, int flags); extern int inet_getfl(unsigned socket); -extern int unix_accept4(unsigned socket, struct sockaddr *address, socklen_t *address_len, int flags); +extern int unix_accept4(unsigned socket, struct sockaddr *address, socklen_t *address_len, unsigned int flags); extern int unix_bind(unsigned socket, const struct sockaddr *address, socklen_t address_len); @@ -222,16 +230,16 @@ extern int unix_getsockopt(unsigned socket, int level, int optname, void *optval extern int unix_listen(unsigned socket, int backlog); -extern ssize_t unix_recvfrom(unsigned socket, void *message, size_t length, int flags, struct sockaddr *src_addr, socklen_t *src_len); +extern ssize_t unix_recvfrom(unsigned socket, void *msg, size_t len, unsigned int flags, struct sockaddr *src_addr, socklen_t *src_len); -extern ssize_t unix_sendto(unsigned socket, const void *message, size_t length, int flags, const struct sockaddr *dest_addr, socklen_t dest_len); +extern ssize_t unix_sendto(unsigned socket, const void *msg, size_t len, unsigned int flags, const struct sockaddr *dest_addr, socklen_t dest_len); -extern ssize_t unix_recvmsg(unsigned socket, struct msghdr *msg, int flags); +extern ssize_t unix_recvmsg(unsigned socket, struct msghdr *msg, unsigned int flags); -extern ssize_t unix_sendmsg(unsigned socket, const struct msghdr *msg, int flags); +extern ssize_t unix_sendmsg(unsigned socket, const struct msghdr *msg, unsigned int flags); extern int unix_socket(int domain, int type, int protocol); @@ -249,7 +257,7 @@ extern int unix_unlink(unsigned socket); extern int unix_setsockopt(unsigned socket, int level, int optname, const void *optval, socklen_t optlen); -extern int unix_setfl(unsigned socket, int flags); +extern int unix_setfl(unsigned socket, unsigned int flags); extern int unix_getfl(unsigned socket); @@ -258,7 +266,7 @@ extern int unix_getfl(unsigned socket); extern int unix_close(unsigned socket); -extern int unix_poll(unsigned socket, short events); +extern int unix_poll(unsigned socket, unsigned short events); extern void unix_sockets_init(void); diff --git a/posix/sockdefs.h b/posix/sockdefs.h index 110fd6fc9..421d4e84c 100644 --- a/posix/sockdefs.h +++ b/posix/sockdefs.h @@ -16,8 +16,8 @@ #ifndef _SYS_SOCKDEFS_H_ #define _SYS_SOCKDEFS_H_ -#define SOCK_NONBLOCK 0x8000 -#define SOCK_CLOEXEC 0x4000 -#define SOCK_LARGEBUF 0x2000 +#define SOCK_NONBLOCK 0x8000U +#define SOCK_CLOEXEC 0x4000U +#define SOCK_LARGEBUF 0x2000U #endif diff --git a/posix/sockport.h b/posix/sockport.h index 81ecc9dea..00703b3bb 100644 --- a/posix/sockport.h +++ b/posix/sockport.h @@ -27,7 +27,7 @@ enum { sockmGetNameInfo, sockmGetAddrInfo, }; -enum { MAX_SOCKNAME_LEN = sizeof(((msg_t *)0)->o.raw) - 2 * sizeof(size_t) }; +enum { MAX_SOCKNAME_LEN = sizeof(((msg_t *)0)->o.raw) - 2U * sizeof(size_t) }; #define PATH_SOCKSRV "/dev/netsocket" @@ -46,7 +46,7 @@ typedef union sockport_msg_ { int optname; } opt; struct { - int flags; + unsigned flags; size_t addrlen; char addr[MAX_SOCKNAME_LEN]; } send; diff --git a/posix/unix.c b/posix/unix.c index 7d886eef1..961a8916c 100644 --- a/posix/unix.c +++ b/posix/unix.c @@ -29,13 +29,13 @@ #define US_DEF_BUFFER_SIZE SIZE_PAGE #define US_MIN_BUFFER_SIZE SIZE_PAGE -#define US_MAX_BUFFER_SIZE 65536 +#define US_MAX_BUFFER_SIZE 65536U -#define US_BOUND (1 << 0) -#define US_LISTENING (1 << 1) -#define US_ACCEPTING (1 << 2) -#define US_CONNECTING (1 << 3) -#define US_PEER_CLOSED (1 << 4) +#define US_BOUND (1U << 0) +#define US_LISTENING (1U << 1) +#define US_ACCEPTING (1U << 2) +#define US_CONNECTING (1U << 3) +#define US_PEER_CLOSED (1U << 4) typedef struct _unixsock_t { rbnode_t linkage; @@ -52,9 +52,9 @@ typedef struct _unixsock_t { size_t buffsz; fdpack_t *fdpacks; - char type; - char state; - char nonblock; + __u8 type; + __u8 state; + __u8 nonblock; spinlock_t spinlock; @@ -80,10 +80,19 @@ static struct { static int unixsock_cmp(rbnode_t *n1, rbnode_t *n2) { + unsigned id_diff; unixsock_t *r1 = lib_treeof(unixsock_t, linkage, n1); unixsock_t *r2 = lib_treeof(unixsock_t, linkage, n2); - return (r1->id - r2->id); + /* parasoft-suppress-next-line MISRAC2012-DIR_4_1 "Variable pass to lib_treeof will not be NULL, so lib_treeof will not be NULL either" */ + if (r1->id < r2->id) { + id_diff = r2->id - r1->id; + return -1 * (int)(id_diff); + } + else { + id_diff = r1->id - r2->id; + return (int)(id_diff); + } } @@ -94,8 +103,10 @@ static int unixsock_gapcmp(rbnode_t *n1, rbnode_t *n2) rbnode_t *child = NULL; int ret = 1; - if (r1->lmaxgap > 0 && r1->rmaxgap > 0) { + /* parasoft-begin-suppress MISRAC2012-DIR_4_1 "Variable pass to lib_treeof will not be NULL, so lib_treeof will not be NULL either" */ + if (r1->lmaxgap > 0U && r1->rmaxgap > 0U) { if (r2->id > r1->id) { + /* parasoft-end-suppress MISRAC2012-DIR_4_1 */ child = n1->right; ret = -1; } @@ -104,17 +115,21 @@ static int unixsock_gapcmp(rbnode_t *n1, rbnode_t *n2) ret = 1; } } - else if (r1->lmaxgap > 0) { + else if (r1->lmaxgap > 0U) { child = n1->left; ret = 1; } - else if (r1->rmaxgap > 0) { + else if (r1->rmaxgap > 0U) { child = n1->right; ret = -1; } + else { + /* No action required */ + } - if (child == NULL) + if (child == NULL) { return 0; + } return ret; } @@ -129,25 +144,29 @@ static void unixsock_augment(rbnode_t *node) if (node->left == NULL) { for (it = node; it->parent != NULL; it = it->parent) { p = lib_treeof(unixsock_t, linkage, it->parent); - if (it->parent->right == it) + if (it->parent->right == it) { break; + } } - n->lmaxgap = (n->id <= p->id) ? n->id : n->id - p->id - 1; + /* parasoft-suppress-next-line MISRAC2012-DIR_4_1 "Variable pass to lib_treeof will not be NULL, so lib_treeof will not be NULL either" */ + n->lmaxgap = (n->id <= p->id) ? n->id : n->id - p->id - 1U; } else { l = lib_treeof(unixsock_t, linkage, node->left); + /* parasoft-suppress-next-line MISRAC2012-DIR_4_1 "Variable pass to lib_treeof will not be NULL, so lib_treeof will not be NULL either" */ n->lmaxgap = max(l->lmaxgap, l->rmaxgap); } if (node->right == NULL) { for (it = node; it->parent != NULL; it = it->parent) { p = lib_treeof(unixsock_t, linkage, it->parent); - if (it->parent->left == it) + if (it->parent->left == it) { break; + } } - n->rmaxgap = (n->id >= p->id) ? (unsigned)-1 - n->id - 1 : p->id - n->id - 1; + n->rmaxgap = (n->id >= p->id) ? (unsigned)-1 - n->id - 1U : p->id - n->id - 1U; } else { r = lib_treeof(unixsock_t, linkage, node->right); @@ -158,10 +177,12 @@ static void unixsock_augment(rbnode_t *node) n = lib_treeof(unixsock_t, linkage, it); p = lib_treeof(unixsock_t, linkage, it->parent); - if (it->parent->left == it) + if (it->parent->left == it) { p->lmaxgap = max(n->lmaxgap, n->rmaxgap); - else + } + else { p->rmaxgap = max(n->lmaxgap, n->rmaxgap); + } } } @@ -171,36 +192,38 @@ static unixsock_t *unixsock_alloc(unsigned *id, int type, int nonblock) unixsock_t *r, t; *id = 0; - proc_lockSet(&unix_common.lock); + (void)proc_lockSet(&unix_common.lock); if (unix_common.tree.root != NULL) { t.id = 0; r = lib_treeof(unixsock_t, linkage, lib_rbFindEx(unix_common.tree.root, &t.linkage, unixsock_gapcmp)); if (r != NULL) { - if (r->lmaxgap > 0) - *id = r->id - 1; - else - *id = r->id + 1; + if (r->lmaxgap > 0U) { + *id = r->id - 1U; + } + else { + *id = r->id + 1U; + } } else { - proc_lockClear(&unix_common.lock); + (void)proc_lockClear(&unix_common.lock); return NULL; } } if ((r = vm_kmalloc(sizeof(unixsock_t))) == NULL) { - proc_lockClear(&unix_common.lock); + (void)proc_lockClear(&unix_common.lock); return NULL; } - proc_lockInit(&r->lock, &proc_lockAttrDefault, "unix.socket"); + (void)proc_lockInit(&r->lock, &proc_lockAttrDefault, "unix.socket"); r->id = *id; /* alloc new socket with 2 refs: one ref for the socket's presence in the tree, second * one for handling by the caller before returning the socket to the user (to protect * against accidental socket removal by someone else in the meantime) */ r->refs = 2; - r->type = type; - r->nonblock = nonblock; + r->type = (u8)type; + r->nonblock = (u8)nonblock; r->buffsz = US_DEF_BUFFER_SIZE; r->fdpacks = NULL; r->remote = NULL; @@ -211,11 +234,11 @@ static unixsock_t *unixsock_alloc(unsigned *id, int type, int nonblock) r->state = 0; r->next = NULL; r->prev = NULL; - _cbuffer_init(&r->buffer, NULL, 0); + (void)_cbuffer_init(&r->buffer, NULL, 0); hal_spinlockCreate(&r->spinlock, "unix socket"); - lib_rbInsert(&unix_common.tree, &r->linkage); - proc_lockClear(&unix_common.lock); + (void)lib_rbInsert(&unix_common.tree, &r->linkage); + (void)proc_lockClear(&unix_common.lock); return r; } @@ -227,10 +250,11 @@ static unixsock_t *unixsock_get(unsigned id) t.id = id; - proc_lockSet(&unix_common.lock); - if ((r = lib_treeof(unixsock_t, linkage, lib_rbFind(&unix_common.tree, &t.linkage))) != NULL) + (void)proc_lockSet(&unix_common.lock); + if ((r = lib_treeof(unixsock_t, linkage, lib_rbFind(&unix_common.tree, &t.linkage))) != NULL) { r->refs++; - proc_lockClear(&unix_common.lock); + } + (void)proc_lockClear(&unix_common.lock); return r; } @@ -240,12 +264,12 @@ static unixsock_t *unixsock_get_remote(unixsock_t *s) { unixsock_t *r; - proc_lockSet(&unix_common.lock); + (void)proc_lockSet(&unix_common.lock); r = s->remote; if (r != NULL) { r->refs++; } - proc_lockClear(&unix_common.lock); + (void)proc_lockClear(&unix_common.lock); return r; } @@ -255,7 +279,7 @@ static void unixsock_put(unixsock_t *s) { unixsock_t *r; - proc_lockSet(&unix_common.lock); + (void)proc_lockSet(&unix_common.lock); s->refs--; if (s->refs <= 0) { lib_rbRemove(&unix_common.tree, &s->linkage); @@ -284,18 +308,20 @@ static void unixsock_put(unixsock_t *s) /* FIXME: handle connecting socket */ } - proc_lockClear(&unix_common.lock); + (void)proc_lockClear(&unix_common.lock); - proc_lockDone(&s->lock); + (void)proc_lockDone(&s->lock); hal_spinlockDestroy(&s->spinlock); - if (s->buffer.data) + if (s->buffer.data != NULL) { vm_kfree(s->buffer.data); - if (s->fdpacks) - fdpass_discard(&s->fdpacks); + } + if (s->fdpacks != NULL) { + (void)fdpass_discard(&s->fdpacks); + } vm_kfree(s); return; } - proc_lockClear(&unix_common.lock); + (void)proc_lockClear(&unix_common.lock); } @@ -305,14 +331,18 @@ int unix_socket(int domain, int type, int protocol) unsigned id; int nonblock; - nonblock = (type & SOCK_NONBLOCK) != 0; - type &= ~(SOCK_NONBLOCK | SOCK_CLOEXEC); + nonblock = (((unsigned int)type & SOCK_NONBLOCK) != 0U) ? 1 : 0; + + /* parasoft-suppress-next-line MISRAC2012-RULE_10_1 "Result type must be int" */ + type &= (int)(unsigned int)(~(SOCK_NONBLOCK | SOCK_CLOEXEC)); - if (type != SOCK_STREAM && type != SOCK_DGRAM && type != SOCK_SEQPACKET) + if ((unsigned int)type != SOCK_STREAM && (unsigned int)type != SOCK_DGRAM && (unsigned int)type != SOCK_SEQPACKET) { return -EPROTOTYPE; + } - if (protocol != PF_UNSPEC) + if (protocol != PF_UNSPEC) { return -EPROTONOSUPPORT; + } s = unixsock_alloc(&id, type, nonblock); if (s == NULL) { @@ -320,7 +350,7 @@ int unix_socket(int domain, int type, int protocol) } unixsock_put(s); - return id; + return (int)id; } @@ -331,14 +361,17 @@ int unix_socketpair(int domain, int type, int protocol, int sv[2]) void *v[2]; int nonblock; - nonblock = (type & SOCK_NONBLOCK) != 0; - type &= ~(SOCK_NONBLOCK | SOCK_CLOEXEC); + nonblock = (((unsigned int)type & SOCK_NONBLOCK) != 0U) ? 1 : 0; + /* parasoft-suppress-next-line MISRAC2012-RULE_10_1 "Result type must be int" */ + type &= (int)(unsigned int)(~(SOCK_NONBLOCK | SOCK_CLOEXEC)); - if (type != SOCK_STREAM && type != SOCK_DGRAM && type != SOCK_SEQPACKET) + if ((unsigned int)type != SOCK_STREAM && (unsigned int)type != SOCK_DGRAM && (unsigned int)type != SOCK_SEQPACKET) { return -EPROTOTYPE; + } - if (protocol != PF_UNSPEC) + if (protocol != PF_UNSPEC) { return -EPROTONOSUPPORT; + } s[0] = unixsock_alloc(&id[0], type, nonblock); if (s[0] == NULL) { @@ -369,19 +402,20 @@ int unix_socketpair(int domain, int type, int protocol, int sv[2]) return -ENOMEM; } - _cbuffer_init(&s[0]->buffer, v[0], s[0]->buffsz); - _cbuffer_init(&s[1]->buffer, v[1], s[1]->buffsz); + (void)_cbuffer_init(&s[0]->buffer, v[0], s[0]->buffsz); + (void)_cbuffer_init(&s[1]->buffer, v[1], s[1]->buffsz); s[0]->remote = s[1]; s[1]->remote = s[0]; - if (type == SOCK_DGRAM) { + if (type == (int)SOCK_DGRAM) { LIST_ADD(&s[0]->connected, s[1]); LIST_ADD(&s[1]->connected, s[0]); } - sv[0] = id[0]; - sv[1] = id[1]; + /* TODO: Consider checking value of id before cast to int */ + sv[0] = (int)id[0]; + sv[1] = (int)id[1]; unixsock_put(s[1]); unixsock_put(s[0]); @@ -390,7 +424,7 @@ int unix_socketpair(int domain, int type, int protocol, int sv[2]) } -int unix_accept4(unsigned socket, struct sockaddr *address, socklen_t *address_len, int flags) +int unix_accept4(unsigned socket, struct sockaddr *address, socklen_t *address_len, unsigned flags) { unixsock_t *s, *r, *new; int err; @@ -399,10 +433,11 @@ int unix_accept4(unsigned socket, struct sockaddr *address, socklen_t *address_l spinlock_ctx_t sc; int nonblock; - if ((s = unixsock_get(socket)) == NULL) + if ((s = unixsock_get(socket)) == NULL) { return -ENOTSOCK; + } - nonblock = (flags & SOCK_NONBLOCK) != 0; + nonblock = ((flags & SOCK_NONBLOCK) != 0U) ? 1 : 0; do { if (s->type != SOCK_STREAM && s->type != SOCK_SEQPACKET) { @@ -410,17 +445,17 @@ int unix_accept4(unsigned socket, struct sockaddr *address, socklen_t *address_l break; } - if (!(s->state & US_LISTENING)) { + if ((s->state & US_LISTENING) == 0U) { err = -EINVAL; break; } - if (s->nonblock != 0 && s->connecting == NULL) { + if (s->nonblock != 0U && s->connecting == NULL) { err = -EWOULDBLOCK; break; } - new = unixsock_alloc(&newid, s->type, nonblock); + new = unixsock_alloc(&newid, (int)s->type, nonblock); if (new == NULL) { err = -ENOMEM; break; @@ -433,17 +468,18 @@ int unix_accept4(unsigned socket, struct sockaddr *address, socklen_t *address_l break; } - _cbuffer_init(&new->buffer, v, new->buffsz); + (void)_cbuffer_init(&new->buffer, v, new->buffsz); hal_spinlockSet(&s->spinlock, &sc); s->state |= US_ACCEPTING; while (s->connecting == NULL) { - proc_threadWait(&s->queue, &s->spinlock, 0, &sc); + (void)proc_threadWait(&s->queue, &s->spinlock, 0, &sc); } r = s->connecting; LIST_REMOVE(&s->connecting, r); + s->state &= ~US_ACCEPTING; hal_spinlockClear(&s->spinlock, &sc); @@ -455,10 +491,10 @@ int unix_accept4(unsigned socket, struct sockaddr *address, socklen_t *address_l r->remote = new; new->remote = r; - proc_threadWakeup(&r->queue); + (void)proc_threadWakeup(&r->queue); hal_spinlockClear(&r->spinlock, &sc); - err = new->id; + err = (int)new->id; unixsock_put(new); } while (0); @@ -469,22 +505,24 @@ int unix_accept4(unsigned socket, struct sockaddr *address, socklen_t *address_l int unix_bind(unsigned socket, const struct sockaddr *address, socklen_t address_len) { - char *path, *name, *dir; + char *path, *name; + const char *dir; int err; oid_t odir, dev; unixsock_t *s; void *v = NULL; - if ((s = unixsock_get(socket)) == NULL) + if ((s = unixsock_get(socket)) == NULL) { return -ENOTSOCK; + } do { - if (s->state & US_BOUND) { + if ((s->state & US_BOUND) != 0U) { err = -EINVAL; break; } - if (address->sa_family != AF_UNIX) { + if (address->sa_family != (sa_family_t)AF_UNIX) { err = -EINVAL; break; } @@ -509,16 +547,16 @@ int unix_bind(unsigned socket, const struct sockaddr *address, socklen_t address break; } - _cbuffer_init(&s->buffer, v, s->buffsz); + (void)_cbuffer_init(&s->buffer, v, s->buffsz); } dev.port = US_PORT; dev.id = socket; err = proc_create(odir.port, 2 /* otDev */, S_IFSOCK, dev, odir, name, &dev); - if (err) { + if (err != 0) { if (s->type == SOCK_DGRAM) { - _cbuffer_init(&s->buffer, NULL, 0); + (void)_cbuffer_init(&s->buffer, NULL, 0); vm_kfree(v); } break; @@ -541,11 +579,12 @@ int unix_listen(unsigned socket, int backlog) unixsock_t *s; int err; - if ((s = unixsock_get(socket)) == NULL) + if ((s = unixsock_get(socket)) == NULL) { return -ENOTSOCK; + } do { - if (s->state & US_LISTENING) { + if ((s->state & US_LISTENING) != 0U) { err = -EADDRINUSE; break; } @@ -573,21 +612,22 @@ int unix_connect(unsigned socket, const struct sockaddr *address, socklen_t addr void *v; spinlock_ctx_t sc; - if ((s = unixsock_get(socket)) == NULL) + if ((s = unixsock_get(socket)) == NULL) { return -ENOTSOCK; + } do { - if ((s->state & US_LISTENING) != 0) { + if ((s->state & US_LISTENING) != 0U) { err = -EADDRINUSE; break; } - if ((s->state & US_CONNECTING) != 0) { + if ((s->state & US_CONNECTING) != 0U) { err = -EALREADY; break; } - if (s->remote != NULL || (s->state & US_PEER_CLOSED) != 0) { + if (s->remote != NULL || (s->state & US_PEER_CLOSED) != 0U) { err = -EISCONN; break; } @@ -597,7 +637,7 @@ int unix_connect(unsigned socket, const struct sockaddr *address, socklen_t addr break; } - if (address->sa_family != AF_UNIX) { + if (address->sa_family != (sa_family_t)AF_UNIX) { err = -EINVAL; break; } @@ -640,7 +680,7 @@ int unix_connect(unsigned socket, const struct sockaddr *address, socklen_t addr break; } - if ((r->state & US_LISTENING) == 0) { + if ((r->state & US_LISTENING) == 0U) { err = -ECONNREFUSED; break; } @@ -650,26 +690,26 @@ int unix_connect(unsigned socket, const struct sockaddr *address, socklen_t addr break; } - _cbuffer_init(&s->buffer, v, s->buffsz); + (void)_cbuffer_init(&s->buffer, v, s->buffsz); /* FIXME: handle remote socket removal */ hal_spinlockSet(&r->spinlock, &sc); LIST_ADD(&r->connecting, s); - proc_threadWakeup(&r->queue); + (void)proc_threadWakeup(&r->queue); hal_spinlockClear(&r->spinlock, &sc); hal_spinlockSet(&s->spinlock, &sc); s->state |= US_CONNECTING; - if (s->nonblock != 0 && s->remote == NULL) { + if (s->nonblock != 0U && s->remote == NULL) { hal_spinlockClear(&s->spinlock, &sc); err = -EINPROGRESS; break; } while (s->remote == NULL) { - proc_threadWait(&s->queue, &s->spinlock, 0, &sc); + (void)proc_threadWait(&s->queue, &s->spinlock, 0, &sc); } hal_spinlockClear(&s->spinlock, &sc); @@ -702,9 +742,9 @@ int unix_getsockopt(unsigned socket, int level, int optname, void *optval, sockl unixsock_t *s; int err = EOK; - if ((s = unixsock_get(socket)) == NULL) + if ((s = unixsock_get(socket)) == NULL) { return -ENOTSOCK; - + } do { if (level != SOL_SOCKET) { err = -EINVAL; @@ -714,7 +754,7 @@ int unix_getsockopt(unsigned socket, int level, int optname, void *optval, sockl switch (optname) { case SO_RCVBUF: if (optval != NULL && *optlen >= sizeof(int)) { - *((int *)optval) = s->buffsz; + *((unsigned int *)optval) = s->buffsz; // zamiast (int *) można (unsigned int *)? *optlen = sizeof(int); } else { @@ -722,7 +762,7 @@ int unix_getsockopt(unsigned socket, int level, int optname, void *optval, sockl } break; case SO_ERROR: - if (s->remote == NULL && s->nonblock != 0 && (s->state & US_CONNECTING) != 0) { + if (s->remote == NULL && s->nonblock != 0U && (s->state & US_CONNECTING) != 0U) { /* non-blocking connect() in progress, not connected yet */ err = -EINPROGRESS; } @@ -740,21 +780,22 @@ int unix_getsockopt(unsigned socket, int level, int optname, void *optval, sockl } -static ssize_t recv(unsigned socket, void *buf, size_t len, int flags, struct sockaddr *src_addr, socklen_t *src_len, void *control, socklen_t *controllen) +static ssize_t recv(unsigned socket, void *buf, size_t len, unsigned flags, struct sockaddr *src_addr, socklen_t *src_len, void *control, socklen_t *controllen) { unixsock_t *s; size_t rlen = 0; - int err; + ssize_t err; spinlock_ctx_t sc; - int peek; + unsigned peek; - peek = (flags & MSG_PEEK) != 0; + peek = ((flags & MSG_PEEK) != 0U) ? 1U : 0U; - if ((s = unixsock_get(socket)) == NULL) + if ((s = unixsock_get(socket)) == NULL) { return -ENOTSOCK; + } do { - if (s->type != SOCK_DGRAM && s->remote == NULL && (s->state & US_PEER_CLOSED) == 0) { + if (s->type != SOCK_DGRAM && s->remote == NULL && (s->state & US_PEER_CLOSED) == 0U) { err = -ENOTCONN; break; } @@ -762,50 +803,58 @@ static ssize_t recv(unsigned socket, void *buf, size_t len, int flags, struct so err = 0; for (;;) { - proc_lockSet(&s->lock); + (void)proc_lockSet(&s->lock); if (s->type == SOCK_STREAM) { - if (peek != 0) { - err = _cbuffer_peek(&s->buffer, buf, len); + if (peek != 0U) { + err = (int)_cbuffer_peek(&s->buffer, buf, len); } else { - err = _cbuffer_read(&s->buffer, buf, len); + err = (int)_cbuffer_read(&s->buffer, buf, len); } } - else if (_cbuffer_avail(&s->buffer) > 0) { /* SOCK_DGRAM or SOCK_SEQPACKET */ + else if (_cbuffer_avail(&s->buffer) > 0U) { /* SOCK_DGRAM or SOCK_SEQPACKET */ /* TODO: handle MSG_PEEK */ - _cbuffer_read(&s->buffer, &rlen, sizeof(rlen)); - _cbuffer_read(&s->buffer, buf, err = min(len, rlen)); + (void)_cbuffer_read(&s->buffer, &rlen, sizeof(rlen)); + (void)_cbuffer_read(&s->buffer, buf, min(len, rlen)); + err = (int)min(len, rlen); - if (len < rlen) - _cbuffer_discard(&s->buffer, rlen - len); + if (len < rlen) { + (void)_cbuffer_discard(&s->buffer, rlen - len); + } + } + else { + /* No action required */ } /* TODO: peek control data */ - if (peek == 0) { - if (err > 0 && control && controllen && *controllen > 0) { - fdpass_unpack(&s->fdpacks, control, controllen); + if (peek == 0U) { + if (err > 0 && control != NULL && controllen != NULL && *controllen > 0U) { + (void)fdpass_unpack(&s->fdpacks, control, controllen); } } - proc_lockClear(&s->lock); + (void)proc_lockClear(&s->lock); if (err > 0) { - if (peek == 0) { + if (peek == 0U) { hal_spinlockSet(&s->spinlock, &sc); - proc_threadWakeup(&s->writeq); + (void)proc_threadWakeup(&s->writeq); hal_spinlockClear(&s->spinlock, &sc); } break; } - else if (s->type != SOCK_DGRAM && (s->state & US_PEER_CLOSED)) { + else if (s->type != SOCK_DGRAM && (s->state & US_PEER_CLOSED) != 0U) { err = 0; /* EOS */ break; } - else if (s->nonblock || (flags & MSG_DONTWAIT)) { + else if (s->nonblock != 0U || (flags & MSG_DONTWAIT) != 0U) { err = -EWOULDBLOCK; break; } + else { + /* No action required */ + } hal_spinlockSet(&s->spinlock, &sc); - proc_threadWait(&s->queue, &s->spinlock, 0, &sc); + (void)proc_threadWait(&s->queue, &s->spinlock, 0, &sc); hal_spinlockClear(&s->spinlock, &sc); } } while (0); @@ -816,10 +865,10 @@ static ssize_t recv(unsigned socket, void *buf, size_t len, int flags, struct so /* TODO: a connected SOCK_DGRAM socket should only receive data from its peer. */ -static ssize_t send(unsigned socket, const void *buf, size_t len, int flags, const struct sockaddr *dest_addr, socklen_t dest_len, fdpack_t *fdpack) +static ssize_t send(unsigned socket, const void *buf, size_t len, unsigned flags, const struct sockaddr *dest_addr, socklen_t dest_len, fdpack_t *fdpack) { unixsock_t *s, *r; - int err; + ssize_t err; oid_t oid; spinlock_ctx_t sc; @@ -830,8 +879,8 @@ static ssize_t send(unsigned socket, const void *buf, size_t len, int flags, con do { if (s->type == SOCK_DGRAM) { - if (dest_addr && dest_len != 0) { - if (dest_addr->sa_family != AF_UNIX) { + if (dest_addr != NULL && dest_len != 0U) { + if (dest_addr->sa_family != (sa_family_t)AF_UNIX) { err = -EINVAL; break; } @@ -860,7 +909,7 @@ static ssize_t send(unsigned socket, const void *buf, size_t len, int flags, con } } else { - if (s->state & US_PEER_CLOSED) { + if ((s->state & US_PEER_CLOSED) != 0U) { hal_spinlockSet(&s->spinlock, &sc); s->state &= ~US_PEER_CLOSED; hal_spinlockClear(&s->spinlock, &sc); @@ -876,13 +925,13 @@ static ssize_t send(unsigned socket, const void *buf, size_t len, int flags, con } } else { - if (dest_addr || dest_len != 0) { + if (dest_addr != NULL || dest_len != 0U) { err = -EISCONN; break; } - if (s->state & US_PEER_CLOSED) { - posix_tkill(process_getPid(proc_current()->process), 0, SIGPIPE); + if ((s->state & US_PEER_CLOSED) != 0U) { + (void)posix_tkill(process_getPid(proc_current()->process), 0, SIGPIPE); err = -EPIPE; break; } @@ -892,44 +941,56 @@ static ssize_t send(unsigned socket, const void *buf, size_t len, int flags, con err = -ENOTCONN; break; } + else { + /* No action required */ + } } err = 0; - if (len > 0) { + if (len > 0U) { for (;;) { - proc_lockSet(&r->lock); + (void)proc_lockSet(&r->lock); if (s->type == SOCK_STREAM) { - err = _cbuffer_write(&r->buffer, buf, len); + err = (int)_cbuffer_write(&r->buffer, buf, len); } else if (_cbuffer_free(&r->buffer) >= len + sizeof(len)) { /* SOCK_DGRAM or SOCK_SEQPACKET */ - _cbuffer_write(&r->buffer, &len, sizeof(len)); - _cbuffer_write(&r->buffer, buf, err = len); + (void)_cbuffer_write(&r->buffer, &len, sizeof(len)); + (void)_cbuffer_write(&r->buffer, buf, len); + err = (int)len; } else if (r->buffsz < len + sizeof(len)) { /* SOCK_DGRAM or SOCK_SEQPACKET */ err = -EMSGSIZE; - proc_lockClear(&r->lock); + (void)proc_lockClear(&r->lock); break; } + else { + /* No action required */ + } - if (err > 0 && fdpack) + if (err > 0 && fdpack != NULL) { LIST_ADD(&r->fdpacks, fdpack); - proc_lockClear(&r->lock); + } + + (void)proc_lockClear(&r->lock); if (err > 0) { hal_spinlockSet(&r->spinlock, &sc); - proc_threadWakeup(&r->queue); + (void)proc_threadWakeup(&r->queue); hal_spinlockClear(&r->spinlock, &sc); break; } - else if (s->nonblock || (flags & MSG_DONTWAIT)) { + else if (s->nonblock != 0U || (flags & MSG_DONTWAIT) != 0U) { err = -EWOULDBLOCK; break; } + else { + /* No action required */ + } hal_spinlockSet(&r->spinlock, &sc); - proc_threadWait(&r->writeq, &r->spinlock, 0, &sc); + (void)proc_threadWait(&r->writeq, &r->spinlock, 0, &sc); hal_spinlockClear(&r->spinlock, &sc); } } @@ -942,27 +1003,28 @@ static ssize_t send(unsigned socket, const void *buf, size_t len, int flags, con } -ssize_t unix_recvfrom(unsigned socket, void *msg, size_t len, int flags, struct sockaddr *src_addr, socklen_t *src_len) +ssize_t unix_recvfrom(unsigned socket, void *msg, size_t len, unsigned flags, struct sockaddr *src_addr, socklen_t *src_len) { return recv(socket, msg, len, flags, src_addr, src_len, NULL, NULL); } -ssize_t unix_sendto(unsigned socket, const void *msg, size_t len, int flags, const struct sockaddr *dest_addr, socklen_t dest_len) +ssize_t unix_sendto(unsigned socket, const void *msg, size_t len, unsigned flags, const struct sockaddr *dest_addr, socklen_t dest_len) { return send(socket, msg, len, flags, dest_addr, dest_len, NULL); } -ssize_t unix_recvmsg(unsigned socket, struct msghdr *msg, int flags) +ssize_t unix_recvmsg(unsigned socket, struct msghdr *msg, unsigned flags) { ssize_t err; void *buf = NULL; size_t len = 0; /* multiple buffers are not supported */ - if (msg->msg_iovlen > 1) + if (msg->msg_iovlen > 1) { return -EINVAL; + } if (msg->msg_iovlen > 0) { buf = msg->msg_iov->iov_base; @@ -980,7 +1042,7 @@ ssize_t unix_recvmsg(unsigned socket, struct msghdr *msg, int flags) } -ssize_t unix_sendmsg(unsigned socket, const struct msghdr *msg, int flags) +ssize_t unix_sendmsg(unsigned socket, const struct msghdr *msg, unsigned flags) { ssize_t err; fdpack_t *fdpack = NULL; @@ -988,12 +1050,14 @@ ssize_t unix_sendmsg(unsigned socket, const struct msghdr *msg, int flags) size_t len = 0; /* multiple buffers are not supported */ - if (msg->msg_iovlen > 1) + if (msg->msg_iovlen > 1) { return -EINVAL; + } - if (msg->msg_controllen > 0) { - if ((err = fdpass_pack(&fdpack, msg->msg_control, msg->msg_controllen)) < 0) + if (msg->msg_controllen > 0U) { + if ((err = fdpass_pack(&fdpack, msg->msg_control, msg->msg_controllen)) < 0) { return err; + } } if (msg->msg_iovlen > 0) { @@ -1004,9 +1068,9 @@ ssize_t unix_sendmsg(unsigned socket, const struct msghdr *msg, int flags) err = send(socket, buf, len, flags, msg->msg_name, msg->msg_namelen, fdpack); /* file descriptors are passed only when some bytes have been sent */ - if (fdpack && err <= 0) - fdpass_discard(&fdpack); - + if (fdpack != NULL && err <= 0) { + (void)fdpass_discard(&fdpack); + } return err; } @@ -1016,8 +1080,9 @@ int unix_shutdown(unsigned socket, int how) { unixsock_t *s; - if ((s = unixsock_get(socket)) == NULL) + if ((s = unixsock_get(socket)) == NULL) { return -ENOTSOCK; + } unixsock_put(s); unixsock_put(s); @@ -1026,7 +1091,7 @@ int unix_shutdown(unsigned socket, int how) /* TODO: copy data from old buffer */ -static int unix_bufferSetSize(unixsock_t *s, int sz) +static int unix_bufferSetSize(unixsock_t *s, const size_t sz) { void *v[2] = { NULL, NULL }; @@ -1034,22 +1099,22 @@ static int unix_bufferSetSize(unixsock_t *s, int sz) return -EINVAL; } - proc_lockSet(&s->lock); + (void)proc_lockSet(&s->lock); if (s->buffer.data != NULL) { v[0] = vm_kmalloc(sz); if (v[0] == NULL) { - proc_lockClear(&s->lock); + (void)proc_lockClear(&s->lock); return -ENOMEM; } v[1] = s->buffer.data; - _cbuffer_init(&s->buffer, v[0], sz); + (void)_cbuffer_init(&s->buffer, v[0], sz); } s->buffsz = sz; - proc_lockClear(&s->lock); + (void)proc_lockClear(&s->lock); if (v[1] != NULL) { vm_kfree(v[1]); @@ -1063,8 +1128,9 @@ int unix_setsockopt(unsigned socket, int level, int optname, const void *optval, unixsock_t *s; int err; - if ((s = unixsock_get(socket)) == NULL) + if ((s = unixsock_get(socket)) == NULL) { return -ENOTSOCK; + } do { if (level != SOL_SOCKET) { @@ -1075,7 +1141,7 @@ int unix_setsockopt(unsigned socket, int level, int optname, const void *optval, switch (optname) { case SO_RCVBUF: if (optval != NULL && optlen == sizeof(int)) { - err = unix_bufferSetSize(s, *((int *)optval)); + err = unix_bufferSetSize(s, *((const size_t *)optval)); } else { err = -EINVAL; @@ -1093,14 +1159,15 @@ int unix_setsockopt(unsigned socket, int level, int optname, const void *optval, } -int unix_setfl(unsigned socket, int flags) +int unix_setfl(unsigned socket, unsigned flags) { unixsock_t *s; - if ((s = unixsock_get(socket)) == NULL) + if ((s = unixsock_get(socket)) == NULL) { return -ENOTSOCK; + } - s->nonblock = (flags & O_NONBLOCK) != 0; + s->nonblock = ((flags & O_NONBLOCK) != 0U) ? 1U : 0U; unixsock_put(s); return 0; @@ -1110,18 +1177,19 @@ int unix_setfl(unsigned socket, int flags) int unix_getfl(unsigned socket) { unixsock_t *s; - int flags; + unsigned flags; - if ((s = unixsock_get(socket)) == NULL) + if ((s = unixsock_get(socket)) == NULL) { return -ENOTSOCK; + } flags = O_RDWR; - if (s->nonblock) { + if (s->nonblock != 0U) { flags |= O_NONBLOCK; } unixsock_put(s); - return flags; + return (int)flags; } @@ -1136,8 +1204,9 @@ int unix_close(unsigned socket) { unixsock_t *s; - if ((s = unixsock_get(socket)) == NULL) + if ((s = unixsock_get(socket)) == NULL) { return -ENOTSOCK; + } unixsock_put(s); unixsock_put(s); @@ -1145,38 +1214,38 @@ int unix_close(unsigned socket) } -int unix_poll(unsigned socket, short events) +int unix_poll(unsigned socket, unsigned short events) { unixsock_t *s, *r; - int err = 0; + unsigned err = 0; if ((s = unixsock_get(socket)) == NULL) { err = POLLNVAL; } else { - if (events & (POLLIN | POLLRDNORM | POLLRDBAND)) { - proc_lockSet(&s->lock); - if (_cbuffer_avail(&s->buffer) > 0 || (s->connecting != NULL && (s->state & US_LISTENING) != 0)) { - err |= events & (POLLIN | POLLRDNORM | POLLRDBAND); + if ((events & (POLLIN | POLLRDNORM | POLLRDBAND)) != 0U) { + (void)proc_lockSet(&s->lock); + if (_cbuffer_avail(&s->buffer) > 0U || (s->connecting != NULL && (s->state & US_LISTENING) != 0U)) { + err |= (unsigned int)events & (POLLIN | POLLRDNORM | POLLRDBAND); } - proc_lockClear(&s->lock); + (void)proc_lockClear(&s->lock); } - if (events & (POLLOUT | POLLWRNORM | POLLWRBAND)) { + if ((events & (POLLOUT | POLLWRNORM | POLLWRBAND)) != 0U) { r = unixsock_get_remote(s); if (r != NULL) { - proc_lockSet(&r->lock); + (void)proc_lockSet(&r->lock); if (r->type == SOCK_STREAM) { - if (_cbuffer_free(&r->buffer) > 0) { - err |= events & (POLLOUT | POLLWRNORM | POLLWRBAND); + if (_cbuffer_free(&r->buffer) > 0U) { + err |= (unsigned int)events & (POLLOUT | POLLWRNORM | POLLWRBAND); } } else { if (_cbuffer_free(&r->buffer) > sizeof(size_t)) { /* SOCK_DGRAM or SOCK_SEQPACKET */ - err |= events & (POLLOUT | POLLWRNORM | POLLWRBAND); + err |= (unsigned int)events & (POLLOUT | POLLWRNORM | POLLWRBAND); } } - proc_lockClear(&r->lock); + (void)proc_lockClear(&r->lock); unixsock_put(r); } else { @@ -1187,12 +1256,12 @@ int unix_poll(unsigned socket, short events) unixsock_put(s); } - return err; + return (int)err; } void unix_sockets_init(void) { lib_rbInit(&unix_common.tree, unixsock_cmp, unixsock_augment); - proc_lockInit(&unix_common.lock, &proc_lockAttrDefault, "unix.common"); + (void)proc_lockInit(&unix_common.lock, &proc_lockAttrDefault, "unix.common"); } diff --git a/proc/cond.c b/proc/cond.c index 1ddc8ede8..e384f691d 100644 --- a/proc/cond.c +++ b/proc/cond.c @@ -27,7 +27,7 @@ cond_t *cond_get(int c) thread_t *t = proc_current(); resource_t *r = resource_get(t->process, c); LIB_ASSERT((r == NULL) || (r->type == rtCond), "process: %s, pid: %d, tid: %d, handle: %d, resource type mismatch", - t->process->path, process_getPid(t->process), proc_getTid(t), c); + t->process->path, process_getPid(t->process), proc_getTid(t), c); return ((r != NULL) && (r->type == rtCond)) ? r->payload.cond : NULL; } @@ -35,15 +35,15 @@ cond_t *cond_get(int c) void cond_put(cond_t *cond) { thread_t *t = proc_current(); - int rem; + unsigned int rem; LIB_ASSERT(cond != NULL, "process: %s, pid: %d, tid: %d, cond == NULL", - t->process->path, process_getPid(t->process), proc_getTid(t)); + t->process->path, process_getPid(t->process), proc_getTid(t)); rem = resource_put(t->process, &cond->resource); LIB_ASSERT(rem >= 0, "process: %s, pid: %d, tid: %d, refcnt below zero", - t->process->path, process_getPid(t->process), proc_getTid(t)); - if (rem <= 0) { + t->process->path, process_getPid(t->process), proc_getTid(t)); + if (rem <= 0U) { proc_threadBroadcastYield(&cond->queue); vm_kfree(cond); } diff --git a/proc/elf.h b/proc/elf.h index 55382d1b3..952796a59 100644 --- a/proc/elf.h +++ b/proc/elf.h @@ -37,7 +37,7 @@ typedef u64 Elf64_Xword; #define SHT_SYMTAB 2 #define SHT_STRTAB 3 -#define SHT_NOBITS 8 +#define SHT_NOBITS 8U #define SHT_REL 9 #define SHT_DYNSYM 11 #define SHT_LOPROC 0x70000000 @@ -48,16 +48,16 @@ typedef u64 Elf64_Xword; #define STT_LOPROC 13 #define STT_HIPROC 15 -#define PT_LOAD 1 +#define PT_LOAD 1U #define PT_DYNAMIC 2 #define PT_INTERP 3 -#define PT_GNU_STACK 0x6474e551 -#define PT_LOPROC 0x70000000 -#define PT_HIPROC 0x7fffffff +#define PT_GNU_STACK 0x6474e551UL +#define PT_LOPROC 0x70000000UL +#define PT_HIPROC 0x7fffffffUL -#define PF_X 0x1 -#define PF_W 0x2 -#define PF_R 0x4 +#define PF_X 0x1U +#define PF_W 0x2U +#define PF_R 0x4U #pragma pack(push, 1) @@ -176,7 +176,7 @@ typedef struct { #define ELF32_R_SYM(info) ((info)>>8) -#define ELF32_R_TYPE(info) ((unsigned char)(info)) +#define ELF32_R_TYPE(info) ((int)(info)) #define ELF32_R_INFO(sym, type) (((sym)<<8)+(unsigned char)(type)) diff --git a/proc/lock.h b/proc/lock.h index ac4c53f02..e35c8463b 100644 --- a/proc/lock.h +++ b/proc/lock.h @@ -37,7 +37,7 @@ extern const struct lockAttr proc_lockAttrDefault; extern int proc_lockSet(lock_t *lock); -extern int proc_lockSet2(lock_t *lock1, lock_t *lock2); +extern int proc_lockSet2(lock_t *l1, lock_t *l2); extern int proc_lockTry(lock_t *lock); diff --git a/proc/msg-nommu.c b/proc/msg-nommu.c index 76047121e..2c861513d 100644 --- a/proc/msg-nommu.c +++ b/proc/msg-nommu.c @@ -19,10 +19,13 @@ #include "vm/vm.h" -enum { msg_rejected = -1, msg_waiting = 0, msg_received, msg_responded }; +enum { msg_rejected = -1, + msg_waiting = 0, + msg_received, + msg_responded }; -struct { +static struct { vm_map_t *kmap; vm_object_t *kernel; } msg_common; @@ -35,6 +38,7 @@ int proc_send(u32 port, msg_t *msg) kmsg_t kmsg; thread_t *sender; spinlock_ctx_t sc; + int state_tmp; p = proc_portGet(port); if (p == NULL) { @@ -53,17 +57,20 @@ int proc_send(u32 port, msg_t *msg) hal_spinlockSet(&p->spinlock, &sc); - if (p->closed) { + if (p->closed != 0) { err = -EINVAL; } else { LIST_ADD(&p->kmessages, &kmsg); - proc_threadWakeup(&p->threads); + (void)proc_threadWakeup(&p->threads); - while ((kmsg.state != msg_responded) && (kmsg.state != msg_rejected)) { + /* TODO: If any test fails, revert this change and suppress MISRA Rule 13.5 */ + state_tmp = kmsg.state; + while ((state_tmp != msg_responded) && (state_tmp != msg_rejected)) { err = proc_threadWaitInterruptible(&kmsg.threads, &p->spinlock, 0, &sc); - if ((err != EOK) && (kmsg.state == msg_waiting)) { + state_tmp = kmsg.state; + if ((err != EOK) && (state_tmp == msg_waiting)) { LIST_REMOVE(&p->kmessages, &kmsg); break; } @@ -77,6 +84,7 @@ int proc_send(u32 port, msg_t *msg) err = -EINVAL; break; default: + /* In case kmsg.state == msg_waiting || msg_received or other udefined cases, err is not changed */ break; } } @@ -95,7 +103,7 @@ static void proc_msgReject(kmsg_t *kmsg, port_t *p) hal_spinlockSet(&p->spinlock, &sc); kmsg->state = msg_rejected; - proc_threadWakeup(&kmsg->threads); + (void)proc_threadWakeup(&kmsg->threads); hal_spinlockClear(&p->spinlock, &sc); port_put(p, 0); @@ -128,11 +136,11 @@ int proc_recv(u32 port, msg_t *msg, msg_rid_t *rid) LIST_REMOVE(&p->kmessages, kmsg); } - if (p->closed) { + if (p->closed != 0) { /* Port is being removed */ if (kmsg != NULL) { kmsg->state = msg_rejected; - proc_threadWakeup(&kmsg->threads); + (void)proc_threadWakeup(&kmsg->threads); } err = -EINVAL; @@ -156,11 +164,11 @@ int proc_recv(u32 port, msg_t *msg, msg_rid_t *rid) kmsg->imapped = NULL; kmsg->omapped = NULL; - if ((kmsg->msg->i.data != NULL) && (kmsg->msg->i.size != 0) && (current->process != NULL) && + if ((kmsg->msg->i.data != NULL) && (kmsg->msg->i.size != 0U) && (current->process != NULL) && (pmap_isAllowed(current->process->pmapp, kmsg->msg->i.data, kmsg->msg->i.size) == 0)) { idata = vm_mmap(current->process->mapp, NULL, NULL, round_page(kmsg->msg->i.size), - PROT_READ | PROT_USER, NULL, -1, MAP_ANONYMOUS); + PROT_READ | PROT_USER, NULL, -1, MAP_ANONYMOUS); if (idata == NULL) { /* Free RID */ (void)proc_portRidGet(p, *rid); @@ -172,14 +180,14 @@ int proc_recv(u32 port, msg_t *msg, msg_rid_t *rid) msg->i.data = idata; } - if ((kmsg->msg->o.data != NULL) && (kmsg->msg->o.size != 0) && (current->process != NULL) && + if ((kmsg->msg->o.data != NULL) && (kmsg->msg->o.size != 0U) && (current->process != NULL) && (pmap_isAllowed(current->process->pmapp, kmsg->msg->o.data, kmsg->msg->o.size) == 0)) { msg->o.data = vm_mmap(current->process->mapp, NULL, NULL, round_page(kmsg->msg->o.size), - PROT_READ | PROT_WRITE | PROT_USER, NULL, -1, MAP_ANONYMOUS); + PROT_READ | PROT_WRITE | PROT_USER, NULL, -1, MAP_ANONYMOUS); if (msg->o.data == NULL) { if (idata != NULL) { - vm_munmap(current->process->mapp, idata, round_page(kmsg->msg->i.size)); + (void)vm_munmap(current->process->mapp, idata, round_page(kmsg->msg->i.size)); } /* Free RID */ @@ -199,7 +207,7 @@ int proc_recv(u32 port, msg_t *msg, msg_rid_t *rid) int proc_respond(u32 port, msg_t *msg, msg_rid_t rid) { port_t *p; - size_t s = 0; + int s = 0; kmsg_t *kmsg; spinlock_ctx_t sc; thread_t *current = proc_current(); @@ -218,18 +226,18 @@ int proc_respond(u32 port, msg_t *msg, msg_rid_t rid) kmsg->msg->o.err = msg->o.err; if (kmsg->imapped != NULL) { - vm_munmap(current->process->mapp, kmsg->imapped, round_page(kmsg->msg->i.size)); + (void)vm_munmap(current->process->mapp, kmsg->imapped, round_page(kmsg->msg->i.size)); } if (kmsg->omapped != NULL) { hal_memcpy(kmsg->msg->o.data, kmsg->omapped, kmsg->msg->o.size); - vm_munmap(current->process->mapp, kmsg->omapped, round_page(kmsg->msg->o.size)); + (void)vm_munmap(current->process->mapp, kmsg->omapped, round_page(kmsg->msg->o.size)); } hal_spinlockSet(&p->spinlock, &sc); kmsg->state = msg_responded; kmsg->src = current->process; - proc_threadWakeup(&kmsg->threads); + (void)proc_threadWakeup(&kmsg->threads); hal_spinlockClear(&p->spinlock, &sc); port_put(p, 0); diff --git a/proc/msg.c b/proc/msg.c index c38934ae2..67fa1239e 100644 --- a/proc/msg.c +++ b/proc/msg.c @@ -41,7 +41,7 @@ static void *msg_map(int dir, kmsg_t *kmsg, void *data, size_t size, process_t * page_t *nep = NULL, *nbp = NULL; vm_map_t *srcmap, *dstmap; struct _kmsg_layout_t *ml = dir ? &kmsg->o : &kmsg->i; - int flags; + unsigned flags; addr_t bpa, pa, epa; if ((size == 0) || (data == NULL)) { diff --git a/proc/mutex.c b/proc/mutex.c index 8e796b9d8..9981c22c6 100644 --- a/proc/mutex.c +++ b/proc/mutex.c @@ -25,7 +25,7 @@ mutex_t *mutex_get(int h) thread_t *t = proc_current(); resource_t *r = resource_get(t->process, h); LIB_ASSERT((r == NULL) || (r->type == rtLock), "process: %s, pid: %d, tid: %d, handle: %d, resource type mismatch", - t->process->path, process_getPid(t->process), proc_getTid(t), h); + t->process->path, process_getPid(t->process), proc_getTid(t), h); return ((r != NULL) && (r->type == rtLock)) ? r->payload.mutex : NULL; } @@ -33,16 +33,16 @@ mutex_t *mutex_get(int h) void mutex_put(mutex_t *mutex) { thread_t *t = proc_current(); - int rem; + unsigned int rem; LIB_ASSERT(mutex != NULL, "process: %s, pid: %d, tid: %d, mutex == NULL", - t->process->path, process_getPid(t->process), proc_getTid(t)); + t->process->path, process_getPid(t->process), proc_getTid(t)); rem = resource_put(t->process, &mutex->resource); LIB_ASSERT(rem >= 0, "process: %s, pid: %d, tid: %d, refcnt below zero", - t->process->path, process_getPid(t->process), proc_getTid(t)); - if (rem <= 0) { - proc_lockDone(&mutex->lock); + t->process->path, process_getPid(t->process), proc_getTid(t)); + if (rem <= 0U) { + (void)proc_lockDone(&mutex->lock); vm_kfree(mutex); } } @@ -72,7 +72,7 @@ int proc_mutexCreate(const struct lockAttr *attr) return -ENOMEM; } - proc_lockInit(&mutex->lock, attr, "user.mutex"); + (void)proc_lockInit(&mutex->lock, attr, "user.mutex"); (void)resource_put(p, &mutex->resource); diff --git a/proc/mutex.h b/proc/mutex.h index 8c81b15fa..df376247c 100644 --- a/proc/mutex.h +++ b/proc/mutex.h @@ -44,7 +44,4 @@ extern int proc_mutexUnlock(int h); extern int proc_mutexCreate(const struct lockAttr *attr); -extern int proc_mutexDestroy(int h); - - #endif diff --git a/proc/name.c b/proc/name.c index 9e3adf555..0c70509d2 100644 --- a/proc/name.c +++ b/proc/name.c @@ -24,15 +24,15 @@ typedef struct _dcache_entry_t { struct _dcache_entry_t *next; oid_t oid; - char name[]; + char name[0]; } dcache_entry_t; -struct { +static struct { int root_registered; oid_t root_oid; - dcache_entry_t *dcache[1 << HASH_LEN]; + dcache_entry_t *dcache[0x1U << HASH_LEN]; lock_t dcache_lock; } name_common; @@ -43,10 +43,12 @@ static unsigned int dcache_strHash(const char *str) unsigned int hash = 0; unsigned char c; - while ((c = *str++) != '\0') - hash += (c << 4) + (c >> 4) * 11; + /* MISRA Rule 10.3: TODO: check if some undesired overflow is not introduced with this cast */ + while ((c = (unsigned char)*str++) != (unsigned char)'\0') { + hash += ((unsigned int)c << 4U) + ((unsigned int)c >> 4U) * 11U; + } - return hash & ((1 << HASH_LEN) - 1); + return hash & ((0x1U << HASH_LEN) - 1U); } @@ -54,8 +56,13 @@ static dcache_entry_t *_dcache_entryLookup(unsigned int hash, const char *name) { dcache_entry_t *entry = name_common.dcache[hash]; - while (entry != NULL && hal_strcmp(entry->name, name) != 0) + while (entry != NULL) { + if (hal_strcmp(entry->name, name) == 0) { + break; + } + entry = entry->next; + } return entry; } @@ -67,33 +74,37 @@ int proc_portRegister(unsigned int port, const char *name, oid_t *oid) unsigned int hash = dcache_strHash(name); /* Check if entry already exists */ - proc_lockSet(&name_common.dcache_lock); + (void)proc_lockSet(&name_common.dcache_lock); if (_dcache_entryLookup(hash, name) != NULL) { - proc_lockClear(&name_common.dcache_lock); + (void)proc_lockClear(&name_common.dcache_lock); return -EEXIST; } - proc_lockClear(&name_common.dcache_lock); + (void)proc_lockClear(&name_common.dcache_lock); - if (name[0] == '/' && name[1] == 0) { + if (name[0] == '/' && name[1] == '\0') { name_common.root_oid.port = port; - if (oid != NULL) + if (oid != NULL) { name_common.root_oid.id = oid->id; + } name_common.root_registered = 1; return EOK; } - if ((entry = vm_kmalloc(sizeof(dcache_entry_t) + hal_strlen(name) + 1)) == NULL) + if ((entry = vm_kmalloc(sizeof(dcache_entry_t) + hal_strlen(name) + 1U)) == NULL) { return -ENOMEM; + } entry->oid.port = port; - if (oid != NULL) + if (oid != NULL) { entry->oid.id = oid->id; - hal_strcpy(entry->name, name); + } + + (void)hal_strcpy(entry->name, name); - proc_lockSet(&name_common.dcache_lock); + (void)proc_lockSet(&name_common.dcache_lock); entry->next = name_common.dcache[hash]; name_common.dcache[hash] = entry; - proc_lockClear(&name_common.dcache_lock); + (void)proc_lockClear(&name_common.dcache_lock); return EOK; } @@ -104,7 +115,7 @@ void proc_portUnregister(const char *name) dcache_entry_t *entry, *prev = NULL; unsigned int hash = dcache_strHash(name); - proc_lockSet(&name_common.dcache_lock); + (void)proc_lockSet(&name_common.dcache_lock); entry = name_common.dcache[hash]; while (entry != NULL && hal_strcmp(entry->name, name) != 0) { @@ -115,15 +126,17 @@ void proc_portUnregister(const char *name) if (entry == NULL) { /* There is no such entry, nothing to do */ - proc_lockClear(&name_common.dcache_lock); + (void)proc_lockClear(&name_common.dcache_lock); return; } - if (prev != NULL) + if (prev != NULL) { prev->next = entry->next; - else + } + else { name_common.dcache[hash] = NULL; - proc_lockClear(&name_common.dcache_lock); + } + (void)proc_lockClear(&name_common.dcache_lock); vm_kfree(entry); } @@ -138,15 +151,19 @@ int proc_portLookup(const char *name, oid_t *file, oid_t *dev) oid_t srv; char pstack[16], *pheap = NULL, *pptr; - if (name == NULL || (file == NULL && dev == NULL)) + if (name == NULL || (file == NULL && dev == NULL)) { return -EINVAL; + } - if (name[0] == '/' && name[1] == 0) { - if (name_common.root_registered) { - if (file != NULL) + if (name[0] == '/' && name[1] == '\0') { + if (name_common.root_registered != 0) { + if (file != NULL) { *file = name_common.root_oid; - if (dev != NULL) + } + + if (dev != NULL) { *dev = name_common.root_oid; + } return EOK; } @@ -154,16 +171,19 @@ int proc_portLookup(const char *name, oid_t *file, oid_t *dev) } /* Search cache for full path */ - proc_lockSet(&name_common.dcache_lock); + (void)proc_lockSet(&name_common.dcache_lock); if ((entry = _dcache_entryLookup(dcache_strHash(name), name)) != NULL) { - if (file != NULL) + if (file != NULL) { *file = entry->oid; - if (dev != NULL) + } + + if (dev != NULL) { *dev = entry->oid; - proc_lockClear(&name_common.dcache_lock); + } + (void)proc_lockClear(&name_common.dcache_lock); return EOK; } - proc_lockClear(&name_common.dcache_lock); + (void)proc_lockClear(&name_common.dcache_lock); srv = name_common.root_oid; @@ -175,42 +195,47 @@ int proc_portLookup(const char *name, oid_t *file, oid_t *dev) pptr = pstack; } else { - if ((pheap = vm_kmalloc(len + 1)) == NULL) + if ((pheap = vm_kmalloc(len + 1U)) == NULL) { return -ENOMEM; + } + pptr = pheap; } i = len; - hal_strcpy(pptr, name); + (void)hal_strcpy(pptr, name); - while (i > 1) { - while (i > 0 && pptr[i] != '/') { + while (i > 1U) { + while (i > 0U && pptr[i] != '/') { --i; } - if (i == 0) + if (i == 0U) { break; + } pptr[i] = '\0'; - proc_lockSet(&name_common.dcache_lock); + (void)proc_lockSet(&name_common.dcache_lock); if ((entry = _dcache_entryLookup(dcache_strHash(pptr), pptr)) != NULL) { srv = entry->oid; - proc_lockClear(&name_common.dcache_lock); + (void)proc_lockClear(&name_common.dcache_lock); break; } - proc_lockClear(&name_common.dcache_lock); + (void)proc_lockClear(&name_common.dcache_lock); } - if (!name_common.root_registered && !i) { - if (pheap != NULL) + if (name_common.root_registered == 0 && i == 0U) { + if (pheap != NULL) { vm_kfree(pheap); + } return -EINVAL; } if ((msg = vm_kmalloc(sizeof(msg_t))) == NULL) { - if (pheap != NULL) + if (pheap != NULL) { vm_kfree(pheap); + } return -ENOMEM; } @@ -224,8 +249,9 @@ int proc_portLookup(const char *name, oid_t *file, oid_t *dev) hal_memcpy(pptr, name + i + 1, len - i); msg->i.data = pptr; - if ((err = proc_send(srv.port, msg)) < 0) + if ((err = proc_send(srv.port, msg)) < 0) { break; + } srv = msg->o.lookup.dev; err = msg->o.err; @@ -233,21 +259,24 @@ int proc_portLookup(const char *name, oid_t *file, oid_t *dev) break; } - i += err + 1; + i += (unsigned int)err + 1U; if (i > len) { err = -EINVAL; break; } } while (i != len); - if (file != NULL) + if (file != NULL) { *file = msg->o.lookup.fil; - if (dev != NULL) + } + if (dev != NULL) { *dev = msg->o.lookup.dev; + } vm_kfree(msg); - if (pheap != NULL) + if (pheap != NULL) { vm_kfree(pheap); + } return err < 0 ? err : EOK; #endif } @@ -255,10 +284,11 @@ int proc_portLookup(const char *name, oid_t *file, oid_t *dev) int proc_lookup(const char *name, oid_t *file, oid_t *dev) { - if (file != NULL) + if (file != NULL) { file->id = 0; + } - return proc_portLookup((char *)name, file, dev); + return proc_portLookup(name, file, dev); } @@ -267,8 +297,9 @@ int proc_open(oid_t oid, unsigned mode) int err; msg_t *msg = vm_kmalloc(sizeof(msg_t)); - if (msg == NULL) + if (msg == NULL) { return -ENOMEM; + } hal_memset(msg, 0, sizeof(msg_t)); @@ -291,8 +322,9 @@ int proc_close(oid_t oid, unsigned mode) int err; msg_t *msg = vm_kmalloc(sizeof(msg_t)); - if (msg == NULL) + if (msg == NULL) { return -ENOMEM; + } hal_memset(msg, 0, sizeof(msg_t)); @@ -312,13 +344,14 @@ int proc_close(oid_t oid, unsigned mode) } -int proc_create(int port, int type, int mode, oid_t dev, oid_t dir, char *name, oid_t *oid) +int proc_create(unsigned int port, int type, unsigned int mode, oid_t dev, oid_t dir, char *name, oid_t *oid) { int err; msg_t *msg = vm_kmalloc(sizeof(msg_t)); - if (msg == NULL) + if (msg == NULL) { return -ENOMEM; + } hal_memset(msg, 0, sizeof(msg_t)); @@ -328,7 +361,7 @@ int proc_create(int port, int type, int mode, oid_t dev, oid_t dir, char *name, hal_memcpy(&msg->i.create.dev, &dev, sizeof(dev)); hal_memcpy(&msg->oid, &dir, sizeof(dir)); msg->i.data = name; - msg->i.size = name == NULL ? 0 : hal_strlen(name) + 1; + msg->i.size = name == NULL ? 0 : hal_strlen(name) + 1U; err = proc_send(port, msg); @@ -347,8 +380,9 @@ int proc_link(oid_t dir, oid_t oid, const char *name) int err; msg_t *msg = vm_kmalloc(sizeof(msg_t)); - if (msg == NULL) + if (msg == NULL) { return -ENOMEM; + } hal_memset(msg, 0, sizeof(msg_t)); @@ -356,8 +390,8 @@ int proc_link(oid_t dir, oid_t oid, const char *name) hal_memcpy(&msg->oid, &dir, sizeof(oid_t)); hal_memcpy(&msg->i.ln.oid, &oid, sizeof(oid_t)); - msg->i.size = hal_strlen(name) + 1; - msg->i.data = (char *)name; + msg->i.size = hal_strlen(name) + 1U; + msg->i.data = (const void *)name; err = proc_send(dir.port, msg); @@ -375,8 +409,9 @@ int proc_unlink(oid_t dir, oid_t oid, const char *name) int err; msg_t *msg = vm_kmalloc(sizeof(msg_t)); - if (msg == NULL) + if (msg == NULL) { return -ENOMEM; + } hal_memset(msg, 0, sizeof(msg_t)); @@ -384,8 +419,8 @@ int proc_unlink(oid_t dir, oid_t oid, const char *name) hal_memcpy(&msg->oid, &dir, sizeof(oid_t)); hal_memcpy(&msg->i.ln.oid, &oid, sizeof(oid_t)); - msg->i.size = hal_strlen(name) + 1; - msg->i.data = (char *)name; + msg->i.size = hal_strlen(name) + 1U; + msg->i.data = name; err = proc_send(dir.port, msg); @@ -403,8 +438,9 @@ int proc_read(oid_t oid, off_t offs, void *buf, size_t sz, unsigned mode) int err; msg_t *msg = vm_kmalloc(sizeof(msg_t)); - if (msg == NULL) + if (msg == NULL) { return -ENOMEM; + } hal_memset(msg, 0, sizeof(msg_t)); @@ -433,8 +469,9 @@ int proc_write(oid_t oid, off_t offs, void *buf, size_t sz, unsigned mode) int err; msg_t *msg = vm_kmalloc(sizeof(msg_t)); - if (msg == NULL) + if (msg == NULL) { return -ENOMEM; + } hal_memset(msg, 0, sizeof(msg_t)); @@ -463,8 +500,9 @@ off_t proc_size(oid_t oid) off_t err; msg_t *msg = vm_kmalloc(sizeof(msg_t)); - if (msg == NULL) + if (msg == NULL) { return -ENOMEM; + } hal_memset(msg, 0, sizeof(msg_t)); @@ -486,8 +524,8 @@ off_t proc_size(oid_t oid) void _name_init(void) { - proc_lockInit(&name_common.dcache_lock, &proc_lockAttrDefault, "name.common"); + (void)proc_lockInit(&name_common.dcache_lock, &proc_lockAttrDefault, "name.common"); - hal_memset(name_common.dcache, NULL, sizeof(name_common.dcache)); + hal_memset(name_common.dcache, 0, sizeof(name_common.dcache)); name_common.root_registered = 0; } diff --git a/proc/name.h b/proc/name.h index 6861f7748..4bad5bf42 100644 --- a/proc/name.h +++ b/proc/name.h @@ -22,13 +22,13 @@ typedef struct { unsigned int id; size_t pos; - unsigned char buff[]; + unsigned char buff[0]; } __attribute__((packed)) fsdata_t; typedef struct { unsigned int mode; - char name[]; + char name[0]; } __attribute__((packed)) fsopen_t; @@ -37,14 +37,14 @@ typedef unsigned int fsclose_t; typedef struct { unsigned int port; - char name[]; + char name[0]; } __attribute__((packed)) fsmount_t; typedef struct { oid_t oid; size_t pos; - char path[]; + char path[0]; } __attribute__((packed)) fslookup_t; @@ -55,7 +55,7 @@ typedef struct { } __attribute__((packed)) fsfcntl_t; -extern int proc_portRegister(unsigned int port, const char *name, oid_t *oid); +extern int proc_portRegister(unsigned port, const char *name, oid_t *oid); extern void proc_portUnregister(const char *name); @@ -67,7 +67,7 @@ extern int proc_portLookup(const char *name, oid_t *file, oid_t *dev); extern int proc_lookup(const char *name, oid_t *file, oid_t *dev); -extern int proc_read(oid_t oid, off_t offs, void *buf, size_t sz, unsigned mode); +extern int proc_read(oid_t oid, off_t offs, void *buf, size_t sz, unsigned int mode); extern int proc_link(oid_t dir, oid_t oid, const char *name); @@ -76,19 +76,19 @@ extern int proc_link(oid_t dir, oid_t oid, const char *name); extern int proc_unlink(oid_t dir, oid_t oid, const char *name); -extern int proc_create(int port, int type, int mode, oid_t dev, oid_t dir, char *name, oid_t *oid); +extern int proc_create(unsigned int port, int type, unsigned int mode, oid_t dev, oid_t dir, char *name, oid_t *oid); -extern int proc_close(oid_t oid, unsigned mode); +extern int proc_close(oid_t oid, unsigned int mode); -extern int proc_open(oid_t oid, unsigned mode); +extern int proc_open(oid_t oid, unsigned int mode); extern off_t proc_size(oid_t oid); -extern int proc_write(oid_t oid, off_t offs, void *buf, size_t sz, unsigned mode); +extern int proc_write(oid_t oid, off_t offs, void *buf, size_t sz, unsigned int mode); extern void _name_init(void); diff --git a/proc/ports.c b/proc/ports.c index e7b2f0cfd..405b4c08b 100644 --- a/proc/ports.c +++ b/proc/ports.c @@ -17,7 +17,7 @@ #include "lib/lib.h" -struct { +static struct { idtree_t tree; lock_t port_lock; } port_common; @@ -27,9 +27,9 @@ msg_rid_t proc_portRidAlloc(port_t *p, kmsg_t *kmsg) { msg_rid_t ret; - proc_lockSet(&p->lock); + (void)proc_lockSet(&p->lock); ret = lib_idtreeAlloc(&p->rid, &kmsg->idlinkage, 0); - proc_lockClear(&p->lock); + (void)proc_lockClear(&p->lock); return ret; } @@ -39,14 +39,14 @@ kmsg_t *proc_portRidGet(port_t *p, msg_rid_t rid) { kmsg_t *kmsg; - proc_lockSet(&p->lock); + (void)proc_lockSet(&p->lock); kmsg = lib_idtreeof(kmsg_t, idlinkage, lib_idtreeFind(&p->rid, rid)); if (kmsg != NULL) { lib_idtreeRemove(&p->rid, &kmsg->idlinkage); } - proc_lockClear(&p->lock); + (void)proc_lockClear(&p->lock); return kmsg; } @@ -57,18 +57,18 @@ port_t *proc_portGet(u32 id) port_t *port; spinlock_ctx_t sc; - if (id > MAX_ID) { + if (id > (u32)MAX_ID) { return NULL; } - proc_lockSet(&port_common.port_lock); + (void)proc_lockSet(&port_common.port_lock); port = lib_idtreeof(port_t, linkage, lib_idtreeFind(&port_common.tree, (int)id)); if (port != NULL) { hal_spinlockSet(&port->spinlock, &sc); port->refs++; hal_spinlockClear(&port->spinlock, &sc); } - proc_lockClear(&port_common.port_lock); + (void)proc_lockClear(&port_common.port_lock); return port; } @@ -78,7 +78,7 @@ void port_put(port_t *p, int destroy) { spinlock_ctx_t sc; - proc_lockSet(&port_common.port_lock); + (void)proc_lockSet(&port_common.port_lock); hal_spinlockSet(&p->spinlock, &sc); p->refs--; @@ -89,25 +89,25 @@ void port_put(port_t *p, int destroy) if (p->refs != 0) { if (destroy != 0) { /* Wake receivers up */ - proc_threadBroadcast(&p->threads); + (void)proc_threadBroadcast(&p->threads); } hal_spinlockClear(&p->spinlock, &sc); - proc_lockClear(&port_common.port_lock); + (void)proc_lockClear(&port_common.port_lock); return; } hal_spinlockClear(&p->spinlock, &sc); lib_idtreeRemove(&port_common.tree, &p->linkage); - proc_lockClear(&port_common.port_lock); + (void)proc_lockClear(&port_common.port_lock); - proc_lockSet(&p->owner->lock); + (void)proc_lockSet(&p->owner->lock); if (p->next != NULL) { LIST_REMOVE(&p->owner->ports, p); } - proc_lockClear(&p->owner->lock); + (void)proc_lockClear(&p->owner->lock); - proc_lockDone(&p->lock); + (void)proc_lockDone(&p->lock); hal_spinlockDestroy(&p->spinlock); vm_kfree(p); } @@ -124,9 +124,9 @@ int proc_portCreate(u32 *id) return -ENOMEM; } - proc_lockSet(&port_common.port_lock); + (void)proc_lockSet(&port_common.port_lock); if (lib_idtreeAlloc(&port_common.tree, &port->linkage, 0) < 0) { - proc_lockClear(&port_common.port_lock); + (void)proc_lockClear(&port_common.port_lock); vm_kfree(port); return -ENOMEM; } @@ -135,7 +135,7 @@ int proc_portCreate(u32 *id) hal_spinlockCreate(&port->spinlock, "port.spinlock"); lib_idtreeInit(&port->rid); - proc_lockInit(&port->lock, &proc_lockAttrDefault, "port.rid"); + (void)proc_lockInit(&port->lock, &proc_lockAttrDefault, "port.rid"); port->threads = NULL; port->current = NULL; @@ -144,12 +144,12 @@ int proc_portCreate(u32 *id) *id = (u32)port->linkage.id; port->owner = proc; - proc_lockClear(&port_common.port_lock); + (void)proc_lockClear(&port_common.port_lock); if (proc != NULL) { - proc_lockSet(&proc->lock); + (void)proc_lockSet(&proc->lock); LIST_ADD((&proc->ports), port); - proc_lockClear(&proc->lock); + (void)proc_lockClear(&proc->lock); } return EOK; @@ -181,14 +181,14 @@ void proc_portsDestroy(process_t *proc) port_t *p; for (;;) { - proc_lockSet(&proc->lock); + (void)proc_lockSet(&proc->lock); p = proc->ports; if (p == NULL) { - proc_lockClear(&proc->lock); + (void)proc_lockClear(&proc->lock); break; } LIST_REMOVE(&proc->ports, p); - proc_lockClear(&proc->lock); + (void)proc_lockClear(&proc->lock); port_put(p, 1); } } @@ -197,5 +197,5 @@ void proc_portsDestroy(process_t *proc) void _port_init(void) { lib_idtreeInit(&port_common.tree); - proc_lockInit(&port_common.port_lock, &proc_lockAttrDefault, "port.common"); + (void)proc_lockInit(&port_common.port_lock, &proc_lockAttrDefault, "port.common"); } diff --git a/proc/ports.h b/proc/ports.h index 8b7dab40e..e344e6be1 100644 --- a/proc/ports.h +++ b/proc/ports.h @@ -43,7 +43,7 @@ typedef struct _port_t { /* FIXME - use int for port handle. * Or even better, use dedicated type. */ -int proc_portCreate(u32 *port); +int proc_portCreate(u32 *id); void proc_portDestroy(u32 port); diff --git a/proc/proc.c b/proc/proc.c index c544a4d9b..14982230e 100644 --- a/proc/proc.c +++ b/proc/proc.c @@ -21,8 +21,8 @@ int _proc_init(vm_map_t *kmap, vm_object_t *kernel) { - _threads_init(kmap, kernel); - _process_init(kmap, kernel); + (void)_threads_init(kmap, kernel); + (void)_process_init(kmap, kernel); _port_init(); _msg_init(kmap, kernel); _name_init(); diff --git a/proc/process.c b/proc/process.c index 5f714e27a..7c6b77c32 100644 --- a/proc/process.c +++ b/proc/process.c @@ -31,7 +31,7 @@ #include "userintr.h" -typedef struct { +typedef struct _process_spawn_t { spinlock_t sl; thread_t *wq; volatile int state; @@ -42,14 +42,14 @@ typedef struct { size_t size; vm_map_t *map; vm_map_t *imap; - syspage_prog_t *prog; + const syspage_prog_t *prog; char **argv; char **envp; } process_spawn_t; -struct { +static struct { vm_map_t *kmap; vm_object_t *kernel; process_t *first; @@ -64,12 +64,12 @@ process_t *proc_find(int pid) { process_t *p; - proc_lockSet(&process_common.lock); + (void)proc_lockSet(&process_common.lock); p = lib_idtreeof(process_t, idlinkage, lib_idtreeFind(&process_common.id, pid)); if (p != NULL) { p->refs++; } - proc_lockClear(&process_common.lock); + (void)proc_lockClear(&process_common.lock); return p; } @@ -98,7 +98,7 @@ static void process_destroy(process_t *p) } proc_portsDestroy(p); - proc_lockDone(&p->lock); + (void)proc_lockDone(&p->lock); while ((ghost = p->ghosts) != NULL) { LIST_REMOVE_EX(&p->ghosts, ghost, procnext, procprev); @@ -116,13 +116,13 @@ int proc_put(process_t *p) { int remaining; - proc_lockSet(&process_common.lock); + (void)proc_lockSet(&process_common.lock); remaining = --p->refs; LIB_ASSERT(remaining >= 0, "pid: %d, refcnt became negative", process_getPid(p)); if (remaining <= 0) { lib_idtreeRemove(&process_common.id, &p->idlinkage); } - proc_lockClear(&process_common.lock); + (void)proc_lockClear(&process_common.lock); if (remaining <= 0) { process_destroy(p); @@ -134,11 +134,11 @@ int proc_put(process_t *p) void proc_get(process_t *p) { - proc_lockSet(&process_common.lock); + (void)proc_lockSet(&process_common.lock); LIB_ASSERT(p->refs > 0, "pid: %d, got reference on process with zero references", - process_getPid(p)); + process_getPid(p)); ++p->refs; - proc_lockClear(&process_common.lock); + (void)proc_lockClear(&process_common.lock); } @@ -146,7 +146,7 @@ static int process_alloc(process_t *process) { int id; - proc_lockSet(&process_common.lock); + (void)proc_lockSet(&process_common.lock); id = lib_idtreeAlloc(&process_common.id, &process->idlinkage, process_common.idcounter); if (id < 0) { /* Try from the start */ @@ -155,20 +155,20 @@ static int process_alloc(process_t *process) } if (id >= 0) { - if (process_common.idcounter == MAX_PID) { + if (process_common.idcounter == (int)MAX_PID) { process_common.idcounter = 1; } else { process_common.idcounter++; } } - proc_lockClear(&process_common.lock); + (void)proc_lockClear(&process_common.lock); return id; } -int proc_start(void (*initthr)(void *), void *arg, const char *path) +int proc_start(void (*initthr)(void *harg), void *arg, const char *path) { process_t *process; process = vm_kmalloc(sizeof(process_t)); @@ -197,18 +197,18 @@ int proc_start(void (*initthr)(void *), void *arg, const char *path) process->reaper = NULL; process->refs = 1; - proc_lockInit(&process->lock, &proc_lockAttrDefault, "process"); + (void)proc_lockInit(&process->lock, &proc_lockAttrDefault, "process"); process->ports = NULL; process->sigpend = 0; process->sigmask = 0; process->sighandler = NULL; - process->tls.tls_base = NULL; + process->tls.tls_base = 0; process->tls.tbss_sz = 0; process->tls.tdata_sz = 0; process->tls.tls_sz = 0; - process->tls.arm_m_tls = NULL; + process->tls.arm_m_tls = 0; #ifndef NOMMU process->lazy = 0; @@ -220,11 +220,11 @@ int proc_start(void (*initthr)(void *), void *arg, const char *path) /* Initialize resources tree for mutex and cond handles */ _resource_init(process); - process_alloc(process); + (void)process_alloc(process); perf_fork(process); if (proc_threadCreate(process, initthr, NULL, 4, SIZE_KSTACK, NULL, 0, (void *)arg) < 0) { - proc_put(process); + (void)proc_put(process); return -EINVAL; } @@ -249,8 +249,8 @@ void process_dumpException(unsigned int n, exc_context_t *ctx) hal_exceptionsDumpContext(buff, ctx, n); hal_consolePrint(ATTR_BOLD, buff); - posix_write(2, buff, hal_strlen(buff), -1); - posix_write(2, "\n", 1, -1); + (void)posix_write(2, buff, hal_strlen(buff), -1); + (void)posix_write(2, "\n", 1, -1); /* use proc_current() as late as possible - to be able to print exceptions in scheduler */ thread = proc_current(); @@ -268,26 +268,27 @@ void process_dumpException(unsigned int n, exc_context_t *ctx) len = lib_sprintf(buff, "in thread %lu, process \"%s\" (PID: %u)\n", proc_getTid(thread), process->path, process_getPid(process)); } - posix_write(2, buff, len, -1); + (void)posix_write(2, buff, (size_t)len, -1); } -void process_exception(unsigned int n, exc_context_t *ctx) +static void process_exception(unsigned int n, exc_context_t *ctx) { thread_t *thread = proc_current(); process_dumpException(n, ctx); - if (thread->process == NULL) + if (thread->process == NULL) { hal_cpuHalt(); + } - threads_sigpost(thread->process, thread, signal_kill); + (void)threads_sigpost(thread->process, thread, signal_kill); /* Don't allow current thread to return to the userspace, * it will crash anyway. */ thread->exit = THREAD_END_NOW; - hal_cpuReschedule(NULL, NULL); + (void)hal_cpuReschedule(NULL, NULL); } @@ -296,27 +297,28 @@ static void process_illegal(unsigned int n, exc_context_t *ctx) thread_t *thread = proc_current(); process_t *process = thread->process; - if (process == NULL) + if (process == NULL) { hal_cpuHalt(); + } - threads_sigpost(process, thread, signal_illegal); + (void)threads_sigpost(process, thread, signal_illegal); } static void process_tlsAssign(hal_tls_t *process_tls, hal_tls_t *tls, ptr_t tbssAddr) { - if (tls->tls_base != NULL) { + if (tls->tls_base != 0U) { process_tls->tls_base = tls->tls_base; } - else if (tbssAddr != NULL) { + else if (tbssAddr != 0U) { process_tls->tls_base = tbssAddr; } else { - process_tls->tls_base = NULL; + process_tls->tls_base = 0; } process_tls->tdata_sz = tls->tdata_sz; process_tls->tbss_sz = tls->tbss_sz; - process_tls->tls_sz = (tls->tbss_sz + tls->tdata_sz + sizeof(void *) + sizeof(void *) - 1) & ~(sizeof(void *) - 1); + process_tls->tls_sz = (tls->tbss_sz + tls->tdata_sz + sizeof(void *) + sizeof(void *) - 1U) & ~(sizeof(void *) - 1U); process_tls->arm_m_tls = tls->arm_m_tls; } @@ -327,9 +329,9 @@ static int process_isPtrValid(void *mapStart, size_t mapSize, void *ptrStart, si void *ptrEnd = ((char *)ptrStart) + ptrSize; /* clang-format off */ - return ((ptrSize == 0) || - ((ptrEnd > mapStart) && (ptrEnd <= mapEnd) && - (ptrStart >= mapStart) && (ptrStart < ptrEnd))) ? + return ((ptrSize == 0U) || + (((ptr_t)ptrEnd > (ptr_t)mapStart) && ((ptr_t)ptrEnd <= (ptr_t)mapEnd) && + ((ptr_t)ptrStart >= (ptr_t)mapStart) && ((ptr_t)ptrStart < (ptr_t)ptrEnd))) ? 1 : 0; /* clang-format on */ } @@ -351,11 +353,13 @@ static int process_validateElf32(void *iehdr, size_t size) } /* Validate header. */ + /* clang-format off */ if (((process_isPtrValid(iehdr, size, ehdr->e_ident, 4) == 0) || - (hal_strncmp((char *)ehdr->e_ident, "\177ELF", 4) != 0)) || - (ehdr->e_shnum == 0)) { + (hal_strncmp((char *)ehdr->e_ident, "\177" "ELF", 4) != 0)) || + (ehdr->e_shnum == 0U)) { return -ENOEXEC; } + /* clang-format on */ phdr = (void *)ehdr + ehdr->e_phoff; if (process_isPtrValid(iehdr, size, phdr, sizeof(*phdr) * ehdr->e_phnum) == 0) { @@ -369,11 +373,11 @@ static int process_validateElf32(void *iehdr, size_t size) continue; } - offs = phdr->p_offset & ~(phdr->p_align - 1); - misalign = phdr->p_offset & (phdr->p_align - 1); - filesz = phdr->p_filesz ? (phdr->p_filesz + misalign) : 0; + offs = (off_t)(Elf32_Off)(phdr->p_offset & ~(phdr->p_align - 1U)); + misalign = phdr->p_offset & (phdr->p_align - 1U); + filesz = (phdr->p_filesz != 0U) ? (phdr->p_filesz + misalign) : 0; memsz = phdr->p_memsz + misalign; - if ((offs >= size) || (memsz < filesz)) { + if ((offs >= (off_t)size) || (memsz < filesz)) { return -ENOEXEC; } } @@ -392,14 +396,14 @@ static int process_validateElf32(void *iehdr, size_t size) return -ENOEXEC; } /* Strings must end with NULL character. */ - if ((shstrshdr->sh_size != 0) && (snameTab[shstrshdr->sh_size - 1] != '\0')) { + if ((shstrshdr->sh_size != 0U) && (snameTab[shstrshdr->sh_size - 1U] != '\0')) { return -ENOEXEC; } for (i = 0; i < ehdr->e_shnum; i++) { if (((shdr[i].sh_type != SHT_NOBITS) && - (process_isPtrValid(iehdr, size, ((char *)ehdr) + shdr[i].sh_offset, shdr[i].sh_size) == 0)) || - (shdr->sh_name >= shstrshdr->sh_size)) { + (process_isPtrValid(iehdr, size, ((char *)ehdr) + shdr[i].sh_offset, shdr[i].sh_size) == 0)) || + (shdr->sh_name >= shstrshdr->sh_size)) { return -ENOEXEC; } } @@ -426,11 +430,13 @@ static int process_validateElf64(void *iehdr, size_t size) } /* Validate header. */ + /* clang-format off */ if (((process_isPtrValid(iehdr, size, ehdr->e_ident, 4) == 0) || - (hal_strncmp((char *)ehdr->e_ident, "\177ELF", 4) != 0)) || + (hal_strncmp((char *)ehdr->e_ident, "\177" "ELF", 4) != 0)) || (ehdr->e_shnum == 0)) { return -ENOEXEC; } + /* clang-format on */ phdr = (void *)ehdr + ehdr->e_phoff; if (process_isPtrValid(iehdr, size, phdr, sizeof(*phdr) * ehdr->e_phnum) == 0) { @@ -473,7 +479,7 @@ static int process_validateElf64(void *iehdr, size_t size) for (i = 0; i < ehdr->e_shnum; i++) { if (((shdr[i].sh_type != SHT_NOBITS) && - process_isPtrValid(iehdr, size, ((char *)ehdr) + shdr[i].sh_offset, shdr[i].sh_size) == 0) || + process_isPtrValid(iehdr, size, ((char *)ehdr) + shdr[i].sh_offset, shdr[i].sh_size) == 0) || (shdr->sh_name >= shstrshdr->sh_size)) { return -ENOEXEC; } @@ -650,7 +656,7 @@ int process_load64(vm_map_t *map, vm_object_t *o, off_t base, void *iehdr, size_ } -int process_load(process_t *process, vm_object_t *o, off_t base, size_t size, void **ustack, void **entry) +static int process_load(process_t *process, vm_object_t *o, off_t base, size_t size, void **ustack, void **entry) { void *stack; Elf64_Ehdr *ehdr; @@ -660,11 +666,11 @@ int process_load(process_t *process, vm_object_t *o, off_t base, size_t size, vo hal_tls_t tlsNew; ptr_t tbssAddr = 0; - tlsNew.tls_base = NULL; + tlsNew.tls_base = 0; /* NULL */ tlsNew.tdata_sz = 0; tlsNew.tbss_sz = 0; tlsNew.tls_sz = 0; - tlsNew.arm_m_tls = NULL; + tlsNew.arm_m_tls = 0; /* NULL */ size = round_page(size); @@ -724,7 +730,7 @@ static int process_relocate(struct _reloc *reloc, size_t relocsz, char **addr) { size_t i; - if ((ptr_t)(*addr) == 0) { + if ((ptr_t)(*addr) == 0U) { return 0; } @@ -739,15 +745,16 @@ static int process_relocate(struct _reloc *reloc, size_t relocsz, char **addr) } -int process_load(process_t *process, vm_object_t *o, off_t base, size_t size, void **ustack, void **entry) +static int process_load(process_t *process, vm_object_t *o, off_t base, size_t size, void **ustack, void **entry) { void *stack, *paddr; Elf32_Ehdr *ehdr; Elf32_Phdr *phdr; Elf32_Shdr *shdr, *shstrshdr; Elf32_Rela rela; - unsigned prot, flags, reloffs; - int i, j, relocsz = 0, badreloc = 0, err; + unsigned relocsz = 0, prot, flags, reloffs; + int badreloc = 0, err; + unsigned i, j; void *relptr; char *snameTab; ptr_t *got; @@ -768,13 +775,16 @@ int process_load(process_t *process, vm_object_t *o, off_t base, size_t size, vo } hal_memset(reloc, 0, sizeof(reloc)); + j = 0U; + phdr = (void *)ehdr + ehdr->e_phoff; - for (i = 0, j = 0, phdr = (void *)ehdr + ehdr->e_phoff; i < ehdr->e_phnum; i++, phdr++) { - if (phdr->p_type == PT_GNU_STACK && phdr->p_memsz != 0) { + for (i = 0U; i < ehdr->e_phnum; i++) { + if (phdr->p_type == PT_GNU_STACK && phdr->p_memsz != 0U) { stacksz = round_page(phdr->p_memsz); } if (phdr->p_type != PT_LOAD) { + ++phdr; continue; } @@ -783,17 +793,17 @@ int process_load(process_t *process, vm_object_t *o, off_t base, size_t size, vo flags = MAP_NONE; paddr = (char *)ehdr + phdr->p_offset; - if ((phdr->p_flags & PF_R) != 0) { + if ((phdr->p_flags & PF_R) != 0U) { prot |= PROT_READ; } - if ((phdr->p_flags & PF_X) != 0) { + if ((phdr->p_flags & PF_X) != 0U) { prot |= PROT_EXEC; if ((process->imapp != NULL) && (((ptr_t)base < (ptr_t)process->imapp->start) || - ((ptr_t)base > (ptr_t)process->imapp->stop))) { - paddr = vm_mmap(process->imapp, NULL, NULL, round_page(phdr->p_memsz), prot, NULL, -1, flags); + ((ptr_t)base > (ptr_t)process->imapp->stop))) { + paddr = vm_mmap(process->imapp, NULL, NULL, round_page(phdr->p_memsz), (u8)prot, NULL, -1, (u8)flags); if (paddr == NULL) { return -ENOMEM; } @@ -805,17 +815,17 @@ int process_load(process_t *process, vm_object_t *o, off_t base, size_t size, vo } } - if ((phdr->p_flags & PF_W) != 0) { + if ((phdr->p_flags & PF_W) != 0U) { prot |= PROT_WRITE; reloffs = phdr->p_vaddr % SIZE_PAGE; - paddr = vm_mmap(process->mapp, NULL, NULL, round_page(phdr->p_memsz + reloffs), prot, NULL, -1, flags); + paddr = vm_mmap(process->mapp, NULL, NULL, round_page(phdr->p_memsz + reloffs), (u8)prot, NULL, -1, (u8)flags); if (paddr == NULL) { return -ENOMEM; } - if (phdr->p_filesz != 0) { + if (phdr->p_filesz != 0U) { if ((phdr->p_offset + phdr->p_filesz) > size) { return -ENOEXEC; } @@ -834,9 +844,10 @@ int process_load(process_t *process, vm_object_t *o, off_t base, size_t size, vo reloc[j].vbase = (void *)phdr->p_vaddr; reloc[j].pbase = (void *)((char *)paddr + reloffs); reloc[j].size = phdr->p_memsz; - reloc[j].misalign = phdr->p_offset & (phdr->p_align - 1); + reloc[j].misalign = phdr->p_offset & (phdr->p_align - 1U); ++relocsz; ++j; + ++phdr; } shdr = (void *)((char *)ehdr + ehdr->e_shoff); @@ -845,10 +856,11 @@ int process_load(process_t *process, vm_object_t *o, off_t base, size_t size, vo snameTab = (char *)ehdr + shstrshdr->sh_offset; /* Find .got section */ - for (i = 0; i < ehdr->e_shnum; i++, shdr++) { + for (i = 0U; i < ehdr->e_shnum; i++) { if (hal_strcmp(&snameTab[shdr->sh_name], ".got") == 0) { break; } + ++shdr; } if (i >= ehdr->e_shnum) { @@ -863,7 +875,7 @@ int process_load(process_t *process, vm_object_t *o, off_t base, size_t size, vo /* Perform .got relocations */ /* This is non classic approach to .got relocation. We use .got itselft * instead of .rel section. */ - for (i = 0; i < shdr->sh_size / 4; ++i) { + for (i = 0U; i < shdr->sh_size / 4U; ++i) { if (process_relocate(reloc, relocsz, (char **)&got[i]) < 0) { return -ENOEXEC; } @@ -874,18 +886,21 @@ int process_load(process_t *process, vm_object_t *o, off_t base, size_t size, vo return -ENOEXEC; } + shdr = (void *)((char *)ehdr + ehdr->e_shoff); /* Perform data, init_array and fini_array relocation */ - for (i = 0, shdr = (void *)((char *)ehdr + ehdr->e_shoff); i < ehdr->e_shnum; i++, shdr++) { - if ((shdr->sh_size == 0) || (shdr->sh_entsize == 0)) { + for (i = 0U; i < ehdr->e_shnum; i++) { + if ((shdr->sh_size == 0U) || (shdr->sh_entsize == 0U)) { + ++shdr; continue; } /* strncmp as there may be multiple .rela.* or .rel.* sections for different sections. */ if ((hal_strncmp(&snameTab[shdr->sh_name], ".rela.", 6) != 0) && (hal_strncmp(&snameTab[shdr->sh_name], ".rel.", 5) != 0)) { + ++shdr; continue; } - for (j = 0; j < (shdr->sh_size / shdr->sh_entsize); ++j) { + for (j = 0U; j < (shdr->sh_size / shdr->sh_entsize); ++j) { /* Valid for both Elf32_Rela and Elf32_Rel, due to correct size being stored in shdr->sh_entsize. */ /* For .rel. section make sure not to access addend field! */ hal_memcpy(&rela, (Elf32_Rela *)((ptr_t)shdr->sh_offset + (ptr_t)ehdr + (j * shdr->sh_entsize)), shdr->sh_entsize); @@ -912,16 +927,18 @@ int process_load(process_t *process, vm_object_t *o, off_t base, size_t size, vo return -ENOEXEC; } } + ++shdr; } - tlsNew.tls_base = NULL; + tlsNew.tls_base = 0; tlsNew.tdata_sz = 0; tlsNew.tbss_sz = 0; tlsNew.tls_sz = 0; - tlsNew.arm_m_tls = NULL; + tlsNew.arm_m_tls = 0; + shdr = (void *)((char *)ehdr + ehdr->e_shoff); /* Perform .tdata, .tbss and .armtls relocations */ - for (i = 0, shdr = (void *)((char *)ehdr + ehdr->e_shoff); i < ehdr->e_shnum; i++, shdr++) { + for (i = 0U; i < ehdr->e_shnum; i++) { if (hal_strcmp(&snameTab[shdr->sh_name], ".tdata") == 0) { tlsNew.tls_base = (ptr_t)shdr->sh_addr; tlsNew.tdata_sz += shdr->sh_size; @@ -942,6 +959,10 @@ int process_load(process_t *process, vm_object_t *o, off_t base, size_t size, vo return -ENOEXEC; } } + else { + /* No action required */ + } + ++shdr; } process_tlsAssign(&process->tls, &tlsNew, tbssAddr); @@ -972,29 +993,32 @@ int process_load(process_t *process, vm_object_t *o, off_t base, size_t size, vo #endif -void *proc_copyargs(char **args) +static void *proc_copyargs(char **args) { - int argc, len = 0; + unsigned int argc, len = 0U; void *storage; char **kargs, *p; - if (args == NULL) + if (args == NULL) { return NULL; + } - for (argc = 0; args[argc] != NULL; ++argc) - len += hal_strlen(args[argc]) + 1; + for (argc = 0U; args[argc] != NULL; ++argc) { + len += hal_strlen(args[argc]) + 1U; + } - len += (argc + 1) * sizeof(char *); + len += (argc + 1U) * sizeof(char *); - if ((kargs = storage = vm_kmalloc(len)) == NULL) + if ((kargs = storage = vm_kmalloc(len)) == NULL) { return NULL; + } kargs[argc] = NULL; - p = (char *)storage + (argc + 1) * sizeof(char *); + p = (char *)storage + (argc + 1U) * sizeof(char *); - while (argc-- > 0) { - len = hal_strlen(args[argc]) + 1; + while (argc-- > 0U) { + len = hal_strlen(args[argc]) + 1U; hal_memcpy(p, args[argc], len); kargs[argc] = p; p += len; @@ -1006,26 +1030,26 @@ void *proc_copyargs(char **args) static void *process_putargs(void *stack, char ***argsp, int *count) { - int argc; + unsigned int argc; size_t len; char **args_stack, **args = *argsp; - for (argc = 0; (args != NULL) && (args[argc] != NULL); ++argc) { + for (argc = 0U; (args != NULL) && (args[argc] != NULL); ++argc) { } - stack -= (argc + 1) * sizeof(char *); + stack -= (argc + 1U) * sizeof(char *); args_stack = stack; args_stack[argc] = NULL; for (argc = 0; (args != NULL) && (args[argc] != NULL); ++argc) { - len = hal_strlen(args[argc]) + 1; + len = hal_strlen(args[argc]) + 1U; stack -= SIZE_STACK_ARG(len); hal_memcpy(stack, args[argc], len); args_stack[argc] = stack; } *argsp = args_stack; - *count = argc; + *count = (int)argc; return stack; } @@ -1033,7 +1057,7 @@ static void *process_putargs(void *stack, char ***argsp, int *count) static void process_exec(thread_t *current, process_spawn_t *spawn) { - void *stack, *entry; + void *stack, *entry = NULL; int err = 0, count; void *cleanupFn = NULL; unsigned int i; @@ -1053,18 +1077,24 @@ static void process_exec(thread_t *current, process_spawn_t *spawn) proc_changeMap(current->process, ¤t->process->map, NULL, ¤t->process->map.pmap); (void)i; #else - pmap_create(¤t->process->map.pmap, NULL, NULL, NULL); + (void)pmap_create(¤t->process->map.pmap, NULL, NULL, NULL); proc_changeMap(current->process, (spawn->map != NULL) ? spawn->map : process_common.kmap, spawn->imap, ¤t->process->map.pmap); current->process->entries = NULL; if (spawn->prog != NULL) { /* Add instruction maps */ - for (i = 0; (i < spawn->prog->imapSz) && (err == 0); ++i) { + for (i = 0; i < spawn->prog->imapSz; ++i) { + if (err != 0) { + break; + } err = pmap_addMap(current->process->pmapp, spawn->prog->imaps[i]); } /* Add data/io maps */ - for (i = 0; (i < spawn->prog->dmapSz) && (err == 0); ++i) { + for (i = 0; i < spawn->prog->dmapSz; ++i) { + if (err != 0) { + break; + } err = pmap_addMap(current->process->pmapp, spawn->prog->dmaps[i]); } } @@ -1085,16 +1115,16 @@ static void process_exec(thread_t *current, process_spawn_t *spawn) if (spawn->parent == NULL) { /* if execing without vfork */ hal_spinlockDestroy(&spawn->sl); - vm_objectPut(spawn->object); + (void)vm_objectPut(spawn->object); } else { hal_spinlockSet(&spawn->sl, &sc); spawn->state = FORKED; - proc_threadWakeup(&spawn->wq); + (void)proc_threadWakeup(&spawn->wq); hal_spinlockClear(&spawn->sl, &sc); } - if ((err == EOK) && (current->process->tls.tls_base != NULL)) { + if ((err == EOK) && (current->process->tls.tls_base != 0U)) { err = process_tlsInit(¤t->tls, ¤t->process->tls, current->process->mapp); } @@ -1107,7 +1137,7 @@ static void process_exec(thread_t *current, process_spawn_t *spawn) _hal_cpuSetKernelStack(current->kstack + current->kstacksz); hal_cpuSetGot(current->process->got); - if (current->tls.tls_base != NULL) { + if (current->tls.tls_base != 0U) { hal_cpuTlsSet(¤t->tls, current->context); } @@ -1123,25 +1153,32 @@ static void proc_spawnThread(void *arg) /* temporary: create new posix process */ if (spawn->parent != NULL) { - posix_clone(process_getPid(spawn->parent->process)); + (void)posix_clone(process_getPid(spawn->parent->process)); } process_exec(current, spawn); } -static int proc_spawn(vm_object_t *object, syspage_prog_t *prog, vm_map_t *imap, vm_map_t *map, off_t offset, size_t size, const char *path, char **argv, char **envp) +static int proc_spawn(vm_object_t *object, const syspage_prog_t *prog, vm_map_t *imap, vm_map_t *map, off_t offset, size_t size, const char *path, char **argv, char **envp) { int pid; process_spawn_t spawn; spinlock_ctx_t sc; - if (argv != NULL && (argv = proc_copyargs(argv)) == NULL) - return -ENOMEM; + if (argv != NULL) { + argv = proc_copyargs(argv); + if (argv == NULL) { + return -ENOMEM; + } + } - if (envp != NULL && (envp = proc_copyargs(envp)) == NULL) { - vm_kfree(argv); - return -ENOMEM; + if (envp != NULL) { + envp = proc_copyargs(envp); + if (envp == NULL) { + vm_kfree(argv); + return -ENOMEM; + } } spawn.object = object; @@ -1160,8 +1197,9 @@ static int proc_spawn(vm_object_t *object, syspage_prog_t *prog, vm_map_t *imap, if ((pid = proc_start(proc_spawnThread, &spawn, path)) > 0) { hal_spinlockSet(&spawn.sl, &sc); - while (spawn.state == FORKING) - proc_threadWait(&spawn.wq, &spawn.sl, 0, &sc); + while (spawn.state == FORKING) { + (void)proc_threadWait(&spawn.wq, &spawn.sl, 0, &sc); + } hal_spinlockClear(&spawn.sl, &sc); } else { @@ -1170,7 +1208,7 @@ static int proc_spawn(vm_object_t *object, syspage_prog_t *prog, vm_map_t *imap, } hal_spinlockDestroy(&spawn.sl); - vm_objectPut(spawn.object); + (void)vm_objectPut(spawn.object); return spawn.state < 0 ? spawn.state : pid; } @@ -1181,11 +1219,13 @@ int proc_fileSpawn(const char *path, char **argv, char **envp) oid_t oid; vm_object_t *object; - if ((err = proc_lookup(path, NULL, &oid)) < 0) + if ((err = proc_lookup(path, NULL, &oid)) < 0) { return err; + } - if ((err = vm_objectGet(&object, oid)) < 0) + if ((err = vm_objectGet(&object, oid)) < 0) { return err; + } return proc_spawn(object, NULL, NULL, NULL, 0, object->size, path, argv, envp); } @@ -1214,24 +1254,24 @@ int proc_syspageSpawnName(const char *imap, const char *dmap, const char *name, } if (codeMap != NULL) { - if ((codeMap->attr & (mAttrRead | mAttrExec)) != (mAttrRead | mAttrExec)) { + if ((codeMap->attr & ((unsigned int)mAttrRead | (unsigned int)mAttrExec)) != ((unsigned int)mAttrRead | (unsigned int)mAttrExec)) { return -EINVAL; } - imapp = vm_getSharedMap(codeMap->id); + imapp = vm_getSharedMap((int)codeMap->id); } - if (sysMap != NULL && (sysMap->attr & (mAttrRead | mAttrWrite)) == (mAttrRead | mAttrWrite)) { - return proc_syspageSpawn((syspage_prog_t *)prog, imapp, vm_getSharedMap(sysMap->id), name, argv); + if (sysMap != NULL && (sysMap->attr & ((unsigned int)mAttrRead | (unsigned int)mAttrWrite)) == ((unsigned int)mAttrRead | (unsigned int)mAttrWrite)) { + return proc_syspageSpawn((const syspage_prog_t *)prog, imapp, vm_getSharedMap((int)sysMap->id), name, argv); } return -EINVAL; } -int proc_syspageSpawn(syspage_prog_t *program, vm_map_t *imap, vm_map_t *map, const char *path, char **argv) +int proc_syspageSpawn(const syspage_prog_t *program, vm_map_t *imap, vm_map_t *map, const char *path, char **argv) { - return proc_spawn(VM_OBJ_PHYSMEM, program, imap, map, program->start, program->end - program->start, path, argv, NULL); + return proc_spawn(VM_OBJ_PHYSMEM, program, imap, map, (off_t)program->start, program->end - program->start, path, argv, NULL); } @@ -1240,7 +1280,7 @@ int proc_syspageSpawn(syspage_prog_t *program, vm_map_t *imap, vm_map_t *map, co static size_t process_parentKstacksz(thread_t *parent) { - return parent->kstacksz - (hal_cpuGetSP(parent->context) - parent->kstack); + return parent->kstacksz - (((size_t)hal_cpuGetSP(parent->context)) - ((size_t)parent->kstack)); } @@ -1261,14 +1301,14 @@ static void proc_vforkedExit(thread_t *current, process_spawn_t *spawn, int stat /* Only possible in the case of `initthread` exit or failure to fork. */ if (spawn->parent == NULL) { hal_spinlockDestroy(&spawn->sl); - vm_objectPut(spawn->object); + (void)vm_objectPut(spawn->object); } else { process_restoreParentKstack(current, spawn->parent); hal_spinlockSet(&spawn->sl, &sc); spawn->state = state; - proc_threadWakeup(&spawn->wq); + (void)proc_threadWakeup(&spawn->wq); hal_spinlockClear(&spawn->sl, &sc); } @@ -1295,6 +1335,7 @@ void proc_exit(int code) args[0] = (arg_t)current; args[1] = (arg_t)spawn; args[2] = (arg_t)FORKED; + /* parasoft-suppress-next-line MISRAC2012-RULE_11_1 "Function can accept two different types of first argument" */ hal_jmp(proc_vforkedExit, current->kstack + current->kstacksz, NULL, 3, args); } @@ -1311,7 +1352,7 @@ static void process_vforkThread(void *arg) current = proc_current(); parent = spawn->parent; - posix_clone(process_getPid(parent->process)); + (void)posix_clone(process_getPid(parent->process)); proc_changeMap(current->process, parent->process->mapp, parent->process->imapp, parent->process->pmapp); @@ -1321,7 +1362,7 @@ static void process_vforkThread(void *arg) hal_spinlockSet(&spawn->sl, &sc); while (spawn->state < FORKING) { - proc_threadWait(&spawn->wq, &spawn->sl, 0, &sc); + (void)proc_threadWait(&spawn->wq, &spawn->sl, 0, &sc); } hal_spinlockClear(&spawn->sl, &sc); @@ -1330,7 +1371,7 @@ static void process_vforkThread(void *arg) if (current->parentkstack == NULL) { hal_spinlockSet(&spawn->sl, &sc); spawn->state = -ENOMEM; - proc_threadWakeup(&spawn->wq); + (void)proc_threadWakeup(&spawn->wq); hal_spinlockClear(&spawn->sl, &sc); proc_threadEnd(); @@ -1350,7 +1391,7 @@ static void process_vforkThread(void *arg) hal_spinlockSet(&spawn->sl, &sc); spawn->state = ret; - proc_threadWakeup(&spawn->wq); + (void)proc_threadWakeup(&spawn->wq); hal_spinlockClear(&spawn->sl, &sc); proc_threadEnd(); @@ -1362,7 +1403,7 @@ static void process_vforkThread(void *arg) current->kstack = parent->kstack; _hal_cpuSetKernelStack(current->kstack + current->kstacksz); - if (current->tls.tls_base != NULL) { + if (current->tls.tls_base != 0U) { hal_cpuTlsSet(¤t->tls, current->context); } @@ -1380,6 +1421,7 @@ int proc_vfork(void) int pid, isparent = 1, ret; process_spawn_t *spawn; spinlock_ctx_t sc; + int state_tmp; current = proc_current(); if (current == NULL) { @@ -1411,22 +1453,24 @@ int proc_vfork(void) /* Signal forking state to vfork thread */ hal_spinlockSet(&spawn->sl, &sc); spawn->state = FORKING; - proc_threadWakeup(&spawn->wq); + (void)proc_threadWakeup(&spawn->wq); do { /* * proc_threadWait call stores context on the stack - this allows to execute child * thread starting from this point */ - proc_threadWait(&spawn->wq, &spawn->sl, 0, &sc); - isparent = proc_current() == current; - } while ((spawn->state < FORKED) && (spawn->state > 0) && (isparent != 0)); + (void)proc_threadWait(&spawn->wq, &spawn->sl, 0, &sc); + isparent = (proc_current() == current) ? 1 : 0; + /* TODO: If any test fails, revert this change and suppress MISRA Rule 13.5 */ + state_tmp = spawn->state; + } while ((state_tmp < FORKED) && (state_tmp > 0) && (isparent != 0)); hal_spinlockClear(&spawn->sl, &sc); - if (isparent) { + if (isparent != 0) { hal_spinlockDestroy(&spawn->sl); - vm_objectPut(spawn->object); + (void)vm_objectPut(spawn->object); ret = spawn->state; vm_kfree(spawn); return (ret < 0) ? ret : pid; @@ -1495,7 +1539,7 @@ int proc_release(void) hal_spinlockSet(&spawn->sl, &sc); spawn->state = FORKED; - proc_threadWakeup(&spawn->wq); + (void)proc_threadWakeup(&spawn->wq); hal_spinlockClear(&spawn->sl, &sc); return EOK; @@ -1528,7 +1572,7 @@ int proc_fork(void) /* Copy parent context to child kstack in case of signal handling on fork return */ parent = ((process_spawn_t *)current->execdata)->parent; hal_memcpy(current->kstack + current->kstacksz - sizeof(cpu_context_t), - parent->kstack + parent->kstacksz - sizeof(cpu_context_t), sizeof(cpu_context_t)); + parent->kstack + parent->kstacksz - sizeof(cpu_context_t), sizeof(cpu_context_t)); hal_cpuSmpSync(); @@ -1593,7 +1637,7 @@ static int process_execve(thread_t *current) current->process->sigpend = 0; /* Close cloexec file descriptors */ - posix_exec(); + (void)posix_exec(); process_exec(current, spawn); /* Not reached */ @@ -1619,15 +1663,21 @@ int proc_execve(const char *path, char **argv, char **envp) return -ENOMEM; } - if (argv != NULL && (argv = proc_copyargs(argv)) == NULL) { - vm_kfree(kpath); - return -ENOMEM; + if (argv != NULL) { + argv = proc_copyargs(argv); + if (argv == NULL) { + vm_kfree(kpath); + return -ENOMEM; + } } - if (envp != NULL && (envp = proc_copyargs(envp)) == NULL) { - vm_kfree(kpath); - vm_kfree(argv); - return -ENOMEM; + if (envp != NULL) { + envp = proc_copyargs(envp); + if (envp == NULL) { + vm_kfree(kpath); + vm_kfree(argv); + return -ENOMEM; + } } if ((err = proc_lookup(path, NULL, &oid)) < 0) { @@ -1672,10 +1722,11 @@ int proc_execve(const char *path, char **argv, char **envp) _hal_cpuSetKernelStack(current->kstack + current->kstacksz); args[0] = (arg_t)current; + /* parasoft-suppress-next-line MISRAC2012-RULE_11_1 "Function can accept two different types of first argument" */ hal_jmp(process_execve, current->kstack + current->kstacksz, NULL, 1, args); } else { - process_execve(current); + (void)process_execve(current); } /* Not reached */ @@ -1688,12 +1739,12 @@ int proc_sigpost(int pid, int sig) process_t *p; int err = -EINVAL; - proc_lockSet(&process_common.lock); + (void)proc_lockSet(&process_common.lock); p = lib_idtreeof(process_t, idlinkage, lib_idtreeFind(&process_common.id, pid)); if (p != NULL) { err = threads_sigpost(p, NULL, sig); } - proc_lockClear(&process_common.lock); + (void)proc_lockClear(&process_common.lock); return err; } @@ -1705,11 +1756,11 @@ int _process_init(vm_map_t *kmap, vm_object_t *kernel) process_common.first = NULL; process_common.kernel = kernel; process_common.idcounter = 1; - proc_lockInit(&process_common.lock, &proc_lockAttrDefault, "process.common"); + (void)proc_lockInit(&process_common.lock, &proc_lockAttrDefault, "process.common"); lib_idtreeInit(&process_common.id); - hal_exceptionsSetHandler(EXC_DEFAULT, process_exception); - hal_exceptionsSetHandler(EXC_UNDEFINED, process_illegal); + (void)hal_exceptionsSetHandler(EXC_DEFAULT, process_exception); + (void)hal_exceptionsSetHandler(EXC_UNDEFINED, process_illegal); return EOK; } @@ -1724,11 +1775,11 @@ int process_tlsInit(hal_tls_t *dest, hal_tls_t *source, vm_map_t *map) dest->tls_base = (ptr_t)vm_mmap(map, NULL, NULL, dest->tls_sz, PROT_READ | PROT_WRITE | PROT_USER, NULL, 0, MAP_NONE); - if (dest->tls_base != NULL) { + if (dest->tls_base != 0U) { hal_memcpy((void *)dest->tls_base, (void *)source->tls_base, dest->tdata_sz); hal_memset((char *)dest->tls_base + dest->tdata_sz, 0, dest->tbss_sz); /* At the end of TLS there must be a pointer to itself */ - *(ptr_t *)((dest->tls_base + dest->tdata_sz + dest->tbss_sz + sizeof(ptr_t) - 1) & ~(sizeof(ptr_t) - 1)) = dest->tls_base + dest->tdata_sz + dest->tbss_sz; + *(ptr_t *)((dest->tls_base + dest->tdata_sz + dest->tbss_sz + sizeof(ptr_t) - 1U) & ~(sizeof(ptr_t) - 1U)) = dest->tls_base + dest->tdata_sz + dest->tbss_sz; err = EOK; } else { diff --git a/proc/process.h b/proc/process.h index c0c881ae3..c52e49caf 100644 --- a/proc/process.h +++ b/proc/process.h @@ -66,7 +66,7 @@ typedef struct _process_t { unsigned sigpend; unsigned sigmask; - void *sighandler; + void (*sighandler)(void); void *got; hal_tls_t tls; @@ -82,10 +82,10 @@ static inline int process_getPid(const process_t *process) extern process_t *proc_find(int pid); -extern int proc_put(process_t *proc); +extern int proc_put(process_t *p); -extern void proc_get(process_t *proc); +extern void proc_get(process_t *p); extern void proc_kill(process_t *proc); @@ -94,7 +94,7 @@ extern void proc_kill(process_t *proc); extern void proc_reap(void); -extern int proc_start(void (*initthr)(void *), void *arg, const char *path); +extern int proc_start(void (*initthr)(void *harg), void *arg, const char *path); extern int proc_fileSpawn(const char *path, char **argv, char **envp); @@ -103,7 +103,7 @@ extern int proc_fileSpawn(const char *path, char **argv, char **envp); extern int proc_syspageSpawnName(const char *imap, const char *dmap, const char *name, char **argv); -extern int proc_syspageSpawn(syspage_prog_t *program, vm_map_t *imap, vm_map_t *map, const char *path, char **argv); +extern int proc_syspageSpawn(const syspage_prog_t *program, vm_map_t *imap, vm_map_t *map, const char *path, char **argv); extern int proc_execve(const char *path, char **argv, char **envp); @@ -127,7 +127,7 @@ extern void proc_exit(int code); extern int _process_init(vm_map_t *kmap, vm_object_t *kernel); -extern void process_dumpException(unsigned int n, exc_context_t *exc); +extern void process_dumpException(unsigned int n, exc_context_t *ctx); extern int process_tlsInit(hal_tls_t *dest, hal_tls_t *source, vm_map_t *map); diff --git a/proc/resource.c b/proc/resource.c index 231819ec8..3885f2981 100644 --- a/proc/resource.c +++ b/proc/resource.c @@ -32,9 +32,9 @@ int resource_alloc(process_t *process, resource_t *r) r->refs = 2; - proc_lockSet(&process->lock); + (void)proc_lockSet(&process->lock); id = lib_idtreeAlloc(&process->resources, &r->linkage, RESOURCE_ID_MIN); - proc_lockClear(&process->lock); + (void)proc_lockClear(&process->lock); return id; } @@ -44,20 +44,21 @@ resource_t *resource_get(process_t *process, int id) { resource_t *r; - proc_lockSet(&process->lock); + (void)proc_lockSet(&process->lock); r = lib_idtreeof(resource_t, linkage, lib_idtreeFind(&process->resources, id)); if (r != NULL) { ++r->refs; } - proc_lockClear(&process->lock); + (void)proc_lockClear(&process->lock); return r; } -int resource_put(process_t *process, resource_t *r) +unsigned int resource_put(process_t *process, resource_t *r) { - return lib_atomicDecrement(&r->refs); + /* parasoft-suppress-next-line MISRAC2012-RULE_10_3 "We need atomic operations that are provided by the compiler" */ + return lib_atomicDecrement((int *)&r->refs); } @@ -65,12 +66,12 @@ static resource_t *resource_remove(process_t *process, int id) { resource_t *r; - proc_lockSet(&process->lock); + (void)proc_lockSet(&process->lock); r = lib_idtreeof(resource_t, linkage, lib_idtreeFind(&process->resources, id)); if (r != NULL) { lib_idtreeRemove(&process->resources, &r->linkage); } - proc_lockClear(&process->lock); + (void)proc_lockClear(&process->lock); return r; } @@ -118,15 +119,15 @@ void proc_resourcesDestroy(process_t *process) resource_t *r; for (;;) { - proc_lockSet(&process->lock); + (void)proc_lockSet(&process->lock); r = lib_idtreeof(resource_t, linkage, lib_idtreeMinimum(process->resources.root)); if (r == NULL) { - proc_lockClear(&process->lock); + (void)proc_lockClear(&process->lock); break; } lib_idtreeRemove(&process->resources, &r->linkage); - proc_lockClear(&process->lock); + (void)proc_lockClear(&process->lock); proc_resourcePut(r); } @@ -139,10 +140,12 @@ int proc_resourcesCopy(process_t *source) idnode_t *n; resource_t *r, *newr; int err = EOK; + int skip; - proc_lockSet(&source->lock); + (void)proc_lockSet(&source->lock); for (n = lib_idtreeMinimum(source->resources.root); n != NULL; n = lib_idtreeNext(&n->linkage)) { r = lib_idtreeof(resource_t, linkage, n); + skip = 0; switch (r->type) { case rtLock: @@ -155,7 +158,12 @@ int proc_resourcesCopy(process_t *source) default: /* Don't copy interrupt handlers */ - continue; + skip = 1; + break; + } + + if (skip != 0) { + continue; } if ((err > 0) && (err != r->linkage.id)) { @@ -173,7 +181,7 @@ int proc_resourcesCopy(process_t *source) break; } } - proc_lockClear(&source->lock); + (void)proc_lockClear(&source->lock); return (err >= 0) ? EOK : err; } diff --git a/proc/resource.h b/proc/resource.h index 77cf3bba6..bf6e50c5f 100644 --- a/proc/resource.h +++ b/proc/resource.h @@ -47,7 +47,7 @@ extern int resource_alloc(process_t *process, resource_t *r); extern resource_t *resource_get(process_t *process, int id); -extern int resource_put(process_t *process, resource_t *r); +extern unsigned int resource_put(process_t *process, resource_t *r); extern int proc_resourceDestroy(process_t *process, int id); diff --git a/proc/threads.c b/proc/threads.c index 6d3be0161..ebf1b4272 100644 --- a/proc/threads.c +++ b/proc/threads.c @@ -31,7 +31,7 @@ const struct lockAttr proc_lockAttrDefault = { .type = PH_LOCK_NORMAL }; /* Special empty queue value used to wakeup next enqueued thread. This is used to implement sticky conditions */ static thread_t *const wakeupPending = (void *)-1; -struct { +static struct { vm_map_t *kmap; spinlock_t spinlock; lock_t lock; @@ -52,7 +52,7 @@ struct { intr_handler_t pendsvHandler; #endif - thread_t *volatile ghosts; + thread_t *ghosts; thread_t *reaper; int perfGather; @@ -88,6 +88,7 @@ static int threads_sleepcmp(rbnode_t *n1, rbnode_t *n2) thread_t *t1 = lib_treeof(thread_t, sleeplinkage, n1); thread_t *t2 = lib_treeof(thread_t, sleeplinkage, n2); + /* parasoft-suppress-next-line MISRAC2012-DIR_4_1 "Variable pass to lib_treeof will not be NULL, so lib_treeof will not be NULL either" */ if (t1->wakeup != t2->wakeup) { return (t1->wakeup > t2->wakeup) ? 1 : -1; } @@ -124,20 +125,25 @@ static void _perf_event(thread_t *t, int type) else if (type == perf_evScheduling) { wait = now - t->readyTime; - if (t->maxWait < wait) + if (t->maxWait < wait) { t->maxWait = wait; + } + } + else { + /* No action required */ } - if (!threads_common.perfGather) + if (threads_common.perfGather == 0) { return; + } - ev.type = type; + ev.type = (u8)type & 0x03U; - ev.deltaTimestamp = now - threads_common.perfLastTimestamp; + ev.deltaTimestamp = (u16)(time_t)(now - threads_common.perfLastTimestamp) & 0x0fffU; threads_common.perfLastTimestamp = now; - ev.tid = perf_idpack(proc_getTid(t)); + ev.tid = perf_idpack((unsigned int)proc_getTid(t)); - _cbuffer_write(&threads_common.perfBuffer, &ev, sizeof(ev)); + (void)_cbuffer_write(&threads_common.perfBuffer, &ev, sizeof(ev)); } @@ -170,42 +176,44 @@ static void _perf_begin(thread_t *t) perf_levent_begin_t ev; time_t now; - if (!threads_common.perfGather) + if (threads_common.perfGather == 0) { return; + } ev.sbz = 0; ev.type = perf_levBegin; ev.prio = t->priority; - ev.tid = perf_idpack(proc_getTid(t)); - ev.pid = t->process != NULL ? perf_idpack(process_getPid(t->process)) : -1; + ev.tid = perf_idpack((unsigned int)proc_getTid(t)); + ev.pid = t->process != NULL ? perf_idpack((unsigned int)process_getPid(t->process)) : (unsigned int)-1; now = _proc_gettimeRaw(); - ev.deltaTimestamp = now - threads_common.perfLastTimestamp; + ev.deltaTimestamp = (u16)(time_t)(now - threads_common.perfLastTimestamp) & 0x0fffU; threads_common.perfLastTimestamp = now; - _cbuffer_write(&threads_common.perfBuffer, &ev, sizeof(ev)); + (void)_cbuffer_write(&threads_common.perfBuffer, &ev, sizeof(ev)); } -void perf_end(thread_t *t) +static void perf_end(thread_t *t) { perf_levent_end_t ev; time_t now; spinlock_ctx_t sc; - if (!threads_common.perfGather) + if (threads_common.perfGather == 0) { return; + } hal_spinlockSet(&threads_common.spinlock, &sc); ev.sbz = 0; ev.type = perf_levEnd; - ev.tid = perf_idpack(proc_getTid(t)); + ev.tid = perf_idpack((unsigned int)proc_getTid(t)); now = _proc_gettimeRaw(); - ev.deltaTimestamp = now - threads_common.perfLastTimestamp; + ev.deltaTimestamp = (u16)(time_t)(now - threads_common.perfLastTimestamp) & 0x0fffU; threads_common.perfLastTimestamp = now; - _cbuffer_write(&threads_common.perfBuffer, &ev, sizeof(ev)); + (void)_cbuffer_write(&threads_common.perfBuffer, &ev, sizeof(ev)); hal_spinlockClear(&threads_common.spinlock, &sc); } @@ -216,21 +224,22 @@ void perf_fork(process_t *p) time_t now; spinlock_ctx_t sc; - if (!threads_common.perfGather) + if (threads_common.perfGather == 0) { return; + } hal_spinlockSet(&threads_common.spinlock, &sc); ev.sbz = 0; ev.type = perf_levFork; - ev.pid = perf_idpack(process_getPid(p)); + ev.pid = perf_idpack((unsigned int)process_getPid(p)); // ev.ppid = p->parent != NULL ? perf_idpack(p->parent->id) : -1; - ev.tid = perf_idpack(proc_getTid(_proc_current())); + ev.tid = perf_idpack((unsigned int)proc_getTid(_proc_current())); now = _proc_gettimeRaw(); - ev.deltaTimestamp = now - threads_common.perfLastTimestamp; + ev.deltaTimestamp = (u16)(time_t)(now - threads_common.perfLastTimestamp) & 0x0fffU; threads_common.perfLastTimestamp = now; - _cbuffer_write(&threads_common.perfBuffer, &ev, sizeof(ev)); + (void)_cbuffer_write(&threads_common.perfBuffer, &ev, sizeof(ev)); hal_spinlockClear(&threads_common.spinlock, &sc); } @@ -241,20 +250,21 @@ void perf_kill(process_t *p) time_t now; spinlock_ctx_t sc; - if (!threads_common.perfGather) + if (threads_common.perfGather == 0) { return; + } hal_spinlockSet(&threads_common.spinlock, &sc); ev.sbz = 0; ev.type = perf_levKill; - ev.pid = perf_idpack(process_getPid(p)); - ev.tid = perf_idpack(proc_getTid(_proc_current())); + ev.pid = perf_idpack((unsigned int)process_getPid(p)); + ev.tid = perf_idpack((unsigned int)proc_getTid(_proc_current())); now = _proc_gettimeRaw(); - ev.deltaTimestamp = now - threads_common.perfLastTimestamp; + ev.deltaTimestamp = (u16)(time_t)(now - threads_common.perfLastTimestamp) & 0x0fffU; threads_common.perfLastTimestamp = now; - _cbuffer_write(&threads_common.perfBuffer, &ev, sizeof(ev)); + (void)_cbuffer_write(&threads_common.perfBuffer, &ev, sizeof(ev)); hal_spinlockClear(&threads_common.spinlock, &sc); } @@ -263,27 +273,28 @@ void perf_exec(process_t *p, char *path) { perf_levent_exec_t ev; time_t now; - int plen; + unsigned int plen; spinlock_ctx_t sc; - if (!threads_common.perfGather) + if (threads_common.perfGather == 0) { return; + } hal_spinlockSet(&threads_common.spinlock, &sc); ev.sbz = 0; ev.type = perf_levExec; - ev.tid = perf_idpack(proc_getTid(_proc_current())); + ev.tid = perf_idpack((unsigned int)proc_getTid(_proc_current())); plen = hal_strlen(path); - plen = min(plen, sizeof(ev.path) - 1); + plen = min(plen, sizeof(ev.path) - 1U); hal_memcpy(ev.path, path, plen); - ev.path[plen] = 0; + ev.path[plen] = '\0'; now = _proc_gettimeRaw(); - ev.deltaTimestamp = now - threads_common.perfLastTimestamp; + ev.deltaTimestamp = (u16)(time_t)(now - threads_common.perfLastTimestamp) & 0x0fffU; threads_common.perfLastTimestamp = now; - _cbuffer_write(&threads_common.perfBuffer, &ev, sizeof(ev) - sizeof(ev.path) + plen + 1); + (void)_cbuffer_write(&threads_common.perfBuffer, &ev, sizeof(ev) - sizeof(ev.path) + plen + 1U); hal_spinlockClear(&threads_common.spinlock, &sc); } @@ -299,7 +310,7 @@ static void perf_bufferFree(void *data, page_t **pages) sz += SIZE_PAGE; } - vm_munmap(threads_common.kmap, data, sz); + (void)vm_munmap(threads_common.kmap, data, sz); } @@ -311,10 +322,11 @@ static void *perf_bufferAlloc(page_t **pages, size_t sz) *pages = NULL; data = vm_mapFind(threads_common.kmap, NULL, sz, MAP_NONE, PROT_READ | PROT_WRITE); - if (data == NULL) + if (data == NULL) { return NULL; + } - for (v = data; v < data + sz; v += SIZE_PAGE) { + for (v = data; (ptr_t)v < (ptr_t)data + sz; v += SIZE_PAGE) { p = vm_pageAlloc(SIZE_PAGE, PAGE_OWNER_APP); if (p == NULL) { @@ -324,7 +336,7 @@ static void *perf_bufferAlloc(page_t **pages, size_t sz) p->next = *pages; *pages = p; - page_map(&threads_common.kmap->pmap, v, p->addr, PGHD_PRESENT | PGHD_WRITE | PGHD_READ); + (void)page_map(&threads_common.kmap->pmap, v, p->addr, PGHD_PRESENT | PGHD_WRITE | PGHD_READ); } return data; @@ -336,19 +348,22 @@ int perf_start(unsigned pid) void *data; spinlock_ctx_t sc; - if (!pid) + if (pid == 0U) { return -EINVAL; + } - if (threads_common.perfGather) + if (threads_common.perfGather == 1) { return -EINVAL; + } /* Allocate 4M for events */ - data = perf_bufferAlloc(&threads_common.perfPages, 4 << 20); + data = perf_bufferAlloc(&threads_common.perfPages, 0x4UL << 20); - if (data == NULL) + if (data == NULL) { return -ENOMEM; + } - _cbuffer_init(&threads_common.perfBuffer, data, 4 << 20); + (void)_cbuffer_init(&threads_common.perfBuffer, data, 0x4UL << 20); /* Start gathering events */ hal_spinlockSet(&threads_common.spinlock, &sc); @@ -368,23 +383,24 @@ int perf_read(void *buffer, size_t bufsz) bufsz = _cbuffer_read(&threads_common.perfBuffer, buffer, bufsz); hal_spinlockClear(&threads_common.spinlock, &sc); - return bufsz; + return (int)bufsz; } -int perf_finish() +int perf_finish(void) { spinlock_ctx_t sc; hal_spinlockSet(&threads_common.spinlock, &sc); - if (threads_common.perfGather) { + if (threads_common.perfGather != 0) { threads_common.perfGather = 0; hal_spinlockClear(&threads_common.spinlock, &sc); perf_bufferFree(threads_common.perfBuffer.data, &threads_common.perfPages); } - else + else { hal_spinlockClear(&threads_common.spinlock, &sc); + } return EOK; } @@ -395,40 +411,45 @@ int perf_finish() */ -static void _threads_updateWakeup(time_t now, thread_t *min) +static void _threads_updateWakeup(time_t now, thread_t *minimum) { thread_t *t; time_t wakeup; - if (min != NULL) - t = min; - else + if (minimum != NULL) { + t = minimum; + } + else { t = lib_treeof(thread_t, sleeplinkage, lib_rbMinimum(threads_common.sleeping.root)); + } if (t != NULL) { - if (now >= t->wakeup) + if (now >= t->wakeup) { wakeup = 1; - else + } + else { wakeup = t->wakeup - now; + } } else { wakeup = SYSTICK_INTERVAL; } - if (wakeup > SYSTICK_INTERVAL + SYSTICK_INTERVAL / 8) + if (wakeup > SYSTICK_INTERVAL + SYSTICK_INTERVAL / 8) { wakeup = SYSTICK_INTERVAL; + } - hal_timerSetWakeup(wakeup); + hal_timerSetWakeup((unsigned int)wakeup); } -int threads_timeintr(unsigned int n, cpu_context_t *context, void *arg) +static int threads_timeintr(unsigned int n, cpu_context_t *context, void *arg) { thread_t *t; time_t now; spinlock_ctx_t sc; - if (hal_cpuGetID() != 0) { + if (hal_cpuGetID() != 0U) { /* Invoke scheduler */ return 1; } @@ -484,10 +505,10 @@ static void thread_destroy(thread_t *thread) LIST_REMOVE_EX(&process->threads, thread, procnext, procprev); LIST_ADD_EX(&process->ghosts, thread, procnext, procprev); - _proc_threadBroadcast(&process->reaper); + (void)_proc_threadBroadcast(&process->reaper); hal_spinlockClear(&threads_common.spinlock, &sc); - proc_put(process); + (void)proc_put(process); } else { vm_kfree(thread); @@ -499,12 +520,12 @@ thread_t *threads_findThread(int tid) { thread_t *t; - proc_lockSet(&threads_common.lock); + (void)proc_lockSet(&threads_common.lock); t = lib_idtreeof(thread_t, idlinkage, lib_idtreeFind(&threads_common.id, tid)); if (t != NULL) { ++t->refs; } - proc_lockClear(&threads_common.lock); + (void)proc_lockClear(&threads_common.lock); return t; } @@ -514,12 +535,12 @@ void threads_put(thread_t *thread) { int refs; - proc_lockSet(&threads_common.lock); + (void)proc_lockSet(&threads_common.lock); refs = --thread->refs; if (refs <= 0) { lib_idtreeRemove(&threads_common.id, &thread->idlinkage); } - proc_lockClear(&threads_common.lock); + (void)proc_lockClear(&threads_common.lock); if (refs <= 0) { thread_destroy(thread); @@ -536,8 +557,9 @@ static void _threads_cpuTimeCalc(thread_t *current, thread_t *selected) current->lastTime = now; } - if (selected != NULL && current != selected) + if (selected != NULL && current != selected) { selected->lastTime = now; + } } @@ -549,7 +571,7 @@ __attribute__((noreturn)) void proc_longjmp(cpu_context_t *ctx) hal_spinlockSet(&threads_common.spinlock, &sc); current = _proc_current(); current->longjmpctx = ctx; - hal_cpuReschedule(&threads_common.spinlock, &sc); + (void)hal_cpuReschedule(&threads_common.spinlock, &sc); for (;;) { } } @@ -558,6 +580,7 @@ __attribute__((noreturn)) void proc_longjmp(cpu_context_t *ctx) static int _threads_checkSignal(thread_t *selected, process_t *proc, cpu_context_t *signalCtx, unsigned int oldmask, const int src); +/* parasoft-suppress-next-line MISRAC2012-RULE_8_4 "Function is used externally within assembler code" */ int _threads_schedule(unsigned int n, cpu_context_t *context, void *arg) { thread_t *current, *selected; @@ -577,14 +600,15 @@ int _threads_schedule(unsigned int n, cpu_context_t *context, void *arg) current->context = context; /* Move thread to the end of queue */ - if (current->state == READY) { + if (current->state == (unsigned int)READY) { LIST_ADD(&threads_common.ready[current->priority], current); _perf_preempted(current); } } /* Get next thread */ - for (i = 0; i < sizeof(threads_common.ready) / sizeof(thread_t *);) { + i = 0; + while (i < sizeof(threads_common.ready) / sizeof(thread_t *)) { if ((selected = threads_common.ready[i]) == NULL) { i++; continue; @@ -592,7 +616,7 @@ int _threads_schedule(unsigned int n, cpu_context_t *context, void *arg) LIST_REMOVE(&threads_common.ready[i], selected); - if (selected->exit == 0) { + if (selected->exit == 0U) { break; } @@ -602,7 +626,7 @@ int _threads_schedule(unsigned int n, cpu_context_t *context, void *arg) selected->state = GHOST; LIST_ADD(&threads_common.ghosts, selected); - _proc_threadWakeup(&threads_common.reaper); + (void)_proc_threadWakeup(&threads_common.reaper); } LIB_ASSERT(selected != NULL, "no threads to schedule"); @@ -635,7 +659,7 @@ int _threads_schedule(unsigned int n, cpu_context_t *context, void *arg) selected->longjmpctx = NULL; } - if (selected->tls.tls_base != NULL) { + if (selected->tls.tls_base != 0U) { hal_cpuTlsSet(&selected->tls, selCtx); } @@ -645,15 +669,15 @@ int _threads_schedule(unsigned int n, cpu_context_t *context, void *arg) #if defined(STACK_CANARY) || !defined(NDEBUG) if ((selected->execkstack == NULL) && (selected->context == selCtx)) { LIB_ASSERT_ALWAYS((char *)selCtx > ((char *)selected->kstack + selected->kstacksz - 9 * selected->kstacksz / 10), - "pid: %d, tid: %d, kstack: 0x%p, context: 0x%p, kernel stack limit exceeded", - (selected->process != NULL) ? process_getPid(selected->process) : 0, proc_getTid(selected), - selected->kstack, selCtx); + "pid: %d, tid: %d, kstack: 0x%p, context: 0x%p, kernel stack limit exceeded", + (selected->process != NULL) ? process_getPid(selected->process) : 0, proc_getTid(selected), + selected->kstack, selCtx); } LIB_ASSERT_ALWAYS((selected->process == NULL) || (selected->ustack == NULL) || - (hal_memcmp(selected->ustack, threads_common.stackCanary, sizeof(threads_common.stackCanary)) == 0), - "pid: %d, tid: %d, path: %s, user stack corrupted", - process_getPid(selected->process), proc_getTid(selected), selected->process->path); + (hal_memcmp(selected->ustack, threads_common.stackCanary, sizeof(threads_common.stackCanary)) == 0), + "pid: %d, tid: %d, path: %s, user stack corrupted", + process_getPid(selected->process), proc_getTid(selected), selected->process->path); #endif } @@ -664,6 +688,7 @@ int _threads_schedule(unsigned int n, cpu_context_t *context, void *arg) } +/* parasoft-suppress-next-line MISRAC2012-RULE_8_4 "Function is used externally within assembler code" */ int threads_schedule(unsigned int n, cpu_context_t *context, void *arg) { spinlock_ctx_t sc; @@ -702,23 +727,23 @@ static int thread_alloc(thread_t *thread) { int id; - proc_lockSet(&threads_common.lock); - id = lib_idtreeAlloc(&threads_common.id, &thread->idlinkage, threads_common.idcounter); + (void)proc_lockSet(&threads_common.lock); + id = lib_idtreeAlloc(&threads_common.id, &thread->idlinkage, (int)threads_common.idcounter); if (id < 0) { /* Try from the start */ threads_common.idcounter = 0; - id = lib_idtreeAlloc(&threads_common.id, &thread->idlinkage, threads_common.idcounter); + id = lib_idtreeAlloc(&threads_common.id, &thread->idlinkage, (int)threads_common.idcounter); } if (id >= 0) { if (threads_common.idcounter == MAX_TID) { - threads_common.idcounter = 0; + threads_common.idcounter = 0U; } else { threads_common.idcounter++; } } - proc_lockClear(&threads_common.lock); + (void)proc_lockClear(&threads_common.lock); return id; } @@ -730,14 +755,15 @@ void threads_canaryInit(thread_t *t, void *ustack) hal_spinlockSet(&threads_common.spinlock, &sc); - if ((t->ustack = ustack) != NULL) + if ((t->ustack = ustack) != NULL) { hal_memcpy(t->ustack, threads_common.stackCanary, sizeof(threads_common.stackCanary)); + } hal_spinlockClear(&threads_common.spinlock, &sc); } -int proc_threadCreate(process_t *process, void (*start)(void *), int *id, unsigned int priority, size_t kstacksz, void *stack, size_t stacksz, void *arg) +int proc_threadCreate(process_t *process, void (*start)(void *harg), int *id, unsigned int priority, size_t kstacksz, void *stack, size_t stacksz, void *arg) { thread_t *t; spinlock_ctx_t sc; @@ -773,8 +799,8 @@ int proc_threadCreate(process_t *process, void (*start)(void *), int *id, unsign t->locks = NULL; t->stick = 0; t->utick = 0; - t->priorityBase = priority; - t->priority = priority; + t->priorityBase = (u8)priority & 0xffU; + t->priority = (u8)priority & 0xffU; t->cpuTime = 0; t->maxWait = 0; proc_gettime(&t->startTime, NULL); @@ -787,7 +813,7 @@ int proc_threadCreate(process_t *process, void (*start)(void *), int *id, unsign return -ENOMEM; } - if (process != NULL && (process->tls.tdata_sz != 0 || process->tls.tbss_sz != 0)) { + if (process != NULL && (process->tls.tdata_sz != 0U || process->tls.tbss_sz != 0U)) { err = process_tlsInit(&t->tls, &process->tls, process->mapp); if (err != EOK) { lib_idtreeRemove(&threads_common.id, &t->idlinkage); @@ -797,11 +823,11 @@ int proc_threadCreate(process_t *process, void (*start)(void *), int *id, unsign } } else { - t->tls.tls_base = NULL; + t->tls.tls_base = 0; t->tls.tdata_sz = 0; t->tls.tbss_sz = 0; t->tls.tls_sz = 0; - t->tls.arm_m_tls = NULL; + t->tls.arm_m_tls = 0; } if (id != NULL) { @@ -809,7 +835,7 @@ int proc_threadCreate(process_t *process, void (*start)(void *), int *id, unsign } /* Prepare initial stack */ - hal_cpuCreateContext(&t->context, start, t->kstack, t->kstacksz, (stack == NULL) ? NULL : (unsigned char *)stack + stacksz, arg, &t->tls); + (void)hal_cpuCreateContext(&t->context, start, t->kstack, t->kstacksz, (stack == NULL) ? NULL : (unsigned char *)stack + stacksz, arg, &t->tls); threads_canaryInit(t, stack); if (process != NULL) { @@ -835,7 +861,7 @@ int proc_threadCreate(process_t *process, void (*start)(void *), int *id, unsign static unsigned int _proc_lockGetPriority(lock_t *lock) { - unsigned int priority = sizeof(threads_common.ready) / sizeof(threads_common.ready[0]) - 1; + unsigned int priority = sizeof(threads_common.ready) / sizeof(threads_common.ready[0]) - 1U; thread_t *thread = lock->queue; if (thread != NULL) { @@ -853,7 +879,7 @@ static unsigned int _proc_lockGetPriority(lock_t *lock) static unsigned int _proc_threadGetLockPriority(thread_t *thread) { - unsigned int ret, priority = sizeof(threads_common.ready) / sizeof(threads_common.ready[0]) - 1; + unsigned int ret, priority = sizeof(threads_common.ready) / sizeof(threads_common.ready[0]) - 1U; lock_t *lock = thread->locks; if (lock != NULL) { @@ -889,7 +915,7 @@ static void _proc_threadSetPriority(thread_t *thread, unsigned int priority) priority = thread->priorityBase; } - if (thread->state == READY) { + if (thread->state == (unsigned char)READY) { for (i = 0; i < hal_cpuGetCount(); i++) { if (thread == threads_common.current[i]) { break; @@ -898,14 +924,14 @@ static void _proc_threadSetPriority(thread_t *thread, unsigned int priority) if (i == hal_cpuGetCount()) { LIB_ASSERT(LIST_BELONGS(&threads_common.ready[thread->priority], thread) != 0, - "thread: 0x%p, tid: %d, priority: %d, is not on the ready list", - thread, proc_getTid(thread), thread->priority); + "thread: 0x%p, tid: %d, priority: %d, is not on the ready list", + thread, proc_getTid(thread), thread->priority); LIST_REMOVE(&threads_common.ready[thread->priority], thread); LIST_ADD(&threads_common.ready[priority], thread); } } - thread->priority = priority; + thread->priority = (u8)priority & 0xffU; } @@ -919,7 +945,7 @@ int proc_threadPriority(int priority) return -EINVAL; } - if ((priority >= 0) && (priority >= sizeof(threads_common.ready) / sizeof(threads_common.ready[0]))) { + if ((priority >= 0) && ((unsigned int)priority >= sizeof(threads_common.ready) / sizeof(threads_common.ready[0]))) { return -EINVAL; } @@ -929,28 +955,31 @@ int proc_threadPriority(int priority) /* NOTE: -1 is used to retrieve the current thread priority only */ if (priority >= 0) { - if (priority < current->priority) { - current->priority = priority; + if ((unsigned int)priority < current->priority) { + current->priority = (u8)priority & 0xffU; } - else if (priority > current->priority) { + else if ((unsigned int)priority > current->priority) { /* Make sure that the inherited priority from the lock is not reduced */ - if ((current->locks == NULL) || (priority <= _proc_threadGetLockPriority(current))) { - current->priority = priority; + if ((current->locks == NULL) || ((unsigned int)priority <= _proc_threadGetLockPriority(current))) { + current->priority = (u8)priority & 0xffU; /* Trigger immediate rescheduling if the task has lowered its priority */ reschedule = 1; } } + else { + /* No action required */ + } - current->priorityBase = priority; + current->priorityBase = (u8)priority & 0xffU; } - ret = current->priorityBase; + ret = (int)current->priorityBase; if (reschedule != 0) { - hal_cpuReschedule(&threads_common.spinlock, &sc); + (void)hal_cpuReschedule(&threads_common.spinlock, &sc); } else { - hal_spinlockClear(&threads_common.spinlock, &sc); + (void)hal_spinlockClear(&threads_common.spinlock, &sc); } return ret; @@ -964,30 +993,33 @@ static void _thread_interrupt(thread_t *t) } -void proc_threadEnd(void) +__attribute__((noreturn)) void proc_threadEnd(void) { thread_t *t; int cpu; spinlock_ctx_t sc; - hal_spinlockSet(&threads_common.spinlock, &sc); + (void)hal_spinlockSet(&threads_common.spinlock, &sc); - cpu = hal_cpuGetID(); + cpu = (int)hal_cpuGetID(); t = threads_common.current[cpu]; threads_common.current[cpu] = NULL; t->state = GHOST; LIST_ADD(&threads_common.ghosts, t); - _proc_threadWakeup(&threads_common.reaper); + (void)_proc_threadWakeup(&threads_common.reaper); - hal_cpuReschedule(&threads_common.spinlock, &sc); + (void)hal_cpuReschedule(&threads_common.spinlock, &sc); + + __builtin_unreachable(); } static void _proc_threadExit(thread_t *t) { t->exit = THREAD_END; - if (t->interruptible) + if (t->interruptible != 0U) { _thread_interrupt(t); + } } @@ -1026,7 +1058,7 @@ void proc_reap(void) hal_spinlockSet(&threads_common.spinlock, &sc); while (threads_common.ghosts == NULL) { - _proc_threadWait(&threads_common.reaper, 0, &sc); + (void)_proc_threadWait(&threads_common.reaper, 0, &sc); } ghost = threads_common.ghosts; LIST_REMOVE(&threads_common.ghosts, ghost); @@ -1056,7 +1088,7 @@ static void _proc_threadDequeue(thread_t *t) { unsigned int i; - if (t->state == GHOST) { + if (t->state == (unsigned char)GHOST) { return; } @@ -1066,7 +1098,7 @@ static void _proc_threadDequeue(thread_t *t) LIST_REMOVE(t->wait, t); } - if (t->wakeup) { + if (t->wakeup != 0) { lib_rbRemove(&threads_common.sleeping, &t->sleeplinkage); } @@ -1104,11 +1136,11 @@ static void _proc_threadEnqueue(thread_t **queue, time_t timeout, int interrupti current->state = SLEEP; current->wakeup = 0; current->wait = queue; - current->interruptible = interruptible; + current->interruptible = (u8)interruptible & 0x01U; - if (timeout) { + if (timeout != 0) { current->wakeup = timeout; - lib_rbInsert(&threads_common.sleeping, ¤t->sleeplinkage); + (void)lib_rbInsert(&threads_common.sleeping, ¤t->sleeplinkage); _threads_updateWakeup(_proc_gettimeRaw(), NULL); } @@ -1122,11 +1154,12 @@ static int _proc_threadWait(thread_t **queue, time_t timeout, spinlock_ctx_t *sc _proc_threadEnqueue(queue, timeout, 0); - if (*queue == NULL) + if (*queue == NULL) { return EOK; + } err = hal_cpuReschedule(&threads_common.spinlock, scp); - hal_spinlockSet(&threads_common.spinlock, scp); + (void)hal_spinlockSet(&threads_common.spinlock, scp); return err; } @@ -1151,7 +1184,7 @@ int proc_threadSleep(time_t us) current->wakeup = now + us; current->interruptible = 1; - lib_rbInsert(&threads_common.sleeping, ¤t->sleeplinkage); + (void)lib_rbInsert(&threads_common.sleeping, ¤t->sleeplinkage); _perf_enqueued(current); _threads_updateWakeup(now, NULL); @@ -1259,7 +1292,7 @@ void proc_threadWakeupYield(thread_t **queue) hal_spinlockSet(&threads_common.spinlock, &sc); if (_proc_threadWakeup(queue) != 0) { - hal_cpuReschedule(&threads_common.spinlock, &sc); + (void)hal_cpuReschedule(&threads_common.spinlock, &sc); } else { hal_spinlockClear(&threads_common.spinlock, &sc); @@ -1273,7 +1306,7 @@ void proc_threadBroadcastYield(thread_t **queue) hal_spinlockSet(&threads_common.spinlock, &sc); if (_proc_threadBroadcast(queue) != 0) { - hal_cpuReschedule(&threads_common.spinlock, &sc); + (void)hal_cpuReschedule(&threads_common.spinlock, &sc); } else { hal_spinlockClear(&threads_common.spinlock, &sc); @@ -1344,8 +1377,8 @@ int proc_join(int tid, time_t timeout) } hal_spinlockClear(&threads_common.spinlock, &sc); - if ((ghost != NULL) && (ghost->tls.tls_sz != 0)) { - process_tlsDestroy(&ghost->tls, process->mapp); + if ((ghost != NULL) && (ghost->tls.tls_sz != 0U)) { + (void)process_tlsDestroy(&ghost->tls, process->mapp); } vm_kfree(ghost); @@ -1399,10 +1432,12 @@ static time_t _proc_nextWakeup(void) thread = lib_treeof(thread_t, sleeplinkage, lib_rbMinimum(threads_common.sleeping.root)); if (thread != NULL) { now = _proc_gettimeRaw(); - if (now >= thread->wakeup) + if (now >= thread->wakeup) { wakeup = 0; - else + } + else { wakeup = thread->wakeup - now; + } } return wakeup; @@ -1416,11 +1451,13 @@ static time_t _proc_nextWakeup(void) int threads_sigpost(process_t *process, thread_t *thread, int sig) { - int sigbit = 1 << sig; + unsigned sigbit = 0x01UL << (unsigned int)sig; + spinlock_ctx_t sc; switch (sig) { case signal_segv: + /* parasoft-suppress-next-line MISRAC2012-RULE_16_1 MISRAC2012-RULE_16_3 "Intentional passthrough" */ case signal_illegal: if (process->sighandler != NULL) { break; @@ -1439,6 +1476,7 @@ int threads_sigpost(process_t *process, thread_t *thread, int sig) return EOK; default: + /* Handles any value of 'sig' not covered by the case labels. */ break; } hal_spinlockSet(&threads_common.spinlock, &sc); @@ -1452,8 +1490,8 @@ int threads_sigpost(process_t *process, thread_t *thread, int sig) if (thread != NULL) { do { - if (sigbit & ~thread->sigmask) { - if (thread->interruptible) { + if ((sigbit & ~thread->sigmask) != 0U) { + if (thread->interruptible != 0U) { _thread_interrupt(thread); } @@ -1472,7 +1510,7 @@ int threads_sigpost(process_t *process, thread_t *thread, int sig) } } - hal_cpuReschedule(&threads_common.spinlock, &sc); + (void)hal_cpuReschedule(&threads_common.spinlock, &sc); return EOK; } @@ -1485,12 +1523,12 @@ static int _threads_checkSignal(thread_t *selected, process_t *proc, cpu_context unsigned int sig; sig = (selected->sigpend | proc->sigpend) & ~selected->sigmask; - if ((sig != 0) && (proc->sighandler != NULL)) { + if ((sig != 0U) && (proc->sighandler != NULL)) { sig = hal_cpuGetLastBit(sig); - if (hal_cpuPushSignal(selected->kstack + selected->kstacksz, proc->sighandler, signalCtx, sig, oldmask, src) == 0) { - selected->sigpend &= ~(1 << sig); - proc->sigpend &= ~(1 << sig); + if (hal_cpuPushSignal(selected->kstack + selected->kstacksz, proc->sighandler, signalCtx, (int)sig, oldmask, src) == 0) { + selected->sigpend &= ~(0x1U << sig); + proc->sigpend &= ~(0x1U << sig); return 0; } } @@ -1517,6 +1555,7 @@ void threads_setupUserReturn(void *retval, cpu_context_t *ctx) hal_cpuSetReturnValue(ctx, retval); if (_threads_checkSignal(thread, thread->process, signalCtx, thread->sigmask, SIG_SRC_SCALL) == 0) { + /* parasoft-suppress-next-line MISRAC2012-RULE_11_1 "f is passed to function hal_jmp which need void * type" */ f = thread->process->sighandler; hal_spinlockClear(&threads_common.spinlock, &sc); hal_jmp(f, kstackTop, hal_cpuGetUserSP(signalCtx), 0, NULL); @@ -1527,7 +1566,7 @@ void threads_setupUserReturn(void *retval, cpu_context_t *ctx) } -int threads_sigsuspend(unsigned int mask) +int threads_sigsuspend(unsigned int amask) { thread_t *thread; spinlock_ctx_t sc; @@ -1547,10 +1586,11 @@ int threads_sigsuspend(unsigned int mask) hal_cpuSetReturnValue(ctx, (void *)-EINTR); oldmask = thread->sigmask; - thread->sigmask = mask; + thread->sigmask = amask; /* check for pending signals before sleep - with the new mask */ if (_threads_checkSignal(thread, thread->process, signalCtx, oldmask, SIG_SRC_SCALL) == 0) { + /* parasoft-suppress-next-line MISRAC2012-RULE_11_1 "f is passed to function hal_jmp which need void * type" */ f = thread->process->sighandler; hal_spinlockClear(&threads_common.spinlock, &sc); hal_jmp(f, kstackTop, hal_cpuGetUserSP(signalCtx), 0, NULL); @@ -1560,12 +1600,13 @@ int threads_sigsuspend(unsigned int mask) /* Sleep forever (atomic lock release), interruptible */ thread_t *tqueue = NULL; _proc_threadEnqueue(&tqueue, 0, 1); - hal_cpuReschedule(&threads_common.spinlock, &sc); + (void)hal_cpuReschedule(&threads_common.spinlock, &sc); /* after wakeup */ /* check for pending signals before restoring the old mask */ hal_spinlockSet(&threads_common.spinlock, &sc); if (_threads_checkSignal(thread, thread->process, signalCtx, oldmask, SIG_SRC_SCALL) == 0) { + /* parasoft-suppress-next-line MISRAC2012-RULE_11_1 "f is passed to function hal_jmp which need void * type" */ f = thread->process->sighandler; hal_spinlockClear(&threads_common.spinlock, &sc); hal_jmp(f, kstackTop, hal_cpuGetUserSP(signalCtx), 0, NULL); @@ -1642,7 +1683,7 @@ static int _proc_lockSet(lock_t *lock, int interruptible, spinlock_ctx_t *scp) } if ((lock->attr.type == PH_LOCK_RECURSIVE) && (lock->owner == current)) { - if ((lock->depth + 1) == 0) { + if (((int)lock->depth + 1) == 0) { ret = -EAGAIN; } else { @@ -1655,7 +1696,7 @@ static int _proc_lockSet(lock_t *lock, int interruptible, spinlock_ctx_t *scp) } LIB_ASSERT(lock->owner != current, "lock: %s, pid: %d, tid: %d, deadlock on itself", - lock->name, (current->process != NULL) ? process_getPid(current->process) : 0, proc_getTid(current)); + lock->name, (current->process != NULL) ? process_getPid(current->process) : 0, proc_getTid(current)); if (_proc_lockTry(current, lock) < 0) { /* Lock owner might inherit our priority */ @@ -1746,7 +1787,7 @@ static int _proc_lockUnlock(lock_t *lock) current = _proc_current(); LIB_ASSERT(LIST_BELONGS(&owner->locks, lock) != 0, "lock: %s, owner pid: %d, owner tid: %d, lock is not on the list", - lock->name, (owner->process != NULL) ? process_getPid(owner->process) : 0, proc_getTid(owner)); + lock->name, (owner->process != NULL) ? process_getPid(owner->process) : 0, proc_getTid(owner)); if ((lock->attr.type == PH_LOCK_ERRORCHECK) || (lock->attr.type == PH_LOCK_RECURSIVE)) { if (lock->owner != current) { @@ -1755,9 +1796,9 @@ static int _proc_lockUnlock(lock_t *lock) } } - if ((lock->attr.type == PH_LOCK_RECURSIVE) && (lock->depth > 0)) { + if ((lock->attr.type == PH_LOCK_RECURSIVE) && (lock->depth > 0U)) { lock->depth--; - if (lock->depth != 0) { + if (lock->depth != 0U) { hal_spinlockClear(&threads_common.spinlock, &sc); return 0; } @@ -1767,9 +1808,9 @@ static int _proc_lockUnlock(lock_t *lock) if (lock->queue != NULL) { /* Calculate appropriate priority, wakeup waiting thread and give it a lock */ lock->owner = lock->queue; - lockPriority = _proc_lockGetPriority(lock); - if (lockPriority < lock->owner->priority) { - _proc_threadSetPriority(lock->queue, lockPriority); + lockPriority = (int)_proc_lockGetPriority(lock); + if ((unsigned int)lockPriority < lock->owner->priority) { + _proc_threadSetPriority(lock->queue, (unsigned int)lockPriority); } _proc_threadDequeue(lock->owner); LIST_ADD(&lock->owner->locks, lock); @@ -1783,8 +1824,8 @@ static int _proc_lockUnlock(lock_t *lock) _proc_threadSetPriority(owner, _proc_threadGetPriority(owner)); LIB_ASSERT(current->priority <= current->priorityBase, "pid: %d, tid: %d, basePrio: %d, priority degraded (%d)", - (current->process != NULL) ? process_getPid(current->process) : 0, proc_getTid(current), current->priorityBase, - current->priority); + (current->process != NULL) ? process_getPid(current->process) : 0, proc_getTid(current), current->priorityBase, + current->priority); hal_spinlockClear(&threads_common.spinlock, &sc); @@ -1800,7 +1841,7 @@ static void proc_lockUnlock(lock_t *lock) if (_proc_lockUnlock(lock) > 0) { hal_spinlockClear(&lock->spinlock, &sc); - hal_cpuReschedule(NULL, NULL); + (void)hal_cpuReschedule(NULL, NULL); } else { hal_spinlockClear(&lock->spinlock, &sc); @@ -1814,11 +1855,11 @@ static int _proc_lockClear(lock_t *lock) thread_t *current = proc_current(); LIB_ASSERT(lock->owner != NULL, "lock: %s, pid: %d, tid: %d, unlock on not locked lock", - lock->name, (current->process != NULL) ? process_getPid(current->process) : 0, proc_getTid(current)); + lock->name, (current->process != NULL) ? process_getPid(current->process) : 0, proc_getTid(current)); LIB_ASSERT(lock->owner == current, "lock: %s, pid: %d, tid: %d, owner: %d, unlocking someone's else lock", - lock->name, (current->process != NULL) ? process_getPid(current->process) : 0, - proc_getTid(current), proc_getTid(lock->owner)); + lock->name, (current->process != NULL) ? process_getPid(current->process) : 0, + proc_getTid(current), proc_getTid(lock->owner)); #endif if (lock->owner == NULL) { @@ -1838,12 +1879,12 @@ int proc_lockClear(lock_t *lock) return -EINVAL; } - hal_spinlockSet(&lock->spinlock, &sc); + (void)hal_spinlockSet(&lock->spinlock, &sc); err = _proc_lockClear(lock); if (err > 0) { hal_spinlockClear(&lock->spinlock, &sc); - hal_cpuReschedule(NULL, NULL); + (void)hal_cpuReschedule(NULL, NULL); return EOK; } @@ -1863,7 +1904,7 @@ int proc_lockSet2(lock_t *l1, lock_t *l2) } while (proc_lockTry(l2) < 0) { - proc_lockClear(l1); + (void)proc_lockClear(l1); err = proc_lockSet(l2); if (err < 0) { return err; @@ -1890,7 +1931,7 @@ int proc_lockWait(thread_t **queue, lock_t *lock, time_t timeout) if (err >= 0) { err = proc_threadWaitEx(queue, &lock->spinlock, timeout, 1, &sc); if (err != -EINTR) { - _proc_lockSet(lock, 0, &sc); + (void)_proc_lockSet(lock, 0, &sc); } } @@ -1907,7 +1948,7 @@ int proc_lockDone(lock_t *lock) hal_spinlockSet(&lock->spinlock, &sc); if (lock->owner != NULL) { - _proc_lockUnlock(lock); + (void)_proc_lockUnlock(lock); } hal_spinlockClear(&lock->spinlock, &sc); @@ -1975,8 +2016,9 @@ void proc_threadsDump(unsigned int priority) do { lib_printf("[%p] ", t); - if (t == NULL) + if (t == NULL) { break; + } t = t->next; } while (t != threads_common.ready[priority]); @@ -1991,7 +2033,8 @@ void proc_threadsDump(unsigned int priority) int proc_threadsList(int n, threadinfo_t *info) { - int i = 0, len, argc, space; + int i = 0, argc; + unsigned int len, space; thread_t *t; map_entry_t *entry; vm_map_t *map; @@ -1999,7 +2042,7 @@ int proc_threadsList(int n, threadinfo_t *info) char *name; spinlock_ctx_t sc; - proc_lockSet(&threads_common.lock); + (void)proc_lockSet(&threads_common.lock); t = lib_treeof(thread_t, idlinkage, lib_rbMinimum(threads_common.id.root)); @@ -2015,21 +2058,25 @@ int proc_threadsList(int n, threadinfo_t *info) } hal_spinlockSet(&threads_common.spinlock, &sc); - info[i].tid = proc_getTid(t); - info[i].priority = t->priorityBase; - info[i].state = t->state; + info[i].tid = (unsigned int)proc_getTid(t); + info[i].priority = (int)t->priorityBase; + info[i].state = (int)t->state; now = _proc_gettimeRaw(); - if (now != t->startTime) - info[i].load = (t->cpuTime * 1000) / (now - t->startTime); - else + if (now != t->startTime) { + info[i].load = (int)((t->cpuTime * 1000) / (now - t->startTime)); + } + else { info[i].load = 0; + } info[i].cpuTime = t->cpuTime; - if (t->state == READY && t->maxWait < now - t->readyTime) + if (t->state == (unsigned int)READY && t->maxWait < now - t->readyTime) { info[i].wait = now - t->readyTime; - else + } + else { info[i].wait = t->maxWait; + } hal_spinlockClear(&threads_common.spinlock, &sc); if (t->process != NULL) { @@ -2040,24 +2087,27 @@ int proc_threadsList(int n, threadinfo_t *info) name = info[i].name; if (t->process->argv != NULL) { - for (argc = 0; t->process->argv[argc] != NULL && space > 0; ++argc) { - len = min(hal_strlen(t->process->argv[argc]) + 1, space); + for (argc = 0; t->process->argv[argc] != NULL; ++argc) { + if ((int)space <= 0) { + break; + } + len = min(hal_strlen(t->process->argv[argc]) + 1U, space); hal_memcpy(name, t->process->argv[argc], len); - name[len - 1] = ' '; + name[len - 1U] = ' '; name += len; space -= len; } - *(name - 1) = 0; + *(name - 1) = '\0'; } else { - len = hal_strlen(t->process->path) + 1; + len = hal_strlen(t->process->path) + 1U; hal_memcpy(info[i].name, t->process->path, min(space, len)); } - info[i].name[sizeof(info[i].name) - 1] = 0; + info[i].name[sizeof(info[i].name) - 1U] = '\0'; } else { - info[i].name[0] = 0; + info[i].name[0] = '\0'; } } else { @@ -2068,30 +2118,36 @@ int proc_threadsList(int n, threadinfo_t *info) info[i].vmem = 0; #ifdef NOMMU - if ((t->process != NULL) && (entry = t->process->entries) != NULL) { - do { - info[i].vmem += entry->size; - entry = entry->next; - } while (entry != t->process->entries); + if (t->process != NULL) { + entry = t->process->entries; + if (entry != NULL) { + do { + info[i].vmem += (int)entry->size; + entry = entry->next; + } while (entry != t->process->entries); + } } else #endif if (map != NULL) { - proc_lockSet(&map->lock); + (void)proc_lockSet(&map->lock); entry = lib_treeof(map_entry_t, linkage, lib_rbMinimum(map->tree.root)); while (entry != NULL) { - info[i].vmem += entry->size; + info[i].vmem += (int)entry->size; entry = lib_treeof(map_entry_t, linkage, lib_rbNext(&entry->linkage)); } - proc_lockClear(&map->lock); + (void)proc_lockClear(&map->lock); + } + else { + /* No action required */ } ++i; t = lib_idtreeof(thread_t, idlinkage, lib_idtreeNext(&t->idlinkage.linkage)); } - proc_lockClear(&threads_common.lock); + (void)proc_lockClear(&threads_common.lock); return i; } @@ -2123,14 +2179,16 @@ int _threads_init(vm_map_t *kmap, vm_object_t *kernel) threads_common.perfGather = 0; - proc_lockInit(&threads_common.lock, &proc_lockAttrDefault, "threads.common"); + (void)proc_lockInit(&threads_common.lock, &proc_lockAttrDefault, "threads.common"); - for (i = 0; i < sizeof(threads_common.stackCanary); ++i) - threads_common.stackCanary[i] = (i & 1) ? 0xaa : 0x55; + for (i = 0U; i < sizeof(threads_common.stackCanary); ++i) { + threads_common.stackCanary[i] = ((i & 1U) != 0U) ? 0xaaU : 0x55U; + } /* Initiaizlie scheduler queue */ - for (i = 0; i < sizeof(threads_common.ready) / sizeof(thread_t *); i++) + for (i = 0; i < sizeof(threads_common.ready) / sizeof(thread_t *); i++) { threads_common.ready[i] = NULL; + } lib_rbInit(&threads_common.sleeping, threads_sleepcmp, NULL); lib_idtreeInit(&threads_common.id); @@ -2140,25 +2198,26 @@ int _threads_init(vm_map_t *kmap, vm_object_t *kernel) hal_spinlockCreate(&threads_common.spinlock, "threads.spinlock"); /* Allocate and initialize current threads array */ - if ((threads_common.current = (thread_t **)vm_kmalloc(sizeof(thread_t *) * hal_cpuGetCount())) == NULL) + if ((threads_common.current = (thread_t **)vm_kmalloc(sizeof(thread_t *) * hal_cpuGetCount())) == NULL) { return -ENOMEM; + } /* Run idle thread on every cpu */ for (i = 0; i < hal_cpuGetCount(); i++) { threads_common.current[i] = NULL; - proc_threadCreate(NULL, threads_idlethr, NULL, sizeof(threads_common.ready) / sizeof(thread_t *) - 1, SIZE_KSTACK, NULL, 0, NULL); + (void)proc_threadCreate(NULL, threads_idlethr, NULL, sizeof(threads_common.ready) / sizeof(thread_t *) - 1U, (size_t)SIZE_KSTACK, NULL, 0, NULL); } /* Install scheduler on clock interrupt */ #ifdef PENDSV_IRQ - hal_memset(&threads_common.pendsvHandler, NULL, sizeof(threads_common.pendsvHandler)); + hal_memset(&threads_common.pendsvHandler, 0, sizeof(threads_common.pendsvHandler)); threads_common.pendsvHandler.f = threads_schedule; threads_common.pendsvHandler.n = PENDSV_IRQ; hal_interruptsSetHandler(&threads_common.pendsvHandler); #endif - hal_memset(&threads_common.timeintrHandler, NULL, sizeof(threads_common.timeintrHandler)); - hal_timerRegister(threads_timeintr, NULL, &threads_common.timeintrHandler); + hal_memset(&threads_common.timeintrHandler, 0, sizeof(threads_common.timeintrHandler)); + (void)hal_timerRegister(threads_timeintr, NULL, &threads_common.timeintrHandler); return EOK; } diff --git a/proc/threads.h b/proc/threads.h index a4b1f6324..dd65db561 100644 --- a/proc/threads.h +++ b/proc/threads.h @@ -24,16 +24,21 @@ #include "lock.h" #define MAX_TID MAX_ID -#define THREAD_END 1 -#define THREAD_END_NOW 2 +#define THREAD_END 1U +#define THREAD_END_NOW 2U /* Parent thread states */ -enum { PREFORK = 0, FORKING = 1, FORKED }; +enum { PREFORK = 0, + FORKING = 1, + FORKED }; /* Child thread states */ -enum { OWNSTACK = 0, PARENTSTACK }; +enum { OWNSTACK = 0, + PARENTSTACK }; -enum { READY = 0, SLEEP, GHOST }; +enum { READY = 0, + SLEEP, + GHOST }; typedef struct _thread_t { @@ -52,7 +57,7 @@ typedef struct _thread_t { struct _thread_t *blocking; struct _thread_t **wait; - volatile time_t wakeup; + time_t wakeup; unsigned priorityBase : 4; unsigned priority : 4; @@ -118,22 +123,13 @@ extern thread_t *proc_current(void); extern void threads_canaryInit(thread_t *t, void *ustack); -extern int proc_threadCreate(process_t *process, void (*start)(void *), int *id, unsigned int priority, size_t kstacksz, void *stack, size_t stacksz, void *arg); +extern int proc_threadCreate(process_t *process, void (*start)(void *harg), int *id, unsigned int priority, size_t kstacksz, void *stack, size_t stacksz, void *arg); extern int proc_threadPriority(int priority); -extern void proc_threadProtect(void); - - -extern void proc_threadUnprotect(void); - - -extern void proc_threadEnd(void); - - -extern int proc_threadJoin(unsigned int id); +extern __attribute__((noreturn)) void proc_threadEnd(void); extern void proc_threadDestroy(thread_t *t); @@ -142,9 +138,6 @@ extern void proc_threadDestroy(thread_t *t); extern void proc_threadsDestroy(thread_t **threads, const thread_t *except); -extern int proc_waitpid(int pid, int *stat, int options); - - extern int proc_join(int tid, time_t timeout); @@ -157,9 +150,6 @@ extern int proc_threadsList(int n, threadinfo_t *info); extern int proc_threadsOther(thread_t *t); -extern void proc_zombie(process_t *proc); - - extern int proc_threadSleep(time_t us); @@ -181,9 +171,6 @@ extern int proc_threadBroadcast(thread_t **queue); extern void proc_threadBroadcastYield(thread_t **queue); -extern int threads_getCpuTime(thread_t *t); - - extern thread_t *threads_findThread(int tid); @@ -199,9 +186,6 @@ extern void proc_gettime(time_t *raw, time_t *offs); extern int proc_settime(time_t offs); -extern time_t proc_nextWakeup(void); - - extern void proc_longjmp(cpu_context_t *ctx); @@ -214,7 +198,7 @@ extern int _threads_init(vm_map_t *kmap, vm_object_t *kernel); extern int threads_sigpost(process_t *process, thread_t *thread, int sig); -extern int threads_sigsuspend(unsigned int mask); +extern int threads_sigsuspend(unsigned int amask); extern void threads_setupUserReturn(void *retval, cpu_context_t *ctx); diff --git a/proc/userintr.c b/proc/userintr.c index 090b00325..a63cae00b 100644 --- a/proc/userintr.c +++ b/proc/userintr.c @@ -20,7 +20,7 @@ #include "proc.h" -struct { +static struct { userintr_t *volatile active; } userintr_common; @@ -28,16 +28,16 @@ struct { void userintr_put(userintr_t *ui) { thread_t *t = proc_current(); - int rem; + unsigned int rem; LIB_ASSERT(ui != NULL, "process: %s, pid: %d, tid: %d, ui == NULL", - t->process->path, process_getPid(t->process), proc_getTid(t)); + t->process->path, process_getPid(t->process), proc_getTid(t)); rem = resource_put(t->process, &ui->resource); LIB_ASSERT(rem >= 0, "process: %s, pid: %d, tid: %d, refcnt below zero", - t->process->path, process_getPid(t->process), proc_getTid(t)); - if (rem <= 0) { - hal_interruptsDeleteHandler(&ui->handler); + t->process->path, process_getPid(t->process), proc_getTid(t)); + if (rem <= 0U) { + (void)hal_interruptsDeleteHandler(&ui->handler); if (ui->cond != NULL) { cond_put(ui->cond); @@ -54,8 +54,9 @@ static int userintr_dispatch(unsigned int n, cpu_context_t *ctx, void *arg) int ret, reschedule = 0; process_t *p = NULL; - if (proc_current() != NULL) + if (proc_current() != NULL) { p = (proc_current())->process; + } /* Switch into the handler address space */ pmap_switch(ui->process->pmapp); @@ -66,18 +67,19 @@ static int userintr_dispatch(unsigned int n, cpu_context_t *ctx, void *arg) if (ret >= 0 && ui->cond != NULL) { reschedule = 1; - proc_threadBroadcast(&ui->cond->queue); + (void)proc_threadBroadcast(&ui->cond->queue); } /* Restore process address space */ - if ((p != NULL) && (p->pmapp != NULL)) + if ((p != NULL) && (p->pmapp != NULL)) { pmap_switch(p->pmapp); + } return reschedule; } -int userintr_setHandler(unsigned int n, int (*f)(unsigned int, void *), void *arg, handle_t c) +int userintr_setHandler(unsigned int n, int (*f)(unsigned int n, void *arg), void *arg, handle_t c) { process_t *process = proc_current()->process; userintr_t *ui; @@ -133,7 +135,7 @@ int userintr_setHandler(unsigned int n, int (*f)(unsigned int, void *), void *ar id = resource_alloc(process, &ui->resource); if (id < 0) { - hal_interruptsDeleteHandler(&ui->handler); + (void)hal_interruptsDeleteHandler(&ui->handler); if (cond != NULL) { cond_put(cond); } @@ -141,7 +143,7 @@ int userintr_setHandler(unsigned int n, int (*f)(unsigned int, void *), void *ar return -ENOMEM; } - resource_put(process, &ui->resource); + (void)resource_put(process, &ui->resource); return id; } diff --git a/proc/userintr.h b/proc/userintr.h index 46fe99dad..10e965106 100644 --- a/proc/userintr.h +++ b/proc/userintr.h @@ -25,7 +25,7 @@ typedef struct _userintr_t { resource_t resource; intr_handler_t handler; process_t *process; - int (*f)(unsigned int, void *); + int (*f)(unsigned int n, void *arg); void *arg; cond_t *cond; } userintr_t; @@ -34,7 +34,7 @@ typedef struct _userintr_t { extern void userintr_put(userintr_t *ui); -extern int userintr_setHandler(unsigned int n, int (*f)(unsigned int, void *), void *arg, handle_t c); +extern int userintr_setHandler(unsigned int n, int (*f)(unsigned int n, void *arg), void *arg, handle_t c); extern userintr_t *userintr_active(void); diff --git a/syscalls.c b/syscalls.c index eb4528388..63310f04a 100644 --- a/syscalls.c +++ b/syscalls.c @@ -14,7 +14,10 @@ * %LICENSE% */ +/* parasoft-begin-suppress MISRAC2012-RULE_8_4-a "Compatible function declaration is not possible for syscalls" */ + #include "hal/hal.h" +#include "hal/cpu.h" #include "include/errno.h" #include "include/sysinfo.h" #include "include/mman.h" @@ -55,7 +58,8 @@ int syscalls_sys_mmap(void *ustack) { void **vaddr; size_t size; - int prot, flags, fildes; + int prot, fildes; + unsigned int flags; off_t offs; vm_object_t *o; oid_t oid; @@ -65,7 +69,7 @@ int syscalls_sys_mmap(void *ustack) GETFROMSTACK(ustack, void **, vaddr, 0); GETFROMSTACK(ustack, size_t, size, 1); GETFROMSTACK(ustack, int, prot, 2); - GETFROMSTACK(ustack, int, flags, 3); + GETFROMSTACK(ustack, unsigned int, flags, 3); GETFROMSTACK(ustack, int, fildes, 4); GETFROMSTACK(ustack, off_t, offs, 5); @@ -75,11 +79,11 @@ int syscalls_sys_mmap(void *ustack) return -EFAULT; } - if ((flags & MAP_ANONYMOUS) != 0) { - if ((flags & MAP_PHYSMEM) != 0) { + if ((flags & MAP_ANONYMOUS) != 0U) { + if ((flags & MAP_PHYSMEM) != 0U) { o = VM_OBJ_PHYSMEM; } - else if ((flags & MAP_CONTIGUOUS) != 0) { + else if ((flags & MAP_CONTIGUOUS) != 0U) { o = vm_objectContiguous(size); if (o == NULL) { return -ENOMEM; @@ -102,8 +106,9 @@ int syscalls_sys_mmap(void *ustack) flags &= ~(MAP_ANONYMOUS | MAP_CONTIGUOUS | MAP_PHYSMEM); - (*vaddr) = vm_mmap(proc_current()->process->mapp, *vaddr, NULL, size, PROT_USER | prot, o, (o == NULL) ? -1 : offs, flags); - vm_objectPut(o); + /* parasoft-suppress-next-line MISRAC2012-RULE_10_3 "prot is popped from stack -> size of int stays" */ + (*vaddr) = vm_mmap(proc_current()->process->mapp, *vaddr, NULL, size, PROT_USER | (unsigned int)prot, o, (o == NULL) ? -1 : offs, flags); + (void)vm_objectPut(o); if ((*vaddr) == NULL) { /* TODO: pass specific errno from vm_mmap */ @@ -144,7 +149,8 @@ int syscalls_sys_mprotect(void *ustack) GETFROMSTACK(ustack, size_t, len, 1); GETFROMSTACK(ustack, int, prot, 2); - err = vm_mprotect(proc->mapp, vaddr, len, PROT_USER | prot); + /* parasoft-suppress-next-line MISRAC2012_RULE_10_3 "prot is popped from stack -> size of int stays" */ + err = (int)vm_mprotect(proc->mapp, vaddr, len, PROT_USER | (unsigned int)prot); if (err < 0) { return err; } @@ -238,17 +244,17 @@ int syscalls_sys_exit(void *ustack) int syscalls_sys_waitpid(void *ustack) { process_t *proc = proc_current()->process; - int pid, *stat, options; + int pid, *status, options; GETFROMSTACK(ustack, int, pid, 0); - GETFROMSTACK(ustack, int *, stat, 1); + GETFROMSTACK(ustack, int *, status, 1); GETFROMSTACK(ustack, int, options, 2); - if ((stat != NULL) && (vm_mapBelongs(proc, stat, sizeof(*stat)) < 0)) { + if ((status != NULL) && (vm_mapBelongs(proc, status, sizeof(*status)) < 0)) { return -EFAULT; } - return posix_waitpid(pid, stat, options); + return posix_waitpid(pid, status, (unsigned int)options); } @@ -289,14 +295,15 @@ int syscalls_gettid(void *ustack) int syscalls_beginthreadex(void *ustack) { + typedef void (*start_func)(void *harg); process_t *proc = proc_current()->process; - void (*start)(void *); + void (*start)(void *harg); unsigned int priority, stacksz; void *stack, *arg; int *id; int err; - GETFROMSTACK(ustack, void *, start, 0); + GETFROMSTACK(ustack, start_func, start, 0); GETFROMSTACK(ustack, unsigned int, priority, 1); GETFROMSTACK(ustack, void *, stack, 2); GETFROMSTACK(ustack, unsigned int, stacksz, 3); @@ -309,20 +316,19 @@ int syscalls_beginthreadex(void *ustack) proc_get(proc); - err = proc_threadCreate(proc, start, id, priority, SIZE_KSTACK, stack, stacksz, arg); + err = proc_threadCreate(proc, start, id, priority, (size_t)SIZE_KSTACK, stack, stacksz, arg); if (err < 0) { - proc_put(proc); + (void)proc_put(proc); } return err; } -int syscalls_endthread(void *ustack) +void syscalls_endthread(void *ustack) { proc_threadEnd(); - return EOK; } @@ -351,7 +357,7 @@ int syscalls_nsleep(void *ustack) proc_gettime(&start, NULL); - us = ((*sec) * 1000 * 1000) + (((*nsec) + 999) / 1000); + us = ((*sec) * 1000LL * 1000LL) + (((*nsec) + 999LL) / 1000LL); ret = proc_threadSleep(us); @@ -363,8 +369,8 @@ int syscalls_nsleep(void *ustack) elapsed = stop - start; if (us > elapsed) { unslept = us - elapsed; - *sec = unslept / (1000 * 1000); - *nsec = (unslept % (1000 * 1000)) * 1000; + *sec = unslept / (1000LL * 1000LL); + *nsec = ((long int)unslept % (1000L * 1000L)) * 1000L; } } @@ -397,7 +403,7 @@ int syscalls_threadsinfo(void *ustack) GETFROMSTACK(ustack, int, n, 0); GETFROMSTACK(ustack, threadinfo_t *, info, 1); - if (vm_mapBelongs(proc, info, sizeof(*info) * n) < 0) { + if (vm_mapBelongs(proc, info, sizeof(*info) * (unsigned int)n) < 0) { return -EFAULT; } @@ -446,14 +452,14 @@ int syscalls_syspageprog(void *ustack) sz = syspage_progSize(); if (i < 0) { - return sz; + return (int)sz; } - if (i >= sz) { + if (i >= (int)sz) { return -EINVAL; } - progSys = syspage_progIdResolve(i); + progSys = syspage_progIdResolve((unsigned int)i); if (progSys == NULL) { return -EINVAL; } @@ -464,16 +470,16 @@ int syscalls_syspageprog(void *ustack) /* TODO: change syspageprog_t to allocate data for name dynamically */ name = progSys->argv; - for (sz = 0; (name[sz] != '\0') && (name[sz] != ';'); ++sz) { + for (sz = 0U; (name[sz] != '\0') && (name[sz] != ';'); ++sz) { } - sz = min(sizeof(prog->name) - 1, sz); + sz = min((sizeof(prog->name) - 1U), sz); if (*name == 'X') { name++; sz--; } - hal_memcpy(prog->name, name, sz); + hal_memcpy(prog->name, name, (size_t)sz); prog->name[sz] = '\0'; return EOK; @@ -659,16 +665,17 @@ int syscalls_resourceDestroy(void *ustack) int syscalls_interrupt(void *ustack) { + typedef int (*handler_function)(unsigned int harg_1, void *harg_2); process_t *proc = proc_current()->process; unsigned int n; - void *f; + handler_function f; void *data; handle_t cond; handle_t *handle; int res; GETFROMSTACK(ustack, unsigned int, n, 0); - GETFROMSTACK(ustack, void *, f, 1); + GETFROMSTACK(ustack, handler_function, f, 1); GETFROMSTACK(ustack, void *, data, 2); GETFROMSTACK(ustack, handle_t, cond, 3); GETFROMSTACK(ustack, handle_t *, handle, 4); @@ -677,6 +684,7 @@ int syscalls_interrupt(void *ustack) return -EFAULT; } + res = userintr_setHandler(n, f, data, cond); if (res < 0) { return res; @@ -720,7 +728,7 @@ void syscalls_portDestroy(void *ustack) } -u32 syscalls_portRegister(void *ustack) +int syscalls_portRegister(void *ustack) { process_t *proc = proc_current()->process; unsigned int port; @@ -937,17 +945,18 @@ addr_t syscalls_va2pa(void *ustack) GETFROMSTACK(ustack, void *, va, 0); - return (pmap_resolve(proc_current()->process->pmapp, (void *)((ptr_t)va & ~0xfff)) & ~0xfff) + ((ptr_t)va & 0xfff); + return (pmap_resolve(proc_current()->process->pmapp, (void *)((ptr_t)va & ~0xfffU)) & ~0xfffU) + ((ptr_t)va & 0xfffU); } int syscalls_signalHandle(void *ustack) { - void *handler; + typedef void (*handler_func)(void); + handler_func handler; unsigned mask, mmask; thread_t *thread; - GETFROMSTACK(ustack, void *, handler, 0); + GETFROMSTACK(ustack, handler_func, handler, 0); GETFROMSTACK(ustack, unsigned, mask, 1); GETFROMSTACK(ustack, unsigned, mmask, 2); @@ -977,20 +986,20 @@ int syscalls_signalPost(void *ustack) if (tid >= 0) { t = threads_findThread(tid); if (t == NULL) { - proc_put(proc); + (void)proc_put(proc); return -EINVAL; } } if ((t != NULL) && (t->process != proc)) { - proc_put(proc); + (void)proc_put(proc); threads_put(t); return -EINVAL; } err = threads_sigpost(proc, t, signal); - proc_put(proc); + (void)proc_put(proc); if (t != NULL) { threads_put(t); } @@ -1090,11 +1099,11 @@ ssize_t syscalls_sys_read(char *ustack) GETFROMSTACK(ustack, size_t, nbyte, 2); GETFROMSTACK(ustack, off_t, offset, 3); - if ((buf == NULL) && (nbyte != 0)) { + if ((buf == NULL) && (nbyte != 0U)) { return -EFAULT; } - if ((buf != NULL) && (nbyte != 0) && (vm_mapBelongs(proc, buf, nbyte) < 0)) { + if ((buf != NULL) && (nbyte != 0U) && (vm_mapBelongs(proc, buf, nbyte) < 0)) { return -EFAULT; } @@ -1115,11 +1124,11 @@ ssize_t syscalls_sys_write(char *ustack) GETFROMSTACK(ustack, size_t, nbyte, 2); GETFROMSTACK(ustack, off_t, offset, 3); - if ((buf == NULL) && (nbyte != 0)) { + if ((buf == NULL) && (nbyte != 0U)) { return -EFAULT; } - if ((buf != NULL) && (nbyte != 0) && (vm_mapBelongs(proc, buf, nbyte) < 0)) { + if ((buf != NULL) && (nbyte != 0U) && (vm_mapBelongs(proc, buf, nbyte) < 0)) { return -EFAULT; } @@ -1208,10 +1217,10 @@ int syscalls_sys_ftruncate(char *ustack) int syscalls_sys_fcntl(char *ustack) { - unsigned int fd; + int fd; unsigned int cmd; - GETFROMSTACK(ustack, unsigned int, fd, 0); + GETFROMSTACK(ustack, int, fd, 0); GETFROMSTACK(ustack, unsigned int, cmd, 1); return posix_fcntl(fd, cmd, ustack); @@ -1225,7 +1234,7 @@ int syscalls_sys_pipe(char *ustack) GETFROMSTACK(ustack, int *, fildes, 0); - if (vm_mapBelongs(proc, fildes, sizeof(*fildes) * 2) < 0) { + if (vm_mapBelongs(proc, fildes, sizeof(*fildes) * 2U) < 0) { return -EFAULT; } @@ -1581,11 +1590,11 @@ ssize_t syscalls_sys_recvmsg(char *ustack) return -EFAULT; } - if ((msg->msg_iovlen != 0) && (vm_mapBelongs(proc, msg->msg_iov, sizeof(*msg->msg_iov) * msg->msg_iovlen) < 0)) { + if ((msg->msg_iovlen != 0) && (vm_mapBelongs(proc, msg->msg_iov, sizeof(*msg->msg_iov) * (size_t)msg->msg_iovlen) < 0)) { return -EFAULT; } - for (i = 0; i < msg->msg_iovlen; ++i) { + for (i = 0; i < (size_t)msg->msg_iovlen; ++i) { if ((msg->msg_iov[i].iov_base != NULL) && (vm_mapBelongs(proc, msg->msg_iov[i].iov_base, msg->msg_iov[i].iov_len) < 0)) { return -EFAULT; } @@ -1619,11 +1628,11 @@ ssize_t syscalls_sys_sendmsg(char *ustack) return -EFAULT; } - if ((msg->msg_iovlen != 0) && (vm_mapBelongs(proc, msg->msg_iov, sizeof(*msg->msg_iov) * msg->msg_iovlen) < 0)) { + if ((msg->msg_iovlen != 0) && (vm_mapBelongs(proc, msg->msg_iov, sizeof(*msg->msg_iov) * (size_t)msg->msg_iovlen) < 0)) { return -EFAULT; } - for (i = 0; i < msg->msg_iovlen; ++i) { + for (i = 0; i < (size_t)msg->msg_iovlen; ++i) { if ((msg->msg_iov[i].iov_base != NULL) && (vm_mapBelongs(proc, msg->msg_iov[i].iov_base, msg->msg_iov[i].iov_len) < 0)) { return -EFAULT; } @@ -1668,7 +1677,7 @@ int syscalls_sys_socketpair(char *ustack) GETFROMSTACK(ustack, int, protocol, 2); GETFROMSTACK(ustack, int *, sv, 3); - if (vm_mapBelongs(proc, sv, sizeof(*sv) * 2) < 0) { + if (vm_mapBelongs(proc, sv, sizeof(*sv) * 2U) < 0) { return -EFAULT; } @@ -1720,7 +1729,7 @@ int syscalls_sys_setsockopt(char *ustack) GETFROMSTACK(ustack, const void *, optval, 3); GETFROMSTACK(ustack, socklen_t, optlen, 4); - if ((optval != NULL) && (optlen != 0) && (vm_mapBelongs(proc, optval, optlen) < 0)) { + if ((optval != NULL) && (optlen != 0U) && (vm_mapBelongs(proc, optval, optlen) < 0)) { return -EFAULT; } @@ -1872,22 +1881,21 @@ int syscalls_notimplemented(void) return -ENOTTY; } - +/* parasoft-suppress-next-line MISRAC2012-RULE_11_1 "Syscalls are in different types" */ const void *const syscalls[] = { SYSCALLS(SYSCALLS_NAME) }; -const char *const syscall_strings[] = { SYSCALLS(SYSCALLS_STRING) }; - void *syscalls_dispatch(int n, char *ustack, cpu_context_t *ctx) { void *retval; - if (n >= (sizeof(syscalls) / sizeof(syscalls[0]))) { + if (n >= (int)(sizeof(syscalls) / sizeof(syscalls[0]))) { return (void *)-EINVAL; } - retval = ((void *(*)(char *))syscalls[n])(ustack); + /* parasoft-suppress-next-line MISRAC2012-RULE_11_1 MISRAC2012-RULE_11_8 "Related to previous suppression" */ + retval = ((void *(*)(char *harg))syscalls[n])(ustack); - if (proc_current()->exit != 0) { + if (proc_current()->exit != 0U) { proc_threadEnd(); } @@ -1901,3 +1909,5 @@ void _syscalls_init(void) { lib_printf("syscalls: Initializing syscall table [%d]\n", sizeof(syscalls) / sizeof(syscalls[0])); } + +/* parasoft-end-suppress MISRAC2012-RULE_8_4 */ diff --git a/syscalls.h b/syscalls.h index 04e361b19..d507f627c 100644 --- a/syscalls.h +++ b/syscalls.h @@ -18,7 +18,7 @@ #define _SYSCALLS_H_ -extern const void * const syscalls[]; +extern const void *const syscalls[]; extern void _syscalls_init(void); diff --git a/syspage.c b/syspage.c index a1c8f8431..eec625bcc 100644 --- a/syspage.c +++ b/syspage.c @@ -16,19 +16,21 @@ #include "lib/lib.h" #include "syspage.h" - -struct { +/* parasoft-begin-suppress MISRAC2012-RULE_8_4 "Global variable used in assembler code" */ +static struct { + /* parasoft-suppress-next-line MISRAC2012-RULE_5_8 "Variable inside the structure so it shouldn't cause this violation" */ syspage_t *syspage; } syspage_common; - +/* parasoft-end-suppress MISRAC2012-RULE_8_4 */ size_t syspage_mapSize(void) { size_t nb = 0; const syspage_map_t *map = syspage_common.syspage->maps; - if (map == NULL) + if (map == NULL) { return nb; + } do { ++nb; @@ -48,12 +50,14 @@ const syspage_map_t *syspage_mapIdResolve(unsigned int id) { const syspage_map_t *map = syspage_common.syspage->maps; - if (map == NULL) + if (map == NULL) { return NULL; + } do { - if (id == map->id) + if (id == map->id) { return map; + } } while ((map = map->next) != syspage_common.syspage->maps); return NULL; @@ -64,12 +68,14 @@ const syspage_map_t *syspage_mapAddrResolve(addr_t addr) { const syspage_map_t *map = syspage_common.syspage->maps; - if (map == NULL) + if (map == NULL) { return NULL; + } do { - if (addr < map->end && addr >= map->start) + if (addr < map->end && addr >= map->start) { return map; + } } while ((map = map->next) != syspage_common.syspage->maps); return NULL; @@ -80,12 +86,14 @@ const syspage_map_t *syspage_mapNameResolve(const char *name) { const syspage_map_t *map = syspage_common.syspage->maps; - if (map == NULL) + if (map == NULL) { return NULL; + } do { - if (hal_strcmp(name, map->name) == 0) + if (hal_strcmp(name, map->name) == 0) { return map; + } } while ((map = map->next) != syspage_common.syspage->maps); return NULL; @@ -97,8 +105,9 @@ size_t syspage_progSize(void) size_t nb = 0; const syspage_prog_t *prog = syspage_common.syspage->progs; - if (prog == NULL) + if (prog == NULL) { return nb; + } do { ++nb; @@ -119,12 +128,14 @@ extern const syspage_prog_t *syspage_progIdResolve(unsigned int id) unsigned int i = 0; const syspage_prog_t *prog = syspage_common.syspage->progs; - if (prog == NULL) + if (prog == NULL) { return NULL; + } do { - if (id == i++) + if (id == i++) { return prog; + } } while ((prog = prog->next) != syspage_common.syspage->progs); return NULL; @@ -135,12 +146,14 @@ extern const syspage_prog_t *syspage_progNameResolve(const char *name) { const syspage_prog_t *prog = syspage_common.syspage->progs; - if (prog == NULL) + if (prog == NULL) { return NULL; + } do { - if (hal_strcmp(name, prog->argv) == 0) + if (hal_strcmp(name, prog->argv) == 0) { return prog; + } } while ((prog = prog->next) != syspage_common.syspage->progs); return NULL; diff --git a/test/msg.c b/test/msg.c index 722ed9245..158ef7f24 100644 --- a/test/msg.c +++ b/test/msg.c @@ -13,6 +13,8 @@ * %LICENSE% */ +/* parasoft-begin-suppress ALL "tests don't need to comply with MISRA" */ + #include "hal/hal.h" #include "include/errno.h" #include "proc/proc.h" @@ -22,12 +24,14 @@ unsigned test_randsize(unsigned *seed, unsigned bufsz) { unsigned sz; - if (lib_rand(seed) % 2) - sz = (lib_rand(seed) % (bufsz / SIZE_PAGE)) * SIZE_PAGE; - else - sz = 1 + (lib_rand(seed) % bufsz); + if (lib_rand(seed) % 2) { + sz = ((unsigned int)lib_rand(seed) % (bufsz / SIZE_PAGE)) * SIZE_PAGE; + } + else { + sz = 1U + ((unsigned int)lib_rand(seed) % bufsz); + } - return sz ? sz : 1; + return (sz != 0U) ? sz : 1U; } @@ -35,17 +39,21 @@ unsigned test_offset(unsigned *seed, unsigned size, unsigned bufsz) { unsigned offs = (bufsz - size) / SIZE_PAGE; - if (offs && lib_rand(seed) % 2) - offs = (lib_rand(seed) % offs) * SIZE_PAGE; - else if (offs && lib_rand(seed) % 10) - offs = SIZE_PAGE - (size & (SIZE_PAGE - 1)); - else if (offs && lib_rand(seed) % 10) - offs = SIZE_PAGE - (size & (SIZE_PAGE - 1)) / 2; - else if (bufsz - size) - offs = lib_rand(seed) % (bufsz - size); - else + if (offs != 0U && lib_rand(seed) % 2 != 0) { + offs = ((unsigned int)lib_rand(seed) % offs) * SIZE_PAGE; + } + else if (offs != 0U && lib_rand(seed) % 10 != 0) { + offs = SIZE_PAGE - (size & (SIZE_PAGE - 1U)); + } + else if (offs != 0U && lib_rand(seed) % 10 != 0) { + offs = SIZE_PAGE - (size & (SIZE_PAGE - 1U)) / 2U; + } + else if (bufsz - size != 0U) { + offs = (unsigned int)lib_rand(seed) % (bufsz - size); + } + else { offs = 0; - + } return offs; } @@ -53,11 +61,11 @@ unsigned test_offset(unsigned *seed, unsigned size, unsigned bufsz) void test_ping(void *arg) { msg_t msg; - unsigned bufsz = 4 * SIZE_PAGE, offs[2], i, k; + unsigned bufsz = 4U * SIZE_PAGE, offs[2], i, k; void *buf[2]; - unsigned int seed = (long)test_ping; + unsigned int seed = (unsigned long)test_ping; unsigned int count = 0; - unsigned int port = (long)arg; + unsigned int port = (unsigned long)arg; lib_printf("test: msg/ping: starting\n"); @@ -70,7 +78,7 @@ void test_ping(void *arg) return; } - for (k = 0; !count || k < count; ++k) { + for (k = 0; count == 0U || k < count; ++k) { lib_printf("\rtest_msg/ping: % 20d OK", k); hal_memset(&msg, 0, sizeof(msg)); @@ -80,8 +88,9 @@ void test_ping(void *arg) msg.i.data = buf[0] + (offs[0] = test_offset(&seed, msg.i.size, bufsz)); msg.o.data = buf[1] + (offs[1] = test_offset(&seed, msg.o.size, bufsz)); - for (i = 0; i < msg.o.size; ++i) + for (i = 0; i < msg.o.size; ++i) { ((unsigned char *)msg.i.data)[i] = (unsigned char)lib_rand(&seed); + } if (proc_send(port, &msg) < 0) { lib_printf("\ntest_msg/ping: send failed\n"); @@ -128,7 +137,7 @@ void test_pong(void *arg) { msg_t msg; msg_rid_t rid; - unsigned int port = (long)arg; + unsigned int port = (unsigned long)arg; lib_printf("test_msg/pong: starting\n"); @@ -143,10 +152,11 @@ void test_pong(void *arg) lib_printf("test_msg/pong: i/o buffers are of different sizes: 0x%zx and 0x%zx\n", msg.i.size, msg.o.size); msg.o.err = 1; } - else + else { hal_memcpy(msg.o.data, msg.i.data, msg.i.size); + } - proc_respond(port, &msg, rid); + (void)proc_respond(port, &msg, rid); } return; @@ -165,3 +175,6 @@ void test_msg(void) proc_threadCreate(NULL, test_pong, NULL, 4, 1024, NULL, 0, (void *)(long)port); proc_threadCreate(NULL, test_ping, NULL, 4, 1024, NULL, 0, (void *)(long)port); } + + +/* parasoft-end-suppress ALL */ diff --git a/test/proc.c b/test/proc.c index 08734204f..eb5f743b2 100644 --- a/test/proc.c +++ b/test/proc.c @@ -14,6 +14,8 @@ * %LICENSE% */ +/* parasoft-begin-suppress ALL "tests don't need to comply with MISRA" */ + #include "hal/hal.h" #include "proc/proc.h" #include "syspage.h" @@ -42,21 +44,21 @@ static void test_proc_indthr(void *arg) for (;;) { lib_printf("\rtest: [proc.threads] %c %c %c %c %c %c %c %02d %02d %02d %02d %02d %02d %02d", - indicator[test_proc_common.rotations[1] % 8], - indicator[test_proc_common.rotations[2] % 8], - indicator[test_proc_common.rotations[3] % 8], - indicator[test_proc_common.rotations[4] % 8], - indicator[test_proc_common.rotations[5] % 8], - indicator[test_proc_common.rotations[6] % 8], - indicator[test_proc_common.rotations[7] % 8], - - test_proc_common.rotations[1] % 100, - test_proc_common.rotations[2] % 100, - test_proc_common.rotations[3] % 100, - test_proc_common.rotations[4] % 100, - test_proc_common.rotations[5] % 100, - test_proc_common.rotations[6] % 100, - test_proc_common.rotations[7] % 100); + indicator[test_proc_common.rotations[1] % 8U], + indicator[test_proc_common.rotations[2] % 8U], + indicator[test_proc_common.rotations[3] % 8U], + indicator[test_proc_common.rotations[4] % 8U], + indicator[test_proc_common.rotations[5] % 8U], + indicator[test_proc_common.rotations[6] % 8U], + indicator[test_proc_common.rotations[7] % 8U], + + test_proc_common.rotations[1] % 100U, + test_proc_common.rotations[2] % 100U, + test_proc_common.rotations[3] % 100U, + test_proc_common.rotations[4] % 100U, + test_proc_common.rotations[5] % 100U, + test_proc_common.rotations[6] % 100U, + test_proc_common.rotations[7] % 100U); proc_threadSleep(5000); } @@ -96,11 +98,11 @@ static void test_proc_timethr(void *arg) static void test_proc_rotthr1(void *arg) { - unsigned int i = (unsigned long)arg; + unsigned long i = (unsigned long)arg; for (;;) { test_proc_common.rotations[i]++; - proc_threadSleep(10000 * i); + proc_threadSleep(10000ULL * (i)); } return; @@ -110,18 +112,18 @@ static void test_proc_rotthr1(void *arg) void test_proc_threads1(void) { unsigned int i, stacksz = 1384; - - for (i = 0; i < 8; i++) + for (i = 0; i < 8U; i++) { test_proc_common.rotations[i] = 0; + } proc_threadCreate(NULL, test_proc_indthr, NULL, 0, stacksz, NULL, 0, NULL); - proc_threadCreate(NULL, test_proc_rotthr1, NULL, 1, stacksz, NULL, 0, (void *)1); - proc_threadCreate(NULL, test_proc_rotthr1, NULL, 2, stacksz, NULL, 0, (void *)2); - proc_threadCreate(NULL, test_proc_rotthr1, NULL, 3, stacksz, NULL, 0, (void *)3); - proc_threadCreate(NULL, test_proc_rotthr1, NULL, 4, stacksz, NULL, 0, (void *)4); - proc_threadCreate(NULL, test_proc_rotthr1, NULL, 5, stacksz, NULL, 0, (void *)5); - proc_threadCreate(NULL, test_proc_rotthr1, NULL, 6, stacksz, NULL, 0, (void *)6); - proc_threadCreate(NULL, test_proc_rotthr1, NULL, 7, stacksz, NULL, 0, (void *)7); + proc_threadCreate(NULL, test_proc_rotthr1, NULL, 1, stacksz, NULL, 0, (void *)(int *)1); + proc_threadCreate(NULL, test_proc_rotthr1, NULL, 2, stacksz, NULL, 0, (void *)(int *)2); + proc_threadCreate(NULL, test_proc_rotthr1, NULL, 3, stacksz, NULL, 0, (void *)(int *)3); + proc_threadCreate(NULL, test_proc_rotthr1, NULL, 4, stacksz, NULL, 0, (void *)(int *)4); + proc_threadCreate(NULL, test_proc_rotthr1, NULL, 5, stacksz, NULL, 0, (void *)(int *)5); + proc_threadCreate(NULL, test_proc_rotthr1, NULL, 6, stacksz, NULL, 0, (void *)(int *)6); + proc_threadCreate(NULL, test_proc_rotthr1, NULL, 7, stacksz, NULL, 0, (void *)(int *)7); proc_threadCreate(NULL, test_proc_busythr, NULL, 4, 1024, NULL, 0, NULL); } @@ -134,7 +136,7 @@ void test_proc_threads1(void) static void test_proc_rotthr2(void *arg) { - unsigned int i = (unsigned long)arg; + unsigned long i = (unsigned long)arg; time_t otm = test_proc_common.tm; spinlock_ctx_t sc; @@ -158,9 +160,9 @@ static void test_proc_rotthr2(void *arg) void test_proc_threads2(void) { unsigned int i; - - for (i = 0; i < 8; i++) + for (i = 0; i < 8U; i++) { test_proc_common.rotations[i] = 0; + } test_proc_common.tm = 0; test_proc_common.queue = NULL; @@ -169,10 +171,10 @@ void test_proc_threads2(void) proc_threadCreate(NULL, test_proc_indthr, NULL, 0, 1024, NULL, 0, NULL); proc_threadCreate(NULL, test_proc_timethr, NULL, 0, 1024, NULL, 0, NULL); - proc_threadCreate(NULL, test_proc_rotthr2, NULL, 1, 1024, NULL, 0, (void *)1); - proc_threadCreate(NULL, test_proc_rotthr2, NULL, 2, 1024, NULL, 0, (void *)2); - proc_threadCreate(NULL, test_proc_rotthr2, NULL, 3, 1024, NULL, 0, (void *)3); - proc_threadCreate(NULL, test_proc_rotthr2, NULL, 4, 1024, NULL, 0, (void *)4); + proc_threadCreate(NULL, test_proc_rotthr2, NULL, 1, 1024, NULL, 0, (void *)(int *)1); + proc_threadCreate(NULL, test_proc_rotthr2, NULL, 2, 1024, NULL, 0, (void *)(int *)2); + proc_threadCreate(NULL, test_proc_rotthr2, NULL, 3, 1024, NULL, 0, (void *)(int *)3); + proc_threadCreate(NULL, test_proc_rotthr2, NULL, 4, 1024, NULL, 0, (void *)(int *)4); } @@ -205,3 +207,5 @@ void test_proc_exit(void) hal_cpuEnableInterrupts(); hal_cpuReschedule(NULL, NULL); } + +/* parasoft-end-suppress ALL "tests don't need to comply with MISRA" */ diff --git a/test/rb.c b/test/rb.c index 4ef6737a9..52176ae5e 100644 --- a/test/rb.c +++ b/test/rb.c @@ -13,6 +13,8 @@ * %LICENSE% */ +/* parasoft-begin-suppress ALL "tests don't need to comply with MISRA" */ + #include "hal/hal.h" #include "lib/lib.h" #include "vm/vm.h" @@ -21,23 +23,27 @@ static int test_rbCheckEx(rbnode_t *node, int level) { - if (node == NULL) + if (node == NULL) { return 1; + } if (node->color == RB_RED) { if ((node->left != NULL && node->left->color == RB_RED) || - (node->right != NULL && node->right->color == RB_RED)) + (node->right != NULL && node->right->color == RB_RED)) { return -1; + } } int left = test_rbCheckEx(node->left, level + 1); int right = test_rbCheckEx(node->right, level + 1); - if (left == -1 || right == -1) + if (left == -1 || right == -1) { return -1; + } - if (left != right) + if (left != right) { return -1; + } return left + ((node->color == RB_BLACK) ? 1 : 0); } @@ -45,14 +51,17 @@ static int test_rbCheckEx(rbnode_t *node, int level) static int test_rbCheck(rbtree_t *tree) { - if (tree->root == NULL) + if (tree->root == NULL) { return 0; + } - if (tree->root->color != RB_BLACK) + if (tree->root->color != RB_BLACK) { return -1; + } - if (test_rbCheckEx(tree->root, 0) < 0) + if (test_rbCheckEx(tree->root, 0) < 0) { return -1; + } return 0; } @@ -70,14 +79,15 @@ static int test_compare(rbnode_t *n1, rbnode_t *n2) test_t *t1 = lib_treeof(test_t, node, n1); test_t *t2 = lib_treeof(test_t, node, n2); - if (t1->num == t2->num) + if (t1->num == t2->num) { return 0; + } return (t1->num > t2->num) ? 1 : -1; } -#define RB_TEST_SIZE 7 +#define RB_TEST_SIZE 7 int count; @@ -98,8 +108,9 @@ static int rb_processVector(int insert, rbtree_t *tree, int vector[]) t.num = vector[i]; test_t *to_remove = lib_treeof(test_t, node, lib_rbFind(tree, &t.node)); - if (to_remove == NULL) + if (to_remove == NULL) { return -1; + } lib_rbRemove(tree, &to_remove->node); vm_kfree(to_remove); @@ -114,14 +125,16 @@ static void test_rbGenerateTest(int level, int insert, int vector[], int selecte { int i, j; for (i = 0; i < RB_TEST_SIZE; ++i) { - if (selected[i]) + if (selected[i]) { continue; + } selected[i] = 1; vector[level] = i + 1; - if (level != (RB_TEST_SIZE - 1)) + if (level != (RB_TEST_SIZE - 1)) { test_rbGenerateTest(level + 1, insert, vector, selected, input); + } else { if (insert) { int remove_vector[RB_TEST_SIZE] = { 0 }; @@ -137,8 +150,9 @@ static void test_rbGenerateTest(int level, int insert, int vector[], int selecte if (rb_processVector(1, &tree, input) < 0) { lib_printf("error: RB insert - "); - for (j = 0; j < RB_TEST_SIZE; ++j) + for (j = 0; j < RB_TEST_SIZE; ++j) { lib_printf("%d ", input[j]); + } lib_printf("\n"); hal_cpuHalt(); @@ -146,8 +160,9 @@ static void test_rbGenerateTest(int level, int insert, int vector[], int selecte if (rb_processVector(0, &tree, vector) < 0) { lib_printf("error: RB remove - "); - for (j = 0; j < RB_TEST_SIZE; ++j) + for (j = 0; j < RB_TEST_SIZE; ++j) { lib_printf("%d ", vector[j]); + } lib_printf("\n"); hal_cpuHalt(); @@ -184,3 +199,5 @@ void test_rb(void) { proc_threadCreate(NULL, test_rb_autothr, NULL, 1, 512, NULL, 0, NULL); } + +/* parasoft-end-suppress ALL "tests don't need to comply with MISRA" */ diff --git a/test/test.c b/test/test.c index fef0e277f..5f85954b3 100644 --- a/test/test.c +++ b/test/test.c @@ -13,6 +13,8 @@ * %LICENSE% */ +/* parasoft-begin-suppress ALL "tests don't need to comply with MISRA" */ + #include "test.h" #include "vm.h" @@ -24,8 +26,10 @@ void test_run(void) { test_proc_threads1(); -// test_vm_alloc(); -// test_vm_kmalloc(); -// test_rb(); -// test_msg(); + // test_vm_alloc(); + // test_vm_kmalloc(); + // test_rb(); + // test_msg(); } + +/* parasoft-end-suppress ALL "tests don't need to comply with MISRA" */ diff --git a/test/vm.c b/test/vm.c index 5d9bd6125..e6ca23938 100644 --- a/test/vm.c +++ b/test/vm.c @@ -13,6 +13,8 @@ * %LICENSE% */ +/* parasoft-begin-suppress ALL "tests don't need to comply with MISRA" */ + #include "hal/hal.h" #include "lib/lib.h" #include "vm/vm.h" @@ -35,9 +37,9 @@ void test_vm_alloc(void) hal_cpuGetCycles(&b); seed = (unsigned int)b; - for (n = 0; n < 1000000; n++) { + for (n = 0; n < 1000000U; n++) { - size = lib_rand(&seed) % (1 << 22); + size = (unsigned int)lib_rand(&seed) % (0x1UL << 22U); minsize = min(minsize, size); maxsize = max(maxsize, size); @@ -54,10 +56,12 @@ void test_vm_alloc(void) lib_printf("\rtest: size=%d, n=%d", size, n); - if (e - b > dmax) + if (e - b > dmax) { dmax = e - b; - if (e - b < dmin) + } + if (e - b < dmin) { dmin = e - b; + } } lib_printf("\n"); @@ -89,8 +93,9 @@ void test_vm_zalloc(void) _vm_zoneCreate(&zone, 128, 1024); for (;;) { - if ((b = _vm_zalloc(&zone, NULL)) == NULL) + if ((b = _vm_zalloc(&zone, NULL)) == NULL) { break; + } lib_printf("\rtest: b=%p", b); } @@ -112,16 +117,16 @@ void test_vm_kmalloc(void) vm_mapGetStats(&mapallocsz); vm_pageGetStats(&freesz); - lib_printf("test: Testing kmalloc, kmalloc=%d, map=%d, free=%dKB\n", kmallocsz, mapallocsz, freesz / 1024); + lib_printf("test: Testing kmalloc, kmalloc=%d, map=%d, free=%dKB\n", kmallocsz, mapallocsz, freesz / 1024U); hal_cpuGetCycles(&c); s1 = (unsigned int)c; - s2 = s1 / 2; + s2 = s1 / 2U; - for (i = 0; i < sizeof(buff) / sizeof(buff[0]); i++) + for (i = 0; (unsigned int)i < sizeof(buff) / sizeof(buff[0]); i++) { buff[i] = NULL; - -//vm_mapDumpArenas(); + } + // vm_mapDumpArenas(); for (k = 0; k < 1000; k++) { size = lib_rand(&s1) % (4 * 1024); @@ -137,17 +142,18 @@ void test_vm_kmalloc(void) } lib_printf("\n"); - for (i = 0; i < sizeof(buff) / sizeof(buff[0]); i++) { - if (buff[i] != NULL) + for (i = 0; (unsigned int)i < sizeof(buff) / sizeof(buff[0]); i++) { + if (buff[i] != NULL) { vm_kfree(buff[i]); + } } vm_kmallocGetStats(&kmallocsz); vm_mapGetStats(&mapallocsz); vm_pageGetStats(&freesz); - lib_printf("test: Memory after test, kmalloc=%d, map=%d, free=%dKB\n", kmallocsz, mapallocsz, freesz / 1024); + lib_printf("test: Memory after test, kmalloc=%d, map=%d, free=%dKB\n", kmallocsz, mapallocsz, freesz / 1024U); -//vm_mapDumpArenas(); + // vm_mapDumpArenas(); for (;;) { } @@ -187,23 +193,25 @@ static void _test_vm_upgrsimthr(void *arg) lib_printf("test: Simulate kmalloc load [%d]\n", allocsz); proc_lockClear(&lock); -//vm_kmallocDump(); -//vm_mapDump(NULL); + // vm_kmallocDump(); + // vm_mapDump(NULL); for (;;) { - if ((first = vm_kmalloc(3000)) == NULL) + if ((first = vm_kmalloc(3000)) == NULL) { break; + } hal_memset(first, 1, 133); - for (i = 0; i < 10000; i++) { + for (i = 0; i < 10000U; i++) { vm_kmallocGetStats(&allocsz); proc_lockSet(&lock); lib_printf("\rtest: U, [%4d] kmalloc.allocsz=%d", i, allocsz); proc_lockClear(&lock); - if ((buff = vm_kmalloc(3000)) == NULL) + if ((buff = vm_kmalloc(3000)) == NULL) { break; + } hal_memset(buff, 0, 133); vm_kfree(buff); proc_threadSleep(1000); @@ -213,9 +221,9 @@ static void _test_vm_upgrsimthr(void *arg) break; } -lib_printf("\n"); -//vm_kmallocDump(); -//vm_mapDump(NULL); + lib_printf("\n"); + // vm_kmallocDump(); + // vm_mapDump(NULL); vm_kmallocGetStats(&allocsz); proc_lockSet(&lock); @@ -234,6 +242,9 @@ void test_vm_kmallocsim(void) proc_threadCreate(0, _test_vm_upgrsimthr, NULL, 0, 512, 0, 0, 0); - for (i = 0; i < 16; i++) + for (i = 0; i < 16U; i++) { proc_threadCreate(0, _test_vm_msgsimthr, NULL, 0, 512, 0, 0, 0); + } } + +/* parasoft-end-suppress ALL "tests don't need to comply with MISRA" */ diff --git a/usrv.c b/usrv.c index 57edc4ca7..cbc73eb18 100644 --- a/usrv.c +++ b/usrv.c @@ -47,12 +47,12 @@ static void usrv_msgthr(void *arg) switch (oid.id) { case USRV_ID_LOG: - log_msgHandler(&msg, oid, rid); + log_msgHandler(&msg, oid, (unsigned long)rid); break; default: msg.o.err = -ENOSYS; - proc_respond(oid.port, &msg, rid); + (void)proc_respond(oid.port, &msg, rid); break; } } @@ -66,7 +66,7 @@ void _usrv_start(void) return; } - proc_threadCreate(NULL, usrv_msgthr, NULL, 1, SIZE_KSTACK, NULL, 0, NULL); + (void)proc_threadCreate(NULL, usrv_msgthr, NULL, 1, (size_t)SIZE_KSTACK, NULL, 0, NULL); } diff --git a/vm/amap.c b/vm/amap.c index e13ef5a96..8537e720f 100644 --- a/vm/amap.c +++ b/vm/amap.c @@ -22,7 +22,7 @@ #include "map.h" -struct { +static struct { vm_object_t *kernel; vm_map_t *kmap; } amap_common; @@ -30,18 +30,18 @@ struct { static anon_t *amap_putanon(anon_t *a) { - if (a == NULL) + if (a == NULL) { return NULL; - - proc_lockSet(&a->lock); - if (--a->refs) { - proc_lockClear(&a->lock); + } + (void)proc_lockSet(&a->lock); + if (--a->refs != 0U) { + (void)proc_lockClear(&a->lock); return a; } vm_pageFree(a->page); - proc_lockClear(&a->lock); - proc_lockDone(&a->lock); + (void)proc_lockClear(&a->lock); + (void)proc_lockDone(&a->lock); vm_kfree(a); return NULL; } @@ -51,24 +51,27 @@ void amap_putanons(amap_t *amap, int offset, int size) { int i; - if (amap == NULL) + if (amap == NULL) { return; + } - proc_lockSet(&amap->lock); - for (i = offset / SIZE_PAGE; i < (offset + size) / SIZE_PAGE; ++i) - amap_putanon(amap->anons[i]); - proc_lockClear(&amap->lock); + (void)proc_lockSet(&amap->lock); + for (i = offset / (int)SIZE_PAGE; i < (offset + size) / (int)SIZE_PAGE; ++i) { + (void)amap_putanon(amap->anons[i]); + } + (void)proc_lockClear(&amap->lock); } static anon_t *amap_getanon(anon_t *a) { - if (a == NULL) + if (a == NULL) { return NULL; + } - proc_lockSet(&a->lock); + (void)proc_lockSet(&a->lock); ++a->refs; - proc_lockClear(&a->lock); + (void)proc_lockClear(&a->lock); return a; } @@ -78,24 +81,27 @@ void amap_getanons(amap_t *amap, int offset, int size) { int i; - if (amap == NULL) + if (amap == NULL) { return; + } - proc_lockSet(&amap->lock); - for (i = offset / SIZE_PAGE; i < (offset + size) / SIZE_PAGE; ++i) - amap_getanon(amap->anons[i]); - proc_lockClear(&amap->lock); + (void)proc_lockSet(&amap->lock); + for (i = offset / (int)SIZE_PAGE; i < (offset + size) / (int)SIZE_PAGE; ++i) { + (void)amap_getanon(amap->anons[i]); + } + (void)proc_lockClear(&amap->lock); } amap_t *amap_ref(amap_t *amap) { - if (amap == NULL) + if (amap == NULL) { return NULL; + } - proc_lockSet(&amap->lock); + (void)proc_lockSet(&amap->lock); amap->refs++; - proc_lockClear(&amap->lock); + (void)proc_lockClear(&amap->lock); return amap; } @@ -103,13 +109,13 @@ amap_t *amap_ref(amap_t *amap) amap_t *amap_create(amap_t *amap, int *offset, size_t size) { - int i = size / SIZE_PAGE; + unsigned int i = size / SIZE_PAGE; amap_t *new; if (amap != NULL) { - proc_lockSet(&amap->lock); - if (amap->refs == 1) { - proc_lockClear(&amap->lock); + (void)proc_lockSet(&amap->lock); + if (amap->refs == 1U) { + (void)proc_lockClear(&amap->lock); return amap; } @@ -118,29 +124,35 @@ amap_t *amap_create(amap_t *amap, int *offset, size_t size) /* Allocate anon pointer arrays in chunks * to facilitate merging of amaps */ - if (i < (512 - sizeof(amap_t)) / sizeof(anon_t *)) - i = (512 - sizeof(amap_t)) / sizeof(anon_t *); + if (i < (512U - sizeof(amap_t)) / sizeof(anon_t *)) { + i = (512U - sizeof(amap_t)) / sizeof(anon_t *); + } if ((new = vm_kmalloc(sizeof(amap_t) + i * sizeof(anon_t *))) == NULL) { - if (amap != NULL) - proc_lockClear(&amap->lock); + if (amap != NULL) { + (void)proc_lockClear(&amap->lock); + } return NULL; } - proc_lockInit(&new->lock, &proc_lockAttrDefault, "amap.map"); + (void)proc_lockInit(&new->lock, &proc_lockAttrDefault, "amap.map"); new->size = i; new->refs = 1; - *offset = *offset / SIZE_PAGE; + *offset = *offset / (int)SIZE_PAGE; - for (i = 0; i < size / SIZE_PAGE; ++i) - new->anons[i] = (amap == NULL) ? NULL : amap->anons[*offset + i]; - while (i < new->size) + for (i = 0; i < size / SIZE_PAGE; ++i) { + new->anons[i] = (amap == NULL) ? NULL : amap->anons[*offset + (int)i]; + } + + while (i < new->size) { new->anons[i++] = NULL; + } - if (amap != NULL) - proc_lockClear(&amap->lock); + if (amap != NULL) { + (void)proc_lockClear(&amap->lock); + } *offset = 0; return new; @@ -149,29 +161,31 @@ amap_t *amap_create(amap_t *amap, int *offset, size_t size) void amap_put(amap_t *amap) { - if (amap == NULL) + if (amap == NULL) { return; + } - proc_lockSet(&amap->lock); + (void)proc_lockSet(&amap->lock); - if (--amap->refs) { - proc_lockClear(&amap->lock); + if (--amap->refs != 0U) { + (void)proc_lockClear(&amap->lock); return; } - proc_lockDone(&amap->lock); + (void)proc_lockDone(&amap->lock); vm_kfree(amap); } void amap_clear(amap_t *amap, size_t offset, size_t size) { - int i; + unsigned int i; - proc_lockSet(&amap->lock); - for (i = offset / SIZE_PAGE; i < (offset + size) / SIZE_PAGE; i++) + (void)proc_lockSet(&amap->lock); + for (i = offset / SIZE_PAGE; i < (offset + size) / SIZE_PAGE; i++) { amap->anons[i] = NULL; - proc_lockClear(&amap->lock); + } + (void)proc_lockClear(&amap->lock); } @@ -179,12 +193,13 @@ static anon_t *anon_new(page_t *p) { anon_t *a; - if ((a = vm_kmalloc(sizeof(anon_t))) == NULL) + if ((a = vm_kmalloc(sizeof(anon_t))) == NULL) { return NULL; + } a->page = p; a->refs = 1; - proc_lockInit(&a->lock, &proc_lockAttrDefault, "amap.anon"); + (void)proc_lockInit(&a->lock, &proc_lockAttrDefault, "amap.anon"); return a; } @@ -192,8 +207,9 @@ static anon_t *anon_new(page_t *p) static void *amap_map(vm_map_t *map, page_t *p) { - if (map == amap_common.kmap) + if (map == amap_common.kmap) { return _vm_mmap(amap_common.kmap, NULL, p, SIZE_PAGE, PROT_READ | PROT_WRITE, amap_common.kernel, -1, MAP_NONE); + } return vm_mmap(amap_common.kmap, NULL, p, SIZE_PAGE, PROT_READ | PROT_WRITE, amap_common.kernel, -1, MAP_NONE); } @@ -201,88 +217,94 @@ static void *amap_map(vm_map_t *map, page_t *p) static int amap_unmap(vm_map_t *map, void *v) { - if (map == amap_common.kmap) + if (map == amap_common.kmap) { return _vm_munmap(amap_common.kmap, v, SIZE_PAGE); + } return vm_munmap(amap_common.kmap, v, SIZE_PAGE); } -page_t *amap_page(vm_map_t *map, amap_t *amap, vm_object_t *o, void *vaddr, int aoffs, off_t offs, int prot) +page_t *amap_page(vm_map_t *map, amap_t *amap, vm_object_t *o, void *vaddr, int aoffs, off_t offs, unsigned prot) { page_t *p = NULL; anon_t *a; void *v, *w; - proc_lockSet(&amap->lock); + (void)proc_lockSet(&amap->lock); - if ((a = amap->anons[aoffs / SIZE_PAGE]) != NULL) { - proc_lockSet(&a->lock); + if ((a = amap->anons[aoffs / (int)SIZE_PAGE]) != NULL) { + (void)proc_lockSet(&a->lock); p = a->page; - if (!(a->refs > 1 && (prot & PROT_WRITE))) { - proc_lockClear(&a->lock); - proc_lockClear(&amap->lock); + if (!(a->refs > 1U && (prot & PROT_WRITE) != 0U)) { + (void)proc_lockClear(&a->lock); + (void)proc_lockClear(&amap->lock); return p; } a->refs--; } else if ((p = vm_objectPage(map, &amap, o, vaddr, offs)) == NULL) { /* amap could be invalidated while fetching from the object's store */ - if (amap != NULL) - proc_lockClear(&amap->lock); + if (amap != NULL) { + (void)proc_lockClear(&amap->lock); + } return NULL; } - else if (o != NULL && !(prot & PROT_WRITE)) { - proc_lockClear(&amap->lock); + else if (o != NULL && (prot & PROT_WRITE) == 0U) { + (void)proc_lockClear(&amap->lock); return p; } + else { + /* No action required */ + } + if ((v = amap_map(map, p)) == NULL) { if (a != NULL) { - proc_lockClear(&a->lock); + (void)proc_lockClear(&a->lock); } - proc_lockClear(&amap->lock); + (void)proc_lockClear(&amap->lock); return NULL; } if (a != NULL || o != NULL) { /* Copy from object or shared anon */ if ((p = vm_pageAlloc(SIZE_PAGE, PAGE_OWNER_APP)) == NULL) { - amap_unmap(map, v); + (void)amap_unmap(map, v); if (a != NULL) { - proc_lockClear(&a->lock); + (void)proc_lockClear(&a->lock); } - proc_lockClear(&amap->lock); + (void)proc_lockClear(&amap->lock); return NULL; } if ((w = amap_map(map, p)) == NULL) { vm_pageFree(p); - amap_unmap(map, v); + (void)amap_unmap(map, v); if (a != NULL) { - proc_lockClear(&a->lock); + (void)proc_lockClear(&a->lock); } - proc_lockClear(&amap->lock); + (void)proc_lockClear(&amap->lock); return NULL; } hal_memcpy(w, v, SIZE_PAGE); - amap_unmap(map, w); + (void)amap_unmap(map, w); } else { hal_memset(v, 0, SIZE_PAGE); } - amap_unmap(map, v); + (void)amap_unmap(map, v); if (a != NULL) { - proc_lockClear(&a->lock); + (void)proc_lockClear(&a->lock); } - if ((amap->anons[aoffs / SIZE_PAGE] = anon_new(p)) == NULL) { + if ((amap->anons[aoffs / (int)SIZE_PAGE] = anon_new(p)) == NULL) { vm_pageFree(p); p = NULL; } - proc_lockClear(&amap->lock); + (void)proc_lockClear(&amap->lock); return p; } diff --git a/vm/amap.h b/vm/amap.h index 326346b36..b920e323c 100644 --- a/vm/amap.h +++ b/vm/amap.h @@ -33,20 +33,20 @@ typedef struct _anon_t { typedef struct _amap_t { lock_t lock; unsigned int refs, size; - anon_t *anons[]; + anon_t *anons[0]; } amap_t; -extern page_t *amap_page(struct _vm_map_t *map, amap_t *amap, struct _vm_object_t *o, void *vaddr, int aoffs, off_t offs, int prot); +extern page_t *amap_page(struct _vm_map_t *map, amap_t *amap, struct _vm_object_t *o, void *vaddr, int aoffs, off_t offs, unsigned prot); extern void amap_clear(amap_t *amap, size_t offset, size_t size); -extern void amap_putanons(amap_t *amap, int offs, int size); +extern void amap_putanons(amap_t *amap, int offset, int size); -extern void amap_getanons(amap_t *amap, int offs, int size); +extern void amap_getanons(amap_t *amap, int offset, int size); extern amap_t *amap_create(amap_t *amap, int *offset, size_t size); diff --git a/vm/kmalloc.c b/vm/kmalloc.c index 04455250b..d37a44364 100644 --- a/vm/kmalloc.c +++ b/vm/kmalloc.c @@ -22,7 +22,7 @@ #include "proc/proc.h" -struct { +static struct { vm_zone_t *sizes[17]; vm_zone_t *used; vm_zone_t firstzone; @@ -42,28 +42,32 @@ static int kmalloc_zone_cmp(rbnode_t *n1, rbnode_t *n2) vm_zone_t *z1 = lib_treeof(vm_zone_t, linkage, n1); vm_zone_t *z2 = lib_treeof(vm_zone_t, linkage, n2); - if (z1->vaddr > z2->vaddr) + /* parasoft-suppress-next-line MISRAC2012-DIR_4_1 "Variable pass to lib_treeof will not be NULL, so lib_treeof will not be NULL either" */ + if ((ptr_t)z1->vaddr > (ptr_t)z2->vaddr) { return 1; + } - if (((z2->vaddr >= z1->vaddr) && (z2->vaddr < z1->vaddr + z1->blocks * z1->blocksz)) || - ((z1->vaddr >= z2->vaddr) && (z1->vaddr < z2->vaddr + z2->blocks * z2->blocksz))) + if ((((ptr_t)z2->vaddr >= (ptr_t)z1->vaddr) && ((ptr_t)z2->vaddr < (ptr_t)z1->vaddr + z1->blocks * z1->blocksz)) || + (((ptr_t)z1->vaddr >= (ptr_t)z2->vaddr) && ((ptr_t)z1->vaddr < (ptr_t)z2->vaddr + z2->blocks * z2->blocksz))) { return 0; + } return -1; } -void *_kmalloc_alloc(u8 hdridx, u8 idx) +static void *_kmalloc_alloc(u8 hdridx, u8 idx) { void *b; vm_zone_t *z = kmalloc_common.sizes[idx]; b = _vm_zalloc(z, NULL); if (b != NULL) { - kmalloc_common.allocsz += (1 << idx); + kmalloc_common.allocsz += (1UL << idx); - if (idx == hdridx) + if (idx == hdridx) { kmalloc_common.hdrblocks--; + } if (z->used == z->blocks) { LIST_REMOVE(&kmalloc_common.sizes[idx], z); @@ -75,7 +79,7 @@ void *_kmalloc_alloc(u8 hdridx, u8 idx) } -vm_zone_t *_kmalloc_free(u8 hdridx, void *p) +static vm_zone_t *_kmalloc_free(u8 hdridx, void *p) { vm_zone_t t; vm_zone_t *z; @@ -93,11 +97,12 @@ vm_zone_t *_kmalloc_free(u8 hdridx, void *p) _vm_zfree(z, p); kmalloc_common.allocsz -= z->blocksz; - if ((idx = hal_cpuGetLastBit(z->blocksz)) == hdridx) + if ((idx = (u8)hal_cpuGetLastBit(z->blocksz)) == hdridx) { kmalloc_common.hdrblocks++; + } /* Remove zone from used list */ - if (z->used == z->blocks - 1) { + if (z->used == z->blocks - 1U) { LIST_REMOVE(&kmalloc_common.used, z); LIST_ADD(&kmalloc_common.sizes[idx], z); } @@ -106,7 +111,7 @@ vm_zone_t *_kmalloc_free(u8 hdridx, void *p) } -int _kmalloc_addZone(u8 hdridx, u8 idx) +static int _kmalloc_addZone(u8 hdridx, u8 idx) { vm_zone_t *nz; @@ -116,16 +121,17 @@ int _kmalloc_addZone(u8 hdridx, u8 idx) } /* Add new zone */ - if (_vm_zoneCreate(nz, 1 << idx, max(((idx == hdridx) ? kmalloc_common.zonehdrs : 1), SIZE_PAGE / (1 << idx))) < 0) { - _kmalloc_free(hdridx, nz); + if (_vm_zoneCreate(nz, 0x1UL << idx, max(((idx == hdridx) ? kmalloc_common.zonehdrs : 1U), SIZE_PAGE / (0x1UL << idx))) < 0) { + (void)_kmalloc_free(hdridx, nz); return -ENOMEM; } LIST_ADD(&kmalloc_common.sizes[idx], nz); - lib_rbInsert(&kmalloc_common.tree, &nz->linkage); + (void)lib_rbInsert(&kmalloc_common.tree, &nz->linkage); - if (idx == hdridx) + if (idx == hdridx) { kmalloc_common.hdrblocks += nz->blocks; + } return EOK; } @@ -133,39 +139,49 @@ int _kmalloc_addZone(u8 hdridx, u8 idx) void *vm_kmalloc(size_t size) { - unsigned int idx, hdridx; + u8 idx, hdridx; void *b = NULL; vm_zone_t *z; int err = EOK; /* Establish minimal size */ - size = size < 16 ? 16 : size; + size = size < 16U ? 16U : size; - idx = hal_cpuGetLastBit(size); - if (hal_cpuGetFirstBit(size) < idx) + idx = (u8)hal_cpuGetLastBit(size); + if ((u8)hal_cpuGetFirstBit(size) < idx) { idx++; - if (idx >= sizeof(kmalloc_common.sizes) / sizeof(vm_zone_t *)) + } + if (idx >= sizeof(kmalloc_common.sizes) / sizeof(vm_zone_t *)) { return NULL; + } - hdridx = hal_cpuGetLastBit(sizeof(vm_zone_t)); - if (hal_cpuGetFirstBit(sizeof(vm_zone_t)) < hdridx) + hdridx = (u8)hal_cpuGetLastBit(sizeof(vm_zone_t)); + if ((u8)hal_cpuGetFirstBit(sizeof(vm_zone_t)) < hdridx) { hdridx++; - if (hdridx >= sizeof(kmalloc_common.sizes) / sizeof(vm_zone_t *)) + } + if (hdridx >= sizeof(kmalloc_common.sizes) / sizeof(vm_zone_t *)) { return NULL; + } - proc_lockSet(&kmalloc_common.lock); + (void)proc_lockSet(&kmalloc_common.lock); - if (kmalloc_common.hdrblocks == 1) + if (kmalloc_common.hdrblocks == 1U) { err = _kmalloc_addZone(hdridx, hdridx); + } - if (!err && (z = kmalloc_common.sizes[idx]) == NULL) - err = _kmalloc_addZone(hdridx, idx); + if (err == 0) { + z = kmalloc_common.sizes[idx]; + if (z == NULL) { + err = _kmalloc_addZone(hdridx, idx); + } + } /* Alloc new fragment */ - if (!err) + if (err == 0) { b = _kmalloc_alloc(hdridx, idx); + } - proc_lockClear(&kmalloc_common.lock); + (void)proc_lockClear(&kmalloc_common.lock); return b; } @@ -177,19 +193,21 @@ static void *_kmalloc_freeAtom(u8 hdridx, void *p) u8 idx; z = _kmalloc_free(hdridx, p); - if (z == NULL) + if (z == NULL) { return NULL; + } - idx = hal_cpuGetLastBit(z->blocksz); + idx = (u8)hal_cpuGetLastBit(z->blocksz); /* Remove zone if free */ - if ((z->used == 0) && (z != &kmalloc_common.firstzone)) { + if ((z->used == 0U) && (z != &kmalloc_common.firstzone)) { LIST_REMOVE(&kmalloc_common.sizes[idx], z); - _vm_zoneDestroy(z); + (void)_vm_zoneDestroy(z); lib_rbRemove(&kmalloc_common.tree, &z->linkage); - if (idx == hdridx) + if (idx == hdridx) { kmalloc_common.hdrblocks -= z->blocks; + } return z; } @@ -199,20 +217,23 @@ static void *_kmalloc_freeAtom(u8 hdridx, void *p) void vm_kfree(void *p) { - unsigned int hdridx; + u8 hdridx; - hdridx = hal_cpuGetLastBit(sizeof(vm_zone_t)); - if (hal_cpuGetFirstBit(sizeof(vm_zone_t)) < hdridx) + hdridx = (u8)hal_cpuGetLastBit(sizeof(vm_zone_t)); + if ((u8)hal_cpuGetFirstBit(sizeof(vm_zone_t)) < hdridx) { hdridx++; - if (hdridx >= sizeof(kmalloc_common.sizes) / sizeof(vm_zone_t *)) + } + if (hdridx >= sizeof(kmalloc_common.sizes) / sizeof(vm_zone_t *)) { return; + } - proc_lockSet(&kmalloc_common.lock); + (void)proc_lockSet(&kmalloc_common.lock); - while (p != NULL) + while (p != NULL) { p = _kmalloc_freeAtom(hdridx, p); + } - proc_lockClear(&kmalloc_common.lock); + (void)proc_lockClear(&kmalloc_common.lock); } @@ -249,19 +270,21 @@ int _kmalloc_init(void) lib_printf("vm: Initializing kernel memory allocator: "); - proc_lockInit(&kmalloc_common.lock, &proc_lockAttrDefault, "kmalloc.common"); + (void)proc_lockInit(&kmalloc_common.lock, &proc_lockAttrDefault, "kmalloc.common"); hdridx = hal_cpuGetLastBit(sizeof(vm_zone_t)); - if (hal_cpuGetFirstBit(sizeof(vm_zone_t)) < hdridx) + if (hal_cpuGetFirstBit(sizeof(vm_zone_t)) < hdridx) { hdridx++; + } if (hdridx >= sizeof(kmalloc_common.sizes) / sizeof(vm_zone_t *)) { lib_printf("BAD HDRIDX!\n"); - return NULL; + return -1; } /* Initialize sizes */ - for (i = 0; i < sizeof(kmalloc_common.sizes) / sizeof(vm_zone_t *); i++) + for (i = 0; i < sizeof(kmalloc_common.sizes) / sizeof(vm_zone_t *); i++) { kmalloc_common.sizes[i] = NULL; + } kmalloc_common.used = NULL; /* Initialize allocated zone tree */ @@ -270,9 +293,9 @@ int _kmalloc_init(void) kmalloc_common.zonehdrs = 16; /* Add first zone_t zone */ - _vm_zoneCreate(&kmalloc_common.firstzone, 1 << hdridx, max(kmalloc_common.zonehdrs, SIZE_PAGE / (1 << hdridx))); + (void)_vm_zoneCreate(&kmalloc_common.firstzone, 0x1UL << hdridx, max(kmalloc_common.zonehdrs, SIZE_PAGE / (0x1UL << hdridx))); LIST_ADD(&kmalloc_common.sizes[hdridx], &kmalloc_common.firstzone); - lib_rbInsert(&kmalloc_common.tree, &kmalloc_common.firstzone.linkage); + (void)lib_rbInsert(&kmalloc_common.tree, &kmalloc_common.firstzone.linkage); kmalloc_common.allocsz = 0; kmalloc_common.hdrblocks = kmalloc_common.firstzone.blocks; diff --git a/vm/map.c b/vm/map.c index 93ea5382c..9516bfa5b 100644 --- a/vm/map.c +++ b/vm/map.c @@ -13,6 +13,8 @@ * %LICENSE% */ +#include + #include "hal/hal.h" #include "lib/lib.h" #include "proc/proc.h" @@ -23,14 +25,16 @@ #include "amap.h" +/* parasoft-suppress-next-line MISRAC2012-RULE_8_6 "Definition in assembly code" */ extern unsigned int __bss_start; -struct { +static struct { vm_map_t *kmap; vm_object_t *kernel; lock_t lock; + unsigned int ntotal, nfree; map_entry_t *free; map_entry_t *entries; @@ -49,7 +53,7 @@ static map_entry_t *map_allocN(int n); void map_free(map_entry_t *entry); -static int _map_force(vm_map_t *map, map_entry_t *e, void *paddr, int prot); +static int _map_force(vm_map_t *map, map_entry_t *e, void *paddr, unsigned int prot); static int map_cmp(rbnode_t *n1, rbnode_t *n2) @@ -57,11 +61,14 @@ static int map_cmp(rbnode_t *n1, rbnode_t *n2) map_entry_t *e1 = lib_treeof(map_entry_t, linkage, n1); map_entry_t *e2 = lib_treeof(map_entry_t, linkage, n2); - if (e2->vaddr + e2->size <= e1->vaddr) + /* parasoft-suppress-next-line MISRAC2012-DIR_4_1 "Variable pass to lib_treeof will not be NULL, so lib_treeof will not be NULL either" */ + if ((ptr_t)e2->vaddr + e2->size <= (ptr_t)e1->vaddr) { return 1; + } - if (e1->vaddr + e1->size <= e2->vaddr) + if ((ptr_t)e1->vaddr + e1->size <= (ptr_t)e2->vaddr) { return -1; + } return 0; } @@ -76,25 +83,29 @@ static void map_augment(rbnode_t *node) if (node->left == NULL) { for (it = node; it->parent != NULL; it = it->parent) { p = lib_treeof(map_entry_t, linkage, it->parent); - if (it->parent->right == it) + if (it->parent->right == it) { break; + } } - n->lmaxgap = (size_t)(n->vaddr <= p->vaddr) ? (n->vaddr - n->map->start) : (n->vaddr - p->vaddr) - p->size; + /* parasoft-suppress-next-line MISRAC2012-DIR_4_1 "Variable pass to lib_treeof will not be NULL, so lib_treeof will not be NULL either" */ + n->lmaxgap = ((ptr_t)n->vaddr <= (ptr_t)p->vaddr) ? ((size_t)n->vaddr - (size_t)n->map->start) : ((size_t)n->vaddr - (size_t)p->vaddr) - p->size; } else { map_entry_t *l = lib_treeof(map_entry_t, linkage, node->left); + /* parasoft-suppress-next-line MISRAC2012-DIR_4_1 "Variable pass to lib_treeof will not be NULL, so lib_treeof will not be NULL either" */ n->lmaxgap = max(l->lmaxgap, l->rmaxgap); } if (node->right == NULL) { for (it = node; it->parent != NULL; it = it->parent) { p = lib_treeof(map_entry_t, linkage, it->parent); - if (it->parent->left == it) + if (it->parent->left == it) { break; + } } - n->rmaxgap = (size_t)(n->vaddr >= p->vaddr) ? (n->map->stop - n->vaddr) - n->size : (p->vaddr - n->vaddr) - n->size; + n->rmaxgap = ((ptr_t)n->vaddr >= (ptr_t)p->vaddr) ? ((size_t)n->map->stop - (size_t)n->vaddr) - n->size : ((size_t)p->vaddr - (size_t)n->vaddr) - n->size; } else { map_entry_t *r = lib_treeof(map_entry_t, linkage, node->right); @@ -105,17 +116,20 @@ static void map_augment(rbnode_t *node) n = lib_treeof(map_entry_t, linkage, it); p = lib_treeof(map_entry_t, linkage, it->parent); - if (it->parent->left == it) + if (it->parent->left == it) { p->lmaxgap = max(n->lmaxgap, n->rmaxgap); - else + } + else { p->rmaxgap = max(n->lmaxgap, n->rmaxgap); + } } } -void map_dump(rbnode_t *node) +static void map_dump(rbnode_t *node) { map_entry_t *e = lib_treeof(map_entry_t, linkage, node); + /* parasoft-suppress-next-line MISRAC2012-DIR_4_1 "Variable pass to lib_treeof will not be NULL, so lib_treeof will not be NULL either" */ lib_printf("%p+%x, %x, %x", e->vaddr, e->size, e->lmaxgap, e->rmaxgap); } @@ -124,9 +138,9 @@ static int _map_add(process_t *p, vm_map_t *map, map_entry_t *entry) { #ifdef NOMMU if (p != NULL) { - proc_lockSet(&p->lock); + (void)proc_lockSet(&p->lock); LIST_ADD(&p->entries, entry); - proc_lockClear(&p->lock); + (void)proc_lockClear(&p->lock); } entry->process = p; #endif @@ -141,9 +155,9 @@ static void _map_remove(vm_map_t *map, map_entry_t *entry) #ifdef NOMMU process_t *p = entry->process; if (p != NULL) { - proc_lockSet(&p->lock); + (void)proc_lockSet(&p->lock); LIST_REMOVE(&p->entries, entry); - proc_lockClear(&p->lock); + (void)proc_lockClear(&p->lock); } entry->process = NULL; #endif @@ -156,33 +170,34 @@ static void _map_remove(vm_map_t *map, map_entry_t *entry) static void _entry_put(vm_map_t *map, map_entry_t *e) { amap_put(e->amap); - vm_objectPut(e->object); + (void)vm_objectPut(e->object); _map_remove(map, e); map_free(e); } -void *_map_find(vm_map_t *map, void *vaddr, size_t size, map_entry_t **prev, map_entry_t **next) +static void *_map_find(vm_map_t *map, void *vaddr, size_t size, map_entry_t **prev, map_entry_t **next) { map_entry_t *e = lib_treeof(map_entry_t, linkage, map->tree.root); *prev = NULL; *next = NULL; - if (((void *)map->stop - size) < vaddr) + if (((ptr_t)map->stop - size) < (ptr_t)vaddr) { return NULL; - - if (vaddr < map->start) + } + if ((ptr_t)vaddr < (ptr_t)map->start) { vaddr = map->start; + } while (e != NULL) { - if ((size <= e->lmaxgap) && ((vaddr + size) <= e->vaddr)) { + if ((size <= e->lmaxgap) && (((ptr_t)vaddr + size) <= (ptr_t)e->vaddr)) { *next = e; - if (e->linkage.left == NULL) - return max(vaddr, e->vaddr - e->lmaxgap); - + if (e->linkage.left == NULL) { + return (void *)max((ptr_t)vaddr, (ptr_t)e->vaddr - e->lmaxgap); + } e = lib_treeof(map_entry_t, linkage, e->linkage.left); continue; } @@ -190,31 +205,37 @@ void *_map_find(vm_map_t *map, void *vaddr, size_t size, map_entry_t **prev, map if ((size <= e->rmaxgap) /*&& (vaddr + size) <= (e->vaddr + e->size + e->rmaxgap)*/) { *prev = e; - if (e->linkage.right == NULL) - return max(vaddr, e->vaddr + e->size); - + if (e->linkage.right == NULL) { + return (void *)max((ptr_t)vaddr, (ptr_t)e->vaddr + e->size); + } e = lib_treeof(map_entry_t, linkage, e->linkage.right); continue; } - for (;; e = lib_treeof(map_entry_t, linkage, e->linkage.parent)) { - if (e->linkage.parent == NULL) + for (;;) { + if (e->linkage.parent == NULL) { return NULL; + } - if ((e == lib_treeof(map_entry_t, linkage, e->linkage.parent->left)) && ((lib_treeof(map_entry_t, linkage, e->linkage.parent)->rmaxgap >= size))) + if ((e == lib_treeof(map_entry_t, linkage, e->linkage.parent->left)) && ((lib_treeof(map_entry_t, linkage, e->linkage.parent)->rmaxgap >= size))) { break; + } + e = lib_treeof(map_entry_t, linkage, e->linkage.parent); } e = lib_treeof(map_entry_t, linkage, e->linkage.parent); - for (*next = e; (*next)->linkage.parent != NULL; *next = lib_treeof(map_entry_t, linkage, (*next)->linkage.parent)) - if ((*next) == lib_treeof(map_entry_t, linkage, (*next)->linkage.parent->left)) + for (*next = e; (*next)->linkage.parent != NULL; *next = lib_treeof(map_entry_t, linkage, (*next)->linkage.parent)) { + if ((*next) == lib_treeof(map_entry_t, linkage, (*next)->linkage.parent->left)) { break; + } + } *next = lib_treeof(map_entry_t, linkage, (*next)->linkage.parent); *prev = e; - if (e->linkage.right == NULL) + if (e->linkage.right == NULL) { return e->vaddr + e->size; + } e = lib_treeof(map_entry_t, linkage, e->linkage.right); } @@ -231,49 +252,61 @@ static void *_map_map(vm_map_t *map, void *vaddr, process_t *proc, size_t size, amap_t *amap; #ifdef NOMMU - if (o == VM_OBJ_PHYSMEM) + if (o == VM_OBJ_PHYSMEM) { return (void *)(ptr_t)offs; + } #endif - if ((v = _map_find(map, vaddr, size, &prev, &next)) == NULL) + if ((v = _map_find(map, vaddr, size, &prev, &next)) == NULL) { return NULL; + } - rmerge = next != NULL && v + size == next->vaddr && next->object == o && next->flags == flags && next->prot == prot && next->protOrig == prot; - lmerge = prev != NULL && v == prev->vaddr + prev->size && prev->object == o && prev->flags == flags && prev->prot == prot && prev->protOrig == prot; + rmerge = (next != NULL && v + size == next->vaddr && next->object == o && next->flags == flags && next->prot == prot && next->protOrig == prot) ? 1U : 0U; + lmerge = (prev != NULL && v == prev->vaddr + prev->size && prev->object == o && prev->flags == flags && prev->prot == prot && prev->protOrig == prot) ? 1U : 0U; if (offs != -1) { - if (offs & (SIZE_PAGE - 1)) + if (((u64)offs & (SIZE_PAGE - 1UL)) != 0UL) { return NULL; + } - if (rmerge) - rmerge &= next->offs == offs + size; + if (rmerge != 0U) { + rmerge &= (next->offs == offs + (s64)size) ? 1U : 0U; + } - if (lmerge) - lmerge &= offs == prev->offs + prev->size; + if (lmerge != 0U) { + lmerge &= (offs == prev->offs + (s64)prev->size) ? 1U : 0U; + } } #ifdef NOMMU - rmerge = rmerge && proc == next->process; - lmerge = lmerge && proc == prev->process; + rmerge = (rmerge != 0U && (proc == next->process)) ? 1U : 0U; + lmerge = (lmerge != 0U && (proc == prev->process)) ? 1U : 0U; #endif #if 1 if (o == NULL) { - if (lmerge && rmerge && (next->amap == prev->amap)) { + if (lmerge != 0U && rmerge != 0U && (next->amap == prev->amap)) { /* Both use the same amap, can merge */ } else { /* Can't merge to the left if amap array size is too small */ - if (lmerge && (amap = prev->amap) != NULL && (amap->size * SIZE_PAGE - prev->aoffs - prev->size) < size) - lmerge = 0; - + if (lmerge != 0U) { + amap = prev->amap; + if (amap != NULL && (amap->size * SIZE_PAGE - (size_t)prev->aoffs - prev->size) < size) { + lmerge = 0; + } + } /* Can't merge to the right if amap offset is too small */ - if (rmerge && (amap = next->amap) != NULL && next->aoffs < size) - rmerge = 0; - + if (rmerge != 0U) { + amap = next->amap; + if (amap != NULL && (size_t)next->aoffs < size) { + rmerge = 0; + } + } /* amaps differ, we can only merge one way */ - if (lmerge && rmerge) + if (lmerge != 0U && rmerge != 0U) { rmerge = 0; + } } } #else @@ -282,7 +315,7 @@ static void *_map_map(vm_map_t *map, void *vaddr, process_t *proc, size_t size, rmerge = lmerge = 0; #endif - if (rmerge && lmerge) { + if (rmerge != 0U && lmerge != 0U) { e = prev; e->size += size + next->size; e->rmaxgap = next->rmaxgap; @@ -290,15 +323,16 @@ static void *_map_map(vm_map_t *map, void *vaddr, process_t *proc, size_t size, map_augment(&e->linkage); _entry_put(map, next); } - else if (rmerge) { + else if (rmerge != 0U) { e = next; e->vaddr = v; e->offs = offs; e->size += size; e->lmaxgap -= size; - if (e->aoffs) - e->aoffs -= size; + if (e->aoffs != 0) { + e->aoffs -= (int)size; + } if (prev != NULL) { prev->rmaxgap -= size; @@ -307,7 +341,7 @@ static void *_map_map(vm_map_t *map, void *vaddr, process_t *proc, size_t size, map_augment(&e->linkage); } - else if (lmerge) { + else if (lmerge != 0U) { e = prev; e->size += size; e->rmaxgap -= size; @@ -320,8 +354,9 @@ static void *_map_map(vm_map_t *map, void *vaddr, process_t *proc, size_t size, map_augment(&e->linkage); } else { - if ((e = map_alloc()) == NULL) + if ((e = map_alloc()) == NULL) { return NULL; + } e->vaddr = v; e->size = size; @@ -340,21 +375,25 @@ static void *_map_map(vm_map_t *map, void *vaddr, process_t *proc, size_t size, e->amap = amap_ref(next->amap); e->aoffs = next->aoffs - (next->vaddr - e->vaddr); } - else if (prev != NULL && prev->amap != NULL && (SIZE_PAGE * prev->amap->size - prev->aoffs + prev->vaddr) >= (e->vaddr + size)) { + else if (prev != NULL && prev->amap != NULL && (SIZE_PAGE * prev->amap->size - (size_t)prev->aoffs + (size_t)prev->vaddr) >= ((size_t)e->vaddr + size)) { e->amap = amap_ref(prev->amap); e->aoffs = prev->aoffs + (e->vaddr - prev->vaddr); } + else { + /* No action required */ + } } - _map_add(proc, map, e); + (void)_map_add(proc, map, e); } /* Clear anon entries */ - if (e->amap != NULL) - amap_clear(e->amap, e->aoffs + (v - e->vaddr), size); - - if (entry != NULL) + if (e->amap != NULL) { + amap_clear(e->amap, (size_t)e->aoffs + ((size_t)v - (size_t)e->vaddr), size); + } + if (entry != NULL) { *entry = e; + } return v; } @@ -362,9 +401,9 @@ static void *_map_map(vm_map_t *map, void *vaddr, process_t *proc, size_t size, void *vm_mapFind(vm_map_t *map, void *vaddr, size_t size, u8 flags, u8 prot) { - proc_lockSet(&map->lock); + (void)proc_lockSet(&map->lock); vaddr = _map_map(map, vaddr, NULL, size, prot, map_common.kernel, -1, flags, NULL); - proc_lockClear(&map->lock); + (void)proc_lockClear(&map->lock); return vaddr; } @@ -376,7 +415,7 @@ static void vm_mapEntryCopy(map_entry_t *dst, map_entry_t *src, int refAnons) src->amap = amap_ref(dst->amap); /* In case of splitting the entry the anons shouldn't be reffed as they just change the owner. */ if (refAnons != 0) { - amap_getanons(dst->amap, dst->aoffs, dst->size); + amap_getanons(dst->amap, dst->aoffs, (int)dst->size); } src->object = vm_objectRef(dst->object); } @@ -388,15 +427,15 @@ static void vm_mapEntrySplit(process_t *p, vm_map_t *m, map_entry_t *e, map_entr new->vaddr += len; new->size -= len; - new->aoffs += len; - new->offs = (new->offs == -1) ? -1 : (new->offs + len); + new->aoffs += (int)len; + new->offs = (new->offs == -1) ? -1 : (new->offs + (s64)len); new->lmaxgap = 0; e->size = len; e->rmaxgap = 0; map_augment(&e->linkage); - _map_add(p, m, new); + (void)_map_add(p, m, new); } @@ -411,7 +450,7 @@ int _vm_munmap(vm_map_t *map, void *vaddr, size_t size) ptr_t eAoffs; int putEntry; - if (((size & (SIZE_PAGE - 1)) != 0) || (((ptr_t)vaddr & (SIZE_PAGE - 1)) != 0)) { + if (((size & (SIZE_PAGE - 1U)) != 0U) || (((ptr_t)vaddr & (SIZE_PAGE - 1U)) != 0U)) { return -EINVAL; } @@ -434,7 +473,7 @@ int _vm_munmap(vm_map_t *map, void *vaddr, size_t size) overlapEnd = min((ptr_t)e->vaddr + e->size, (ptr_t)vaddr + size); overlapSize = (size_t)(overlapEnd - overlapStart); overlapEOffset = (size_t)(overlapStart - (ptr_t)e->vaddr); - eAoffs = e->aoffs; + eAoffs = (unsigned int)e->aoffs; putEntry = 0; @@ -443,8 +482,8 @@ int _vm_munmap(vm_map_t *map, void *vaddr, size_t size) putEntry = 1; } else { - e->aoffs += overlapSize; - e->offs = (e->offs == -1) ? -1 : (e->offs + overlapSize); + e->aoffs += (int)overlapSize; + e->offs = (e->offs == -1) ? -1 : (e->offs + (s64)overlapSize); e->vaddr += overlapSize; e->size -= overlapSize; e->lmaxgap += overlapSize; @@ -485,9 +524,10 @@ int _vm_munmap(vm_map_t *map, void *vaddr, size_t size) /* Perform amap and pmap changes only when we are sure we have enough space to perform corresponding map changes. */ /* Note: what if NEEDS_COPY? */ - amap_putanons(e->amap, eAoffs + (int)overlapEOffset, overlapSize); + /* TODO: Offset s 64 bits in size and we perform cast to int check if we don't lose info */ + amap_putanons(e->amap, (int)eAoffs + (int)overlapEOffset, (int)overlapSize); - pmap_remove(&map->pmap, (void *)overlapStart, (void *)overlapEnd); + (void)pmap_remove(&map->pmap, (void *)overlapStart, (void *)overlapEnd); if (putEntry != 0) { _entry_put(map, e); @@ -498,13 +538,13 @@ int _vm_munmap(vm_map_t *map, void *vaddr, size_t size) } -int vm_flagsToAttr(int flags) +unsigned vm_flagsToAttr(unsigned flags) { - int attr = 0; - if ((flags & MAP_UNCACHED) != 0) { + unsigned attr = 0; + if ((flags & MAP_UNCACHED) != 0U) { attr |= PGHD_NOT_CACHED; } - if ((flags & MAP_DEVICE) != 0) { + if ((flags & MAP_DEVICE) != 0U) { attr |= PGHD_DEV; } @@ -512,20 +552,20 @@ int vm_flagsToAttr(int flags) } -static int vm_protToAttr(int prot) +static unsigned vm_protToAttr(unsigned prot) { - int attr = 0; + unsigned attr = 0; - if ((prot & PROT_READ) != 0) { + if ((prot & PROT_READ) != 0U) { attr |= (PGHD_READ | PGHD_PRESENT); } - if ((prot & PROT_WRITE) != 0) { + if ((prot & PROT_WRITE) != 0U) { attr |= (PGHD_WRITE | PGHD_PRESENT); } - if ((prot & PROT_EXEC) != 0) { + if ((prot & PROT_EXEC) != 0U) { attr |= PGHD_EXEC; } - if ((prot & PROT_USER) != 0) { + if ((prot & PROT_USER) != 0U) { attr |= PGHD_USER; } @@ -535,49 +575,60 @@ static int vm_protToAttr(int prot) void *_vm_mmap(vm_map_t *map, void *vaddr, page_t *p, size_t size, u8 prot, vm_object_t *o, off_t offs, u8 flags) { - int attr; + unsigned attr; void *w; process_t *process = NULL; thread_t *current; map_entry_t *e; - if ((size == 0) || ((size & (SIZE_PAGE - 1)) != 0)) { + if ((size == 0U) || ((size & (SIZE_PAGE - 1U)) != 0U)) { return NULL; } - if ((flags & MAP_FIXED) != 0) { + if ((flags & MAP_FIXED) != 0U) { if (_vm_munmap(map, vaddr, size) < 0) { return NULL; } } /* NULL page indicates that proc sybsystem is ready */ - if (p == NULL && (current = proc_current()) != NULL) - process = current->process; - else if (p != NULL && p->idx != 0) - size = 1 << p->idx; + if (p == NULL) { + current = proc_current(); + if (current != NULL) { + process = current->process; + } + } + else if (p != NULL && p->idx != 0U) { + size = 1UL << p->idx; + } + else { + /* No action required */ + } + - if ((vaddr = _map_map(map, vaddr, process, size, prot, o, offs, flags, &e)) == NULL) + if ((vaddr = _map_map(map, vaddr, process, size, prot, o, offs, flags, &e)) == NULL) { return NULL; + } if (p != NULL) { attr = vm_protToAttr(prot) | vm_flagsToAttr(flags); for (w = vaddr; w < (vaddr + size); w += SIZE_PAGE) { - page_map(&map->pmap, w, (p++)->addr, attr); + (void)page_map(&map->pmap, w, (p++)->addr, attr); } return vaddr; } - if (process != NULL && process->lazy) + if (process != NULL && process->lazy != 0U) { return vaddr; + } for (w = vaddr; w < vaddr + size; w += SIZE_PAGE) { - if (_map_force(map, e, w, prot)) { + if (_map_force(map, e, w, prot) != 0) { amap_putanons(e->amap, e->aoffs, w - vaddr); - pmap_remove(&map->pmap, vaddr, (void *)((ptr_t)w + SIZE_PAGE)); + (void)pmap_remove(&map->pmap, vaddr, (void *)((ptr_t)w + SIZE_PAGE)); _entry_put(map, e); return NULL; @@ -594,9 +645,9 @@ void *vm_mmap(vm_map_t *map, void *vaddr, page_t *p, size_t size, u8 prot, vm_ob map = map_common.kmap; } - proc_lockSet(&map->lock); + (void)proc_lockSet(&map->lock); vaddr = _vm_mmap(map, vaddr, p, size, prot, o, offs, flags); - proc_lockClear(&map->lock); + (void)proc_lockClear(&map->lock); return vaddr; } @@ -609,7 +660,7 @@ int vm_lockVerify(vm_map_t *map, amap_t **amap, vm_object_t *o, void *vaddr, off { map_entry_t t, *e; - proc_lockSet(&map->lock); + (void)proc_lockSet(&map->lock); t.vaddr = vaddr; t.size = SIZE_PAGE; @@ -617,14 +668,16 @@ int vm_lockVerify(vm_map_t *map, amap_t **amap, vm_object_t *o, void *vaddr, off e = lib_treeof(map_entry_t, linkage, lib_rbFind(&map->tree, &t.linkage)); if (e == NULL || e->object != o || (amap != NULL && e->amap != *amap) /* More checks? */) { - if (amap != NULL) + if (amap != NULL) { *amap = NULL; + } return -EINVAL; } - if (amap != NULL) - proc_lockSet(&(*amap)->lock); + if (amap != NULL) { + (void)proc_lockSet(&(*amap)->lock); + } return EOK; } @@ -632,10 +685,10 @@ int vm_lockVerify(vm_map_t *map, amap_t **amap, vm_object_t *o, void *vaddr, off int vm_mapFlags(vm_map_t *map, void *vaddr) { - int flags; + unsigned flags; map_entry_t t, *e; - proc_lockSet(&map->lock); + (void)proc_lockSet(&map->lock); t.vaddr = vaddr; t.size = SIZE_PAGE; @@ -643,23 +696,23 @@ int vm_mapFlags(vm_map_t *map, void *vaddr) e = lib_treeof(map_entry_t, linkage, lib_rbFind(&map->tree, &t.linkage)); if (e == NULL) { - proc_lockClear(&map->lock); + (void)proc_lockClear(&map->lock); return -EFAULT; } flags = e->flags & ~MAP_NEEDSCOPY; - proc_lockClear(&map->lock); + (void)proc_lockClear(&map->lock); - return flags; + return (int)flags; } -int vm_mapForce(vm_map_t *map, void *paddr, int prot) +int vm_mapForce(vm_map_t *map, void *paddr, unsigned prot) { map_entry_t t, *e; int err; - proc_lockSet(&map->lock); + (void)proc_lockSet(&map->lock); t.vaddr = paddr; t.size = SIZE_PAGE; @@ -667,32 +720,33 @@ int vm_mapForce(vm_map_t *map, void *paddr, int prot) e = lib_treeof(map_entry_t, linkage, lib_rbFind(&map->tree, &t.linkage)); if (e == NULL) { - proc_lockClear(&map->lock); + (void)proc_lockClear(&map->lock); return -EFAULT; } err = _map_force(map, e, paddr, prot); - proc_lockClear(&map->lock); + (void)proc_lockClear(&map->lock); return err; } -static int map_checkProt(int baseProt, int newProt) +static unsigned map_checkProt(unsigned int baseProt, unsigned int newProt) { return (baseProt | newProt) ^ baseProt; } -static int _map_force(vm_map_t *map, map_entry_t *e, void *paddr, int prot) +static int _map_force(vm_map_t *map, map_entry_t *e, void *paddr, unsigned int prot) { - int attr, offs; + unsigned int attr; + int offs; page_t *p = NULL; - int flagsCheck = map_checkProt(e->prot, prot); + int flagsCheck = (int)map_checkProt(e->prot, prot); if (flagsCheck != 0) { return flagsCheck; } - if ((((prot & PROT_WRITE) != 0) && ((e->flags & MAP_NEEDSCOPY) != 0)) || ((e->object == NULL) && (e->amap == NULL))) { + if (((((unsigned int)prot & PROT_WRITE) != 0U) && ((e->flags & MAP_NEEDSCOPY) != 0U)) || ((e->object == NULL) && (e->amap == NULL))) { e->amap = amap_create(e->amap, &e->aoffs, e->size); if (e->amap == NULL) { return -ENOMEM; @@ -701,7 +755,7 @@ static int _map_force(vm_map_t *map, map_entry_t *e, void *paddr, int prot) e->flags &= ~MAP_NEEDSCOPY; } - offs = (paddr - e->vaddr); + offs = (int)(ptr_t)((ptr_t)paddr - (ptr_t)e->vaddr); if (e->amap == NULL) { p = vm_objectPage(map, NULL, e->object, paddr, ((e->offs < 0) ? e->offs : (e->offs + offs))); @@ -710,10 +764,11 @@ static int _map_force(vm_map_t *map, map_entry_t *e, void *paddr, int prot) p = amap_page(map, e->amap, e->object, paddr, e->aoffs + offs, ((e->offs < 0) ? e->offs : (e->offs + offs)), prot); } - attr = (vm_protToAttr(prot) | vm_flagsToAttr(e->flags)); + attr = vm_protToAttr(prot) | vm_flagsToAttr(e->flags); if ((p == NULL) && (e->object == VM_OBJ_PHYSMEM)) { - if (page_map(&map->pmap, paddr, e->offs + offs, attr) < 0) { + /* TODO: Offset s 64 bits in size and we perform cast to int check if we don't lose info */ + if (page_map(&map->pmap, paddr, (addr_t)e->offs + (addr_t)offs, attr) < 0) { return -ENOMEM; } } @@ -721,9 +776,13 @@ static int _map_force(vm_map_t *map, map_entry_t *e, void *paddr, int prot) return -ENOMEM; } else if (page_map(&map->pmap, paddr, p->addr, attr) < 0) { - amap_putanons(e->amap, e->aoffs + offs, SIZE_PAGE); + amap_putanons(e->amap, e->aoffs + offs, (int)SIZE_PAGE); return -ENOMEM; } + else { + /* No action required */ + } + return EOK; } @@ -778,9 +837,9 @@ int vm_munmap(vm_map_t *map, void *vaddr, size_t size) { int result; - proc_lockSet(&map->lock); + (void)proc_lockSet(&map->lock); result = _vm_munmap(map, vaddr, size); - proc_lockClear(&map->lock); + (void)proc_lockClear(&map->lock); return result; } @@ -793,16 +852,16 @@ int vm_mprotect(vm_map_t *map, void *vaddr, size_t len, int prot) size_t lenLeft = len, currSize, needed; process_t *p = proc_current()->process; addr_t pa; - int attr; + unsigned int attr; int needscopyNonLazy; map_entry_t *e, *buf = NULL, *prev; map_entry_t t; - if (((((ptr_t)vaddr) & (SIZE_PAGE - 1)) != 0) || (len == 0) || ((len & (SIZE_PAGE - 1)) != 0)) { + if (((((ptr_t)vaddr) & (SIZE_PAGE - 1U)) != 0U) || (len == 0U) || ((len & (SIZE_PAGE - 1U)) != 0U)) { return -EINVAL; } - proc_lockSet(&map->lock); + (void)proc_lockSet(&map->lock); /* Validate */ @@ -816,7 +875,7 @@ int vm_mprotect(vm_map_t *map, void *vaddr, size_t len, int prot) result = -ENOMEM; break; } - if (map_checkProt(e->protOrig, prot) != 0) { + if (map_checkProt(e->protOrig, (unsigned int)prot) != 0U) { result = -EACCES; break; } @@ -824,7 +883,7 @@ int vm_mprotect(vm_map_t *map, void *vaddr, size_t len, int prot) currSize = e->size; /* First entry may not be aligned. */ if (e->vaddr < t.vaddr) { - currSize -= (t.vaddr - e->vaddr); + currSize -= ((addr_t)t.vaddr - (addr_t)e->vaddr); needed++; } /* Last entry may not be changed fully. */ @@ -833,10 +892,10 @@ int vm_mprotect(vm_map_t *map, void *vaddr, size_t len, int prot) } lenLeft -= min(lenLeft, currSize); t.vaddr += currSize; - } while (lenLeft != 0); + } while (lenLeft != 0U); - if ((result == EOK) && (needed != 0)) { - buf = map_allocN(needed); + if ((result == EOK) && (needed != 0U)) { + buf = map_allocN((int)needed); if (buf == NULL) { result = -ENOMEM; } @@ -858,7 +917,7 @@ int vm_mprotect(vm_map_t *map, void *vaddr, size_t len, int prot) e = buf; buf = buf->next; - vm_mapEntrySplit(p, map, prev, e, t.vaddr - prev->vaddr); + vm_mapEntrySplit(p, map, prev, e, (size_t)t.vaddr - (size_t)prev->vaddr); } } else if ((prev->protOrig == e->protOrig) && (prev->object == e->object) && (prev->flags == e->flags)) { @@ -871,18 +930,23 @@ int vm_mprotect(vm_map_t *map, void *vaddr, size_t len, int prot) map_augment(&prev->linkage); e = prev; } + else { + /* No action required */ + } + if (lenLeft < e->size) { vm_mapEntrySplit(p, map, e, buf, lenLeft); } - e->prot = prot; + /* TODO: int cast to char - check if we don't lose info*/ + e->prot = (unsigned char)prot; - attr = vm_protToAttr(e->prot) | vm_flagsToAttr(e->flags); + attr = (vm_protToAttr(e->prot) | vm_flagsToAttr(e->flags)); needscopyNonLazy = 0; /* If an entry needs copy, enter it as a readonly to copy it on first access. */ - if ((e->flags & MAP_NEEDSCOPY) != 0) { - if ((p == NULL) || (p->lazy == 0)) { + if ((e->flags & MAP_NEEDSCOPY) != 0U) { + if ((p == NULL) || (p->lazy == 0U)) { needscopyNonLazy = 1; } else { @@ -892,21 +956,21 @@ int vm_mprotect(vm_map_t *map, void *vaddr, size_t len, int prot) for (currVaddr = e->vaddr; currVaddr < (e->vaddr + e->size); currVaddr += SIZE_PAGE) { if (needscopyNonLazy == 0) { pa = pmap_resolve(&map->pmap, currVaddr); - if (pa != 0) { - result = pmap_enter(&map->pmap, pa, currVaddr, attr, NULL); + if (pa != 0U) { + result = pmap_enter(&map->pmap, pa, currVaddr, (int)attr, NULL); } } else { - result = _map_force(map, e, currVaddr, prot); + result = _map_force(map, e, currVaddr, (unsigned int)prot); } } lenLeft -= e->size; prev = e; - } while ((lenLeft != 0) && (result == EOK)); + } while ((lenLeft != 0U) && (result == EOK)); } - proc_lockClear(&map->lock); + (void)proc_lockClear(&map->lock); return result; } @@ -914,12 +978,13 @@ int vm_mprotect(vm_map_t *map, void *vaddr, size_t len, int prot) void vm_mapDump(vm_map_t *map) { - if (map == NULL) + if (map == NULL) { map = map_common.kmap; + } - proc_lockSet(&map->lock); + (void)proc_lockSet(&map->lock); lib_rbDump(map->tree.root, map_dump); - proc_lockClear(&map->lock); + (void)proc_lockClear(&map->lock); } @@ -941,10 +1006,10 @@ int vm_mapCreate(vm_map_t *map, void *start, void *stop) pmap_create(&map->pmap, &map_common.kmap->pmap, map->pmap.pmapp, map->pmap.pmapv); #else - pmap_create(&map->pmap, &map_common.kmap->pmap, NULL, NULL); + (void)pmap_create(&map->pmap, &map_common.kmap->pmap, NULL, NULL); #endif - proc_lockInit(&map->lock, &proc_lockAttrDefault, "map.map"); + (void)proc_lockInit(&map->lock, &proc_lockAttrDefault, "map.map"); lib_rbInit(&map->tree, map_cmp, map_augment); return EOK; } @@ -960,9 +1025,9 @@ static void _map_free(map_entry_t *entry) void map_free(map_entry_t *entry) { - proc_lockSet(&map_common.lock); + (void)proc_lockSet(&map_common.lock); _map_free(entry); - proc_lockClear(&map_common.lock); + (void)proc_lockClear(&map_common.lock); } @@ -991,7 +1056,7 @@ void vm_mapDestroy(process_t *p, vm_map_t *map) #else map_entry_t *temp = NULL; - proc_lockSet2(&map->lock, &p->lock); + (void)proc_lockSet2(&map->lock, &p->lock); while (p->entries != NULL) { e = p->entries; @@ -1003,7 +1068,7 @@ void vm_mapDestroy(process_t *p, vm_map_t *map) } else { amap_put(e->amap); - vm_objectPut(e->object); + (void)vm_objectPut(e->object); lib_rbRemove(&map->tree, &e->linkage); e->map = NULL; e->process = NULL; @@ -1018,8 +1083,8 @@ void vm_mapDestroy(process_t *p, vm_map_t *map) LIST_ADD(&p->entries, e); } - proc_lockClear(&p->lock); - proc_lockClear(&map->lock); + (void)proc_lockClear(&p->lock); + (void)proc_lockClear(&map->lock); #endif } @@ -1027,13 +1092,15 @@ void vm_mapDestroy(process_t *p, vm_map_t *map) static void remap_readonly(vm_map_t *map, map_entry_t *e, int offs) { addr_t a; - int attr = PGHD_PRESENT; + unsigned int attr = PGHD_PRESENT; - if (e->prot & PROT_USER) + if ((e->prot & PROT_USER) != 0U) { attr |= PGHD_USER; + } - if ((a = pmap_resolve(&map->pmap, e->vaddr + offs))) - page_map(&map->pmap, e->vaddr + offs, a, attr); + if ((a = pmap_resolve(&map->pmap, e->vaddr + offs)) != 0U) { + (void)page_map(&map->pmap, e->vaddr + offs, a, attr); + } } @@ -1043,50 +1110,55 @@ int vm_mapCopy(process_t *proc, vm_map_t *dst, vm_map_t *src) map_entry_t *e, *f; int offs; - proc_lockSet2(&src->lock, &dst->lock); + (void)proc_lockSet2(&src->lock, &dst->lock); for (n = lib_rbMinimum(src->tree.root); n != NULL; n = lib_rbNext(n)) { e = lib_treeof(map_entry_t, linkage, n); - if ((e->flags & MAP_NOINHERIT) != 0) { + if ((e->flags & MAP_NOINHERIT) != 0U) { continue; } f = map_alloc(); if (f == NULL) { - proc_lockClear(&dst->lock); - proc_lockClear(&src->lock); + (void)proc_lockClear(&dst->lock); + (void)proc_lockClear(&src->lock); vm_mapDestroy(proc, dst); return -ENOMEM; } vm_mapEntryCopy(f, e, 1); - _map_add(proc, dst, f); + (void)_map_add(proc, dst, f); - if (((e->protOrig & PROT_WRITE) != 0) && ((e->flags & MAP_DEVICE) == 0)) { + if (((e->protOrig & PROT_WRITE) != 0U) && ((e->flags & MAP_DEVICE) == 0U)) { e->flags |= MAP_NEEDSCOPY; f->flags |= MAP_NEEDSCOPY; - for (offs = 0; offs < f->size; offs += SIZE_PAGE) { + for (offs = 0; offs < (int)f->size; offs += (int)SIZE_PAGE) { remap_readonly(src, e, offs); remap_readonly(dst, f, offs); } } - if ((proc == NULL) || (proc->lazy == 0)) { - for (offs = 0; offs < f->size; offs += SIZE_PAGE) { - if ((_map_force(dst, f, f->vaddr + offs, f->prot) != 0) || - (_map_force(src, e, e->vaddr + offs, e->prot) != 0)) { - proc_lockClear(&dst->lock); - proc_lockClear(&src->lock); + if ((proc == NULL) || (proc->lazy == 0U)) { + for (offs = 0; offs < (int)f->size; offs += (int)SIZE_PAGE) { + if (_map_force(dst, f, f->vaddr + offs, f->prot) != 0) { + (void)proc_lockClear(&dst->lock); + (void)proc_lockClear(&src->lock); + return -ENOMEM; + } + + if (_map_force(src, e, e->vaddr + offs, e->prot) != 0) { + (void)proc_lockClear(&dst->lock); + (void)proc_lockClear(&src->lock); return -ENOMEM; } } } } - proc_lockClear(&dst->lock); - proc_lockClear(&src->lock); + (void)proc_lockClear(&dst->lock); + (void)proc_lockClear(&src->lock); return EOK; } @@ -1131,9 +1203,9 @@ int vm_mapBelongs(const struct _process_t *proc, const void *ptr, size_t size) { int ret; - proc_lockSet(&proc->mapp->lock); + (void)proc_lockSet(&proc->mapp->lock); ret = _vm_mapBelongs(proc, ptr, size); - proc_lockClear(&proc->mapp->lock); + (void)proc_lockClear(&proc->mapp->lock); LIB_ASSERT(ret == 0, "Fault @0x%p (%zu) path: %s, pid: %d\n", ptr, size, proc->path, process_getPid(proc)); @@ -1147,20 +1219,20 @@ void vm_mapinfo(meminfo_t *info) map_entry_t *e; vm_map_t *map; const syspage_map_t *spMap; - unsigned int size; + int size; process_t *process; int i; size_t total, free; - proc_lockSet(&map_common.lock); + (void)proc_lockSet(&map_common.lock); info->entry.total = map_common.ntotal; info->entry.free = map_common.nfree; info->entry.sz = sizeof(map_entry_t); - proc_lockClear(&map_common.lock); + (void)proc_lockClear(&map_common.lock); if (info->entry.mapsz != -1) { - process = proc_find(info->entry.pid); + process = proc_find((int)info->entry.pid); if (process == NULL) { info->entry.mapsz = -1; @@ -1168,7 +1240,7 @@ void vm_mapinfo(meminfo_t *info) } if ((map = process->mapp) != NULL) { - proc_lockSet(&map->lock); + (void)proc_lockSet(&map->lock); #ifndef NOMMU for (size = 0, n = lib_rbMinimum(map->tree.root); n != NULL; n = lib_rbNext(n), ++size) { @@ -1215,13 +1287,14 @@ void vm_mapinfo(meminfo_t *info) info->entry.map[size].flags = e->flags; info->entry.map[size].prot = e->prot; info->entry.map[size].protOrig = e->protOrig; - info->entry.map[size].anonsz = ~0; + info->entry.map[size].anonsz = ~0x0U; if (e->amap != NULL) { info->entry.map[size].anonsz = 0; - for (i = 0; i < e->amap->size; ++i) { - if (e->amap->anons[i] != NULL) + for (i = 0; i < (int)e->amap->size; ++i) { + if (e->amap->anons[i] != NULL) { info->entry.map[size].anonsz += SIZE_PAGE; + } } } @@ -1244,20 +1317,22 @@ void vm_mapinfo(meminfo_t *info) } while (e != process->entries); #endif - proc_lockClear(&map->lock); + (void)proc_lockClear(&map->lock); } else { size = 0; } info->entry.mapsz = size; - proc_put(process); + (void)proc_put(process); } if (info->entry.kmapsz != -1) { - proc_lockSet(&map_common.kmap->lock); + (void)proc_lockSet(&map_common.kmap->lock); + + size = 0; - for (size = 0, n = lib_rbMinimum(map_common.kmap->tree.root); n != NULL; n = lib_rbNext(n), ++size) { + for (n = lib_rbMinimum(map_common.kmap->tree.root); n != NULL; n = lib_rbNext(n)) { if (info->entry.kmap != NULL && info->entry.kmapsz > size) { e = lib_treeof(map_entry_t, linkage, n); @@ -1266,13 +1341,14 @@ void vm_mapinfo(meminfo_t *info) info->entry.kmap[size].flags = e->flags; info->entry.kmap[size].prot = e->prot; info->entry.kmap[size].protOrig = e->protOrig; - info->entry.kmap[size].anonsz = ~0; + info->entry.kmap[size].anonsz = ~0x0U; if (e->amap != NULL) { - info->entry.kmap[size].anonsz = 0; - for (i = 0; i < e->amap->size; ++i) { - if (e->amap->anons[i] != NULL) + info->entry.kmap[size].anonsz = 0x0U; + for (i = 0; i < (int)e->amap->size; ++i) { + if (e->amap->anons[i] != NULL) { info->entry.kmap[size].anonsz += SIZE_PAGE; + } } } @@ -1289,9 +1365,10 @@ void vm_mapinfo(meminfo_t *info) info->entry.kmap[size].oid = e->object->oid; } } + ++size; } - proc_lockClear(&map_common.kmap->lock); + (void)proc_lockClear(&map_common.kmap->lock); info->entry.kmapsz = size; } @@ -1299,12 +1376,12 @@ void vm_mapinfo(meminfo_t *info) info->maps.total = 0; info->maps.free = 0; - for (size = 0; size < map_common.mapssz; ++size) { - map = vm_getSharedMap((int)size); + for (size = 0; (unsigned int)size < map_common.mapssz; ++size) { + map = vm_getSharedMap(size); if (map == NULL) { - if ((int)size < info->maps.mapsz) { + if (size < info->maps.mapsz) { /* Store info that the map doesn't exist */ - info->maps.map[size].id = (int)size; + info->maps.map[size].id = size; info->maps.map[size].free = 0; info->maps.map[size].alloc = 0; info->maps.map[size].pstart = 0; @@ -1328,18 +1405,18 @@ void vm_mapinfo(meminfo_t *info) info->maps.total += total; info->maps.free += free; - if ((int)size < info->maps.mapsz) { - info->maps.map[size].id = (int)size; + if (size < info->maps.mapsz) { + info->maps.map[size].id = size; info->maps.map[size].free = free; info->maps.map[size].alloc = total - free; info->maps.map[size].pstart = (addr_t)map->pmap.start; info->maps.map[size].pend = (addr_t)map->pmap.end; info->maps.map[size].vstart = (ptr_t)map->start; info->maps.map[size].vend = (ptr_t)map->stop; - spMap = syspage_mapIdResolve(size); + spMap = syspage_mapIdResolve((unsigned int)size); if ((spMap != NULL) && (spMap->name != NULL)) { - hal_strncpy(info->maps.map[size].name, spMap->name, sizeof(info->maps.map[size].name)); - info->maps.map[size].name[sizeof(info->maps.map[size].name) - 1] = '\0'; + (void)hal_strncpy(info->maps.map[size].name, spMap->name, sizeof(info->maps.map[size].name)); + info->maps.map[size].name[sizeof(info->maps.map[size].name) - 1U] = '\0'; } else { info->maps.map[size].name[0] = '\0'; @@ -1347,7 +1424,7 @@ void vm_mapinfo(meminfo_t *info) } } - info->maps.mapsz = (int)size; + info->maps.mapsz = size; } } @@ -1362,17 +1439,17 @@ static map_entry_t *map_allocN(int n) map_entry_t *e, *tmp; int i; - proc_lockSet(&map_common.lock); + (void)proc_lockSet(&map_common.lock); - if (map_common.nfree < n) { - proc_lockClear(&map_common.lock); + if (map_common.nfree < (unsigned int)n) { + (void)proc_lockClear(&map_common.lock); #ifndef NDEBUG lib_printf("vm: Entry pool exhausted!\n"); #endif return NULL; } - map_common.nfree -= n; + map_common.nfree -= (unsigned int)n; e = map_common.free; tmp = e; for (i = 0; i < (n - 1); i++) { @@ -1381,7 +1458,7 @@ static map_entry_t *map_allocN(int n) map_common.free = tmp->next; tmp->next = NULL; - proc_lockClear(&map_common.lock); + (void)proc_lockClear(&map_common.lock); return e; } @@ -1395,9 +1472,9 @@ static map_entry_t *map_alloc(void) void vm_mapGetStats(size_t *allocsz) { - proc_lockSet(&map_common.lock); + (void)proc_lockSet(&map_common.lock); *allocsz = (map_common.ntotal - map_common.nfree) * sizeof(map_entry_t); - proc_lockClear(&map_common.lock); + (void)proc_lockClear(&map_common.lock); } @@ -1423,12 +1500,12 @@ static int _map_mapsInit(vm_map_t *kmap, vm_object_t *kernel, void **bss, void * const mapent_t *sysEntry; const syspage_map_t *map; - if ((mapsCnt = syspage_mapSize()) == 0) + if ((mapsCnt = syspage_mapSize()) == 0U) { return -EINVAL; + } map_common.maps = (vm_map_t **)(*bss); - - while ((*top) - (*bss) < sizeof(vm_map_t *) * mapsCnt) { + while (((int)*top) - ((int)*bss) < (ptrdiff_t)sizeof(vm_map_t *) * (ptrdiff_t)mapsCnt) { result = _page_sbrk(&map_common.kmap->pmap, bss, top); LIB_ASSERT_ALWAYS(result >= 0, "vm: Problem with extending kernel heap for vm_map_t pool (vaddr=%p)", *bss); } @@ -1437,7 +1514,7 @@ static int _map_mapsInit(vm_map_t *kmap, vm_object_t *kernel, void **bss, void * map = syspage_mapList(); do { - if (kmap->pmap.start >= (void *)map->start && kmap->pmap.end <= (void *)map->end) { + if ((ptr_t)kmap->pmap.start >= (ptr_t)map->start && (ptr_t)kmap->pmap.end <= (ptr_t)map->end) { kmap->pmap.start = (void *)map->start; kmap->pmap.end = (void *)map->end; @@ -1448,14 +1525,15 @@ static int _map_mapsInit(vm_map_t *kmap, vm_object_t *kernel, void **bss, void * } /* Allocate new map */ else { - while ((*top) - (*bss) < sizeof(vm_map_t)) { + while (((int)*top) - ((int)*bss) < (ptrdiff_t)sizeof(vm_map_t)) { result = _page_sbrk(&map_common.kmap->pmap, bss, top); LIB_ASSERT_ALWAYS(result >= 0, "vm: Problem with extending kernel heap for vm_map_t pool (vaddr=%p)", *bss); } map_common.maps[id] = (*bss); - if (vm_mapCreate(map_common.maps[id], (void *)map->start, (void *)map->end) < 0) + if (vm_mapCreate(map_common.maps[id], (void *)map->start, (void *)map->end) < 0) { return -ENOMEM; + } (*bss) += sizeof(vm_map_t); } @@ -1463,13 +1541,15 @@ static int _map_mapsInit(vm_map_t *kmap, vm_object_t *kernel, void **bss, void * if ((sysEntry = map->entries) != NULL) { do { /* Skip temporary entries which are used only in phoenix-rtos-loader */ - if (sysEntry->type == hal_entryTemp) + if (sysEntry->type == hal_entryTemp) { continue; + } - if ((entry = map_alloc()) == NULL) + if ((entry = map_alloc()) == NULL) { return -ENOMEM; + } - entry->vaddr = (void *)round_page((long)sysEntry->start); + entry->vaddr = (void *)round_page(sysEntry->start); entry->size = round_page(sysEntry->end - sysEntry->start); entry->object = kernel; entry->offs = -1; @@ -1479,8 +1559,9 @@ static int _map_mapsInit(vm_map_t *kmap, vm_object_t *kernel, void **bss, void * entry->protOrig = entry->prot; entry->amap = NULL; - if (_map_add(NULL, map_common.maps[id], entry) < 0) + if (_map_add(NULL, map_common.maps[id], entry) < 0) { return -ENOMEM; + } } while ((sysEntry = sysEntry->next) != map->entries); } @@ -1499,17 +1580,18 @@ static int _map_mapsInit(vm_map_t *kmap, vm_object_t *kernel, void **bss, void * int _map_init(vm_map_t *kmap, vm_object_t *kernel, void **bss, void **top) { - int result, i, prot; + int result, i; + unsigned int prot; void *vaddr; size_t poolsz, freesz, size; map_entry_t *e; - proc_lockInit(&map_common.lock, &proc_lockAttrDefault, "map.common"); + (void)proc_lockInit(&map_common.lock, &proc_lockAttrDefault, "map.common"); kmap->start = kmap->pmap.start; kmap->stop = kmap->pmap.end; - proc_lockInit(&kmap->lock, &proc_lockAttrDefault, "map.kmap"); + (void)proc_lockInit(&kmap->lock, &proc_lockAttrDefault, "map.kmap"); lib_rbInit(&kmap->tree, map_cmp, map_augment); map_common.kmap = kmap; @@ -1518,21 +1600,22 @@ int _map_init(vm_map_t *kmap, vm_object_t *kernel, void **bss, void **top) vm_pageGetStats(&freesz); /* Init map entry pool */ - map_common.ntotal = freesz / (3 * SIZE_PAGE + sizeof(map_entry_t)); + map_common.ntotal = freesz / (3U * SIZE_PAGE + sizeof(map_entry_t)); map_common.nfree = map_common.ntotal; - while ((*top) - (*bss) < sizeof(map_entry_t) * map_common.ntotal) { + while ((*top) - (*bss) < (ptrdiff_t)sizeof(map_entry_t) * (ptrdiff_t)map_common.ntotal) { result = _page_sbrk(&map_common.kmap->pmap, bss, top); LIB_ASSERT_ALWAYS(result >= 0, "vm: Problem with extending kernel heap for map_entry_t pool (vaddr=%p)", *bss); } map_common.entries = (*bss); - poolsz = min((*top) - (*bss), sizeof(map_entry_t) * map_common.ntotal); + poolsz = min((ptr_t)(*top) - (ptr_t)(*bss), sizeof(map_entry_t) * map_common.ntotal); map_common.free = map_common.entries; - for (i = 0; i < map_common.nfree - 1; ++i) + for (i = 0; i < (int)map_common.nfree - 1; ++i) { map_common.entries[i].next = map_common.entries + i + 1; + } map_common.entries[i].next = NULL; @@ -1542,26 +1625,27 @@ int _map_init(vm_map_t *kmap, vm_object_t *kernel, void **bss, void **top) result = _map_mapsInit(kmap, kernel, bss, top); LIB_ASSERT_ALWAYS(result >= 0, "vm: Problem with maps initialization."); - /* Map kernel segments */ - for (i = 0;; i++) { - prot = PROT_READ | PROT_EXEC; - - if (pmap_segment(i, &vaddr, &size, &prot, top) < 0) - break; + /* Map kernel segments */ + prot = PROT_READ | PROT_EXEC; + i = 0; + while (pmap_segment((unsigned int)i, &vaddr, &size, (int *)&prot, top) >= 0) { e = map_alloc(); - if (e == NULL) + if (e == NULL) { break; + } - e->vaddr = (void *)round_page((long)vaddr); + e->vaddr = (void *)round_page((ptr_t)vaddr); e->size = round_page(size); e->object = kernel; e->offs = -1; e->flags = MAP_NONE; - e->prot = prot; - e->protOrig = prot; + e->prot = (unsigned char)prot; + e->protOrig = (unsigned char)prot; e->amap = NULL; - _map_add(NULL, map_common.kmap, e); + (void)_map_add(NULL, map_common.kmap, e); + prot = PROT_READ | PROT_EXEC; + i++; } diff --git a/vm/map.h b/vm/map.h index 6bd011ea4..05ff570d4 100644 --- a/vm/map.h +++ b/vm/map.h @@ -41,7 +41,7 @@ typedef struct _vm_map_t { struct _process_t; - +/* TODO: Unify implementation of prot type to be consistent between this map and functions */ typedef struct _map_entry_t { #ifndef NOMMU union { @@ -65,9 +65,9 @@ typedef struct _map_entry_t { size_t lmaxgap; size_t rmaxgap; - unsigned short flags; - unsigned short prot; - unsigned short protOrig; + unsigned char flags; + unsigned char prot; + unsigned char protOrig; struct _vm_object_t *object; off_t offs; } map_entry_t; @@ -82,7 +82,7 @@ extern void *vm_mmap(vm_map_t *map, void *vaddr, page_t *p, size_t size, u8 prot extern void *_vm_mmap(vm_map_t *map, void *vaddr, page_t *p, size_t size, u8 prot, struct _vm_object_t *o, off_t offs, u8 flags); -extern int vm_mapForce(vm_map_t *map, void *vaddr, int prot); +extern int vm_mapForce(vm_map_t *map, void *paddr, unsigned prot); extern int vm_mapFlags(vm_map_t *map, void *vaddr); @@ -97,19 +97,19 @@ extern int vm_munmap(vm_map_t *map, void *vaddr, size_t size); extern int _vm_munmap(vm_map_t *map, void *vaddr, size_t size); -extern int vm_mprotect(vm_map_t *map, void *vaddr, size_t len, int prot); +int vm_mprotect(vm_map_t *map, void *vaddr, size_t len, int prot); extern void vm_mapDump(vm_map_t *map); -extern int vm_flagsToAttr(int flags); +extern unsigned vm_flagsToAttr(unsigned flags); extern int vm_mapCreate(vm_map_t *map, void *start, void *stop); -extern int vm_mapCopy(struct _process_t *process, vm_map_t *dst, vm_map_t *src); +extern int vm_mapCopy(struct _process_t *proc, vm_map_t *dst, vm_map_t *src); extern void vm_mapDestroy(struct _process_t *p, vm_map_t *map); @@ -121,16 +121,13 @@ extern void vm_mapGetStats(size_t *allocsz); extern void vm_mapinfo(meminfo_t *info); -extern int vm_createSharedMap(ptr_t start, ptr_t stop, unsigned int attr, int no); - - extern vm_map_t *vm_getSharedMap(int map); extern int vm_mapBelongs(const struct _process_t *proc, const void *ptr, size_t size); -extern int _map_init(vm_map_t *kmap, struct _vm_object_t *kernel, void **start, void **end); +extern int _map_init(vm_map_t *kmap, struct _vm_object_t *kernel, void **bss, void **top); #endif diff --git a/vm/object.c b/vm/object.c index c5dcf8391..31a5f2552 100644 --- a/vm/object.c +++ b/vm/object.c @@ -24,7 +24,7 @@ #include "proc/threads.h" -struct { +static struct { rbtree_t tree; vm_object_t *kernel; vm_map_t *kmap; @@ -37,15 +37,20 @@ static int object_cmp(rbnode_t *n1, rbnode_t *n2) vm_object_t *o1 = lib_treeof(vm_object_t, linkage, n1); vm_object_t *o2 = lib_treeof(vm_object_t, linkage, n2); - if (o1->oid.id > o2->oid.id) + /* parasoft-suppress-next-line MISRAC2012-DIR_4_1 "Variable pass to lib_treeof will not be NULL, so lib_treeof will not be NULL either" */ + if (o1->oid.id > o2->oid.id) { return 1; - if (o1->oid.id < o2->oid.id) + } + if (o1->oid.id < o2->oid.id) { return -1; + } - if (o1->oid.port > o2->oid.port) + if (o1->oid.port > o2->oid.port) { return 1; - if (o1->oid.port < o2->oid.port) + } + if (o1->oid.port < o2->oid.port) { return -1; + } return 0; } @@ -61,12 +66,12 @@ int vm_objectGet(vm_object_t **o, oid_t oid) t.oid.port = oid.port; t.oid.id = oid.id; - proc_lockSet(&object_common.lock); + (void)proc_lockSet(&object_common.lock); *o = lib_treeof(vm_object_t, linkage, lib_rbFind(&object_common.tree, &t.linkage)); if (*o == NULL) { /* Take off the lock to avoid a deadlock in vm_kmalloc */ - proc_lockClear(&object_common.lock); + (void)proc_lockClear(&object_common.lock); sz = proc_size(oid); if (sz < 0) { @@ -76,30 +81,36 @@ int vm_objectGet(vm_object_t **o, oid_t oid) n = round_page((size_t)sz) / SIZE_PAGE; no = (vm_object_t *)vm_kmalloc(sizeof(vm_object_t) + n * sizeof(page_t *)); } + else { + /* No action required */ + } + - proc_lockSet(&object_common.lock); + (void)proc_lockSet(&object_common.lock); /* Check again, somebody could've added the object in the meantime */ *o = lib_treeof(vm_object_t, linkage, lib_rbFind(&object_common.tree, &t.linkage)); if (*o == NULL) { if (no == NULL) { - proc_lockClear(&object_common.lock); + (void)proc_lockClear(&object_common.lock); return err; } *o = no; no = NULL; hal_memcpy(&(*o)->oid, &oid, sizeof(oid)); - (*o)->size = sz; + /* TODO: 64 bits written into 32 bits */ + (*o)->size = (size_t)sz; (*o)->refs = 0; - for (i = 0; i < n; ++i) + for (i = 0; i < n; ++i) { (*o)->pages[i] = NULL; + } - lib_rbInsert(&object_common.tree, &(*o)->linkage); + (void)lib_rbInsert(&object_common.tree, &(*o)->linkage); } } (*o)->refs++; - proc_lockClear(&object_common.lock); + (void)proc_lockClear(&object_common.lock); /* Did we allocate an object we didn't need in the end? */ if (no != NULL) { @@ -113,9 +124,9 @@ int vm_objectGet(vm_object_t **o, oid_t oid) vm_object_t *vm_objectRef(vm_object_t *o) { if ((o != NULL) && (o != VM_OBJ_PHYSMEM)) { - proc_lockSet(&object_common.lock); + (void)proc_lockSet(&object_common.lock); o->refs++; - proc_lockClear(&object_common.lock); + (void)proc_lockClear(&object_common.lock); } return o; @@ -124,30 +135,31 @@ vm_object_t *vm_objectRef(vm_object_t *o) int vm_objectPut(vm_object_t *o) { - int i; + unsigned int i; if ((o == NULL) || (o == VM_OBJ_PHYSMEM)) { return EOK; } - proc_lockSet(&object_common.lock); + (void)proc_lockSet(&object_common.lock); - if (--o->refs) { - proc_lockClear(&object_common.lock); + if (--o->refs != 0U) { + (void)proc_lockClear(&object_common.lock); return EOK; } lib_rbRemove(&object_common.tree, &o->linkage); - proc_lockClear(&object_common.lock); + (void)proc_lockClear(&object_common.lock); /* Contiguous object 'holds' all pages in pages[0] */ - if ((o->oid.port == -1) && (o->oid.id == -1)) { + if (((int)o->oid.port == -1) && (o->oid.id == (id_t)(-1))) { vm_pageFree(o->pages[0]); } else { for (i = 0; i < round_page(o->size) / SIZE_PAGE; ++i) { - if (o->pages[i] != NULL) + if (o->pages[i] != NULL) { vm_pageFree(o->pages[i]); + } } } @@ -162,29 +174,30 @@ static page_t *object_fetch(oid_t oid, off_t offs) page_t *p; void *v; - if (proc_open(oid, 0) < 0) + if (proc_open(oid, 0) < 0) { return NULL; + } if ((p = vm_pageAlloc(SIZE_PAGE, PAGE_OWNER_APP)) == NULL) { - proc_close(oid, 0); + (void)proc_close(oid, 0); return NULL; } if ((v = vm_mmap(object_common.kmap, NULL, p, SIZE_PAGE, PROT_WRITE | PROT_USER, object_common.kernel, 0, MAP_NONE)) == NULL) { vm_pageFree(p); - proc_close(oid, 0); + (void)proc_close(oid, 0); return NULL; } if (proc_read(oid, offs, v, SIZE_PAGE, 0) < 0) { - vm_munmap(object_common.kmap, v, SIZE_PAGE); + (void)vm_munmap(object_common.kmap, v, SIZE_PAGE); vm_pageFree(p); - proc_close(oid, 0); + (void)proc_close(oid, 0); return NULL; } - vm_munmap(object_common.kmap, v, SIZE_PAGE); - proc_close(oid, 0); + (void)vm_munmap(object_common.kmap, v, SIZE_PAGE); + (void)proc_close(oid, 0); return p; } @@ -194,56 +207,61 @@ page_t *vm_objectPage(vm_map_t *map, amap_t **amap, vm_object_t *o, void *vaddr, { page_t *p; - if (o == NULL) + if (o == NULL) { return vm_pageAlloc(SIZE_PAGE, PAGE_OWNER_APP); + } - if (o == (void *)-1) - return _page_get(offs); + if (o == (void *)-1) { + return _page_get((addr_t)offs); + } - proc_lockSet(&object_common.lock); + (void)proc_lockSet(&object_common.lock); - if (offs >= o->size) { - proc_lockClear(&object_common.lock); + if ((unsigned long long)offs >= o->size) { + (void)proc_lockClear(&object_common.lock); return NULL; } - if ((p = o->pages[offs / SIZE_PAGE]) != NULL) { - proc_lockClear(&object_common.lock); + if ((p = o->pages[(unsigned long long)offs / SIZE_PAGE]) != NULL) { + (void)proc_lockClear(&object_common.lock); return p; } /* Fetch page from backing store */ - proc_lockClear(&object_common.lock); + (void)proc_lockClear(&object_common.lock); - if (amap != NULL) - proc_lockClear(&(*amap)->lock); + if (amap != NULL) { + (void)proc_lockClear(&(*amap)->lock); + } - proc_lockClear(&map->lock); + (void)proc_lockClear(&map->lock); p = object_fetch(o->oid, offs); - if (vm_lockVerify(map, amap, o, vaddr, offs)) { - if (p != NULL) + if (vm_lockVerify(map, amap, o, vaddr, offs) != 0) { + if (p != NULL) { vm_pageFree(p); + } return NULL; } - proc_lockSet(&object_common.lock); + (void)proc_lockSet(&object_common.lock); - if (o->pages[offs / SIZE_PAGE] != NULL) { + if (o->pages[(unsigned long long)offs / SIZE_PAGE] != NULL) { /* Someone loaded a page in the meantime, use it */ - if (p != NULL) + if (p != NULL) { vm_pageFree(p); + } - p = o->pages[offs / SIZE_PAGE]; - proc_lockClear(&object_common.lock); + p = o->pages[(unsigned long long)offs / SIZE_PAGE]; + (void)proc_lockClear(&object_common.lock); return p; } - o->pages[offs / SIZE_PAGE] = p; - proc_lockClear(&object_common.lock); + o->pages[(unsigned long long)offs / SIZE_PAGE] = p; + (void)proc_lockClear(&object_common.lock); return p; } @@ -252,12 +270,13 @@ vm_object_t *vm_objectContiguous(size_t size) { vm_object_t *o; page_t *p; - int i, n; + unsigned int i, n; - if ((p = vm_pageAlloc(size, PAGE_OWNER_APP)) == NULL) + if ((p = vm_pageAlloc(size, PAGE_OWNER_APP)) == NULL) { return NULL; + } - size = 1 << p->idx; + size = 1UL << p->idx; n = size / SIZE_PAGE; if ((o = vm_kmalloc(sizeof(vm_object_t) + n * sizeof(page_t *))) == NULL) { @@ -267,13 +286,14 @@ vm_object_t *vm_objectContiguous(size_t size) hal_memset(o, 0, sizeof(*o)); /* Mark object as contiguous by setting its oid.port and oid.id to -1 */ - o->oid.port = -1; - o->oid.id = -1; + o->oid.port = (u32)(-1); + o->oid.id = (id_t)(-1); o->refs = 1; o->size = size; - for (i = 0; i < n; ++i) + for (i = 0; i < n; ++i) { o->pages[i] = p + i; + } return o; } @@ -288,15 +308,15 @@ int _object_init(vm_map_t *kmap, vm_object_t *kernel) object_common.kernel = kernel; object_common.kmap = kmap; - proc_lockInit(&object_common.lock, &proc_lockAttrDefault, "object.common"); + (void)proc_lockInit(&object_common.lock, &proc_lockAttrDefault, "object.common"); lib_rbInit(&object_common.tree, object_cmp, NULL); kernel->refs = 0; kernel->oid.port = 0; kernel->oid.id = 0; - lib_rbInsert(&object_common.tree, &kernel->linkage); + (void)lib_rbInsert(&object_common.tree, &kernel->linkage); - vm_objectGet(&o, kernel->oid); + (void)vm_objectGet(&o, kernel->oid); return EOK; } diff --git a/vm/object.h b/vm/object.h index afd538b41..c8954e75a 100644 --- a/vm/object.h +++ b/vm/object.h @@ -29,7 +29,7 @@ typedef struct _vm_object_t { oid_t oid; unsigned int refs; size_t size; - page_t *pages[]; + page_t *pages[0]; } vm_object_t; diff --git a/vm/page-nommu.c b/vm/page-nommu.c index 76a896498..876ed6776 100644 --- a/vm/page-nommu.c +++ b/vm/page-nommu.c @@ -23,10 +23,11 @@ #include "syspage.h" +/* parasoft-suppress-next-line MISRAC2012-RULE_8_6 "Definition in assembly code" */ extern unsigned int __bss_start; -struct { +static struct { size_t allocsz; size_t bootsz; size_t freesz; @@ -42,19 +43,21 @@ static page_t *_page_alloc(size_t size, u8 flags) { page_t *lh = pages.freeq; - if (lh == NULL) + if (lh == NULL) { return NULL; + } pages.freeq = lh->next; lh->next = NULL; - lh->idx = hal_cpuGetLastBit(size); + lh->idx = (u8)hal_cpuGetLastBit(size); - if (hal_cpuGetFirstBit(size) < lh->idx) + if (hal_cpuGetFirstBit(size) < lh->idx) { lh->idx++; + } - pages.freesz -= (1 << lh->idx); - pages.allocsz += (1 << lh->idx); + pages.freesz -= (1UL << lh->idx); + pages.allocsz += (1UL << lh->idx); return lh; } @@ -64,9 +67,9 @@ page_t *vm_pageAlloc(size_t size, u8 flags) { page_t *p; - proc_lockSet(&pages.lock); + (void)proc_lockSet(&pages.lock); p = _page_alloc(size, flags); - proc_lockClear(&pages.lock); + (void)proc_lockClear(&pages.lock); return p; } @@ -74,15 +77,15 @@ page_t *vm_pageAlloc(size_t size, u8 flags) void vm_pageFree(page_t *lh) { - proc_lockSet(&pages.lock); + (void)proc_lockSet(&pages.lock); lh->next = pages.freeq; pages.freeq = lh; - pages.freesz += (1 << lh->idx); - pages.allocsz -= (1 << lh->idx); + pages.freesz += (1UL << lh->idx); + pages.allocsz -= (1UL << lh->idx); - proc_lockClear(&pages.lock); + (void)proc_lockClear(&pages.lock); return; } @@ -93,19 +96,19 @@ void _page_showPages(void) } -int page_map(pmap_t *pmap, void *vaddr, addr_t pa, int attr) +int page_map(pmap_t *pmap, void *vaddr, addr_t pa, unsigned int attr) { page_t *ap; - proc_lockSet(&pages.lock); - if (pmap_enter(pmap, pa, vaddr, attr, NULL) < 0) { + (void)proc_lockSet(&pages.lock); + if (pmap_enter(pmap, pa, vaddr, (int)attr, NULL) < 0) { if ((ap = _page_alloc(SIZE_PAGE, PAGE_OWNER_KERNEL | PAGE_KERNEL_PTABLE)) == NULL) { - proc_lockClear(&pages.lock); + (void)proc_lockClear(&pages.lock); return -ENOMEM; } - pmap_enter(pmap, pa, vaddr, attr, ap); + (void)pmap_enter(pmap, pa, vaddr, (int)attr, ap); } - proc_lockClear(&pages.lock); + (void)proc_lockClear(&pages.lock); return EOK; } @@ -121,11 +124,13 @@ int _page_sbrk(pmap_t *pmap, void **start, void **end) { page_t *np; - if ((np = _page_alloc(SIZE_PAGE, PAGE_OWNER_KERNEL | PAGE_KERNEL_HEAP)) == NULL) + if ((np = _page_alloc(SIZE_PAGE, PAGE_OWNER_KERNEL | PAGE_KERNEL_HEAP)) == NULL) { return -ENOMEM; + } - if (page_map(pmap, (*end), PGHD_PRESENT | PGHD_WRITE, (addr_t)np) < 0) + if (page_map(pmap, (*end), PGHD_PRESENT | PGHD_WRITE, (addr_t)np) < 0) { return -ENOMEM; + } (*end) += SIZE_PAGE; @@ -141,7 +146,7 @@ void vm_pageGetStats(size_t *freesz) void vm_pageinfo(meminfo_t *info) { - proc_lockSet(&pages.lock); + (void)proc_lockSet(&pages.lock); info->page.alloc = pages.allocsz; info->page.free = pages.freesz; @@ -149,7 +154,7 @@ void vm_pageinfo(meminfo_t *info) info->page.sz = sizeof(page_t); info->page.mapsz = -1; - proc_lockClear(&pages.lock); + (void)proc_lockClear(&pages.lock); } @@ -159,11 +164,12 @@ void _page_init(pmap_t *pmap, void **bss, void **top) const syspage_map_t *map; unsigned int i; - proc_lockInit(&pages.lock, &proc_lockAttrDefault, "page.nommu"); + (void)proc_lockInit(&pages.lock, &proc_lockAttrDefault, "page.nommu"); /* TODO: handle error */ - if ((map = syspage_mapAddrResolve((addr_t)&__bss_start)) == NULL) + if ((map = syspage_mapAddrResolve((addr_t)&__bss_start)) == NULL) { return; + } pages.freesz = map->end - (unsigned int)(*bss); pages.bootsz = 0; @@ -179,11 +185,12 @@ void _page_init(pmap_t *pmap, void **bss, void **top) pages.freesz -= pages.freeqsz * sizeof(page_t); /* Show statistics one the console */ - lib_printf("vm: Initializing page allocator %d/%d KB, page_t=%d\n", (pages.allocsz - pages.bootsz) / 1024, - (pages.freesz + pages.allocsz ) / 1024, sizeof(page_t)); + lib_printf("vm: Initializing page allocator %d/%d KB, page_t=%d\n", (pages.allocsz - pages.bootsz) / 1024U, + (pages.freesz + pages.allocsz) / 1024U, sizeof(page_t)); + p = pages.freeq; /* Prepare allocation queue */ - for (p = pages.freeq, i = 0; i < pages.freeqsz; i++) { + for (i = 0; i < pages.freeqsz; i++) { p->next = p + 1; p = p->next; } diff --git a/vm/page.c b/vm/page.c index ed9e33bee..f9d2f9492 100644 --- a/vm/page.c +++ b/vm/page.c @@ -183,8 +183,8 @@ page_t *_page_get(addr_t addr) page_t *p; size_t np = (pages.freesz + pages.allocsz) / SIZE_PAGE; - addr = addr & ~(SIZE_PAGE - 1); - p = lib_bsearch((void *)addr, pages.pages, np, sizeof(page_t), _page_get_cmp); + addr = addr & ~(SIZE_PAGE - 1); + p = lib_bsearch((void *)addr, pages.pages, np, sizeof(page_t), _page_get_cmp); return p; } @@ -301,7 +301,7 @@ void _page_showPages(void) } } - a = pages.pages[i + rep ].addr + SIZE_PAGE; + a = pages.pages[i + rep].addr + SIZE_PAGE; i += rep; } @@ -313,7 +313,7 @@ void _page_showPages(void) } -static int _page_map(pmap_t *pmap, void *vaddr, addr_t pa, int attrs) +static int _page_map(pmap_t *pmap, void *vaddr, addr_t pa, unsigned int attrs) { page_t *ap = NULL; @@ -327,7 +327,7 @@ static int _page_map(pmap_t *pmap, void *vaddr, addr_t pa, int attrs) } -int page_map(pmap_t *pmap, void *vaddr, addr_t pa, int attrs) +int page_map(pmap_t *pmap, void *vaddr, addr_t pa, unsigned int attrs) { int err; @@ -391,9 +391,9 @@ void vm_pageinfo(meminfo_t *info) } if (info->page.mapsz > size && info->page.map != NULL) { - info->page.map[size].count = rep + 1; + info->page.map[size].count = rep + 1; info->page.map[size].marker = c; - info->page.map[size].addr = p->addr; + info->page.map[size].addr = p->addr; } i += rep; @@ -484,7 +484,7 @@ void _page_init(pmap_t *pmap, void **bss, void **top) /* Show statistics on the console */ lib_printf("vm: Initializing page allocator (%d+%d)/%dKB, page_t=%d\n", (pages.allocsz - pages.bootsz) / 1024, - pages.bootsz / 1024, (pages.freesz + pages.allocsz ) / 1024, sizeof(page_t)); + pages.bootsz / 1024, (pages.freesz + pages.allocsz) / 1024, sizeof(page_t)); _page_showPages(); diff --git a/vm/page.h b/vm/page.h index dcaabc9f1..a6f2000f1 100644 --- a/vm/page.h +++ b/vm/page.h @@ -33,10 +33,10 @@ extern page_t *_page_get(addr_t addr); extern void _page_showPages(void); -extern int page_map(pmap_t *pmap, void *vaddr, addr_t pa, int attr); +extern int page_map(pmap_t *pmap, void *vaddr, addr_t pa, unsigned int attr); -extern int _page_sbrk(pmap_t *pmap, void **bss, void **top); +extern int _page_sbrk(pmap_t *pmap, void **start, void **end); extern void vm_pageGetStats(size_t *freesz); diff --git a/vm/vm.c b/vm/vm.c index 0148c8766..32149bac4 100644 --- a/vm/vm.c +++ b/vm/vm.c @@ -22,9 +22,10 @@ #include "amap.h" #include "zone.h" #include "kmalloc.h" +#include "vm/vm.h" -struct { +static struct { void *bss; void *top; } vm; @@ -42,12 +43,12 @@ void _vm_init(vm_map_t *kmap, vm_object_t *kernel) _pmap_init(&kmap->pmap, &vm.bss, &vm.top); _page_init(&kmap->pmap, &vm.bss, &vm.top); - _map_init(kmap, kernel, &vm.bss, &vm.top); + (void)_map_init(kmap, kernel, &vm.bss, &vm.top); _zone_init(kmap, kernel, &vm.bss, &vm.top); - _kmalloc_init(); + (void)_kmalloc_init(); - _object_init(kmap, kernel); + (void)_object_init(kmap, kernel); _amap_init(kmap, kernel); return; diff --git a/vm/zone.c b/vm/zone.c index 40c2e6b6b..9976a9113 100644 --- a/vm/zone.c +++ b/vm/zone.c @@ -13,6 +13,7 @@ * %LICENSE% */ + #include "hal/hal.h" #include "lib/lib.h" #include "include/errno.h" @@ -21,7 +22,7 @@ #include "zone.h" -struct { +static struct { vm_map_t *kmap; vm_object_t *kernel; } zone_common; @@ -31,24 +32,28 @@ int _vm_zoneCreate(vm_zone_t *zone, size_t blocksz, unsigned int blocks) { unsigned int i; - if ((blocksz == 0) || (blocks == 0)) + if ((blocksz == 0U) || (blocks == 0U)) { return -EINVAL; + } - if (!(blocksz & ~(blocksz - 1))) + if ((blocksz & ~(blocksz - 1U)) == 0U) { return -EINVAL; + } - if ((zone->pages = vm_pageAlloc(blocks * blocksz, PAGE_OWNER_KERNEL | PAGE_KERNEL_HEAP)) == NULL) + if ((zone->pages = vm_pageAlloc(blocks * blocksz, PAGE_OWNER_KERNEL | PAGE_KERNEL_HEAP)) == NULL) { return -ENOMEM; + } - if ((zone->vaddr = vm_mmap(zone_common.kmap, zone_common.kmap->start, zone->pages, 1 << zone->pages->idx, PROT_READ | PROT_WRITE, zone_common.kernel, -1, MAP_NONE)) == NULL) { + if ((zone->vaddr = vm_mmap(zone_common.kmap, zone_common.kmap->start, zone->pages, (size_t)0x1U << zone->pages->idx, PROT_READ | PROT_WRITE, zone_common.kernel, -1, MAP_NONE)) == NULL) { vm_pageFree(zone->pages); return -ENOMEM; } /* Prepare zone for allocations */ - for (i = 0; i < blocks; i++) - *((void **)(zone->vaddr + i * blocksz)) = zone->vaddr + (i + 1) * blocksz; - *((void **)(zone->vaddr + (blocks - 1) * blocksz)) = NULL; + for (i = 0; i < blocks; i++) { + *((void **)(zone->vaddr + i * blocksz)) = zone->vaddr + (i + 1U) * blocksz; + } + *((void **)(zone->vaddr + (blocks - 1U) * blocksz)) = NULL; zone->first = zone->vaddr; zone->blocks = blocks; @@ -61,13 +66,15 @@ int _vm_zoneCreate(vm_zone_t *zone, size_t blocksz, unsigned int blocks) int _vm_zoneDestroy(vm_zone_t *zone) { - if (zone == NULL) + if (zone == NULL) { return -EINVAL; + } - if (zone->used) + if (zone->used != 0U) { return -EBUSY; + } - vm_munmap(zone_common.kmap, zone->vaddr, 1 << zone->pages->idx); + (void)vm_munmap(zone_common.kmap, zone->vaddr, 1UL << zone->pages->idx); vm_pageFree(zone->pages); zone->vaddr = NULL; @@ -82,18 +89,21 @@ void *_vm_zalloc(vm_zone_t *zone, addr_t *addr) { void *block; - if (zone == NULL) + if (zone == NULL) { return NULL; + } - if (zone->used == zone->blocks) + if (zone->used == zone->blocks) { return NULL; + } block = zone->first; zone->first = *((void **)(zone->first)); zone->used++; - if (addr != NULL) - *addr = zone->pages->addr + (block - zone->vaddr); + if (addr != NULL) { + *addr = zone->pages->addr + ((addr_t)block - (addr_t)zone->vaddr); + } return block; } @@ -101,11 +111,13 @@ void *_vm_zalloc(vm_zone_t *zone, addr_t *addr) void _vm_zfree(vm_zone_t *zone, void *block) { - if ((block < zone->vaddr) || (block >= zone->vaddr + zone->blocksz * zone->blocks)) + if (((ptr_t)block < (ptr_t)zone->vaddr) || ((ptr_t)block >= (ptr_t)zone->vaddr + zone->blocksz * zone->blocks)) { return; + } - if (!((unsigned long)block & ~(zone->blocksz - 1))) + if (((unsigned long)block & ~(zone->blocksz - 1U)) == 0U) { return; + } *((void **)block) = zone->first; zone->first = block; diff --git a/vm/zone.h b/vm/zone.h index 2464f00f8..07eab11ec 100644 --- a/vm/zone.h +++ b/vm/zone.h @@ -26,13 +26,13 @@ typedef struct _vm_zone_t { rbnode_t linkage; size_t blocksz; - volatile unsigned int blocks; - volatile unsigned int used; + unsigned int blocks; + unsigned int used; void *vaddr; void *first; page_t *pages; -/* u8 padd[1024]; */ + /* u8 padd[1024]; */ } vm_zone_t; @@ -45,7 +45,7 @@ extern int _vm_zoneDestroy(vm_zone_t *zone); extern void *_vm_zalloc(vm_zone_t *zone, addr_t *addr); -extern void _vm_zfree(vm_zone_t *zone, void *vaddr); +extern void _vm_zfree(vm_zone_t *zone, void *block); extern void _zone_init(vm_map_t *map, vm_object_t *kernel, void **bss, void **top); From 2e7a58643a780848eb49eb1358f7d04d70d7fdb2 Mon Sep 17 00:00:00 2001 From: Bartlomiej Paczek Date: Fri, 3 Oct 2025 10:33:36 +0200 Subject: [PATCH 02/13] MISRA: Implementing Review comments YT ID: DO-02 --- hal/aarch64/exceptions.c | 2 +- hal/armv7r/cpu.c | 2 +- hal/armv7r/pmap.c | 2 +- include/ioctl.h | 1 - lib/printf.c | 5 +---- posix/posix.c | 2 +- 6 files changed, 5 insertions(+), 9 deletions(-) diff --git a/hal/aarch64/exceptions.c b/hal/aarch64/exceptions.c index c349d8ef5..cad7614ed 100644 --- a/hal/aarch64/exceptions.c +++ b/hal/aarch64/exceptions.c @@ -38,7 +38,7 @@ static void exceptions_trampoline(unsigned int n, exc_context_t *ctx) } -static const char *exceptionClassStr(int excClass) +static const char *exceptionClassStr(unsigned int excClass) { switch (excClass) { case 0b000000: diff --git a/hal/armv7r/cpu.c b/hal/armv7r/cpu.c index 7cf476ae8..52b8252d2 100644 --- a/hal/armv7r/cpu.c +++ b/hal/armv7r/cpu.c @@ -71,7 +71,7 @@ int hal_cpuCreateContext(cpu_context_t **nctx, void (*start)(void *harg), void * ctx->ip = 0xccccccccUL; ctx->lr = 0xeeeeeeeeUL; - /* parasoft-suppress-next-line MISRAC2012-RULE_11_1 "Need to assign to processor register function address" */ + /* parasoft-suppress-next-line MISRAC2012-RULE_11_1 "Need to assign function address to processor register" */ ctx->pc = (u32)start; /* Enable interrupts, set normal execution mode */ diff --git a/hal/armv7r/pmap.c b/hal/armv7r/pmap.c index 32bb1482e..577e5541a 100644 --- a/hal/armv7r/pmap.c +++ b/hal/armv7r/pmap.c @@ -28,7 +28,7 @@ extern unsigned int __bss_start; /* parasoft-end-suppress MISRAC2012-RULE_8_6 */ -// parasoft-suppress-next-line MISRAC2012-RULE_8_4 "Global variable used in assembler code" +/* parasoft-suppress-next-line MISRAC2012-RULE_8_4 "Global variable used in assembler code" */ u8 _init_stack[NUM_CPUS][SIZE_INITIAL_KSTACK] __attribute__((aligned(8))); diff --git a/include/ioctl.h b/include/ioctl.h index 42c2745cb..a6be4754e 100644 --- a/include/ioctl.h +++ b/include/ioctl.h @@ -20,7 +20,6 @@ typedef struct { unsigned long request; char data[0]; - /* parasoft-suppress-next-line MISRAC2012-RULE_5_6 "function, which is the standard, with definition in posix may cause this violation" */ } ioctl_in_t; diff --git a/lib/printf.c b/lib/printf.c index a64ca2942..548c6740b 100644 --- a/lib/printf.c +++ b/lib/printf.c @@ -43,10 +43,7 @@ static char *printf_sprintf_int(char *out, u64 num64, u32 flags, int min_number_ u32 num32 = (u32)num64; u32 num_high = (u32)(num64 >> 32); - /* parasoft-begin-suppress MISRAC2012-RULE_10_3 - * "This function uses clever tricks to convert - * radix of the incoming num64" - */ + /* parasoft-begin-suppress MISRAC2012-RULE_10_3 "This function uses clever tricks to convert radix of the incoming num64" */ if ((flags & FLAG_SIGNED) != 0U) { if ((flags & FLAG_64BIT) != 0U) { if ((s32)num_high < 0) { diff --git a/posix/posix.c b/posix/posix.c index 570d0e76f..069dfffce 100644 --- a/posix/posix.c +++ b/posix/posix.c @@ -1090,7 +1090,7 @@ int posix_chmod(const char *pathname, mode_t mode) msg.type = mtSetAttr; msg.i.attr.type = atMode; - // parasoft-suppress-next-line MISRAC2012-RULE_10_3-b "" + /* parasoft-suppress-next-line MISRAC2012-RULE_10_3-b */ msg.i.attr.val = mode & ALLPERMS; err = proc_send(oid.port, &msg); From be68dca74707b522f77a932cbe33a7959cbf0e97 Mon Sep 17 00:00:00 2001 From: Bartlomiej Paczek Date: Fri, 3 Oct 2025 11:47:29 +0200 Subject: [PATCH 03/13] MISRA: Correcting mistake in printf.c YT ID: DO-02 --- lib/printf.c | 1 - 1 file changed, 1 deletion(-) diff --git a/lib/printf.c b/lib/printf.c index 548c6740b..3c395545e 100644 --- a/lib/printf.c +++ b/lib/printf.c @@ -294,7 +294,6 @@ int lib_vsprintf(char *out, const char *format, va_list args) is_number = 1; break; case 'u': - flags |= FLAG_SIGNED; is_number = 1; break; case 'p': { From 7c9e50be5b3de82e1c4f75f360d0be36da9d0f01 Mon Sep 17 00:00:00 2001 From: Bartlomiej Paczek Date: Fri, 10 Oct 2025 12:17:45 +0200 Subject: [PATCH 04/13] MISRA: Applying MISRA rules after rebase YT ID: DO-03 --- posix/posix.c | 4 ++-- posix/posix_private.h | 2 +- proc/process.c | 2 +- proc/threads.c | 6 +++--- 4 files changed, 7 insertions(+), 7 deletions(-) diff --git a/posix/posix.c b/posix/posix.c index 069dfffce..a4dc59001 100644 --- a/posix/posix.c +++ b/posix/posix.c @@ -736,7 +736,7 @@ ssize_t posix_read(int fildes, void *buf, size_t nbyte, off_t offset) } if (offset >= 0 && !F_SEEKABLE(f->type)) { - posix_fileDeref(f); + (void)posix_fileDeref(f); return -ESPIPE; } @@ -788,7 +788,7 @@ ssize_t posix_write(int fildes, void *buf, size_t nbyte, off_t offset) } if (offset >= 0 && !F_SEEKABLE(f->type)) { - posix_fileDeref(f); + (void)posix_fileDeref(f); return -ESPIPE; } diff --git a/posix/posix_private.h b/posix/posix_private.h index 11bcf3f4e..6f283ff59 100644 --- a/posix/posix_private.h +++ b/posix/posix_private.h @@ -82,7 +82,7 @@ enum { pxBufferedPipe, pxPTY }; -#define F_SEEKABLE(type) ((type) == ftRegular) +#define F_SEEKABLE(type) ((type) == (char)ftRegular) typedef struct { diff --git a/proc/process.c b/proc/process.c index 7c6b77c32..8a6a5998b 100644 --- a/proc/process.c +++ b/proc/process.c @@ -1605,7 +1605,7 @@ static int process_execve(thread_t *current) /* Wait for other threads termination before changing memory maps */ while (proc_threadsOther(current) != 0) { - proc_join(-1, 0); + (void)proc_join(-1, 0); } /* Restore kernel stack of parent thread */ diff --git a/proc/threads.c b/proc/threads.c index ebf1b4272..2270b5def 100644 --- a/proc/threads.c +++ b/proc/threads.c @@ -325,8 +325,8 @@ static void *perf_bufferAlloc(page_t **pages, size_t sz) if (data == NULL) { return NULL; } - - for (v = data; (ptr_t)v < (ptr_t)data + sz; v += SIZE_PAGE) { + /* parasoft-suppress-next-line MISRAC2012-DIR_4_1-k "data will never be -1" */ + for (v = data; (size_t)v < (size_t)data + sz; v += SIZE_PAGE) { p = vm_pageAlloc(SIZE_PAGE, PAGE_OWNER_APP); if (p == NULL) { @@ -2129,7 +2129,7 @@ int proc_threadsList(int n, threadinfo_t *info) } else #endif - if (map != NULL) { + if (map != NULL) { (void)proc_lockSet(&map->lock); entry = lib_treeof(map_entry_t, linkage, lib_rbMinimum(map->tree.root)); From ed32a733f72d2863ee1d0e5aaa0f706e44c83941 Mon Sep 17 00:00:00 2001 From: Bartlomiej Paczek Date: Fri, 10 Oct 2025 15:23:00 +0200 Subject: [PATCH 05/13] MISRA: Implementing review comments YT ID: DO-03 --- hal/aarch64/arch/cpu.h | 2 +- hal/armv7r/exceptions.c | 6 +++--- hal/armv8r/exceptions.c | 4 ++-- hal/common.c | 6 +++--- include/ioctl.h | 2 +- posix/posix.c | 4 ++-- posix/unix.c | 2 +- proc/cond.c | 4 ++-- proc/mutex.c | 4 ++-- 9 files changed, 17 insertions(+), 17 deletions(-) diff --git a/hal/aarch64/arch/cpu.h b/hal/aarch64/arch/cpu.h index a4bd73d59..3e8ed91ef 100644 --- a/hal/aarch64/arch/cpu.h +++ b/hal/aarch64/arch/cpu.h @@ -19,7 +19,7 @@ #include "hal/types.h" #include "config.h" -#define SIZE_PAGE 0x1000uL +#define SIZE_PAGE 0x1000UL #define SIZE_PDIR SIZE_PAGE #define SIZE_INITIAL_KSTACK (2U * SIZE_PAGE) /* Must be multiple of page size */ diff --git a/hal/armv7r/exceptions.c b/hal/armv7r/exceptions.c index 7ca6ce95f..ecbf0c645 100644 --- a/hal/armv7r/exceptions.c +++ b/hal/armv7r/exceptions.c @@ -59,14 +59,14 @@ void hal_exceptionsDumpContext(char *buff, exc_context_t *ctx, unsigned int n) }; size_t i = 0; - n = n & 0x7U; + n &= 0x7U; (void)hal_strcpy(buff, "\nException: "); (void)hal_strcpy(buff += hal_strlen(buff), mnemonics[n]); (void)hal_strcpy(buff += hal_strlen(buff), "\n"); buff += hal_strlen(buff); - i += hal_i2s(" r0=", &buff[i], ctx->cpuCtx.r0, 16, 1U); + i += hal_i2s(" r0=", &buff[i], ctx->cpuCtx.r0, 16U, 1U); i += hal_i2s(" r1=", &buff[i], ctx->cpuCtx.r1, 16, 1U); i += hal_i2s(" r2=", &buff[i], ctx->cpuCtx.r2, 16, 1U); i += hal_i2s(" r3=", &buff[i], ctx->cpuCtx.r3, 16, 1U); @@ -142,7 +142,7 @@ void exceptions_dispatch(unsigned int n, exc_context_t *ctx) int hal_exceptionsFaultType(unsigned int n, exc_context_t *ctx) { - unsigned prot; + unsigned int prot; u32 status; if (n == (unsigned int)exc_prefetch) { diff --git a/hal/armv8r/exceptions.c b/hal/armv8r/exceptions.c index d56716e8d..2cbfcc35b 100644 --- a/hal/armv8r/exceptions.c +++ b/hal/armv8r/exceptions.c @@ -57,9 +57,9 @@ void hal_exceptionsDumpContext(char *buff, exc_context_t *ctx, unsigned int n) "0 #Reset", "1 #Undef", "2 #Syscall", "3 #Prefetch", "4 #Abort", "5 #Reserved", "6 #FIRQ", "7 #IRQ" }; - size_t i = 0; + size_t i = 0U; - n &= 0x7; + n &= 0x7U; hal_strcpy(buff, "\nException: "); hal_strcpy(buff += hal_strlen(buff), mnemonics[n]); diff --git a/hal/common.c b/hal/common.c index 0b70497a4..8e507ad9b 100644 --- a/hal/common.c +++ b/hal/common.c @@ -25,17 +25,17 @@ void hal_stackPutArgs(void **stackp, size_t argc, const struct stackArg *argv) { - size_t i, misalign, argsz = 0; + size_t i, misalign, argsz = 0U; ptr_t stack = (ptr_t)*stackp; - for (i = 0; i < argc; i++) { + for (i = 0U; i < argc; i++) { argsz += SIZE_STACK_ARG(argv[i].sz); } misalign = (stack - argsz) & (STACK_ALIGN - 1U); stack -= misalign; - for (i = 0; i < argc; i++) { + for (i = 0U; i < argc; i++) { stack -= SIZE_STACK_ARG(argv[i].sz); hal_memcpy((void *)stack, argv[i].argp, argv[i].sz); } diff --git a/include/ioctl.h b/include/ioctl.h index a6be4754e..088bffcca 100644 --- a/include/ioctl.h +++ b/include/ioctl.h @@ -19,7 +19,7 @@ typedef struct { unsigned long request; - char data[0]; + char data[]; } ioctl_in_t; diff --git a/posix/posix.c b/posix/posix.c index a4dc59001..de0127eb1 100644 --- a/posix/posix.c +++ b/posix/posix.c @@ -1616,7 +1616,7 @@ int posix_fcntl(int fd, unsigned int cmd, char *ustack) case F_SETFD: GETFROMSTACK(ustack, unsigned long, arg, 2); - err = posix_fcntlSetFd(fd, (long)arg); + err = posix_fcntlSetFd(fd, (int)arg); break; case F_GETFL: @@ -1625,7 +1625,7 @@ int posix_fcntl(int fd, unsigned int cmd, char *ustack) case F_SETFL: GETFROMSTACK(ustack, unsigned int, arg, 2); - err = posix_fcntlSetFl(fd, (long)arg); + err = posix_fcntlSetFl(fd, (int)arg); break; case F_GETLK: diff --git a/posix/unix.c b/posix/unix.c index 961a8916c..31f260e11 100644 --- a/posix/unix.c +++ b/posix/unix.c @@ -754,7 +754,7 @@ int unix_getsockopt(unsigned socket, int level, int optname, void *optval, sockl switch (optname) { case SO_RCVBUF: if (optval != NULL && *optlen >= sizeof(int)) { - *((unsigned int *)optval) = s->buffsz; // zamiast (int *) można (unsigned int *)? + *((unsigned int *)optval) = s->buffsz; *optlen = sizeof(int); } else { diff --git a/proc/cond.c b/proc/cond.c index e384f691d..1f012a4e1 100644 --- a/proc/cond.c +++ b/proc/cond.c @@ -41,9 +41,9 @@ void cond_put(cond_t *cond) t->process->path, process_getPid(t->process), proc_getTid(t)); rem = resource_put(t->process, &cond->resource); - LIB_ASSERT(rem >= 0, "process: %s, pid: %d, tid: %d, refcnt below zero", + LIB_ASSERT(rem >= 0U, "process: %s, pid: %d, tid: %d, refcnt below zero", t->process->path, process_getPid(t->process), proc_getTid(t)); - if (rem <= 0U) { + if (rem == 0U) { proc_threadBroadcastYield(&cond->queue); vm_kfree(cond); } diff --git a/proc/mutex.c b/proc/mutex.c index 9981c22c6..c74cb610d 100644 --- a/proc/mutex.c +++ b/proc/mutex.c @@ -39,9 +39,9 @@ void mutex_put(mutex_t *mutex) t->process->path, process_getPid(t->process), proc_getTid(t)); rem = resource_put(t->process, &mutex->resource); - LIB_ASSERT(rem >= 0, "process: %s, pid: %d, tid: %d, refcnt below zero", + LIB_ASSERT(rem >= 0U, "process: %s, pid: %d, tid: %d, refcnt below zero", t->process->path, process_getPid(t->process), proc_getTid(t)); - if (rem <= 0U) { + if (rem == 0U) { (void)proc_lockDone(&mutex->lock); vm_kfree(mutex); } From 9f8e8b7170fa9c60f5047ce46d735a525cd98ec4 Mon Sep 17 00:00:00 2001 From: Bartlomiej Paczek Date: Mon, 13 Oct 2025 15:25:02 +0200 Subject: [PATCH 06/13] MISRA: Implementing review comments YT ID: DO-02 --- hal/aarch64/cpu.c | 2 +- hal/aarch64/zynqmp/zynqmp_regs.h | 90 ++++++++++++++-------------- hal/armv7r/cpu.c | 50 ++++++++-------- hal/armv7r/exceptions.c | 2 +- hal/armv7r/pmap.c | 2 +- hal/armv7r/zynqmp/zynqmp_regs.h | 92 ++++++++++++++--------------- hal/armv8m/mcx/n94x/mcxn94x.c | 2 +- include/arch/armv7r/zynqmp/zynqmp.h | 2 +- include/posix-poll.h | 4 +- include/posix-stat.h | 16 ++--- include/posix-types.h | 2 +- lib/cbuffer.c | 6 +- lib/idtree.h | 2 +- lib/list.c | 4 +- lib/rand.c | 2 +- posix/fdpass.c | 2 +- posix/fdpass.h | 2 +- posix/inet.c | 2 +- posix/posix.c | 31 ++++------ proc/name.c | 2 +- proc/name.h | 8 +-- vm/amap.h | 2 +- vm/object.h | 2 +- 23 files changed, 162 insertions(+), 167 deletions(-) diff --git a/hal/aarch64/cpu.c b/hal/aarch64/cpu.c index 0e243d7ac..f343cfa32 100644 --- a/hal/aarch64/cpu.c +++ b/hal/aarch64/cpu.c @@ -24,7 +24,7 @@ #define CONST_STR_SIZE(x) x, (sizeof(x) - 1) /* Function creates new cpu context on top of given thread kernel stack */ -int hal_cpuCreateContext(cpu_context_t **nctx, void (*start)(void *harg), void *kstack, size_t kstacksz, void *ustack, void *arg, hal_tls_t *tls) +int hal_cpuCreateContext(cpu_context_t **nctx, void start(void *harg), void *kstack, size_t kstacksz, void *ustack, void *arg, hal_tls_t *tls) { cpu_context_t *ctx; int i; diff --git a/hal/aarch64/zynqmp/zynqmp_regs.h b/hal/aarch64/zynqmp/zynqmp_regs.h index 55503b16f..b30f94c1d 100644 --- a/hal/aarch64/zynqmp/zynqmp_regs.h +++ b/hal/aarch64/zynqmp/zynqmp_regs.h @@ -18,14 +18,14 @@ #define _ZYNQMP_REGS_H_ enum { - iou_slcr_mio_pin_0 = 0x0UL, /* 78 registers */ - iou_slcr_bank0_ctrl0 = 0x4eUL, /* 6 registers */ - iou_slcr_bank0_status = 0x54UL, + iou_slcr_mio_pin_0 = 0x0, /* 78 registers */ + iou_slcr_bank0_ctrl0 = 0x4e, /* 6 registers */ + iou_slcr_bank0_status = 0x54, iou_slcr_bank1_ctrl0, /* 6 registers */ - iou_slcr_bank1_status = 0x5bUL, + iou_slcr_bank1_status = 0x5b, iou_slcr_bank2_ctrl0, /* 6 registers */ - iou_slcr_bank2_status = 0x62UL, - iou_slcr_mio_loopback = 0x80UL, + iou_slcr_bank2_status = 0x62, + iou_slcr_mio_loopback = 0x80, iou_slcr_mio_mst_tri0, /* 3 registers */ iou_slcr_wdt_clk_sel = 0xc0, iou_slcr_can_mio_ctrl, @@ -45,19 +45,19 @@ enum { iou_slcr_sd_sdr50prset, iou_slcr_sd_sdr104prst, iou_slcr_sd_ddr50preset, - iou_slcr_sd_maxcur1p8 = 0xd3UL, + iou_slcr_sd_maxcur1p8 = 0xd3, iou_slcr_sd_maxcur3p0, iou_slcr_sd_maxcur3p1, iou_slcr_sd_dll_ctrl, iou_slcr_sd_cdn_ctrl, iou_slcr_gem_ctrl, - iou_slcr_iou_ttc_apb_clk = 0xe0UL, - iou_slcr_iou_tapdly_bypass = 0xe4UL, - iou_slcr_iou_coherent_ctrl = 0x100UL, + iou_slcr_iou_ttc_apb_clk = 0xe0, + iou_slcr_iou_tapdly_bypass = 0xe4, + iou_slcr_iou_coherent_ctrl = 0x100, iou_slcr_video_pss_clk_sel, iou_slcr_iou_interconnect_route, - iou_slcr_ctrl = 0x180UL, - iou_slcr_isr = 0x1c0UL, + iou_slcr_ctrl = 0x180, + iou_slcr_isr = 0x1c0, iou_slcr_imr, iou_slcr_ier, iou_slcr_idr, @@ -65,14 +65,14 @@ enum { }; enum { - apu_err_ctrl = 0x0UL, - apu_isr = 0x4UL, + apu_err_ctrl = 0x0, + apu_isr = 0x4, apu_imr, apu_ien, apu_ids, apu_config_0, apu_config_1, - apu_rvbaraddr0l = 0x10UL, + apu_rvbaraddr0l = 0x10, apu_rvbaraddr0h, apu_rvbaraddr1l, apu_rvbaraddr1h, @@ -81,18 +81,18 @@ enum { apu_rvbaraddr3l, apu_rvbaraddr3h, apu_ace_ctrl, - apu_snoop_ctrl = 0x20UL, - apu_pwrctl = 0x24UL, + apu_snoop_ctrl = 0x20, + apu_pwrctl = 0x24, apu_pwrstat, }; enum { - crf_apb_err_ctrl = 0x0UL, + crf_apb_err_ctrl = 0x0, crf_apb_ir_status, crf_apb_ir_mask, crf_apb_ir_enable, crf_apb_ir_disable, - crf_apb_crf_wprot = 0x7UL, + crf_apb_crf_wprot = 0x7, crf_apb_apll_ctrl, crf_apb_apll_cfg, crf_apb_apll_frac_cfg, @@ -106,40 +106,40 @@ enum { crf_apb_apll_to_lpd_ctrl, crf_apb_dpll_to_lpd_ctrl, crf_apb_vpll_to_lpd_ctrl, - crf_apb_acpu_ctrl = 0x18UL, + crf_apb_acpu_ctrl = 0x18, crf_apb_dbg_trace_ctrl, crf_apb_dbg_fpd_ctrl, - crf_apb_dp_video_ref_ctrl = 0x1cUL, + crf_apb_dp_video_ref_ctrl = 0x1c, crf_apb_dp_audio_ref_ctrl, - crf_apb_dp_stc_ref_ctrl = 0x1fUL, + crf_apb_dp_stc_ref_ctrl = 0x1f, crf_apb_ddr_ctrl, crf_apb_gpu_ref_ctrl, - crf_apb_sata_ref_ctrl = 0x28UL, - crf_apb_pcie_ref_ctrl = 0x2dUL, + crf_apb_sata_ref_ctrl = 0x28, + crf_apb_pcie_ref_ctrl = 0x2d, crf_apb_fpd_dma_ref_ctrl, crf_apb_dpdma_ref_ctrl, crf_apb_topsw_main_ctrl, crf_apb_topsw_lsbus_ctrl, - crf_apb_dbg_tstmp_ctrl = 0x3eUL, - crf_apb_rst_fpd_top = 0x40UL, + crf_apb_dbg_tstmp_ctrl = 0x3e, + crf_apb_rst_fpd_top = 0x40, crf_apb_rst_fpd_apu, crf_apb_rst_ddr_ss, }; enum { - crl_apb_err_ctrl = 0x0UL, + crl_apb_err_ctrl = 0x0, crl_apb_ir_status, crl_apb_ir_mask, crl_apb_ir_enable, crl_apb_ir_disable, - crl_apb_crl_wprot = 0x7UL, + crl_apb_crl_wprot = 0x7, crl_apb_iopll_ctrl, crl_apb_iopll_cfg, crl_apb_iopll_frac_cfg, - crl_apb_rpll_ctrl = 0xcUL, + crl_apb_rpll_ctrl = 0xc, crl_apb_rpll_cfg, crl_apb_rpll_frac_cfg, - crl_apb_pll_status = 0x10UL, + crl_apb_pll_status = 0x10, crl_apb_iopll_to_fpd_ctrl, crl_apb_rpll_to_fpd_ctrl, crl_apb_usb3_dual_ref_ctrl, @@ -158,8 +158,8 @@ enum { crl_apb_spi1_ref_ctrl, crl_apb_can0_ref_ctrl, crl_apb_can1_ref_ctrl, - crl_apb_cpu_r5_ctrl = 0x24UL, - crl_apb_iou_switch_ctrl = 0x27UL, + crl_apb_cpu_r5_ctrl = 0x24, + crl_apb_iou_switch_ctrl = 0x27, crl_apb_csu_pll_ctrl, crl_apb_pcap_ctrl, crl_apb_lpd_switch_ctrl, @@ -167,7 +167,7 @@ enum { crl_apb_dbg_lpd_ctrl, crl_apb_nand_ref_ctrl, crl_apb_lpd_dma_ref_ctrl, - crl_apb_pl0_ref_ctrl = 0x30UL, + crl_apb_pl0_ref_ctrl = 0x30, crl_apb_pl1_ref_ctrl, crl_apb_pl2_ref_ctrl, crl_apb_pl3_ref_ctrl, @@ -178,35 +178,35 @@ enum { crl_apb_pl2_thr_ctrl, crl_apb_pl2_thr_cnt, crl_apb_pl3_thr_ctrl, - crl_apb_pl3_thr_cnt = 0x3fUL, + crl_apb_pl3_thr_cnt = 0x3f, crl_apb_gem_tsu_ref_ctrl, crl_apb_dll_ref_ctrl, crl_apb_pssysmon_ref_ctrl, - crl_apb_i2c0_ref_ctrl = 0x48UL, + crl_apb_i2c0_ref_ctrl = 0x48, crl_apb_i2c1_ref_ctrl, crl_apb_timestamp_ref_ctrl, - crl_apb_safety_chk = 0x4cUL, - crl_apb_clkmon_status = 0x50UL, + crl_apb_safety_chk = 0x4c, + crl_apb_clkmon_status = 0x50, crl_apb_clkmon_mask, crl_apb_clkmon_enable, crl_apb_clkmon_disable, crl_apb_clkmon_trigger, - crl_apb_chkr0_clka_upper = 0x58UL, /* 8 banks of 4 registers */ + crl_apb_chkr0_clka_upper = 0x58, /* 8 banks of 4 registers */ crl_apb_chkr0_clka_lower, crl_apb_chkr0_clkb_cnt, crl_apb_chkr0_ctrl, - crl_apb_boot_mode_user = 0x80UL, + crl_apb_boot_mode_user = 0x80, crl_apb_boot_mode_por, - crl_apb_reset_ctrl = 0x86UL, + crl_apb_reset_ctrl = 0x86, crl_apb_blockonly_rst, crl_apb_reset_reason, - crl_apb_rst_lpd_iou0 = 0x8cUL, - crl_apb_rst_lpd_iou2 = 0x8eUL, + crl_apb_rst_lpd_iou0 = 0x8c, + crl_apb_rst_lpd_iou2 = 0x8e, crl_apb_rst_lpd_top, crl_apb_rst_lpd_dbg, - crl_apb_boot_pin_ctrl = 0x94UL, - crl_apb_bank3_ctrl0 = 0x9cUL, /* 6 registers */ - crl_apb_bank3_status = 0xa2UL, + crl_apb_boot_pin_ctrl = 0x94, + crl_apb_bank3_ctrl0 = 0x9c, /* 6 registers */ + crl_apb_bank3_status = 0xa2, }; #endif /* _ZYNQMP_REGS_H_ */ diff --git a/hal/armv7r/cpu.c b/hal/armv7r/cpu.c index 52b8252d2..cb16180e5 100644 --- a/hal/armv7r/cpu.c +++ b/hal/armv7r/cpu.c @@ -49,7 +49,7 @@ int hal_cpuCreateContext(cpu_context_t **nctx, void (*start)(void *harg), void * /* Set all registers to sNAN */ for (i = 0; i < 32; i += 2) { ctx->freg[i] = 0; - ctx->freg[i + 1] = 0xfff10000UL; + ctx->freg[i + 1] = 0xfff10000U; } ctx->fpsr = 0; @@ -57,19 +57,19 @@ int hal_cpuCreateContext(cpu_context_t **nctx, void (*start)(void *harg), void * ctx->padding = 0; ctx->r0 = (u32)arg; - ctx->r1 = 0x11111111UL; - ctx->r2 = 0x22222222UL; - ctx->r3 = 0x33333333UL; - ctx->r4 = 0x44444444UL; - ctx->r5 = 0x55555555UL; - ctx->r6 = 0x66666666UL; - ctx->r7 = 0x77777777UL; - ctx->r8 = 0x88888888UL; - ctx->r9 = 0x99999999UL; - ctx->r10 = 0xaaaaaaaaUL; - - ctx->ip = 0xccccccccUL; - ctx->lr = 0xeeeeeeeeUL; + ctx->r1 = 0x11111111U; + ctx->r2 = 0x22222222U; + ctx->r3 = 0x33333333U; + ctx->r4 = 0x44444444U; + ctx->r5 = 0x55555555U; + ctx->r6 = 0x66666666U; + ctx->r7 = 0x77777777U; + ctx->r8 = 0x88888888U; + ctx->r9 = 0x99999999U; + ctx->r10 = 0xaaaaaaaaU; + + ctx->ip = 0xccccccccU; + ctx->lr = 0xeeeeeeeeU; /* parasoft-suppress-next-line MISRAC2012-RULE_11_1 "Need to assign function address to processor register" */ ctx->pc = (u32)start; @@ -153,7 +153,7 @@ char *hal_cpuInfo(char *info) n += 6U; } - if (((midr >> 4) & 0xfffUL) == 0xc15UL) { + if (((midr >> 4) & 0xfffU) == 0xc15U) { (void)hal_strcpy(&info[n], "Cortex-R5 "); n += hal_strlen("Cortex-R5 "); } @@ -161,9 +161,9 @@ char *hal_cpuInfo(char *info) * "Correctness of char operation in following block is guaranteed by design" */ info[n++] = 'r'; - info[n++] = '0' + ((midr >> 20) & 0xfUL); + info[n++] = '0' + ((midr >> 20) & 0xfU); info[n++] = 'p'; - info[n++] = '0' + (midr & 0xfUL); + info[n++] = '0' + (midr & 0xfU); info[n++] = ' '; info[n++] = 'x'; @@ -185,42 +185,42 @@ char *hal_cpuFeatures(char *features, unsigned int len) return features; } - if (((pfr0 >> 12) & 0xfUL) != 0U && (len - n) > 9U) { + if (((pfr0 >> 12) & 0xfU) != 0U && (len - n) > 9U) { (void)hal_strcpy(&features[n], "ThumbEE, "); n += 9U; } - if (((pfr0 >> 8) & 0xfUL) != 0U && (len - n) > 9U) { + if (((pfr0 >> 8) & 0xfU) != 0U && (len - n) > 9U) { (void)hal_strcpy(&features[n], "Jazelle, "); n += 9U; } - if (((pfr0 >> 4) & 0xfUL) != 0U && (len - n) > 7U) { + if (((pfr0 >> 4) & 0xfU) != 0U && (len - n) > 7U) { (void)hal_strcpy(&features[n], "Thumb, "); n += 7U; } - if ((pfr0 & 0xfUL) != 0U && (len - n) > 5U) { + if ((pfr0 & 0xfU) != 0U && (len - n) > 5U) { (void)hal_strcpy(&features[n], "ARM, "); n += 5U; } - if (((pfr1 >> 16) & 0xfUL) != 0U && (len - n) > 15U) { + if (((pfr1 >> 16) & 0xfU) != 0U && (len - n) > 15U) { (void)hal_strcpy(&features[n], "Generic Timer, "); n += 15U; } - if (((pfr1 >> 12) & 0xfUL) != 0U && (len - n) > 16U) { + if (((pfr1 >> 12) & 0xfU) != 0U && (len - n) > 16U) { (void)hal_strcpy(&features[n], "Virtualization, "); n += 16U; } - if (((pfr1 >> 8) & 0xfUL) != 0U && (len - n) > 5U) { + if (((pfr1 >> 8) & 0xfU) != 0U && (len - n) > 5U) { (void)hal_strcpy(&features[n], "MCU, "); n += 5U; } - if (((pfr1 >> 4) & 0xfUL) != 0U && (len - n) > 10U) { + if (((pfr1 >> 4) & 0xfU) != 0U && (len - n) > 10U) { (void)hal_strcpy(&features[n], "Security, "); n += 10U; } diff --git a/hal/armv7r/exceptions.c b/hal/armv7r/exceptions.c index ecbf0c645..bc217c023 100644 --- a/hal/armv7r/exceptions.c +++ b/hal/armv7r/exceptions.c @@ -153,7 +153,7 @@ int hal_exceptionsFaultType(unsigned int n, exc_context_t *ctx) prot = PROT_READ; status = ctx->dfsr & 0x1fU; - if ((ctx->dfsr & (0x1UL << 11)) != 0U) { + if ((ctx->dfsr & ((unsigned int)0x1 << 11)) != 0U) { prot |= PROT_WRITE; } } diff --git a/hal/armv7r/pmap.c b/hal/armv7r/pmap.c index 577e5541a..f259e7e79 100644 --- a/hal/armv7r/pmap.c +++ b/hal/armv7r/pmap.c @@ -18,7 +18,7 @@ #include "config.h" #include "syspage.h" #include "halsyspage.h" -#include /*Should be given full path arm7rarch/cpu.h -TBC*/ +#include #include /* parasoft-begin-suppress MISRAC2012-RULE_8_6 "Definition in assembly code" */ diff --git a/hal/armv7r/zynqmp/zynqmp_regs.h b/hal/armv7r/zynqmp/zynqmp_regs.h index 05629d78d..4476541f3 100644 --- a/hal/armv7r/zynqmp/zynqmp_regs.h +++ b/hal/armv7r/zynqmp/zynqmp_regs.h @@ -18,16 +18,16 @@ #define _ZYNQMP_REGS_H_ enum { - iou_slcr_mio_pin_0 = 0x0UL, /* 78 registers */ - iou_slcr_bank0_ctrl0 = 0x4eUL, /* 6 registers */ - iou_slcr_bank0_status = 0x54UL, + iou_slcr_mio_pin_0 = 0x0, /* 78 registers */ + iou_slcr_bank0_ctrl0 = 0x4e, /* 6 registers */ + iou_slcr_bank0_status = 0x54, iou_slcr_bank1_ctrl0, /* 6 registers */ - iou_slcr_bank1_status = 0x5bUL, + iou_slcr_bank1_status = 0x5b, iou_slcr_bank2_ctrl0, /* 6 registers */ - iou_slcr_bank2_status = 0x62UL, - iou_slcr_mio_loopback = 0x80UL, + iou_slcr_bank2_status = 0x62, + iou_slcr_mio_loopback = 0x80, iou_slcr_mio_mst_tri0, /* 3 registers */ - iou_slcr_wdt_clk_sel = 0xc0UL, + iou_slcr_wdt_clk_sel = 0xc0, iou_slcr_can_mio_ctrl, iou_slcr_gem_clk_ctrl, iou_slcr_sdio_clk_ctrl, @@ -45,19 +45,19 @@ enum { iou_slcr_sd_sdr50prset, iou_slcr_sd_sdr104prst, iou_slcr_sd_ddr50preset, - iou_slcr_sd_maxcur1p8 = 0xd3UL, + iou_slcr_sd_maxcur1p8 = 0xd3, iou_slcr_sd_maxcur3p0, iou_slcr_sd_maxcur3p1, iou_slcr_sd_dll_ctrl, iou_slcr_sd_cdn_ctrl, iou_slcr_gem_ctrl, - iou_slcr_iou_ttc_apb_clk = 0xe0UL, - iou_slcr_iou_tapdly_bypass = 0xe4UL, - iou_slcr_iou_coherent_ctrl = 0x100UL, + iou_slcr_iou_ttc_apb_clk = 0xe0, + iou_slcr_iou_tapdly_bypass = 0xe4, + iou_slcr_iou_coherent_ctrl = 0x100, iou_slcr_video_pss_clk_sel, iou_slcr_iou_interconnect_route, - iou_slcr_ctrl = 0x180UL, - iou_slcr_isr = 0x1c0UL, + iou_slcr_ctrl = 0x180, + iou_slcr_isr = 0x1c0, iou_slcr_imr, iou_slcr_ier, iou_slcr_idr, @@ -65,14 +65,14 @@ enum { }; enum { - apu_err_ctrl = 0x0UL, - apu_isr = 0x4UL, + apu_err_ctrl = 0x0, + apu_isr = 0x4U, apu_imr, apu_ien, apu_ids, apu_config_0, apu_config_1, - apu_rvbaraddr0l = 0x10UL, + apu_rvbaraddr0l = 0x10, apu_rvbaraddr0h, apu_rvbaraddr1l, apu_rvbaraddr1h, @@ -81,18 +81,18 @@ enum { apu_rvbaraddr3l, apu_rvbaraddr3h, apu_ace_ctrl, - apu_snoop_ctrl = 0x20UL, - apu_pwrctl = 0x24UL, + apu_snoop_ctrl = 0x20, + apu_pwrctl = 0x24, apu_pwrstat, }; enum { - crf_apb_err_ctrl = 0x0UL, + crf_apb_err_ctrl = 0x0, crf_apb_ir_status, crf_apb_ir_mask, crf_apb_ir_enable, crf_apb_ir_disable, - crf_apb_crf_wprot = 0x7UL, + crf_apb_crf_wprot = 0x7, crf_apb_apll_ctrl, crf_apb_apll_cfg, crf_apb_apll_frac_cfg, @@ -106,40 +106,40 @@ enum { crf_apb_apll_to_lpd_ctrl, crf_apb_dpll_to_lpd_ctrl, crf_apb_vpll_to_lpd_ctrl, - crf_apb_acpu_ctrl = 0x18UL, + crf_apb_acpu_ctrl = 0x18, crf_apb_dbg_trace_ctrl, crf_apb_dbg_fpd_ctrl, - crf_apb_dp_video_ref_ctrl = 0x1cUL, + crf_apb_dp_video_ref_ctrl = 0x1c, crf_apb_dp_audio_ref_ctrl, - crf_apb_dp_stc_ref_ctrl = 0x1fUL, + crf_apb_dp_stc_ref_ctrl = 0x1f, crf_apb_ddr_ctrl, crf_apb_gpu_ref_ctrl, - crf_apb_sata_ref_ctrl = 0x28UL, - crf_apb_pcie_ref_ctrl = 0x2dUL, + crf_apb_sata_ref_ctrl = 0x28, + crf_apb_pcie_ref_ctrl = 0x2d, crf_apb_fpd_dma_ref_ctrl, crf_apb_dpdma_ref_ctrl, crf_apb_topsw_main_ctrl, crf_apb_topsw_lsbus_ctrl, - crf_apb_dbg_tstmp_ctrl = 0x3eUL, - crf_apb_rst_fpd_top = 0x40UL, + crf_apb_dbg_tstmp_ctrl = 0x3e, + crf_apb_rst_fpd_top = 0x40, crf_apb_rst_fpd_apu, crf_apb_rst_ddr_ss, }; enum { - crl_apb_err_ctrl = 0x0UL, + crl_apb_err_ctrl = 0x0, crl_apb_ir_status, crl_apb_ir_mask, crl_apb_ir_enable, crl_apb_ir_disable, - crl_apb_crl_wprot = 0x7UL, + crl_apb_crl_wprot = 0x7, crl_apb_iopll_ctrl, crl_apb_iopll_cfg, crl_apb_iopll_frac_cfg, - crl_apb_rpll_ctrl = 0xcUL, + crl_apb_rpll_ctrl = 0xc, crl_apb_rpll_cfg, crl_apb_rpll_frac_cfg, - crl_apb_pll_status = 0x10UL, + crl_apb_pll_status = 0x10, crl_apb_iopll_to_fpd_ctrl, crl_apb_rpll_to_fpd_ctrl, crl_apb_usb3_dual_ref_ctrl, @@ -158,8 +158,8 @@ enum { crl_apb_spi1_ref_ctrl, crl_apb_can0_ref_ctrl, crl_apb_can1_ref_ctrl, - crl_apb_cpu_r5_ctrl = 0x24UL, - crl_apb_iou_switch_ctrl = 0x27UL, + crl_apb_cpu_r5_ctrl = 0x24, + crl_apb_iou_switch_ctrl = 0x27, crl_apb_csu_pll_ctrl, crl_apb_pcap_ctrl, crl_apb_lpd_switch_ctrl, @@ -167,7 +167,7 @@ enum { crl_apb_dbg_lpd_ctrl, crl_apb_nand_ref_ctrl, crl_apb_lpd_dma_ref_ctrl, - crl_apb_pl0_ref_ctrl = 0x30UL, + crl_apb_pl0_ref_ctrl = 0x30, crl_apb_pl1_ref_ctrl, crl_apb_pl2_ref_ctrl, crl_apb_pl3_ref_ctrl, @@ -178,35 +178,35 @@ enum { crl_apb_pl2_thr_ctrl, crl_apb_pl2_thr_cnt, crl_apb_pl3_thr_ctrl, - crl_apb_pl3_thr_cnt = 0x3fUL, + crl_apb_pl3_thr_cnt = 0x3f, crl_apb_gem_tsu_ref_ctrl, crl_apb_dll_ref_ctrl, crl_apb_pssysmon_ref_ctrl, - crl_apb_i2c0_ref_ctrl = 0x48UL, + crl_apb_i2c0_ref_ctrl = 0x48, crl_apb_i2c1_ref_ctrl, crl_apb_timestamp_ref_ctrl, - crl_apb_safety_chk = 0x4cUL, - crl_apb_clkmon_status = 0x50UL, + crl_apb_safety_chk = 0x4c, + crl_apb_clkmon_status = 0x50, crl_apb_clkmon_mask, crl_apb_clkmon_enable, crl_apb_clkmon_disable, crl_apb_clkmon_trigger, - crl_apb_chkr0_clka_upper = 0x58UL, /* 8 banks of 4 registers */ + crl_apb_chkr0_clka_upper = 0x58, /* 8 banks of 4 registers */ crl_apb_chkr0_clka_lower, crl_apb_chkr0_clkb_cnt, crl_apb_chkr0_ctrl, - crl_apb_boot_mode_user = 0x80UL, + crl_apb_boot_mode_user = 0x80, crl_apb_boot_mode_por, - crl_apb_reset_ctrl = 0x86UL, + crl_apb_reset_ctrl = 0x86, crl_apb_blockonly_rst, crl_apb_reset_reason, - crl_apb_rst_lpd_iou0 = 0x8cUL, - crl_apb_rst_lpd_iou2 = 0x8eUL, + crl_apb_rst_lpd_iou0 = 0x8c, + crl_apb_rst_lpd_iou2 = 0x8e, crl_apb_rst_lpd_top, crl_apb_rst_lpd_dbg, - crl_apb_boot_pin_ctrl = 0x94UL, - crl_apb_bank3_ctrl0 = 0x9cUL, /* 6 registers */ - crl_apb_bank3_status = 0xa2UL, + crl_apb_boot_pin_ctrl = 0x94, + crl_apb_bank3_ctrl0 = 0x9c, /* 6 registers */ + crl_apb_bank3_status = 0xa2, }; #endif /* _ZYNQMP_REGS_H_ */ diff --git a/hal/armv8m/mcx/n94x/mcxn94x.c b/hal/armv8m/mcx/n94x/mcxn94x.c index 475dd4411..b33c1ee43 100644 --- a/hal/armv8m/mcx/n94x/mcxn94x.c +++ b/hal/armv8m/mcx/n94x/mcxn94x.c @@ -178,7 +178,7 @@ u64 _mcxn94x_sysconGray2Bin(u64 gray) hal_cpuDataMemoryBarrier(); ret = *(n94x_common.syscon + syscon_binarycodelsb); - ret |= ((u64) * (n94x_common.syscon + syscon_binarycodemsb)) << 32; + ret |= ((u64)(*(n94x_common.syscon + syscon_binarycodemsb))) << 32; return ret; } diff --git a/include/arch/armv7r/zynqmp/zynqmp.h b/include/arch/armv7r/zynqmp/zynqmp.h index 4defcb915..5a8ab1a0f 100644 --- a/include/arch/armv7r/zynqmp/zynqmp.h +++ b/include/arch/armv7r/zynqmp/zynqmp.h @@ -158,6 +158,6 @@ typedef struct { __u32 reason; } reboot; }; -} __attribute__((packed)) platformctl_t; /* __attribute__((packed)) TBC*/ +} __attribute__((packed)) platformctl_t; #endif diff --git a/include/posix-poll.h b/include/posix-poll.h index 468df31cf..4079fe4fd 100644 --- a/include/posix-poll.h +++ b/include/posix-poll.h @@ -34,8 +34,8 @@ typedef unsigned int nfds_t; struct pollfd { int fd; - unsigned short events; - unsigned short revents; + short events; + short revents; }; diff --git a/include/posix-stat.h b/include/posix-stat.h index 0a2b83e8c..3c08cca53 100644 --- a/include/posix-stat.h +++ b/include/posix-stat.h @@ -22,14 +22,14 @@ /* File type */ -#define S_IFMT 0xf000ULL /* File type mask */ -#define S_IFSOCK 0xc000U /* Socket */ -#define S_IFLNK 0xa000ULL /* Symbolic link */ -#define S_IFREG 0x8000ULL /* Regular file */ -#define S_IFBLK 0x6000ULL /* Block device */ -#define S_IFDIR 0x4000ULL /* Directory */ -#define S_IFCHR 0x2000U /* Character device */ -#define S_IFIFO 0x1000U /* FIFO */ +#define S_IFMT 0xf000U /* File type mask */ +#define S_IFSOCK 0xc000U /* Socket */ +#define S_IFLNK 0xa000U /* Symbolic link */ +#define S_IFREG 0x8000U /* Regular file */ +#define S_IFBLK 0x6000U /* Block device */ +#define S_IFDIR 0x4000U /* Directory */ +#define S_IFCHR 0x2000U /* Character device */ +#define S_IFIFO 0x1000U /* FIFO */ #define S_ISSOCK(m) (((m) & S_IFMT) == S_IFSOCK) /* Socket */ #define S_ISLNK(m) (((m) & S_IFMT) == S_IFLNK) /* Symbolic link */ diff --git a/include/posix-types.h b/include/posix-types.h index e65930505..64ab1c61b 100644 --- a/include/posix-types.h +++ b/include/posix-types.h @@ -23,7 +23,7 @@ typedef int gid_t; typedef int uid_t; typedef int dev_t; -typedef int ino_t; /* FIXME: should be unsigned long long to encode id_t? */ +typedef unsigned int ino_t; /* FIXME: should be unsigned long long to encode id_t? */ typedef int nlink_t; typedef int blksize_t; typedef long long blkcnt_t; diff --git a/lib/cbuffer.c b/lib/cbuffer.c index eb61525e8..d55870c2f 100644 --- a/lib/cbuffer.c +++ b/lib/cbuffer.c @@ -32,7 +32,7 @@ unsigned int _cbuffer_write(cbuffer_t *buf, const void *data, size_t sz) unsigned int bytes = 0; if (sz == 0U || buf->full != 0U) { - return 0; + return 0U; } if (buf->r > buf->w) { @@ -63,7 +63,7 @@ unsigned int _cbuffer_read(cbuffer_t *buf, void *data, size_t sz) if (bytes > 0U) { buf->r = (buf->r + bytes) & (buf->sz - 1U); - buf->full = 0; + buf->full = 0U; } return bytes; @@ -75,7 +75,7 @@ unsigned int _cbuffer_peek(const cbuffer_t *buf, void *data, size_t sz) unsigned int bytes = 0; if (sz == 0U || (buf->r == buf->w && buf->full == 0U)) { - return 0; + return 0U; } if (buf->w > buf->r) { hal_memcpy(data, buf->data + buf->r, bytes = min(sz, buf->w - buf->r)); diff --git a/lib/idtree.h b/lib/idtree.h index c5dc44cfe..6cc1351d4 100644 --- a/lib/idtree.h +++ b/lib/idtree.h @@ -19,7 +19,7 @@ #include "rb.h" -#define MAX_ID ((1ULL << ((unsigned int)__CHAR_BIT__ * (sizeof(int)) - 1U)) - 1ULL) +#define MAX_ID ((1ULL << ((size_t)__CHAR_BIT__ * (sizeof(int)) - 1U)) - 1ULL) typedef rbtree_t idtree_t; diff --git a/lib/list.c b/lib/list.c index eeab09704..85cc0db80 100644 --- a/lib/list.c +++ b/lib/list.c @@ -51,8 +51,8 @@ void lib_listRemove(void **list, void *t, size_t noff, size_t poff) *list = (void *)*((addr_t *)(t + noff)); } } - *((addr_t *)(t + noff)) = 0; - *((addr_t *)(t + poff)) = 0; + *((addr_t *)(t + noff)) = 0U; + *((addr_t *)(t + poff)) = 0U; } diff --git a/lib/rand.c b/lib/rand.c index 510e3f0b6..86d3311b1 100644 --- a/lib/rand.c +++ b/lib/rand.c @@ -19,5 +19,5 @@ int lib_rand(unsigned int *seedp) { *seedp = (*seedp * 1103515245U + 12345U); - return ((int)((unsigned int)(*seedp / 2U))); + return (int)(unsigned int)(*seedp / 2U); } diff --git a/posix/fdpass.c b/posix/fdpass.c index db39ed42c..84bab05ad 100644 --- a/posix/fdpass.c +++ b/posix/fdpass.c @@ -76,7 +76,7 @@ int fdpass_pack(fdpack_t **packs, const void *control, socklen_t controllen) return -ENOMEM; } - tot_cnt = 0; + tot_cnt = 0U; /* calculate total number of file descriptors */ for (cmsg = CMSG_FIRSTHDR_CONST(control, controllen); cmsg != NULL; cmsg = CMSG_NXTHDR_CONST(control, controllen, cmsg)) { cmsg_data = CMSG_DATA_CONST(cmsg); diff --git a/posix/fdpass.h b/posix/fdpass.h index 891ba4b54..9ac9ed639 100644 --- a/posix/fdpass.h +++ b/posix/fdpass.h @@ -26,7 +26,7 @@ typedef struct fdpack_s { struct fdpack_s *next, *prev; unsigned int first, cnt; - fildes_t fd[0]; + fildes_t fd[]; } fdpack_t; diff --git a/posix/inet.c b/posix/inet.c index 01f058c19..1a3e1b7e3 100644 --- a/posix/inet.c +++ b/posix/inet.c @@ -213,7 +213,7 @@ ssize_t inet_sendto(unsigned int socket, const void *message, size_t length, uns hal_memset(&msg, 0, sizeof(msg)); msg.type = sockmSend; smi->send.flags = flags; - msg.i.data = (const void *)message; + msg.i.data = message; msg.i.size = length; return sockdestcall(socket, &msg, dest_addr, dest_len); diff --git a/posix/posix.c b/posix/posix.c index de0127eb1..db09d463b 100644 --- a/posix/posix.c +++ b/posix/posix.c @@ -187,13 +187,13 @@ static int _posix_allocfd(process_info_t *p, int fd) nfdsz = p->maxfd; } - nfds = vm_kmalloc((unsigned int)nfdsz * sizeof(*nfds)); + nfds = vm_kmalloc((size_t)nfdsz * sizeof(*nfds)); if (nfds == NULL) { return -1; } - hal_memcpy(nfds, p->fds, (unsigned int)p->fdsz * sizeof(*nfds)); - hal_memset(nfds + p->fdsz, 0, ((unsigned int)nfdsz - (unsigned int)p->fdsz) * sizeof(*nfds)); + hal_memcpy(nfds, p->fds, (size_t)p->fdsz * sizeof(*nfds)); + hal_memset(nfds + p->fdsz, 0, ((size_t)nfdsz - (size_t)p->fdsz) * sizeof(*nfds)); vm_kfree(p->fds); @@ -282,7 +282,7 @@ static int posix_truncate(oid_t *oid, off_t length) hal_memset(&msg, 0, sizeof(msg)); msg.type = mtTruncate; hal_memcpy(&msg.oid, oid, sizeof(oid_t)); - msg.i.io.len = (unsigned int)length; + msg.i.io.len = (size_t)length; err = proc_send(oid->port, &msg); } @@ -562,9 +562,9 @@ int posix_open(const char *filename, int oflag, char *ustack) open_file_t *f; mode_t mode; - if (proc_lookup("/dev/posix/pipes", NULL, &pipesrv) != 0) { - hal_memset(&pipesrv, 0xff, sizeof(oid_t)); - } + hal_memset(&pipesrv, 0xff, sizeof(oid_t)); + + (void)proc_lookup("/dev/posix/pipes", NULL, &pipesrv); p = pinfo_find(process_getPid(proc_current()->process)); if (p == NULL) { @@ -1305,7 +1305,7 @@ int posix_fstat(int fd, struct stat *buf) hal_memset(&msg, 0, sizeof(msg_t)); buf->st_dev = (int)f->ln.port; - buf->st_ino = (int)f->ln.id; /* FIXME */ + buf->st_ino = f->ln.id; /* FIXME */ buf->st_rdev = (int)f->oid.port; if (f->type == (char)ftRegular) { @@ -1467,11 +1467,6 @@ static int posix_fcntlDup(int fd, int fd2, int cloexec) } fd2 = _posix_allocfd(p, fd2); - if (fd2 < 0) { - (void)proc_lockClear(&p->lock); - pinfo_put(p); - return fd2; - } err = _posix_dup2(p, fd, fd2); if ((err == fd2) && (cloexec != 0)) { p->fds[fd2].flags = FD_CLOEXEC; @@ -2389,7 +2384,7 @@ static int do_poll_iteration(struct pollfd *fds, nfds_t nfds) (void)posix_fileDeref(f); if (f->type == (char)ftUnixSocket) { - err = unix_poll((unsigned int)msg.oid.id, fds[i].events); + err = unix_poll((unsigned int)msg.oid.id, (unsigned short)fds[i].events); } else { err = proc_send(msg.oid.port, &msg); @@ -2405,18 +2400,18 @@ static int do_poll_iteration(struct pollfd *fds, nfds_t nfds) } if (err < 0) { - fds[i].revents |= POLLHUP; + fds[i].revents = (short)(unsigned short)((unsigned short)fds[i].revents | POLLHUP); } else if (err > 0) { - fds[i].revents |= (unsigned short)err; + fds[i].revents = (short)(unsigned short)((unsigned short)fds[i].revents | (unsigned short)err); } else { /* No action required */ } - fds[i].revents &= ~(~fds[i].events & (POLLIN | POLLOUT | POLLPRI | POLLRDNORM | POLLWRNORM | POLLRDBAND | POLLWRBAND)); + fds[i].revents = (short)(unsigned short)((unsigned short)fds[i].revents & ~(~(unsigned short)fds[i].events & (POLLIN | POLLOUT | POLLPRI | POLLRDNORM | POLLWRNORM | POLLRDBAND | POLLWRBAND))); - if (fds[i].revents != 0U) { + if (fds[i].revents != 0) { ++ready; } } diff --git a/proc/name.c b/proc/name.c index 0c70509d2..3b4d9cbec 100644 --- a/proc/name.c +++ b/proc/name.c @@ -24,7 +24,7 @@ typedef struct _dcache_entry_t { struct _dcache_entry_t *next; oid_t oid; - char name[0]; + char name[]; } dcache_entry_t; diff --git a/proc/name.h b/proc/name.h index 4bad5bf42..6b9b8fb0b 100644 --- a/proc/name.h +++ b/proc/name.h @@ -22,13 +22,13 @@ typedef struct { unsigned int id; size_t pos; - unsigned char buff[0]; + unsigned char buff[]; } __attribute__((packed)) fsdata_t; typedef struct { unsigned int mode; - char name[0]; + char name[]; } __attribute__((packed)) fsopen_t; @@ -37,14 +37,14 @@ typedef unsigned int fsclose_t; typedef struct { unsigned int port; - char name[0]; + char name[]; } __attribute__((packed)) fsmount_t; typedef struct { oid_t oid; size_t pos; - char path[0]; + char path[]; } __attribute__((packed)) fslookup_t; diff --git a/vm/amap.h b/vm/amap.h index b920e323c..c1c47aed6 100644 --- a/vm/amap.h +++ b/vm/amap.h @@ -33,7 +33,7 @@ typedef struct _anon_t { typedef struct _amap_t { lock_t lock; unsigned int refs, size; - anon_t *anons[0]; + anon_t *anons[]; } amap_t; diff --git a/vm/object.h b/vm/object.h index c8954e75a..afd538b41 100644 --- a/vm/object.h +++ b/vm/object.h @@ -29,7 +29,7 @@ typedef struct _vm_object_t { oid_t oid; unsigned int refs; size_t size; - page_t *pages[0]; + page_t *pages[]; } vm_object_t; From 3ef025512e288204d7126364f65cbc00da607428 Mon Sep 17 00:00:00 2001 From: Bartlomiej Paczek Date: Mon, 13 Oct 2025 16:18:09 +0200 Subject: [PATCH 07/13] MISRA: nightly setup YT ID: DO-02 --- .github/workflows/ci.yml | 3 +++ 1 file changed, 3 insertions(+) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 88a5bedaa..10af05b16 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -16,3 +16,6 @@ jobs: call-ci: uses: phoenix-rtos/phoenix-rtos-project/.github/workflows/ci-submodule.yml@master secrets: inherit + with: + build_params: all tests + nightly: true From 412d39ee6bcfb213f5db2eab8b44cb78aafbd894 Mon Sep 17 00:00:00 2001 From: Bartlomiej Paczek Date: Wed, 15 Oct 2025 14:57:48 +0200 Subject: [PATCH 08/13] MISRA: Implementing review comments. YT ID: DO-02 --- hal/aarch64/cpu.c | 2 +- hal/armv7r/exceptions.c | 50 ++++++++++---------- hal/armv7r/zynqmp/interrupts.c | 44 +++++++++--------- hal/armv7r/zynqmp/zynqmp_regs.h | 2 +- hal/armv8m/mcx/n94x/mcxn94x.c | 2 +- include/arch/armv7r/zynqmp/zynqmp.h | 26 +++++------ log/log.c | 2 +- posix/posix.c | 72 ++++++++++++++--------------- posix/posix_private.h | 4 +- 9 files changed, 102 insertions(+), 102 deletions(-) diff --git a/hal/aarch64/cpu.c b/hal/aarch64/cpu.c index f343cfa32..0e243d7ac 100644 --- a/hal/aarch64/cpu.c +++ b/hal/aarch64/cpu.c @@ -24,7 +24,7 @@ #define CONST_STR_SIZE(x) x, (sizeof(x) - 1) /* Function creates new cpu context on top of given thread kernel stack */ -int hal_cpuCreateContext(cpu_context_t **nctx, void start(void *harg), void *kstack, size_t kstacksz, void *ustack, void *arg, hal_tls_t *tls) +int hal_cpuCreateContext(cpu_context_t **nctx, void (*start)(void *harg), void *kstack, size_t kstacksz, void *ustack, void *arg, hal_tls_t *tls) { cpu_context_t *ctx; int i; diff --git a/hal/armv7r/exceptions.c b/hal/armv7r/exceptions.c index bc217c023..5909e8678 100644 --- a/hal/armv7r/exceptions.c +++ b/hal/armv7r/exceptions.c @@ -67,31 +67,31 @@ void hal_exceptionsDumpContext(char *buff, exc_context_t *ctx, unsigned int n) buff += hal_strlen(buff); i += hal_i2s(" r0=", &buff[i], ctx->cpuCtx.r0, 16U, 1U); - i += hal_i2s(" r1=", &buff[i], ctx->cpuCtx.r1, 16, 1U); - i += hal_i2s(" r2=", &buff[i], ctx->cpuCtx.r2, 16, 1U); - i += hal_i2s(" r3=", &buff[i], ctx->cpuCtx.r3, 16, 1U); - - i += hal_i2s("\n r4=", &buff[i], ctx->cpuCtx.r4, 16, 1U); - i += hal_i2s(" r5=", &buff[i], ctx->cpuCtx.r5, 16, 1U); - i += hal_i2s(" r6=", &buff[i], ctx->cpuCtx.r6, 16, 1U); - i += hal_i2s(" r7=", &buff[i], ctx->cpuCtx.r7, 16, 1U); - - i += hal_i2s("\n r8=", &buff[i], ctx->cpuCtx.r8, 16, 1U); - i += hal_i2s(" r9=", &buff[i], ctx->cpuCtx.r9, 16, 1U); - i += hal_i2s(" r10=", &buff[i], ctx->cpuCtx.r10, 16, 1U); - i += hal_i2s(" fp=", &buff[i], ctx->cpuCtx.fp, 16, 1U); - - i += hal_i2s("\n ip=", &buff[i], ctx->cpuCtx.ip, 16, 1U); - i += hal_i2s(" sp=", &buff[i], ctx->cpuCtx.sp, 16, 1U); - i += hal_i2s(" lr=", &buff[i], ctx->cpuCtx.lr, 16, 1U); - i += hal_i2s(" pc=", &buff[i], ctx->cpuCtx.pc, 16, 1U); - - i += hal_i2s("\npsr=", &buff[i], ctx->cpuCtx.psr, 16, 1U); - i += hal_i2s(" dfs=", &buff[i], ctx->dfsr, 16, 1U); - i += hal_i2s(" dfa=", &buff[i], ctx->dfar, 16, 1U); - i += hal_i2s(" ifs=", &buff[i], ctx->ifsr, 16, 1U); - - i += hal_i2s("\nifa=", &buff[i], ctx->ifar, 16, 1U); + i += hal_i2s(" r1=", &buff[i], ctx->cpuCtx.r1, 16U, 1U); + i += hal_i2s(" r2=", &buff[i], ctx->cpuCtx.r2, 16U, 1U); + i += hal_i2s(" r3=", &buff[i], ctx->cpuCtx.r3, 16U, 1U); + + i += hal_i2s("\n r4=", &buff[i], ctx->cpuCtx.r4, 16U, 1U); + i += hal_i2s(" r5=", &buff[i], ctx->cpuCtx.r5, 16U, 1U); + i += hal_i2s(" r6=", &buff[i], ctx->cpuCtx.r6, 16U, 1U); + i += hal_i2s(" r7=", &buff[i], ctx->cpuCtx.r7, 16U, 1U); + + i += hal_i2s("\n r8=", &buff[i], ctx->cpuCtx.r8, 16U, 1U); + i += hal_i2s(" r9=", &buff[i], ctx->cpuCtx.r9, 16U, 1U); + i += hal_i2s(" r10=", &buff[i], ctx->cpuCtx.r10, 16U, 1U); + i += hal_i2s(" fp=", &buff[i], ctx->cpuCtx.fp, 16U, 1U); + + i += hal_i2s("\n ip=", &buff[i], ctx->cpuCtx.ip, 16U, 1U); + i += hal_i2s(" sp=", &buff[i], ctx->cpuCtx.sp, 16U, 1U); + i += hal_i2s(" lr=", &buff[i], ctx->cpuCtx.lr, 16U, 1U); + i += hal_i2s(" pc=", &buff[i], ctx->cpuCtx.pc, 16U, 1U); + + i += hal_i2s("\npsr=", &buff[i], ctx->cpuCtx.psr, 16U, 1U); + i += hal_i2s(" dfs=", &buff[i], ctx->dfsr, 16U, 1U); + i += hal_i2s(" dfa=", &buff[i], ctx->dfar, 16U, 1U); + i += hal_i2s(" ifs=", &buff[i], ctx->ifsr, 16U, 1U); + + i += hal_i2s("\nifa=", &buff[i], ctx->ifar, 16U, 1U); buff[i++] = '\n'; diff --git a/hal/armv7r/zynqmp/interrupts.c b/hal/armv7r/zynqmp/interrupts.c index 1dea33579..5054def02 100644 --- a/hal/armv7r/zynqmp/interrupts.c +++ b/hal/armv7r/zynqmp/interrupts.c @@ -34,33 +34,33 @@ enum { /* Distributor registers */ - gicd_ctlr = 0x0U, + gicd_ctlr = 0x0, gicd_typer, gicd_iidr, - gicd_igroupr0 = 0x20U, /* 6 registers */ - gicd_isenabler0 = 0x40U, /* 6 registers */ - gicd_icenabler0 = 0x60U, /* 6 registers */ - gicd_ispendr0 = 0x80U, /* 6 registers */ - gicd_icpendr0 = 0xa0U, /* 6 registers */ - gicd_isactiver0 = 0xc0U, /* 6 registers */ - gicd_icactiver0 = 0xe0U, /* 6 registers */ - gicd_ipriorityr0 = 0x100U, /* 48 registers */ - gicd_itargetsr0 = 0x200U, /* 48 registers */ - gicd_icfgr0 = 0x300U, /* 12 registers */ - gicd_ppisr = 0x340U, + gicd_igroupr0 = 0x20, /* 6 registers */ + gicd_isenabler0 = 0x40, /* 6 registers */ + gicd_icenabler0 = 0x60, /* 6 registers */ + gicd_ispendr0 = 0x80, /* 6 registers */ + gicd_icpendr0 = 0xa0, /* 6 registers */ + gicd_isactiver0 = 0xc0, /* 6 registers */ + gicd_icactiver0 = 0xe0, /* 6 registers */ + gicd_ipriorityr0 = 0x100, /* 48 registers */ + gicd_itargetsr0 = 0x200, /* 48 registers */ + gicd_icfgr0 = 0x300, /* 12 registers */ + gicd_ppisr = 0x340, gicd_spisr0, /* 5 registers */ - gicd_sgir = 0x3c0U, - gicd_cpendsgir0 = 0x3c4U, /* 4 registers */ - gicd_spendsgir0 = 0x3c8U, /* 4 registers */ - gicd_pidr4 = 0x3f4U, /* 4 registers */ - gicd_pidr0 = 0x3f8U, /* 4 registers */ - gicd_cidr0 = 0x3fcU, /* 4 registers */ + gicd_sgir = 0x3c0, + gicd_cpendsgir0 = 0x3c4, /* 4 registers */ + gicd_spendsgir0 = 0x3c8, /* 4 registers */ + gicd_pidr4 = 0x3f4, /* 4 registers */ + gicd_pidr0 = 0x3f8, /* 4 registers */ + gicd_cidr0 = 0x3fc, /* 4 registers */ }; enum { /* CPU interface registers */ - gicc_ctlr = 0x0U, + gicc_ctlr = 0x0, gicc_pmr, gicc_bpr, gicc_iar, @@ -71,9 +71,9 @@ enum { gicc_aiar, gicc_aeoir, gicc_ahppir, - gicc_apr0 = 0x34U, - gicc_nsapr0 = 0x38U, - gicc_iidr = 0x3fU, + gicc_apr0 = 0x34, + gicc_nsapr0 = 0x38, + gicc_iidr = 0x3f, }; diff --git a/hal/armv7r/zynqmp/zynqmp_regs.h b/hal/armv7r/zynqmp/zynqmp_regs.h index 4476541f3..b30f94c1d 100644 --- a/hal/armv7r/zynqmp/zynqmp_regs.h +++ b/hal/armv7r/zynqmp/zynqmp_regs.h @@ -66,7 +66,7 @@ enum { enum { apu_err_ctrl = 0x0, - apu_isr = 0x4U, + apu_isr = 0x4, apu_imr, apu_ien, apu_ids, diff --git a/hal/armv8m/mcx/n94x/mcxn94x.c b/hal/armv8m/mcx/n94x/mcxn94x.c index b33c1ee43..30cb77e46 100644 --- a/hal/armv8m/mcx/n94x/mcxn94x.c +++ b/hal/armv8m/mcx/n94x/mcxn94x.c @@ -178,7 +178,7 @@ u64 _mcxn94x_sysconGray2Bin(u64 gray) hal_cpuDataMemoryBarrier(); ret = *(n94x_common.syscon + syscon_binarycodelsb); - ret |= ((u64)(*(n94x_common.syscon + syscon_binarycodemsb))) << 32; + ret |= (u64)(*(n94x_common.syscon + syscon_binarycodemsb)) << 32; return ret; } diff --git a/include/arch/armv7r/zynqmp/zynqmp.h b/include/arch/armv7r/zynqmp/zynqmp.h index 5a8ab1a0f..bd707e346 100644 --- a/include/arch/armv7r/zynqmp/zynqmp.h +++ b/include/arch/armv7r/zynqmp/zynqmp.h @@ -32,7 +32,7 @@ /* clang-format off */ /* Devices' clocks controllers */ enum { - pctl_devclock_lpd_usb3_dual = 0x12U, + pctl_devclock_lpd_usb3_dual = 0x12, pctl_devclock_lpd_gem0, pctl_devclock_lpd_gem1, pctl_devclock_lpd_gem2, @@ -48,8 +48,8 @@ enum { pctl_devclock_lpd_spi1, pctl_devclock_lpd_can0, pctl_devclock_lpd_can1, - pctl_devclock_lpd_cpu_r5 = 0x24U, - pctl_devclock_lpd_iou_switch = 0x27U, + pctl_devclock_lpd_cpu_r5 = 0x24, + pctl_devclock_lpd_iou_switch = 0x27, pctl_devclock_lpd_csu_pll, pctl_devclock_lpd_pcap, pctl_devclock_lpd_lpd_switch, @@ -57,36 +57,36 @@ enum { pctl_devclock_lpd_dbg_lpd, pctl_devclock_lpd_nand, pctl_devclock_lpd_lpd_dma, - pctl_devclock_lpd_pl0 = 0x30U, + pctl_devclock_lpd_pl0 = 0x30, pctl_devclock_lpd_pl1, pctl_devclock_lpd_pl2, pctl_devclock_lpd_pl3, - pctl_devclock_lpd_gem_tsu = 0x40U, + pctl_devclock_lpd_gem_tsu = 0x40, pctl_devclock_lpd_dll, pctl_devclock_lpd_pssysmon, - pctl_devclock_lpd_i2c0 = 0x48U, + pctl_devclock_lpd_i2c0 = 0x48, pctl_devclock_lpd_i2c1, pctl_devclock_lpd_timestamp, - pctl_devclock_fpd_acpu = 0x50U + 0x18U, + pctl_devclock_fpd_acpu = 0x50 + 0x18, pctl_devclock_fpd_dbg_trace, pctl_devclock_fpd_dbg_fpd, - pctl_devclock_fpd_dp_video = 0x50U + 0x1cU, + pctl_devclock_fpd_dp_video = 0x50 + 0x1c, pctl_devclock_fpd_dp_audio, - pctl_devclock_fpd_dp_stc = 0x50U + 0x1fU, + pctl_devclock_fpd_dp_stc = 0x50 + 0x1f, pctl_devclock_fpd_ddr, pctl_devclock_fpd_gpu, - pctl_devclock_fpd_sata = 0x50U + 0x28U, - pctl_devclock_fpd_pcie = 0x50U + 0x2dU, + pctl_devclock_fpd_sata = 0x50 + 0x28, + pctl_devclock_fpd_pcie = 0x50 + 0x2d, pctl_devclock_fpd_fpd_dma, pctl_devclock_fpd_dpdma, pctl_devclock_fpd_topsw_main, pctl_devclock_fpd_topsw_lsbus, - pctl_devclock_fpd_dbg_tstmp = 0x50U + 0x3eU, + pctl_devclock_fpd_dbg_tstmp = 0x50 + 0x3e, }; /* Devices' reset controllers */ enum { - pctl_devreset_lpd_gem0 = 0x0UL, pctl_devreset_lpd_gem1, pctl_devreset_lpd_gem2, pctl_devreset_lpd_gem3, pctl_devreset_lpd_qspi, + pctl_devreset_lpd_gem0 = 0x0, pctl_devreset_lpd_gem1, pctl_devreset_lpd_gem2, pctl_devreset_lpd_gem3, pctl_devreset_lpd_qspi, pctl_devreset_lpd_uart0, pctl_devreset_lpd_uart1, pctl_devreset_lpd_spi0, pctl_devreset_lpd_spi1, pctl_devreset_lpd_sdio0, pctl_devreset_lpd_sdio1, pctl_devreset_lpd_can0, pctl_devreset_lpd_can1, pctl_devreset_lpd_i2c0, pctl_devreset_lpd_i2c1, pctl_devreset_lpd_ttc0, pctl_devreset_lpd_ttc1, pctl_devreset_lpd_ttc2, pctl_devreset_lpd_ttc3, pctl_devreset_lpd_swdt, diff --git a/log/log.c b/log/log.c index 1a96eb06f..c09b91a71 100644 --- a/log/log.c +++ b/log/log.c @@ -139,7 +139,7 @@ static void _log_msgRespond(log_reader_t *r, ssize_t err) msg.o.size = rmsg->osize; msg.o.err = err; - (void)proc_respond(rmsg->oid.port, &msg, (int)rmsg->rid); + (void)proc_respond(rmsg->oid.port, &msg, (msg_rid_t)rmsg->rid); vm_kfree(rmsg); } diff --git a/posix/posix.c b/posix/posix.c index db09d463b..06b2b5036 100644 --- a/posix/posix.c +++ b/posix/posix.c @@ -113,7 +113,7 @@ int posix_fileDeref(open_file_t *f) (void)proc_lockSet(&f->lock); --f->refs; if (f->refs == 0U) { - if (f->type == (char)ftUnixSocket) { + if (f->type == ftUnixSocket) { err = unix_close(f->oid.id); } else { @@ -376,7 +376,7 @@ int posix_clone(int ppid) (void)proc_lockInit(&f->lock, &proc_lockAttrDefault, "posix.file"); f->refs = 1; f->offset = 0; - f->type = (char)ftTty; + f->type = ftTty; p->fds[i].flags = 0; hal_memcpy(&f->oid, &console, sizeof(oid_t)); } @@ -562,9 +562,9 @@ int posix_open(const char *filename, int oflag, char *ustack) open_file_t *f; mode_t mode; - hal_memset(&pipesrv, 0xff, sizeof(oid_t)); - - (void)proc_lookup("/dev/posix/pipes", NULL, &pipesrv); + if (proc_lookup("/dev/posix/pipes", NULL, &pipesrv) < 0) { + hal_memset(&pipesrv, 0xff, sizeof(oid_t)); + } p = pinfo_find(process_getPid(proc_current()->process)); if (p == NULL) { @@ -639,13 +639,13 @@ int posix_open(const char *filename, int oflag, char *ustack) /* TODO: check for other types */ if (oid.port == US_PORT) { - f->type = (char)ftUnixSocket; + f->type = ftUnixSocket; } else if (oid.port == pipesrv.port) { - f->type = (char)ftPipe; + f->type = ftPipe; } else { - f->type = (char)ftRegular; + f->type = ftRegular; } if (((unsigned int)oflag & O_APPEND) != 0U) { @@ -748,7 +748,7 @@ ssize_t posix_read(int fildes, void *buf, size_t nbyte, off_t offset) status = f->status; (void)proc_lockClear(&f->lock); - if (f->type == (char)ftUnixSocket) { + if (f->type == ftUnixSocket) { rcnt = unix_recvfrom(f->oid.id, buf, nbyte, 0, NULL, NULL); } else { @@ -800,7 +800,7 @@ ssize_t posix_write(int fildes, void *buf, size_t nbyte, off_t offset) status = f->status; (void)proc_lockClear(&f->lock); - if (f->type == (char)ftUnixSocket) { + if (f->type == ftUnixSocket) { rcnt = unix_sendto(f->oid.id, buf, nbyte, 0, NULL, 0); } else { @@ -1021,7 +1021,7 @@ int posix_pipe(int fildes[2]) hal_memcpy(&fo->oid, &oid, sizeof(oid)); fo->refs = 1; fo->offset = 0; - fo->type = (char)ftPipe; + fo->type = ftPipe; fo->status = O_RDONLY; p->fds[fildes[1]].file = fi; @@ -1029,7 +1029,7 @@ int posix_pipe(int fildes[2]) hal_memcpy(&fi->oid, &oid, sizeof(oid)); fi->refs = 1; fi->offset = 0; - fi->type = (char)ftPipe; + fi->type = ftPipe; fi->status = O_WRONLY; (void)proc_lockClear(&p->lock); @@ -1308,7 +1308,7 @@ int posix_fstat(int fd, struct stat *buf) buf->st_ino = f->ln.id; /* FIXME */ buf->st_rdev = (int)f->oid.port; - if (f->type == (char)ftRegular) { + if (f->type == ftRegular) { msg.type = mtGetAttrAll; hal_memcpy(&msg.oid, &f->oid, sizeof(oid_t)); msg.o.data = &attrs; @@ -1391,7 +1391,7 @@ int posix_fstat(int fd, struct stat *buf) } while (0); } else { - switch ((int)f->type) { + switch (f->type) { case ftRegular: break; case ftPipe: @@ -1545,7 +1545,7 @@ static int posix_fcntlSetFl(int fd, int val) err = posix_getOpenFile(fd, &f); if (err == 0) { - switch ((int)f->type) { + switch (f->type) { case ftInetSocket: err = inet_setfl(f->oid.port, val); break; @@ -1571,7 +1571,7 @@ static int posix_fcntlGetFl(int fd) err = posix_getOpenFile(fd, &f); if (err == 0) { - switch ((int)f->type) { + switch (f->type) { case ftInetSocket: err = inet_getfl(f->oid.port); break; @@ -1787,7 +1787,7 @@ int posix_socket(int domain, int type, int protocol) case AF_UNIX: err = unix_socket(domain, type, protocol); if (err >= 0) { - p->fds[fd].file->type = (char)ftUnixSocket; + p->fds[fd].file->type = ftUnixSocket; p->fds[fd].file->oid.port = US_PORT; p->fds[fd].file->oid.id = (unsigned int)err; } @@ -1798,7 +1798,7 @@ int posix_socket(int domain, int type, int protocol) case AF_PACKET: err = inet_socket(domain, type, protocol); if (err >= 0) { - p->fds[fd].file->type = (char)ftInetSocket; + p->fds[fd].file->type = ftInetSocket; p->fds[fd].file->oid.port = (unsigned int)err; p->fds[fd].file->oid.id = 0U; } @@ -1854,8 +1854,8 @@ int posix_socketpair(int domain, int type, int protocol, int sv[2]) err = unix_socketpair(domain, type, protocol, id); if (err == 0) { - p->fds[sv[0]].file->type = (char)ftUnixSocket; - p->fds[sv[1]].file->type = (char)ftUnixSocket; + p->fds[sv[0]].file->type = ftUnixSocket; + p->fds[sv[1]].file->type = ftUnixSocket; p->fds[sv[0]].file->oid.port = US_PORT; p->fds[sv[1]].file->oid.port = US_PORT; p->fds[sv[0]].file->oid.id = (id_t)id[0]; @@ -1897,11 +1897,11 @@ int posix_accept4(int socket, struct sockaddr *address, socklen_t *address_len, err = posix_getOpenFile(socket, &f); if (err == 0) { - switch ((int)f->type) { + switch (f->type) { case ftInetSocket: err = inet_accept4(f->oid.port, address, address_len, (unsigned int)flags); if (err >= 0) { - p->fds[fd].file->type = (char)ftInetSocket; + p->fds[fd].file->type = ftInetSocket; p->fds[fd].file->oid.port = (unsigned int)err; p->fds[fd].file->oid.id = 0; } @@ -1909,7 +1909,7 @@ int posix_accept4(int socket, struct sockaddr *address, socklen_t *address_len, case ftUnixSocket: err = unix_accept4(f->oid.id, address, address_len, (unsigned int)flags); if (err >= 0) { - p->fds[fd].file->type = (char)ftUnixSocket; + p->fds[fd].file->type = ftUnixSocket; p->fds[fd].file->oid.port = US_PORT; p->fds[fd].file->oid.id = (unsigned int)err; } @@ -1952,7 +1952,7 @@ int posix_bind(int socket, const struct sockaddr *address, socklen_t address_len err = posix_getOpenFile(socket, &f); if (err == 0) { - switch ((int)f->type) { + switch (f->type) { case ftInetSocket: err = inet_bind(f->oid.port, address, address_len); break; @@ -1980,7 +1980,7 @@ int posix_connect(int socket, const struct sockaddr *address, socklen_t address_ err = posix_getOpenFile(socket, &f); if (err == 0) { - switch ((int)f->type) { + switch (f->type) { case ftInetSocket: err = inet_connect(f->oid.port, address, address_len); break; @@ -2037,7 +2037,7 @@ int posix_getpeername(int socket, struct sockaddr *address, socklen_t *address_l err = posix_getOpenFile(socket, &f); if (err == 0) { - switch ((int)f->type) { + switch (f->type) { case ftInetSocket: err = inet_getpeername(f->oid.port, address, address_len); break; @@ -2065,7 +2065,7 @@ int posix_getsockname(int socket, struct sockaddr *address, socklen_t *address_l err = posix_getOpenFile(socket, &f); if (err == 0) { - switch ((int)f->type) { + switch (f->type) { case ftInetSocket: err = inet_getsockname(f->oid.port, address, address_len); break; @@ -2093,7 +2093,7 @@ int posix_getsockopt(int socket, int level, int optname, void *optval, socklen_t err = posix_getOpenFile(socket, &f); if (err == 0) { - switch ((int)f->type) { + switch (f->type) { case ftInetSocket: err = inet_getsockopt(f->oid.port, level, optname, optval, optlen); break; @@ -2121,7 +2121,7 @@ int posix_listen(int socket, int backlog) err = posix_getOpenFile(socket, &f); if (err == 0) { - switch ((int)f->type) { + switch (f->type) { case ftInetSocket: err = inet_listen(f->oid.port, backlog); break; @@ -2149,7 +2149,7 @@ ssize_t posix_recvfrom(int socket, void *message, size_t length, int flags, stru err = posix_getOpenFile(socket, &f); if (err == 0) { - switch ((int)f->type) { + switch (f->type) { case ftInetSocket: err = inet_recvfrom(f->oid.port, message, length, (unsigned int)flags, src_addr, src_len); break; @@ -2177,7 +2177,7 @@ ssize_t posix_sendto(int socket, const void *message, size_t length, int flags, err = posix_getOpenFile(socket, &f); if (err == 0) { - switch ((int)f->type) { + switch (f->type) { case ftInetSocket: err = inet_sendto(f->oid.port, message, length, (unsigned int)flags, dest_addr, dest_len); break; @@ -2205,7 +2205,7 @@ ssize_t posix_recvmsg(int socket, struct msghdr *msg, int flags) err = posix_getOpenFile(socket, &f); if (err == 0) { - switch ((int)f->type) { + switch (f->type) { case ftInetSocket: err = inet_recvmsg(f->oid.port, msg, (unsigned int)flags); break; @@ -2233,7 +2233,7 @@ ssize_t posix_sendmsg(int socket, const struct msghdr *msg, int flags) err = posix_getOpenFile(socket, &f); if (err == 0) { - switch ((int)f->type) { + switch (f->type) { case ftInetSocket: err = inet_sendmsg(f->oid.port, msg, (unsigned int)flags); break; @@ -2261,7 +2261,7 @@ int posix_shutdown(int socket, int how) err = posix_getOpenFile(socket, &f); if (err == 0) { - switch ((int)f->type) { + switch (f->type) { case ftInetSocket: err = inet_shutdown(f->oid.port, how); break; @@ -2302,7 +2302,7 @@ int posix_setsockopt(int socket, int level, int optname, const void *optval, soc err = posix_getOpenFile(socket, &f); if (err == 0) { - switch ((int)f->type) { + switch (f->type) { case ftInetSocket: err = inet_setsockopt(f->oid.port, level, optname, optval, optlen); break; @@ -2383,7 +2383,7 @@ static int do_poll_iteration(struct pollfd *fds, nfds_t nfds) hal_memcpy(&msg.oid, &f->oid, sizeof(oid_t)); (void)posix_fileDeref(f); - if (f->type == (char)ftUnixSocket) { + if (f->type == ftUnixSocket) { err = unix_poll((unsigned int)msg.oid.id, (unsigned short)fds[i].events); } else { diff --git a/posix/posix_private.h b/posix/posix_private.h index 6f283ff59..58a1697c2 100644 --- a/posix/posix_private.h +++ b/posix/posix_private.h @@ -82,7 +82,7 @@ enum { pxBufferedPipe, pxPTY }; -#define F_SEEKABLE(type) ((type) == (char)ftRegular) +#define F_SEEKABLE(type) ((type) == ftRegular) typedef struct { @@ -92,7 +92,7 @@ typedef struct { off_t offset; unsigned status; lock_t lock; - char type; + int type; } open_file_t; From 29db86cb9f1eeb8aefb6d2999cc83effc3129581 Mon Sep 17 00:00:00 2001 From: Bartlomiej Paczek Date: Fri, 17 Oct 2025 09:00:09 +0200 Subject: [PATCH 09/13] MISRA: CI test --- .github/workflows/ci.yml | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 10af05b16..31c0612a6 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -6,7 +6,7 @@ on: push: branches: - master - - 'feature/*' + - 'bpaczek/*' pull_request: branches: - master @@ -14,8 +14,7 @@ on: jobs: call-ci: - uses: phoenix-rtos/phoenix-rtos-project/.github/workflows/ci-submodule.yml@master + uses: bartekpaczek/phoenix-rtos-project-fork/.github/workflows/ci-submodule.yml@bpaczek/misra-ci secrets: inherit with: build_params: all tests - nightly: true From 7206442d3200cd98e2e770732af74bef1a580f9e Mon Sep 17 00:00:00 2001 From: Bartlomiej Paczek Date: Fri, 17 Oct 2025 09:15:36 +0200 Subject: [PATCH 10/13] MISRA: CI test --- .github/workflows/ci.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 31c0612a6..679451a06 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -12,6 +12,7 @@ on: - master - 'feature/*' + jobs: call-ci: uses: bartekpaczek/phoenix-rtos-project-fork/.github/workflows/ci-submodule.yml@bpaczek/misra-ci From e410ecf2df80513619ea51d92ccc28cd8f23a38e Mon Sep 17 00:00:00 2001 From: Bartlomiej Paczek Date: Fri, 17 Oct 2025 10:43:46 +0200 Subject: [PATCH 11/13] MISRA: Using ci-submodule-misra --- .github/workflows/ci.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 679451a06..8956a8011 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -15,7 +15,7 @@ on: jobs: call-ci: - uses: bartekpaczek/phoenix-rtos-project-fork/.github/workflows/ci-submodule.yml@bpaczek/misra-ci + uses: bartekpaczek/phoenix-rtos-project-fork/.github/workflows/ci-submodule-misra.yml@bpaczek/misra-ci secrets: inherit with: build_params: all tests From fffb682cadf85af394f417ee245c681d5344c0e3 Mon Sep 17 00:00:00 2001 From: Bartlomiej Paczek Date: Fri, 17 Oct 2025 13:37:54 +0200 Subject: [PATCH 12/13] MISRA: changing CI --- .github/workflows/ci.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 8956a8011..679451a06 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -15,7 +15,7 @@ on: jobs: call-ci: - uses: bartekpaczek/phoenix-rtos-project-fork/.github/workflows/ci-submodule-misra.yml@bpaczek/misra-ci + uses: bartekpaczek/phoenix-rtos-project-fork/.github/workflows/ci-submodule.yml@bpaczek/misra-ci secrets: inherit with: build_params: all tests From 12a81746d420fdb004ea46e36a8a53c462381e45 Mon Sep 17 00:00:00 2001 From: Bartlomiej Paczek Date: Tue, 4 Nov 2025 08:59:24 +0100 Subject: [PATCH 13/13] test --- .github/workflows/ci.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 679451a06..833965b2e 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -11,6 +11,7 @@ on: branches: - master - 'feature/*' + - 'bpaczek/*' jobs: