Skip to content

Commit f052237

Browse files
Add a project for static analysis (#195)
* Add entropy * remove warning * Remove unwanted changes * Update tcp_mem_stats.c * Add Coverity * Remove unused files * Add some features * clean up * More clean up * Unwanted additions removal * Clean up * Add 32-bit compile option * Update after comments * Uncrustify
1 parent 69b69d3 commit f052237

File tree

7 files changed

+831
-0
lines changed

7 files changed

+831
-0
lines changed

test/Coverity/CMakeLists.txt

Lines changed: 61 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,61 @@
1+
# Minimum required version of CMake
2+
cmake_minimum_required ( VERSION 3.13.0 )
3+
4+
# Name of the project
5+
project ( "FreeRTOS+TCP Static analysis"
6+
VERSION 1.0.0
7+
LANGUAGES C )
8+
9+
# Allow the project to be organized into folders.
10+
set_property( GLOBAL PROPERTY USE_FOLDERS ON )
11+
12+
# Use C90.
13+
set( CMAKE_C_STANDARD 90 )
14+
set( CMAKE_C_STANDARD_REQUIRED ON )
15+
16+
# Do not allow in-source build.
17+
if( ${PROJECT_SOURCE_DIR} STREQUAL ${PROJECT_BINARY_DIR} )
18+
message( FATAL_ERROR "In-source build is not allowed. Please build in a separate directory, such as ${PROJECT_SOURCE_DIR}/build." )
19+
endif()
20+
21+
# Set global path variables.
22+
get_filename_component(__MODULE_ROOT_DIR "${CMAKE_CURRENT_LIST_DIR}/../.." ABSOLUTE)
23+
set( MODULE_ROOT_DIR ${__MODULE_ROOT_DIR} CACHE INTERNAL "FreeRTOS-Plus-TCP repository root." )
24+
25+
# Set the kernel directory
26+
set( KERNEL_DIRECTORY ${MODULE_ROOT_DIR}/test/FreeRTOS-Kernel )
27+
28+
# If the kernel is not submoduled, download it.
29+
if( NOT EXISTS ${KERNEL_DIRECTORY}/include )
30+
# Inform the user of the actions
31+
message( STATUS "FreeRTOS-Kernel is required for this build. Submoduling it..." )
32+
execute_process( COMMAND git submodule update --init --checkout ${KERNEL_DIRECTORY}
33+
WORKING_DIRECTORY ${MODULE_ROOT_DIR} )
34+
endif()
35+
36+
# Add kernel sources to a list
37+
file( GLOB KERNEL_SOURCES
38+
${KERNEL_DIRECTORY}/*.c )
39+
40+
# Add TCP sources to a list
41+
file( GLOB TCP_SOURCES
42+
${MODULE_ROOT_DIR}/*.c )
43+
44+
# A better way would be to create a library such that all other dependencies are
45+
# ignored by the static analysis tool. But, since +TCP is very closely linked
46+
# with the FreeRTOS-Kernel, an executable had to be created.
47+
48+
# Add the executable for static analysis
49+
add_executable( StaticAnalysis ${TCP_SOURCES}
50+
${KERNEL_SOURCES}
51+
${CMAKE_CURRENT_LIST_DIR}/Portable.c
52+
${MODULE_ROOT_DIR}/portable/BufferManagement/BufferAllocation_2.c )
53+
54+
# Link the include directories with the target
55+
target_include_directories( StaticAnalysis
56+
PUBLIC "${KERNEL_DIRECTORY}/include"
57+
PUBLIC "${MODULE_ROOT_DIR}/test/Coverity/ConfigFiles"
58+
PUBLIC "${MODULE_ROOT_DIR}/include" )
59+
60+
# Uncomment the below line if the desired platform is 32-bit
61+
# set_target_properties( StaticAnalysis PROPERTIES COMPILE_FLAGS "-m32" LINK_FLAGS "-m32" )
Lines changed: 119 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,119 @@
1+
/*
2+
* FreeRTOS Kernel V10.3.0
3+
* Copyright (C) 2020 Amazon.com, Inc. or its affiliates. All Rights Reserved.
4+
*
5+
* Permission is hereby granted, free of charge, to any person obtaining a copy of
6+
* this software and associated documentation files (the "Software"), to deal in
7+
* the Software without restriction, including without limitation the rights to
8+
* use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
9+
* the Software, and to permit persons to whom the Software is furnished to do so,
10+
* subject to the following conditions:
11+
*
12+
* The above copyright notice and this permission notice shall be included in all
13+
* copies or substantial portions of the Software.
14+
*
15+
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16+
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
17+
* FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
18+
* COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
19+
* IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
20+
* CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
21+
*
22+
* http://www.FreeRTOS.org
23+
* http://aws.amazon.com/freertos
24+
*
25+
* 1 tab == 4 spaces!
26+
*/
27+
28+
29+
#ifndef FREERTOS_CONFIG_H
30+
#define FREERTOS_CONFIG_H
31+
32+
/*-----------------------------------------------------------
33+
* Application specific definitions.
34+
*
35+
* These definitions should be adjusted for your particular hardware and
36+
* application requirements.
37+
*
38+
* THESE PARAMETERS ARE DESCRIBED WITHIN THE 'CONFIGURATION' SECTION OF THE
39+
* FreeRTOS API DOCUMENTATION AVAILABLE ON THE FreeRTOS.org WEB SITE. See
40+
* http://www.freertos.org/a00110.html
41+
*----------------------------------------------------------*/
42+
43+
#define configUSE_PREEMPTION 1
44+
#define configUSE_PORT_OPTIMISED_TASK_SELECTION 1
45+
#define configUSE_IDLE_HOOK 1
46+
#define configUSE_TICK_HOOK 1
47+
#define configUSE_DAEMON_TASK_STARTUP_HOOK 1
48+
#define configTICK_RATE_HZ ( 1000 ) /* In this non-real time simulated environment the tick frequency has to be at least a multiple of the Win32 tick frequency, and therefore very slow. */
49+
#define configMINIMAL_STACK_SIZE ( ( unsigned short ) 70 ) /* In this simulated case, the stack only has to hold one small structure as the real stack is part of the win32 thread. */
50+
#define configTOTAL_HEAP_SIZE ( ( size_t ) ( 52 * 1024 ) )
51+
#define configMAX_TASK_NAME_LEN ( 12 )
52+
#define configUSE_TRACE_FACILITY 1
53+
#define configUSE_16_BIT_TICKS 0
54+
#define configIDLE_SHOULD_YIELD 1
55+
#define configUSE_MUTEXES 1
56+
#define configCHECK_FOR_STACK_OVERFLOW 0
57+
#define configUSE_RECURSIVE_MUTEXES 1
58+
#define configQUEUE_REGISTRY_SIZE 20
59+
#define configUSE_MALLOC_FAILED_HOOK 1
60+
#define configUSE_APPLICATION_TASK_TAG 1
61+
#define configUSE_COUNTING_SEMAPHORES 1
62+
#define configUSE_ALTERNATIVE_API 0
63+
#define configUSE_QUEUE_SETS 1
64+
#define configUSE_TASK_NOTIFICATIONS 1
65+
#define configSUPPORT_STATIC_ALLOCATION 1
66+
#define configINITIAL_TICK_COUNT ( ( TickType_t ) 0 )
67+
68+
/* Software timer related configuration options. */
69+
#define configUSE_TIMERS 1
70+
#define configTIMER_TASK_PRIORITY ( configMAX_PRIORITIES - 1 )
71+
#define configTIMER_QUEUE_LENGTH 20
72+
#define configTIMER_TASK_STACK_DEPTH ( configMINIMAL_STACK_SIZE * 2 )
73+
74+
#define configMAX_PRIORITIES ( 7 )
75+
76+
/* Run time stats gathering configuration options. */
77+
unsigned long ulGetRunTimeCounterValue( void ); /* Prototype of function that returns run time counter. */
78+
void vConfigureTimerForRunTimeStats( void ); /* Prototype of function that initialises the run time counter. */
79+
#define configGENERATE_RUN_TIME_STATS 1
80+
#define portCONFIGURE_TIMER_FOR_RUN_TIME_STATS() vConfigureTimerForRunTimeStats()
81+
#define portGET_RUN_TIME_COUNTER_VALUE() ulGetRunTimeCounterValue()
82+
83+
/* Co-routine related configuration options. */
84+
#define configUSE_CO_ROUTINES 1
85+
#define configMAX_CO_ROUTINE_PRIORITIES ( 2 )
86+
87+
/* This demo makes use of one or more example stats formatting functions. These
88+
* format the raw data provided by the uxTaskGetSystemState() function in to human
89+
* readable ASCII form. See the notes in the implementation of vTaskList() within
90+
* FreeRTOS/Source/tasks.c for limitations. */
91+
#define configUSE_STATS_FORMATTING_FUNCTIONS 1
92+
93+
/* Set the following definitions to 1 to include the API function, or zero
94+
* to exclude the API function. In most cases the linker will remove unused
95+
* functions anyway. */
96+
#define INCLUDE_vTaskPrioritySet 1
97+
#define INCLUDE_uxTaskPriorityGet 1
98+
#define INCLUDE_vTaskDelete 1
99+
#define INCLUDE_vTaskCleanUpResources 0
100+
#define INCLUDE_vTaskSuspend 1
101+
#define INCLUDE_vTaskDelayUntil 1
102+
#define INCLUDE_vTaskDelay 1
103+
#define INCLUDE_uxTaskGetStackHighWaterMark 1
104+
#define INCLUDE_xTaskGetSchedulerState 1
105+
#define INCLUDE_xTimerGetTimerDaemonTaskHandle 1
106+
#define INCLUDE_xTaskGetIdleTaskHandle 1
107+
#define INCLUDE_xTaskGetHandle 1
108+
#define INCLUDE_eTaskGetState 1
109+
#define INCLUDE_xSemaphoreGetMutexHolder 1
110+
#define INCLUDE_xTimerPendFunctionCall 1
111+
#define INCLUDE_xTaskAbortDelay 1
112+
113+
/* Config assert should be defined while developing. For the static analysis
114+
* though this should be left undefined. */
115+
#define configASSERT( x )
116+
117+
#define configINCLUDE_MESSAGE_BUFFER_AMP_DEMO 0
118+
119+
#endif /* FREERTOS_CONFIG_H */

0 commit comments

Comments
 (0)