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.
This commit is contained in:
Sebastian Huber
2016-09-23 06:52:33 +02:00
parent 35edf82463
commit 75a6584a43
18 changed files with 17 additions and 67 deletions

View File

@@ -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;

View File

@@ -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
*

View File

@@ -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 */
/**

View File

@@ -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.
*/

View File

@@ -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
*

View File

@@ -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
*

View File

@@ -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.
*/

View File

@@ -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

View File

@@ -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
*

View File

@@ -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.
*

View File

@@ -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 */

View File

@@ -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

View File

@@ -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 -

View File

@@ -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
*

View File

@@ -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;

View File

@@ -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
*

View File

@@ -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)

View File

@@ -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(