Skip to content

Conversation

@Dazza0
Copy link
Contributor

@Dazza0 Dazza0 commented Mar 10, 2023

Add ...GetStaticBuffers() Functions

Description

This PR adds ...GetStaticBuffers() functions to get pointers to the buffers used to create a particular static FreeRTOS objects (i.e., objects created using ...CreateStatic()).

These functions are helpful because some ports (such as ESP-IDF) use the ...CreateStatic() when an object needs to be allocated from special memory (i.e., not included in the regular pvPortMalloc()/vPortFree()). "Special Memory" could include things such as memory from a "fast malloc memory pool" or memory from external (i.e., off chip) RAM, and this special memory is allocated/freed using a separate API.

Currently, we need to associate the static object handles and their buffers using some sort of list. For example:

    // Create a task from special memory
    StackType_t *stack_buffer = pvPortSpecialMalloc(2048);
    StaticTask_t *task_obj = pvPortSpecialMalloc(sizeof(StaticTask_t));
    TaskHandle_t task_hdl;
    task_hdl = xTaskCreateStatic(task_func, "task", 2048, NULL, 5, stack_buffer, task_obj);
    // Associate the task_hdl with it's buffers using a linked list
    linked_list_entry_t entry = {
        .task_hdl = task_hdl,
        .stack = stack_buffer,
        .obj = task_obj,
    };
    AddToList(some_list, &entry);

    ...

    // Delete the task
    vTaskDelete(task_hdl);
    // Find the buffers associated with the task and free them
    linked_list_entry_t entry;
    FindFromList(some_list, task_hdl, &entry);
    vPortSpecialFree(entry.stack_buffer);
    vPortSpecialFree(entry.task_obj);

But having a ...GetStaticBuffers() allows us to avoid the list overhead, as we can simply call ...GetStaticBuffers() to get the associated buffers before the object is deleted. For example:

    // Create a task from special memory
    StackType_t *stack_buffer = pvPortSpecialMalloc(2048);
    StaticTask_t *task_obj = pvPortSpecialMalloc(sizeof(StaticTask_t));
    TaskHandle_t task_hdl;
    task_hdl = xTaskCreateStatic(task_func, "task", 2048, NULL, 5, stack_buffer, task_obj);

    ...

    // Get the task's buffers before deleting it
    StackType_t *stack_buffer_ret;
    StaticTask_t *task_obj_ret;
    xTaskGetStaticBuffers(task_hdl, &stack_buffer_ret, &task_obj_ret);

    // Delete the task
    vTaskDelete(task_hdl);

    // Free the buffers
    vPortSpecialFree(stack_buffer_ret);
    vPortSpecialFree(task_obj_ret);

Test Steps

Checklist:

  • I have tested my changes. No regression in existing tests.
  • I have modified and/or added unit-tests to cover the code changes in this Pull Request.

Related Issue

By submitting this pull request, I confirm that you can use, modify, copy, and redistribute this contribution, under the terms of your choice.

@Dazza0 Dazza0 requested a review from a team as a code owner March 10, 2023 11:38
@Dazza0 Dazza0 force-pushed the feature/get_static_buffers_util_funcs branch 2 times, most recently from 46d947c to 3a94c78 Compare March 10, 2023 12:00
@paulbartell
Copy link
Contributor

@Dazza0 Thanks for the contribution. The changes seem reasonable to me but I need to have a couple more people take a look at it.

Are you willing to update the unit tests to cover the new functions you've added or would you like some assistance with that?

Added various ...GetStaticBuffer() functions to get the buffers of statically
created objects.
@Dazza0 Dazza0 force-pushed the feature/get_static_buffers_util_funcs branch from 3a94c78 to ad48dec Compare March 13, 2023 06:43
@codecov
Copy link

codecov bot commented Mar 13, 2023

Codecov Report

Patch coverage: 100.00% and project coverage change: +0.12 🎉

Comparison is base (d4d5e43) 94.34% compared to head (74c633a) 94.46%.

❗ Current head 74c633a differs from pull request most recent head 3550b0d. Consider uploading reports for the commit 3550b0d to get more accurate results

Additional details and impacted files
@@            Coverage Diff             @@
##             main     #641      +/-   ##
==========================================
+ Coverage   94.34%   94.46%   +0.12%     
==========================================
  Files           6        6              
  Lines        2368     2422      +54     
  Branches      578      594      +16     
==========================================
+ Hits         2234     2288      +54     
  Misses         85       85              
  Partials       49       49              
Flag Coverage Δ
unittests 94.46% <100.00%> (+0.12%) ⬆️

Flags with carried forward coverage won't be shown. Click here to find out more.

Impacted Files Coverage Δ
event_groups.c 82.23% <100.00%> (+0.85%) ⬆️
queue.c 94.08% <100.00%> (+0.12%) ⬆️
stream_buffer.c 97.25% <100.00%> (+0.09%) ⬆️
tasks.c 94.76% <100.00%> (+0.07%) ⬆️
timers.c 100.00% <100.00%> (ø)

Help us with your feedback. Take ten seconds to tell us how you rate us. Have a feature suggestion? Share it here.

☔ View full report in Codecov by Sentry.
📢 Do you have feedback about the report comment? Let us know in this issue.

Dazza0 added a commit to Dazza0/FreeRTOS that referenced this pull request Mar 13, 2023
Add unit tests for the various ...GetStaticBuffer() functions added in
FreeRTOS/FreeRTOS-Kernel#641.
@Dazza0
Copy link
Contributor Author

Dazza0 commented Mar 13, 2023

@paulbartell I've added some unit tests to FreeRTOS/FreeRTOS#964

@paulbartell paulbartell force-pushed the feature/get_static_buffers_util_funcs branch from 0b3509a to ddeb6b5 Compare March 14, 2023 23:55
@paulbartell
Copy link
Contributor

paulbartell commented Mar 14, 2023

@Dazza0 I made a small change in xTaskGetStaticBuffers to handle the tskSTATICALLY_ALLOCATED_STACK_ONLY case.

Can you take a look at the change?

Otherwise it looks good to me.

@Dazza0
Copy link
Contributor Author

Dazza0 commented Mar 15, 2023

@paulbartell The tskSTATICALLY_ALLOCATED_STACK_ONLY changes LGTM

paulbartell
paulbartell previously approved these changes Mar 15, 2023
paulbartell added a commit to FreeRTOS/FreeRTOS that referenced this pull request Mar 20, 2023
Add unit tests for the various ...GetStaticBuffer() functions added in
FreeRTOS/FreeRTOS-Kernel#641.
---------

Co-authored-by: Paul Bartell <[email protected]>
paulbartell
paulbartell previously approved these changes Mar 21, 2023
n9wxu
n9wxu previously approved these changes Mar 22, 2023
Signed-off-by: Gaurav Aggarwal <[email protected]>
@aggarg aggarg dismissed stale reviews from n9wxu and paulbartell via 74c633a March 22, 2023 17:41
aggarg
aggarg previously approved these changes Mar 22, 2023
Signed-off-by: Gaurav Aggarwal <[email protected]>
@urutva
Copy link
Contributor

urutva commented Mar 22, 2023

This is not a comment about this PR but on the use-case described.

If a task created with xTaskCreateStatic with buffers allocated dynamically deletes itself, that can have unintended side-effect of usage of freed memory. This is because, when a task deletes itself, the task deletion is deferred to the idle task which still needs to access the TCB for cleanup activities.

Imagine a scenario, where there are two tasks Task A and Task B. Task A is created from main and Task B is created by Task A using xTaskCreateStatic with buffers allocated dynamically. When Task B deletes itself, assuming that Task A has higher priority than idle task then Task A is scheduled and if it frees up memory allocated for TCB then when idle task is scheduled, it'll access the TCB of Task B (usage of freed memory).

The use-case described works as expected if the task is not allowed to delete itself. Wondering if this should be documented?

@paulbartell paulbartell merged commit 9488ba2 into FreeRTOS:main Mar 22, 2023
This was linked to issues Mar 25, 2023
Closed
Closed
@Dazza0 Dazza0 deleted the feature/get_static_buffers_util_funcs branch April 17, 2023 06:53
espressif-bot pushed a commit to espressif/esp-idf that referenced this pull request Apr 17, 2023
This commit adds the various ...GetStaticBuffer() functions from upstream
FreeRTOS. See FreeRTOS/FreeRTOS-Kernel#641 for more
details.
aggarg added a commit to chinglee-iot/FreeRTOS-Kernel that referenced this pull request Apr 18, 2023
* Fix array-bounds compiler warning on gcc11+ in list.h (FreeRTOS#580)

listGET_OWNER_OF_NEXT_ENTRY computes `( pxConstList )->pxIndex->pxNext` after
verifying that `( pxConstList )->pxIndex` points to `xListEnd`, which due to
being a MiniListItem_t, can be shorter than a ListItem_t. Thus,
`( pxConstList )->pxIndex` is a `ListItem_t *` that extends past the end of the
`List_t` whose `xListEnd` it points to. This is fixed by accessing `pxNext`
through a `MiniListItem_t` instead.

* move the prototype for vApplicationIdleHook to task.h. (FreeRTOS#600)

Co-authored-by: pluess <[email protected]>
Co-authored-by: Gaurav-Aggarwal-AWS <[email protected]>

* Update equal priority task preemption (FreeRTOS#603)

* vTaskResume and vTaskPrioritySet don't preempt equal priority task

* Update vTaskResumeAll not to preempt task with equal priority

* Fix in xTaskResumeFromISR

* Update FreeRTOS/FreeRTOS build checks (FreeRTOS#613)

This is needed to be compatible with the refactoring done in this
PR - FreeRTOS/FreeRTOS#889

Signed-off-by: Gaurav Aggarwal <[email protected]>

Signed-off-by: Gaurav Aggarwal <[email protected]>

* Add ulTaskGetRunTimeCounter and ulTaskGetRunTimePercent (FreeRTOS#611)

Allow ulTaskGetIdleRunTimeCounter and ulTaskGetIdleRunTimePercent to be
used whenever configGENERATE_RUN_TIME_STATS is enabled, as this is the
only requirement for these functions to work.

* Fix some CMake documentation typos (FreeRTOS#616)

The quick start instructions for CMake mention the "master"
git branch which has been replaced by "main" in the current
repo.

The main CMakeLists.txt documents how to integrate a
custom port. Fix a typo in the suggested CMake code.

* Added support of 64bit events. (FreeRTOS#597)

* Added support of 64bit even

Signed-off-by: Cervenka Dusan <[email protected]>

* Added missing brackets

Signed-off-by: Cervenka Dusan <[email protected]>

* Made proper name for tick macro.

Signed-off-by: Cervenka Dusan <[email protected]>

* Improved macro evaluation

Signed-off-by: Cervenka Dusan <[email protected]>

* Fixed missed port files  + documentation

Signed-off-by: Cervenka Dusan <[email protected]>

* Changes made on PR

Signed-off-by: Cervenka Dusan <[email protected]>

* Fix macro definition.

Signed-off-by: Cervenka Dusan <[email protected]>

* Formatted code with uncrustify

Signed-off-by: Cervenka Dusan <[email protected]>

---------

Signed-off-by: Cervenka Dusan <[email protected]>

* Introduce portMEMORY_BARRIER for Microblaze port. (FreeRTOS#621)

The introduction of `portMEMORY_BARRIER` will ensure
the places in the kernel use a barrier will work.
For example, `xTaskResumeAll` has a memory barrier
to ensure its correctness when compiled with optimization
enabled. Without the barrier `xTaskResumeAll` can fail
(e.g. start reading and writing to address 0 and/or
infinite looping) when `xPendingReadyList` contains more
than one task to restore.

In `xTaskResumeAll` the compiler chooses to cache the
`pxTCB` the first time through the loop for use
in every subsequent loop. This is incorrect as the
removal of `pxTCB->xEventListItem` will actually
change the value of `pxTCB` if it was read again
at the top of the loop. The barrier forces the compiler
to read `pxTCB` again at the top of the loop.

The compiler is operating correctly. The removal
`pxTCB->xEventListItem` executes on a `List_t *`
and `ListItem_t *`.  This means that the compiler
can assume that any `MiniListItem_t` values are
unchanged by the loop (i.e. "strict-aliasing").
This allows the compiler to cache `pxTCB` as it
is obtained via a `MiniListItem_t`. This is incorrect
in this case because it is possible for a `ListItem_t *`
to actually alias a `MiniListItem_t`. This is technically
a "violation of aliasing rules" so we use the the barrier
to disable the strict-aliasing optimization in this loop.

* Do not call exit() on MSVC Port when calling vPortEndScheduler (FreeRTOS#624)

* make port exitable

* correctly set xPortRunning to False

* add suggestions from Review

Co-authored-by: Gaurav-Aggarwal-AWS <[email protected]>

* add suggestions from Review

Co-authored-by: Gaurav-Aggarwal-AWS <[email protected]>

---------

Co-authored-by: Gaurav-Aggarwal-AWS <[email protected]>

* Update PR template to include checkbox for Unit Test related changes (FreeRTOS#627)

* Fix build failure introduced in PR FreeRTOS#597 (FreeRTOS#629)

The PR FreeRTOS#597 introduced a new config option configTICK_TYPE_WIDTH_IN_BITS
which can be defined to one of the following:
* TICK_TYPE_WIDTH_16_BITS - Tick type is 16 bit wide.
* TICK_TYPE_WIDTH_32_BITS - Tick type is 32 bit wide.
* TICK_TYPE_WIDTH_64_BITS - Tick type is 64 bit wide.

Earlier we supported 16 and 32 bit width for tick type which was
controlled using the config option configUSE_16_BIT_TICKS. The PR
tried to maintain backward compatibility by honoring
configUSE_16_BIT_TICKS. The backward compatibility did not work as
expected though, as the macro configTICK_TYPE_WIDTH_IN_BITS was used
before it was defined. This PR addresses it by ensuring that the macro
configTICK_TYPE_WIDTH_IN_BITS is defined before it is used.

Testing
1. configUSE_16_BIT_TICKS is defined to 0.

Source (function xTaskIncrementTick in tasks.c):
```
const TickType_t xConstTickCount = xTickCount + ( TickType_t ) 1;
```

Assembly:
```
109e:       4b50            ldr     r3, [pc, FreeRTOS#320]  ; (11e0 <xTaskIncrementTick+0x150>)
10a0:       f8d3 4134       ldr.w   r4, [r3, FreeRTOS#308]  ; 0x134
10a4:       3401            adds    r4, #1
10a6:       f8c3 4134       str.w   r4, [r3, FreeRTOS#308]  ; 0x134
```

It is clear from assembly that the tick type is 32 bit.

2. configUSE_16_BIT_TICKS is defined to 1.

Source (function xTaskIncrementTick in tasks.c):
```
const TickType_t xConstTickCount = xTickCount + ( TickType_t ) 1;
```

Assembly:
```
10e2:       4b53            ldr     r3, [pc, FreeRTOS#332]  ; (1230 <xTaskIncrementTick+0x15c>)
10e4:       f8b3 4134       ldrh.w  r4, [r3, FreeRTOS#308]  ; 0x134
10e8:       b2a4            uxth    r4, r4
10ea:       3401            adds    r4, #1
10ec:       b2a4            uxth    r4, r4
10ee:       f8a3 4134       strh.w  r4, [r3, FreeRTOS#308]  ; 0x134
```

It is clear from assembly that the tick type is 16 bit.

3. configTICK_TYPE_WIDTH_IN_BITS is defined to TICK_TYPE_WIDTH_16_BITS.

Source (function xTaskIncrementTick in tasks.c):
```
const TickType_t xConstTickCount = xTickCount + ( TickType_t ) 1;
```

Assembly:
```
10e2:       4b53            ldr     r3, [pc, FreeRTOS#332]  ; (1230 <xTaskIncrementTick+0x15c>)
10e4:       f8b3 4134       ldrh.w  r4, [r3, FreeRTOS#308]  ; 0x134
10e8:       b2a4            uxth    r4, r4
10ea:       3401            adds    r4, #1
10ec:       b2a4            uxth    r4, r4
10ee:       f8a3 4134       strh.w  r4, [r3, FreeRTOS#308]  ; 0x134
```

It is clear from assembly that the tick type is 16 bit.

4. configTICK_TYPE_WIDTH_IN_BITS is defined to TICK_TYPE_WIDTH_32_BITS.

Source (function xTaskIncrementTick in tasks.c):
```
const TickType_t xConstTickCount = xTickCount + ( TickType_t ) 1;
```

Assembly:
```
109e:       4b50            ldr     r3, [pc, FreeRTOS#320]  ; (11e0 <xTaskIncrementTick+0x150>)
10a0:       f8d3 4134       ldr.w   r4, [r3, FreeRTOS#308]  ; 0x134
10a4:       3401            adds    r4, #1
10a6:       f8c3 4134       str.w   r4, [r3, FreeRTOS#308]  ; 0x134
```

It is clear from assembly that the tick type is 32 bit.

5. configTICK_TYPE_WIDTH_IN_BITS is defined to TICK_TYPE_WIDTH_64_BITS.

```
 #error configTICK_TYPE_WIDTH_IN_BITS set to unsupported tick type width.
```

The testing was done for GCC/ARM_CM3 port which does not support 64 bit
tick type.

6. Neither configUSE_16_BIT_TICKS nor configTICK_TYPE_WIDTH_IN_BITS
defined.

```
 #error Missing definition:  One of configUSE_16_BIT_TICKS and
 configTICK_TYPE_WIDTH_IN_BITS must be defined in FreeRTOSConfig.h.
 See the Configuration section of the FreeRTOS API documentation for
 details.
```

7. Both configUSE_16_BIT_TICKS and configTICK_TYPE_WIDTH_IN_BITS defined.

```
 #error Only one of configUSE_16_BIT_TICKS and
 configTICK_TYPE_WIDTH_IN_BITS must be defined in FreeRTOSConfig.h.
 See the Configuration section of the FreeRTOS API documentation for
 details.
```

Related issue - FreeRTOS#628

Signed-off-by: Gaurav Aggarwal <[email protected]>

* Feature/fixing clang gnu compiler warnings (FreeRTOS#620)

* Adding in ability to support a library for freertos_config and a custom freertos_kernel_port (FreeRTOS#558)

* Using single name definition for libraries everywhere. (FreeRTOS#558)

* Supporting backwards compatibility with FREERTOS_CONFIG_FILE_DIRECTORY (FreeRTOS#571)

* Removing compiler warnings for GNU and Clang. (FreeRTOS#571)

* Added in documentation on how to consume from a main project. Added default PORT selection for native POSIX and MINGW platforms.

* Only adding freertos_config if it exists. Removing auto generation of it from a FREERTOS_CONFIG_FILE_DIRECTORY.

* Fixing clang and gnu compiler warnings.

* Adding in project information and how to compile for GNU/clang

* Fixing compiler issue with unused variable - no need to declare variable.

* Adding in compile warnings for linux builds that kernel is okay with using.

* Fixing more extra-semi-stmt clang warnings.

* Moving definition of hooks into header files if features are enabled.

* Fixing formatting with uncrustify.

* Fixing merge conflicts with main merge.

* Fixing compiler errors due to merge issues and formatting.

* Fixing Line feeds.

* Adding 'portNORETURN' into portmacros.h. Other Updates based on PR request

* Further clean-up of clang and clang-tidy issues.

* Removing compiler specific pragmas from common c files.

* Fixing missing lexicon entry and uncrustify formatting changes.

* Resolving merge issue multiple defnitions of proto for prvIdleTask

* Fixing formatting issues that are not covered by uncrustify. Use clang-tidy instead if you want this level of control.

* More uncrustify formatting issues.

* Fixing extra bracket in #if statement.

---------

Co-authored-by: Gaurav-Aggarwal-AWS <[email protected]>

* POSIX port fixes (FreeRTOS#626)

* Fix types in POSIX port

Use TaskFunction_t and StackType_t as other ports do.

* Fix portTICK_RATE_MICROSECONDS in POSIX port

---------

Co-authored-by: Jacques GUILLOU <[email protected]>
Co-authored-by: Gaurav-Aggarwal-AWS <[email protected]>

* Cortex-M35P: Add Cortex-M35P port (FreeRTOS#631)

* Cortex-M35P: Add Cortex-M35P port

The Cortex-M35P support added to kernel. The port hasn't been
validated yet with TF-M. Hence TF-M support is not included in this
port.

Signed-off-by: Devaraj Ranganna <[email protected]>

* Add portNORETURN to the newly added portmacro.h

Signed-off-by: Gaurav Aggarwal <[email protected]>

---------

Signed-off-by: Devaraj Ranganna <[email protected]>
Signed-off-by: Gaurav Aggarwal <[email protected]>
Co-authored-by: Gaurav-Aggarwal-AWS <[email protected]>
Co-authored-by: Gaurav Aggarwal <[email protected]>
Co-authored-by: kar-rahul-aws <[email protected]>

* Introduced Github Status Badge for Unit Tests (FreeRTOS#634)

* Introduced Github Status Badge for Unit Tests

* Github status badge to point to latest run

* Github status badge UT points to latest results

* Fixed URL for Github Status badge

---------

Co-authored-by: kar-rahul-aws <[email protected]>

* Remove C99 requirement from CMake file (FreeRTOS#633)

* Remove C99 requirement from CMake file

The kernel source is C89 compliant and does not need C99.

Signed-off-by: Gaurav Aggarwal <[email protected]>

* Explicitly set C89 requirement for kernel

Signed-off-by: Gaurav Aggarwal <[email protected]>

---------

Signed-off-by: Gaurav Aggarwal <[email protected]>

* Add Thread Local Storage (TLS) support using Picolibc functions (FreeRTOS#343)

* Pass top of stack to configINIT_TLS_BLOCK

Picolibc wants to allocate the per-task TLS block within the stack
segment, so it will need to modify the top of stack value. Pass the
pxTopOfStack variable to make this explicit.

Signed-off-by: Keith Packard <[email protected]>

* Move newlib-specific definitions to separate file

This reduces the clutter in FreeRTOS.h caused by having newlib-specific
macros present there.

Signed-off-by: Keith Packard <[email protected]>

* Make TLS code depend only on configUSE_C_RUNTIME_TLS_SUPPORT

Remove reference to configUSE_NEWLIB_REENTRANT as that only works
when using newlib. configUSE_C_RUNTIME_TLS_SUPPORT is always
set when configUSE_NEWLIB_REENTRANT is set, so using both was
redundant in that case.

Signed-off-by: Keith Packard <[email protected]>

* portable-ARC: Adapt ARC support to use generalized TLS support

With generalized thread local storage (TLS) support present in the
core, the two ARC ports need to have the changes to the TCB mirrored
to them.

Signed-off-by: Keith Packard <[email protected]>

* Add Thread Local Storage (TLS) support using Picolibc functions

This patch provides definitions of the general TLS support macros in
terms of the Picolibc TLS support functions.

Picolibc is normally configured to use TLS internally for all
variables that are intended to be task-local, so these changes are
necessary for picolibc to work correctly with FreeRTOS.

The picolibc helper functions rely on elements within the linker
script to arrange the TLS data in memory and define some symbols.
Applications wanting to use this mechanism will need changes in their
linker script when migrating to picolibc.

Signed-off-by: Keith Packard <[email protected]>

---------

Signed-off-by: Keith Packard <[email protected]>
Co-authored-by: Keith Packard <[email protected]>
Co-authored-by: Gaurav-Aggarwal-AWS <[email protected]>

* Interrupt priority assert improvements for CM3/4/7 (FreeRTOS#602)

* Interrupt priority assert improvements for CM3/4/7

In the ARM_CM3, ARM_CM4, and ARM_CM7 ports, change the assertion that
`configMAX_SYSCALL_INTERRUPT_PRIORITY` is nonzero to account for the
number of priority bits implemented by the hardware.

Change these ports to also use the lowest priority for PendSV and
SysTick, ignoring `configKERNEL_INTERRUPT_PRIORITY`.

* Remove not needed configKERNEL_INTERRUPT_PRIORITY define

Signed-off-by: Gaurav Aggarwal <[email protected]>

---------

Signed-off-by: Gaurav Aggarwal <[email protected]>
Co-authored-by: Gaurav-Aggarwal-AWS <[email protected]>
Co-authored-by: Gaurav Aggarwal <[email protected]>

* Introduced code coverage status badge (FreeRTOS#635)

* Introduced code coverage status badge

* Trying to fix the URL checker issue

* Fix URL check

Signed-off-by: Gaurav Aggarwal <[email protected]>

---------

Signed-off-by: Gaurav Aggarwal <[email protected]>
Co-authored-by: Gaurav Aggarwal <[email protected]>
Co-authored-by: Gaurav-Aggarwal-AWS <[email protected]>

* added portPOINTER_SIZE_TYPE and SIZE_MAX definition to PIC24/dsPIC port (FreeRTOS#636)

* added portPOINTER_SIZE_TYPE definition to PIC24/dsPIC port

* Added SIZE_MAX definition to PIC24/dsPIC33

* Fix TLS and stack alignment when using picolibc (FreeRTOS#637)

Both the TLS block and stack must be correctly aligned when using
picolibc. The architecture stack alignment is represented by the
portBYTE_ALIGNMENT_MASK and the TLS block alignment is provided by the
Picolibc _tls_align() inline function for Picolibc version 1.8 and
above. For older versions of Picolibc, we'll assume that the TLS block
requires the same alignment as the stack.

For downward growing stacks, this requires aligning the start of the
TLS block to the maximum of the stack alignment and the TLS
alignment. With this, both the TLS block and stack will now be
correctly aligned.

For upward growing stacks, the two areas must be aligned
independently; the TLS block is aligned from the start of the stack,
then the tls space is allocated, and then the stack is aligned above
that.

It's probably useful to know here that the linker ensures that
variables within the TLS block are assigned offsets that match their
alignment requirements. If the TLS block itself is correctly aligned,
then everything within will also be.

I have only tested the downward growing stack branch of this patch.

Signed-off-by: Keith Packard <[email protected]>
Co-authored-by: Keith Packard <[email protected]>
Co-authored-by: Gaurav-Aggarwal-AWS <[email protected]>

* Enable building the GCC Cortex-R5 port without an FPU (FreeRTOS#586)

* Ensure configUSE_TASK_FPU_SUPPORT option is set correctly

If one does enable the FPU of the Cortex-R5 processor, then the GCC
compiler will define the macro __ARM_FP. This can be used to ensure,
that the configUSE_TASK_FPU_SUPPORT is set accordingly.

* Enable the implementation of vPortTaskUsesFPU only if configUSE_TASK_FPU_SUPPORT is set to 1

* Remove error case in pxPortInitialiseStack

The case of configUSE_TASK_FPU_SUPPORT is 0 is now handled

* Enable access to FPU registers only if FPU is enabled

* Make minor formating changes

* Format ARM Cortex-R5 port

* Address review comments from @ChristosZosi

* Minor code review suggestions

Signed-off-by: Gaurav Aggarwal <[email protected]>

---------

Signed-off-by: Gaurav Aggarwal <[email protected]>
Co-authored-by: Christos Zosimidis <[email protected]>
Co-authored-by: Gaurav-Aggarwal-AWS <[email protected]>
Co-authored-by: Gaurav Aggarwal <[email protected]>

* Fix freertos_kernel cmake property, Posix Port (FreeRTOS#640)

* Fix freertos_kernel cmake property, Posix Port

* Moves the `set_property()` call below the target definition in top level CMakeLists file
* Corrects billion value from `ULL` suffix (not C90 compliant) to `UL` suffix with cast to uint64_t

* Add blank line to CMakeLists.txt

* Add missing FreeRTOS+ defines

* Run kernel demos and unit tests for PR changes (FreeRTOS#645)

* Run kernel demos and unit tests for PR changes

Kernel demos check builds multiple demos from FreeRTOS/FreeRTOS and
unit tests check runs unit tests in FreeRTOS/FreeRTOS. Both of these
checks currently use main branch of FreeRTOS-Kernel. This commits
updates these checks to use the changes in the PR.

Signed-off-by: Gaurav Aggarwal <[email protected]>

* Do not specify PR SHA explicitly as that is default

Signed-off-by: Gaurav Aggarwal <[email protected]>

* Remove explicit PR SHA from kernel checks

Signed-off-by: Gaurav Aggarwal <[email protected]>

---------

Signed-off-by: Gaurav Aggarwal <[email protected]>

* Add functions to get the buffers of statically created objects (FreeRTOS#641)

Added various ...GetStaticBuffer() functions to get the buffers of statically
created objects.
---------
Co-authored-by: Paul Bartell <[email protected]>
Co-authored-by: Nikhil Kamath <[email protected]>
Co-authored-by: Gaurav Aggarwal <[email protected]>

* Cortex-M Assert when NVIC implements 8 PRIO bits (FreeRTOS#639)

* Cortex-M Assert when NVIC implements 8 PRIO bits

* Fix CM3 ports

* Fix ARM_CM3_MPU

* Fix ARM CM3

* Fix ARM_CM4_MPU

* Fix ARM_CM4

* Fix GCC ARM_CM7

* Fix IAR ARM ports

* Uncrustify changes

* Fix MikroC_ARM_CM4F port

* Fix MikroC_ARM_CM4F port-(2)

* Fix RVDS ARM ports

* Revert changes for Tasking/ARM_CM4F port

* Revert changes for Tasking/ARM_CM4F port-(2)

* Update port.c

Fix GCC/ARM_CM4F port

* Update port.c

* update GCC\ARM_CM4F port

* update port.c

* Assert to check configMAX_SYSCALL_INTERRUPT_PRIORITY is set to higher priority

* Fix merge error: remove duplicate code

* Fix typos

---------

Co-authored-by: Gaurav-Aggarwal-AWS <[email protected]>
Co-authored-by: Ubuntu <[email protected]>

* Remove C90 requirement from CMakeLists (FreeRTOS#649)

This is needed as it is breaking projects - https://forums.freertos.org/t/freertos-gcc-cmake/16984

We will re-evaluate and accordingly add this later.

Signed-off-by: Gaurav Aggarwal <[email protected]>

* Only add alignment padding when needed (FreeRTOS#650)

Heap 4 and Heap 5 add some padding to ensure that the allocated blocks
are always aligned to portBYTE_ALIGNMENT bytes. The code until now was
adding padding always even if the resulting block was already aligned.
This commits updates the code to only add padding if the resulting block
is not aligned.

Signed-off-by: Gaurav Aggarwal <[email protected]>

* add a missing comma (FreeRTOS#651)

* fix conversion warning (FreeRTOS#658)

FreeRTOS-Kernel/portable/GCC/ARM_CM4F/port.c:399:41: error: conversion from 'uint32_t' {aka 'long unsigned int'} to 'uint8_t' {aka 'unsigned char'} may change value [-Werror=conversion]

Signed-off-by: Vo Trung Chi <[email protected]>

---------

Signed-off-by: Gaurav Aggarwal <[email protected]>
Signed-off-by: Cervenka Dusan <[email protected]>
Signed-off-by: Devaraj Ranganna <[email protected]>
Signed-off-by: Keith Packard <[email protected]>
Signed-off-by: Vo Trung Chi <[email protected]>
Co-authored-by: Archit Gupta <[email protected]>
Co-authored-by: tcpluess <[email protected]>
Co-authored-by: pluess <[email protected]>
Co-authored-by: Gaurav-Aggarwal-AWS <[email protected]>
Co-authored-by: Chris Copeland <[email protected]>
Co-authored-by: David J. Fiddes <[email protected]>
Co-authored-by: Dusan Cervenka <[email protected]>
Co-authored-by: bbain <[email protected]>
Co-authored-by: Ju1He1 <[email protected]>
Co-authored-by: Aniruddha Kanhere <[email protected]>
Co-authored-by: phelter <[email protected]>
Co-authored-by: jacky309 <[email protected]>
Co-authored-by: Jacques GUILLOU <[email protected]>
Co-authored-by: Devaraj Ranganna <[email protected]>
Co-authored-by: Gaurav Aggarwal <[email protected]>
Co-authored-by: kar-rahul-aws <[email protected]>
Co-authored-by: Nikhil Kamath <[email protected]>
Co-authored-by: Keith Packard <[email protected]>
Co-authored-by: Keith Packard <[email protected]>
Co-authored-by: Joseph Julicher <[email protected]>
Co-authored-by: Paul Bartell <[email protected]>
Co-authored-by: Christos Zosimidis <[email protected]>
Co-authored-by: Kody Stribrny <[email protected]>
Co-authored-by: Holden <holden-zenithaerotech.com>
Co-authored-by: Darian <[email protected]>
Co-authored-by: Ubuntu <[email protected]>
Co-authored-by: Nicolas <[email protected]>
Co-authored-by: Vo Trung Chi <[email protected]>
aggarg added a commit to chinglee-iot/FreeRTOS-Kernel that referenced this pull request Apr 18, 2023
* Fix array-bounds compiler warning on gcc11+ in list.h (FreeRTOS#580)

listGET_OWNER_OF_NEXT_ENTRY computes `( pxConstList )->pxIndex->pxNext` after
verifying that `( pxConstList )->pxIndex` points to `xListEnd`, which due to
being a MiniListItem_t, can be shorter than a ListItem_t. Thus,
`( pxConstList )->pxIndex` is a `ListItem_t *` that extends past the end of the
`List_t` whose `xListEnd` it points to. This is fixed by accessing `pxNext`
through a `MiniListItem_t` instead.

* move the prototype for vApplicationIdleHook to task.h. (FreeRTOS#600)

Co-authored-by: pluess <[email protected]>
Co-authored-by: Gaurav-Aggarwal-AWS <[email protected]>

* Update equal priority task preemption (FreeRTOS#603)

* vTaskResume and vTaskPrioritySet don't preempt equal priority task

* Update vTaskResumeAll not to preempt task with equal priority

* Fix in xTaskResumeFromISR

* Update FreeRTOS/FreeRTOS build checks (FreeRTOS#613)

This is needed to be compatible with the refactoring done in this
PR - FreeRTOS/FreeRTOS#889

Signed-off-by: Gaurav Aggarwal <[email protected]>

Signed-off-by: Gaurav Aggarwal <[email protected]>

* Add ulTaskGetRunTimeCounter and ulTaskGetRunTimePercent (FreeRTOS#611)

Allow ulTaskGetIdleRunTimeCounter and ulTaskGetIdleRunTimePercent to be
used whenever configGENERATE_RUN_TIME_STATS is enabled, as this is the
only requirement for these functions to work.

* Fix some CMake documentation typos (FreeRTOS#616)

The quick start instructions for CMake mention the "master"
git branch which has been replaced by "main" in the current
repo.

The main CMakeLists.txt documents how to integrate a
custom port. Fix a typo in the suggested CMake code.

* Added support of 64bit events. (FreeRTOS#597)

* Added support of 64bit even

Signed-off-by: Cervenka Dusan <[email protected]>

* Added missing brackets

Signed-off-by: Cervenka Dusan <[email protected]>

* Made proper name for tick macro.

Signed-off-by: Cervenka Dusan <[email protected]>

* Improved macro evaluation

Signed-off-by: Cervenka Dusan <[email protected]>

* Fixed missed port files  + documentation

Signed-off-by: Cervenka Dusan <[email protected]>

* Changes made on PR

Signed-off-by: Cervenka Dusan <[email protected]>

* Fix macro definition.

Signed-off-by: Cervenka Dusan <[email protected]>

* Formatted code with uncrustify

Signed-off-by: Cervenka Dusan <[email protected]>

---------

Signed-off-by: Cervenka Dusan <[email protected]>

* Introduce portMEMORY_BARRIER for Microblaze port. (FreeRTOS#621)

The introduction of `portMEMORY_BARRIER` will ensure
the places in the kernel use a barrier will work.
For example, `xTaskResumeAll` has a memory barrier
to ensure its correctness when compiled with optimization
enabled. Without the barrier `xTaskResumeAll` can fail
(e.g. start reading and writing to address 0 and/or
infinite looping) when `xPendingReadyList` contains more
than one task to restore.

In `xTaskResumeAll` the compiler chooses to cache the
`pxTCB` the first time through the loop for use
in every subsequent loop. This is incorrect as the
removal of `pxTCB->xEventListItem` will actually
change the value of `pxTCB` if it was read again
at the top of the loop. The barrier forces the compiler
to read `pxTCB` again at the top of the loop.

The compiler is operating correctly. The removal
`pxTCB->xEventListItem` executes on a `List_t *`
and `ListItem_t *`.  This means that the compiler
can assume that any `MiniListItem_t` values are
unchanged by the loop (i.e. "strict-aliasing").
This allows the compiler to cache `pxTCB` as it
is obtained via a `MiniListItem_t`. This is incorrect
in this case because it is possible for a `ListItem_t *`
to actually alias a `MiniListItem_t`. This is technically
a "violation of aliasing rules" so we use the the barrier
to disable the strict-aliasing optimization in this loop.

* Do not call exit() on MSVC Port when calling vPortEndScheduler (FreeRTOS#624)

* make port exitable

* correctly set xPortRunning to False

* add suggestions from Review

Co-authored-by: Gaurav-Aggarwal-AWS <[email protected]>

* add suggestions from Review

Co-authored-by: Gaurav-Aggarwal-AWS <[email protected]>

---------

Co-authored-by: Gaurav-Aggarwal-AWS <[email protected]>

* Update PR template to include checkbox for Unit Test related changes (FreeRTOS#627)

* Fix build failure introduced in PR FreeRTOS#597 (FreeRTOS#629)

The PR FreeRTOS#597 introduced a new config option configTICK_TYPE_WIDTH_IN_BITS
which can be defined to one of the following:
* TICK_TYPE_WIDTH_16_BITS - Tick type is 16 bit wide.
* TICK_TYPE_WIDTH_32_BITS - Tick type is 32 bit wide.
* TICK_TYPE_WIDTH_64_BITS - Tick type is 64 bit wide.

Earlier we supported 16 and 32 bit width for tick type which was
controlled using the config option configUSE_16_BIT_TICKS. The PR
tried to maintain backward compatibility by honoring
configUSE_16_BIT_TICKS. The backward compatibility did not work as
expected though, as the macro configTICK_TYPE_WIDTH_IN_BITS was used
before it was defined. This PR addresses it by ensuring that the macro
configTICK_TYPE_WIDTH_IN_BITS is defined before it is used.

Testing
1. configUSE_16_BIT_TICKS is defined to 0.

Source (function xTaskIncrementTick in tasks.c):
```
const TickType_t xConstTickCount = xTickCount + ( TickType_t ) 1;
```

Assembly:
```
109e:       4b50            ldr     r3, [pc, FreeRTOS#320]  ; (11e0 <xTaskIncrementTick+0x150>)
10a0:       f8d3 4134       ldr.w   r4, [r3, FreeRTOS#308]  ; 0x134
10a4:       3401            adds    r4, #1
10a6:       f8c3 4134       str.w   r4, [r3, FreeRTOS#308]  ; 0x134
```

It is clear from assembly that the tick type is 32 bit.

2. configUSE_16_BIT_TICKS is defined to 1.

Source (function xTaskIncrementTick in tasks.c):
```
const TickType_t xConstTickCount = xTickCount + ( TickType_t ) 1;
```

Assembly:
```
10e2:       4b53            ldr     r3, [pc, FreeRTOS#332]  ; (1230 <xTaskIncrementTick+0x15c>)
10e4:       f8b3 4134       ldrh.w  r4, [r3, FreeRTOS#308]  ; 0x134
10e8:       b2a4            uxth    r4, r4
10ea:       3401            adds    r4, #1
10ec:       b2a4            uxth    r4, r4
10ee:       f8a3 4134       strh.w  r4, [r3, FreeRTOS#308]  ; 0x134
```

It is clear from assembly that the tick type is 16 bit.

3. configTICK_TYPE_WIDTH_IN_BITS is defined to TICK_TYPE_WIDTH_16_BITS.

Source (function xTaskIncrementTick in tasks.c):
```
const TickType_t xConstTickCount = xTickCount + ( TickType_t ) 1;
```

Assembly:
```
10e2:       4b53            ldr     r3, [pc, FreeRTOS#332]  ; (1230 <xTaskIncrementTick+0x15c>)
10e4:       f8b3 4134       ldrh.w  r4, [r3, FreeRTOS#308]  ; 0x134
10e8:       b2a4            uxth    r4, r4
10ea:       3401            adds    r4, #1
10ec:       b2a4            uxth    r4, r4
10ee:       f8a3 4134       strh.w  r4, [r3, FreeRTOS#308]  ; 0x134
```

It is clear from assembly that the tick type is 16 bit.

4. configTICK_TYPE_WIDTH_IN_BITS is defined to TICK_TYPE_WIDTH_32_BITS.

Source (function xTaskIncrementTick in tasks.c):
```
const TickType_t xConstTickCount = xTickCount + ( TickType_t ) 1;
```

Assembly:
```
109e:       4b50            ldr     r3, [pc, FreeRTOS#320]  ; (11e0 <xTaskIncrementTick+0x150>)
10a0:       f8d3 4134       ldr.w   r4, [r3, FreeRTOS#308]  ; 0x134
10a4:       3401            adds    r4, #1
10a6:       f8c3 4134       str.w   r4, [r3, FreeRTOS#308]  ; 0x134
```

It is clear from assembly that the tick type is 32 bit.

5. configTICK_TYPE_WIDTH_IN_BITS is defined to TICK_TYPE_WIDTH_64_BITS.

```
 #error configTICK_TYPE_WIDTH_IN_BITS set to unsupported tick type width.
```

The testing was done for GCC/ARM_CM3 port which does not support 64 bit
tick type.

6. Neither configUSE_16_BIT_TICKS nor configTICK_TYPE_WIDTH_IN_BITS
defined.

```
 #error Missing definition:  One of configUSE_16_BIT_TICKS and
 configTICK_TYPE_WIDTH_IN_BITS must be defined in FreeRTOSConfig.h.
 See the Configuration section of the FreeRTOS API documentation for
 details.
```

7. Both configUSE_16_BIT_TICKS and configTICK_TYPE_WIDTH_IN_BITS defined.

```
 #error Only one of configUSE_16_BIT_TICKS and
 configTICK_TYPE_WIDTH_IN_BITS must be defined in FreeRTOSConfig.h.
 See the Configuration section of the FreeRTOS API documentation for
 details.
```

Related issue - FreeRTOS#628

Signed-off-by: Gaurav Aggarwal <[email protected]>

* Feature/fixing clang gnu compiler warnings (FreeRTOS#620)

* Adding in ability to support a library for freertos_config and a custom freertos_kernel_port (FreeRTOS#558)

* Using single name definition for libraries everywhere. (FreeRTOS#558)

* Supporting backwards compatibility with FREERTOS_CONFIG_FILE_DIRECTORY (FreeRTOS#571)

* Removing compiler warnings for GNU and Clang. (FreeRTOS#571)

* Added in documentation on how to consume from a main project. Added default PORT selection for native POSIX and MINGW platforms.

* Only adding freertos_config if it exists. Removing auto generation of it from a FREERTOS_CONFIG_FILE_DIRECTORY.

* Fixing clang and gnu compiler warnings.

* Adding in project information and how to compile for GNU/clang

* Fixing compiler issue with unused variable - no need to declare variable.

* Adding in compile warnings for linux builds that kernel is okay with using.

* Fixing more extra-semi-stmt clang warnings.

* Moving definition of hooks into header files if features are enabled.

* Fixing formatting with uncrustify.

* Fixing merge conflicts with main merge.

* Fixing compiler errors due to merge issues and formatting.

* Fixing Line feeds.

* Adding 'portNORETURN' into portmacros.h. Other Updates based on PR request

* Further clean-up of clang and clang-tidy issues.

* Removing compiler specific pragmas from common c files.

* Fixing missing lexicon entry and uncrustify formatting changes.

* Resolving merge issue multiple defnitions of proto for prvIdleTask

* Fixing formatting issues that are not covered by uncrustify. Use clang-tidy instead if you want this level of control.

* More uncrustify formatting issues.

* Fixing extra bracket in #if statement.

---------

Co-authored-by: Gaurav-Aggarwal-AWS <[email protected]>

* POSIX port fixes (FreeRTOS#626)

* Fix types in POSIX port

Use TaskFunction_t and StackType_t as other ports do.

* Fix portTICK_RATE_MICROSECONDS in POSIX port

---------

Co-authored-by: Jacques GUILLOU <[email protected]>
Co-authored-by: Gaurav-Aggarwal-AWS <[email protected]>

* Cortex-M35P: Add Cortex-M35P port (FreeRTOS#631)

* Cortex-M35P: Add Cortex-M35P port

The Cortex-M35P support added to kernel. The port hasn't been
validated yet with TF-M. Hence TF-M support is not included in this
port.

Signed-off-by: Devaraj Ranganna <[email protected]>

* Add portNORETURN to the newly added portmacro.h

Signed-off-by: Gaurav Aggarwal <[email protected]>

---------

Signed-off-by: Devaraj Ranganna <[email protected]>
Signed-off-by: Gaurav Aggarwal <[email protected]>
Co-authored-by: Gaurav-Aggarwal-AWS <[email protected]>
Co-authored-by: Gaurav Aggarwal <[email protected]>
Co-authored-by: kar-rahul-aws <[email protected]>

* Introduced Github Status Badge for Unit Tests (FreeRTOS#634)

* Introduced Github Status Badge for Unit Tests

* Github status badge to point to latest run

* Github status badge UT points to latest results

* Fixed URL for Github Status badge

---------

Co-authored-by: kar-rahul-aws <[email protected]>

* Remove C99 requirement from CMake file (FreeRTOS#633)

* Remove C99 requirement from CMake file

The kernel source is C89 compliant and does not need C99.

Signed-off-by: Gaurav Aggarwal <[email protected]>

* Explicitly set C89 requirement for kernel

Signed-off-by: Gaurav Aggarwal <[email protected]>

---------

Signed-off-by: Gaurav Aggarwal <[email protected]>

* Add Thread Local Storage (TLS) support using Picolibc functions (FreeRTOS#343)

* Pass top of stack to configINIT_TLS_BLOCK

Picolibc wants to allocate the per-task TLS block within the stack
segment, so it will need to modify the top of stack value. Pass the
pxTopOfStack variable to make this explicit.

Signed-off-by: Keith Packard <[email protected]>

* Move newlib-specific definitions to separate file

This reduces the clutter in FreeRTOS.h caused by having newlib-specific
macros present there.

Signed-off-by: Keith Packard <[email protected]>

* Make TLS code depend only on configUSE_C_RUNTIME_TLS_SUPPORT

Remove reference to configUSE_NEWLIB_REENTRANT as that only works
when using newlib. configUSE_C_RUNTIME_TLS_SUPPORT is always
set when configUSE_NEWLIB_REENTRANT is set, so using both was
redundant in that case.

Signed-off-by: Keith Packard <[email protected]>

* portable-ARC: Adapt ARC support to use generalized TLS support

With generalized thread local storage (TLS) support present in the
core, the two ARC ports need to have the changes to the TCB mirrored
to them.

Signed-off-by: Keith Packard <[email protected]>

* Add Thread Local Storage (TLS) support using Picolibc functions

This patch provides definitions of the general TLS support macros in
terms of the Picolibc TLS support functions.

Picolibc is normally configured to use TLS internally for all
variables that are intended to be task-local, so these changes are
necessary for picolibc to work correctly with FreeRTOS.

The picolibc helper functions rely on elements within the linker
script to arrange the TLS data in memory and define some symbols.
Applications wanting to use this mechanism will need changes in their
linker script when migrating to picolibc.

Signed-off-by: Keith Packard <[email protected]>

---------

Signed-off-by: Keith Packard <[email protected]>
Co-authored-by: Keith Packard <[email protected]>
Co-authored-by: Gaurav-Aggarwal-AWS <[email protected]>

* Interrupt priority assert improvements for CM3/4/7 (FreeRTOS#602)

* Interrupt priority assert improvements for CM3/4/7

In the ARM_CM3, ARM_CM4, and ARM_CM7 ports, change the assertion that
`configMAX_SYSCALL_INTERRUPT_PRIORITY` is nonzero to account for the
number of priority bits implemented by the hardware.

Change these ports to also use the lowest priority for PendSV and
SysTick, ignoring `configKERNEL_INTERRUPT_PRIORITY`.

* Remove not needed configKERNEL_INTERRUPT_PRIORITY define

Signed-off-by: Gaurav Aggarwal <[email protected]>

---------

Signed-off-by: Gaurav Aggarwal <[email protected]>
Co-authored-by: Gaurav-Aggarwal-AWS <[email protected]>
Co-authored-by: Gaurav Aggarwal <[email protected]>

* Introduced code coverage status badge (FreeRTOS#635)

* Introduced code coverage status badge

* Trying to fix the URL checker issue

* Fix URL check

Signed-off-by: Gaurav Aggarwal <[email protected]>

---------

Signed-off-by: Gaurav Aggarwal <[email protected]>
Co-authored-by: Gaurav Aggarwal <[email protected]>
Co-authored-by: Gaurav-Aggarwal-AWS <[email protected]>

* added portPOINTER_SIZE_TYPE and SIZE_MAX definition to PIC24/dsPIC port (FreeRTOS#636)

* added portPOINTER_SIZE_TYPE definition to PIC24/dsPIC port

* Added SIZE_MAX definition to PIC24/dsPIC33

* Fix TLS and stack alignment when using picolibc (FreeRTOS#637)

Both the TLS block and stack must be correctly aligned when using
picolibc. The architecture stack alignment is represented by the
portBYTE_ALIGNMENT_MASK and the TLS block alignment is provided by the
Picolibc _tls_align() inline function for Picolibc version 1.8 and
above. For older versions of Picolibc, we'll assume that the TLS block
requires the same alignment as the stack.

For downward growing stacks, this requires aligning the start of the
TLS block to the maximum of the stack alignment and the TLS
alignment. With this, both the TLS block and stack will now be
correctly aligned.

For upward growing stacks, the two areas must be aligned
independently; the TLS block is aligned from the start of the stack,
then the tls space is allocated, and then the stack is aligned above
that.

It's probably useful to know here that the linker ensures that
variables within the TLS block are assigned offsets that match their
alignment requirements. If the TLS block itself is correctly aligned,
then everything within will also be.

I have only tested the downward growing stack branch of this patch.

Signed-off-by: Keith Packard <[email protected]>
Co-authored-by: Keith Packard <[email protected]>
Co-authored-by: Gaurav-Aggarwal-AWS <[email protected]>

* Enable building the GCC Cortex-R5 port without an FPU (FreeRTOS#586)

* Ensure configUSE_TASK_FPU_SUPPORT option is set correctly

If one does enable the FPU of the Cortex-R5 processor, then the GCC
compiler will define the macro __ARM_FP. This can be used to ensure,
that the configUSE_TASK_FPU_SUPPORT is set accordingly.

* Enable the implementation of vPortTaskUsesFPU only if configUSE_TASK_FPU_SUPPORT is set to 1

* Remove error case in pxPortInitialiseStack

The case of configUSE_TASK_FPU_SUPPORT is 0 is now handled

* Enable access to FPU registers only if FPU is enabled

* Make minor formating changes

* Format ARM Cortex-R5 port

* Address review comments from @ChristosZosi

* Minor code review suggestions

Signed-off-by: Gaurav Aggarwal <[email protected]>

---------

Signed-off-by: Gaurav Aggarwal <[email protected]>
Co-authored-by: Christos Zosimidis <[email protected]>
Co-authored-by: Gaurav-Aggarwal-AWS <[email protected]>
Co-authored-by: Gaurav Aggarwal <[email protected]>

* Fix freertos_kernel cmake property, Posix Port (FreeRTOS#640)

* Fix freertos_kernel cmake property, Posix Port

* Moves the `set_property()` call below the target definition in top level CMakeLists file
* Corrects billion value from `ULL` suffix (not C90 compliant) to `UL` suffix with cast to uint64_t

* Add blank line to CMakeLists.txt

* Add missing FreeRTOS+ defines

* Run kernel demos and unit tests for PR changes (FreeRTOS#645)

* Run kernel demos and unit tests for PR changes

Kernel demos check builds multiple demos from FreeRTOS/FreeRTOS and
unit tests check runs unit tests in FreeRTOS/FreeRTOS. Both of these
checks currently use main branch of FreeRTOS-Kernel. This commits
updates these checks to use the changes in the PR.

Signed-off-by: Gaurav Aggarwal <[email protected]>

* Do not specify PR SHA explicitly as that is default

Signed-off-by: Gaurav Aggarwal <[email protected]>

* Remove explicit PR SHA from kernel checks

Signed-off-by: Gaurav Aggarwal <[email protected]>

---------

Signed-off-by: Gaurav Aggarwal <[email protected]>

* Add functions to get the buffers of statically created objects (FreeRTOS#641)

Added various ...GetStaticBuffer() functions to get the buffers of statically
created objects.
---------
Co-authored-by: Paul Bartell <[email protected]>
Co-authored-by: Nikhil Kamath <[email protected]>
Co-authored-by: Gaurav Aggarwal <[email protected]>

* Cortex-M Assert when NVIC implements 8 PRIO bits (FreeRTOS#639)

* Cortex-M Assert when NVIC implements 8 PRIO bits

* Fix CM3 ports

* Fix ARM_CM3_MPU

* Fix ARM CM3

* Fix ARM_CM4_MPU

* Fix ARM_CM4

* Fix GCC ARM_CM7

* Fix IAR ARM ports

* Uncrustify changes

* Fix MikroC_ARM_CM4F port

* Fix MikroC_ARM_CM4F port-(2)

* Fix RVDS ARM ports

* Revert changes for Tasking/ARM_CM4F port

* Revert changes for Tasking/ARM_CM4F port-(2)

* Update port.c

Fix GCC/ARM_CM4F port

* Update port.c

* update GCC\ARM_CM4F port

* update port.c

* Assert to check configMAX_SYSCALL_INTERRUPT_PRIORITY is set to higher priority

* Fix merge error: remove duplicate code

* Fix typos

---------

Co-authored-by: Gaurav-Aggarwal-AWS <[email protected]>
Co-authored-by: Ubuntu <[email protected]>

* Remove C90 requirement from CMakeLists (FreeRTOS#649)

This is needed as it is breaking projects - https://forums.freertos.org/t/freertos-gcc-cmake/16984

We will re-evaluate and accordingly add this later.

Signed-off-by: Gaurav Aggarwal <[email protected]>

* Only add alignment padding when needed (FreeRTOS#650)

Heap 4 and Heap 5 add some padding to ensure that the allocated blocks
are always aligned to portBYTE_ALIGNMENT bytes. The code until now was
adding padding always even if the resulting block was already aligned.
This commits updates the code to only add padding if the resulting block
is not aligned.

Signed-off-by: Gaurav Aggarwal <[email protected]>

* add a missing comma (FreeRTOS#651)

* fix conversion warning (FreeRTOS#658)

FreeRTOS-Kernel/portable/GCC/ARM_CM4F/port.c:399:41: error: conversion from 'uint32_t' {aka 'long unsigned int'} to 'uint8_t' {aka 'unsigned char'} may change value [-Werror=conversion]

Signed-off-by: Vo Trung Chi <[email protected]>

---------

Signed-off-by: Gaurav Aggarwal <[email protected]>
Signed-off-by: Cervenka Dusan <[email protected]>
Signed-off-by: Devaraj Ranganna <[email protected]>
Signed-off-by: Keith Packard <[email protected]>
Signed-off-by: Vo Trung Chi <[email protected]>
Co-authored-by: Archit Gupta <[email protected]>
Co-authored-by: tcpluess <[email protected]>
Co-authored-by: pluess <[email protected]>
Co-authored-by: Gaurav-Aggarwal-AWS <[email protected]>
Co-authored-by: Chris Copeland <[email protected]>
Co-authored-by: David J. Fiddes <[email protected]>
Co-authored-by: Dusan Cervenka <[email protected]>
Co-authored-by: bbain <[email protected]>
Co-authored-by: Ju1He1 <[email protected]>
Co-authored-by: Aniruddha Kanhere <[email protected]>
Co-authored-by: phelter <[email protected]>
Co-authored-by: jacky309 <[email protected]>
Co-authored-by: Jacques GUILLOU <[email protected]>
Co-authored-by: Devaraj Ranganna <[email protected]>
Co-authored-by: Gaurav Aggarwal <[email protected]>
Co-authored-by: kar-rahul-aws <[email protected]>
Co-authored-by: Nikhil Kamath <[email protected]>
Co-authored-by: Keith Packard <[email protected]>
Co-authored-by: Keith Packard <[email protected]>
Co-authored-by: Joseph Julicher <[email protected]>
Co-authored-by: Paul Bartell <[email protected]>
Co-authored-by: Christos Zosimidis <[email protected]>
Co-authored-by: Kody Stribrny <[email protected]>
Co-authored-by: Holden <holden-zenithaerotech.com>
Co-authored-by: Darian <[email protected]>
Co-authored-by: Ubuntu <[email protected]>
Co-authored-by: Nicolas <[email protected]>
Co-authored-by: Vo Trung Chi <[email protected]>
aggarg added a commit to chinglee-iot/FreeRTOS-Kernel that referenced this pull request Apr 25, 2023
* Fix array-bounds compiler warning on gcc11+ in list.h (FreeRTOS#580)

listGET_OWNER_OF_NEXT_ENTRY computes `( pxConstList )->pxIndex->pxNext` after
verifying that `( pxConstList )->pxIndex` points to `xListEnd`, which due to
being a MiniListItem_t, can be shorter than a ListItem_t. Thus,
`( pxConstList )->pxIndex` is a `ListItem_t *` that extends past the end of the
`List_t` whose `xListEnd` it points to. This is fixed by accessing `pxNext`
through a `MiniListItem_t` instead.

* move the prototype for vApplicationIdleHook to task.h. (FreeRTOS#600)

Co-authored-by: pluess <[email protected]>
Co-authored-by: Gaurav-Aggarwal-AWS <[email protected]>

* Update equal priority task preemption (FreeRTOS#603)

* vTaskResume and vTaskPrioritySet don't preempt equal priority task

* Update vTaskResumeAll not to preempt task with equal priority

* Fix in xTaskResumeFromISR

* Update FreeRTOS/FreeRTOS build checks (FreeRTOS#613)

This is needed to be compatible with the refactoring done in this
PR - FreeRTOS/FreeRTOS#889

Signed-off-by: Gaurav Aggarwal <[email protected]>

Signed-off-by: Gaurav Aggarwal <[email protected]>

* Add ulTaskGetRunTimeCounter and ulTaskGetRunTimePercent (FreeRTOS#611)

Allow ulTaskGetIdleRunTimeCounter and ulTaskGetIdleRunTimePercent to be
used whenever configGENERATE_RUN_TIME_STATS is enabled, as this is the
only requirement for these functions to work.

* Fix some CMake documentation typos (FreeRTOS#616)

The quick start instructions for CMake mention the "master"
git branch which has been replaced by "main" in the current
repo.

The main CMakeLists.txt documents how to integrate a
custom port. Fix a typo in the suggested CMake code.

* Added support of 64bit events. (FreeRTOS#597)

* Added support of 64bit even

Signed-off-by: Cervenka Dusan <[email protected]>

* Added missing brackets

Signed-off-by: Cervenka Dusan <[email protected]>

* Made proper name for tick macro.

Signed-off-by: Cervenka Dusan <[email protected]>

* Improved macro evaluation

Signed-off-by: Cervenka Dusan <[email protected]>

* Fixed missed port files  + documentation

Signed-off-by: Cervenka Dusan <[email protected]>

* Changes made on PR

Signed-off-by: Cervenka Dusan <[email protected]>

* Fix macro definition.

Signed-off-by: Cervenka Dusan <[email protected]>

* Formatted code with uncrustify

Signed-off-by: Cervenka Dusan <[email protected]>

---------

Signed-off-by: Cervenka Dusan <[email protected]>

* Introduce portMEMORY_BARRIER for Microblaze port. (FreeRTOS#621)

The introduction of `portMEMORY_BARRIER` will ensure
the places in the kernel use a barrier will work.
For example, `xTaskResumeAll` has a memory barrier
to ensure its correctness when compiled with optimization
enabled. Without the barrier `xTaskResumeAll` can fail
(e.g. start reading and writing to address 0 and/or
infinite looping) when `xPendingReadyList` contains more
than one task to restore.

In `xTaskResumeAll` the compiler chooses to cache the
`pxTCB` the first time through the loop for use
in every subsequent loop. This is incorrect as the
removal of `pxTCB->xEventListItem` will actually
change the value of `pxTCB` if it was read again
at the top of the loop. The barrier forces the compiler
to read `pxTCB` again at the top of the loop.

The compiler is operating correctly. The removal
`pxTCB->xEventListItem` executes on a `List_t *`
and `ListItem_t *`.  This means that the compiler
can assume that any `MiniListItem_t` values are
unchanged by the loop (i.e. "strict-aliasing").
This allows the compiler to cache `pxTCB` as it
is obtained via a `MiniListItem_t`. This is incorrect
in this case because it is possible for a `ListItem_t *`
to actually alias a `MiniListItem_t`. This is technically
a "violation of aliasing rules" so we use the the barrier
to disable the strict-aliasing optimization in this loop.

* Do not call exit() on MSVC Port when calling vPortEndScheduler (FreeRTOS#624)

* make port exitable

* correctly set xPortRunning to False

* add suggestions from Review

Co-authored-by: Gaurav-Aggarwal-AWS <[email protected]>

* add suggestions from Review

Co-authored-by: Gaurav-Aggarwal-AWS <[email protected]>

---------

Co-authored-by: Gaurav-Aggarwal-AWS <[email protected]>

* Update PR template to include checkbox for Unit Test related changes (FreeRTOS#627)

* Fix build failure introduced in PR FreeRTOS#597 (FreeRTOS#629)

The PR FreeRTOS#597 introduced a new config option configTICK_TYPE_WIDTH_IN_BITS
which can be defined to one of the following:
* TICK_TYPE_WIDTH_16_BITS - Tick type is 16 bit wide.
* TICK_TYPE_WIDTH_32_BITS - Tick type is 32 bit wide.
* TICK_TYPE_WIDTH_64_BITS - Tick type is 64 bit wide.

Earlier we supported 16 and 32 bit width for tick type which was
controlled using the config option configUSE_16_BIT_TICKS. The PR
tried to maintain backward compatibility by honoring
configUSE_16_BIT_TICKS. The backward compatibility did not work as
expected though, as the macro configTICK_TYPE_WIDTH_IN_BITS was used
before it was defined. This PR addresses it by ensuring that the macro
configTICK_TYPE_WIDTH_IN_BITS is defined before it is used.

Testing
1. configUSE_16_BIT_TICKS is defined to 0.

Source (function xTaskIncrementTick in tasks.c):
```
const TickType_t xConstTickCount = xTickCount + ( TickType_t ) 1;
```

Assembly:
```
109e:       4b50            ldr     r3, [pc, FreeRTOS#320]  ; (11e0 <xTaskIncrementTick+0x150>)
10a0:       f8d3 4134       ldr.w   r4, [r3, FreeRTOS#308]  ; 0x134
10a4:       3401            adds    r4, #1
10a6:       f8c3 4134       str.w   r4, [r3, FreeRTOS#308]  ; 0x134
```

It is clear from assembly that the tick type is 32 bit.

2. configUSE_16_BIT_TICKS is defined to 1.

Source (function xTaskIncrementTick in tasks.c):
```
const TickType_t xConstTickCount = xTickCount + ( TickType_t ) 1;
```

Assembly:
```
10e2:       4b53            ldr     r3, [pc, FreeRTOS#332]  ; (1230 <xTaskIncrementTick+0x15c>)
10e4:       f8b3 4134       ldrh.w  r4, [r3, FreeRTOS#308]  ; 0x134
10e8:       b2a4            uxth    r4, r4
10ea:       3401            adds    r4, #1
10ec:       b2a4            uxth    r4, r4
10ee:       f8a3 4134       strh.w  r4, [r3, FreeRTOS#308]  ; 0x134
```

It is clear from assembly that the tick type is 16 bit.

3. configTICK_TYPE_WIDTH_IN_BITS is defined to TICK_TYPE_WIDTH_16_BITS.

Source (function xTaskIncrementTick in tasks.c):
```
const TickType_t xConstTickCount = xTickCount + ( TickType_t ) 1;
```

Assembly:
```
10e2:       4b53            ldr     r3, [pc, FreeRTOS#332]  ; (1230 <xTaskIncrementTick+0x15c>)
10e4:       f8b3 4134       ldrh.w  r4, [r3, FreeRTOS#308]  ; 0x134
10e8:       b2a4            uxth    r4, r4
10ea:       3401            adds    r4, #1
10ec:       b2a4            uxth    r4, r4
10ee:       f8a3 4134       strh.w  r4, [r3, FreeRTOS#308]  ; 0x134
```

It is clear from assembly that the tick type is 16 bit.

4. configTICK_TYPE_WIDTH_IN_BITS is defined to TICK_TYPE_WIDTH_32_BITS.

Source (function xTaskIncrementTick in tasks.c):
```
const TickType_t xConstTickCount = xTickCount + ( TickType_t ) 1;
```

Assembly:
```
109e:       4b50            ldr     r3, [pc, FreeRTOS#320]  ; (11e0 <xTaskIncrementTick+0x150>)
10a0:       f8d3 4134       ldr.w   r4, [r3, FreeRTOS#308]  ; 0x134
10a4:       3401            adds    r4, #1
10a6:       f8c3 4134       str.w   r4, [r3, FreeRTOS#308]  ; 0x134
```

It is clear from assembly that the tick type is 32 bit.

5. configTICK_TYPE_WIDTH_IN_BITS is defined to TICK_TYPE_WIDTH_64_BITS.

```
 #error configTICK_TYPE_WIDTH_IN_BITS set to unsupported tick type width.
```

The testing was done for GCC/ARM_CM3 port which does not support 64 bit
tick type.

6. Neither configUSE_16_BIT_TICKS nor configTICK_TYPE_WIDTH_IN_BITS
defined.

```
 #error Missing definition:  One of configUSE_16_BIT_TICKS and
 configTICK_TYPE_WIDTH_IN_BITS must be defined in FreeRTOSConfig.h.
 See the Configuration section of the FreeRTOS API documentation for
 details.
```

7. Both configUSE_16_BIT_TICKS and configTICK_TYPE_WIDTH_IN_BITS defined.

```
 #error Only one of configUSE_16_BIT_TICKS and
 configTICK_TYPE_WIDTH_IN_BITS must be defined in FreeRTOSConfig.h.
 See the Configuration section of the FreeRTOS API documentation for
 details.
```

Related issue - FreeRTOS#628

Signed-off-by: Gaurav Aggarwal <[email protected]>

* Feature/fixing clang gnu compiler warnings (FreeRTOS#620)

* Adding in ability to support a library for freertos_config and a custom freertos_kernel_port (FreeRTOS#558)

* Using single name definition for libraries everywhere. (FreeRTOS#558)

* Supporting backwards compatibility with FREERTOS_CONFIG_FILE_DIRECTORY (FreeRTOS#571)

* Removing compiler warnings for GNU and Clang. (FreeRTOS#571)

* Added in documentation on how to consume from a main project. Added default PORT selection for native POSIX and MINGW platforms.

* Only adding freertos_config if it exists. Removing auto generation of it from a FREERTOS_CONFIG_FILE_DIRECTORY.

* Fixing clang and gnu compiler warnings.

* Adding in project information and how to compile for GNU/clang

* Fixing compiler issue with unused variable - no need to declare variable.

* Adding in compile warnings for linux builds that kernel is okay with using.

* Fixing more extra-semi-stmt clang warnings.

* Moving definition of hooks into header files if features are enabled.

* Fixing formatting with uncrustify.

* Fixing merge conflicts with main merge.

* Fixing compiler errors due to merge issues and formatting.

* Fixing Line feeds.

* Adding 'portNORETURN' into portmacros.h. Other Updates based on PR request

* Further clean-up of clang and clang-tidy issues.

* Removing compiler specific pragmas from common c files.

* Fixing missing lexicon entry and uncrustify formatting changes.

* Resolving merge issue multiple defnitions of proto for prvIdleTask

* Fixing formatting issues that are not covered by uncrustify. Use clang-tidy instead if you want this level of control.

* More uncrustify formatting issues.

* Fixing extra bracket in #if statement.

---------

Co-authored-by: Gaurav-Aggarwal-AWS <[email protected]>

* POSIX port fixes (FreeRTOS#626)

* Fix types in POSIX port

Use TaskFunction_t and StackType_t as other ports do.

* Fix portTICK_RATE_MICROSECONDS in POSIX port

---------

Co-authored-by: Jacques GUILLOU <[email protected]>
Co-authored-by: Gaurav-Aggarwal-AWS <[email protected]>

* Cortex-M35P: Add Cortex-M35P port (FreeRTOS#631)

* Cortex-M35P: Add Cortex-M35P port

The Cortex-M35P support added to kernel. The port hasn't been
validated yet with TF-M. Hence TF-M support is not included in this
port.

Signed-off-by: Devaraj Ranganna <[email protected]>

* Add portNORETURN to the newly added portmacro.h

Signed-off-by: Gaurav Aggarwal <[email protected]>

---------

Signed-off-by: Devaraj Ranganna <[email protected]>
Signed-off-by: Gaurav Aggarwal <[email protected]>
Co-authored-by: Gaurav-Aggarwal-AWS <[email protected]>
Co-authored-by: Gaurav Aggarwal <[email protected]>
Co-authored-by: kar-rahul-aws <[email protected]>

* Introduced Github Status Badge for Unit Tests (FreeRTOS#634)

* Introduced Github Status Badge for Unit Tests

* Github status badge to point to latest run

* Github status badge UT points to latest results

* Fixed URL for Github Status badge

---------

Co-authored-by: kar-rahul-aws <[email protected]>

* Remove C99 requirement from CMake file (FreeRTOS#633)

* Remove C99 requirement from CMake file

The kernel source is C89 compliant and does not need C99.

Signed-off-by: Gaurav Aggarwal <[email protected]>

* Explicitly set C89 requirement for kernel

Signed-off-by: Gaurav Aggarwal <[email protected]>

---------

Signed-off-by: Gaurav Aggarwal <[email protected]>

* Add Thread Local Storage (TLS) support using Picolibc functions (FreeRTOS#343)

* Pass top of stack to configINIT_TLS_BLOCK

Picolibc wants to allocate the per-task TLS block within the stack
segment, so it will need to modify the top of stack value. Pass the
pxTopOfStack variable to make this explicit.

Signed-off-by: Keith Packard <[email protected]>

* Move newlib-specific definitions to separate file

This reduces the clutter in FreeRTOS.h caused by having newlib-specific
macros present there.

Signed-off-by: Keith Packard <[email protected]>

* Make TLS code depend only on configUSE_C_RUNTIME_TLS_SUPPORT

Remove reference to configUSE_NEWLIB_REENTRANT as that only works
when using newlib. configUSE_C_RUNTIME_TLS_SUPPORT is always
set when configUSE_NEWLIB_REENTRANT is set, so using both was
redundant in that case.

Signed-off-by: Keith Packard <[email protected]>

* portable-ARC: Adapt ARC support to use generalized TLS support

With generalized thread local storage (TLS) support present in the
core, the two ARC ports need to have the changes to the TCB mirrored
to them.

Signed-off-by: Keith Packard <[email protected]>

* Add Thread Local Storage (TLS) support using Picolibc functions

This patch provides definitions of the general TLS support macros in
terms of the Picolibc TLS support functions.

Picolibc is normally configured to use TLS internally for all
variables that are intended to be task-local, so these changes are
necessary for picolibc to work correctly with FreeRTOS.

The picolibc helper functions rely on elements within the linker
script to arrange the TLS data in memory and define some symbols.
Applications wanting to use this mechanism will need changes in their
linker script when migrating to picolibc.

Signed-off-by: Keith Packard <[email protected]>

---------

Signed-off-by: Keith Packard <[email protected]>
Co-authored-by: Keith Packard <[email protected]>
Co-authored-by: Gaurav-Aggarwal-AWS <[email protected]>

* Interrupt priority assert improvements for CM3/4/7 (FreeRTOS#602)

* Interrupt priority assert improvements for CM3/4/7

In the ARM_CM3, ARM_CM4, and ARM_CM7 ports, change the assertion that
`configMAX_SYSCALL_INTERRUPT_PRIORITY` is nonzero to account for the
number of priority bits implemented by the hardware.

Change these ports to also use the lowest priority for PendSV and
SysTick, ignoring `configKERNEL_INTERRUPT_PRIORITY`.

* Remove not needed configKERNEL_INTERRUPT_PRIORITY define

Signed-off-by: Gaurav Aggarwal <[email protected]>

---------

Signed-off-by: Gaurav Aggarwal <[email protected]>
Co-authored-by: Gaurav-Aggarwal-AWS <[email protected]>
Co-authored-by: Gaurav Aggarwal <[email protected]>

* Introduced code coverage status badge (FreeRTOS#635)

* Introduced code coverage status badge

* Trying to fix the URL checker issue

* Fix URL check

Signed-off-by: Gaurav Aggarwal <[email protected]>

---------

Signed-off-by: Gaurav Aggarwal <[email protected]>
Co-authored-by: Gaurav Aggarwal <[email protected]>
Co-authored-by: Gaurav-Aggarwal-AWS <[email protected]>

* added portPOINTER_SIZE_TYPE and SIZE_MAX definition to PIC24/dsPIC port (FreeRTOS#636)

* added portPOINTER_SIZE_TYPE definition to PIC24/dsPIC port

* Added SIZE_MAX definition to PIC24/dsPIC33

* Fix TLS and stack alignment when using picolibc (FreeRTOS#637)

Both the TLS block and stack must be correctly aligned when using
picolibc. The architecture stack alignment is represented by the
portBYTE_ALIGNMENT_MASK and the TLS block alignment is provided by the
Picolibc _tls_align() inline function for Picolibc version 1.8 and
above. For older versions of Picolibc, we'll assume that the TLS block
requires the same alignment as the stack.

For downward growing stacks, this requires aligning the start of the
TLS block to the maximum of the stack alignment and the TLS
alignment. With this, both the TLS block and stack will now be
correctly aligned.

For upward growing stacks, the two areas must be aligned
independently; the TLS block is aligned from the start of the stack,
then the tls space is allocated, and then the stack is aligned above
that.

It's probably useful to know here that the linker ensures that
variables within the TLS block are assigned offsets that match their
alignment requirements. If the TLS block itself is correctly aligned,
then everything within will also be.

I have only tested the downward growing stack branch of this patch.

Signed-off-by: Keith Packard <[email protected]>
Co-authored-by: Keith Packard <[email protected]>
Co-authored-by: Gaurav-Aggarwal-AWS <[email protected]>

* Enable building the GCC Cortex-R5 port without an FPU (FreeRTOS#586)

* Ensure configUSE_TASK_FPU_SUPPORT option is set correctly

If one does enable the FPU of the Cortex-R5 processor, then the GCC
compiler will define the macro __ARM_FP. This can be used to ensure,
that the configUSE_TASK_FPU_SUPPORT is set accordingly.

* Enable the implementation of vPortTaskUsesFPU only if configUSE_TASK_FPU_SUPPORT is set to 1

* Remove error case in pxPortInitialiseStack

The case of configUSE_TASK_FPU_SUPPORT is 0 is now handled

* Enable access to FPU registers only if FPU is enabled

* Make minor formating changes

* Format ARM Cortex-R5 port

* Address review comments from @ChristosZosi

* Minor code review suggestions

Signed-off-by: Gaurav Aggarwal <[email protected]>

---------

Signed-off-by: Gaurav Aggarwal <[email protected]>
Co-authored-by: Christos Zosimidis <[email protected]>
Co-authored-by: Gaurav-Aggarwal-AWS <[email protected]>
Co-authored-by: Gaurav Aggarwal <[email protected]>

* Fix freertos_kernel cmake property, Posix Port (FreeRTOS#640)

* Fix freertos_kernel cmake property, Posix Port

* Moves the `set_property()` call below the target definition in top level CMakeLists file
* Corrects billion value from `ULL` suffix (not C90 compliant) to `UL` suffix with cast to uint64_t

* Add blank line to CMakeLists.txt

* Add missing FreeRTOS+ defines

* Run kernel demos and unit tests for PR changes (FreeRTOS#645)

* Run kernel demos and unit tests for PR changes

Kernel demos check builds multiple demos from FreeRTOS/FreeRTOS and
unit tests check runs unit tests in FreeRTOS/FreeRTOS. Both of these
checks currently use main branch of FreeRTOS-Kernel. This commits
updates these checks to use the changes in the PR.

Signed-off-by: Gaurav Aggarwal <[email protected]>

* Do not specify PR SHA explicitly as that is default

Signed-off-by: Gaurav Aggarwal <[email protected]>

* Remove explicit PR SHA from kernel checks

Signed-off-by: Gaurav Aggarwal <[email protected]>

---------

Signed-off-by: Gaurav Aggarwal <[email protected]>

* Add functions to get the buffers of statically created objects (FreeRTOS#641)

Added various ...GetStaticBuffer() functions to get the buffers of statically
created objects.
---------
Co-authored-by: Paul Bartell <[email protected]>
Co-authored-by: Nikhil Kamath <[email protected]>
Co-authored-by: Gaurav Aggarwal <[email protected]>

* Cortex-M Assert when NVIC implements 8 PRIO bits (FreeRTOS#639)

* Cortex-M Assert when NVIC implements 8 PRIO bits

* Fix CM3 ports

* Fix ARM_CM3_MPU

* Fix ARM CM3

* Fix ARM_CM4_MPU

* Fix ARM_CM4

* Fix GCC ARM_CM7

* Fix IAR ARM ports

* Uncrustify changes

* Fix MikroC_ARM_CM4F port

* Fix MikroC_ARM_CM4F port-(2)

* Fix RVDS ARM ports

* Revert changes for Tasking/ARM_CM4F port

* Revert changes for Tasking/ARM_CM4F port-(2)

* Update port.c

Fix GCC/ARM_CM4F port

* Update port.c

* update GCC\ARM_CM4F port

* update port.c

* Assert to check configMAX_SYSCALL_INTERRUPT_PRIORITY is set to higher priority

* Fix merge error: remove duplicate code

* Fix typos

---------

Co-authored-by: Gaurav-Aggarwal-AWS <[email protected]>
Co-authored-by: Ubuntu <[email protected]>

* Remove C90 requirement from CMakeLists (FreeRTOS#649)

This is needed as it is breaking projects - https://forums.freertos.org/t/freertos-gcc-cmake/16984

We will re-evaluate and accordingly add this later.

Signed-off-by: Gaurav Aggarwal <[email protected]>

* Only add alignment padding when needed (FreeRTOS#650)

Heap 4 and Heap 5 add some padding to ensure that the allocated blocks
are always aligned to portBYTE_ALIGNMENT bytes. The code until now was
adding padding always even if the resulting block was already aligned.
This commits updates the code to only add padding if the resulting block
is not aligned.

Signed-off-by: Gaurav Aggarwal <[email protected]>

* add a missing comma (FreeRTOS#651)

* fix conversion warning (FreeRTOS#658)

FreeRTOS-Kernel/portable/GCC/ARM_CM4F/port.c:399:41: error: conversion from 'uint32_t' {aka 'long unsigned int'} to 'uint8_t' {aka 'unsigned char'} may change value [-Werror=conversion]

Signed-off-by: Vo Trung Chi <[email protected]>

* ARMv7M: Adjust implemented priority bit assertions (FreeRTOS#665)

Adjust assertions related to the CMSIS __NVIC_PRIO_BITS and FreeRTOS
configPRIO_BITS configuration macros such that these macros specify the
minimum number of implemented priority bits supported by a config
build rather than the exact number of implemented priority bits.

Related to Qemu issue FreeRTOS#1122

* Format portmacro.h in arm CM0 ports

* portable/ARM_CM0: Add xPortIsInsideInterrupt

Add missing xPortIsInsideInterrupt function to Cortex-M0 port.

---------

Signed-off-by: Gaurav Aggarwal <[email protected]>
Signed-off-by: Cervenka Dusan <[email protected]>
Signed-off-by: Devaraj Ranganna <[email protected]>
Signed-off-by: Keith Packard <[email protected]>
Signed-off-by: Vo Trung Chi <[email protected]>
Co-authored-by: Archit Gupta <[email protected]>
Co-authored-by: tcpluess <[email protected]>
Co-authored-by: pluess <[email protected]>
Co-authored-by: Gaurav-Aggarwal-AWS <[email protected]>
Co-authored-by: Chris Copeland <[email protected]>
Co-authored-by: David J. Fiddes <[email protected]>
Co-authored-by: Dusan Cervenka <[email protected]>
Co-authored-by: bbain <[email protected]>
Co-authored-by: Ju1He1 <[email protected]>
Co-authored-by: Aniruddha Kanhere <[email protected]>
Co-authored-by: phelter <[email protected]>
Co-authored-by: jacky309 <[email protected]>
Co-authored-by: Jacques GUILLOU <[email protected]>
Co-authored-by: Devaraj Ranganna <[email protected]>
Co-authored-by: Gaurav Aggarwal <[email protected]>
Co-authored-by: kar-rahul-aws <[email protected]>
Co-authored-by: Nikhil Kamath <[email protected]>
Co-authored-by: Keith Packard <[email protected]>
Co-authored-by: Keith Packard <[email protected]>
Co-authored-by: Joseph Julicher <[email protected]>
Co-authored-by: Paul Bartell <[email protected]>
Co-authored-by: Christos Zosimidis <[email protected]>
Co-authored-by: Kody Stribrny <[email protected]>
Co-authored-by: Holden <holden-zenithaerotech.com>
Co-authored-by: Darian <[email protected]>
Co-authored-by: Ubuntu <[email protected]>
Co-authored-by: Nicolas <[email protected]>
Co-authored-by: Vo Trung Chi <[email protected]>
ActoryOu pushed a commit to ActoryOu/FreeRTOS-Kernel that referenced this pull request Apr 25, 2023
* Update XMOS AICORE conflict (chinglee-iot#77)

* Define portBASE_TYPE in XMOS AICORE porting

* Update enter critical from ISR API

* Fix run time stats for SMP (chinglee-iot#76)

* Update get idle tasks stats

* Fix get task stats

* Fix missing configNUM_CORES

* Update the uxSchedulerSuspended after prvCheckForRunStateChange (chinglee-iot#62)

* Update the uxSchedulerSuspended after the prvCheckForRunStateChange to
  prevent race condition in fromISR APIs

* Fix SMP dev branch CI errors (chinglee-iot#79)

* Fix uncrustify

* Update lexicon

* Remove tailing space

* Ignore XMOS AICORE header check

* Fix ulTotalRunTime and ulTaskSwitchedInTime (chinglee-iot#80)

* SMP has multiple ulTotalRunTime and ulTaskSwitchedInTime

* Smp dev compelete merge main 20230424 (chinglee-iot#78)

* Fix array-bounds compiler warning on gcc11+ in list.h (FreeRTOS#580)

listGET_OWNER_OF_NEXT_ENTRY computes `( pxConstList )->pxIndex->pxNext` after
verifying that `( pxConstList )->pxIndex` points to `xListEnd`, which due to
being a MiniListItem_t, can be shorter than a ListItem_t. Thus,
`( pxConstList )->pxIndex` is a `ListItem_t *` that extends past the end of the
`List_t` whose `xListEnd` it points to. This is fixed by accessing `pxNext`
through a `MiniListItem_t` instead.

* move the prototype for vApplicationIdleHook to task.h. (FreeRTOS#600)

Co-authored-by: pluess <[email protected]>
Co-authored-by: Gaurav-Aggarwal-AWS <[email protected]>

* Update equal priority task preemption (FreeRTOS#603)

* vTaskResume and vTaskPrioritySet don't preempt equal priority task

* Update vTaskResumeAll not to preempt task with equal priority

* Fix in xTaskResumeFromISR

* Update FreeRTOS/FreeRTOS build checks (FreeRTOS#613)

This is needed to be compatible with the refactoring done in this
PR - FreeRTOS/FreeRTOS#889

Signed-off-by: Gaurav Aggarwal <[email protected]>

Signed-off-by: Gaurav Aggarwal <[email protected]>

* Add ulTaskGetRunTimeCounter and ulTaskGetRunTimePercent (FreeRTOS#611)

Allow ulTaskGetIdleRunTimeCounter and ulTaskGetIdleRunTimePercent to be
used whenever configGENERATE_RUN_TIME_STATS is enabled, as this is the
only requirement for these functions to work.

* Fix some CMake documentation typos (FreeRTOS#616)

The quick start instructions for CMake mention the "master"
git branch which has been replaced by "main" in the current
repo.

The main CMakeLists.txt documents how to integrate a
custom port. Fix a typo in the suggested CMake code.

* Added support of 64bit events. (FreeRTOS#597)

* Added support of 64bit even

Signed-off-by: Cervenka Dusan <[email protected]>

* Added missing brackets

Signed-off-by: Cervenka Dusan <[email protected]>

* Made proper name for tick macro.

Signed-off-by: Cervenka Dusan <[email protected]>

* Improved macro evaluation

Signed-off-by: Cervenka Dusan <[email protected]>

* Fixed missed port files  + documentation

Signed-off-by: Cervenka Dusan <[email protected]>

* Changes made on PR

Signed-off-by: Cervenka Dusan <[email protected]>

* Fix macro definition.

Signed-off-by: Cervenka Dusan <[email protected]>

* Formatted code with uncrustify

Signed-off-by: Cervenka Dusan <[email protected]>

---------

Signed-off-by: Cervenka Dusan <[email protected]>

* Introduce portMEMORY_BARRIER for Microblaze port. (FreeRTOS#621)

The introduction of `portMEMORY_BARRIER` will ensure
the places in the kernel use a barrier will work.
For example, `xTaskResumeAll` has a memory barrier
to ensure its correctness when compiled with optimization
enabled. Without the barrier `xTaskResumeAll` can fail
(e.g. start reading and writing to address 0 and/or
infinite looping) when `xPendingReadyList` contains more
than one task to restore.

In `xTaskResumeAll` the compiler chooses to cache the
`pxTCB` the first time through the loop for use
in every subsequent loop. This is incorrect as the
removal of `pxTCB->xEventListItem` will actually
change the value of `pxTCB` if it was read again
at the top of the loop. The barrier forces the compiler
to read `pxTCB` again at the top of the loop.

The compiler is operating correctly. The removal
`pxTCB->xEventListItem` executes on a `List_t *`
and `ListItem_t *`.  This means that the compiler
can assume that any `MiniListItem_t` values are
unchanged by the loop (i.e. "strict-aliasing").
This allows the compiler to cache `pxTCB` as it
is obtained via a `MiniListItem_t`. This is incorrect
in this case because it is possible for a `ListItem_t *`
to actually alias a `MiniListItem_t`. This is technically
a "violation of aliasing rules" so we use the the barrier
to disable the strict-aliasing optimization in this loop.

* Do not call exit() on MSVC Port when calling vPortEndScheduler (FreeRTOS#624)

* make port exitable

* correctly set xPortRunning to False

* add suggestions from Review

Co-authored-by: Gaurav-Aggarwal-AWS <[email protected]>

* add suggestions from Review

Co-authored-by: Gaurav-Aggarwal-AWS <[email protected]>

---------

Co-authored-by: Gaurav-Aggarwal-AWS <[email protected]>

* Update PR template to include checkbox for Unit Test related changes (FreeRTOS#627)

* Fix build failure introduced in PR FreeRTOS#597 (FreeRTOS#629)

The PR FreeRTOS#597 introduced a new config option configTICK_TYPE_WIDTH_IN_BITS
which can be defined to one of the following:
* TICK_TYPE_WIDTH_16_BITS - Tick type is 16 bit wide.
* TICK_TYPE_WIDTH_32_BITS - Tick type is 32 bit wide.
* TICK_TYPE_WIDTH_64_BITS - Tick type is 64 bit wide.

Earlier we supported 16 and 32 bit width for tick type which was
controlled using the config option configUSE_16_BIT_TICKS. The PR
tried to maintain backward compatibility by honoring
configUSE_16_BIT_TICKS. The backward compatibility did not work as
expected though, as the macro configTICK_TYPE_WIDTH_IN_BITS was used
before it was defined. This PR addresses it by ensuring that the macro
configTICK_TYPE_WIDTH_IN_BITS is defined before it is used.

Testing
1. configUSE_16_BIT_TICKS is defined to 0.

Source (function xTaskIncrementTick in tasks.c):
```
const TickType_t xConstTickCount = xTickCount + ( TickType_t ) 1;
```

Assembly:
```
109e:       4b50            ldr     r3, [pc, FreeRTOS#320]  ; (11e0 <xTaskIncrementTick+0x150>)
10a0:       f8d3 4134       ldr.w   r4, [r3, FreeRTOS#308]  ; 0x134
10a4:       3401            adds    r4, #1
10a6:       f8c3 4134       str.w   r4, [r3, FreeRTOS#308]  ; 0x134
```

It is clear from assembly that the tick type is 32 bit.

2. configUSE_16_BIT_TICKS is defined to 1.

Source (function xTaskIncrementTick in tasks.c):
```
const TickType_t xConstTickCount = xTickCount + ( TickType_t ) 1;
```

Assembly:
```
10e2:       4b53            ldr     r3, [pc, FreeRTOS#332]  ; (1230 <xTaskIncrementTick+0x15c>)
10e4:       f8b3 4134       ldrh.w  r4, [r3, FreeRTOS#308]  ; 0x134
10e8:       b2a4            uxth    r4, r4
10ea:       3401            adds    r4, #1
10ec:       b2a4            uxth    r4, r4
10ee:       f8a3 4134       strh.w  r4, [r3, FreeRTOS#308]  ; 0x134
```

It is clear from assembly that the tick type is 16 bit.

3. configTICK_TYPE_WIDTH_IN_BITS is defined to TICK_TYPE_WIDTH_16_BITS.

Source (function xTaskIncrementTick in tasks.c):
```
const TickType_t xConstTickCount = xTickCount + ( TickType_t ) 1;
```

Assembly:
```
10e2:       4b53            ldr     r3, [pc, FreeRTOS#332]  ; (1230 <xTaskIncrementTick+0x15c>)
10e4:       f8b3 4134       ldrh.w  r4, [r3, FreeRTOS#308]  ; 0x134
10e8:       b2a4            uxth    r4, r4
10ea:       3401            adds    r4, #1
10ec:       b2a4            uxth    r4, r4
10ee:       f8a3 4134       strh.w  r4, [r3, FreeRTOS#308]  ; 0x134
```

It is clear from assembly that the tick type is 16 bit.

4. configTICK_TYPE_WIDTH_IN_BITS is defined to TICK_TYPE_WIDTH_32_BITS.

Source (function xTaskIncrementTick in tasks.c):
```
const TickType_t xConstTickCount = xTickCount + ( TickType_t ) 1;
```

Assembly:
```
109e:       4b50            ldr     r3, [pc, FreeRTOS#320]  ; (11e0 <xTaskIncrementTick+0x150>)
10a0:       f8d3 4134       ldr.w   r4, [r3, FreeRTOS#308]  ; 0x134
10a4:       3401            adds    r4, #1
10a6:       f8c3 4134       str.w   r4, [r3, FreeRTOS#308]  ; 0x134
```

It is clear from assembly that the tick type is 32 bit.

5. configTICK_TYPE_WIDTH_IN_BITS is defined to TICK_TYPE_WIDTH_64_BITS.

```
 #error configTICK_TYPE_WIDTH_IN_BITS set to unsupported tick type width.
```

The testing was done for GCC/ARM_CM3 port which does not support 64 bit
tick type.

6. Neither configUSE_16_BIT_TICKS nor configTICK_TYPE_WIDTH_IN_BITS
defined.

```
 #error Missing definition:  One of configUSE_16_BIT_TICKS and
 configTICK_TYPE_WIDTH_IN_BITS must be defined in FreeRTOSConfig.h.
 See the Configuration section of the FreeRTOS API documentation for
 details.
```

7. Both configUSE_16_BIT_TICKS and configTICK_TYPE_WIDTH_IN_BITS defined.

```
 #error Only one of configUSE_16_BIT_TICKS and
 configTICK_TYPE_WIDTH_IN_BITS must be defined in FreeRTOSConfig.h.
 See the Configuration section of the FreeRTOS API documentation for
 details.
```

Related issue - FreeRTOS#628

Signed-off-by: Gaurav Aggarwal <[email protected]>

* Feature/fixing clang gnu compiler warnings (FreeRTOS#620)

* Adding in ability to support a library for freertos_config and a custom freertos_kernel_port (FreeRTOS#558)

* Using single name definition for libraries everywhere. (FreeRTOS#558)

* Supporting backwards compatibility with FREERTOS_CONFIG_FILE_DIRECTORY (FreeRTOS#571)

* Removing compiler warnings for GNU and Clang. (FreeRTOS#571)

* Added in documentation on how to consume from a main project. Added default PORT selection for native POSIX and MINGW platforms.

* Only adding freertos_config if it exists. Removing auto generation of it from a FREERTOS_CONFIG_FILE_DIRECTORY.

* Fixing clang and gnu compiler warnings.

* Adding in project information and how to compile for GNU/clang

* Fixing compiler issue with unused variable - no need to declare variable.

* Adding in compile warnings for linux builds that kernel is okay with using.

* Fixing more extra-semi-stmt clang warnings.

* Moving definition of hooks into header files if features are enabled.

* Fixing formatting with uncrustify.

* Fixing merge conflicts with main merge.

* Fixing compiler errors due to merge issues and formatting.

* Fixing Line feeds.

* Adding 'portNORETURN' into portmacros.h. Other Updates based on PR request

* Further clean-up of clang and clang-tidy issues.

* Removing compiler specific pragmas from common c files.

* Fixing missing lexicon entry and uncrustify formatting changes.

* Resolving merge issue multiple defnitions of proto for prvIdleTask

* Fixing formatting issues that are not covered by uncrustify. Use clang-tidy instead if you want this level of control.

* More uncrustify formatting issues.

* Fixing extra bracket in #if statement.

---------

Co-authored-by: Gaurav-Aggarwal-AWS <[email protected]>

* POSIX port fixes (FreeRTOS#626)

* Fix types in POSIX port

Use TaskFunction_t and StackType_t as other ports do.

* Fix portTICK_RATE_MICROSECONDS in POSIX port

---------

Co-authored-by: Jacques GUILLOU <[email protected]>
Co-authored-by: Gaurav-Aggarwal-AWS <[email protected]>

* Cortex-M35P: Add Cortex-M35P port (FreeRTOS#631)

* Cortex-M35P: Add Cortex-M35P port

The Cortex-M35P support added to kernel. The port hasn't been
validated yet with TF-M. Hence TF-M support is not included in this
port.

Signed-off-by: Devaraj Ranganna <[email protected]>

* Add portNORETURN to the newly added portmacro.h

Signed-off-by: Gaurav Aggarwal <[email protected]>

---------

Signed-off-by: Devaraj Ranganna <[email protected]>
Signed-off-by: Gaurav Aggarwal <[email protected]>
Co-authored-by: Gaurav-Aggarwal-AWS <[email protected]>
Co-authored-by: Gaurav Aggarwal <[email protected]>
Co-authored-by: kar-rahul-aws <[email protected]>

* Introduced Github Status Badge for Unit Tests (FreeRTOS#634)

* Introduced Github Status Badge for Unit Tests

* Github status badge to point to latest run

* Github status badge UT points to latest results

* Fixed URL for Github Status badge

---------

Co-authored-by: kar-rahul-aws <[email protected]>

* Remove C99 requirement from CMake file (FreeRTOS#633)

* Remove C99 requirement from CMake file

The kernel source is C89 compliant and does not need C99.

Signed-off-by: Gaurav Aggarwal <[email protected]>

* Explicitly set C89 requirement for kernel

Signed-off-by: Gaurav Aggarwal <[email protected]>

---------

Signed-off-by: Gaurav Aggarwal <[email protected]>

* Add Thread Local Storage (TLS) support using Picolibc functions (FreeRTOS#343)

* Pass top of stack to configINIT_TLS_BLOCK

Picolibc wants to allocate the per-task TLS block within the stack
segment, so it will need to modify the top of stack value. Pass the
pxTopOfStack variable to make this explicit.

Signed-off-by: Keith Packard <[email protected]>

* Move newlib-specific definitions to separate file

This reduces the clutter in FreeRTOS.h caused by having newlib-specific
macros present there.

Signed-off-by: Keith Packard <[email protected]>

* Make TLS code depend only on configUSE_C_RUNTIME_TLS_SUPPORT

Remove reference to configUSE_NEWLIB_REENTRANT as that only works
when using newlib. configUSE_C_RUNTIME_TLS_SUPPORT is always
set when configUSE_NEWLIB_REENTRANT is set, so using both was
redundant in that case.

Signed-off-by: Keith Packard <[email protected]>

* portable-ARC: Adapt ARC support to use generalized TLS support

With generalized thread local storage (TLS) support present in the
core, the two ARC ports need to have the changes to the TCB mirrored
to them.

Signed-off-by: Keith Packard <[email protected]>

* Add Thread Local Storage (TLS) support using Picolibc functions

This patch provides definitions of the general TLS support macros in
terms of the Picolibc TLS support functions.

Picolibc is normally configured to use TLS internally for all
variables that are intended to be task-local, so these changes are
necessary for picolibc to work correctly with FreeRTOS.

The picolibc helper functions rely on elements within the linker
script to arrange the TLS data in memory and define some symbols.
Applications wanting to use this mechanism will need changes in their
linker script when migrating to picolibc.

Signed-off-by: Keith Packard <[email protected]>

---------

Signed-off-by: Keith Packard <[email protected]>
Co-authored-by: Keith Packard <[email protected]>
Co-authored-by: Gaurav-Aggarwal-AWS <[email protected]>

* Interrupt priority assert improvements for CM3/4/7 (FreeRTOS#602)

* Interrupt priority assert improvements for CM3/4/7

In the ARM_CM3, ARM_CM4, and ARM_CM7 ports, change the assertion that
`configMAX_SYSCALL_INTERRUPT_PRIORITY` is nonzero to account for the
number of priority bits implemented by the hardware.

Change these ports to also use the lowest priority for PendSV and
SysTick, ignoring `configKERNEL_INTERRUPT_PRIORITY`.

* Remove not needed configKERNEL_INTERRUPT_PRIORITY define

Signed-off-by: Gaurav Aggarwal <[email protected]>

---------

Signed-off-by: Gaurav Aggarwal <[email protected]>
Co-authored-by: Gaurav-Aggarwal-AWS <[email protected]>
Co-authored-by: Gaurav Aggarwal <[email protected]>

* Introduced code coverage status badge (FreeRTOS#635)

* Introduced code coverage status badge

* Trying to fix the URL checker issue

* Fix URL check

Signed-off-by: Gaurav Aggarwal <[email protected]>

---------

Signed-off-by: Gaurav Aggarwal <[email protected]>
Co-authored-by: Gaurav Aggarwal <[email protected]>
Co-authored-by: Gaurav-Aggarwal-AWS <[email protected]>

* added portPOINTER_SIZE_TYPE and SIZE_MAX definition to PIC24/dsPIC port (FreeRTOS#636)

* added portPOINTER_SIZE_TYPE definition to PIC24/dsPIC port

* Added SIZE_MAX definition to PIC24/dsPIC33

* Fix TLS and stack alignment when using picolibc (FreeRTOS#637)

Both the TLS block and stack must be correctly aligned when using
picolibc. The architecture stack alignment is represented by the
portBYTE_ALIGNMENT_MASK and the TLS block alignment is provided by the
Picolibc _tls_align() inline function for Picolibc version 1.8 and
above. For older versions of Picolibc, we'll assume that the TLS block
requires the same alignment as the stack.

For downward growing stacks, this requires aligning the start of the
TLS block to the maximum of the stack alignment and the TLS
alignment. With this, both the TLS block and stack will now be
correctly aligned.

For upward growing stacks, the two areas must be aligned
independently; the TLS block is aligned from the start of the stack,
then the tls space is allocated, and then the stack is aligned above
that.

It's probably useful to know here that the linker ensures that
variables within the TLS block are assigned offsets that match their
alignment requirements. If the TLS block itself is correctly aligned,
then everything within will also be.

I have only tested the downward growing stack branch of this patch.

Signed-off-by: Keith Packard <[email protected]>
Co-authored-by: Keith Packard <[email protected]>
Co-authored-by: Gaurav-Aggarwal-AWS <[email protected]>

* Enable building the GCC Cortex-R5 port without an FPU (FreeRTOS#586)

* Ensure configUSE_TASK_FPU_SUPPORT option is set correctly

If one does enable the FPU of the Cortex-R5 processor, then the GCC
compiler will define the macro __ARM_FP. This can be used to ensure,
that the configUSE_TASK_FPU_SUPPORT is set accordingly.

* Enable the implementation of vPortTaskUsesFPU only if configUSE_TASK_FPU_SUPPORT is set to 1

* Remove error case in pxPortInitialiseStack

The case of configUSE_TASK_FPU_SUPPORT is 0 is now handled

* Enable access to FPU registers only if FPU is enabled

* Make minor formating changes

* Format ARM Cortex-R5 port

* Address review comments from @ChristosZosi

* Minor code review suggestions

Signed-off-by: Gaurav Aggarwal <[email protected]>

---------

Signed-off-by: Gaurav Aggarwal <[email protected]>
Co-authored-by: Christos Zosimidis <[email protected]>
Co-authored-by: Gaurav-Aggarwal-AWS <[email protected]>
Co-authored-by: Gaurav Aggarwal <[email protected]>

* Fix freertos_kernel cmake property, Posix Port (FreeRTOS#640)

* Fix freertos_kernel cmake property, Posix Port

* Moves the `set_property()` call below the target definition in top level CMakeLists file
* Corrects billion value from `ULL` suffix (not C90 compliant) to `UL` suffix with cast to uint64_t

* Add blank line to CMakeLists.txt

* Add missing FreeRTOS+ defines

* Run kernel demos and unit tests for PR changes (FreeRTOS#645)

* Run kernel demos and unit tests for PR changes

Kernel demos check builds multiple demos from FreeRTOS/FreeRTOS and
unit tests check runs unit tests in FreeRTOS/FreeRTOS. Both of these
checks currently use main branch of FreeRTOS-Kernel. This commits
updates these checks to use the changes in the PR.

Signed-off-by: Gaurav Aggarwal <[email protected]>

* Do not specify PR SHA explicitly as that is default

Signed-off-by: Gaurav Aggarwal <[email protected]>

* Remove explicit PR SHA from kernel checks

Signed-off-by: Gaurav Aggarwal <[email protected]>

---------

Signed-off-by: Gaurav Aggarwal <[email protected]>

* Add functions to get the buffers of statically created objects (FreeRTOS#641)

Added various ...GetStaticBuffer() functions to get the buffers of statically
created objects.
---------
Co-authored-by: Paul Bartell <[email protected]>
Co-authored-by: Nikhil Kamath <[email protected]>
Co-authored-by: Gaurav Aggarwal <[email protected]>

* Cortex-M Assert when NVIC implements 8 PRIO bits (FreeRTOS#639)

* Cortex-M Assert when NVIC implements 8 PRIO bits

* Fix CM3 ports

* Fix ARM_CM3_MPU

* Fix ARM CM3

* Fix ARM_CM4_MPU

* Fix ARM_CM4

* Fix GCC ARM_CM7

* Fix IAR ARM ports

* Uncrustify changes

* Fix MikroC_ARM_CM4F port

* Fix MikroC_ARM_CM4F port-(2)

* Fix RVDS ARM ports

* Revert changes for Tasking/ARM_CM4F port

* Revert changes for Tasking/ARM_CM4F port-(2)

* Update port.c

Fix GCC/ARM_CM4F port

* Update port.c

* update GCC\ARM_CM4F port

* update port.c

* Assert to check configMAX_SYSCALL_INTERRUPT_PRIORITY is set to higher priority

* Fix merge error: remove duplicate code

* Fix typos

---------

Co-authored-by: Gaurav-Aggarwal-AWS <[email protected]>
Co-authored-by: Ubuntu <[email protected]>

* Remove C90 requirement from CMakeLists (FreeRTOS#649)

This is needed as it is breaking projects - https://forums.freertos.org/t/freertos-gcc-cmake/16984

We will re-evaluate and accordingly add this later.

Signed-off-by: Gaurav Aggarwal <[email protected]>

* Only add alignment padding when needed (FreeRTOS#650)

Heap 4 and Heap 5 add some padding to ensure that the allocated blocks
are always aligned to portBYTE_ALIGNMENT bytes. The code until now was
adding padding always even if the resulting block was already aligned.
This commits updates the code to only add padding if the resulting block
is not aligned.

Signed-off-by: Gaurav Aggarwal <[email protected]>

* add a missing comma (FreeRTOS#651)

* fix conversion warning (FreeRTOS#658)

FreeRTOS-Kernel/portable/GCC/ARM_CM4F/port.c:399:41: error: conversion from 'uint32_t' {aka 'long unsigned int'} to 'uint8_t' {aka 'unsigned char'} may change value [-Werror=conversion]

Signed-off-by: Vo Trung Chi <[email protected]>

* ARMv7M: Adjust implemented priority bit assertions (FreeRTOS#665)

Adjust assertions related to the CMSIS __NVIC_PRIO_BITS and FreeRTOS
configPRIO_BITS configuration macros such that these macros specify the
minimum number of implemented priority bits supported by a config
build rather than the exact number of implemented priority bits.

Related to Qemu issue FreeRTOS#1122

* Format portmacro.h in arm CM0 ports

* portable/ARM_CM0: Add xPortIsInsideInterrupt

Add missing xPortIsInsideInterrupt function to Cortex-M0 port.

---------

Signed-off-by: Gaurav Aggarwal <[email protected]>
Signed-off-by: Cervenka Dusan <[email protected]>
Signed-off-by: Devaraj Ranganna <[email protected]>
Signed-off-by: Keith Packard <[email protected]>
Signed-off-by: Vo Trung Chi <[email protected]>
Co-authored-by: Archit Gupta <[email protected]>
Co-authored-by: tcpluess <[email protected]>
Co-authored-by: pluess <[email protected]>
Co-authored-by: Gaurav-Aggarwal-AWS <[email protected]>
Co-authored-by: Chris Copeland <[email protected]>
Co-authored-by: David J. Fiddes <[email protected]>
Co-authored-by: Dusan Cervenka <[email protected]>
Co-authored-by: bbain <[email protected]>
Co-authored-by: Ju1He1 <[email protected]>
Co-authored-by: Aniruddha Kanhere <[email protected]>
Co-authored-by: phelter <[email protected]>
Co-authored-by: jacky309 <[email protected]>
Co-authored-by: Jacques GUILLOU <[email protected]>
Co-authored-by: Devaraj Ranganna <[email protected]>
Co-authored-by: Gaurav Aggarwal <[email protected]>
Co-authored-by: kar-rahul-aws <[email protected]>
Co-authored-by: Nikhil Kamath <[email protected]>
Co-authored-by: Keith Packard <[email protected]>
Co-authored-by: Keith Packard <[email protected]>
Co-authored-by: Joseph Julicher <[email protected]>
Co-authored-by: Paul Bartell <[email protected]>
Co-authored-by: Christos Zosimidis <[email protected]>
Co-authored-by: Kody Stribrny <[email protected]>
Co-authored-by: Holden <holden-zenithaerotech.com>
Co-authored-by: Darian <[email protected]>
Co-authored-by: Ubuntu <[email protected]>
Co-authored-by: Nicolas <[email protected]>
Co-authored-by: Vo Trung Chi <[email protected]>

* Fix for c90 compiler

---------

Signed-off-by: Gaurav Aggarwal <[email protected]>
Signed-off-by: Cervenka Dusan <[email protected]>
Signed-off-by: Devaraj Ranganna <[email protected]>
Signed-off-by: Keith Packard <[email protected]>
Signed-off-by: Vo Trung Chi <[email protected]>
Co-authored-by: Archit Gupta <[email protected]>
Co-authored-by: tcpluess <[email protected]>
Co-authored-by: pluess <[email protected]>
Co-authored-by: Gaurav-Aggarwal-AWS <[email protected]>
Co-authored-by: Chris Copeland <[email protected]>
Co-authored-by: David J. Fiddes <[email protected]>
Co-authored-by: Dusan Cervenka <[email protected]>
Co-authored-by: bbain <[email protected]>
Co-authored-by: Ju1He1 <[email protected]>
Co-authored-by: Aniruddha Kanhere <[email protected]>
Co-authored-by: phelter <[email protected]>
Co-authored-by: jacky309 <[email protected]>
Co-authored-by: Jacques GUILLOU <[email protected]>
Co-authored-by: Devaraj Ranganna <[email protected]>
Co-authored-by: Gaurav Aggarwal <[email protected]>
Co-authored-by: kar-rahul-aws <[email protected]>
Co-authored-by: Nikhil Kamath <[email protected]>
Co-authored-by: Keith Packard <[email protected]>
Co-authored-by: Keith Packard <[email protected]>
Co-authored-by: Joseph Julicher <[email protected]>
Co-authored-by: Paul Bartell <[email protected]>
Co-authored-by: Christos Zosimidis <[email protected]>
Co-authored-by: Kody Stribrny <[email protected]>
Co-authored-by: Darian <[email protected]>
Co-authored-by: Ubuntu <[email protected]>
Co-authored-by: Nicolas <[email protected]>
Co-authored-by: Vo Trung Chi <[email protected]>
moninom1 pushed a commit to moninom1/FreeRTOS that referenced this pull request Apr 27, 2023
Add unit tests for the various ...GetStaticBuffer() functions added in
FreeRTOS/FreeRTOS-Kernel#641.
---------

Co-authored-by: Paul Bartell <[email protected]>
amazonKamath pushed a commit to FreeRTOS/FreeRTOS that referenced this pull request Apr 27, 2023
* Update Readme for the FreeRTOS_PLUS_TCP_ECHO_QEMU_msp2 (#939)

Update Readme for the FreeRTOS_PLUS_TCP_ECHO_QEMU_msp2

Signed-off-by: Gaurav Aggarwal <[email protected]>
Co-authored-by: Gaurav Aggarwal <[email protected]>

* Update TCPEchoClient_SingleTasks.c (#968)

Bug fix for #967

* Remove cast from configMINIMAL_STACK_SIZE (#971)

The configMINIMAL_STACK_SIZE was defined to PTHREAD_STACK_MIN with cast
to unsigned short. This cast cab be too restrictive and result in
truncation on some platforms. This commit removes this unnecessary cast.

Related issue - #967

Signed-off-by: Gaurav Aggarwal <[email protected]>

* Add unit tests for GetStaticBuffer functions (#964)

Add unit tests for the various ...GetStaticBuffer() functions added in
FreeRTOS/FreeRTOS-Kernel#641.
---------

Co-authored-by: Paul Bartell <[email protected]>

* Demo/CORTEX_M3_MPS2_QEMU_GCC: Prepare startup.c for use with --gc-sections

Ensure that the handler2_address_const location will be correctly
aligned when compiled to a separate section.

Add the 'used' attribute to isr_vector to ensure it will not be elided
from the output.

Signed-off-by: Keith Packard <[email protected]>

* Demo/CORTEX_M3_MPS2_QEMU_GCC: Fix use of -ffunction-sections -fdata-sections

For these options to be of any use, they must be passed to the
compiler when building object files and then the --gc-sections flag
must be passed to the linker.

Add -ffunction-sections -fdata-sections to CFLAGS and then add
-Wl,--gc-sections to LDFLAGS.

Signed-off-by: Keith Packard <[email protected]>

* Demo/CORTEX_M3_MPS2_QEMU_GCC: Enable picolibc TLS when needed

When building with Picolibc that has TLS support, enable the relevant
FreeRTOS code.

Signed-off-by: Keith Packard <[email protected]>

* Demo/CORTEX_M3_MPS2_QEMU_GCC: Provide picolibc syscall implementation

Instead of a set of POSIX-compatible APIs as needed by newlib,
picolibc needs a FILE struct allocated that references a function to
output a single character. Picolibc also doesn't need sbrk as it has
its own version

Signed-off-by: Keith Packard <[email protected]>

* Demo/CORTEX_M3_MPS2_QEMU_GCC: Add TLS support to linker script

Allocate ROM for initialized thread local storage variables. Allocate
TLS offsets for all thread local storage variables.

Signed-off-by: Keith Packard <[email protected]>

* Demo/CORTEX_M3_MPS2_QEMU_GCC: Define symbols needed for picolibc sbrk implementation

Picolibc has an internal version of sbrk that uses slightly different
symbol names than the demo provides. Add these in the linker script.

Signed-off-by: Keith Packard <[email protected]>

* Demo/CORTEX_M3_MPS2_QEMU_GCC: Add option to build with picolibc

When built with PICOLIBC=1, selects picolibc as the C library by
removing the newlib-nano linker flags and adding
--specs=picolibc.specs to the compiler flags. This also selects the
integer-only printf variant provided within picolibc to reduce flash
use by adding -DPICOLIBC_INTEGER_PRINTF_SCANF.

Signed-off-by: Keith Packard <[email protected]>

* Demo/RISC-V_RV32_QEMU_VIRT_GCC: Enable configUSE_TRACE_FACILITY

I get a build error when this is not set as it (or
configGENERATE_RUN_TIME_STATS) are required when using
configUSE_STATS_FORMATTING_FUNCTIONS

Signed-off-by: Keith Packard <[email protected]>

* Demo/RISC-V_RV32_QEMU_VIRT_GCC: Set -march=rv32imac_zicsr

Need to add _zicsr for more recent Risc-V toolchains which don't add
this extension to the default set anymore.

Signed-off-by: Keith Packard <[email protected]>

* Demo/RISC-V_RV32_QEMU_VIRT_GCC: Enable picolibc TLS when needed

When building with Picolibc that has TLS support, enable the relevant
FreeRTOS code.

Signed-off-by: Keith Packard <[email protected]>

* Demo/RISC-V_RV32_QEMU_VIRT_GCC: Add TLS support to linker script

Allocate ROM for initialized thread local storage variables. Allocate
TLS offsets for all thread local storage variables.

Signed-off-by: Keith Packard <[email protected]>

* Demo/RISC-V_RV32_QEMU_VIRT_GCC: Add option to build with picolibc

When built with PICOLIBC=1, selects picolibc as the C library, uses
semihosting to display messages and uses picolibc stdio for output.

Signed-off-by: Keith Packard <[email protected]>

* Improve vAssertCalled function to include filename / line number info.

* Enable newlib and picolibc thread local storage

* Increase minimal stack size config to 2048 words

Accomodates increased usage due to newlib thread local storage

* Add register tests to H743ZI2 demo project (#977)

Add register tests to H743ZI2 demo project.

Signed-off-by: Gaurav Aggarwal <[email protected]>
Co-authored-by: kar-rahul-aws <[email protected]>

* Add register tests to Nucleo-L152RE project (#982)

* Add reg tests for CORTEX_MPU_M3_NUCLEO_L152RE

Signed-off-by: Gaurav Aggarwal <[email protected]>
Co-authored-by: kar-rahul-aws <[email protected]>

* Set configMAX_SYSCALL_INTERRUPT_PRIORITY to 4 (#984)

Set configMAX_SYSCALL_INTERRUPT_PRIORITY to 4 instead of 5 to avoid hitting the assert in `Source/portable/GCC/ARM_CM3/port.c` (`configASSERT( ( configMAX_SYSCALL_INTERRUPT_PRIORITY & 0x1U ) == 0U ); `)

* Added a link to the community supported demos repo in the demos readme.txt (#987)

* Added a link to the community supported demos repo in the demos readme.txt

* Update FreeRTOS/Demo/readme.txt

Co-authored-by: Aniruddha Kanhere <[email protected]>

* Update and rename readme.txt to readme.md

---------

Co-authored-by: Aniruddha Kanhere <[email protected]>

* Added support for static memory allocation in FreeRTOS-Plus-CLI (#983)

* Added support for static memory allocation in FreeRTOS-Plus-CLI

* Removed relative include path

* removed whitespace changes

* Removed whitespace changes

* Code review suggestions

Signed-off-by: Gaurav Aggarwal <[email protected]>

* Fix spell check

Signed-off-by: Gaurav Aggarwal <[email protected]>

---------

Signed-off-by: Gaurav Aggarwal <[email protected]>
Co-authored-by: Marc-André Harvey <[email protected]>
Co-authored-by: Gaurav-Aggarwal-AWS <[email protected]>
Co-authored-by: Gaurav Aggarwal <[email protected]>

* Add reg tests to LPC55S69 project (#989)

* Update LPCXpresso55S69 SDK to 2.13.1

* Enable print from non-secure side

* Add register tests

Signed-off-by: Gaurav Aggarwal <[email protected]>

* Update M33F simulator Keil example (#990)

* Update M33F simulator Keil example

The example is updated to use latest CMSIS 5.9.0 and Device startup
2.1.0.

Signed-off-by: Devaraj Ranganna <[email protected]>

* Increase timeout and correct config file path in the secure project

Signed-off-by: Gaurav Aggarwal <[email protected]>

* Remove auto-generated files

Signed-off-by: Gaurav Aggarwal <[email protected]>

---------

Signed-off-by: Devaraj Ranganna <[email protected]>
Signed-off-by: Gaurav Aggarwal <[email protected]>
Co-authored-by: Gaurav Aggarwal <[email protected]>
Co-authored-by: Gaurav-Aggarwal-AWS <[email protected]>

* Add Reg tests for CORTEX M33F Keil Simulator Project (#991)

* Add Reg tests for CORTEX M33F Keil Simulator Project

* Code review suggestions

Signed-off-by: Gaurav Aggarwal <[email protected]>

* Fix hard fault because of main stack overflow

Signed-off-by: Gaurav Aggarwal <[email protected]>

---------

Signed-off-by: Gaurav Aggarwal <[email protected]>
Co-authored-by: Gaurav Aggarwal <[email protected]>

* Add reg tests to NuMaker M2351 project (#992)

* Add reg tests to NuMaker M2351 project

Signed-off-by: Gaurav Aggarwal <[email protected]>

* Add reg tests for IAR

Signed-off-by: Gaurav Aggarwal <[email protected]>

* Fix formatting check

Signed-off-by: Gaurav Aggarwal <[email protected]>

* Fix header check

Signed-off-by: Gaurav Aggarwal <[email protected]>

---------

Signed-off-by: Gaurav Aggarwal <[email protected]>

* Add reg tests to nRF9160 projects (#1001)

Signed-off-by: Gaurav Aggarwal <[email protected]>

* Fix incorrect file path in the project file (#1000)

Signed-off-by: Gaurav Aggarwal <[email protected]>

* Remove non-existent entry from the project file (#996)

This removes a warning in the IDE.

Signed-off-by: Gaurav Aggarwal <[email protected]>

* Add non trustzone (NTZ) projects for M2351 (#1003)

Signed-off-by: Gaurav Aggarwal <[email protected]>

---------

Signed-off-by: Gaurav Aggarwal <[email protected]>
Signed-off-by: Keith Packard <[email protected]>
Signed-off-by: Devaraj Ranganna <[email protected]>
Co-authored-by: kar-rahul-aws <[email protected]>
Co-authored-by: Gaurav Aggarwal <[email protected]>
Co-authored-by: Gaurav-Aggarwal-AWS <[email protected]>
Co-authored-by: Darian <[email protected]>
Co-authored-by: Paul Bartell <[email protected]>
Co-authored-by: Keith Packard <[email protected]>
Co-authored-by: kar-rahul-aws <[email protected]>
Co-authored-by: Sergio Soares <[email protected]>
Co-authored-by: Joseph Julicher <[email protected]>
Co-authored-by: Aniruddha Kanhere <[email protected]>
Co-authored-by: tabarnakos <[email protected]>
Co-authored-by: Marc-André Harvey <[email protected]>
Co-authored-by: Devaraj Ranganna <[email protected]>
espressif-bot pushed a commit to espressif/esp-idf that referenced this pull request May 13, 2023
This commit adds the various ...GetStaticBuffer() functions from upstream
FreeRTOS. See FreeRTOS/FreeRTOS-Kernel#641 for more
details.
chinglee-iot added a commit to chinglee-iot/FreeRTOS-Kernel that referenced this pull request May 17, 2023