From 75a6584a43a9ab4170376d31fe4041bbaaa7f547 Mon Sep 17 00:00:00 2001 From: Sebastian Huber Date: Fri, 23 Sep 2016 06:52:33 +0200 Subject: score: Fix C/C++ compatibility issue Only use CPU_Per_CPU_control if it contains at least one filed. In GNU C empty structures have a size of zero. In C++ structures have a non-zero size. In case CPU_PER_CPU_CONTROL_SIZE is defined to zero, then this structure is not used anymore. Close #2789. --- cpukit/score/cpu/arm/rtems/score/cpu.h | 4 ---- cpukit/score/cpu/bfin/rtems/score/cpu.h | 4 ---- cpukit/score/cpu/epiphany/rtems/score/cpu.h | 3 --- cpukit/score/cpu/i386/rtems/score/cpu.h | 4 ---- cpukit/score/cpu/lm32/rtems/score/cpu.h | 4 ---- cpukit/score/cpu/m32c/rtems/score/cpu.h | 4 ---- cpukit/score/cpu/m68k/rtems/score/cpu.h | 4 ---- cpukit/score/cpu/mips/rtems/score/cpu.h | 4 ---- cpukit/score/cpu/moxie/rtems/score/cpu.h | 4 ---- cpukit/score/cpu/nios2/rtems/score/cpu.h | 4 ---- cpukit/score/cpu/no_cpu/rtems/score/cpu.h | 6 +++++- cpukit/score/cpu/or1k/rtems/score/cpu.h | 3 --- cpukit/score/cpu/powerpc/rtems/score/cpu.h | 4 ---- cpukit/score/cpu/sh/rtems/score/cpu.h | 4 ---- cpukit/score/cpu/sparc64/rtems/score/cpu.h | 4 ---- cpukit/score/cpu/v850/rtems/score/cpu.h | 4 ---- cpukit/score/include/rtems/score/percpu.h | 10 ++++++---- cpukit/score/src/percpuasm.c | 10 ++++++---- 18 files changed, 17 insertions(+), 67 deletions(-) (limited to 'cpukit') diff --git a/cpukit/score/cpu/arm/rtems/score/cpu.h b/cpukit/score/cpu/arm/rtems/score/cpu.h index 6ed6ef9a1f..6404518d0b 100644 --- a/cpukit/score/cpu/arm/rtems/score/cpu.h +++ b/cpukit/score/cpu/arm/rtems/score/cpu.h @@ -241,10 +241,6 @@ extern "C" { */ /**@{**/ -typedef struct { - /* There is no CPU specific per-CPU state */ -} CPU_Per_CPU_control; - typedef struct { #if defined(ARM_MULTILIB_ARCH_V4) uint32_t register_cpsr; diff --git a/cpukit/score/cpu/bfin/rtems/score/cpu.h b/cpukit/score/cpu/bfin/rtems/score/cpu.h index 52fb3f8a5e..84dddb8915 100644 --- a/cpukit/score/cpu/bfin/rtems/score/cpu.h +++ b/cpukit/score/cpu/bfin/rtems/score/cpu.h @@ -388,10 +388,6 @@ extern "C" { #ifndef ASM -typedef struct { - /* There is no CPU specific per-CPU state */ -} CPU_Per_CPU_control; - /** * @defgroup CPUContext Processor Dependent Context Management * diff --git a/cpukit/score/cpu/epiphany/rtems/score/cpu.h b/cpukit/score/cpu/epiphany/rtems/score/cpu.h index fb5e6b2966..aa89d2da5b 100644 --- a/cpukit/score/cpu/epiphany/rtems/score/cpu.h +++ b/cpukit/score/cpu/epiphany/rtems/score/cpu.h @@ -838,9 +838,6 @@ void _CPU_Context_Initialize( #define CPU_TIMESTAMP_USE_INT64 TRUE #define CPU_TIMESTAMP_USE_INT64_INLINE FALSE -typedef struct { -/* There is no CPU specific per-CPU state */ -} CPU_Per_CPU_control; #endif /* ASM */ /** diff --git a/cpukit/score/cpu/i386/rtems/score/cpu.h b/cpukit/score/cpu/i386/rtems/score/cpu.h index 96cea5a207..6c3b44109b 100644 --- a/cpukit/score/cpu/i386/rtems/score/cpu.h +++ b/cpukit/score/cpu/i386/rtems/score/cpu.h @@ -142,10 +142,6 @@ extern "C" { #ifndef ASM -typedef struct { - /* There is no CPU specific per-CPU state */ -} CPU_Per_CPU_control; - /* * Basic integer context for the i386 family. */ diff --git a/cpukit/score/cpu/lm32/rtems/score/cpu.h b/cpukit/score/cpu/lm32/rtems/score/cpu.h index 4cd07ba7bb..32dedbe19a 100644 --- a/cpukit/score/cpu/lm32/rtems/score/cpu.h +++ b/cpukit/score/cpu/lm32/rtems/score/cpu.h @@ -380,10 +380,6 @@ extern "C" { /* may need to put some structures here. */ -typedef struct { - /* There is no CPU specific per-CPU state */ -} CPU_Per_CPU_control; - /** * @defgroup CPUContext Processor Dependent Context Management * diff --git a/cpukit/score/cpu/m32c/rtems/score/cpu.h b/cpukit/score/cpu/m32c/rtems/score/cpu.h index 6ca79729c6..bd5fdfe1cb 100644 --- a/cpukit/score/cpu/m32c/rtems/score/cpu.h +++ b/cpukit/score/cpu/m32c/rtems/score/cpu.h @@ -403,10 +403,6 @@ extern "C" { /* may need to put some structures here. */ -typedef struct { - /* There is no CPU specific per-CPU state */ -} CPU_Per_CPU_control; - /** * @defgroup CPUContext Processor Dependent Context Management * diff --git a/cpukit/score/cpu/m68k/rtems/score/cpu.h b/cpukit/score/cpu/m68k/rtems/score/cpu.h index 913bb78a71..4f81463efd 100644 --- a/cpukit/score/cpu/m68k/rtems/score/cpu.h +++ b/cpukit/score/cpu/m68k/rtems/score/cpu.h @@ -125,10 +125,6 @@ extern "C" { /* structures */ -typedef struct { - /* There is no CPU specific per-CPU state */ -} CPU_Per_CPU_control; - /* * Basic integer context for the m68k family. */ diff --git a/cpukit/score/cpu/mips/rtems/score/cpu.h b/cpukit/score/cpu/mips/rtems/score/cpu.h index 4e426f8bcc..1211e3ca4b 100644 --- a/cpukit/score/cpu/mips/rtems/score/cpu.h +++ b/cpukit/score/cpu/mips/rtems/score/cpu.h @@ -383,10 +383,6 @@ extern "C" { #ifndef ASM -typedef struct { - /* There is no CPU specific per-CPU state */ -} CPU_Per_CPU_control; - /* WARNING: If this structure is modified, the constants in cpu.h must be updated. */ #if (__mips == 1) || (__mips == 32) #define __MIPS_REGISTER_TYPE uint32_t diff --git a/cpukit/score/cpu/moxie/rtems/score/cpu.h b/cpukit/score/cpu/moxie/rtems/score/cpu.h index 3422d0205e..7e549ae047 100644 --- a/cpukit/score/cpu/moxie/rtems/score/cpu.h +++ b/cpukit/score/cpu/moxie/rtems/score/cpu.h @@ -319,10 +319,6 @@ extern "C" { /* may need to put some structures here. */ -typedef struct { - /* There is no CPU specific per-CPU state */ -} CPU_Per_CPU_control; - /* * Contexts * diff --git a/cpukit/score/cpu/nios2/rtems/score/cpu.h b/cpukit/score/cpu/nios2/rtems/score/cpu.h index d9a7bbdf53..6b6f1cd96b 100644 --- a/cpukit/score/cpu/nios2/rtems/score/cpu.h +++ b/cpukit/score/cpu/nios2/rtems/score/cpu.h @@ -111,10 +111,6 @@ extern "C" { #ifndef ASM -typedef struct { - /* There is no CPU specific per-CPU state */ -} CPU_Per_CPU_control; - /** * @brief Thread register context. * diff --git a/cpukit/score/cpu/no_cpu/rtems/score/cpu.h b/cpukit/score/cpu/no_cpu/rtems/score/cpu.h index f556087f25..2f507bfb95 100644 --- a/cpukit/score/cpu/no_cpu/rtems/score/cpu.h +++ b/cpukit/score/cpu/no_cpu/rtems/score/cpu.h @@ -478,7 +478,11 @@ extern "C" { * @brief The CPU specific per-CPU control. * * The CPU port can place here all state information that must be available and - * maintained for each CPU in the system. + * maintained for each processor in the system. This structure must contain at + * least one field for C/C++ compatibility. In GNU C empty structures have a + * size of zero. In C++ structures have a non-zero size. In case + * CPU_PER_CPU_CONTROL_SIZE is defined to zero, then this structure is not + * used. */ typedef struct { /* CPU specific per-CPU state */ diff --git a/cpukit/score/cpu/or1k/rtems/score/cpu.h b/cpukit/score/cpu/or1k/rtems/score/cpu.h index 21cbb6d5ce..fb809f7f8d 100644 --- a/cpukit/score/cpu/or1k/rtems/score/cpu.h +++ b/cpukit/score/cpu/or1k/rtems/score/cpu.h @@ -818,9 +818,6 @@ void _CPU_Context_Initialize( #define CPU_TIMESTAMP_USE_INT64 TRUE #define CPU_TIMESTAMP_USE_INT64_INLINE FALSE -typedef struct { -/* There is no CPU specific per-CPU state */ -} CPU_Per_CPU_control; #endif /* ASM */ #define CPU_SIZEOF_POINTER 4 diff --git a/cpukit/score/cpu/powerpc/rtems/score/cpu.h b/cpukit/score/cpu/powerpc/rtems/score/cpu.h index 7fef878599..9cc41055a8 100644 --- a/cpukit/score/cpu/powerpc/rtems/score/cpu.h +++ b/cpukit/score/cpu/powerpc/rtems/score/cpu.h @@ -247,10 +247,6 @@ extern "C" { #ifndef ASM -typedef struct { - /* There is no CPU specific per-CPU state */ -} CPU_Per_CPU_control; - /* * Non-volatile context according to E500ABIUG, EABI and 32-bit TLS (according * to "Power Architecture 32-bit Application Binary Interface Supplement 1.0 - diff --git a/cpukit/score/cpu/sh/rtems/score/cpu.h b/cpukit/score/cpu/sh/rtems/score/cpu.h index 76220f7215..84f5fbc1ef 100644 --- a/cpukit/score/cpu/sh/rtems/score/cpu.h +++ b/cpukit/score/cpu/sh/rtems/score/cpu.h @@ -285,10 +285,6 @@ extern "C" { /* may need to put some structures here. */ -typedef struct { - /* There is no CPU specific per-CPU state */ -} CPU_Per_CPU_control; - /* * Contexts * diff --git a/cpukit/score/cpu/sparc64/rtems/score/cpu.h b/cpukit/score/cpu/sparc64/rtems/score/cpu.h index 37e8325f97..73c71241c9 100644 --- a/cpukit/score/cpu/sparc64/rtems/score/cpu.h +++ b/cpukit/score/cpu/sparc64/rtems/score/cpu.h @@ -217,10 +217,6 @@ extern "C" { #ifndef ASM -typedef struct { - /* There is no CPU specific per-CPU state */ -} CPU_Per_CPU_control; - typedef struct { uint64_t l0; uint64_t l1; diff --git a/cpukit/score/cpu/v850/rtems/score/cpu.h b/cpukit/score/cpu/v850/rtems/score/cpu.h index 97259009d1..0cda4e58f1 100644 --- a/cpukit/score/cpu/v850/rtems/score/cpu.h +++ b/cpukit/score/cpu/v850/rtems/score/cpu.h @@ -373,10 +373,6 @@ extern "C" { #define CPU_PER_CPU_CONTROL_SIZE 0 -typedef struct { - /* There is no CPU specific per-CPU state */ -} CPU_Per_CPU_control; - /** * @defgroup CPUContext Processor Dependent Context Management * diff --git a/cpukit/score/include/rtems/score/percpu.h b/cpukit/score/include/rtems/score/percpu.h index 9ce68ef7b1..5ab2567a2b 100644 --- a/cpukit/score/include/rtems/score/percpu.h +++ b/cpukit/score/include/rtems/score/percpu.h @@ -231,10 +231,12 @@ typedef struct { * This structure is used to hold per core state information. */ typedef struct Per_CPU_Control { - /** - * @brief CPU port specific control. - */ - CPU_Per_CPU_control cpu_per_cpu; + #if CPU_PER_CPU_CONTROL_SIZE > 0 + /** + * @brief CPU port specific control. + */ + CPU_Per_CPU_control cpu_per_cpu; + #endif #if (CPU_ALLOCATE_INTERRUPT_STACK == TRUE) || \ (CPU_HAS_SOFTWARE_INTERRUPT_STACK == TRUE) diff --git a/cpukit/score/src/percpuasm.c b/cpukit/score/src/percpuasm.c index 15b49c72e1..53e6326abd 100644 --- a/cpukit/score/src/percpuasm.c +++ b/cpukit/score/src/percpuasm.c @@ -64,10 +64,12 @@ RTEMS_STATIC_ASSERT( ); #endif -RTEMS_STATIC_ASSERT( - sizeof( CPU_Per_CPU_control ) == CPU_PER_CPU_CONTROL_SIZE, - CPU_PER_CPU_CONTROL_SIZE -); +#if CPU_PER_CPU_CONTROL_SIZE > 0 + RTEMS_STATIC_ASSERT( + sizeof( CPU_Per_CPU_control ) == CPU_PER_CPU_CONTROL_SIZE, + CPU_PER_CPU_CONTROL_SIZE + ); +#endif #if defined( RTEMS_SMP ) RTEMS_STATIC_ASSERT( -- cgit v1.2.3