summaryrefslogtreecommitdiffstats
path: root/spec/build/cpukit (follow)
Commit message (Collapse)AuthorAgeFilesLines
...
* score: Replace Objects_Name_or_id_lookup_errorsSebastian Huber2021-04-071-1/+0
| | | | | Replace Objects_Name_or_id_lookup_errors with new Status_Control codes. Get rid of the _Status_Object_name_errors_to_status lookup table.
* leon,tn-0018: work around GRLIB-TN-0018 errataDaniel Hellstrom2021-03-111-0/+1
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Overview ======== The errata is worked around in the kernel without requiring toolchain modifications. It is triggered the JMPL/RETT return from trap instruction sequence never generated by the compiler and. There are also other conditions that must must be true to trigger the errata, for example the instruction that the trap returns to has to be a JMPL instruction. The errata can only be triggered if certain data is corrected by ECC (inflicted by radiation), thus it can not be triggered under normal operation. For more information see: www.gaisler.com/notes Affected RTEMS target BSPs: * GR712RC * UT699 * UT700/699E The work around is enabled by defining __FIX_LEON3_TN0018 at build time. After applying the following GCC patch, GCC will set the define when compiling for an affected multilib: * GR712RC (-mcpu=leon3 -mfix-gr712rc) * UT700/UT699E (-mpcu=leon3 -mfix-ut700) * UT699 (-mcpu=leon -mfix-ut699) When building for another multilib and TN0018 is still required, it is possible to enable it on the RTEMS kernel configure line using the TARGET_CFLAGS (-D__FIX_LEON3FT_TN0018) or other by other means. The following GCC patch sets __FIX_LEON3FT_TN0018 for the affected RTEMS multilibs: --------- diff --git a/gcc/config/sparc/rtemself.h b/gcc/config/sparc/rtemself.h index 6570590..ddec98c 100644 --- a/gcc/config/sparc/rtemself.h +++ b/gcc/config/sparc/rtemself.h @@ -33,6 +33,8 @@ builtin_assert ("system=rtems"); \ if (sparc_fix_b2bst) \ builtin_define ("__FIX_LEON3FT_B2BST"); \ + if (sparc_fix_gr712rc || sparc_fix_ut700 || sparc_fix_ut699) \ + builtin_define ("__FIX_LEON3FT_TN0018"); \ } \ while (0) --------- Workaround Implementation ========================= In general there are two approaches that the workaround uses: A) avoid ECC restarting the RETT instruction B) avoid returning from trap to a JMPL instruction Where A) comes at a higher performance cost than B), so B) is used where posssible. B) can be achived for certain returns from trap handlers if trap entry is controlled by assembly, such as system calls. A) A special JMPL/RETT sequence where instruction cache is disabled temporarily to avoid RETT containing ECC errors, and reading of RETT source registers to "clean" them from incorrect ECC just before RETT is executed. B) The work around prevents JMPL after system calls (TA instruction) and modifies assembly code on return from traps jumping back to application code. Note that for some traps the trapped instruction is always re-executed and can therefore not trigger the errata, for example the SAVE instruction causing window overflow or an float instruction causing FPU disabled trap. RTEMS SPARC traps workaround implementation: NAME NOTE TRAP COMMENT * window overflow 1 - 0x05 always returns to a SAVE * window underflow 1 - 0x06 always returns to a RESTORE * interrupt traps 2 - 0x10..1f special rett sequence workaround * syscall 3 - 0x80 shutdown system - never returns * ABI flush windows 2 - 0x83 special rett sequence workaround * syscall_irqdis 4 - 0x89 * syscall_irqen 4 - 0x8A * syscall_irqdis_fp 1 - 0x8B always jumps back to FP instruction * syscall_lazy_fp_switch 5 - 0x04 A) jumps back to FP instruction, or to B) _Internal_error() starting with SAVE Notes: 1) no workaround needed because trap always returns to non-JMPL instruction 2) workaround implemented by special rett sequence 3) no workaround needed because system call never returns 4) workaround implemented by inserting NOP in system call generation. Thus fall into 1) when workaround is enabled and no trap handler fix needed. 5) trap handler branches into both 1) and returning to _Internal_error() which starts with a SAVE and besides since it shuts down the system that RETT should never be in cache (only executed once) so fix not necessary in this case. Any custom trap handlers may also have to be updated. To simplify that, helper work around assembly code in macros are available in a separate include file <libcpu/grlib-tn-0018.h>. Close #4155.
* build: Install <rtems/score/hash.h>Sebastian Huber2021-02-261-0/+1
| | | | Update #4267.
* score: Add Hash HandlerSebastian Huber2021-02-261-0/+1
| | | | Update #4267.
* rtems: Add rtems_get_build_label()Sebastian Huber2021-02-253-0/+19
| | | | Update #4269.
* build: Sort source listsSebastian Huber2021-02-2421-124/+124
| | | | Use the Python sorted() function to sort the "source" lists.
* score: Remove _CORE_barrier_Do_flush()Sebastian Huber2021-02-241-1/+0
| | | | Call _Thread_queue_Flush_critical() directly.
* rtems: Simplify signal handlingSebastian Huber2021-02-201-1/+0
| | | | | | | Remove superfluous ASR_Information::signals_posted. Move code out of trivial inline functions. Update #4244.
* libcsupport: Add sbrk greedy support to consume all sbrk memoryChris Johns2021-02-101-0/+1
| | | | | | | | | - Move the heap sbrk code into a separate routnine. - Update heap and workspace greedy allocators to use the common sbrk greedy support. Closes #3982
* score: Make FIFO thread queue ops publicSebastian Huber2021-02-061-0/+1
| | | | Update #4230.
* nios2: Allow ISR nesting in dispatch variantSebastian Huber2021-02-011-1/+0
| | | | | | Rename _Nios2_ISR_Dispatch_with_shadow_non_preemptive() in _Nios2_ISR_Dispatch_with_shadow_register_set(). Remove _Nios2_ISR_Dispatch_with_shadow_preemptive().
* arm/fvp: New BSPSebastian Huber2020-12-231-0/+1
| | | | | | | | This BSP supports the Arm Fixed Virtual Platform. Only the Cortex-R52 processor configuration is supported by the BSP. It should be easy to add support for other variants if needed. Update #4202.
* arm: Add support for Arm PMSAv8-32Sebastian Huber2020-12-221-0/+2
| | | | Update #4202.
* build: Fix duplicate install of jffs2.hSebastian Huber2020-12-161-1/+0
|
* shell: Add i2c and spi commandsChristian Mauderer2020-12-141-0/+4
| | | | | | | | This adds some commands that are usefull for debugging simple serial interfaces. Even if they are a complete re-implementation, the i2c* commands use a simmilar call like the Linux i2c tools.
* build: Add <rtems/rtems/clockimpl.h>Sebastian Huber2020-12-021-0/+1
|
* posix: Delete unused _POSIX_Fatal_error()Sebastian Huber2020-12-021-1/+0
|
* score: Delete empty pheapinit.cSebastian Huber2020-12-021-1/+0
|
* config: CONFIGURE_INIT_TASK_CONSTRUCT_STORAGE_SIZESebastian Huber2020-11-261-0/+1
| | | | | | | | | | In order to better support applications which use the new rtems_task_construct() directive add the CONFIGURE_INIT_TASK_CONSTURCT_STORAGE_SIZE configuration option. If this option is specified, then the Classic API initialization task is constructed with rtems_task_construct(). Update #4181.
* libtest: Add primitive test case memory allocatorSebastian Huber2020-11-191-0/+1
| | | | | | | This primitive test case memory allocator uses memory from the low-level memory information provided by the BSP. At the beginning of each test case, the memory available to the test case is reinitialized. This allows the use of a simple allocate only allocator.
* libtest: Make test case allocator configurableSebastian Huber2020-11-191-1/+0
|
* libtrace: Move _Record_Stream_header_initialize()Sebastian Huber2020-11-091-0/+1
| | | | This fixes the build if no function sections are used.
* build: Fix formatSebastian Huber2020-10-121-1/+2
|
* shell: Remove not functioning fdisk mount/unmountFrank Kühndel2020-10-121-1/+0
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | The shell has an 'fdisk' command which has sub-commands 'mount' and 'unmount'. These two sub-commands have a bug which causes them to be not able to mount anything. This proposed patch removes the buggy file cpukit/libblock/src/bdpart-mount.c and the mount/unmount commands from 'fdisk' as bug fix. The 'fdisk' command itself is not removed. The reasons for removing the sub-commands (instead of fixing the issue) are: 1) The bug has been introduced on 2010-May-31 with commit 29e92b090c8bc35745aa5c89231ce806bcb11e57. Since ten years no one can use this feature, nor has anybody complained about it. 2) Besides of the 'fdisk' 'mount' sub-command, the shell has the usual 'mount' and 'unmount' commands which can serve as substitutes. 3) There are additional minor issues (see further down) which needed to be addressed when the file will be kept. What follows below is the precise bug description. The bug is in function rtems_bdpart_mount() which is only be used by the 'fdisk' shell command to mount all partitions of a disk with a single command: > fdisk DISK_NAME mount > mounts the file system of each partition of the disk > > fdisk DISK_NAME unmount > unmounts the file system of each partition of the disk The whole command does not work because in file cpukit/libblock/src/bdpart-mount.c line 103 specifies the file system type of each partition to be "msdos". Yet, "msdos" does not exist. The name must be "dosfs". Beside of this fundamental problem, there are more issues with the code in bdpart-mount.c: 1) The function returns RTEMS_SUCCESSFUL despite the mount always fails. 2) The reason for errors is not written to the terminal. 3) The directory '/mnt' is created but not deleted later on (failure or not). 3) There is no documentation about this special 'fdisk' feature in the RTEMS Shell Guide ('fdisk' is mentioned but its documentation is a bit short): https://docs.rtems.org/branches/master/shell/ file_and_directory.html#fdisk-format-disk 4) Only "msdos" formatted partitions can be mounted and all partitions are mounted read-only. This is hard coded and cannot be changed by options. Moreover, there is no information about this to the user of the shell (i.e. using 'fdisk' mount requires insider knowledge). How to reproduce: 1) For testing, I use the 'testsuites/samples/fileio.exe' sample with qemu: > cd rtems > env QEMU_AUDIO_DRV="none" qemu-system-arm -net none -nographic \ > -M realview-pbx-a9 -m 256M -kernel \ > build/arm/realview_pbx_a9_qemu/testsuites/samples/fileio.exe 2) Type any key to stop the timer and enter the sample tool. Type 's' to enter the shell, login as 'root' with the password shown in the terminal. 3) Type the following shell commands (they create a RAM disk, partition it, register it, format it and try to mount it): > mkrd > fdisk /dev/rda fat32 16 write mbr > fdisk /dev/rda register > mkdos /dev/rda1 > fdisk /dev/rda mount 4) The last line above is the command which fails - without an error message. There exists a '/mnt' directory but no '/mnt/rda1' directory as it should be: > ls -la /mnt 5) If you change line 103 of 'cpukit/libblock/src/bdpart-mount.c' from "msdos" to "dosfs", compile and build the executable and re-run the above test, '/mnt/rda1' exists (but the file system is mounted read-only). Close #4131
* librtemscxx: Fix installSebastian Huber2020-10-081-3/+3
|
* build: Disable RTEMS_NETWORKING for some arch/bspSebastian Huber2020-10-081-1/+12
| | | | The old network stack is not supported on 64-bit targets.
* cpukit/librcxx: Add a C++ thread interface with attributesChris Johns2020-10-082-0/+23
|
* build: Remove raspberrypi from RTEMS_SMPSebastian Huber2020-10-071-1/+0
| | | | Close #4116.
* score: Add AArch64 portKinsey Moore2020-10-052-0/+38
| | | | | This adds a CPU port for AArch64(ARMv8) with support for exceptions and interrupts.
* build: Scope RTEMS_MULTIPROCESSING optionSebastian Huber2020-10-021-2/+13
| | | | Enable it only for selected BSPs. Improve description.
* Decouple the C Program Heap initializationSebastian Huber2020-10-011-0/+3
| | | | | | | Before this patch RTEMS_Malloc_Initialize() had a fixed dependency on _Workspace_Area. Introduce _Workspace_Malloc_initializer to have this dependency only if CONFIGURE_UNIFIED_WORK_AREAS is defined by the application configuration.
* build: Enable RTEMS_SMP only for selected BSPsSebastian Huber2020-10-011-1/+32
|
* build: Include cpuopts.h in "config.h"Sebastian Huber2020-09-301-1/+2
| | | | | | | | The Autoconf/Automake build system did something similar. This fixes the build of sigprogmask.c which uses RTEMS_POSIX_API and expects to get it defined via "config.h". Update #3818.
* rtems: Add rtems_message_queue_construct()Sebastian Huber2020-09-281-0/+2
| | | | | | | | | | | In contrast to message queues created by rtems_message_queue_create(), the message queues constructed by this directive use a user-provided message buffer storage area. Add RTEMS_MESSAGE_QUEUE_BUFFER() to define a message buffer type for message buffer storage areas. Update #4007.
* score: Add <rtems/score/coremsgbuffer.h>Sebastian Huber2020-09-281-0/+1
| | | | | | | | | | Move the CORE_message_queue_Buffer definition to a separate header file to be able to use it independent of the remaining Message Queue Handler API. Change license to BSD-2-Clause according to file history. Update #3053. Update #4007.
* build: Add RTEMS_PROFILINGSebastian Huber2020-09-252-0/+18
| | | | Update #3818.
* rtems: Install missing header fileSebastian Huber2020-09-221-0/+1
| | | | Update #3053.
* capture: Move default trace dataSebastian Huber2020-09-201-0/+1
| | | | | | | Provide the default trace data in a separate file to avoid issues on targets with a small-data area. Close #3883.
* rtems: Add rtems_task_construct()Sebastian Huber2020-09-171-0/+1
| | | | | | | | | | | | | | | | | In contrast to rtems_task_create() this function constructs a task with a user-provided task storage area. The new directive uses a configuration structure instead of individual parameters. Add RTEMS_TASK_STORAGE_SIZE() to calculate the recommended size of a task storage area based on the task attributes and the size dedicated to the task stack and thread-local storage. This macro may allow future extensions without breaking the API. Add application configuration option CONFIGURE_MINIMUM_TASKS_WITH_USER_PROVIDED_STORAGE to adjust RTEMS Workspace size estimate. Update #3959.
* build: Alternative build system based on wafSebastian Huber2020-09-14109-0/+4479
Update #3818.