summaryrefslogtreecommitdiffstats
path: root/testsuites
diff options
context:
space:
mode:
Diffstat (limited to 'testsuites')
-rw-r--r--testsuites/ada/sptests/sp09/sptest.adb18
-rw-r--r--testsuites/ada/sptests/spatcb01/init.c2
-rw-r--r--testsuites/ada/sptests/spatcb01/spatcb01.adb2
-rw-r--r--testsuites/ada/tmtests/tm01/init.c1
-rw-r--r--testsuites/ada/tmtests/tm02/init.c1
-rw-r--r--testsuites/ada/tmtests/tm03/init.c1
-rw-r--r--testsuites/ada/tmtests/tm04/init.c1
-rw-r--r--testsuites/ada/tmtests/tm05/init.c1
-rw-r--r--testsuites/ada/tmtests/tm06/init.c1
-rw-r--r--testsuites/ada/tmtests/tm07/init.c1
-rw-r--r--testsuites/ada/tmtests/tm08/init.c1
-rw-r--r--testsuites/ada/tmtests/tm09/init.c1
-rw-r--r--testsuites/ada/tmtests/tm10/init.c1
-rw-r--r--testsuites/ada/tmtests/tm11/init.c1
-rw-r--r--testsuites/ada/tmtests/tm12/init.c1
-rw-r--r--testsuites/ada/tmtests/tm13/init.c1
-rw-r--r--testsuites/ada/tmtests/tm14/init.c1
-rw-r--r--testsuites/ada/tmtests/tm15/init.c1
-rw-r--r--testsuites/ada/tmtests/tm16/init.c1
-rw-r--r--testsuites/ada/tmtests/tm17/init.c1
-rw-r--r--testsuites/ada/tmtests/tm18/init.c1
-rw-r--r--testsuites/ada/tmtests/tm19/init.c1
-rw-r--r--testsuites/ada/tmtests/tm20/init.c1
-rw-r--r--testsuites/ada/tmtests/tm21/init.c1
-rw-r--r--testsuites/ada/tmtests/tm22/init.c1
-rw-r--r--testsuites/ada/tmtests/tm23/init.c1
-rw-r--r--testsuites/ada/tmtests/tm24/init.c1
-rw-r--r--testsuites/ada/tmtests/tm25/init.c1
-rw-r--r--testsuites/ada/tmtests/tm28/init.c1
-rw-r--r--testsuites/ada/tmtests/tm29/init.c1
-rw-r--r--testsuites/ada/tmtests/tmck/init.c1
-rw-r--r--testsuites/benchmarks/dhrystone/dhry_1.c1
-rw-r--r--testsuites/benchmarks/dhrystone/init.c2
-rw-r--r--testsuites/benchmarks/linpack/init.c2
-rw-r--r--testsuites/benchmarks/linpack/linpack-pc.c2
-rw-r--r--testsuites/benchmarks/whetstone/init.c2
-rw-r--r--testsuites/benchmarks/whetstone/whetstone.c2
-rwxr-xr-xtestsuites/build/bin/fake-rtems5-ar2
-rwxr-xr-xtestsuites/build/bin/fake-rtems5-gcc2
-rwxr-xr-xtestsuites/build/bin/fake-rtems5-ld2
-rwxr-xr-xtestsuites/build/test.py2
-rw-r--r--testsuites/fstests/fsbdpart01/init.c2
-rw-r--r--testsuites/fstests/fsclose01/init.c2
-rw-r--r--testsuites/fstests/fsdosfsformat01/init.c2
-rw-r--r--testsuites/fstests/fsdosfsname01/create_files.cs2
-rwxr-xr-xtestsuites/fstests/fsdosfsname01/create_image.sh2
-rw-r--r--testsuites/fstests/fsdosfsname01/image_bin_le_multibyte.h2
-rw-r--r--testsuites/fstests/fsdosfsname01/image_bin_le_singlebyte.h2
-rw-r--r--testsuites/fstests/fsdosfsname01/init.c2
-rw-r--r--testsuites/fstests/fsdosfsname02/init.c2
-rw-r--r--testsuites/fstests/fsdosfssync01/init.c2
-rw-r--r--testsuites/fstests/fsdosfswrite01/init.c2
-rw-r--r--testsuites/fstests/fsfseeko01/init.c2
-rw-r--r--testsuites/fstests/fsimfsconfig01/init.c2
-rw-r--r--testsuites/fstests/fsimfsconfig02/init.c2
-rw-r--r--testsuites/fstests/fsimfsconfig03/init.c2
-rw-r--r--testsuites/fstests/fsimfsgeneric01/init.c2
-rw-r--r--testsuites/fstests/fsjffs2empty01/fsjffs2empty01.doc11
-rw-r--r--testsuites/fstests/fsjffs2empty01/fsjffs2empty01.scn6
-rw-r--r--testsuites/fstests/fsjffs2empty01/init.c245
-rw-r--r--testsuites/fstests/fsjffs2gc01/init.c2
-rw-r--r--testsuites/fstests/fsnofs01/init.c2
-rw-r--r--testsuites/fstests/fsrofs01/init.c2
-rw-r--r--testsuites/fstests/jffs2_nand_support/fs_config.h33
-rw-r--r--testsuites/fstests/jffs2_nand_support/fs_support.c257
-rw-r--r--testsuites/fstests/jffs2_support/fs_config.h2
-rw-r--r--testsuites/fstests/jffs2_support/fs_support.c4
-rw-r--r--testsuites/fstests/tftpfs/init.c6928
-rw-r--r--testsuites/fstests/tftpfs/tftpfs_interactions.c984
-rw-r--r--testsuites/fstests/tftpfs/tftpfs_interactions.h213
-rw-r--r--testsuites/fstests/tftpfs/tftpfs_udp_network_fake.c983
-rw-r--r--testsuites/fstests/tftpfs/tftpfs_udp_network_fake.h315
-rw-r--r--testsuites/libtests/POSIX/free.c5
-rw-r--r--testsuites/libtests/POSIX/readv.c2
-rw-r--r--testsuites/libtests/POSIX/sigismember.c2
-rw-r--r--testsuites/libtests/POSIX/sigprocmask.c3
-rw-r--r--testsuites/libtests/POSIX/writev.c2
-rw-r--r--testsuites/libtests/block01/block01.doc2
-rw-r--r--testsuites/libtests/block01/init.c2
-rw-r--r--testsuites/libtests/block02/block02.doc2
-rw-r--r--testsuites/libtests/block02/init.c2
-rw-r--r--testsuites/libtests/block03/block03.doc2
-rw-r--r--testsuites/libtests/block03/init.c2
-rw-r--r--testsuites/libtests/block04/block04.doc2
-rw-r--r--testsuites/libtests/block04/init.c2
-rw-r--r--testsuites/libtests/block05/block05.doc2
-rw-r--r--testsuites/libtests/block05/init.c2
-rw-r--r--testsuites/libtests/block07/block07.doc2
-rw-r--r--testsuites/libtests/block07/init.c2
-rw-r--r--testsuites/libtests/block09/block09.doc2
-rw-r--r--testsuites/libtests/block09/init.c2
-rw-r--r--testsuites/libtests/block10/block10.doc2
-rw-r--r--testsuites/libtests/block10/init.c2
-rw-r--r--testsuites/libtests/block11/init.c2
-rw-r--r--testsuites/libtests/block12/init.c2
-rw-r--r--testsuites/libtests/block13/init.c2
-rw-r--r--testsuites/libtests/block14/init.c2
-rw-r--r--testsuites/libtests/block15/init.c2
-rw-r--r--testsuites/libtests/block16/init.c2
-rw-r--r--testsuites/libtests/block17/init.c2
-rw-r--r--testsuites/libtests/crypt01/init.c8
-rw-r--r--testsuites/libtests/defaultconfig01/init.c2
-rw-r--r--testsuites/libtests/devfs01/init.c2
-rw-r--r--testsuites/libtests/dl01/dl01-o1.c2
-rw-r--r--testsuites/libtests/dl01/init.c2
-rw-r--r--testsuites/libtests/dl02/dl02-o1.c2
-rw-r--r--testsuites/libtests/dl02/dl02-o2.c2
-rw-r--r--testsuites/libtests/dl02/init.c2
-rw-r--r--testsuites/libtests/dl03/init.c2
-rw-r--r--testsuites/libtests/dl04/init.c2
-rw-r--r--testsuites/libtests/dl05/dl05-o5.cc2
-rw-r--r--testsuites/libtests/dl05/init.c2
-rw-r--r--testsuites/libtests/dl06/dl06-o1.c2
-rw-r--r--testsuites/libtests/dl06/dl06-o2.c2
-rw-r--r--testsuites/libtests/dl06/initimpl.h2
-rw-r--r--testsuites/libtests/dl07/dl-load.c1
-rw-r--r--testsuites/libtests/dl07/dl07-o1.c2
-rw-r--r--testsuites/libtests/dl07/dl07-o2.c2
-rw-r--r--testsuites/libtests/dl07/dl07-o3.c2
-rw-r--r--testsuites/libtests/dl07/dl07-o4.c2
-rw-r--r--testsuites/libtests/dl07/dl07-o5.c2
-rw-r--r--testsuites/libtests/dl07/init.c2
-rw-r--r--testsuites/libtests/dl08/dl08-o1.c2
-rw-r--r--testsuites/libtests/dl08/dl08-o2.c2
-rw-r--r--testsuites/libtests/dl08/dl08-o3.c2
-rw-r--r--testsuites/libtests/dl08/dl08-o4.c2
-rw-r--r--testsuites/libtests/dl08/dl08-o5.c2
-rw-r--r--testsuites/libtests/dl08/dl08-o6-123456789-123456789.c2
-rw-r--r--testsuites/libtests/dl08/init.c2
-rw-r--r--testsuites/libtests/dl09/dl-load.c18
-rw-r--r--testsuites/libtests/dl09/dl09-o1.c2
-rw-r--r--testsuites/libtests/dl09/dl09-o2.c2
-rw-r--r--testsuites/libtests/dl09/dl09-o3.c2
-rw-r--r--testsuites/libtests/dl09/dl09-o4.c2
-rw-r--r--testsuites/libtests/dl09/dl09-o5.c2
-rw-r--r--testsuites/libtests/dl09/init.c2
-rw-r--r--testsuites/libtests/dl10/dl10-o1.c2
-rw-r--r--testsuites/libtests/dl10/dl10-o2.c2
-rw-r--r--testsuites/libtests/dl10/dl10-o3.c2
-rw-r--r--testsuites/libtests/dl10/dl10-o4.c2
-rw-r--r--testsuites/libtests/dl10/dl10-o5.c2
-rw-r--r--testsuites/libtests/dl10/dl10-o6.c1
-rw-r--r--testsuites/libtests/dl10/init.c2
-rw-r--r--testsuites/libtests/dl11/dl-load.c207
-rw-r--r--testsuites/libtests/dl11/dl-load.h33
-rw-r--r--testsuites/libtests/dl11/dl11-o1.c41
-rw-r--r--testsuites/libtests/dl11/dl11.doc44
-rw-r--r--testsuites/libtests/dl11/dl11.scn6
-rw-r--r--testsuites/libtests/dl11/init.c105
-rw-r--r--testsuites/libtests/exit01/init.c2
-rw-r--r--testsuites/libtests/exit02/init.c2
-rw-r--r--testsuites/libtests/exit03/exit03.doc11
-rw-r--r--testsuites/libtests/exit03/exit03.scn5
-rw-r--r--testsuites/libtests/exit03/init.c122
-rw-r--r--testsuites/libtests/exit03/stdio.cc61
-rw-r--r--testsuites/libtests/flashdev01/flashdev01.doc11
-rw-r--r--testsuites/libtests/flashdev01/flashdev01.scn2
-rw-r--r--testsuites/libtests/flashdev01/init.c190
-rw-r--r--testsuites/libtests/flashdev01/test_flashdev.c275
-rw-r--r--testsuites/libtests/flashdev01/test_flashdev.h35
-rw-r--r--testsuites/libtests/flashdisk01/init.c2
-rw-r--r--testsuites/libtests/flashdisk01/test-file-system.c2
-rw-r--r--testsuites/libtests/flashdisk01/test-file-system.h2
-rw-r--r--testsuites/libtests/getentropy01/init.c2
-rw-r--r--testsuites/libtests/heapwalk/init.c2
-rw-r--r--testsuites/libtests/i2c01/init.c2
-rw-r--r--testsuites/libtests/irqs01/init.c2
-rw-r--r--testsuites/libtests/libfdt01/init.c2
-rw-r--r--testsuites/libtests/libfdt01/some.dts2
-rw-r--r--testsuites/libtests/malloctest/init.c43
-rw-r--r--testsuites/libtests/md501/init.c2
-rw-r--r--testsuites/libtests/newlib01/init.c63
-rw-r--r--testsuites/libtests/newlib01/newlib01.doc3
-rw-r--r--testsuites/libtests/ofw01/some.dts2
-rw-r--r--testsuites/libtests/pwdgrp01/init.c2
-rw-r--r--testsuites/libtests/pwdgrp02/init.c2
-rw-r--r--testsuites/libtests/rbheap01/init.c2
-rw-r--r--testsuites/libtests/record01/init.c2
-rw-r--r--testsuites/libtests/record02/init.c2
-rw-r--r--testsuites/libtests/regulator01/regulator01.c1310
-rw-r--r--testsuites/libtests/regulator01/regulator01.doc67
-rw-r--r--testsuites/libtests/regulator01/rtems_config.c59
-rw-r--r--testsuites/libtests/sha/init.c217
-rw-r--r--testsuites/libtests/shell01/init.c2
-rw-r--r--testsuites/libtests/sparsedisk01/init.c2
-rw-r--r--testsuites/libtests/spi01/init.c2
-rw-r--r--testsuites/libtests/stackchk01/init.c30
-rw-r--r--testsuites/libtests/stackchk01/stackchk01.doc12
-rw-r--r--testsuites/libtests/termios01/termios_testdriver.c2
-rw-r--r--testsuites/libtests/termios03/termios_testdriver_polled.c2
-rw-r--r--testsuites/libtests/termios04/termios_testdriver_impl.h2
-rw-r--r--testsuites/libtests/termios09/init.c2
-rw-r--r--testsuites/libtests/ttest01/init.c2
-rw-r--r--testsuites/libtests/ttest01/t-self-test.h2
-rw-r--r--testsuites/libtests/ttest01/test-assert.c2
-rw-r--r--testsuites/libtests/ttest01/test-checks.c2
-rw-r--r--testsuites/libtests/ttest01/test-destructor.c2
-rw-r--r--testsuites/libtests/ttest01/test-eno.c2
-rw-r--r--testsuites/libtests/ttest01/test-example.c2
-rw-r--r--testsuites/libtests/ttest01/test-fixture.c2
-rw-r--r--testsuites/libtests/ttest01/test-leak.c2
-rw-r--r--testsuites/libtests/ttest01/test-log.c2
-rw-r--r--testsuites/libtests/ttest01/test-malloc.c2
-rw-r--r--testsuites/libtests/ttest01/test-plan.c2
-rw-r--r--testsuites/libtests/ttest01/test-psx.c2
-rw-r--r--testsuites/libtests/ttest01/test-rtems.c2
-rw-r--r--testsuites/libtests/ttest01/test-simple.c2
-rw-r--r--testsuites/libtests/ttest01/test-step.c2
-rw-r--r--testsuites/libtests/ttest01/test-task-context.c2
-rw-r--r--testsuites/libtests/ttest01/test-time.c2
-rw-r--r--testsuites/libtests/ttest01/test-verbosity.c2
-rw-r--r--testsuites/libtests/ttest02/init.c2
-rw-r--r--testsuites/libtests/utf8proc01/init.c2
-rw-r--r--testsuites/mptests/mp01/mp01-node1.doc25
-rw-r--r--testsuites/mptests/mp01/mp01-node2.doc25
-rw-r--r--testsuites/mptests/mp03/mp03-node1.doc25
-rw-r--r--testsuites/mptests/mp03/mp03-node2.doc25
-rw-r--r--testsuites/mptests/mp04/mp04-node1.doc25
-rw-r--r--testsuites/mptests/mp04/mp04-node2.doc25
-rw-r--r--testsuites/mptests/mp05/mp05-node1.doc25
-rw-r--r--testsuites/mptests/mp05/mp05-node2.doc25
-rw-r--r--testsuites/mptests/mp06/mp06-node1.doc25
-rw-r--r--testsuites/mptests/mp06/mp06-node2.doc25
-rw-r--r--testsuites/mptests/mp07/mp07-node1.doc25
-rw-r--r--testsuites/mptests/mp07/mp07-node2.doc25
-rw-r--r--testsuites/mptests/mp08/mp08-node1.doc25
-rw-r--r--testsuites/mptests/mp08/mp08-node2.doc25
-rw-r--r--testsuites/mptests/mp09/mp09-node1.doc25
-rw-r--r--testsuites/mptests/mp09/mp09-node2.doc25
-rw-r--r--testsuites/mptests/mp10/mp10-node1.doc25
-rw-r--r--testsuites/mptests/mp10/mp10-node2.doc25
-rw-r--r--testsuites/mptests/mp11/mp11-node1.doc25
-rw-r--r--testsuites/mptests/mp11/mp11-node2.doc25
-rw-r--r--testsuites/mptests/mp12/mp12-node1.doc25
-rw-r--r--testsuites/mptests/mp12/mp12-node2.doc25
-rw-r--r--testsuites/mptests/mp13/mp13-node1.doc25
-rw-r--r--testsuites/mptests/mp13/mp13-node2.doc25
-rw-r--r--testsuites/mptests/mp14/mp14-node1.doc25
-rw-r--r--testsuites/mptests/mp14/mp14-node2.doc25
-rw-r--r--testsuites/psxtests/psx08/init.c118
-rw-r--r--testsuites/psxtests/psx12/init.c2
-rw-r--r--testsuites/psxtests/psx13/test.c2
-rw-r--r--testsuites/psxtests/psx15/init.c2
-rw-r--r--testsuites/psxtests/psxbarrier01/test.c2
-rw-r--r--testsuites/psxtests/psxchroot01/test.c2
-rw-r--r--testsuites/psxtests/psxcleanup02/init.c2
-rw-r--r--testsuites/psxtests/psxcleanup02/main.c2
-rw-r--r--testsuites/psxtests/psxclock/init.c172
-rw-r--r--testsuites/psxtests/psxclockrealtime01/init.c2
-rw-r--r--testsuites/psxtests/psxconfig01/init.c4
-rw-r--r--testsuites/psxtests/psxconfig01/psxconfig01.doc2
-rw-r--r--testsuites/psxtests/psxenosys/init.c10
-rw-r--r--testsuites/psxtests/psxenosys/psxenosys.scn2
-rw-r--r--testsuites/psxtests/psxftw01/init.c64
-rw-r--r--testsuites/psxtests/psxglobalcon01/init.cc2
-rw-r--r--testsuites/psxtests/psxglobalcon02/init.cc2
-rw-r--r--testsuites/psxtests/psxhdrs/arpa/inet/inet_ntop.c2
-rw-r--r--testsuites/psxtests/psxhdrs/fcntl/openat.c4
-rw-r--r--testsuites/psxtests/psxhdrs/netdb/gethostbyaddr.c2
-rw-r--r--testsuites/psxtests/psxhdrs/pthread/pthread_attr_getdetachstate.c4
-rw-r--r--testsuites/psxtests/psxhdrs/pthread/pthread_attr_getguardsize.c4
-rw-r--r--testsuites/psxtests/psxhdrs/pthread/pthread_attr_getinheritsched.c4
-rw-r--r--testsuites/psxtests/psxhdrs/pthread/pthread_attr_getschedparam.c4
-rw-r--r--testsuites/psxtests/psxhdrs/pthread/pthread_attr_getschedpolicy.c4
-rw-r--r--testsuites/psxtests/psxhdrs/pthread/pthread_attr_getscope.c4
-rw-r--r--testsuites/psxtests/psxhdrs/pthread/pthread_attr_getstack.c2
-rw-r--r--testsuites/psxtests/psxhdrs/pthread/pthread_attr_getstackaddr.c2
-rw-r--r--testsuites/psxtests/psxhdrs/pthread/pthread_attr_getstacksize.c4
-rw-r--r--testsuites/psxtests/psxhdrs/pthread/pthread_attr_setschedparam.c4
-rw-r--r--testsuites/psxtests/psxhdrs/pthread/pthread_cond_init.c2
-rw-r--r--testsuites/psxtests/psxhdrs/pthread/pthread_cond_timedwait.c2
-rw-r--r--testsuites/psxtests/psxhdrs/pthread/pthread_condattr_getpshared.c2
-rw-r--r--testsuites/psxtests/psxhdrs/pthread/pthread_create.c2
-rw-r--r--testsuites/psxtests/psxhdrs/pthread/pthread_mutex_getprioceiling.c4
-rw-r--r--testsuites/psxtests/psxhdrs/pthread/pthread_mutex_init.c2
-rw-r--r--testsuites/psxtests/psxhdrs/pthread/pthread_mutex_timedlock.c2
-rw-r--r--testsuites/psxtests/psxhdrs/pthread/pthread_mutexattr_getprioceiling.c2
-rw-r--r--testsuites/psxtests/psxhdrs/pthread/pthread_mutexattr_getprotocol.c4
-rw-r--r--testsuites/psxtests/psxhdrs/pthread/pthread_mutexattr_getpshared.c4
-rw-r--r--testsuites/psxtests/psxhdrs/sys/select/pselect.c4
-rw-r--r--testsuites/psxtests/psxhdrs/sys/socket/bind.c2
-rw-r--r--testsuites/psxtests/psxhdrs/sys/socket/connect.c6
-rw-r--r--testsuites/psxtests/psxhdrs/sys/socket/getsockopt.c2
-rw-r--r--testsuites/psxtests/psxhdrs/sys/socket/send.c2
-rw-r--r--testsuites/psxtests/psxhdrs/sys/socket/sendmsg.c2
-rw-r--r--testsuites/psxtests/psxhdrs/sys/socket/sendto.c4
-rw-r--r--testsuites/psxtests/psxhdrs/sys/socket/setsockopt.c2
-rw-r--r--testsuites/psxtests/psxhdrs/sys/stat/futimens.c4
-rw-r--r--testsuites/psxtests/psxhdrs/sys/stat/utimensat.c4
-rw-r--r--testsuites/psxtests/psxhdrs/sys/time/utimes.c8
-rw-r--r--testsuites/psxtests/psxhdrs/termios/cfgetispeed.c4
-rw-r--r--testsuites/psxtests/psxhdrs/termios/cfgetospeed.c4
-rw-r--r--testsuites/psxtests/psxhdrs/termios/cfsetispeed.c4
-rw-r--r--testsuites/psxtests/psxhdrs/termios/cfsetospeed.c4
-rw-r--r--testsuites/psxtests/psxhdrs/termios/tcgetattr.c4
-rw-r--r--testsuites/psxtests/psxhdrs/termios/tcsetattr.c4
-rw-r--r--testsuites/psxtests/psxhdrs/time/asctime.c2
-rw-r--r--testsuites/psxtests/psxhdrs/time/asctime_r.c2
-rw-r--r--testsuites/psxtests/psxhdrs/time/clock_settime.c2
-rw-r--r--testsuites/psxtests/psxhdrs/time/ctime.c2
-rw-r--r--testsuites/psxtests/psxhdrs/time/ctime_r.c2
-rw-r--r--testsuites/psxtests/psxhdrs/time/gmtime.c2
-rw-r--r--testsuites/psxtests/psxhdrs/time/gmtime_r.c2
-rw-r--r--testsuites/psxtests/psxhdrs/time/localtime.c2
-rw-r--r--testsuites/psxtests/psxhdrs/time/localtime_r.c2
-rw-r--r--testsuites/psxtests/psxhdrs/time/strftime.c2
-rw-r--r--testsuites/psxtests/psxhdrs/unistd/setgroups.c2
-rw-r--r--testsuites/psxtests/psxhdrs/utime/utime.c2
-rw-r--r--testsuites/psxtests/psxhdrs/wchar/mbsinit.c4
-rw-r--r--testsuites/psxtests/psxintrcritical01/init.c2
-rw-r--r--testsuites/psxtests/psxkey07/init.c34
-rw-r--r--testsuites/psxtests/psxkey08/init.c2
-rw-r--r--testsuites/psxtests/psxmount/test.c2
-rw-r--r--testsuites/psxtests/psxmsgq01/init.c2
-rw-r--r--testsuites/psxtests/psxonce01/init.c2
-rw-r--r--testsuites/psxtests/psxonce01/psxonce01.doc2
-rw-r--r--testsuites/psxtests/psxrwlock01/test.c28
-rw-r--r--testsuites/psxtests/psxthreadname01/init.c2
-rw-r--r--testsuites/psxtests/psxtimer01/psxtimer.c9
-rw-r--r--testsuites/psxtests/psxtimer02/psxtimer.c9
-rw-r--r--testsuites/psxtests/psxtimer_face01/psxtimer.c123
-rw-r--r--testsuites/psxtests/psxtimer_face01/psxtimer_face01.doc49
-rw-r--r--testsuites/psxtests/psxtimer_face01/psxtimer_face01.scn6
-rw-r--r--testsuites/psxtmtests/psxtmbarrier01/psxtmbarrier01.doc25
-rw-r--r--testsuites/psxtmtests/psxtmbarrier02/psxtmbarrier02.doc25
-rw-r--r--testsuites/psxtmtests/psxtmbarrier03/psxtmbarrier03.doc25
-rw-r--r--testsuites/psxtmtests/psxtmbarrier04/psxtmbarrier04.doc25
-rw-r--r--testsuites/psxtmtests/psxtmclocknanosleep01/psxtmclocknanosleep01.doc25
-rw-r--r--testsuites/psxtmtests/psxtmclocknanosleep02/psxtmclocknanosleep02.doc25
-rw-r--r--testsuites/psxtmtests/psxtmclocknanosleep03/psxtmclocknanosleep03.doc25
-rw-r--r--testsuites/psxtmtests/psxtmcond02/psxtmcond02.doc25
-rw-r--r--testsuites/psxtmtests/psxtmcond03/psxtmcond03.doc25
-rw-r--r--testsuites/psxtmtests/psxtmcond04/psxtmcond04.doc25
-rw-r--r--testsuites/psxtmtests/psxtmcond05/psxtmcond05.doc25
-rw-r--r--testsuites/psxtmtests/psxtmcond06/psxtmcond06.doc25
-rw-r--r--testsuites/psxtmtests/psxtmcond07/psxtmcond07.doc25
-rw-r--r--testsuites/psxtmtests/psxtmcond08/psxtmcond08.doc25
-rw-r--r--testsuites/psxtmtests/psxtmcond09/psxtmcond09.doc25
-rw-r--r--testsuites/psxtmtests/psxtmkey01/psxtmkey01.doc25
-rw-r--r--testsuites/psxtmtests/psxtmkey02/psxtmkey02.doc25
-rw-r--r--testsuites/psxtmtests/psxtmmq01/psxtmmq01.doc25
-rw-r--r--testsuites/psxtmtests/psxtmmutex01/psxtmmutex01.doc25
-rw-r--r--testsuites/psxtmtests/psxtmmutex02/psxtmmutex02.doc25
-rw-r--r--testsuites/psxtmtests/psxtmmutex03/psxtmmutex03.doc25
-rw-r--r--testsuites/psxtmtests/psxtmmutex04/psxtmmutex04.doc25
-rw-r--r--testsuites/psxtmtests/psxtmmutex05/psxtmmutex05.doc25
-rw-r--r--testsuites/psxtmtests/psxtmmutex06/psxtmmutex06.doc25
-rw-r--r--testsuites/psxtmtests/psxtmmutex07/psxtmmutex07.doc25
-rw-r--r--testsuites/psxtmtests/psxtmnanosleep01/psxtmnanosleep01.doc25
-rw-r--r--testsuites/psxtmtests/psxtmnanosleep02/psxtmnanosleep02.doc25
-rw-r--r--testsuites/psxtmtests/psxtmrwlock01/psxtmrwlock01.doc25
-rw-r--r--testsuites/psxtmtests/psxtmrwlock02/psxtmrwlock02.doc25
-rw-r--r--testsuites/psxtmtests/psxtmrwlock03/psxtmrwlock03.doc25
-rw-r--r--testsuites/psxtmtests/psxtmrwlock04/psxtmrwlock04.doc25
-rw-r--r--testsuites/psxtmtests/psxtmrwlock05/psxtmrwlock05.doc25
-rw-r--r--testsuites/psxtmtests/psxtmrwlock06/psxtmrwlock06.doc25
-rw-r--r--testsuites/psxtmtests/psxtmrwlock07/psxtmrwlock07.doc25
-rw-r--r--testsuites/psxtmtests/psxtmsem01/psxtmsem01.doc25
-rw-r--r--testsuites/psxtmtests/psxtmsem02/psxtmsem02.doc25
-rw-r--r--testsuites/psxtmtests/psxtmsem03/psxtmsem03.doc25
-rw-r--r--testsuites/psxtmtests/psxtmsem04/psxtmsem04.doc25
-rw-r--r--testsuites/psxtmtests/psxtmsem05/psxtmsem05.doc25
-rw-r--r--testsuites/psxtmtests/psxtmsleep01/psxtmsleep01.doc25
-rw-r--r--testsuites/psxtmtests/psxtmsleep02/psxtmsleep02.doc25
-rw-r--r--testsuites/psxtmtests/psxtmthread01/psxtmthread01.doc25
-rw-r--r--testsuites/psxtmtests/psxtmthread03/psxtmthread03.doc25
-rw-r--r--testsuites/psxtmtests/psxtmthread04/psxtmthread04.doc25
-rw-r--r--testsuites/psxtmtests/psxtmthread05/psxtmthread05.doc25
-rw-r--r--testsuites/rhealstone/rhdeadlockbrk/deadlockbrk.c1
-rw-r--r--testsuites/rhealstone/rhilatency/ilatency.c27
-rw-r--r--testsuites/rhealstone/rhmlatency/mlatency.c1
-rw-r--r--testsuites/rhealstone/rhtaskpreempt/taskpreempt.c1
-rw-r--r--testsuites/rhealstone/rhtaskswitch/taskswitch.c1
-rw-r--r--testsuites/samples/base_mp/base_mp-node1.doc25
-rw-r--r--testsuites/samples/base_mp/base_mp-node2.doc25
-rw-r--r--testsuites/samples/base_sp/base_sp.doc25
-rw-r--r--testsuites/samples/capture/capture.doc25
-rw-r--r--testsuites/samples/cdtest/main.cc58
-rw-r--r--testsuites/samples/fileio/fileio.doc25
-rw-r--r--testsuites/samples/hello/hello.doc25
-rw-r--r--testsuites/samples/iostream/init.cc34
-rw-r--r--testsuites/samples/iostream/iostream.doc25
-rw-r--r--testsuites/samples/minimum/init.c20
-rw-r--r--testsuites/samples/minimum/minimum.doc25
-rw-r--r--testsuites/samples/nsecs/nsecs.doc25
-rw-r--r--testsuites/samples/paranoia/paranoia.doc25
-rw-r--r--testsuites/samples/ticker/ticker.doc25
-rw-r--r--testsuites/samples/unlimited/unlimited.doc2
-rw-r--r--testsuites/smptests/smp01/smp01.doc25
-rw-r--r--testsuites/smptests/smp02/smp02.doc25
-rw-r--r--testsuites/smptests/smp03/smp03.doc25
-rw-r--r--testsuites/smptests/smp05/init.c8
-rw-r--r--testsuites/smptests/smp05/smp05.doc25
-rw-r--r--testsuites/smptests/smp07/init.c4
-rw-r--r--testsuites/smptests/smp07/smp07.doc25
-rw-r--r--testsuites/smptests/smp08/smp08.doc25
-rw-r--r--testsuites/smptests/smp08/tasks.c8
-rw-r--r--testsuites/smptests/smp09/smp09.doc25
-rw-r--r--testsuites/smptests/smpaffinity01/smpaffinity01.doc25
-rw-r--r--testsuites/smptests/smpatomic01/init.c2
-rw-r--r--testsuites/smptests/smpcache01/init.c2
-rw-r--r--testsuites/smptests/smpcapture02/init.c25
-rw-r--r--testsuites/smptests/smpclock01/init.c2
-rw-r--r--testsuites/smptests/smpfatal01/init.c2
-rw-r--r--testsuites/smptests/smpfatal02/init.c2
-rw-r--r--testsuites/smptests/smpfatal03/init.c2
-rw-r--r--testsuites/smptests/smpfatal04/init.c2
-rw-r--r--testsuites/smptests/smpfatal05/init.c2
-rw-r--r--testsuites/smptests/smpfatal06/init.c2
-rw-r--r--testsuites/smptests/smpfatal08/init.c2
-rw-r--r--testsuites/smptests/smpfatal09/init.c2
-rw-r--r--testsuites/smptests/smpipi01/init.c50
-rw-r--r--testsuites/smptests/smpirqs01/init.c2
-rw-r--r--testsuites/smptests/smpload01/init.c2
-rw-r--r--testsuites/smptests/smplock01/init.c115
-rw-r--r--testsuites/smptests/smplock01/smplock01.scn2811
-rwxr-xr-xtestsuites/smptests/smplock01/smplock01fair.py118
-rwxr-xr-xtestsuites/smptests/smplock01/smplock01perf.py91
-rw-r--r--testsuites/smptests/smpmigration01/init.c2
-rw-r--r--testsuites/smptests/smpmigration02/init.c2
-rw-r--r--testsuites/smptests/smpmrsp01/init.c2
-rw-r--r--testsuites/smptests/smpmulticast01/init.c20
-rw-r--r--testsuites/smptests/smpmutex01/init.c2
-rw-r--r--testsuites/smptests/smpmutex02/init.c2
-rw-r--r--testsuites/smptests/smpopenmp01/init.c36
-rw-r--r--testsuites/smptests/smpopenmp01/smpopenmp01.py92
-rw-r--r--testsuites/smptests/smpopenmp01/smpopenmp01.scn137
-rw-r--r--testsuites/smptests/smppsxaffinity01/smppsxaffinity01.doc25
-rw-r--r--testsuites/smptests/smppsxaffinity02/smppsxaffinity02.doc25
-rw-r--r--testsuites/smptests/smppsxmutex01/init.c35
-rw-r--r--testsuites/smptests/smppsxsignal01/init.c2
-rw-r--r--testsuites/smptests/smpschededf01/init.c2
-rw-r--r--testsuites/smptests/smpschededf02/init.c2
-rw-r--r--testsuites/smptests/smpschededf03/init.c2
-rw-r--r--testsuites/smptests/smpschededf04/init.c2
-rw-r--r--testsuites/smptests/smpscheduler01/init.c2
-rw-r--r--testsuites/smptests/smpscheduler02/init.c2
-rw-r--r--testsuites/smptests/smpscheduler03/init.c2
-rw-r--r--testsuites/smptests/smpscheduler03/test.c2
-rw-r--r--testsuites/smptests/smpscheduler04/init.c2
-rw-r--r--testsuites/smptests/smpscheduler05/init.c2
-rw-r--r--testsuites/smptests/smpscheduler06/init.c2
-rw-r--r--testsuites/smptests/smpscheduler07/init.c2
-rw-r--r--testsuites/smptests/smpsignal01/init.c2
-rw-r--r--testsuites/smptests/smpstart01/init.c2
-rw-r--r--testsuites/smptests/smpstrongapa01/init.c2
-rw-r--r--testsuites/smptests/smpswitchextension01/init.c2
-rw-r--r--testsuites/smptests/smpthreadlife01/init.c2
-rw-r--r--testsuites/smptests/smpthreadpin01/init.c2
-rw-r--r--testsuites/smptests/smpunsupported01/init.c2
-rw-r--r--testsuites/smptests/smpwakeafter01/init.c2
-rw-r--r--testsuites/sptests/sp01/init.c3
-rw-r--r--testsuites/sptests/sp01/system.h7
-rw-r--r--testsuites/sptests/sp07/system.h2
-rw-r--r--testsuites/sptests/sp2038/init.c2
-rw-r--r--testsuites/sptests/sp2038/sp2038.doc2
-rw-r--r--testsuites/sptests/sp21/sp21.scn3
-rw-r--r--testsuites/sptests/sp31/task1.c2
-rw-r--r--testsuites/sptests/sp37/init.c18
-rw-r--r--testsuites/sptests/sp40/init.c2
-rw-r--r--testsuites/sptests/sp54/init.c48
-rw-r--r--testsuites/sptests/sp68/init.c4
-rw-r--r--testsuites/sptests/sp68/sp68.doc2
-rw-r--r--testsuites/sptests/spatomic01/init.c2
-rw-r--r--testsuites/sptests/spcache01/init.c2
-rw-r--r--testsuites/sptests/spclock_err01/init.c1
-rw-r--r--testsuites/sptests/spclock_err02/init.c1
-rw-r--r--testsuites/sptests/spconfig01/init.c2
-rw-r--r--testsuites/sptests/spconfig02/init.c2
-rw-r--r--testsuites/sptests/spconsole01/init.c2
-rw-r--r--testsuites/sptests/spcontext01/init.c2
-rw-r--r--testsuites/sptests/spcpucounter01/init.c2
-rw-r--r--testsuites/sptests/spcpuset01/test.c10
-rw-r--r--testsuites/sptests/spcxx01/init.cc2
-rw-r--r--testsuites/sptests/speventsystem01/init.c2
-rw-r--r--testsuites/sptests/speventtransient01/init.c2
-rw-r--r--testsuites/sptests/spextensions01/init.c15
-rw-r--r--testsuites/sptests/spfatal26/init.c2
-rw-r--r--testsuites/sptests/spfatal28/init.c2
-rw-r--r--testsuites/sptests/spfatal29/init.c2
-rw-r--r--testsuites/sptests/spfatal30/init.c2
-rw-r--r--testsuites/sptests/spfatal31/init.c2
-rw-r--r--testsuites/sptests/spfatal32/init.c7
-rw-r--r--testsuites/sptests/spfatal33/init.c2
-rw-r--r--testsuites/sptests/spfatal34/init.c2
-rw-r--r--testsuites/sptests/spfatal36/init.c63
-rw-r--r--testsuites/sptests/spfatal36/spfatal36.doc11
-rw-r--r--testsuites/sptests/spglobalcon01/init.cc27
-rw-r--r--testsuites/sptests/spglobalcon02/init.c2
-rw-r--r--testsuites/sptests/spheapprot/init.c2
-rw-r--r--testsuites/sptests/spheapprot/spheapprot.doc25
-rw-r--r--testsuites/sptests/spinternalerror01/init.c2
-rw-r--r--testsuites/sptests/spinternalerror02/init.c4
-rw-r--r--testsuites/sptests/spintrcritical01/spintrcritical01impl.h2
-rw-r--r--testsuites/sptests/spintrcritical08/init.c2
-rw-r--r--testsuites/sptests/spintrcritical09/init.c2
-rw-r--r--testsuites/sptests/spintrcritical10/init.c2
-rw-r--r--testsuites/sptests/spintrcritical11/spintrcritical11impl.h2
-rw-r--r--testsuites/sptests/spintrcritical13/spintrcritical13impl.h2
-rw-r--r--testsuites/sptests/spintrcritical15/init.c2
-rw-r--r--testsuites/sptests/spintrcritical16/init.c2
-rw-r--r--testsuites/sptests/spintrcritical18/init.c2
-rw-r--r--testsuites/sptests/spintrcritical20/init.c2
-rw-r--r--testsuites/sptests/spintrcritical21/init.c2
-rw-r--r--testsuites/sptests/spintrcritical22/init.c2
-rw-r--r--testsuites/sptests/spintrcritical23/init.c2
-rw-r--r--testsuites/sptests/spintrcritical24/init.c2
-rw-r--r--testsuites/sptests/splinkersets01/content.c2
-rw-r--r--testsuites/sptests/splinkersets01/init.c2
-rw-r--r--testsuites/sptests/splinkersets01/item-a.c2
-rw-r--r--testsuites/sptests/splinkersets01/item-ca.c2
-rw-r--r--testsuites/sptests/splinkersets01/sets.c2
-rw-r--r--testsuites/sptests/splinkersets01/splinkersets01.h2
-rw-r--r--testsuites/sptests/spmisc01/init.c13
-rw-r--r--testsuites/sptests/spmisc01/spmisc01.h2
-rw-r--r--testsuites/sptests/spmisc01/strong.c2
-rw-r--r--testsuites/sptests/spmkdir/init.c2
-rw-r--r--testsuites/sptests/spmrsp01/init.c2
-rw-r--r--testsuites/sptests/spmutex01/init.c2
-rw-r--r--testsuites/sptests/spnsext01/init.c2
-rw-r--r--testsuites/sptests/spnsext01/spnsext01.doc2
-rw-r--r--testsuites/sptests/spntp01/init.c4
-rw-r--r--testsuites/sptests/sppercpudata01/init.c2
-rw-r--r--testsuites/sptests/sppercpudata01/item.c2
-rw-r--r--testsuites/sptests/sppercpudata01/sppercpudata01.h2
-rw-r--r--testsuites/sptests/sppps01/init.c240
-rw-r--r--testsuites/sptests/spprintk/init.c25
-rw-r--r--testsuites/sptests/spprofiling01/init.c2
-rw-r--r--testsuites/sptests/spscheduler01/init.c2
-rw-r--r--testsuites/sptests/spsem03/init.c2
-rw-r--r--testsuites/sptests/spstdc17/init.c57
-rw-r--r--testsuites/sptests/spstdc17/spstdc17.doc12
-rw-r--r--testsuites/sptests/spstdthreads01/init.c2
-rw-r--r--testsuites/sptests/spstkalloc02/init.c22
-rw-r--r--testsuites/sptests/spstkalloc02/spstkalloc02.doc4
-rw-r--r--testsuites/sptests/spstkalloc03/init.c4
-rw-r--r--testsuites/sptests/spstkalloc04/init.c4
-rw-r--r--testsuites/sptests/spsysinit01/init.c8
-rw-r--r--testsuites/sptests/spsyslock01/init.c2
-rw-r--r--testsuites/sptests/sptasknopreempt01/init.c18
-rw-r--r--testsuites/sptests/spthread01/init.c2
-rw-r--r--testsuites/sptests/spthreadlife01/init.c2
-rw-r--r--testsuites/sptests/spthreadq01/init.c2
-rw-r--r--testsuites/sptests/sptimecounter01/init.c2
-rw-r--r--testsuites/sptests/sptimecounter01/sptimecounter01.doc2
-rw-r--r--testsuites/sptests/sptimecounter02/init.c78
-rwxr-xr-xtestsuites/sptests/sptimecounter02/sptimecounter02.py91
-rw-r--r--testsuites/sptests/sptimecounter02/sptimecounter02.scn1036
-rw-r--r--testsuites/sptests/sptimecounter03/init.c4
-rw-r--r--testsuites/sptests/sptimecounter04/init.c2
-rw-r--r--testsuites/sptests/sptimerserver01/init.c2
-rw-r--r--testsuites/sptests/sptls01/init.c94
-rw-r--r--testsuites/sptests/sptls02/init.cc20
-rw-r--r--testsuites/sptests/sptls02/sptls02.h2
-rw-r--r--testsuites/sptests/sptls02/var.cc2
-rw-r--r--testsuites/sptests/sptls03/init.c13
-rw-r--r--testsuites/sptests/sptls04/init.c11
-rw-r--r--testsuites/sptests/sptls04/sptls04.h41
-rw-r--r--testsuites/sptests/sptls04/tls.c34
-rw-r--r--testsuites/sptests/spunlimited01/init.c125
-rw-r--r--testsuites/sptests/spunlimited01/spunlimited01.doc14
-rw-r--r--testsuites/support/include/tmacros.h1
-rw-r--r--testsuites/tmtests/tm01/system.h1
-rw-r--r--testsuites/tmtests/tm02/system.h1
-rw-r--r--testsuites/tmtests/tm03/system.h1
-rw-r--r--testsuites/tmtests/tm04/system.h1
-rw-r--r--testsuites/tmtests/tm05/system.h1
-rw-r--r--testsuites/tmtests/tm06/system.h1
-rw-r--r--testsuites/tmtests/tm07/system.h1
-rw-r--r--testsuites/tmtests/tm08/system.h1
-rw-r--r--testsuites/tmtests/tm09/system.h1
-rw-r--r--testsuites/tmtests/tm10/system.h1
-rw-r--r--testsuites/tmtests/tm11/system.h1
-rw-r--r--testsuites/tmtests/tm12/system.h1
-rw-r--r--testsuites/tmtests/tm13/system.h1
-rw-r--r--testsuites/tmtests/tm14/system.h1
-rw-r--r--testsuites/tmtests/tm15/system.h1
-rw-r--r--testsuites/tmtests/tm16/system.h1
-rw-r--r--testsuites/tmtests/tm17/system.h1
-rw-r--r--testsuites/tmtests/tm18/system.h1
-rw-r--r--testsuites/tmtests/tm19/system.h1
-rw-r--r--testsuites/tmtests/tm20/system.h1
-rw-r--r--testsuites/tmtests/tm21/system.h1
-rw-r--r--testsuites/tmtests/tm22/system.h1
-rw-r--r--testsuites/tmtests/tm23/system.h1
-rw-r--r--testsuites/tmtests/tm24/system.h1
-rw-r--r--testsuites/tmtests/tm25/system.h1
-rw-r--r--testsuites/tmtests/tm26/system.h1
-rw-r--r--testsuites/tmtests/tm27/system.h1
-rw-r--r--testsuites/tmtests/tm27/task1.c100
-rw-r--r--testsuites/tmtests/tm28/system.h1
-rw-r--r--testsuites/tmtests/tm29/system.h1
-rw-r--r--testsuites/tmtests/tmck/system.h1
-rw-r--r--testsuites/tmtests/tmcontext01/init.c91
-rw-r--r--testsuites/tmtests/tmcontext01/plot.py73
-rw-r--r--testsuites/tmtests/tmcontext01/tmcontext01.scn379
-rw-r--r--testsuites/tmtests/tmfine01/init.c120
-rw-r--r--testsuites/tmtests/tmfine01/tmfine01.py93
-rw-r--r--testsuites/tmtests/tmfine01/tmfine01.scn4308
-rw-r--r--testsuites/tmtests/tmonetoone/init.c2
-rw-r--r--testsuites/tmtests/tmtimer01/init.c35
-rw-r--r--testsuites/tmtests/tmtimer01/plot.py52
-rw-r--r--testsuites/tmtests/tmtimer01/tmtimer01.scn389
-rw-r--r--testsuites/unit/tc-base64-decode.c186
-rw-r--r--testsuites/unit/tc-compiler-builtins.c1141
-rw-r--r--testsuites/unit/tc-config.c171
-rw-r--r--testsuites/unit/tc-crc.c48
-rw-r--r--testsuites/unit/tc-misaligned-builtin-memcpy.c8
-rw-r--r--testsuites/unit/tc-score-msgq.c452
-rw-r--r--testsuites/unit/tc-score-rbtree.c8
-rw-r--r--testsuites/unit/ts-unit-no-clock-0.c11
-rw-r--r--testsuites/validation/bsps/tc-fatal-sparc-leon3-shutdown-halt.c142
-rw-r--r--testsuites/validation/bsps/tc-fatal-sparc-leon3-shutdown-request.c179
-rw-r--r--testsuites/validation/bsps/tc-sparc-gr712rc.c124
-rw-r--r--testsuites/validation/bsps/tr-fatal-clock-xil-ttc-irq-install.c187
-rw-r--r--testsuites/validation/bsps/tr-fatal-clock-xil-ttc-irq-install.h84
-rw-r--r--testsuites/validation/bsps/tr-fatal-sparc-leon3-cache-snooping-disabled-boot.c175
-rw-r--r--testsuites/validation/bsps/tr-fatal-sparc-leon3-cache-snooping-disabled-boot.h84
-rw-r--r--testsuites/validation/bsps/tr-fatal-sparc-leon3-cache-snooping-disabled-secondary.c176
-rw-r--r--testsuites/validation/bsps/tr-fatal-sparc-leon3-cache-snooping-disabled-secondary.h84
-rw-r--r--testsuites/validation/bsps/tr-fatal-sparc-leon3-clock-initialization.c190
-rw-r--r--testsuites/validation/bsps/tr-fatal-sparc-leon3-clock-initialization.h84
-rw-r--r--testsuites/validation/bsps/ts-fatal-clock-xil-ttc-irq-install.c79
-rw-r--r--testsuites/validation/bsps/ts-fatal-sparc-leon3-cache-snooping-disabled-boot.c79
-rw-r--r--testsuites/validation/bsps/ts-fatal-sparc-leon3-cache-snooping-disabled-secondary.c (renamed from testsuites/validation/ts-validation-smp-only-1.c)40
-rw-r--r--testsuites/validation/bsps/ts-fatal-sparc-leon3-clock-initialization.c79
-rw-r--r--testsuites/validation/bsps/ts-fatal-sparc-leon3-shutdown-response.c94
-rw-r--r--testsuites/validation/bsps/ts-fatal-sparc-leon3-shutdown.c177
-rw-r--r--testsuites/validation/bsps/ts-validation-bsp-0.c73
-rw-r--r--testsuites/validation/tc-acfg-appl-does-not-need-clock-driver.c8
-rw-r--r--testsuites/validation/tc-acfg-appl-needs-clock-driver.c9
-rw-r--r--testsuites/validation/tc-acfg-default.c20
-rw-r--r--testsuites/validation/tc-acfg-disabled-bsp-settings.c9
-rw-r--r--testsuites/validation/tc-acfg-one-cpu.c12
-rw-r--r--testsuites/validation/tc-acfg-scheduler-edf-smp.c9
-rw-r--r--testsuites/validation/tc-acfg-scheduler-table-entries-one-cpu.c102
-rw-r--r--testsuites/validation/tc-acfg.c23
-rw-r--r--testsuites/validation/tc-attr.c12
-rw-r--r--testsuites/validation/tc-barrier-create.c8
-rw-r--r--testsuites/validation/tc-barrier-delete.c8
-rw-r--r--testsuites/validation/tc-barrier-ident.c12
-rw-r--r--testsuites/validation/tc-barrier-performance.c44
-rw-r--r--testsuites/validation/tc-barrier-release.c9
-rw-r--r--testsuites/validation/tc-barrier-wait.c8
-rw-r--r--testsuites/validation/tc-basedefs-no-debug.c135
-rw-r--r--testsuites/validation/tc-basedefs-pendant.c4
-rw-r--r--testsuites/validation/tc-basedefs-pendant.h4
-rw-r--r--testsuites/validation/tc-basedefs.c199
-rw-r--r--testsuites/validation/tc-bsp-interrupt-handler-dispatch-unchecked.c649
-rw-r--r--testsuites/validation/tc-bsp-interrupt-spurious.c538
-rw-r--r--testsuites/validation/tc-c.c8
-rw-r--r--testsuites/validation/tc-cache.c8
-rw-r--r--testsuites/validation/tc-clock-get-tod.c8
-rw-r--r--testsuites/validation/tc-clock-get-uptime.c9
-rw-r--r--testsuites/validation/tc-clock-nanosleep.c78
-rw-r--r--testsuites/validation/tc-clock-set.c8
-rw-r--r--testsuites/validation/tc-clock.c81
-rw-r--r--testsuites/validation/tc-cpu-performance.c270
-rw-r--r--testsuites/validation/tc-cpuuse.c25
-rw-r--r--testsuites/validation/tc-dev-clock-xil-ttc.c136
-rw-r--r--testsuites/validation/tc-dev-grlib-apbuart-inbyte-nonblocking.c348
-rw-r--r--testsuites/validation/tc-dev-grlib-io.c295
-rw-r--r--testsuites/validation/tc-dev-grlib-irqamp-get-timestamp.c304
-rw-r--r--testsuites/validation/tc-event-performance.c59
-rw-r--r--testsuites/validation/tc-event-send-receive.c23
-rw-r--r--testsuites/validation/tc-events.c8
-rw-r--r--testsuites/validation/tc-flsl.c8
-rw-r--r--testsuites/validation/tc-futex-wait.c10
-rw-r--r--testsuites/validation/tc-futex-wake.c80
-rw-r--r--testsuites/validation/tc-intr-clear.c8
-rw-r--r--testsuites/validation/tc-intr-entry-install.c57
-rw-r--r--testsuites/validation/tc-intr-entry-remove.c52
-rw-r--r--testsuites/validation/tc-intr-get-affinity.c21
-rw-r--r--testsuites/validation/tc-intr-get-attributes.c11
-rw-r--r--testsuites/validation/tc-intr-handler-iterate.c52
-rw-r--r--testsuites/validation/tc-intr-is-pending.c10
-rw-r--r--testsuites/validation/tc-intr-non-smp.c9
-rw-r--r--testsuites/validation/tc-intr-raise-on.c8
-rw-r--r--testsuites/validation/tc-intr-raise.c8
-rw-r--r--testsuites/validation/tc-intr-set-affinity.c9
-rw-r--r--testsuites/validation/tc-intr-smp-only.c9
-rw-r--r--testsuites/validation/tc-intr-vector-disable.c9
-rw-r--r--testsuites/validation/tc-intr-vector-enable.c11
-rw-r--r--testsuites/validation/tc-intr-vector-is-enabled.c11
-rw-r--r--testsuites/validation/tc-intr.c8
-rw-r--r--testsuites/validation/tc-io-getchark.c8
-rw-r--r--testsuites/validation/tc-io-put-char.c8
-rw-r--r--testsuites/validation/tc-io-putc.c8
-rw-r--r--testsuites/validation/tc-message-broadcast.c9
-rw-r--r--testsuites/validation/tc-message-construct.c9
-rw-r--r--testsuites/validation/tc-message-delete.c8
-rw-r--r--testsuites/validation/tc-message-flush-pending.c9
-rw-r--r--testsuites/validation/tc-message-ident.c12
-rw-r--r--testsuites/validation/tc-message-macros.c8
-rw-r--r--testsuites/validation/tc-message-performance.c124
-rw-r--r--testsuites/validation/tc-message-receive.c13
-rw-r--r--testsuites/validation/tc-message-urgent-send.c11
-rw-r--r--testsuites/validation/tc-modes.c8
-rw-r--r--testsuites/validation/tc-object.c8
-rw-r--r--testsuites/validation/tc-options.c12
-rw-r--r--testsuites/validation/tc-part-create.c8
-rw-r--r--testsuites/validation/tc-part-delete.c8
-rw-r--r--testsuites/validation/tc-part-get.c8
-rw-r--r--testsuites/validation/tc-part-ident.c12
-rw-r--r--testsuites/validation/tc-part-performance.c37
-rw-r--r--testsuites/validation/tc-part-return.c9
-rw-r--r--testsuites/validation/tc-part.c8
-rw-r--r--testsuites/validation/tc-preinit-array.c150
-rw-r--r--testsuites/validation/tc-ratemon-cancel.c10
-rw-r--r--testsuites/validation/tc-ratemon-create.c8
-rw-r--r--testsuites/validation/tc-ratemon-delete.c8
-rw-r--r--testsuites/validation/tc-ratemon-get-status.c11
-rw-r--r--testsuites/validation/tc-ratemon-ident.c12
-rw-r--r--testsuites/validation/tc-ratemon-period.c10
-rw-r--r--testsuites/validation/tc-ratemon-timeout.c23
-rw-r--r--testsuites/validation/tc-sched-smp-edf-set-affinity.c8
-rw-r--r--testsuites/validation/tc-sched-smp-edf.c9
-rw-r--r--testsuites/validation/tc-sched-smp.c175
-rw-r--r--testsuites/validation/tc-sched-yield.c8
-rw-r--r--testsuites/validation/tc-scheduler-add-processor.c14
-rw-r--r--testsuites/validation/tc-scheduler-get-maximum-priority.c8
-rw-r--r--testsuites/validation/tc-scheduler-get-processor-set.c8
-rw-r--r--testsuites/validation/tc-scheduler-ident-by-processor-set.c8
-rw-r--r--testsuites/validation/tc-scheduler-ident-by-processor.c12
-rw-r--r--testsuites/validation/tc-scheduler-ident.c9
-rw-r--r--testsuites/validation/tc-scheduler-non-smp.c46
-rw-r--r--testsuites/validation/tc-scheduler-remove-processor.c48
-rw-r--r--testsuites/validation/tc-scheduler-smp-only.c33
-rw-r--r--testsuites/validation/tc-scheduler.c9
-rw-r--r--testsuites/validation/tc-score-fatal.c95
-rw-r--r--testsuites/validation/tc-score-isr.c285
-rw-r--r--testsuites/validation/tc-score-smp-per-cpu-jobs.c9
-rw-r--r--testsuites/validation/tc-score-smp-thread.c32
-rw-r--r--testsuites/validation/tc-score-thread-smp-one-cpu.c15
-rw-r--r--testsuites/validation/tc-score-thread-tls-max-zero.c9
-rw-r--r--testsuites/validation/tc-score-thread-tls.c10
-rw-r--r--testsuites/validation/tc-score-thread.c223
-rw-r--r--testsuites/validation/tc-score-tq-smp.c8
-rw-r--r--testsuites/validation/tc-score-tq.c190
-rw-r--r--testsuites/validation/tc-sem-create.c18
-rw-r--r--testsuites/validation/tc-sem-delete.c8
-rw-r--r--testsuites/validation/tc-sem-flush.c30
-rw-r--r--testsuites/validation/tc-sem-ident.c12
-rw-r--r--testsuites/validation/tc-sem-mrsp-obtain.c8
-rw-r--r--testsuites/validation/tc-sem-obtain.c67
-rw-r--r--testsuites/validation/tc-sem-performance.c114
-rw-r--r--testsuites/validation/tc-sem-release.c34
-rw-r--r--testsuites/validation/tc-sem-set-priority.c9
-rw-r--r--testsuites/validation/tc-sem-smp.c12
-rw-r--r--testsuites/validation/tc-sem-timeout.c43
-rw-r--r--testsuites/validation/tc-sem-uni.c8
-rw-r--r--testsuites/validation/tc-signal-catch.c10
-rw-r--r--testsuites/validation/tc-signal-send.c14
-rw-r--r--testsuites/validation/tc-signals.c8
-rw-r--r--testsuites/validation/tc-start-of-optional-processor-failed.c8
-rw-r--r--testsuites/validation/tc-status-is-equal.c8
-rw-r--r--testsuites/validation/tc-status-is-successful.c9
-rw-r--r--testsuites/validation/tc-status-text.c8
-rw-r--r--testsuites/validation/tc-status.c30
-rw-r--r--testsuites/validation/tc-support-is-name-valid.c9
-rw-r--r--testsuites/validation/tc-support.c9
-rw-r--r--testsuites/validation/tc-sys-lock.c8
-rw-r--r--testsuites/validation/tc-task-construct.c12
-rw-r--r--testsuites/validation/tc-task-create-errors.c11
-rw-r--r--testsuites/validation/tc-task-delete.c724
-rw-r--r--testsuites/validation/tc-task-exit.c52
-rw-r--r--testsuites/validation/tc-task-get-affinity.c9
-rw-r--r--testsuites/validation/tc-task-get-priority.c9
-rw-r--r--testsuites/validation/tc-task-get-scheduler.c9
-rw-r--r--testsuites/validation/tc-task-ident.c10
-rw-r--r--testsuites/validation/tc-task-is-suspended.c9
-rw-r--r--testsuites/validation/tc-task-mode.c10
-rw-r--r--testsuites/validation/tc-task-performance.c106
-rw-r--r--testsuites/validation/tc-task-restart.c20
-rw-r--r--testsuites/validation/tc-task-resume.c8
-rw-r--r--testsuites/validation/tc-task-set-affinity.c13
-rw-r--r--testsuites/validation/tc-task-set-priority.c11
-rw-r--r--testsuites/validation/tc-task-set-scheduler.c11
-rw-r--r--testsuites/validation/tc-task-smp.c8
-rw-r--r--testsuites/validation/tc-task-start.c8
-rw-r--r--testsuites/validation/tc-task-storage-size.c9
-rw-r--r--testsuites/validation/tc-task-suspend.c8
-rw-r--r--testsuites/validation/tc-task-wake-after.c20
-rw-r--r--testsuites/validation/tc-task-wake-when.c16
-rw-r--r--testsuites/validation/tc-task.c10
-rw-r--r--testsuites/validation/tc-terminate.c15
-rw-r--r--testsuites/validation/tc-thread-idle-body-no-return.c205
-rw-r--r--testsuites/validation/tc-timecounter-get-smp.c9
-rw-r--r--testsuites/validation/tc-timecounter-get.c9
-rw-r--r--testsuites/validation/tc-timecounter-install.c9
-rw-r--r--testsuites/validation/tc-timer-cancel.c8
-rw-r--r--testsuites/validation/tc-timer-create.c8
-rw-r--r--testsuites/validation/tc-timer-delete.c8
-rw-r--r--testsuites/validation/tc-timer-fire-after.c9
-rw-r--r--testsuites/validation/tc-timer-fire-when.c8
-rw-r--r--testsuites/validation/tc-timer-ident.c12
-rw-r--r--testsuites/validation/tc-timer-initiate-server.c9
-rw-r--r--testsuites/validation/tc-timer-reset.c10
-rw-r--r--testsuites/validation/tc-timer-server-fire-after.c8
-rw-r--r--testsuites/validation/tc-timer-server-fire-when.c9
-rw-r--r--testsuites/validation/tc-timer.c8
-rw-r--r--testsuites/validation/tc-type.c35
-rw-r--r--testsuites/validation/tc-userext-create.c12
-rw-r--r--testsuites/validation/tc-userext-delete.c8
-rw-r--r--testsuites/validation/tc-userext-ident.c12
-rw-r--r--testsuites/validation/tc-userext.c81
-rw-r--r--testsuites/validation/tc-userext.h4
-rw-r--r--testsuites/validation/tr-event-constant.c15
-rw-r--r--testsuites/validation/tr-event-constant.h6
-rw-r--r--testsuites/validation/tr-event-send-receive.c15
-rw-r--r--testsuites/validation/tr-event-send-receive.h6
-rw-r--r--testsuites/validation/tr-fatal-boot-processor-not-assigned-to-scheduler.c8
-rw-r--r--testsuites/validation/tr-fatal-boot-processor-not-assigned-to-scheduler.h6
-rw-r--r--testsuites/validation/tr-fatal-idle-thread-create-failed.c158
-rw-r--r--testsuites/validation/tr-fatal-idle-thread-create-failed.h84
-rw-r--r--testsuites/validation/tr-fatal-idle-thread-stack-too-small.c175
-rw-r--r--testsuites/validation/tr-fatal-idle-thread-stack-too-small.h84
-rw-r--r--testsuites/validation/tr-fatal-init-task-construct-failed.c8
-rw-r--r--testsuites/validation/tr-fatal-init-task-construct-failed.h6
-rw-r--r--testsuites/validation/tr-fatal-mandatory-processor-not-present.c8
-rw-r--r--testsuites/validation/tr-fatal-mandatory-processor-not-present.h6
-rw-r--r--testsuites/validation/tr-fatal-scheduler-requires-exactly-one-processor.c8
-rw-r--r--testsuites/validation/tr-fatal-scheduler-requires-exactly-one-processor.h6
-rw-r--r--testsuites/validation/tr-fatal-smp.c8
-rw-r--r--testsuites/validation/tr-fatal-smp.h6
-rw-r--r--testsuites/validation/tr-fatal-start-of-mandatory-processor-failed.c8
-rw-r--r--testsuites/validation/tr-fatal-start-of-mandatory-processor-failed.h6
-rw-r--r--testsuites/validation/tr-fatal-start-on-not-online-processor.c8
-rw-r--r--testsuites/validation/tr-fatal-start-on-not-online-processor.h6
-rw-r--r--testsuites/validation/tr-fatal-too-large-tls-size.c8
-rw-r--r--testsuites/validation/tr-fatal-too-large-tls-size.h6
-rw-r--r--testsuites/validation/tr-io-kernel.c10
-rw-r--r--testsuites/validation/tr-io-kernel.h6
-rw-r--r--testsuites/validation/tr-mtx-seize-try.c26
-rw-r--r--testsuites/validation/tr-mtx-seize-try.h6
-rw-r--r--testsuites/validation/tr-mtx-seize-wait.c35
-rw-r--r--testsuites/validation/tr-mtx-seize-wait.h6
-rw-r--r--testsuites/validation/tr-mtx-surrender.c23
-rw-r--r--testsuites/validation/tr-mtx-surrender.h6
-rw-r--r--testsuites/validation/tr-object-ident-local.c14
-rw-r--r--testsuites/validation/tr-object-ident-local.h6
-rw-r--r--testsuites/validation/tr-object-ident.c14
-rw-r--r--testsuites/validation/tr-object-ident.h6
-rw-r--r--testsuites/validation/tr-sem-seize-try.c14
-rw-r--r--testsuites/validation/tr-sem-seize-try.h6
-rw-r--r--testsuites/validation/tr-sem-seize-wait.c14
-rw-r--r--testsuites/validation/tr-sem-seize-wait.h6
-rw-r--r--testsuites/validation/tr-sem-surrender.c14
-rw-r--r--testsuites/validation/tr-sem-surrender.h6
-rw-r--r--testsuites/validation/tr-signal-constant.c14
-rw-r--r--testsuites/validation/tr-signal-constant.h6
-rw-r--r--testsuites/validation/tr-tq-enqueue-ceiling.c25
-rw-r--r--testsuites/validation/tr-tq-enqueue-ceiling.h6
-rw-r--r--testsuites/validation/tr-tq-enqueue-deadlock.c15
-rw-r--r--testsuites/validation/tr-tq-enqueue-deadlock.h6
-rw-r--r--testsuites/validation/tr-tq-enqueue-fifo.c14
-rw-r--r--testsuites/validation/tr-tq-enqueue-fifo.h6
-rw-r--r--testsuites/validation/tr-tq-enqueue-mrsp.c20
-rw-r--r--testsuites/validation/tr-tq-enqueue-mrsp.h6
-rw-r--r--testsuites/validation/tr-tq-enqueue-priority-inherit.c14
-rw-r--r--testsuites/validation/tr-tq-enqueue-priority-inherit.h6
-rw-r--r--testsuites/validation/tr-tq-enqueue-priority.c21
-rw-r--r--testsuites/validation/tr-tq-enqueue-priority.h6
-rw-r--r--testsuites/validation/tr-tq-flush-fifo.c423
-rw-r--r--testsuites/validation/tr-tq-flush-fifo.h39
-rw-r--r--testsuites/validation/tr-tq-flush-priority-inherit.c20
-rw-r--r--testsuites/validation/tr-tq-flush-priority-inherit.h6
-rw-r--r--testsuites/validation/tr-tq-flush-priority.c21
-rw-r--r--testsuites/validation/tr-tq-flush-priority.h6
-rw-r--r--testsuites/validation/tr-tq-surrender-mrsp.c19
-rw-r--r--testsuites/validation/tr-tq-surrender-mrsp.h6
-rw-r--r--testsuites/validation/tr-tq-surrender-priority-inherit.c20
-rw-r--r--testsuites/validation/tr-tq-surrender-priority-inherit.h6
-rw-r--r--testsuites/validation/tr-tq-surrender.c16
-rw-r--r--testsuites/validation/tr-tq-surrender.h6
-rw-r--r--testsuites/validation/tr-tq-timeout-mrsp.c14
-rw-r--r--testsuites/validation/tr-tq-timeout-mrsp.h6
-rw-r--r--testsuites/validation/tr-tq-timeout-priority-inherit.c16
-rw-r--r--testsuites/validation/tr-tq-timeout-priority-inherit.h6
-rw-r--r--testsuites/validation/tr-tq-timeout.c16
-rw-r--r--testsuites/validation/tr-tq-timeout.h6
-rw-r--r--testsuites/validation/ts-acfg.h4
-rw-r--r--testsuites/validation/ts-config.h10
-rw-r--r--testsuites/validation/ts-default.h27
-rw-r--r--testsuites/validation/ts-fatal-boot-processor-not-assigned-to-scheduler.c10
-rw-r--r--testsuites/validation/ts-fatal-idle-thread-create-failed.c90
-rw-r--r--testsuites/validation/ts-fatal-idle-thread-stack-too-small.c97
-rw-r--r--testsuites/validation/ts-fatal-init-task-construct-failed.c10
-rw-r--r--testsuites/validation/ts-fatal-mandatory-processor-not-present.c10
-rw-r--r--testsuites/validation/ts-fatal-scheduler-requires-exactly-one-processor.c10
-rw-r--r--testsuites/validation/ts-fatal-smp.c10
-rw-r--r--testsuites/validation/ts-fatal-start-of-mandatory-processor-failed.c10
-rw-r--r--testsuites/validation/ts-fatal-start-on-not-online-processor.c10
-rw-r--r--testsuites/validation/ts-fatal-sysinit.h13
-rw-r--r--testsuites/validation/ts-fatal-too-large-tls-size.c10
-rw-r--r--testsuites/validation/ts-idle.h8
-rw-r--r--testsuites/validation/ts-performance-no-clock-0.c10
-rw-r--r--testsuites/validation/ts-terminate.c10
-rw-r--r--testsuites/validation/ts-userext.c12
-rw-r--r--testsuites/validation/ts-validation-0.c10
-rw-r--r--testsuites/validation/ts-validation-1.c10
-rw-r--r--testsuites/validation/ts-validation-acfg-0.c13
-rw-r--r--testsuites/validation/ts-validation-acfg-1.c13
-rw-r--r--testsuites/validation/ts-validation-cache.c11
-rw-r--r--testsuites/validation/ts-validation-intr.c11
-rw-r--r--testsuites/validation/ts-validation-io-kernel.c13
-rw-r--r--testsuites/validation/ts-validation-no-clock-0.c10
-rw-r--r--testsuites/validation/ts-validation-non-smp.c11
-rw-r--r--testsuites/validation/ts-validation-one-cpu-0.c11
-rw-r--r--testsuites/validation/ts-validation-one-cpu-1.c16
-rw-r--r--testsuites/validation/ts-validation-smp-one-cpu-0.c10
-rw-r--r--testsuites/validation/ts-validation-smp-only-0.c10
-rw-r--r--testsuites/validation/ts-validation-smp-only-2.c10
-rw-r--r--testsuites/validation/ts-validation-timecounter-0.c10
-rw-r--r--testsuites/validation/ts-validation-timecounter-1.c10
-rw-r--r--testsuites/validation/ts-validation-timecounter-smp-0.c10
-rw-r--r--testsuites/validation/ts-validation-tls-0.c11
-rw-r--r--testsuites/validation/ts-validation-tls-1.c14
-rw-r--r--testsuites/validation/tx-call-within-isr.c106
-rw-r--r--testsuites/validation/tx-default-task-config.c4
-rw-r--r--testsuites/validation/tx-interrupt.c8
-rw-r--r--testsuites/validation/tx-io-relax.c4
-rw-r--r--testsuites/validation/tx-memory-alloc.c4
-rw-r--r--testsuites/validation/tx-preemption-intervention.c4
-rw-r--r--testsuites/validation/tx-support.c4
-rw-r--r--testsuites/validation/tx-support.h18
-rw-r--r--testsuites/validation/tx-thread-queue.c16
-rw-r--r--testsuites/validation/tx-thread-queue.h56
-rw-r--r--testsuites/validation/tx-timecounter.c4
-rw-r--r--testsuites/validation/tx-timer-server.c4
-rw-r--r--testsuites/validation/tx-wrap-thread-queue.c4
931 files changed, 30227 insertions, 12470 deletions
diff --git a/testsuites/ada/sptests/sp09/sptest.adb b/testsuites/ada/sptests/sp09/sptest.adb
index 946829a2c1..fa6aafb349 100644
--- a/testsuites/ada/sptests/sp09/sptest.adb
+++ b/testsuites/ada/sptests/sp09/sptest.adb
@@ -2595,21 +2595,15 @@ package body SPTEST is
TIME := ( 2100, 12, 31, 23, 59, 59, 0 );
RTEMS.CLOCK.SET( TIME, STATUS );
- TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "CLOCK_SET SUCCESSFUL" );
- TEST_SUPPORT.PRINT_TIME(
- "TA1 - clock_set - ",
- TIME,
- " - SUCCESSFUL"
+ TEST_SUPPORT.FATAL_DIRECTIVE_STATUS(
+ STATUS,
+ RTEMS.INVALID_CLOCK,
+ "CLOCK_SET WITH INVALID YEAR"
);
- TEXT_IO.NEW_LINE;
- RTEMS.TASKS.WAKE_AFTER( TEST_SUPPORT.TICKS_PER_SECOND, STATUS );
- TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_WAKE_AFTER" );
- RTEMS.CLOCK.GET_TOD( TIME, STATUS );
- TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "CLOCK_GET_TOD" );
TEST_SUPPORT.PRINT_TIME(
- "TA1 - clock_get - ",
+ "TA1 - clock_set - ",
TIME,
- " - SUCCESSFUL"
+ " - INVALID_CLOCK"
);
TEXT_IO.NEW_LINE;
diff --git a/testsuites/ada/sptests/spatcb01/init.c b/testsuites/ada/sptests/spatcb01/init.c
index 7db4b111b8..401090ddd9 100644
--- a/testsuites/ada/sptests/spatcb01/init.c
+++ b/testsuites/ada/sptests/spatcb01/init.c
@@ -1,7 +1,7 @@
/* SPDX-License-Identifier: BSD-2-Clause */
/*
- * Copyright (c) 2017 embedded brains GmbH
+ * Copyright (c) 2017 embedded brains GmbH & Co. KG
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
diff --git a/testsuites/ada/sptests/spatcb01/spatcb01.adb b/testsuites/ada/sptests/spatcb01/spatcb01.adb
index db74cbb737..19af70e232 100644
--- a/testsuites/ada/sptests/spatcb01/spatcb01.adb
+++ b/testsuites/ada/sptests/spatcb01/spatcb01.adb
@@ -8,7 +8,7 @@
-- Ensure that the SYSTEM.TASK_PRIMITIVES.OPERATIONS.SPECIFIC implementation
-- works.
--
--- Copyright (c) 2017 embedded brains GmbH
+-- Copyright (c) 2017 embedded brains GmbH & Co. KG
--
-- Redistribution and use in source and binary forms, with or without
-- modification, are permitted provided that the following conditions
diff --git a/testsuites/ada/tmtests/tm01/init.c b/testsuites/ada/tmtests/tm01/init.c
index 6c9ec3ff44..3154b15062 100644
--- a/testsuites/ada/tmtests/tm01/init.c
+++ b/testsuites/ada/tmtests/tm01/init.c
@@ -41,7 +41,6 @@
#define ADA_TEST_NAME "ADA TM 1"
#define CONFIGURE_MAXIMUM_SEMAPHORES 1
-#define CONFIGURE_TICKS_PER_TIMESLICE 0
#define CONFIGURE_POSIX_INIT_THREAD_TABLE
diff --git a/testsuites/ada/tmtests/tm02/init.c b/testsuites/ada/tmtests/tm02/init.c
index 84fc053e17..f393301465 100644
--- a/testsuites/ada/tmtests/tm02/init.c
+++ b/testsuites/ada/tmtests/tm02/init.c
@@ -42,7 +42,6 @@
#define ADA_TEST_NAME "ADA TM 2"
#define CONFIGURE_MAXIMUM_TIMERS 110
#define CONFIGURE_MAXIMUM_SEMAPHORES 101
-#define CONFIGURE_TICKS_PER_TIMESLICE 0
#define CONFIGURE_POSIX_INIT_THREAD_TABLE
diff --git a/testsuites/ada/tmtests/tm03/init.c b/testsuites/ada/tmtests/tm03/init.c
index 9e88b1cb55..5db2cc861e 100644
--- a/testsuites/ada/tmtests/tm03/init.c
+++ b/testsuites/ada/tmtests/tm03/init.c
@@ -42,7 +42,6 @@
#define ADA_TEST_NAME "ADA TM 3"
#define CONFIGURE_MAXIMUM_TIMERS 110
#define CONFIGURE_MAXIMUM_SEMAPHORES 101
-#define CONFIGURE_TICKS_PER_TIMESLICE 0
#define CONFIGURE_POSIX_INIT_THREAD_TABLE
diff --git a/testsuites/ada/tmtests/tm04/init.c b/testsuites/ada/tmtests/tm04/init.c
index 826795e729..2f4312d1f9 100644
--- a/testsuites/ada/tmtests/tm04/init.c
+++ b/testsuites/ada/tmtests/tm04/init.c
@@ -41,7 +41,6 @@
#define ADA_TEST_NAME "ADA TM 4"
#define CONFIGURE_MAXIMUM_SEMAPHORES 1
-#define CONFIGURE_TICKS_PER_TIMESLICE 0
#define CONFIGURE_POSIX_INIT_THREAD_TABLE
diff --git a/testsuites/ada/tmtests/tm05/init.c b/testsuites/ada/tmtests/tm05/init.c
index 9e0036e809..206e20af07 100644
--- a/testsuites/ada/tmtests/tm05/init.c
+++ b/testsuites/ada/tmtests/tm05/init.c
@@ -42,7 +42,6 @@
#define ADA_TEST_NAME "ADA TM 5"
#define CONFIGURE_MAXIMUM_TIMERS 110
#define CONFIGURE_MAXIMUM_SEMAPHORES 101
-#define CONFIGURE_TICKS_PER_TIMESLICE 0
#define CONFIGURE_POSIX_INIT_THREAD_TABLE
diff --git a/testsuites/ada/tmtests/tm06/init.c b/testsuites/ada/tmtests/tm06/init.c
index e7da9b9a48..42c701d01a 100644
--- a/testsuites/ada/tmtests/tm06/init.c
+++ b/testsuites/ada/tmtests/tm06/init.c
@@ -42,7 +42,6 @@
#define ADA_TEST_NAME "ADA TM 6"
#define CONFIGURE_MAXIMUM_TIMERS 110
#define CONFIGURE_MAXIMUM_SEMAPHORES 101
-#define CONFIGURE_TICKS_PER_TIMESLICE 0
#define CONFIGURE_POSIX_INIT_THREAD_TABLE
diff --git a/testsuites/ada/tmtests/tm07/init.c b/testsuites/ada/tmtests/tm07/init.c
index e2b2e476f9..582d4f2a77 100644
--- a/testsuites/ada/tmtests/tm07/init.c
+++ b/testsuites/ada/tmtests/tm07/init.c
@@ -42,7 +42,6 @@
#define ADA_TEST_NAME "ADA TM 7"
#define CONFIGURE_MAXIMUM_TIMERS 110
#define CONFIGURE_MAXIMUM_SEMAPHORES 101
-#define CONFIGURE_TICKS_PER_TIMESLICE 0
#define CONFIGURE_POSIX_INIT_THREAD_TABLE
diff --git a/testsuites/ada/tmtests/tm08/init.c b/testsuites/ada/tmtests/tm08/init.c
index d7a38a816b..4f8baa894c 100644
--- a/testsuites/ada/tmtests/tm08/init.c
+++ b/testsuites/ada/tmtests/tm08/init.c
@@ -42,7 +42,6 @@
#define ADA_TEST_NAME "ADA TM 8"
#define CONFIGURE_MAXIMUM_TIMERS 110
#define CONFIGURE_MAXIMUM_SEMAPHORES 101
-#define CONFIGURE_TICKS_PER_TIMESLICE 0
#define CONFIGURE_POSIX_INIT_THREAD_TABLE
diff --git a/testsuites/ada/tmtests/tm09/init.c b/testsuites/ada/tmtests/tm09/init.c
index 42482a2f69..6e881dde7c 100644
--- a/testsuites/ada/tmtests/tm09/init.c
+++ b/testsuites/ada/tmtests/tm09/init.c
@@ -41,7 +41,6 @@
#define ADA_TEST_NAME "ADA TM 9"
#define CONFIGURE_MAXIMUM_MESSAGE_QUEUES 1
-#define CONFIGURE_TICKS_PER_TIMESLICE 0
#define CONFIGURE_POSIX_INIT_THREAD_TABLE
diff --git a/testsuites/ada/tmtests/tm10/init.c b/testsuites/ada/tmtests/tm10/init.c
index 2102a33243..dad2ddbe21 100644
--- a/testsuites/ada/tmtests/tm10/init.c
+++ b/testsuites/ada/tmtests/tm10/init.c
@@ -41,7 +41,6 @@
#define ADA_TEST_NAME "ADA TM 10"
#define CONFIGURE_MAXIMUM_MESSAGE_QUEUES 1
-#define CONFIGURE_TICKS_PER_TIMESLICE 0
#define CONFIGURE_POSIX_INIT_THREAD_TABLE
diff --git a/testsuites/ada/tmtests/tm11/init.c b/testsuites/ada/tmtests/tm11/init.c
index fe34ddf192..588f315dc2 100644
--- a/testsuites/ada/tmtests/tm11/init.c
+++ b/testsuites/ada/tmtests/tm11/init.c
@@ -41,7 +41,6 @@
#define ADA_TEST_NAME "ADA TM 11"
#define CONFIGURE_MAXIMUM_MESSAGE_QUEUES 1
-#define CONFIGURE_TICKS_PER_TIMESLICE 0
#define CONFIGURE_POSIX_INIT_THREAD_TABLE
diff --git a/testsuites/ada/tmtests/tm12/init.c b/testsuites/ada/tmtests/tm12/init.c
index 7ac3debe6c..7f20fae43b 100644
--- a/testsuites/ada/tmtests/tm12/init.c
+++ b/testsuites/ada/tmtests/tm12/init.c
@@ -41,7 +41,6 @@
#define ADA_TEST_NAME "ADA TM 12"
#define CONFIGURE_MAXIMUM_MESSAGE_QUEUES 1
-#define CONFIGURE_TICKS_PER_TIMESLICE 0
#define CONFIGURE_POSIX_INIT_THREAD_TABLE
diff --git a/testsuites/ada/tmtests/tm13/init.c b/testsuites/ada/tmtests/tm13/init.c
index 66a79607b6..e979602297 100644
--- a/testsuites/ada/tmtests/tm13/init.c
+++ b/testsuites/ada/tmtests/tm13/init.c
@@ -41,7 +41,6 @@
#define ADA_TEST_NAME "ADA TM 13"
#define CONFIGURE_MAXIMUM_MESSAGE_QUEUES 1
-#define CONFIGURE_TICKS_PER_TIMESLICE 0
#define CONFIGURE_POSIX_INIT_THREAD_TABLE
diff --git a/testsuites/ada/tmtests/tm14/init.c b/testsuites/ada/tmtests/tm14/init.c
index c9ecdd5826..03d99d081a 100644
--- a/testsuites/ada/tmtests/tm14/init.c
+++ b/testsuites/ada/tmtests/tm14/init.c
@@ -41,7 +41,6 @@
#define ADA_TEST_NAME "ADA TM 14"
#define CONFIGURE_MAXIMUM_MESSAGE_QUEUES 1
-#define CONFIGURE_TICKS_PER_TIMESLICE 0
#define CONFIGURE_POSIX_INIT_THREAD_TABLE
diff --git a/testsuites/ada/tmtests/tm15/init.c b/testsuites/ada/tmtests/tm15/init.c
index 710599245a..53e380d0a6 100644
--- a/testsuites/ada/tmtests/tm15/init.c
+++ b/testsuites/ada/tmtests/tm15/init.c
@@ -41,7 +41,6 @@
#define ADA_TEST_NAME "ADA TM 15"
#define CONFIGURE_MAXIMUM_MESSAGE_QUEUES 1
-#define CONFIGURE_TICKS_PER_TIMESLICE 0
#define CONFIGURE_POSIX_INIT_THREAD_TABLE
diff --git a/testsuites/ada/tmtests/tm16/init.c b/testsuites/ada/tmtests/tm16/init.c
index b54f3559b5..aa7d907c66 100644
--- a/testsuites/ada/tmtests/tm16/init.c
+++ b/testsuites/ada/tmtests/tm16/init.c
@@ -41,7 +41,6 @@
#define ADA_TEST_NAME "ADA TM 16"
#define CONFIGURE_MAXIMUM_MESSAGE_QUEUES 1
-#define CONFIGURE_TICKS_PER_TIMESLICE 0
#define CONFIGURE_POSIX_INIT_THREAD_TABLE
diff --git a/testsuites/ada/tmtests/tm17/init.c b/testsuites/ada/tmtests/tm17/init.c
index e9252771cb..c3ba070e1c 100644
--- a/testsuites/ada/tmtests/tm17/init.c
+++ b/testsuites/ada/tmtests/tm17/init.c
@@ -41,7 +41,6 @@
#define ADA_TEST_NAME "ADA TM 17"
#define CONFIGURE_MAXIMUM_MESSAGE_QUEUES 1
-#define CONFIGURE_TICKS_PER_TIMESLICE 0
#define CONFIGURE_POSIX_INIT_THREAD_TABLE
diff --git a/testsuites/ada/tmtests/tm18/init.c b/testsuites/ada/tmtests/tm18/init.c
index 104134d726..29dc4f23e6 100644
--- a/testsuites/ada/tmtests/tm18/init.c
+++ b/testsuites/ada/tmtests/tm18/init.c
@@ -41,7 +41,6 @@
#define ADA_TEST_NAME "ADA TM 18"
#define CONFIGURE_MAXIMUM_MESSAGE_QUEUES 1
-#define CONFIGURE_TICKS_PER_TIMESLICE 0
#define CONFIGURE_POSIX_INIT_THREAD_TABLE
diff --git a/testsuites/ada/tmtests/tm19/init.c b/testsuites/ada/tmtests/tm19/init.c
index 1961769118..634f2e0f2b 100644
--- a/testsuites/ada/tmtests/tm19/init.c
+++ b/testsuites/ada/tmtests/tm19/init.c
@@ -41,7 +41,6 @@
#define ADA_TEST_NAME "ADA TM 19"
#define CONFIGURE_MAXIMUM_MESSAGE_QUEUES 1
-#define CONFIGURE_TICKS_PER_TIMESLICE 0
#define CONFIGURE_POSIX_INIT_THREAD_TABLE
diff --git a/testsuites/ada/tmtests/tm20/init.c b/testsuites/ada/tmtests/tm20/init.c
index 5f252c2f34..e9ae7d17d7 100644
--- a/testsuites/ada/tmtests/tm20/init.c
+++ b/testsuites/ada/tmtests/tm20/init.c
@@ -42,7 +42,6 @@
#define CONFIGURE_MAXIMUM_TASKS 3
#define ADA_TEST_NAME "ADA TM 20"
-#define CONFIGURE_TICKS_PER_TIMESLICE 0
#define CONFIGURE_POSIX_INIT_THREAD_TABLE
diff --git a/testsuites/ada/tmtests/tm21/init.c b/testsuites/ada/tmtests/tm21/init.c
index 06abc7b7f6..cc7de913f4 100644
--- a/testsuites/ada/tmtests/tm21/init.c
+++ b/testsuites/ada/tmtests/tm21/init.c
@@ -47,7 +47,6 @@
#define CONFIGURE_MAXIMUM_REGIONS 100
#define CONFIGURE_MAXIMUM_PORTS 100
#define CONFIGURE_MAXIMUM_PERIODS 100
-#define CONFIGURE_TICKS_PER_TIMESLICE 0
#define CONFIGURE_MESSAGE_BUFFER_MEMORY \
(CONFIGURE_MAXIMUM_MESSAGE_QUEUES \
diff --git a/testsuites/ada/tmtests/tm22/init.c b/testsuites/ada/tmtests/tm22/init.c
index 929bf75b53..9ad7875a5f 100644
--- a/testsuites/ada/tmtests/tm22/init.c
+++ b/testsuites/ada/tmtests/tm22/init.c
@@ -41,7 +41,6 @@
#define ADA_TEST_NAME "ADA TM 22"
#define CONFIGURE_MAXIMUM_MESSAGE_QUEUES 1
-#define CONFIGURE_TICKS_PER_TIMESLICE 0
#define CONFIGURE_POSIX_INIT_THREAD_TABLE
diff --git a/testsuites/ada/tmtests/tm23/init.c b/testsuites/ada/tmtests/tm23/init.c
index 951933f1f4..768bd95df8 100644
--- a/testsuites/ada/tmtests/tm23/init.c
+++ b/testsuites/ada/tmtests/tm23/init.c
@@ -41,7 +41,6 @@
#define ADA_TEST_NAME "ADA TM 23"
#define CONFIGURE_MAXIMUM_TIMERS 110
-#define CONFIGURE_TICKS_PER_TIMESLICE 0
#define CONFIGURE_POSIX_INIT_THREAD_TABLE
diff --git a/testsuites/ada/tmtests/tm24/init.c b/testsuites/ada/tmtests/tm24/init.c
index b90daf0738..8b25ab46bd 100644
--- a/testsuites/ada/tmtests/tm24/init.c
+++ b/testsuites/ada/tmtests/tm24/init.c
@@ -40,7 +40,6 @@
#define CONFIGURE_MAXIMUM_TASKS 111
#define ADA_TEST_NAME "ADA TM 24"
-#define CONFIGURE_TICKS_PER_TIMESLICE 0
#define CONFIGURE_POSIX_INIT_THREAD_TABLE
diff --git a/testsuites/ada/tmtests/tm25/init.c b/testsuites/ada/tmtests/tm25/init.c
index 0ebf5a934b..e0bb5bf4f3 100644
--- a/testsuites/ada/tmtests/tm25/init.c
+++ b/testsuites/ada/tmtests/tm25/init.c
@@ -41,7 +41,6 @@
#define ADA_TEST_NAME "ADA TM 25"
#define CONFIGURE_MAXIMUM_SEMAPHORES 1
-#define CONFIGURE_TICKS_PER_TIMESLICE 0
#define CONFIGURE_POSIX_INIT_THREAD_TABLE
diff --git a/testsuites/ada/tmtests/tm28/init.c b/testsuites/ada/tmtests/tm28/init.c
index 484756174c..542135b84e 100644
--- a/testsuites/ada/tmtests/tm28/init.c
+++ b/testsuites/ada/tmtests/tm28/init.c
@@ -41,7 +41,6 @@
#define ADA_TEST_NAME "ADA TM 28"
#define CONFIGURE_MAXIMUM_PORTS 1
-#define CONFIGURE_TICKS_PER_TIMESLICE 0
#define CONFIGURE_POSIX_INIT_THREAD_TABLE
diff --git a/testsuites/ada/tmtests/tm29/init.c b/testsuites/ada/tmtests/tm29/init.c
index 3f12731be8..f0c509c9b0 100644
--- a/testsuites/ada/tmtests/tm29/init.c
+++ b/testsuites/ada/tmtests/tm29/init.c
@@ -41,7 +41,6 @@
#define ADA_TEST_NAME "ADA TM 29"
#define CONFIGURE_MAXIMUM_PERIODS 111
-#define CONFIGURE_TICKS_PER_TIMESLICE 0
#define CONFIGURE_POSIX_INIT_THREAD_TABLE
diff --git a/testsuites/ada/tmtests/tmck/init.c b/testsuites/ada/tmtests/tmck/init.c
index ae32bcc9e7..8c0682be41 100644
--- a/testsuites/ada/tmtests/tmck/init.c
+++ b/testsuites/ada/tmtests/tmck/init.c
@@ -41,7 +41,6 @@
#define ADA_TEST_NAME "ADA TMCK"
#define CONFIGURE_MAXIMUM_SEMAPHORES 1
-#define CONFIGURE_TICKS_PER_TIMESLICE 0
#define CONFIGURE_POSIX_INIT_THREAD_TABLE
diff --git a/testsuites/benchmarks/dhrystone/dhry_1.c b/testsuites/benchmarks/dhrystone/dhry_1.c
index 3ad2e7f204..ef6ecf9251 100644
--- a/testsuites/benchmarks/dhrystone/dhry_1.c
+++ b/testsuites/benchmarks/dhrystone/dhry_1.c
@@ -133,6 +133,7 @@ execution_start:
#ifdef __rtems__
/* avoid used uninitialized warning */
+ Int_1_Loc = 0;
Int_2_Loc = 0;
#endif
diff --git a/testsuites/benchmarks/dhrystone/init.c b/testsuites/benchmarks/dhrystone/init.c
index 448369074e..ba55976d6d 100644
--- a/testsuites/benchmarks/dhrystone/init.c
+++ b/testsuites/benchmarks/dhrystone/init.c
@@ -1,7 +1,7 @@
/* SPDX-License-Identifier: BSD-2-Clause */
/*
- * Copyright (c) 2017 embedded brains GmbH. All rights reserved.
+ * Copyright (c) 2017 embedded brains GmbH & Co. KG
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
diff --git a/testsuites/benchmarks/linpack/init.c b/testsuites/benchmarks/linpack/init.c
index 2899674bca..24922eb93b 100644
--- a/testsuites/benchmarks/linpack/init.c
+++ b/testsuites/benchmarks/linpack/init.c
@@ -1,7 +1,7 @@
/* SPDX-License-Identifier: BSD-2-Clause */
/*
- * Copyright (c) 2017 embedded brains GmbH. All rights reserved.
+ * Copyright (c) 2017 embedded brains GmbH & Co. KG
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
diff --git a/testsuites/benchmarks/linpack/linpack-pc.c b/testsuites/benchmarks/linpack/linpack-pc.c
index 1fef18eb96..5f00df1d7c 100644
--- a/testsuites/benchmarks/linpack/linpack-pc.c
+++ b/testsuites/benchmarks/linpack/linpack-pc.c
@@ -224,7 +224,7 @@
#include <math.h>
#include <stdlib.h>
#ifdef __rtems__
-#include <tmacros.h>
+#include <rtems/test-printer.h>
#undef print_time
#define fprintf(f, ...) rtems_printf(&rtems_test_printer, __VA_ARGS__)
#endif /* __rtems__ */
diff --git a/testsuites/benchmarks/whetstone/init.c b/testsuites/benchmarks/whetstone/init.c
index 37adcb3e89..dd4b1a70e0 100644
--- a/testsuites/benchmarks/whetstone/init.c
+++ b/testsuites/benchmarks/whetstone/init.c
@@ -1,7 +1,7 @@
/* SPDX-License-Identifier: BSD-2-Clause */
/*
- * Copyright (c) 2017 embedded brains GmbH. All rights reserved.
+ * Copyright (c) 2017 embedded brains GmbH & Co. KG
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
diff --git a/testsuites/benchmarks/whetstone/whetstone.c b/testsuites/benchmarks/whetstone/whetstone.c
index e0a93aa88c..aae68af6a6 100644
--- a/testsuites/benchmarks/whetstone/whetstone.c
+++ b/testsuites/benchmarks/whetstone/whetstone.c
@@ -57,7 +57,7 @@ C**********************************************************************
#include <string.h>
#include <math.h>
#ifdef __rtems__
-#include <tmacros.h>
+#include <rtems/test-printer.h>
#define fprintf(f, ...) rtems_printf(&rtems_test_printer, __VA_ARGS__)
#endif /* __rtems__ */
diff --git a/testsuites/build/bin/fake-rtems5-ar b/testsuites/build/bin/fake-rtems5-ar
index 1561e69e27..899dc2c011 100755
--- a/testsuites/build/bin/fake-rtems5-ar
+++ b/testsuites/build/bin/fake-rtems5-ar
@@ -2,7 +2,7 @@
# SPDX-License-Identifier: BSD-2-Clause
#
-# Copyright (C) 2019 embedded brains GmbH
+# Copyright (C) 2019 embedded brains GmbH & Co. KG
#
# Redistribution and use in source and binary forms, with or without
# modification, are permitted provided that the following conditions
diff --git a/testsuites/build/bin/fake-rtems5-gcc b/testsuites/build/bin/fake-rtems5-gcc
index f2ae2d92c5..80198fad4d 100755
--- a/testsuites/build/bin/fake-rtems5-gcc
+++ b/testsuites/build/bin/fake-rtems5-gcc
@@ -2,7 +2,7 @@
# SPDX-License-Identifier: BSD-2-Clause
#
-# Copyright (C) 2019 embedded brains GmbH
+# Copyright (C) 2019 embedded brains GmbH & Co. KG
#
# Redistribution and use in source and binary forms, with or without
# modification, are permitted provided that the following conditions
diff --git a/testsuites/build/bin/fake-rtems5-ld b/testsuites/build/bin/fake-rtems5-ld
index 1561e69e27..899dc2c011 100755
--- a/testsuites/build/bin/fake-rtems5-ld
+++ b/testsuites/build/bin/fake-rtems5-ld
@@ -2,7 +2,7 @@
# SPDX-License-Identifier: BSD-2-Clause
#
-# Copyright (C) 2019 embedded brains GmbH
+# Copyright (C) 2019 embedded brains GmbH & Co. KG
#
# Redistribution and use in source and binary forms, with or without
# modification, are permitted provided that the following conditions
diff --git a/testsuites/build/test.py b/testsuites/build/test.py
index e8b50983dd..084cd2b673 100755
--- a/testsuites/build/test.py
+++ b/testsuites/build/test.py
@@ -2,7 +2,7 @@
# SPDX-License-Identifier: BSD-2-Clause
#
-# Copyright (C) 2019 embedded brains GmbH
+# Copyright (C) 2019 embedded brains GmbH & Co. KG
#
# Redistribution and use in source and binary forms, with or without
# modification, are permitted provided that the following conditions
diff --git a/testsuites/fstests/fsbdpart01/init.c b/testsuites/fstests/fsbdpart01/init.c
index 1133e7b1c9..634604f9ca 100644
--- a/testsuites/fstests/fsbdpart01/init.c
+++ b/testsuites/fstests/fsbdpart01/init.c
@@ -1,7 +1,7 @@
/* SPDX-License-Identifier: BSD-2-Clause */
/*
- * Copyright (c) 2012 embedded brains GmbH. All rights reserved.
+ * Copyright (c) 2012 embedded brains GmbH & Co. KG
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
diff --git a/testsuites/fstests/fsclose01/init.c b/testsuites/fstests/fsclose01/init.c
index ac461c66be..c425fa67c2 100644
--- a/testsuites/fstests/fsclose01/init.c
+++ b/testsuites/fstests/fsclose01/init.c
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2012, 2020 embedded brains GmbH (http://www.embedded-brains.de)
+ * Copyright (C) 2012, 2020 embedded brains GmbH & Co. KG
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
diff --git a/testsuites/fstests/fsdosfsformat01/init.c b/testsuites/fstests/fsdosfsformat01/init.c
index 1fe39d1d06..876d9c2f58 100644
--- a/testsuites/fstests/fsdosfsformat01/init.c
+++ b/testsuites/fstests/fsdosfsformat01/init.c
@@ -1,7 +1,7 @@
/* SPDX-License-Identifier: BSD-2-Clause */
/*
- * Copyright (c) 2012 embedded brains GmbH. All rights reserved.
+ * Copyright (c) 2012 embedded brains GmbH & Co. KG
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
diff --git a/testsuites/fstests/fsdosfsname01/create_files.cs b/testsuites/fstests/fsdosfsname01/create_files.cs
index 3f16aefc04..3cce61435b 100644
--- a/testsuites/fstests/fsdosfsname01/create_files.cs
+++ b/testsuites/fstests/fsdosfsname01/create_files.cs
@@ -14,7 +14,7 @@
*/
/*
- * Copyright (c) 2013 embedded brains GmbH. All rights reserved.
+ * Copyright (c) 2013 embedded brains GmbH & Co. KG
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
diff --git a/testsuites/fstests/fsdosfsname01/create_image.sh b/testsuites/fstests/fsdosfsname01/create_image.sh
index bd14baaae4..d37762e509 100755
--- a/testsuites/fstests/fsdosfsname01/create_image.sh
+++ b/testsuites/fstests/fsdosfsname01/create_image.sh
@@ -2,7 +2,7 @@
# SPDX-License-Identifier: BSD-2-Clause
#
-# Copyright (c) 2013 embedded brains GmbH.
+# Copyright (c) 2013 embedded brains GmbH & Co. KG
#
# Redistribution and use in source and binary forms, with or without
# modification, are permitted provided that the following conditions
diff --git a/testsuites/fstests/fsdosfsname01/image_bin_le_multibyte.h b/testsuites/fstests/fsdosfsname01/image_bin_le_multibyte.h
index 7b9e931528..3e74ae63a7 100644
--- a/testsuites/fstests/fsdosfsname01/image_bin_le_multibyte.h
+++ b/testsuites/fstests/fsdosfsname01/image_bin_le_multibyte.h
@@ -9,7 +9,7 @@
*/
/*
- * Copyright (c) 2013 embedded brains GmbH. All rights reserved.
+ * Copyright (c) 2013 embedded brains GmbH & Co. KG
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
diff --git a/testsuites/fstests/fsdosfsname01/image_bin_le_singlebyte.h b/testsuites/fstests/fsdosfsname01/image_bin_le_singlebyte.h
index 0e089d7f6d..eb71832354 100644
--- a/testsuites/fstests/fsdosfsname01/image_bin_le_singlebyte.h
+++ b/testsuites/fstests/fsdosfsname01/image_bin_le_singlebyte.h
@@ -9,7 +9,7 @@
*/
/*
- * Copyright (c) 2013 embedded brains GmbH. All rights reserved.
+ * Copyright (c) 2013 embedded brains GmbH & Co. KG
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
diff --git a/testsuites/fstests/fsdosfsname01/init.c b/testsuites/fstests/fsdosfsname01/init.c
index 75854dee17..16fe6e9f84 100644
--- a/testsuites/fstests/fsdosfsname01/init.c
+++ b/testsuites/fstests/fsdosfsname01/init.c
@@ -1,7 +1,7 @@
/* SPDX-License-Identifier: BSD-2-Clause */
/*
- * Copyright (c) 2012, 2013 embedded brains GmbH. All rights reserved.
+ * Copyright (C) 2012, 2013 embedded brains GmbH & Co. KG
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
diff --git a/testsuites/fstests/fsdosfsname02/init.c b/testsuites/fstests/fsdosfsname02/init.c
index 9a8256c9a6..3ff878c997 100644
--- a/testsuites/fstests/fsdosfsname02/init.c
+++ b/testsuites/fstests/fsdosfsname02/init.c
@@ -1,7 +1,7 @@
/* SPDX-License-Identifier: BSD-2-Clause */
/*
- * Copyright (c) 2017 embedded brains GmbH. All rights reserved.
+ * Copyright (c) 2017 embedded brains GmbH & Co. KG
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
diff --git a/testsuites/fstests/fsdosfssync01/init.c b/testsuites/fstests/fsdosfssync01/init.c
index 1fe8177fba..b4e8c08a7e 100644
--- a/testsuites/fstests/fsdosfssync01/init.c
+++ b/testsuites/fstests/fsdosfssync01/init.c
@@ -1,7 +1,7 @@
/* SPDX-License-Identifier: BSD-2-Clause */
/*
- * Copyright (c) 2012 embedded brains GmbH. All rights reserved.
+ * Copyright (c) 2012 embedded brains GmbH & Co. KG
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
diff --git a/testsuites/fstests/fsdosfswrite01/init.c b/testsuites/fstests/fsdosfswrite01/init.c
index 54089835f7..15928cbcf0 100644
--- a/testsuites/fstests/fsdosfswrite01/init.c
+++ b/testsuites/fstests/fsdosfswrite01/init.c
@@ -1,7 +1,7 @@
/* SPDX-License-Identifier: BSD-2-Clause */
/*
- * Copyright (c) 2012 embedded brains GmbH. All rights reserved.
+ * Copyright (c) 2012 embedded brains GmbH & Co. KG
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
diff --git a/testsuites/fstests/fsfseeko01/init.c b/testsuites/fstests/fsfseeko01/init.c
index 3aef821d39..01bf024d95 100644
--- a/testsuites/fstests/fsfseeko01/init.c
+++ b/testsuites/fstests/fsfseeko01/init.c
@@ -1,7 +1,7 @@
/* SPDX-License-Identifier: BSD-2-Clause */
/*
- * Copyright (c) 2012 embedded brains GmbH. All rights reserved.
+ * Copyright (c) 2012 embedded brains GmbH & Co. KG
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
diff --git a/testsuites/fstests/fsimfsconfig01/init.c b/testsuites/fstests/fsimfsconfig01/init.c
index 04acdd2b79..bd994c895c 100644
--- a/testsuites/fstests/fsimfsconfig01/init.c
+++ b/testsuites/fstests/fsimfsconfig01/init.c
@@ -1,7 +1,7 @@
/* SPDX-License-Identifier: BSD-2-Clause */
/*
- * Copyright (c) 2015 embedded brains GmbH. All rights reserved.
+ * Copyright (c) 2015 embedded brains GmbH & Co. KG
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
diff --git a/testsuites/fstests/fsimfsconfig02/init.c b/testsuites/fstests/fsimfsconfig02/init.c
index ce36292119..87f226f8dc 100644
--- a/testsuites/fstests/fsimfsconfig02/init.c
+++ b/testsuites/fstests/fsimfsconfig02/init.c
@@ -1,7 +1,7 @@
/* SPDX-License-Identifier: BSD-2-Clause */
/*
- * Copyright (c) 2015 embedded brains GmbH. All rights reserved.
+ * Copyright (c) 2015 embedded brains GmbH & Co. KG
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
diff --git a/testsuites/fstests/fsimfsconfig03/init.c b/testsuites/fstests/fsimfsconfig03/init.c
index d5a5485d1a..2fe37f3b6e 100644
--- a/testsuites/fstests/fsimfsconfig03/init.c
+++ b/testsuites/fstests/fsimfsconfig03/init.c
@@ -1,7 +1,7 @@
/* SPDX-License-Identifier: BSD-2-Clause */
/*
- * Copyright (c) 2015 embedded brains GmbH. All rights reserved.
+ * Copyright (c) 2015 embedded brains GmbH & Co. KG
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
diff --git a/testsuites/fstests/fsimfsgeneric01/init.c b/testsuites/fstests/fsimfsgeneric01/init.c
index 28c52bf12d..3a3bbc60d8 100644
--- a/testsuites/fstests/fsimfsgeneric01/init.c
+++ b/testsuites/fstests/fsimfsgeneric01/init.c
@@ -1,7 +1,7 @@
/* SPDX-License-Identifier: BSD-2-Clause */
/*
- * Copyright (C) 2012, 2020 embedded brains GmbH (http://www.embedded-brains.de)
+ * Copyright (C) 2012, 2020 embedded brains GmbH & Co. KG
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
diff --git a/testsuites/fstests/fsjffs2empty01/fsjffs2empty01.doc b/testsuites/fstests/fsjffs2empty01/fsjffs2empty01.doc
new file mode 100644
index 0000000000..2ad886a1fb
--- /dev/null
+++ b/testsuites/fstests/fsjffs2empty01/fsjffs2empty01.doc
@@ -0,0 +1,11 @@
+This file describes the directives and concepts tested by this test set.
+
+test set name: fsjffs2empty01
+
+directives:
+
+ - JFFS2 implementation
+
+concepts:
+
+ - Ensure that the JFFS2 library can remount a filesystem where every block has been written to and all files have been deleted.
diff --git a/testsuites/fstests/fsjffs2empty01/fsjffs2empty01.scn b/testsuites/fstests/fsjffs2empty01/fsjffs2empty01.scn
new file mode 100644
index 0000000000..56dca74761
--- /dev/null
+++ b/testsuites/fstests/fsjffs2empty01/fsjffs2empty01.scn
@@ -0,0 +1,6 @@
+*** BEGIN OF TEST FSJFFS2EMPTY 1 ***
+Initializing filesystem JFFS2
+
+
+Shutting down filesystem JFFS2
+*** END OF TEST FSJFFS2EMPTY 1 ***
diff --git a/testsuites/fstests/fsjffs2empty01/init.c b/testsuites/fstests/fsjffs2empty01/init.c
new file mode 100644
index 0000000000..3232ea8fde
--- /dev/null
+++ b/testsuites/fstests/fsjffs2empty01/init.c
@@ -0,0 +1,245 @@
+/* SPDX-License-Identifier: BSD-2-Clause */
+
+/*
+ * Copyright (C) 2024 On-Line Applications Research (OAR)
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#include <fcntl.h>
+#include <stdio.h>
+#include <tmacros.h>
+
+#include <rtems.h>
+#include <rtems/jffs2.h>
+#include <rtems/libio.h>
+
+#define BLOCK_SIZE (16UL * 1024UL)
+
+#define FLASH_SIZE (8UL * BLOCK_SIZE)
+
+const char rtems_test_name[] = "FSJFFS2EMPTY 1";
+
+#define BASE_FOR_TEST "/mnt"
+static char big[] = BASE_FOR_TEST "/big";
+
+static char keg[523];
+
+static void init_keg(void)
+{
+ uint32_t v = 123;
+
+ for (size_t i = 0; i < sizeof(keg); ++i) {
+ v = v * 1664525 + 1013904223;
+ keg[i] = (uint8_t) (v >> 23);
+ }
+}
+
+static void create_big_file(void)
+{
+ int rv;
+ int fd = open(&big[0], O_WRONLY | O_TRUNC | O_CREAT,
+ S_IRWXU | S_IRWXG | S_IRWXO);
+ rtems_test_assert(fd >= 0);
+
+ for (int i = 0; i < 100; ++i) {
+ ssize_t n = write(fd, &keg[0], sizeof(keg));
+ rtems_test_assert(n == (ssize_t) sizeof(keg));
+ }
+
+ rv = close(fd);
+ rtems_test_assert(rv == 0);
+}
+
+static void remove_big_file(void)
+{
+ int rv = unlink(&big[0]);
+ rtems_test_assert(rv == 0);
+}
+
+typedef struct {
+ rtems_jffs2_flash_control super;
+ unsigned char area[FLASH_SIZE];
+} flash_control;
+
+static unsigned char *get_flash_chunk(rtems_jffs2_flash_control *super,
+ uint32_t offset)
+{
+ return &((flash_control *) super)->area[offset];
+}
+
+static int flash_read(
+ rtems_jffs2_flash_control *super,
+ uint32_t offset,
+ unsigned char *buffer,
+ size_t size_of_buffer
+)
+{
+ unsigned char *chunk = get_flash_chunk(super, offset);
+
+ memcpy(buffer, chunk, size_of_buffer);
+
+ return 0;
+}
+
+static int flash_write(
+ rtems_jffs2_flash_control *super,
+ uint32_t offset,
+ const unsigned char *buffer,
+ size_t size_of_buffer
+)
+{
+ unsigned char *chunk = get_flash_chunk(super, offset);
+
+ for (size_t i = 0; i < size_of_buffer; ++i) {
+ chunk[i] &= buffer[i];
+ }
+
+ return 0;
+}
+
+static int flash_erase(
+ rtems_jffs2_flash_control *super,
+ uint32_t offset
+)
+{
+ unsigned char *chunk = get_flash_chunk(super, offset);
+
+ memset(chunk, 0xff, BLOCK_SIZE);
+
+ return 0;
+}
+
+static flash_control flash_instance = {
+ .super = {
+ .block_size = BLOCK_SIZE,
+ .flash_size = FLASH_SIZE,
+ .read = flash_read,
+ .write = flash_write,
+ .erase = flash_erase
+ }
+};
+
+static rtems_jffs2_compressor_control compressor_instance = {
+ .compress = rtems_jffs2_compressor_rtime_compress,
+ .decompress = rtems_jffs2_compressor_rtime_decompress
+};
+
+static const rtems_jffs2_mount_data mount_data = {
+ .flash_control = &flash_instance.super,
+ .compressor_control = &compressor_instance
+};
+
+static void erase_all(void)
+{
+ memset(&flash_instance.area[0], 0xff, FLASH_SIZE);
+}
+
+static void test_initialize_filesystem(void)
+{
+ int rv = mount(
+ NULL,
+ BASE_FOR_TEST,
+ RTEMS_FILESYSTEM_TYPE_JFFS2,
+ RTEMS_FILESYSTEM_READ_WRITE,
+ &mount_data
+ );
+ rtems_test_assert(rv == 0);
+}
+
+static void test_shutdown_filesystem(void)
+{
+ int rv = unmount(BASE_FOR_TEST);
+ rtems_test_assert(rv == 0);
+}
+
+static rtems_task Init(
+ rtems_task_argument ignored)
+{
+ int rv;
+
+ TEST_BEGIN();
+
+ erase_all();
+
+ rv = mkdir(BASE_FOR_TEST, S_IRWXU | S_IRWXG | S_IRWXO);
+ rtems_test_assert(rv == 0);
+
+ puts( "Initializing JFFS2 filesystem" );
+ test_initialize_filesystem();
+
+ init_keg();
+
+ /*
+ * Ensure that jiffies != 0, to use most likely path in
+ * jffs2_mark_node_obsolete(). Without this the failure only happens
+ * intermittently.
+ */
+ while (rtems_clock_get_ticks_since_boot() == 0) {
+ /* Wait */
+ }
+
+ /*
+ * This must be done in 2 parts because the FS is only so large and all blocks
+ * must be written to.
+ */
+ create_big_file();
+ remove_big_file();
+
+ create_big_file();
+ remove_big_file();
+
+ puts( "\n\nShutting down JFFS2 filesystem");
+ test_shutdown_filesystem();
+
+ puts( "Initializing JFFS2 filesystem again" );
+ test_initialize_filesystem();
+
+ puts( "\n\nShutting down JFFS2 filesystem again" );
+ test_shutdown_filesystem();
+
+ TEST_END();
+ rtems_test_exit(0);
+}
+
+#define CONFIGURE_APPLICATION_NEEDS_CLOCK_DRIVER
+#define CONFIGURE_APPLICATION_NEEDS_SIMPLE_CONSOLE_DRIVER
+
+#define CONFIGURE_FILESYSTEM_JFFS2
+
+#define CONFIGURE_MAXIMUM_FILE_DESCRIPTORS 40
+
+#define CONFIGURE_MAXIMUM_TASKS 2
+
+#define CONFIGURE_INIT_TASK_STACK_SIZE (32 * 1024)
+#define CONFIGURE_INIT_TASK_ATTRIBUTES RTEMS_FLOATING_POINT
+
+#define CONFIGURE_INITIAL_EXTENSIONS RTEMS_TEST_INITIAL_EXTENSION
+
+#define CONFIGURE_RTEMS_INIT_TASKS_TABLE
+
+#define CONFIGURE_INIT
+#include <rtems/confdefs.h>
diff --git a/testsuites/fstests/fsjffs2gc01/init.c b/testsuites/fstests/fsjffs2gc01/init.c
index a72636927d..4d29373b90 100644
--- a/testsuites/fstests/fsjffs2gc01/init.c
+++ b/testsuites/fstests/fsjffs2gc01/init.c
@@ -1,7 +1,7 @@
/* SPDX-License-Identifier: BSD-2-Clause */
/*
- * Copyright (c) 2016 embedded brains GmbH. All rights reserved.
+ * Copyright (c) 2016 embedded brains GmbH & Co. KG
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
diff --git a/testsuites/fstests/fsnofs01/init.c b/testsuites/fstests/fsnofs01/init.c
index 0d11fea284..b1c1488168 100644
--- a/testsuites/fstests/fsnofs01/init.c
+++ b/testsuites/fstests/fsnofs01/init.c
@@ -1,7 +1,7 @@
/* SPDX-License-Identifier: BSD-2-Clause */
/*
- * Copyright (c) 2012 embedded brains GmbH. All rights reserved.
+ * Copyright (c) 2012 embedded brains GmbH & Co. KG
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
diff --git a/testsuites/fstests/fsrofs01/init.c b/testsuites/fstests/fsrofs01/init.c
index 5c4dd7e8db..0af88879d9 100644
--- a/testsuites/fstests/fsrofs01/init.c
+++ b/testsuites/fstests/fsrofs01/init.c
@@ -1,7 +1,7 @@
/* SPDX-License-Identifier: BSD-2-Clause */
/*
- * Copyright (c) 2012 embedded brains GmbH. All rights reserved.
+ * Copyright (c) 2012 embedded brains GmbH & Co. KG
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
diff --git a/testsuites/fstests/jffs2_nand_support/fs_config.h b/testsuites/fstests/jffs2_nand_support/fs_config.h
new file mode 100644
index 0000000000..548f5203e6
--- /dev/null
+++ b/testsuites/fstests/jffs2_nand_support/fs_config.h
@@ -0,0 +1,33 @@
+/* SPDX-License-Identifier: BSD-2-Clause */
+
+/*
+ * Copyright (C) 2023 On-Line Applications Research (OAR)
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#ifndef __JFFS2_SUPPORT_h
+#define __JFFS2_SUPPORT_h
+
+#define FILESYSTEM "JFFS2"
+
+#endif
diff --git a/testsuites/fstests/jffs2_nand_support/fs_support.c b/testsuites/fstests/jffs2_nand_support/fs_support.c
new file mode 100644
index 0000000000..9e7c965735
--- /dev/null
+++ b/testsuites/fstests/jffs2_nand_support/fs_support.c
@@ -0,0 +1,257 @@
+/* SPDX-License-Identifier: BSD-2-Clause */
+
+/*
+ * Copyright (C) 2023 On-Line Applications Research (OAR)
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+#include <tmacros.h>
+
+#include <sys/stat.h>
+#include <sys/types.h>
+#include <string.h>
+
+#include <rtems/jffs2.h>
+#include <rtems/libio.h>
+#include <rtems/libcsupport.h>
+
+#include "fstest.h"
+#include "fstest_support.h"
+
+#define FLASH_PAGE_SIZE (1024UL)
+/* Out of Band/Spare area size is per-page */
+#define FLASH_PAGE_OOB_SIZE (32UL)
+
+#define PAGES_PER_BLOCK (16UL)
+#define BLOCKS_PER_DEVICE (8UL)
+
+#define FLASH_OOB_SIZE (BLOCKS_PER_DEVICE * PAGES_PER_BLOCK * FLASH_PAGE_OOB_SIZE)
+#define FLASH_BLOCK_SIZE (PAGES_PER_BLOCK * FLASH_PAGE_SIZE)
+#define FLASH_SIZE (BLOCKS_PER_DEVICE * FLASH_BLOCK_SIZE)
+
+typedef struct {
+ rtems_jffs2_flash_control super;
+ unsigned char area[FLASH_SIZE];
+ unsigned char oob[FLASH_OOB_SIZE];
+} flash_control;
+
+static flash_control *get_flash_control(rtems_jffs2_flash_control *super)
+{
+ return (flash_control *) super;
+}
+
+static int flash_read(
+ rtems_jffs2_flash_control *super,
+ uint32_t offset,
+ unsigned char *buffer,
+ size_t size_of_buffer
+)
+{
+ flash_control *self = get_flash_control(super);
+ unsigned char *chunk = &self->area[offset];
+
+ memcpy(buffer, chunk, size_of_buffer);
+
+ return 0;
+}
+
+static int flash_write(
+ rtems_jffs2_flash_control *super,
+ uint32_t offset,
+ const unsigned char *buffer,
+ size_t size_of_buffer
+)
+{
+ flash_control *self = get_flash_control(super);
+ unsigned char *chunk = &self->area[offset];
+ size_t i;
+
+ for (i = 0; i < size_of_buffer; ++i) {
+ chunk[i] &= buffer[i];
+ }
+
+ return 0;
+}
+
+static int flash_erase(
+ rtems_jffs2_flash_control *super,
+ uint32_t offset
+)
+{
+ flash_control *self = get_flash_control(super);
+ uint32_t page_index = offset / FLASH_PAGE_SIZE;
+ uint32_t oob_offset = page_index * FLASH_PAGE_OOB_SIZE;
+ unsigned char *chunk = &self->area[offset];
+ unsigned char *oobchunk = &self->oob[oob_offset];
+
+ memset(chunk, 0xff, FLASH_BLOCK_SIZE);
+ memset(oobchunk, 0xff, PAGES_PER_BLOCK * FLASH_PAGE_OOB_SIZE);
+
+ return 0;
+}
+
+static int flash_read_oob(
+ rtems_jffs2_flash_control *super,
+ uint32_t offset,
+ uint8_t *buffer,
+ uint32_t size_of_buffer
+)
+{
+ flash_control *self = get_flash_control(super);
+ uint32_t page_index = offset / FLASH_PAGE_SIZE;
+ uint32_t oob_offset = page_index * FLASH_PAGE_OOB_SIZE;
+ unsigned char *chunk = &self->oob[oob_offset];
+
+ memcpy(buffer, chunk, size_of_buffer);
+
+ return 0;
+}
+
+static int flash_write_oob(
+ rtems_jffs2_flash_control *super,
+ uint32_t offset,
+ uint8_t *buffer,
+ uint32_t size_of_buffer
+)
+{
+ flash_control *self = get_flash_control(super);
+ uint32_t page_index = offset / FLASH_PAGE_SIZE;
+ uint32_t oob_offset = page_index * FLASH_PAGE_OOB_SIZE;
+ unsigned char *chunk = &self->oob[oob_offset];
+ size_t i;
+
+ for (i = 0; i < size_of_buffer; ++i) {
+ chunk[i] &= buffer[i];
+ }
+
+ return 0;
+}
+
+static int flash_block_is_bad(
+ rtems_jffs2_flash_control *super,
+ uint32_t orig_offset,
+ bool *bad
+)
+{
+ *bad = false;
+ return 0;
+}
+
+static int flash_block_mark_bad(
+ rtems_jffs2_flash_control *super,
+ uint32_t orig_offset
+)
+{
+ return 0;
+}
+
+static uint32_t flash_get_oob_size(
+ rtems_jffs2_flash_control *super
+)
+{
+ return FLASH_PAGE_OOB_SIZE;
+}
+
+static flash_control flash_instance = {
+ .super = {
+ .block_size = FLASH_BLOCK_SIZE,
+ .flash_size = FLASH_SIZE,
+ .read = flash_read,
+ .write = flash_write,
+ .erase = flash_erase,
+ .block_is_bad = flash_block_is_bad,
+ .block_mark_bad = flash_block_mark_bad,
+ .oob_read = flash_read_oob,
+ .oob_write = flash_write_oob,
+ .get_oob_size = flash_get_oob_size,
+ .write_size = FLASH_PAGE_SIZE
+ }
+};
+
+static rtems_jffs2_compressor_control compressor_instance = {
+ .compress = rtems_jffs2_compressor_rtime_compress,
+ .decompress = rtems_jffs2_compressor_rtime_decompress
+};
+
+static const rtems_jffs2_mount_data mount_data = {
+ .flash_control = &flash_instance.super,
+ .compressor_control = &compressor_instance
+};
+
+static void erase_all(void)
+{
+ memset(&flash_instance.area[0], 0xff, FLASH_SIZE);
+ memset(&flash_instance.oob[0], 0xff, FLASH_OOB_SIZE);
+}
+
+static rtems_resource_snapshot before_mount;
+
+void test_initialize_filesystem(void)
+{
+ int rv;
+
+ erase_all();
+
+ rv = mkdir(BASE_FOR_TEST, S_IRWXU | S_IRWXG | S_IRWXO);
+ rtems_test_assert(rv == 0);
+
+ rtems_resource_snapshot_take(&before_mount);
+
+ rv = mount(
+ NULL,
+ BASE_FOR_TEST,
+ RTEMS_FILESYSTEM_TYPE_JFFS2,
+ RTEMS_FILESYSTEM_READ_WRITE,
+ &mount_data
+ );
+ rtems_test_assert(rv == 0);
+}
+
+void test_shutdown_filesystem(void)
+{
+ int rv = unmount(BASE_FOR_TEST);
+ rtems_test_assert(rv == 0);
+ rtems_test_assert(rtems_resource_snapshot_check(&before_mount));
+}
+
+#define CONFIGURE_APPLICATION_NEEDS_CLOCK_DRIVER
+#define CONFIGURE_APPLICATION_NEEDS_SIMPLE_CONSOLE_DRIVER
+
+#define CONFIGURE_FILESYSTEM_JFFS2
+
+#define CONFIGURE_MAXIMUM_FILE_DESCRIPTORS 40
+
+#define CONFIGURE_MAXIMUM_TASKS 2
+
+#define CONFIGURE_INIT_TASK_STACK_SIZE (32 * 1024)
+#define CONFIGURE_INIT_TASK_ATTRIBUTES RTEMS_FLOATING_POINT
+
+#define CONFIGURE_INITIAL_EXTENSIONS RTEMS_TEST_INITIAL_EXTENSION
+
+#define CONFIGURE_RTEMS_INIT_TASKS_TABLE
+
+#define CONFIGURE_INIT
+#include <rtems/confdefs.h>
diff --git a/testsuites/fstests/jffs2_support/fs_config.h b/testsuites/fstests/jffs2_support/fs_config.h
index 8740898294..fd334d7b38 100644
--- a/testsuites/fstests/jffs2_support/fs_config.h
+++ b/testsuites/fstests/jffs2_support/fs_config.h
@@ -1,7 +1,7 @@
/* SPDX-License-Identifier: BSD-2-Clause */
/*
- * Copyright (c) 2013 embedded brains GmbH. All rights reserved.
+ * Copyright (c) 2013 embedded brains GmbH & Co. KG
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
diff --git a/testsuites/fstests/jffs2_support/fs_support.c b/testsuites/fstests/jffs2_support/fs_support.c
index 2aa04a27c6..fba1c4aaa6 100644
--- a/testsuites/fstests/jffs2_support/fs_support.c
+++ b/testsuites/fstests/jffs2_support/fs_support.c
@@ -1,7 +1,7 @@
/* SPDX-License-Identifier: BSD-2-Clause */
/*
- * Copyright (c) 2013 embedded brains GmbH. All rights reserved.
+ * Copyright (c) 2013 embedded brains GmbH & Co. KG
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
@@ -163,7 +163,7 @@ void test_shutdown_filesystem(void)
#define CONFIGURE_MAXIMUM_FILE_DESCRIPTORS 40
-#define CONFIGURE_MAXIMUM_TASKS 1
+#define CONFIGURE_MAXIMUM_TASKS 2
#define CONFIGURE_INIT_TASK_STACK_SIZE (32 * 1024)
#define CONFIGURE_INIT_TASK_ATTRIBUTES RTEMS_FLOATING_POINT
diff --git a/testsuites/fstests/tftpfs/init.c b/testsuites/fstests/tftpfs/init.c
new file mode 100644
index 0000000000..38e429f11e
--- /dev/null
+++ b/testsuites/fstests/tftpfs/init.c
@@ -0,0 +1,6928 @@
+/* SPDX-License-Identifier: BSD-2-Clause */
+
+/**
+ * @file
+ *
+ * @ingroup RTEMSTestSuiteTestsTFTPFS
+ *
+ * @brief This source file contains the implementation of tests for libtftpfs.
+ *
+ * The tested source files are:
+ * + @ref tftpfs.c "tftpfs.c: TFTP file system"
+ * + @ref tftpDriver.c "tftpDriver.c: TFTP client library"
+ * These tests focus on testing the UDP network interaction of libtftpfs.
+ */
+
+/*
+ * Copyright (C) 2022 embedded brains GmbH & Co. KG
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#include <stdio.h>
+#include <stdlib.h> /* malloc(), free() */
+#include <ctype.h> /* isprint() */
+#include <errno.h>
+#include <sys/stat.h> /* mkdir(), open() */
+#include <sys/types.h> /* mkdir(), open() */
+#include <sys/socket.h> /* AF_INET, SOCK_DGRAM */
+#include <fcntl.h> /* open() */
+#include <unistd.h> /* read(), close(), rmdir() */
+
+#include <rtems/tftp.h>
+#include <rtems/libio.h> /* mount(), RTEMS_FILESYSTEM_TYPE_TFTPFS */
+#include <rtems/test.h>
+#include <rtems/test-info.h>
+#include <rtems/testopts.h> /* RTEMS_TEST_VERBOSITY */
+#include <rtems.h>
+
+#include "tftpfs_udp_network_fake.h"
+#include "tftpfs_interactions.h"
+#include "tftp_driver.h"
+
+#define SERV_PORT 12345
+#define FIRST_TIMEOUT_MILLISECONDS 400
+#define TIMEOUT_MILLISECONDS 1000
+#define LARGE_BLOCK_SIZE TFTP_BLOCK_SIZE_MAX
+#define SMALL_BLOCK_SIZE 12
+#define SMALL_WINDOW_SIZE 4
+#define T_no_more_interactions() T_assert_true( \
+ _Tftp_Has_no_more_interactions(), \
+ "The TFTP client skiped some final network interactions." \
+)
+
+/*
+ * Test fixture and text context
+ */
+
+typedef struct tftp_test_context {
+ int fd0; /* File descriptor of a file read from or written to the tftpsfs */
+ void *tftp_handle; /* TFTP client handle for this file transfer */
+} tftp_test_context;
+
+static const char *tftpfs_mount_point = "/tftp";
+static const char *tftpfs_ipv4_loopback = TFTP_KNOWN_IPV4_ADDR0_STR;
+static const char *tftpfs_server0_name = TFTP_KNOWN_SERVER0_NAME;
+static const char *tftpfs_server0_ipv4 = TFTP_KNOWN_SERVER0_IPV4;
+static const char *tftpfs_file = "file.txt";
+static tftp_test_context tftp_context;
+
+static void mount_tftp_fs( const char *mount_point, const char *options )
+{
+ int result;
+
+ result = mkdir( mount_point, S_IRWXU | S_IRWXG | S_IRWXO );
+ T_assert_eq_int( result, 0 );
+
+ result = mount(
+ "",
+ mount_point,
+ RTEMS_FILESYSTEM_TYPE_TFTPFS,
+ RTEMS_FILESYSTEM_READ_WRITE,
+ options
+ );
+ T_assert_eq_int( result, 0 );
+}
+
+static void umount_tftp_fs( const char *mount_point )
+{
+ int result;
+
+ result = unmount( mount_point );
+ T_assert_eq_int( result, 0 );
+
+ result = rmdir( mount_point );
+ T_assert_eq_int( result, 0 );
+}
+
+static void setup_rfc1350( void *context )
+{
+ tftp_test_context *ctx = context;
+ _Tftp_Reset();
+ ctx->fd0 = -1;
+ ctx->tftp_handle = NULL;
+ mount_tftp_fs( tftpfs_mount_point, "verbose,rfc1350" );
+}
+
+static void teardown( void *context )
+{
+ tftp_test_context *ctx = context;
+ if ( ctx->fd0 >= 0 ) {
+ close( ctx->fd0 );
+ }
+ tftp_close( ctx->tftp_handle ); /* is a no-op if NULL */
+ umount_tftp_fs( tftpfs_mount_point );
+ _Tftp_Reset();
+}
+
+static const T_fixture fixture_rfc1350 = {
+ .setup = setup_rfc1350,
+ .stop = NULL,
+ .teardown = teardown,
+ .scope = NULL,
+ .initial_context = &tftp_context
+};
+
+static void setup_default_options( void *context )
+{
+ tftp_test_context *ctx = context;
+ _Tftp_Reset();
+ ctx->fd0 = -1;
+ ctx->tftp_handle = NULL;
+ mount_tftp_fs( tftpfs_mount_point, NULL );
+}
+
+static const T_fixture fixture_default_options = {
+ .setup = setup_default_options,
+ .stop = NULL,
+ .teardown = teardown,
+ .scope = NULL,
+ .initial_context = &tftp_context
+};
+
+static void setup_large_blocksize( void *context )
+{
+ tftp_test_context *ctx = context;
+ _Tftp_Reset();
+ ctx->fd0 = -1;
+ ctx->tftp_handle = NULL;
+ mount_tftp_fs(
+ tftpfs_mount_point,
+ "verbose,blocksize=" RTEMS_XSTRING(LARGE_BLOCK_SIZE) ",windowsize=1"
+ );
+}
+
+static const T_fixture fixture_large_blocksize = {
+ .setup = setup_large_blocksize,
+ .stop = NULL,
+ .teardown = teardown,
+ .scope = NULL,
+ .initial_context = &tftp_context
+};
+
+static void setup_small_opt_size( void *context )
+{
+ tftp_test_context *ctx = context;
+ _Tftp_Reset();
+ ctx->fd0 = -1;
+ ctx->tftp_handle = NULL;
+ mount_tftp_fs(
+ tftpfs_mount_point,
+ "blocksize=" RTEMS_XSTRING(SMALL_BLOCK_SIZE)
+ ",windowsize=" RTEMS_XSTRING(SMALL_WINDOW_SIZE)
+ );
+}
+
+static const T_fixture fixture_small_opt_size = {
+ .setup = setup_small_opt_size,
+ .stop = NULL,
+ .teardown = teardown,
+ .scope = NULL,
+ .initial_context = &tftp_context
+};
+
+static void setup_mount_point( void *context )
+{
+ int result;
+
+ _Tftp_Reset();
+ result = mkdir( tftpfs_mount_point, S_IRWXU | S_IRWXG | S_IRWXO );
+ T_assert_eq_int( result, 0 );
+}
+
+static void teardown_mount_point( void *context )
+{
+ int result;
+
+ result = rmdir( tftpfs_mount_point );
+ T_assert_eq_int( result, 0 );
+ _Tftp_Reset();
+}
+
+static const T_fixture fixture_mount_point = {
+ .setup = setup_mount_point,
+ .stop = NULL,
+ .teardown = teardown_mount_point,
+ .scope = NULL,
+ .initial_context = &tftp_context
+};
+
+/*
+ * Test helper functions
+ */
+
+/*
+ * Produce an artificial file content to be able to compare the
+ * sent and the received file later on.
+ */
+static uint8_t get_file_content( size_t pos )
+{
+ static const size_t frame_size = 100;
+ static const size_t num_size = 11;
+ static const size_t alpha_size = 53;
+ char buf[10];
+ size_t remainder = pos % frame_size;
+
+ switch ( remainder ) {
+ case 0:
+ case 1:
+ case 2:
+ sprintf( buf, "%9zu", pos - remainder );
+ return buf[remainder];
+ case 3:
+ case 7:
+ return '\'';
+ case 4:
+ case 5:
+ case 6:
+ sprintf( buf, "%9zu", pos - remainder );
+ return buf[remainder-1];
+ case 8:
+ case 9:
+ case 10:
+ sprintf( buf, "%9zu", pos - remainder );
+ return buf[remainder-2];
+ default:
+ pos -= ( pos / frame_size + 1 ) * num_size;
+ remainder = pos % alpha_size;
+ return ( remainder <= 'Z' - '@' ) ?
+ remainder + '@' : remainder - ( 'Z' - '@' + 1) + 'a';
+ }
+}
+
+/*
+ * Produce bad file content.
+ */
+static uint8_t get_bad_file_content( size_t pos )
+{
+ static const char buf[] = "BAD!";
+ return (uint8_t) buf[ pos % strlen( buf ) ];
+}
+
+static const char *create_tftpfs_path(
+ const char *sever_addr,
+ const char *file_name
+)
+{
+ static char buffer[100];
+ int len;
+
+ len = snprintf(
+ buffer,
+ sizeof( buffer ),
+ "%s/%s:%s",
+ tftpfs_mount_point,
+ sever_addr,
+ file_name
+ );
+
+ T_quiet_gt_int( len, 0 );
+ T_quiet_lt_int( len, (int) sizeof( buffer ) );
+ return buffer;
+}
+
+static int read_tftp_file(
+ const char *path,
+ size_t buffer_size,
+ size_t max_bytes,
+ int *fd
+)
+{
+ char *data_buffer;
+ int result = 0;
+ int res;
+ ssize_t i;
+ ssize_t bytes = 1;
+ ssize_t bytes_total = 0;
+ int errno_store;
+
+ T_log( T_VERBOSE, "File system: open( %s, O_RDONLY )", path );
+ errno = 0;
+ *fd = open( path, O_RDONLY );
+ errno_store = errno;
+ T_log(
+ T_VERBOSE,
+ "File system: [open( %s, O_RDONLY )] = fd:%d (errno = %d)",
+ path,
+ *fd,
+ errno
+ );
+
+ if ( *fd < 0 ) {
+ /* open() may intentionally fail (e.g. test for invalid server address) */
+ T_log( T_VERBOSE, "File system: cannot open \"%s\" for reading", path );
+ errno = errno_store;
+ result = -1;
+ }
+
+ if ( *fd >= 0 ) {
+ data_buffer = malloc( buffer_size );
+
+ while ( bytes > 0 && max_bytes >= bytes ) {
+ errno = 0;
+ bytes = read(
+ *fd,
+ data_buffer,
+ ( max_bytes > buffer_size ) ? buffer_size : max_bytes
+ );
+ errno_store = errno;
+ T_log(
+ T_VERBOSE,
+ "File system: [read( fd:%d, size=%zu )] = %zd (errno = %d)",
+ *fd,
+ ( max_bytes > buffer_size ) ? buffer_size : max_bytes,
+ bytes,
+ errno
+ );
+
+ if ( bytes > 0 ) {
+ max_bytes -= bytes;
+ for ( i = 0; i < bytes; ++i ) {
+ if ( data_buffer[i] != get_file_content( bytes_total + i ) ) {
+ T_true(
+ false,
+ "File system: wrong file content '%c' (expected '%c') "
+ "at position %zd",
+ (int) ( isprint( (int) data_buffer[i] ) ? data_buffer[i] : '?' ),
+ (int) get_file_content( bytes_total + i ),
+ bytes_total + i
+ );
+ bytes = 0;
+ break;
+ }
+ } /* for */
+ bytes_total += bytes;
+ }
+ if ( bytes == 0 ) {
+ result = (int) bytes_total;
+ }
+ if ( bytes < 0 ) {
+ /* read() may intentionally fail (e.g. test lost network connection) */
+ T_log(
+ T_VERBOSE,
+ "File system: error reading from \"%s\" after %zd bytes",
+ path,
+ bytes_total
+ );
+ result = (int) bytes_total;
+ }
+ } /* while */
+
+ free( data_buffer );
+ } /* if */
+
+ if ( bytes > 0 ) {
+ T_log(
+ T_VERBOSE,
+ "File system: reader closes \"%s\" after %zd bytes",
+ path,
+ bytes_total
+ );
+ result = (int) bytes_total;
+ }
+
+ if ( *fd >= 0 ) {
+ res = close( *fd );
+ T_log(
+ T_VERBOSE,
+ "File system: [close( %s (fd:%d) )] = %d",
+ path,
+ *fd,
+ res
+ );
+ *fd = -1;
+ T_eq_int( res, 0 );
+ }
+
+ errno = errno_store;
+ return result;
+}
+
+static int write_tftp_file(
+ const char *path,
+ size_t file_size,
+ size_t buffer_size,
+ int *fd )
+{
+ char *data_buffer;
+ int result = 0;
+ int res;
+ ssize_t i;
+ ssize_t bytes;
+ ssize_t bytes_total = 0;
+ int errno_store;
+
+ errno = 0;
+ T_log( T_VERBOSE, "File system: open( %s, O_WRONLY )", path );
+ *fd = open( path, O_WRONLY );
+ errno_store = errno;
+ T_log(
+ T_VERBOSE,
+ "File system: [open( %s, O_WRONLY )] = fd:%d (errno = %d)",
+ path,
+ *fd,
+ errno
+ );
+ if ( *fd < 0 ) {
+ /* open() may intentionally fail (e.g. test for invalid server address) */
+ T_log( T_VERBOSE, "File system: cannot open \"%s\" for writing", path );
+ errno = errno_store;
+ result = -1;
+ }
+
+ if ( *fd >= 0 ) {
+ data_buffer = malloc( buffer_size );
+
+ do { /* Try also to write files with 0 bytes size */
+ bytes = ( file_size - bytes_total >= buffer_size ) ?
+ buffer_size : file_size - bytes_total;
+ for ( i = 0; i < bytes; ++i ) {
+ data_buffer[i] = get_file_content( bytes_total + i );
+ }
+ errno = 0;
+ bytes = write( *fd, data_buffer, i );
+ errno_store = errno;
+ T_log(
+ T_VERBOSE,
+ "File system: [write( fd:%d, size=%zd )] = %zd (errno = %d)",
+ *fd,
+ i,
+ bytes,
+ errno
+ );
+ if ( bytes > 0 ) {
+ bytes_total += bytes;
+ result = (int) bytes_total;
+ }
+ if ( bytes != i ) {
+ /* write() may intentionally fail (e.g. test lost network connection) */
+ T_log(
+ T_VERBOSE,
+ "File system: error writing to \"%s\" after %zd bytes",
+ path,
+ bytes_total
+ );
+ break;
+ }
+ } while( bytes_total < file_size );
+
+ free( data_buffer );
+ } /* if */
+
+ if ( *fd >= 0 ) {
+ res = close( *fd );
+ if (res != 0) {
+ errno_store = errno;
+ result = res;
+ }
+ T_log(
+ T_VERBOSE,
+ "File system: [close( %s (fd:%d) )] = %d",
+ path,
+ *fd,
+ res
+ );
+ *fd = -1;
+ }
+
+ errno = errno_store;
+ return result;
+}
+
+static int rdwt_tftp_client_file(
+ const char *hostname,
+ const char *filename,
+ bool is_for_reading,
+ ssize_t file_size, /* Only used when `is_for_reading == false` */
+ const tftp_net_config *config,
+ void **tftp_handle
+)
+{
+ const static size_t buffer_size = 4001;
+ char *data_buffer;
+ int res = 0;
+ ssize_t i;
+ ssize_t bytes = 1;
+ ssize_t bytes_total = 0;
+ int errno_store = 0;
+
+ if ( *tftp_handle == NULL ) {
+ T_log(
+ T_VERBOSE,
+ "TFTP Client: tftp_open( \"%s\", \"%s\", %s, ... )",
+ hostname,
+ filename,
+ is_for_reading ? "read" : "write"
+ );
+ res = tftp_open(
+ hostname,
+ filename,
+ is_for_reading,
+ config,
+ tftp_handle
+ );
+ T_log(
+ T_VERBOSE,
+ "TFTP Client: [tftp_open( \"%s\", \"%s\", %s, ... )] = %d (handle:%p)",
+ hostname,
+ filename,
+ is_for_reading ? "read" : "write",
+ res,
+ *tftp_handle
+ );
+ } else {
+ T_log(
+ T_VERBOSE,
+ "TFTP Client: \"%s\":\"%s\" already open for %s, handle: %p ",
+ hostname,
+ filename,
+ is_for_reading ? "read" : "write",
+ *tftp_handle
+ );
+ }
+
+ if ( res != 0 ) {
+ /* open() may intentionally fail (e.g. test for invalid server address) */
+ T_log(
+ T_VERBOSE,
+ "TFTP client: cannot open \"%s\":\"%s\" for %s",
+ hostname,
+ filename,
+ is_for_reading ? "reading" : "writing"
+ );
+ errno_store = res;
+ } else {
+ T_assert_not_null( *tftp_handle );
+ }
+
+ if ( *tftp_handle != NULL ) {
+ data_buffer = malloc( buffer_size );
+
+ if ( is_for_reading ) {
+
+ /* Read file */
+ while ( bytes > 0 ) {
+ errno = 0;
+ bytes = tftp_read(
+ *tftp_handle,
+ data_buffer,
+ buffer_size
+ );
+ T_log(
+ T_VERBOSE,
+ "TFTP Client: [tftp_read( %p, size=%zu )] = %zd",
+ *tftp_handle,
+ buffer_size,
+ bytes
+ );
+
+ if ( bytes > 0 ) {
+ for ( i = 0; i < bytes; ++i ) {
+ if ( data_buffer[i] != get_file_content( bytes_total + i ) ) {
+ T_true(
+ false,
+ "FTP Client: wrong file content '%c' (expected '%c') at positon %zd",
+ (int) ( isprint( (int) data_buffer[i] ) ? data_buffer[i] : '?' ),
+ (int) get_file_content( bytes_total + i ),
+ bytes_total + i
+ );
+ bytes = 0;
+ break;
+ }
+ } /* for */
+ bytes_total += bytes;
+ }
+ if ( bytes < 0 ) {
+ /* read() may intentionally fail (e.g. test lost network connection) */
+ T_log(
+ T_VERBOSE,
+ "TFTP Client: error reading from \"%s\":\"%s\" after %zd bytes",
+ hostname,
+ filename,
+ bytes_total
+ );
+ errno_store = -bytes;
+ }
+ } /* while */
+ } else {
+
+ /* Write file */
+ do { /* Try also to write files with 0 bytes size */
+ bytes = ( file_size - bytes_total >= buffer_size ) ?
+ buffer_size : file_size - bytes_total;
+ for ( i = 0; i < bytes; ++i ) {
+ data_buffer[i] = get_file_content( bytes_total + i );
+ }
+ errno = 0;
+ bytes = tftp_write( *tftp_handle, data_buffer, i );
+ T_log(
+ T_VERBOSE,
+ "TFTP Client: [tftp_write( %p, size=%zd )] = %zd",
+ *tftp_handle,
+ i,
+ bytes
+ );
+ if ( bytes > 0 ) {
+ bytes_total += bytes;
+ } else {
+ errno_store = -bytes;
+ }
+ if ( bytes != i ) {
+ /* write() may intentionally fail (e.g. test lost network connection) */
+ T_log(
+ T_VERBOSE,
+ "TFTP Client: error writing to \"%s\":\"%s\" after %zd bytes",
+ hostname,
+ filename,
+ bytes_total
+ );
+ break;
+ }
+ } while( bytes_total < file_size );
+ } /* if ( is_for_reading ) */
+
+ free( data_buffer );
+ } /* if ( *tftp_handle != NULL ) */
+
+ if ( *tftp_handle != NULL ) {
+ res = tftp_close( *tftp_handle );
+ T_log(
+ T_VERBOSE,
+ "TFTP Client: [tftp_close( \"%s\":\"%s\" (handle:%p) )] = %d",
+ hostname,
+ filename,
+ *tftp_handle,
+ res
+ );
+ *tftp_handle = NULL; /* Avoid that the fixture closes it again */
+ T_eq_int( res, 0 );
+ } /* if ( *tftp_handle != NULL ) */
+
+ errno = errno_store;
+ return (int) bytes_total;
+}
+
+/*
+ * Unit test cases
+ */
+
+/*
+ * This is a classical unit test for the function tftp_initialize_net_config().
+ * Tests:
+ * * tftp_initialize_net_config() sets correct default values as defined
+ * in the documentation of the data structures tftp_net_config
+ * and tftp_options.
+ */
+T_TEST_CASE( tftp_initialize_net_config )
+{
+ tftp_net_config config;
+ memset( &config, 0, sizeof( config ) );
+ tftp_initialize_net_config( &config );
+ T_eq_u16( config.retransmissions, 6 );
+ T_eq_u16( config.server_port, 69 );
+ T_eq_u32( config.timeout, 1000 );
+ T_eq_u32( config.first_timeout, 400 );
+ T_eq_u16( config.options.block_size, 1456 );
+ T_eq_u16( config.options.window_size, 8 );
+}
+
+/*
+ * This is a classical unit test for the function tftp_initialize_net_config().
+ * Tests:
+ * * tftp_initialize_net_config() does not crash when called with a
+ * NULL pointer.
+ */
+T_TEST_CASE( tftp_initialize_net_config_null )
+{
+ tftp_initialize_net_config( NULL );
+}
+
+/*
+ * This is a classical unit test for the function tftp_open().
+ * Tests:
+ * * tftp_open() returns an error when called with a NULL pointer
+ * for hostname.
+ */
+T_TEST_CASE_FIXTURE( tftp_open_null_hostname, &fixture_rfc1350 )
+{
+ tftp_test_context *ctx = T_fixture_context();
+ int res;
+
+ res = tftp_open(
+ NULL, /* hostname */
+ tftpfs_file,
+ true, /* is_for_reading */
+ NULL, /* config */
+ &ctx->tftp_handle
+ );
+ T_eq_int( res, EINVAL );
+ T_null( ctx->tftp_handle );
+}
+
+/*
+ * This is a classical unit test for the function tftp_open().
+ * Tests:
+ * * tftp_open() returns an error when called with a NULL pointer
+ * for filename.
+ */
+T_TEST_CASE_FIXTURE( tftp_open_null_filename, &fixture_rfc1350 )
+{
+ tftp_test_context *ctx = T_fixture_context();
+ int res;
+
+ res = tftp_open(
+ tftpfs_ipv4_loopback,
+ NULL, /* filename */
+ true, /* is_for_reading */
+ NULL, /* config */
+ &ctx->tftp_handle
+ );
+ T_eq_int( res, EINVAL );
+ T_null( ctx->tftp_handle );
+}
+
+/*
+ * This is a classical unit test for the function tftp_open().
+ * Tests:
+ * * tftp_open() returns an error when called with a NULL pointer
+ * for tftp_handle.
+ */
+T_TEST_CASE( tftp_open_null_tftp_handle )
+{
+ int res;
+
+ res = tftp_open(
+ tftpfs_ipv4_loopback,
+ tftpfs_file,
+ true, /* is_for_reading */
+ NULL, /* config */
+ NULL /* tftp_handle */
+ );
+ T_eq_int( res, EINVAL );
+}
+
+/*
+ * This is a classical unit test for the function tftp_open().
+ * Tests:
+ * * tftp_open() returns an error when called with value 0 for
+ * option window_size.
+ */
+T_TEST_CASE_FIXTURE( tftp_open_illegal_window_size, &fixture_rfc1350 )
+{
+ tftp_test_context *ctx = T_fixture_context();
+ tftp_net_config config;
+ int res;
+
+ _Tftp_Add_interaction_socket( AF_INET, SOCK_DGRAM, 0, TFTP_FIRST_FD );
+ _Tftp_Add_interaction_close( TFTP_FIRST_FD, 0 );
+
+ tftp_initialize_net_config( &config );
+ config.options.window_size = 1 - 1;
+
+ res = tftp_open(
+ tftpfs_ipv4_loopback,
+ tftpfs_file,
+ true, /* is_for_reading */
+ &config,
+ &ctx->tftp_handle
+ );
+ T_eq_int( res, EINVAL );
+ T_null( ctx->tftp_handle );
+ T_no_more_interactions();
+}
+
+/*
+ * This is a classical unit test for the function tftp_open().
+ * Tests:
+ * * tftp_open() returns an error when called with a too small
+ * value for option block_size.
+ */
+T_TEST_CASE_FIXTURE( tftp_open_block_size_too_small, &fixture_rfc1350 )
+{
+ tftp_test_context *ctx = T_fixture_context();
+ tftp_net_config config;
+ int res;
+
+ _Tftp_Add_interaction_socket( AF_INET, SOCK_DGRAM, 0, TFTP_FIRST_FD );
+ _Tftp_Add_interaction_close( TFTP_FIRST_FD, 0 );
+
+ tftp_initialize_net_config( &config );
+ config.options.block_size = 8 - 1;
+
+ res = tftp_open(
+ tftpfs_ipv4_loopback,
+ tftpfs_file,
+ true, /* is_for_reading */
+ &config,
+ &ctx->tftp_handle
+ );
+ T_eq_int( res, EINVAL );
+ T_null( ctx->tftp_handle );
+ T_no_more_interactions();
+}
+
+/*
+ * This is a classical unit test for the function tftp_open().
+ * Tests:
+ * * tftp_open() returns an error when called with a too large
+ * value for option block_size.
+ */
+T_TEST_CASE_FIXTURE( tftp_open_block_size_too_large, &fixture_rfc1350 )
+{
+ tftp_test_context *ctx = T_fixture_context();
+ tftp_net_config config;
+ int res;
+
+ _Tftp_Add_interaction_socket( AF_INET, SOCK_DGRAM, 0, TFTP_FIRST_FD );
+ _Tftp_Add_interaction_close( TFTP_FIRST_FD, 0 );
+
+ tftp_initialize_net_config( &config );
+ config.options.block_size = 65464 + 1;
+
+ res = tftp_open(
+ tftpfs_ipv4_loopback,
+ tftpfs_file,
+ false, /* is_for_reading */
+ &config,
+ &ctx->tftp_handle
+ );
+ T_eq_int( res, EINVAL );
+ T_null( ctx->tftp_handle );
+ T_no_more_interactions();
+}
+
+/*
+ * This is a classical unit test for the function tftp_read().
+ * Tests:
+ * * tftp_read() returns an error when called with a NULL pointer
+ * for tftp_handle.
+ */
+T_TEST_CASE( tftp_read_null_tftp_handle )
+{
+ char data_buffer[10];
+ ssize_t res;
+
+ res = tftp_read(
+ NULL, /* tftp_handle */
+ data_buffer,
+ sizeof( data_buffer)
+ );
+ T_eq_int( res, -EIO );
+}
+
+/*
+ * This is a classical unit test for the function tftp_read().
+ * Tests:
+ * * tftp_read() returns an error when called with a NULL pointer
+ * for buffer.
+ */
+T_TEST_CASE( tftp_read_null_buffer )
+{
+ int tftp_handle;
+ ssize_t res;
+
+ res = tftp_read(
+ &tftp_handle,
+ NULL, /* buffer */
+ 8
+ );
+ T_eq_int( res, -EIO );
+}
+
+/*
+ * This is a classical unit test for the function tftp_write().
+ * Tests:
+ * * tftp_write() returns an error when called with a NULL pointer
+ * for tftp_handle.
+ */
+T_TEST_CASE( tftp_write_null_tftp_handle )
+{
+ char data_buffer[10] = { 0 };
+ ssize_t res;
+
+ res = tftp_write(
+ NULL, /* tftp_handle */
+ data_buffer,
+ sizeof( data_buffer)
+ );
+ T_eq_int( res, -EIO );
+}
+
+/*
+ * This is a classical unit test for the function tftp_write().
+ * Tests:
+ * * tftp_write() returns an error when called with a NULL pointer
+ * for buffer.
+ */
+T_TEST_CASE( tftp_write_null_buffer )
+{
+ int tftp_handle;
+ ssize_t res;
+
+ res = tftp_write(
+ &tftp_handle,
+ NULL, /* buffer */
+ 8
+ );
+ T_eq_int( res, -EIO );
+}
+
+/*
+ * This is a classical unit test for the function tftp_close().
+ * Tests:
+ * * tftp_close() returns 0 when called with a NULL pointer.
+ */
+T_TEST_CASE( tftp_close_null )
+{
+ T_eq_int( tftp_close( NULL ), 0 );
+}
+
+/*
+ * This is a classical unit test for the function _Tftpfs_Parse_options().
+ * Tests:
+ * * Parsing an empty string has no effects.
+ */
+T_TEST_CASE( _Tftpfs_Parse_options_empty )
+{
+ size_t err_pos;
+ uint32_t flags = 0;
+ tftp_net_config config;
+
+ tftp_initialize_net_config( &config );
+ err_pos = _Tftpfs_Parse_options( "", &config, &flags );
+ T_eq_sz( err_pos, 0 );
+ T_eq_u16( config.options.block_size, TFTP_DEFAULT_BLOCK_SIZE );
+ T_eq_u16( config.options.window_size, TFTP_DEFAULT_WINDOW_SIZE );
+ T_eq_u32( flags, 0 );
+}
+
+/*
+ * This is a classical unit test for the function _Tftpfs_Parse_options().
+ * Tests:
+ * * Providing an NULL pointer instead of a string has no effect.
+ */
+T_TEST_CASE( _Tftpfs_Parse_options_null )
+{
+ size_t err_pos;
+ uint32_t flags = 0;
+ tftp_net_config config;
+
+ tftp_initialize_net_config( &config );
+ err_pos = _Tftpfs_Parse_options( NULL, &config, &flags );
+ T_eq_sz( err_pos, 0 );
+ T_eq_u16( config.options.block_size, TFTP_DEFAULT_BLOCK_SIZE );
+ T_eq_u16( config.options.window_size, TFTP_DEFAULT_WINDOW_SIZE );
+ T_eq_u32( flags, 0 );
+}
+
+/*
+ * This is a classical unit test for the function _Tftpfs_Parse_options().
+ * Tests:
+ * * Option "verbose" has the desired effect.
+ */
+T_TEST_CASE( _Tftpfs_Parse_options_verbose )
+{
+ size_t err_pos;
+ uint32_t flags = 0;
+ tftp_net_config config;
+
+ tftp_initialize_net_config( &config );
+ err_pos = _Tftpfs_Parse_options( "verbose", &config, &flags );
+ T_eq_sz( err_pos, 0 );
+ T_eq_u16( config.options.block_size, TFTP_DEFAULT_BLOCK_SIZE );
+ T_eq_u16( config.options.window_size, TFTP_DEFAULT_WINDOW_SIZE );
+ T_gt_u32( flags, 0 );
+}
+
+/*
+ * This is a classical unit test for the function _Tftpfs_Parse_options().
+ * Tests:
+ * * Option "rfc1350" has the desired effect.
+ */
+T_TEST_CASE( _Tftpfs_Parse_options_rfc1350 )
+{
+ size_t err_pos;
+ uint32_t flags = 0;
+ tftp_net_config config;
+
+ tftp_initialize_net_config( &config );
+ err_pos = _Tftpfs_Parse_options( "rfc1350", &config, &flags );
+ T_eq_sz( err_pos, 0 );
+ T_eq_u16( config.options.block_size, TFTP_RFC1350_BLOCK_SIZE );
+ T_eq_u16( config.options.window_size, TFTP_RFC1350_WINDOW_SIZE );
+ T_eq_u32( flags, 0 );
+}
+
+/*
+ * This is a classical unit test for the function _Tftpfs_Parse_options().
+ * Tests:
+ * * Option "blocksize" has the desired effect.
+ */
+T_TEST_CASE( _Tftpfs_Parse_options_blocksize )
+{
+ size_t err_pos;
+ uint32_t flags = 0;
+ tftp_net_config config;
+
+ tftp_initialize_net_config( &config );
+ err_pos = _Tftpfs_Parse_options( "blocksize=21", &config, &flags );
+ T_eq_sz( err_pos, 0 );
+ T_eq_u16( config.options.block_size, 21 );
+ T_eq_u16( config.options.window_size, TFTP_DEFAULT_WINDOW_SIZE );
+ T_eq_u32( flags, 0 );
+}
+
+/*
+ * This is a classical unit test for the function _Tftpfs_Parse_options().
+ * Tests:
+ * * Option "windowsize" has the desired effect.
+ */
+T_TEST_CASE( _Tftpfs_Parse_options_windowsize )
+{
+ size_t err_pos;
+ uint32_t flags = 0;
+ tftp_net_config config;
+
+ tftp_initialize_net_config( &config );
+ err_pos = _Tftpfs_Parse_options( "windowsize=13", &config, &flags );
+ T_eq_sz( err_pos, 0 );
+ T_eq_u16( config.options.block_size, TFTP_DEFAULT_BLOCK_SIZE );
+ T_eq_u16( config.options.window_size, 13 );
+ T_eq_u32( flags, 0 );
+}
+
+/*
+ * This is a classical unit test for the function _Tftpfs_Parse_options().
+ * Tests:
+ * * Processing of all options in one string works as expected.
+ */
+T_TEST_CASE( _Tftpfs_Parse_options_all )
+{
+ size_t err_pos;
+ uint32_t flags = 0;
+ tftp_net_config config;
+
+ tftp_initialize_net_config( &config );
+ err_pos = _Tftpfs_Parse_options( "rfc1350,blocksize=1234,windowsize=4567,verbose", &config, &flags );
+ T_eq_sz( err_pos, 0 );
+ T_eq_u16( config.options.block_size, 1234 );
+ T_eq_u16( config.options.window_size, 4567 );
+ T_gt_u32( flags, 0 );
+}
+
+/*
+ * This is a classical unit test for the function _Tftpfs_Parse_options().
+ * Tests:
+ * * Parser ignores unnecessary commas.
+ */
+T_TEST_CASE( _Tftpfs_Parse_options_surplus_comma )
+{
+ size_t err_pos;
+ uint32_t flags = 0;
+ tftp_net_config config;
+
+ tftp_initialize_net_config( &config );
+ err_pos = _Tftpfs_Parse_options( ",blocksize=1234,,,,windowsize=4567,,", &config, &flags );
+ T_eq_sz( err_pos, 0 );
+ T_eq_u16( config.options.block_size, 1234 );
+ T_eq_u16( config.options.window_size, 4567 );
+ T_eq_u32( flags, 0 );
+}
+
+/*
+ * This is a classical unit test for the function _Tftpfs_Parse_options().
+ * Tests:
+ * * Parser detects a bad value.
+ */
+T_TEST_CASE( _Tftpfs_Parse_options_bad_value )
+{
+ size_t err_pos;
+ uint32_t flags = 0;
+ tftp_net_config config;
+
+ tftp_initialize_net_config( &config );
+ err_pos = _Tftpfs_Parse_options( "blocksize=123.4,windowsize=4567", &config, &flags );
+ T_eq_sz( err_pos, 14 );
+}
+
+/*
+ * This is a classical unit test for the function _Tftpfs_Parse_options().
+ * Tests:
+ * * Parser detects an illegal option.
+ */
+T_TEST_CASE( _Tftpfs_Parse_options_illegal_option )
+{
+ size_t err_pos;
+ uint32_t flags = 0;
+ tftp_net_config config;
+
+ tftp_initialize_net_config( &config );
+ err_pos = _Tftpfs_Parse_options( "blocksize=123,illegal", &config, &flags );
+ T_eq_sz( err_pos, 15 );
+}
+
+/*
+ * This is a classical unit test for the function _Tftpfs_Parse_options().
+ * Tests:
+ * * Parser detects a truncated option.
+ */
+T_TEST_CASE( _Tftpfs_Parse_options_truncated_option )
+{
+ size_t err_pos;
+ uint32_t flags = 0;
+ tftp_net_config config;
+
+ tftp_initialize_net_config( &config );
+ err_pos = _Tftpfs_Parse_options( "blocksize", &config, &flags );
+ T_eq_sz( err_pos, 1 );
+}
+
+/*
+ * This is a classical unit test for the function rtems_tftpfs_initialize().
+ * Tests:
+ * * Correct error handling in case mount options cannot be parsed.
+ */
+T_TEST_CASE_FIXTURE( mount_with_bad_options, &fixture_mount_point )
+{
+ int result;
+
+ result = mount(
+ "",
+ tftpfs_mount_point,
+ RTEMS_FILESYSTEM_TYPE_TFTPFS,
+ RTEMS_FILESYSTEM_READ_WRITE,
+ "windowsize=4567,blocksize=123bad"
+ );
+ T_assert_le_int( result, -1 );
+ T_assert_eq_int( errno, EINVAL );
+}
+
+/*
+ * Test cases for the TFTP client interface
+ *
+ * Since the TFTP file system uses the TFTP client interface for all
+ * file transfers, the function of the TFTP client is almost
+ * completely tested by the tests for the file system interface.
+ * The test cases here - for the TFTP client interface - test only
+ * those aspects not (easily) testable through the file system interface.
+ */
+
+/*
+ * Read a file from the server using the TFTP client interface.
+ * The file is one byte long. No timeouts, packet loss, ...
+ * Tests:
+ * * tftp_open() called with NULL for config uses
+ * default configuration values.
+ * * Read a file using only the TFTP client (i.e. not using the
+ * file system)
+ */
+T_TEST_CASE_FIXTURE( client_open_with_NULL_config, &fixture_rfc1350 )
+{
+ tftp_test_context *ctx = T_fixture_context();
+ int bytes_read;
+ uint16_t block_num = 1;
+ size_t pos_in_file = 0;
+
+ /* T_set_verbosity( T_VERBOSE ); */
+ _Tftp_Add_interaction_socket( AF_INET, SOCK_DGRAM, 0, TFTP_FIRST_FD );
+ _Tftp_Add_interaction_send_rrq(
+ TFTP_FIRST_FD,
+ tftpfs_file,
+ TFTP_STD_PORT,
+ tftpfs_ipv4_loopback,
+ TFTP_DEFAULT_BLOCK_SIZE,
+ TFTP_DEFAULT_WINDOW_SIZE,
+ true
+ );
+ _Tftp_Add_interaction_recv_data(
+ TFTP_FIRST_FD,
+ FIRST_TIMEOUT_MILLISECONDS,
+ SERV_PORT,
+ tftpfs_ipv4_loopback,
+ block_num,
+ pos_in_file,
+ 1, /* Number of bytes transferred */
+ get_file_content,
+ true
+ );
+ pos_in_file += 1;
+ _Tftp_Add_interaction_send_ack(
+ TFTP_FIRST_FD,
+ block_num++,
+ SERV_PORT,
+ tftpfs_ipv4_loopback,
+ true
+ );
+ _Tftp_Add_interaction_close( TFTP_FIRST_FD, 0 );
+
+ bytes_read = rdwt_tftp_client_file(
+ tftpfs_ipv4_loopback,
+ tftpfs_file,
+ true, /* is_for_reading */
+ -1, /* file_size for writing files only */
+ NULL, /* config */
+ &ctx->tftp_handle
+ );
+ T_eq_sz( bytes_read, pos_in_file );
+ T_eq_int( errno, 0 );
+ T_no_more_interactions();
+}
+
+/*
+ * Read a very short file from the server using the TFTP client interface.
+ * The file is one data packet long. Use none-default configuration values.
+ * The second and the third DATA packets are lost. This causes
+ * a termination of the connection because only two retransmissions are
+ * configured.
+ * Tests:
+ * * tftp_open() called with all configuration values having
+ * none default values.
+ * * The test writes a file using only the TFTP client (i.e. not using the
+ * file system API).
+ * * The client uses the none default configuration values:
+ * retransmissions, server_port, timeout, first_timeout,
+ * block_size, window_size.
+ * * The server sends the options in a different order than the client.
+ * * The option names in the OACK can be upper or lower case.
+ * * If windowsize > 1, the client sends ACK only each windowsize packet.
+ * * If windowsize > 1 and no packet is received in the timeout period,
+ * the client retransmits the last ACK.
+ * * The client makes a limited number of retransmissions attempts
+ * and then terminates the connections with an error.
+ */
+T_TEST_CASE_FIXTURE( client_open_with_none_default_config, &fixture_rfc1350 )
+{
+ tftp_test_context *ctx = T_fixture_context();
+ tftp_net_config config;
+ int bytes_read;
+ uint16_t block_num = 0;
+ size_t pos_in_file = 0;
+ uint16_t retransmissions = 2;
+ uint16_t server_port = 3456;
+ uint32_t timeout = 300;
+ uint32_t first_timeout = 200;
+ uint16_t block_size = 8;
+ uint16_t window_size = 2;
+ const char options[] =
+ "WINDOWSIZE" "\0" "2\0"
+ TFTP_OPTION_BLKSIZE "\0" "8";
+
+ /* T_set_verbosity( T_VERBOSE ); */
+ _Tftp_Add_interaction_socket( AF_INET, SOCK_DGRAM, 0, TFTP_FIRST_FD );
+ _Tftp_Add_interaction_send_rrq(
+ TFTP_FIRST_FD,
+ tftpfs_file,
+ server_port,
+ tftpfs_ipv4_loopback,
+ block_size,
+ window_size,
+ true
+ );
+ _Tftp_Add_interaction_recv_oack(
+ TFTP_FIRST_FD,
+ first_timeout,
+ SERV_PORT,
+ tftpfs_ipv4_loopback,
+ options,
+ sizeof( options ),
+ true
+ );
+ _Tftp_Add_interaction_send_ack(
+ TFTP_FIRST_FD,
+ block_num++,
+ SERV_PORT,
+ tftpfs_ipv4_loopback,
+ true
+ );
+ _Tftp_Add_interaction_recv_data(
+ TFTP_FIRST_FD,
+ first_timeout,
+ SERV_PORT,
+ tftpfs_ipv4_loopback,
+ block_num++,
+ pos_in_file,
+ block_size, /* Number of bytes transferred */
+ get_file_content,
+ true
+ );
+ pos_in_file += TFTP_RFC1350_BLOCK_SIZE;
+ _Tftp_Add_interaction_recv_data(
+ TFTP_FIRST_FD,
+ first_timeout,
+ SERV_PORT,
+ tftpfs_ipv4_loopback,
+ block_num,
+ pos_in_file,
+ block_size, /* Number of bytes transferred */
+ get_file_content,
+ true
+ );
+ pos_in_file += TFTP_RFC1350_BLOCK_SIZE;
+ _Tftp_Add_interaction_send_ack(
+ TFTP_FIRST_FD,
+ block_num++,
+ SERV_PORT,
+ tftpfs_ipv4_loopback,
+ true
+ );
+ _Tftp_Add_interaction_recv_nothing(
+ TFTP_FIRST_FD,
+ first_timeout /* Timeout: No packet received within timeout period */
+ );
+ _Tftp_Add_interaction_send_ack(
+ TFTP_FIRST_FD,
+ block_num - 1, /* Block number OK: Last block successfully received */
+ SERV_PORT,
+ tftpfs_ipv4_loopback,
+ true
+ );
+ _Tftp_Add_interaction_recv_nothing(
+ TFTP_FIRST_FD,
+ timeout /* Timeout: No packet received within timeout period */
+ );
+ _Tftp_Add_interaction_send_error(
+ TFTP_FIRST_FD,
+ TFTP_ERROR_CODE_NO_USER,
+ SERV_PORT,
+ tftpfs_ipv4_loopback,
+ true
+ );
+ _Tftp_Add_interaction_close( TFTP_FIRST_FD, 0 );
+
+ tftp_initialize_net_config( &config );
+ config.retransmissions = retransmissions;
+ config.server_port = server_port;
+ config.timeout = timeout;
+ config.first_timeout = first_timeout;
+ config.options.block_size = block_size;
+ config.options.window_size = window_size;
+
+ bytes_read = rdwt_tftp_client_file(
+ tftpfs_ipv4_loopback,
+ tftpfs_file,
+ true, /* is_for_reading */
+ -1, /* file_size for writing files only */
+ &config,
+ &ctx->tftp_handle
+ );
+
+ /*
+ * Not a bug but not nice: The client has received data before the connection
+ * breaks down due to timeout and this data is not provided to the user.
+ */
+
+ T_eq_sz( bytes_read, 0 );
+ T_eq_int( errno, EIO );
+ T_no_more_interactions();
+}
+
+/*
+ * Attempt to write to a file open for reading using the TFTP client interface.
+ * Tests:
+ * * tftp_open() called with NULL for config uses
+ * default configuration values.
+ * * Read a file using only the TFTP client (i.e. not using the
+ * file system)
+ * * The attempt to write to a file open for reading is rejected
+ * with an error.
+ * * The server receives an error message to indicate that the client
+ * closes the connection without having transferred data.
+ */
+T_TEST_CASE_FIXTURE( client_write_to_file_opened_for_reading, &fixture_rfc1350 )
+{
+ tftp_test_context *ctx = T_fixture_context();
+ int res = 0;
+ const char options[] =
+ TFTP_OPTION_BLKSIZE "\0"
+ RTEMS_XSTRING( TFTP_DEFAULT_BLOCK_SIZE ) "\0"
+ TFTP_OPTION_WINDOWSIZE"\0"
+ RTEMS_XSTRING( TFTP_DEFAULT_WINDOW_SIZE );
+
+ /* T_set_verbosity( T_VERBOSE ); */
+ _Tftp_Add_interaction_socket( AF_INET, SOCK_DGRAM, 0, TFTP_FIRST_FD );
+ _Tftp_Add_interaction_send_rrq(
+ TFTP_FIRST_FD,
+ tftpfs_file,
+ TFTP_STD_PORT,
+ tftpfs_ipv4_loopback,
+ TFTP_DEFAULT_BLOCK_SIZE,
+ TFTP_DEFAULT_WINDOW_SIZE,
+ true
+ );
+ _Tftp_Add_interaction_recv_oack(
+ TFTP_FIRST_FD,
+ FIRST_TIMEOUT_MILLISECONDS,
+ SERV_PORT,
+ tftpfs_ipv4_loopback,
+ options,
+ sizeof( options ),
+ true
+ );
+ /* Sending an ACK at this place before the ERROR would be OK, too. */
+ _Tftp_Add_interaction_send_error(
+ TFTP_FIRST_FD,
+ TFTP_ERROR_CODE_NO_USER,
+ SERV_PORT,
+ tftpfs_ipv4_loopback,
+ true
+ );
+ _Tftp_Add_interaction_close( TFTP_FIRST_FD, 0 );
+
+ res = tftp_open(
+ tftpfs_ipv4_loopback,
+ tftpfs_file,
+ true, /* is_for_reading */
+ NULL, /* Config */
+ &ctx->tftp_handle
+ );
+ T_eq_int( res, 0 );
+ T_assert_not_null( ctx->tftp_handle );
+
+ res = (int) tftp_write( ctx->tftp_handle, &res, 1 );
+ T_eq_int( res, -EIO );
+
+ res = tftp_close( ctx->tftp_handle );
+ ctx->tftp_handle = NULL; /* Avoid that the fixture closes it again */
+ T_eq_int( res, 0 );
+ T_no_more_interactions();
+}
+
+/*
+ * Attempt to read from a file open for writing using the TFTP client
+ * interface.
+ * Tests:
+ * * tftp_open() called with NULL for config uses
+ * default configuration values.
+ * * Read a file using only the TFTP client (i.e. not using the
+ * file system)
+ * * Attempt to read from a file open for writing is rejected with an error.
+ */
+T_TEST_CASE_FIXTURE( client_read_to_file_opened_for_writing, &fixture_rfc1350 )
+{
+ tftp_test_context *ctx = T_fixture_context();
+ int res = 0;
+ uint16_t block_num = 1;
+ size_t pos_in_file = 0;
+ const char options[] =
+ TFTP_OPTION_BLKSIZE "\0"
+ RTEMS_XSTRING( TFTP_DEFAULT_BLOCK_SIZE ) "\0"
+ TFTP_OPTION_WINDOWSIZE"\0"
+ RTEMS_XSTRING( TFTP_DEFAULT_WINDOW_SIZE );
+
+ /* T_set_verbosity( T_VERBOSE ); */
+ _Tftp_Add_interaction_socket( AF_INET, SOCK_DGRAM, 0, TFTP_FIRST_FD );
+ _Tftp_Add_interaction_send_wrq(
+ TFTP_FIRST_FD,
+ tftpfs_file,
+ TFTP_STD_PORT,
+ tftpfs_ipv4_loopback,
+ TFTP_DEFAULT_BLOCK_SIZE,
+ TFTP_DEFAULT_WINDOW_SIZE,
+ true
+ );
+ _Tftp_Add_interaction_recv_oack(
+ TFTP_FIRST_FD,
+ FIRST_TIMEOUT_MILLISECONDS,
+ SERV_PORT,
+ tftpfs_ipv4_loopback,
+ options,
+ sizeof( options ),
+ true
+ );
+ _Tftp_Add_interaction_send_data(
+ TFTP_FIRST_FD,
+ block_num,
+ pos_in_file,
+ 0, /* Data size */
+ get_file_content,
+ SERV_PORT,
+ tftpfs_ipv4_loopback,
+ true
+ );
+ pos_in_file += 0;
+ _Tftp_Add_interaction_recv_ack(
+ TFTP_FIRST_FD,
+ FIRST_TIMEOUT_MILLISECONDS,
+ SERV_PORT,
+ tftpfs_ipv4_loopback,
+ block_num++,
+ true
+ );
+ _Tftp_Add_interaction_close( TFTP_FIRST_FD, 0 );
+
+ res = tftp_open(
+ tftpfs_ipv4_loopback,
+ tftpfs_file,
+ false, /* is_for_reading */
+ NULL, /* config */
+ &ctx->tftp_handle
+ );
+ T_eq_int( res, 0 );
+ T_assert_not_null( ctx->tftp_handle );
+
+ res = (int) tftp_read( ctx->tftp_handle, &res, 1 );
+ T_eq_int( res, -EIO );
+
+ res = tftp_close( ctx->tftp_handle );
+ ctx->tftp_handle = NULL; /* Avoid that the fixture closes it again */
+ T_eq_int( res, 0 );
+ T_no_more_interactions();
+}
+
+/*
+ * Write a file to the server using the TFTP client interface.
+ * The test uses the default options.
+ * The file is 2 and a half data packet long. No timeouts, packet loss, ...
+ * Tests:
+ * * The default options (windowsize = 8 and blocksize = 1456) are used.
+ * * tftp_open() is called with default configuration values.
+ * * The test writes a file using only the TFTP client (i.e. not using the
+ * file system)
+ * * The code supports the use of a server name instead of an IP address.
+ * * The first window is also the last window.
+ * * The only ACK packet is the one at the end of window.
+ * * Between sending data packets, the client checks whether any packets
+ * are received.
+ * * The client handles files correctly which end in the middle of a window.
+ */
+T_TEST_CASE_FIXTURE( client_write_simple_file, &fixture_default_options )
+{
+ tftp_test_context *ctx = T_fixture_context();
+ tftp_net_config config;
+ int bytes_written;
+ uint16_t block_num = 1;
+ size_t pos_in_file = 0;
+ const char options[] =
+ TFTP_OPTION_BLKSIZE "\0"
+ RTEMS_XSTRING( TFTP_DEFAULT_BLOCK_SIZE ) "\0"
+ TFTP_OPTION_WINDOWSIZE "\0"
+ RTEMS_XSTRING( TFTP_DEFAULT_WINDOW_SIZE );
+
+ /* T_set_verbosity( T_VERBOSE ); */
+ _Tftp_Add_interaction_socket( AF_INET, SOCK_DGRAM, 0, TFTP_FIRST_FD );
+ _Tftp_Add_interaction_send_wrq(
+ TFTP_FIRST_FD,
+ tftpfs_file,
+ TFTP_STD_PORT,
+ tftpfs_server0_ipv4,
+ TFTP_DEFAULT_BLOCK_SIZE,
+ TFTP_DEFAULT_WINDOW_SIZE,
+ true
+ );
+ _Tftp_Add_interaction_recv_oack(
+ TFTP_FIRST_FD,
+ FIRST_TIMEOUT_MILLISECONDS,
+ SERV_PORT,
+ tftpfs_server0_ipv4,
+ options,
+ sizeof( options ),
+ true
+ );
+ _Tftp_Add_interaction_send_data(
+ TFTP_FIRST_FD,
+ block_num++,
+ pos_in_file,
+ TFTP_DEFAULT_BLOCK_SIZE,
+ get_file_content,
+ SERV_PORT,
+ tftpfs_server0_ipv4,
+ true
+ );
+ pos_in_file += TFTP_DEFAULT_BLOCK_SIZE;
+ _Tftp_Add_interaction_recv_nothing(
+ TFTP_FIRST_FD,
+ DO_NOT_WAIT_FOR_ANY_TIMEOUT
+ );
+ _Tftp_Add_interaction_send_data(
+ TFTP_FIRST_FD,
+ block_num++,
+ pos_in_file,
+ TFTP_DEFAULT_BLOCK_SIZE,
+ get_file_content,
+ SERV_PORT,
+ tftpfs_server0_ipv4,
+ true
+ );
+ pos_in_file += TFTP_DEFAULT_BLOCK_SIZE;
+ _Tftp_Add_interaction_recv_nothing(
+ TFTP_FIRST_FD,
+ DO_NOT_WAIT_FOR_ANY_TIMEOUT
+ );
+ _Tftp_Add_interaction_send_data(
+ TFTP_FIRST_FD,
+ block_num,
+ pos_in_file,
+ TFTP_DEFAULT_BLOCK_SIZE / 2, /* Data bytes in this block */
+ get_file_content,
+ SERV_PORT,
+ tftpfs_server0_ipv4,
+ true
+ );
+ pos_in_file += TFTP_DEFAULT_BLOCK_SIZE / 2;
+ _Tftp_Add_interaction_recv_ack(
+ TFTP_FIRST_FD,
+ FIRST_TIMEOUT_MILLISECONDS,
+ SERV_PORT,
+ tftpfs_server0_ipv4,
+ block_num++,
+ true
+ );
+ _Tftp_Add_interaction_close( TFTP_FIRST_FD, 0 );
+
+ tftp_initialize_net_config( &config );
+ bytes_written = rdwt_tftp_client_file(
+ tftpfs_server0_name,
+ tftpfs_file,
+ false, /* is_for_reading */
+ pos_in_file, /* file_size for writing files only */
+ &config,
+ &ctx->tftp_handle
+ );
+ T_eq_sz( bytes_written, pos_in_file );
+ T_eq_int( errno, 0 );
+ T_no_more_interactions();
+}
+
+/*
+ * Test cases for the file system interface
+ */
+
+/*
+ * Read a file from the server using only RFC1350.
+ * The file is two and a half data packet long. No timeouts, packet loss, ...
+ * Tests:
+ * * The code supports requests without options (RFC1350 only).
+ * * The code supports the use of an IPv4 address instead of a server name.
+ * * The first packet is sent to standard port 69 of server.
+ * * All other packets are sent to the port used for this connection.
+ * * The first and second data packet are full.
+ * * The third data packet signals the end of transfer.
+ * * Read the file from file system in one big chunk of exactly
+ * the size of the file.
+ */
+T_TEST_CASE_FIXTURE( read_simple_file, &fixture_rfc1350 )
+{
+ tftp_test_context *ctx = T_fixture_context();
+ int bytes_read;
+ uint16_t block_num = 1;
+ size_t pos_in_file = 0;
+
+ /* T_set_verbosity( T_VERBOSE ); */
+ _Tftp_Add_interaction_socket( AF_INET, SOCK_DGRAM, 0, TFTP_FIRST_FD );
+ _Tftp_Add_interaction_send_rrq(
+ TFTP_FIRST_FD,
+ tftpfs_file,
+ TFTP_STD_PORT,
+ tftpfs_ipv4_loopback,
+ NO_BLOCK_SIZE_OPTION,
+ NO_WINDOW_SIZE_OPTION,
+ true
+ );
+ _Tftp_Add_interaction_recv_data(
+ TFTP_FIRST_FD,
+ FIRST_TIMEOUT_MILLISECONDS,
+ SERV_PORT,
+ tftpfs_ipv4_loopback,
+ block_num,
+ pos_in_file,
+ TFTP_RFC1350_BLOCK_SIZE, /* Number of bytes transferred */
+ get_file_content,
+ true
+ );
+ pos_in_file += TFTP_RFC1350_BLOCK_SIZE;
+ _Tftp_Add_interaction_send_ack(
+ TFTP_FIRST_FD,
+ block_num++,
+ SERV_PORT,
+ tftpfs_ipv4_loopback,
+ true
+ );
+ _Tftp_Add_interaction_recv_data(
+ TFTP_FIRST_FD,
+ FIRST_TIMEOUT_MILLISECONDS,
+ SERV_PORT,
+ tftpfs_ipv4_loopback,
+ block_num,
+ pos_in_file,
+ TFTP_RFC1350_BLOCK_SIZE, /* Number of bytes transferred */
+ get_file_content,
+ true
+ );
+ pos_in_file += TFTP_RFC1350_BLOCK_SIZE;
+ _Tftp_Add_interaction_send_ack(
+ TFTP_FIRST_FD,
+ block_num++,
+ SERV_PORT,
+ tftpfs_ipv4_loopback,
+ true
+ );
+ _Tftp_Add_interaction_recv_data(
+ TFTP_FIRST_FD,
+ FIRST_TIMEOUT_MILLISECONDS,
+ SERV_PORT,
+ tftpfs_ipv4_loopback,
+ block_num,
+ pos_in_file,
+ TFTP_RFC1350_BLOCK_SIZE / 2, /* Number of bytes transferred */
+ get_file_content,
+ true
+ );
+ pos_in_file += TFTP_RFC1350_BLOCK_SIZE / 2;
+ _Tftp_Add_interaction_send_ack(
+ TFTP_FIRST_FD,
+ block_num++,
+ SERV_PORT,
+ tftpfs_ipv4_loopback,
+ true
+ );
+ _Tftp_Add_interaction_close( TFTP_FIRST_FD, 0 );
+
+ bytes_read = read_tftp_file(
+ create_tftpfs_path( tftpfs_ipv4_loopback, tftpfs_file ),
+ /* Bytes read per call to read() */
+ 2 * TFTP_RFC1350_BLOCK_SIZE + TFTP_RFC1350_BLOCK_SIZE / 2,
+ SIZE_MAX,
+ &ctx->fd0
+ );
+ T_eq_int( bytes_read, pos_in_file );
+ T_no_more_interactions();
+}
+
+/*
+ * Read a file from the server using only RFC1350.
+ * The file is one byte long. No timeouts, packet loss, ...
+ * Tests:
+ * * The code supports requests without options (RFC1350 only).
+ * * The code supports the use of an IPv4 address instead of a server name.
+ * * The first packet is sent to standard port 69 of server.
+ * * All other packets are sent to the port used for this connection.
+ * * The first data packet is not full and signals the end of the transfer.
+ * * The test reads a file from the file system in one-byte chunks.
+ */
+T_TEST_CASE_FIXTURE( read_tiny_file, &fixture_rfc1350 )
+{
+ tftp_test_context *ctx = T_fixture_context();
+ int bytes_read;
+ uint16_t block_num = 1;
+ size_t pos_in_file = 0;
+
+ /* T_set_verbosity( T_VERBOSE ); */
+ _Tftp_Add_interaction_socket( AF_INET, SOCK_DGRAM, 0, TFTP_FIRST_FD );
+ _Tftp_Add_interaction_send_rrq(
+ TFTP_FIRST_FD,
+ tftpfs_file,
+ TFTP_STD_PORT,
+ tftpfs_ipv4_loopback,
+ NO_BLOCK_SIZE_OPTION,
+ NO_WINDOW_SIZE_OPTION,
+ true
+ );
+ _Tftp_Add_interaction_recv_data(
+ TFTP_FIRST_FD,
+ FIRST_TIMEOUT_MILLISECONDS,
+ SERV_PORT,
+ tftpfs_ipv4_loopback,
+ block_num,
+ pos_in_file,
+ 1, /* Number of bytes transferred */
+ get_file_content,
+ true
+ );
+ pos_in_file += 1;
+ _Tftp_Add_interaction_send_ack(
+ TFTP_FIRST_FD,
+ block_num++,
+ SERV_PORT,
+ tftpfs_ipv4_loopback,
+ true
+ );
+ _Tftp_Add_interaction_close( TFTP_FIRST_FD, 0 );
+
+ bytes_read = read_tftp_file(
+ create_tftpfs_path( tftpfs_ipv4_loopback, tftpfs_file ),
+ 1, /* Bytes read per call to read() */
+ SIZE_MAX,
+ &ctx->fd0
+ );
+ T_eq_int( bytes_read, pos_in_file );
+ T_no_more_interactions();
+}
+
+/*
+ * Read a file from the server using only RFC1350.
+ * The file is one data packet long. No timeouts, packet loss, ...
+ * Tests:
+ * * The code supports requests without options (RFC1350 only).
+ * * The code supports the use of an IPv4 address instead of a server name.
+ * * The first packet is sent to standard port 69 of server.
+ * * All other packets are sent to the port used for this connection.
+ * * The first data packet is full.
+ * * The second data packet is empty and signals the end of the transfer.
+ * * The client handles an empty data packet correctly as end
+ * of file indicator.
+ * * The test reads a file from the file system in chunks of three quarters
+ * of the block size.
+ */
+T_TEST_CASE_FIXTURE( read_one_block_file, &fixture_rfc1350 )
+{
+ tftp_test_context *ctx = T_fixture_context();
+ int bytes_read;
+ uint16_t block_num = 1;
+ size_t pos_in_file = 0;
+
+ /* T_set_verbosity( T_VERBOSE ); */
+ _Tftp_Add_interaction_socket( AF_INET, SOCK_DGRAM, 0, TFTP_FIRST_FD );
+ _Tftp_Add_interaction_send_rrq(
+ TFTP_FIRST_FD,
+ tftpfs_file,
+ TFTP_STD_PORT,
+ tftpfs_ipv4_loopback,
+ NO_BLOCK_SIZE_OPTION,
+ NO_WINDOW_SIZE_OPTION,
+ true
+ );
+ _Tftp_Add_interaction_recv_data(
+ TFTP_FIRST_FD,
+ FIRST_TIMEOUT_MILLISECONDS,
+ SERV_PORT,
+ tftpfs_ipv4_loopback,
+ block_num,
+ pos_in_file,
+ TFTP_RFC1350_BLOCK_SIZE, /* Number of bytes transferred */
+ get_file_content,
+ true
+ );
+ pos_in_file += TFTP_RFC1350_BLOCK_SIZE;
+ _Tftp_Add_interaction_send_ack(
+ TFTP_FIRST_FD,
+ block_num++,
+ SERV_PORT,
+ tftpfs_ipv4_loopback,
+ true
+ );
+ _Tftp_Add_interaction_recv_data(
+ TFTP_FIRST_FD,
+ FIRST_TIMEOUT_MILLISECONDS,
+ SERV_PORT,
+ tftpfs_ipv4_loopback,
+ block_num,
+ pos_in_file,
+ 0, /* Number of bytes transferred */
+ get_file_content,
+ true
+ );
+ _Tftp_Add_interaction_send_ack(
+ TFTP_FIRST_FD,
+ block_num++,
+ SERV_PORT,
+ tftpfs_ipv4_loopback,
+ true
+ );
+ _Tftp_Add_interaction_close( TFTP_FIRST_FD, 0 );
+
+ bytes_read = read_tftp_file(
+ create_tftpfs_path( tftpfs_ipv4_loopback, tftpfs_file ),
+ /* Bytes read per call to read() */
+ TFTP_RFC1350_BLOCK_SIZE / 4 * 3,
+ SIZE_MAX,
+ &ctx->fd0
+ );
+ T_eq_int( bytes_read, pos_in_file );
+ T_no_more_interactions();
+}
+
+/*
+ * Read a file from the server using only RFC1350.
+ * The file is one data packet long.
+ * The client receives stray packets:
+ * * A packet from an unknown server (wrong TID)
+ * * An ACK packet instead of a DATA packet
+ * Tests:
+ * * The code supports requests without options (RFC1350 only).
+ * * The code supports the use of an IPv4 address instead of a server name.
+ * * The first packet is sent to standard port 69 of server.
+ * * All other packets are sent to the port used for this connection.
+ * * The first data packet is full.
+ * * The next received packet originates from a wrong TID
+ * (i.e. wrong connection).
+ * * Upon reception of a packet with a wrong TID, the client sends
+ * an ERROR message with code 5 and does not terminate the current
+ * transfer.
+ * * The final received packet is an ACK packet instead or the expected
+ * DATA packet.
+ * * Upon the reception of an unexpected packet, the client terminates
+ * the connection by sending an error packet to the server.
+ */
+T_TEST_CASE_FIXTURE( read_file_stray_packets, &fixture_rfc1350 )
+{
+ tftp_test_context *ctx = T_fixture_context();
+ int bytes_read;
+ uint16_t block_num = 1;
+ size_t pos_in_file = 0;
+
+ /* T_set_verbosity( T_VERBOSE ); */
+ _Tftp_Add_interaction_socket( AF_INET, SOCK_DGRAM, 0, TFTP_FIRST_FD );
+ _Tftp_Add_interaction_send_rrq(
+ TFTP_FIRST_FD,
+ tftpfs_file,
+ TFTP_STD_PORT,
+ tftpfs_ipv4_loopback,
+ NO_BLOCK_SIZE_OPTION,
+ NO_WINDOW_SIZE_OPTION,
+ true
+ );
+ _Tftp_Add_interaction_recv_data(
+ TFTP_FIRST_FD,
+ FIRST_TIMEOUT_MILLISECONDS,
+ SERV_PORT,
+ tftpfs_ipv4_loopback,
+ block_num,
+ pos_in_file,
+ TFTP_RFC1350_BLOCK_SIZE, /* Number of bytes transferred */
+ get_file_content,
+ true
+ );
+ pos_in_file += TFTP_RFC1350_BLOCK_SIZE;
+ _Tftp_Add_interaction_send_ack(
+ TFTP_FIRST_FD,
+ block_num++,
+ SERV_PORT,
+ tftpfs_ipv4_loopback,
+ true
+ );
+ _Tftp_Add_interaction_recv_data(
+ TFTP_FIRST_FD,
+ FIRST_TIMEOUT_MILLISECONDS,
+ SERV_PORT + 1, /* Stray packet with wrong server TID */
+ tftpfs_ipv4_loopback,
+ block_num,
+ pos_in_file,
+ TFTP_RFC1350_BLOCK_SIZE, /* Number of bytes transferred */
+ get_file_content,
+ true
+ );
+ _Tftp_Add_interaction_send_error(
+ TFTP_FIRST_FD,
+ TFTP_ERROR_CODE_UNKNOWN_ID,
+ SERV_PORT + 1,
+ tftpfs_ipv4_loopback,
+ true
+ );
+ _Tftp_Add_interaction_recv_ack( /* Stray ACK packet */
+ TFTP_FIRST_FD,
+ FIRST_TIMEOUT_MILLISECONDS,
+ SERV_PORT,
+ tftpfs_ipv4_loopback,
+ block_num - 1,
+ true
+ );
+ _Tftp_Add_interaction_send_error(
+ TFTP_FIRST_FD,
+ TFTP_ERROR_CODE_ILLEGAL,
+ SERV_PORT,
+ tftpfs_ipv4_loopback,
+ true
+ );
+ _Tftp_Add_interaction_close( TFTP_FIRST_FD, 0 );
+
+ bytes_read = read_tftp_file(
+ create_tftpfs_path( tftpfs_ipv4_loopback, tftpfs_file ),
+ /* Bytes read per call to read() */
+ TFTP_RFC1350_BLOCK_SIZE / 4 * 3,
+ SIZE_MAX,
+ &ctx->fd0
+ );
+ T_eq_int( errno, EPROTO );
+ /*
+ * The client received one packet with TFTP_RFC1350_BLOCK_SIZE
+ * before the error occurred. The test reads in chunks of
+ * TFTP_RFC1350_BLOCK_SIZE /4 * 3. Thus, after the first chunk
+ * the client signals the error to the test.
+ *
+ * It would be a little improvement if the client would return all
+ * bytes received before signaling the error.
+ */
+ T_eq_int( bytes_read, TFTP_RFC1350_BLOCK_SIZE / 4 * 3 );
+ T_no_more_interactions();
+}
+
+/*
+ * Read a file from the server using only RFC1350.
+ * The file is one data packet long.
+ * The server sends an error message after the first DATA packet.
+ * Tests:
+ * * The code supports requests without options (RFC1350 only).
+ * * The code supports the use of an IPv4 address instead of a server name.
+ * * The first packet is sent to standard port 69 of server.
+ * * All other packets are sent to the port used for this connection.
+ * * The client uses a short time out for all packets.
+ * * The client handles error packets from the server and stops the
+ * connection by signaling an error to the user on the file system side.
+ * * The test reads a file from the file system in chunks of three quarters
+ * of the block size.
+ */
+T_TEST_CASE_FIXTURE( read_one_block_file_server_error, &fixture_rfc1350 )
+{
+ tftp_test_context *ctx = T_fixture_context();
+ int bytes_read;
+ uint16_t block_num = 1;
+ size_t pos_in_file = 0;
+
+ /* T_set_verbosity( T_VERBOSE ); */
+ _Tftp_Add_interaction_socket( AF_INET, SOCK_DGRAM, 0, TFTP_FIRST_FD );
+ _Tftp_Add_interaction_send_rrq(
+ TFTP_FIRST_FD,
+ tftpfs_file,
+ TFTP_STD_PORT,
+ tftpfs_ipv4_loopback,
+ NO_BLOCK_SIZE_OPTION,
+ NO_WINDOW_SIZE_OPTION,
+ true
+ );
+ _Tftp_Add_interaction_recv_data(
+ TFTP_FIRST_FD,
+ FIRST_TIMEOUT_MILLISECONDS,
+ SERV_PORT,
+ tftpfs_ipv4_loopback,
+ block_num,
+ pos_in_file,
+ TFTP_RFC1350_BLOCK_SIZE, /* Number of bytes transferred */
+ get_file_content,
+ true
+ );
+ pos_in_file += TFTP_RFC1350_BLOCK_SIZE;
+ _Tftp_Add_interaction_send_ack(
+ TFTP_FIRST_FD,
+ block_num++,
+ SERV_PORT,
+ tftpfs_ipv4_loopback,
+ true
+ );
+ _Tftp_Add_interaction_recv_error(
+ TFTP_FIRST_FD,
+ FIRST_TIMEOUT_MILLISECONDS,
+ SERV_PORT,
+ tftpfs_ipv4_loopback,
+ TFTP_ERROR_CODE_NO_ACCESS,
+ "Cannot read more",
+ true
+ );
+ _Tftp_Add_interaction_close( TFTP_FIRST_FD, 0 );
+
+ bytes_read = read_tftp_file(
+ create_tftpfs_path( tftpfs_ipv4_loopback, tftpfs_file ),
+ /* Bytes read per call to read() */
+ TFTP_RFC1350_BLOCK_SIZE / 4 * 3,
+ SIZE_MAX,
+ &ctx->fd0
+ );
+ T_eq_int( bytes_read, TFTP_RFC1350_BLOCK_SIZE / 4 * 3 );
+ T_eq_int( errno, EPERM );
+ T_no_more_interactions();
+}
+
+/*
+ * Read a file from the server using only RFC1350.
+ * The file is one data packet long.
+ * The server sends a malformed error packet after the first DATA packet.
+ * The error message in the packet is not a 0 terminated string
+ * Tests:
+ * * The code supports requests without options (RFC1350 only).
+ * * The code supports the use of an IPv4 address instead of a server name.
+ * * The first packet is sent to standard port 69 of server.
+ * * All other packets are sent to the port used for this connection.
+ * * The client handles malformed errors from the server and does not crash.
+ * * The test reads a file from the file system in chunks of three quarters
+ * of the block size.
+ */
+T_TEST_CASE_FIXTURE( read_one_block_file_malformed_server_error, &fixture_rfc1350 )
+{
+ tftp_test_context *ctx = T_fixture_context();
+ int bytes_read;
+ uint16_t block_num = 1;
+ size_t pos_in_file = 0;
+ static const uint8_t packet_malformed_error[] = {
+ 0x00, 0x05, /* Opcode = TFTP_OPCODE_ERROR */
+ 0x00, 0x02, /* Error code = TFTP_ERROR_CODE_NO_ACCESS */
+ 'n', 'o', ' ', 'a', 'c', 'c', 'e', 's', 's' /* missing '\0' at the end */
+ };
+
+ /* T_set_verbosity( T_VERBOSE ); */
+ _Tftp_Add_interaction_socket( AF_INET, SOCK_DGRAM, 0, TFTP_FIRST_FD );
+ _Tftp_Add_interaction_send_rrq(
+ TFTP_FIRST_FD,
+ tftpfs_file,
+ TFTP_STD_PORT,
+ tftpfs_ipv4_loopback,
+ NO_BLOCK_SIZE_OPTION,
+ NO_WINDOW_SIZE_OPTION,
+ true
+ );
+ _Tftp_Add_interaction_recv_data(
+ TFTP_FIRST_FD,
+ FIRST_TIMEOUT_MILLISECONDS,
+ SERV_PORT,
+ tftpfs_ipv4_loopback,
+ block_num,
+ pos_in_file,
+ TFTP_RFC1350_BLOCK_SIZE, /* Number of bytes transferred */
+ get_file_content,
+ true
+ );
+ pos_in_file += TFTP_RFC1350_BLOCK_SIZE;
+ _Tftp_Add_interaction_send_ack(
+ TFTP_FIRST_FD,
+ block_num++,
+ SERV_PORT,
+ tftpfs_ipv4_loopback,
+ true
+ );
+ _Tftp_Add_interaction_recv_raw(
+ TFTP_FIRST_FD,
+ FIRST_TIMEOUT_MILLISECONDS,
+ SERV_PORT,
+ tftpfs_ipv4_loopback,
+ sizeof( packet_malformed_error ), /* Malformed ERROR packet */
+ packet_malformed_error,
+ true
+ );
+ _Tftp_Add_interaction_close( TFTP_FIRST_FD, 0 );
+
+ bytes_read = read_tftp_file(
+ create_tftpfs_path( tftpfs_ipv4_loopback, tftpfs_file ),
+ /* Bytes read per call to read() */
+ TFTP_RFC1350_BLOCK_SIZE / 4 * 3,
+ SIZE_MAX,
+ &ctx->fd0
+ );
+ T_eq_int( bytes_read, TFTP_RFC1350_BLOCK_SIZE / 4 * 3 );
+ T_eq_int( errno, EPERM );
+ T_no_more_interactions();
+}
+
+/*
+ * Read a file from the server using only RFC1350.
+ * The reader on the file system side stops after having read half a
+ * data packet and before having received the whole file and closes the file.
+ * Tests:
+ * * The code supports requests without options (RFC1350 only).
+ * * The code supports the use of an IPv4 address instead of a server name.
+ * * The first packet is sent to standard port 69 of server.
+ * * All other packets are sent to the port used for this connection.
+ * * The first data packet is full.
+ * * The client handles the closing of the file by the user correctly.
+ * * The client sends an error to the server after the user stops reading
+ * the file.
+ * * The test reads a file from the file system in chunks of block size.
+ */
+T_TEST_CASE_FIXTURE( read_one_block_close_file, &fixture_rfc1350 )
+{
+ tftp_test_context *ctx = T_fixture_context();
+ int bytes_read;
+ uint16_t block_num = 1;
+ size_t pos_in_file = 0;
+
+ /* T_set_verbosity( T_VERBOSE ); */
+ _Tftp_Add_interaction_socket( AF_INET, SOCK_DGRAM, 0, TFTP_FIRST_FD );
+ _Tftp_Add_interaction_send_rrq(
+ TFTP_FIRST_FD,
+ tftpfs_file,
+ TFTP_STD_PORT,
+ tftpfs_ipv4_loopback,
+ NO_BLOCK_SIZE_OPTION,
+ NO_WINDOW_SIZE_OPTION,
+ true
+ );
+ _Tftp_Add_interaction_recv_data(
+ TFTP_FIRST_FD,
+ FIRST_TIMEOUT_MILLISECONDS,
+ SERV_PORT,
+ tftpfs_ipv4_loopback,
+ block_num,
+ pos_in_file,
+ TFTP_RFC1350_BLOCK_SIZE, /* Number of bytes transferred */
+ get_file_content,
+ true
+ );
+ /* Sending an ACK at this place before the ERROR would be OK, too. */
+ _Tftp_Add_interaction_send_error(
+ TFTP_FIRST_FD,
+ TFTP_ERROR_CODE_NO_USER,
+ SERV_PORT,
+ tftpfs_ipv4_loopback,
+ true
+ );
+ _Tftp_Add_interaction_close( TFTP_FIRST_FD, 0 );
+
+ bytes_read = read_tftp_file(
+ create_tftpfs_path( tftpfs_ipv4_loopback, tftpfs_file ),
+ TFTP_RFC1350_BLOCK_SIZE / 4, /* Bytes read per call to read() */
+ TFTP_RFC1350_BLOCK_SIZE / 2, /* Max bytes read from this file */
+ &ctx->fd0
+ );
+ T_eq_int( bytes_read, TFTP_RFC1350_BLOCK_SIZE / 2 );
+ T_no_more_interactions();
+}
+
+/*
+ * Read a file from the server using only RFC1350.
+ * The reader on the file system side just open()s and then immediately closes
+ * the file without ever reading a single byte.
+ * Tests:
+ * * The code supports requests without options (RFC1350 only).
+ * * The code supports the use of an IPv4 address instead of a server name.
+ * * The first packet is sent to standard port 69 of server.
+ * * All other packets are sent to the port used for this connection.
+ * * The first data packet is full.
+ * * The client handles the closing of the file by the user correctly.
+ * * The client sends an error to the server when the user closes the file.
+ */
+T_TEST_CASE_FIXTURE( read_close_file_immediately, &fixture_rfc1350 )
+{
+ tftp_test_context *ctx = T_fixture_context();
+ int bytes_read;
+ uint16_t block_num = 1;
+ size_t pos_in_file = 0;
+
+ /* T_set_verbosity( T_VERBOSE ); */
+ _Tftp_Add_interaction_socket( AF_INET, SOCK_DGRAM, 0, TFTP_FIRST_FD );
+ _Tftp_Add_interaction_send_rrq(
+ TFTP_FIRST_FD,
+ tftpfs_file,
+ TFTP_STD_PORT,
+ tftpfs_ipv4_loopback,
+ NO_BLOCK_SIZE_OPTION,
+ NO_WINDOW_SIZE_OPTION,
+ true
+ );
+ _Tftp_Add_interaction_recv_data(
+ TFTP_FIRST_FD,
+ FIRST_TIMEOUT_MILLISECONDS,
+ SERV_PORT,
+ tftpfs_ipv4_loopback,
+ block_num,
+ pos_in_file,
+ TFTP_RFC1350_BLOCK_SIZE, /* Number of bytes transferred */
+ get_file_content,
+ true
+ );
+ /* Sending an ACK at this place before the ERROR would be OK, too. */
+ _Tftp_Add_interaction_send_error(
+ TFTP_FIRST_FD,
+ TFTP_ERROR_CODE_NO_USER,
+ SERV_PORT,
+ tftpfs_ipv4_loopback,
+ true
+ );
+ _Tftp_Add_interaction_close( TFTP_FIRST_FD, 0 );
+
+ bytes_read = read_tftp_file(
+ create_tftpfs_path( tftpfs_ipv4_loopback, tftpfs_file ),
+ TFTP_RFC1350_BLOCK_SIZE / 4, /* Bytes read per call to read() */
+ 0, /* Max bytes read from this file */
+ &ctx->fd0
+ );
+ T_eq_int( bytes_read, 0 );
+ T_no_more_interactions();
+}
+
+/*
+ * Read an empty file from the server using only RFC1350.
+ * No timeouts, packet loss, ...
+ * Tests:
+ * * The code supports requests without options (RFC1350 only).
+ * * The code supports the use of a server name instead of an IP address.
+ * * The first packet is sent to standard port 69 of server.
+ * * All other packets are sent to the port used for this connection.
+ * * The client uses a short time out for all packets.
+ * * The first data packet has length 0.
+ * * The client can read empty files from the server.
+ * * The test reads a file from the file system in one big chunk which
+ * is larger than the file.
+ */
+T_TEST_CASE_FIXTURE( read_empty_file, &fixture_rfc1350 )
+{
+ tftp_test_context *ctx = T_fixture_context();
+ int bytes_read;
+ uint16_t block_num = 1;
+ size_t pos_in_file = 0;
+
+ /* T_set_verbosity( T_VERBOSE ); */
+ _Tftp_Add_interaction_socket( AF_INET, SOCK_DGRAM, 0, TFTP_FIRST_FD );
+ _Tftp_Add_interaction_send_rrq(
+ TFTP_FIRST_FD,
+ tftpfs_file,
+ TFTP_STD_PORT,
+ tftpfs_server0_ipv4,
+ NO_BLOCK_SIZE_OPTION,
+ NO_WINDOW_SIZE_OPTION,
+ true
+ );
+ _Tftp_Add_interaction_recv_data(
+ TFTP_FIRST_FD,
+ FIRST_TIMEOUT_MILLISECONDS,
+ SERV_PORT,
+ tftpfs_server0_ipv4,
+ block_num,
+ pos_in_file,
+ 0, /* Number of bytes transferred */
+ get_file_content,
+ true
+ );
+ _Tftp_Add_interaction_send_ack(
+ TFTP_FIRST_FD,
+ block_num++,
+ SERV_PORT,
+ tftpfs_server0_ipv4,
+ true
+ );
+ _Tftp_Add_interaction_close( TFTP_FIRST_FD, 0 );
+
+ bytes_read = read_tftp_file(
+ create_tftpfs_path( tftpfs_server0_name, tftpfs_file ),
+ /* Bytes read per call to read() */
+ TFTP_RFC1350_BLOCK_SIZE,
+ SIZE_MAX,
+ &ctx->fd0
+ );
+ T_assert_eq_int( bytes_read, pos_in_file );
+ T_no_more_interactions();
+}
+
+/*
+ * Read an empty file from the server using only RFC1350.
+ * The first two RRQ packets are lost.
+ * Tests:
+ * * The code supports requests without options (RFC1350 only).
+ * * The code supports the use of a server name instead of an IP address.
+ * * The first packet is sent to standard port 69 of server.
+ * * The client uses a short time out for first packets.
+ * * The client uses a longer time out for repeated packets.
+ * * The client repeats lost RRQs packets.
+ * * The client does not repeat the ACK packet for the last DATA packet
+ * which signals the end of transfer.
+ * * The first data packet is empty and signals the end of the transfer.
+ * * It is possible to read a file with 0 bytes content from
+ * the file system.
+ */
+T_TEST_CASE_FIXTURE( read_empty_file_looing_rrq, &fixture_rfc1350 )
+{
+ tftp_test_context *ctx = T_fixture_context();
+ int bytes_read;
+ uint16_t block_num = 1;
+ size_t pos_in_file = 0;
+
+ /* T_set_verbosity( T_VERBOSE ); */
+ _Tftp_Add_interaction_socket( AF_INET, SOCK_DGRAM, 0, TFTP_FIRST_FD );
+ _Tftp_Add_interaction_send_rrq(
+ TFTP_FIRST_FD,
+ tftpfs_file,
+ TFTP_STD_PORT,
+ tftpfs_server0_ipv4,
+ NO_BLOCK_SIZE_OPTION,
+ NO_WINDOW_SIZE_OPTION,
+ true
+ );
+ _Tftp_Add_interaction_recv_nothing(
+ TFTP_FIRST_FD, /* Timeout: No packet received within timeout period */
+ FIRST_TIMEOUT_MILLISECONDS
+ );
+ _Tftp_Add_interaction_send_rrq(
+ TFTP_FIRST_FD,
+ tftpfs_file,
+ TFTP_STD_PORT,
+ tftpfs_server0_ipv4,
+ NO_BLOCK_SIZE_OPTION,
+ NO_WINDOW_SIZE_OPTION,
+ true
+ );
+ _Tftp_Add_interaction_recv_nothing(
+ TFTP_FIRST_FD, /* Timeout: No packet received within timeout period */
+ TIMEOUT_MILLISECONDS
+ );
+ _Tftp_Add_interaction_send_rrq(
+ TFTP_FIRST_FD,
+ tftpfs_file,
+ TFTP_STD_PORT,
+ tftpfs_server0_ipv4,
+ NO_BLOCK_SIZE_OPTION,
+ NO_WINDOW_SIZE_OPTION,
+ true
+ );
+ _Tftp_Add_interaction_recv_data(
+ TFTP_FIRST_FD,
+ TIMEOUT_MILLISECONDS,
+ SERV_PORT,
+ tftpfs_server0_ipv4,
+ block_num,
+ pos_in_file,
+ 0, /* Number of bytes transferred */
+ get_file_content,
+ true
+ );
+ _Tftp_Add_interaction_send_ack(
+ TFTP_FIRST_FD,
+ block_num++,
+ SERV_PORT,
+ tftpfs_server0_ipv4,
+ true
+ );
+ _Tftp_Add_interaction_close( TFTP_FIRST_FD, 0 );
+
+ bytes_read = read_tftp_file(
+ create_tftpfs_path( tftpfs_server0_name, tftpfs_file ),
+ /* Bytes read per call to read() */
+ TFTP_RFC1350_BLOCK_SIZE,
+ SIZE_MAX,
+ &ctx->fd0
+ );
+ T_assert_eq_int( bytes_read, pos_in_file );
+ T_no_more_interactions();
+}
+
+/*
+ * Read a file from the server using only RFC1350.
+ * The file is one and a half data packet long.
+ * Two data packet are lost (timeout) and the client must repeat the ACK.
+ * Tests:
+ * * The code supports requests without options (RFC1350 only).
+ * * The code supports the use of an IPv4 address instead of a server name.
+ * * The first packet is sent to standard port 69 of server.
+ * * The client uses a short time out for first packets.
+ * * The client uses a longer time out for repeated packets.
+ * * The client repeats the ACK packets which are supposed
+ * to be lost.
+ * * The client does not repeat the ACK packet for the last DATA packet
+ * which signals the end of transfer.
+ * * The test reads a file in chunks of 17 bytes from file system.
+ */
+T_TEST_CASE_FIXTURE( read_small_file_lost_packets, &fixture_rfc1350 )
+{
+ tftp_test_context *ctx = T_fixture_context();
+ int bytes_read;
+ uint16_t block_num = 1;
+ size_t pos_in_file = 0;
+
+ /* T_set_verbosity( T_VERBOSE ); */
+ _Tftp_Add_interaction_socket( AF_INET, SOCK_DGRAM, 0, TFTP_FIRST_FD );
+ _Tftp_Add_interaction_send_rrq(
+ TFTP_FIRST_FD,
+ tftpfs_file,
+ TFTP_STD_PORT,
+ tftpfs_ipv4_loopback,
+ NO_BLOCK_SIZE_OPTION,
+ NO_WINDOW_SIZE_OPTION,
+ true
+ );
+ _Tftp_Add_interaction_recv_data(
+ TFTP_FIRST_FD,
+ FIRST_TIMEOUT_MILLISECONDS,
+ SERV_PORT,
+ tftpfs_ipv4_loopback,
+ block_num,
+ pos_in_file,
+ TFTP_RFC1350_BLOCK_SIZE, /* Number of bytes transferred */
+ get_file_content,
+ true
+ );
+ pos_in_file += TFTP_RFC1350_BLOCK_SIZE;
+ _Tftp_Add_interaction_send_ack(
+ TFTP_FIRST_FD,
+ block_num,
+ SERV_PORT,
+ tftpfs_ipv4_loopback,
+ true
+ );
+ _Tftp_Add_interaction_recv_nothing(
+ TFTP_FIRST_FD, /* Timeout: No packet received within timeout period */
+ FIRST_TIMEOUT_MILLISECONDS
+ );
+ _Tftp_Add_interaction_send_ack(
+ TFTP_FIRST_FD,
+ block_num,
+ SERV_PORT,
+ tftpfs_ipv4_loopback,
+ true
+ );
+ _Tftp_Add_interaction_recv_nothing(
+ TFTP_FIRST_FD, /* Timeout: No packet received within timeout period */
+ TIMEOUT_MILLISECONDS
+ );
+ _Tftp_Add_interaction_send_ack(
+ TFTP_FIRST_FD,
+ block_num++,
+ SERV_PORT,
+ tftpfs_ipv4_loopback,
+ true
+ );
+ _Tftp_Add_interaction_recv_data(
+ TFTP_FIRST_FD,
+ TIMEOUT_MILLISECONDS,
+ SERV_PORT,
+ tftpfs_ipv4_loopback,
+ block_num,
+ pos_in_file,
+ TFTP_RFC1350_BLOCK_SIZE / 2, /* Number of bytes transferred */
+ get_file_content,
+ true
+ );
+ pos_in_file += TFTP_RFC1350_BLOCK_SIZE / 2;
+ _Tftp_Add_interaction_send_ack(
+ TFTP_FIRST_FD,
+ block_num++,
+ SERV_PORT,
+ tftpfs_ipv4_loopback,
+ true
+ );
+ _Tftp_Add_interaction_close( TFTP_FIRST_FD, 0 );
+
+ bytes_read = read_tftp_file(
+ create_tftpfs_path( tftpfs_ipv4_loopback, tftpfs_file ),
+ 17, /* Bytes read per call to read() */
+ SIZE_MAX,
+ &ctx->fd0
+ );
+ T_eq_int( bytes_read, pos_in_file );
+ T_no_more_interactions();
+}
+
+/*
+ * Read a file from the server using only RFC1350.
+ * The file is exactly one data packet long.
+ * The client receives a malformed DATA packet (wrong op code).
+ * Tests:
+ * * The code supports requests without options (RFC1350 only).
+ * * The code supports the use of an IPv4 address instead of a server name.
+ * * The first packet is sent to standard port 69 of server.
+ * * All other packets are sent to the port used for this connection.
+ * * The client uses a short time out for all packets.
+ * * The first data packet is full.
+ * * The client terminates the connection with an error message upon
+ * reception of a malformed packet.
+ */
+T_TEST_CASE_FIXTURE( read_small_file_malformed_packet_1, &fixture_rfc1350 )
+{
+ tftp_test_context *ctx = T_fixture_context();
+ int bytes_read;
+ uint16_t block_num = 1;
+ size_t pos_in_file = 0;
+ static const uint8_t packet_illegal_opcode_1[] = { 0x00, 0xFF, 0x00, 0x00 };
+
+ /* T_set_verbosity( T_VERBOSE ); */
+ _Tftp_Add_interaction_socket( AF_INET, SOCK_DGRAM, 0, TFTP_FIRST_FD );
+ _Tftp_Add_interaction_send_rrq(
+ TFTP_FIRST_FD,
+ tftpfs_file,
+ TFTP_STD_PORT,
+ tftpfs_ipv4_loopback,
+ NO_BLOCK_SIZE_OPTION,
+ NO_WINDOW_SIZE_OPTION,
+ true
+ );
+ _Tftp_Add_interaction_recv_data(
+ TFTP_FIRST_FD,
+ FIRST_TIMEOUT_MILLISECONDS,
+ SERV_PORT,
+ tftpfs_ipv4_loopback,
+ block_num,
+ pos_in_file,
+ TFTP_RFC1350_BLOCK_SIZE, /* Number of bytes transferred */
+ get_file_content,
+ true
+ );
+ pos_in_file += TFTP_RFC1350_BLOCK_SIZE;
+ _Tftp_Add_interaction_send_ack(
+ TFTP_FIRST_FD,
+ block_num,
+ SERV_PORT,
+ tftpfs_ipv4_loopback,
+ true
+ );
+ _Tftp_Add_interaction_recv_raw(
+ TFTP_FIRST_FD,
+ FIRST_TIMEOUT_MILLISECONDS,
+ SERV_PORT,
+ tftpfs_ipv4_loopback,
+ sizeof( packet_illegal_opcode_1 ), /* Malformed DATA packet */
+ packet_illegal_opcode_1,
+ true
+ );
+ _Tftp_Add_interaction_send_error(
+ TFTP_FIRST_FD,
+ TFTP_ERROR_CODE_ILLEGAL,
+ SERV_PORT,
+ tftpfs_ipv4_loopback,
+ true
+ );
+ _Tftp_Add_interaction_close( TFTP_FIRST_FD, 0 );
+
+ bytes_read = read_tftp_file(
+ create_tftpfs_path( tftpfs_ipv4_loopback, tftpfs_file ),
+ TFTP_RFC1350_BLOCK_SIZE / 4, /* Bytes read per call to read() */
+ SIZE_MAX,
+ &ctx->fd0
+ );
+ T_eq_int( bytes_read, pos_in_file );
+ T_eq_int( errno, EPROTO );
+ T_no_more_interactions();
+}
+
+/*
+ * Read a file from the server using only RFC1350.
+ * The file is exactly one data packet long.
+ * The client receives a malformed DATA packet (wrong op code).
+ * Tests:
+ * * The code supports requests without options (RFC1350 only).
+ * * The code supports the use of an IPv4 address instead of a server name.
+ * * The first packet is sent to standard port 69 of server.
+ * * All other packets are sent to the port used for this connection.
+ * * The first data packet is full.
+ * * The second data packet is malformed.
+ * * The client terminates the connection with an error message upon
+ * reception of a malformed packet.
+ */
+T_TEST_CASE_FIXTURE( read_small_file_malformed_packet_2, &fixture_rfc1350 )
+{
+ tftp_test_context *ctx = T_fixture_context();
+ int bytes_read;
+ uint16_t block_num = 1;
+ size_t pos_in_file = 0;
+ static const uint8_t packet_illegal_opcode_2[] = { 0x03, 0x00, 0x00, 0x01 };
+
+ /* T_set_verbosity( T_VERBOSE ); */
+ _Tftp_Add_interaction_socket( AF_INET, SOCK_DGRAM, 0, TFTP_FIRST_FD );
+ _Tftp_Add_interaction_send_rrq(
+ TFTP_FIRST_FD,
+ tftpfs_file,
+ TFTP_STD_PORT,
+ tftpfs_ipv4_loopback,
+ NO_BLOCK_SIZE_OPTION,
+ NO_WINDOW_SIZE_OPTION,
+ true
+ );
+ _Tftp_Add_interaction_recv_data(
+ TFTP_FIRST_FD,
+ FIRST_TIMEOUT_MILLISECONDS,
+ SERV_PORT,
+ tftpfs_ipv4_loopback,
+ block_num,
+ pos_in_file,
+ TFTP_RFC1350_BLOCK_SIZE, /* Number of bytes transferred */
+ get_file_content,
+ true
+ );
+ pos_in_file += TFTP_RFC1350_BLOCK_SIZE;
+ _Tftp_Add_interaction_send_ack(
+ TFTP_FIRST_FD,
+ block_num,
+ SERV_PORT,
+ tftpfs_ipv4_loopback,
+ true
+ );
+ _Tftp_Add_interaction_recv_raw(
+ TFTP_FIRST_FD,
+ FIRST_TIMEOUT_MILLISECONDS,
+ SERV_PORT,
+ tftpfs_ipv4_loopback,
+ sizeof( packet_illegal_opcode_2 ), /* Malformed DATA packet */
+ packet_illegal_opcode_2,
+ true
+ );
+ _Tftp_Add_interaction_send_error(
+ TFTP_FIRST_FD,
+ TFTP_ERROR_CODE_ILLEGAL,
+ SERV_PORT,
+ tftpfs_ipv4_loopback,
+ true
+ );
+ _Tftp_Add_interaction_close( TFTP_FIRST_FD, 0 );
+
+ bytes_read = read_tftp_file(
+ create_tftpfs_path( tftpfs_ipv4_loopback, tftpfs_file ),
+ TFTP_RFC1350_BLOCK_SIZE / 4, /* Bytes read per call to read() */
+ SIZE_MAX,
+ &ctx->fd0
+ );
+ T_eq_int( bytes_read, pos_in_file );
+ T_eq_int( errno, EPROTO );
+ T_no_more_interactions();
+}
+
+/*
+ * Read a file from the server using only RFC1350.
+ * The file is exactly one data packet long.
+ * The client receives a malformed packet.
+ * Tests:
+ * * The code supports requests without options (RFC1350 only).
+ * * The code supports the use of an IPv4 address instead of a server name.
+ * * The first packet is sent to standard port 69 of server.
+ * * All other packets are sent to the port used for this connection.
+ * * The first DATA packet received after the RRQ packet is malformed.
+ * It is too short with only one byte length.
+ * * The client sends an error and terminates the file transfer upon
+ * reception of a malformed packet.
+ */
+T_TEST_CASE_FIXTURE( read_file_malformed_ack_1, &fixture_rfc1350 )
+{
+ tftp_test_context *ctx = T_fixture_context();
+ int bytes_read;
+ size_t pos_in_file = 0;
+ static const uint8_t packet_too_short_1[] = { 0x03 };
+
+ /* T_set_verbosity( T_VERBOSE ); */
+ _Tftp_Add_interaction_socket( AF_INET, SOCK_DGRAM, 0, TFTP_FIRST_FD );
+ _Tftp_Add_interaction_send_rrq(
+ TFTP_FIRST_FD,
+ tftpfs_file,
+ TFTP_STD_PORT,
+ tftpfs_ipv4_loopback,
+ NO_BLOCK_SIZE_OPTION,
+ NO_WINDOW_SIZE_OPTION,
+ true
+ );
+ _Tftp_Add_interaction_recv_raw(
+ TFTP_FIRST_FD,
+ FIRST_TIMEOUT_MILLISECONDS,
+ SERV_PORT,
+ tftpfs_ipv4_loopback,
+ sizeof( packet_too_short_1 ), /* Malformed DATA packet */
+ packet_too_short_1,
+ true
+ );
+ _Tftp_Add_interaction_send_error(
+ TFTP_FIRST_FD,
+ TFTP_ERROR_CODE_ILLEGAL,
+ SERV_PORT,
+ tftpfs_ipv4_loopback,
+ true
+ );
+ _Tftp_Add_interaction_close( TFTP_FIRST_FD, 0 );
+
+ bytes_read = read_tftp_file(
+ create_tftpfs_path( tftpfs_ipv4_loopback, tftpfs_file ),
+ TFTP_RFC1350_BLOCK_SIZE / 4, /* Bytes read per call to read() */
+ SIZE_MAX,
+ &ctx->fd0
+ );
+ T_eq_int( bytes_read, pos_in_file );
+ T_eq_int( errno, EPROTO );
+ T_no_more_interactions();
+}
+
+/*
+ * Read a file from the server using only RFC1350.
+ * The file is exactly one data packet long.
+ * The client receives a malformed packet.
+ * Tests:
+ * * The code supports requests without options (RFC1350 only).
+ * * The code supports the use of an IPv4 address instead of a server name.
+ * * The first packet is sent to standard port 69 of server.
+ * * All other packets are sent to the port used for this connection.
+ * * The first DATA packet received after the RRQ packet is malformed.
+ * It is too short with only two bytes length.
+ * * The client sends an error and terminates the file transfer upon
+ * reception of a malformed packet.
+ */
+T_TEST_CASE_FIXTURE( read_file_malformed_ack_2, &fixture_rfc1350 )
+{
+ tftp_test_context *ctx = T_fixture_context();
+ int bytes_read;
+ size_t pos_in_file = 0;
+ static const uint8_t packet_too_short_2[] = { 0x00, 0x03 };
+
+ /* T_set_verbosity( T_VERBOSE ); */
+ _Tftp_Add_interaction_socket( AF_INET, SOCK_DGRAM, 0, TFTP_FIRST_FD );
+ _Tftp_Add_interaction_send_rrq(
+ TFTP_FIRST_FD,
+ tftpfs_file,
+ TFTP_STD_PORT,
+ tftpfs_ipv4_loopback,
+ NO_BLOCK_SIZE_OPTION,
+ NO_WINDOW_SIZE_OPTION,
+ true
+ );
+ _Tftp_Add_interaction_recv_raw(
+ TFTP_FIRST_FD,
+ FIRST_TIMEOUT_MILLISECONDS,
+ SERV_PORT,
+ tftpfs_ipv4_loopback,
+ sizeof( packet_too_short_2 ), /* Malformed DATA packet */
+ packet_too_short_2,
+ true
+ );
+ _Tftp_Add_interaction_send_error(
+ TFTP_FIRST_FD,
+ TFTP_ERROR_CODE_ILLEGAL,
+ SERV_PORT,
+ tftpfs_ipv4_loopback,
+ true
+ );
+ _Tftp_Add_interaction_close( TFTP_FIRST_FD, 0 );
+
+ bytes_read = read_tftp_file(
+ create_tftpfs_path( tftpfs_ipv4_loopback, tftpfs_file ),
+ TFTP_RFC1350_BLOCK_SIZE / 4, /* Bytes read per call to read() */
+ SIZE_MAX,
+ &ctx->fd0
+ );
+ T_eq_int( bytes_read, pos_in_file );
+ T_eq_int( errno, EPROTO );
+ T_no_more_interactions();
+}
+
+/*
+ * Read a file from the server using only RFC1350.
+ * The file is exactly one data packet long.
+ * The client receives a malformed packet.
+ * Tests:
+ * * The code supports requests without options (RFC1350 only).
+ * * The code supports the use of an IPv4 address instead of a server name.
+ * * The first packet is sent to standard port 69 of server.
+ * * All other packets are sent to the port used for this connection.
+ * * The first DATA packet received after the RRQ packet is malformed.
+ * It is too short with only three bytes length.
+ * * The client sends an error and terminates the file transfer upon
+ * reception of a malformed packet.
+ */
+T_TEST_CASE_FIXTURE( read_file_malformed_ack_3, &fixture_rfc1350 )
+{
+ tftp_test_context *ctx = T_fixture_context();
+ int bytes_read;
+ size_t pos_in_file = 0;
+ static const uint8_t packet_too_short_3[] = { 0x00, 0x03, 0x00 };
+
+ /* T_set_verbosity( T_VERBOSE ); */
+ _Tftp_Add_interaction_socket( AF_INET, SOCK_DGRAM, 0, TFTP_FIRST_FD );
+ _Tftp_Add_interaction_send_rrq(
+ TFTP_FIRST_FD,
+ tftpfs_file,
+ TFTP_STD_PORT,
+ tftpfs_ipv4_loopback,
+ NO_BLOCK_SIZE_OPTION,
+ NO_WINDOW_SIZE_OPTION,
+ true
+ );
+ _Tftp_Add_interaction_recv_raw(
+ TFTP_FIRST_FD,
+ FIRST_TIMEOUT_MILLISECONDS,
+ SERV_PORT,
+ tftpfs_ipv4_loopback,
+ sizeof( packet_too_short_3 ), /* Malformed DATA packet */
+ packet_too_short_3,
+ true
+ );
+ _Tftp_Add_interaction_send_error(
+ TFTP_FIRST_FD,
+ TFTP_ERROR_CODE_ILLEGAL,
+ SERV_PORT,
+ tftpfs_ipv4_loopback,
+ true
+ );
+ _Tftp_Add_interaction_close( TFTP_FIRST_FD, 0 );
+
+ bytes_read = read_tftp_file(
+ create_tftpfs_path( tftpfs_ipv4_loopback, tftpfs_file ),
+ TFTP_RFC1350_BLOCK_SIZE / 4, /* Bytes read per call to read() */
+ SIZE_MAX,
+ &ctx->fd0
+ );
+ T_eq_int( bytes_read, pos_in_file );
+ T_eq_int( errno, EPROTO );
+ T_no_more_interactions();
+}
+
+/*
+ * Read a file from the server using only RFC1350.
+ * The file is exactly one data packet long.
+ * The client receives a data packet with block number 0.
+ * Tests:
+ * * The code supports requests without options (RFC1350 only).
+ * * The code supports the use of an IPv4 address instead of a server name.
+ * * The first packet is sent to standard port 69 of server.
+ * * All other packets are sent to the port used for this connection.
+ * * The first DATA packet received after the RRQ packet is malformed.
+ * It has block number 0.
+ * * The client sends an error and terminates the file transfer upon
+ * reception of a malformed packet.
+ */
+T_TEST_CASE_FIXTURE( read_file_block_number_0, &fixture_rfc1350 )
+{
+ tftp_test_context *ctx = T_fixture_context();
+ int bytes_read;
+ size_t pos_in_file = 0;
+
+ /* T_set_verbosity( T_VERBOSE ); */
+ _Tftp_Add_interaction_socket( AF_INET, SOCK_DGRAM, 0, TFTP_FIRST_FD );
+ _Tftp_Add_interaction_send_rrq(
+ TFTP_FIRST_FD,
+ tftpfs_file,
+ TFTP_STD_PORT,
+ tftpfs_ipv4_loopback,
+ NO_BLOCK_SIZE_OPTION,
+ NO_WINDOW_SIZE_OPTION,
+ true
+ );
+ _Tftp_Add_interaction_recv_data(
+ TFTP_FIRST_FD,
+ FIRST_TIMEOUT_MILLISECONDS,
+ SERV_PORT,
+ tftpfs_ipv4_loopback,
+ 0, /* Wrong block number 0 */
+ pos_in_file,
+ TFTP_RFC1350_BLOCK_SIZE, /* Number of bytes transferred */
+ get_file_content,
+ true
+ );
+ _Tftp_Add_interaction_send_error(
+ TFTP_FIRST_FD,
+ TFTP_ERROR_CODE_ILLEGAL,
+ SERV_PORT,
+ tftpfs_ipv4_loopback,
+ true
+ );
+ _Tftp_Add_interaction_close( TFTP_FIRST_FD, 0 );
+
+ bytes_read = read_tftp_file(
+ create_tftpfs_path( tftpfs_ipv4_loopback, tftpfs_file ),
+ TFTP_RFC1350_BLOCK_SIZE / 4, /* Bytes read per call to read() */
+ SIZE_MAX,
+ &ctx->fd0
+ );
+ T_eq_int( bytes_read, pos_in_file );
+ T_eq_int( errno, EPROTO );
+ T_no_more_interactions();
+}
+
+/*
+ * Read a file from the server using only RFC1350.
+ * The file is exactly one data packet long.
+ * The client receives a malformed packet.
+ * Tests:
+ * * The code supports requests without options (RFC1350 only).
+ * * The code supports the use of an IPv4 address instead of a server name.
+ * * The first packet is sent to standard port 69 of server.
+ * * All other packets are sent to the port used for this connection.
+ * * The first DATA packet received after the RRQ packet is malformed.
+ * The packet contains an illegal op code.
+ * * The client sends an error and terminates the file transfer upon
+ * reception of a malformed packet.
+ */
+T_TEST_CASE_FIXTURE( read_file_illegal_opcode_1, &fixture_rfc1350 )
+{
+ tftp_test_context *ctx = T_fixture_context();
+ int bytes_read;
+ size_t pos_in_file = 0;
+ static const uint8_t packet_illegal_opcode_1[] = { 0x00, 0xFF, 0x00, 0x00 };
+
+ /* T_set_verbosity( T_VERBOSE ); */
+ _Tftp_Add_interaction_socket( AF_INET, SOCK_DGRAM, 0, TFTP_FIRST_FD );
+ _Tftp_Add_interaction_send_rrq(
+ TFTP_FIRST_FD,
+ tftpfs_file,
+ TFTP_STD_PORT,
+ tftpfs_ipv4_loopback,
+ NO_BLOCK_SIZE_OPTION,
+ NO_WINDOW_SIZE_OPTION,
+ true
+ );
+ _Tftp_Add_interaction_recv_raw(
+ TFTP_FIRST_FD,
+ FIRST_TIMEOUT_MILLISECONDS,
+ SERV_PORT,
+ tftpfs_ipv4_loopback,
+ sizeof( packet_illegal_opcode_1 ), /* Malformed DATA packet */
+ packet_illegal_opcode_1,
+ true
+ );
+ _Tftp_Add_interaction_send_error(
+ TFTP_FIRST_FD,
+ TFTP_ERROR_CODE_ILLEGAL,
+ SERV_PORT,
+ tftpfs_ipv4_loopback,
+ true
+ );
+ _Tftp_Add_interaction_close( TFTP_FIRST_FD, 0 );
+
+ bytes_read = read_tftp_file(
+ create_tftpfs_path( tftpfs_ipv4_loopback, tftpfs_file ),
+ TFTP_RFC1350_BLOCK_SIZE / 4, /* Bytes read per call to read() */
+ SIZE_MAX,
+ &ctx->fd0
+ );
+ T_eq_int( bytes_read, pos_in_file );
+ T_eq_int( errno, EPROTO );
+ T_no_more_interactions();
+}
+
+/*
+ * Read a file from the server using only RFC1350.
+ * The file is exactly two data packet long.
+ * The client receives DATA packets with wrong block numbers.
+ * Tests:
+ * * The code supports requests without options (RFC1350 only).
+ * * The code supports the use of an IPv4 address instead of a server name.
+ * * The first packet is sent to standard port 69 of server.
+ * * The second RRQ is sent to the TFTP server port 69 and not to the
+ * port from which the first packet with the wrong block number came from.
+ * * The client uses a short time out for all packets.
+ * * The client uses a longer time out for repeated packets.
+ * * The client handles DATA packets with the wrong block numbers
+ * appropriately.
+ * * The third data packet is empty and signals the end of the transfer.
+ * * Old data packets are ignored (i.e. do not cause a retransmission).
+ * * Duplicates of the last data packet cause a retransmission of the
+ * last ACK.
+ * * The first data packet with a block number larger than the expected one,
+ * cause a retransmission of ACK or RRQ. (They can appear together
+ * with the windowsize option.)
+ * * The test reads a file from the file system in one big chunk with is larger
+ * than the files size.
+ */
+T_TEST_CASE_FIXTURE( read_two_block_file_wrong_block_numbers, &fixture_rfc1350 )
+{
+ tftp_test_context *ctx = T_fixture_context();
+ int bytes_read;
+ uint16_t block_num = 1;
+ size_t pos_in_file = 0;
+
+ /* T_set_verbosity( T_VERBOSE ); */
+ _Tftp_Add_interaction_socket( AF_INET, SOCK_DGRAM, 0, TFTP_FIRST_FD );
+ _Tftp_Add_interaction_send_rrq(
+ TFTP_FIRST_FD,
+ tftpfs_file,
+ TFTP_STD_PORT,
+ tftpfs_ipv4_loopback,
+ NO_BLOCK_SIZE_OPTION,
+ NO_WINDOW_SIZE_OPTION,
+ true
+ );
+ _Tftp_Add_interaction_recv_data(
+ TFTP_FIRST_FD,
+ FIRST_TIMEOUT_MILLISECONDS,
+ SERV_PORT,
+ tftpfs_ipv4_loopback,
+ block_num + 1, /* Wrong block number */
+ pos_in_file,
+ TFTP_RFC1350_BLOCK_SIZE, /* Number of bytes transferred */
+ get_file_content,
+ true
+ );
+ _Tftp_Add_interaction_send_rrq(
+ TFTP_FIRST_FD,
+ tftpfs_file,
+ TFTP_STD_PORT,
+ tftpfs_ipv4_loopback,
+ NO_BLOCK_SIZE_OPTION,
+ NO_WINDOW_SIZE_OPTION,
+ true
+ );
+ _Tftp_Add_interaction_recv_data(
+ TFTP_FIRST_FD,
+ FIRST_TIMEOUT_MILLISECONDS,
+ SERV_PORT,
+ tftpfs_ipv4_loopback,
+ block_num + 1, /* Wrong block number */
+ pos_in_file,
+ TFTP_RFC1350_BLOCK_SIZE, /* Number of bytes transferred */
+ get_file_content,
+ true
+ );
+ _Tftp_Add_interaction_recv_data(
+ TFTP_FIRST_FD,
+ FIRST_TIMEOUT_MILLISECONDS,
+ SERV_PORT,
+ tftpfs_ipv4_loopback,
+ block_num,
+ pos_in_file,
+ TFTP_RFC1350_BLOCK_SIZE, /* Number of bytes transferred */
+ get_file_content,
+ true
+ );
+ pos_in_file += TFTP_RFC1350_BLOCK_SIZE;
+ _Tftp_Add_interaction_send_ack(
+ TFTP_FIRST_FD,
+ block_num++,
+ SERV_PORT,
+ tftpfs_ipv4_loopback,
+ true
+ );
+ _Tftp_Add_interaction_recv_data(
+ TFTP_FIRST_FD,
+ FIRST_TIMEOUT_MILLISECONDS,
+ SERV_PORT,
+ tftpfs_ipv4_loopback,
+ block_num - 1, /* Wrong block number / duplicates last packet */
+ pos_in_file,
+ TFTP_RFC1350_BLOCK_SIZE, /* Number of bytes transferred */
+ get_file_content,
+ true
+ );
+ _Tftp_Add_interaction_send_ack(
+ TFTP_FIRST_FD,
+ block_num - 1, /* Client assumes last ACK got lost and retransmits it. */
+ SERV_PORT,
+ tftpfs_ipv4_loopback,
+ true
+ );
+ _Tftp_Add_interaction_recv_data(
+ TFTP_FIRST_FD,
+ FIRST_TIMEOUT_MILLISECONDS,
+ SERV_PORT,
+ tftpfs_ipv4_loopback,
+ block_num + 1, /* Wrong block number */
+ pos_in_file,
+ TFTP_RFC1350_BLOCK_SIZE, /* Number of bytes transferred */
+ get_file_content,
+ true
+ );
+ _Tftp_Add_interaction_send_ack(
+ TFTP_FIRST_FD,
+ block_num - 1, /* Client assumes last ACK got lost and retransmits it. */
+ SERV_PORT,
+ tftpfs_ipv4_loopback,
+ true
+ );
+ _Tftp_Add_interaction_recv_data(
+ TFTP_FIRST_FD,
+ FIRST_TIMEOUT_MILLISECONDS,
+ SERV_PORT,
+ tftpfs_ipv4_loopback,
+ block_num + 1, /* Wrong block number */
+ pos_in_file,
+ TFTP_RFC1350_BLOCK_SIZE, /* Number of bytes transferred */
+ get_file_content,
+ true
+ );
+ _Tftp_Add_interaction_recv_data(
+ TFTP_FIRST_FD,
+ FIRST_TIMEOUT_MILLISECONDS,
+ SERV_PORT,
+ tftpfs_ipv4_loopback,
+ block_num,
+ pos_in_file,
+ TFTP_RFC1350_BLOCK_SIZE, /* Number of bytes transferred */
+ get_file_content,
+ true
+ );
+ pos_in_file += TFTP_RFC1350_BLOCK_SIZE;
+ _Tftp_Add_interaction_send_ack(
+ TFTP_FIRST_FD,
+ block_num++,
+ SERV_PORT,
+ tftpfs_ipv4_loopback,
+ true
+ );
+ _Tftp_Add_interaction_recv_data(
+ TFTP_FIRST_FD,
+ FIRST_TIMEOUT_MILLISECONDS,
+ SERV_PORT,
+ tftpfs_ipv4_loopback,
+ block_num - 2, /* Wrong block number */
+ pos_in_file,
+ TFTP_RFC1350_BLOCK_SIZE, /* Number of bytes transferred */
+ get_file_content,
+ true
+ );
+ _Tftp_Add_interaction_recv_data(
+ TFTP_FIRST_FD,
+ FIRST_TIMEOUT_MILLISECONDS,
+ SERV_PORT,
+ tftpfs_ipv4_loopback,
+ block_num + 1, /* Wrong block number */
+ pos_in_file,
+ TFTP_RFC1350_BLOCK_SIZE, /* Number of bytes transferred */
+ get_file_content,
+ true
+ );
+ _Tftp_Add_interaction_send_ack(
+ TFTP_FIRST_FD,
+ block_num - 1, /* Client assumes last ACK got lost and retransmits it. */
+ SERV_PORT,
+ tftpfs_ipv4_loopback,
+ true
+ );
+ _Tftp_Add_interaction_recv_data(
+ TFTP_FIRST_FD,
+ FIRST_TIMEOUT_MILLISECONDS,
+ SERV_PORT,
+ tftpfs_ipv4_loopback,
+ block_num,
+ pos_in_file,
+ 0, /* Number of bytes transferred */
+ get_file_content,
+ true
+ );
+ _Tftp_Add_interaction_send_ack(
+ TFTP_FIRST_FD,
+ block_num++,
+ SERV_PORT,
+ tftpfs_ipv4_loopback,
+ true
+ );
+ _Tftp_Add_interaction_close( TFTP_FIRST_FD, 0 );
+
+ bytes_read = read_tftp_file(
+ create_tftpfs_path( tftpfs_ipv4_loopback, tftpfs_file ),
+ /* Bytes read per call to read() */
+ 3 * TFTP_RFC1350_BLOCK_SIZE,
+ SIZE_MAX,
+ &ctx->fd0
+ );
+ T_eq_int( bytes_read, pos_in_file );
+ T_no_more_interactions();
+}
+
+/*
+ * Attempt to read a file from the server using filename without ':'.
+ * Tests:
+ * * The TFTP FS rejects malformed file names (i.e. it does not crash).
+ */
+T_TEST_CASE_FIXTURE( read_malformed_filename, &fixture_rfc1350 )
+{
+ tftp_test_context *ctx = T_fixture_context();
+ int bytes_read;
+ char buffer[100];
+ int len;
+
+ len = snprintf(
+ buffer,
+ sizeof( buffer ),
+ "%s/%s",
+ tftpfs_mount_point,
+ tftpfs_server0_name
+ );
+
+ T_quiet_gt_int( len, 0 );
+ T_quiet_lt_int( len, (int) sizeof( buffer ) );
+
+ bytes_read = read_tftp_file(
+ buffer,
+ /* Bytes read per call to read() */
+ TFTP_RFC1350_BLOCK_SIZE,
+ SIZE_MAX,
+ &ctx->fd0
+ );
+ T_assert_eq_int( bytes_read, 0 );
+ T_assert_eq_int( errno, EINVAL );
+}
+
+/*
+ * Attempt to read a file from a none exiting server address.
+ * Tests:
+ * * TFTP FS returns an error if the server name cannot be resolved.
+ */
+T_TEST_CASE_FIXTURE( read_from_unknown_ip_address, &fixture_rfc1350 )
+{
+ tftp_test_context *ctx = T_fixture_context();
+ int bytes_read;
+
+ bytes_read = read_tftp_file(
+ create_tftpfs_path( "not-existing-server-address", tftpfs_file ),
+ /* Bytes read per call to read() */
+ TFTP_RFC1350_BLOCK_SIZE,
+ SIZE_MAX,
+ &ctx->fd0
+ );
+ T_assert_eq_int( bytes_read, 0 );
+ T_assert_eq_int( errno, ENOENT );
+}
+
+/*
+ * Attempt to read a file which the server does not know
+ * No timeouts, packet loss, ...
+ * Tests:
+ * * The code supports requests without options (RFC1350 only).
+ * * The code supports the use of a server name instead of an IP address.
+ * * The client handles an ERROR packet received upon sending an RRQ
+ * correctly.
+ * * TFTP FS returns an error upon the reception of the ERROR packet.
+ */
+T_TEST_CASE_FIXTURE( read_not_existing_file, &fixture_rfc1350 )
+{
+ tftp_test_context *ctx = T_fixture_context();
+ int bytes_read;
+
+ /* T_set_verbosity( T_VERBOSE ); */
+ _Tftp_Add_interaction_socket( AF_INET, SOCK_DGRAM, 0, TFTP_FIRST_FD );
+ _Tftp_Add_interaction_send_rrq(
+ TFTP_FIRST_FD,
+ tftpfs_file,
+ TFTP_STD_PORT,
+ tftpfs_server0_ipv4,
+ NO_BLOCK_SIZE_OPTION,
+ NO_WINDOW_SIZE_OPTION,
+ true
+ );
+ _Tftp_Add_interaction_recv_error(
+ TFTP_FIRST_FD,
+ FIRST_TIMEOUT_MILLISECONDS,
+ SERV_PORT,
+ tftpfs_server0_ipv4,
+ TFTP_ERROR_CODE_NOT_FOUND,
+ "No such file",
+ true
+ );
+ _Tftp_Add_interaction_close( TFTP_FIRST_FD, 0 );
+
+ bytes_read = read_tftp_file(
+ create_tftpfs_path( tftpfs_server0_name, tftpfs_file ),
+ /* Bytes read per call to read() */
+ TFTP_RFC1350_BLOCK_SIZE,
+ SIZE_MAX,
+ &ctx->fd0
+ );
+ T_assert_eq_int( bytes_read, 0 );
+ T_assert_eq_int( errno, ENOENT );
+ T_no_more_interactions();
+}
+
+/*
+ * Write an empty file to the server using only RFC1350.
+ * The first two WRQ as well as the first two DATA packets are lost.
+ * Tests:
+ * * The code supports requests without options (RFC1350 only).
+ * * The code supports the use of a server name instead of an IP address.
+ * * The all WRQ are sent to standard port 69 of server.
+ * * All other packets are sent to the port used for this connection.
+ * * The client uses a short time out for first packets.
+ * * The client uses a longer time out for repeated packets.
+ * * The client repeats the WRQs and DATA packets which are supposed
+ * to be lost.
+ * * When a timeout occurs, the client repeats the last and empty packet.
+ * * The first data packet is empty and signals the end of the transfer.
+ * * The test writes a file with 0 bytes content to the file system.
+ */
+T_TEST_CASE_FIXTURE( write_empty_file_packet_losts, &fixture_rfc1350 )
+{
+ tftp_test_context *ctx = T_fixture_context();
+ int bytes_written;
+ uint16_t block_num = 0;
+ size_t pos_in_file = 0;
+
+ /* T_set_verbosity( T_VERBOSE ); */
+ _Tftp_Add_interaction_socket( AF_INET, SOCK_DGRAM, 0, TFTP_FIRST_FD );
+ _Tftp_Add_interaction_send_wrq(
+ TFTP_FIRST_FD,
+ tftpfs_file,
+ TFTP_STD_PORT,
+ tftpfs_server0_ipv4,
+ NO_BLOCK_SIZE_OPTION,
+ NO_WINDOW_SIZE_OPTION,
+ true
+ );
+ _Tftp_Add_interaction_recv_nothing(
+ TFTP_FIRST_FD, /* Timeout: No packet received within timeout period */
+ FIRST_TIMEOUT_MILLISECONDS
+ );
+ _Tftp_Add_interaction_send_wrq(
+ TFTP_FIRST_FD,
+ tftpfs_file,
+ TFTP_STD_PORT,
+ tftpfs_server0_ipv4,
+ NO_BLOCK_SIZE_OPTION,
+ NO_WINDOW_SIZE_OPTION,
+ true
+ );
+ _Tftp_Add_interaction_recv_nothing(
+ TFTP_FIRST_FD, /* Timeout: No packet received within timeout period */
+ TIMEOUT_MILLISECONDS
+ );
+ _Tftp_Add_interaction_send_wrq(
+ TFTP_FIRST_FD,
+ tftpfs_file,
+ TFTP_STD_PORT,
+ tftpfs_server0_ipv4,
+ NO_BLOCK_SIZE_OPTION,
+ NO_WINDOW_SIZE_OPTION,
+ true
+ );
+ _Tftp_Add_interaction_recv_ack(
+ TFTP_FIRST_FD,
+ TIMEOUT_MILLISECONDS,
+ SERV_PORT,
+ tftpfs_server0_ipv4,
+ block_num++,
+ true
+ );
+ _Tftp_Add_interaction_send_data(
+ TFTP_FIRST_FD,
+ block_num,
+ pos_in_file,
+ 0, /* Number of bytes transferred */
+ get_file_content,
+ SERV_PORT,
+ tftpfs_server0_ipv4,
+ true
+ );
+ _Tftp_Add_interaction_recv_nothing(
+ TFTP_FIRST_FD, /* Timeout: No packet received within timeout period */
+ FIRST_TIMEOUT_MILLISECONDS
+ );
+ _Tftp_Add_interaction_send_data(
+ TFTP_FIRST_FD,
+ block_num,
+ pos_in_file,
+ 0, /* Number of bytes transferred */
+ get_file_content,
+ SERV_PORT,
+ tftpfs_server0_ipv4,
+ true
+ );
+ _Tftp_Add_interaction_recv_nothing(
+ TFTP_FIRST_FD, /* Timeout: No packet received within timeout period */
+ TIMEOUT_MILLISECONDS
+ );
+ _Tftp_Add_interaction_send_data(
+ TFTP_FIRST_FD,
+ block_num,
+ pos_in_file,
+ 0, /* Number of bytes transferred */
+ get_file_content,
+ SERV_PORT,
+ tftpfs_server0_ipv4,
+ true
+ );
+ _Tftp_Add_interaction_recv_ack(
+ TFTP_FIRST_FD,
+ TIMEOUT_MILLISECONDS,
+ SERV_PORT,
+ tftpfs_server0_ipv4,
+ block_num++,
+ true
+ );
+ _Tftp_Add_interaction_close( TFTP_FIRST_FD, 0 );
+
+ bytes_written = write_tftp_file(
+ create_tftpfs_path( tftpfs_server0_name, tftpfs_file ),
+ 0, /* Size of file */
+ 4, /* Bytes written per call to write() */
+ &ctx->fd0
+ );
+ T_eq_int( bytes_written, pos_in_file );
+ T_no_more_interactions();
+}
+
+/*
+ * Write a very short file to the server using only RFC1350.
+ * The file is one and half data packets long.
+ * The first two DATA packets and one ACK packet are lost.
+ * Tests:
+ * * The code supports requests without options (RFC1350 only).
+ * * The code supports the use of a server name instead of an IP address.
+ * * The first packet is sent to standard port 69 of server.
+ * * All other packets are sent to the port used for this connection.
+ * * The client uses a short time out for first packets.
+ * * The client uses a longer time out for repeated packets.
+ * * The client repeats sending DATA packets which are supposed
+ * to be lost.
+ * * The client also repeats the last DATA packet when it is supposed
+ * to be lost.
+ * * The client repeats sending DATA packets when an ACK packet is repeated
+ * (presumably the DATA packet has been lost).
+ * * The test writes a file to the file system in chunks of a quarter of the block size.
+ */
+T_TEST_CASE_FIXTURE( write_tiny_file_packet_losts, &fixture_rfc1350 )
+{
+ tftp_test_context *ctx = T_fixture_context();
+ int bytes_written;
+ uint16_t block_num = 0;
+ size_t pos_in_file = 0;
+
+ /* T_set_verbosity( T_VERBOSE ); */
+ _Tftp_Add_interaction_socket( AF_INET, SOCK_DGRAM, 0, TFTP_FIRST_FD );
+ _Tftp_Add_interaction_send_wrq(
+ TFTP_FIRST_FD,
+ tftpfs_file,
+ TFTP_STD_PORT,
+ tftpfs_server0_ipv4,
+ NO_BLOCK_SIZE_OPTION,
+ NO_WINDOW_SIZE_OPTION,
+ true
+ );
+ _Tftp_Add_interaction_recv_ack(
+ TFTP_FIRST_FD,
+ FIRST_TIMEOUT_MILLISECONDS,
+ SERV_PORT,
+ tftpfs_server0_ipv4,
+ block_num++,
+ true
+ );
+ _Tftp_Add_interaction_send_data(
+ TFTP_FIRST_FD,
+ block_num,
+ pos_in_file,
+ TFTP_RFC1350_BLOCK_SIZE,
+ get_file_content,
+ SERV_PORT,
+ tftpfs_server0_ipv4,
+ true
+ );
+ _Tftp_Add_interaction_recv_nothing(
+ TFTP_FIRST_FD, /* Timeout: No packet received within timeout period */
+ FIRST_TIMEOUT_MILLISECONDS
+ );
+ _Tftp_Add_interaction_send_data(
+ TFTP_FIRST_FD,
+ block_num,
+ pos_in_file,
+ TFTP_RFC1350_BLOCK_SIZE,
+ get_file_content,
+ SERV_PORT,
+ tftpfs_server0_ipv4,
+ true
+ );
+ _Tftp_Add_interaction_recv_nothing(
+ TFTP_FIRST_FD, /* Timeout: No packet received within timeout period */
+ TIMEOUT_MILLISECONDS
+ );
+ _Tftp_Add_interaction_send_data(
+ TFTP_FIRST_FD,
+ block_num,
+ pos_in_file,
+ TFTP_RFC1350_BLOCK_SIZE,
+ get_file_content,
+ SERV_PORT,
+ tftpfs_server0_ipv4,
+ true
+ );
+ _Tftp_Add_interaction_recv_ack(
+ TFTP_FIRST_FD,
+ TIMEOUT_MILLISECONDS,
+ SERV_PORT,
+ tftpfs_server0_ipv4,
+ block_num++,
+ true
+ );
+ pos_in_file += TFTP_RFC1350_BLOCK_SIZE;
+ _Tftp_Add_interaction_send_data(
+ TFTP_FIRST_FD,
+ block_num,
+ pos_in_file,
+ TFTP_RFC1350_BLOCK_SIZE / 2,
+ get_file_content,
+ SERV_PORT,
+ tftpfs_server0_ipv4,
+ true
+ );
+ _Tftp_Add_interaction_recv_ack(
+ TFTP_FIRST_FD,
+ FIRST_TIMEOUT_MILLISECONDS,
+ SERV_PORT,
+ tftpfs_server0_ipv4,
+ block_num - 1, /* Repeated ACK packet received */
+ true
+ );
+ _Tftp_Add_interaction_send_data(
+ TFTP_FIRST_FD,
+ block_num,
+ pos_in_file,
+ TFTP_RFC1350_BLOCK_SIZE / 2,
+ get_file_content,
+ SERV_PORT,
+ tftpfs_server0_ipv4,
+ true
+ );
+ pos_in_file += TFTP_RFC1350_BLOCK_SIZE / 2;
+ _Tftp_Add_interaction_recv_ack(
+ TFTP_FIRST_FD,
+ FIRST_TIMEOUT_MILLISECONDS,
+ SERV_PORT,
+ tftpfs_server0_ipv4,
+ block_num++,
+ true
+ );
+ _Tftp_Add_interaction_close( TFTP_FIRST_FD, 0 );
+
+ bytes_written = write_tftp_file(
+ create_tftpfs_path( tftpfs_server0_name, tftpfs_file ),
+ TFTP_RFC1350_BLOCK_SIZE / 2 * 3, /* Size of file */
+ TFTP_RFC1350_BLOCK_SIZE / 4, /* Bytes written per call to write() */
+ &ctx->fd0
+ );
+ T_eq_int( bytes_written, pos_in_file );
+ T_no_more_interactions();
+}
+
+/*
+ * Write a file to the server using only RFC1350.
+ * The file is 2 data packet and 1 byte long. No timeouts, packet loss, ...
+ * Tests:
+ * * The code supports requests without options (RFC1350 only).
+ * * The code supports the use of an IPv4 address instead of a server name.
+ * * The first packet is sent to standard port 69 of server.
+ * * All other packets are sent to the port used for this connection.
+ * * First and second data packet is full.
+ * * Third data packet signals the end of transfer.
+ * * The test writes a file to the file system in one big chunk
+ * of exactly the files size.
+ */
+T_TEST_CASE_FIXTURE( write_simple_file, &fixture_rfc1350 )
+{
+ tftp_test_context *ctx = T_fixture_context();
+ int bytes_written;
+ uint16_t block_num = 0;
+ size_t pos_in_file = 0;
+
+ /* T_set_verbosity( T_VERBOSE ); */
+ _Tftp_Add_interaction_socket( AF_INET, SOCK_DGRAM, 0, TFTP_FIRST_FD );
+ _Tftp_Add_interaction_send_wrq(
+ TFTP_FIRST_FD,
+ tftpfs_file,
+ TFTP_STD_PORT,
+ tftpfs_ipv4_loopback,
+ NO_BLOCK_SIZE_OPTION,
+ NO_WINDOW_SIZE_OPTION,
+ true
+ );
+ _Tftp_Add_interaction_recv_ack(
+ TFTP_FIRST_FD,
+ FIRST_TIMEOUT_MILLISECONDS,
+ SERV_PORT,
+ tftpfs_ipv4_loopback,
+ block_num++,
+ true
+ );
+ _Tftp_Add_interaction_send_data(
+ TFTP_FIRST_FD,
+ block_num,
+ pos_in_file,
+ TFTP_RFC1350_BLOCK_SIZE,
+ get_file_content,
+ SERV_PORT,
+ tftpfs_ipv4_loopback,
+ true
+ );
+ pos_in_file += TFTP_RFC1350_BLOCK_SIZE;
+ _Tftp_Add_interaction_recv_ack(
+ TFTP_FIRST_FD,
+ FIRST_TIMEOUT_MILLISECONDS,
+ SERV_PORT,
+ tftpfs_ipv4_loopback,
+ block_num++,
+ true
+ );
+ _Tftp_Add_interaction_send_data(
+ TFTP_FIRST_FD,
+ block_num,
+ pos_in_file,
+ TFTP_RFC1350_BLOCK_SIZE,
+ get_file_content,
+ SERV_PORT,
+ tftpfs_ipv4_loopback,
+ true
+ );
+ pos_in_file += TFTP_RFC1350_BLOCK_SIZE;
+ _Tftp_Add_interaction_recv_ack(
+ TFTP_FIRST_FD,
+ FIRST_TIMEOUT_MILLISECONDS,
+ SERV_PORT,
+ tftpfs_ipv4_loopback,
+ block_num++,
+ true
+ );
+ _Tftp_Add_interaction_send_data(
+ TFTP_FIRST_FD,
+ block_num,
+ pos_in_file,
+ 1, /* Data bytes in this block */
+ get_file_content,
+ SERV_PORT,
+ tftpfs_ipv4_loopback,
+ true
+ );
+ pos_in_file += 1;
+ _Tftp_Add_interaction_recv_ack(
+ TFTP_FIRST_FD,
+ FIRST_TIMEOUT_MILLISECONDS,
+ SERV_PORT,
+ tftpfs_ipv4_loopback,
+ block_num++,
+ true
+ );
+ _Tftp_Add_interaction_close( TFTP_FIRST_FD, 0 );
+
+ bytes_written = write_tftp_file(
+ create_tftpfs_path( tftpfs_ipv4_loopback, tftpfs_file ),
+ pos_in_file, /* Size of file */
+ pos_in_file, /* Bytes written per call to write() */
+ &ctx->fd0
+ );
+ T_eq_int( bytes_written, pos_in_file );
+ T_no_more_interactions();
+}
+
+/*
+ * Write a file to the server using only RFC1350.
+ * As response to the first DATA packet, the server sends an error packet.
+ * Tests:
+ * * The code supports requests without options (RFC1350 only).
+ * * The code supports the use of an IPv4 address instead of a server name.
+ * * The first packet is sent to standard port 69 of server.
+ * * All other packets are sent to the port used for this connection.
+ * * The first data packet is full.
+ * * The second packet from the server is an error packet.
+ * * The TFTP client ends the connection after receiving an error packet.
+ * * The test writes a file to the file system with a call to write()
+ * for each byte.
+ */
+T_TEST_CASE_FIXTURE( write_simple_file_disk_full, &fixture_rfc1350 )
+{
+ tftp_test_context *ctx = T_fixture_context();
+ int bytes_written;
+ uint16_t block_num = 0;
+ size_t pos_in_file = 0;
+
+ /* T_set_verbosity( T_VERBOSE ); */
+ _Tftp_Add_interaction_socket( AF_INET, SOCK_DGRAM, 0, TFTP_FIRST_FD );
+ _Tftp_Add_interaction_send_wrq(
+ TFTP_FIRST_FD,
+ tftpfs_file,
+ TFTP_STD_PORT,
+ tftpfs_ipv4_loopback,
+ NO_BLOCK_SIZE_OPTION,
+ NO_WINDOW_SIZE_OPTION,
+ true
+ );
+ _Tftp_Add_interaction_recv_ack(
+ TFTP_FIRST_FD,
+ FIRST_TIMEOUT_MILLISECONDS,
+ SERV_PORT,
+ tftpfs_ipv4_loopback,
+ block_num++,
+ true
+ );
+ _Tftp_Add_interaction_send_data(
+ TFTP_FIRST_FD,
+ block_num,
+ pos_in_file,
+ TFTP_RFC1350_BLOCK_SIZE,
+ get_file_content,
+ SERV_PORT,
+ tftpfs_ipv4_loopback,
+ true
+ );
+ pos_in_file += TFTP_RFC1350_BLOCK_SIZE;
+ _Tftp_Add_interaction_recv_error(
+ TFTP_FIRST_FD,
+ FIRST_TIMEOUT_MILLISECONDS,
+ SERV_PORT,
+ tftpfs_ipv4_loopback,
+ TFTP_ERROR_CODE_DISK_FULL,
+ "disk full",
+ true
+ );
+ _Tftp_Add_interaction_close( TFTP_FIRST_FD, 0 );
+
+ bytes_written = write_tftp_file(
+ create_tftpfs_path( tftpfs_ipv4_loopback, tftpfs_file ),
+ pos_in_file, /* Size of file */
+ 1, /* Bytes written per call to write() */
+ &ctx->fd0
+ );
+ T_eq_int( errno, ENOSPC );
+ T_eq_int( bytes_written, pos_in_file - 1 );
+ T_no_more_interactions();
+}
+
+/*
+ * Write a file to the server using only RFC1350.
+ * The file is one and a half data packet long.
+ * The server sends a malformed packet.
+ * Tests:
+ * * The code supports requests without options (RFC1350 only).
+ * * The code supports the use of an IPv4 address instead of a server name.
+ * * The first packet is sent to standard port 69 of server.
+ * * All other packets are sent to the port used for this connection.
+ * * The first ACK to the WRQ packet is malformed.
+ * It is only one byte long.
+ * * The client sends an error upon the reception of a malformed packet
+ * and terminates the file transfer.
+ */
+T_TEST_CASE_FIXTURE( write_file_malformed_ack_1, &fixture_rfc1350 )
+{
+ tftp_test_context *ctx = T_fixture_context();
+ int bytes_written;
+ size_t pos_in_file = 0;
+ static const uint8_t packet_too_short_1[] = { 0x04 };
+
+ /* T_set_verbosity( T_VERBOSE ); */
+ _Tftp_Add_interaction_socket( AF_INET, SOCK_DGRAM, 0, TFTP_FIRST_FD );
+ _Tftp_Add_interaction_send_wrq(
+ TFTP_FIRST_FD,
+ tftpfs_file,
+ TFTP_STD_PORT,
+ tftpfs_ipv4_loopback,
+ NO_BLOCK_SIZE_OPTION,
+ NO_WINDOW_SIZE_OPTION,
+ true
+ );
+ _Tftp_Add_interaction_recv_raw(
+ TFTP_FIRST_FD,
+ FIRST_TIMEOUT_MILLISECONDS,
+ SERV_PORT,
+ tftpfs_ipv4_loopback,
+ sizeof( packet_too_short_1 ), /* Malformed ACK packet */
+ packet_too_short_1,
+ true
+ );
+ _Tftp_Add_interaction_send_error(
+ TFTP_FIRST_FD,
+ TFTP_ERROR_CODE_ILLEGAL,
+ SERV_PORT,
+ tftpfs_ipv4_loopback,
+ true
+ );
+ _Tftp_Add_interaction_close( TFTP_FIRST_FD, 0 );
+
+ bytes_written = write_tftp_file(
+ create_tftpfs_path( tftpfs_ipv4_loopback, tftpfs_file ),
+ pos_in_file, /* Size of file */
+ 17, /* Bytes written per call to write() */
+ &ctx->fd0
+ );
+ T_eq_int( bytes_written, -1 );
+ T_eq_int( errno, EPROTO );
+ T_no_more_interactions();
+}
+
+/*
+ * Write a file to the server using only RFC1350.
+ * The file is one and a half data packet long.
+ * The server sends a malformed packet.
+ * Tests:
+ * * The code supports requests without options (RFC1350 only).
+ * * The code supports the use of an IPv4 address instead of a server name.
+ * * The first packet is sent to standard port 69 of server.
+ * * All other packets are sent to the port used for this connection.
+ * * The first ACK to the WRQ packet is malformed.
+ * It is only two bytes long.
+ * * The client sends an error upon the reception of a malformed packet
+ * and terminates the file transfer.
+ */
+T_TEST_CASE_FIXTURE( write_file_malformed_ack_2, &fixture_rfc1350 )
+{
+ tftp_test_context *ctx = T_fixture_context();
+ int bytes_written;
+ size_t pos_in_file = 0;
+ static const uint8_t packet_too_short_2[] = { 0x00, 0x04 };
+
+ /* T_set_verbosity( T_VERBOSE ); */
+ _Tftp_Add_interaction_socket( AF_INET, SOCK_DGRAM, 0, TFTP_FIRST_FD );
+ _Tftp_Add_interaction_send_wrq(
+ TFTP_FIRST_FD,
+ tftpfs_file,
+ TFTP_STD_PORT,
+ tftpfs_ipv4_loopback,
+ NO_BLOCK_SIZE_OPTION,
+ NO_WINDOW_SIZE_OPTION,
+ true
+ );
+ _Tftp_Add_interaction_recv_raw(
+ TFTP_FIRST_FD,
+ FIRST_TIMEOUT_MILLISECONDS,
+ SERV_PORT,
+ tftpfs_ipv4_loopback,
+ sizeof( packet_too_short_2 ), /* Malformed ACK packet */
+ packet_too_short_2,
+ true
+ );
+ _Tftp_Add_interaction_send_error(
+ TFTP_FIRST_FD,
+ TFTP_ERROR_CODE_ILLEGAL,
+ SERV_PORT,
+ tftpfs_ipv4_loopback,
+ true
+ );
+ _Tftp_Add_interaction_close( TFTP_FIRST_FD, 0 );
+
+ bytes_written = write_tftp_file(
+ create_tftpfs_path( tftpfs_ipv4_loopback, tftpfs_file ),
+ pos_in_file, /* Size of file */
+ 17, /* Bytes written per call to write() */
+ &ctx->fd0
+ );
+ T_eq_int( bytes_written, -1 );
+ T_eq_int( errno, EPROTO );
+ T_no_more_interactions();
+}
+
+/*
+ * Write a file to the server using only RFC1350.
+ * The file is one and a half data packet long.
+ * The server sends a malformed packet.
+ * Tests:
+ * * The code supports requests without options (RFC1350 only).
+ * * The code supports the use of an IPv4 address instead of a server name.
+ * * The first packet is sent to standard port 69 of server.
+ * * All other packets are sent to the port used for this connection.
+ * * The first ACK to the WRQ packet is malformed.
+ * It is only three bytes long.
+ * * The client sends an error upon the reception of a malformed packet
+ * and terminates the file transfer.
+ */
+T_TEST_CASE_FIXTURE( write_file_malformed_ack_3, &fixture_rfc1350 )
+{
+ tftp_test_context *ctx = T_fixture_context();
+ int bytes_written;
+ size_t pos_in_file = 0;
+ static const uint8_t packet_too_short_3[] = { 0x00, 0x04, 0x00 };
+
+ /* T_set_verbosity( T_VERBOSE ); */
+ _Tftp_Add_interaction_socket( AF_INET, SOCK_DGRAM, 0, TFTP_FIRST_FD );
+ _Tftp_Add_interaction_send_wrq(
+ TFTP_FIRST_FD,
+ tftpfs_file,
+ TFTP_STD_PORT,
+ tftpfs_ipv4_loopback,
+ NO_BLOCK_SIZE_OPTION,
+ NO_WINDOW_SIZE_OPTION,
+ true
+ );
+ _Tftp_Add_interaction_recv_raw(
+ TFTP_FIRST_FD,
+ FIRST_TIMEOUT_MILLISECONDS,
+ SERV_PORT,
+ tftpfs_ipv4_loopback,
+ sizeof( packet_too_short_3 ), /* Malformed ACK packet */
+ packet_too_short_3,
+ true
+ );
+ _Tftp_Add_interaction_send_error(
+ TFTP_FIRST_FD,
+ TFTP_ERROR_CODE_ILLEGAL,
+ SERV_PORT,
+ tftpfs_ipv4_loopback,
+ true
+ );
+ _Tftp_Add_interaction_close( TFTP_FIRST_FD, 0 );
+
+ bytes_written = write_tftp_file(
+ create_tftpfs_path( tftpfs_ipv4_loopback, tftpfs_file ),
+ pos_in_file, /* Size of file */
+ 17, /* Bytes written per call to write() */
+ &ctx->fd0
+ );
+ T_eq_int( bytes_written, -1 );
+ T_eq_int( errno, EPROTO );
+ T_no_more_interactions();
+}
+
+/*
+ * Write a file to the server using only RFC1350.
+ * The file is one and a half data packet long.
+ * The server sends a malformed packet.
+ * Tests:
+ * * The code supports requests without options (RFC1350 only).
+ * * The code supports the use of an IPv4 address instead of a server name.
+ * * The first packet is sent to standard port 69 of server.
+ * * All other packets are sent to the port used for this connection.
+ * * The first ACK to the WRQ packet is malformed.
+ * The packet contains an illegal op code.
+ * * The client sends an error upon the reception of a malformed packet
+ * and terminates the file transfer.
+ */
+T_TEST_CASE_FIXTURE( write_file_illegal_opcode_1, &fixture_rfc1350 )
+{
+ tftp_test_context *ctx = T_fixture_context();
+ int bytes_written;
+ size_t pos_in_file = 0;
+ static const uint8_t packet_illegal_opcode_1[] = { 0x00, 0xFF, 0x00, 0x00 };
+
+ /* T_set_verbosity( T_VERBOSE ); */
+ _Tftp_Add_interaction_socket( AF_INET, SOCK_DGRAM, 0, TFTP_FIRST_FD );
+ _Tftp_Add_interaction_send_wrq(
+ TFTP_FIRST_FD,
+ tftpfs_file,
+ TFTP_STD_PORT,
+ tftpfs_ipv4_loopback,
+ NO_BLOCK_SIZE_OPTION,
+ NO_WINDOW_SIZE_OPTION,
+ true
+ );
+ _Tftp_Add_interaction_recv_raw(
+ TFTP_FIRST_FD,
+ FIRST_TIMEOUT_MILLISECONDS,
+ SERV_PORT,
+ tftpfs_ipv4_loopback,
+ sizeof( packet_illegal_opcode_1 ), /* Malformed ACK packet */
+ packet_illegal_opcode_1,
+ true
+ );
+ _Tftp_Add_interaction_send_error(
+ TFTP_FIRST_FD,
+ TFTP_ERROR_CODE_ILLEGAL,
+ SERV_PORT,
+ tftpfs_ipv4_loopback,
+ true
+ );
+ _Tftp_Add_interaction_close( TFTP_FIRST_FD, 0 );
+
+ bytes_written = write_tftp_file(
+ create_tftpfs_path( tftpfs_ipv4_loopback, tftpfs_file ),
+ pos_in_file, /* Size of file */
+ 17, /* Bytes written per call to write() */
+ &ctx->fd0
+ );
+ T_eq_int( bytes_written, -1 );
+ T_eq_int( errno, EPROTO );
+ T_no_more_interactions();
+}
+
+/*
+ * Write a file to the server using only RFC1350.
+ * The server sends a malformed packet.
+ * Tests:
+ * * The code supports requests without options (RFC1350 only).
+ * * The code supports the use of an IPv4 address instead of a server name.
+ * * The first packet is sent to standard port 69 of server.
+ * * All other packets are sent to the port used for this connection.
+ * * A malformed ACK packet is received by the TFTP client.
+ * The packet is only three bytes long.
+ * * The client sends an error upon the reception of a malformed packet
+ * and terminates the file transfer.
+ */
+T_TEST_CASE_FIXTURE( write_short_file_malformed_ACK_1, &fixture_rfc1350 )
+{
+ tftp_test_context *ctx = T_fixture_context();
+ int bytes_written;
+ uint16_t block_num = 0;
+ size_t pos_in_file = 0;
+ static const uint8_t packet_too_short_3[] = { 0x00, 0x04, 0x00 };
+
+ /* T_set_verbosity( T_VERBOSE ); */
+ _Tftp_Add_interaction_socket( AF_INET, SOCK_DGRAM, 0, TFTP_FIRST_FD );
+ _Tftp_Add_interaction_send_wrq(
+ TFTP_FIRST_FD,
+ tftpfs_file,
+ TFTP_STD_PORT,
+ tftpfs_ipv4_loopback,
+ NO_BLOCK_SIZE_OPTION,
+ NO_WINDOW_SIZE_OPTION,
+ true
+ );
+ _Tftp_Add_interaction_recv_ack(
+ TFTP_FIRST_FD,
+ FIRST_TIMEOUT_MILLISECONDS,
+ SERV_PORT,
+ tftpfs_ipv4_loopback,
+ block_num++,
+ true
+ );
+ _Tftp_Add_interaction_send_data(
+ TFTP_FIRST_FD,
+ block_num,
+ pos_in_file,
+ TFTP_RFC1350_BLOCK_SIZE,
+ get_file_content,
+ SERV_PORT,
+ tftpfs_ipv4_loopback,
+ true
+ );
+ _Tftp_Add_interaction_recv_raw(
+ TFTP_FIRST_FD,
+ FIRST_TIMEOUT_MILLISECONDS,
+ SERV_PORT,
+ tftpfs_ipv4_loopback,
+ sizeof( packet_too_short_3 ), /* Malformed ACK packet */
+ packet_too_short_3,
+ true
+ );
+ _Tftp_Add_interaction_send_error(
+ TFTP_FIRST_FD,
+ TFTP_ERROR_CODE_ILLEGAL,
+ SERV_PORT,
+ tftpfs_ipv4_loopback,
+ true
+ );
+ _Tftp_Add_interaction_close( TFTP_FIRST_FD, 0 );
+
+ bytes_written = write_tftp_file(
+ create_tftpfs_path( tftpfs_ipv4_loopback, tftpfs_file ),
+ 2 * TFTP_RFC1350_BLOCK_SIZE, /* Size of file */
+ 17, /* Bytes written per call to write() */
+ &ctx->fd0
+ );
+ T_eq_int( errno, EPROTO );
+ T_eq_int( bytes_written, 510 );
+ T_no_more_interactions();
+}
+
+/*
+ * Write a file to the server using only RFC1350.
+ * The server sends a malformed packet.
+ * Tests:
+ * * The code supports requests without options (RFC1350 only).
+ * * The code supports the use of an IPv4 address instead of a server name.
+ * * The first packet is sent to standard port 69 of server.
+ * * All other packets are sent to the port used for this connection.
+ * * A malformed ACK packet is received by the TFTP client after the first
+ * DATA packet has been exchanged successfully.
+ * The packet is only one byte long.
+ * * The client sends an error upon the reception of a malformed packet
+ * and terminates the file transfer.
+ */
+T_TEST_CASE_FIXTURE( write_short_file_malformed_ACK_2, &fixture_rfc1350 )
+{
+ tftp_test_context *ctx = T_fixture_context();
+ int bytes_written;
+ uint16_t block_num = 0;
+ size_t pos_in_file = 0;
+ static const uint8_t packet_too_short_1[] = { 0x04 };
+
+ /* T_set_verbosity( T_VERBOSE ); */
+ _Tftp_Add_interaction_socket( AF_INET, SOCK_DGRAM, 0, TFTP_FIRST_FD );
+ _Tftp_Add_interaction_send_wrq(
+ TFTP_FIRST_FD,
+ tftpfs_file,
+ TFTP_STD_PORT,
+ tftpfs_ipv4_loopback,
+ NO_BLOCK_SIZE_OPTION,
+ NO_WINDOW_SIZE_OPTION,
+ true
+ );
+ _Tftp_Add_interaction_recv_ack(
+ TFTP_FIRST_FD,
+ FIRST_TIMEOUT_MILLISECONDS,
+ SERV_PORT,
+ tftpfs_ipv4_loopback,
+ block_num++,
+ true
+ );
+ _Tftp_Add_interaction_send_data(
+ TFTP_FIRST_FD,
+ block_num,
+ pos_in_file,
+ TFTP_RFC1350_BLOCK_SIZE,
+ get_file_content,
+ SERV_PORT,
+ tftpfs_ipv4_loopback,
+ true
+ );
+ pos_in_file += TFTP_RFC1350_BLOCK_SIZE;
+ _Tftp_Add_interaction_recv_ack(
+ TFTP_FIRST_FD,
+ FIRST_TIMEOUT_MILLISECONDS,
+ SERV_PORT,
+ tftpfs_ipv4_loopback,
+ block_num++,
+ true
+ );
+ _Tftp_Add_interaction_send_data(
+ TFTP_FIRST_FD,
+ block_num,
+ pos_in_file,
+ TFTP_RFC1350_BLOCK_SIZE / 4,
+ get_file_content,
+ SERV_PORT,
+ tftpfs_ipv4_loopback,
+ true
+ );
+ pos_in_file += TFTP_RFC1350_BLOCK_SIZE / 4;
+ _Tftp_Add_interaction_recv_raw(
+ TFTP_FIRST_FD,
+ FIRST_TIMEOUT_MILLISECONDS,
+ SERV_PORT,
+ tftpfs_ipv4_loopback,
+ sizeof( packet_too_short_1 ), /* Malformed ACK packet */
+ packet_too_short_1,
+ true
+ );
+ _Tftp_Add_interaction_send_error(
+ TFTP_FIRST_FD,
+ TFTP_ERROR_CODE_ILLEGAL,
+ SERV_PORT,
+ tftpfs_ipv4_loopback,
+ true
+ );
+ _Tftp_Add_interaction_close( TFTP_FIRST_FD, 0 );
+
+ bytes_written = write_tftp_file(
+ create_tftpfs_path( tftpfs_ipv4_loopback, tftpfs_file ),
+ pos_in_file, /* Size of file */
+ 17, /* Bytes written per call to write() */
+ &ctx->fd0
+ );
+ T_eq_int( errno, EPROTO );
+ T_eq_int( bytes_written, -1 );
+ T_no_more_interactions();
+}
+
+/*
+ * Write a file to the server using only RFC1350.
+ * The server sends a malformed packet.
+ * Tests:
+ * * The code supports requests without options (RFC1350 only).
+ * * The code supports the use of an IPv4 address instead of a server name.
+ * * The first packet is sent to standard port 69 of server.
+ * * All other packets are sent to the port used for this connection.
+ * * A malformed ACK packet is received by the TFTP client after the first
+ * DATA packet has been exchanged successfully.
+ * The packet contains an illegal op code.
+ * * The client sends an error upon the reception of a malformed packet
+ * and terminates the file transfer.
+ */
+T_TEST_CASE_FIXTURE( write_short_file_malformed_opcode, &fixture_rfc1350 )
+{
+ tftp_test_context *ctx = T_fixture_context();
+ int bytes_written;
+ uint16_t block_num = 0;
+ size_t pos_in_file = 0;
+ static const uint8_t packet_illegal_opcode_2[] = { 0x04, 0x00, 0x00, 0x01 };
+
+ /* T_set_verbosity( T_VERBOSE ); */
+ _Tftp_Add_interaction_socket( AF_INET, SOCK_DGRAM, 0, TFTP_FIRST_FD );
+ _Tftp_Add_interaction_send_wrq(
+ TFTP_FIRST_FD,
+ tftpfs_file,
+ TFTP_STD_PORT,
+ tftpfs_ipv4_loopback,
+ NO_BLOCK_SIZE_OPTION,
+ NO_WINDOW_SIZE_OPTION,
+ true
+ );
+ _Tftp_Add_interaction_recv_ack(
+ TFTP_FIRST_FD,
+ FIRST_TIMEOUT_MILLISECONDS,
+ SERV_PORT,
+ tftpfs_ipv4_loopback,
+ block_num++,
+ true
+ );
+ _Tftp_Add_interaction_send_data(
+ TFTP_FIRST_FD,
+ block_num,
+ pos_in_file,
+ TFTP_RFC1350_BLOCK_SIZE,
+ get_file_content,
+ SERV_PORT,
+ tftpfs_ipv4_loopback,
+ true
+ );
+ _Tftp_Add_interaction_recv_raw(
+ TFTP_FIRST_FD,
+ FIRST_TIMEOUT_MILLISECONDS,
+ SERV_PORT,
+ tftpfs_ipv4_loopback,
+ sizeof( packet_illegal_opcode_2 ), /* Malformed ACK packet */
+ packet_illegal_opcode_2,
+ true
+ );
+ _Tftp_Add_interaction_send_error(
+ TFTP_FIRST_FD,
+ TFTP_ERROR_CODE_ILLEGAL,
+ SERV_PORT,
+ tftpfs_ipv4_loopback,
+ true
+ );
+ _Tftp_Add_interaction_close( TFTP_FIRST_FD, 0 );
+
+ bytes_written = write_tftp_file(
+ create_tftpfs_path( tftpfs_ipv4_loopback, tftpfs_file ),
+ 2 * TFTP_RFC1350_BLOCK_SIZE, /* Size of file */
+ 17, /* Bytes written per call to write() */
+ &ctx->fd0
+ );
+ T_eq_int( errno, EPROTO );
+ T_eq_int( bytes_written, 510 );
+ T_no_more_interactions();
+}
+
+/*
+ * Write a file to the server using only RFC1350.
+ * The file is two and a half data packet long.
+ * The server sends packets with wrong block numbers.
+ * Tests:
+ * * The code supports requests without options (RFC1350 only).
+ * * The code supports the use of an IPv4 address instead of a server name.
+ * * The first packet is sent to standard port 69 of server.
+ * * All other packets are sent to the port used for this connection.
+ * * The first ACK packet contains a wrong block number.
+ * * The client repeats the WRQ upon reception of an ACK with
+ * an too high block number.
+ * * The client uses a short time out for waiting on the answer of the
+ * first WRQ or DATA packets.
+ * * The client uses a long time out for waiting on the answer of
+ * repeated WRQ or DATA packets.
+ * * The first DATA packet is full.
+ * * The second DATA packet signals the end of transfer.
+ * * The client handles DATA packets with wrong block numbers
+ * appropriately.
+ * * The test writes a file to the file system with calls to write() of
+ * exactly block size.
+ */
+T_TEST_CASE_FIXTURE( write_short_file_bad_block_numbers, &fixture_rfc1350 )
+{
+ tftp_test_context *ctx = T_fixture_context();
+ int bytes_written;
+ uint16_t block_num = 0;
+ size_t pos_in_file = 0;
+
+ /* T_set_verbosity( T_VERBOSE ); */
+ _Tftp_Add_interaction_socket( AF_INET, SOCK_DGRAM, 0, TFTP_FIRST_FD );
+ _Tftp_Add_interaction_send_wrq(
+ TFTP_FIRST_FD,
+ tftpfs_file,
+ TFTP_STD_PORT,
+ tftpfs_ipv4_loopback,
+ NO_BLOCK_SIZE_OPTION,
+ NO_WINDOW_SIZE_OPTION,
+ true
+ );
+ _Tftp_Add_interaction_recv_ack(
+ TFTP_FIRST_FD,
+ FIRST_TIMEOUT_MILLISECONDS,
+ SERV_PORT,
+ tftpfs_ipv4_loopback,
+ block_num + 1, /* Wrong block number */
+ true
+ );
+ _Tftp_Add_interaction_recv_ack(
+ TFTP_FIRST_FD,
+ FIRST_TIMEOUT_MILLISECONDS,
+ SERV_PORT,
+ tftpfs_ipv4_loopback,
+ block_num++,
+ true
+ );
+ _Tftp_Add_interaction_send_data(
+ TFTP_FIRST_FD,
+ block_num,
+ pos_in_file,
+ TFTP_RFC1350_BLOCK_SIZE,
+ get_file_content,
+ SERV_PORT,
+ tftpfs_ipv4_loopback,
+ true
+ );
+ _Tftp_Add_interaction_recv_ack(
+ TFTP_FIRST_FD,
+ FIRST_TIMEOUT_MILLISECONDS,
+ SERV_PORT,
+ tftpfs_ipv4_loopback,
+ block_num - 1, /* Wrong block number */
+ true
+ );
+ pos_in_file += TFTP_RFC1350_BLOCK_SIZE;
+ _Tftp_Add_interaction_recv_ack(
+ TFTP_FIRST_FD,
+ FIRST_TIMEOUT_MILLISECONDS,
+ SERV_PORT,
+ tftpfs_ipv4_loopback,
+ block_num++,
+ true
+ );
+ _Tftp_Add_interaction_send_data(
+ TFTP_FIRST_FD,
+ block_num,
+ pos_in_file,
+ TFTP_RFC1350_BLOCK_SIZE,
+ get_file_content,
+ SERV_PORT,
+ tftpfs_ipv4_loopback,
+ true
+ );
+ _Tftp_Add_interaction_recv_ack(
+ TFTP_FIRST_FD,
+ FIRST_TIMEOUT_MILLISECONDS,
+ SERV_PORT,
+ tftpfs_ipv4_loopback,
+ block_num - 2, /* Wrong block number */
+ true
+ );
+ pos_in_file += TFTP_RFC1350_BLOCK_SIZE;
+ _Tftp_Add_interaction_recv_ack(
+ TFTP_FIRST_FD,
+ FIRST_TIMEOUT_MILLISECONDS,
+ SERV_PORT,
+ tftpfs_ipv4_loopback,
+ block_num++,
+ true
+ );
+ _Tftp_Add_interaction_send_data(
+ TFTP_FIRST_FD,
+ block_num,
+ pos_in_file,
+ TFTP_RFC1350_BLOCK_SIZE / 4,
+ get_file_content,
+ SERV_PORT,
+ tftpfs_ipv4_loopback,
+ true
+ );
+ _Tftp_Add_interaction_recv_ack(
+ TFTP_FIRST_FD,
+ FIRST_TIMEOUT_MILLISECONDS,
+ SERV_PORT,
+ tftpfs_ipv4_loopback,
+ block_num - 2, /* Wrong block number */
+ true
+ );
+ _Tftp_Add_interaction_recv_ack(
+ TFTP_FIRST_FD,
+ FIRST_TIMEOUT_MILLISECONDS,
+ SERV_PORT,
+ tftpfs_ipv4_loopback,
+ block_num + 1, /* Wrong block number */
+ true
+ );
+ pos_in_file += TFTP_RFC1350_BLOCK_SIZE / 4;
+ _Tftp_Add_interaction_recv_ack(
+ TFTP_FIRST_FD,
+ FIRST_TIMEOUT_MILLISECONDS,
+ SERV_PORT,
+ tftpfs_ipv4_loopback,
+ block_num++,
+ true
+ );
+ _Tftp_Add_interaction_close( TFTP_FIRST_FD, 0 );
+
+ bytes_written = write_tftp_file(
+ create_tftpfs_path( tftpfs_ipv4_loopback, tftpfs_file ),
+ pos_in_file, /* Size of file */
+ TFTP_RFC1350_BLOCK_SIZE, /* Bytes written per call to write() */
+ &ctx->fd0
+ );
+ T_eq_int( bytes_written, pos_in_file );
+ T_no_more_interactions();
+}
+
+/*
+ * Write a file to the server using only RFC1350.
+ * The file is one data packet long.
+ * The client receives a stray packet from an unknown server (wrong TID).
+ * Directly afterwards the expected ACK packet is lost and
+ * the client must retransmit the original DATA packet.
+ * Tests:
+ * * The code supports requests without options (RFC1350 only).
+ * * The code supports the use of an IPv4 address instead of a server name.
+ * * The first packet is sent to standard port 69 of server.
+ * * All other packets are sent to the port used for this connection.
+ * * The client uses a short time out for waiting on the answer of the
+ * first DATA packet.
+ * * The client uses a long time out for waiting on the answer of
+ * the repeated DATA.
+ * * Upon reception of a packet with a wrong TID, the client sends
+ * an ERROR message with code 5 but does not terminate the current
+ * transfer.
+ * * When re-transmitting the an packet, the data is intact (i.e.
+ * not corrupted by the reception of any packet in-between).
+ */
+T_TEST_CASE_FIXTURE( write_one_block_file_stray_packets, &fixture_rfc1350 )
+{
+ tftp_test_context *ctx = T_fixture_context();
+ int bytes_written;
+ uint16_t block_num = 0;
+ size_t pos_in_file = 0;
+
+ /* T_set_verbosity( T_VERBOSE ); */
+ _Tftp_Add_interaction_socket( AF_INET, SOCK_DGRAM, 0, TFTP_FIRST_FD );
+ _Tftp_Add_interaction_send_wrq(
+ TFTP_FIRST_FD,
+ tftpfs_file,
+ TFTP_STD_PORT,
+ tftpfs_ipv4_loopback,
+ NO_BLOCK_SIZE_OPTION,
+ NO_WINDOW_SIZE_OPTION,
+ true
+ );
+ _Tftp_Add_interaction_recv_ack(
+ TFTP_FIRST_FD,
+ FIRST_TIMEOUT_MILLISECONDS,
+ SERV_PORT,
+ tftpfs_ipv4_loopback,
+ block_num++,
+ true
+ );
+ _Tftp_Add_interaction_send_data(
+ TFTP_FIRST_FD,
+ block_num,
+ pos_in_file,
+ TFTP_RFC1350_BLOCK_SIZE,
+ get_file_content,
+ SERV_PORT,
+ tftpfs_ipv4_loopback,
+ true
+ );
+ _Tftp_Add_interaction_recv_data(
+ TFTP_FIRST_FD,
+ FIRST_TIMEOUT_MILLISECONDS,
+ SERV_PORT + 1, /* Stray packet with wrong server TID */
+ tftpfs_ipv4_loopback,
+ block_num,
+ 0,
+ TFTP_RFC1350_BLOCK_SIZE / 2, /* Number of bytes transferred */
+ get_bad_file_content,
+ true
+ );
+ _Tftp_Add_interaction_send_error(
+ TFTP_FIRST_FD,
+ TFTP_ERROR_CODE_UNKNOWN_ID,
+ SERV_PORT + 1,
+ tftpfs_ipv4_loopback,
+ true
+ );
+ _Tftp_Add_interaction_recv_nothing(
+ TFTP_FIRST_FD, /* Timeout: No packet received within timeout period */
+ FIRST_TIMEOUT_MILLISECONDS
+ );
+ _Tftp_Add_interaction_send_data( /* Retransmission of the DATA packet */
+ TFTP_FIRST_FD,
+ block_num,
+ pos_in_file,
+ TFTP_RFC1350_BLOCK_SIZE,
+ get_file_content,
+ SERV_PORT,
+ tftpfs_ipv4_loopback,
+ true
+ );
+ pos_in_file += TFTP_RFC1350_BLOCK_SIZE;
+ _Tftp_Add_interaction_recv_ack(
+ TFTP_FIRST_FD,
+ TIMEOUT_MILLISECONDS,
+ SERV_PORT,
+ tftpfs_ipv4_loopback,
+ block_num++,
+ true
+ );
+ _Tftp_Add_interaction_send_data(
+ TFTP_FIRST_FD,
+ block_num,
+ pos_in_file,
+ 0, /* Number of bytes */
+ get_file_content,
+ SERV_PORT,
+ tftpfs_ipv4_loopback,
+ true
+ );
+ pos_in_file += 0;
+ _Tftp_Add_interaction_recv_ack(
+ TFTP_FIRST_FD,
+ FIRST_TIMEOUT_MILLISECONDS,
+ SERV_PORT,
+ tftpfs_ipv4_loopback,
+ block_num++,
+ true
+ );
+ _Tftp_Add_interaction_close( TFTP_FIRST_FD, 0 );
+
+ bytes_written = write_tftp_file(
+ create_tftpfs_path( tftpfs_ipv4_loopback, tftpfs_file ),
+ pos_in_file, /* Size of file */
+ TFTP_RFC1350_BLOCK_SIZE, /* Bytes written per call to write() */
+ &ctx->fd0
+ );
+ T_eq_int( bytes_written, pos_in_file );
+ T_no_more_interactions();
+}
+
+/*
+ * Read a file from the server using option to increase the block size.
+ * The file is one data packet long. No timeouts, packet loss, ...
+ * Tests:
+ * * Only the blksize option appears in RRQ and OACK.
+ * * The client uses a block size which is larger than the default size.
+ * * The first data packet is full.
+ * * The second data packet is empty and signals the end of the transfer.
+ * * Client handles the empty data packet correctly as
+ * end of file indicator.
+ * * The test reads a file from the file system in chunks of block size.
+ */
+T_TEST_CASE_FIXTURE( read_file_one_large_block, &fixture_large_blocksize )
+{
+ tftp_test_context *ctx = T_fixture_context();
+ int bytes_read;
+ uint16_t block_num = 0;
+ size_t pos_in_file = 0;
+ const char options[] =
+ TFTP_OPTION_BLKSIZE "\0"
+ RTEMS_XSTRING( LARGE_BLOCK_SIZE );
+
+ /* T_set_verbosity( T_VERBOSE ); */
+ _Tftp_Add_interaction_socket( AF_INET, SOCK_DGRAM, 0, TFTP_FIRST_FD );
+ _Tftp_Add_interaction_send_rrq(
+ TFTP_FIRST_FD,
+ tftpfs_file,
+ TFTP_STD_PORT,
+ tftpfs_ipv4_loopback,
+ LARGE_BLOCK_SIZE,
+ NO_WINDOW_SIZE_OPTION,
+ true
+ );
+ _Tftp_Add_interaction_recv_oack(
+ TFTP_FIRST_FD,
+ FIRST_TIMEOUT_MILLISECONDS,
+ SERV_PORT,
+ tftpfs_ipv4_loopback,
+ options,
+ sizeof( options ),
+ true
+ );
+ _Tftp_Add_interaction_send_ack(
+ TFTP_FIRST_FD,
+ block_num++,
+ SERV_PORT,
+ tftpfs_ipv4_loopback,
+ true
+ );
+ _Tftp_Add_interaction_recv_data(
+ TFTP_FIRST_FD,
+ FIRST_TIMEOUT_MILLISECONDS,
+ SERV_PORT,
+ tftpfs_ipv4_loopback,
+ block_num,
+ pos_in_file,
+ LARGE_BLOCK_SIZE, /* Number of bytes transferred */
+ get_file_content,
+ true
+ );
+ pos_in_file += LARGE_BLOCK_SIZE;
+ _Tftp_Add_interaction_send_ack(
+ TFTP_FIRST_FD,
+ block_num++,
+ SERV_PORT,
+ tftpfs_ipv4_loopback,
+ true
+ );
+ _Tftp_Add_interaction_recv_data(
+ TFTP_FIRST_FD,
+ FIRST_TIMEOUT_MILLISECONDS,
+ SERV_PORT,
+ tftpfs_ipv4_loopback,
+ block_num,
+ pos_in_file,
+ 0, /* Number of bytes transferred */
+ get_file_content,
+ true
+ );
+ _Tftp_Add_interaction_send_ack(
+ TFTP_FIRST_FD,
+ block_num++,
+ SERV_PORT,
+ tftpfs_ipv4_loopback,
+ true
+ );
+ _Tftp_Add_interaction_close( TFTP_FIRST_FD, 0 );
+
+ bytes_read = read_tftp_file(
+ create_tftpfs_path( tftpfs_ipv4_loopback, tftpfs_file ),
+ LARGE_BLOCK_SIZE, /* Bytes read per call to read() */
+ SIZE_MAX,
+ &ctx->fd0
+ );
+ T_eq_int( bytes_read, pos_in_file );
+ T_no_more_interactions();
+}
+
+/*
+ * Try to read a file from the server using a file name too large for a RRQ.
+ * Tests:
+ * * The client rejects an attempt to open a file with a too long
+ * file name is with an error.
+ */
+T_TEST_CASE_FIXTURE( read_too_long_file_name, &fixture_default_options )
+{
+ tftp_test_context *ctx = T_fixture_context();
+ int bytes_read;
+ char buffer[TFTP_RFC1350_BLOCK_SIZE -
+ strlen( TFTP_MODE_OCTET ) - 1 - 5];
+ int len;
+
+ /* T_set_verbosity( T_VERBOSE ); */
+ _Tftp_Add_interaction_socket( AF_INET, SOCK_DGRAM, 0, TFTP_FIRST_FD );
+ _Tftp_Add_interaction_close( TFTP_FIRST_FD, 0 );
+
+ len = sizeof( buffer ) - strlen( tftpfs_mount_point ) -
+ strlen( tftpfs_ipv4_loopback ) - 2 - 4;
+ len = snprintf(
+ buffer,
+ sizeof( buffer ),
+ "%s/%s:%0*d",
+ tftpfs_mount_point,
+ tftpfs_ipv4_loopback,
+ len,
+ 123
+ );
+ T_quiet_gt_int( len, 0 );
+ T_quiet_lt_int( len, (int) sizeof( buffer ) );
+
+ bytes_read = read_tftp_file(
+ buffer,
+ TFTP_DEFAULT_BLOCK_SIZE, /* Bytes read per call to read() */
+ SIZE_MAX,
+ &ctx->fd0
+ );
+ T_eq_int( bytes_read, 0 );
+ T_eq_int( errno, ENAMETOOLONG );
+ T_no_more_interactions();
+}
+
+/*
+ * Read a file using options but the server sends a DATA packet.
+ * The file is one byte long. No timeouts, packet loss, ...
+ * Tests:
+ * * The client uses windowsize and blksize option in the RRQ.
+ * * For the data transfer the client uses the RFC1350 option values
+ * because the server responded with a DATA packet.
+ * * The whole package sequence behaves as if only RFC1350 was used.
+ * * The first data packet contains a single byte and signals the end of the transfer.
+ * * The test reads a file from the file system in chunks of half block size.
+ */
+T_TEST_CASE_FIXTURE( read_file_DATA_instead_of_OACK, &fixture_default_options )
+{
+ tftp_test_context *ctx = T_fixture_context();
+ int bytes_read;
+ uint16_t block_num = 1;
+ size_t pos_in_file = 0;
+
+ /* T_set_verbosity( T_VERBOSE ); */
+ _Tftp_Add_interaction_socket( AF_INET, SOCK_DGRAM, 0, TFTP_FIRST_FD );
+ _Tftp_Add_interaction_send_rrq(
+ TFTP_FIRST_FD,
+ tftpfs_file,
+ TFTP_STD_PORT,
+ tftpfs_ipv4_loopback,
+ TFTP_DEFAULT_BLOCK_SIZE,
+ TFTP_DEFAULT_WINDOW_SIZE,
+ true
+ );
+ _Tftp_Add_interaction_recv_data(
+ TFTP_FIRST_FD,
+ FIRST_TIMEOUT_MILLISECONDS,
+ SERV_PORT,
+ tftpfs_ipv4_loopback,
+ block_num,
+ pos_in_file,
+ 1, /* Number of bytes transferred */
+ get_file_content,
+ true
+ );
+ pos_in_file += 1;
+ _Tftp_Add_interaction_send_ack(
+ TFTP_FIRST_FD,
+ block_num++,
+ SERV_PORT,
+ tftpfs_ipv4_loopback,
+ true
+ );
+ _Tftp_Add_interaction_close( TFTP_FIRST_FD, 0 );
+
+ bytes_read = read_tftp_file(
+ create_tftpfs_path( tftpfs_ipv4_loopback, tftpfs_file ),
+ TFTP_DEFAULT_BLOCK_SIZE / 2, /* Bytes read per call to read() */
+ SIZE_MAX,
+ &ctx->fd0
+ );
+ T_eq_int( bytes_read, pos_in_file );
+ T_no_more_interactions();
+}
+
+/*
+ * Read a file using RFC1350 but the server sends an OACK packet.
+ * Tests:
+ * * The code supports requests without options (RFC1350 only).
+ * * The server wrongly responds with an OACK which contains no options.
+ * * The client sends an error upon reception of an unexpected packet.
+ */
+T_TEST_CASE_FIXTURE( read_tiny_file_OACK_instead_of_DATA, &fixture_rfc1350 )
+{
+ tftp_test_context *ctx = T_fixture_context();
+ int bytes_read;
+ const char options[] = {};
+
+ /* T_set_verbosity( T_VERBOSE ); */
+ _Tftp_Add_interaction_socket( AF_INET, SOCK_DGRAM, 0, TFTP_FIRST_FD );
+ _Tftp_Add_interaction_send_rrq(
+ TFTP_FIRST_FD,
+ tftpfs_file,
+ TFTP_STD_PORT,
+ tftpfs_ipv4_loopback,
+ NO_BLOCK_SIZE_OPTION,
+ NO_WINDOW_SIZE_OPTION,
+ true
+ );
+ _Tftp_Add_interaction_recv_oack(
+ TFTP_FIRST_FD,
+ FIRST_TIMEOUT_MILLISECONDS,
+ SERV_PORT,
+ tftpfs_ipv4_loopback,
+ options,
+ sizeof( options ),
+ true
+ );
+ _Tftp_Add_interaction_send_error(
+ TFTP_FIRST_FD,
+ TFTP_ERROR_CODE_ILLEGAL,
+ SERV_PORT,
+ tftpfs_ipv4_loopback,
+ true
+ );
+ _Tftp_Add_interaction_close( TFTP_FIRST_FD, 0 );
+
+ bytes_read = read_tftp_file(
+ create_tftpfs_path( tftpfs_ipv4_loopback, tftpfs_file ),
+ 1, /* Bytes read per call to read() */
+ SIZE_MAX,
+ &ctx->fd0
+ );
+ T_eq_int( bytes_read, 0 );
+ T_eq_int( errno, EPROTO );
+ T_no_more_interactions();
+}
+
+/*
+ * Read a file from the server using the default options.
+ * The file is 18 and a half data packet long. No timeouts, packet loss, ...
+ * Tests:
+ * * The client uses the default options
+ * (windowsize = 8 and blocksize = 1456).
+ * * The server send the options in the same order as the client did
+ * send them.
+ * * The ninetenth data packet signals the end of transfer.
+ * * The test reads a file from the file system in chunks of 2000 bytes.
+ */
+T_TEST_CASE_FIXTURE( read_file_with_default_options, &fixture_default_options )
+{
+ tftp_test_context *ctx = T_fixture_context();
+ int i;
+ int bytes_read;
+ uint16_t block_num = 0;
+ size_t pos_in_file = 0;
+ const char options[] =
+ TFTP_OPTION_BLKSIZE "\0"
+ RTEMS_XSTRING( TFTP_DEFAULT_BLOCK_SIZE ) "\0"
+ TFTP_OPTION_WINDOWSIZE"\0"
+ RTEMS_XSTRING( TFTP_DEFAULT_WINDOW_SIZE );
+
+ /* T_set_verbosity( T_VERBOSE ); */
+ _Tftp_Add_interaction_socket( AF_INET, SOCK_DGRAM, 0, TFTP_FIRST_FD );
+ _Tftp_Add_interaction_send_rrq(
+ TFTP_FIRST_FD,
+ tftpfs_file,
+ TFTP_STD_PORT,
+ tftpfs_ipv4_loopback,
+ TFTP_DEFAULT_BLOCK_SIZE,
+ TFTP_DEFAULT_WINDOW_SIZE,
+ true
+ );
+ _Tftp_Add_interaction_recv_oack(
+ TFTP_FIRST_FD,
+ FIRST_TIMEOUT_MILLISECONDS,
+ SERV_PORT,
+ tftpfs_ipv4_loopback,
+ options,
+ sizeof( options ),
+ true
+ );
+ _Tftp_Add_interaction_send_ack(
+ TFTP_FIRST_FD,
+ block_num,
+ SERV_PORT,
+ tftpfs_ipv4_loopback,
+ true
+ );
+ while ( block_num < 16 ) {
+ for ( i = 0; i < TFTP_DEFAULT_WINDOW_SIZE; ++i ) {
+ _Tftp_Add_interaction_recv_data(
+ TFTP_FIRST_FD,
+ FIRST_TIMEOUT_MILLISECONDS,
+ SERV_PORT,
+ tftpfs_ipv4_loopback,
+ ++block_num,
+ pos_in_file,
+ TFTP_DEFAULT_BLOCK_SIZE, /* Number of bytes transferred */
+ get_file_content,
+ true
+ );
+ pos_in_file += TFTP_DEFAULT_BLOCK_SIZE;
+ }
+ _Tftp_Add_interaction_send_ack(
+ TFTP_FIRST_FD,
+ block_num,
+ SERV_PORT,
+ tftpfs_ipv4_loopback,
+ true
+ );
+ }
+ _Tftp_Add_interaction_recv_data(
+ TFTP_FIRST_FD,
+ FIRST_TIMEOUT_MILLISECONDS,
+ SERV_PORT,
+ tftpfs_ipv4_loopback,
+ ++block_num,
+ pos_in_file,
+ TFTP_DEFAULT_BLOCK_SIZE, /* Number of bytes transferred */
+ get_file_content,
+ true
+ );
+ pos_in_file += TFTP_DEFAULT_BLOCK_SIZE;
+ _Tftp_Add_interaction_recv_data(
+ TFTP_FIRST_FD,
+ FIRST_TIMEOUT_MILLISECONDS,
+ SERV_PORT,
+ tftpfs_ipv4_loopback,
+ ++block_num,
+ pos_in_file,
+ TFTP_DEFAULT_BLOCK_SIZE, /* Number of bytes transferred */
+ get_file_content,
+ true
+ );
+ pos_in_file += TFTP_DEFAULT_BLOCK_SIZE;
+ _Tftp_Add_interaction_recv_data(
+ TFTP_FIRST_FD,
+ FIRST_TIMEOUT_MILLISECONDS,
+ SERV_PORT,
+ tftpfs_ipv4_loopback,
+ ++block_num,
+ pos_in_file,
+ TFTP_DEFAULT_BLOCK_SIZE / 2, /* Number of bytes transferred */
+ get_file_content,
+ true
+ );
+ pos_in_file += TFTP_DEFAULT_BLOCK_SIZE / 2;
+ _Tftp_Add_interaction_send_ack(
+ TFTP_FIRST_FD,
+ block_num,
+ SERV_PORT,
+ tftpfs_ipv4_loopback,
+ true
+ );
+ _Tftp_Add_interaction_close( TFTP_FIRST_FD, 0 );
+
+ bytes_read = read_tftp_file(
+ create_tftpfs_path( tftpfs_ipv4_loopback, tftpfs_file ),
+ 2000, /* Bytes read per call to read() */
+ SIZE_MAX,
+ &ctx->fd0
+ );
+ T_eq_int( bytes_read, pos_in_file );
+ T_no_more_interactions();
+}
+
+/*
+ * Read a file following exactly the scenario in RFC 7440.
+ * This test uses window size and block size options. There are lost packets.
+ * Tests:
+ * * The client uses of non-default options
+ * (windowsize = 4 and blocksize = 12).
+ * * Test the scenario included in RFC 7440.
+ * * When a packet from the server is lost (client receives DATA packet with
+ * a too high block number), the client sends an ACK for the last package
+ * received in the correct sequence.
+ * * The client ignores duplicated packets (with block numbers it has
+ * already processed).
+ * * The data of the file ends exactly at a window size border (i.e.
+ * after the window a single empty DATA packet is sent by the server).
+ * * The test reads a file from the file system in chunks of 10 bytes.
+ */
+T_TEST_CASE_FIXTURE( read_file_rfc7440_scenario, &fixture_small_opt_size )
+{
+ tftp_test_context *ctx = T_fixture_context();
+ int i;
+ int bytes_read;
+ uint16_t block_num = 0;
+ size_t pos_in_file = 0;
+ const char options[] =
+ TFTP_OPTION_WINDOWSIZE"\0"
+ RTEMS_XSTRING( SMALL_WINDOW_SIZE ) "\0"
+ TFTP_OPTION_BLKSIZE "\0"
+ RTEMS_XSTRING( SMALL_BLOCK_SIZE );
+
+ /* T_set_verbosity( T_VERBOSE ); */
+ _Tftp_Add_interaction_socket( AF_INET, SOCK_DGRAM, 0, TFTP_FIRST_FD );
+ _Tftp_Add_interaction_send_rrq(
+ TFTP_FIRST_FD,
+ tftpfs_file,
+ TFTP_STD_PORT,
+ tftpfs_ipv4_loopback,
+ SMALL_BLOCK_SIZE,
+ SMALL_WINDOW_SIZE,
+ true
+ );
+ _Tftp_Add_interaction_recv_oack(
+ TFTP_FIRST_FD,
+ FIRST_TIMEOUT_MILLISECONDS,
+ SERV_PORT,
+ tftpfs_ipv4_loopback,
+ options,
+ sizeof( options ),
+ true
+ );
+ _Tftp_Add_interaction_send_ack(
+ TFTP_FIRST_FD,
+ block_num,
+ SERV_PORT,
+ tftpfs_ipv4_loopback,
+ true
+ );
+ for ( i = 0; i < SMALL_WINDOW_SIZE; ++i ) {
+ _Tftp_Add_interaction_recv_data(
+ TFTP_FIRST_FD,
+ FIRST_TIMEOUT_MILLISECONDS,
+ SERV_PORT,
+ tftpfs_ipv4_loopback,
+ ++block_num,
+ pos_in_file,
+ SMALL_BLOCK_SIZE, /* Number of bytes transferred */
+ get_file_content,
+ true
+ );
+ pos_in_file += SMALL_BLOCK_SIZE;
+ }
+ _Tftp_Add_interaction_send_ack(
+ TFTP_FIRST_FD,
+ block_num,
+ SERV_PORT,
+ tftpfs_ipv4_loopback,
+ true
+ );
+ _Tftp_Add_interaction_recv_data(
+ TFTP_FIRST_FD,
+ FIRST_TIMEOUT_MILLISECONDS,
+ SERV_PORT,
+ tftpfs_ipv4_loopback,
+ ++block_num,
+ pos_in_file,
+ SMALL_BLOCK_SIZE, /* Number of bytes transferred */
+ get_file_content,
+ true
+ );
+ pos_in_file += SMALL_BLOCK_SIZE;
+ _Tftp_Add_interaction_recv_data(
+ TFTP_FIRST_FD,
+ FIRST_TIMEOUT_MILLISECONDS,
+ SERV_PORT,
+ tftpfs_ipv4_loopback,
+ block_num + 2, /* Error: One packet from the server has been lost */
+ pos_in_file,
+ SMALL_BLOCK_SIZE, /* Number of bytes transferred */
+ get_file_content,
+ true
+ );
+ _Tftp_Add_interaction_send_ack(
+ TFTP_FIRST_FD,
+ block_num,
+ SERV_PORT,
+ tftpfs_ipv4_loopback,
+ true
+ );
+ for ( i = 0; i < SMALL_WINDOW_SIZE; ++i ) {
+ _Tftp_Add_interaction_recv_data(
+ TFTP_FIRST_FD,
+ FIRST_TIMEOUT_MILLISECONDS,
+ SERV_PORT,
+ tftpfs_ipv4_loopback,
+ ++block_num,
+ pos_in_file,
+ SMALL_BLOCK_SIZE, /* Number of bytes transferred */
+ get_file_content,
+ true
+ );
+ pos_in_file += SMALL_BLOCK_SIZE;
+ }
+ _Tftp_Add_interaction_send_ack(
+ TFTP_FIRST_FD,
+ block_num,
+ SERV_PORT,
+ tftpfs_ipv4_loopback,
+ true
+ );
+ _Tftp_Add_interaction_recv_data(
+ TFTP_FIRST_FD,
+ FIRST_TIMEOUT_MILLISECONDS,
+ SERV_PORT,
+ tftpfs_ipv4_loopback,
+ ++block_num,
+ pos_in_file,
+ SMALL_BLOCK_SIZE, /* Number of bytes transferred */
+ get_file_content,
+ true
+ );
+ pos_in_file += SMALL_BLOCK_SIZE;
+ _Tftp_Add_interaction_recv_data(
+ TFTP_FIRST_FD,
+ FIRST_TIMEOUT_MILLISECONDS,
+ SERV_PORT,
+ tftpfs_ipv4_loopback,
+ block_num + 2, /* Error: One packet from the server has been lost */
+ pos_in_file,
+ SMALL_BLOCK_SIZE, /* Number of bytes transferred */
+ get_file_content,
+ true
+ );
+ _Tftp_Add_interaction_send_ack(
+ TFTP_FIRST_FD,
+ block_num, /* The packet is assumed to be lost/does not reach the server */
+ SERV_PORT,
+ tftpfs_ipv4_loopback,
+ true
+ );
+ _Tftp_Add_interaction_recv_data(
+ TFTP_FIRST_FD,
+ FIRST_TIMEOUT_MILLISECONDS,
+ SERV_PORT,
+ tftpfs_ipv4_loopback,
+ block_num + 3, /* Error: One packet from the server has been lost */
+ pos_in_file,
+ SMALL_BLOCK_SIZE, /* Number of bytes transferred */
+ get_file_content,
+ true
+ );
+ block_num = 9; /* The ACK for DATA packet 10 did not reach the server */
+ pos_in_file = block_num * SMALL_BLOCK_SIZE;
+ for ( i = 0; i < SMALL_WINDOW_SIZE; ++i ) {
+ _Tftp_Add_interaction_recv_data(
+ TFTP_FIRST_FD,
+ FIRST_TIMEOUT_MILLISECONDS,
+ SERV_PORT,
+ tftpfs_ipv4_loopback,
+ ++block_num,
+ pos_in_file,
+ SMALL_BLOCK_SIZE, /* Number of bytes transferred */
+ get_file_content,
+ true
+ );
+ pos_in_file += SMALL_BLOCK_SIZE;
+ }
+ _Tftp_Add_interaction_send_ack(
+ TFTP_FIRST_FD,
+ block_num,
+ SERV_PORT,
+ tftpfs_ipv4_loopback,
+ true
+ );
+ _Tftp_Add_interaction_recv_data(
+ TFTP_FIRST_FD,
+ FIRST_TIMEOUT_MILLISECONDS,
+ SERV_PORT,
+ tftpfs_ipv4_loopback,
+ ++block_num,
+ pos_in_file,
+ 0, /* Number of bytes transferred */
+ get_file_content,
+ true
+ );
+ _Tftp_Add_interaction_send_ack(
+ TFTP_FIRST_FD,
+ block_num,
+ SERV_PORT,
+ tftpfs_ipv4_loopback,
+ true
+ );
+ _Tftp_Add_interaction_close( TFTP_FIRST_FD, 0 );
+
+ bytes_read = read_tftp_file(
+ create_tftpfs_path( tftpfs_ipv4_loopback, tftpfs_file ),
+ 10, /* Bytes read per call to read() */
+ SIZE_MAX,
+ &ctx->fd0
+ );
+ T_eq_int( bytes_read, pos_in_file );
+ T_no_more_interactions();
+}
+
+/*
+ * Read a file using windowsize = 4. All kinds of packet loss, out of order
+ * packets and duplicated packets occur.
+ * This test uses window size and block size options. It is a stress test
+ * for all kind of network problems which can appear during a transfer
+ * of a file with window size larger than 1.
+ * Tests:
+ * * The client uses non-default options (windowsize = 4 and blocksize = 12).
+ * * The first DATA packet of a window is lost.
+ * * The last DATA packet of a window is lost.
+ * * The middle DATA packets of a window is lost.
+ * * The first two DATA packets of a window are received in reverse order.
+ * * The middle two DATA packets of a window are received in reverse order.
+ * * The last two DATA packets of a window are received in reverse order.
+ * * The a DATA packet is received duplicated.
+ * * The an old DATA packet is received duplicated.
+ * * The a very old DATA packet is received duplicated.
+ * * The normal ACK of a window is not received by the server.
+ * * The server repeats a whole window (ensure the client sends an ACK
+ * packet despite of the repetition).
+ * * An ACK for an out-of-order packet is not received by the server.
+ * * Windows with errors appear consecutively without
+ * error free windows in between.
+ * * After the reception of the first two DATA packets of a window,
+ * a timeout occurs and the client must send an ACK.
+ * * File transfer ends exactly with the last packet of a window
+ * (the second last packet is full and the last one is empty).
+ * * The test reads a file from the file system in chunks 100 bytes.
+ */
+T_TEST_CASE_FIXTURE( read_file_windowsize_trouble, &fixture_small_opt_size )
+{
+ tftp_test_context *ctx = T_fixture_context();
+ int i;
+ int bytes_read;
+ uint16_t block_num = 0;
+ size_t pos_in_file = 0;
+ int timeout = FIRST_TIMEOUT_MILLISECONDS;
+ const char options[] =
+ TFTP_OPTION_WINDOWSIZE"\0"
+ RTEMS_XSTRING( SMALL_WINDOW_SIZE ) "\0"
+ TFTP_OPTION_BLKSIZE "\0"
+ RTEMS_XSTRING( SMALL_BLOCK_SIZE );
+ /*
+ * A positive number is the number of a DATA packet received.
+ * A negative number is the number of an ACK packet send.
+ * A zero indicates a timeout when waiting for a DATA packet.
+ * Each line corresponds to a window.
+ */
+ int16_t pkg_sequence[] = {
+ 1, 1, 2, 3, 2, 1, 3, 4, -4, /* Duplicated DATA packets */
+ 6, -4, 7, 8, /* DATA packet 5 lost */
+ 6, 5, 7, -5, 4, 8, /* DATA packet 5 and 6 received in revers order;
+ reception of an very old packet: 4 */
+ 7, 6, 8, -6, /* DATA packet 6 and 7 received in revers order;
+ DATA packet 9 not send or lost */
+ 6, 7, 8, 9, -9, /* ACK packet 6 was not received by server */
+ 10, 11, 12, 0, -12, /* DATA packet 13 lost */
+ 13, 16, -13, /* DATA packets 14, 15 lost */
+ 12, 13, 14, 15, -15, 16, 17, /* Reception of duplicated old packets 12 and
+ 13 */
+ 16, 17, 18, 19, -19, /* Normal sequence; ACK 19 not receive by server */
+ 16, 17, 18, 19, -19, /* Normal sequence repeated;
+ ACK 19 not receive by server */
+ 16, 19, -19, 18, 17, /* Sequence repeated but DATA packet 17 and 18
+ received after 19 and in revers order */
+ 20, -20, 21, 22, 23, /* ACK 20 because the client assumes the server
+ did not get ACK 19 and restarted with 17 */
+ 21, 22, 23, 24, -24, /* Normal sequence */
+ 25, 27, -25, 26, 28, -26, /* The middle data packets 26, 27 are exchanged;
+ the client assumes DATA 26 being the start
+ of the next window and sends an ACK 26
+ upon reception of out-of-sequence DATA 28;
+ assume ACK 26 not received by server */
+ 26, 27, 29, -27, 28, /* The last data packets are exchanged;
+ ACK 27 not received by server */
+ 26, 27, 28, 29, -29, /* Normal sequence repeated from ACK 25 */
+ 30, 31, 0, -31, /* The last two data packets are lost (timeout) */
+ 32, 33, 34, /* Normal sequence; the last DATA packet (here missing) will
+ contain no data and ends the transfer at a window
+ boundary; a final ACK (here missing too) follows */
+ };
+
+ /* T_set_verbosity( T_VERBOSE ); */
+ _Tftp_Add_interaction_socket( AF_INET, SOCK_DGRAM, 0, TFTP_FIRST_FD );
+ _Tftp_Add_interaction_send_rrq(
+ TFTP_FIRST_FD,
+ tftpfs_file,
+ TFTP_STD_PORT,
+ tftpfs_ipv4_loopback,
+ SMALL_BLOCK_SIZE,
+ SMALL_WINDOW_SIZE,
+ true
+ );
+ _Tftp_Add_interaction_recv_oack(
+ TFTP_FIRST_FD,
+ FIRST_TIMEOUT_MILLISECONDS,
+ SERV_PORT,
+ tftpfs_ipv4_loopback,
+ options,
+ sizeof( options ),
+ true
+ );
+ _Tftp_Add_interaction_send_ack(
+ TFTP_FIRST_FD,
+ block_num,
+ SERV_PORT,
+ tftpfs_ipv4_loopback,
+ true
+ );
+ for ( i = 0; i < RTEMS_ARRAY_SIZE( pkg_sequence ); ++i ) {
+ if ( pkg_sequence[i] == 0 ) {
+ block_num = pkg_sequence[i];
+ _Tftp_Add_interaction_recv_nothing(
+ TFTP_FIRST_FD, /* Timeout: No packet received within timeout period */
+ timeout
+ );
+ timeout = TIMEOUT_MILLISECONDS;
+ } else if ( pkg_sequence[i] > 0 ) {
+ block_num = pkg_sequence[i];
+ _Tftp_Add_interaction_recv_data(
+ TFTP_FIRST_FD,
+ timeout,
+ SERV_PORT,
+ tftpfs_ipv4_loopback,
+ block_num,
+ ( block_num - 1 ) * SMALL_BLOCK_SIZE,
+ SMALL_BLOCK_SIZE, /* Number of bytes transferred */
+ get_file_content,
+ pkg_sequence[i] > 0 /* pkg_sequence[i] == 0 means timeout */
+ );
+ timeout = FIRST_TIMEOUT_MILLISECONDS;
+ pos_in_file = block_num * SMALL_BLOCK_SIZE;
+ } else {
+ block_num = -pkg_sequence[i];
+ _Tftp_Add_interaction_send_ack(
+ TFTP_FIRST_FD,
+ block_num,
+ SERV_PORT,
+ tftpfs_ipv4_loopback,
+ true
+ );
+ }
+ }
+ _Tftp_Add_interaction_recv_data(
+ TFTP_FIRST_FD,
+ timeout,
+ SERV_PORT,
+ tftpfs_ipv4_loopback,
+ ++block_num,
+ pos_in_file,
+ 0, /* Number of bytes transferred */
+ get_file_content,
+ true
+ );
+ _Tftp_Add_interaction_send_ack(
+ TFTP_FIRST_FD,
+ block_num,
+ SERV_PORT,
+ tftpfs_ipv4_loopback,
+ true
+ );
+ _Tftp_Add_interaction_close( TFTP_FIRST_FD, 0 );
+
+ bytes_read = read_tftp_file(
+ create_tftpfs_path( tftpfs_ipv4_loopback, tftpfs_file ),
+ 100, /* Bytes read per call to read() */
+ SIZE_MAX,
+ &ctx->fd0
+ );
+ T_eq_int( bytes_read, pos_in_file );
+ T_no_more_interactions();
+}
+
+/*
+ * Write a file to the server using an option to increase block size.
+ * The file is 2 DATA packet and 1 byte long. No timeouts, packet loss, ...
+ * Tests:
+ * * The client uses only the blksize option in WRQ and OACK.
+ * * The client uses a block size which is larger than the default size.
+ * * The server can change the block size value in the OACK.
+ * * The option name in the OACK can be upper or lower case.
+ * * First and second DATA packets are full.
+ * * The second DATA packet is not full and signals the end of the transfer.
+ * * The client handles an empty DATA packet correctly as
+ * end of file indicator.
+ * * The test writes the file to the file system in chunks of 333 bytes.
+ */
+T_TEST_CASE_FIXTURE( write_simple_file_large_blocks, &fixture_large_blocksize )
+{
+ tftp_test_context *ctx = T_fixture_context();
+ int bytes_written;
+ size_t pos_in_file = 0;
+ uint16_t block_num = 1;
+ uint16_t block_size = 211;
+ const char options[] = "BLKsiZe" "\0" "211";
+
+ /* T_set_verbosity( T_VERBOSE ); */
+ _Tftp_Add_interaction_socket( AF_INET, SOCK_DGRAM, 0, TFTP_FIRST_FD );
+ _Tftp_Add_interaction_send_wrq(
+ TFTP_FIRST_FD,
+ tftpfs_file,
+ TFTP_STD_PORT,
+ tftpfs_ipv4_loopback,
+ LARGE_BLOCK_SIZE,
+ NO_WINDOW_SIZE_OPTION,
+ true
+ );
+ _Tftp_Add_interaction_recv_oack(
+ TFTP_FIRST_FD,
+ FIRST_TIMEOUT_MILLISECONDS,
+ SERV_PORT,
+ tftpfs_ipv4_loopback,
+ options,
+ sizeof( options ),
+ true
+ );
+ _Tftp_Add_interaction_send_data(
+ TFTP_FIRST_FD,
+ block_num,
+ pos_in_file,
+ block_size,
+ get_file_content,
+ SERV_PORT,
+ tftpfs_ipv4_loopback,
+ true
+ );
+ pos_in_file += block_size;
+ _Tftp_Add_interaction_recv_ack(
+ TFTP_FIRST_FD,
+ FIRST_TIMEOUT_MILLISECONDS,
+ SERV_PORT,
+ tftpfs_ipv4_loopback,
+ block_num++,
+ true
+ );
+ _Tftp_Add_interaction_send_data(
+ TFTP_FIRST_FD,
+ block_num,
+ pos_in_file,
+ block_size,
+ get_file_content,
+ SERV_PORT,
+ tftpfs_ipv4_loopback,
+ true
+ );
+ pos_in_file += block_size;
+ _Tftp_Add_interaction_recv_ack(
+ TFTP_FIRST_FD,
+ FIRST_TIMEOUT_MILLISECONDS,
+ SERV_PORT,
+ tftpfs_ipv4_loopback,
+ block_num++,
+ true
+ );
+ _Tftp_Add_interaction_send_data(
+ TFTP_FIRST_FD,
+ block_num,
+ pos_in_file,
+ 1, /* Data bytes in this block */
+ get_file_content,
+ SERV_PORT,
+ tftpfs_ipv4_loopback,
+ true
+ );
+ pos_in_file += 1;
+ _Tftp_Add_interaction_recv_ack(
+ TFTP_FIRST_FD,
+ FIRST_TIMEOUT_MILLISECONDS,
+ SERV_PORT,
+ tftpfs_ipv4_loopback,
+ block_num++,
+ true
+ );
+ _Tftp_Add_interaction_close( TFTP_FIRST_FD, 0 );
+
+ bytes_written = write_tftp_file(
+ create_tftpfs_path( tftpfs_ipv4_loopback, tftpfs_file ),
+ pos_in_file, /* Size of file */
+ 333, /* Bytes written per call to write() */
+ &ctx->fd0
+ );
+ T_eq_int( bytes_written, pos_in_file );
+ T_no_more_interactions();
+}
+
+/*
+ * Write a file to the server using default options.
+ * The file is 23 data packet long. No timeouts, packet loss, ...
+ * Tests:
+ * * The client uses the default options
+ * (windowsize = 8 and blocksize = 1456).
+ * * The server sends the options in the same order the client
+ * did send them.
+ * * The 24th data packet signals the end of file transfer.
+ * * Client sends an empty data packet as end of file indicator.
+ * * The client handles files correctly which end exactly at
+ * a window border.
+ */
+T_TEST_CASE_FIXTURE(
+ write_simple_file_default_options,
+ &fixture_default_options
+)
+{
+ tftp_test_context *ctx = T_fixture_context();
+ int i;
+ int bytes_written;
+ size_t pos_in_file = 0;
+ uint16_t block_num = 1;
+ const char options[] =
+ TFTP_OPTION_BLKSIZE "\0"
+ RTEMS_XSTRING( TFTP_DEFAULT_BLOCK_SIZE ) "\0"
+ TFTP_OPTION_WINDOWSIZE "\0"
+ RTEMS_XSTRING( TFTP_DEFAULT_WINDOW_SIZE );
+
+ /* T_set_verbosity( T_VERBOSE ); */
+ _Tftp_Add_interaction_socket( AF_INET, SOCK_DGRAM, 0, TFTP_FIRST_FD );
+ _Tftp_Add_interaction_send_wrq(
+ TFTP_FIRST_FD,
+ tftpfs_file,
+ TFTP_STD_PORT,
+ tftpfs_ipv4_loopback,
+ TFTP_DEFAULT_BLOCK_SIZE,
+ TFTP_DEFAULT_WINDOW_SIZE,
+ true
+ );
+ _Tftp_Add_interaction_recv_oack(
+ TFTP_FIRST_FD,
+ FIRST_TIMEOUT_MILLISECONDS,
+ SERV_PORT,
+ tftpfs_ipv4_loopback,
+ options,
+ sizeof( options ),
+ true
+ );
+ for ( i = 0; i < 23; ++i ) {
+ _Tftp_Add_interaction_send_data(
+ TFTP_FIRST_FD,
+ block_num++,
+ pos_in_file,
+ TFTP_DEFAULT_BLOCK_SIZE,
+ get_file_content,
+ SERV_PORT,
+ tftpfs_ipv4_loopback,
+ true
+ );
+ pos_in_file += TFTP_DEFAULT_BLOCK_SIZE;
+ if ( i % 8 == 7 ) {
+ _Tftp_Add_interaction_recv_ack(
+ TFTP_FIRST_FD,
+ FIRST_TIMEOUT_MILLISECONDS,
+ SERV_PORT,
+ tftpfs_ipv4_loopback,
+ block_num - 1,
+ true
+ );
+ } else {
+ _Tftp_Add_interaction_recv_nothing(
+ TFTP_FIRST_FD,
+ DO_NOT_WAIT_FOR_ANY_TIMEOUT
+ );
+ }
+ }
+ _Tftp_Add_interaction_send_data(
+ TFTP_FIRST_FD,
+ block_num,
+ pos_in_file,
+ 0,
+ get_file_content,
+ SERV_PORT,
+ tftpfs_ipv4_loopback,
+ true
+ );
+ _Tftp_Add_interaction_recv_ack(
+ TFTP_FIRST_FD,
+ FIRST_TIMEOUT_MILLISECONDS,
+ SERV_PORT,
+ tftpfs_ipv4_loopback,
+ block_num++,
+ true
+ );
+ _Tftp_Add_interaction_close( TFTP_FIRST_FD, 0 );
+
+ bytes_written = write_tftp_file(
+ create_tftpfs_path( tftpfs_ipv4_loopback, tftpfs_file ),
+ pos_in_file, /* Size of file */
+ 333, /* Bytes written per call to write() */
+ &ctx->fd0
+ );
+ T_eq_int( bytes_written, pos_in_file );
+ T_no_more_interactions();
+}
+
+/*
+ * Write a file following exactly the scenario from RFC 7440.
+ * This test uses window size and block size options. There are lost packets.
+ * Tests:
+ * * The client uses non-default options
+ * (windowsize = 4 and blocksize = 12).
+ * * Test the scenario included in RFC 7440.
+ * * The server sends the options in the inverse order the client
+ * did send them.
+ * * The data of the file ends exactly at a window size border (i.e.
+ * after the last window the server sends a single empty DATA packet).
+ * * The test writes a file to the file system in chunks of 10 bytes.
+ */
+T_TEST_CASE_FIXTURE( write_file_rfc7440_scenario, &fixture_small_opt_size )
+{
+ tftp_test_context *ctx = T_fixture_context();
+ int i;
+ int bytes_written;
+ size_t pos_in_file = 0;
+ uint16_t block_num = 1;
+ const char options[] =
+ TFTP_OPTION_WINDOWSIZE"\0"
+ RTEMS_XSTRING( SMALL_WINDOW_SIZE ) "\0"
+ TFTP_OPTION_BLKSIZE "\0"
+ RTEMS_XSTRING( SMALL_BLOCK_SIZE );
+
+ /* T_set_verbosity( T_VERBOSE ); */
+ _Tftp_Add_interaction_socket( AF_INET, SOCK_DGRAM, 0, TFTP_FIRST_FD );
+ _Tftp_Add_interaction_send_wrq(
+ TFTP_FIRST_FD,
+ tftpfs_file,
+ TFTP_STD_PORT,
+ tftpfs_ipv4_loopback,
+ SMALL_BLOCK_SIZE,
+ SMALL_WINDOW_SIZE,
+ true
+ );
+ _Tftp_Add_interaction_recv_oack(
+ TFTP_FIRST_FD,
+ FIRST_TIMEOUT_MILLISECONDS,
+ SERV_PORT,
+ tftpfs_ipv4_loopback,
+ options,
+ sizeof( options ),
+ true
+ );
+ for ( i = 0; i < 6; ++i ) {
+ _Tftp_Add_interaction_send_data(
+ TFTP_FIRST_FD,
+ block_num++,
+ pos_in_file,
+ SMALL_BLOCK_SIZE,
+ get_file_content,
+ SERV_PORT,
+ tftpfs_ipv4_loopback,
+ true
+ );
+ pos_in_file += SMALL_BLOCK_SIZE;
+ if ( i % 4 == 3 ) {
+ _Tftp_Add_interaction_recv_ack(
+ TFTP_FIRST_FD,
+ FIRST_TIMEOUT_MILLISECONDS,
+ SERV_PORT,
+ tftpfs_ipv4_loopback,
+ block_num - 1,
+ true
+ );
+ } else {
+ _Tftp_Add_interaction_recv_nothing(
+ TFTP_FIRST_FD,
+ DO_NOT_WAIT_FOR_ANY_TIMEOUT
+ );
+ }
+ }
+ _Tftp_Add_interaction_send_data(
+ TFTP_FIRST_FD,
+ block_num,
+ pos_in_file,
+ SMALL_BLOCK_SIZE,
+ get_file_content,
+ SERV_PORT,
+ tftpfs_ipv4_loopback,
+ true
+ );
+ _Tftp_Add_interaction_recv_ack(
+ TFTP_FIRST_FD,
+ DO_NOT_WAIT_FOR_ANY_TIMEOUT,
+ SERV_PORT,
+ tftpfs_ipv4_loopback,
+ 5,
+ true
+ );
+ block_num = 6;
+ pos_in_file = (block_num - 1) * SMALL_BLOCK_SIZE;
+ for ( i = 0; i < 7; ++i ) {
+ _Tftp_Add_interaction_send_data(
+ TFTP_FIRST_FD,
+ block_num++,
+ pos_in_file,
+ SMALL_BLOCK_SIZE,
+ get_file_content,
+ SERV_PORT,
+ tftpfs_ipv4_loopback,
+ true
+ );
+ pos_in_file += SMALL_BLOCK_SIZE;
+ if ( i % 4 == 3 ) {
+ _Tftp_Add_interaction_recv_ack(
+ TFTP_FIRST_FD,
+ FIRST_TIMEOUT_MILLISECONDS,
+ SERV_PORT,
+ tftpfs_ipv4_loopback,
+ block_num - 1,
+ true
+ );
+ } else {
+ _Tftp_Add_interaction_recv_nothing(
+ TFTP_FIRST_FD,
+ DO_NOT_WAIT_FOR_ANY_TIMEOUT
+ );
+ }
+ }
+ _Tftp_Add_interaction_send_data(
+ TFTP_FIRST_FD,
+ block_num,
+ pos_in_file,
+ SMALL_BLOCK_SIZE,
+ get_file_content,
+ SERV_PORT,
+ tftpfs_ipv4_loopback,
+ true
+ );
+ _Tftp_Add_interaction_recv_nothing(
+ TFTP_FIRST_FD,
+ FIRST_TIMEOUT_MILLISECONDS
+ );
+ block_num = 10;
+ pos_in_file = (block_num - 1) * SMALL_BLOCK_SIZE;
+ for ( i = 0; i < 4; ++i ) {
+ _Tftp_Add_interaction_send_data(
+ TFTP_FIRST_FD,
+ block_num++,
+ pos_in_file,
+ SMALL_BLOCK_SIZE,
+ get_file_content,
+ SERV_PORT,
+ tftpfs_ipv4_loopback,
+ true
+ );
+ pos_in_file += SMALL_BLOCK_SIZE;
+ if ( i % 4 == 3 ) {
+ _Tftp_Add_interaction_recv_ack(
+ TFTP_FIRST_FD,
+ FIRST_TIMEOUT_MILLISECONDS,
+ SERV_PORT,
+ tftpfs_ipv4_loopback,
+ block_num - 1,
+ true
+ );
+ } else {
+ _Tftp_Add_interaction_recv_nothing(
+ TFTP_FIRST_FD,
+ DO_NOT_WAIT_FOR_ANY_TIMEOUT
+ );
+ }
+ }
+ _Tftp_Add_interaction_send_data(
+ TFTP_FIRST_FD,
+ block_num,
+ pos_in_file,
+ 0,
+ get_file_content,
+ SERV_PORT,
+ tftpfs_ipv4_loopback,
+ true
+ );
+ _Tftp_Add_interaction_recv_ack(
+ TFTP_FIRST_FD,
+ FIRST_TIMEOUT_MILLISECONDS,
+ SERV_PORT,
+ tftpfs_ipv4_loopback,
+ block_num++,
+ true
+ );
+ _Tftp_Add_interaction_close( TFTP_FIRST_FD, 0 );
+
+ bytes_written = write_tftp_file(
+ create_tftpfs_path( tftpfs_ipv4_loopback, tftpfs_file ),
+ pos_in_file, /* Size of file */
+ 10, /* Bytes written per call to write() */
+ &ctx->fd0
+ );
+ T_eq_int( bytes_written, pos_in_file );
+ T_no_more_interactions();
+}
+
+/*
+ * Write a file using windowsize = 4. All kinds of packet loss, out of
+ * order packets and duplicated ACK packets appear.
+ * This test uses window size and block size options. It is a stress test
+ * for all kind of network problems which can appear during a transfer
+ * of a file with window size larger than 1.
+ * Tests:
+ * * The server repeats a whole window (timeout).
+ * * The client receives a duplicated ACK packet (directly in sequence).
+ * * The client receives a duplicated ACK (after sending a window).
+ * * The client receives an ACK with a block number which is not
+ * the end of the current window.
+ * * The client receives an very old ACK in the middle of a window.
+ * * The client receives an very old ACK at the end of a window.
+ * * The client receives an ACK for a not yet send DATA packet in the
+ * middle of a window (should be ignored or cause a error).
+ * * The client receives an ACK for a not yet send DATA packet at the
+ * end of a window (should be ignored or cause a error).
+ * * The client receives an ACK after sending a full window.
+ * * The client receives an ACK before all DATA packets of a
+ * window have been sent.
+ * * The client must repeat the first window completely (timeout).
+ * * The client must repeat the first window partially.
+ * * The client must repeat the last window completely (timeout).
+ * * The client must repeat the last window partially.
+ * * Windows with errors in between appear consecutively, without
+ * error free windows in between.
+ * * The test writes a file to the file system in chunks of block size.
+ */
+T_TEST_CASE_FIXTURE( write_file_windowsize_trouble, &fixture_small_opt_size )
+{
+ tftp_test_context *ctx = T_fixture_context();
+ int i;
+ int bytes_written;
+ size_t pos_in_file = 0;
+ uint16_t block_num = 1;
+ int timeout = FIRST_TIMEOUT_MILLISECONDS;
+ const char options[] =
+ TFTP_OPTION_BLKSIZE "\0"
+ RTEMS_XSTRING( SMALL_BLOCK_SIZE ) "\0"
+ TFTP_OPTION_WINDOWSIZE"\0"
+ RTEMS_XSTRING( SMALL_WINDOW_SIZE );
+ /*
+ * A positive number is the number of an ACK packet received
+ * at the end of window.
+ * A 9999 indicates a timeout when waiting for an ACK packet.
+ * A zero indicates no ACK packet is received when checking for it.
+ * A positive number >= 10000 is the number+10000 of an ACK packet received
+ * while only checking for a packet.
+ * A negative number is the number of a DATA packet send
+ * at the end of a window.
+ * A negative number <= -10000 is the number-10000 of an *empty* DATA
+ * packet send.
+ * Each line corresponds to a window.
+ */
+ int16_t pkg_sequence[] = {
+ -1, 0, -2, 0, -3, 0, -4, 9999, /* First window, trigger full repeat */
+ -1, 0, -2, 0, -3, 0, -4, 2, /* ACK at end of window;
+ first window must be partially repeated */
+ -3, 0, -4, 0, -5, 0, -6, 6, /* Normal sequence */
+ -7, 0, -8, 0, -9, 0, -10, 6, /* Duplicate ACK */
+ -7, 10006, /* Duplicate ACK; ACK before sending all packets of a window */
+ -7, 0, -8, 10008, /* ACK before sending all packets of a window;
+ ACK is not at the window end */
+ -9, 10007, 0, -10, 10013, 0, -11, 0, -12, 12, /* Reception of very old ACK;
+ Reception of future ACK (The
+ wrong "future" ACK must be
+ beyond the block size)
+ in the middle of a window */
+ -13, 0, -14, 0, -15, 0, -16, 11, 17, 16, /* Reception of very old ACK;
+ Reception of future ACK at the
+ end of a window */
+ -17, 0, -18, 0, -10019, 9999, /* Last window timeout, trigger full repeat */
+ -17, 0, -18, 0, -10019, 16, /* Last window, duplicated ACK */
+ -17, 0, -18, 10017, /* Last window, ACK before sending all packets */
+ -18, 0, -10019, 19 /* Last window partially repeated */
+ };
+
+ /* T_set_verbosity( T_VERBOSE ); */
+ _Tftp_Add_interaction_socket( AF_INET, SOCK_DGRAM, 0, TFTP_FIRST_FD );
+ _Tftp_Add_interaction_send_wrq(
+ TFTP_FIRST_FD,
+ tftpfs_file,
+ TFTP_STD_PORT,
+ tftpfs_ipv4_loopback,
+ SMALL_BLOCK_SIZE,
+ SMALL_WINDOW_SIZE,
+ true
+ );
+ _Tftp_Add_interaction_recv_oack(
+ TFTP_FIRST_FD,
+ FIRST_TIMEOUT_MILLISECONDS,
+ SERV_PORT,
+ tftpfs_ipv4_loopback,
+ options,
+ sizeof( options ),
+ true
+ );
+ for ( i = 0; i < RTEMS_ARRAY_SIZE( pkg_sequence ); ++i ) {
+ if ( pkg_sequence[i] == 0 ) {
+ _Tftp_Add_interaction_recv_nothing(
+ TFTP_FIRST_FD,
+ DO_NOT_WAIT_FOR_ANY_TIMEOUT
+ );
+ timeout = FIRST_TIMEOUT_MILLISECONDS;
+ } else if ( pkg_sequence[i] == 9999 ) {
+ _Tftp_Add_interaction_recv_nothing(
+ TFTP_FIRST_FD,
+ timeout
+ );
+ timeout = FIRST_TIMEOUT_MILLISECONDS;
+ } else if ( pkg_sequence[i] >= 10000 ) {
+ block_num = pkg_sequence[i] - 10000;
+ _Tftp_Add_interaction_recv_ack(
+ TFTP_FIRST_FD,
+ DO_NOT_WAIT_FOR_ANY_TIMEOUT,
+ SERV_PORT,
+ tftpfs_ipv4_loopback,
+ block_num++,
+ true
+ );
+ timeout = FIRST_TIMEOUT_MILLISECONDS;
+ } else if ( pkg_sequence[i] > 0 ) {
+ block_num = pkg_sequence[i];
+ _Tftp_Add_interaction_recv_ack(
+ TFTP_FIRST_FD,
+ timeout,
+ SERV_PORT,
+ tftpfs_ipv4_loopback,
+ block_num++,
+ true
+ );
+ timeout = FIRST_TIMEOUT_MILLISECONDS;
+ } else if ( pkg_sequence[i] <= -10000 ) {
+ block_num = -pkg_sequence[i] - 10000;
+ pos_in_file = (block_num - 1) * SMALL_BLOCK_SIZE;
+ _Tftp_Add_interaction_send_data(
+ TFTP_FIRST_FD,
+ block_num++,
+ pos_in_file,
+ 0, /* Number of bytes transferred */
+ get_file_content,
+ SERV_PORT,
+ tftpfs_ipv4_loopback,
+ true
+ );
+ timeout = FIRST_TIMEOUT_MILLISECONDS;
+ } else {
+ block_num = -pkg_sequence[i];
+ pos_in_file = (block_num - 1) * SMALL_BLOCK_SIZE;
+ _Tftp_Add_interaction_send_data(
+ TFTP_FIRST_FD,
+ block_num++,
+ pos_in_file,
+ SMALL_BLOCK_SIZE,
+ get_file_content,
+ SERV_PORT,
+ tftpfs_ipv4_loopback,
+ true
+ );
+ timeout = FIRST_TIMEOUT_MILLISECONDS;
+ pos_in_file += SMALL_BLOCK_SIZE;
+ }
+ }
+ _Tftp_Add_interaction_close( TFTP_FIRST_FD, 0 );
+
+ bytes_written = write_tftp_file(
+ create_tftpfs_path( tftpfs_ipv4_loopback, tftpfs_file ),
+ pos_in_file, /* Size of file */
+ SMALL_BLOCK_SIZE, /* Bytes written per call to write() */
+ &ctx->fd0
+ );
+ T_eq_int( bytes_written, pos_in_file );
+ T_no_more_interactions();
+}
+
+/*
+ * Write a file to the server where the server sends an OACK without options.
+ * The file is half a data packet long. No timeouts, packet loss, ...
+ * Tests:
+ * * The client processes an OACK without any options in it correctly.
+ * * The client uses the RFC1350 block size because the server does
+ * not agree to the options send.
+ * * The first data packet is half full and signals the end of the transfer.
+ * * The test reads a file from the file system in chunks of double block size.
+ */
+T_TEST_CASE_FIXTURE( write_tiny_file_OACK_no_options, &fixture_large_blocksize )
+{
+ tftp_test_context *ctx = T_fixture_context();
+ int bytes_written;
+ size_t pos_in_file = 0;
+ uint16_t block_num = 1;
+ const char options[] = {};
+
+ /* T_set_verbosity( T_VERBOSE ); */
+ _Tftp_Add_interaction_socket( AF_INET, SOCK_DGRAM, 0, TFTP_FIRST_FD );
+ _Tftp_Add_interaction_send_wrq(
+ TFTP_FIRST_FD,
+ tftpfs_file,
+ TFTP_STD_PORT,
+ tftpfs_ipv4_loopback,
+ LARGE_BLOCK_SIZE,
+ NO_WINDOW_SIZE_OPTION,
+ true
+ );
+ _Tftp_Add_interaction_recv_oack(
+ TFTP_FIRST_FD,
+ FIRST_TIMEOUT_MILLISECONDS,
+ SERV_PORT,
+ tftpfs_ipv4_loopback,
+ options,
+ sizeof( options ),
+ true
+ );
+ _Tftp_Add_interaction_send_data(
+ TFTP_FIRST_FD,
+ block_num,
+ pos_in_file,
+ TFTP_RFC1350_BLOCK_SIZE / 2,
+ get_file_content,
+ SERV_PORT,
+ tftpfs_ipv4_loopback,
+ true
+ );
+ pos_in_file += TFTP_RFC1350_BLOCK_SIZE / 2;
+ _Tftp_Add_interaction_recv_ack(
+ TFTP_FIRST_FD,
+ FIRST_TIMEOUT_MILLISECONDS,
+ SERV_PORT,
+ tftpfs_ipv4_loopback,
+ block_num++,
+ true
+ );
+ _Tftp_Add_interaction_close( TFTP_FIRST_FD, 0 );
+
+ bytes_written = write_tftp_file(
+ create_tftpfs_path( tftpfs_ipv4_loopback, tftpfs_file ),
+ pos_in_file, /* Size of file */
+ 2 * TFTP_RFC1350_BLOCK_SIZE, /* Bytes written per call to write() */
+ &ctx->fd0
+ );
+ T_eq_int( bytes_written, pos_in_file );
+ T_no_more_interactions();
+}
+
+/*
+ * Read a file and when the server responses with an ERROR to options
+ * fallback to no options.
+ * The file is one byte long. No timeouts, packet loss, ...
+ * Tests:
+ * * The client uses windowsize and blksize option in the first RRQ.
+ * * Upon reception of an ERROR packet from the server, the client
+ * re-tries opening the session using an RRQ without options.
+ * * The server accepts the RRQ without options by sending a DATA packet.
+ * * The second RRQ is sent to the TFTP server port 69 and not to the
+ * port from which the first ERROR packet came from.
+ * * The first data packet contains a single byte and signals the
+ * end of the transfer.
+ */
+T_TEST_CASE_FIXTURE( read_file_fallback_to_no_options,
+ &fixture_default_options )
+{
+ tftp_test_context *ctx = T_fixture_context();
+ int bytes_read;
+ uint16_t block_num = 1;
+ size_t pos_in_file = 0;
+
+ /* T_set_verbosity( T_VERBOSE ); */
+ _Tftp_Add_interaction_socket( AF_INET, SOCK_DGRAM, 0, TFTP_FIRST_FD );
+ _Tftp_Add_interaction_send_rrq(
+ TFTP_FIRST_FD,
+ tftpfs_file,
+ TFTP_STD_PORT,
+ tftpfs_ipv4_loopback,
+ TFTP_DEFAULT_BLOCK_SIZE,
+ TFTP_DEFAULT_WINDOW_SIZE,
+ true
+ );
+ _Tftp_Add_interaction_recv_error(
+ TFTP_FIRST_FD,
+ FIRST_TIMEOUT_MILLISECONDS,
+ SERV_PORT,
+ tftpfs_ipv4_loopback,
+ TFTP_ERROR_CODE_OPTION_NEGO,
+ "Don't like options",
+ true
+ );
+ _Tftp_Add_interaction_send_rrq(
+ TFTP_FIRST_FD,
+ tftpfs_file,
+ TFTP_STD_PORT,
+ tftpfs_ipv4_loopback,
+ NO_BLOCK_SIZE_OPTION,
+ NO_WINDOW_SIZE_OPTION,
+ true
+ );
+ _Tftp_Add_interaction_recv_data(
+ TFTP_FIRST_FD,
+ FIRST_TIMEOUT_MILLISECONDS,
+ SERV_PORT,
+ tftpfs_ipv4_loopback,
+ block_num,
+ pos_in_file,
+ 1, /* Number of bytes transferred */
+ get_file_content,
+ true
+ );
+ pos_in_file += 1;
+ _Tftp_Add_interaction_send_ack(
+ TFTP_FIRST_FD,
+ block_num++,
+ SERV_PORT,
+ tftpfs_ipv4_loopback,
+ true
+ );
+ _Tftp_Add_interaction_close( TFTP_FIRST_FD, 0 );
+
+ bytes_read = read_tftp_file(
+ create_tftpfs_path( tftpfs_ipv4_loopback, tftpfs_file ),
+ TFTP_DEFAULT_BLOCK_SIZE / 2, /* Bytes read per call to read() */
+ SIZE_MAX,
+ &ctx->fd0
+ );
+ T_eq_int( bytes_read, pos_in_file );
+ T_no_more_interactions();
+}
+
+/*
+ * Read a file from the server but the server responds with
+ * an ERROR to all RRQ with and without options.
+ * The file is one byte long. No timeouts, packet loss, ...
+ * Tests:
+ * * The client uses windowsize and blksize option in the first RRQ.
+ * * Upon reception of an ERROR packet from the server, the client
+ * re-tries opening a session using an RRQ without options.
+ * * The second RRQ is sent to the TFTP server port 69 and not to the
+ * port from which the first ERROR packet came from.
+ * * The server does not accept the RRQ without options
+ * and responds again with an ERROR packet.
+ * * The client ends all attempts to create a connection after
+ * receiving an ERROR packet to an RRQ without options.
+ * * The client signals the error to the user.
+ */
+T_TEST_CASE_FIXTURE( read_file_useless_fallback_to_no_options,
+ &fixture_default_options )
+{
+ tftp_test_context *ctx = T_fixture_context();
+ int bytes_read;
+
+ /* T_set_verbosity( T_VERBOSE ); */
+ _Tftp_Add_interaction_socket( AF_INET, SOCK_DGRAM, 0, TFTP_FIRST_FD );
+ _Tftp_Add_interaction_send_rrq(
+ TFTP_FIRST_FD,
+ tftpfs_file,
+ TFTP_STD_PORT,
+ tftpfs_ipv4_loopback,
+ TFTP_DEFAULT_BLOCK_SIZE,
+ TFTP_DEFAULT_WINDOW_SIZE,
+ true
+ );
+ _Tftp_Add_interaction_recv_error(
+ TFTP_FIRST_FD,
+ FIRST_TIMEOUT_MILLISECONDS,
+ SERV_PORT,
+ tftpfs_ipv4_loopback,
+ TFTP_ERROR_CODE_ILLEGAL,
+ "Don't like options",
+ true
+ );
+ _Tftp_Add_interaction_send_rrq(
+ TFTP_FIRST_FD,
+ tftpfs_file,
+ TFTP_STD_PORT,
+ tftpfs_ipv4_loopback,
+ NO_BLOCK_SIZE_OPTION,
+ NO_WINDOW_SIZE_OPTION,
+ true
+ );
+ _Tftp_Add_interaction_recv_error(
+ TFTP_FIRST_FD,
+ FIRST_TIMEOUT_MILLISECONDS,
+ SERV_PORT,
+ tftpfs_ipv4_loopback,
+ TFTP_ERROR_CODE_ILLEGAL,
+ "Go away",
+ true
+ );
+ _Tftp_Add_interaction_close( TFTP_FIRST_FD, 0 );
+
+ bytes_read = read_tftp_file(
+ create_tftpfs_path( tftpfs_ipv4_loopback, tftpfs_file ),
+ TFTP_DEFAULT_BLOCK_SIZE / 2, /* Bytes read per call to read() */
+ SIZE_MAX,
+ &ctx->fd0
+ );
+ T_eq_int( errno, EINVAL );
+ T_eq_int( bytes_read, 0 );
+ T_no_more_interactions();
+}
+
+/*
+ * Write a file to the server and the server responses with an ACK packet.
+ * The file is half a data packet long. No timeouts, packet loss, ...
+ * Tests:
+ * * The client uses windowsize and blksize option in the WRQ.
+ * * The client uses the RFC1350 option values for the data transfer
+ * because the server responded with an ACK packet.
+ * * The whole package sequence behaves as if only RFC1350 was used.
+ * * The first data packet is half filled and signals the end of the
+ * transfer.
+ */
+T_TEST_CASE_FIXTURE( write_file_ACK_instead_of_OACK, &fixture_default_options )
+{
+ tftp_test_context *ctx = T_fixture_context();
+ int bytes_written;
+ size_t pos_in_file = 0;
+ uint16_t block_num = 0;
+
+ /* T_set_verbosity( T_VERBOSE ); */
+ _Tftp_Add_interaction_socket( AF_INET, SOCK_DGRAM, 0, TFTP_FIRST_FD );
+ _Tftp_Add_interaction_send_wrq(
+ TFTP_FIRST_FD,
+ tftpfs_file,
+ TFTP_STD_PORT,
+ tftpfs_ipv4_loopback,
+ TFTP_DEFAULT_BLOCK_SIZE,
+ TFTP_DEFAULT_WINDOW_SIZE,
+ true
+ );
+ _Tftp_Add_interaction_recv_ack(
+ TFTP_FIRST_FD,
+ FIRST_TIMEOUT_MILLISECONDS,
+ SERV_PORT,
+ tftpfs_ipv4_loopback,
+ block_num++,
+ true
+ );
+ _Tftp_Add_interaction_send_data(
+ TFTP_FIRST_FD,
+ block_num,
+ pos_in_file,
+ TFTP_RFC1350_BLOCK_SIZE / 2,
+ get_file_content,
+ SERV_PORT,
+ tftpfs_ipv4_loopback,
+ true
+ );
+ pos_in_file += TFTP_RFC1350_BLOCK_SIZE / 2;
+ _Tftp_Add_interaction_recv_ack(
+ TFTP_FIRST_FD,
+ FIRST_TIMEOUT_MILLISECONDS,
+ SERV_PORT,
+ tftpfs_ipv4_loopback,
+ block_num++,
+ true
+ );
+ _Tftp_Add_interaction_close( TFTP_FIRST_FD, 0 );
+
+ bytes_written = write_tftp_file(
+ create_tftpfs_path( tftpfs_ipv4_loopback, tftpfs_file ),
+ pos_in_file, /* Size of file */
+ 2 * TFTP_RFC1350_BLOCK_SIZE, /* Bytes written per call to write() */
+ &ctx->fd0
+ );
+ T_eq_int( bytes_written, pos_in_file );
+ T_no_more_interactions();
+}
+
+/*
+ * Write a file and when the server responses with an ERROR to options
+ * fallback to no options.
+ * The file is half a data packet long. No timeouts, packet loss, ...
+ * Tests:
+ * * The client uses windowsize and blksize options in the first WRQ.
+ * * Upon reception of an ERROR from the server, the client re-tries
+ * opening a session using a WRQ without options.
+ * * The second WRQ is sent to the TFTP server port 69 and not to the
+ * port from which the first ERROR packet came from.
+ * * The server accepts the WRQ without options by sending an ACK packet.
+ * * The first data packet is half filled and signals the end of the transfer.
+ */
+T_TEST_CASE_FIXTURE( write_file_fallback_to_no_options,
+ &fixture_default_options )
+{
+ tftp_test_context *ctx = T_fixture_context();
+ int bytes_written;
+ size_t pos_in_file = 0;
+ uint16_t block_num = 0;
+
+ /* T_set_verbosity( T_VERBOSE ); */
+ _Tftp_Add_interaction_socket( AF_INET, SOCK_DGRAM, 0, TFTP_FIRST_FD );
+ _Tftp_Add_interaction_send_wrq(
+ TFTP_FIRST_FD,
+ tftpfs_file,
+ TFTP_STD_PORT,
+ tftpfs_ipv4_loopback,
+ TFTP_DEFAULT_BLOCK_SIZE,
+ TFTP_DEFAULT_WINDOW_SIZE,
+ true
+ );
+ _Tftp_Add_interaction_recv_error(
+ TFTP_FIRST_FD,
+ FIRST_TIMEOUT_MILLISECONDS,
+ SERV_PORT,
+ tftpfs_ipv4_loopback,
+ TFTP_ERROR_CODE_ILLEGAL,
+ "Don't like options",
+ true
+ );
+ _Tftp_Add_interaction_send_wrq(
+ TFTP_FIRST_FD,
+ tftpfs_file,
+ TFTP_STD_PORT,
+ tftpfs_ipv4_loopback,
+ NO_BLOCK_SIZE_OPTION,
+ NO_WINDOW_SIZE_OPTION,
+ true
+ );
+ _Tftp_Add_interaction_recv_ack(
+ TFTP_FIRST_FD,
+ FIRST_TIMEOUT_MILLISECONDS,
+ SERV_PORT,
+ tftpfs_ipv4_loopback,
+ block_num++,
+ true
+ );
+ _Tftp_Add_interaction_send_data(
+ TFTP_FIRST_FD,
+ block_num,
+ pos_in_file,
+ TFTP_RFC1350_BLOCK_SIZE / 2,
+ get_file_content,
+ SERV_PORT,
+ tftpfs_ipv4_loopback,
+ true
+ );
+ pos_in_file += TFTP_RFC1350_BLOCK_SIZE / 2;
+ _Tftp_Add_interaction_recv_ack(
+ TFTP_FIRST_FD,
+ FIRST_TIMEOUT_MILLISECONDS,
+ SERV_PORT,
+ tftpfs_ipv4_loopback,
+ block_num++,
+ true
+ );
+ _Tftp_Add_interaction_close( TFTP_FIRST_FD, 0 );
+
+ bytes_written = write_tftp_file(
+ create_tftpfs_path( tftpfs_ipv4_loopback, tftpfs_file ),
+ pos_in_file, /* Size of file */
+ 2 * TFTP_RFC1350_BLOCK_SIZE, /* Bytes written per call to write() */
+ &ctx->fd0
+ );
+ T_eq_int( bytes_written, pos_in_file );
+ T_no_more_interactions();
+}
+
+/*
+ * The server sends a malformed OACK: The final 0 byte is missing.
+ */
+T_TEST_CASE_FIXTURE( OACK_without_null, &fixture_default_options )
+{
+ tftp_test_context *ctx = T_fixture_context();
+ int bytes_read;
+ const char options[] = { 'b', 'l', 'k', 's', 'i', 'z', 'e', '\0', '1', '2' };
+
+ /* T_set_verbosity( T_VERBOSE ); */
+ _Tftp_Add_interaction_socket( AF_INET, SOCK_DGRAM, 0, TFTP_FIRST_FD );
+ _Tftp_Add_interaction_send_rrq(
+ TFTP_FIRST_FD,
+ tftpfs_file,
+ TFTP_STD_PORT,
+ tftpfs_ipv4_loopback,
+ TFTP_DEFAULT_BLOCK_SIZE,
+ TFTP_DEFAULT_WINDOW_SIZE,
+ true
+ );
+ _Tftp_Add_interaction_recv_oack(
+ TFTP_FIRST_FD,
+ FIRST_TIMEOUT_MILLISECONDS,
+ SERV_PORT,
+ tftpfs_ipv4_loopback,
+ options,
+ sizeof( options ),
+ true
+ );
+ _Tftp_Add_interaction_send_error(
+ TFTP_FIRST_FD,
+ TFTP_ERROR_CODE_OPTION_NEGO,
+ SERV_PORT,
+ tftpfs_ipv4_loopback,
+ true
+ );
+ _Tftp_Add_interaction_close( TFTP_FIRST_FD, 0 );
+
+ bytes_read = read_tftp_file(
+ create_tftpfs_path( tftpfs_ipv4_loopback, tftpfs_file ),
+ LARGE_BLOCK_SIZE, /* Bytes read per call to read() */
+ SIZE_MAX,
+ &ctx->fd0
+ );
+ T_eq_int( errno, EPROTO );
+ T_eq_int( bytes_read, 0 );
+ T_no_more_interactions();
+}
+
+/*
+ * Server sends a malformed OACK packet: The value of the option is missing.
+ */
+T_TEST_CASE_FIXTURE( OACK_without_option_value, &fixture_default_options )
+{
+ tftp_test_context *ctx = T_fixture_context();
+ int bytes_read;
+ const char options[] = TFTP_OPTION_BLKSIZE;
+
+ /* T_set_verbosity( T_VERBOSE ); */
+ _Tftp_Add_interaction_socket( AF_INET, SOCK_DGRAM, 0, TFTP_FIRST_FD );
+ _Tftp_Add_interaction_send_rrq(
+ TFTP_FIRST_FD,
+ tftpfs_file,
+ TFTP_STD_PORT,
+ tftpfs_ipv4_loopback,
+ TFTP_DEFAULT_BLOCK_SIZE,
+ TFTP_DEFAULT_WINDOW_SIZE,
+ true
+ );
+ _Tftp_Add_interaction_recv_oack(
+ TFTP_FIRST_FD,
+ FIRST_TIMEOUT_MILLISECONDS,
+ SERV_PORT,
+ tftpfs_ipv4_loopback,
+ options,
+ sizeof( options ),
+ true
+ );
+ _Tftp_Add_interaction_send_error(
+ TFTP_FIRST_FD,
+ TFTP_ERROR_CODE_OPTION_NEGO,
+ SERV_PORT,
+ tftpfs_ipv4_loopback,
+ true
+ );
+ _Tftp_Add_interaction_close( TFTP_FIRST_FD, 0 );
+
+ bytes_read = read_tftp_file(
+ create_tftpfs_path( tftpfs_ipv4_loopback, tftpfs_file ),
+ LARGE_BLOCK_SIZE, /* Bytes read per call to read() */
+ SIZE_MAX,
+ &ctx->fd0
+ );
+ T_eq_int( errno, EPROTO );
+ T_eq_int( bytes_read, 0 );
+ T_no_more_interactions();
+}
+
+/*
+ * Server sends a malformed OACK packet: The option is unknown.
+ */
+T_TEST_CASE_FIXTURE( OACK_with_unknown_option, &fixture_default_options )
+{
+ tftp_test_context *ctx = T_fixture_context();
+ int bytes_read;
+ const char options[] =
+ "shoesize" "\0"
+ RTEMS_XSTRING( TFTP_DEFAULT_BLOCK_SIZE );
+
+ /* T_set_verbosity( T_VERBOSE ); */
+ _Tftp_Add_interaction_socket( AF_INET, SOCK_DGRAM, 0, TFTP_FIRST_FD );
+ _Tftp_Add_interaction_send_rrq(
+ TFTP_FIRST_FD,
+ tftpfs_file,
+ TFTP_STD_PORT,
+ tftpfs_ipv4_loopback,
+ TFTP_DEFAULT_BLOCK_SIZE,
+ TFTP_DEFAULT_WINDOW_SIZE,
+ true
+ );
+ _Tftp_Add_interaction_recv_oack(
+ TFTP_FIRST_FD,
+ FIRST_TIMEOUT_MILLISECONDS,
+ SERV_PORT,
+ tftpfs_ipv4_loopback,
+ options,
+ sizeof( options ),
+ true
+ );
+ _Tftp_Add_interaction_send_error(
+ TFTP_FIRST_FD,
+ TFTP_ERROR_CODE_OPTION_NEGO,
+ SERV_PORT,
+ tftpfs_ipv4_loopback,
+ true
+ );
+ _Tftp_Add_interaction_close( TFTP_FIRST_FD, 0 );
+
+ bytes_read = read_tftp_file(
+ create_tftpfs_path( tftpfs_ipv4_loopback, tftpfs_file ),
+ LARGE_BLOCK_SIZE, /* Bytes read per call to read() */
+ SIZE_MAX,
+ &ctx->fd0
+ );
+ T_eq_int( errno, EPROTO );
+ T_eq_int( bytes_read, 0 );
+ T_no_more_interactions();
+}
+
+/*
+ * Server sends a malformed OACK packet: The value of the option is
+ * not a number.
+ */
+T_TEST_CASE_FIXTURE( OACK_malformed_option_value, &fixture_default_options )
+{
+ tftp_test_context *ctx = T_fixture_context();
+ int bytes_read;
+ const char options[] = TFTP_OPTION_BLKSIZE "\0" "abc";
+
+ /* T_set_verbosity( T_VERBOSE ); */
+ _Tftp_Add_interaction_socket( AF_INET, SOCK_DGRAM, 0, TFTP_FIRST_FD );
+ _Tftp_Add_interaction_send_rrq(
+ TFTP_FIRST_FD,
+ tftpfs_file,
+ TFTP_STD_PORT,
+ tftpfs_ipv4_loopback,
+ TFTP_DEFAULT_BLOCK_SIZE,
+ TFTP_DEFAULT_WINDOW_SIZE,
+ true
+ );
+ _Tftp_Add_interaction_recv_oack(
+ TFTP_FIRST_FD,
+ FIRST_TIMEOUT_MILLISECONDS,
+ SERV_PORT,
+ tftpfs_ipv4_loopback,
+ options,
+ sizeof( options ),
+ true
+ );
+ _Tftp_Add_interaction_send_error(
+ TFTP_FIRST_FD,
+ TFTP_ERROR_CODE_OPTION_NEGO,
+ SERV_PORT,
+ tftpfs_ipv4_loopback,
+ true
+ );
+ _Tftp_Add_interaction_close( TFTP_FIRST_FD, 0 );
+
+ bytes_read = read_tftp_file(
+ create_tftpfs_path( tftpfs_ipv4_loopback, tftpfs_file ),
+ LARGE_BLOCK_SIZE, /* Bytes read per call to read() */
+ SIZE_MAX,
+ &ctx->fd0
+ );
+ T_eq_int( errno, EPROTO );
+ T_eq_int( bytes_read, 0 );
+ T_no_more_interactions();
+}
+
+/*
+ * Server sends a malformed OACK packet: The value of the option is empty.
+ */
+T_TEST_CASE_FIXTURE( OACK_with_empty_option_value, &fixture_default_options )
+{
+ tftp_test_context *ctx = T_fixture_context();
+ int bytes_read;
+ const char options[] = TFTP_OPTION_BLKSIZE "\0";
+
+ /* T_set_verbosity( T_VERBOSE ); */
+ _Tftp_Add_interaction_socket( AF_INET, SOCK_DGRAM, 0, TFTP_FIRST_FD );
+ _Tftp_Add_interaction_send_rrq(
+ TFTP_FIRST_FD,
+ tftpfs_file,
+ TFTP_STD_PORT,
+ tftpfs_ipv4_loopback,
+ TFTP_DEFAULT_BLOCK_SIZE,
+ TFTP_DEFAULT_WINDOW_SIZE,
+ true
+ );
+ _Tftp_Add_interaction_recv_oack(
+ TFTP_FIRST_FD,
+ FIRST_TIMEOUT_MILLISECONDS,
+ SERV_PORT,
+ tftpfs_ipv4_loopback,
+ options,
+ sizeof( options ),
+ true
+ );
+ _Tftp_Add_interaction_send_error(
+ TFTP_FIRST_FD,
+ TFTP_ERROR_CODE_OPTION_NEGO,
+ SERV_PORT,
+ tftpfs_ipv4_loopback,
+ true
+ );
+ _Tftp_Add_interaction_close( TFTP_FIRST_FD, 0 );
+
+ bytes_read = read_tftp_file(
+ create_tftpfs_path( tftpfs_ipv4_loopback, tftpfs_file ),
+ LARGE_BLOCK_SIZE, /* Bytes read per call to read() */
+ SIZE_MAX,
+ &ctx->fd0
+ );
+ T_eq_int( errno, EPROTO );
+ T_eq_int( bytes_read, 0 );
+ T_no_more_interactions();
+}
+
+/*
+ * Server sends a malformed OACK packet: The option name is empty.
+ */
+T_TEST_CASE_FIXTURE( OACK_with_empty_option_name, &fixture_default_options )
+{
+ tftp_test_context *ctx = T_fixture_context();
+ int bytes_read;
+ const char options[] = "\0" RTEMS_XSTRING( TFTP_DEFAULT_BLOCK_SIZE );
+
+ /* T_set_verbosity( T_VERBOSE ); */
+ _Tftp_Add_interaction_socket( AF_INET, SOCK_DGRAM, 0, TFTP_FIRST_FD );
+ _Tftp_Add_interaction_send_rrq(
+ TFTP_FIRST_FD,
+ tftpfs_file,
+ TFTP_STD_PORT,
+ tftpfs_ipv4_loopback,
+ TFTP_DEFAULT_BLOCK_SIZE,
+ TFTP_DEFAULT_WINDOW_SIZE,
+ true
+ );
+ _Tftp_Add_interaction_recv_oack(
+ TFTP_FIRST_FD,
+ FIRST_TIMEOUT_MILLISECONDS,
+ SERV_PORT,
+ tftpfs_ipv4_loopback,
+ options,
+ sizeof( options ),
+ true
+ );
+ _Tftp_Add_interaction_send_error(
+ TFTP_FIRST_FD,
+ TFTP_ERROR_CODE_OPTION_NEGO,
+ SERV_PORT,
+ tftpfs_ipv4_loopback,
+ true
+ );
+ _Tftp_Add_interaction_close( TFTP_FIRST_FD, 0 );
+
+ bytes_read = read_tftp_file(
+ create_tftpfs_path( tftpfs_ipv4_loopback, tftpfs_file ),
+ LARGE_BLOCK_SIZE, /* Bytes read per call to read() */
+ SIZE_MAX,
+ &ctx->fd0
+ );
+ T_eq_int( errno, EPROTO );
+ T_eq_int( bytes_read, 0 );
+ T_no_more_interactions();
+}
+
+/*
+ * Server sends a malformed OACK packet: The block size option value
+ * is too small.
+ */
+T_TEST_CASE_FIXTURE( OACK_blocksize_too_small, &fixture_default_options )
+{
+ tftp_test_context *ctx = T_fixture_context();
+ int bytes_read;
+ const char options[] = TFTP_OPTION_BLKSIZE "\0" "7";
+
+ /* T_set_verbosity( T_VERBOSE ); */
+ _Tftp_Add_interaction_socket( AF_INET, SOCK_DGRAM, 0, TFTP_FIRST_FD );
+ _Tftp_Add_interaction_send_rrq(
+ TFTP_FIRST_FD,
+ tftpfs_file,
+ TFTP_STD_PORT,
+ tftpfs_ipv4_loopback,
+ TFTP_DEFAULT_BLOCK_SIZE,
+ TFTP_DEFAULT_WINDOW_SIZE,
+ true
+ );
+ _Tftp_Add_interaction_recv_oack(
+ TFTP_FIRST_FD,
+ FIRST_TIMEOUT_MILLISECONDS,
+ SERV_PORT,
+ tftpfs_ipv4_loopback,
+ options,
+ sizeof( options ),
+ true
+ );
+ _Tftp_Add_interaction_send_error(
+ TFTP_FIRST_FD,
+ TFTP_ERROR_CODE_OPTION_NEGO,
+ SERV_PORT,
+ tftpfs_ipv4_loopback,
+ true
+ );
+ _Tftp_Add_interaction_close( TFTP_FIRST_FD, 0 );
+
+ bytes_read = read_tftp_file(
+ create_tftpfs_path( tftpfs_ipv4_loopback, tftpfs_file ),
+ LARGE_BLOCK_SIZE, /* Bytes read per call to read() */
+ SIZE_MAX,
+ &ctx->fd0
+ );
+ T_eq_int( errno, EPROTO );
+ T_eq_int( bytes_read, 0 );
+ T_no_more_interactions();
+}
+
+/*
+ * Server sends a malformed OACK packet: The block size option value
+ * is too large.
+ */
+T_TEST_CASE_FIXTURE( OACK_blocksize_too_large, &fixture_default_options )
+{
+ tftp_test_context *ctx = T_fixture_context();
+ int bytes_read;
+ const char options[] = TFTP_OPTION_BLKSIZE "\0" "1457";
+
+ /* T_set_verbosity( T_VERBOSE ); */
+ _Tftp_Add_interaction_socket( AF_INET, SOCK_DGRAM, 0, TFTP_FIRST_FD );
+ _Tftp_Add_interaction_send_rrq(
+ TFTP_FIRST_FD,
+ tftpfs_file,
+ TFTP_STD_PORT,
+ tftpfs_ipv4_loopback,
+ TFTP_DEFAULT_BLOCK_SIZE,
+ TFTP_DEFAULT_WINDOW_SIZE,
+ true
+ );
+ _Tftp_Add_interaction_recv_oack(
+ TFTP_FIRST_FD,
+ FIRST_TIMEOUT_MILLISECONDS,
+ SERV_PORT,
+ tftpfs_ipv4_loopback,
+ options,
+ sizeof( options ),
+ true
+ );
+ _Tftp_Add_interaction_send_error(
+ TFTP_FIRST_FD,
+ TFTP_ERROR_CODE_OPTION_NEGO,
+ SERV_PORT,
+ tftpfs_ipv4_loopback,
+ true
+ );
+ _Tftp_Add_interaction_close( TFTP_FIRST_FD, 0 );
+
+ bytes_read = read_tftp_file(
+ create_tftpfs_path( tftpfs_ipv4_loopback, tftpfs_file ),
+ LARGE_BLOCK_SIZE, /* Bytes read per call to read() */
+ SIZE_MAX,
+ &ctx->fd0
+ );
+ T_eq_int( errno, EPROTO );
+ T_eq_int( bytes_read, 0 );
+ T_no_more_interactions();
+}
+
+/*
+ * Server sends a malformed OACK packet: The windowsize option value
+ * is too small.
+ */
+T_TEST_CASE_FIXTURE( OACK_windowsize_too_small, &fixture_default_options )
+{
+ tftp_test_context *ctx = T_fixture_context();
+ int bytes_read;
+ const char options[] = TFTP_OPTION_WINDOWSIZE "\0" "0";
+
+ /* T_set_verbosity( T_VERBOSE ); */
+ _Tftp_Add_interaction_socket( AF_INET, SOCK_DGRAM, 0, TFTP_FIRST_FD );
+ _Tftp_Add_interaction_send_rrq(
+ TFTP_FIRST_FD,
+ tftpfs_file,
+ TFTP_STD_PORT,
+ tftpfs_ipv4_loopback,
+ TFTP_DEFAULT_BLOCK_SIZE,
+ TFTP_DEFAULT_WINDOW_SIZE,
+ true
+ );
+ _Tftp_Add_interaction_recv_oack(
+ TFTP_FIRST_FD,
+ FIRST_TIMEOUT_MILLISECONDS,
+ SERV_PORT,
+ tftpfs_ipv4_loopback,
+ options,
+ sizeof( options ),
+ true
+ );
+ _Tftp_Add_interaction_send_error(
+ TFTP_FIRST_FD,
+ TFTP_ERROR_CODE_OPTION_NEGO,
+ SERV_PORT,
+ tftpfs_ipv4_loopback,
+ true
+ );
+ _Tftp_Add_interaction_close( TFTP_FIRST_FD, 0 );
+
+ bytes_read = read_tftp_file(
+ create_tftpfs_path( tftpfs_ipv4_loopback, tftpfs_file ),
+ LARGE_BLOCK_SIZE, /* Bytes read per call to read() */
+ SIZE_MAX,
+ &ctx->fd0
+ );
+ T_eq_int( errno, EPROTO );
+ T_eq_int( bytes_read, 0 );
+ T_no_more_interactions();
+}
+
+/*
+ * Server sends a malformed OACK packet: The windowsize option is too large.
+ */
+T_TEST_CASE_FIXTURE( OACK_windowsize_too_large, &fixture_default_options )
+{
+ tftp_test_context *ctx = T_fixture_context();
+ int bytes_read;
+ const char options[] = TFTP_OPTION_WINDOWSIZE "\0" "9";
+
+ /* T_set_verbosity( T_VERBOSE ); */
+ _Tftp_Add_interaction_socket( AF_INET, SOCK_DGRAM, 0, TFTP_FIRST_FD );
+ _Tftp_Add_interaction_send_rrq(
+ TFTP_FIRST_FD,
+ tftpfs_file,
+ TFTP_STD_PORT,
+ tftpfs_ipv4_loopback,
+ TFTP_DEFAULT_BLOCK_SIZE,
+ TFTP_DEFAULT_WINDOW_SIZE,
+ true
+ );
+ _Tftp_Add_interaction_recv_oack(
+ TFTP_FIRST_FD,
+ FIRST_TIMEOUT_MILLISECONDS,
+ SERV_PORT,
+ tftpfs_ipv4_loopback,
+ options,
+ sizeof( options ),
+ true
+ );
+ _Tftp_Add_interaction_send_error(
+ TFTP_FIRST_FD,
+ TFTP_ERROR_CODE_OPTION_NEGO,
+ SERV_PORT,
+ tftpfs_ipv4_loopback,
+ true
+ );
+ _Tftp_Add_interaction_close( TFTP_FIRST_FD, 0 );
+
+ bytes_read = read_tftp_file(
+ create_tftpfs_path( tftpfs_ipv4_loopback, tftpfs_file ),
+ LARGE_BLOCK_SIZE, /* Bytes read per call to read() */
+ SIZE_MAX,
+ &ctx->fd0
+ );
+ T_eq_int( errno, EPROTO );
+ T_eq_int( bytes_read, 0 );
+ T_no_more_interactions();
+}
+
+/*
+ * Server sends a malformed OACK packet: There is a known but surplus option.
+ */
+T_TEST_CASE_FIXTURE( OACK_with_surplus_option, &fixture_large_blocksize )
+{
+ tftp_test_context *ctx = T_fixture_context();
+ int bytes_read;
+ const char options[] =
+ TFTP_OPTION_BLKSIZE "\0"
+ RTEMS_XSTRING( LARGE_BLOCK_SIZE ) "\0"
+ TFTP_OPTION_WINDOWSIZE "\0"
+ "1";
+
+ /* T_set_verbosity( T_VERBOSE ); */
+ _Tftp_Add_interaction_socket( AF_INET, SOCK_DGRAM, 0, TFTP_FIRST_FD );
+ _Tftp_Add_interaction_send_rrq(
+ TFTP_FIRST_FD,
+ tftpfs_file,
+ TFTP_STD_PORT,
+ tftpfs_ipv4_loopback,
+ LARGE_BLOCK_SIZE,
+ NO_WINDOW_SIZE_OPTION,
+ true
+ );
+ _Tftp_Add_interaction_recv_oack(
+ TFTP_FIRST_FD,
+ FIRST_TIMEOUT_MILLISECONDS,
+ SERV_PORT,
+ tftpfs_ipv4_loopback,
+ options,
+ sizeof( options ),
+ true
+ );
+ _Tftp_Add_interaction_send_error(
+ TFTP_FIRST_FD,
+ TFTP_ERROR_CODE_OPTION_NEGO,
+ SERV_PORT,
+ tftpfs_ipv4_loopback,
+ true
+ );
+ _Tftp_Add_interaction_close( TFTP_FIRST_FD, 0 );
+
+ bytes_read = read_tftp_file(
+ create_tftpfs_path( tftpfs_ipv4_loopback, tftpfs_file ),
+ LARGE_BLOCK_SIZE, /* Bytes read per call to read() */
+ SIZE_MAX,
+ &ctx->fd0
+ );
+ T_eq_int( errno, EPROTO );
+ T_eq_int( bytes_read, 0 );
+ T_no_more_interactions();
+}
+
+const char rtems_test_name[] = "TFTPFS";
+
+static void Init( rtems_task_argument argument )
+{
+ rtems_test_run( argument, TEST_STATE );
+}
+
+/*
+ * RTEMS configuration for tftp
+ */
+
+#define CONFIGURE_FILESYSTEM_TFTPFS
+#define CONFIGURE_MAXIMUM_FILE_DESCRIPTORS 4
+
+/*
+ * Simple RTEMS configuration
+ */
+
+#define CONFIGURE_APPLICATION_NEEDS_CLOCK_DRIVER
+#define CONFIGURE_APPLICATION_NEEDS_SIMPLE_CONSOLE_DRIVER
+
+#define CONFIGURE_MAXIMUM_TASKS 1
+
+#define CONFIGURE_RTEMS_INIT_TASKS_TABLE
+
+#define CONFIGURE_INIT_TASK_ATTRIBUTES RTEMS_FLOATING_POINT
+
+#define CONFIGURE_INIT
+
+#include <rtems/confdefs.h>
diff --git a/testsuites/fstests/tftpfs/tftpfs_interactions.c b/testsuites/fstests/tftpfs/tftpfs_interactions.c
new file mode 100644
index 0000000000..9ab026c5da
--- /dev/null
+++ b/testsuites/fstests/tftpfs/tftpfs_interactions.c
@@ -0,0 +1,984 @@
+/* SPDX-License-Identifier: BSD-2-Clause */
+
+/**
+ * @file
+ *
+ * @ingroup RTEMSTestSuiteTestsTFTPFS
+ *
+ * @brief This source file contains the implementation of network interaction
+ * functions related to the UDP network fake for tftpfs testing.
+ *
+ * The UDP Network Fake requires *interactions* between TFTP client and test
+ * (which emulates a TFTP server). The idea is that each test defines a
+ * sequence of interactions. In a successful test run all interactions must
+ * be carried out one-by-one till the *last* interaction is reached.
+ *
+ * Interactions appear when the TFTP client calls functions like
+ * sendto(), recvfrom(), or socket(). Here functions are defined
+ * which
+ *
+ * * handle such interactions and
+ * * permit the tests to easily defined the sequence of interactions.
+ */
+
+/*
+ * Copyright (C) 2022 embedded brains GmbH & Co. KG
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#include <stdio.h> /* sprintf() */
+#include <inttypes.h> /* printf() macros like PRId8 */
+#include <arpa/inet.h> /* ntohs() */
+#include <rtems/test.h>
+
+
+#include "tftpfs_interactions.h"
+#include "tftpfs_udp_network_fake.h"
+
+/*
+ * Interaction: socket()
+ */
+
+typedef struct interaction_data_socket {
+ int domain;
+ int type;
+ int protocol;
+ int result;
+} interaction_data_socket;
+
+static bool interact_socket( Tftp_Action *act, void *data )
+{
+ interaction_data_socket *d = data;
+ T_eq_int( act->data.socket.domain, d->domain );
+ T_eq_int( act->data.socket.type, d->type );
+ T_eq_int( act->data.socket.protocol, d->protocol );
+ if (
+ act->data.socket.domain != d->domain ||
+ act->data.socket.type != d->type ||
+ act->data.socket.protocol != d->protocol
+ ) {
+ return false;
+ }
+
+ act->data.socket.result = d->result;
+ return true;
+}
+
+void _Tftp_Add_interaction_socket(
+ int domain,
+ int type,
+ int protocol,
+ int result
+)
+{
+ interaction_data_socket *d;
+
+ d = _Tftp_Append_interaction(
+ TFTP_IA_KIND_SOCKET,
+ interact_socket,
+ sizeof( interaction_data_socket )
+ );
+
+ d->domain = domain;
+ d->type = type;
+ d->protocol = protocol;
+ d->result = result;
+}
+
+/*
+ * Interaction: close()
+ */
+
+typedef struct interaction_data_close {
+ int fd;
+ int result;
+} interaction_data_close;
+
+static bool interact_close( Tftp_Action *act, void *data )
+{
+ interaction_data_close *d = data;
+ T_eq_int( act->data.close.fd, d->fd );
+ if ( act->data.close.fd != d->fd ) {
+ return false;
+ }
+
+ act->data.close.result = d->result;
+ return true;
+}
+
+void _Tftp_Add_interaction_close( int fd, int result )
+{
+ interaction_data_close *d;
+
+ d = _Tftp_Append_interaction(
+ TFTP_IA_KIND_CLOSE,
+ interact_close,
+ sizeof( interaction_data_close )
+ );
+
+ d->fd = fd;
+ d->result = result;
+}
+
+/*
+ * Interaction: bind()
+ */
+
+typedef struct interaction_data_bind {
+ int fd;
+ int family;
+ int result;
+} interaction_data_bind;
+
+static bool interact_bind( Tftp_Action *act, void *data )
+{
+ interaction_data_bind *d = data;
+ T_eq_int( act->data.bind.fd, d->fd );
+ T_eq_int( act->data.bind.family, d->family );
+ if (
+ act->data.bind.fd != d->fd ||
+ act->data.bind.family != d->family
+ ) {
+ return false;
+ }
+
+ act->data.bind.result = d->result;
+ return true;
+}
+
+void _Tftp_Add_interaction_bind( int fd, int family, int result )
+{
+ interaction_data_bind *d;
+
+ d = _Tftp_Append_interaction(
+ TFTP_IA_KIND_BIND,
+ interact_bind,
+ sizeof( interaction_data_bind )
+ );
+
+ d->fd = fd;
+ d->family = family;
+ d->result = result;
+}
+
+/*
+ * Interaction: sendto()
+ */
+
+#define TFTP_MAX_FILENAME_STRLEN 12
+
+typedef struct interaction_data_sendto {
+ int fd;
+ uint16_t dest_port;
+ char dest_addr_str[TFTP_MAX_IP_ADDR_STRLEN];
+ bool result;
+ union {
+ struct {
+ uint16_t opcode;
+ char filename[TFTP_MAX_FILENAME_STRLEN];
+ uint16_t block_size;
+ uint16_t window_size;
+ } rwrq;
+ struct {
+ uint16_t block_num;
+ } ack;
+ struct {
+ uint16_t block_num;
+ size_t start;
+ size_t len;
+ uint8_t (*get_data)( size_t pos );
+ } data;
+ struct {
+ uint16_t error_code;
+ } error;
+ } content;
+} interaction_data_sendto;
+
+static bool check_filename_and_mode(
+ const char **buf,
+ size_t *max_len,
+ const char *filename
+)
+{
+ const char *str;
+ size_t len;
+
+ /* Make sure there is a 0 byte in the end before comparing strings */
+ if ( *max_len <= 0 ) { return false; };
+ T_quiet_eq_u8( *( *buf + *max_len - 1 ), '\0' );
+
+ str = *buf;
+ len = strlen( *buf ) + 1;
+ *buf += len;
+ *max_len -= len;
+ if ( strcmp( str, filename ) != 0 ) {
+ T_true( false, "Filename '%s' does not match '%s'", str, filename );
+ return false;
+ }
+ if ( *max_len <= 0 ) {
+ T_true( false, "Mode string missing." );
+ return false;
+ }
+
+ str = *buf;
+ len = strlen( *buf ) + 1;
+ *buf += len;
+ *max_len -= len;
+ if ( strcasecmp( str, TFTP_MODE_OCTET ) != 0 ) {
+ T_true( false, "Mode '%s' does not match '%s'", str, TFTP_MODE_OCTET );
+ return false;
+ }
+
+ return true;
+}
+
+static bool check_for_option(
+ const char **buf,
+ size_t *max_len,
+ const char *option_name,
+ const char *option_value
+)
+{
+ const char *str;
+ size_t len;
+
+ /* Make sure there is a 0 byte in the end before comparing strings */
+ if ( *max_len <= 0 ) { return false; };
+ T_quiet_eq_u8( *( *buf + *max_len - 1 ), '\0' );
+
+ str = *buf;
+ len = strlen( *buf ) + 1;
+ if ( strcasecmp( str, option_name ) != 0 ) {
+ return false;
+ }
+ *buf += len;
+ *max_len -= len;
+
+ if ( *max_len <= 0 ) {
+ T_true( false, "Option value for '%s' missing.", option_name );
+ return false;
+ }
+
+ str = *buf;
+ len = strlen( *buf ) + 1;
+ *buf += len;
+ *max_len -= len;
+ if ( strcmp( str, option_value ) != 0 ) {
+ T_true(
+ false,
+ "Option '%s': Actual value '%s' does not match '%s'",
+ option_name,
+ str,
+ option_value
+ );
+ return false;
+ }
+
+ return true;
+}
+
+static bool interact_sendto_common( Tftp_Action *act, void *data )
+{
+ interaction_data_sendto *d = data;
+ const Tftp_Packet *pkt = act->data.sendto.buf;
+
+ T_eq_int( act->data.sendto.fd, d->fd );
+ T_eq_int( act->data.sendto.flags, 0 );
+ T_eq_u16( act->data.sendto.dest_port, d->dest_port );
+ T_eq_str( act->data.sendto.dest_addr_str, d->dest_addr_str );
+ T_gt_sz( act->data.sendto.len, sizeof( pkt->opcode ) );
+ if (
+ act->data.sendto.fd != d->fd ||
+ act->data.sendto.flags != 0 ||
+ act->data.sendto.dest_port != d->dest_port ||
+ strcmp( act->data.sendto.dest_addr_str, d->dest_addr_str ) != 0 ||
+ act->data.sendto.len <= sizeof( pkt->opcode )
+ ) {
+ return false;
+ }
+
+ act->data.sendto.result = d->result ? act->data.sendto.len : -1;
+ return true;
+}
+
+static bool interact_sendto_rwrq( Tftp_Action *act, void *data )
+{
+ interaction_data_sendto *d = data;
+ const Tftp_Packet *pkt = act->data.sendto.buf;
+ size_t len = act->data.sendto.len - sizeof( pkt->opcode );
+ const char *buf = pkt->content.rrq.opts;
+ const char *tmp;
+ char block_size_buffer[6];
+ char window_size_buffer[6];
+
+ if ( !interact_sendto_common( act, data ) ) {
+ return false;
+ }
+
+ T_eq_u16( ntohs( pkt->opcode ), d->content.rwrq.opcode );
+ if ( ntohs( pkt->opcode ) != d->content.rwrq.opcode ) { return false; }
+ if ( !check_filename_and_mode( &buf, &len, d->content.rwrq.filename ) ) {
+ return false;
+ }
+
+ snprintf(
+ block_size_buffer,
+ sizeof( block_size_buffer ),
+ "%"PRIu16,
+ d->content.rwrq.block_size
+ );
+ snprintf(
+ window_size_buffer,
+ sizeof( window_size_buffer ),
+ "%"PRIu16,
+ d->content.rwrq.window_size
+ );
+
+ for ( tmp = buf; len > 0; ) {
+ if ( d->content.rwrq.block_size != NO_BLOCK_SIZE_OPTION &&
+ check_for_option(
+ &buf,
+ &len,
+ TFTP_OPTION_BLKSIZE,
+ block_size_buffer )) {
+ d->content.rwrq.block_size = NO_BLOCK_SIZE_OPTION;
+ } else if ( d->content.rwrq.window_size != NO_WINDOW_SIZE_OPTION &&
+ check_for_option(
+ &buf,
+ &len,
+ TFTP_OPTION_WINDOWSIZE,
+ window_size_buffer )) {
+ d->content.rwrq.window_size = NO_WINDOW_SIZE_OPTION;
+ } else {
+ T_true( false, "Error at option '%s'", tmp );
+ return false;
+ }
+ }
+
+ T_eq_sz( len, 0 ); /* Check that all data till the end has been read */
+
+ return true;
+}
+
+static bool interact_sendto_ack( Tftp_Action *act, void *data )
+{
+ interaction_data_sendto *d = data;
+ const Tftp_Packet *pkt = act->data.sendto.buf;
+ size_t pkt_size = sizeof( pkt->opcode ) + sizeof( pkt->content.ack );
+
+ if ( !interact_sendto_common( act, data ) ) {
+ return false;
+ }
+
+ T_eq_u16( ntohs( pkt->opcode ), TFTP_OPCODE_ACK );
+ T_eq_sz( act->data.sendto.len, pkt_size );
+ if ( ntohs( pkt->opcode ) != TFTP_OPCODE_ACK ||
+ act->data.sendto.len != pkt_size
+ ) {
+ return false;
+ }
+
+ T_eq_u16( ntohs( pkt->content.ack.block_num ), d->content.ack.block_num );
+ if ( ntohs( pkt->content.ack.block_num ) != d->content.ack.block_num ) {
+ return false;
+ }
+
+ return true;
+}
+
+static bool interact_sendto_data( Tftp_Action *act, void *data )
+{
+ interaction_data_sendto *d = data;
+ const Tftp_Packet *pkt = act->data.sendto.buf;
+ size_t pkt_size = sizeof( pkt->opcode ) +
+ sizeof( pkt->content.data.block_num ) + d->content.data.len;
+ size_t i;
+
+ if ( !interact_sendto_common( act, data ) ) {
+ return false;
+ }
+
+ T_eq_u16( ntohs( pkt->opcode ), TFTP_OPCODE_DATA );
+ T_eq_sz( act->data.sendto.len, pkt_size );
+ if ( ntohs( pkt->opcode ) != TFTP_OPCODE_DATA ||
+ act->data.sendto.len != pkt_size
+ ) {
+ return false;
+ }
+
+ T_eq_u16( ntohs( pkt->content.ack.block_num ), d->content.ack.block_num );
+ if ( ntohs( pkt->content.ack.block_num ) != d->content.ack.block_num ) {
+ return false;
+ }
+
+ for ( i = 0; i < d->content.data.len; ++i ) {
+ if ( pkt->content.data.bytes[i] !=
+ d->content.data.get_data( d->content.data.start + i ) ) {
+ T_true(
+ false,
+ "Expected byte %02"PRIx8" but TFTP client sent %02"PRIx8
+ " at position %zu",
+ d->content.data.get_data( d->content.data.start + i ),
+ pkt->content.data.bytes[i],
+ d->content.data.start + i
+ );
+ return false;
+ }
+ }
+
+ return true;
+}
+
+static bool interact_sendto_error( Tftp_Action *act, void *data )
+{
+ interaction_data_sendto *d = data;
+ const Tftp_Packet *pkt = act->data.sendto.buf;
+ size_t pkt_size = sizeof( pkt->opcode ) + sizeof( pkt->content.error );
+
+ if ( !interact_sendto_common( act, data ) ) {
+ return false;
+ }
+
+ T_eq_u16( ntohs( pkt->opcode ), TFTP_OPCODE_ERROR );
+ T_gt_sz( act->data.sendto.len, pkt_size );
+ if ( ntohs( pkt->opcode ) != TFTP_OPCODE_ERROR ||
+ act->data.sendto.len <= pkt_size
+ ) {
+ return false;
+ }
+
+ T_eq_u16(
+ ntohs( pkt->content.error.error_code ),
+ d->content.error.error_code
+ );
+ if ( ntohs( pkt->content.error.error_code ) != d->content.error.error_code ) {
+ return false;
+ }
+
+ return true;
+}
+
+static void add_interaction_send_rwrq(
+ int fd,
+ const char *filename,
+ uint16_t dest_port,
+ const char *dest_addr_str,
+ uint16_t block_size,
+ uint16_t window_size,
+ bool result,
+ uint16_t opcode
+)
+{
+ interaction_data_sendto *d;
+
+ d = _Tftp_Append_interaction(
+ TFTP_IA_KIND_SENDTO,
+ interact_sendto_rwrq,
+ sizeof( interaction_data_sendto )
+ );
+
+ T_assert_lt_sz( strlen( filename ), TFTP_MAX_FILENAME_STRLEN );
+ T_assert_lt_sz( strlen( dest_addr_str ), TFTP_MAX_IP_ADDR_STRLEN );
+ strcpy( d->content.rwrq.filename, filename );
+ strcpy( d->dest_addr_str, dest_addr_str );
+ d->fd = fd;
+ d->dest_port = dest_port;
+ d->content.rwrq.opcode = opcode;
+ d->content.rwrq.block_size = block_size;
+ d->content.rwrq.window_size = window_size;
+ d->result = result;
+}
+
+void _Tftp_Add_interaction_send_rrq(
+ int fd,
+ const char *filename,
+ uint16_t dest_port,
+ const char *dest_addr_str,
+ uint16_t block_size,
+ uint16_t window_size,
+ bool result
+)
+{
+ add_interaction_send_rwrq(
+ fd,
+ filename,
+ dest_port,
+ dest_addr_str,
+ block_size,
+ window_size,
+ result,
+ TFTP_OPCODE_RRQ
+ );
+}
+
+void _Tftp_Add_interaction_send_wrq(
+ int fd,
+ const char *filename,
+ uint16_t dest_port,
+ const char *dest_addr_str,
+ uint16_t block_size,
+ uint16_t window_size,
+ bool result
+)
+{
+ add_interaction_send_rwrq(
+ fd,
+ filename,
+ dest_port,
+ dest_addr_str,
+ block_size,
+ window_size,
+ result,
+ TFTP_OPCODE_WRQ
+ );
+}
+
+void _Tftp_Add_interaction_send_ack(
+ int fd,
+ uint16_t block_num,
+ uint16_t dest_port,
+ const char *dest_addr_str,
+ bool result
+)
+{
+ interaction_data_sendto *d;
+
+ d = _Tftp_Append_interaction(
+ TFTP_IA_KIND_SENDTO,
+ interact_sendto_ack,
+ sizeof( interaction_data_sendto )
+ );
+
+ T_assert_lt_sz( strlen( dest_addr_str ), TFTP_MAX_IP_ADDR_STRLEN );
+ strcpy( d->dest_addr_str, dest_addr_str );
+ d->fd = fd;
+ d->dest_port = dest_port;
+ d->result = result;
+ d->content.ack.block_num = block_num;
+}
+
+void _Tftp_Add_interaction_send_data(
+ int fd,
+ uint16_t block_num,
+ size_t start,
+ size_t len,
+ uint8_t (*get_data)( size_t pos ),
+ uint16_t dest_port,
+ const char *dest_addr_str,
+ bool result
+)
+{
+ interaction_data_sendto *d;
+
+ d = _Tftp_Append_interaction(
+ TFTP_IA_KIND_SENDTO,
+ interact_sendto_data,
+ sizeof( interaction_data_sendto )
+ );
+
+ T_assert_lt_sz( strlen( dest_addr_str ), TFTP_MAX_IP_ADDR_STRLEN );
+ strcpy( d->dest_addr_str, dest_addr_str );
+ d->fd = fd;
+ d->dest_port = dest_port;
+ d->result = result;
+ d->content.data.block_num = block_num;
+ d->content.data.start = start;
+ d->content.data.len = len;
+ d->content.data.get_data = get_data;
+}
+
+void _Tftp_Add_interaction_send_error(
+ int fd,
+ uint16_t error_code,
+ uint16_t dest_port,
+ const char *dest_addr_str,
+ bool result
+)
+{
+ interaction_data_sendto *d;
+
+ d = _Tftp_Append_interaction(
+ TFTP_IA_KIND_SENDTO,
+ interact_sendto_error,
+ sizeof( interaction_data_sendto )
+ );
+
+ T_assert_lt_sz( strlen( dest_addr_str ), TFTP_MAX_IP_ADDR_STRLEN );
+ strcpy( d->dest_addr_str, dest_addr_str );
+ d->fd = fd;
+ d->dest_port = dest_port;
+ d->result = result;
+ d->content.error.error_code = error_code;
+}
+
+/*
+ * Interaction: recvfrom()
+ */
+
+typedef struct interaction_data_recvfrom {
+ int fd;
+ uint32_t timeout_ms;
+ uint16_t src_port;
+ char src_addr_str[TFTP_MAX_IP_ADDR_STRLEN];
+ bool result;
+ union {
+ struct {
+ uint16_t block_num;
+ } ack;
+ struct {
+ size_t options_size;
+ char options[TFTP_MAX_OPTIONS_SIZE];
+ } oack;
+ struct {
+ uint16_t block_num;
+ size_t start;
+ size_t len;
+ uint8_t (*get_data)( size_t pos );
+ } data;
+ struct {
+ uint16_t error_code;
+ char err_msg[TFTP_MAX_ERROR_STRLEN];
+ } error;
+ struct {
+ size_t len;
+ uint8_t bytes[0];
+ } raw;
+ } content;
+} interaction_data_recvfrom;
+
+static bool interact_recvfrom_common(
+ Tftp_Action *act,
+ void *data,
+ size_t actual_size
+)
+{
+ interaction_data_recvfrom *d = data;
+
+ T_eq_int( act->data.recvfrom.fd, d->fd );
+ T_quiet_ge_sz( act->data.recvfrom.len, actual_size );
+ if (
+ act->data.recvfrom.fd != d->fd ||
+ act->data.recvfrom.len < actual_size
+ ) {
+ return false;
+ }
+ if ( d->timeout_ms == DO_NOT_WAIT_FOR_ANY_TIMEOUT ) {
+ T_ne_int( act->data.recvfrom.flags, 0 );
+ if ( act->data.recvfrom.flags == 0 ) {
+ return false;
+ }
+ } else {
+ T_eq_int( act->data.recvfrom.flags, 0 );
+ T_eq_u32( act->data.recvfrom.timeout_ms, d->timeout_ms );
+ if (
+ act->data.recvfrom.flags != 0 ||
+ act->data.recvfrom.timeout_ms != d->timeout_ms
+ ) {
+ return false;
+ }
+ }
+
+ strncpy(
+ act->data.recvfrom.src_addr_str,
+ d->src_addr_str,
+ sizeof( act->data.recvfrom.src_addr_str )
+ );
+ act->data.recvfrom.src_addr_str[
+ sizeof( act->data.recvfrom.src_addr_str ) - 1] = '\0';
+ act->data.recvfrom.src_port = d->src_port;
+ act->data.recvfrom.result = d->result ? actual_size : -1;
+ return true;
+}
+
+static bool interact_recvfrom_data( Tftp_Action *act, void *data )
+{
+ interaction_data_recvfrom *d = data;
+ Tftp_Packet *pkt = act->data.recvfrom.buf;
+ size_t actual_size;
+ size_t i;
+
+ actual_size = sizeof( pkt->opcode ) +
+ sizeof( pkt->content.data.block_num ) + d->content.data.len;
+ if ( !interact_recvfrom_common( act, data, actual_size ) ) {
+ return false;
+ }
+
+ pkt->opcode = htons( TFTP_OPCODE_DATA );
+ pkt->content.data.block_num = htons( d->content.data.block_num );
+ for ( i = 0; i < d->content.data.len; ++i ) {
+ pkt->content.data.bytes[i] =
+ d->content.data.get_data( d->content.data.start + i );
+ }
+
+ return true;
+}
+
+static bool interact_recvfrom_ack( Tftp_Action *act, void *data )
+{
+ interaction_data_recvfrom *d = data;
+ Tftp_Packet *pkt = act->data.recvfrom.buf;
+ size_t actual_size;
+
+ actual_size = sizeof( pkt->opcode ) + sizeof( pkt->content.ack.block_num );
+ if ( !interact_recvfrom_common( act, data, actual_size ) ) {
+ return false;
+ }
+
+ pkt->opcode = htons( TFTP_OPCODE_ACK );
+ pkt->content.ack.block_num = htons( d->content.ack.block_num );
+
+ return true;
+}
+
+static bool interact_recvfrom_oack( Tftp_Action *act, void *data )
+{
+ interaction_data_recvfrom *d = data;
+ Tftp_Packet *pkt = act->data.recvfrom.buf;
+ size_t actual_size;
+
+ actual_size = sizeof( pkt->opcode ) + d->content.oack.options_size;
+ if ( !interact_recvfrom_common( act, data, actual_size ) ) {
+ return false;
+ }
+
+ pkt->opcode = htons( TFTP_OPCODE_OACK );
+ memcpy(
+ pkt->content.oack.opts,
+ d->content.oack.options,
+ d->content.oack.options_size
+ );
+
+ return true;
+}
+
+static bool interact_recvfrom_error( Tftp_Action *act, void *data )
+{
+ interaction_data_recvfrom *d = data;
+ Tftp_Packet *pkt = act->data.recvfrom.buf;
+ size_t actual_size;
+
+ actual_size = sizeof( pkt->opcode ) +
+ sizeof( pkt->content.error.error_code ) +
+ strlen( d->content.error.err_msg ) + 1;
+ if ( !interact_recvfrom_common( act, data, actual_size ) ) {
+ return false;
+ }
+
+ pkt->opcode = htons( TFTP_OPCODE_ERROR );
+ pkt->content.error.error_code = htons( d->content.error.error_code );
+ strncpy(
+ pkt->content.error.err_msg,
+ d->content.error.err_msg,
+ act->data.recvfrom.len - sizeof( pkt->opcode ) -
+ sizeof( pkt->content.error.error_code ) - 1
+ );
+
+ return true;
+}
+
+static bool interact_recvfrom_raw( Tftp_Action *act, void *data )
+{
+ interaction_data_recvfrom *d = data;
+ uint8_t *pkt = act->data.recvfrom.buf;
+ size_t actual_size = d->content.raw.len;
+
+ if ( !interact_recvfrom_common( act, data, actual_size ) ) {
+ return false;
+ }
+
+ memcpy( pkt, d->content.raw.bytes, actual_size );
+
+ return true;
+}
+
+void _Tftp_Add_interaction_recv_data(
+ int fd,
+ uint32_t timeout_ms,
+ uint16_t src_port,
+ const char *src_addr_str,
+ uint16_t block_num,
+ size_t start,
+ size_t len,
+ uint8_t (*get_data)( size_t pos ),
+ bool result
+)
+{
+ interaction_data_recvfrom *d;
+
+ d = _Tftp_Append_interaction(
+ TFTP_IA_KIND_RECVFROM,
+ interact_recvfrom_data,
+ sizeof( interaction_data_recvfrom )
+ );
+
+ T_assert_lt_sz( strlen( src_addr_str ), sizeof( d->src_addr_str ) - 1 );
+ strcpy( d->src_addr_str, src_addr_str );
+ d->fd = fd;
+ d->timeout_ms = timeout_ms;
+ d->src_port = src_port;
+ d->content.data.block_num = block_num;
+ d->content.data.start = start;
+ d->content.data.len = len;
+ d->content.data.get_data = get_data;
+ d->result = result;
+}
+
+void _Tftp_Add_interaction_recv_ack(
+ int fd,
+ uint32_t timeout_ms,
+ uint16_t src_port,
+ const char *src_addr_str,
+ uint16_t block_num,
+ bool result
+)
+{
+ interaction_data_recvfrom *d;
+
+ d = _Tftp_Append_interaction(
+ TFTP_IA_KIND_RECVFROM,
+ interact_recvfrom_ack,
+ sizeof( interaction_data_recvfrom )
+ );
+
+ T_assert_lt_sz( strlen( src_addr_str ), sizeof( d->src_addr_str ) - 1 );
+ strcpy( d->src_addr_str, src_addr_str );
+ d->fd = fd;
+ d->timeout_ms = timeout_ms;
+ d->src_port = src_port;
+ d->content.ack.block_num = block_num;
+ d->result = result;
+}
+
+void _Tftp_Add_interaction_recv_oack(
+ int fd,
+ uint32_t timeout_ms,
+ uint16_t src_port,
+ const char *src_addr_str,
+ const char *options,
+ size_t options_size,
+ bool result
+)
+{
+ interaction_data_recvfrom *d;
+
+ d = _Tftp_Append_interaction(
+ TFTP_IA_KIND_RECVFROM,
+ interact_recvfrom_oack,
+ sizeof( interaction_data_recvfrom )
+ );
+
+ T_assert_lt_sz( strlen( src_addr_str ), sizeof( d->src_addr_str ) - 1 );
+ strcpy( d->src_addr_str, src_addr_str );
+ T_assert_lt_sz( options_size, sizeof( d->content.oack.options ) );
+ memcpy( d->content.oack.options, options, options_size );
+ d->fd = fd;
+ d->timeout_ms = timeout_ms;
+ d->src_port = src_port;
+ d->content.oack.options_size = options_size;
+ d->result = result;
+}
+
+void _Tftp_Add_interaction_recv_error(
+ int fd,
+ uint32_t timeout_ms,
+ uint16_t src_port,
+ const char *src_addr_str,
+ uint16_t error_code,
+ const char *err_msg,
+ bool result
+)
+{
+ interaction_data_recvfrom *d;
+
+ d = _Tftp_Append_interaction(
+ TFTP_IA_KIND_RECVFROM,
+ interact_recvfrom_error,
+ sizeof( interaction_data_recvfrom )
+ );
+
+ T_assert_lt_sz( strlen( src_addr_str ), sizeof( d->src_addr_str ) - 1 );
+ strcpy( d->src_addr_str, src_addr_str );
+ T_assert_lt_sz( strlen( src_addr_str ), sizeof( d->src_addr_str ) - 1 );
+ strcpy( d->content.error.err_msg, err_msg );
+ d->fd = fd;
+ d->timeout_ms = timeout_ms;
+ d->src_port = src_port;
+ d->content.error.error_code = error_code;
+ d->result = result;
+}
+
+void _Tftp_Add_interaction_recv_raw(
+ int fd,
+ uint32_t timeout_ms,
+ uint16_t src_port,
+ const char *src_addr_str,
+ size_t len,
+ const uint8_t *bytes,
+ bool result
+)
+{
+ interaction_data_recvfrom *d;
+
+ d = _Tftp_Append_interaction(
+ TFTP_IA_KIND_RECVFROM,
+ interact_recvfrom_raw,
+ sizeof( interaction_data_recvfrom ) + len
+ );
+
+ T_assert_lt_sz( strlen( src_addr_str ), sizeof( d->src_addr_str ) - 1 );
+ strcpy( d->src_addr_str, src_addr_str );
+ memcpy( d->content.raw.bytes, bytes, len );
+ d->fd = fd;
+ d->timeout_ms = timeout_ms;
+ d->src_port = src_port;
+ d->content.raw.len = len;
+ d->result = result;
+}
+
+void _Tftp_Add_interaction_recv_nothing(
+ int fd,
+ uint32_t timeout_ms
+)
+{
+ static const char *dummy_ip = "0.0.0.0";
+ interaction_data_recvfrom *d;
+
+ d = _Tftp_Append_interaction(
+ TFTP_IA_KIND_RECVFROM,
+ interact_recvfrom_ack,
+ sizeof( interaction_data_recvfrom )
+ );
+
+
+ T_assert_lt_sz( strlen( dummy_ip ), sizeof( d->src_addr_str ) - 1 );
+ strcpy( d->src_addr_str, dummy_ip );
+ d->fd = fd;
+ d->timeout_ms = timeout_ms;
+ d->src_port = 0;
+ d->content.ack.block_num = 0;
+ d->result = false;
+}
diff --git a/testsuites/fstests/tftpfs/tftpfs_interactions.h b/testsuites/fstests/tftpfs/tftpfs_interactions.h
new file mode 100644
index 0000000000..732a542e99
--- /dev/null
+++ b/testsuites/fstests/tftpfs/tftpfs_interactions.h
@@ -0,0 +1,213 @@
+/* SPDX-License-Identifier: BSD-2-Clause */
+
+/**
+ * @file
+ *
+ * @ingroup RTEMSTestSuiteTestsTFTPFS
+ *
+ * @brief This header file provides functions used to
+ * implement network interactions of the UDP network fake for tftpfs tests.
+ *
+ * Definitions and declarations of data structures and functions.
+ */
+
+/*
+ * Copyright (C) 2022 embedded brains GmbH & Co. KG
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#ifndef _TFTPFS_INTERACTIONS_H
+#define _TFTPFS_INTERACTIONS_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#define NO_BLOCK_SIZE_OPTION 0
+#define NO_WINDOW_SIZE_OPTION 0
+#define DO_NOT_WAIT_FOR_ANY_TIMEOUT UINT32_MAX
+
+/**
+ * @addtogroup RTEMSTestSuiteTestsTFTPFS
+ *
+ * @{
+ */
+
+/*
+ * These functions append an interaction to the list of expected interactions.
+ * For example, _Tftp_Add_interaction_socket() "means":
+ *
+ * * As next interaction, expect that the TFTP client calls function
+ * socket().
+ * * Expect (i.e. check) that this socket() call will get parameter values
+ * as provided by its parameters `domain`, `type` and `protocol`.
+ * * This call to socket() shall return value of parameter `result`
+ * to the TFTP client.
+ *
+ * The interactions with functions sendto() and recvfrom() are a bit more
+ * complicated because specific packets are expected to be received or sent.
+ * For example, _Tftp_Add_interaction_send_rrq() appends an interaction
+ * where the TFTP client is expected to call sendto() with an RRQ (Read
+ * Request) packet. _Tftp_Add_interaction_recv_data() appends an interaction
+ * where the TFTP client is expected to call recvfrom() and as result it
+ * receives a data packet (which the interaction writes into the buffer
+ * which the TFTP client provides as parameter in its the recvfrom() call).
+ */
+
+void _Tftp_Add_interaction_socket(
+ int domain,
+ int type,
+ int protocol,
+ int result
+);
+
+void _Tftp_Add_interaction_close( int fd, int result );
+
+void _Tftp_Add_interaction_bind( int fd, int family, int result );
+
+void _Tftp_Add_interaction_send_rrq(
+ int fd,
+ const char *filename,
+ uint16_t dest_port,
+ const char *dest_addr_str,
+ uint16_t block_size,
+ uint16_t window_size,
+ bool result
+);
+
+void _Tftp_Add_interaction_send_wrq(
+ int fd,
+ const char *filename,
+ uint16_t dest_port,
+ const char *dest_addr_str,
+ uint16_t block_size,
+ uint16_t window_size,
+ bool result
+);
+
+void _Tftp_Add_interaction_send_ack(
+ int fd,
+ uint16_t block_num,
+ uint16_t dest_port,
+ const char *dest_addr_str,
+ bool result
+);
+
+void _Tftp_Add_interaction_send_data(
+ int fd,
+ uint16_t block_num,
+ size_t start,
+ size_t len,
+ uint8_t (*get_data)( size_t pos ),
+ uint16_t dest_port,
+ const char *dest_addr_str,
+ bool result
+);
+
+void _Tftp_Add_interaction_send_error(
+ int fd,
+ uint16_t error_code,
+ uint16_t dest_port,
+ const char *dest_addr_str,
+ bool result
+);
+
+/*
+ * _Tftp_Add_interaction_recv_data() permits only a boolean result.
+ * The TFTP client code does not check `errno` and always behaves as if
+ * a return of -1 indicates a timeout. Hence
+ * _Tftp_Add_interaction_recv_data() permits only a boolean result
+ * and no special value to distinct timeouts from other errors.
+ */
+void _Tftp_Add_interaction_recv_data(
+ int fd,
+ uint32_t timeout_ms,
+ uint16_t src_port,
+ const char *src_addr_str,
+ uint16_t block_num,
+ size_t start,
+ size_t len,
+ uint8_t (*get_data)( size_t pos ),
+ bool result
+);
+
+void _Tftp_Add_interaction_recv_ack(
+ int fd,
+ uint32_t timeout_ms,
+ uint16_t src_port,
+ const char *src_addr_str,
+ uint16_t block_num,
+ bool result
+);
+
+void _Tftp_Add_interaction_recv_oack(
+ int fd,
+ uint32_t timeout_ms,
+ uint16_t src_port,
+ const char *src_addr_str,
+ const char *options,
+ size_t options_size,
+ bool result
+);
+
+void _Tftp_Add_interaction_recv_error(
+ int fd,
+ uint32_t timeout_ms,
+ uint16_t src_port,
+ const char *src_addr_str,
+ uint16_t error_code,
+ const char *err_msg,
+ bool result
+);
+
+/*
+ * The TFTP client receives a "raw" packet.
+ *
+ * Test tests use this function to trigger packet format errors such as:
+ *
+ * * Too short packets,
+ * * Strings without 0-byte at their end
+ * * Wrong op-codes
+ */
+void _Tftp_Add_interaction_recv_raw(
+ int fd,
+ uint32_t timeout_ms,
+ uint16_t src_port,
+ const char *src_addr_str,
+ size_t len,
+ const uint8_t *bytes,
+ bool result
+);
+
+void _Tftp_Add_interaction_recv_nothing(
+ int fd,
+ uint32_t timeout_ms
+);
+
+/** @} */
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* _TFTPFS_INTERACTIONS_H */
diff --git a/testsuites/fstests/tftpfs/tftpfs_udp_network_fake.c b/testsuites/fstests/tftpfs/tftpfs_udp_network_fake.c
new file mode 100644
index 0000000000..995ae05fe0
--- /dev/null
+++ b/testsuites/fstests/tftpfs/tftpfs_udp_network_fake.c
@@ -0,0 +1,983 @@
+/* SPDX-License-Identifier: BSD-2-Clause */
+
+/**
+ * @file
+ *
+ * @ingroup RTEMSTestSuiteTestsTFTPFS
+ *
+ * @brief This source file contains the implementation of UDP network fake
+ * functions related to tftpfs testing.
+ *
+ * The libtftpfs source code is situated in the RTEMS repository. For
+ * testing it, either libbsd or RTEMS legacy networking would be required.
+ * This implies that the tests for libtftpfs would need to be placed in
+ * the libbsd repository - a different one than the libtftpfs source code.
+ *
+ * Yet, libtftpfs uses only a handful of networking functions. This
+ * file provides fake implementations of those functions. These fake
+ * functions permit to simulate the exchange of UDP packets
+ * with the libtftpfs code and thus permits testing libtftpfs without
+ * the need of a full network stack.
+ */
+
+/*
+ * Copyright (C) 2022 embedded brains GmbH & Co. KG
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#include <stdio.h> /* snprintf() */
+#include <stdlib.h> /* malloc(), free() */
+#include <inttypes.h> /* printf() macros like PRId8 */
+#include <string.h>
+#include <ctype.h> /* isprint() */
+#include <netdb.h> /* getnameinfo() */
+#include <arpa/inet.h>
+#include <sys/types.h>
+#include <sys/socket.h>
+#include <netinet/in.h> /* struct sockaddr_in, struct sockaddr_in6 */
+#include <rtems/test.h>
+
+#include "tftpfs_udp_network_fake.h"
+
+#define IPV4_ADDR_SIZE 4
+#define MAX_SOCKET_FD 4
+
+int __wrap_close( int fd ); /* Prevent compiler warnings */
+int __real_close( int fd ); /* Prevent compiler warnings */
+
+/*
+ * Control data
+ */
+
+/*
+ * A singleton global data object is used to control the network interaction
+ * with the TFTP client.
+ *
+ * A test can exchange UDP packets when the TFTP client calls functions
+ * sendto() and recvfrom(). Simply put, when the client calls sendto()
+ * the test must check that the client sends the expected UDP packet
+ * and when the client calls recvfrom() the test must provide the UDP
+ * packet it wants to send to the client.
+ *
+ * Defining the sequence of sendto() and recvfrom() function calls
+ * including parameters and return values essentially represents a
+ * test for the TFTP networking. To be a bit more complete, a few more
+ * functions such as socket() and bind() are included in the sequence.
+ *
+ * Each of these function calls defines a single *interaction* between
+ * TFTP client and test (aka TFTP server). The idea is that each test
+ * defines a sequence of interactions. In a successful test run all
+ * interactions must be carried out one-by-one till the last (normally
+ * "close()") interaction is reached.
+ *
+ * The control_data essentially stores the sequence of interactions
+ * as well as the current state (e.g. which is the next interaction?).
+ */
+typedef struct control_data {
+ Tftp_Interaction *interaction_head;
+ Tftp_Interaction *interaction_tail;
+ Tftp_Interaction *interaction_cur;
+ int receive_timeout_socket_fd[MAX_SOCKET_FD];
+ uint32_t receive_timeout_ms[MAX_SOCKET_FD];
+} control_data;
+
+static control_data *control = NULL;
+
+void _Tftp_Reset( void )
+{
+ static control_data ctl;
+ int i;
+ Tftp_Interaction *iter;
+ Tftp_Interaction *current;
+
+ if ( control == NULL ) {
+ control = &ctl;
+ } else {
+ for ( iter = control->interaction_head; iter != NULL; ) {
+ current = iter;
+ iter = iter->next;
+ free( current );
+ }
+ }
+
+ control->interaction_head = NULL;
+ control->interaction_tail = (Tftp_Interaction *) &control->interaction_head;
+ control->interaction_cur = (Tftp_Interaction *) &control->interaction_head;
+ for ( i = 0; i < MAX_SOCKET_FD; ++i ) {
+ control->receive_timeout_socket_fd[i] = 0;
+ control->receive_timeout_ms[i] = 0;
+ }
+}
+
+void *_Tftp_Append_interaction(
+ Tftp_Action_kind kind,
+ Tftp_Interaction_fn fn,
+ size_t size
+)
+{
+ Tftp_Interaction *ia;
+ T_quiet_not_null( control );
+ ia = malloc( sizeof( Tftp_Interaction ) + size );
+ T_quiet_not_null( ia );
+ ia->next = NULL;
+ ia->kind = kind;
+ ia->fn = fn;
+ control->interaction_tail->next = ia;
+ control->interaction_tail = ia;
+ return ia->data;
+}
+
+bool _Tftp_Has_no_more_interactions( void )
+{
+ return control == NULL || control->interaction_cur != NULL;
+}
+
+static Tftp_Interaction *get_next_interaction( control_data *control )
+{
+ if ( control == NULL ) {
+ return NULL;
+ }
+ if ( control->interaction_cur != NULL ) {
+ control->interaction_cur = control->interaction_cur->next;
+ }
+ return control->interaction_cur;
+}
+
+static const char *get_action_kind_as_string( Tftp_Action_kind kind )
+{
+ switch ( kind ) {
+ case TFTP_IA_KIND_SOCKET:
+ return "socket";
+ case TFTP_IA_KIND_CLOSE:
+ return "close";
+ case TFTP_IA_KIND_BIND:
+ return "bind";
+ case TFTP_IA_KIND_SENDTO:
+ return "sendto";
+ case TFTP_IA_KIND_RECVFROM:
+ return "recvfrom";
+ default:
+ break;
+ }
+ return "UNKNOWN";
+}
+
+/*
+ * Parse and log UDP TFTP packet functions
+ */
+
+const char *_Tftp_Get_error_str( uint16_t error_code )
+{
+ static const char *unknown_str = "Unknown error code";
+ static const char *error_str[] = {
+ "Not defined, see error message (if any)",
+ "File not found",
+ "Access violation",
+ "Disk full or allocation exceeded",
+ "Illegal TFTP operation",
+ "Unknown transfer ID",
+ "File already exists",
+ "No such user",
+ "Option negociation failed",
+ };
+ const char *result = unknown_str;
+
+ if ( error_code < RTEMS_ARRAY_SIZE( error_str ) ) {
+ result = error_str[ error_code ];
+ }
+
+ return result;
+}
+
+static void log_hex_dump( const void *buf, size_t len )
+{
+ const size_t per_line = 16;
+ size_t pos = 0;
+ const uint8_t *pkt = buf;
+ char hex[2 * per_line + 4];
+ char chars[per_line + 1];
+ char *hexpos;
+ int i;
+
+ chars[per_line] = '\0';
+ do {
+ for ( i = 0, hexpos = hex; i < per_line; ++i ) {
+ if ( pos + i < len ) {
+ hexpos += snprintf( hexpos, 3, "%02"PRIX8, pkt[ pos + i ] );
+ chars[i] = ( isprint( pkt[ pos + i ] ) ) ? pkt[ pos + i ] : '.';
+ } else {
+ hexpos += snprintf( hexpos, 3, " " );
+ chars[i] = '\0';
+ }
+ if ( i < per_line - 1 && i % 4 == 3 ) {
+ *(hexpos++) = ' ';
+ }
+ }
+
+ T_log( T_VERBOSE, " %04zX : %s |%s|", pos, hex, chars );
+ pos += per_line;
+ } while( len > pos );
+}
+
+static const char *get_next_str(
+ const char **buf,
+ size_t *max_len,
+ bool *has_errors
+)
+{
+ const char *result;
+ size_t len = strnlen( *buf, *max_len );
+ if ( len < *max_len ) {
+ result = *buf;
+ *buf += len + 1;
+ *max_len -= len + 1;
+ } else {
+ result = "MAL_FORMED_STRING";
+ *max_len = 0;
+ *has_errors = true;
+ }
+ return result;
+}
+
+static void log_tftp_packet( const void *buf, size_t len )
+{
+ int op_code;
+ const char *buffer = ( (char *) buf ) + sizeof( uint16_t );
+ size_t remaining_len = len - sizeof( uint16_t );
+ bool has_errors = false;
+
+ if ( len >= sizeof( uint16_t ) ) {
+ op_code = ntohs( *((uint16_t *) buf ) );
+ switch ( op_code ) {
+ case TFTP_OPCODE_RRQ:
+ case TFTP_OPCODE_WRQ:
+ T_log(
+ T_VERBOSE,
+ " %s File: \"%s\" Mode: \"%s\" %s",
+ ( op_code == TFTP_OPCODE_RRQ ) ? "RRQ" : "WRQ",
+ get_next_str( &buffer, &remaining_len, &has_errors ),
+ get_next_str( &buffer, &remaining_len, &has_errors ),
+ ( remaining_len > 0 ) ? "Options:" : "No options"
+ );
+ while ( remaining_len > 0 ) {
+ T_log(
+ T_VERBOSE,
+ " %s = \"%s\"",
+ get_next_str( &buffer, &remaining_len, &has_errors ),
+ get_next_str( &buffer, &remaining_len, &has_errors )
+ );
+ }
+ break;
+
+ case TFTP_OPCODE_DATA:
+ if ( len >= 2 * sizeof( uint16_t ) ) {
+ buffer += sizeof( uint16_t );
+ remaining_len -= sizeof( uint16_t );
+ T_log(
+ T_VERBOSE,
+ " DATA Block: %"PRIu16" Data (%zu bytes):",
+ ntohs( *( ( (uint16_t *) buf ) + 1 ) ),
+ remaining_len
+ );
+ log_hex_dump( buffer, remaining_len );
+ } else {
+ T_log( T_VERBOSE, " DATA packet ILLEGAL length" );
+ has_errors = true;
+ }
+ break;
+
+ case TFTP_OPCODE_ACK:
+ if ( len == 2 * sizeof( uint16_t ) ) {
+ T_log(
+ T_VERBOSE,
+ " ACK Block: %"PRIu16,
+ ntohs( *( ( (uint16_t *) buf ) + 1 ) )
+ );
+ } else {
+ T_log( T_VERBOSE, " ACK packet ILLEGAL length" );
+ has_errors = true;
+ }
+ break;
+
+ case TFTP_OPCODE_ERROR:
+ if ( len > 2 * sizeof( uint16_t ) ) {
+ uint16_t err_code = ntohs( *( ( (uint16_t *) buf ) + 1 ) );
+ T_log(
+ T_VERBOSE,
+ " ERROR Code: %"PRIu16" (%s) ErrMsg:",
+ err_code,
+ _Tftp_Get_error_str( err_code )
+ );
+ buffer += sizeof( uint16_t );
+ remaining_len -= sizeof( uint16_t );
+ T_log(
+ T_VERBOSE,
+ " \"%s\"",
+ get_next_str( &buffer, &remaining_len, &has_errors )
+ );
+ } else {
+ T_log( T_VERBOSE, " ERROR packet ILLEGAL length" );
+ has_errors = true;
+ }
+ break;
+
+ case TFTP_OPCODE_OACK:
+ T_log(
+ T_VERBOSE,
+ " OACK %s",
+ ( remaining_len > 0 ) ? "Options:" : "No options"
+ );
+ while ( remaining_len > 0 ) {
+ T_log(
+ T_VERBOSE,
+ " %s = \"%s\"",
+ get_next_str( &buffer, &remaining_len, &has_errors ),
+ get_next_str( &buffer, &remaining_len, &has_errors )
+ );
+ }
+ break;
+
+ default:
+ T_log( T_VERBOSE, " TFTP ILLEGAL OpCode: %d", op_code );
+ has_errors = true;
+ }
+ } else {
+ has_errors = true;
+ }
+
+ if ( has_errors ) {
+ log_hex_dump( buf, len );
+ }
+}
+
+static void log_interaction(
+ Tftp_Action *act,
+ bool has_result,
+ bool was_success
+)
+{
+ char *begin = has_result ? "[" : "";
+ const char *action_name;
+ int result;
+ char result_buffer[20];
+ result_buffer[0] = '\0';
+
+ if ( act == NULL ) { return; }
+ action_name = get_action_kind_as_string( act->kind );
+
+ if ( has_result && was_success ) {
+ switch ( act->kind ) {
+ case TFTP_IA_KIND_SOCKET:
+ result = act->data.socket.result;
+ break;
+
+ case TFTP_IA_KIND_CLOSE:
+ result = act->data.close.result;
+ break;
+
+ case TFTP_IA_KIND_BIND:
+ result = act->data.bind.result;
+ break;
+
+ case TFTP_IA_KIND_SENDTO:
+ result = (int) act->data.sendto.result;
+ break;
+
+ case TFTP_IA_KIND_RECVFROM:
+ result = (int) act->data.recvfrom.result;
+ break;
+
+ default:
+ result = 0;
+ }
+ snprintf( result_buffer, sizeof( result_buffer ), "] = %d", result );
+ } else if ( ! was_success ) {
+ snprintf( result_buffer, sizeof( result_buffer ), "] = FAILED!" );
+ }
+
+ switch ( act->kind ) {
+ case TFTP_IA_KIND_SOCKET:
+ T_log(
+ T_VERBOSE,
+ "%s%s(domain=%d, type=%d, protocol=%d)%s",
+ begin,
+ action_name,
+ act->data.socket.domain,
+ act->data.socket.type,
+ act->data.socket.protocol,
+ result_buffer
+ );
+ break;
+
+ case TFTP_IA_KIND_CLOSE:
+ T_log( T_VERBOSE, "%s%s(%d)%s",
+ begin,
+ action_name,
+ act->data.close.fd,
+ result_buffer
+ );
+ break;
+
+ case TFTP_IA_KIND_BIND:
+ T_log(
+ T_VERBOSE,
+ "%s%s(sockfd=%d, addr.family=%d, addr=%s:%"PRIu16")%s",
+ begin,
+ action_name,
+ act->data.bind.fd,
+ act->data.bind.family,
+ act->data.bind.addr_str,
+ act->data.bind.port,
+ result_buffer
+ );
+ break;
+
+ case TFTP_IA_KIND_SENDTO:
+ T_log(
+ T_VERBOSE,
+ "%s%s(sockfd=%d, buf=%p, len=%zu, flags=%X, "
+ "addr=%s:%"PRIu16", addrlen=%d)%s",
+ begin,
+ action_name,
+ act->data.sendto.fd,
+ act->data.sendto.buf,
+ act->data.sendto.len,
+ act->data.sendto.flags,
+ act->data.sendto.dest_addr_str,
+ act->data.sendto.dest_port,
+ act->data.sendto.addrlen,
+ result_buffer
+ );
+ if ( !has_result ) {
+ log_tftp_packet( act->data.sendto.buf, act->data.sendto.len );
+ }
+ break;
+
+ case TFTP_IA_KIND_RECVFROM:
+ if ( !has_result ) {
+ T_log(
+ T_VERBOSE,
+ "%s%s(sockfd=%d, buf=%p, len=%zu, flags=%X, "
+ "timeout=%"PRIu32"ms, addr=?:?, addrlen=%d)%s",
+ begin,
+ action_name,
+ act->data.recvfrom.fd,
+ act->data.recvfrom.buf,
+ act->data.recvfrom.len,
+ act->data.recvfrom.flags,
+ act->data.recvfrom.timeout_ms,
+ act->data.recvfrom.addrlen,
+ result_buffer
+ );
+ } else {
+ T_log(
+ T_VERBOSE,
+ "%s%s(sockfd=%d, buf=%p, len=%zu, flags=%X, "
+ "timeout=%"PRIu32"ms, addr=%s:%"PRIu16", addrlen=%d)%s",
+ begin,
+ action_name,
+ act->data.recvfrom.fd,
+ act->data.recvfrom.buf,
+ act->data.recvfrom.len,
+ act->data.recvfrom.flags,
+ act->data.recvfrom.timeout_ms,
+ act->data.recvfrom.src_addr_str,
+ act->data.recvfrom.src_port,
+ act->data.recvfrom.addrlen,
+ result_buffer
+ );
+ if ( act->data.recvfrom.result > 0 && was_success ) {
+ log_tftp_packet( act->data.recvfrom.buf, act->data.recvfrom.result );
+ }
+ }
+ break;
+
+ default:
+ T_quiet_true( false, "Unknown interaction: %d", act->kind );
+ }
+}
+
+/*
+ * Note: This function *must* return.
+ * All the fake network functions (and any functions called from them)
+ * must return control to the TFTP client. Hence, do not use T_assert_*()
+ * or similar functions. Even if the test fails at some point,
+ * continue and return an error value to the client.
+ * Reason: T_assert_*() does stop the test and invokes teardown()
+ * without returning to the client. teardown() then "hangs" when
+ * un-mounting while executing client code.
+ */
+static bool process_interaction( Tftp_Action *act )
+{
+ Tftp_Interaction *ia = get_next_interaction( control );
+ bool result;
+
+ T_quiet_not_null( act );
+ if ( act == NULL ) {
+ return false;
+ } else {
+ /* Logging this early helps debugging defect tests */
+ log_interaction( act, false, true );
+ }
+
+ T_quiet_not_null( ia );
+ if( ia == NULL ) {
+ T_log(
+ T_NORMAL,
+ "ERROR: You have not registered any (more) 'interaction' but the TFTP "
+ "client invoked interaction '%s()'. See 'tftpfs_interactions.h' and use "
+ "'T_set_verbosity( T_VERBOSE )'.",
+ get_action_kind_as_string( act->kind )
+ );
+ return false;
+ }
+
+ T_true(
+ act->kind == ia->kind,
+ "Expected %s() call but got %s()",
+ get_action_kind_as_string( ia->kind ),
+ get_action_kind_as_string( act->kind )
+ );
+ if ( act->kind != ia->kind ) {
+ return false;
+ }
+ result = ia->fn( act, ia->data );
+ log_interaction( act, true, result );
+
+ return result;
+}
+
+static uint16_t get_ip_addr_as_str(
+ const struct sockaddr *addr,
+ socklen_t addrlen,
+ char *buf,
+ size_t buf_size
+)
+{
+ uint16_t port = 0xFFFF;
+ *buf = '\0';
+
+ switch ( addr->sa_family ) {
+ case AF_INET:
+ {
+ const struct sockaddr_in *ipv4 = (const struct sockaddr_in *) addr;
+ port = ntohs( ipv4->sin_port );
+ const uint8_t *bytes = (const uint8_t *) &ipv4->sin_addr.s_addr;
+ snprintf(
+ buf,
+ buf_size,
+ "%"PRIu8".%"PRIu8".%"PRIu8".%"PRIu8,
+ bytes[0],
+ bytes[1],
+ bytes[2],
+ bytes[3]
+ );
+ break;
+ }
+ case AF_INET6:
+ {
+ const struct sockaddr_in6 *ipv6 = (const struct sockaddr_in6 *) addr;
+ port = ntohs( ipv6->sin6_port );
+ const uint16_t *words = (const uint16_t *) ipv6->sin6_addr.s6_addr;
+ snprintf(
+ buf,
+ buf_size,
+ "%"PRIx16":%"PRIx16":%"PRIx16":%"PRIx16":%"PRIx16":%"PRIx16
+ ":%"PRIx16":%"PRIx16,
+ ntohs( words[0] ),
+ ntohs( words[1] ),
+ ntohs( words[2] ),
+ ntohs( words[3] ),
+ ntohs( words[4] ),
+ ntohs( words[5] ),
+ ntohs( words[6] ),
+ ntohs( words[7] )
+ );
+ break;
+ }
+ }
+
+ return port;
+}
+
+static void set_ip_addr_from_str(
+ const char *addr_str,
+ uint16_t port,
+ struct sockaddr *addr,
+ socklen_t *addrlen
+ )
+{
+ socklen_t addr_size;
+ int res;
+ int i;
+
+ if ( addr == NULL || addrlen == NULL ) {
+ return;
+ }
+ addr_size = *addrlen;
+
+ if ( strchr( addr_str, ':' ) == NULL ) {
+ /* IPv4 address */
+ struct sockaddr_in *ipv4_addr = (struct sockaddr_in *) addr;
+ uint8_t *bytes = (uint8_t *) &ipv4_addr->sin_addr.s_addr;
+
+ *addrlen = sizeof( struct sockaddr_in );
+ T_ge_sz( addr_size, *addrlen );
+ if ( addr_size < *addrlen ) { return; }
+ ipv4_addr->sin_family = AF_INET;
+ ipv4_addr->sin_port = htons( port );
+ res = sscanf(
+ addr_str,
+ "%"SCNu8".%"SCNu8".%"SCNu8".%"SCNu8,
+ bytes,
+ bytes + 1,
+ bytes + 2,
+ bytes + 3
+ );
+ T_quiet_true( res == 4, "Connot parse IPv4 address: \"%s\"", addr_str );
+ } else {
+ /* IPv6 address */
+ struct sockaddr_in6 *ipv6_addr = (struct sockaddr_in6 *) addr;
+ uint16_t *words = (uint16_t *) &ipv6_addr->sin6_addr.s6_addr;
+
+ *addrlen = sizeof( struct sockaddr_in6 );
+ T_gt_sz( addr_size, *addrlen );
+ if ( addr_size < *addrlen ) { return; }
+ ipv6_addr->sin6_family = AF_INET6;
+ ipv6_addr->sin6_port = htons( port );
+ ipv6_addr->sin6_flowinfo = 0;
+ ipv6_addr->sin6_scope_id = 0;
+ res = sscanf(
+ addr_str,
+ "%"SCNx16":%"SCNx16":%"SCNx16":%"SCNx16":%"SCNx16":%"SCNx16
+ ":%"SCNx16":%"SCNx16,
+ words,
+ words + 1,
+ words + 2,
+ words + 3,
+ words + 4,
+ words + 5,
+ words + 6,
+ words + 7
+ );
+ T_quiet_true( res == 8, "Connot parse IPv6 address: \"%s\"", addr_str );
+ for ( i = 0; i < 8; ++i ) {
+ words[i] = htons( words[i] );
+ }
+ }
+}
+
+/*
+ * Fake networking functions
+ */
+
+int inet_aton( const char *cp, struct in_addr *inp )
+{
+ int result = 0;
+ uint8_t *ipv4_addr = (uint8_t *) inp;
+ static const char addr0[] = TFTP_KNOWN_IPV4_ADDR0_STR;
+ static const uint8_t addr0_data[] = { TFTP_KNOWN_IPV4_ADDR0_ARRAY };
+
+ if ( strcmp( addr0, cp ) == 0 ) {
+ memcpy( ipv4_addr, addr0_data, sizeof( addr0_data ) );
+ result = 1;
+ }
+
+ T_log(
+ T_VERBOSE,
+ "inet_aton(cp=%s, addr=%"PRIu8".%"PRIu8".%"PRIu8".%"PRIu8") = %d",
+ cp,
+ ipv4_addr[0],
+ ipv4_addr[1],
+ ipv4_addr[2],
+ ipv4_addr[3],
+ result
+ );
+ return result;
+}
+
+struct hostent *gethostbyname( const char *name )
+{
+ static char ip_addr_bytes[] = {
+ TFTP_KNOWN_SERVER0_ARRAY, /* IPv4: 10.7.0.2 "server.tftp" */
+ TFTP_KNOWN_IPV4_ADDR0_ARRAY /* IPv4: 127.0.0.1 "127.0.0.1" */
+ };
+ static char *ip_addrs[] = {
+ ip_addr_bytes + 0 * IPV4_ADDR_SIZE, NULL,
+ ip_addr_bytes + 1 * IPV4_ADDR_SIZE, NULL
+ };
+ static struct hostent hosts[] = {
+ {
+ .h_name = TFTP_KNOWN_SERVER0_NAME,
+ .h_aliases = NULL,
+ .h_addrtype = AF_INET,
+ .h_length = IPV4_ADDR_SIZE,
+ .h_addr_list = ip_addrs + 0,
+ },
+ {
+ .h_name = TFTP_KNOWN_IPV4_ADDR0_STR,
+ .h_aliases = NULL,
+ .h_addrtype = AF_INET,
+ .h_length = IPV4_ADDR_SIZE,
+ .h_addr_list = ip_addrs + 2,
+ }
+ };
+ struct hostent *result = NULL;
+ uint8_t *ipv4_addr;
+ int i;
+
+ for ( i = 0; i < RTEMS_ARRAY_SIZE( hosts ); ++i ) {
+ if ( strcmp( hosts[i].h_name, name ) == 0 ) {
+ result = hosts + i;
+ }
+ }
+ /* Note: `h_errno` not set due to linker issues */
+
+ if ( result != NULL ) {
+ ipv4_addr = (uint8_t *) result->h_addr_list[0];
+ T_log(
+ T_VERBOSE,
+ "gethostbyname(%s) = %s, %"PRIu8".%"PRIu8".%"PRIu8".%"PRIu8,
+ name,
+ result->h_name,
+ ipv4_addr[0],
+ ipv4_addr[1],
+ ipv4_addr[2],
+ ipv4_addr[3]
+ );
+ } else {
+ T_log( T_NORMAL, "gethostbyname(%s) = %p", name, result );
+ }
+ return result;
+}
+
+int socket( int domain, int type, int protocol )
+{
+ Tftp_Action act = {
+ .kind = TFTP_IA_KIND_SOCKET,
+ .data.socket.domain = domain,
+ .data.socket.type = type,
+ .data.socket.protocol = protocol
+ };
+
+ if( !process_interaction( &act ) ) {
+ return -1;
+ };
+
+ /* Should never happen but check prevents programming mistakes */
+ T_quiet_ge_int( act.data.socket.result, TFTP_FIRST_FD );
+ if( act.data.socket.result < TFTP_FIRST_FD ) {
+ return -1;
+ };
+
+ return act.data.socket.result;
+}
+
+int __wrap_close( int fd )
+{
+ if ( fd < TFTP_FIRST_FD ) {
+ /* Normal file descriptors - i.e. not from fake socket() function above */
+ return __real_close( fd );
+ }
+ Tftp_Action act = {
+ .kind = TFTP_IA_KIND_CLOSE,
+ .data.close.fd = fd,
+ };
+
+ if( !process_interaction( &act ) ) {
+ return -1;
+ };
+
+ return act.data.close.result;
+}
+
+int bind( int sockfd, const struct sockaddr *addr, socklen_t addrlen )
+{
+ char addr_buf[INET6_ADDRSTRLEN];
+ Tftp_Action act = {
+ .kind = TFTP_IA_KIND_BIND,
+ .data.bind.fd = sockfd,
+ .data.bind.family = addr->sa_family,
+ .data.bind.addr_str = addr_buf
+ };
+ act.data.bind.port = get_ip_addr_as_str(
+ addr,
+ addrlen,
+ addr_buf,
+ sizeof( addr_buf )
+ );
+
+ if( !process_interaction( &act ) ) {
+ return -1;
+ };
+
+ return act.data.bind.result;
+}
+
+int setsockopt(
+ int sockfd,
+ int level,
+ int optname,
+ const void *optval,
+ socklen_t optlen
+)
+{
+ int result = 0;
+ int i;
+ const struct timeval *tv = optval;
+
+ T_log(
+ T_VERBOSE,
+ "setsockopt(sockfd=%d, level=%s, optname=%s, optval=%dms )",
+ sockfd,
+ ( level == SOL_SOCKET ) ? "SOL_SOCKET" : "UNKONWN",
+ ( optname == SO_RCVTIMEO ) ? "SO_RCVTIMEO" : "UNKONWN",
+ ( optname == SO_RCVTIMEO ) ?
+ (int) ( tv->tv_sec * 1000 + tv->tv_usec / 1000 ) : -1
+ );
+
+ T_eq_int( level, SOL_SOCKET );
+ T_eq_int( optname, SO_RCVTIMEO );
+ T_eq_int( (int) optlen, sizeof( struct timeval ) );
+ if (
+ level != SOL_SOCKET ||
+ optname != SO_RCVTIMEO ||
+ optlen != sizeof( struct timeval )
+ ) {
+ result = -1;
+ }
+
+ for ( i = 0; result >= 0; ++i ) {
+ if ( i >= MAX_SOCKET_FD ) {
+ T_quiet_true(
+ false,
+ "Too few IP ports %d, increase MAX_SOCKET_FD",
+ MAX_SOCKET_FD
+ );
+ result = -1;
+ break;
+ }
+ if ( control->receive_timeout_socket_fd[i] == sockfd ||
+ control->receive_timeout_socket_fd[i] == 0 ) {
+ control->receive_timeout_socket_fd[i] = sockfd;
+ control->receive_timeout_ms[i] = tv->tv_sec * 1000 + tv->tv_usec / 1000;
+ break;
+ }
+ }
+
+ T_log(
+ T_VERBOSE,
+ "[setsockopt(sockfd=%d, level=%s, optname=%s, optval=%"PRIu32"ms )] = %d",
+ sockfd,
+ ( level == SOL_SOCKET ) ? "SOL_SOCKET" : "UNKONWN",
+ ( optname == SO_RCVTIMEO ) ? "SO_RCVTIMEO" : "UNKONWN",
+ ( i < MAX_SOCKET_FD ) ? control->receive_timeout_ms[i] : -1,
+ result
+ );
+
+ return result;
+}
+
+ssize_t sendto(
+ int sockfd,
+ const void *buf,
+ size_t len,
+ int flags,
+ const struct sockaddr *dest_addr,
+ socklen_t addrlen
+)
+{
+ char addr_buf[INET6_ADDRSTRLEN];
+ Tftp_Action act = {
+ .kind = TFTP_IA_KIND_SENDTO,
+ .data.sendto.fd = sockfd,
+ .data.sendto.buf = buf,
+ .data.sendto.len = len,
+ .data.sendto.flags = flags,
+ .data.sendto.dest_addr_str = addr_buf,
+ .data.sendto.addrlen = (int) addrlen,
+ };
+ act.data.sendto.dest_port = get_ip_addr_as_str(
+ dest_addr,
+ addrlen,
+ addr_buf,
+ sizeof( addr_buf )
+ );
+
+ if( !process_interaction( &act ) ) {
+ return -1;
+ };
+
+ return act.data.sendto.result;
+}
+
+ssize_t recvfrom(
+ int sockfd,
+ void *buf,
+ size_t len,
+ int flags,
+ struct sockaddr *src_addr,
+ socklen_t *addrlen
+)
+{
+ int i;
+ Tftp_Packet *pkt = buf;
+ Tftp_Action act = {
+ .kind = TFTP_IA_KIND_RECVFROM,
+ .data.recvfrom.fd = sockfd,
+ .data.recvfrom.buf = buf,
+ .data.recvfrom.len = len,
+ .data.recvfrom.flags = flags,
+ .data.recvfrom.timeout_ms = 0,
+ .data.recvfrom.addrlen = (int) *addrlen
+ };
+
+ for ( i = 0; i < MAX_SOCKET_FD; ++i ) {
+ if ( control->receive_timeout_socket_fd[i] == sockfd ) {
+ act.data.recvfrom.timeout_ms = control->receive_timeout_ms[i];
+ break;
+ }
+ }
+
+ /* Make log_tftp_packet() behave sane, if buf is not filled */
+ if ( len >= sizeof( pkt->opcode ) ) {
+ pkt->opcode = ntohs( 0xFFFF );
+ }
+
+ if( !process_interaction( &act ) ) {
+ return -1;
+ };
+
+ set_ip_addr_from_str(
+ act.data.recvfrom.src_addr_str,
+ act.data.recvfrom.src_port,
+ src_addr,
+ addrlen
+ );
+
+ return act.data.recvfrom.result;
+}
diff --git a/testsuites/fstests/tftpfs/tftpfs_udp_network_fake.h b/testsuites/fstests/tftpfs/tftpfs_udp_network_fake.h
new file mode 100644
index 0000000000..0a852353ad
--- /dev/null
+++ b/testsuites/fstests/tftpfs/tftpfs_udp_network_fake.h
@@ -0,0 +1,315 @@
+/* SPDX-License-Identifier: BSD-2-Clause */
+
+/**
+ * @file
+ *
+ * @ingroup RTEMSTestSuiteTestsTFTPFS
+ *
+ * @brief This header file provides interfaces and functions used to
+ * implement the UDP network fake for tftpfs tests.
+ *
+ * Definitions and declarations of data structures and functions.
+ */
+
+/*
+ * Copyright (C) 2022 embedded brains GmbH & Co. KG
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include <stddef.h>
+#include <stdint.h>
+#include <stdbool.h>
+#include <sys/types.h> /* ssize_t */
+
+#ifndef _TFTPFS_UDP_NETWORK_FAKE_H
+#define _TFTPFS_UDP_NETWORK_FAKE_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+
+/**
+ * @defgroup RTEMSTestSuiteTestsTFTPFS Test suite for libtftpsfs tests
+ *
+ * @ingroup RTEMSTestSuitesFilesystem
+ *
+ * @brief This test suite provides a tests for libtftpfs.
+ *
+ * There are some additional files relevant for the TFTP test suite:
+ *
+ * - `spec/build/testsuites/fstests/grp.yml`\n
+ * This file specifies how the RTEMS WAF build system has to compile, link
+ * and install all filesystem test suites. The TFTP test suite must
+ * be mentioned in this file to be build.
+ *
+ * - `spec/build/testsuites/fstests/tftpfs.yml`\n
+ * This file specifies how the RTEMS WAF build system has to compile, link
+ * and install the TFTP test suite.
+ *
+ * - `Doxygen`\n
+ * At variable `INPUT` the test suite is included to be processed by the
+ * Doxygen documentation generator.
+ *
+ * See also the _RTEMS Filesystem Design Guide_ Chapter _Trivial FTP Client
+ * Filesystem_.
+ *
+ * @{
+ */
+
+#define TFTP_STD_PORT 69
+#define TFTP_MAX_IP_ADDR_STRLEN (16 * 2 + 7 + 1)
+#define TFTP_MAX_ERROR_STRLEN 20
+#define TFTP_MAX_OPTIONS_SIZE 40
+
+/**
+ * @brief IP address strings and server names resolved by network fake
+ * functions like inet_aton() and gethostbyname().
+ */
+#define TFTP_KNOWN_IPV4_ADDR0_STR "127.0.0.1"
+#define TFTP_KNOWN_IPV4_ADDR0_ARRAY 127, 0, 0, 1
+#define TFTP_KNOWN_SERVER0_NAME "server.tftp"
+#define TFTP_KNOWN_SERVER0_IPV4 "10.7.0.2"
+#define TFTP_KNOWN_SERVER0_ARRAY 10, 7, 0, 2
+
+/**
+ * @brief The faked socket() function (i.e. socket interaction) must return
+ * a file descriptor equal or larger than @c TFTP_FIRST_FD
+ * or -1.
+ */
+#define TFTP_FIRST_FD 33333
+
+typedef enum Tftp_Action_kind {
+ TFTP_IA_KIND_SOCKET,
+ TFTP_IA_KIND_CLOSE,
+ TFTP_IA_KIND_BIND,
+ TFTP_IA_KIND_SENDTO,
+ TFTP_IA_KIND_RECVFROM
+} Tftp_Action_kind;
+
+typedef struct Tftp_Action {
+ Tftp_Action_kind kind;
+ union {
+ struct {
+ int domain;
+ int type;
+ int protocol;
+ int result;
+ } socket;
+ struct {
+ int fd;
+ int result;
+ } close;
+ struct {
+ int fd;
+ int family;
+ uint16_t port;
+ const char *addr_str;
+ int result;
+ } bind;
+ struct {
+ int fd;
+ const void *buf;
+ size_t len;
+ int flags;
+ uint16_t dest_port;
+ const char *dest_addr_str;
+ int addrlen;
+ ssize_t result;
+ } sendto;
+ struct {
+ int fd;
+ void *buf;
+ size_t len;
+ int flags;
+ uint32_t timeout_ms;
+ uint16_t src_port;
+ char src_addr_str[TFTP_MAX_IP_ADDR_STRLEN];
+ int addrlen;
+ ssize_t result;
+ } recvfrom;
+ } data;
+} Tftp_Action;
+
+/**
+ * @brief Carry out interactions with TFTP client.
+ *
+ * @c Tftp_Interaction_fn() is called to
+ *
+ * * check that the fake network function has been called with the expected
+ * arguments (in @c act)
+ * * define values which shall be returned (to be stored in @c act)
+ *
+ * The function should not call @c T_assert_*() but use @c T_*().
+ * Otherwise, it is unlikely that the test can terminate the client in
+ * @c teardown().
+ *
+ * @param[in,out] act The actual arguments provided by the TFTP client
+ * to the network function. Moreover, storage to store the results
+ * to be returned to the TFTP client.
+ * @param data Arbitrary data area allocated when the interaction is created
+ * by @c _Tftp_Append_interaction()
+ *
+ * @retval true if the client behaved as expected.
+ * @retval false if the test shall fail.
+ */
+typedef bool (*Tftp_Interaction_fn)( Tftp_Action *act, void *data );
+typedef struct Tftp_Interaction Tftp_Interaction;
+typedef struct Tftp_Interaction {
+ Tftp_Interaction *next;
+ Tftp_Action_kind kind;
+ Tftp_Interaction_fn fn;
+ void *data[0];
+} Tftp_Interaction;
+
+/**
+ * @brief Initialize and free the singleton control object.
+ *
+ * Invoke @c _Tftp_Reset() in @c setup() and @c teardown() of the test.
+ */
+void _Tftp_Reset( void );
+
+/**
+ * @brief Create an interaction and append it to the sequence of expected
+ * interactions.
+ *
+ * This allocates memory for an interaction and additional specific data
+ * for the function @c fn() parameter @c data. The interaction is
+ * initialized and appended at the end of the sequence of expected interactions.
+ * If an error occurs a @c T_assert_*() macro is called. Hence, this function
+ * never returns @c NULL.
+ *
+ * @param kind Defines which interaction is expected. Note that it cannot
+ * happen that @c fn is called for a different network function.
+ * @param fn A function which is called to handle the interaction.
+ * See @c Tftp_Interaction_fn()
+ * @param size The size of a memory area which is given to @c fn() as
+ * @c data argument when it is invoked. This can be used to provide
+ * private data to the function.
+ *
+ * @return A pointer to a memory area of size @c size. The same pointer
+ * will be provided to @c fn as argument @c data when invoked.
+ */
+void *_Tftp_Append_interaction(
+ Tftp_Action_kind kind,
+ Tftp_Interaction_fn fn,
+ size_t size
+);
+
+
+/**
+ * @brief Have all queued interactions been processed?
+ *
+ * At the end of a test, it should be checked whether all queued interactions
+ * have been consumed by the TFTP client.
+ *
+ * @retval true All queued interactions have been processed.
+ * @retval false At least one queued interactions has not yet been processed.
+ */
+bool _Tftp_Has_no_more_interactions( void );
+
+/*
+ * TFTP details from RFC1350, RFC2347, RFC2348 and RFC7440
+ *
+ * Note: The RFCs require modes and options to be case in-sensitive.
+ */
+
+#define TFTP_MODE_NETASCII "netascii"
+#define TFTP_MODE_OCTET "octet"
+#define TFTP_OPTION_BLKSIZE "blksize"
+#define TFTP_OPTION_TIMEOUT "timeout"
+#define TFTP_OPTION_TSIZE "tsize"
+#define TFTP_OPTION_WINDOWSIZE "windowsize"
+
+#define TFTP_WINDOW_SIZE_MIN 1
+#define TFTP_BLOCK_SIZE_MIN 8
+#define TFTP_BLOCK_SIZE_MAX 65464
+
+typedef enum Tftp_Opcode {
+ TFTP_OPCODE_RRQ = 1,
+ TFTP_OPCODE_WRQ = 2,
+ TFTP_OPCODE_DATA = 3,
+ TFTP_OPCODE_ACK = 4,
+ TFTP_OPCODE_ERROR = 5,
+ TFTP_OPCODE_OACK = 6,
+} Tftp_Opcode;
+
+typedef enum Tftp_Error_code {
+ TFTP_ERROR_CODE_NOT_DEFINED = 0,
+ TFTP_ERROR_CODE_NOT_FOUND = 1,
+ TFTP_ERROR_CODE_NO_ACCESS = 2,
+ TFTP_ERROR_CODE_DISK_FULL = 3,
+ TFTP_ERROR_CODE_ILLEGAL = 4,
+ TFTP_ERROR_CODE_UNKNOWN_ID = 5,
+ TFTP_ERROR_CODE_FILE_EXISTS = 6,
+ TFTP_ERROR_CODE_NO_USER = 7,
+ TFTP_ERROR_CODE_OPTION_NEGO = 8,
+} Tftp_Error_code;
+
+typedef struct Tftp_Packet {
+ uint16_t opcode;
+ union {
+ struct {
+ char opts[0];
+ } rrq;
+ struct {
+ char opts[0];
+ } wrq;
+ struct {
+ uint16_t block_num;
+ uint8_t bytes[0];
+ } data;
+ struct {
+ uint16_t block_num;
+ } ack;
+ struct {
+ uint16_t error_code;
+ char err_msg[0];
+ } error;
+ struct {
+ char opts[0];
+ } oack;
+ } content;
+} Tftp_Packet;
+
+/**
+ * @brief Provides a human readable description for an error code from an TFTP
+ * error packet.
+ *
+ * @param error_code The error code from the TFTP error packet in host byte
+ * order.
+ *
+ * @return A pointer to a string describing the error. If the error code is
+ * unknown, a pointer to "Unknown error code" is returned. Do not change the
+ * the string as a pointer to the very same string will be returned by future
+ * calls.
+ */
+const char *_Tftp_Get_error_str( uint16_t error_code );
+
+/** @} */
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* _TFTPFS_UDP_NETWORK_FAKE_H */
diff --git a/testsuites/libtests/POSIX/free.c b/testsuites/libtests/POSIX/free.c
index 8550eaa85c..246415ce65 100644
--- a/testsuites/libtests/POSIX/free.c
+++ b/testsuites/libtests/POSIX/free.c
@@ -12,9 +12,10 @@
#include <stdlib.h>
+void* p;
+
int main (void)
{
- free((void *) 42);
-
+ free(p);
return 0;
}
diff --git a/testsuites/libtests/POSIX/readv.c b/testsuites/libtests/POSIX/readv.c
index a980e9468c..6b0bf63f94 100644
--- a/testsuites/libtests/POSIX/readv.c
+++ b/testsuites/libtests/POSIX/readv.c
@@ -14,7 +14,7 @@
int main(void)
{
- struct iovec iov;
+ struct iovec iov = { 0 };
int count = 4;
ssize_t ret;
diff --git a/testsuites/libtests/POSIX/sigismember.c b/testsuites/libtests/POSIX/sigismember.c
index ed980b70f0..f4c7d37cb2 100644
--- a/testsuites/libtests/POSIX/sigismember.c
+++ b/testsuites/libtests/POSIX/sigismember.c
@@ -14,7 +14,7 @@
int main(void)
{
- sigset_t set;
+ sigset_t set = { 0 };
int status;
status = sigismember(&set, 21);
diff --git a/testsuites/libtests/POSIX/sigprocmask.c b/testsuites/libtests/POSIX/sigprocmask.c
index ba634e4660..25de0c28c7 100644
--- a/testsuites/libtests/POSIX/sigprocmask.c
+++ b/testsuites/libtests/POSIX/sigprocmask.c
@@ -15,7 +15,8 @@
int main(void)
{
int rc;
- sigset_t set1, set2;
+ sigset_t set1 = { 0 };
+ sigset_t set2 = { 0 };
rc = sigprocmask(SIG_BLOCK, &set1, &set2);
(void) rc;
diff --git a/testsuites/libtests/POSIX/writev.c b/testsuites/libtests/POSIX/writev.c
index 853b8a8ced..5b5068db65 100644
--- a/testsuites/libtests/POSIX/writev.c
+++ b/testsuites/libtests/POSIX/writev.c
@@ -14,7 +14,7 @@
int main(void)
{
- struct iovec iov;
+ struct iovec iov = { 0 };
int count = 4;
ssize_t ret;
diff --git a/testsuites/libtests/block01/block01.doc b/testsuites/libtests/block01/block01.doc
index 66fca83ea4..ff4d309f0a 100644
--- a/testsuites/libtests/block01/block01.doc
+++ b/testsuites/libtests/block01/block01.doc
@@ -1,6 +1,6 @@
# SPDX-License-Identifier: BSD-2-Clause
-# Copyright (c) 2009 embedded brains GmbH. All rights reserved.
+# Copyright (c) 2009 embedded brains GmbH & Co. KG
#
# Redistribution and use in source and binary forms, with or without
# modification, are permitted provided that the following conditions
diff --git a/testsuites/libtests/block01/init.c b/testsuites/libtests/block01/init.c
index 6af83f7655..7717b0b7e6 100644
--- a/testsuites/libtests/block01/init.c
+++ b/testsuites/libtests/block01/init.c
@@ -9,7 +9,7 @@
*/
/*
- * Copyright (c) 2009, 2018 embedded brains GmbH. All rights reserved.
+ * Copyright (C) 2009, 2018 embedded brains GmbH & Co. KG
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
diff --git a/testsuites/libtests/block02/block02.doc b/testsuites/libtests/block02/block02.doc
index 97f9de2e28..e5b99ec8fe 100644
--- a/testsuites/libtests/block02/block02.doc
+++ b/testsuites/libtests/block02/block02.doc
@@ -1,6 +1,6 @@
# SPDX-License-Identifier: BSD-2-Clause
-# Copyright (c) 2009 embedded brains GmbH. All rights reserved.
+# Copyright (c) 2009 embedded brains GmbH & Co. KG
#
# Redistribution and use in source and binary forms, with or without
# modification, are permitted provided that the following conditions
diff --git a/testsuites/libtests/block02/init.c b/testsuites/libtests/block02/init.c
index 3eb399dff4..1e8d179d9d 100644
--- a/testsuites/libtests/block02/init.c
+++ b/testsuites/libtests/block02/init.c
@@ -9,7 +9,7 @@
*/
/*
- * Copyright (c) 2009, 2018 embedded brains GmbH. All rights reserved.
+ * Copyright (C) 2009, 2018 embedded brains GmbH & Co. KG
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
diff --git a/testsuites/libtests/block03/block03.doc b/testsuites/libtests/block03/block03.doc
index 7c31c06765..221c7dd816 100644
--- a/testsuites/libtests/block03/block03.doc
+++ b/testsuites/libtests/block03/block03.doc
@@ -1,6 +1,6 @@
# SPDX-License-Identifier: BSD-2-Clause
-# Copyright (c) 2009 embedded brains GmbH. All rights reserved.
+# Copyright (c) 2009 embedded brains GmbH & Co. KG
#
# Redistribution and use in source and binary forms, with or without
# modification, are permitted provided that the following conditions
diff --git a/testsuites/libtests/block03/init.c b/testsuites/libtests/block03/init.c
index d4014e784d..da2fa27589 100644
--- a/testsuites/libtests/block03/init.c
+++ b/testsuites/libtests/block03/init.c
@@ -9,7 +9,7 @@
*/
/*
- * Copyright (c) 2009, 2018 embedded brains GmbH. All rights reserved.
+ * Copyright (C) 2009, 2018 embedded brains GmbH & Co. KG
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
diff --git a/testsuites/libtests/block04/block04.doc b/testsuites/libtests/block04/block04.doc
index 744c4be5be..2c05114636 100644
--- a/testsuites/libtests/block04/block04.doc
+++ b/testsuites/libtests/block04/block04.doc
@@ -1,6 +1,6 @@
# SPDX-License-Identifier: BSD-2-Clause
-# Copyright (c) 2009 embedded brains GmbH. All rights reserved.
+# Copyright (c) 2009 embedded brains GmbH & Co. KG
#
# Redistribution and use in source and binary forms, with or without
# modification, are permitted provided that the following conditions
diff --git a/testsuites/libtests/block04/init.c b/testsuites/libtests/block04/init.c
index 92b7d3af7a..cdbab6e3fc 100644
--- a/testsuites/libtests/block04/init.c
+++ b/testsuites/libtests/block04/init.c
@@ -9,7 +9,7 @@
*/
/*
- * Copyright (c) 2009, 2018 embedded brains GmbH. All rights reserved.
+ * Copyright (C) 2009, 2018 embedded brains GmbH & Co. KG
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
diff --git a/testsuites/libtests/block05/block05.doc b/testsuites/libtests/block05/block05.doc
index 4c739d41ee..30a246bdf1 100644
--- a/testsuites/libtests/block05/block05.doc
+++ b/testsuites/libtests/block05/block05.doc
@@ -1,6 +1,6 @@
# SPDX-License-Identifier: BSD-2-Clause
-# Copyright (c) 2009, 2010 embedded brains GmbH. All rights reserved.
+# Copyright (C) 2009, 2010 embedded brains GmbH & Co. KG
#
# Redistribution and use in source and binary forms, with or without
# modification, are permitted provided that the following conditions
diff --git a/testsuites/libtests/block05/init.c b/testsuites/libtests/block05/init.c
index 9845ec6895..e54fa9bd32 100644
--- a/testsuites/libtests/block05/init.c
+++ b/testsuites/libtests/block05/init.c
@@ -9,7 +9,7 @@
*/
/*
- * Copyright (c) 2009, 2018 embedded brains GmbH. All rights reserved.
+ * Copyright (C) 2009, 2018 embedded brains GmbH & Co. KG
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
diff --git a/testsuites/libtests/block07/block07.doc b/testsuites/libtests/block07/block07.doc
index 7643cb8630..18b2f9f656 100644
--- a/testsuites/libtests/block07/block07.doc
+++ b/testsuites/libtests/block07/block07.doc
@@ -1,6 +1,6 @@
# SPDX-License-Identifier: BSD-2-Clause
-# Copyright (c) 2009 embedded brains GmbH. All rights reserved.
+# Copyright (c) 2009 embedded brains GmbH & Co. KG
#
# Redistribution and use in source and binary forms, with or without
# modification, are permitted provided that the following conditions
diff --git a/testsuites/libtests/block07/init.c b/testsuites/libtests/block07/init.c
index 93685ad3b2..a755cde987 100644
--- a/testsuites/libtests/block07/init.c
+++ b/testsuites/libtests/block07/init.c
@@ -9,7 +9,7 @@
*/
/*
- * Copyright (c) 2009, 2018 embedded brains GmbH. All rights reserved.
+ * Copyright (C) 2009, 2018 embedded brains GmbH & Co. KG
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
diff --git a/testsuites/libtests/block09/block09.doc b/testsuites/libtests/block09/block09.doc
index 9522de911a..ffe672eb1d 100644
--- a/testsuites/libtests/block09/block09.doc
+++ b/testsuites/libtests/block09/block09.doc
@@ -1,6 +1,6 @@
# SPDX-License-Identifier: BSD-2-Clause
-# Copyright (c) 2010 embedded brains GmbH. All rights reserved.
+# Copyright (c) 2010 embedded brains GmbH & Co. KG
#
# Redistribution and use in source and binary forms, with or without
# modification, are permitted provided that the following conditions
diff --git a/testsuites/libtests/block09/init.c b/testsuites/libtests/block09/init.c
index 6c5dfb6ffd..2456952164 100644
--- a/testsuites/libtests/block09/init.c
+++ b/testsuites/libtests/block09/init.c
@@ -9,7 +9,7 @@
*/
/*
- * Copyright (c) 2009, 2018 embedded brains GmbH. All rights reserved.
+ * Copyright (C) 2009, 2018 embedded brains GmbH & Co. KG
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
diff --git a/testsuites/libtests/block10/block10.doc b/testsuites/libtests/block10/block10.doc
index 46ad5c808c..7020cc56c0 100644
--- a/testsuites/libtests/block10/block10.doc
+++ b/testsuites/libtests/block10/block10.doc
@@ -1,6 +1,6 @@
# SPDX-License-Identifier: BSD-2-Clause
-# Copyright (c) 2010 embedded brains GmbH. All rights reserved.
+# Copyright (c) 2010 embedded brains GmbH & Co. KG
#
# Redistribution and use in source and binary forms, with or without
# modification, are permitted provided that the following conditions
diff --git a/testsuites/libtests/block10/init.c b/testsuites/libtests/block10/init.c
index 3ea1022020..693a8a8908 100644
--- a/testsuites/libtests/block10/init.c
+++ b/testsuites/libtests/block10/init.c
@@ -9,7 +9,7 @@
*/
/*
- * Copyright (c) 2010, 2018 embedded brains GmbH.
+ * Copyright (C) 2010, 2018 embedded brains GmbH & Co. KG
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
diff --git a/testsuites/libtests/block11/init.c b/testsuites/libtests/block11/init.c
index 22ae8e1e5a..5d442e768f 100644
--- a/testsuites/libtests/block11/init.c
+++ b/testsuites/libtests/block11/init.c
@@ -9,7 +9,7 @@
*/
/*
- * Copyright (c) 2012 embedded brains GmbH. All rights reserved.
+ * Copyright (c) 2012 embedded brains GmbH & Co. KG
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
diff --git a/testsuites/libtests/block12/init.c b/testsuites/libtests/block12/init.c
index 7d488a9fe9..ad51974fec 100644
--- a/testsuites/libtests/block12/init.c
+++ b/testsuites/libtests/block12/init.c
@@ -1,7 +1,7 @@
/* SPDX-License-Identifier: BSD-2-Clause */
/*
- * Copyright (c) 2012, 2018 embedded brains GmbH. All rights reserved.
+ * Copyright (C) 2012, 2018 embedded brains GmbH & Co. KG
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
diff --git a/testsuites/libtests/block13/init.c b/testsuites/libtests/block13/init.c
index 9b6f3ed09d..c91ce8818d 100644
--- a/testsuites/libtests/block13/init.c
+++ b/testsuites/libtests/block13/init.c
@@ -1,7 +1,7 @@
/* SPDX-License-Identifier: BSD-2-Clause */
/*
- * Copyright (c) 2012, 2018 embedded brains GmbH. All rights reserved.
+ * Copyright (C) 2012, 2018 embedded brains GmbH & Co. KG
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
diff --git a/testsuites/libtests/block14/init.c b/testsuites/libtests/block14/init.c
index e3fe71e5da..ba0291d314 100644
--- a/testsuites/libtests/block14/init.c
+++ b/testsuites/libtests/block14/init.c
@@ -1,7 +1,7 @@
/* SPDX-License-Identifier: BSD-2-Clause */
/*
- * Copyright (c) 2012, 2018 embedded brains GmbH. All rights reserved.
+ * Copyright (C) 2012, 2018 embedded brains GmbH & Co. KG
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
diff --git a/testsuites/libtests/block15/init.c b/testsuites/libtests/block15/init.c
index 4d8b48fc66..9409061631 100644
--- a/testsuites/libtests/block15/init.c
+++ b/testsuites/libtests/block15/init.c
@@ -1,7 +1,7 @@
/* SPDX-License-Identifier: BSD-2-Clause */
/*
- * Copyright (c) 2012 embedded brains GmbH. All rights reserved.
+ * Copyright (c) 2012 embedded brains GmbH & Co. KG
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
diff --git a/testsuites/libtests/block16/init.c b/testsuites/libtests/block16/init.c
index 883e1b05ea..d800895fee 100644
--- a/testsuites/libtests/block16/init.c
+++ b/testsuites/libtests/block16/init.c
@@ -1,7 +1,7 @@
/* SPDX-License-Identifier: BSD-2-Clause */
/*
- * Copyright (c) 2012 embedded brains GmbH. All rights reserved.
+ * Copyright (c) 2012 embedded brains GmbH & Co. KG
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
diff --git a/testsuites/libtests/block17/init.c b/testsuites/libtests/block17/init.c
index cedadfced8..bf670f679d 100644
--- a/testsuites/libtests/block17/init.c
+++ b/testsuites/libtests/block17/init.c
@@ -1,7 +1,7 @@
/* SPDX-License-Identifier: BSD-2-Clause */
/*
- * Copyright (c) 2013, 2018 embedded brains GmbH. All rights reserved.
+ * Copyright (C) 2013, 2018 embedded brains GmbH & Co. KG
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
diff --git a/testsuites/libtests/crypt01/init.c b/testsuites/libtests/crypt01/init.c
index 0944aa60f7..37966a0200 100644
--- a/testsuites/libtests/crypt01/init.c
+++ b/testsuites/libtests/crypt01/init.c
@@ -1,7 +1,7 @@
/*
* Copyright (c) 2011 The FreeBSD Project. All rights reserved.
*
- * Copyright (c) 2014 embedded brains GmbH. All rights reserved.
+ * Copyright (c) 2014 embedded brains GmbH & Co. KG
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
@@ -36,6 +36,8 @@
#include <crypt.h>
#include <string.h>
+#include <rtems/stackchk.h>
+
#include "tmacros.h"
const char rtems_test_name[] = "CRYPT 1";
@@ -234,18 +236,20 @@ static void Init(rtems_task_argument arg)
test_sha512();
test_generic();
+ rtems_test_assert(!rtems_stack_checker_is_blown());
TEST_END();
rtems_test_exit(0);
}
#define CONFIGURE_APPLICATION_DOES_NOT_NEED_CLOCK_DRIVER
#define CONFIGURE_APPLICATION_NEEDS_SIMPLE_CONSOLE_DRIVER
+#define CONFIGURE_STACK_CHECKER_ENABLED
#define CONFIGURE_MAXIMUM_TASKS 1
#define CONFIGURE_INITIAL_EXTENSIONS RTEMS_TEST_INITIAL_EXTENSION
-#define CONFIGURE_INIT_TASK_STACK_SIZE (2 * RTEMS_MINIMUM_STACK_SIZE)
+#define CONFIGURE_INIT_TASK_STACK_SIZE (8 * RTEMS_MINIMUM_STACK_SIZE)
#define CONFIGURE_RTEMS_INIT_TASKS_TABLE
diff --git a/testsuites/libtests/defaultconfig01/init.c b/testsuites/libtests/defaultconfig01/init.c
index 1a5451fb09..b8d702c96f 100644
--- a/testsuites/libtests/defaultconfig01/init.c
+++ b/testsuites/libtests/defaultconfig01/init.c
@@ -1,7 +1,7 @@
/* SPDX-License-Identifier: BSD-2-Clause */
/*
- * Copyright (c) 2014 embedded brains GmbH. All rights reserved.
+ * Copyright (c) 2014 embedded brains GmbH & Co. KG
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
diff --git a/testsuites/libtests/devfs01/init.c b/testsuites/libtests/devfs01/init.c
index 193c7641db..b467bbd998 100644
--- a/testsuites/libtests/devfs01/init.c
+++ b/testsuites/libtests/devfs01/init.c
@@ -1,7 +1,7 @@
/* SPDX-License-Identifier: BSD-2-Clause */
/*
- * Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+ * Copyright (C) 2020 embedded brains GmbH & Co. KG
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
diff --git a/testsuites/libtests/dl01/dl01-o1.c b/testsuites/libtests/dl01/dl01-o1.c
index ade4d5744d..9350235d85 100644
--- a/testsuites/libtests/dl01/dl01-o1.c
+++ b/testsuites/libtests/dl01/dl01-o1.c
@@ -29,7 +29,7 @@
* Hello World as a loadable module.
*/
-#include <rtems/test-info.h>
+#include <rtems/test-printer.h>
#define printf(...) rtems_printf(&rtems_test_printer, __VA_ARGS__);
diff --git a/testsuites/libtests/dl01/init.c b/testsuites/libtests/dl01/init.c
index 59cf3147f0..06fa8004b8 100644
--- a/testsuites/libtests/dl01/init.c
+++ b/testsuites/libtests/dl01/init.c
@@ -94,7 +94,7 @@ static void Init(rtems_task_argument arg)
#define CONFIGURE_RTEMS_INIT_TASKS_TABLE
-#define CONFIGURE_INIT_TASK_STACK_SIZE (8U * 1024U)
+#define CONFIGURE_INIT_TASK_STACK_SIZE (CONFIGURE_MINIMUM_TASK_STACK_SIZE + (4U * 1024U))
#define CONFIGURE_INIT_TASK_ATTRIBUTES RTEMS_FLOATING_POINT
diff --git a/testsuites/libtests/dl02/dl02-o1.c b/testsuites/libtests/dl02/dl02-o1.c
index b442f82ae7..3b3e51825d 100644
--- a/testsuites/libtests/dl02/dl02-o1.c
+++ b/testsuites/libtests/dl02/dl02-o1.c
@@ -29,7 +29,7 @@
#include <dlfcn.h>
-#include <rtems/test-info.h>
+#include <rtems/test-printer.h>
#define printf(...) rtems_printf(&rtems_test_printer, __VA_ARGS__);
diff --git a/testsuites/libtests/dl02/dl02-o2.c b/testsuites/libtests/dl02/dl02-o2.c
index 02a537a84f..6694c5e985 100644
--- a/testsuites/libtests/dl02/dl02-o2.c
+++ b/testsuites/libtests/dl02/dl02-o2.c
@@ -27,7 +27,7 @@
#include "dl-o2.h"
-#include <rtems/test-info.h>
+#include <rtems/test-printer.h>
#define printf(...) rtems_printf(&rtems_test_printer, __VA_ARGS__)
diff --git a/testsuites/libtests/dl02/init.c b/testsuites/libtests/dl02/init.c
index 19563e9093..495a58d287 100644
--- a/testsuites/libtests/dl02/init.c
+++ b/testsuites/libtests/dl02/init.c
@@ -94,7 +94,7 @@ static void Init(rtems_task_argument arg)
#define CONFIGURE_RTEMS_INIT_TASKS_TABLE
-#define CONFIGURE_INIT_TASK_STACK_SIZE (8U * 1024U)
+#define CONFIGURE_INIT_TASK_STACK_SIZE (CONFIGURE_MINIMUM_TASK_STACK_SIZE + (4U * 1024U))
#define CONFIGURE_INIT_TASK_ATTRIBUTES (RTEMS_DEFAULT_ATTRIBUTES | RTEMS_FLOATING_POINT)
diff --git a/testsuites/libtests/dl03/init.c b/testsuites/libtests/dl03/init.c
index 5080323c05..e953f1a4c6 100644
--- a/testsuites/libtests/dl03/init.c
+++ b/testsuites/libtests/dl03/init.c
@@ -80,7 +80,7 @@ static void Init(rtems_task_argument arg)
#define CONFIGURE_RTEMS_INIT_TASKS_TABLE
-#define CONFIGURE_INIT_TASK_STACK_SIZE (8U * 1024U)
+#define CONFIGURE_INIT_TASK_STACK_SIZE (CONFIGURE_MINIMUM_TASK_STACK_SIZE + (4U * 1024U))
#define CONFIGURE_INIT_TASK_ATTRIBUTES (RTEMS_DEFAULT_ATTRIBUTES | RTEMS_FLOATING_POINT)
diff --git a/testsuites/libtests/dl04/init.c b/testsuites/libtests/dl04/init.c
index a733d9da14..54a852800d 100644
--- a/testsuites/libtests/dl04/init.c
+++ b/testsuites/libtests/dl04/init.c
@@ -94,7 +94,7 @@ static void Init(rtems_task_argument arg)
#define CONFIGURE_RTEMS_INIT_TASKS_TABLE
-#define CONFIGURE_INIT_TASK_STACK_SIZE (8U * 1024U)
+#define CONFIGURE_INIT_TASK_STACK_SIZE (CONFIGURE_MINIMUM_TASK_STACK_SIZE + (4U * 1024U))
#define CONFIGURE_INIT_TASK_ATTRIBUTES RTEMS_FLOATING_POINT
diff --git a/testsuites/libtests/dl05/dl05-o5.cc b/testsuites/libtests/dl05/dl05-o5.cc
index c861916ff0..f928cf9004 100644
--- a/testsuites/libtests/dl05/dl05-o5.cc
+++ b/testsuites/libtests/dl05/dl05-o5.cc
@@ -2,7 +2,7 @@
#include <stdexcept>
-#include <rtems/test-info.h>
+#include <rtems/test-printer.h>
#define printf(...) rtems_printf(&rtems_test_printer, __VA_ARGS__);
diff --git a/testsuites/libtests/dl05/init.c b/testsuites/libtests/dl05/init.c
index 93d69578f7..7e34af757d 100644
--- a/testsuites/libtests/dl05/init.c
+++ b/testsuites/libtests/dl05/init.c
@@ -96,7 +96,7 @@ static void Init(rtems_task_argument arg)
#define CONFIGURE_RTEMS_INIT_TASKS_TABLE
-#define CONFIGURE_INIT_TASK_STACK_SIZE (32U * 1024U)
+#define CONFIGURE_INIT_TASK_STACK_SIZE (36U * 1024U)
#define CONFIGURE_INIT_TASK_ATTRIBUTES RTEMS_FLOATING_POINT
diff --git a/testsuites/libtests/dl06/dl06-o1.c b/testsuites/libtests/dl06/dl06-o1.c
index 719d01e91f..1b8482bc3e 100644
--- a/testsuites/libtests/dl06/dl06-o1.c
+++ b/testsuites/libtests/dl06/dl06-o1.c
@@ -30,7 +30,7 @@
#include <dlfcn.h>
#include <math.h>
-#include <rtems/test-info.h>
+#include <rtems/test-printer.h>
#define printf(...) rtems_printf(&rtems_test_printer, __VA_ARGS__);
diff --git a/testsuites/libtests/dl06/dl06-o2.c b/testsuites/libtests/dl06/dl06-o2.c
index 837c2e8e4f..0a46c027a8 100644
--- a/testsuites/libtests/dl06/dl06-o2.c
+++ b/testsuites/libtests/dl06/dl06-o2.c
@@ -30,7 +30,7 @@
#include <stdlib.h>
#include <math.h>
-#include <rtems/test-info.h>
+#include <rtems/test-printer.h>
#define printf(...) rtems_printf(&rtems_test_printer, __VA_ARGS__);
diff --git a/testsuites/libtests/dl06/initimpl.h b/testsuites/libtests/dl06/initimpl.h
index 66e503b156..0d3987983d 100644
--- a/testsuites/libtests/dl06/initimpl.h
+++ b/testsuites/libtests/dl06/initimpl.h
@@ -98,7 +98,7 @@ static void Init(rtems_task_argument arg)
#define CONFIGURE_RTEMS_INIT_TASKS_TABLE
-#define CONFIGURE_INIT_TASK_STACK_SIZE (8U * 1024U)
+#define CONFIGURE_INIT_TASK_STACK_SIZE (CONFIGURE_MINIMUM_TASK_STACK_SIZE + (4U * 1024U))
#define CONFIGURE_INIT_TASK_ATTRIBUTES (RTEMS_DEFAULT_ATTRIBUTES | RTEMS_FLOATING_POINT)
diff --git a/testsuites/libtests/dl07/dl-load.c b/testsuites/libtests/dl07/dl-load.c
index 58e3e06f78..2946120ca6 100644
--- a/testsuites/libtests/dl07/dl-load.c
+++ b/testsuites/libtests/dl07/dl-load.c
@@ -32,6 +32,7 @@
RTEMS_RTL_TRACE_WARNING | \
RTEMS_RTL_TRACE_LOAD | \
RTEMS_RTL_TRACE_UNLOAD | \
+ RTEMS_RTL_TRACE_LOAD_SECT | \
RTEMS_RTL_TRACE_SYMBOL | \
RTEMS_RTL_TRACE_RELOC | \
RTEMS_RTL_TRACE_ALLOCATOR | \
diff --git a/testsuites/libtests/dl07/dl07-o1.c b/testsuites/libtests/dl07/dl07-o1.c
index 24a8086c49..0bca0ab838 100644
--- a/testsuites/libtests/dl07/dl07-o1.c
+++ b/testsuites/libtests/dl07/dl07-o1.c
@@ -28,7 +28,7 @@
#include "dl-o1.h"
-#include <rtems/test-info.h>
+#include <rtems/test-printer.h>
#include "dl-load.h"
#define printf(...) rtems_printf(&rtems_test_printer, __VA_ARGS__);
diff --git a/testsuites/libtests/dl07/dl07-o2.c b/testsuites/libtests/dl07/dl07-o2.c
index 12cc917ae0..46aef0d6fe 100644
--- a/testsuites/libtests/dl07/dl07-o2.c
+++ b/testsuites/libtests/dl07/dl07-o2.c
@@ -29,7 +29,7 @@
#include "dl-o1.h"
#include "dl-o2.h"
-#include <rtems/test-info.h>
+#include <rtems/test-printer.h>
#define printf(...) rtems_printf(&rtems_test_printer, __VA_ARGS__);
diff --git a/testsuites/libtests/dl07/dl07-o3.c b/testsuites/libtests/dl07/dl07-o3.c
index 12a5fe6829..ab60f50e97 100644
--- a/testsuites/libtests/dl07/dl07-o3.c
+++ b/testsuites/libtests/dl07/dl07-o3.c
@@ -32,7 +32,7 @@
#include "dl-o5.h"
#include <inttypes.h>
-#include <rtems/test-info.h>
+#include <rtems/test-printer.h>
#define printf(...) rtems_printf(&rtems_test_printer, __VA_ARGS__);
diff --git a/testsuites/libtests/dl07/dl07-o4.c b/testsuites/libtests/dl07/dl07-o4.c
index aeeb404561..e5f831ec24 100644
--- a/testsuites/libtests/dl07/dl07-o4.c
+++ b/testsuites/libtests/dl07/dl07-o4.c
@@ -29,7 +29,7 @@
#include "dl-o1.h"
#include "dl-o4.h"
-#include <rtems/test-info.h>
+#include <rtems/test-printer.h>
#define printf(...) rtems_printf(&rtems_test_printer, __VA_ARGS__);
diff --git a/testsuites/libtests/dl07/dl07-o5.c b/testsuites/libtests/dl07/dl07-o5.c
index e487d072ae..83e98f6d9d 100644
--- a/testsuites/libtests/dl07/dl07-o5.c
+++ b/testsuites/libtests/dl07/dl07-o5.c
@@ -30,7 +30,7 @@
#include "dl-o5.h"
#include <inttypes.h>
-#include <rtems/test-info.h>
+#include <rtems/test-printer.h>
#define printf(...) rtems_printf(&rtems_test_printer, __VA_ARGS__);
diff --git a/testsuites/libtests/dl07/init.c b/testsuites/libtests/dl07/init.c
index 42b3bed3fc..8db106ba29 100644
--- a/testsuites/libtests/dl07/init.c
+++ b/testsuites/libtests/dl07/init.c
@@ -100,7 +100,7 @@ static void Init(rtems_task_argument arg)
#define CONFIGURE_RTEMS_INIT_TASKS_TABLE
-#define CONFIGURE_INIT_TASK_STACK_SIZE (8U * 1024U)
+#define CONFIGURE_INIT_TASK_STACK_SIZE (CONFIGURE_MINIMUM_TASK_STACK_SIZE + (4U * 1024U))
#define CONFIGURE_INIT_TASK_ATTRIBUTES (RTEMS_DEFAULT_ATTRIBUTES | RTEMS_FLOATING_POINT)
diff --git a/testsuites/libtests/dl08/dl08-o1.c b/testsuites/libtests/dl08/dl08-o1.c
index ccd8bc3587..015e847ea2 100644
--- a/testsuites/libtests/dl08/dl08-o1.c
+++ b/testsuites/libtests/dl08/dl08-o1.c
@@ -28,7 +28,7 @@
#include "dl-o1.h"
-#include <rtems/test-info.h>
+#include <rtems/test-printer.h>
#include "dl-load.h"
#include "dl-o1.h"
#include "dl-o2.h"
diff --git a/testsuites/libtests/dl08/dl08-o2.c b/testsuites/libtests/dl08/dl08-o2.c
index 8d72cb8703..3833cb5768 100644
--- a/testsuites/libtests/dl08/dl08-o2.c
+++ b/testsuites/libtests/dl08/dl08-o2.c
@@ -29,7 +29,7 @@
#include "dl-o2.h"
#include "dl-o3.h"
-#include <rtems/test-info.h>
+#include <rtems/test-printer.h>
#define printf(...) rtems_printf(&rtems_test_printer, __VA_ARGS__);
diff --git a/testsuites/libtests/dl08/dl08-o3.c b/testsuites/libtests/dl08/dl08-o3.c
index 267895476c..dc839bf270 100644
--- a/testsuites/libtests/dl08/dl08-o3.c
+++ b/testsuites/libtests/dl08/dl08-o3.c
@@ -31,7 +31,7 @@
#include "dl-o5.h"
#include <inttypes.h>
-#include <rtems/test-info.h>
+#include <rtems/test-printer.h>
#define printf(...) rtems_printf(&rtems_test_printer, __VA_ARGS__);
diff --git a/testsuites/libtests/dl08/dl08-o4.c b/testsuites/libtests/dl08/dl08-o4.c
index b77bf60465..d09fd2ec93 100644
--- a/testsuites/libtests/dl08/dl08-o4.c
+++ b/testsuites/libtests/dl08/dl08-o4.c
@@ -29,7 +29,7 @@
#include "dl-o4.h"
#include "dl-o5.h"
-#include <rtems/test-info.h>
+#include <rtems/test-printer.h>
#define printf(...) rtems_printf(&rtems_test_printer, __VA_ARGS__);
diff --git a/testsuites/libtests/dl08/dl08-o5.c b/testsuites/libtests/dl08/dl08-o5.c
index 614bff6a24..de86437757 100644
--- a/testsuites/libtests/dl08/dl08-o5.c
+++ b/testsuites/libtests/dl08/dl08-o5.c
@@ -30,7 +30,7 @@
#include "dl-o6.h"
#include <inttypes.h>
-#include <rtems/test-info.h>
+#include <rtems/test-printer.h>
#define printf(...) rtems_printf(&rtems_test_printer, __VA_ARGS__);
diff --git a/testsuites/libtests/dl08/dl08-o6-123456789-123456789.c b/testsuites/libtests/dl08/dl08-o6-123456789-123456789.c
index 3a03ec6e84..47d3f66f76 100644
--- a/testsuites/libtests/dl08/dl08-o6-123456789-123456789.c
+++ b/testsuites/libtests/dl08/dl08-o6-123456789-123456789.c
@@ -29,7 +29,7 @@
#include "dl-o6.h"
#include <inttypes.h>
-#include <rtems/test-info.h>
+#include <rtems/test-printer.h>
#define printf(...) rtems_printf(&rtems_test_printer, __VA_ARGS__);
diff --git a/testsuites/libtests/dl08/init.c b/testsuites/libtests/dl08/init.c
index 02f999e0c6..23ebe41d63 100644
--- a/testsuites/libtests/dl08/init.c
+++ b/testsuites/libtests/dl08/init.c
@@ -100,7 +100,7 @@ static void Init(rtems_task_argument arg)
#define CONFIGURE_RTEMS_INIT_TASKS_TABLE
-#define CONFIGURE_INIT_TASK_STACK_SIZE (8U * 1024U)
+#define CONFIGURE_INIT_TASK_STACK_SIZE (CONFIGURE_MINIMUM_TASK_STACK_SIZE + (4U * 1024U))
#define CONFIGURE_INIT_TASK_ATTRIBUTES (RTEMS_DEFAULT_ATTRIBUTES | RTEMS_FLOATING_POINT)
diff --git a/testsuites/libtests/dl09/dl-load.c b/testsuites/libtests/dl09/dl-load.c
index 1de7c8fa29..216fb5a201 100644
--- a/testsuites/libtests/dl09/dl-load.c
+++ b/testsuites/libtests/dl09/dl-load.c
@@ -116,8 +116,12 @@ static void dl_check_resolved(void* handle, bool has_unresolved)
rtems_test_assert (unresolved == 0);
}
}
- printf ("handel: %p: %sunresolved externals\n",
- handle, unresolved != 0 ? "" : "no ");
+ if (handle == RTLD_SELF)
+ printf ("handle: RTL_SELF: %sunresolved externals\n",
+ unresolved != 0 ? "" : "no ");
+ else
+ printf ("handle: %p: %sunresolved externals\n",
+ handle, unresolved != 0 ? "" : "no ");
}
static void* dl_load_obj (const char* name, bool has_unresolved)
@@ -152,12 +156,20 @@ static void dl_close (void* handle)
static int dl_call (void* handle, const char* func)
{
+ static call_sig last_call;
call_sig call = dlsym (handle, func);
if (call == NULL)
{
printf("dlsym failed: symbol not found: %s\n", func);
return 1;
}
+ if (last_call != NULL && last_call != call)
+ {
+ printf("Call location different: moved by: %i (call:%p last:%p)\n",
+ (int) (call - last_call),
+ call, last_call);
+ }
+ last_call = call;
call ();
return 0;
}
@@ -171,7 +183,7 @@ static void dl_object_open (object_def* od, objects* o)
if (od->space != 0)
{
o->space = malloc (od->space);
- printf("space alloc: %s: %d: %p\n", od->name, od->space, o->space);
+ printf("space alloc: %s: %zd: %p\n", od->name, od->space, o->space);
rtems_test_assert (o->space != NULL);
}
dl_load_dump ();
diff --git a/testsuites/libtests/dl09/dl09-o1.c b/testsuites/libtests/dl09/dl09-o1.c
index 4659fda17c..291d33fcd0 100644
--- a/testsuites/libtests/dl09/dl09-o1.c
+++ b/testsuites/libtests/dl09/dl09-o1.c
@@ -28,7 +28,7 @@
#include "dl-o1.h"
-#include <rtems/test-info.h>
+#include <rtems/test-printer.h>
#include "dl-load.h"
#include "dl-o1.h"
#include "dl-o2.h"
diff --git a/testsuites/libtests/dl09/dl09-o2.c b/testsuites/libtests/dl09/dl09-o2.c
index a6906b4ad9..e8976f3b49 100644
--- a/testsuites/libtests/dl09/dl09-o2.c
+++ b/testsuites/libtests/dl09/dl09-o2.c
@@ -29,7 +29,7 @@
#include "dl-o2.h"
#include "dl-o3.h"
-#include <rtems/test-info.h>
+#include <rtems/test-printer.h>
#define printf(...) rtems_printf(&rtems_test_printer, __VA_ARGS__);
diff --git a/testsuites/libtests/dl09/dl09-o3.c b/testsuites/libtests/dl09/dl09-o3.c
index fab70c02c7..d9a056d45d 100644
--- a/testsuites/libtests/dl09/dl09-o3.c
+++ b/testsuites/libtests/dl09/dl09-o3.c
@@ -31,7 +31,7 @@
#include "dl-o5.h"
#include <inttypes.h>
-#include <rtems/test-info.h>
+#include <rtems/test-printer.h>
#define printf(...) rtems_printf(&rtems_test_printer, __VA_ARGS__);
diff --git a/testsuites/libtests/dl09/dl09-o4.c b/testsuites/libtests/dl09/dl09-o4.c
index 5cf4eb0f4b..8998059c93 100644
--- a/testsuites/libtests/dl09/dl09-o4.c
+++ b/testsuites/libtests/dl09/dl09-o4.c
@@ -29,7 +29,7 @@
#include "dl-o4.h"
#include "dl-o5.h"
-#include <rtems/test-info.h>
+#include <rtems/test-printer.h>
#define printf(...) rtems_printf(&rtems_test_printer, __VA_ARGS__);
diff --git a/testsuites/libtests/dl09/dl09-o5.c b/testsuites/libtests/dl09/dl09-o5.c
index 6b4aedbf68..e5374f3eb8 100644
--- a/testsuites/libtests/dl09/dl09-o5.c
+++ b/testsuites/libtests/dl09/dl09-o5.c
@@ -30,7 +30,7 @@
#include "dl-o5.h"
#include <inttypes.h>
-#include <rtems/test-info.h>
+#include <rtems/test-printer.h>
#define printf(...) rtems_printf(&rtems_test_printer, __VA_ARGS__);
diff --git a/testsuites/libtests/dl09/init.c b/testsuites/libtests/dl09/init.c
index e8caf9b6e8..b375fe3f38 100644
--- a/testsuites/libtests/dl09/init.c
+++ b/testsuites/libtests/dl09/init.c
@@ -100,7 +100,7 @@ static void Init(rtems_task_argument arg)
#define CONFIGURE_RTEMS_INIT_TASKS_TABLE
-#define CONFIGURE_INIT_TASK_STACK_SIZE (8U * 1024U)
+#define CONFIGURE_INIT_TASK_STACK_SIZE (CONFIGURE_MINIMUM_TASK_STACK_SIZE + (4U * 1024U))
#define CONFIGURE_INIT_TASK_ATTRIBUTES (RTEMS_DEFAULT_ATTRIBUTES | RTEMS_FLOATING_POINT)
diff --git a/testsuites/libtests/dl10/dl10-o1.c b/testsuites/libtests/dl10/dl10-o1.c
index ccd8bc3587..015e847ea2 100644
--- a/testsuites/libtests/dl10/dl10-o1.c
+++ b/testsuites/libtests/dl10/dl10-o1.c
@@ -28,7 +28,7 @@
#include "dl-o1.h"
-#include <rtems/test-info.h>
+#include <rtems/test-printer.h>
#include "dl-load.h"
#include "dl-o1.h"
#include "dl-o2.h"
diff --git a/testsuites/libtests/dl10/dl10-o2.c b/testsuites/libtests/dl10/dl10-o2.c
index 8d72cb8703..3833cb5768 100644
--- a/testsuites/libtests/dl10/dl10-o2.c
+++ b/testsuites/libtests/dl10/dl10-o2.c
@@ -29,7 +29,7 @@
#include "dl-o2.h"
#include "dl-o3.h"
-#include <rtems/test-info.h>
+#include <rtems/test-printer.h>
#define printf(...) rtems_printf(&rtems_test_printer, __VA_ARGS__);
diff --git a/testsuites/libtests/dl10/dl10-o3.c b/testsuites/libtests/dl10/dl10-o3.c
index 267895476c..dc839bf270 100644
--- a/testsuites/libtests/dl10/dl10-o3.c
+++ b/testsuites/libtests/dl10/dl10-o3.c
@@ -31,7 +31,7 @@
#include "dl-o5.h"
#include <inttypes.h>
-#include <rtems/test-info.h>
+#include <rtems/test-printer.h>
#define printf(...) rtems_printf(&rtems_test_printer, __VA_ARGS__);
diff --git a/testsuites/libtests/dl10/dl10-o4.c b/testsuites/libtests/dl10/dl10-o4.c
index b77bf60465..d09fd2ec93 100644
--- a/testsuites/libtests/dl10/dl10-o4.c
+++ b/testsuites/libtests/dl10/dl10-o4.c
@@ -29,7 +29,7 @@
#include "dl-o4.h"
#include "dl-o5.h"
-#include <rtems/test-info.h>
+#include <rtems/test-printer.h>
#define printf(...) rtems_printf(&rtems_test_printer, __VA_ARGS__);
diff --git a/testsuites/libtests/dl10/dl10-o5.c b/testsuites/libtests/dl10/dl10-o5.c
index 35cfbda2cd..185c259d8c 100644
--- a/testsuites/libtests/dl10/dl10-o5.c
+++ b/testsuites/libtests/dl10/dl10-o5.c
@@ -29,7 +29,7 @@
#include "dl-o5.h"
#include <inttypes.h>
-#include <rtems/test-info.h>
+#include <rtems/test-printer.h>
#define printf(...) rtems_printf(&rtems_test_printer, __VA_ARGS__);
diff --git a/testsuites/libtests/dl10/dl10-o6.c b/testsuites/libtests/dl10/dl10-o6.c
index fad9516f7b..2484ff6f2f 100644
--- a/testsuites/libtests/dl10/dl10-o6.c
+++ b/testsuites/libtests/dl10/dl10-o6.c
@@ -29,7 +29,6 @@
#include "dl-o5.h"
#include <inttypes.h>
-#include <rtems/test-info.h>
int rtems_main_o5 (void)
{
diff --git a/testsuites/libtests/dl10/init.c b/testsuites/libtests/dl10/init.c
index 2a23bd3d15..04f71eaaba 100644
--- a/testsuites/libtests/dl10/init.c
+++ b/testsuites/libtests/dl10/init.c
@@ -148,7 +148,7 @@ static void Init(rtems_task_argument arg)
#define CONFIGURE_RTEMS_INIT_TASKS_TABLE
-#define CONFIGURE_INIT_TASK_STACK_SIZE (8U * 1024U)
+#define CONFIGURE_INIT_TASK_STACK_SIZE (CONFIGURE_MINIMUM_TASK_STACK_SIZE + (4U * 1024U))
#define CONFIGURE_INIT_TASK_ATTRIBUTES (RTEMS_DEFAULT_ATTRIBUTES | RTEMS_FLOATING_POINT)
diff --git a/testsuites/libtests/dl11/dl-load.c b/testsuites/libtests/dl11/dl-load.c
new file mode 100644
index 0000000000..b09128acdf
--- /dev/null
+++ b/testsuites/libtests/dl11/dl-load.c
@@ -0,0 +1,207 @@
+/* SPDX-License-Identifier: BSD-2-Clause */
+
+/*
+ * Copyright (C) 2023 On-Line Applications Research Corporation (OAR).
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include <errno.h>
+#include <stdio.h>
+#include "tmacros.h"
+#include <pthread.h>
+
+#include <dlfcn.h>
+
+#include "dl-load.h"
+
+#include <rtems/rtl/rtl-shell.h>
+#include <rtems/rtl/rtl-trace.h>
+
+#define TEST_TRACE 0
+#if TEST_TRACE
+ #define SHOW_GLOBAL_SYMS 1
+ #if SHOW_GLOBAL_SYMS
+ #define TRACE_GLOBAL_SYMBOL RTEMS_RTL_TRACE_GLOBAL_SYM
+ #else
+ #define TRACE_GLOBAL_SYMBOL 0
+ #endif
+ #define DEBUG_TRACE (RTEMS_RTL_TRACE_DETAIL | \
+ RTEMS_RTL_TRACE_WARNING | \
+ RTEMS_RTL_TRACE_LOAD | \
+ RTEMS_RTL_TRACE_UNLOAD | \
+ TRACE_GLOBAL_SYMBOL | \
+ RTEMS_RTL_TRACE_SYMBOL | \
+ RTEMS_RTL_TRACE_RELOC | \
+ RTEMS_RTL_TRACE_ALLOCATOR | \
+ RTEMS_RTL_TRACE_UNRESOLVED | \
+ RTEMS_RTL_TRACE_ARCHIVES | \
+ RTEMS_RTL_TRACE_DEPENDENCY)
+ #define DL_DEBUG_TRACE DEBUG_TRACE /* RTEMS_RTL_TRACE_ALL */
+ #define DL_RTL_CMDS 1
+#else
+ #define DL_DEBUG_TRACE 0
+ #define DL_RTL_CMDS 0
+#endif
+
+static void dl_load_dump (void)
+{
+#if DL_RTL_CMDS
+ char* list[] = { "rtl", "list", NULL };
+ char* sym[] = { "rtl", "sym", NULL };
+ printf ("RTL List:\n");
+ rtems_rtl_shell_command (2, list);
+ printf ("RTL Sym:\n");
+ rtems_rtl_shell_command (2, sym);
+#endif
+}
+
+typedef int (*int_call_t)(void);
+typedef int* (*ptr_call_t)(void);
+
+void* get_errno_ptr(void);
+int get_errno(void);
+
+int_call_t int_call;
+ptr_call_t ptr_call;
+static int perform_test(void)
+{
+ int int_call_ret;
+ int* ptr_call_ret;
+ ptr_call_ret = ptr_call ();
+ if (ptr_call_ret != get_errno_ptr())
+ {
+ printf("dlsym ptr_call failed: ret value bad\n");
+ return 1;
+ }
+
+ errno = 12345;
+ int_call_ret = int_call ();
+ if (int_call_ret != get_errno())
+ {
+ printf("dlsym int_call failed: ret value bad\n");
+ return 1;
+ }
+ errno = 0;
+
+ return 0;
+}
+
+static void *secondary_thread(void *arg)
+{
+ printf("Running test on secondary thread\n");
+ if (perform_test()) {
+ printf("Test failed on secondary task\n");
+ return (void *) 1;
+ }
+
+ return NULL;
+}
+
+static void start_secondary(void)
+{
+ /* Run the test on a secondary thread */
+ pthread_t threadId;
+ int status;
+ void *ret;
+ status = pthread_create( &threadId, NULL, secondary_thread, NULL );
+ rtems_test_assert( !status );
+
+ /* Wait on thread to exit */
+ status = pthread_join(threadId, &ret);
+ rtems_test_assert( !status );
+ rtems_test_assert( ret == NULL );
+}
+
+int dl_load_test(void)
+{
+ void* handle;
+ int unresolved;
+ char* message = "loaded";
+
+#if DL_DEBUG_TRACE
+ rtems_rtl_trace_set_mask (DL_DEBUG_TRACE);
+#endif
+
+ printf("load: /dl11-o1.o\n");
+
+ handle = dlopen ("/dl11-o1.o", RTLD_NOW | RTLD_GLOBAL);
+ if (!handle)
+ {
+ printf("dlopen failed: %s\n", dlerror());
+ return 1;
+ }
+
+ if (dlinfo (handle, RTLD_DI_UNRESOLVED, &unresolved) < 0)
+ message = "dlinfo error checking unresolved status";
+ else if (unresolved)
+ message = "has unresolved externals";
+
+ printf ("handle: %p %s\n", handle, message);
+
+ dl_load_dump ();
+
+ ptr_call = dlsym (handle, "get_errno_ptr");
+ if (ptr_call == NULL)
+ {
+ printf("dlsym failed: symbol get_errno_ptr not found\n");
+ return 1;
+ }
+
+ int_call = dlsym (handle, "get_errno_val");
+ if (int_call == NULL)
+ {
+ printf("dlsym failed: symbol get_errno_val not found\n");
+ return 1;
+ }
+
+ /* Run the test on the init thread */
+ printf("Running test on init task\n");
+ if (perform_test()) {
+ return 1;
+ }
+
+ start_secondary();
+
+ if (dlclose (handle) < 0)
+ {
+ printf("dlclose failed: %s\n", dlerror());
+ return 1;
+ }
+
+ printf ("handle: %p closed\n", handle);
+
+ return 0;
+}
+
+/*
+ * Disasseble these to see how the platform accesses TLS
+ */
+void* get_errno_ptr(void)
+{
+ return &errno;
+}
+
+int get_errno(void)
+{
+ return errno;
+}
diff --git a/testsuites/libtests/dl11/dl-load.h b/testsuites/libtests/dl11/dl-load.h
new file mode 100644
index 0000000000..142b195626
--- /dev/null
+++ b/testsuites/libtests/dl11/dl-load.h
@@ -0,0 +1,33 @@
+/* SPDX-License-Identifier: BSD-2-Clause */
+
+/*
+ * Copyright (c) 2014 Chris Johns <chrisj@rtems.org>. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#if !defined(_DL_LOAD_H_)
+#define _DL_LOAD_H_
+
+int dl_load_test(void);
+
+#endif
diff --git a/testsuites/libtests/dl11/dl11-o1.c b/testsuites/libtests/dl11/dl11-o1.c
new file mode 100644
index 0000000000..93ee2a60c7
--- /dev/null
+++ b/testsuites/libtests/dl11/dl11-o1.c
@@ -0,0 +1,41 @@
+/* SPDX-License-Identifier: BSD-2-Clause */
+
+/*
+ * Copyright (C) 2023 On-Line Applications Research Corporation (OAR).
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include <errno.h>
+
+int get_errno_val (void);
+int *get_errno_ptr (void);
+
+int get_errno_val (void)
+{
+ return errno;
+}
+
+int *get_errno_ptr (void)
+{
+ return &errno;
+}
diff --git a/testsuites/libtests/dl11/dl11.doc b/testsuites/libtests/dl11/dl11.doc
new file mode 100644
index 0000000000..0fffe1cfd3
--- /dev/null
+++ b/testsuites/libtests/dl11/dl11.doc
@@ -0,0 +1,44 @@
+# SPDX-License-Identifier: BSD-2-Clause
+
+# Copyright (C) 2023 On-Line Applications Research Corporation (OAR).
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1. Redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+# 2. Redistributions in binary form must reproduce the above copyright
+# notice, this list of conditions and the following disclaimer in the
+# documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+# ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
+# LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+# POSSIBILITY OF SUCH DAMAGE.
+#
+
+This file describes the directives and concepts tested by this test set.
+
+test set name: dl11
+
+directives:
+
+ dlopen
+ dlinfo
+ dlsym
+ dlclose
+
+concepts:
+
++ Load a single ELF object file.
++ Check there are no unreolved externals.
++ Locate the get_errno_val and get_errno_ptr symbols.
++ Call the functions that use TLS variables and verify relocated symbols.
++ Unload the ELF file.
diff --git a/testsuites/libtests/dl11/dl11.scn b/testsuites/libtests/dl11/dl11.scn
new file mode 100644
index 0000000000..43048c91d2
--- /dev/null
+++ b/testsuites/libtests/dl11/dl11.scn
@@ -0,0 +1,6 @@
+*** BEGIN OF TEST libdl (RTL) 11 ***
+load: /dl11-o1.o
+handle: 0x40118e60 loaded
+handle: 0x40118e60 closed
+
+*** END OF TEST libdl (RTL) 11 ***
diff --git a/testsuites/libtests/dl11/init.c b/testsuites/libtests/dl11/init.c
new file mode 100644
index 0000000000..0ff4557421
--- /dev/null
+++ b/testsuites/libtests/dl11/init.c
@@ -0,0 +1,105 @@
+/* SPDX-License-Identifier: BSD-2-Clause */
+
+/*
+ * Copyright (c) 2014 Chris Johns <chrisj@rtems.org>. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#include "tmacros.h"
+
+#include <errno.h>
+#include <string.h>
+#include <stdint.h>
+#include <unistd.h>
+
+#include <rtems/rtl/rtl.h>
+#include <rtems/imfs.h>
+
+#include "dl-load.h"
+
+const char rtems_test_name[] = "libdl (RTL) 11";
+
+/* forward declarations to avoid warnings */
+static rtems_task Init(rtems_task_argument argument);
+
+#include "dl11-tar.h"
+
+#define TARFILE_START dl11_tar
+#define TARFILE_SIZE dl11_tar_size
+
+static int test(void)
+{
+ int ret;
+ ret = dl_load_test();
+ if (ret)
+ rtems_test_exit(ret);
+ return 0;
+}
+
+static void Init(rtems_task_argument arg)
+{
+ int te;
+
+ TEST_BEGIN();
+
+ te = rtems_tarfs_load("/", (void *)TARFILE_START, (size_t)TARFILE_SIZE);
+ if (te != 0)
+ {
+ printf("untar failed: %d\n", te);
+ rtems_test_exit(1);
+ exit (1);
+ }
+
+ test();
+
+ TEST_END();
+
+ rtems_test_exit(0);
+}
+
+#define CONFIGURE_APPLICATION_NEEDS_CLOCK_DRIVER
+#define CONFIGURE_APPLICATION_NEEDS_SIMPLE_CONSOLE_DRIVER
+
+#define CONFIGURE_MAXIMUM_FILE_DESCRIPTORS 4
+
+#define CONFIGURE_MAXIMUM_POSIX_THREADS 1
+
+#define CONFIGURE_MAXIMUM_TASKS 1
+
+#define CONFIGURE_MAXIMUM_SEMAPHORES 1
+
+#define CONFIGURE_INITIAL_EXTENSIONS RTEMS_TEST_INITIAL_EXTENSION
+
+#define CONFIGURE_RTEMS_INIT_TASKS_TABLE
+
+#define CONFIGURE_INIT_TASK_STACK_SIZE (CONFIGURE_MINIMUM_TASK_STACK_SIZE + (4U * 1024U))
+
+#define CONFIGURE_INIT_TASK_ATTRIBUTES RTEMS_FLOATING_POINT
+
+#define CONFIGURE_INIT
+
+#include <rtems/confdefs.h>
diff --git a/testsuites/libtests/exit01/init.c b/testsuites/libtests/exit01/init.c
index df4beb15c3..0938cff025 100644
--- a/testsuites/libtests/exit01/init.c
+++ b/testsuites/libtests/exit01/init.c
@@ -1,7 +1,7 @@
/* SPDX-License-Identifier: BSD-2-Clause */
/*
- * Copyright (c) 2013 embedded brains GmbH. All rights reserved.
+ * Copyright (c) 2013 embedded brains GmbH & Co. KG
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
diff --git a/testsuites/libtests/exit02/init.c b/testsuites/libtests/exit02/init.c
index 652464ab9b..8d8e43c173 100644
--- a/testsuites/libtests/exit02/init.c
+++ b/testsuites/libtests/exit02/init.c
@@ -1,7 +1,7 @@
/* SPDX-License-Identifier: BSD-2-Clause */
/*
- * Copyright (c) 2013 embedded brains GmbH. All rights reserved.
+ * Copyright (c) 2013 embedded brains GmbH & Co. KG
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
diff --git a/testsuites/libtests/exit03/exit03.doc b/testsuites/libtests/exit03/exit03.doc
new file mode 100644
index 0000000000..c575ef40fb
--- /dev/null
+++ b/testsuites/libtests/exit03/exit03.doc
@@ -0,0 +1,11 @@
+This file describes the directives and concepts tested by this test set.
+
+test set name: exit03
+
+directives:
+
+ exit()
+
+concepts:
+
+ Ensure exit() in a C++ application works.
diff --git a/testsuites/libtests/exit03/exit03.scn b/testsuites/libtests/exit03/exit03.scn
new file mode 100644
index 0000000000..03d45a0c1f
--- /dev/null
+++ b/testsuites/libtests/exit03/exit03.scn
@@ -0,0 +1,5 @@
+caught exception
+IO on std::cout
+IO on std::cerr
+
+*** END OF TEST EXIT 3 ***
diff --git a/testsuites/libtests/exit03/init.c b/testsuites/libtests/exit03/init.c
new file mode 100644
index 0000000000..44acb35c6e
--- /dev/null
+++ b/testsuites/libtests/exit03/init.c
@@ -0,0 +1,122 @@
+/* SPDX-License-Identifier: BSD-2-Clause */
+
+/*
+ * Copyright (c) 2022 Chris Johns (Contemporary Software). All rights reserved.
+ * Copyright (c) 2013 embedded brains GmbH & Co. KG
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#include "tmacros.h"
+
+#include <stdlib.h>
+
+/* Use assert() not rtems_test_assert() since it uses exit() */
+#include <assert.h>
+
+#include <rtems.h>
+
+void cplusplus_stdio(void);
+
+const char rtems_test_name[] = "EXIT 3";
+
+#define EXIT_STATUS 123
+
+static int counter;
+
+static void atexit_0(void)
+{
+ assert(counter == 0);
+ ++counter;
+}
+
+static void fatal_extension(
+ rtems_fatal_source source,
+ bool always_set_to_false,
+ rtems_fatal_code error
+)
+{
+ if (
+ source == RTEMS_FATAL_SOURCE_EXIT
+ && !always_set_to_false
+ && error == EXIT_STATUS
+ && counter == 1
+ ) {
+ TEST_END();
+ }
+}
+
+static void exit_task(rtems_task_argument arg)
+{
+ int rv;
+
+ rv = atexit(atexit_0);
+ assert(rv == 0);
+
+ cplusplus_stdio();
+
+ exit(EXIT_STATUS);
+}
+
+static void Init(rtems_task_argument arg)
+{
+ rtems_status_code sc;
+ rtems_id id;
+
+ TEST_BEGIN();
+
+ sc = rtems_task_create(
+ rtems_build_name('E', 'X', 'I', 'T'),
+ RTEMS_MINIMUM_PRIORITY,
+ RTEMS_MINIMUM_STACK_SIZE,
+ RTEMS_DEFAULT_MODES,
+ RTEMS_DEFAULT_ATTRIBUTES,
+ &id
+ );
+ assert(sc == RTEMS_SUCCESSFUL);
+
+ sc = rtems_task_start(id, exit_task, 0);
+ assert(sc == RTEMS_SUCCESSFUL);
+
+ rtems_task_exit();
+}
+
+#define CONFIGURE_APPLICATION_NEEDS_CLOCK_DRIVER
+#define CONFIGURE_APPLICATION_NEEDS_SIMPLE_CONSOLE_DRIVER
+
+#define CONFIGURE_INITIAL_EXTENSIONS \
+ { .fatal = fatal_extension }, \
+ RTEMS_TEST_INITIAL_EXTENSION
+
+#define CONFIGURE_MAXIMUM_TASKS 2
+
+#define CONFIGURE_RTEMS_INIT_TASKS_TABLE
+
+#define CONFIGURE_MAXIMUM_POSIX_KEYS 2
+
+#define CONFIGURE_INIT
+
+#include <rtems/confdefs.h>
diff --git a/testsuites/libtests/exit03/stdio.cc b/testsuites/libtests/exit03/stdio.cc
new file mode 100644
index 0000000000..09f2f1951c
--- /dev/null
+++ b/testsuites/libtests/exit03/stdio.cc
@@ -0,0 +1,61 @@
+/* SPDX-License-Identifier: BSD-2-Clause */
+
+/*
+ * Copyright (c) 2022 Chris Johns (Contemporary Software). All rights reserved.
+ * Copyright (c) 2013 embedded brains GmbH & Co. KG
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#include <exception>
+#include <iostream>
+
+extern "C" {
+void cplusplus_stdio(void);
+}
+
+static void throw_something() {
+ throw std::runtime_error("something");
+}
+
+static void throw_and_catch() {
+ try {
+ throw_something();
+ std::cout << "nothing caught exception" << std::endl;
+ } catch (std::runtime_error& e) {
+ std::cout << "caught exception" << std::endl;
+ }
+}
+
+void cplusplus_stdio(void) {
+ std::set_terminate([](){
+ std::cout << "FATAL: terminate called" << std::endl;
+ std::abort();
+ });
+ throw_and_catch();
+ std::cout << "IO on std::cout" << std::endl;
+ std::cerr << "IO on std::cerr" << std::endl;
+}
diff --git a/testsuites/libtests/flashdev01/flashdev01.doc b/testsuites/libtests/flashdev01/flashdev01.doc
new file mode 100644
index 0000000000..0638a5a842
--- /dev/null
+++ b/testsuites/libtests/flashdev01/flashdev01.doc
@@ -0,0 +1,11 @@
+This file describes the directives and concepts testd by this test set.
+
+test set name: flashdev01
+
+directives:
+
+ TBD
+
+concepts:
+
+ - Ensure that the flashdev driver API works.
diff --git a/testsuites/libtests/flashdev01/flashdev01.scn b/testsuites/libtests/flashdev01/flashdev01.scn
new file mode 100644
index 0000000000..809ff3cd80
--- /dev/null
+++ b/testsuites/libtests/flashdev01/flashdev01.scn
@@ -0,0 +1,2 @@
+*** BEGIN OF TEST FLASHDEV 1 ***
+*** END OF TEST FLASHDEV 1 ***
diff --git a/testsuites/libtests/flashdev01/init.c b/testsuites/libtests/flashdev01/init.c
new file mode 100644
index 0000000000..6ce9709496
--- /dev/null
+++ b/testsuites/libtests/flashdev01/init.c
@@ -0,0 +1,190 @@
+/*
+ * SPDX-License-Identifier: BSD-2-Clause
+ *
+ * Copyright (C) 2023 Aaron Nyholm
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include "tmacros.h"
+
+#include "test_flashdev.h"
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <fcntl.h>
+#include <sys/ioctl.h>
+
+#define TEST_NAME_LENGTH 10
+
+#define TEST_DATA_SIZE (PAGE_SIZE * PAGE_COUNT)
+#define PAGE_COUNT 16
+#define PAGE_SIZE 128
+#define WB_SIZE 1
+
+const char rtems_test_name[] = "FLASHDEV 1";
+
+static void run_test(void);
+
+static void run_test(void) {
+
+ char buff[TEST_DATA_SIZE] = {0};
+ FILE *file;
+ int fd;
+ rtems_flashdev* flash;
+ int status;
+ char* read_data;
+ rtems_flashdev_region e_args;
+ rtems_flashdev_ioctl_page_info pg_info;
+ rtems_flashdev_region region;
+ uint32_t jedec;
+ int page_count;
+ int type;
+ size_t wb_size;
+
+ /* Initalize the flash device driver and flashdev */
+ flash = test_flashdev_init();
+ rtems_test_assert(flash != NULL);
+
+ /* Register the flashdev as a device */
+ status = rtems_flashdev_register(flash, "dev/flashdev0");
+ rtems_test_assert(!status);
+
+ /* Open the flashdev */
+ file = fopen("dev/flashdev0", "r+");
+ rtems_test_assert(file != NULL);
+ fd = fileno(file);
+
+ /* Read data from flash */
+ read_data = fgets(buff, TEST_DATA_SIZE, file);
+ rtems_test_assert(read_data != NULL);
+
+ /* Fseek to start of flash */
+ status = fseek(file, 0x0, SEEK_SET);
+ rtems_test_assert(!status);
+
+ /* Write the test name to the flash */
+ status = fwrite(rtems_test_name, TEST_NAME_LENGTH, 1, file);
+ rtems_test_assert(status == 1);
+
+ /* Fseek to start of flash and read again */
+ status = fseek(file, 0x0, SEEK_SET);
+ rtems_test_assert(!status);
+ fgets(buff, TEST_DATA_SIZE, file);
+ rtems_test_assert(!strncmp(buff, rtems_test_name, TEST_NAME_LENGTH));
+
+ /* Test Erasing */
+ e_args.offset = 0x0;
+ e_args.size = PAGE_SIZE;
+ status = ioctl(fd, RTEMS_FLASHDEV_IOCTL_ERASE, &e_args);
+ rtems_test_assert(!status);
+
+ fseek(file, 0x0, SEEK_SET);
+ fgets(buff, TEST_DATA_SIZE, file);
+ rtems_test_assert(buff[0] == 0);
+
+ /* Test getting JEDEC ID */
+ status = ioctl(fd, RTEMS_FLASHDEV_IOCTL_JEDEC_ID, &jedec);
+ rtems_test_assert(!status);
+ rtems_test_assert(jedec == 0x00ABCDEF);
+
+ /* Test getting flash type */
+ status = ioctl(fd, RTEMS_FLASHDEV_IOCTL_TYPE, &type);
+ rtems_test_assert(!status);
+ rtems_test_assert(type == RTEMS_FLASHDEV_NOR);
+
+ /* Test getting page info from offset */
+ pg_info.location = PAGE_SIZE + PAGE_SIZE/2;
+
+ status = ioctl(fd, RTEMS_FLASHDEV_IOCTL_PAGEINFO_BY_OFFSET, &pg_info);
+ rtems_test_assert(!status);
+ rtems_test_assert(pg_info.page_info.offset == PAGE_SIZE);
+ rtems_test_assert(pg_info.page_info.size == PAGE_SIZE);
+
+ /* Test getting page info from index */
+ pg_info.location = 2;
+ status = ioctl(fd, RTEMS_FLASHDEV_IOCTL_PAGEINFO_BY_INDEX, &pg_info);
+ rtems_test_assert(!status);
+ rtems_test_assert(pg_info.page_info.offset == 2*PAGE_SIZE);
+ rtems_test_assert(pg_info.page_info.size == PAGE_SIZE);
+
+ /* Test getting page count */
+ status = ioctl(fd, RTEMS_FLASHDEV_IOCTL_PAGE_COUNT, &page_count);
+ rtems_test_assert(!status);
+ rtems_test_assert(page_count == PAGE_COUNT);
+
+ /* Test getting write block size */
+ status = ioctl(fd, RTEMS_FLASHDEV_IOCTL_WRITE_BLOCK_SIZE, &wb_size);
+ rtems_test_assert(!status);
+ rtems_test_assert(wb_size == WB_SIZE);
+
+ /* Test Regions */
+ region.offset = 0x400;
+ region.size = 0x200;
+ status = ioctl(fd, RTEMS_FLASHDEV_IOCTL_REGION_SET, &region);
+ rtems_test_assert(!status);
+
+ /* Test read to larger then region */
+ fseek(file, 0x0, SEEK_SET);
+ read_data = fgets(buff, 2048, file);
+ rtems_test_assert(read_data == NULL);
+
+ /* Test fseek outside of region */
+ status = fseek(file, 0x201, SEEK_SET);
+ rtems_test_assert(status);
+
+ /* Write to base unset region and check the writes location */
+ fseek(file, 0x0, SEEK_SET);
+ fwrite("HELLO WORLD", 11, 1, file);
+ ioctl(fd, RTEMS_FLASHDEV_IOCTL_REGION_UNSET, NULL);
+ fseek(file, 0x400, SEEK_SET);
+ fgets(buff, 11, file);
+ rtems_test_assert(strncmp(buff, "HELLO WORLD", 11));
+}
+
+static void Init(rtems_task_argument arg)
+{
+ TEST_BEGIN();
+
+ run_test();
+
+ TEST_END();
+ rtems_test_exit(0);
+}
+
+#define CONFIGURE_MICROSECONDS_PER_TICK 2000
+
+#define CONFIGURE_APPLICATION_DOES_NOT_NEED_CLOCK_DRIVER
+
+#define CONFIGURE_MAXIMUM_FILE_DESCRIPTORS 7
+
+#define CONFIGURE_MAXIMUM_TASKS 2
+
+#define CONFIGURE_MAXIMUM_SEMAPHORES 1
+
+#define CONFIGURE_INITIAL_EXTENSIONS RTEMS_TEST_INITIAL_EXTENSION
+
+#define CONFIGURE_RTEMS_INIT_TASKS_TABLE
+
+#define CONFIGURE_INIT
+
+#include <rtems/confdefs.h>
diff --git a/testsuites/libtests/flashdev01/test_flashdev.c b/testsuites/libtests/flashdev01/test_flashdev.c
new file mode 100644
index 0000000000..708d708977
--- /dev/null
+++ b/testsuites/libtests/flashdev01/test_flashdev.c
@@ -0,0 +1,275 @@
+/*
+ * Copyright (C) 2023 Aaron Nyholm
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include "test_flashdev.h"
+
+#include <stdlib.h>
+#include <string.h>
+
+#include <rtems/seterr.h>
+
+#define TEST_DATA_SIZE (PAGE_SIZE * PAGE_COUNT)
+#define PAGE_COUNT 16
+#define PAGE_SIZE 128
+#define WB_SIZE 1
+#define MAX_NUM_REGIONS 48
+#define BITALLOC_SIZE 32
+#define NUM_BITALLOC ((MAX_NUM_REGIONS + BITALLOC_SIZE - 1) / BITALLOC_SIZE)
+
+/**
+ * This flash device driver is for testing flashdev
+ * API calls.
+ */
+typedef struct test_flashdev {
+ char* data;
+ uint32_t jedec_id;
+ uint32_t bit_allocator[NUM_BITALLOC];
+ rtems_flashdev_region regions[MAX_NUM_REGIONS];
+} test_flashdev;
+
+int test_flashdev_page_by_off(
+ rtems_flashdev *flash,
+ off_t search_offset,
+ off_t *page_offset,
+ size_t *page_size
+);
+
+int test_flashdev_page_by_index(
+ rtems_flashdev *flash,
+ off_t search_index,
+ off_t *page_offset,
+ size_t *page_size
+);
+
+int test_flashdev_page_count(
+ rtems_flashdev *flash,
+ int *page_count
+);
+
+int test_flashdev_wb_size(
+ rtems_flashdev *flash,
+ size_t *write_block_size
+);
+
+uint32_t test_flashdev_jedec_id(
+ rtems_flashdev* flash
+);
+
+int test_flashdev_type(
+ rtems_flashdev* flash,
+ rtems_flashdev_flash_type* type
+);
+
+int test_flashdev_read(
+ rtems_flashdev* flash,
+ uintptr_t offset,
+ size_t count,
+ void* buffer
+);
+
+int test_flashdev_write(
+ rtems_flashdev* flash,
+ uintptr_t offset,
+ size_t count,
+ const void* buffer
+);
+
+int test_flashdev_erase(
+ rtems_flashdev* flash,
+ uintptr_t offset,
+ size_t count
+);
+
+/* Find page info by offset handler */
+int test_flashdev_page_by_off(
+ rtems_flashdev *flash,
+ off_t search_offset,
+ off_t *page_offset,
+ size_t *page_size
+)
+{
+ *page_offset = search_offset - (search_offset%PAGE_SIZE);
+ *page_size = PAGE_SIZE;
+ return 0;
+}
+
+/* Find page by index handler */
+int test_flashdev_page_by_index(
+ rtems_flashdev *flash,
+ off_t search_index,
+ off_t *page_offset,
+ size_t *page_size
+)
+{
+ *page_offset = search_index * PAGE_SIZE;
+ *page_size = PAGE_SIZE;
+ return 0;
+}
+
+/* Page count handler */
+int test_flashdev_page_count(
+ rtems_flashdev *flash,
+ int *page_count
+)
+{
+ *page_count = PAGE_COUNT;
+ return 0;
+}
+
+/* Write block size handler */
+int test_flashdev_wb_size(
+ rtems_flashdev *flash,
+ size_t *write_block_size
+)
+{
+ *write_block_size = WB_SIZE;
+ return 0;
+}
+
+/* JEDEC ID handler, this would normally require a READID
+ * call to the physical flash device.
+ */
+uint32_t test_flashdev_jedec_id(
+ rtems_flashdev* flash
+)
+{
+ test_flashdev* driver = flash->driver;
+ return driver->jedec_id;
+}
+
+/* Function to identify what kind of flash is attached. */
+int test_flashdev_type(
+ rtems_flashdev *flash,
+ rtems_flashdev_flash_type *type
+)
+{
+ *type = RTEMS_FLASHDEV_NOR;
+ return 0;
+}
+
+/* Read flash call. Any offset or count protections are
+ * required to be done in the driver function. */
+int test_flashdev_read(
+ rtems_flashdev* flash,
+ uintptr_t offset,
+ size_t count,
+ void* buffer
+)
+{
+ test_flashdev* driver = flash->driver;
+
+ if (offset + count > TEST_DATA_SIZE) {
+ rtems_set_errno_and_return_minus_one( EINVAL );
+ }
+
+ memcpy(buffer, &driver->data[offset], count);
+ return 0;
+}
+
+/* Write Flash call. Any offset or count protections are
+ * required to be done in the driver function. */
+int test_flashdev_write(
+ rtems_flashdev* flash,
+ uintptr_t offset,
+ size_t count,
+ const void* buffer
+)
+{
+ test_flashdev* driver = flash->driver;
+
+ if (offset + count > TEST_DATA_SIZE) {
+ rtems_set_errno_and_return_minus_one( EINVAL );
+ }
+
+ memcpy(&driver->data[offset], buffer, count);
+ return 0;
+}
+
+/* Erase Flash call. Any offset or count protections are
+ * required to be done in the driver function. */
+int test_flashdev_erase(
+ rtems_flashdev* flash,
+ uintptr_t offset,
+ size_t count
+)
+{
+ test_flashdev* driver = flash->driver;
+
+ if (offset + count > TEST_DATA_SIZE) {
+ rtems_set_errno_and_return_minus_one( EINVAL );
+ }
+
+ if (offset%PAGE_SIZE || count%PAGE_SIZE) {
+ rtems_set_errno_and_return_minus_one( EINVAL );
+ }
+
+ memset(&driver->data[offset], 0, count);
+ return 0;
+}
+
+/* Initialize Flashdev and underlying driver. */
+rtems_flashdev* test_flashdev_init(void)
+{
+ rtems_flashdev *flash = rtems_flashdev_alloc_and_init(sizeof(rtems_flashdev));
+
+ if (flash == NULL) {
+ return NULL;
+ }
+
+ test_flashdev* flash_driver = calloc(1, sizeof(test_flashdev));
+
+ if (flash_driver == NULL) {
+ rtems_flashdev_destroy_and_free(flash);
+ return NULL;
+ }
+
+ flash_driver->data = calloc(1, TEST_DATA_SIZE);
+ if (flash_driver->data == NULL) {
+ free(flash_driver);
+ rtems_flashdev_destroy_and_free(flash);
+ return NULL;
+ }
+
+ flash_driver->jedec_id = 0x00ABCDEF;
+
+ rtems_flashdev_region_table *ftable = calloc(1, sizeof(rtems_flashdev_region_table));
+ ftable->max_regions = MAX_NUM_REGIONS;
+ ftable->regions = flash_driver->regions;
+ ftable->bit_allocator = flash_driver->bit_allocator;
+
+ flash->driver = flash_driver;
+ flash->read = &test_flashdev_read;
+ flash->write = &test_flashdev_write;
+ flash->erase = &test_flashdev_erase;
+ flash->jedec_id = &test_flashdev_jedec_id;
+ flash->flash_type = &test_flashdev_type;
+ flash->page_info_by_offset = &test_flashdev_page_by_off;
+ flash->page_info_by_index = &test_flashdev_page_by_index;
+ flash->page_count = &test_flashdev_page_count;
+ flash->write_block_size = &test_flashdev_wb_size;
+ flash->region_table = ftable;
+
+ return flash;
+}
diff --git a/testsuites/libtests/flashdev01/test_flashdev.h b/testsuites/libtests/flashdev01/test_flashdev.h
new file mode 100644
index 0000000000..8b03959c42
--- /dev/null
+++ b/testsuites/libtests/flashdev01/test_flashdev.h
@@ -0,0 +1,35 @@
+/* SPDX-License-Identifier: BSD-2-Clause */
+
+/*
+ * Copyright (C) 2023 Aaron Nyholm
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#ifndef __TEST_FLASHDEV_H
+#define __TEST_FLASHDEV_H
+
+#include <dev/flash/flashdev.h>
+
+rtems_flashdev* test_flashdev_init(void);
+
+#endif /* __TEST_FLASHDEV_H */
diff --git a/testsuites/libtests/flashdisk01/init.c b/testsuites/libtests/flashdisk01/init.c
index 0caeb4e181..da9fc2a5b5 100644
--- a/testsuites/libtests/flashdisk01/init.c
+++ b/testsuites/libtests/flashdisk01/init.c
@@ -1,7 +1,7 @@
/* SPDX-License-Identifier: BSD-2-Clause */
/*
- * Copyright (c) 2012 embedded brains GmbH. All rights reserved.
+ * Copyright (c) 2012 embedded brains GmbH & Co. KG
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
diff --git a/testsuites/libtests/flashdisk01/test-file-system.c b/testsuites/libtests/flashdisk01/test-file-system.c
index 66b18de273..f8c87fb8ad 100644
--- a/testsuites/libtests/flashdisk01/test-file-system.c
+++ b/testsuites/libtests/flashdisk01/test-file-system.c
@@ -1,7 +1,7 @@
/* SPDX-License-Identifier: BSD-2-Clause */
/*
- * Copyright (c) 2010-2012 embedded brains GmbH. All rights reserved.
+ * Copyright (C) 2010, 2012 embedded brains GmbH & Co. KG
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
diff --git a/testsuites/libtests/flashdisk01/test-file-system.h b/testsuites/libtests/flashdisk01/test-file-system.h
index 5bb5064246..b592ac7dca 100644
--- a/testsuites/libtests/flashdisk01/test-file-system.h
+++ b/testsuites/libtests/flashdisk01/test-file-system.h
@@ -1,7 +1,7 @@
/* SPDX-License-Identifier: BSD-2-Clause */
/*
- * Copyright (c) 2010-2012 embedded brains GmbH. All rights reserved.
+ * Copyright (C) 2010, 2012 embedded brains GmbH & Co. KG
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
diff --git a/testsuites/libtests/getentropy01/init.c b/testsuites/libtests/getentropy01/init.c
index 12f9741665..afdd0c88c1 100644
--- a/testsuites/libtests/getentropy01/init.c
+++ b/testsuites/libtests/getentropy01/init.c
@@ -1,7 +1,7 @@
/* SPDX-License-Identifier: BSD-2-Clause */
/*
- * Copyright (c) 2017 embedded brains GmbH. All rights reserved.
+ * Copyright (c) 2017 embedded brains GmbH & Co. KG
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
diff --git a/testsuites/libtests/heapwalk/init.c b/testsuites/libtests/heapwalk/init.c
index d7f0302b0f..2864feac28 100644
--- a/testsuites/libtests/heapwalk/init.c
+++ b/testsuites/libtests/heapwalk/init.c
@@ -6,7 +6,7 @@
* COPYRIGHT (c) 1989-2009.
* On-Line Applications Research Corporation (OAR).
*
- * Copyright (c) 2009 embedded brains GmbH.
+ * Copyright (c) 2009 embedded brains GmbH & Co. KG
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
diff --git a/testsuites/libtests/i2c01/init.c b/testsuites/libtests/i2c01/init.c
index b6480fb99e..452bea4ac1 100644
--- a/testsuites/libtests/i2c01/init.c
+++ b/testsuites/libtests/i2c01/init.c
@@ -1,7 +1,7 @@
/* SPDX-License-Identifier: BSD-2-Clause */
/*
- * Copyright (c) 2014 embedded brains GmbH. All rights reserved.
+ * Copyright (c) 2014 embedded brains GmbH & Co. KG
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
diff --git a/testsuites/libtests/irqs01/init.c b/testsuites/libtests/irqs01/init.c
index ab7ca926ca..604aaf1f22 100644
--- a/testsuites/libtests/irqs01/init.c
+++ b/testsuites/libtests/irqs01/init.c
@@ -1,7 +1,7 @@
/* SPDX-License-Identifier: BSD-2-Clause */
/*
- * Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+ * Copyright (C) 2020 embedded brains GmbH & Co. KG
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
diff --git a/testsuites/libtests/libfdt01/init.c b/testsuites/libtests/libfdt01/init.c
index 80a8361339..6f369daf82 100644
--- a/testsuites/libtests/libfdt01/init.c
+++ b/testsuites/libtests/libfdt01/init.c
@@ -1,7 +1,7 @@
/* SPDX-License-Identifier: BSD-2-Clause */
/*
- * Copyright (c) 2015 embedded brains GmbH. All rights reserved.
+ * Copyright (c) 2015 embedded brains GmbH & Co. KG
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
diff --git a/testsuites/libtests/libfdt01/some.dts b/testsuites/libtests/libfdt01/some.dts
index c6e2fc84ad..c4c7d926c6 100644
--- a/testsuites/libtests/libfdt01/some.dts
+++ b/testsuites/libtests/libfdt01/some.dts
@@ -1,7 +1,7 @@
/* SPDX-License-Identifier: BSD-2-Clause */
/*
- * Copyright (c) 2015 embedded brains GmbH. All rights reserved.
+ * Copyright (c) 2015 embedded brains GmbH & Co. KG
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
diff --git a/testsuites/libtests/malloctest/init.c b/testsuites/libtests/malloctest/init.c
index 05d97a27d5..d72f49112e 100644
--- a/testsuites/libtests/malloctest/init.c
+++ b/testsuites/libtests/malloctest/init.c
@@ -4,7 +4,7 @@
* COPYRIGHT (c) 1989-2011, 2014.
* On-Line Applications Research Corporation (OAR).
*
- * Copyright (c) 2009, 2016 embedded brains GmbH.
+ * Copyright (C) 2009, 2016 embedded brains GmbH & Co. KG
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
@@ -60,8 +60,15 @@ static void test_realloc(void)
for (i=2 ; i<2048 ; i++) {
p2 = realloc(p1, i);
if (p2 != p1)
+/*
+ * This was added to address the following warning.
+ * warning: pointer 'p1' may be used after 'realloc'
+ */
+#pragma GCC diagnostic push
+#pragma GCC diagnostic ignored "-Wuse-after-free"
printf( "realloc - failed grow in place: "
"%p != realloc(%p,%zu)\n", p1, p2, i);
+#pragma GCC diagnostic pop
p1 = p2;
}
free(p1);
@@ -71,8 +78,15 @@ static void test_realloc(void)
for (i=2047 ; i>=1; i--) {
p2 = realloc(p1, i);
if (p2 != p1)
- printf( "realloc - failed shrink in place: "
+/*
+ * This was added to address the following warning.
+ * warning: pointer 'p1' may be used after 'realloc'
+ */
+#pragma GCC diagnostic push
+#pragma GCC diagnostic ignored "-Wuse-after-free"
+ printf( "realloc - failed shrink in place: "
"%p != realloc(%p,%zu)\n", p1, p2, i);
+#pragma GCC diagnostic pop
p1 = p2;
}
free(p1);
@@ -84,8 +98,15 @@ static void test_realloc(void)
p2 = malloc(32);
p3 = realloc(p1, 64);
if (p3 == p1 || p3 == NULL)
- printf(
+/*
+ * This was added to address the following warning.
+ * warning: pointer may be used after 'realloc'
+ */
+#pragma GCC diagnostic push
+#pragma GCC diagnostic ignored "-Wuse-after-free"
+ printf(
"realloc - failed non-in place: realloc(%p,%d) = %p\n", p1, 64, p3);
+#pragma GCC diagnostic pop
free(p3);
free(p2);
@@ -122,7 +143,14 @@ static void test_realloc(void)
/*
* Realloc with a bad pointer to force a point
*/
- p4 = realloc( test_realloc, 32 );
+/*
+ * This was added to address the following warning.
+ * warning: 'realloc' called on unallocated object
+ */
+#pragma GCC diagnostic push
+#pragma GCC diagnostic ignored "-Wfree-nonheap-object"
+ p4 = realloc( test_realloc, 32 );
+#pragma GCC diagnostic pop
p4 = _realloc_r( NULL, NULL, 1 );
}
@@ -1528,8 +1556,15 @@ static void test_early_malloc( void )
free( q );
+/*
+ * This was added to address the following warning.
+ * warning: pointer 'q' used after 'free'
+ */
+#pragma GCC diagnostic push
+#pragma GCC diagnostic ignored "-Wuse-after-free"
r = realloc( q, 128 );
rtems_test_assert( r == q );
+#pragma GCC diagnostic pop
s = malloc( 1 );
rtems_test_assert( s != NULL );
diff --git a/testsuites/libtests/md501/init.c b/testsuites/libtests/md501/init.c
index 00941acd85..e388f082b2 100644
--- a/testsuites/libtests/md501/init.c
+++ b/testsuites/libtests/md501/init.c
@@ -1,7 +1,7 @@
/* SPDX-License-Identifier: BSD-2-Clause */
/*
- * Copyright (c) 2012 embedded brains GmbH. All rights reserved.
+ * Copyright (c) 2012 embedded brains GmbH & Co. KG
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
diff --git a/testsuites/libtests/newlib01/init.c b/testsuites/libtests/newlib01/init.c
index 8975a72fad..d3ccbddba1 100644
--- a/testsuites/libtests/newlib01/init.c
+++ b/testsuites/libtests/newlib01/init.c
@@ -1,7 +1,7 @@
/* SPDX-License-Identifier: BSD-2-Clause */
/*
- * Copyright (c) 2014, 2022 embedded brains GmbH. All rights reserved.
+ * Copyright (C) 2014, 2022 embedded brains GmbH & Co. KG
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
@@ -43,6 +43,10 @@
#include "tmacros.h"
+#ifndef _REENT_CLEANUP
+#define _REENT_CLEANUP(ptr) ((ptr)->__cleanup)
+#endif
+
const char rtems_test_name[] = "NEWLIB 1";
static const char stdio_file_path[] = "/stdio-file";
@@ -82,15 +86,61 @@ static void wait(void)
rtems_test_assert(sc == RTEMS_SUCCESSFUL);
}
+/*
+ * Check that rand() is properly initialized and returns the expected sequence
+ * for default seed values. A call to rand() without any previous call to
+ * srand() generates the same sequence as when srand() is first called with a
+ * seed value of 1.
+ */
+static void test_rand(void)
+{
+ int rv;
+
+ rv = rand();
+ rtems_test_assert(rv == 1481765933);
+ rv = rand();
+ rtems_test_assert(rv == 1085377743);
+ rv = rand();
+ rtems_test_assert(rv == 1270216262);
+
+ srand(1);
+ rv = rand();
+ rtems_test_assert(rv == 1481765933);
+ rv = rand();
+ rtems_test_assert(rv == 1085377743);
+ rv = rand();
+ rtems_test_assert(rv == 1270216262);
+}
+
+/*
+ * Check that lrand48() is properly initialized and returns the expected
+ * sequence for default seed values. A call to lrand48() without any previous
+ * call to srand48() uses default constant initializer values set in the _seed
+ * member of struct _rand48.
+ */
+static void test_lrand48(void)
+{
+ long rv;
+
+ rv = lrand48();
+ rtems_test_assert(rv == 851401618);
+ rv = lrand48();
+ rtems_test_assert(rv == 1804928587);
+ rv = lrand48();
+ rtems_test_assert(rv == 758783491);
+}
+
static void stdio_file_worker(rtems_task_argument arg)
{
test_context *ctx = &test_instance;
- struct _reent *reent = _REENT;
FILE *output;
char buf[1] = { 'x' };
size_t n;
- rtems_test_assert(reent->__cleanup == NULL);
+ test_rand();
+ test_lrand48();
+
+ rtems_test_assert(_REENT_CLEANUP(_REENT) == NULL);
output = stdout = fopen(&stdio_file_path[0], "r+");
rtems_test_assert(stdout != NULL);
@@ -98,9 +148,9 @@ static void stdio_file_worker(rtems_task_argument arg)
/*
* Check newlib's __sinit does not touch our assigned file pointer.
*/
- rtems_test_assert(reent->__cleanup == NULL);
+ rtems_test_assert(_REENT_CLEANUP(_REENT) == NULL);
rtems_test_assert(fflush(stdout) == 0);
- rtems_test_assert(reent->__cleanup != NULL);
+ rtems_test_assert(_REENT_CLEANUP(_REENT) != NULL);
rtems_test_assert(stdout == output);
n = fwrite(&buf[0], sizeof(buf), 1, stdout);
@@ -454,6 +504,9 @@ static void Init(rtems_task_argument arg)
int rv;
TEST_BEGIN();
+ test_rand();
+ test_lrand48();
+
ctx->main_task_id = rtems_task_self();
/* Fill dynamic file pool in Newlib */
diff --git a/testsuites/libtests/newlib01/newlib01.doc b/testsuites/libtests/newlib01/newlib01.doc
index fbda12aa98..dc16584418 100644
--- a/testsuites/libtests/newlib01/newlib01.doc
+++ b/testsuites/libtests/newlib01/newlib01.doc
@@ -19,3 +19,6 @@ concepts:
- Check that exit procedures provide proper resource cleanup. Ensure that
a file opened from a worker task--but that is not assigned to a stdio
stream--is not closed during thread termination.
+ - Check that the state of random number generators is thread-specific, they
+ are properly initialized, and return the expected sequence for default
+ seed values.
diff --git a/testsuites/libtests/ofw01/some.dts b/testsuites/libtests/ofw01/some.dts
index e828622d02..6a5023414f 100644
--- a/testsuites/libtests/ofw01/some.dts
+++ b/testsuites/libtests/ofw01/some.dts
@@ -2,7 +2,7 @@
/*
* Copyright (c) 2020 Niteesh G S <niteesh.gs@gmail.com>. All rights reserved.
- * Copyright (c) 2015 embedded brains GmbH. All rights reserved.
+ * Copyright (c) 2015 embedded brains GmbH & Co. KG
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
diff --git a/testsuites/libtests/pwdgrp01/init.c b/testsuites/libtests/pwdgrp01/init.c
index 3420c8eafa..e241237272 100644
--- a/testsuites/libtests/pwdgrp01/init.c
+++ b/testsuites/libtests/pwdgrp01/init.c
@@ -1,7 +1,7 @@
/* SPDX-License-Identifier: BSD-2-Clause */
/*
- * Copyright (c) 2014 embedded brains GmbH. All rights reserved.
+ * Copyright (c) 2014 embedded brains GmbH & Co. KG
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
diff --git a/testsuites/libtests/pwdgrp02/init.c b/testsuites/libtests/pwdgrp02/init.c
index 8a67ec1f53..3fb74b226c 100644
--- a/testsuites/libtests/pwdgrp02/init.c
+++ b/testsuites/libtests/pwdgrp02/init.c
@@ -1,7 +1,7 @@
/* SPDX-License-Identifier: BSD-2-Clause */
/*
- * Copyright (c) 2014 embedded brains GmbH. All rights reserved.
+ * Copyright (c) 2014 embedded brains GmbH & Co. KG
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
diff --git a/testsuites/libtests/rbheap01/init.c b/testsuites/libtests/rbheap01/init.c
index 34e7aacbb5..ab6d36ec34 100644
--- a/testsuites/libtests/rbheap01/init.c
+++ b/testsuites/libtests/rbheap01/init.c
@@ -1,7 +1,7 @@
/* SPDX-License-Identifier: BSD-2-Clause */
/*
- * Copyright (c) 2012-2015 embedded brains GmbH. All rights reserved.
+ * Copyright (C) 2012, 2015 embedded brains GmbH & Co. KG
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
diff --git a/testsuites/libtests/record01/init.c b/testsuites/libtests/record01/init.c
index fea509089a..eb257b8a2e 100644
--- a/testsuites/libtests/record01/init.c
+++ b/testsuites/libtests/record01/init.c
@@ -1,7 +1,7 @@
/*
* SPDX-License-Identifier: BSD-2-Clause
*
- * Copyright (C) 2018, 2019 embedded brains GmbH
+ * Copyright (C) 2018, 2019 embedded brains GmbH & Co. KG
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
diff --git a/testsuites/libtests/record02/init.c b/testsuites/libtests/record02/init.c
index 7568f06e18..3c4dac25a0 100644
--- a/testsuites/libtests/record02/init.c
+++ b/testsuites/libtests/record02/init.c
@@ -1,7 +1,7 @@
/* SPDX-License-Identifier: BSD-2-Clause */
/*
- * Copyright (C) 2018, 2020 embedded brains GmbH (http://www.embedded-brains.de)
+ * Copyright (C) 2018, 2020 embedded brains GmbH & Co. KG
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
diff --git a/testsuites/libtests/regulator01/regulator01.c b/testsuites/libtests/regulator01/regulator01.c
new file mode 100644
index 0000000000..cc5af01223
--- /dev/null
+++ b/testsuites/libtests/regulator01/regulator01.c
@@ -0,0 +1,1310 @@
+/* SPDX-License-Identifier: BSD-2-Clause */
+
+/**
+ * @defgroup RegulatorTests Regulator Test Cases
+ *
+ * @brief Unit test cases for the Regulator
+ *
+ * This is a set of unit test cases for the regulator.
+ */
+
+/**
+ * @ingroup RegulatorTests
+ *
+ * @file
+ *
+ * @brief Test 01 for Regulator Library
+ */
+
+/*
+ * Copyright (C) 2022 On-Line Applications Research Corporation (OAR)
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include <stdio.h>
+#include <string.h>
+#include <unistd.h>
+
+#include <rtems.h>
+#include <rtems/test-info.h>
+#include <tmacros.h>
+
+#include <rtems/regulator.h>
+
+/**
+ * @brief Regulator Test Name
+ */
+const char rtems_test_name[] = "Regulator 1";
+
+/*
+ * Prototypes for wrapped functions
+ */
+void *__wrap_malloc(size_t size);
+void *__real_malloc(size_t size);
+
+/**
+ * @ingroup RegulatorTests
+ * @brief Calloc Wrapper Trigger Count
+ */
+static int malloc_trigger_count;
+
+/**
+ * @ingroup RegulatorTests
+ * @brief Calloc Wrapper Call Count
+ */
+static int malloc_call_count;
+
+/**
+ * @ingroup RegulatorTests
+ * @brief Calloc Wrapper Trigger enable
+ */
+static bool malloc_trigger_enabled;
+
+/**
+ * @ingroup RegulatorTests
+ * @brief Enable Calloc Wrapper Trigger
+ */
+static void malloc_trigger_enable(
+ int trigger_count
+)
+{
+ malloc_trigger_enabled = true;
+ malloc_trigger_count = trigger_count;
+ malloc_call_count = 0;
+}
+/**
+ * @ingroup RegulatorTests
+ * @brief Reset Calloc Wrapper Trigger and Count
+ */
+static void malloc_trigger_reset(void)
+{
+ malloc_trigger_enabled = 0;
+ malloc_trigger_count = 0;
+ malloc_call_count = 0;
+}
+/**
+ * @ingroup RegulatorTests
+ * @brief Calloc Wrapper to Trigger Allocation Errors
+ */
+void *__wrap_malloc(size_t size)
+{
+ if (malloc_trigger_enabled) {
+ malloc_call_count++;
+ if (malloc_call_count == malloc_trigger_count) {
+ return NULL;
+ }
+ }
+
+ return __real_malloc(size);
+}
+
+/**
+ * @brief Constant to simpify code
+ */
+#define FIVE_SECONDS (5 * rtems_clock_get_ticks_per_second())
+
+/**
+ * @ingroup RegulatorTests
+ * @brief Empty Deliver Method for Testing
+ */
+static bool test_regulator_deliverer(
+ void *context,
+ void *message,
+ size_t length
+)
+{
+ (void) context;
+ (void) message;
+ (void) length;
+
+ return true;
+}
+
+/**
+ * @ingroup RegulatorTests
+ * @brief Maximum length of a test message that is delivered
+ */
+#define MAXIMUM_MESSAGE_LENGTH 32
+
+/**
+ * @ingroup RegulatorTests
+ * @brief Maximum number of test messages to buffer
+ */
+#define MAXIMUM_MESSAGES_TO_BUFFER 10
+
+/**
+ * @ingroup RegulatorTests
+ * @brief Structure for capturing messages as delivered
+ */
+typedef struct {
+ rtems_interval processed;
+ char message[MAXIMUM_MESSAGE_LENGTH];
+} message_log_t;
+
+/**
+ * @ingroup RegulatorTests
+ * @brief Set of Delivered messages
+ */
+message_log_t delivered_messages[MAXIMUM_MESSAGES_TO_BUFFER];
+
+/**
+ * @ingroup RegulatorTests
+ * @brief Count of Delivered messages
+ */
+int delivered_message_count;
+
+/**
+ * @ingroup RegulatorTests
+ * @brief Reset Delivered Message Set
+ *
+ * This is used at the beginning of a test case which is going to
+ * check that message contents and delivery times were as expected.
+ */
+static void delivered_messages_reset(void)
+{
+ delivered_message_count = 0;
+ memset(delivered_messages, 0xc5, sizeof(delivered_messages));
+}
+
+/**
+ * @brief Context for Logger Delivery Function
+ */
+typedef struct {
+ /** Regulator instance being operated on */
+ rtems_regulator_instance *regulator;
+} deliverer_logger_context_t;
+
+/**
+ * @brief Context Instance for Logger Delivery Function
+ */
+static deliverer_logger_context_t deliverer_logger_context;
+
+/**
+ * @ingroup RegulatorTests
+ * @brief Empty Deliver Method for Testing
+ *
+ * This deliverer method implementation logs the messages along with
+ * their time of arrival. This is used by the test cases to verify
+ * proper delivery.
+ */
+static bool test_regulator_deliverer_logger(
+ void *context,
+ void *message,
+ size_t length
+)
+{
+ deliverer_logger_context_t *the_context;
+
+ the_context = (deliverer_logger_context_t *)context;
+
+ static bool caller_releases_buffer = true;
+
+ size_t len;
+ rtems_interval ticks;
+ rtems_status_code sc;
+
+ len = strnlen(message, MAXIMUM_MESSAGE_LENGTH) + 1;
+ rtems_test_assert(len = length);
+
+ ticks = rtems_clock_get_ticks_since_boot();
+
+ delivered_messages[delivered_message_count].processed = ticks;
+
+ strcpy(delivered_messages[delivered_message_count].message, message);
+
+ delivered_message_count++;
+
+ /*
+ * Alternate releasing the buffer here and allowing the calling Delivery
+ * Thread to do it. This increases coverage of that logic.
+ */
+ if (caller_releases_buffer == true) {
+ caller_releases_buffer = false;
+ return true;
+ }
+
+ sc = rtems_regulator_release_buffer(the_context->regulator, message);
+ rtems_test_assert(sc == RTEMS_SUCCESSFUL);
+
+ return false;
+}
+
+
+/**
+ * @ingroup RegulatorTests
+ * @brief Helper to create a Regulator instance
+ *
+ * This helper creates a regulator instance with some arbitrary attributes.
+ * This is used in multiple test cases to have a valie regulator instance to
+ * trigger error cases.
+ */
+static rtems_regulator_instance *test_regulator_create_regulator_OK(void)
+{
+ rtems_status_code sc;
+ rtems_regulator_attributes attributes = {
+ .deliverer = test_regulator_deliverer,
+ .deliverer_context = NULL,
+ .maximum_message_size = 16,
+ .maximum_messages = 10,
+ .delivery_thread_priority = 16,
+ .delivery_thread_stack_size = 0,
+ .delivery_thread_period = RTEMS_MILLISECONDS_TO_TICKS(1000),
+ .maximum_to_dequeue_per_period = 3
+ };
+ rtems_regulator_instance *regulator;
+
+ regulator = NULL;
+
+ sc = rtems_regulator_create(&attributes, &regulator);
+ rtems_test_assert(sc == RTEMS_SUCCESSFUL);
+ rtems_test_assert(regulator != NULL);
+
+ return regulator;
+}
+
+/**
+ * @ingroup RegulatorTests
+ * @brief Verify rtems_regulator_create() maximum_to_dequeue_per_period
+ * attributes error
+ *
+ * This unit test verifies that rtems_regulator_create() returns an error when
+ * the maximum_to_dequeue_per_period attribute is zero.
+ */
+static void test_regulator_create_max_dequeue_zero(void)
+{
+ rtems_status_code sc;
+ rtems_regulator_attributes attributes = {
+ .deliverer = test_regulator_deliverer,
+ .deliverer_context = NULL,
+ .maximum_message_size = 16,
+ .maximum_messages = 10,
+ .delivery_thread_priority = 16,
+ .delivery_thread_stack_size = 0,
+ .delivery_thread_period = RTEMS_MILLISECONDS_TO_TICKS(1000),
+ .maximum_to_dequeue_per_period = 0
+ };
+ rtems_regulator_instance *regulator;
+
+ regulator = NULL;
+
+ sc = rtems_regulator_create(&attributes, &regulator);
+ rtems_test_assert(sc == RTEMS_INVALID_NUMBER);
+}
+
+/**
+ * @ingroup RegulatorTests
+ * @brief Verify rtems_regulator_create() NULL attributes error
+ *
+ * This unit test verifies that rtems_regulator_create() returns an error when
+ * the attributes argument is NULL.
+ */
+static void test_regulator_create_null_attributes(void)
+{
+ rtems_status_code sc;
+ rtems_regulator_instance *regulator;
+
+ sc = rtems_regulator_create(NULL, &regulator);
+ rtems_test_assert(sc == RTEMS_INVALID_ADDRESS);
+}
+
+/**
+ * @ingroup RegulatorTests
+ * @brief Verify rtems_regulator_create NULL regulator error
+ *
+ * This unit test verifies that rtems_regulator_create() returns an error when
+ * the regulator argument is NULL.
+ */
+static void test_regulator_create_null_regulator(void)
+{
+ rtems_status_code sc;
+ rtems_regulator_attributes attributes;
+
+ sc = rtems_regulator_create(&attributes, NULL);
+ rtems_test_assert(sc == RTEMS_INVALID_ADDRESS);
+}
+
+/**
+ * @ingroup RegulatorTests
+ * @brief Verify rtems_regulator_create deliverer is NULL
+ *
+ * This unit test verifies that rtems_regulator_create() returns an error when
+ * the the attributes deliverer field is NULL.
+ */
+static void test_regulator_create_deliverer_is_null(void)
+{
+ rtems_status_code sc;
+ rtems_regulator_attributes attributes;
+ rtems_regulator_instance *regulator;
+
+ (void) memset(&attributes, 0, sizeof(rtems_regulator_attributes));
+
+ attributes.deliverer = NULL;
+ attributes.maximum_messages = 0;
+ attributes.maximum_message_size = 16;
+ attributes.maximum_to_dequeue_per_period = 1;
+
+ sc = rtems_regulator_create(&attributes, &regulator);
+ rtems_test_assert(sc == RTEMS_INVALID_ADDRESS);
+}
+
+/**
+ * @ingroup RegulatorTests
+ * @brief Verify rtems_regulator_create maximum_messages is 0 error
+ *
+ * This unit test verifies that rtems_regulator_create() returns an error when
+ * the the attributes maximum_messages field is 0.
+ */
+static void test_regulator_create_maximum_messages_is_zero(void)
+{
+ rtems_status_code sc;
+ rtems_regulator_attributes attributes;
+ rtems_regulator_instance *regulator;
+
+ (void) memset(&attributes, 0, sizeof(rtems_regulator_attributes));
+
+ attributes.deliverer = test_regulator_deliverer;
+ attributes.maximum_messages = 0;
+ attributes.maximum_message_size = 16;
+ attributes.maximum_to_dequeue_per_period = 1;
+
+ sc = rtems_regulator_create(&attributes, &regulator);
+ rtems_test_assert(sc == RTEMS_INVALID_NUMBER);
+}
+
+/**
+ * @ingroup RegulatorTests
+ * @brief Verify rtems_regulator_create maximum_message_size is 0 error
+ *
+ * This unit test verifies that rtems_regulator_create() returns an error when
+ * the the attributes maximum_message_size field is 0.
+ */
+static void test_regulator_create_maximum_message_size_is_zero(void)
+{
+ rtems_status_code sc;
+ rtems_regulator_attributes attributes;
+ rtems_regulator_instance *regulator;
+
+ (void) memset(&attributes, 0, sizeof(rtems_regulator_attributes));
+
+ attributes.deliverer = test_regulator_deliverer;
+ attributes.maximum_messages = 10;
+ attributes.maximum_message_size = 0;
+ attributes.maximum_to_dequeue_per_period = 1;
+
+ sc = rtems_regulator_create(&attributes, &regulator);
+ rtems_test_assert(sc == RTEMS_INVALID_SIZE);
+}
+
+/**
+ * @ingroup RegulatorTests
+ * @brief Verify rtems_regulator_create maximum_to_dequeue_per_period is 0 error
+ *
+ * This unit test verifies that rtems_regulator_create() returns an error when
+ * the the attributes maximum_to_dequeue_per_period field is 0.
+ */
+static void test_regulator_create_maximum_to_dequeue_per_period_is_zero(void)
+{
+ rtems_status_code sc;
+ rtems_regulator_attributes attributes;
+ rtems_regulator_instance *regulator;
+
+ (void) memset(&attributes, 0, sizeof(rtems_regulator_attributes));
+
+ attributes.deliverer = test_regulator_deliverer;
+ attributes.maximum_messages = 10;
+ attributes.maximum_message_size = 0;
+
+ sc = rtems_regulator_create(&attributes, &regulator);
+ rtems_test_assert(sc == RTEMS_INVALID_SIZE);
+}
+
+/**
+ * @ingroup RegulatorTests
+ * @brief Verify rtems_regulator_create returns error on failure to allocate regulator
+ *
+ * This unit test verifies that rtems_regulator_create() returns an error when
+ * it is unable to allocate the mmemory for the regulator instance.
+ */
+static void test_regulator_create_malloc_regulator_fails(void)
+{
+ rtems_status_code sc;
+ rtems_regulator_attributes attributes;
+ rtems_regulator_instance *regulator;
+
+ (void) memset(&attributes, 0, sizeof(rtems_regulator_attributes));
+
+ attributes.deliverer = test_regulator_deliverer;
+ attributes.maximum_messages = 10;
+ attributes.maximum_message_size = 16;
+ attributes.delivery_thread_priority = 32;
+ attributes.maximum_to_dequeue_per_period = 1;
+ attributes.delivery_thread_period = RTEMS_MILLISECONDS_TO_TICKS(1000);
+
+ malloc_trigger_enable(1);
+
+ sc = rtems_regulator_create(&attributes, &regulator);
+ rtems_test_assert(sc == RTEMS_NO_MEMORY);
+
+ malloc_trigger_reset();
+}
+
+/**
+ * @ingroup RegulatorTests
+ * @brief Verify rtems_regulator_create returns error on failure to allocate buffers
+ *
+ * This unit test verifies that rtems_regulator_create() returns an error when
+ * it is unable to allocate the mmemory for the regulator buffers.
+ */
+static void test_regulator_create_malloc_buffers_fails(void)
+{
+ rtems_status_code sc;
+ rtems_regulator_attributes attributes;
+ rtems_regulator_instance *regulator;
+
+ (void) memset(&attributes, 0, sizeof(rtems_regulator_attributes));
+
+ attributes.deliverer = test_regulator_deliverer;
+ attributes.maximum_messages = 10;
+ attributes.maximum_message_size = 16;
+ attributes.delivery_thread_priority = 32;
+ attributes.maximum_to_dequeue_per_period = 1;
+ attributes.delivery_thread_period = RTEMS_MILLISECONDS_TO_TICKS(1000);
+
+ malloc_trigger_enable(2);
+
+ sc = rtems_regulator_create(&attributes, &regulator);
+ rtems_test_assert(sc == RTEMS_NO_MEMORY);
+
+ malloc_trigger_reset();
+}
+
+/**
+ * @ingroup RegulatorTests
+ * @brief Verify rtems_regulator_create and delete work
+ *
+ * This unit test verifies that rtems_regulator_create() can successfully create
+ * the the attributes delivery_thread_priority field is 0.
+ */
+static void test_regulator_create_delivery_thread_priority_is_zero(void)
+{
+ rtems_status_code sc;
+ rtems_regulator_attributes attributes;
+ rtems_regulator_instance *regulator;
+
+ (void) memset(&attributes, 0, sizeof(rtems_regulator_attributes));
+
+ attributes.deliverer = test_regulator_deliverer;
+ attributes.maximum_messages = 10;
+ attributes.maximum_message_size = 16;
+ attributes.delivery_thread_priority = 0;
+ attributes.maximum_to_dequeue_per_period = 1;
+ attributes.delivery_thread_period = RTEMS_MILLISECONDS_TO_TICKS(1000);
+
+ sc = rtems_regulator_create(&attributes, &regulator);
+ rtems_test_assert(sc == RTEMS_INVALID_PRIORITY);
+}
+
+/**
+ * @ingroup RegulatorTests
+ * @brief Verify rtems_regulator_create rtems_partition_create error
+ *
+ * This unit test verifies that rtems_regulator_create() correctly returns an
+ * error when the call to rtems_partition_create() fails.
+ */
+static void test_regulator_create_partition_create_fails(void)
+{
+ rtems_status_code sc;
+ rtems_id partition_id;
+ unsigned long partition_area[16];
+ rtems_regulator_attributes attributes;
+ rtems_regulator_instance *regulator;
+
+ sc = rtems_partition_create(
+ rtems_build_name('T', 'P', 'T', 'P'),
+ partition_area,
+ 16 * sizeof(unsigned long),
+ 2 * sizeof(unsigned long),
+ RTEMS_DEFAULT_ATTRIBUTES,
+ &partition_id
+ );
+ rtems_test_assert(sc == RTEMS_SUCCESSFUL);
+
+ (void) memset(&attributes, 0, sizeof(rtems_regulator_attributes));
+
+ attributes.deliverer = test_regulator_deliverer;
+ attributes.maximum_messages = 10;
+ attributes.maximum_message_size = 16;
+ attributes.delivery_thread_priority = 8;
+ attributes.maximum_to_dequeue_per_period = 1;
+ attributes.delivery_thread_period = RTEMS_MILLISECONDS_TO_TICKS(1000);
+
+ sc = rtems_regulator_create(&attributes, &regulator);
+ rtems_test_assert(sc == RTEMS_TOO_MANY);
+
+ sc = rtems_partition_delete(partition_id);
+ rtems_test_assert(sc == RTEMS_SUCCESSFUL);
+}
+
+/**
+ * @ingroup RegulatorTests
+ * @brief Verify rtems_regulator_create rtems_message_queue_create error
+ *
+ * This unit test verifies that rtems_regulator_create() correctly returns an
+ * error when the call to rtems_message_queue_create() fails.
+ */
+static void test_regulator_create_message_queue_create_fails(void)
+{
+ rtems_status_code sc;
+ rtems_id queue_id;
+ rtems_regulator_attributes attributes;
+ rtems_regulator_instance *regulator;
+
+ sc = rtems_message_queue_create(
+ rtems_build_name('T', 'Q', 'T', 'Q'),
+ 4,
+ sizeof(unsigned long),
+ RTEMS_DEFAULT_ATTRIBUTES,
+ &queue_id
+ );
+ rtems_test_assert(sc == RTEMS_SUCCESSFUL);
+
+ (void) memset(&attributes, 0, sizeof(rtems_regulator_attributes));
+
+ attributes.deliverer = test_regulator_deliverer;
+ attributes.maximum_messages = 10;
+ attributes.maximum_message_size = 16;
+ attributes.delivery_thread_priority = 8;
+ attributes.maximum_to_dequeue_per_period = 1;
+ attributes.delivery_thread_period = RTEMS_MILLISECONDS_TO_TICKS(1000);
+
+ sc = rtems_regulator_create(&attributes, &regulator);
+ rtems_test_assert(sc == RTEMS_TOO_MANY);
+
+ sc = rtems_message_queue_delete(queue_id);
+ rtems_test_assert(sc == RTEMS_SUCCESSFUL);
+}
+
+/**
+ * @ingroup RegulatorTests
+ * @brief Verify rtems_regulator_create rtems_task_create error
+ *
+ * This unit test verifies that rtems_regulator_create() correctly returns an
+ * error when the call to rtems_task_create() fails.
+ */
+static void test_regulator_create_task_create_fails(void)
+{
+ rtems_status_code sc;
+ rtems_id task_id;
+ rtems_regulator_attributes attributes;
+ rtems_regulator_instance *regulator;
+
+ sc = rtems_task_create(
+ rtems_build_name('T', 'T', 'T', 'T'),
+ 80,
+ 0,
+ RTEMS_DEFAULT_MODES,
+ RTEMS_DEFAULT_ATTRIBUTES,
+ &task_id
+ );
+ rtems_test_assert(sc == RTEMS_SUCCESSFUL);
+
+ (void) memset(&attributes, 0, sizeof(rtems_regulator_attributes));
+
+ attributes.deliverer = test_regulator_deliverer;
+ attributes.maximum_messages = 10;
+ attributes.maximum_message_size = 16;
+ attributes.delivery_thread_priority = 8;
+ attributes.maximum_to_dequeue_per_period = 1;
+ attributes.delivery_thread_period = RTEMS_MILLISECONDS_TO_TICKS(1000);
+
+ sc = rtems_regulator_create(&attributes, &regulator);
+ rtems_test_assert(sc == RTEMS_TOO_MANY);
+
+ sc = rtems_task_delete(task_id);
+ rtems_test_assert(sc == RTEMS_SUCCESSFUL);
+}
+
+/**
+ * @ingroup RegulatorTests
+ * @brief Verify Regulator Output Thread Handles Error on Period Create
+ *
+ * This unit test verifies that regulator output thread correctly exits
+ * when the call to rtems_rate_monotonic_create() fails.
+ *
+ * This error condition/path cannot be directly detected via a return code,
+ * It is verified via a debugger or code coverage reports.
+ */
+static void test_regulator_create_rate_monotonic_create_fails(void)
+{
+ rtems_status_code sc;
+ rtems_id period_id;
+ rtems_regulator_attributes attributes;
+ rtems_regulator_instance *regulator;
+
+ sc = rtems_rate_monotonic_create(
+ rtems_build_name('T', 'S', 'T', 'P'),
+ &period_id
+ );
+ rtems_test_assert(sc == RTEMS_SUCCESSFUL);
+
+ (void) memset(&attributes, 0, sizeof(rtems_regulator_attributes));
+
+ attributes.deliverer = test_regulator_deliverer;
+ attributes.maximum_messages = 10;
+ attributes.maximum_message_size = 16;
+ attributes.delivery_thread_priority = 8;
+ attributes.maximum_to_dequeue_per_period = 1;
+ attributes.delivery_thread_period = RTEMS_MILLISECONDS_TO_TICKS(1000);
+
+ sc = rtems_regulator_create(&attributes, &regulator);
+ rtems_test_assert(sc == RTEMS_SUCCESSFUL);
+
+ /*
+ * Let the output thread execute and encounter the create error.
+ */
+
+ sleep(1);
+
+ /*
+ * Now deallocate the resources allocated earlier
+ */
+ sc = rtems_regulator_delete(regulator, FIVE_SECONDS);
+ rtems_test_assert(sc == RTEMS_SUCCESSFUL);
+
+ sc = rtems_rate_monotonic_delete(period_id);
+ rtems_test_assert(sc == RTEMS_SUCCESSFUL);
+}
+
+/**
+ * @ingroup RegulatorTests
+ * @brief Verify rtems_regulator_delete NULL regulator error
+ *
+ * This unit test verifies that rtems_regulator_delete() returns an error when
+ * the regulator argument is NULL.
+ */
+static void test_regulator_delete_null_regulator(void)
+{
+ rtems_status_code sc;
+
+ sc = rtems_regulator_delete(NULL, FIVE_SECONDS);
+ rtems_test_assert(sc == RTEMS_INVALID_ADDRESS);
+}
+
+/**
+ * @ingroup RegulatorTests
+ * @brief Verify rtems_regulator_delete uninitialized regulator error
+ *
+ * This unit test verifies that rtems_regulator_delete() returns an error when
+ * the regulator argument is uninitialized.
+ */
+static void test_regulator_delete_uninitialized_regulator(void)
+{
+ rtems_status_code sc;
+ rtems_regulator_instance regulator;
+
+ (void) memset(&regulator, 0, sizeof(regulator));
+
+ sc = rtems_regulator_delete(&regulator, 0);
+ rtems_test_assert(sc == RTEMS_INCORRECT_STATE);
+}
+
+/**
+ * @ingroup RegulatorTests
+ * @brief Verify rtems_regulator_delete successful case
+ *
+ * This unit test verifies that rtems_regulator_delete() can be successfully
+ * deleted.
+ */
+static void test_regulator_delete_OK(void)
+{
+ rtems_status_code sc;
+ rtems_regulator_instance *regulator;
+
+ regulator = test_regulator_create_regulator_OK();
+ rtems_test_assert(regulator != NULL);
+
+ sc = rtems_regulator_delete(regulator, FIVE_SECONDS);
+ rtems_test_assert(sc == RTEMS_SUCCESSFUL);
+}
+
+/**
+ * @ingroup RegulatorTests
+ * @brief Verify rtems_regulator_obtain_buffer NULL regulator error
+ *
+ * This unit test verifies that rtems_regulator_obtain_buffer() returns an error when
+ * the regulator argument is NULL.
+ */
+static void test_regulator_obtain_buffer_null_regulator(void)
+{
+ rtems_status_code sc;
+ void *buffer;
+
+ sc = rtems_regulator_obtain_buffer(NULL, &buffer);
+ rtems_test_assert(sc == RTEMS_INVALID_ADDRESS);
+}
+
+/**
+ * @ingroup RegulatorTests
+ * @brief Verify rtems_regulator_obtain_buffer uninitialized regulator error
+ *
+ * This unit test verifies that rtems_regulator_obtain_buffer() returns an error when
+ * the regulator argument is uninitialized.
+ */
+static void test_regulator_obtain_buffer_uninitialized_regulator(void)
+{
+ rtems_status_code sc;
+ rtems_regulator_instance regulator;
+ void *buffer;
+
+ (void) memset(&regulator, 0, sizeof(regulator));
+
+ sc = rtems_regulator_obtain_buffer(&regulator, &buffer);
+ rtems_test_assert(sc == RTEMS_INCORRECT_STATE);
+}
+
+/**
+ * @ingroup RegulatorTests
+ * @brief Verify rtems_regulator_obtain_buffer successful case
+ *
+ * This unit test verifies that rtems_regulator_obtain_buffer() can be successfully
+ * obtained from an initialized regulator.
+ */
+static void test_regulator_obtain_buffer_OK(void)
+{
+ rtems_status_code sc;
+ rtems_regulator_instance *regulator;
+ void *buffer;
+
+ regulator = test_regulator_create_regulator_OK();
+ rtems_test_assert(regulator != NULL);
+
+ sc = rtems_regulator_obtain_buffer(regulator, &buffer);
+ rtems_test_assert(sc == RTEMS_SUCCESSFUL);
+ rtems_test_assert(buffer != NULL);
+
+ /*
+ * Not really testing this here but cannot delete underlying partition
+ * if there are buffers outstanding.
+ */
+ sc = rtems_regulator_release_buffer(regulator, buffer);
+ rtems_test_assert(sc == RTEMS_SUCCESSFUL);
+ rtems_test_assert(buffer != NULL);
+
+ sc = rtems_regulator_delete(regulator, FIVE_SECONDS);
+ rtems_test_assert(sc == RTEMS_SUCCESSFUL);
+}
+
+/**
+ * @ingroup RegulatorTests
+ * @brief Verify rtems_regulator_release_buffer NULL regulator error
+ *
+ * This unit test verifies that rtems_regulator_release_buffer() returns an error when
+ * the regulator argument is NULL.
+ */
+static void test_regulator_release_buffer_null_regulator(void)
+{
+ rtems_status_code sc;
+ void *buffer;
+
+ sc = rtems_regulator_release_buffer(NULL, &buffer);
+ rtems_test_assert(sc == RTEMS_INVALID_ADDRESS);
+}
+
+/**
+ * @ingroup RegulatorTests
+ * @brief Verify rtems_regulator_release_buffer uninitialized regulator error
+ *
+ * This unit test verifies that rtems_regulator_release_buffer() returns an
+ * error when the regulator argument is uninitialized.
+ */
+static void test_regulator_release_buffer_uninitialized_regulator(void)
+{
+ rtems_status_code sc;
+ rtems_regulator_instance regulator;
+ void *buffer;
+
+ (void) memset(&regulator, 0, sizeof(regulator));
+
+ sc = rtems_regulator_release_buffer(&regulator, &buffer);
+ rtems_test_assert(sc == RTEMS_INCORRECT_STATE);
+}
+
+/**
+ * @ingroup RegulatorTests
+ * @brief Verify rtems_regulator_release_buffer successful case
+ *
+ * This unit test verifies that rtems_regulator_release_buffer() can be successfully
+ * invoked with a buffer previously allocated by rtems_regulator_obtain_buffer().
+ */
+static void test_regulator_release_buffer_OK(void)
+{
+ rtems_status_code sc;
+ rtems_regulator_instance *regulator;
+ void *buffer;
+
+ regulator = test_regulator_create_regulator_OK();
+ rtems_test_assert(regulator != NULL);
+
+ sc = rtems_regulator_obtain_buffer(regulator, &buffer);
+ rtems_test_assert(sc == RTEMS_SUCCESSFUL);
+ rtems_test_assert(buffer != NULL);
+
+ sc = rtems_regulator_release_buffer(regulator, buffer);
+ rtems_test_assert(sc == RTEMS_SUCCESSFUL);
+
+ sc = rtems_regulator_delete(regulator, FIVE_SECONDS);
+ rtems_test_assert(sc == RTEMS_SUCCESSFUL);
+}
+
+/**
+ * @ingroup RegulatorTests
+ * @brief Verify rtems_regulator_send NULL regulator error
+ *
+ * This unit test verifies that rtems_regulator_send() returns an error when
+ * the regulator argument is NULL.
+ */
+static void test_regulator_send_null_regulator(void)
+{
+ rtems_status_code sc;
+ void *buffer;
+ size_t length;
+
+ buffer = &length;
+ length = sizeof(size_t);
+
+ sc = rtems_regulator_send(NULL, buffer, length);
+ rtems_test_assert(sc == RTEMS_INVALID_ADDRESS);
+}
+
+/**
+ * @ingroup RegulatorTests
+ * @brief Verify rtems_regulator_send NULL message error
+ *
+ * This unit test verifies that rtems_regulator_send() returns an error when
+ * the message argument is NULL.
+ */
+static void test_regulator_send_null_message(void)
+{
+ rtems_status_code sc;
+ size_t length;
+ rtems_regulator_instance regulator;
+
+ length = sizeof(size_t);
+
+ sc = rtems_regulator_send(&regulator, NULL, length);
+ rtems_test_assert(sc == RTEMS_INVALID_ADDRESS);
+}
+
+/**
+ * @ingroup RegulatorTests
+ * @brief Verify rtems_regulator_send zero length message error
+ *
+ * This unit test verifies that rtems_regulator_send() returns an
+ * error when the message length is 0.
+ */
+static void test_regulator_send_length_is_zero(void)
+{
+ rtems_status_code sc;
+ rtems_regulator_instance regulator;
+ void *buffer;
+ size_t length;
+
+ buffer = &length;
+ length = 0;
+
+ sc = rtems_regulator_send(&regulator, buffer, length);
+ rtems_test_assert(sc == RTEMS_INVALID_NUMBER);
+}
+
+/**
+ * @ingroup RegulatorTests
+ * @brief Verify rtems_regulator_send uninitialized regulator error
+ *
+ * This unit test verifies that rtems_regulator_send() returns an
+ * error when the regulator argument is uninitialized.
+ */
+static void test_regulator_send_uninitialized_regulator(void)
+{
+ rtems_status_code sc;
+ rtems_regulator_instance regulator;
+ void *buffer;
+ size_t length;
+
+ buffer = &length;
+ length = sizeof(size_t);
+
+ (void) memset(&regulator, 0, sizeof(regulator));
+
+ sc = rtems_regulator_send(&regulator, buffer, length);
+ rtems_test_assert(sc == RTEMS_INCORRECT_STATE);
+}
+
+/**
+ * @ingroup RegulatorTests
+ * @brief Verify Cannot Delete with Message Outstanding
+ *
+ * This unit test verifies that when the regulator is successfully
+ * initialized, that it cannot be deleted with an undelivered message.
+ * It also verifies some basic statistics are working.
+ */
+static void test_regulator_cannot_delete_with_outstanding(void)
+{
+ rtems_status_code sc;
+ rtems_regulator_instance *regulator;
+ char message[MAXIMUM_MESSAGE_LENGTH];
+ void *buffer;
+ size_t length;
+ int match;
+ rtems_regulator_attributes attributes = {
+ .deliverer = test_regulator_deliverer_logger,
+ .deliverer_context = &deliverer_logger_context,
+ .maximum_message_size = 16,
+ .maximum_messages = 10,
+ .delivery_thread_priority = 16,
+ .delivery_thread_stack_size = 0,
+ .delivery_thread_period = RTEMS_MILLISECONDS_TO_TICKS(250),
+ .maximum_to_dequeue_per_period = 3
+ };
+ rtems_regulator_statistics stats;
+
+ sc = rtems_regulator_create(&attributes, &regulator);
+ rtems_test_assert(sc == RTEMS_SUCCESSFUL);
+ rtems_test_assert(regulator != NULL);
+
+ deliverer_logger_context.regulator = regulator;
+
+ delivered_messages_reset();
+
+ // Ensure statistics show no buffers obtained or processed
+ sc = rtems_regulator_get_statistics(regulator, &stats);
+ rtems_test_assert(sc == RTEMS_SUCCESSFUL);
+ rtems_test_assert(stats.obtained == 0);
+ rtems_test_assert(stats.released == 0);
+ rtems_test_assert(stats.delivered == 0);
+ rtems_test_assert(stats.period_statistics.count == 0);
+ rtems_test_assert(stats.period_statistics.missed_count == 0);
+
+ // Obtain a buffer which should change the statistics
+ sc = rtems_regulator_obtain_buffer(regulator, &buffer);
+ rtems_test_assert(sc == RTEMS_SUCCESSFUL);
+ rtems_test_assert(buffer != NULL);
+
+ // Ensure statistics show one buffer obtained
+ sc = rtems_regulator_get_statistics(regulator, &stats);
+ rtems_test_assert(sc == RTEMS_SUCCESSFUL);
+ rtems_test_assert(stats.obtained == 1);
+ rtems_test_assert(stats.released == 0);
+ rtems_test_assert(stats.delivered == 0);
+ rtems_test_assert(stats.period_statistics.count == 0);
+ rtems_test_assert(stats.period_statistics.missed_count == 0);
+
+
+ // Format and send the message -- statistics do not change
+ length = snprintf(message, MAXIMUM_MESSAGE_LENGTH, "message %d", 1024) + 1;
+ strcpy(buffer, message);
+
+ sc = rtems_regulator_send(regulator, buffer, length);
+ rtems_test_assert(sc == RTEMS_SUCCESSFUL);
+
+ // Ensure statistics show one buffer obtained
+ sc = rtems_regulator_get_statistics(regulator, &stats);
+ rtems_test_assert(sc == RTEMS_SUCCESSFUL);
+ rtems_test_assert(stats.obtained == 1);
+ rtems_test_assert(stats.released == 0);
+ rtems_test_assert(stats.delivered == 0);
+ rtems_test_assert(stats.period_statistics.count == 0);
+ rtems_test_assert(stats.period_statistics.missed_count == 0);
+
+ // This is the actual failing case -- cannot delete w/outstanding
+ sc = rtems_regulator_delete(regulator, FIVE_SECONDS);
+ rtems_test_assert(sc == RTEMS_RESOURCE_IN_USE);
+
+ // Now let the deliveries happen
+ sleep(1);
+
+ // Ensure statistics show all buffers released
+ sc = rtems_regulator_get_statistics(regulator, &stats);
+ rtems_test_assert(sc == RTEMS_SUCCESSFUL);
+ rtems_test_assert(stats.obtained == 1);
+ rtems_test_assert(stats.released == 1);
+ rtems_test_assert(stats.delivered == 1);
+ rtems_test_assert(stats.period_statistics.count != 0);
+ rtems_test_assert(stats.period_statistics.missed_count == 0);
+
+ rtems_test_assert(delivered_message_count == 1);
+ match = strncmp(
+ delivered_messages[0].message,
+ message,
+ MAXIMUM_MESSAGE_LENGTH
+ );
+ rtems_test_assert(match == 0);
+
+ sc = rtems_regulator_delete(regulator, FIVE_SECONDS);
+ rtems_test_assert(sc == RTEMS_SUCCESSFUL);
+
+ deliverer_logger_context.regulator = NULL;
+}
+
+/**
+ * @ingroup RegulatorTests
+ * @brief Verify rtems_regulator_send and output thread delivers message
+ *
+ * This unit test verifies that when the regulator is
+ * successfully initialized and used as expected, a message sent via
+ * rtems_regulator_send() is delivered as expected.
+ */
+static void test_regulator_send_one_message_OK(void)
+{
+ rtems_status_code sc;
+ rtems_regulator_instance *regulator;
+ char message[MAXIMUM_MESSAGE_LENGTH];
+ void *buffer;
+ size_t length;
+ int match;
+ rtems_regulator_attributes attributes = {
+ .deliverer = test_regulator_deliverer_logger,
+ .deliverer_context = &deliverer_logger_context,
+ .maximum_message_size = 16,
+ .maximum_messages = 10,
+ .delivery_thread_priority = 16,
+ .delivery_thread_stack_size = 0,
+ .delivery_thread_period = RTEMS_MILLISECONDS_TO_TICKS(250),
+ .maximum_to_dequeue_per_period = 3
+ };
+
+ sc = rtems_regulator_create(&attributes, &regulator);
+ rtems_test_assert(sc == RTEMS_SUCCESSFUL);
+ rtems_test_assert(regulator != NULL);
+
+ deliverer_logger_context.regulator = regulator;
+
+ delivered_messages_reset();
+
+ sc = rtems_regulator_obtain_buffer(regulator, &buffer);
+ rtems_test_assert(sc == RTEMS_SUCCESSFUL);
+ rtems_test_assert(buffer != NULL);
+
+ length = snprintf(message, MAXIMUM_MESSAGE_LENGTH, "message %d", 1024) + 1;
+ strcpy(buffer, message);
+
+ sc = rtems_regulator_send(regulator, buffer, length);
+ rtems_test_assert(sc == RTEMS_SUCCESSFUL);
+
+ sleep(1);
+
+ rtems_test_assert(delivered_message_count == 1);
+ match = strncmp(
+ delivered_messages[0].message,
+ message,
+ MAXIMUM_MESSAGE_LENGTH
+ );
+ rtems_test_assert(match == 0);
+
+ sc = rtems_regulator_delete(regulator, FIVE_SECONDS);
+ rtems_test_assert(sc == RTEMS_SUCCESSFUL);
+
+ deliverer_logger_context.regulator = NULL;
+}
+
+/**
+ * @ingroup RegulatorTests
+ * @brief Verify rtems_regulator_send and output thread delivers messages
+ *
+ * This unit test verifies that when the regulator is successfully initialized
+ * and used as expected, and multiple messages are sent via rtems_regulator_send()
+ * that they are delivered as expected.
+ */
+#include <stdio.h>
+static void test_regulator_send_multiple_messages_OK(void)
+{
+ rtems_status_code sc;
+ rtems_regulator_instance *regulator;
+ char message[MAXIMUM_MESSAGE_LENGTH];
+ void *buffer;
+ size_t length;
+ int match;
+ int i;
+ time_t base_time;
+ time_t tmp_time;
+ rtems_interval base_ticks;
+ rtems_interval ticks;
+ rtems_interval ticks_per_second;
+
+ rtems_regulator_attributes attributes = {
+ .deliverer = test_regulator_deliverer_logger,
+ .deliverer_context = &deliverer_logger_context,
+ .maximum_message_size = MAXIMUM_MESSAGE_LENGTH,
+ .maximum_messages = 10,
+ .delivery_thread_priority = 16,
+ .delivery_thread_stack_size = 0,
+ .delivery_thread_period = RTEMS_MILLISECONDS_TO_TICKS(1000),
+ .maximum_to_dequeue_per_period = 2
+ };
+
+ delivered_messages_reset();
+
+ sc = rtems_regulator_create(&attributes, &regulator);
+ rtems_test_assert(sc == RTEMS_SUCCESSFUL);
+ rtems_test_assert(regulator != NULL);
+
+ deliverer_logger_context.regulator = regulator;
+
+ /*
+ * Ensure the messages are sent on a second boundary to ensure the
+ * output thread will process them as expected.
+ */
+ tmp_time = time(NULL);
+ do {
+ base_time = time(NULL);
+ } while (tmp_time == base_time);
+
+ /**
+ * Send five messages as a burst which will need to be smoothly sent at
+ * the configured rate.
+ */
+ for (i=1 ; i <= 5 ; i++) {
+ sc = rtems_regulator_obtain_buffer(regulator, &buffer);
+ rtems_test_assert(sc == RTEMS_SUCCESSFUL);
+ rtems_test_assert(buffer != NULL);
+
+ length = snprintf(message, MAXIMUM_MESSAGE_LENGTH, "message %d", i);
+ strcpy(buffer, message);
+
+ sc = rtems_regulator_send(regulator, buffer, length);
+ rtems_test_assert(sc == RTEMS_SUCCESSFUL);
+ }
+
+ /*
+ * Let the output thread executed and deliver the messages.
+ */
+ sleep(5);
+
+ /**
+ * Ensure the five messages were delivered as follows:
+ *
+ * - deliver all 5
+ * - contents are "message N" where N is 1 to 5
+ * - message 1 and 2 delivered during the first second
+ * - message 3 and 4 delivered during the second second
+ * - message 5 delivered during the third second
+ * - no further messages delivered
+ */
+
+ rtems_test_assert(delivered_message_count == 5);
+
+ for (i=0 ; i < 5 ; i++) {
+ (void) snprintf(message, MAXIMUM_MESSAGE_LENGTH, "message %d", i+1);
+// printf("%d %s\n", i, delivered_messages[i].message);
+ match = strncmp(
+ delivered_messages[i].message,
+ message,
+ MAXIMUM_MESSAGE_LENGTH
+ );
+ rtems_test_assert(match == 0);
+ }
+
+ /**
+ * Verify that messages were delivered in the proper groups. Check that
+ * the delivery time matches expectations.
+ */
+ rtems_test_assert(delivered_messages[0].processed == delivered_messages[1].processed);
+ rtems_test_assert(delivered_messages[1].processed != delivered_messages[2].processed);
+ rtems_test_assert(delivered_messages[2].processed == delivered_messages[3].processed);
+ rtems_test_assert(delivered_messages[3].processed != delivered_messages[4].processed);
+
+ /**
+ * Verify that the message groups were properly spaced temporally. They
+ * should be one second apart.
+ */
+ ticks_per_second = rtems_clock_get_ticks_per_second();
+
+ base_ticks = delivered_messages[1].processed;
+ ticks = delivered_messages[2].processed;
+ rtems_test_assert(ticks_per_second == ticks - base_ticks);
+
+ base_ticks = delivered_messages[3].processed;
+ ticks = delivered_messages[4].processed;
+ rtems_test_assert(ticks_per_second == ticks - base_ticks);
+
+ sc = rtems_regulator_delete(regulator, FIVE_SECONDS);
+ rtems_test_assert(sc == RTEMS_SUCCESSFUL);
+
+ deliverer_logger_context.regulator = NULL;
+}
+
+/* Necessary prototype */
+rtems_task test_regulator(rtems_task_argument);
+
+/**
+ * @ingroup RegulatorTestshttps://devel.rtems.org/milestone/6.1
+ * @brief Test entry task which invokes test cases
+ */
+rtems_task test_regulator(rtems_task_argument arg)
+{
+ (void) arg;
+
+ TEST_BEGIN();
+
+ malloc_trigger_reset();
+
+ test_regulator_create_max_dequeue_zero();
+ test_regulator_create_null_attributes();
+ test_regulator_create_null_regulator();
+ test_regulator_create_deliverer_is_null();
+ test_regulator_create_maximum_messages_is_zero();
+ test_regulator_create_maximum_message_size_is_zero();
+ test_regulator_create_maximum_to_dequeue_per_period_is_zero();
+ test_regulator_create_malloc_regulator_fails();
+ test_regulator_create_malloc_buffers_fails();
+ test_regulator_create_delivery_thread_priority_is_zero();
+ test_regulator_create_partition_create_fails();
+ test_regulator_create_message_queue_create_fails();
+ test_regulator_create_task_create_fails();
+ test_regulator_create_rate_monotonic_create_fails();
+
+ test_regulator_delete_null_regulator();
+ test_regulator_delete_uninitialized_regulator();
+ test_regulator_delete_OK();
+
+ test_regulator_obtain_buffer_null_regulator();
+ test_regulator_obtain_buffer_uninitialized_regulator();
+ test_regulator_obtain_buffer_OK();
+
+ test_regulator_release_buffer_null_regulator();
+ test_regulator_release_buffer_uninitialized_regulator();
+ test_regulator_release_buffer_OK();
+
+ test_regulator_send_null_regulator();
+ test_regulator_send_null_message();
+ test_regulator_send_length_is_zero();
+ test_regulator_send_uninitialized_regulator();
+
+ test_regulator_send_one_message_OK();
+ test_regulator_cannot_delete_with_outstanding();
+
+ test_regulator_send_multiple_messages_OK();
+
+ TEST_END();
+
+ rtems_test_exit(0);
+}
diff --git a/testsuites/libtests/regulator01/regulator01.doc b/testsuites/libtests/regulator01/regulator01.doc
new file mode 100644
index 0000000000..ff4e8005ec
--- /dev/null
+++ b/testsuites/libtests/regulator01/regulator01.doc
@@ -0,0 +1,67 @@
+# SPDX-License-Identifier: BSD-2-Clause
+
+# Copyright (c) 2023 OAR Corporation
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1. Redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+# 2. Redistributions in binary form must reproduce the above copyright
+# notice, this list of conditions and the following disclaimer in the
+# documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+# ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
+# LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+# POSSIBILITY OF SUCH DAMAGE.
+#
+
+This file describes the directives and concepts tested by this test set.
+
+test set name: regulator01
+
+directives:
+ + rtems_regulator_create
+ + rtems_regulator_delete
+ + rtems_regulator_obtain_buffer
+ + rtems_regulator_release_buffer
+ + rtems_regulator_send
+
+concepts
+ + Verify rtems_regulator_create() maximum_to_dequeue_per_period
+ + Verify rtems_regulator_create() NULL attributes error
+ + Verify rtems_regulator_create NULL regulator error
+ + Verify rtems_regulator_create deliverer is NULL
+ + Verify rtems_regulator_create maximum_messages is 0 error
+ + Verify rtems_regulator_create maximum_message_size is 0 error
+ + Verify rtems_regulator_create maximum_to_dequeue_per_period is 0 error
+ + Verify rtems_regulator_create returns error on failure to allocate regulator
+ + Verify rtems_regulator_create returns error on failure to allocate buffers
+ + Verify rtems_regulator_create and delete work
+ + Verify rtems_regulator_create rtems_partition_create error
+ + Verify rtems_regulator_create rtems_message_queue_create error
+ + Verify rtems_regulator_create rtems_task_create error
+ + Verify Regulator Output Thread Handles Error on Period Create
+ + Verify rtems_regulator_delete NULL regulator error
+ + Verify rtems_regulator_delete uninitialized regulator error
+ + Verify rtems_regulator_delete successful case
+ + Verify rtems_regulator_obtain_buffer NULL regulator error
+ + Verify rtems_regulator_obtain_buffer uninitialized regulator error
+ + Verify rtems_regulator_obtain_buffer successful case
+ + Verify rtems_regulator_release_buffer NULL regulator error
+ + Verify rtems_regulator_release_buffer uninitialized regulator error
+ + Verify rtems_regulator_release_buffer successful case
+ + Verify rtems_regulator_send NULL regulator error
+ + Verify rtems_regulator_send NULL message error
+ + Verify rtems_regulator_send zero length message error
+ + Verify rtems_regulator_send uninitialized regulator error
+ + Verify rtems_regulator_send and output thread delivers message
+ + Verify rtems_regulator_send and cannot delete with outstanding messages
diff --git a/testsuites/libtests/regulator01/rtems_config.c b/testsuites/libtests/regulator01/rtems_config.c
new file mode 100644
index 0000000000..ca96e1b1dd
--- /dev/null
+++ b/testsuites/libtests/regulator01/rtems_config.c
@@ -0,0 +1,59 @@
+/* SPDX-License-Identifier: BSD-2-Clause */
+
+/**
+ * @file
+ *
+ * @brief RTEMS Configuration for regulator tests
+ */
+
+/*
+ * COPYRIGHT (c) 2022. * On-Line Applications Research Corporation (OAR).
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ */
+
+
+#include <rtems.h>
+
+rtems_task test_regulator(rtems_task_argument);
+
+#include <bsp.h> /* for device driver prototypes */
+
+/* NOTICE: the clock driver is explicitly disabled */
+#define CONFIGURE_APPLICATION_NEEDS_CLOCK_DRIVER
+#define CONFIGURE_APPLICATION_NEEDS_CONSOLE_DRIVER
+
+#define CONFIGURE_RTEMS_INIT_TASKS_TABLE
+#define CONFIGURE_INIT_TASK_ENTRY_POINT test_regulator
+#define CONFIGURE_INIT_TASK_ATTRIBUTES RTEMS_FLOATING_POINT
+
+/* Use hard limits to make it easier to trip object creation errors */
+#define CONFIGURE_MAXIMUM_TASKS 2
+#define CONFIGURE_MAXIMUM_MESSAGE_QUEUES 1
+#define CONFIGURE_MAXIMUM_PARTITIONS 1
+#define CONFIGURE_MAXIMUM_PERIODS 1
+
+#define CONFIGURE_UNIFIED_WORK_AREAS
+#define CONFIGURE_MINIMUM_TASK_STACK_SIZE (8 * 1024)
+
+#define CONFIGURE_INIT
+#include <rtems/confdefs.h>
diff --git a/testsuites/libtests/sha/init.c b/testsuites/libtests/sha/init.c
index c65517253a..7d8c4ada3e 100644
--- a/testsuites/libtests/sha/init.c
+++ b/testsuites/libtests/sha/init.c
@@ -1,7 +1,7 @@
/* SPDX-License-Identifier: BSD-2-Clause */
/*
- * Copyright (c) 2014 embedded brains GmbH. All rights reserved.
+ * Copyright (c) 2014 embedded brains GmbH & Co. KG
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
@@ -29,8 +29,11 @@
#include "config.h"
#endif
+#include <sha224.h>
#include <sha256.h>
+#include <sha384.h>
#include <sha512.h>
+#include <sha512t.h>
#include <stdio.h>
#include <string.h>
@@ -49,7 +52,32 @@ static const char *const test_vectors[] = {
};
static const unsigned char
-test_sha256_results[RTEMS_ARRAY_SIZE(test_vectors)][32] = {
+test_sha224_results[RTEMS_ARRAY_SIZE(test_vectors)][SHA224_DIGEST_LENGTH] = {
+ {
+ 0x23, 0x09, 0x7d, 0x22, 0x34, 0x05, 0xd8, 0x22,
+ 0x86, 0x42, 0xa4, 0x77, 0xbd, 0xa2, 0x55, 0xb3,
+ 0x2a, 0xad, 0xbc, 0xe4, 0xbd, 0xa0, 0xb3, 0xf7,
+ 0xe3, 0x6c, 0x9d, 0xa7
+ }, {
+ 0xd1, 0x4a, 0x02, 0x8c, 0x2a, 0x3a, 0x2b, 0xc9,
+ 0x47, 0x61, 0x02, 0xbb, 0x28, 0x82, 0x34, 0xc4,
+ 0x15, 0xa2, 0xb0, 0x1f, 0x82, 0x8e, 0xa6, 0x2a,
+ 0xc5, 0xb3, 0xe4, 0x2f
+ }, {
+ 0x75, 0x38, 0x8b, 0x16, 0x51, 0x27, 0x76, 0xcc,
+ 0x5d, 0xba, 0x5d, 0xa1, 0xfd, 0x89, 0x01, 0x50,
+ 0xb0, 0xc6, 0x45, 0x5c, 0xb4, 0xf5, 0x8b, 0x19,
+ 0x52, 0x52, 0x25, 0x25
+ }, {
+ 0xc9, 0x7c, 0xa9, 0xa5, 0x59, 0x85, 0x0c, 0xe9,
+ 0x7a, 0x04, 0xa9, 0x6d, 0xef, 0x6d, 0x99, 0xa9,
+ 0xe0, 0xe0, 0xe2, 0xab, 0x14, 0xe6, 0xb8, 0xdf,
+ 0x26, 0x5f, 0xc0, 0xb3
+ }
+};
+
+static const unsigned char
+test_sha256_results[RTEMS_ARRAY_SIZE(test_vectors)][SHA256_DIGEST_LENGTH] = {
{
0xba, 0x78, 0x16, 0xbf, 0x8f, 0x01, 0xcf, 0xea,
0x41, 0x41, 0x40, 0xde, 0x5d, 0xae, 0x22, 0x23,
@@ -74,7 +102,40 @@ test_sha256_results[RTEMS_ARRAY_SIZE(test_vectors)][32] = {
};
static const unsigned char
-test_sha512_results[RTEMS_ARRAY_SIZE(test_vectors)][64] = {
+test_sha384_results[RTEMS_ARRAY_SIZE(test_vectors)][SHA384_DIGEST_LENGTH] = {
+ {
+ 0xcb, 0x00, 0x75, 0x3f, 0x45, 0xa3, 0x5e, 0x8b,
+ 0xb5, 0xa0, 0x3d, 0x69, 0x9a, 0xc6, 0x50, 0x07,
+ 0x27, 0x2c, 0x32, 0xab, 0x0e, 0xde, 0xd1, 0x63,
+ 0x1a, 0x8b, 0x60, 0x5a, 0x43, 0xff, 0x5b, 0xed,
+ 0x80, 0x86, 0x07, 0x2b, 0xa1, 0xe7, 0xcc, 0x23,
+ 0x58, 0xba, 0xec, 0xa1, 0x34, 0xc8, 0x25, 0xa7
+ }, {
+ 0x38, 0xb0, 0x60, 0xa7, 0x51, 0xac, 0x96, 0x38,
+ 0x4c, 0xd9, 0x32, 0x7e, 0xb1, 0xb1, 0xe3, 0x6a,
+ 0x21, 0xfd, 0xb7, 0x11, 0x14, 0xbe, 0x07, 0x43,
+ 0x4c, 0x0c, 0xc7, 0xbf, 0x63, 0xf6, 0xe1, 0xda,
+ 0x27, 0x4e, 0xde, 0xbf, 0xe7, 0x6f, 0x65, 0xfb,
+ 0xd5, 0x1a, 0xd2, 0xf1, 0x48, 0x98, 0xb9, 0x5b
+ }, {
+ 0x33, 0x91, 0xfd, 0xdd, 0xfc, 0x8d, 0xc7, 0x39,
+ 0x37, 0x07, 0xa6, 0x5b, 0x1b, 0x47, 0x09, 0x39,
+ 0x7c, 0xf8, 0xb1, 0xd1, 0x62, 0xaf, 0x05, 0xab,
+ 0xfe, 0x8f, 0x45, 0x0d, 0xe5, 0xf3, 0x6b, 0xc6,
+ 0xb0, 0x45, 0x5a, 0x85, 0x20, 0xbc, 0x4e, 0x6f,
+ 0x5f, 0xe9, 0x5b, 0x1f, 0xe3, 0xc8, 0x45, 0x2b
+ }, {
+ 0x09, 0x33, 0x0c, 0x33, 0xf7, 0x11, 0x47, 0xe8,
+ 0x3d, 0x19, 0x2f, 0xc7, 0x82, 0xcd, 0x1b, 0x47,
+ 0x53, 0x11, 0x1b, 0x17, 0x3b, 0x3b, 0x05, 0xd2,
+ 0x2f, 0xa0, 0x80, 0x86, 0xe3, 0xb0, 0xf7, 0x12,
+ 0xfc, 0xc7, 0xc7, 0x1a, 0x55, 0x7e, 0x2d, 0xb9,
+ 0x66, 0xc3, 0xe9, 0xfa, 0x91, 0x74, 0x60, 0x39
+ }
+};
+
+static const unsigned char
+test_sha512_results[RTEMS_ARRAY_SIZE(test_vectors)][SHA512_DIGEST_LENGTH] = {
{
0xdd, 0xaf, 0x35, 0xa1, 0x93, 0x61, 0x7a, 0xba,
0xcc, 0x41, 0x73, 0x49, 0xae, 0x20, 0x41, 0x31,
@@ -114,6 +175,56 @@ test_sha512_results[RTEMS_ARRAY_SIZE(test_vectors)][64] = {
}
};
+static const unsigned char test_sha512_224_results
+[RTEMS_ARRAY_SIZE(test_vectors)][SHA512_224_DIGEST_LENGTH] = {
+ {
+ 0x46, 0x34, 0x27, 0x0f, 0x70, 0x7b, 0x6a, 0x54,
+ 0xda, 0xae, 0x75, 0x30, 0x46, 0x08, 0x42, 0xe2,
+ 0x0e, 0x37, 0xed, 0x26, 0x5c, 0xee, 0xe9, 0xa4,
+ 0x3e, 0x89, 0x24, 0xaa
+ }, {
+ 0x6e, 0xd0, 0xdd, 0x02, 0x80, 0x6f, 0xa8, 0x9e,
+ 0x25, 0xde, 0x06, 0x0c, 0x19, 0xd3, 0xac, 0x86,
+ 0xca, 0xbb, 0x87, 0xd6, 0xa0, 0xdd, 0xd0, 0x5c,
+ 0x33, 0x3b, 0x84, 0xf4
+ }, {
+ 0xe5, 0x30, 0x2d, 0x6d, 0x54, 0xbb, 0x24, 0x22,
+ 0x75, 0xd1, 0xe7, 0x62, 0x2d, 0x68, 0xdf, 0x6e,
+ 0xb0, 0x2d, 0xed, 0xd1, 0x3f, 0x56, 0x4c, 0x13,
+ 0xdb, 0xda, 0x21, 0x74
+ }, {
+ 0x23, 0xfe, 0xc5, 0xbb, 0x94, 0xd6, 0x0b, 0x23,
+ 0x30, 0x81, 0x92, 0x64, 0x0b, 0x0c, 0x45, 0x33,
+ 0x35, 0xd6, 0x64, 0x73, 0x4f, 0xe4, 0x0e, 0x72,
+ 0x68, 0x67, 0x4a, 0xf9
+ }
+};
+
+static const unsigned char test_sha512_256_results
+[RTEMS_ARRAY_SIZE(test_vectors)][SHA512_256_DIGEST_LENGTH] = {
+ {
+ 0x53, 0x04, 0x8e, 0x26, 0x81, 0x94, 0x1e, 0xf9,
+ 0x9b, 0x2e, 0x29, 0xb7, 0x6b, 0x4c, 0x7d, 0xab,
+ 0xe4, 0xc2, 0xd0, 0xc6, 0x34, 0xfc, 0x6d, 0x46,
+ 0xe0, 0xe2, 0xf1, 0x31, 0x07, 0xe7, 0xaf, 0x23
+ }, {
+ 0xc6, 0x72, 0xb8, 0xd1, 0xef, 0x56, 0xed, 0x28,
+ 0xab, 0x87, 0xc3, 0x62, 0x2c, 0x51, 0x14, 0x06,
+ 0x9b, 0xdd, 0x3a, 0xd7, 0xb8, 0xf9, 0x73, 0x74,
+ 0x98, 0xd0, 0xc0, 0x1e, 0xce, 0xf0, 0x96, 0x7a
+ }, {
+ 0xbd, 0xe8, 0xe1, 0xf9, 0xf1, 0x9b, 0xb9, 0xfd,
+ 0x34, 0x06, 0xc9, 0x0e, 0xc6, 0xbc, 0x47, 0xbd,
+ 0x36, 0xd8, 0xad, 0xa9, 0xf1, 0x18, 0x80, 0xdb,
+ 0xc8, 0xa2, 0x2a, 0x70, 0x78, 0xb6, 0xa4, 0x61
+ }, {
+ 0x39, 0x28, 0xe1, 0x84, 0xfb, 0x86, 0x90, 0xf8,
+ 0x40, 0xda, 0x39, 0x88, 0x12, 0x1d, 0x31, 0xbe,
+ 0x65, 0xcb, 0x9d, 0x3e, 0xf8, 0x3e, 0xe6, 0x14,
+ 0x6f, 0xea, 0xc8, 0x61, 0xe1, 0x9b, 0x56, 0x3a
+ }
+};
+
static void print_result(const unsigned char *r, size_t n)
{
size_t i;
@@ -133,6 +244,29 @@ static void print_result(const unsigned char *r, size_t n)
printf("\n");
}
+static void test_sha224(void)
+{
+ size_t i;
+
+ printf("test SHA224\n");
+
+ for (i = 0; i < RTEMS_ARRAY_SIZE(test_vectors); ++i) {
+ SHA224_CTX ctx;
+ unsigned char r[SHA224_DIGEST_LENGTH];
+ const char *s = test_vectors[i];
+
+ SHA224_Init(&ctx);
+ SHA224_Update(&ctx, s, strlen(s));
+ SHA224_Final(r, &ctx);
+
+ print_result(&r[0], sizeof(r));
+
+ rtems_test_assert(
+ memcmp(&r[0], &test_sha224_results[i][0], sizeof(r)) == 0
+ );
+ }
+}
+
static void test_sha256(void)
{
size_t i;
@@ -141,7 +275,7 @@ static void test_sha256(void)
for (i = 0; i < RTEMS_ARRAY_SIZE(test_vectors); ++i) {
SHA256_CTX ctx;
- unsigned char r[32];
+ unsigned char r[SHA256_DIGEST_LENGTH];
const char *s = test_vectors[i];
SHA256_Init(&ctx);
@@ -156,6 +290,29 @@ static void test_sha256(void)
}
}
+static void test_sha384(void)
+{
+ size_t i;
+
+ printf("test SHA384\n");
+
+ for (i = 0; i < RTEMS_ARRAY_SIZE(test_vectors); ++i) {
+ SHA384_CTX ctx;
+ unsigned char r[SHA384_DIGEST_LENGTH];
+ const char *s = test_vectors[i];
+
+ SHA384_Init(&ctx);
+ SHA384_Update(&ctx, s, strlen(s));
+ SHA384_Final(r, &ctx);
+
+ print_result(&r[0], sizeof(r));
+
+ rtems_test_assert(
+ memcmp(&r[0], &test_sha384_results[i][0], sizeof(r)) == 0
+ );
+ }
+}
+
static void test_sha512(void)
{
size_t i;
@@ -164,7 +321,7 @@ static void test_sha512(void)
for (i = 0; i < RTEMS_ARRAY_SIZE(test_vectors); ++i) {
SHA512_CTX ctx;
- unsigned char r[64];
+ unsigned char r[SHA512_DIGEST_LENGTH];
const char *s = test_vectors[i];
SHA512_Init(&ctx);
@@ -179,12 +336,62 @@ static void test_sha512(void)
}
}
+static void test_sha512_224(void)
+{
+ size_t i;
+
+ printf("test SHA512-224\n");
+
+ for (i = 0; i < RTEMS_ARRAY_SIZE(test_vectors); ++i) {
+ SHA512_CTX ctx;
+ unsigned char r[SHA512_224_DIGEST_LENGTH];
+ const char *s = test_vectors[i];
+
+ SHA512_224_Init(&ctx);
+ SHA512_224_Update(&ctx, s, strlen(s));
+ SHA512_224_Final(r, &ctx);
+
+ print_result(&r[0], sizeof(r));
+
+ rtems_test_assert(
+ memcmp(&r[0], &test_sha512_224_results[i][0], sizeof(r)) == 0
+ );
+ }
+}
+
+static void test_sha512_256(void)
+{
+ size_t i;
+
+ printf("test SHA512-256\n");
+
+ for (i = 0; i < RTEMS_ARRAY_SIZE(test_vectors); ++i) {
+ SHA512_CTX ctx;
+ unsigned char r[SHA512_256_DIGEST_LENGTH];
+ const char *s = test_vectors[i];
+
+ SHA512_256_Init(&ctx);
+ SHA512_256_Update(&ctx, s, strlen(s));
+ SHA512_256_Final(r, &ctx);
+
+ print_result(&r[0], sizeof(r));
+
+ rtems_test_assert(
+ memcmp(&r[0], &test_sha512_256_results[i][0], sizeof(r)) == 0
+ );
+ }
+}
+
static void Init(rtems_task_argument arg)
{
TEST_BEGIN();
+ test_sha224();
test_sha256();
+ test_sha384();
test_sha512();
+ test_sha512_224();
+ test_sha512_256();
rtems_stack_checker_report_usage();
TEST_END();
diff --git a/testsuites/libtests/shell01/init.c b/testsuites/libtests/shell01/init.c
index 0fc29b8936..83564d9937 100644
--- a/testsuites/libtests/shell01/init.c
+++ b/testsuites/libtests/shell01/init.c
@@ -1,7 +1,7 @@
/* SPDX-License-Identifier: BSD-2-Clause */
/*
- * Copyright (c) 2014, 2019 embedded brains GmbH. All rights reserved.
+ * Copyright (C) 2014, 2019 embedded brains GmbH & Co. KG
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
diff --git a/testsuites/libtests/sparsedisk01/init.c b/testsuites/libtests/sparsedisk01/init.c
index c756daa188..5398bf98ce 100644
--- a/testsuites/libtests/sparsedisk01/init.c
+++ b/testsuites/libtests/sparsedisk01/init.c
@@ -1,7 +1,7 @@
/* SPDX-License-Identifier: BSD-2-Clause */
/*
- * Copyright (c) 2012 embedded brains GmbH. All rights reserved.
+ * Copyright (c) 2012 embedded brains GmbH & Co. KG
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
diff --git a/testsuites/libtests/spi01/init.c b/testsuites/libtests/spi01/init.c
index aeabdc04d0..7b68d0f76a 100644
--- a/testsuites/libtests/spi01/init.c
+++ b/testsuites/libtests/spi01/init.c
@@ -1,7 +1,7 @@
/* SPDX-License-Identifier: BSD-2-Clause */
/*
- * Copyright (c) 2016 embedded brains GmbH. All rights reserved.
+ * Copyright (c) 2016 embedded brains GmbH & Co. KG
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
diff --git a/testsuites/libtests/stackchk01/init.c b/testsuites/libtests/stackchk01/init.c
index 9e58409b17..b87b6baa2d 100644
--- a/testsuites/libtests/stackchk01/init.c
+++ b/testsuites/libtests/stackchk01/init.c
@@ -35,14 +35,18 @@
const char rtems_test_name[] = "STACKCHK 1";
-/* forward declarations to avoid warnings */
-rtems_task Init(rtems_task_argument argument);
+static void stack_visitor( const rtems_stack_checker_info *info, void *arg )
+{
+ if ( rtems_object_id_get_api( info->id ) == 1 ) {
+ *(uintptr_t *) arg = info->used;
+ }
+}
-rtems_task Init(
- rtems_task_argument argument
-)
+static rtems_task Init( rtems_task_argument argument )
{
- bool blown;
+ bool blown;
+ uintptr_t used;
+ uintptr_t limit;
TEST_BEGIN();
@@ -50,14 +54,26 @@ rtems_task Init(
blown = rtems_stack_checker_is_blown();
rtems_test_assert(!blown);
+ rtems_task_wake_after( 2 );
+ used = 0;
+ rtems_stack_checker_iterate( stack_visitor, &used );
+ limit = CPU_STACK_MINIMUM_SIZE / 4;
+ printf(
+ "check used IDLE stack size: 0 < %" PRIuPTR " <= %" PRIuPTR "\n",
+ used,
+ limit
+ );
+ rtems_test_assert( used > 0 );
+ rtems_test_assert( used <= limit );
+
TEST_END();
rtems_test_exit(0);
}
/* configuration information */
+#define CONFIGURE_APPLICATION_NEEDS_CLOCK_DRIVER
#define CONFIGURE_APPLICATION_NEEDS_SIMPLE_CONSOLE_DRIVER
-#define CONFIGURE_APPLICATION_DOES_NOT_NEED_CLOCK_DRIVER
#define CONFIGURE_MAXIMUM_TASKS 1
#define CONFIGURE_INITIAL_EXTENSIONS RTEMS_TEST_INITIAL_EXTENSION
diff --git a/testsuites/libtests/stackchk01/stackchk01.doc b/testsuites/libtests/stackchk01/stackchk01.doc
index 5b3d9c894b..cbb9fb62f9 100644
--- a/testsuites/libtests/stackchk01/stackchk01.doc
+++ b/testsuites/libtests/stackchk01/stackchk01.doc
@@ -30,9 +30,17 @@ This file describes the directives and concepts tested by this test set.
test set name: stackchk01
directives:
- rtems_stack_checker_is_blown
+
+* CPU_STACK_MINIMUM_SIZE
+
+* rtems_stack_checker_is_blown
+
+* rtems_stack_checker_iterate
concepts:
-+ ensure that dynamic checks for a blown stack work both when the stack
+* Ensure that dynamic checks for a blown stack work both when the stack
is not blown and when it is.
+
+* Ensure that the CPU_STACK_MINIMUM_SIZE is suffiently larger than the stack
+ usage in simple applications.
diff --git a/testsuites/libtests/termios01/termios_testdriver.c b/testsuites/libtests/termios01/termios_testdriver.c
index d0a9534b52..49810a37e0 100644
--- a/testsuites/libtests/termios01/termios_testdriver.c
+++ b/testsuites/libtests/termios01/termios_testdriver.c
@@ -192,7 +192,7 @@ rtems_device_driver termios_test_driver_open(
termios_test_driver_set_attributes, /* setAttributes */
NULL, /* stopRemoteTx */
NULL, /* startRemoteTx */
- 0 /* outputUsesInterrupts */
+ TERMIOS_POLLED /* outputUsesInterrupts */
};
if ( minor > 2 ) {
diff --git a/testsuites/libtests/termios03/termios_testdriver_polled.c b/testsuites/libtests/termios03/termios_testdriver_polled.c
index a852fe1f20..8daf8d6685 100644
--- a/testsuites/libtests/termios03/termios_testdriver_polled.c
+++ b/testsuites/libtests/termios03/termios_testdriver_polled.c
@@ -159,7 +159,7 @@ rtems_device_driver termios_test_driver_open(
termios_test_driver_set_attributes, /* setAttributes */
NULL, /* stopRemoteTx */
NULL, /* startRemoteTx */
- 0 /* outputUsesInterrupts */
+ TERMIOS_POLLED /* outputUsesInterrupts */
};
if ( minor > 2 ) {
diff --git a/testsuites/libtests/termios04/termios_testdriver_impl.h b/testsuites/libtests/termios04/termios_testdriver_impl.h
index cfe9ebedf4..740f9e0778 100644
--- a/testsuites/libtests/termios04/termios_testdriver_impl.h
+++ b/testsuites/libtests/termios04/termios_testdriver_impl.h
@@ -271,7 +271,7 @@ rtems_device_driver termios_test_driver_open(
#if defined(TASK_DRIVEN)
TERMIOS_TASK_DRIVEN /* outputUsesInterrupts */
#else
- 0 /* outputUsesInterrupts */
+ TERMIOS_POLLED /* outputUsesInterrupts */
#endif
};
diff --git a/testsuites/libtests/termios09/init.c b/testsuites/libtests/termios09/init.c
index 3cb71fb267..a7c2518ecc 100644
--- a/testsuites/libtests/termios09/init.c
+++ b/testsuites/libtests/termios09/init.c
@@ -1,7 +1,7 @@
/* SPDX-License-Identifier: BSD-2-Clause */
/*
- * Copyright (c) 2017 embedded brains GmbH. All rights reserved.
+ * Copyright (c) 2017 embedded brains GmbH & Co. KG
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
diff --git a/testsuites/libtests/ttest01/init.c b/testsuites/libtests/ttest01/init.c
index 658f8f6289..433bc0581b 100644
--- a/testsuites/libtests/ttest01/init.c
+++ b/testsuites/libtests/ttest01/init.c
@@ -1,7 +1,7 @@
/*
* SPDX-License-Identifier: BSD-2-Clause
*
- * Copyright (C) 2018, 2019 embedded brains GmbH
+ * Copyright (C) 2018, 2019 embedded brains GmbH & Co. KG
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
diff --git a/testsuites/libtests/ttest01/t-self-test.h b/testsuites/libtests/ttest01/t-self-test.h
index 1035872c9d..d2767d5e70 100644
--- a/testsuites/libtests/ttest01/t-self-test.h
+++ b/testsuites/libtests/ttest01/t-self-test.h
@@ -1,7 +1,7 @@
/*
* SPDX-License-Identifier: BSD-2-Clause
*
- * Copyright (C) 2019 embedded brains GmbH
+ * Copyright (C) 2019 embedded brains GmbH & Co. KG
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
diff --git a/testsuites/libtests/ttest01/test-assert.c b/testsuites/libtests/ttest01/test-assert.c
index 398539fe8e..2a401ca577 100644
--- a/testsuites/libtests/ttest01/test-assert.c
+++ b/testsuites/libtests/ttest01/test-assert.c
@@ -86,7 +86,7 @@ T_TEST_OUTPUT(assert2,
/*
* SPDX-License-Identifier: BSD-2-Clause OR CC-BY-SA-4.0
*
- * Copyright (C) 2018, 2019 embedded brains GmbH
+ * Copyright (C) 2018, 2019 embedded brains GmbH & Co. KG
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
diff --git a/testsuites/libtests/ttest01/test-checks.c b/testsuites/libtests/ttest01/test-checks.c
index fa5591121e..14f3cda44c 100644
--- a/testsuites/libtests/ttest01/test-checks.c
+++ b/testsuites/libtests/ttest01/test-checks.c
@@ -5415,7 +5415,7 @@ T_TEST_OUTPUT(check_false_no_fmt,
/*
* SPDX-License-Identifier: BSD-2-Clause OR CC-BY-SA-4.0
*
- * Copyright (C) 2018, 2019 embedded brains GmbH
+ * Copyright (C) 2018, 2019 embedded brains GmbH & Co. KG
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
diff --git a/testsuites/libtests/ttest01/test-destructor.c b/testsuites/libtests/ttest01/test-destructor.c
index 0a2f650ed2..5e30e6c203 100644
--- a/testsuites/libtests/ttest01/test-destructor.c
+++ b/testsuites/libtests/ttest01/test-destructor.c
@@ -31,7 +31,7 @@ T_TEST_OUTPUT(destructor,
/*
* SPDX-License-Identifier: BSD-2-Clause OR CC-BY-SA-4.0
*
- * Copyright (C) 2018, 2019 embedded brains GmbH
+ * Copyright (C) 2018, 2019 embedded brains GmbH & Co. KG
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
diff --git a/testsuites/libtests/ttest01/test-eno.c b/testsuites/libtests/ttest01/test-eno.c
index c334b5e1f7..744feb6434 100644
--- a/testsuites/libtests/ttest01/test-eno.c
+++ b/testsuites/libtests/ttest01/test-eno.c
@@ -50,7 +50,7 @@ T_TEST_OUTPUT(test_eno_success,
/*
* SPDX-License-Identifier: BSD-2-Clause OR CC-BY-SA-4.0
*
- * Copyright (C) 2018, 2019 embedded brains GmbH
+ * Copyright (C) 2018, 2019 embedded brains GmbH & Co. KG
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
diff --git a/testsuites/libtests/ttest01/test-example.c b/testsuites/libtests/ttest01/test-example.c
index 6fa062f6c8..94bd9487db 100644
--- a/testsuites/libtests/ttest01/test-example.c
+++ b/testsuites/libtests/ttest01/test-example.c
@@ -32,7 +32,7 @@ T_TEST_OUTPUT(example,
/*
* SPDX-License-Identifier: BSD-2-Clause OR CC-BY-SA-4.0
*
- * Copyright (C) 2018, 2019 embedded brains GmbH
+ * Copyright (C) 2018, 2019 embedded brains GmbH & Co. KG
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
diff --git a/testsuites/libtests/ttest01/test-fixture.c b/testsuites/libtests/ttest01/test-fixture.c
index e1f59876ca..3cc0f64d63 100644
--- a/testsuites/libtests/ttest01/test-fixture.c
+++ b/testsuites/libtests/ttest01/test-fixture.c
@@ -185,7 +185,7 @@ T_TEST_OUTPUT(fixture,
/*
* SPDX-License-Identifier: BSD-2-Clause OR CC-BY-SA-4.0
*
- * Copyright (C) 2018, 2020 embedded brains GmbH
+ * Copyright (C) 2018, 2020 embedded brains GmbH & Co. KG
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
diff --git a/testsuites/libtests/ttest01/test-leak.c b/testsuites/libtests/ttest01/test-leak.c
index 923ad1989c..c63ef0cd48 100644
--- a/testsuites/libtests/ttest01/test-leak.c
+++ b/testsuites/libtests/ttest01/test-leak.c
@@ -215,7 +215,7 @@ T_TEST_OUTPUT(missing_key_delete,
/*
* SPDX-License-Identifier: BSD-2-Clause OR CC-BY-SA-4.0
*
- * Copyright (C) 2018, 2019 embedded brains GmbH
+ * Copyright (C) 2018, 2019 embedded brains GmbH & Co. KG
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
diff --git a/testsuites/libtests/ttest01/test-log.c b/testsuites/libtests/ttest01/test-log.c
index bf1b822c0e..38573f2f6b 100644
--- a/testsuites/libtests/ttest01/test-log.c
+++ b/testsuites/libtests/ttest01/test-log.c
@@ -23,7 +23,7 @@ T_TEST_OUTPUT(log,
/*
* SPDX-License-Identifier: BSD-2-Clause OR CC-BY-SA-4.0
*
- * Copyright (C) 2018, 2019 embedded brains GmbH
+ * Copyright (C) 2018, 2019 embedded brains GmbH & Co. KG
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
diff --git a/testsuites/libtests/ttest01/test-malloc.c b/testsuites/libtests/ttest01/test-malloc.c
index 14066ddf7b..ffaa4c6682 100644
--- a/testsuites/libtests/ttest01/test-malloc.c
+++ b/testsuites/libtests/ttest01/test-malloc.c
@@ -93,7 +93,7 @@ T_TEST_OUTPUT(calloc_auto,
/*
* SPDX-License-Identifier: BSD-2-Clause OR CC-BY-SA-4.0
*
- * Copyright (C) 2018, 2019 embedded brains GmbH
+ * Copyright (C) 2018, 2019 embedded brains GmbH & Co. KG
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
diff --git a/testsuites/libtests/ttest01/test-plan.c b/testsuites/libtests/ttest01/test-plan.c
index d7632b8590..0b8ccd4477 100644
--- a/testsuites/libtests/ttest01/test-plan.c
+++ b/testsuites/libtests/ttest01/test-plan.c
@@ -95,7 +95,7 @@ T_TEST_OUTPUT(nested_plan,
/*
* SPDX-License-Identifier: BSD-2-Clause OR CC-BY-SA-4.0
*
- * Copyright (C) 2018, 2019 embedded brains GmbH
+ * Copyright (C) 2018, 2019 embedded brains GmbH & Co. KG
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
diff --git a/testsuites/libtests/ttest01/test-psx.c b/testsuites/libtests/ttest01/test-psx.c
index b43fd96846..9b82543c26 100644
--- a/testsuites/libtests/ttest01/test-psx.c
+++ b/testsuites/libtests/ttest01/test-psx.c
@@ -72,7 +72,7 @@ T_TEST_OUTPUT(test_psx_success,
/*
* SPDX-License-Identifier: BSD-2-Clause OR CC-BY-SA-4.0
*
- * Copyright (C) 2018, 2019 embedded brains GmbH
+ * Copyright (C) 2018, 2019 embedded brains GmbH & Co. KG
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
diff --git a/testsuites/libtests/ttest01/test-rtems.c b/testsuites/libtests/ttest01/test-rtems.c
index 1f94b7318c..a44323886e 100644
--- a/testsuites/libtests/ttest01/test-rtems.c
+++ b/testsuites/libtests/ttest01/test-rtems.c
@@ -111,7 +111,7 @@ T_TEST_OUTPUT(rsc_success,
/*
* SPDX-License-Identifier: BSD-2-Clause OR CC-BY-SA-4.0
*
- * Copyright (C) 2018, 2019 embedded brains GmbH
+ * Copyright (C) 2018, 2019 embedded brains GmbH & Co. KG
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
diff --git a/testsuites/libtests/ttest01/test-simple.c b/testsuites/libtests/ttest01/test-simple.c
index f98e3a1dfa..7732d2f937 100644
--- a/testsuites/libtests/ttest01/test-simple.c
+++ b/testsuites/libtests/ttest01/test-simple.c
@@ -31,7 +31,7 @@ T_TEST_OUTPUT(a_test_case,
/*
* SPDX-License-Identifier: BSD-2-Clause OR CC-BY-SA-4.0
*
- * Copyright (C) 2018, 2019 embedded brains GmbH
+ * Copyright (C) 2018, 2019 embedded brains GmbH & Co. KG
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
diff --git a/testsuites/libtests/ttest01/test-step.c b/testsuites/libtests/ttest01/test-step.c
index 6d5ee9f7ab..38d0cb6518 100644
--- a/testsuites/libtests/ttest01/test-step.c
+++ b/testsuites/libtests/ttest01/test-step.c
@@ -23,7 +23,7 @@ T_TEST_OUTPUT(step,
/*
* SPDX-License-Identifier: BSD-2-Clause OR CC-BY-SA-4.0
*
- * Copyright (C) 2018, 2019 embedded brains GmbH
+ * Copyright (C) 2018, 2019 embedded brains GmbH & Co. KG
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
diff --git a/testsuites/libtests/ttest01/test-task-context.c b/testsuites/libtests/ttest01/test-task-context.c
index 56139f9474..884e3e3d34 100644
--- a/testsuites/libtests/ttest01/test-task-context.c
+++ b/testsuites/libtests/ttest01/test-task-context.c
@@ -23,7 +23,7 @@ T_TEST_OUTPUT(check_task_context,
/*
* SPDX-License-Identifier: BSD-2-Clause OR CC-BY-SA-4.0
*
- * Copyright (C) 2019 embedded brains GmbH
+ * Copyright (C) 2019 embedded brains GmbH & Co. KG
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
diff --git a/testsuites/libtests/ttest01/test-time.c b/testsuites/libtests/ttest01/test-time.c
index a324290e56..2b5039015b 100644
--- a/testsuites/libtests/ttest01/test-time.c
+++ b/testsuites/libtests/ttest01/test-time.c
@@ -280,7 +280,7 @@ T_TEST_OUTPUT(begin_time,
/*
* SPDX-License-Identifier: BSD-2-Clause OR CC-BY-SA-4.0
*
- * Copyright (C) 2018, 2019 embedded brains GmbH
+ * Copyright (C) 2018, 2019 embedded brains GmbH & Co. KG
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
diff --git a/testsuites/libtests/ttest01/test-verbosity.c b/testsuites/libtests/ttest01/test-verbosity.c
index 486969c85c..fc54724ce1 100644
--- a/testsuites/libtests/ttest01/test-verbosity.c
+++ b/testsuites/libtests/ttest01/test-verbosity.c
@@ -34,7 +34,7 @@ T_TEST_OUTPUT(verbosity_changes,
/*
* SPDX-License-Identifier: BSD-2-Clause OR CC-BY-SA-4.0
*
- * Copyright (C) 2018, 2019 embedded brains GmbH
+ * Copyright (C) 2018, 2019 embedded brains GmbH & Co. KG
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
diff --git a/testsuites/libtests/ttest02/init.c b/testsuites/libtests/ttest02/init.c
index 4d540c9a86..881bbedc92 100644
--- a/testsuites/libtests/ttest02/init.c
+++ b/testsuites/libtests/ttest02/init.c
@@ -1,7 +1,7 @@
/* SPDX-License-Identifier: BSD-2-Clause */
/*
- * Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+ * Copyright (C) 2020 embedded brains GmbH & Co. KG
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
diff --git a/testsuites/libtests/utf8proc01/init.c b/testsuites/libtests/utf8proc01/init.c
index 660459ae24..71a8936257 100644
--- a/testsuites/libtests/utf8proc01/init.c
+++ b/testsuites/libtests/utf8proc01/init.c
@@ -1,7 +1,7 @@
/* SPDX-License-Identifier: BSD-2-Clause */
/*
- * Copyright (c) 2012 embedded brains GmbH. All rights reserved.
+ * Copyright (c) 2012 embedded brains GmbH & Co. KG
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
diff --git a/testsuites/mptests/mp01/mp01-node1.doc b/testsuites/mptests/mp01/mp01-node1.doc
index dff9f2f8d2..db4be4808a 100644
--- a/testsuites/mptests/mp01/mp01-node1.doc
+++ b/testsuites/mptests/mp01/mp01-node1.doc
@@ -1,9 +1,28 @@
+# SPDX-License-Identifier: BSD-2-Clause
+
# COPYRIGHT (c) 1989-1999.
# On-Line Applications Research Corporation (OAR).
#
-# The license and distribution terms for this file may be
-# found in the file LICENSE in this distribution or at
-# http://www.rtems.org/license/LICENSE.
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1. Redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+# 2. Redistributions in binary form must reproduce the above copyright
+# notice, this list of conditions and the following disclaimer in the
+# documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+# ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
+# LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+# POSSIBILITY OF SUCH DAMAGE.
#
diff --git a/testsuites/mptests/mp01/mp01-node2.doc b/testsuites/mptests/mp01/mp01-node2.doc
index 981286480f..f56c0e1f4e 100644
--- a/testsuites/mptests/mp01/mp01-node2.doc
+++ b/testsuites/mptests/mp01/mp01-node2.doc
@@ -1,9 +1,28 @@
+# SPDX-License-Identifier: BSD-2-Clause
+
# COPYRIGHT (c) 1989-1999.
# On-Line Applications Research Corporation (OAR).
#
-# The license and distribution terms for this file may be
-# found in the file LICENSE in this distribution or at
-# http://www.rtems.org/license/LICENSE.
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1. Redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+# 2. Redistributions in binary form must reproduce the above copyright
+# notice, this list of conditions and the following disclaimer in the
+# documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+# ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
+# LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+# POSSIBILITY OF SUCH DAMAGE.
#
diff --git a/testsuites/mptests/mp03/mp03-node1.doc b/testsuites/mptests/mp03/mp03-node1.doc
index f2d149e85e..9fed0e2279 100644
--- a/testsuites/mptests/mp03/mp03-node1.doc
+++ b/testsuites/mptests/mp03/mp03-node1.doc
@@ -1,9 +1,28 @@
+# SPDX-License-Identifier: BSD-2-Clause
+
# COPYRIGHT (c) 1989-1999.
# On-Line Applications Research Corporation (OAR).
#
-# The license and distribution terms for this file may be
-# found in the file LICENSE in this distribution or at
-# http://www.rtems.org/license/LICENSE.
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1. Redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+# 2. Redistributions in binary form must reproduce the above copyright
+# notice, this list of conditions and the following disclaimer in the
+# documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+# ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
+# LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+# POSSIBILITY OF SUCH DAMAGE.
#
diff --git a/testsuites/mptests/mp03/mp03-node2.doc b/testsuites/mptests/mp03/mp03-node2.doc
index 981286480f..f56c0e1f4e 100644
--- a/testsuites/mptests/mp03/mp03-node2.doc
+++ b/testsuites/mptests/mp03/mp03-node2.doc
@@ -1,9 +1,28 @@
+# SPDX-License-Identifier: BSD-2-Clause
+
# COPYRIGHT (c) 1989-1999.
# On-Line Applications Research Corporation (OAR).
#
-# The license and distribution terms for this file may be
-# found in the file LICENSE in this distribution or at
-# http://www.rtems.org/license/LICENSE.
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1. Redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+# 2. Redistributions in binary form must reproduce the above copyright
+# notice, this list of conditions and the following disclaimer in the
+# documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+# ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
+# LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+# POSSIBILITY OF SUCH DAMAGE.
#
diff --git a/testsuites/mptests/mp04/mp04-node1.doc b/testsuites/mptests/mp04/mp04-node1.doc
index 4ff3647852..364201823f 100644
--- a/testsuites/mptests/mp04/mp04-node1.doc
+++ b/testsuites/mptests/mp04/mp04-node1.doc
@@ -1,9 +1,28 @@
+# SPDX-License-Identifier: BSD-2-Clause
+
# COPYRIGHT (c) 1989-1999.
# On-Line Applications Research Corporation (OAR).
#
-# The license and distribution terms for this file may be
-# found in the file LICENSE in this distribution or at
-# http://www.rtems.org/license/LICENSE.
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1. Redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+# 2. Redistributions in binary form must reproduce the above copyright
+# notice, this list of conditions and the following disclaimer in the
+# documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+# ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
+# LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+# POSSIBILITY OF SUCH DAMAGE.
#
diff --git a/testsuites/mptests/mp04/mp04-node2.doc b/testsuites/mptests/mp04/mp04-node2.doc
index 981286480f..f56c0e1f4e 100644
--- a/testsuites/mptests/mp04/mp04-node2.doc
+++ b/testsuites/mptests/mp04/mp04-node2.doc
@@ -1,9 +1,28 @@
+# SPDX-License-Identifier: BSD-2-Clause
+
# COPYRIGHT (c) 1989-1999.
# On-Line Applications Research Corporation (OAR).
#
-# The license and distribution terms for this file may be
-# found in the file LICENSE in this distribution or at
-# http://www.rtems.org/license/LICENSE.
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1. Redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+# 2. Redistributions in binary form must reproduce the above copyright
+# notice, this list of conditions and the following disclaimer in the
+# documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+# ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
+# LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+# POSSIBILITY OF SUCH DAMAGE.
#
diff --git a/testsuites/mptests/mp05/mp05-node1.doc b/testsuites/mptests/mp05/mp05-node1.doc
index a9042ada9c..641d1a6f9a 100644
--- a/testsuites/mptests/mp05/mp05-node1.doc
+++ b/testsuites/mptests/mp05/mp05-node1.doc
@@ -1,9 +1,28 @@
+# SPDX-License-Identifier: BSD-2-Clause
+
# COPYRIGHT (c) 1989-1999.
# On-Line Applications Research Corporation (OAR).
#
-# The license and distribution terms for this file may be
-# found in the file LICENSE in this distribution or at
-# http://www.rtems.org/license/LICENSE.
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1. Redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+# 2. Redistributions in binary form must reproduce the above copyright
+# notice, this list of conditions and the following disclaimer in the
+# documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+# ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
+# LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+# POSSIBILITY OF SUCH DAMAGE.
#
diff --git a/testsuites/mptests/mp05/mp05-node2.doc b/testsuites/mptests/mp05/mp05-node2.doc
index 981286480f..f56c0e1f4e 100644
--- a/testsuites/mptests/mp05/mp05-node2.doc
+++ b/testsuites/mptests/mp05/mp05-node2.doc
@@ -1,9 +1,28 @@
+# SPDX-License-Identifier: BSD-2-Clause
+
# COPYRIGHT (c) 1989-1999.
# On-Line Applications Research Corporation (OAR).
#
-# The license and distribution terms for this file may be
-# found in the file LICENSE in this distribution or at
-# http://www.rtems.org/license/LICENSE.
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1. Redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+# 2. Redistributions in binary form must reproduce the above copyright
+# notice, this list of conditions and the following disclaimer in the
+# documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+# ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
+# LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+# POSSIBILITY OF SUCH DAMAGE.
#
diff --git a/testsuites/mptests/mp06/mp06-node1.doc b/testsuites/mptests/mp06/mp06-node1.doc
index 03c278fd33..fb22dc3414 100644
--- a/testsuites/mptests/mp06/mp06-node1.doc
+++ b/testsuites/mptests/mp06/mp06-node1.doc
@@ -1,9 +1,28 @@
+# SPDX-License-Identifier: BSD-2-Clause
+
# COPYRIGHT (c) 1989-1999.
# On-Line Applications Research Corporation (OAR).
#
-# The license and distribution terms for this file may be
-# found in the file LICENSE in this distribution or at
-# http://www.rtems.org/license/LICENSE.
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1. Redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+# 2. Redistributions in binary form must reproduce the above copyright
+# notice, this list of conditions and the following disclaimer in the
+# documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+# ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
+# LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+# POSSIBILITY OF SUCH DAMAGE.
#
diff --git a/testsuites/mptests/mp06/mp06-node2.doc b/testsuites/mptests/mp06/mp06-node2.doc
index 981286480f..f56c0e1f4e 100644
--- a/testsuites/mptests/mp06/mp06-node2.doc
+++ b/testsuites/mptests/mp06/mp06-node2.doc
@@ -1,9 +1,28 @@
+# SPDX-License-Identifier: BSD-2-Clause
+
# COPYRIGHT (c) 1989-1999.
# On-Line Applications Research Corporation (OAR).
#
-# The license and distribution terms for this file may be
-# found in the file LICENSE in this distribution or at
-# http://www.rtems.org/license/LICENSE.
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1. Redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+# 2. Redistributions in binary form must reproduce the above copyright
+# notice, this list of conditions and the following disclaimer in the
+# documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+# ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
+# LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+# POSSIBILITY OF SUCH DAMAGE.
#
diff --git a/testsuites/mptests/mp07/mp07-node1.doc b/testsuites/mptests/mp07/mp07-node1.doc
index c66e75c08c..c44933ce7f 100644
--- a/testsuites/mptests/mp07/mp07-node1.doc
+++ b/testsuites/mptests/mp07/mp07-node1.doc
@@ -1,9 +1,28 @@
+# SPDX-License-Identifier: BSD-2-Clause
+
# COPYRIGHT (c) 1989-1999.
# On-Line Applications Research Corporation (OAR).
#
-# The license and distribution terms for this file may be
-# found in the file LICENSE in this distribution or at
-# http://www.rtems.org/license/LICENSE.
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1. Redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+# 2. Redistributions in binary form must reproduce the above copyright
+# notice, this list of conditions and the following disclaimer in the
+# documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+# ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
+# LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+# POSSIBILITY OF SUCH DAMAGE.
#
diff --git a/testsuites/mptests/mp07/mp07-node2.doc b/testsuites/mptests/mp07/mp07-node2.doc
index 981286480f..f56c0e1f4e 100644
--- a/testsuites/mptests/mp07/mp07-node2.doc
+++ b/testsuites/mptests/mp07/mp07-node2.doc
@@ -1,9 +1,28 @@
+# SPDX-License-Identifier: BSD-2-Clause
+
# COPYRIGHT (c) 1989-1999.
# On-Line Applications Research Corporation (OAR).
#
-# The license and distribution terms for this file may be
-# found in the file LICENSE in this distribution or at
-# http://www.rtems.org/license/LICENSE.
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1. Redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+# 2. Redistributions in binary form must reproduce the above copyright
+# notice, this list of conditions and the following disclaimer in the
+# documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+# ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
+# LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+# POSSIBILITY OF SUCH DAMAGE.
#
diff --git a/testsuites/mptests/mp08/mp08-node1.doc b/testsuites/mptests/mp08/mp08-node1.doc
index f71bc3c1a3..5526bbf7be 100644
--- a/testsuites/mptests/mp08/mp08-node1.doc
+++ b/testsuites/mptests/mp08/mp08-node1.doc
@@ -1,9 +1,28 @@
+# SPDX-License-Identifier: BSD-2-Clause
+
# COPYRIGHT (c) 1989-1999.
# On-Line Applications Research Corporation (OAR).
#
-# The license and distribution terms for this file may be
-# found in the file LICENSE in this distribution or at
-# http://www.rtems.org/license/LICENSE.
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1. Redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+# 2. Redistributions in binary form must reproduce the above copyright
+# notice, this list of conditions and the following disclaimer in the
+# documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+# ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
+# LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+# POSSIBILITY OF SUCH DAMAGE.
#
This file describes the directives and concepts tested by this test set.
diff --git a/testsuites/mptests/mp08/mp08-node2.doc b/testsuites/mptests/mp08/mp08-node2.doc
index 981286480f..f56c0e1f4e 100644
--- a/testsuites/mptests/mp08/mp08-node2.doc
+++ b/testsuites/mptests/mp08/mp08-node2.doc
@@ -1,9 +1,28 @@
+# SPDX-License-Identifier: BSD-2-Clause
+
# COPYRIGHT (c) 1989-1999.
# On-Line Applications Research Corporation (OAR).
#
-# The license and distribution terms for this file may be
-# found in the file LICENSE in this distribution or at
-# http://www.rtems.org/license/LICENSE.
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1. Redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+# 2. Redistributions in binary form must reproduce the above copyright
+# notice, this list of conditions and the following disclaimer in the
+# documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+# ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
+# LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+# POSSIBILITY OF SUCH DAMAGE.
#
diff --git a/testsuites/mptests/mp09/mp09-node1.doc b/testsuites/mptests/mp09/mp09-node1.doc
index fce639b0f8..64a2f65348 100644
--- a/testsuites/mptests/mp09/mp09-node1.doc
+++ b/testsuites/mptests/mp09/mp09-node1.doc
@@ -1,9 +1,28 @@
+# SPDX-License-Identifier: BSD-2-Clause
+
# COPYRIGHT (c) 1989-1999.
# On-Line Applications Research Corporation (OAR).
#
-# The license and distribution terms for this file may be
-# found in the file LICENSE in this distribution or at
-# http://www.rtems.org/license/LICENSE.
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1. Redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+# 2. Redistributions in binary form must reproduce the above copyright
+# notice, this list of conditions and the following disclaimer in the
+# documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+# ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
+# LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+# POSSIBILITY OF SUCH DAMAGE.
#
This file describes the directives and concepts tested by this test set.
diff --git a/testsuites/mptests/mp09/mp09-node2.doc b/testsuites/mptests/mp09/mp09-node2.doc
index 981286480f..f56c0e1f4e 100644
--- a/testsuites/mptests/mp09/mp09-node2.doc
+++ b/testsuites/mptests/mp09/mp09-node2.doc
@@ -1,9 +1,28 @@
+# SPDX-License-Identifier: BSD-2-Clause
+
# COPYRIGHT (c) 1989-1999.
# On-Line Applications Research Corporation (OAR).
#
-# The license and distribution terms for this file may be
-# found in the file LICENSE in this distribution or at
-# http://www.rtems.org/license/LICENSE.
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1. Redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+# 2. Redistributions in binary form must reproduce the above copyright
+# notice, this list of conditions and the following disclaimer in the
+# documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+# ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
+# LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+# POSSIBILITY OF SUCH DAMAGE.
#
diff --git a/testsuites/mptests/mp10/mp10-node1.doc b/testsuites/mptests/mp10/mp10-node1.doc
index fc926b0519..651a6a3c9b 100644
--- a/testsuites/mptests/mp10/mp10-node1.doc
+++ b/testsuites/mptests/mp10/mp10-node1.doc
@@ -1,9 +1,28 @@
+# SPDX-License-Identifier: BSD-2-Clause
+
# COPYRIGHT (c) 1989-1999.
# On-Line Applications Research Corporation (OAR).
#
-# The license and distribution terms for this file may be
-# found in the file LICENSE in this distribution or at
-# http://www.rtems.org/license/LICENSE.
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1. Redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+# 2. Redistributions in binary form must reproduce the above copyright
+# notice, this list of conditions and the following disclaimer in the
+# documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+# ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
+# LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+# POSSIBILITY OF SUCH DAMAGE.
#
This file describes the directives and concepts tested by this test set.
diff --git a/testsuites/mptests/mp10/mp10-node2.doc b/testsuites/mptests/mp10/mp10-node2.doc
index 981286480f..f56c0e1f4e 100644
--- a/testsuites/mptests/mp10/mp10-node2.doc
+++ b/testsuites/mptests/mp10/mp10-node2.doc
@@ -1,9 +1,28 @@
+# SPDX-License-Identifier: BSD-2-Clause
+
# COPYRIGHT (c) 1989-1999.
# On-Line Applications Research Corporation (OAR).
#
-# The license and distribution terms for this file may be
-# found in the file LICENSE in this distribution or at
-# http://www.rtems.org/license/LICENSE.
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1. Redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+# 2. Redistributions in binary form must reproduce the above copyright
+# notice, this list of conditions and the following disclaimer in the
+# documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+# ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
+# LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+# POSSIBILITY OF SUCH DAMAGE.
#
diff --git a/testsuites/mptests/mp11/mp11-node1.doc b/testsuites/mptests/mp11/mp11-node1.doc
index 0722980766..bb1ab37981 100644
--- a/testsuites/mptests/mp11/mp11-node1.doc
+++ b/testsuites/mptests/mp11/mp11-node1.doc
@@ -1,9 +1,28 @@
+# SPDX-License-Identifier: BSD-2-Clause
+
# COPYRIGHT (c) 1989-1999.
# On-Line Applications Research Corporation (OAR).
#
-# The license and distribution terms for this file may be
-# found in the file LICENSE in this distribution or at
-# http://www.rtems.org/license/LICENSE.
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1. Redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+# 2. Redistributions in binary form must reproduce the above copyright
+# notice, this list of conditions and the following disclaimer in the
+# documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+# ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
+# LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+# POSSIBILITY OF SUCH DAMAGE.
#
This file describes the directives and concepts tested by this test set.
diff --git a/testsuites/mptests/mp11/mp11-node2.doc b/testsuites/mptests/mp11/mp11-node2.doc
index 981286480f..f56c0e1f4e 100644
--- a/testsuites/mptests/mp11/mp11-node2.doc
+++ b/testsuites/mptests/mp11/mp11-node2.doc
@@ -1,9 +1,28 @@
+# SPDX-License-Identifier: BSD-2-Clause
+
# COPYRIGHT (c) 1989-1999.
# On-Line Applications Research Corporation (OAR).
#
-# The license and distribution terms for this file may be
-# found in the file LICENSE in this distribution or at
-# http://www.rtems.org/license/LICENSE.
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1. Redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+# 2. Redistributions in binary form must reproduce the above copyright
+# notice, this list of conditions and the following disclaimer in the
+# documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+# ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
+# LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+# POSSIBILITY OF SUCH DAMAGE.
#
diff --git a/testsuites/mptests/mp12/mp12-node1.doc b/testsuites/mptests/mp12/mp12-node1.doc
index e655bfdff8..9b3fbf8273 100644
--- a/testsuites/mptests/mp12/mp12-node1.doc
+++ b/testsuites/mptests/mp12/mp12-node1.doc
@@ -1,9 +1,28 @@
+# SPDX-License-Identifier: BSD-2-Clause
+
# COPYRIGHT (c) 1989-1999.
# On-Line Applications Research Corporation (OAR).
#
-# The license and distribution terms for this file may be
-# found in the file LICENSE in this distribution or at
-# http://www.rtems.org/license/LICENSE.
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1. Redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+# 2. Redistributions in binary form must reproduce the above copyright
+# notice, this list of conditions and the following disclaimer in the
+# documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+# ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
+# LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+# POSSIBILITY OF SUCH DAMAGE.
#
This file describes the directives and concepts tested by this test set.
diff --git a/testsuites/mptests/mp12/mp12-node2.doc b/testsuites/mptests/mp12/mp12-node2.doc
index 981286480f..f56c0e1f4e 100644
--- a/testsuites/mptests/mp12/mp12-node2.doc
+++ b/testsuites/mptests/mp12/mp12-node2.doc
@@ -1,9 +1,28 @@
+# SPDX-License-Identifier: BSD-2-Clause
+
# COPYRIGHT (c) 1989-1999.
# On-Line Applications Research Corporation (OAR).
#
-# The license and distribution terms for this file may be
-# found in the file LICENSE in this distribution or at
-# http://www.rtems.org/license/LICENSE.
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1. Redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+# 2. Redistributions in binary form must reproduce the above copyright
+# notice, this list of conditions and the following disclaimer in the
+# documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+# ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
+# LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+# POSSIBILITY OF SUCH DAMAGE.
#
diff --git a/testsuites/mptests/mp13/mp13-node1.doc b/testsuites/mptests/mp13/mp13-node1.doc
index 2033d6e8b9..9bddb0bdcc 100644
--- a/testsuites/mptests/mp13/mp13-node1.doc
+++ b/testsuites/mptests/mp13/mp13-node1.doc
@@ -1,9 +1,28 @@
+# SPDX-License-Identifier: BSD-2-Clause
+
# COPYRIGHT (c) 1989-1999.
# On-Line Applications Research Corporation (OAR).
#
-# The license and distribution terms for this file may be
-# found in the file LICENSE in this distribution or at
-# http://www.rtems.org/license/LICENSE.
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1. Redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+# 2. Redistributions in binary form must reproduce the above copyright
+# notice, this list of conditions and the following disclaimer in the
+# documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+# ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
+# LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+# POSSIBILITY OF SUCH DAMAGE.
#
This file describes the directives and concepts tested by this test set.
diff --git a/testsuites/mptests/mp13/mp13-node2.doc b/testsuites/mptests/mp13/mp13-node2.doc
index 981286480f..f56c0e1f4e 100644
--- a/testsuites/mptests/mp13/mp13-node2.doc
+++ b/testsuites/mptests/mp13/mp13-node2.doc
@@ -1,9 +1,28 @@
+# SPDX-License-Identifier: BSD-2-Clause
+
# COPYRIGHT (c) 1989-1999.
# On-Line Applications Research Corporation (OAR).
#
-# The license and distribution terms for this file may be
-# found in the file LICENSE in this distribution or at
-# http://www.rtems.org/license/LICENSE.
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1. Redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+# 2. Redistributions in binary form must reproduce the above copyright
+# notice, this list of conditions and the following disclaimer in the
+# documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+# ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
+# LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+# POSSIBILITY OF SUCH DAMAGE.
#
diff --git a/testsuites/mptests/mp14/mp14-node1.doc b/testsuites/mptests/mp14/mp14-node1.doc
index 3a9e7c6c4e..f743ca03f1 100644
--- a/testsuites/mptests/mp14/mp14-node1.doc
+++ b/testsuites/mptests/mp14/mp14-node1.doc
@@ -1,9 +1,28 @@
+# SPDX-License-Identifier: BSD-2-Clause
+
# COPYRIGHT (c) 1989-1999.
# On-Line Applications Research Corporation (OAR).
#
-# The license and distribution terms for this file may be
-# found in the file LICENSE in this distribution or at
-# http://www.rtems.org/license/LICENSE.
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1. Redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+# 2. Redistributions in binary form must reproduce the above copyright
+# notice, this list of conditions and the following disclaimer in the
+# documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+# ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
+# LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+# POSSIBILITY OF SUCH DAMAGE.
#
diff --git a/testsuites/mptests/mp14/mp14-node2.doc b/testsuites/mptests/mp14/mp14-node2.doc
index 981286480f..f56c0e1f4e 100644
--- a/testsuites/mptests/mp14/mp14-node2.doc
+++ b/testsuites/mptests/mp14/mp14-node2.doc
@@ -1,9 +1,28 @@
+# SPDX-License-Identifier: BSD-2-Clause
+
# COPYRIGHT (c) 1989-1999.
# On-Line Applications Research Corporation (OAR).
#
-# The license and distribution terms for this file may be
-# found in the file LICENSE in this distribution or at
-# http://www.rtems.org/license/LICENSE.
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1. Redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+# 2. Redistributions in binary form must reproduce the above copyright
+# notice, this list of conditions and the following disclaimer in the
+# documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+# ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
+# LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+# POSSIBILITY OF SUCH DAMAGE.
#
diff --git a/testsuites/psxtests/psx08/init.c b/testsuites/psxtests/psx08/init.c
index b4b22a5338..3af6f83d7f 100644
--- a/testsuites/psxtests/psx08/init.c
+++ b/testsuites/psxtests/psx08/init.c
@@ -4,6 +4,8 @@
* COPYRIGHT (c) 1989-2009.
* On-Line Applications Research Corporation (OAR).
*
+ * Copyright (C) 2022 embedded brains GmbH & Co. KG
+ *
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
@@ -36,6 +38,119 @@
const char rtems_test_name[] = "PSX 8";
+static void *async_join_thread( void *arg )
+{
+ pthread_t *th;
+ int eno;
+ int type;
+
+ th = arg;
+
+ type = PTHREAD_CANCEL_ASYNCHRONOUS;
+ eno = pthread_setcanceltype( type, &type );
+ rtems_test_assert( eno == 0 );
+ rtems_test_assert( type == PTHREAD_CANCEL_DEFERRED );
+
+ (void) pthread_join( *th, NULL );
+ rtems_test_assert( 0 );
+}
+
+static void test_join_deadlock( void )
+{
+ pthread_t td;
+ pthread_t self;
+ int eno;
+ void *value;
+
+ self = pthread_self();
+
+ eno = pthread_create( &td, NULL, async_join_thread, &self );
+ rtems_test_assert( eno == 0 );
+
+ sched_yield();
+
+ eno = pthread_join( td, NULL );
+ rtems_test_assert( eno == EDEADLK );
+
+ eno = pthread_cancel( td );
+ rtems_test_assert( eno == 0 );
+
+ value = NULL;
+ eno = pthread_join( td, &value );
+ rtems_test_assert( eno == 0 );
+ rtems_test_assert( value == PTHREAD_CANCELED );
+}
+
+typedef struct {
+ pthread_t protected_join;
+ pthread_t deleter;
+ rtems_status_code delete_status;
+} delete_deadlock_context;
+
+static void *protected_join_thread( void *arg )
+{
+ delete_deadlock_context *ctx;
+ int state;
+ int eno;
+ void *value;
+
+ ctx = arg;
+
+ state = PTHREAD_CANCEL_DISABLE;
+ eno = pthread_setcancelstate( state, &state );
+ rtems_test_assert( eno == 0 );
+ rtems_test_assert( state == PTHREAD_CANCEL_ENABLE );
+
+ value = NULL;
+ eno = pthread_join( ctx->deleter, &value );
+ rtems_test_assert( eno == 0 );
+ rtems_test_assert( value == &ctx->deleter );
+
+ state = PTHREAD_CANCEL_ENABLE;
+ eno = pthread_setcancelstate( state, &state );
+ rtems_test_assert( eno == 0 );
+ rtems_test_assert( state == PTHREAD_CANCEL_DISABLE );
+
+ pthread_testcancel();
+ rtems_test_assert( 0 );
+}
+
+static void *deleter_thread( void *arg )
+{
+ delete_deadlock_context *ctx;
+
+ ctx = arg;
+ ctx->delete_status = rtems_task_delete( ctx->protected_join );
+ return &ctx->deleter;
+}
+
+static void test_delete_deadlock( void )
+{
+ delete_deadlock_context ctx;
+ int eno;
+ void *value;
+
+ ctx.delete_status = RTEMS_NOT_IMPLEMENTED;
+
+ eno = pthread_create(
+ &ctx.protected_join,
+ NULL,
+ protected_join_thread,
+ &ctx
+ );
+ rtems_test_assert( eno == 0 );
+
+ eno = pthread_create( &ctx.deleter, NULL, deleter_thread, &ctx );
+ rtems_test_assert( eno == 0 );
+
+ value = NULL;
+ eno = pthread_join( ctx.protected_join, &value );
+ rtems_test_assert( eno == 0 );
+ rtems_test_assert( value == PTHREAD_CANCELED );
+
+ rtems_test_assert( ctx.delete_status == RTEMS_INCORRECT_STATE );
+}
+
void *POSIX_Init(
void *argument
)
@@ -54,6 +169,9 @@ void *POSIX_Init(
Init_id = pthread_self();
printf( "Init's ID is 0x%08" PRIxpthread_t "\n", Init_id );
+ test_join_deadlock();
+ test_delete_deadlock();
+
puts( "Init: pthread_detach - ESRCH (invalid id)" );
status = pthread_detach( (pthread_t) -1 );
rtems_test_assert( status == ESRCH );
diff --git a/testsuites/psxtests/psx12/init.c b/testsuites/psxtests/psx12/init.c
index 76737b0c3b..6526805313 100644
--- a/testsuites/psxtests/psx12/init.c
+++ b/testsuites/psxtests/psx12/init.c
@@ -226,6 +226,8 @@ static void *POSIX_Init( void *argument )
puts( "Init: pthread_create - SUCCESSFUL" );
+ pthread_setschedprio( pthread_self(), SS_PRIO_LOW );
+
/* Align with clock tick */
sleep( 1 );
diff --git a/testsuites/psxtests/psx13/test.c b/testsuites/psxtests/psx13/test.c
index 0754dbcf30..951953ae98 100644
--- a/testsuites/psxtests/psx13/test.c
+++ b/testsuites/psxtests/psx13/test.c
@@ -639,6 +639,8 @@ static void FutimensTest( void )
/* EBADF test case */
/* Case: Pass an invalid file descriptor */
+ _Timespec_Set_to_zero( &time[0] );
+ _Timespec_Set_to_zero( &time[1] );
rv = futimens( -1, time );
rtems_test_assert( rv == -1 );
rtems_test_assert( errno == EBADF );
diff --git a/testsuites/psxtests/psx15/init.c b/testsuites/psxtests/psx15/init.c
index e6ade823f7..fff3db01c3 100644
--- a/testsuites/psxtests/psx15/init.c
+++ b/testsuites/psxtests/psx15/init.c
@@ -1,7 +1,7 @@
/* SPDX-License-Identifier: BSD-2-Clause */
/*
- * Copyright (c) 2010 embedded brains GmbH. All rights reserved.
+ * Copyright (c) 2010 embedded brains GmbH & Co. KG
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
diff --git a/testsuites/psxtests/psxbarrier01/test.c b/testsuites/psxtests/psxbarrier01/test.c
index 3bea278aac..1f3bdb138c 100644
--- a/testsuites/psxtests/psxbarrier01/test.c
+++ b/testsuites/psxtests/psxbarrier01/test.c
@@ -6,7 +6,7 @@
* COPYRIGHT (c) 1989-2009.
* On-Line Applications Research Corporation (OAR).
*
- * Copyright (c) 2017 embedded brains GmbH
+ * Copyright (c) 2017 embedded brains GmbH & Co. KG
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
diff --git a/testsuites/psxtests/psxchroot01/test.c b/testsuites/psxtests/psxchroot01/test.c
index 8270bf5b58..7ac6a80d56 100644
--- a/testsuites/psxtests/psxchroot01/test.c
+++ b/testsuites/psxtests/psxchroot01/test.c
@@ -5,7 +5,7 @@
* On-Line Applications Research Corporation (OAR).
*
* Modifications to support reference counting in the file system are
- * Copyright (c) 2012 embedded brains GmbH.
+ * Copyright (c) 2012 embedded brains GmbH & Co. KG
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
diff --git a/testsuites/psxtests/psxcleanup02/init.c b/testsuites/psxtests/psxcleanup02/init.c
index 89ae7f1930..c123a817ea 100644
--- a/testsuites/psxtests/psxcleanup02/init.c
+++ b/testsuites/psxtests/psxcleanup02/init.c
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2015 embedded brains GmbH. All rights reserved.
+ * Copyright (c) 2015 embedded brains GmbH & Co. KG
*
* The license and distribution terms for this file may be
* found in the file LICENSE in this distribution or at
diff --git a/testsuites/psxtests/psxcleanup02/main.c b/testsuites/psxtests/psxcleanup02/main.c
index 071d84c059..a72c30970a 100644
--- a/testsuites/psxtests/psxcleanup02/main.c
+++ b/testsuites/psxtests/psxcleanup02/main.c
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2015 embedded brains GmbH. All rights reserved.
+ * Copyright (c) 2015 embedded brains GmbH & Co. KG
*
* The license and distribution terms for this file may be
* found in the file LICENSE in this distribution or at
diff --git a/testsuites/psxtests/psxclock/init.c b/testsuites/psxtests/psxclock/init.c
index 2300056f61..eb2f1d130c 100644
--- a/testsuites/psxtests/psxclock/init.c
+++ b/testsuites/psxtests/psxclock/init.c
@@ -50,6 +50,174 @@ static void check_enosys(int status)
rtems_test_exit(0);
}
+static void wait_ticks( rtems_interval ticks )
+{
+ /*
+ * Avoid any clock related sleep calls
+ */
+ rtems_test_assert( rtems_task_wake_after( ticks ) == RTEMS_SUCCESSFUL );
+}
+
+struct clock_context;
+typedef struct clock_context clock_context;
+typedef void (*clock_sleeper)(clock_context* ctx);
+struct clock_context {
+ const char* name;
+ int instance;
+ rtems_id tid;
+ int counter;
+ int result;
+ rtems_interval ticks;
+ struct timespec tspec;
+ clock_sleeper sleeper;
+};
+
+static void clock_context_init(
+ clock_context* ctx, const char* name, int instance,
+ time_t secs, long nsecs, clock_sleeper sleeper)
+{
+ memset( ctx, 0, sizeof( *ctx ) );
+ ctx->name = name;
+ ctx->instance = instance;
+ ctx->tspec.tv_sec = secs;
+ ctx->tspec.tv_nsec = nsecs;
+ ctx->sleeper = sleeper;
+}
+
+static void test_nanosleep( clock_context* ctx )
+{
+ if ( nanosleep ( &ctx->tspec, NULL ) < 0 )
+ {
+ ctx->result = errno;
+ }
+}
+
+static void test_clock_nanosleep_realtime( clock_context* ctx )
+{
+ if ( clock_nanosleep ( CLOCK_REALTIME, 0, &ctx->tspec, NULL ) < 0 )
+ {
+ ctx->result = errno;
+ }
+}
+
+static void test_clock_nanosleep_monotonic( clock_context* ctx )
+{
+ if ( clock_nanosleep ( CLOCK_MONOTONIC, 0, &ctx->tspec, NULL ) < 0 )
+ {
+ ctx->result = errno;
+ }
+}
+
+static void test_clock_check( clock_context* ctx, const rtems_interval ticks_per_sec )
+{
+ const long tick_period_nsec = 1000000000LLU / ticks_per_sec;
+ rtems_interval ticks =
+ (((ctx->tspec.tv_sec * 1000000000LLU) + ctx->tspec.tv_nsec) / tick_period_nsec) + 1;
+ rtems_test_assert( ctx->result == 0 );
+ printf(
+ "clock: %s: sec=%" PRIdtime_t" nsec=%li ticks=%u expected-ticks=%u\n",
+ ctx->name, ctx->tspec.tv_sec, ctx->tspec.tv_nsec, ctx->ticks, ticks);
+ rtems_test_assert( ctx->ticks == ticks );
+}
+
+static void task_clock( rtems_task_argument arg )
+{
+ clock_context* ctx = (clock_context*) arg;
+ rtems_interval start = rtems_clock_get_ticks_since_boot();
+ rtems_interval end;
+ ctx->result = 0;
+ ctx->sleeper( ctx );
+ end = rtems_clock_get_ticks_since_boot();
+ ctx->ticks = end - start;
+ ++ctx->counter;
+ rtems_task_delete( RTEMS_SELF );
+}
+
+static void test_start_task( clock_context* ctx )
+{
+ rtems_status_code sc;
+ sc = rtems_task_create(
+ rtems_build_name( 'C', 'R', 'T', '0' + ctx->instance ),
+ 1,
+ RTEMS_MINIMUM_STACK_SIZE,
+ RTEMS_DEFAULT_MODES,
+ RTEMS_DEFAULT_ATTRIBUTES,
+ &ctx->tid
+ );
+ rtems_test_assert( sc == RTEMS_SUCCESSFUL );
+ sc = rtems_task_start( ctx->tid, task_clock, (rtems_task_argument) ctx );
+ rtems_test_assert( sc == RTEMS_SUCCESSFUL );
+}
+
+static void test_settime_and_sleeping_step( int step )
+{
+ const rtems_interval ticks_per_sec = rtems_clock_get_ticks_per_second();
+ struct timespec tv;
+
+ clock_context ns_ctx;
+ clock_context cnr_ctx;
+ clock_context cnm_ctx;
+
+ printf( "\nClock settime while sleeping: step=%i\n", step );
+
+ clock_context_init(
+ &ns_ctx, "nanosleep", 0, 0, 500000000,
+ test_nanosleep );
+ clock_context_init(
+ &cnr_ctx, "clock_nanosleep(CLOCK_REALTIME)", 0, 0, 500000000,
+ test_clock_nanosleep_realtime );
+ clock_context_init(
+ &cnm_ctx, "clock_nanosleep(CLOCK_MONOTONIC)", 0, 0, 500000000,
+ test_clock_nanosleep_monotonic );
+
+ /* Sat, 01 Jan 2000 00:00:00 GMT */
+ tv.tv_sec = 946684800;
+ tv.tv_nsec = 0;
+ rtems_test_assert( clock_settime( CLOCK_REALTIME, &tv ) == 0 );
+
+ wait_ticks( 1 );
+
+ test_start_task( &ns_ctx );
+ test_start_task( &cnr_ctx );
+ test_start_task( &cnm_ctx );
+
+ wait_ticks( 2 );
+
+ /*
+ * Jump forwards 1 second
+ */
+ if ( step != 0 )
+ {
+ tv.tv_sec = 946684800 + step;
+ tv.tv_nsec = 0;
+ rtems_test_assert( clock_settime( CLOCK_REALTIME, &tv ) == 0 );
+ }
+
+ while (true)
+ {
+ int counts = 0;
+ wait_ticks( ticks_per_sec / 4 );
+ counts += ns_ctx.counter;
+ counts += cnr_ctx.counter;
+ counts += cnm_ctx.counter;
+ if (counts == 3)
+ {
+ break;
+ }
+ }
+
+ test_clock_check( &ns_ctx, ticks_per_sec );
+ test_clock_check( &cnr_ctx, ticks_per_sec );
+ test_clock_check( &cnm_ctx, ticks_per_sec );
+}
+
+static void test_settime_and_sleeping( void )
+{
+ test_settime_and_sleeping_step( 0 );
+ test_settime_and_sleeping_step( 1 );
+ test_settime_and_sleeping_step( -1 );
+}
+
typedef struct {
int counter;
struct timespec delta;
@@ -358,6 +526,8 @@ static rtems_task Init(
}
#endif
+ test_settime_and_sleeping( );
+
TEST_END();
rtems_test_exit(0);
}
@@ -370,7 +540,7 @@ static rtems_task Init(
#define CONFIGURE_INITIAL_EXTENSIONS RTEMS_TEST_INITIAL_EXTENSION
#define CONFIGURE_RTEMS_INIT_TASKS_TABLE
-#define CONFIGURE_MAXIMUM_TASKS 2
+#define CONFIGURE_MAXIMUM_TASKS 4
#define CONFIGURE_INIT
#include <rtems/confdefs.h>
diff --git a/testsuites/psxtests/psxclockrealtime01/init.c b/testsuites/psxtests/psxclockrealtime01/init.c
index 720e7ced52..722a756ebb 100644
--- a/testsuites/psxtests/psxclockrealtime01/init.c
+++ b/testsuites/psxtests/psxclockrealtime01/init.c
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2017 embedded brains GmbH. All rights reserved.
+ * Copyright (c) 2017 embedded brains GmbH & Co. KG
*
* The license and distribution terms for this file may be
* found in the file LICENSE in this distribution or at
diff --git a/testsuites/psxtests/psxconfig01/init.c b/testsuites/psxtests/psxconfig01/init.c
index f1fcfe2b3b..77a96d1c67 100644
--- a/testsuites/psxtests/psxconfig01/init.c
+++ b/testsuites/psxtests/psxconfig01/init.c
@@ -10,7 +10,7 @@
/*
* Copyright (c) 2014. On-Line Applications Research Corporation (OAR).
- * Copyright (c) 2011-2014 embedded brains GmbH. All rights reserved.
+ * Copyright (C) 2011, 2014 embedded brains GmbH & Co. KG
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
@@ -200,7 +200,7 @@ static rtems_task Init(rtems_task_argument argument);
#include <rtems/confdefs.h>
typedef struct RTEMS_ALIGNED(RTEMS_PARTITION_ALIGNMENT) {
- uint64_t data [16];
+ uint64_t data [32];
} area;
#if CONFIGURE_MAXIMUM_PARTITIONS > 0
diff --git a/testsuites/psxtests/psxconfig01/psxconfig01.doc b/testsuites/psxtests/psxconfig01/psxconfig01.doc
index 524c8a9994..d8f70bded3 100644
--- a/testsuites/psxtests/psxconfig01/psxconfig01.doc
+++ b/testsuites/psxtests/psxconfig01/psxconfig01.doc
@@ -1,6 +1,6 @@
# SPDX-License-Identifier: BSD-2-Clause
-# Copyright (c) 2011 embedded brains GmbH.
+# Copyright (c) 2011 embedded brains GmbH & Co. KG
#
# Redistribution and use in source and binary forms, with or without
# modification, are permitted provided that the following conditions
diff --git a/testsuites/psxtests/psxenosys/init.c b/testsuites/psxtests/psxenosys/init.c
index 40f83aa0f0..d9a4d835f7 100644
--- a/testsuites/psxtests/psxenosys/init.c
+++ b/testsuites/psxtests/psxenosys/init.c
@@ -104,9 +104,15 @@ void *POSIX_Init(
sc = fork();
check_enosys( sc );
- puts( "pthread_atfork -- ENOSYS" );
+ /*
+ * The behavior of pthread_atfork() in single process environments was
+ * undefined by POSIX but the fACE Technical Standard required returning
+ * 0. Before ticket #4713, this did return ENOSYS. Just leaving this test
+ * case here for convenience.
+ */
+ puts( "pthread_atfork -- 0" );
sc = pthread_atfork( NULL, NULL, NULL );
- check_enosys( sc );
+ rtems_test_assert( !sc );
puts( "pthread_getcpuclockid -- ENOSYS" );
sc = pthread_getcpuclockid( 0, NULL );
diff --git a/testsuites/psxtests/psxenosys/psxenosys.scn b/testsuites/psxtests/psxenosys/psxenosys.scn
index 1ed64f92e9..9e88acd05a 100644
--- a/testsuites/psxtests/psxenosys/psxenosys.scn
+++ b/testsuites/psxtests/psxenosys/psxenosys.scn
@@ -9,7 +9,7 @@ execv -- ENOSYS
execve -- ENOSYS
execvp -- ENOSYS
fork -- ENOSYS
-pthread_atfork -- ENOSYS
+pthread_atfork -- 0
pthread_getcpuclockid -- ENOSYS
sched_setparam -- ENOSYS
sched_getparam -- ENOSYS
diff --git a/testsuites/psxtests/psxftw01/init.c b/testsuites/psxtests/psxftw01/init.c
index ee0e40c84a..5bd89928d1 100644
--- a/testsuites/psxtests/psxftw01/init.c
+++ b/testsuites/psxtests/psxftw01/init.c
@@ -6,7 +6,7 @@
/*
* SPDX-License-Identifier: BSD-2-Clause
*
- * Copyright (C) 2020 Eshan Dhawan, embedded brains GmbH, Joel Sherrill
+ * Copyright (C) 2020 Eshan Dhawan, embedded brains GmbH & Co. KG
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
@@ -66,36 +66,6 @@ void *POSIX_Init (void * argument);
static char file_traverse_order[6][20];
static int file_order;
-static char buffer[512];
-
-static const T_action actions[] = {
- T_report_hash_sha256,
- T_check_task_context,
- T_check_file_descriptors,
- T_check_rtems_barriers,
- T_check_rtems_extensions,
- T_check_rtems_message_queues,
- T_check_rtems_partitions,
- T_check_rtems_periods,
- T_check_rtems_regions,
- T_check_rtems_semaphores,
- T_check_rtems_tasks,
- T_check_rtems_timers,
- T_check_posix_keys
-};
-
-static const T_config config = {
- .name = "psxftw01",
- .buf = buffer,
- .buf_size = sizeof(buffer),
- .putchar = rtems_put_char,
- .verbosity = T_VERBOSE,
- .now = T_now_clock,
- .action_count = T_ARRAY_SIZE(actions),
- .actions = actions
-};
-
-
static int fn_function (const char *fpath, const struct stat *sb,
int tflag, struct FTW *ftwbuf)
{
@@ -122,9 +92,7 @@ T_TEST_CASE(ftw)
TARFILE_SIZE,
&rtems_test_printer
);
- if (sc != RTEMS_SUCCESSFUL) {
- printf ("error: untar failed: %s\n", rtems_status_text (sc));
- }
+ T_rsc_success( sc );
/* Array with expected file order */
char arr_ftw_depth[5][20] = { "test_file", "test_script", "def", "abc", "home" };
@@ -136,49 +104,31 @@ T_TEST_CASE(ftw)
file_order = 0;
flags |= FTW_DEPTH;
r = nftw( files_path, fn_function, 5, flags );
-
- T_quiet_psx_success(r);
+ T_psx_success( r );
/*comparing the nftw file tree to the expexted file tree traversal */
for (i = 0; i < file_order; i++){
r = strcmp( arr_ftw_depth[i], file_traverse_order[i]);
- if (r){
- printf( "Incorrect Order " );
- }
- T_quiet_psx_success(r);
+ T_eq_int( r, 0 );
}
/*----------------Test Block 2--------------------*/
flags = 0;
file_order = 0;
flags |= FTW_PHYS;
r = nftw( files_path, fn_function, 5, flags );
- T_quiet_psx_success(r);
+ T_psx_success(r);
/*comparing the nftw file tree to the expected file tree traversal*/
for (i = 0; i < file_order; i++){
r = strcmp( arr_ftw_phys[i], file_traverse_order[i]);
- if (r){
- printf( "Incorrect Order " );
- }
- T_quiet_psx_success(r);
+ T_eq_int( r, 0 );
}
}
void *POSIX_Init (void * argument)
{
- int exit_code;
-
- TEST_BEGIN();
-
- T_register();
- exit_code = T_main(&config);
- if (exit_code == 0) {
- TEST_END();
- }
-
- rtems_test_exit(exit_code);
-
+ rtems_test_run( (rtems_task_argument) argument, TEST_STATE );
}
/* NOTICE: the clock driver is explicitly disabled */
diff --git a/testsuites/psxtests/psxglobalcon01/init.cc b/testsuites/psxtests/psxglobalcon01/init.cc
index 2ccbba9e34..a61734bcd1 100644
--- a/testsuites/psxtests/psxglobalcon01/init.cc
+++ b/testsuites/psxtests/psxglobalcon01/init.cc
@@ -1,7 +1,7 @@
/* SPDX-License-Identifier: BSD-2-Clause */
/*
- * Copyright (c) 2014 embedded brains GmbH. All rights reserved.
+ * Copyright (c) 2014 embedded brains GmbH & Co. KG
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
diff --git a/testsuites/psxtests/psxglobalcon02/init.cc b/testsuites/psxtests/psxglobalcon02/init.cc
index 0e530246e0..3d8206261a 100644
--- a/testsuites/psxtests/psxglobalcon02/init.cc
+++ b/testsuites/psxtests/psxglobalcon02/init.cc
@@ -1,7 +1,7 @@
/* SPDX-License-Identifier: BSD-2-Clause */
/*
- * Copyright (c) 2014 embedded brains GmbH. All rights reserved.
+ * Copyright (c) 2014 embedded brains GmbH & Co. KG
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
diff --git a/testsuites/psxtests/psxhdrs/arpa/inet/inet_ntop.c b/testsuites/psxtests/psxhdrs/arpa/inet/inet_ntop.c
index c3e3828b0b..5b64b565cc 100644
--- a/testsuites/psxtests/psxhdrs/arpa/inet/inet_ntop.c
+++ b/testsuites/psxtests/psxhdrs/arpa/inet/inet_ntop.c
@@ -32,7 +32,7 @@ int test(void);
int test(void)
{
int af = 0;
- struct in_addr addr;
+ struct in_addr addr = { 0 };
char *dst = "string";
const char *ret = inet_ntop(af, &addr, dst, sizeof(dst));
diff --git a/testsuites/psxtests/psxhdrs/fcntl/openat.c b/testsuites/psxtests/psxhdrs/fcntl/openat.c
index 927d56774b..1c15cd0867 100644
--- a/testsuites/psxtests/psxhdrs/fcntl/openat.c
+++ b/testsuites/psxtests/psxhdrs/fcntl/openat.c
@@ -5,7 +5,7 @@
/*
* SPDX-License-Identifier: BSD-2-Clause
- *
+ *
* Copyright (C) 2018, Zenon
*
* Redistribution and use in source and binary forms, with or without
@@ -40,7 +40,7 @@ int test(void);
int test(void){
int i0, i1;
- char c;
+ char c = '\0';
i0 = 0;
i1 = 0;
diff --git a/testsuites/psxtests/psxhdrs/netdb/gethostbyaddr.c b/testsuites/psxtests/psxhdrs/netdb/gethostbyaddr.c
index 07d734334b..cd2a271c37 100644
--- a/testsuites/psxtests/psxhdrs/netdb/gethostbyaddr.c
+++ b/testsuites/psxtests/psxhdrs/netdb/gethostbyaddr.c
@@ -43,7 +43,7 @@
int test( void )
{
struct hostent *host;
- struct in_addr ipv4addr;
+ struct in_addr ipv4addr = { 0 };
host = gethostbyaddr( &ipv4addr, sizeof(ipv4addr), AF_INET );
diff --git a/testsuites/psxtests/psxhdrs/pthread/pthread_attr_getdetachstate.c b/testsuites/psxtests/psxhdrs/pthread/pthread_attr_getdetachstate.c
index 9bac990cd3..e2341a582d 100644
--- a/testsuites/psxtests/psxhdrs/pthread/pthread_attr_getdetachstate.c
+++ b/testsuites/psxtests/psxhdrs/pthread/pthread_attr_getdetachstate.c
@@ -42,8 +42,8 @@ int test( void );
int test( void )
{
- pthread_attr_t attribute;
- int state;
+ pthread_attr_t attribute = { 0 };
+ int state = 0;
int result;
result = pthread_attr_getdetachstate( &attribute, &state );
diff --git a/testsuites/psxtests/psxhdrs/pthread/pthread_attr_getguardsize.c b/testsuites/psxtests/psxhdrs/pthread/pthread_attr_getguardsize.c
index 6542efdf13..5a816d2115 100644
--- a/testsuites/psxtests/psxhdrs/pthread/pthread_attr_getguardsize.c
+++ b/testsuites/psxtests/psxhdrs/pthread/pthread_attr_getguardsize.c
@@ -42,8 +42,8 @@ int test( void );
int test( void )
{
- pthread_attr_t attribute;
- size_t size;
+ pthread_attr_t attribute = { 0 };
+ size_t size = 0;
int result;
result = pthread_attr_getguardsize( &attribute, &size );
diff --git a/testsuites/psxtests/psxhdrs/pthread/pthread_attr_getinheritsched.c b/testsuites/psxtests/psxhdrs/pthread/pthread_attr_getinheritsched.c
index a76172908b..86a4547164 100644
--- a/testsuites/psxtests/psxhdrs/pthread/pthread_attr_getinheritsched.c
+++ b/testsuites/psxtests/psxhdrs/pthread/pthread_attr_getinheritsched.c
@@ -42,8 +42,8 @@ int test( void );
int test( void )
{
- pthread_attr_t attr;
- int inheritsched;
+ pthread_attr_t attr = { 0 };
+ int inheritsched = 0;
int result;
result = pthread_attr_getinheritsched( &attr, &inheritsched );
diff --git a/testsuites/psxtests/psxhdrs/pthread/pthread_attr_getschedparam.c b/testsuites/psxtests/psxhdrs/pthread/pthread_attr_getschedparam.c
index cc2dcb0198..743e2c4d21 100644
--- a/testsuites/psxtests/psxhdrs/pthread/pthread_attr_getschedparam.c
+++ b/testsuites/psxtests/psxhdrs/pthread/pthread_attr_getschedparam.c
@@ -42,8 +42,8 @@ int test( void );
int test( void )
{
- pthread_attr_t attr;
- struct sched_param param;
+ pthread_attr_t attr = { 0 };
+ struct sched_param param = { 0 };
int result;
result = pthread_attr_getschedparam( &attr, &param );
diff --git a/testsuites/psxtests/psxhdrs/pthread/pthread_attr_getschedpolicy.c b/testsuites/psxtests/psxhdrs/pthread/pthread_attr_getschedpolicy.c
index a341eeb337..60595d1a7a 100644
--- a/testsuites/psxtests/psxhdrs/pthread/pthread_attr_getschedpolicy.c
+++ b/testsuites/psxtests/psxhdrs/pthread/pthread_attr_getschedpolicy.c
@@ -42,8 +42,8 @@ int test( void );
int test( void )
{
- pthread_attr_t attr;
- int policy;
+ pthread_attr_t attr = { 0 };
+ int policy = 0;
int result;
result = pthread_attr_getschedpolicy( &attr, &policy );
diff --git a/testsuites/psxtests/psxhdrs/pthread/pthread_attr_getscope.c b/testsuites/psxtests/psxhdrs/pthread/pthread_attr_getscope.c
index 7023c29fce..7b97a7859c 100644
--- a/testsuites/psxtests/psxhdrs/pthread/pthread_attr_getscope.c
+++ b/testsuites/psxtests/psxhdrs/pthread/pthread_attr_getscope.c
@@ -42,8 +42,8 @@ int test( void );
int test( void )
{
- pthread_attr_t attr;
- int contentionscope;
+ pthread_attr_t attr = { 0 };
+ int contentionscope = 0;
int result;
result = pthread_attr_getscope( &attr, &contentionscope );
diff --git a/testsuites/psxtests/psxhdrs/pthread/pthread_attr_getstack.c b/testsuites/psxtests/psxhdrs/pthread/pthread_attr_getstack.c
index 177b775baf..f2d8a76362 100644
--- a/testsuites/psxtests/psxhdrs/pthread/pthread_attr_getstack.c
+++ b/testsuites/psxtests/psxhdrs/pthread/pthread_attr_getstack.c
@@ -47,7 +47,7 @@ int test( void );
int test( void )
{
- pthread_attr_t attribute;
+ pthread_attr_t attribute = { 0 };
void *stackaddr;
size_t stacksize;
int result;
diff --git a/testsuites/psxtests/psxhdrs/pthread/pthread_attr_getstackaddr.c b/testsuites/psxtests/psxhdrs/pthread/pthread_attr_getstackaddr.c
index 4e7c17f40a..ed718c76d9 100644
--- a/testsuites/psxtests/psxhdrs/pthread/pthread_attr_getstackaddr.c
+++ b/testsuites/psxtests/psxhdrs/pthread/pthread_attr_getstackaddr.c
@@ -47,7 +47,7 @@ int test( void );
int test( void )
{
- pthread_attr_t attribute;
+ pthread_attr_t attribute = { 0 };
void *stackaddr;
int result;
diff --git a/testsuites/psxtests/psxhdrs/pthread/pthread_attr_getstacksize.c b/testsuites/psxtests/psxhdrs/pthread/pthread_attr_getstacksize.c
index d9f8c4f718..ff9237a8eb 100644
--- a/testsuites/psxtests/psxhdrs/pthread/pthread_attr_getstacksize.c
+++ b/testsuites/psxtests/psxhdrs/pthread/pthread_attr_getstacksize.c
@@ -46,8 +46,8 @@ int test( void );
int test( void )
{
- pthread_attr_t attribute;
- size_t size;
+ pthread_attr_t attribute = { 0 };
+ size_t size = 0;
int result;
result = pthread_attr_getstacksize( &attribute, &size );
diff --git a/testsuites/psxtests/psxhdrs/pthread/pthread_attr_setschedparam.c b/testsuites/psxtests/psxhdrs/pthread/pthread_attr_setschedparam.c
index 70f001fc67..643ccde907 100644
--- a/testsuites/psxtests/psxhdrs/pthread/pthread_attr_setschedparam.c
+++ b/testsuites/psxtests/psxhdrs/pthread/pthread_attr_setschedparam.c
@@ -42,8 +42,8 @@ int test( void );
int test( void )
{
- pthread_attr_t attr;
- struct sched_param param;
+ pthread_attr_t attr = { 0 };
+ struct sched_param param = { 0 };
int result;
result = pthread_attr_setschedparam( &attr, &param );
diff --git a/testsuites/psxtests/psxhdrs/pthread/pthread_cond_init.c b/testsuites/psxtests/psxhdrs/pthread/pthread_cond_init.c
index 86f74d7cff..b7e2e2ad34 100644
--- a/testsuites/psxtests/psxhdrs/pthread/pthread_cond_init.c
+++ b/testsuites/psxtests/psxhdrs/pthread/pthread_cond_init.c
@@ -43,7 +43,7 @@ int test( void );
int test( void )
{
pthread_cond_t cond = PTHREAD_COND_INITIALIZER;
- pthread_condattr_t attribute;
+ pthread_condattr_t attribute = { 0 };
int result;
result = pthread_cond_init( &cond, &attribute );
diff --git a/testsuites/psxtests/psxhdrs/pthread/pthread_cond_timedwait.c b/testsuites/psxtests/psxhdrs/pthread/pthread_cond_timedwait.c
index 1c38af0067..72427266c1 100644
--- a/testsuites/psxtests/psxhdrs/pthread/pthread_cond_timedwait.c
+++ b/testsuites/psxtests/psxhdrs/pthread/pthread_cond_timedwait.c
@@ -44,7 +44,7 @@ int test( void )
{
pthread_cond_t cond = PTHREAD_COND_INITIALIZER;
pthread_mutex_t mutex = PTHREAD_MUTEX_INITIALIZER;
- struct timespec abstime;
+ struct timespec abstime = { 0 };
int result;
result = pthread_cond_timedwait( &cond, &mutex, &abstime );
diff --git a/testsuites/psxtests/psxhdrs/pthread/pthread_condattr_getpshared.c b/testsuites/psxtests/psxhdrs/pthread/pthread_condattr_getpshared.c
index b37f1c00b9..21af201c65 100644
--- a/testsuites/psxtests/psxhdrs/pthread/pthread_condattr_getpshared.c
+++ b/testsuites/psxtests/psxhdrs/pthread/pthread_condattr_getpshared.c
@@ -45,7 +45,7 @@ int test( void );
int test( void )
{
- pthread_condattr_t attribute;
+ pthread_condattr_t attribute = { 0 };
int pshared;
int result;
diff --git a/testsuites/psxtests/psxhdrs/pthread/pthread_create.c b/testsuites/psxtests/psxhdrs/pthread/pthread_create.c
index bde6105933..de4f6b0bec 100644
--- a/testsuites/psxtests/psxhdrs/pthread/pthread_create.c
+++ b/testsuites/psxtests/psxhdrs/pthread/pthread_create.c
@@ -53,7 +53,7 @@ void *test_task(
int test( void )
{
pthread_t thread;
- pthread_attr_t attribute;
+ pthread_attr_t attribute = { 0 };
void *arg = NULL;
int result;
diff --git a/testsuites/psxtests/psxhdrs/pthread/pthread_mutex_getprioceiling.c b/testsuites/psxtests/psxhdrs/pthread/pthread_mutex_getprioceiling.c
index 4f652283df..65b44fa779 100644
--- a/testsuites/psxtests/psxhdrs/pthread/pthread_mutex_getprioceiling.c
+++ b/testsuites/psxtests/psxhdrs/pthread/pthread_mutex_getprioceiling.c
@@ -45,8 +45,8 @@ int test( void );
int test( void )
{
- pthread_mutex_t mutex;
- int prioceiling;
+ pthread_mutex_t mutex = { 0 };
+ int prioceiling = 0;
int result;
result = pthread_mutex_getprioceiling( &mutex, &prioceiling );
diff --git a/testsuites/psxtests/psxhdrs/pthread/pthread_mutex_init.c b/testsuites/psxtests/psxhdrs/pthread/pthread_mutex_init.c
index 085d6f9835..1b42dbc0f3 100644
--- a/testsuites/psxtests/psxhdrs/pthread/pthread_mutex_init.c
+++ b/testsuites/psxtests/psxhdrs/pthread/pthread_mutex_init.c
@@ -43,7 +43,7 @@ int test( void );
int test( void )
{
pthread_mutex_t mutex = PTHREAD_MUTEX_INITIALIZER;
- pthread_mutexattr_t attribute;
+ pthread_mutexattr_t attribute = { 0 };
int result;
result = pthread_mutex_init( &mutex, &attribute );
diff --git a/testsuites/psxtests/psxhdrs/pthread/pthread_mutex_timedlock.c b/testsuites/psxtests/psxhdrs/pthread/pthread_mutex_timedlock.c
index c402d17a57..02f864493d 100644
--- a/testsuites/psxtests/psxhdrs/pthread/pthread_mutex_timedlock.c
+++ b/testsuites/psxtests/psxhdrs/pthread/pthread_mutex_timedlock.c
@@ -46,7 +46,7 @@ int test( void );
int test( void )
{
pthread_mutex_t mutex = PTHREAD_MUTEX_INITIALIZER;
- struct timespec timeout;
+ struct timespec timeout = { 0 };
int result;
result = pthread_mutex_timedlock( &mutex, &timeout );
diff --git a/testsuites/psxtests/psxhdrs/pthread/pthread_mutexattr_getprioceiling.c b/testsuites/psxtests/psxhdrs/pthread/pthread_mutexattr_getprioceiling.c
index a53535881c..675ef02d38 100644
--- a/testsuites/psxtests/psxhdrs/pthread/pthread_mutexattr_getprioceiling.c
+++ b/testsuites/psxtests/psxhdrs/pthread/pthread_mutexattr_getprioceiling.c
@@ -45,7 +45,7 @@ int test( void );
int test( void )
{
- pthread_mutexattr_t attribute;
+ pthread_mutexattr_t attribute = { 0 };
int prioceiling = 0;
int result;
diff --git a/testsuites/psxtests/psxhdrs/pthread/pthread_mutexattr_getprotocol.c b/testsuites/psxtests/psxhdrs/pthread/pthread_mutexattr_getprotocol.c
index 99cd093b17..da16c786b0 100644
--- a/testsuites/psxtests/psxhdrs/pthread/pthread_mutexattr_getprotocol.c
+++ b/testsuites/psxtests/psxhdrs/pthread/pthread_mutexattr_getprotocol.c
@@ -45,8 +45,8 @@ int test( void );
int test( void )
{
- pthread_mutexattr_t attribute;
- int protocol;
+ pthread_mutexattr_t attribute = { 0 };
+ int protocol = 0;
int result;
result = pthread_mutexattr_getprotocol( &attribute, &protocol );
diff --git a/testsuites/psxtests/psxhdrs/pthread/pthread_mutexattr_getpshared.c b/testsuites/psxtests/psxhdrs/pthread/pthread_mutexattr_getpshared.c
index 3735b76b41..d8e8eaabeb 100644
--- a/testsuites/psxtests/psxhdrs/pthread/pthread_mutexattr_getpshared.c
+++ b/testsuites/psxtests/psxhdrs/pthread/pthread_mutexattr_getpshared.c
@@ -45,8 +45,8 @@ int test( void );
int test( void )
{
- pthread_mutexattr_t attribute;
- int pshared;
+ pthread_mutexattr_t attribute = { 0 };
+ int pshared = 0;
int result;
result = pthread_mutexattr_getpshared( &attribute, &pshared );
diff --git a/testsuites/psxtests/psxhdrs/sys/select/pselect.c b/testsuites/psxtests/psxhdrs/sys/select/pselect.c
index d35a0d0921..ad96dda686 100644
--- a/testsuites/psxtests/psxhdrs/sys/select/pselect.c
+++ b/testsuites/psxtests/psxhdrs/sys/select/pselect.c
@@ -45,8 +45,8 @@ int test( void )
fd_set readfds;
fd_set writefds;
fd_set errorfds;
- struct timespec timeout;
- sigset_t sigmask;
+ struct timespec timeout = { 0 };
+ sigset_t sigmask = { 0 };
return_value = pselect(nfds, &readfds, &writefds, &errorfds, &timeout, &sigmask);
return return_value;
diff --git a/testsuites/psxtests/psxhdrs/sys/socket/bind.c b/testsuites/psxtests/psxhdrs/sys/socket/bind.c
index 3da39b31ff..2fa19f2c26 100644
--- a/testsuites/psxtests/psxhdrs/sys/socket/bind.c
+++ b/testsuites/psxtests/psxhdrs/sys/socket/bind.c
@@ -44,7 +44,7 @@ int test(void);
int test(void)
{
int sockfd = 4;
- struct sockaddr addr;
+ struct sockaddr addr = { 0 };
socklen_t addrlen = sizeof(addr);
return bind(sockfd, &addr, addrlen);
diff --git a/testsuites/psxtests/psxhdrs/sys/socket/connect.c b/testsuites/psxtests/psxhdrs/sys/socket/connect.c
index 1b8f5b9001..afb560ff52 100644
--- a/testsuites/psxtests/psxhdrs/sys/socket/connect.c
+++ b/testsuites/psxtests/psxhdrs/sys/socket/connect.c
@@ -43,9 +43,9 @@ int test(void);
int test(void)
{
- int sockfd = 4;
- struct sockaddr addr;
- socklen_t addrlen = sizeof(addr);
+ int sockfd = 4;
+ struct sockaddr addr = { 0 };
+ socklen_t addrlen = sizeof(addr);
return connect(sockfd, &addr, addrlen);
}
diff --git a/testsuites/psxtests/psxhdrs/sys/socket/getsockopt.c b/testsuites/psxtests/psxhdrs/sys/socket/getsockopt.c
index 0ecf27dda5..e0cd442441 100644
--- a/testsuites/psxtests/psxhdrs/sys/socket/getsockopt.c
+++ b/testsuites/psxtests/psxhdrs/sys/socket/getsockopt.c
@@ -48,7 +48,7 @@ int test(void)
int optname = 67;
int value;
void *optval = &value;
- socklen_t optlen;
+ socklen_t optlen = { 0 };
return getsockopt(sockfd, level, optname, optval, &optlen);
}
diff --git a/testsuites/psxtests/psxhdrs/sys/socket/send.c b/testsuites/psxtests/psxhdrs/sys/socket/send.c
index b93a87f482..de2ad3ba5a 100644
--- a/testsuites/psxtests/psxhdrs/sys/socket/send.c
+++ b/testsuites/psxtests/psxhdrs/sys/socket/send.c
@@ -44,7 +44,7 @@ ssize_t test(void);
ssize_t test(void)
{
int sockfd = 4;
- int buffer;
+ int buffer = 0;
void *buf = &buffer;
size_t len = sizeof(buffer);
int flags = 7;
diff --git a/testsuites/psxtests/psxhdrs/sys/socket/sendmsg.c b/testsuites/psxtests/psxhdrs/sys/socket/sendmsg.c
index 3205271572..a14b8ff8d4 100644
--- a/testsuites/psxtests/psxhdrs/sys/socket/sendmsg.c
+++ b/testsuites/psxtests/psxhdrs/sys/socket/sendmsg.c
@@ -44,7 +44,7 @@ ssize_t test(void);
ssize_t test(void)
{
int sockfd = 4;
- struct msghdr msg;
+ struct msghdr msg = { 0 };
int flags = 7;
diff --git a/testsuites/psxtests/psxhdrs/sys/socket/sendto.c b/testsuites/psxtests/psxhdrs/sys/socket/sendto.c
index 298d17f4ec..5050f1a0a5 100644
--- a/testsuites/psxtests/psxhdrs/sys/socket/sendto.c
+++ b/testsuites/psxtests/psxhdrs/sys/socket/sendto.c
@@ -44,11 +44,11 @@ ssize_t test(void);
ssize_t test(void)
{
int sockfd = 4;
- int buffer;
+ int buffer = 0;
const void *buf = &buffer;
size_t len = sizeof(buffer);
int flags = 7;
- struct sockaddr dest_addr;
+ struct sockaddr dest_addr = { 0 };
socklen_t addrlen = sizeof(dest_addr);
return sendto(sockfd, buf, len, flags, &dest_addr, addrlen);
diff --git a/testsuites/psxtests/psxhdrs/sys/socket/setsockopt.c b/testsuites/psxtests/psxhdrs/sys/socket/setsockopt.c
index d373add6de..e4d21d3837 100644
--- a/testsuites/psxtests/psxhdrs/sys/socket/setsockopt.c
+++ b/testsuites/psxtests/psxhdrs/sys/socket/setsockopt.c
@@ -46,7 +46,7 @@ int test(void)
int sockfd = 4;
int level = SOL_SOCKET;
int optname = 67;
- int value;
+ int value = 0;
void *optval = &value;
socklen_t optlen = sizeof(value);
diff --git a/testsuites/psxtests/psxhdrs/sys/stat/futimens.c b/testsuites/psxtests/psxhdrs/sys/stat/futimens.c
index 75fa0ce0e6..9892352b71 100644
--- a/testsuites/psxtests/psxhdrs/sys/stat/futimens.c
+++ b/testsuites/psxtests/psxhdrs/sys/stat/futimens.c
@@ -42,9 +42,9 @@ int test( void )
{
int return_value;
int fd = 1;
- struct timespec times[2];
+ struct timespec times[2] = { 0 };
return_value = futimens(fd, times);
return (return_value != -1);
-} \ No newline at end of file
+}
diff --git a/testsuites/psxtests/psxhdrs/sys/stat/utimensat.c b/testsuites/psxtests/psxhdrs/sys/stat/utimensat.c
index c8c0767ce3..b74cc1a44b 100644
--- a/testsuites/psxtests/psxhdrs/sys/stat/utimensat.c
+++ b/testsuites/psxtests/psxhdrs/sys/stat/utimensat.c
@@ -44,9 +44,9 @@ int test( void )
int return_value;
int fd = 1;
char *path = "/";
- struct timespec times[2];
+ struct timespec times[2] = { 0 };
int flag = AT_SYMLINK_NOFOLLOW;
return_value = utimensat(fd, path, times, flag);
return (return_value != -1);
-} \ No newline at end of file
+}
diff --git a/testsuites/psxtests/psxhdrs/sys/time/utimes.c b/testsuites/psxtests/psxhdrs/sys/time/utimes.c
index ae69eb5ded..bebc7a77b4 100644
--- a/testsuites/psxtests/psxhdrs/sys/time/utimes.c
+++ b/testsuites/psxtests/psxhdrs/sys/time/utimes.c
@@ -5,7 +5,7 @@
/*
* SPDX-License-Identifier: BSD-2-Clause
- *
+ *
* Copyright (C) 2018, Zenon
*
* Redistribution and use in source and binary forms, with or without
@@ -41,8 +41,8 @@ int test(void);
int test(void)
{
int callback;
- struct timeval tv;
-
- callback = utimes(NULL, &tv);
+ struct timeval tv[2] = { 0 };
+
+ callback = utimes(NULL, &tv[0]);
return (callback == -1);
}
diff --git a/testsuites/psxtests/psxhdrs/termios/cfgetispeed.c b/testsuites/psxtests/psxhdrs/termios/cfgetispeed.c
index e98a28179e..0c8d304a71 100644
--- a/testsuites/psxtests/psxhdrs/termios/cfgetispeed.c
+++ b/testsuites/psxtests/psxhdrs/termios/cfgetispeed.c
@@ -40,11 +40,11 @@ int test( void );
int test( void )
{
- struct termios term;
+ struct termios term = { 0 };
speed_t rate;
rate = cfgetispeed(&term);
(void) rate;
return 0;
-} \ No newline at end of file
+}
diff --git a/testsuites/psxtests/psxhdrs/termios/cfgetospeed.c b/testsuites/psxtests/psxhdrs/termios/cfgetospeed.c
index b326a78378..4d2e23ed50 100644
--- a/testsuites/psxtests/psxhdrs/termios/cfgetospeed.c
+++ b/testsuites/psxtests/psxhdrs/termios/cfgetospeed.c
@@ -40,11 +40,11 @@ int test( void );
int test( void )
{
- struct termios term;
+ struct termios term = { 0 };
speed_t rate;
rate = cfgetospeed(&term);
(void) rate;
return 0;
-} \ No newline at end of file
+}
diff --git a/testsuites/psxtests/psxhdrs/termios/cfsetispeed.c b/testsuites/psxtests/psxhdrs/termios/cfsetispeed.c
index b73dbffce1..0f8ddfff57 100644
--- a/testsuites/psxtests/psxhdrs/termios/cfsetispeed.c
+++ b/testsuites/psxtests/psxhdrs/termios/cfsetispeed.c
@@ -41,10 +41,10 @@ int test( void );
int test( void )
{
int result;
- struct termios term;
+ struct termios term = { 0 };
speed_t speed = B0;
result = cfsetispeed(&term, speed);
return result;
-} \ No newline at end of file
+}
diff --git a/testsuites/psxtests/psxhdrs/termios/cfsetospeed.c b/testsuites/psxtests/psxhdrs/termios/cfsetospeed.c
index 8377fc6e26..8d5404c954 100644
--- a/testsuites/psxtests/psxhdrs/termios/cfsetospeed.c
+++ b/testsuites/psxtests/psxhdrs/termios/cfsetospeed.c
@@ -41,10 +41,10 @@ int test( void );
int test( void )
{
int result;
- struct termios term;
+ struct termios term = { 0 };
speed_t speed = B0;
result = cfsetospeed(&term, speed);
return result;
-} \ No newline at end of file
+}
diff --git a/testsuites/psxtests/psxhdrs/termios/tcgetattr.c b/testsuites/psxtests/psxhdrs/termios/tcgetattr.c
index d00336b214..843b7c8281 100644
--- a/testsuites/psxtests/psxhdrs/termios/tcgetattr.c
+++ b/testsuites/psxtests/psxhdrs/termios/tcgetattr.c
@@ -42,9 +42,9 @@ int test( void )
{
int result;
int fildes = 0;
- struct termios term;
+ struct termios term = { 0 };
result = tcgetattr(fildes, &term);
return result;
-} \ No newline at end of file
+}
diff --git a/testsuites/psxtests/psxhdrs/termios/tcsetattr.c b/testsuites/psxtests/psxhdrs/termios/tcsetattr.c
index e2bd6980a9..da0e0ea62d 100644
--- a/testsuites/psxtests/psxhdrs/termios/tcsetattr.c
+++ b/testsuites/psxtests/psxhdrs/termios/tcsetattr.c
@@ -43,9 +43,9 @@ int test( void )
int result;
int fildes = 0;
int optional_actions = 0;
- struct termios term;
+ struct termios term = { 0 };
result = tcsetattr(fildes, optional_actions, &term);
return result;
-} \ No newline at end of file
+}
diff --git a/testsuites/psxtests/psxhdrs/time/asctime.c b/testsuites/psxtests/psxhdrs/time/asctime.c
index c02a543d6b..400dbf5258 100644
--- a/testsuites/psxtests/psxhdrs/time/asctime.c
+++ b/testsuites/psxtests/psxhdrs/time/asctime.c
@@ -42,7 +42,7 @@ int test( void );
int test( void )
{
char *buffer;
- struct tm timestruct;
+ struct tm timestruct = { 0 };
buffer = asctime( &timestruct );
diff --git a/testsuites/psxtests/psxhdrs/time/asctime_r.c b/testsuites/psxtests/psxhdrs/time/asctime_r.c
index 231ea14dfb..c0a22b7d6b 100644
--- a/testsuites/psxtests/psxhdrs/time/asctime_r.c
+++ b/testsuites/psxtests/psxhdrs/time/asctime_r.c
@@ -42,7 +42,7 @@ int test( void );
int test( void )
{
char *buffer_pointer;
- struct tm timestruct;
+ struct tm timestruct = { 0 };
char buffer[ 80 ];
buffer_pointer = asctime_r( &timestruct, buffer );
diff --git a/testsuites/psxtests/psxhdrs/time/clock_settime.c b/testsuites/psxtests/psxhdrs/time/clock_settime.c
index 8a4d88c37f..8584e1c61f 100644
--- a/testsuites/psxtests/psxhdrs/time/clock_settime.c
+++ b/testsuites/psxtests/psxhdrs/time/clock_settime.c
@@ -46,7 +46,7 @@ int test( void );
int test( void )
{
clockid_t clock_id = 0;
- struct timespec tp;
+ struct timespec tp = { 0 };
int result;
result = clock_settime( clock_id, &tp );
diff --git a/testsuites/psxtests/psxhdrs/time/ctime.c b/testsuites/psxtests/psxhdrs/time/ctime.c
index f778e726a9..67dddf21ca 100644
--- a/testsuites/psxtests/psxhdrs/time/ctime.c
+++ b/testsuites/psxtests/psxhdrs/time/ctime.c
@@ -42,7 +42,7 @@ int test( void );
int test( void )
{
char *buffer;
- time_t time;
+ time_t time = { 0 };
buffer = ctime( &time );
diff --git a/testsuites/psxtests/psxhdrs/time/ctime_r.c b/testsuites/psxtests/psxhdrs/time/ctime_r.c
index b973a504ae..30f1285d0a 100644
--- a/testsuites/psxtests/psxhdrs/time/ctime_r.c
+++ b/testsuites/psxtests/psxhdrs/time/ctime_r.c
@@ -43,7 +43,7 @@ int test( void )
{
char *buffer_pointer;
char buffer[ 80 ];
- time_t time;
+ time_t time = { 0 };
buffer_pointer = ctime_r( &time, buffer );
diff --git a/testsuites/psxtests/psxhdrs/time/gmtime.c b/testsuites/psxtests/psxhdrs/time/gmtime.c
index 7118162c84..d7c08726ad 100644
--- a/testsuites/psxtests/psxhdrs/time/gmtime.c
+++ b/testsuites/psxtests/psxhdrs/time/gmtime.c
@@ -41,7 +41,7 @@ int test( void );
int test( void )
{
- time_t time;
+ time_t time = { 0 };
struct tm *timestruct;
timestruct = gmtime( &time );
diff --git a/testsuites/psxtests/psxhdrs/time/gmtime_r.c b/testsuites/psxtests/psxhdrs/time/gmtime_r.c
index 58f6a3212a..128e5107e0 100644
--- a/testsuites/psxtests/psxhdrs/time/gmtime_r.c
+++ b/testsuites/psxtests/psxhdrs/time/gmtime_r.c
@@ -41,7 +41,7 @@ int test( void );
int test( void )
{
- time_t time;
+ time_t time = { 0 };
struct tm *timestruct_pointer;
struct tm timestruct;
diff --git a/testsuites/psxtests/psxhdrs/time/localtime.c b/testsuites/psxtests/psxhdrs/time/localtime.c
index 674d8e43c2..7f1b4e481d 100644
--- a/testsuites/psxtests/psxhdrs/time/localtime.c
+++ b/testsuites/psxtests/psxhdrs/time/localtime.c
@@ -41,7 +41,7 @@ int test( void );
int test( void )
{
- time_t time;
+ time_t time = { 0 };
struct tm *timestruct;
timestruct = localtime( &time );
diff --git a/testsuites/psxtests/psxhdrs/time/localtime_r.c b/testsuites/psxtests/psxhdrs/time/localtime_r.c
index be85af36c5..10338db9fe 100644
--- a/testsuites/psxtests/psxhdrs/time/localtime_r.c
+++ b/testsuites/psxtests/psxhdrs/time/localtime_r.c
@@ -41,7 +41,7 @@ int test( void );
int test( void )
{
- time_t time;
+ time_t time = { 0 };
struct tm *timestruct_pointer;
struct tm timestruct;
diff --git a/testsuites/psxtests/psxhdrs/time/strftime.c b/testsuites/psxtests/psxhdrs/time/strftime.c
index ee27e7b8d4..6b75cdac1e 100644
--- a/testsuites/psxtests/psxhdrs/time/strftime.c
+++ b/testsuites/psxtests/psxhdrs/time/strftime.c
@@ -44,7 +44,7 @@ int test( void )
size_t length;
size_t max_length;
char buffer[ 80 ];
- struct tm timestruct;
+ struct tm timestruct = { 0 };
max_length = sizeof( buffer );
diff --git a/testsuites/psxtests/psxhdrs/unistd/setgroups.c b/testsuites/psxtests/psxhdrs/unistd/setgroups.c
index b40547a5e8..a29cb05978 100644
--- a/testsuites/psxtests/psxhdrs/unistd/setgroups.c
+++ b/testsuites/psxtests/psxhdrs/unistd/setgroups.c
@@ -42,7 +42,7 @@ int test( void );
int test( void )
{
- gid_t grouplist[ 20 ];
+ gid_t grouplist[ 20 ] = { 0 } ;
int gidsetsize;
int result;
diff --git a/testsuites/psxtests/psxhdrs/utime/utime.c b/testsuites/psxtests/psxhdrs/utime/utime.c
index 6236a84637..db619baecc 100644
--- a/testsuites/psxtests/psxhdrs/utime/utime.c
+++ b/testsuites/psxtests/psxhdrs/utime/utime.c
@@ -43,7 +43,7 @@ int test( void );
int test( void )
{
int result;
- const struct utimbuf buff;
+ const struct utimbuf buff = { 0 };
const char *path = "/tmp/myfile";
result = utime(path, &buff);
diff --git a/testsuites/psxtests/psxhdrs/wchar/mbsinit.c b/testsuites/psxtests/psxhdrs/wchar/mbsinit.c
index 21a39ee2ce..5432520f86 100644
--- a/testsuites/psxtests/psxhdrs/wchar/mbsinit.c
+++ b/testsuites/psxtests/psxhdrs/wchar/mbsinit.c
@@ -5,7 +5,7 @@
/*
* SPDX-License-Identifier: BSD-2-Clause
- *
+ *
* Copyright (C) 2018, Zenon
*
* Redistribution and use in source and binary forms, with or without
@@ -40,7 +40,7 @@ int test(void);
int test(void)
{
- const mbstate_t state;
+ const mbstate_t state = { 0 };
return mbsinit(&state);
}
diff --git a/testsuites/psxtests/psxintrcritical01/init.c b/testsuites/psxtests/psxintrcritical01/init.c
index deb95da994..27126e31ec 100644
--- a/testsuites/psxtests/psxintrcritical01/init.c
+++ b/testsuites/psxtests/psxintrcritical01/init.c
@@ -1,7 +1,7 @@
/* SPDX-License-Identifier: BSD-2-Clause */
/*
- * Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+ * Copyright (C) 2020 embedded brains GmbH & Co. KG
*
* COPYRIGHT (c) 1989-2012.
* On-Line Applications Research Corporation (OAR).
diff --git a/testsuites/psxtests/psxkey07/init.c b/testsuites/psxtests/psxkey07/init.c
index d9696a0e28..ff7b3a0bd0 100644
--- a/testsuites/psxtests/psxkey07/init.c
+++ b/testsuites/psxtests/psxkey07/init.c
@@ -39,22 +39,25 @@
const char rtems_test_name[] = "PSXKEY 7";
-/* forward declarations to avoid warnings */
-rtems_task Init(rtems_task_argument argument);
-rtems_task Test_Thread(rtems_task_argument argument);
+#define INITIAL_TASK_COUNT 10
-pthread_key_t Key;
-int created_thread_count, setted_thread_count, got_thread_count;
-int all_thread_created;
-pthread_mutex_t mutex1, mutex2;
-pthread_cond_t create_condition_var, set_condition_var;
+#define ADDITIONAL_TASK_COUNT 13
-rtems_task Test_Thread(rtems_task_argument argument)
+static pthread_key_t Key;
+static int created_thread_count, setted_thread_count, got_thread_count;
+static int all_thread_created;
+static pthread_mutex_t mutex1, mutex2;
+static pthread_cond_t create_condition_var, set_condition_var;
+
+static rtems_task Test_Thread(rtems_task_argument argument)
{
int sc;
int *value_p, *value_p2;
value_p = malloc( sizeof( int ) );
+ rtems_test_assert(value_p != NULL);
+
+ *value_p = 123;
sc = pthread_setspecific( Key, value_p );
rtems_test_assert( !sc );
@@ -78,12 +81,13 @@ rtems_task Test_Thread(rtems_task_argument argument)
rtems_task_exit();
}
-rtems_task Init(rtems_task_argument argument)
+static rtems_task Init(rtems_task_argument argument)
{
rtems_status_code rc;
int sc;
struct timespec delay_request;
- uintptr_t max_free_size = 13 * RTEMS_MINIMUM_STACK_SIZE;
+ uintptr_t max_free_size =
+ ADDITIONAL_TASK_COUNT * RTEMS_MINIMUM_STACK_SIZE;
void *greedy;
all_thread_created = 0;
@@ -119,7 +123,7 @@ rtems_task Init(rtems_task_argument argument)
pthread_mutex_lock( &mutex1 );
rc = rtems_task_create(
- rtems_build_name( 'T', 'E', 'S', 'T' ),
+ rtems_build_name( 'T', 'E', 'S', 'T' ),
1,
RTEMS_MINIMUM_STACK_SIZE,
RTEMS_DEFAULT_MODES,
@@ -214,8 +218,10 @@ rtems_task Init(rtems_task_argument argument)
#define CONFIGURE_INITIAL_EXTENSIONS RTEMS_TEST_INITIAL_EXTENSION
-#define CONFIGURE_MAXIMUM_TASKS rtems_resource_unlimited(10)
-#define CONFIGURE_MAXIMUM_POSIX_KEYS 1
+#define CONFIGURE_MAXIMUM_TASKS rtems_resource_unlimited(INITIAL_TASK_COUNT)
+#define CONFIGURE_MAXIMUM_POSIX_KEYS 1
+#define CONFIGURE_MAXIMUM_POSIX_KEY_VALUE_PAIRS \
+ (INITIAL_TASK_COUNT + ADDITIONAL_TASK_COUNT)
#define CONFIGURE_UNIFIED_WORK_AREAS
#define CONFIGURE_RTEMS_INIT_TASKS_TABLE
diff --git a/testsuites/psxtests/psxkey08/init.c b/testsuites/psxtests/psxkey08/init.c
index 2bd00bc53d..ed0b6e8554 100644
--- a/testsuites/psxtests/psxkey08/init.c
+++ b/testsuites/psxtests/psxkey08/init.c
@@ -51,7 +51,7 @@ static rtems_name name1, name2;
static rtems_task test_task(rtems_task_argument arg)
{
- rtems_status_code sc;
+ rtems_status_code sc = 0;
const void *value_p;
const void *value_p2;
diff --git a/testsuites/psxtests/psxmount/test.c b/testsuites/psxtests/psxmount/test.c
index 9ce68dda59..202baed46c 100644
--- a/testsuites/psxtests/psxmount/test.c
+++ b/testsuites/psxtests/psxmount/test.c
@@ -5,7 +5,7 @@
* On-Line Applications Research Corporation (OAR).
*
* Modifications to support reference counting in the file system are
- * Copyright (c) 2012 embedded brains GmbH.
+ * Copyright (c) 2012 embedded brains GmbH & Co. KG
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
diff --git a/testsuites/psxtests/psxmsgq01/init.c b/testsuites/psxtests/psxmsgq01/init.c
index 3c77beb038..c6b3d92464 100644
--- a/testsuites/psxtests/psxmsgq01/init.c
+++ b/testsuites/psxtests/psxmsgq01/init.c
@@ -1133,7 +1133,7 @@ void verify_with_threads(void)
void validate_mq_setattr(void)
{
- struct mq_attr attr;
+ struct mq_attr attr = { 0 };
struct mq_attr save_attr[ NUMBER_OF_TEST_QUEUES ];
int status;
int i;
diff --git a/testsuites/psxtests/psxonce01/init.c b/testsuites/psxtests/psxonce01/init.c
index dfa0204d62..033b1a02f3 100644
--- a/testsuites/psxtests/psxonce01/init.c
+++ b/testsuites/psxtests/psxonce01/init.c
@@ -1,7 +1,7 @@
/* SPDX-License-Identifier: BSD-2-Clause */
/*
- * Copyright (C) 2019 embedded brains GmbH
+ * Copyright (C) 2019 embedded brains GmbH & Co. KG
* Copyright (C) 2019 Sebastian Huber
*
* COPYRIGHT (c) 1989-2009.
diff --git a/testsuites/psxtests/psxonce01/psxonce01.doc b/testsuites/psxtests/psxonce01/psxonce01.doc
index 7abbd2e037..3ca5d680c7 100644
--- a/testsuites/psxtests/psxonce01/psxonce01.doc
+++ b/testsuites/psxtests/psxonce01/psxonce01.doc
@@ -3,7 +3,7 @@
# COPYRIGHT (c) 1989-2009.
# On-Line Applications Research Corporation (OAR).
# Copyright (c) 2013 Annelies Odermann <annelies.odermann@gmail.com>
-# Copyright (c) 2014 embedded brains GmbH.
+# Copyright (c) 2014 embedded brains GmbH & Co. KG
#
# Redistribution and use in source and binary forms, with or without
# modification, are permitted provided that the following conditions
diff --git a/testsuites/psxtests/psxrwlock01/test.c b/testsuites/psxtests/psxrwlock01/test.c
index 5767aa7c07..f6954007c0 100644
--- a/testsuites/psxtests/psxrwlock01/test.c
+++ b/testsuites/psxtests/psxrwlock01/test.c
@@ -454,10 +454,6 @@ int main(
status = pthread_rwlock_timedrdlock( NULL, &abstime);
rtems_test_assert( status == EINVAL );
- puts( "pthread_rwlock_timedrdlock( &rwlock, NULL) -- EINVAL" );
- status = pthread_rwlock_timedrdlock( &rwlock, NULL);
- rtems_test_assert( status == EINVAL );
-
puts( "pthread_rwlock_tryrdlock(NULL) -- EINVAL" );
status = pthread_rwlock_tryrdlock(NULL);
rtems_test_assert( status == EINVAL );
@@ -470,10 +466,6 @@ int main(
status = pthread_rwlock_timedwrlock( NULL, &abstime );
rtems_test_assert( status == EINVAL );
- puts( "pthread_rwlock_timedwrlock( &rwlock, NULL) -- EINVAL" );
- status = pthread_rwlock_timedwrlock( &rwlock, NULL);
- rtems_test_assert( status == EINVAL );
-
puts( "pthread_rwlock_trywrlock(NULL) -- EINVAL" );
status = pthread_rwlock_trywrlock(NULL);
rtems_test_assert( status == EINVAL );
@@ -482,6 +474,26 @@ int main(
status = pthread_rwlock_unlock(NULL);
rtems_test_assert( status == EINVAL );
+ status = pthread_rwlock_init( &rwlock, NULL );
+ rtems_test_assert( status == 0 );
+
+ status = pthread_rwlock_wrlock( &rwlock );
+ rtems_test_assert( status == 0 );
+
+ puts( "pthread_rwlock_timedrdlock( &rwlock, NULL) -- EINVAL" );
+ status = pthread_rwlock_timedrdlock( &rwlock, NULL);
+ rtems_test_assert( status == EINVAL );
+
+ puts( "pthread_rwlock_timedwrlock( &rwlock, NULL) -- EINVAL" );
+ status = pthread_rwlock_timedwrlock( &rwlock, NULL);
+ rtems_test_assert( status == EINVAL );
+
+ status = pthread_rwlock_unlock( &rwlock );
+ rtems_test_assert( status == 0 );
+
+ status = pthread_rwlock_destroy( &rwlock );
+ rtems_test_assert( status == 0 );
+
/*************** BAD ID CHECK *****************/
/* make a valid abstime */
puts( "clock_gettime(CLOCK_REALTIME, &abstime) -- OK" );
diff --git a/testsuites/psxtests/psxthreadname01/init.c b/testsuites/psxtests/psxthreadname01/init.c
index 3183272ce8..c5d5cef604 100644
--- a/testsuites/psxtests/psxthreadname01/init.c
+++ b/testsuites/psxtests/psxthreadname01/init.c
@@ -1,7 +1,7 @@
/* SPDX-License-Identifier: BSD-2-Clause */
/*
- * Copyright (c) 2017 embedded brains GmbH. All rights reserved.
+ * Copyright (c) 2017 embedded brains GmbH & Co. KG
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
diff --git a/testsuites/psxtests/psxtimer01/psxtimer.c b/testsuites/psxtests/psxtimer01/psxtimer.c
index 560dc2eebd..57d23c1582 100644
--- a/testsuites/psxtests/psxtimer01/psxtimer.c
+++ b/testsuites/psxtests/psxtimer01/psxtimer.c
@@ -1,6 +1,7 @@
/* SPDX-License-Identifier: BSD-2-Clause */
-/*
+/**
+ * @file POSIX Timer Test
*
* This is a simple real-time applications which contains 3 periodic tasks.
*
@@ -12,8 +13,10 @@
*
* The share data is protected with a POSIX mutex.
*
- * Other POSIX facilities such as timers, condition, .. is also used
- *
+ * Other POSIX facilities such as timers, condition, .. are also used.
+ */
+
+/*
* COPYRIGHT (c) 1989-2009.
* On-Line Applications Research Corporation (OAR).
*
diff --git a/testsuites/psxtests/psxtimer02/psxtimer.c b/testsuites/psxtests/psxtimer02/psxtimer.c
index 7da0f7acd1..26d1d5a67c 100644
--- a/testsuites/psxtests/psxtimer02/psxtimer.c
+++ b/testsuites/psxtests/psxtimer02/psxtimer.c
@@ -1,6 +1,7 @@
/* SPDX-License-Identifier: BSD-2-Clause */
-/*
+/**
+ * @file POSIX Timer Test #2
*
* This is a simple real-time applications which contains 3 periodic tasks.
*
@@ -12,8 +13,10 @@
*
* The share data is protected with a POSIX mutex.
*
- * Other POSIX facilities such as timers, condition, .. is also used
- *
+ * Other POSIX facilities such as timers, condition, .. are also used.
+ */
+
+/*
* COPYRIGHT (c) 1989-2009.
* On-Line Applications Research Corporation (OAR).
*
diff --git a/testsuites/psxtests/psxtimer_face01/psxtimer.c b/testsuites/psxtests/psxtimer_face01/psxtimer.c
new file mode 100644
index 0000000000..155afc5ce0
--- /dev/null
+++ b/testsuites/psxtests/psxtimer_face01/psxtimer.c
@@ -0,0 +1,123 @@
+/* SPDX-License-Identifier: BSD-2-Clause */
+
+/**
+ * @file POSIX Timer Test of FACE Behavior
+ */
+
+/*
+ * COPYRIGHT (c) 2022. On-Line Applications Research Corporation (OAR).
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#include <pmacros.h>
+#include "tmacros.h"
+
+#include <unistd.h>
+#include <errno.h>
+#include <sched.h>
+#include <time.h> /* time facilities */
+#include <stdio.h> /* console facilities */
+
+const char rtems_test_name[] = "PSXTIMER FACE 1";
+
+static void *POSIX_Init (
+ void *argument
+)
+
+{
+ struct sigevent event;
+ int status;
+ timer_t timer;
+
+ /*
+ * If these are not filled in correctly, we do not execute pass the
+ * error checking for a NULL event pointer.
+ */
+ event.sigev_notify = SIGEV_SIGNAL;
+ event.sigev_signo = SIGUSR1;
+
+ TEST_BEGIN();
+
+ /*
+ * When FACE timer behavior is configured, creating a POSIX timer
+ * using CLOCK_REALTIME is not allowed.
+ */
+ puts( "timer_create - CLOCK_REALTIME forbidden - EPERM" );
+ status = timer_create( CLOCK_REALTIME, &event, &timer );
+ fatal_posix_service_status_errno( status, EPERM, "not allowed" );
+
+ /*
+ * When FACE timer behavior is configured, creating a POSIX timer
+ * on a value other than CLOCK_REALTIME or CLOCK_MONOTONIC is not allowed.
+ */
+ puts( "timer_create - CLOCK_PROCESS_CPUTIME_ID not allowed - EINVAL" );
+ status = timer_create( CLOCK_PROCESS_CPUTIME_ID, &event, &timer );
+ fatal_posix_service_status_errno( status, EINVAL, "invalid clock" );
+
+ /*
+ * When FACE timer behavior is configured, creating a POSIX timer
+ * on CLOCK_MONOTONIC allowed.
+ */
+ puts( "timer_create - OK" );
+ status = timer_create( CLOCK_MONOTONIC, &event, &timer );
+ posix_service_failed( status, "timer_create OK" );
+
+ /*
+ * Delete the previously created timer.
+ */
+ puts( "timer_delete - OK" );
+ status = timer_delete( timer );
+ posix_service_failed( status, "timer_delete ok" );
+
+ /*
+ */
+ puts( "timer_create - CLOCK_MONOTONIC is allowed - OK" );
+ status = timer_create( CLOCK_MONOTONIC, &event, &timer );
+ posix_service_failed( status, "timer_create ok" );
+
+ TEST_END();
+ rtems_test_exit (0);
+}
+
+/* configuration information */
+
+#define CONFIGURE_APPLICATION_NEEDS_SIMPLE_CONSOLE_DRIVER
+#define CONFIGURE_APPLICATION_NEEDS_CLOCK_DRIVER
+
+#define CONFIGURE_POSIX_INIT_THREAD_TABLE
+
+#define CONFIGURE_INITIAL_EXTENSIONS RTEMS_TEST_INITIAL_EXTENSION
+
+#define CONFIGURE_MAXIMUM_POSIX_THREADS 1
+#define CONFIGURE_MAXIMUM_POSIX_TIMERS 1
+
+#define CONFIGURE_POSIX_TIMERS_FACE_BEHAVIOR
+
+#define CONFIGURE_INIT
+#include <rtems/confdefs.h>
+
+/* end of include file */
diff --git a/testsuites/psxtests/psxtimer_face01/psxtimer_face01.doc b/testsuites/psxtests/psxtimer_face01/psxtimer_face01.doc
new file mode 100644
index 0000000000..e975419539
--- /dev/null
+++ b/testsuites/psxtests/psxtimer_face01/psxtimer_face01.doc
@@ -0,0 +1,49 @@
+# SPDX-License-Identifier: BSD-2-Clause
+
+# COPYRIGHT (c) 1989-2009.
+# On-Line Applications Research Corporation (OAR).
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1. Redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+# 2. Redistributions in binary form must reproduce the above copyright
+# notice, this list of conditions and the following disclaimer in the
+# documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+# ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
+# LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+# POSSIBILITY OF SUCH DAMAGE.
+#
+
+This file describes the directives and concepts tested by this test set.
+
+test set name: psxtimer_face01
+
+directives:
+ timer_create
+ CONFIGURE_POSIX_TIMERS_FACE_BEHAVIOR
+
+concepts:
+
++ This test exercises the CONFIGURE_POSIX_TIMERS_FACE_BEHAVIOR configure
+ option which alters the behavior of timer_create().
+
+ - With CONFIGURE_POSIX_TIMERS_FACE_BEHAVIOR defined, timer_create()
+ returns EPERM to indicate this is not allowed.
+
+ - With CONFIGURE_POSIX_TIMERS_FACE_BEHAVIOR defined, timer_create()
+ for CLOCK_MONOTONIC is allowed.
+
+ - With CONFIGURE_POSIX_TIMERS_FACE_BEHAVIOR defined, timer_create()
+ for any other clock value is an error.
+
diff --git a/testsuites/psxtests/psxtimer_face01/psxtimer_face01.scn b/testsuites/psxtests/psxtimer_face01/psxtimer_face01.scn
new file mode 100644
index 0000000000..b83b41f281
--- /dev/null
+++ b/testsuites/psxtests/psxtimer_face01/psxtimer_face01.scn
@@ -0,0 +1,6 @@
+*** BEGIN OF TEST FACE 1 ***
+timer_create - CLOCK_REALTIME forbidden - EPERM
+timer_create - CLOCK_PROCESS_CPUTIME_ID not allowed - EINVAL
+timer_create - OK
+timer_delete - OK
+*** END OF TEST PSXTIMER FACE 1 ***
diff --git a/testsuites/psxtmtests/psxtmbarrier01/psxtmbarrier01.doc b/testsuites/psxtmtests/psxtmbarrier01/psxtmbarrier01.doc
index 74f74c67d5..9e9fba5e0d 100644
--- a/testsuites/psxtmtests/psxtmbarrier01/psxtmbarrier01.doc
+++ b/testsuites/psxtmtests/psxtmbarrier01/psxtmbarrier01.doc
@@ -1,9 +1,28 @@
+# SPDX-License-Identifier: BSD-2-Clause
+
# COPYRIGHT (c) 1989-2011.
# On-Line Applications Research Corporation (OAR).
#
-# The license and distribution terms for this file may be
-# found in the file LICENSE in this distribution or at
-# http://www.rtems.org/license/LICENSE.
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1. Redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+# 2. Redistributions in binary form must reproduce the above copyright
+# notice, this list of conditions and the following disclaimer in the
+# documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+# ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
+# LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+# POSSIBILITY OF SUCH DAMAGE.
#
This test benchmarks the following operations:
diff --git a/testsuites/psxtmtests/psxtmbarrier02/psxtmbarrier02.doc b/testsuites/psxtmtests/psxtmbarrier02/psxtmbarrier02.doc
index 276f878c8b..4099a21557 100644
--- a/testsuites/psxtmtests/psxtmbarrier02/psxtmbarrier02.doc
+++ b/testsuites/psxtmtests/psxtmbarrier02/psxtmbarrier02.doc
@@ -1,9 +1,28 @@
+# SPDX-License-Identifier: BSD-2-Clause
+
# COPYRIGHT (c) 1989-2011.
# On-Line Applications Research Corporation (OAR).
#
-# The license and distribution terms for this file may be
-# found in the file LICENSE in this distribution or at
-# http://www.rtems.org/license/LICENSE.
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1. Redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+# 2. Redistributions in binary form must reproduce the above copyright
+# notice, this list of conditions and the following disclaimer in the
+# documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+# ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
+# LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+# POSSIBILITY OF SUCH DAMAGE.
#
This test benchmarks the following operations:
diff --git a/testsuites/psxtmtests/psxtmbarrier03/psxtmbarrier03.doc b/testsuites/psxtmtests/psxtmbarrier03/psxtmbarrier03.doc
index 6a5cab0d81..a5f576902d 100644
--- a/testsuites/psxtmtests/psxtmbarrier03/psxtmbarrier03.doc
+++ b/testsuites/psxtmtests/psxtmbarrier03/psxtmbarrier03.doc
@@ -1,9 +1,28 @@
+# SPDX-License-Identifier: BSD-2-Clause
+
# COPYRIGHT (c) 1989-2011.
# On-Line Applications Research Corporation (OAR).
#
-# The license and distribution terms for this file may be
-# found in the file LICENSE in this distribution or at
-# http://www.rtems.org/license/LICENSE.
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1. Redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+# 2. Redistributions in binary form must reproduce the above copyright
+# notice, this list of conditions and the following disclaimer in the
+# documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+# ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
+# LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+# POSSIBILITY OF SUCH DAMAGE.
#
This test benchmarks the following operations:
diff --git a/testsuites/psxtmtests/psxtmbarrier04/psxtmbarrier04.doc b/testsuites/psxtmtests/psxtmbarrier04/psxtmbarrier04.doc
index 767fd36484..bbb75b9af5 100644
--- a/testsuites/psxtmtests/psxtmbarrier04/psxtmbarrier04.doc
+++ b/testsuites/psxtmtests/psxtmbarrier04/psxtmbarrier04.doc
@@ -1,9 +1,28 @@
+# SPDX-License-Identifier: BSD-2-Clause
+
# COPYRIGHT (c) 1989-2012.
# On-Line Applications Research Corporation (OAR).
#
-# The license and distribution terms for this file may be
-# found in the file LICENSE in this distribution or at
-# http://www.rtems.org/license/LICENSE.
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1. Redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+# 2. Redistributions in binary form must reproduce the above copyright
+# notice, this list of conditions and the following disclaimer in the
+# documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+# ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
+# LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+# POSSIBILITY OF SUCH DAMAGE.
#
This test benchmarks the following operations:
diff --git a/testsuites/psxtmtests/psxtmclocknanosleep01/psxtmclocknanosleep01.doc b/testsuites/psxtmtests/psxtmclocknanosleep01/psxtmclocknanosleep01.doc
index 67370cfa36..b228c9b3d4 100644
--- a/testsuites/psxtmtests/psxtmclocknanosleep01/psxtmclocknanosleep01.doc
+++ b/testsuites/psxtmtests/psxtmclocknanosleep01/psxtmclocknanosleep01.doc
@@ -1,8 +1,27 @@
+# SPDX-License-Identifier: BSD-2-Clause
+
# Copyright 2016. Gedare Bloom.
#
-# The license and distribution terms for this file may be
-# found in the file LICENSE in this distribution or at
-# http://www.rtems.org/license/LICENSE.
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1. Redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+# 2. Redistributions in binary form must reproduce the above copyright
+# notice, this list of conditions and the following disclaimer in the
+# documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+# ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
+# LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+# POSSIBILITY OF SUCH DAMAGE.
#
This test benchmarks the following operations:
diff --git a/testsuites/psxtmtests/psxtmclocknanosleep02/psxtmclocknanosleep02.doc b/testsuites/psxtmtests/psxtmclocknanosleep02/psxtmclocknanosleep02.doc
index 4724ae50f3..12f8baf32c 100644
--- a/testsuites/psxtmtests/psxtmclocknanosleep02/psxtmclocknanosleep02.doc
+++ b/testsuites/psxtmtests/psxtmclocknanosleep02/psxtmclocknanosleep02.doc
@@ -1,8 +1,27 @@
+# SPDX-License-Identifier: BSD-2-Clause
+
# Copyright (c) 2016. Gedare Bloom
#
-# The license and distribution terms for this file may be
-# found in the file LICENSE in this distribution or at
-# http://www.rtems.org/license/LICENSE.
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1. Redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+# 2. Redistributions in binary form must reproduce the above copyright
+# notice, this list of conditions and the following disclaimer in the
+# documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+# ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
+# LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+# POSSIBILITY OF SUCH DAMAGE.
#
This test benchmarks the following operations:
diff --git a/testsuites/psxtmtests/psxtmclocknanosleep03/psxtmclocknanosleep03.doc b/testsuites/psxtmtests/psxtmclocknanosleep03/psxtmclocknanosleep03.doc
index 8ea20f6efd..31dcdda21b 100644
--- a/testsuites/psxtmtests/psxtmclocknanosleep03/psxtmclocknanosleep03.doc
+++ b/testsuites/psxtmtests/psxtmclocknanosleep03/psxtmclocknanosleep03.doc
@@ -1,8 +1,27 @@
+# SPDX-License-Identifier: BSD-2-Clause
+
# Copyright (c) 2016. Gedare Bloom
#
-# The license and distribution terms for this file may be
-# found in the file LICENSE in this distribution or at
-# http://www.rtems.org/license/LICENSE.
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1. Redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+# 2. Redistributions in binary form must reproduce the above copyright
+# notice, this list of conditions and the following disclaimer in the
+# documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+# ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
+# LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+# POSSIBILITY OF SUCH DAMAGE.
#
This test benchmarks the following operations:
diff --git a/testsuites/psxtmtests/psxtmcond02/psxtmcond02.doc b/testsuites/psxtmtests/psxtmcond02/psxtmcond02.doc
index 3aab0e7cdd..c3353964b1 100644
--- a/testsuites/psxtmtests/psxtmcond02/psxtmcond02.doc
+++ b/testsuites/psxtmtests/psxtmcond02/psxtmcond02.doc
@@ -1,9 +1,28 @@
+# SPDX-License-Identifier: BSD-2-Clause
+
# COPYRIGHT (c) 2013
# On-Line Applications Research Corporation (OAR).
#
-# The license and distribution terms for this file may be
-# found in the file LICENSE in this distribution or at
-# http://www.rtems.org/license/LICENSE.
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1. Redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+# 2. Redistributions in binary form must reproduce the above copyright
+# notice, this list of conditions and the following disclaimer in the
+# documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+# ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
+# LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+# POSSIBILITY OF SUCH DAMAGE.
#
This test benchmarks the following operations:
diff --git a/testsuites/psxtmtests/psxtmcond03/psxtmcond03.doc b/testsuites/psxtmtests/psxtmcond03/psxtmcond03.doc
index 436f1fe302..2934e34a7f 100644
--- a/testsuites/psxtmtests/psxtmcond03/psxtmcond03.doc
+++ b/testsuites/psxtmtests/psxtmcond03/psxtmcond03.doc
@@ -1,9 +1,28 @@
+# SPDX-License-Identifier: BSD-2-Clause
+
# COPYRIGHT (c) 2013
# On-Line Applications Research Corporation (OAR).
#
-# The license and distribution terms for this file may be
-# found in the file LICENSE in this distribution or at
-# http://www.rtems.org/license/LICENSE.
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1. Redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+# 2. Redistributions in binary form must reproduce the above copyright
+# notice, this list of conditions and the following disclaimer in the
+# documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+# ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
+# LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+# POSSIBILITY OF SUCH DAMAGE.
#
This test benchmarks the following operations:
diff --git a/testsuites/psxtmtests/psxtmcond04/psxtmcond04.doc b/testsuites/psxtmtests/psxtmcond04/psxtmcond04.doc
index 42188820af..2ba306f7a9 100644
--- a/testsuites/psxtmtests/psxtmcond04/psxtmcond04.doc
+++ b/testsuites/psxtmtests/psxtmcond04/psxtmcond04.doc
@@ -1,9 +1,28 @@
+# SPDX-License-Identifier: BSD-2-Clause
+
# COPYRIGHT (c) 2013
# On-Line Applications Research Corporation (OAR).
#
-# The license and distribution terms for this file may be
-# found in the file LICENSE in this distribution or at
-# http://www.rtems.org/license/LICENSE.
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1. Redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+# 2. Redistributions in binary form must reproduce the above copyright
+# notice, this list of conditions and the following disclaimer in the
+# documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+# ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
+# LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+# POSSIBILITY OF SUCH DAMAGE.
#
This test benchmarks the following operations:
diff --git a/testsuites/psxtmtests/psxtmcond05/psxtmcond05.doc b/testsuites/psxtmtests/psxtmcond05/psxtmcond05.doc
index 32ea709e23..3ed4b09eb1 100644
--- a/testsuites/psxtmtests/psxtmcond05/psxtmcond05.doc
+++ b/testsuites/psxtmtests/psxtmcond05/psxtmcond05.doc
@@ -1,9 +1,28 @@
+# SPDX-License-Identifier: BSD-2-Clause
+
# COPYRIGHT (c) 2013
# On-Line Applications Research Corporation (OAR).
#
-# The license and distribution terms for this file may be
-# found in the file LICENSE in this distribution or at
-# http://www.rtems.org/license/LICENSE.
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1. Redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+# 2. Redistributions in binary form must reproduce the above copyright
+# notice, this list of conditions and the following disclaimer in the
+# documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+# ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
+# LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+# POSSIBILITY OF SUCH DAMAGE.
#
This test benchmarks the following operations:
diff --git a/testsuites/psxtmtests/psxtmcond06/psxtmcond06.doc b/testsuites/psxtmtests/psxtmcond06/psxtmcond06.doc
index 77d835d478..92d8d3cfcb 100644
--- a/testsuites/psxtmtests/psxtmcond06/psxtmcond06.doc
+++ b/testsuites/psxtmtests/psxtmcond06/psxtmcond06.doc
@@ -1,9 +1,28 @@
+# SPDX-License-Identifier: BSD-2-Clause
+
# COPYRIGHT (c) 2013
# On-Line Applications Research Corporation (OAR).
#
-# The license and distribution terms for this file may be
-# found in the file LICENSE in this distribution or at
-# http://www.rtems.org/license/LICENSE.
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1. Redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+# 2. Redistributions in binary form must reproduce the above copyright
+# notice, this list of conditions and the following disclaimer in the
+# documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+# ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
+# LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+# POSSIBILITY OF SUCH DAMAGE.
#
This test benchmarks the following operations:
diff --git a/testsuites/psxtmtests/psxtmcond07/psxtmcond07.doc b/testsuites/psxtmtests/psxtmcond07/psxtmcond07.doc
index 0cdfe271f7..66a8995c50 100644
--- a/testsuites/psxtmtests/psxtmcond07/psxtmcond07.doc
+++ b/testsuites/psxtmtests/psxtmcond07/psxtmcond07.doc
@@ -1,9 +1,28 @@
+# SPDX-License-Identifier: BSD-2-Clause
+
# COPYRIGHT (c) 2013
# On-Line Applications Research Corporation (OAR).
#
-# The license and distribution terms for this file may be
-# found in the file LICENSE in this distribution or at
-# http://www.rtems.org/license/LICENSE.
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1. Redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+# 2. Redistributions in binary form must reproduce the above copyright
+# notice, this list of conditions and the following disclaimer in the
+# documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+# ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
+# LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+# POSSIBILITY OF SUCH DAMAGE.
#
This test benchmarks the following operations:
diff --git a/testsuites/psxtmtests/psxtmcond08/psxtmcond08.doc b/testsuites/psxtmtests/psxtmcond08/psxtmcond08.doc
index 68ca20512e..7002430c6c 100644
--- a/testsuites/psxtmtests/psxtmcond08/psxtmcond08.doc
+++ b/testsuites/psxtmtests/psxtmcond08/psxtmcond08.doc
@@ -1,9 +1,28 @@
+# SPDX-License-Identifier: BSD-2-Clause
+
# COPYRIGHT (c) 2013
# On-Line Applications Research Corporation (OAR).
#
-# The license and distribution terms for this file may be
-# found in the file LICENSE in this distribution or at
-# http://www.rtems.org/license/LICENSE.
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1. Redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+# 2. Redistributions in binary form must reproduce the above copyright
+# notice, this list of conditions and the following disclaimer in the
+# documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+# ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
+# LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+# POSSIBILITY OF SUCH DAMAGE.
#
This test benchmarks the following operations:
diff --git a/testsuites/psxtmtests/psxtmcond09/psxtmcond09.doc b/testsuites/psxtmtests/psxtmcond09/psxtmcond09.doc
index 459a871d7c..b49a3d65b6 100644
--- a/testsuites/psxtmtests/psxtmcond09/psxtmcond09.doc
+++ b/testsuites/psxtmtests/psxtmcond09/psxtmcond09.doc
@@ -1,9 +1,28 @@
+# SPDX-License-Identifier: BSD-2-Clause
+
# COPYRIGHT (c) 1989-2011.
# On-Line Applications Research Corporation (OAR).
#
-# The license and distribution terms for this file may be
-# found in the file LICENSE in this distribution or at
-# http://www.rtems.org/license/LICENSE.
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1. Redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+# 2. Redistributions in binary form must reproduce the above copyright
+# notice, this list of conditions and the following disclaimer in the
+# documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+# ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
+# LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+# POSSIBILITY OF SUCH DAMAGE.
#
This test benchmarks the following operations:
diff --git a/testsuites/psxtmtests/psxtmkey01/psxtmkey01.doc b/testsuites/psxtmtests/psxtmkey01/psxtmkey01.doc
index 266e6d6202..143687fb8e 100644
--- a/testsuites/psxtmtests/psxtmkey01/psxtmkey01.doc
+++ b/testsuites/psxtmtests/psxtmkey01/psxtmkey01.doc
@@ -1,9 +1,28 @@
+# SPDX-License-Identifier: BSD-2-Clause
+
# COPYRIGHT (c) 1989-2011.
# On-Line Applications Research Corporation (OAR).
#
-# The license and distribution terms for this file may be
-# found in the file LICENSE in this distribution or at
-# http://www.rtems.org/license/LICENSE.
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1. Redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+# 2. Redistributions in binary form must reproduce the above copyright
+# notice, this list of conditions and the following disclaimer in the
+# documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+# ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
+# LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+# POSSIBILITY OF SUCH DAMAGE.
#
This test benchmarks the following operations:
diff --git a/testsuites/psxtmtests/psxtmkey02/psxtmkey02.doc b/testsuites/psxtmtests/psxtmkey02/psxtmkey02.doc
index 626a8dbe27..490f3fa6c3 100644
--- a/testsuites/psxtmtests/psxtmkey02/psxtmkey02.doc
+++ b/testsuites/psxtmtests/psxtmkey02/psxtmkey02.doc
@@ -1,9 +1,28 @@
+# SPDX-License-Identifier: BSD-2-Clause
+
# COPYRIGHT (c) 1989-2011.
# On-Line Applications Research Corporation (OAR).
#
-# The license and distribution terms for this file may be
-# found in the file LICENSE in this distribution or at
-# http://www.rtems.org/license/LICENSE.
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1. Redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+# 2. Redistributions in binary form must reproduce the above copyright
+# notice, this list of conditions and the following disclaimer in the
+# documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+# ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
+# LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+# POSSIBILITY OF SUCH DAMAGE.
#
This test benchmarks the following operations:
diff --git a/testsuites/psxtmtests/psxtmmq01/psxtmmq01.doc b/testsuites/psxtmtests/psxtmmq01/psxtmmq01.doc
index 5a13e02b3c..18714df593 100644
--- a/testsuites/psxtmtests/psxtmmq01/psxtmmq01.doc
+++ b/testsuites/psxtmtests/psxtmmq01/psxtmmq01.doc
@@ -1,9 +1,28 @@
+# SPDX-License-Identifier: BSD-2-Clause
+
# COPYRIGHT (c) 1989-2011.
# On-Line Applications Research Corporation (OAR).
#
-# The license and distribution terms for this file may be
-# found in the file LICENSE in this distribution or at
-# http://www.rtems.org/license/LICENSE.
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1. Redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+# 2. Redistributions in binary form must reproduce the above copyright
+# notice, this list of conditions and the following disclaimer in the
+# documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+# ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
+# LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+# POSSIBILITY OF SUCH DAMAGE.
#
This test benchmarks the following operations:
diff --git a/testsuites/psxtmtests/psxtmmutex01/psxtmmutex01.doc b/testsuites/psxtmtests/psxtmmutex01/psxtmmutex01.doc
index 55fcc81389..8387ecf7f8 100644
--- a/testsuites/psxtmtests/psxtmmutex01/psxtmmutex01.doc
+++ b/testsuites/psxtmtests/psxtmmutex01/psxtmmutex01.doc
@@ -1,9 +1,28 @@
+# SPDX-License-Identifier: BSD-2-Clause
+
# COPYRIGHT (c) 1989-2011.
# On-Line Applications Research Corporation (OAR).
#
-# The license and distribution terms for this file may be
-# found in the file LICENSE in this distribution or at
-# http://www.rtems.org/license/LICENSE.
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1. Redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+# 2. Redistributions in binary form must reproduce the above copyright
+# notice, this list of conditions and the following disclaimer in the
+# documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+# ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
+# LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+# POSSIBILITY OF SUCH DAMAGE.
#
This test benchmarks the following operations:
diff --git a/testsuites/psxtmtests/psxtmmutex02/psxtmmutex02.doc b/testsuites/psxtmtests/psxtmmutex02/psxtmmutex02.doc
index ce460f0f1c..b3fb1b0800 100644
--- a/testsuites/psxtmtests/psxtmmutex02/psxtmmutex02.doc
+++ b/testsuites/psxtmtests/psxtmmutex02/psxtmmutex02.doc
@@ -1,9 +1,28 @@
+# SPDX-License-Identifier: BSD-2-Clause
+
# COPYRIGHT (c) 1989-2010.
# On-Line Applications Research Corporation (OAR).
#
-# The license and distribution terms for this file may be
-# found in the file LICENSE in this distribution or at
-# http://www.rtems.org/license/LICENSE.
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1. Redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+# 2. Redistributions in binary form must reproduce the above copyright
+# notice, this list of conditions and the following disclaimer in the
+# documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+# ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
+# LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+# POSSIBILITY OF SUCH DAMAGE.
#
This test benchmarks the following operations:
diff --git a/testsuites/psxtmtests/psxtmmutex03/psxtmmutex03.doc b/testsuites/psxtmtests/psxtmmutex03/psxtmmutex03.doc
index 2a1f007194..9c444a05a3 100644
--- a/testsuites/psxtmtests/psxtmmutex03/psxtmmutex03.doc
+++ b/testsuites/psxtmtests/psxtmmutex03/psxtmmutex03.doc
@@ -1,9 +1,28 @@
+# SPDX-License-Identifier: BSD-2-Clause
+
# COPYRIGHT (c) 1989-2011.
# On-Line Applications Research Corporation (OAR).
#
-# The license and distribution terms for this file may be
-# found in the file LICENSE in this distribution or at
-# http://www.rtems.org/license/LICENSE.
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1. Redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+# 2. Redistributions in binary form must reproduce the above copyright
+# notice, this list of conditions and the following disclaimer in the
+# documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+# ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
+# LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+# POSSIBILITY OF SUCH DAMAGE.
#
This test benchmarks the following operations:
diff --git a/testsuites/psxtmtests/psxtmmutex04/psxtmmutex04.doc b/testsuites/psxtmtests/psxtmmutex04/psxtmmutex04.doc
index 38860aae68..60c0a20f81 100644
--- a/testsuites/psxtmtests/psxtmmutex04/psxtmmutex04.doc
+++ b/testsuites/psxtmtests/psxtmmutex04/psxtmmutex04.doc
@@ -1,9 +1,28 @@
+# SPDX-License-Identifier: BSD-2-Clause
+
# COPYRIGHT (c) 1989-2011.
# On-Line Applications Research Corporation (OAR).
#
-# The license and distribution terms for this file may be
-# found in the file LICENSE in this distribution or at
-# http://www.rtems.org/license/LICENSE.
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1. Redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+# 2. Redistributions in binary form must reproduce the above copyright
+# notice, this list of conditions and the following disclaimer in the
+# documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+# ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
+# LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+# POSSIBILITY OF SUCH DAMAGE.
#
This test benchmarks the following operations:
diff --git a/testsuites/psxtmtests/psxtmmutex05/psxtmmutex05.doc b/testsuites/psxtmtests/psxtmmutex05/psxtmmutex05.doc
index 10b6ca0aab..9360a05852 100644
--- a/testsuites/psxtmtests/psxtmmutex05/psxtmmutex05.doc
+++ b/testsuites/psxtmtests/psxtmmutex05/psxtmmutex05.doc
@@ -1,9 +1,28 @@
+# SPDX-License-Identifier: BSD-2-Clause
+
# COPYRIGHT (c) 1989-2011.
# On-Line Applications Research Corporation (OAR).
#
-# The license and distribution terms for this file may be
-# found in the file LICENSE in this distribution or at
-# http://www.rtems.org/license/LICENSE.
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1. Redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+# 2. Redistributions in binary form must reproduce the above copyright
+# notice, this list of conditions and the following disclaimer in the
+# documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+# ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
+# LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+# POSSIBILITY OF SUCH DAMAGE.
#
This test benchmarks the following operations:
diff --git a/testsuites/psxtmtests/psxtmmutex06/psxtmmutex06.doc b/testsuites/psxtmtests/psxtmmutex06/psxtmmutex06.doc
index 88cece9e28..7213fab2f3 100644
--- a/testsuites/psxtmtests/psxtmmutex06/psxtmmutex06.doc
+++ b/testsuites/psxtmtests/psxtmmutex06/psxtmmutex06.doc
@@ -1,9 +1,28 @@
+# SPDX-License-Identifier: BSD-2-Clause
+
# COPYRIGHT (c) 1989-2011.
# On-Line Applications Research Corporation (OAR).
#
-# The license and distribution terms for this file may be
-# found in the file LICENSE in this distribution or at
-# http://www.rtems.org/license/LICENSE.
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1. Redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+# 2. Redistributions in binary form must reproduce the above copyright
+# notice, this list of conditions and the following disclaimer in the
+# documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+# ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
+# LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+# POSSIBILITY OF SUCH DAMAGE.
#
This test benchmarks the following operations:
diff --git a/testsuites/psxtmtests/psxtmmutex07/psxtmmutex07.doc b/testsuites/psxtmtests/psxtmmutex07/psxtmmutex07.doc
index 3eecb346bf..8be220bb80 100644
--- a/testsuites/psxtmtests/psxtmmutex07/psxtmmutex07.doc
+++ b/testsuites/psxtmtests/psxtmmutex07/psxtmmutex07.doc
@@ -1,9 +1,28 @@
+# SPDX-License-Identifier: BSD-2-Clause
+
# COPYRIGHT (c) 1989-2011.
# On-Line Applications Research Corporation (OAR).
#
-# The license and distribution terms for this file may be
-# found in the file LICENSE in this distribution or at
-# http://www.rtems.org/license/LICENSE.
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1. Redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+# 2. Redistributions in binary form must reproduce the above copyright
+# notice, this list of conditions and the following disclaimer in the
+# documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+# ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
+# LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+# POSSIBILITY OF SUCH DAMAGE.
#
This test benchmarks the following operations:
diff --git a/testsuites/psxtmtests/psxtmnanosleep01/psxtmnanosleep01.doc b/testsuites/psxtmtests/psxtmnanosleep01/psxtmnanosleep01.doc
index c8601464ea..b48acb9c91 100644
--- a/testsuites/psxtmtests/psxtmnanosleep01/psxtmnanosleep01.doc
+++ b/testsuites/psxtmtests/psxtmnanosleep01/psxtmnanosleep01.doc
@@ -1,9 +1,28 @@
+# SPDX-License-Identifier: BSD-2-Clause
+
# COPYRIGHT (c) 1989-2011.
# On-Line Applications Research Corporation (OAR).
#
-# The license and distribution terms for this file may be
-# found in the file LICENSE in this distribution or at
-# http://www.rtems.org/license/LICENSE.
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1. Redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+# 2. Redistributions in binary form must reproduce the above copyright
+# notice, this list of conditions and the following disclaimer in the
+# documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+# ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
+# LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+# POSSIBILITY OF SUCH DAMAGE.
#
This test benchmarks the following operations:
diff --git a/testsuites/psxtmtests/psxtmnanosleep02/psxtmnanosleep02.doc b/testsuites/psxtmtests/psxtmnanosleep02/psxtmnanosleep02.doc
index 2f2797f84d..a3077b8f41 100644
--- a/testsuites/psxtmtests/psxtmnanosleep02/psxtmnanosleep02.doc
+++ b/testsuites/psxtmtests/psxtmnanosleep02/psxtmnanosleep02.doc
@@ -1,9 +1,28 @@
+# SPDX-License-Identifier: BSD-2-Clause
+
# COPYRIGHT (c) 1989-2011.
# On-Line Applications Research Corporation (OAR).
#
-# The license and distribution terms for this file may be
-# found in the file LICENSE in this distribution or at
-# http://www.rtems.org/license/LICENSE.
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1. Redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+# 2. Redistributions in binary form must reproduce the above copyright
+# notice, this list of conditions and the following disclaimer in the
+# documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+# ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
+# LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+# POSSIBILITY OF SUCH DAMAGE.
#
This test benchmarks the following operations:
diff --git a/testsuites/psxtmtests/psxtmrwlock01/psxtmrwlock01.doc b/testsuites/psxtmtests/psxtmrwlock01/psxtmrwlock01.doc
index 00bbd7a758..0166b4fb24 100644
--- a/testsuites/psxtmtests/psxtmrwlock01/psxtmrwlock01.doc
+++ b/testsuites/psxtmtests/psxtmrwlock01/psxtmrwlock01.doc
@@ -1,9 +1,28 @@
+# SPDX-License-Identifier: BSD-2-Clause
+
# COPYRIGHT (c) 1989-2011.
# On-Line Applications Research Corporation (OAR).
#
-# The license and distribution terms for this file may be
-# found in the file LICENSE in this distribution or at
-# http://www.rtems.org/license/LICENSE.
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1. Redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+# 2. Redistributions in binary form must reproduce the above copyright
+# notice, this list of conditions and the following disclaimer in the
+# documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+# ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
+# LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+# POSSIBILITY OF SUCH DAMAGE.
#
This test benchmarks the following operations:
diff --git a/testsuites/psxtmtests/psxtmrwlock02/psxtmrwlock02.doc b/testsuites/psxtmtests/psxtmrwlock02/psxtmrwlock02.doc
index 87ea8ef71e..7378cca31f 100644
--- a/testsuites/psxtmtests/psxtmrwlock02/psxtmrwlock02.doc
+++ b/testsuites/psxtmtests/psxtmrwlock02/psxtmrwlock02.doc
@@ -1,9 +1,28 @@
+# SPDX-License-Identifier: BSD-2-Clause
+
# COPYRIGHT (c) 1989-2011.
# On-Line Applications Research Corporation (OAR).
#
-# The license and distribution terms for this file may be
-# found in the file LICENSE in this distribution or at
-# http://www.rtems.org/license/LICENSE.
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1. Redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+# 2. Redistributions in binary form must reproduce the above copyright
+# notice, this list of conditions and the following disclaimer in the
+# documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+# ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
+# LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+# POSSIBILITY OF SUCH DAMAGE.
#
This test benchmarks the following operations:
diff --git a/testsuites/psxtmtests/psxtmrwlock03/psxtmrwlock03.doc b/testsuites/psxtmtests/psxtmrwlock03/psxtmrwlock03.doc
index 7941646a43..9dab57a0dc 100644
--- a/testsuites/psxtmtests/psxtmrwlock03/psxtmrwlock03.doc
+++ b/testsuites/psxtmtests/psxtmrwlock03/psxtmrwlock03.doc
@@ -1,9 +1,28 @@
+# SPDX-License-Identifier: BSD-2-Clause
+
# COPYRIGHT (c) 1989-2011.
# On-Line Applications Research Corporation (OAR).
#
-# The license and distribution terms for this file may be
-# found in the file LICENSE in this distribution or at
-# http://www.rtems.org/license/LICENSE.
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1. Redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+# 2. Redistributions in binary form must reproduce the above copyright
+# notice, this list of conditions and the following disclaimer in the
+# documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+# ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
+# LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+# POSSIBILITY OF SUCH DAMAGE.
#
This test benchmarks the following operations:
diff --git a/testsuites/psxtmtests/psxtmrwlock04/psxtmrwlock04.doc b/testsuites/psxtmtests/psxtmrwlock04/psxtmrwlock04.doc
index a398ca44ca..c3c12baf0b 100644
--- a/testsuites/psxtmtests/psxtmrwlock04/psxtmrwlock04.doc
+++ b/testsuites/psxtmtests/psxtmrwlock04/psxtmrwlock04.doc
@@ -1,9 +1,28 @@
+# SPDX-License-Identifier: BSD-2-Clause
+
# COPYRIGHT (c) 1989-2011.
# On-Line Applications Research Corporation (OAR).
#
-# The license and distribution terms for this file may be
-# found in the file LICENSE in this distribution or at
-# http://www.rtems.org/license/LICENSE.
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1. Redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+# 2. Redistributions in binary form must reproduce the above copyright
+# notice, this list of conditions and the following disclaimer in the
+# documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+# ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
+# LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+# POSSIBILITY OF SUCH DAMAGE.
#
This test benchmarks the following operations:
diff --git a/testsuites/psxtmtests/psxtmrwlock05/psxtmrwlock05.doc b/testsuites/psxtmtests/psxtmrwlock05/psxtmrwlock05.doc
index b1a467fc80..b910db70de 100644
--- a/testsuites/psxtmtests/psxtmrwlock05/psxtmrwlock05.doc
+++ b/testsuites/psxtmtests/psxtmrwlock05/psxtmrwlock05.doc
@@ -1,9 +1,28 @@
+# SPDX-License-Identifier: BSD-2-Clause
+
# COPYRIGHT (c) 1989-2011.
# On-Line Applications Research Corporation (OAR).
#
-# The license and distribution terms for this file may be
-# found in the file LICENSE in this distribution or at
-# http://www.rtems.org/license/LICENSE.
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1. Redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+# 2. Redistributions in binary form must reproduce the above copyright
+# notice, this list of conditions and the following disclaimer in the
+# documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+# ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
+# LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+# POSSIBILITY OF SUCH DAMAGE.
#
This test benchmarks the following operations:
diff --git a/testsuites/psxtmtests/psxtmrwlock06/psxtmrwlock06.doc b/testsuites/psxtmtests/psxtmrwlock06/psxtmrwlock06.doc
index 8984eafc85..04cb933558 100644
--- a/testsuites/psxtmtests/psxtmrwlock06/psxtmrwlock06.doc
+++ b/testsuites/psxtmtests/psxtmrwlock06/psxtmrwlock06.doc
@@ -1,9 +1,28 @@
+# SPDX-License-Identifier: BSD-2-Clause
+
# COPYRIGHT (c) 1989-2011.
# On-Line Applications Research Corporation (OAR).
#
-# The license and distribution terms for this file may be
-# found in the file LICENSE in this distribution or at
-# http://www.rtems.org/license/LICENSE.
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1. Redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+# 2. Redistributions in binary form must reproduce the above copyright
+# notice, this list of conditions and the following disclaimer in the
+# documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+# ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
+# LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+# POSSIBILITY OF SUCH DAMAGE.
#
This test benchmarks the following operations:
diff --git a/testsuites/psxtmtests/psxtmrwlock07/psxtmrwlock07.doc b/testsuites/psxtmtests/psxtmrwlock07/psxtmrwlock07.doc
index 3b643cf408..c373a4ac78 100644
--- a/testsuites/psxtmtests/psxtmrwlock07/psxtmrwlock07.doc
+++ b/testsuites/psxtmtests/psxtmrwlock07/psxtmrwlock07.doc
@@ -1,9 +1,28 @@
+# SPDX-License-Identifier: BSD-2-Clause
+
# COPYRIGHT (c) 1989-2011.
# On-Line Applications Research Corporation (OAR).
#
-# The license and distribution terms for this file may be
-# found in the file LICENSE in this distribution or at
-# http://www.rtems.org/license/LICENSE.
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1. Redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+# 2. Redistributions in binary form must reproduce the above copyright
+# notice, this list of conditions and the following disclaimer in the
+# documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+# ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
+# LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+# POSSIBILITY OF SUCH DAMAGE.
#
This test benchmarks the following operations:
diff --git a/testsuites/psxtmtests/psxtmsem01/psxtmsem01.doc b/testsuites/psxtmtests/psxtmsem01/psxtmsem01.doc
index ceb7691bc7..1912f114e5 100644
--- a/testsuites/psxtmtests/psxtmsem01/psxtmsem01.doc
+++ b/testsuites/psxtmtests/psxtmsem01/psxtmsem01.doc
@@ -1,9 +1,28 @@
+# SPDX-License-Identifier: BSD-2-Clause
+
# COPYRIGHT (c) 1989-2011.
# On-Line Applications Research Corporation (OAR).
#
-# The license and distribution terms for this file may be
-# found in the file LICENSE in this distribution or at
-# http://www.rtems.org/license/LICENSE.
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1. Redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+# 2. Redistributions in binary form must reproduce the above copyright
+# notice, this list of conditions and the following disclaimer in the
+# documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+# ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
+# LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+# POSSIBILITY OF SUCH DAMAGE.
#
This test benchmarks the following operations:
diff --git a/testsuites/psxtmtests/psxtmsem02/psxtmsem02.doc b/testsuites/psxtmtests/psxtmsem02/psxtmsem02.doc
index bec8910adc..fa894f9b80 100644
--- a/testsuites/psxtmtests/psxtmsem02/psxtmsem02.doc
+++ b/testsuites/psxtmtests/psxtmsem02/psxtmsem02.doc
@@ -1,9 +1,28 @@
+# SPDX-License-Identifier: BSD-2-Clause
+
# COPYRIGHT (c) 1989-2011.
# On-Line Applications Research Corporation (OAR).
#
-# The license and distribution terms for this file may be
-# found in the file LICENSE in this distribution or at
-# http://www.rtems.org/license/LICENSE.
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1. Redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+# 2. Redistributions in binary form must reproduce the above copyright
+# notice, this list of conditions and the following disclaimer in the
+# documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+# ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
+# LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+# POSSIBILITY OF SUCH DAMAGE.
#
This test benchmarks the following operations:
diff --git a/testsuites/psxtmtests/psxtmsem03/psxtmsem03.doc b/testsuites/psxtmtests/psxtmsem03/psxtmsem03.doc
index 7b27c269b4..320cbed3ad 100644
--- a/testsuites/psxtmtests/psxtmsem03/psxtmsem03.doc
+++ b/testsuites/psxtmtests/psxtmsem03/psxtmsem03.doc
@@ -1,9 +1,28 @@
+# SPDX-License-Identifier: BSD-2-Clause
+
# COPYRIGHT (c) 1989-2011.
# On-Line Applications Research Corporation (OAR).
#
-# The license and distribution terms for this file may be
-# found in the file LICENSE in this distribution or at
-# http://www.rtems.org/license/LICENSE.
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1. Redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+# 2. Redistributions in binary form must reproduce the above copyright
+# notice, this list of conditions and the following disclaimer in the
+# documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+# ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
+# LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+# POSSIBILITY OF SUCH DAMAGE.
#
This test benchmarks the following operations:
diff --git a/testsuites/psxtmtests/psxtmsem04/psxtmsem04.doc b/testsuites/psxtmtests/psxtmsem04/psxtmsem04.doc
index bcab3f3d7a..6ff2eede30 100644
--- a/testsuites/psxtmtests/psxtmsem04/psxtmsem04.doc
+++ b/testsuites/psxtmtests/psxtmsem04/psxtmsem04.doc
@@ -1,9 +1,28 @@
+# SPDX-License-Identifier: BSD-2-Clause
+
# COPYRIGHT (c) 1989-2011.
# On-Line Applications Research Corporation (OAR).
#
-# The license and distribution terms for this file may be
-# found in the file LICENSE in this distribution or at
-# http://www.rtems.org/license/LICENSE.
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1. Redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+# 2. Redistributions in binary form must reproduce the above copyright
+# notice, this list of conditions and the following disclaimer in the
+# documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+# ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
+# LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+# POSSIBILITY OF SUCH DAMAGE.
#
This test benchmarks the following operations:
diff --git a/testsuites/psxtmtests/psxtmsem05/psxtmsem05.doc b/testsuites/psxtmtests/psxtmsem05/psxtmsem05.doc
index 713d7403e6..7e17512a4d 100644
--- a/testsuites/psxtmtests/psxtmsem05/psxtmsem05.doc
+++ b/testsuites/psxtmtests/psxtmsem05/psxtmsem05.doc
@@ -1,9 +1,28 @@
+# SPDX-License-Identifier: BSD-2-Clause
+
# COPYRIGHT (c) 1989-2011.
# On-Line Applications Research Corporation (OAR).
#
-# The license and distribution terms for this file may be
-# found in the file LICENSE in this distribution or at
-# http://www.rtems.org/license/LICENSE.
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1. Redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+# 2. Redistributions in binary form must reproduce the above copyright
+# notice, this list of conditions and the following disclaimer in the
+# documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+# ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
+# LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+# POSSIBILITY OF SUCH DAMAGE.
#
This test benchmarks the following operations:
diff --git a/testsuites/psxtmtests/psxtmsleep01/psxtmsleep01.doc b/testsuites/psxtmtests/psxtmsleep01/psxtmsleep01.doc
index e650ecf9f1..a4e86ba69d 100644
--- a/testsuites/psxtmtests/psxtmsleep01/psxtmsleep01.doc
+++ b/testsuites/psxtmtests/psxtmsleep01/psxtmsleep01.doc
@@ -1,9 +1,28 @@
+# SPDX-License-Identifier: BSD-2-Clause
+
# COPYRIGHT (c) 1989-2010.
# On-Line Applications Research Corporation (OAR).
#
-# The license and distribution terms for this file may be
-# found in the file LICENSE in this distribution or at
-# http://www.rtems.org/license/LICENSE.
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1. Redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+# 2. Redistributions in binary form must reproduce the above copyright
+# notice, this list of conditions and the following disclaimer in the
+# documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+# ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
+# LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+# POSSIBILITY OF SUCH DAMAGE.
#
This test benchmarks the following operations:
diff --git a/testsuites/psxtmtests/psxtmsleep02/psxtmsleep02.doc b/testsuites/psxtmtests/psxtmsleep02/psxtmsleep02.doc
index dfd4720006..e9e3a2e477 100644
--- a/testsuites/psxtmtests/psxtmsleep02/psxtmsleep02.doc
+++ b/testsuites/psxtmtests/psxtmsleep02/psxtmsleep02.doc
@@ -1,9 +1,28 @@
+# SPDX-License-Identifier: BSD-2-Clause
+
# COPYRIGHT (c) 1989-2011.
# On-Line Applications Research Corporation (OAR).
#
-# The license and distribution terms for this file may be
-# found in the file LICENSE in this distribution or at
-# http://www.rtems.org/license/LICENSE.
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1. Redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+# 2. Redistributions in binary form must reproduce the above copyright
+# notice, this list of conditions and the following disclaimer in the
+# documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+# ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
+# LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+# POSSIBILITY OF SUCH DAMAGE.
#
This test benchmarks the following operations:
diff --git a/testsuites/psxtmtests/psxtmthread01/psxtmthread01.doc b/testsuites/psxtmtests/psxtmthread01/psxtmthread01.doc
index a8284e00a2..edc9667008 100644
--- a/testsuites/psxtmtests/psxtmthread01/psxtmthread01.doc
+++ b/testsuites/psxtmtests/psxtmthread01/psxtmthread01.doc
@@ -1,9 +1,28 @@
+# SPDX-License-Identifier: BSD-2-Clause
+
# COPYRIGHT (c) 1989-2010.
# On-Line Applications Research Corporation (OAR).
#
-# The license and distribution terms for this file may be
-# found in the file LICENSE in this distribution or at
-# http://www.rtems.org/license/LICENSE.
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1. Redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+# 2. Redistributions in binary form must reproduce the above copyright
+# notice, this list of conditions and the following disclaimer in the
+# documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+# ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
+# LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+# POSSIBILITY OF SUCH DAMAGE.
#
This test benchmarks the following operations:
diff --git a/testsuites/psxtmtests/psxtmthread03/psxtmthread03.doc b/testsuites/psxtmtests/psxtmthread03/psxtmthread03.doc
index 2fde771fff..a2a2eb07dd 100644
--- a/testsuites/psxtmtests/psxtmthread03/psxtmthread03.doc
+++ b/testsuites/psxtmtests/psxtmthread03/psxtmthread03.doc
@@ -1,9 +1,28 @@
+# SPDX-License-Identifier: BSD-2-Clause
+
# COPYRIGHT (c) 1989-2010.
# On-Line Applications Research Corporation (OAR).
#
-# The license and distribution terms for this file may be
-# found in the file LICENSE in this distribution or at
-# http://www.rtems.org/license/LICENSE.
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1. Redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+# 2. Redistributions in binary form must reproduce the above copyright
+# notice, this list of conditions and the following disclaimer in the
+# documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+# ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
+# LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+# POSSIBILITY OF SUCH DAMAGE.
#
This test benchmarks the following operations:
diff --git a/testsuites/psxtmtests/psxtmthread04/psxtmthread04.doc b/testsuites/psxtmtests/psxtmthread04/psxtmthread04.doc
index ed75cab026..6aaa03b339 100644
--- a/testsuites/psxtmtests/psxtmthread04/psxtmthread04.doc
+++ b/testsuites/psxtmtests/psxtmthread04/psxtmthread04.doc
@@ -1,9 +1,28 @@
+# SPDX-License-Identifier: BSD-2-Clause
+
# COPYRIGHT (c) 1989-2013.
# On-Line Applications Research Corporation (OAR).
#
-# The license and distribution terms for this file may be
-# found in the file LICENSE in this distribution or at
-# http://www.rtems.org/license/LICENSE.
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1. Redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+# 2. Redistributions in binary form must reproduce the above copyright
+# notice, this list of conditions and the following disclaimer in the
+# documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+# ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
+# LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+# POSSIBILITY OF SUCH DAMAGE.
#
This test benchmarks the following operations:
diff --git a/testsuites/psxtmtests/psxtmthread05/psxtmthread05.doc b/testsuites/psxtmtests/psxtmthread05/psxtmthread05.doc
index d635f1d80b..34554df1d3 100644
--- a/testsuites/psxtmtests/psxtmthread05/psxtmthread05.doc
+++ b/testsuites/psxtmtests/psxtmthread05/psxtmthread05.doc
@@ -1,9 +1,28 @@
+# SPDX-License-Identifier: BSD-2-Clause
+
# COPYRIGHT (c) 1989-2011.
# On-Line Applications Research Corporation (OAR).
#
-# The license and distribution terms for this file may be
-# found in the file LICENSE in this distribution or at
-# http://www.rtems.org/license/LICENSE.
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1. Redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+# 2. Redistributions in binary form must reproduce the above copyright
+# notice, this list of conditions and the following disclaimer in the
+# documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+# ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
+# LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+# POSSIBILITY OF SUCH DAMAGE.
#
This test benchmarks the following operations:
diff --git a/testsuites/rhealstone/rhdeadlockbrk/deadlockbrk.c b/testsuites/rhealstone/rhdeadlockbrk/deadlockbrk.c
index 3538003a4a..8154c93338 100644
--- a/testsuites/rhealstone/rhdeadlockbrk/deadlockbrk.c
+++ b/testsuites/rhealstone/rhdeadlockbrk/deadlockbrk.c
@@ -206,7 +206,6 @@ rtems_task Task03( rtems_task_argument ignored )
#define CONFIGURE_APPLICATION_NEEDS_SIMPLE_CONSOLE_DRIVER
#define CONFIGURE_APPLICATION_NEEDS_TIMER_DRIVER
-#define CONFIGURE_TICKS_PER_TIMESLICE 0
#define CONFIGURE_RTEMS_INIT_TASKS_TABLE
#define CONFIGURE_MAXIMUM_SEMAPHORES 1
#define CONFIGURE_MAXIMUM_TASKS 4
diff --git a/testsuites/rhealstone/rhilatency/ilatency.c b/testsuites/rhealstone/rhilatency/ilatency.c
index f4a450795f..8985453619 100644
--- a/testsuites/rhealstone/rhilatency/ilatency.c
+++ b/testsuites/rhealstone/rhilatency/ilatency.c
@@ -22,7 +22,6 @@
#define CONFIGURE_APPLICATION_NEEDS_SIMPLE_CONSOLE_DRIVER
#define CONFIGURE_APPLICATION_NEEDS_TIMER_DRIVER
#define CONFIGURE_MAXIMUM_TASKS 2
-#define CONFIGURE_TICKS_PER_TIMESLICE 0
#define CONFIGURE_RTEMS_INIT_TASKS_TABLE
#define CONFIGURE_SCHEDULER_PRIORITY
@@ -45,10 +44,6 @@ uint32_t Interrupt_nest;
uint32_t timer_overhead;
uint32_t Interrupt_enter_time;
-rtems_isr Isr_handler(
- rtems_vector_number vector
-);
-
rtems_task Init(
rtems_task_argument argument
)
@@ -91,6 +86,19 @@ rtems_task Init(
rtems_task_exit();
}
+#ifdef TM27_USE_VECTOR_HANDLER
+static rtems_isr Isr_handler( rtems_vector_number arg )
+#else
+static void Isr_handler( void *arg )
+#endif
+{
+ (void) arg;
+
+ /* See how long it took system to recognize interrupt */
+ Interrupt_enter_time = benchmark_timer_read();
+ Clear_tm27_intr();
+}
+
rtems_task Task_1(
rtems_task_argument argument
)
@@ -114,12 +122,3 @@ rtems_task Task_1(
TEST_END();
rtems_test_exit( 0 );
}
-
-rtems_isr Isr_handler(
- rtems_vector_number vector
-)
-{
- /* See how long it took system to recognize interrupt */
- Interrupt_enter_time = benchmark_timer_read();
- Clear_tm27_intr();
-}
diff --git a/testsuites/rhealstone/rhmlatency/mlatency.c b/testsuites/rhealstone/rhmlatency/mlatency.c
index a61e1917e5..76b1113644 100644
--- a/testsuites/rhealstone/rhmlatency/mlatency.c
+++ b/testsuites/rhealstone/rhmlatency/mlatency.c
@@ -151,7 +151,6 @@ rtems_task Task02( rtems_task_argument ignored )
#define CONFIGURE_MAXIMUM_MESSAGE_QUEUES 1
#define CONFIGURE_MESSAGE_BUFFER_MEMORY \
CONFIGURE_MESSAGE_BUFFERS_FOR_QUEUE(1, MESSAGE_SIZE)
-#define CONFIGURE_TICKS_PER_TIMESLICE 0
#define CONFIGURE_RTEMS_INIT_TASKS_TABLE
#define CONFIGURE_INIT
diff --git a/testsuites/rhealstone/rhtaskpreempt/taskpreempt.c b/testsuites/rhealstone/rhtaskpreempt/taskpreempt.c
index c5d2b6c809..00534b094d 100644
--- a/testsuites/rhealstone/rhtaskpreempt/taskpreempt.c
+++ b/testsuites/rhealstone/rhtaskpreempt/taskpreempt.c
@@ -113,7 +113,6 @@ rtems_task Init( rtems_task_argument ignored )
/* configuration information */
#define CONFIGURE_APPLICATION_NEEDS_SIMPLE_CONSOLE_DRIVER
#define CONFIGURE_APPLICATION_NEEDS_TIMER_DRIVER
-#define CONFIGURE_TICKS_PER_TIMESLICE 0
#define CONFIGURE_RTEMS_INIT_TASKS_TABLE
#define CONFIGURE_MAXIMUM_TASKS 3
#define CONFIGURE_INIT
diff --git a/testsuites/rhealstone/rhtaskswitch/taskswitch.c b/testsuites/rhealstone/rhtaskswitch/taskswitch.c
index a2cef9fe32..3bcf1ec354 100644
--- a/testsuites/rhealstone/rhtaskswitch/taskswitch.c
+++ b/testsuites/rhealstone/rhtaskswitch/taskswitch.c
@@ -115,7 +115,6 @@ rtems_task Init( rtems_task_argument ignored )
/* configuration information */
#define CONFIGURE_APPLICATION_NEEDS_SIMPLE_CONSOLE_DRIVER
#define CONFIGURE_APPLICATION_NEEDS_TIMER_DRIVER
-#define CONFIGURE_TICKS_PER_TIMESLICE 0
#define CONFIGURE_RTEMS_INIT_TASKS_TABLE
#define CONFIGURE_MAXIMUM_TASKS 3
#define CONFIGURE_INIT
diff --git a/testsuites/samples/base_mp/base_mp-node1.doc b/testsuites/samples/base_mp/base_mp-node1.doc
index 981286480f..f56c0e1f4e 100644
--- a/testsuites/samples/base_mp/base_mp-node1.doc
+++ b/testsuites/samples/base_mp/base_mp-node1.doc
@@ -1,9 +1,28 @@
+# SPDX-License-Identifier: BSD-2-Clause
+
# COPYRIGHT (c) 1989-1999.
# On-Line Applications Research Corporation (OAR).
#
-# The license and distribution terms for this file may be
-# found in the file LICENSE in this distribution or at
-# http://www.rtems.org/license/LICENSE.
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1. Redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+# 2. Redistributions in binary form must reproduce the above copyright
+# notice, this list of conditions and the following disclaimer in the
+# documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+# ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
+# LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+# POSSIBILITY OF SUCH DAMAGE.
#
diff --git a/testsuites/samples/base_mp/base_mp-node2.doc b/testsuites/samples/base_mp/base_mp-node2.doc
index 981286480f..f56c0e1f4e 100644
--- a/testsuites/samples/base_mp/base_mp-node2.doc
+++ b/testsuites/samples/base_mp/base_mp-node2.doc
@@ -1,9 +1,28 @@
+# SPDX-License-Identifier: BSD-2-Clause
+
# COPYRIGHT (c) 1989-1999.
# On-Line Applications Research Corporation (OAR).
#
-# The license and distribution terms for this file may be
-# found in the file LICENSE in this distribution or at
-# http://www.rtems.org/license/LICENSE.
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1. Redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+# 2. Redistributions in binary form must reproduce the above copyright
+# notice, this list of conditions and the following disclaimer in the
+# documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+# ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
+# LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+# POSSIBILITY OF SUCH DAMAGE.
#
diff --git a/testsuites/samples/base_sp/base_sp.doc b/testsuites/samples/base_sp/base_sp.doc
index 981286480f..f56c0e1f4e 100644
--- a/testsuites/samples/base_sp/base_sp.doc
+++ b/testsuites/samples/base_sp/base_sp.doc
@@ -1,9 +1,28 @@
+# SPDX-License-Identifier: BSD-2-Clause
+
# COPYRIGHT (c) 1989-1999.
# On-Line Applications Research Corporation (OAR).
#
-# The license and distribution terms for this file may be
-# found in the file LICENSE in this distribution or at
-# http://www.rtems.org/license/LICENSE.
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1. Redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+# 2. Redistributions in binary form must reproduce the above copyright
+# notice, this list of conditions and the following disclaimer in the
+# documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+# ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
+# LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+# POSSIBILITY OF SUCH DAMAGE.
#
diff --git a/testsuites/samples/capture/capture.doc b/testsuites/samples/capture/capture.doc
index bb8f4f321b..05b5d0478f 100644
--- a/testsuites/samples/capture/capture.doc
+++ b/testsuites/samples/capture/capture.doc
@@ -1,9 +1,28 @@
+# SPDX-License-Identifier: BSD-2-Clause
+
# COPYRIGHT (c) 1989-1999.
# On-Line Applications Research Corporation (OAR).
#
-# The license and distribution terms for this file may be
-# found in the file LICENSE in this distribution or at
-# http://www.rtems.org/license/LICENSE.
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1. Redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+# 2. Redistributions in binary form must reproduce the above copyright
+# notice, this list of conditions and the following disclaimer in the
+# documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+# ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
+# LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+# POSSIBILITY OF SUCH DAMAGE.
#
Capture Engine Tutorial
diff --git a/testsuites/samples/cdtest/main.cc b/testsuites/samples/cdtest/main.cc
index 894e404ba1..1c5057a32b 100644
--- a/testsuites/samples/cdtest/main.cc
+++ b/testsuites/samples/cdtest/main.cc
@@ -25,9 +25,11 @@
#include <rtems.h>
#include <rtems/bspIo.h>
#include <rtems/test-info.h>
+#include <rtems/sysinit.h>
#include <cstdio>
#include <cstdlib>
+#include <cstring>
#include <stdexcept>
#ifdef RTEMS_TEST_IO_STREAM
@@ -44,13 +46,6 @@ extern rtems_task main_task(rtems_task_argument);
static int num_inst = 0;
-static void check_begin_of_test(void)
-{
- if ( num_inst == 0 ) {
- TEST_BEGIN();
- }
-}
-
static void check_end_of_test(void)
{
if ( num_inst == 0 ) {
@@ -62,7 +57,6 @@ class AClass {
public:
AClass(const char *p = "LOCAL" ) : ptr( p )
{
- check_begin_of_test();
num_inst++;
printf(
"%s: Hey I'm in base class constructor number %d for %p.\n",
@@ -104,7 +98,6 @@ class BClass : public AClass {
public:
BClass(const char *p = "LOCAL" ) : AClass( p )
{
- check_begin_of_test();
num_inst++;
printf(
"%s: Hey I'm in derived class constructor number %d for %p.\n",
@@ -244,3 +237,50 @@ rtems_task main_task(
printf( "Global Dtors should be called after this line....\n" );
exit(0);
}
+
+/*
+ * Exceptions during system initialization work only on targets which do not
+ * need a registration of exception frames during the global construction. In
+ * particular, targets which use the DWARF2 unwinder cannot use exceptions
+ * during system initialization.
+ */
+#if defined(__arm__)
+#define CAN_DO_EXCEPTIONS_DURING_SYSINIT
+#endif
+
+#ifdef CAN_DO_EXCEPTIONS_DURING_SYSINIT
+static void early_exception()
+{
+ try
+ {
+ throw "early exception";
+ }
+ catch( const char *e )
+ {
+ rtems_test_assert(strcmp(e, "early exception") == 0);
+ throw "early exception 2";
+ }
+}
+#endif
+
+static void test_exceptions_during_system_init()
+{
+ TEST_BEGIN();
+
+#ifdef CAN_DO_EXCEPTIONS_DURING_SYSINIT
+ try
+ {
+ early_exception();
+ }
+ catch( const char *e )
+ {
+ rtems_test_assert(strcmp(e, "early exception 2") == 0);
+ }
+#endif
+}
+
+RTEMS_SYSINIT_ITEM(
+ test_exceptions_during_system_init,
+ RTEMS_SYSINIT_IDLE_THREADS,
+ RTEMS_SYSINIT_ORDER_LAST
+);
diff --git a/testsuites/samples/fileio/fileio.doc b/testsuites/samples/fileio/fileio.doc
index 0a436014f6..a8f84966d6 100644
--- a/testsuites/samples/fileio/fileio.doc
+++ b/testsuites/samples/fileio/fileio.doc
@@ -1,12 +1,31 @@
+# SPDX-License-Identifier: BSD-2-Clause
+
#
# fileio.doc,v
#
# COPYRIGHT (c) 1989-1999.
# On-Line Applications Research Corporation (OAR).
#
-# The license and distribution terms for this file may be
-# found in the file LICENSE in this distribution or at
-# http://www.rtems.org/license/LICENSE.
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1. Redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+# 2. Redistributions in binary form must reproduce the above copyright
+# notice, this list of conditions and the following disclaimer in the
+# documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+# ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
+# LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+# POSSIBILITY OF SUCH DAMAGE.
#
This sample implements some basic tests for the file systems
diff --git a/testsuites/samples/hello/hello.doc b/testsuites/samples/hello/hello.doc
index 981286480f..f56c0e1f4e 100644
--- a/testsuites/samples/hello/hello.doc
+++ b/testsuites/samples/hello/hello.doc
@@ -1,9 +1,28 @@
+# SPDX-License-Identifier: BSD-2-Clause
+
# COPYRIGHT (c) 1989-1999.
# On-Line Applications Research Corporation (OAR).
#
-# The license and distribution terms for this file may be
-# found in the file LICENSE in this distribution or at
-# http://www.rtems.org/license/LICENSE.
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1. Redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+# 2. Redistributions in binary form must reproduce the above copyright
+# notice, this list of conditions and the following disclaimer in the
+# documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+# ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
+# LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+# POSSIBILITY OF SUCH DAMAGE.
#
diff --git a/testsuites/samples/iostream/init.cc b/testsuites/samples/iostream/init.cc
index d80d4df9eb..ddd38a9d15 100644
--- a/testsuites/samples/iostream/init.cc
+++ b/testsuites/samples/iostream/init.cc
@@ -1,3 +1,5 @@
+/* SPDX-License-Identifier: BSD-2-Clause */
+
/* Init
*
* This routine is the initialization task for this test program.
@@ -13,9 +15,26 @@
* COPYRIGHT (c) 1989-2008.
* On-Line Applications Research Corporation (OAR).
*
- * The license and distribution terms for this file may be
- * found in the file LICENSE in this distribution or at
- * http://www.rtems.org/license/LICENSE.
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
*/
#define CONFIGURE_INIT
@@ -25,16 +44,17 @@
#include <stdlib.h>
+#include <tmacros.h>
+
const char rtems_test_name[] = "IOSTREAM";
rtems_task Init(
rtems_task_argument ignored
)
{
- std::cout << std::endl << std::endl
- << "*** BEGIN OF TEST " << rtems_test_name << " ***" << std::endl;
+ TEST_BEGIN();
std::cout << "Hello World" << std::endl;
- std::cout << "*** END OF TEST " << rtems_test_name << " ***" << std::endl;
- exit( 0 );
+ TEST_END();
+ rtems_test_exit( 0 );
}
diff --git a/testsuites/samples/iostream/iostream.doc b/testsuites/samples/iostream/iostream.doc
index 981286480f..f56c0e1f4e 100644
--- a/testsuites/samples/iostream/iostream.doc
+++ b/testsuites/samples/iostream/iostream.doc
@@ -1,9 +1,28 @@
+# SPDX-License-Identifier: BSD-2-Clause
+
# COPYRIGHT (c) 1989-1999.
# On-Line Applications Research Corporation (OAR).
#
-# The license and distribution terms for this file may be
-# found in the file LICENSE in this distribution or at
-# http://www.rtems.org/license/LICENSE.
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1. Redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+# 2. Redistributions in binary form must reproduce the above copyright
+# notice, this list of conditions and the following disclaimer in the
+# documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+# ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
+# LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+# POSSIBILITY OF SUCH DAMAGE.
#
diff --git a/testsuites/samples/minimum/init.c b/testsuites/samples/minimum/init.c
index c988d6d750..ee14a1aef4 100644
--- a/testsuites/samples/minimum/init.c
+++ b/testsuites/samples/minimum/init.c
@@ -81,7 +81,12 @@ static void *Init( uintptr_t ignored )
* demonstrates that the user can specify how small of a minimum
* stack they want.
*/
+#ifdef RTEMS_GCOV_COVERAGE
+#define CONFIGURE_MINIMUM_TASK_STACK_SIZE \
+ (CPU_STACK_MINIMUM_SIZE - CPU_STACK_ALIGNMENT)
+#else
#define CONFIGURE_MINIMUM_TASK_STACK_SIZE 512
+#endif
/*
* Keep the interrupt/initialization stack as is. Otherwise, the test may fail
@@ -100,21 +105,6 @@ static void *Init( uintptr_t ignored )
#define CONFIGURE_MAXIMUM_PRIORITY 15
/*
- * This configures RTEMS to use a single memory pool for the RTEMS Workspace
- * and C Program Heap. If not defined, there will be separate memory pools
- * for the RTEMS Workspace and C Program Heap. Having separate pools
- * does haved some advantages in the event a task blows a stack or writes
- * outside its memory area. However, in low memory systems the overhead of
- * the two pools plus the potential for unused memory in either pool is
- * very undesirable.
- *
- * In high memory environments, this is desirable when you want to use
- * the RTEMS "unlimited" objects option. You will be able to create objects
- * until you run out of memory.
- */
-#define CONFIGURE_UNIFIED_WORK_AREAS
-
-/*
* In this application, the initialization task performs the system
* initialization and then transforms itself into the idle task.
*/
diff --git a/testsuites/samples/minimum/minimum.doc b/testsuites/samples/minimum/minimum.doc
index 981286480f..f56c0e1f4e 100644
--- a/testsuites/samples/minimum/minimum.doc
+++ b/testsuites/samples/minimum/minimum.doc
@@ -1,9 +1,28 @@
+# SPDX-License-Identifier: BSD-2-Clause
+
# COPYRIGHT (c) 1989-1999.
# On-Line Applications Research Corporation (OAR).
#
-# The license and distribution terms for this file may be
-# found in the file LICENSE in this distribution or at
-# http://www.rtems.org/license/LICENSE.
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1. Redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+# 2. Redistributions in binary form must reproduce the above copyright
+# notice, this list of conditions and the following disclaimer in the
+# documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+# ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
+# LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+# POSSIBILITY OF SUCH DAMAGE.
#
diff --git a/testsuites/samples/nsecs/nsecs.doc b/testsuites/samples/nsecs/nsecs.doc
index 981286480f..f56c0e1f4e 100644
--- a/testsuites/samples/nsecs/nsecs.doc
+++ b/testsuites/samples/nsecs/nsecs.doc
@@ -1,9 +1,28 @@
+# SPDX-License-Identifier: BSD-2-Clause
+
# COPYRIGHT (c) 1989-1999.
# On-Line Applications Research Corporation (OAR).
#
-# The license and distribution terms for this file may be
-# found in the file LICENSE in this distribution or at
-# http://www.rtems.org/license/LICENSE.
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1. Redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+# 2. Redistributions in binary form must reproduce the above copyright
+# notice, this list of conditions and the following disclaimer in the
+# documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+# ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
+# LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+# POSSIBILITY OF SUCH DAMAGE.
#
diff --git a/testsuites/samples/paranoia/paranoia.doc b/testsuites/samples/paranoia/paranoia.doc
index 981286480f..f56c0e1f4e 100644
--- a/testsuites/samples/paranoia/paranoia.doc
+++ b/testsuites/samples/paranoia/paranoia.doc
@@ -1,9 +1,28 @@
+# SPDX-License-Identifier: BSD-2-Clause
+
# COPYRIGHT (c) 1989-1999.
# On-Line Applications Research Corporation (OAR).
#
-# The license and distribution terms for this file may be
-# found in the file LICENSE in this distribution or at
-# http://www.rtems.org/license/LICENSE.
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1. Redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+# 2. Redistributions in binary form must reproduce the above copyright
+# notice, this list of conditions and the following disclaimer in the
+# documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+# ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
+# LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+# POSSIBILITY OF SUCH DAMAGE.
#
diff --git a/testsuites/samples/ticker/ticker.doc b/testsuites/samples/ticker/ticker.doc
index 981286480f..f56c0e1f4e 100644
--- a/testsuites/samples/ticker/ticker.doc
+++ b/testsuites/samples/ticker/ticker.doc
@@ -1,9 +1,28 @@
+# SPDX-License-Identifier: BSD-2-Clause
+
# COPYRIGHT (c) 1989-1999.
# On-Line Applications Research Corporation (OAR).
#
-# The license and distribution terms for this file may be
-# found in the file LICENSE in this distribution or at
-# http://www.rtems.org/license/LICENSE.
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1. Redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+# 2. Redistributions in binary form must reproduce the above copyright
+# notice, this list of conditions and the following disclaimer in the
+# documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+# ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
+# LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+# POSSIBILITY OF SUCH DAMAGE.
#
diff --git a/testsuites/samples/unlimited/unlimited.doc b/testsuites/samples/unlimited/unlimited.doc
index efab1de603..87dbb2e689 100644
--- a/testsuites/samples/unlimited/unlimited.doc
+++ b/testsuites/samples/unlimited/unlimited.doc
@@ -1,3 +1,5 @@
+# SPDX-License-Identifier: BSD-2-Clause
+
# COPYRIGHT (c) 1989-1997.
# On-Line Applications Research Corporation (OAR).
#
diff --git a/testsuites/smptests/smp01/smp01.doc b/testsuites/smptests/smp01/smp01.doc
index e3bed542d7..4cfb25e2fa 100644
--- a/testsuites/smptests/smp01/smp01.doc
+++ b/testsuites/smptests/smp01/smp01.doc
@@ -1,9 +1,28 @@
+# SPDX-License-Identifier: BSD-2-Clause
+
# COPYRIGHT (c) 1989-2011.
# On-Line Applications Research Corporation (OAR).
#
-# The license and distribution terms for this file may be
-# found in the file LICENSE in this distribution or at
-# http://www.rtems.org/license/LICENSE.
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1. Redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+# 2. Redistributions in binary form must reproduce the above copyright
+# notice, this list of conditions and the following disclaimer in the
+# documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+# ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
+# LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+# POSSIBILITY OF SUCH DAMAGE.
#
This is a simple test that verifies that each of the smp
diff --git a/testsuites/smptests/smp02/smp02.doc b/testsuites/smptests/smp02/smp02.doc
index ba916d32dc..a197328dc2 100644
--- a/testsuites/smptests/smp02/smp02.doc
+++ b/testsuites/smptests/smp02/smp02.doc
@@ -1,9 +1,28 @@
+# SPDX-License-Identifier: BSD-2-Clause
+
# COPYRIGHT (c) 1989-2011.
# On-Line Applications Research Corporation (OAR).
#
-# The license and distribution terms for this file may be
-# found in the file LICENSE in this distribution or at
-# http://www.rtems.org/license/LICENSE.
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1. Redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+# 2. Redistributions in binary form must reproduce the above copyright
+# notice, this list of conditions and the following disclaimer in the
+# documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+# ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
+# LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+# POSSIBILITY OF SUCH DAMAGE.
#
This test creates tasks for each process (other than the
one that Init is running on). Then drops into a loop waiting
diff --git a/testsuites/smptests/smp03/smp03.doc b/testsuites/smptests/smp03/smp03.doc
index b7c3bb2853..c032ca6c60 100644
--- a/testsuites/smptests/smp03/smp03.doc
+++ b/testsuites/smptests/smp03/smp03.doc
@@ -1,9 +1,28 @@
+# SPDX-License-Identifier: BSD-2-Clause
+
# COPYRIGHT (c) 1989-2011.
# On-Line Applications Research Corporation (OAR).
#
-# The license and distribution terms for this file may be
-# found in the file LICENSE in this distribution or at
-# http://www.rtems.org/license/LICENSE.
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1. Redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+# 2. Redistributions in binary form must reproduce the above copyright
+# notice, this list of conditions and the following disclaimer in the
+# documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+# ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
+# LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+# POSSIBILITY OF SUCH DAMAGE.
#
This test runs the init task on the first CPU at a priority
of 5. The Init task creates tasks for each remaining processor
diff --git a/testsuites/smptests/smp05/init.c b/testsuites/smptests/smp05/init.c
index c8a9da2131..eb6461f3bc 100644
--- a/testsuites/smptests/smp05/init.c
+++ b/testsuites/smptests/smp05/init.c
@@ -35,6 +35,8 @@
const char rtems_test_name[] = "SMP 5";
+static volatile bool init_task_done;
+
rtems_task Init(
rtems_task_argument argument
);
@@ -54,6 +56,10 @@ rtems_task Test_task(
rtems_task_argument argument
)
{
+ while (!init_task_done) {
+ /* Wait */
+ }
+
locked_printf( "Shut down from CPU %" PRIu32 "\n", rtems_scheduler_get_processor() );
success();
}
@@ -95,6 +101,8 @@ rtems_task Init(
directive_failed( status, "task start" );
}
+ init_task_done = true;
+
while (1)
;
}
diff --git a/testsuites/smptests/smp05/smp05.doc b/testsuites/smptests/smp05/smp05.doc
index 8132fa18d7..10e57b05b3 100644
--- a/testsuites/smptests/smp05/smp05.doc
+++ b/testsuites/smptests/smp05/smp05.doc
@@ -1,9 +1,28 @@
+# SPDX-License-Identifier: BSD-2-Clause
+
# COPYRIGHT (c) 1989-2011.
# On-Line Applications Research Corporation (OAR).
#
-# The license and distribution terms for this file may be
-# found in the file LICENSE in this distribution or at
-# http://www.rtems.org/license/LICENSE.
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1. Redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+# 2. Redistributions in binary form must reproduce the above copyright
+# notice, this list of conditions and the following disclaimer in the
+# documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+# ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
+# LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+# POSSIBILITY OF SUCH DAMAGE.
#
This file describes the directives and concepts tested by this test set.
diff --git a/testsuites/smptests/smp07/init.c b/testsuites/smptests/smp07/init.c
index 3e1a852bd4..7066720a47 100644
--- a/testsuites/smptests/smp07/init.c
+++ b/testsuites/smptests/smp07/init.c
@@ -78,8 +78,6 @@ rtems_task Test_task(
if ( !TSRFired )
locked_printf( "*** ERROR TSR DID NOT FIRE BUT TEST TASK AWAKE***" );
- TaskRan = true;
-
/* Print that the task is up and running. */
locked_printf(
" CPU %" PRIu32 " running Task %s after semaphore release\n",
@@ -87,6 +85,8 @@ rtems_task Test_task(
name
);
+ TaskRan = true;
+
rtems_task_exit();
}
diff --git a/testsuites/smptests/smp07/smp07.doc b/testsuites/smptests/smp07/smp07.doc
index 1132584f10..c9d021fa83 100644
--- a/testsuites/smptests/smp07/smp07.doc
+++ b/testsuites/smptests/smp07/smp07.doc
@@ -1,9 +1,28 @@
+# SPDX-License-Identifier: BSD-2-Clause
+
# COPYRIGHT (c) 1989-2011.
# On-Line Applications Research Corporation (OAR).
#
-# The license and distribution terms for this file may be
-# found in the file LICENSE in this distribution or at
-# http://www.rtems.org/license/LICENSE.
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1. Redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+# 2. Redistributions in binary form must reproduce the above copyright
+# notice, this list of conditions and the following disclaimer in the
+# documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+# ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
+# LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+# POSSIBILITY OF SUCH DAMAGE.
#
This file describes the directives and concepts tested by this test set.
diff --git a/testsuites/smptests/smp08/smp08.doc b/testsuites/smptests/smp08/smp08.doc
index a2feb9c45d..513dbc6036 100644
--- a/testsuites/smptests/smp08/smp08.doc
+++ b/testsuites/smptests/smp08/smp08.doc
@@ -1,9 +1,28 @@
+# SPDX-License-Identifier: BSD-2-Clause
+
# COPYRIGHT (c) 1989-2011.
# On-Line Applications Research Corporation (OAR).
#
-# The license and distribution terms for this file may be
-# found in the file LICENSE in this distribution or at
-# http://www.rtems.org/license/LICENSE.
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1. Redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+# 2. Redistributions in binary form must reproduce the above copyright
+# notice, this list of conditions and the following disclaimer in the
+# documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+# ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
+# LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+# POSSIBILITY OF SUCH DAMAGE.
#
diff --git a/testsuites/smptests/smp08/tasks.c b/testsuites/smptests/smp08/tasks.c
index b71f437027..446c0d11da 100644
--- a/testsuites/smptests/smp08/tasks.c
+++ b/testsuites/smptests/smp08/tasks.c
@@ -54,8 +54,12 @@ rtems_task Test_task(
status = rtems_clock_get_tod( &time );
rtems_test_assert( status == RTEMS_SUCCESSFUL );
if ( time.second >= 35 ) {
- TEST_END();
- rtems_test_exit( 0 );
+ if ( task_index == 1 ) {
+ TEST_END();
+ rtems_test_exit( 0 );
+ } else {
+ rtems_task_exit();
+ }
}
PrintTaskInfo( p, &time );
diff --git a/testsuites/smptests/smp09/smp09.doc b/testsuites/smptests/smp09/smp09.doc
index 8836c94bc6..283234c858 100644
--- a/testsuites/smptests/smp09/smp09.doc
+++ b/testsuites/smptests/smp09/smp09.doc
@@ -1,9 +1,28 @@
+# SPDX-License-Identifier: BSD-2-Clause
+
# COPYRIGHT (c) 1989-2011.
# On-Line Applications Research Corporation (OAR).
#
-# The license and distribution terms for this file may be
-# found in the file LICENSE in this distribution or at
-# http://www.rtems.org/license/LICENSE.
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1. Redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+# 2. Redistributions in binary form must reproduce the above copyright
+# notice, this list of conditions and the following disclaimer in the
+# documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+# ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
+# LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+# POSSIBILITY OF SUCH DAMAGE.
#
This file describes the directives and concepts tested by this test set.
diff --git a/testsuites/smptests/smpaffinity01/smpaffinity01.doc b/testsuites/smptests/smpaffinity01/smpaffinity01.doc
index fe6225ba62..c1f1c8518c 100644
--- a/testsuites/smptests/smpaffinity01/smpaffinity01.doc
+++ b/testsuites/smptests/smpaffinity01/smpaffinity01.doc
@@ -1,9 +1,28 @@
+# SPDX-License-Identifier: BSD-2-Clause
+
# COPYRIGHT (c) 1989-2014.
# On-Line Applications Research Corporation (OAR).
#
-# The license and distribution terms for this file may be
-# found in the file LICENSE in this distribution or at
-# http://www.rtems.org/license/LICENSE.
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1. Redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+# 2. Redistributions in binary form must reproduce the above copyright
+# notice, this list of conditions and the following disclaimer in the
+# documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+# ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
+# LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+# POSSIBILITY OF SUCH DAMAGE.
#
This file describes the directives and concepts tested by this test set.
diff --git a/testsuites/smptests/smpatomic01/init.c b/testsuites/smptests/smpatomic01/init.c
index fa149c335a..a10c3d5990 100644
--- a/testsuites/smptests/smpatomic01/init.c
+++ b/testsuites/smptests/smpatomic01/init.c
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2013, 2016 embedded brains GmbH. All rights reserved.
+ * Copyright (C) 2013, 2016 embedded brains GmbH & Co. KG
*
* Copyright (c) 2013 Deng Hengyi.
*
diff --git a/testsuites/smptests/smpcache01/init.c b/testsuites/smptests/smpcache01/init.c
index 04e842eaa4..148a0fd9b7 100644
--- a/testsuites/smptests/smpcache01/init.c
+++ b/testsuites/smptests/smpcache01/init.c
@@ -2,7 +2,7 @@
/*
* Copyright (c) 2014 Aeroflex Gaisler AB. All rights reserved.
- * Copyright (c) 2017 embedded brains GmbH.
+ * Copyright (c) 2017 embedded brains GmbH & Co. KG
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
diff --git a/testsuites/smptests/smpcapture02/init.c b/testsuites/smptests/smpcapture02/init.c
index 4b11e6bbd7..e15945cb91 100644
--- a/testsuites/smptests/smpcapture02/init.c
+++ b/testsuites/smptests/smpcapture02/init.c
@@ -1,10 +1,29 @@
+/* SPDX-License-Identifier: BSD-2-Clause */
+
/*
* COPYRIGHT (c) 2015
* Cobham Gaisler
*
- * The license and distribution terms for this file may be
- * found in the file LICENSE in this distribution or at
- * http://www.rtems.org/license/LICENSE.
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
*/
/*
diff --git a/testsuites/smptests/smpclock01/init.c b/testsuites/smptests/smpclock01/init.c
index fc67542091..ffecf0ddaa 100644
--- a/testsuites/smptests/smpclock01/init.c
+++ b/testsuites/smptests/smpclock01/init.c
@@ -1,7 +1,7 @@
/* SPDX-License-Identifier: BSD-2-Clause */
/*
- * Copyright (c) 2016 embedded brains GmbH. All rights reserved.
+ * Copyright (c) 2016 embedded brains GmbH & Co. KG
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
diff --git a/testsuites/smptests/smpfatal01/init.c b/testsuites/smptests/smpfatal01/init.c
index d2a48d3fad..21673521b9 100644
--- a/testsuites/smptests/smpfatal01/init.c
+++ b/testsuites/smptests/smpfatal01/init.c
@@ -1,7 +1,7 @@
/* SPDX-License-Identifier: BSD-2-Clause */
/*
- * Copyright (c) 2014 embedded brains GmbH. All rights reserved.
+ * Copyright (c) 2014 embedded brains GmbH & Co. KG
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
diff --git a/testsuites/smptests/smpfatal02/init.c b/testsuites/smptests/smpfatal02/init.c
index c992aec334..19299a730f 100644
--- a/testsuites/smptests/smpfatal02/init.c
+++ b/testsuites/smptests/smpfatal02/init.c
@@ -1,7 +1,7 @@
/* SPDX-License-Identifier: BSD-2-Clause */
/*
- * Copyright (c) 2014, 2016 embedded brains GmbH. All rights reserved.
+ * Copyright (C) 2014, 2016 embedded brains GmbH & Co. KG
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
diff --git a/testsuites/smptests/smpfatal03/init.c b/testsuites/smptests/smpfatal03/init.c
index d1301b7150..ff42bd8b38 100644
--- a/testsuites/smptests/smpfatal03/init.c
+++ b/testsuites/smptests/smpfatal03/init.c
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2016 embedded brains GmbH. All rights reserved.
+ * Copyright (c) 2016 embedded brains GmbH & Co. KG
*
* The license and distribution terms for this file may be
* found in the file LICENSE in this distribution or at
diff --git a/testsuites/smptests/smpfatal04/init.c b/testsuites/smptests/smpfatal04/init.c
index 9d66ba1048..7674fde288 100644
--- a/testsuites/smptests/smpfatal04/init.c
+++ b/testsuites/smptests/smpfatal04/init.c
@@ -1,7 +1,7 @@
/* SPDX-License-Identifier: BSD-2-Clause */
/*
- * Copyright (c) 2014 embedded brains GmbH. All rights reserved.
+ * Copyright (c) 2014 embedded brains GmbH & Co. KG
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
diff --git a/testsuites/smptests/smpfatal05/init.c b/testsuites/smptests/smpfatal05/init.c
index 69aaf03863..ad9e32240f 100644
--- a/testsuites/smptests/smpfatal05/init.c
+++ b/testsuites/smptests/smpfatal05/init.c
@@ -1,7 +1,7 @@
/* SPDX-License-Identifier: BSD-2-Clause */
/*
- * Copyright (c) 2014 embedded brains GmbH. All rights reserved.
+ * Copyright (c) 2014 embedded brains GmbH & Co. KG
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
diff --git a/testsuites/smptests/smpfatal06/init.c b/testsuites/smptests/smpfatal06/init.c
index 93db300939..b48664f253 100644
--- a/testsuites/smptests/smpfatal06/init.c
+++ b/testsuites/smptests/smpfatal06/init.c
@@ -1,7 +1,7 @@
/* SPDX-License-Identifier: BSD-2-Clause */
/*
- * Copyright (c) 2016 embedded brains GmbH. All rights reserved.
+ * Copyright (c) 2016 embedded brains GmbH & Co. KG
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
diff --git a/testsuites/smptests/smpfatal08/init.c b/testsuites/smptests/smpfatal08/init.c
index 484f8959a1..6ad59f204b 100644
--- a/testsuites/smptests/smpfatal08/init.c
+++ b/testsuites/smptests/smpfatal08/init.c
@@ -1,7 +1,7 @@
/* SPDX-License-Identifier: BSD-2-Clause */
/*
- * Copyright (c) 2014 embedded brains GmbH. All rights reserved.
+ * Copyright (c) 2014 embedded brains GmbH & Co. KG
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
diff --git a/testsuites/smptests/smpfatal09/init.c b/testsuites/smptests/smpfatal09/init.c
index dfdd11d84c..6caca32c82 100644
--- a/testsuites/smptests/smpfatal09/init.c
+++ b/testsuites/smptests/smpfatal09/init.c
@@ -1,7 +1,7 @@
/*
* SPDX-License-Identifier: BSD-2-Clause
*
- * Copyright (C) 2018 embedded brains GmbH
+ * Copyright (C) 2018 embedded brains GmbH & Co. KG
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
diff --git a/testsuites/smptests/smpipi01/init.c b/testsuites/smptests/smpipi01/init.c
index d54a1af3b8..f8172fed96 100644
--- a/testsuites/smptests/smpipi01/init.c
+++ b/testsuites/smptests/smpipi01/init.c
@@ -1,7 +1,7 @@
/* SPDX-License-Identifier: BSD-2-Clause */
/*
- * Copyright (c) 2014, 2019 embedded brains GmbH. All rights reserved.
+ * Copyright (C) 2014, 2019 embedded brains GmbH & Co. KG
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
@@ -198,6 +198,43 @@ static const Per_CPU_Job_context counter_1_job_context = {
.arg = &test_instance
};
+static void sync_handler(void *arg)
+{
+ test_context *ctx = arg;
+ SMP_barrier_State *bs = &ctx->worker_barrier_state;
+
+ /* (E) */
+ barrier(ctx, bs);
+}
+
+static const Per_CPU_Job_context sync_context = {
+ .handler = sync_handler,
+ .arg = &test_instance
+};
+
+static void wait_for_ipi_done(test_context *ctx, Per_CPU_Control *cpu)
+{
+ Per_CPU_Job job;
+ unsigned long done;
+
+ job.context = &sync_context;
+ _Per_CPU_Submit_job(cpu, &job);
+
+ while (cpu->isr_nest_level == 0) {
+ RTEMS_COMPILER_MEMORY_BARRIER();
+ }
+
+ /* (E) */
+ barrier(ctx, &ctx->main_barrier_state);
+
+ while (cpu->isr_nest_level != 0) {
+ RTEMS_COMPILER_MEMORY_BARRIER();
+ }
+
+ done = _Atomic_Load_ulong( &job.done, ATOMIC_ORDER_ACQUIRE );
+ rtems_test_assert( done == PER_CPU_JOB_DONE );
+}
+
static void test_send_message_flood(
test_context *ctx,
uint32_t cpu_count
@@ -211,20 +248,15 @@ static void test_send_message_flood(
ctx->jobs[cpu_index][0].context = &counter_0_job_context;
ctx->jobs[cpu_index][1].context = &counter_1_job_context;
- _Per_CPU_Submit_job(cpu, &ctx->jobs[cpu_index][0]);
+ _Per_CPU_Add_job(cpu, &ctx->jobs[cpu_index][0]);
}
for (cpu_index = 0; cpu_index < cpu_count; ++cpu_index) {
Per_CPU_Control *cpu;
- Per_CPU_Control *cpu_self;
uint32_t i;
cpu = _Per_CPU_Get_by_index(cpu_index);
- cpu_self = _Thread_Dispatch_disable();
- _SMP_Synchronize();
- _Thread_Dispatch_enable(cpu_self);
-
for (i = 0; i < cpu_count; ++i) {
if (i != cpu_index) {
ctx->copy_counters[i] = ctx->counters[i].value;
@@ -235,6 +267,10 @@ static void test_send_message_flood(
_SMP_Send_message(cpu, SMP_MESSAGE_PERFORM_JOBS);
}
+ if (cpu_index != cpu_index_self) {
+ wait_for_ipi_done(ctx, cpu);
+ }
+
for (i = 0; i < cpu_count; ++i) {
if (i != cpu_index) {
rtems_test_assert(ctx->copy_counters[i] == ctx->counters[i].value);
diff --git a/testsuites/smptests/smpirqs01/init.c b/testsuites/smptests/smpirqs01/init.c
index 03238227fd..7404c77418 100644
--- a/testsuites/smptests/smpirqs01/init.c
+++ b/testsuites/smptests/smpirqs01/init.c
@@ -1,7 +1,7 @@
/* SPDX-License-Identifier: BSD-2-Clause */
/*
- * Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+ * Copyright (C) 2020 embedded brains GmbH & Co. KG
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
diff --git a/testsuites/smptests/smpload01/init.c b/testsuites/smptests/smpload01/init.c
index d28e728746..5fb26acff9 100644
--- a/testsuites/smptests/smpload01/init.c
+++ b/testsuites/smptests/smpload01/init.c
@@ -1,7 +1,7 @@
/* SPDX-License-Identifier: BSD-2-Clause */
/*
- * Copyright (c) 2014 embedded brains GmbH. All rights reserved.
+ * Copyright (c) 2014 embedded brains GmbH & Co. KG
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
diff --git a/testsuites/smptests/smplock01/init.c b/testsuites/smptests/smplock01/init.c
index 9f162a5b12..2defa2b5c0 100644
--- a/testsuites/smptests/smplock01/init.c
+++ b/testsuites/smptests/smplock01/init.c
@@ -1,7 +1,7 @@
/* SPDX-License-Identifier: BSD-2-Clause */
/*
- * Copyright (c) 2013, 2016 embedded brains GmbH. All rights reserved.
+ * Copyright (C) 2013, 2024 embedded brains GmbH & Co. KG
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
@@ -47,6 +47,8 @@ const char rtems_test_name[] = "SMPLOCK 1";
typedef struct {
rtems_test_parallel_context base;
+ const char *test_sep;
+ const char *counter_sep;
unsigned long counter[TEST_COUNT];
unsigned long local_counter[CPU_COUNT][TEST_COUNT][CPU_COUNT];
SMP_lock_Control lock RTEMS_ALIGNED(CPU_CACHE_LINE_BYTES);
@@ -84,40 +86,69 @@ static rtems_interval test_init(
return test_duration();
}
+static const rtems_test_parallel_job test_jobs[TEST_COUNT];
+
static void test_fini(
test_context *ctx,
- const char *name,
+ const char *lock_type,
+ bool global_lock,
+ const char *section_type,
size_t test,
size_t active_workers
)
{
+ bool cascade = test_jobs[test].cascade;
unsigned long sum = 0;
- unsigned long n = active_workers;
- unsigned long i;
+ const char *value_sep;
+ size_t i;
+
+ if (active_workers == 1 || !cascade) {
+ printf(
+ "%s{\n"
+ " \"lock-type\": \"%s\",\n"
+ " \"lock-object\": \"%s\",\n"
+ " \"section-type\": \"%s\",\n"
+ " \"results\": [",
+ ctx->test_sep,
+ lock_type,
+ global_lock ? "global" : "local",
+ section_type
+ );
+ ctx->test_sep = ", ";
+ ctx->counter_sep = "\n ";
+ }
- printf(" <%s activeWorker=\"%lu\">\n", name, n);
+ printf(
+ "%s{\n"
+ " \"counter\": [", ctx->counter_sep);
+ ctx->counter_sep = "\n }, ";
+ value_sep = "";
- for (i = 0; i < n; ++i) {
+ for (i = 0; i < active_workers; ++i) {
unsigned long local_counter =
ctx->local_counter[active_workers - 1][test][i];
sum += local_counter;
printf(
- " <LocalCounter worker=\"%lu\">%lu</LocalCounter>\n",
- i,
+ "%s%lu",
+ value_sep,
local_counter
);
+ value_sep = ", ";
}
printf(
- " <GlobalCounter>%lu</GlobalCounter>\n"
- " <SumOfLocalCounter>%lu</SumOfLocalCounter>\n"
- " </%s>\n",
+ "],\n"
+ " \"global-counter\": %lu,\n"
+ " \"sum-of-local-counter\": %lu",
ctx->counter[test],
- sum,
- name
+ sum
);
+
+ if (active_workers == rtems_scheduler_get_processor_maximum() || !cascade) {
+ printf("\n }\n ]\n }");
+ }
}
static void test_0_body(
@@ -151,7 +182,9 @@ static void test_0_fini(
test_fini(
ctx,
- "GlobalTicketLockWithLocalCounter",
+ "Ticket Lock",
+ true,
+ "local counter",
0,
active_workers
);
@@ -188,7 +221,9 @@ static void test_1_fini(
test_fini(
ctx,
- "GlobalMCSLockWithLocalCounter",
+ "MCS Lock",
+ true,
+ "local counter",
1,
active_workers
);
@@ -226,7 +261,9 @@ static void test_2_fini(
test_fini(
ctx,
- "GlobalTicketLockWithGlobalCounter",
+ "Ticket Lock",
+ true,
+ "global counter",
2,
active_workers
);
@@ -264,7 +301,9 @@ static void test_3_fini(
test_fini(
ctx,
- "GlobalMCSLockWithGlobalCounter",
+ "MCS Lock",
+ true,
+ "global counter",
3,
active_workers
);
@@ -306,7 +345,9 @@ static void test_4_fini(
test_fini(
ctx,
- "LocalTicketLockWithLocalCounter",
+ "Ticket Lock",
+ false,
+ "local counter",
4,
active_workers
);
@@ -353,7 +394,9 @@ static void test_5_fini(
test_fini(
ctx,
- "LocalMCSLockWithLocalCounter",
+ "MCS Lock",
+ false,
+ "local counter",
5,
active_workers
);
@@ -399,7 +442,9 @@ static void test_6_fini(
test_fini(
ctx,
- "LocalTicketLockWithGlobalCounter",
+ "Ticket Lock",
+ false,
+ "global counter",
6,
active_workers
);
@@ -450,7 +495,9 @@ static void test_7_fini(
test_fini(
ctx,
- "LocalMCSLockWithGlobalCounter",
+ "MCS Lock",
+ false,
+ "global counter",
7,
active_workers
);
@@ -497,7 +544,9 @@ static void test_8_fini(
test_fini(
ctx,
- "GlobalTicketLockWithBusySection",
+ "Ticket Lock",
+ true,
+ "busy loop",
8,
active_workers
);
@@ -535,7 +584,9 @@ static void test_9_fini(
test_fini(
ctx,
- "GlobalMCSLockWithBusySection",
+ "MCS Lock",
+ true,
+ "busy loop",
9,
active_workers
);
@@ -595,7 +646,9 @@ static void test_10_fini(
test_fini(
ctx,
- "SequenceLock",
+ "Sequence Lock",
+ true,
+ "two global counter",
10,
active_workers
);
@@ -634,7 +687,9 @@ static void test_11_fini(
test_fini(
ctx,
- "GlobalTASLockWithLocalCounter",
+ "TAS Lock",
+ true,
+ "local counter",
11,
active_workers
);
@@ -675,7 +730,9 @@ static void test_12_fini(
test_fini(
ctx,
- "GlobalTTASLockWithLocalCounter",
+ "TTAS Lock",
+ true,
+ "local counter",
12,
active_workers
);
@@ -753,11 +810,11 @@ static const rtems_test_parallel_job test_jobs[TEST_COUNT] = {
static void test(void)
{
test_context *ctx = &test_instance;
- const char *test = "SMPLock01";
- printf("<%s>\n", test);
+ printf("*** BEGIN OF JSON DATA ***\n[\n ");
+ ctx->test_sep = "";
rtems_test_parallel(&ctx->base, NULL, &test_jobs[0], TEST_COUNT);
- printf("</%s>\n", test);
+ printf("\n]\n*** END OF JSON DATA ***\n");
}
static void Init(rtems_task_argument arg)
diff --git a/testsuites/smptests/smplock01/smplock01.scn b/testsuites/smptests/smplock01/smplock01.scn
index 3d4b90f507..1d2e3c98e1 100644
--- a/testsuites/smptests/smplock01/smplock01.scn
+++ b/testsuites/smptests/smplock01/smplock01.scn
@@ -1,2576 +1,239 @@
+
+ SIS - SPARC/RISCV instruction simulator 2.30, copyright Jiri Gaisler 2020
+ Bug-reports to jiri@gaisler.se
+
+ GR740/LEON4 emulation enabled, 4 cpus online, delta 50 clocks
+
+ Loaded build/sparc/gr740/testsuites/smptests/smplock01.exe, entry 0x00000000
+
+
*** BEGIN OF TEST SMPLOCK 1 ***
-<SMPLock01>
- <GlobalTicketLockWithLocalCounter activeWorker="1">
- <LocalCounter worker="0">18357037</LocalCounter>
- <GlobalCounter>0</GlobalCounter>
- <SumOfLocalCounter>18357037</SumOfLocalCounter>
- </GlobalTicketLockWithLocalCounter>
- <GlobalTicketLockWithLocalCounter activeWorker="2">
- <LocalCounter worker="0">10121166</LocalCounter>
- <LocalCounter worker="1">10121320</LocalCounter>
- <GlobalCounter>0</GlobalCounter>
- <SumOfLocalCounter>20242486</SumOfLocalCounter>
- </GlobalTicketLockWithLocalCounter>
- <GlobalTicketLockWithLocalCounter activeWorker="3">
- <LocalCounter worker="0">5707325</LocalCounter>
- <LocalCounter worker="1">5707356</LocalCounter>
- <LocalCounter worker="2">5707357</LocalCounter>
- <GlobalCounter>0</GlobalCounter>
- <SumOfLocalCounter>17122038</SumOfLocalCounter>
- </GlobalTicketLockWithLocalCounter>
- <GlobalTicketLockWithLocalCounter activeWorker="4">
- <LocalCounter worker="0">4194779</LocalCounter>
- <LocalCounter worker="1">4194794</LocalCounter>
- <LocalCounter worker="2">4194790</LocalCounter>
- <LocalCounter worker="3">4194794</LocalCounter>
- <GlobalCounter>0</GlobalCounter>
- <SumOfLocalCounter>16779157</SumOfLocalCounter>
- </GlobalTicketLockWithLocalCounter>
- <GlobalTicketLockWithLocalCounter activeWorker="5">
- <LocalCounter worker="0">3328106</LocalCounter>
- <LocalCounter worker="1">3328112</LocalCounter>
- <LocalCounter worker="2">3328107</LocalCounter>
- <LocalCounter worker="3">3328109</LocalCounter>
- <LocalCounter worker="4">3328114</LocalCounter>
- <GlobalCounter>0</GlobalCounter>
- <SumOfLocalCounter>16640548</SumOfLocalCounter>
- </GlobalTicketLockWithLocalCounter>
- <GlobalTicketLockWithLocalCounter activeWorker="6">
- <LocalCounter worker="0">2719456</LocalCounter>
- <LocalCounter worker="1">2719464</LocalCounter>
- <LocalCounter worker="2">2719465</LocalCounter>
- <LocalCounter worker="3">2719465</LocalCounter>
- <LocalCounter worker="4">2719465</LocalCounter>
- <LocalCounter worker="5">2719464</LocalCounter>
- <GlobalCounter>0</GlobalCounter>
- <SumOfLocalCounter>16316779</SumOfLocalCounter>
- </GlobalTicketLockWithLocalCounter>
- <GlobalTicketLockWithLocalCounter activeWorker="7">
- <LocalCounter worker="0">2281694</LocalCounter>
- <LocalCounter worker="1">2281698</LocalCounter>
- <LocalCounter worker="2">2281695</LocalCounter>
- <LocalCounter worker="3">2281700</LocalCounter>
- <LocalCounter worker="4">2281700</LocalCounter>
- <LocalCounter worker="5">2281697</LocalCounter>
- <LocalCounter worker="6">2281699</LocalCounter>
- <GlobalCounter>0</GlobalCounter>
- <SumOfLocalCounter>15971883</SumOfLocalCounter>
- </GlobalTicketLockWithLocalCounter>
- <GlobalTicketLockWithLocalCounter activeWorker="8">
- <LocalCounter worker="0">1973749</LocalCounter>
- <LocalCounter worker="1">1973751</LocalCounter>
- <LocalCounter worker="2">1973749</LocalCounter>
- <LocalCounter worker="3">1973754</LocalCounter>
- <LocalCounter worker="4">1973753</LocalCounter>
- <LocalCounter worker="5">1973751</LocalCounter>
- <LocalCounter worker="6">1973749</LocalCounter>
- <LocalCounter worker="7">1973749</LocalCounter>
- <GlobalCounter>0</GlobalCounter>
- <SumOfLocalCounter>15790005</SumOfLocalCounter>
- </GlobalTicketLockWithLocalCounter>
- <GlobalTicketLockWithLocalCounter activeWorker="9">
- <LocalCounter worker="0">531562</LocalCounter>
- <LocalCounter worker="1">531561</LocalCounter>
- <LocalCounter worker="2">531558</LocalCounter>
- <LocalCounter worker="3">531556</LocalCounter>
- <LocalCounter worker="4">531562</LocalCounter>
- <LocalCounter worker="5">531566</LocalCounter>
- <LocalCounter worker="6">531561</LocalCounter>
- <LocalCounter worker="7">531560</LocalCounter>
- <LocalCounter worker="8">531589</LocalCounter>
- <GlobalCounter>0</GlobalCounter>
- <SumOfLocalCounter>4784075</SumOfLocalCounter>
- </GlobalTicketLockWithLocalCounter>
- <GlobalTicketLockWithLocalCounter activeWorker="10">
- <LocalCounter worker="0">467120</LocalCounter>
- <LocalCounter worker="1">467127</LocalCounter>
- <LocalCounter worker="2">467117</LocalCounter>
- <LocalCounter worker="3">467120</LocalCounter>
- <LocalCounter worker="4">467123</LocalCounter>
- <LocalCounter worker="5">467116</LocalCounter>
- <LocalCounter worker="6">467122</LocalCounter>
- <LocalCounter worker="7">467116</LocalCounter>
- <LocalCounter worker="8">467180</LocalCounter>
- <LocalCounter worker="9">467179</LocalCounter>
- <GlobalCounter>0</GlobalCounter>
- <SumOfLocalCounter>4671320</SumOfLocalCounter>
- </GlobalTicketLockWithLocalCounter>
- <GlobalTicketLockWithLocalCounter activeWorker="11">
- <LocalCounter worker="0">426740</LocalCounter>
- <LocalCounter worker="1">426739</LocalCounter>
- <LocalCounter worker="2">426742</LocalCounter>
- <LocalCounter worker="3">426737</LocalCounter>
- <LocalCounter worker="4">426740</LocalCounter>
- <LocalCounter worker="5">426741</LocalCounter>
- <LocalCounter worker="6">426747</LocalCounter>
- <LocalCounter worker="7">426735</LocalCounter>
- <LocalCounter worker="8">426768</LocalCounter>
- <LocalCounter worker="9">426765</LocalCounter>
- <LocalCounter worker="10">426767</LocalCounter>
- <GlobalCounter>0</GlobalCounter>
- <SumOfLocalCounter>4694221</SumOfLocalCounter>
- </GlobalTicketLockWithLocalCounter>
- <GlobalTicketLockWithLocalCounter activeWorker="12">
- <LocalCounter worker="0">388705</LocalCounter>
- <LocalCounter worker="1">388703</LocalCounter>
- <LocalCounter worker="2">388710</LocalCounter>
- <LocalCounter worker="3">388706</LocalCounter>
- <LocalCounter worker="4">388701</LocalCounter>
- <LocalCounter worker="5">388702</LocalCounter>
- <LocalCounter worker="6">388702</LocalCounter>
- <LocalCounter worker="7">388705</LocalCounter>
- <LocalCounter worker="8">388740</LocalCounter>
- <LocalCounter worker="9">388739</LocalCounter>
- <LocalCounter worker="10">388740</LocalCounter>
- <LocalCounter worker="11">388739</LocalCounter>
- <GlobalCounter>0</GlobalCounter>
- <SumOfLocalCounter>4664592</SumOfLocalCounter>
- </GlobalTicketLockWithLocalCounter>
- <GlobalTicketLockWithLocalCounter activeWorker="13">
- <LocalCounter worker="0">356920</LocalCounter>
- <LocalCounter worker="1">356917</LocalCounter>
- <LocalCounter worker="2">356916</LocalCounter>
- <LocalCounter worker="3">356917</LocalCounter>
- <LocalCounter worker="4">356920</LocalCounter>
- <LocalCounter worker="5">356919</LocalCounter>
- <LocalCounter worker="6">356920</LocalCounter>
- <LocalCounter worker="7">356917</LocalCounter>
- <LocalCounter worker="8">356948</LocalCounter>
- <LocalCounter worker="9">356947</LocalCounter>
- <LocalCounter worker="10">356948</LocalCounter>
- <LocalCounter worker="11">356947</LocalCounter>
- <LocalCounter worker="12">356953</LocalCounter>
- <GlobalCounter>0</GlobalCounter>
- <SumOfLocalCounter>4640089</SumOfLocalCounter>
- </GlobalTicketLockWithLocalCounter>
- <GlobalTicketLockWithLocalCounter activeWorker="14">
- <LocalCounter worker="0">330192</LocalCounter>
- <LocalCounter worker="1">330192</LocalCounter>
- <LocalCounter worker="2">330186</LocalCounter>
- <LocalCounter worker="3">330185</LocalCounter>
- <LocalCounter worker="4">330190</LocalCounter>
- <LocalCounter worker="5">330183</LocalCounter>
- <LocalCounter worker="6">330187</LocalCounter>
- <LocalCounter worker="7">330187</LocalCounter>
- <LocalCounter worker="8">330226</LocalCounter>
- <LocalCounter worker="9">330225</LocalCounter>
- <LocalCounter worker="10">330225</LocalCounter>
- <LocalCounter worker="11">330228</LocalCounter>
- <LocalCounter worker="12">330225</LocalCounter>
- <LocalCounter worker="13">330226</LocalCounter>
- <GlobalCounter>0</GlobalCounter>
- <SumOfLocalCounter>4622857</SumOfLocalCounter>
- </GlobalTicketLockWithLocalCounter>
- <GlobalTicketLockWithLocalCounter activeWorker="15">
- <LocalCounter worker="0">303180</LocalCounter>
- <LocalCounter worker="1">303186</LocalCounter>
- <LocalCounter worker="2">303190</LocalCounter>
- <LocalCounter worker="3">303180</LocalCounter>
- <LocalCounter worker="4">303188</LocalCounter>
- <LocalCounter worker="5">303181</LocalCounter>
- <LocalCounter worker="6">303183</LocalCounter>
- <LocalCounter worker="7">303191</LocalCounter>
- <LocalCounter worker="8">303199</LocalCounter>
- <LocalCounter worker="9">303204</LocalCounter>
- <LocalCounter worker="10">303209</LocalCounter>
- <LocalCounter worker="11">303207</LocalCounter>
- <LocalCounter worker="12">303212</LocalCounter>
- <LocalCounter worker="13">303215</LocalCounter>
- <LocalCounter worker="14">303217</LocalCounter>
- <GlobalCounter>0</GlobalCounter>
- <SumOfLocalCounter>4547942</SumOfLocalCounter>
- </GlobalTicketLockWithLocalCounter>
- <GlobalTicketLockWithLocalCounter activeWorker="16">
- <LocalCounter worker="0">274980</LocalCounter>
- <LocalCounter worker="1">274975</LocalCounter>
- <LocalCounter worker="2">274979</LocalCounter>
- <LocalCounter worker="3">274983</LocalCounter>
- <LocalCounter worker="4">274979</LocalCounter>
- <LocalCounter worker="5">274977</LocalCounter>
- <LocalCounter worker="6">274974</LocalCounter>
- <LocalCounter worker="7">274980</LocalCounter>
- <LocalCounter worker="8">274977</LocalCounter>
- <LocalCounter worker="9">274984</LocalCounter>
- <LocalCounter worker="10">274983</LocalCounter>
- <LocalCounter worker="11">274981</LocalCounter>
- <LocalCounter worker="12">274982</LocalCounter>
- <LocalCounter worker="13">274978</LocalCounter>
- <LocalCounter worker="14">274980</LocalCounter>
- <LocalCounter worker="15">274977</LocalCounter>
- <GlobalCounter>0</GlobalCounter>
- <SumOfLocalCounter>4399669</SumOfLocalCounter>
- </GlobalTicketLockWithLocalCounter>
- <GlobalTicketLockWithLocalCounter activeWorker="17">
- <LocalCounter worker="0">261695</LocalCounter>
- <LocalCounter worker="1">261697</LocalCounter>
- <LocalCounter worker="2">261696</LocalCounter>
- <LocalCounter worker="3">261696</LocalCounter>
- <LocalCounter worker="4">261694</LocalCounter>
- <LocalCounter worker="5">261695</LocalCounter>
- <LocalCounter worker="6">261697</LocalCounter>
- <LocalCounter worker="7">261692</LocalCounter>
- <LocalCounter worker="8">261696</LocalCounter>
- <LocalCounter worker="9">261692</LocalCounter>
- <LocalCounter worker="10">261696</LocalCounter>
- <LocalCounter worker="11">261697</LocalCounter>
- <LocalCounter worker="12">261697</LocalCounter>
- <LocalCounter worker="13">261695</LocalCounter>
- <LocalCounter worker="14">261692</LocalCounter>
- <LocalCounter worker="15">261691</LocalCounter>
- <LocalCounter worker="16">261708</LocalCounter>
- <GlobalCounter>0</GlobalCounter>
- <SumOfLocalCounter>4448826</SumOfLocalCounter>
- </GlobalTicketLockWithLocalCounter>
- <GlobalTicketLockWithLocalCounter activeWorker="18">
- <LocalCounter worker="0">240007</LocalCounter>
- <LocalCounter worker="1">240008</LocalCounter>
- <LocalCounter worker="2">240007</LocalCounter>
- <LocalCounter worker="3">240008</LocalCounter>
- <LocalCounter worker="4">240010</LocalCounter>
- <LocalCounter worker="5">240007</LocalCounter>
- <LocalCounter worker="6">240006</LocalCounter>
- <LocalCounter worker="7">240008</LocalCounter>
- <LocalCounter worker="8">240008</LocalCounter>
- <LocalCounter worker="9">240007</LocalCounter>
- <LocalCounter worker="10">240010</LocalCounter>
- <LocalCounter worker="11">240007</LocalCounter>
- <LocalCounter worker="12">240010</LocalCounter>
- <LocalCounter worker="13">240007</LocalCounter>
- <LocalCounter worker="14">240007</LocalCounter>
- <LocalCounter worker="15">240010</LocalCounter>
- <LocalCounter worker="16">240020</LocalCounter>
- <LocalCounter worker="17">240017</LocalCounter>
- <GlobalCounter>0</GlobalCounter>
- <SumOfLocalCounter>4320164</SumOfLocalCounter>
- </GlobalTicketLockWithLocalCounter>
- <GlobalTicketLockWithLocalCounter activeWorker="19">
- <LocalCounter worker="0">225896</LocalCounter>
- <LocalCounter worker="1">225897</LocalCounter>
- <LocalCounter worker="2">225897</LocalCounter>
- <LocalCounter worker="3">225898</LocalCounter>
- <LocalCounter worker="4">225899</LocalCounter>
- <LocalCounter worker="5">225898</LocalCounter>
- <LocalCounter worker="6">225898</LocalCounter>
- <LocalCounter worker="7">225896</LocalCounter>
- <LocalCounter worker="8">225896</LocalCounter>
- <LocalCounter worker="9">225896</LocalCounter>
- <LocalCounter worker="10">225897</LocalCounter>
- <LocalCounter worker="11">225898</LocalCounter>
- <LocalCounter worker="12">225900</LocalCounter>
- <LocalCounter worker="13">225899</LocalCounter>
- <LocalCounter worker="14">225895</LocalCounter>
- <LocalCounter worker="15">225894</LocalCounter>
- <LocalCounter worker="16">225906</LocalCounter>
- <LocalCounter worker="17">225905</LocalCounter>
- <LocalCounter worker="18">225907</LocalCounter>
- <GlobalCounter>0</GlobalCounter>
- <SumOfLocalCounter>4292072</SumOfLocalCounter>
- </GlobalTicketLockWithLocalCounter>
- <GlobalTicketLockWithLocalCounter activeWorker="20">
- <LocalCounter worker="0">214338</LocalCounter>
- <LocalCounter worker="1">214338</LocalCounter>
- <LocalCounter worker="2">214338</LocalCounter>
- <LocalCounter worker="3">214336</LocalCounter>
- <LocalCounter worker="4">214338</LocalCounter>
- <LocalCounter worker="5">214337</LocalCounter>
- <LocalCounter worker="6">214335</LocalCounter>
- <LocalCounter worker="7">214337</LocalCounter>
- <LocalCounter worker="8">214338</LocalCounter>
- <LocalCounter worker="9">214337</LocalCounter>
- <LocalCounter worker="10">214337</LocalCounter>
- <LocalCounter worker="11">214338</LocalCounter>
- <LocalCounter worker="12">214337</LocalCounter>
- <LocalCounter worker="13">214337</LocalCounter>
- <LocalCounter worker="14">214339</LocalCounter>
- <LocalCounter worker="15">214338</LocalCounter>
- <LocalCounter worker="16">214343</LocalCounter>
- <LocalCounter worker="17">214343</LocalCounter>
- <LocalCounter worker="18">214345</LocalCounter>
- <LocalCounter worker="19">214345</LocalCounter>
- <GlobalCounter>0</GlobalCounter>
- <SumOfLocalCounter>4286774</SumOfLocalCounter>
- </GlobalTicketLockWithLocalCounter>
- <GlobalTicketLockWithLocalCounter activeWorker="21">
- <LocalCounter worker="0">198227</LocalCounter>
- <LocalCounter worker="1">198229</LocalCounter>
- <LocalCounter worker="2">198227</LocalCounter>
- <LocalCounter worker="3">198228</LocalCounter>
- <LocalCounter worker="4">198228</LocalCounter>
- <LocalCounter worker="5">198229</LocalCounter>
- <LocalCounter worker="6">198229</LocalCounter>
- <LocalCounter worker="7">198228</LocalCounter>
- <LocalCounter worker="8">198227</LocalCounter>
- <LocalCounter worker="9">198230</LocalCounter>
- <LocalCounter worker="10">198227</LocalCounter>
- <LocalCounter worker="11">198228</LocalCounter>
- <LocalCounter worker="12">198229</LocalCounter>
- <LocalCounter worker="13">198230</LocalCounter>
- <LocalCounter worker="14">198228</LocalCounter>
- <LocalCounter worker="15">198230</LocalCounter>
- <LocalCounter worker="16">198231</LocalCounter>
- <LocalCounter worker="17">198232</LocalCounter>
- <LocalCounter worker="18">198233</LocalCounter>
- <LocalCounter worker="19">198233</LocalCounter>
- <LocalCounter worker="20">198232</LocalCounter>
- <GlobalCounter>0</GlobalCounter>
- <SumOfLocalCounter>4162815</SumOfLocalCounter>
- </GlobalTicketLockWithLocalCounter>
- <GlobalTicketLockWithLocalCounter activeWorker="22">
- <LocalCounter worker="0">192321</LocalCounter>
- <LocalCounter worker="1">192322</LocalCounter>
- <LocalCounter worker="2">192322</LocalCounter>
- <LocalCounter worker="3">192323</LocalCounter>
- <LocalCounter worker="4">192325</LocalCounter>
- <LocalCounter worker="5">192324</LocalCounter>
- <LocalCounter worker="6">192323</LocalCounter>
- <LocalCounter worker="7">192324</LocalCounter>
- <LocalCounter worker="8">192325</LocalCounter>
- <LocalCounter worker="9">192325</LocalCounter>
- <LocalCounter worker="10">192323</LocalCounter>
- <LocalCounter worker="11">192323</LocalCounter>
- <LocalCounter worker="12">192323</LocalCounter>
- <LocalCounter worker="13">192323</LocalCounter>
- <LocalCounter worker="14">192324</LocalCounter>
- <LocalCounter worker="15">192324</LocalCounter>
- <LocalCounter worker="16">192329</LocalCounter>
- <LocalCounter worker="17">192326</LocalCounter>
- <LocalCounter worker="18">192325</LocalCounter>
- <LocalCounter worker="19">192329</LocalCounter>
- <LocalCounter worker="20">192326</LocalCounter>
- <LocalCounter worker="21">192327</LocalCounter>
- <GlobalCounter>0</GlobalCounter>
- <SumOfLocalCounter>4231136</SumOfLocalCounter>
- </GlobalTicketLockWithLocalCounter>
- <GlobalTicketLockWithLocalCounter activeWorker="23">
- <LocalCounter worker="0">177893</LocalCounter>
- <LocalCounter worker="1">177892</LocalCounter>
- <LocalCounter worker="2">177895</LocalCounter>
- <LocalCounter worker="3">177894</LocalCounter>
- <LocalCounter worker="4">177892</LocalCounter>
- <LocalCounter worker="5">177891</LocalCounter>
- <LocalCounter worker="6">177893</LocalCounter>
- <LocalCounter worker="7">177893</LocalCounter>
- <LocalCounter worker="8">177893</LocalCounter>
- <LocalCounter worker="9">177893</LocalCounter>
- <LocalCounter worker="10">177894</LocalCounter>
- <LocalCounter worker="11">177894</LocalCounter>
- <LocalCounter worker="12">177893</LocalCounter>
- <LocalCounter worker="13">177893</LocalCounter>
- <LocalCounter worker="14">177894</LocalCounter>
- <LocalCounter worker="15">177894</LocalCounter>
- <LocalCounter worker="16">177895</LocalCounter>
- <LocalCounter worker="17">177895</LocalCounter>
- <LocalCounter worker="18">177896</LocalCounter>
- <LocalCounter worker="19">177897</LocalCounter>
- <LocalCounter worker="20">177894</LocalCounter>
- <LocalCounter worker="21">177896</LocalCounter>
- <LocalCounter worker="22">177894</LocalCounter>
- <GlobalCounter>0</GlobalCounter>
- <SumOfLocalCounter>4091558</SumOfLocalCounter>
- </GlobalTicketLockWithLocalCounter>
- <GlobalTicketLockWithLocalCounter activeWorker="24">
- <LocalCounter worker="0">168726</LocalCounter>
- <LocalCounter worker="1">168726</LocalCounter>
- <LocalCounter worker="2">168726</LocalCounter>
- <LocalCounter worker="3">168726</LocalCounter>
- <LocalCounter worker="4">168726</LocalCounter>
- <LocalCounter worker="5">168725</LocalCounter>
- <LocalCounter worker="6">168726</LocalCounter>
- <LocalCounter worker="7">168726</LocalCounter>
- <LocalCounter worker="8">168726</LocalCounter>
- <LocalCounter worker="9">168726</LocalCounter>
- <LocalCounter worker="10">168728</LocalCounter>
- <LocalCounter worker="11">168727</LocalCounter>
- <LocalCounter worker="12">168727</LocalCounter>
- <LocalCounter worker="13">168726</LocalCounter>
- <LocalCounter worker="14">168726</LocalCounter>
- <LocalCounter worker="15">168728</LocalCounter>
- <LocalCounter worker="16">168727</LocalCounter>
- <LocalCounter worker="17">168729</LocalCounter>
- <LocalCounter worker="18">168726</LocalCounter>
- <LocalCounter worker="19">168725</LocalCounter>
- <LocalCounter worker="20">168728</LocalCounter>
- <LocalCounter worker="21">168727</LocalCounter>
- <LocalCounter worker="22">168726</LocalCounter>
- <LocalCounter worker="23">168726</LocalCounter>
- <GlobalCounter>0</GlobalCounter>
- <SumOfLocalCounter>4049435</SumOfLocalCounter>
- </GlobalTicketLockWithLocalCounter>
- <GlobalMCSLockWithLocalCounter activeWorker="1">
- <LocalCounter worker="0">13090449</LocalCounter>
- <GlobalCounter>0</GlobalCounter>
- <SumOfLocalCounter>13090449</SumOfLocalCounter>
- </GlobalMCSLockWithLocalCounter>
- <GlobalMCSLockWithLocalCounter activeWorker="2">
- <LocalCounter worker="0">6384726</LocalCounter>
- <LocalCounter worker="1">6384887</LocalCounter>
- <GlobalCounter>0</GlobalCounter>
- <SumOfLocalCounter>12769613</SumOfLocalCounter>
- </GlobalMCSLockWithLocalCounter>
- <GlobalMCSLockWithLocalCounter activeWorker="3">
- <LocalCounter worker="0">2955420</LocalCounter>
- <LocalCounter worker="1">2955434</LocalCounter>
- <LocalCounter worker="2">2955434</LocalCounter>
- <GlobalCounter>0</GlobalCounter>
- <SumOfLocalCounter>8866288</SumOfLocalCounter>
- </GlobalMCSLockWithLocalCounter>
- <GlobalMCSLockWithLocalCounter activeWorker="4">
- <LocalCounter worker="0">2866696</LocalCounter>
- <LocalCounter worker="1">2866710</LocalCounter>
- <LocalCounter worker="2">2866711</LocalCounter>
- <LocalCounter worker="3">2866708</LocalCounter>
- <GlobalCounter>0</GlobalCounter>
- <SumOfLocalCounter>11466825</SumOfLocalCounter>
- </GlobalMCSLockWithLocalCounter>
- <GlobalMCSLockWithLocalCounter activeWorker="5">
- <LocalCounter worker="0">2996690</LocalCounter>
- <LocalCounter worker="1">2996699</LocalCounter>
- <LocalCounter worker="2">2996701</LocalCounter>
- <LocalCounter worker="3">2996698</LocalCounter>
- <LocalCounter worker="4">2996701</LocalCounter>
- <GlobalCounter>0</GlobalCounter>
- <SumOfLocalCounter>14983489</SumOfLocalCounter>
- </GlobalMCSLockWithLocalCounter>
- <GlobalMCSLockWithLocalCounter activeWorker="6">
- <LocalCounter worker="0">2540852</LocalCounter>
- <LocalCounter worker="1">2540864</LocalCounter>
- <LocalCounter worker="2">2540864</LocalCounter>
- <LocalCounter worker="3">2540862</LocalCounter>
- <LocalCounter worker="4">2540861</LocalCounter>
- <LocalCounter worker="5">2540863</LocalCounter>
- <GlobalCounter>0</GlobalCounter>
- <SumOfLocalCounter>15245166</SumOfLocalCounter>
- </GlobalMCSLockWithLocalCounter>
- <GlobalMCSLockWithLocalCounter activeWorker="7">
- <LocalCounter worker="0">2182035</LocalCounter>
- <LocalCounter worker="1">2182054</LocalCounter>
- <LocalCounter worker="2">2182053</LocalCounter>
- <LocalCounter worker="3">2182053</LocalCounter>
- <LocalCounter worker="4">2182053</LocalCounter>
- <LocalCounter worker="5">2182055</LocalCounter>
- <LocalCounter worker="6">2182055</LocalCounter>
- <GlobalCounter>0</GlobalCounter>
- <SumOfLocalCounter>15274358</SumOfLocalCounter>
- </GlobalMCSLockWithLocalCounter>
- <GlobalMCSLockWithLocalCounter activeWorker="8">
- <LocalCounter worker="0">1920366</LocalCounter>
- <LocalCounter worker="1">1920373</LocalCounter>
- <LocalCounter worker="2">1920374</LocalCounter>
- <LocalCounter worker="3">1920373</LocalCounter>
- <LocalCounter worker="4">1920371</LocalCounter>
- <LocalCounter worker="5">1920374</LocalCounter>
- <LocalCounter worker="6">1920373</LocalCounter>
- <LocalCounter worker="7">1920372</LocalCounter>
- <GlobalCounter>0</GlobalCounter>
- <SumOfLocalCounter>15362976</SumOfLocalCounter>
- </GlobalMCSLockWithLocalCounter>
- <GlobalMCSLockWithLocalCounter activeWorker="9">
- <LocalCounter worker="0">1216597</LocalCounter>
- <LocalCounter worker="1">1216602</LocalCounter>
- <LocalCounter worker="2">1216602</LocalCounter>
- <LocalCounter worker="3">1216602</LocalCounter>
- <LocalCounter worker="4">1216601</LocalCounter>
- <LocalCounter worker="5">1216602</LocalCounter>
- <LocalCounter worker="6">1216603</LocalCounter>
- <LocalCounter worker="7">1216601</LocalCounter>
- <LocalCounter worker="8">1216600</LocalCounter>
- <GlobalCounter>0</GlobalCounter>
- <SumOfLocalCounter>10949410</SumOfLocalCounter>
- </GlobalMCSLockWithLocalCounter>
- <GlobalMCSLockWithLocalCounter activeWorker="10">
- <LocalCounter worker="0">1007168</LocalCounter>
- <LocalCounter worker="1">1007170</LocalCounter>
- <LocalCounter worker="2">1007171</LocalCounter>
- <LocalCounter worker="3">1007170</LocalCounter>
- <LocalCounter worker="4">1007170</LocalCounter>
- <LocalCounter worker="5">1007170</LocalCounter>
- <LocalCounter worker="6">1007171</LocalCounter>
- <LocalCounter worker="7">1007170</LocalCounter>
- <LocalCounter worker="8">1007170</LocalCounter>
- <LocalCounter worker="9">1007171</LocalCounter>
- <GlobalCounter>0</GlobalCounter>
- <SumOfLocalCounter>10071701</SumOfLocalCounter>
- </GlobalMCSLockWithLocalCounter>
- <GlobalMCSLockWithLocalCounter activeWorker="11">
- <LocalCounter worker="0">772281</LocalCounter>
- <LocalCounter worker="1">772283</LocalCounter>
- <LocalCounter worker="2">772283</LocalCounter>
- <LocalCounter worker="3">772284</LocalCounter>
- <LocalCounter worker="4">772281</LocalCounter>
- <LocalCounter worker="5">772283</LocalCounter>
- <LocalCounter worker="6">772283</LocalCounter>
- <LocalCounter worker="7">772282</LocalCounter>
- <LocalCounter worker="8">772281</LocalCounter>
- <LocalCounter worker="9">772282</LocalCounter>
- <LocalCounter worker="10">772282</LocalCounter>
- <GlobalCounter>0</GlobalCounter>
- <SumOfLocalCounter>8495105</SumOfLocalCounter>
- </GlobalMCSLockWithLocalCounter>
- <GlobalMCSLockWithLocalCounter activeWorker="12">
- <LocalCounter worker="0">672837</LocalCounter>
- <LocalCounter worker="1">672841</LocalCounter>
- <LocalCounter worker="2">672841</LocalCounter>
- <LocalCounter worker="3">672841</LocalCounter>
- <LocalCounter worker="4">672841</LocalCounter>
- <LocalCounter worker="5">672842</LocalCounter>
- <LocalCounter worker="6">672841</LocalCounter>
- <LocalCounter worker="7">672841</LocalCounter>
- <LocalCounter worker="8">672842</LocalCounter>
- <LocalCounter worker="9">672841</LocalCounter>
- <LocalCounter worker="10">672841</LocalCounter>
- <LocalCounter worker="11">672841</LocalCounter>
- <GlobalCounter>0</GlobalCounter>
- <SumOfLocalCounter>8074090</SumOfLocalCounter>
- </GlobalMCSLockWithLocalCounter>
- <GlobalMCSLockWithLocalCounter activeWorker="13">
- <LocalCounter worker="0">595160</LocalCounter>
- <LocalCounter worker="1">595163</LocalCounter>
- <LocalCounter worker="2">595162</LocalCounter>
- <LocalCounter worker="3">595163</LocalCounter>
- <LocalCounter worker="4">595161</LocalCounter>
- <LocalCounter worker="5">595162</LocalCounter>
- <LocalCounter worker="6">595162</LocalCounter>
- <LocalCounter worker="7">595163</LocalCounter>
- <LocalCounter worker="8">595162</LocalCounter>
- <LocalCounter worker="9">595162</LocalCounter>
- <LocalCounter worker="10">595162</LocalCounter>
- <LocalCounter worker="11">595162</LocalCounter>
- <LocalCounter worker="12">595162</LocalCounter>
- <GlobalCounter>0</GlobalCounter>
- <SumOfLocalCounter>7737106</SumOfLocalCounter>
- </GlobalMCSLockWithLocalCounter>
- <GlobalMCSLockWithLocalCounter activeWorker="14">
- <LocalCounter worker="0">581536</LocalCounter>
- <LocalCounter worker="1">581540</LocalCounter>
- <LocalCounter worker="2">581539</LocalCounter>
- <LocalCounter worker="3">581539</LocalCounter>
- <LocalCounter worker="4">581539</LocalCounter>
- <LocalCounter worker="5">581539</LocalCounter>
- <LocalCounter worker="6">581539</LocalCounter>
- <LocalCounter worker="7">581538</LocalCounter>
- <LocalCounter worker="8">581540</LocalCounter>
- <LocalCounter worker="9">581539</LocalCounter>
- <LocalCounter worker="10">581538</LocalCounter>
- <LocalCounter worker="11">581539</LocalCounter>
- <LocalCounter worker="12">581539</LocalCounter>
- <LocalCounter worker="13">581540</LocalCounter>
- <GlobalCounter>0</GlobalCounter>
- <SumOfLocalCounter>8141544</SumOfLocalCounter>
- </GlobalMCSLockWithLocalCounter>
- <GlobalMCSLockWithLocalCounter activeWorker="15">
- <LocalCounter worker="0">578439</LocalCounter>
- <LocalCounter worker="1">578441</LocalCounter>
- <LocalCounter worker="2">578442</LocalCounter>
- <LocalCounter worker="3">578441</LocalCounter>
- <LocalCounter worker="4">578442</LocalCounter>
- <LocalCounter worker="5">578441</LocalCounter>
- <LocalCounter worker="6">578442</LocalCounter>
- <LocalCounter worker="7">578444</LocalCounter>
- <LocalCounter worker="8">578441</LocalCounter>
- <LocalCounter worker="9">578442</LocalCounter>
- <LocalCounter worker="10">578441</LocalCounter>
- <LocalCounter worker="11">578440</LocalCounter>
- <LocalCounter worker="12">578441</LocalCounter>
- <LocalCounter worker="13">578441</LocalCounter>
- <LocalCounter worker="14">578442</LocalCounter>
- <GlobalCounter>0</GlobalCounter>
- <SumOfLocalCounter>8676620</SumOfLocalCounter>
- </GlobalMCSLockWithLocalCounter>
- <GlobalMCSLockWithLocalCounter activeWorker="16">
- <LocalCounter worker="0">527784</LocalCounter>
- <LocalCounter worker="1">527783</LocalCounter>
- <LocalCounter worker="2">527785</LocalCounter>
- <LocalCounter worker="3">527784</LocalCounter>
- <LocalCounter worker="4">527784</LocalCounter>
- <LocalCounter worker="5">527783</LocalCounter>
- <LocalCounter worker="6">527782</LocalCounter>
- <LocalCounter worker="7">527784</LocalCounter>
- <LocalCounter worker="8">527782</LocalCounter>
- <LocalCounter worker="9">527782</LocalCounter>
- <LocalCounter worker="10">527784</LocalCounter>
- <LocalCounter worker="11">527783</LocalCounter>
- <LocalCounter worker="12">527783</LocalCounter>
- <LocalCounter worker="13">527783</LocalCounter>
- <LocalCounter worker="14">527783</LocalCounter>
- <LocalCounter worker="15">527783</LocalCounter>
- <GlobalCounter>0</GlobalCounter>
- <SumOfLocalCounter>8444532</SumOfLocalCounter>
- </GlobalMCSLockWithLocalCounter>
- <GlobalMCSLockWithLocalCounter activeWorker="17">
- <LocalCounter worker="0">468012</LocalCounter>
- <LocalCounter worker="1">468009</LocalCounter>
- <LocalCounter worker="2">468009</LocalCounter>
- <LocalCounter worker="3">468010</LocalCounter>
- <LocalCounter worker="4">468011</LocalCounter>
- <LocalCounter worker="5">468010</LocalCounter>
- <LocalCounter worker="6">468011</LocalCounter>
- <LocalCounter worker="7">468009</LocalCounter>
- <LocalCounter worker="8">468009</LocalCounter>
- <LocalCounter worker="9">468010</LocalCounter>
- <LocalCounter worker="10">468011</LocalCounter>
- <LocalCounter worker="11">468012</LocalCounter>
- <LocalCounter worker="12">468009</LocalCounter>
- <LocalCounter worker="13">468011</LocalCounter>
- <LocalCounter worker="14">468011</LocalCounter>
- <LocalCounter worker="15">468011</LocalCounter>
- <LocalCounter worker="16">468012</LocalCounter>
- <GlobalCounter>0</GlobalCounter>
- <SumOfLocalCounter>7956177</SumOfLocalCounter>
- </GlobalMCSLockWithLocalCounter>
- <GlobalMCSLockWithLocalCounter activeWorker="18">
- <LocalCounter worker="0">439238</LocalCounter>
- <LocalCounter worker="1">439222</LocalCounter>
- <LocalCounter worker="2">439228</LocalCounter>
- <LocalCounter worker="3">439225</LocalCounter>
- <LocalCounter worker="4">439226</LocalCounter>
- <LocalCounter worker="5">439228</LocalCounter>
- <LocalCounter worker="6">439226</LocalCounter>
- <LocalCounter worker="7">439219</LocalCounter>
- <LocalCounter worker="8">439231</LocalCounter>
- <LocalCounter worker="9">439213</LocalCounter>
- <LocalCounter worker="10">439226</LocalCounter>
- <LocalCounter worker="11">439215</LocalCounter>
- <LocalCounter worker="12">439215</LocalCounter>
- <LocalCounter worker="13">439222</LocalCounter>
- <LocalCounter worker="14">439224</LocalCounter>
- <LocalCounter worker="15">439217</LocalCounter>
- <LocalCounter worker="16">439226</LocalCounter>
- <LocalCounter worker="17">439230</LocalCounter>
- <GlobalCounter>0</GlobalCounter>
- <SumOfLocalCounter>7906031</SumOfLocalCounter>
- </GlobalMCSLockWithLocalCounter>
- <GlobalMCSLockWithLocalCounter activeWorker="19">
- <LocalCounter worker="0">392577</LocalCounter>
- <LocalCounter worker="1">392658</LocalCounter>
- <LocalCounter worker="2">392677</LocalCounter>
- <LocalCounter worker="3">392625</LocalCounter>
- <LocalCounter worker="4">392645</LocalCounter>
- <LocalCounter worker="5">392611</LocalCounter>
- <LocalCounter worker="6">392643</LocalCounter>
- <LocalCounter worker="7">392617</LocalCounter>
- <LocalCounter worker="8">392519</LocalCounter>
- <LocalCounter worker="9">392507</LocalCounter>
- <LocalCounter worker="10">392525</LocalCounter>
- <LocalCounter worker="11">392515</LocalCounter>
- <LocalCounter worker="12">392513</LocalCounter>
- <LocalCounter worker="13">392488</LocalCounter>
- <LocalCounter worker="14">392567</LocalCounter>
- <LocalCounter worker="15">392567</LocalCounter>
- <LocalCounter worker="16">392175</LocalCounter>
- <LocalCounter worker="17">392148</LocalCounter>
- <LocalCounter worker="18">392153</LocalCounter>
- <GlobalCounter>0</GlobalCounter>
- <SumOfLocalCounter>7457730</SumOfLocalCounter>
- </GlobalMCSLockWithLocalCounter>
- <GlobalMCSLockWithLocalCounter activeWorker="20">
- <LocalCounter worker="0">393189</LocalCounter>
- <LocalCounter worker="1">393145</LocalCounter>
- <LocalCounter worker="2">393365</LocalCounter>
- <LocalCounter worker="3">393284</LocalCounter>
- <LocalCounter worker="4">393215</LocalCounter>
- <LocalCounter worker="5">393191</LocalCounter>
- <LocalCounter worker="6">393247</LocalCounter>
- <LocalCounter worker="7">393229</LocalCounter>
- <LocalCounter worker="8">392255</LocalCounter>
- <LocalCounter worker="9">392239</LocalCounter>
- <LocalCounter worker="10">392268</LocalCounter>
- <LocalCounter worker="11">392259</LocalCounter>
- <LocalCounter worker="12">392312</LocalCounter>
- <LocalCounter worker="13">392395</LocalCounter>
- <LocalCounter worker="14">392318</LocalCounter>
- <LocalCounter worker="15">392431</LocalCounter>
- <LocalCounter worker="16">389204</LocalCounter>
- <LocalCounter worker="17">389161</LocalCounter>
- <LocalCounter worker="18">389146</LocalCounter>
- <LocalCounter worker="19">389191</LocalCounter>
- <GlobalCounter>0</GlobalCounter>
- <SumOfLocalCounter>7841044</SumOfLocalCounter>
- </GlobalMCSLockWithLocalCounter>
- <GlobalMCSLockWithLocalCounter activeWorker="21">
- <LocalCounter worker="0">333867</LocalCounter>
- <LocalCounter worker="1">333818</LocalCounter>
- <LocalCounter worker="2">333796</LocalCounter>
- <LocalCounter worker="3">333998</LocalCounter>
- <LocalCounter worker="4">333786</LocalCounter>
- <LocalCounter worker="5">333970</LocalCounter>
- <LocalCounter worker="6">333966</LocalCounter>
- <LocalCounter worker="7">333946</LocalCounter>
- <LocalCounter worker="8">331691</LocalCounter>
- <LocalCounter worker="9">331644</LocalCounter>
- <LocalCounter worker="10">331574</LocalCounter>
- <LocalCounter worker="11">331570</LocalCounter>
- <LocalCounter worker="12">331815</LocalCounter>
- <LocalCounter worker="13">331757</LocalCounter>
- <LocalCounter worker="14">331873</LocalCounter>
- <LocalCounter worker="15">331902</LocalCounter>
- <LocalCounter worker="16">321858</LocalCounter>
- <LocalCounter worker="17">321819</LocalCounter>
- <LocalCounter worker="18">321778</LocalCounter>
- <LocalCounter worker="19">321915</LocalCounter>
- <LocalCounter worker="20">322036</LocalCounter>
- <GlobalCounter>0</GlobalCounter>
- <SumOfLocalCounter>6934379</SumOfLocalCounter>
- </GlobalMCSLockWithLocalCounter>
- <GlobalMCSLockWithLocalCounter activeWorker="22">
- <LocalCounter worker="0">336076</LocalCounter>
- <LocalCounter worker="1">336030</LocalCounter>
- <LocalCounter worker="2">335863</LocalCounter>
- <LocalCounter worker="3">335861</LocalCounter>
- <LocalCounter worker="4">335954</LocalCounter>
- <LocalCounter worker="5">336069</LocalCounter>
- <LocalCounter worker="6">335963</LocalCounter>
- <LocalCounter worker="7">335891</LocalCounter>
- <LocalCounter worker="8">336178</LocalCounter>
- <LocalCounter worker="9">335697</LocalCounter>
- <LocalCounter worker="10">335574</LocalCounter>
- <LocalCounter worker="11">335581</LocalCounter>
- <LocalCounter worker="12">335586</LocalCounter>
- <LocalCounter worker="13">336068</LocalCounter>
- <LocalCounter worker="14">336138</LocalCounter>
- <LocalCounter worker="15">336049</LocalCounter>
- <LocalCounter worker="16">330987</LocalCounter>
- <LocalCounter worker="17">330865</LocalCounter>
- <LocalCounter worker="18">331086</LocalCounter>
- <LocalCounter worker="19">330937</LocalCounter>
- <LocalCounter worker="20">331150</LocalCounter>
- <LocalCounter worker="21">330937</LocalCounter>
- <GlobalCounter>0</GlobalCounter>
- <SumOfLocalCounter>7360540</SumOfLocalCounter>
- </GlobalMCSLockWithLocalCounter>
- <GlobalMCSLockWithLocalCounter activeWorker="23">
- <LocalCounter worker="0">317093</LocalCounter>
- <LocalCounter worker="1">317207</LocalCounter>
- <LocalCounter worker="2">317153</LocalCounter>
- <LocalCounter worker="3">317177</LocalCounter>
- <LocalCounter worker="4">317207</LocalCounter>
- <LocalCounter worker="5">317164</LocalCounter>
- <LocalCounter worker="6">317198</LocalCounter>
- <LocalCounter worker="7">317132</LocalCounter>
- <LocalCounter worker="8">317445</LocalCounter>
- <LocalCounter worker="9">317166</LocalCounter>
- <LocalCounter worker="10">317044</LocalCounter>
- <LocalCounter worker="11">317000</LocalCounter>
- <LocalCounter worker="12">317012</LocalCounter>
- <LocalCounter worker="13">317587</LocalCounter>
- <LocalCounter worker="14">317522</LocalCounter>
- <LocalCounter worker="15">317568</LocalCounter>
- <LocalCounter worker="16">315579</LocalCounter>
- <LocalCounter worker="17">315563</LocalCounter>
- <LocalCounter worker="18">315657</LocalCounter>
- <LocalCounter worker="19">315582</LocalCounter>
- <LocalCounter worker="20">315453</LocalCounter>
- <LocalCounter worker="21">315445</LocalCounter>
- <LocalCounter worker="22">315774</LocalCounter>
- <GlobalCounter>0</GlobalCounter>
- <SumOfLocalCounter>7284728</SumOfLocalCounter>
- </GlobalMCSLockWithLocalCounter>
- <GlobalMCSLockWithLocalCounter activeWorker="24">
- <LocalCounter worker="0">312519</LocalCounter>
- <LocalCounter worker="1">312750</LocalCounter>
- <LocalCounter worker="2">312612</LocalCounter>
- <LocalCounter worker="3">312671</LocalCounter>
- <LocalCounter worker="4">312685</LocalCounter>
- <LocalCounter worker="5">312707</LocalCounter>
- <LocalCounter worker="6">312543</LocalCounter>
- <LocalCounter worker="7">312680</LocalCounter>
- <LocalCounter worker="8">313250</LocalCounter>
- <LocalCounter worker="9">312566</LocalCounter>
- <LocalCounter worker="10">312775</LocalCounter>
- <LocalCounter worker="11">312827</LocalCounter>
- <LocalCounter worker="12">312652</LocalCounter>
- <LocalCounter worker="13">313141</LocalCounter>
- <LocalCounter worker="14">313261</LocalCounter>
- <LocalCounter worker="15">313270</LocalCounter>
- <LocalCounter worker="16">312883</LocalCounter>
- <LocalCounter worker="17">312649</LocalCounter>
- <LocalCounter worker="18">312529</LocalCounter>
- <LocalCounter worker="19">312615</LocalCounter>
- <LocalCounter worker="20">312755</LocalCounter>
- <LocalCounter worker="21">312833</LocalCounter>
- <LocalCounter worker="22">312673</LocalCounter>
- <LocalCounter worker="23">312728</LocalCounter>
- <GlobalCounter>0</GlobalCounter>
- <SumOfLocalCounter>7506574</SumOfLocalCounter>
- </GlobalMCSLockWithLocalCounter>
- <GlobalTicketLockWithGlobalCounter activeWorker="24">
- <LocalCounter worker="0">149325</LocalCounter>
- <LocalCounter worker="1">149327</LocalCounter>
- <LocalCounter worker="2">149325</LocalCounter>
- <LocalCounter worker="3">149325</LocalCounter>
- <LocalCounter worker="4">149325</LocalCounter>
- <LocalCounter worker="5">149327</LocalCounter>
- <LocalCounter worker="6">149325</LocalCounter>
- <LocalCounter worker="7">149324</LocalCounter>
- <LocalCounter worker="8">149326</LocalCounter>
- <LocalCounter worker="9">149325</LocalCounter>
- <LocalCounter worker="10">149326</LocalCounter>
- <LocalCounter worker="11">149326</LocalCounter>
- <LocalCounter worker="12">149326</LocalCounter>
- <LocalCounter worker="13">149325</LocalCounter>
- <LocalCounter worker="14">149325</LocalCounter>
- <LocalCounter worker="15">149325</LocalCounter>
- <LocalCounter worker="16">149325</LocalCounter>
- <LocalCounter worker="17">149325</LocalCounter>
- <LocalCounter worker="18">149325</LocalCounter>
- <LocalCounter worker="19">149326</LocalCounter>
- <LocalCounter worker="20">149325</LocalCounter>
- <LocalCounter worker="21">149326</LocalCounter>
- <LocalCounter worker="22">149325</LocalCounter>
- <LocalCounter worker="23">149325</LocalCounter>
- <GlobalCounter>3583809</GlobalCounter>
- <SumOfLocalCounter>3583809</SumOfLocalCounter>
- </GlobalTicketLockWithGlobalCounter>
- <GlobalMCSLockWithGlobalCounter activeWorker="24">
- <LocalCounter worker="0">219612</LocalCounter>
- <LocalCounter worker="1">219612</LocalCounter>
- <LocalCounter worker="2">219612</LocalCounter>
- <LocalCounter worker="3">219612</LocalCounter>
- <LocalCounter worker="4">219612</LocalCounter>
- <LocalCounter worker="5">219612</LocalCounter>
- <LocalCounter worker="6">219613</LocalCounter>
- <LocalCounter worker="7">219612</LocalCounter>
- <LocalCounter worker="8">219612</LocalCounter>
- <LocalCounter worker="9">219614</LocalCounter>
- <LocalCounter worker="10">219612</LocalCounter>
- <LocalCounter worker="11">219611</LocalCounter>
- <LocalCounter worker="12">219613</LocalCounter>
- <LocalCounter worker="13">219614</LocalCounter>
- <LocalCounter worker="14">219612</LocalCounter>
- <LocalCounter worker="15">219612</LocalCounter>
- <LocalCounter worker="16">219613</LocalCounter>
- <LocalCounter worker="17">219613</LocalCounter>
- <LocalCounter worker="18">219611</LocalCounter>
- <LocalCounter worker="19">219612</LocalCounter>
- <LocalCounter worker="20">219611</LocalCounter>
- <LocalCounter worker="21">219612</LocalCounter>
- <LocalCounter worker="22">219612</LocalCounter>
- <LocalCounter worker="23">219613</LocalCounter>
- <GlobalCounter>5270694</GlobalCounter>
- <SumOfLocalCounter>5270694</SumOfLocalCounter>
- </GlobalMCSLockWithGlobalCounter>
- <LocalTicketLockWithLocalCounter activeWorker="1">
- <LocalCounter worker="0">17976591</LocalCounter>
- <GlobalCounter>0</GlobalCounter>
- <SumOfLocalCounter>17976591</SumOfLocalCounter>
- </LocalTicketLockWithLocalCounter>
- <LocalTicketLockWithLocalCounter activeWorker="2">
- <LocalCounter worker="0">17093434</LocalCounter>
- <LocalCounter worker="1">17094750</LocalCounter>
- <GlobalCounter>0</GlobalCounter>
- <SumOfLocalCounter>34188184</SumOfLocalCounter>
- </LocalTicketLockWithLocalCounter>
- <LocalTicketLockWithLocalCounter activeWorker="3">
- <LocalCounter worker="0">16126005</LocalCounter>
- <LocalCounter worker="1">16127191</LocalCounter>
- <LocalCounter worker="2">16875254</LocalCounter>
- <GlobalCounter>0</GlobalCounter>
- <SumOfLocalCounter>49128450</SumOfLocalCounter>
- </LocalTicketLockWithLocalCounter>
- <LocalTicketLockWithLocalCounter activeWorker="4">
- <LocalCounter worker="0">15412620</LocalCounter>
- <LocalCounter worker="1">15413887</LocalCounter>
- <LocalCounter worker="2">15366643</LocalCounter>
- <LocalCounter worker="3">15366578</LocalCounter>
- <GlobalCounter>0</GlobalCounter>
- <SumOfLocalCounter>61559728</SumOfLocalCounter>
- </LocalTicketLockWithLocalCounter>
- <LocalTicketLockWithLocalCounter activeWorker="5">
- <LocalCounter worker="0">16308721</LocalCounter>
- <LocalCounter worker="1">16310021</LocalCounter>
- <LocalCounter worker="2">16318960</LocalCounter>
- <LocalCounter worker="3">16318983</LocalCounter>
- <LocalCounter worker="4">16426938</LocalCounter>
- <GlobalCounter>0</GlobalCounter>
- <SumOfLocalCounter>81683623</SumOfLocalCounter>
- </LocalTicketLockWithLocalCounter>
- <LocalTicketLockWithLocalCounter activeWorker="6">
- <LocalCounter worker="0">15193884</LocalCounter>
- <LocalCounter worker="1">15195117</LocalCounter>
- <LocalCounter worker="2">15113407</LocalCounter>
- <LocalCounter worker="3">15121476</LocalCounter>
- <LocalCounter worker="4">15104027</LocalCounter>
- <LocalCounter worker="5">15104373</LocalCounter>
- <GlobalCounter>0</GlobalCounter>
- <SumOfLocalCounter>90832284</SumOfLocalCounter>
- </LocalTicketLockWithLocalCounter>
- <LocalTicketLockWithLocalCounter activeWorker="7">
- <LocalCounter worker="0">15794728</LocalCounter>
- <LocalCounter worker="1">15792858</LocalCounter>
- <LocalCounter worker="2">15790710</LocalCounter>
- <LocalCounter worker="3">15798703</LocalCounter>
- <LocalCounter worker="4">15746011</LocalCounter>
- <LocalCounter worker="5">15746393</LocalCounter>
- <LocalCounter worker="6">15839713</LocalCounter>
- <GlobalCounter>0</GlobalCounter>
- <SumOfLocalCounter>110509116</SumOfLocalCounter>
- </LocalTicketLockWithLocalCounter>
- <LocalTicketLockWithLocalCounter activeWorker="8">
- <LocalCounter worker="0">14538979</LocalCounter>
- <LocalCounter worker="1">14540011</LocalCounter>
- <LocalCounter worker="2">14540067</LocalCounter>
- <LocalCounter worker="3">14543590</LocalCounter>
- <LocalCounter worker="4">14523331</LocalCounter>
- <LocalCounter worker="5">14523800</LocalCounter>
- <LocalCounter worker="6">14541196</LocalCounter>
- <LocalCounter worker="7">14543759</LocalCounter>
- <GlobalCounter>0</GlobalCounter>
- <SumOfLocalCounter>116294733</SumOfLocalCounter>
- </LocalTicketLockWithLocalCounter>
- <LocalTicketLockWithLocalCounter activeWorker="9">
- <LocalCounter worker="0">14597172</LocalCounter>
- <LocalCounter worker="1">14598178</LocalCounter>
- <LocalCounter worker="2">14594621</LocalCounter>
- <LocalCounter worker="3">14598190</LocalCounter>
- <LocalCounter worker="4">14558148</LocalCounter>
- <LocalCounter worker="5">14558565</LocalCounter>
- <LocalCounter worker="6">14603981</LocalCounter>
- <LocalCounter worker="7">14614317</LocalCounter>
- <LocalCounter worker="8">18013252</LocalCounter>
- <GlobalCounter>0</GlobalCounter>
- <SumOfLocalCounter>134736424</SumOfLocalCounter>
- </LocalTicketLockWithLocalCounter>
- <LocalTicketLockWithLocalCounter activeWorker="10">
- <LocalCounter worker="0">14529346</LocalCounter>
- <LocalCounter worker="1">14530425</LocalCounter>
- <LocalCounter worker="2">14525274</LocalCounter>
- <LocalCounter worker="3">14530395</LocalCounter>
- <LocalCounter worker="4">14501600</LocalCounter>
- <LocalCounter worker="5">14501959</LocalCounter>
- <LocalCounter worker="6">14539379</LocalCounter>
- <LocalCounter worker="7">14546701</LocalCounter>
- <LocalCounter worker="8">16764576</LocalCounter>
- <LocalCounter worker="9">16764953</LocalCounter>
- <GlobalCounter>0</GlobalCounter>
- <SumOfLocalCounter>149734608</SumOfLocalCounter>
- </LocalTicketLockWithLocalCounter>
- <LocalTicketLockWithLocalCounter activeWorker="11">
- <LocalCounter worker="0">14552313</LocalCounter>
- <LocalCounter worker="1">14545774</LocalCounter>
- <LocalCounter worker="2">14543859</LocalCounter>
- <LocalCounter worker="3">14545590</LocalCounter>
- <LocalCounter worker="4">14521699</LocalCounter>
- <LocalCounter worker="5">14522178</LocalCounter>
- <LocalCounter worker="6">14548350</LocalCounter>
- <LocalCounter worker="7">14554882</LocalCounter>
- <LocalCounter worker="8">15834293</LocalCounter>
- <LocalCounter worker="9">15834734</LocalCounter>
- <LocalCounter worker="10">16861946</LocalCounter>
- <GlobalCounter>0</GlobalCounter>
- <SumOfLocalCounter>164865618</SumOfLocalCounter>
- </LocalTicketLockWithLocalCounter>
- <LocalTicketLockWithLocalCounter activeWorker="12">
- <LocalCounter worker="0">14544735</LocalCounter>
- <LocalCounter worker="1">14545749</LocalCounter>
- <LocalCounter worker="2">14545348</LocalCounter>
- <LocalCounter worker="3">14545729</LocalCounter>
- <LocalCounter worker="4">14531175</LocalCounter>
- <LocalCounter worker="5">14531582</LocalCounter>
- <LocalCounter worker="6">14545221</LocalCounter>
- <LocalCounter worker="7">14552316</LocalCounter>
- <LocalCounter worker="8">15709806</LocalCounter>
- <LocalCounter worker="9">15710183</LocalCounter>
- <LocalCounter worker="10">15613298</LocalCounter>
- <LocalCounter worker="11">15613336</LocalCounter>
- <GlobalCounter>0</GlobalCounter>
- <SumOfLocalCounter>178988478</SumOfLocalCounter>
- </LocalTicketLockWithLocalCounter>
- <LocalTicketLockWithLocalCounter activeWorker="13">
- <LocalCounter worker="0">14631943</LocalCounter>
- <LocalCounter worker="1">14629081</LocalCounter>
- <LocalCounter worker="2">14626428</LocalCounter>
- <LocalCounter worker="3">14629173</LocalCounter>
- <LocalCounter worker="4">14592751</LocalCounter>
- <LocalCounter worker="5">14593171</LocalCounter>
- <LocalCounter worker="6">14633428</LocalCounter>
- <LocalCounter worker="7">14642988</LocalCounter>
- <LocalCounter worker="8">16103014</LocalCounter>
- <LocalCounter worker="9">16103498</LocalCounter>
- <LocalCounter worker="10">16121344</LocalCounter>
- <LocalCounter worker="11">16121522</LocalCounter>
- <LocalCounter worker="12">16592935</LocalCounter>
- <GlobalCounter>0</GlobalCounter>
- <SumOfLocalCounter>198021276</SumOfLocalCounter>
- </LocalTicketLockWithLocalCounter>
- <LocalTicketLockWithLocalCounter activeWorker="14">
- <LocalCounter worker="0">14663977</LocalCounter>
- <LocalCounter worker="1">14657392</LocalCounter>
- <LocalCounter worker="2">14653868</LocalCounter>
- <LocalCounter worker="3">14657385</LocalCounter>
- <LocalCounter worker="4">14618995</LocalCounter>
- <LocalCounter worker="5">14619260</LocalCounter>
- <LocalCounter worker="6">14663280</LocalCounter>
- <LocalCounter worker="7">14669006</LocalCounter>
- <LocalCounter worker="8">14932649</LocalCounter>
- <LocalCounter worker="9">14933133</LocalCounter>
- <LocalCounter worker="10">14914884</LocalCounter>
- <LocalCounter worker="11">14922839</LocalCounter>
- <LocalCounter worker="12">14912239</LocalCounter>
- <LocalCounter worker="13">14912618</LocalCounter>
- <GlobalCounter>0</GlobalCounter>
- <SumOfLocalCounter>206731525</SumOfLocalCounter>
- </LocalTicketLockWithLocalCounter>
- <LocalTicketLockWithLocalCounter activeWorker="15">
- <LocalCounter worker="0">14574685</LocalCounter>
- <LocalCounter worker="1">14571820</LocalCounter>
- <LocalCounter worker="2">14569180</LocalCounter>
- <LocalCounter worker="3">14571882</LocalCounter>
- <LocalCounter worker="4">14535038</LocalCounter>
- <LocalCounter worker="5">14535448</LocalCounter>
- <LocalCounter worker="6">14576273</LocalCounter>
- <LocalCounter worker="7">14588007</LocalCounter>
- <LocalCounter worker="8">15847051</LocalCounter>
- <LocalCounter worker="9">15847907</LocalCounter>
- <LocalCounter worker="10">15842926</LocalCounter>
- <LocalCounter worker="11">15845292</LocalCounter>
- <LocalCounter worker="12">15844741</LocalCounter>
- <LocalCounter worker="13">15845144</LocalCounter>
- <LocalCounter worker="14">15858663</LocalCounter>
- <GlobalCounter>0</GlobalCounter>
- <SumOfLocalCounter>227454057</SumOfLocalCounter>
- </LocalTicketLockWithLocalCounter>
- <LocalTicketLockWithLocalCounter activeWorker="16">
- <LocalCounter worker="0">14565742</LocalCounter>
- <LocalCounter worker="1">14566794</LocalCounter>
- <LocalCounter worker="2">14563059</LocalCounter>
- <LocalCounter worker="3">14566698</LocalCounter>
- <LocalCounter worker="4">14539138</LocalCounter>
- <LocalCounter worker="5">14539550</LocalCounter>
- <LocalCounter worker="6">14572545</LocalCounter>
- <LocalCounter worker="7">14582815</LocalCounter>
- <LocalCounter worker="8">14708684</LocalCounter>
- <LocalCounter worker="9">14709444</LocalCounter>
- <LocalCounter worker="10">14704986</LocalCounter>
- <LocalCounter worker="11">14705363</LocalCounter>
- <LocalCounter worker="12">14739299</LocalCounter>
- <LocalCounter worker="13">14739959</LocalCounter>
- <LocalCounter worker="14">14685047</LocalCounter>
- <LocalCounter worker="15">14684929</LocalCounter>
- <GlobalCounter>0</GlobalCounter>
- <SumOfLocalCounter>234174052</SumOfLocalCounter>
- </LocalTicketLockWithLocalCounter>
- <LocalTicketLockWithLocalCounter activeWorker="17">
- <LocalCounter worker="0">14578846</LocalCounter>
- <LocalCounter worker="1">14579881</LocalCounter>
- <LocalCounter worker="2">14577981</LocalCounter>
- <LocalCounter worker="3">14579886</LocalCounter>
- <LocalCounter worker="4">14572709</LocalCounter>
- <LocalCounter worker="5">14573049</LocalCounter>
- <LocalCounter worker="6">14582536</LocalCounter>
- <LocalCounter worker="7">14584350</LocalCounter>
- <LocalCounter worker="8">15007742</LocalCounter>
- <LocalCounter worker="9">15008395</LocalCounter>
- <LocalCounter worker="10">15007420</LocalCounter>
- <LocalCounter worker="11">15007658</LocalCounter>
- <LocalCounter worker="12">15014167</LocalCounter>
- <LocalCounter worker="13">15014785</LocalCounter>
- <LocalCounter worker="14">15005244</LocalCounter>
- <LocalCounter worker="15">15005419</LocalCounter>
- <LocalCounter worker="16">18174844</LocalCounter>
- <GlobalCounter>0</GlobalCounter>
- <SumOfLocalCounter>254874912</SumOfLocalCounter>
- </LocalTicketLockWithLocalCounter>
- <LocalTicketLockWithLocalCounter activeWorker="18">
- <LocalCounter worker="0">14520800</LocalCounter>
- <LocalCounter worker="1">14521760</LocalCounter>
- <LocalCounter worker="2">14516500</LocalCounter>
- <LocalCounter worker="3">14519179</LocalCounter>
- <LocalCounter worker="4">14488245</LocalCounter>
- <LocalCounter worker="5">14488682</LocalCounter>
- <LocalCounter worker="6">14533956</LocalCounter>
- <LocalCounter worker="7">14545682</LocalCounter>
- <LocalCounter worker="8">14854184</LocalCounter>
- <LocalCounter worker="9">14854859</LocalCounter>
- <LocalCounter worker="10">14853940</LocalCounter>
- <LocalCounter worker="11">14854226</LocalCounter>
- <LocalCounter worker="12">14853922</LocalCounter>
- <LocalCounter worker="13">14854597</LocalCounter>
- <LocalCounter worker="14">14853928</LocalCounter>
- <LocalCounter worker="15">14854269</LocalCounter>
- <LocalCounter worker="16">16695502</LocalCounter>
- <LocalCounter worker="17">16695771</LocalCounter>
- <GlobalCounter>0</GlobalCounter>
- <SumOfLocalCounter>268360002</SumOfLocalCounter>
- </LocalTicketLockWithLocalCounter>
- <LocalTicketLockWithLocalCounter activeWorker="19">
- <LocalCounter worker="0">14767102</LocalCounter>
- <LocalCounter worker="1">14756811</LocalCounter>
- <LocalCounter worker="2">14754774</LocalCounter>
- <LocalCounter worker="3">14756725</LocalCounter>
- <LocalCounter worker="4">14720166</LocalCounter>
- <LocalCounter worker="5">14720526</LocalCounter>
- <LocalCounter worker="6">14759446</LocalCounter>
- <LocalCounter worker="7">14768164</LocalCounter>
- <LocalCounter worker="8">15010901</LocalCounter>
- <LocalCounter worker="9">15011570</LocalCounter>
- <LocalCounter worker="10">15010636</LocalCounter>
- <LocalCounter worker="11">15010954</LocalCounter>
- <LocalCounter worker="12">15010667</LocalCounter>
- <LocalCounter worker="13">15011279</LocalCounter>
- <LocalCounter worker="14">15010747</LocalCounter>
- <LocalCounter worker="15">15011090</LocalCounter>
- <LocalCounter worker="16">16740850</LocalCounter>
- <LocalCounter worker="17">16741140</LocalCounter>
- <LocalCounter worker="18">16740556</LocalCounter>
- <GlobalCounter>0</GlobalCounter>
- <SumOfLocalCounter>288314104</SumOfLocalCounter>
- </LocalTicketLockWithLocalCounter>
- <LocalTicketLockWithLocalCounter activeWorker="20">
- <LocalCounter worker="0">14503694</LocalCounter>
- <LocalCounter worker="1">14504695</LocalCounter>
- <LocalCounter worker="2">14504309</LocalCounter>
- <LocalCounter worker="3">14504656</LocalCounter>
- <LocalCounter worker="4">14481517</LocalCounter>
- <LocalCounter worker="5">14481930</LocalCounter>
- <LocalCounter worker="6">14504225</LocalCounter>
- <LocalCounter worker="7">14511441</LocalCounter>
- <LocalCounter worker="8">14881230</LocalCounter>
- <LocalCounter worker="9">14881959</LocalCounter>
- <LocalCounter worker="10">14880910</LocalCounter>
- <LocalCounter worker="11">14881278</LocalCounter>
- <LocalCounter worker="12">14881048</LocalCounter>
- <LocalCounter worker="13">14881629</LocalCounter>
- <LocalCounter worker="14">14881078</LocalCounter>
- <LocalCounter worker="15">14881274</LocalCounter>
- <LocalCounter worker="16">15921487</LocalCounter>
- <LocalCounter worker="17">15921957</LocalCounter>
- <LocalCounter worker="18">15772241</LocalCounter>
- <LocalCounter worker="19">15772141</LocalCounter>
- <GlobalCounter>0</GlobalCounter>
- <SumOfLocalCounter>298434699</SumOfLocalCounter>
- </LocalTicketLockWithLocalCounter>
- <LocalTicketLockWithLocalCounter activeWorker="21">
- <LocalCounter worker="0">14585345</LocalCounter>
- <LocalCounter worker="1">14586417</LocalCounter>
- <LocalCounter worker="2">14584462</LocalCounter>
- <LocalCounter worker="3">14586324</LocalCounter>
- <LocalCounter worker="4">14561834</LocalCounter>
- <LocalCounter worker="5">14562194</LocalCounter>
- <LocalCounter worker="6">14589003</LocalCounter>
- <LocalCounter worker="7">14593127</LocalCounter>
- <LocalCounter worker="8">14651792</LocalCounter>
- <LocalCounter worker="9">14652414</LocalCounter>
- <LocalCounter worker="10">14651588</LocalCounter>
- <LocalCounter worker="11">14651811</LocalCounter>
- <LocalCounter worker="12">14651560</LocalCounter>
- <LocalCounter worker="13">14652081</LocalCounter>
- <LocalCounter worker="14">14651657</LocalCounter>
- <LocalCounter worker="15">14651849</LocalCounter>
- <LocalCounter worker="16">15956242</LocalCounter>
- <LocalCounter worker="17">15956591</LocalCounter>
- <LocalCounter worker="18">15917381</LocalCounter>
- <LocalCounter worker="19">15917342</LocalCounter>
- <LocalCounter worker="20">16692459</LocalCounter>
- <GlobalCounter>0</GlobalCounter>
- <SumOfLocalCounter>314303473</SumOfLocalCounter>
- </LocalTicketLockWithLocalCounter>
- <LocalTicketLockWithLocalCounter activeWorker="22">
- <LocalCounter worker="0">14567398</LocalCounter>
- <LocalCounter worker="1">14564632</LocalCounter>
- <LocalCounter worker="2">14561858</LocalCounter>
- <LocalCounter worker="3">14564593</LocalCounter>
- <LocalCounter worker="4">14537808</LocalCounter>
- <LocalCounter worker="5">14538183</LocalCounter>
- <LocalCounter worker="6">14568901</LocalCounter>
- <LocalCounter worker="7">14571570</LocalCounter>
- <LocalCounter worker="8">14824939</LocalCounter>
- <LocalCounter worker="9">14825595</LocalCounter>
- <LocalCounter worker="10">14824563</LocalCounter>
- <LocalCounter worker="11">14824936</LocalCounter>
- <LocalCounter worker="12">14824664</LocalCounter>
- <LocalCounter worker="13">14825180</LocalCounter>
- <LocalCounter worker="14">14824622</LocalCounter>
- <LocalCounter worker="15">14824869</LocalCounter>
- <LocalCounter worker="16">15000394</LocalCounter>
- <LocalCounter worker="17">15000816</LocalCounter>
- <LocalCounter worker="18">15132415</LocalCounter>
- <LocalCounter worker="19">15132390</LocalCounter>
- <LocalCounter worker="20">14957113</LocalCounter>
- <LocalCounter worker="21">14957467</LocalCounter>
- <GlobalCounter>0</GlobalCounter>
- <SumOfLocalCounter>325254906</SumOfLocalCounter>
- </LocalTicketLockWithLocalCounter>
- <LocalTicketLockWithLocalCounter activeWorker="23">
- <LocalCounter worker="0">14533130</LocalCounter>
- <LocalCounter worker="1">14526680</LocalCounter>
- <LocalCounter worker="2">14523900</LocalCounter>
- <LocalCounter worker="3">14526694</LocalCounter>
- <LocalCounter worker="4">14473827</LocalCounter>
- <LocalCounter worker="5">14474177</LocalCounter>
- <LocalCounter worker="6">14530917</LocalCounter>
- <LocalCounter worker="7">14540399</LocalCounter>
- <LocalCounter worker="8">14689348</LocalCounter>
- <LocalCounter worker="9">14690045</LocalCounter>
- <LocalCounter worker="10">14689080</LocalCounter>
- <LocalCounter worker="11">14689352</LocalCounter>
- <LocalCounter worker="12">14689191</LocalCounter>
- <LocalCounter worker="13">14689822</LocalCounter>
- <LocalCounter worker="14">14689153</LocalCounter>
- <LocalCounter worker="15">14689383</LocalCounter>
- <LocalCounter worker="16">15149225</LocalCounter>
- <LocalCounter worker="17">15149721</LocalCounter>
- <LocalCounter worker="18">15149099</LocalCounter>
- <LocalCounter worker="19">15149020</LocalCounter>
- <LocalCounter worker="20">15149087</LocalCounter>
- <LocalCounter worker="21">15149374</LocalCounter>
- <LocalCounter worker="22">15723066</LocalCounter>
- <GlobalCounter>0</GlobalCounter>
- <SumOfLocalCounter>340263690</SumOfLocalCounter>
- </LocalTicketLockWithLocalCounter>
- <LocalTicketLockWithLocalCounter activeWorker="24">
- <LocalCounter worker="0">14520191</LocalCounter>
- <LocalCounter worker="1">14521316</LocalCounter>
- <LocalCounter worker="2">14520064</LocalCounter>
- <LocalCounter worker="3">14521273</LocalCounter>
- <LocalCounter worker="4">14508861</LocalCounter>
- <LocalCounter worker="5">14509277</LocalCounter>
- <LocalCounter worker="6">14522439</LocalCounter>
- <LocalCounter worker="7">14523376</LocalCounter>
- <LocalCounter worker="8">14971139</LocalCounter>
- <LocalCounter worker="9">14971788</LocalCounter>
- <LocalCounter worker="10">14970834</LocalCounter>
- <LocalCounter worker="11">14971145</LocalCounter>
- <LocalCounter worker="12">14970850</LocalCounter>
- <LocalCounter worker="13">14971356</LocalCounter>
- <LocalCounter worker="14">14970773</LocalCounter>
- <LocalCounter worker="15">14971212</LocalCounter>
- <LocalCounter worker="16">14302288</LocalCounter>
- <LocalCounter worker="17">14302674</LocalCounter>
- <LocalCounter worker="18">14292318</LocalCounter>
- <LocalCounter worker="19">14292258</LocalCounter>
- <LocalCounter worker="20">14327757</LocalCounter>
- <LocalCounter worker="21">14328109</LocalCounter>
- <LocalCounter worker="22">14203917</LocalCounter>
- <LocalCounter worker="23">14204596</LocalCounter>
- <GlobalCounter>0</GlobalCounter>
- <SumOfLocalCounter>350169811</SumOfLocalCounter>
- </LocalTicketLockWithLocalCounter>
- <LocalMCSLockWithLocalCounter activeWorker="1">
- <LocalCounter worker="0">12082070</LocalCounter>
- <GlobalCounter>0</GlobalCounter>
- <SumOfLocalCounter>12082070</SumOfLocalCounter>
- </LocalMCSLockWithLocalCounter>
- <LocalMCSLockWithLocalCounter activeWorker="2">
- <LocalCounter worker="0">11860565</LocalCounter>
- <LocalCounter worker="1">11861524</LocalCounter>
- <GlobalCounter>0</GlobalCounter>
- <SumOfLocalCounter>23722089</SumOfLocalCounter>
- </LocalMCSLockWithLocalCounter>
- <LocalMCSLockWithLocalCounter activeWorker="3">
- <LocalCounter worker="0">10937185</LocalCounter>
- <LocalCounter worker="1">11666176</LocalCounter>
- <LocalCounter worker="2">11377885</LocalCounter>
- <GlobalCounter>0</GlobalCounter>
- <SumOfLocalCounter>33981246</SumOfLocalCounter>
- </LocalMCSLockWithLocalCounter>
- <LocalMCSLockWithLocalCounter activeWorker="4">
- <LocalCounter worker="0">10711169</LocalCounter>
- <LocalCounter worker="1">11044642</LocalCounter>
- <LocalCounter worker="2">10712186</LocalCounter>
- <LocalCounter worker="3">10711772</LocalCounter>
- <GlobalCounter>0</GlobalCounter>
- <SumOfLocalCounter>43179769</SumOfLocalCounter>
- </LocalMCSLockWithLocalCounter>
- <LocalMCSLockWithLocalCounter activeWorker="5">
- <LocalCounter worker="0">10681736</LocalCounter>
- <LocalCounter worker="1">10803241</LocalCounter>
- <LocalCounter worker="2">10697774</LocalCounter>
- <LocalCounter worker="3">10697365</LocalCounter>
- <LocalCounter worker="4">10786731</LocalCounter>
- <GlobalCounter>0</GlobalCounter>
- <SumOfLocalCounter>53666847</SumOfLocalCounter>
- </LocalMCSLockWithLocalCounter>
- <LocalMCSLockWithLocalCounter activeWorker="6">
- <LocalCounter worker="0">10202899</LocalCounter>
- <LocalCounter worker="1">10453899</LocalCounter>
- <LocalCounter worker="2">10236078</LocalCounter>
- <LocalCounter worker="3">10235641</LocalCounter>
- <LocalCounter worker="4">10203405</LocalCounter>
- <LocalCounter worker="5">10435466</LocalCounter>
- <GlobalCounter>0</GlobalCounter>
- <SumOfLocalCounter>61767388</SumOfLocalCounter>
- </LocalMCSLockWithLocalCounter>
- <LocalMCSLockWithLocalCounter activeWorker="7">
- <LocalCounter worker="0">10057432</LocalCounter>
- <LocalCounter worker="1">10126310</LocalCounter>
- <LocalCounter worker="2">10062880</LocalCounter>
- <LocalCounter worker="3">10062441</LocalCounter>
- <LocalCounter worker="4">10056560</LocalCounter>
- <LocalCounter worker="5">10117801</LocalCounter>
- <LocalCounter worker="6">10136814</LocalCounter>
- <GlobalCounter>0</GlobalCounter>
- <SumOfLocalCounter>70620238</SumOfLocalCounter>
- </LocalMCSLockWithLocalCounter>
- <LocalMCSLockWithLocalCounter activeWorker="8">
- <LocalCounter worker="0">9534620</LocalCounter>
- <LocalCounter worker="1">9563972</LocalCounter>
- <LocalCounter worker="2">9529566</LocalCounter>
- <LocalCounter worker="3">9529136</LocalCounter>
- <LocalCounter worker="4">9534974</LocalCounter>
- <LocalCounter worker="5">9559121</LocalCounter>
- <LocalCounter worker="6">9532504</LocalCounter>
- <LocalCounter worker="7">9532098</LocalCounter>
- <GlobalCounter>0</GlobalCounter>
- <SumOfLocalCounter>76315991</SumOfLocalCounter>
- </LocalMCSLockWithLocalCounter>
- <LocalMCSLockWithLocalCounter activeWorker="9">
- <LocalCounter worker="0">9588196</LocalCounter>
- <LocalCounter worker="1">9644812</LocalCounter>
- <LocalCounter worker="2">9569541</LocalCounter>
- <LocalCounter worker="3">9569144</LocalCounter>
- <LocalCounter worker="4">9588269</LocalCounter>
- <LocalCounter worker="5">9635446</LocalCounter>
- <LocalCounter worker="6">9587520</LocalCounter>
- <LocalCounter worker="7">9587124</LocalCounter>
- <LocalCounter worker="8">12171038</LocalCounter>
- <GlobalCounter>0</GlobalCounter>
- <SumOfLocalCounter>88941090</SumOfLocalCounter>
- </LocalMCSLockWithLocalCounter>
- <LocalMCSLockWithLocalCounter activeWorker="10">
- <LocalCounter worker="0">9494406</LocalCounter>
- <LocalCounter worker="1">9569092</LocalCounter>
- <LocalCounter worker="2">9483166</LocalCounter>
- <LocalCounter worker="3">9482828</LocalCounter>
- <LocalCounter worker="4">9494096</LocalCounter>
- <LocalCounter worker="5">9549855</LocalCounter>
- <LocalCounter worker="6">9493566</LocalCounter>
- <LocalCounter worker="7">9493228</LocalCounter>
- <LocalCounter worker="8">11870461</LocalCounter>
- <LocalCounter worker="9">11870751</LocalCounter>
- <GlobalCounter>0</GlobalCounter>
- <SumOfLocalCounter>99801449</SumOfLocalCounter>
- </LocalMCSLockWithLocalCounter>
- <LocalMCSLockWithLocalCounter activeWorker="11">
- <LocalCounter worker="0">9547513</LocalCounter>
- <LocalCounter worker="1">9618639</LocalCounter>
- <LocalCounter worker="2">9531079</LocalCounter>
- <LocalCounter worker="3">9530708</LocalCounter>
- <LocalCounter worker="4">9544013</LocalCounter>
- <LocalCounter worker="5">9582528</LocalCounter>
- <LocalCounter worker="6">9546188</LocalCounter>
- <LocalCounter worker="7">9545855</LocalCounter>
- <LocalCounter worker="8">10981480</LocalCounter>
- <LocalCounter worker="9">11695200</LocalCounter>
- <LocalCounter worker="10">11417956</LocalCounter>
- <GlobalCounter>0</GlobalCounter>
- <SumOfLocalCounter>110541159</SumOfLocalCounter>
- </LocalMCSLockWithLocalCounter>
- <LocalMCSLockWithLocalCounter activeWorker="12">
- <LocalCounter worker="0">9480940</LocalCounter>
- <LocalCounter worker="1">9534711</LocalCounter>
- <LocalCounter worker="2">9471781</LocalCounter>
- <LocalCounter worker="3">9471472</LocalCounter>
- <LocalCounter worker="4">9481875</LocalCounter>
- <LocalCounter worker="5">9525995</LocalCounter>
- <LocalCounter worker="6">9478339</LocalCounter>
- <LocalCounter worker="7">9478029</LocalCounter>
- <LocalCounter worker="8">10711265</LocalCounter>
- <LocalCounter worker="9">11114755</LocalCounter>
- <LocalCounter worker="10">10711627</LocalCounter>
- <LocalCounter worker="11">10711294</LocalCounter>
- <GlobalCounter>0</GlobalCounter>
- <SumOfLocalCounter>119172083</SumOfLocalCounter>
- </LocalMCSLockWithLocalCounter>
- <LocalMCSLockWithLocalCounter activeWorker="13">
- <LocalCounter worker="0">9546022</LocalCounter>
- <LocalCounter worker="1">9587726</LocalCounter>
- <LocalCounter worker="2">9539512</LocalCounter>
- <LocalCounter worker="3">9539112</LocalCounter>
- <LocalCounter worker="4">9546798</LocalCounter>
- <LocalCounter worker="5">9572802</LocalCounter>
- <LocalCounter worker="6">9547437</LocalCounter>
- <LocalCounter worker="7">9547014</LocalCounter>
- <LocalCounter worker="8">10700918</LocalCounter>
- <LocalCounter worker="9">10778357</LocalCounter>
- <LocalCounter worker="10">10711682</LocalCounter>
- <LocalCounter worker="11">10711355</LocalCounter>
- <LocalCounter worker="12">10766560</LocalCounter>
- <GlobalCounter>0</GlobalCounter>
- <SumOfLocalCounter>130095295</SumOfLocalCounter>
- </LocalMCSLockWithLocalCounter>
- <LocalMCSLockWithLocalCounter activeWorker="14">
- <LocalCounter worker="0">9529110</LocalCounter>
- <LocalCounter worker="1">9587899</LocalCounter>
- <LocalCounter worker="2">9523029</LocalCounter>
- <LocalCounter worker="3">9522600</LocalCounter>
- <LocalCounter worker="4">9529393</LocalCounter>
- <LocalCounter worker="5">9562307</LocalCounter>
- <LocalCounter worker="6">9531767</LocalCounter>
- <LocalCounter worker="7">9531364</LocalCounter>
- <LocalCounter worker="8">10124795</LocalCounter>
- <LocalCounter worker="9">10538492</LocalCounter>
- <LocalCounter worker="10">10167869</LocalCounter>
- <LocalCounter worker="11">10167494</LocalCounter>
- <LocalCounter worker="12">10101866</LocalCounter>
- <LocalCounter worker="13">10500389</LocalCounter>
- <GlobalCounter>0</GlobalCounter>
- <SumOfLocalCounter>137918374</SumOfLocalCounter>
- </LocalMCSLockWithLocalCounter>
- <LocalMCSLockWithLocalCounter activeWorker="15">
- <LocalCounter worker="0">9566449</LocalCounter>
- <LocalCounter worker="1">9604833</LocalCounter>
- <LocalCounter worker="2">9559288</LocalCounter>
- <LocalCounter worker="3">9558898</LocalCounter>
- <LocalCounter worker="4">9567098</LocalCounter>
- <LocalCounter worker="5">9599387</LocalCounter>
- <LocalCounter worker="6">9566496</LocalCounter>
- <LocalCounter worker="7">9566147</LocalCounter>
- <LocalCounter worker="8">10075047</LocalCounter>
- <LocalCounter worker="9">10164135</LocalCounter>
- <LocalCounter worker="10">10082703</LocalCounter>
- <LocalCounter worker="11">10082326</LocalCounter>
- <LocalCounter worker="12">10075244</LocalCounter>
- <LocalCounter worker="13">10155140</LocalCounter>
- <LocalCounter worker="14">10178314</LocalCounter>
- <GlobalCounter>0</GlobalCounter>
- <SumOfLocalCounter>147401505</SumOfLocalCounter>
- </LocalMCSLockWithLocalCounter>
- <LocalMCSLockWithLocalCounter activeWorker="16">
- <LocalCounter worker="0">9508977</LocalCounter>
- <LocalCounter worker="1">9585956</LocalCounter>
- <LocalCounter worker="2">9501428</LocalCounter>
- <LocalCounter worker="3">9501014</LocalCounter>
- <LocalCounter worker="4">9508465</LocalCounter>
- <LocalCounter worker="5">9556360</LocalCounter>
- <LocalCounter worker="6">9512315</LocalCounter>
- <LocalCounter worker="7">9511916</LocalCounter>
- <LocalCounter worker="8">9534416</LocalCounter>
- <LocalCounter worker="9">9549972</LocalCounter>
- <LocalCounter worker="10">9531251</LocalCounter>
- <LocalCounter worker="11">9530849</LocalCounter>
- <LocalCounter worker="12">9535299</LocalCounter>
- <LocalCounter worker="13">9547690</LocalCounter>
- <LocalCounter worker="14">9533669</LocalCounter>
- <LocalCounter worker="15">9533330</LocalCounter>
- <GlobalCounter>0</GlobalCounter>
- <SumOfLocalCounter>152482907</SumOfLocalCounter>
- </LocalMCSLockWithLocalCounter>
- <LocalMCSLockWithLocalCounter activeWorker="17">
- <LocalCounter worker="0">9456577</LocalCounter>
- <LocalCounter worker="1">9518572</LocalCounter>
- <LocalCounter worker="2">9448329</LocalCounter>
- <LocalCounter worker="3">9447904</LocalCounter>
- <LocalCounter worker="4">9456755</LocalCounter>
- <LocalCounter worker="5">9492156</LocalCounter>
- <LocalCounter worker="6">9456619</LocalCounter>
- <LocalCounter worker="7">9456290</LocalCounter>
- <LocalCounter worker="8">9469695</LocalCounter>
- <LocalCounter worker="9">9504090</LocalCounter>
- <LocalCounter worker="10">9467165</LocalCounter>
- <LocalCounter worker="11">9466779</LocalCounter>
- <LocalCounter worker="12">9469736</LocalCounter>
- <LocalCounter worker="13">9490753</LocalCounter>
- <LocalCounter worker="14">9470460</LocalCounter>
- <LocalCounter worker="15">9470100</LocalCounter>
- <LocalCounter worker="16">12081737</LocalCounter>
- <GlobalCounter>0</GlobalCounter>
- <SumOfLocalCounter>163623717</SumOfLocalCounter>
- </LocalMCSLockWithLocalCounter>
- <LocalMCSLockWithLocalCounter activeWorker="18">
- <LocalCounter worker="0">9528572</LocalCounter>
- <LocalCounter worker="1">9578324</LocalCounter>
- <LocalCounter worker="2">9512159</LocalCounter>
- <LocalCounter worker="3">9511743</LocalCounter>
- <LocalCounter worker="4">9526173</LocalCounter>
- <LocalCounter worker="5">9569951</LocalCounter>
- <LocalCounter worker="6">9534866</LocalCounter>
- <LocalCounter worker="7">9534526</LocalCounter>
- <LocalCounter worker="8">9544758</LocalCounter>
- <LocalCounter worker="9">9593215</LocalCounter>
- <LocalCounter worker="10">9539533</LocalCounter>
- <LocalCounter worker="11">9539119</LocalCounter>
- <LocalCounter worker="12">9545198</LocalCounter>
- <LocalCounter worker="13">9585695</LocalCounter>
- <LocalCounter worker="14">9543578</LocalCounter>
- <LocalCounter worker="15">9543186</LocalCounter>
- <LocalCounter worker="16">11927396</LocalCounter>
- <LocalCounter worker="17">11927804</LocalCounter>
- <GlobalCounter>0</GlobalCounter>
- <SumOfLocalCounter>176585796</SumOfLocalCounter>
- </LocalMCSLockWithLocalCounter>
- <LocalMCSLockWithLocalCounter activeWorker="19">
- <LocalCounter worker="0">9477447</LocalCounter>
- <LocalCounter worker="1">9564597</LocalCounter>
- <LocalCounter worker="2">9452396</LocalCounter>
- <LocalCounter worker="3">9451981</LocalCounter>
- <LocalCounter worker="4">9473225</LocalCounter>
- <LocalCounter worker="5">9533594</LocalCounter>
- <LocalCounter worker="6">9478730</LocalCounter>
- <LocalCounter worker="7">9478355</LocalCounter>
- <LocalCounter worker="8">9491282</LocalCounter>
- <LocalCounter worker="9">9542542</LocalCounter>
- <LocalCounter worker="10">9469974</LocalCounter>
- <LocalCounter worker="11">9469570</LocalCounter>
- <LocalCounter worker="12">9488649</LocalCounter>
- <LocalCounter worker="13">9533937</LocalCounter>
- <LocalCounter worker="14">9493941</LocalCounter>
- <LocalCounter worker="15">9493595</LocalCounter>
- <LocalCounter worker="16">10869069</LocalCounter>
- <LocalCounter worker="17">11610326</LocalCounter>
- <LocalCounter worker="18">11333158</LocalCounter>
- <GlobalCounter>0</GlobalCounter>
- <SumOfLocalCounter>185706368</SumOfLocalCounter>
- </LocalMCSLockWithLocalCounter>
- <LocalMCSLockWithLocalCounter activeWorker="20">
- <LocalCounter worker="0">9513336</LocalCounter>
- <LocalCounter worker="1">9581580</LocalCounter>
- <LocalCounter worker="2">9502256</LocalCounter>
- <LocalCounter worker="3">9501888</LocalCounter>
- <LocalCounter worker="4">9514403</LocalCounter>
- <LocalCounter worker="5">9561923</LocalCounter>
- <LocalCounter worker="6">9510586</LocalCounter>
- <LocalCounter worker="7">9510218</LocalCounter>
- <LocalCounter worker="8">9577756</LocalCounter>
- <LocalCounter worker="9">9601845</LocalCounter>
- <LocalCounter worker="10">9576720</LocalCounter>
- <LocalCounter worker="11">9576333</LocalCounter>
- <LocalCounter worker="12">9576562</LocalCounter>
- <LocalCounter worker="13">9591627</LocalCounter>
- <LocalCounter worker="14">9575875</LocalCounter>
- <LocalCounter worker="15">9575454</LocalCounter>
- <LocalCounter worker="16">10774344</LocalCounter>
- <LocalCounter worker="17">11131500</LocalCounter>
- <LocalCounter worker="18">10795173</LocalCounter>
- <LocalCounter worker="19">10794817</LocalCounter>
- <GlobalCounter>0</GlobalCounter>
- <SumOfLocalCounter>196344196</SumOfLocalCounter>
- </LocalMCSLockWithLocalCounter>
- <LocalMCSLockWithLocalCounter activeWorker="21">
- <LocalCounter worker="0">9489784</LocalCounter>
- <LocalCounter worker="1">9553505</LocalCounter>
- <LocalCounter worker="2">9480407</LocalCounter>
- <LocalCounter worker="3">9480031</LocalCounter>
- <LocalCounter worker="4">9487187</LocalCounter>
- <LocalCounter worker="5">9517609</LocalCounter>
- <LocalCounter worker="6">9490215</LocalCounter>
- <LocalCounter worker="7">9489795</LocalCounter>
- <LocalCounter worker="8">9480100</LocalCounter>
- <LocalCounter worker="9">9512956</LocalCounter>
- <LocalCounter worker="10">9469789</LocalCounter>
- <LocalCounter worker="11">9469408</LocalCounter>
- <LocalCounter worker="12">9478224</LocalCounter>
- <LocalCounter worker="13">9507407</LocalCounter>
- <LocalCounter worker="14">9480884</LocalCounter>
- <LocalCounter worker="15">9480522</LocalCounter>
- <LocalCounter worker="16">10558463</LocalCounter>
- <LocalCounter worker="17">10781768</LocalCounter>
- <LocalCounter worker="18">10586536</LocalCounter>
- <LocalCounter worker="19">10586157</LocalCounter>
- <LocalCounter worker="20">10751665</LocalCounter>
- <GlobalCounter>0</GlobalCounter>
- <SumOfLocalCounter>205132412</SumOfLocalCounter>
- </LocalMCSLockWithLocalCounter>
- <LocalMCSLockWithLocalCounter activeWorker="22">
- <LocalCounter worker="0">9529280</LocalCounter>
- <LocalCounter worker="1">9596479</LocalCounter>
- <LocalCounter worker="2">9526225</LocalCounter>
- <LocalCounter worker="3">9525841</LocalCounter>
- <LocalCounter worker="4">9530068</LocalCounter>
- <LocalCounter worker="5">9560604</LocalCounter>
- <LocalCounter worker="6">9526967</LocalCounter>
- <LocalCounter worker="7">9526692</LocalCounter>
- <LocalCounter worker="8">9535973</LocalCounter>
- <LocalCounter worker="9">9579641</LocalCounter>
- <LocalCounter worker="10">9521811</LocalCounter>
- <LocalCounter worker="11">9521452</LocalCounter>
- <LocalCounter worker="12">9533157</LocalCounter>
- <LocalCounter worker="13">9572320</LocalCounter>
- <LocalCounter worker="14">9537636</LocalCounter>
- <LocalCounter worker="15">9537265</LocalCounter>
- <LocalCounter worker="16">10282870</LocalCounter>
- <LocalCounter worker="17">10460861</LocalCounter>
- <LocalCounter worker="18">10307364</LocalCounter>
- <LocalCounter worker="19">10307036</LocalCounter>
- <LocalCounter worker="20">10284193</LocalCounter>
- <LocalCounter worker="21">10447335</LocalCounter>
- <GlobalCounter>0</GlobalCounter>
- <SumOfLocalCounter>214751070</SumOfLocalCounter>
- </LocalMCSLockWithLocalCounter>
- <LocalMCSLockWithLocalCounter activeWorker="23">
- <LocalCounter worker="0">9474195</LocalCounter>
- <LocalCounter worker="1">9526351</LocalCounter>
- <LocalCounter worker="2">9466045</LocalCounter>
- <LocalCounter worker="3">9465650</LocalCounter>
- <LocalCounter worker="4">9474273</LocalCounter>
- <LocalCounter worker="5">9509635</LocalCounter>
- <LocalCounter worker="6">9475163</LocalCounter>
- <LocalCounter worker="7">9474803</LocalCounter>
- <LocalCounter worker="8">9527687</LocalCounter>
- <LocalCounter worker="9">9582242</LocalCounter>
- <LocalCounter worker="10">9516774</LocalCounter>
- <LocalCounter worker="11">9516407</LocalCounter>
- <LocalCounter worker="12">9526734</LocalCounter>
- <LocalCounter worker="13">9556254</LocalCounter>
- <LocalCounter worker="14">9528842</LocalCounter>
- <LocalCounter worker="15">9528456</LocalCounter>
- <LocalCounter worker="16">9971596</LocalCounter>
- <LocalCounter worker="17">10094615</LocalCounter>
- <LocalCounter worker="18">9984885</LocalCounter>
- <LocalCounter worker="19">9984498</LocalCounter>
- <LocalCounter worker="20">9969546</LocalCounter>
- <LocalCounter worker="21">10080306</LocalCounter>
- <LocalCounter worker="22">10113352</LocalCounter>
- <GlobalCounter>0</GlobalCounter>
- <SumOfLocalCounter>222348309</SumOfLocalCounter>
- </LocalMCSLockWithLocalCounter>
- <LocalMCSLockWithLocalCounter activeWorker="24">
- <LocalCounter worker="0">9570183</LocalCounter>
- <LocalCounter worker="1">9596856</LocalCounter>
- <LocalCounter worker="2">9566396</LocalCounter>
- <LocalCounter worker="3">9565955</LocalCounter>
- <LocalCounter worker="4">9570347</LocalCounter>
- <LocalCounter worker="5">9592890</LocalCounter>
- <LocalCounter worker="6">9571708</LocalCounter>
- <LocalCounter worker="7">9571344</LocalCounter>
- <LocalCounter worker="8">9568931</LocalCounter>
- <LocalCounter worker="9">9609557</LocalCounter>
- <LocalCounter worker="10">9562498</LocalCounter>
- <LocalCounter worker="11">9562127</LocalCounter>
- <LocalCounter worker="12">9567335</LocalCounter>
- <LocalCounter worker="13">9602518</LocalCounter>
- <LocalCounter worker="14">9566096</LocalCounter>
- <LocalCounter worker="15">9565736</LocalCounter>
- <LocalCounter worker="16">9608409</LocalCounter>
- <LocalCounter worker="17">9631716</LocalCounter>
- <LocalCounter worker="18">9604886</LocalCounter>
- <LocalCounter worker="19">9604505</LocalCounter>
- <LocalCounter worker="20">9607807</LocalCounter>
- <LocalCounter worker="21">9629640</LocalCounter>
- <LocalCounter worker="22">9603907</LocalCounter>
- <LocalCounter worker="23">9629626</LocalCounter>
- <GlobalCounter>0</GlobalCounter>
- <SumOfLocalCounter>230130973</SumOfLocalCounter>
- </LocalMCSLockWithLocalCounter>
- <LocalTicketLockWithGlobalCounter activeWorker="24">
- <LocalCounter worker="0">903446</LocalCounter>
- <LocalCounter worker="1">903762</LocalCounter>
- <LocalCounter worker="2">903658</LocalCounter>
- <LocalCounter worker="3">903679</LocalCounter>
- <LocalCounter worker="4">903658</LocalCounter>
- <LocalCounter worker="5">903690</LocalCounter>
- <LocalCounter worker="6">903665</LocalCounter>
- <LocalCounter worker="7">903667</LocalCounter>
- <LocalCounter worker="8">905432</LocalCounter>
- <LocalCounter worker="9">905463</LocalCounter>
- <LocalCounter worker="10">905415</LocalCounter>
- <LocalCounter worker="11">905426</LocalCounter>
- <LocalCounter worker="12">905442</LocalCounter>
- <LocalCounter worker="13">905442</LocalCounter>
- <LocalCounter worker="14">905434</LocalCounter>
- <LocalCounter worker="15">905417</LocalCounter>
- <LocalCounter worker="16">902746</LocalCounter>
- <LocalCounter worker="17">902734</LocalCounter>
- <LocalCounter worker="18">902731</LocalCounter>
- <LocalCounter worker="19">902719</LocalCounter>
- <LocalCounter worker="20">902734</LocalCounter>
- <LocalCounter worker="21">902750</LocalCounter>
- <LocalCounter worker="22">902746</LocalCounter>
- <LocalCounter worker="23">902708</LocalCounter>
- <GlobalCounter>2057722</GlobalCounter>
- <SumOfLocalCounter>21694564</SumOfLocalCounter>
- </LocalTicketLockWithGlobalCounter>
- <LocalMCSLockWithGlobalCounter activeWorker="24">
- <LocalCounter worker="0">859801</LocalCounter>
- <LocalCounter worker="1">967785</LocalCounter>
- <LocalCounter worker="2">883645</LocalCounter>
- <LocalCounter worker="3">883619</LocalCounter>
- <LocalCounter worker="4">860037</LocalCounter>
- <LocalCounter worker="5">968025</LocalCounter>
- <LocalCounter worker="6">883058</LocalCounter>
- <LocalCounter worker="7">883016</LocalCounter>
- <LocalCounter worker="8">865337</LocalCounter>
- <LocalCounter worker="9">974824</LocalCounter>
- <LocalCounter worker="10">882369</LocalCounter>
- <LocalCounter worker="11">882341</LocalCounter>
- <LocalCounter worker="12">863544</LocalCounter>
- <LocalCounter worker="13">972159</LocalCounter>
- <LocalCounter worker="14">892721</LocalCounter>
- <LocalCounter worker="15">892715</LocalCounter>
- <LocalCounter worker="16">857049</LocalCounter>
- <LocalCounter worker="17">963725</LocalCounter>
- <LocalCounter worker="18">880627</LocalCounter>
- <LocalCounter worker="19">880584</LocalCounter>
- <LocalCounter worker="20">856853</LocalCounter>
- <LocalCounter worker="21">963380</LocalCounter>
- <LocalCounter worker="22">854026</LocalCounter>
- <LocalCounter worker="23">952345</LocalCounter>
- <GlobalCounter>1763851</GlobalCounter>
- <SumOfLocalCounter>21623585</SumOfLocalCounter>
- </LocalMCSLockWithGlobalCounter>
- <GlobalTicketLockWithBusySection activeWorker="24">
- <LocalCounter worker="0">122500</LocalCounter>
- <LocalCounter worker="1">122500</LocalCounter>
- <LocalCounter worker="2">122500</LocalCounter>
- <LocalCounter worker="3">122500</LocalCounter>
- <LocalCounter worker="4">122499</LocalCounter>
- <LocalCounter worker="5">122500</LocalCounter>
- <LocalCounter worker="6">122500</LocalCounter>
- <LocalCounter worker="7">122500</LocalCounter>
- <LocalCounter worker="8">122500</LocalCounter>
- <LocalCounter worker="9">122500</LocalCounter>
- <LocalCounter worker="10">122500</LocalCounter>
- <LocalCounter worker="11">122500</LocalCounter>
- <LocalCounter worker="12">122500</LocalCounter>
- <LocalCounter worker="13">122500</LocalCounter>
- <LocalCounter worker="14">122500</LocalCounter>
- <LocalCounter worker="15">122500</LocalCounter>
- <LocalCounter worker="16">122499</LocalCounter>
- <LocalCounter worker="17">122501</LocalCounter>
- <LocalCounter worker="18">122500</LocalCounter>
- <LocalCounter worker="19">122500</LocalCounter>
- <LocalCounter worker="20">122501</LocalCounter>
- <LocalCounter worker="21">122501</LocalCounter>
- <LocalCounter worker="22">122501</LocalCounter>
- <LocalCounter worker="23">122501</LocalCounter>
- <GlobalCounter>0</GlobalCounter>
- <SumOfLocalCounter>2940003</SumOfLocalCounter>
- </GlobalTicketLockWithBusySection>
- <GlobalMCSLockWithBusySection activeWorker="24">
- <LocalCounter worker="0">109856</LocalCounter>
- <LocalCounter worker="1">109857</LocalCounter>
- <LocalCounter worker="2">109857</LocalCounter>
- <LocalCounter worker="3">109856</LocalCounter>
- <LocalCounter worker="4">109857</LocalCounter>
- <LocalCounter worker="5">109856</LocalCounter>
- <LocalCounter worker="6">109857</LocalCounter>
- <LocalCounter worker="7">109857</LocalCounter>
- <LocalCounter worker="8">109856</LocalCounter>
- <LocalCounter worker="9">109856</LocalCounter>
- <LocalCounter worker="10">109857</LocalCounter>
- <LocalCounter worker="11">109858</LocalCounter>
- <LocalCounter worker="12">109858</LocalCounter>
- <LocalCounter worker="13">109857</LocalCounter>
- <LocalCounter worker="14">109856</LocalCounter>
- <LocalCounter worker="15">109856</LocalCounter>
- <LocalCounter worker="16">109858</LocalCounter>
- <LocalCounter worker="17">109857</LocalCounter>
- <LocalCounter worker="18">109857</LocalCounter>
- <LocalCounter worker="19">109857</LocalCounter>
- <LocalCounter worker="20">109856</LocalCounter>
- <LocalCounter worker="21">109857</LocalCounter>
- <LocalCounter worker="22">109856</LocalCounter>
- <LocalCounter worker="23">109857</LocalCounter>
- <GlobalCounter>0</GlobalCounter>
- <SumOfLocalCounter>2636562</SumOfLocalCounter>
- </GlobalMCSLockWithBusySection>
- <SequenceLock activeWorker="24">
- <LocalCounter worker="0">2443697</LocalCounter>
- <LocalCounter worker="1">1</LocalCounter>
- <LocalCounter worker="2">11</LocalCounter>
- <LocalCounter worker="3">19</LocalCounter>
- <LocalCounter worker="4">34</LocalCounter>
- <LocalCounter worker="5">4</LocalCounter>
- <LocalCounter worker="6">11</LocalCounter>
- <LocalCounter worker="7">27</LocalCounter>
- <LocalCounter worker="8">738</LocalCounter>
- <LocalCounter worker="9">715</LocalCounter>
- <LocalCounter worker="10">708</LocalCounter>
- <LocalCounter worker="11">710</LocalCounter>
- <LocalCounter worker="12">716</LocalCounter>
- <LocalCounter worker="13">722</LocalCounter>
- <LocalCounter worker="14">663</LocalCounter>
- <LocalCounter worker="15">680</LocalCounter>
- <LocalCounter worker="16">818</LocalCounter>
- <LocalCounter worker="17">816</LocalCounter>
- <LocalCounter worker="18">798</LocalCounter>
- <LocalCounter worker="19">793</LocalCounter>
- <LocalCounter worker="20">749</LocalCounter>
- <LocalCounter worker="21">737</LocalCounter>
- <LocalCounter worker="22">681</LocalCounter>
- <LocalCounter worker="23">713</LocalCounter>
- <GlobalCounter>0</GlobalCounter>
- <SumOfLocalCounter>2455561</SumOfLocalCounter>
- </SequenceLock>
- <GlobalTASLockWithLocalCounter activeWorker="1">
- <LocalCounter worker="0">19899718</LocalCounter>
- <GlobalCounter>0</GlobalCounter>
- <SumOfLocalCounter>19899718</SumOfLocalCounter>
- </GlobalTASLockWithLocalCounter>
- <GlobalTASLockWithLocalCounter activeWorker="2">
- <LocalCounter worker="0">11323121</LocalCounter>
- <LocalCounter worker="1">8390566</LocalCounter>
- <GlobalCounter>0</GlobalCounter>
- <SumOfLocalCounter>19713687</SumOfLocalCounter>
- </GlobalTASLockWithLocalCounter>
- <GlobalTASLockWithLocalCounter activeWorker="3">
- <LocalCounter worker="0">3505442</LocalCounter>
- <LocalCounter worker="1">3505599</LocalCounter>
- <LocalCounter worker="2">12137521</LocalCounter>
- <GlobalCounter>0</GlobalCounter>
- <SumOfLocalCounter>19148562</SumOfLocalCounter>
- </GlobalTASLockWithLocalCounter>
- <GlobalTASLockWithLocalCounter activeWorker="4">
- <LocalCounter worker="0">3973366</LocalCounter>
- <LocalCounter worker="1">3973543</LocalCounter>
- <LocalCounter worker="2">5643661</LocalCounter>
- <LocalCounter worker="3">5644098</LocalCounter>
- <GlobalCounter>0</GlobalCounter>
- <SumOfLocalCounter>19234668</SumOfLocalCounter>
- </GlobalTASLockWithLocalCounter>
- <GlobalTASLockWithLocalCounter activeWorker="5">
- <LocalCounter worker="0">3605358</LocalCounter>
- <LocalCounter worker="1">3605432</LocalCounter>
- <LocalCounter worker="2">5184535</LocalCounter>
- <LocalCounter worker="3">5184801</LocalCounter>
- <LocalCounter worker="4">1514959</LocalCounter>
- <GlobalCounter>0</GlobalCounter>
- <SumOfLocalCounter>19095085</SumOfLocalCounter>
- </GlobalTASLockWithLocalCounter>
- <GlobalTASLockWithLocalCounter activeWorker="6">
- <LocalCounter worker="0">3062204</LocalCounter>
- <LocalCounter worker="1">3061638</LocalCounter>
- <LocalCounter worker="2">2657329</LocalCounter>
- <LocalCounter worker="3">2657997</LocalCounter>
- <LocalCounter worker="4">3694149</LocalCounter>
- <LocalCounter worker="5">3693569</LocalCounter>
- <GlobalCounter>0</GlobalCounter>
- <SumOfLocalCounter>18826886</SumOfLocalCounter>
- </GlobalTASLockWithLocalCounter>
- <GlobalTASLockWithLocalCounter activeWorker="7">
- <LocalCounter worker="0">1413952</LocalCounter>
- <LocalCounter worker="1">1413322</LocalCounter>
- <LocalCounter worker="2">5634774</LocalCounter>
- <LocalCounter worker="3">5634907</LocalCounter>
- <LocalCounter worker="4">807079</LocalCounter>
- <LocalCounter worker="5">806823</LocalCounter>
- <LocalCounter worker="6">2780299</LocalCounter>
- <GlobalCounter>0</GlobalCounter>
- <SumOfLocalCounter>18491156</SumOfLocalCounter>
- </GlobalTASLockWithLocalCounter>
- <GlobalTASLockWithLocalCounter activeWorker="8">
- <LocalCounter worker="0">2266504</LocalCounter>
- <LocalCounter worker="1">2264023</LocalCounter>
- <LocalCounter worker="2">2150464</LocalCounter>
- <LocalCounter worker="3">2152501</LocalCounter>
- <LocalCounter worker="4">2234184</LocalCounter>
- <LocalCounter worker="5">2235885</LocalCounter>
- <LocalCounter worker="6">2045159</LocalCounter>
- <LocalCounter worker="7">2042094</LocalCounter>
- <GlobalCounter>0</GlobalCounter>
- <SumOfLocalCounter>17390814</SumOfLocalCounter>
- </GlobalTASLockWithLocalCounter>
- <GlobalTASLockWithLocalCounter activeWorker="9">
- <LocalCounter worker="0">378978</LocalCounter>
- <LocalCounter worker="1">493897</LocalCounter>
- <LocalCounter worker="2">540956</LocalCounter>
- <LocalCounter worker="3">307717</LocalCounter>
- <LocalCounter worker="4">559266</LocalCounter>
- <LocalCounter worker="5">435771</LocalCounter>
- <LocalCounter worker="6">289002</LocalCounter>
- <LocalCounter worker="7">524768</LocalCounter>
- <LocalCounter worker="8">904</LocalCounter>
- <GlobalCounter>0</GlobalCounter>
- <SumOfLocalCounter>3531259</SumOfLocalCounter>
- </GlobalTASLockWithLocalCounter>
- <GlobalTASLockWithLocalCounter activeWorker="10">
- <LocalCounter worker="0">315240</LocalCounter>
- <LocalCounter worker="1">314639</LocalCounter>
- <LocalCounter worker="2">343225</LocalCounter>
- <LocalCounter worker="3">343430</LocalCounter>
- <LocalCounter worker="4">330617</LocalCounter>
- <LocalCounter worker="5">273430</LocalCounter>
- <LocalCounter worker="6">114457</LocalCounter>
- <LocalCounter worker="7">400594</LocalCounter>
- <LocalCounter worker="8">199708</LocalCounter>
- <LocalCounter worker="9">398954</LocalCounter>
- <GlobalCounter>0</GlobalCounter>
- <SumOfLocalCounter>3034294</SumOfLocalCounter>
- </GlobalTASLockWithLocalCounter>
- <GlobalTASLockWithLocalCounter activeWorker="11">
- <LocalCounter worker="0">398649</LocalCounter>
- <LocalCounter worker="1">243725</LocalCounter>
- <LocalCounter worker="2">313197</LocalCounter>
- <LocalCounter worker="3">341559</LocalCounter>
- <LocalCounter worker="4">400879</LocalCounter>
- <LocalCounter worker="5">485957</LocalCounter>
- <LocalCounter worker="6">256149</LocalCounter>
- <LocalCounter worker="7">312463</LocalCounter>
- <LocalCounter worker="8">79929</LocalCounter>
- <LocalCounter worker="9">79959</LocalCounter>
- <LocalCounter worker="10">61</LocalCounter>
- <GlobalCounter>0</GlobalCounter>
- <SumOfLocalCounter>2912527</SumOfLocalCounter>
- </GlobalTASLockWithLocalCounter>
- <GlobalTASLockWithLocalCounter activeWorker="12">
- <LocalCounter worker="0">200097</LocalCounter>
- <LocalCounter worker="1">314280</LocalCounter>
- <LocalCounter worker="2">484541</LocalCounter>
- <LocalCounter worker="3">400413</LocalCounter>
- <LocalCounter worker="4">187776</LocalCounter>
- <LocalCounter worker="5">244998</LocalCounter>
- <LocalCounter worker="6">244859</LocalCounter>
- <LocalCounter worker="7">330577</LocalCounter>
- <LocalCounter worker="8">159931</LocalCounter>
- <LocalCounter worker="9">122121</LocalCounter>
- <LocalCounter worker="10">159973</LocalCounter>
- <LocalCounter worker="11">199451</LocalCounter>
- <GlobalCounter>0</GlobalCounter>
- <SumOfLocalCounter>3049017</SumOfLocalCounter>
- </GlobalTASLockWithLocalCounter>
- <GlobalTASLockWithLocalCounter activeWorker="13">
- <LocalCounter worker="0">104</LocalCounter>
- <LocalCounter worker="1">145</LocalCounter>
- <LocalCounter worker="2">209</LocalCounter>
- <LocalCounter worker="3">169</LocalCounter>
- <LocalCounter worker="4">206</LocalCounter>
- <LocalCounter worker="5">120</LocalCounter>
- <LocalCounter worker="6">166</LocalCounter>
- <LocalCounter worker="7">188</LocalCounter>
- <LocalCounter worker="8">798353</LocalCounter>
- <LocalCounter worker="9">639101</LocalCounter>
- <LocalCounter worker="10">1237960</LocalCounter>
- <LocalCounter worker="11">840661</LocalCounter>
- <LocalCounter worker="12">439274</LocalCounter>
- <GlobalCounter>0</GlobalCounter>
- <SumOfLocalCounter>3956656</SumOfLocalCounter>
- </GlobalTASLockWithLocalCounter>
- <GlobalTASLockWithLocalCounter activeWorker="14">
- <LocalCounter worker="0">80</LocalCounter>
- <LocalCounter worker="1">111</LocalCounter>
- <LocalCounter worker="2">119</LocalCounter>
- <LocalCounter worker="3">149</LocalCounter>
- <LocalCounter worker="4">169</LocalCounter>
- <LocalCounter worker="5">117</LocalCounter>
- <LocalCounter worker="6">126</LocalCounter>
- <LocalCounter worker="7">139</LocalCounter>
- <LocalCounter worker="8">574829</LocalCounter>
- <LocalCounter worker="9">803988</LocalCounter>
- <LocalCounter worker="10">370549</LocalCounter>
- <LocalCounter worker="11">846318</LocalCounter>
- <LocalCounter worker="12">608269</LocalCounter>
- <LocalCounter worker="13">608119</LocalCounter>
- <GlobalCounter>0</GlobalCounter>
- <SumOfLocalCounter>3813082</SumOfLocalCounter>
- </GlobalTASLockWithLocalCounter>
- <GlobalTASLockWithLocalCounter activeWorker="15">
- <LocalCounter worker="0">8</LocalCounter>
- <LocalCounter worker="1">20</LocalCounter>
- <LocalCounter worker="2">34</LocalCounter>
- <LocalCounter worker="3">65</LocalCounter>
- <LocalCounter worker="4">84</LocalCounter>
- <LocalCounter worker="5">38</LocalCounter>
- <LocalCounter worker="6">60</LocalCounter>
- <LocalCounter worker="7">95</LocalCounter>
- <LocalCounter worker="8">482715</LocalCounter>
- <LocalCounter worker="9">607538</LocalCounter>
- <LocalCounter worker="10">482392</LocalCounter>
- <LocalCounter worker="11">667855</LocalCounter>
- <LocalCounter worker="12">409336</LocalCounter>
- <LocalCounter worker="13">630426</LocalCounter>
- <LocalCounter worker="14">408163</LocalCounter>
- <GlobalCounter>0</GlobalCounter>
- <SumOfLocalCounter>3688829</SumOfLocalCounter>
- </GlobalTASLockWithLocalCounter>
- <GlobalTASLockWithLocalCounter activeWorker="16">
- <LocalCounter worker="0">117285</LocalCounter>
- <LocalCounter worker="1">117670</LocalCounter>
- <LocalCounter worker="2">117122</LocalCounter>
- <LocalCounter worker="3">116813</LocalCounter>
- <LocalCounter worker="4">117713</LocalCounter>
- <LocalCounter worker="5">117774</LocalCounter>
- <LocalCounter worker="6">117459</LocalCounter>
- <LocalCounter worker="7">117328</LocalCounter>
- <LocalCounter worker="8">303833</LocalCounter>
- <LocalCounter worker="9">326784</LocalCounter>
- <LocalCounter worker="10">277325</LocalCounter>
- <LocalCounter worker="11">373516</LocalCounter>
- <LocalCounter worker="12">263215</LocalCounter>
- <LocalCounter worker="13">390871</LocalCounter>
- <LocalCounter worker="14">446935</LocalCounter>
- <LocalCounter worker="15">301501</LocalCounter>
- <GlobalCounter>0</GlobalCounter>
- <SumOfLocalCounter>3623144</SumOfLocalCounter>
- </GlobalTASLockWithLocalCounter>
- <GlobalTASLockWithLocalCounter activeWorker="17">
- <LocalCounter worker="0">341558</LocalCounter>
- <LocalCounter worker="1">231787</LocalCounter>
- <LocalCounter worker="2">347677</LocalCounter>
- <LocalCounter worker="3">218478</LocalCounter>
- <LocalCounter worker="4">303719</LocalCounter>
- <LocalCounter worker="5">154437</LocalCounter>
- <LocalCounter worker="6">229631</LocalCounter>
- <LocalCounter worker="7">216461</LocalCounter>
- <LocalCounter worker="8">123537</LocalCounter>
- <LocalCounter worker="9">103366</LocalCounter>
- <LocalCounter worker="10">55161</LocalCounter>
- <LocalCounter worker="11">90025</LocalCounter>
- <LocalCounter worker="12">84691</LocalCounter>
- <LocalCounter worker="13">68924</LocalCounter>
- <LocalCounter worker="14">53786</LocalCounter>
- <LocalCounter worker="15">190767</LocalCounter>
- <LocalCounter worker="16">986</LocalCounter>
- <GlobalCounter>0</GlobalCounter>
- <SumOfLocalCounter>2814991</SumOfLocalCounter>
- </GlobalTASLockWithLocalCounter>
- <GlobalTASLockWithLocalCounter activeWorker="18">
- <LocalCounter worker="0">200069</LocalCounter>
- <LocalCounter worker="1">264598</LocalCounter>
- <LocalCounter worker="2">170182</LocalCounter>
- <LocalCounter worker="3">138554</LocalCounter>
- <LocalCounter worker="4">102824</LocalCounter>
- <LocalCounter worker="5">175867</LocalCounter>
- <LocalCounter worker="6">284187</LocalCounter>
- <LocalCounter worker="7">164345</LocalCounter>
- <LocalCounter worker="8">233732</LocalCounter>
- <LocalCounter worker="9">178177</LocalCounter>
- <LocalCounter worker="10">140189</LocalCounter>
- <LocalCounter worker="11">153958</LocalCounter>
- <LocalCounter worker="12">123252</LocalCounter>
- <LocalCounter worker="13">227322</LocalCounter>
- <LocalCounter worker="14">194095</LocalCounter>
- <LocalCounter worker="15">54981</LocalCounter>
- <LocalCounter worker="16">1079</LocalCounter>
- <LocalCounter worker="17">1026</LocalCounter>
- <GlobalCounter>0</GlobalCounter>
- <SumOfLocalCounter>2808437</SumOfLocalCounter>
- </GlobalTASLockWithLocalCounter>
- <GlobalTASLockWithLocalCounter activeWorker="19">
- <LocalCounter worker="0">321115</LocalCounter>
- <LocalCounter worker="1">371397</LocalCounter>
- <LocalCounter worker="2">225899</LocalCounter>
- <LocalCounter worker="3">354262</LocalCounter>
- <LocalCounter worker="4">361476</LocalCounter>
- <LocalCounter worker="5">350114</LocalCounter>
- <LocalCounter worker="6">291933</LocalCounter>
- <LocalCounter worker="7">196999</LocalCounter>
- <LocalCounter worker="8">22397</LocalCounter>
- <LocalCounter worker="9">25153</LocalCounter>
- <LocalCounter worker="10">102182</LocalCounter>
- <LocalCounter worker="11">21372</LocalCounter>
- <LocalCounter worker="12">70582</LocalCounter>
- <LocalCounter worker="13">29948</LocalCounter>
- <LocalCounter worker="14">18969</LocalCounter>
- <LocalCounter worker="15">57177</LocalCounter>
- <LocalCounter worker="16">477</LocalCounter>
- <LocalCounter worker="17">391</LocalCounter>
- <LocalCounter worker="18">916</LocalCounter>
- <GlobalCounter>0</GlobalCounter>
- <SumOfLocalCounter>2822759</SumOfLocalCounter>
- </GlobalTASLockWithLocalCounter>
- <GlobalTASLockWithLocalCounter activeWorker="20">
- <LocalCounter worker="0">393436</LocalCounter>
- <LocalCounter worker="1">309283</LocalCounter>
- <LocalCounter worker="2">168529</LocalCounter>
- <LocalCounter worker="3">224983</LocalCounter>
- <LocalCounter worker="4">196844</LocalCounter>
- <LocalCounter worker="5">140974</LocalCounter>
- <LocalCounter worker="6">197196</LocalCounter>
- <LocalCounter worker="7">84830</LocalCounter>
- <LocalCounter worker="8">111946</LocalCounter>
- <LocalCounter worker="9">111914</LocalCounter>
- <LocalCounter worker="10">112325</LocalCounter>
- <LocalCounter worker="11">112014</LocalCounter>
- <LocalCounter worker="12">168007</LocalCounter>
- <LocalCounter worker="13">111972</LocalCounter>
- <LocalCounter worker="14">112201</LocalCounter>
- <LocalCounter worker="15">252562</LocalCounter>
- <LocalCounter worker="16">49</LocalCounter>
- <LocalCounter worker="17">41</LocalCounter>
- <LocalCounter worker="18">37</LocalCounter>
- <LocalCounter worker="19">44</LocalCounter>
- <GlobalCounter>0</GlobalCounter>
- <SumOfLocalCounter>2809187</SumOfLocalCounter>
- </GlobalTASLockWithLocalCounter>
- <GlobalTASLockWithLocalCounter activeWorker="21">
- <LocalCounter worker="0">183153</LocalCounter>
- <LocalCounter worker="1">263091</LocalCounter>
- <LocalCounter worker="2">196238</LocalCounter>
- <LocalCounter worker="3">56135</LocalCounter>
- <LocalCounter worker="4">252253</LocalCounter>
- <LocalCounter worker="5">112377</LocalCounter>
- <LocalCounter worker="6">168624</LocalCounter>
- <LocalCounter worker="7">252596</LocalCounter>
- <LocalCounter worker="8">195948</LocalCounter>
- <LocalCounter worker="9">43703</LocalCounter>
- <LocalCounter worker="10">140073</LocalCounter>
- <LocalCounter worker="11">223721</LocalCounter>
- <LocalCounter worker="12">251924</LocalCounter>
- <LocalCounter worker="13">169611</LocalCounter>
- <LocalCounter worker="14">112360</LocalCounter>
- <LocalCounter worker="15">168176</LocalCounter>
- <LocalCounter worker="16">41</LocalCounter>
- <LocalCounter worker="17">14</LocalCounter>
- <LocalCounter worker="18">29</LocalCounter>
- <LocalCounter worker="19">41</LocalCounter>
- <LocalCounter worker="20">41</LocalCounter>
- <GlobalCounter>0</GlobalCounter>
- <SumOfLocalCounter>2790149</SumOfLocalCounter>
- </GlobalTASLockWithLocalCounter>
- <GlobalTASLockWithLocalCounter activeWorker="22">
- <LocalCounter worker="0">84315</LocalCounter>
- <LocalCounter worker="1">168428</LocalCounter>
- <LocalCounter worker="2">56084</LocalCounter>
- <LocalCounter worker="3">280784</LocalCounter>
- <LocalCounter worker="4">160642</LocalCounter>
- <LocalCounter worker="5">195812</LocalCounter>
- <LocalCounter worker="6">224182</LocalCounter>
- <LocalCounter worker="7">112335</LocalCounter>
- <LocalCounter worker="8">223416</LocalCounter>
- <LocalCounter worker="9">279221</LocalCounter>
- <LocalCounter worker="10">223306</LocalCounter>
- <LocalCounter worker="11">195550</LocalCounter>
- <LocalCounter worker="12">83826</LocalCounter>
- <LocalCounter worker="13">83644</LocalCounter>
- <LocalCounter worker="14">153478</LocalCounter>
- <LocalCounter worker="15">251574</LocalCounter>
- <LocalCounter worker="16">31</LocalCounter>
- <LocalCounter worker="17">17</LocalCounter>
- <LocalCounter worker="18">26</LocalCounter>
- <LocalCounter worker="19">27</LocalCounter>
- <LocalCounter worker="20">31</LocalCounter>
- <LocalCounter worker="21">22</LocalCounter>
- <GlobalCounter>0</GlobalCounter>
- <SumOfLocalCounter>2776751</SumOfLocalCounter>
- </GlobalTASLockWithLocalCounter>
- <GlobalTASLockWithLocalCounter activeWorker="23">
- <LocalCounter worker="0">251094</LocalCounter>
- <LocalCounter worker="1">111612</LocalCounter>
- <LocalCounter worker="2">111946</LocalCounter>
- <LocalCounter worker="3">250878</LocalCounter>
- <LocalCounter worker="4">270360</LocalCounter>
- <LocalCounter worker="5">83918</LocalCounter>
- <LocalCounter worker="6">167667</LocalCounter>
- <LocalCounter worker="7">251032</LocalCounter>
- <LocalCounter worker="8">201670</LocalCounter>
- <LocalCounter worker="9">195227</LocalCounter>
- <LocalCounter worker="10">167446</LocalCounter>
- <LocalCounter worker="11">194880</LocalCounter>
- <LocalCounter worker="12">194852</LocalCounter>
- <LocalCounter worker="13">83768</LocalCounter>
- <LocalCounter worker="14">160169</LocalCounter>
- <LocalCounter worker="15">83658</LocalCounter>
- <LocalCounter worker="16">141</LocalCounter>
- <LocalCounter worker="17">133</LocalCounter>
- <LocalCounter worker="18">122</LocalCounter>
- <LocalCounter worker="19">117</LocalCounter>
- <LocalCounter worker="20">136</LocalCounter>
- <LocalCounter worker="21">115</LocalCounter>
- <LocalCounter worker="22">104</LocalCounter>
- <GlobalCounter>0</GlobalCounter>
- <SumOfLocalCounter>2781045</SumOfLocalCounter>
- </GlobalTASLockWithLocalCounter>
- <GlobalTASLockWithLocalCounter activeWorker="24">
- <LocalCounter worker="0">132034</LocalCounter>
- <LocalCounter worker="1">131676</LocalCounter>
- <LocalCounter worker="2">132311</LocalCounter>
- <LocalCounter worker="3">131443</LocalCounter>
- <LocalCounter worker="4">132250</LocalCounter>
- <LocalCounter worker="5">131733</LocalCounter>
- <LocalCounter worker="6">131193</LocalCounter>
- <LocalCounter worker="7">131281</LocalCounter>
- <LocalCounter worker="8">122650</LocalCounter>
- <LocalCounter worker="9">123113</LocalCounter>
- <LocalCounter worker="10">123745</LocalCounter>
- <LocalCounter worker="11">123264</LocalCounter>
- <LocalCounter worker="12">123158</LocalCounter>
- <LocalCounter worker="13">122764</LocalCounter>
- <LocalCounter worker="14">123050</LocalCounter>
- <LocalCounter worker="15">123616</LocalCounter>
- <LocalCounter worker="16">122054</LocalCounter>
- <LocalCounter worker="17">122876</LocalCounter>
- <LocalCounter worker="18">122080</LocalCounter>
- <LocalCounter worker="19">121904</LocalCounter>
- <LocalCounter worker="20">122223</LocalCounter>
- <LocalCounter worker="21">122088</LocalCounter>
- <LocalCounter worker="22">121899</LocalCounter>
- <LocalCounter worker="23">122670</LocalCounter>
- <GlobalCounter>0</GlobalCounter>
- <SumOfLocalCounter>3017075</SumOfLocalCounter>
- </GlobalTASLockWithLocalCounter>
- <GlobalTTASLockWithLocalCounter activeWorker="1">
- <LocalCounter worker="0">19645977</LocalCounter>
- <GlobalCounter>0</GlobalCounter>
- <SumOfLocalCounter>19645977</SumOfLocalCounter>
- </GlobalTTASLockWithLocalCounter>
- <GlobalTTASLockWithLocalCounter activeWorker="2">
- <LocalCounter worker="0">4310217</LocalCounter>
- <LocalCounter worker="1">15293675</LocalCounter>
- <GlobalCounter>0</GlobalCounter>
- <SumOfLocalCounter>19603892</SumOfLocalCounter>
- </GlobalTTASLockWithLocalCounter>
- <GlobalTTASLockWithLocalCounter activeWorker="3">
- <LocalCounter worker="0">9402863</LocalCounter>
- <LocalCounter worker="1">9226207</LocalCounter>
- <LocalCounter worker="2">437594</LocalCounter>
- <GlobalCounter>0</GlobalCounter>
- <SumOfLocalCounter>19066664</SumOfLocalCounter>
- </GlobalTTASLockWithLocalCounter>
- <GlobalTTASLockWithLocalCounter activeWorker="4">
- <LocalCounter worker="0">3386951</LocalCounter>
- <LocalCounter worker="1">3201931</LocalCounter>
- <LocalCounter worker="2">6304744</LocalCounter>
- <LocalCounter worker="3">6305238</LocalCounter>
- <GlobalCounter>0</GlobalCounter>
- <SumOfLocalCounter>19198864</SumOfLocalCounter>
- </GlobalTTASLockWithLocalCounter>
- <GlobalTTASLockWithLocalCounter activeWorker="5">
- <LocalCounter worker="0">4092852</LocalCounter>
- <LocalCounter worker="1">3899527</LocalCounter>
- <LocalCounter worker="2">2520768</LocalCounter>
- <LocalCounter worker="3">2175848</LocalCounter>
- <LocalCounter worker="4">5948549</LocalCounter>
- <GlobalCounter>0</GlobalCounter>
- <SumOfLocalCounter>18637544</SumOfLocalCounter>
- </GlobalTTASLockWithLocalCounter>
- <GlobalTTASLockWithLocalCounter activeWorker="6">
- <LocalCounter worker="0">2597841</LocalCounter>
- <LocalCounter worker="1">2443137</LocalCounter>
- <LocalCounter worker="2">3331024</LocalCounter>
- <LocalCounter worker="3">2708000</LocalCounter>
- <LocalCounter worker="4">4093981</LocalCounter>
- <LocalCounter worker="5">3080494</LocalCounter>
- <GlobalCounter>0</GlobalCounter>
- <SumOfLocalCounter>18254477</SumOfLocalCounter>
- </GlobalTTASLockWithLocalCounter>
- <GlobalTTASLockWithLocalCounter activeWorker="7">
- <LocalCounter worker="0">1216614</LocalCounter>
- <LocalCounter worker="1">2258952</LocalCounter>
- <LocalCounter worker="2">1291063</LocalCounter>
- <LocalCounter worker="3">1114575</LocalCounter>
- <LocalCounter worker="4">5532606</LocalCounter>
- <LocalCounter worker="5">5466345</LocalCounter>
- <LocalCounter worker="6">1405693</LocalCounter>
- <GlobalCounter>0</GlobalCounter>
- <SumOfLocalCounter>18285848</SumOfLocalCounter>
- </GlobalTTASLockWithLocalCounter>
- <GlobalTTASLockWithLocalCounter activeWorker="8">
- <LocalCounter worker="0">2086492</LocalCounter>
- <LocalCounter worker="1">2244683</LocalCounter>
- <LocalCounter worker="2">2112130</LocalCounter>
- <LocalCounter worker="3">2067114</LocalCounter>
- <LocalCounter worker="4">2081711</LocalCounter>
- <LocalCounter worker="5">2090180</LocalCounter>
- <LocalCounter worker="6">2168032</LocalCounter>
- <LocalCounter worker="7">2534478</LocalCounter>
- <GlobalCounter>0</GlobalCounter>
- <SumOfLocalCounter>17384820</SumOfLocalCounter>
- </GlobalTTASLockWithLocalCounter>
- <GlobalTTASLockWithLocalCounter activeWorker="9">
- <LocalCounter worker="0">634132</LocalCounter>
- <LocalCounter worker="1">601192</LocalCounter>
- <LocalCounter worker="2">480382</LocalCounter>
- <LocalCounter worker="3">657643</LocalCounter>
- <LocalCounter worker="4">592079</LocalCounter>
- <LocalCounter worker="5">740174</LocalCounter>
- <LocalCounter worker="6">465043</LocalCounter>
- <LocalCounter worker="7">642726</LocalCounter>
- <LocalCounter worker="8">3226</LocalCounter>
- <GlobalCounter>0</GlobalCounter>
- <SumOfLocalCounter>4816597</SumOfLocalCounter>
- </GlobalTTASLockWithLocalCounter>
- <GlobalTTASLockWithLocalCounter activeWorker="10">
- <LocalCounter worker="0">142972</LocalCounter>
- <LocalCounter worker="1">387723</LocalCounter>
- <LocalCounter worker="2">457567</LocalCounter>
- <LocalCounter worker="3">302196</LocalCounter>
- <LocalCounter worker="4">314638</LocalCounter>
- <LocalCounter worker="5">457645</LocalCounter>
- <LocalCounter worker="6">371900</LocalCounter>
- <LocalCounter worker="7">428999</LocalCounter>
- <LocalCounter worker="8">691</LocalCounter>
- <LocalCounter worker="9">362</LocalCounter>
- <GlobalCounter>0</GlobalCounter>
- <SumOfLocalCounter>2864693</SumOfLocalCounter>
- </GlobalTTASLockWithLocalCounter>
- <GlobalTTASLockWithLocalCounter activeWorker="11">
- <LocalCounter worker="0">355770</LocalCounter>
- <LocalCounter worker="1">383778</LocalCounter>
- <LocalCounter worker="2">369646</LocalCounter>
- <LocalCounter worker="3">256341</LocalCounter>
- <LocalCounter worker="4">327558</LocalCounter>
- <LocalCounter worker="5">242178</LocalCounter>
- <LocalCounter worker="6">398681</LocalCounter>
- <LocalCounter worker="7">483955</LocalCounter>
- <LocalCounter worker="8">176</LocalCounter>
- <LocalCounter worker="9">201</LocalCounter>
- <LocalCounter worker="10">67</LocalCounter>
- <GlobalCounter>0</GlobalCounter>
- <SumOfLocalCounter>2818351</SumOfLocalCounter>
- </GlobalTTASLockWithLocalCounter>
- <GlobalTTASLockWithLocalCounter activeWorker="12">
- <LocalCounter worker="0">457238</LocalCounter>
- <LocalCounter worker="1">142885</LocalCounter>
- <LocalCounter worker="2">416308</LocalCounter>
- <LocalCounter worker="3">318737</LocalCounter>
- <LocalCounter worker="4">371610</LocalCounter>
- <LocalCounter worker="5">228382</LocalCounter>
- <LocalCounter worker="6">429095</LocalCounter>
- <LocalCounter worker="7">502040</LocalCounter>
- <LocalCounter worker="8">160</LocalCounter>
- <LocalCounter worker="9">115</LocalCounter>
- <LocalCounter worker="10">191</LocalCounter>
- <LocalCounter worker="11">108</LocalCounter>
- <GlobalCounter>0</GlobalCounter>
- <SumOfLocalCounter>2866869</SumOfLocalCounter>
- </GlobalTTASLockWithLocalCounter>
- <GlobalTTASLockWithLocalCounter activeWorker="13">
- <LocalCounter worker="0">155562</LocalCounter>
- <LocalCounter worker="1">155271</LocalCounter>
- <LocalCounter worker="2">154524</LocalCounter>
- <LocalCounter worker="3">155620</LocalCounter>
- <LocalCounter worker="4">155737</LocalCounter>
- <LocalCounter worker="5">155945</LocalCounter>
- <LocalCounter worker="6">156319</LocalCounter>
- <LocalCounter worker="7">155596</LocalCounter>
- <LocalCounter worker="8">526245</LocalCounter>
- <LocalCounter worker="9">524881</LocalCounter>
- <LocalCounter worker="10">495452</LocalCounter>
- <LocalCounter worker="11">497374</LocalCounter>
- <LocalCounter worker="12">586585</LocalCounter>
- <GlobalCounter>0</GlobalCounter>
- <SumOfLocalCounter>3875111</SumOfLocalCounter>
- </GlobalTTASLockWithLocalCounter>
- <GlobalTTASLockWithLocalCounter activeWorker="14">
- <LocalCounter worker="0">862</LocalCounter>
- <LocalCounter worker="1">739</LocalCounter>
- <LocalCounter worker="2">902</LocalCounter>
- <LocalCounter worker="3">876</LocalCounter>
- <LocalCounter worker="4">922</LocalCounter>
- <LocalCounter worker="5">881</LocalCounter>
- <LocalCounter worker="6">877</LocalCounter>
- <LocalCounter worker="7">945</LocalCounter>
- <LocalCounter worker="8">798225</LocalCounter>
- <LocalCounter worker="9">545250</LocalCounter>
- <LocalCounter worker="10">758729</LocalCounter>
- <LocalCounter worker="11">466001</LocalCounter>
- <LocalCounter worker="12">638255</LocalCounter>
- <LocalCounter worker="13">660193</LocalCounter>
- <GlobalCounter>0</GlobalCounter>
- <SumOfLocalCounter>3873657</SumOfLocalCounter>
- </GlobalTTASLockWithLocalCounter>
- <GlobalTTASLockWithLocalCounter activeWorker="15">
- <LocalCounter worker="0">198289</LocalCounter>
- <LocalCounter worker="1">203179</LocalCounter>
- <LocalCounter worker="2">199945</LocalCounter>
- <LocalCounter worker="3">199124</LocalCounter>
- <LocalCounter worker="4">201799</LocalCounter>
- <LocalCounter worker="5">199812</LocalCounter>
- <LocalCounter worker="6">199839</LocalCounter>
- <LocalCounter worker="7">199732</LocalCounter>
- <LocalCounter worker="8">314842</LocalCounter>
- <LocalCounter worker="9">291197</LocalCounter>
- <LocalCounter worker="10">294608</LocalCounter>
- <LocalCounter worker="11">286440</LocalCounter>
- <LocalCounter worker="12">375388</LocalCounter>
- <LocalCounter worker="13">316600</LocalCounter>
- <LocalCounter worker="14">354856</LocalCounter>
- <GlobalCounter>0</GlobalCounter>
- <SumOfLocalCounter>3835650</SumOfLocalCounter>
- </GlobalTTASLockWithLocalCounter>
- <GlobalTTASLockWithLocalCounter activeWorker="16">
- <LocalCounter worker="0">104577</LocalCounter>
- <LocalCounter worker="1">489911</LocalCounter>
- <LocalCounter worker="2">466186</LocalCounter>
- <LocalCounter worker="3">366690</LocalCounter>
- <LocalCounter worker="4">252721</LocalCounter>
- <LocalCounter worker="5">460887</LocalCounter>
- <LocalCounter worker="6">253823</LocalCounter>
- <LocalCounter worker="7">113506</LocalCounter>
- <LocalCounter worker="8">120249</LocalCounter>
- <LocalCounter worker="9">46275</LocalCounter>
- <LocalCounter worker="10">159071</LocalCounter>
- <LocalCounter worker="11">83449</LocalCounter>
- <LocalCounter worker="12">177618</LocalCounter>
- <LocalCounter worker="13">120903</LocalCounter>
- <LocalCounter worker="14">191314</LocalCounter>
- <LocalCounter worker="15">263287</LocalCounter>
- <GlobalCounter>0</GlobalCounter>
- <SumOfLocalCounter>3670467</SumOfLocalCounter>
- </GlobalTTASLockWithLocalCounter>
- <GlobalTTASLockWithLocalCounter activeWorker="17">
- <LocalCounter worker="0">234559</LocalCounter>
- <LocalCounter worker="1">118245</LocalCounter>
- <LocalCounter worker="2">219127</LocalCounter>
- <LocalCounter worker="3">295109</LocalCounter>
- <LocalCounter worker="4">248960</LocalCounter>
- <LocalCounter worker="5">181934</LocalCounter>
- <LocalCounter worker="6">297815</LocalCounter>
- <LocalCounter worker="7">322059</LocalCounter>
- <LocalCounter worker="8">163004</LocalCounter>
- <LocalCounter worker="9">174212</LocalCounter>
- <LocalCounter worker="10">26569</LocalCounter>
- <LocalCounter worker="11">77433</LocalCounter>
- <LocalCounter worker="12">133062</LocalCounter>
- <LocalCounter worker="13">232843</LocalCounter>
- <LocalCounter worker="14">33886</LocalCounter>
- <LocalCounter worker="15">82456</LocalCounter>
- <LocalCounter worker="16">4914</LocalCounter>
- <GlobalCounter>0</GlobalCounter>
- <SumOfLocalCounter>2846187</SumOfLocalCounter>
- </GlobalTTASLockWithLocalCounter>
- <GlobalTTASLockWithLocalCounter activeWorker="18">
- <LocalCounter worker="0">271262</LocalCounter>
- <LocalCounter worker="1">355312</LocalCounter>
- <LocalCounter worker="2">50921</LocalCounter>
- <LocalCounter worker="3">148825</LocalCounter>
- <LocalCounter worker="4">245230</LocalCounter>
- <LocalCounter worker="5">182256</LocalCounter>
- <LocalCounter worker="6">187273</LocalCounter>
- <LocalCounter worker="7">255451</LocalCounter>
- <LocalCounter worker="8">185514</LocalCounter>
- <LocalCounter worker="9">44729</LocalCounter>
- <LocalCounter worker="10">112757</LocalCounter>
- <LocalCounter worker="11">98411</LocalCounter>
- <LocalCounter worker="12">207969</LocalCounter>
- <LocalCounter worker="13">185668</LocalCounter>
- <LocalCounter worker="14">172032</LocalCounter>
- <LocalCounter worker="15">109135</LocalCounter>
- <LocalCounter worker="16">2423</LocalCounter>
- <LocalCounter worker="17">2380</LocalCounter>
- <GlobalCounter>0</GlobalCounter>
- <SumOfLocalCounter>2817548</SumOfLocalCounter>
- </GlobalTTASLockWithLocalCounter>
- <GlobalTTASLockWithLocalCounter activeWorker="19">
- <LocalCounter worker="0">261804</LocalCounter>
- <LocalCounter worker="1">234937</LocalCounter>
- <LocalCounter worker="2">211116</LocalCounter>
- <LocalCounter worker="3">198275</LocalCounter>
- <LocalCounter worker="4">153636</LocalCounter>
- <LocalCounter worker="5">353607</LocalCounter>
- <LocalCounter worker="6">368351</LocalCounter>
- <LocalCounter worker="7">369817</LocalCounter>
- <LocalCounter worker="8">117702</LocalCounter>
- <LocalCounter worker="9">41853</LocalCounter>
- <LocalCounter worker="10">75374</LocalCounter>
- <LocalCounter worker="11">125194</LocalCounter>
- <LocalCounter worker="12">87239</LocalCounter>
- <LocalCounter worker="13">58610</LocalCounter>
- <LocalCounter worker="14">63622</LocalCounter>
- <LocalCounter worker="15">96700</LocalCounter>
- <LocalCounter worker="16">1021</LocalCounter>
- <LocalCounter worker="17">966</LocalCounter>
- <LocalCounter worker="18">985</LocalCounter>
- <GlobalCounter>0</GlobalCounter>
- <SumOfLocalCounter>2820809</SumOfLocalCounter>
- </GlobalTTASLockWithLocalCounter>
- <GlobalTTASLockWithLocalCounter activeWorker="20">
- <LocalCounter worker="0">251976</LocalCounter>
- <LocalCounter worker="1">118001</LocalCounter>
- <LocalCounter worker="2">84641</LocalCounter>
- <LocalCounter worker="3">140476</LocalCounter>
- <LocalCounter worker="4">77669</LocalCounter>
- <LocalCounter worker="5">274047</LocalCounter>
- <LocalCounter worker="6">318570</LocalCounter>
- <LocalCounter worker="7">170363</LocalCounter>
- <LocalCounter worker="8">252676</LocalCounter>
- <LocalCounter worker="9">140874</LocalCounter>
- <LocalCounter worker="10">189186</LocalCounter>
- <LocalCounter worker="11">121034</LocalCounter>
- <LocalCounter worker="12">161358</LocalCounter>
- <LocalCounter worker="13">165381</LocalCounter>
- <LocalCounter worker="14">141826</LocalCounter>
- <LocalCounter worker="15">205937</LocalCounter>
- <LocalCounter worker="16">118</LocalCounter>
- <LocalCounter worker="17">77</LocalCounter>
- <LocalCounter worker="18">70</LocalCounter>
- <LocalCounter worker="19">94</LocalCounter>
- <GlobalCounter>0</GlobalCounter>
- <SumOfLocalCounter>2814374</SumOfLocalCounter>
- </GlobalTTASLockWithLocalCounter>
- <GlobalTTASLockWithLocalCounter activeWorker="21">
- <LocalCounter worker="0">84213</LocalCounter>
- <LocalCounter worker="1">196158</LocalCounter>
- <LocalCounter worker="2">196680</LocalCounter>
- <LocalCounter worker="3">112159</LocalCounter>
- <LocalCounter worker="4">224637</LocalCounter>
- <LocalCounter worker="5">252342</LocalCounter>
- <LocalCounter worker="6">140314</LocalCounter>
- <LocalCounter worker="7">84179</LocalCounter>
- <LocalCounter worker="8">223626</LocalCounter>
- <LocalCounter worker="9">196078</LocalCounter>
- <LocalCounter worker="10">111882</LocalCounter>
- <LocalCounter worker="11">238331</LocalCounter>
- <LocalCounter worker="12">252259</LocalCounter>
- <LocalCounter worker="13">195491</LocalCounter>
- <LocalCounter worker="14">83883</LocalCounter>
- <LocalCounter worker="15">195126</LocalCounter>
- <LocalCounter worker="16">52</LocalCounter>
- <LocalCounter worker="17">26</LocalCounter>
- <LocalCounter worker="18">35</LocalCounter>
- <LocalCounter worker="19">44</LocalCounter>
- <LocalCounter worker="20">41</LocalCounter>
- <GlobalCounter>0</GlobalCounter>
- <SumOfLocalCounter>2787556</SumOfLocalCounter>
- </GlobalTTASLockWithLocalCounter>
- <GlobalTTASLockWithLocalCounter activeWorker="22">
- <LocalCounter worker="0">31503</LocalCounter>
- <LocalCounter worker="1">252623</LocalCounter>
- <LocalCounter worker="2">196406</LocalCounter>
- <LocalCounter worker="3">168591</LocalCounter>
- <LocalCounter worker="4">140544</LocalCounter>
- <LocalCounter worker="5">168154</LocalCounter>
- <LocalCounter worker="6">280249</LocalCounter>
- <LocalCounter worker="7">168483</LocalCounter>
- <LocalCounter worker="8">195559</LocalCounter>
- <LocalCounter worker="9">55718</LocalCounter>
- <LocalCounter worker="10">139401</LocalCounter>
- <LocalCounter worker="11">251481</LocalCounter>
- <LocalCounter worker="12">222605</LocalCounter>
- <LocalCounter worker="13">111214</LocalCounter>
- <LocalCounter worker="14">139519</LocalCounter>
- <LocalCounter worker="15">251258</LocalCounter>
- <LocalCounter worker="16">46</LocalCounter>
- <LocalCounter worker="17">26</LocalCounter>
- <LocalCounter worker="18">31</LocalCounter>
- <LocalCounter worker="19">39</LocalCounter>
- <LocalCounter worker="20">39</LocalCounter>
- <LocalCounter worker="21">41</LocalCounter>
- <GlobalCounter>0</GlobalCounter>
- <SumOfLocalCounter>2773530</SumOfLocalCounter>
- </GlobalTTASLockWithLocalCounter>
- <GlobalTTASLockWithLocalCounter activeWorker="23">
- <LocalCounter worker="0">139311</LocalCounter>
- <LocalCounter worker="1">167336</LocalCounter>
- <LocalCounter worker="2">278426</LocalCounter>
- <LocalCounter worker="3">55951</LocalCounter>
- <LocalCounter worker="4">139626</LocalCounter>
- <LocalCounter worker="5">250691</LocalCounter>
- <LocalCounter worker="6">223121</LocalCounter>
- <LocalCounter worker="7">83809</LocalCounter>
- <LocalCounter worker="8">194537</LocalCounter>
- <LocalCounter worker="9">278533</LocalCounter>
- <LocalCounter worker="10">139061</LocalCounter>
- <LocalCounter worker="11">223216</LocalCounter>
- <LocalCounter worker="12">194994</LocalCounter>
- <LocalCounter worker="13">111343</LocalCounter>
- <LocalCounter worker="14">186244</LocalCounter>
- <LocalCounter worker="15">111364</LocalCounter>
- <LocalCounter worker="16">142</LocalCounter>
- <LocalCounter worker="17">126</LocalCounter>
- <LocalCounter worker="18">121</LocalCounter>
- <LocalCounter worker="19">122</LocalCounter>
- <LocalCounter worker="20">124</LocalCounter>
- <LocalCounter worker="21">125</LocalCounter>
- <LocalCounter worker="22">124</LocalCounter>
- <GlobalCounter>0</GlobalCounter>
- <SumOfLocalCounter>2778447</SumOfLocalCounter>
- </GlobalTTASLockWithLocalCounter>
- <GlobalTTASLockWithLocalCounter activeWorker="24">
- <LocalCounter worker="0">127539</LocalCounter>
- <LocalCounter worker="1">128004</LocalCounter>
- <LocalCounter worker="2">127243</LocalCounter>
- <LocalCounter worker="3">128231</LocalCounter>
- <LocalCounter worker="4">128122</LocalCounter>
- <LocalCounter worker="5">127956</LocalCounter>
- <LocalCounter worker="6">128394</LocalCounter>
- <LocalCounter worker="7">128093</LocalCounter>
- <LocalCounter worker="8">121225</LocalCounter>
- <LocalCounter worker="9">120770</LocalCounter>
- <LocalCounter worker="10">120549</LocalCounter>
- <LocalCounter worker="11">120785</LocalCounter>
- <LocalCounter worker="12">120461</LocalCounter>
- <LocalCounter worker="13">120591</LocalCounter>
- <LocalCounter worker="14">121214</LocalCounter>
- <LocalCounter worker="15">120733</LocalCounter>
- <LocalCounter worker="16">120387</LocalCounter>
- <LocalCounter worker="17">121153</LocalCounter>
- <LocalCounter worker="18">121255</LocalCounter>
- <LocalCounter worker="19">120737</LocalCounter>
- <LocalCounter worker="20">120859</LocalCounter>
- <LocalCounter worker="21">121071</LocalCounter>
- <LocalCounter worker="22">121031</LocalCounter>
- <LocalCounter worker="23">121163</LocalCounter>
- <GlobalCounter>0</GlobalCounter>
- <SumOfLocalCounter>2957566</SumOfLocalCounter>
- </GlobalTTASLockWithLocalCounter>
-</SMPLock01>
+*** TEST VERSION: 6.0.0.90c8934179f2ba4c042caa95b3473d37835bed80
+*** TEST STATE: EXPECTED_PASS
+*** TEST BUILD: RTEMS_SMP
+*** TEST TOOLS: 13.2.0 20230727 (RTEMS 6, RSB d3d738c35a71ca05f675b188539225099401ac79, Newlib a021448)
+*** BEGIN OF JSON DATA ***
+[
+ {
+ "lock-type": "Ticket Lock",
+ "lock-object": "global",
+ "section-type": "local counter",
+ "results": [
+ {
+ "counter": [1385097],
+ "global-counter": 0,
+ "sum-of-local-counter": 1385097
+ }, {
+ "counter": [997876, 997974],
+ "global-counter": 0,
+ "sum-of-local-counter": 1995850
+ }, {
+ "counter": [998024, 998123, 998123],
+ "global-counter": 0,
+ "sum-of-local-counter": 2994270
+ }, {
+ "counter": [997988, 998086, 998086, 998086],
+ "global-counter": 0,
+ "sum-of-local-counter": 3992246
+ }
+ ]
+ }, {
+ "lock-type": "MCS Lock",
+ "lock-object": "global",
+ "section-type": "local counter",
+ "results": [
+ {
+ "counter": [1512045],
+ "global-counter": 0,
+ "sum-of-local-counter": 1512045
+ }, {
+ "counter": [997877, 997878],
+ "global-counter": 0,
+ "sum-of-local-counter": 1995755
+ }, {
+ "counter": [998023, 998122, 998122],
+ "global-counter": 0,
+ "sum-of-local-counter": 2994267
+ }, {
+ "counter": [997987, 998086, 998086, 998086],
+ "global-counter": 0,
+ "sum-of-local-counter": 3992245
+ }
+ ]
+ }, {
+ "lock-type": "Ticket Lock",
+ "lock-object": "global",
+ "section-type": "global counter",
+ "results": [
+ {
+ "counter": [997921, 997945, 997945, 997945],
+ "global-counter": 3991756,
+ "sum-of-local-counter": 3991756
+ }
+ ]
+ }, {
+ "lock-type": "MCS Lock",
+ "lock-object": "global",
+ "section-type": "global counter",
+ "results": [
+ {
+ "counter": [527090, 527096, 527096, 527096],
+ "global-counter": 2108378,
+ "sum-of-local-counter": 2108378
+ }
+ ]
+ }, {
+ "lock-type": "Ticket Lock",
+ "lock-object": "local",
+ "section-type": "local counter",
+ "results": [
+ {
+ "counter": [1385769],
+ "global-counter": 0,
+ "sum-of-local-counter": 1385769
+ }, {
+ "counter": [1385995, 1387328],
+ "global-counter": 0,
+ "sum-of-local-counter": 2773323
+ }, {
+ "counter": [1386191, 1387525, 1387526],
+ "global-counter": 0,
+ "sum-of-local-counter": 4161242
+ }, {
+ "counter": [1386136, 1387468, 1387470, 1387407],
+ "global-counter": 0,
+ "sum-of-local-counter": 5548481
+ }
+ ]
+ }, {
+ "lock-type": "MCS Lock",
+ "lock-object": "local",
+ "section-type": "local counter",
+ "results": [
+ {
+ "counter": [1512021],
+ "global-counter": 0,
+ "sum-of-local-counter": 1512021
+ }, {
+ "counter": [1511993, 1513445],
+ "global-counter": 0,
+ "sum-of-local-counter": 3025438
+ }, {
+ "counter": [1512208, 1513656, 1513656],
+ "global-counter": 0,
+ "sum-of-local-counter": 4539520
+ }, {
+ "counter": [1512149, 1513595, 1513595, 1513533],
+ "global-counter": 0,
+ "sum-of-local-counter": 6052872
+ }
+ ]
+ }, {
+ "lock-type": "Ticket Lock",
+ "lock-object": "local",
+ "section-type": "global counter",
+ "results": [
+ {
+ "counter": [1160403, 1161527, 1161527, 1161469],
+ "global-counter": 3727827,
+ "sum-of-local-counter": 4644926
+ }
+ ]
+ }, {
+ "lock-type": "MCS Lock",
+ "lock-object": "local",
+ "section-type": "global counter",
+ "results": [
+ {
+ "counter": [1247164, 1248373, 1248373, 1248313],
+ "global-counter": 3876384,
+ "sum-of-local-counter": 4992223
+ }
+ ]
+ }, {
+ "lock-type": "Ticket Lock",
+ "lock-object": "global",
+ "section-type": "busy loop",
+ "results": [
+ {
+ "counter": [39932, 39932, 39932, 39932],
+ "global-counter": 0,
+ "sum-of-local-counter": 159728
+ }
+ ]
+ }, {
+ "lock-type": "MCS Lock",
+ "lock-object": "global",
+ "section-type": "busy loop",
+ "results": [
+ {
+ "counter": [39934, 39935, 39934, 39934],
+ "global-counter": 0,
+ "sum-of-local-counter": 159737
+ }
+ ]
+ }, {
+ "lock-type": "Sequence Lock",
+ "lock-object": "global",
+ "section-type": "two global counter",
+ "results": [
+ {
+ "counter": [1847772, 666526, 666526, 666488],
+ "global-counter": 0,
+ "sum-of-local-counter": 3847312
+ }
+ ]
+ }, {
+ "lock-type": "TAS Lock",
+ "lock-object": "global",
+ "section-type": "local counter",
+ "results": [
+ {
+ "counter": [2934600],
+ "global-counter": 0,
+ "sum-of-local-counter": 2934600
+ }, {
+ "counter": [2217444, 2219107],
+ "global-counter": 0,
+ "sum-of-local-counter": 4436551
+ }, {
+ "counter": [1833240, 1836467, 1835261],
+ "global-counter": 0,
+ "sum-of-local-counter": 5504968
+ }, {
+ "counter": [1652247, 1652937, 1653163, 1652725],
+ "global-counter": 0,
+ "sum-of-local-counter": 6611072
+ }
+ ]
+ }, {
+ "lock-type": "TTAS Lock",
+ "lock-object": "global",
+ "section-type": "local counter",
+ "results": [
+ {
+ "counter": [2935135],
+ "global-counter": 0,
+ "sum-of-local-counter": 2935135
+ }, {
+ "counter": [1732426, 1758193],
+ "global-counter": 0,
+ "sum-of-local-counter": 3490619
+ }, {
+ "counter": [1202763, 1204087, 1203894],
+ "global-counter": 0,
+ "sum-of-local-counter": 3610744
+ }, {
+ "counter": [845721, 846759, 848543, 838946],
+ "global-counter": 0,
+ "sum-of-local-counter": 3379969
+ }
+ ]
+ }
+]
+*** END OF JSON DATA ***
+
*** END OF TEST SMPLOCK 1 ***
+
+cpu 0 in error mode (tt = 0x80)
+ 1550147550 000091c0: 91d02000 ta 0x0
diff --git a/testsuites/smptests/smplock01/smplock01fair.py b/testsuites/smptests/smplock01/smplock01fair.py
index 378dfd8028..a3851ad4c6 100755
--- a/testsuites/smptests/smplock01/smplock01fair.py
+++ b/testsuites/smptests/smplock01/smplock01fair.py
@@ -1,59 +1,71 @@
-#!/usr/bin/env python
+# SPDX-License-Identifier: BSD-2-Clause
+# Copyright (C) 2016, 2024 embedded brains GmbH & Co. KG
#
-# Copyright (c) 2016 embedded brains GmbH. All rights reserved.
-#
-# The license and distribution terms for this file may be
-# found in the file LICENSE in this distribution or at
-# http://www.rtems.org/license/LICENSE.
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1. Redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+# 2. Redistributions in binary form must reproduce the above copyright
+# notice, this list of conditions and the following disclaimer in the
+# documentation and/or other materials provided with the distribution.
#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+# ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
+# LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+# POSSIBILITY OF SUCH DAMAGE.
-import re
-import libxml2
+import json
import math
+import re
import statistics
-from libxml2 import xmlNode
-import matplotlib.pyplot as plt
-data = open('smplock01.scn').read()
-data = re.sub(r'\*\*\*.*\*\*\*', '', data)
-doc = libxml2.parseDoc(data)
-ctx = doc.xpathNewContext()
-
-plt.title('SMP Lock Fairness')
-plt.xlabel('Active Workers')
-plt.ylabel('Normed Coefficient of Variation')
-
-i = 1
-ticket = []
-mcs = []
-tas = []
-ttas = []
-
-def m(n):
- return int(xmlNode.getContent(n))
-
-def normedCoefficientOfVariation(name, i):
- y = map(m, ctx.xpathEval('/SMPLock01/' + name + '[@activeWorker=' + str(i) + ']/LocalCounter'))
- if len(y) == 0:
- raise
- return (statistics.stdev(y) / statistics.mean(y)) / math.sqrt(len(y))
-
-try:
- while True:
- i = i + 1
- ticket.append(normedCoefficientOfVariation('GlobalTicketLockWithLocalCounter', i))
- mcs.append(normedCoefficientOfVariation('GlobalMCSLockWithLocalCounter', i))
- tas.append(normedCoefficientOfVariation('GlobalTASLockWithLocalCounter', i))
- ttas.append(normedCoefficientOfVariation('GlobalTTASLockWithLocalCounter', i))
-except:
- pass
-
-x = range(2, len(ticket) + 2)
-plt.xticks(x)
-plt.yscale('symlog', linthreshy = 1e-6)
-plt.plot(x, ticket, label = 'Ticket Lock', marker = 'o')
-plt.plot(x, mcs, label = 'MCS Lock', marker = 'o')
-plt.plot(x, tas, label = 'TAS Lock', marker = 'o')
-plt.plot(x, ttas, label = 'TTAS Lock', marker = 'o')
-plt.legend(loc = 'best')
-plt.show()
+import matplotlib.pyplot as plt # type: ignore
+from matplotlib import ticker # type: ignore
+
+
+def _normed_coefficient_of_variation(counter: list[int]) -> float:
+ return (statistics.stdev(counter) / statistics.mean(counter)) / math.sqrt(
+ len(counter))
+
+
+def _plot(data: dict) -> None:
+ _, axes = plt.subplots()
+ axes.set_title("SMP Lock Fairness")
+ axes.set_xlabel("Active Workers")
+ axes.set_ylabel("Normed Coefficient of Variation")
+ axes.set_yscale("symlog", linthresh=1e-6)
+ x = list(range(2, len(data[0]["results"]) + 1))
+ axes.xaxis.set_major_locator(ticker.FixedLocator(x))
+ for samples in data:
+ if samples["lock-object"] != "global":
+ continue
+ if samples["section-type"] != "local counter":
+ continue
+ y = [
+ _normed_coefficient_of_variation(results["counter"])
+ for results in samples["results"][1:]
+ ]
+ axes.plot(x, y, label=samples["lock-type"], marker="o")
+ axes.legend(loc="best")
+ plt.savefig("smplock01fair.png")
+ plt.savefig("smplock01fair.pdf")
+ plt.close()
+
+
+_JSON_DATA = re.compile(
+ r"\*\*\* BEGIN OF JSON DATA \*\*\*(.*)"
+ r"\*\*\* END OF JSON DATA \*\*\*", re.DOTALL)
+
+with open("smplock01.scn", "r", encoding="utf-8") as src:
+ match = _JSON_DATA.search(src.read())
+ data = json.loads(match.group(1))
+
+_plot(data)
diff --git a/testsuites/smptests/smplock01/smplock01perf.py b/testsuites/smptests/smplock01/smplock01perf.py
index 43816814f8..09c7fb10b4 100755
--- a/testsuites/smptests/smplock01/smplock01perf.py
+++ b/testsuites/smptests/smplock01/smplock01perf.py
@@ -1,39 +1,60 @@
-#!/usr/bin/env python
+# SPDX-License-Identifier: BSD-2-Clause
+# Copyright (C) 2016, 2024 embedded brains GmbH & Co. KG
#
-# Copyright (c) 2016 embedded brains GmbH. All rights reserved.
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1. Redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+# 2. Redistributions in binary form must reproduce the above copyright
+# notice, this list of conditions and the following disclaimer in the
+# documentation and/or other materials provided with the distribution.
#
-# The license and distribution terms for this file may be
-# found in the file LICENSE in this distribution or at
-# http://www.rtems.org/license/LICENSE.
-#
-
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+# ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
+# LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+# POSSIBILITY OF SUCH DAMAGE.
+
+import json
import re
-import libxml2
-from libxml2 import xmlNode
-import matplotlib.pyplot as plt
-data = open('smplock01.scn').read()
-data = re.sub(r'\*\*\*.*\*\*\*', '', data)
-doc = libxml2.parseDoc(data)
-ctx = doc.xpathNewContext()
-
-plt.title('SMP Lock Performance')
-plt.xlabel('Active Workers')
-plt.ylabel('Operation Count')
-
-y = map(xmlNode.getContent, ctx.xpathEval('/SMPLock01/GlobalTicketLockWithLocalCounter/SumOfLocalCounter'))
-x = range(1, len(y) + 1)
-plt.xticks(x)
-plt.plot(x, y, label = 'Ticket Lock', marker = 'o')
-
-y = map(xmlNode.getContent, ctx.xpathEval('/SMPLock01/GlobalMCSLockWithLocalCounter/SumOfLocalCounter'))
-plt.plot(x, y, label = 'MCS Lock', marker = 'o')
-
-y = map(xmlNode.getContent, ctx.xpathEval('/SMPLock01/GlobalTASLockWithLocalCounter/SumOfLocalCounter'))
-plt.plot(x, y, label = 'TAS Lock', marker = 'o')
-
-y = map(xmlNode.getContent, ctx.xpathEval('/SMPLock01/GlobalTTASLockWithLocalCounter/SumOfLocalCounter'))
-plt.plot(x, y, label = 'TTAS Lock', marker = 'o')
-
-plt.legend(loc = 'best')
-plt.show()
+import matplotlib.pyplot as plt # type: ignore
+from matplotlib import ticker # type: ignore
+
+
+def _plot(data: dict) -> None:
+ _, axes = plt.subplots()
+ axes.set_title("SMP Lock Performance")
+ axes.set_xlabel("Active Workers")
+ axes.set_ylabel("Operation Count")
+ x = list(range(1, len(data[0]["results"]) + 1))
+ axes.xaxis.set_major_locator(ticker.FixedLocator(x))
+ for samples in data:
+ if samples["lock-object"] != "global":
+ continue
+ if samples["section-type"] != "local counter":
+ continue
+ y = [sum(results["counter"]) for results in samples["results"]]
+ axes.plot(x, y, label=samples["lock-type"], marker="o")
+ axes.legend(loc="best")
+ plt.savefig("smplock01perf.png")
+ plt.savefig("smplock01perf.pdf")
+ plt.close()
+
+
+_JSON_DATA = re.compile(
+ r"\*\*\* BEGIN OF JSON DATA \*\*\*(.*)"
+ r"\*\*\* END OF JSON DATA \*\*\*", re.DOTALL)
+
+with open("smplock01.scn", "r", encoding="utf-8") as src:
+ match = _JSON_DATA.search(src.read())
+ data = json.loads(match.group(1))
+
+_plot(data)
diff --git a/testsuites/smptests/smpmigration01/init.c b/testsuites/smptests/smpmigration01/init.c
index e4c0457848..7829d658d9 100644
--- a/testsuites/smptests/smpmigration01/init.c
+++ b/testsuites/smptests/smpmigration01/init.c
@@ -1,7 +1,7 @@
/* SPDX-License-Identifier: BSD-2-Clause */
/*
- * Copyright (c) 2013-2015 embedded brains GmbH. All rights reserved.
+ * Copyright (C) 2013, 2015 embedded brains GmbH & Co. KG
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
diff --git a/testsuites/smptests/smpmigration02/init.c b/testsuites/smptests/smpmigration02/init.c
index 90d2b97efd..a81d6b8fe2 100644
--- a/testsuites/smptests/smpmigration02/init.c
+++ b/testsuites/smptests/smpmigration02/init.c
@@ -1,7 +1,7 @@
/* SPDX-License-Identifier: BSD-2-Clause */
/*
- * Copyright (c) 2014 embedded brains GmbH. All rights reserved.
+ * Copyright (c) 2014 embedded brains GmbH & Co. KG
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
diff --git a/testsuites/smptests/smpmrsp01/init.c b/testsuites/smptests/smpmrsp01/init.c
index e435f77b2a..481328cec7 100644
--- a/testsuites/smptests/smpmrsp01/init.c
+++ b/testsuites/smptests/smpmrsp01/init.c
@@ -1,7 +1,7 @@
/* SPDX-License-Identifier: BSD-2-Clause */
/*
- * Copyright (c) 2014-2015 embedded brains GmbH. All rights reserved.
+ * Copyright (C) 2014, 2015 embedded brains GmbH & Co. KG
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
diff --git a/testsuites/smptests/smpmulticast01/init.c b/testsuites/smptests/smpmulticast01/init.c
index ec4bab922d..51a4624ea1 100644
--- a/testsuites/smptests/smpmulticast01/init.c
+++ b/testsuites/smptests/smpmulticast01/init.c
@@ -1,7 +1,7 @@
/*
* SPDX-License-Identifier: BSD-2-Clause
*
- * Copyright (C) 2019 embedded brains GmbH
+ * Copyright (C) 2019 embedded brains GmbH & Co. KG
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
@@ -563,14 +563,16 @@ static void fatal_extension(
bool ok;
if (source == RTEMS_FATAL_SOURCE_SMP) {
- T_step_eq_int(1, source, RTEMS_FATAL_SOURCE_SMP);
- T_step_false(2, always_set_to_false, "unexpected argument value");
- T_step_eq_int(3, code, SMP_FATAL_WRONG_CPU_STATE_TO_PERFORM_JOBS);
- T_case_end();
-
- ok = T_run_finalize();
- rtems_test_assert(ok);
- TEST_END();
+ if (code != SMP_FATAL_SHUTDOWN_RESPONSE) {
+ T_step_eq_int(1, source, RTEMS_FATAL_SOURCE_SMP);
+ T_step_false(2, always_set_to_false, "unexpected argument value");
+ T_step_eq_int(3, code, SMP_FATAL_WRONG_CPU_STATE_TO_PERFORM_JOBS);
+ T_case_end();
+
+ ok = T_run_finalize();
+ rtems_test_assert(ok);
+ TEST_END();
+ }
} else if (source == RTEMS_FATAL_SOURCE_APPLICATION) {
ok = T_run_finalize();
rtems_test_assert(ok);
diff --git a/testsuites/smptests/smpmutex01/init.c b/testsuites/smptests/smpmutex01/init.c
index de4b21d0dc..ad887318ab 100644
--- a/testsuites/smptests/smpmutex01/init.c
+++ b/testsuites/smptests/smpmutex01/init.c
@@ -1,7 +1,7 @@
/* SPDX-License-Identifier: BSD-2-Clause */
/*
- * Copyright (c) 2015, 2016 embedded brains GmbH. All rights reserved.
+ * Copyright (C) 2015, 2016 embedded brains GmbH & Co. KG
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
diff --git a/testsuites/smptests/smpmutex02/init.c b/testsuites/smptests/smpmutex02/init.c
index 20a98fa3ef..b219f9a2c7 100644
--- a/testsuites/smptests/smpmutex02/init.c
+++ b/testsuites/smptests/smpmutex02/init.c
@@ -1,7 +1,7 @@
/* SPDX-License-Identifier: BSD-2-Clause */
/*
- * Copyright (c) 2016 embedded brains GmbH. All rights reserved.
+ * Copyright (c) 2016 embedded brains GmbH & Co. KG
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
diff --git a/testsuites/smptests/smpopenmp01/init.c b/testsuites/smptests/smpopenmp01/init.c
index aabb98c596..d37fe852cf 100644
--- a/testsuites/smptests/smpopenmp01/init.c
+++ b/testsuites/smptests/smpopenmp01/init.c
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2017 embedded brains GmbH. All rights reserved.
+ * Copyright (C) 2017, 2024 embedded brains GmbH & Co. KG
*
* The license and distribution terms for this file may be
* found in the file LICENSE in this distribution or at
@@ -143,21 +143,31 @@ static void do_bench(const char *name, void (*bench)(void), int n)
(*bench)();
}
delta = omp_get_wtime() - start;
- printf("\t\t<%sBench unit=\"s\">%f</%sBench>\n", name, delta, name);
+ printf(",\n \"%s-bench\": %f", name, delta);
}
+static const char *test_sep = "";
+
static void microbench(int num_threads, int n)
{
- printf("\t<Microbench numThreads=\"%i\" majorLoopCount=\"%i\">\n", num_threads, n);
omp_set_num_threads(num_threads);
- do_bench("Barrier", barrier_bench, n);
- do_bench("Parallel", parallel_bench, n);
- do_bench("Static", static_bench, n);
- do_bench("Dynamic", dynamic_bench, n);
- do_bench("Guided", guided_bench, n);
- do_bench("Runtime", runtime_bench, n);
- do_bench("Single", single_bench, n);
- printf("\t</Microbench>\n");
+ printf(
+ "%s{\n"
+ " \"num-threads\": %i,\n"
+ " \"major-loop-count\": %i",
+ test_sep,
+ num_threads,
+ n
+ );
+ test_sep = ", ";
+ do_bench("barrier", barrier_bench, n);
+ do_bench("parallel", parallel_bench, n);
+ do_bench("static", static_bench, n);
+ do_bench("dynamic", dynamic_bench, n);
+ do_bench("guided", guided_bench, n);
+ do_bench("runtime", runtime_bench, n);
+ do_bench("single", single_bench, n);
+ printf("\n }");
}
static int estimate_3s_runtime_with_one_proc(void)
@@ -186,7 +196,7 @@ static void test(void)
int num_procs;
int n;
- printf("<SMPOpenMP01>\n");
+ printf("*** BEGIN OF JSON DATA ***\n[\n ");
n = estimate_3s_runtime_with_one_proc();
num_procs = omp_get_num_procs();
@@ -196,7 +206,7 @@ static void test(void)
microbench(i, n);
}
- printf("</SMPOpenMP01>\n");
+ printf("\n]\n*** END OF JSON DATA ***\n");
}
#ifdef __rtems__
diff --git a/testsuites/smptests/smpopenmp01/smpopenmp01.py b/testsuites/smptests/smpopenmp01/smpopenmp01.py
index 139aedd4af..227b089926 100644
--- a/testsuites/smptests/smpopenmp01/smpopenmp01.py
+++ b/testsuites/smptests/smpopenmp01/smpopenmp01.py
@@ -1,42 +1,60 @@
-#!/usr/bin/env python
+# SPDX-License-Identifier: BSD-2-Clause
+# Copyright (C) 2017, 2024 embedded brains GmbH & Co. KG
#
-# Copyright (c) 2017 embedded brains GmbH. All rights reserved.
-#
-# The license and distribution terms for this file may be
-# found in the file LICENSE in this distribution or at
-# http://www.rtems.org/license/LICENSE.
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1. Redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+# 2. Redistributions in binary form must reproduce the above copyright
+# notice, this list of conditions and the following disclaimer in the
+# documentation and/or other materials provided with the distribution.
#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+# ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
+# LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+# POSSIBILITY OF SUCH DAMAGE.
+import json
import re
-import libxml2
-from libxml2 import xmlNode
-import matplotlib.pyplot as plt
-data = open('smpopenmp01.scn').read()
-data = re.sub(r'\*\*\*.*', '', data)
-doc = libxml2.parseDoc(data)
-ctx = doc.xpathNewContext()
-
-plt.title('OpenMP Microbench')
-plt.xlabel('Number of Threads')
-plt.ylabel('Relative Duration')
-
-def m(n):
- return float(n.getContent())
-
-def p(bench):
- d = map(m, ctx.xpathEval('/SMPOpenMP01/Microbench/' + bench))
- y = [x / d[0] for x in d]
- x = range(1, len(y) + 1)
- plt.xticks(x)
- plt.plot(x, y, label = bench, marker = 'o')
-
-p('BarrierBench')
-p('ParallelBench')
-p('StaticBench')
-p('DynamicBench')
-p('GuidedBench')
-p('RuntimeBench')
-p('SingleBench')
-plt.legend(loc = 'best')
-plt.show()
+import matplotlib.pyplot as plt # type: ignore
+from matplotlib import ticker # type: ignore
+
+
+def _plot(data: dict) -> None:
+ _, axes = plt.subplots()
+ axes.set_title("OpenMP Microbench")
+ axes.set_xlabel("Number of Threads")
+ axes.set_ylabel("Relative Duration")
+ x = list(range(1, len(data) + 1))
+ axes.xaxis.set_major_locator(ticker.FixedLocator(x))
+ for key in [
+ "barrier-bench", "dynamic-bench", "guided-bench", "parallel-bench",
+ "runtime-bench", "single-bench", "static-bench"
+ ]:
+ d = [results[key] for results in data]
+ y = [x / d[0] for x in d]
+ axes.plot(x, y, label=key.replace("-bench", ""), marker="o")
+ axes.legend(loc="best")
+ plt.savefig("smpopenmp01.png")
+ plt.savefig("smpopenmp01.pdf")
+ plt.close()
+
+
+_JSON_DATA = re.compile(
+ r"\*\*\* BEGIN OF JSON DATA \*\*\*(.*)"
+ r"\*\*\* END OF JSON DATA \*\*\*", re.DOTALL)
+
+with open("smpopenmp01.scn", "r", encoding="utf-8") as src:
+ match = _JSON_DATA.search(src.read())
+ data = json.loads(match.group(1))
+
+_plot(data)
diff --git a/testsuites/smptests/smpopenmp01/smpopenmp01.scn b/testsuites/smptests/smpopenmp01/smpopenmp01.scn
index 6f63ddca1d..2d6c944d3f 100644
--- a/testsuites/smptests/smpopenmp01/smpopenmp01.scn
+++ b/testsuites/smptests/smpopenmp01/smpopenmp01.scn
@@ -1,81 +1,64 @@
+
+ SIS - SPARC/RISCV instruction simulator 2.30, copyright Jiri Gaisler 2020
+ Bug-reports to jiri@gaisler.se
+
+ GR740/LEON4 emulation enabled, 4 cpus online, delta 50 clocks
+
+ Loaded build/sparc/gr740/testsuites/smptests/smpopenmp01.exe, entry 0x00000000
+
+
*** BEGIN OF TEST SMPOPENMP 1 ***
-*** TEST VERSION: 5.0.0.4c8cffc19865eaa3b033ce2776bcce9992f24b18
+*** TEST VERSION: 6.0.0.43eecff0b1b2915b87d5324ae562888851cabdaf
*** TEST STATE: EXPECTED_PASS
-*** TEST BUILD: RTEMS_POSIX_API RTEMS_SMP
-*** TEST TOOLS: 7.3.0 20180125 (RTEMS 5, RSB 6d9c77c77d271d1fc2dfe8493d6713930b52a6dd, Newlib 3.0.0)
-<SMPOpenMP01>
- <Microbench numThreads="1" majorLoopCount="20">
- <BarrierBench unit="s">0.720318</BarrierBench>
- <ParallelBench unit="s">1.121403</ParallelBench>
- <StaticBench unit="s">0.059288</StaticBench>
- <DynamicBench unit="s">0.440113</DynamicBench>
- <GuidedBench unit="s">0.003230</GuidedBench>
- <RuntimeBench unit="s">0.440121</RuntimeBench>
- <SingleBench unit="s">0.116486</SingleBench>
- </Microbench>
- <Microbench numThreads="2" majorLoopCount="20">
- <BarrierBench unit="s">0.416734</BarrierBench>
- <ParallelBench unit="s">0.259013</ParallelBench>
- <StaticBench unit="s">0.015311</StaticBench>
- <DynamicBench unit="s">0.196751</DynamicBench>
- <GuidedBench unit="s">0.002367</GuidedBench>
- <RuntimeBench unit="s">0.199640</RuntimeBench>
- <SingleBench unit="s">0.077629</SingleBench>
- </Microbench>
- <Microbench numThreads="3" majorLoopCount="20">
- <BarrierBench unit="s">0.748332</BarrierBench>
- <ParallelBench unit="s">0.387318</ParallelBench>
- <StaticBench unit="s">0.021244</StaticBench>
- <DynamicBench unit="s">0.141558</DynamicBench>
- <GuidedBench unit="s">0.001544</GuidedBench>
- <RuntimeBench unit="s">0.142693</RuntimeBench>
- <SingleBench unit="s">0.117683</SingleBench>
- </Microbench>
- <Microbench numThreads="4" majorLoopCount="20">
- <BarrierBench unit="s">0.552830</BarrierBench>
- <ParallelBench unit="s">0.323241</ParallelBench>
- <StaticBench unit="s">0.017796</StaticBench>
- <DynamicBench unit="s">0.099475</DynamicBench>
- <GuidedBench unit="s">0.001259</GuidedBench>
- <RuntimeBench unit="s">0.100053</RuntimeBench>
- <SingleBench unit="s">0.091069</SingleBench>
- </Microbench>
- <Microbench numThreads="5" majorLoopCount="20">
- <BarrierBench unit="s">0.882791</BarrierBench>
- <ParallelBench unit="s">0.452561</ParallelBench>
- <StaticBench unit="s">0.023620</StaticBench>
- <DynamicBench unit="s">0.094107</DynamicBench>
- <GuidedBench unit="s">0.000989</GuidedBench>
- <RuntimeBench unit="s">0.093911</RuntimeBench>
- <SingleBench unit="s">0.130070</SingleBench>
- </Microbench>
- <Microbench numThreads="6" majorLoopCount="20">
- <BarrierBench unit="s">0.670385</BarrierBench>
- <ParallelBench unit="s">0.393587</ParallelBench>
- <StaticBench unit="s">0.021141</StaticBench>
- <DynamicBench unit="s">0.072322</DynamicBench>
- <GuidedBench unit="s">0.000937</GuidedBench>
- <RuntimeBench unit="s">0.069804</RuntimeBench>
- <SingleBench unit="s">0.104107</SingleBench>
- </Microbench>
- <Microbench numThreads="7" majorLoopCount="20">
- <BarrierBench unit="s">1.031511</BarrierBench>
- <ParallelBench unit="s">0.466571</ParallelBench>
- <StaticBench unit="s">0.024944</StaticBench>
- <DynamicBench unit="s">0.069194</DynamicBench>
- <GuidedBench unit="s">0.000814</GuidedBench>
- <RuntimeBench unit="s">0.069596</RuntimeBench>
- <SingleBench unit="s">0.133137</SingleBench>
- </Microbench>
- <Microbench numThreads="8" majorLoopCount="20">
- <BarrierBench unit="s">0.761015</BarrierBench>
- <ParallelBench unit="s">0.452577</ParallelBench>
- <StaticBench unit="s">0.023979</StaticBench>
- <DynamicBench unit="s">0.061193</DynamicBench>
- <GuidedBench unit="s">0.000799</GuidedBench>
- <RuntimeBench unit="s">0.061519</RuntimeBench>
- <SingleBench unit="s">0.114285</SingleBench>
- </Microbench>
-</SMPOpenMP01>
+*** TEST BUILD: RTEMS_SMP
+*** TEST TOOLS: 13.2.0 20230727 (RTEMS 6, RSB d3d738c35a71ca05f675b188539225099401ac79, Newlib a021448)
+*** BEGIN OF JSON DATA ***
+[
+ {
+ "num-threads": 1,
+ "major-loop-count": 1,
+ "barrier-bench": 0.269517,
+ "parallel-bench": 1.277477,
+ "static-bench": 0.073541,
+ "dynamic-bench": 0.118271,
+ "guided-bench": 0.008089,
+ "runtime-bench": 0.142307,
+ "single-bench": 0.034294
+ }, {
+ "num-threads": 2,
+ "major-loop-count": 1,
+ "barrier-bench": 0.269345,
+ "parallel-bench": 0.557423,
+ "static-bench": 0.033622,
+ "dynamic-bench": 0.059762,
+ "guided-bench": 0.004065,
+ "runtime-bench": 0.072107,
+ "single-bench": 0.033129
+ }, {
+ "num-threads": 3,
+ "major-loop-count": 1,
+ "barrier-bench": 0.271522,
+ "parallel-bench": 0.631576,
+ "static-bench": 0.036074,
+ "dynamic-bench": 0.039981,
+ "guided-bench": 0.002757,
+ "runtime-bench": 0.049072,
+ "single-bench": 0.033129
+ }, {
+ "num-threads": 4,
+ "major-loop-count": 1,
+ "barrier-bench": 0.272048,
+ "parallel-bench": 0.705746,
+ "static-bench": 0.039061,
+ "dynamic-bench": 0.030069,
+ "guided-bench": 0.002095,
+ "runtime-bench": 0.037570,
+ "single-bench": 0.033176
+ }
+]
+*** END OF JSON DATA ***
*** END OF TEST SMPOPENMP 1 ***
+
+cpu 0 in error mode (tt = 0x80)
+ 706370700 0000cac0: 91d02000 ta 0x0
diff --git a/testsuites/smptests/smppsxaffinity01/smppsxaffinity01.doc b/testsuites/smptests/smppsxaffinity01/smppsxaffinity01.doc
index db4ab87c8e..9ed60c4616 100644
--- a/testsuites/smptests/smppsxaffinity01/smppsxaffinity01.doc
+++ b/testsuites/smptests/smppsxaffinity01/smppsxaffinity01.doc
@@ -1,9 +1,28 @@
+# SPDX-License-Identifier: BSD-2-Clause
+
# COPYRIGHT (c) 1989-2014.
# On-Line Applications Research Corporation (OAR).
#
-# The license and distribution terms for this file may be
-# found in the file LICENSE in this distribution or at
-# http://www.rtems.org/license/LICENSE.
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1. Redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+# 2. Redistributions in binary form must reproduce the above copyright
+# notice, this list of conditions and the following disclaimer in the
+# documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+# ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
+# LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+# POSSIBILITY OF SUCH DAMAGE.
#
This file describes the directives and concepts tested by this test set.
diff --git a/testsuites/smptests/smppsxaffinity02/smppsxaffinity02.doc b/testsuites/smptests/smppsxaffinity02/smppsxaffinity02.doc
index 857282c508..08d1000f0c 100644
--- a/testsuites/smptests/smppsxaffinity02/smppsxaffinity02.doc
+++ b/testsuites/smptests/smppsxaffinity02/smppsxaffinity02.doc
@@ -1,9 +1,28 @@
+# SPDX-License-Identifier: BSD-2-Clause
+
# COPYRIGHT (c) 1989-2014.
# On-Line Applications Research Corporation (OAR).
#
-# The license and distribution terms for this file may be
-# found in the file LICENSE in this distribution or at
-# http://www.rtems.org/license/LICENSE.
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1. Redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+# 2. Redistributions in binary form must reproduce the above copyright
+# notice, this list of conditions and the following disclaimer in the
+# documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+# ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
+# LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+# POSSIBILITY OF SUCH DAMAGE.
#
directives:
diff --git a/testsuites/smptests/smppsxmutex01/init.c b/testsuites/smptests/smppsxmutex01/init.c
index f5aacb42d8..6532f5868d 100644
--- a/testsuites/smptests/smppsxmutex01/init.c
+++ b/testsuites/smptests/smppsxmutex01/init.c
@@ -1,7 +1,7 @@
/* SPDX-License-Identifier: BSD-2-Clause */
/*
- * Copyright (c) 2016 embedded brains GmbH. All rights reserved.
+ * Copyright (c) 2016 embedded brains GmbH & Co. KG
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
@@ -55,25 +55,11 @@ static test_context test_instance;
static void *thread_b(void *arg)
{
test_context *ctx;
- rtems_id scheduler_b_id;
- rtems_status_code sc;
- rtems_task_priority prio;
int prio_ceiling;
int eno;
ctx = arg;
- rtems_test_assert(rtems_scheduler_get_processor() == 0);
-
- sc = rtems_scheduler_ident(SCHED_B, &scheduler_b_id);
- rtems_test_assert(sc == RTEMS_SUCCESSFUL);
-
- sc = rtems_task_set_priority(pthread_self(), RTEMS_CURRENT_PRIORITY, &prio);
- rtems_test_assert(sc == RTEMS_SUCCESSFUL);
-
- sc = rtems_task_set_scheduler(pthread_self(), scheduler_b_id, prio);
- rtems_test_assert(sc == RTEMS_SUCCESSFUL);
-
rtems_test_assert(rtems_scheduler_get_processor() == 1);
eno = pthread_mutex_init(&ctx->mtx_b, &ctx->mtx_attr);
@@ -132,8 +118,24 @@ static void test(test_context *ctx)
rtems_test_assert(eno == 0);
if (cpu_count > 1) {
+ rtems_id scheduler_a_id;
+ rtems_id scheduler_b_id;
+ rtems_status_code sc;
+ rtems_task_priority prio;
void *exit_code;
+ sc = rtems_scheduler_ident(SCHED_A, &scheduler_a_id);
+ rtems_test_assert(sc == RTEMS_SUCCESSFUL);
+
+ sc = rtems_scheduler_ident(SCHED_B, &scheduler_b_id);
+ rtems_test_assert(sc == RTEMS_SUCCESSFUL);
+
+ sc = rtems_task_set_priority(pthread_self(), RTEMS_CURRENT_PRIORITY, &prio);
+ rtems_test_assert(sc == RTEMS_SUCCESSFUL);
+
+ sc = rtems_task_set_scheduler(pthread_self(), scheduler_b_id, prio);
+ rtems_test_assert(sc == RTEMS_SUCCESSFUL);
+
eno = pthread_create(&ctx->thread_b, NULL, thread_b, ctx);
rtems_test_assert(eno == 0);
@@ -141,6 +143,9 @@ static void test(test_context *ctx)
eno = pthread_join(ctx->thread_b, &exit_code);
rtems_test_assert(eno == 0);
rtems_test_assert(exit_code == ctx);
+
+ sc = rtems_task_set_scheduler(pthread_self(), scheduler_a_id, prio);
+ rtems_test_assert(sc == RTEMS_SUCCESSFUL);
}
eno = pthread_mutex_destroy(&ctx->mtx_a);
diff --git a/testsuites/smptests/smppsxsignal01/init.c b/testsuites/smptests/smppsxsignal01/init.c
index 884b95535f..4b7109399a 100644
--- a/testsuites/smptests/smppsxsignal01/init.c
+++ b/testsuites/smptests/smppsxsignal01/init.c
@@ -1,7 +1,7 @@
/* SPDX-License-Identifier: BSD-2-Clause */
/*
- * Copyright (c) 2013 embedded brains GmbH. All rights reserved.
+ * Copyright (c) 2013 embedded brains GmbH & Co. KG
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
diff --git a/testsuites/smptests/smpschededf01/init.c b/testsuites/smptests/smpschededf01/init.c
index fc7349b1a6..16af1b58e7 100644
--- a/testsuites/smptests/smpschededf01/init.c
+++ b/testsuites/smptests/smpschededf01/init.c
@@ -1,7 +1,7 @@
/* SPDX-License-Identifier: BSD-2-Clause */
/*
- * Copyright (c) 2017, 2018 embedded brains GmbH. All rights reserved.
+ * Copyright (C) 2017, 2018 embedded brains GmbH & Co. KG
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
diff --git a/testsuites/smptests/smpschededf02/init.c b/testsuites/smptests/smpschededf02/init.c
index fe6312cd49..01b52cb056 100644
--- a/testsuites/smptests/smpschededf02/init.c
+++ b/testsuites/smptests/smpschededf02/init.c
@@ -1,7 +1,7 @@
/* SPDX-License-Identifier: BSD-2-Clause */
/*
- * Copyright (c) 2016, 2020 embedded brains GmbH. All rights reserved.
+ * Copyright (C) 2016, 2020 embedded brains GmbH & Co. KG
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
diff --git a/testsuites/smptests/smpschededf03/init.c b/testsuites/smptests/smpschededf03/init.c
index 18ea5cd939..ca205b758b 100644
--- a/testsuites/smptests/smpschededf03/init.c
+++ b/testsuites/smptests/smpschededf03/init.c
@@ -1,7 +1,7 @@
/* SPDX-License-Identifier: BSD-2-Clause */
/*
- * Copyright (c) 2017 embedded brains GmbH. All rights reserved.
+ * Copyright (c) 2017 embedded brains GmbH & Co. KG
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
diff --git a/testsuites/smptests/smpschededf04/init.c b/testsuites/smptests/smpschededf04/init.c
index 4889480084..11a477d9a0 100644
--- a/testsuites/smptests/smpschededf04/init.c
+++ b/testsuites/smptests/smpschededf04/init.c
@@ -1,7 +1,7 @@
/* SPDX-License-Identifier: BSD-2-Clause */
/*
- * Copyright (c) 2018 embedded brains GmbH. All rights reserved.
+ * Copyright (c) 2018 embedded brains GmbH & Co. KG
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
diff --git a/testsuites/smptests/smpscheduler01/init.c b/testsuites/smptests/smpscheduler01/init.c
index 7d862a9586..30c5f44f80 100644
--- a/testsuites/smptests/smpscheduler01/init.c
+++ b/testsuites/smptests/smpscheduler01/init.c
@@ -1,7 +1,7 @@
/* SPDX-License-Identifier: BSD-2-Clause */
/*
- * Copyright (c) 2013 embedded brains GmbH. All rights reserved.
+ * Copyright (c) 2013 embedded brains GmbH & Co. KG
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
diff --git a/testsuites/smptests/smpscheduler02/init.c b/testsuites/smptests/smpscheduler02/init.c
index 401ae7efd1..593dc80a5d 100644
--- a/testsuites/smptests/smpscheduler02/init.c
+++ b/testsuites/smptests/smpscheduler02/init.c
@@ -1,7 +1,7 @@
/* SPDX-License-Identifier: BSD-2-Clause */
/*
- * Copyright (c) 2014, 2017 embedded brains GmbH. All rights reserved.
+ * Copyright (C) 2014, 2017 embedded brains GmbH & Co. KG
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
diff --git a/testsuites/smptests/smpscheduler03/init.c b/testsuites/smptests/smpscheduler03/init.c
index 87803a2c6b..39dea836e1 100644
--- a/testsuites/smptests/smpscheduler03/init.c
+++ b/testsuites/smptests/smpscheduler03/init.c
@@ -1,7 +1,7 @@
/* SPDX-License-Identifier: BSD-2-Clause */
/*
- * Copyright (c) 2014, 2017 embedded brains GmbH. All rights reserved.
+ * Copyright (C) 2014, 2017 embedded brains GmbH & Co. KG
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
diff --git a/testsuites/smptests/smpscheduler03/test.c b/testsuites/smptests/smpscheduler03/test.c
index 154941f9e6..a49fac72f8 100644
--- a/testsuites/smptests/smpscheduler03/test.c
+++ b/testsuites/smptests/smpscheduler03/test.c
@@ -1,7 +1,7 @@
/* SPDX-License-Identifier: BSD-2-Clause */
/*
- * Copyright (c) 2014, 2017 embedded brains GmbH. All rights reserved.
+ * Copyright (C) 2014, 2017 embedded brains GmbH & Co. KG
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
diff --git a/testsuites/smptests/smpscheduler04/init.c b/testsuites/smptests/smpscheduler04/init.c
index 3bab47d034..a3b4666c32 100644
--- a/testsuites/smptests/smpscheduler04/init.c
+++ b/testsuites/smptests/smpscheduler04/init.c
@@ -1,7 +1,7 @@
/* SPDX-License-Identifier: BSD-2-Clause */
/*
- * Copyright (c) 2016 embedded brains GmbH. All rights reserved.
+ * Copyright (c) 2016 embedded brains GmbH & Co. KG
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
diff --git a/testsuites/smptests/smpscheduler05/init.c b/testsuites/smptests/smpscheduler05/init.c
index a57e239acf..733e9924b0 100644
--- a/testsuites/smptests/smpscheduler05/init.c
+++ b/testsuites/smptests/smpscheduler05/init.c
@@ -1,7 +1,7 @@
/* SPDX-License-Identifier: BSD-2-Clause */
/*
- * Copyright (c) 2014, 2017 embedded brains GmbH. All rights reserved.
+ * Copyright (C) 2014, 2017 embedded brains GmbH & Co. KG
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
diff --git a/testsuites/smptests/smpscheduler06/init.c b/testsuites/smptests/smpscheduler06/init.c
index 7d482e0ed9..2650f37ffb 100644
--- a/testsuites/smptests/smpscheduler06/init.c
+++ b/testsuites/smptests/smpscheduler06/init.c
@@ -1,7 +1,7 @@
/* SPDX-License-Identifier: BSD-2-Clause */
/*
- * Copyright (c) 2014, 2017 embedded brains GmbH. All rights reserved.
+ * Copyright (C) 2014, 2017 embedded brains GmbH & Co. KG
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
diff --git a/testsuites/smptests/smpscheduler07/init.c b/testsuites/smptests/smpscheduler07/init.c
index c824d8ddfe..c97788eb0e 100644
--- a/testsuites/smptests/smpscheduler07/init.c
+++ b/testsuites/smptests/smpscheduler07/init.c
@@ -1,7 +1,7 @@
/* SPDX-License-Identifier: BSD-2-Clause */
/*
- * Copyright (c) 2017 embedded brains GmbH. All rights reserved.
+ * Copyright (c) 2017 embedded brains GmbH & Co. KG
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
diff --git a/testsuites/smptests/smpsignal01/init.c b/testsuites/smptests/smpsignal01/init.c
index eba5ee1593..1d22bce6da 100644
--- a/testsuites/smptests/smpsignal01/init.c
+++ b/testsuites/smptests/smpsignal01/init.c
@@ -1,7 +1,7 @@
/* SPDX-License-Identifier: BSD-2-Clause */
/*
- * Copyright (c) 2013, 2017 embedded brains GmbH. All rights reserved.
+ * Copyright (C) 2013, 2017 embedded brains GmbH & Co. KG
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
diff --git a/testsuites/smptests/smpstart01/init.c b/testsuites/smptests/smpstart01/init.c
index 8fd2cab70e..28f185eb2d 100644
--- a/testsuites/smptests/smpstart01/init.c
+++ b/testsuites/smptests/smpstart01/init.c
@@ -1,7 +1,7 @@
/* SPDX-License-Identifier: BSD-2-Clause */
/*
- * Copyright (C) 2022 embedded brains GmbH (http://www.embedded-brains.de)
+ * Copyright (C) 2022 embedded brains GmbH & Co. KG
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
diff --git a/testsuites/smptests/smpstrongapa01/init.c b/testsuites/smptests/smpstrongapa01/init.c
index 80431086cb..26fc2e9c4c 100644
--- a/testsuites/smptests/smpstrongapa01/init.c
+++ b/testsuites/smptests/smpstrongapa01/init.c
@@ -2,7 +2,7 @@
/*
* Copyright (c) 2020 Richi Dubey ( richidubey@gmail.com )
- * Copyright (c) 2016, 2017 embedded brains GmbH. All rights reserved.
+ * Copyright (C) 2016, 2017 embedded brains GmbH & Co. KG
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
diff --git a/testsuites/smptests/smpswitchextension01/init.c b/testsuites/smptests/smpswitchextension01/init.c
index 3101ebca60..5f8d834305 100644
--- a/testsuites/smptests/smpswitchextension01/init.c
+++ b/testsuites/smptests/smpswitchextension01/init.c
@@ -1,7 +1,7 @@
/* SPDX-License-Identifier: BSD-2-Clause */
/*
- * Copyright (c) 2013 embedded brains GmbH. All rights reserved.
+ * Copyright (c) 2013 embedded brains GmbH & Co. KG
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
diff --git a/testsuites/smptests/smpthreadlife01/init.c b/testsuites/smptests/smpthreadlife01/init.c
index d88c7d9716..baec637dac 100644
--- a/testsuites/smptests/smpthreadlife01/init.c
+++ b/testsuites/smptests/smpthreadlife01/init.c
@@ -1,7 +1,7 @@
/* SPDX-License-Identifier: BSD-2-Clause */
/*
- * Copyright (c) 2014 embedded brains GmbH. All rights reserved.
+ * Copyright (c) 2014 embedded brains GmbH & Co. KG
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
diff --git a/testsuites/smptests/smpthreadpin01/init.c b/testsuites/smptests/smpthreadpin01/init.c
index 5e5f178aa4..2eae74c961 100644
--- a/testsuites/smptests/smpthreadpin01/init.c
+++ b/testsuites/smptests/smpthreadpin01/init.c
@@ -1,7 +1,7 @@
/* SPDX-License-Identifier: BSD-2-Clause */
/*
- * Copyright (c) 2018 embedded brains GmbH. All rights reserved.
+ * Copyright (c) 2018 embedded brains GmbH & Co. KG
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
diff --git a/testsuites/smptests/smpunsupported01/init.c b/testsuites/smptests/smpunsupported01/init.c
index f03e1d3c86..4a6a088148 100644
--- a/testsuites/smptests/smpunsupported01/init.c
+++ b/testsuites/smptests/smpunsupported01/init.c
@@ -2,7 +2,7 @@
/*
* Copyright (c) 2014 On-Line Applications Research Corporation (OAR).
- * Copyright (c) 2013, 2016 embedded brains GmbH. All rights reserved.
+ * Copyright (C) 2013, 2016 embedded brains GmbH & Co. KG
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
diff --git a/testsuites/smptests/smpwakeafter01/init.c b/testsuites/smptests/smpwakeafter01/init.c
index 5403a489d5..88953d4b34 100644
--- a/testsuites/smptests/smpwakeafter01/init.c
+++ b/testsuites/smptests/smpwakeafter01/init.c
@@ -1,7 +1,7 @@
/* SPDX-License-Identifier: BSD-2-Clause */
/*
- * Copyright (c) 2014 embedded brains GmbH. All rights reserved.
+ * Copyright (c) 2014 embedded brains GmbH & Co. KG
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
diff --git a/testsuites/sptests/sp01/init.c b/testsuites/sptests/sp01/init.c
index 2384430824..26d715b0ba 100644
--- a/testsuites/sptests/sp01/init.c
+++ b/testsuites/sptests/sp01/init.c
@@ -35,7 +35,8 @@
const char rtems_test_name[] = "SP 1";
-RTEMS_ALIGNED( RTEMS_TASK_STORAGE_ALIGNMENT ) static char Task_1_storage[
+static RTEMS_NOINIT RTEMS_ALIGNED( RTEMS_TASK_STORAGE_ALIGNMENT ) char
+Task_1_storage[
RTEMS_TASK_STORAGE_SIZE( 2 * RTEMS_MINIMUM_STACK_SIZE, RTEMS_FLOATING_POINT )
];
diff --git a/testsuites/sptests/sp01/system.h b/testsuites/sptests/sp01/system.h
index 46fa76f1e4..782fd929a7 100644
--- a/testsuites/sptests/sp01/system.h
+++ b/testsuites/sptests/sp01/system.h
@@ -48,6 +48,13 @@ rtems_task Task_1_through_3(
*/
#define CONFIGURE_APPLICATION_DISABLE_FILESYSTEM
+/*
+ * This test requires full control over the present thread-local objects. In
+ * certain Newlib configurations, the Newlib reentrancy support may add
+ * thread-local objects.
+ */
+#define CONFIGURE_DISABLE_NEWLIB_REENTRANCY
+
#define CONFIGURE_INITIAL_EXTENSIONS RTEMS_TEST_INITIAL_EXTENSION
#define CONFIGURE_RTEMS_INIT_TASKS_TABLE
diff --git a/testsuites/sptests/sp07/system.h b/testsuites/sptests/sp07/system.h
index cc5f4eb6e7..bcd7b50d1c 100644
--- a/testsuites/sptests/sp07/system.h
+++ b/testsuites/sptests/sp07/system.h
@@ -111,7 +111,7 @@ TEST_EXTERN int Task_restarted[ RTEMS_ARRAY_SIZE( Task_id ) ];
TEST_EXTERN int Task_deleted[ RTEMS_ARRAY_SIZE( Task_id ) ];
-RTEMS_INLINE_ROUTINE void assert_extension_counts( const int *table, int tasks )
+static inline void assert_extension_counts( const int *table, int tasks )
{
size_t i;
diff --git a/testsuites/sptests/sp2038/init.c b/testsuites/sptests/sp2038/init.c
index c280e79b7c..89462beb84 100644
--- a/testsuites/sptests/sp2038/init.c
+++ b/testsuites/sptests/sp2038/init.c
@@ -1,7 +1,7 @@
/* SPDX-License-Identifier: BSD-2-Clause */
/*
- * Copyright (c) 2011, 2016 embedded brains GmbH. All rights reserved.
+ * Copyright (C) 2011, 2016 embedded brains GmbH & Co. KG
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
diff --git a/testsuites/sptests/sp2038/sp2038.doc b/testsuites/sptests/sp2038/sp2038.doc
index 7f5d3ff7ae..056814a58e 100644
--- a/testsuites/sptests/sp2038/sp2038.doc
+++ b/testsuites/sptests/sp2038/sp2038.doc
@@ -1,6 +1,6 @@
# SPDX-License-Identifier: BSD-2-Clause
-# Copyright (c) 2011 embedded brains GmbH. All rights reserved.
+# Copyright (c) 2011 embedded brains GmbH & Co. KG
#
# Redistribution and use in source and binary forms, with or without
# modification, are permitted provided that the following conditions
diff --git a/testsuites/sptests/sp21/sp21.scn b/testsuites/sptests/sp21/sp21.scn
index 6c099dfc13..87c798d5bd 100644
--- a/testsuites/sptests/sp21/sp21.scn
+++ b/testsuites/sptests/sp21/sp21.scn
@@ -25,8 +25,5 @@ rtems_io_register_driver - RTEMS_SUCCESSFUL - overwrite NULL
rtems_io_register_driver - RTEMS_TOO_MANY - no slots
rtems_io_register_driver - RTEMS_RESOURCE_IN_USE - major in use
rtems_io_unregister_driver - RTEMS_SUCCESSFUL
-rtems_io_lookup_name( "", &info ) - RTEMS_UNSATISFIED
-rtems_io_lookup_name( "/dev", &info ) - RTEMS_UNSATISFIED
-rtems_io_lookup_name( "/dev/null", &info ) - RTEMS_SUCCESSFUL
----- TESTING THE ZERO DRIVER CHECKS -----
*** END OF TEST 21 ***
diff --git a/testsuites/sptests/sp31/task1.c b/testsuites/sptests/sp31/task1.c
index 3bb56cd99d..09580ee457 100644
--- a/testsuites/sptests/sp31/task1.c
+++ b/testsuites/sptests/sp31/task1.c
@@ -4,7 +4,7 @@
* COPYRIGHT (c) 1989-2011.
* On-Line Applications Research Corporation (OAR).
*
- * Copyright (c) 2009 embedded brains GmbH.
+ * Copyright (c) 2009 embedded brains GmbH & Co. KG
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
diff --git a/testsuites/sptests/sp37/init.c b/testsuites/sptests/sp37/init.c
index 2ee21b592e..e8af725a75 100644
--- a/testsuites/sptests/sp37/init.c
+++ b/testsuites/sptests/sp37/init.c
@@ -40,6 +40,8 @@
#define CONFIGURE_INIT
#include "system.h"
+#include <rtems/sysinit.h>
+
const char rtems_test_name[] = "SP 37";
/* prototypes */
@@ -67,6 +69,19 @@ rtems_timer_service_routine test_isr_in_progress(
#define TEST_ISR_EVENT RTEMS_EVENT_0
+static uint32_t boot_isr_level;
+
+static void set_boot_isr_level( void )
+{
+ boot_isr_level = _ISR_Get_level();
+}
+
+RTEMS_SYSINIT_ITEM(
+ set_boot_isr_level,
+ RTEMS_SYSINIT_DEVICE_DRIVERS,
+ RTEMS_SYSINIT_ORDER_MIDDLE
+);
+
typedef struct {
ISR_Level actual_level;
rtems_id master_task_id;
@@ -154,6 +169,9 @@ static void test_isr_level( void )
ISR_Level current = 0;
ISR_Level last_proper_level;
+ /* Interrupts shall be disabled during system initialization */
+ rtems_test_assert( boot_isr_level != 0 );
+
_ISR_Set_level( current );
rtems_test_assert( _ISR_Get_level() == current );
diff --git a/testsuites/sptests/sp40/init.c b/testsuites/sptests/sp40/init.c
index ae7aba0a63..523e074cc6 100644
--- a/testsuites/sptests/sp40/init.c
+++ b/testsuites/sptests/sp40/init.c
@@ -6,7 +6,7 @@
* COPYRIGHT (c) 1989-2012.
* On-Line Applications Research Corporation (OAR).
*
- * Copyright (c) 2009 embedded brains GmbH.
+ * Copyright (c) 2009 embedded brains GmbH & Co. KG
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
diff --git a/testsuites/sptests/sp54/init.c b/testsuites/sptests/sp54/init.c
index 712a4ae8db..172eb2b1b0 100644
--- a/testsuites/sptests/sp54/init.c
+++ b/testsuites/sptests/sp54/init.c
@@ -37,6 +37,10 @@
#include "config.h"
#endif
+#include <rtems/sysinit.h>
+#include <rtems/score/memory.h>
+#include <rtems/score/thread.h>
+
#include <tmacros.h>
const char rtems_test_name[] = "SP 54";
@@ -48,12 +52,6 @@ static void *Init( uintptr_t ignored )
rtems_id id;
const rtems_api_configuration_table *config;
- /*
- * It is possible that since this thread prints and there is no idle
- * task, that the system could fail miserably. :(
- */
- TEST_BEGIN();
-
puts( "Init - use valid id of API class with no objects" );
status = rtems_task_set_priority(
rtems_build_id(0x2,0x1,0x01,0x0001) /* 0xa010001 */,
@@ -80,6 +78,44 @@ static void *Init( uintptr_t ignored )
rtems_test_exit(0);
}
+static void check_dirty_memory( void )
+{
+ unsigned char *p;
+
+ TEST_BEGIN();
+
+ p = _Memory_Allocate( _Memory_Get(), sizeof( *p ), RTEMS_ALIGNOF( *p ) );
+ rtems_test_assert( p != NULL );
+ rtems_test_assert( *p == 0xcf );
+
+ p = (unsigned char *) _Thread_Information.Objects.initial_objects;
+ rtems_test_assert( *p == 0xcf );
+}
+
+RTEMS_SYSINIT_ITEM(
+ check_dirty_memory,
+ RTEMS_SYSINIT_DIRTY_MEMORY,
+ RTEMS_SYSINIT_ORDER_LAST
+);
+
+static void check_zero_workspace_automatically( void )
+{
+ unsigned char *p;
+
+ p = _Memory_Allocate( _Memory_Get(), sizeof( *p ), RTEMS_ALIGNOF( *p ) );
+ rtems_test_assert( p != NULL );
+ rtems_test_assert( *p == 0 );
+
+ p = (unsigned char *) _Thread_Information.Objects.initial_objects;
+ rtems_test_assert( *p == 0 );
+}
+
+RTEMS_SYSINIT_ITEM(
+ check_zero_workspace_automatically,
+ RTEMS_SYSINIT_ZERO_MEMORY,
+ RTEMS_SYSINIT_ORDER_LAST
+);
+
/* configuration information */
#define CONFIGURE_APPLICATION_NEEDS_SIMPLE_CONSOLE_DRIVER
diff --git a/testsuites/sptests/sp68/init.c b/testsuites/sptests/sp68/init.c
index 5443dfbb5e..6f8d02e945 100644
--- a/testsuites/sptests/sp68/init.c
+++ b/testsuites/sptests/sp68/init.c
@@ -9,7 +9,7 @@
*/
/*
- * Copyright (c) 2009-2015 embedded brains GmbH.
+ * Copyright (C) 2009, 2015 embedded brains GmbH & Co. KG
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
@@ -166,7 +166,7 @@ static void obtain_callback(rtems_id timer_id, void *arg)
static void release_callback(rtems_id timer_id, void *arg)
{
rtems_status_code sc = RTEMS_SUCCESSFUL;
- char buf [1];
+ char buf [1] = { 0 };
size_t size = sizeof(buf);
uint32_t released = 0;
diff --git a/testsuites/sptests/sp68/sp68.doc b/testsuites/sptests/sp68/sp68.doc
index 5402d5d3ea..91e385ef2f 100644
--- a/testsuites/sptests/sp68/sp68.doc
+++ b/testsuites/sptests/sp68/sp68.doc
@@ -1,6 +1,6 @@
# SPDX-License-Identifier: BSD-2-Clause
-# Copyright (c) 2009 embedded brains GmbH.
+# Copyright (c) 2009 embedded brains GmbH & Co. KG
#
# Redistribution and use in source and binary forms, with or without
# modification, are permitted provided that the following conditions
diff --git a/testsuites/sptests/spatomic01/init.c b/testsuites/sptests/spatomic01/init.c
index 5c9599205a..58414b042a 100644
--- a/testsuites/sptests/spatomic01/init.c
+++ b/testsuites/sptests/spatomic01/init.c
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2013-2015 embedded brains GmbH. All rights reserved.
+ * Copyright (C) 2013, 2015 embedded brains GmbH & Co. KG
*
* Copyright (c) 2013 Deng Hengyi.
*
diff --git a/testsuites/sptests/spcache01/init.c b/testsuites/sptests/spcache01/init.c
index 4b64a1da75..89fe6794fe 100644
--- a/testsuites/sptests/spcache01/init.c
+++ b/testsuites/sptests/spcache01/init.c
@@ -1,7 +1,7 @@
/* SPDX-License-Identifier: BSD-2-Clause */
/*
- * Copyright (c) 2014, 2017 embedded brains GmbH. All rights reserved.
+ * Copyright (C) 2014, 2017 embedded brains GmbH & Co. KG
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
diff --git a/testsuites/sptests/spclock_err01/init.c b/testsuites/sptests/spclock_err01/init.c
index 889f03e8ae..b6d5f196af 100644
--- a/testsuites/sptests/spclock_err01/init.c
+++ b/testsuites/sptests/spclock_err01/init.c
@@ -226,4 +226,5 @@ rtems_task Init(
print_time( "TA1 - current time - ", &time, "\n" );
TEST_END();
+ rtems_test_exit( 0 );
}
diff --git a/testsuites/sptests/spclock_err02/init.c b/testsuites/sptests/spclock_err02/init.c
index 11061ccc58..91519fbf43 100644
--- a/testsuites/sptests/spclock_err02/init.c
+++ b/testsuites/sptests/spclock_err02/init.c
@@ -136,6 +136,7 @@ rtems_task Init(
print_time( "TA1 - rtems_clock_get_tod - ", &time, " - RTEMS_SUCCESSFUL\n" );
TEST_END();
+ rtems_test_exit( 0 );
}
#define CONFIGURE_APPLICATION_NEEDS_SIMPLE_CONSOLE_DRIVER
diff --git a/testsuites/sptests/spconfig01/init.c b/testsuites/sptests/spconfig01/init.c
index 8aa2b26857..90157028a9 100644
--- a/testsuites/sptests/spconfig01/init.c
+++ b/testsuites/sptests/spconfig01/init.c
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2018 embedded brains GmbH. All rights reserved.
+ * Copyright (c) 2018 embedded brains GmbH & Co. KG
*
* The license and distribution terms for this file may be
* found in the file LICENSE in this distribution or at
diff --git a/testsuites/sptests/spconfig02/init.c b/testsuites/sptests/spconfig02/init.c
index 91f687c8fb..f25ff5efe7 100644
--- a/testsuites/sptests/spconfig02/init.c
+++ b/testsuites/sptests/spconfig02/init.c
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2018 embedded brains GmbH. All rights reserved.
+ * Copyright (c) 2018 embedded brains GmbH & Co. KG
*
* The license and distribution terms for this file may be
* found in the file LICENSE in this distribution or at
diff --git a/testsuites/sptests/spconsole01/init.c b/testsuites/sptests/spconsole01/init.c
index 36ab3c5d38..87924a35dc 100644
--- a/testsuites/sptests/spconsole01/init.c
+++ b/testsuites/sptests/spconsole01/init.c
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2017 embedded brains GmbH. All rights reserved.
+ * Copyright (c) 2017 embedded brains GmbH & Co. KG
*
* The license and distribution terms for this file may be
* found in the file LICENSE in this distribution or at
diff --git a/testsuites/sptests/spcontext01/init.c b/testsuites/sptests/spcontext01/init.c
index 5382e035b8..d8d0a2d3aa 100644
--- a/testsuites/sptests/spcontext01/init.c
+++ b/testsuites/sptests/spcontext01/init.c
@@ -1,7 +1,7 @@
/* SPDX-License-Identifier: BSD-2-Clause */
/*
- * Copyright (c) 2013-2015 embedded brains GmbH. All rights reserved.
+ * Copyright (C) 2013, 2015 embedded brains GmbH & Co. KG
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
diff --git a/testsuites/sptests/spcpucounter01/init.c b/testsuites/sptests/spcpucounter01/init.c
index fca5cda6ce..0022806ec6 100644
--- a/testsuites/sptests/spcpucounter01/init.c
+++ b/testsuites/sptests/spcpucounter01/init.c
@@ -1,7 +1,7 @@
/* SPDX-License-Identifier: BSD-2-Clause */
/*
- * Copyright (c) 2014, 2016 embedded brains GmbH. All rights reserved.
+ * Copyright (C) 2014, 2016 embedded brains GmbH & Co. KG
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
diff --git a/testsuites/sptests/spcpuset01/test.c b/testsuites/sptests/spcpuset01/test.c
index b29c117370..d93be69bd3 100644
--- a/testsuites/sptests/spcpuset01/test.c
+++ b/testsuites/sptests/spcpuset01/test.c
@@ -83,9 +83,19 @@ void test_cpu_nand_case_1(size_t cpu1, size_t cpu2)
{
size_t i;
+ /*
+ * FreeBSD renamed CPU_NAND to CPU_ANDNOT. This change was included in
+ * Newlib at some point in time.
+ */
+#ifdef __BIT_ANDNOT2
+ /* ANDNOT set1 and set2 */
+ DPRINT( "Exercise CPU_ANDNOT with bits %zd,%zd\n", cpu1, cpu2 );
+ CPU_ANDNOT(&set3, &set1, &set2);
+#else
/* NAND set1 and set2 */
DPRINT( "Exercise CPU_NAND with bits %zd,%zd\n", cpu1, cpu2 );
CPU_NAND(&set3, &set1, &set2);
+#endif
/* test if all bits clear except cpu1 */
for (i=0 ; i<CPU_SETSIZE ; i++) {
diff --git a/testsuites/sptests/spcxx01/init.cc b/testsuites/sptests/spcxx01/init.cc
index b7be220092..0f1412f292 100644
--- a/testsuites/sptests/spcxx01/init.cc
+++ b/testsuites/sptests/spcxx01/init.cc
@@ -1,7 +1,7 @@
/*
* SPDX-License-Identifier: BSD-2-Clause
*
- * Copyright (C) 2018 embedded brains GmbH
+ * Copyright (C) 2018 embedded brains GmbH & Co. KG
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
diff --git a/testsuites/sptests/speventsystem01/init.c b/testsuites/sptests/speventsystem01/init.c
index 5ea56de474..063e161a71 100644
--- a/testsuites/sptests/speventsystem01/init.c
+++ b/testsuites/sptests/speventsystem01/init.c
@@ -1,7 +1,7 @@
/* SPDX-License-Identifier: BSD-2-Clause */
/*
- * Copyright (c) 2012 embedded brains GmbH. All rights reserved.
+ * Copyright (c) 2012 embedded brains GmbH & Co. KG
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
diff --git a/testsuites/sptests/speventtransient01/init.c b/testsuites/sptests/speventtransient01/init.c
index 3c4d60098d..c07a77d710 100644
--- a/testsuites/sptests/speventtransient01/init.c
+++ b/testsuites/sptests/speventtransient01/init.c
@@ -1,7 +1,7 @@
/* SPDX-License-Identifier: BSD-2-Clause */
/*
- * Copyright (c) 2012 embedded brains GmbH. All rights reserved.
+ * Copyright (c) 2012 embedded brains GmbH & Co. KG
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
diff --git a/testsuites/sptests/spextensions01/init.c b/testsuites/sptests/spextensions01/init.c
index 66e8fac260..59a22293c1 100644
--- a/testsuites/sptests/spextensions01/init.c
+++ b/testsuites/sptests/spextensions01/init.c
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2016, 2017 embedded brains GmbH. All rights reserved.
+ * Copyright (C) 2016, 2017 embedded brains GmbH & Co. KG
*
* The license and distribution terms for this file may be
* found in the file LICENSE in this distribution or at
@@ -30,6 +30,11 @@ static int active_extensions = 2;
static rtems_id master_task;
+static bool before_initialization(void)
+{
+ return _System_state_Is_before_initialization(_System_state_Get());
+}
+
static bool before_multitasking(void)
{
return _System_state_Is_before_multitasking(_System_state_Get());
@@ -61,9 +66,13 @@ static void assert_life_protected_thread_context(void)
static void assert_allocator_protected_thread_context(void)
{
- assert(_Thread_Dispatch_is_enabled() || before_multitasking());
+ assert(
+ _Thread_Dispatch_is_enabled() ||
+ before_initialization() ||
+ before_multitasking()
+ );
assert(_RTEMS_Allocator_is_owner());
- assert(life_protected() || before_multitasking());
+ assert(life_protected());
}
static void assert_thread_dispatch_disabled_context(void)
diff --git a/testsuites/sptests/spfatal26/init.c b/testsuites/sptests/spfatal26/init.c
index a23ff7dbce..892d4b941d 100644
--- a/testsuites/sptests/spfatal26/init.c
+++ b/testsuites/sptests/spfatal26/init.c
@@ -1,7 +1,7 @@
/* SPDX-License-Identifier: BSD-2-Clause */
/*
- * Copyright (c) 2012, 2018 embedded brains GmbH. All rights reserved.
+ * Copyright (C) 2012, 2018 embedded brains GmbH & Co. KG
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
diff --git a/testsuites/sptests/spfatal28/init.c b/testsuites/sptests/spfatal28/init.c
index 77ff9a7606..17da04ff7f 100644
--- a/testsuites/sptests/spfatal28/init.c
+++ b/testsuites/sptests/spfatal28/init.c
@@ -7,7 +7,7 @@
#include "../spfatal_support/spfatal.h"
/*
- * Copyright (c) 2014 embedded brains GmbH. All rights reserved.
+ * Copyright (c) 2014 embedded brains GmbH & Co. KG
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
diff --git a/testsuites/sptests/spfatal29/init.c b/testsuites/sptests/spfatal29/init.c
index 74a06488a7..6da87fdaab 100644
--- a/testsuites/sptests/spfatal29/init.c
+++ b/testsuites/sptests/spfatal29/init.c
@@ -7,7 +7,7 @@
#include "../spfatal_support/spfatal.h"
/*
- * Copyright (c) 2016 embedded brains GmbH. All rights reserved.
+ * Copyright (c) 2016 embedded brains GmbH & Co. KG
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
diff --git a/testsuites/sptests/spfatal30/init.c b/testsuites/sptests/spfatal30/init.c
index eecfacd4ab..e6656e1694 100644
--- a/testsuites/sptests/spfatal30/init.c
+++ b/testsuites/sptests/spfatal30/init.c
@@ -1,7 +1,7 @@
/* SPDX-License-Identifier: BSD-2-Clause */
/*
- * Copyright (c) 2017 embedded brains GmbH. All rights reserved.
+ * Copyright (c) 2017 embedded brains GmbH & Co. KG
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
diff --git a/testsuites/sptests/spfatal31/init.c b/testsuites/sptests/spfatal31/init.c
index 6dfdbbb386..9d93988628 100644
--- a/testsuites/sptests/spfatal31/init.c
+++ b/testsuites/sptests/spfatal31/init.c
@@ -1,7 +1,7 @@
/* SPDX-License-Identifier: BSD-2-Clause */
/*
- * Copyright (c) 2017 embedded brains GmbH. All rights reserved.
+ * Copyright (c) 2017 embedded brains GmbH & Co. KG
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
diff --git a/testsuites/sptests/spfatal32/init.c b/testsuites/sptests/spfatal32/init.c
index 78dcfeb669..48979cebd8 100644
--- a/testsuites/sptests/spfatal32/init.c
+++ b/testsuites/sptests/spfatal32/init.c
@@ -7,7 +7,7 @@
#include "../spfatal_support/spfatal.h"
/*
- * Copyright (c) 2018 embedded brains GmbH. All rights reserved.
+ * Copyright (c) 2018 embedded brains GmbH & Co. KG
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
@@ -39,6 +39,11 @@
#define FATAL_ERROR_EXPECTED_SOURCE RTEMS_FATAL_SOURCE_INVALID_HEAP_FREE
#define FATAL_ERROR_EXPECTED_ERROR 1
+/*
+ * Disable for the specific test case.
+ */
+#pragma GCC diagnostic ignored "-Wfree-nonheap-object"
+
static void force_error(void)
{
uintptr_t invalid = 1;
diff --git a/testsuites/sptests/spfatal33/init.c b/testsuites/sptests/spfatal33/init.c
index a7218c596f..f60e3d38d9 100644
--- a/testsuites/sptests/spfatal33/init.c
+++ b/testsuites/sptests/spfatal33/init.c
@@ -1,7 +1,7 @@
/* SPDX-License-Identifier: BSD-2-Clause */
/*
- * Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+ * Copyright (C) 2020 embedded brains GmbH & Co. KG
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
diff --git a/testsuites/sptests/spfatal34/init.c b/testsuites/sptests/spfatal34/init.c
index 5c2ab0e735..608a50fcdb 100644
--- a/testsuites/sptests/spfatal34/init.c
+++ b/testsuites/sptests/spfatal34/init.c
@@ -1,7 +1,7 @@
/* SPDX-License-Identifier: BSD-2-Clause */
/*
- * Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+ * Copyright (C) 2020 embedded brains GmbH & Co. KG
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
diff --git a/testsuites/sptests/spfatal36/init.c b/testsuites/sptests/spfatal36/init.c
new file mode 100644
index 0000000000..b5e0fbdeed
--- /dev/null
+++ b/testsuites/sptests/spfatal36/init.c
@@ -0,0 +1,63 @@
+/* SPDX-License-Identifier: BSD-2-Clause */
+
+/*
+ * Copyright (C) 2022 embedded brains GmbH & Co. KG
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#include "../spfatal_support/spfatal.h"
+
+#include <rtems/sysinit.h>
+#include <rtems/score/heapimpl.h>
+#include <rtems/score/wkspace.h>
+
+#define FATAL_ERROR_TEST_NAME "36"
+
+#define FATAL_ERROR_DESCRIPTION "failure in idle task storage allocation"
+
+#define FATAL_ERROR_EXPECTED_SOURCE INTERNAL_ERROR_CORE
+
+#define FATAL_ERROR_EXPECTED_ERROR \
+ INTERNAL_ERROR_NO_MEMORY_FOR_IDLE_TASK_STORAGE
+
+static void force_error( void )
+{
+ RTEMS_UNREACHABLE();
+}
+
+static void empty_workspace( void )
+{
+ (void) _Heap_Greedy_allocate( &_Workspace_Area, NULL, 0 );
+}
+
+RTEMS_SYSINIT_ITEM(
+ empty_workspace,
+ RTEMS_SYSINIT_IDLE_THREADS,
+ RTEMS_SYSINIT_ORDER_FIRST
+);
+
+#include "../spfatal_support/spfatalimpl.h"
diff --git a/testsuites/sptests/spfatal36/spfatal36.doc b/testsuites/sptests/spfatal36/spfatal36.doc
new file mode 100644
index 0000000000..0719e8e01c
--- /dev/null
+++ b/testsuites/sptests/spfatal36/spfatal36.doc
@@ -0,0 +1,11 @@
+This file describes the concepts tested by this test set.
+
+test set name: spfatal36
+
+directives:
+
+ - _Stack_Allocator_allocate_for_idle_workspace()
+
+concepts:
+
+ - Provoke a memory allocation failure in the directive.
diff --git a/testsuites/sptests/spglobalcon01/init.cc b/testsuites/sptests/spglobalcon01/init.cc
index 54f2774170..e81ae9b88b 100644
--- a/testsuites/sptests/spglobalcon01/init.cc
+++ b/testsuites/sptests/spglobalcon01/init.cc
@@ -1,9 +1,28 @@
+/* SPDX-License-Identifier: BSD-2-Clause */
+
/*
- * Copyright (c) 2014 embedded brains GmbH. All rights reserved.
+ * Copyright (c) 2014 embedded brains GmbH & Co. KG
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
*
- * The license and distribution terms for this file may be
- * found in the file LICENSE in this distribution or at
- * http://www.rtems.org/license/LICENSE.
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
*/
#ifdef HAVE_CONFIG_H
diff --git a/testsuites/sptests/spglobalcon02/init.c b/testsuites/sptests/spglobalcon02/init.c
index 62d719cea3..bf7bcc080b 100644
--- a/testsuites/sptests/spglobalcon02/init.c
+++ b/testsuites/sptests/spglobalcon02/init.c
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2018 embedded brains GmbH. All rights reserved.
+ * Copyright (c) 2018 embedded brains GmbH & Co. KG
*
* The license and distribution terms for this file may be
* found in the file LICENSE in this distribution or at
diff --git a/testsuites/sptests/spheapprot/init.c b/testsuites/sptests/spheapprot/init.c
index e448b91590..8cda04ba95 100644
--- a/testsuites/sptests/spheapprot/init.c
+++ b/testsuites/sptests/spheapprot/init.c
@@ -1,7 +1,7 @@
/* SPDX-License-Identifier: BSD-2-Clause */
/*
- * Copyright (c) 2010 embedded brains GmbH. All rights reserved.
+ * Copyright (c) 2010 embedded brains GmbH & Co. KG
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
diff --git a/testsuites/sptests/spheapprot/spheapprot.doc b/testsuites/sptests/spheapprot/spheapprot.doc
index 9d01a7b005..24660789ca 100644
--- a/testsuites/sptests/spheapprot/spheapprot.doc
+++ b/testsuites/sptests/spheapprot/spheapprot.doc
@@ -1,10 +1,27 @@
# SPDX-License-Identifier: BSD-2-Clause
-# Copyright (c) 2010 embedded brains GmbH. All rights reserved.
+# Copyright (c) 2010 embedded brains GmbH & Co. KG
#
-# The license and distribution terms for this file may be
-# found in the file LICENSE in this distribution or at
-# http://www.rtems.org/license/LICENSE.
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1. Redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+# 2. Redistributions in binary form must reproduce the above copyright
+# notice, this list of conditions and the following disclaimer in the
+# documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+# ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
+# LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+# POSSIBILITY OF SUCH DAMAGE.
This file describes the directives and concepts tested by this test set.
diff --git a/testsuites/sptests/spinternalerror01/init.c b/testsuites/sptests/spinternalerror01/init.c
index 092443fbf2..78d59b832d 100644
--- a/testsuites/sptests/spinternalerror01/init.c
+++ b/testsuites/sptests/spinternalerror01/init.c
@@ -1,7 +1,7 @@
/* SPDX-License-Identifier: BSD-2-Clause */
/*
- * Copyright (c) 2012 embedded brains GmbH. All rights reserved.
+ * Copyright (c) 2012 embedded brains GmbH & Co. KG
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
diff --git a/testsuites/sptests/spinternalerror02/init.c b/testsuites/sptests/spinternalerror02/init.c
index 08aeabd3a7..961321cb23 100644
--- a/testsuites/sptests/spinternalerror02/init.c
+++ b/testsuites/sptests/spinternalerror02/init.c
@@ -1,7 +1,7 @@
/* SPDX-License-Identifier: BSD-2-Clause */
/*
- * Copyright (c) 2012, 2020 embedded brains GmbH. All rights reserved.
+ * Copyright (C) 2012, 2020 embedded brains GmbH & Co. KG
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
@@ -49,7 +49,7 @@ static void test_internal_error_text(void)
} while ( text != text_last );
rtems_test_assert(
- error - 3 == INTERNAL_ERROR_RTEMS_INIT_TASK_CONSTRUCT_FAILED
+ error - 3 == INTERNAL_ERROR_IDLE_THREAD_STACK_TOO_SMALL
);
}
diff --git a/testsuites/sptests/spintrcritical01/spintrcritical01impl.h b/testsuites/sptests/spintrcritical01/spintrcritical01impl.h
index f963204647..8f18e08d0c 100644
--- a/testsuites/sptests/spintrcritical01/spintrcritical01impl.h
+++ b/testsuites/sptests/spintrcritical01/spintrcritical01impl.h
@@ -1,7 +1,7 @@
/* SPDX-License-Identifier: BSD-2-Clause */
/*
- * Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+ * Copyright (C) 2020 embedded brains GmbH & Co. KG
*
* COPYRIGHT (c) 1989-2012.
* On-Line Applications Research Corporation (OAR).
diff --git a/testsuites/sptests/spintrcritical08/init.c b/testsuites/sptests/spintrcritical08/init.c
index fe9d696d01..d8cf13740b 100644
--- a/testsuites/sptests/spintrcritical08/init.c
+++ b/testsuites/sptests/spintrcritical08/init.c
@@ -1,7 +1,7 @@
/* SPDX-License-Identifier: BSD-2-Clause */
/*
- * Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+ * Copyright (C) 2020 embedded brains GmbH & Co. KG
*
* COPYRIGHT (c) 1989-2012.
* On-Line Applications Research Corporation (OAR).
diff --git a/testsuites/sptests/spintrcritical09/init.c b/testsuites/sptests/spintrcritical09/init.c
index 206d336ecb..f63d19ac63 100644
--- a/testsuites/sptests/spintrcritical09/init.c
+++ b/testsuites/sptests/spintrcritical09/init.c
@@ -1,7 +1,7 @@
/* SPDX-License-Identifier: BSD-2-Clause */
/*
- * Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+ * Copyright (C) 2020 embedded brains GmbH & Co. KG
*
* COPYRIGHT (c) 1989-2012.
* On-Line Applications Research Corporation (OAR).
diff --git a/testsuites/sptests/spintrcritical10/init.c b/testsuites/sptests/spintrcritical10/init.c
index b0f8f23075..d69af9cabd 100644
--- a/testsuites/sptests/spintrcritical10/init.c
+++ b/testsuites/sptests/spintrcritical10/init.c
@@ -4,7 +4,7 @@
* COPYRIGHT (c) 1989-2012.
* On-Line Applications Research Corporation (OAR).
*
- * Copyright (c) 2013, 2020 embedded brains GmbH.
+ * Copyright (C) 2013, 2020 embedded brains GmbH & Co. KG
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
diff --git a/testsuites/sptests/spintrcritical11/spintrcritical11impl.h b/testsuites/sptests/spintrcritical11/spintrcritical11impl.h
index e3a029f086..73f0dd66ba 100644
--- a/testsuites/sptests/spintrcritical11/spintrcritical11impl.h
+++ b/testsuites/sptests/spintrcritical11/spintrcritical11impl.h
@@ -1,7 +1,7 @@
/* SPDX-License-Identifier: BSD-2-Clause */
/*
- * Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+ * Copyright (C) 2020 embedded brains GmbH & Co. KG
*
* COPYRIGHT (c) 1989-2012.
* On-Line Applications Research Corporation (OAR).
diff --git a/testsuites/sptests/spintrcritical13/spintrcritical13impl.h b/testsuites/sptests/spintrcritical13/spintrcritical13impl.h
index 7d95551526..3b7604ac92 100644
--- a/testsuites/sptests/spintrcritical13/spintrcritical13impl.h
+++ b/testsuites/sptests/spintrcritical13/spintrcritical13impl.h
@@ -1,7 +1,7 @@
/* SPDX-License-Identifier: BSD-2-Clause */
/*
- * Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+ * Copyright (C) 2020 embedded brains GmbH & Co. KG
*
* COPYRIGHT (c) 1989-2009.
* On-Line Applications Research Corporation (OAR).
diff --git a/testsuites/sptests/spintrcritical15/init.c b/testsuites/sptests/spintrcritical15/init.c
index 46c0805580..3295b6214b 100644
--- a/testsuites/sptests/spintrcritical15/init.c
+++ b/testsuites/sptests/spintrcritical15/init.c
@@ -1,7 +1,7 @@
/* SPDX-License-Identifier: BSD-2-Clause */
/*
- * Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+ * Copyright (C) 2020 embedded brains GmbH & Co. KG
*
* COPYRIGHT (c) 1989-2009.
* On-Line Applications Research Corporation (OAR).
diff --git a/testsuites/sptests/spintrcritical16/init.c b/testsuites/sptests/spintrcritical16/init.c
index 80763391ea..612f92f4e1 100644
--- a/testsuites/sptests/spintrcritical16/init.c
+++ b/testsuites/sptests/spintrcritical16/init.c
@@ -1,7 +1,7 @@
/* SPDX-License-Identifier: BSD-2-Clause */
/*
- * Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+ * Copyright (C) 2020 embedded brains GmbH & Co. KG
*
* COPYRIGHT (c) 1989-2009.
* On-Line Applications Research Corporation (OAR).
diff --git a/testsuites/sptests/spintrcritical18/init.c b/testsuites/sptests/spintrcritical18/init.c
index 0a8aadda35..61ff82df55 100644
--- a/testsuites/sptests/spintrcritical18/init.c
+++ b/testsuites/sptests/spintrcritical18/init.c
@@ -1,7 +1,7 @@
/* SPDX-License-Identifier: BSD-2-Clause */
/*
- * Copyright (C) 2012, 2020 embedded brains GmbH (http://www.embedded-brains.de)
+ * Copyright (C) 2012, 2020 embedded brains GmbH & Co. KG
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
diff --git a/testsuites/sptests/spintrcritical20/init.c b/testsuites/sptests/spintrcritical20/init.c
index 81fc8cb34f..c1521c8969 100644
--- a/testsuites/sptests/spintrcritical20/init.c
+++ b/testsuites/sptests/spintrcritical20/init.c
@@ -1,7 +1,7 @@
/* SPDX-License-Identifier: BSD-2-Clause */
/*
- * Copyright (C) 2013, 2020 embedded brains GmbH (http://www.embedded-brains.de)
+ * Copyright (C) 2013, 2020 embedded brains GmbH & Co. KG
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
diff --git a/testsuites/sptests/spintrcritical21/init.c b/testsuites/sptests/spintrcritical21/init.c
index 14b4d3f0d9..6c675e1669 100644
--- a/testsuites/sptests/spintrcritical21/init.c
+++ b/testsuites/sptests/spintrcritical21/init.c
@@ -3,7 +3,7 @@
/*
* Classic API Signal to Task from ISR
*
- * Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+ * Copyright (C) 2020 embedded brains GmbH & Co. KG
*
* COPYRIGHT (c) 1989-2011.
* On-Line Applications Research Corporation (OAR).
diff --git a/testsuites/sptests/spintrcritical22/init.c b/testsuites/sptests/spintrcritical22/init.c
index d38bbbf0b2..73c9c6226c 100644
--- a/testsuites/sptests/spintrcritical22/init.c
+++ b/testsuites/sptests/spintrcritical22/init.c
@@ -1,7 +1,7 @@
/* SPDX-License-Identifier: BSD-2-Clause */
/*
- * Copyright (C) 2014, 2020 embedded brains GmbH (http://www.embedded-brains.de)
+ * Copyright (C) 2014, 2020 embedded brains GmbH & Co. KG
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
diff --git a/testsuites/sptests/spintrcritical23/init.c b/testsuites/sptests/spintrcritical23/init.c
index 1d52b8f9a1..ebc50fdb2d 100644
--- a/testsuites/sptests/spintrcritical23/init.c
+++ b/testsuites/sptests/spintrcritical23/init.c
@@ -1,7 +1,7 @@
/* SPDX-License-Identifier: BSD-2-Clause */
/*
- * Copyright (C) 2015, 2020 embedded brains GmbH (http://www.embedded-brains.de)
+ * Copyright (C) 2015, 2020 embedded brains GmbH & Co. KG
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
diff --git a/testsuites/sptests/spintrcritical24/init.c b/testsuites/sptests/spintrcritical24/init.c
index 7392ee04e2..6f686b1564 100644
--- a/testsuites/sptests/spintrcritical24/init.c
+++ b/testsuites/sptests/spintrcritical24/init.c
@@ -1,7 +1,7 @@
/* SPDX-License-Identifier: BSD-2-Clause */
/*
- * Copyright (C) 2017, 2020 embedded brains GmbH (http://www.embedded-brains.de)
+ * Copyright (C) 2017, 2020 embedded brains GmbH & Co. KG
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
diff --git a/testsuites/sptests/splinkersets01/content.c b/testsuites/sptests/splinkersets01/content.c
index 2179342a50..5dedcb9060 100644
--- a/testsuites/sptests/splinkersets01/content.c
+++ b/testsuites/sptests/splinkersets01/content.c
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2015, 2016 embedded brains GmbH. All rights reserved.
+ * Copyright (C) 2015, 2016 embedded brains GmbH & Co. KG
*
* The license and distribution terms for this file may be
* found in the file LICENSE in this distribution or at
diff --git a/testsuites/sptests/splinkersets01/init.c b/testsuites/sptests/splinkersets01/init.c
index 87d9558a87..059b4e230c 100644
--- a/testsuites/sptests/splinkersets01/init.c
+++ b/testsuites/sptests/splinkersets01/init.c
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2015, 2016 embedded brains GmbH. All rights reserved.
+ * Copyright (C) 2015, 2016 embedded brains GmbH & Co. KG
*
* The license and distribution terms for this file may be
* found in the file LICENSE in this distribution or at
diff --git a/testsuites/sptests/splinkersets01/item-a.c b/testsuites/sptests/splinkersets01/item-a.c
index d0f615a97d..305c952d83 100644
--- a/testsuites/sptests/splinkersets01/item-a.c
+++ b/testsuites/sptests/splinkersets01/item-a.c
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2015, 2016 embedded brains GmbH. All rights reserved.
+ * Copyright (C) 2015, 2016 embedded brains GmbH & Co. KG
*
* The license and distribution terms for this file may be
* found in the file LICENSE in this distribution or at
diff --git a/testsuites/sptests/splinkersets01/item-ca.c b/testsuites/sptests/splinkersets01/item-ca.c
index 9e09f68b33..e85c0c0855 100644
--- a/testsuites/sptests/splinkersets01/item-ca.c
+++ b/testsuites/sptests/splinkersets01/item-ca.c
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2015, 2016 embedded brains GmbH. All rights reserved.
+ * Copyright (C) 2015, 2016 embedded brains GmbH & Co. KG
*
* The license and distribution terms for this file may be
* found in the file LICENSE in this distribution or at
diff --git a/testsuites/sptests/splinkersets01/sets.c b/testsuites/sptests/splinkersets01/sets.c
index f7e1d222d4..a7b930dbf5 100644
--- a/testsuites/sptests/splinkersets01/sets.c
+++ b/testsuites/sptests/splinkersets01/sets.c
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2015 embedded brains GmbH. All rights reserved.
+ * Copyright (c) 2015 embedded brains GmbH & Co. KG
*
* The license and distribution terms for this file may be
* found in the file LICENSE in this distribution or at
diff --git a/testsuites/sptests/splinkersets01/splinkersets01.h b/testsuites/sptests/splinkersets01/splinkersets01.h
index 82d1b188e0..0581204765 100644
--- a/testsuites/sptests/splinkersets01/splinkersets01.h
+++ b/testsuites/sptests/splinkersets01/splinkersets01.h
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2015, 2016 embedded brains GmbH. All rights reserved.
+ * Copyright (C) 2015, 2016 embedded brains GmbH & Co. KG
*
* The license and distribution terms for this file may be
* found in the file LICENSE in this distribution or at
diff --git a/testsuites/sptests/spmisc01/init.c b/testsuites/sptests/spmisc01/init.c
index d7658fc9b7..8c46245af9 100644
--- a/testsuites/sptests/spmisc01/init.c
+++ b/testsuites/sptests/spmisc01/init.c
@@ -1,7 +1,7 @@
/* SPDX-License-Identifier: BSD-2-Clause */
/*
- * Copyright (C) 2018, 2019 embedded brains GmbH
+ * Copyright (C) 2018, 2019 embedded brains GmbH & Co. KG
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
@@ -122,9 +122,14 @@ static int obfuscate_variable(int i)
return i;
}
+static int global_symbol_base;
+
RTEMS_DECLARE_GLOBAL_SYMBOL(a_global_symbol);
-RTEMS_DEFINE_GLOBAL_SYMBOL(a_global_symbol, 0xabc);
+RTEMS_DEFINE_GLOBAL_SYMBOL(
+ a_global_symbol,
+ RTEMS_SYMBOL_NAME(global_symbol_base) + 0xabc
+);
RTEMS_STATIC_ASSERT(0 != 1, zero_neq_one);
@@ -243,7 +248,9 @@ static void Init(rtems_task_argument arg)
unreachable();
rtems_test_assert(printflike_func("%i", 0) == 56);
rtems_test_assert(obfuscate_variable(63) == 63);
- rtems_test_assert((uintptr_t)a_global_symbol == 0xabc);
+ rtems_test_assert(
+ (uintptr_t) a_global_symbol - (uintptr_t) &global_symbol_base == 0xabc
+ );
rtems_test_assert(RTEMS_ARRAY_SIZE(array) == 3);
rtems_test_assert(sizeof(zero_length_array_struct) == 4);
container_of();
diff --git a/testsuites/sptests/spmisc01/spmisc01.h b/testsuites/sptests/spmisc01/spmisc01.h
index 6dbf9ca23c..ee04e36cde 100644
--- a/testsuites/sptests/spmisc01/spmisc01.h
+++ b/testsuites/sptests/spmisc01/spmisc01.h
@@ -1,7 +1,7 @@
/* SPDX-License-Identifier: BSD-2-Clause */
/*
- * Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+ * Copyright (C) 2020 embedded brains GmbH & Co. KG
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
diff --git a/testsuites/sptests/spmisc01/strong.c b/testsuites/sptests/spmisc01/strong.c
index 6a3d9c8561..d330e5ed44 100644
--- a/testsuites/sptests/spmisc01/strong.c
+++ b/testsuites/sptests/spmisc01/strong.c
@@ -1,7 +1,7 @@
/* SPDX-License-Identifier: BSD-2-Clause */
/*
- * Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+ * Copyright (C) 2020 embedded brains GmbH & Co. KG
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
diff --git a/testsuites/sptests/spmkdir/init.c b/testsuites/sptests/spmkdir/init.c
index dd9b3aab7d..7eea58d86d 100644
--- a/testsuites/sptests/spmkdir/init.c
+++ b/testsuites/sptests/spmkdir/init.c
@@ -9,7 +9,7 @@
*/
/*
- * Copyright (c) 2010 embedded brains GmbH. All rights reserved.
+ * Copyright (c) 2010 embedded brains GmbH & Co. KG
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
diff --git a/testsuites/sptests/spmrsp01/init.c b/testsuites/sptests/spmrsp01/init.c
index 40111dc806..a5c130e1c2 100644
--- a/testsuites/sptests/spmrsp01/init.c
+++ b/testsuites/sptests/spmrsp01/init.c
@@ -1,7 +1,7 @@
/* SPDX-License-Identifier: BSD-2-Clause */
/*
- * Copyright (c) 2014 embedded brains GmbH. All rights reserved.
+ * Copyright (c) 2014 embedded brains GmbH & Co. KG
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
diff --git a/testsuites/sptests/spmutex01/init.c b/testsuites/sptests/spmutex01/init.c
index f6e3a987f2..12590317c5 100644
--- a/testsuites/sptests/spmutex01/init.c
+++ b/testsuites/sptests/spmutex01/init.c
@@ -1,7 +1,7 @@
/* SPDX-License-Identifier: BSD-2-Clause */
/*
- * Copyright (c) 2015, 2017 embedded brains GmbH. All rights reserved.
+ * Copyright (C) 2015, 2017 embedded brains GmbH & Co. KG
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
diff --git a/testsuites/sptests/spnsext01/init.c b/testsuites/sptests/spnsext01/init.c
index a786574032..b45da45a49 100644
--- a/testsuites/sptests/spnsext01/init.c
+++ b/testsuites/sptests/spnsext01/init.c
@@ -1,7 +1,7 @@
/* SPDX-License-Identifier: BSD-2-Clause */
/*
- * Copyright (c) 2011 embedded brains GmbH. All rights reserved.
+ * Copyright (c) 2011 embedded brains GmbH & Co. KG
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
diff --git a/testsuites/sptests/spnsext01/spnsext01.doc b/testsuites/sptests/spnsext01/spnsext01.doc
index 7e926c6899..27c9f0c32e 100644
--- a/testsuites/sptests/spnsext01/spnsext01.doc
+++ b/testsuites/sptests/spnsext01/spnsext01.doc
@@ -1,6 +1,6 @@
# SPDX-License-Identifier: BSD-2-Clause
-# Copyright (c) 2011 embedded brains GmbH. All rights reserved.
+# Copyright (c) 2011 embedded brains GmbH & Co. KG
#
# Redistribution and use in source and binary forms, with or without
# modification, are permitted provided that the following conditions
diff --git a/testsuites/sptests/spntp01/init.c b/testsuites/sptests/spntp01/init.c
index eeee472e9d..f6f6252bcf 100644
--- a/testsuites/sptests/spntp01/init.c
+++ b/testsuites/sptests/spntp01/init.c
@@ -1,7 +1,7 @@
/*
* SPDX-License-Identifier: BSD-2-Clause
*
- * Copyright (C) 2022 embedded brains GmbH (http://www.embedded-brains.de)
+ * Copyright (C) 2022 embedded brains GmbH & Co. KG
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
@@ -81,7 +81,7 @@ T_TEST_CASE( NTP )
T_eq_long( tx.tolerance, 32500000 );
T_eq_long( tx.ppsfreq, 0 );
T_eq_long( tx.jitter, 0 );
- T_eq_int( tx.shift, 0 );
+ T_eq_int( tx.shift, 2 );
T_eq_long( tx.stabil, 0 );
T_eq_long( tx.jitcnt, 0 );
T_eq_long( tx.calcnt, 0 );
diff --git a/testsuites/sptests/sppercpudata01/init.c b/testsuites/sptests/sppercpudata01/init.c
index d76ba94d28..24ad75b607 100644
--- a/testsuites/sptests/sppercpudata01/init.c
+++ b/testsuites/sptests/sppercpudata01/init.c
@@ -1,7 +1,7 @@
/* SPDX-License-Identifier: BSD-2-Clause */
/*
- * Copyright (c) 2018 embedded brains GmbH. All rights reserved.
+ * Copyright (c) 2018 embedded brains GmbH & Co. KG
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
diff --git a/testsuites/sptests/sppercpudata01/item.c b/testsuites/sptests/sppercpudata01/item.c
index 4a6ee46c8b..295e2855ee 100644
--- a/testsuites/sptests/sppercpudata01/item.c
+++ b/testsuites/sptests/sppercpudata01/item.c
@@ -1,7 +1,7 @@
/* SPDX-License-Identifier: BSD-2-Clause */
/*
- * Copyright (c) 2018 embedded brains GmbH. All rights reserved.
+ * Copyright (c) 2018 embedded brains GmbH & Co. KG
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
diff --git a/testsuites/sptests/sppercpudata01/sppercpudata01.h b/testsuites/sptests/sppercpudata01/sppercpudata01.h
index 1dde0071c8..2913d3456f 100644
--- a/testsuites/sptests/sppercpudata01/sppercpudata01.h
+++ b/testsuites/sptests/sppercpudata01/sppercpudata01.h
@@ -1,7 +1,7 @@
/* SPDX-License-Identifier: BSD-2-Clause */
/*
- * Copyright (c) 2018 embedded brains GmbH. All rights reserved.
+ * Copyright (c) 2018 embedded brains GmbH & Co. KG
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
diff --git a/testsuites/sptests/sppps01/init.c b/testsuites/sptests/sppps01/init.c
new file mode 100644
index 0000000000..8dcce17769
--- /dev/null
+++ b/testsuites/sptests/sppps01/init.c
@@ -0,0 +1,240 @@
+/*
+ * SPDX-License-Identifier: BSD-2-Clause
+ *
+ * Copyright (C) 2022 German Aerospace Center (DLR)
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#include <errno.h>
+#include <rtems/test.h>
+#include <rtems/test-info.h>
+#include <rtems/timespec.h>
+#include <rtems/rtems/event.h>
+#define _KERNEL
+#include <sys/timepps.h>
+
+const char rtems_test_name[] = "SPPPS 1";
+
+#define PPS_EVENT RTEMS_EVENT_0
+#define TASK_WAITING RTEMS_EVENT_1
+#define PPS_EVENT_RECEIVED RTEMS_EVENT_2
+
+struct test_pps_device {
+ struct pps_state pps;
+ rtems_id task_waiting;
+ int wokenup;
+};
+
+typedef struct {
+ rtems_id main_task;
+ struct test_pps_device *pps_dev;
+} test_context;
+
+T_TEST_CASE( WaitPPSEventDefaultHandler )
+{
+ int status;
+ struct test_pps_device pps_dev;
+ struct pps_fetch_args fetch;
+
+ memset( &pps_dev, 0, sizeof( pps_dev ) );
+ pps_dev.task_waiting = RTEMS_INVALID_ID;
+
+ pps_dev.pps.ppscap = PPS_CAPTUREBOTH;
+ pps_init_abi( &pps_dev.pps );
+ pps_dev.pps.ppsparam.mode = PPS_CAPTUREASSERT;
+
+ /* If no timeout is requested, pps_fetch() doesn't call the default handler */
+ memset( &fetch, 0, sizeof( fetch ) );
+ status = pps_ioctl( PPS_IOC_FETCH, (caddr_t)&fetch, &pps_dev.pps );
+ T_eq_int( status, 0 );
+
+ fetch.timeout.tv_sec = 1;
+ status = pps_ioctl( PPS_IOC_FETCH, (caddr_t)&fetch, &pps_dev.pps );
+ T_eq_int( status, ETIMEDOUT );
+}
+
+static void fake_wakeup(struct pps_state *pps)
+{
+ struct test_pps_device *pps_dev;
+
+ pps_dev = RTEMS_CONTAINER_OF( pps, struct test_pps_device, pps );
+ pps_dev->wokenup++;
+}
+
+T_TEST_CASE( PPSEventEarlyReturns )
+{
+ struct test_pps_device pps_dev;
+
+ memset( &pps_dev, 0, sizeof( pps_dev ) );
+ pps_dev.task_waiting = RTEMS_INVALID_ID;
+
+ pps_dev.pps.ppscap = PPS_CAPTUREBOTH;
+ pps_init_abi( &pps_dev.pps );
+ pps_dev.pps.wakeup = fake_wakeup;
+ pps_dev.pps.ppsparam.mode = PPS_CAPTUREASSERT;
+
+ pps_capture( &pps_dev.pps );
+ /* Trigger event with a different event than the one previously selected */
+ pps_event( &pps_dev.pps, PPS_CAPTURECLEAR );
+ T_eq_int( pps_dev.wokenup, 0 );
+
+ pps_dev.pps.ppsparam.mode = PPS_CAPTURECLEAR;
+
+ /* Wait th_generation to be updated */
+ rtems_task_wake_after( 2 );
+ pps_event( &pps_dev.pps, PPS_CAPTURECLEAR );
+ T_eq_int( pps_dev.wokenup, 0 );
+
+ /* Save current timecounter in pps_state object */
+ pps_capture( &pps_dev.pps );
+ pps_event( &pps_dev.pps, PPS_CAPTURECLEAR );
+ T_eq_int( pps_dev.wokenup, 0 );
+
+ pps_capture( &pps_dev.pps );
+ pps_event( &pps_dev.pps, PPS_CAPTURECLEAR );
+ T_eq_int( pps_dev.wokenup, 1 );
+}
+
+static void wakeup(struct pps_state *pps)
+{
+ struct test_pps_device *pps_dev;
+
+ pps_dev = RTEMS_CONTAINER_OF( pps, struct test_pps_device, pps );
+ if (pps_dev->task_waiting != RTEMS_INVALID_ID)
+ rtems_event_send( pps_dev->task_waiting, PPS_EVENT );
+}
+
+static int wait(struct pps_state *pps, struct timespec timeout)
+{
+ rtems_status_code sc;
+ rtems_event_set out;
+ uint32_t timeoutticks;
+ struct test_pps_device *pps_dev;
+
+ pps_dev = RTEMS_CONTAINER_OF( pps, struct test_pps_device, pps );
+ pps_dev->task_waiting = rtems_task_self();
+
+ timeoutticks = rtems_timespec_to_ticks(&timeout);
+ sc = rtems_event_receive( PPS_EVENT, RTEMS_DEFAULT_OPTIONS, timeoutticks, &out );
+ return rtems_status_code_to_errno(sc);
+}
+
+static void pps_task(rtems_task_argument arg)
+{
+ int status;
+ rtems_status_code sc;
+ struct pps_fetch_args fetch;
+ test_context *ctx;
+
+ ctx = (test_context *) arg;
+
+ fetch.tsformat = PPS_TSFMT_TSPEC;
+ fetch.timeout.tv_sec = 1;
+ fetch.timeout.tv_nsec = 0;
+
+ sc = rtems_event_send( ctx->main_task, TASK_WAITING );
+ T_rsc_success( sc );
+ status = pps_ioctl( PPS_IOC_FETCH, (caddr_t)&fetch, &ctx->pps_dev->pps );
+ T_eq_int( status, 0 );
+ sc = rtems_event_send( ctx->main_task, PPS_EVENT_RECEIVED );
+ T_rsc_success( sc );
+
+ rtems_task_exit();
+}
+
+T_TEST_CASE( WakeupTaskWithPPSEvent )
+{
+ int status;
+ rtems_status_code sc;
+ struct test_pps_device pps_dev;
+ struct pps_kcbind_args kcbind;
+ test_context ctx;
+ rtems_id pps_task_id;
+ rtems_task_priority pps_task_prio = 1;
+ rtems_event_set out;
+
+ memset( &pps_dev, 0, sizeof( pps_dev ) );
+ pps_dev.task_waiting = RTEMS_INVALID_ID;
+ ctx.pps_dev = &pps_dev;
+ ctx.main_task = rtems_task_self();
+
+ pps_dev.pps.ppscap = PPS_CAPTUREBOTH;
+ pps_init_abi( &pps_dev.pps );
+ pps_dev.pps.wait = wait;
+ pps_dev.pps.wakeup = wakeup;
+ pps_dev.pps.ppsparam.mode = PPS_CAPTUREASSERT;
+
+ kcbind.kernel_consumer = PPS_KC_HARDPPS;
+ kcbind.edge = PPS_CAPTUREASSERT;
+ kcbind.tsformat = PPS_TSFMT_TSPEC;
+ status = pps_ioctl( PPS_IOC_KCBIND, (caddr_t)&kcbind, &pps_dev.pps );
+ T_eq_int( status, 0 );
+
+ /* Save current timecounter in pps_state object */
+ pps_capture( &pps_dev.pps );
+ pps_event( &pps_dev.pps, PPS_CAPTUREASSERT );
+
+ sc = rtems_task_create(
+ rtems_build_name('P', 'P', 'S', 'E'),
+ pps_task_prio,
+ RTEMS_MINIMUM_STACK_SIZE,
+ RTEMS_DEFAULT_MODES,
+ RTEMS_DEFAULT_ATTRIBUTES,
+ &pps_task_id
+ );
+ T_rsc_success( sc );
+ sc = rtems_task_start( pps_task_id, pps_task, (rtems_task_argument) &ctx );
+ T_rsc_success( sc );
+
+ sc = rtems_event_receive( TASK_WAITING, RTEMS_DEFAULT_OPTIONS, RTEMS_MILLISECONDS_TO_TICKS(100), &out );
+ T_rsc_success( sc );
+
+ /* Capture event and send wake-up */
+ pps_capture( &pps_dev.pps );
+ pps_event( &pps_dev.pps, PPS_CAPTUREASSERT );
+
+ sc = rtems_event_receive( PPS_EVENT_RECEIVED, RTEMS_DEFAULT_OPTIONS, RTEMS_MILLISECONDS_TO_TICKS(100), &out );
+ T_rsc_success( sc );
+}
+
+static rtems_task Init( rtems_task_argument argument )
+{
+ rtems_test_run( argument, TEST_STATE );
+}
+
+#define CONFIGURE_APPLICATION_NEEDS_SIMPLE_CONSOLE_DRIVER
+#define CONFIGURE_APPLICATION_NEEDS_CLOCK_DRIVER
+
+#define CONFIGURE_MAXIMUM_TASKS 2
+
+#define CONFIGURE_INITIAL_EXTENSIONS RTEMS_TEST_INITIAL_EXTENSION
+
+#define CONFIGURE_RTEMS_INIT_TASKS_TABLE
+
+#define CONFIGURE_INIT
+
+#include <rtems/confdefs.h>
diff --git a/testsuites/sptests/spprintk/init.c b/testsuites/sptests/spprintk/init.c
index f8fe224086..4fc1c0cc97 100644
--- a/testsuites/sptests/spprintk/init.c
+++ b/testsuites/sptests/spprintk/init.c
@@ -32,7 +32,8 @@
#include "config.h"
#endif
-#include <rtems/score/io.h>
+#include <rtems/base64.h>
+#include <rtems/dev/io.h>
/*
* Undefined the RTEMS_PRINTFLIKE and make it nothing. The test code
@@ -212,52 +213,52 @@ static void test_io_base64( test_context *ctx )
int n;
clear( ctx );
- n = _IO_Base64( put_char, ctx, buf, 9, "\n", 0 );
+ n = _Base64_Encode( put_char, ctx, buf, 9, "\n", 0 );
rtems_test_assert( n == 14 );
rtems_test_assert( strcmp( ctx->buf, "YWJj\nZGVm\nZ2hp" ) == 0 );
clear( ctx );
- n = _IO_Base64( put_char, ctx, buf, 8, "\n", 4 );
+ n = _Base64_Encode( put_char, ctx, buf, 8, "\n", 4 );
rtems_test_assert( n == 14 );
rtems_test_assert( strcmp( ctx->buf, "YWJj\nZGVm\nZ2g=" ) == 0 );
clear( ctx );
- n = _IO_Base64( put_char, ctx, buf, 7, "\n", 4 );
+ n = _Base64_Encode( put_char, ctx, buf, 7, "\n", 4 );
rtems_test_assert( n == 14 );
rtems_test_assert( strcmp( ctx->buf, "YWJj\nZGVm\nZw==" ) == 0 );
clear( ctx );
- n = _IO_Base64( put_char, ctx, buf, 6, "\n", 4 );
+ n = _Base64_Encode( put_char, ctx, buf, 6, "\n", 4 );
rtems_test_assert( n == 9 );
rtems_test_assert( strcmp( ctx->buf, "YWJj\nZGVm" ) == 0 );
clear( ctx );
- n = _IO_Base64( put_char, ctx, buf, 5, "\n", 4 );
+ n = _Base64_Encode( put_char, ctx, buf, 5, "\n", 4 );
rtems_test_assert( n == 9 );
rtems_test_assert( strcmp( ctx->buf, "YWJj\nZGU=" ) == 0 );
clear( ctx );
- n = _IO_Base64( put_char, ctx, buf, 4, "\n", 4 );
+ n = _Base64_Encode( put_char, ctx, buf, 4, "\n", 4 );
rtems_test_assert( n == 9 );
rtems_test_assert( strcmp( ctx->buf, "YWJj\nZA==" ) == 0 );
clear( ctx );
- n = _IO_Base64( put_char, ctx, buf, 3, "\n", 4 );
+ n = _Base64_Encode( put_char, ctx, buf, 3, "\n", 4 );
rtems_test_assert( n == 4 );
rtems_test_assert( strcmp( ctx->buf, "YWJj" ) == 0 );
clear( ctx );
- n = _IO_Base64( put_char, ctx, buf, 2, "\n", 4 );
+ n = _Base64_Encode( put_char, ctx, buf, 2, "\n", 4 );
rtems_test_assert( n == 4 );
rtems_test_assert( strcmp( ctx->buf, "YWI=" ) == 0 );
clear( ctx );
- n = _IO_Base64( put_char, ctx, buf, 1, "\n", 4 );
+ n = _Base64_Encode( put_char, ctx, buf, 1, "\n", 4 );
rtems_test_assert( n == 4 );
rtems_test_assert( strcmp( ctx->buf, "YQ==" ) == 0 );
clear( ctx );
- n = _IO_Base64( put_char, ctx, buf, 0, "\n", 4 );
+ n = _Base64_Encode( put_char, ctx, buf, 0, "\n", 4 );
rtems_test_assert( n == 0 );
}
@@ -267,7 +268,7 @@ static void test_io_base64url( test_context *ctx )
int n;
clear( ctx );
- n = _IO_Base64url( put_char, ctx, buf, sizeof( buf ), "\n", 0 );
+ n = _Base64url_Encode( put_char, ctx, buf, sizeof( buf ), "\n", 0 );
rtems_test_assert( n == 9 );
rtems_test_assert( strcmp( ctx->buf, "AAA-\nAAA_" ) == 0 );
}
diff --git a/testsuites/sptests/spprofiling01/init.c b/testsuites/sptests/spprofiling01/init.c
index 8750f18a06..aa8a7b7098 100644
--- a/testsuites/sptests/spprofiling01/init.c
+++ b/testsuites/sptests/spprofiling01/init.c
@@ -1,7 +1,7 @@
/* SPDX-License-Identifier: BSD-2-Clause */
/*
- * Copyright (c) 2014 embedded brains GmbH. All rights reserved.
+ * Copyright (c) 2014 embedded brains GmbH & Co. KG
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
diff --git a/testsuites/sptests/spscheduler01/init.c b/testsuites/sptests/spscheduler01/init.c
index 577d294cf6..c2dfc954fc 100644
--- a/testsuites/sptests/spscheduler01/init.c
+++ b/testsuites/sptests/spscheduler01/init.c
@@ -1,7 +1,7 @@
/* SPDX-License-Identifier: BSD-2-Clause */
/*
- * Copyright (C) 2014, 2020 embedded brains GmbH (http://www.embedded-brains.de)
+ * Copyright (C) 2014, 2020 embedded brains GmbH & Co. KG
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
diff --git a/testsuites/sptests/spsem03/init.c b/testsuites/sptests/spsem03/init.c
index aef3f8cf7d..11e6cb6827 100644
--- a/testsuites/sptests/spsem03/init.c
+++ b/testsuites/sptests/spsem03/init.c
@@ -1,7 +1,7 @@
/* SPDX-License-Identifier: BSD-2-Clause */
/*
- * Copyright (c) 2014, 2016 embedded brains GmbH. All rights reserved.
+ * Copyright (C) 2014, 2016 embedded brains GmbH & Co. KG
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
diff --git a/testsuites/sptests/spstdc17/init.c b/testsuites/sptests/spstdc17/init.c
new file mode 100644
index 0000000000..0a1a5571ac
--- /dev/null
+++ b/testsuites/sptests/spstdc17/init.c
@@ -0,0 +1,57 @@
+/*
+ * SPDX-License-Identifier: BSD-2-Clause
+ *
+ * Copyright (C) 2022
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#include <rtems.h>
+
+#include <tmacros.h>
+
+const char rtems_test_name[] = "SPSTDC17";
+
+static rtems_task Init( rtems_task_argument arg )
+{
+ (void) arg;
+
+ TEST_BEGIN();
+ TEST_END();
+}
+
+#define CONFIGURE_APPLICATION_NEEDS_SIMPLE_CONSOLE_DRIVER
+#define CONFIGURE_APPLICATION_DOES_NOT_NEED_CLOCK_DRIVER
+
+#define CONFIGURE_MAXIMUM_TASKS 1
+
+#define CONFIGURE_INITIAL_EXTENSIONS RTEMS_TEST_INITIAL_EXTENSION
+
+#define CONFIGURE_RTEMS_INIT_TASKS_TABLE
+
+#define CONFIGURE_INIT
+
+#include <rtems/confdefs.h>
diff --git a/testsuites/sptests/spstdc17/spstdc17.doc b/testsuites/sptests/spstdc17/spstdc17.doc
new file mode 100644
index 0000000000..7f83fd9ad3
--- /dev/null
+++ b/testsuites/sptests/spstdc17/spstdc17.doc
@@ -0,0 +1,12 @@
+This file describes the directives and concepts tested by this test set.
+
+test set name: spstdc17
+
+directives:
+
+ - Header file <rtems.h>
+ - Header file <rtems/confdefs.h>
+
+concepts:
+
+ - Ensure that the API header files are compatible with the C17 standard.
diff --git a/testsuites/sptests/spstdthreads01/init.c b/testsuites/sptests/spstdthreads01/init.c
index 01dcc8e312..d1cacc1705 100644
--- a/testsuites/sptests/spstdthreads01/init.c
+++ b/testsuites/sptests/spstdthreads01/init.c
@@ -1,7 +1,7 @@
/* SPDX-License-Identifier: BSD-2-Clause */
/*
- * Copyright (c) 2015 embedded brains GmbH. All rights reserved.
+ * Copyright (c) 2015 embedded brains GmbH & Co. KG
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
diff --git a/testsuites/sptests/spstkalloc02/init.c b/testsuites/sptests/spstkalloc02/init.c
index 5e5db20f0f..30803bfc8e 100644
--- a/testsuites/sptests/spstkalloc02/init.c
+++ b/testsuites/sptests/spstkalloc02/init.c
@@ -9,7 +9,7 @@
*/
/*
- * Copyright (c) 2011 embedded brains GmbH. All rights reserved.
+ * Copyright (c) 2011 embedded brains GmbH & Co. KG
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
@@ -44,6 +44,7 @@ const char rtems_test_name[] = "SPSTKALLOC 2";
#include <stdio.h>
#include <inttypes.h>
+#include <rtems/malloc.h>
#include <rtems/score/heapimpl.h>
#define TASK_COUNT 5
@@ -56,6 +57,8 @@ static void task_stack_init(size_t stack_space_size);
static void *task_stack_allocate(size_t stack_size);
+static void *task_stack_allocate_for_idle(uint32_t unused, size_t *stack_size);
+
static void task_stack_free(void *addr);
static void print_info(void)
@@ -138,10 +141,18 @@ static rtems_task Init(rtems_task_argument argument)
*/
#define CONFIGURE_APPLICATION_DISABLE_FILESYSTEM
+/*
+ * This test requires full control over the present thread-local objects. This
+ * is necessary for the custom stack allocator below. In certain Newlib
+ * configurations, the Newlib reentrancy support may add thread-local objects.
+ */
+#define CONFIGURE_DISABLE_NEWLIB_REENTRANCY
+
#define CONFIGURE_MAXIMUM_TASKS TASK_COUNT
#define CONFIGURE_TASK_STACK_ALLOCATOR_INIT task_stack_init
#define CONFIGURE_TASK_STACK_ALLOCATOR task_stack_allocate
+#define CONFIGURE_TASK_STACK_ALLOCATOR_FOR_IDLE task_stack_allocate_for_idle
#define CONFIGURE_TASK_STACK_DEALLOCATOR task_stack_free
#define CONFIGURE_TASK_STACK_ALLOCATOR_AVOIDS_WORK_SPACE
#define CONFIGURE_TASK_STACK_FROM_ALLOCATOR(stack_size) \
@@ -176,6 +187,15 @@ static void *task_stack_allocate(size_t stack_size)
return _Heap_Allocate(&task_stack_heap, stack_size);
}
+static void *task_stack_allocate_for_idle(uint32_t unused, size_t *stack_size)
+{
+ return rtems_heap_allocate_aligned_with_boundary(
+ *stack_size,
+ CPU_STACK_ALIGNMENT,
+ 0
+ );
+}
+
static void task_stack_free(void *addr)
{
_Heap_Free(&task_stack_heap, addr);
diff --git a/testsuites/sptests/spstkalloc02/spstkalloc02.doc b/testsuites/sptests/spstkalloc02/spstkalloc02.doc
index a2dd0357ba..96cdfb52c2 100644
--- a/testsuites/sptests/spstkalloc02/spstkalloc02.doc
+++ b/testsuites/sptests/spstkalloc02/spstkalloc02.doc
@@ -1,6 +1,6 @@
# SPDX-License-Identifier: BSD-2-Clause
-# Copyright (c) 2011 embedded brains GmbH.
+# Copyright (c) 2011 embedded brains GmbH & Co. KG
#
# Redistribution and use in source and binary forms, with or without
# modification, are permitted provided that the following conditions
@@ -26,7 +26,7 @@
This file describes the directives and concepts tested by this test set.
-test set name: spstkalloc01
+test set name: spstkalloc02
The test expects that no thread-local object is present.
diff --git a/testsuites/sptests/spstkalloc03/init.c b/testsuites/sptests/spstkalloc03/init.c
index 6d6817bccb..5ee7de26ec 100644
--- a/testsuites/sptests/spstkalloc03/init.c
+++ b/testsuites/sptests/spstkalloc03/init.c
@@ -87,12 +87,12 @@ static void thread_stacks_free(void *addr)
static void *thread_stacks_allocate_for_idle(
uint32_t cpu,
- size_t stack_size
+ size_t *stack_size
)
{
rtems_test_assert(thread_stacks_count == 0);
thread_stacks_count++;
- return allocate_helper(stack_size);
+ return allocate_helper(*stack_size);
}
/*
diff --git a/testsuites/sptests/spstkalloc04/init.c b/testsuites/sptests/spstkalloc04/init.c
index c5d2614f64..9678f6e00c 100644
--- a/testsuites/sptests/spstkalloc04/init.c
+++ b/testsuites/sptests/spstkalloc04/init.c
@@ -69,12 +69,12 @@ static void *allocate_helper(size_t size)
static void *thread_stacks_allocate_for_idle(
uint32_t cpu,
- size_t stack_size
+ size_t *stack_size
)
{
rtems_test_assert(thread_stacks_count == 0);
thread_stacks_count++;
- return allocate_helper(stack_size);
+ return allocate_helper(*stack_size);
}
/*
diff --git a/testsuites/sptests/spsysinit01/init.c b/testsuites/sptests/spsysinit01/init.c
index 0d5a1f0020..f756dc7a23 100644
--- a/testsuites/sptests/spsysinit01/init.c
+++ b/testsuites/sptests/spsysinit01/init.c
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2015, 2020 embedded brains GmbH. All rights reserved.
+ * Copyright (C) 2015, 2020 embedded brains GmbH & Co. KG
*
* The license and distribution terms for this file may be
* found in the file LICENSE in this distribution or at
@@ -341,13 +341,13 @@ LAST(RTEMS_SYSINIT_CLASSIC_MESSAGE_QUEUE)
FIRST(RTEMS_SYSINIT_CLASSIC_SEMAPHORE)
{
- assert(_Semaphore_Information.initial_objects[0].id == 0);
+ assert(info_not_init(&_Semaphore_Information));
next_step(CLASSIC_SEMAPHORE_PRE);
}
LAST(RTEMS_SYSINIT_CLASSIC_SEMAPHORE)
{
- assert(_Semaphore_Information.initial_objects[0].id != 0);
+ assert(info_is_init(&_Semaphore_Information, 1));
next_step(CLASSIC_SEMAPHORE_POST);
}
@@ -908,7 +908,7 @@ static void do_posix_sem_open(void)
sem_t *sem;
int rv;
- sem = sem_open("sem", O_CREAT | O_RDWR, S_IRWXU | S_IRWXG | S_IRWXO);
+ sem = sem_open("sem", O_CREAT | O_RDWR, S_IRWXU | S_IRWXG | S_IRWXO, 0);
rtems_test_assert(sem != SEM_FAILED);
rv = sem_close(sem);
diff --git a/testsuites/sptests/spsyslock01/init.c b/testsuites/sptests/spsyslock01/init.c
index 01f5ee3fba..74e3d67530 100644
--- a/testsuites/sptests/spsyslock01/init.c
+++ b/testsuites/sptests/spsyslock01/init.c
@@ -1,7 +1,7 @@
/* SPDX-License-Identifier: BSD-2-Clause */
/*
- * Copyright (c) 2015, 2016 embedded brains GmbH. All rights reserved.
+ * Copyright (C) 2015, 2016 embedded brains GmbH & Co. KG
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
diff --git a/testsuites/sptests/sptasknopreempt01/init.c b/testsuites/sptests/sptasknopreempt01/init.c
index 617a44ade1..5828d602de 100644
--- a/testsuites/sptests/sptasknopreempt01/init.c
+++ b/testsuites/sptests/sptasknopreempt01/init.c
@@ -1,7 +1,7 @@
/* SPDX-License-Identifier: BSD-2-Clause */
/*
- * Copyright (c) 2015 embedded brains GmbH. All rights reserved.
+ * Copyright (C) 2015, 2022 embedded brains GmbH & Co. KG
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
@@ -37,12 +37,7 @@ static bool did_run;
static void do_not_run(rtems_task_argument arg)
{
-#if 0
rtems_test_assert(0);
-#else
- did_run = true;
- rtems_task_suspend(RTEMS_SELF);
-#endif
}
static void test(void)
@@ -64,9 +59,9 @@ static void test(void)
rtems_test_assert(sc == RTEMS_SUCCESSFUL);
/*
- * This will start a pseudo interrupt task pre-empting the non-preemtive
- * executing task. Later the high priority do_not_run() task is scheduled.
- * See also https://devel.rtems.org/ticket/2365.
+ * This will start a task with a priority of PRIORITY_MINIMUM. Check that
+ * this task and the test task did not preempt the current task. See also
+ * https://devel.rtems.org/ticket/2365.
*/
sc = rtems_timer_initiate_server(
RTEMS_TIMER_SERVER_DEFAULT_PRIORITY,
@@ -75,8 +70,7 @@ static void test(void)
);
rtems_test_assert(sc == RTEMS_SUCCESSFUL);
- /* This is probably a bug and not a feature */
- rtems_test_assert(did_run);
+ rtems_test_assert(!did_run);
sc = rtems_task_delete(task);
rtems_test_assert(sc == RTEMS_SUCCESSFUL);
@@ -99,6 +93,8 @@ static void Init(rtems_task_argument arg)
#define CONFIGURE_INIT_TASK_PRIORITY 2
+#define CONFIGURE_INIT_TASK_INITIAL_MODES RTEMS_NO_PREEMPT
+
#define CONFIGURE_INITIAL_EXTENSIONS RTEMS_TEST_INITIAL_EXTENSION
#define CONFIGURE_RTEMS_INIT_TASKS_TABLE
diff --git a/testsuites/sptests/spthread01/init.c b/testsuites/sptests/spthread01/init.c
index 7cb7d08428..4baf0dba2f 100644
--- a/testsuites/sptests/spthread01/init.c
+++ b/testsuites/sptests/spthread01/init.c
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2017 embedded brains GmbH. All rights reserved.
+ * Copyright (c) 2017 embedded brains GmbH & Co. KG
*
* The license and distribution terms for this file may be
* found in the file LICENSE in this distribution or at
diff --git a/testsuites/sptests/spthreadlife01/init.c b/testsuites/sptests/spthreadlife01/init.c
index b2c6634820..c33e8fef35 100644
--- a/testsuites/sptests/spthreadlife01/init.c
+++ b/testsuites/sptests/spthreadlife01/init.c
@@ -1,7 +1,7 @@
/* SPDX-License-Identifier: BSD-2-Clause */
/*
- * Copyright (c) 2014, 2018 embedded brains GmbH. All rights reserved.
+ * Copyright (C) 2014, 2018 embedded brains GmbH & Co. KG
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
diff --git a/testsuites/sptests/spthreadq01/init.c b/testsuites/sptests/spthreadq01/init.c
index 01977fe00d..bb6423ec4f 100644
--- a/testsuites/sptests/spthreadq01/init.c
+++ b/testsuites/sptests/spthreadq01/init.c
@@ -4,7 +4,7 @@
* COPYRIGHT (c) 1989-2009.
* On-Line Applications Research Corporation (OAR).
*
- * Copyright (c) 2016 embedded brains GmbH.
+ * Copyright (c) 2016 embedded brains GmbH & Co. KG
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
diff --git a/testsuites/sptests/sptimecounter01/init.c b/testsuites/sptests/sptimecounter01/init.c
index 20a40b4072..ff5fe25a2d 100644
--- a/testsuites/sptests/sptimecounter01/init.c
+++ b/testsuites/sptests/sptimecounter01/init.c
@@ -1,7 +1,7 @@
/* SPDX-License-Identifier: BSD-2-Clause */
/*
- * Copyright (c) 2015, 2019 embedded brains GmbH. All rights reserved.
+ * Copyright (C) 2015, 2019 embedded brains GmbH & Co. KG
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
diff --git a/testsuites/sptests/sptimecounter01/sptimecounter01.doc b/testsuites/sptests/sptimecounter01/sptimecounter01.doc
index 3271e45c88..85a236e68f 100644
--- a/testsuites/sptests/sptimecounter01/sptimecounter01.doc
+++ b/testsuites/sptests/sptimecounter01/sptimecounter01.doc
@@ -1,6 +1,6 @@
# SPDX-License-Identifier: BSD-2-Clause
-# Copyright (c) 2015 embedded brains GmbH. All rights reserved.
+# Copyright (c) 2015 embedded brains GmbH & Co. KG
#
# Redistribution and use in source and binary forms, with or without
# modification, are permitted provided that the following conditions
diff --git a/testsuites/sptests/sptimecounter02/init.c b/testsuites/sptests/sptimecounter02/init.c
index e13f9713a7..ff05f147de 100644
--- a/testsuites/sptests/sptimecounter02/init.c
+++ b/testsuites/sptests/sptimecounter02/init.c
@@ -1,7 +1,7 @@
/* SPDX-License-Identifier: BSD-2-Clause */
/*
- * Copyright (c) 2015 embedded brains GmbH. All rights reserved.
+ * Copyright (C) 2015, 2024 embedded brains GmbH & Co. KG
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
@@ -61,6 +61,8 @@ const char rtems_test_name[] = "SPTIMECOUNTER 2";
typedef struct {
rtems_test_parallel_context base;
+ const char *test_sep;
+ const char *counter_sep;
struct timecounter tc_null;
uint32_t binuptime_per_job[CPU_COUNT];
sbintime_t duration_per_job[CPU_COUNT];
@@ -90,6 +92,45 @@ static void install_tc_null(timecounter_context *ctx)
rtems_timecounter_install(tc_cpu);
}
+static void test_print_results(
+ const char *driver,
+ timecounter_context *ctx,
+ size_t active_workers
+)
+{
+ const char *value_sep;
+ size_t i;
+
+ if (active_workers == 1) {
+ printf(
+ "%s{\n"
+ " \"timecounter\": \"%s\",\n"
+ " \"counter\": [",
+ ctx->test_sep,
+ driver
+ );
+ ctx->test_sep = ", ";
+ ctx->counter_sep = "\n ";
+ }
+
+ printf("%s[", ctx->counter_sep);
+ ctx->counter_sep = "],\n ";
+ value_sep = "";
+
+ for (i = 0; i < active_workers; ++i) {
+ printf(
+ "%s%" PRIu32,
+ value_sep,
+ ctx->binuptime_per_job[i]
+ );
+ value_sep = ", ";
+ }
+
+ if (active_workers == rtems_scheduler_get_processor_maximum()) {
+ printf("]\n ]\n }");
+ }
+}
+
static rtems_interval test_bintime_init(
rtems_test_parallel_context *base,
void *arg,
@@ -133,25 +174,14 @@ static void test_bintime_fini(
timecounter_context *ctx = (timecounter_context *) base;
size_t i;
- printf(" <BinuptimeTest activeWorker=\"%zu\">\n", active_workers);
-
for (i = 0; i < active_workers; ++i) {
sbintime_t error;
- printf(
- " <Counter worker=\"%zu\">%" PRIu32 "</Counter>\n"
- " <Duration worker=\"%zu\" unit=\"sbintime\">%" PRId64 "</Duration>\n",
- i + 1,
- ctx->binuptime_per_job[i],
- i + 1,
- ctx->duration_per_job[i]
- );
-
error = DURATION_IN_SECONDS * SBT_1S - ctx->duration_per_job[i];
rtems_test_assert(error * error < SBT_1MS * SBT_1MS);
}
- printf(" </BinuptimeTest>\n");
+ test_print_results("Clock Driver", ctx, active_workers);
}
static rtems_interval test_bintime_null_init(
@@ -192,20 +222,7 @@ static void test_bintime_null_fini(
size_t active_workers
)
{
- timecounter_context *ctx = (timecounter_context *) base;
- size_t i;
-
- printf(" <BinuptimeNullTest activeWorker=\"%zu\">\n", active_workers);
-
- for (i = 0; i < active_workers; ++i) {
- printf(
- " <Counter worker=\"%zu\">%" PRIu32 "</Counter>\n",
- i + 1,
- ctx->binuptime_per_job[i]
- );
- }
-
- printf(" </BinuptimeNullTest>\n");
+ test_print_results("Null", (timecounter_context *) base, active_workers);
}
static const rtems_test_parallel_job timecounter_jobs[] = {
@@ -231,8 +248,9 @@ static void Init(rtems_task_argument arg)
TEST_BEGIN();
- printf("<SPTimecounter01>\n");
+ printf("*** BEGIN OF JSON DATA ***\n[\n ");
+ ctx->test_sep = "";
rtems_test_parallel(
&ctx->base,
NULL,
@@ -240,6 +258,8 @@ static void Init(rtems_task_argument arg)
RTEMS_ARRAY_SIZE(timecounter_jobs)
);
+ printf("\n]\n*** END OF JSON DATA ***\n");
+
/* Check for all functions available in the bsd.h user space */
rtems_bsd_bintime(&bt);
@@ -255,8 +275,6 @@ static void Init(rtems_task_argument arg)
rtems_bsd_getmicrouptime(&tv);
rtems_bsd_getnanouptime(&ts);
- printf("</SPTimecounter01>\n");
-
TEST_END();
rtems_test_exit(0);
}
diff --git a/testsuites/sptests/sptimecounter02/sptimecounter02.py b/testsuites/sptests/sptimecounter02/sptimecounter02.py
index 925b3f1d6c..198255c140 100755
--- a/testsuites/sptests/sptimecounter02/sptimecounter02.py
+++ b/testsuites/sptests/sptimecounter02/sptimecounter02.py
@@ -1,42 +1,59 @@
-#!/usr/bin/env python
+# SPDX-License-Identifier: BSD-2-Clause
+# Copyright (C) 2016, 2024 embedded brains GmbH & Co. KG
#
-# Copyright (c) 2016 embedded brains GmbH. All rights reserved.
-#
-# The license and distribution terms for this file may be
-# found in the file LICENSE in this distribution or at
-# http://www.rtems.org/license/LICENSE.
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1. Redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+# 2. Redistributions in binary form must reproduce the above copyright
+# notice, this list of conditions and the following disclaimer in the
+# documentation and/or other materials provided with the distribution.
#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+# ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
+# LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+# POSSIBILITY OF SUCH DAMAGE.
+import json
import re
-import libxml2
-from libxml2 import xmlNode
-import matplotlib.pyplot as plt
-data = open('sptimecounter02.scn').read()
-data = re.sub(r'\*\*\*.*\*\*\*', '', data)
-doc = libxml2.parseDoc(data)
-ctx = doc.xpathNewContext()
-
-plt.title('Timestamp Performance')
-plt.xlabel('Active Workers')
-plt.ylabel('Operation Count')
-
-def m(n):
- return int(n.getContent())
-
-def getCounterSums(variant):
- w = 1
- y = []
- while True:
- c = map(m, ctx.xpathEval('/SPTimecounter01/' + variant + '[@activeWorker="' + str(w) + '"]/Counter'))
- if not c:
- break
- y.append(sum(c))
- w = w + 1
- return y
-
-y = getCounterSums('BinuptimeTest')
-x = range(1, len(y) + 1)
-plt.xticks(x)
-plt.plot(x, y, marker = 'o')
-plt.show()
+import matplotlib.pyplot as plt # type: ignore
+from matplotlib import ticker # type: ignore
+
+
+def _plot(data: dict) -> None:
+ _, axes = plt.subplots()
+ axes.set_title("Timestamp Performance")
+ axes.set_xlabel("Active Workers")
+ axes.set_ylabel("Operation Count")
+ x = list(range(1, len(data[0]["counter"]) + 1))
+ axes.xaxis.set_major_locator(ticker.FixedLocator(x))
+ for samples in data:
+ y = [sum(values) for values in samples["counter"]]
+ axes.plot(x,
+ y,
+ label=samples["timecounter"],
+ marker="o")
+ axes.legend(loc="best")
+ plt.savefig("sptimecounter02.png")
+ plt.savefig("sptimecounter02.pdf")
+ plt.close()
+
+
+_JSON_DATA = re.compile(
+ r"\*\*\* BEGIN OF JSON DATA \*\*\*(.*)"
+ r"\*\*\* END OF JSON DATA \*\*\*", re.DOTALL)
+
+with open("sptimecounter02.scn", "r", encoding="utf-8") as src:
+ match = _JSON_DATA.search(src.read())
+ data = json.loads(match.group(1))
+
+_plot(data)
diff --git a/testsuites/sptests/sptimecounter02/sptimecounter02.scn b/testsuites/sptests/sptimecounter02/sptimecounter02.scn
index 0ad38c6f4a..6acc521873 100644
--- a/testsuites/sptests/sptimecounter02/sptimecounter02.scn
+++ b/testsuites/sptests/sptimecounter02/sptimecounter02.scn
@@ -1,1000 +1,40 @@
+
+ SIS - SPARC/RISCV instruction simulator 2.30, copyright Jiri Gaisler 2020
+ Bug-reports to jiri@gaisler.se
+
+ GR740/LEON4 emulation enabled, 4 cpus online, delta 50 clocks
+
+ Loaded build/sparc/gr740/testsuites/sptests/sptimecounter02.exe, entry 0x00000000
+
+
*** BEGIN OF TEST SPTIMECOUNTER 2 ***
-<SPTimecounter01>
- <BinuptimeTest activeWorker="1">
- <Counter worker="1">5433429</Counter>
- <Duration worker="1" unit="sbintime">4291225979</Duration>
- </BinuptimeTest>
- <BinuptimeTest activeWorker="2">
- <Counter worker="1">3832225</Counter>
- <Duration worker="1" unit="sbintime">4290792130</Duration>
- <Counter worker="2">3834316</Counter>
- <Duration worker="2" unit="sbintime">4290790869</Duration>
- </BinuptimeTest>
- <BinuptimeTest activeWorker="3">
- <Counter worker="1">2557440</Counter>
- <Duration worker="1" unit="sbintime">4294943244</Duration>
- <Counter worker="2">2559261</Counter>
- <Duration worker="2" unit="sbintime">4294946681</Duration>
- <Counter worker="3">2559529</Counter>
- <Duration worker="3" unit="sbintime">4294943817</Duration>
- </BinuptimeTest>
- <BinuptimeTest activeWorker="4">
- <Counter worker="1">1916358</Counter>
- <Duration worker="1" unit="sbintime">4291303174</Duration>
- <Counter worker="2">1918101</Counter>
- <Duration worker="2" unit="sbintime">4291303746</Duration>
- <Counter worker="3">1918236</Counter>
- <Duration worker="3" unit="sbintime">4291301112</Duration>
- <Counter worker="4">1918182</Counter>
- <Duration worker="4" unit="sbintime">4291303861</Duration>
- </BinuptimeTest>
- <BinuptimeTest activeWorker="5">
- <Counter worker="1">1437861</Counter>
- <Duration worker="1" unit="sbintime">4292771136</Duration>
- <Counter worker="2">1439416</Counter>
- <Duration worker="2" unit="sbintime">4292769991</Duration>
- <Counter worker="3">1439361</Counter>
- <Duration worker="3" unit="sbintime">4292774000</Duration>
- <Counter worker="4">1439373</Counter>
- <Duration worker="4" unit="sbintime">4292773427</Duration>
- <Counter worker="5">1919046</Counter>
- <Duration worker="5" unit="sbintime">4292771480</Duration>
- </BinuptimeTest>
- <BinuptimeTest activeWorker="6">
- <Counter worker="1">1278255</Counter>
- <Duration worker="1" unit="sbintime">4292980616</Duration>
- <Counter worker="2">1279690</Counter>
- <Duration worker="2" unit="sbintime">4292981762</Duration>
- <Counter worker="3">1279546</Counter>
- <Duration worker="3" unit="sbintime">4292978440</Duration>
- <Counter worker="4">1279558</Counter>
- <Duration worker="4" unit="sbintime">4292978096</Duration>
- <Counter worker="5">1279611</Counter>
- <Duration worker="5" unit="sbintime">4292980043</Duration>
- <Counter worker="6">1279619</Counter>
- <Duration worker="6" unit="sbintime">4292976150</Duration>
- </BinuptimeTest>
- <BinuptimeTest activeWorker="7">
- <Counter worker="1">1022765</Counter>
- <Duration worker="1" unit="sbintime">4294000413</Duration>
- <Counter worker="2">1024240</Counter>
- <Duration worker="2" unit="sbintime">4294002246</Duration>
- <Counter worker="3">1024022</Counter>
- <Duration worker="3" unit="sbintime">4293998007</Duration>
- <Counter worker="4">1024036</Counter>
- <Duration worker="4" unit="sbintime">4293998924</Duration>
- <Counter worker="5">1024020</Counter>
- <Duration worker="5" unit="sbintime">4293998809</Duration>
- <Counter worker="6">1024010</Counter>
- <Duration worker="6" unit="sbintime">4293999382</Duration>
- <Counter worker="7">1535866</Counter>
- <Duration worker="7" unit="sbintime">4293999955</Duration>
- </BinuptimeTest>
- <BinuptimeTest activeWorker="8">
- <Counter worker="1">958721</Counter>
- <Duration worker="1" unit="sbintime">4293767683</Duration>
- <Counter worker="2">960000</Counter>
- <Duration worker="2" unit="sbintime">4293768599</Duration>
- <Counter worker="3">960007</Counter>
- <Duration worker="3" unit="sbintime">4293764018</Duration>
- <Counter worker="4">960007</Counter>
- <Duration worker="4" unit="sbintime">4293764132</Duration>
- <Counter worker="5">960030</Counter>
- <Duration worker="5" unit="sbintime">4293764705</Duration>
- <Counter worker="6">960042</Counter>
- <Duration worker="6" unit="sbintime">4293764590</Duration>
- <Counter worker="7">960019</Counter>
- <Duration worker="7" unit="sbintime">4293768026</Duration>
- <Counter worker="8">959998</Counter>
- <Duration worker="8" unit="sbintime">4293763446</Duration>
- </BinuptimeTest>
- <BinuptimeTest activeWorker="9">
- <Counter worker="1">942346</Counter>
- <Duration worker="1" unit="sbintime">4292128953</Duration>
- <Counter worker="2">943991</Counter>
- <Duration worker="2" unit="sbintime">4292136282</Duration>
- <Counter worker="3">940622</Counter>
- <Duration worker="3" unit="sbintime">4292123913</Duration>
- <Counter worker="4">940597</Counter>
- <Duration worker="4" unit="sbintime">4292128494</Duration>
- <Counter worker="5">941505</Counter>
- <Duration worker="5" unit="sbintime">4292126203</Duration>
- <Counter worker="6">941481</Counter>
- <Duration worker="6" unit="sbintime">4292126204</Duration>
- <Counter worker="7">944352</Counter>
- <Duration worker="7" unit="sbintime">4292126089</Duration>
- <Counter worker="8">944344</Counter>
- <Duration worker="8" unit="sbintime">4292126204</Duration>
- <Counter worker="9">5373049</Counter>
- <Duration worker="9" unit="sbintime">4292132044</Duration>
- </BinuptimeTest>
- <BinuptimeTest activeWorker="10">
- <Counter worker="1">958924</Counter>
- <Duration worker="1" unit="sbintime">4292784422</Duration>
- <Counter worker="2">960306</Counter>
- <Duration worker="2" unit="sbintime">4292785452</Duration>
- <Counter worker="3">958656</Counter>
- <Duration worker="3" unit="sbintime">4292782704</Duration>
- <Counter worker="4">958632</Counter>
- <Duration worker="4" unit="sbintime">4292782704</Duration>
- <Counter worker="5">960299</Counter>
- <Duration worker="5" unit="sbintime">4292781444</Duration>
- <Counter worker="6">960321</Counter>
- <Duration worker="6" unit="sbintime">4292786026</Duration>
- <Counter worker="7">959742</Counter>
- <Duration worker="7" unit="sbintime">4292778810</Duration>
- <Counter worker="8">959726</Counter>
- <Duration worker="8" unit="sbintime">4292783162</Duration>
- <Counter worker="9">3835189</Counter>
- <Duration worker="9" unit="sbintime">4292783734</Duration>
- <Counter worker="10">3835159</Counter>
- <Duration worker="10" unit="sbintime">4292782475</Duration>
- </BinuptimeTest>
- <BinuptimeTest activeWorker="11">
- <Counter worker="1">958317</Counter>
- <Duration worker="1" unit="sbintime">4292020376</Duration>
- <Counter worker="2">959720</Counter>
- <Duration worker="2" unit="sbintime">4292020490</Duration>
- <Counter worker="3">959141</Counter>
- <Duration worker="3" unit="sbintime">4292016024</Duration>
- <Counter worker="4">959171</Counter>
- <Duration worker="4" unit="sbintime">4292020376</Duration>
- <Counter worker="5">959183</Counter>
- <Duration worker="5" unit="sbintime">4292018199</Duration>
- <Counter worker="6">959176</Counter>
- <Duration worker="6" unit="sbintime">4292022666</Duration>
- <Counter worker="7">960245</Counter>
- <Duration worker="7" unit="sbintime">4292020376</Duration>
- <Counter worker="8">960256</Counter>
- <Duration worker="8" unit="sbintime">4292024041</Duration>
- <Counter worker="9">2556834</Counter>
- <Duration worker="9" unit="sbintime">4292019460</Duration>
- <Counter worker="10">2556892</Counter>
- <Duration worker="10" unit="sbintime">4292018314</Duration>
- <Counter worker="11">2556777</Counter>
- <Duration worker="11" unit="sbintime">4292018543</Duration>
- </BinuptimeTest>
- <BinuptimeTest activeWorker="12">
- <Counter worker="1">958527</Counter>
- <Duration worker="1" unit="sbintime">4291119807</Duration>
- <Counter worker="2">959937</Counter>
- <Duration worker="2" unit="sbintime">4291119807</Duration>
- <Counter worker="3">959932</Counter>
- <Duration worker="3" unit="sbintime">4291120379</Duration>
- <Counter worker="4">959924</Counter>
- <Duration worker="4" unit="sbintime">4291120380</Duration>
- <Counter worker="5">959389</Counter>
- <Duration worker="5" unit="sbintime">4291120838</Duration>
- <Counter worker="6">959393</Counter>
- <Duration worker="6" unit="sbintime">4291123701</Duration>
- <Counter worker="7">958279</Counter>
- <Duration worker="7" unit="sbintime">4291118204</Duration>
- <Counter worker="8">958288</Counter>
- <Duration worker="8" unit="sbintime">4291118089</Duration>
- <Counter worker="9">1917514</Counter>
- <Duration worker="9" unit="sbintime">4291120609</Duration>
- <Counter worker="10">1917516</Counter>
- <Duration worker="10" unit="sbintime">4291118318</Duration>
- <Counter worker="11">1917496</Counter>
- <Duration worker="11" unit="sbintime">4291119463</Duration>
- <Counter worker="12">1917477</Counter>
- <Duration worker="12" unit="sbintime">4291116829</Duration>
- </BinuptimeTest>
- <BinuptimeTest activeWorker="13">
- <Counter worker="1">957469</Counter>
- <Duration worker="1" unit="sbintime">4291772986</Duration>
- <Counter worker="2">958901</Counter>
- <Duration worker="2" unit="sbintime">4291772184</Duration>
- <Counter worker="3">959855</Counter>
- <Duration worker="3" unit="sbintime">4291766114</Duration>
- <Counter worker="4">959906</Counter>
- <Duration worker="4" unit="sbintime">4291770695</Duration>
- <Counter worker="5">959953</Counter>
- <Duration worker="5" unit="sbintime">4291779743</Duration>
- <Counter worker="6">959977</Counter>
- <Duration worker="6" unit="sbintime">4291769092</Duration>
- <Counter worker="7">959389</Counter>
- <Duration worker="7" unit="sbintime">4291770810</Duration>
- <Counter worker="8">959385</Counter>
- <Duration worker="8" unit="sbintime">4291766228</Duration>
- <Counter worker="9">1438521</Counter>
- <Duration worker="9" unit="sbintime">4291768748</Duration>
- <Counter worker="10">1438502</Counter>
- <Duration worker="10" unit="sbintime">4291768977</Duration>
- <Counter worker="11">1438548</Counter>
- <Duration worker="11" unit="sbintime">4291766687</Duration>
- <Counter worker="12">1438497</Counter>
- <Duration worker="12" unit="sbintime">4291770237</Duration>
- <Counter worker="13">1917953</Counter>
- <Duration worker="13" unit="sbintime">4291765999</Duration>
- </BinuptimeTest>
- <BinuptimeTest activeWorker="14">
- <Counter worker="1">958554</Counter>
- <Duration worker="1" unit="sbintime">4293977506</Duration>
- <Counter worker="2">959986</Counter>
- <Duration worker="2" unit="sbintime">4293974643</Duration>
- <Counter worker="3">959942</Counter>
- <Duration worker="3" unit="sbintime">4293976246</Duration>
- <Counter worker="4">959946</Counter>
- <Duration worker="4" unit="sbintime">4293971894</Duration>
- <Counter worker="5">959422</Counter>
- <Duration worker="5" unit="sbintime">4293972467</Duration>
- <Counter worker="6">959466</Counter>
- <Duration worker="6" unit="sbintime">4293976819</Duration>
- <Counter worker="7">960436</Counter>
- <Duration worker="7" unit="sbintime">4293975216</Duration>
- <Counter worker="8">960437</Counter>
- <Duration worker="8" unit="sbintime">4293975216</Duration>
- <Counter worker="9">1280753</Counter>
- <Duration worker="9" unit="sbintime">4293970749</Duration>
- <Counter worker="10">1280760</Counter>
- <Duration worker="10" unit="sbintime">4293974529</Duration>
- <Counter worker="11">1278618</Counter>
- <Duration worker="11" unit="sbintime">4293975445</Duration>
- <Counter worker="12">1278603</Counter>
- <Duration worker="12" unit="sbintime">4293971665</Duration>
- <Counter worker="13">1278806</Counter>
- <Duration worker="13" unit="sbintime">4293971894</Duration>
- <Counter worker="14">1278798</Counter>
- <Duration worker="14" unit="sbintime">4293975673</Duration>
- </BinuptimeTest>
- <BinuptimeTest activeWorker="15">
- <Counter worker="1">958175</Counter>
- <Duration worker="1" unit="sbintime">4291365823</Duration>
- <Counter worker="2">959788</Counter>
- <Duration worker="2" unit="sbintime">4291366969</Duration>
- <Counter worker="3">959270</Counter>
- <Duration worker="3" unit="sbintime">4291360783</Duration>
- <Counter worker="4">959251</Counter>
- <Duration worker="4" unit="sbintime">4291365250</Duration>
- <Counter worker="5">958544</Counter>
- <Duration worker="5" unit="sbintime">4291366854</Duration>
- <Counter worker="6">958536</Counter>
- <Duration worker="6" unit="sbintime">4291362502</Duration>
- <Counter worker="7">959264</Counter>
- <Duration worker="7" unit="sbintime">4291364105</Duration>
- <Counter worker="8">959249</Counter>
- <Duration worker="8" unit="sbintime">4291368571</Duration>
- <Counter worker="9">1021329</Counter>
- <Duration worker="9" unit="sbintime">4291362960</Duration>
- <Counter worker="10">1021315</Counter>
- <Duration worker="10" unit="sbintime">4291366854</Duration>
- <Counter worker="11">1022881</Counter>
- <Duration worker="11" unit="sbintime">4291367426</Duration>
- <Counter worker="12">1022857</Counter>
- <Duration worker="12" unit="sbintime">4291365135</Duration>
- <Counter worker="13">1022969</Counter>
- <Duration worker="13" unit="sbintime">4291365135</Duration>
- <Counter worker="14">1022963</Counter>
- <Duration worker="14" unit="sbintime">4291364677</Duration>
- <Counter worker="15">1536939</Counter>
- <Duration worker="15" unit="sbintime">4291362960</Duration>
- </BinuptimeTest>
- <BinuptimeTest activeWorker="16">
- <Counter worker="1">958710</Counter>
- <Duration worker="1" unit="sbintime">4294622324</Duration>
- <Counter worker="2">960272</Counter>
- <Duration worker="2" unit="sbintime">4294611444</Duration>
- <Counter worker="3">960318</Counter>
- <Duration worker="3" unit="sbintime">4294610413</Duration>
- <Counter worker="4">960325</Counter>
- <Duration worker="4" unit="sbintime">4294610298</Duration>
- <Counter worker="5">957982</Counter>
- <Duration worker="5" unit="sbintime">4294606977</Duration>
- <Counter worker="6">958010</Counter>
- <Duration worker="6" unit="sbintime">4294611558</Duration>
- <Counter worker="7">960811</Counter>
- <Duration worker="7" unit="sbintime">4294608122</Duration>
- <Counter worker="8">960866</Counter>
- <Duration worker="8" unit="sbintime">4294608123</Duration>
- <Counter worker="9">956789</Counter>
- <Duration worker="9" unit="sbintime">4294606175</Duration>
- <Counter worker="10">956816</Counter>
- <Duration worker="10" unit="sbintime">4294610757</Duration>
- <Counter worker="11">961812</Counter>
- <Duration worker="11" unit="sbintime">4294611787</Duration>
- <Counter worker="12">961815</Counter>
- <Duration worker="12" unit="sbintime">4294610069</Duration>
- <Counter worker="13">959509</Counter>
- <Duration worker="13" unit="sbintime">4294610183</Duration>
- <Counter worker="14">959511</Counter>
- <Duration worker="14" unit="sbintime">4294610070</Duration>
- <Counter worker="15">960164</Counter>
- <Duration worker="15" unit="sbintime">4294612474</Duration>
- <Counter worker="16">960191</Counter>
- <Duration worker="16" unit="sbintime">4294607893</Duration>
- </BinuptimeTest>
- <BinuptimeTest activeWorker="17">
- <Counter worker="1">944571</Counter>
- <Duration worker="1" unit="sbintime">4290823168</Duration>
- <Counter worker="2">946274</Counter>
- <Duration worker="2" unit="sbintime">4290823855</Duration>
- <Counter worker="3">945546</Counter>
- <Duration worker="3" unit="sbintime">4290821565</Duration>
- <Counter worker="4">945535</Counter>
- <Duration worker="4" unit="sbintime">4290821564</Duration>
- <Counter worker="5">943940</Counter>
- <Duration worker="5" unit="sbintime">4290819274</Duration>
- <Counter worker="6">943961</Counter>
- <Duration worker="6" unit="sbintime">4290823741</Duration>
- <Counter worker="7">945996</Counter>
- <Duration worker="7" unit="sbintime">4290821565</Duration>
- <Counter worker="8">945999</Counter>
- <Duration worker="8" unit="sbintime">4290821564</Duration>
- <Counter worker="9">944038</Counter>
- <Duration worker="9" unit="sbintime">4290823969</Duration>
- <Counter worker="10">944031</Counter>
- <Duration worker="10" unit="sbintime">4290819503</Duration>
- <Counter worker="11">944055</Counter>
- <Duration worker="11" unit="sbintime">4290824543</Duration>
- <Counter worker="12">944036</Counter>
- <Duration worker="12" unit="sbintime">4290820076</Duration>
- <Counter worker="13">945985</Counter>
- <Duration worker="13" unit="sbintime">4290821221</Duration>
- <Counter worker="14">945985</Counter>
- <Duration worker="14" unit="sbintime">4290821221</Duration>
- <Counter worker="15">946541</Counter>
- <Duration worker="15" unit="sbintime">4290819503</Duration>
- <Counter worker="16">946539</Counter>
- <Duration worker="16" unit="sbintime">4290819388</Duration>
- <Counter worker="17">5319165</Counter>
- <Duration worker="17" unit="sbintime">4290821221</Duration>
- </BinuptimeTest>
- <BinuptimeTest activeWorker="18">
- <Counter worker="1">957435</Counter>
- <Duration worker="1" unit="sbintime">4292140979</Duration>
- <Counter worker="2">959052</Counter>
- <Duration worker="2" unit="sbintime">4292138230</Duration>
- <Counter worker="3">959020</Counter>
- <Duration worker="3" unit="sbintime">4292138115</Duration>
- <Counter worker="4">959034</Counter>
- <Duration worker="4" unit="sbintime">4292138230</Duration>
- <Counter worker="5">959057</Counter>
- <Duration worker="5" unit="sbintime">4292137199</Duration>
- <Counter worker="6">959078</Counter>
- <Duration worker="6" unit="sbintime">4292136969</Duration>
- <Counter worker="7">959758</Counter>
- <Duration worker="7" unit="sbintime">4292139375</Duration>
- <Counter worker="8">959770</Counter>
- <Duration worker="8" unit="sbintime">4292139261</Duration>
- <Counter worker="9">959102</Counter>
- <Duration worker="9" unit="sbintime">4292136855</Duration>
- <Counter worker="10">959101</Counter>
- <Duration worker="10" unit="sbintime">4292141322</Duration>
- <Counter worker="11">957493</Counter>
- <Duration worker="11" unit="sbintime">4292141322</Duration>
- <Counter worker="12">957490</Counter>
- <Duration worker="12" unit="sbintime">4292136741</Duration>
- <Counter worker="13">960923</Counter>
- <Duration worker="13" unit="sbintime">4292141895</Duration>
- <Counter worker="14">960933</Counter>
- <Duration worker="14" unit="sbintime">4292139146</Duration>
- <Counter worker="15">958227</Counter>
- <Duration worker="15" unit="sbintime">4292139032</Duration>
- <Counter worker="16">958201</Counter>
- <Duration worker="16" unit="sbintime">4292134565</Duration>
- <Counter worker="17">3833107</Counter>
- <Duration worker="17" unit="sbintime">4292138229</Duration>
- <Counter worker="18">3833100</Counter>
- <Duration worker="18" unit="sbintime">4292137085</Duration>
- </BinuptimeTest>
- <BinuptimeTest activeWorker="19">
- <Counter worker="1">959131</Counter>
- <Duration worker="1" unit="sbintime">4295003603</Duration>
- <Counter worker="2">960752</Counter>
- <Duration worker="2" unit="sbintime">4295005321</Duration>
- <Counter worker="3">958958</Counter>
- <Duration worker="3" unit="sbintime">4295009444</Duration>
- <Counter worker="4">958960</Counter>
- <Duration worker="4" unit="sbintime">4295001312</Duration>
- <Counter worker="5">960052</Counter>
- <Duration worker="5" unit="sbintime">4295001771</Duration>
- <Counter worker="6">960086</Counter>
- <Duration worker="6" unit="sbintime">4295001885</Duration>
- <Counter worker="7">960031</Counter>
- <Duration worker="7" unit="sbintime">4295003603</Duration>
- <Counter worker="8">960043</Counter>
- <Duration worker="8" unit="sbintime">4294999021</Duration>
- <Counter worker="9">961650</Counter>
- <Duration worker="9" unit="sbintime">4295005435</Duration>
- <Counter worker="10">961687</Counter>
- <Duration worker="10" unit="sbintime">4295001885</Duration>
- <Counter worker="11">960613</Counter>
- <Duration worker="11" unit="sbintime">4295011276</Duration>
- <Counter worker="12">960593</Counter>
- <Duration worker="12" unit="sbintime">4295000854</Duration>
- <Counter worker="13">959538</Counter>
- <Duration worker="13" unit="sbintime">4295001427</Duration>
- <Counter worker="14">959574</Counter>
- <Duration worker="14" unit="sbintime">4295001427</Duration>
- <Counter worker="15">956810</Counter>
- <Duration worker="15" unit="sbintime">4295003717</Duration>
- <Counter worker="16">956818</Counter>
- <Duration worker="16" unit="sbintime">4295003603</Duration>
- <Counter worker="17">2557866</Counter>
- <Duration worker="17" unit="sbintime">4295002687</Duration>
- <Counter worker="18">2557901</Counter>
- <Duration worker="18" unit="sbintime">4295000969</Duration>
- <Counter worker="19">2557791</Counter>
- <Duration worker="19" unit="sbintime">4295000968</Duration>
- </BinuptimeTest>
- <BinuptimeTest activeWorker="20">
- <Counter worker="1">956818</Counter>
- <Duration worker="1" unit="sbintime">4290849167</Duration>
- <Counter worker="2">958477</Counter>
- <Duration worker="2" unit="sbintime">4290849052</Duration>
- <Counter worker="3">959502</Counter>
- <Duration worker="3" unit="sbintime">4290848594</Duration>
- <Counter worker="4">959493</Counter>
- <Duration worker="4" unit="sbintime">4290848594</Duration>
- <Counter worker="5">959067</Counter>
- <Duration worker="5" unit="sbintime">4290848021</Duration>
- <Counter worker="6">959118</Counter>
- <Duration worker="6" unit="sbintime">4290848021</Duration>
- <Counter worker="7">958349</Counter>
- <Duration worker="7" unit="sbintime">4290853175</Duration>
- <Counter worker="8">958323</Counter>
- <Duration worker="8" unit="sbintime">4290846303</Duration>
- <Counter worker="9">957048</Counter>
- <Duration worker="9" unit="sbintime">4290847563</Duration>
- <Counter worker="10">957074</Counter>
- <Duration worker="10" unit="sbintime">4290847678</Duration>
- <Counter worker="11">960084</Counter>
- <Duration worker="11" unit="sbintime">4290846418</Duration>
- <Counter worker="12">960074</Counter>
- <Duration worker="12" unit="sbintime">4290846418</Duration>
- <Counter worker="13">959020</Counter>
- <Duration worker="13" unit="sbintime">4290845846</Duration>
- <Counter worker="14">959039</Counter>
- <Duration worker="14" unit="sbintime">4290850426</Duration>
- <Counter worker="15">958126</Counter>
- <Duration worker="15" unit="sbintime">4290845960</Duration>
- <Counter worker="16">958095</Counter>
- <Duration worker="16" unit="sbintime">4290845845</Duration>
- <Counter worker="17">1916573</Counter>
- <Duration worker="17" unit="sbintime">4290848136</Duration>
- <Counter worker="18">1916534</Counter>
- <Duration worker="18" unit="sbintime">4290845845</Duration>
- <Counter worker="19">1916572</Counter>
- <Duration worker="19" unit="sbintime">4290848136</Duration>
- <Counter worker="20">1916533</Counter>
- <Duration worker="20" unit="sbintime">4290845845</Duration>
- </BinuptimeTest>
- <BinuptimeTest activeWorker="21">
- <Counter worker="1">958421</Counter>
- <Duration worker="1" unit="sbintime">4294761939</Duration>
- <Counter worker="2">960077</Counter>
- <Duration worker="2" unit="sbintime">4294760221</Duration>
- <Counter worker="3">959148</Counter>
- <Duration worker="3" unit="sbintime">4294754953</Duration>
- <Counter worker="4">959141</Counter>
- <Duration worker="4" unit="sbintime">4294759649</Duration>
- <Counter worker="5">959688</Counter>
- <Duration worker="5" unit="sbintime">4294754494</Duration>
- <Counter worker="6">959736</Counter>
- <Duration worker="6" unit="sbintime">4294759076</Duration>
- <Counter worker="7">960425</Counter>
- <Duration worker="7" unit="sbintime">4294760221</Duration>
- <Counter worker="8">960396</Counter>
- <Duration worker="8" unit="sbintime">4294755755</Duration>
- <Counter worker="9">958447</Counter>
- <Duration worker="9" unit="sbintime">4294756213</Duration>
- <Counter worker="10">958469</Counter>
- <Duration worker="10" unit="sbintime">4294756327</Duration>
- <Counter worker="11">960168</Counter>
- <Duration worker="11" unit="sbintime">4294759076</Duration>
- <Counter worker="12">960140</Counter>
- <Duration worker="12" unit="sbintime">4294754495</Duration>
- <Counter worker="13">961301</Counter>
- <Duration worker="13" unit="sbintime">4294767323</Duration>
- <Counter worker="14">961331</Counter>
- <Duration worker="14" unit="sbintime">4294756785</Duration>
- <Counter worker="15">958210</Counter>
- <Duration worker="15" unit="sbintime">4294757358</Duration>
- <Counter worker="16">958203</Counter>
- <Duration worker="16" unit="sbintime">4294757358</Duration>
- <Counter worker="17">1439060</Counter>
- <Duration worker="17" unit="sbintime">4294757931</Duration>
- <Counter worker="18">1439023</Counter>
- <Duration worker="18" unit="sbintime">4294758159</Duration>
- <Counter worker="19">1439103</Counter>
- <Duration worker="19" unit="sbintime">4294758045</Duration>
- <Counter worker="20">1439064</Counter>
- <Duration worker="20" unit="sbintime">4294757930</Duration>
- <Counter worker="21">1918367</Counter>
- <Duration worker="21" unit="sbintime">4294758045</Duration>
- </BinuptimeTest>
- <BinuptimeTest activeWorker="22">
- <Counter worker="1">958582</Counter>
- <Duration worker="1" unit="sbintime">4291633485</Duration>
- <Counter worker="2">960264</Counter>
- <Duration worker="2" unit="sbintime">4291633599</Duration>
- <Counter worker="3">958919</Counter>
- <Duration worker="3" unit="sbintime">4291636921</Duration>
- <Counter worker="4">958961</Counter>
- <Duration worker="4" unit="sbintime">4291632912</Duration>
- <Counter worker="5">958913</Counter>
- <Duration worker="5" unit="sbintime">4291634631</Duration>
- <Counter worker="6">958982</Counter>
- <Duration worker="6" unit="sbintime">4291634630</Duration>
- <Counter worker="7">957838</Counter>
- <Duration worker="7" unit="sbintime">4291633027</Duration>
- <Counter worker="8">957849</Counter>
- <Duration worker="8" unit="sbintime">4291632912</Duration>
- <Counter worker="9">958935</Counter>
- <Duration worker="9" unit="sbintime">4291632340</Duration>
- <Counter worker="10">958978</Counter>
- <Duration worker="10" unit="sbintime">4291632455</Duration>
- <Counter worker="11">958040</Counter>
- <Duration worker="11" unit="sbintime">4291631194</Duration>
- <Counter worker="12">958060</Counter>
- <Duration worker="12" unit="sbintime">4291635203</Duration>
- <Counter worker="13">958031</Counter>
- <Duration worker="13" unit="sbintime">4291634745</Duration>
- <Counter worker="14">958035</Counter>
- <Duration worker="14" unit="sbintime">4291630163</Duration>
- <Counter worker="15">959809</Counter>
- <Duration worker="15" unit="sbintime">4291635776</Duration>
- <Counter worker="16">959833</Counter>
- <Duration worker="16" unit="sbintime">4291631309</Duration>
- <Counter worker="17">1278240</Counter>
- <Duration worker="17" unit="sbintime">4291631194</Duration>
- <Counter worker="18">1278239</Counter>
- <Duration worker="18" unit="sbintime">4291634745</Duration>
- <Counter worker="19">1278855</Counter>
- <Duration worker="19" unit="sbintime">4291629591</Duration>
- <Counter worker="20">1278855</Counter>
- <Duration worker="20" unit="sbintime">4291632913</Duration>
- <Counter worker="21">1277332</Counter>
- <Duration worker="21" unit="sbintime">4291632912</Duration>
- <Counter worker="22">1277327</Counter>
- <Duration worker="22" unit="sbintime">4291635891</Duration>
- </BinuptimeTest>
- <BinuptimeTest activeWorker="23">
- <Counter worker="1">958870</Counter>
- <Duration worker="1" unit="sbintime">4294362908</Duration>
- <Counter worker="2">960652</Counter>
- <Duration worker="2" unit="sbintime">4294358327</Duration>
- <Counter worker="3">957192</Counter>
- <Duration worker="3" unit="sbintime">4294358327</Duration>
- <Counter worker="4">957194</Counter>
- <Duration worker="4" unit="sbintime">4294362793</Duration>
- <Counter worker="5">960437</Counter>
- <Duration worker="5" unit="sbintime">4294358900</Duration>
- <Counter worker="6">960480</Counter>
- <Duration worker="6" unit="sbintime">4294359014</Duration>
- <Counter worker="7">958820</Counter>
- <Duration worker="7" unit="sbintime">4294362908</Duration>
- <Counter worker="8">958835</Counter>
- <Duration worker="8" unit="sbintime">4294360045</Duration>
- <Counter worker="9">956488</Counter>
- <Duration worker="9" unit="sbintime">4294360617</Duration>
- <Counter worker="10">956549</Counter>
- <Duration worker="10" unit="sbintime">4294356151</Duration>
- <Counter worker="11">961870</Counter>
- <Duration worker="11" unit="sbintime">4294356151</Duration>
- <Counter worker="12">961835</Counter>
- <Duration worker="12" unit="sbintime">4294360732</Duration>
- <Counter worker="13">961302</Counter>
- <Duration worker="13" unit="sbintime">4294361191</Duration>
- <Counter worker="14">961345</Counter>
- <Duration worker="14" unit="sbintime">4294356724</Duration>
- <Counter worker="15">956489</Counter>
- <Duration worker="15" unit="sbintime">4294360045</Duration>
- <Counter worker="16">956506</Counter>
- <Duration worker="16" unit="sbintime">4294360160</Duration>
- <Counter worker="17">1021387</Counter>
- <Duration worker="17" unit="sbintime">4294356952</Duration>
- <Counter worker="18">1021417</Counter>
- <Duration worker="18" unit="sbintime">4294360961</Duration>
- <Counter worker="19">1021929</Counter>
- <Duration worker="19" unit="sbintime">4294359243</Duration>
- <Counter worker="20">1021926</Counter>
- <Duration worker="20" unit="sbintime">4294359930</Duration>
- <Counter worker="21">1024098</Counter>
- <Duration worker="21" unit="sbintime">4294358327</Duration>
- <Counter worker="22">1024083</Counter>
- <Duration worker="22" unit="sbintime">4294358098</Duration>
- <Counter worker="23">1537525</Counter>
- <Duration worker="23" unit="sbintime">4294361076</Duration>
- </BinuptimeTest>
- <BinuptimeTest activeWorker="24">
- <Counter worker="1">958462</Counter>
- <Duration worker="1" unit="sbintime">4294344239</Duration>
- <Counter worker="2">960113</Counter>
- <Duration worker="2" unit="sbintime">4294339773</Duration>
- <Counter worker="3">959461</Counter>
- <Duration worker="3" unit="sbintime">4294341949</Duration>
- <Counter worker="4">959473</Counter>
- <Duration worker="4" unit="sbintime">4294344812</Duration>
- <Counter worker="5">958912</Counter>
- <Duration worker="5" unit="sbintime">4294341490</Duration>
- <Counter worker="6">958938</Counter>
- <Duration worker="6" unit="sbintime">4294341376</Duration>
- <Counter worker="7">958935</Counter>
- <Duration worker="7" unit="sbintime">4294340230</Duration>
- <Counter worker="8">958921</Counter>
- <Duration worker="8" unit="sbintime">4294340345</Duration>
- <Counter worker="9">959876</Counter>
- <Duration worker="9" unit="sbintime">4294341491</Duration>
- <Counter worker="10">959892</Counter>
- <Duration worker="10" unit="sbintime">4294337138</Duration>
- <Counter worker="11">959045</Counter>
- <Duration worker="11" unit="sbintime">4294338284</Duration>
- <Counter worker="12">959020</Counter>
- <Duration worker="12" unit="sbintime">4294342636</Duration>
- <Counter worker="13">961635</Counter>
- <Duration worker="13" unit="sbintime">4294341033</Duration>
- <Counter worker="14">961646</Counter>
- <Duration worker="14" unit="sbintime">4294343782</Duration>
- <Counter worker="15">956010</Counter>
- <Duration worker="15" unit="sbintime">4294338856</Duration>
- <Counter worker="16">956016</Counter>
- <Duration worker="16" unit="sbintime">4294343208</Duration>
- <Counter worker="17">960207</Counter>
- <Duration worker="17" unit="sbintime">4294339887</Duration>
- <Counter worker="18">960171</Counter>
- <Duration worker="18" unit="sbintime">4294339772</Duration>
- <Counter worker="19">960089</Counter>
- <Duration worker="19" unit="sbintime">4294340346</Duration>
- <Counter worker="20">960077</Counter>
- <Duration worker="20" unit="sbintime">4294340346</Duration>
- <Counter worker="21">957194</Counter>
- <Duration worker="21" unit="sbintime">4294339315</Duration>
- <Counter worker="22">957184</Counter>
- <Duration worker="22" unit="sbintime">4294339200</Duration>
- <Counter worker="23">959119</Counter>
- <Duration worker="23" unit="sbintime">4294344812</Duration>
- <Counter worker="24">959094</Counter>
- <Duration worker="24" unit="sbintime">4294341948</Duration>
- </BinuptimeTest>
- <BinuptimeNullTest activeWorker="1">
- <Counter worker="1">19386783</Counter>
- </BinuptimeNullTest>
- <BinuptimeNullTest activeWorker="2">
- <Counter worker="1">18966996</Counter>
- <Counter worker="2">18976413</Counter>
- </BinuptimeNullTest>
- <BinuptimeNullTest activeWorker="3">
- <Counter worker="1">18974430</Counter>
- <Counter worker="2">18983328</Counter>
- <Counter worker="3">19416623</Counter>
- </BinuptimeNullTest>
- <BinuptimeNullTest activeWorker="4">
- <Counter worker="1">19008674</Counter>
- <Counter worker="2">19018198</Counter>
- <Counter worker="3">19008964</Counter>
- <Counter worker="4">19008692</Counter>
- </BinuptimeNullTest>
- <BinuptimeNullTest activeWorker="5">
- <Counter worker="1">19020812</Counter>
- <Counter worker="2">19030365</Counter>
- <Counter worker="3">19005570</Counter>
- <Counter worker="4">19005064</Counter>
- <Counter worker="5">19403356</Counter>
- </BinuptimeNullTest>
- <BinuptimeNullTest activeWorker="6">
- <Counter worker="1">19022252</Counter>
- <Counter worker="2">19032184</Counter>
- <Counter worker="3">18989113</Counter>
- <Counter worker="4">18988868</Counter>
- <Counter worker="5">19032006</Counter>
- <Counter worker="6">19033563</Counter>
- </BinuptimeNullTest>
- <BinuptimeNullTest activeWorker="7">
- <Counter worker="1">19030040</Counter>
- <Counter worker="2">19040103</Counter>
- <Counter worker="3">19027768</Counter>
- <Counter worker="4">19027395</Counter>
- <Counter worker="5">19032442</Counter>
- <Counter worker="6">19034065</Counter>
- <Counter worker="7">19412449</Counter>
- </BinuptimeNullTest>
- <BinuptimeNullTest activeWorker="8">
- <Counter worker="1">19025699</Counter>
- <Counter worker="2">19035838</Counter>
- <Counter worker="3">19004615</Counter>
- <Counter worker="4">19004706</Counter>
- <Counter worker="5">19030244</Counter>
- <Counter worker="6">19032199</Counter>
- <Counter worker="7">19024756</Counter>
- <Counter worker="8">19023713</Counter>
- </BinuptimeNullTest>
- <BinuptimeNullTest activeWorker="9">
- <Counter worker="1">19013669</Counter>
- <Counter worker="2">19023620</Counter>
- <Counter worker="3">19002201</Counter>
- <Counter worker="4">19002347</Counter>
- <Counter worker="5">19045897</Counter>
- <Counter worker="6">19048005</Counter>
- <Counter worker="7">19008510</Counter>
- <Counter worker="8">19007710</Counter>
- <Counter worker="9">19395234</Counter>
- </BinuptimeNullTest>
- <BinuptimeNullTest activeWorker="10">
- <Counter worker="1">19027122</Counter>
- <Counter worker="2">19037161</Counter>
- <Counter worker="3">19009823</Counter>
- <Counter worker="4">19010172</Counter>
- <Counter worker="5">19038718</Counter>
- <Counter worker="6">19040747</Counter>
- <Counter worker="7">19031970</Counter>
- <Counter worker="8">19031243</Counter>
- <Counter worker="9">19073032</Counter>
- <Counter worker="10">19074455</Counter>
- </BinuptimeNullTest>
- <BinuptimeNullTest activeWorker="11">
- <Counter worker="1">19028856</Counter>
- <Counter worker="2">19038950</Counter>
- <Counter worker="3">19011087</Counter>
- <Counter worker="4">19010918</Counter>
- <Counter worker="5">19042804</Counter>
- <Counter worker="6">19044814</Counter>
- <Counter worker="7">19009000</Counter>
- <Counter worker="8">19008045</Counter>
- <Counter worker="9">19062056</Counter>
- <Counter worker="10">19063324</Counter>
- <Counter worker="11">19425237</Counter>
- </BinuptimeNullTest>
- <BinuptimeNullTest activeWorker="12">
- <Counter worker="1">19000686</Counter>
- <Counter worker="2">19010524</Counter>
- <Counter worker="3">19011200</Counter>
- <Counter worker="4">19011161</Counter>
- <Counter worker="5">19040651</Counter>
- <Counter worker="6">19042336</Counter>
- <Counter worker="7">19008991</Counter>
- <Counter worker="8">19008322</Counter>
- <Counter worker="9">19057966</Counter>
- <Counter worker="10">19059942</Counter>
- <Counter worker="11">19025294</Counter>
- <Counter worker="12">19024237</Counter>
- </BinuptimeNullTest>
- <BinuptimeNullTest activeWorker="13">
- <Counter worker="1">19035788</Counter>
- <Counter worker="2">19045670</Counter>
- <Counter worker="3">19019672</Counter>
- <Counter worker="4">19019535</Counter>
- <Counter worker="5">19057435</Counter>
- <Counter worker="6">19059507</Counter>
- <Counter worker="7">19015462</Counter>
- <Counter worker="8">19015005</Counter>
- <Counter worker="9">19075133</Counter>
- <Counter worker="10">19076837</Counter>
- <Counter worker="11">19015711</Counter>
- <Counter worker="12">19014041</Counter>
- <Counter worker="13">19397278</Counter>
- </BinuptimeNullTest>
- <BinuptimeNullTest activeWorker="14">
- <Counter worker="1">19042430</Counter>
- <Counter worker="2">19052163</Counter>
- <Counter worker="3">18991353</Counter>
- <Counter worker="4">18991104</Counter>
- <Counter worker="5">19055723</Counter>
- <Counter worker="6">19057975</Counter>
- <Counter worker="7">19037925</Counter>
- <Counter worker="8">19037320</Counter>
- <Counter worker="9">19093382</Counter>
- <Counter worker="10">19095573</Counter>
- <Counter worker="11">19013959</Counter>
- <Counter worker="12">19012664</Counter>
- <Counter worker="13">19047902</Counter>
- <Counter worker="14">19049501</Counter>
- </BinuptimeNullTest>
- <BinuptimeNullTest activeWorker="15">
- <Counter worker="1">19031341</Counter>
- <Counter worker="2">19041295</Counter>
- <Counter worker="3">19021603</Counter>
- <Counter worker="4">19021349</Counter>
- <Counter worker="5">19070154</Counter>
- <Counter worker="6">19072132</Counter>
- <Counter worker="7">19012455</Counter>
- <Counter worker="8">19011763</Counter>
- <Counter worker="9">19078313</Counter>
- <Counter worker="10">19081070</Counter>
- <Counter worker="11">19007359</Counter>
- <Counter worker="12">19006010</Counter>
- <Counter worker="13">19079061</Counter>
- <Counter worker="14">19080701</Counter>
- <Counter worker="15">19419748</Counter>
- </BinuptimeNullTest>
- <BinuptimeNullTest activeWorker="16">
- <Counter worker="1">19026392</Counter>
- <Counter worker="2">19036011</Counter>
- <Counter worker="3">19020535</Counter>
- <Counter worker="4">19020505</Counter>
- <Counter worker="5">19027761</Counter>
- <Counter worker="6">19029769</Counter>
- <Counter worker="7">19007387</Counter>
- <Counter worker="8">19006701</Counter>
- <Counter worker="9">19079449</Counter>
- <Counter worker="10">19081866</Counter>
- <Counter worker="11">19016942</Counter>
- <Counter worker="12">19015669</Counter>
- <Counter worker="13">19053837</Counter>
- <Counter worker="14">19056122</Counter>
- <Counter worker="15">19017232</Counter>
- <Counter worker="16">19015864</Counter>
- </BinuptimeNullTest>
- <BinuptimeNullTest activeWorker="17">
- <Counter worker="1">19024720</Counter>
- <Counter worker="2">19034397</Counter>
- <Counter worker="3">19010358</Counter>
- <Counter worker="4">19009952</Counter>
- <Counter worker="5">19045360</Counter>
- <Counter worker="6">19047250</Counter>
- <Counter worker="7">19015505</Counter>
- <Counter worker="8">19014894</Counter>
- <Counter worker="9">19067467</Counter>
- <Counter worker="10">19069766</Counter>
- <Counter worker="11">19001455</Counter>
- <Counter worker="12">19000148</Counter>
- <Counter worker="13">19062397</Counter>
- <Counter worker="14">19064161</Counter>
- <Counter worker="15">18988213</Counter>
- <Counter worker="16">18986839</Counter>
- <Counter worker="17">19392710</Counter>
- </BinuptimeNullTest>
- <BinuptimeNullTest activeWorker="18">
- <Counter worker="1">19014459</Counter>
- <Counter worker="2">19024385</Counter>
- <Counter worker="3">19004536</Counter>
- <Counter worker="4">19004360</Counter>
- <Counter worker="5">19059651</Counter>
- <Counter worker="6">19061446</Counter>
- <Counter worker="7">18995175</Counter>
- <Counter worker="8">18994526</Counter>
- <Counter worker="9">19069645</Counter>
- <Counter worker="10">19072049</Counter>
- <Counter worker="11">19020094</Counter>
- <Counter worker="12">19018465</Counter>
- <Counter worker="13">19084049</Counter>
- <Counter worker="14">19085700</Counter>
- <Counter worker="15">19010799</Counter>
- <Counter worker="16">19009469</Counter>
- <Counter worker="17">19062621</Counter>
- <Counter worker="18">19062665</Counter>
- </BinuptimeNullTest>
- <BinuptimeNullTest activeWorker="19">
- <Counter worker="1">19027369</Counter>
- <Counter worker="2">19037193</Counter>
- <Counter worker="3">19017667</Counter>
- <Counter worker="4">19017624</Counter>
- <Counter worker="5">19025425</Counter>
- <Counter worker="6">19027799</Counter>
- <Counter worker="7">19017922</Counter>
- <Counter worker="8">19017381</Counter>
- <Counter worker="9">19029266</Counter>
- <Counter worker="10">19031825</Counter>
- <Counter worker="11">19025025</Counter>
- <Counter worker="12">19023564</Counter>
- <Counter worker="13">19057381</Counter>
- <Counter worker="14">19059412</Counter>
- <Counter worker="15">19025461</Counter>
- <Counter worker="16">19023734</Counter>
- <Counter worker="17">19049991</Counter>
- <Counter worker="18">19051542</Counter>
- <Counter worker="19">19418712</Counter>
- </BinuptimeNullTest>
- <BinuptimeNullTest activeWorker="20">
- <Counter worker="1">19042934</Counter>
- <Counter worker="2">19052696</Counter>
- <Counter worker="3">19038771</Counter>
- <Counter worker="4">19038516</Counter>
- <Counter worker="5">19033526</Counter>
- <Counter worker="6">19035338</Counter>
- <Counter worker="7">19043236</Counter>
- <Counter worker="8">19042713</Counter>
- <Counter worker="9">19086859</Counter>
- <Counter worker="10">19089153</Counter>
- <Counter worker="11">19022766</Counter>
- <Counter worker="12">19021740</Counter>
- <Counter worker="13">19061402</Counter>
- <Counter worker="14">19063648</Counter>
- <Counter worker="15">19019723</Counter>
- <Counter worker="16">19018344</Counter>
- <Counter worker="17">19049944</Counter>
- <Counter worker="18">19051860</Counter>
- <Counter worker="19">19024515</Counter>
- <Counter worker="20">19024160</Counter>
- </BinuptimeNullTest>
- <BinuptimeNullTest activeWorker="21">
- <Counter worker="1">19024204</Counter>
- <Counter worker="2">19034080</Counter>
- <Counter worker="3">19000776</Counter>
- <Counter worker="4">19000755</Counter>
- <Counter worker="5">19051386</Counter>
- <Counter worker="6">19053223</Counter>
- <Counter worker="7">18986331</Counter>
- <Counter worker="8">18985787</Counter>
- <Counter worker="9">19090476</Counter>
- <Counter worker="10">19093070</Counter>
- <Counter worker="11">19014901</Counter>
- <Counter worker="12">19013812</Counter>
- <Counter worker="13">19076062</Counter>
- <Counter worker="14">19077825</Counter>
- <Counter worker="15">19009098</Counter>
- <Counter worker="16">19007749</Counter>
- <Counter worker="17">19068241</Counter>
- <Counter worker="18">19070586</Counter>
- <Counter worker="19">18985454</Counter>
- <Counter worker="20">18984893</Counter>
- <Counter worker="21">19400999</Counter>
- </BinuptimeNullTest>
- <BinuptimeNullTest activeWorker="22">
- <Counter worker="1">19031656</Counter>
- <Counter worker="2">19041556</Counter>
- <Counter worker="3">19002695</Counter>
- <Counter worker="4">19002754</Counter>
- <Counter worker="5">19077008</Counter>
- <Counter worker="6">19078695</Counter>
- <Counter worker="7">18989542</Counter>
- <Counter worker="8">18988653</Counter>
- <Counter worker="9">19044533</Counter>
- <Counter worker="10">19046959</Counter>
- <Counter worker="11">19004288</Counter>
- <Counter worker="12">19003156</Counter>
- <Counter worker="13">19062162</Counter>
- <Counter worker="14">19064009</Counter>
- <Counter worker="15">19034105</Counter>
- <Counter worker="16">19032889</Counter>
- <Counter worker="17">19067368</Counter>
- <Counter worker="18">19070169</Counter>
- <Counter worker="19">19008530</Counter>
- <Counter worker="20">19008397</Counter>
- <Counter worker="21">19037841</Counter>
- <Counter worker="22">19040158</Counter>
- </BinuptimeNullTest>
- <BinuptimeNullTest activeWorker="23">
- <Counter worker="1">19019317</Counter>
- <Counter worker="2">19029201</Counter>
- <Counter worker="3">19010298</Counter>
- <Counter worker="4">19010487</Counter>
- <Counter worker="5">19030794</Counter>
- <Counter worker="6">19032697</Counter>
- <Counter worker="7">19001815</Counter>
- <Counter worker="8">19001431</Counter>
- <Counter worker="9">19067361</Counter>
- <Counter worker="10">19069729</Counter>
- <Counter worker="11">19001399</Counter>
- <Counter worker="12">19000051</Counter>
- <Counter worker="13">19070247</Counter>
- <Counter worker="14">19072221</Counter>
- <Counter worker="15">19020770</Counter>
- <Counter worker="16">19019396</Counter>
- <Counter worker="17">19085756</Counter>
- <Counter worker="18">19088597</Counter>
- <Counter worker="19">19014748</Counter>
- <Counter worker="20">19014660</Counter>
- <Counter worker="21">19044229</Counter>
- <Counter worker="22">19046314</Counter>
- <Counter worker="23">19421247</Counter>
- </BinuptimeNullTest>
- <BinuptimeNullTest activeWorker="24">
- <Counter worker="1">19016838</Counter>
- <Counter worker="2">19026664</Counter>
- <Counter worker="3">18978854</Counter>
- <Counter worker="4">18978559</Counter>
- <Counter worker="5">19034822</Counter>
- <Counter worker="6">19036646</Counter>
- <Counter worker="7">19006174</Counter>
- <Counter worker="8">19005608</Counter>
- <Counter worker="9">19042579</Counter>
- <Counter worker="10">19044966</Counter>
- <Counter worker="11">19007697</Counter>
- <Counter worker="12">19006331</Counter>
- <Counter worker="13">19053232</Counter>
- <Counter worker="14">19054892</Counter>
- <Counter worker="15">18999211</Counter>
- <Counter worker="16">18997906</Counter>
- <Counter worker="17">19065292</Counter>
- <Counter worker="18">19067828</Counter>
- <Counter worker="19">19014259</Counter>
- <Counter worker="20">19013886</Counter>
- <Counter worker="21">19047296</Counter>
- <Counter worker="22">19048410</Counter>
- <Counter worker="23">19017171</Counter>
- <Counter worker="24">19016766</Counter>
- </BinuptimeNullTest>
-</SPTimecounter01>
+*** TEST VERSION: 6.0.0.105c3e541c26113503080c65006ad775d31fca3d
+*** TEST STATE: EXPECTED_PASS
+*** TEST BUILD: RTEMS_SMP
+*** TEST TOOLS: 13.2.0 20230727 (RTEMS 6, RSB d3d738c35a71ca05f675b188539225099401ac79, Newlib a021448)
+*** BEGIN OF JSON DATA ***
+[
+ {
+ "timecounter": "Clock Driver",
+ "counter": [
+ [523086],
+ [523088, 528231],
+ [523088, 528232, 528231],
+ [523088, 528215, 528215, 527992]
+ ]
+ }, {
+ "timecounter": "Null",
+ "counter": [
+ [528630],
+ [528662, 533818],
+ [528684, 533839, 533840],
+ [528664, 533821, 533821, 533582]
+ ]
+ }
+]
+*** END OF JSON DATA ***
+
*** END OF TEST SPTIMECOUNTER 2 ***
+
+cpu 0 in error mode (tt = 0x80)
+ 400337050 00009120: 91d02000 ta 0x0
diff --git a/testsuites/sptests/sptimecounter03/init.c b/testsuites/sptests/sptimecounter03/init.c
index dfcd9a0219..d1a9d58886 100644
--- a/testsuites/sptests/sptimecounter03/init.c
+++ b/testsuites/sptests/sptimecounter03/init.c
@@ -1,7 +1,7 @@
/* SPDX-License-Identifier: BSD-2-Clause */
/*
- * Copyright (c) 2015 embedded brains GmbH. All rights reserved.
+ * Copyright (c) 2015 embedded brains GmbH & Co. KG
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
@@ -41,7 +41,7 @@ const char rtems_test_name[] = "SPTIMECOUNTER 3";
#define CPU_COUNT 32
-static rtems_test_parallel_context ctx;;
+static rtems_test_parallel_context ctx;
static rtems_interval test_binuptime_init(
rtems_test_parallel_context *ctx,
diff --git a/testsuites/sptests/sptimecounter04/init.c b/testsuites/sptests/sptimecounter04/init.c
index 4d903e75f8..2a8910b980 100644
--- a/testsuites/sptests/sptimecounter04/init.c
+++ b/testsuites/sptests/sptimecounter04/init.c
@@ -1,7 +1,7 @@
/* SPDX-License-Identifier: BSD-2-Clause */
/*
- * Copyright (c) 2017 embedded brains GmbH. All rights reserved.
+ * Copyright (c) 2017 embedded brains GmbH & Co. KG
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
diff --git a/testsuites/sptests/sptimerserver01/init.c b/testsuites/sptests/sptimerserver01/init.c
index 1121886bc7..b921806424 100644
--- a/testsuites/sptests/sptimerserver01/init.c
+++ b/testsuites/sptests/sptimerserver01/init.c
@@ -1,7 +1,7 @@
/* SPDX-License-Identifier: BSD-2-Clause */
/*
- * Copyright (c) 2016 embedded brains GmbH. All rights reserved.
+ * Copyright (c) 2016 embedded brains GmbH & Co. KG
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
diff --git a/testsuites/sptests/sptls01/init.c b/testsuites/sptests/sptls01/init.c
index 5b5d274d3c..d6beeedf90 100644
--- a/testsuites/sptests/sptls01/init.c
+++ b/testsuites/sptests/sptls01/init.c
@@ -1,7 +1,7 @@
/* SPDX-License-Identifier: BSD-2-Clause */
/*
- * Copyright (c) 2014 embedded brains GmbH. All rights reserved.
+ * Copyright (C) 2014, 2022 embedded brains GmbH & Co. KG
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
@@ -29,7 +29,12 @@
#include "config.h"
#endif
-#include <stdio.h>
+#include <rtems/bspIo.h>
+#include <rtems/stackchk.h>
+#include <rtems/sysinit.h>
+#include <rtems/score/cpuimpl.h>
+#include <rtems/score/threadimpl.h>
+#include <rtems/score/tls.h>
#include "tmacros.h"
@@ -45,7 +50,7 @@ static const volatile uint32_t read_only_small = 0x601dc0feUL;
static void check_tls_item(uint32_t expected)
{
- printf("TLS item = %i\n", tls_item);
+ printk("TLS item = %i\n", tls_item);
rtems_test_assert(tls_item == expected);
}
@@ -54,6 +59,7 @@ static void task(rtems_task_argument arg)
rtems_status_code sc;
check_tls_item(123);
+ tls_item = 42;
sc = rtems_event_transient_send(master_task);
rtems_test_assert(sc == RTEMS_SUCCESSFUL);
@@ -62,10 +68,47 @@ static void task(rtems_task_argument arg)
rtems_test_assert(sc == RTEMS_SUCCESSFUL);
}
+static void check_tls_size(void)
+{
+ const volatile TLS_Configuration *config;
+ uintptr_t tls_size;
+
+ config = &_TLS_Configuration;
+ tls_size = (uintptr_t) config->size;
+
+ if (tls_size != 1) {
+ printk(
+ "WARNING: The thread-local storage size is %" PRIuPTR ". It should be\n"
+ "exactly one for this test. Check the BSP implementation. The BSP\n"
+ "should not pull in thread-local storage objects such as errno for\n"
+ "this test.\n",
+ tls_size
+ );
+ rtems_test_assert(tls_size == 1);
+ }
+}
+
+static Thread_Control *get_thread(rtems_id id)
+{
+ Thread_Control *the_thread;
+ ISR_lock_Context lock_context;
+
+ the_thread = _Thread_Get(id, &lock_context);
+ _ISR_lock_ISR_enable(&lock_context);
+ return the_thread;
+}
+
static void test(void)
{
rtems_id id;
rtems_status_code sc;
+ Thread_Control *self;
+ Thread_Control *other;
+ char *self_tp;
+ char *other_tp;
+ uintptr_t tls_item_offset;
+ char *self_tls_item;
+ char *other_tls_item;
master_task = rtems_task_self();
@@ -88,28 +131,69 @@ static void test(void)
sc = rtems_task_start(id, task, 0);
rtems_test_assert(sc == RTEMS_SUCCESSFUL);
+ self = get_thread(master_task);
+ other = get_thread(id);
+ self_tp = _CPU_Get_TLS_thread_pointer(&self->Registers);
+ other_tp = _CPU_Get_TLS_thread_pointer(&other->Registers);
+ tls_item_offset = (uintptr_t) (&tls_item - self_tp);
+ self_tls_item = self_tp + tls_item_offset;
+ other_tls_item = other_tp + tls_item_offset;
+ rtems_test_assert(*self_tls_item == 5);
+ rtems_test_assert(*other_tls_item == 123);
+
sc = rtems_event_transient_receive(RTEMS_WAIT, RTEMS_NO_TIMEOUT);
rtems_test_assert(sc == RTEMS_SUCCESSFUL);
+ rtems_test_assert(*self_tls_item == 5);
+ rtems_test_assert(*other_tls_item == 42);
+
sc = rtems_task_delete(id);
rtems_test_assert(sc == RTEMS_SUCCESSFUL);
check_tls_item(5);
}
-static void Init(rtems_task_argument arg)
+static void test_idle_during_system_init(void)
{
+ rtems_print_printer_printk(&rtems_test_printer);
TEST_BEGIN();
+ check_tls_item(123);
+}
+
+static void Init(rtems_task_argument arg)
+{
test();
+ rtems_test_assert(!rtems_stack_checker_is_blown());
+ check_tls_size();
TEST_END();
rtems_test_exit(0);
}
+RTEMS_SYSINIT_ITEM(
+ test_idle_during_system_init,
+ RTEMS_SYSINIT_IDLE_THREADS,
+ RTEMS_SYSINIT_ORDER_LAST
+);
+
#define CONFIGURE_APPLICATION_NEEDS_CLOCK_DRIVER
-#define CONFIGURE_APPLICATION_NEEDS_SIMPLE_CONSOLE_DRIVER
+
+/*
+ * Avoid a dependency on errno which might be a thread-local object. This test
+ * assumes that no thread-local storage object other than tls_item is present.
+ */
+#define CONFIGURE_APPLICATION_DISABLE_FILESYSTEM
+
+/*
+ * This test requires full control over the present thread-local objects. In
+ * certain Newlib configurations, the Newlib reentrancy support may add
+ * thread-local objects.
+ */
+#define CONFIGURE_DISABLE_NEWLIB_REENTRANCY
+
+#define CONFIGURE_STACK_CHECKER_ENABLED
#define CONFIGURE_MAXIMUM_TASKS 2
diff --git a/testsuites/sptests/sptls02/init.cc b/testsuites/sptests/sptls02/init.cc
index 712358f978..28ce872d76 100644
--- a/testsuites/sptests/sptls02/init.cc
+++ b/testsuites/sptests/sptls02/init.cc
@@ -1,7 +1,7 @@
/* SPDX-License-Identifier: BSD-2-Clause */
/*
- * Copyright (C) 2014, 2020 embedded brains GmbH (http://www.embedded-brains.de)
+ * Copyright (C) 2014, 2020 embedded brains GmbH & Co. KG
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
@@ -36,6 +36,7 @@
#include <rtems.h>
#include <rtems/libcsupport.h>
+#include <rtems/stackchk.h>
#include <tmacros.h>
@@ -47,7 +48,7 @@ alignas(256) static thread_local long a256 = 256;
static thread_local long i0;
-alignas(512) static thread_local long a512;
+alignas(RTEMS_MINIMUM_STACK_SIZE) static thread_local long a;
int seven()
{
@@ -60,7 +61,7 @@ static void clobber()
i123 = 0xdead0001;
a256 = 0xdead0002;
i0 = 0xdead0003;
- a512 = 0xdead0004;
+ a = 0xdead0004;
}
static long f456(bool clobber)
@@ -168,10 +169,14 @@ static void checkTLSValues()
rtems_test_assert(extern_int == 7);
rtems_test_assert(i123 == 123);
rtems_test_assert(a256 == 256);
- rtems_test_assert((a256 & 255) == 0);
+ uintptr_t addr = reinterpret_cast<uintptr_t>(&a256);
+ RTEMS_OBFUSCATE_VARIABLE(addr);
+ rtems_test_assert((addr % 256) == 0);
rtems_test_assert(i0 == 0);
- rtems_test_assert(a512 == 0);
- rtems_test_assert((a512 & 511) == 0);
+ rtems_test_assert(a == 0);
+ addr = reinterpret_cast<uintptr_t>(&a);
+ RTEMS_OBFUSCATE_VARIABLE(addr);
+ rtems_test_assert((addr % 512) == 0);
rtems_test_assert(f456(false) == 456);
rtems_test_assert(f0(false) == 0);
rtems_test_assert(C::c789() == 789);
@@ -288,6 +293,7 @@ extern "C" void Init(rtems_task_argument arg)
testWorkerTask();
rtems_test_assert(rtems_resource_snapshot_check(&snapshot));
+ rtems_test_assert(!rtems_stack_checker_is_blown());
TEST_END();
@@ -297,6 +303,8 @@ extern "C" void Init(rtems_task_argument arg)
#define CONFIGURE_APPLICATION_NEEDS_CLOCK_DRIVER
#define CONFIGURE_APPLICATION_NEEDS_SIMPLE_CONSOLE_DRIVER
+#define CONFIGURE_STACK_CHECKER_ENABLED
+
#define CONFIGURE_MAXIMUM_TASKS 2
#define CONFIGURE_MAXIMUM_SEMAPHORES 3
diff --git a/testsuites/sptests/sptls02/sptls02.h b/testsuites/sptests/sptls02/sptls02.h
index b89750915d..4d9dfd5489 100644
--- a/testsuites/sptests/sptls02/sptls02.h
+++ b/testsuites/sptests/sptls02/sptls02.h
@@ -1,7 +1,7 @@
/* SPDX-License-Identifier: BSD-2-Clause */
/*
- * Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+ * Copyright (C) 2020 embedded brains GmbH & Co. KG
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
diff --git a/testsuites/sptests/sptls02/var.cc b/testsuites/sptests/sptls02/var.cc
index ca885deb62..5f927d043b 100644
--- a/testsuites/sptests/sptls02/var.cc
+++ b/testsuites/sptests/sptls02/var.cc
@@ -1,7 +1,7 @@
/* SPDX-License-Identifier: BSD-2-Clause */
/*
- * Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+ * Copyright (C) 2020 embedded brains GmbH & Co. KG
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
diff --git a/testsuites/sptests/sptls03/init.c b/testsuites/sptests/sptls03/init.c
index 2b60828808..4d564c0f85 100644
--- a/testsuites/sptests/sptls03/init.c
+++ b/testsuites/sptests/sptls03/init.c
@@ -1,7 +1,7 @@
/* SPDX-License-Identifier: BSD-2-Clause */
/*
- * Copyright (c) 2014 embedded brains GmbH. All rights reserved.
+ * Copyright (c) 2014 embedded brains GmbH & Co. KG
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
@@ -29,6 +29,7 @@
#include "config.h"
#endif
+#include <rtems/stackchk.h>
#include <rtems/score/thread.h>
#include "tmacros.h"
@@ -55,6 +56,7 @@ static void Init(rtems_task_argument arg)
test();
+ rtems_test_assert(!rtems_stack_checker_is_blown());
TEST_END();
rtems_test_exit(0);
@@ -68,6 +70,15 @@ static void Init(rtems_task_argument arg)
*/
#define CONFIGURE_APPLICATION_DISABLE_FILESYSTEM
+/*
+ * This test requires full control over the present thread-local objects. In
+ * certain Newlib configurations, the Newlib reentrancy support may add
+ * thread-local objects.
+ */
+#define CONFIGURE_DISABLE_NEWLIB_REENTRANCY
+
+#define CONFIGURE_STACK_CHECKER_ENABLED
+
#define CONFIGURE_MAXIMUM_TASKS 1
#define CONFIGURE_INITIAL_EXTENSIONS RTEMS_TEST_INITIAL_EXTENSION
diff --git a/testsuites/sptests/sptls04/init.c b/testsuites/sptests/sptls04/init.c
index fad919f8ac..bbbe81b9d1 100644
--- a/testsuites/sptests/sptls04/init.c
+++ b/testsuites/sptests/sptls04/init.c
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2017 embedded brains GmbH. All rights reserved.
+ * Copyright (c) 2017 embedded brains GmbH & Co. KG
*
* The license and distribution terms for this file may be
* found in the file LICENSE in this distribution or at
@@ -9,7 +9,7 @@
/*
* This test program runs also on GNU/Linux and FreeBSD. Use
*
- * cc init.c && ./a.out
+ * cc init.c tls.c && ./a.out
*
* to run it.
*/
@@ -18,6 +18,8 @@
#include "config.h"
#endif
+#include "sptls04.h"
+
#ifdef __rtems__
#include <tmacros.h>
@@ -30,9 +32,9 @@
#endif /* __rtems__ */
-static __thread int i;
+static _Thread_local int i;
-static __thread int j;
+static _Thread_local int j;
static __attribute__((__constructor__)) void con(void)
{
@@ -43,6 +45,7 @@ static void test(void)
{
rtems_test_assert(i == 1);
rtems_test_assert(j == 0);
+ rtems_test_assert(k == 2);
}
#ifdef __rtems__
diff --git a/testsuites/sptests/sptls04/sptls04.h b/testsuites/sptests/sptls04/sptls04.h
new file mode 100644
index 0000000000..70e7f2a923
--- /dev/null
+++ b/testsuites/sptests/sptls04/sptls04.h
@@ -0,0 +1,41 @@
+/* SPDX-License-Identifier: BSD-2-Clause */
+
+/*
+ * Copyright (C) 2022 embedded brains GmbH & Co. KG
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#ifndef _SPTLS01_H
+#define _SPTLS01_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+extern _Thread_local int k;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* _SPTLS01_H */
diff --git a/testsuites/sptests/sptls04/tls.c b/testsuites/sptests/sptls04/tls.c
new file mode 100644
index 0000000000..ee473bca25
--- /dev/null
+++ b/testsuites/sptests/sptls04/tls.c
@@ -0,0 +1,34 @@
+/* SPDX-License-Identifier: BSD-2-Clause */
+
+/*
+ * Copyright (C) 2022 embedded brains GmbH & Co. KG
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#include "sptls04.h"
+
+_Thread_local int k = 2;
diff --git a/testsuites/sptests/spunlimited01/init.c b/testsuites/sptests/spunlimited01/init.c
new file mode 100644
index 0000000000..dc0496d441
--- /dev/null
+++ b/testsuites/sptests/spunlimited01/init.c
@@ -0,0 +1,125 @@
+/*
+ * SPDX-License-Identifier: BSD-2-Clause
+ *
+ * Copyright (C) 2022 embedded brains GmbH & Co. KG
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#include <rtems.h>
+#include <rtems/score/heapimpl.h>
+
+#include <string.h>
+
+#include <rtems/test.h>
+#include <rtems/test-info.h>
+
+const char rtems_test_name[] = "SPUNLIMITED 1";
+
+void __real__Workspace_Free( void * );
+void __wrap__Workspace_Free( void * );
+
+void __wrap__Workspace_Free( void *ptr )
+{
+ uintptr_t alloc_begin;
+ uintptr_t block_size;
+ uintptr_t block_end;
+ Heap_Block *block;
+
+ if ( ptr == NULL ) {
+ return;
+ }
+
+ alloc_begin = (uintptr_t) ptr;
+ block = _Heap_Block_of_alloc_area( alloc_begin, CPU_HEAP_ALIGNMENT );
+ block_size = _Heap_Block_size( block );
+ block_end = (uintptr_t) block + block_size;
+ memset( ptr, 0, block_end - alloc_begin );
+
+ __real__Workspace_Free( ptr );
+}
+
+static void delete_mutex( rtems_id id )
+{
+ rtems_status_code sc;
+
+ sc = rtems_semaphore_delete( id );
+ T_rsc_success( sc );
+}
+
+T_TEST_CASE( UnlimitedShrink )
+{
+ rtems_id ids[ 6 ];
+ size_t i;
+ rtems_status_code sc;
+
+ for ( i = 0; i < RTEMS_ARRAY_SIZE( ids ); ++i ) {
+ sc = rtems_semaphore_create(
+ rtems_build_name( 'M', 'U', 'T', 'X' ),
+ 1,
+ RTEMS_BINARY_SEMAPHORE,
+ 0,
+ &ids[ i ]
+ );
+ T_assert_rsc_success( sc );
+ }
+
+ sc = rtems_semaphore_obtain( ids[ 2 ], RTEMS_WAIT, RTEMS_NO_TIMEOUT );
+ T_rsc_success( sc );
+
+ delete_mutex( ids[ 5 ] );
+ delete_mutex( ids[ 4 ] );
+ delete_mutex( ids[ 3 ] );
+
+ sc = rtems_semaphore_release( ids[ 2 ] );
+ T_rsc_success( sc );
+
+ delete_mutex( ids[ 2 ] );
+ delete_mutex( ids[ 1 ] );
+ delete_mutex( ids[ 0 ] );
+}
+
+static rtems_task Init( rtems_task_argument argument )
+{
+ rtems_test_run( argument, TEST_STATE );
+}
+
+#define CONFIGURE_APPLICATION_NEEDS_SIMPLE_CONSOLE_DRIVER
+#define CONFIGURE_APPLICATION_DOES_NOT_NEED_CLOCK_DRIVER
+
+#define CONFIGURE_MAXIMUM_TASKS 1
+
+#define CONFIGURE_MAXIMUM_SEMAPHORES rtems_resource_unlimited( 2 )
+
+#define CONFIGURE_UNIFIED_WORK_AREAS
+
+#define CONFIGURE_INITIAL_EXTENSIONS RTEMS_TEST_INITIAL_EXTENSION
+
+#define CONFIGURE_RTEMS_INIT_TASKS_TABLE
+
+#define CONFIGURE_INIT
+
+#include <rtems/confdefs.h>
diff --git a/testsuites/sptests/spunlimited01/spunlimited01.doc b/testsuites/sptests/spunlimited01/spunlimited01.doc
new file mode 100644
index 0000000000..43d3ec1646
--- /dev/null
+++ b/testsuites/sptests/spunlimited01/spunlimited01.doc
@@ -0,0 +1,14 @@
+This file describes the directives and concepts tested by this test set.
+
+test set name: spunlimited01
+
+directives:
+
+ - _Objects_Activate_unlimited()
+ - _Objects_Free_unlimited()
+
+concepts:
+
+ - Create and delete objects with the unlimited objects support in a certain
+ order. Ensure that only blocks with free objects are reclaimed during a
+ shrink operation.
diff --git a/testsuites/support/include/tmacros.h b/testsuites/support/include/tmacros.h
index 0dc35ea21d..aa20411623 100644
--- a/testsuites/support/include/tmacros.h
+++ b/testsuites/support/include/tmacros.h
@@ -46,6 +46,7 @@
#include <string.h>
#include <rtems/error.h>
#include <rtems/test-info.h>
+#include <rtems/test-printer.h>
#include <rtems/score/threaddispatch.h>
#include <buffer_test_io.h>
diff --git a/testsuites/tmtests/tm01/system.h b/testsuites/tmtests/tm01/system.h
index 10f694482f..d5f60d3c83 100644
--- a/testsuites/tmtests/tm01/system.h
+++ b/testsuites/tmtests/tm01/system.h
@@ -50,7 +50,6 @@ rtems_id Task_id[ OPERATION_COUNT+1 ]; /* array of task ids */
#define CONFIGURE_MAXIMUM_TASKS 2
#define CONFIGURE_MAXIMUM_SEMAPHORES 1
-#define CONFIGURE_TICKS_PER_TIMESLICE 0
#define CONFIGURE_RTEMS_INIT_TASKS_TABLE
diff --git a/testsuites/tmtests/tm02/system.h b/testsuites/tmtests/tm02/system.h
index 0b2e4fb59a..66d3912f5a 100644
--- a/testsuites/tmtests/tm02/system.h
+++ b/testsuites/tmtests/tm02/system.h
@@ -47,7 +47,6 @@ rtems_task Init(
#define CONFIGURE_MAXIMUM_TASKS (3 + OPERATION_COUNT)
#define CONFIGURE_MAXIMUM_SEMAPHORES 1
-#define CONFIGURE_TICKS_PER_TIMESLICE 0
#define CONFIGURE_RTEMS_INIT_TASKS_TABLE
diff --git a/testsuites/tmtests/tm03/system.h b/testsuites/tmtests/tm03/system.h
index 0b2e4fb59a..66d3912f5a 100644
--- a/testsuites/tmtests/tm03/system.h
+++ b/testsuites/tmtests/tm03/system.h
@@ -47,7 +47,6 @@ rtems_task Init(
#define CONFIGURE_MAXIMUM_TASKS (3 + OPERATION_COUNT)
#define CONFIGURE_MAXIMUM_SEMAPHORES 1
-#define CONFIGURE_TICKS_PER_TIMESLICE 0
#define CONFIGURE_RTEMS_INIT_TASKS_TABLE
diff --git a/testsuites/tmtests/tm04/system.h b/testsuites/tmtests/tm04/system.h
index ecad2b492f..a330fde825 100644
--- a/testsuites/tmtests/tm04/system.h
+++ b/testsuites/tmtests/tm04/system.h
@@ -47,7 +47,6 @@ rtems_task Init(
#define CONFIGURE_MAXIMUM_TASKS (4 + OPERATION_COUNT)
#define CONFIGURE_MAXIMUM_SEMAPHORES 1
-#define CONFIGURE_TICKS_PER_TIMESLICE 0
#define CONFIGURE_RTEMS_INIT_TASKS_TABLE
diff --git a/testsuites/tmtests/tm05/system.h b/testsuites/tmtests/tm05/system.h
index f00b626c36..28263f3051 100644
--- a/testsuites/tmtests/tm05/system.h
+++ b/testsuites/tmtests/tm05/system.h
@@ -46,7 +46,6 @@ rtems_task Init(
#define CONFIGURE_APPLICATION_NEEDS_TIMER_DRIVER
#define CONFIGURE_MAXIMUM_TASKS (2 + OPERATION_COUNT)
-#define CONFIGURE_TICKS_PER_TIMESLICE 0
#define CONFIGURE_RTEMS_INIT_TASKS_TABLE
diff --git a/testsuites/tmtests/tm06/system.h b/testsuites/tmtests/tm06/system.h
index f00b626c36..28263f3051 100644
--- a/testsuites/tmtests/tm06/system.h
+++ b/testsuites/tmtests/tm06/system.h
@@ -46,7 +46,6 @@ rtems_task Init(
#define CONFIGURE_APPLICATION_NEEDS_TIMER_DRIVER
#define CONFIGURE_MAXIMUM_TASKS (2 + OPERATION_COUNT)
-#define CONFIGURE_TICKS_PER_TIMESLICE 0
#define CONFIGURE_RTEMS_INIT_TASKS_TABLE
diff --git a/testsuites/tmtests/tm07/system.h b/testsuites/tmtests/tm07/system.h
index f00b626c36..28263f3051 100644
--- a/testsuites/tmtests/tm07/system.h
+++ b/testsuites/tmtests/tm07/system.h
@@ -46,7 +46,6 @@ rtems_task Init(
#define CONFIGURE_APPLICATION_NEEDS_TIMER_DRIVER
#define CONFIGURE_MAXIMUM_TASKS (2 + OPERATION_COUNT)
-#define CONFIGURE_TICKS_PER_TIMESLICE 0
#define CONFIGURE_RTEMS_INIT_TASKS_TABLE
diff --git a/testsuites/tmtests/tm08/system.h b/testsuites/tmtests/tm08/system.h
index 253cdaba54..7d642bd0a8 100644
--- a/testsuites/tmtests/tm08/system.h
+++ b/testsuites/tmtests/tm08/system.h
@@ -46,7 +46,6 @@ rtems_task Init(
#define CONFIGURE_APPLICATION_NEEDS_TIMER_DRIVER
#define CONFIGURE_MAXIMUM_TASKS 3
-#define CONFIGURE_TICKS_PER_TIMESLICE 0
#define CONFIGURE_RTEMS_INIT_TASKS_TABLE
diff --git a/testsuites/tmtests/tm09/system.h b/testsuites/tmtests/tm09/system.h
index 3d12c68d07..da2da0b2ec 100644
--- a/testsuites/tmtests/tm09/system.h
+++ b/testsuites/tmtests/tm09/system.h
@@ -51,7 +51,6 @@ rtems_id Task_id[ OPERATION_COUNT+1 ]; /* array of task ids */
#define CONFIGURE_MAXIMUM_TASKS 2
#define CONFIGURE_MAXIMUM_MESSAGE_QUEUES 1
-#define CONFIGURE_TICKS_PER_TIMESLICE 0
#define CONFIGURE_MESSAGE_BUFFER_MEMORY \
CONFIGURE_MESSAGE_BUFFERS_FOR_QUEUE(OPERATION_COUNT, MESSAGE_SIZE)
diff --git a/testsuites/tmtests/tm10/system.h b/testsuites/tmtests/tm10/system.h
index ed5e9a12bb..e4c296f625 100644
--- a/testsuites/tmtests/tm10/system.h
+++ b/testsuites/tmtests/tm10/system.h
@@ -47,7 +47,6 @@ rtems_task Init(
#define CONFIGURE_MAXIMUM_TASKS (2 + OPERATION_COUNT)
#define CONFIGURE_MAXIMUM_MESSAGE_QUEUES 1
-#define CONFIGURE_TICKS_PER_TIMESLICE 0
#define CONFIGURE_MESSAGE_BUFFER_MEMORY \
CONFIGURE_MESSAGE_BUFFERS_FOR_QUEUE(OPERATION_COUNT, 16)
diff --git a/testsuites/tmtests/tm11/system.h b/testsuites/tmtests/tm11/system.h
index d4fa9fd404..9a2fc14aab 100644
--- a/testsuites/tmtests/tm11/system.h
+++ b/testsuites/tmtests/tm11/system.h
@@ -47,7 +47,6 @@ rtems_task Init(
#define CONFIGURE_MAXIMUM_TASKS (3 + OPERATION_COUNT)
#define CONFIGURE_MAXIMUM_MESSAGE_QUEUES 1
-#define CONFIGURE_TICKS_PER_TIMESLICE 0
#define CONFIGURE_RTEMS_INIT_TASKS_TABLE
diff --git a/testsuites/tmtests/tm12/system.h b/testsuites/tmtests/tm12/system.h
index d4fa9fd404..9a2fc14aab 100644
--- a/testsuites/tmtests/tm12/system.h
+++ b/testsuites/tmtests/tm12/system.h
@@ -47,7 +47,6 @@ rtems_task Init(
#define CONFIGURE_MAXIMUM_TASKS (3 + OPERATION_COUNT)
#define CONFIGURE_MAXIMUM_MESSAGE_QUEUES 1
-#define CONFIGURE_TICKS_PER_TIMESLICE 0
#define CONFIGURE_RTEMS_INIT_TASKS_TABLE
diff --git a/testsuites/tmtests/tm13/system.h b/testsuites/tmtests/tm13/system.h
index d4fa9fd404..9a2fc14aab 100644
--- a/testsuites/tmtests/tm13/system.h
+++ b/testsuites/tmtests/tm13/system.h
@@ -47,7 +47,6 @@ rtems_task Init(
#define CONFIGURE_MAXIMUM_TASKS (3 + OPERATION_COUNT)
#define CONFIGURE_MAXIMUM_MESSAGE_QUEUES 1
-#define CONFIGURE_TICKS_PER_TIMESLICE 0
#define CONFIGURE_RTEMS_INIT_TASKS_TABLE
diff --git a/testsuites/tmtests/tm14/system.h b/testsuites/tmtests/tm14/system.h
index d4fa9fd404..9a2fc14aab 100644
--- a/testsuites/tmtests/tm14/system.h
+++ b/testsuites/tmtests/tm14/system.h
@@ -47,7 +47,6 @@ rtems_task Init(
#define CONFIGURE_MAXIMUM_TASKS (3 + OPERATION_COUNT)
#define CONFIGURE_MAXIMUM_MESSAGE_QUEUES 1
-#define CONFIGURE_TICKS_PER_TIMESLICE 0
#define CONFIGURE_RTEMS_INIT_TASKS_TABLE
diff --git a/testsuites/tmtests/tm15/system.h b/testsuites/tmtests/tm15/system.h
index 9586199d27..fffabdf844 100644
--- a/testsuites/tmtests/tm15/system.h
+++ b/testsuites/tmtests/tm15/system.h
@@ -48,7 +48,6 @@ rtems_id Task_id[ OPERATION_COUNT+1 ]; /* array of task ids */
#define CONFIGURE_APPLICATION_NEEDS_TIMER_DRIVER
#define CONFIGURE_MAXIMUM_TASKS (2 + OPERATION_COUNT)
-#define CONFIGURE_TICKS_PER_TIMESLICE 0
#define CONFIGURE_RTEMS_INIT_TASKS_TABLE
diff --git a/testsuites/tmtests/tm16/system.h b/testsuites/tmtests/tm16/system.h
index b495e374b2..9eb6d69e85 100644
--- a/testsuites/tmtests/tm16/system.h
+++ b/testsuites/tmtests/tm16/system.h
@@ -48,7 +48,6 @@ rtems_id Task_id[ OPERATION_COUNT+1 ]; /* array of task ids */
#define CONFIGURE_APPLICATION_NEEDS_TIMER_DRIVER
#define CONFIGURE_MAXIMUM_TASKS (3 + OPERATION_COUNT)
-#define CONFIGURE_TICKS_PER_TIMESLICE 0
#define CONFIGURE_RTEMS_INIT_TASKS_TABLE
diff --git a/testsuites/tmtests/tm17/system.h b/testsuites/tmtests/tm17/system.h
index 9586199d27..fffabdf844 100644
--- a/testsuites/tmtests/tm17/system.h
+++ b/testsuites/tmtests/tm17/system.h
@@ -48,7 +48,6 @@ rtems_id Task_id[ OPERATION_COUNT+1 ]; /* array of task ids */
#define CONFIGURE_APPLICATION_NEEDS_TIMER_DRIVER
#define CONFIGURE_MAXIMUM_TASKS (2 + OPERATION_COUNT)
-#define CONFIGURE_TICKS_PER_TIMESLICE 0
#define CONFIGURE_RTEMS_INIT_TASKS_TABLE
diff --git a/testsuites/tmtests/tm18/system.h b/testsuites/tmtests/tm18/system.h
index f00b626c36..28263f3051 100644
--- a/testsuites/tmtests/tm18/system.h
+++ b/testsuites/tmtests/tm18/system.h
@@ -46,7 +46,6 @@ rtems_task Init(
#define CONFIGURE_APPLICATION_NEEDS_TIMER_DRIVER
#define CONFIGURE_MAXIMUM_TASKS (2 + OPERATION_COUNT)
-#define CONFIGURE_TICKS_PER_TIMESLICE 0
#define CONFIGURE_RTEMS_INIT_TASKS_TABLE
diff --git a/testsuites/tmtests/tm19/system.h b/testsuites/tmtests/tm19/system.h
index 3051d62961..bbae1e537f 100644
--- a/testsuites/tmtests/tm19/system.h
+++ b/testsuites/tmtests/tm19/system.h
@@ -48,7 +48,6 @@ rtems_id Task_id[ OPERATION_COUNT+1 ]; /* array of task ids */
#define CONFIGURE_APPLICATION_NEEDS_TIMER_DRIVER
#define CONFIGURE_MAXIMUM_TASKS 4
-#define CONFIGURE_TICKS_PER_TIMESLICE 0
#define CONFIGURE_RTEMS_INIT_TASKS_TABLE
diff --git a/testsuites/tmtests/tm20/system.h b/testsuites/tmtests/tm20/system.h
index 3128bad743..145477232d 100644
--- a/testsuites/tmtests/tm20/system.h
+++ b/testsuites/tmtests/tm20/system.h
@@ -51,7 +51,6 @@ rtems_id Task_id[ OPERATION_COUNT+1 ]; /* array of task ids */
#define CONFIGURE_MAXIMUM_TASKS 3
#define CONFIGURE_MAXIMUM_PARTITIONS 1
#define CONFIGURE_MAXIMUM_REGIONS 1
-#define CONFIGURE_TICKS_PER_TIMESLICE 0
#define CONFIGURE_RTEMS_INIT_TASKS_TABLE
diff --git a/testsuites/tmtests/tm21/system.h b/testsuites/tmtests/tm21/system.h
index 53f3c01353..ef4e35fc7d 100644
--- a/testsuites/tmtests/tm21/system.h
+++ b/testsuites/tmtests/tm21/system.h
@@ -58,7 +58,6 @@ rtems_task Init(
#define CONFIGURE_MAXIMUM_PORTS OPERATION_COUNT
#define CONFIGURE_MAXIMUM_PERIODS OPERATION_COUNT
-#define CONFIGURE_TICKS_PER_TIMESLICE 0
#define CONFIGURE_RTEMS_INIT_TASKS_TABLE
diff --git a/testsuites/tmtests/tm22/system.h b/testsuites/tmtests/tm22/system.h
index d256595fe7..621043dc7c 100644
--- a/testsuites/tmtests/tm22/system.h
+++ b/testsuites/tmtests/tm22/system.h
@@ -49,7 +49,6 @@ rtems_task Init(
#define CONFIGURE_MAXIMUM_TASKS 4
#define CONFIGURE_MAXIMUM_MESSAGE_QUEUES 1
-#define CONFIGURE_TICKS_PER_TIMESLICE 0
#define CONFIGURE_MESSAGE_BUFFER_MEMORY \
diff --git a/testsuites/tmtests/tm23/system.h b/testsuites/tmtests/tm23/system.h
index edee889a9e..41722a2c39 100644
--- a/testsuites/tmtests/tm23/system.h
+++ b/testsuites/tmtests/tm23/system.h
@@ -47,7 +47,6 @@ rtems_task Init(
#define CONFIGURE_MAXIMUM_TASKS (1 + OPERATION_COUNT)
#define CONFIGURE_MAXIMUM_TIMERS OPERATION_COUNT
-#define CONFIGURE_TICKS_PER_TIMESLICE 0
#define CONFIGURE_RTEMS_INIT_TASKS_TABLE
diff --git a/testsuites/tmtests/tm24/system.h b/testsuites/tmtests/tm24/system.h
index f00b626c36..28263f3051 100644
--- a/testsuites/tmtests/tm24/system.h
+++ b/testsuites/tmtests/tm24/system.h
@@ -46,7 +46,6 @@ rtems_task Init(
#define CONFIGURE_APPLICATION_NEEDS_TIMER_DRIVER
#define CONFIGURE_MAXIMUM_TASKS (2 + OPERATION_COUNT)
-#define CONFIGURE_TICKS_PER_TIMESLICE 0
#define CONFIGURE_RTEMS_INIT_TASKS_TABLE
diff --git a/testsuites/tmtests/tm25/system.h b/testsuites/tmtests/tm25/system.h
index 112881f52a..423a30eba8 100644
--- a/testsuites/tmtests/tm25/system.h
+++ b/testsuites/tmtests/tm25/system.h
@@ -47,7 +47,6 @@ rtems_task Init(
#define CONFIGURE_MAXIMUM_TASKS (2 + OPERATION_COUNT)
#define CONFIGURE_MAXIMUM_SEMAPHORES 1
-#define CONFIGURE_TICKS_PER_TIMESLICE 0
#define CONFIGURE_RTEMS_INIT_TASKS_TABLE
diff --git a/testsuites/tmtests/tm26/system.h b/testsuites/tmtests/tm26/system.h
index 762a7051b0..d66dfa81dd 100644
--- a/testsuites/tmtests/tm26/system.h
+++ b/testsuites/tmtests/tm26/system.h
@@ -47,7 +47,6 @@ rtems_task Init(
#define CONFIGURE_MAXIMUM_TASKS (6 + OPERATION_COUNT)
#define CONFIGURE_MAXIMUM_SEMAPHORES 1
-#define CONFIGURE_TICKS_PER_TIMESLICE 0
#define CONFIGURE_RTEMS_INIT_TASKS_TABLE
#define CONFIGURE_INIT_TASK_ATTRIBUTES RTEMS_FLOATING_POINT
diff --git a/testsuites/tmtests/tm27/system.h b/testsuites/tmtests/tm27/system.h
index b3f40c9d8c..4a2723bcd4 100644
--- a/testsuites/tmtests/tm27/system.h
+++ b/testsuites/tmtests/tm27/system.h
@@ -48,7 +48,6 @@ rtems_id Task_id[ OPERATION_COUNT+1 ]; /* array of task ids */
#define CONFIGURE_APPLICATION_NEEDS_TIMER_DRIVER
#define CONFIGURE_MAXIMUM_TASKS 3
-#define CONFIGURE_TICKS_PER_TIMESLICE 0
#define CONFIGURE_RTEMS_INIT_TASKS_TABLE
diff --git a/testsuites/tmtests/tm27/task1.c b/testsuites/tmtests/tm27/task1.c
index 54aca545b8..7f2ce6663c 100644
--- a/testsuites/tmtests/tm27/task1.c
+++ b/testsuites/tmtests/tm27/task1.c
@@ -62,10 +62,6 @@ volatile uint32_t Interrupt_return_time, Interrupt_return_nested_time;
uint32_t Interrupt_nest;
uint32_t timer_overhead;
-rtems_isr Isr_handler(
- rtems_vector_number vector
-);
-
static void set_thread_executing( Thread_Control *thread )
{
_Per_CPU_Get_snapshot()->executing = thread;
@@ -126,6 +122,55 @@ rtems_task Init(
rtems_task_exit();
}
+/* The Isr_handler() and Isr_handler_inner() routines are structured
+ * so that there will be as little entry overhead as possible included
+ * in the interrupt entry time.
+ */
+
+static void Isr_handler_inner( void )
+{
+
+ /*enable_tracing();*/
+ Clear_tm27_intr();
+ switch ( Interrupt_nest ) {
+ case 0:
+ Interrupt_enter_time = end_time;
+ break;
+ case 1:
+ Interrupt_enter_time = end_time;
+ Interrupt_nest = 2;
+ Interrupt_occurred = 0;
+ Lower_tm27_intr();
+ benchmark_timer_initialize();
+ Cause_tm27_intr();
+ /* goes to a nested copy of Isr_handler */
+#if (MUST_WAIT_FOR_INTERRUPT == 1)
+ while ( Interrupt_occurred == 0 );
+#endif
+ Interrupt_return_nested_time = benchmark_timer_read();
+ break;
+ case 2:
+ Interrupt_enter_nested_time = end_time;
+ break;
+ }
+
+ benchmark_timer_initialize();
+}
+
+#ifdef TM27_USE_VECTOR_HANDLER
+static rtems_isr Isr_handler( rtems_vector_number arg )
+#else
+static void Isr_handler( void *arg )
+#endif
+{
+ (void) arg;
+
+ end_time = benchmark_timer_read();
+
+ Interrupt_occurred = 1;
+ Isr_handler_inner();
+}
+
rtems_task Task_1(
rtems_task_argument argument
)
@@ -302,50 +347,3 @@ rtems_task Task_2(
_Thread_Dispatch();
}
-
-/* The Isr_handler() and Isr_handler_inner() routines are structured
- * so that there will be as little entry overhead as possible included
- * in the interrupt entry time.
- */
-
-void Isr_handler_inner( void );
-
-rtems_isr Isr_handler(
- rtems_vector_number vector
-)
-{
- end_time = benchmark_timer_read();
-
- Interrupt_occurred = 1;
- Isr_handler_inner();
-}
-
-void Isr_handler_inner( void )
-{
-
- /*enable_tracing();*/
- Clear_tm27_intr();
- switch ( Interrupt_nest ) {
- case 0:
- Interrupt_enter_time = end_time;
- break;
- case 1:
- Interrupt_enter_time = end_time;
- Interrupt_nest = 2;
- Interrupt_occurred = 0;
- Lower_tm27_intr();
- benchmark_timer_initialize();
- Cause_tm27_intr();
- /* goes to a nested copy of Isr_handler */
-#if (MUST_WAIT_FOR_INTERRUPT == 1)
- while ( Interrupt_occurred == 0 );
-#endif
- Interrupt_return_nested_time = benchmark_timer_read();
- break;
- case 2:
- Interrupt_enter_nested_time = end_time;
- break;
- }
-
- benchmark_timer_initialize();
-}
diff --git a/testsuites/tmtests/tm28/system.h b/testsuites/tmtests/tm28/system.h
index f570f52849..bec8393510 100644
--- a/testsuites/tmtests/tm28/system.h
+++ b/testsuites/tmtests/tm28/system.h
@@ -49,7 +49,6 @@ rtems_id Task_id[ OPERATION_COUNT+1 ]; /* array of task ids */
#define CONFIGURE_MAXIMUM_TASKS 2
#define CONFIGURE_MAXIMUM_PORTS 1
-#define CONFIGURE_TICKS_PER_TIMESLICE 0
#define CONFIGURE_RTEMS_INIT_TASKS_TABLE
diff --git a/testsuites/tmtests/tm29/system.h b/testsuites/tmtests/tm29/system.h
index 0c8e6e48cf..380878abb0 100644
--- a/testsuites/tmtests/tm29/system.h
+++ b/testsuites/tmtests/tm29/system.h
@@ -47,7 +47,6 @@ rtems_task Init(
#define CONFIGURE_MAXIMUM_TASKS (2 + OPERATION_COUNT)
#define CONFIGURE_MAXIMUM_PERIODS OPERATION_COUNT
-#define CONFIGURE_TICKS_PER_TIMESLICE 0
#define CONFIGURE_RTEMS_INIT_TASKS_TABLE
#define CONFIGURE_INIT_TASK_STACK_SIZE (RTEMS_MINIMUM_STACK_SIZE * 2)
diff --git a/testsuites/tmtests/tmck/system.h b/testsuites/tmtests/tmck/system.h
index 6a33ed4374..6fad74389e 100644
--- a/testsuites/tmtests/tmck/system.h
+++ b/testsuites/tmtests/tmck/system.h
@@ -48,7 +48,6 @@ rtems_name Task_name[ OPERATION_COUNT+1 ]; /* array of task names */
#define CONFIGURE_APPLICATION_NEEDS_TIMER_DRIVER
#define CONFIGURE_MAXIMUM_TASKS 2
-#define CONFIGURE_TICKS_PER_TIMESLICE 0
#define CONFIGURE_RTEMS_INIT_TASKS_TABLE
diff --git a/testsuites/tmtests/tmcontext01/init.c b/testsuites/tmtests/tmcontext01/init.c
index 3e667cff4e..dc1da718c7 100644
--- a/testsuites/tmtests/tmcontext01/init.c
+++ b/testsuites/tmtests/tmcontext01/init.c
@@ -1,7 +1,7 @@
/* SPDX-License-Identifier: BSD-2-Clause */
/*
- * Copyright (c) 2014, 2017 embedded brains GmbH. All rights reserved.
+ * Copyright (C) 2014, 2017 embedded brains GmbH & Co. KG
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
@@ -49,8 +49,6 @@ const char rtems_test_name[] = "TMCONTEXT 1";
static rtems_counter_ticks t[SAMPLES];
-static volatile int prevent_optimization;
-
static size_t cache_line_size;
static size_t data_size;
@@ -72,43 +70,31 @@ static int dirty_data_cache(volatile int *data, size_t n, size_t clsz, int j)
return i + j;
}
-static int call_at_level(
+static __attribute__((__noipa__)) void call_at_level(
int start,
int fl,
- int s,
- bool dirty
+ int s
)
{
- int prevent_optimization;;
-
- prevent_optimization = start + fl;
-
+#if defined(__sparc__)
if (fl == start) {
- /*
- * Some architectures like the SPARC have register windows. A side-effect
- * of this context switch is that we start with a fresh window set. On
- * architectures like ARM or PowerPC this context switch has no effect.
- */
- _Context_Switch(&ctx, &ctx);
+ /* Flush register windows */
+ __asm__ volatile ("ta 3" : : : "memory");
}
+#endif
if (fl > 0) {
call_at_level(
start,
fl - 1,
- s,
- dirty
+ s
);
+ __asm__ volatile ("" : : : "memory");
} else {
char *volatile space;
rtems_counter_ticks a;
rtems_counter_ticks b;
- if (dirty) {
- dirty_data_cache(main_data, data_size, cache_line_size, fl);
- rtems_cache_invalidate_entire_instruction();
- }
-
a = rtems_counter_read();
/* Ensure that we use an untouched stack area */
@@ -120,8 +106,6 @@ static int call_at_level(
b = rtems_counter_read();
t[s] = rtems_counter_difference(b, a);
}
-
- return prevent_optimization;
}
static void load_task(rtems_task_argument arg)
@@ -149,7 +133,7 @@ static void sort_t(void)
qsort(&t[0], SAMPLES, sizeof(t[0]), cmp);
}
-static void test_by_function_level(int fl, bool dirty)
+static __attribute__((__noipa__)) void test_by_function_level(int fl, bool dirty)
{
RTEMS_INTERRUPT_LOCK_DECLARE(, lock)
rtems_interrupt_lock_context lock_context;
@@ -160,13 +144,16 @@ static void test_by_function_level(int fl, bool dirty)
uint64_t q3;
uint64_t max;
- fl += prevent_optimization;
-
rtems_interrupt_lock_initialize(&lock, "test");
rtems_interrupt_lock_acquire(&lock, &lock_context);
for (s = 0; s < SAMPLES; ++s) {
- call_at_level(fl, fl, s, dirty);
+ if (dirty) {
+ dirty_data_cache(main_data, data_size, cache_line_size, fl);
+ rtems_cache_invalidate_entire_instruction();
+ }
+
+ call_at_level(fl, fl, s);
}
rtems_interrupt_lock_release(&lock, &lock_context);
@@ -181,14 +168,8 @@ static void test_by_function_level(int fl, bool dirty)
max = t[SAMPLES - 1];
printf(
- " <Sample functionNestLevel=\"%i\">\n"
- " <Min unit=\"ns\">%" PRIu64 "</Min>"
- "<Q1 unit=\"ns\">%" PRIu64 "</Q1>"
- "<Q2 unit=\"ns\">%" PRIu64 "</Q2>"
- "<Q3 unit=\"ns\">%" PRIu64 "</Q3>"
- "<Max unit=\"ns\">%" PRIu64 "</Max>\n"
- " </Sample>\n",
- fl,
+ "%s\n [%" PRIu64 ", %" PRIu64 ", %" PRIu64 ", %" PRIu64 ", %" PRIu64 "]",
+ fl == 0 ? "" : ",",
rtems_counter_ticks_to_nanoseconds(min),
rtems_counter_ticks_to_nanoseconds(q1),
rtems_counter_ticks_to_nanoseconds(q2),
@@ -197,26 +178,38 @@ static void test_by_function_level(int fl, bool dirty)
);
}
-static void test(bool dirty, uint32_t load)
+static void test(bool first, bool dirty, uint32_t load)
{
int fl;
printf(
- " <ContextSwitchTest environment=\"%s\"",
- dirty ? "dirty" : "normal"
+ "\n %s{\n"
+ " \"environment\": \"",
+ first ? "" : "}, "
);
- if (load > 0) {
- printf(" load=\"%" PRIu32 "\"", load);
+ if (dirty) {
+ if (load > 0) {
+ printf("Load/%" PRIu32 "", load);
+ } else {
+ printf("DirtyCache");
+ }
+ } else {
+ printf("HotCache");
}
- printf(">\n");
+ printf(
+ "\",\n"
+ " \"stats-by-function-nest-level\": ["
+ );
for (fl = 0; fl < FUNCTION_LEVELS; ++fl) {
test_by_function_level(fl, dirty);
}
- printf(" </ContextSwitchTest>\n");
+ printf(
+ "\n ]"
+ );
}
static void Init(rtems_task_argument arg)
@@ -225,7 +218,7 @@ static void Init(rtems_task_argument arg)
TEST_BEGIN();
- printf("<Test>\n");
+ printf("*** BEGIN OF JSON DATA ***\n[");
cache_line_size = rtems_cache_get_data_line_size();
if (cache_line_size == 0) {
@@ -240,8 +233,8 @@ static void Init(rtems_task_argument arg)
main_data = malloc(data_size);
rtems_test_assert(main_data != NULL);
- test(false, load);
- test(true, load);
+ test(true, false, load);
+ test(false, true, load);
for (load = 1; load < rtems_scheduler_get_processor_maximum(); ++load) {
rtems_status_code sc;
@@ -266,10 +259,10 @@ static void Init(rtems_task_argument arg)
sc = rtems_task_start(id, load_task, (rtems_task_argument) load_data);
rtems_test_assert(sc == RTEMS_SUCCESSFUL);
- test(true, load);
+ test(false, true, load);
}
- printf("</Test>\n");
+ printf("\n }\n]\n*** END OF JSON DATA ***\n");
TEST_END();
rtems_test_exit(0);
diff --git a/testsuites/tmtests/tmcontext01/plot.py b/testsuites/tmtests/tmcontext01/plot.py
index 56d46c654d..944a5962c2 100644
--- a/testsuites/tmtests/tmcontext01/plot.py
+++ b/testsuites/tmtests/tmcontext01/plot.py
@@ -1,7 +1,6 @@
# SPDX-License-Identifier: BSD-2-Clause
-#
-# Copyright (c) 2014 embedded brains GmbH. All rights reserved.
+# Copyright (C) 2014, 2024 embedded brains GmbH & Co. KG
#
# Redistribution and use in source and binary forms, with or without
# modification, are permitted provided that the following conditions
@@ -23,48 +22,38 @@
# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
# POSSIBILITY OF SUCH DAMAGE.
-#
-import libxml2
-from libxml2 import xmlNode
-import matplotlib.pyplot as plt
-doc = libxml2.parseFile("tmcontext01.scn")
-ctx = doc.xpathNewContext()
+import json
+import re
+import matplotlib.pyplot as plt # type: ignore
+from matplotlib import ticker # type: ignore
+
+
+def _plot(data: dict) -> None:
+ _, axes = plt.subplots()
+ axes.set_title("Context Switch Timing Test")
+ axes.set_xlabel("Function Nest Level")
+ axes.set_ylabel("Context Switch Time [μs]")
+ x = list(range(0, len(data[0]["stats-by-function-nest-level"])))
+ axes.xaxis.set_major_locator(ticker.FixedLocator(x))
+ for samples in data:
+ y = [
+ values[2] / 1000.0
+ for values in samples["stats-by-function-nest-level"]
+ ]
+ axes.plot(x, y, label=samples["environment"], marker='o')
+ axes.legend(loc='best')
+ plt.savefig("tmcontext01.png")
+ plt.savefig("tmcontext01.pdf")
+ plt.close()
-colors = ['k', 'r', 'b', 'g', 'y', 'm']
-def plot(y, color, label, first):
- n=len(y)
- x=range(0, n)
- if first:
- plt.plot(x, y, color=color, label=label)
- else:
- plt.plot(x, y, color=color)
+_JSON_DATA = re.compile(
+ r"\*\*\* BEGIN OF JSON DATA \*\*\*(.*)"
+ r"\*\*\* END OF JSON DATA \*\*\*", re.DOTALL)
-plt.title("context switch timing test")
-plt.xlabel('function nest level')
-plt.ylabel('context switch time [ns]')
+with open("tmcontext01.scn", "r", encoding="utf-8") as src:
+ match = _JSON_DATA.search(src.read())
+ data = json.loads(match.group(1))
-c = 0
-for e in ["normal", "dirty"]:
- first = True
- for i in ["Min", "Q1", "Q2", "Q3", "Max"]:
- y=map(xmlNode.getContent, ctx.xpathEval("/Test/ContextSwitchTest[@environment='" + e + "' and not(@load)]/Sample/" + i))
- plot(y, colors[c], e, first)
- first = False
- c = c + 1
-load = 1
-while load > 0:
- first = True
- for i in ["Min", "Q1", "Q2", "Q3", "Max"]:
- y=map(xmlNode.getContent, ctx.xpathEval("/Test/ContextSwitchTest[@environment='dirty' and @load='" + str(load) + "']/Sample/" + i))
- if len(y) > 0:
- plot(y, colors[c], "load " + str(load), first)
- first = False
- else:
- load = 0
- if load > 0:
- load = load + 1
- c = c + 1
-plt.legend()
-plt.show()
+_plot(data)
diff --git a/testsuites/tmtests/tmcontext01/tmcontext01.scn b/testsuites/tmtests/tmcontext01/tmcontext01.scn
index 9044619319..8347d8b3fb 100644
--- a/testsuites/tmtests/tmcontext01/tmcontext01.scn
+++ b/testsuites/tmtests/tmcontext01/tmcontext01.scn
@@ -1,255 +1,124 @@
-<?xml version="1.0"?>
-<!-- *** TEST TMCONTEXT 1 *** -->
-<Test>
- <ContextSwitchTest environment="normal">
- <Sample functionNestLevel="0">
- <Min unit="ns">2440</Min><Q1 unit="ns">2440</Q1><Q2 unit="ns">2480</Q2><Q3 unit="ns">2480</Q3><Max unit="ns">2800</Max>
- </Sample>
- <Sample functionNestLevel="1">
- <Min unit="ns">3520</Min><Q1 unit="ns">3760</Q1><Q2 unit="ns">3800</Q2><Q3 unit="ns">3800</Q3><Max unit="ns">4120</Max>
- </Sample>
- <Sample functionNestLevel="2">
- <Min unit="ns">4280</Min><Q1 unit="ns">4720</Q1><Q2 unit="ns">4720</Q2><Q3 unit="ns">5040</Q3><Max unit="ns">5080</Max>
- </Sample>
- <Sample functionNestLevel="3">
- <Min unit="ns">5320</Min><Q1 unit="ns">5640</Q1><Q2 unit="ns">5680</Q2><Q3 unit="ns">5960</Q3><Max unit="ns">6000</Max>
- </Sample>
- <Sample functionNestLevel="4">
- <Min unit="ns">6360</Min><Q1 unit="ns">6600</Q1><Q2 unit="ns">6600</Q2><Q3 unit="ns">6920</Q3><Max unit="ns">6920</Max>
- </Sample>
- <Sample functionNestLevel="5">
- <Min unit="ns">7480</Min><Q1 unit="ns">7520</Q1><Q2 unit="ns">7840</Q2><Q3 unit="ns">7840</Q3><Max unit="ns">7880</Max>
- </Sample>
- <Sample functionNestLevel="6">
- <Min unit="ns">8480</Min><Q1 unit="ns">8480</Q1><Q2 unit="ns">8800</Q2><Q3 unit="ns">8800</Q3><Max unit="ns">8840</Max>
- </Sample>
- <Sample functionNestLevel="7">
- <Min unit="ns">8840</Min><Q1 unit="ns">8960</Q1><Q2 unit="ns">9280</Q2><Q3 unit="ns">9280</Q3><Max unit="ns">9320</Max>
- </Sample>
- <Sample functionNestLevel="8">
- <Min unit="ns">8920</Min><Q1 unit="ns">8960</Q1><Q2 unit="ns">9280</Q2><Q3 unit="ns">9280</Q3><Max unit="ns">9320</Max>
- </Sample>
- <Sample functionNestLevel="9">
- <Min unit="ns">8920</Min><Q1 unit="ns">8960</Q1><Q2 unit="ns">8960</Q2><Q3 unit="ns">9280</Q3><Max unit="ns">9280</Max>
- </Sample>
- <Sample functionNestLevel="10">
- <Min unit="ns">8800</Min><Q1 unit="ns">8960</Q1><Q2 unit="ns">9240</Q2><Q3 unit="ns">9280</Q3><Max unit="ns">9280</Max>
- </Sample>
- <Sample functionNestLevel="11">
- <Min unit="ns">8920</Min><Q1 unit="ns">8960</Q1><Q2 unit="ns">9280</Q2><Q3 unit="ns">9280</Q3><Max unit="ns">9280</Max>
- </Sample>
- <Sample functionNestLevel="12">
- <Min unit="ns">8920</Min><Q1 unit="ns">8960</Q1><Q2 unit="ns">9240</Q2><Q3 unit="ns">9280</Q3><Max unit="ns">9320</Max>
- </Sample>
- <Sample functionNestLevel="13">
- <Min unit="ns">8920</Min><Q1 unit="ns">8960</Q1><Q2 unit="ns">9240</Q2><Q3 unit="ns">9280</Q3><Max unit="ns">9280</Max>
- </Sample>
- <Sample functionNestLevel="14">
- <Min unit="ns">8920</Min><Q1 unit="ns">8960</Q1><Q2 unit="ns">9240</Q2><Q3 unit="ns">9280</Q3><Max unit="ns">9280</Max>
- </Sample>
- <Sample functionNestLevel="15">
- <Min unit="ns">8920</Min><Q1 unit="ns">8960</Q1><Q2 unit="ns">8960</Q2><Q3 unit="ns">9280</Q3><Max unit="ns">9280</Max>
- </Sample>
- </ContextSwitchTest>
- <ContextSwitchTest environment="dirty">
- <Sample functionNestLevel="0">
- <Min unit="ns">9720</Min><Q1 unit="ns">10560</Q1><Q2 unit="ns">10600</Q2><Q3 unit="ns">10680</Q3><Max unit="ns">11160</Max>
- </Sample>
- <Sample functionNestLevel="1">
- <Min unit="ns">11840</Min><Q1 unit="ns">12280</Q1><Q2 unit="ns">12560</Q2><Q3 unit="ns">12600</Q3><Max unit="ns">12640</Max>
- </Sample>
- <Sample functionNestLevel="2">
- <Min unit="ns">12880</Min><Q1 unit="ns">13560</Q1><Q2 unit="ns">13600</Q2><Q3 unit="ns">13640</Q3><Max unit="ns">13680</Max>
- </Sample>
- <Sample functionNestLevel="3">
- <Min unit="ns">13960</Min><Q1 unit="ns">14640</Q1><Q2 unit="ns">14680</Q2><Q3 unit="ns">14720</Q3><Max unit="ns">14720</Max>
- </Sample>
- <Sample functionNestLevel="4">
- <Min unit="ns">15000</Min><Q1 unit="ns">15680</Q1><Q2 unit="ns">15760</Q2><Q3 unit="ns">15760</Q3><Max unit="ns">15800</Max>
- </Sample>
- <Sample functionNestLevel="5">
- <Min unit="ns">16320</Min><Q1 unit="ns">16720</Q1><Q2 unit="ns">16800</Q2><Q3 unit="ns">16800</Q3><Max unit="ns">17040</Max>
- </Sample>
- <Sample functionNestLevel="6">
- <Min unit="ns">17320</Min><Q1 unit="ns">17560</Q1><Q2 unit="ns">17800</Q2><Q3 unit="ns">17880</Q3><Max unit="ns">18160</Max>
- </Sample>
- <Sample functionNestLevel="7">
- <Min unit="ns">17440</Min><Q1 unit="ns">17800</Q1><Q2 unit="ns">17840</Q2><Q3 unit="ns">17880</Q3><Max unit="ns">18160</Max>
- </Sample>
- <Sample functionNestLevel="8">
- <Min unit="ns">17360</Min><Q1 unit="ns">17800</Q1><Q2 unit="ns">17840</Q2><Q3 unit="ns">17880</Q3><Max unit="ns">18200</Max>
- </Sample>
- <Sample functionNestLevel="9">
- <Min unit="ns">17400</Min><Q1 unit="ns">17800</Q1><Q2 unit="ns">17840</Q2><Q3 unit="ns">17880</Q3><Max unit="ns">18120</Max>
- </Sample>
- <Sample functionNestLevel="10">
- <Min unit="ns">17320</Min><Q1 unit="ns">17800</Q1><Q2 unit="ns">17840</Q2><Q3 unit="ns">17880</Q3><Max unit="ns">18200</Max>
- </Sample>
- <Sample functionNestLevel="11">
- <Min unit="ns">17360</Min><Q1 unit="ns">17840</Q1><Q2 unit="ns">17840</Q2><Q3 unit="ns">17880</Q3><Max unit="ns">18160</Max>
- </Sample>
- <Sample functionNestLevel="12">
- <Min unit="ns">17360</Min><Q1 unit="ns">17800</Q1><Q2 unit="ns">17840</Q2><Q3 unit="ns">17880</Q3><Max unit="ns">18160</Max>
- </Sample>
- <Sample functionNestLevel="13">
- <Min unit="ns">17360</Min><Q1 unit="ns">17800</Q1><Q2 unit="ns">17840</Q2><Q3 unit="ns">17880</Q3><Max unit="ns">18200</Max>
- </Sample>
- <Sample functionNestLevel="14">
- <Min unit="ns">17760</Min><Q1 unit="ns">17840</Q1><Q2 unit="ns">17840</Q2><Q3 unit="ns">17880</Q3><Max unit="ns">18200</Max>
- </Sample>
- <Sample functionNestLevel="15">
- <Min unit="ns">17360</Min><Q1 unit="ns">17800</Q1><Q2 unit="ns">17840</Q2><Q3 unit="ns">17880</Q3><Max unit="ns">18200</Max>
- </Sample>
- </ContextSwitchTest>
- <ContextSwitchTest environment="dirty" load="1">
- <Sample functionNestLevel="0">
- <Min unit="ns">23800</Min><Q1 unit="ns">24440</Q1><Q2 unit="ns">24640</Q2><Q3 unit="ns">24720</Q3><Max unit="ns">25080</Max>
- </Sample>
- <Sample functionNestLevel="1">
- <Min unit="ns">28040</Min><Q1 unit="ns">28560</Q1><Q2 unit="ns">28640</Q2><Q3 unit="ns">28680</Q3><Max unit="ns">28720</Max>
- </Sample>
- <Sample functionNestLevel="2">
- <Min unit="ns">31600</Min><Q1 unit="ns">32160</Q1><Q2 unit="ns">32160</Q2><Q3 unit="ns">32200</Q3><Max unit="ns">32280</Max>
- </Sample>
- <Sample functionNestLevel="3">
- <Min unit="ns">35400</Min><Q1 unit="ns">35720</Q1><Q2 unit="ns">35760</Q2><Q3 unit="ns">35920</Q3><Max unit="ns">36080</Max>
- </Sample>
- <Sample functionNestLevel="4">
- <Min unit="ns">38960</Min><Q1 unit="ns">39280</Q1><Q2 unit="ns">39320</Q2><Q3 unit="ns">39560</Q3><Max unit="ns">39640</Max>
- </Sample>
- <Sample functionNestLevel="5">
- <Min unit="ns">42480</Min><Q1 unit="ns">42840</Q1><Q2 unit="ns">43080</Q2><Q3 unit="ns">43120</Q3><Max unit="ns">43200</Max>
- </Sample>
- <Sample functionNestLevel="6">
- <Min unit="ns">46120</Min><Q1 unit="ns">46600</Q1><Q2 unit="ns">46640</Q2><Q3 unit="ns">46680</Q3><Max unit="ns">46880</Max>
- </Sample>
- <Sample functionNestLevel="7">
- <Min unit="ns">46080</Min><Q1 unit="ns">46600</Q1><Q2 unit="ns">46640</Q2><Q3 unit="ns">46680</Q3><Max unit="ns">46760</Max>
- </Sample>
- <Sample functionNestLevel="8">
- <Min unit="ns">46320</Min><Q1 unit="ns">46600</Q1><Q2 unit="ns">46640</Q2><Q3 unit="ns">46680</Q3><Max unit="ns">47040</Max>
- </Sample>
- <Sample functionNestLevel="9">
- <Min unit="ns">46040</Min><Q1 unit="ns">46600</Q1><Q2 unit="ns">46640</Q2><Q3 unit="ns">46680</Q3><Max unit="ns">46960</Max>
- </Sample>
- <Sample functionNestLevel="10">
- <Min unit="ns">45960</Min><Q1 unit="ns">46600</Q1><Q2 unit="ns">46640</Q2><Q3 unit="ns">46680</Q3><Max unit="ns">46960</Max>
- </Sample>
- <Sample functionNestLevel="11">
- <Min unit="ns">46040</Min><Q1 unit="ns">46600</Q1><Q2 unit="ns">46640</Q2><Q3 unit="ns">46680</Q3><Max unit="ns">46720</Max>
- </Sample>
- <Sample functionNestLevel="12">
- <Min unit="ns">46080</Min><Q1 unit="ns">46600</Q1><Q2 unit="ns">46640</Q2><Q3 unit="ns">46680</Q3><Max unit="ns">46920</Max>
- </Sample>
- <Sample functionNestLevel="13">
- <Min unit="ns">46080</Min><Q1 unit="ns">46600</Q1><Q2 unit="ns">46640</Q2><Q3 unit="ns">46680</Q3><Max unit="ns">46720</Max>
- </Sample>
- <Sample functionNestLevel="14">
- <Min unit="ns">46280</Min><Q1 unit="ns">46600</Q1><Q2 unit="ns">46640</Q2><Q3 unit="ns">46680</Q3><Max unit="ns">46760</Max>
- </Sample>
- <Sample functionNestLevel="15">
- <Min unit="ns">46360</Min><Q1 unit="ns">46600</Q1><Q2 unit="ns">46640</Q2><Q3 unit="ns">46680</Q3><Max unit="ns">47040</Max>
- </Sample>
- </ContextSwitchTest>
- <ContextSwitchTest environment="dirty" load="2">
- <Sample functionNestLevel="0">
- <Min unit="ns">37560</Min><Q1 unit="ns">38200</Q1><Q2 unit="ns">38240</Q2><Q3 unit="ns">38480</Q3><Max unit="ns">38600</Max>
- </Sample>
- <Sample functionNestLevel="1">
- <Min unit="ns">44880</Min><Q1 unit="ns">45480</Q1><Q2 unit="ns">45560</Q2><Q3 unit="ns">45600</Q3><Max unit="ns">45640</Max>
- </Sample>
- <Sample functionNestLevel="2">
- <Min unit="ns">50920</Min><Q1 unit="ns">51560</Q1><Q2 unit="ns">51600</Q2><Q3 unit="ns">51800</Q3><Max unit="ns">51960</Max>
- </Sample>
- <Sample functionNestLevel="3">
- <Min unit="ns">57320</Min><Q1 unit="ns">57640</Q1><Q2 unit="ns">57880</Q2><Q3 unit="ns">57920</Q3><Max unit="ns">58240</Max>
- </Sample>
- <Sample functionNestLevel="4">
- <Min unit="ns">63320</Min><Q1 unit="ns">63920</Q1><Q2 unit="ns">63960</Q2><Q3 unit="ns">64000</Q3><Max unit="ns">64600</Max>
- </Sample>
- <Sample functionNestLevel="5">
- <Min unit="ns">69840</Min><Q1 unit="ns">69960</Q1><Q2 unit="ns">70040</Q2><Q3 unit="ns">70240</Q3><Max unit="ns">70400</Max>
- </Sample>
- <Sample functionNestLevel="6">
- <Min unit="ns">75600</Min><Q1 unit="ns">76200</Q1><Q2 unit="ns">76280</Q2><Q3 unit="ns">76320</Q3><Max unit="ns">76880</Max>
- </Sample>
- <Sample functionNestLevel="7">
- <Min unit="ns">75440</Min><Q1 unit="ns">76240</Q1><Q2 unit="ns">76280</Q2><Q3 unit="ns">76320</Q3><Max unit="ns">76840</Max>
- </Sample>
- <Sample functionNestLevel="8">
- <Min unit="ns">75640</Min><Q1 unit="ns">76200</Q1><Q2 unit="ns">76280</Q2><Q3 unit="ns">76320</Q3><Max unit="ns">76960</Max>
- </Sample>
- <Sample functionNestLevel="9">
- <Min unit="ns">75640</Min><Q1 unit="ns">76240</Q1><Q2 unit="ns">76280</Q2><Q3 unit="ns">76320</Q3><Max unit="ns">76440</Max>
- </Sample>
- <Sample functionNestLevel="10">
- <Min unit="ns">75920</Min><Q1 unit="ns">76240</Q1><Q2 unit="ns">76280</Q2><Q3 unit="ns">76320</Q3><Max unit="ns">76400</Max>
- </Sample>
- <Sample functionNestLevel="11">
- <Min unit="ns">75600</Min><Q1 unit="ns">76200</Q1><Q2 unit="ns">76280</Q2><Q3 unit="ns">76320</Q3><Max unit="ns">76920</Max>
- </Sample>
- <Sample functionNestLevel="12">
- <Min unit="ns">75360</Min><Q1 unit="ns">76200</Q1><Q2 unit="ns">76280</Q2><Q3 unit="ns">76320</Q3><Max unit="ns">76440</Max>
- </Sample>
- <Sample functionNestLevel="13">
- <Min unit="ns">75360</Min><Q1 unit="ns">76200</Q1><Q2 unit="ns">76280</Q2><Q3 unit="ns">76320</Q3><Max unit="ns">76960</Max>
- </Sample>
- <Sample functionNestLevel="14">
- <Min unit="ns">75640</Min><Q1 unit="ns">76160</Q1><Q2 unit="ns">76280</Q2><Q3 unit="ns">76320</Q3><Max unit="ns">76960</Max>
- </Sample>
- <Sample functionNestLevel="15">
- <Min unit="ns">75960</Min><Q1 unit="ns">76240</Q1><Q2 unit="ns">76280</Q2><Q3 unit="ns">76320</Q3><Max unit="ns">76400</Max>
- </Sample>
- </ContextSwitchTest>
- <ContextSwitchTest environment="dirty" load="3">
- <Sample functionNestLevel="0">
- <Min unit="ns">52400</Min><Q1 unit="ns">52480</Q1><Q2 unit="ns">52520</Q2><Q3 unit="ns">52800</Q3><Max unit="ns">53720</Max>
- </Sample>
- <Sample functionNestLevel="1">
- <Min unit="ns">61680</Min><Q1 unit="ns">62600</Q1><Q2 unit="ns">62640</Q2><Q3 unit="ns">62680</Q3><Max unit="ns">62800</Max>
- </Sample>
- <Sample functionNestLevel="2">
- <Min unit="ns">70160</Min><Q1 unit="ns">71160</Q1><Q2 unit="ns">71360</Q2><Q3 unit="ns">71480</Q3><Max unit="ns">72160</Max>
- </Sample>
- <Sample functionNestLevel="3">
- <Min unit="ns">79000</Min><Q1 unit="ns">79960</Q1><Q2 unit="ns">80000</Q2><Q3 unit="ns">80000</Q3><Max unit="ns">80920</Max>
- </Sample>
- <Sample functionNestLevel="4">
- <Min unit="ns">87600</Min><Q1 unit="ns">88480</Q1><Q2 unit="ns">88760</Q2><Q3 unit="ns">88800</Q3><Max unit="ns">88880</Max>
- </Sample>
- <Sample functionNestLevel="5">
- <Min unit="ns">96320</Min><Q1 unit="ns">97280</Q1><Q2 unit="ns">97320</Q2><Q3 unit="ns">97360</Q3><Max unit="ns">98600</Max>
- </Sample>
- <Sample functionNestLevel="6">
- <Min unit="ns">105160</Min><Q1 unit="ns">105840</Q1><Q2 unit="ns">106080</Q2><Q3 unit="ns">106160</Q3><Max unit="ns">107120</Max>
- </Sample>
- <Sample functionNestLevel="7">
- <Min unit="ns">105200</Min><Q1 unit="ns">106040</Q1><Q2 unit="ns">106120</Q2><Q3 unit="ns">106160</Q3><Max unit="ns">107080</Max>
- </Sample>
- <Sample functionNestLevel="8">
- <Min unit="ns">104880</Min><Q1 unit="ns">105920</Q1><Q2 unit="ns">106080</Q2><Q3 unit="ns">106160</Q3><Max unit="ns">106280</Max>
- </Sample>
- <Sample functionNestLevel="9">
- <Min unit="ns">105760</Min><Q1 unit="ns">106000</Q1><Q2 unit="ns">106120</Q2><Q3 unit="ns">106160</Q3><Max unit="ns">106280</Max>
- </Sample>
- <Sample functionNestLevel="10">
- <Min unit="ns">104880</Min><Q1 unit="ns">105880</Q1><Q2 unit="ns">106080</Q2><Q3 unit="ns">106160</Q3><Max unit="ns">107080</Max>
- </Sample>
- <Sample functionNestLevel="11">
- <Min unit="ns">105720</Min><Q1 unit="ns">105960</Q1><Q2 unit="ns">106120</Q2><Q3 unit="ns">106160</Q3><Max unit="ns">106240</Max>
- </Sample>
- <Sample functionNestLevel="12">
- <Min unit="ns">104960</Min><Q1 unit="ns">105880</Q1><Q2 unit="ns">106080</Q2><Q3 unit="ns">106160</Q3><Max unit="ns">106280</Max>
- </Sample>
- <Sample functionNestLevel="13">
- <Min unit="ns">104880</Min><Q1 unit="ns">105880</Q1><Q2 unit="ns">106120</Q2><Q3 unit="ns">106160</Q3><Max unit="ns">106280</Max>
- </Sample>
- <Sample functionNestLevel="14">
- <Min unit="ns">105720</Min><Q1 unit="ns">105880</Q1><Q2 unit="ns">106080</Q2><Q3 unit="ns">106160</Q3><Max unit="ns">106240</Max>
- </Sample>
- <Sample functionNestLevel="15">
- <Min unit="ns">104920</Min><Q1 unit="ns">105840</Q1><Q2 unit="ns">106120</Q2><Q3 unit="ns">106160</Q3><Max unit="ns">106280</Max>
- </Sample>
- </ContextSwitchTest>
-</Test>
-<!-- *** END OF TEST TMCONTEXT 1 *** -->
+
+ SIS - SPARC/RISCV instruction simulator 2.30, copyright Jiri Gaisler 2020
+ Bug-reports to jiri@gaisler.se
+
+ GR740/LEON4 emulation enabled, 4 cpus online, delta 50 clocks
+
+ Loaded build/sparc/gr740/testsuites/tmtests/tmcontext01.exe, entry 0x00000000
+
+
+*** BEGIN OF TEST TMCONTEXT 1 ***
+*** TEST VERSION: 6.0.0.aa07dc10645c3dc855c3df2b53520aebc2751b06
+*** TEST STATE: EXPECTED_PASS
+*** TEST BUILD: RTEMS_SMP
+*** TEST TOOLS: 13.2.0 20230727 (RTEMS 6, RSB d3d738c35a71ca05f675b188539225099401ac79, Newlib a021448)
+*** BEGIN OF JSON DATA ***
+[
+ {
+ "environment": "HotCache",
+ "stats-by-function-nest-level": [
+ [2820, 2820, 2820, 2820, 2820],
+ [3640, 3640, 3640, 3640, 3640],
+ [4460, 4460, 4460, 4460, 4460],
+ [5280, 5280, 5280, 5280, 5280],
+ [6100, 6100, 6100, 6100, 6100],
+ [6920, 6920, 6920, 6920, 6920],
+ [7740, 7740, 7740, 7740, 7740],
+ [7740, 7740, 7740, 7740, 7740],
+ [7740, 7740, 7740, 7740, 7740],
+ [7740, 7740, 7740, 7740, 7740],
+ [7740, 7740, 7740, 7740, 7740],
+ [7740, 7740, 7740, 7740, 7740],
+ [7740, 7740, 7740, 7740, 7740],
+ [7740, 7740, 7740, 7740, 7740],
+ [7740, 7740, 7740, 7740, 7740],
+ [7740, 7740, 7740, 7740, 7740]
+ ]
+ }, {
+ "environment": "DirtyCache",
+ "stats-by-function-nest-level": [
+ [2820, 2820, 2820, 2820, 2820],
+ [3640, 3640, 3640, 3640, 3640],
+ [4460, 4460, 4460, 4460, 4460],
+ [5280, 5280, 5280, 5280, 5280],
+ [6100, 6100, 6100, 6100, 6100],
+ [6920, 6920, 6920, 6920, 6920],
+ [7740, 7740, 7740, 7740, 7740],
+ [7740, 7740, 7740, 7740, 7740],
+ [7740, 7740, 7740, 7740, 7740],
+ [7740, 7740, 7740, 7740, 7740],
+ [7740, 7740, 7740, 7740, 7740],
+ [7740, 7740, 7740, 7740, 7740],
+ [7740, 7740, 7740, 7740, 7740],
+ [7740, 7740, 7740, 7740, 7740],
+ [7740, 7740, 7740, 7740, 7740],
+ [7740, 7740, 7740, 7740, 7740]
+ ]
+ }, {
+ "environment": "Load/1",
+ "stats-by-function-nest-level": [
+ [2820, 2820, 2820, 2820, 2820],
+ [3640, 3640, 3640, 3640, 3640],
+ [4460, 4460, 4460, 4460, 4460],
+ [5280, 5280, 5280, 5280, 5280],
+ [6100, 6100, 6100, 6100, 6100],
+ [6920, 6920, 6920, 6920, 6920],
+ [7740, 7740, 7740, 7740, 7740],
+ [7740, 7740, 7740, 7740, 7740],
+ [7740, 7740, 7740, 7740, 7740],
+ [7740, 7740, 7740, 7740, 7740],
+ [7740, 7740, 7740, 7740, 7740],
+ [7740, 7740, 7740, 7740, 7740],
+ [7740, 7740, 7740, 7740, 7740],
+ [7740, 7740, 7740, 7740, 7740],
+ [7740, 7740, 7740, 7740, 7740],
+ [7740, 7740, 7740, 7740, 7740]
+ ]
+ }, {
+ "environment": "Load/2",
+ "stats-by-function-nest-level": [
+ [2820, 2820, 2820, 2820, 2820],
+ [3640, 3640, 3640, 3640, 3640],
+ [4460, 4460, 4460, 4460, 4460],
+ [5280, 5280, 5280, 5280, 5280],
+ [6100, 6100, 6100, 6100, 6100],
+ [6920, 6920, 6920, 6920, 6920],
+ [7740, 7740, 7740, 7740, 7740],
+ [7740, 7740, 7740, 7740, 7740],
+ [7740, 7740, 7740, 7740, 7740],
+ [7740, 7740, 7740, 7740, 7740],
+ [7740, 7740, 7740, 7740, 7740],
+ [7740, 7740, 7740, 7740, 7740],
+ [7740, 7740, 7740, 7740, 7740],
+ [7740, 7740, 7740, 7740, 7740],
+ [7740, 7740, 7740, 7740, 7740],
+ [7740, 7740, 7740, 7740, 7740]
+ ]
+ }, {
+ "environment": "Load/3",
+ "stats-by-function-nest-level": [
+ [2820, 2820, 2820, 2820, 2820],
+ [3640, 3640, 3640, 3640, 3640],
+ [4460, 4460, 4460, 4460, 4460],
+ [5280, 5280, 5280, 5280, 5280],
+ [6100, 6100, 6100, 6100, 6100],
+ [6920, 6920, 6920, 6920, 6920],
+ [7740, 7740, 7740, 7740, 7740],
+ [7740, 7740, 7740, 7740, 7740],
+ [7740, 7740, 7740, 7740, 7740],
+ [7740, 7740, 7740, 7740, 7740],
+ [7740, 7740, 7740, 7740, 7740],
+ [7740, 7740, 7740, 7740, 7740],
+ [7740, 7740, 7740, 7740, 7740],
+ [7740, 7740, 7740, 7740, 7740],
+ [7740, 7740, 7740, 7740, 7740],
+ [7740, 7740, 7740, 7740, 7740]
+ ]
+ }
+]
+*** END OF JSON DATA ***
+
+*** END OF TEST TMCONTEXT 1 ***
+
+cpu 3 in error mode (tt = 0x80)
+ 2081487650 00009060: 91d02000 ta 0x0
diff --git a/testsuites/tmtests/tmfine01/init.c b/testsuites/tmtests/tmfine01/init.c
index a93e2d3470..c05894f6da 100644
--- a/testsuites/tmtests/tmfine01/init.c
+++ b/testsuites/tmtests/tmfine01/init.c
@@ -1,7 +1,7 @@
/* SPDX-License-Identifier: BSD-2-Clause */
/*
- * Copyright (c) 2015, 2017 embedded brains GmbH. All rights reserved.
+ * Copyright (C) 2015, 2024 embedded brains GmbH & Co. KG
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
@@ -55,6 +55,8 @@ typedef struct {
typedef struct {
rtems_test_parallel_context base;
+ const char *test_sep;
+ const char *counter_sep;
rtems_id master;
rtems_id sema;
rtems_id mq[CPU_COUNT];
@@ -89,24 +91,46 @@ static rtems_interval test_init(
}
static void test_fini(
- const char *name,
+ test_context *ctx,
+ const char *type,
+ const char *description,
uint32_t *counters,
size_t active_workers
)
{
+ const char *value_sep;
size_t i;
- printf(" <%s activeWorker=\"%zu\">\n", name, active_workers);
+ if (active_workers == 1) {
+ printf(
+ "%s{\n"
+ " \"type\": \"%s\",\n"
+ " \"description\": \"%s\",\n"
+ " \"counter\": [",
+ ctx->test_sep,
+ type,
+ description
+ );
+ ctx->test_sep = ", ";
+ ctx->counter_sep = "\n ";
+ }
+
+ printf("%s[", ctx->counter_sep);
+ ctx->counter_sep = "],\n ";
+ value_sep = "";
for (i = 0; i < active_workers; ++i) {
printf(
- " <Counter worker=\"%zu\">%" PRIu32 "</Counter>\n",
- i,
+ "%s%" PRIu32,
+ value_sep,
counters[i]
);
+ value_sep = ", ";
}
- printf(" </%s>\n", name);
+ if (active_workers == rtems_scheduler_get_processor_maximum()) {
+ printf("]\n ]\n }");
+ }
}
static void test_self_event_body(
@@ -150,7 +174,9 @@ static void test_self_event_fini(
test_context *ctx = (test_context *) base;
test_fini(
- "SelfEvent",
+ ctx,
+ "event",
+ "Send Event to Self",
&ctx->self_event_ops[active_workers - 1][0],
active_workers
);
@@ -201,7 +227,9 @@ static void test_all_to_one_event_fini(
test_context *ctx = (test_context *) base;
test_fini(
- "AllToOneEvent",
+ ctx,
+ "event",
+ "Send Event to One",
&ctx->all_to_one_event_ops[active_workers - 1][0],
active_workers
);
@@ -242,7 +270,9 @@ static void test_one_mutex_fini(
test_context *ctx = (test_context *) base;
test_fini(
- "OneMutex",
+ ctx,
+ "contested-mutex",
+ "Obtain/Release Contested Classic Inheritance Mutex",
&ctx->one_mutex_ops[active_workers - 1][0],
active_workers
);
@@ -296,7 +326,9 @@ static void test_many_mutex_fini(
test_context *ctx = (test_context *) base;
test_fini(
- "ManyMutex",
+ ctx,
+ "private-mutex",
+ "Obtain/Release Private Classic Inheritance Mutex",
&ctx->many_mutex_ops[active_workers - 1][0],
active_workers
);
@@ -347,7 +379,9 @@ static void test_self_msg_fini(
test_context *ctx = (test_context *) base;
test_fini(
- "SelfMsg",
+ ctx,
+ "message",
+ "Send Message to Self",
&ctx->self_msg_ops[active_workers - 1][0],
active_workers
);
@@ -401,7 +435,9 @@ static void test_many_to_one_msg_fini(
test_context *ctx = (test_context *) base;
test_fini(
- "ManyToOneMsg",
+ ctx,
+ "message",
+ "Send Message to One Receiver",
&ctx->many_to_one_msg_ops[active_workers - 1][0],
active_workers
);
@@ -439,7 +475,9 @@ static void test_many_sys_lock_mutex_fini(
test_context *ctx = (test_context *) base;
test_fini(
- "ManySysLockMutex",
+ ctx,
+ "private-mutex",
+ "Obtain/Release Private <sys/lock.h> Mutex",
&ctx->many_sys_lock_mutex_ops[active_workers - 1][0],
active_workers
);
@@ -493,7 +531,9 @@ static void test_many_classic_ceiling_fini(
test_context *ctx = (test_context *) base;
test_fini(
- "ManyClassicCeilingMutex",
+ ctx,
+ "private-mutex",
+ "Obtain/Release Private Classic Ceiling Mutex",
&ctx->many_classic_ceiling_ops[active_workers - 1][0],
active_workers
);
@@ -548,7 +588,9 @@ static void test_many_classic_mrsp_fini(
test_context *ctx = (test_context *) base;
test_fini(
- "ManyClassicMrsPMutex",
+ ctx,
+ "private-mutex",
+ "Obtain/Release Private Classic MrsP Mutex",
&ctx->many_classic_mrsp_ops[active_workers - 1][0],
active_workers
);
@@ -591,7 +633,9 @@ static void test_many_pthread_spinlock_fini(
test_context *ctx = (test_context *) base;
test_fini(
- "ManyPthreadSpinlock",
+ ctx,
+ "private-mutex",
+ "Obtain/Release Private Pthread Spinlock",
&ctx->many_pthread_spinlock_ops[active_workers - 1][0],
active_workers
);
@@ -645,7 +689,9 @@ static void test_many_pthread_mutex_inherit_fini(
test_context *ctx = (test_context *) base;
test_fini(
- "ManyPthreadMutexInherit",
+ ctx,
+ "private-mutex",
+ "Obtain/Release Private Pthread Inheritance Mutex",
&ctx->many_pthread_mutex_inherit_ops[active_workers - 1][0],
active_workers
);
@@ -705,7 +751,9 @@ static void test_many_pthread_mutex_protect_fini(
test_context *ctx = (test_context *) base;
test_fini(
- "ManyPthreadMutexProtect",
+ ctx,
+ "private-mutex",
+ "Obtain/Release Private Pthread Ceiling Mutex",
&ctx->many_pthread_mutex_protect_ops[active_workers - 1][0],
active_workers
);
@@ -729,11 +777,6 @@ static const rtems_test_parallel_job test_jobs[] = {
.cascade = true
}, {
.init = test_init,
- .body = test_many_mutex_body,
- .fini = test_many_mutex_fini,
- .cascade = true
- }, {
- .init = test_init,
.body = test_self_msg_body,
.fini = test_self_msg_fini,
.cascade = true
@@ -744,33 +787,38 @@ static const rtems_test_parallel_job test_jobs[] = {
.cascade = true
}, {
.init = test_init,
+ .body = test_many_pthread_spinlock_body,
+ .fini = test_many_pthread_spinlock_fini,
+ .cascade = true
+ }, {
+ .init = test_init,
.body = test_many_sys_lock_mutex_body,
.fini = test_many_sys_lock_mutex_fini,
.cascade = true
}, {
.init = test_init,
- .body = test_many_classic_ceiling_body,
- .fini = test_many_classic_ceiling_fini,
+ .body = test_many_pthread_mutex_inherit_body,
+ .fini = test_many_pthread_mutex_inherit_fini,
.cascade = true
}, {
.init = test_init,
- .body = test_many_classic_mrsp_body,
- .fini = test_many_classic_mrsp_fini,
+ .body = test_many_mutex_body,
+ .fini = test_many_mutex_fini,
.cascade = true
}, {
.init = test_init,
- .body = test_many_pthread_spinlock_body,
- .fini = test_many_pthread_spinlock_fini,
+ .body = test_many_pthread_mutex_protect_body,
+ .fini = test_many_pthread_mutex_protect_fini,
.cascade = true
}, {
.init = test_init,
- .body = test_many_pthread_mutex_inherit_body,
- .fini = test_many_pthread_mutex_inherit_fini,
+ .body = test_many_classic_ceiling_body,
+ .fini = test_many_classic_ceiling_fini,
.cascade = true
}, {
.init = test_init,
- .body = test_many_pthread_mutex_protect_body,
- .fini = test_many_pthread_mutex_protect_fini,
+ .body = test_many_classic_mrsp_body,
+ .fini = test_many_classic_mrsp_fini,
.cascade = true
}
};
@@ -778,7 +826,6 @@ static const rtems_test_parallel_job test_jobs[] = {
static void Init(rtems_task_argument arg)
{
test_context *ctx = &test_instance;
- const char *test = "TestTimeFine01";
rtems_status_code sc;
size_t i;
@@ -806,8 +853,9 @@ static void Init(rtems_task_argument arg)
rtems_test_assert(sc == RTEMS_SUCCESSFUL);
}
- printf("<%s>\n", test);
+ printf("*** BEGIN OF JSON DATA ***\n[\n ");
+ ctx->test_sep = "";
rtems_test_parallel(
&ctx->base,
NULL,
@@ -815,7 +863,7 @@ static void Init(rtems_task_argument arg)
RTEMS_ARRAY_SIZE(test_jobs)
);
- printf("</%s>\n", test);
+ printf("\n]\n*** END OF JSON DATA ***\n");
TEST_END();
rtems_test_exit(0);
diff --git a/testsuites/tmtests/tmfine01/tmfine01.py b/testsuites/tmtests/tmfine01/tmfine01.py
index 9345e245c5..54363bee34 100644
--- a/testsuites/tmtests/tmfine01/tmfine01.py
+++ b/testsuites/tmtests/tmfine01/tmfine01.py
@@ -1,9 +1,6 @@
# SPDX-License-Identifier: BSD-2-Clause
-#!/usr/bin/env python
-
-#
-# Copyright (c) 2016 embedded brains GmbH. All rights reserved.
+# Copyright (C) 2016, 2024 embedded brains GmbH & Co. KG
#
# Redistribution and use in source and binary forms, with or without
# modification, are permitted provided that the following conditions
@@ -25,57 +22,41 @@
# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
# POSSIBILITY OF SUCH DAMAGE.
-#
+import json
import re
-import libxml2
-from libxml2 import xmlNode
-import matplotlib.pyplot as plt
-data = open('tmfine01.scn').read()
-data = re.sub(r'\*\*\*.*\*\*\*', '', data)
-doc = libxml2.parseDoc(data)
-ctx = doc.xpathNewContext()
-
-plt.yscale('log')
-plt.title('Uncontested Mutex Performance')
-plt.xlabel('Active Workers')
-plt.ylabel('Operation Count')
-
-def m(n):
- return int(n.getContent())
-
-def getCounterSums(variant):
- w = 1
- y = []
- while True:
- c = map(m, ctx.xpathEval('/TestTimeFine01/' + variant + '[@activeWorker="' + str(w) + '"]/Counter'))
- if not c:
- break
- y.append(sum(c))
- w = w + 1
- return y
-
-y = getCounterSums('ManySysLockMutex')
-x = range(1, len(y) + 1)
-plt.plot(x, y, label = 'Sys Lock Mutex', marker = 'o')
-
-y = getCounterSums('ManyMutex')
-plt.plot(x, y, label = 'Classic Inheritance Mutex', marker = 'o')
-
-y = getCounterSums('ManyClassicCeilingMutex')
-plt.plot(x, y, label = 'Classic Ceiling Mutex', marker = 'o')
-
-y = getCounterSums('ManyClassicMrsPMutex')
-plt.plot(x, y, label = 'Classic MrsP Mutex', marker = 'o')
-
-y = getCounterSums('ManyPthreadSpinlock')
-plt.plot(x, y, label = 'Pthread Spinlock', marker = 'o')
-
-y = getCounterSums('ManyPthreadMutexInherit')
-plt.plot(x, y, label = 'Pthread Mutex Inherit', marker = 'o')
-
-y = getCounterSums('ManyPthreadMutexProtect')
-plt.plot(x, y, label = 'Pthread Mutex Protect', marker = 'o')
-
-plt.legend(loc = 'best')
-plt.show()
+import matplotlib.pyplot as plt # type: ignore
+from matplotlib import ticker # type: ignore
+
+
+def _plot(data: dict) -> None:
+ _, axes = plt.subplots()
+ axes.set_title("Uncontested Mutex Performance")
+ axes.set_xlabel("Active Workers")
+ axes.set_ylabel("Operation Count")
+ x = list(range(1, len(data[0]["counter"]) + 1))
+ axes.xaxis.set_major_locator(ticker.FixedLocator(x))
+ for samples in data:
+ if samples["type"] != "private-mutex":
+ continue
+ y = [sum(values) for values in samples["counter"]]
+ axes.plot(x,
+ y,
+ label=samples["description"].replace(
+ "Obtain/Release Private ", ""),
+ marker="o")
+ axes.legend(loc="best")
+ plt.savefig("tmfine01.png")
+ plt.savefig("tmfine01.pdf")
+ plt.close()
+
+
+_JSON_DATA = re.compile(
+ r"\*\*\* BEGIN OF JSON DATA \*\*\*(.*)"
+ r"\*\*\* END OF JSON DATA \*\*\*", re.DOTALL)
+
+with open("tmfine01.scn", "r", encoding="utf-8") as src:
+ match = _JSON_DATA.search(src.read())
+ data = json.loads(match.group(1))
+
+_plot(data)
diff --git a/testsuites/tmtests/tmfine01/tmfine01.scn b/testsuites/tmtests/tmfine01/tmfine01.scn
index e3dfd7757f..cf356f0806 100644
--- a/testsuites/tmtests/tmfine01/tmfine01.scn
+++ b/testsuites/tmtests/tmfine01/tmfine01.scn
@@ -1,4180 +1,132 @@
+
+ SIS - SPARC/RISCV instruction simulator 2.30, copyright Jiri Gaisler 2020
+ Bug-reports to jiri@gaisler.se
+
+ GR740/LEON4 emulation enabled, 4 cpus online, delta 50 clocks
+
+ Loaded build/sparc/gr740/testsuites/tmtests/tmfine01.exe, entry 0x00000000
+
+
*** BEGIN OF TEST TMFINE 1 ***
-<TestTimeFine01>
- <SelfEvent activeWorker="1">
- <Counter worker="0">4676131</Counter>
- </SelfEvent>
- <SelfEvent activeWorker="2">
- <Counter worker="0">4641176</Counter>
- <Counter worker="1">4641467</Counter>
- </SelfEvent>
- <SelfEvent activeWorker="3">
- <Counter worker="0">4588420</Counter>
- <Counter worker="1">4588713</Counter>
- <Counter worker="2">4588730</Counter>
- </SelfEvent>
- <SelfEvent activeWorker="4">
- <Counter worker="0">4552423</Counter>
- <Counter worker="1">4552717</Counter>
- <Counter worker="2">4552773</Counter>
- <Counter worker="3">4552785</Counter>
- </SelfEvent>
- <SelfEvent activeWorker="5">
- <Counter worker="0">4503050</Counter>
- <Counter worker="1">4503310</Counter>
- <Counter worker="2">4503408</Counter>
- <Counter worker="3">4503447</Counter>
- <Counter worker="4">4503380</Counter>
- </SelfEvent>
- <SelfEvent activeWorker="6">
- <Counter worker="0">4506318</Counter>
- <Counter worker="1">4506592</Counter>
- <Counter worker="2">4506673</Counter>
- <Counter worker="3">4506688</Counter>
- <Counter worker="4">4506663</Counter>
- <Counter worker="5">4506666</Counter>
- </SelfEvent>
- <SelfEvent activeWorker="7">
- <Counter worker="0">4479255</Counter>
- <Counter worker="1">4479516</Counter>
- <Counter worker="2">4479651</Counter>
- <Counter worker="3">4479614</Counter>
- <Counter worker="4">4479578</Counter>
- <Counter worker="5">4479616</Counter>
- <Counter worker="6">4479670</Counter>
- </SelfEvent>
- <SelfEvent activeWorker="8">
- <Counter worker="0">4430941</Counter>
- <Counter worker="1">4431230</Counter>
- <Counter worker="2">4431182</Counter>
- <Counter worker="3">4431299</Counter>
- <Counter worker="4">4430884</Counter>
- <Counter worker="5">4430883</Counter>
- <Counter worker="6">4431032</Counter>
- <Counter worker="7">4431022</Counter>
- </SelfEvent>
- <SelfEvent activeWorker="9">
- <Counter worker="0">4448824</Counter>
- <Counter worker="1">4449100</Counter>
- <Counter worker="2">4448994</Counter>
- <Counter worker="3">4449146</Counter>
- <Counter worker="4">4448725</Counter>
- <Counter worker="5">4448726</Counter>
- <Counter worker="6">4448812</Counter>
- <Counter worker="7">4448856</Counter>
- <Counter worker="8">4683748</Counter>
- </SelfEvent>
- <SelfEvent activeWorker="10">
- <Counter worker="0">4434217</Counter>
- <Counter worker="1">4434522</Counter>
- <Counter worker="2">4434464</Counter>
- <Counter worker="3">4434566</Counter>
- <Counter worker="4">4434201</Counter>
- <Counter worker="5">4434183</Counter>
- <Counter worker="6">4434380</Counter>
- <Counter worker="7">4434377</Counter>
- <Counter worker="8">4645492</Counter>
- <Counter worker="9">4645490</Counter>
- </SelfEvent>
- <SelfEvent activeWorker="11">
- <Counter worker="0">4462864</Counter>
- <Counter worker="1">4463155</Counter>
- <Counter worker="2">4463110</Counter>
- <Counter worker="3">4463229</Counter>
- <Counter worker="4">4462874</Counter>
- <Counter worker="5">4462844</Counter>
- <Counter worker="6">4462957</Counter>
- <Counter worker="7">4462977</Counter>
- <Counter worker="8">4590235</Counter>
- <Counter worker="9">4590243</Counter>
- <Counter worker="10">4590208</Counter>
- </SelfEvent>
- <SelfEvent activeWorker="12">
- <Counter worker="0">4448372</Counter>
- <Counter worker="1">4448670</Counter>
- <Counter worker="2">4448618</Counter>
- <Counter worker="3">4448756</Counter>
- <Counter worker="4">4448391</Counter>
- <Counter worker="5">4448389</Counter>
- <Counter worker="6">4448491</Counter>
- <Counter worker="7">4448501</Counter>
- <Counter worker="8">4552401</Counter>
- <Counter worker="9">4552390</Counter>
- <Counter worker="10">4552353</Counter>
- <Counter worker="11">4552386</Counter>
- </SelfEvent>
- <SelfEvent activeWorker="13">
- <Counter worker="0">4427993</Counter>
- <Counter worker="1">4428270</Counter>
- <Counter worker="2">4428290</Counter>
- <Counter worker="3">4428406</Counter>
- <Counter worker="4">4428081</Counter>
- <Counter worker="5">4428077</Counter>
- <Counter worker="6">4428183</Counter>
- <Counter worker="7">4428187</Counter>
- <Counter worker="8">4507321</Counter>
- <Counter worker="9">4507322</Counter>
- <Counter worker="10">4507311</Counter>
- <Counter worker="11">4507332</Counter>
- <Counter worker="12">4507311</Counter>
- </SelfEvent>
- <SelfEvent activeWorker="14">
- <Counter worker="0">4456343</Counter>
- <Counter worker="1">4456632</Counter>
- <Counter worker="2">4456672</Counter>
- <Counter worker="3">4456758</Counter>
- <Counter worker="4">4456495</Counter>
- <Counter worker="5">4456482</Counter>
- <Counter worker="6">4456584</Counter>
- <Counter worker="7">4456575</Counter>
- <Counter worker="8">4507973</Counter>
- <Counter worker="9">4507951</Counter>
- <Counter worker="10">4507951</Counter>
- <Counter worker="11">4507937</Counter>
- <Counter worker="12">4507952</Counter>
- <Counter worker="13">4507971</Counter>
- </SelfEvent>
- <SelfEvent activeWorker="15">
- <Counter worker="0">4441428</Counter>
- <Counter worker="1">4441718</Counter>
- <Counter worker="2">4441692</Counter>
- <Counter worker="3">4441802</Counter>
- <Counter worker="4">4441407</Counter>
- <Counter worker="5">4441408</Counter>
- <Counter worker="6">4441556</Counter>
- <Counter worker="7">4441569</Counter>
- <Counter worker="8">4478368</Counter>
- <Counter worker="9">4478360</Counter>
- <Counter worker="10">4478594</Counter>
- <Counter worker="11">4478573</Counter>
- <Counter worker="12">4478347</Counter>
- <Counter worker="13">4478367</Counter>
- <Counter worker="14">4478443</Counter>
- </SelfEvent>
- <SelfEvent activeWorker="16">
- <Counter worker="0">4470668</Counter>
- <Counter worker="1">4470970</Counter>
- <Counter worker="2">4470950</Counter>
- <Counter worker="3">4471049</Counter>
- <Counter worker="4">4470638</Counter>
- <Counter worker="5">4470599</Counter>
- <Counter worker="6">4470866</Counter>
- <Counter worker="7">4470888</Counter>
- <Counter worker="8">4462941</Counter>
- <Counter worker="9">4462934</Counter>
- <Counter worker="10">4462925</Counter>
- <Counter worker="11">4463059</Counter>
- <Counter worker="12">4462612</Counter>
- <Counter worker="13">4462636</Counter>
- <Counter worker="14">4462669</Counter>
- <Counter worker="15">4462676</Counter>
- </SelfEvent>
- <SelfEvent activeWorker="17">
- <Counter worker="0">4451094</Counter>
- <Counter worker="1">4451396</Counter>
- <Counter worker="2">4451343</Counter>
- <Counter worker="3">4451471</Counter>
- <Counter worker="4">4451083</Counter>
- <Counter worker="5">4451099</Counter>
- <Counter worker="6">4451193</Counter>
- <Counter worker="7">4451191</Counter>
- <Counter worker="8">4450420</Counter>
- <Counter worker="9">4450424</Counter>
- <Counter worker="10">4450398</Counter>
- <Counter worker="11">4450533</Counter>
- <Counter worker="12">4450111</Counter>
- <Counter worker="13">4450105</Counter>
- <Counter worker="14">4450218</Counter>
- <Counter worker="15">4450237</Counter>
- <Counter worker="16">4682169</Counter>
- </SelfEvent>
- <SelfEvent activeWorker="18">
- <Counter worker="0">4435091</Counter>
- <Counter worker="1">4435372</Counter>
- <Counter worker="2">4435353</Counter>
- <Counter worker="3">4435493</Counter>
- <Counter worker="4">4435073</Counter>
- <Counter worker="5">4435101</Counter>
- <Counter worker="6">4435297</Counter>
- <Counter worker="7">4435279</Counter>
- <Counter worker="8">4435219</Counter>
- <Counter worker="9">4435244</Counter>
- <Counter worker="10">4435166</Counter>
- <Counter worker="11">4435291</Counter>
- <Counter worker="12">4434894</Counter>
- <Counter worker="13">4434866</Counter>
- <Counter worker="14">4435038</Counter>
- <Counter worker="15">4435019</Counter>
- <Counter worker="16">4644910</Counter>
- <Counter worker="17">4644922</Counter>
- </SelfEvent>
- <SelfEvent activeWorker="19">
- <Counter worker="0">4467049</Counter>
- <Counter worker="1">4467345</Counter>
- <Counter worker="2">4467193</Counter>
- <Counter worker="3">4467343</Counter>
- <Counter worker="4">4466881</Counter>
- <Counter worker="5">4466868</Counter>
- <Counter worker="6">4466971</Counter>
- <Counter worker="7">4466993</Counter>
- <Counter worker="8">4457734</Counter>
- <Counter worker="9">4457707</Counter>
- <Counter worker="10">4457717</Counter>
- <Counter worker="11">4457828</Counter>
- <Counter worker="12">4457399</Counter>
- <Counter worker="13">4457360</Counter>
- <Counter worker="14">4457515</Counter>
- <Counter worker="15">4457488</Counter>
- <Counter worker="16">4585770</Counter>
- <Counter worker="17">4585760</Counter>
- <Counter worker="18">4585688</Counter>
- </SelfEvent>
- <SelfEvent activeWorker="20">
- <Counter worker="0">4446007</Counter>
- <Counter worker="1">4446279</Counter>
- <Counter worker="2">4446256</Counter>
- <Counter worker="3">4446376</Counter>
- <Counter worker="4">4445955</Counter>
- <Counter worker="5">4445940</Counter>
- <Counter worker="6">4446119</Counter>
- <Counter worker="7">4446087</Counter>
- <Counter worker="8">4445074</Counter>
- <Counter worker="9">4445042</Counter>
- <Counter worker="10">4444971</Counter>
- <Counter worker="11">4445114</Counter>
- <Counter worker="12">4444692</Counter>
- <Counter worker="13">4444706</Counter>
- <Counter worker="14">4444765</Counter>
- <Counter worker="15">4444747</Counter>
- <Counter worker="16">4548340</Counter>
- <Counter worker="17">4548325</Counter>
- <Counter worker="18">4548353</Counter>
- <Counter worker="19">4548347</Counter>
- </SelfEvent>
- <SelfEvent activeWorker="21">
- <Counter worker="0">4427980</Counter>
- <Counter worker="1">4428254</Counter>
- <Counter worker="2">4428184</Counter>
- <Counter worker="3">4428372</Counter>
- <Counter worker="4">4427834</Counter>
- <Counter worker="5">4427816</Counter>
- <Counter worker="6">4427990</Counter>
- <Counter worker="7">4428014</Counter>
- <Counter worker="8">4427634</Counter>
- <Counter worker="9">4427642</Counter>
- <Counter worker="10">4427639</Counter>
- <Counter worker="11">4427737</Counter>
- <Counter worker="12">4427339</Counter>
- <Counter worker="13">4427323</Counter>
- <Counter worker="14">4427446</Counter>
- <Counter worker="15">4427427</Counter>
- <Counter worker="16">4504730</Counter>
- <Counter worker="17">4504744</Counter>
- <Counter worker="18">4504739</Counter>
- <Counter worker="19">4504744</Counter>
- <Counter worker="20">4504678</Counter>
- </SelfEvent>
- <SelfEvent activeWorker="22">
- <Counter worker="0">4452075</Counter>
- <Counter worker="1">4452381</Counter>
- <Counter worker="2">4452154</Counter>
- <Counter worker="3">4452302</Counter>
- <Counter worker="4">4451944</Counter>
- <Counter worker="5">4451919</Counter>
- <Counter worker="6">4451965</Counter>
- <Counter worker="7">4452004</Counter>
- <Counter worker="8">4451917</Counter>
- <Counter worker="9">4451934</Counter>
- <Counter worker="10">4451935</Counter>
- <Counter worker="11">4452019</Counter>
- <Counter worker="12">4451627</Counter>
- <Counter worker="13">4451630</Counter>
- <Counter worker="14">4451689</Counter>
- <Counter worker="15">4451672</Counter>
- <Counter worker="16">4506836</Counter>
- <Counter worker="17">4506837</Counter>
- <Counter worker="18">4506830</Counter>
- <Counter worker="19">4506828</Counter>
- <Counter worker="20">4506811</Counter>
- <Counter worker="21">4506822</Counter>
- </SelfEvent>
- <SelfEvent activeWorker="23">
- <Counter worker="0">4435063</Counter>
- <Counter worker="1">4435355</Counter>
- <Counter worker="2">4435353</Counter>
- <Counter worker="3">4435496</Counter>
- <Counter worker="4">4435090</Counter>
- <Counter worker="5">4435092</Counter>
- <Counter worker="6">4435188</Counter>
- <Counter worker="7">4435200</Counter>
- <Counter worker="8">4432230</Counter>
- <Counter worker="9">4432253</Counter>
- <Counter worker="10">4432620</Counter>
- <Counter worker="11">4432748</Counter>
- <Counter worker="12">4431935</Counter>
- <Counter worker="13">4431916</Counter>
- <Counter worker="14">4432042</Counter>
- <Counter worker="15">4432055</Counter>
- <Counter worker="16">4476758</Counter>
- <Counter worker="17">4476739</Counter>
- <Counter worker="18">4476783</Counter>
- <Counter worker="19">4476776</Counter>
- <Counter worker="20">4476730</Counter>
- <Counter worker="21">4476742</Counter>
- <Counter worker="22">4476861</Counter>
- </SelfEvent>
- <SelfEvent activeWorker="24">
- <Counter worker="0">4462678</Counter>
- <Counter worker="1">4462968</Counter>
- <Counter worker="2">4462933</Counter>
- <Counter worker="3">4463030</Counter>
- <Counter worker="4">4462726</Counter>
- <Counter worker="5">4462724</Counter>
- <Counter worker="6">4462873</Counter>
- <Counter worker="7">4462866</Counter>
- <Counter worker="8">4464841</Counter>
- <Counter worker="9">4464847</Counter>
- <Counter worker="10">4464793</Counter>
- <Counter worker="11">4464948</Counter>
- <Counter worker="12">4464503</Counter>
- <Counter worker="13">4464493</Counter>
- <Counter worker="14">4464580</Counter>
- <Counter worker="15">4464597</Counter>
- <Counter worker="16">4475030</Counter>
- <Counter worker="17">4475042</Counter>
- <Counter worker="18">4474978</Counter>
- <Counter worker="19">4475018</Counter>
- <Counter worker="20">4474858</Counter>
- <Counter worker="21">4474851</Counter>
- <Counter worker="22">4475125</Counter>
- <Counter worker="23">4475172</Counter>
- </SelfEvent>
- <AllToOneEvent activeWorker="1">
- <Counter worker="0">4512749</Counter>
- </AllToOneEvent>
- <AllToOneEvent activeWorker="2">
- <Counter worker="0">4478766</Counter>
- <Counter worker="1">8957974</Counter>
- </AllToOneEvent>
- <AllToOneEvent activeWorker="3">
- <Counter worker="0">4507485</Counter>
- <Counter worker="1">9015419</Counter>
- <Counter worker="2">9015694</Counter>
- </AllToOneEvent>
- <AllToOneEvent activeWorker="4">
- <Counter worker="0">4404320</Counter>
- <Counter worker="1">8809091</Counter>
- <Counter worker="2">8809371</Counter>
- <Counter worker="3">8809388</Counter>
- </AllToOneEvent>
- <AllToOneEvent activeWorker="5">
- <Counter worker="0">4380598</Counter>
- <Counter worker="1">8788711</Counter>
- <Counter worker="2">8768400</Counter>
- <Counter worker="3">8768539</Counter>
- <Counter worker="4">8947075</Counter>
- </AllToOneEvent>
- <AllToOneEvent activeWorker="6">
- <Counter worker="0">4384177</Counter>
- <Counter worker="1">8775468</Counter>
- <Counter worker="2">8770900</Counter>
- <Counter worker="3">8771021</Counter>
- <Counter worker="4">8778460</Counter>
- <Counter worker="5">8778497</Counter>
- </AllToOneEvent>
- <AllToOneEvent activeWorker="7">
- <Counter worker="0">4375929</Counter>
- <Counter worker="1">8753666</Counter>
- <Counter worker="2">8752767</Counter>
- <Counter worker="3">8752874</Counter>
- <Counter worker="4">8753367</Counter>
- <Counter worker="5">8753374</Counter>
- <Counter worker="6">8840563</Counter>
- </AllToOneEvent>
- <AllToOneEvent activeWorker="8">
- <Counter worker="0">4347550</Counter>
- <Counter worker="1">8697434</Counter>
- <Counter worker="2">8696453</Counter>
- <Counter worker="3">8696601</Counter>
- <Counter worker="4">8697025</Counter>
- <Counter worker="5">8696969</Counter>
- <Counter worker="6">8696444</Counter>
- <Counter worker="7">8696417</Counter>
- </AllToOneEvent>
- <AllToOneEvent activeWorker="9">
- <Counter worker="0">4328236</Counter>
- <Counter worker="1">8682051</Counter>
- <Counter worker="2">8671656</Counter>
- <Counter worker="3">8671719</Counter>
- <Counter worker="4">8674666</Counter>
- <Counter worker="5">8674727</Counter>
- <Counter worker="6">8670649</Counter>
- <Counter worker="7">8667287</Counter>
- <Counter worker="8">9254597</Counter>
- </AllToOneEvent>
- <AllToOneEvent activeWorker="10">
- <Counter worker="0">4311205</Counter>
- <Counter worker="1">8653563</Counter>
- <Counter worker="2">8640229</Counter>
- <Counter worker="3">8640342</Counter>
- <Counter worker="4">8643904</Counter>
- <Counter worker="5">8643865</Counter>
- <Counter worker="6">8639106</Counter>
- <Counter worker="7">8634769</Counter>
- <Counter worker="8">9212001</Counter>
- <Counter worker="9">9212064</Counter>
- </AllToOneEvent>
- <AllToOneEvent activeWorker="11">
- <Counter worker="0">4338650</Counter>
- <Counter worker="1">8703013</Counter>
- <Counter worker="2">8692866</Counter>
- <Counter worker="3">8692981</Counter>
- <Counter worker="4">8695787</Counter>
- <Counter worker="5">8695808</Counter>
- <Counter worker="6">8691894</Counter>
- <Counter worker="7">8687943</Counter>
- <Counter worker="8">9103496</Counter>
- <Counter worker="9">9103489</Counter>
- <Counter worker="10">9103538</Counter>
- </AllToOneEvent>
- <AllToOneEvent activeWorker="12">
- <Counter worker="0">4326588</Counter>
- <Counter worker="1">8680078</Counter>
- <Counter worker="2">8669077</Counter>
- <Counter worker="3">8669207</Counter>
- <Counter worker="4">8672685</Counter>
- <Counter worker="5">8672667</Counter>
- <Counter worker="6">8667903</Counter>
- <Counter worker="7">8664528</Counter>
- <Counter worker="8">8907170</Counter>
- <Counter worker="9">8907137</Counter>
- <Counter worker="10">8907177</Counter>
- <Counter worker="11">8907256</Counter>
- </AllToOneEvent>
- <AllToOneEvent activeWorker="13">
- <Counter worker="0">4309927</Counter>
- <Counter worker="1">8643768</Counter>
- <Counter worker="2">8634342</Counter>
- <Counter worker="3">8634451</Counter>
- <Counter worker="4">8636838</Counter>
- <Counter worker="5">8636892</Counter>
- <Counter worker="6">8633550</Counter>
- <Counter worker="7">8629506</Counter>
- <Counter worker="8">8899997</Counter>
- <Counter worker="9">8900014</Counter>
- <Counter worker="10">8900104</Counter>
- <Counter worker="11">8900144</Counter>
- <Counter worker="12">8900125</Counter>
- </AllToOneEvent>
- <AllToOneEvent activeWorker="14">
- <Counter worker="0">4335662</Counter>
- <Counter worker="1">8700274</Counter>
- <Counter worker="2">8688657</Counter>
- <Counter worker="3">8688789</Counter>
- <Counter worker="4">8692110</Counter>
- <Counter worker="5">8692102</Counter>
- <Counter worker="6">8687544</Counter>
- <Counter worker="7">8683259</Counter>
- <Counter worker="8">8808142</Counter>
- <Counter worker="9">8808143</Counter>
- <Counter worker="10">8808118</Counter>
- <Counter worker="11">8808151</Counter>
- <Counter worker="12">8808088</Counter>
- <Counter worker="13">8808120</Counter>
- </AllToOneEvent>
- <AllToOneEvent activeWorker="15">
- <Counter worker="0">4314045</Counter>
- <Counter worker="1">8661973</Counter>
- <Counter worker="2">8648592</Counter>
- <Counter worker="3">8648764</Counter>
- <Counter worker="4">8652271</Counter>
- <Counter worker="5">8652318</Counter>
- <Counter worker="6">8647390</Counter>
- <Counter worker="7">8641916</Counter>
- <Counter worker="8">8797415</Counter>
- <Counter worker="9">8797422</Counter>
- <Counter worker="10">8797305</Counter>
- <Counter worker="11">8797328</Counter>
- <Counter worker="12">8797322</Counter>
- <Counter worker="13">8797357</Counter>
- <Counter worker="14">8802341</Counter>
- </AllToOneEvent>
- <AllToOneEvent activeWorker="16">
- <Counter worker="0">4346816</Counter>
- <Counter worker="1">8715982</Counter>
- <Counter worker="2">8706981</Counter>
- <Counter worker="3">8707143</Counter>
- <Counter worker="4">8708920</Counter>
- <Counter worker="5">8708960</Counter>
- <Counter worker="6">8706447</Counter>
- <Counter worker="7">8703043</Counter>
- <Counter worker="8">8712344</Counter>
- <Counter worker="9">8712289</Counter>
- <Counter worker="10">8712131</Counter>
- <Counter worker="11">8712215</Counter>
- <Counter worker="12">8712289</Counter>
- <Counter worker="13">8712244</Counter>
- <Counter worker="14">8712147</Counter>
- <Counter worker="15">8712227</Counter>
- </AllToOneEvent>
- <AllToOneEvent activeWorker="17">
- <Counter worker="0">4325645</Counter>
- <Counter worker="1">8685016</Counter>
- <Counter worker="2">8671607</Counter>
- <Counter worker="3">8671728</Counter>
- <Counter worker="4">8675196</Counter>
- <Counter worker="5">8675203</Counter>
- <Counter worker="6">8670269</Counter>
- <Counter worker="7">8665153</Counter>
- <Counter worker="8">8673438</Counter>
- <Counter worker="9">8673444</Counter>
- <Counter worker="10">8673183</Counter>
- <Counter worker="11">8673276</Counter>
- <Counter worker="12">8673321</Counter>
- <Counter worker="13">8673304</Counter>
- <Counter worker="14">8673230</Counter>
- <Counter worker="15">8673240</Counter>
- <Counter worker="16">9251521</Counter>
- </AllToOneEvent>
- <AllToOneEvent activeWorker="18">
- <Counter worker="0">4309289</Counter>
- <Counter worker="1">8647898</Counter>
- <Counter worker="2">8636314</Counter>
- <Counter worker="3">8636411</Counter>
- <Counter worker="4">8639557</Counter>
- <Counter worker="5">8639645</Counter>
- <Counter worker="6">8635149</Counter>
- <Counter worker="7">8630636</Counter>
- <Counter worker="8">8641335</Counter>
- <Counter worker="9">8641320</Counter>
- <Counter worker="10">8641131</Counter>
- <Counter worker="11">8641178</Counter>
- <Counter worker="12">8641173</Counter>
- <Counter worker="13">8641229</Counter>
- <Counter worker="14">8641116</Counter>
- <Counter worker="15">8641130</Counter>
- <Counter worker="16">9208457</Counter>
- <Counter worker="17">9208447</Counter>
- </AllToOneEvent>
- <AllToOneEvent activeWorker="19">
- <Counter worker="0">4339177</Counter>
- <Counter worker="1">8712486</Counter>
- <Counter worker="2">8698865</Counter>
- <Counter worker="3">8699011</Counter>
- <Counter worker="4">8702321</Counter>
- <Counter worker="5">8702299</Counter>
- <Counter worker="6">8697706</Counter>
- <Counter worker="7">8692411</Counter>
- <Counter worker="8">8691700</Counter>
- <Counter worker="9">8691718</Counter>
- <Counter worker="10">8691530</Counter>
- <Counter worker="11">8691574</Counter>
- <Counter worker="12">8691598</Counter>
- <Counter worker="13">8691595</Counter>
- <Counter worker="14">8691515</Counter>
- <Counter worker="15">8691555</Counter>
- <Counter worker="16">9098995</Counter>
- <Counter worker="17">9098975</Counter>
- <Counter worker="18">9098976</Counter>
- </AllToOneEvent>
- <AllToOneEvent activeWorker="20">
- <Counter worker="0">4323231</Counter>
- <Counter worker="1">8670659</Counter>
- <Counter worker="2">8660830</Counter>
- <Counter worker="3">8660891</Counter>
- <Counter worker="4">8663710</Counter>
- <Counter worker="5">8663717</Counter>
- <Counter worker="6">8659875</Counter>
- <Counter worker="7">8656639</Counter>
- <Counter worker="8">8654156</Counter>
- <Counter worker="9">8654183</Counter>
- <Counter worker="10">8654050</Counter>
- <Counter worker="11">8654092</Counter>
- <Counter worker="12">8654106</Counter>
- <Counter worker="13">8654141</Counter>
- <Counter worker="14">8654084</Counter>
- <Counter worker="15">8654064</Counter>
- <Counter worker="16">8891464</Counter>
- <Counter worker="17">8891387</Counter>
- <Counter worker="18">8891423</Counter>
- <Counter worker="19">8891522</Counter>
- </AllToOneEvent>
- <AllToOneEvent activeWorker="21">
- <Counter worker="0">4306028</Counter>
- <Counter worker="1">8633314</Counter>
- <Counter worker="2">8624564</Counter>
- <Counter worker="3">8624678</Counter>
- <Counter worker="4">8627581</Counter>
- <Counter worker="5">8627623</Counter>
- <Counter worker="6">8623580</Counter>
- <Counter worker="7">8621273</Counter>
- <Counter worker="8">8630481</Counter>
- <Counter worker="9">8630453</Counter>
- <Counter worker="10">8630282</Counter>
- <Counter worker="11">8630331</Counter>
- <Counter worker="12">8630383</Counter>
- <Counter worker="13">8630377</Counter>
- <Counter worker="14">8630254</Counter>
- <Counter worker="15">8630302</Counter>
- <Counter worker="16">8882786</Counter>
- <Counter worker="17">8882786</Counter>
- <Counter worker="18">8882842</Counter>
- <Counter worker="19">8882888</Counter>
- <Counter worker="20">8901459</Counter>
- </AllToOneEvent>
- <AllToOneEvent activeWorker="22">
- <Counter worker="0">4332214</Counter>
- <Counter worker="1">8694309</Counter>
- <Counter worker="2">8682276</Counter>
- <Counter worker="3">8682411</Counter>
- <Counter worker="4">8685904</Counter>
- <Counter worker="5">8685918</Counter>
- <Counter worker="6">8681134</Counter>
- <Counter worker="7">8676778</Counter>
- <Counter worker="8">8690139</Counter>
- <Counter worker="9">8690092</Counter>
- <Counter worker="10">8689940</Counter>
- <Counter worker="11">8689995</Counter>
- <Counter worker="12">8690031</Counter>
- <Counter worker="13">8690036</Counter>
- <Counter worker="14">8689958</Counter>
- <Counter worker="15">8689930</Counter>
- <Counter worker="16">8792896</Counter>
- <Counter worker="17">8792916</Counter>
- <Counter worker="18">8792896</Counter>
- <Counter worker="19">8792966</Counter>
- <Counter worker="20">8792943</Counter>
- <Counter worker="21">8792939</Counter>
- </AllToOneEvent>
- <AllToOneEvent activeWorker="23">
- <Counter worker="0">4316784</Counter>
- <Counter worker="1">8662468</Counter>
- <Counter worker="2">8650651</Counter>
- <Counter worker="3">8650782</Counter>
- <Counter worker="4">8654092</Counter>
- <Counter worker="5">8654022</Counter>
- <Counter worker="6">8649506</Counter>
- <Counter worker="7">8645904</Counter>
- <Counter worker="8">8639667</Counter>
- <Counter worker="9">8639654</Counter>
- <Counter worker="10">8639505</Counter>
- <Counter worker="11">8639593</Counter>
- <Counter worker="12">8639683</Counter>
- <Counter worker="13">8639686</Counter>
- <Counter worker="14">8639487</Counter>
- <Counter worker="15">8639547</Counter>
- <Counter worker="16">8786893</Counter>
- <Counter worker="17">8786917</Counter>
- <Counter worker="18">8786678</Counter>
- <Counter worker="19">8786756</Counter>
- <Counter worker="20">8786878</Counter>
- <Counter worker="21">8786879</Counter>
- <Counter worker="22">8794112</Counter>
- </AllToOneEvent>
- <AllToOneEvent activeWorker="24">
- <Counter worker="0">4340462</Counter>
- <Counter worker="1">8708543</Counter>
- <Counter worker="2">8696739</Counter>
- <Counter worker="3">8696800</Counter>
- <Counter worker="4">8699717</Counter>
- <Counter worker="5">8699709</Counter>
- <Counter worker="6">8695657</Counter>
- <Counter worker="7">8691968</Counter>
- <Counter worker="8">8714142</Counter>
- <Counter worker="9">8714066</Counter>
- <Counter worker="10">8714016</Counter>
- <Counter worker="11">8714062</Counter>
- <Counter worker="12">8714040</Counter>
- <Counter worker="13">8714116</Counter>
- <Counter worker="14">8714041</Counter>
- <Counter worker="15">8714021</Counter>
- <Counter worker="16">8722288</Counter>
- <Counter worker="17">8722251</Counter>
- <Counter worker="18">8722033</Counter>
- <Counter worker="19">8722156</Counter>
- <Counter worker="20">8722336</Counter>
- <Counter worker="21">8722308</Counter>
- <Counter worker="22">8722297</Counter>
- <Counter worker="23">8722331</Counter>
- </AllToOneEvent>
- <OneMutex activeWorker="1">
- <Counter worker="0">4931822</Counter>
- </OneMutex>
- <OneMutex activeWorker="2">
- <Counter worker="0">245503</Counter>
- <Counter worker="1">245503</Counter>
- </OneMutex>
- <OneMutex activeWorker="3">
- <Counter worker="0">68887</Counter>
- <Counter worker="1">68887</Counter>
- <Counter worker="2">68886</Counter>
- </OneMutex>
- <OneMutex activeWorker="4">
- <Counter worker="0">65075</Counter>
- <Counter worker="1">65075</Counter>
- <Counter worker="2">65075</Counter>
- <Counter worker="3">65075</Counter>
- </OneMutex>
- <OneMutex activeWorker="5">
- <Counter worker="0">39944</Counter>
- <Counter worker="1">39944</Counter>
- <Counter worker="2">39944</Counter>
- <Counter worker="3">39945</Counter>
- <Counter worker="4">39944</Counter>
- </OneMutex>
- <OneMutex activeWorker="6">
- <Counter worker="0">49925</Counter>
- <Counter worker="1">49925</Counter>
- <Counter worker="2">49924</Counter>
- <Counter worker="3">49925</Counter>
- <Counter worker="4">49924</Counter>
- <Counter worker="5">49925</Counter>
- </OneMutex>
- <OneMutex activeWorker="7">
- <Counter worker="0">27616</Counter>
- <Counter worker="1">27615</Counter>
- <Counter worker="2">27616</Counter>
- <Counter worker="3">27616</Counter>
- <Counter worker="4">27616</Counter>
- <Counter worker="5">27615</Counter>
- <Counter worker="6">27615</Counter>
- </OneMutex>
- <OneMutex activeWorker="8">
- <Counter worker="0">22376</Counter>
- <Counter worker="1">22377</Counter>
- <Counter worker="2">22377</Counter>
- <Counter worker="3">22376</Counter>
- <Counter worker="4">22377</Counter>
- <Counter worker="5">22376</Counter>
- <Counter worker="6">22377</Counter>
- <Counter worker="7">22377</Counter>
- </OneMutex>
- <OneMutex activeWorker="9">
- <Counter worker="0">19838</Counter>
- <Counter worker="1">19838</Counter>
- <Counter worker="2">19838</Counter>
- <Counter worker="3">19838</Counter>
- <Counter worker="4">19838</Counter>
- <Counter worker="5">19838</Counter>
- <Counter worker="6">19838</Counter>
- <Counter worker="7">19838</Counter>
- <Counter worker="8">19838</Counter>
- </OneMutex>
- <OneMutex activeWorker="10">
- <Counter worker="0">12036</Counter>
- <Counter worker="1">12036</Counter>
- <Counter worker="2">12036</Counter>
- <Counter worker="3">12036</Counter>
- <Counter worker="4">12037</Counter>
- <Counter worker="5">12037</Counter>
- <Counter worker="6">12036</Counter>
- <Counter worker="7">12037</Counter>
- <Counter worker="8">12036</Counter>
- <Counter worker="9">12036</Counter>
- </OneMutex>
- <OneMutex activeWorker="11">
- <Counter worker="0">14679</Counter>
- <Counter worker="1">14679</Counter>
- <Counter worker="2">14679</Counter>
- <Counter worker="3">14679</Counter>
- <Counter worker="4">14679</Counter>
- <Counter worker="5">14679</Counter>
- <Counter worker="6">14679</Counter>
- <Counter worker="7">14679</Counter>
- <Counter worker="8">14679</Counter>
- <Counter worker="9">14678</Counter>
- <Counter worker="10">14679</Counter>
- </OneMutex>
- <OneMutex activeWorker="12">
- <Counter worker="0">9715</Counter>
- <Counter worker="1">9715</Counter>
- <Counter worker="2">9715</Counter>
- <Counter worker="3">9714</Counter>
- <Counter worker="4">9714</Counter>
- <Counter worker="5">9714</Counter>
- <Counter worker="6">9714</Counter>
- <Counter worker="7">9715</Counter>
- <Counter worker="8">9714</Counter>
- <Counter worker="9">9714</Counter>
- <Counter worker="10">9715</Counter>
- <Counter worker="11">9714</Counter>
- </OneMutex>
- <OneMutex activeWorker="13">
- <Counter worker="0">8614</Counter>
- <Counter worker="1">8614</Counter>
- <Counter worker="2">8614</Counter>
- <Counter worker="3">8614</Counter>
- <Counter worker="4">8613</Counter>
- <Counter worker="5">8613</Counter>
- <Counter worker="6">8615</Counter>
- <Counter worker="7">8613</Counter>
- <Counter worker="8">8613</Counter>
- <Counter worker="9">8613</Counter>
- <Counter worker="10">8613</Counter>
- <Counter worker="11">8613</Counter>
- <Counter worker="12">8614</Counter>
- </OneMutex>
- <OneMutex activeWorker="14">
- <Counter worker="0">8930</Counter>
- <Counter worker="1">8929</Counter>
- <Counter worker="2">8929</Counter>
- <Counter worker="3">8930</Counter>
- <Counter worker="4">8930</Counter>
- <Counter worker="5">8930</Counter>
- <Counter worker="6">8929</Counter>
- <Counter worker="7">8929</Counter>
- <Counter worker="8">8929</Counter>
- <Counter worker="9">8930</Counter>
- <Counter worker="10">8929</Counter>
- <Counter worker="11">8929</Counter>
- <Counter worker="12">8930</Counter>
- <Counter worker="13">8929</Counter>
- </OneMutex>
- <OneMutex activeWorker="15">
- <Counter worker="0">6001</Counter>
- <Counter worker="1">6002</Counter>
- <Counter worker="2">6002</Counter>
- <Counter worker="3">6002</Counter>
- <Counter worker="4">6003</Counter>
- <Counter worker="5">6001</Counter>
- <Counter worker="6">6002</Counter>
- <Counter worker="7">6002</Counter>
- <Counter worker="8">6002</Counter>
- <Counter worker="9">6002</Counter>
- <Counter worker="10">6002</Counter>
- <Counter worker="11">6002</Counter>
- <Counter worker="12">6001</Counter>
- <Counter worker="13">6002</Counter>
- <Counter worker="14">6002</Counter>
- </OneMutex>
- <OneMutex activeWorker="16">
- <Counter worker="0">7934</Counter>
- <Counter worker="1">7934</Counter>
- <Counter worker="2">7936</Counter>
- <Counter worker="3">7935</Counter>
- <Counter worker="4">7935</Counter>
- <Counter worker="5">7934</Counter>
- <Counter worker="6">7935</Counter>
- <Counter worker="7">7935</Counter>
- <Counter worker="8">7934</Counter>
- <Counter worker="9">7934</Counter>
- <Counter worker="10">7934</Counter>
- <Counter worker="11">7934</Counter>
- <Counter worker="12">7935</Counter>
- <Counter worker="13">7935</Counter>
- <Counter worker="14">7935</Counter>
- <Counter worker="15">7934</Counter>
- </OneMutex>
- <OneMutex activeWorker="17">
- <Counter worker="0">4099</Counter>
- <Counter worker="1">4099</Counter>
- <Counter worker="2">4098</Counter>
- <Counter worker="3">4098</Counter>
- <Counter worker="4">4098</Counter>
- <Counter worker="5">4098</Counter>
- <Counter worker="6">4098</Counter>
- <Counter worker="7">4098</Counter>
- <Counter worker="8">4098</Counter>
- <Counter worker="9">4098</Counter>
- <Counter worker="10">4098</Counter>
- <Counter worker="11">4098</Counter>
- <Counter worker="12">4098</Counter>
- <Counter worker="13">4098</Counter>
- <Counter worker="14">4098</Counter>
- <Counter worker="15">4099</Counter>
- <Counter worker="16">4098</Counter>
- </OneMutex>
- <OneMutex activeWorker="18">
- <Counter worker="0">6990</Counter>
- <Counter worker="1">6989</Counter>
- <Counter worker="2">6989</Counter>
- <Counter worker="3">6989</Counter>
- <Counter worker="4">6989</Counter>
- <Counter worker="5">6990</Counter>
- <Counter worker="6">6989</Counter>
- <Counter worker="7">6989</Counter>
- <Counter worker="8">6989</Counter>
- <Counter worker="9">6990</Counter>
- <Counter worker="10">6989</Counter>
- <Counter worker="11">6989</Counter>
- <Counter worker="12">6989</Counter>
- <Counter worker="13">6990</Counter>
- <Counter worker="14">6990</Counter>
- <Counter worker="15">6990</Counter>
- <Counter worker="16">6990</Counter>
- <Counter worker="17">6989</Counter>
- </OneMutex>
- <OneMutex activeWorker="19">
- <Counter worker="0">3939</Counter>
- <Counter worker="1">3938</Counter>
- <Counter worker="2">3938</Counter>
- <Counter worker="3">3938</Counter>
- <Counter worker="4">3939</Counter>
- <Counter worker="5">3938</Counter>
- <Counter worker="6">3939</Counter>
- <Counter worker="7">3938</Counter>
- <Counter worker="8">3939</Counter>
- <Counter worker="9">3938</Counter>
- <Counter worker="10">3939</Counter>
- <Counter worker="11">3938</Counter>
- <Counter worker="12">3939</Counter>
- <Counter worker="13">3939</Counter>
- <Counter worker="14">3939</Counter>
- <Counter worker="15">3938</Counter>
- <Counter worker="16">3938</Counter>
- <Counter worker="17">3938</Counter>
- <Counter worker="18">3939</Counter>
- </OneMutex>
- <OneMutex activeWorker="20">
- <Counter worker="0">3096</Counter>
- <Counter worker="1">3096</Counter>
- <Counter worker="2">3097</Counter>
- <Counter worker="3">3097</Counter>
- <Counter worker="4">3097</Counter>
- <Counter worker="5">3096</Counter>
- <Counter worker="6">3096</Counter>
- <Counter worker="7">3097</Counter>
- <Counter worker="8">3097</Counter>
- <Counter worker="9">3097</Counter>
- <Counter worker="10">3097</Counter>
- <Counter worker="11">3097</Counter>
- <Counter worker="12">3097</Counter>
- <Counter worker="13">3098</Counter>
- <Counter worker="14">3097</Counter>
- <Counter worker="15">3097</Counter>
- <Counter worker="16">3097</Counter>
- <Counter worker="17">3097</Counter>
- <Counter worker="18">3097</Counter>
- <Counter worker="19">3097</Counter>
- </OneMutex>
- <OneMutex activeWorker="21">
- <Counter worker="0">2721</Counter>
- <Counter worker="1">2722</Counter>
- <Counter worker="2">2721</Counter>
- <Counter worker="3">2721</Counter>
- <Counter worker="4">2722</Counter>
- <Counter worker="5">2721</Counter>
- <Counter worker="6">2721</Counter>
- <Counter worker="7">2721</Counter>
- <Counter worker="8">2721</Counter>
- <Counter worker="9">2721</Counter>
- <Counter worker="10">2722</Counter>
- <Counter worker="11">2721</Counter>
- <Counter worker="12">2722</Counter>
- <Counter worker="13">2722</Counter>
- <Counter worker="14">2721</Counter>
- <Counter worker="15">2721</Counter>
- <Counter worker="16">2721</Counter>
- <Counter worker="17">2721</Counter>
- <Counter worker="18">2722</Counter>
- <Counter worker="19">2722</Counter>
- <Counter worker="20">2721</Counter>
- </OneMutex>
- <OneMutex activeWorker="22">
- <Counter worker="0">5060</Counter>
- <Counter worker="1">5060</Counter>
- <Counter worker="2">5060</Counter>
- <Counter worker="3">5060</Counter>
- <Counter worker="4">5060</Counter>
- <Counter worker="5">5060</Counter>
- <Counter worker="6">5060</Counter>
- <Counter worker="7">5060</Counter>
- <Counter worker="8">5060</Counter>
- <Counter worker="9">5060</Counter>
- <Counter worker="10">5060</Counter>
- <Counter worker="11">5060</Counter>
- <Counter worker="12">5060</Counter>
- <Counter worker="13">5060</Counter>
- <Counter worker="14">5060</Counter>
- <Counter worker="15">5060</Counter>
- <Counter worker="16">5060</Counter>
- <Counter worker="17">5060</Counter>
- <Counter worker="18">5060</Counter>
- <Counter worker="19">5060</Counter>
- <Counter worker="20">5060</Counter>
- <Counter worker="21">5060</Counter>
- </OneMutex>
- <OneMutex activeWorker="23">
- <Counter worker="0">4582</Counter>
- <Counter worker="1">4582</Counter>
- <Counter worker="2">4582</Counter>
- <Counter worker="3">4582</Counter>
- <Counter worker="4">4581</Counter>
- <Counter worker="5">4581</Counter>
- <Counter worker="6">4582</Counter>
- <Counter worker="7">4581</Counter>
- <Counter worker="8">4582</Counter>
- <Counter worker="9">4582</Counter>
- <Counter worker="10">4581</Counter>
- <Counter worker="11">4581</Counter>
- <Counter worker="12">4582</Counter>
- <Counter worker="13">4581</Counter>
- <Counter worker="14">4581</Counter>
- <Counter worker="15">4582</Counter>
- <Counter worker="16">4582</Counter>
- <Counter worker="17">4582</Counter>
- <Counter worker="18">4582</Counter>
- <Counter worker="19">4582</Counter>
- <Counter worker="20">4582</Counter>
- <Counter worker="21">4582</Counter>
- <Counter worker="22">4581</Counter>
- </OneMutex>
- <OneMutex activeWorker="24">
- <Counter worker="0">2433</Counter>
- <Counter worker="1">2433</Counter>
- <Counter worker="2">2432</Counter>
- <Counter worker="3">2433</Counter>
- <Counter worker="4">2432</Counter>
- <Counter worker="5">2432</Counter>
- <Counter worker="6">2433</Counter>
- <Counter worker="7">2433</Counter>
- <Counter worker="8">2433</Counter>
- <Counter worker="9">2432</Counter>
- <Counter worker="10">2433</Counter>
- <Counter worker="11">2433</Counter>
- <Counter worker="12">2433</Counter>
- <Counter worker="13">2433</Counter>
- <Counter worker="14">2433</Counter>
- <Counter worker="15">2432</Counter>
- <Counter worker="16">2433</Counter>
- <Counter worker="17">2432</Counter>
- <Counter worker="18">2433</Counter>
- <Counter worker="19">2432</Counter>
- <Counter worker="20">2433</Counter>
- <Counter worker="21">2433</Counter>
- <Counter worker="22">2434</Counter>
- <Counter worker="23">2432</Counter>
- </OneMutex>
- <ManyMutex activeWorker="1">
- <Counter worker="0">5001647</Counter>
- </ManyMutex>
- <ManyMutex activeWorker="2">
- <Counter worker="0">4932033</Counter>
- <Counter worker="1">4932309</Counter>
- </ManyMutex>
- <ManyMutex activeWorker="3">
- <Counter worker="0">4355923</Counter>
- <Counter worker="1">4925539</Counter>
- <Counter worker="2">4356158</Counter>
- </ManyMutex>
- <ManyMutex activeWorker="4">
- <Counter worker="0">4276198</Counter>
- <Counter worker="1">4793125</Counter>
- <Counter worker="2">4792773</Counter>
- <Counter worker="3">4276295</Counter>
- </ManyMutex>
- <ManyMutex activeWorker="5">
- <Counter worker="0">4735869</Counter>
- <Counter worker="1">4177346</Counter>
- <Counter worker="2">4736094</Counter>
- <Counter worker="3">4235871</Counter>
- <Counter worker="4">4731095</Counter>
- </ManyMutex>
- <ManyMutex activeWorker="6">
- <Counter worker="0">4716270</Counter>
- <Counter worker="1">4258387</Counter>
- <Counter worker="2">4268838</Counter>
- <Counter worker="3">4698974</Counter>
- <Counter worker="4">4172075</Counter>
- <Counter worker="5">4719026</Counter>
- </ManyMutex>
- <ManyMutex activeWorker="7">
- <Counter worker="0">4205327</Counter>
- <Counter worker="1">4202415</Counter>
- <Counter worker="2">4728528</Counter>
- <Counter worker="3">4741751</Counter>
- <Counter worker="4">4661144</Counter>
- <Counter worker="5">4728823</Counter>
- <Counter worker="6">4741645</Counter>
- </ManyMutex>
- <ManyMutex activeWorker="8">
- <Counter worker="0">4700906</Counter>
- <Counter worker="1">4085992</Counter>
- <Counter worker="2">4700875</Counter>
- <Counter worker="3">4672269</Counter>
- <Counter worker="4">4641742</Counter>
- <Counter worker="5">4113941</Counter>
- <Counter worker="6">4634133</Counter>
- <Counter worker="7">4069049</Counter>
- </ManyMutex>
- <ManyMutex activeWorker="9">
- <Counter worker="0">4706705</Counter>
- <Counter worker="1">2830546</Counter>
- <Counter worker="2">3640848</Counter>
- <Counter worker="3">4638947</Counter>
- <Counter worker="4">4106355</Counter>
- <Counter worker="5">4634726</Counter>
- <Counter worker="6">4199317</Counter>
- <Counter worker="7">4215455</Counter>
- <Counter worker="8">4706736</Counter>
- </ManyMutex>
- <ManyMutex activeWorker="10">
- <Counter worker="0">4591261</Counter>
- <Counter worker="1">4967739</Counter>
- <Counter worker="2">4618369</Counter>
- <Counter worker="3">4063482</Counter>
- <Counter worker="4">4967727</Counter>
- <Counter worker="5">4162082</Counter>
- <Counter worker="6">4048161</Counter>
- <Counter worker="7">4649148</Counter>
- <Counter worker="8">4649140</Counter>
- <Counter worker="9">4631859</Counter>
- </ManyMutex>
- <ManyMutex activeWorker="11">
- <Counter worker="0">4370677</Counter>
- <Counter worker="1">3026309</Counter>
- <Counter worker="2">2913790</Counter>
- <Counter worker="3">4677581</Counter>
- <Counter worker="4">4692968</Counter>
- <Counter worker="5">4780273</Counter>
- <Counter worker="6">4693509</Counter>
- <Counter worker="7">4495802</Counter>
- <Counter worker="8">4704240</Counter>
- <Counter worker="9">4703550</Counter>
- <Counter worker="10">4677478</Counter>
- </ManyMutex>
- <ManyMutex activeWorker="12">
- <Counter worker="0">4107344</Counter>
- <Counter worker="1">4649662</Counter>
- <Counter worker="2">4676522</Counter>
- <Counter worker="3">3156738</Counter>
- <Counter worker="4">4671133</Counter>
- <Counter worker="5">4154985</Counter>
- <Counter worker="6">4785186</Counter>
- <Counter worker="7">4670956</Counter>
- <Counter worker="8">4126203</Counter>
- <Counter worker="9">4785157</Counter>
- <Counter worker="10">2842002</Counter>
- <Counter worker="11">4704576</Counter>
- </ManyMutex>
- <ManyMutex activeWorker="13">
- <Counter worker="0">4658248</Counter>
- <Counter worker="1">3050246</Counter>
- <Counter worker="2">4822861</Counter>
- <Counter worker="3">2829258</Counter>
- <Counter worker="4">4804042</Counter>
- <Counter worker="5">4658270</Counter>
- <Counter worker="6">4651897</Counter>
- <Counter worker="7">4803978</Counter>
- <Counter worker="8">4618739</Counter>
- <Counter worker="9">4080735</Counter>
- <Counter worker="10">4641078</Counter>
- <Counter worker="11">4104333</Counter>
- <Counter worker="12">4085914</Counter>
- </ManyMutex>
- <ManyMutex activeWorker="14">
- <Counter worker="0">2833004</Counter>
- <Counter worker="1">4774206</Counter>
- <Counter worker="2">4681710</Counter>
- <Counter worker="3">4191970</Counter>
- <Counter worker="4">2835639</Counter>
- <Counter worker="5">2832535</Counter>
- <Counter worker="6">4208974</Counter>
- <Counter worker="7">4500175</Counter>
- <Counter worker="8">4634735</Counter>
- <Counter worker="9">4534048</Counter>
- <Counter worker="10">4774225</Counter>
- <Counter worker="11">4367224</Counter>
- <Counter worker="12">2119256</Counter>
- <Counter worker="13">3685038</Counter>
- </ManyMutex>
- <ManyMutex activeWorker="15">
- <Counter worker="0">4679948</Counter>
- <Counter worker="1">4679956</Counter>
- <Counter worker="2">4689624</Counter>
- <Counter worker="3">4095475</Counter>
- <Counter worker="4">4633249</Counter>
- <Counter worker="5">4694233</Counter>
- <Counter worker="6">4691234</Counter>
- <Counter worker="7">4633249</Counter>
- <Counter worker="8">4689597</Counter>
- <Counter worker="9">4689904</Counter>
- <Counter worker="10">4636792</Counter>
- <Counter worker="11">2890683</Counter>
- <Counter worker="12">4334695</Counter>
- <Counter worker="13">2890353</Counter>
- <Counter worker="14">4691398</Counter>
- </ManyMutex>
- <ManyMutex activeWorker="16">
- <Counter worker="0">4721449</Counter>
- <Counter worker="1">4641755</Counter>
- <Counter worker="2">3147235</Counter>
- <Counter worker="3">4677026</Counter>
- <Counter worker="4">2858837</Counter>
- <Counter worker="5">4699482</Counter>
- <Counter worker="6">4721331</Counter>
- <Counter worker="7">3994802</Counter>
- <Counter worker="8">4699317</Counter>
- <Counter worker="9">4696404</Counter>
- <Counter worker="10">4589085</Counter>
- <Counter worker="11">4108168</Counter>
- <Counter worker="12">4720500</Counter>
- <Counter worker="13">4676953</Counter>
- <Counter worker="14">4643243</Counter>
- <Counter worker="15">4720497</Counter>
- </ManyMutex>
- <ManyMutex activeWorker="17">
- <Counter worker="0">4645420</Counter>
- <Counter worker="1">4680196</Counter>
- <Counter worker="2">4686848</Counter>
- <Counter worker="3">4647270</Counter>
- <Counter worker="4">4681748</Counter>
- <Counter worker="5">4634369</Counter>
- <Counter worker="6">4682734</Counter>
- <Counter worker="7">2856905</Counter>
- <Counter worker="8">3516034</Counter>
- <Counter worker="9">4636223</Counter>
- <Counter worker="10">4684119</Counter>
- <Counter worker="11">4684619</Counter>
- <Counter worker="12">4633361</Counter>
- <Counter worker="13">4633572</Counter>
- <Counter worker="14">4644454</Counter>
- <Counter worker="15">4642238</Counter>
- <Counter worker="16">4680224</Counter>
- </ManyMutex>
- <ManyMutex activeWorker="18">
- <Counter worker="0">3968745</Counter>
- <Counter worker="1">4692720</Counter>
- <Counter worker="2">4691924</Counter>
- <Counter worker="3">4927117</Counter>
- <Counter worker="4">4684103</Counter>
- <Counter worker="5">4686784</Counter>
- <Counter worker="6">4552054</Counter>
- <Counter worker="7">4687372</Counter>
- <Counter worker="8">2814828</Counter>
- <Counter worker="9">4678196</Counter>
- <Counter worker="10">3019413</Counter>
- <Counter worker="11">4702658</Counter>
- <Counter worker="12">2799802</Counter>
- <Counter worker="13">3006627</Counter>
- <Counter worker="14">4683463</Counter>
- <Counter worker="15">4677772</Counter>
- <Counter worker="16">4645772</Counter>
- <Counter worker="17">4927146</Counter>
- </ManyMutex>
- <ManyMutex activeWorker="19">
- <Counter worker="0">4601592</Counter>
- <Counter worker="1">4714461</Counter>
- <Counter worker="2">4883685</Counter>
- <Counter worker="3">3028508</Counter>
- <Counter worker="4">4654222</Counter>
- <Counter worker="5">2933007</Counter>
- <Counter worker="6">4724241</Counter>
- <Counter worker="7">4718472</Counter>
- <Counter worker="8">4570831</Counter>
- <Counter worker="9">4718483</Counter>
- <Counter worker="10">4724097</Counter>
- <Counter worker="11">4713870</Counter>
- <Counter worker="12">4703195</Counter>
- <Counter worker="13">4165705</Counter>
- <Counter worker="14">4711178</Counter>
- <Counter worker="15">4883702</Counter>
- <Counter worker="16">4711294</Counter>
- <Counter worker="17">4703238</Counter>
- <Counter worker="18">4654312</Counter>
- </ManyMutex>
- <ManyMutex activeWorker="20">
- <Counter worker="0">4651301</Counter>
- <Counter worker="1">3690905</Counter>
- <Counter worker="2">3105263</Counter>
- <Counter worker="3">4697287</Counter>
- <Counter worker="4">4638522</Counter>
- <Counter worker="5">4650722</Counter>
- <Counter worker="6">2962962</Counter>
- <Counter worker="7">4112623</Counter>
- <Counter worker="8">4638656</Counter>
- <Counter worker="9">2033536</Counter>
- <Counter worker="10">4675666</Counter>
- <Counter worker="11">4467698</Counter>
- <Counter worker="12">4389797</Counter>
- <Counter worker="13">4468602</Counter>
- <Counter worker="14">2818900</Counter>
- <Counter worker="15">4536994</Counter>
- <Counter worker="16">3093343</Counter>
- <Counter worker="17">2819049</Counter>
- <Counter worker="18">3060340</Counter>
- <Counter worker="19">2902497</Counter>
- </ManyMutex>
- <ManyMutex activeWorker="21">
- <Counter worker="0">2812125</Counter>
- <Counter worker="1">2976769</Counter>
- <Counter worker="2">4554538</Counter>
- <Counter worker="3">4606816</Counter>
- <Counter worker="4">4479562</Counter>
- <Counter worker="5">2992810</Counter>
- <Counter worker="6">4661692</Counter>
- <Counter worker="7">4709972</Counter>
- <Counter worker="8">4597719</Counter>
- <Counter worker="9">4608597</Counter>
- <Counter worker="10">4609552</Counter>
- <Counter worker="11">4709758</Counter>
- <Counter worker="12">4661224</Counter>
- <Counter worker="13">4519832</Counter>
- <Counter worker="14">4746960</Counter>
- <Counter worker="15">4609189</Counter>
- <Counter worker="16">4752379</Counter>
- <Counter worker="17">4596670</Counter>
- <Counter worker="18">4810470</Counter>
- <Counter worker="19">2858016</Counter>
- <Counter worker="20">4752412</Counter>
- </ManyMutex>
- <ManyMutex activeWorker="22">
- <Counter worker="0">4702947</Counter>
- <Counter worker="1">4443206</Counter>
- <Counter worker="2">4727685</Counter>
- <Counter worker="3">4540248</Counter>
- <Counter worker="4">4658159</Counter>
- <Counter worker="5">4126514</Counter>
- <Counter worker="6">4791039</Counter>
- <Counter worker="7">2894757</Counter>
- <Counter worker="8">1955087</Counter>
- <Counter worker="9">4702969</Counter>
- <Counter worker="10">2817541</Counter>
- <Counter worker="11">4420635</Counter>
- <Counter worker="12">2921923</Counter>
- <Counter worker="13">2650900</Counter>
- <Counter worker="14">2862766</Counter>
- <Counter worker="15">3687545</Counter>
- <Counter worker="16">2874883</Counter>
- <Counter worker="17">2940336</Counter>
- <Counter worker="18">2776021</Counter>
- <Counter worker="19">3127586</Counter>
- <Counter worker="20">4090728</Counter>
- <Counter worker="21">2337871</Counter>
- </ManyMutex>
- <ManyMutex activeWorker="23">
- <Counter worker="0">4529255</Counter>
- <Counter worker="1">4718656</Counter>
- <Counter worker="2">1922439</Counter>
- <Counter worker="3">4693004</Counter>
- <Counter worker="4">4684958</Counter>
- <Counter worker="5">2886050</Counter>
- <Counter worker="6">3066101</Counter>
- <Counter worker="7">3610129</Counter>
- <Counter worker="8">2810938</Counter>
- <Counter worker="9">4633095</Counter>
- <Counter worker="10">2900751</Counter>
- <Counter worker="11">4632884</Counter>
- <Counter worker="12">4692840</Counter>
- <Counter worker="13">4420163</Counter>
- <Counter worker="14">1996345</Counter>
- <Counter worker="15">3643801</Counter>
- <Counter worker="16">2826674</Counter>
- <Counter worker="17">2883468</Counter>
- <Counter worker="18">4558270</Counter>
- <Counter worker="19">4416614</Counter>
- <Counter worker="20">2860484</Counter>
- <Counter worker="21">2892545</Counter>
- <Counter worker="22">4488266</Counter>
- </ManyMutex>
- <ManyMutex activeWorker="24">
- <Counter worker="0">4578849</Counter>
- <Counter worker="1">4636230</Counter>
- <Counter worker="2">3022974</Counter>
- <Counter worker="3">2822574</Counter>
- <Counter worker="4">4731087</Counter>
- <Counter worker="5">4731131</Counter>
- <Counter worker="6">4689840</Counter>
- <Counter worker="7">4070922</Counter>
- <Counter worker="8">4689653</Counter>
- <Counter worker="9">4477380</Counter>
- <Counter worker="10">4642053</Counter>
- <Counter worker="11">4731990</Counter>
- <Counter worker="12">2819820</Counter>
- <Counter worker="13">4097315</Counter>
- <Counter worker="14">2839488</Counter>
- <Counter worker="15">2107643</Counter>
- <Counter worker="16">4682013</Counter>
- <Counter worker="17">4682337</Counter>
- <Counter worker="18">4583332</Counter>
- <Counter worker="19">3013463</Counter>
- <Counter worker="20">4532706</Counter>
- <Counter worker="21">4653764</Counter>
- <Counter worker="22">3720162</Counter>
- <Counter worker="23">4120464</Counter>
- </ManyMutex>
- <SelfMsg activeWorker="1">
- <Counter worker="0">3484359</Counter>
- </SelfMsg>
- <SelfMsg activeWorker="2">
- <Counter worker="0">3291417</Counter>
- <Counter worker="1">3291652</Counter>
- </SelfMsg>
- <SelfMsg activeWorker="3">
- <Counter worker="0">3243274</Counter>
- <Counter worker="1">2918376</Counter>
- <Counter worker="2">2983608</Counter>
- </SelfMsg>
- <SelfMsg activeWorker="4">
- <Counter worker="0">3203853</Counter>
- <Counter worker="1">2895866</Counter>
- <Counter worker="2">2917648</Counter>
- <Counter worker="3">3306218</Counter>
- </SelfMsg>
- <SelfMsg activeWorker="5">
- <Counter worker="0">3172566</Counter>
- <Counter worker="1">2850649</Counter>
- <Counter worker="2">2876474</Counter>
- <Counter worker="3">2993084</Counter>
- <Counter worker="4">3037697</Counter>
- </SelfMsg>
- <SelfMsg activeWorker="6">
- <Counter worker="0">3176969</Counter>
- <Counter worker="1">2852043</Counter>
- <Counter worker="2">2878751</Counter>
- <Counter worker="3">2996638</Counter>
- <Counter worker="4">2798362</Counter>
- <Counter worker="5">3098269</Counter>
- </SelfMsg>
- <SelfMsg activeWorker="7">
- <Counter worker="0">3143837</Counter>
- <Counter worker="1">2820072</Counter>
- <Counter worker="2">2849545</Counter>
- <Counter worker="3">2965415</Counter>
- <Counter worker="4">2791805</Counter>
- <Counter worker="5">2995583</Counter>
- <Counter worker="6">3223833</Counter>
- </SelfMsg>
- <SelfMsg activeWorker="8">
- <Counter worker="0">3106671</Counter>
- <Counter worker="1">2774975</Counter>
- <Counter worker="2">2810843</Counter>
- <Counter worker="3">2934576</Counter>
- <Counter worker="4">2743550</Counter>
- <Counter worker="5">2961241</Counter>
- <Counter worker="6">2801048</Counter>
- <Counter worker="7">2981597</Counter>
- </SelfMsg>
- <SelfMsg activeWorker="9">
- <Counter worker="0">3126404</Counter>
- <Counter worker="1">2792565</Counter>
- <Counter worker="2">2828797</Counter>
- <Counter worker="3">2953257</Counter>
- <Counter worker="4">2761418</Counter>
- <Counter worker="5">2980177</Counter>
- <Counter worker="6">2818788</Counter>
- <Counter worker="7">3000161</Counter>
- <Counter worker="8">3522606</Counter>
- </SelfMsg>
- <SelfMsg activeWorker="10">
- <Counter worker="0">3114675</Counter>
- <Counter worker="1">2782305</Counter>
- <Counter worker="2">2818067</Counter>
- <Counter worker="3">2942325</Counter>
- <Counter worker="4">2750895</Counter>
- <Counter worker="5">2969190</Counter>
- <Counter worker="6">2808330</Counter>
- <Counter worker="7">2988513</Counter>
- <Counter worker="8">3277977</Counter>
- <Counter worker="9">3277992</Counter>
- </SelfMsg>
- <SelfMsg activeWorker="11">
- <Counter worker="0">3134167</Counter>
- <Counter worker="1">2799405</Counter>
- <Counter worker="2">2835531</Counter>
- <Counter worker="3">2960559</Counter>
- <Counter worker="4">2768383</Counter>
- <Counter worker="5">2987172</Counter>
- <Counter worker="6">2825869</Counter>
- <Counter worker="7">3008169</Counter>
- <Counter worker="8">3229937</Counter>
- <Counter worker="9">2865157</Counter>
- <Counter worker="10">2924109</Counter>
- </SelfMsg>
- <SelfMsg activeWorker="12">
- <Counter worker="0">3122298</Counter>
- <Counter worker="1">2788834</Counter>
- <Counter worker="2">2824886</Counter>
- <Counter worker="3">2949367</Counter>
- <Counter worker="4">2757481</Counter>
- <Counter worker="5">2976034</Counter>
- <Counter worker="6">2814952</Counter>
- <Counter worker="7">2996594</Counter>
- <Counter worker="8">3196270</Counter>
- <Counter worker="9">2832912</Counter>
- <Counter worker="10">2868202</Counter>
- <Counter worker="11">3287941</Counter>
- </SelfMsg>
- <SelfMsg activeWorker="13">
- <Counter worker="0">3110296</Counter>
- <Counter worker="1">2778328</Counter>
- <Counter worker="2">2814097</Counter>
- <Counter worker="3">2938082</Counter>
- <Counter worker="4">2747046</Counter>
- <Counter worker="5">2964597</Counter>
- <Counter worker="6">2804214</Counter>
- <Counter worker="7">2985167</Counter>
- <Counter worker="8">3162003</Counter>
- <Counter worker="9">2798958</Counter>
- <Counter worker="10">2828824</Counter>
- <Counter worker="11">2981162</Counter>
- <Counter worker="12">3033576</Counter>
- </SelfMsg>
- <SelfMsg activeWorker="14">
- <Counter worker="0">3129719</Counter>
- <Counter worker="1">2795774</Counter>
- <Counter worker="2">2831742</Counter>
- <Counter worker="3">2956427</Counter>
- <Counter worker="4">2764251</Counter>
- <Counter worker="5">2983507</Counter>
- <Counter worker="6">2821804</Counter>
- <Counter worker="7">3003302</Counter>
- <Counter worker="8">3168182</Counter>
- <Counter worker="9">2795213</Counter>
- <Counter worker="10">2824824</Counter>
- <Counter worker="11">2985326</Counter>
- <Counter worker="12">2788203</Counter>
- <Counter worker="13">3060880</Counter>
- </SelfMsg>
- <SelfMsg activeWorker="15">
- <Counter worker="0">3117749</Counter>
- <Counter worker="1">2785075</Counter>
- <Counter worker="2">2821028</Counter>
- <Counter worker="3">2945205</Counter>
- <Counter worker="4">2753587</Counter>
- <Counter worker="5">2971692</Counter>
- <Counter worker="6">2811184</Counter>
- <Counter worker="7">2991870</Counter>
- <Counter worker="8">3136894</Counter>
- <Counter worker="9">2769370</Counter>
- <Counter worker="10">2799325</Counter>
- <Counter worker="11">2955115</Counter>
- <Counter worker="12">2791275</Counter>
- <Counter worker="13">2965355</Counter>
- <Counter worker="14">3235028</Counter>
- </SelfMsg>
- <SelfMsg activeWorker="16">
- <Counter worker="0">3105837</Counter>
- <Counter worker="1">2774385</Counter>
- <Counter worker="2">2809948</Counter>
- <Counter worker="3">2933935</Counter>
- <Counter worker="4">2743165</Counter>
- <Counter worker="5">2960594</Counter>
- <Counter worker="6">2800417</Counter>
- <Counter worker="7">2980234</Counter>
- <Counter worker="8">3107685</Counter>
- <Counter worker="9">2740597</Counter>
- <Counter worker="10">2772059</Counter>
- <Counter worker="11">2927128</Counter>
- <Counter worker="12">2757027</Counter>
- <Counter worker="13">2938382</Counter>
- <Counter worker="14">2823137</Counter>
- <Counter worker="15">2965765</Counter>
- </SelfMsg>
- <SelfMsg activeWorker="17">
- <Counter worker="0">3125383</Counter>
- <Counter worker="1">2791802</Counter>
- <Counter worker="2">2827715</Counter>
- <Counter worker="3">2952217</Counter>
- <Counter worker="4">2760266</Counter>
- <Counter worker="5">2978746</Counter>
- <Counter worker="6">2817802</Counter>
- <Counter worker="7">2999395</Counter>
- <Counter worker="8">3127170</Counter>
- <Counter worker="9">2757456</Counter>
- <Counter worker="10">2789249</Counter>
- <Counter worker="11">2945471</Counter>
- <Counter worker="12">2774281</Counter>
- <Counter worker="13">2956715</Counter>
- <Counter worker="14">2840683</Counter>
- <Counter worker="15">2984166</Counter>
- <Counter worker="16">3488200</Counter>
- </SelfMsg>
- <SelfMsg activeWorker="18">
- <Counter worker="0">3113425</Counter>
- <Counter worker="1">2781071</Counter>
- <Counter worker="2">2816875</Counter>
- <Counter worker="3">2940987</Counter>
- <Counter worker="4">2749614</Counter>
- <Counter worker="5">2967301</Counter>
- <Counter worker="6">2806975</Counter>
- <Counter worker="7">2987963</Counter>
- <Counter worker="8">3115249</Counter>
- <Counter worker="9">2746969</Counter>
- <Counter worker="10">2778738</Counter>
- <Counter worker="11">2934226</Counter>
- <Counter worker="12">2763956</Counter>
- <Counter worker="13">2945765</Counter>
- <Counter worker="14">2829840</Counter>
- <Counter worker="15">2973224</Counter>
- <Counter worker="16">3271018</Counter>
- <Counter worker="17">3271054</Counter>
- </SelfMsg>
- <SelfMsg activeWorker="19">
- <Counter worker="0">3132890</Counter>
- <Counter worker="1">2798349</Counter>
- <Counter worker="2">2834203</Counter>
- <Counter worker="3">2959395</Counter>
- <Counter worker="4">2766985</Counter>
- <Counter worker="5">2986288</Counter>
- <Counter worker="6">2824544</Counter>
- <Counter worker="7">3006439</Counter>
- <Counter worker="8">3134700</Counter>
- <Counter worker="9">2764127</Counter>
- <Counter worker="10">2795782</Counter>
- <Counter worker="11">2952538</Counter>
- <Counter worker="12">2780908</Counter>
- <Counter worker="13">2963890</Counter>
- <Counter worker="14">2847586</Counter>
- <Counter worker="15">2991552</Counter>
- <Counter worker="16">3245981</Counter>
- <Counter worker="17">2954280</Counter>
- <Counter worker="18">2960399</Counter>
- </SelfMsg>
- <SelfMsg activeWorker="20">
- <Counter worker="0">3120930</Counter>
- <Counter worker="1">2787696</Counter>
- <Counter worker="2">2823649</Counter>
- <Counter worker="3">2948070</Counter>
- <Counter worker="4">2756563</Counter>
- <Counter worker="5">2974809</Counter>
- <Counter worker="6">2813905</Counter>
- <Counter worker="7">2995333</Counter>
- <Counter worker="8">3122781</Counter>
- <Counter worker="9">2753746</Counter>
- <Counter worker="10">2785385</Counter>
- <Counter worker="11">2941360</Counter>
- <Counter worker="12">2770370</Counter>
- <Counter worker="13">2952557</Counter>
- <Counter worker="14">2836606</Counter>
- <Counter worker="15">2981020</Counter>
- <Counter worker="16">3210075</Counter>
- <Counter worker="17">2900766</Counter>
- <Counter worker="18">2922137</Counter>
- <Counter worker="19">3306794</Counter>
- </SelfMsg>
- <SelfMsg activeWorker="21">
- <Counter worker="0">3108909</Counter>
- <Counter worker="1">2777145</Counter>
- <Counter worker="2">2812866</Counter>
- <Counter worker="3">2936889</Counter>
- <Counter worker="4">2745714</Counter>
- <Counter worker="5">2963451</Counter>
- <Counter worker="6">2803246</Counter>
- <Counter worker="7">2983352</Counter>
- <Counter worker="8">3110869</Counter>
- <Counter worker="9">2743126</Counter>
- <Counter worker="10">2774923</Counter>
- <Counter worker="11">2930071</Counter>
- <Counter worker="12">2759954</Counter>
- <Counter worker="13">2941606</Counter>
- <Counter worker="14">2825771</Counter>
- <Counter worker="15">2969489</Counter>
- <Counter worker="16">3177890</Counter>
- <Counter worker="17">2868416</Counter>
- <Counter worker="18">2886398</Counter>
- <Counter worker="19">3000295</Counter>
- <Counter worker="20">3041648</Counter>
- </SelfMsg>
- <SelfMsg activeWorker="22">
- <Counter worker="0">3128424</Counter>
- <Counter worker="1">2794396</Counter>
- <Counter worker="2">2830500</Counter>
- <Counter worker="3">2955267</Counter>
- <Counter worker="4">2763218</Counter>
- <Counter worker="5">2982154</Counter>
- <Counter worker="6">2820802</Counter>
- <Counter worker="7">3001915</Counter>
- <Counter worker="8">3130343</Counter>
- <Counter worker="9">2760287</Counter>
- <Counter worker="10">2792228</Counter>
- <Counter worker="11">2948428</Counter>
- <Counter worker="12">2777381</Counter>
- <Counter worker="13">2960097</Counter>
- <Counter worker="14">2843445</Counter>
- <Counter worker="15">2987356</Counter>
- <Counter worker="16">3179030</Counter>
- <Counter worker="17">2869858</Counter>
- <Counter worker="18">2888921</Counter>
- <Counter worker="19">3003560</Counter>
- <Counter worker="20">2800382</Counter>
- <Counter worker="21">3080561</Counter>
- </SelfMsg>
- <SelfMsg activeWorker="23">
- <Counter worker="0">3116426</Counter>
- <Counter worker="1">2783664</Counter>
- <Counter worker="2">2819691</Counter>
- <Counter worker="3">2943818</Counter>
- <Counter worker="4">2752563</Counter>
- <Counter worker="5">2970563</Counter>
- <Counter worker="6">2810085</Counter>
- <Counter worker="7">2990572</Counter>
- <Counter worker="8">3118382</Counter>
- <Counter worker="9">2749721</Counter>
- <Counter worker="10">2781546</Counter>
- <Counter worker="11">2937163</Counter>
- <Counter worker="12">2766431</Counter>
- <Counter worker="13">2948572</Counter>
- <Counter worker="14">2832634</Counter>
- <Counter worker="15">2975988</Counter>
- <Counter worker="16">3149076</Counter>
- <Counter worker="17">2832666</Counter>
- <Counter worker="18">2854858</Counter>
- <Counter worker="19">2972102</Counter>
- <Counter worker="20">2793073</Counter>
- <Counter worker="21">2986039</Counter>
- <Counter worker="22">3225121</Counter>
- </SelfMsg>
- <SelfMsg activeWorker="24">
- <Counter worker="0">3135941</Counter>
- <Counter worker="1">2801108</Counter>
- <Counter worker="2">2837415</Counter>
- <Counter worker="3">2962374</Counter>
- <Counter worker="4">2769627</Counter>
- <Counter worker="5">2989102</Counter>
- <Counter worker="6">2827394</Counter>
- <Counter worker="7">3009512</Counter>
- <Counter worker="8">3137796</Counter>
- <Counter worker="9">2766961</Counter>
- <Counter worker="10">2798946</Counter>
- <Counter worker="11">2955433</Counter>
- <Counter worker="12">2783657</Counter>
- <Counter worker="13">2966727</Counter>
- <Counter worker="14">2850374</Counter>
- <Counter worker="15">2995580</Counter>
- <Counter worker="16">3148697</Counter>
- <Counter worker="17">2826014</Counter>
- <Counter worker="18">2851067</Counter>
- <Counter worker="19">2971518</Counter>
- <Counter worker="20">2793285</Counter>
- <Counter worker="21">2985399</Counter>
- <Counter worker="22">2839863</Counter>
- <Counter worker="23">3046065</Counter>
- </SelfMsg>
- <ManyToOneMsg activeWorker="1">
- <Counter worker="0">3513959</Counter>
- </ManyToOneMsg>
- <ManyToOneMsg activeWorker="2">
- <Counter worker="0">2148757</Counter>
- <Counter worker="1">4297993</Counter>
- </ManyToOneMsg>
- <ManyToOneMsg activeWorker="3">
- <Counter worker="0">1452258</Counter>
- <Counter worker="1">2904799</Counter>
- <Counter worker="2">2905020</Counter>
- </ManyToOneMsg>
- <ManyToOneMsg activeWorker="4">
- <Counter worker="0">1251019</Counter>
- <Counter worker="1">2502307</Counter>
- <Counter worker="2">2502360</Counter>
- <Counter worker="3">2502336</Counter>
- </ManyToOneMsg>
- <ManyToOneMsg activeWorker="5">
- <Counter worker="0">969243</Counter>
- <Counter worker="1">1938692</Counter>
- <Counter worker="2">1938759</Counter>
- <Counter worker="3">1938750</Counter>
- <Counter worker="4">1938748</Counter>
- </ManyToOneMsg>
- <ManyToOneMsg activeWorker="6">
- <Counter worker="0">888969</Counter>
- <Counter worker="1">1778150</Counter>
- <Counter worker="2">1778176</Counter>
- <Counter worker="3">1778186</Counter>
- <Counter worker="4">1778185</Counter>
- <Counter worker="5">1778201</Counter>
- </ManyToOneMsg>
- <ManyToOneMsg activeWorker="7">
- <Counter worker="0">736930</Counter>
- <Counter worker="1">1474061</Counter>
- <Counter worker="2">1474091</Counter>
- <Counter worker="3">1474088</Counter>
- <Counter worker="4">1474098</Counter>
- <Counter worker="5">1474102</Counter>
- <Counter worker="6">1474091</Counter>
- </ManyToOneMsg>
- <ManyToOneMsg activeWorker="8">
- <Counter worker="0">690772</Counter>
- <Counter worker="1">1381767</Counter>
- <Counter worker="2">1381778</Counter>
- <Counter worker="3">1381787</Counter>
- <Counter worker="4">1381767</Counter>
- <Counter worker="5">1381780</Counter>
- <Counter worker="6">1381774</Counter>
- <Counter worker="7">1381762</Counter>
- </ManyToOneMsg>
- <ManyToOneMsg activeWorker="9">
- <Counter worker="0">220518</Counter>
- <Counter worker="1">441123</Counter>
- <Counter worker="2">441112</Counter>
- <Counter worker="3">441154</Counter>
- <Counter worker="4">441164</Counter>
- <Counter worker="5">441164</Counter>
- <Counter worker="6">441156</Counter>
- <Counter worker="7">441176</Counter>
- <Counter worker="8">441129</Counter>
- </ManyToOneMsg>
- <ManyToOneMsg activeWorker="10">
- <Counter worker="0">195773</Counter>
- <Counter worker="1">391623</Counter>
- <Counter worker="2">391629</Counter>
- <Counter worker="3">391634</Counter>
- <Counter worker="4">391637</Counter>
- <Counter worker="5">391622</Counter>
- <Counter worker="6">391626</Counter>
- <Counter worker="7">391634</Counter>
- <Counter worker="8">391666</Counter>
- <Counter worker="9">391680</Counter>
- </ManyToOneMsg>
- <ManyToOneMsg activeWorker="11">
- <Counter worker="0">176797</Counter>
- <Counter worker="1">353626</Counter>
- <Counter worker="2">353641</Counter>
- <Counter worker="3">353633</Counter>
- <Counter worker="4">353640</Counter>
- <Counter worker="5">353639</Counter>
- <Counter worker="6">353633</Counter>
- <Counter worker="7">353638</Counter>
- <Counter worker="8">353682</Counter>
- <Counter worker="9">353691</Counter>
- <Counter worker="10">353692</Counter>
- </ManyToOneMsg>
- <ManyToOneMsg activeWorker="12">
- <Counter worker="0">162870</Counter>
- <Counter worker="1">325764</Counter>
- <Counter worker="2">325774</Counter>
- <Counter worker="3">325776</Counter>
- <Counter worker="4">325780</Counter>
- <Counter worker="5">325777</Counter>
- <Counter worker="6">325782</Counter>
- <Counter worker="7">325773</Counter>
- <Counter worker="8">325785</Counter>
- <Counter worker="9">325795</Counter>
- <Counter worker="10">325790</Counter>
- <Counter worker="11">325791</Counter>
- </ManyToOneMsg>
- <ManyToOneMsg activeWorker="13">
- <Counter worker="0">148531</Counter>
- <Counter worker="1">297092</Counter>
- <Counter worker="2">297094</Counter>
- <Counter worker="3">297096</Counter>
- <Counter worker="4">297090</Counter>
- <Counter worker="5">297097</Counter>
- <Counter worker="6">297088</Counter>
- <Counter worker="7">297094</Counter>
- <Counter worker="8">297102</Counter>
- <Counter worker="9">297104</Counter>
- <Counter worker="10">297105</Counter>
- <Counter worker="11">297101</Counter>
- <Counter worker="12">297106</Counter>
- </ManyToOneMsg>
- <ManyToOneMsg activeWorker="14">
- <Counter worker="0">139216</Counter>
- <Counter worker="1">278451</Counter>
- <Counter worker="2">278457</Counter>
- <Counter worker="3">278454</Counter>
- <Counter worker="4">278460</Counter>
- <Counter worker="5">278454</Counter>
- <Counter worker="6">278456</Counter>
- <Counter worker="7">278455</Counter>
- <Counter worker="8">278462</Counter>
- <Counter worker="9">278466</Counter>
- <Counter worker="10">278460</Counter>
- <Counter worker="11">278465</Counter>
- <Counter worker="12">278461</Counter>
- <Counter worker="13">278461</Counter>
- </ManyToOneMsg>
- <ManyToOneMsg activeWorker="15">
- <Counter worker="0">128494</Counter>
- <Counter worker="1">257011</Counter>
- <Counter worker="2">257013</Counter>
- <Counter worker="3">257014</Counter>
- <Counter worker="4">257011</Counter>
- <Counter worker="5">257014</Counter>
- <Counter worker="6">257010</Counter>
- <Counter worker="7">257007</Counter>
- <Counter worker="8">257012</Counter>
- <Counter worker="9">257015</Counter>
- <Counter worker="10">257014</Counter>
- <Counter worker="11">257011</Counter>
- <Counter worker="12">257014</Counter>
- <Counter worker="13">257014</Counter>
- <Counter worker="14">257018</Counter>
- </ManyToOneMsg>
- <ManyToOneMsg activeWorker="16">
- <Counter worker="0">118432</Counter>
- <Counter worker="1">236882</Counter>
- <Counter worker="2">236885</Counter>
- <Counter worker="3">236883</Counter>
- <Counter worker="4">236886</Counter>
- <Counter worker="5">236886</Counter>
- <Counter worker="6">236886</Counter>
- <Counter worker="7">236887</Counter>
- <Counter worker="8">236890</Counter>
- <Counter worker="9">236885</Counter>
- <Counter worker="10">236888</Counter>
- <Counter worker="11">236886</Counter>
- <Counter worker="12">236888</Counter>
- <Counter worker="13">236889</Counter>
- <Counter worker="14">236881</Counter>
- <Counter worker="15">236882</Counter>
- </ManyToOneMsg>
- <ManyToOneMsg activeWorker="17">
- <Counter worker="0">112260</Counter>
- <Counter worker="1">224532</Counter>
- <Counter worker="2">224536</Counter>
- <Counter worker="3">224536</Counter>
- <Counter worker="4">224535</Counter>
- <Counter worker="5">224536</Counter>
- <Counter worker="6">224535</Counter>
- <Counter worker="7">224535</Counter>
- <Counter worker="8">224534</Counter>
- <Counter worker="9">224536</Counter>
- <Counter worker="10">224534</Counter>
- <Counter worker="11">224532</Counter>
- <Counter worker="12">224535</Counter>
- <Counter worker="13">224537</Counter>
- <Counter worker="14">224533</Counter>
- <Counter worker="15">224536</Counter>
- <Counter worker="16">224539</Counter>
- </ManyToOneMsg>
- <ManyToOneMsg activeWorker="18">
- <Counter worker="0">104670</Counter>
- <Counter worker="1">209354</Counter>
- <Counter worker="2">209355</Counter>
- <Counter worker="3">209354</Counter>
- <Counter worker="4">209359</Counter>
- <Counter worker="5">209361</Counter>
- <Counter worker="6">209356</Counter>
- <Counter worker="7">209358</Counter>
- <Counter worker="8">209356</Counter>
- <Counter worker="9">209354</Counter>
- <Counter worker="10">209353</Counter>
- <Counter worker="11">209354</Counter>
- <Counter worker="12">209357</Counter>
- <Counter worker="13">209356</Counter>
- <Counter worker="14">209355</Counter>
- <Counter worker="15">209353</Counter>
- <Counter worker="16">209360</Counter>
- <Counter worker="17">209362</Counter>
- </ManyToOneMsg>
- <ManyToOneMsg activeWorker="19">
- <Counter worker="0">98829</Counter>
- <Counter worker="1">197675</Counter>
- <Counter worker="2">197673</Counter>
- <Counter worker="3">197672</Counter>
- <Counter worker="4">197674</Counter>
- <Counter worker="5">197674</Counter>
- <Counter worker="6">197672</Counter>
- <Counter worker="7">197672</Counter>
- <Counter worker="8">197672</Counter>
- <Counter worker="9">197671</Counter>
- <Counter worker="10">197671</Counter>
- <Counter worker="11">197669</Counter>
- <Counter worker="12">197672</Counter>
- <Counter worker="13">197674</Counter>
- <Counter worker="14">197675</Counter>
- <Counter worker="15">197669</Counter>
- <Counter worker="16">197676</Counter>
- <Counter worker="17">197678</Counter>
- <Counter worker="18">197676</Counter>
- </ManyToOneMsg>
- <ManyToOneMsg activeWorker="20">
- <Counter worker="0">92505</Counter>
- <Counter worker="1">185021</Counter>
- <Counter worker="2">185021</Counter>
- <Counter worker="3">185025</Counter>
- <Counter worker="4">185025</Counter>
- <Counter worker="5">185021</Counter>
- <Counter worker="6">185022</Counter>
- <Counter worker="7">185022</Counter>
- <Counter worker="8">185023</Counter>
- <Counter worker="9">185023</Counter>
- <Counter worker="10">185020</Counter>
- <Counter worker="11">185021</Counter>
- <Counter worker="12">185022</Counter>
- <Counter worker="13">185025</Counter>
- <Counter worker="14">185022</Counter>
- <Counter worker="15">185024</Counter>
- <Counter worker="16">185027</Counter>
- <Counter worker="17">185029</Counter>
- <Counter worker="18">185025</Counter>
- <Counter worker="19">185027</Counter>
- </ManyToOneMsg>
- <ManyToOneMsg activeWorker="21">
- <Counter worker="0">88095</Counter>
- <Counter worker="1">176199</Counter>
- <Counter worker="2">176202</Counter>
- <Counter worker="3">176199</Counter>
- <Counter worker="4">176201</Counter>
- <Counter worker="5">176201</Counter>
- <Counter worker="6">176201</Counter>
- <Counter worker="7">176202</Counter>
- <Counter worker="8">176198</Counter>
- <Counter worker="9">176200</Counter>
- <Counter worker="10">176197</Counter>
- <Counter worker="11">176199</Counter>
- <Counter worker="12">176197</Counter>
- <Counter worker="13">176202</Counter>
- <Counter worker="14">176198</Counter>
- <Counter worker="15">176199</Counter>
- <Counter worker="16">176204</Counter>
- <Counter worker="17">176203</Counter>
- <Counter worker="18">176203</Counter>
- <Counter worker="19">176206</Counter>
- <Counter worker="20">176204</Counter>
- </ManyToOneMsg>
- <ManyToOneMsg activeWorker="22">
- <Counter worker="0">84520</Counter>
- <Counter worker="1">169052</Counter>
- <Counter worker="2">169051</Counter>
- <Counter worker="3">169053</Counter>
- <Counter worker="4">169051</Counter>
- <Counter worker="5">169056</Counter>
- <Counter worker="6">169050</Counter>
- <Counter worker="7">169052</Counter>
- <Counter worker="8">169052</Counter>
- <Counter worker="9">169053</Counter>
- <Counter worker="10">169050</Counter>
- <Counter worker="11">169051</Counter>
- <Counter worker="12">169052</Counter>
- <Counter worker="13">169053</Counter>
- <Counter worker="14">169051</Counter>
- <Counter worker="15">169051</Counter>
- <Counter worker="16">169054</Counter>
- <Counter worker="17">169056</Counter>
- <Counter worker="18">169053</Counter>
- <Counter worker="19">169055</Counter>
- <Counter worker="20">169055</Counter>
- <Counter worker="21">169054</Counter>
- </ManyToOneMsg>
- <ManyToOneMsg activeWorker="23">
- <Counter worker="0">79421</Counter>
- <Counter worker="1">158852</Counter>
- <Counter worker="2">158852</Counter>
- <Counter worker="3">158854</Counter>
- <Counter worker="4">158852</Counter>
- <Counter worker="5">158853</Counter>
- <Counter worker="6">158853</Counter>
- <Counter worker="7">158853</Counter>
- <Counter worker="8">158852</Counter>
- <Counter worker="9">158854</Counter>
- <Counter worker="10">158852</Counter>
- <Counter worker="11">158851</Counter>
- <Counter worker="12">158853</Counter>
- <Counter worker="13">158854</Counter>
- <Counter worker="14">158850</Counter>
- <Counter worker="15">158852</Counter>
- <Counter worker="16">158855</Counter>
- <Counter worker="17">158855</Counter>
- <Counter worker="18">158851</Counter>
- <Counter worker="19">158854</Counter>
- <Counter worker="20">158853</Counter>
- <Counter worker="21">158854</Counter>
- <Counter worker="22">158854</Counter>
- </ManyToOneMsg>
- <ManyToOneMsg activeWorker="24">
- <Counter worker="0">75524</Counter>
- <Counter worker="1">151058</Counter>
- <Counter worker="2">151058</Counter>
- <Counter worker="3">151057</Counter>
- <Counter worker="4">151060</Counter>
- <Counter worker="5">151057</Counter>
- <Counter worker="6">151056</Counter>
- <Counter worker="7">151056</Counter>
- <Counter worker="8">151057</Counter>
- <Counter worker="9">151057</Counter>
- <Counter worker="10">151058</Counter>
- <Counter worker="11">151058</Counter>
- <Counter worker="12">151056</Counter>
- <Counter worker="13">151057</Counter>
- <Counter worker="14">151055</Counter>
- <Counter worker="15">151056</Counter>
- <Counter worker="16">151057</Counter>
- <Counter worker="17">151056</Counter>
- <Counter worker="18">151055</Counter>
- <Counter worker="19">151057</Counter>
- <Counter worker="20">151057</Counter>
- <Counter worker="21">151057</Counter>
- <Counter worker="22">151056</Counter>
- <Counter worker="23">151056</Counter>
- </ManyToOneMsg>
- <ManySysLockMutex activeWorker="1">
- <Counter worker="0">7748082</Counter>
- </ManySysLockMutex>
- <ManySysLockMutex activeWorker="2">
- <Counter worker="0">7647592</Counter>
- <Counter worker="1">7648024</Counter>
- </ManySysLockMutex>
- <ManySysLockMutex activeWorker="3">
- <Counter worker="0">7462713</Counter>
- <Counter worker="1">7463150</Counter>
- <Counter worker="2">7463302</Counter>
- </ManySysLockMutex>
- <ManySysLockMutex activeWorker="4">
- <Counter worker="0">7227558</Counter>
- <Counter worker="1">7228059</Counter>
- <Counter worker="2">7228161</Counter>
- <Counter worker="3">7228157</Counter>
- </ManySysLockMutex>
- <ManySysLockMutex activeWorker="5">
- <Counter worker="0">7271144</Counter>
- <Counter worker="1">7271595</Counter>
- <Counter worker="2">7271690</Counter>
- <Counter worker="3">7271685</Counter>
- <Counter worker="4">7278972</Counter>
- </ManySysLockMutex>
- <ManySysLockMutex activeWorker="6">
- <Counter worker="0">7115560</Counter>
- <Counter worker="1">7115973</Counter>
- <Counter worker="2">7116081</Counter>
- <Counter worker="3">7116116</Counter>
- <Counter worker="4">7116156</Counter>
- <Counter worker="5">7116139</Counter>
- </ManySysLockMutex>
- <ManySysLockMutex activeWorker="7">
- <Counter worker="0">7032158</Counter>
- <Counter worker="1">7032584</Counter>
- <Counter worker="2">7032605</Counter>
- <Counter worker="3">7032700</Counter>
- <Counter worker="4">7032840</Counter>
- <Counter worker="5">7032751</Counter>
- <Counter worker="6">7033457</Counter>
- </ManySysLockMutex>
- <ManySysLockMutex activeWorker="8">
- <Counter worker="0">6943403</Counter>
- <Counter worker="1">6943907</Counter>
- <Counter worker="2">6944388</Counter>
- <Counter worker="3">6944535</Counter>
- <Counter worker="4">6945558</Counter>
- <Counter worker="5">6945385</Counter>
- <Counter worker="6">6944965</Counter>
- <Counter worker="7">6945056</Counter>
- </ManySysLockMutex>
- <ManySysLockMutex activeWorker="9">
- <Counter worker="0">6904189</Counter>
- <Counter worker="1">6904648</Counter>
- <Counter worker="2">6904665</Counter>
- <Counter worker="3">6904794</Counter>
- <Counter worker="4">6906704</Counter>
- <Counter worker="5">6906596</Counter>
- <Counter worker="6">6905038</Counter>
- <Counter worker="7">6905171</Counter>
- <Counter worker="8">7732157</Counter>
- </ManySysLockMutex>
- <ManySysLockMutex activeWorker="10">
- <Counter worker="0">6890600</Counter>
- <Counter worker="1">6891096</Counter>
- <Counter worker="2">6889623</Counter>
- <Counter worker="3">6889754</Counter>
- <Counter worker="4">6895076</Counter>
- <Counter worker="5">6895009</Counter>
- <Counter worker="6">6891303</Counter>
- <Counter worker="7">6891441</Counter>
- <Counter worker="8">7561832</Counter>
- <Counter worker="9">7561812</Counter>
- </ManySysLockMutex>
- <ManySysLockMutex activeWorker="11">
- <Counter worker="0">6936032</Counter>
- <Counter worker="1">6936473</Counter>
- <Counter worker="2">6936855</Counter>
- <Counter worker="3">6936996</Counter>
- <Counter worker="4">6937867</Counter>
- <Counter worker="5">6937801</Counter>
- <Counter worker="6">6937155</Counter>
- <Counter worker="7">6937284</Counter>
- <Counter worker="8">7426273</Counter>
- <Counter worker="9">7426282</Counter>
- <Counter worker="10">7426249</Counter>
- </ManySysLockMutex>
- <ManySysLockMutex activeWorker="12">
- <Counter worker="0">6886873</Counter>
- <Counter worker="1">6888027</Counter>
- <Counter worker="2">6888211</Counter>
- <Counter worker="3">6888343</Counter>
- <Counter worker="4">6892413</Counter>
- <Counter worker="5">6892299</Counter>
- <Counter worker="6">6888993</Counter>
- <Counter worker="7">6889126</Counter>
- <Counter worker="8">7246586</Counter>
- <Counter worker="9">7246631</Counter>
- <Counter worker="10">7246645</Counter>
- <Counter worker="11">7246622</Counter>
- </ManySysLockMutex>
- <ManySysLockMutex activeWorker="13">
- <Counter worker="0">6959061</Counter>
- <Counter worker="1">6959491</Counter>
- <Counter worker="2">6959651</Counter>
- <Counter worker="3">6959746</Counter>
- <Counter worker="4">6960533</Counter>
- <Counter worker="5">6960423</Counter>
- <Counter worker="6">6960346</Counter>
- <Counter worker="7">6960483</Counter>
- <Counter worker="8">7275133</Counter>
- <Counter worker="9">7275113</Counter>
- <Counter worker="10">7275196</Counter>
- <Counter worker="11">7275136</Counter>
- <Counter worker="12">7279912</Counter>
- </ManySysLockMutex>
- <ManySysLockMutex activeWorker="14">
- <Counter worker="0">6923135</Counter>
- <Counter worker="1">6923561</Counter>
- <Counter worker="2">6923846</Counter>
- <Counter worker="3">6923929</Counter>
- <Counter worker="4">6926308</Counter>
- <Counter worker="5">6926220</Counter>
- <Counter worker="6">6924046</Counter>
- <Counter worker="7">6924171</Counter>
- <Counter worker="8">7098844</Counter>
- <Counter worker="9">7098788</Counter>
- <Counter worker="10">7098814</Counter>
- <Counter worker="11">7098753</Counter>
- <Counter worker="12">7098782</Counter>
- <Counter worker="13">7098724</Counter>
- </ManySysLockMutex>
- <ManySysLockMutex activeWorker="15">
- <Counter worker="0">6897278</Counter>
- <Counter worker="1">6897722</Counter>
- <Counter worker="2">6897985</Counter>
- <Counter worker="3">6898091</Counter>
- <Counter worker="4">6900152</Counter>
- <Counter worker="5">6900044</Counter>
- <Counter worker="6">6899295</Counter>
- <Counter worker="7">6899389</Counter>
- <Counter worker="8">7029806</Counter>
- <Counter worker="9">7029783</Counter>
- <Counter worker="10">7029530</Counter>
- <Counter worker="11">7029484</Counter>
- <Counter worker="12">7029691</Counter>
- <Counter worker="13">7029614</Counter>
- <Counter worker="14">7036890</Counter>
- </ManySysLockMutex>
- <ManySysLockMutex activeWorker="16">
- <Counter worker="0">6937172</Counter>
- <Counter worker="1">6937594</Counter>
- <Counter worker="2">6937636</Counter>
- <Counter worker="3">6937737</Counter>
- <Counter worker="4">6938639</Counter>
- <Counter worker="5">6938539</Counter>
- <Counter worker="6">6938146</Counter>
- <Counter worker="7">6938285</Counter>
- <Counter worker="8">6845765</Counter>
- <Counter worker="9">6845811</Counter>
- <Counter worker="10">6844591</Counter>
- <Counter worker="11">6844579</Counter>
- <Counter worker="12">6847898</Counter>
- <Counter worker="13">6847925</Counter>
- <Counter worker="14">6854383</Counter>
- <Counter worker="15">6854413</Counter>
- </ManySysLockMutex>
- <ManySysLockMutex activeWorker="17">
- <Counter worker="0">6899164</Counter>
- <Counter worker="1">6899621</Counter>
- <Counter worker="2">6899868</Counter>
- <Counter worker="3">6899979</Counter>
- <Counter worker="4">6903162</Counter>
- <Counter worker="5">6903081</Counter>
- <Counter worker="6">6901182</Counter>
- <Counter worker="7">6901304</Counter>
- <Counter worker="8">6786503</Counter>
- <Counter worker="9">6786566</Counter>
- <Counter worker="10">6785567</Counter>
- <Counter worker="11">6785489</Counter>
- <Counter worker="12">6786492</Counter>
- <Counter worker="13">6786497</Counter>
- <Counter worker="14">6788266</Counter>
- <Counter worker="15">6788323</Counter>
- <Counter worker="16">7729409</Counter>
- </ManySysLockMutex>
- <ManySysLockMutex activeWorker="18">
- <Counter worker="0">6879345</Counter>
- <Counter worker="1">6879777</Counter>
- <Counter worker="2">6879643</Counter>
- <Counter worker="3">6879775</Counter>
- <Counter worker="4">6882068</Counter>
- <Counter worker="5">6881973</Counter>
- <Counter worker="6">6880439</Counter>
- <Counter worker="7">6880578</Counter>
- <Counter worker="8">6777968</Counter>
- <Counter worker="9">6778044</Counter>
- <Counter worker="10">6777204</Counter>
- <Counter worker="11">6777188</Counter>
- <Counter worker="12">6777851</Counter>
- <Counter worker="13">6777905</Counter>
- <Counter worker="14">6779627</Counter>
- <Counter worker="15">6779691</Counter>
- <Counter worker="16">7557727</Counter>
- <Counter worker="17">7557705</Counter>
- </ManySysLockMutex>
- <ManySysLockMutex activeWorker="19">
- <Counter worker="0">6937193</Counter>
- <Counter worker="1">6937631</Counter>
- <Counter worker="2">6937312</Counter>
- <Counter worker="3">6937409</Counter>
- <Counter worker="4">6940007</Counter>
- <Counter worker="5">6939931</Counter>
- <Counter worker="6">6938301</Counter>
- <Counter worker="7">6938409</Counter>
- <Counter worker="8">6827232</Counter>
- <Counter worker="9">6827251</Counter>
- <Counter worker="10">6826171</Counter>
- <Counter worker="11">6826057</Counter>
- <Counter worker="12">6827889</Counter>
- <Counter worker="13">6827896</Counter>
- <Counter worker="14">6830967</Counter>
- <Counter worker="15">6830958</Counter>
- <Counter worker="16">7441511</Counter>
- <Counter worker="17">7441523</Counter>
- <Counter worker="18">7441610</Counter>
- </ManySysLockMutex>
- <ManySysLockMutex activeWorker="20">
- <Counter worker="0">6900511</Counter>
- <Counter worker="1">6900940</Counter>
- <Counter worker="2">6901585</Counter>
- <Counter worker="3">6901715</Counter>
- <Counter worker="4">6902897</Counter>
- <Counter worker="5">6902770</Counter>
- <Counter worker="6">6902123</Counter>
- <Counter worker="7">6902302</Counter>
- <Counter worker="8">6781385</Counter>
- <Counter worker="9">6781384</Counter>
- <Counter worker="10">6779534</Counter>
- <Counter worker="11">6779472</Counter>
- <Counter worker="12">6781940</Counter>
- <Counter worker="13">6781974</Counter>
- <Counter worker="14">6784544</Counter>
- <Counter worker="15">6784535</Counter>
- <Counter worker="16">7224882</Counter>
- <Counter worker="17">7224913</Counter>
- <Counter worker="18">7224905</Counter>
- <Counter worker="19">7224953</Counter>
- </ManySysLockMutex>
- <ManySysLockMutex activeWorker="21">
- <Counter worker="0">6943617</Counter>
- <Counter worker="1">6944082</Counter>
- <Counter worker="2">6943750</Counter>
- <Counter worker="3">6943857</Counter>
- <Counter worker="4">6945186</Counter>
- <Counter worker="5">6945096</Counter>
- <Counter worker="6">6944668</Counter>
- <Counter worker="7">6944790</Counter>
- <Counter worker="8">6781824</Counter>
- <Counter worker="9">6781819</Counter>
- <Counter worker="10">6780449</Counter>
- <Counter worker="11">6780372</Counter>
- <Counter worker="12">6782024</Counter>
- <Counter worker="13">6782050</Counter>
- <Counter worker="14">6784510</Counter>
- <Counter worker="15">6784514</Counter>
- <Counter worker="16">7257452</Counter>
- <Counter worker="17">7257495</Counter>
- <Counter worker="18">7257487</Counter>
- <Counter worker="19">7257508</Counter>
- <Counter worker="20">7257524</Counter>
- </ManySysLockMutex>
- <ManySysLockMutex activeWorker="22">
- <Counter worker="0">6917953</Counter>
- <Counter worker="1">6918400</Counter>
- <Counter worker="2">6919356</Counter>
- <Counter worker="3">6919471</Counter>
- <Counter worker="4">6920305</Counter>
- <Counter worker="5">6920183</Counter>
- <Counter worker="6">6919649</Counter>
- <Counter worker="7">6919751</Counter>
- <Counter worker="8">6791371</Counter>
- <Counter worker="9">6791413</Counter>
- <Counter worker="10">6788420</Counter>
- <Counter worker="11">6788340</Counter>
- <Counter worker="12">6792848</Counter>
- <Counter worker="13">6792844</Counter>
- <Counter worker="14">6797629</Counter>
- <Counter worker="15">6797728</Counter>
- <Counter worker="16">7113691</Counter>
- <Counter worker="17">7113715</Counter>
- <Counter worker="18">7112292</Counter>
- <Counter worker="19">7112305</Counter>
- <Counter worker="20">7113609</Counter>
- <Counter worker="21">7113680</Counter>
- </ManySysLockMutex>
- <ManySysLockMutex activeWorker="23">
- <Counter worker="0">6891252</Counter>
- <Counter worker="1">6891663</Counter>
- <Counter worker="2">6891546</Counter>
- <Counter worker="3">6891706</Counter>
- <Counter worker="4">6893277</Counter>
- <Counter worker="5">6893152</Counter>
- <Counter worker="6">6892566</Counter>
- <Counter worker="7">6892657</Counter>
- <Counter worker="8">6759690</Counter>
- <Counter worker="9">6759744</Counter>
- <Counter worker="10">6757928</Counter>
- <Counter worker="11">6757837</Counter>
- <Counter worker="12">6760968</Counter>
- <Counter worker="13">6760984</Counter>
- <Counter worker="14">6764597</Counter>
- <Counter worker="15">6764671</Counter>
- <Counter worker="16">7031553</Counter>
- <Counter worker="17">7031562</Counter>
- <Counter worker="18">7031468</Counter>
- <Counter worker="19">7031438</Counter>
- <Counter worker="20">7031584</Counter>
- <Counter worker="21">7031649</Counter>
- <Counter worker="22">7034463</Counter>
- </ManySysLockMutex>
- <ManySysLockMutex activeWorker="24">
- <Counter worker="0">6936624</Counter>
- <Counter worker="1">6937095</Counter>
- <Counter worker="2">6937990</Counter>
- <Counter worker="3">6938116</Counter>
- <Counter worker="4">6938974</Counter>
- <Counter worker="5">6938848</Counter>
- <Counter worker="6">6938729</Counter>
- <Counter worker="7">6938855</Counter>
- <Counter worker="8">6802487</Counter>
- <Counter worker="9">6802507</Counter>
- <Counter worker="10">6802119</Counter>
- <Counter worker="11">6802052</Counter>
- <Counter worker="12">6804132</Counter>
- <Counter worker="13">6804142</Counter>
- <Counter worker="14">6807402</Counter>
- <Counter worker="15">6807440</Counter>
- <Counter worker="16">6895101</Counter>
- <Counter worker="17">6895091</Counter>
- <Counter worker="18">6896248</Counter>
- <Counter worker="19">6896161</Counter>
- <Counter worker="20">6894890</Counter>
- <Counter worker="21">6894820</Counter>
- <Counter worker="22">6893800</Counter>
- <Counter worker="23">6893757</Counter>
- </ManySysLockMutex>
- <ManyClassicCeilingMutex activeWorker="1">
- <Counter worker="0">783933</Counter>
- </ManyClassicCeilingMutex>
- <ManyClassicCeilingMutex activeWorker="2">
- <Counter worker="0">715842</Counter>
- <Counter worker="1">715877</Counter>
- </ManyClassicCeilingMutex>
- <ManyClassicCeilingMutex activeWorker="3">
- <Counter worker="0">673594</Counter>
- <Counter worker="1">673548</Counter>
- <Counter worker="2">673597</Counter>
- </ManyClassicCeilingMutex>
- <ManyClassicCeilingMutex activeWorker="4">
- <Counter worker="0">507004</Counter>
- <Counter worker="1">506998</Counter>
- <Counter worker="2">506958</Counter>
- <Counter worker="3">507007</Counter>
- </ManyClassicCeilingMutex>
- <ManyClassicCeilingMutex activeWorker="5">
- <Counter worker="0">399544</Counter>
- <Counter worker="1">399546</Counter>
- <Counter worker="2">399537</Counter>
- <Counter worker="3">399496</Counter>
- <Counter worker="4">399551</Counter>
- </ManyClassicCeilingMutex>
- <ManyClassicCeilingMutex activeWorker="6">
- <Counter worker="0">326511</Counter>
- <Counter worker="1">326516</Counter>
- <Counter worker="2">326514</Counter>
- <Counter worker="3">326477</Counter>
- <Counter worker="4">326516</Counter>
- <Counter worker="5">326515</Counter>
- </ManyClassicCeilingMutex>
- <ManyClassicCeilingMutex activeWorker="7">
- <Counter worker="0">262720</Counter>
- <Counter worker="1">262759</Counter>
- <Counter worker="2">262752</Counter>
- <Counter worker="3">262761</Counter>
- <Counter worker="4">262765</Counter>
- <Counter worker="5">262760</Counter>
- <Counter worker="6">262754</Counter>
- </ManyClassicCeilingMutex>
- <ManyClassicCeilingMutex activeWorker="8">
- <Counter worker="0">234094</Counter>
- <Counter worker="1">234134</Counter>
- <Counter worker="2">234129</Counter>
- <Counter worker="3">234127</Counter>
- <Counter worker="4">234131</Counter>
- <Counter worker="5">234121</Counter>
- <Counter worker="6">234124</Counter>
- <Counter worker="7">234127</Counter>
- </ManyClassicCeilingMutex>
- <ManyClassicCeilingMutex activeWorker="9">
- <Counter worker="0">108770</Counter>
- <Counter worker="1">108767</Counter>
- <Counter worker="2">108774</Counter>
- <Counter worker="3">108774</Counter>
- <Counter worker="4">108762</Counter>
- <Counter worker="5">108772</Counter>
- <Counter worker="6">108769</Counter>
- <Counter worker="7">108772</Counter>
- <Counter worker="8">108769</Counter>
- </ManyClassicCeilingMutex>
- <ManyClassicCeilingMutex activeWorker="10">
- <Counter worker="0">88888</Counter>
- <Counter worker="1">88883</Counter>
- <Counter worker="2">88889</Counter>
- <Counter worker="3">88885</Counter>
- <Counter worker="4">88885</Counter>
- <Counter worker="5">88885</Counter>
- <Counter worker="6">88883</Counter>
- <Counter worker="7">88882</Counter>
- <Counter worker="8">88877</Counter>
- <Counter worker="9">88883</Counter>
- </ManyClassicCeilingMutex>
- <ManyClassicCeilingMutex activeWorker="11">
- <Counter worker="0">77874</Counter>
- <Counter worker="1">77873</Counter>
- <Counter worker="2">77879</Counter>
- <Counter worker="3">77872</Counter>
- <Counter worker="4">77873</Counter>
- <Counter worker="5">77877</Counter>
- <Counter worker="6">77880</Counter>
- <Counter worker="7">77876</Counter>
- <Counter worker="8">77874</Counter>
- <Counter worker="9">77870</Counter>
- <Counter worker="10">77872</Counter>
- </ManyClassicCeilingMutex>
- <ManyClassicCeilingMutex activeWorker="12">
- <Counter worker="0">70256</Counter>
- <Counter worker="1">70259</Counter>
- <Counter worker="2">70264</Counter>
- <Counter worker="3">70258</Counter>
- <Counter worker="4">70262</Counter>
- <Counter worker="5">70266</Counter>
- <Counter worker="6">70260</Counter>
- <Counter worker="7">70256</Counter>
- <Counter worker="8">70257</Counter>
- <Counter worker="9">70258</Counter>
- <Counter worker="10">70259</Counter>
- <Counter worker="11">70258</Counter>
- </ManyClassicCeilingMutex>
- <ManyClassicCeilingMutex activeWorker="13">
- <Counter worker="0">62735</Counter>
- <Counter worker="1">62740</Counter>
- <Counter worker="2">62741</Counter>
- <Counter worker="3">62737</Counter>
- <Counter worker="4">62733</Counter>
- <Counter worker="5">62735</Counter>
- <Counter worker="6">62736</Counter>
- <Counter worker="7">62734</Counter>
- <Counter worker="8">62732</Counter>
- <Counter worker="9">62731</Counter>
- <Counter worker="10">62731</Counter>
- <Counter worker="11">62730</Counter>
- <Counter worker="12">62730</Counter>
- </ManyClassicCeilingMutex>
- <ManyClassicCeilingMutex activeWorker="14">
- <Counter worker="0">59093</Counter>
- <Counter worker="1">59091</Counter>
- <Counter worker="2">59093</Counter>
- <Counter worker="3">59094</Counter>
- <Counter worker="4">59088</Counter>
- <Counter worker="5">59092</Counter>
- <Counter worker="6">59099</Counter>
- <Counter worker="7">59097</Counter>
- <Counter worker="8">59091</Counter>
- <Counter worker="9">59089</Counter>
- <Counter worker="10">59088</Counter>
- <Counter worker="11">59102</Counter>
- <Counter worker="12">59088</Counter>
- <Counter worker="13">59087</Counter>
- </ManyClassicCeilingMutex>
- <ManyClassicCeilingMutex activeWorker="15">
- <Counter worker="0">51130</Counter>
- <Counter worker="1">51127</Counter>
- <Counter worker="2">51121</Counter>
- <Counter worker="3">51131</Counter>
- <Counter worker="4">51123</Counter>
- <Counter worker="5">51125</Counter>
- <Counter worker="6">51129</Counter>
- <Counter worker="7">51121</Counter>
- <Counter worker="8">51125</Counter>
- <Counter worker="9">51120</Counter>
- <Counter worker="10">51126</Counter>
- <Counter worker="11">51122</Counter>
- <Counter worker="12">51124</Counter>
- <Counter worker="13">51122</Counter>
- <Counter worker="14">51124</Counter>
- </ManyClassicCeilingMutex>
- <ManyClassicCeilingMutex activeWorker="16">
- <Counter worker="0">48586</Counter>
- <Counter worker="1">48591</Counter>
- <Counter worker="2">48592</Counter>
- <Counter worker="3">48586</Counter>
- <Counter worker="4">48586</Counter>
- <Counter worker="5">48590</Counter>
- <Counter worker="6">48588</Counter>
- <Counter worker="7">48587</Counter>
- <Counter worker="8">48594</Counter>
- <Counter worker="9">48596</Counter>
- <Counter worker="10">48588</Counter>
- <Counter worker="11">48589</Counter>
- <Counter worker="12">48596</Counter>
- <Counter worker="13">48593</Counter>
- <Counter worker="14">48591</Counter>
- <Counter worker="15">48589</Counter>
- </ManyClassicCeilingMutex>
- <ManyClassicCeilingMutex activeWorker="17">
- <Counter worker="0">43007</Counter>
- <Counter worker="1">42998</Counter>
- <Counter worker="2">43002</Counter>
- <Counter worker="3">43006</Counter>
- <Counter worker="4">43008</Counter>
- <Counter worker="5">43010</Counter>
- <Counter worker="6">43000</Counter>
- <Counter worker="7">43002</Counter>
- <Counter worker="8">42999</Counter>
- <Counter worker="9">43000</Counter>
- <Counter worker="10">43003</Counter>
- <Counter worker="11">42999</Counter>
- <Counter worker="12">42998</Counter>
- <Counter worker="13">43001</Counter>
- <Counter worker="14">43004</Counter>
- <Counter worker="15">43005</Counter>
- <Counter worker="16">43005</Counter>
- </ManyClassicCeilingMutex>
- <ManyClassicCeilingMutex activeWorker="18">
- <Counter worker="0">38958</Counter>
- <Counter worker="1">38953</Counter>
- <Counter worker="2">38958</Counter>
- <Counter worker="3">38951</Counter>
- <Counter worker="4">38950</Counter>
- <Counter worker="5">38972</Counter>
- <Counter worker="6">38950</Counter>
- <Counter worker="7">38953</Counter>
- <Counter worker="8">38957</Counter>
- <Counter worker="9">38956</Counter>
- <Counter worker="10">38955</Counter>
- <Counter worker="11">38967</Counter>
- <Counter worker="12">38952</Counter>
- <Counter worker="13">38952</Counter>
- <Counter worker="14">38963</Counter>
- <Counter worker="15">38951</Counter>
- <Counter worker="16">38960</Counter>
- <Counter worker="17">38954</Counter>
- </ManyClassicCeilingMutex>
- <ManyClassicCeilingMutex activeWorker="19">
- <Counter worker="0">37040</Counter>
- <Counter worker="1">37042</Counter>
- <Counter worker="2">37050</Counter>
- <Counter worker="3">37051</Counter>
- <Counter worker="4">37049</Counter>
- <Counter worker="5">37047</Counter>
- <Counter worker="6">37044</Counter>
- <Counter worker="7">37042</Counter>
- <Counter worker="8">37048</Counter>
- <Counter worker="9">37039</Counter>
- <Counter worker="10">37045</Counter>
- <Counter worker="11">37041</Counter>
- <Counter worker="12">37041</Counter>
- <Counter worker="13">37038</Counter>
- <Counter worker="14">37038</Counter>
- <Counter worker="15">37040</Counter>
- <Counter worker="16">37043</Counter>
- <Counter worker="17">37044</Counter>
- <Counter worker="18">37045</Counter>
- </ManyClassicCeilingMutex>
- <ManyClassicCeilingMutex activeWorker="20">
- <Counter worker="0">33977</Counter>
- <Counter worker="1">33977</Counter>
- <Counter worker="2">33969</Counter>
- <Counter worker="3">33975</Counter>
- <Counter worker="4">33965</Counter>
- <Counter worker="5">33968</Counter>
- <Counter worker="6">33967</Counter>
- <Counter worker="7">33974</Counter>
- <Counter worker="8">33968</Counter>
- <Counter worker="9">33972</Counter>
- <Counter worker="10">33964</Counter>
- <Counter worker="11">33973</Counter>
- <Counter worker="12">33970</Counter>
- <Counter worker="13">33967</Counter>
- <Counter worker="14">33965</Counter>
- <Counter worker="15">33966</Counter>
- <Counter worker="16">33966</Counter>
- <Counter worker="17">33972</Counter>
- <Counter worker="18">33971</Counter>
- <Counter worker="19">33970</Counter>
- </ManyClassicCeilingMutex>
- <ManyClassicCeilingMutex activeWorker="21">
- <Counter worker="0">34845</Counter>
- <Counter worker="1">34846</Counter>
- <Counter worker="2">34849</Counter>
- <Counter worker="3">34851</Counter>
- <Counter worker="4">34850</Counter>
- <Counter worker="5">34842</Counter>
- <Counter worker="6">34845</Counter>
- <Counter worker="7">34856</Counter>
- <Counter worker="8">34842</Counter>
- <Counter worker="9">34842</Counter>
- <Counter worker="10">34844</Counter>
- <Counter worker="11">34848</Counter>
- <Counter worker="12">34856</Counter>
- <Counter worker="13">34857</Counter>
- <Counter worker="14">34843</Counter>
- <Counter worker="15">34856</Counter>
- <Counter worker="16">34849</Counter>
- <Counter worker="17">34847</Counter>
- <Counter worker="18">34847</Counter>
- <Counter worker="19">34843</Counter>
- <Counter worker="20">34844</Counter>
- </ManyClassicCeilingMutex>
- <ManyClassicCeilingMutex activeWorker="22">
- <Counter worker="0">29938</Counter>
- <Counter worker="1">29946</Counter>
- <Counter worker="2">29949</Counter>
- <Counter worker="3">29944</Counter>
- <Counter worker="4">29940</Counter>
- <Counter worker="5">29945</Counter>
- <Counter worker="6">29938</Counter>
- <Counter worker="7">29943</Counter>
- <Counter worker="8">29942</Counter>
- <Counter worker="9">29945</Counter>
- <Counter worker="10">29940</Counter>
- <Counter worker="11">29946</Counter>
- <Counter worker="12">29939</Counter>
- <Counter worker="13">29938</Counter>
- <Counter worker="14">29948</Counter>
- <Counter worker="15">29939</Counter>
- <Counter worker="16">29941</Counter>
- <Counter worker="17">29948</Counter>
- <Counter worker="18">29943</Counter>
- <Counter worker="19">29941</Counter>
- <Counter worker="20">29951</Counter>
- <Counter worker="21">29952</Counter>
- </ManyClassicCeilingMutex>
- <ManyClassicCeilingMutex activeWorker="23">
- <Counter worker="0">29210</Counter>
- <Counter worker="1">29214</Counter>
- <Counter worker="2">29224</Counter>
- <Counter worker="3">29225</Counter>
- <Counter worker="4">29212</Counter>
- <Counter worker="5">29218</Counter>
- <Counter worker="6">29218</Counter>
- <Counter worker="7">29210</Counter>
- <Counter worker="8">29219</Counter>
- <Counter worker="9">29220</Counter>
- <Counter worker="10">29222</Counter>
- <Counter worker="11">29217</Counter>
- <Counter worker="12">29215</Counter>
- <Counter worker="13">29212</Counter>
- <Counter worker="14">29210</Counter>
- <Counter worker="15">29214</Counter>
- <Counter worker="16">29213</Counter>
- <Counter worker="17">29216</Counter>
- <Counter worker="18">29217</Counter>
- <Counter worker="19">29221</Counter>
- <Counter worker="20">29211</Counter>
- <Counter worker="21">29213</Counter>
- <Counter worker="22">29216</Counter>
- </ManyClassicCeilingMutex>
- <ManyClassicCeilingMutex activeWorker="24">
- <Counter worker="0">25904</Counter>
- <Counter worker="1">25912</Counter>
- <Counter worker="2">25906</Counter>
- <Counter worker="3">25914</Counter>
- <Counter worker="4">25909</Counter>
- <Counter worker="5">25909</Counter>
- <Counter worker="6">25911</Counter>
- <Counter worker="7">25907</Counter>
- <Counter worker="8">25906</Counter>
- <Counter worker="9">25903</Counter>
- <Counter worker="10">25905</Counter>
- <Counter worker="11">25905</Counter>
- <Counter worker="12">25913</Counter>
- <Counter worker="13">25910</Counter>
- <Counter worker="14">25913</Counter>
- <Counter worker="15">25915</Counter>
- <Counter worker="16">25911</Counter>
- <Counter worker="17">25903</Counter>
- <Counter worker="18">25908</Counter>
- <Counter worker="19">25916</Counter>
- <Counter worker="20">25918</Counter>
- <Counter worker="21">25919</Counter>
- <Counter worker="22">25904</Counter>
- <Counter worker="23">25907</Counter>
- </ManyClassicCeilingMutex>
- <ManyClassicMrsPMutex activeWorker="1">
- <Counter worker="0">784201</Counter>
- </ManyClassicMrsPMutex>
- <ManyClassicMrsPMutex activeWorker="2">
- <Counter worker="0">712340</Counter>
- <Counter worker="1">712386</Counter>
- </ManyClassicMrsPMutex>
- <ManyClassicMrsPMutex activeWorker="3">
- <Counter worker="0">674000</Counter>
- <Counter worker="1">674051</Counter>
- <Counter worker="2">674040</Counter>
- </ManyClassicMrsPMutex>
- <ManyClassicMrsPMutex activeWorker="4">
- <Counter worker="0">508157</Counter>
- <Counter worker="1">508153</Counter>
- <Counter worker="2">508159</Counter>
- <Counter worker="3">508110</Counter>
- </ManyClassicMrsPMutex>
- <ManyClassicMrsPMutex activeWorker="5">
- <Counter worker="0">404003</Counter>
- <Counter worker="1">403999</Counter>
- <Counter worker="2">404000</Counter>
- <Counter worker="3">403956</Counter>
- <Counter worker="4">404001</Counter>
- </ManyClassicMrsPMutex>
- <ManyClassicMrsPMutex activeWorker="6">
- <Counter worker="0">327904</Counter>
- <Counter worker="1">327939</Counter>
- <Counter worker="2">327942</Counter>
- <Counter worker="3">327939</Counter>
- <Counter worker="4">327939</Counter>
- <Counter worker="5">327943</Counter>
- </ManyClassicMrsPMutex>
- <ManyClassicMrsPMutex activeWorker="7">
- <Counter worker="0">272616</Counter>
- <Counter worker="1">272614</Counter>
- <Counter worker="2">272610</Counter>
- <Counter worker="3">272613</Counter>
- <Counter worker="4">272618</Counter>
- <Counter worker="5">272620</Counter>
- <Counter worker="6">272575</Counter>
- </ManyClassicMrsPMutex>
- <ManyClassicMrsPMutex activeWorker="8">
- <Counter worker="0">234547</Counter>
- <Counter worker="1">234543</Counter>
- <Counter worker="2">234550</Counter>
- <Counter worker="3">234547</Counter>
- <Counter worker="4">234513</Counter>
- <Counter worker="5">234546</Counter>
- <Counter worker="6">234543</Counter>
- <Counter worker="7">234543</Counter>
- </ManyClassicMrsPMutex>
- <ManyClassicMrsPMutex activeWorker="9">
- <Counter worker="0">107383</Counter>
- <Counter worker="1">107392</Counter>
- <Counter worker="2">107386</Counter>
- <Counter worker="3">107386</Counter>
- <Counter worker="4">107389</Counter>
- <Counter worker="5">107392</Counter>
- <Counter worker="6">107385</Counter>
- <Counter worker="7">107394</Counter>
- <Counter worker="8">107377</Counter>
- </ManyClassicMrsPMutex>
- <ManyClassicMrsPMutex activeWorker="10">
- <Counter worker="0">89997</Counter>
- <Counter worker="1">89997</Counter>
- <Counter worker="2">89997</Counter>
- <Counter worker="3">90000</Counter>
- <Counter worker="4">90001</Counter>
- <Counter worker="5">89993</Counter>
- <Counter worker="6">89995</Counter>
- <Counter worker="7">89995</Counter>
- <Counter worker="8">90001</Counter>
- <Counter worker="9">90001</Counter>
- </ManyClassicMrsPMutex>
- <ManyClassicMrsPMutex activeWorker="11">
- <Counter worker="0">76542</Counter>
- <Counter worker="1">76545</Counter>
- <Counter worker="2">76542</Counter>
- <Counter worker="3">76541</Counter>
- <Counter worker="4">76540</Counter>
- <Counter worker="5">76549</Counter>
- <Counter worker="6">76548</Counter>
- <Counter worker="7">76545</Counter>
- <Counter worker="8">76540</Counter>
- <Counter worker="9">76540</Counter>
- <Counter worker="10">76545</Counter>
- </ManyClassicMrsPMutex>
- <ManyClassicMrsPMutex activeWorker="12">
- <Counter worker="0">65159</Counter>
- <Counter worker="1">65161</Counter>
- <Counter worker="2">65155</Counter>
- <Counter worker="3">65158</Counter>
- <Counter worker="4">65156</Counter>
- <Counter worker="5">65154</Counter>
- <Counter worker="6">65157</Counter>
- <Counter worker="7">65156</Counter>
- <Counter worker="8">65150</Counter>
- <Counter worker="9">65153</Counter>
- <Counter worker="10">65154</Counter>
- <Counter worker="11">65152</Counter>
- </ManyClassicMrsPMutex>
- <ManyClassicMrsPMutex activeWorker="13">
- <Counter worker="0">61089</Counter>
- <Counter worker="1">61093</Counter>
- <Counter worker="2">61092</Counter>
- <Counter worker="3">61093</Counter>
- <Counter worker="4">61094</Counter>
- <Counter worker="5">61089</Counter>
- <Counter worker="6">61090</Counter>
- <Counter worker="7">61092</Counter>
- <Counter worker="8">61098</Counter>
- <Counter worker="9">61098</Counter>
- <Counter worker="10">61091</Counter>
- <Counter worker="11">61090</Counter>
- <Counter worker="12">61095</Counter>
- </ManyClassicMrsPMutex>
- <ManyClassicMrsPMutex activeWorker="14">
- <Counter worker="0">58163</Counter>
- <Counter worker="1">58164</Counter>
- <Counter worker="2">58160</Counter>
- <Counter worker="3">58158</Counter>
- <Counter worker="4">58156</Counter>
- <Counter worker="5">58159</Counter>
- <Counter worker="6">58157</Counter>
- <Counter worker="7">58156</Counter>
- <Counter worker="8">58153</Counter>
- <Counter worker="9">58155</Counter>
- <Counter worker="10">58154</Counter>
- <Counter worker="11">58150</Counter>
- <Counter worker="12">58153</Counter>
- <Counter worker="13">58152</Counter>
- </ManyClassicMrsPMutex>
- <ManyClassicMrsPMutex activeWorker="15">
- <Counter worker="0">49108</Counter>
- <Counter worker="1">49110</Counter>
- <Counter worker="2">49107</Counter>
- <Counter worker="3">49106</Counter>
- <Counter worker="4">49114</Counter>
- <Counter worker="5">49112</Counter>
- <Counter worker="6">49113</Counter>
- <Counter worker="7">49107</Counter>
- <Counter worker="8">49109</Counter>
- <Counter worker="9">49110</Counter>
- <Counter worker="10">49112</Counter>
- <Counter worker="11">49117</Counter>
- <Counter worker="12">49115</Counter>
- <Counter worker="13">49111</Counter>
- <Counter worker="14">49106</Counter>
- </ManyClassicMrsPMutex>
- <ManyClassicMrsPMutex activeWorker="16">
- <Counter worker="0">45403</Counter>
- <Counter worker="1">45406</Counter>
- <Counter worker="2">45405</Counter>
- <Counter worker="3">45404</Counter>
- <Counter worker="4">45407</Counter>
- <Counter worker="5">45402</Counter>
- <Counter worker="6">45401</Counter>
- <Counter worker="7">45403</Counter>
- <Counter worker="8">45407</Counter>
- <Counter worker="9">45410</Counter>
- <Counter worker="10">45411</Counter>
- <Counter worker="11">45404</Counter>
- <Counter worker="12">45413</Counter>
- <Counter worker="13">45410</Counter>
- <Counter worker="14">45401</Counter>
- <Counter worker="15">45401</Counter>
- </ManyClassicMrsPMutex>
- <ManyClassicMrsPMutex activeWorker="17">
- <Counter worker="0">40546</Counter>
- <Counter worker="1">40547</Counter>
- <Counter worker="2">40552</Counter>
- <Counter worker="3">40546</Counter>
- <Counter worker="4">40554</Counter>
- <Counter worker="5">40553</Counter>
- <Counter worker="6">40550</Counter>
- <Counter worker="7">40552</Counter>
- <Counter worker="8">40559</Counter>
- <Counter worker="9">40559</Counter>
- <Counter worker="10">40555</Counter>
- <Counter worker="11">40556</Counter>
- <Counter worker="12">40550</Counter>
- <Counter worker="13">40548</Counter>
- <Counter worker="14">40548</Counter>
- <Counter worker="15">40549</Counter>
- <Counter worker="16">40551</Counter>
- </ManyClassicMrsPMutex>
- <ManyClassicMrsPMutex activeWorker="18">
- <Counter worker="0">39609</Counter>
- <Counter worker="1">39614</Counter>
- <Counter worker="2">39610</Counter>
- <Counter worker="3">39616</Counter>
- <Counter worker="4">39618</Counter>
- <Counter worker="5">39615</Counter>
- <Counter worker="6">39613</Counter>
- <Counter worker="7">39613</Counter>
- <Counter worker="8">39615</Counter>
- <Counter worker="9">39617</Counter>
- <Counter worker="10">39610</Counter>
- <Counter worker="11">39618</Counter>
- <Counter worker="12">39615</Counter>
- <Counter worker="13">39611</Counter>
- <Counter worker="14">39612</Counter>
- <Counter worker="15">39611</Counter>
- <Counter worker="16">39621</Counter>
- <Counter worker="17">39620</Counter>
- </ManyClassicMrsPMutex>
- <ManyClassicMrsPMutex activeWorker="19">
- <Counter worker="0">35744</Counter>
- <Counter worker="1">35742</Counter>
- <Counter worker="2">35744</Counter>
- <Counter worker="3">35747</Counter>
- <Counter worker="4">35752</Counter>
- <Counter worker="5">35755</Counter>
- <Counter worker="6">35745</Counter>
- <Counter worker="7">35753</Counter>
- <Counter worker="8">35745</Counter>
- <Counter worker="9">35747</Counter>
- <Counter worker="10">35742</Counter>
- <Counter worker="11">35751</Counter>
- <Counter worker="12">35749</Counter>
- <Counter worker="13">35746</Counter>
- <Counter worker="14">35743</Counter>
- <Counter worker="15">35746</Counter>
- <Counter worker="16">35749</Counter>
- <Counter worker="17">35743</Counter>
- <Counter worker="18">35748</Counter>
- </ManyClassicMrsPMutex>
- <ManyClassicMrsPMutex activeWorker="20">
- <Counter worker="0">33654</Counter>
- <Counter worker="1">33664</Counter>
- <Counter worker="2">33659</Counter>
- <Counter worker="3">33661</Counter>
- <Counter worker="4">33654</Counter>
- <Counter worker="5">33658</Counter>
- <Counter worker="6">33663</Counter>
- <Counter worker="7">33654</Counter>
- <Counter worker="8">33668</Counter>
- <Counter worker="9">33660</Counter>
- <Counter worker="10">33660</Counter>
- <Counter worker="11">33655</Counter>
- <Counter worker="12">33667</Counter>
- <Counter worker="13">33657</Counter>
- <Counter worker="14">33655</Counter>
- <Counter worker="15">33664</Counter>
- <Counter worker="16">33657</Counter>
- <Counter worker="17">33656</Counter>
- <Counter worker="18">33662</Counter>
- <Counter worker="19">33659</Counter>
- </ManyClassicMrsPMutex>
- <ManyClassicMrsPMutex activeWorker="21">
- <Counter worker="0">32410</Counter>
- <Counter worker="1">32414</Counter>
- <Counter worker="2">32407</Counter>
- <Counter worker="3">32409</Counter>
- <Counter worker="4">32420</Counter>
- <Counter worker="5">32413</Counter>
- <Counter worker="6">32422</Counter>
- <Counter worker="7">32421</Counter>
- <Counter worker="8">32408</Counter>
- <Counter worker="9">32414</Counter>
- <Counter worker="10">32407</Counter>
- <Counter worker="11">32411</Counter>
- <Counter worker="12">32413</Counter>
- <Counter worker="13">32416</Counter>
- <Counter worker="14">32408</Counter>
- <Counter worker="15">32418</Counter>
- <Counter worker="16">32412</Counter>
- <Counter worker="17">32416</Counter>
- <Counter worker="18">32411</Counter>
- <Counter worker="19">32410</Counter>
- <Counter worker="20">32417</Counter>
- </ManyClassicMrsPMutex>
- <ManyClassicMrsPMutex activeWorker="22">
- <Counter worker="0">29188</Counter>
- <Counter worker="1">29192</Counter>
- <Counter worker="2">29201</Counter>
- <Counter worker="3">29198</Counter>
- <Counter worker="4">29187</Counter>
- <Counter worker="5">29195</Counter>
- <Counter worker="6">29192</Counter>
- <Counter worker="7">29195</Counter>
- <Counter worker="8">29200</Counter>
- <Counter worker="9">29193</Counter>
- <Counter worker="10">29197</Counter>
- <Counter worker="11">29189</Counter>
- <Counter worker="12">29189</Counter>
- <Counter worker="13">29190</Counter>
- <Counter worker="14">29188</Counter>
- <Counter worker="15">29196</Counter>
- <Counter worker="16">29194</Counter>
- <Counter worker="17">29191</Counter>
- <Counter worker="18">29199</Counter>
- <Counter worker="19">29194</Counter>
- <Counter worker="20">29191</Counter>
- <Counter worker="21">29190</Counter>
- </ManyClassicMrsPMutex>
- <ManyClassicMrsPMutex activeWorker="23">
- <Counter worker="0">27206</Counter>
- <Counter worker="1">27216</Counter>
- <Counter worker="2">27222</Counter>
- <Counter worker="3">27211</Counter>
- <Counter worker="4">27211</Counter>
- <Counter worker="5">27210</Counter>
- <Counter worker="6">27212</Counter>
- <Counter worker="7">27208</Counter>
- <Counter worker="8">27214</Counter>
- <Counter worker="9">27207</Counter>
- <Counter worker="10">27208</Counter>
- <Counter worker="11">27214</Counter>
- <Counter worker="12">27210</Counter>
- <Counter worker="13">27209</Counter>
- <Counter worker="14">27218</Counter>
- <Counter worker="15">27217</Counter>
- <Counter worker="16">27219</Counter>
- <Counter worker="17">27206</Counter>
- <Counter worker="18">27215</Counter>
- <Counter worker="19">27213</Counter>
- <Counter worker="20">27207</Counter>
- <Counter worker="21">27212</Counter>
- <Counter worker="22">27232</Counter>
- </ManyClassicMrsPMutex>
- <ManyClassicMrsPMutex activeWorker="24">
- <Counter worker="0">24666</Counter>
- <Counter worker="1">24670</Counter>
- <Counter worker="2">24664</Counter>
- <Counter worker="3">24672</Counter>
- <Counter worker="4">24671</Counter>
- <Counter worker="5">24668</Counter>
- <Counter worker="6">24668</Counter>
- <Counter worker="7">24667</Counter>
- <Counter worker="8">24671</Counter>
- <Counter worker="9">24664</Counter>
- <Counter worker="10">24667</Counter>
- <Counter worker="11">24666</Counter>
- <Counter worker="12">24675</Counter>
- <Counter worker="13">24670</Counter>
- <Counter worker="14">24664</Counter>
- <Counter worker="15">24673</Counter>
- <Counter worker="16">24673</Counter>
- <Counter worker="17">24669</Counter>
- <Counter worker="18">24665</Counter>
- <Counter worker="19">24675</Counter>
- <Counter worker="20">24681</Counter>
- <Counter worker="21">24674</Counter>
- <Counter worker="22">24677</Counter>
- <Counter worker="23">24681</Counter>
- </ManyClassicMrsPMutex>
- <ManyPthreadSpinlock activeWorker="1">
- <Counter worker="0">14718834</Counter>
- </ManyPthreadSpinlock>
- <ManyPthreadSpinlock activeWorker="2">
- <Counter worker="0">14545804</Counter>
- <Counter worker="1">14546744</Counter>
- </ManyPthreadSpinlock>
- <ManyPthreadSpinlock activeWorker="3">
- <Counter worker="0">14202896</Counter>
- <Counter worker="1">14203740</Counter>
- <Counter worker="2">14204031</Counter>
- </ManyPthreadSpinlock>
- <ManyPthreadSpinlock activeWorker="4">
- <Counter worker="0">13936060</Counter>
- <Counter worker="1">13936903</Counter>
- <Counter worker="2">13937157</Counter>
- <Counter worker="3">13937175</Counter>
- </ManyPthreadSpinlock>
- <ManyPthreadSpinlock activeWorker="5">
- <Counter worker="0">13882002</Counter>
- <Counter worker="1">13882875</Counter>
- <Counter worker="2">13883036</Counter>
- <Counter worker="3">13883032</Counter>
- <Counter worker="4">13883129</Counter>
- </ManyPthreadSpinlock>
- <ManyPthreadSpinlock activeWorker="6">
- <Counter worker="0">13678756</Counter>
- <Counter worker="1">13679620</Counter>
- <Counter worker="2">13679743</Counter>
- <Counter worker="3">13679940</Counter>
- <Counter worker="4">13679849</Counter>
- <Counter worker="5">13679778</Counter>
- </ManyPthreadSpinlock>
- <ManyPthreadSpinlock activeWorker="7">
- <Counter worker="0">13536294</Counter>
- <Counter worker="1">13537073</Counter>
- <Counter worker="2">13537313</Counter>
- <Counter worker="3">13537271</Counter>
- <Counter worker="4">13537347</Counter>
- <Counter worker="5">13537331</Counter>
- <Counter worker="6">13537366</Counter>
- </ManyPthreadSpinlock>
- <ManyPthreadSpinlock activeWorker="8">
- <Counter worker="0">13416795</Counter>
- <Counter worker="1">13417680</Counter>
- <Counter worker="2">13417750</Counter>
- <Counter worker="3">13417879</Counter>
- <Counter worker="4">13417890</Counter>
- <Counter worker="5">13417884</Counter>
- <Counter worker="6">13417887</Counter>
- <Counter worker="7">13417860</Counter>
- </ManyPthreadSpinlock>
- <ManyPthreadSpinlock activeWorker="9">
- <Counter worker="0">13344563</Counter>
- <Counter worker="1">13345425</Counter>
- <Counter worker="2">13345471</Counter>
- <Counter worker="3">13345553</Counter>
- <Counter worker="4">13345686</Counter>
- <Counter worker="5">13345685</Counter>
- <Counter worker="6">13345620</Counter>
- <Counter worker="7">13345553</Counter>
- <Counter worker="8">14664124</Counter>
- </ManyPthreadSpinlock>
- <ManyPthreadSpinlock activeWorker="10">
- <Counter worker="0">13345484</Counter>
- <Counter worker="1">13346290</Counter>
- <Counter worker="2">13346571</Counter>
- <Counter worker="3">13346539</Counter>
- <Counter worker="4">13346562</Counter>
- <Counter worker="5">13346553</Counter>
- <Counter worker="6">13346462</Counter>
- <Counter worker="7">13346482</Counter>
- <Counter worker="8">14489005</Counter>
- <Counter worker="9">14489074</Counter>
- </ManyPthreadSpinlock>
- <ManyPthreadSpinlock activeWorker="11">
- <Counter worker="0">13387106</Counter>
- <Counter worker="1">13387968</Counter>
- <Counter worker="2">13388136</Counter>
- <Counter worker="3">13388157</Counter>
- <Counter worker="4">13388188</Counter>
- <Counter worker="5">13388196</Counter>
- <Counter worker="6">13388173</Counter>
- <Counter worker="7">13388181</Counter>
- <Counter worker="8">14106966</Counter>
- <Counter worker="9">14106972</Counter>
- <Counter worker="10">14106794</Counter>
- </ManyPthreadSpinlock>
- <ManyPthreadSpinlock activeWorker="12">
- <Counter worker="0">13339713</Counter>
- <Counter worker="1">13340579</Counter>
- <Counter worker="2">13340745</Counter>
- <Counter worker="3">13340783</Counter>
- <Counter worker="4">13340828</Counter>
- <Counter worker="5">13340858</Counter>
- <Counter worker="6">13340715</Counter>
- <Counter worker="7">13340770</Counter>
- <Counter worker="8">13878859</Counter>
- <Counter worker="9">13878923</Counter>
- <Counter worker="10">13878707</Counter>
- <Counter worker="11">13878654</Counter>
- </ManyPthreadSpinlock>
- <ManyPthreadSpinlock activeWorker="13">
- <Counter worker="0">13423332</Counter>
- <Counter worker="1">13424154</Counter>
- <Counter worker="2">13424352</Counter>
- <Counter worker="3">13424415</Counter>
- <Counter worker="4">13424314</Counter>
- <Counter worker="5">13424308</Counter>
- <Counter worker="6">13424314</Counter>
- <Counter worker="7">13424303</Counter>
- <Counter worker="8">13894368</Counter>
- <Counter worker="9">13894493</Counter>
- <Counter worker="10">13894289</Counter>
- <Counter worker="11">13894305</Counter>
- <Counter worker="12">13894313</Counter>
- </ManyPthreadSpinlock>
- <ManyPthreadSpinlock activeWorker="14">
- <Counter worker="0">13374209</Counter>
- <Counter worker="1">13375090</Counter>
- <Counter worker="2">13375258</Counter>
- <Counter worker="3">13375185</Counter>
- <Counter worker="4">13375228</Counter>
- <Counter worker="5">13375289</Counter>
- <Counter worker="6">13375221</Counter>
- <Counter worker="7">13375272</Counter>
- <Counter worker="8">13638146</Counter>
- <Counter worker="9">13638099</Counter>
- <Counter worker="10">13638011</Counter>
- <Counter worker="11">13637921</Counter>
- <Counter worker="12">13638082</Counter>
- <Counter worker="13">13638078</Counter>
- </ManyPthreadSpinlock>
- <ManyPthreadSpinlock activeWorker="15">
- <Counter worker="0">13324122</Counter>
- <Counter worker="1">13324923</Counter>
- <Counter worker="2">13322227</Counter>
- <Counter worker="3">13322310</Counter>
- <Counter worker="4">13325255</Counter>
- <Counter worker="5">13325158</Counter>
- <Counter worker="6">13325121</Counter>
- <Counter worker="7">13325137</Counter>
- <Counter worker="8">13526376</Counter>
- <Counter worker="9">13526358</Counter>
- <Counter worker="10">13526223</Counter>
- <Counter worker="11">13526248</Counter>
- <Counter worker="12">13526360</Counter>
- <Counter worker="13">13526365</Counter>
- <Counter worker="14">13526370</Counter>
- </ManyPthreadSpinlock>
- <ManyPthreadSpinlock activeWorker="16">
- <Counter worker="0">13409904</Counter>
- <Counter worker="1">13410740</Counter>
- <Counter worker="2">13410903</Counter>
- <Counter worker="3">13410988</Counter>
- <Counter worker="4">13411030</Counter>
- <Counter worker="5">13410987</Counter>
- <Counter worker="6">13410838</Counter>
- <Counter worker="7">13410949</Counter>
- <Counter worker="8">13425120</Counter>
- <Counter worker="9">13425212</Counter>
- <Counter worker="10">13425033</Counter>
- <Counter worker="11">13425047</Counter>
- <Counter worker="12">13425054</Counter>
- <Counter worker="13">13425101</Counter>
- <Counter worker="14">13425139</Counter>
- <Counter worker="15">13425072</Counter>
- </ManyPthreadSpinlock>
- <ManyPthreadSpinlock activeWorker="17">
- <Counter worker="0">13358197</Counter>
- <Counter worker="1">13359084</Counter>
- <Counter worker="2">13359207</Counter>
- <Counter worker="3">13359276</Counter>
- <Counter worker="4">13359271</Counter>
- <Counter worker="5">13359332</Counter>
- <Counter worker="6">13359272</Counter>
- <Counter worker="7">13359197</Counter>
- <Counter worker="8">13377371</Counter>
- <Counter worker="9">13377387</Counter>
- <Counter worker="10">13377385</Counter>
- <Counter worker="11">13377388</Counter>
- <Counter worker="12">13377413</Counter>
- <Counter worker="13">13377416</Counter>
- <Counter worker="14">13377379</Counter>
- <Counter worker="15">13377457</Counter>
- <Counter worker="16">14648127</Counter>
- </ManyPthreadSpinlock>
- <ManyPthreadSpinlock activeWorker="18">
- <Counter worker="0">13450072</Counter>
- <Counter worker="1">13450903</Counter>
- <Counter worker="2">13451130</Counter>
- <Counter worker="3">13451147</Counter>
- <Counter worker="4">13451124</Counter>
- <Counter worker="5">13451254</Counter>
- <Counter worker="6">13451111</Counter>
- <Counter worker="7">13451124</Counter>
- <Counter worker="8">13476959</Counter>
- <Counter worker="9">13476898</Counter>
- <Counter worker="10">13476818</Counter>
- <Counter worker="11">13476757</Counter>
- <Counter worker="12">13476779</Counter>
- <Counter worker="13">13476826</Counter>
- <Counter worker="14">13476887</Counter>
- <Counter worker="15">13476812</Counter>
- <Counter worker="16">14753607</Counter>
- <Counter worker="17">14753628</Counter>
- </ManyPthreadSpinlock>
- <ManyPthreadSpinlock activeWorker="19">
- <Counter worker="0">13391588</Counter>
- <Counter worker="1">13392430</Counter>
- <Counter worker="2">13392562</Counter>
- <Counter worker="3">13392593</Counter>
- <Counter worker="4">13392668</Counter>
- <Counter worker="5">13392691</Counter>
- <Counter worker="6">13392561</Counter>
- <Counter worker="7">13392599</Counter>
- <Counter worker="8">13399126</Counter>
- <Counter worker="9">13399129</Counter>
- <Counter worker="10">13399029</Counter>
- <Counter worker="11">13398973</Counter>
- <Counter worker="12">13399022</Counter>
- <Counter worker="13">13399026</Counter>
- <Counter worker="14">13398920</Counter>
- <Counter worker="15">13398974</Counter>
- <Counter worker="16">14175315</Counter>
- <Counter worker="17">14175222</Counter>
- <Counter worker="18">14175311</Counter>
- </ManyPthreadSpinlock>
- <ManyPthreadSpinlock activeWorker="20">
- <Counter worker="0">13355745</Counter>
- <Counter worker="1">13356643</Counter>
- <Counter worker="2">13356778</Counter>
- <Counter worker="3">13356845</Counter>
- <Counter worker="4">13356826</Counter>
- <Counter worker="5">13356881</Counter>
- <Counter worker="6">13356673</Counter>
- <Counter worker="7">13356756</Counter>
- <Counter worker="8">13361313</Counter>
- <Counter worker="9">13361244</Counter>
- <Counter worker="10">13357068</Counter>
- <Counter worker="11">13356983</Counter>
- <Counter worker="12">13356966</Counter>
- <Counter worker="13">13356990</Counter>
- <Counter worker="14">13361213</Counter>
- <Counter worker="15">13361185</Counter>
- <Counter worker="16">13989600</Counter>
- <Counter worker="17">13989623</Counter>
- <Counter worker="18">13989693</Counter>
- <Counter worker="19">13989659</Counter>
- </ManyPthreadSpinlock>
- <ManyPthreadSpinlock activeWorker="21">
- <Counter worker="0">13407936</Counter>
- <Counter worker="1">13408763</Counter>
- <Counter worker="2">13408903</Counter>
- <Counter worker="3">13408988</Counter>
- <Counter worker="4">13409085</Counter>
- <Counter worker="5">13409045</Counter>
- <Counter worker="6">13408998</Counter>
- <Counter worker="7">13408901</Counter>
- <Counter worker="8">13434650</Counter>
- <Counter worker="9">13434644</Counter>
- <Counter worker="10">13434596</Counter>
- <Counter worker="11">13434581</Counter>
- <Counter worker="12">13434577</Counter>
- <Counter worker="13">13434621</Counter>
- <Counter worker="14">13434678</Counter>
- <Counter worker="15">13434611</Counter>
- <Counter worker="16">13925505</Counter>
- <Counter worker="17">13925519</Counter>
- <Counter worker="18">13925574</Counter>
- <Counter worker="19">13925534</Counter>
- <Counter worker="20">13925556</Counter>
- </ManyPthreadSpinlock>
- <ManyPthreadSpinlock activeWorker="22">
- <Counter worker="0">13357133</Counter>
- <Counter worker="1">13357991</Counter>
- <Counter worker="2">13358199</Counter>
- <Counter worker="3">13358166</Counter>
- <Counter worker="4">13358386</Counter>
- <Counter worker="5">13358347</Counter>
- <Counter worker="6">13358183</Counter>
- <Counter worker="7">13358191</Counter>
- <Counter worker="8">13409498</Counter>
- <Counter worker="9">13409534</Counter>
- <Counter worker="10">13409355</Counter>
- <Counter worker="11">13409356</Counter>
- <Counter worker="12">13409477</Counter>
- <Counter worker="13">13409398</Counter>
- <Counter worker="14">13409398</Counter>
- <Counter worker="15">13409452</Counter>
- <Counter worker="16">13725035</Counter>
- <Counter worker="17">13725102</Counter>
- <Counter worker="18">13725140</Counter>
- <Counter worker="19">13724990</Counter>
- <Counter worker="20">13725108</Counter>
- <Counter worker="21">13725040</Counter>
- </ManyPthreadSpinlock>
- <ManyPthreadSpinlock activeWorker="23">
- <Counter worker="0">13448281</Counter>
- <Counter worker="1">13449150</Counter>
- <Counter worker="2">13449235</Counter>
- <Counter worker="3">13449263</Counter>
- <Counter worker="4">13449358</Counter>
- <Counter worker="5">13449247</Counter>
- <Counter worker="6">13449327</Counter>
- <Counter worker="7">13449312</Counter>
- <Counter worker="8">13468811</Counter>
- <Counter worker="9">13468839</Counter>
- <Counter worker="10">13468751</Counter>
- <Counter worker="11">13468726</Counter>
- <Counter worker="12">13468738</Counter>
- <Counter worker="13">13468711</Counter>
- <Counter worker="14">13468861</Counter>
- <Counter worker="15">13468835</Counter>
- <Counter worker="16">13675503</Counter>
- <Counter worker="17">13675619</Counter>
- <Counter worker="18">13675523</Counter>
- <Counter worker="19">13675472</Counter>
- <Counter worker="20">13675556</Counter>
- <Counter worker="21">13675544</Counter>
- <Counter worker="22">13675532</Counter>
- </ManyPthreadSpinlock>
- <ManyPthreadSpinlock activeWorker="24">
- <Counter worker="0">13380340</Counter>
- <Counter worker="1">13381193</Counter>
- <Counter worker="2">13378127</Counter>
- <Counter worker="3">13378172</Counter>
- <Counter worker="4">13384719</Counter>
- <Counter worker="5">13384699</Counter>
- <Counter worker="6">13384584</Counter>
- <Counter worker="7">13384610</Counter>
- <Counter worker="8">13403447</Counter>
- <Counter worker="9">13403370</Counter>
- <Counter worker="10">13403295</Counter>
- <Counter worker="11">13403431</Counter>
- <Counter worker="12">13403242</Counter>
- <Counter worker="13">13403348</Counter>
- <Counter worker="14">13403394</Counter>
- <Counter worker="15">13403378</Counter>
- <Counter worker="16">13451683</Counter>
- <Counter worker="17">13451643</Counter>
- <Counter worker="18">13445578</Counter>
- <Counter worker="19">13445455</Counter>
- <Counter worker="20">13451633</Counter>
- <Counter worker="21">13451656</Counter>
- <Counter worker="22">13451565</Counter>
- <Counter worker="23">13451541</Counter>
- </ManyPthreadSpinlock>
- <ManyPthreadMutexInherit activeWorker="1">
- <Counter worker="0">5685517</Counter>
- </ManyPthreadMutexInherit>
- <ManyPthreadMutexInherit activeWorker="2">
- <Counter worker="0">5696601</Counter>
- <Counter worker="1">5696949</Counter>
- </ManyPthreadMutexInherit>
- <ManyPthreadMutexInherit activeWorker="3">
- <Counter worker="0">5543995</Counter>
- <Counter worker="1">5544357</Counter>
- <Counter worker="2">5544426</Counter>
- </ManyPthreadMutexInherit>
- <ManyPthreadMutexInherit activeWorker="4">
- <Counter worker="0">5454438</Counter>
- <Counter worker="1">5454782</Counter>
- <Counter worker="2">5454882</Counter>
- <Counter worker="3">5454926</Counter>
- </ManyPthreadMutexInherit>
- <ManyPthreadMutexInherit activeWorker="5">
- <Counter worker="0">5471381</Counter>
- <Counter worker="1">5471738</Counter>
- <Counter worker="2">5471815</Counter>
- <Counter worker="3">5471828</Counter>
- <Counter worker="4">5471846</Counter>
- </ManyPthreadMutexInherit>
- <ManyPthreadMutexInherit activeWorker="6">
- <Counter worker="0">5409420</Counter>
- <Counter worker="1">5409778</Counter>
- <Counter worker="2">5409870</Counter>
- <Counter worker="3">5409863</Counter>
- <Counter worker="4">5409834</Counter>
- <Counter worker="5">5409840</Counter>
- </ManyPthreadMutexInherit>
- <ManyPthreadMutexInherit activeWorker="7">
- <Counter worker="0">5382186</Counter>
- <Counter worker="1">5382516</Counter>
- <Counter worker="2">5382597</Counter>
- <Counter worker="3">5382630</Counter>
- <Counter worker="4">5382622</Counter>
- <Counter worker="5">5382605</Counter>
- <Counter worker="6">5385095</Counter>
- </ManyPthreadMutexInherit>
- <ManyPthreadMutexInherit activeWorker="8">
- <Counter worker="0">5352212</Counter>
- <Counter worker="1">5352555</Counter>
- <Counter worker="2">5352630</Counter>
- <Counter worker="3">5352640</Counter>
- <Counter worker="4">5352660</Counter>
- <Counter worker="5">5352675</Counter>
- <Counter worker="6">5352627</Counter>
- <Counter worker="7">5352647</Counter>
- </ManyPthreadMutexInherit>
- <ManyPthreadMutexInherit activeWorker="9">
- <Counter worker="0">5330964</Counter>
- <Counter worker="1">5331314</Counter>
- <Counter worker="2">5331408</Counter>
- <Counter worker="3">5331433</Counter>
- <Counter worker="4">5331429</Counter>
- <Counter worker="5">5331422</Counter>
- <Counter worker="6">5331360</Counter>
- <Counter worker="7">5331402</Counter>
- <Counter worker="8">5696119</Counter>
- </ManyPthreadMutexInherit>
- <ManyPthreadMutexInherit activeWorker="10">
- <Counter worker="0">5312790</Counter>
- <Counter worker="1">5313108</Counter>
- <Counter worker="2">5313193</Counter>
- <Counter worker="3">5313221</Counter>
- <Counter worker="4">5313253</Counter>
- <Counter worker="5">5313255</Counter>
- <Counter worker="6">5313216</Counter>
- <Counter worker="7">5313229</Counter>
- <Counter worker="8">5623042</Counter>
- <Counter worker="9">5623031</Counter>
- </ManyPthreadMutexInherit>
- <ManyPthreadMutexInherit activeWorker="11">
- <Counter worker="0">5347426</Counter>
- <Counter worker="1">5347771</Counter>
- <Counter worker="2">5347831</Counter>
- <Counter worker="3">5347866</Counter>
- <Counter worker="4">5347844</Counter>
- <Counter worker="5">5347886</Counter>
- <Counter worker="6">5347836</Counter>
- <Counter worker="7">5347878</Counter>
- <Counter worker="8">5544845</Counter>
- <Counter worker="9">5544823</Counter>
- <Counter worker="10">5544727</Counter>
- </ManyPthreadMutexInherit>
- <ManyPthreadMutexInherit activeWorker="12">
- <Counter worker="0">5324241</Counter>
- <Counter worker="1">5324589</Counter>
- <Counter worker="2">5324636</Counter>
- <Counter worker="3">5324686</Counter>
- <Counter worker="4">5324681</Counter>
- <Counter worker="5">5324678</Counter>
- <Counter worker="6">5324639</Counter>
- <Counter worker="7">5324665</Counter>
- <Counter worker="8">5499255</Counter>
- <Counter worker="9">5499245</Counter>
- <Counter worker="10">5499200</Counter>
- <Counter worker="11">5499220</Counter>
- </ManyPthreadMutexInherit>
- <ManyPthreadMutexInherit activeWorker="13">
- <Counter worker="0">5361809</Counter>
- <Counter worker="1">5362145</Counter>
- <Counter worker="2">5362206</Counter>
- <Counter worker="3">5362252</Counter>
- <Counter worker="4">5362262</Counter>
- <Counter worker="5">5362262</Counter>
- <Counter worker="6">5362256</Counter>
- <Counter worker="7">5362238</Counter>
- <Counter worker="8">5485847</Counter>
- <Counter worker="9">5485850</Counter>
- <Counter worker="10">5485787</Counter>
- <Counter worker="11">5485770</Counter>
- <Counter worker="12">5485785</Counter>
- </ManyPthreadMutexInherit>
- <ManyPthreadMutexInherit activeWorker="14">
- <Counter worker="0">5343125</Counter>
- <Counter worker="1">5343437</Counter>
- <Counter worker="2">5343528</Counter>
- <Counter worker="3">5343550</Counter>
- <Counter worker="4">5343575</Counter>
- <Counter worker="5">5343550</Counter>
- <Counter worker="6">5343537</Counter>
- <Counter worker="7">5343558</Counter>
- <Counter worker="8">5427404</Counter>
- <Counter worker="9">5427398</Counter>
- <Counter worker="10">5427402</Counter>
- <Counter worker="11">5427400</Counter>
- <Counter worker="12">5427379</Counter>
- <Counter worker="13">5427366</Counter>
- </ManyPthreadMutexInherit>
- <ManyPthreadMutexInherit activeWorker="15">
- <Counter worker="0">5316180</Counter>
- <Counter worker="1">5316531</Counter>
- <Counter worker="2">5316583</Counter>
- <Counter worker="3">5316629</Counter>
- <Counter worker="4">5316636</Counter>
- <Counter worker="5">5316625</Counter>
- <Counter worker="6">5316608</Counter>
- <Counter worker="7">5316618</Counter>
- <Counter worker="8">5383017</Counter>
- <Counter worker="9">5383040</Counter>
- <Counter worker="10">5382956</Counter>
- <Counter worker="11">5382983</Counter>
- <Counter worker="12">5382964</Counter>
- <Counter worker="13">5382933</Counter>
- <Counter worker="14">5382973</Counter>
- </ManyPthreadMutexInherit>
- <ManyPthreadMutexInherit activeWorker="16">
- <Counter worker="0">5348312</Counter>
- <Counter worker="1">5348636</Counter>
- <Counter worker="2">5348734</Counter>
- <Counter worker="3">5348745</Counter>
- <Counter worker="4">5348767</Counter>
- <Counter worker="5">5348747</Counter>
- <Counter worker="6">5348742</Counter>
- <Counter worker="7">5348758</Counter>
- <Counter worker="8">5377756</Counter>
- <Counter worker="9">5377760</Counter>
- <Counter worker="10">5377743</Counter>
- <Counter worker="11">5377735</Counter>
- <Counter worker="12">5377720</Counter>
- <Counter worker="13">5377705</Counter>
- <Counter worker="14">5377766</Counter>
- <Counter worker="15">5377744</Counter>
- </ManyPthreadMutexInherit>
- <ManyPthreadMutexInherit activeWorker="17">
- <Counter worker="0">5328451</Counter>
- <Counter worker="1">5328804</Counter>
- <Counter worker="2">5328899</Counter>
- <Counter worker="3">5328944</Counter>
- <Counter worker="4">5328928</Counter>
- <Counter worker="5">5328922</Counter>
- <Counter worker="6">5328895</Counter>
- <Counter worker="7">5328892</Counter>
- <Counter worker="8">5352090</Counter>
- <Counter worker="9">5352051</Counter>
- <Counter worker="10">5352079</Counter>
- <Counter worker="11">5352076</Counter>
- <Counter worker="12">5352072</Counter>
- <Counter worker="13">5352070</Counter>
- <Counter worker="14">5352084</Counter>
- <Counter worker="15">5352060</Counter>
- <Counter worker="16">5780692</Counter>
- </ManyPthreadMutexInherit>
- <ManyPthreadMutexInherit activeWorker="18">
- <Counter worker="0">5362263</Counter>
- <Counter worker="1">5362611</Counter>
- <Counter worker="2">5362670</Counter>
- <Counter worker="3">5362711</Counter>
- <Counter worker="4">5362685</Counter>
- <Counter worker="5">5362679</Counter>
- <Counter worker="6">5362698</Counter>
- <Counter worker="7">5362722</Counter>
- <Counter worker="8">5384935</Counter>
- <Counter worker="9">5384948</Counter>
- <Counter worker="10">5384849</Counter>
- <Counter worker="11">5384902</Counter>
- <Counter worker="12">5384887</Counter>
- <Counter worker="13">5384869</Counter>
- <Counter worker="14">5384912</Counter>
- <Counter worker="15">5384902</Counter>
- <Counter worker="16">5717423</Counter>
- <Counter worker="17">5717419</Counter>
- </ManyPthreadMutexInherit>
- <ManyPthreadMutexInherit activeWorker="19">
- <Counter worker="0">5339960</Counter>
- <Counter worker="1">5340280</Counter>
- <Counter worker="2">5340379</Counter>
- <Counter worker="3">5340412</Counter>
- <Counter worker="4">5340413</Counter>
- <Counter worker="5">5340406</Counter>
- <Counter worker="6">5340390</Counter>
- <Counter worker="7">5340429</Counter>
- <Counter worker="8">5366702</Counter>
- <Counter worker="9">5366709</Counter>
- <Counter worker="10">5366618</Counter>
- <Counter worker="11">5366618</Counter>
- <Counter worker="12">5366640</Counter>
- <Counter worker="13">5366633</Counter>
- <Counter worker="14">5366660</Counter>
- <Counter worker="15">5366640</Counter>
- <Counter worker="16">5562960</Counter>
- <Counter worker="17">5562974</Counter>
- <Counter worker="18">5562969</Counter>
- </ManyPthreadMutexInherit>
- <ManyPthreadMutexInherit activeWorker="20">
- <Counter worker="0">5328365</Counter>
- <Counter worker="1">5328690</Counter>
- <Counter worker="2">5328769</Counter>
- <Counter worker="3">5328750</Counter>
- <Counter worker="4">5328811</Counter>
- <Counter worker="5">5328819</Counter>
- <Counter worker="6">5328761</Counter>
- <Counter worker="7">5328804</Counter>
- <Counter worker="8">5352530</Counter>
- <Counter worker="9">5352507</Counter>
- <Counter worker="10">5352517</Counter>
- <Counter worker="11">5352526</Counter>
- <Counter worker="12">5352478</Counter>
- <Counter worker="13">5352481</Counter>
- <Counter worker="14">5352540</Counter>
- <Counter worker="15">5352508</Counter>
- <Counter worker="16">5542382</Counter>
- <Counter worker="17">5542457</Counter>
- <Counter worker="18">5542429</Counter>
- <Counter worker="19">5542397</Counter>
- </ManyPthreadMutexInherit>
- <ManyPthreadMutexInherit activeWorker="21">
- <Counter worker="0">5355821</Counter>
- <Counter worker="1">5356186</Counter>
- <Counter worker="2">5356298</Counter>
- <Counter worker="3">5356259</Counter>
- <Counter worker="4">5356261</Counter>
- <Counter worker="5">5356320</Counter>
- <Counter worker="6">5356247</Counter>
- <Counter worker="7">5356272</Counter>
- <Counter worker="8">5376396</Counter>
- <Counter worker="9">5376387</Counter>
- <Counter worker="10">5376323</Counter>
- <Counter worker="11">5376368</Counter>
- <Counter worker="12">5376339</Counter>
- <Counter worker="13">5376330</Counter>
- <Counter worker="14">5376387</Counter>
- <Counter worker="15">5376365</Counter>
- <Counter worker="16">5547253</Counter>
- <Counter worker="17">5547266</Counter>
- <Counter worker="18">5547315</Counter>
- <Counter worker="19">5547267</Counter>
- <Counter worker="20">5547295</Counter>
- </ManyPthreadMutexInherit>
- <ManyPthreadMutexInherit activeWorker="22">
- <Counter worker="0">5340616</Counter>
- <Counter worker="1">5340986</Counter>
- <Counter worker="2">5341028</Counter>
- <Counter worker="3">5341065</Counter>
- <Counter worker="4">5341078</Counter>
- <Counter worker="5">5341079</Counter>
- <Counter worker="6">5341007</Counter>
- <Counter worker="7">5341038</Counter>
- <Counter worker="8">5359566</Counter>
- <Counter worker="9">5359570</Counter>
- <Counter worker="10">5359478</Counter>
- <Counter worker="11">5359502</Counter>
- <Counter worker="12">5359496</Counter>
- <Counter worker="13">5359527</Counter>
- <Counter worker="14">5359536</Counter>
- <Counter worker="15">5359526</Counter>
- <Counter worker="16">5498507</Counter>
- <Counter worker="17">5498494</Counter>
- <Counter worker="18">5498532</Counter>
- <Counter worker="19">5498493</Counter>
- <Counter worker="20">5498503</Counter>
- <Counter worker="21">5498516</Counter>
- </ManyPthreadMutexInherit>
- <ManyPthreadMutexInherit activeWorker="23">
- <Counter worker="0">5305895</Counter>
- <Counter worker="1">5306236</Counter>
- <Counter worker="2">5306305</Counter>
- <Counter worker="3">5306345</Counter>
- <Counter worker="4">5306344</Counter>
- <Counter worker="5">5306361</Counter>
- <Counter worker="6">5306301</Counter>
- <Counter worker="7">5306340</Counter>
- <Counter worker="8">5339859</Counter>
- <Counter worker="9">5339855</Counter>
- <Counter worker="10">5339822</Counter>
- <Counter worker="11">5339853</Counter>
- <Counter worker="12">5339853</Counter>
- <Counter worker="13">5339851</Counter>
- <Counter worker="14">5339883</Counter>
- <Counter worker="15">5339826</Counter>
- <Counter worker="16">5444298</Counter>
- <Counter worker="17">5444322</Counter>
- <Counter worker="18">5444263</Counter>
- <Counter worker="19">5444218</Counter>
- <Counter worker="20">5444333</Counter>
- <Counter worker="21">5444339</Counter>
- <Counter worker="22">5444294</Counter>
- </ManyPthreadMutexInherit>
- <ManyPthreadMutexInherit activeWorker="24">
- <Counter worker="0">5344687</Counter>
- <Counter worker="1">5345037</Counter>
- <Counter worker="2">5345099</Counter>
- <Counter worker="3">5345114</Counter>
- <Counter worker="4">5345124</Counter>
- <Counter worker="5">5345129</Counter>
- <Counter worker="6">5345111</Counter>
- <Counter worker="7">5345126</Counter>
- <Counter worker="8">5366163</Counter>
- <Counter worker="9">5366157</Counter>
- <Counter worker="10">5366132</Counter>
- <Counter worker="11">5366143</Counter>
- <Counter worker="12">5366131</Counter>
- <Counter worker="13">5366096</Counter>
- <Counter worker="14">5366169</Counter>
- <Counter worker="15">5366118</Counter>
- <Counter worker="16">5420792</Counter>
- <Counter worker="17">5420837</Counter>
- <Counter worker="18">5420864</Counter>
- <Counter worker="19">5420785</Counter>
- <Counter worker="20">5420835</Counter>
- <Counter worker="21">5420827</Counter>
- <Counter worker="22">5420737</Counter>
- <Counter worker="23">5420793</Counter>
- </ManyPthreadMutexInherit>
- <ManyPthreadMutexProtect activeWorker="1">
- <Counter worker="0">804850</Counter>
- </ManyPthreadMutexProtect>
- <ManyPthreadMutexProtect activeWorker="2">
- <Counter worker="0">736889</Counter>
- <Counter worker="1">736932</Counter>
- </ManyPthreadMutexProtect>
- <ManyPthreadMutexProtect activeWorker="3">
- <Counter worker="0">677059</Counter>
- <Counter worker="1">677102</Counter>
- <Counter worker="2">677109</Counter>
- </ManyPthreadMutexProtect>
- <ManyPthreadMutexProtect activeWorker="4">
- <Counter worker="0">511022</Counter>
- <Counter worker="1">511064</Counter>
- <Counter worker="2">511070</Counter>
- <Counter worker="3">511071</Counter>
- </ManyPthreadMutexProtect>
- <ManyPthreadMutexProtect activeWorker="5">
- <Counter worker="0">403704</Counter>
- <Counter worker="1">403746</Counter>
- <Counter worker="2">403747</Counter>
- <Counter worker="3">403747</Counter>
- <Counter worker="4">403752</Counter>
- </ManyPthreadMutexProtect>
- <ManyPthreadMutexProtect activeWorker="6">
- <Counter worker="0">329360</Counter>
- <Counter worker="1">329396</Counter>
- <Counter worker="2">329402</Counter>
- <Counter worker="3">329404</Counter>
- <Counter worker="4">329401</Counter>
- <Counter worker="5">329405</Counter>
- </ManyPthreadMutexProtect>
- <ManyPthreadMutexProtect activeWorker="7">
- <Counter worker="0">271830</Counter>
- <Counter worker="1">271865</Counter>
- <Counter worker="2">271870</Counter>
- <Counter worker="3">271871</Counter>
- <Counter worker="4">271871</Counter>
- <Counter worker="5">271874</Counter>
- <Counter worker="6">271880</Counter>
- </ManyPthreadMutexProtect>
- <ManyPthreadMutexProtect activeWorker="8">
- <Counter worker="0">234106</Counter>
- <Counter worker="1">234135</Counter>
- <Counter worker="2">234147</Counter>
- <Counter worker="3">234143</Counter>
- <Counter worker="4">234145</Counter>
- <Counter worker="5">234144</Counter>
- <Counter worker="6">234144</Counter>
- <Counter worker="7">234145</Counter>
- </ManyPthreadMutexProtect>
- <ManyPthreadMutexProtect activeWorker="9">
- <Counter worker="0">108890</Counter>
- <Counter worker="1">108899</Counter>
- <Counter worker="2">108898</Counter>
- <Counter worker="3">108897</Counter>
- <Counter worker="4">108898</Counter>
- <Counter worker="5">108898</Counter>
- <Counter worker="6">108898</Counter>
- <Counter worker="7">108896</Counter>
- <Counter worker="8">108892</Counter>
- </ManyPthreadMutexProtect>
- <ManyPthreadMutexProtect activeWorker="10">
- <Counter worker="0">93131</Counter>
- <Counter worker="1">93136</Counter>
- <Counter worker="2">93135</Counter>
- <Counter worker="3">93136</Counter>
- <Counter worker="4">93136</Counter>
- <Counter worker="5">93136</Counter>
- <Counter worker="6">93136</Counter>
- <Counter worker="7">93136</Counter>
- <Counter worker="8">93134</Counter>
- <Counter worker="9">93135</Counter>
- </ManyPthreadMutexProtect>
- <ManyPthreadMutexProtect activeWorker="11">
- <Counter worker="0">79836</Counter>
- <Counter worker="1">79839</Counter>
- <Counter worker="2">79840</Counter>
- <Counter worker="3">79840</Counter>
- <Counter worker="4">79841</Counter>
- <Counter worker="5">79840</Counter>
- <Counter worker="6">79840</Counter>
- <Counter worker="7">79840</Counter>
- <Counter worker="8">79839</Counter>
- <Counter worker="9">79839</Counter>
- <Counter worker="10">79839</Counter>
- </ManyPthreadMutexProtect>
- <ManyPthreadMutexProtect activeWorker="12">
- <Counter worker="0">70922</Counter>
- <Counter worker="1">70924</Counter>
- <Counter worker="2">70924</Counter>
- <Counter worker="3">70924</Counter>
- <Counter worker="4">70924</Counter>
- <Counter worker="5">70924</Counter>
- <Counter worker="6">70923</Counter>
- <Counter worker="7">70924</Counter>
- <Counter worker="8">70924</Counter>
- <Counter worker="9">70924</Counter>
- <Counter worker="10">70924</Counter>
- <Counter worker="11">70924</Counter>
- </ManyPthreadMutexProtect>
- <ManyPthreadMutexProtect activeWorker="13">
- <Counter worker="0">59848</Counter>
- <Counter worker="1">59850</Counter>
- <Counter worker="2">59850</Counter>
- <Counter worker="3">59850</Counter>
- <Counter worker="4">59850</Counter>
- <Counter worker="5">59850</Counter>
- <Counter worker="6">59850</Counter>
- <Counter worker="7">59850</Counter>
- <Counter worker="8">59850</Counter>
- <Counter worker="9">59850</Counter>
- <Counter worker="10">59850</Counter>
- <Counter worker="11">59850</Counter>
- <Counter worker="12">59850</Counter>
- </ManyPthreadMutexProtect>
- <ManyPthreadMutexProtect activeWorker="14">
- <Counter worker="0">56173</Counter>
- <Counter worker="1">56175</Counter>
- <Counter worker="2">56175</Counter>
- <Counter worker="3">56175</Counter>
- <Counter worker="4">56175</Counter>
- <Counter worker="5">56175</Counter>
- <Counter worker="6">56175</Counter>
- <Counter worker="7">56175</Counter>
- <Counter worker="8">56175</Counter>
- <Counter worker="9">56175</Counter>
- <Counter worker="10">56175</Counter>
- <Counter worker="11">56175</Counter>
- <Counter worker="12">56175</Counter>
- <Counter worker="13">56175</Counter>
- </ManyPthreadMutexProtect>
- <ManyPthreadMutexProtect activeWorker="15">
- <Counter worker="0">51032</Counter>
- <Counter worker="1">51034</Counter>
- <Counter worker="2">51034</Counter>
- <Counter worker="3">51034</Counter>
- <Counter worker="4">51034</Counter>
- <Counter worker="5">51034</Counter>
- <Counter worker="6">51034</Counter>
- <Counter worker="7">51034</Counter>
- <Counter worker="8">51034</Counter>
- <Counter worker="9">51034</Counter>
- <Counter worker="10">51034</Counter>
- <Counter worker="11">51034</Counter>
- <Counter worker="12">51034</Counter>
- <Counter worker="13">51034</Counter>
- <Counter worker="14">51034</Counter>
- </ManyPthreadMutexProtect>
- <ManyPthreadMutexProtect activeWorker="16">
- <Counter worker="0">48695</Counter>
- <Counter worker="1">48696</Counter>
- <Counter worker="2">48696</Counter>
- <Counter worker="3">48696</Counter>
- <Counter worker="4">48696</Counter>
- <Counter worker="5">48696</Counter>
- <Counter worker="6">48696</Counter>
- <Counter worker="7">48696</Counter>
- <Counter worker="8">48696</Counter>
- <Counter worker="9">48696</Counter>
- <Counter worker="10">48696</Counter>
- <Counter worker="11">48696</Counter>
- <Counter worker="12">48695</Counter>
- <Counter worker="13">48696</Counter>
- <Counter worker="14">48696</Counter>
- <Counter worker="15">48695</Counter>
- </ManyPthreadMutexProtect>
- <ManyPthreadMutexProtect activeWorker="17">
- <Counter worker="0">43536</Counter>
- <Counter worker="1">43537</Counter>
- <Counter worker="2">43537</Counter>
- <Counter worker="3">43537</Counter>
- <Counter worker="4">43537</Counter>
- <Counter worker="5">43537</Counter>
- <Counter worker="6">43537</Counter>
- <Counter worker="7">43537</Counter>
- <Counter worker="8">43537</Counter>
- <Counter worker="9">43537</Counter>
- <Counter worker="10">43537</Counter>
- <Counter worker="11">43537</Counter>
- <Counter worker="12">43537</Counter>
- <Counter worker="13">43537</Counter>
- <Counter worker="14">43537</Counter>
- <Counter worker="15">43537</Counter>
- <Counter worker="16">43536</Counter>
- </ManyPthreadMutexProtect>
- <ManyPthreadMutexProtect activeWorker="18">
- <Counter worker="0">38780</Counter>
- <Counter worker="1">38781</Counter>
- <Counter worker="2">38781</Counter>
- <Counter worker="3">38781</Counter>
- <Counter worker="4">38781</Counter>
- <Counter worker="5">38781</Counter>
- <Counter worker="6">38781</Counter>
- <Counter worker="7">38781</Counter>
- <Counter worker="8">38781</Counter>
- <Counter worker="9">38781</Counter>
- <Counter worker="10">38781</Counter>
- <Counter worker="11">38781</Counter>
- <Counter worker="12">38781</Counter>
- <Counter worker="13">38781</Counter>
- <Counter worker="14">38780</Counter>
- <Counter worker="15">38781</Counter>
- <Counter worker="16">38781</Counter>
- <Counter worker="17">38781</Counter>
- </ManyPthreadMutexProtect>
- <ManyPthreadMutexProtect activeWorker="19">
- <Counter worker="0">35997</Counter>
- <Counter worker="1">35997</Counter>
- <Counter worker="2">35997</Counter>
- <Counter worker="3">35997</Counter>
- <Counter worker="4">35997</Counter>
- <Counter worker="5">35997</Counter>
- <Counter worker="6">35998</Counter>
- <Counter worker="7">35997</Counter>
- <Counter worker="8">35997</Counter>
- <Counter worker="9">35997</Counter>
- <Counter worker="10">35997</Counter>
- <Counter worker="11">35997</Counter>
- <Counter worker="12">35997</Counter>
- <Counter worker="13">35997</Counter>
- <Counter worker="14">35997</Counter>
- <Counter worker="15">35997</Counter>
- <Counter worker="16">35997</Counter>
- <Counter worker="17">35998</Counter>
- <Counter worker="18">35997</Counter>
- </ManyPthreadMutexProtect>
- <ManyPthreadMutexProtect activeWorker="20">
- <Counter worker="0">36332</Counter>
- <Counter worker="1">36333</Counter>
- <Counter worker="2">36333</Counter>
- <Counter worker="3">36332</Counter>
- <Counter worker="4">36333</Counter>
- <Counter worker="5">36332</Counter>
- <Counter worker="6">36333</Counter>
- <Counter worker="7">36332</Counter>
- <Counter worker="8">36332</Counter>
- <Counter worker="9">36333</Counter>
- <Counter worker="10">36332</Counter>
- <Counter worker="11">36332</Counter>
- <Counter worker="12">36332</Counter>
- <Counter worker="13">36333</Counter>
- <Counter worker="14">36332</Counter>
- <Counter worker="15">36332</Counter>
- <Counter worker="16">36332</Counter>
- <Counter worker="17">36333</Counter>
- <Counter worker="18">36332</Counter>
- <Counter worker="19">36332</Counter>
- </ManyPthreadMutexProtect>
- <ManyPthreadMutexProtect activeWorker="21">
- <Counter worker="0">33208</Counter>
- <Counter worker="1">33209</Counter>
- <Counter worker="2">33209</Counter>
- <Counter worker="3">33209</Counter>
- <Counter worker="4">33208</Counter>
- <Counter worker="5">33208</Counter>
- <Counter worker="6">33209</Counter>
- <Counter worker="7">33208</Counter>
- <Counter worker="8">33208</Counter>
- <Counter worker="9">33208</Counter>
- <Counter worker="10">33208</Counter>
- <Counter worker="11">33208</Counter>
- <Counter worker="12">33209</Counter>
- <Counter worker="13">33209</Counter>
- <Counter worker="14">33208</Counter>
- <Counter worker="15">33208</Counter>
- <Counter worker="16">33208</Counter>
- <Counter worker="17">33208</Counter>
- <Counter worker="18">33209</Counter>
- <Counter worker="19">33208</Counter>
- <Counter worker="20">33208</Counter>
- </ManyPthreadMutexProtect>
- <ManyPthreadMutexProtect activeWorker="22">
- <Counter worker="0">31798</Counter>
- <Counter worker="1">31798</Counter>
- <Counter worker="2">31799</Counter>
- <Counter worker="3">31799</Counter>
- <Counter worker="4">31798</Counter>
- <Counter worker="5">31799</Counter>
- <Counter worker="6">31798</Counter>
- <Counter worker="7">31799</Counter>
- <Counter worker="8">31799</Counter>
- <Counter worker="9">31799</Counter>
- <Counter worker="10">31798</Counter>
- <Counter worker="11">31799</Counter>
- <Counter worker="12">31799</Counter>
- <Counter worker="13">31798</Counter>
- <Counter worker="14">31799</Counter>
- <Counter worker="15">31799</Counter>
- <Counter worker="16">31799</Counter>
- <Counter worker="17">31799</Counter>
- <Counter worker="18">31799</Counter>
- <Counter worker="19">31799</Counter>
- <Counter worker="20">31799</Counter>
- <Counter worker="21">31799</Counter>
- </ManyPthreadMutexProtect>
- <ManyPthreadMutexProtect activeWorker="23">
- <Counter worker="0">29626</Counter>
- <Counter worker="1">29627</Counter>
- <Counter worker="2">29627</Counter>
- <Counter worker="3">29627</Counter>
- <Counter worker="4">29627</Counter>
- <Counter worker="5">29627</Counter>
- <Counter worker="6">29627</Counter>
- <Counter worker="7">29627</Counter>
- <Counter worker="8">29627</Counter>
- <Counter worker="9">29627</Counter>
- <Counter worker="10">29627</Counter>
- <Counter worker="11">29627</Counter>
- <Counter worker="12">29627</Counter>
- <Counter worker="13">29627</Counter>
- <Counter worker="14">29627</Counter>
- <Counter worker="15">29627</Counter>
- <Counter worker="16">29627</Counter>
- <Counter worker="17">29627</Counter>
- <Counter worker="18">29627</Counter>
- <Counter worker="19">29627</Counter>
- <Counter worker="20">29627</Counter>
- <Counter worker="21">29627</Counter>
- <Counter worker="22">29627</Counter>
- </ManyPthreadMutexProtect>
- <ManyPthreadMutexProtect activeWorker="24">
- <Counter worker="0">28079</Counter>
- <Counter worker="1">28079</Counter>
- <Counter worker="2">28079</Counter>
- <Counter worker="3">28079</Counter>
- <Counter worker="4">28079</Counter>
- <Counter worker="5">28079</Counter>
- <Counter worker="6">28079</Counter>
- <Counter worker="7">28079</Counter>
- <Counter worker="8">28079</Counter>
- <Counter worker="9">28079</Counter>
- <Counter worker="10">28079</Counter>
- <Counter worker="11">28079</Counter>
- <Counter worker="12">28079</Counter>
- <Counter worker="13">28079</Counter>
- <Counter worker="14">28079</Counter>
- <Counter worker="15">28079</Counter>
- <Counter worker="16">28079</Counter>
- <Counter worker="17">28079</Counter>
- <Counter worker="18">28079</Counter>
- <Counter worker="19">28080</Counter>
- <Counter worker="20">28080</Counter>
- <Counter worker="21">28080</Counter>
- <Counter worker="22">28079</Counter>
- <Counter worker="23">28079</Counter>
- </ManyPthreadMutexProtect>
-</TestTimeFine01>
+*** TEST VERSION: 6.0.0.4bca4100fc4f184b6638165675095808f109546a
+*** TEST STATE: EXPECTED_PASS
+*** TEST BUILD: RTEMS_SMP
+*** TEST TOOLS: 13.2.0 20230727 (RTEMS 6, RSB d3d738c35a71ca05f675b188539225099401ac79, Newlib a021448)
+*** BEGIN OF JSON DATA ***
+[
+ {
+ "type": "event",
+ "description": "Send Event to Self",
+ "counter": [
+ [172991],
+ [173266, 168815],
+ [173282, 168785, 168831],
+ [173276, 168779, 168779, 172240]
+ ]
+ }, {
+ "type": "event",
+ "description": "Send Event to One",
+ "counter": [
+ [172666],
+ [172666, 320222],
+ [172682, 304636, 304639],
+ [172676, 304626, 320241, 312574]
+ ]
+ }, {
+ "type": "contested-mutex",
+ "description": "Obtain/Release Contested Classic Inheritance Mutex",
+ "counter": [
+ [159961],
+ [12149, 12148],
+ [7529, 7529, 7528],
+ [5671, 5671, 5671, 5670]
+ ]
+ }, {
+ "type": "message",
+ "description": "Send Message to Self",
+ "counter": [
+ [94498],
+ [94506, 94612],
+ [94516, 94622, 94622],
+ [94513, 94620, 94619, 94615]
+ ]
+ }, {
+ "type": "message",
+ "description": "Send Message to One Receiver",
+ "counter": [
+ [94155],
+ [105077, 210425],
+ [91113, 182522, 182535],
+ [74015, 148307, 148308, 148292]
+ ]
+ }, {
+ "type": "private-mutex",
+ "description": "Obtain/Release Private Pthread Spinlock",
+ "counter": [
+ [648144],
+ [648120, 648744],
+ [648207, 648831, 648831],
+ [648183, 648808, 648808, 648779]
+ ]
+ }, {
+ "type": "private-mutex",
+ "description": "Obtain/Release Private <sys/lock.h> Mutex",
+ "counter": [
+ [317884],
+ [317869, 318174],
+ [317912, 318217, 318217],
+ [317901, 318206, 318206, 318193]
+ ]
+ }, {
+ "type": "private-mutex",
+ "description": "Obtain/Release Private Pthread Inheritance Mutex",
+ "counter": [
+ [219857],
+ [219843, 220056],
+ [219877, 220089, 220089],
+ [219868, 220080, 220081, 220066]
+ ]
+ }, {
+ "type": "private-mutex",
+ "description": "Obtain/Release Private Classic Inheritance Mutex",
+ "counter": [
+ [159957],
+ [159867, 160095],
+ [159923, 160107, 160107],
+ [159941, 160133, 160078, 160075]
+ ]
+ }, {
+ "type": "private-mutex",
+ "description": "Obtain/Release Private Pthread Ceiling Mutex",
+ "counter": [
+ [28740],
+ [27948, 27993],
+ [26941, 26973, 26973],
+ [21414, 21439, 21439, 21439]
+ ]
+ }, {
+ "type": "private-mutex",
+ "description": "Obtain/Release Private Classic Ceiling Mutex",
+ "counter": [
+ [27399],
+ [26819, 26841],
+ [26253, 26282, 26282],
+ [21187, 21215, 21214, 21214]
+ ]
+ }, {
+ "type": "private-mutex",
+ "description": "Obtain/Release Private Classic MrsP Mutex",
+ "counter": [
+ [26696],
+ [26074, 26074],
+ [24738, 24770, 24769],
+ [18947, 18970, 18970, 18968]
+ ]
+ }
+]
+*** END OF JSON DATA ***
+
*** END OF TEST TMFINE 1 ***
+
+cpu 1 in error mode (tt = 0x80)
+ 2400642150 0000d760: 91d02000 ta 0x0
diff --git a/testsuites/tmtests/tmonetoone/init.c b/testsuites/tmtests/tmonetoone/init.c
index 9c8af786db..b4f63a604f 100644
--- a/testsuites/tmtests/tmonetoone/init.c
+++ b/testsuites/tmtests/tmonetoone/init.c
@@ -1,7 +1,7 @@
/* SPDX-License-Identifier: BSD-2-Clause */
/*
- * Copyright (c) 2018 embedded brains GmbH. All rights reserved.
+ * Copyright (c) 2018 embedded brains GmbH & Co. KG
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
diff --git a/testsuites/tmtests/tmtimer01/init.c b/testsuites/tmtests/tmtimer01/init.c
index 0c8ac3d2de..1a37b5192c 100644
--- a/testsuites/tmtests/tmtimer01/init.c
+++ b/testsuites/tmtests/tmtimer01/init.c
@@ -1,7 +1,7 @@
/* SPDX-License-Identifier: BSD-2-Clause */
/*
- * Copyright (c) 2016 embedded brains GmbH. All rights reserved.
+ * Copyright (C) 2016, 2024 embedded brains GmbH & Co. KG
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
@@ -108,13 +108,14 @@ static void test_fire_and_cancel(
rtems_test_assert(sc2 == RTEMS_SUCCESSFUL);
printf(
- "<%s unit=\"ns\">%" PRIu64 "</%s>",
+ ",\n \"%s\": %" PRIu64,
name,
- rtems_counter_ticks_to_nanoseconds(d),
- name
+ rtems_counter_ticks_to_nanoseconds(d)
);
}
+static const char *sep = "\n ";
+
static void test_case(test_context *ctx, size_t j, size_t k)
{
rtems_status_code sc;
@@ -130,13 +131,17 @@ static void test_case(test_context *ctx, size_t j, size_t k)
rtems_test_assert(sc == RTEMS_SUCCESSFUL);
}
- printf(" <Sample>\n <ActiveTimers>%zu</ActiveTimers>", j);
-
- test_fire_and_cancel(ctx, j, 0, "First");
- test_fire_and_cancel(ctx, j, j / 2, "Middle");
- test_fire_and_cancel(ctx, j, j + 1, "Last");
+ printf(
+ "%s{\n"
+ " \"active-timers\": %zu",
+ sep,
+ j
+ );
+ sep = "\n }, ";
- printf("\n </Sample>\n");
+ test_fire_and_cancel(ctx, j, 0, "first");
+ test_fire_and_cancel(ctx, j, j / 2, "middle");
+ test_fire_and_cancel(ctx, j, j + 1, "last");
}
static void test(void)
@@ -181,7 +186,13 @@ static void test(void)
timer_count = n;
}
- printf("<TMTimer01 timerCount=\"%zu\">\n", timer_count);
+ printf(
+ "*** BEGIN OF JSON DATA ***\n"
+ "{\n"
+ " \"timer-count\": %zu,\n"
+ " \"samples\": [",
+ timer_count
+ );
k = 0;
j = 0;
@@ -194,7 +205,7 @@ static void test(void)
test_case(ctx, n - 2, k);
- printf("</TMTimer01>\n");
+ printf("\n }\n ]\n}\n*** END OF JSON DATA ***\n");
}
static void Init(rtems_task_argument arg)
diff --git a/testsuites/tmtests/tmtimer01/plot.py b/testsuites/tmtests/tmtimer01/plot.py
index c0738ef70d..73654c5b9d 100644
--- a/testsuites/tmtests/tmtimer01/plot.py
+++ b/testsuites/tmtests/tmtimer01/plot.py
@@ -1,7 +1,6 @@
# SPDX-License-Identifier: BSD-2-Clause
-#
-# Copyright (c) 2016 embedded brains GmbH. All rights reserved.
+# Copyright (C) 2016, 2024 embedded brains GmbH & Co. KG
#
# Redistribution and use in source and binary forms, with or without
# modification, are permitted provided that the following conditions
@@ -23,22 +22,35 @@
# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
# POSSIBILITY OF SUCH DAMAGE.
-#
-import libxml2
-from libxml2 import xmlNode
-import matplotlib.pyplot as plt
-doc = libxml2.parseFile('tmtimer01.scn')
-ctx = doc.xpathNewContext()
-
-plt.title('timer test')
-plt.xscale('log')
-plt.xlabel('active timers')
-plt.ylabel('timer fire and cancel [ns]')
-
-x = map(xmlNode.getContent, ctx.xpathEval('/TMTimer01/Sample/ActiveTimers'))
-for i in ['First', 'Middle', 'Last']:
- y = map(xmlNode.getContent, ctx.xpathEval('/TMTimer01/Sample/' + i))
- plt.plot(x, y, label = i)
-plt.legend(loc = 'best')
-plt.show()
+import json
+import re
+import matplotlib.pyplot as plt # type: ignore
+from matplotlib import ticker # type: ignore
+
+
+def _plot(data: dict) -> None:
+ _, axes = plt.subplots()
+ axes.set_title("Timer Fire and Cancel Timing Test")
+ axes.set_xlabel("Active Timers")
+ axes.set_xscale("log")
+ axes.set_ylabel("Timer Fire and Cancel Duration [μs]")
+ x = [sample["active-timers"] for sample in data["samples"]]
+ for key in ["first", "middle", "last"]:
+ y = [sample[key] / 1000.0 for sample in data["samples"]]
+ axes.plot(x, y, label=f"operate on {key} timer", marker='o')
+ axes.legend(loc='best')
+ plt.savefig("tmtimer01.png")
+ plt.savefig("tmtimer01.pdf")
+ plt.close()
+
+
+_JSON_DATA = re.compile(
+ r"\*\*\* BEGIN OF JSON DATA \*\*\*(.*)"
+ r"\*\*\* END OF JSON DATA \*\*\*", re.DOTALL)
+
+with open("tmtimer01.scn", "r", encoding="utf-8") as src:
+ match = _JSON_DATA.search(src.read())
+ data = json.loads(match.group(1))
+
+_plot(data)
diff --git a/testsuites/tmtests/tmtimer01/tmtimer01.scn b/testsuites/tmtests/tmtimer01/tmtimer01.scn
index db3ca01d27..b278c75177 100644
--- a/testsuites/tmtests/tmtimer01/tmtimer01.scn
+++ b/testsuites/tmtests/tmtimer01/tmtimer01.scn
@@ -1,137 +1,252 @@
-<TMTimer01 timerCount="65504">
- <Sample>
- <ActiveTimers>0</ActiveTimers><First unit="ns">8812</First><Middle unit="ns">1412</Middle><Last unit="ns">917</Last>
- </Sample>
- <Sample>
- <ActiveTimers>2</ActiveTimers><First unit="ns">1602</First><Middle unit="ns">1010</Middle><Last unit="ns">1367</Last>
- </Sample>
- <Sample>
- <ActiveTimers>4</ActiveTimers><First unit="ns">1524</First><Middle unit="ns">1089</Middle><Last unit="ns">1086</Last>
- </Sample>
- <Sample>
- <ActiveTimers>7</ActiveTimers><First unit="ns">1791</First><Middle unit="ns">1121</Middle><Last unit="ns">1838</Last>
- </Sample>
- <Sample>
- <ActiveTimers>10</ActiveTimers><First unit="ns">1488</First><Middle unit="ns">1016</Middle><Last unit="ns">2134</Last>
- </Sample>
- <Sample>
- <ActiveTimers>14</ActiveTimers><First unit="ns">1527</First><Middle unit="ns">1698</Middle><Last unit="ns">3186</Last>
- </Sample>
- <Sample>
- <ActiveTimers>19</ActiveTimers><First unit="ns">2078</First><Middle unit="ns">1665</Middle><Last unit="ns">3397</Last>
- </Sample>
- <Sample>
- <ActiveTimers>25</ActiveTimers><First unit="ns">1519</First><Middle unit="ns">2368</Middle><Last unit="ns">4464</Last>
- </Sample>
- <Sample>
- <ActiveTimers>32</ActiveTimers><First unit="ns">1243</First><Middle unit="ns">2623</Middle><Last unit="ns">3549</Last>
- </Sample>
- <Sample>
- <ActiveTimers>41</ActiveTimers><First unit="ns">2368</First><Middle unit="ns">2578</Middle><Last unit="ns">4105</Last>
- </Sample>
- <Sample>
- <ActiveTimers>52</ActiveTimers><First unit="ns">2322</First><Middle unit="ns">2563</Middle><Last unit="ns">4126</Last>
- </Sample>
- <Sample>
- <ActiveTimers>66</ActiveTimers><First unit="ns">2499</First><Middle unit="ns">1855</Middle><Last unit="ns">4919</Last>
- </Sample>
- <Sample>
- <ActiveTimers>83</ActiveTimers><First unit="ns">1689</First><Middle unit="ns">3128</Middle><Last unit="ns">5894</Last>
- </Sample>
- <Sample>
- <ActiveTimers>104</ActiveTimers><First unit="ns">2301</First><Middle unit="ns">2647</Middle><Last unit="ns">4595</Last>
- </Sample>
- <Sample>
- <ActiveTimers>130</ActiveTimers><First unit="ns">2880</First><Middle unit="ns">3183</Middle><Last unit="ns">6222</Last>
- </Sample>
- <Sample>
- <ActiveTimers>162</ActiveTimers><First unit="ns">2597</First><Middle unit="ns">2376</Middle><Last unit="ns">7118</Last>
- </Sample>
- <Sample>
- <ActiveTimers>201</ActiveTimers><First unit="ns">3519</First><Middle unit="ns">3466</Middle><Last unit="ns">6673</Last>
- </Sample>
- <Sample>
- <ActiveTimers>249</ActiveTimers><First unit="ns">2829</First><Middle unit="ns">3177</Middle><Last unit="ns">7784</Last>
- </Sample>
- <Sample>
- <ActiveTimers>308</ActiveTimers><First unit="ns">2614</First><Middle unit="ns">3396</Middle><Last unit="ns">7338</Last>
- </Sample>
- <Sample>
- <ActiveTimers>381</ActiveTimers><First unit="ns">3454</First><Middle unit="ns">4888</Middle><Last unit="ns">9114</Last>
- </Sample>
- <Sample>
- <ActiveTimers>470</ActiveTimers><First unit="ns">3397</First><Middle unit="ns">2443</Middle><Last unit="ns">7689</Last>
- </Sample>
- <Sample>
- <ActiveTimers>580</ActiveTimers><First unit="ns">2233</First><Middle unit="ns">4410</Middle><Last unit="ns">9355</Last>
- </Sample>
- <Sample>
- <ActiveTimers>715</ActiveTimers><First unit="ns">3787</First><Middle unit="ns">5891</Middle><Last unit="ns">6833</Last>
- </Sample>
- <Sample>
- <ActiveTimers>881</ActiveTimers><First unit="ns">3839</First><Middle unit="ns">5089</Middle><Last unit="ns">9232</Last>
- </Sample>
- <Sample>
- <ActiveTimers>1085</ActiveTimers><First unit="ns">2838</First><Middle unit="ns">2739</Middle><Last unit="ns">11575</Last>
- </Sample>
- <Sample>
- <ActiveTimers>1336</ActiveTimers><First unit="ns">3256</First><Middle unit="ns">5011</Middle><Last unit="ns">9684</Last>
- </Sample>
- <Sample>
- <ActiveTimers>1645</ActiveTimers><First unit="ns">2293</First><Middle unit="ns">5262</Middle><Last unit="ns">10183</Last>
- </Sample>
- <Sample>
- <ActiveTimers>2025</ActiveTimers><First unit="ns">4436</First><Middle unit="ns">5934</Middle><Last unit="ns">8804</Last>
- </Sample>
- <Sample>
- <ActiveTimers>2492</ActiveTimers><First unit="ns">4506</First><Middle unit="ns">7284</Middle><Last unit="ns">10389</Last>
- </Sample>
- <Sample>
- <ActiveTimers>3067</ActiveTimers><First unit="ns">3832</First><Middle unit="ns">4990</Middle><Last unit="ns">9536</Last>
- </Sample>
- <Sample>
- <ActiveTimers>3774</ActiveTimers><First unit="ns">5088</First><Middle unit="ns">4888</Middle><Last unit="ns">9633</Last>
- </Sample>
- <Sample>
- <ActiveTimers>4644</ActiveTimers><First unit="ns">5590</First><Middle unit="ns">5749</Middle><Last unit="ns">8975</Last>
- </Sample>
- <Sample>
- <ActiveTimers>5714</ActiveTimers><First unit="ns">4854</First><Middle unit="ns">6813</Middle><Last unit="ns">11603</Last>
- </Sample>
- <Sample>
- <ActiveTimers>7030</ActiveTimers><First unit="ns">6139</First><Middle unit="ns">6132</Middle><Last unit="ns">12630</Last>
- </Sample>
- <Sample>
- <ActiveTimers>8649</ActiveTimers><First unit="ns">6877</First><Middle unit="ns">3852</Middle><Last unit="ns">10973</Last>
- </Sample>
- <Sample>
- <ActiveTimers>10640</ActiveTimers><First unit="ns">6532</First><Middle unit="ns">6097</Middle><Last unit="ns">11725</Last>
- </Sample>
- <Sample>
- <ActiveTimers>13089</ActiveTimers><First unit="ns">5284</First><Middle unit="ns">5392</Middle><Last unit="ns">13246</Last>
- </Sample>
- <Sample>
- <ActiveTimers>16101</ActiveTimers><First unit="ns">7077</First><Middle unit="ns">7572</Middle><Last unit="ns">14820</Last>
- </Sample>
- <Sample>
- <ActiveTimers>19806</ActiveTimers><First unit="ns">7132</First><Middle unit="ns">8335</Middle><Last unit="ns">11668</Last>
- </Sample>
- <Sample>
- <ActiveTimers>24363</ActiveTimers><First unit="ns">8676</First><Middle unit="ns">7919</Middle><Last unit="ns">13937</Last>
- </Sample>
- <Sample>
- <ActiveTimers>29968</ActiveTimers><First unit="ns">5970</First><Middle unit="ns">10978</Middle><Last unit="ns">16035</Last>
- </Sample>
- <Sample>
- <ActiveTimers>36862</ActiveTimers><First unit="ns">8804</First><Middle unit="ns">8767</Middle><Last unit="ns">13089</Last>
- </Sample>
- <Sample>
- <ActiveTimers>45342</ActiveTimers><First unit="ns">8608</First><Middle unit="ns">10305</Middle><Last unit="ns">15709</Last>
- </Sample>
- <Sample>
- <ActiveTimers>55772</ActiveTimers><First unit="ns">8949</First><Middle unit="ns">10031</Middle><Last unit="ns">16262</Last>
- </Sample>
- <Sample>
- <ActiveTimers>65503</ActiveTimers><First unit="ns">9199</First><Middle unit="ns">10309</Middle><Last unit="ns">19090</Last>
- </Sample>
-</TMTimer01>
+
+ SIS - SPARC/RISCV instruction simulator 2.30, copyright Jiri Gaisler 2020
+ Bug-reports to jiri@gaisler.se
+
+ GR740/LEON4 emulation enabled, 4 cpus online, delta 50 clocks
+
+ Loaded build/sparc/gr740/testsuites/tmtests/tmtimer01.exe, entry 0x00000000
+
+
+*** BEGIN OF TEST TMTIMER 1 ***
+*** TEST VERSION: 6.0.0.76c91ee7793fc70b92e2f87e601c3fdc2d2b7f3f
+*** TEST STATE: EXPECTED_PASS
+*** TEST BUILD: RTEMS_SMP
+*** TEST TOOLS: 13.2.0 20230727 (RTEMS 6, RSB d3d738c35a71ca05f675b188539225099401ac79, Newlib a021448)
+*** BEGIN OF JSON DATA ***
+{
+ "timer-count": 61024,
+ "samples": [
+ {
+ "active-timers": 0,
+ "first": 8560,
+ "middle": 8600,
+ "last": 8520
+ }, {
+ "active-timers": 2,
+ "first": 9020,
+ "middle": 11680,
+ "last": 8860
+ }, {
+ "active-timers": 4,
+ "first": 9480,
+ "middle": 9440,
+ "last": 11060
+ }, {
+ "active-timers": 7,
+ "first": 9360,
+ "middle": 9820,
+ "last": 12300
+ }, {
+ "active-timers": 10,
+ "first": 9860,
+ "middle": 9580,
+ "last": 11980
+ }, {
+ "active-timers": 14,
+ "first": 9860,
+ "middle": 10040,
+ "last": 12280
+ }, {
+ "active-timers": 19,
+ "first": 10360,
+ "middle": 10080,
+ "last": 13260
+ }, {
+ "active-timers": 25,
+ "first": 10360,
+ "middle": 10500,
+ "last": 14460
+ }, {
+ "active-timers": 32,
+ "first": 10240,
+ "middle": 10620,
+ "last": 13040
+ }, {
+ "active-timers": 41,
+ "first": 10820,
+ "middle": 10540,
+ "last": 15000
+ }, {
+ "active-timers": 52,
+ "first": 10740,
+ "middle": 10880,
+ "last": 13660
+ }, {
+ "active-timers": 66,
+ "first": 10820,
+ "middle": 10880,
+ "last": 13960
+ }, {
+ "active-timers": 83,
+ "first": 11160,
+ "middle": 11040,
+ "last": 14940
+ }, {
+ "active-timers": 104,
+ "first": 11160,
+ "middle": 11420,
+ "last": 14340
+ }, {
+ "active-timers": 130,
+ "first": 11160,
+ "middle": 11300,
+ "last": 14720
+ }, {
+ "active-timers": 162,
+ "first": 11460,
+ "middle": 11380,
+ "last": 14880
+ }, {
+ "active-timers": 201,
+ "first": 11500,
+ "middle": 11880,
+ "last": 17060
+ }, {
+ "active-timers": 249,
+ "first": 11580,
+ "middle": 11800,
+ "last": 16900
+ }, {
+ "active-timers": 308,
+ "first": 11380,
+ "middle": 12060,
+ "last": 15640
+ }, {
+ "active-timers": 381,
+ "first": 11760,
+ "middle": 11840,
+ "last": 19800
+ }, {
+ "active-timers": 470,
+ "first": 11880,
+ "middle": 12180,
+ "last": 16100
+ }, {
+ "active-timers": 580,
+ "first": 11760,
+ "middle": 12600,
+ "last": 16560
+ }, {
+ "active-timers": 715,
+ "first": 12140,
+ "middle": 12220,
+ "last": 17380
+ }, {
+ "active-timers": 881,
+ "first": 12260,
+ "middle": 12640,
+ "last": 18740
+ }, {
+ "active-timers": 1085,
+ "first": 12140,
+ "middle": 12560,
+ "last": 22320
+ }, {
+ "active-timers": 1336,
+ "first": 12720,
+ "middle": 12600,
+ "last": 17240
+ }, {
+ "active-timers": 1645,
+ "first": 12560,
+ "middle": 13020,
+ "last": 21140
+ }, {
+ "active-timers": 2025,
+ "first": 12720,
+ "middle": 12980,
+ "last": 19500
+ }, {
+ "active-timers": 2492,
+ "first": 12720,
+ "middle": 13400,
+ "last": 18160
+ }, {
+ "active-timers": 3067,
+ "first": 13060,
+ "middle": 13060,
+ "last": 19220
+ }, {
+ "active-timers": 3774,
+ "first": 12980,
+ "middle": 13560,
+ "last": 18620
+ }, {
+ "active-timers": 4644,
+ "first": 13260,
+ "middle": 13860,
+ "last": 18920
+ }, {
+ "active-timers": 5714,
+ "first": 13440,
+ "middle": 13520,
+ "last": 18920
+ }, {
+ "active-timers": 7030,
+ "first": 13440,
+ "middle": 13900,
+ "last": 19380
+ }, {
+ "active-timers": 8649,
+ "first": 13440,
+ "middle": 13820,
+ "last": 21640
+ }, {
+ "active-timers": 10640,
+ "first": 14020,
+ "middle": 13940,
+ "last": 19760
+ }, {
+ "active-timers": 13089,
+ "first": 13940,
+ "middle": 14160,
+ "last": 22100
+ }, {
+ "active-timers": 16101,
+ "first": 13900,
+ "middle": 14320,
+ "last": 22680
+ }, {
+ "active-timers": 19806,
+ "first": 13900,
+ "middle": 14700,
+ "last": 20840
+ }, {
+ "active-timers": 24363,
+ "first": 14360,
+ "middle": 14320,
+ "last": 21660
+ }, {
+ "active-timers": 29968,
+ "first": 14360,
+ "middle": 14540,
+ "last": 21300
+ }, {
+ "active-timers": 36862,
+ "first": 14360,
+ "middle": 15320,
+ "last": 21440
+ }, {
+ "active-timers": 45342,
+ "first": 14580,
+ "middle": 14700,
+ "last": 21600
+ }, {
+ "active-timers": 55772,
+ "first": 14700,
+ "middle": 15040,
+ "last": 22060
+ }, {
+ "active-timers": 61023,
+ "first": 14780,
+ "middle": 15080,
+ "last": 22960
+ }
+ ]
+}
+*** END OF JSON DATA ***
+
+*** END OF TEST TMTIMER 1 ***
+
+cpu 0 in error mode (tt = 0x80)
+ 522750200 00009b40: 91d02000 ta 0x0
diff --git a/testsuites/unit/tc-base64-decode.c b/testsuites/unit/tc-base64-decode.c
new file mode 100644
index 0000000000..4b0672d310
--- /dev/null
+++ b/testsuites/unit/tc-base64-decode.c
@@ -0,0 +1,186 @@
+/* SPDX-License-Identifier: BSD-2-Clause */
+
+/**
+ * @file
+ *
+ * @ingroup TestsuitesUnitNoClock0
+ */
+
+/*
+ * Copyright (C) 2023 embedded brains GmbH & Co. KG
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include <rtems/base64.h>
+
+#include <rtems/test.h>
+
+typedef struct {
+ Base64_Decode_control base;
+ uint8_t buf[64];
+} test_control;
+
+static int test_run(test_control* self, const char* payload) {
+ size_t len = strlen(payload);
+
+ for (size_t i = 0; i < len; ++i) {
+ int rv = _Base64_Decode(&self->base, payload[i]);
+
+ if (rv != 0) {
+ return rv;
+ }
+ }
+
+ return 0;
+}
+
+static int test_payload(test_control* self, const char* payload) {
+ memset(self->buf, 0xff, sizeof(self->buf));
+ _Base64_Decode_initialize(&self->base, &self->buf[0], sizeof(self->buf));
+ return test_run(self, payload);
+}
+
+T_TEST_CASE(IOBase64Decode) {
+ int rv;
+ test_control instance;
+ test_control* self = &instance;
+
+ rv = test_payload(self, "POOL");
+ T_eq_int(rv, BASE64_DECODE_SUCCESS);
+ T_eq_int(self->base.state, BASE64_DECODE_STATE_0);
+ T_eq_ptr(self->base.target, &self->buf[3]);
+ const uint8_t expected1[] = {0x3c, 0xe3, 0x8b, 0xff};
+ T_eq_mem(&self->buf[0], expected1, sizeof(expected1));
+
+ rv = test_payload(self, "ABCDEFGH");
+ T_eq_int(rv, BASE64_DECODE_SUCCESS);
+ T_eq_int(self->base.state, BASE64_DECODE_STATE_0);
+ T_eq_ptr(self->base.target, &self->buf[6]);
+ const uint8_t expected2[] = {0x00, 0x10, 0x83, 0x10, 0x51, 0x87, 0xff};
+ T_eq_mem(&self->buf[0], expected2, sizeof(expected2));
+
+ /* Non-base64 character results in an error */
+ rv = test_payload(self, "PO*OL");
+ T_eq_int(rv, BASE64_DECODE_INVALID_INPUT);
+ T_eq_int(self->base.state, BASE64_DECODE_STATE_2);
+ T_eq_ptr(self->base.target, &self->buf[1]);
+ const uint8_t expected3[] = {0x3c};
+ T_eq_mem(&self->buf[0], expected3, sizeof(expected3));
+
+ /* Other non-base64 character results in an error */
+ rv = test_payload(self, "PO\x80OL");
+ T_eq_int(rv, BASE64_DECODE_INVALID_INPUT);
+ T_eq_int(self->base.state, BASE64_DECODE_STATE_2);
+ T_eq_ptr(self->base.target, &self->buf[1]);
+ T_eq_mem(&self->buf[0], expected3, sizeof(expected3));
+
+ /* Space characters should be ignored */
+ rv = test_payload(self, "P OOL");
+ T_eq_int(rv, BASE64_DECODE_SUCCESS);
+ T_eq_int(self->base.state, BASE64_DECODE_STATE_0);
+ T_eq_ptr(self->base.target, &self->buf[3]);
+ const uint8_t expected4[] = {0x3c, 0xe3, 0x8b, 0xff};
+ T_eq_mem(&self->buf[0], expected4, sizeof(expected4));
+
+ /* Handle pad characters */
+ rv = test_payload(self, "POOL==");
+ T_eq_int(rv, BASE64_DECODE_SUCCESS);
+ T_eq_int(self->base.state, BASE64_DECODE_STATE_0);
+ T_eq_ptr(self->base.target, &self->buf[3]);
+ T_eq_ptr(self->base.target, self->base.target_end);
+ const uint8_t expected5[] = {0x3c, 0xe3, 0x8b, 0xff};
+ T_eq_mem(&self->buf[0], expected5, sizeof(expected5));
+
+ /* If characters come after pad characters, an error results */
+ rv = test_payload(self, "POOL==xy");
+ T_eq_int(rv, BASE64_DECODE_OVERFLOW);
+ T_eq_int(self->base.state, BASE64_DECODE_SUCCESS);
+ T_eq_ptr(self->base.target, &self->buf[3]);
+ T_eq_ptr(self->base.target, self->base.target_end);
+ const uint8_t expected6[] = {0x3c, 0xe3, 0x8b, 0xff};
+ T_eq_mem(&self->buf[0], expected6, sizeof(expected6));
+
+ rv = test_payload(self, "POOLPOOL");
+ T_eq_int(rv, BASE64_DECODE_SUCCESS);
+ T_eq_int(self->base.state, BASE64_DECODE_STATE_0);
+ T_eq_ptr(self->base.target, &self->buf[6]);
+ const uint8_t expected7[] = {0x3c, 0xe3, 0x8b, 0x3c, 0xe3, 0x8b, 0xff};
+ T_eq_mem(&self->buf[0], expected7, sizeof(expected7));
+
+ /*
+ * Test valid payload with series of target sizes. All target sizes
+ * less than three are invalid for the given payload and will result
+ * in an error.
+ */
+ const uint8_t expected9[] = {0x3c, 0xe3, 0x8b, 0xff};
+
+ for (size_t i = 0; i < 4; ++i) {
+ memset(&self->buf[0], 0xff, sizeof(self->buf));
+ _Base64_Decode_initialize(&self->base, &self->buf[0], i);
+ rv = test_run(self, "POOL");
+
+ if (i < 3) {
+ T_eq_int(rv, BASE64_DECODE_OVERFLOW);
+ T_eq_int(self->base.state, i);
+ T_ne_ptr(self->base.target, &self->buf[3]);
+ T_ne_mem(&self->buf[0], expected9, sizeof(expected9));
+ } else {
+ T_eq_int(rv, BASE64_DECODE_SUCCESS);
+ T_eq_int(self->base.state, BASE64_DECODE_STATE_0);
+ T_eq_ptr(self->base.target, &self->buf[3]);
+ T_eq_mem(&self->buf[0], expected9, sizeof(expected9));
+ }
+ }
+
+ /* No overflow in state 1 */
+ memset(&self->buf[0], 0xff, sizeof(self->buf));
+ _Base64_Decode_initialize(&self->base, &self->buf[0], 1);
+ rv = test_run(self, "AA");
+ T_eq_int(rv, BASE64_DECODE_SUCCESS);
+ T_eq_int(self->base.state, BASE64_DECODE_STATE_2);
+ T_eq_ptr(self->base.target, &self->buf[1]);
+ const uint8_t expected10[] = {0x00, 0xff};
+ T_eq_mem(&self->buf[0], expected10, sizeof(expected10));
+
+ /* No overflow in state 2 */
+ memset(&self->buf[0], 0xff, sizeof(self->buf));
+ _Base64_Decode_initialize(&self->base, &self->buf[0], 2);
+ rv = test_run(self, "AAA");
+ T_eq_int(rv, BASE64_DECODE_SUCCESS);
+ T_eq_int(self->base.state, BASE64_DECODE_STATE_3);
+ T_eq_ptr(self->base.target, &self->buf[2]);
+ const uint8_t expected11[] = {0x00, 0x00, 0xff};
+ T_eq_mem(&self->buf[0], expected11, sizeof(expected11));
+}
+
+T_TEST_CASE(IOBase64DecodeInitialize) {
+ Base64_Decode_control instance;
+ Base64_Decode_control* self = &instance;
+ uint8_t buf[1];
+
+ memset(self, 0xff, sizeof(*self));
+ _Base64_Decode_initialize(self, buf, sizeof(buf));
+ T_eq_int(self->state, BASE64_DECODE_STATE_0);
+ T_eq_ptr(self->target, &buf[0]);
+ T_eq_ptr(self->target_end, &buf[1]);
+}
diff --git a/testsuites/unit/tc-compiler-builtins.c b/testsuites/unit/tc-compiler-builtins.c
new file mode 100644
index 0000000000..7a470b6632
--- /dev/null
+++ b/testsuites/unit/tc-compiler-builtins.c
@@ -0,0 +1,1141 @@
+/* SPDX-License-Identifier: BSD-2-Clause */
+
+/**
+ * @file
+ *
+ * @ingroup CompilerUnitBuiltins
+ */
+
+/*
+ * Copyright (C) 2023 embedded brains GmbH & Co. KG
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ */
+
+/*
+ * This file is part of the RTEMS quality process and was automatically
+ * generated. If you find something that needs to be fixed or
+ * worded better please post a report or patch to an RTEMS mailing list
+ * or raise a bug report:
+ *
+ * https://www.rtems.org/bugs.html
+ *
+ * For information on updating and regenerating please refer to the How-To
+ * section in the Software Requirements Engineering chapter of the
+ * RTEMS Software Engineering manual. The manual is provided as a part of
+ * a release. For development sources please refer to the online
+ * documentation at:
+ *
+ * https://docs.rtems.org
+ */
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#include <setjmp.h>
+#include <stdint.h>
+
+#include "../validation/tx-support.h"
+
+#include <rtems/test.h>
+
+/**
+ * @defgroup CompilerUnitBuiltins spec:/compiler/unit/builtins
+ *
+ * @ingroup TestsuitesUnitNoClock0
+ *
+ * @brief These unit tests check compiler builtins.
+ *
+ * Explicitly test the 64-bit integer division and modulo operations. They are
+ * essential for the timekeeping services. On most 32-bit targets, they need a
+ * software implementation.
+ *
+ * This test case performs the following actions:
+ *
+ * - Check the return value of __builtin_clz() for a sample set of inputs.
+ *
+ * - Check the return value of __builtin_clzll() for a sample set of inputs.
+ *
+ * - Check the return value of __builtin_ctz() for a sample set of inputs.
+ *
+ * - Check the return value of __builtin_ctzll() for a sample set of inputs.
+ *
+ * - Check the return value of __builtin_ffs() for a sample set of inputs.
+ *
+ * - Check the return value of __builtin_ffsll() for a sample set of inputs.
+ *
+ * - Check the return value of __builtin_parity() for a sample set of inputs.
+ *
+ * - Check the return value of __builtin_parityll() for a sample set of inputs.
+ *
+ * - Check the return value of __builtin_popcount() for a sample set of inputs.
+ *
+ * - Check the return value of __builtin_popcountll() for a sample set of
+ * inputs.
+ *
+ * - Check the return value of __builtin_bswap32() for a sample set of inputs.
+ *
+ * - Check the return value of __builtin_bswap64() for a sample set of inputs.
+ *
+ * - Check signed 64-bit comparisons for a sample set of values.
+ *
+ * - Check unsigned 64-bit comparisons for a sample set of values.
+ *
+ * - Check signed 64-bit arithmetic left shift for a sample set of values.
+ *
+ * - Check signed 64-bit arithmetic right shift for a sample set of values.
+ *
+ * - Check unsigned 64-bit logical right shift for a sample set of values.
+ *
+ * - Check signed 64-bit multiplication for a sample set of values.
+ *
+ * - Check signed 64-bit negation for a sample set of values.
+ *
+ * - Check signed 64-bit divisions for a sample set of values.
+ *
+ * - Check unsigned 64-bit divisions for a sample set of values.
+ *
+ * - Check signed 64-bit modulo operations for a sample set of values.
+ *
+ * - Check unsigned 64-bit modulo operations for a sample set of values.
+ *
+ * @{
+ */
+
+#if __LONG_MAX__ == 0x7fffffffL && !defined(__aarch64__)
+#define TEST_UDIVMODDI4
+#endif
+
+#if defined(TEST_UDIVMODDI4)
+uint64_t __udivmoddi4( uint64_t n, uint64_t d, uint64_t *r );
+#endif
+
+#if defined(TEST_UDIVMODDI4) && defined(__arm__)
+/*
+ * Here __aeabi_uldivmod() may be used to carry out integer division
+ * operations even though the reminder is unused. This function is
+ * implemented by __udivmoddi4() which may never get called without a
+ * reminder for compiler generated code.
+ */
+#define TEST_UDIVMODDI4_WITHOUT_REMINDER
+#endif
+
+static bool do_longjmp;
+
+static jmp_buf exception_return_context;
+
+static void Fatal(
+ rtems_fatal_source source,
+ rtems_fatal_code code,
+ void *arg
+)
+{
+ (void) code;
+
+ if ( source == RTEMS_FATAL_SOURCE_EXCEPTION && do_longjmp ) {
+ do_longjmp = false;
+ _ISR_Set_level( 0 );
+ longjmp( arg, 1 );
+ }
+}
+
+static void CompilerUnitBuiltins_Setup( void *ctx )
+{
+ SetFatalHandler( Fatal, exception_return_context );
+}
+
+static void CompilerUnitBuiltins_Teardown( void *ctx )
+{
+ SetFatalHandler( NULL, NULL );
+}
+
+static T_fixture CompilerUnitBuiltins_Fixture = {
+ .setup = CompilerUnitBuiltins_Setup,
+ .stop = NULL,
+ .teardown = CompilerUnitBuiltins_Teardown,
+ .scope = NULL,
+ .initial_context = NULL
+};
+
+/**
+ * @brief Check the return value of __builtin_clz() for a sample set of inputs.
+ */
+static void CompilerUnitBuiltins_Action_0( void )
+{
+ volatile unsigned int n;
+
+ n = 0;
+ RTEMS_OBFUSCATE_VARIABLE( n );
+
+ n = 1U;
+ T_eq_int( __builtin_clz( n ), 31 );
+
+ n = 1U << 31;
+ T_eq_int( __builtin_clz( n ), 0 );
+
+ n = ~0U;
+ T_eq_int( __builtin_clz( n ), 0 );
+}
+
+/**
+ * @brief Check the return value of __builtin_clzll() for a sample set of
+ * inputs.
+ */
+static void CompilerUnitBuiltins_Action_1( void )
+{
+ volatile unsigned long long n;
+
+ n = 0;
+ RTEMS_OBFUSCATE_VARIABLE( n );
+
+ n = 1ULL;
+ T_eq_int( __builtin_clzll( n ), 63 );
+
+ n = 1ULL << 31;
+ T_eq_int( __builtin_clzll( n ), 32 );
+
+ n = 1ULL << 32;
+ T_eq_int( __builtin_clzll( n ), 31 );
+
+ n = 1ULL << 63;
+ T_eq_int( __builtin_clzll( n ), 0 );
+
+ n = ~0ULL;
+ T_eq_int( __builtin_clzll( n ), 0 );
+}
+
+/**
+ * @brief Check the return value of __builtin_ctz() for a sample set of inputs.
+ */
+static void CompilerUnitBuiltins_Action_2( void )
+{
+ volatile unsigned int n;
+
+ n = 0;
+ RTEMS_OBFUSCATE_VARIABLE( n );
+
+ n = 1U;
+ T_eq_int( __builtin_ctz( n ), 0 );
+
+ n = 1U << 31;
+ T_eq_int( __builtin_ctz( n ), 31 );
+
+ n = ~0U;
+ T_eq_int( __builtin_ctz( n ), 0 );
+}
+
+/**
+ * @brief Check the return value of __builtin_ctzll() for a sample set of
+ * inputs.
+ */
+static void CompilerUnitBuiltins_Action_3( void )
+{
+ volatile unsigned long long n;
+
+ n = 0;
+ RTEMS_OBFUSCATE_VARIABLE( n );
+
+ n = 1ULL;
+ T_eq_int( __builtin_ctzll( n ), 0 );
+
+ n = 1ULL << 31;
+ T_eq_int( __builtin_ctzll( n ), 31 );
+
+ n = 1ULL << 32;
+ T_eq_int( __builtin_ctzll( n ), 32 );
+
+ n = 1ULL << 63;
+ T_eq_int( __builtin_ctzll( n ), 63 );
+
+ n = ~0ULL;
+ T_eq_int( __builtin_ctzll( n ), 0 );
+}
+
+/**
+ * @brief Check the return value of __builtin_ffs() for a sample set of inputs.
+ */
+static void CompilerUnitBuiltins_Action_4( void )
+{
+ volatile unsigned int n;
+
+ n = 0;
+ RTEMS_OBFUSCATE_VARIABLE( n );
+
+ n = 1U;
+ T_eq_int( __builtin_ffs( n ), 1 );
+
+ n = 1U << 31;
+ T_eq_int( __builtin_ffs( n ), 32 );
+
+ n = 0U;
+ T_eq_int( __builtin_ffs( n ), 0 );
+}
+
+/**
+ * @brief Check the return value of __builtin_ffsll() for a sample set of
+ * inputs.
+ */
+static void CompilerUnitBuiltins_Action_5( void )
+{
+ volatile unsigned long long n;
+
+ n = 0;
+ RTEMS_OBFUSCATE_VARIABLE( n );
+
+ n = 1ULL;
+ T_eq_int( __builtin_ffsll( n ), 1 );
+
+ n = 1ULL << 31;
+ T_eq_int( __builtin_ffsll( n ), 32 );
+
+ n = 1ULL << 32;
+ T_eq_int( __builtin_ffsll( n ), 33 );
+
+ n = 1ULL << 63;
+ T_eq_int( __builtin_ffsll( n ), 64 );
+
+ n = 0ULL;
+ T_eq_int( __builtin_ffsll( n ), 0 );
+}
+
+/**
+ * @brief Check the return value of __builtin_parity() for a sample set of
+ * inputs.
+ */
+static void CompilerUnitBuiltins_Action_6( void )
+{
+ volatile unsigned int n;
+
+ n = 0;
+ RTEMS_OBFUSCATE_VARIABLE( n );
+
+ n = 1U;
+ T_eq_int( __builtin_parity( n ), 1 );
+
+ n = ~0U;
+ T_eq_int( __builtin_parity( n ), 0 );
+}
+
+/**
+ * @brief Check the return value of __builtin_parityll() for a sample set of
+ * inputs.
+ */
+static void CompilerUnitBuiltins_Action_7( void )
+{
+ volatile unsigned long long n;
+
+ n = 0;
+ RTEMS_OBFUSCATE_VARIABLE( n );
+
+ n = 1ULL;
+ T_eq_int( __builtin_parityll( n ), 1 );
+
+ n = ~0ULL;
+ T_eq_int( __builtin_parityll( n ), 0 );
+}
+
+/**
+ * @brief Check the return value of __builtin_popcount() for a sample set of
+ * inputs.
+ */
+static void CompilerUnitBuiltins_Action_8( void )
+{
+ volatile unsigned int n;
+
+ n = 0;
+ RTEMS_OBFUSCATE_VARIABLE( n );
+
+ n = 0U;
+ T_eq_int( __builtin_popcount( n ), 0 );
+
+ n = 1U;
+ T_eq_int( __builtin_popcount( n ), 1 );
+
+ n = ~0U;
+ T_eq_int( __builtin_popcount( n ), 32 );
+}
+
+/**
+ * @brief Check the return value of __builtin_popcountll() for a sample set of
+ * inputs.
+ */
+static void CompilerUnitBuiltins_Action_9( void )
+{
+ volatile unsigned long long n;
+
+ n = 0;
+ RTEMS_OBFUSCATE_VARIABLE( n );
+
+ n = 0ULL;
+ T_eq_int( __builtin_popcountll( n ), 0 );
+
+ n = 1ULL;
+ T_eq_int( __builtin_popcountll( n ), 1 );
+
+ n = ~0ULL;
+ T_eq_int( __builtin_popcountll( n ), 64 );
+}
+
+/**
+ * @brief Check the return value of __builtin_bswap32() for a sample set of
+ * inputs.
+ */
+static void CompilerUnitBuiltins_Action_10( void )
+{
+ volatile uint32_t n;
+
+ n = 0;
+ RTEMS_OBFUSCATE_VARIABLE( n );
+
+ n = UINT32_C( 0 );
+ T_eq_u32( __builtin_bswap32( n ), n );
+
+ n = UINT32_C( 1 );
+ T_eq_u32( __builtin_bswap32( n ), n << 24 );
+
+ n = UINT32_C( 0x12345678 );
+ T_eq_u32( __builtin_bswap32( n ), UINT32_C( 0x78563412 ) );
+
+ n = ~UINT32_C( 0 );
+ T_eq_u32( __builtin_bswap32( n ), n );
+}
+
+/**
+ * @brief Check the return value of __builtin_bswap64() for a sample set of
+ * inputs.
+ */
+static void CompilerUnitBuiltins_Action_11( void )
+{
+ volatile uint64_t n;
+
+ n = 0;
+ RTEMS_OBFUSCATE_VARIABLE( n );
+
+ n = UINT64_C( 0 );
+ T_eq_u64( __builtin_bswap64( n ), n );
+
+ n = UINT64_C( 1 );
+ T_eq_u64( __builtin_bswap64( n ), n << 56 );
+
+ n = UINT64_C( 0x123456789abcdef0 );
+ T_eq_u64( __builtin_bswap64( n ), UINT64_C( 0xf0debc9a78563412 ) );
+
+ n = ~UINT64_C( 0 );
+ T_eq_u64( __builtin_bswap64( n ), n );
+}
+
+/**
+ * @brief Check signed 64-bit comparisons for a sample set of values.
+ */
+static void CompilerUnitBuiltins_Action_12( void )
+{
+ volatile int64_t a;
+ volatile int64_t b;
+
+ a = 0;
+ RTEMS_OBFUSCATE_VARIABLE( a );
+ b = 0;
+ RTEMS_OBFUSCATE_VARIABLE( b );
+
+ a = INT64_C( 0 );
+ b = INT64_C( 0 );
+ T_false( a < b );
+
+ a = INT64_C( 0 );
+ b = INT64_C( 1 );
+ T_true( a < b );
+
+ a = INT64_C( 0x123456789abcdef0 );
+ b = INT64_C( 0xf0debc9a78563412 );
+ T_false( a < b );
+
+ a = INT64_C( 0xf0debc9a78563412 );
+ b = INT64_C( 0x123456789abcdef0 );
+ T_true( a < b );
+}
+
+/**
+ * @brief Check unsigned 64-bit comparisons for a sample set of values.
+ */
+static void CompilerUnitBuiltins_Action_13( void )
+{
+ volatile uint64_t a;
+ volatile uint64_t b;
+
+ a = 0;
+ RTEMS_OBFUSCATE_VARIABLE( a );
+ b = 0;
+ RTEMS_OBFUSCATE_VARIABLE( b );
+
+ a = UINT64_C( 0 );
+ b = UINT64_C( 0 );
+ T_false( a < b );
+
+ a = UINT64_C( 0 );
+ b = UINT64_C( 1 );
+ T_true( a < b );
+
+ a = UINT64_C( 0x123456789abcdef0 );
+ b = UINT64_C( 0xf0debc9a78563412 );
+ T_true( a < b );
+
+ a = UINT64_C( 0xf0debc9a78563412 );
+ b = UINT64_C( 0x123456789abcdef0 );
+ T_false( a < b );
+}
+
+/**
+ * @brief Check signed 64-bit arithmetic left shift for a sample set of values.
+ */
+static void CompilerUnitBuiltins_Action_14( void )
+{
+ volatile int64_t i;
+ volatile int s;
+
+ i = 0;
+ RTEMS_OBFUSCATE_VARIABLE( i );
+ s = 0;
+ RTEMS_OBFUSCATE_VARIABLE( s );
+
+ i = INT64_C( 1 );
+ s = 0;
+ T_eq_i64( i << s, INT64_C( 1 ) );
+
+ i = -INT64_C( 1 );
+ s = 0;
+ T_eq_i64( i << s, -INT64_C( 1 ) );
+
+ i = INT64_C( 1 );
+ s = 1;
+ T_eq_i64( i << s, INT64_C( 2 ) );
+
+ i = -INT64_C( 1 );
+ s = 1;
+ T_eq_i64( i << s, -INT64_C( 2 ) );
+}
+
+/**
+ * @brief Check signed 64-bit arithmetic right shift for a sample set of
+ * values.
+ */
+static void CompilerUnitBuiltins_Action_15( void )
+{
+ volatile int64_t i;
+ volatile int s;
+
+ i = 0;
+ RTEMS_OBFUSCATE_VARIABLE( i );
+ s = 0;
+ RTEMS_OBFUSCATE_VARIABLE( s );
+
+ i = INT64_C( 1 );
+ s = 0;
+ T_eq_i64( i >> s, INT64_C( 1 ) );
+
+ i = -INT64_C( 1 );
+ s = 0;
+ T_eq_i64( i >> s, -INT64_C( 1 ) );
+
+ i = INT64_C( 2 );
+ s = 1;
+ T_eq_i64( i >> s, INT64_C( 1 ) );
+
+ i = -INT64_C( 2 );
+ s = 1;
+ T_eq_i64( i >> s, -INT64_C( 1 ) );
+}
+
+/**
+ * @brief Check unsigned 64-bit logical right shift for a sample set of values.
+ */
+static void CompilerUnitBuiltins_Action_16( void )
+{
+ volatile uint64_t i;
+ volatile int s;
+
+ i = 0;
+ RTEMS_OBFUSCATE_VARIABLE( i );
+ s = 0;
+ RTEMS_OBFUSCATE_VARIABLE( s );
+
+ i = UINT64_C( 1 );
+ s = 0;
+ T_eq_u64( i >> s, UINT64_C( 1 ) );
+
+ i = -UINT64_C( 1 );
+ s = 0;
+ T_eq_u64( i >> s, UINT64_C( 0xffffffffffffffff ) );
+
+ i = UINT64_C( 2 );
+ s = 1;
+ T_eq_u64( i >> s, UINT64_C( 1 ) );
+
+ i = -UINT64_C( 2 );
+ s = 1;
+ T_eq_u64( i >> s, UINT64_C( 0x7fffffffffffffff ) );
+}
+
+/**
+ * @brief Check signed 64-bit multiplication for a sample set of values.
+ */
+static void CompilerUnitBuiltins_Action_17( void )
+{
+ volatile int64_t a;
+ volatile int64_t b;
+
+ a = 0;
+ RTEMS_OBFUSCATE_VARIABLE( a );
+ b = 0;
+ RTEMS_OBFUSCATE_VARIABLE( b );
+
+ a = INT64_C( 1 );
+ b = INT64_C( 1 );
+ T_eq_i64( a * b, INT64_C( 1 ) );
+
+ a = INT64_C( 1 );
+ b = INT64_C( 0 );
+ T_eq_i64( a * b, INT64_C( 0 ) );
+
+ a = INT64_C( 0 );
+ b = INT64_C( 1 );
+ T_eq_i64( a * b, INT64_C( 0 ) );
+}
+
+/**
+ * @brief Check signed 64-bit negation for a sample set of values.
+ */
+static void CompilerUnitBuiltins_Action_18( void )
+{
+ volatile int64_t i;
+
+ i = 0;
+ RTEMS_OBFUSCATE_VARIABLE( i );
+
+ i = INT64_C( 1 );
+ T_eq_i64( -i, -INT64_C( 1 ) );
+
+ i = -INT64_C( 1 );
+ T_eq_i64( -i, INT64_C( 1 ) );
+}
+
+/**
+ * @brief Check signed 64-bit divisions for a sample set of values.
+ */
+static void CompilerUnitBuiltins_Action_19( void )
+{
+ volatile int64_t n;
+ volatile int64_t d;
+ volatile int64_t x;
+
+ n = 0;
+ RTEMS_OBFUSCATE_VARIABLE( n );
+ d = 0;
+ RTEMS_OBFUSCATE_VARIABLE( d );
+ x = 0;
+ RTEMS_OBFUSCATE_VARIABLE( x );
+
+ n = INT64_C( 0 );
+ d = INT64_C( 0 );
+ do_longjmp = true;
+
+ if ( setjmp( exception_return_context ) == 0 ) {
+ x = n / d;
+ }
+
+ n = INT64_C( 1 );
+ d = INT64_C( 0 );
+ do_longjmp = true;
+
+ if ( setjmp( exception_return_context ) == 0 ) {
+ x = n / d;
+ }
+
+ n = INT64_C( 0x7fffffffffffffff );
+ d = INT64_C( 0 );
+ do_longjmp = true;
+
+ if ( setjmp( exception_return_context ) == 0 ) {
+ x = n / d;
+ }
+
+ n = INT64_C( 0x7fffffff00000000 );
+ d = INT64_C( 0 );
+ do_longjmp = true;
+
+ if ( setjmp( exception_return_context ) == 0 ) {
+ x = n / d;
+ }
+
+ n = INT64_C( 0 );
+ d = INT64_C( 1 );
+ T_eq_i64( n / d, INT64_C( 0 ) );
+
+ n = INT64_C( 1 );
+ d = INT64_C( 1 );
+ T_eq_i64( n / d, INT64_C( 1 ) );
+
+ n = INT64_C( 0x7fffffffffffffff );
+ d = INT64_C( 1 );
+ T_eq_i64( n / d, INT64_C( 9223372036854775807 ) );
+
+ n = INT64_C( 2 );
+ d = INT64_C( 1 );
+ T_eq_i64( n / d, INT64_C( 2 ) );
+
+ n = INT64_C( 2 );
+ d = INT64_C( 1 );
+ T_eq_i64( n / d, INT64_C( 2 ) );
+
+ n = INT64_C( 1 );
+ d = INT64_C( 0x7fffffffffffffff );
+ T_eq_i64( n / d, INT64_C( 0 ) );
+
+ n = INT64_C( 0x7fffffffffffffff );
+ d = INT64_C( 0x7fffffffffffffff );
+ T_eq_i64( n / d, INT64_C( 1 ) );
+
+ n = INT64_C( 1 );
+ d = INT64_C( 0x7fffffff00000000 );
+ T_eq_i64( n / d, INT64_C( 0 ) );
+
+ n = INT64_C( 0x7fffffff00000000 );
+ d = INT64_C( 0x7fffffff00000000 );
+ T_eq_i64( n / d, INT64_C( 1 ) );
+
+ n = INT64_C( 0x7fffffffffffffff );
+ d = INT64_C( 0x7fffffff00000000 );
+ T_eq_i64( n / d, INT64_C( 1 ) );
+
+ n = INT64_C( 0x7fffffffffffffff );
+ d = INT64_C( 0x8000000000000000 );
+ T_eq_i64( n / d, INT64_C( 0 ) );
+
+ n = INT64_C( 0x7fffffffffffffff );
+ d = INT64_C( 0x0000000080000000 );
+ T_eq_i64( n / d, INT64_C( 0xffffffff ) );
+
+ n = INT64_C( 0x7fffffffffffffff );
+ d = INT64_C( 0x00000000f0000000 );
+ T_eq_i64( n / d, INT64_C( 2290649224 ) );
+
+ n = INT64_C( 0x00000001ffffffff );
+ d = INT64_C( 0x00000000f0000000 );
+ T_eq_i64( n / d, INT64_C( 2 ) );
+
+ n = INT64_C( 0x0000000fffffffff );
+ d = INT64_C( 0x000000000000000f );
+ T_eq_i64( n / d, INT64_C( 4581298449 ) );
+
+ n = INT64_C( 0x0000000100000001 );
+ d = INT64_C( 0x0000000f00000000 );
+ T_eq_i64( n / d, INT64_C( 0 ) );
+
+ n = INT64_C( 0x0000000f0000000f );
+ d = INT64_C( 0x000000ff0000000f );
+ T_eq_i64( n / d, INT64_C( 0 ) );
+}
+
+/**
+ * @brief Check unsigned 64-bit divisions for a sample set of values.
+ */
+static void CompilerUnitBuiltins_Action_20( void )
+{
+ volatile uint64_t n;
+ volatile uint64_t d;
+ volatile uint64_t x;
+
+ n = 0;
+ RTEMS_OBFUSCATE_VARIABLE( n );
+ d = 0;
+ RTEMS_OBFUSCATE_VARIABLE( d );
+ x = 0;
+ RTEMS_OBFUSCATE_VARIABLE( x );
+
+ n = UINT64_C( 0 );
+ d = UINT64_C( 0 );
+ do_longjmp = true;
+
+ if ( setjmp( exception_return_context ) == 0 ) {
+ x = n / d;
+ }
+
+ #if defined(TEST_UDIVMODDI4_WITHOUT_REMINDER)
+ do_longjmp = true;
+
+ if ( setjmp( exception_return_context ) == 0 ) {
+ __udivmoddi4( n, d, NULL );
+ }
+ #endif
+
+ n = UINT64_C( 1 );
+ d = UINT64_C( 0 );
+ do_longjmp = true;
+
+ if ( setjmp( exception_return_context ) == 0 ) {
+ x = n / d;
+ }
+
+ #if defined(TEST_UDIVMODDI4_WITHOUT_REMINDER)
+ do_longjmp = true;
+
+ if ( setjmp( exception_return_context ) == 0 ) {
+ __udivmoddi4( n, d, NULL );
+ }
+ #endif
+
+ n = UINT64_C( 0x7fffffffffffffff );
+ d = UINT64_C( 0 );
+ do_longjmp = true;
+
+ if ( setjmp( exception_return_context ) == 0 ) {
+ x = n / d;
+ }
+
+ #if defined(TEST_UDIVMODDI4_WITHOUT_REMINDER)
+ do_longjmp = true;
+
+ if ( setjmp( exception_return_context ) == 0 ) {
+ __udivmoddi4( n, d, NULL );
+ }
+ #endif
+
+ n = UINT64_C( 0x7fffffff00000000 );
+ d = UINT64_C( 0 );
+ do_longjmp = true;
+
+ if ( setjmp( exception_return_context ) == 0 ) {
+ x = n / d;
+ }
+
+ #if defined(TEST_UDIVMODDI4_WITHOUT_REMINDER)
+ do_longjmp = true;
+
+ if ( setjmp( exception_return_context ) == 0 ) {
+ __udivmoddi4( n, d, NULL );
+ }
+ #endif
+
+ n = UINT64_C( 0x7fffffff00000000 );
+ d = UINT64_C( 0x7fffffff00000000 );
+ do_longjmp = true;
+
+ if ( setjmp( exception_return_context ) == 0 ) {
+ x = n / d;
+ }
+
+ #if defined(TEST_UDIVMODDI4_WITHOUT_REMINDER)
+ do_longjmp = true;
+
+ if ( setjmp( exception_return_context ) == 0 ) {
+ __udivmoddi4( n, d, NULL );
+ }
+ #endif
+
+ n = UINT64_C( 0 );
+ d = UINT64_C( 1 );
+ T_eq_u64( n / d, UINT64_C( 0 ) );
+ #if defined(TEST_UDIVMODDI4_WITHOUT_REMINDER)
+ T_eq_u64( __udivmoddi4( n, d, NULL ), UINT64_C( 0 ) );
+ #endif
+
+ n = UINT64_C( 1 );
+ d = UINT64_C( 1 );
+ T_eq_u64( n / d, UINT64_C( 1 ) );
+ #if defined(TEST_UDIVMODDI4_WITHOUT_REMINDER)
+ T_eq_u64( __udivmoddi4( n, d, NULL ), UINT64_C( 1 ) );
+ #endif
+
+ n = UINT64_C( 0xffffffffffffffff );
+ d = UINT64_C( 1 );
+ T_eq_u64( n / d, UINT64_C( 0xffffffffffffffff ) );
+ #if defined(TEST_UDIVMODDI4_WITHOUT_REMINDER)
+ T_eq_u64( __udivmoddi4( n, d, NULL ), UINT64_C( 0xffffffffffffffff ) );
+ #endif
+
+ n = UINT64_C( 2 );
+ d = UINT64_C( 1 );
+ T_eq_u64( n / d, UINT64_C( 2 ) );
+ #if defined(TEST_UDIVMODDI4_WITHOUT_REMINDER)
+ T_eq_u64( __udivmoddi4( n, d, NULL ), UINT64_C( 2 ) );
+ #endif
+
+ n = UINT64_C( 1 );
+ d = UINT64_C( 0xffffffffffffffff );
+ T_eq_u64( n / d, UINT64_C( 0 ) );
+ #if defined(TEST_UDIVMODDI4_WITHOUT_REMINDER)
+ T_eq_u64( __udivmoddi4( n, d, NULL ), UINT64_C( 0 ) );
+ #endif
+
+ n = UINT64_C( 0xffffffffffffffff );
+ d = UINT64_C( 0xffffffffffffffff );
+ T_eq_u64( n / d, UINT64_C( 1 ) );
+ #if defined(TEST_UDIVMODDI4_WITHOUT_REMINDER)
+ T_eq_u64( __udivmoddi4( n, d, NULL ), UINT64_C( 1 ) );
+ #endif
+
+ n = UINT64_C( 0xffffffffffffffff );
+ d = UINT64_C( 0x8000000000000000 );
+ T_eq_u64( n / d, UINT64_C( 1 ) );
+ #if defined(TEST_UDIVMODDI4_WITHOUT_REMINDER)
+ T_eq_u64( __udivmoddi4( n, d, NULL ), UINT64_C( 1 ) );
+ #endif
+
+ n = UINT64_C( 0x0000000100000001 );
+ d = UINT64_C( 0x0000000f00000000 );
+ T_eq_u64( n / d, UINT64_C( 0 ) );
+ #if defined(TEST_UDIVMODDI4_WITHOUT_REMINDER)
+ T_eq_u64( __udivmoddi4( n, d, NULL ), UINT64_C( 0 ) );
+ #endif
+
+ n = UINT64_C( 0x0000000100000000 );
+ d = UINT64_C( 0x0000000f00000001 );
+ T_eq_u64( n / d, UINT64_C( 0 ) );
+ #if defined(TEST_UDIVMODDI4_WITHOUT_REMINDER)
+ T_eq_u64( __udivmoddi4( n, d, NULL ), UINT64_C( 0 ) );
+ #endif
+
+ n = UINT64_C( 0xffffffff0000000f );
+ d = UINT64_C( 0x000000010000000f );
+ T_eq_u64( n / d, UINT64_C( 4294967280 ) );
+ #if defined(TEST_UDIVMODDI4_WITHOUT_REMINDER)
+ T_eq_u64( __udivmoddi4( n, d, NULL ), UINT64_C( 4294967280 ) );
+ #endif
+}
+
+/**
+ * @brief Check signed 64-bit modulo operations for a sample set of values.
+ */
+static void CompilerUnitBuiltins_Action_21( void )
+{
+ volatile int64_t n;
+ volatile int64_t d;
+ volatile int64_t x;
+
+ n = 0;
+ RTEMS_OBFUSCATE_VARIABLE( n );
+ d = 0;
+ RTEMS_OBFUSCATE_VARIABLE( d );
+ x = 0;
+ RTEMS_OBFUSCATE_VARIABLE( x );
+
+ n = INT64_C( 0 );
+ d = INT64_C( 0 );
+ do_longjmp = true;
+
+ if ( setjmp( exception_return_context ) == 0 ) {
+ x = n % d;
+ }
+
+ n = INT64_C( 1 );
+ d = INT64_C( 0 );
+ do_longjmp = true;
+
+ if ( setjmp( exception_return_context ) == 0 ) {
+ x = n % d;
+ }
+
+ n = INT64_C( 0x7fffffffffffffff );
+ d = INT64_C( 0 );
+ do_longjmp = true;
+
+ if ( setjmp( exception_return_context ) == 0 ) {
+ x = n % d;
+ }
+
+ n = INT64_C( 0x7fffffff00000000 );
+ d = INT64_C( 0 );
+ do_longjmp = true;
+
+ if ( setjmp( exception_return_context ) == 0 ) {
+ x = n % d;
+ }
+
+ n = INT64_C( 0 );
+ d = INT64_C( 1 );
+ T_eq_i64( n % d, INT64_C( 0 ) );
+
+ n = INT64_C( 1 );
+ d = INT64_C( 1 );
+ T_eq_i64( n % d, INT64_C( 0 ) );
+
+ n = INT64_C( 0x7fffffffffffffff );
+ d = INT64_C( 1 );
+ T_eq_i64( n % d, INT64_C( 0 ) );
+
+ n = INT64_C( 2 );
+ d = INT64_C( 1 );
+ T_eq_i64( n % d, INT64_C( 0 ) );
+
+ n = INT64_C( 2 );
+ d = INT64_C( 1 );
+ T_eq_i64( n % d, INT64_C( 0 ) );
+
+ n = INT64_C( 1 );
+ d = INT64_C( 0x7fffffffffffffff );
+ T_eq_i64( n % d, INT64_C( 1 ) );
+
+ n = INT64_C( 0x7fffffffffffffff );
+ d = INT64_C( 0x7fffffffffffffff );
+ T_eq_i64( n % d, INT64_C( 0 ) );
+
+ n = INT64_C( 1 );
+ d = INT64_C( 0x7fffffff00000000 );
+ T_eq_i64( n % d, INT64_C( 1 ) );
+
+ n = INT64_C( 0x7fffffff00000000 );
+ d = INT64_C( 0x7fffffff00000000 );
+ T_eq_i64( n % d, INT64_C( 0 ) );
+
+ n = INT64_C( 0x7fffffffffffffff );
+ d = INT64_C( 0x7fffffff00000000 );
+ T_eq_i64( n % d, INT64_C( 0xffffffff ) );
+
+ n = INT64_C( 0x7fffffffffffffff );
+ d = INT64_C( 0x8000000000000000 );
+ T_eq_i64( n % d, INT64_C( 0x7fffffffffffffff ) );
+
+ n = INT64_C( 0x7fffffffffffffff );
+ d = INT64_C( 0x0000000080000000 );
+ T_eq_i64( n % d, INT64_C( 2147483647 ) );
+
+ n = INT64_C( 0x7fffffffffffffff );
+ d = INT64_C( 0x00000000f0000000 );
+ T_eq_i64( n % d, INT64_C( 2147483647 ) );
+
+ n = INT64_C( 0x00000001ffffffff );
+ d = INT64_C( 0x00000000f0000000 );
+ T_eq_i64( n % d, INT64_C( 536870911 ) );
+
+ n = INT64_C( 0x0000000fffffffff );
+ d = INT64_C( 0x000000000000000f );
+ T_eq_i64( n % d, INT64_C( 0 ) );
+
+ n = INT64_C( 0x0000000100000001 );
+ d = INT64_C( 0x0000000f00000000 );
+ T_eq_i64( n % d, INT64_C( 4294967297 ) );
+
+ n = INT64_C( 0x0000000f0000000f );
+ d = INT64_C( 0x000000ff0000000f );
+ T_eq_i64( n % d, INT64_C( 64424509455 ) );
+
+ #if defined(TEST_UDIVMODDI4)
+ /*
+ * The above test cases may use __udivmoddi4(). However, the below
+ * parameter values for __udivmoddi4() cannot be obtained through the
+ * signed modulo or division operations. On some targets, calls to
+ * __udivmoddi4() may result from complex optimizations.
+ */
+ n = INT64_C( 0xffffffff0000000f );
+ d = INT64_C( 0x000000010000000f );
+ T_eq_u64( __udivmoddi4( n, d, NULL ), INT64_C( 4294967280 ) );
+ #endif
+}
+
+/**
+ * @brief Check unsigned 64-bit modulo operations for a sample set of values.
+ */
+static void CompilerUnitBuiltins_Action_22( void )
+{
+ volatile uint64_t n;
+ volatile uint64_t d;
+ volatile uint64_t x;
+
+ n = 0;
+ RTEMS_OBFUSCATE_VARIABLE( n );
+ d = 0;
+ RTEMS_OBFUSCATE_VARIABLE( d );
+ x = 0;
+ RTEMS_OBFUSCATE_VARIABLE( x );
+
+ n = UINT64_C( 0 );
+ d = UINT64_C( 0 );
+ do_longjmp = true;
+
+ if ( setjmp( exception_return_context ) == 0 ) {
+ x = n % d;
+ }
+
+ n = UINT64_C( 1 );
+ d = UINT64_C( 0 );
+ do_longjmp = true;
+
+ if ( setjmp( exception_return_context ) == 0 ) {
+ x = n % d;
+ }
+
+ n = UINT64_C( 0 );
+ d = UINT64_C( 1 );
+ T_eq_u64( n % d, UINT64_C( 0 ) );
+
+ n = UINT64_C( 1 );
+ d = UINT64_C( 1 );
+ T_eq_u64( n % d, UINT64_C( 0 ) );
+
+ n = UINT64_C( 0xffffffffffffffff );
+ d = UINT64_C( 1 );
+ T_eq_u64( n % d, UINT64_C( 0 ) );
+
+ n = UINT64_C( 2 );
+ d = UINT64_C( 1 );
+ T_eq_u64( n % d, UINT64_C( 0 ) );
+
+ n = UINT64_C( 1 );
+ d = UINT64_C( 0xffffffffffffffff );
+ T_eq_u64( n % d, UINT64_C( 1 ) );
+
+ n = UINT64_C( 0xffffffffffffffff );
+ d = UINT64_C( 0xffffffffffffffff );
+ T_eq_u64( n % d, UINT64_C( 0 ) );
+}
+
+/**
+ * @fn void T_case_body_CompilerUnitBuiltins( void )
+ */
+T_TEST_CASE_FIXTURE( CompilerUnitBuiltins, &CompilerUnitBuiltins_Fixture )
+{
+ CompilerUnitBuiltins_Action_0();
+ CompilerUnitBuiltins_Action_1();
+ CompilerUnitBuiltins_Action_2();
+ CompilerUnitBuiltins_Action_3();
+ CompilerUnitBuiltins_Action_4();
+ CompilerUnitBuiltins_Action_5();
+ CompilerUnitBuiltins_Action_6();
+ CompilerUnitBuiltins_Action_7();
+ CompilerUnitBuiltins_Action_8();
+ CompilerUnitBuiltins_Action_9();
+ CompilerUnitBuiltins_Action_10();
+ CompilerUnitBuiltins_Action_11();
+ CompilerUnitBuiltins_Action_12();
+ CompilerUnitBuiltins_Action_13();
+ CompilerUnitBuiltins_Action_14();
+ CompilerUnitBuiltins_Action_15();
+ CompilerUnitBuiltins_Action_16();
+ CompilerUnitBuiltins_Action_17();
+ CompilerUnitBuiltins_Action_18();
+ CompilerUnitBuiltins_Action_19();
+ CompilerUnitBuiltins_Action_20();
+ CompilerUnitBuiltins_Action_21();
+ CompilerUnitBuiltins_Action_22();
+}
+
+/** @} */
diff --git a/testsuites/unit/tc-config.c b/testsuites/unit/tc-config.c
new file mode 100644
index 0000000000..415142e1b4
--- /dev/null
+++ b/testsuites/unit/tc-config.c
@@ -0,0 +1,171 @@
+/* SPDX-License-Identifier: BSD-2-Clause */
+
+/**
+ * @file
+ *
+ * @ingroup RtemsConfigUnitConfig
+ */
+
+/*
+ * Copyright (C) 2021 embedded brains GmbH & Co. KG
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ */
+
+/*
+ * This file is part of the RTEMS quality process and was automatically
+ * generated. If you find something that needs to be fixed or
+ * worded better please post a report or patch to an RTEMS mailing list
+ * or raise a bug report:
+ *
+ * https://www.rtems.org/bugs.html
+ *
+ * For information on updating and regenerating please refer to the How-To
+ * section in the Software Requirements Engineering chapter of the
+ * RTEMS Software Engineering manual. The manual is provided as a part of
+ * a release. For development sources please refer to the online
+ * documentation at:
+ *
+ * https://docs.rtems.org
+ */
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#include <rtems.h>
+#include <rtems/rtems/semdata.h>
+#include <rtems/score/object.h>
+#include <rtems/score/objectdata.h>
+
+#include <rtems/test.h>
+
+/**
+ * @defgroup RtemsConfigUnitConfig spec:/rtems/config/unit/config
+ *
+ * @ingroup TestsuitesUnitNoClock0
+ *
+ * @brief Unit tests for the configuration manager.
+ *
+ * Parts of the file ``cpukit/sapi/src/getconfigmax.c`` are only executed when
+ * unlimited objects are configured. The space qualified code subset does not
+ * support this feature. This test exercises the code parts otherwise not
+ * reached in order to achieve full code coverage.
+ *
+ * This test case performs the following actions:
+ *
+ * - Call get_config_max() indirectly through
+ * rtems_configuration_get_maximum_semaphores() with a specially manipulated
+ * argument to enter an if-branch only accessed when unlimited objects are
+ * configured.
+ *
+ * - The value returned by the function call must be the one artificially
+ * injected by this test.
+ *
+ * @{
+ */
+
+#define SEMAPHORES_PER_BLOCK 32
+
+/**
+ * @brief Test context for spec:/rtems/config/unit/config test case.
+ */
+typedef struct {
+ /**
+ * @brief This member contains the original value of
+ * ``_Semaphore_Information->objects_per_block``.
+ */
+ Objects_Maximum objects_per_block_ori;
+} RtemsConfigUnitConfig_Context;
+
+static RtemsConfigUnitConfig_Context
+ RtemsConfigUnitConfig_Instance;
+
+static void RtemsConfigUnitConfig_Setup( RtemsConfigUnitConfig_Context *ctx )
+{
+ ctx->objects_per_block_ori = _Semaphore_Information.objects_per_block;
+ _Semaphore_Information.objects_per_block = SEMAPHORES_PER_BLOCK;
+}
+
+static void RtemsConfigUnitConfig_Setup_Wrap( void *arg )
+{
+ RtemsConfigUnitConfig_Context *ctx;
+
+ ctx = arg;
+ RtemsConfigUnitConfig_Setup( ctx );
+}
+
+static void RtemsConfigUnitConfig_Teardown(
+ RtemsConfigUnitConfig_Context *ctx
+)
+{
+ _Semaphore_Information.objects_per_block = ctx->objects_per_block_ori;
+}
+
+static void RtemsConfigUnitConfig_Teardown_Wrap( void *arg )
+{
+ RtemsConfigUnitConfig_Context *ctx;
+
+ ctx = arg;
+ RtemsConfigUnitConfig_Teardown( ctx );
+}
+
+static T_fixture RtemsConfigUnitConfig_Fixture = {
+ .setup = RtemsConfigUnitConfig_Setup_Wrap,
+ .stop = NULL,
+ .teardown = RtemsConfigUnitConfig_Teardown_Wrap,
+ .scope = NULL,
+ .initial_context = &RtemsConfigUnitConfig_Instance
+};
+
+/**
+ * @brief Call get_config_max() indirectly through
+ * rtems_configuration_get_maximum_semaphores() with a specially manipulated
+ * argument to enter an if-branch only accessed when unlimited objects are
+ * configured.
+ */
+static void RtemsConfigUnitConfig_Action_0(
+ RtemsConfigUnitConfig_Context *ctx
+)
+{
+ uint32_t max = rtems_configuration_get_maximum_semaphores();
+
+ /*
+ * The value returned by the function call must be the one artificially
+ * injected by this test.
+ */
+ T_eq_u32( max, SEMAPHORES_PER_BLOCK | RTEMS_UNLIMITED_OBJECTS );
+}
+
+/**
+ * @fn void T_case_body_RtemsConfigUnitConfig( void )
+ */
+T_TEST_CASE_FIXTURE( RtemsConfigUnitConfig, &RtemsConfigUnitConfig_Fixture )
+{
+ RtemsConfigUnitConfig_Context *ctx;
+
+ ctx = T_fixture_context();
+
+ RtemsConfigUnitConfig_Action_0( ctx );
+}
+
+/** @} */
diff --git a/testsuites/unit/tc-crc.c b/testsuites/unit/tc-crc.c
new file mode 100644
index 0000000000..d33a837860
--- /dev/null
+++ b/testsuites/unit/tc-crc.c
@@ -0,0 +1,48 @@
+/* SPDX-License-Identifier: BSD-2-Clause */
+
+/**
+ * @file
+ *
+ * @ingroup TestsuitesUnitNoClock0
+ */
+
+/*
+ * Copyright (C) 2023 embedded brains GmbH & Co. KG
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include <rtems/crc.h>
+
+#include <rtems/test.h>
+
+T_TEST_CASE(CRC24Q) {
+ uint32_t state = _CRC24Q_Update(CRC24Q_SEED, 0);
+ T_eq_u32(state, 0);
+ state = _CRC24Q_Update(CRC24Q_SEED, '1');
+ state = _CRC24Q_Update(state, '2');
+ state = _CRC24Q_Update(state, '3');
+ T_eq_u32(state & CRC24Q_MASK, 0x2c3045);
+ uint8_t bytes[] = {'1', '2', '3'};
+ state = _CRC24Q_Sequence_update(CRC24Q_SEED, &bytes[0], sizeof(bytes));
+ T_eq_u32(state & CRC24Q_MASK, 0x2c3045);
+}
diff --git a/testsuites/unit/tc-misaligned-builtin-memcpy.c b/testsuites/unit/tc-misaligned-builtin-memcpy.c
index 2021a68551..6ce19e0521 100644
--- a/testsuites/unit/tc-misaligned-builtin-memcpy.c
+++ b/testsuites/unit/tc-misaligned-builtin-memcpy.c
@@ -1,7 +1,13 @@
/* SPDX-License-Identifier: BSD-2-Clause */
+/**
+ * @file
+ *
+ * @ingroup TestsuitesUnitNoClock0
+ */
+
/*
- * Copyright (C) 2019 embedded brains GmbH (http://www.embedded-brains.de)
+ * Copyright (C) 2019 embedded brains GmbH & Co. KG
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
diff --git a/testsuites/unit/tc-score-msgq.c b/testsuites/unit/tc-score-msgq.c
new file mode 100644
index 0000000000..c4cb690c2f
--- /dev/null
+++ b/testsuites/unit/tc-score-msgq.c
@@ -0,0 +1,452 @@
+/* SPDX-License-Identifier: BSD-2-Clause */
+
+/**
+ * @file
+ *
+ * @ingroup ScoreMsgqUnitMsgq
+ */
+
+/*
+ * Copyright (C) 2021 embedded brains GmbH & Co. KG
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ */
+
+/*
+ * This file is part of the RTEMS quality process and was automatically
+ * generated. If you find something that needs to be fixed or
+ * worded better please post a report or patch to an RTEMS mailing list
+ * or raise a bug report:
+ *
+ * https://www.rtems.org/bugs.html
+ *
+ * For information on updating and regenerating please refer to the How-To
+ * section in the Software Requirements Engineering chapter of the
+ * RTEMS Software Engineering manual. The manual is provided as a part of
+ * a release. For development sources please refer to the online
+ * documentation at:
+ *
+ * https://docs.rtems.org
+ */
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#include <rtems.h>
+#include <rtems/rtems/messageimpl.h>
+#include <rtems/rtems/statusimpl.h>
+#include <rtems/score/coremsgimpl.h>
+
+#include "../validation/tx-support.h"
+
+#include <rtems/test.h>
+
+/**
+ * @defgroup ScoreMsgqUnitMsgq spec:/score/msgq/unit/msgq
+ *
+ * @ingroup TestsuitesUnitNoClock0
+ *
+ * @brief Unit tests for the Message Queue Handler.
+ *
+ * Parts of the files ``cpukit/score/src/coremsginsert.c``,
+ * ``cpukit/score/src/coremsgseize.c``, and
+ * ``cpukit/score/src/coremsgsubmit.c`` are only executed by the POSIX API.
+ * Currently, the pre-qualified subset of RTEMS does not contain the POSIX API.
+ * This test exercises the code parts otherwise only reached by the POSIX API
+ * to achieve full code coverage.
+ *
+ * This test case performs the following actions:
+ *
+ * - Use _CORE_message_queue_Insert_message() to insert two messages into a
+ * message queue and use the POSIX message priority to define their order in
+ * the queue.
+ *
+ * - Check that _CORE_message_queue_Submit() was executed successfully.
+ *
+ * - Check that the messages are in the right order in the message queue.
+ *
+ * - Submit three messages into a message queue which can only store two and
+ * have the third submit() blocked till a seize() occurs.
+ *
+ * - Check that the third _CORE_message_queue_Submit() did actually block
+ * till there was room for the message in the message queue.
+ *
+ * - Submit messages in the queue from within an ISR.
+ *
+ * - Check that the first two messages were successfully send.
+ *
+ * - Check that trying to send the third message from ISR when the message
+ * queue was full was rejected.
+ *
+ * @{
+ */
+
+#define MAXIMUM_PENDING_MESSAGES 2
+#define MAXIMUM_MESSAGE_SIZE 3
+
+static void WorkerTask( rtems_task_argument argument );
+
+/**
+ * @brief Test context for spec:/score/msgq/unit/msgq test case.
+ */
+typedef struct {
+ /**
+ * @brief This member contains a valid ID of a message queue.
+ */
+ rtems_id message_queue_id;
+
+ /**
+ * @brief This member is used as storage area for the message queue.
+ */
+ RTEMS_MESSAGE_QUEUE_BUFFER( MAXIMUM_MESSAGE_SIZE )
+ storage_area[ MAXIMUM_PENDING_MESSAGES];
+
+ /**
+ * @brief This member contains the task identifier of the worker task.
+ */
+ rtems_id worker_id;
+
+ /**
+ * @brief This member indicated whether the worker task is currently sending
+ * a message (``true``) or whether it is waiting to receive an event
+ * (``false``).
+ */
+ bool is_worker_working;
+
+ /**
+ * @brief This member contains the returned status code of the SendMessage()
+ * function.
+ */
+ rtems_status_code send_status;
+} ScoreMsgqUnitMsgq_Context;
+
+static ScoreMsgqUnitMsgq_Context
+ ScoreMsgqUnitMsgq_Instance;
+
+#define EVENT_SEND RTEMS_EVENT_17
+#define MESSAGE_CONTENT_LOW { 1, 2, 3 }
+#define MESSAGE_CONTENT_HIGH { 4, 5 }
+#define MESSAGE_PRIORITY_LOW 5
+#define MESSAGE_PRIORITY_HIGH 7
+#define DO_WAIT true
+
+typedef ScoreMsgqUnitMsgq_Context Context;
+
+/*
+ * This is a code fragment from rtems_message_queue_send() with the
+ * specialty that it uses a POSIX priority and the sender
+ * task will wait in case the queue is full.
+ */
+static rtems_status_code SubmitMessage(
+ rtems_id id,
+ uint8_t *message,
+ size_t message_size,
+ unsigned int posix_piority
+)
+{
+ rtems_status_code status;
+ Thread_queue_Context queue_context;
+ Message_queue_Control *the_message_queue;
+
+ T_assert_lt_uint( posix_piority, MQ_PRIO_MAX );
+
+ the_message_queue = _Message_queue_Get(
+ id,
+ &queue_context
+ );
+ T_assert_not_null( the_message_queue );
+
+ /* The next two calls are from _POSIX_Message_queue_Send_support() */
+ _Thread_queue_Context_set_enqueue_callout(
+ &queue_context,
+ _Thread_queue_Enqueue_do_nothing_extra
+ );
+ _Thread_queue_Context_set_timeout_argument( &queue_context, NULL, true );
+
+ _CORE_message_queue_Acquire_critical(
+ &the_message_queue->message_queue,
+ &queue_context
+ );
+
+ status = _CORE_message_queue_Submit(
+ &the_message_queue->message_queue,
+ _Thread_Executing,
+ message,
+ message_size,
+ (CORE_message_queue_Submit_types) ( posix_piority * -1 ),
+ DO_WAIT,
+ &queue_context
+ );
+
+ return _Status_Get( status );
+}
+
+static rtems_status_code ReceiveMessage(
+ rtems_id id,
+ void *buffer,
+ size_t *size
+)
+{
+ return rtems_message_queue_receive(
+ id,
+ buffer,
+ size,
+ RTEMS_LOCAL | RTEMS_NO_WAIT,
+ RTEMS_NO_TIMEOUT
+ );
+}
+
+static rtems_status_code ReceiveOneMessages( Context *ctx )
+{
+ uint8_t message_buffer[ MAXIMUM_MESSAGE_SIZE ];
+ size_t message_size;
+
+ return ReceiveMessage(
+ ctx->message_queue_id,
+ &message_buffer,
+ &message_size
+ );
+}
+
+static void SendMessage( Context *ctx )
+{
+ uint8_t message[] = { 100, 101, 102 };
+ ctx->send_status = SubmitMessage(
+ ctx->message_queue_id,
+ message,
+ sizeof( message ),
+ MESSAGE_PRIORITY_LOW
+ );
+}
+
+static void WorkerTask( rtems_task_argument argument )
+{
+ Context *ctx = (Context *) argument;
+
+ while ( true ) {
+ ctx->is_worker_working = false;
+ ReceiveAnyEvents();
+ ctx->is_worker_working = true;
+ SendMessage( ctx );
+ T_assert_rsc_success( ctx->send_status );
+ }
+}
+
+static void WorkerSendMessage( Context *ctx )
+{
+ SendEvents( ctx->worker_id, EVENT_SEND );
+}
+
+static void ScoreMsgqUnitMsgq_Setup( ScoreMsgqUnitMsgq_Context *ctx )
+{
+ rtems_status_code status;
+ rtems_message_queue_config config = {
+ .name = rtems_build_name( 'M', 'S', 'G', 'Q' ),
+ .maximum_pending_messages = MAXIMUM_PENDING_MESSAGES,
+ .maximum_message_size = MAXIMUM_MESSAGE_SIZE,
+ .storage_area = ctx->storage_area,
+ .storage_size = sizeof( ctx->storage_area ),
+ .storage_free = NULL,
+ .attributes = RTEMS_DEFAULT_ATTRIBUTES
+ };
+
+ status = rtems_message_queue_construct(
+ &config,
+ &ctx->message_queue_id
+ );
+ T_rsc_success( status );
+
+ SetSelfPriority( PRIO_NORMAL );
+
+ ctx->worker_id = CreateTask( "WORK", PRIO_HIGH );
+ StartTask( ctx->worker_id, WorkerTask, ctx );
+}
+
+static void ScoreMsgqUnitMsgq_Setup_Wrap( void *arg )
+{
+ ScoreMsgqUnitMsgq_Context *ctx;
+
+ ctx = arg;
+ ScoreMsgqUnitMsgq_Setup( ctx );
+}
+
+static void ScoreMsgqUnitMsgq_Teardown( ScoreMsgqUnitMsgq_Context *ctx )
+{
+ DeleteTask( ctx->worker_id );
+ RestoreRunnerPriority();
+ T_rsc_success( rtems_message_queue_delete( ctx->message_queue_id ) );
+}
+
+static void ScoreMsgqUnitMsgq_Teardown_Wrap( void *arg )
+{
+ ScoreMsgqUnitMsgq_Context *ctx;
+
+ ctx = arg;
+ ScoreMsgqUnitMsgq_Teardown( ctx );
+}
+
+static T_fixture ScoreMsgqUnitMsgq_Fixture = {
+ .setup = ScoreMsgqUnitMsgq_Setup_Wrap,
+ .stop = NULL,
+ .teardown = ScoreMsgqUnitMsgq_Teardown_Wrap,
+ .scope = NULL,
+ .initial_context = &ScoreMsgqUnitMsgq_Instance
+};
+
+/**
+ * @brief Use _CORE_message_queue_Insert_message() to insert two messages into
+ * a message queue and use the POSIX message priority to define their order
+ * in the queue.
+ */
+static void ScoreMsgqUnitMsgq_Action_0( ScoreMsgqUnitMsgq_Context *ctx )
+{
+ rtems_status_code status_submit_low;
+ rtems_status_code status_submit_high;
+ rtems_status_code status_receive_low;
+ rtems_status_code status_receive_high;
+ uint8_t message_low[] = MESSAGE_CONTENT_LOW;
+ uint8_t message_high[] = MESSAGE_CONTENT_HIGH;
+ uint8_t message_buffer_low[ MAXIMUM_MESSAGE_SIZE ];
+ uint8_t message_buffer_high[ MAXIMUM_MESSAGE_SIZE ];
+ size_t message_size_low;
+ size_t message_size_high;
+
+ status_submit_low = SubmitMessage(
+ ctx->message_queue_id,
+ message_low,
+ sizeof( message_low ),
+ MESSAGE_PRIORITY_LOW
+ );
+
+ status_submit_high = SubmitMessage(
+ ctx->message_queue_id,
+ message_high,
+ sizeof( message_high ),
+ MESSAGE_PRIORITY_HIGH
+ );
+
+ status_receive_high = ReceiveMessage(
+ ctx->message_queue_id,
+ &message_buffer_high,
+ &message_size_high
+ );
+
+ status_receive_low = ReceiveMessage(
+ ctx->message_queue_id,
+ &message_buffer_low,
+ &message_size_low
+ );
+
+ /*
+ * Check that _CORE_message_queue_Submit() was executed successfully.
+ */
+ T_rsc_success( status_submit_low );
+ T_rsc_success( status_submit_high );
+
+ /*
+ * Check that the messages are in the right order in the message queue.
+ */
+ T_rsc_success( status_receive_high );
+ T_eq_sz( message_size_high, sizeof( message_high ) );
+ T_eq_mem( message_buffer_high, message_high, message_size_high );
+
+ T_rsc_success( status_receive_low );
+ T_eq_sz( message_size_low, sizeof( message_low ) );
+ T_eq_mem( message_buffer_low, message_low, message_size_low );
+}
+
+/**
+ * @brief Submit three messages into a message queue which can only store two
+ * and have the third submit() blocked till a seize() occurs.
+ */
+static void ScoreMsgqUnitMsgq_Action_1( ScoreMsgqUnitMsgq_Context *ctx )
+{
+ bool is_worker_blocked_after_third_send;
+ bool is_worker_blocked_after_first_receive;
+
+ WorkerSendMessage( ctx );
+ WorkerSendMessage( ctx );
+ WorkerSendMessage( ctx );
+ is_worker_blocked_after_third_send = ctx->is_worker_working;
+
+ T_rsc_success( ReceiveOneMessages( ctx ) );
+ is_worker_blocked_after_first_receive = ctx->is_worker_working;
+
+ T_rsc_success( ReceiveOneMessages( ctx ) );
+ T_rsc_success( ReceiveOneMessages( ctx ) );
+
+ /*
+ * Check that the third _CORE_message_queue_Submit() did actually block till
+ * there was room for the message in the message queue.
+ */
+ T_true( is_worker_blocked_after_third_send );
+ T_true( !is_worker_blocked_after_first_receive );
+}
+
+/**
+ * @brief Submit messages in the queue from within an ISR.
+ */
+static void ScoreMsgqUnitMsgq_Action_2( ScoreMsgqUnitMsgq_Context *ctx )
+{
+ rtems_status_code status_send_first_message;
+ rtems_status_code status_send_second_message;
+ rtems_status_code status_send_third_message;
+
+ CallWithinISR( ( void (*)(void*) ) SendMessage, ctx );
+ status_send_first_message = ctx->send_status;
+ CallWithinISR( ( void (*)(void*) ) SendMessage, ctx );
+ status_send_second_message = ctx->send_status;
+ CallWithinISR( ( void (*)(void*) ) SendMessage, ctx );
+ status_send_third_message = ctx->send_status;
+
+ T_rsc_success( ReceiveOneMessages( ctx ) );
+ T_rsc_success( ReceiveOneMessages( ctx ) );
+
+ /*
+ * Check that the first two messages were successfully send.
+ */
+ T_assert_rsc_success( status_send_first_message );
+ T_assert_rsc_success( status_send_second_message );
+
+ /*
+ * Check that trying to send the third message from ISR when the message
+ * queue was full was rejected.
+ */
+ T_rsc( status_send_third_message, STATUS_CLASSIC_INTERNAL_ERROR );
+}
+
+/**
+ * @fn void T_case_body_ScoreMsgqUnitMsgq( void )
+ */
+T_TEST_CASE_FIXTURE( ScoreMsgqUnitMsgq, &ScoreMsgqUnitMsgq_Fixture )
+{
+ ScoreMsgqUnitMsgq_Context *ctx;
+
+ ctx = T_fixture_context();
+
+ ScoreMsgqUnitMsgq_Action_0( ctx );
+ ScoreMsgqUnitMsgq_Action_1( ctx );
+ ScoreMsgqUnitMsgq_Action_2( ctx );
+}
+
+/** @} */
diff --git a/testsuites/unit/tc-score-rbtree.c b/testsuites/unit/tc-score-rbtree.c
index 36fff61b8f..ec286838d0 100644
--- a/testsuites/unit/tc-score-rbtree.c
+++ b/testsuites/unit/tc-score-rbtree.c
@@ -3,11 +3,11 @@
/**
* @file
*
- * @ingroup RTEMSTestCaseScoreRbtreeUnitRbtree
+ * @ingroup ScoreRbtreeUnitRbtree
*/
/*
- * Copyright (C) 2021 embedded brains GmbH (http://www.embedded-brains.de)
+ * Copyright (C) 2021 embedded brains GmbH & Co. KG
* Copyright (C) 2010 Gedare Bloom
*
* Redistribution and use in source and binary forms, with or without
@@ -59,9 +59,9 @@
#include <rtems/test.h>
/**
- * @defgroup RTEMSTestCaseScoreRbtreeUnitRbtree spec:/score/rbtree/unit/rbtree
+ * @defgroup ScoreRbtreeUnitRbtree spec:/score/rbtree/unit/rbtree
*
- * @ingroup RTEMSTestSuiteTestsuitesUnitNoClock0
+ * @ingroup TestsuitesUnitNoClock0
*
* @brief Unit tests for the red-black tree implementation.
*
diff --git a/testsuites/unit/ts-unit-no-clock-0.c b/testsuites/unit/ts-unit-no-clock-0.c
index 8fa8518d36..88e67f91bd 100644
--- a/testsuites/unit/ts-unit-no-clock-0.c
+++ b/testsuites/unit/ts-unit-no-clock-0.c
@@ -3,11 +3,11 @@
/**
* @file
*
- * @ingroup RTEMSTestSuiteTestsuitesUnitNoClock0
+ * @ingroup TestsuitesUnitNoClock0
*/
/*
- * Copyright (C) 2021 embedded brains GmbH (http://www.embedded-brains.de)
+ * Copyright (C) 2021 embedded brains GmbH & Co. KG
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
@@ -55,10 +55,9 @@
#include <rtems/test.h>
/**
- * @defgroup RTEMSTestSuiteTestsuitesUnitNoClock0 \
- * spec:/testsuites/unit-no-clock-0
+ * @defgroup TestsuitesUnitNoClock0 spec:/testsuites/unit-no-clock-0
*
- * @ingroup RTEMSTestSuites
+ * @ingroup RTEMSTestSuitesUnit
*
* @brief This general purpose unit test suite provides enough resources to run
* basic tests without a Clock Driver for all specified managers and
@@ -70,7 +69,7 @@
* @{
*/
-const char rtems_test_name[] = "UnitNoClock0";
+const char rtems_test_name[] = "TestsuitesUnitNoClock0";
#define CONFIGURE_MAXIMUM_PROCESSORS 4
diff --git a/testsuites/validation/bsps/tc-fatal-sparc-leon3-shutdown-halt.c b/testsuites/validation/bsps/tc-fatal-sparc-leon3-shutdown-halt.c
new file mode 100644
index 0000000000..0b0b5cf5b7
--- /dev/null
+++ b/testsuites/validation/bsps/tc-fatal-sparc-leon3-shutdown-halt.c
@@ -0,0 +1,142 @@
+/* SPDX-License-Identifier: BSD-2-Clause */
+
+/**
+ * @file
+ *
+ * @ingroup BspSparcLeon3ValFatalShutdownHalt
+ */
+
+/*
+ * Copyright (C) 2021, 2022 embedded brains GmbH & Co. KG
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ */
+
+/*
+ * This file is part of the RTEMS quality process and was automatically
+ * generated. If you find something that needs to be fixed or
+ * worded better please post a report or patch to an RTEMS mailing list
+ * or raise a bug report:
+ *
+ * https://www.rtems.org/bugs.html
+ *
+ * For information on updating and regenerating please refer to the How-To
+ * section in the Software Requirements Engineering chapter of the
+ * RTEMS Software Engineering manual. The manual is provided as a part of
+ * a release. For development sources please refer to the online
+ * documentation at:
+ *
+ * https://docs.rtems.org
+ */
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#include <rtems/sysinit.h>
+
+#include "tx-support.h"
+
+#include <rtems/test.h>
+
+/**
+ * @defgroup BspSparcLeon3ValFatalShutdownHalt \
+ * spec:/bsp/sparc/leon3/val/fatal-shutdown-halt
+ *
+ * @ingroup TestsuitesBspsFatalSparcLeon3Shutdown
+ *
+ * @brief Tests the leon3 BSP family shutdown procedure.
+ *
+ * This test case performs the following actions:
+ *
+ * - Check the effects of the leon3 BSP family shutdown procedure.
+ *
+ * - Check that no dynamic fatal error extension was invoked. This shows
+ * that the leon3 BSP family shutdown procedure called the wrapped
+ * _CPU_Fatal_halt() function of the test suite.
+ *
+ * @{
+ */
+
+static Atomic_Uint dynamic_fatal_extension_counter;
+
+static rtems_status_code status;
+
+static unsigned int Add( Atomic_Uint *a, unsigned int b )
+{
+ return _Atomic_Fetch_add_uint( a, b, ATOMIC_ORDER_RELAXED );
+}
+
+static void DynamicFatalHandler(
+ rtems_fatal_source source,
+ bool always_set_to_false,
+ rtems_fatal_code code
+)
+{
+ (void) source;
+ (void) code;
+ (void) always_set_to_false;
+ (void) Add( &dynamic_fatal_extension_counter, 1 );
+}
+
+static void InitBspSparcLeon3ValFatalShutdownHalt( void )
+{
+ rtems_extensions_table table = { .fatal = DynamicFatalHandler };
+ rtems_id id;
+
+ status = rtems_extension_create( OBJECT_NAME, &table, &id );
+}
+
+RTEMS_SYSINIT_ITEM(
+ InitBspSparcLeon3ValFatalShutdownHalt,
+ RTEMS_SYSINIT_DEVICE_DRIVERS,
+ RTEMS_SYSINIT_ORDER_MIDDLE
+);
+
+/**
+ * @brief Check the effects of the leon3 BSP family shutdown procedure.
+ */
+static void BspSparcLeon3ValFatalShutdownHalt_Action_0( void )
+{
+ uint32_t counter;
+
+ /*
+ * Check that no dynamic fatal error extension was invoked. This shows that
+ * the leon3 BSP family shutdown procedure called the wrapped
+ * _CPU_Fatal_halt() function of the test suite.
+ */
+ T_step_rsc_success( 0, status );
+ counter = Add( &dynamic_fatal_extension_counter, 0 );
+ T_step_eq_u32( 1, counter, 0 );
+}
+
+/**
+ * @fn void T_case_body_BspSparcLeon3ValFatalShutdownHalt( void )
+ */
+T_TEST_CASE( BspSparcLeon3ValFatalShutdownHalt )
+{
+ T_plan( 2 );
+
+ BspSparcLeon3ValFatalShutdownHalt_Action_0();
+}
+
+/** @} */
diff --git a/testsuites/validation/bsps/tc-fatal-sparc-leon3-shutdown-request.c b/testsuites/validation/bsps/tc-fatal-sparc-leon3-shutdown-request.c
new file mode 100644
index 0000000000..46bc44e7cb
--- /dev/null
+++ b/testsuites/validation/bsps/tc-fatal-sparc-leon3-shutdown-request.c
@@ -0,0 +1,179 @@
+/* SPDX-License-Identifier: BSD-2-Clause */
+
+/**
+ * @file
+ *
+ * @ingroup BspSparcLeon3ValFatalShutdownRequest
+ */
+
+/*
+ * Copyright (C) 2021, 2022 embedded brains GmbH & Co. KG
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ */
+
+/*
+ * This file is part of the RTEMS quality process and was automatically
+ * generated. If you find something that needs to be fixed or
+ * worded better please post a report or patch to an RTEMS mailing list
+ * or raise a bug report:
+ *
+ * https://www.rtems.org/bugs.html
+ *
+ * For information on updating and regenerating please refer to the How-To
+ * section in the Software Requirements Engineering chapter of the
+ * RTEMS Software Engineering manual. The manual is provided as a part of
+ * a release. For development sources please refer to the online
+ * documentation at:
+ *
+ * https://docs.rtems.org
+ */
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#include <bsp/leon3.h>
+#include <rtems/sysinit.h>
+#include <rtems/score/smpimpl.h>
+
+#include "tx-support.h"
+
+#include <rtems/test.h>
+
+/**
+ * @defgroup BspSparcLeon3ValFatalShutdownRequest \
+ * spec:/bsp/sparc/leon3/val/fatal-shutdown-request
+ *
+ * @ingroup TestsuitesBspsFatalSparcLeon3Shutdown
+ *
+ * @brief Tests the leon3 BSP family SMP-specific shutdown procedure.
+ *
+ * This test case performs the following actions:
+ *
+ * - Check the effects of the leon3 BSP family shutdown procedure.
+ *
+ * - Check that the second processor was not powered down during system
+ * initialization.
+ *
+ * - Wait until the second processor is powered down.
+ *
+ * - Check that the RTEMS_FATAL_SOURCE_SMP with SMP_FATAL_SHUTDOWN_RESPONSE
+ * fatal error occurred exactly once.
+ *
+ * - Check that the RTEMS_FATAL_SOURCE_SMP with SMP_FATAL_SHUTDOWN_RESPONSE
+ * fatal error occurred on the second processor.
+ *
+ * @{
+ */
+
+static uint32_t mpstat_during_sysinit;
+
+static Atomic_Uint shutdown_response_counter;
+
+static uint32_t shutdown_response_cpu_index = UINT32_MAX;
+
+static unsigned int Add( Atomic_Uint *a, unsigned int b )
+{
+ return _Atomic_Fetch_add_uint( a, b, ATOMIC_ORDER_RELAXED );
+}
+
+static void ShutdownFatalHandler(
+ rtems_fatal_source source,
+ rtems_fatal_code code,
+ void *arg
+)
+{
+ T_null( arg );
+
+ if (
+ source == RTEMS_FATAL_SOURCE_SMP &&
+ code == SMP_FATAL_SHUTDOWN_RESPONSE
+ ) {
+ (void) Add( &shutdown_response_counter, 1 );
+ shutdown_response_cpu_index = rtems_scheduler_get_processor();
+ }
+}
+
+static void InitBspSparcLeon3ValFatalShutdownRequest( void )
+{
+ irqamp *regs;
+
+ regs = LEON3_IrqCtrl_Regs;
+ mpstat_during_sysinit = grlib_load_32( &regs->mpstat );
+ SetFatalHandler( ShutdownFatalHandler, NULL );
+}
+
+RTEMS_SYSINIT_ITEM(
+ InitBspSparcLeon3ValFatalShutdownRequest,
+ RTEMS_SYSINIT_DEVICE_DRIVERS,
+ RTEMS_SYSINIT_ORDER_MIDDLE
+);
+
+/**
+ * @brief Check the effects of the leon3 BSP family shutdown procedure.
+ */
+static void BspSparcLeon3ValFatalShutdownRequest_Action_0( void )
+{
+ irqamp *regs;
+ uint32_t counter;
+
+ regs = LEON3_IrqCtrl_Regs;
+
+ /*
+ * Check that the second processor was not powered down during system
+ * initialization.
+ */
+ T_step_eq_u32( 0, mpstat_during_sysinit & 0x2, 0 );
+
+ /*
+ * Wait until the second processor is powered down.
+ */
+ while ( ( grlib_load_32( &regs->mpstat ) & 0x2 ) != 0x2U ) {
+ /* Wait */
+ }
+
+ /*
+ * Check that the RTEMS_FATAL_SOURCE_SMP with SMP_FATAL_SHUTDOWN_RESPONSE
+ * fatal error occurred exactly once.
+ */
+ counter = Add( &shutdown_response_counter, 0 );
+ T_step_eq_uint( 1, counter, 1 );
+
+ /*
+ * Check that the RTEMS_FATAL_SOURCE_SMP with SMP_FATAL_SHUTDOWN_RESPONSE
+ * fatal error occurred on the second processor.
+ */
+ T_step_eq_u32( 2, shutdown_response_cpu_index, 1 );
+}
+
+/**
+ * @fn void T_case_body_BspSparcLeon3ValFatalShutdownRequest( void )
+ */
+T_TEST_CASE( BspSparcLeon3ValFatalShutdownRequest )
+{
+ T_plan( 3 );
+
+ BspSparcLeon3ValFatalShutdownRequest_Action_0();
+}
+
+/** @} */
diff --git a/testsuites/validation/bsps/tc-sparc-gr712rc.c b/testsuites/validation/bsps/tc-sparc-gr712rc.c
new file mode 100644
index 0000000000..a16de3d6ed
--- /dev/null
+++ b/testsuites/validation/bsps/tc-sparc-gr712rc.c
@@ -0,0 +1,124 @@
+/* SPDX-License-Identifier: BSD-2-Clause */
+
+/**
+ * @file
+ *
+ * @ingroup BspSparcLeon3ValGr712rc
+ */
+
+/*
+ * Copyright (C) 2021 embedded brains GmbH & Co. KG
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ */
+
+/*
+ * This file is part of the RTEMS quality process and was automatically
+ * generated. If you find something that needs to be fixed or
+ * worded better please post a report or patch to an RTEMS mailing list
+ * or raise a bug report:
+ *
+ * https://www.rtems.org/bugs.html
+ *
+ * For information on updating and regenerating please refer to the How-To
+ * section in the Software Requirements Engineering chapter of the
+ * RTEMS Software Engineering manual. The manual is provided as a part of
+ * a release. For development sources please refer to the online
+ * documentation at:
+ *
+ * https://docs.rtems.org
+ */
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#include <bsp.h>
+
+#include "tx-support.h"
+
+#include <rtems/test.h>
+
+/**
+ * @defgroup BspSparcLeon3ValGr712rc spec:/bsp/sparc/leon3/val/gr712rc
+ *
+ * @ingroup TestsuitesBspsValidationBsp0
+ *
+ * @brief This test case collection provides validation test cases for the
+ * ``sparc/gr712rc`` BSP.
+ *
+ * This test case performs the following actions:
+ *
+ * - Validate the use of the ``-mfix-gr712rc`` compiler option.
+ *
+ * - Check that the compiler built-in define ``__FIX_LEON3FT_B2BST`` is
+ * defined.
+ *
+ * - Check that the compiler built-in define ``__FIX_LEON3FT_TN0018`` is
+ * defined.
+ *
+ * - Check that the ``SPARC_LEON3FT_B2BST_NOP`` define expands to a ``nop``
+ * instruction.
+ *
+ * @{
+ */
+
+/**
+ * @brief Validate the use of the ``-mfix-gr712rc`` compiler option.
+ */
+static void BspSparcLeon3ValGr712rc_Action_0( void )
+{
+ const char *s;
+
+ /*
+ * Check that the compiler built-in define ``__FIX_LEON3FT_B2BST`` is
+ * defined.
+ */
+ #if !defined(__FIX_LEON3FT_B2BST)
+ #error "__FIX_LEON3FT_B2BST is not defined"
+ #endif
+
+ /*
+ * Check that the compiler built-in define ``__FIX_LEON3FT_TN0018`` is
+ * defined.
+ */
+ #if !defined(__FIX_LEON3FT_TN0018)
+ #error "__FIX_LEON3FT_TN0018 is not defined"
+ #endif
+
+ /*
+ * Check that the ``SPARC_LEON3FT_B2BST_NOP`` define expands to a ``nop``
+ * instruction.
+ */
+ s = RTEMS_XSTRING( SPARC_LEON3FT_B2BST_NOP );
+ T_true( IsEqualIgnoreWhiteSpace( s, "nop" ) );
+}
+
+/**
+ * @fn void T_case_body_BspSparcLeon3ValGr712rc( void )
+ */
+T_TEST_CASE( BspSparcLeon3ValGr712rc )
+{
+ BspSparcLeon3ValGr712rc_Action_0();
+}
+
+/** @} */
diff --git a/testsuites/validation/bsps/tr-fatal-clock-xil-ttc-irq-install.c b/testsuites/validation/bsps/tr-fatal-clock-xil-ttc-irq-install.c
new file mode 100644
index 0000000000..731b454ee4
--- /dev/null
+++ b/testsuites/validation/bsps/tr-fatal-clock-xil-ttc-irq-install.c
@@ -0,0 +1,187 @@
+/* SPDX-License-Identifier: BSD-2-Clause */
+
+/**
+ * @file
+ *
+ * @ingroup DevClockXilTtcValFatalIrqInstall
+ */
+
+/*
+ * Copyright (C) 2024 embedded brains GmbH & Co. KG
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ */
+
+/*
+ * This file is part of the RTEMS quality process and was automatically
+ * generated. If you find something that needs to be fixed or
+ * worded better please post a report or patch to an RTEMS mailing list
+ * or raise a bug report:
+ *
+ * https://www.rtems.org/bugs.html
+ *
+ * For information on updating and regenerating please refer to the How-To
+ * section in the Software Requirements Engineering chapter of the
+ * RTEMS Software Engineering manual. The manual is provided as a part of
+ * a release. For development sources please refer to the online
+ * documentation at:
+ *
+ * https://docs.rtems.org
+ */
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#include <bsp.h>
+#include <rtems.h>
+#include <bsp/fatal.h>
+#include <rtems/sysinit.h>
+
+#include "tr-fatal-clock-xil-ttc-irq-install.h"
+
+#include <rtems/test.h>
+
+/**
+ * @defgroup DevClockXilTtcValFatalIrqInstall \
+ * spec:/dev/clock/xil-ttc/val/fatal-irq-install
+ *
+ * @ingroup TestsuitesBspsFatalClockXilTtcIrqInstall
+ *
+ * @brief Tests a fatal error.
+ *
+ * This test case performs the following actions:
+ *
+ * - The test action is carried out by the OccupyClockInterrupt() system
+ * initialization handler.
+ *
+ * - Check that the expected fatal source is present.
+ *
+ * - Check that the expected fatal code is present.
+ *
+ * @{
+ */
+
+/**
+ * @brief Test context for spec:/dev/clock/xil-ttc/val/fatal-irq-install test
+ * case.
+ */
+typedef struct {
+ /**
+ * @brief This member contains a copy of the corresponding
+ * DevClockXilTtcValFatalIrqInstall_Run() parameter.
+ */
+ rtems_fatal_source source;
+
+ /**
+ * @brief This member contains a copy of the corresponding
+ * DevClockXilTtcValFatalIrqInstall_Run() parameter.
+ */
+ rtems_fatal_code code;
+} DevClockXilTtcValFatalIrqInstall_Context;
+
+static DevClockXilTtcValFatalIrqInstall_Context
+ DevClockXilTtcValFatalIrqInstall_Instance;
+
+static void ClockInterrupt( void *arg )
+{
+ (void) arg;
+}
+
+static rtems_interrupt_entry interrupt_entry = RTEMS_INTERRUPT_ENTRY_INITIALIZER(
+ ClockInterrupt,
+ NULL,
+ "Clock"
+);
+
+static void OccupyClockInterrupt( void )
+{
+ (void) rtems_interrupt_entry_install(
+ XIL_CLOCK_TTC_IRQ,
+ RTEMS_INTERRUPT_UNIQUE,
+ &interrupt_entry
+ );
+}
+
+RTEMS_SYSINIT_ITEM(
+ OccupyClockInterrupt,
+ RTEMS_SYSINIT_DEVICE_DRIVERS,
+ RTEMS_SYSINIT_ORDER_FIRST
+);
+
+static T_fixture DevClockXilTtcValFatalIrqInstall_Fixture = {
+ .setup = NULL,
+ .stop = NULL,
+ .teardown = NULL,
+ .scope = NULL,
+ .initial_context = &DevClockXilTtcValFatalIrqInstall_Instance
+};
+
+/**
+ * @brief The test action is carried out by the OccupyClockInterrupt() system
+ * initialization handler.
+ */
+static void DevClockXilTtcValFatalIrqInstall_Action_0(
+ DevClockXilTtcValFatalIrqInstall_Context *ctx
+)
+{
+ /* Nothing to do */
+
+ /*
+ * Check that the expected fatal source is present.
+ */
+ T_step_eq_int( 0, ctx->source, RTEMS_FATAL_SOURCE_BSP );
+
+ /*
+ * Check that the expected fatal code is present.
+ */
+ T_step_eq_ulong(
+ 1,
+ ctx->code,
+ XIL_FATAL_TTC_IRQ_INSTALL
+ );
+}
+
+void DevClockXilTtcValFatalIrqInstall_Run(
+ rtems_fatal_source source,
+ rtems_fatal_code code
+)
+{
+ DevClockXilTtcValFatalIrqInstall_Context *ctx;
+
+ ctx = &DevClockXilTtcValFatalIrqInstall_Instance;
+ ctx->source = source;
+ ctx->code = code;
+
+ ctx = T_case_begin(
+ "DevClockXilTtcValFatalIrqInstall",
+ &DevClockXilTtcValFatalIrqInstall_Fixture
+ );
+
+ T_plan( 2 );
+
+ DevClockXilTtcValFatalIrqInstall_Action_0( ctx );
+
+ T_case_end();
+}
+
+/** @} */
diff --git a/testsuites/validation/bsps/tr-fatal-clock-xil-ttc-irq-install.h b/testsuites/validation/bsps/tr-fatal-clock-xil-ttc-irq-install.h
new file mode 100644
index 0000000000..74021233a0
--- /dev/null
+++ b/testsuites/validation/bsps/tr-fatal-clock-xil-ttc-irq-install.h
@@ -0,0 +1,84 @@
+/* SPDX-License-Identifier: BSD-2-Clause */
+
+/**
+ * @file
+ *
+ * @ingroup DevClockXilTtcValFatalIrqInstall
+ */
+
+/*
+ * Copyright (C) 2024 embedded brains GmbH & Co. KG
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ */
+
+/*
+ * This file is part of the RTEMS quality process and was automatically
+ * generated. If you find something that needs to be fixed or
+ * worded better please post a report or patch to an RTEMS mailing list
+ * or raise a bug report:
+ *
+ * https://www.rtems.org/bugs.html
+ *
+ * For information on updating and regenerating please refer to the How-To
+ * section in the Software Requirements Engineering chapter of the
+ * RTEMS Software Engineering manual. The manual is provided as a part of
+ * a release. For development sources please refer to the online
+ * documentation at:
+ *
+ * https://docs.rtems.org
+ */
+
+#ifndef _TR_FATAL_CLOCK_XIL_TTC_IRQ_INSTALL_H
+#define _TR_FATAL_CLOCK_XIL_TTC_IRQ_INSTALL_H
+
+#include <rtems.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/**
+ * @addtogroup DevClockXilTtcValFatalIrqInstall
+ *
+ * @{
+ */
+
+/**
+ * @brief Runs the parameterized test case.
+ *
+ * @param source is fatal source.
+ *
+ * @param code is fatal code.
+ */
+void DevClockXilTtcValFatalIrqInstall_Run(
+ rtems_fatal_source source,
+ rtems_fatal_code code
+);
+
+/** @} */
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* _TR_FATAL_CLOCK_XIL_TTC_IRQ_INSTALL_H */
diff --git a/testsuites/validation/bsps/tr-fatal-sparc-leon3-cache-snooping-disabled-boot.c b/testsuites/validation/bsps/tr-fatal-sparc-leon3-cache-snooping-disabled-boot.c
new file mode 100644
index 0000000000..748fd88e70
--- /dev/null
+++ b/testsuites/validation/bsps/tr-fatal-sparc-leon3-cache-snooping-disabled-boot.c
@@ -0,0 +1,175 @@
+/* SPDX-License-Identifier: BSD-2-Clause */
+
+/**
+ * @file
+ *
+ * @ingroup BspSparcLeon3ValFatalCacheSnoopingDisabledBoot
+ */
+
+/*
+ * Copyright (C) 2021 embedded brains GmbH & Co. KG
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ */
+
+/*
+ * This file is part of the RTEMS quality process and was automatically
+ * generated. If you find something that needs to be fixed or
+ * worded better please post a report or patch to an RTEMS mailing list
+ * or raise a bug report:
+ *
+ * https://www.rtems.org/bugs.html
+ *
+ * For information on updating and regenerating please refer to the How-To
+ * section in the Software Requirements Engineering chapter of the
+ * RTEMS Software Engineering manual. The manual is provided as a part of
+ * a release. For development sources please refer to the online
+ * documentation at:
+ *
+ * https://docs.rtems.org
+ */
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#include <bsp/fatal.h>
+#include <bsp/leon3.h>
+#include <rtems/sysinit.h>
+
+#include "tr-fatal-sparc-leon3-cache-snooping-disabled-boot.h"
+
+#include <rtems/test.h>
+
+/**
+ * @defgroup BspSparcLeon3ValFatalCacheSnoopingDisabledBoot \
+ * spec:/bsp/sparc/leon3/val/fatal-cache-snooping-disabled-boot
+ *
+ * @ingroup TestsuitesBspsFatalSparcLeon3CacheSnoopingDisabledBoot
+ *
+ * @brief Tests a fatal error.
+ *
+ * This test case performs the following actions:
+ *
+ * - The test action is carried out by the DisableCacheSnooping() system
+ * initialization handler.
+ *
+ * - Check that the expected fatal source is present.
+ *
+ * - Check that the expected fatal code is present.
+ *
+ * @{
+ */
+
+/**
+ * @brief Test context for
+ * spec:/bsp/sparc/leon3/val/fatal-cache-snooping-disabled-boot test case.
+ */
+typedef struct {
+ /**
+ * @brief This member contains a copy of the corresponding
+ * BspSparcLeon3ValFatalCacheSnoopingDisabledBoot_Run() parameter.
+ */
+ rtems_fatal_source source;
+
+ /**
+ * @brief This member contains a copy of the corresponding
+ * BspSparcLeon3ValFatalCacheSnoopingDisabledBoot_Run() parameter.
+ */
+ rtems_fatal_code code;
+} BspSparcLeon3ValFatalCacheSnoopingDisabledBoot_Context;
+
+static BspSparcLeon3ValFatalCacheSnoopingDisabledBoot_Context
+ BspSparcLeon3ValFatalCacheSnoopingDisabledBoot_Instance;
+
+static void DisableCacheSnooping( void )
+{
+ uint32_t control;
+
+ control = leon3_get_cache_control_register();
+ control &= ~LEON3_REG_CACHE_CTRL_DS;
+ leon3_set_cache_control_register( control );
+}
+
+RTEMS_SYSINIT_ITEM(
+ DisableCacheSnooping,
+ RTEMS_SYSINIT_BSP_EARLY,
+ RTEMS_SYSINIT_ORDER_FIRST
+);
+
+static T_fixture BspSparcLeon3ValFatalCacheSnoopingDisabledBoot_Fixture = {
+ .setup = NULL,
+ .stop = NULL,
+ .teardown = NULL,
+ .scope = NULL,
+ .initial_context = &BspSparcLeon3ValFatalCacheSnoopingDisabledBoot_Instance
+};
+
+/**
+ * @brief The test action is carried out by the DisableCacheSnooping() system
+ * initialization handler.
+ */
+static void BspSparcLeon3ValFatalCacheSnoopingDisabledBoot_Action_0(
+ BspSparcLeon3ValFatalCacheSnoopingDisabledBoot_Context *ctx
+)
+{
+ /* Nothing to do */
+
+ /*
+ * Check that the expected fatal source is present.
+ */
+ T_step_eq_int( 0, ctx->source, RTEMS_FATAL_SOURCE_BSP );
+
+ /*
+ * Check that the expected fatal code is present.
+ */
+ T_step_eq_ulong(
+ 1,
+ ctx->code,
+ LEON3_FATAL_INVALID_CACHE_CONFIG_BOOT_PROCESSOR
+ );
+}
+
+void BspSparcLeon3ValFatalCacheSnoopingDisabledBoot_Run(
+ rtems_fatal_source source,
+ rtems_fatal_code code
+)
+{
+ BspSparcLeon3ValFatalCacheSnoopingDisabledBoot_Context *ctx;
+
+ ctx = &BspSparcLeon3ValFatalCacheSnoopingDisabledBoot_Instance;
+ ctx->source = source;
+ ctx->code = code;
+
+ ctx = T_case_begin(
+ "BspSparcLeon3ValFatalCacheSnoopingDisabledBoot",
+ &BspSparcLeon3ValFatalCacheSnoopingDisabledBoot_Fixture
+ );
+
+ T_plan( 2 );
+
+ BspSparcLeon3ValFatalCacheSnoopingDisabledBoot_Action_0( ctx );
+
+ T_case_end();
+}
+
+/** @} */
diff --git a/testsuites/validation/bsps/tr-fatal-sparc-leon3-cache-snooping-disabled-boot.h b/testsuites/validation/bsps/tr-fatal-sparc-leon3-cache-snooping-disabled-boot.h
new file mode 100644
index 0000000000..e375e6baac
--- /dev/null
+++ b/testsuites/validation/bsps/tr-fatal-sparc-leon3-cache-snooping-disabled-boot.h
@@ -0,0 +1,84 @@
+/* SPDX-License-Identifier: BSD-2-Clause */
+
+/**
+ * @file
+ *
+ * @ingroup BspSparcLeon3ValFatalCacheSnoopingDisabledBoot
+ */
+
+/*
+ * Copyright (C) 2021 embedded brains GmbH & Co. KG
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ */
+
+/*
+ * This file is part of the RTEMS quality process and was automatically
+ * generated. If you find something that needs to be fixed or
+ * worded better please post a report or patch to an RTEMS mailing list
+ * or raise a bug report:
+ *
+ * https://www.rtems.org/bugs.html
+ *
+ * For information on updating and regenerating please refer to the How-To
+ * section in the Software Requirements Engineering chapter of the
+ * RTEMS Software Engineering manual. The manual is provided as a part of
+ * a release. For development sources please refer to the online
+ * documentation at:
+ *
+ * https://docs.rtems.org
+ */
+
+#ifndef _TR_FATAL_SPARC_LEON3_CACHE_SNOOPING_DISABLED_BOOT_H
+#define _TR_FATAL_SPARC_LEON3_CACHE_SNOOPING_DISABLED_BOOT_H
+
+#include <rtems.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/**
+ * @addtogroup BspSparcLeon3ValFatalCacheSnoopingDisabledBoot
+ *
+ * @{
+ */
+
+/**
+ * @brief Runs the parameterized test case.
+ *
+ * @param source is fatal source.
+ *
+ * @param code is fatal code.
+ */
+void BspSparcLeon3ValFatalCacheSnoopingDisabledBoot_Run(
+ rtems_fatal_source source,
+ rtems_fatal_code code
+);
+
+/** @} */
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* _TR_FATAL_SPARC_LEON3_CACHE_SNOOPING_DISABLED_BOOT_H */
diff --git a/testsuites/validation/bsps/tr-fatal-sparc-leon3-cache-snooping-disabled-secondary.c b/testsuites/validation/bsps/tr-fatal-sparc-leon3-cache-snooping-disabled-secondary.c
new file mode 100644
index 0000000000..4d90abf42d
--- /dev/null
+++ b/testsuites/validation/bsps/tr-fatal-sparc-leon3-cache-snooping-disabled-secondary.c
@@ -0,0 +1,176 @@
+/* SPDX-License-Identifier: BSD-2-Clause */
+
+/**
+ * @file
+ *
+ * @ingroup BspSparcLeon3ValFatalCacheSnoopingDisabledSecondary
+ */
+
+/*
+ * Copyright (C) 2021 embedded brains GmbH & Co. KG
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ */
+
+/*
+ * This file is part of the RTEMS quality process and was automatically
+ * generated. If you find something that needs to be fixed or
+ * worded better please post a report or patch to an RTEMS mailing list
+ * or raise a bug report:
+ *
+ * https://www.rtems.org/bugs.html
+ *
+ * For information on updating and regenerating please refer to the How-To
+ * section in the Software Requirements Engineering chapter of the
+ * RTEMS Software Engineering manual. The manual is provided as a part of
+ * a release. For development sources please refer to the online
+ * documentation at:
+ *
+ * https://docs.rtems.org
+ */
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#include <bsp/bootcard.h>
+#include <bsp/fatal.h>
+#include <bsp/leon3.h>
+
+#include "tr-fatal-sparc-leon3-cache-snooping-disabled-secondary.h"
+
+#include <rtems/test.h>
+
+/**
+ * @defgroup BspSparcLeon3ValFatalCacheSnoopingDisabledSecondary \
+ * spec:/bsp/sparc/leon3/val/fatal-cache-snooping-disabled-secondary
+ *
+ * @ingroup TestsuitesBspsFatalSparcLeon3CacheSnoopingDisabledSecondary
+ *
+ * @brief Tests a fatal error.
+ *
+ * This test case performs the following actions:
+ *
+ * - The test action is carried out by the wrapped
+ * bsp_start_on_secondary_processor() function.
+ *
+ * - Check that the expected fatal source is present.
+ *
+ * - Check that the expected fatal code is present.
+ *
+ * @{
+ */
+
+/**
+ * @brief Test context for
+ * spec:/bsp/sparc/leon3/val/fatal-cache-snooping-disabled-secondary test
+ * case.
+ */
+typedef struct {
+ /**
+ * @brief This member contains a copy of the corresponding
+ * BspSparcLeon3ValFatalCacheSnoopingDisabledSecondary_Run() parameter.
+ */
+ rtems_fatal_source source;
+
+ /**
+ * @brief This member contains a copy of the corresponding
+ * BspSparcLeon3ValFatalCacheSnoopingDisabledSecondary_Run() parameter.
+ */
+ rtems_fatal_code code;
+} BspSparcLeon3ValFatalCacheSnoopingDisabledSecondary_Context;
+
+static BspSparcLeon3ValFatalCacheSnoopingDisabledSecondary_Context
+ BspSparcLeon3ValFatalCacheSnoopingDisabledSecondary_Instance;
+
+void __real_bsp_start_on_secondary_processor( struct Per_CPU_Control *cpu_self );
+
+void __wrap_bsp_start_on_secondary_processor( struct Per_CPU_Control *cpu_self );
+
+void __wrap_bsp_start_on_secondary_processor( struct Per_CPU_Control *cpu_self )
+{
+ uint32_t control;
+
+ control = leon3_get_cache_control_register();
+ control &= ~LEON3_REG_CACHE_CTRL_DS;
+ leon3_set_cache_control_register( control );
+
+ __real_bsp_start_on_secondary_processor( cpu_self );
+}
+
+static T_fixture BspSparcLeon3ValFatalCacheSnoopingDisabledSecondary_Fixture = {
+ .setup = NULL,
+ .stop = NULL,
+ .teardown = NULL,
+ .scope = NULL,
+ .initial_context = &BspSparcLeon3ValFatalCacheSnoopingDisabledSecondary_Instance
+};
+
+/**
+ * @brief The test action is carried out by the wrapped
+ * bsp_start_on_secondary_processor() function.
+ */
+static void BspSparcLeon3ValFatalCacheSnoopingDisabledSecondary_Action_0(
+ BspSparcLeon3ValFatalCacheSnoopingDisabledSecondary_Context *ctx
+)
+{
+ /* Nothing to do */
+
+ /*
+ * Check that the expected fatal source is present.
+ */
+ T_step_eq_int( 0, ctx->source, RTEMS_FATAL_SOURCE_BSP );
+
+ /*
+ * Check that the expected fatal code is present.
+ */
+ T_step_eq_ulong(
+ 1,
+ ctx->code,
+ LEON3_FATAL_INVALID_CACHE_CONFIG_SECONDARY_PROCESSOR
+ );
+}
+
+void BspSparcLeon3ValFatalCacheSnoopingDisabledSecondary_Run(
+ rtems_fatal_source source,
+ rtems_fatal_code code
+)
+{
+ BspSparcLeon3ValFatalCacheSnoopingDisabledSecondary_Context *ctx;
+
+ ctx = &BspSparcLeon3ValFatalCacheSnoopingDisabledSecondary_Instance;
+ ctx->source = source;
+ ctx->code = code;
+
+ ctx = T_case_begin(
+ "BspSparcLeon3ValFatalCacheSnoopingDisabledSecondary",
+ &BspSparcLeon3ValFatalCacheSnoopingDisabledSecondary_Fixture
+ );
+
+ T_plan( 2 );
+
+ BspSparcLeon3ValFatalCacheSnoopingDisabledSecondary_Action_0( ctx );
+
+ T_case_end();
+}
+
+/** @} */
diff --git a/testsuites/validation/bsps/tr-fatal-sparc-leon3-cache-snooping-disabled-secondary.h b/testsuites/validation/bsps/tr-fatal-sparc-leon3-cache-snooping-disabled-secondary.h
new file mode 100644
index 0000000000..0782942222
--- /dev/null
+++ b/testsuites/validation/bsps/tr-fatal-sparc-leon3-cache-snooping-disabled-secondary.h
@@ -0,0 +1,84 @@
+/* SPDX-License-Identifier: BSD-2-Clause */
+
+/**
+ * @file
+ *
+ * @ingroup BspSparcLeon3ValFatalCacheSnoopingDisabledSecondary
+ */
+
+/*
+ * Copyright (C) 2021 embedded brains GmbH & Co. KG
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ */
+
+/*
+ * This file is part of the RTEMS quality process and was automatically
+ * generated. If you find something that needs to be fixed or
+ * worded better please post a report or patch to an RTEMS mailing list
+ * or raise a bug report:
+ *
+ * https://www.rtems.org/bugs.html
+ *
+ * For information on updating and regenerating please refer to the How-To
+ * section in the Software Requirements Engineering chapter of the
+ * RTEMS Software Engineering manual. The manual is provided as a part of
+ * a release. For development sources please refer to the online
+ * documentation at:
+ *
+ * https://docs.rtems.org
+ */
+
+#ifndef _TR_FATAL_SPARC_LEON3_CACHE_SNOOPING_DISABLED_SECONDARY_H
+#define _TR_FATAL_SPARC_LEON3_CACHE_SNOOPING_DISABLED_SECONDARY_H
+
+#include <rtems.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/**
+ * @addtogroup BspSparcLeon3ValFatalCacheSnoopingDisabledSecondary
+ *
+ * @{
+ */
+
+/**
+ * @brief Runs the parameterized test case.
+ *
+ * @param source is fatal source.
+ *
+ * @param code is fatal code.
+ */
+void BspSparcLeon3ValFatalCacheSnoopingDisabledSecondary_Run(
+ rtems_fatal_source source,
+ rtems_fatal_code code
+);
+
+/** @} */
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* _TR_FATAL_SPARC_LEON3_CACHE_SNOOPING_DISABLED_SECONDARY_H */
diff --git a/testsuites/validation/bsps/tr-fatal-sparc-leon3-clock-initialization.c b/testsuites/validation/bsps/tr-fatal-sparc-leon3-clock-initialization.c
new file mode 100644
index 0000000000..5cd81b736c
--- /dev/null
+++ b/testsuites/validation/bsps/tr-fatal-sparc-leon3-clock-initialization.c
@@ -0,0 +1,190 @@
+/* SPDX-License-Identifier: BSD-2-Clause */
+
+/**
+ * @file
+ *
+ * @ingroup BspSparcLeon3ValFatalClockInitialization
+ */
+
+/*
+ * Copyright (C) 2021 embedded brains GmbH & Co. KG
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ */
+
+/*
+ * This file is part of the RTEMS quality process and was automatically
+ * generated. If you find something that needs to be fixed or
+ * worded better please post a report or patch to an RTEMS mailing list
+ * or raise a bug report:
+ *
+ * https://www.rtems.org/bugs.html
+ *
+ * For information on updating and regenerating please refer to the How-To
+ * section in the Software Requirements Engineering chapter of the
+ * RTEMS Software Engineering manual. The manual is provided as a part of
+ * a release. For development sources please refer to the online
+ * documentation at:
+ *
+ * https://docs.rtems.org
+ */
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#include <bsp/fatal.h>
+#include <bsp/leon3.h>
+#include <rtems/irq-extension.h>
+#include <rtems/sysinit.h>
+
+#include "tr-fatal-sparc-leon3-clock-initialization.h"
+
+#include <rtems/test.h>
+
+/**
+ * @defgroup BspSparcLeon3ValFatalClockInitialization \
+ * spec:/bsp/sparc/leon3/val/fatal-clock-initialization
+ *
+ * @ingroup TestsuitesBspsFatalSparcLeon3ClockInitialization
+ *
+ * @brief Tests a fatal error.
+ *
+ * This test case performs the following actions:
+ *
+ * - The test action is carried out by the OccupyClockInterrupt() system
+ * initialization handler.
+ *
+ * - Check that the expected fatal source is present.
+ *
+ * - Check that the expected fatal code is present.
+ *
+ * @{
+ */
+
+/**
+ * @brief Test context for spec:/bsp/sparc/leon3/val/fatal-clock-initialization
+ * test case.
+ */
+typedef struct {
+ /**
+ * @brief This member contains a copy of the corresponding
+ * BspSparcLeon3ValFatalClockInitialization_Run() parameter.
+ */
+ rtems_fatal_source source;
+
+ /**
+ * @brief This member contains a copy of the corresponding
+ * BspSparcLeon3ValFatalClockInitialization_Run() parameter.
+ */
+ rtems_fatal_code code;
+} BspSparcLeon3ValFatalClockInitialization_Context;
+
+static BspSparcLeon3ValFatalClockInitialization_Context
+ BspSparcLeon3ValFatalClockInitialization_Instance;
+
+static void ClockInterrupt( void *arg )
+{
+ (void) arg;
+}
+
+static rtems_interrupt_entry interrupt_entry = RTEMS_INTERRUPT_ENTRY_INITIALIZER(
+ ClockInterrupt,
+ NULL,
+ "Clock"
+);
+
+static void OccupyClockInterrupt( void )
+{
+ rtems_vector_number vector;
+
+ vector = GPTIMER_CONFIG_IRQ_GET( grlib_load_32( &LEON3_Timer_Regs->config ) );
+ (void) rtems_interrupt_entry_install(
+ vector,
+ RTEMS_INTERRUPT_UNIQUE,
+ &interrupt_entry
+ );
+}
+
+RTEMS_SYSINIT_ITEM(
+ OccupyClockInterrupt,
+ RTEMS_SYSINIT_DEVICE_DRIVERS,
+ RTEMS_SYSINIT_ORDER_FIRST
+);
+
+static T_fixture BspSparcLeon3ValFatalClockInitialization_Fixture = {
+ .setup = NULL,
+ .stop = NULL,
+ .teardown = NULL,
+ .scope = NULL,
+ .initial_context = &BspSparcLeon3ValFatalClockInitialization_Instance
+};
+
+/**
+ * @brief The test action is carried out by the OccupyClockInterrupt() system
+ * initialization handler.
+ */
+static void BspSparcLeon3ValFatalClockInitialization_Action_0(
+ BspSparcLeon3ValFatalClockInitialization_Context *ctx
+)
+{
+ /* Nothing to do */
+
+ /*
+ * Check that the expected fatal source is present.
+ */
+ T_step_eq_int( 0, ctx->source, RTEMS_FATAL_SOURCE_BSP );
+
+ /*
+ * Check that the expected fatal code is present.
+ */
+ T_step_eq_ulong(
+ 1,
+ ctx->code,
+ LEON3_FATAL_CLOCK_INITIALIZATION
+ );
+}
+
+void BspSparcLeon3ValFatalClockInitialization_Run(
+ rtems_fatal_source source,
+ rtems_fatal_code code
+)
+{
+ BspSparcLeon3ValFatalClockInitialization_Context *ctx;
+
+ ctx = &BspSparcLeon3ValFatalClockInitialization_Instance;
+ ctx->source = source;
+ ctx->code = code;
+
+ ctx = T_case_begin(
+ "BspSparcLeon3ValFatalClockInitialization",
+ &BspSparcLeon3ValFatalClockInitialization_Fixture
+ );
+
+ T_plan( 2 );
+
+ BspSparcLeon3ValFatalClockInitialization_Action_0( ctx );
+
+ T_case_end();
+}
+
+/** @} */
diff --git a/testsuites/validation/bsps/tr-fatal-sparc-leon3-clock-initialization.h b/testsuites/validation/bsps/tr-fatal-sparc-leon3-clock-initialization.h
new file mode 100644
index 0000000000..6997b3f22c
--- /dev/null
+++ b/testsuites/validation/bsps/tr-fatal-sparc-leon3-clock-initialization.h
@@ -0,0 +1,84 @@
+/* SPDX-License-Identifier: BSD-2-Clause */
+
+/**
+ * @file
+ *
+ * @ingroup BspSparcLeon3ValFatalClockInitialization
+ */
+
+/*
+ * Copyright (C) 2021 embedded brains GmbH & Co. KG
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ */
+
+/*
+ * This file is part of the RTEMS quality process and was automatically
+ * generated. If you find something that needs to be fixed or
+ * worded better please post a report or patch to an RTEMS mailing list
+ * or raise a bug report:
+ *
+ * https://www.rtems.org/bugs.html
+ *
+ * For information on updating and regenerating please refer to the How-To
+ * section in the Software Requirements Engineering chapter of the
+ * RTEMS Software Engineering manual. The manual is provided as a part of
+ * a release. For development sources please refer to the online
+ * documentation at:
+ *
+ * https://docs.rtems.org
+ */
+
+#ifndef _TR_FATAL_SPARC_LEON3_CLOCK_INITIALIZATION_H
+#define _TR_FATAL_SPARC_LEON3_CLOCK_INITIALIZATION_H
+
+#include <rtems.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/**
+ * @addtogroup BspSparcLeon3ValFatalClockInitialization
+ *
+ * @{
+ */
+
+/**
+ * @brief Runs the parameterized test case.
+ *
+ * @param source is fatal source.
+ *
+ * @param code is fatal code.
+ */
+void BspSparcLeon3ValFatalClockInitialization_Run(
+ rtems_fatal_source source,
+ rtems_fatal_code code
+);
+
+/** @} */
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* _TR_FATAL_SPARC_LEON3_CLOCK_INITIALIZATION_H */
diff --git a/testsuites/validation/bsps/ts-fatal-clock-xil-ttc-irq-install.c b/testsuites/validation/bsps/ts-fatal-clock-xil-ttc-irq-install.c
new file mode 100644
index 0000000000..e5c1062348
--- /dev/null
+++ b/testsuites/validation/bsps/ts-fatal-clock-xil-ttc-irq-install.c
@@ -0,0 +1,79 @@
+/* SPDX-License-Identifier: BSD-2-Clause */
+
+/**
+ * @file
+ *
+ * @ingroup TestsuitesBspsFatalClockXilTtcIrqInstall
+ */
+
+/*
+ * Copyright (C) 2024 embedded brains GmbH & Co. KG
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ */
+
+/*
+ * This file is part of the RTEMS quality process and was automatically
+ * generated. If you find something that needs to be fixed or
+ * worded better please post a report or patch to an RTEMS mailing list
+ * or raise a bug report:
+ *
+ * https://www.rtems.org/bugs.html
+ *
+ * For information on updating and regenerating please refer to the How-To
+ * section in the Software Requirements Engineering chapter of the
+ * RTEMS Software Engineering manual. The manual is provided as a part of
+ * a release. For development sources please refer to the online
+ * documentation at:
+ *
+ * https://docs.rtems.org
+ */
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#include "tr-fatal-clock-xil-ttc-irq-install.h"
+
+#include <rtems/test.h>
+
+/**
+ * @defgroup TestsuitesBspsFatalClockXilTtcIrqInstall \
+ * spec:/testsuites/bsps/fatal-clock-xil-ttc-irq-install
+ *
+ * @ingroup RTEMSTestSuitesValidation
+ *
+ * @brief This validation test suite contains a test case which triggers a
+ * fatal error during system initialization.
+ *
+ * @{
+ */
+
+const char rtems_test_name[] = "TestsuitesBspsFatalClockXilTtcIrqInstall";
+
+#define FATAL_SYSINIT_RUN DevClockXilTtcValFatalIrqInstall_Run
+
+#define CONFIGURE_APPLICATION_NEEDS_CLOCK_DRIVER
+
+#include "ts-fatal-sysinit.h"
+
+/** @} */
diff --git a/testsuites/validation/bsps/ts-fatal-sparc-leon3-cache-snooping-disabled-boot.c b/testsuites/validation/bsps/ts-fatal-sparc-leon3-cache-snooping-disabled-boot.c
new file mode 100644
index 0000000000..53e18b5b0b
--- /dev/null
+++ b/testsuites/validation/bsps/ts-fatal-sparc-leon3-cache-snooping-disabled-boot.c
@@ -0,0 +1,79 @@
+/* SPDX-License-Identifier: BSD-2-Clause */
+
+/**
+ * @file
+ *
+ * @ingroup TestsuitesBspsFatalSparcLeon3CacheSnoopingDisabledBoot
+ */
+
+/*
+ * Copyright (C) 2021 embedded brains GmbH & Co. KG
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ */
+
+/*
+ * This file is part of the RTEMS quality process and was automatically
+ * generated. If you find something that needs to be fixed or
+ * worded better please post a report or patch to an RTEMS mailing list
+ * or raise a bug report:
+ *
+ * https://www.rtems.org/bugs.html
+ *
+ * For information on updating and regenerating please refer to the How-To
+ * section in the Software Requirements Engineering chapter of the
+ * RTEMS Software Engineering manual. The manual is provided as a part of
+ * a release. For development sources please refer to the online
+ * documentation at:
+ *
+ * https://docs.rtems.org
+ */
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#include "tr-fatal-sparc-leon3-cache-snooping-disabled-boot.h"
+
+#include <rtems/test.h>
+
+/**
+ * @defgroup TestsuitesBspsFatalSparcLeon3CacheSnoopingDisabledBoot \
+ * spec:/testsuites/bsps/fatal-sparc-leon3-cache-snooping-disabled-boot
+ *
+ * @ingroup RTEMSTestSuitesValidation
+ *
+ * @brief This validation test suite contains a test case which triggers a
+ * fatal error during system initialization.
+ *
+ * @{
+ */
+
+const char rtems_test_name[] = "TestsuitesBspsFatalSparcLeon3CacheSnoopingDisabledBoot";
+
+#define FATAL_SYSINIT_RUN BspSparcLeon3ValFatalCacheSnoopingDisabledBoot_Run
+
+#define CONFIGURE_APPLICATION_DOES_NOT_NEED_CLOCK_DRIVER
+
+#include "ts-fatal-sysinit.h"
+
+/** @} */
diff --git a/testsuites/validation/ts-validation-smp-only-1.c b/testsuites/validation/bsps/ts-fatal-sparc-leon3-cache-snooping-disabled-secondary.c
index a1f9eeb413..3b8829dcf9 100644
--- a/testsuites/validation/ts-validation-smp-only-1.c
+++ b/testsuites/validation/bsps/ts-fatal-sparc-leon3-cache-snooping-disabled-secondary.c
@@ -3,11 +3,11 @@
/**
* @file
*
- * @ingroup RTEMSTestSuiteTestsuitesValidationSmpOnly1
+ * @ingroup TestsuitesBspsFatalSparcLeon3CacheSnoopingDisabledSecondary
*/
/*
- * Copyright (C) 2021 embedded brains GmbH (http://www.embedded-brains.de)
+ * Copyright (C) 2021 embedded brains GmbH & Co. KG
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
@@ -52,43 +52,31 @@
#include "config.h"
#endif
-#include "ts-config.h"
+#include "tr-fatal-sparc-leon3-cache-snooping-disabled-secondary.h"
#include <rtems/test.h>
/**
- * @defgroup RTEMSTestSuiteTestsuitesValidationSmpOnly1 \
- * spec:/testsuites/validation-smp-only-1
+ * @defgroup TestsuitesBspsFatalSparcLeon3CacheSnoopingDisabledSecondary \
+ * spec:/testsuites/bsps/fatal-sparc-leon3-cache-snooping-disabled-secondary
*
- * @ingroup RTEMSTestSuites
+ * @ingroup RTEMSTestSuitesValidation
*
- * @brief This SMP-only test suite validates the clustered scheduler
- * configuration through an application configuration with a processor
- * maximum of two, however, only the first processor has a scheduler
- * assigned.
+ * @brief This validation test suite contains a test case which triggers a
+ * fatal error during system initialization.
*
* @{
*/
-const char rtems_test_name[] = "ValidationSMPOnly1";
+const char rtems_test_name[] = "TestsuitesBspsFatalSparcLeon3CacheSnoopingDisabledSecondary";
-#define CONFIGURE_MAXIMUM_PROCESSORS 2
-
-#include <rtems/score/scheduleredfsmp.h>
-
-#define CONFIGURE_SCHEDULER_EDF_SMP
+#define FATAL_SYSINIT_RUN \
+ BspSparcLeon3ValFatalCacheSnoopingDisabledSecondary_Run
-#include <rtems/scheduler.h>
+#define CONFIGURE_APPLICATION_DOES_NOT_NEED_CLOCK_DRIVER
-RTEMS_SCHEDULER_EDF_SMP( a );
-
-#define CONFIGURE_SCHEDULER_TABLE_ENTRIES \
- RTEMS_SCHEDULER_TABLE_EDF_SMP( a, TEST_SCHEDULER_A_NAME )
-
-#define CONFIGURE_SCHEDULER_ASSIGNMENTS \
- RTEMS_SCHEDULER_ASSIGN( 0, RTEMS_SCHEDULER_ASSIGN_PROCESSOR_MANDATORY ), \
- RTEMS_SCHEDULER_ASSIGN_NO_SCHEDULER
+#define CONFIGURE_MAXIMUM_PROCESSORS 2
-#include "ts-default.h"
+#include "ts-fatal-sysinit.h"
/** @} */
diff --git a/testsuites/validation/bsps/ts-fatal-sparc-leon3-clock-initialization.c b/testsuites/validation/bsps/ts-fatal-sparc-leon3-clock-initialization.c
new file mode 100644
index 0000000000..b75223537f
--- /dev/null
+++ b/testsuites/validation/bsps/ts-fatal-sparc-leon3-clock-initialization.c
@@ -0,0 +1,79 @@
+/* SPDX-License-Identifier: BSD-2-Clause */
+
+/**
+ * @file
+ *
+ * @ingroup TestsuitesBspsFatalSparcLeon3ClockInitialization
+ */
+
+/*
+ * Copyright (C) 2021 embedded brains GmbH & Co. KG
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ */
+
+/*
+ * This file is part of the RTEMS quality process and was automatically
+ * generated. If you find something that needs to be fixed or
+ * worded better please post a report or patch to an RTEMS mailing list
+ * or raise a bug report:
+ *
+ * https://www.rtems.org/bugs.html
+ *
+ * For information on updating and regenerating please refer to the How-To
+ * section in the Software Requirements Engineering chapter of the
+ * RTEMS Software Engineering manual. The manual is provided as a part of
+ * a release. For development sources please refer to the online
+ * documentation at:
+ *
+ * https://docs.rtems.org
+ */
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#include "tr-fatal-sparc-leon3-clock-initialization.h"
+
+#include <rtems/test.h>
+
+/**
+ * @defgroup TestsuitesBspsFatalSparcLeon3ClockInitialization \
+ * spec:/testsuites/bsps/fatal-sparc-leon3-clock-initialization
+ *
+ * @ingroup RTEMSTestSuitesValidation
+ *
+ * @brief This validation test suite contains a test case which triggers a
+ * fatal error during system initialization.
+ *
+ * @{
+ */
+
+const char rtems_test_name[] = "TestsuitesBspsFatalSparcLeon3ClockInitialization";
+
+#define FATAL_SYSINIT_RUN BspSparcLeon3ValFatalClockInitialization_Run
+
+#define CONFIGURE_APPLICATION_NEEDS_CLOCK_DRIVER
+
+#include "ts-fatal-sysinit.h"
+
+/** @} */
diff --git a/testsuites/validation/bsps/ts-fatal-sparc-leon3-shutdown-response.c b/testsuites/validation/bsps/ts-fatal-sparc-leon3-shutdown-response.c
new file mode 100644
index 0000000000..d730b6d027
--- /dev/null
+++ b/testsuites/validation/bsps/ts-fatal-sparc-leon3-shutdown-response.c
@@ -0,0 +1,94 @@
+/* SPDX-License-Identifier: BSD-2-Clause */
+
+/**
+ * @file
+ *
+ * @ingroup RTEMSTestSuiteTestsuitesFatalBspSparcLeon3ShutdownResponse
+ */
+
+/*
+ * Copyright (C) 2021 embedded brains GmbH & Co. KG
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ */
+
+/*
+ * This file is part of the RTEMS quality process and was automatically
+ * generated. If you find something that needs to be fixed or
+ * worded better please post a report or patch to an RTEMS mailing list
+ * or raise a bug report:
+ *
+ * https://www.rtems.org/bugs.html
+ *
+ * For information on updating and regenerating please refer to the How-To
+ * section in the Software Requirements Engineering chapter of the
+ * RTEMS Software Engineering manual. The manual is provided as a part of
+ * a release. For development sources please refer to the online
+ * documentation at:
+ *
+ * https://docs.rtems.org
+ */
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#include <rtems/score/smpimpl.h>
+
+#include "tr-fatal-sparc-leon3-shutdown-response.h"
+
+#include <rtems/test.h>
+
+/**
+ * @defgroup RTEMSTestSuiteTestsuitesFatalBspSparcLeon3ShutdownResponse \
+ * spec:/testsuites/fatal-sparc-leon3-shutdown-response
+ *
+ * @ingroup RTEMSTestSuitesValidation
+ *
+ * @brief This validation test suite contains a test case which performs a
+ * system shutdown.
+ *
+ * @{
+ */
+
+const char rtems_test_name[] = "FatalBspSparcLeon3ShutdownResponse";
+
+#define FATAL_SYSINIT_RUN BspSparcLeon3ValFatalShutdownResponse_Run
+
+static void FatalSysinitExit( rtems_fatal_code exit_code )
+{
+ if ( exit_code == 0 ) {
+ rtems_fatal( RTEMS_FATAL_SOURCE_SMP, SMP_FATAL_SHUTDOWN );
+ } else {
+ rtems_fatal( RTEMS_FATAL_SOURCE_EXIT, exit_code );
+ }
+}
+
+#define FATAL_SYSINIT_EXIT( exit_code ) FatalSysinitExit( exit_code )
+
+#define CONFIGURE_APPLICATION_DOES_NOT_NEED_CLOCK_DRIVER
+
+#define CONFIGURE_MAXIMUM_PROCESSORS 2
+
+#include "ts-fatal-sysinit.h"
+
+/** @} */
diff --git a/testsuites/validation/bsps/ts-fatal-sparc-leon3-shutdown.c b/testsuites/validation/bsps/ts-fatal-sparc-leon3-shutdown.c
new file mode 100644
index 0000000000..bc229e7824
--- /dev/null
+++ b/testsuites/validation/bsps/ts-fatal-sparc-leon3-shutdown.c
@@ -0,0 +1,177 @@
+/* SPDX-License-Identifier: BSD-2-Clause */
+
+/**
+ * @file
+ *
+ * @ingroup TestsuitesBspsFatalSparcLeon3Shutdown
+ */
+
+/*
+ * Copyright (C) 2021, 2022 embedded brains GmbH & Co. KG
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ */
+
+/*
+ * This file is part of the RTEMS quality process and was automatically
+ * generated. If you find something that needs to be fixed or
+ * worded better please post a report or patch to an RTEMS mailing list
+ * or raise a bug report:
+ *
+ * https://www.rtems.org/bugs.html
+ *
+ * For information on updating and regenerating please refer to the How-To
+ * section in the Software Requirements Engineering chapter of the
+ * RTEMS Software Engineering manual. The manual is provided as a part of
+ * a release. For development sources please refer to the online
+ * documentation at:
+ *
+ * https://docs.rtems.org
+ */
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#include <rtems.h>
+#include <rtems/bspIo.h>
+#include <rtems/test-info.h>
+#include <rtems/test.h>
+#include <rtems/testopts.h>
+#include <rtems/score/smpimpl.h>
+
+#include "ts-config.h"
+#include "tx-support.h"
+
+#include <rtems/test.h>
+
+/**
+ * @defgroup TestsuitesBspsFatalSparcLeon3Shutdown \
+ * spec:/testsuites/bsps/fatal-sparc-leon3-shutdown
+ *
+ * @ingroup RTEMSTestSuitesValidation
+ *
+ * @brief This validation test suite provides an application configuration to
+ * perform a shutdown.
+ *
+ * @{
+ */
+
+const char rtems_test_name[] = "TestsuitesBspsFatalSparcLeon3Shutdown";
+
+static char buffer[ 512 ];
+
+static const T_action actions[] = {
+ T_report_hash_sha256
+};
+
+static const T_config test_config = {
+ .name = rtems_test_name,
+ .buf = buffer,
+ .buf_size = sizeof( buffer ),
+ .putchar = rtems_put_char,
+ .verbosity = RTEMS_TEST_VERBOSITY,
+ .now = T_now_tick,
+ .allocate = T_memory_allocate,
+ .deallocate = T_memory_deallocate,
+ .action_count = T_ARRAY_SIZE( actions ),
+ .actions = actions
+};
+
+void __real__CPU_Fatal_halt( uint32_t source, CPU_Uint32ptr code );
+
+void __wrap__CPU_Fatal_halt( uint32_t source, CPU_Uint32ptr code );
+
+void __wrap__CPU_Fatal_halt( uint32_t source, CPU_Uint32ptr code )
+{
+ int exit_code;
+
+ T_register();
+ exit_code = T_main( &test_config );
+
+ if ( exit_code == 0 ) {
+ rtems_test_end( rtems_test_name );
+ }
+
+#if defined(RTEMS_GCOV_COVERAGE)
+ rtems_test_gcov_dump_info();
+#endif
+ __real__CPU_Fatal_halt( source, code );
+}
+
+#define CONFIGURE_APPLICATION_DOES_NOT_NEED_CLOCK_DRIVER
+
+#if defined(RTEMS_SMP)
+#define CONFIGURE_MAXIMUM_PROCESSORS 2
+
+#include <rtems/score/scheduleredfsmp.h>
+
+#define CONFIGURE_SCHEDULER_EDF_SMP
+
+#include <rtems/scheduler.h>
+
+RTEMS_SCHEDULER_EDF_SMP( a );
+
+#define CONFIGURE_SCHEDULER_TABLE_ENTRIES \
+ RTEMS_SCHEDULER_TABLE_EDF_SMP( a, TEST_SCHEDULER_A_NAME )
+
+#define CONFIGURE_SCHEDULER_ASSIGNMENTS \
+ RTEMS_SCHEDULER_ASSIGN( 0, RTEMS_SCHEDULER_ASSIGN_PROCESSOR_MANDATORY ), \
+ RTEMS_SCHEDULER_ASSIGN( 0, RTEMS_SCHEDULER_ASSIGN_PROCESSOR_MANDATORY )
+#endif /* RTEMS_SMP */
+
+#define CONFIGURE_MAXIMUM_FILE_DESCRIPTORS 0
+
+#define CONFIGURE_MAXIMUM_USER_EXTENSIONS 1
+
+#define CONFIGURE_DISABLE_NEWLIB_REENTRANCY
+
+#define CONFIGURE_APPLICATION_DISABLE_FILESYSTEM
+
+#define CONFIGURE_IDLE_TASK_STORAGE_SIZE RTEMS_MINIMUM_STACK_SIZE
+
+#define CONFIGURE_IDLE_TASK_INITIALIZES_APPLICATION
+
+static void *ShutdownIdleBody( uintptr_t arg )
+{
+#if defined(RTEMS_SMP)
+ if ( rtems_scheduler_get_processor() == 0 ) {
+ rtems_test_begin( rtems_test_name, TEST_STATE );
+ rtems_fatal( RTEMS_FATAL_SOURCE_SMP, SMP_FATAL_SHUTDOWN );
+ }
+
+ return _CPU_Thread_Idle_body( arg );
+#else
+ rtems_test_begin( rtems_test_name, TEST_STATE );
+ rtems_fatal( RTEMS_FATAL_SOURCE_APPLICATION, 123 );
+#endif
+}
+
+#define CONFIGURE_IDLE_TASK_BODY ShutdownIdleBody
+
+#define CONFIGURE_INITIAL_EXTENSIONS { .fatal = FatalInitialExtension }
+
+#define CONFIGURE_INIT
+
+#include <rtems/confdefs.h>
+
+/** @} */
diff --git a/testsuites/validation/bsps/ts-validation-bsp-0.c b/testsuites/validation/bsps/ts-validation-bsp-0.c
new file mode 100644
index 0000000000..c072c8fdf1
--- /dev/null
+++ b/testsuites/validation/bsps/ts-validation-bsp-0.c
@@ -0,0 +1,73 @@
+/* SPDX-License-Identifier: BSD-2-Clause */
+
+/**
+ * @file
+ *
+ * @ingroup TestsuitesBspsValidationBsp0
+ */
+
+/*
+ * Copyright (C) 2021 embedded brains GmbH & Co. KG
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ */
+
+/*
+ * This file is part of the RTEMS quality process and was automatically
+ * generated. If you find something that needs to be fixed or
+ * worded better please post a report or patch to an RTEMS mailing list
+ * or raise a bug report:
+ *
+ * https://www.rtems.org/bugs.html
+ *
+ * For information on updating and regenerating please refer to the How-To
+ * section in the Software Requirements Engineering chapter of the
+ * RTEMS Software Engineering manual. The manual is provided as a part of
+ * a release. For development sources please refer to the online
+ * documentation at:
+ *
+ * https://docs.rtems.org
+ */
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#include <rtems/test.h>
+
+/**
+ * @defgroup TestsuitesBspsValidationBsp0 \
+ * spec:/testsuites/bsps/validation-bsp-0
+ *
+ * @ingroup RTEMSTestSuitesValidation
+ *
+ * @brief This general purpose validation test suite provides enough resources
+ * to run target-specific tests.
+ *
+ * @{
+ */
+
+const char rtems_test_name[] = "TestsuitesBspsValidationBsp0";
+
+#include "ts-default.h"
+
+/** @} */
diff --git a/testsuites/validation/tc-acfg-appl-does-not-need-clock-driver.c b/testsuites/validation/tc-acfg-appl-does-not-need-clock-driver.c
index 3aef1497be..632ce8f164 100644
--- a/testsuites/validation/tc-acfg-appl-does-not-need-clock-driver.c
+++ b/testsuites/validation/tc-acfg-appl-does-not-need-clock-driver.c
@@ -3,11 +3,11 @@
/**
* @file
*
- * @ingroup RTEMSTestCaseAcfgValApplDoesNotNeedClockDriver
+ * @ingroup AcfgValApplDoesNotNeedClockDriver
*/
/*
- * Copyright (C) 2022 embedded brains GmbH (http://www.embedded-brains.de)
+ * Copyright (C) 2022 embedded brains GmbH & Co. KG
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
@@ -57,10 +57,10 @@
#include <rtems/test.h>
/**
- * @defgroup RTEMSTestCaseAcfgValApplDoesNotNeedClockDriver \
+ * @defgroup AcfgValApplDoesNotNeedClockDriver \
* spec:/acfg/val/appl-does-not-need-clock-driver
*
- * @ingroup RTEMSTestSuiteTestsuitesValidationAcfg0
+ * @ingroup TestsuitesValidationAcfg0
*
* @brief Tests the effect of the
* CONFIGURE_APPLICATION_DOES_NOT_NEED_CLOCK_DRIVER application configuration
diff --git a/testsuites/validation/tc-acfg-appl-needs-clock-driver.c b/testsuites/validation/tc-acfg-appl-needs-clock-driver.c
index 5da259977f..fe62dd7de6 100644
--- a/testsuites/validation/tc-acfg-appl-needs-clock-driver.c
+++ b/testsuites/validation/tc-acfg-appl-needs-clock-driver.c
@@ -3,11 +3,11 @@
/**
* @file
*
- * @ingroup RTEMSTestCaseAcfgValApplNeedsClockDriver
+ * @ingroup AcfgValApplNeedsClockDriver
*/
/*
- * Copyright (C) 2022 embedded brains GmbH (http://www.embedded-brains.de)
+ * Copyright (C) 2022 embedded brains GmbH & Co. KG
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
@@ -57,10 +57,9 @@
#include <rtems/test.h>
/**
- * @defgroup RTEMSTestCaseAcfgValApplNeedsClockDriver \
- * spec:/acfg/val/appl-needs-clock-driver
+ * @defgroup AcfgValApplNeedsClockDriver spec:/acfg/val/appl-needs-clock-driver
*
- * @ingroup RTEMSTestSuiteTestsuitesValidation0
+ * @ingroup TestsuitesValidation0
*
* @brief Tests the effect of the CONFIGURE_APPLICATION_NEEDS_CLOCK_DRIVER
* application configuration option.
diff --git a/testsuites/validation/tc-acfg-default.c b/testsuites/validation/tc-acfg-default.c
index 95fa497cf1..bc23363c49 100644
--- a/testsuites/validation/tc-acfg-default.c
+++ b/testsuites/validation/tc-acfg-default.c
@@ -3,11 +3,11 @@
/**
* @file
*
- * @ingroup RTEMSTestCaseAcfgValDefault
+ * @ingroup AcfgValDefault
*/
/*
- * Copyright (C) 2021 embedded brains GmbH (http://www.embedded-brains.de)
+ * Copyright (C) 2021 embedded brains GmbH & Co. KG
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
@@ -61,9 +61,9 @@
#include <rtems/test.h>
/**
- * @defgroup RTEMSTestCaseAcfgValDefault spec:/acfg/val/default
+ * @defgroup AcfgValDefault spec:/acfg/val/default
*
- * @ingroup RTEMSTestSuiteTestsuitesValidationAcfg0
+ * @ingroup TestsuitesValidationAcfg0
*
* @brief Tests the default values of application configuration options.
*
@@ -74,10 +74,10 @@
*
* - Check the configured CONFIGURE_IDLE_TASK_BODY.
*
- * - Check the default value CONFIGURE_IDLE_TASK_STACK_SIZE where the
+ * - Check the default value of CONFIGURE_IDLE_TASK_STACK_SIZE where the
* optional BSP-provided default value is enabled.
*
- * - Check the default value CONFIGURE_INTERRUPT_STACK_SIZE where the
+ * - Check the default value of CONFIGURE_INTERRUPT_STACK_SIZE where the
* optional BSP-provided default value is enabled.
*
* - Check the BSP-provided initial extension is registered.
@@ -160,8 +160,8 @@ static void AcfgValDefault_Action_0( void )
T_step_eq_ptr( 0, rtems_configuration_get_idle_task(), IdleBody );
/*
- * Check the default value CONFIGURE_IDLE_TASK_STACK_SIZE where the optional
- * BSP-provided default value is enabled.
+ * Check the default value of CONFIGURE_IDLE_TASK_STACK_SIZE where the
+ * optional BSP-provided default value is enabled.
*/
T_step_eq_sz(
1,
@@ -174,8 +174,8 @@ static void AcfgValDefault_Action_0( void )
);
/*
- * Check the default value CONFIGURE_INTERRUPT_STACK_SIZE where the optional
- * BSP-provided default value is enabled.
+ * Check the default value of CONFIGURE_INTERRUPT_STACK_SIZE where the
+ * optional BSP-provided default value is enabled.
*/
T_step_eq_sz(
2,
diff --git a/testsuites/validation/tc-acfg-disabled-bsp-settings.c b/testsuites/validation/tc-acfg-disabled-bsp-settings.c
index 0dbae670f3..acd5d454e3 100644
--- a/testsuites/validation/tc-acfg-disabled-bsp-settings.c
+++ b/testsuites/validation/tc-acfg-disabled-bsp-settings.c
@@ -3,11 +3,11 @@
/**
* @file
*
- * @ingroup RTEMSTestCaseAcfgValDisabledBspSettings
+ * @ingroup AcfgValDisabledBspSettings
*/
/*
- * Copyright (C) 2021 embedded brains GmbH (http://www.embedded-brains.de)
+ * Copyright (C) 2021 embedded brains GmbH & Co. KG
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
@@ -58,10 +58,9 @@
#include <rtems/test.h>
/**
- * @defgroup RTEMSTestCaseAcfgValDisabledBspSettings \
- * spec:/acfg/val/disabled-bsp-settings
+ * @defgroup AcfgValDisabledBspSettings spec:/acfg/val/disabled-bsp-settings
*
- * @ingroup RTEMSTestSuiteTestsuitesValidationAcfg1
+ * @ingroup TestsuitesValidationAcfg1
*
* @brief Tests the default values of application configuration options where
* all optional BSP provided settings are disabled.
diff --git a/testsuites/validation/tc-acfg-one-cpu.c b/testsuites/validation/tc-acfg-one-cpu.c
index 5175829d55..8806e11b4e 100644
--- a/testsuites/validation/tc-acfg-one-cpu.c
+++ b/testsuites/validation/tc-acfg-one-cpu.c
@@ -3,11 +3,11 @@
/**
* @file
*
- * @ingroup RTEMSTestCaseAcfgValOneCpu
+ * @ingroup AcfgValOneCpu
*/
/*
- * Copyright (C) 2021 embedded brains GmbH (http://www.embedded-brains.de)
+ * Copyright (C) 2021 embedded brains GmbH & Co. KG
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
@@ -61,9 +61,9 @@
#include <rtems/test.h>
/**
- * @defgroup RTEMSTestCaseAcfgValOneCpu spec:/acfg/val/one-cpu
+ * @defgroup AcfgValOneCpu spec:/acfg/val/one-cpu
*
- * @ingroup RTEMSTestSuiteTestsuitesValidationOneCpu0
+ * @ingroup TestsuitesValidationOneCpu0
*
* @brief Tests the effect of application configuration options.
*
@@ -73,7 +73,7 @@
*
* - Check that the CONFIGURE_MAXIMUM_PRIORITY application configuration
* option resulted in the expected system setting using
- * /rtems/task/if/maximum-priority.
+ * spec:/rtems/task/if/maximum-priority.
*
* - Check that the Deterministic Priority Scheduler which was configured by
* the CONFIGURE_SCHEDULER_PRIORITY application configuration in the test
@@ -122,7 +122,7 @@ static void AcfgValOneCpu_Action_0( void )
/*
* Check that the CONFIGURE_MAXIMUM_PRIORITY application configuration option
* resulted in the expected system setting using
- * /rtems/task/if/maximum-priority.
+ * spec:/rtems/task/if/maximum-priority.
*/
T_eq_u32( RTEMS_MAXIMUM_PRIORITY, 127 );
diff --git a/testsuites/validation/tc-acfg-scheduler-edf-smp.c b/testsuites/validation/tc-acfg-scheduler-edf-smp.c
index 75b24b97d3..bbd974a588 100644
--- a/testsuites/validation/tc-acfg-scheduler-edf-smp.c
+++ b/testsuites/validation/tc-acfg-scheduler-edf-smp.c
@@ -3,11 +3,11 @@
/**
* @file
*
- * @ingroup RTEMSTestCaseAcfgValSchedulerEdfSmp
+ * @ingroup AcfgValSchedulerEdfSmp
*/
/*
- * Copyright (C) 2022 embedded brains GmbH (http://www.embedded-brains.de)
+ * Copyright (C) 2022 embedded brains GmbH & Co. KG
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
@@ -61,10 +61,9 @@
#include <rtems/test.h>
/**
- * @defgroup RTEMSTestCaseAcfgValSchedulerEdfSmp \
- * spec:/acfg/val/scheduler-edf-smp
+ * @defgroup AcfgValSchedulerEdfSmp spec:/acfg/val/scheduler-edf-smp
*
- * @ingroup RTEMSTestSuiteTestsuitesValidationSmpOnly0
+ * @ingroup TestsuitesValidationSmpOnly0
*
* @brief Tests the effect of application configuration options.
*
diff --git a/testsuites/validation/tc-acfg-scheduler-table-entries-one-cpu.c b/testsuites/validation/tc-acfg-scheduler-table-entries-one-cpu.c
new file mode 100644
index 0000000000..48db6c4244
--- /dev/null
+++ b/testsuites/validation/tc-acfg-scheduler-table-entries-one-cpu.c
@@ -0,0 +1,102 @@
+/* SPDX-License-Identifier: BSD-2-Clause */
+
+/**
+ * @file
+ *
+ * @ingroup AcfgValSchedulerTableEntriesOneCpu
+ */
+
+/*
+ * Copyright (C) 2022 embedded brains GmbH & Co. KG
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ */
+
+/*
+ * This file is part of the RTEMS quality process and was automatically
+ * generated. If you find something that needs to be fixed or
+ * worded better please post a report or patch to an RTEMS mailing list
+ * or raise a bug report:
+ *
+ * https://www.rtems.org/bugs.html
+ *
+ * For information on updating and regenerating please refer to the How-To
+ * section in the Software Requirements Engineering chapter of the
+ * RTEMS Software Engineering manual. The manual is provided as a part of
+ * a release. For development sources please refer to the online
+ * documentation at:
+ *
+ * https://docs.rtems.org
+ */
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#include <rtems.h>
+
+#include <rtems/test.h>
+
+/**
+ * @defgroup AcfgValSchedulerTableEntriesOneCpu \
+ * spec:/acfg/val/scheduler-table-entries-one-cpu
+ *
+ * @ingroup TestsuitesValidationOneCpu1
+ *
+ * @brief Tests the effect of CONFIGURE_SCHEDULER_TABLE_ENTRIES the application
+ * configuration options in a configuration with only one processor.
+ *
+ * This test case performs the following actions:
+ *
+ * - Check the effect of the application configuration option.
+ *
+ * - Check that the CONFIGURE_SCHEDULER_TABLE_ENTRIES application
+ * configuration option resulted in the expected system setting using
+ * RTEMS_MAXIMUM_PRIORITY.
+ *
+ * @{
+ */
+
+/**
+ * @brief Check the effect of the application configuration option.
+ */
+static void AcfgValSchedulerTableEntriesOneCpu_Action_0( void )
+{
+ /* Nothing to do */
+
+ /*
+ * Check that the CONFIGURE_SCHEDULER_TABLE_ENTRIES application configuration
+ * option resulted in the expected system setting using
+ * RTEMS_MAXIMUM_PRIORITY.
+ */
+ T_eq_u32( RTEMS_MAXIMUM_PRIORITY, 63 );
+}
+
+/**
+ * @fn void T_case_body_AcfgValSchedulerTableEntriesOneCpu( void )
+ */
+T_TEST_CASE( AcfgValSchedulerTableEntriesOneCpu )
+{
+ AcfgValSchedulerTableEntriesOneCpu_Action_0();
+}
+
+/** @} */
diff --git a/testsuites/validation/tc-acfg.c b/testsuites/validation/tc-acfg.c
index fb16536737..60f32ad929 100644
--- a/testsuites/validation/tc-acfg.c
+++ b/testsuites/validation/tc-acfg.c
@@ -3,11 +3,11 @@
/**
* @file
*
- * @ingroup RTEMSTestCaseAcfgValAcfg
+ * @ingroup AcfgValAcfg
*/
/*
- * Copyright (C) 2021 embedded brains GmbH (http://www.embedded-brains.de)
+ * Copyright (C) 2021 embedded brains GmbH & Co. KG
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
@@ -62,9 +62,9 @@
#include <rtems/test.h>
/**
- * @defgroup RTEMSTestCaseAcfgValAcfg spec:/acfg/val/acfg
+ * @defgroup AcfgValAcfg spec:/acfg/val/acfg
*
- * @ingroup RTEMSTestSuiteTestsuitesValidationNoClock0
+ * @ingroup TestsuitesValidationNoClock0
*
* @brief Tests the effect of application configuration options.
*
@@ -132,11 +132,11 @@
*
* - Check the configured CONFIGURE_TASK_STACK_ALLOCATOR hook. Using the
* test stack allocator validates also
- * /acfg/if/init-task-construct-storage-size, since the
+ * spec:/acfg/if/init-task-construct-storage-size, since the
* test_task_stack_allocate() allocate handler only supports
* CONFIGURE_MAXIMUM_TASKS minus one stacks and the validation test for
- * /rtems/task/req/create-errors creates for some pre-condition variants
- * all tasks until RTEMS_TOO_MANY is returned. In addition,
+ * spec:/rtems/task/req/create-errors creates for some pre-condition
+ * variants all tasks until RTEMS_TOO_MANY is returned. In addition,
* test_task_stack_allocate() checks that the allocation size is greater
* than or equal to TEST_MINIMUM_STACK_SIZE which validates
* CONFIGURE_MINIMUM_TASK_STACK_SIZE.
@@ -342,11 +342,12 @@ static void AcfgValAcfg_Action_0( void )
/*
* Check the configured CONFIGURE_TASK_STACK_ALLOCATOR hook. Using the test
- * stack allocator validates also /acfg/if/init-task-construct-storage-size,
- * since the test_task_stack_allocate() allocate handler only supports
+ * stack allocator validates also
+ * spec:/acfg/if/init-task-construct-storage-size, since the
+ * test_task_stack_allocate() allocate handler only supports
* CONFIGURE_MAXIMUM_TASKS minus one stacks and the validation test for
- * /rtems/task/req/create-errors creates for some pre-condition variants all
- * tasks until RTEMS_TOO_MANY is returned. In addition,
+ * spec:/rtems/task/req/create-errors creates for some pre-condition variants
+ * all tasks until RTEMS_TOO_MANY is returned. In addition,
* test_task_stack_allocate() checks that the allocation size is greater than
* or equal to TEST_MINIMUM_STACK_SIZE which validates
* CONFIGURE_MINIMUM_TASK_STACK_SIZE.
diff --git a/testsuites/validation/tc-attr.c b/testsuites/validation/tc-attr.c
index 3d39dcd6d5..05128372bf 100644
--- a/testsuites/validation/tc-attr.c
+++ b/testsuites/validation/tc-attr.c
@@ -3,11 +3,11 @@
/**
* @file
*
- * @ingroup RTEMSTestCaseRtemsAttrValAttr
+ * @ingroup RtemsAttrValAttr
*/
/*
- * Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+ * Copyright (C) 2020 embedded brains GmbH & Co. KG
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
@@ -57,9 +57,9 @@
#include <rtems/test.h>
/**
- * @defgroup RTEMSTestCaseRtemsAttrValAttr spec:/rtems/attr/val/attr
+ * @defgroup RtemsAttrValAttr spec:/rtems/attr/val/attr
*
- * @ingroup RTEMSTestSuiteTestsuitesValidationNoClock0
+ * @ingroup TestsuitesValidationNoClock0
*
* @brief Tests the attribute constants of the Classic API.
*
@@ -124,7 +124,7 @@
*
* - Check the value of RTEMS_DEFAULT_ATTRIBUTES.
*
- * - Check RTEMS_DEFAULT_ATTRIBUTES equals ``RTEMS_FIFO | RTEMS_LOCAL``.
+ * - Check RTEMS_DEFAULT_ATTRIBUTES equals RTEMS_FIFO | RTEMS_LOCAL.
*
* @{
*/
@@ -324,7 +324,7 @@ static void RtemsAttrValAttr_Action_4( void )
/* No action */
/*
- * Check RTEMS_DEFAULT_ATTRIBUTES equals ``RTEMS_FIFO | RTEMS_LOCAL``.
+ * Check RTEMS_DEFAULT_ATTRIBUTES equals RTEMS_FIFO | RTEMS_LOCAL.
*/
T_step_eq_int(
22,
diff --git a/testsuites/validation/tc-barrier-create.c b/testsuites/validation/tc-barrier-create.c
index 64b2540c79..ba35d0ad97 100644
--- a/testsuites/validation/tc-barrier-create.c
+++ b/testsuites/validation/tc-barrier-create.c
@@ -3,11 +3,11 @@
/**
* @file
*
- * @ingroup RTEMSTestCaseRtemsBarrierReqCreate
+ * @ingroup RtemsBarrierReqCreate
*/
/*
- * Copyright (C) 2021 embedded brains GmbH (http://www.embedded-brains.de)
+ * Copyright (C) 2021 embedded brains GmbH & Co. KG
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
@@ -60,9 +60,9 @@
#include <rtems/test.h>
/**
- * @defgroup RTEMSTestCaseRtemsBarrierReqCreate spec:/rtems/barrier/req/create
+ * @defgroup RtemsBarrierReqCreate spec:/rtems/barrier/req/create
*
- * @ingroup RTEMSTestSuiteTestsuitesValidationNoClock0
+ * @ingroup TestsuitesValidationNoClock0
*
* @{
*/
diff --git a/testsuites/validation/tc-barrier-delete.c b/testsuites/validation/tc-barrier-delete.c
index 1915ffb7ad..456459c343 100644
--- a/testsuites/validation/tc-barrier-delete.c
+++ b/testsuites/validation/tc-barrier-delete.c
@@ -3,11 +3,11 @@
/**
* @file
*
- * @ingroup RTEMSTestCaseRtemsBarrierReqDelete
+ * @ingroup RtemsBarrierReqDelete
*/
/*
- * Copyright (C) 2021 embedded brains GmbH (http://www.embedded-brains.de)
+ * Copyright (C) 2021 embedded brains GmbH & Co. KG
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
@@ -60,9 +60,9 @@
#include <rtems/test.h>
/**
- * @defgroup RTEMSTestCaseRtemsBarrierReqDelete spec:/rtems/barrier/req/delete
+ * @defgroup RtemsBarrierReqDelete spec:/rtems/barrier/req/delete
*
- * @ingroup RTEMSTestSuiteTestsuitesValidationNoClock0
+ * @ingroup TestsuitesValidationNoClock0
*
* @{
*/
diff --git a/testsuites/validation/tc-barrier-ident.c b/testsuites/validation/tc-barrier-ident.c
index dcb4a1c273..0378301fb8 100644
--- a/testsuites/validation/tc-barrier-ident.c
+++ b/testsuites/validation/tc-barrier-ident.c
@@ -3,11 +3,11 @@
/**
* @file
*
- * @ingroup RTEMSTestCaseRtemsBarrierValIdent
+ * @ingroup RtemsBarrierValIdent
*/
/*
- * Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+ * Copyright (C) 2020 embedded brains GmbH & Co. KG
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
@@ -57,16 +57,16 @@
#include <rtems/test.h>
/**
- * @defgroup RTEMSTestCaseRtemsBarrierValIdent spec:/rtems/barrier/val/ident
+ * @defgroup RtemsBarrierValIdent spec:/rtems/barrier/val/ident
*
- * @ingroup RTEMSTestSuiteTestsuitesValidationNoClock0
+ * @ingroup TestsuitesValidationNoClock0
*
* @brief Test the rtems_barrier_ident() directive.
*
* This test case performs the following actions:
*
* - Run the generic object identification tests for Classic API partition
- * class objects defined by /rtems/req/ident-local.
+ * class objects defined by spec:/rtems/req/ident-local.
*
* @{
*/
@@ -83,7 +83,7 @@ static rtems_status_code ClassicBarrierIdentAction(
/**
* @brief Run the generic object identification tests for Classic API partition
- * class objects defined by /rtems/req/ident-local.
+ * class objects defined by spec:/rtems/req/ident-local.
*/
static void RtemsBarrierValIdent_Action_0( void )
{
diff --git a/testsuites/validation/tc-barrier-performance.c b/testsuites/validation/tc-barrier-performance.c
index 91573e4c10..52ca8685b6 100644
--- a/testsuites/validation/tc-barrier-performance.c
+++ b/testsuites/validation/tc-barrier-performance.c
@@ -3,11 +3,11 @@
/**
* @file
*
- * @ingroup RTEMSTestCaseRtemsBarrierValPerf
+ * @ingroup RtemsBarrierValPerf
*/
/*
- * Copyright (C) 2021 embedded brains GmbH (http://www.embedded-brains.de)
+ * Copyright (C) 2021 embedded brains GmbH & Co. KG
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
@@ -59,9 +59,9 @@
#include <rtems/test.h>
/**
- * @defgroup RTEMSTestCaseRtemsBarrierValPerf spec:/rtems/barrier/val/perf
+ * @defgroup RtemsBarrierValPerf spec:/rtems/barrier/val/perf
*
- * @ingroup RTEMSTestSuiteTestsuitesPerformanceNoClock0
+ * @ingroup TestsuitesPerformanceNoClock0
*
* @brief This test case provides a context to run @ref RTEMSAPIClassicBarrier
* performance tests.
@@ -160,6 +160,13 @@ static T_fixture RtemsBarrierValPerf_Fixture = {
};
/**
+ * @defgroup RtemsBarrierReqPerfReleaseAuto \
+ * spec:/rtems/barrier/req/perf-release-auto
+ *
+ * @{
+ */
+
+/**
* @brief Create an automatic release barrier.
*/
static void RtemsBarrierReqPerfReleaseAuto_Prepare(
@@ -244,8 +251,17 @@ static void RtemsBarrierReqPerfReleaseAuto_Cleanup(
T_rsc_success( sc );
}
+/** @} */
+
#if defined(RTEMS_SMP)
/**
+ * @defgroup RtemsBarrierReqPerfReleaseAutoOtherCpu \
+ * spec:/rtems/barrier/req/perf-release-auto-other-cpu
+ *
+ * @{
+ */
+
+/**
* @brief Create an automatic release barrier. Create and start a worker task.
*/
static void RtemsBarrierReqPerfReleaseAutoOtherCpu_Prepare(
@@ -341,9 +357,18 @@ static void RtemsBarrierReqPerfReleaseAutoOtherCpu_Cleanup(
sc = rtems_barrier_delete( ctx->barrier_id );
T_rsc_success( sc );
}
+
+/** @} */
#endif
/**
+ * @defgroup RtemsBarrierReqPerfReleaseManual \
+ * spec:/rtems/barrier/req/perf-release-manual
+ *
+ * @{
+ */
+
+/**
* @brief Create a manual release barrier. Create and start a worker task.
*/
static void RtemsBarrierReqPerfReleaseManual_Prepare(
@@ -456,6 +481,15 @@ static void RtemsBarrierReqPerfReleaseManual_Cleanup(
RestoreRunnerPriority();
}
+/** @} */
+
+/**
+ * @defgroup RtemsBarrierReqPerfReleaseManualPreempt \
+ * spec:/rtems/barrier/req/perf-release-manual-preempt
+ *
+ * @{
+ */
+
/**
* @brief Create a manual release barrier. Create and start a worker task.
*/
@@ -555,6 +589,8 @@ static void RtemsBarrierReqPerfReleaseManualPreempt_Cleanup(
RestoreRunnerPriority();
}
+/** @} */
+
/**
* @fn void T_case_body_RtemsBarrierValPerf( void )
*/
diff --git a/testsuites/validation/tc-barrier-release.c b/testsuites/validation/tc-barrier-release.c
index beb26f4660..b584943531 100644
--- a/testsuites/validation/tc-barrier-release.c
+++ b/testsuites/validation/tc-barrier-release.c
@@ -3,11 +3,11 @@
/**
* @file
*
- * @ingroup RTEMSTestCaseRtemsBarrierReqRelease
+ * @ingroup RtemsBarrierReqRelease
*/
/*
- * Copyright (C) 2021 embedded brains GmbH (http://www.embedded-brains.de)
+ * Copyright (C) 2021 embedded brains GmbH & Co. KG
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
@@ -60,10 +60,9 @@
#include <rtems/test.h>
/**
- * @defgroup RTEMSTestCaseRtemsBarrierReqRelease \
- * spec:/rtems/barrier/req/release
+ * @defgroup RtemsBarrierReqRelease spec:/rtems/barrier/req/release
*
- * @ingroup RTEMSTestSuiteTestsuitesValidationNoClock0
+ * @ingroup TestsuitesValidationNoClock0
*
* @{
*/
diff --git a/testsuites/validation/tc-barrier-wait.c b/testsuites/validation/tc-barrier-wait.c
index 700b846cad..49d29a45c8 100644
--- a/testsuites/validation/tc-barrier-wait.c
+++ b/testsuites/validation/tc-barrier-wait.c
@@ -3,11 +3,11 @@
/**
* @file
*
- * @ingroup RTEMSTestCaseRtemsBarrierReqWait
+ * @ingroup RtemsBarrierReqWait
*/
/*
- * Copyright (C) 2021 embedded brains GmbH (http://www.embedded-brains.de)
+ * Copyright (C) 2021 embedded brains GmbH & Co. KG
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
@@ -60,9 +60,9 @@
#include <rtems/test.h>
/**
- * @defgroup RTEMSTestCaseRtemsBarrierReqWait spec:/rtems/barrier/req/wait
+ * @defgroup RtemsBarrierReqWait spec:/rtems/barrier/req/wait
*
- * @ingroup RTEMSTestSuiteTestsuitesValidationNoClock0
+ * @ingroup TestsuitesValidationNoClock0
*
* @{
*/
diff --git a/testsuites/validation/tc-basedefs-no-debug.c b/testsuites/validation/tc-basedefs-no-debug.c
new file mode 100644
index 0000000000..b3cfa5dd40
--- /dev/null
+++ b/testsuites/validation/tc-basedefs-no-debug.c
@@ -0,0 +1,135 @@
+/* SPDX-License-Identifier: BSD-2-Clause */
+
+/**
+ * @file
+ *
+ * @ingroup RtemsBasedefsValBasedefsNoDebug
+ */
+
+/*
+ * Copyright (C) 2022 embedded brains GmbH & Co. KG
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ */
+
+/*
+ * This file is part of the RTEMS quality process and was automatically
+ * generated. If you find something that needs to be fixed or
+ * worded better please post a report or patch to an RTEMS mailing list
+ * or raise a bug report:
+ *
+ * https://www.rtems.org/bugs.html
+ *
+ * For information on updating and regenerating please refer to the How-To
+ * section in the Software Requirements Engineering chapter of the
+ * RTEMS Software Engineering manual. The manual is provided as a part of
+ * a release. For development sources please refer to the online
+ * documentation at:
+ *
+ * https://docs.rtems.org
+ */
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#include <rtems.h>
+
+#include "tx-support.h"
+
+#include <rtems/test.h>
+
+/**
+ * @defgroup RtemsBasedefsValBasedefsNoDebug \
+ * spec:/rtems/basedefs/val/basedefs-no-debug
+ *
+ * @ingroup TestsuitesValidationNoClock0
+ *
+ * @brief Tests the basedefs macros where RTEMS_DEBUG is disabled.
+ *
+ * This test case performs the following actions:
+ *
+ * - Expand and stringify RTEMS_UNREACHABLE().
+ *
+ * - Check that the string is equal to the expected statement.
+ *
+ * - Expand RTEMS_FUNCTION_NAME.
+ *
+ * - Check that the string is equal to the expected function name.
+ *
+ * @{
+ */
+
+/**
+ * @brief Expand and stringify RTEMS_UNREACHABLE().
+ */
+static void RtemsBasedefsValBasedefsNoDebug_Action_0( void )
+{
+ const char *s;
+
+ s = RTEMS_XSTRING( RTEMS_UNREACHABLE() );
+
+ /*
+ * Check that the string is equal to the expected statement.
+ */
+ T_step_true(
+ 0,
+ IsEqualIgnoreWhiteSpace(
+ s,
+ "__builtin_unreachable()"
+ )
+ );
+}
+
+/**
+ * @brief Expand RTEMS_FUNCTION_NAME.
+ */
+static void RtemsBasedefsValBasedefsNoDebug_Action_1( void )
+{
+ const char *s;
+
+ s = RTEMS_FUNCTION_NAME;
+
+ /*
+ * Check that the string is equal to the expected function name.
+ */
+ T_step_true(
+ 1,
+ IsEqualIgnoreWhiteSpace(
+ s,
+ "RtemsBasedefsValBasedefsNoDebug_Action_1"
+ )
+ );
+}
+
+/**
+ * @fn void T_case_body_RtemsBasedefsValBasedefsNoDebug( void )
+ */
+T_TEST_CASE( RtemsBasedefsValBasedefsNoDebug )
+{
+ T_plan( 2 );
+
+ RtemsBasedefsValBasedefsNoDebug_Action_0();
+ RtemsBasedefsValBasedefsNoDebug_Action_1();
+}
+
+/** @} */
diff --git a/testsuites/validation/tc-basedefs-pendant.c b/testsuites/validation/tc-basedefs-pendant.c
index e9a7552d28..620e2d0efa 100644
--- a/testsuites/validation/tc-basedefs-pendant.c
+++ b/testsuites/validation/tc-basedefs-pendant.c
@@ -3,7 +3,7 @@
/**
* @file
*
- * @ingroup RTEMSTestCaseRtemsBasedefsValBasedefs
+ * @ingroup RtemsBasedefsValBasedefs
*
* @brief Helper file to verify the requirements towards the basedefs.
*
@@ -22,7 +22,7 @@
*/
/*
- * Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+ * Copyright (C) 2020 embedded brains GmbH & Co. KG
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
diff --git a/testsuites/validation/tc-basedefs-pendant.h b/testsuites/validation/tc-basedefs-pendant.h
index 591e0e6441..7c1fbd8ae3 100644
--- a/testsuites/validation/tc-basedefs-pendant.h
+++ b/testsuites/validation/tc-basedefs-pendant.h
@@ -3,7 +3,7 @@
/**
* @file
*
- * @ingroup RTEMSTestCaseRtemsBasedefsValBasedefs
+ * @ingroup RtemsBasedefsValBasedefs
*
* @brief Helper file to verify the requirements towards the basedefs.
*
@@ -13,7 +13,7 @@
*/
/*
- * Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+ * Copyright (C) 2020 embedded brains GmbH & Co. KG
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
diff --git a/testsuites/validation/tc-basedefs.c b/testsuites/validation/tc-basedefs.c
index bec43fa476..835f76ec64 100644
--- a/testsuites/validation/tc-basedefs.c
+++ b/testsuites/validation/tc-basedefs.c
@@ -3,11 +3,11 @@
/**
* @file
*
- * @ingroup RTEMSTestCaseRtemsBasedefsValBasedefs
+ * @ingroup RtemsBasedefsValBasedefs
*/
/*
- * Copyright (C) 2020, 2021 embedded brains GmbH (http://www.embedded-brains.de)
+ * Copyright (C) 2020, 2021 embedded brains GmbH & Co. KG
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
@@ -59,10 +59,9 @@
#include <rtems/test.h>
/**
- * @defgroup RTEMSTestCaseRtemsBasedefsValBasedefs \
- * spec:/rtems/basedefs/val/basedefs
+ * @defgroup RtemsBasedefsValBasedefs spec:/rtems/basedefs/val/basedefs
*
- * @ingroup RTEMSTestSuiteTestsuitesValidationNoClock0
+ * @ingroup TestsuitesValidationNoClock0
*
* @brief Tests the basedefs macros of the Classic API.
*
@@ -313,15 +312,9 @@
* effect. Yet, the check confirms that such a macro exists and can be
* used.
*
- * - Use the RTEMS_STATIC_ANALYSIS macro.
+ * - Evaluate if RTEMS_STATIC_ANALYSIS is defined.
*
- * - It cannot be automatically check that the RTEMS_STATIC_ANALYSIS macro
- * has the desired effect.
- *
- * - Use the RTEMS_STATIC_ANALYSIS macro.
- *
- * - It cannot be automatically check that the RTEMS_STATIC_ANALYSIS macro
- * has the desired effect.
+ * - Check that RTEMS_STATIC_ANALYSIS was not defined.
*
* - Use the RTEMS_STATIC_ASSERT() macro.
*
@@ -439,6 +432,12 @@
* - Checked that the RTEMS_ZERO_LENGTH_ARRAY macro produces a structure
* similar to a structure with one element.
*
+ * - Use the RTEMS_DEFINE_GLOBAL_SYMBOL() macro at the beginning of this file
+ * and assign the address of the symbol to an object.
+ *
+ * - Check that the RTEMS_DEFINE_GLOBAL_SYMBOL() macro defines a global
+ * symbol with the correct value.
+ *
* @{
*/
@@ -534,8 +533,18 @@ RTEMS_COMPILER_PURE_ATTRIBUTE static int compiler_pure_attribute_func( void )
return 21;
}
+static int global_symbol_base;
+
RTEMS_DEFINE_GLOBAL_SYMBOL(
- GLOBAL_SYMBOL, GLOBAL_SYMBOL_VALULE( abc ) );
+ GLOBAL_SYMBOL,
+ RTEMS_SYMBOL_NAME( global_symbol_base ) + GLOBAL_SYMBOL_VALULE( abc )
+);
+
+RTEMS_DECLARE_GLOBAL_SYMBOL( global_symbol_2 );
+
+RTEMS_DEFINE_GLOBAL_SYMBOL( global_symbol_2, 0x123 );
+
+static const char * const volatile global_symbol_2_object = global_symbol_2;
static int deprecated_func( int i ) RTEMS_DEPRECATED;
static int deprecated_func( int i )
@@ -1062,7 +1071,11 @@ static void RtemsBasedefsValBasedefs_Action_18( void )
* which is defined in a file different from the file in which the gobal
* symbol is defined.
*/
- T_step_eq_int( 45, basedefs_get_global_symbol(), 0xabc );
+ T_step_eq_uptr(
+ 45,
+ basedefs_get_global_symbol() - (uintptr_t) &global_symbol_base,
+ 0xabc
+ );
}
/**
@@ -1096,7 +1109,11 @@ static void RtemsBasedefsValBasedefs_Action_20( void )
* Check that the RTEMS_DEFINE_GLOBAL_SYMBOL() macro defines a global symbol
* with the correct value.
*/
- T_step_eq_int( 49, (uintptr_t) global_symbol, 0xabc );
+ T_step_eq_uptr(
+ 49,
+ (uintptr_t) global_symbol - (uintptr_t) &global_symbol_base,
+ 0xabc
+ );
}
/**
@@ -1557,49 +1574,26 @@ static void RtemsBasedefsValBasedefs_Action_40( void )
}
/**
- * @brief Use the RTEMS_STATIC_ANALYSIS macro.
+ * @brief Evaluate if RTEMS_STATIC_ANALYSIS is defined.
*/
static void RtemsBasedefsValBasedefs_Action_41( void )
{
- /* No action */
-
- /*
- * It cannot be automatically check that the RTEMS_STATIC_ANALYSIS macro has
- * the desired effect.
- */
- #if defined(__COVERITY__)
- # if defined(RTEMS_STATIC_ANALYSIS)
- T_quiet_true( true, "test passes, no output" );
- # else
- T_quiet_true( false, "RTEMS_STATIC_ANALYSIS not defined" );
- # endif
+ #if defined(RTEMS_STATIC_ANALYSIS)
+ bool defined = true;
+ #else
+ bool defined = false;
#endif
-}
-
-/**
- * @brief Use the RTEMS_STATIC_ANALYSIS macro.
- */
-static void RtemsBasedefsValBasedefs_Action_42( void )
-{
- /* No action */
/*
- * It cannot be automatically check that the RTEMS_STATIC_ANALYSIS macro has
- * the desired effect.
+ * Check that RTEMS_STATIC_ANALYSIS was not defined.
*/
- #if !defined(__COVERITY__)
- # if !defined(RTEMS_STATIC_ANALYSIS)
- T_quiet_true( true, "test passes, no output" );
- # else
- T_quiet_true( false, "RTEMS_STATIC_ANALYSIS defined" );
- # endif
- #endif
+ T_step_false( 94, defined );
}
/**
* @brief Use the RTEMS_STATIC_ASSERT() macro.
*/
-static void RtemsBasedefsValBasedefs_Action_43( void )
+static void RtemsBasedefsValBasedefs_Action_42( void )
{
RTEMS_STATIC_ASSERT( STATIC_ASSERT_COND 1, RTEMS_STATIC_ASSERT_test );
@@ -1614,7 +1608,7 @@ static void RtemsBasedefsValBasedefs_Action_43( void )
/**
* @brief Use the RTEMS_STRING() macro.
*/
-static void RtemsBasedefsValBasedefs_Action_44( void )
+static void RtemsBasedefsValBasedefs_Action_43( void )
{
const char *string_var;
const char *string_empty_var;
@@ -1628,16 +1622,16 @@ static void RtemsBasedefsValBasedefs_Action_44( void )
* Check that the RTEMS_STRING() macro converts its arguments into a single
* string without applying pre-processor substitutions on its arguments.
*/
- T_step_eq_str( 94, string_var, "\\ STRING_PREFIX cat\"\"\n" );
- T_step_eq_str( 95, string_empty_var, "" );
- T_step_eq_str( 96, string_multi_args_var,
+ T_step_eq_str( 95, string_var, "\\ STRING_PREFIX cat\"\"\n" );
+ T_step_eq_str( 96, string_empty_var, "" );
+ T_step_eq_str( 97, string_multi_args_var,
"STRING_PREFIX, \"abc\", DEF" );
}
/**
* @brief Use the RTEMS_SYMBOL_NAME() macro with an example object.
*/
-static void RtemsBasedefsValBasedefs_Action_45( void )
+static void RtemsBasedefsValBasedefs_Action_44( void )
{
/* Nothing to do */
@@ -1645,13 +1639,13 @@ static void RtemsBasedefsValBasedefs_Action_45( void )
* Check that the RTEMS_SYMBOL_NAME() macro expands to the expected symbol
* name.
*/
- T_step_eq_ptr( 97, &global_object, &address_of_global_object );
+ T_step_eq_ptr( 98, &global_object, &address_of_global_object );
}
/**
* @brief Invoke the TRUE macro on an example.
*/
-static void RtemsBasedefsValBasedefs_Action_46( void )
+static void RtemsBasedefsValBasedefs_Action_45( void )
{
char *true_result;
true_result = _TO_STR( TRUE );
@@ -1659,7 +1653,7 @@ static void RtemsBasedefsValBasedefs_Action_46( void )
/*
* Check that of TRUE is substituted by 0.
*/
- T_step_eq_str( 98, true_result, "1" );
+ T_step_eq_str( 99, true_result, "1" );
}
/**
@@ -1667,7 +1661,7 @@ static void RtemsBasedefsValBasedefs_Action_46( void )
* is already the test as the statements will not compile without error if
* the macro did not evaluate to the correct type.
*/
-static void RtemsBasedefsValBasedefs_Action_47( void )
+static void RtemsBasedefsValBasedefs_Action_46( void )
{
int type_refx_val = 7;
char type_refx_chr = 'c';
@@ -1689,24 +1683,24 @@ static void RtemsBasedefsValBasedefs_Action_47( void )
* The checks here are proforma. The macro is tested by the fact that the
* action will not compile if the macro returns a wrong result.
*/
- T_step_eq_int( 99, type_refx_val, 7 );
- T_step_eq_int( 100, type_refx_x_int, 8 );
- T_step_eq_int( 101, type_refx_xx_int, 9 );
- T_step_eq_int( 102, type_refx_xxx_int, 10 );
- T_step_eq_int( 103, *type_refx_xxx_int_p, 7 );
- T_step_eq_char( 104, type_refx_chr, 'c' );
- T_step_eq_char( 105, type_refx_ax_char, 'd' );
- T_step_eq_char( 106, type_refx_x_char, 'e' );
- T_step_eq_char( 107, type_refx_char, 'f' );
- T_step_eq_char( 108, type_refx_xx_char, 'g' );
- T_step_eq_short( 109, *type_refx_xx_const_short_p, 333 );
+ T_step_eq_int( 100, type_refx_val, 7 );
+ T_step_eq_int( 101, type_refx_x_int, 8 );
+ T_step_eq_int( 102, type_refx_xx_int, 9 );
+ T_step_eq_int( 103, type_refx_xxx_int, 10 );
+ T_step_eq_int( 104, *type_refx_xxx_int_p, 7 );
+ T_step_eq_char( 105, type_refx_chr, 'c' );
+ T_step_eq_char( 106, type_refx_ax_char, 'd' );
+ T_step_eq_char( 107, type_refx_x_char, 'e' );
+ T_step_eq_char( 108, type_refx_char, 'f' );
+ T_step_eq_char( 109, type_refx_xx_char, 'g' );
+ T_step_eq_short( 110, *type_refx_xx_const_short_p, 333 );
}
/**
* @brief Use the RTEMS_UNUSED macro. See also unused_func() at the beginning
* of this file.
*/
-static void RtemsBasedefsValBasedefs_Action_48( void )
+static void RtemsBasedefsValBasedefs_Action_47( void )
{
int unused_var RTEMS_UNUSED;
typedef struct RTEMS_UNUSED {
@@ -1753,7 +1747,7 @@ static void RtemsBasedefsValBasedefs_Action_48( void )
* @brief Use of the RTEMS_UNREACHABLE() macro in function definition of
* unreachable_func() at the beginning of this file.
*/
-static void RtemsBasedefsValBasedefs_Action_49( void )
+static void RtemsBasedefsValBasedefs_Action_48( void )
{
int unreachable_result;
unreachable_result = unreachable_func(2101);
@@ -1763,14 +1757,14 @@ static void RtemsBasedefsValBasedefs_Action_49( void )
* effect. It is checked that such a macro exists and the compiler warning
* about the missing return statement is suppressed.
*/
- T_step_eq_int( 110, unreachable_result, 2101 );
+ T_step_eq_int( 111, unreachable_result, 2101 );
}
/**
* @brief Use of the RTEMS_USED macro in function definition of used_func() at
* the beginning of this file and with used_var above.
*/
-static void RtemsBasedefsValBasedefs_Action_50( void )
+static void RtemsBasedefsValBasedefs_Action_49( void )
{
/* No action */
@@ -1785,7 +1779,7 @@ static void RtemsBasedefsValBasedefs_Action_50( void )
* @brief Use of the RTEMS_WARN_UNUSED_RESULT macro in function definition of
* warn_unused_func() at the beginning of this file.
*/
-static void RtemsBasedefsValBasedefs_Action_51( void )
+static void RtemsBasedefsValBasedefs_Action_50( void )
{
int warn_unused_result;
warn_unused_result = warn_unused_func( 33 );
@@ -1809,14 +1803,14 @@ static void RtemsBasedefsValBasedefs_Action_51( void )
* disregarded result returned by the call to the ``warn_unused_func()``
* function.
*/
- T_step_eq_int( 111, warn_unused_result, 11 );
+ T_step_eq_int( 112, warn_unused_result, 11 );
}
/**
* @brief Use of ``basedefs_weak_alias_0/1_func()`` which are defined with the
* RTEMS_WEAK_ALIAS() macro at the beginning of this file.
*/
-static void RtemsBasedefsValBasedefs_Action_52( void )
+static void RtemsBasedefsValBasedefs_Action_51( void )
{
int weak_alias_0_result;
int weak_alias_1_result;
@@ -1827,21 +1821,21 @@ static void RtemsBasedefsValBasedefs_Action_52( void )
* There exists no strong alias for basedefs_weak_alias_0_func(). Check that
* ori_func() and basedefs_weak_alias_0_func() are the same function.
*/
- T_step_eq_int( 112, weak_alias_0_result, 16 );
+ T_step_eq_int( 113, weak_alias_0_result, 16 );
/*
* File ``tc_basedefs_pndant.c`` defines a strong function for
* basedefs_weak_alias_1_func(). Check that ori_func() and
* basedefs_weak_alias_1_func() are not the same function.
*/
- T_step_eq_int( 113, weak_alias_1_result, 56 );
+ T_step_eq_int( 114, weak_alias_1_result, 56 );
}
/**
* @brief Use of ``basedefs_weak_0/1_var`` and ``basedefs_weak_0/1_func()``
* which are defined with the RTEMS_WEAK macro at the beginning of this file.
*/
-static void RtemsBasedefsValBasedefs_Action_53( void )
+static void RtemsBasedefsValBasedefs_Action_52( void )
{
int weak_0_result;
int weak_1_result;
@@ -1853,22 +1847,22 @@ static void RtemsBasedefsValBasedefs_Action_53( void )
* other symbols with the same name. Hence, the checks test that the weak
* symbols are used.
*/
- T_step_eq_int( 114, basedefs_weak_0_var, 60 );
- T_step_eq_int( 115, weak_0_result, 63 );
+ T_step_eq_int( 115, basedefs_weak_0_var, 60 );
+ T_step_eq_int( 116, weak_0_result, 63 );
/*
* ``basedefs_weak_1_var`` and ``basedefs_weak_1_func()`` are overwritten by
* strong symbols defined in file ``tc_basedefs_pendant.c``. Hence, the
* checks test that the strong variants are used.
*/
- T_step_eq_int( 116, basedefs_weak_1_var, 62 );
- T_step_eq_int( 117, weak_1_result, 65 );
+ T_step_eq_int( 117, basedefs_weak_1_var, 62 );
+ T_step_eq_int( 118, weak_1_result, 65 );
}
/**
* @brief Invoke the RTEMS_XCONCAT() macro on examples.
*/
-static void RtemsBasedefsValBasedefs_Action_54( void )
+static void RtemsBasedefsValBasedefs_Action_53( void )
{
int xconcat0_result;
int xconcat1_result;
@@ -1884,31 +1878,31 @@ static void RtemsBasedefsValBasedefs_Action_54( void )
* Check that the two arguments of RTEMS_XCONCAT() are concatenated without
* inserting new characters.
*/
- T_step_eq_int( 118, xconcat0_result, 91 );
+ T_step_eq_int( 119, xconcat0_result, 91 );
/*
* Check that the two arguments of RTEMS_XCONCAT() are substituted before
* they are concatenated.
*/
- T_step_eq_int( 119, xconcat1_result, 91 );
+ T_step_eq_int( 120, xconcat1_result, 91 );
/*
* Check that the two arguments of RTEMS_XCONCAT() are can be the macro
* itself.
*/
- T_step_eq_int( 120, xconcat2_result, 91 );
+ T_step_eq_int( 121, xconcat2_result, 91 );
/*
* Check that the result of the RTEMS_XCONCAT() expansion is subject to a
* further pre-processor substitution.
*/
- T_step_eq_int( 121, xconcat3_result, 91 );
+ T_step_eq_int( 122, xconcat3_result, 91 );
}
/**
* @brief Use the RTEMS_XSTRING() macro.
*/
-static void RtemsBasedefsValBasedefs_Action_55( void )
+static void RtemsBasedefsValBasedefs_Action_54( void )
{
const char *xstring_var;
const char *xstring_empty_var;
@@ -1922,9 +1916,9 @@ static void RtemsBasedefsValBasedefs_Action_55( void )
* Check that the RTEMS_XSTRING() macro applies pre-processor substitutions
* on its arguments and converts its arguments into a single string.
*/
- T_step_eq_str( 122, xstring_var, "\\ str cat\"\"\n" );
- T_step_eq_str( 123, xstring_empty_var, "" );
- T_step_eq_str( 124, string_multi_args_var,
+ T_step_eq_str( 123, xstring_var, "\\ str cat\"\"\n" );
+ T_step_eq_str( 124, xstring_empty_var, "" );
+ T_step_eq_str( 125, string_multi_args_var,
"str, ABC, \"abc\", DEF" );
}
@@ -1932,7 +1926,7 @@ static void RtemsBasedefsValBasedefs_Action_55( void )
* @brief Use of the RTEMS_ZERO_LENGTH_ARRAY macro in a declaration of a
* structure.
*/
-static void RtemsBasedefsValBasedefs_Action_56( void )
+static void RtemsBasedefsValBasedefs_Action_55( void )
{
typedef struct {
char chr;
@@ -1947,20 +1941,35 @@ static void RtemsBasedefsValBasedefs_Action_56( void )
* Checked that the RTEMS_ZERO_LENGTH_ARRAY macro produces a structure
* similar to a structure with one element.
*/
- T_step_eq_sz( 125, sizeof( zero_length_struct_0 ),
+ T_step_eq_sz( 126, sizeof( zero_length_struct_0 ),
sizeof( zero_length_struct_1 ) - sizeof( int ) );
- T_step_eq_sz( 126, offsetof( zero_length_struct_0, chr ),
+ T_step_eq_sz( 127, offsetof( zero_length_struct_0, chr ),
offsetof( zero_length_struct_1, chr ) );
- T_step_eq_sz( 127, offsetof( zero_length_struct_0, array ),
+ T_step_eq_sz( 128, offsetof( zero_length_struct_0, array ),
offsetof( zero_length_struct_1, array ) );
}
/**
+ * @brief Use the RTEMS_DEFINE_GLOBAL_SYMBOL() macro at the beginning of this
+ * file and assign the address of the symbol to an object.
+ */
+static void RtemsBasedefsValBasedefs_Action_56( void )
+{
+ /* No action */
+
+ /*
+ * Check that the RTEMS_DEFINE_GLOBAL_SYMBOL() macro defines a global symbol
+ * with the correct value.
+ */
+ T_step_eq_uptr( 129, (uintptr_t) global_symbol_2_object, 0x123 );
+}
+
+/**
* @fn void T_case_body_RtemsBasedefsValBasedefs( void )
*/
T_TEST_CASE( RtemsBasedefsValBasedefs )
{
- T_plan( 128 );
+ T_plan( 130 );
RtemsBasedefsValBasedefs_Action_0();
RtemsBasedefsValBasedefs_Action_1();
diff --git a/testsuites/validation/tc-bsp-interrupt-handler-dispatch-unchecked.c b/testsuites/validation/tc-bsp-interrupt-handler-dispatch-unchecked.c
new file mode 100644
index 0000000000..cef52bd991
--- /dev/null
+++ b/testsuites/validation/tc-bsp-interrupt-handler-dispatch-unchecked.c
@@ -0,0 +1,649 @@
+/* SPDX-License-Identifier: BSD-2-Clause */
+
+/**
+ * @file
+ *
+ * @ingroup BspReqInterruptHandlerDispatchUnchecked
+ */
+
+/*
+ * Copyright (C) 2021, 2023 embedded brains GmbH & Co. KG
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ */
+
+/*
+ * This file is part of the RTEMS quality process and was automatically
+ * generated. If you find something that needs to be fixed or
+ * worded better please post a report or patch to an RTEMS mailing list
+ * or raise a bug report:
+ *
+ * https://www.rtems.org/bugs.html
+ *
+ * For information on updating and regenerating please refer to the How-To
+ * section in the Software Requirements Engineering chapter of the
+ * RTEMS Software Engineering manual. The manual is provided as a part of
+ * a release. For development sources please refer to the online
+ * documentation at:
+ *
+ * https://docs.rtems.org
+ */
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#include <setjmp.h>
+#include <bsp/irq-generic.h>
+
+#include "tx-support.h"
+
+#include <rtems/test.h>
+
+/**
+ * @defgroup BspReqInterruptHandlerDispatchUnchecked \
+ * spec:/bsp/req/interrupt-handler-dispatch-unchecked
+ *
+ * @ingroup TestsuitesValidationIntr
+ *
+ * @{
+ */
+
+typedef enum {
+ BspReqInterruptHandlerDispatchUnchecked_Pre_LoadFirst_Null,
+ BspReqInterruptHandlerDispatchUnchecked_Pre_LoadFirst_Entry,
+ BspReqInterruptHandlerDispatchUnchecked_Pre_LoadFirst_NA
+} BspReqInterruptHandlerDispatchUnchecked_Pre_LoadFirst;
+
+typedef enum {
+ BspReqInterruptHandlerDispatchUnchecked_Pre_LoadFirstAgain_Null,
+ BspReqInterruptHandlerDispatchUnchecked_Pre_LoadFirstAgain_Entry,
+ BspReqInterruptHandlerDispatchUnchecked_Pre_LoadFirstAgain_NA
+} BspReqInterruptHandlerDispatchUnchecked_Pre_LoadFirstAgain;
+
+typedef enum {
+ BspReqInterruptHandlerDispatchUnchecked_Post_Result_FatalError,
+ BspReqInterruptHandlerDispatchUnchecked_Post_Result_Dispatch,
+ BspReqInterruptHandlerDispatchUnchecked_Post_Result_NA
+} BspReqInterruptHandlerDispatchUnchecked_Post_Result;
+
+typedef enum {
+ BspReqInterruptHandlerDispatchUnchecked_Post_FatalSource_SpuriousInterrupt,
+ BspReqInterruptHandlerDispatchUnchecked_Post_FatalSource_NA
+} BspReqInterruptHandlerDispatchUnchecked_Post_FatalSource;
+
+typedef enum {
+ BspReqInterruptHandlerDispatchUnchecked_Post_FatalCode_Vector,
+ BspReqInterruptHandlerDispatchUnchecked_Post_FatalCode_NA
+} BspReqInterruptHandlerDispatchUnchecked_Post_FatalCode;
+
+typedef struct {
+ uint8_t Skip : 1;
+ uint8_t Pre_LoadFirst_NA : 1;
+ uint8_t Pre_LoadFirstAgain_NA : 1;
+ uint8_t Post_Result : 2;
+ uint8_t Post_FatalSource : 1;
+ uint8_t Post_FatalCode : 1;
+} BspReqInterruptHandlerDispatchUnchecked_Entry;
+
+/**
+ * @brief Test context for spec:/bsp/req/interrupt-handler-dispatch-unchecked
+ * test case.
+ */
+typedef struct {
+ /**
+ * @brief This member references the interrupt entry to restore during test
+ * case teardown.
+ */
+ rtems_interrupt_entry *entry_to_restore;
+
+ /**
+ * @brief This member provides a jump buffer to return from the fatal error.
+ */
+ jmp_buf before_call;
+
+ /**
+ * @brief This member provides an interrupt entry to be dispatched.
+ */
+ rtems_interrupt_entry entry;
+
+ /**
+ * @brief This member is true, then an interrupt occurred.
+ */
+ volatile bool interrupt_occurred;
+
+ /**
+ * @brief This member provides an entry dispatch counter.
+ */
+ uint32_t entry_counter;
+
+ /**
+ * @brief This member provides a fatal error counter.
+ */
+ uint32_t fatal_counter;
+
+ /**
+ * @brief This member contains the fatal source.
+ */
+ rtems_fatal_source fatal_source;
+
+ /**
+ * @brief This member contains a fatal code.
+ */
+ rtems_fatal_code fatal_code;
+
+ /**
+ * @brief This member contains the vector number of a testable interrupt.
+ */
+ rtems_vector_number test_vector;
+
+ /**
+ * @brief This member references the pointer to the first entry of the
+ * interrupt vector.
+ */
+ rtems_interrupt_entry **first;
+
+ /**
+ * @brief This member references an interrupt entry for the first entry of
+ * the interrupt vector or is NULL.
+ */
+ rtems_interrupt_entry *first_again;
+
+ struct {
+ /**
+ * @brief This member defines the pre-condition indices for the next
+ * action.
+ */
+ size_t pci[ 2 ];
+
+ /**
+ * @brief This member defines the pre-condition states for the next action.
+ */
+ size_t pcs[ 2 ];
+
+ /**
+ * @brief If this member is true, then the test action loop is executed.
+ */
+ bool in_action_loop;
+
+ /**
+ * @brief This member contains the next transition map index.
+ */
+ size_t index;
+
+ /**
+ * @brief This member contains the current transition map entry.
+ */
+ BspReqInterruptHandlerDispatchUnchecked_Entry entry;
+
+ /**
+ * @brief If this member is true, then the current transition variant
+ * should be skipped.
+ */
+ bool skip;
+ } Map;
+} BspReqInterruptHandlerDispatchUnchecked_Context;
+
+static BspReqInterruptHandlerDispatchUnchecked_Context
+ BspReqInterruptHandlerDispatchUnchecked_Instance;
+
+static const char * const BspReqInterruptHandlerDispatchUnchecked_PreDesc_LoadFirst[] = {
+ "Null",
+ "Entry",
+ "NA"
+};
+
+static const char * const BspReqInterruptHandlerDispatchUnchecked_PreDesc_LoadFirstAgain[] = {
+ "Null",
+ "Entry",
+ "NA"
+};
+
+static const char * const * const BspReqInterruptHandlerDispatchUnchecked_PreDesc[] = {
+ BspReqInterruptHandlerDispatchUnchecked_PreDesc_LoadFirst,
+ BspReqInterruptHandlerDispatchUnchecked_PreDesc_LoadFirstAgain,
+ NULL
+};
+
+typedef BspReqInterruptHandlerDispatchUnchecked_Context Context;
+
+static bool test_case_active;
+
+static void Disable( const Context *ctx )
+{
+ (void) rtems_interrupt_vector_disable( ctx->test_vector );
+}
+
+static void ProcessInterrupt( Context *ctx )
+{
+ ctx->interrupt_occurred = true;
+ CallWithinISRClear();
+ Disable( ctx );
+}
+
+static void EntryRoutine( void *arg )
+{
+ Context *ctx;
+
+ ctx = arg;
+ ++ctx->entry_counter;
+ ProcessInterrupt( ctx );
+}
+
+static void Fatal(
+ rtems_fatal_source source,
+ rtems_fatal_code code,
+ void *arg
+)
+{
+ Context *ctx;
+
+ ctx = arg;
+ ctx->fatal_source = source;
+ ctx->fatal_code = code;
+ ++ctx->fatal_counter;
+ longjmp( ctx->before_call, 1 );
+}
+
+void __real_bsp_interrupt_handler_default( rtems_vector_number vector );
+
+void __wrap_bsp_interrupt_handler_default( rtems_vector_number vector );
+
+void __wrap_bsp_interrupt_handler_default( rtems_vector_number vector )
+{
+ if ( test_case_active ) {
+ Context *ctx;
+
+ ctx = T_fixture_context();
+ ProcessInterrupt( ctx );
+
+ if ( setjmp( ctx->before_call ) == 0 ) {
+ __real_bsp_interrupt_handler_default( vector );
+ }
+ } else {
+ __real_bsp_interrupt_handler_default( vector );
+ }
+}
+
+#if defined(RTEMS_SMP)
+void __real_bsp_interrupt_spurious( rtems_vector_number vector );
+
+void __wrap_bsp_interrupt_spurious( rtems_vector_number vector );
+
+void __wrap_bsp_interrupt_spurious( rtems_vector_number vector )
+{
+ if ( test_case_active ) {
+ Context *ctx;
+
+ ctx = T_fixture_context();
+ *ctx->first = ctx->first_again;
+ }
+
+ __real_bsp_interrupt_spurious( vector );
+}
+#endif
+
+static void BspReqInterruptHandlerDispatchUnchecked_Pre_LoadFirst_Prepare(
+ BspReqInterruptHandlerDispatchUnchecked_Context *ctx,
+ BspReqInterruptHandlerDispatchUnchecked_Pre_LoadFirst state
+)
+{
+ switch ( state ) {
+ case BspReqInterruptHandlerDispatchUnchecked_Pre_LoadFirst_Null: {
+ /*
+ * While the first loaded value of the pointer to the first interrupt
+ * entry of the interrupt vector specified by the ``vector`` parameter is
+ * equal to NULL.
+ */
+ *ctx->first = NULL;
+ break;
+ }
+
+ case BspReqInterruptHandlerDispatchUnchecked_Pre_LoadFirst_Entry: {
+ /*
+ * While the first loaded value of the pointer to the first interrupt
+ * entry of the interrupt vector specified by the ``vector`` parameter
+ * references an object of type rtems_interrupt_entry.
+ */
+ *ctx->first = &ctx->entry;
+ break;
+ }
+
+ case BspReqInterruptHandlerDispatchUnchecked_Pre_LoadFirst_NA:
+ break;
+ }
+}
+
+static void BspReqInterruptHandlerDispatchUnchecked_Pre_LoadFirstAgain_Prepare(
+ BspReqInterruptHandlerDispatchUnchecked_Context *ctx,
+ BspReqInterruptHandlerDispatchUnchecked_Pre_LoadFirstAgain state
+)
+{
+ switch ( state ) {
+ case BspReqInterruptHandlerDispatchUnchecked_Pre_LoadFirstAgain_Null: {
+ /*
+ * While the second loaded value of the pointer to the first interrupt
+ * entry of the interrupt vector specified by the ``vector`` parameter is
+ * equal to NULL.
+ */
+ ctx->first_again = NULL;
+ break;
+ }
+
+ case BspReqInterruptHandlerDispatchUnchecked_Pre_LoadFirstAgain_Entry: {
+ /*
+ * While the second loaded value of the pointer to the first interrupt
+ * entry of the interrupt vector specified by the ``vector`` parameter
+ * references an object of type rtems_interrupt_entry.
+ */
+ ctx->first_again = &ctx->entry;
+ break;
+ }
+
+ case BspReqInterruptHandlerDispatchUnchecked_Pre_LoadFirstAgain_NA:
+ break;
+ }
+}
+
+static void BspReqInterruptHandlerDispatchUnchecked_Post_Result_Check(
+ BspReqInterruptHandlerDispatchUnchecked_Context *ctx,
+ BspReqInterruptHandlerDispatchUnchecked_Post_Result state
+)
+{
+ switch ( state ) {
+ case BspReqInterruptHandlerDispatchUnchecked_Post_Result_FatalError: {
+ /*
+ * A fatal error shall occur.
+ */
+ T_eq_u32( ctx->entry_counter, 0 );
+ T_eq_u32( ctx->fatal_counter, 1 );
+ break;
+ }
+
+ case BspReqInterruptHandlerDispatchUnchecked_Post_Result_Dispatch: {
+ /*
+ * The interrupt entries installed at the interrupt vector specified by
+ * the ``vector`` parameter shall be dispatched.
+ */
+ T_eq_u32( ctx->entry_counter, 1 );
+ T_eq_u32( ctx->fatal_counter, 0 );
+ break;
+ }
+
+ case BspReqInterruptHandlerDispatchUnchecked_Post_Result_NA:
+ break;
+ }
+}
+
+static void BspReqInterruptHandlerDispatchUnchecked_Post_FatalSource_Check(
+ BspReqInterruptHandlerDispatchUnchecked_Context *ctx,
+ BspReqInterruptHandlerDispatchUnchecked_Post_FatalSource state
+)
+{
+ switch ( state ) {
+ case BspReqInterruptHandlerDispatchUnchecked_Post_FatalSource_SpuriousInterrupt: {
+ /*
+ * The fatal source shall be equal to
+ * RTEMS_FATAL_SOURCE_SPURIOUS_INTERRUPT.
+ */
+ T_eq_int( ctx->fatal_source, RTEMS_FATAL_SOURCE_SPURIOUS_INTERRUPT );
+ break;
+ }
+
+ case BspReqInterruptHandlerDispatchUnchecked_Post_FatalSource_NA:
+ break;
+ }
+}
+
+static void BspReqInterruptHandlerDispatchUnchecked_Post_FatalCode_Check(
+ BspReqInterruptHandlerDispatchUnchecked_Context *ctx,
+ BspReqInterruptHandlerDispatchUnchecked_Post_FatalCode state
+)
+{
+ switch ( state ) {
+ case BspReqInterruptHandlerDispatchUnchecked_Post_FatalCode_Vector: {
+ /*
+ * The fatal code shall be equal to the ``vector`` parameter.
+ */
+ T_eq_ulong( ctx->fatal_code, ctx->test_vector );
+ break;
+ }
+
+ case BspReqInterruptHandlerDispatchUnchecked_Post_FatalCode_NA:
+ break;
+ }
+}
+
+static void BspReqInterruptHandlerDispatchUnchecked_Setup(
+ BspReqInterruptHandlerDispatchUnchecked_Context *ctx
+)
+{
+ ctx->first = NULL;
+ ctx->test_vector = CallWithinISRGetVector();
+ T_assert_lt_u32( ctx->test_vector, BSP_INTERRUPT_VECTOR_COUNT );
+ ctx->first = &bsp_interrupt_dispatch_table[
+ bsp_interrupt_dispatch_index( ctx->test_vector )
+ ];
+ ctx->entry_to_restore = *ctx->first;
+
+ rtems_interrupt_entry_initialize( &ctx->entry, EntryRoutine, ctx, "Info" );
+ test_case_active = true;
+ SetFatalHandler( Fatal, ctx );
+}
+
+static void BspReqInterruptHandlerDispatchUnchecked_Setup_Wrap( void *arg )
+{
+ BspReqInterruptHandlerDispatchUnchecked_Context *ctx;
+
+ ctx = arg;
+ ctx->Map.in_action_loop = false;
+ BspReqInterruptHandlerDispatchUnchecked_Setup( ctx );
+}
+
+static void BspReqInterruptHandlerDispatchUnchecked_Teardown(
+ BspReqInterruptHandlerDispatchUnchecked_Context *ctx
+)
+{
+ SetFatalHandler( NULL, NULL );
+ test_case_active = false;
+
+ if ( ctx->first != NULL ) {
+ *ctx->first = ctx->entry_to_restore;
+ }
+}
+
+static void BspReqInterruptHandlerDispatchUnchecked_Teardown_Wrap( void *arg )
+{
+ BspReqInterruptHandlerDispatchUnchecked_Context *ctx;
+
+ ctx = arg;
+ ctx->Map.in_action_loop = false;
+ BspReqInterruptHandlerDispatchUnchecked_Teardown( ctx );
+}
+
+static void BspReqInterruptHandlerDispatchUnchecked_Action(
+ BspReqInterruptHandlerDispatchUnchecked_Context *ctx
+)
+{
+ ctx->interrupt_occurred = false;
+ ctx->entry_counter = 0;
+ ctx->fatal_counter = 0;
+ ctx->fatal_source = RTEMS_FATAL_SOURCE_LAST;
+ ctx->fatal_code = UINT32_MAX;
+
+ (void) rtems_interrupt_vector_enable( ctx->test_vector );
+
+ CallWithinISRRaise();
+
+ while ( !ctx->interrupt_occurred ) {
+ /* Wait */
+ }
+
+ Disable( ctx );
+}
+
+static const BspReqInterruptHandlerDispatchUnchecked_Entry
+BspReqInterruptHandlerDispatchUnchecked_Entries[] = {
+ { 0, 0, 1, BspReqInterruptHandlerDispatchUnchecked_Post_Result_Dispatch,
+ BspReqInterruptHandlerDispatchUnchecked_Post_FatalSource_NA,
+ BspReqInterruptHandlerDispatchUnchecked_Post_FatalCode_NA },
+#if defined(RTEMS_SMP)
+ { 0, 0, 0, BspReqInterruptHandlerDispatchUnchecked_Post_Result_FatalError,
+ BspReqInterruptHandlerDispatchUnchecked_Post_FatalSource_SpuriousInterrupt,
+ BspReqInterruptHandlerDispatchUnchecked_Post_FatalCode_Vector },
+#else
+ { 0, 0, 1, BspReqInterruptHandlerDispatchUnchecked_Post_Result_FatalError,
+ BspReqInterruptHandlerDispatchUnchecked_Post_FatalSource_SpuriousInterrupt,
+ BspReqInterruptHandlerDispatchUnchecked_Post_FatalCode_Vector },
+#endif
+#if defined(RTEMS_SMP)
+ { 0, 0, 0, BspReqInterruptHandlerDispatchUnchecked_Post_Result_Dispatch,
+ BspReqInterruptHandlerDispatchUnchecked_Post_FatalSource_NA,
+ BspReqInterruptHandlerDispatchUnchecked_Post_FatalCode_NA }
+#else
+ { 0, 0, 1, BspReqInterruptHandlerDispatchUnchecked_Post_Result_FatalError,
+ BspReqInterruptHandlerDispatchUnchecked_Post_FatalSource_SpuriousInterrupt,
+ BspReqInterruptHandlerDispatchUnchecked_Post_FatalCode_Vector }
+#endif
+};
+
+static const uint8_t
+BspReqInterruptHandlerDispatchUnchecked_Map[] = {
+ 1, 2, 0, 0
+};
+
+static size_t BspReqInterruptHandlerDispatchUnchecked_Scope(
+ void *arg,
+ char *buf,
+ size_t n
+)
+{
+ BspReqInterruptHandlerDispatchUnchecked_Context *ctx;
+
+ ctx = arg;
+
+ if ( ctx->Map.in_action_loop ) {
+ return T_get_scope(
+ BspReqInterruptHandlerDispatchUnchecked_PreDesc,
+ buf,
+ n,
+ ctx->Map.pcs
+ );
+ }
+
+ return 0;
+}
+
+static T_fixture BspReqInterruptHandlerDispatchUnchecked_Fixture = {
+ .setup = BspReqInterruptHandlerDispatchUnchecked_Setup_Wrap,
+ .stop = NULL,
+ .teardown = BspReqInterruptHandlerDispatchUnchecked_Teardown_Wrap,
+ .scope = BspReqInterruptHandlerDispatchUnchecked_Scope,
+ .initial_context = &BspReqInterruptHandlerDispatchUnchecked_Instance
+};
+
+static inline BspReqInterruptHandlerDispatchUnchecked_Entry
+BspReqInterruptHandlerDispatchUnchecked_PopEntry(
+ BspReqInterruptHandlerDispatchUnchecked_Context *ctx
+)
+{
+ size_t index;
+
+ index = ctx->Map.index;
+ ctx->Map.index = index + 1;
+ return BspReqInterruptHandlerDispatchUnchecked_Entries[
+ BspReqInterruptHandlerDispatchUnchecked_Map[ index ]
+ ];
+}
+
+static void BspReqInterruptHandlerDispatchUnchecked_SetPreConditionStates(
+ BspReqInterruptHandlerDispatchUnchecked_Context *ctx
+)
+{
+ ctx->Map.pcs[ 0 ] = ctx->Map.pci[ 0 ];
+
+ if ( ctx->Map.entry.Pre_LoadFirstAgain_NA ) {
+ ctx->Map.pcs[ 1 ] = BspReqInterruptHandlerDispatchUnchecked_Pre_LoadFirstAgain_NA;
+ } else {
+ ctx->Map.pcs[ 1 ] = ctx->Map.pci[ 1 ];
+ }
+}
+
+static void BspReqInterruptHandlerDispatchUnchecked_TestVariant(
+ BspReqInterruptHandlerDispatchUnchecked_Context *ctx
+)
+{
+ BspReqInterruptHandlerDispatchUnchecked_Pre_LoadFirst_Prepare(
+ ctx,
+ ctx->Map.pcs[ 0 ]
+ );
+ BspReqInterruptHandlerDispatchUnchecked_Pre_LoadFirstAgain_Prepare(
+ ctx,
+ ctx->Map.pcs[ 1 ]
+ );
+ BspReqInterruptHandlerDispatchUnchecked_Action( ctx );
+ BspReqInterruptHandlerDispatchUnchecked_Post_Result_Check(
+ ctx,
+ ctx->Map.entry.Post_Result
+ );
+ BspReqInterruptHandlerDispatchUnchecked_Post_FatalSource_Check(
+ ctx,
+ ctx->Map.entry.Post_FatalSource
+ );
+ BspReqInterruptHandlerDispatchUnchecked_Post_FatalCode_Check(
+ ctx,
+ ctx->Map.entry.Post_FatalCode
+ );
+}
+
+/**
+ * @fn void T_case_body_BspReqInterruptHandlerDispatchUnchecked( void )
+ */
+T_TEST_CASE_FIXTURE(
+ BspReqInterruptHandlerDispatchUnchecked,
+ &BspReqInterruptHandlerDispatchUnchecked_Fixture
+)
+{
+ BspReqInterruptHandlerDispatchUnchecked_Context *ctx;
+
+ ctx = T_fixture_context();
+ ctx->Map.in_action_loop = true;
+ ctx->Map.index = 0;
+
+ for (
+ ctx->Map.pci[ 0 ] = BspReqInterruptHandlerDispatchUnchecked_Pre_LoadFirst_Null;
+ ctx->Map.pci[ 0 ] < BspReqInterruptHandlerDispatchUnchecked_Pre_LoadFirst_NA;
+ ++ctx->Map.pci[ 0 ]
+ ) {
+ for (
+ ctx->Map.pci[ 1 ] = BspReqInterruptHandlerDispatchUnchecked_Pre_LoadFirstAgain_Null;
+ ctx->Map.pci[ 1 ] < BspReqInterruptHandlerDispatchUnchecked_Pre_LoadFirstAgain_NA;
+ ++ctx->Map.pci[ 1 ]
+ ) {
+ ctx->Map.entry = BspReqInterruptHandlerDispatchUnchecked_PopEntry( ctx );
+ BspReqInterruptHandlerDispatchUnchecked_SetPreConditionStates( ctx );
+ BspReqInterruptHandlerDispatchUnchecked_TestVariant( ctx );
+ }
+ }
+}
+
+/** @} */
diff --git a/testsuites/validation/tc-bsp-interrupt-spurious.c b/testsuites/validation/tc-bsp-interrupt-spurious.c
deleted file mode 100644
index de139337da..0000000000
--- a/testsuites/validation/tc-bsp-interrupt-spurious.c
+++ /dev/null
@@ -1,538 +0,0 @@
-/* SPDX-License-Identifier: BSD-2-Clause */
-
-/**
- * @file
- *
- * @ingroup RTEMSTestCaseBspReqInterruptSpurious
- */
-
-/*
- * Copyright (C) 2021 embedded brains GmbH (http://www.embedded-brains.de)
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
- * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
- * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- * POSSIBILITY OF SUCH DAMAGE.
- */
-
-/*
- * This file is part of the RTEMS quality process and was automatically
- * generated. If you find something that needs to be fixed or
- * worded better please post a report or patch to an RTEMS mailing list
- * or raise a bug report:
- *
- * https://www.rtems.org/bugs.html
- *
- * For information on updating and regenerating please refer to the How-To
- * section in the Software Requirements Engineering chapter of the
- * RTEMS Software Engineering manual. The manual is provided as a part of
- * a release. For development sources please refer to the online
- * documentation at:
- *
- * https://docs.rtems.org
- */
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#include <setjmp.h>
-#include <bsp/irq-generic.h>
-
-#include "tx-support.h"
-
-#include <rtems/test.h>
-
-/**
- * @defgroup RTEMSTestCaseBspReqInterruptSpurious \
- * spec:/bsp/req/interrupt-spurious
- *
- * @ingroup RTEMSTestSuiteTestsuitesValidationSmpOnly0
- *
- * @{
- */
-
-typedef enum {
- BspReqInterruptSpurious_Pre_First_Null,
- BspReqInterruptSpurious_Pre_First_Entry,
- BspReqInterruptSpurious_Pre_First_NA
-} BspReqInterruptSpurious_Pre_First;
-
-typedef enum {
- BspReqInterruptSpurious_Post_Result_FatalError,
- BspReqInterruptSpurious_Post_Result_Dispatch,
- BspReqInterruptSpurious_Post_Result_NA
-} BspReqInterruptSpurious_Post_Result;
-
-typedef enum {
- BspReqInterruptSpurious_Post_FatalSource_SpuriousInterrupt,
- BspReqInterruptSpurious_Post_FatalSource_NA
-} BspReqInterruptSpurious_Post_FatalSource;
-
-typedef enum {
- BspReqInterruptSpurious_Post_FatalCode_Vector,
- BspReqInterruptSpurious_Post_FatalCode_NA
-} BspReqInterruptSpurious_Post_FatalCode;
-
-typedef struct {
- uint8_t Skip : 1;
- uint8_t Pre_First_NA : 1;
- uint8_t Post_Result : 2;
- uint8_t Post_FatalSource : 1;
- uint8_t Post_FatalCode : 1;
-} BspReqInterruptSpurious_Entry;
-
-/**
- * @brief Test context for spec:/bsp/req/interrupt-spurious test case.
- */
-typedef struct {
- /**
- * @brief This member provides a jump buffer to return from the fatal error.
- */
- jmp_buf before_call;
-
- /**
- * @brief This member provides an interrupt entry to be dispatched.
- */
- rtems_interrupt_entry entry;
-
- /**
- * @brief If this member is true, then the interrupt shall be cleared.
- */
- bool do_clear;
-
- /**
- * @brief This member is true, then an interrupt occurred.
- */
- volatile bool interrupt_occurred;
-
- /**
- * @brief This member provides an entry dispatch counter.
- */
- uint32_t entry_counter;
-
- /**
- * @brief This member provides a fatal error counter.
- */
- uint32_t fatal_counter;
-
- /**
- * @brief This member contains the fatal source.
- */
- rtems_fatal_source fatal_source;
-
- /**
- * @brief This member contains a fatal code.
- */
- rtems_fatal_code fatal_code;
-
- /**
- * @brief This member contains the vector number of a testable interrupt.
- */
- rtems_vector_number test_vector;
-
- /**
- * @brief This member references the pointer to the first entry of the
- * interrupt vector.
- */
- rtems_interrupt_entry **first;
-
- struct {
- /**
- * @brief This member defines the pre-condition states for the next action.
- */
- size_t pcs[ 1 ];
-
- /**
- * @brief If this member is true, then the test action loop is executed.
- */
- bool in_action_loop;
-
- /**
- * @brief This member contains the next transition map index.
- */
- size_t index;
-
- /**
- * @brief This member contains the current transition map entry.
- */
- BspReqInterruptSpurious_Entry entry;
-
- /**
- * @brief If this member is true, then the current transition variant
- * should be skipped.
- */
- bool skip;
- } Map;
-} BspReqInterruptSpurious_Context;
-
-static BspReqInterruptSpurious_Context
- BspReqInterruptSpurious_Instance;
-
-static const char * const BspReqInterruptSpurious_PreDesc_First[] = {
- "Null",
- "Entry",
- "NA"
-};
-
-static const char * const * const BspReqInterruptSpurious_PreDesc[] = {
- BspReqInterruptSpurious_PreDesc_First,
- NULL
-};
-
-typedef BspReqInterruptSpurious_Context Context;
-
-static bool test_case_active;
-
-static void Disable( const Context *ctx )
-{
- (void) rtems_interrupt_vector_disable( ctx->test_vector );
-}
-
-static void ProcessInterrupt( Context *ctx )
-{
- ctx->interrupt_occurred = true;
-
- if ( ctx->do_clear ) {
- rtems_status_code sc;
-
- sc = rtems_interrupt_clear( ctx->test_vector );
- T_rsc_success( sc );
- }
-
- Disable( ctx );
-}
-
-static void EntryRoutine( void *arg )
-{
- Context *ctx;
-
- ctx = arg;
- ++ctx->entry_counter;
- ProcessInterrupt( ctx );
-}
-
-static void Fatal(
- rtems_fatal_source source,
- rtems_fatal_code code,
- void *arg
-)
-{
- Context *ctx;
-
- ctx = arg;
- ctx->fatal_source = source;
- ctx->fatal_code = code;
- ++ctx->fatal_counter;
- longjmp( ctx->before_call, 1 );
-}
-
-void __real_bsp_interrupt_handler_default( rtems_vector_number vector );
-
-void __wrap_bsp_interrupt_handler_default( rtems_vector_number vector );
-
-void __wrap_bsp_interrupt_handler_default( rtems_vector_number vector )
-{
- if ( test_case_active ) {
- Context *ctx;
-
- ctx = T_fixture_context();
- ProcessInterrupt( ctx );
-
- if ( setjmp( ctx->before_call ) == 0 ) {
- __real_bsp_interrupt_handler_default( vector );
- }
- } else {
- __real_bsp_interrupt_handler_default( vector );
- }
-}
-
-static void BspReqInterruptSpurious_Pre_First_Prepare(
- BspReqInterruptSpurious_Context *ctx,
- BspReqInterruptSpurious_Pre_First state
-)
-{
- switch ( state ) {
- case BspReqInterruptSpurious_Pre_First_Null: {
- /*
- * While the pointer to the first interrupt entry of the interrupt vector
- * specified by the ``vector`` parameter is equal to NULL.
- */
- *ctx->first = NULL;
- break;
- }
-
- case BspReqInterruptSpurious_Pre_First_Entry: {
- /*
- * While the pointer to the first interrupt entry of the interrupt vector
- * specified by the ``vector`` parameter references an object of type
- * rtems_interrupt_entry.
- */
- *ctx->first = &ctx->entry;
- break;
- }
-
- case BspReqInterruptSpurious_Pre_First_NA:
- break;
- }
-}
-
-static void BspReqInterruptSpurious_Post_Result_Check(
- BspReqInterruptSpurious_Context *ctx,
- BspReqInterruptSpurious_Post_Result state
-)
-{
- switch ( state ) {
- case BspReqInterruptSpurious_Post_Result_FatalError: {
- /*
- * A fatal error shall occur.
- */
- T_eq_u32( ctx->entry_counter, 0 );
- T_eq_u32( ctx->fatal_counter, 1 );
- break;
- }
-
- case BspReqInterruptSpurious_Post_Result_Dispatch: {
- /*
- * The interrupt entries installed at the interrupt vector specified by
- * the ``vector`` parameter shall be dispatched.
- */
- T_eq_u32( ctx->entry_counter, 1 );
- T_eq_u32( ctx->fatal_counter, 0 );
- break;
- }
-
- case BspReqInterruptSpurious_Post_Result_NA:
- break;
- }
-}
-
-static void BspReqInterruptSpurious_Post_FatalSource_Check(
- BspReqInterruptSpurious_Context *ctx,
- BspReqInterruptSpurious_Post_FatalSource state
-)
-{
- switch ( state ) {
- case BspReqInterruptSpurious_Post_FatalSource_SpuriousInterrupt: {
- /*
- * The fatal source shall be equal to
- * RTEMS_FATAL_SOURCE_SPURIOUS_INTERRUPT.
- */
- T_eq_int( ctx->fatal_source, RTEMS_FATAL_SOURCE_SPURIOUS_INTERRUPT );
- break;
- }
-
- case BspReqInterruptSpurious_Post_FatalSource_NA:
- break;
- }
-}
-
-static void BspReqInterruptSpurious_Post_FatalCode_Check(
- BspReqInterruptSpurious_Context *ctx,
- BspReqInterruptSpurious_Post_FatalCode state
-)
-{
- switch ( state ) {
- case BspReqInterruptSpurious_Post_FatalCode_Vector: {
- /*
- * The fatal code shall be equal to the ``vector`` parameter.
- */
- T_eq_ulong( ctx->fatal_code, ctx->test_vector );
- break;
- }
-
- case BspReqInterruptSpurious_Post_FatalCode_NA:
- break;
- }
-}
-
-static void BspReqInterruptSpurious_Setup(
- BspReqInterruptSpurious_Context *ctx
-)
-{
- rtems_interrupt_attributes attr = {
- .can_raise = true
- };
- rtems_status_code sc;
-
- ctx->test_vector = GetTestableInterruptVector( &attr );
- T_assert_lt_u32( ctx->test_vector, BSP_INTERRUPT_VECTOR_COUNT );
- ctx->first = &bsp_interrupt_handler_table[
- bsp_interrupt_handler_index( ctx->test_vector )
- ];
-
- sc = rtems_interrupt_get_attributes( ctx->test_vector, &attr );
- T_rsc_success( sc );
- ctx->do_clear = attr.can_clear && !attr.cleared_by_acknowledge;
-
- rtems_interrupt_entry_initialize( &ctx->entry, EntryRoutine, ctx, "Info" );
- test_case_active = true;
- SetFatalHandler( Fatal, ctx );
-}
-
-static void BspReqInterruptSpurious_Setup_Wrap( void *arg )
-{
- BspReqInterruptSpurious_Context *ctx;
-
- ctx = arg;
- ctx->Map.in_action_loop = false;
- BspReqInterruptSpurious_Setup( ctx );
-}
-
-static void BspReqInterruptSpurious_Teardown(
- BspReqInterruptSpurious_Context *ctx
-)
-{
- SetFatalHandler( NULL, NULL );
- test_case_active = false;
-}
-
-static void BspReqInterruptSpurious_Teardown_Wrap( void *arg )
-{
- BspReqInterruptSpurious_Context *ctx;
-
- ctx = arg;
- ctx->Map.in_action_loop = false;
- BspReqInterruptSpurious_Teardown( ctx );
-}
-
-static void BspReqInterruptSpurious_Action(
- BspReqInterruptSpurious_Context *ctx
-)
-{
- ctx->interrupt_occurred = false;
- ctx->entry_counter = 0;
- ctx->fatal_counter = 0;
- ctx->fatal_source = RTEMS_FATAL_SOURCE_LAST;
- ctx->fatal_code = UINT32_MAX;
-
- if ( *ctx->first == NULL ) {
- rtems_status_code sc;
-
- (void) rtems_interrupt_vector_enable( ctx->test_vector );
-
- sc = rtems_interrupt_raise( ctx->test_vector );
- T_rsc_success( sc );
-
- while ( !ctx->interrupt_occurred ) {
- /* Wait */
- }
-
- Disable( ctx );
- } else {
- bsp_interrupt_spurious( ctx->test_vector );
- }
-}
-
-static const BspReqInterruptSpurious_Entry
-BspReqInterruptSpurious_Entries[] = {
- { 0, 0, BspReqInterruptSpurious_Post_Result_FatalError,
- BspReqInterruptSpurious_Post_FatalSource_SpuriousInterrupt,
- BspReqInterruptSpurious_Post_FatalCode_Vector },
- { 0, 0, BspReqInterruptSpurious_Post_Result_Dispatch,
- BspReqInterruptSpurious_Post_FatalSource_NA,
- BspReqInterruptSpurious_Post_FatalCode_NA }
-};
-
-static const uint8_t
-BspReqInterruptSpurious_Map[] = {
- 0, 1
-};
-
-static size_t BspReqInterruptSpurious_Scope( void *arg, char *buf, size_t n )
-{
- BspReqInterruptSpurious_Context *ctx;
-
- ctx = arg;
-
- if ( ctx->Map.in_action_loop ) {
- return T_get_scope(
- BspReqInterruptSpurious_PreDesc,
- buf,
- n,
- ctx->Map.pcs
- );
- }
-
- return 0;
-}
-
-static T_fixture BspReqInterruptSpurious_Fixture = {
- .setup = BspReqInterruptSpurious_Setup_Wrap,
- .stop = NULL,
- .teardown = BspReqInterruptSpurious_Teardown_Wrap,
- .scope = BspReqInterruptSpurious_Scope,
- .initial_context = &BspReqInterruptSpurious_Instance
-};
-
-static inline BspReqInterruptSpurious_Entry BspReqInterruptSpurious_PopEntry(
- BspReqInterruptSpurious_Context *ctx
-)
-{
- size_t index;
-
- index = ctx->Map.index;
- ctx->Map.index = index + 1;
- return BspReqInterruptSpurious_Entries[
- BspReqInterruptSpurious_Map[ index ]
- ];
-}
-
-static void BspReqInterruptSpurious_TestVariant(
- BspReqInterruptSpurious_Context *ctx
-)
-{
- BspReqInterruptSpurious_Pre_First_Prepare( ctx, ctx->Map.pcs[ 0 ] );
- BspReqInterruptSpurious_Action( ctx );
- BspReqInterruptSpurious_Post_Result_Check( ctx, ctx->Map.entry.Post_Result );
- BspReqInterruptSpurious_Post_FatalSource_Check(
- ctx,
- ctx->Map.entry.Post_FatalSource
- );
- BspReqInterruptSpurious_Post_FatalCode_Check(
- ctx,
- ctx->Map.entry.Post_FatalCode
- );
-}
-
-/**
- * @fn void T_case_body_BspReqInterruptSpurious( void )
- */
-T_TEST_CASE_FIXTURE(
- BspReqInterruptSpurious,
- &BspReqInterruptSpurious_Fixture
-)
-{
- BspReqInterruptSpurious_Context *ctx;
-
- ctx = T_fixture_context();
- ctx->Map.in_action_loop = true;
- ctx->Map.index = 0;
-
- for (
- ctx->Map.pcs[ 0 ] = BspReqInterruptSpurious_Pre_First_Null;
- ctx->Map.pcs[ 0 ] < BspReqInterruptSpurious_Pre_First_NA;
- ++ctx->Map.pcs[ 0 ]
- ) {
- ctx->Map.entry = BspReqInterruptSpurious_PopEntry( ctx );
- BspReqInterruptSpurious_TestVariant( ctx );
- }
-}
-
-/** @} */
diff --git a/testsuites/validation/tc-c.c b/testsuites/validation/tc-c.c
index 32b55fd845..646a838609 100644
--- a/testsuites/validation/tc-c.c
+++ b/testsuites/validation/tc-c.c
@@ -3,11 +3,11 @@
/**
* @file
*
- * @ingroup RTEMSTestCaseCValC
+ * @ingroup CValC
*/
/*
- * Copyright (C) 2021 embedded brains GmbH (http://www.embedded-brains.de)
+ * Copyright (C) 2021 embedded brains GmbH & Co. KG
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
@@ -58,9 +58,9 @@
#include <rtems/test.h>
/**
- * @defgroup RTEMSTestCaseCValC spec:/c/val/c
+ * @defgroup CValC spec:/c/val/c
*
- * @ingroup RTEMSTestSuiteTestsuitesValidationNoClock0
+ * @ingroup TestsuitesValidationNoClock0
*
* @brief Tests C library functions.
*
diff --git a/testsuites/validation/tc-cache.c b/testsuites/validation/tc-cache.c
index 3e0cdf7deb..e85b9033e7 100644
--- a/testsuites/validation/tc-cache.c
+++ b/testsuites/validation/tc-cache.c
@@ -3,11 +3,11 @@
/**
* @file
*
- * @ingroup RTEMSTestCaseRtemsCacheValCache
+ * @ingroup RtemsCacheValCache
*/
/*
- * Copyright (C) 2021 embedded brains GmbH (http://www.embedded-brains.de)
+ * Copyright (C) 2021 embedded brains GmbH & Co. KG
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
@@ -57,9 +57,9 @@
#include <rtems/test.h>
/**
- * @defgroup RTEMSTestCaseRtemsCacheValCache spec:/rtems/cache/val/cache
+ * @defgroup RtemsCacheValCache spec:/rtems/cache/val/cache
*
- * @ingroup RTEMSTestSuiteTestsuitesValidationCache
+ * @ingroup TestsuitesValidationCache
*
* @brief Tests some @ref RTEMSAPIClassicCache directives.
*
diff --git a/testsuites/validation/tc-clock-get-tod.c b/testsuites/validation/tc-clock-get-tod.c
index f3ff4a3830..8bf5717171 100644
--- a/testsuites/validation/tc-clock-get-tod.c
+++ b/testsuites/validation/tc-clock-get-tod.c
@@ -3,11 +3,11 @@
/**
* @file
*
- * @ingroup RTEMSTestCaseRtemsClockReqGetTod
+ * @ingroup RtemsClockReqGetTod
*/
/*
- * Copyright (C) 2021 embedded brains GmbH (http://www.embedded-brains.de)
+ * Copyright (C) 2021 embedded brains GmbH & Co. KG
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
@@ -59,9 +59,9 @@
#include <rtems/test.h>
/**
- * @defgroup RTEMSTestCaseRtemsClockReqGetTod spec:/rtems/clock/req/get-tod
+ * @defgroup RtemsClockReqGetTod spec:/rtems/clock/req/get-tod
*
- * @ingroup RTEMSTestSuiteTestsuitesValidationNoClock0
+ * @ingroup TestsuitesValidationNoClock0
*
* @{
*/
diff --git a/testsuites/validation/tc-clock-get-uptime.c b/testsuites/validation/tc-clock-get-uptime.c
index ebc8b2de74..19608c33e6 100644
--- a/testsuites/validation/tc-clock-get-uptime.c
+++ b/testsuites/validation/tc-clock-get-uptime.c
@@ -3,11 +3,11 @@
/**
* @file
*
- * @ingroup RTEMSTestCaseRtemsClockReqGetUptime
+ * @ingroup RtemsClockReqGetUptime
*/
/*
- * Copyright (C) 2021 embedded brains GmbH (http://www.embedded-brains.de)
+ * Copyright (C) 2021 embedded brains GmbH & Co. KG
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
@@ -57,10 +57,9 @@
#include <rtems/test.h>
/**
- * @defgroup RTEMSTestCaseRtemsClockReqGetUptime \
- * spec:/rtems/clock/req/get-uptime
+ * @defgroup RtemsClockReqGetUptime spec:/rtems/clock/req/get-uptime
*
- * @ingroup RTEMSTestSuiteTestsuitesValidationNoClock0
+ * @ingroup TestsuitesValidationNoClock0
*
* @{
*/
diff --git a/testsuites/validation/tc-clock-nanosleep.c b/testsuites/validation/tc-clock-nanosleep.c
index 2857d8e274..514f5376ba 100644
--- a/testsuites/validation/tc-clock-nanosleep.c
+++ b/testsuites/validation/tc-clock-nanosleep.c
@@ -3,11 +3,11 @@
/**
* @file
*
- * @ingroup RTEMSTestCaseCReqClockNanosleep
+ * @ingroup CReqClockNanosleep
*/
/*
- * Copyright (C) 2021 embedded brains GmbH (http://www.embedded-brains.de)
+ * Copyright (C) 2021 embedded brains GmbH & Co. KG
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
@@ -64,9 +64,9 @@
#include <rtems/test.h>
/**
- * @defgroup RTEMSTestCaseCReqClockNanosleep spec:/c/req/clock-nanosleep
+ * @defgroup CReqClockNanosleep spec:/c/req/clock-nanosleep
*
- * @ingroup RTEMSTestSuiteTestsuitesValidationNoClock0
+ * @ingroup TestsuitesValidationNoClock0
*
* @{
*/
@@ -166,29 +166,29 @@ typedef struct {
/**
* @brief This member provides the scheduler operation records.
*/
- T_scheduler_log_4 scheduler_log;;
+ T_scheduler_log_4 scheduler_log;
/**
* @brief This member contains the CLOCK_REALTIME value before the
* clock_nanosleep() call.
*/
- struct timespec now_realtime;;
+ struct timespec now_realtime;
/**
* @brief This member contains the CLOCK_MONOTONIC value before the
* clock_nanosleep() call.
*/
- struct timespec now_monotonic;;
+ struct timespec now_monotonic;
/**
* @brief This member contains the worker task identifier.
*/
- rtems_id worker_id;;
+ rtems_id worker_id;
/**
* @brief This member contains the timer information of the worker task.
*/
- TaskTimerInfo timer_info;;
+ TaskTimerInfo timer_info;
/**
* @brief This member provides the object referenced by the ``rqtp``
@@ -325,14 +325,20 @@ static void Worker( rtems_task_argument arg )
while ( true ) {
T_scheduler_log *log;
+ uint32_t counter;
SuspendSelf();
log = T_scheduler_record_4( &ctx->scheduler_log );
T_null( log );
- _Timecounter_Getnanotime( &ctx->now_realtime );
- _Timecounter_Getnanouptime( &ctx->now_monotonic );
+ counter = GetTimecountCounter();
+ _Timecounter_Nanotime( &ctx->now_realtime );
+ SetTimecountCounter( counter );
+
+ counter = GetTimecountCounter();
+ _Timecounter_Nanouptime( &ctx->now_monotonic );
+ SetTimecountCounter( counter );
ctx->status = clock_nanosleep(
ctx->clock_id,
@@ -424,7 +430,7 @@ static void CReqClockNanosleep_Pre_RQTp_Prepare(
case CReqClockNanosleep_Pre_RQTp_Null: {
/*
- * While the ``rqtp parameter is equal to NULL.
+ * While the ``rqtp`` parameter is equal to NULL.
*/
ctx->rqtp = NULL;
break;
@@ -537,7 +543,7 @@ static void CReqClockNanosleep_Pre_RMTp_Prepare(
case CReqClockNanosleep_Pre_RMTp_Null: {
/*
- * While the ``rmtp parameter is equal to NULL.
+ * While the ``rmtp`` parameter is equal to NULL.
*/
ctx->rmtp = NULL;
break;
@@ -653,16 +659,10 @@ static void CReqClockNanosleep_Post_Expire_Check(
case CReqClockNanosleep_Post_Expire_Relative: {
/*
* The timer of the calling task shall expire at the time point specified
- * by the sum of the current time of the clock specified by the
- * ``clock_id`` parameter and the interval specified by the ``rqtp``
- * parameter.
+ * by the sum of the current time of the clock specified by
+ * CLOCK_MONOTONIC and the interval specified by the ``rqtp`` parameter.
*/
- if ( ctx->clock_id == CLOCK_REALTIME ) {
- expire = ctx->now_realtime;
- } else {
- expire = ctx->now_monotonic;
- }
-
+ expire = ctx->now_monotonic;
expire.tv_sec += ctx->rqtp_obj.tv_sec;
expire.tv_nsec += ctx->rqtp_obj.tv_nsec;
@@ -849,22 +849,10 @@ CReqClockNanosleep_Entries[] = {
CReqClockNanosleep_Post_Expire_Last,
CReqClockNanosleep_Post_Scheduler_Block, CReqClockNanosleep_Post_RMTp_Nop },
{ 0, 0, 0, 0, 0, 0, 0, CReqClockNanosleep_Post_Status_Zero,
- CReqClockNanosleep_Post_Timer_Realtime,
- CReqClockNanosleep_Post_Expire_Last,
- CReqClockNanosleep_Post_Scheduler_Block, CReqClockNanosleep_Post_RMTp_Nop },
- { 0, 0, 0, 0, 0, 0, 0, CReqClockNanosleep_Post_Status_Zero,
CReqClockNanosleep_Post_Timer_Monotonic,
CReqClockNanosleep_Post_Expire_Absolute,
CReqClockNanosleep_Post_Scheduler_Block, CReqClockNanosleep_Post_RMTp_Nop },
{ 0, 0, 0, 0, 0, 0, 0, CReqClockNanosleep_Post_Status_Zero,
- CReqClockNanosleep_Post_Timer_Inactive, CReqClockNanosleep_Post_Expire_NA,
- CReqClockNanosleep_Post_Scheduler_BlockUnblock,
- CReqClockNanosleep_Post_RMTp_Zero },
- { 0, 0, 0, 0, 0, 0, 0, CReqClockNanosleep_Post_Status_Zero,
- CReqClockNanosleep_Post_Timer_Realtime,
- CReqClockNanosleep_Post_Expire_Absolute,
- CReqClockNanosleep_Post_Scheduler_Block, CReqClockNanosleep_Post_RMTp_Nop },
- { 0, 0, 0, 0, 0, 0, 0, CReqClockNanosleep_Post_Status_Zero,
CReqClockNanosleep_Post_Timer_Monotonic,
CReqClockNanosleep_Post_Expire_Last,
CReqClockNanosleep_Post_Scheduler_Block, CReqClockNanosleep_Post_RMTp_Zero },
@@ -877,26 +865,26 @@ CReqClockNanosleep_Entries[] = {
CReqClockNanosleep_Post_Expire_Relative,
CReqClockNanosleep_Post_Scheduler_Block, CReqClockNanosleep_Post_RMTp_Nop },
{ 0, 0, 0, 0, 0, 0, 0, CReqClockNanosleep_Post_Status_Zero,
- CReqClockNanosleep_Post_Timer_Realtime,
- CReqClockNanosleep_Post_Expire_Last,
- CReqClockNanosleep_Post_Scheduler_Block, CReqClockNanosleep_Post_RMTp_Zero },
+ CReqClockNanosleep_Post_Timer_Inactive, CReqClockNanosleep_Post_Expire_NA,
+ CReqClockNanosleep_Post_Scheduler_BlockUnblock,
+ CReqClockNanosleep_Post_RMTp_Zero },
{ 0, 0, 0, 0, 0, 0, 0, CReqClockNanosleep_Post_Status_Zero,
CReqClockNanosleep_Post_Timer_Realtime,
- CReqClockNanosleep_Post_Expire_Relative,
- CReqClockNanosleep_Post_Scheduler_Block, CReqClockNanosleep_Post_RMTp_Zero },
+ CReqClockNanosleep_Post_Expire_Last,
+ CReqClockNanosleep_Post_Scheduler_Block, CReqClockNanosleep_Post_RMTp_Nop },
{ 0, 0, 0, 0, 0, 0, 0, CReqClockNanosleep_Post_Status_Zero,
CReqClockNanosleep_Post_Timer_Realtime,
- CReqClockNanosleep_Post_Expire_Relative,
+ CReqClockNanosleep_Post_Expire_Absolute,
CReqClockNanosleep_Post_Scheduler_Block, CReqClockNanosleep_Post_RMTp_Nop }
};
static const uint8_t
CReqClockNanosleep_Map[] = {
- 6, 6, 8, 8, 10, 10, 6, 6, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 7, 2, 13, 8, 14, 15, 11, 6, 7, 2, 7, 2, 7, 2, 7, 2, 3,
- 0, 3, 0, 3, 0, 3, 0, 3, 0, 3, 0, 3, 0, 3, 0, 6, 6, 9, 9, 12, 12, 6, 6, 2, 2,
- 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 2, 16,
- 9, 17, 18, 11, 6, 7, 2, 7, 2, 7, 2, 7, 2, 3, 0, 3, 0, 3, 0, 3, 0, 3, 0, 3, 0,
+ 6, 6, 8, 8, 9, 9, 6, 6, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 7, 2, 10, 8, 11, 12, 13, 6, 7, 2, 7, 2, 7, 2, 7, 2, 3, 0,
+ 3, 0, 3, 0, 3, 0, 3, 0, 3, 0, 3, 0, 3, 0, 6, 6, 14, 14, 15, 15, 6, 6, 2, 2,
+ 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 2, 10,
+ 8, 11, 12, 13, 6, 7, 2, 7, 2, 7, 2, 7, 2, 3, 0, 3, 0, 3, 0, 3, 0, 3, 0, 3, 0,
3, 0, 3, 0, 4, 4, 4, 4, 5, 5, 5, 5, 4, 4, 4, 4, 5, 5, 5, 5, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 4, 4, 4, 4, 5, 5, 5, 5, 4, 4, 4, 4, 5, 5, 5, 5,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1
diff --git a/testsuites/validation/tc-clock-set.c b/testsuites/validation/tc-clock-set.c
index 55012dffd3..0ed631004b 100644
--- a/testsuites/validation/tc-clock-set.c
+++ b/testsuites/validation/tc-clock-set.c
@@ -3,11 +3,11 @@
/**
* @file
*
- * @ingroup RTEMSTestCaseRtemsClockReqSet
+ * @ingroup RtemsClockReqSet
*/
/*
- * Copyright (C) 2021 embedded brains GmbH (http://www.embedded-brains.de)
+ * Copyright (C) 2021 embedded brains GmbH & Co. KG
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
@@ -58,9 +58,9 @@
#include <rtems/test.h>
/**
- * @defgroup RTEMSTestCaseRtemsClockReqSet spec:/rtems/clock/req/set
+ * @defgroup RtemsClockReqSet spec:/rtems/clock/req/set
*
- * @ingroup RTEMSTestSuiteTestsuitesValidationNoClock0
+ * @ingroup TestsuitesValidationNoClock0
*
* @{
*/
diff --git a/testsuites/validation/tc-clock.c b/testsuites/validation/tc-clock.c
index b0592c2b26..7e21e6d77c 100644
--- a/testsuites/validation/tc-clock.c
+++ b/testsuites/validation/tc-clock.c
@@ -3,11 +3,11 @@
/**
* @file
*
- * @ingroup RTEMSTestCaseRtemsClockValClock
+ * @ingroup RtemsClockValClock
*/
/*
- * Copyright (C) 2021 embedded brains GmbH (http://www.embedded-brains.de)
+ * Copyright (C) 2021, 2022 embedded brains GmbH & Co. KG
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
@@ -60,19 +60,30 @@
#include <rtems/test.h>
/**
- * @defgroup RTEMSTestCaseRtemsClockValClock spec:/rtems/clock/val/clock
+ * @defgroup RtemsClockValClock spec:/rtems/clock/val/clock
*
- * @ingroup RTEMSTestSuiteTestsuitesValidationNoClock0
+ * @ingroup TestsuitesValidationNoClock0
*
* @brief Tests some @ref RTEMSAPIClassicClock directives.
*
* This test case performs the following actions:
*
- * - Use the rtems_clock_get_ticks_since_boot() function.
+ * - Use the rtems_clock_get_ticks_since_boot() directive before and after
+ * exactly one clock tick.
*
* - Check that clock tick gets incremented.
*
- * - Use the rtems_clock_get_ticks_per_second() function.
+ * - Use the rtems_clock_get_ticks_since_boot() directive before and after
+ * exactly one clock tick.
+ *
+ * - Check that clock tick gets incremented.
+ *
+ * - Use the rtems_clock_get_ticks_per_second() directive.
+ *
+ * - Check that rtems_clock_get_ticks_per_second() actually returns 1us /
+ * CONFIGURE_MICROSECONDS_PER_TICK.
+ *
+ * - Use the rtems_clock_get_ticks_per_second() directive.
*
* - Check that rtems_clock_get_ticks_per_second() actually returns 1us /
* CONFIGURE_MICROSECONDS_PER_TICK.
@@ -81,43 +92,77 @@
*/
/**
- * @brief Use the rtems_clock_get_ticks_since_boot() function.
+ * @brief Use the rtems_clock_get_ticks_since_boot() directive before and after
+ * exactly one clock tick.
*/
static void RtemsClockValClock_Action_0( void )
{
rtems_interval result_0;
rtems_interval result_1;
- int32_t difference; /* Note: rtems_interval = uint32_t (unsigned!) */
result_0 = rtems_clock_get_ticks_since_boot();
ClockTick();
result_1 = rtems_clock_get_ticks_since_boot();
+
/*
- * Because of the ones-complement, the overflow
- * is handled correctly. result_0 = 0xFFFFFFFF will become -1
- * and result_1 = 0x0 will become 0.
+ * Check that clock tick gets incremented.
*/
- difference = (int32_t) result_1 - (int32_t) result_0;
+ T_step_eq_u32( 0, result_1 - result_0, 1 );
+}
+
+/**
+ * @brief Use the rtems_clock_get_ticks_since_boot() directive before and after
+ * exactly one clock tick.
+ */
+static void RtemsClockValClock_Action_1( void )
+{
+ rtems_interval result_0;
+ rtems_interval result_1;
+
+ #undef rtems_clock_get_ticks_since_boot
+
+ result_0 = rtems_clock_get_ticks_since_boot();
+ ClockTick();
+ result_1 = rtems_clock_get_ticks_since_boot();
/*
* Check that clock tick gets incremented.
*/
- T_step_eq_i32( 0, difference, 1 );
+ T_step_eq_u32( 1, result_1 - result_0, 1 );
}
/**
- * @brief Use the rtems_clock_get_ticks_per_second() function.
+ * @brief Use the rtems_clock_get_ticks_per_second() directive.
*/
-static void RtemsClockValClock_Action_1( void )
+static void RtemsClockValClock_Action_2( void )
{
rtems_interval result;
+
+ result = rtems_clock_get_ticks_per_second();
+
+ /*
+ * Check that rtems_clock_get_ticks_per_second() actually returns 1us /
+ * CONFIGURE_MICROSECONDS_PER_TICK.
+ */
+ T_step_eq_u32( 2, result, 1000000UL / TEST_MICROSECONDS_PER_TICK );
+}
+
+/**
+ * @brief Use the rtems_clock_get_ticks_per_second() directive.
+ */
+static void RtemsClockValClock_Action_3( void )
+{
+ rtems_interval result;
+
+ #undef rtems_clock_get_ticks_per_second
+
result = rtems_clock_get_ticks_per_second();
/*
* Check that rtems_clock_get_ticks_per_second() actually returns 1us /
* CONFIGURE_MICROSECONDS_PER_TICK.
*/
- T_step_eq_u32( 1, result, 1000000UL / TEST_MICROSECONDS_PER_TICK );
+ T_step_eq_u32( 3, result, 1000000UL / TEST_MICROSECONDS_PER_TICK );
}
/**
@@ -125,10 +170,12 @@ static void RtemsClockValClock_Action_1( void )
*/
T_TEST_CASE( RtemsClockValClock )
{
- T_plan( 2 );
+ T_plan( 4 );
RtemsClockValClock_Action_0();
RtemsClockValClock_Action_1();
+ RtemsClockValClock_Action_2();
+ RtemsClockValClock_Action_3();
}
/** @} */
diff --git a/testsuites/validation/tc-cpu-performance.c b/testsuites/validation/tc-cpu-performance.c
new file mode 100644
index 0000000000..4f090e704f
--- /dev/null
+++ b/testsuites/validation/tc-cpu-performance.c
@@ -0,0 +1,270 @@
+/* SPDX-License-Identifier: BSD-2-Clause */
+
+/**
+ * @file
+ *
+ * @ingroup ScoreCpuValPerf
+ */
+
+/*
+ * Copyright (C) 2023 embedded brains GmbH & Co. KG
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ */
+
+/*
+ * This file is part of the RTEMS quality process and was automatically
+ * generated. If you find something that needs to be fixed or
+ * worded better please post a report or patch to an RTEMS mailing list
+ * or raise a bug report:
+ *
+ * https://www.rtems.org/bugs.html
+ *
+ * For information on updating and regenerating please refer to the How-To
+ * section in the Software Requirements Engineering chapter of the
+ * RTEMS Software Engineering manual. The manual is provided as a part of
+ * a release. For development sources please refer to the online
+ * documentation at:
+ *
+ * https://docs.rtems.org
+ */
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#include <rtems/score/cpuimpl.h>
+
+#include "tx-support.h"
+
+#include <rtems/test.h>
+
+/**
+ * @defgroup ScoreCpuValPerf spec:/score/cpu/val/perf
+ *
+ * @ingroup TestsuitesPerformanceNoClock0
+ *
+ * @brief This test case provides a context to run CPU port performance tests.
+ *
+ * @{
+ */
+
+/**
+ * @brief Test context for spec:/score/cpu/val/perf test case.
+ */
+typedef struct {
+ /**
+ * @brief This member references the measure runtime context.
+ */
+ T_measure_runtime_context *context;
+
+ /**
+ * @brief This member provides the measure runtime request.
+ */
+ T_measure_runtime_request request;
+
+ /**
+ * @brief This member provides an optional measurement begin time point.
+ */
+ T_ticks begin;
+
+ /**
+ * @brief This member provides an optional measurement end time point.
+ */
+ T_ticks end;
+} ScoreCpuValPerf_Context;
+
+static ScoreCpuValPerf_Context
+ ScoreCpuValPerf_Instance;
+
+static void ScoreCpuValPerf_Setup_Context( ScoreCpuValPerf_Context *ctx )
+{
+ T_measure_runtime_config config;
+
+ memset( &config, 0, sizeof( config ) );
+ config.sample_count = 100;
+ ctx->request.arg = ctx;
+ ctx->request.flags = T_MEASURE_RUNTIME_REPORT_SAMPLES;
+ ctx->context = T_measure_runtime_create( &config );
+ T_assert_not_null( ctx->context );
+}
+
+static void ScoreCpuValPerf_Setup_Wrap( void *arg )
+{
+ ScoreCpuValPerf_Context *ctx;
+
+ ctx = arg;
+ ScoreCpuValPerf_Setup_Context( ctx );
+}
+
+static T_fixture ScoreCpuValPerf_Fixture = {
+ .setup = ScoreCpuValPerf_Setup_Wrap,
+ .stop = NULL,
+ .teardown = NULL,
+ .scope = NULL,
+ .initial_context = &ScoreCpuValPerf_Instance
+};
+
+/**
+ * @defgroup ScoreCpuReqPerfEmpty spec:/score/cpu/req/perf-empty
+ *
+ * @{
+ */
+
+/**
+ * @brief Do nothing and just return.
+ */
+static void ScoreCpuReqPerfEmpty_Body( ScoreCpuValPerf_Context *ctx )
+{
+ /* No code */
+}
+
+static void ScoreCpuReqPerfEmpty_Body_Wrap( void *arg )
+{
+ ScoreCpuValPerf_Context *ctx;
+
+ ctx = arg;
+ ScoreCpuReqPerfEmpty_Body( ctx );
+}
+
+/**
+ * @brief Discard samples interrupted by a clock tick.
+ */
+static bool ScoreCpuReqPerfEmpty_Teardown(
+ ScoreCpuValPerf_Context *ctx,
+ T_ticks *delta,
+ uint32_t tic,
+ uint32_t toc,
+ unsigned int retry
+)
+{
+ return tic == toc;
+}
+
+static bool ScoreCpuReqPerfEmpty_Teardown_Wrap(
+ void *arg,
+ T_ticks *delta,
+ uint32_t tic,
+ uint32_t toc,
+ unsigned int retry
+)
+{
+ ScoreCpuValPerf_Context *ctx;
+
+ ctx = arg;
+ return ScoreCpuReqPerfEmpty_Teardown( ctx, delta, tic, toc, retry );
+}
+
+/** @} */
+
+/**
+ * @defgroup ScoreCpuReqPerfNops spec:/score/cpu/req/perf-nops
+ *
+ * @{
+ */
+
+/**
+ * @brief Execute exactly 1000 no-operation instructions.
+ */
+static void ScoreCpuReqPerfNops_Body( ScoreCpuValPerf_Context *ctx )
+{
+ #define NOPS_10 \
+ _CPU_Instruction_no_operation(); _CPU_Instruction_no_operation(); \
+ _CPU_Instruction_no_operation(); _CPU_Instruction_no_operation(); \
+ _CPU_Instruction_no_operation(); _CPU_Instruction_no_operation(); \
+ _CPU_Instruction_no_operation(); _CPU_Instruction_no_operation(); \
+ _CPU_Instruction_no_operation(); _CPU_Instruction_no_operation();
+ #define NOPS_100 NOPS_10 NOPS_10 NOPS_10 NOPS_10 NOPS_10 NOPS_10 NOPS_10 \
+ NOPS_10 NOPS_10 NOPS_10
+ NOPS_100
+ NOPS_100
+ NOPS_100
+ NOPS_100
+ NOPS_100
+ NOPS_100
+ NOPS_100
+ NOPS_100
+ NOPS_100
+ NOPS_100
+}
+
+static void ScoreCpuReqPerfNops_Body_Wrap( void *arg )
+{
+ ScoreCpuValPerf_Context *ctx;
+
+ ctx = arg;
+ ScoreCpuReqPerfNops_Body( ctx );
+}
+
+/**
+ * @brief Discard samples interrupted by a clock tick.
+ */
+static bool ScoreCpuReqPerfNops_Teardown(
+ ScoreCpuValPerf_Context *ctx,
+ T_ticks *delta,
+ uint32_t tic,
+ uint32_t toc,
+ unsigned int retry
+)
+{
+ return tic == toc;
+}
+
+static bool ScoreCpuReqPerfNops_Teardown_Wrap(
+ void *arg,
+ T_ticks *delta,
+ uint32_t tic,
+ uint32_t toc,
+ unsigned int retry
+)
+{
+ ScoreCpuValPerf_Context *ctx;
+
+ ctx = arg;
+ return ScoreCpuReqPerfNops_Teardown( ctx, delta, tic, toc, retry );
+}
+
+/** @} */
+
+/**
+ * @fn void T_case_body_ScoreCpuValPerf( void )
+ */
+T_TEST_CASE_FIXTURE( ScoreCpuValPerf, &ScoreCpuValPerf_Fixture )
+{
+ ScoreCpuValPerf_Context *ctx;
+
+ ctx = T_fixture_context();
+
+ ctx->request.name = "ScoreCpuReqPerfEmpty";
+ ctx->request.setup = NULL;
+ ctx->request.body = ScoreCpuReqPerfEmpty_Body_Wrap;
+ ctx->request.teardown = ScoreCpuReqPerfEmpty_Teardown_Wrap;
+ T_measure_runtime( ctx->context, &ctx->request );
+
+ ctx->request.name = "ScoreCpuReqPerfNops";
+ ctx->request.setup = NULL;
+ ctx->request.body = ScoreCpuReqPerfNops_Body_Wrap;
+ ctx->request.teardown = ScoreCpuReqPerfNops_Teardown_Wrap;
+ T_measure_runtime( ctx->context, &ctx->request );
+}
+
+/** @} */
diff --git a/testsuites/validation/tc-cpuuse.c b/testsuites/validation/tc-cpuuse.c
index 0e06471ff0..f554a0b4e1 100644
--- a/testsuites/validation/tc-cpuuse.c
+++ b/testsuites/validation/tc-cpuuse.c
@@ -3,11 +3,11 @@
/**
* @file
*
- * @ingroup RTEMSTestCaseRtemsCpuuseValCpuuse
+ * @ingroup RtemsCpuuseValCpuuse
*/
/*
- * Copyright (C) 2021 embedded brains GmbH (http://www.embedded-brains.de)
+ * Copyright (C) 2021 embedded brains GmbH & Co. KG
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
@@ -60,9 +60,9 @@
#include <rtems/test.h>
/**
- * @defgroup RTEMSTestCaseRtemsCpuuseValCpuuse spec:/rtems/cpuuse/val/cpuuse
+ * @defgroup RtemsCpuuseValCpuuse spec:/rtems/cpuuse/val/cpuuse
*
- * @ingroup RTEMSTestSuiteTestsuitesValidationNoClock0
+ * @ingroup TestsuitesValidationNoClock0
*
* @brief Tests the CPU usage reporting and reset.
*
@@ -97,6 +97,21 @@ static void RtemsCpuuseValCpuuse_Action_0( void )
Thread_Control *other;
Timestamp_Control cpu_usage_self;
Timestamp_Control cpu_usage_other;
+ uint32_t idle_tasks;
+ uint32_t cpu_index;
+
+ idle_tasks = 0;
+
+ for ( cpu_index = 0; cpu_index < rtems_scheduler_get_processor_maximum(); ++cpu_index ) {
+ rtems_status_code sc;
+ rtems_id unused;
+
+ sc = rtems_scheduler_ident_by_processor( cpu_index, &unused );
+
+ if ( sc == RTEMS_SUCCESSFUL ) {
+ ++idle_tasks;
+ }
+ }
id = CreateTask( "WORK", GetSelfPriority() );
StartTask( id, Worker, NULL );
@@ -128,7 +143,7 @@ static void RtemsCpuuseValCpuuse_Action_0( void )
T_eq_i64( _Thread_Get_CPU_time_used_after_last_reset( self ), 4295 );
T_eq_i64(
_Thread_Get_CPU_time_used( self ),
- cpu_usage_self + 12885 + rtems_scheduler_get_processor_maximum() * 4295
+ cpu_usage_self + 12885 + 4295 * idle_tasks
);
T_eq_i64( _Thread_Get_CPU_time_used_after_last_reset( other ), 0 );
diff --git a/testsuites/validation/tc-dev-clock-xil-ttc.c b/testsuites/validation/tc-dev-clock-xil-ttc.c
new file mode 100644
index 0000000000..70f49a4cc6
--- /dev/null
+++ b/testsuites/validation/tc-dev-clock-xil-ttc.c
@@ -0,0 +1,136 @@
+/* SPDX-License-Identifier: BSD-2-Clause */
+
+/**
+ * @file
+ *
+ * @ingroup DevClockXilTtcValTickCatchUp
+ */
+
+/*
+ * Copyright (C) 2024 embedded brains GmbH & Co. KG
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ */
+
+/*
+ * This file is part of the RTEMS quality process and was automatically
+ * generated. If you find something that needs to be fixed or
+ * worded better please post a report or patch to an RTEMS mailing list
+ * or raise a bug report:
+ *
+ * https://www.rtems.org/bugs.html
+ *
+ * For information on updating and regenerating please refer to the How-To
+ * section in the Software Requirements Engineering chapter of the
+ * RTEMS Software Engineering manual. The manual is provided as a part of
+ * a release. For development sources please refer to the online
+ * documentation at:
+ *
+ * https://docs.rtems.org
+ */
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#include <rtems.h>
+#include <sys/time.h>
+
+#include <rtems/test.h>
+
+/**
+ * @defgroup DevClockXilTtcValTickCatchUp \
+ * spec:/dev/clock/xil-ttc/val/tick-catch-up
+ *
+ * @ingroup TestsuitesBspsValidationBsp0
+ *
+ * @brief Tests some Xilinx TTC clock driver functions.
+ *
+ * This test case performs the following actions:
+ *
+ * - Synchronize with the clock tick. Disable interrupts. Busy wait three
+ * clock tick intervals. Enable interrupts.
+ *
+ * - Check that exactly three clock ticks happened once interrupts are
+ * enabled again.
+ *
+ * @{
+ */
+
+/**
+ * @brief Synchronize with the clock tick. Disable interrupts. Busy wait
+ * three clock tick intervals. Enable interrupts.
+ */
+static void DevClockXilTtcValTickCatchUp_Action_0( void )
+{
+ uint32_t ns_per_tick;
+ uint64_t three_ticks_interval;
+ rtems_interrupt_level level;
+ rtems_interval t_0;
+ rtems_interval t_1;
+ rtems_interval t_2;
+ uint64_t m_0;
+ uint64_t m_1;
+
+ ns_per_tick = rtems_configuration_get_nanoseconds_per_tick();
+ three_ticks_interval = ( 7 * (uint64_t) nstosbt( ns_per_tick ) ) / 2;
+ t_0 = rtems_clock_get_ticks_since_boot();
+
+ /* Synchronize with clock tick */
+ do {
+ t_1 = rtems_clock_get_ticks_since_boot();
+ m_0 = (uint64_t) rtems_clock_get_monotonic_sbintime();
+ } while ( t_0 == t_1 );
+
+ rtems_interrupt_local_disable( level );
+
+ do {
+ m_1 = (uint64_t) rtems_clock_get_monotonic_sbintime();
+ } while ( m_1 - m_0 <= three_ticks_interval );
+
+ rtems_interrupt_local_enable( level );
+
+ /*
+ * Make sure the clock interrupt was serviced after the interrupt enable.
+ */
+ do {
+ t_2 = rtems_clock_get_ticks_since_boot();
+ } while ( t_1 == t_2 );
+
+ /*
+ * Check that exactly three clock ticks happened once interrupts are enabled
+ * again.
+ */
+ T_step_eq_u32( 0, t_2 - t_1, 3 );
+}
+
+/**
+ * @fn void T_case_body_DevClockXilTtcValTickCatchUp( void )
+ */
+T_TEST_CASE( DevClockXilTtcValTickCatchUp )
+{
+ T_plan( 1 );
+
+ DevClockXilTtcValTickCatchUp_Action_0();
+}
+
+/** @} */
diff --git a/testsuites/validation/tc-dev-grlib-apbuart-inbyte-nonblocking.c b/testsuites/validation/tc-dev-grlib-apbuart-inbyte-nonblocking.c
new file mode 100644
index 0000000000..b33b6f1a25
--- /dev/null
+++ b/testsuites/validation/tc-dev-grlib-apbuart-inbyte-nonblocking.c
@@ -0,0 +1,348 @@
+/* SPDX-License-Identifier: BSD-2-Clause */
+
+/**
+ * @file
+ *
+ * @ingroup DevGrlibReqApbuartInbyteNonblocking
+ */
+
+/*
+ * Copyright (C) 2021 embedded brains GmbH & Co. KG
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ */
+
+/*
+ * This file is part of the RTEMS quality process and was automatically
+ * generated. If you find something that needs to be fixed or
+ * worded better please post a report or patch to an RTEMS mailing list
+ * or raise a bug report:
+ *
+ * https://www.rtems.org/bugs.html
+ *
+ * For information on updating and regenerating please refer to the How-To
+ * section in the Software Requirements Engineering chapter of the
+ * RTEMS Software Engineering manual. The manual is provided as a part of
+ * a release. For development sources please refer to the online
+ * documentation at:
+ *
+ * https://docs.rtems.org
+ */
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#include <string.h>
+#include <grlib/apbuart.h>
+
+#include <rtems/test.h>
+
+/**
+ * @defgroup DevGrlibReqApbuartInbyteNonblocking \
+ * spec:/dev/grlib/req/apbuart-inbyte-nonblocking
+ *
+ * @ingroup TestsuitesBspsValidationBsp0
+ *
+ * @{
+ */
+
+typedef enum {
+ DevGrlibReqApbuartInbyteNonblocking_Pre_DataReady_Yes,
+ DevGrlibReqApbuartInbyteNonblocking_Pre_DataReady_No,
+ DevGrlibReqApbuartInbyteNonblocking_Pre_DataReady_NA
+} DevGrlibReqApbuartInbyteNonblocking_Pre_DataReady;
+
+typedef enum {
+ DevGrlibReqApbuartInbyteNonblocking_Post_Result_Data,
+ DevGrlibReqApbuartInbyteNonblocking_Post_Result_MinusOne,
+ DevGrlibReqApbuartInbyteNonblocking_Post_Result_NA
+} DevGrlibReqApbuartInbyteNonblocking_Post_Result;
+
+typedef enum {
+ DevGrlibReqApbuartInbyteNonblocking_Post_ErrorFlags_Cleared,
+ DevGrlibReqApbuartInbyteNonblocking_Post_ErrorFlags_NA
+} DevGrlibReqApbuartInbyteNonblocking_Post_ErrorFlags;
+
+typedef struct {
+ uint8_t Skip : 1;
+ uint8_t Pre_DataReady_NA : 1;
+ uint8_t Post_Result : 2;
+ uint8_t Post_ErrorFlags : 1;
+} DevGrlibReqApbuartInbyteNonblocking_Entry;
+
+/**
+ * @brief Test context for spec:/dev/grlib/req/apbuart-inbyte-nonblocking test
+ * case.
+ */
+typedef struct {
+ /**
+ * @brief This member provides the APBUART register block.
+ */
+ apbuart regs;
+
+ /**
+ * @brief This member contains the return value of the
+ * apbuart_inbyte_nonblocking() call.
+ */
+ int result;
+
+ struct {
+ /**
+ * @brief This member defines the pre-condition states for the next action.
+ */
+ size_t pcs[ 1 ];
+
+ /**
+ * @brief If this member is true, then the test action loop is executed.
+ */
+ bool in_action_loop;
+
+ /**
+ * @brief This member contains the next transition map index.
+ */
+ size_t index;
+
+ /**
+ * @brief This member contains the current transition map entry.
+ */
+ DevGrlibReqApbuartInbyteNonblocking_Entry entry;
+
+ /**
+ * @brief If this member is true, then the current transition variant
+ * should be skipped.
+ */
+ bool skip;
+ } Map;
+} DevGrlibReqApbuartInbyteNonblocking_Context;
+
+static DevGrlibReqApbuartInbyteNonblocking_Context
+ DevGrlibReqApbuartInbyteNonblocking_Instance;
+
+static const char * const DevGrlibReqApbuartInbyteNonblocking_PreDesc_DataReady[] = {
+ "Yes",
+ "No",
+ "NA"
+};
+
+static const char * const * const DevGrlibReqApbuartInbyteNonblocking_PreDesc[] = {
+ DevGrlibReqApbuartInbyteNonblocking_PreDesc_DataReady,
+ NULL
+};
+
+static void DevGrlibReqApbuartInbyteNonblocking_Pre_DataReady_Prepare(
+ DevGrlibReqApbuartInbyteNonblocking_Context *ctx,
+ DevGrlibReqApbuartInbyteNonblocking_Pre_DataReady state
+)
+{
+ switch ( state ) {
+ case DevGrlibReqApbuartInbyteNonblocking_Pre_DataReady_Yes: {
+ /*
+ * While the data ready flag is set in the status register of the
+ * register block specified by ``regs`` parameter.
+ */
+ ctx->regs.status |= APBUART_STATUS_DR;
+ break;
+ }
+
+ case DevGrlibReqApbuartInbyteNonblocking_Pre_DataReady_No: {
+ /*
+ * While the data ready flag is cleared in the status register of the
+ * register block specified by ``regs`` parameter.
+ */
+ ctx->regs.status &= ~APBUART_STATUS_DR;
+ break;
+ }
+
+ case DevGrlibReqApbuartInbyteNonblocking_Pre_DataReady_NA:
+ break;
+ }
+}
+
+static void DevGrlibReqApbuartInbyteNonblocking_Post_Result_Check(
+ DevGrlibReqApbuartInbyteNonblocking_Context *ctx,
+ DevGrlibReqApbuartInbyteNonblocking_Post_Result state
+)
+{
+ switch ( state ) {
+ case DevGrlibReqApbuartInbyteNonblocking_Post_Result_Data: {
+ /*
+ * The return value of apbuart_inbyte_nonblocking() shall be the data
+ * read from the data register of the register block specified by
+ * ``regs``.
+ */
+ T_eq_int( ctx->result, 0xff );
+ break;
+ }
+
+ case DevGrlibReqApbuartInbyteNonblocking_Post_Result_MinusOne: {
+ /*
+ * The return value of apbuart_inbyte_nonblocking() shall be minus one.
+ */
+ T_eq_int( ctx->result, -1 );
+ break;
+ }
+
+ case DevGrlibReqApbuartInbyteNonblocking_Post_Result_NA:
+ break;
+ }
+}
+
+static void DevGrlibReqApbuartInbyteNonblocking_Post_ErrorFlags_Check(
+ DevGrlibReqApbuartInbyteNonblocking_Context *ctx,
+ DevGrlibReqApbuartInbyteNonblocking_Post_ErrorFlags state
+)
+{
+ switch ( state ) {
+ case DevGrlibReqApbuartInbyteNonblocking_Post_ErrorFlags_Cleared: {
+ /*
+ * The framing error, parity error, overrun, and break received flags in
+ * the status register of the register block specified by ``regs`` shall
+ * be cleared.
+ */
+ T_eq_u32( ctx->regs.status & 0x78, 0 );
+ break;
+ }
+
+ case DevGrlibReqApbuartInbyteNonblocking_Post_ErrorFlags_NA:
+ break;
+ }
+}
+
+static void DevGrlibReqApbuartInbyteNonblocking_Prepare(
+ DevGrlibReqApbuartInbyteNonblocking_Context *ctx
+)
+{
+ memset( &ctx->regs, 0, sizeof( ctx->regs ) );
+ ctx->regs.status = 0x78;
+ ctx->regs.data = 0xff;
+}
+
+static void DevGrlibReqApbuartInbyteNonblocking_Action(
+ DevGrlibReqApbuartInbyteNonblocking_Context *ctx
+)
+{
+ ctx->result = apbuart_inbyte_nonblocking( &ctx->regs );
+}
+
+static const DevGrlibReqApbuartInbyteNonblocking_Entry
+DevGrlibReqApbuartInbyteNonblocking_Entries[] = {
+ { 0, 0, DevGrlibReqApbuartInbyteNonblocking_Post_Result_Data,
+ DevGrlibReqApbuartInbyteNonblocking_Post_ErrorFlags_Cleared },
+ { 0, 0, DevGrlibReqApbuartInbyteNonblocking_Post_Result_MinusOne,
+ DevGrlibReqApbuartInbyteNonblocking_Post_ErrorFlags_Cleared }
+};
+
+static const uint8_t
+DevGrlibReqApbuartInbyteNonblocking_Map[] = {
+ 0, 1
+};
+
+static size_t DevGrlibReqApbuartInbyteNonblocking_Scope(
+ void *arg,
+ char *buf,
+ size_t n
+)
+{
+ DevGrlibReqApbuartInbyteNonblocking_Context *ctx;
+
+ ctx = arg;
+
+ if ( ctx->Map.in_action_loop ) {
+ return T_get_scope(
+ DevGrlibReqApbuartInbyteNonblocking_PreDesc,
+ buf,
+ n,
+ ctx->Map.pcs
+ );
+ }
+
+ return 0;
+}
+
+static T_fixture DevGrlibReqApbuartInbyteNonblocking_Fixture = {
+ .setup = NULL,
+ .stop = NULL,
+ .teardown = NULL,
+ .scope = DevGrlibReqApbuartInbyteNonblocking_Scope,
+ .initial_context = &DevGrlibReqApbuartInbyteNonblocking_Instance
+};
+
+static inline DevGrlibReqApbuartInbyteNonblocking_Entry
+DevGrlibReqApbuartInbyteNonblocking_PopEntry(
+ DevGrlibReqApbuartInbyteNonblocking_Context *ctx
+)
+{
+ size_t index;
+
+ index = ctx->Map.index;
+ ctx->Map.index = index + 1;
+ return DevGrlibReqApbuartInbyteNonblocking_Entries[
+ DevGrlibReqApbuartInbyteNonblocking_Map[ index ]
+ ];
+}
+
+static void DevGrlibReqApbuartInbyteNonblocking_TestVariant(
+ DevGrlibReqApbuartInbyteNonblocking_Context *ctx
+)
+{
+ DevGrlibReqApbuartInbyteNonblocking_Pre_DataReady_Prepare(
+ ctx,
+ ctx->Map.pcs[ 0 ]
+ );
+ DevGrlibReqApbuartInbyteNonblocking_Action( ctx );
+ DevGrlibReqApbuartInbyteNonblocking_Post_Result_Check(
+ ctx,
+ ctx->Map.entry.Post_Result
+ );
+ DevGrlibReqApbuartInbyteNonblocking_Post_ErrorFlags_Check(
+ ctx,
+ ctx->Map.entry.Post_ErrorFlags
+ );
+}
+
+/**
+ * @fn void T_case_body_DevGrlibReqApbuartInbyteNonblocking( void )
+ */
+T_TEST_CASE_FIXTURE(
+ DevGrlibReqApbuartInbyteNonblocking,
+ &DevGrlibReqApbuartInbyteNonblocking_Fixture
+)
+{
+ DevGrlibReqApbuartInbyteNonblocking_Context *ctx;
+
+ ctx = T_fixture_context();
+ ctx->Map.in_action_loop = true;
+ ctx->Map.index = 0;
+
+ for (
+ ctx->Map.pcs[ 0 ] = DevGrlibReqApbuartInbyteNonblocking_Pre_DataReady_Yes;
+ ctx->Map.pcs[ 0 ] < DevGrlibReqApbuartInbyteNonblocking_Pre_DataReady_NA;
+ ++ctx->Map.pcs[ 0 ]
+ ) {
+ ctx->Map.entry = DevGrlibReqApbuartInbyteNonblocking_PopEntry( ctx );
+ DevGrlibReqApbuartInbyteNonblocking_Prepare( ctx );
+ DevGrlibReqApbuartInbyteNonblocking_TestVariant( ctx );
+ }
+}
+
+/** @} */
diff --git a/testsuites/validation/tc-dev-grlib-io.c b/testsuites/validation/tc-dev-grlib-io.c
new file mode 100644
index 0000000000..5bfc3fcfab
--- /dev/null
+++ b/testsuites/validation/tc-dev-grlib-io.c
@@ -0,0 +1,295 @@
+/* SPDX-License-Identifier: BSD-2-Clause */
+
+/**
+ * @file
+ *
+ * @ingroup DevGrlibValIo
+ */
+
+/*
+ * Copyright (C) 2021 embedded brains GmbH & Co. KG
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ */
+
+/*
+ * This file is part of the RTEMS quality process and was automatically
+ * generated. If you find something that needs to be fixed or
+ * worded better please post a report or patch to an RTEMS mailing list
+ * or raise a bug report:
+ *
+ * https://www.rtems.org/bugs.html
+ *
+ * For information on updating and regenerating please refer to the How-To
+ * section in the Software Requirements Engineering chapter of the
+ * RTEMS Software Engineering manual. The manual is provided as a part of
+ * a release. For development sources please refer to the online
+ * documentation at:
+ *
+ * https://docs.rtems.org
+ */
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#include <string.h>
+#include <grlib/apbuart.h>
+#include <grlib/io.h>
+
+#include "tx-support.h"
+
+#include <rtems/test.h>
+
+/**
+ * @defgroup DevGrlibValIo spec:/dev/grlib/val/io
+ *
+ * @ingroup TestsuitesBspsValidationBsp0
+ *
+ * @brief Tests some @ref RTEMSDeviceGRLIB directives.
+ *
+ * This test case performs the following actions:
+ *
+ * - Call grlib_load_8() to load a prepared value.
+ *
+ * - Check that the returned value is equal to the prepared value.
+ *
+ * - Call grlib_load_16() to load a prepared value.
+ *
+ * - Check that the returned value is equal to the prepared value.
+ *
+ * - Call grlib_load_32() to load a prepared value.
+ *
+ * - Check that the returned value is equal to the prepared value.
+ *
+ * - Call grlib_load_64() to load a prepared value.
+ *
+ * - Check that the returned value is equal to the prepared value.
+ *
+ * - Call grlib_store_8() to store a value to an object.
+ *
+ * - Check that the value of the object is equal to the stored value.
+ *
+ * - Call grlib_store_16() to store a value to an object.
+ *
+ * - Check that the value of the object is equal to the stored value.
+ *
+ * - Call grlib_store_32() to store a value to an object.
+ *
+ * - Check that the value of the object is equal to the stored value.
+ *
+ * - Call grlib_store_64() to store a value to an object.
+ *
+ * - Check that the value of the object is equal to the stored value.
+ *
+ * - Call apbuart_outbyte_polled() to store a character to the data register.
+ * The transmitter FIFO shall be initially non-empty. The status is checked
+ * by apbuart_outbyte_wait().
+ *
+ * - Check that the transmitter FIFO empty flag was set by ApbuartIORelax().
+ *
+ * - Check that the data register was written by apbuart_outbyte_polled().
+ *
+ * @{
+ */
+
+static void ApbuartIORelax( void *arg )
+{
+ apbuart *regs;
+
+ regs = arg;
+ regs->status = 0x4;
+ T_quiet_eq_u32( regs->data, 0 );
+}
+
+/**
+ * @brief Call grlib_load_8() to load a prepared value.
+ */
+static void DevGrlibValIo_Action_0( void )
+{
+ uint8_t reg_8;
+ uint8_t val_8;
+
+ reg_8 = 0x81;
+ val_8 = grlib_load_8( &reg_8 );
+
+ /*
+ * Check that the returned value is equal to the prepared value.
+ */
+ T_step_eq_u8( 0, val_8, 0x81 );
+}
+
+/**
+ * @brief Call grlib_load_16() to load a prepared value.
+ */
+static void DevGrlibValIo_Action_1( void )
+{
+ uint16_t reg_16;
+ uint16_t val_16;
+
+ reg_16 = 0x8001;
+ val_16 = grlib_load_16( &reg_16 );
+
+ /*
+ * Check that the returned value is equal to the prepared value.
+ */
+ T_step_eq_u16( 1, val_16, 0x8001 );
+}
+
+/**
+ * @brief Call grlib_load_32() to load a prepared value.
+ */
+static void DevGrlibValIo_Action_2( void )
+{
+ uint32_t reg_32;
+ uint32_t val_32;
+
+ reg_32 = 0x80000001;
+ val_32 = grlib_load_32( &reg_32 );
+
+ /*
+ * Check that the returned value is equal to the prepared value.
+ */
+ T_step_eq_u32( 2, val_32, 0x80000001 );
+}
+
+/**
+ * @brief Call grlib_load_64() to load a prepared value.
+ */
+static void DevGrlibValIo_Action_3( void )
+{
+ uint64_t reg_64;
+ uint64_t val_64;
+
+ reg_64 = 0x8000000000000001;
+ val_64 = grlib_load_64( &reg_64 );
+
+ /*
+ * Check that the returned value is equal to the prepared value.
+ */
+ T_step_eq_u64( 3, val_64, 0x8000000000000001 );
+}
+
+/**
+ * @brief Call grlib_store_8() to store a value to an object.
+ */
+static void DevGrlibValIo_Action_4( void )
+{
+ uint8_t reg_8;
+
+ grlib_store_8( &reg_8, 0x81 );
+
+ /*
+ * Check that the value of the object is equal to the stored value.
+ */
+ T_step_eq_u8( 4, reg_8, 0x81 );
+}
+
+/**
+ * @brief Call grlib_store_16() to store a value to an object.
+ */
+static void DevGrlibValIo_Action_5( void )
+{
+ uint16_t reg_16;
+
+ grlib_store_16( &reg_16, 0x8001 );
+
+ /*
+ * Check that the value of the object is equal to the stored value.
+ */
+ T_step_eq_u16( 5, reg_16, 0x8001 );
+}
+
+/**
+ * @brief Call grlib_store_32() to store a value to an object.
+ */
+static void DevGrlibValIo_Action_6( void )
+{
+ uint32_t reg_32;
+
+ grlib_store_32( &reg_32, 0x80000001 );
+
+ /*
+ * Check that the value of the object is equal to the stored value.
+ */
+ T_step_eq_u32( 6, reg_32, 0x80000001 );
+}
+
+/**
+ * @brief Call grlib_store_64() to store a value to an object.
+ */
+static void DevGrlibValIo_Action_7( void )
+{
+ uint64_t reg_64;
+
+ grlib_store_64( &reg_64, 0x8000000000000001 );
+
+ /*
+ * Check that the value of the object is equal to the stored value.
+ */
+ T_step_eq_u64( 7, reg_64, 0x8000000000000001 );
+}
+
+/**
+ * @brief Call apbuart_outbyte_polled() to store a character to the data
+ * register. The transmitter FIFO shall be initially non-empty. The status
+ * is checked by apbuart_outbyte_wait().
+ */
+static void DevGrlibValIo_Action_8( void )
+{
+ apbuart regs;
+
+ memset( &regs, 0, sizeof( regs ) );
+ SetIORelaxHandler( ApbuartIORelax, &regs );
+ apbuart_outbyte_polled( &regs, (char) 0xff );
+ SetIORelaxHandler( NULL, NULL );
+
+ /*
+ * Check that the transmitter FIFO empty flag was set by ApbuartIORelax().
+ */
+ T_step_eq_u32( 8, regs.status, APBUART_STATUS_TE );
+
+ /*
+ * Check that the data register was written by apbuart_outbyte_polled().
+ */
+ T_step_eq_u32( 9, regs.data, 0xff );
+}
+
+/**
+ * @fn void T_case_body_DevGrlibValIo( void )
+ */
+T_TEST_CASE( DevGrlibValIo )
+{
+ T_plan( 10 );
+
+ DevGrlibValIo_Action_0();
+ DevGrlibValIo_Action_1();
+ DevGrlibValIo_Action_2();
+ DevGrlibValIo_Action_3();
+ DevGrlibValIo_Action_4();
+ DevGrlibValIo_Action_5();
+ DevGrlibValIo_Action_6();
+ DevGrlibValIo_Action_7();
+ DevGrlibValIo_Action_8();
+}
+
+/** @} */
diff --git a/testsuites/validation/tc-dev-grlib-irqamp-get-timestamp.c b/testsuites/validation/tc-dev-grlib-irqamp-get-timestamp.c
new file mode 100644
index 0000000000..a064c479b9
--- /dev/null
+++ b/testsuites/validation/tc-dev-grlib-irqamp-get-timestamp.c
@@ -0,0 +1,304 @@
+/* SPDX-License-Identifier: BSD-2-Clause */
+
+/**
+ * @file
+ *
+ * @ingroup DevGrlibReqIrqampGetTimestamp
+ */
+
+/*
+ * Copyright (C) 2021 embedded brains GmbH & Co. KG
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ */
+
+/*
+ * This file is part of the RTEMS quality process and was automatically
+ * generated. If you find something that needs to be fixed or
+ * worded better please post a report or patch to an RTEMS mailing list
+ * or raise a bug report:
+ *
+ * https://www.rtems.org/bugs.html
+ *
+ * For information on updating and regenerating please refer to the How-To
+ * section in the Software Requirements Engineering chapter of the
+ * RTEMS Software Engineering manual. The manual is provided as a part of
+ * a release. For development sources please refer to the online
+ * documentation at:
+ *
+ * https://docs.rtems.org
+ */
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#include <grlib/irqamp.h>
+
+#include <rtems/test.h>
+
+/**
+ * @defgroup DevGrlibReqIrqampGetTimestamp \
+ * spec:/dev/grlib/req/irqamp-get-timestamp
+ *
+ * @ingroup TestsuitesBspsValidationBsp0
+ *
+ * @{
+ */
+
+typedef enum {
+ DevGrlibReqIrqampGetTimestamp_Pre_NumberOfTimestampRegisterSets_Zero,
+ DevGrlibReqIrqampGetTimestamp_Pre_NumberOfTimestampRegisterSets_Positive,
+ DevGrlibReqIrqampGetTimestamp_Pre_NumberOfTimestampRegisterSets_NA
+} DevGrlibReqIrqampGetTimestamp_Pre_NumberOfTimestampRegisterSets;
+
+typedef enum {
+ DevGrlibReqIrqampGetTimestamp_Post_Result_Registers,
+ DevGrlibReqIrqampGetTimestamp_Post_Result_Null,
+ DevGrlibReqIrqampGetTimestamp_Post_Result_NA
+} DevGrlibReqIrqampGetTimestamp_Post_Result;
+
+typedef struct {
+ uint8_t Skip : 1;
+ uint8_t Pre_NumberOfTimestampRegisterSets_NA : 1;
+ uint8_t Post_Result : 2;
+} DevGrlibReqIrqampGetTimestamp_Entry;
+
+/**
+ * @brief Test context for spec:/dev/grlib/req/irqamp-get-timestamp test case.
+ */
+typedef struct {
+ /**
+ * @brief This member contains the return value of the
+ * irqamp_get_timestamp_registers() call.
+ */
+ irqamp_timestamp *result;
+
+ /**
+ * @brief This member contains the IRQ(A)MP register block.
+ */
+ irqamp irqamp_regs;
+
+ struct {
+ /**
+ * @brief This member defines the pre-condition states for the next action.
+ */
+ size_t pcs[ 1 ];
+
+ /**
+ * @brief If this member is true, then the test action loop is executed.
+ */
+ bool in_action_loop;
+
+ /**
+ * @brief This member contains the next transition map index.
+ */
+ size_t index;
+
+ /**
+ * @brief This member contains the current transition map entry.
+ */
+ DevGrlibReqIrqampGetTimestamp_Entry entry;
+
+ /**
+ * @brief If this member is true, then the current transition variant
+ * should be skipped.
+ */
+ bool skip;
+ } Map;
+} DevGrlibReqIrqampGetTimestamp_Context;
+
+static DevGrlibReqIrqampGetTimestamp_Context
+ DevGrlibReqIrqampGetTimestamp_Instance;
+
+static const char * const DevGrlibReqIrqampGetTimestamp_PreDesc_NumberOfTimestampRegisterSets[] = {
+ "Zero",
+ "Positive",
+ "NA"
+};
+
+static const char * const * const DevGrlibReqIrqampGetTimestamp_PreDesc[] = {
+ DevGrlibReqIrqampGetTimestamp_PreDesc_NumberOfTimestampRegisterSets,
+ NULL
+};
+
+static void
+DevGrlibReqIrqampGetTimestamp_Pre_NumberOfTimestampRegisterSets_Prepare(
+ DevGrlibReqIrqampGetTimestamp_Context *ctx,
+ DevGrlibReqIrqampGetTimestamp_Pre_NumberOfTimestampRegisterSets state
+)
+{
+ switch ( state ) {
+ case DevGrlibReqIrqampGetTimestamp_Pre_NumberOfTimestampRegisterSets_Zero: {
+ /*
+ * While the number of timestamp register sets indicated by the IRQ(A)MP
+ * register block specified by the ``irqamp_regs`` parameter is zero.
+ */
+ ctx->irqamp_regs.itstmp[ 0 ].itstmpc = 0;
+ break;
+ }
+
+ case DevGrlibReqIrqampGetTimestamp_Pre_NumberOfTimestampRegisterSets_Positive: {
+ /*
+ * While the number of timestamp register sets indicated by the IRQ(A)MP
+ * register block specified by the ``irqamp_regs`` parameter is positive.
+ */
+ ctx->irqamp_regs.itstmp[ 0 ].itstmpc = IRQAMP_ITSTMPC_TSTAMP( 1 );
+ break;
+ }
+
+ case DevGrlibReqIrqampGetTimestamp_Pre_NumberOfTimestampRegisterSets_NA:
+ break;
+ }
+}
+
+static void DevGrlibReqIrqampGetTimestamp_Post_Result_Check(
+ DevGrlibReqIrqampGetTimestamp_Context *ctx,
+ DevGrlibReqIrqampGetTimestamp_Post_Result state
+)
+{
+ switch ( state ) {
+ case DevGrlibReqIrqampGetTimestamp_Post_Result_Registers: {
+ /*
+ * The return value of irqamp_get_timestamp_registers() shall be address
+ * of the timestamping register block contained in the IRQ(A)MP register
+ * block specified by the ``irqamp_regs`` parameter.
+ */
+ T_not_null( ctx->result );
+ break;
+ }
+
+ case DevGrlibReqIrqampGetTimestamp_Post_Result_Null: {
+ /*
+ * The return value of irqamp_get_timestamp_registers() shall be false.
+ */
+ T_null( ctx->result );
+ break;
+ }
+
+ case DevGrlibReqIrqampGetTimestamp_Post_Result_NA:
+ break;
+ }
+}
+
+static void DevGrlibReqIrqampGetTimestamp_Action(
+ DevGrlibReqIrqampGetTimestamp_Context *ctx
+)
+{
+ ctx->result = irqamp_get_timestamp_registers( &ctx->irqamp_regs );
+}
+
+static const DevGrlibReqIrqampGetTimestamp_Entry
+DevGrlibReqIrqampGetTimestamp_Entries[] = {
+ { 0, 0, DevGrlibReqIrqampGetTimestamp_Post_Result_Null },
+ { 0, 0, DevGrlibReqIrqampGetTimestamp_Post_Result_Registers }
+};
+
+static const uint8_t
+DevGrlibReqIrqampGetTimestamp_Map[] = {
+ 0, 1
+};
+
+static size_t DevGrlibReqIrqampGetTimestamp_Scope(
+ void *arg,
+ char *buf,
+ size_t n
+)
+{
+ DevGrlibReqIrqampGetTimestamp_Context *ctx;
+
+ ctx = arg;
+
+ if ( ctx->Map.in_action_loop ) {
+ return T_get_scope(
+ DevGrlibReqIrqampGetTimestamp_PreDesc,
+ buf,
+ n,
+ ctx->Map.pcs
+ );
+ }
+
+ return 0;
+}
+
+static T_fixture DevGrlibReqIrqampGetTimestamp_Fixture = {
+ .setup = NULL,
+ .stop = NULL,
+ .teardown = NULL,
+ .scope = DevGrlibReqIrqampGetTimestamp_Scope,
+ .initial_context = &DevGrlibReqIrqampGetTimestamp_Instance
+};
+
+static inline DevGrlibReqIrqampGetTimestamp_Entry
+DevGrlibReqIrqampGetTimestamp_PopEntry(
+ DevGrlibReqIrqampGetTimestamp_Context *ctx
+)
+{
+ size_t index;
+
+ index = ctx->Map.index;
+ ctx->Map.index = index + 1;
+ return DevGrlibReqIrqampGetTimestamp_Entries[
+ DevGrlibReqIrqampGetTimestamp_Map[ index ]
+ ];
+}
+
+static void DevGrlibReqIrqampGetTimestamp_TestVariant(
+ DevGrlibReqIrqampGetTimestamp_Context *ctx
+)
+{
+ DevGrlibReqIrqampGetTimestamp_Pre_NumberOfTimestampRegisterSets_Prepare(
+ ctx,
+ ctx->Map.pcs[ 0 ]
+ );
+ DevGrlibReqIrqampGetTimestamp_Action( ctx );
+ DevGrlibReqIrqampGetTimestamp_Post_Result_Check(
+ ctx,
+ ctx->Map.entry.Post_Result
+ );
+}
+
+/**
+ * @fn void T_case_body_DevGrlibReqIrqampGetTimestamp( void )
+ */
+T_TEST_CASE_FIXTURE(
+ DevGrlibReqIrqampGetTimestamp,
+ &DevGrlibReqIrqampGetTimestamp_Fixture
+)
+{
+ DevGrlibReqIrqampGetTimestamp_Context *ctx;
+
+ ctx = T_fixture_context();
+ ctx->Map.in_action_loop = true;
+ ctx->Map.index = 0;
+
+ for (
+ ctx->Map.pcs[ 0 ] = DevGrlibReqIrqampGetTimestamp_Pre_NumberOfTimestampRegisterSets_Zero;
+ ctx->Map.pcs[ 0 ] < DevGrlibReqIrqampGetTimestamp_Pre_NumberOfTimestampRegisterSets_NA;
+ ++ctx->Map.pcs[ 0 ]
+ ) {
+ ctx->Map.entry = DevGrlibReqIrqampGetTimestamp_PopEntry( ctx );
+ DevGrlibReqIrqampGetTimestamp_TestVariant( ctx );
+ }
+}
+
+/** @} */
diff --git a/testsuites/validation/tc-event-performance.c b/testsuites/validation/tc-event-performance.c
index 1baefecea5..9cf71e92f5 100644
--- a/testsuites/validation/tc-event-performance.c
+++ b/testsuites/validation/tc-event-performance.c
@@ -3,11 +3,11 @@
/**
* @file
*
- * @ingroup RTEMSTestCaseRtemsEventValPerf
+ * @ingroup RtemsEventValPerf
*/
/*
- * Copyright (C) 2021 embedded brains GmbH (http://www.embedded-brains.de)
+ * Copyright (C) 2021 embedded brains GmbH & Co. KG
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
@@ -59,9 +59,9 @@
#include <rtems/test.h>
/**
- * @defgroup RTEMSTestCaseRtemsEventValPerf spec:/rtems/event/val/perf
+ * @defgroup RtemsEventValPerf spec:/rtems/event/val/perf
*
- * @ingroup RTEMSTestSuiteTestsuitesPerformanceNoClock0
+ * @ingroup TestsuitesPerformanceNoClock0
*
* @brief This test case provides a context to run @ref RTEMSAPIClassicEvent
* performance tests.
@@ -107,12 +107,11 @@ typedef struct {
static RtemsEventValPerf_Context
RtemsEventValPerf_Instance;
-typedef RtemsEventValPerf_Context Context;
+#define EVENT_END RTEMS_EVENT_0
+
+#define EVENT_OTHER RTEMS_EVENT_1
-typedef enum {
- EVENT_END = RTEMS_EVENT_0,
- EVENT_OTHER = RTEMS_EVENT_1
-} Event;
+typedef RtemsEventValPerf_Context Context;
static void Send( const Context *ctx, rtems_event_set events )
{
@@ -211,6 +210,12 @@ static T_fixture RtemsEventValPerf_Fixture = {
};
/**
+ * @defgroup RtemsEventReqPerfIsrPreempt spec:/rtems/event/req/perf-isr-preempt
+ *
+ * @{
+ */
+
+/**
* @brief Send two events from with interrupt context. Satisfy the event
* condition.
*/
@@ -260,6 +265,14 @@ static bool RtemsEventReqPerfIsrPreempt_Teardown_Wrap(
return RtemsEventReqPerfIsrPreempt_Teardown( ctx, delta, tic, toc, retry );
}
+/** @} */
+
+/**
+ * @defgroup RtemsEventReqPerfOther spec:/rtems/event/req/perf-other
+ *
+ * @{
+ */
+
/**
* @brief Lower the worker priority.
*/
@@ -325,8 +338,16 @@ static bool RtemsEventReqPerfOther_Teardown_Wrap(
return RtemsEventReqPerfOther_Teardown( ctx, delta, tic, toc, retry );
}
+/** @} */
+
#if defined(RTEMS_SMP)
/**
+ * @defgroup RtemsEventReqPerfOtherCpu spec:/rtems/event/req/perf-other-cpu
+ *
+ * @{
+ */
+
+/**
* @brief Move worker to scheduler B.
*/
static void RtemsEventReqPerfOtherCpu_Prepare( RtemsEventValPerf_Context *ctx )
@@ -392,9 +413,18 @@ static void RtemsEventReqPerfOtherCpu_Cleanup( RtemsEventValPerf_Context *ctx )
{
SetScheduler( ctx->worker_id, SCHEDULER_A_ID, PRIO_HIGH );
}
+
+/** @} */
#endif
/**
+ * @defgroup RtemsEventReqPerfOtherNotSatisfied \
+ * spec:/rtems/event/req/perf-other-not-satisfied
+ *
+ * @{
+ */
+
+/**
* @brief Send an event. Do not satisfy the event condition.
*/
static void RtemsEventReqPerfOtherNotSatisfied_Body(
@@ -451,6 +481,15 @@ static bool RtemsEventReqPerfOtherNotSatisfied_Teardown_Wrap(
);
}
+/** @} */
+
+/**
+ * @defgroup RtemsEventReqPerfOtherPreempt \
+ * spec:/rtems/event/req/perf-other-preempt
+ *
+ * @{
+ */
+
/**
* @brief Send two events. Satisfy the event condition.
*/
@@ -503,6 +542,8 @@ static bool RtemsEventReqPerfOtherPreempt_Teardown_Wrap(
return RtemsEventReqPerfOtherPreempt_Teardown( ctx, delta, tic, toc, retry );
}
+/** @} */
+
/**
* @fn void T_case_body_RtemsEventValPerf( void )
*/
diff --git a/testsuites/validation/tc-event-send-receive.c b/testsuites/validation/tc-event-send-receive.c
index 7db58bedcd..54a527cbaa 100644
--- a/testsuites/validation/tc-event-send-receive.c
+++ b/testsuites/validation/tc-event-send-receive.c
@@ -3,12 +3,12 @@
/**
* @file
*
- * @ingroup RTEMSTestCaseRtemsEventValSendReceive
- * @ingroup RTEMSTestCaseRtemsEventValSystemSendReceive
+ * @ingroup RtemsEventValSendReceive
+ * @ingroup RtemsEventValSystemSendReceive
*/
/*
- * Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+ * Copyright (C) 2020 embedded brains GmbH & Co. KG
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
@@ -63,17 +63,16 @@
#include <rtems/test.h>
/**
- * @defgroup RTEMSTestCaseRtemsEventValSendReceive \
- * spec:/rtems/event/val/send-receive
+ * @defgroup RtemsEventValSendReceive spec:/rtems/event/val/send-receive
*
- * @ingroup RTEMSTestSuiteTestsuitesValidation0
+ * @ingroup TestsuitesValidation0
*
* @brief Tests the rtems_event_send() and rtems_event_receive() directives.
*
* This test case performs the following actions:
*
* - Run the event send and receive tests for the application event set defined
- * by /rtems/event/req/send-receive.
+ * by spec:/rtems/event/req/send-receive.
*
* @{
*/
@@ -106,7 +105,7 @@ static rtems_event_set GetPendingEvents( Thread_Control *thread )
/**
* @brief Run the event send and receive tests for the application event set
- * defined by /rtems/event/req/send-receive.
+ * defined by spec:/rtems/event/req/send-receive.
*/
static void RtemsEventValSendReceive_Action_0( void )
{
@@ -130,10 +129,10 @@ T_TEST_CASE( RtemsEventValSendReceive )
/** @} */
/**
- * @defgroup RTEMSTestCaseRtemsEventValSystemSendReceive \
+ * @defgroup RtemsEventValSystemSendReceive \
* spec:/rtems/event/val/system-send-receive
*
- * @ingroup RTEMSTestSuiteTestsuitesValidation0
+ * @ingroup TestsuitesValidation0
*
* @brief Tests the rtems_event_system_send() and rtems_event_system_receive()
* directives.
@@ -141,7 +140,7 @@ T_TEST_CASE( RtemsEventValSendReceive )
* This test case performs the following actions:
*
* - Run the event send and receive tests for the system event set defined by
- * /rtems/event/req/send-receive.
+ * spec:/rtems/event/req/send-receive.
*
* @{
*/
@@ -179,7 +178,7 @@ static rtems_event_set GetPendingSystemEvents( Thread_Control *thread )
/**
* @brief Run the event send and receive tests for the system event set defined
- * by /rtems/event/req/send-receive.
+ * by spec:/rtems/event/req/send-receive.
*/
static void RtemsEventValSystemSendReceive_Action_0( void )
{
diff --git a/testsuites/validation/tc-events.c b/testsuites/validation/tc-events.c
index 54df2f7ceb..e7d009fe8a 100644
--- a/testsuites/validation/tc-events.c
+++ b/testsuites/validation/tc-events.c
@@ -3,11 +3,11 @@
/**
* @file
*
- * @ingroup RTEMSTestCaseRtemsEventValEvents
+ * @ingroup RtemsEventValEvents
*/
/*
- * Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+ * Copyright (C) 2020 embedded brains GmbH & Co. KG
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
@@ -59,9 +59,9 @@
#include <rtems/test.h>
/**
- * @defgroup RTEMSTestCaseRtemsEventValEvents spec:/rtems/event/val/events
+ * @defgroup RtemsEventValEvents spec:/rtems/event/val/events
*
- * @ingroup RTEMSTestSuiteTestsuitesValidationNoClock0
+ * @ingroup TestsuitesValidationNoClock0
*
* @brief Tests the Event Manager API.
*
diff --git a/testsuites/validation/tc-flsl.c b/testsuites/validation/tc-flsl.c
index fef1f2bae1..95f0ed9ccf 100644
--- a/testsuites/validation/tc-flsl.c
+++ b/testsuites/validation/tc-flsl.c
@@ -3,11 +3,11 @@
/**
* @file
*
- * @ingroup RTEMSTestCaseCReqFlsl
+ * @ingroup CReqFlsl
*/
/*
- * Copyright (C) 2021 embedded brains GmbH (http://www.embedded-brains.de)
+ * Copyright (C) 2021 embedded brains GmbH & Co. KG
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
@@ -58,9 +58,9 @@
#include <rtems/test.h>
/**
- * @defgroup RTEMSTestCaseCReqFlsl spec:/c/req/flsl
+ * @defgroup CReqFlsl spec:/c/req/flsl
*
- * @ingroup RTEMSTestSuiteTestsuitesValidationNoClock0
+ * @ingroup TestsuitesValidationNoClock0
*
* @{
*/
diff --git a/testsuites/validation/tc-futex-wait.c b/testsuites/validation/tc-futex-wait.c
index 396b26525f..3730df2a40 100644
--- a/testsuites/validation/tc-futex-wait.c
+++ b/testsuites/validation/tc-futex-wait.c
@@ -3,11 +3,11 @@
/**
* @file
*
- * @ingroup RTEMSTestCaseNewlibReqFutexWait
+ * @ingroup NewlibReqFutexWait
*/
/*
- * Copyright (C) 2021 embedded brains GmbH (http://www.embedded-brains.de)
+ * Copyright (C) 2021 embedded brains GmbH & Co. KG
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
@@ -62,9 +62,9 @@
#include <rtems/test.h>
/**
- * @defgroup RTEMSTestCaseNewlibReqFutexWait spec:/newlib/req/futex-wait
+ * @defgroup NewlibReqFutexWait spec:/newlib/req/futex-wait
*
- * @ingroup RTEMSTestSuiteTestsuitesValidationNoClock0
+ * @ingroup TestsuitesValidationNoClock0
*
* @{
*/
@@ -101,7 +101,7 @@ typedef struct {
/**
* @brief This member contains the thread queue test context.
*/
- TQContext tq_ctx;;
+ TQContext tq_ctx;
/**
* @brief This member specifies the expected futex state value.
diff --git a/testsuites/validation/tc-futex-wake.c b/testsuites/validation/tc-futex-wake.c
index 1d996d1d2b..baaa0daa6b 100644
--- a/testsuites/validation/tc-futex-wake.c
+++ b/testsuites/validation/tc-futex-wake.c
@@ -3,11 +3,11 @@
/**
* @file
*
- * @ingroup RTEMSTestCaseNewlibReqFutexWake
+ * @ingroup NewlibReqFutexWake
*/
/*
- * Copyright (C) 2021 embedded brains GmbH (http://www.embedded-brains.de)
+ * Copyright (C) 2021 embedded brains GmbH & Co. KG
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
@@ -62,17 +62,16 @@
#include <rtems/test.h>
/**
- * @defgroup RTEMSTestCaseNewlibReqFutexWake spec:/newlib/req/futex-wake
+ * @defgroup NewlibReqFutexWake spec:/newlib/req/futex-wake
*
- * @ingroup RTEMSTestSuiteTestsuitesValidationNoClock0
+ * @ingroup TestsuitesValidationNoClock0
*
* @{
*/
typedef enum {
- NewlibReqFutexWake_Pre_Count_Negative,
- NewlibReqFutexWake_Pre_Count_Partial,
- NewlibReqFutexWake_Pre_Count_All,
+ NewlibReqFutexWake_Pre_Count_NegativeOrZero,
+ NewlibReqFutexWake_Pre_Count_Positive,
NewlibReqFutexWake_Pre_Count_NA
} NewlibReqFutexWake_Pre_Count;
@@ -83,8 +82,7 @@ typedef enum {
typedef enum {
NewlibReqFutexWake_Post_Flush_No,
- NewlibReqFutexWake_Post_Flush_Partial,
- NewlibReqFutexWake_Post_Flush_All,
+ NewlibReqFutexWake_Post_Flush_Yes,
NewlibReqFutexWake_Post_Flush_NA
} NewlibReqFutexWake_Post_Flush;
@@ -102,7 +100,7 @@ typedef struct {
/**
* @brief This member contains the thread queue test context.
*/
- TQContext tq_ctx;;
+ TQContext tq_ctx;
/**
* @brief This member provides the futex object.
@@ -147,9 +145,8 @@ static NewlibReqFutexWake_Context
NewlibReqFutexWake_Instance;
static const char * const NewlibReqFutexWake_PreDesc_Count[] = {
- "Negative",
- "Partial",
- "All",
+ "NegativeOrZero",
+ "Positive",
"NA"
};
@@ -185,20 +182,22 @@ static Status_Control Enqueue( TQContext *tq_ctx, TQWait wait )
return STATUS_BUILD( 0, eno );
}
-static void Flush( TQContext *tq_ctx )
+static uint32_t Flush( TQContext *tq_ctx, uint32_t thread_count, bool all )
{
Context *ctx;
int count;
- int how_many;
+
+ (void) thread_count;
ctx = ToContext( tq_ctx );
- how_many = (int) ctx->tq_ctx.how_many;
- count = _Futex_Wake( &ctx->futex, 1 );
- T_eq_int( count, how_many > 0 ? 1 : 0 );
+ if ( all ) {
+ count = _Futex_Wake( &ctx->futex, INT_MAX );
+ } else {
+ count = _Futex_Wake( &ctx->futex, 1 );
+ }
- count = _Futex_Wake( &ctx->futex, INT_MAX );
- T_eq_int( count, how_many > 1 ? how_many - 1 : 0 );
+ return (uint32_t) count;
}
static void NewlibReqFutexWake_Pre_Count_Prepare(
@@ -207,29 +206,17 @@ static void NewlibReqFutexWake_Pre_Count_Prepare(
)
{
switch ( state ) {
- case NewlibReqFutexWake_Pre_Count_Negative: {
+ case NewlibReqFutexWake_Pre_Count_NegativeOrZero: {
/*
- * While the ``count`` parameter is less than zero.
+ * While the ``count`` parameter is less or equal to than zero.
*/
/* This state is prepared by Enqueue() */
break;
}
- case NewlibReqFutexWake_Pre_Count_Partial: {
- /*
- * While the ``count`` parameter is greater than or equal to zero, while
- * the ``count`` parameter is less than the count of threads enqueued on
- * the thread queue of the futex object.
- */
- /* This state is prepared by Flush() */
- break;
- }
-
- case NewlibReqFutexWake_Pre_Count_All: {
+ case NewlibReqFutexWake_Pre_Count_Positive: {
/*
- * While the ``count`` parameter is greater than or equal to zero, while
- * the ``count`` parameter is greater than or equal to the count of
- * threads enqueued on the thread queue of the futex object.
+ * While the ``count`` parameter is greater than zero.
*/
/* This state is prepared by Flush() */
break;
@@ -275,21 +262,12 @@ static void NewlibReqFutexWake_Post_Flush_Check(
break;
}
- case NewlibReqFutexWake_Post_Flush_Partial: {
+ case NewlibReqFutexWake_Post_Flush_Yes: {
/*
* The first count threads specified by the ``count`` parameter shall be
* extracted from the thread queue of the futex object in FIFO order.
*/
- /* This state is checked by Flush() */
- break;
- }
-
- case NewlibReqFutexWake_Post_Flush_All: {
- /*
- * All threads shall be extracted from the thread queue of the futex
- * object in FIFO order.
- */
- ScoreTqReqFlushFifo_Run( &ctx->tq_ctx );
+ ScoreTqReqFlushFifo_Run( &ctx->tq_ctx, true );
break;
}
@@ -355,14 +333,12 @@ NewlibReqFutexWake_Entries[] = {
{ 0, 0, NewlibReqFutexWake_Post_Result_Count,
NewlibReqFutexWake_Post_Flush_No },
{ 0, 0, NewlibReqFutexWake_Post_Result_Count,
- NewlibReqFutexWake_Post_Flush_Partial },
- { 0, 0, NewlibReqFutexWake_Post_Result_Count,
- NewlibReqFutexWake_Post_Flush_All }
+ NewlibReqFutexWake_Post_Flush_Yes }
};
static const uint8_t
NewlibReqFutexWake_Map[] = {
- 0, 1, 2
+ 0, 1
};
static size_t NewlibReqFutexWake_Scope( void *arg, char *buf, size_t n )
@@ -419,7 +395,7 @@ T_TEST_CASE_FIXTURE( NewlibReqFutexWake, &NewlibReqFutexWake_Fixture )
ctx->Map.index = 0;
for (
- ctx->Map.pcs[ 0 ] = NewlibReqFutexWake_Pre_Count_Negative;
+ ctx->Map.pcs[ 0 ] = NewlibReqFutexWake_Pre_Count_NegativeOrZero;
ctx->Map.pcs[ 0 ] < NewlibReqFutexWake_Pre_Count_NA;
++ctx->Map.pcs[ 0 ]
) {
diff --git a/testsuites/validation/tc-intr-clear.c b/testsuites/validation/tc-intr-clear.c
index 1c6c451a39..b131b738fd 100644
--- a/testsuites/validation/tc-intr-clear.c
+++ b/testsuites/validation/tc-intr-clear.c
@@ -3,11 +3,11 @@
/**
* @file
*
- * @ingroup RTEMSTestCaseRtemsIntrReqClear
+ * @ingroup RtemsIntrReqClear
*/
/*
- * Copyright (C) 2021 embedded brains GmbH (http://www.embedded-brains.de)
+ * Copyright (C) 2021 embedded brains GmbH & Co. KG
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
@@ -61,9 +61,9 @@
#include <rtems/test.h>
/**
- * @defgroup RTEMSTestCaseRtemsIntrReqClear spec:/rtems/intr/req/clear
+ * @defgroup RtemsIntrReqClear spec:/rtems/intr/req/clear
*
- * @ingroup RTEMSTestSuiteTestsuitesValidationIntr
+ * @ingroup TestsuitesValidationIntr
*
* @{
*/
diff --git a/testsuites/validation/tc-intr-entry-install.c b/testsuites/validation/tc-intr-entry-install.c
index 714486772a..58c7989dbe 100644
--- a/testsuites/validation/tc-intr-entry-install.c
+++ b/testsuites/validation/tc-intr-entry-install.c
@@ -3,11 +3,11 @@
/**
* @file
*
- * @ingroup RTEMSTestCaseRtemsIntrReqEntryInstall
+ * @ingroup RtemsIntrReqEntryInstall
*/
/*
- * Copyright (C) 2021 embedded brains GmbH (http://www.embedded-brains.de)
+ * Copyright (C) 2021 embedded brains GmbH & Co. KG
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
@@ -60,10 +60,9 @@
#include <rtems/test.h>
/**
- * @defgroup RTEMSTestCaseRtemsIntrReqEntryInstall \
- * spec:/rtems/intr/req/entry-install
+ * @defgroup RtemsIntrReqEntryInstall spec:/rtems/intr/req/entry-install
*
- * @ingroup RTEMSTestSuiteTestsuitesValidationIntr
+ * @ingroup TestsuitesValidationIntr
*
* @{
*/
@@ -181,7 +180,7 @@ typedef struct {
/**
* @brief This member provides a counter snapshot for each entry.
*/
- uint32_t counter_by_entry[ 3 ];;
+ uint32_t counter_by_entry[ 3 ];
/**
* @brief This member provides the vector number of a testable interrupt
@@ -190,6 +189,12 @@ typedef struct {
rtems_vector_number test_vector;
/**
+ * @brief If this member is true, then the testable interrupt vector was
+ * enabled at the test case begin.
+ */
+ bool test_vector_was_enabled;
+
+ /**
* @brief This member provides the attributes of the testable interrupt
* vector.
*/
@@ -267,7 +272,7 @@ typedef struct {
/**
* @brief This member specifies if the ``entry`` parameter value.
*/
- rtems_interrupt_entry *entry;;
+ rtems_interrupt_entry *entry;
/**
* @brief This member contains the return value of the
@@ -426,11 +431,8 @@ static void Routine( Context *ctx, uint32_t counter )
ctx->handler_counter = counter;
- if (
- ctx->attributes.can_clear &&
- !ctx->attributes.cleared_by_acknowledge
- ) {
- sc = rtems_interrupt_clear( ctx->test_vector );
+ if ( !ctx->attributes.cleared_by_acknowledge ) {
+ sc = ClearSoftwareInterrupt( ctx->test_vector );
T_rsc_success( sc );
}
@@ -517,7 +519,7 @@ static void Action( void *arg )
T_rsc_success( sc );
bsp_interrupt_set_handler_unique(
- BSP_INTERRUPT_HANDLER_TABLE_SIZE,
+ BSP_INTERRUPT_DISPATCH_TABLE_SIZE,
ctx->initialized
);
@@ -528,7 +530,7 @@ static void Action( void *arg )
);
bsp_interrupt_set_handler_unique(
- BSP_INTERRUPT_HANDLER_TABLE_SIZE,
+ BSP_INTERRUPT_DISPATCH_TABLE_SIZE,
ctx->initialized_during_setup
);
@@ -539,7 +541,7 @@ static void Action( void *arg )
T_rsc_success( sc );
if ( ctx->status == RTEMS_SUCCESSFUL ) {
- sc = rtems_interrupt_raise( ctx->test_vector );
+ sc = RaiseSoftwareInterrupt( ctx->test_vector );
T_rsc_success( sc );
}
}
@@ -1120,6 +1122,11 @@ static void RtemsIntrReqEntryInstall_Setup(
ctx->initialized_during_setup = bsp_interrupt_is_initialized();
ctx->test_vector = GetTestableInterruptVector( &required );
+ ctx->test_vector_was_enabled = false;
+ (void) rtems_interrupt_vector_is_enabled(
+ ctx->test_vector,
+ &ctx->test_vector_was_enabled
+ );
sc = rtems_interrupt_get_attributes( ctx->test_vector, &ctx->attributes );
T_rsc_success( sc );
}
@@ -1133,6 +1140,24 @@ static void RtemsIntrReqEntryInstall_Setup_Wrap( void *arg )
RtemsIntrReqEntryInstall_Setup( ctx );
}
+static void RtemsIntrReqEntryInstall_Teardown(
+ RtemsIntrReqEntryInstall_Context *ctx
+)
+{
+ if ( ctx->test_vector_was_enabled ) {
+ (void) rtems_interrupt_vector_enable( ctx->test_vector );
+ }
+}
+
+static void RtemsIntrReqEntryInstall_Teardown_Wrap( void *arg )
+{
+ RtemsIntrReqEntryInstall_Context *ctx;
+
+ ctx = arg;
+ ctx->Map.in_action_loop = false;
+ RtemsIntrReqEntryInstall_Teardown( ctx );
+}
+
static void RtemsIntrReqEntryInstall_Prepare(
RtemsIntrReqEntryInstall_Context *ctx
)
@@ -1320,7 +1345,7 @@ static size_t RtemsIntrReqEntryInstall_Scope( void *arg, char *buf, size_t n )
static T_fixture RtemsIntrReqEntryInstall_Fixture = {
.setup = RtemsIntrReqEntryInstall_Setup_Wrap,
.stop = NULL,
- .teardown = NULL,
+ .teardown = RtemsIntrReqEntryInstall_Teardown_Wrap,
.scope = RtemsIntrReqEntryInstall_Scope,
.initial_context = &RtemsIntrReqEntryInstall_Instance
};
diff --git a/testsuites/validation/tc-intr-entry-remove.c b/testsuites/validation/tc-intr-entry-remove.c
index c73bcbb3fc..01a72410e1 100644
--- a/testsuites/validation/tc-intr-entry-remove.c
+++ b/testsuites/validation/tc-intr-entry-remove.c
@@ -3,11 +3,11 @@
/**
* @file
*
- * @ingroup RTEMSTestCaseRtemsIntrReqEntryRemove
+ * @ingroup RtemsIntrReqEntryRemove
*/
/*
- * Copyright (C) 2021 embedded brains GmbH (http://www.embedded-brains.de)
+ * Copyright (C) 2021 embedded brains GmbH & Co. KG
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
@@ -60,10 +60,9 @@
#include <rtems/test.h>
/**
- * @defgroup RTEMSTestCaseRtemsIntrReqEntryRemove \
- * spec:/rtems/intr/req/entry-remove
+ * @defgroup RtemsIntrReqEntryRemove spec:/rtems/intr/req/entry-remove
*
- * @ingroup RTEMSTestSuiteTestsuitesValidationIntr
+ * @ingroup TestsuitesValidationIntr
*
* @{
*/
@@ -182,7 +181,7 @@ typedef struct {
/**
* @brief This member provides a counter incremented by EntryRoutine().
*/
- uint32_t entry_counter;;
+ uint32_t entry_counter;
/**
* @brief This member provides another rtems_interrupt_entry object.
@@ -234,6 +233,12 @@ typedef struct {
rtems_vector_number test_vector;
/**
+ * @brief If this member is true, then the testable interrupt vector was
+ * enabled at the test case begin.
+ */
+ bool test_vector_was_enabled;
+
+ /**
* @brief This member provides the attributes of the testable interrupt
* vector.
*/
@@ -280,7 +285,7 @@ typedef struct {
/**
* @brief This member specifies if the ``entry`` parameter value.
*/
- rtems_interrupt_entry *entry;;
+ rtems_interrupt_entry *entry;
/**
* @brief This member contains the return value of the
@@ -473,14 +478,14 @@ static void Action( void *arg )
T_rsc_success( sc );
bsp_interrupt_set_handler_unique(
- BSP_INTERRUPT_HANDLER_TABLE_SIZE,
+ BSP_INTERRUPT_DISPATCH_TABLE_SIZE,
ctx->initialized
);
ctx->status = rtems_interrupt_entry_remove( ctx->vector, ctx->entry );
bsp_interrupt_set_handler_unique(
- BSP_INTERRUPT_HANDLER_TABLE_SIZE,
+ BSP_INTERRUPT_DISPATCH_TABLE_SIZE,
ctx->initialized_during_setup
);
@@ -1034,8 +1039,8 @@ static void RtemsIntrReqEntryRemove_Post_Installed_Check(
} else {
rtems_interrupt_entry *first;
- first = bsp_interrupt_handler_table[
- bsp_interrupt_handler_index( ctx->test_vector )
+ first = bsp_interrupt_dispatch_table[
+ bsp_interrupt_dispatch_index( ctx->test_vector )
];
T_null( first );
}
@@ -1088,6 +1093,11 @@ static void RtemsIntrReqEntryRemove_Setup(
ctx->initialized_during_setup = bsp_interrupt_is_initialized();
ctx->test_vector = GetTestableInterruptVector( NULL );
+ ctx->test_vector_was_enabled = false;
+ (void) rtems_interrupt_vector_is_enabled(
+ ctx->test_vector,
+ &ctx->test_vector_was_enabled
+ );
sc = rtems_interrupt_get_attributes( ctx->test_vector, &ctx->attributes );
T_rsc_success( sc );
}
@@ -1101,6 +1111,24 @@ static void RtemsIntrReqEntryRemove_Setup_Wrap( void *arg )
RtemsIntrReqEntryRemove_Setup( ctx );
}
+static void RtemsIntrReqEntryRemove_Teardown(
+ RtemsIntrReqEntryRemove_Context *ctx
+)
+{
+ if ( ctx->test_vector_was_enabled ) {
+ (void) rtems_interrupt_vector_enable( ctx->test_vector );
+ }
+}
+
+static void RtemsIntrReqEntryRemove_Teardown_Wrap( void *arg )
+{
+ RtemsIntrReqEntryRemove_Context *ctx;
+
+ ctx = arg;
+ ctx->Map.in_action_loop = false;
+ RtemsIntrReqEntryRemove_Teardown( ctx );
+}
+
static void RtemsIntrReqEntryRemove_Prepare(
RtemsIntrReqEntryRemove_Context *ctx
)
@@ -1292,7 +1320,7 @@ static size_t RtemsIntrReqEntryRemove_Scope( void *arg, char *buf, size_t n )
static T_fixture RtemsIntrReqEntryRemove_Fixture = {
.setup = RtemsIntrReqEntryRemove_Setup_Wrap,
.stop = NULL,
- .teardown = NULL,
+ .teardown = RtemsIntrReqEntryRemove_Teardown_Wrap,
.scope = RtemsIntrReqEntryRemove_Scope,
.initial_context = &RtemsIntrReqEntryRemove_Instance
};
diff --git a/testsuites/validation/tc-intr-get-affinity.c b/testsuites/validation/tc-intr-get-affinity.c
index 277cb790a3..60509203b4 100644
--- a/testsuites/validation/tc-intr-get-affinity.c
+++ b/testsuites/validation/tc-intr-get-affinity.c
@@ -3,11 +3,11 @@
/**
* @file
*
- * @ingroup RTEMSTestCaseRtemsIntrReqGetAffinity
+ * @ingroup RtemsIntrReqGetAffinity
*/
/*
- * Copyright (C) 2021 embedded brains GmbH (http://www.embedded-brains.de)
+ * Copyright (C) 2021 embedded brains GmbH & Co. KG
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
@@ -61,10 +61,9 @@
#include <rtems/test.h>
/**
- * @defgroup RTEMSTestCaseRtemsIntrReqGetAffinity \
- * spec:/rtems/intr/req/get-affinity
+ * @defgroup RtemsIntrReqGetAffinity spec:/rtems/intr/req/get-affinity
*
- * @ingroup RTEMSTestSuiteTestsuitesValidationIntr
+ * @ingroup TestsuitesValidationIntr
*
* @{
*/
@@ -139,7 +138,7 @@ typedef struct {
* @brief This member provides the object referenced by the ``affinity``
* parameter.
*/
- cpu_set_t cpuset_obj[ 2 ];;
+ cpu_set_t cpuset_obj[ 2 ];
/**
* @brief This member contains the return value of the
@@ -244,6 +243,9 @@ static void CheckGetAffinity(
rtems_status_code sc;
cpu_set_t set[ 2 ];
+ #pragma GCC diagnostic push
+ #pragma GCC diagnostic ignored "-Warray-bounds"
+
if ( attr->can_get_affinity ) {
CPU_ZERO_S( sizeof( ctx->cpuset_obj ), ctx->cpuset_obj );
} else {
@@ -265,6 +267,8 @@ static void CheckGetAffinity(
T_rsc( sc, RTEMS_UNSATISFIED );
T_true( CPU_EQUAL_S( sizeof( set ), ctx->cpuset_obj, set ) );
}
+
+ #pragma GCC diagnostic pop
}
static void RtemsIntrReqGetAffinity_Pre_Vector_Prepare(
@@ -565,6 +569,9 @@ static void RtemsIntrReqGetAffinity_Action(
ctx->vector = BSP_INTERRUPT_VECTOR_COUNT;
}
+ #pragma GCC diagnostic push
+ #pragma GCC diagnostic ignored "-Warray-bounds"
+
CPU_FILL_S( sizeof( ctx->cpuset_obj ), ctx->cpuset_obj );
ctx->status = rtems_interrupt_get_affinity(
@@ -583,6 +590,8 @@ static void RtemsIntrReqGetAffinity_Action(
}
T_true( CPU_EQUAL_S( sizeof( set ), ctx->cpuset_obj, set ) );
+
+ #pragma GCC diagnostic pop
}
}
diff --git a/testsuites/validation/tc-intr-get-attributes.c b/testsuites/validation/tc-intr-get-attributes.c
index 713defaa1a..4594c78a2e 100644
--- a/testsuites/validation/tc-intr-get-attributes.c
+++ b/testsuites/validation/tc-intr-get-attributes.c
@@ -3,11 +3,11 @@
/**
* @file
*
- * @ingroup RTEMSTestCaseRtemsIntrReqGetAttributes
+ * @ingroup RtemsIntrReqGetAttributes
*/
/*
- * Copyright (C) 2021 embedded brains GmbH (http://www.embedded-brains.de)
+ * Copyright (C) 2021 embedded brains GmbH & Co. KG
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
@@ -59,10 +59,9 @@
#include <rtems/test.h>
/**
- * @defgroup RTEMSTestCaseRtemsIntrReqGetAttributes \
- * spec:/rtems/intr/req/get-attributes
+ * @defgroup RtemsIntrReqGetAttributes spec:/rtems/intr/req/get-attributes
*
- * @ingroup RTEMSTestSuiteTestsuitesValidationIntr
+ * @ingroup TestsuitesValidationIntr
*
* @{
*/
@@ -119,7 +118,7 @@ typedef struct {
/**
* @brief This member specifies if the ``attributes`` parameter value.
*/
- rtems_interrupt_attributes *attributes;;
+ rtems_interrupt_attributes *attributes;
/**
* @brief This member contains the return value of the
diff --git a/testsuites/validation/tc-intr-handler-iterate.c b/testsuites/validation/tc-intr-handler-iterate.c
index 77b9b2b7d7..fc3f498838 100644
--- a/testsuites/validation/tc-intr-handler-iterate.c
+++ b/testsuites/validation/tc-intr-handler-iterate.c
@@ -3,11 +3,11 @@
/**
* @file
*
- * @ingroup RTEMSTestCaseRtemsIntrReqHandlerIterate
+ * @ingroup RtemsIntrReqHandlerIterate
*/
/*
- * Copyright (C) 2021 embedded brains GmbH (http://www.embedded-brains.de)
+ * Copyright (C) 2021 embedded brains GmbH & Co. KG
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
@@ -60,10 +60,9 @@
#include <rtems/test.h>
/**
- * @defgroup RTEMSTestCaseRtemsIntrReqHandlerIterate \
- * spec:/rtems/intr/req/handler-iterate
+ * @defgroup RtemsIntrReqHandlerIterate spec:/rtems/intr/req/handler-iterate
*
- * @ingroup RTEMSTestSuiteTestsuitesValidationIntr
+ * @ingroup TestsuitesValidationIntr
*
* @{
*/
@@ -134,6 +133,12 @@ typedef struct {
rtems_vector_number test_vector;
/**
+ * @brief If this member is true, then the testable interrupt vector was
+ * enabled at the test case begin.
+ */
+ bool test_vector_was_enabled;
+
+ /**
* @brief If this member is true, then the service shall be initialized.
*/
bool initialized;
@@ -282,7 +287,7 @@ static void Action( void *arg )
ctx->visited_entries = 0;
bsp_interrupt_set_handler_unique(
- BSP_INTERRUPT_HANDLER_TABLE_SIZE,
+ BSP_INTERRUPT_DISPATCH_TABLE_SIZE,
ctx->initialized
);
@@ -293,7 +298,7 @@ static void Action( void *arg )
);
bsp_interrupt_set_handler_unique(
- BSP_INTERRUPT_HANDLER_TABLE_SIZE,
+ BSP_INTERRUPT_DISPATCH_TABLE_SIZE,
ctx->initialized_during_setup
);
}
@@ -506,6 +511,11 @@ static void RtemsIntrReqHandlerIterate_Setup(
ctx->initialized_during_setup = bsp_interrupt_is_initialized();
ctx->test_vector = GetTestableInterruptVector( NULL );
+ ctx->test_vector_was_enabled = false;
+ (void) rtems_interrupt_vector_is_enabled(
+ ctx->test_vector,
+ &ctx->test_vector_was_enabled
+ );
rtems_interrupt_entry_initialize(
&ctx->entry,
EntryRoutine,
@@ -529,6 +539,32 @@ static void RtemsIntrReqHandlerIterate_Setup_Wrap( void *arg )
RtemsIntrReqHandlerIterate_Setup( ctx );
}
+static void RtemsIntrReqHandlerIterate_Teardown(
+ RtemsIntrReqHandlerIterate_Context *ctx
+)
+{
+ rtems_status_code sc;
+
+ sc = rtems_interrupt_entry_remove(
+ ctx->test_vector,
+ &ctx->entry
+ );
+ T_rsc_success( sc );
+
+ if ( ctx->test_vector_was_enabled ) {
+ (void) rtems_interrupt_vector_enable( ctx->test_vector );
+ }
+}
+
+static void RtemsIntrReqHandlerIterate_Teardown_Wrap( void *arg )
+{
+ RtemsIntrReqHandlerIterate_Context *ctx;
+
+ ctx = arg;
+ ctx->Map.in_action_loop = false;
+ RtemsIntrReqHandlerIterate_Teardown( ctx );
+}
+
static void RtemsIntrReqHandlerIterate_Action(
RtemsIntrReqHandlerIterate_Context *ctx
)
@@ -586,7 +622,7 @@ static size_t RtemsIntrReqHandlerIterate_Scope(
static T_fixture RtemsIntrReqHandlerIterate_Fixture = {
.setup = RtemsIntrReqHandlerIterate_Setup_Wrap,
.stop = NULL,
- .teardown = NULL,
+ .teardown = RtemsIntrReqHandlerIterate_Teardown_Wrap,
.scope = RtemsIntrReqHandlerIterate_Scope,
.initial_context = &RtemsIntrReqHandlerIterate_Instance
};
diff --git a/testsuites/validation/tc-intr-is-pending.c b/testsuites/validation/tc-intr-is-pending.c
index 93be686038..097e3d7a17 100644
--- a/testsuites/validation/tc-intr-is-pending.c
+++ b/testsuites/validation/tc-intr-is-pending.c
@@ -3,11 +3,11 @@
/**
* @file
*
- * @ingroup RTEMSTestCaseRtemsIntrReqIsPending
+ * @ingroup RtemsIntrReqIsPending
*/
/*
- * Copyright (C) 2021 embedded brains GmbH (http://www.embedded-brains.de)
+ * Copyright (C) 2021 embedded brains GmbH & Co. KG
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
@@ -61,9 +61,9 @@
#include <rtems/test.h>
/**
- * @defgroup RTEMSTestCaseRtemsIntrReqIsPending spec:/rtems/intr/req/is-pending
+ * @defgroup RtemsIntrReqIsPending spec:/rtems/intr/req/is-pending
*
- * @ingroup RTEMSTestSuiteTestsuitesValidationIntr
+ * @ingroup TestsuitesValidationIntr
*
* @{
*/
@@ -142,7 +142,7 @@ typedef struct {
/**
* @brief This member specifies if the ``pending`` parameter value.
*/
- bool *pending;;
+ bool *pending;
/**
* @brief This member contains the return value of the
diff --git a/testsuites/validation/tc-intr-non-smp.c b/testsuites/validation/tc-intr-non-smp.c
index bb75ccc1b6..ce34571298 100644
--- a/testsuites/validation/tc-intr-non-smp.c
+++ b/testsuites/validation/tc-intr-non-smp.c
@@ -3,11 +3,11 @@
/**
* @file
*
- * @ingroup RTEMSTestCaseRtemsIntrValIntrNonSmp
+ * @ingroup RtemsIntrValIntrNonSmp
*/
/*
- * Copyright (C) 2021 embedded brains GmbH (http://www.embedded-brains.de)
+ * Copyright (C) 2021 embedded brains GmbH & Co. KG
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
@@ -59,10 +59,9 @@
#include <rtems/test.h>
/**
- * @defgroup RTEMSTestCaseRtemsIntrValIntrNonSmp \
- * spec:/rtems/intr/val/intr-non-smp
+ * @defgroup RtemsIntrValIntrNonSmp spec:/rtems/intr/val/intr-non-smp
*
- * @ingroup RTEMSTestSuiteTestsuitesValidationNonSmp
+ * @ingroup TestsuitesValidationNonSmp
*
* @brief Tests some @ref RTEMSAPIClassicIntr interfaces.
*
diff --git a/testsuites/validation/tc-intr-raise-on.c b/testsuites/validation/tc-intr-raise-on.c
index 4d305258b3..d4298463b6 100644
--- a/testsuites/validation/tc-intr-raise-on.c
+++ b/testsuites/validation/tc-intr-raise-on.c
@@ -3,11 +3,11 @@
/**
* @file
*
- * @ingroup RTEMSTestCaseRtemsIntrReqRaiseOn
+ * @ingroup RtemsIntrReqRaiseOn
*/
/*
- * Copyright (C) 2021 embedded brains GmbH (http://www.embedded-brains.de)
+ * Copyright (C) 2021 embedded brains GmbH & Co. KG
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
@@ -61,9 +61,9 @@
#include <rtems/test.h>
/**
- * @defgroup RTEMSTestCaseRtemsIntrReqRaiseOn spec:/rtems/intr/req/raise-on
+ * @defgroup RtemsIntrReqRaiseOn spec:/rtems/intr/req/raise-on
*
- * @ingroup RTEMSTestSuiteTestsuitesValidationIntr
+ * @ingroup TestsuitesValidationIntr
*
* @{
*/
diff --git a/testsuites/validation/tc-intr-raise.c b/testsuites/validation/tc-intr-raise.c
index dde5f2c0e0..1faa48fc79 100644
--- a/testsuites/validation/tc-intr-raise.c
+++ b/testsuites/validation/tc-intr-raise.c
@@ -3,11 +3,11 @@
/**
* @file
*
- * @ingroup RTEMSTestCaseRtemsIntrReqRaise
+ * @ingroup RtemsIntrReqRaise
*/
/*
- * Copyright (C) 2021 embedded brains GmbH (http://www.embedded-brains.de)
+ * Copyright (C) 2021 embedded brains GmbH & Co. KG
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
@@ -61,9 +61,9 @@
#include <rtems/test.h>
/**
- * @defgroup RTEMSTestCaseRtemsIntrReqRaise spec:/rtems/intr/req/raise
+ * @defgroup RtemsIntrReqRaise spec:/rtems/intr/req/raise
*
- * @ingroup RTEMSTestSuiteTestsuitesValidationIntr
+ * @ingroup TestsuitesValidationIntr
*
* @{
*/
diff --git a/testsuites/validation/tc-intr-set-affinity.c b/testsuites/validation/tc-intr-set-affinity.c
index e49d83e8e1..3354681b47 100644
--- a/testsuites/validation/tc-intr-set-affinity.c
+++ b/testsuites/validation/tc-intr-set-affinity.c
@@ -3,11 +3,11 @@
/**
* @file
*
- * @ingroup RTEMSTestCaseRtemsIntrReqSetAffinity
+ * @ingroup RtemsIntrReqSetAffinity
*/
/*
- * Copyright (C) 2021, 2022 embedded brains GmbH (http://www.embedded-brains.de)
+ * Copyright (C) 2021, 2022 embedded brains GmbH & Co. KG
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
@@ -60,10 +60,9 @@
#include <rtems/test.h>
/**
- * @defgroup RTEMSTestCaseRtemsIntrReqSetAffinity \
- * spec:/rtems/intr/req/set-affinity
+ * @defgroup RtemsIntrReqSetAffinity spec:/rtems/intr/req/set-affinity
*
- * @ingroup RTEMSTestSuiteTestsuitesValidationIntr
+ * @ingroup TestsuitesValidationIntr
*
* @{
*/
diff --git a/testsuites/validation/tc-intr-smp-only.c b/testsuites/validation/tc-intr-smp-only.c
index 4bf596141c..4d1f64b699 100644
--- a/testsuites/validation/tc-intr-smp-only.c
+++ b/testsuites/validation/tc-intr-smp-only.c
@@ -3,11 +3,11 @@
/**
* @file
*
- * @ingroup RTEMSTestCaseRtemsIntrValIntrSmpOnly
+ * @ingroup RtemsIntrValIntrSmpOnly
*/
/*
- * Copyright (C) 2021 embedded brains GmbH (http://www.embedded-brains.de)
+ * Copyright (C) 2021 embedded brains GmbH & Co. KG
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
@@ -59,10 +59,9 @@
#include <rtems/test.h>
/**
- * @defgroup RTEMSTestCaseRtemsIntrValIntrSmpOnly \
- * spec:/rtems/intr/val/intr-smp-only
+ * @defgroup RtemsIntrValIntrSmpOnly spec:/rtems/intr/val/intr-smp-only
*
- * @ingroup RTEMSTestSuiteTestsuitesValidationSmpOnly0
+ * @ingroup TestsuitesValidationSmpOnly0
*
* @brief Tests some @ref RTEMSAPIClassicIntr directives.
*
diff --git a/testsuites/validation/tc-intr-vector-disable.c b/testsuites/validation/tc-intr-vector-disable.c
index 3c7eb11838..013befeff8 100644
--- a/testsuites/validation/tc-intr-vector-disable.c
+++ b/testsuites/validation/tc-intr-vector-disable.c
@@ -3,11 +3,11 @@
/**
* @file
*
- * @ingroup RTEMSTestCaseRtemsIntrReqVectorDisable
+ * @ingroup RtemsIntrReqVectorDisable
*/
/*
- * Copyright (C) 2021 embedded brains GmbH (http://www.embedded-brains.de)
+ * Copyright (C) 2021 embedded brains GmbH & Co. KG
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
@@ -61,10 +61,9 @@
#include <rtems/test.h>
/**
- * @defgroup RTEMSTestCaseRtemsIntrReqVectorDisable \
- * spec:/rtems/intr/req/vector-disable
+ * @defgroup RtemsIntrReqVectorDisable spec:/rtems/intr/req/vector-disable
*
- * @ingroup RTEMSTestSuiteTestsuitesValidationIntr
+ * @ingroup TestsuitesValidationIntr
*
* @{
*/
diff --git a/testsuites/validation/tc-intr-vector-enable.c b/testsuites/validation/tc-intr-vector-enable.c
index 024953ab48..91993fb8d4 100644
--- a/testsuites/validation/tc-intr-vector-enable.c
+++ b/testsuites/validation/tc-intr-vector-enable.c
@@ -3,11 +3,11 @@
/**
* @file
*
- * @ingroup RTEMSTestCaseRtemsIntrReqVectorEnable
+ * @ingroup RtemsIntrReqVectorEnable
*/
/*
- * Copyright (C) 2021 embedded brains GmbH (http://www.embedded-brains.de)
+ * Copyright (C) 2021 embedded brains GmbH & Co. KG
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
@@ -61,10 +61,9 @@
#include <rtems/test.h>
/**
- * @defgroup RTEMSTestCaseRtemsIntrReqVectorEnable \
- * spec:/rtems/intr/req/vector-enable
+ * @defgroup RtemsIntrReqVectorEnable spec:/rtems/intr/req/vector-enable
*
- * @ingroup RTEMSTestSuiteTestsuitesValidationIntr
+ * @ingroup TestsuitesValidationIntr
*
* @{
*/
@@ -368,7 +367,7 @@ static void RtemsIntrReqVectorEnable_Pre_IsEnabled_Prepare(
case RtemsIntrReqVectorEnable_Pre_IsEnabled_No: {
/*
* While the interrupt vector associated with the ``vector`` parameter is
- * enabled.
+ * disabled.
*/
/*
* This pre-condition depends on the attributes of an interrupt vector,
diff --git a/testsuites/validation/tc-intr-vector-is-enabled.c b/testsuites/validation/tc-intr-vector-is-enabled.c
index ea26b80aee..d24ad3f602 100644
--- a/testsuites/validation/tc-intr-vector-is-enabled.c
+++ b/testsuites/validation/tc-intr-vector-is-enabled.c
@@ -3,11 +3,11 @@
/**
* @file
*
- * @ingroup RTEMSTestCaseRtemsIntrReqVectorIsEnabled
+ * @ingroup RtemsIntrReqVectorIsEnabled
*/
/*
- * Copyright (C) 2021 embedded brains GmbH (http://www.embedded-brains.de)
+ * Copyright (C) 2021 embedded brains GmbH & Co. KG
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
@@ -61,10 +61,9 @@
#include <rtems/test.h>
/**
- * @defgroup RTEMSTestCaseRtemsIntrReqVectorIsEnabled \
- * spec:/rtems/intr/req/vector-is-enabled
+ * @defgroup RtemsIntrReqVectorIsEnabled spec:/rtems/intr/req/vector-is-enabled
*
- * @ingroup RTEMSTestSuiteTestsuitesValidationIntr
+ * @ingroup TestsuitesValidationIntr
*
* @{
*/
@@ -144,7 +143,7 @@ typedef struct {
/**
* @brief This member specifies if the ``enabled`` parameter value.
*/
- bool *enabled;;
+ bool *enabled;
/**
* @brief This member contains the return value of the
diff --git a/testsuites/validation/tc-intr.c b/testsuites/validation/tc-intr.c
index 7b2e6b0d48..72ac626c97 100644
--- a/testsuites/validation/tc-intr.c
+++ b/testsuites/validation/tc-intr.c
@@ -3,11 +3,11 @@
/**
* @file
*
- * @ingroup RTEMSTestCaseRtemsIntrValIntr
+ * @ingroup RtemsIntrValIntr
*/
/*
- * Copyright (C) 2021 embedded brains GmbH (http://www.embedded-brains.de)
+ * Copyright (C) 2021 embedded brains GmbH & Co. KG
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
@@ -60,9 +60,9 @@
#include <rtems/test.h>
/**
- * @defgroup RTEMSTestCaseRtemsIntrValIntr spec:/rtems/intr/val/intr
+ * @defgroup RtemsIntrValIntr spec:/rtems/intr/val/intr
*
- * @ingroup RTEMSTestSuiteTestsuitesValidationNoClock0
+ * @ingroup TestsuitesValidationNoClock0
*
* @brief Tests some @ref RTEMSAPIClassicIntr directives.
*
diff --git a/testsuites/validation/tc-io-getchark.c b/testsuites/validation/tc-io-getchark.c
index 54a24d5694..20aede7fd9 100644
--- a/testsuites/validation/tc-io-getchark.c
+++ b/testsuites/validation/tc-io-getchark.c
@@ -3,11 +3,11 @@
/**
* @file
*
- * @ingroup RTEMSTestCaseRtemsIoReqGetchark
+ * @ingroup RtemsIoReqGetchark
*/
/*
- * Copyright (C) 2021 embedded brains GmbH (http://www.embedded-brains.de)
+ * Copyright (C) 2021 embedded brains GmbH & Co. KG
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
@@ -57,9 +57,9 @@
#include <rtems/test.h>
/**
- * @defgroup RTEMSTestCaseRtemsIoReqGetchark spec:/rtems/io/req/getchark
+ * @defgroup RtemsIoReqGetchark spec:/rtems/io/req/getchark
*
- * @ingroup RTEMSTestSuiteTestsuitesValidationNoClock0
+ * @ingroup TestsuitesValidationNoClock0
*
* @{
*/
diff --git a/testsuites/validation/tc-io-put-char.c b/testsuites/validation/tc-io-put-char.c
index ab4c82ffda..671eed9835 100644
--- a/testsuites/validation/tc-io-put-char.c
+++ b/testsuites/validation/tc-io-put-char.c
@@ -3,11 +3,11 @@
/**
* @file
*
- * @ingroup RTEMSTestCaseRtemsIoReqPutChar
+ * @ingroup RtemsIoReqPutChar
*/
/*
- * Copyright (C) 2021 embedded brains GmbH (http://www.embedded-brains.de)
+ * Copyright (C) 2021 embedded brains GmbH & Co. KG
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
@@ -57,9 +57,9 @@
#include <rtems/test.h>
/**
- * @defgroup RTEMSTestCaseRtemsIoReqPutChar spec:/rtems/io/req/put-char
+ * @defgroup RtemsIoReqPutChar spec:/rtems/io/req/put-char
*
- * @ingroup RTEMSTestSuiteTestsuitesValidationNoClock0
+ * @ingroup TestsuitesValidationNoClock0
*
* @{
*/
diff --git a/testsuites/validation/tc-io-putc.c b/testsuites/validation/tc-io-putc.c
index d55ed5dae7..7b0efe2b17 100644
--- a/testsuites/validation/tc-io-putc.c
+++ b/testsuites/validation/tc-io-putc.c
@@ -3,11 +3,11 @@
/**
* @file
*
- * @ingroup RTEMSTestCaseRtemsIoReqPutc
+ * @ingroup RtemsIoReqPutc
*/
/*
- * Copyright (C) 2021 embedded brains GmbH (http://www.embedded-brains.de)
+ * Copyright (C) 2021 embedded brains GmbH & Co. KG
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
@@ -57,9 +57,9 @@
#include <rtems/test.h>
/**
- * @defgroup RTEMSTestCaseRtemsIoReqPutc spec:/rtems/io/req/putc
+ * @defgroup RtemsIoReqPutc spec:/rtems/io/req/putc
*
- * @ingroup RTEMSTestSuiteTestsuitesValidationNoClock0
+ * @ingroup TestsuitesValidationNoClock0
*
* @{
*/
diff --git a/testsuites/validation/tc-message-broadcast.c b/testsuites/validation/tc-message-broadcast.c
index 62e5aa5c7e..01de6a99b3 100644
--- a/testsuites/validation/tc-message-broadcast.c
+++ b/testsuites/validation/tc-message-broadcast.c
@@ -3,11 +3,11 @@
/**
* @file
*
- * @ingroup RTEMSTestCaseRtemsMessageReqBroadcast
+ * @ingroup RtemsMessageReqBroadcast
*/
/*
- * Copyright (C) 2021 embedded brains GmbH (http://www.embedded-brains.de)
+ * Copyright (C) 2021 embedded brains GmbH & Co. KG
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
@@ -59,10 +59,9 @@
#include <rtems/test.h>
/**
- * @defgroup RTEMSTestCaseRtemsMessageReqBroadcast \
- * spec:/rtems/message/req/broadcast
+ * @defgroup RtemsMessageReqBroadcast spec:/rtems/message/req/broadcast
*
- * @ingroup RTEMSTestSuiteTestsuitesValidationNoClock0
+ * @ingroup TestsuitesValidationNoClock0
*
* @{
*/
diff --git a/testsuites/validation/tc-message-construct.c b/testsuites/validation/tc-message-construct.c
index a7093b28e1..316849ba68 100644
--- a/testsuites/validation/tc-message-construct.c
+++ b/testsuites/validation/tc-message-construct.c
@@ -3,11 +3,11 @@
/**
* @file
*
- * @ingroup RTEMSTestCaseRtemsMessageReqConstruct
+ * @ingroup RtemsMessageReqConstruct
*/
/*
- * Copyright (C) 2020, 2021 embedded brains GmbH (http://www.embedded-brains.de)
+ * Copyright (C) 2020, 2021 embedded brains GmbH & Co. KG
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
@@ -60,10 +60,9 @@
#include <rtems/test.h>
/**
- * @defgroup RTEMSTestCaseRtemsMessageReqConstruct \
- * spec:/rtems/message/req/construct
+ * @defgroup RtemsMessageReqConstruct spec:/rtems/message/req/construct
*
- * @ingroup RTEMSTestSuiteTestsuitesValidationNoClock0
+ * @ingroup TestsuitesValidationNoClock0
*
* @{
*/
diff --git a/testsuites/validation/tc-message-delete.c b/testsuites/validation/tc-message-delete.c
index 0835a5c5e9..b0fa53be66 100644
--- a/testsuites/validation/tc-message-delete.c
+++ b/testsuites/validation/tc-message-delete.c
@@ -3,11 +3,11 @@
/**
* @file
*
- * @ingroup RTEMSTestCaseRtemsMessageReqDelete
+ * @ingroup RtemsMessageReqDelete
*/
/*
- * Copyright (C) 2021 embedded brains GmbH (http://www.embedded-brains.de)
+ * Copyright (C) 2021 embedded brains GmbH & Co. KG
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
@@ -60,9 +60,9 @@
#include <rtems/test.h>
/**
- * @defgroup RTEMSTestCaseRtemsMessageReqDelete spec:/rtems/message/req/delete
+ * @defgroup RtemsMessageReqDelete spec:/rtems/message/req/delete
*
- * @ingroup RTEMSTestSuiteTestsuitesValidationNoClock0
+ * @ingroup TestsuitesValidationNoClock0
*
* @{
*/
diff --git a/testsuites/validation/tc-message-flush-pending.c b/testsuites/validation/tc-message-flush-pending.c
index 67d2ede6bd..48ade108d0 100644
--- a/testsuites/validation/tc-message-flush-pending.c
+++ b/testsuites/validation/tc-message-flush-pending.c
@@ -3,11 +3,11 @@
/**
* @file
*
- * @ingroup RTEMSTestCaseRtemsMessageReqFlushPending
+ * @ingroup RtemsMessageReqFlushPending
*/
/*
- * Copyright (C) 2021 embedded brains GmbH (http://www.embedded-brains.de)
+ * Copyright (C) 2021 embedded brains GmbH & Co. KG
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
@@ -59,10 +59,9 @@
#include <rtems/test.h>
/**
- * @defgroup RTEMSTestCaseRtemsMessageReqFlushPending \
- * spec:/rtems/message/req/flush-pending
+ * @defgroup RtemsMessageReqFlushPending spec:/rtems/message/req/flush-pending
*
- * @ingroup RTEMSTestSuiteTestsuitesValidationNoClock0
+ * @ingroup TestsuitesValidationNoClock0
*
* @{
*/
diff --git a/testsuites/validation/tc-message-ident.c b/testsuites/validation/tc-message-ident.c
index 70e7d53350..dc3ed119a6 100644
--- a/testsuites/validation/tc-message-ident.c
+++ b/testsuites/validation/tc-message-ident.c
@@ -3,11 +3,11 @@
/**
* @file
*
- * @ingroup RTEMSTestCaseRtemsMessageValIdent
+ * @ingroup RtemsMessageValIdent
*/
/*
- * Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+ * Copyright (C) 2020 embedded brains GmbH & Co. KG
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
@@ -57,16 +57,16 @@
#include <rtems/test.h>
/**
- * @defgroup RTEMSTestCaseRtemsMessageValIdent spec:/rtems/message/val/ident
+ * @defgroup RtemsMessageValIdent spec:/rtems/message/val/ident
*
- * @ingroup RTEMSTestSuiteTestsuitesValidationNoClock0
+ * @ingroup TestsuitesValidationNoClock0
*
* @brief Test the rtems_message_queue_ident() directive.
*
* This test case performs the following actions:
*
* - Run the generic object identification tests for Classic API message queue
- * class objects defined by /rtems/req/ident.
+ * class objects defined by spec:/rtems/req/ident.
*
* @{
*/
@@ -95,7 +95,7 @@ static rtems_status_code ClassicMessageIdentAction(
/**
* @brief Run the generic object identification tests for Classic API message
- * queue class objects defined by /rtems/req/ident.
+ * queue class objects defined by spec:/rtems/req/ident.
*/
static void RtemsMessageValIdent_Action_0( void )
{
diff --git a/testsuites/validation/tc-message-macros.c b/testsuites/validation/tc-message-macros.c
index f8e6a46252..b3c37b1963 100644
--- a/testsuites/validation/tc-message-macros.c
+++ b/testsuites/validation/tc-message-macros.c
@@ -3,11 +3,11 @@
/**
* @file
*
- * @ingroup RTEMSTestCaseRtemsMessageValMessageMacros
+ * @ingroup RtemsMessageValMessageMacros
*/
/*
- * Copyright (C) 2021 embedded brains GmbH (http://www.embedded-brains.de)
+ * Copyright (C) 2021 embedded brains GmbH & Co. KG
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
@@ -57,10 +57,10 @@
#include <rtems/test.h>
/**
- * @defgroup RTEMSTestCaseRtemsMessageValMessageMacros \
+ * @defgroup RtemsMessageValMessageMacros \
* spec:/rtems/message/val/message-macros
*
- * @ingroup RTEMSTestSuiteTestsuitesValidationNoClock0
+ * @ingroup TestsuitesValidationNoClock0
*
* @brief Tests the macros of the @ref RTEMSAPIClassicMessage.
*
diff --git a/testsuites/validation/tc-message-performance.c b/testsuites/validation/tc-message-performance.c
index 162c094078..c01570b772 100644
--- a/testsuites/validation/tc-message-performance.c
+++ b/testsuites/validation/tc-message-performance.c
@@ -3,11 +3,11 @@
/**
* @file
*
- * @ingroup RTEMSTestCaseRtemsMessageValPerf
+ * @ingroup RtemsMessageValPerf
*/
/*
- * Copyright (C) 2021 embedded brains GmbH (http://www.embedded-brains.de)
+ * Copyright (C) 2021 embedded brains GmbH & Co. KG
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
@@ -59,9 +59,9 @@
#include <rtems/test.h>
/**
- * @defgroup RTEMSTestCaseRtemsMessageValPerf spec:/rtems/message/val/perf
+ * @defgroup RtemsMessageValPerf spec:/rtems/message/val/perf
*
- * @ingroup RTEMSTestSuiteTestsuitesPerformanceNoClock0
+ * @ingroup TestsuitesPerformanceNoClock0
*
* @brief This test case provides a context to run @ref RTEMSAPIClassicMessage
* performance tests.
@@ -79,6 +79,11 @@ typedef struct {
rtems_id queue_id;
/**
+ * @brief This member provides a message to send.
+ */
+ long message;
+
+ /**
* @brief This member provides a worker identifier.
*/
rtems_id worker_id;
@@ -116,15 +121,17 @@ static RtemsMessageValPerf_Context
#define MAXIMUM_MESSAGE_SIZE 8
-typedef RtemsMessageValPerf_Context Context;
+#define EVENT_END RTEMS_EVENT_0
+
+#define EVENT_SEND RTEMS_EVENT_1
-typedef enum {
- EVENT_END = RTEMS_EVENT_0,
- EVENT_SEND = RTEMS_EVENT_1,
- EVENT_SEND_END = RTEMS_EVENT_2,
- EVENT_RECEIVE = RTEMS_EVENT_3,
- EVENT_RECEIVE_END = RTEMS_EVENT_4
-} Event;
+#define EVENT_SEND_END RTEMS_EVENT_2
+
+#define EVENT_RECEIVE RTEMS_EVENT_3
+
+#define EVENT_RECEIVE_END RTEMS_EVENT_4
+
+typedef RtemsMessageValPerf_Context Context;
static RTEMS_MESSAGE_QUEUE_BUFFER( MAXIMUM_MESSAGE_SIZE )
storage_area[ MAXIMUM_PENDING_MESSAGES ];
@@ -152,7 +159,6 @@ static void Worker( rtems_task_argument arg )
rtems_event_set events;
rtems_status_code sc;
T_ticks ticks;
- uint64_t message;
sc = rtems_event_receive(
RTEMS_ALL_EVENTS,
@@ -168,11 +174,10 @@ static void Worker( rtems_task_argument arg )
}
if ( ( events & EVENT_SEND ) != 0 ) {
- message = 0;
sc = rtems_message_queue_send(
ctx->queue_id,
- &message,
- sizeof( message )
+ &ctx->message,
+ sizeof( ctx->message )
);
ticks = T_tick();
T_quiet_rsc_success( sc );
@@ -183,6 +188,7 @@ static void Worker( rtems_task_argument arg )
}
if ( ( events & EVENT_RECEIVE ) != 0 ) {
+ long message;
size_t size;
sc = rtems_message_queue_receive(
@@ -273,6 +279,13 @@ static T_fixture RtemsMessageValPerf_Fixture = {
};
/**
+ * @defgroup RtemsMessageReqPerfReceiveTry \
+ * spec:/rtems/message/req/perf-receive-try
+ *
+ * @{
+ */
+
+/**
* @brief Try to receive a message.
*/
static void RtemsMessageReqPerfReceiveTry_Body(
@@ -329,6 +342,15 @@ static bool RtemsMessageReqPerfReceiveTry_Teardown_Wrap(
return RtemsMessageReqPerfReceiveTry_Teardown( ctx, delta, tic, toc, retry );
}
+/** @} */
+
+/**
+ * @defgroup RtemsMessageReqPerfReceiveWaitForever \
+ * spec:/rtems/message/req/perf-receive-wait-forever
+ *
+ * @{
+ */
+
/**
* @brief Schedule a message send.
*/
@@ -416,6 +438,15 @@ static bool RtemsMessageReqPerfReceiveWaitForever_Teardown_Wrap(
);
}
+/** @} */
+
+/**
+ * @defgroup RtemsMessageReqPerfReceiveWaitTimed \
+ * spec:/rtems/message/req/perf-receive-wait-timed
+ *
+ * @{
+ */
+
/**
* @brief Schedule a message send.
*/
@@ -503,17 +534,23 @@ static bool RtemsMessageReqPerfReceiveWaitTimed_Teardown_Wrap(
);
}
+/** @} */
+
+/**
+ * @defgroup RtemsMessageReqPerfSend spec:/rtems/message/req/perf-send
+ *
+ * @{
+ */
+
/**
* @brief Send a message.
*/
static void RtemsMessageReqPerfSend_Body( RtemsMessageValPerf_Context *ctx )
{
- uint64_t message;
-
ctx->status = rtems_message_queue_send(
ctx->queue_id,
- &message,
- sizeof( message )
+ &ctx->message,
+ sizeof( ctx->message )
);
}
@@ -563,6 +600,15 @@ static bool RtemsMessageReqPerfSend_Teardown_Wrap(
return RtemsMessageReqPerfSend_Teardown( ctx, delta, tic, toc, retry );
}
+/** @} */
+
+/**
+ * @defgroup RtemsMessageReqPerfSendOther \
+ * spec:/rtems/message/req/perf-send-other
+ *
+ * @{
+ */
+
/**
* @brief Let the worker wait on the message queue.
*/
@@ -589,12 +635,10 @@ static void RtemsMessageReqPerfSendOther_Body(
RtemsMessageValPerf_Context *ctx
)
{
- uint64_t message;
-
ctx->status = rtems_message_queue_send(
ctx->queue_id,
- &message,
- sizeof( message )
+ &ctx->message,
+ sizeof( ctx->message )
);
}
@@ -639,8 +683,17 @@ static bool RtemsMessageReqPerfSendOther_Teardown_Wrap(
return RtemsMessageReqPerfSendOther_Teardown( ctx, delta, tic, toc, retry );
}
+/** @} */
+
#if defined(RTEMS_SMP)
/**
+ * @defgroup RtemsMessageReqPerfSendOtherCpu \
+ * spec:/rtems/message/req/perf-send-other-cpu
+ *
+ * @{
+ */
+
+/**
* @brief Move worker to scheduler B.
*/
static void RtemsMessageReqPerfSendOtherCpu_Prepare(
@@ -676,13 +729,11 @@ static void RtemsMessageReqPerfSendOtherCpu_Body(
RtemsMessageValPerf_Context *ctx
)
{
- uint64_t message;
-
ctx->begin = T_tick();
ctx->status = rtems_message_queue_send(
ctx->queue_id,
- &message,
- sizeof( message )
+ &ctx->message,
+ sizeof( ctx->message )
);
}
@@ -743,9 +794,18 @@ static void RtemsMessageReqPerfSendOtherCpu_Cleanup(
{
SetScheduler( ctx->worker_id, SCHEDULER_A_ID, PRIO_HIGH );
}
+
+/** @} */
#endif
/**
+ * @defgroup RtemsMessageReqPerfSendPreempt \
+ * spec:/rtems/message/req/perf-send-preempt
+ *
+ * @{
+ */
+
+/**
* @brief Let the worker wait on the message queue.
*/
static void RtemsMessageReqPerfSendPreempt_Setup(
@@ -770,13 +830,11 @@ static void RtemsMessageReqPerfSendPreempt_Body(
RtemsMessageValPerf_Context *ctx
)
{
- uint64_t message;
-
ctx->begin = T_tick();
ctx->status = rtems_message_queue_send(
ctx->queue_id,
- &message,
- sizeof( message )
+ &ctx->message,
+ sizeof( ctx->message )
);
}
@@ -827,6 +885,8 @@ static bool RtemsMessageReqPerfSendPreempt_Teardown_Wrap(
);
}
+/** @} */
+
/**
* @fn void T_case_body_RtemsMessageValPerf( void )
*/
diff --git a/testsuites/validation/tc-message-receive.c b/testsuites/validation/tc-message-receive.c
index 02a8ba9062..944512eaa8 100644
--- a/testsuites/validation/tc-message-receive.c
+++ b/testsuites/validation/tc-message-receive.c
@@ -3,11 +3,11 @@
/**
* @file
*
- * @ingroup RTEMSTestCaseRtemsMessageReqReceive
+ * @ingroup RtemsMessageReqReceive
*/
/*
- * Copyright (C) 2021 embedded brains GmbH (http://www.embedded-brains.de)
+ * Copyright (C) 2021 embedded brains GmbH & Co. KG
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
@@ -63,10 +63,9 @@
#include <rtems/test.h>
/**
- * @defgroup RTEMSTestCaseRtemsMessageReqReceive \
- * spec:/rtems/message/req/receive
+ * @defgroup RtemsMessageReqReceive spec:/rtems/message/req/receive
*
- * @ingroup RTEMSTestSuiteTestsuitesValidationNoClock0
+ * @ingroup TestsuitesValidationNoClock0
*
* @{
*/
@@ -208,7 +207,7 @@ typedef struct {
*
* It is used for run-time type checking.
*/
- uint32_t magic;;
+ uint32_t magic;
/**
* @brief This member contains a number which is sent as next message.
@@ -392,7 +391,7 @@ static void DoAction( void *ctx_in )
);
}
-static void WorkerTask( unsigned int argument )
+static void WorkerTask( rtems_task_argument argument )
{
Context *ctx = (Context *) argument;
if ( ctx != NULL ) {
diff --git a/testsuites/validation/tc-message-urgent-send.c b/testsuites/validation/tc-message-urgent-send.c
index fb42f94b84..e7364f108d 100644
--- a/testsuites/validation/tc-message-urgent-send.c
+++ b/testsuites/validation/tc-message-urgent-send.c
@@ -3,11 +3,11 @@
/**
* @file
*
- * @ingroup RTEMSTestCaseRtemsMessageReqUrgentSend
+ * @ingroup RtemsMessageReqUrgentSend
*/
/*
- * Copyright (C) 2021 embedded brains GmbH (http://www.embedded-brains.de)
+ * Copyright (C) 2021 embedded brains GmbH & Co. KG
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
@@ -59,10 +59,9 @@
#include <rtems/test.h>
/**
- * @defgroup RTEMSTestCaseRtemsMessageReqUrgentSend \
- * spec:/rtems/message/req/urgent-send
+ * @defgroup RtemsMessageReqUrgentSend spec:/rtems/message/req/urgent-send
*
- * @ingroup RTEMSTestSuiteTestsuitesValidationNoClock0
+ * @ingroup TestsuitesValidationNoClock0
*
* @{
*/
@@ -173,7 +172,7 @@ typedef struct {
*
* It is used for run-time type checking.
*/
- uint32_t magic;;
+ uint32_t magic;
/**
* @brief This member contains a number which is sent as next message.
diff --git a/testsuites/validation/tc-modes.c b/testsuites/validation/tc-modes.c
index c9f8fe65ca..91d26e835c 100644
--- a/testsuites/validation/tc-modes.c
+++ b/testsuites/validation/tc-modes.c
@@ -3,11 +3,11 @@
/**
* @file
*
- * @ingroup RTEMSTestCaseRtemsModeValModes
+ * @ingroup RtemsModeValModes
*/
/*
- * Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+ * Copyright (C) 2020 embedded brains GmbH & Co. KG
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
@@ -57,9 +57,9 @@
#include <rtems/test.h>
/**
- * @defgroup RTEMSTestCaseRtemsModeValModes spec:/rtems/mode/val/modes
+ * @defgroup RtemsModeValModes spec:/rtems/mode/val/modes
*
- * @ingroup RTEMSTestSuiteTestsuitesValidationNoClock0
+ * @ingroup TestsuitesValidationNoClock0
*
* @brief Tests the task mode constants and function-like macros of the Classic
* API.
diff --git a/testsuites/validation/tc-object.c b/testsuites/validation/tc-object.c
index 9e63d2a44e..6ee87dbf4e 100644
--- a/testsuites/validation/tc-object.c
+++ b/testsuites/validation/tc-object.c
@@ -3,11 +3,11 @@
/**
* @file
*
- * @ingroup RTEMSTestCaseRtemsObjectValObject
+ * @ingroup RtemsObjectValObject
*/
/*
- * Copyright (C) 2021 embedded brains GmbH (http://www.embedded-brains.de)
+ * Copyright (C) 2021 embedded brains GmbH & Co. KG
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
@@ -57,9 +57,9 @@
#include <rtems/test.h>
/**
- * @defgroup RTEMSTestCaseRtemsObjectValObject spec:/rtems/object/val/object
+ * @defgroup RtemsObjectValObject spec:/rtems/object/val/object
*
- * @ingroup RTEMSTestSuiteTestsuitesValidationNoClock0
+ * @ingroup TestsuitesValidationNoClock0
*
* @brief Tests some @ref RTEMSAPIClassicObject directives.
*
diff --git a/testsuites/validation/tc-options.c b/testsuites/validation/tc-options.c
index 9db52bdaaf..166b3b8b31 100644
--- a/testsuites/validation/tc-options.c
+++ b/testsuites/validation/tc-options.c
@@ -3,11 +3,11 @@
/**
* @file
*
- * @ingroup RTEMSTestCaseRtemsOptionValOptions
+ * @ingroup RtemsOptionValOptions
*/
/*
- * Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+ * Copyright (C) 2020 embedded brains GmbH & Co. KG
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
@@ -57,9 +57,9 @@
#include <rtems/test.h>
/**
- * @defgroup RTEMSTestCaseRtemsOptionValOptions spec:/rtems/option/val/options
+ * @defgroup RtemsOptionValOptions spec:/rtems/option/val/options
*
- * @ingroup RTEMSTestSuiteTestsuitesValidationNoClock0
+ * @ingroup TestsuitesValidationNoClock0
*
* @brief Tests the option constants of the Classic API.
*
@@ -88,7 +88,7 @@
*
* - Check the value of RTEMS_DEFAULT_OPTIONS.
*
- * - Check RTEMS_DEFAULT_OPTIONS equals ``RTEMS_WAIT``.
+ * - Check RTEMS_DEFAULT_OPTIONS equals RTEMS_WAIT.
*
* @{
*/
@@ -181,7 +181,7 @@ static void RtemsOptionValOptions_Action_3( void )
/* No action */
/*
- * Check RTEMS_DEFAULT_OPTIONS equals ``RTEMS_WAIT``.
+ * Check RTEMS_DEFAULT_OPTIONS equals RTEMS_WAIT.
*/
T_step_eq_int( 6, RTEMS_DEFAULT_OPTIONS, RTEMS_WAIT );
}
diff --git a/testsuites/validation/tc-part-create.c b/testsuites/validation/tc-part-create.c
index 7121b07d4e..3e7389d98a 100644
--- a/testsuites/validation/tc-part-create.c
+++ b/testsuites/validation/tc-part-create.c
@@ -3,11 +3,11 @@
/**
* @file
*
- * @ingroup RTEMSTestCaseRtemsPartReqCreate
+ * @ingroup RtemsPartReqCreate
*/
/*
- * Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+ * Copyright (C) 2020 embedded brains GmbH & Co. KG
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
@@ -61,9 +61,9 @@
#include <rtems/test.h>
/**
- * @defgroup RTEMSTestCaseRtemsPartReqCreate spec:/rtems/part/req/create
+ * @defgroup RtemsPartReqCreate spec:/rtems/part/req/create
*
- * @ingroup RTEMSTestSuiteTestsuitesValidationNoClock0
+ * @ingroup TestsuitesValidationNoClock0
*
* @{
*/
diff --git a/testsuites/validation/tc-part-delete.c b/testsuites/validation/tc-part-delete.c
index 0ec1dd0bde..227382961f 100644
--- a/testsuites/validation/tc-part-delete.c
+++ b/testsuites/validation/tc-part-delete.c
@@ -3,11 +3,11 @@
/**
* @file
*
- * @ingroup RTEMSTestCaseRtemsPartReqDelete
+ * @ingroup RtemsPartReqDelete
*/
/*
- * Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+ * Copyright (C) 2020 embedded brains GmbH & Co. KG
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
@@ -57,9 +57,9 @@
#include <rtems/test.h>
/**
- * @defgroup RTEMSTestCaseRtemsPartReqDelete spec:/rtems/part/req/delete
+ * @defgroup RtemsPartReqDelete spec:/rtems/part/req/delete
*
- * @ingroup RTEMSTestSuiteTestsuitesValidationNoClock0
+ * @ingroup TestsuitesValidationNoClock0
*
* @{
*/
diff --git a/testsuites/validation/tc-part-get.c b/testsuites/validation/tc-part-get.c
index 9308c1350a..3b8d2cc59b 100644
--- a/testsuites/validation/tc-part-get.c
+++ b/testsuites/validation/tc-part-get.c
@@ -3,11 +3,11 @@
/**
* @file
*
- * @ingroup RTEMSTestCaseRtemsPartReqGetBuffer
+ * @ingroup RtemsPartReqGetBuffer
*/
/*
- * Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+ * Copyright (C) 2020 embedded brains GmbH & Co. KG
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
@@ -57,9 +57,9 @@
#include <rtems/test.h>
/**
- * @defgroup RTEMSTestCaseRtemsPartReqGetBuffer spec:/rtems/part/req/get-buffer
+ * @defgroup RtemsPartReqGetBuffer spec:/rtems/part/req/get-buffer
*
- * @ingroup RTEMSTestSuiteTestsuitesValidationNoClock0
+ * @ingroup TestsuitesValidationNoClock0
*
* @{
*/
diff --git a/testsuites/validation/tc-part-ident.c b/testsuites/validation/tc-part-ident.c
index fccdf9671c..40f66d436e 100644
--- a/testsuites/validation/tc-part-ident.c
+++ b/testsuites/validation/tc-part-ident.c
@@ -3,11 +3,11 @@
/**
* @file
*
- * @ingroup RTEMSTestCaseRtemsPartValIdent
+ * @ingroup RtemsPartValIdent
*/
/*
- * Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+ * Copyright (C) 2020 embedded brains GmbH & Co. KG
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
@@ -57,16 +57,16 @@
#include <rtems/test.h>
/**
- * @defgroup RTEMSTestCaseRtemsPartValIdent spec:/rtems/part/val/ident
+ * @defgroup RtemsPartValIdent spec:/rtems/part/val/ident
*
- * @ingroup RTEMSTestSuiteTestsuitesValidationNoClock0
+ * @ingroup TestsuitesValidationNoClock0
*
* @brief Test the rtems_partition_ident() directive.
*
* This test case performs the following actions:
*
* - Run the generic object identification tests for Classic API partition
- * class objects defined by /rtems/req/ident.
+ * class objects defined by spec:/rtems/req/ident.
*
* @{
*/
@@ -84,7 +84,7 @@ static rtems_status_code ClassicPartIdentAction(
/**
* @brief Run the generic object identification tests for Classic API partition
- * class objects defined by /rtems/req/ident.
+ * class objects defined by spec:/rtems/req/ident.
*/
static void RtemsPartValIdent_Action_0( void )
{
diff --git a/testsuites/validation/tc-part-performance.c b/testsuites/validation/tc-part-performance.c
index 4c223910d0..858dbc0b4b 100644
--- a/testsuites/validation/tc-part-performance.c
+++ b/testsuites/validation/tc-part-performance.c
@@ -3,11 +3,11 @@
/**
* @file
*
- * @ingroup RTEMSTestCaseRtemsPartValPerf
+ * @ingroup RtemsPartValPerf
*/
/*
- * Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+ * Copyright (C) 2020 embedded brains GmbH & Co. KG
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
@@ -53,14 +53,13 @@
#endif
#include <rtems.h>
-#include <rtems/chain.h>
#include <rtems/test.h>
/**
- * @defgroup RTEMSTestCaseRtemsPartValPerf spec:/rtems/part/val/perf
+ * @defgroup RtemsPartValPerf spec:/rtems/part/val/perf
*
- * @ingroup RTEMSTestSuiteTestsuitesPerformanceNoClock0
+ * @ingroup TestsuitesPerformanceNoClock0
*
* @brief This test case provides a context to run @ref RTEMSAPIClassicPart
* performance tests.
@@ -143,7 +142,7 @@ static void RtemsPartValPerf_Setup( RtemsPartValPerf_Context *ctx )
void *area;
uintptr_t length;
- size = sizeof( rtems_chain_node );
+ size = 2 * sizeof( uintptr_t );
area = T_malloc( size );
sc = rtems_partition_create(
@@ -213,6 +212,12 @@ static T_fixture RtemsPartValPerf_Fixture = {
};
/**
+ * @defgroup RtemsPartReqPerfGetBuffer spec:/rtems/part/req/perf-get-buffer
+ *
+ * @{
+ */
+
+/**
* @brief Get a buffer.
*/
static void RtemsPartReqPerfGetBuffer_Body( RtemsPartValPerf_Context *ctx )
@@ -263,6 +268,15 @@ static bool RtemsPartReqPerfGetBuffer_Teardown_Wrap(
return RtemsPartReqPerfGetBuffer_Teardown( ctx, delta, tic, toc, retry );
}
+/** @} */
+
+/**
+ * @defgroup RtemsPartReqPerfGetNoBuffer \
+ * spec:/rtems/part/req/perf-get-no-buffer
+ *
+ * @{
+ */
+
/**
* @brief Get the buffer.
*/
@@ -335,6 +349,15 @@ static void RtemsPartReqPerfGetNoBuffer_Cleanup(
T_rsc_success( sc );
}
+/** @} */
+
+/**
+ * @defgroup RtemsPartReqPerfReturnBuffer \
+ * spec:/rtems/part/req/perf-return-buffer
+ *
+ * @{
+ */
+
/**
* @brief Get the buffer.
*/
@@ -400,6 +423,8 @@ static bool RtemsPartReqPerfReturnBuffer_Teardown_Wrap(
return RtemsPartReqPerfReturnBuffer_Teardown( ctx, delta, tic, toc, retry );
}
+/** @} */
+
/**
* @fn void T_case_body_RtemsPartValPerf( void )
*/
diff --git a/testsuites/validation/tc-part-return.c b/testsuites/validation/tc-part-return.c
index 71c6a31e66..864d916f61 100644
--- a/testsuites/validation/tc-part-return.c
+++ b/testsuites/validation/tc-part-return.c
@@ -3,11 +3,11 @@
/**
* @file
*
- * @ingroup RTEMSTestCaseRtemsPartReqReturnBuffer
+ * @ingroup RtemsPartReqReturnBuffer
*/
/*
- * Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+ * Copyright (C) 2020 embedded brains GmbH & Co. KG
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
@@ -57,10 +57,9 @@
#include <rtems/test.h>
/**
- * @defgroup RTEMSTestCaseRtemsPartReqReturnBuffer \
- * spec:/rtems/part/req/return-buffer
+ * @defgroup RtemsPartReqReturnBuffer spec:/rtems/part/req/return-buffer
*
- * @ingroup RTEMSTestSuiteTestsuitesValidationNoClock0
+ * @ingroup TestsuitesValidationNoClock0
*
* @{
*/
diff --git a/testsuites/validation/tc-part.c b/testsuites/validation/tc-part.c
index 220c8a6b63..ad241e975c 100644
--- a/testsuites/validation/tc-part.c
+++ b/testsuites/validation/tc-part.c
@@ -3,11 +3,11 @@
/**
* @file
*
- * @ingroup RTEMSTestCaseRtemsPartValPart
+ * @ingroup RtemsPartValPart
*/
/*
- * Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+ * Copyright (C) 2020 embedded brains GmbH & Co. KG
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
@@ -57,9 +57,9 @@
#include <rtems/test.h>
/**
- * @defgroup RTEMSTestCaseRtemsPartValPart spec:/rtems/part/val/part
+ * @defgroup RtemsPartValPart spec:/rtems/part/val/part
*
- * @ingroup RTEMSTestSuiteTestsuitesValidationNoClock0
+ * @ingroup TestsuitesValidationNoClock0
*
* @brief This test case collection provides validation test cases for
* requirements of the @ref RTEMSAPIClassicPart.
diff --git a/testsuites/validation/tc-preinit-array.c b/testsuites/validation/tc-preinit-array.c
new file mode 100644
index 0000000000..244b30b40e
--- /dev/null
+++ b/testsuites/validation/tc-preinit-array.c
@@ -0,0 +1,150 @@
+/* SPDX-License-Identifier: BSD-2-Clause */
+
+/**
+ * @file
+ *
+ * @ingroup ScoreThreadValPreinitArray
+ */
+
+/*
+ * Copyright (C) 2022 embedded brains GmbH & Co. KG
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ */
+
+/*
+ * This file is part of the RTEMS quality process and was automatically
+ * generated. If you find something that needs to be fixed or
+ * worded better please post a report or patch to an RTEMS mailing list
+ * or raise a bug report:
+ *
+ * https://www.rtems.org/bugs.html
+ *
+ * For information on updating and regenerating please refer to the How-To
+ * section in the Software Requirements Engineering chapter of the
+ * RTEMS Software Engineering manual. The manual is provided as a part of
+ * a release. For development sources please refer to the online
+ * documentation at:
+ *
+ * https://docs.rtems.org
+ */
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#include <rtems.h>
+
+#include <rtems/test.h>
+
+/**
+ * @defgroup ScoreThreadValPreinitArray spec:/score/thread/val/preinit-array
+ *
+ * @ingroup TestsuitesValidationNoClock0
+ *
+ * @brief Tests the ``.preinit_array`` constructor handling of the C runtime
+ * support.
+ *
+ * This test case performs the following actions:
+ *
+ * - Validate the ``.preinit_array`` constructor invocation. Mark that the
+ * test case executed.
+ *
+ * - Check that the ``.preinit_array`` constructor was called exactly once.
+ *
+ * - Check that the ``.preeinit_array`` construction was done by the Classic
+ * API user initialization task.
+ *
+ * - Check that the ``.preinit_array`` constructor was called before the
+ * global constructor invocations.
+ *
+ * @{
+ */
+
+static bool test_case_executed;
+
+static bool constructor_test_case_executed;
+
+static uint32_t counter;
+
+static uint32_t normal_constructor_counter;
+
+static uint32_t constructor_counter;
+
+static uint32_t constructor_calls;
+
+static rtems_id constructor_id;
+
+static __attribute__(( __constructor__ )) void NormalConstructor( void )
+{
+ ++counter;
+ normal_constructor_counter = counter;
+}
+
+static void Constructor( void )
+{
+ constructor_test_case_executed = test_case_executed;
+ ++counter;
+ constructor_counter = counter;
+ ++constructor_calls;
+ constructor_id = rtems_task_self();
+}
+
+static RTEMS_USED RTEMS_SECTION( ".preinit_array" ) void
+ ( * const constructor_registration )( void ) = Constructor;
+
+/**
+ * @brief Validate the ``.preinit_array`` constructor invocation. Mark that
+ * the test case executed.
+ */
+static void ScoreThreadValPreinitArray_Action_0( void )
+{
+ test_case_executed = true;
+
+ /*
+ * Check that the ``.preinit_array`` constructor was called exactly once.
+ */
+ T_eq_u32( constructor_calls, 1 );
+
+ /*
+ * Check that the ``.preeinit_array`` construction was done by the Classic
+ * API user initialization task.
+ */
+ T_eq_u32( constructor_id, rtems_task_self() );
+
+ /*
+ * Check that the ``.preinit_array`` constructor was called before the global
+ * constructor invocations.
+ */
+ T_eq_u32( constructor_counter, 1 );
+ T_eq_u32( normal_constructor_counter, 2 );
+}
+
+/**
+ * @fn void T_case_body_ScoreThreadValPreinitArray( void )
+ */
+T_TEST_CASE( ScoreThreadValPreinitArray )
+{
+ ScoreThreadValPreinitArray_Action_0();
+}
+
+/** @} */
diff --git a/testsuites/validation/tc-ratemon-cancel.c b/testsuites/validation/tc-ratemon-cancel.c
index 7cbbbcda7d..b3683ac338 100644
--- a/testsuites/validation/tc-ratemon-cancel.c
+++ b/testsuites/validation/tc-ratemon-cancel.c
@@ -3,11 +3,11 @@
/**
* @file
*
- * @ingroup RTEMSTestCaseRtemsRatemonReqCancel
+ * @ingroup RtemsRatemonReqCancel
*/
/*
- * Copyright (C) 2021 embedded brains GmbH (http://www.embedded-brains.de)
+ * Copyright (C) 2021 embedded brains GmbH & Co. KG
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
@@ -59,10 +59,10 @@
#include <rtems/test.h>
/**
- * @defgroup RTEMSTestCaseRtemsRatemonReqCancel spec:/rtems/ratemon/req/cancel
+ * @defgroup RtemsRatemonReqCancel spec:/rtems/ratemon/req/cancel
*
- * @ingroup RTEMSTestSuiteTestsuitesValidationNoClock0
- * @ingroup RTEMSTestSuiteTestsuitesValidationOneCpu0
+ * @ingroup TestsuitesValidationNoClock0
+ * @ingroup TestsuitesValidationOneCpu0
*
* @{
*/
diff --git a/testsuites/validation/tc-ratemon-create.c b/testsuites/validation/tc-ratemon-create.c
index d86cd977c9..ff7672beeb 100644
--- a/testsuites/validation/tc-ratemon-create.c
+++ b/testsuites/validation/tc-ratemon-create.c
@@ -3,11 +3,11 @@
/**
* @file
*
- * @ingroup RTEMSTestCaseRtemsRatemonReqCreate
+ * @ingroup RtemsRatemonReqCreate
*/
/*
- * Copyright (C) 2021 embedded brains GmbH (http://www.embedded-brains.de)
+ * Copyright (C) 2021 embedded brains GmbH & Co. KG
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
@@ -60,9 +60,9 @@
#include <rtems/test.h>
/**
- * @defgroup RTEMSTestCaseRtemsRatemonReqCreate spec:/rtems/ratemon/req/create
+ * @defgroup RtemsRatemonReqCreate spec:/rtems/ratemon/req/create
*
- * @ingroup RTEMSTestSuiteTestsuitesValidationNoClock0
+ * @ingroup TestsuitesValidationNoClock0
*
* @{
*/
diff --git a/testsuites/validation/tc-ratemon-delete.c b/testsuites/validation/tc-ratemon-delete.c
index 3b30188fe1..93e863f023 100644
--- a/testsuites/validation/tc-ratemon-delete.c
+++ b/testsuites/validation/tc-ratemon-delete.c
@@ -3,11 +3,11 @@
/**
* @file
*
- * @ingroup RTEMSTestCaseRtemsRatemonReqDelete
+ * @ingroup RtemsRatemonReqDelete
*/
/*
- * Copyright (C) 2021 embedded brains GmbH (http://www.embedded-brains.de)
+ * Copyright (C) 2021 embedded brains GmbH & Co. KG
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
@@ -58,9 +58,9 @@
#include <rtems/test.h>
/**
- * @defgroup RTEMSTestCaseRtemsRatemonReqDelete spec:/rtems/ratemon/req/delete
+ * @defgroup RtemsRatemonReqDelete spec:/rtems/ratemon/req/delete
*
- * @ingroup RTEMSTestSuiteTestsuitesValidationNoClock0
+ * @ingroup TestsuitesValidationNoClock0
*
* @{
*/
diff --git a/testsuites/validation/tc-ratemon-get-status.c b/testsuites/validation/tc-ratemon-get-status.c
index fe3fb300e3..750654e2c9 100644
--- a/testsuites/validation/tc-ratemon-get-status.c
+++ b/testsuites/validation/tc-ratemon-get-status.c
@@ -3,11 +3,11 @@
/**
* @file
*
- * @ingroup RTEMSTestCaseRtemsRatemonReqGetStatus
+ * @ingroup RtemsRatemonReqGetStatus
*/
/*
- * Copyright (C) 2021 embedded brains GmbH (http://www.embedded-brains.de)
+ * Copyright (C) 2021 embedded brains GmbH & Co. KG
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
@@ -60,11 +60,10 @@
#include <rtems/test.h>
/**
- * @defgroup RTEMSTestCaseRtemsRatemonReqGetStatus \
- * spec:/rtems/ratemon/req/get-status
+ * @defgroup RtemsRatemonReqGetStatus spec:/rtems/ratemon/req/get-status
*
- * @ingroup RTEMSTestSuiteTestsuitesValidationNoClock0
- * @ingroup RTEMSTestSuiteTestsuitesValidationOneCpu0
+ * @ingroup TestsuitesValidationNoClock0
+ * @ingroup TestsuitesValidationOneCpu0
*
* @{
*/
diff --git a/testsuites/validation/tc-ratemon-ident.c b/testsuites/validation/tc-ratemon-ident.c
index beeb0bfd14..27a414a980 100644
--- a/testsuites/validation/tc-ratemon-ident.c
+++ b/testsuites/validation/tc-ratemon-ident.c
@@ -3,11 +3,11 @@
/**
* @file
*
- * @ingroup RTEMSTestCaseRtemsRatemonValIdent
+ * @ingroup RtemsRatemonValIdent
*/
/*
- * Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+ * Copyright (C) 2020 embedded brains GmbH & Co. KG
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
@@ -57,16 +57,16 @@
#include <rtems/test.h>
/**
- * @defgroup RTEMSTestCaseRtemsRatemonValIdent spec:/rtems/ratemon/val/ident
+ * @defgroup RtemsRatemonValIdent spec:/rtems/ratemon/val/ident
*
- * @ingroup RTEMSTestSuiteTestsuitesValidationNoClock0
+ * @ingroup TestsuitesValidationNoClock0
*
* @brief Test the rtems_rate_monotonic_ident() directive.
*
* This test case performs the following actions:
*
* - Run the generic object identification tests for Classic API rate monotonic
- * class objects defined by /rtems/req/ident-local.
+ * class objects defined by spec:/rtems/req/ident-local.
*
* @{
*/
@@ -83,7 +83,7 @@ static rtems_status_code ClassicRatemonIdentAction(
/**
* @brief Run the generic object identification tests for Classic API rate
- * monotonic class objects defined by /rtems/req/ident-local.
+ * monotonic class objects defined by spec:/rtems/req/ident-local.
*/
static void RtemsRatemonValIdent_Action_0( void )
{
diff --git a/testsuites/validation/tc-ratemon-period.c b/testsuites/validation/tc-ratemon-period.c
index 9e2d294581..c8a73905c1 100644
--- a/testsuites/validation/tc-ratemon-period.c
+++ b/testsuites/validation/tc-ratemon-period.c
@@ -3,11 +3,11 @@
/**
* @file
*
- * @ingroup RTEMSTestCaseRtemsRatemonReqPeriod
+ * @ingroup RtemsRatemonReqPeriod
*/
/*
- * Copyright (C) 2021 embedded brains GmbH (http://www.embedded-brains.de)
+ * Copyright (C) 2021 embedded brains GmbH & Co. KG
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
@@ -59,10 +59,10 @@
#include <rtems/test.h>
/**
- * @defgroup RTEMSTestCaseRtemsRatemonReqPeriod spec:/rtems/ratemon/req/period
+ * @defgroup RtemsRatemonReqPeriod spec:/rtems/ratemon/req/period
*
- * @ingroup RTEMSTestSuiteTestsuitesValidationNoClock0
- * @ingroup RTEMSTestSuiteTestsuitesValidationOneCpu0
+ * @ingroup TestsuitesValidationNoClock0
+ * @ingroup TestsuitesValidationOneCpu0
*
* @{
*/
diff --git a/testsuites/validation/tc-ratemon-timeout.c b/testsuites/validation/tc-ratemon-timeout.c
index b70a5cc85c..dc2c745e61 100644
--- a/testsuites/validation/tc-ratemon-timeout.c
+++ b/testsuites/validation/tc-ratemon-timeout.c
@@ -3,11 +3,11 @@
/**
* @file
*
- * @ingroup RTEMSTestCaseRtemsRatemonReqTimeout
+ * @ingroup RtemsRatemonReqTimeout
*/
/*
- * Copyright (C) 2021 embedded brains GmbH (http://www.embedded-brains.de)
+ * Copyright (C) 2021 embedded brains GmbH & Co. KG
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
@@ -60,11 +60,10 @@
#include <rtems/test.h>
/**
- * @defgroup RTEMSTestCaseRtemsRatemonReqTimeout \
- * spec:/rtems/ratemon/req/timeout
+ * @defgroup RtemsRatemonReqTimeout spec:/rtems/ratemon/req/timeout
*
- * @ingroup RTEMSTestSuiteTestsuitesValidationNoClock0
- * @ingroup RTEMSTestSuiteTestsuitesValidationOneCpu0
+ * @ingroup TestsuitesValidationNoClock0
+ * @ingroup TestsuitesValidationOneCpu0
*
* @{
*/
@@ -281,13 +280,13 @@ static const char * const * const RtemsRatemonReqTimeout_PreDesc[] = {
NULL
};
-typedef RtemsRatemonReqTimeout_Context Context;
+#define EVENT_RESET RTEMS_EVENT_0
-typedef enum {
- EVENT_RESET = RTEMS_EVENT_0,
- EVENT_PERIOD_WAIT = RTEMS_EVENT_1,
- EVENT_PERIOD_OTHER = RTEMS_EVENT_2
-} Event;
+#define EVENT_PERIOD_WAIT RTEMS_EVENT_1
+
+#define EVENT_PERIOD_OTHER RTEMS_EVENT_2
+
+typedef RtemsRatemonReqTimeout_Context Context;
static void Tick( void *arg )
{
diff --git a/testsuites/validation/tc-sched-smp-edf-set-affinity.c b/testsuites/validation/tc-sched-smp-edf-set-affinity.c
index 4e5fab70dc..9e13c19ff7 100644
--- a/testsuites/validation/tc-sched-smp-edf-set-affinity.c
+++ b/testsuites/validation/tc-sched-smp-edf-set-affinity.c
@@ -3,11 +3,11 @@
/**
* @file
*
- * @ingroup RTEMSTestCaseScoreSchedSmpEdfReqSetAffinity
+ * @ingroup ScoreSchedSmpEdfReqSetAffinity
*/
/*
- * Copyright (C) 2021 embedded brains GmbH (http://www.embedded-brains.de)
+ * Copyright (C) 2021 embedded brains GmbH & Co. KG
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
@@ -63,10 +63,10 @@
#include <rtems/test.h>
/**
- * @defgroup RTEMSTestCaseScoreSchedSmpEdfReqSetAffinity \
+ * @defgroup ScoreSchedSmpEdfReqSetAffinity \
* spec:/score/sched/smp/edf/req/set-affinity
*
- * @ingroup RTEMSTestSuiteTestsuitesValidationSmpOnly0
+ * @ingroup TestsuitesValidationSmpOnly0
*
* @{
*/
diff --git a/testsuites/validation/tc-sched-smp-edf.c b/testsuites/validation/tc-sched-smp-edf.c
index 94d685bd08..7b07813ee1 100644
--- a/testsuites/validation/tc-sched-smp-edf.c
+++ b/testsuites/validation/tc-sched-smp-edf.c
@@ -3,11 +3,11 @@
/**
* @file
*
- * @ingroup RTEMSTestCaseScoreSchedSmpEdfValEdf
+ * @ingroup ScoreSchedSmpEdfValEdf
*/
/*
- * Copyright (C) 2021 embedded brains GmbH (http://www.embedded-brains.de)
+ * Copyright (C) 2021 embedded brains GmbH & Co. KG
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
@@ -59,10 +59,9 @@
#include <rtems/test.h>
/**
- * @defgroup RTEMSTestCaseScoreSchedSmpEdfValEdf \
- * spec:/score/sched/smp/edf/val/edf
+ * @defgroup ScoreSchedSmpEdfValEdf spec:/score/sched/smp/edf/val/edf
*
- * @ingroup RTEMSTestSuiteTestsuitesValidationSmpOnly0
+ * @ingroup TestsuitesValidationSmpOnly0
*
* @brief Tests for operations of the EDF SMP scheduler.
*
diff --git a/testsuites/validation/tc-sched-smp.c b/testsuites/validation/tc-sched-smp.c
index 957a978980..3e8e3fe1a2 100644
--- a/testsuites/validation/tc-sched-smp.c
+++ b/testsuites/validation/tc-sched-smp.c
@@ -3,11 +3,11 @@
/**
* @file
*
- * @ingroup RTEMSTestCaseScoreSchedSmpValSmp
+ * @ingroup ScoreSchedSmpValSmp
*/
/*
- * Copyright (C) 2021 embedded brains GmbH (http://www.embedded-brains.de)
+ * Copyright (C) 2021, 2022 embedded brains GmbH & Co. KG
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
@@ -55,6 +55,7 @@
#include <rtems.h>
#include <rtems/test-scheduler.h>
#include <rtems/score/percpu.h>
+#include <rtems/score/schedulersmp.h>
#include <rtems/score/threadimpl.h>
#include "tx-support.h"
@@ -62,9 +63,9 @@
#include <rtems/test.h>
/**
- * @defgroup RTEMSTestCaseScoreSchedSmpValSmp spec:/score/sched/smp/val/smp
+ * @defgroup ScoreSchedSmpValSmp spec:/score/sched/smp/val/smp
*
- * @ingroup RTEMSTestSuiteTestsuitesValidationSmpOnly0
+ * @ingroup TestsuitesValidationSmpOnly0
*
* @brief Tests SMP-specific scheduler behaviour.
*
@@ -213,6 +214,24 @@
*
* - Clean up all used resources.
*
+ * - Create three worker threads and a mutex. Use the mutex and the worker to
+ * check that a not scheduled thread does not get removed from the set of
+ * ready threads of a scheduler when a help request is reconsidered.
+ *
+ * - Prevent that worker B can perform a post-switch cleanup.
+ *
+ * - Give worker C a lower priority than worker B. Worker B will try to
+ * finish the thread dispatch by doing a post-switch cleanup. The
+ * post-switch cleanup cannot progress since the runner owns the thread
+ * state lock. Wait until the other processor waits on the thread state
+ * lock of worker B.
+ *
+ * - Give worker C a higher priority than worker B. Let worker B do its
+ * post-switch cleanup which will carry out the reconsider help requests
+ * for a not scheduled thread.
+ *
+ * - Clean up all used resources.
+ *
* @{
*/
@@ -250,12 +269,22 @@ typedef struct {
/**
* @brief This member contains the worker busy status.
*/
- volatile bool busy[ WORKER_COUNT ];;
+ volatile bool busy[ WORKER_COUNT ];
+
+ /**
+ * @brief This member contains an ISR lock context.
+ */
+ ISR_lock_Context lock_context;
+
+ /**
+ * @brief This member contains a counter.
+ */
+ uint32_t counter;
/**
* @brief If this member is true, then the worker shall be in the busy loop.
*/
- volatile bool is_busy[ WORKER_COUNT ];;
+ volatile bool is_busy[ WORKER_COUNT ];
/**
* @brief This member contains the per-CPU jobs.
@@ -270,24 +299,31 @@ typedef struct {
/**
* @brief This member contains the call within ISR request.
*/
- CallWithinISRRequest request;;
+ CallWithinISRRequest request;
} ScoreSchedSmpValSmp_Context;
static ScoreSchedSmpValSmp_Context
ScoreSchedSmpValSmp_Instance;
+#define EVENT_OBTAIN RTEMS_EVENT_0
+
+#define EVENT_RELEASE RTEMS_EVENT_1
+
+#define EVENT_STICKY_OBTAIN RTEMS_EVENT_2
+
+#define EVENT_STICKY_RELEASE RTEMS_EVENT_3
+
+#define EVENT_SYNC_RUNNER RTEMS_EVENT_4
+
+#define EVENT_BUSY RTEMS_EVENT_5
+
typedef ScoreSchedSmpValSmp_Context Context;
-typedef enum {
- EVENT_OBTAIN = RTEMS_EVENT_0,
- EVENT_RELEASE = RTEMS_EVENT_1,
- EVENT_STICKY_OBTAIN = RTEMS_EVENT_2,
- EVENT_STICKY_RELEASE = RTEMS_EVENT_3,
- EVENT_SYNC_RUNNER = RTEMS_EVENT_4,
- EVENT_BUSY = RTEMS_EVENT_5
-} Event;
-
-static void SendAndSync( Context *ctx, WorkerIndex worker, Event event )
+static void SendAndSync(
+ Context *ctx,
+ WorkerIndex worker,
+ rtems_event_set event
+)
{
SendEvents( ctx->worker_id[ worker ], EVENT_SYNC_RUNNER | event );
ReceiveAllEvents( EVENT_SYNC_RUNNER );
@@ -649,6 +685,7 @@ static void PrepareOwnerScheduled( Context *ctx )
SetScheduler( ctx->worker_id[ WORKER_C ], SCHEDULER_B_ID, PRIO_HIGH );
SetPriority( ctx->worker_id[ WORKER_A ], PRIO_NORMAL );
MakeBusy( ctx, WORKER_C );
+ WaitForBusy( ctx, WORKER_C );
MakeBusy( ctx, WORKER_A );
}
@@ -686,6 +723,51 @@ static void CleanupOwnerBlocked( Context *ctx )
SetScheduler( ctx->worker_id[ WORKER_C ], SCHEDULER_A_ID, PRIO_HIGH );
}
+static void ReconsiderHelpRequestB(
+ void *arg,
+ const T_scheduler_event *event,
+ T_scheduler_when when
+)
+{
+ Context *ctx;
+
+ (void) when;
+ ctx = arg;
+
+ if ( event->operation == T_SCHEDULER_RECONSIDER_HELP_REQUEST ) {
+ Scheduler_SMP_Node *node;
+
+ node = (Scheduler_SMP_Node *) event->node;
+ T_eq_int( node->state, SCHEDULER_SMP_NODE_READY );
+ ++ctx->counter;
+ }
+}
+
+static void ReleaseThreadLockB(
+ void *arg,
+ const T_scheduler_event *event,
+ T_scheduler_when when
+)
+{
+ Context *ctx;
+
+ ctx = arg;
+
+ if (
+ when == T_SCHEDULER_AFTER &&
+ event->operation == T_SCHEDULER_UPDATE_PRIORITY
+ ) {
+ Thread_Control *worker_b;
+
+ T_scheduler_set_event_handler( ReconsiderHelpRequestB, ctx );
+
+ worker_b = GetThread( ctx->worker_id[ WORKER_B ] );
+ T_eq_int( worker_b->Scheduler.state, THREAD_SCHEDULER_READY );
+
+ _Thread_State_release_critical( worker_b, &ctx->lock_context );
+ }
+}
+
static void Worker( rtems_task_argument arg, WorkerIndex worker )
{
Context *ctx;
@@ -1233,6 +1315,64 @@ static void ScoreSchedSmpValSmp_Action_16( ScoreSchedSmpValSmp_Context *ctx )
}
/**
+ * @brief Create three worker threads and a mutex. Use the mutex and the
+ * worker to check that a not scheduled thread does not get removed from the
+ * set of ready threads of a scheduler when a help request is reconsidered.
+ */
+static void ScoreSchedSmpValSmp_Action_17( ScoreSchedSmpValSmp_Context *ctx )
+{
+ Thread_Control *worker_b;
+
+ SetScheduler( ctx->worker_id[ WORKER_B ], SCHEDULER_B_ID, PRIO_NORMAL );
+ SetScheduler( ctx->worker_id[ WORKER_C ], SCHEDULER_B_ID, PRIO_HIGH );
+ SendAndSync( ctx, WORKER_B, EVENT_OBTAIN );
+ SendEvents( ctx->worker_id[ WORKER_A ], EVENT_OBTAIN );
+ SetPriority( ctx->worker_id[ WORKER_A ], PRIO_LOW );
+ MakeBusy( ctx, WORKER_B );
+ WaitForBusy( ctx, WORKER_B );
+ MakeBusy( ctx, WORKER_C );
+ WaitForBusy( ctx, WORKER_C );
+
+ /*
+ * Prevent that worker B can perform a post-switch cleanup.
+ */
+ worker_b = GetThread( ctx->worker_id[ WORKER_B ] );
+ _Thread_State_acquire( worker_b, &ctx->lock_context );
+ _ISR_lock_ISR_enable( &ctx->lock_context );
+
+ /*
+ * Give worker C a lower priority than worker B. Worker B will try to finish
+ * the thread dispatch by doing a post-switch cleanup. The post-switch
+ * cleanup cannot progress since the runner owns the thread state lock. Wait
+ * until the other processor waits on the thread state lock of worker B.
+ */
+ SetPriority( ctx->worker_id[ WORKER_C ], PRIO_LOW );
+ TicketLockWaitForOthers( &worker_b->Join_queue.Queue.Lock, 1 );
+
+ /*
+ * Give worker C a higher priority than worker B. Let worker B do its
+ * post-switch cleanup which will carry out the reconsider help requests for
+ * a not scheduled thread.
+ */
+ ctx->counter = 0;
+ T_scheduler_set_event_handler( ReleaseThreadLockB, ctx );
+ SetPriority( ctx->worker_id[ WORKER_C ], PRIO_HIGH );
+ T_scheduler_set_event_handler( NULL, NULL );
+ T_eq_u32( ctx->counter, 4 );
+
+ /*
+ * Clean up all used resources.
+ */
+ StopBusy( ctx, WORKER_B );
+ StopBusy( ctx, WORKER_C );
+ SendAndSync( ctx, WORKER_B, EVENT_RELEASE );
+ SetPriority( ctx->worker_id[ WORKER_A ], PRIO_HIGH );
+ SendEvents( ctx->worker_id[ WORKER_A ], EVENT_RELEASE );
+ SetScheduler( ctx->worker_id[ WORKER_B ], SCHEDULER_A_ID, PRIO_HIGH );
+ SetScheduler( ctx->worker_id[ WORKER_C ], SCHEDULER_A_ID, PRIO_HIGH );
+}
+
+/**
* @fn void T_case_body_ScoreSchedSmpValSmp( void )
*/
T_TEST_CASE_FIXTURE( ScoreSchedSmpValSmp, &ScoreSchedSmpValSmp_Fixture )
@@ -1258,6 +1398,7 @@ T_TEST_CASE_FIXTURE( ScoreSchedSmpValSmp, &ScoreSchedSmpValSmp_Fixture )
ScoreSchedSmpValSmp_Action_14( ctx );
ScoreSchedSmpValSmp_Action_15( ctx );
ScoreSchedSmpValSmp_Action_16( ctx );
+ ScoreSchedSmpValSmp_Action_17( ctx );
}
/** @} */
diff --git a/testsuites/validation/tc-sched-yield.c b/testsuites/validation/tc-sched-yield.c
index 8aa953fd46..057579fd1c 100644
--- a/testsuites/validation/tc-sched-yield.c
+++ b/testsuites/validation/tc-sched-yield.c
@@ -3,11 +3,11 @@
/**
* @file
*
- * @ingroup RTEMSTestCaseScoreSchedReqYield
+ * @ingroup ScoreSchedReqYield
*/
/*
- * Copyright (C) 2021 embedded brains GmbH (http://www.embedded-brains.de)
+ * Copyright (C) 2021 embedded brains GmbH & Co. KG
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
@@ -62,9 +62,9 @@
#include <rtems/test.h>
/**
- * @defgroup RTEMSTestCaseScoreSchedReqYield spec:/score/sched/req/yield
+ * @defgroup ScoreSchedReqYield spec:/score/sched/req/yield
*
- * @ingroup RTEMSTestSuiteTestsuitesValidationNoClock0
+ * @ingroup TestsuitesValidationNoClock0
*
* @{
*/
diff --git a/testsuites/validation/tc-scheduler-add-processor.c b/testsuites/validation/tc-scheduler-add-processor.c
index dbeaaa7b16..a26132aea0 100644
--- a/testsuites/validation/tc-scheduler-add-processor.c
+++ b/testsuites/validation/tc-scheduler-add-processor.c
@@ -3,11 +3,11 @@
/**
* @file
*
- * @ingroup RTEMSTestCaseRtemsSchedulerReqAddProcessor
+ * @ingroup RtemsSchedulerReqAddProcessor
*/
/*
- * Copyright (C) 2021 embedded brains GmbH (http://www.embedded-brains.de)
+ * Copyright (C) 2021 embedded brains GmbH & Co. KG
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
@@ -62,10 +62,10 @@
#include <rtems/test.h>
/**
- * @defgroup RTEMSTestCaseRtemsSchedulerReqAddProcessor \
+ * @defgroup RtemsSchedulerReqAddProcessor \
* spec:/rtems/scheduler/req/add-processor
*
- * @ingroup RTEMSTestSuiteTestsuitesValidationNoClock0
+ * @ingroup TestsuitesValidationNoClock0
*
* @{
*/
@@ -155,18 +155,18 @@ typedef struct {
* @brief This member contains the online status of the processor to add
* before the rtems_scheduler_add_processor() call is prepared.
*/
- bool online;;
+ bool online;
/**
* @brief If this member is true, then the processor should be added to the
* scheduler B during cleanup.
*/
- bool add_cpu_to_scheduler_b;;
+ bool add_cpu_to_scheduler_b;
/**
* @brief This member provides the scheduler operation records.
*/
- T_scheduler_log_2 scheduler_log;;
+ T_scheduler_log_2 scheduler_log;
/**
* @brief This member contains the return value of the
diff --git a/testsuites/validation/tc-scheduler-get-maximum-priority.c b/testsuites/validation/tc-scheduler-get-maximum-priority.c
index 45ef88c5a6..82aef23b67 100644
--- a/testsuites/validation/tc-scheduler-get-maximum-priority.c
+++ b/testsuites/validation/tc-scheduler-get-maximum-priority.c
@@ -3,11 +3,11 @@
/**
* @file
*
- * @ingroup RTEMSTestCaseRtemsSchedulerReqGetMaximumPriority
+ * @ingroup RtemsSchedulerReqGetMaximumPriority
*/
/*
- * Copyright (C) 2021 embedded brains GmbH (http://www.embedded-brains.de)
+ * Copyright (C) 2021 embedded brains GmbH & Co. KG
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
@@ -61,10 +61,10 @@
#include <rtems/test.h>
/**
- * @defgroup RTEMSTestCaseRtemsSchedulerReqGetMaximumPriority \
+ * @defgroup RtemsSchedulerReqGetMaximumPriority \
* spec:/rtems/scheduler/req/get-maximum-priority
*
- * @ingroup RTEMSTestSuiteTestsuitesValidationNoClock0
+ * @ingroup TestsuitesValidationNoClock0
*
* @{
*/
diff --git a/testsuites/validation/tc-scheduler-get-processor-set.c b/testsuites/validation/tc-scheduler-get-processor-set.c
index 3b48df44f9..ecc0254106 100644
--- a/testsuites/validation/tc-scheduler-get-processor-set.c
+++ b/testsuites/validation/tc-scheduler-get-processor-set.c
@@ -3,11 +3,11 @@
/**
* @file
*
- * @ingroup RTEMSTestCaseRtemsSchedulerReqGetProcessorSet
+ * @ingroup RtemsSchedulerReqGetProcessorSet
*/
/*
- * Copyright (C) 2021 embedded brains GmbH (http://www.embedded-brains.de)
+ * Copyright (C) 2021 embedded brains GmbH & Co. KG
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
@@ -60,10 +60,10 @@
#include <rtems/test.h>
/**
- * @defgroup RTEMSTestCaseRtemsSchedulerReqGetProcessorSet \
+ * @defgroup RtemsSchedulerReqGetProcessorSet \
* spec:/rtems/scheduler/req/get-processor-set
*
- * @ingroup RTEMSTestSuiteTestsuitesValidationNoClock0
+ * @ingroup TestsuitesValidationNoClock0
*
* @{
*/
diff --git a/testsuites/validation/tc-scheduler-ident-by-processor-set.c b/testsuites/validation/tc-scheduler-ident-by-processor-set.c
index 57b660c835..43c3b660a7 100644
--- a/testsuites/validation/tc-scheduler-ident-by-processor-set.c
+++ b/testsuites/validation/tc-scheduler-ident-by-processor-set.c
@@ -3,11 +3,11 @@
/**
* @file
*
- * @ingroup RTEMSTestCaseRtemsSchedulerReqIdentByProcessorSet
+ * @ingroup RtemsSchedulerReqIdentByProcessorSet
*/
/*
- * Copyright (C) 2021 embedded brains GmbH (http://www.embedded-brains.de)
+ * Copyright (C) 2021 embedded brains GmbH & Co. KG
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
@@ -60,10 +60,10 @@
#include <rtems/test.h>
/**
- * @defgroup RTEMSTestCaseRtemsSchedulerReqIdentByProcessorSet \
+ * @defgroup RtemsSchedulerReqIdentByProcessorSet \
* spec:/rtems/scheduler/req/ident-by-processor-set
*
- * @ingroup RTEMSTestSuiteTestsuitesValidationNoClock0
+ * @ingroup TestsuitesValidationNoClock0
*
* @{
*/
diff --git a/testsuites/validation/tc-scheduler-ident-by-processor.c b/testsuites/validation/tc-scheduler-ident-by-processor.c
index 43021fdc23..8cfe25a70e 100644
--- a/testsuites/validation/tc-scheduler-ident-by-processor.c
+++ b/testsuites/validation/tc-scheduler-ident-by-processor.c
@@ -3,11 +3,11 @@
/**
* @file
*
- * @ingroup RTEMSTestCaseRtemsSchedulerReqIdentByProcessor
+ * @ingroup RtemsSchedulerReqIdentByProcessor
*/
/*
- * Copyright (C) 2021 embedded brains GmbH (http://www.embedded-brains.de)
+ * Copyright (C) 2021 embedded brains GmbH & Co. KG
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
@@ -60,10 +60,10 @@
#include <rtems/test.h>
/**
- * @defgroup RTEMSTestCaseRtemsSchedulerReqIdentByProcessor \
+ * @defgroup RtemsSchedulerReqIdentByProcessor \
* spec:/rtems/scheduler/req/ident-by-processor
*
- * @ingroup RTEMSTestSuiteTestsuitesValidationNoClock0
+ * @ingroup TestsuitesValidationNoClock0
*
* @{
*/
@@ -246,7 +246,7 @@ static void RtemsSchedulerReqIdentByProcessor_Pre_CPUIndex_Prepare(
switch ( state ) {
case RtemsSchedulerReqIdentByProcessor_Pre_CPUIndex_Invalid: {
/*
- * While the ``cpu_index`` parameter greater than or equal to the
+ * While the ``cpu_index`` parameter is greater than or equal to the
* processor maximum.
*/
ctx->cpu_index = rtems_scheduler_get_processor_maximum();
@@ -255,7 +255,7 @@ static void RtemsSchedulerReqIdentByProcessor_Pre_CPUIndex_Prepare(
case RtemsSchedulerReqIdentByProcessor_Pre_CPUIndex_Valid: {
/*
- * While the ``cpu_index`` parameter less than the processor maximum.
+ * While the ``cpu_index`` parameter is less than the processor maximum.
*/
if ( ctx->cpu_has_scheduler ) {
ctx->cpu_index = 0;
diff --git a/testsuites/validation/tc-scheduler-ident.c b/testsuites/validation/tc-scheduler-ident.c
index 2517e1b50f..7b19f4a08e 100644
--- a/testsuites/validation/tc-scheduler-ident.c
+++ b/testsuites/validation/tc-scheduler-ident.c
@@ -3,11 +3,11 @@
/**
* @file
*
- * @ingroup RTEMSTestCaseRtemsSchedulerReqIdent
+ * @ingroup RtemsSchedulerReqIdent
*/
/*
- * Copyright (C) 2021 embedded brains GmbH (http://www.embedded-brains.de)
+ * Copyright (C) 2021 embedded brains GmbH & Co. KG
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
@@ -60,10 +60,9 @@
#include <rtems/test.h>
/**
- * @defgroup RTEMSTestCaseRtemsSchedulerReqIdent \
- * spec:/rtems/scheduler/req/ident
+ * @defgroup RtemsSchedulerReqIdent spec:/rtems/scheduler/req/ident
*
- * @ingroup RTEMSTestSuiteTestsuitesValidationNoClock0
+ * @ingroup TestsuitesValidationNoClock0
*
* @{
*/
diff --git a/testsuites/validation/tc-scheduler-non-smp.c b/testsuites/validation/tc-scheduler-non-smp.c
index a3eec8fd2d..4e805769a0 100644
--- a/testsuites/validation/tc-scheduler-non-smp.c
+++ b/testsuites/validation/tc-scheduler-non-smp.c
@@ -3,11 +3,11 @@
/**
* @file
*
- * @ingroup RTEMSTestCaseRtemsSchedulerValNonSmp
+ * @ingroup RtemsSchedulerValNonSmp
*/
/*
- * Copyright (C) 2021 embedded brains GmbH (http://www.embedded-brains.de)
+ * Copyright (C) 2021, 2023 embedded brains GmbH & Co. KG
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
@@ -57,28 +57,31 @@
#include <rtems/test.h>
/**
- * @defgroup RTEMSTestCaseRtemsSchedulerValNonSmp \
- * spec:/rtems/scheduler/val/non-smp
+ * @defgroup RtemsSchedulerValNonSmp spec:/rtems/scheduler/val/non-smp
*
- * @ingroup RTEMSTestSuiteTestsuitesValidationNonSmp
+ * @ingroup TestsuitesValidationNonSmp
*
* @brief This test case collection provides validation test cases for non-SMP
* requirements of the @ref RTEMSAPIClassicScheduler.
*
* This test case performs the following actions:
*
- * - Check that calling rtems_scheduler_get_processor() is a constant
- * expression which evaluates to zero.
+ * - Assert that rtems_scheduler_get_processor() is a constant expression which
+ * evaluates to zero.
+ *
+ * - Check that calling rtems_scheduler_get_processor() returns zero.
*
- * - Check that calling rtems_scheduler_get_processor_maximum() is a constant
+ * - Assert that rtems_scheduler_get_processor_maximum() is a constant
* expression which evaluates to zero.
*
+ * - Check that calling rtems_scheduler_get_processor_maximum() returns one.
+ *
* @{
*/
/**
- * @brief Check that calling rtems_scheduler_get_processor() is a constant
- * expression which evaluates to zero.
+ * @brief Assert that rtems_scheduler_get_processor() is a constant expression
+ * which evaluates to zero.
*/
static void RtemsSchedulerValNonSmp_Action_0( void )
{
@@ -86,11 +89,19 @@ static void RtemsSchedulerValNonSmp_Action_0( void )
}
/**
- * @brief Check that calling rtems_scheduler_get_processor_maximum() is a
- * constant expression which evaluates to zero.
+ * @brief Check that calling rtems_scheduler_get_processor() returns zero.
*/
static void RtemsSchedulerValNonSmp_Action_1( void )
{
+ T_eq_u32( rtems_scheduler_get_processor(), 0 );
+}
+
+/**
+ * @brief Assert that rtems_scheduler_get_processor_maximum() is a constant
+ * expression which evaluates to zero.
+ */
+static void RtemsSchedulerValNonSmp_Action_2( void )
+{
RTEMS_STATIC_ASSERT(
rtems_scheduler_get_processor_maximum() == 1,
GET_PROCESSOR_MAXIMUM
@@ -98,12 +109,23 @@ static void RtemsSchedulerValNonSmp_Action_1( void )
}
/**
+ * @brief Check that calling rtems_scheduler_get_processor_maximum() returns
+ * one.
+ */
+static void RtemsSchedulerValNonSmp_Action_3( void )
+{
+ T_eq_u32( rtems_scheduler_get_processor_maximum(), 1 );
+}
+
+/**
* @fn void T_case_body_RtemsSchedulerValNonSmp( void )
*/
T_TEST_CASE( RtemsSchedulerValNonSmp )
{
RtemsSchedulerValNonSmp_Action_0();
RtemsSchedulerValNonSmp_Action_1();
+ RtemsSchedulerValNonSmp_Action_2();
+ RtemsSchedulerValNonSmp_Action_3();
}
/** @} */
diff --git a/testsuites/validation/tc-scheduler-remove-processor.c b/testsuites/validation/tc-scheduler-remove-processor.c
index 6be66fa961..f199389a33 100644
--- a/testsuites/validation/tc-scheduler-remove-processor.c
+++ b/testsuites/validation/tc-scheduler-remove-processor.c
@@ -3,11 +3,11 @@
/**
* @file
*
- * @ingroup RTEMSTestCaseRtemsSchedulerReqRemoveProcessor
+ * @ingroup RtemsSchedulerReqRemoveProcessor
*/
/*
- * Copyright (C) 2021 embedded brains GmbH (http://www.embedded-brains.de)
+ * Copyright (C) 2021 embedded brains GmbH & Co. KG
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
@@ -63,10 +63,10 @@
#include <rtems/test.h>
/**
- * @defgroup RTEMSTestCaseRtemsSchedulerReqRemoveProcessor \
+ * @defgroup RtemsSchedulerReqRemoveProcessor \
* spec:/rtems/scheduler/req/remove-processor
*
- * @ingroup RTEMSTestSuiteTestsuitesValidationNoClock0
+ * @ingroup TestsuitesValidationNoClock0
*
* @{
*/
@@ -177,12 +177,12 @@ typedef struct {
/**
* @brief This member contains the worker busy status.
*/
- volatile bool busy[ WORKER_COUNT ];;
+ volatile bool busy[ WORKER_COUNT ];
/**
* @brief This member contains the worker busy status.
*/
- volatile uint32_t busy_counter[ WORKER_COUNT ];;
+ volatile uint32_t busy_counter[ WORKER_COUNT ];
/**
* @brief This member contains the barrier to synchronize the runner and the
@@ -193,7 +193,7 @@ typedef struct {
/**
* @brief This member contains the call within ISR request.
*/
- CallWithinISRRequest request;;
+ CallWithinISRRequest request;
/**
* @brief This member provides the context to wrap thread queue operations.
@@ -246,7 +246,7 @@ typedef struct {
/**
* @brief This member provides the scheduler operation records.
*/
- T_scheduler_log_4 scheduler_log;;
+ T_scheduler_log_4 scheduler_log;
/**
* @brief This member contains the return value of the
@@ -377,16 +377,22 @@ static void DoRemoveProcessor( Context *ctx )
}
#if defined(RTEMS_SMP)
-typedef enum {
- EVENT_SYNC_RUNNER = RTEMS_EVENT_0,
- EVENT_OBTAIN = RTEMS_EVENT_1,
- EVENT_RELEASE = RTEMS_EVENT_2,
- EVENT_STICKY_OBTAIN = RTEMS_EVENT_3,
- EVENT_STICKY_RELEASE = RTEMS_EVENT_4,
- EVENT_RESTART = RTEMS_EVENT_5,
- EVENT_BUSY = RTEMS_EVENT_6,
- EVENT_SYNC_RUNNER_LATE = RTEMS_EVENT_7
-} Event;
+
+#define EVENT_SYNC_RUNNER RTEMS_EVENT_0
+
+#define EVENT_OBTAIN RTEMS_EVENT_1
+
+#define EVENT_RELEASE RTEMS_EVENT_2
+
+#define EVENT_STICKY_OBTAIN RTEMS_EVENT_3
+
+#define EVENT_STICKY_RELEASE RTEMS_EVENT_4
+
+#define EVENT_RESTART RTEMS_EVENT_5
+
+#define EVENT_BUSY RTEMS_EVENT_6
+
+#define EVENT_SYNC_RUNNER_LATE RTEMS_EVENT_7
static void Barriers( void *arg )
{
@@ -413,7 +419,11 @@ static void RequestISR( void *arg )
CallWithinISRSubmit( &ctx->request );
}
-static void SendAndSync( Context *ctx, WorkerIndex worker, Event event )
+static void SendAndSync(
+ Context *ctx,
+ WorkerIndex worker,
+ rtems_event_set event
+)
{
SendEvents( ctx->worker_id[ worker ], EVENT_SYNC_RUNNER | event );
ReceiveAllEvents( EVENT_SYNC_RUNNER );
diff --git a/testsuites/validation/tc-scheduler-smp-only.c b/testsuites/validation/tc-scheduler-smp-only.c
index 2a6f0b53c6..0455567aee 100644
--- a/testsuites/validation/tc-scheduler-smp-only.c
+++ b/testsuites/validation/tc-scheduler-smp-only.c
@@ -3,11 +3,11 @@
/**
* @file
*
- * @ingroup RTEMSTestCaseRtemsSchedulerValSmpOnly
+ * @ingroup RtemsSchedulerValSmpOnly
*/
/*
- * Copyright (C) 2021 embedded brains GmbH (http://www.embedded-brains.de)
+ * Copyright (C) 2021 embedded brains GmbH & Co. KG
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
@@ -52,6 +52,7 @@
#include "config.h"
#endif
+#include <limits.h>
#include <rtems.h>
#include "ts-config.h"
@@ -60,10 +61,9 @@
#include <rtems/test.h>
/**
- * @defgroup RTEMSTestCaseRtemsSchedulerValSmpOnly \
- * spec:/rtems/scheduler/val/smp-only
+ * @defgroup RtemsSchedulerValSmpOnly spec:/rtems/scheduler/val/smp-only
*
- * @ingroup RTEMSTestSuiteTestsuitesValidationSmpOnly0
+ * @ingroup TestsuitesValidationSmpOnly0
*
* @brief This test case collection provides validation test cases for SMP-only
* requirements of the @ref RTEMSAPIClassicScheduler.
@@ -94,6 +94,9 @@
*
* - Check that processor 1 has scheduler B assigned.
*
+ * - Check that scheduler B has the maximum priority of the EDF SMP
+ * scheduler.
+ *
* - Check that processor 2 has scheduler C assigned if it is present.
*
* - Check that processor 3 has scheduler C assigned if it is present.
@@ -166,9 +169,10 @@ static void RtemsSchedulerValSmpOnly_Action_1( void )
*/
static void RtemsSchedulerValSmpOnly_Action_2( void )
{
- rtems_status_code sc;
- rtems_id id[ 4 ];
- rtems_id id_by_cpu;
+ rtems_status_code sc;
+ rtems_id id[ 4 ];
+ rtems_id id_by_cpu;
+ rtems_task_priority priority;
sc = rtems_scheduler_ident( TEST_SCHEDULER_A_NAME, &id[ 0 ]);
T_step_rsc_success( 3, sc );
@@ -217,16 +221,23 @@ static void RtemsSchedulerValSmpOnly_Action_2( void )
T_step_eq_u32( 14, id[ 1 ], id_by_cpu );
/*
+ * Check that scheduler B has the maximum priority of the EDF SMP scheduler.
+ */
+ sc = rtems_scheduler_get_maximum_priority( id_by_cpu, &priority );
+ T_step_rsc_success( 15, sc );
+ T_step_eq_u32( 16, priority, (uint32_t) INT_MAX );
+
+ /*
* Check that processor 2 has scheduler C assigned if it is present.
*/
sc = rtems_scheduler_ident_by_processor( 2, &id_by_cpu );
- T_step_true( 15, sc == RTEMS_INVALID_NAME || id[ 2 ] == id_by_cpu );
+ T_step_true( 17, sc == RTEMS_INVALID_NAME || id[ 2 ] == id_by_cpu );
/*
* Check that processor 3 has scheduler C assigned if it is present.
*/
sc = rtems_scheduler_ident_by_processor( 3, &id_by_cpu );
- T_step_true( 16, sc == RTEMS_INVALID_NAME || id[ 2 ] == id_by_cpu );
+ T_step_true( 18, sc == RTEMS_INVALID_NAME || id[ 2 ] == id_by_cpu );
}
/**
@@ -234,7 +245,7 @@ static void RtemsSchedulerValSmpOnly_Action_2( void )
*/
T_TEST_CASE( RtemsSchedulerValSmpOnly )
{
- T_plan( 17 );
+ T_plan( 19 );
RtemsSchedulerValSmpOnly_Action_0();
RtemsSchedulerValSmpOnly_Action_1();
diff --git a/testsuites/validation/tc-scheduler.c b/testsuites/validation/tc-scheduler.c
index e930d3ee51..2f5b70fc1a 100644
--- a/testsuites/validation/tc-scheduler.c
+++ b/testsuites/validation/tc-scheduler.c
@@ -3,11 +3,11 @@
/**
* @file
*
- * @ingroup RTEMSTestCaseRtemsSchedulerValScheduler
+ * @ingroup RtemsSchedulerValScheduler
*/
/*
- * Copyright (C) 2021 embedded brains GmbH (http://www.embedded-brains.de)
+ * Copyright (C) 2021 embedded brains GmbH & Co. KG
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
@@ -59,10 +59,9 @@
#include <rtems/test.h>
/**
- * @defgroup RTEMSTestCaseRtemsSchedulerValScheduler \
- * spec:/rtems/scheduler/val/scheduler
+ * @defgroup RtemsSchedulerValScheduler spec:/rtems/scheduler/val/scheduler
*
- * @ingroup RTEMSTestSuiteTestsuitesValidationNoClock0
+ * @ingroup TestsuitesValidationNoClock0
*
* @brief This test case collection provides validation test cases for general
* requirements of the @ref RTEMSAPIClassicScheduler.
diff --git a/testsuites/validation/tc-score-fatal.c b/testsuites/validation/tc-score-fatal.c
index 02131ee68e..b0a55f4664 100644
--- a/testsuites/validation/tc-score-fatal.c
+++ b/testsuites/validation/tc-score-fatal.c
@@ -3,11 +3,11 @@
/**
* @file
*
- * @ingroup RTEMSTestCaseScoreValFatal
+ * @ingroup ScoreValFatal
*/
/*
- * Copyright (C) 2021 embedded brains GmbH (http://www.embedded-brains.de)
+ * Copyright (C) 2021, 2024 embedded brains GmbH & Co. KG
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
@@ -64,24 +64,31 @@
#include <rtems/test.h>
/**
- * @defgroup RTEMSTestCaseScoreValFatal spec:/score/val/fatal
+ * @defgroup ScoreValFatal spec:/score/val/fatal
*
- * @ingroup RTEMSTestSuiteTestsuitesValidationNoClock0
- * @ingroup RTEMSTestSuiteTestsuitesValidationOneCpu0
+ * @ingroup TestsuitesValidationNoClock0
+ * @ingroup TestsuitesValidationOneCpu0
*
* @brief Tests some fatal errors.
*
* This test case performs the following actions:
*
* - Construct a task with a task body which returns. Check that the right
- * fatal error occurs.
+ * fatal error occurred.
*
- * - Construct a task which performs a thread dispatch with maskable interrupts
- * disabled. Check that the right fatal error occurs or no fatal error
- * occurs.
+ * - Construct a task which performs a direct thread dispatch with maskable
+ * interrupts disabled. Where robust thread dispatching is required, check
+ * that the right fatal error occurred, otherwise check that no fatal error
+ * occurred.
+ *
+ * - Construct a task which performs an on demand thread dispatch with maskable
+ * interrupts disabled. Where robust thread dispatching is required, check
+ * that the right fatal error occurred, otherwise check that no fatal error
+ * occurred.
*
* - Construct a task which performs a direct thread dispatch with a thread
- * dispatch level not equal to one. Check that the right fatal error occurs.
+ * dispatch level not equal to one. Check that the right fatal error
+ * occurred.
*
* - Create a mutex and construct a task which produces a deadlock which
* involves the allocator mutex.
@@ -164,10 +171,11 @@ static void FatalBadThreadDispatchEnvironment(
{
Fatal( source, code, arg );
_ISR_Set_level( 0 );
- _Thread_Dispatch_direct_no_return( _Per_CPU_Get() );
+ _Thread_Dispatch_unnest( _Per_CPU_Get() );
+ rtems_task_exit();
}
-static void ISRDisabledThreadDispatchTask( rtems_task_argument arg )
+static void ISRDisabledDirectThreadDispatchTask( rtems_task_argument arg )
{
rtems_interrupt_level level;
@@ -177,6 +185,16 @@ static void ISRDisabledThreadDispatchTask( rtems_task_argument arg )
rtems_task_exit();
}
+static void ISRDisabledOnDemandThreadDispatchTask( rtems_task_argument arg )
+{
+ rtems_interrupt_level level;
+
+ (void) arg;
+ rtems_interrupt_local_disable( level );
+ (void) level;
+ SetSelfPriority( PRIO_VERY_HIGH );
+}
+
static void FatalBadThreadDispatchDisableLevel(
rtems_fatal_source source,
rtems_fatal_code code,
@@ -245,7 +263,7 @@ static T_fixture ScoreValFatal_Fixture = {
/**
* @brief Construct a task with a task body which returns. Check that the
- * right fatal error occurs.
+ * right fatal error occurred.
*/
static void ScoreValFatal_Action_0( ScoreValFatal_Context *ctx )
{
@@ -265,9 +283,10 @@ static void ScoreValFatal_Action_0( ScoreValFatal_Context *ctx )
}
/**
- * @brief Construct a task which performs a thread dispatch with maskable
- * interrupts disabled. Check that the right fatal error occurs or no fatal
- * error occurs.
+ * @brief Construct a task which performs a direct thread dispatch with
+ * maskable interrupts disabled. Where robust thread dispatching is
+ * required, check that the right fatal error occurred, otherwise check that
+ * no fatal error occurred.
*/
static void ScoreValFatal_Action_1( ScoreValFatal_Context *ctx )
{
@@ -278,7 +297,40 @@ static void ScoreValFatal_Action_1( ScoreValFatal_Context *ctx )
SetSelfPriority( PRIO_NORMAL );
counter = ResetFatalInfo( ctx );
id = CreateTask( "BENV", PRIO_HIGH );
- StartTask( id, ISRDisabledThreadDispatchTask, NULL );
+ StartTask( id, ISRDisabledDirectThreadDispatchTask, NULL );
+
+ #if CPU_ENABLE_ROBUST_THREAD_DISPATCH == FALSE
+ if ( rtems_configuration_get_maximum_processors() > 1 ) {
+ #endif
+ T_eq_uint( GetFatalCounter( ctx ), counter + 1 );
+ T_eq_int( ctx->source, INTERNAL_ERROR_CORE );
+ T_eq_ulong( ctx->code, INTERNAL_ERROR_BAD_THREAD_DISPATCH_ENVIRONMENT );
+ #if CPU_ENABLE_ROBUST_THREAD_DISPATCH == FALSE
+ } else {
+ T_eq_uint( GetFatalCounter( ctx ), counter );
+ }
+ #endif
+
+ RestoreRunnerPriority();
+ SetFatalHandler( NULL, NULL );
+}
+
+/**
+ * @brief Construct a task which performs an on demand thread dispatch with
+ * maskable interrupts disabled. Where robust thread dispatching is
+ * required, check that the right fatal error occurred, otherwise check that
+ * no fatal error occurred.
+ */
+static void ScoreValFatal_Action_2( ScoreValFatal_Context *ctx )
+{
+ rtems_id id;
+ unsigned int counter;
+
+ SetFatalHandler( FatalBadThreadDispatchEnvironment, ctx );
+ SetSelfPriority( PRIO_NORMAL );
+ counter = ResetFatalInfo( ctx );
+ id = CreateTask( "BENV", PRIO_HIGH );
+ StartTask( id, ISRDisabledOnDemandThreadDispatchTask, NULL );
#if CPU_ENABLE_ROBUST_THREAD_DISPATCH == FALSE
if ( rtems_configuration_get_maximum_processors() > 1 ) {
@@ -299,9 +351,9 @@ static void ScoreValFatal_Action_1( ScoreValFatal_Context *ctx )
/**
* @brief Construct a task which performs a direct thread dispatch with a
* thread dispatch level not equal to one. Check that the right fatal error
- * occurs.
+ * occurred.
*/
-static void ScoreValFatal_Action_2( ScoreValFatal_Context *ctx )
+static void ScoreValFatal_Action_3( ScoreValFatal_Context *ctx )
{
rtems_id id;
unsigned int counter;
@@ -322,7 +374,7 @@ static void ScoreValFatal_Action_2( ScoreValFatal_Context *ctx )
* @brief Create a mutex and construct a task which produces a deadlock which
* involves the allocator mutex.
*/
-static void ScoreValFatal_Action_3( ScoreValFatal_Context *ctx )
+static void ScoreValFatal_Action_4( ScoreValFatal_Context *ctx )
{
rtems_extensions_table extensions;
rtems_status_code sc;
@@ -374,7 +426,7 @@ static void ScoreValFatal_Action_3( ScoreValFatal_Context *ctx )
* SetFatalHandler() requires an initial extension this validates
* CONFIGURE_INITIAL_EXTENSIONS.
*/
-static void ScoreValFatal_Action_4( ScoreValFatal_Context *ctx )
+static void ScoreValFatal_Action_5( ScoreValFatal_Context *ctx )
{
unsigned int counter;
@@ -404,6 +456,7 @@ T_TEST_CASE_FIXTURE( ScoreValFatal, &ScoreValFatal_Fixture )
ScoreValFatal_Action_2( ctx );
ScoreValFatal_Action_3( ctx );
ScoreValFatal_Action_4( ctx );
+ ScoreValFatal_Action_5( ctx );
}
/** @} */
diff --git a/testsuites/validation/tc-score-isr.c b/testsuites/validation/tc-score-isr.c
new file mode 100644
index 0000000000..b178541e72
--- /dev/null
+++ b/testsuites/validation/tc-score-isr.c
@@ -0,0 +1,285 @@
+/* SPDX-License-Identifier: BSD-2-Clause */
+
+/**
+ * @file
+ *
+ * @ingroup ScoreIsrValIsr
+ */
+
+/*
+ * Copyright (C) 2023 embedded brains GmbH & Co. KG
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ */
+
+/*
+ * This file is part of the RTEMS quality process and was automatically
+ * generated. If you find something that needs to be fixed or
+ * worded better please post a report or patch to an RTEMS mailing list
+ * or raise a bug report:
+ *
+ * https://www.rtems.org/bugs.html
+ *
+ * For information on updating and regenerating please refer to the How-To
+ * section in the Software Requirements Engineering chapter of the
+ * RTEMS Software Engineering manual. The manual is provided as a part of
+ * a release. For development sources please refer to the online
+ * documentation at:
+ *
+ * https://docs.rtems.org
+ */
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#include <rtems.h>
+#include <rtems/sysinit.h>
+#include <rtems/score/percpu.h>
+#include <rtems/score/thread.h>
+
+#include "tx-support.h"
+
+#include <rtems/test.h>
+
+/**
+ * @defgroup ScoreIsrValIsr spec:/score/isr/val/isr
+ *
+ * @ingroup TestsuitesValidationIntr
+ *
+ * @brief Tests general interrupt support behaviour.
+ *
+ * This test case performs the following actions:
+ *
+ * - Submit an ISR request during system initialization. Check the stack of
+ * the interrupted context while the ISR request is serviced. Store the
+ * result of the check in interrupted_stack_at_multitasking_start_is_valid.
+ *
+ * - Check that stack of the interrupted context was valid when an interrupt
+ * was serviced during the multitasking start.
+ *
+ * @{
+ */
+
+static uintptr_t interrupted_stack_at_multitasking_start;
+
+static bool interrupted_stack_at_multitasking_start_is_valid;
+
+#if defined(__aarch64__)
+void __real_bsp_interrupt_dispatch( void );
+
+void __wrap_bsp_interrupt_dispatch( void );
+
+void __wrap_bsp_interrupt_dispatch( void )
+{
+ if ( interrupted_stack_at_multitasking_start == 0 ) {
+ uintptr_t sp;
+ rtems_interrupt_level level;
+
+ rtems_interrupt_local_disable( level );
+ __asm__ volatile (
+ "msr spsel, #1\n"
+ "mov %0, sp\n"
+ "msr spsel, #0"
+ : "=r" ( sp )
+ );
+ rtems_interrupt_local_enable( level );
+
+ interrupted_stack_at_multitasking_start = sp;
+ }
+
+ __real_bsp_interrupt_dispatch();
+}
+#endif
+
+#if defined(ARM_MULTILIB_ARCH_V4)
+void __real_bsp_interrupt_dispatch( void );
+
+void __wrap_bsp_interrupt_dispatch( void );
+
+void __wrap_bsp_interrupt_dispatch( void )
+{
+ register uintptr_t sp __asm__( "9" );
+
+ if ( interrupted_stack_at_multitasking_start == 0 ) {
+ interrupted_stack_at_multitasking_start = sp;
+ }
+
+ __real_bsp_interrupt_dispatch();
+}
+#endif
+
+#if defined(__microblaze__)
+void __real_bsp_interrupt_dispatch( uint32_t source );
+
+void __wrap_bsp_interrupt_dispatch( uint32_t source );
+
+void __wrap_bsp_interrupt_dispatch( uint32_t source )
+{
+ register uintptr_t sp __asm__( "1" );
+
+ if ( interrupted_stack_at_multitasking_start == 0 ) {
+ interrupted_stack_at_multitasking_start = sp;
+ }
+
+ __real_bsp_interrupt_dispatch( source );
+}
+#endif
+
+#if defined(__PPC__) || defined(__powerpc64__)
+void __real_bsp_interrupt_dispatch( void );
+
+void __wrap_bsp_interrupt_dispatch( void );
+
+void __wrap_bsp_interrupt_dispatch( void )
+{
+ register uintptr_t sp __asm__( "14" );
+
+ if ( interrupted_stack_at_multitasking_start == 0 ) {
+ interrupted_stack_at_multitasking_start = sp;
+ }
+
+ __real_bsp_interrupt_dispatch();
+}
+#endif
+
+#if defined(__riscv)
+void __real__RISCV_Interrupt_dispatch(
+ uintptr_t mcause,
+ Per_CPU_Control *cpu_self
+);
+
+void __wrap__RISCV_Interrupt_dispatch(
+ uintptr_t mcause,
+ Per_CPU_Control *cpu_self
+);
+
+void __wrap__RISCV_Interrupt_dispatch(
+ uintptr_t mcause,
+ Per_CPU_Control *cpu_self
+)
+{
+ register uintptr_t sp __asm__( "s1" );
+
+ if ( interrupted_stack_at_multitasking_start == 0 ) {
+ interrupted_stack_at_multitasking_start = sp;
+ }
+
+ __real__RISCV_Interrupt_dispatch( mcause, cpu_self );
+}
+#endif
+
+#if defined(__sparc__)
+void __real__SPARC_Interrupt_dispatch( uint32_t irq );
+
+static RTEMS_USED void InterruptDispatch( uint32_t irq, uintptr_t sp )
+{
+ if ( interrupted_stack_at_multitasking_start == 0 ) {
+ interrupted_stack_at_multitasking_start = sp;
+ }
+
+ __real__SPARC_Interrupt_dispatch( irq );
+}
+
+__asm__ (
+ "\t.section\t\".text\"\n"
+ "\t.align\t4\n"
+ "\t.globl\t__wrap__SPARC_Interrupt_dispatch\n"
+ "\t.type\t__wrap__SPARC_Interrupt_dispatch, #function\n"
+ "__wrap__SPARC_Interrupt_dispatch:\n"
+ "\tmov\t%fp, %o1\n"
+ "\tor\t%o7, %g0, %g1\n"
+ "\tcall\tInterruptDispatch, 0\n"
+ "\t or\t%g1, %g0, %o7\n"
+ "\t.previous\n"
+);
+#endif
+
+static void ISRHandler( void *arg )
+{
+ uintptr_t begin;
+ uintptr_t end;
+
+ (void) arg;
+
+#if defined(RTEMS_SMP) && !(defined(__PPC__) || (__powerpc64__))
+ Per_CPU_Control *cpu_self;
+
+ cpu_self = _Per_CPU_Get();
+ begin = (uintptr_t) &cpu_self->Interrupt_frame;
+ end = begin + sizeof( cpu_self->Interrupt_frame );
+#else
+ Thread_Control *executing;
+
+ executing = GetExecuting();
+ begin = (uintptr_t) executing->Start.Initial_stack.area;
+ end = begin + executing->Start.Initial_stack.size;
+#endif
+
+ interrupted_stack_at_multitasking_start_is_valid =
+ ( begin <= interrupted_stack_at_multitasking_start &&
+ interrupted_stack_at_multitasking_start < end );
+}
+
+static CallWithinISRRequest isr_request = {
+ .handler = ISRHandler
+};
+
+static void SubmitISRRequest( void )
+{
+ CallWithinISRSubmit( &isr_request );
+}
+
+RTEMS_SYSINIT_ITEM(
+ SubmitISRRequest,
+ RTEMS_SYSINIT_DEVICE_DRIVERS,
+ RTEMS_SYSINIT_ORDER_LAST
+);
+
+/**
+ * @brief Submit an ISR request during system initialization. Check the stack
+ * of the interrupted context while the ISR request is serviced. Store the
+ * result of the check in interrupted_stack_at_multitasking_start_is_valid.
+ */
+static void ScoreIsrValIsr_Action_0( void )
+{
+ /*
+ * The actions are performed during system initialization and the
+ * multitasking start.
+ */
+
+ /*
+ * Check that stack of the interrupted context was valid when an interrupt
+ * was serviced during the multitasking start.
+ */
+ T_true( interrupted_stack_at_multitasking_start_is_valid );
+}
+
+/**
+ * @fn void T_case_body_ScoreIsrValIsr( void )
+ */
+T_TEST_CASE( ScoreIsrValIsr )
+{
+ ScoreIsrValIsr_Action_0();
+}
+
+/** @} */
diff --git a/testsuites/validation/tc-score-smp-per-cpu-jobs.c b/testsuites/validation/tc-score-smp-per-cpu-jobs.c
index dad4a6a90f..62812279cb 100644
--- a/testsuites/validation/tc-score-smp-per-cpu-jobs.c
+++ b/testsuites/validation/tc-score-smp-per-cpu-jobs.c
@@ -3,11 +3,11 @@
/**
* @file
*
- * @ingroup RTEMSTestCaseScoreSmpValPerCpuJobs
+ * @ingroup ScoreSmpValPerCpuJobs
*/
/*
- * Copyright (C) 2021 embedded brains GmbH (http://www.embedded-brains.de)
+ * Copyright (C) 2021 embedded brains GmbH & Co. KG
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
@@ -59,10 +59,9 @@
#include <rtems/test.h>
/**
- * @defgroup RTEMSTestCaseScoreSmpValPerCpuJobs \
- * spec:/score/smp/val/per-cpu-jobs
+ * @defgroup ScoreSmpValPerCpuJobs spec:/score/smp/val/per-cpu-jobs
*
- * @ingroup RTEMSTestSuiteTestsuitesValidationSmpOnly0
+ * @ingroup TestsuitesValidationSmpOnly0
*
* @brief Tests the processing order of per-processor jobs.
*
diff --git a/testsuites/validation/tc-score-smp-thread.c b/testsuites/validation/tc-score-smp-thread.c
index fc1dd394c2..38d2b26e29 100644
--- a/testsuites/validation/tc-score-smp-thread.c
+++ b/testsuites/validation/tc-score-smp-thread.c
@@ -3,11 +3,11 @@
/**
* @file
*
- * @ingroup RTEMSTestCaseScoreThreadValSmp
+ * @ingroup ScoreThreadValSmp
*/
/*
- * Copyright (C) 2021 embedded brains GmbH (http://www.embedded-brains.de)
+ * Copyright (C) 2021 embedded brains GmbH & Co. KG
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
@@ -63,9 +63,9 @@
#include <rtems/test.h>
/**
- * @defgroup RTEMSTestCaseScoreThreadValSmp spec:/score/thread/val/smp
+ * @defgroup ScoreThreadValSmp spec:/score/thread/val/smp
*
- * @ingroup RTEMSTestSuiteTestsuitesValidationSmpOnly0
+ * @ingroup TestsuitesValidationSmpOnly0
*
* @brief Tests SMP-specific thread behaviour.
*
@@ -159,17 +159,21 @@ typedef struct {
static ScoreThreadValSmp_Context
ScoreThreadValSmp_Instance;
-typedef ScoreThreadValSmp_Context Context;
+#define EVENT_OBTAIN RTEMS_EVENT_0
+
+#define EVENT_RELEASE RTEMS_EVENT_1
+
+#define EVENT_COUNT_EARLY RTEMS_EVENT_2
+
+#define EVENT_BUSY RTEMS_EVENT_3
-typedef enum {
- EVENT_OBTAIN = RTEMS_EVENT_0,
- EVENT_RELEASE = RTEMS_EVENT_1,
- EVENT_COUNT_EARLY = RTEMS_EVENT_2,
- EVENT_BUSY = RTEMS_EVENT_3,
- EVENT_COUNT = RTEMS_EVENT_4,
- EVENT_LET_WORKER_C_COUNT = RTEMS_EVENT_5,
- EVENT_SET_TASK_SWITCH_EXTENSION = RTEMS_EVENT_6
-} Event;
+#define EVENT_COUNT RTEMS_EVENT_4
+
+#define EVENT_LET_WORKER_C_COUNT RTEMS_EVENT_5
+
+#define EVENT_SET_TASK_SWITCH_EXTENSION RTEMS_EVENT_6
+
+typedef ScoreThreadValSmp_Context Context;
static void TaskSwitchExtension( rtems_tcb *executing, rtems_tcb *heir )
{
diff --git a/testsuites/validation/tc-score-thread-smp-one-cpu.c b/testsuites/validation/tc-score-thread-smp-one-cpu.c
index 3375f27e1d..b3564d574e 100644
--- a/testsuites/validation/tc-score-thread-smp-one-cpu.c
+++ b/testsuites/validation/tc-score-thread-smp-one-cpu.c
@@ -3,11 +3,11 @@
/**
* @file
*
- * @ingroup RTEMSTestCaseScoreThreadValSmpOneCpu
+ * @ingroup ScoreThreadValSmpOneCpu
*/
/*
- * Copyright (C) 2021 embedded brains GmbH (http://www.embedded-brains.de)
+ * Copyright (C) 2021 embedded brains GmbH & Co. KG
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
@@ -59,10 +59,9 @@
#include <rtems/test.h>
/**
- * @defgroup RTEMSTestCaseScoreThreadValSmpOneCpu \
- * spec:/score/thread/val/smp-one-cpu
+ * @defgroup ScoreThreadValSmpOneCpu spec:/score/thread/val/smp-one-cpu
*
- * @ingroup RTEMSTestSuiteTestsuitesValidationSmpOneCpu0
+ * @ingroup TestsuitesValidationSmpOneCpu0
*
* @brief Tests SMP-specific thread behaviour using only one processor and a
* uniprocessor scheduler.
@@ -98,11 +97,9 @@ typedef struct {
static ScoreThreadValSmpOneCpu_Context
ScoreThreadValSmpOneCpu_Instance;
-typedef ScoreThreadValSmpOneCpu_Context Context;
+#define EVENT_COUNT RTEMS_EVENT_0
-typedef enum {
- EVENT_COUNT = RTEMS_EVENT_0
-} Event;
+typedef ScoreThreadValSmpOneCpu_Context Context;
static void WorkerTask( rtems_task_argument arg )
{
diff --git a/testsuites/validation/tc-score-thread-tls-max-zero.c b/testsuites/validation/tc-score-thread-tls-max-zero.c
index d0d367437e..6205147865 100644
--- a/testsuites/validation/tc-score-thread-tls-max-zero.c
+++ b/testsuites/validation/tc-score-thread-tls-max-zero.c
@@ -3,11 +3,11 @@
/**
* @file
*
- * @ingroup RTEMSTestCaseScoreThreadValTlsMaxZero
+ * @ingroup ScoreThreadValTlsMaxZero
*/
/*
- * Copyright (C) 2022 embedded brains GmbH (http://www.embedded-brains.de)
+ * Copyright (C) 2022 embedded brains GmbH & Co. KG
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
@@ -57,10 +57,9 @@
#include <rtems/test.h>
/**
- * @defgroup RTEMSTestCaseScoreThreadValTlsMaxZero \
- * spec:/score/thread/val/tls-max-zero
+ * @defgroup ScoreThreadValTlsMaxZero spec:/score/thread/val/tls-max-zero
*
- * @ingroup RTEMSTestSuiteTestsuitesValidationTls1
+ * @ingroup TestsuitesValidationTls1
*
* @brief Tests properties of thread-local objects.
*
diff --git a/testsuites/validation/tc-score-thread-tls.c b/testsuites/validation/tc-score-thread-tls.c
index 0676d4249a..54d930d111 100644
--- a/testsuites/validation/tc-score-thread-tls.c
+++ b/testsuites/validation/tc-score-thread-tls.c
@@ -3,11 +3,11 @@
/**
* @file
*
- * @ingroup RTEMSTestCaseScoreThreadValTls
+ * @ingroup ScoreThreadValTls
*/
/*
- * Copyright (C) 2021 embedded brains GmbH (http://www.embedded-brains.de)
+ * Copyright (C) 2021 embedded brains GmbH & Co. KG
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
@@ -59,10 +59,10 @@
#include <rtems/test.h>
/**
- * @defgroup RTEMSTestCaseScoreThreadValTls spec:/score/thread/val/tls
+ * @defgroup ScoreThreadValTls spec:/score/thread/val/tls
*
- * @ingroup RTEMSTestSuiteTestsuitesValidationTls0
- * @ingroup RTEMSTestSuiteTestsuitesValidationTls1
+ * @ingroup TestsuitesValidationTls0
+ * @ingroup TestsuitesValidationTls1
*
* @brief Tests properties of thread-local objects.
*
diff --git a/testsuites/validation/tc-score-thread.c b/testsuites/validation/tc-score-thread.c
index 53b939e3c5..e065905641 100644
--- a/testsuites/validation/tc-score-thread.c
+++ b/testsuites/validation/tc-score-thread.c
@@ -3,11 +3,11 @@
/**
* @file
*
- * @ingroup RTEMSTestCaseScoreThreadValThread
+ * @ingroup ScoreThreadValThread
*/
/*
- * Copyright (C) 2021 embedded brains GmbH (http://www.embedded-brains.de)
+ * Copyright (C) 2021, 2023 embedded brains GmbH & Co. KG
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
@@ -56,14 +56,15 @@
#include <rtems/score/statesimpl.h>
#include <rtems/score/threadimpl.h>
+#include "ts-config.h"
#include "tx-support.h"
#include <rtems/test.h>
/**
- * @defgroup RTEMSTestCaseScoreThreadValThread spec:/score/thread/val/thread
+ * @defgroup ScoreThreadValThread spec:/score/thread/val/thread
*
- * @ingroup RTEMSTestSuiteTestsuitesValidationNoClock0
+ * @ingroup TestsuitesValidationNoClock0
*
* @brief Tests general thread behaviour.
*
@@ -86,6 +87,30 @@
*
* - Clean up all used resources.
*
+ * - Delete a thread which least recently used the floating point coprocessor.
+ *
+ * - Start the worker thread. Let it use the floating point coprocessor.
+ *
+ * - Delete the worker thread and free the thread resources.
+ *
+ * - Clean up all used resources.
+ *
+ * - Validate the global construction. Mark that the test case executed.
+ *
+ * - Check that the global constructor was called exactly once.
+ *
+ * - Check that the global construction was done by the Classic API user
+ * initialization task.
+ *
+ * - Check that the global constructor was called before the task entry.
+ *
+ * - Validate that thread dispatching does not recurse. Issue a couple of
+ * thread context switches during a thread dispatch. Record the stack
+ * pointers of the heir threads.
+ *
+ * - Check that the thread dispatching did not recurse through the recorded
+ * stack pointers.
+ *
* @{
*/
@@ -102,6 +127,26 @@ typedef struct {
* @brief This member contains the killer task identifier.
*/
rtems_id killer_id;
+
+ /**
+ * @brief This member contains a floating-point object.
+ */
+ volatile double fp_obj;
+
+ /**
+ * @brief This member indicates the thread switch state.
+ */
+ int thread_switch_state;
+
+ /**
+ * @brief This member contain the runner stack pointer at the context switch.
+ */
+ uintptr_t runner_stack[ 2 ];
+
+ /**
+ * @brief This member contain the worker stack pointer at the context switch.
+ */
+ uintptr_t worker_stack[ 2 ];
} ScoreThreadValThread_Context;
static ScoreThreadValThread_Context
@@ -109,6 +154,21 @@ static ScoreThreadValThread_Context
typedef ScoreThreadValThread_Context Context;
+static bool test_case_executed;
+
+static bool constructor_test_case_executed;
+
+static uint32_t constructor_calls;
+
+static rtems_id constructor_id;
+
+static __attribute__(( __constructor__ )) void Constructor( void )
+{
+ constructor_test_case_executed = test_case_executed;
+ ++constructor_calls;
+ constructor_id = rtems_task_self();
+}
+
static void TaskTerminate( rtems_tcb *executing )
{
Context *ctx;
@@ -126,6 +186,29 @@ static void WorkerTask( rtems_task_argument arg )
SuspendSelf();
}
+static void GoBackToRunner( void *arg )
+{
+ Context *ctx;
+
+ ctx = arg;
+ SetPriority( ctx->worker_id, PRIO_LOW );
+}
+
+static void FloatingPointTask( rtems_task_argument arg )
+{
+ Context *ctx;
+
+ ctx = (Context *) arg;
+ ctx->fp_obj *= 1.23;
+
+ /*
+ * We use an interrupt to go back to the runner since on some
+ * architectures, the floating-point context is only saved during interrupt
+ * processing and not for synchronous thread switches.
+ */
+ CallWithinISR( GoBackToRunner, ctx );
+}
+
static void KillerTask( rtems_task_argument arg )
{
Context *ctx;
@@ -134,6 +217,44 @@ static void KillerTask( rtems_task_argument arg )
DeleteTask( ctx->worker_id );
}
+static void TaskSwitch( rtems_tcb *executing, rtems_tcb *heir )
+{
+ Context *ctx;
+ rtems_id worker_id;
+ int state;
+ uintptr_t heir_stack;
+
+ ctx = T_fixture_context();
+ worker_id = ctx->worker_id;
+ state = ctx->thread_switch_state;
+ ctx->thread_switch_state = state + 1;
+ heir_stack = _CPU_Context_Get_SP( &heir->Registers );
+
+ switch ( state ) {
+ case 0:
+ T_eq_u32( heir->Object.id, worker_id );
+ SuspendTask( worker_id );
+ ctx->worker_stack[ 0 ] = heir_stack;
+ break;
+ case 1:
+ T_eq_u32( executing->Object.id, worker_id );
+ ResumeTask( worker_id );
+ ctx->runner_stack[ 0 ] = heir_stack;
+ break;
+ case 2:
+ T_eq_u32( heir->Object.id, worker_id );
+ SuspendTask( worker_id );
+ ctx->worker_stack[ 1 ] = heir_stack;
+ break;
+ case 3:
+ T_eq_u32( executing->Object.id, worker_id );
+ ctx->runner_stack[ 1 ] = heir_stack;
+ break;
+ default:
+ T_unreachable();
+ }
+}
+
static T_fixture ScoreThreadValThread_Fixture = {
.setup = NULL,
.stop = NULL,
@@ -217,6 +338,97 @@ static void ScoreThreadValThread_Action_0( ScoreThreadValThread_Context *ctx )
}
/**
+ * @brief Delete a thread which least recently used the floating point
+ * coprocessor.
+ */
+static void ScoreThreadValThread_Action_1( ScoreThreadValThread_Context *ctx )
+{
+ rtems_status_code sc;
+
+ SetSelfPriority( PRIO_NORMAL );
+ sc = rtems_task_create(
+ rtems_build_name( 'W', 'O', 'R', 'K'),
+ PRIO_HIGH,
+ TEST_MINIMUM_STACK_SIZE,
+ RTEMS_DEFAULT_MODES,
+ RTEMS_FLOATING_POINT,
+ &ctx->worker_id
+ );
+ T_rsc_success( sc );
+
+ /*
+ * Start the worker thread. Let it use the floating point coprocessor.
+ */
+ StartTask( ctx->worker_id, FloatingPointTask, ctx );
+
+ /*
+ * Delete the worker thread and free the thread resources.
+ */
+ DeleteTask( ctx->worker_id );
+ KillZombies();
+
+ /*
+ * Clean up all used resources.
+ */
+ RestoreRunnerPriority();
+}
+
+/**
+ * @brief Validate the global construction. Mark that the test case executed.
+ */
+static void ScoreThreadValThread_Action_2( ScoreThreadValThread_Context *ctx )
+{
+ test_case_executed = true;
+
+ /*
+ * Check that the global constructor was called exactly once.
+ */
+ T_eq_u32( constructor_calls, 1 );
+
+ /*
+ * Check that the global construction was done by the Classic API user
+ * initialization task.
+ */
+ T_eq_u32( constructor_id, rtems_task_self() );
+
+ /*
+ * Check that the global constructor was called before the task entry.
+ */
+ T_false( constructor_test_case_executed );
+}
+
+/**
+ * @brief Validate that thread dispatching does not recurse. Issue a couple of
+ * thread context switches during a thread dispatch. Record the stack
+ * pointers of the heir threads.
+ */
+static void ScoreThreadValThread_Action_3( ScoreThreadValThread_Context *ctx )
+{
+ SetSelfPriority( PRIO_NORMAL );
+ ctx->worker_id = CreateTask( "WORK", PRIO_HIGH );
+ StartTask( ctx->worker_id, WorkerTask, NULL );
+
+ ctx->thread_switch_state = 0;
+ ctx->runner_stack[ 0 ] = 0;
+ ctx->runner_stack[ 1 ] = 1;
+ ctx->worker_stack[ 0 ] = 0;
+ ctx->worker_stack[ 1 ] = 1;
+ SetTaskSwitchExtension( TaskSwitch );
+ ResumeTask( ctx->worker_id );
+
+ SetTaskSwitchExtension( NULL );
+ DeleteTask( ctx->worker_id );
+ RestoreRunnerPriority();
+
+ /*
+ * Check that the thread dispatching did not recurse through the recorded
+ * stack pointers.
+ */
+ T_eq_uptr( ctx->runner_stack[ 0 ], ctx->runner_stack[ 1 ] );
+ T_eq_uptr( ctx->worker_stack[ 0 ], ctx->worker_stack[ 1 ] );
+}
+
+/**
* @fn void T_case_body_ScoreThreadValThread( void )
*/
T_TEST_CASE_FIXTURE( ScoreThreadValThread, &ScoreThreadValThread_Fixture )
@@ -226,6 +438,9 @@ T_TEST_CASE_FIXTURE( ScoreThreadValThread, &ScoreThreadValThread_Fixture )
ctx = T_fixture_context();
ScoreThreadValThread_Action_0( ctx );
+ ScoreThreadValThread_Action_1( ctx );
+ ScoreThreadValThread_Action_2( ctx );
+ ScoreThreadValThread_Action_3( ctx );
}
/** @} */
diff --git a/testsuites/validation/tc-score-tq-smp.c b/testsuites/validation/tc-score-tq-smp.c
index 4eff2de3c6..624ad0e7b6 100644
--- a/testsuites/validation/tc-score-tq-smp.c
+++ b/testsuites/validation/tc-score-tq-smp.c
@@ -3,11 +3,11 @@
/**
* @file
*
- * @ingroup RTEMSTestCaseScoreTqValSmp
+ * @ingroup ScoreTqValSmp
*/
/*
- * Copyright (C) 2021 embedded brains GmbH (http://www.embedded-brains.de)
+ * Copyright (C) 2021 embedded brains GmbH & Co. KG
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
@@ -61,9 +61,9 @@
#include <rtems/test.h>
/**
- * @defgroup RTEMSTestCaseScoreTqValSmp spec:/score/tq/val/smp
+ * @defgroup ScoreTqValSmp spec:/score/tq/val/smp
*
- * @ingroup RTEMSTestSuiteTestsuitesValidationSmpOnly0
+ * @ingroup TestsuitesValidationSmpOnly0
*
* @brief Tests SMP-specific thread queue behaviour.
*
diff --git a/testsuites/validation/tc-score-tq.c b/testsuites/validation/tc-score-tq.c
new file mode 100644
index 0000000000..5439d910f5
--- /dev/null
+++ b/testsuites/validation/tc-score-tq.c
@@ -0,0 +1,190 @@
+/* SPDX-License-Identifier: BSD-2-Clause */
+
+/**
+ * @file
+ *
+ * @ingroup ScoreTqValTq
+ */
+
+/*
+ * Copyright (C) 2022 embedded brains GmbH & Co. KG
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ */
+
+/*
+ * This file is part of the RTEMS quality process and was automatically
+ * generated. If you find something that needs to be fixed or
+ * worded better please post a report or patch to an RTEMS mailing list
+ * or raise a bug report:
+ *
+ * https://www.rtems.org/bugs.html
+ *
+ * For information on updating and regenerating please refer to the How-To
+ * section in the Software Requirements Engineering chapter of the
+ * RTEMS Software Engineering manual. The manual is provided as a part of
+ * a release. For development sources please refer to the online
+ * documentation at:
+ *
+ * https://docs.rtems.org
+ */
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#include "tx-support.h"
+#include "tx-thread-queue.h"
+
+#include <rtems/test.h>
+
+/**
+ * @defgroup ScoreTqValTq spec:/score/tq/val/tq
+ *
+ * @ingroup TestsuitesValidationNoClock0
+ *
+ * @brief Tests special thread queue behaviour.
+ *
+ * This test case performs the following actions:
+ *
+ * - Use two worker threads to provoke a deadlock detection involving a thread
+ * queue with no owner.
+ *
+ * - Let blocker A obtain mutex A.
+ *
+ * - Let blocker A block on a counting semaphore.
+ *
+ * - Let blocker B block on mutex A. The deadlock detection will stop since
+ * blocker A blocks on the counting semaphore which has no owner.
+ *
+ * - Clean up all used resources.
+ *
+ * @{
+ */
+
+/**
+ * @brief Test context for spec:/score/tq/val/tq test case.
+ */
+typedef struct {
+ /**
+ * @brief This member contains the thread queue test context.
+ */
+ TQContext tq_ctx;
+} ScoreTqValTq_Context;
+
+static ScoreTqValTq_Context
+ ScoreTqValTq_Instance;
+
+static void ScoreTqValTq_Setup( ScoreTqValTq_Context *ctx )
+{
+ rtems_status_code sc;
+
+ SetSelfPriority( PRIO_NORMAL );
+ TQInitialize( &ctx->tq_ctx );
+
+ /* Replace mutex D with a counting semaphore */
+ DeleteMutex( ctx->tq_ctx.mutex_id[ TQ_MUTEX_D ] );
+ sc = rtems_semaphore_create(
+ rtems_build_name( 'C', 'S', 'E', 'M' ),
+ 0,
+ RTEMS_COUNTING_SEMAPHORE | RTEMS_PRIORITY,
+ 0,
+ &ctx->tq_ctx.mutex_id[ TQ_MUTEX_D ]
+ );
+ T_rsc_success( sc );
+}
+
+static void ScoreTqValTq_Setup_Wrap( void *arg )
+{
+ ScoreTqValTq_Context *ctx;
+
+ ctx = arg;
+ ScoreTqValTq_Setup( ctx );
+}
+
+static void ScoreTqValTq_Teardown( ScoreTqValTq_Context *ctx )
+{
+ TQDestroy( &ctx->tq_ctx );
+ RestoreRunnerPriority();
+}
+
+static void ScoreTqValTq_Teardown_Wrap( void *arg )
+{
+ ScoreTqValTq_Context *ctx;
+
+ ctx = arg;
+ ScoreTqValTq_Teardown( ctx );
+}
+
+static T_fixture ScoreTqValTq_Fixture = {
+ .setup = ScoreTqValTq_Setup_Wrap,
+ .stop = NULL,
+ .teardown = ScoreTqValTq_Teardown_Wrap,
+ .scope = NULL,
+ .initial_context = &ScoreTqValTq_Instance
+};
+
+/**
+ * @brief Use two worker threads to provoke a deadlock detection involving a
+ * thread queue with no owner.
+ */
+static void ScoreTqValTq_Action_0( ScoreTqValTq_Context *ctx )
+{
+ TQReset( &ctx->tq_ctx );
+
+ /*
+ * Let blocker A obtain mutex A.
+ */
+ TQSend( &ctx->tq_ctx, TQ_BLOCKER_A, TQ_EVENT_MUTEX_A_OBTAIN );
+
+ /*
+ * Let blocker A block on a counting semaphore.
+ */
+ TQSend( &ctx->tq_ctx, TQ_BLOCKER_A, TQ_EVENT_MUTEX_D_OBTAIN );
+
+ /*
+ * Let blocker B block on mutex A. The deadlock detection will stop since
+ * blocker A blocks on the counting semaphore which has no owner.
+ */
+ TQSend( &ctx->tq_ctx, TQ_BLOCKER_B, TQ_EVENT_MUTEX_A_OBTAIN );
+
+ /*
+ * Clean up all used resources.
+ */
+ TQMutexRelease( &ctx->tq_ctx, TQ_MUTEX_D );
+ TQSend( &ctx->tq_ctx, TQ_BLOCKER_A, TQ_EVENT_MUTEX_A_RELEASE );
+ TQSend( &ctx->tq_ctx, TQ_BLOCKER_B, TQ_EVENT_MUTEX_A_RELEASE );
+}
+
+/**
+ * @fn void T_case_body_ScoreTqValTq( void )
+ */
+T_TEST_CASE_FIXTURE( ScoreTqValTq, &ScoreTqValTq_Fixture )
+{
+ ScoreTqValTq_Context *ctx;
+
+ ctx = T_fixture_context();
+
+ ScoreTqValTq_Action_0( ctx );
+}
+
+/** @} */
diff --git a/testsuites/validation/tc-sem-create.c b/testsuites/validation/tc-sem-create.c
index 7012c28275..9975cb0778 100644
--- a/testsuites/validation/tc-sem-create.c
+++ b/testsuites/validation/tc-sem-create.c
@@ -3,11 +3,11 @@
/**
* @file
*
- * @ingroup RTEMSTestCaseRtemsSemReqCreate
+ * @ingroup RtemsSemReqCreate
*/
/*
- * Copyright (C) 2021 embedded brains GmbH (http://www.embedded-brains.de)
+ * Copyright (C) 2021 embedded brains GmbH & Co. KG
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
@@ -62,9 +62,9 @@
#include <rtems/test.h>
/**
- * @defgroup RTEMSTestCaseRtemsSemReqCreate spec:/rtems/sem/req/create
+ * @defgroup RtemsSemReqCreate spec:/rtems/sem/req/create
*
- * @ingroup RTEMSTestSuiteTestsuitesValidationNoClock0
+ * @ingroup TestsuitesValidationNoClock0
*
* @{
*/
@@ -224,15 +224,15 @@ typedef struct {
rtems_status_code status;
- Semaphore_Variant variant;;
+ Semaphore_Variant variant;
- Semaphore_Discipline discipline;;
+ Semaphore_Discipline discipline;
- uint32_t sem_count;;
+ uint32_t sem_count;
- Thread_Control *executing;;
+ Thread_Control *executing;
- Thread_Control *owner;;
+ Thread_Control *owner;
rtems_name name;
diff --git a/testsuites/validation/tc-sem-delete.c b/testsuites/validation/tc-sem-delete.c
index 7c31547eba..188b532870 100644
--- a/testsuites/validation/tc-sem-delete.c
+++ b/testsuites/validation/tc-sem-delete.c
@@ -3,11 +3,11 @@
/**
* @file
*
- * @ingroup RTEMSTestCaseRtemsSemReqDelete
+ * @ingroup RtemsSemReqDelete
*/
/*
- * Copyright (C) 2021 embedded brains GmbH (http://www.embedded-brains.de)
+ * Copyright (C) 2021 embedded brains GmbH & Co. KG
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
@@ -60,9 +60,9 @@
#include <rtems/test.h>
/**
- * @defgroup RTEMSTestCaseRtemsSemReqDelete spec:/rtems/sem/req/delete
+ * @defgroup RtemsSemReqDelete spec:/rtems/sem/req/delete
*
- * @ingroup RTEMSTestSuiteTestsuitesValidationOneCpu0
+ * @ingroup TestsuitesValidationOneCpu0
*
* @{
*/
diff --git a/testsuites/validation/tc-sem-flush.c b/testsuites/validation/tc-sem-flush.c
index af8f5407cd..4fb2027354 100644
--- a/testsuites/validation/tc-sem-flush.c
+++ b/testsuites/validation/tc-sem-flush.c
@@ -3,11 +3,11 @@
/**
* @file
*
- * @ingroup RTEMSTestCaseRtemsSemReqFlush
+ * @ingroup RtemsSemReqFlush
*/
/*
- * Copyright (C) 2021 embedded brains GmbH (http://www.embedded-brains.de)
+ * Copyright (C) 2021 embedded brains GmbH & Co. KG
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
@@ -64,9 +64,9 @@
#include <rtems/test.h>
/**
- * @defgroup RTEMSTestCaseRtemsSemReqFlush spec:/rtems/sem/req/flush
+ * @defgroup RtemsSemReqFlush spec:/rtems/sem/req/flush
*
- * @ingroup RTEMSTestSuiteTestsuitesValidationNoClock0
+ * @ingroup TestsuitesValidationNoClock0
*
* @{
*/
@@ -118,7 +118,7 @@ typedef struct {
/**
* @brief This member contains the thread queue test context.
*/
- TQContext tq_ctx;;
+ TQContext tq_ctx;
/**
* @brief This member specifies if the attribute set of the semaphore.
@@ -228,12 +228,16 @@ static Status_Control Enqueue( TQContext *tq_ctx, TQWait wait )
return STATUS_BUILD( STATUS_SUCCESSFUL, 0 );
}
-static void Flush( TQContext *tq_ctx )
+static uint32_t Flush( TQContext *tq_ctx, uint32_t thread_count, bool all )
{
rtems_status_code sc;
+ (void) all;
+
sc = rtems_semaphore_flush( tq_ctx->thread_queue_id );
T_rsc_success( sc );
+
+ return thread_count;
}
static void RtemsSemReqFlush_Pre_Class_Prepare(
@@ -401,16 +405,16 @@ static void RtemsSemReqFlush_Post_Action_Check(
case RtemsSemReqFlush_Post_Action_FlushFIFO: {
/*
* The calling task shall flush the semaphore as specified by
- * /score/tq/req/flush-fifo.
+ * spec:/score/tq/req/flush-fifo.
*/
- ScoreTqReqFlushFifo_Run( &ctx->tq_ctx );
+ ScoreTqReqFlushFifo_Run( &ctx->tq_ctx, false );
break;
}
case RtemsSemReqFlush_Post_Action_FlushPriority: {
/*
* The calling task shall flush the semaphore as specified by
- * /score/tq/req/flush-priority.
+ * spec:/score/tq/req/flush-priority.
*/
ScoreTqReqFlushPriority_Run( &ctx->tq_ctx, true );
break;
@@ -419,7 +423,7 @@ static void RtemsSemReqFlush_Post_Action_Check(
case RtemsSemReqFlush_Post_Action_FlushPriorityCeiling: {
/*
* The calling task shall flush the semaphore as specified by
- * /score/tq/req/flush-priority.
+ * spec:/score/tq/req/flush-priority.
*/
ScoreTqReqFlushPriority_Run( &ctx->tq_ctx, false );
break;
@@ -428,7 +432,7 @@ static void RtemsSemReqFlush_Post_Action_Check(
case RtemsSemReqFlush_Post_Action_FlushPriorityInherit: {
/*
* The calling task shall flush the semaphore as specified by
- * /score/tq/req/flush-priority-inherit.
+ * spec:/score/tq/req/flush-priority-inherit.
*/
ScoreTqReqFlushPriorityInherit_Run( &ctx->tq_ctx );
break;
@@ -494,7 +498,9 @@ static void RtemsSemReqFlush_Action( RtemsSemReqFlush_Context *ctx )
static void RtemsSemReqFlush_Cleanup( RtemsSemReqFlush_Context *ctx )
{
rtems_status_code sc;
- sc = rtems_semaphore_delete( ctx->tq_ctx.thread_queue_id ); T_rsc_success( sc );
+
+ sc = rtems_semaphore_delete( ctx->tq_ctx.thread_queue_id );
+ T_rsc_success( sc );
}
static const RtemsSemReqFlush_Entry
diff --git a/testsuites/validation/tc-sem-ident.c b/testsuites/validation/tc-sem-ident.c
index 3014113189..abeddfa5e2 100644
--- a/testsuites/validation/tc-sem-ident.c
+++ b/testsuites/validation/tc-sem-ident.c
@@ -3,11 +3,11 @@
/**
* @file
*
- * @ingroup RTEMSTestCaseRtemsSemValIdent
+ * @ingroup RtemsSemValIdent
*/
/*
- * Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+ * Copyright (C) 2020 embedded brains GmbH & Co. KG
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
@@ -57,16 +57,16 @@
#include <rtems/test.h>
/**
- * @defgroup RTEMSTestCaseRtemsSemValIdent spec:/rtems/sem/val/ident
+ * @defgroup RtemsSemValIdent spec:/rtems/sem/val/ident
*
- * @ingroup RTEMSTestSuiteTestsuitesValidationNoClock0
+ * @ingroup TestsuitesValidationNoClock0
*
* @brief Test the rtems_semaphore_ident() directive.
*
* This test case performs the following actions:
*
* - Run the generic object identification tests for Classic API semaphore
- * class objects defined by /rtems/req/ident.
+ * class objects defined by spec:/rtems/req/ident.
*
* @{
*/
@@ -84,7 +84,7 @@ static rtems_status_code ClassicSemIdentAction(
/**
* @brief Run the generic object identification tests for Classic API semaphore
- * class objects defined by /rtems/req/ident.
+ * class objects defined by spec:/rtems/req/ident.
*/
static void RtemsSemValIdent_Action_0( void )
{
diff --git a/testsuites/validation/tc-sem-mrsp-obtain.c b/testsuites/validation/tc-sem-mrsp-obtain.c
index dcbf7655ab..e7d50c34da 100644
--- a/testsuites/validation/tc-sem-mrsp-obtain.c
+++ b/testsuites/validation/tc-sem-mrsp-obtain.c
@@ -3,11 +3,11 @@
/**
* @file
*
- * @ingroup RTEMSTestCaseRtemsSemReqMrspObtain
+ * @ingroup RtemsSemReqMrspObtain
*/
/*
- * Copyright (C) 2021 embedded brains GmbH (http://www.embedded-brains.de)
+ * Copyright (C) 2021 embedded brains GmbH & Co. KG
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
@@ -63,9 +63,9 @@
#include <rtems/test.h>
/**
- * @defgroup RTEMSTestCaseRtemsSemReqMrspObtain spec:/rtems/sem/req/mrsp-obtain
+ * @defgroup RtemsSemReqMrspObtain spec:/rtems/sem/req/mrsp-obtain
*
- * @ingroup RTEMSTestSuiteTestsuitesValidationSmpOnly0
+ * @ingroup TestsuitesValidationSmpOnly0
*
* @{
*/
diff --git a/testsuites/validation/tc-sem-obtain.c b/testsuites/validation/tc-sem-obtain.c
index b07421f186..10c4475d8c 100644
--- a/testsuites/validation/tc-sem-obtain.c
+++ b/testsuites/validation/tc-sem-obtain.c
@@ -3,11 +3,11 @@
/**
* @file
*
- * @ingroup RTEMSTestCaseRtemsSemReqObtain
+ * @ingroup RtemsSemReqObtain
*/
/*
- * Copyright (C) 2021 embedded brains GmbH (http://www.embedded-brains.de)
+ * Copyright (C) 2021 embedded brains GmbH & Co. KG
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
@@ -65,9 +65,9 @@
#include <rtems/test.h>
/**
- * @defgroup RTEMSTestCaseRtemsSemReqObtain spec:/rtems/sem/req/obtain
+ * @defgroup RtemsSemReqObtain spec:/rtems/sem/req/obtain
*
- * @ingroup RTEMSTestSuiteTestsuitesValidationNoClock0
+ * @ingroup TestsuitesValidationNoClock0
*
* @{
*/
@@ -390,7 +390,7 @@ static void RtemsSemReqObtain_Post_Action_Check(
case RtemsSemReqObtain_Post_Action_SemSeizeTry: {
/*
* The calling task shall try to seize the semaphore as specified by
- * /score/sem/req/seize-try.
+ * spec:/score/sem/req/seize-try.
*/
ctx->tq_sem_ctx.get_count = TQSemGetCountClassic;
ctx->tq_sem_ctx.set_count = TQSemSetCountClassic;
@@ -401,7 +401,7 @@ static void RtemsSemReqObtain_Post_Action_Check(
case RtemsSemReqObtain_Post_Action_SemSeizeWait: {
/*
* The calling task shall wait to seize the semaphore as specified by
- * /score/sem/req/seize-wait.
+ * spec:/score/sem/req/seize-wait.
*/
ctx->tq_sem_ctx.get_count = TQSemGetCountClassic;
ctx->tq_sem_ctx.set_count = TQSemSetCountClassic;
@@ -412,8 +412,8 @@ static void RtemsSemReqObtain_Post_Action_Check(
case RtemsSemReqObtain_Post_Action_MtxSeizeTry: {
/*
* The calling task shall try to seize the mutex as specified by
- * /score/mtx/req/seize-try where an enqueue blocks, a recursive seize is
- * allowed, and no locking protocol is used.
+ * spec:/score/mtx/req/seize-try where an enqueue blocks, a recursive
+ * seize is allowed, and no locking protocol is used.
*/
ctx->tq_mtx_ctx.base.enqueue_variant = TQ_ENQUEUE_BLOCKS;
ctx->tq_mtx_ctx.protocol = TQ_MTX_NO_PROTOCOL;
@@ -426,8 +426,8 @@ static void RtemsSemReqObtain_Post_Action_Check(
case RtemsSemReqObtain_Post_Action_MtxSeizeWait: {
/*
* The calling task shall wait to seize the mutex as specified by
- * /score/mtx/req/seize-wait where an enqueue blocks, a recursive seize
- * is allowed, and no locking protocol is used.
+ * spec:/score/mtx/req/seize-wait where an enqueue blocks, a recursive
+ * seize is allowed, and no locking protocol is used.
*/
ctx->tq_mtx_ctx.base.enqueue_variant = TQ_ENQUEUE_BLOCKS;
ctx->tq_mtx_ctx.protocol = TQ_MTX_NO_PROTOCOL;
@@ -440,8 +440,8 @@ static void RtemsSemReqObtain_Post_Action_Check(
case RtemsSemReqObtain_Post_Action_InheritMtxSeizeTry: {
/*
* The calling task shall try to seize the mutex as specified by
- * /score/mtx/req/seize-try where an enqueue blocks, a recursive seize is
- * allowed, and a priority inheritance protocol is used.
+ * spec:/score/mtx/req/seize-try where an enqueue blocks, a recursive
+ * seize is allowed, and a priority inheritance protocol is used.
*/
ctx->tq_mtx_ctx.base.enqueue_variant = TQ_ENQUEUE_BLOCKS;
ctx->tq_mtx_ctx.protocol = TQ_MTX_NO_PROTOCOL;
@@ -454,8 +454,8 @@ static void RtemsSemReqObtain_Post_Action_Check(
case RtemsSemReqObtain_Post_Action_InheritMtxSeizeWait: {
/*
* The calling task shall wait to seize the mutex as specified by
- * /score/mtx/req/seize-wait where an enqueue blocks, a recursive seize
- * is allowed, and a priority inheritance protocol is used.
+ * spec:/score/mtx/req/seize-wait where an enqueue blocks, a recursive
+ * seize is allowed, and a priority inheritance protocol is used.
*/
ctx->tq_mtx_ctx.base.enqueue_variant = TQ_ENQUEUE_BLOCKS;
ctx->tq_mtx_ctx.protocol = TQ_MTX_NO_PROTOCOL;
@@ -468,8 +468,8 @@ static void RtemsSemReqObtain_Post_Action_Check(
case RtemsSemReqObtain_Post_Action_CeilingMtxSeizeTry: {
/*
* The calling task shall try to seize the mutex as specified by
- * /score/mtx/req/seize-try where an enqueue blocks, a recursive seize is
- * allowed, and a priority ceiling is used.
+ * spec:/score/mtx/req/seize-try where an enqueue blocks, a recursive
+ * seize is allowed, and a priority ceiling is used.
*/
ctx->tq_mtx_ctx.base.enqueue_variant = TQ_ENQUEUE_BLOCKS;
ctx->tq_mtx_ctx.protocol = TQ_MTX_PRIORITY_CEILING;
@@ -482,8 +482,8 @@ static void RtemsSemReqObtain_Post_Action_Check(
case RtemsSemReqObtain_Post_Action_CeilingMtxSeizeWait: {
/*
* The calling task shall wait to seize the mutex as specified by
- * /score/mtx/req/seize-wait where an enqueue blocks, a recursive seize
- * is allowed, and a priority ceiling is used.
+ * spec:/score/mtx/req/seize-wait where an enqueue blocks, a recursive
+ * seize is allowed, and a priority ceiling is used.
*/
ctx->tq_mtx_ctx.base.enqueue_variant = TQ_ENQUEUE_BLOCKS;
ctx->tq_mtx_ctx.protocol = TQ_MTX_PRIORITY_CEILING;
@@ -496,28 +496,36 @@ static void RtemsSemReqObtain_Post_Action_Check(
case RtemsSemReqObtain_Post_Action_MrsPMtxSeizeTry: {
/*
* The calling task shall try to seize the mutex as specified by
- * /score/mtx/req/seize-try where an enqueue is sticky, a recursive seize
- * returns an error status, and a priority ceiling is used.
+ * spec:/score/mtx/req/seize-try where an enqueue is sticky, a recursive
+ * seize returns an error status, and a priority ceiling is used.
*/
+ #if defined(RTEMS_SMP)
ctx->tq_mtx_ctx.base.enqueue_variant = TQ_ENQUEUE_STICKY;
ctx->tq_mtx_ctx.protocol = TQ_MTX_MRSP;
ctx->tq_mtx_ctx.recursive = TQ_MTX_RECURSIVE_DEADLOCK;
ctx->tq_mtx_ctx.priority_ceiling = PRIO_VERY_HIGH;
ScoreMtxReqSeizeTry_Run( &ctx->tq_mtx_ctx );
+ #else
+ T_unreachable();
+ #endif
break;
}
case RtemsSemReqObtain_Post_Action_MrsPMtxSeizeWait: {
/*
* The calling task shall wait to seize the mutex as specified by
- * /score/mtx/req/seize-wait where an enqueue is sticky, a recursive
+ * spec:/score/mtx/req/seize-wait where an enqueue is sticky, a recursive
* seize returns an error status, and a priority ceiling is used.
*/
+ #if defined(RTEMS_SMP)
ctx->tq_mtx_ctx.base.enqueue_variant = TQ_ENQUEUE_STICKY;
ctx->tq_mtx_ctx.protocol = TQ_MTX_MRSP;
ctx->tq_mtx_ctx.recursive = TQ_MTX_RECURSIVE_DEADLOCK;
ctx->tq_mtx_ctx.priority_ceiling = PRIO_VERY_HIGH;
ScoreMtxReqSeizeWait_Run( &ctx->tq_mtx_ctx );
+ #else
+ T_unreachable();
+ #endif
break;
}
@@ -580,6 +588,7 @@ static void RtemsSemReqObtain_Action( RtemsSemReqObtain_Context *ctx )
);
T_rsc_success( sc );
+ #if defined(RTEMS_SMP)
if ( ( ctx->attribute_set & RTEMS_MULTIPROCESSOR_RESOURCE_SHARING ) != 0 ) {
rtems_task_priority prio;
@@ -591,6 +600,7 @@ static void RtemsSemReqObtain_Action( RtemsSemReqObtain_Context *ctx )
);
T_rsc_success( sc );
}
+ #endif
}
static void RtemsSemReqObtain_Cleanup( RtemsSemReqObtain_Context *ctx )
@@ -606,33 +616,28 @@ RtemsSemReqObtain_Entries[] = {
{ 0, 0, 0, 0, 0, RtemsSemReqObtain_Post_Action_SemSeizeWait },
{ 0, 0, 0, 0, 0, RtemsSemReqObtain_Post_Action_SemSeizeTry },
{ 0, 0, 0, 0, 0, RtemsSemReqObtain_Post_Action_MtxSeizeWait },
-#if defined(RTEMS_SMP)
- { 0, 0, 0, 0, 0, RtemsSemReqObtain_Post_Action_InvId },
-#else
- { 1, 0, 0, 0, 0, RtemsSemReqObtain_Post_Action_NA },
-#endif
{ 0, 0, 0, 0, 0, RtemsSemReqObtain_Post_Action_MtxSeizeTry },
{ 0, 0, 0, 0, 0, RtemsSemReqObtain_Post_Action_CeilingMtxSeizeWait },
{ 0, 0, 0, 0, 0, RtemsSemReqObtain_Post_Action_InheritMtxSeizeWait },
#if defined(RTEMS_SMP)
{ 0, 0, 0, 0, 0, RtemsSemReqObtain_Post_Action_MrsPMtxSeizeWait },
#else
- { 1, 0, 0, 0, 0, RtemsSemReqObtain_Post_Action_NA },
+ { 0, 0, 0, 0, 0, RtemsSemReqObtain_Post_Action_CeilingMtxSeizeWait },
#endif
{ 0, 0, 0, 0, 0, RtemsSemReqObtain_Post_Action_CeilingMtxSeizeTry },
{ 0, 0, 0, 0, 0, RtemsSemReqObtain_Post_Action_InheritMtxSeizeTry },
#if defined(RTEMS_SMP)
{ 0, 0, 0, 0, 0, RtemsSemReqObtain_Post_Action_MrsPMtxSeizeTry }
#else
- { 1, 0, 0, 0, 0, RtemsSemReqObtain_Post_Action_NA }
+ { 0, 0, 0, 0, 0, RtemsSemReqObtain_Post_Action_CeilingMtxSeizeTry }
#endif
};
static const uint8_t
RtemsSemReqObtain_Map[] = {
- 3, 2, 2, 0, 0, 0, 3, 2, 2, 0, 0, 0, 3, 2, 2, 0, 0, 0, 3, 2, 2, 0, 0, 0, 6, 4,
- 4, 0, 0, 0, 6, 4, 4, 0, 0, 0, 1, 1, 1, 1, 1, 1, 10, 7, 7, 0, 0, 0, 1, 1, 1,
- 1, 1, 1, 11, 8, 8, 0, 0, 0, 1, 1, 1, 1, 1, 1, 12, 9, 9, 5, 5, 5
+ 3, 2, 2, 0, 0, 0, 3, 2, 2, 0, 0, 0, 3, 2, 2, 0, 0, 0, 3, 2, 2, 0, 0, 0, 5, 4,
+ 4, 0, 0, 0, 5, 4, 4, 0, 0, 0, 1, 1, 1, 1, 1, 1, 9, 6, 6, 0, 0, 0, 1, 1, 1, 1,
+ 1, 1, 10, 7, 7, 0, 0, 0, 1, 1, 1, 1, 1, 1, 11, 8, 8, 0, 0, 0
};
static size_t RtemsSemReqObtain_Scope( void *arg, char *buf, size_t n )
diff --git a/testsuites/validation/tc-sem-performance.c b/testsuites/validation/tc-sem-performance.c
index 5bbff6a587..5861e3ee8e 100644
--- a/testsuites/validation/tc-sem-performance.c
+++ b/testsuites/validation/tc-sem-performance.c
@@ -3,11 +3,11 @@
/**
* @file
*
- * @ingroup RTEMSTestCaseRtemsSemValPerf
+ * @ingroup RtemsSemValPerf
*/
/*
- * Copyright (C) 2021 embedded brains GmbH (http://www.embedded-brains.de)
+ * Copyright (C) 2021 embedded brains GmbH & Co. KG
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
@@ -59,9 +59,9 @@
#include <rtems/test.h>
/**
- * @defgroup RTEMSTestCaseRtemsSemValPerf spec:/rtems/sem/val/perf
+ * @defgroup RtemsSemValPerf spec:/rtems/sem/val/perf
*
- * @ingroup RTEMSTestSuiteTestsuitesPerformanceNoClock0
+ * @ingroup TestsuitesPerformanceNoClock0
*
* @brief This test case provides a context to run @ref RTEMSAPIClassicSem
* performance tests.
@@ -112,15 +112,17 @@ typedef struct {
static RtemsSemValPerf_Context
RtemsSemValPerf_Instance;
-typedef RtemsSemValPerf_Context Context;
+#define EVENT_END RTEMS_EVENT_0
+
+#define EVENT_OBTAIN RTEMS_EVENT_1
+
+#define EVENT_OBTAIN_END RTEMS_EVENT_2
-typedef enum {
- EVENT_END = RTEMS_EVENT_0,
- EVENT_OBTAIN = RTEMS_EVENT_1,
- EVENT_OBTAIN_END = RTEMS_EVENT_2,
- EVENT_RELEASE = RTEMS_EVENT_3,
- EVENT_RELEASE_END = RTEMS_EVENT_4
-} Event;
+#define EVENT_RELEASE RTEMS_EVENT_3
+
+#define EVENT_RELEASE_END RTEMS_EVENT_4
+
+typedef RtemsSemValPerf_Context Context;
static void Send( const Context *ctx, rtems_event_set events )
{
@@ -236,6 +238,12 @@ static T_fixture RtemsSemValPerf_Fixture = {
};
/**
+ * @defgroup RtemsSemReqPerfMtxPiObtain spec:/rtems/sem/req/perf-mtx-pi-obtain
+ *
+ * @{
+ */
+
+/**
* @brief Obtain the available mutex.
*/
static void RtemsSemReqPerfMtxPiObtain_Body( RtemsSemValPerf_Context *ctx )
@@ -287,6 +295,15 @@ static bool RtemsSemReqPerfMtxPiObtain_Teardown_Wrap(
return RtemsSemReqPerfMtxPiObtain_Teardown( ctx, delta, tic, toc, retry );
}
+/** @} */
+
+/**
+ * @defgroup RtemsSemReqPerfMtxPiRelease \
+ * spec:/rtems/sem/req/perf-mtx-pi-release
+ *
+ * @{
+ */
+
/**
* @brief Obtain the mutex.
*/
@@ -349,6 +366,15 @@ static bool RtemsSemReqPerfMtxPiRelease_Teardown_Wrap(
return RtemsSemReqPerfMtxPiRelease_Teardown( ctx, delta, tic, toc, retry );
}
+/** @} */
+
+/**
+ * @defgroup RtemsSemReqPerfMtxPiReleaseOne \
+ * spec:/rtems/sem/req/perf-mtx-pi-release-one
+ *
+ * @{
+ */
+
/**
* @brief Let one task wait on the mutex.
*/
@@ -356,9 +382,10 @@ static void RtemsSemReqPerfMtxPiReleaseOne_Setup(
RtemsSemValPerf_Context *ctx
)
{
+ SetSelfPriority( PRIO_HIGH );
ObtainMutex( ctx->mutex_id );
Send( ctx, EVENT_OBTAIN );
- SetPriority( ctx->worker_id, PRIO_LOW );
+ Yield();
Send( ctx, EVENT_RELEASE );
}
@@ -375,6 +402,11 @@ static void RtemsSemReqPerfMtxPiReleaseOne_Setup_Wrap( void *arg )
*/
static void RtemsSemReqPerfMtxPiReleaseOne_Body( RtemsSemValPerf_Context *ctx )
{
+ /*
+ * The release will unblock the worker task which has our priority. The
+ * scheduler ensures FIFO ordering for ready threads of the same priority, so
+ * the release will not preempt us.
+ */
ctx->status = rtems_semaphore_release( ctx->mutex_id );
}
@@ -400,7 +432,7 @@ static bool RtemsSemReqPerfMtxPiReleaseOne_Teardown(
{
T_quiet_rsc( ctx->status, RTEMS_SUCCESSFUL );
- SetPriority( ctx->worker_id, PRIO_HIGH );
+ SetSelfPriority( PRIO_NORMAL );
return tic == toc;
}
@@ -425,8 +457,17 @@ static bool RtemsSemReqPerfMtxPiReleaseOne_Teardown_Wrap(
);
}
+/** @} */
+
#if defined(RTEMS_SMP)
/**
+ * @defgroup RtemsSemReqPerfMtxPiReleaseOtherCpu \
+ * spec:/rtems/sem/req/perf-mtx-pi-release-other-cpu
+ *
+ * @{
+ */
+
+/**
* @brief Move worker to scheduler B.
*/
static void RtemsSemReqPerfMtxPiReleaseOtherCpu_Prepare(
@@ -524,9 +565,18 @@ static void RtemsSemReqPerfMtxPiReleaseOtherCpu_Cleanup(
{
SetScheduler( ctx->worker_id, SCHEDULER_A_ID, PRIO_HIGH );
}
+
+/** @} */
#endif
/**
+ * @defgroup RtemsSemReqPerfMtxPiReleasePreempt \
+ * spec:/rtems/sem/req/perf-mtx-pi-release-preempt
+ *
+ * @{
+ */
+
+/**
* @brief Let one task wait on the mutex.
*/
static void RtemsSemReqPerfMtxPiReleasePreempt_Setup(
@@ -603,6 +653,14 @@ static bool RtemsSemReqPerfMtxPiReleasePreempt_Teardown_Wrap(
);
}
+/** @} */
+
+/**
+ * @defgroup RtemsSemReqPerfMtxPiTry spec:/rtems/sem/req/perf-mtx-pi-try
+ *
+ * @{
+ */
+
/**
* @brief Make the mutex unavailable.
*/
@@ -665,6 +723,15 @@ static void RtemsSemReqPerfMtxPiTry_Cleanup( RtemsSemValPerf_Context *ctx )
Send( ctx, EVENT_RELEASE );
}
+/** @} */
+
+/**
+ * @defgroup RtemsSemReqPerfMtxPiWaitForever \
+ * spec:/rtems/sem/req/perf-mtx-pi-wait-forever
+ *
+ * @{
+ */
+
/**
* @brief Make the mutex unavailable.
*/
@@ -673,7 +740,7 @@ static void RtemsSemReqPerfMtxPiWaitForever_Setup(
)
{
Send( ctx, EVENT_OBTAIN );
- SetPriority( ctx->worker_id, PRIO_LOW );
+ SetSelfPriority( PRIO_VERY_HIGH );
Send( ctx, EVENT_END | EVENT_RELEASE );
}
@@ -723,8 +790,8 @@ static bool RtemsSemReqPerfMtxPiWaitForever_Teardown(
T_quiet_rsc( ctx->status, RTEMS_SUCCESSFUL );
*delta = ctx->end - ctx->begin;
- SetPriority( ctx->worker_id, PRIO_HIGH );
ReleaseMutex( ctx->mutex_id );
+ SetSelfPriority( PRIO_NORMAL );
return tic == toc;
}
@@ -749,13 +816,22 @@ static bool RtemsSemReqPerfMtxPiWaitForever_Teardown_Wrap(
);
}
+/** @} */
+
+/**
+ * @defgroup RtemsSemReqPerfMtxPiWaitTimed \
+ * spec:/rtems/sem/req/perf-mtx-pi-wait-timed
+ *
+ * @{
+ */
+
/**
* @brief Make the mutex unavailable.
*/
static void RtemsSemReqPerfMtxPiWaitTimed_Setup( RtemsSemValPerf_Context *ctx )
{
Send( ctx, EVENT_OBTAIN );
- SetPriority( ctx->worker_id, PRIO_LOW );
+ SetSelfPriority( PRIO_VERY_HIGH );
Send( ctx, EVENT_END | EVENT_RELEASE );
}
@@ -803,8 +879,8 @@ static bool RtemsSemReqPerfMtxPiWaitTimed_Teardown(
T_quiet_rsc( ctx->status, RTEMS_SUCCESSFUL );
*delta = ctx->end - ctx->begin;
- SetPriority( ctx->worker_id, PRIO_HIGH );
ReleaseMutex( ctx->mutex_id );
+ SetSelfPriority( PRIO_NORMAL );
return tic == toc;
}
@@ -823,6 +899,8 @@ static bool RtemsSemReqPerfMtxPiWaitTimed_Teardown_Wrap(
return RtemsSemReqPerfMtxPiWaitTimed_Teardown( ctx, delta, tic, toc, retry );
}
+/** @} */
+
/**
* @fn void T_case_body_RtemsSemValPerf( void )
*/
diff --git a/testsuites/validation/tc-sem-release.c b/testsuites/validation/tc-sem-release.c
index cfb5315a2a..1e9c2091c0 100644
--- a/testsuites/validation/tc-sem-release.c
+++ b/testsuites/validation/tc-sem-release.c
@@ -3,11 +3,11 @@
/**
* @file
*
- * @ingroup RTEMSTestCaseRtemsSemReqRelease
+ * @ingroup RtemsSemReqRelease
*/
/*
- * Copyright (C) 2021 embedded brains GmbH (http://www.embedded-brains.de)
+ * Copyright (C) 2021 embedded brains GmbH & Co. KG
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
@@ -63,9 +63,9 @@
#include <rtems/test.h>
/**
- * @defgroup RTEMSTestCaseRtemsSemReqRelease spec:/rtems/sem/req/release
+ * @defgroup RtemsSemReqRelease spec:/rtems/sem/req/release
*
- * @ingroup RTEMSTestSuiteTestsuitesValidationNoClock0
+ * @ingroup TestsuitesValidationNoClock0
*
* @{
*/
@@ -331,7 +331,7 @@ static void RtemsSemReqRelease_Post_Action_Check(
case RtemsSemReqRelease_Post_Action_BinarySurrender: {
/*
* The calling task shall surrender the binary semaphore as specified by
- * /score/sem/req/surrender.
+ * spec:/score/sem/req/surrender.
*/
ctx->tq_ctx.enqueue_variant = TQ_ENQUEUE_BLOCKS;
ctx->tq_ctx.get_owner = NULL;
@@ -345,7 +345,7 @@ static void RtemsSemReqRelease_Post_Action_Check(
case RtemsSemReqRelease_Post_Action_CountingSurrender: {
/*
* The calling task shall surrender the counting semaphore as specified
- * by /score/sem/req/surrender.
+ * by spec:/score/sem/req/surrender.
*/
ctx->tq_ctx.enqueue_variant = TQ_ENQUEUE_BLOCKS;
ctx->tq_ctx.get_owner = NULL;
@@ -359,8 +359,9 @@ static void RtemsSemReqRelease_Post_Action_Check(
case RtemsSemReqRelease_Post_Action_MtxSurrender: {
/*
* The calling task shall surrender the mutex as specified by
- * /score/mtx/req/surrender where an enqueue blocks, a recursive seize is
- * allowed, the owner is checked, and no locking protocol is used.
+ * spec:/score/mtx/req/surrender where an enqueue blocks, a recursive
+ * seize is allowed, the owner is checked, and no locking protocol is
+ * used.
*/
ctx->tq_ctx.enqueue_variant = TQ_ENQUEUE_BLOCKS;
ctx->tq_ctx.get_owner = TQGetOwnerClassicSem;
@@ -375,9 +376,9 @@ static void RtemsSemReqRelease_Post_Action_Check(
case RtemsSemReqRelease_Post_Action_InheritMtxSurrender: {
/*
* The calling task shall surrender the mutex as specified by
- * /score/mtx/req/surrender where an enqueue blocks, a recursive seize is
- * allowed, the owner is checked, and a priority inheritance protocol is
- * used.
+ * spec:/score/mtx/req/surrender where an enqueue blocks, a recursive
+ * seize is allowed, the owner is checked, and a priority inheritance
+ * protocol is used.
*/
ctx->tq_ctx.enqueue_variant = TQ_ENQUEUE_BLOCKS;
ctx->tq_ctx.get_owner = TQGetOwnerClassicSem;
@@ -392,8 +393,9 @@ static void RtemsSemReqRelease_Post_Action_Check(
case RtemsSemReqRelease_Post_Action_CeilingMtxSurrender: {
/*
* The calling task shall surrender the mutex as specified by
- * /score/mtx/req/surrender where an enqueue blocks, a recursive seize is
- * allowed, the owner is checked, and a priority ceiling is used.
+ * spec:/score/mtx/req/surrender where an enqueue blocks, a recursive
+ * seize is allowed, the owner is checked, and a priority ceiling is
+ * used.
*/
ctx->tq_ctx.enqueue_variant = TQ_ENQUEUE_BLOCKS;
ctx->tq_ctx.get_owner = TQGetOwnerClassicSem;
@@ -408,9 +410,9 @@ static void RtemsSemReqRelease_Post_Action_Check(
case RtemsSemReqRelease_Post_Action_MrsPMtxSurrender: {
/*
* The calling task shall surrender the mutex as specified by
- * /score/mtx/req/surrender where an enqueue is sticky, a recursive seize
- * returns an error status, the owner is checked, and a priority ceiling
- * is used.
+ * spec:/score/mtx/req/surrender where an enqueue is sticky, a recursive
+ * seize returns an error status, the owner is checked, and a priority
+ * ceiling is used.
*/
ctx->tq_ctx.enqueue_variant = TQ_ENQUEUE_STICKY;
ctx->tq_ctx.get_owner = TQGetOwnerClassicSem;
diff --git a/testsuites/validation/tc-sem-set-priority.c b/testsuites/validation/tc-sem-set-priority.c
index d4418ad4de..fc4501b6fa 100644
--- a/testsuites/validation/tc-sem-set-priority.c
+++ b/testsuites/validation/tc-sem-set-priority.c
@@ -3,11 +3,11 @@
/**
* @file
*
- * @ingroup RTEMSTestCaseRtemsSemReqSetPriority
+ * @ingroup RtemsSemReqSetPriority
*/
/*
- * Copyright (C) 2021 embedded brains GmbH (http://www.embedded-brains.de)
+ * Copyright (C) 2021 embedded brains GmbH & Co. KG
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
@@ -61,10 +61,9 @@
#include <rtems/test.h>
/**
- * @defgroup RTEMSTestCaseRtemsSemReqSetPriority \
- * spec:/rtems/sem/req/set-priority
+ * @defgroup RtemsSemReqSetPriority spec:/rtems/sem/req/set-priority
*
- * @ingroup RTEMSTestSuiteTestsuitesValidationNoClock0
+ * @ingroup TestsuitesValidationNoClock0
*
* @{
*/
diff --git a/testsuites/validation/tc-sem-smp.c b/testsuites/validation/tc-sem-smp.c
index cfe82b3982..5dc3f437a1 100644
--- a/testsuites/validation/tc-sem-smp.c
+++ b/testsuites/validation/tc-sem-smp.c
@@ -3,11 +3,11 @@
/**
* @file
*
- * @ingroup RTEMSTestCaseRtemsSemValSmp
+ * @ingroup RtemsSemValSmp
*/
/*
- * Copyright (C) 2021 embedded brains GmbH (http://www.embedded-brains.de)
+ * Copyright (C) 2021 embedded brains GmbH & Co. KG
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
@@ -61,9 +61,9 @@
#include <rtems/test.h>
/**
- * @defgroup RTEMSTestCaseRtemsSemValSmp spec:/rtems/sem/val/smp
+ * @defgroup RtemsSemValSmp spec:/rtems/sem/val/smp
*
- * @ingroup RTEMSTestSuiteTestsuitesValidationSmpOnly0
+ * @ingroup TestsuitesValidationSmpOnly0
*
* @brief Tests SMP-specific semaphore behaviour.
*
@@ -123,12 +123,12 @@ typedef struct {
/**
* @brief This member contains the mutex identifier.
*/
- rtems_id mutex_id;;
+ rtems_id mutex_id;
/**
* @brief This member contains the second mutex identifier.
*/
- rtems_id mutex_2_id;;
+ rtems_id mutex_2_id;
/**
* @brief If this member is true, then the worker is done.
diff --git a/testsuites/validation/tc-sem-timeout.c b/testsuites/validation/tc-sem-timeout.c
index 254a6be5db..a150d067d2 100644
--- a/testsuites/validation/tc-sem-timeout.c
+++ b/testsuites/validation/tc-sem-timeout.c
@@ -3,11 +3,11 @@
/**
* @file
*
- * @ingroup RTEMSTestCaseRtemsSemReqTimeout
+ * @ingroup RtemsSemReqTimeout
*/
/*
- * Copyright (C) 2021 embedded brains GmbH (http://www.embedded-brains.de)
+ * Copyright (C) 2021 embedded brains GmbH & Co. KG
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
@@ -55,7 +55,6 @@
#include <rtems.h>
#include <string.h>
-#include "tr-tq-timeout-mrsp.h"
#include "tr-tq-timeout-priority-inherit.h"
#include "tr-tq-timeout.h"
#include "tx-support.h"
@@ -64,9 +63,9 @@
#include <rtems/test.h>
/**
- * @defgroup RTEMSTestCaseRtemsSemReqTimeout spec:/rtems/sem/req/timeout
+ * @defgroup RtemsSemReqTimeout spec:/rtems/sem/req/timeout
*
- * @ingroup RTEMSTestSuiteTestsuitesValidationNoClock0
+ * @ingroup TestsuitesValidationNoClock0
*
* @{
*/
@@ -108,7 +107,7 @@ typedef struct {
/**
* @brief This member contains the thread queue test context.
*/
- TQContext tq_ctx;;
+ TQContext tq_ctx;
/**
* @brief This member specifies if the attribute set of the semaphore.
@@ -169,6 +168,10 @@ static const char * const * const RtemsSemReqTimeout_PreDesc[] = {
NULL
};
+#if defined(RTEMS_SMP)
+#include "tr-tq-timeout-mrsp.h"
+#endif
+
static void RtemsSemReqTimeout_Pre_Class_Prepare(
RtemsSemReqTimeout_Context *ctx,
RtemsSemReqTimeout_Pre_Class state
@@ -226,7 +229,11 @@ static void RtemsSemReqTimeout_Pre_Class_Prepare(
*/
ctx->attribute_set |= RTEMS_BINARY_SEMAPHORE |
RTEMS_MULTIPROCESSOR_RESOURCE_SHARING;
+ #if defined(RTEMS_SMP)
ctx->tq_ctx.enqueue_variant = TQ_ENQUEUE_STICKY;
+ #else
+ ctx->tq_ctx.enqueue_variant = TQ_ENQUEUE_BLOCKS;
+ #endif
break;
}
@@ -273,7 +280,7 @@ static void RtemsSemReqTimeout_Post_Action_Check(
case RtemsSemReqTimeout_Post_Action_Timeout: {
/*
* The semaphore obtain timeout actions shall be done as specified by
- * /score/tq/req/timeout.
+ * spec:/score/tq/req/timeout.
*/
ctx->tq_ctx.wait = TQ_WAIT_TIMED;
ScoreTqReqTimeout_Run( &ctx->tq_ctx );
@@ -283,17 +290,21 @@ static void RtemsSemReqTimeout_Post_Action_Check(
case RtemsSemReqTimeout_Post_Action_TimeoutMrsP: {
/*
* The semaphore obtain timeout actions shall be done as specified by
- * /score/tq/req/timeout-mrsp.
+ * spec:/score/tq/req/timeout-mrsp.
*/
+ #if defined(RTEMS_SMP)
ctx->tq_ctx.wait = TQ_WAIT_TIMED;
ScoreTqReqTimeoutMrsp_Run( &ctx->tq_ctx );
+ #else
+ T_unreachable();
+ #endif
break;
}
case RtemsSemReqTimeout_Post_Action_TimeoutPriorityInherit: {
/*
* The semaphore obtain timeout actions shall be done as specified by
- * /score/tq/req/timeout-priority-inherit.
+ * spec:/score/tq/req/timeout-priority-inherit.
*/
ctx->tq_ctx.wait = TQ_WAIT_FOREVER;
ScoreTqReqTimeoutPriorityInherit_Run( &ctx->tq_ctx );
@@ -361,8 +372,12 @@ static void RtemsSemReqTimeout_Action( RtemsSemReqTimeout_Context *ctx )
static void RtemsSemReqTimeout_Cleanup( RtemsSemReqTimeout_Context *ctx )
{
- if ( ctx->tq_ctx.thread_queue_id != 0 ) { rtems_status_code sc;
- sc = rtems_semaphore_delete( ctx->tq_ctx.thread_queue_id ); T_rsc_success( sc ); }
+ if ( ctx->tq_ctx.thread_queue_id != 0 ) {
+ rtems_status_code sc;
+
+ sc = rtems_semaphore_delete( ctx->tq_ctx.thread_queue_id );
+ T_rsc_success( sc );
+ }
}
static const RtemsSemReqTimeout_Entry
@@ -370,10 +385,10 @@ RtemsSemReqTimeout_Entries[] = {
{ 0, 0, 0, RtemsSemReqTimeout_Post_Action_Timeout },
{ 1, 0, 0, RtemsSemReqTimeout_Post_Action_NA },
{ 0, 0, 0, RtemsSemReqTimeout_Post_Action_TimeoutPriorityInherit },
-#if !defined(RTEMS_SMP)
- { 1, 0, 0, RtemsSemReqTimeout_Post_Action_NA }
-#else
+#if defined(RTEMS_SMP)
{ 0, 0, 0, RtemsSemReqTimeout_Post_Action_TimeoutMrsP }
+#else
+ { 0, 0, 0, RtemsSemReqTimeout_Post_Action_Timeout }
#endif
};
diff --git a/testsuites/validation/tc-sem-uni.c b/testsuites/validation/tc-sem-uni.c
index 08c38adb6c..04fec2009c 100644
--- a/testsuites/validation/tc-sem-uni.c
+++ b/testsuites/validation/tc-sem-uni.c
@@ -3,11 +3,11 @@
/**
* @file
*
- * @ingroup RTEMSTestCaseRtemsSemValUni
+ * @ingroup RtemsSemValUni
*/
/*
- * Copyright (C) 2021 embedded brains GmbH (http://www.embedded-brains.de)
+ * Copyright (C) 2021 embedded brains GmbH & Co. KG
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
@@ -59,9 +59,9 @@
#include <rtems/test.h>
/**
- * @defgroup RTEMSTestCaseRtemsSemValUni spec:/rtems/sem/val/uni
+ * @defgroup RtemsSemValUni spec:/rtems/sem/val/uni
*
- * @ingroup RTEMSTestSuiteTestsuitesValidationOneCpu0
+ * @ingroup TestsuitesValidationOneCpu0
*
* @brief Tests uniprocessor-specific semaphore behaviour.
*
diff --git a/testsuites/validation/tc-signal-catch.c b/testsuites/validation/tc-signal-catch.c
index 3618290443..7a6439a60f 100644
--- a/testsuites/validation/tc-signal-catch.c
+++ b/testsuites/validation/tc-signal-catch.c
@@ -3,11 +3,11 @@
/**
* @file
*
- * @ingroup RTEMSTestCaseRtemsSignalReqCatch
+ * @ingroup RtemsSignalReqCatch
*/
/*
- * Copyright (C) 2021 embedded brains GmbH (http://www.embedded-brains.de)
+ * Copyright (C) 2021 embedded brains GmbH & Co. KG
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
@@ -61,10 +61,10 @@
#include <rtems/test.h>
/**
- * @defgroup RTEMSTestCaseRtemsSignalReqCatch spec:/rtems/signal/req/catch
+ * @defgroup RtemsSignalReqCatch spec:/rtems/signal/req/catch
*
- * @ingroup RTEMSTestSuiteTestsuitesValidationNoClock0
- * @ingroup RTEMSTestSuiteTestsuitesValidationOneCpu0
+ * @ingroup TestsuitesValidationNoClock0
+ * @ingroup TestsuitesValidationOneCpu0
*
* @{
*/
diff --git a/testsuites/validation/tc-signal-send.c b/testsuites/validation/tc-signal-send.c
index e6efbfd7cf..aedcec5e47 100644
--- a/testsuites/validation/tc-signal-send.c
+++ b/testsuites/validation/tc-signal-send.c
@@ -3,11 +3,11 @@
/**
* @file
*
- * @ingroup RTEMSTestCaseRtemsSignalReqSend
+ * @ingroup RtemsSignalReqSend
*/
/*
- * Copyright (C) 2021 embedded brains GmbH (http://www.embedded-brains.de)
+ * Copyright (C) 2021 embedded brains GmbH & Co. KG
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
@@ -59,10 +59,10 @@
#include <rtems/test.h>
/**
- * @defgroup RTEMSTestCaseRtemsSignalReqSend spec:/rtems/signal/req/send
+ * @defgroup RtemsSignalReqSend spec:/rtems/signal/req/send
*
- * @ingroup RTEMSTestSuiteTestsuitesValidationNoClock0
- * @ingroup RTEMSTestSuiteTestsuitesValidationOneCpu0
+ * @ingroup TestsuitesValidationNoClock0
+ * @ingroup TestsuitesValidationOneCpu0
*
* @{
*/
@@ -154,9 +154,9 @@ typedef struct {
rtems_signal_set processed_signal_sets[ 2 ];
- uintptr_t stack_pointers[ 2 ];;
+ uintptr_t stack_pointers[ 2 ];
- rtems_mode mode;;
+ rtems_mode mode;
rtems_status_code status;
diff --git a/testsuites/validation/tc-signals.c b/testsuites/validation/tc-signals.c
index 86ae17e018..dc452ecbc0 100644
--- a/testsuites/validation/tc-signals.c
+++ b/testsuites/validation/tc-signals.c
@@ -3,11 +3,11 @@
/**
* @file
*
- * @ingroup RTEMSTestCaseRtemsSignalValSignals
+ * @ingroup RtemsSignalValSignals
*/
/*
- * Copyright (C) 2021 embedded brains GmbH (http://www.embedded-brains.de)
+ * Copyright (C) 2021 embedded brains GmbH & Co. KG
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
@@ -59,9 +59,9 @@
#include <rtems/test.h>
/**
- * @defgroup RTEMSTestCaseRtemsSignalValSignals spec:/rtems/signal/val/signals
+ * @defgroup RtemsSignalValSignals spec:/rtems/signal/val/signals
*
- * @ingroup RTEMSTestSuiteTestsuitesValidationNoClock0
+ * @ingroup TestsuitesValidationNoClock0
*
* @brief This test case collection provides validation test cases for the @ref
* RTEMSAPIClassicSignal.
diff --git a/testsuites/validation/tc-start-of-optional-processor-failed.c b/testsuites/validation/tc-start-of-optional-processor-failed.c
index b033a18bae..826ff3848d 100644
--- a/testsuites/validation/tc-start-of-optional-processor-failed.c
+++ b/testsuites/validation/tc-start-of-optional-processor-failed.c
@@ -3,11 +3,11 @@
/**
* @file
*
- * @ingroup RTEMSTestCaseScoreSmpValStartOfOptionalProcessorFailed
+ * @ingroup ScoreSmpValStartOfOptionalProcessorFailed
*/
/*
- * Copyright (C) 2021 embedded brains GmbH (http://www.embedded-brains.de)
+ * Copyright (C) 2021 embedded brains GmbH & Co. KG
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
@@ -57,10 +57,10 @@
#include <rtems/test.h>
/**
- * @defgroup RTEMSTestCaseScoreSmpValStartOfOptionalProcessorFailed \
+ * @defgroup ScoreSmpValStartOfOptionalProcessorFailed \
* spec:/score/smp/val/start-of-optional-processor-failed
*
- * @ingroup RTEMSTestSuiteTestsuitesValidationSmpOnly2
+ * @ingroup TestsuitesValidationSmpOnly2
*
* @brief Tests the state of an optional processor which failed to start.
*
diff --git a/testsuites/validation/tc-status-is-equal.c b/testsuites/validation/tc-status-is-equal.c
index 6960270420..6981ef84d1 100644
--- a/testsuites/validation/tc-status-is-equal.c
+++ b/testsuites/validation/tc-status-is-equal.c
@@ -3,11 +3,11 @@
/**
* @file
*
- * @ingroup RTEMSTestCaseRtemsStatusReqIsEqual
+ * @ingroup RtemsStatusReqIsEqual
*/
/*
- * Copyright (C) 2021 embedded brains GmbH (http://www.embedded-brains.de)
+ * Copyright (C) 2021 embedded brains GmbH & Co. KG
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
@@ -57,9 +57,9 @@
#include <rtems/test.h>
/**
- * @defgroup RTEMSTestCaseRtemsStatusReqIsEqual spec:/rtems/status/req/is-equal
+ * @defgroup RtemsStatusReqIsEqual spec:/rtems/status/req/is-equal
*
- * @ingroup RTEMSTestSuiteTestsuitesValidationNoClock0
+ * @ingroup TestsuitesValidationNoClock0
*
* @{
*/
diff --git a/testsuites/validation/tc-status-is-successful.c b/testsuites/validation/tc-status-is-successful.c
index 9ffe7a7df8..a04a9b4a7f 100644
--- a/testsuites/validation/tc-status-is-successful.c
+++ b/testsuites/validation/tc-status-is-successful.c
@@ -3,11 +3,11 @@
/**
* @file
*
- * @ingroup RTEMSTestCaseRtemsStatusReqIsSuccessful
+ * @ingroup RtemsStatusReqIsSuccessful
*/
/*
- * Copyright (C) 2021 embedded brains GmbH (http://www.embedded-brains.de)
+ * Copyright (C) 2021 embedded brains GmbH & Co. KG
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
@@ -57,10 +57,9 @@
#include <rtems/test.h>
/**
- * @defgroup RTEMSTestCaseRtemsStatusReqIsSuccessful \
- * spec:/rtems/status/req/is-successful
+ * @defgroup RtemsStatusReqIsSuccessful spec:/rtems/status/req/is-successful
*
- * @ingroup RTEMSTestSuiteTestsuitesValidationNoClock0
+ * @ingroup TestsuitesValidationNoClock0
*
* @{
*/
diff --git a/testsuites/validation/tc-status-text.c b/testsuites/validation/tc-status-text.c
index dfed1501ed..a877519dd2 100644
--- a/testsuites/validation/tc-status-text.c
+++ b/testsuites/validation/tc-status-text.c
@@ -3,11 +3,11 @@
/**
* @file
*
- * @ingroup RTEMSTestCaseRtemsStatusReqText
+ * @ingroup RtemsStatusReqText
*/
/*
- * Copyright (C) 2021 embedded brains GmbH (http://www.embedded-brains.de)
+ * Copyright (C) 2021 embedded brains GmbH & Co. KG
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
@@ -57,9 +57,9 @@
#include <rtems/test.h>
/**
- * @defgroup RTEMSTestCaseRtemsStatusReqText spec:/rtems/status/req/text
+ * @defgroup RtemsStatusReqText spec:/rtems/status/req/text
*
- * @ingroup RTEMSTestSuiteTestsuitesValidationNoClock0
+ * @ingroup TestsuitesValidationNoClock0
*
* @{
*/
diff --git a/testsuites/validation/tc-status.c b/testsuites/validation/tc-status.c
index 6b8c599516..41752a7f7d 100644
--- a/testsuites/validation/tc-status.c
+++ b/testsuites/validation/tc-status.c
@@ -3,11 +3,11 @@
/**
* @file
*
- * @ingroup RTEMSTestCaseRtemsStatusValStatus
+ * @ingroup RtemsStatusValStatus
*/
/*
- * Copyright (C) 2021 embedded brains GmbH (http://www.embedded-brains.de)
+ * Copyright (C) 2021, 2023 embedded brains GmbH & Co. KG
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
@@ -57,9 +57,9 @@
#include <rtems/test.h>
/**
- * @defgroup RTEMSTestCaseRtemsStatusValStatus spec:/rtems/status/val/status
+ * @defgroup RtemsStatusValStatus spec:/rtems/status/val/status
*
- * @ingroup RTEMSTestSuiteTestsuitesValidationNoClock0
+ * @ingroup TestsuitesValidationNoClock0
*
* @brief Tests some @ref RTEMSAPIClassicStatus interfaces.
*
@@ -67,12 +67,16 @@
*
* - Validate the status code constants.
*
- * - Check that RTEMS_STATUS_CODES_FIRST has the expected value and is a
+ * - Assert that RTEMS_STATUS_CODES_FIRST has the expected value and is a
* constant expression.
*
- * - Check that RTEMS_STATUS_CODES_LAST has the expected value and is a
+ * - Check that RTEMS_STATUS_CODES_FIRST has the expected value.
+ *
+ * - Assert that RTEMS_STATUS_CODES_LAST has the expected value and is a
* constant expression.
*
+ * - Check that RTEMS_STATUS_CODES_LAST has the expected value.
+ *
* @{
*/
@@ -84,16 +88,26 @@ static void RtemsStatusValStatus_Action_0( void )
/* Nothing to do */
/*
- * Check that RTEMS_STATUS_CODES_FIRST has the expected value and is a
+ * Assert that RTEMS_STATUS_CODES_FIRST has the expected value and is a
* constant expression.
*/
RTEMS_STATIC_ASSERT( RTEMS_STATUS_CODES_FIRST == 0, FIRST );
/*
- * Check that RTEMS_STATUS_CODES_LAST has the expected value and is a
+ * Check that RTEMS_STATUS_CODES_FIRST has the expected value.
+ */
+ T_eq_int( RTEMS_STATUS_CODES_FIRST, 0 );
+
+ /*
+ * Assert that RTEMS_STATUS_CODES_LAST has the expected value and is a
* constant expression.
*/
RTEMS_STATIC_ASSERT( RTEMS_STATUS_CODES_LAST == 29, LAST );
+
+ /*
+ * Check that RTEMS_STATUS_CODES_LAST has the expected value.
+ */
+ T_eq_int( RTEMS_STATUS_CODES_LAST, 29 );
}
/**
diff --git a/testsuites/validation/tc-support-is-name-valid.c b/testsuites/validation/tc-support-is-name-valid.c
index 589cc4f7f4..2a47d27cd5 100644
--- a/testsuites/validation/tc-support-is-name-valid.c
+++ b/testsuites/validation/tc-support-is-name-valid.c
@@ -3,11 +3,11 @@
/**
* @file
*
- * @ingroup RTEMSTestCaseRtemsSupportReqIsNameValid
+ * @ingroup RtemsSupportReqIsNameValid
*/
/*
- * Copyright (C) 2021 embedded brains GmbH (http://www.embedded-brains.de)
+ * Copyright (C) 2021 embedded brains GmbH & Co. KG
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
@@ -57,10 +57,9 @@
#include <rtems/test.h>
/**
- * @defgroup RTEMSTestCaseRtemsSupportReqIsNameValid \
- * spec:/rtems/support/req/is-name-valid
+ * @defgroup RtemsSupportReqIsNameValid spec:/rtems/support/req/is-name-valid
*
- * @ingroup RTEMSTestSuiteTestsuitesValidationNoClock0
+ * @ingroup TestsuitesValidationNoClock0
*
* @{
*/
diff --git a/testsuites/validation/tc-support.c b/testsuites/validation/tc-support.c
index fc13488d79..3e886c6027 100644
--- a/testsuites/validation/tc-support.c
+++ b/testsuites/validation/tc-support.c
@@ -3,11 +3,11 @@
/**
* @file
*
- * @ingroup RTEMSTestCaseRtemsSupportValSupport
+ * @ingroup RtemsSupportValSupport
*/
/*
- * Copyright (C) 2021 embedded brains GmbH (http://www.embedded-brains.de)
+ * Copyright (C) 2021 embedded brains GmbH & Co. KG
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
@@ -57,10 +57,9 @@
#include <rtems/test.h>
/**
- * @defgroup RTEMSTestCaseRtemsSupportValSupport \
- * spec:/rtems/support/val/support
+ * @defgroup RtemsSupportValSupport spec:/rtems/support/val/support
*
- * @ingroup RTEMSTestSuiteTestsuitesValidationNoClock0
+ * @ingroup TestsuitesValidationNoClock0
*
* @brief Tests some @ref RTEMSAPIClassicSupport directives.
*
diff --git a/testsuites/validation/tc-sys-lock.c b/testsuites/validation/tc-sys-lock.c
index 85b290ab9b..56939a3dba 100644
--- a/testsuites/validation/tc-sys-lock.c
+++ b/testsuites/validation/tc-sys-lock.c
@@ -3,11 +3,11 @@
/**
* @file
*
- * @ingroup RTEMSTestCaseNewlibValSysLock
+ * @ingroup NewlibValSysLock
*/
/*
- * Copyright (C) 2021 embedded brains GmbH (http://www.embedded-brains.de)
+ * Copyright (C) 2021 embedded brains GmbH & Co. KG
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
@@ -65,9 +65,9 @@
#include <rtems/test.h>
/**
- * @defgroup RTEMSTestCaseNewlibValSysLock spec:/newlib/val/sys-lock
+ * @defgroup NewlibValSysLock spec:/newlib/val/sys-lock
*
- * @ingroup RTEMSTestSuiteTestsuitesValidationNoClock0
+ * @ingroup TestsuitesValidationNoClock0
*
* @brief Tests the <sys/lock.h> mutex directives.
*
diff --git a/testsuites/validation/tc-task-construct.c b/testsuites/validation/tc-task-construct.c
index 2b0c75daa1..5a7ca4f497 100644
--- a/testsuites/validation/tc-task-construct.c
+++ b/testsuites/validation/tc-task-construct.c
@@ -3,11 +3,11 @@
/**
* @file
*
- * @ingroup RTEMSTestCaseRtemsTaskReqConstruct
+ * @ingroup RtemsTaskReqConstruct
*/
/*
- * Copyright (C) 2020, 2021 embedded brains GmbH (http://www.embedded-brains.de)
+ * Copyright (C) 2020, 2021 embedded brains GmbH & Co. KG
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
@@ -64,10 +64,10 @@
#include <rtems/test.h>
/**
- * @defgroup RTEMSTestCaseRtemsTaskReqConstruct spec:/rtems/task/req/construct
+ * @defgroup RtemsTaskReqConstruct spec:/rtems/task/req/construct
*
- * @ingroup RTEMSTestSuiteTestsuitesValidation1
- * @ingroup RTEMSTestSuiteTestsuitesValidationOneCpu1
+ * @ingroup TestsuitesValidation1
+ * @ingroup TestsuitesValidationOneCpu1
*
* @{
*/
@@ -291,7 +291,7 @@ typedef struct {
* @brief If this member is true, then the zombie thread is ready to get
* killed.
*/
- volatile bool zombie_ready;;
+ volatile bool zombie_ready;
/**
* @brief This member contains the actual modes of the constructed task.
diff --git a/testsuites/validation/tc-task-create-errors.c b/testsuites/validation/tc-task-create-errors.c
index 590fe47cb7..2378e55020 100644
--- a/testsuites/validation/tc-task-create-errors.c
+++ b/testsuites/validation/tc-task-create-errors.c
@@ -3,11 +3,11 @@
/**
* @file
*
- * @ingroup RTEMSTestCaseRtemsTaskReqCreateErrors
+ * @ingroup RtemsTaskReqCreateErrors
*/
/*
- * Copyright (C) 2020, 2021 embedded brains GmbH (http://www.embedded-brains.de)
+ * Copyright (C) 2020, 2021 embedded brains GmbH & Co. KG
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
@@ -62,11 +62,10 @@
#include <rtems/test.h>
/**
- * @defgroup RTEMSTestCaseRtemsTaskReqCreateErrors \
- * spec:/rtems/task/req/create-errors
+ * @defgroup RtemsTaskReqCreateErrors spec:/rtems/task/req/create-errors
*
- * @ingroup RTEMSTestSuiteTestsuitesValidationNoClock0
- * @ingroup RTEMSTestSuiteTestsuitesValidationOneCpu0
+ * @ingroup TestsuitesValidationNoClock0
+ * @ingroup TestsuitesValidationOneCpu0
*
* @{
*/
diff --git a/testsuites/validation/tc-task-delete.c b/testsuites/validation/tc-task-delete.c
index a12a060852..d917062d0d 100644
--- a/testsuites/validation/tc-task-delete.c
+++ b/testsuites/validation/tc-task-delete.c
@@ -3,11 +3,11 @@
/**
* @file
*
- * @ingroup RTEMSTestCaseRtemsTaskReqDelete
+ * @ingroup RtemsTaskReqDelete
*/
/*
- * Copyright (C) 2021 embedded brains GmbH (http://www.embedded-brains.de)
+ * Copyright (C) 2021 embedded brains GmbH & Co. KG
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
@@ -57,7 +57,6 @@
#include <setjmp.h>
#include <rtems/bspIo.h>
#include <rtems/test-scheduler.h>
-#include <rtems/score/io.h>
#include <rtems/score/statesimpl.h>
#include <rtems/score/threaddispatch.h>
#include <rtems/score/threadimpl.h>
@@ -67,9 +66,9 @@
#include <rtems/test.h>
/**
- * @defgroup RTEMSTestCaseRtemsTaskReqDelete spec:/rtems/task/req/delete
+ * @defgroup RtemsTaskReqDelete spec:/rtems/task/req/delete
*
- * @ingroup RTEMSTestSuiteTestsuitesValidationNoClock0
+ * @ingroup TestsuitesValidationNoClock0
*
* @{
*/
@@ -94,8 +93,8 @@ typedef enum {
} RtemsTaskReqDelete_Pre_ThreadDispatch;
typedef enum {
- RtemsTaskReqDelete_Pre_CallerPriority_Higher,
- RtemsTaskReqDelete_Pre_CallerPriority_LowerEqual,
+ RtemsTaskReqDelete_Pre_CallerPriority_Vital,
+ RtemsTaskReqDelete_Pre_CallerPriority_Dispensable,
RtemsTaskReqDelete_Pre_CallerPriority_NA
} RtemsTaskReqDelete_Pre_CallerPriority;
@@ -163,10 +162,10 @@ typedef enum {
} RtemsTaskReqDelete_Post_Zombie;
typedef enum {
- RtemsTaskReqDelete_Post_RealPriority_Raised,
- RtemsTaskReqDelete_Post_RealPriority_Nop,
- RtemsTaskReqDelete_Post_RealPriority_NA
-} RtemsTaskReqDelete_Post_RealPriority;
+ RtemsTaskReqDelete_Post_TaskPriority_Raise,
+ RtemsTaskReqDelete_Post_TaskPriority_Nop,
+ RtemsTaskReqDelete_Post_TaskPriority_NA
+} RtemsTaskReqDelete_Post_TaskPriority;
typedef enum {
RtemsTaskReqDelete_Post_RestartExtensions_Nop,
@@ -238,7 +237,7 @@ typedef struct {
uint64_t Post_Status : 3;
uint64_t Post_FatalError : 2;
uint64_t Post_Zombie : 2;
- uint64_t Post_RealPriority : 2;
+ uint64_t Post_TaskPriority : 2;
uint64_t Post_RestartExtensions : 1;
uint64_t Post_TerminateExtensions : 2;
uint64_t Post_Dormant : 2;
@@ -262,7 +261,7 @@ typedef struct {
/**
* @brief This member provides a jump context to resume a thread dispatch.
*/
- jmp_buf thread_dispatch_context;;
+ jmp_buf thread_dispatch_context;
/**
* @brief This member contains the identifier of the runner scheduler.
@@ -310,13 +309,13 @@ typedef struct {
* @brief This member contains the worker timer info at the end of the
* rtems_task_delete() call.
*/
- TaskTimerInfo worker_timer_info;;
+ TaskTimerInfo worker_timer_info;
/**
* @brief This member contains the worker thread queue at the end of the
* rtems_task_delete() call.
*/
- const Thread_queue_Queue *worker_wait_queue;;
+ const Thread_queue_Queue *worker_wait_queue;
/**
* @brief This member contains the worker thread life state at the end of the
@@ -358,13 +357,13 @@ typedef struct {
/**
* @brief This member contains extension calls.
*/
- ExtensionCalls calls;;
+ ExtensionCalls calls;
/**
* @brief This member contains extension calls after the rtems_task_delete()
* call.
*/
- ExtensionCalls calls_after_restart;;
+ ExtensionCalls calls_after_restart;
/**
* @brief This member contains the delete counter.
@@ -431,10 +430,10 @@ typedef struct {
bool timer_active;
/**
- * @brief If this member is true, then the deleter shall have a higher
- * current priority than the real priority of the worker.
+ * @brief If this member is true, then the deleter shall have a vital
+ * priority for the worker.
*/
- bool deleter_has_higher_priority;
+ bool vital_deleter_priority;
/**
* @brief If this member is true, then thread dispatching is disabled by the
@@ -516,8 +515,8 @@ static const char * const RtemsTaskReqDelete_PreDesc_ThreadDispatch[] = {
};
static const char * const RtemsTaskReqDelete_PreDesc_CallerPriority[] = {
- "Higher",
- "LowerEqual",
+ "Vital",
+ "Dispensable",
"NA"
};
@@ -594,7 +593,7 @@ static void CaptureWorkerState( Context *ctx )
ctx->worker_state = ctx->worker_tcb->current_state;
ctx->worker_life_state = ctx->worker_tcb->Life.state;
ctx->worker_priority =
- SCHEDULER_PRIORITY_UNMAP( ctx->worker_tcb->Real_priority.priority );
+ SCHEDULER_PRIORITY_UNMAP( _Thread_Get_priority( ctx->worker_tcb ) );
CopyExtensionCalls( &ctx->calls, &ctx->calls_after_restart );
GetTaskTimerInfoByThread( ctx->worker_tcb, &ctx->worker_timer_info );
}
@@ -833,7 +832,7 @@ static void SecondDeleter( rtems_task_argument arg )
ctx = (Context *) arg;
if ( ctx != NULL ) {
- if ( !ctx->deleter_has_higher_priority ) {
+ if ( !ctx->vital_deleter_priority ) {
SetPriority( ctx->runner_id, PRIO_LOW );
SetSelfPriorityNoYield( PRIO_NORMAL );
}
@@ -1038,23 +1037,21 @@ static void RtemsTaskReqDelete_Pre_CallerPriority_Prepare(
)
{
switch ( state ) {
- case RtemsTaskReqDelete_Pre_CallerPriority_Higher: {
+ case RtemsTaskReqDelete_Pre_CallerPriority_Vital: {
/*
- * While the current priority of the task calling rtems_task_delete() is
- * higher than the real priority of the task specified by the ``id``
- * parameter.
+ * While at least one priority of the calling task is higher than the
+ * highest priority of the task specified by the ``id`` parameter.
*/
- ctx->deleter_has_higher_priority = true;
+ ctx->vital_deleter_priority = true;
break;
}
- case RtemsTaskReqDelete_Pre_CallerPriority_LowerEqual: {
+ case RtemsTaskReqDelete_Pre_CallerPriority_Dispensable: {
/*
- * While the current priority of the task calling rtems_task_delete() is
- * lower than or equal to the real priority of the task specified by the
- * ``id`` parameter.
+ * While all priorities of the calling task are lower than or equal to
+ * the highest priority of the task specified by the ``id`` parameter.
*/
- ctx->deleter_has_higher_priority = false;
+ ctx->vital_deleter_priority = false;
break;
}
@@ -1369,32 +1366,32 @@ static void RtemsTaskReqDelete_Post_Zombie_Check(
}
}
-static void RtemsTaskReqDelete_Post_RealPriority_Check(
+static void RtemsTaskReqDelete_Post_TaskPriority_Check(
RtemsTaskReqDelete_Context *ctx,
- RtemsTaskReqDelete_Post_RealPriority state
+ RtemsTaskReqDelete_Post_TaskPriority state
)
{
switch ( state ) {
- case RtemsTaskReqDelete_Post_RealPriority_Raised: {
+ case RtemsTaskReqDelete_Post_TaskPriority_Raise: {
/*
- * The real priority of the task specified by the ``id`` parameter shall
- * be raised to the current priority of the caller of
- * rtems_task_delete().
+ * Each priority of the calling task which is higher than the highest
+ * priority of the task specified by the ``id`` parameter shall be made
+ * the highest priority of the task.
*/
T_eq_u32( ctx->worker_priority, PRIO_ULTRA_HIGH );
break;
}
- case RtemsTaskReqDelete_Post_RealPriority_Nop: {
+ case RtemsTaskReqDelete_Post_TaskPriority_Nop: {
/*
- * The real priority of the task specified by the ``id`` parameter shall
- * not be changed by the rtems_task_delete() call.
+ * The priorities of the task specified by the ``id`` parameter shall not
+ * be changed by the rtems_task_delete() call.
*/
T_eq_u32( ctx->worker_priority, PRIO_NORMAL );
break;
}
- case RtemsTaskReqDelete_Post_RealPriority_NA:
+ case RtemsTaskReqDelete_Post_TaskPriority_NA:
break;
}
}
@@ -1786,7 +1783,7 @@ static const RtemsTaskReqDelete_Entry
RtemsTaskReqDelete_Entries[] = {
{ 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, RtemsTaskReqDelete_Post_Status_NA,
RtemsTaskReqDelete_Post_FatalError_NA, RtemsTaskReqDelete_Post_Zombie_NA,
- RtemsTaskReqDelete_Post_RealPriority_NA,
+ RtemsTaskReqDelete_Post_TaskPriority_NA,
RtemsTaskReqDelete_Post_RestartExtensions_NA,
RtemsTaskReqDelete_Post_TerminateExtensions_NA,
RtemsTaskReqDelete_Post_Dormant_NA, RtemsTaskReqDelete_Post_Suspended_NA,
@@ -1796,7 +1793,7 @@ RtemsTaskReqDelete_Entries[] = {
RtemsTaskReqDelete_Post_Timer_NA },
{ 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, RtemsTaskReqDelete_Post_Status_InvId,
RtemsTaskReqDelete_Post_FatalError_Nop, RtemsTaskReqDelete_Post_Zombie_NA,
- RtemsTaskReqDelete_Post_RealPriority_NA,
+ RtemsTaskReqDelete_Post_TaskPriority_NA,
RtemsTaskReqDelete_Post_RestartExtensions_Nop,
RtemsTaskReqDelete_Post_TerminateExtensions_Nop,
RtemsTaskReqDelete_Post_Dormant_NA, RtemsTaskReqDelete_Post_Suspended_NA,
@@ -1806,7 +1803,7 @@ RtemsTaskReqDelete_Entries[] = {
RtemsTaskReqDelete_Post_Timer_NA },
{ 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, RtemsTaskReqDelete_Post_Status_NA,
RtemsTaskReqDelete_Post_FatalError_NA, RtemsTaskReqDelete_Post_Zombie_NA,
- RtemsTaskReqDelete_Post_RealPriority_NA,
+ RtemsTaskReqDelete_Post_TaskPriority_NA,
RtemsTaskReqDelete_Post_RestartExtensions_NA,
RtemsTaskReqDelete_Post_TerminateExtensions_NA,
RtemsTaskReqDelete_Post_Dormant_NA, RtemsTaskReqDelete_Post_Suspended_NA,
@@ -1816,7 +1813,7 @@ RtemsTaskReqDelete_Entries[] = {
RtemsTaskReqDelete_Post_Timer_NA },
{ 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, RtemsTaskReqDelete_Post_Status_NA,
RtemsTaskReqDelete_Post_FatalError_NA, RtemsTaskReqDelete_Post_Zombie_NA,
- RtemsTaskReqDelete_Post_RealPriority_NA,
+ RtemsTaskReqDelete_Post_TaskPriority_NA,
RtemsTaskReqDelete_Post_RestartExtensions_NA,
RtemsTaskReqDelete_Post_TerminateExtensions_NA,
RtemsTaskReqDelete_Post_Dormant_NA, RtemsTaskReqDelete_Post_Suspended_NA,
@@ -1826,7 +1823,7 @@ RtemsTaskReqDelete_Entries[] = {
RtemsTaskReqDelete_Post_Timer_NA },
{ 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, RtemsTaskReqDelete_Post_Status_NA,
RtemsTaskReqDelete_Post_FatalError_NA, RtemsTaskReqDelete_Post_Zombie_NA,
- RtemsTaskReqDelete_Post_RealPriority_NA,
+ RtemsTaskReqDelete_Post_TaskPriority_NA,
RtemsTaskReqDelete_Post_RestartExtensions_NA,
RtemsTaskReqDelete_Post_TerminateExtensions_NA,
RtemsTaskReqDelete_Post_Dormant_NA, RtemsTaskReqDelete_Post_Suspended_NA,
@@ -1834,31 +1831,9 @@ RtemsTaskReqDelete_Entries[] = {
RtemsTaskReqDelete_Post_Terminating_NA,
RtemsTaskReqDelete_Post_Protected_NA, RtemsTaskReqDelete_Post_State_NA,
RtemsTaskReqDelete_Post_Timer_NA },
- { 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1,
- RtemsTaskReqDelete_Post_Status_NoReturn,
- RtemsTaskReqDelete_Post_FatalError_Yes, RtemsTaskReqDelete_Post_Zombie_Yes,
- RtemsTaskReqDelete_Post_RealPriority_Nop,
- RtemsTaskReqDelete_Post_RestartExtensions_Nop,
- RtemsTaskReqDelete_Post_TerminateExtensions_Nop,
- RtemsTaskReqDelete_Post_Dormant_Yes, RtemsTaskReqDelete_Post_Suspended_Yes,
- RtemsTaskReqDelete_Post_Restarting_No,
- RtemsTaskReqDelete_Post_Terminating_Yes,
- RtemsTaskReqDelete_Post_Protected_No, RtemsTaskReqDelete_Post_State_Ready,
- RtemsTaskReqDelete_Post_Timer_Inactive },
- { 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1,
- RtemsTaskReqDelete_Post_Status_NoReturn,
- RtemsTaskReqDelete_Post_FatalError_Yes, RtemsTaskReqDelete_Post_Zombie_Yes,
- RtemsTaskReqDelete_Post_RealPriority_Nop,
- RtemsTaskReqDelete_Post_RestartExtensions_Nop,
- RtemsTaskReqDelete_Post_TerminateExtensions_Nop,
- RtemsTaskReqDelete_Post_Dormant_Yes, RtemsTaskReqDelete_Post_Suspended_No,
- RtemsTaskReqDelete_Post_Restarting_No,
- RtemsTaskReqDelete_Post_Terminating_Yes,
- RtemsTaskReqDelete_Post_Protected_No, RtemsTaskReqDelete_Post_State_Ready,
- RtemsTaskReqDelete_Post_Timer_Inactive },
{ 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, RtemsTaskReqDelete_Post_Status_Ok,
RtemsTaskReqDelete_Post_FatalError_Nop, RtemsTaskReqDelete_Post_Zombie_Yes,
- RtemsTaskReqDelete_Post_RealPriority_Nop,
+ RtemsTaskReqDelete_Post_TaskPriority_Nop,
RtemsTaskReqDelete_Post_RestartExtensions_Nop,
RtemsTaskReqDelete_Post_TerminateExtensions_Nop,
RtemsTaskReqDelete_Post_Dormant_Yes, RtemsTaskReqDelete_Post_Suspended_Yes,
@@ -1868,7 +1843,7 @@ RtemsTaskReqDelete_Entries[] = {
RtemsTaskReqDelete_Post_Timer_Inactive },
{ 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, RtemsTaskReqDelete_Post_Status_Ok,
RtemsTaskReqDelete_Post_FatalError_Nop, RtemsTaskReqDelete_Post_Zombie_Yes,
- RtemsTaskReqDelete_Post_RealPriority_Nop,
+ RtemsTaskReqDelete_Post_TaskPriority_Nop,
RtemsTaskReqDelete_Post_RestartExtensions_Nop,
RtemsTaskReqDelete_Post_TerminateExtensions_Nop,
RtemsTaskReqDelete_Post_Dormant_Yes, RtemsTaskReqDelete_Post_Suspended_No,
@@ -1879,7 +1854,7 @@ RtemsTaskReqDelete_Entries[] = {
{ 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1,
RtemsTaskReqDelete_Post_Status_CalledFromISR,
RtemsTaskReqDelete_Post_FatalError_Nop, RtemsTaskReqDelete_Post_Zombie_No,
- RtemsTaskReqDelete_Post_RealPriority_Nop,
+ RtemsTaskReqDelete_Post_TaskPriority_Nop,
RtemsTaskReqDelete_Post_RestartExtensions_Nop,
RtemsTaskReqDelete_Post_TerminateExtensions_Nop,
RtemsTaskReqDelete_Post_Dormant_Yes, RtemsTaskReqDelete_Post_Suspended_Yes,
@@ -1890,7 +1865,7 @@ RtemsTaskReqDelete_Entries[] = {
{ 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1,
RtemsTaskReqDelete_Post_Status_CalledFromISR,
RtemsTaskReqDelete_Post_FatalError_Nop, RtemsTaskReqDelete_Post_Zombie_No,
- RtemsTaskReqDelete_Post_RealPriority_Nop,
+ RtemsTaskReqDelete_Post_TaskPriority_Nop,
RtemsTaskReqDelete_Post_RestartExtensions_Nop,
RtemsTaskReqDelete_Post_TerminateExtensions_Nop,
RtemsTaskReqDelete_Post_Dormant_Yes, RtemsTaskReqDelete_Post_Suspended_No,
@@ -1901,7 +1876,7 @@ RtemsTaskReqDelete_Entries[] = {
{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
RtemsTaskReqDelete_Post_Status_NoReturn,
RtemsTaskReqDelete_Post_FatalError_Yes, RtemsTaskReqDelete_Post_Zombie_No,
- RtemsTaskReqDelete_Post_RealPriority_Raised,
+ RtemsTaskReqDelete_Post_TaskPriority_Raise,
RtemsTaskReqDelete_Post_RestartExtensions_Nop,
RtemsTaskReqDelete_Post_TerminateExtensions_Nop,
RtemsTaskReqDelete_Post_Dormant_No, RtemsTaskReqDelete_Post_Suspended_No,
@@ -1912,7 +1887,7 @@ RtemsTaskReqDelete_Entries[] = {
{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
RtemsTaskReqDelete_Post_Status_NoReturn,
RtemsTaskReqDelete_Post_FatalError_Yes, RtemsTaskReqDelete_Post_Zombie_No,
- RtemsTaskReqDelete_Post_RealPriority_Raised,
+ RtemsTaskReqDelete_Post_TaskPriority_Raise,
RtemsTaskReqDelete_Post_RestartExtensions_Nop,
RtemsTaskReqDelete_Post_TerminateExtensions_Nop,
RtemsTaskReqDelete_Post_Dormant_No, RtemsTaskReqDelete_Post_Suspended_No,
@@ -1923,7 +1898,7 @@ RtemsTaskReqDelete_Entries[] = {
{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
RtemsTaskReqDelete_Post_Status_NoReturn,
RtemsTaskReqDelete_Post_FatalError_Yes, RtemsTaskReqDelete_Post_Zombie_No,
- RtemsTaskReqDelete_Post_RealPriority_Nop,
+ RtemsTaskReqDelete_Post_TaskPriority_Nop,
RtemsTaskReqDelete_Post_RestartExtensions_Nop,
RtemsTaskReqDelete_Post_TerminateExtensions_Nop,
RtemsTaskReqDelete_Post_Dormant_No, RtemsTaskReqDelete_Post_Suspended_No,
@@ -1934,7 +1909,7 @@ RtemsTaskReqDelete_Entries[] = {
{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
RtemsTaskReqDelete_Post_Status_NoReturn,
RtemsTaskReqDelete_Post_FatalError_Yes, RtemsTaskReqDelete_Post_Zombie_No,
- RtemsTaskReqDelete_Post_RealPriority_Nop,
+ RtemsTaskReqDelete_Post_TaskPriority_Nop,
RtemsTaskReqDelete_Post_RestartExtensions_Nop,
RtemsTaskReqDelete_Post_TerminateExtensions_Nop,
RtemsTaskReqDelete_Post_Dormant_No, RtemsTaskReqDelete_Post_Suspended_No,
@@ -1944,7 +1919,7 @@ RtemsTaskReqDelete_Entries[] = {
RtemsTaskReqDelete_Post_Timer_Inactive },
{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, RtemsTaskReqDelete_Post_Status_Ok,
RtemsTaskReqDelete_Post_FatalError_Nop, RtemsTaskReqDelete_Post_Zombie_No,
- RtemsTaskReqDelete_Post_RealPriority_Raised,
+ RtemsTaskReqDelete_Post_TaskPriority_Raise,
RtemsTaskReqDelete_Post_RestartExtensions_Nop,
RtemsTaskReqDelete_Post_TerminateExtensions_Nop,
RtemsTaskReqDelete_Post_Dormant_No, RtemsTaskReqDelete_Post_Suspended_No,
@@ -1954,7 +1929,7 @@ RtemsTaskReqDelete_Entries[] = {
RtemsTaskReqDelete_Post_Timer_Inactive },
{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, RtemsTaskReqDelete_Post_Status_Ok,
RtemsTaskReqDelete_Post_FatalError_Nop, RtemsTaskReqDelete_Post_Zombie_No,
- RtemsTaskReqDelete_Post_RealPriority_Raised,
+ RtemsTaskReqDelete_Post_TaskPriority_Raise,
RtemsTaskReqDelete_Post_RestartExtensions_Nop,
RtemsTaskReqDelete_Post_TerminateExtensions_Nop,
RtemsTaskReqDelete_Post_Dormant_No, RtemsTaskReqDelete_Post_Suspended_No,
@@ -1964,7 +1939,7 @@ RtemsTaskReqDelete_Entries[] = {
RtemsTaskReqDelete_Post_Timer_Inactive },
{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, RtemsTaskReqDelete_Post_Status_Ok,
RtemsTaskReqDelete_Post_FatalError_Nop, RtemsTaskReqDelete_Post_Zombie_No,
- RtemsTaskReqDelete_Post_RealPriority_Nop,
+ RtemsTaskReqDelete_Post_TaskPriority_Nop,
RtemsTaskReqDelete_Post_RestartExtensions_Nop,
RtemsTaskReqDelete_Post_TerminateExtensions_Nop,
RtemsTaskReqDelete_Post_Dormant_No, RtemsTaskReqDelete_Post_Suspended_No,
@@ -1974,7 +1949,7 @@ RtemsTaskReqDelete_Entries[] = {
RtemsTaskReqDelete_Post_Timer_Inactive },
{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, RtemsTaskReqDelete_Post_Status_Ok,
RtemsTaskReqDelete_Post_FatalError_Nop, RtemsTaskReqDelete_Post_Zombie_No,
- RtemsTaskReqDelete_Post_RealPriority_Nop,
+ RtemsTaskReqDelete_Post_TaskPriority_Nop,
RtemsTaskReqDelete_Post_RestartExtensions_Nop,
RtemsTaskReqDelete_Post_TerminateExtensions_Nop,
RtemsTaskReqDelete_Post_Dormant_No, RtemsTaskReqDelete_Post_Suspended_No,
@@ -1985,7 +1960,7 @@ RtemsTaskReqDelete_Entries[] = {
{ 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,
RtemsTaskReqDelete_Post_Status_NoReturn,
RtemsTaskReqDelete_Post_FatalError_Nop, RtemsTaskReqDelete_Post_Zombie_Yes,
- RtemsTaskReqDelete_Post_RealPriority_Nop,
+ RtemsTaskReqDelete_Post_TaskPriority_Nop,
RtemsTaskReqDelete_Post_RestartExtensions_Nop,
RtemsTaskReqDelete_Post_TerminateExtensions_Yes,
RtemsTaskReqDelete_Post_Dormant_No, RtemsTaskReqDelete_Post_Suspended_No,
@@ -1996,7 +1971,7 @@ RtemsTaskReqDelete_Entries[] = {
{ 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,
RtemsTaskReqDelete_Post_Status_NoReturn,
RtemsTaskReqDelete_Post_FatalError_Nop, RtemsTaskReqDelete_Post_Zombie_Yes,
- RtemsTaskReqDelete_Post_RealPriority_Nop,
+ RtemsTaskReqDelete_Post_TaskPriority_Nop,
RtemsTaskReqDelete_Post_RestartExtensions_Nop,
RtemsTaskReqDelete_Post_TerminateExtensions_Yes,
RtemsTaskReqDelete_Post_Dormant_No, RtemsTaskReqDelete_Post_Suspended_No,
@@ -2007,7 +1982,7 @@ RtemsTaskReqDelete_Entries[] = {
{ 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,
RtemsTaskReqDelete_Post_Status_NoReturn,
RtemsTaskReqDelete_Post_FatalError_Yes, RtemsTaskReqDelete_Post_Zombie_No,
- RtemsTaskReqDelete_Post_RealPriority_Nop,
+ RtemsTaskReqDelete_Post_TaskPriority_Nop,
RtemsTaskReqDelete_Post_RestartExtensions_Nop,
RtemsTaskReqDelete_Post_TerminateExtensions_Nop,
RtemsTaskReqDelete_Post_Dormant_No, RtemsTaskReqDelete_Post_Suspended_Yes,
@@ -2018,7 +1993,7 @@ RtemsTaskReqDelete_Entries[] = {
{ 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,
RtemsTaskReqDelete_Post_Status_NoReturn,
RtemsTaskReqDelete_Post_FatalError_Yes, RtemsTaskReqDelete_Post_Zombie_No,
- RtemsTaskReqDelete_Post_RealPriority_Nop,
+ RtemsTaskReqDelete_Post_TaskPriority_Nop,
RtemsTaskReqDelete_Post_RestartExtensions_Nop,
RtemsTaskReqDelete_Post_TerminateExtensions_Nop,
RtemsTaskReqDelete_Post_Dormant_No, RtemsTaskReqDelete_Post_Suspended_Yes,
@@ -2029,7 +2004,7 @@ RtemsTaskReqDelete_Entries[] = {
{ 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,
RtemsTaskReqDelete_Post_Status_NoReturn,
RtemsTaskReqDelete_Post_FatalError_Yes, RtemsTaskReqDelete_Post_Zombie_No,
- RtemsTaskReqDelete_Post_RealPriority_Nop,
+ RtemsTaskReqDelete_Post_TaskPriority_Nop,
RtemsTaskReqDelete_Post_RestartExtensions_Nop,
RtemsTaskReqDelete_Post_TerminateExtensions_Nop,
RtemsTaskReqDelete_Post_Dormant_No, RtemsTaskReqDelete_Post_Suspended_Yes,
@@ -2040,7 +2015,7 @@ RtemsTaskReqDelete_Entries[] = {
{ 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,
RtemsTaskReqDelete_Post_Status_NoReturn,
RtemsTaskReqDelete_Post_FatalError_Yes, RtemsTaskReqDelete_Post_Zombie_No,
- RtemsTaskReqDelete_Post_RealPriority_Nop,
+ RtemsTaskReqDelete_Post_TaskPriority_Nop,
RtemsTaskReqDelete_Post_RestartExtensions_Nop,
RtemsTaskReqDelete_Post_TerminateExtensions_Nop,
RtemsTaskReqDelete_Post_Dormant_No, RtemsTaskReqDelete_Post_Suspended_Yes,
@@ -2051,7 +2026,7 @@ RtemsTaskReqDelete_Entries[] = {
{ 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,
RtemsTaskReqDelete_Post_Status_NoReturn,
RtemsTaskReqDelete_Post_FatalError_Yes, RtemsTaskReqDelete_Post_Zombie_No,
- RtemsTaskReqDelete_Post_RealPriority_Nop,
+ RtemsTaskReqDelete_Post_TaskPriority_Nop,
RtemsTaskReqDelete_Post_RestartExtensions_Nop,
RtemsTaskReqDelete_Post_TerminateExtensions_Nop,
RtemsTaskReqDelete_Post_Dormant_No, RtemsTaskReqDelete_Post_Suspended_No,
@@ -2062,7 +2037,7 @@ RtemsTaskReqDelete_Entries[] = {
{ 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,
RtemsTaskReqDelete_Post_Status_NoReturn,
RtemsTaskReqDelete_Post_FatalError_Yes, RtemsTaskReqDelete_Post_Zombie_No,
- RtemsTaskReqDelete_Post_RealPriority_Nop,
+ RtemsTaskReqDelete_Post_TaskPriority_Nop,
RtemsTaskReqDelete_Post_RestartExtensions_Nop,
RtemsTaskReqDelete_Post_TerminateExtensions_Nop,
RtemsTaskReqDelete_Post_Dormant_No, RtemsTaskReqDelete_Post_Suspended_No,
@@ -2073,7 +2048,7 @@ RtemsTaskReqDelete_Entries[] = {
{ 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,
RtemsTaskReqDelete_Post_Status_NoReturn,
RtemsTaskReqDelete_Post_FatalError_Yes, RtemsTaskReqDelete_Post_Zombie_No,
- RtemsTaskReqDelete_Post_RealPriority_Nop,
+ RtemsTaskReqDelete_Post_TaskPriority_Nop,
RtemsTaskReqDelete_Post_RestartExtensions_Nop,
RtemsTaskReqDelete_Post_TerminateExtensions_Nop,
RtemsTaskReqDelete_Post_Dormant_No, RtemsTaskReqDelete_Post_Suspended_No,
@@ -2084,7 +2059,7 @@ RtemsTaskReqDelete_Entries[] = {
{ 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,
RtemsTaskReqDelete_Post_Status_NoReturn,
RtemsTaskReqDelete_Post_FatalError_Yes, RtemsTaskReqDelete_Post_Zombie_No,
- RtemsTaskReqDelete_Post_RealPriority_Nop,
+ RtemsTaskReqDelete_Post_TaskPriority_Nop,
RtemsTaskReqDelete_Post_RestartExtensions_Nop,
RtemsTaskReqDelete_Post_TerminateExtensions_Nop,
RtemsTaskReqDelete_Post_Dormant_No, RtemsTaskReqDelete_Post_Suspended_No,
@@ -2095,7 +2070,7 @@ RtemsTaskReqDelete_Entries[] = {
{ 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,
RtemsTaskReqDelete_Post_Status_NoReturn,
RtemsTaskReqDelete_Post_FatalError_Nop, RtemsTaskReqDelete_Post_Zombie_No,
- RtemsTaskReqDelete_Post_RealPriority_Nop,
+ RtemsTaskReqDelete_Post_TaskPriority_Nop,
RtemsTaskReqDelete_Post_RestartExtensions_Nop,
RtemsTaskReqDelete_Post_TerminateExtensions_Nop,
RtemsTaskReqDelete_Post_Dormant_No, RtemsTaskReqDelete_Post_Suspended_Yes,
@@ -2106,7 +2081,7 @@ RtemsTaskReqDelete_Entries[] = {
{ 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,
RtemsTaskReqDelete_Post_Status_NoReturn,
RtemsTaskReqDelete_Post_FatalError_Nop, RtemsTaskReqDelete_Post_Zombie_No,
- RtemsTaskReqDelete_Post_RealPriority_Nop,
+ RtemsTaskReqDelete_Post_TaskPriority_Nop,
RtemsTaskReqDelete_Post_RestartExtensions_Nop,
RtemsTaskReqDelete_Post_TerminateExtensions_Nop,
RtemsTaskReqDelete_Post_Dormant_No, RtemsTaskReqDelete_Post_Suspended_Yes,
@@ -2117,7 +2092,7 @@ RtemsTaskReqDelete_Entries[] = {
{ 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,
RtemsTaskReqDelete_Post_Status_NoReturn,
RtemsTaskReqDelete_Post_FatalError_Nop, RtemsTaskReqDelete_Post_Zombie_No,
- RtemsTaskReqDelete_Post_RealPriority_Nop,
+ RtemsTaskReqDelete_Post_TaskPriority_Nop,
RtemsTaskReqDelete_Post_RestartExtensions_Nop,
RtemsTaskReqDelete_Post_TerminateExtensions_Nop,
RtemsTaskReqDelete_Post_Dormant_No, RtemsTaskReqDelete_Post_Suspended_Yes,
@@ -2128,7 +2103,7 @@ RtemsTaskReqDelete_Entries[] = {
{ 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,
RtemsTaskReqDelete_Post_Status_NoReturn,
RtemsTaskReqDelete_Post_FatalError_Nop, RtemsTaskReqDelete_Post_Zombie_No,
- RtemsTaskReqDelete_Post_RealPriority_Nop,
+ RtemsTaskReqDelete_Post_TaskPriority_Nop,
RtemsTaskReqDelete_Post_RestartExtensions_Nop,
RtemsTaskReqDelete_Post_TerminateExtensions_Nop,
RtemsTaskReqDelete_Post_Dormant_No, RtemsTaskReqDelete_Post_Suspended_Yes,
@@ -2139,7 +2114,7 @@ RtemsTaskReqDelete_Entries[] = {
{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
RtemsTaskReqDelete_Post_Status_NoReturn,
RtemsTaskReqDelete_Post_FatalError_Yes, RtemsTaskReqDelete_Post_Zombie_No,
- RtemsTaskReqDelete_Post_RealPriority_Raised,
+ RtemsTaskReqDelete_Post_TaskPriority_Raise,
RtemsTaskReqDelete_Post_RestartExtensions_Nop,
RtemsTaskReqDelete_Post_TerminateExtensions_Nop,
RtemsTaskReqDelete_Post_Dormant_No, RtemsTaskReqDelete_Post_Suspended_No,
@@ -2151,7 +2126,7 @@ RtemsTaskReqDelete_Entries[] = {
{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
RtemsTaskReqDelete_Post_Status_NoReturn,
RtemsTaskReqDelete_Post_FatalError_Yes, RtemsTaskReqDelete_Post_Zombie_No,
- RtemsTaskReqDelete_Post_RealPriority_Raised,
+ RtemsTaskReqDelete_Post_TaskPriority_Raise,
RtemsTaskReqDelete_Post_RestartExtensions_Nop,
RtemsTaskReqDelete_Post_TerminateExtensions_Nop,
RtemsTaskReqDelete_Post_Dormant_No, RtemsTaskReqDelete_Post_Suspended_No,
@@ -2163,7 +2138,7 @@ RtemsTaskReqDelete_Entries[] = {
{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
RtemsTaskReqDelete_Post_Status_NoReturn,
RtemsTaskReqDelete_Post_FatalError_Yes, RtemsTaskReqDelete_Post_Zombie_No,
- RtemsTaskReqDelete_Post_RealPriority_Raised,
+ RtemsTaskReqDelete_Post_TaskPriority_Raise,
RtemsTaskReqDelete_Post_RestartExtensions_Nop,
RtemsTaskReqDelete_Post_TerminateExtensions_Nop,
RtemsTaskReqDelete_Post_Dormant_No, RtemsTaskReqDelete_Post_Suspended_No,
@@ -2174,7 +2149,7 @@ RtemsTaskReqDelete_Entries[] = {
{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
RtemsTaskReqDelete_Post_Status_NoReturn,
RtemsTaskReqDelete_Post_FatalError_Yes, RtemsTaskReqDelete_Post_Zombie_No,
- RtemsTaskReqDelete_Post_RealPriority_Raised,
+ RtemsTaskReqDelete_Post_TaskPriority_Raise,
RtemsTaskReqDelete_Post_RestartExtensions_Nop,
RtemsTaskReqDelete_Post_TerminateExtensions_Nop,
RtemsTaskReqDelete_Post_Dormant_No, RtemsTaskReqDelete_Post_Suspended_No,
@@ -2186,7 +2161,7 @@ RtemsTaskReqDelete_Entries[] = {
{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
RtemsTaskReqDelete_Post_Status_NoReturn,
RtemsTaskReqDelete_Post_FatalError_Yes, RtemsTaskReqDelete_Post_Zombie_No,
- RtemsTaskReqDelete_Post_RealPriority_Raised,
+ RtemsTaskReqDelete_Post_TaskPriority_Raise,
RtemsTaskReqDelete_Post_RestartExtensions_Nop,
RtemsTaskReqDelete_Post_TerminateExtensions_Nop,
RtemsTaskReqDelete_Post_Dormant_No, RtemsTaskReqDelete_Post_Suspended_No,
@@ -2197,7 +2172,7 @@ RtemsTaskReqDelete_Entries[] = {
{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
RtemsTaskReqDelete_Post_Status_NoReturn,
RtemsTaskReqDelete_Post_FatalError_Yes, RtemsTaskReqDelete_Post_Zombie_No,
- RtemsTaskReqDelete_Post_RealPriority_Raised,
+ RtemsTaskReqDelete_Post_TaskPriority_Raise,
RtemsTaskReqDelete_Post_RestartExtensions_Nop,
RtemsTaskReqDelete_Post_TerminateExtensions_Nop,
RtemsTaskReqDelete_Post_Dormant_No, RtemsTaskReqDelete_Post_Suspended_No,
@@ -2209,7 +2184,7 @@ RtemsTaskReqDelete_Entries[] = {
{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
RtemsTaskReqDelete_Post_Status_NoReturn,
RtemsTaskReqDelete_Post_FatalError_Yes, RtemsTaskReqDelete_Post_Zombie_No,
- RtemsTaskReqDelete_Post_RealPriority_Raised,
+ RtemsTaskReqDelete_Post_TaskPriority_Raise,
RtemsTaskReqDelete_Post_RestartExtensions_Nop,
RtemsTaskReqDelete_Post_TerminateExtensions_Nop,
RtemsTaskReqDelete_Post_Dormant_No, RtemsTaskReqDelete_Post_Suspended_No,
@@ -2221,7 +2196,7 @@ RtemsTaskReqDelete_Entries[] = {
{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
RtemsTaskReqDelete_Post_Status_NoReturn,
RtemsTaskReqDelete_Post_FatalError_Yes, RtemsTaskReqDelete_Post_Zombie_No,
- RtemsTaskReqDelete_Post_RealPriority_Raised,
+ RtemsTaskReqDelete_Post_TaskPriority_Raise,
RtemsTaskReqDelete_Post_RestartExtensions_Nop,
RtemsTaskReqDelete_Post_TerminateExtensions_Nop,
RtemsTaskReqDelete_Post_Dormant_No, RtemsTaskReqDelete_Post_Suspended_No,
@@ -2232,7 +2207,7 @@ RtemsTaskReqDelete_Entries[] = {
{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
RtemsTaskReqDelete_Post_Status_NoReturn,
RtemsTaskReqDelete_Post_FatalError_Yes, RtemsTaskReqDelete_Post_Zombie_No,
- RtemsTaskReqDelete_Post_RealPriority_Raised,
+ RtemsTaskReqDelete_Post_TaskPriority_Raise,
RtemsTaskReqDelete_Post_RestartExtensions_Nop,
RtemsTaskReqDelete_Post_TerminateExtensions_Nop,
RtemsTaskReqDelete_Post_Dormant_No, RtemsTaskReqDelete_Post_Suspended_No,
@@ -2244,7 +2219,7 @@ RtemsTaskReqDelete_Entries[] = {
{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
RtemsTaskReqDelete_Post_Status_NoReturn,
RtemsTaskReqDelete_Post_FatalError_Yes, RtemsTaskReqDelete_Post_Zombie_No,
- RtemsTaskReqDelete_Post_RealPriority_Raised,
+ RtemsTaskReqDelete_Post_TaskPriority_Raise,
RtemsTaskReqDelete_Post_RestartExtensions_Nop,
RtemsTaskReqDelete_Post_TerminateExtensions_Nop,
RtemsTaskReqDelete_Post_Dormant_No, RtemsTaskReqDelete_Post_Suspended_No,
@@ -2255,7 +2230,7 @@ RtemsTaskReqDelete_Entries[] = {
{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
RtemsTaskReqDelete_Post_Status_NoReturn,
RtemsTaskReqDelete_Post_FatalError_Yes, RtemsTaskReqDelete_Post_Zombie_No,
- RtemsTaskReqDelete_Post_RealPriority_Nop,
+ RtemsTaskReqDelete_Post_TaskPriority_Nop,
RtemsTaskReqDelete_Post_RestartExtensions_Nop,
RtemsTaskReqDelete_Post_TerminateExtensions_Nop,
RtemsTaskReqDelete_Post_Dormant_No, RtemsTaskReqDelete_Post_Suspended_No,
@@ -2267,7 +2242,7 @@ RtemsTaskReqDelete_Entries[] = {
{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
RtemsTaskReqDelete_Post_Status_NoReturn,
RtemsTaskReqDelete_Post_FatalError_Yes, RtemsTaskReqDelete_Post_Zombie_No,
- RtemsTaskReqDelete_Post_RealPriority_Nop,
+ RtemsTaskReqDelete_Post_TaskPriority_Nop,
RtemsTaskReqDelete_Post_RestartExtensions_Nop,
RtemsTaskReqDelete_Post_TerminateExtensions_Nop,
RtemsTaskReqDelete_Post_Dormant_No, RtemsTaskReqDelete_Post_Suspended_No,
@@ -2279,7 +2254,7 @@ RtemsTaskReqDelete_Entries[] = {
{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
RtemsTaskReqDelete_Post_Status_NoReturn,
RtemsTaskReqDelete_Post_FatalError_Yes, RtemsTaskReqDelete_Post_Zombie_No,
- RtemsTaskReqDelete_Post_RealPriority_Nop,
+ RtemsTaskReqDelete_Post_TaskPriority_Nop,
RtemsTaskReqDelete_Post_RestartExtensions_Nop,
RtemsTaskReqDelete_Post_TerminateExtensions_Nop,
RtemsTaskReqDelete_Post_Dormant_No, RtemsTaskReqDelete_Post_Suspended_No,
@@ -2290,7 +2265,7 @@ RtemsTaskReqDelete_Entries[] = {
{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
RtemsTaskReqDelete_Post_Status_NoReturn,
RtemsTaskReqDelete_Post_FatalError_Yes, RtemsTaskReqDelete_Post_Zombie_No,
- RtemsTaskReqDelete_Post_RealPriority_Nop,
+ RtemsTaskReqDelete_Post_TaskPriority_Nop,
RtemsTaskReqDelete_Post_RestartExtensions_Nop,
RtemsTaskReqDelete_Post_TerminateExtensions_Nop,
RtemsTaskReqDelete_Post_Dormant_No, RtemsTaskReqDelete_Post_Suspended_No,
@@ -2302,7 +2277,7 @@ RtemsTaskReqDelete_Entries[] = {
{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
RtemsTaskReqDelete_Post_Status_NoReturn,
RtemsTaskReqDelete_Post_FatalError_Yes, RtemsTaskReqDelete_Post_Zombie_No,
- RtemsTaskReqDelete_Post_RealPriority_Nop,
+ RtemsTaskReqDelete_Post_TaskPriority_Nop,
RtemsTaskReqDelete_Post_RestartExtensions_Nop,
RtemsTaskReqDelete_Post_TerminateExtensions_Nop,
RtemsTaskReqDelete_Post_Dormant_No, RtemsTaskReqDelete_Post_Suspended_No,
@@ -2313,7 +2288,7 @@ RtemsTaskReqDelete_Entries[] = {
{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
RtemsTaskReqDelete_Post_Status_NoReturn,
RtemsTaskReqDelete_Post_FatalError_Yes, RtemsTaskReqDelete_Post_Zombie_No,
- RtemsTaskReqDelete_Post_RealPriority_Nop,
+ RtemsTaskReqDelete_Post_TaskPriority_Nop,
RtemsTaskReqDelete_Post_RestartExtensions_Nop,
RtemsTaskReqDelete_Post_TerminateExtensions_Nop,
RtemsTaskReqDelete_Post_Dormant_No, RtemsTaskReqDelete_Post_Suspended_No,
@@ -2325,7 +2300,7 @@ RtemsTaskReqDelete_Entries[] = {
{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
RtemsTaskReqDelete_Post_Status_NoReturn,
RtemsTaskReqDelete_Post_FatalError_Yes, RtemsTaskReqDelete_Post_Zombie_No,
- RtemsTaskReqDelete_Post_RealPriority_Nop,
+ RtemsTaskReqDelete_Post_TaskPriority_Nop,
RtemsTaskReqDelete_Post_RestartExtensions_Nop,
RtemsTaskReqDelete_Post_TerminateExtensions_Nop,
RtemsTaskReqDelete_Post_Dormant_No, RtemsTaskReqDelete_Post_Suspended_No,
@@ -2337,7 +2312,7 @@ RtemsTaskReqDelete_Entries[] = {
{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
RtemsTaskReqDelete_Post_Status_NoReturn,
RtemsTaskReqDelete_Post_FatalError_Yes, RtemsTaskReqDelete_Post_Zombie_No,
- RtemsTaskReqDelete_Post_RealPriority_Nop,
+ RtemsTaskReqDelete_Post_TaskPriority_Nop,
RtemsTaskReqDelete_Post_RestartExtensions_Nop,
RtemsTaskReqDelete_Post_TerminateExtensions_Nop,
RtemsTaskReqDelete_Post_Dormant_No, RtemsTaskReqDelete_Post_Suspended_No,
@@ -2348,7 +2323,7 @@ RtemsTaskReqDelete_Entries[] = {
{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
RtemsTaskReqDelete_Post_Status_NoReturn,
RtemsTaskReqDelete_Post_FatalError_Yes, RtemsTaskReqDelete_Post_Zombie_No,
- RtemsTaskReqDelete_Post_RealPriority_Nop,
+ RtemsTaskReqDelete_Post_TaskPriority_Nop,
RtemsTaskReqDelete_Post_RestartExtensions_Nop,
RtemsTaskReqDelete_Post_TerminateExtensions_Nop,
RtemsTaskReqDelete_Post_Dormant_No, RtemsTaskReqDelete_Post_Suspended_No,
@@ -2360,7 +2335,7 @@ RtemsTaskReqDelete_Entries[] = {
{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
RtemsTaskReqDelete_Post_Status_NoReturn,
RtemsTaskReqDelete_Post_FatalError_Yes, RtemsTaskReqDelete_Post_Zombie_No,
- RtemsTaskReqDelete_Post_RealPriority_Nop,
+ RtemsTaskReqDelete_Post_TaskPriority_Nop,
RtemsTaskReqDelete_Post_RestartExtensions_Nop,
RtemsTaskReqDelete_Post_TerminateExtensions_Nop,
RtemsTaskReqDelete_Post_Dormant_No, RtemsTaskReqDelete_Post_Suspended_No,
@@ -2370,7 +2345,7 @@ RtemsTaskReqDelete_Entries[] = {
RtemsTaskReqDelete_Post_State_Blocked, RtemsTaskReqDelete_Post_Timer_Active },
{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, RtemsTaskReqDelete_Post_Status_Ok,
RtemsTaskReqDelete_Post_FatalError_Nop, RtemsTaskReqDelete_Post_Zombie_No,
- RtemsTaskReqDelete_Post_RealPriority_Raised,
+ RtemsTaskReqDelete_Post_TaskPriority_Raise,
RtemsTaskReqDelete_Post_RestartExtensions_Nop,
RtemsTaskReqDelete_Post_TerminateExtensions_Nop,
RtemsTaskReqDelete_Post_Dormant_No, RtemsTaskReqDelete_Post_Suspended_No,
@@ -2381,7 +2356,7 @@ RtemsTaskReqDelete_Entries[] = {
RtemsTaskReqDelete_Post_Timer_Inactive },
{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, RtemsTaskReqDelete_Post_Status_Ok,
RtemsTaskReqDelete_Post_FatalError_Nop, RtemsTaskReqDelete_Post_Zombie_No,
- RtemsTaskReqDelete_Post_RealPriority_Raised,
+ RtemsTaskReqDelete_Post_TaskPriority_Raise,
RtemsTaskReqDelete_Post_RestartExtensions_Nop,
RtemsTaskReqDelete_Post_TerminateExtensions_Nop,
RtemsTaskReqDelete_Post_Dormant_No, RtemsTaskReqDelete_Post_Suspended_No,
@@ -2392,7 +2367,7 @@ RtemsTaskReqDelete_Entries[] = {
RtemsTaskReqDelete_Post_Timer_Active },
{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, RtemsTaskReqDelete_Post_Status_Ok,
RtemsTaskReqDelete_Post_FatalError_Nop, RtemsTaskReqDelete_Post_Zombie_No,
- RtemsTaskReqDelete_Post_RealPriority_Raised,
+ RtemsTaskReqDelete_Post_TaskPriority_Raise,
RtemsTaskReqDelete_Post_RestartExtensions_Nop,
RtemsTaskReqDelete_Post_TerminateExtensions_Nop,
RtemsTaskReqDelete_Post_Dormant_No, RtemsTaskReqDelete_Post_Suspended_No,
@@ -2402,7 +2377,7 @@ RtemsTaskReqDelete_Entries[] = {
RtemsTaskReqDelete_Post_Timer_Inactive },
{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, RtemsTaskReqDelete_Post_Status_Ok,
RtemsTaskReqDelete_Post_FatalError_Nop, RtemsTaskReqDelete_Post_Zombie_No,
- RtemsTaskReqDelete_Post_RealPriority_Raised,
+ RtemsTaskReqDelete_Post_TaskPriority_Raise,
RtemsTaskReqDelete_Post_RestartExtensions_Nop,
RtemsTaskReqDelete_Post_TerminateExtensions_Nop,
RtemsTaskReqDelete_Post_Dormant_No, RtemsTaskReqDelete_Post_Suspended_No,
@@ -2413,7 +2388,7 @@ RtemsTaskReqDelete_Entries[] = {
RtemsTaskReqDelete_Post_Timer_Inactive },
{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, RtemsTaskReqDelete_Post_Status_Ok,
RtemsTaskReqDelete_Post_FatalError_Nop, RtemsTaskReqDelete_Post_Zombie_No,
- RtemsTaskReqDelete_Post_RealPriority_Raised,
+ RtemsTaskReqDelete_Post_TaskPriority_Raise,
RtemsTaskReqDelete_Post_RestartExtensions_Nop,
RtemsTaskReqDelete_Post_TerminateExtensions_Nop,
RtemsTaskReqDelete_Post_Dormant_No, RtemsTaskReqDelete_Post_Suspended_No,
@@ -2423,7 +2398,7 @@ RtemsTaskReqDelete_Entries[] = {
RtemsTaskReqDelete_Post_State_Blocked, RtemsTaskReqDelete_Post_Timer_Active },
{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, RtemsTaskReqDelete_Post_Status_Ok,
RtemsTaskReqDelete_Post_FatalError_Nop, RtemsTaskReqDelete_Post_Zombie_No,
- RtemsTaskReqDelete_Post_RealPriority_Raised,
+ RtemsTaskReqDelete_Post_TaskPriority_Raise,
RtemsTaskReqDelete_Post_RestartExtensions_Nop,
RtemsTaskReqDelete_Post_TerminateExtensions_Nop,
RtemsTaskReqDelete_Post_Dormant_No, RtemsTaskReqDelete_Post_Suspended_No,
@@ -2434,7 +2409,7 @@ RtemsTaskReqDelete_Entries[] = {
RtemsTaskReqDelete_Post_Timer_Inactive },
{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, RtemsTaskReqDelete_Post_Status_Ok,
RtemsTaskReqDelete_Post_FatalError_Nop, RtemsTaskReqDelete_Post_Zombie_No,
- RtemsTaskReqDelete_Post_RealPriority_Raised,
+ RtemsTaskReqDelete_Post_TaskPriority_Raise,
RtemsTaskReqDelete_Post_RestartExtensions_Nop,
RtemsTaskReqDelete_Post_TerminateExtensions_Nop,
RtemsTaskReqDelete_Post_Dormant_No, RtemsTaskReqDelete_Post_Suspended_No,
@@ -2445,7 +2420,7 @@ RtemsTaskReqDelete_Entries[] = {
RtemsTaskReqDelete_Post_Timer_Active },
{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, RtemsTaskReqDelete_Post_Status_Ok,
RtemsTaskReqDelete_Post_FatalError_Nop, RtemsTaskReqDelete_Post_Zombie_No,
- RtemsTaskReqDelete_Post_RealPriority_Raised,
+ RtemsTaskReqDelete_Post_TaskPriority_Raise,
RtemsTaskReqDelete_Post_RestartExtensions_Nop,
RtemsTaskReqDelete_Post_TerminateExtensions_Nop,
RtemsTaskReqDelete_Post_Dormant_No, RtemsTaskReqDelete_Post_Suspended_No,
@@ -2455,7 +2430,7 @@ RtemsTaskReqDelete_Entries[] = {
RtemsTaskReqDelete_Post_Timer_Inactive },
{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, RtemsTaskReqDelete_Post_Status_Ok,
RtemsTaskReqDelete_Post_FatalError_Nop, RtemsTaskReqDelete_Post_Zombie_No,
- RtemsTaskReqDelete_Post_RealPriority_Raised,
+ RtemsTaskReqDelete_Post_TaskPriority_Raise,
RtemsTaskReqDelete_Post_RestartExtensions_Nop,
RtemsTaskReqDelete_Post_TerminateExtensions_Nop,
RtemsTaskReqDelete_Post_Dormant_No, RtemsTaskReqDelete_Post_Suspended_No,
@@ -2466,7 +2441,7 @@ RtemsTaskReqDelete_Entries[] = {
RtemsTaskReqDelete_Post_Timer_Inactive },
{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, RtemsTaskReqDelete_Post_Status_Ok,
RtemsTaskReqDelete_Post_FatalError_Nop, RtemsTaskReqDelete_Post_Zombie_No,
- RtemsTaskReqDelete_Post_RealPriority_Raised,
+ RtemsTaskReqDelete_Post_TaskPriority_Raise,
RtemsTaskReqDelete_Post_RestartExtensions_Nop,
RtemsTaskReqDelete_Post_TerminateExtensions_Nop,
RtemsTaskReqDelete_Post_Dormant_No, RtemsTaskReqDelete_Post_Suspended_No,
@@ -2476,7 +2451,7 @@ RtemsTaskReqDelete_Entries[] = {
RtemsTaskReqDelete_Post_State_Blocked, RtemsTaskReqDelete_Post_Timer_Active },
{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, RtemsTaskReqDelete_Post_Status_Ok,
RtemsTaskReqDelete_Post_FatalError_Nop, RtemsTaskReqDelete_Post_Zombie_No,
- RtemsTaskReqDelete_Post_RealPriority_Nop,
+ RtemsTaskReqDelete_Post_TaskPriority_Nop,
RtemsTaskReqDelete_Post_RestartExtensions_Nop,
RtemsTaskReqDelete_Post_TerminateExtensions_Nop,
RtemsTaskReqDelete_Post_Dormant_No, RtemsTaskReqDelete_Post_Suspended_No,
@@ -2487,7 +2462,7 @@ RtemsTaskReqDelete_Entries[] = {
RtemsTaskReqDelete_Post_Timer_Inactive },
{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, RtemsTaskReqDelete_Post_Status_Ok,
RtemsTaskReqDelete_Post_FatalError_Nop, RtemsTaskReqDelete_Post_Zombie_No,
- RtemsTaskReqDelete_Post_RealPriority_Nop,
+ RtemsTaskReqDelete_Post_TaskPriority_Nop,
RtemsTaskReqDelete_Post_RestartExtensions_Nop,
RtemsTaskReqDelete_Post_TerminateExtensions_Nop,
RtemsTaskReqDelete_Post_Dormant_No, RtemsTaskReqDelete_Post_Suspended_No,
@@ -2498,7 +2473,7 @@ RtemsTaskReqDelete_Entries[] = {
RtemsTaskReqDelete_Post_Timer_Active },
{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, RtemsTaskReqDelete_Post_Status_Ok,
RtemsTaskReqDelete_Post_FatalError_Nop, RtemsTaskReqDelete_Post_Zombie_No,
- RtemsTaskReqDelete_Post_RealPriority_Nop,
+ RtemsTaskReqDelete_Post_TaskPriority_Nop,
RtemsTaskReqDelete_Post_RestartExtensions_Nop,
RtemsTaskReqDelete_Post_TerminateExtensions_Nop,
RtemsTaskReqDelete_Post_Dormant_No, RtemsTaskReqDelete_Post_Suspended_No,
@@ -2508,7 +2483,7 @@ RtemsTaskReqDelete_Entries[] = {
RtemsTaskReqDelete_Post_Timer_Inactive },
{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, RtemsTaskReqDelete_Post_Status_Ok,
RtemsTaskReqDelete_Post_FatalError_Nop, RtemsTaskReqDelete_Post_Zombie_No,
- RtemsTaskReqDelete_Post_RealPriority_Nop,
+ RtemsTaskReqDelete_Post_TaskPriority_Nop,
RtemsTaskReqDelete_Post_RestartExtensions_Nop,
RtemsTaskReqDelete_Post_TerminateExtensions_Nop,
RtemsTaskReqDelete_Post_Dormant_No, RtemsTaskReqDelete_Post_Suspended_No,
@@ -2519,7 +2494,7 @@ RtemsTaskReqDelete_Entries[] = {
RtemsTaskReqDelete_Post_Timer_Inactive },
{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, RtemsTaskReqDelete_Post_Status_Ok,
RtemsTaskReqDelete_Post_FatalError_Nop, RtemsTaskReqDelete_Post_Zombie_No,
- RtemsTaskReqDelete_Post_RealPriority_Nop,
+ RtemsTaskReqDelete_Post_TaskPriority_Nop,
RtemsTaskReqDelete_Post_RestartExtensions_Nop,
RtemsTaskReqDelete_Post_TerminateExtensions_Nop,
RtemsTaskReqDelete_Post_Dormant_No, RtemsTaskReqDelete_Post_Suspended_No,
@@ -2529,7 +2504,7 @@ RtemsTaskReqDelete_Entries[] = {
RtemsTaskReqDelete_Post_State_Blocked, RtemsTaskReqDelete_Post_Timer_Active },
{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, RtemsTaskReqDelete_Post_Status_Ok,
RtemsTaskReqDelete_Post_FatalError_Nop, RtemsTaskReqDelete_Post_Zombie_No,
- RtemsTaskReqDelete_Post_RealPriority_Nop,
+ RtemsTaskReqDelete_Post_TaskPriority_Nop,
RtemsTaskReqDelete_Post_RestartExtensions_Nop,
RtemsTaskReqDelete_Post_TerminateExtensions_Nop,
RtemsTaskReqDelete_Post_Dormant_No, RtemsTaskReqDelete_Post_Suspended_No,
@@ -2540,7 +2515,7 @@ RtemsTaskReqDelete_Entries[] = {
RtemsTaskReqDelete_Post_Timer_Inactive },
{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, RtemsTaskReqDelete_Post_Status_Ok,
RtemsTaskReqDelete_Post_FatalError_Nop, RtemsTaskReqDelete_Post_Zombie_No,
- RtemsTaskReqDelete_Post_RealPriority_Nop,
+ RtemsTaskReqDelete_Post_TaskPriority_Nop,
RtemsTaskReqDelete_Post_RestartExtensions_Nop,
RtemsTaskReqDelete_Post_TerminateExtensions_Nop,
RtemsTaskReqDelete_Post_Dormant_No, RtemsTaskReqDelete_Post_Suspended_No,
@@ -2551,7 +2526,7 @@ RtemsTaskReqDelete_Entries[] = {
RtemsTaskReqDelete_Post_Timer_Active },
{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, RtemsTaskReqDelete_Post_Status_Ok,
RtemsTaskReqDelete_Post_FatalError_Nop, RtemsTaskReqDelete_Post_Zombie_No,
- RtemsTaskReqDelete_Post_RealPriority_Nop,
+ RtemsTaskReqDelete_Post_TaskPriority_Nop,
RtemsTaskReqDelete_Post_RestartExtensions_Nop,
RtemsTaskReqDelete_Post_TerminateExtensions_Nop,
RtemsTaskReqDelete_Post_Dormant_No, RtemsTaskReqDelete_Post_Suspended_No,
@@ -2561,7 +2536,7 @@ RtemsTaskReqDelete_Entries[] = {
RtemsTaskReqDelete_Post_Timer_Inactive },
{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, RtemsTaskReqDelete_Post_Status_Ok,
RtemsTaskReqDelete_Post_FatalError_Nop, RtemsTaskReqDelete_Post_Zombie_No,
- RtemsTaskReqDelete_Post_RealPriority_Nop,
+ RtemsTaskReqDelete_Post_TaskPriority_Nop,
RtemsTaskReqDelete_Post_RestartExtensions_Nop,
RtemsTaskReqDelete_Post_TerminateExtensions_Nop,
RtemsTaskReqDelete_Post_Dormant_No, RtemsTaskReqDelete_Post_Suspended_No,
@@ -2572,7 +2547,7 @@ RtemsTaskReqDelete_Entries[] = {
RtemsTaskReqDelete_Post_Timer_Inactive },
{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, RtemsTaskReqDelete_Post_Status_Ok,
RtemsTaskReqDelete_Post_FatalError_Nop, RtemsTaskReqDelete_Post_Zombie_No,
- RtemsTaskReqDelete_Post_RealPriority_Nop,
+ RtemsTaskReqDelete_Post_TaskPriority_Nop,
RtemsTaskReqDelete_Post_RestartExtensions_Nop,
RtemsTaskReqDelete_Post_TerminateExtensions_Nop,
RtemsTaskReqDelete_Post_Dormant_No, RtemsTaskReqDelete_Post_Suspended_No,
@@ -2583,7 +2558,7 @@ RtemsTaskReqDelete_Entries[] = {
{ 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,
RtemsTaskReqDelete_Post_Status_CalledFromISR,
RtemsTaskReqDelete_Post_FatalError_Nop, RtemsTaskReqDelete_Post_Zombie_No,
- RtemsTaskReqDelete_Post_RealPriority_Nop,
+ RtemsTaskReqDelete_Post_TaskPriority_Nop,
RtemsTaskReqDelete_Post_RestartExtensions_Nop,
RtemsTaskReqDelete_Post_TerminateExtensions_Nop,
RtemsTaskReqDelete_Post_Dormant_No, RtemsTaskReqDelete_Post_Suspended_Yes,
@@ -2595,7 +2570,7 @@ RtemsTaskReqDelete_Entries[] = {
{ 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,
RtemsTaskReqDelete_Post_Status_CalledFromISR,
RtemsTaskReqDelete_Post_FatalError_Nop, RtemsTaskReqDelete_Post_Zombie_No,
- RtemsTaskReqDelete_Post_RealPriority_Nop,
+ RtemsTaskReqDelete_Post_TaskPriority_Nop,
RtemsTaskReqDelete_Post_RestartExtensions_Nop,
RtemsTaskReqDelete_Post_TerminateExtensions_Nop,
RtemsTaskReqDelete_Post_Dormant_No, RtemsTaskReqDelete_Post_Suspended_Yes,
@@ -2607,7 +2582,7 @@ RtemsTaskReqDelete_Entries[] = {
{ 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,
RtemsTaskReqDelete_Post_Status_CalledFromISR,
RtemsTaskReqDelete_Post_FatalError_Nop, RtemsTaskReqDelete_Post_Zombie_No,
- RtemsTaskReqDelete_Post_RealPriority_Nop,
+ RtemsTaskReqDelete_Post_TaskPriority_Nop,
RtemsTaskReqDelete_Post_RestartExtensions_Nop,
RtemsTaskReqDelete_Post_TerminateExtensions_Nop,
RtemsTaskReqDelete_Post_Dormant_No, RtemsTaskReqDelete_Post_Suspended_Yes,
@@ -2618,7 +2593,7 @@ RtemsTaskReqDelete_Entries[] = {
{ 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,
RtemsTaskReqDelete_Post_Status_CalledFromISR,
RtemsTaskReqDelete_Post_FatalError_Nop, RtemsTaskReqDelete_Post_Zombie_No,
- RtemsTaskReqDelete_Post_RealPriority_Nop,
+ RtemsTaskReqDelete_Post_TaskPriority_Nop,
RtemsTaskReqDelete_Post_RestartExtensions_Nop,
RtemsTaskReqDelete_Post_TerminateExtensions_Nop,
RtemsTaskReqDelete_Post_Dormant_No, RtemsTaskReqDelete_Post_Suspended_Yes,
@@ -2630,7 +2605,7 @@ RtemsTaskReqDelete_Entries[] = {
{ 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,
RtemsTaskReqDelete_Post_Status_CalledFromISR,
RtemsTaskReqDelete_Post_FatalError_Nop, RtemsTaskReqDelete_Post_Zombie_No,
- RtemsTaskReqDelete_Post_RealPriority_Nop,
+ RtemsTaskReqDelete_Post_TaskPriority_Nop,
RtemsTaskReqDelete_Post_RestartExtensions_Nop,
RtemsTaskReqDelete_Post_TerminateExtensions_Nop,
RtemsTaskReqDelete_Post_Dormant_No, RtemsTaskReqDelete_Post_Suspended_Yes,
@@ -2641,7 +2616,7 @@ RtemsTaskReqDelete_Entries[] = {
{ 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,
RtemsTaskReqDelete_Post_Status_CalledFromISR,
RtemsTaskReqDelete_Post_FatalError_Nop, RtemsTaskReqDelete_Post_Zombie_No,
- RtemsTaskReqDelete_Post_RealPriority_Nop,
+ RtemsTaskReqDelete_Post_TaskPriority_Nop,
RtemsTaskReqDelete_Post_RestartExtensions_Nop,
RtemsTaskReqDelete_Post_TerminateExtensions_Nop,
RtemsTaskReqDelete_Post_Dormant_No, RtemsTaskReqDelete_Post_Suspended_Yes,
@@ -2653,7 +2628,7 @@ RtemsTaskReqDelete_Entries[] = {
{ 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,
RtemsTaskReqDelete_Post_Status_CalledFromISR,
RtemsTaskReqDelete_Post_FatalError_Nop, RtemsTaskReqDelete_Post_Zombie_No,
- RtemsTaskReqDelete_Post_RealPriority_Nop,
+ RtemsTaskReqDelete_Post_TaskPriority_Nop,
RtemsTaskReqDelete_Post_RestartExtensions_Nop,
RtemsTaskReqDelete_Post_TerminateExtensions_Nop,
RtemsTaskReqDelete_Post_Dormant_No, RtemsTaskReqDelete_Post_Suspended_Yes,
@@ -2665,7 +2640,7 @@ RtemsTaskReqDelete_Entries[] = {
{ 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,
RtemsTaskReqDelete_Post_Status_CalledFromISR,
RtemsTaskReqDelete_Post_FatalError_Nop, RtemsTaskReqDelete_Post_Zombie_No,
- RtemsTaskReqDelete_Post_RealPriority_Nop,
+ RtemsTaskReqDelete_Post_TaskPriority_Nop,
RtemsTaskReqDelete_Post_RestartExtensions_Nop,
RtemsTaskReqDelete_Post_TerminateExtensions_Nop,
RtemsTaskReqDelete_Post_Dormant_No, RtemsTaskReqDelete_Post_Suspended_Yes,
@@ -2676,7 +2651,7 @@ RtemsTaskReqDelete_Entries[] = {
{ 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,
RtemsTaskReqDelete_Post_Status_CalledFromISR,
RtemsTaskReqDelete_Post_FatalError_Nop, RtemsTaskReqDelete_Post_Zombie_No,
- RtemsTaskReqDelete_Post_RealPriority_Nop,
+ RtemsTaskReqDelete_Post_TaskPriority_Nop,
RtemsTaskReqDelete_Post_RestartExtensions_Nop,
RtemsTaskReqDelete_Post_TerminateExtensions_Nop,
RtemsTaskReqDelete_Post_Dormant_No, RtemsTaskReqDelete_Post_Suspended_Yes,
@@ -2688,7 +2663,7 @@ RtemsTaskReqDelete_Entries[] = {
{ 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,
RtemsTaskReqDelete_Post_Status_CalledFromISR,
RtemsTaskReqDelete_Post_FatalError_Nop, RtemsTaskReqDelete_Post_Zombie_No,
- RtemsTaskReqDelete_Post_RealPriority_Nop,
+ RtemsTaskReqDelete_Post_TaskPriority_Nop,
RtemsTaskReqDelete_Post_RestartExtensions_Nop,
RtemsTaskReqDelete_Post_TerminateExtensions_Nop,
RtemsTaskReqDelete_Post_Dormant_No, RtemsTaskReqDelete_Post_Suspended_Yes,
@@ -2699,7 +2674,7 @@ RtemsTaskReqDelete_Entries[] = {
{ 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,
RtemsTaskReqDelete_Post_Status_CalledFromISR,
RtemsTaskReqDelete_Post_FatalError_Nop, RtemsTaskReqDelete_Post_Zombie_No,
- RtemsTaskReqDelete_Post_RealPriority_Nop,
+ RtemsTaskReqDelete_Post_TaskPriority_Nop,
RtemsTaskReqDelete_Post_RestartExtensions_Nop,
RtemsTaskReqDelete_Post_TerminateExtensions_Nop,
RtemsTaskReqDelete_Post_Dormant_No, RtemsTaskReqDelete_Post_Suspended_Yes,
@@ -2711,7 +2686,7 @@ RtemsTaskReqDelete_Entries[] = {
{ 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,
RtemsTaskReqDelete_Post_Status_CalledFromISR,
RtemsTaskReqDelete_Post_FatalError_Nop, RtemsTaskReqDelete_Post_Zombie_No,
- RtemsTaskReqDelete_Post_RealPriority_Nop,
+ RtemsTaskReqDelete_Post_TaskPriority_Nop,
RtemsTaskReqDelete_Post_RestartExtensions_Nop,
RtemsTaskReqDelete_Post_TerminateExtensions_Nop,
RtemsTaskReqDelete_Post_Dormant_No, RtemsTaskReqDelete_Post_Suspended_Yes,
@@ -2723,7 +2698,7 @@ RtemsTaskReqDelete_Entries[] = {
{ 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,
RtemsTaskReqDelete_Post_Status_CalledFromISR,
RtemsTaskReqDelete_Post_FatalError_Nop, RtemsTaskReqDelete_Post_Zombie_No,
- RtemsTaskReqDelete_Post_RealPriority_Nop,
+ RtemsTaskReqDelete_Post_TaskPriority_Nop,
RtemsTaskReqDelete_Post_RestartExtensions_Nop,
RtemsTaskReqDelete_Post_TerminateExtensions_Nop,
RtemsTaskReqDelete_Post_Dormant_No, RtemsTaskReqDelete_Post_Suspended_Yes,
@@ -2734,7 +2709,7 @@ RtemsTaskReqDelete_Entries[] = {
{ 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,
RtemsTaskReqDelete_Post_Status_CalledFromISR,
RtemsTaskReqDelete_Post_FatalError_Nop, RtemsTaskReqDelete_Post_Zombie_No,
- RtemsTaskReqDelete_Post_RealPriority_Nop,
+ RtemsTaskReqDelete_Post_TaskPriority_Nop,
RtemsTaskReqDelete_Post_RestartExtensions_Nop,
RtemsTaskReqDelete_Post_TerminateExtensions_Nop,
RtemsTaskReqDelete_Post_Dormant_No, RtemsTaskReqDelete_Post_Suspended_Yes,
@@ -2746,7 +2721,7 @@ RtemsTaskReqDelete_Entries[] = {
{ 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,
RtemsTaskReqDelete_Post_Status_CalledFromISR,
RtemsTaskReqDelete_Post_FatalError_Nop, RtemsTaskReqDelete_Post_Zombie_No,
- RtemsTaskReqDelete_Post_RealPriority_Nop,
+ RtemsTaskReqDelete_Post_TaskPriority_Nop,
RtemsTaskReqDelete_Post_RestartExtensions_Nop,
RtemsTaskReqDelete_Post_TerminateExtensions_Nop,
RtemsTaskReqDelete_Post_Dormant_No, RtemsTaskReqDelete_Post_Suspended_Yes,
@@ -2757,7 +2732,7 @@ RtemsTaskReqDelete_Entries[] = {
{ 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,
RtemsTaskReqDelete_Post_Status_CalledFromISR,
RtemsTaskReqDelete_Post_FatalError_Nop, RtemsTaskReqDelete_Post_Zombie_No,
- RtemsTaskReqDelete_Post_RealPriority_Nop,
+ RtemsTaskReqDelete_Post_TaskPriority_Nop,
RtemsTaskReqDelete_Post_RestartExtensions_Nop,
RtemsTaskReqDelete_Post_TerminateExtensions_Nop,
RtemsTaskReqDelete_Post_Dormant_No, RtemsTaskReqDelete_Post_Suspended_Yes,
@@ -2769,7 +2744,7 @@ RtemsTaskReqDelete_Entries[] = {
{ 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,
RtemsTaskReqDelete_Post_Status_CalledFromISR,
RtemsTaskReqDelete_Post_FatalError_Nop, RtemsTaskReqDelete_Post_Zombie_No,
- RtemsTaskReqDelete_Post_RealPriority_Nop,
+ RtemsTaskReqDelete_Post_TaskPriority_Nop,
RtemsTaskReqDelete_Post_RestartExtensions_Nop,
RtemsTaskReqDelete_Post_TerminateExtensions_Nop,
RtemsTaskReqDelete_Post_Dormant_No, RtemsTaskReqDelete_Post_Suspended_Yes,
@@ -2781,7 +2756,7 @@ RtemsTaskReqDelete_Entries[] = {
{ 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,
RtemsTaskReqDelete_Post_Status_CalledFromISR,
RtemsTaskReqDelete_Post_FatalError_Nop, RtemsTaskReqDelete_Post_Zombie_No,
- RtemsTaskReqDelete_Post_RealPriority_Nop,
+ RtemsTaskReqDelete_Post_TaskPriority_Nop,
RtemsTaskReqDelete_Post_RestartExtensions_Nop,
RtemsTaskReqDelete_Post_TerminateExtensions_Nop,
RtemsTaskReqDelete_Post_Dormant_No, RtemsTaskReqDelete_Post_Suspended_Yes,
@@ -2792,7 +2767,7 @@ RtemsTaskReqDelete_Entries[] = {
{ 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,
RtemsTaskReqDelete_Post_Status_CalledFromISR,
RtemsTaskReqDelete_Post_FatalError_Nop, RtemsTaskReqDelete_Post_Zombie_No,
- RtemsTaskReqDelete_Post_RealPriority_Nop,
+ RtemsTaskReqDelete_Post_TaskPriority_Nop,
RtemsTaskReqDelete_Post_RestartExtensions_Nop,
RtemsTaskReqDelete_Post_TerminateExtensions_Nop,
RtemsTaskReqDelete_Post_Dormant_No, RtemsTaskReqDelete_Post_Suspended_Yes,
@@ -2804,7 +2779,7 @@ RtemsTaskReqDelete_Entries[] = {
{ 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,
RtemsTaskReqDelete_Post_Status_CalledFromISR,
RtemsTaskReqDelete_Post_FatalError_Nop, RtemsTaskReqDelete_Post_Zombie_No,
- RtemsTaskReqDelete_Post_RealPriority_Nop,
+ RtemsTaskReqDelete_Post_TaskPriority_Nop,
RtemsTaskReqDelete_Post_RestartExtensions_Nop,
RtemsTaskReqDelete_Post_TerminateExtensions_Nop,
RtemsTaskReqDelete_Post_Dormant_No, RtemsTaskReqDelete_Post_Suspended_Yes,
@@ -2815,7 +2790,7 @@ RtemsTaskReqDelete_Entries[] = {
{ 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,
RtemsTaskReqDelete_Post_Status_CalledFromISR,
RtemsTaskReqDelete_Post_FatalError_Nop, RtemsTaskReqDelete_Post_Zombie_No,
- RtemsTaskReqDelete_Post_RealPriority_Nop,
+ RtemsTaskReqDelete_Post_TaskPriority_Nop,
RtemsTaskReqDelete_Post_RestartExtensions_Nop,
RtemsTaskReqDelete_Post_TerminateExtensions_Nop,
RtemsTaskReqDelete_Post_Dormant_No, RtemsTaskReqDelete_Post_Suspended_Yes,
@@ -2827,7 +2802,7 @@ RtemsTaskReqDelete_Entries[] = {
{ 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,
RtemsTaskReqDelete_Post_Status_CalledFromISR,
RtemsTaskReqDelete_Post_FatalError_Nop, RtemsTaskReqDelete_Post_Zombie_No,
- RtemsTaskReqDelete_Post_RealPriority_Nop,
+ RtemsTaskReqDelete_Post_TaskPriority_Nop,
RtemsTaskReqDelete_Post_RestartExtensions_Nop,
RtemsTaskReqDelete_Post_TerminateExtensions_Nop,
RtemsTaskReqDelete_Post_Dormant_No, RtemsTaskReqDelete_Post_Suspended_Yes,
@@ -2839,7 +2814,7 @@ RtemsTaskReqDelete_Entries[] = {
{ 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,
RtemsTaskReqDelete_Post_Status_CalledFromISR,
RtemsTaskReqDelete_Post_FatalError_Nop, RtemsTaskReqDelete_Post_Zombie_No,
- RtemsTaskReqDelete_Post_RealPriority_Nop,
+ RtemsTaskReqDelete_Post_TaskPriority_Nop,
RtemsTaskReqDelete_Post_RestartExtensions_Nop,
RtemsTaskReqDelete_Post_TerminateExtensions_Nop,
RtemsTaskReqDelete_Post_Dormant_No, RtemsTaskReqDelete_Post_Suspended_Yes,
@@ -2850,7 +2825,7 @@ RtemsTaskReqDelete_Entries[] = {
{ 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,
RtemsTaskReqDelete_Post_Status_CalledFromISR,
RtemsTaskReqDelete_Post_FatalError_Nop, RtemsTaskReqDelete_Post_Zombie_No,
- RtemsTaskReqDelete_Post_RealPriority_Nop,
+ RtemsTaskReqDelete_Post_TaskPriority_Nop,
RtemsTaskReqDelete_Post_RestartExtensions_Nop,
RtemsTaskReqDelete_Post_TerminateExtensions_Nop,
RtemsTaskReqDelete_Post_Dormant_No, RtemsTaskReqDelete_Post_Suspended_Yes,
@@ -2862,7 +2837,7 @@ RtemsTaskReqDelete_Entries[] = {
{ 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,
RtemsTaskReqDelete_Post_Status_CalledFromISR,
RtemsTaskReqDelete_Post_FatalError_Nop, RtemsTaskReqDelete_Post_Zombie_No,
- RtemsTaskReqDelete_Post_RealPriority_Nop,
+ RtemsTaskReqDelete_Post_TaskPriority_Nop,
RtemsTaskReqDelete_Post_RestartExtensions_Nop,
RtemsTaskReqDelete_Post_TerminateExtensions_Nop,
RtemsTaskReqDelete_Post_Dormant_No, RtemsTaskReqDelete_Post_Suspended_Yes,
@@ -2873,7 +2848,7 @@ RtemsTaskReqDelete_Entries[] = {
{ 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,
RtemsTaskReqDelete_Post_Status_CalledFromISR,
RtemsTaskReqDelete_Post_FatalError_Nop, RtemsTaskReqDelete_Post_Zombie_No,
- RtemsTaskReqDelete_Post_RealPriority_Nop,
+ RtemsTaskReqDelete_Post_TaskPriority_Nop,
RtemsTaskReqDelete_Post_RestartExtensions_Nop,
RtemsTaskReqDelete_Post_TerminateExtensions_Nop,
RtemsTaskReqDelete_Post_Dormant_No, RtemsTaskReqDelete_Post_Suspended_Yes,
@@ -2885,7 +2860,7 @@ RtemsTaskReqDelete_Entries[] = {
{ 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,
RtemsTaskReqDelete_Post_Status_CalledFromISR,
RtemsTaskReqDelete_Post_FatalError_Nop, RtemsTaskReqDelete_Post_Zombie_No,
- RtemsTaskReqDelete_Post_RealPriority_Nop,
+ RtemsTaskReqDelete_Post_TaskPriority_Nop,
RtemsTaskReqDelete_Post_RestartExtensions_Nop,
RtemsTaskReqDelete_Post_TerminateExtensions_Nop,
RtemsTaskReqDelete_Post_Dormant_No, RtemsTaskReqDelete_Post_Suspended_Yes,
@@ -2897,7 +2872,7 @@ RtemsTaskReqDelete_Entries[] = {
{ 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,
RtemsTaskReqDelete_Post_Status_CalledFromISR,
RtemsTaskReqDelete_Post_FatalError_Nop, RtemsTaskReqDelete_Post_Zombie_No,
- RtemsTaskReqDelete_Post_RealPriority_Nop,
+ RtemsTaskReqDelete_Post_TaskPriority_Nop,
RtemsTaskReqDelete_Post_RestartExtensions_Nop,
RtemsTaskReqDelete_Post_TerminateExtensions_Nop,
RtemsTaskReqDelete_Post_Dormant_No, RtemsTaskReqDelete_Post_Suspended_Yes,
@@ -2908,7 +2883,7 @@ RtemsTaskReqDelete_Entries[] = {
{ 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,
RtemsTaskReqDelete_Post_Status_CalledFromISR,
RtemsTaskReqDelete_Post_FatalError_Nop, RtemsTaskReqDelete_Post_Zombie_No,
- RtemsTaskReqDelete_Post_RealPriority_Nop,
+ RtemsTaskReqDelete_Post_TaskPriority_Nop,
RtemsTaskReqDelete_Post_RestartExtensions_Nop,
RtemsTaskReqDelete_Post_TerminateExtensions_Nop,
RtemsTaskReqDelete_Post_Dormant_No, RtemsTaskReqDelete_Post_Suspended_Yes,
@@ -2920,7 +2895,7 @@ RtemsTaskReqDelete_Entries[] = {
{ 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,
RtemsTaskReqDelete_Post_Status_CalledFromISR,
RtemsTaskReqDelete_Post_FatalError_Nop, RtemsTaskReqDelete_Post_Zombie_No,
- RtemsTaskReqDelete_Post_RealPriority_Nop,
+ RtemsTaskReqDelete_Post_TaskPriority_Nop,
RtemsTaskReqDelete_Post_RestartExtensions_Nop,
RtemsTaskReqDelete_Post_TerminateExtensions_Nop,
RtemsTaskReqDelete_Post_Dormant_No, RtemsTaskReqDelete_Post_Suspended_Yes,
@@ -2931,7 +2906,7 @@ RtemsTaskReqDelete_Entries[] = {
{ 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,
RtemsTaskReqDelete_Post_Status_CalledFromISR,
RtemsTaskReqDelete_Post_FatalError_Nop, RtemsTaskReqDelete_Post_Zombie_No,
- RtemsTaskReqDelete_Post_RealPriority_Nop,
+ RtemsTaskReqDelete_Post_TaskPriority_Nop,
RtemsTaskReqDelete_Post_RestartExtensions_Nop,
RtemsTaskReqDelete_Post_TerminateExtensions_Nop,
RtemsTaskReqDelete_Post_Dormant_No, RtemsTaskReqDelete_Post_Suspended_Yes,
@@ -2943,7 +2918,7 @@ RtemsTaskReqDelete_Entries[] = {
{ 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,
RtemsTaskReqDelete_Post_Status_CalledFromISR,
RtemsTaskReqDelete_Post_FatalError_Nop, RtemsTaskReqDelete_Post_Zombie_No,
- RtemsTaskReqDelete_Post_RealPriority_Nop,
+ RtemsTaskReqDelete_Post_TaskPriority_Nop,
RtemsTaskReqDelete_Post_RestartExtensions_Nop,
RtemsTaskReqDelete_Post_TerminateExtensions_Nop,
RtemsTaskReqDelete_Post_Dormant_No, RtemsTaskReqDelete_Post_Suspended_Yes,
@@ -2955,7 +2930,7 @@ RtemsTaskReqDelete_Entries[] = {
{ 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,
RtemsTaskReqDelete_Post_Status_CalledFromISR,
RtemsTaskReqDelete_Post_FatalError_Nop, RtemsTaskReqDelete_Post_Zombie_No,
- RtemsTaskReqDelete_Post_RealPriority_Nop,
+ RtemsTaskReqDelete_Post_TaskPriority_Nop,
RtemsTaskReqDelete_Post_RestartExtensions_Nop,
RtemsTaskReqDelete_Post_TerminateExtensions_Nop,
RtemsTaskReqDelete_Post_Dormant_No, RtemsTaskReqDelete_Post_Suspended_Yes,
@@ -2966,7 +2941,7 @@ RtemsTaskReqDelete_Entries[] = {
{ 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,
RtemsTaskReqDelete_Post_Status_CalledFromISR,
RtemsTaskReqDelete_Post_FatalError_Nop, RtemsTaskReqDelete_Post_Zombie_No,
- RtemsTaskReqDelete_Post_RealPriority_Nop,
+ RtemsTaskReqDelete_Post_TaskPriority_Nop,
RtemsTaskReqDelete_Post_RestartExtensions_Nop,
RtemsTaskReqDelete_Post_TerminateExtensions_Nop,
RtemsTaskReqDelete_Post_Dormant_No, RtemsTaskReqDelete_Post_Suspended_Yes,
@@ -2978,7 +2953,7 @@ RtemsTaskReqDelete_Entries[] = {
{ 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,
RtemsTaskReqDelete_Post_Status_CalledFromISR,
RtemsTaskReqDelete_Post_FatalError_Nop, RtemsTaskReqDelete_Post_Zombie_No,
- RtemsTaskReqDelete_Post_RealPriority_Nop,
+ RtemsTaskReqDelete_Post_TaskPriority_Nop,
RtemsTaskReqDelete_Post_RestartExtensions_Nop,
RtemsTaskReqDelete_Post_TerminateExtensions_Nop,
RtemsTaskReqDelete_Post_Dormant_No, RtemsTaskReqDelete_Post_Suspended_Yes,
@@ -2989,7 +2964,7 @@ RtemsTaskReqDelete_Entries[] = {
{ 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,
RtemsTaskReqDelete_Post_Status_CalledFromISR,
RtemsTaskReqDelete_Post_FatalError_Nop, RtemsTaskReqDelete_Post_Zombie_No,
- RtemsTaskReqDelete_Post_RealPriority_Nop,
+ RtemsTaskReqDelete_Post_TaskPriority_Nop,
RtemsTaskReqDelete_Post_RestartExtensions_Nop,
RtemsTaskReqDelete_Post_TerminateExtensions_Nop,
RtemsTaskReqDelete_Post_Dormant_No, RtemsTaskReqDelete_Post_Suspended_Yes,
@@ -3001,7 +2976,7 @@ RtemsTaskReqDelete_Entries[] = {
{ 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,
RtemsTaskReqDelete_Post_Status_CalledFromISR,
RtemsTaskReqDelete_Post_FatalError_Nop, RtemsTaskReqDelete_Post_Zombie_No,
- RtemsTaskReqDelete_Post_RealPriority_Nop,
+ RtemsTaskReqDelete_Post_TaskPriority_Nop,
RtemsTaskReqDelete_Post_RestartExtensions_Nop,
RtemsTaskReqDelete_Post_TerminateExtensions_Nop,
RtemsTaskReqDelete_Post_Dormant_No, RtemsTaskReqDelete_Post_Suspended_Yes,
@@ -3013,7 +2988,7 @@ RtemsTaskReqDelete_Entries[] = {
{ 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,
RtemsTaskReqDelete_Post_Status_CalledFromISR,
RtemsTaskReqDelete_Post_FatalError_Nop, RtemsTaskReqDelete_Post_Zombie_No,
- RtemsTaskReqDelete_Post_RealPriority_Nop,
+ RtemsTaskReqDelete_Post_TaskPriority_Nop,
RtemsTaskReqDelete_Post_RestartExtensions_Nop,
RtemsTaskReqDelete_Post_TerminateExtensions_Nop,
RtemsTaskReqDelete_Post_Dormant_No, RtemsTaskReqDelete_Post_Suspended_Yes,
@@ -3024,7 +2999,7 @@ RtemsTaskReqDelete_Entries[] = {
{ 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,
RtemsTaskReqDelete_Post_Status_CalledFromISR,
RtemsTaskReqDelete_Post_FatalError_Nop, RtemsTaskReqDelete_Post_Zombie_No,
- RtemsTaskReqDelete_Post_RealPriority_Nop,
+ RtemsTaskReqDelete_Post_TaskPriority_Nop,
RtemsTaskReqDelete_Post_RestartExtensions_Nop,
RtemsTaskReqDelete_Post_TerminateExtensions_Nop,
RtemsTaskReqDelete_Post_Dormant_No, RtemsTaskReqDelete_Post_Suspended_Yes,
@@ -3036,7 +3011,7 @@ RtemsTaskReqDelete_Entries[] = {
{ 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,
RtemsTaskReqDelete_Post_Status_CalledFromISR,
RtemsTaskReqDelete_Post_FatalError_Nop, RtemsTaskReqDelete_Post_Zombie_No,
- RtemsTaskReqDelete_Post_RealPriority_Nop,
+ RtemsTaskReqDelete_Post_TaskPriority_Nop,
RtemsTaskReqDelete_Post_RestartExtensions_Nop,
RtemsTaskReqDelete_Post_TerminateExtensions_Nop,
RtemsTaskReqDelete_Post_Dormant_No, RtemsTaskReqDelete_Post_Suspended_Yes,
@@ -3047,7 +3022,7 @@ RtemsTaskReqDelete_Entries[] = {
{ 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,
RtemsTaskReqDelete_Post_Status_CalledFromISR,
RtemsTaskReqDelete_Post_FatalError_Nop, RtemsTaskReqDelete_Post_Zombie_No,
- RtemsTaskReqDelete_Post_RealPriority_Nop,
+ RtemsTaskReqDelete_Post_TaskPriority_Nop,
RtemsTaskReqDelete_Post_RestartExtensions_Nop,
RtemsTaskReqDelete_Post_TerminateExtensions_Nop,
RtemsTaskReqDelete_Post_Dormant_No, RtemsTaskReqDelete_Post_Suspended_No,
@@ -3059,7 +3034,7 @@ RtemsTaskReqDelete_Entries[] = {
{ 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,
RtemsTaskReqDelete_Post_Status_CalledFromISR,
RtemsTaskReqDelete_Post_FatalError_Nop, RtemsTaskReqDelete_Post_Zombie_No,
- RtemsTaskReqDelete_Post_RealPriority_Nop,
+ RtemsTaskReqDelete_Post_TaskPriority_Nop,
RtemsTaskReqDelete_Post_RestartExtensions_Nop,
RtemsTaskReqDelete_Post_TerminateExtensions_Nop,
RtemsTaskReqDelete_Post_Dormant_No, RtemsTaskReqDelete_Post_Suspended_No,
@@ -3071,7 +3046,7 @@ RtemsTaskReqDelete_Entries[] = {
{ 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,
RtemsTaskReqDelete_Post_Status_CalledFromISR,
RtemsTaskReqDelete_Post_FatalError_Nop, RtemsTaskReqDelete_Post_Zombie_No,
- RtemsTaskReqDelete_Post_RealPriority_Nop,
+ RtemsTaskReqDelete_Post_TaskPriority_Nop,
RtemsTaskReqDelete_Post_RestartExtensions_Nop,
RtemsTaskReqDelete_Post_TerminateExtensions_Nop,
RtemsTaskReqDelete_Post_Dormant_No, RtemsTaskReqDelete_Post_Suspended_No,
@@ -3082,7 +3057,7 @@ RtemsTaskReqDelete_Entries[] = {
{ 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,
RtemsTaskReqDelete_Post_Status_CalledFromISR,
RtemsTaskReqDelete_Post_FatalError_Nop, RtemsTaskReqDelete_Post_Zombie_No,
- RtemsTaskReqDelete_Post_RealPriority_Nop,
+ RtemsTaskReqDelete_Post_TaskPriority_Nop,
RtemsTaskReqDelete_Post_RestartExtensions_Nop,
RtemsTaskReqDelete_Post_TerminateExtensions_Nop,
RtemsTaskReqDelete_Post_Dormant_No, RtemsTaskReqDelete_Post_Suspended_No,
@@ -3094,7 +3069,7 @@ RtemsTaskReqDelete_Entries[] = {
{ 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,
RtemsTaskReqDelete_Post_Status_CalledFromISR,
RtemsTaskReqDelete_Post_FatalError_Nop, RtemsTaskReqDelete_Post_Zombie_No,
- RtemsTaskReqDelete_Post_RealPriority_Nop,
+ RtemsTaskReqDelete_Post_TaskPriority_Nop,
RtemsTaskReqDelete_Post_RestartExtensions_Nop,
RtemsTaskReqDelete_Post_TerminateExtensions_Nop,
RtemsTaskReqDelete_Post_Dormant_No, RtemsTaskReqDelete_Post_Suspended_No,
@@ -3105,7 +3080,7 @@ RtemsTaskReqDelete_Entries[] = {
{ 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,
RtemsTaskReqDelete_Post_Status_CalledFromISR,
RtemsTaskReqDelete_Post_FatalError_Nop, RtemsTaskReqDelete_Post_Zombie_No,
- RtemsTaskReqDelete_Post_RealPriority_Nop,
+ RtemsTaskReqDelete_Post_TaskPriority_Nop,
RtemsTaskReqDelete_Post_RestartExtensions_Nop,
RtemsTaskReqDelete_Post_TerminateExtensions_Nop,
RtemsTaskReqDelete_Post_Dormant_No, RtemsTaskReqDelete_Post_Suspended_No,
@@ -3117,7 +3092,7 @@ RtemsTaskReqDelete_Entries[] = {
{ 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,
RtemsTaskReqDelete_Post_Status_CalledFromISR,
RtemsTaskReqDelete_Post_FatalError_Nop, RtemsTaskReqDelete_Post_Zombie_No,
- RtemsTaskReqDelete_Post_RealPriority_Nop,
+ RtemsTaskReqDelete_Post_TaskPriority_Nop,
RtemsTaskReqDelete_Post_RestartExtensions_Nop,
RtemsTaskReqDelete_Post_TerminateExtensions_Nop,
RtemsTaskReqDelete_Post_Dormant_No, RtemsTaskReqDelete_Post_Suspended_No,
@@ -3129,7 +3104,7 @@ RtemsTaskReqDelete_Entries[] = {
{ 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,
RtemsTaskReqDelete_Post_Status_CalledFromISR,
RtemsTaskReqDelete_Post_FatalError_Nop, RtemsTaskReqDelete_Post_Zombie_No,
- RtemsTaskReqDelete_Post_RealPriority_Nop,
+ RtemsTaskReqDelete_Post_TaskPriority_Nop,
RtemsTaskReqDelete_Post_RestartExtensions_Nop,
RtemsTaskReqDelete_Post_TerminateExtensions_Nop,
RtemsTaskReqDelete_Post_Dormant_No, RtemsTaskReqDelete_Post_Suspended_No,
@@ -3140,7 +3115,7 @@ RtemsTaskReqDelete_Entries[] = {
{ 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,
RtemsTaskReqDelete_Post_Status_CalledFromISR,
RtemsTaskReqDelete_Post_FatalError_Nop, RtemsTaskReqDelete_Post_Zombie_No,
- RtemsTaskReqDelete_Post_RealPriority_Nop,
+ RtemsTaskReqDelete_Post_TaskPriority_Nop,
RtemsTaskReqDelete_Post_RestartExtensions_Nop,
RtemsTaskReqDelete_Post_TerminateExtensions_Nop,
RtemsTaskReqDelete_Post_Dormant_No, RtemsTaskReqDelete_Post_Suspended_No,
@@ -3152,7 +3127,7 @@ RtemsTaskReqDelete_Entries[] = {
{ 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,
RtemsTaskReqDelete_Post_Status_CalledFromISR,
RtemsTaskReqDelete_Post_FatalError_Nop, RtemsTaskReqDelete_Post_Zombie_No,
- RtemsTaskReqDelete_Post_RealPriority_Nop,
+ RtemsTaskReqDelete_Post_TaskPriority_Nop,
RtemsTaskReqDelete_Post_RestartExtensions_Nop,
RtemsTaskReqDelete_Post_TerminateExtensions_Nop,
RtemsTaskReqDelete_Post_Dormant_No, RtemsTaskReqDelete_Post_Suspended_No,
@@ -3163,7 +3138,7 @@ RtemsTaskReqDelete_Entries[] = {
{ 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,
RtemsTaskReqDelete_Post_Status_CalledFromISR,
RtemsTaskReqDelete_Post_FatalError_Nop, RtemsTaskReqDelete_Post_Zombie_No,
- RtemsTaskReqDelete_Post_RealPriority_Nop,
+ RtemsTaskReqDelete_Post_TaskPriority_Nop,
RtemsTaskReqDelete_Post_RestartExtensions_Nop,
RtemsTaskReqDelete_Post_TerminateExtensions_Nop,
RtemsTaskReqDelete_Post_Dormant_No, RtemsTaskReqDelete_Post_Suspended_No,
@@ -3175,7 +3150,7 @@ RtemsTaskReqDelete_Entries[] = {
{ 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,
RtemsTaskReqDelete_Post_Status_CalledFromISR,
RtemsTaskReqDelete_Post_FatalError_Nop, RtemsTaskReqDelete_Post_Zombie_No,
- RtemsTaskReqDelete_Post_RealPriority_Nop,
+ RtemsTaskReqDelete_Post_TaskPriority_Nop,
RtemsTaskReqDelete_Post_RestartExtensions_Nop,
RtemsTaskReqDelete_Post_TerminateExtensions_Nop,
RtemsTaskReqDelete_Post_Dormant_No, RtemsTaskReqDelete_Post_Suspended_No,
@@ -3187,7 +3162,7 @@ RtemsTaskReqDelete_Entries[] = {
{ 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,
RtemsTaskReqDelete_Post_Status_CalledFromISR,
RtemsTaskReqDelete_Post_FatalError_Nop, RtemsTaskReqDelete_Post_Zombie_No,
- RtemsTaskReqDelete_Post_RealPriority_Nop,
+ RtemsTaskReqDelete_Post_TaskPriority_Nop,
RtemsTaskReqDelete_Post_RestartExtensions_Nop,
RtemsTaskReqDelete_Post_TerminateExtensions_Nop,
RtemsTaskReqDelete_Post_Dormant_No, RtemsTaskReqDelete_Post_Suspended_No,
@@ -3198,7 +3173,7 @@ RtemsTaskReqDelete_Entries[] = {
{ 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,
RtemsTaskReqDelete_Post_Status_CalledFromISR,
RtemsTaskReqDelete_Post_FatalError_Nop, RtemsTaskReqDelete_Post_Zombie_No,
- RtemsTaskReqDelete_Post_RealPriority_Nop,
+ RtemsTaskReqDelete_Post_TaskPriority_Nop,
RtemsTaskReqDelete_Post_RestartExtensions_Nop,
RtemsTaskReqDelete_Post_TerminateExtensions_Nop,
RtemsTaskReqDelete_Post_Dormant_No, RtemsTaskReqDelete_Post_Suspended_No,
@@ -3210,7 +3185,7 @@ RtemsTaskReqDelete_Entries[] = {
{ 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,
RtemsTaskReqDelete_Post_Status_CalledFromISR,
RtemsTaskReqDelete_Post_FatalError_Nop, RtemsTaskReqDelete_Post_Zombie_No,
- RtemsTaskReqDelete_Post_RealPriority_Nop,
+ RtemsTaskReqDelete_Post_TaskPriority_Nop,
RtemsTaskReqDelete_Post_RestartExtensions_Nop,
RtemsTaskReqDelete_Post_TerminateExtensions_Nop,
RtemsTaskReqDelete_Post_Dormant_No, RtemsTaskReqDelete_Post_Suspended_No,
@@ -3221,7 +3196,7 @@ RtemsTaskReqDelete_Entries[] = {
{ 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,
RtemsTaskReqDelete_Post_Status_CalledFromISR,
RtemsTaskReqDelete_Post_FatalError_Nop, RtemsTaskReqDelete_Post_Zombie_No,
- RtemsTaskReqDelete_Post_RealPriority_Nop,
+ RtemsTaskReqDelete_Post_TaskPriority_Nop,
RtemsTaskReqDelete_Post_RestartExtensions_Nop,
RtemsTaskReqDelete_Post_TerminateExtensions_Nop,
RtemsTaskReqDelete_Post_Dormant_No, RtemsTaskReqDelete_Post_Suspended_No,
@@ -3233,7 +3208,7 @@ RtemsTaskReqDelete_Entries[] = {
{ 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,
RtemsTaskReqDelete_Post_Status_CalledFromISR,
RtemsTaskReqDelete_Post_FatalError_Nop, RtemsTaskReqDelete_Post_Zombie_No,
- RtemsTaskReqDelete_Post_RealPriority_Nop,
+ RtemsTaskReqDelete_Post_TaskPriority_Nop,
RtemsTaskReqDelete_Post_RestartExtensions_Nop,
RtemsTaskReqDelete_Post_TerminateExtensions_Nop,
RtemsTaskReqDelete_Post_Dormant_No, RtemsTaskReqDelete_Post_Suspended_No,
@@ -3245,7 +3220,7 @@ RtemsTaskReqDelete_Entries[] = {
{ 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,
RtemsTaskReqDelete_Post_Status_CalledFromISR,
RtemsTaskReqDelete_Post_FatalError_Nop, RtemsTaskReqDelete_Post_Zombie_No,
- RtemsTaskReqDelete_Post_RealPriority_Nop,
+ RtemsTaskReqDelete_Post_TaskPriority_Nop,
RtemsTaskReqDelete_Post_RestartExtensions_Nop,
RtemsTaskReqDelete_Post_TerminateExtensions_Nop,
RtemsTaskReqDelete_Post_Dormant_No, RtemsTaskReqDelete_Post_Suspended_No,
@@ -3256,7 +3231,7 @@ RtemsTaskReqDelete_Entries[] = {
{ 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,
RtemsTaskReqDelete_Post_Status_CalledFromISR,
RtemsTaskReqDelete_Post_FatalError_Nop, RtemsTaskReqDelete_Post_Zombie_No,
- RtemsTaskReqDelete_Post_RealPriority_Nop,
+ RtemsTaskReqDelete_Post_TaskPriority_Nop,
RtemsTaskReqDelete_Post_RestartExtensions_Nop,
RtemsTaskReqDelete_Post_TerminateExtensions_Nop,
RtemsTaskReqDelete_Post_Dormant_No, RtemsTaskReqDelete_Post_Suspended_No,
@@ -3268,7 +3243,7 @@ RtemsTaskReqDelete_Entries[] = {
{ 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,
RtemsTaskReqDelete_Post_Status_CalledFromISR,
RtemsTaskReqDelete_Post_FatalError_Nop, RtemsTaskReqDelete_Post_Zombie_No,
- RtemsTaskReqDelete_Post_RealPriority_Nop,
+ RtemsTaskReqDelete_Post_TaskPriority_Nop,
RtemsTaskReqDelete_Post_RestartExtensions_Nop,
RtemsTaskReqDelete_Post_TerminateExtensions_Nop,
RtemsTaskReqDelete_Post_Dormant_No, RtemsTaskReqDelete_Post_Suspended_No,
@@ -3279,7 +3254,7 @@ RtemsTaskReqDelete_Entries[] = {
{ 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,
RtemsTaskReqDelete_Post_Status_CalledFromISR,
RtemsTaskReqDelete_Post_FatalError_Nop, RtemsTaskReqDelete_Post_Zombie_No,
- RtemsTaskReqDelete_Post_RealPriority_Nop,
+ RtemsTaskReqDelete_Post_TaskPriority_Nop,
RtemsTaskReqDelete_Post_RestartExtensions_Nop,
RtemsTaskReqDelete_Post_TerminateExtensions_Nop,
RtemsTaskReqDelete_Post_Dormant_No, RtemsTaskReqDelete_Post_Suspended_No,
@@ -3291,7 +3266,7 @@ RtemsTaskReqDelete_Entries[] = {
{ 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,
RtemsTaskReqDelete_Post_Status_CalledFromISR,
RtemsTaskReqDelete_Post_FatalError_Nop, RtemsTaskReqDelete_Post_Zombie_No,
- RtemsTaskReqDelete_Post_RealPriority_Nop,
+ RtemsTaskReqDelete_Post_TaskPriority_Nop,
RtemsTaskReqDelete_Post_RestartExtensions_Nop,
RtemsTaskReqDelete_Post_TerminateExtensions_Nop,
RtemsTaskReqDelete_Post_Dormant_No, RtemsTaskReqDelete_Post_Suspended_No,
@@ -3303,7 +3278,7 @@ RtemsTaskReqDelete_Entries[] = {
{ 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,
RtemsTaskReqDelete_Post_Status_CalledFromISR,
RtemsTaskReqDelete_Post_FatalError_Nop, RtemsTaskReqDelete_Post_Zombie_No,
- RtemsTaskReqDelete_Post_RealPriority_Nop,
+ RtemsTaskReqDelete_Post_TaskPriority_Nop,
RtemsTaskReqDelete_Post_RestartExtensions_Nop,
RtemsTaskReqDelete_Post_TerminateExtensions_Nop,
RtemsTaskReqDelete_Post_Dormant_No, RtemsTaskReqDelete_Post_Suspended_No,
@@ -3314,7 +3289,7 @@ RtemsTaskReqDelete_Entries[] = {
{ 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,
RtemsTaskReqDelete_Post_Status_CalledFromISR,
RtemsTaskReqDelete_Post_FatalError_Nop, RtemsTaskReqDelete_Post_Zombie_No,
- RtemsTaskReqDelete_Post_RealPriority_Nop,
+ RtemsTaskReqDelete_Post_TaskPriority_Nop,
RtemsTaskReqDelete_Post_RestartExtensions_Nop,
RtemsTaskReqDelete_Post_TerminateExtensions_Nop,
RtemsTaskReqDelete_Post_Dormant_No, RtemsTaskReqDelete_Post_Suspended_No,
@@ -3326,7 +3301,7 @@ RtemsTaskReqDelete_Entries[] = {
{ 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,
RtemsTaskReqDelete_Post_Status_CalledFromISR,
RtemsTaskReqDelete_Post_FatalError_Nop, RtemsTaskReqDelete_Post_Zombie_No,
- RtemsTaskReqDelete_Post_RealPriority_Nop,
+ RtemsTaskReqDelete_Post_TaskPriority_Nop,
RtemsTaskReqDelete_Post_RestartExtensions_Nop,
RtemsTaskReqDelete_Post_TerminateExtensions_Nop,
RtemsTaskReqDelete_Post_Dormant_No, RtemsTaskReqDelete_Post_Suspended_No,
@@ -3337,7 +3312,7 @@ RtemsTaskReqDelete_Entries[] = {
{ 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,
RtemsTaskReqDelete_Post_Status_CalledFromISR,
RtemsTaskReqDelete_Post_FatalError_Nop, RtemsTaskReqDelete_Post_Zombie_No,
- RtemsTaskReqDelete_Post_RealPriority_Nop,
+ RtemsTaskReqDelete_Post_TaskPriority_Nop,
RtemsTaskReqDelete_Post_RestartExtensions_Nop,
RtemsTaskReqDelete_Post_TerminateExtensions_Nop,
RtemsTaskReqDelete_Post_Dormant_No, RtemsTaskReqDelete_Post_Suspended_No,
@@ -3349,7 +3324,7 @@ RtemsTaskReqDelete_Entries[] = {
{ 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,
RtemsTaskReqDelete_Post_Status_CalledFromISR,
RtemsTaskReqDelete_Post_FatalError_Nop, RtemsTaskReqDelete_Post_Zombie_No,
- RtemsTaskReqDelete_Post_RealPriority_Nop,
+ RtemsTaskReqDelete_Post_TaskPriority_Nop,
RtemsTaskReqDelete_Post_RestartExtensions_Nop,
RtemsTaskReqDelete_Post_TerminateExtensions_Nop,
RtemsTaskReqDelete_Post_Dormant_No, RtemsTaskReqDelete_Post_Suspended_No,
@@ -3361,7 +3336,7 @@ RtemsTaskReqDelete_Entries[] = {
{ 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,
RtemsTaskReqDelete_Post_Status_CalledFromISR,
RtemsTaskReqDelete_Post_FatalError_Nop, RtemsTaskReqDelete_Post_Zombie_No,
- RtemsTaskReqDelete_Post_RealPriority_Nop,
+ RtemsTaskReqDelete_Post_TaskPriority_Nop,
RtemsTaskReqDelete_Post_RestartExtensions_Nop,
RtemsTaskReqDelete_Post_TerminateExtensions_Nop,
RtemsTaskReqDelete_Post_Dormant_No, RtemsTaskReqDelete_Post_Suspended_No,
@@ -3372,7 +3347,7 @@ RtemsTaskReqDelete_Entries[] = {
{ 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,
RtemsTaskReqDelete_Post_Status_CalledFromISR,
RtemsTaskReqDelete_Post_FatalError_Nop, RtemsTaskReqDelete_Post_Zombie_No,
- RtemsTaskReqDelete_Post_RealPriority_Nop,
+ RtemsTaskReqDelete_Post_TaskPriority_Nop,
RtemsTaskReqDelete_Post_RestartExtensions_Nop,
RtemsTaskReqDelete_Post_TerminateExtensions_Nop,
RtemsTaskReqDelete_Post_Dormant_No, RtemsTaskReqDelete_Post_Suspended_No,
@@ -3384,7 +3359,7 @@ RtemsTaskReqDelete_Entries[] = {
{ 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,
RtemsTaskReqDelete_Post_Status_CalledFromISR,
RtemsTaskReqDelete_Post_FatalError_Nop, RtemsTaskReqDelete_Post_Zombie_No,
- RtemsTaskReqDelete_Post_RealPriority_Nop,
+ RtemsTaskReqDelete_Post_TaskPriority_Nop,
RtemsTaskReqDelete_Post_RestartExtensions_Nop,
RtemsTaskReqDelete_Post_TerminateExtensions_Nop,
RtemsTaskReqDelete_Post_Dormant_No, RtemsTaskReqDelete_Post_Suspended_No,
@@ -3395,7 +3370,7 @@ RtemsTaskReqDelete_Entries[] = {
{ 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,
RtemsTaskReqDelete_Post_Status_CalledFromISR,
RtemsTaskReqDelete_Post_FatalError_Nop, RtemsTaskReqDelete_Post_Zombie_No,
- RtemsTaskReqDelete_Post_RealPriority_Nop,
+ RtemsTaskReqDelete_Post_TaskPriority_Nop,
RtemsTaskReqDelete_Post_RestartExtensions_Nop,
RtemsTaskReqDelete_Post_TerminateExtensions_Nop,
RtemsTaskReqDelete_Post_Dormant_No, RtemsTaskReqDelete_Post_Suspended_No,
@@ -3407,7 +3382,7 @@ RtemsTaskReqDelete_Entries[] = {
{ 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,
RtemsTaskReqDelete_Post_Status_CalledFromISR,
RtemsTaskReqDelete_Post_FatalError_Nop, RtemsTaskReqDelete_Post_Zombie_No,
- RtemsTaskReqDelete_Post_RealPriority_Nop,
+ RtemsTaskReqDelete_Post_TaskPriority_Nop,
RtemsTaskReqDelete_Post_RestartExtensions_Nop,
RtemsTaskReqDelete_Post_TerminateExtensions_Nop,
RtemsTaskReqDelete_Post_Dormant_No, RtemsTaskReqDelete_Post_Suspended_No,
@@ -3419,7 +3394,7 @@ RtemsTaskReqDelete_Entries[] = {
{ 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,
RtemsTaskReqDelete_Post_Status_CalledFromISR,
RtemsTaskReqDelete_Post_FatalError_Nop, RtemsTaskReqDelete_Post_Zombie_No,
- RtemsTaskReqDelete_Post_RealPriority_Nop,
+ RtemsTaskReqDelete_Post_TaskPriority_Nop,
RtemsTaskReqDelete_Post_RestartExtensions_Nop,
RtemsTaskReqDelete_Post_TerminateExtensions_Nop,
RtemsTaskReqDelete_Post_Dormant_No, RtemsTaskReqDelete_Post_Suspended_No,
@@ -3430,7 +3405,7 @@ RtemsTaskReqDelete_Entries[] = {
{ 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,
RtemsTaskReqDelete_Post_Status_CalledFromISR,
RtemsTaskReqDelete_Post_FatalError_Nop, RtemsTaskReqDelete_Post_Zombie_No,
- RtemsTaskReqDelete_Post_RealPriority_Nop,
+ RtemsTaskReqDelete_Post_TaskPriority_Nop,
RtemsTaskReqDelete_Post_RestartExtensions_Nop,
RtemsTaskReqDelete_Post_TerminateExtensions_Nop,
RtemsTaskReqDelete_Post_Dormant_No, RtemsTaskReqDelete_Post_Suspended_No,
@@ -3442,7 +3417,7 @@ RtemsTaskReqDelete_Entries[] = {
{ 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,
RtemsTaskReqDelete_Post_Status_CalledFromISR,
RtemsTaskReqDelete_Post_FatalError_Nop, RtemsTaskReqDelete_Post_Zombie_No,
- RtemsTaskReqDelete_Post_RealPriority_Nop,
+ RtemsTaskReqDelete_Post_TaskPriority_Nop,
RtemsTaskReqDelete_Post_RestartExtensions_Nop,
RtemsTaskReqDelete_Post_TerminateExtensions_Nop,
RtemsTaskReqDelete_Post_Dormant_No, RtemsTaskReqDelete_Post_Suspended_No,
@@ -3453,7 +3428,7 @@ RtemsTaskReqDelete_Entries[] = {
{ 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,
RtemsTaskReqDelete_Post_Status_CalledFromISR,
RtemsTaskReqDelete_Post_FatalError_Nop, RtemsTaskReqDelete_Post_Zombie_No,
- RtemsTaskReqDelete_Post_RealPriority_Nop,
+ RtemsTaskReqDelete_Post_TaskPriority_Nop,
RtemsTaskReqDelete_Post_RestartExtensions_Nop,
RtemsTaskReqDelete_Post_TerminateExtensions_Nop,
RtemsTaskReqDelete_Post_Dormant_No, RtemsTaskReqDelete_Post_Suspended_No,
@@ -3465,7 +3440,7 @@ RtemsTaskReqDelete_Entries[] = {
{ 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,
RtemsTaskReqDelete_Post_Status_CalledFromISR,
RtemsTaskReqDelete_Post_FatalError_Nop, RtemsTaskReqDelete_Post_Zombie_No,
- RtemsTaskReqDelete_Post_RealPriority_Nop,
+ RtemsTaskReqDelete_Post_TaskPriority_Nop,
RtemsTaskReqDelete_Post_RestartExtensions_Nop,
RtemsTaskReqDelete_Post_TerminateExtensions_Nop,
RtemsTaskReqDelete_Post_Dormant_No, RtemsTaskReqDelete_Post_Suspended_No,
@@ -3477,7 +3452,7 @@ RtemsTaskReqDelete_Entries[] = {
{ 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,
RtemsTaskReqDelete_Post_Status_CalledFromISR,
RtemsTaskReqDelete_Post_FatalError_Nop, RtemsTaskReqDelete_Post_Zombie_No,
- RtemsTaskReqDelete_Post_RealPriority_Nop,
+ RtemsTaskReqDelete_Post_TaskPriority_Nop,
RtemsTaskReqDelete_Post_RestartExtensions_Nop,
RtemsTaskReqDelete_Post_TerminateExtensions_Nop,
RtemsTaskReqDelete_Post_Dormant_No, RtemsTaskReqDelete_Post_Suspended_No,
@@ -3488,7 +3463,7 @@ RtemsTaskReqDelete_Entries[] = {
{ 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,
RtemsTaskReqDelete_Post_Status_CalledFromISR,
RtemsTaskReqDelete_Post_FatalError_Nop, RtemsTaskReqDelete_Post_Zombie_No,
- RtemsTaskReqDelete_Post_RealPriority_Nop,
+ RtemsTaskReqDelete_Post_TaskPriority_Nop,
RtemsTaskReqDelete_Post_RestartExtensions_Nop,
RtemsTaskReqDelete_Post_TerminateExtensions_Nop,
RtemsTaskReqDelete_Post_Dormant_No, RtemsTaskReqDelete_Post_Suspended_No,
@@ -3500,7 +3475,7 @@ RtemsTaskReqDelete_Entries[] = {
{ 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,
RtemsTaskReqDelete_Post_Status_CalledFromISR,
RtemsTaskReqDelete_Post_FatalError_Nop, RtemsTaskReqDelete_Post_Zombie_No,
- RtemsTaskReqDelete_Post_RealPriority_Nop,
+ RtemsTaskReqDelete_Post_TaskPriority_Nop,
RtemsTaskReqDelete_Post_RestartExtensions_Nop,
RtemsTaskReqDelete_Post_TerminateExtensions_Nop,
RtemsTaskReqDelete_Post_Dormant_No, RtemsTaskReqDelete_Post_Suspended_No,
@@ -3511,7 +3486,7 @@ RtemsTaskReqDelete_Entries[] = {
{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
RtemsTaskReqDelete_Post_Status_CalledFromISR,
RtemsTaskReqDelete_Post_FatalError_Nop, RtemsTaskReqDelete_Post_Zombie_No,
- RtemsTaskReqDelete_Post_RealPriority_Nop,
+ RtemsTaskReqDelete_Post_TaskPriority_Nop,
RtemsTaskReqDelete_Post_RestartExtensions_Nop,
RtemsTaskReqDelete_Post_TerminateExtensions_Nop,
RtemsTaskReqDelete_Post_Dormant_No, RtemsTaskReqDelete_Post_Suspended_Yes,
@@ -3523,7 +3498,7 @@ RtemsTaskReqDelete_Entries[] = {
{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
RtemsTaskReqDelete_Post_Status_CalledFromISR,
RtemsTaskReqDelete_Post_FatalError_Nop, RtemsTaskReqDelete_Post_Zombie_No,
- RtemsTaskReqDelete_Post_RealPriority_Nop,
+ RtemsTaskReqDelete_Post_TaskPriority_Nop,
RtemsTaskReqDelete_Post_RestartExtensions_Nop,
RtemsTaskReqDelete_Post_TerminateExtensions_Nop,
RtemsTaskReqDelete_Post_Dormant_No, RtemsTaskReqDelete_Post_Suspended_Yes,
@@ -3535,7 +3510,7 @@ RtemsTaskReqDelete_Entries[] = {
{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
RtemsTaskReqDelete_Post_Status_CalledFromISR,
RtemsTaskReqDelete_Post_FatalError_Nop, RtemsTaskReqDelete_Post_Zombie_No,
- RtemsTaskReqDelete_Post_RealPriority_Nop,
+ RtemsTaskReqDelete_Post_TaskPriority_Nop,
RtemsTaskReqDelete_Post_RestartExtensions_Nop,
RtemsTaskReqDelete_Post_TerminateExtensions_Nop,
RtemsTaskReqDelete_Post_Dormant_No, RtemsTaskReqDelete_Post_Suspended_Yes,
@@ -3546,7 +3521,7 @@ RtemsTaskReqDelete_Entries[] = {
{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
RtemsTaskReqDelete_Post_Status_CalledFromISR,
RtemsTaskReqDelete_Post_FatalError_Nop, RtemsTaskReqDelete_Post_Zombie_No,
- RtemsTaskReqDelete_Post_RealPriority_Nop,
+ RtemsTaskReqDelete_Post_TaskPriority_Nop,
RtemsTaskReqDelete_Post_RestartExtensions_Nop,
RtemsTaskReqDelete_Post_TerminateExtensions_Nop,
RtemsTaskReqDelete_Post_Dormant_No, RtemsTaskReqDelete_Post_Suspended_Yes,
@@ -3558,7 +3533,7 @@ RtemsTaskReqDelete_Entries[] = {
{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
RtemsTaskReqDelete_Post_Status_CalledFromISR,
RtemsTaskReqDelete_Post_FatalError_Nop, RtemsTaskReqDelete_Post_Zombie_No,
- RtemsTaskReqDelete_Post_RealPriority_Nop,
+ RtemsTaskReqDelete_Post_TaskPriority_Nop,
RtemsTaskReqDelete_Post_RestartExtensions_Nop,
RtemsTaskReqDelete_Post_TerminateExtensions_Nop,
RtemsTaskReqDelete_Post_Dormant_No, RtemsTaskReqDelete_Post_Suspended_Yes,
@@ -3569,7 +3544,7 @@ RtemsTaskReqDelete_Entries[] = {
{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
RtemsTaskReqDelete_Post_Status_CalledFromISR,
RtemsTaskReqDelete_Post_FatalError_Nop, RtemsTaskReqDelete_Post_Zombie_No,
- RtemsTaskReqDelete_Post_RealPriority_Nop,
+ RtemsTaskReqDelete_Post_TaskPriority_Nop,
RtemsTaskReqDelete_Post_RestartExtensions_Nop,
RtemsTaskReqDelete_Post_TerminateExtensions_Nop,
RtemsTaskReqDelete_Post_Dormant_No, RtemsTaskReqDelete_Post_Suspended_Yes,
@@ -3581,7 +3556,7 @@ RtemsTaskReqDelete_Entries[] = {
{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
RtemsTaskReqDelete_Post_Status_CalledFromISR,
RtemsTaskReqDelete_Post_FatalError_Nop, RtemsTaskReqDelete_Post_Zombie_No,
- RtemsTaskReqDelete_Post_RealPriority_Nop,
+ RtemsTaskReqDelete_Post_TaskPriority_Nop,
RtemsTaskReqDelete_Post_RestartExtensions_Nop,
RtemsTaskReqDelete_Post_TerminateExtensions_Nop,
RtemsTaskReqDelete_Post_Dormant_No, RtemsTaskReqDelete_Post_Suspended_Yes,
@@ -3593,7 +3568,7 @@ RtemsTaskReqDelete_Entries[] = {
{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
RtemsTaskReqDelete_Post_Status_CalledFromISR,
RtemsTaskReqDelete_Post_FatalError_Nop, RtemsTaskReqDelete_Post_Zombie_No,
- RtemsTaskReqDelete_Post_RealPriority_Nop,
+ RtemsTaskReqDelete_Post_TaskPriority_Nop,
RtemsTaskReqDelete_Post_RestartExtensions_Nop,
RtemsTaskReqDelete_Post_TerminateExtensions_Nop,
RtemsTaskReqDelete_Post_Dormant_No, RtemsTaskReqDelete_Post_Suspended_Yes,
@@ -3604,7 +3579,7 @@ RtemsTaskReqDelete_Entries[] = {
{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
RtemsTaskReqDelete_Post_Status_CalledFromISR,
RtemsTaskReqDelete_Post_FatalError_Nop, RtemsTaskReqDelete_Post_Zombie_No,
- RtemsTaskReqDelete_Post_RealPriority_Nop,
+ RtemsTaskReqDelete_Post_TaskPriority_Nop,
RtemsTaskReqDelete_Post_RestartExtensions_Nop,
RtemsTaskReqDelete_Post_TerminateExtensions_Nop,
RtemsTaskReqDelete_Post_Dormant_No, RtemsTaskReqDelete_Post_Suspended_Yes,
@@ -3616,7 +3591,7 @@ RtemsTaskReqDelete_Entries[] = {
{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
RtemsTaskReqDelete_Post_Status_CalledFromISR,
RtemsTaskReqDelete_Post_FatalError_Nop, RtemsTaskReqDelete_Post_Zombie_No,
- RtemsTaskReqDelete_Post_RealPriority_Nop,
+ RtemsTaskReqDelete_Post_TaskPriority_Nop,
RtemsTaskReqDelete_Post_RestartExtensions_Nop,
RtemsTaskReqDelete_Post_TerminateExtensions_Nop,
RtemsTaskReqDelete_Post_Dormant_No, RtemsTaskReqDelete_Post_Suspended_Yes,
@@ -3627,7 +3602,7 @@ RtemsTaskReqDelete_Entries[] = {
{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
RtemsTaskReqDelete_Post_Status_CalledFromISR,
RtemsTaskReqDelete_Post_FatalError_Nop, RtemsTaskReqDelete_Post_Zombie_No,
- RtemsTaskReqDelete_Post_RealPriority_Nop,
+ RtemsTaskReqDelete_Post_TaskPriority_Nop,
RtemsTaskReqDelete_Post_RestartExtensions_Nop,
RtemsTaskReqDelete_Post_TerminateExtensions_Nop,
RtemsTaskReqDelete_Post_Dormant_No, RtemsTaskReqDelete_Post_Suspended_Yes,
@@ -3639,7 +3614,7 @@ RtemsTaskReqDelete_Entries[] = {
{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
RtemsTaskReqDelete_Post_Status_CalledFromISR,
RtemsTaskReqDelete_Post_FatalError_Nop, RtemsTaskReqDelete_Post_Zombie_No,
- RtemsTaskReqDelete_Post_RealPriority_Nop,
+ RtemsTaskReqDelete_Post_TaskPriority_Nop,
RtemsTaskReqDelete_Post_RestartExtensions_Nop,
RtemsTaskReqDelete_Post_TerminateExtensions_Nop,
RtemsTaskReqDelete_Post_Dormant_No, RtemsTaskReqDelete_Post_Suspended_Yes,
@@ -3651,7 +3626,7 @@ RtemsTaskReqDelete_Entries[] = {
{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
RtemsTaskReqDelete_Post_Status_CalledFromISR,
RtemsTaskReqDelete_Post_FatalError_Nop, RtemsTaskReqDelete_Post_Zombie_No,
- RtemsTaskReqDelete_Post_RealPriority_Nop,
+ RtemsTaskReqDelete_Post_TaskPriority_Nop,
RtemsTaskReqDelete_Post_RestartExtensions_Nop,
RtemsTaskReqDelete_Post_TerminateExtensions_Nop,
RtemsTaskReqDelete_Post_Dormant_No, RtemsTaskReqDelete_Post_Suspended_Yes,
@@ -3662,7 +3637,7 @@ RtemsTaskReqDelete_Entries[] = {
{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
RtemsTaskReqDelete_Post_Status_CalledFromISR,
RtemsTaskReqDelete_Post_FatalError_Nop, RtemsTaskReqDelete_Post_Zombie_No,
- RtemsTaskReqDelete_Post_RealPriority_Nop,
+ RtemsTaskReqDelete_Post_TaskPriority_Nop,
RtemsTaskReqDelete_Post_RestartExtensions_Nop,
RtemsTaskReqDelete_Post_TerminateExtensions_Nop,
RtemsTaskReqDelete_Post_Dormant_No, RtemsTaskReqDelete_Post_Suspended_Yes,
@@ -3674,7 +3649,7 @@ RtemsTaskReqDelete_Entries[] = {
{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
RtemsTaskReqDelete_Post_Status_CalledFromISR,
RtemsTaskReqDelete_Post_FatalError_Nop, RtemsTaskReqDelete_Post_Zombie_No,
- RtemsTaskReqDelete_Post_RealPriority_Nop,
+ RtemsTaskReqDelete_Post_TaskPriority_Nop,
RtemsTaskReqDelete_Post_RestartExtensions_Nop,
RtemsTaskReqDelete_Post_TerminateExtensions_Nop,
RtemsTaskReqDelete_Post_Dormant_No, RtemsTaskReqDelete_Post_Suspended_Yes,
@@ -3685,7 +3660,7 @@ RtemsTaskReqDelete_Entries[] = {
{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
RtemsTaskReqDelete_Post_Status_CalledFromISR,
RtemsTaskReqDelete_Post_FatalError_Nop, RtemsTaskReqDelete_Post_Zombie_No,
- RtemsTaskReqDelete_Post_RealPriority_Nop,
+ RtemsTaskReqDelete_Post_TaskPriority_Nop,
RtemsTaskReqDelete_Post_RestartExtensions_Nop,
RtemsTaskReqDelete_Post_TerminateExtensions_Nop,
RtemsTaskReqDelete_Post_Dormant_No, RtemsTaskReqDelete_Post_Suspended_Yes,
@@ -3697,7 +3672,7 @@ RtemsTaskReqDelete_Entries[] = {
{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
RtemsTaskReqDelete_Post_Status_CalledFromISR,
RtemsTaskReqDelete_Post_FatalError_Nop, RtemsTaskReqDelete_Post_Zombie_No,
- RtemsTaskReqDelete_Post_RealPriority_Nop,
+ RtemsTaskReqDelete_Post_TaskPriority_Nop,
RtemsTaskReqDelete_Post_RestartExtensions_Nop,
RtemsTaskReqDelete_Post_TerminateExtensions_Nop,
RtemsTaskReqDelete_Post_Dormant_No, RtemsTaskReqDelete_Post_Suspended_Yes,
@@ -3709,7 +3684,7 @@ RtemsTaskReqDelete_Entries[] = {
{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
RtemsTaskReqDelete_Post_Status_CalledFromISR,
RtemsTaskReqDelete_Post_FatalError_Nop, RtemsTaskReqDelete_Post_Zombie_No,
- RtemsTaskReqDelete_Post_RealPriority_Nop,
+ RtemsTaskReqDelete_Post_TaskPriority_Nop,
RtemsTaskReqDelete_Post_RestartExtensions_Nop,
RtemsTaskReqDelete_Post_TerminateExtensions_Nop,
RtemsTaskReqDelete_Post_Dormant_No, RtemsTaskReqDelete_Post_Suspended_Yes,
@@ -3720,7 +3695,7 @@ RtemsTaskReqDelete_Entries[] = {
{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
RtemsTaskReqDelete_Post_Status_CalledFromISR,
RtemsTaskReqDelete_Post_FatalError_Nop, RtemsTaskReqDelete_Post_Zombie_No,
- RtemsTaskReqDelete_Post_RealPriority_Nop,
+ RtemsTaskReqDelete_Post_TaskPriority_Nop,
RtemsTaskReqDelete_Post_RestartExtensions_Nop,
RtemsTaskReqDelete_Post_TerminateExtensions_Nop,
RtemsTaskReqDelete_Post_Dormant_No, RtemsTaskReqDelete_Post_Suspended_Yes,
@@ -3732,7 +3707,7 @@ RtemsTaskReqDelete_Entries[] = {
{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
RtemsTaskReqDelete_Post_Status_CalledFromISR,
RtemsTaskReqDelete_Post_FatalError_Nop, RtemsTaskReqDelete_Post_Zombie_No,
- RtemsTaskReqDelete_Post_RealPriority_Nop,
+ RtemsTaskReqDelete_Post_TaskPriority_Nop,
RtemsTaskReqDelete_Post_RestartExtensions_Nop,
RtemsTaskReqDelete_Post_TerminateExtensions_Nop,
RtemsTaskReqDelete_Post_Dormant_No, RtemsTaskReqDelete_Post_Suspended_Yes,
@@ -3743,7 +3718,7 @@ RtemsTaskReqDelete_Entries[] = {
{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
RtemsTaskReqDelete_Post_Status_CalledFromISR,
RtemsTaskReqDelete_Post_FatalError_Nop, RtemsTaskReqDelete_Post_Zombie_No,
- RtemsTaskReqDelete_Post_RealPriority_Nop,
+ RtemsTaskReqDelete_Post_TaskPriority_Nop,
RtemsTaskReqDelete_Post_RestartExtensions_Nop,
RtemsTaskReqDelete_Post_TerminateExtensions_Nop,
RtemsTaskReqDelete_Post_Dormant_No, RtemsTaskReqDelete_Post_Suspended_Yes,
@@ -3755,7 +3730,7 @@ RtemsTaskReqDelete_Entries[] = {
{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
RtemsTaskReqDelete_Post_Status_CalledFromISR,
RtemsTaskReqDelete_Post_FatalError_Nop, RtemsTaskReqDelete_Post_Zombie_No,
- RtemsTaskReqDelete_Post_RealPriority_Nop,
+ RtemsTaskReqDelete_Post_TaskPriority_Nop,
RtemsTaskReqDelete_Post_RestartExtensions_Nop,
RtemsTaskReqDelete_Post_TerminateExtensions_Nop,
RtemsTaskReqDelete_Post_Dormant_No, RtemsTaskReqDelete_Post_Suspended_Yes,
@@ -3767,7 +3742,7 @@ RtemsTaskReqDelete_Entries[] = {
{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
RtemsTaskReqDelete_Post_Status_CalledFromISR,
RtemsTaskReqDelete_Post_FatalError_Nop, RtemsTaskReqDelete_Post_Zombie_No,
- RtemsTaskReqDelete_Post_RealPriority_Nop,
+ RtemsTaskReqDelete_Post_TaskPriority_Nop,
RtemsTaskReqDelete_Post_RestartExtensions_Nop,
RtemsTaskReqDelete_Post_TerminateExtensions_Nop,
RtemsTaskReqDelete_Post_Dormant_No, RtemsTaskReqDelete_Post_Suspended_Yes,
@@ -3778,7 +3753,7 @@ RtemsTaskReqDelete_Entries[] = {
{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
RtemsTaskReqDelete_Post_Status_CalledFromISR,
RtemsTaskReqDelete_Post_FatalError_Nop, RtemsTaskReqDelete_Post_Zombie_No,
- RtemsTaskReqDelete_Post_RealPriority_Nop,
+ RtemsTaskReqDelete_Post_TaskPriority_Nop,
RtemsTaskReqDelete_Post_RestartExtensions_Nop,
RtemsTaskReqDelete_Post_TerminateExtensions_Nop,
RtemsTaskReqDelete_Post_Dormant_No, RtemsTaskReqDelete_Post_Suspended_Yes,
@@ -3790,7 +3765,7 @@ RtemsTaskReqDelete_Entries[] = {
{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
RtemsTaskReqDelete_Post_Status_CalledFromISR,
RtemsTaskReqDelete_Post_FatalError_Nop, RtemsTaskReqDelete_Post_Zombie_No,
- RtemsTaskReqDelete_Post_RealPriority_Nop,
+ RtemsTaskReqDelete_Post_TaskPriority_Nop,
RtemsTaskReqDelete_Post_RestartExtensions_Nop,
RtemsTaskReqDelete_Post_TerminateExtensions_Nop,
RtemsTaskReqDelete_Post_Dormant_No, RtemsTaskReqDelete_Post_Suspended_Yes,
@@ -3801,7 +3776,7 @@ RtemsTaskReqDelete_Entries[] = {
{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
RtemsTaskReqDelete_Post_Status_CalledFromISR,
RtemsTaskReqDelete_Post_FatalError_Nop, RtemsTaskReqDelete_Post_Zombie_No,
- RtemsTaskReqDelete_Post_RealPriority_Nop,
+ RtemsTaskReqDelete_Post_TaskPriority_Nop,
RtemsTaskReqDelete_Post_RestartExtensions_Nop,
RtemsTaskReqDelete_Post_TerminateExtensions_Nop,
RtemsTaskReqDelete_Post_Dormant_No, RtemsTaskReqDelete_Post_Suspended_Yes,
@@ -3813,7 +3788,7 @@ RtemsTaskReqDelete_Entries[] = {
{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
RtemsTaskReqDelete_Post_Status_CalledFromISR,
RtemsTaskReqDelete_Post_FatalError_Nop, RtemsTaskReqDelete_Post_Zombie_No,
- RtemsTaskReqDelete_Post_RealPriority_Nop,
+ RtemsTaskReqDelete_Post_TaskPriority_Nop,
RtemsTaskReqDelete_Post_RestartExtensions_Nop,
RtemsTaskReqDelete_Post_TerminateExtensions_Nop,
RtemsTaskReqDelete_Post_Dormant_No, RtemsTaskReqDelete_Post_Suspended_Yes,
@@ -3825,7 +3800,7 @@ RtemsTaskReqDelete_Entries[] = {
{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
RtemsTaskReqDelete_Post_Status_CalledFromISR,
RtemsTaskReqDelete_Post_FatalError_Nop, RtemsTaskReqDelete_Post_Zombie_No,
- RtemsTaskReqDelete_Post_RealPriority_Nop,
+ RtemsTaskReqDelete_Post_TaskPriority_Nop,
RtemsTaskReqDelete_Post_RestartExtensions_Nop,
RtemsTaskReqDelete_Post_TerminateExtensions_Nop,
RtemsTaskReqDelete_Post_Dormant_No, RtemsTaskReqDelete_Post_Suspended_Yes,
@@ -3836,7 +3811,7 @@ RtemsTaskReqDelete_Entries[] = {
{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
RtemsTaskReqDelete_Post_Status_CalledFromISR,
RtemsTaskReqDelete_Post_FatalError_Nop, RtemsTaskReqDelete_Post_Zombie_No,
- RtemsTaskReqDelete_Post_RealPriority_Nop,
+ RtemsTaskReqDelete_Post_TaskPriority_Nop,
RtemsTaskReqDelete_Post_RestartExtensions_Nop,
RtemsTaskReqDelete_Post_TerminateExtensions_Nop,
RtemsTaskReqDelete_Post_Dormant_No, RtemsTaskReqDelete_Post_Suspended_Yes,
@@ -3848,7 +3823,7 @@ RtemsTaskReqDelete_Entries[] = {
{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
RtemsTaskReqDelete_Post_Status_CalledFromISR,
RtemsTaskReqDelete_Post_FatalError_Nop, RtemsTaskReqDelete_Post_Zombie_No,
- RtemsTaskReqDelete_Post_RealPriority_Nop,
+ RtemsTaskReqDelete_Post_TaskPriority_Nop,
RtemsTaskReqDelete_Post_RestartExtensions_Nop,
RtemsTaskReqDelete_Post_TerminateExtensions_Nop,
RtemsTaskReqDelete_Post_Dormant_No, RtemsTaskReqDelete_Post_Suspended_Yes,
@@ -3859,7 +3834,7 @@ RtemsTaskReqDelete_Entries[] = {
{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
RtemsTaskReqDelete_Post_Status_CalledFromISR,
RtemsTaskReqDelete_Post_FatalError_Nop, RtemsTaskReqDelete_Post_Zombie_No,
- RtemsTaskReqDelete_Post_RealPriority_Nop,
+ RtemsTaskReqDelete_Post_TaskPriority_Nop,
RtemsTaskReqDelete_Post_RestartExtensions_Nop,
RtemsTaskReqDelete_Post_TerminateExtensions_Nop,
RtemsTaskReqDelete_Post_Dormant_No, RtemsTaskReqDelete_Post_Suspended_Yes,
@@ -3871,7 +3846,7 @@ RtemsTaskReqDelete_Entries[] = {
{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
RtemsTaskReqDelete_Post_Status_CalledFromISR,
RtemsTaskReqDelete_Post_FatalError_Nop, RtemsTaskReqDelete_Post_Zombie_No,
- RtemsTaskReqDelete_Post_RealPriority_Nop,
+ RtemsTaskReqDelete_Post_TaskPriority_Nop,
RtemsTaskReqDelete_Post_RestartExtensions_Nop,
RtemsTaskReqDelete_Post_TerminateExtensions_Nop,
RtemsTaskReqDelete_Post_Dormant_No, RtemsTaskReqDelete_Post_Suspended_Yes,
@@ -3883,7 +3858,7 @@ RtemsTaskReqDelete_Entries[] = {
{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
RtemsTaskReqDelete_Post_Status_CalledFromISR,
RtemsTaskReqDelete_Post_FatalError_Nop, RtemsTaskReqDelete_Post_Zombie_No,
- RtemsTaskReqDelete_Post_RealPriority_Nop,
+ RtemsTaskReqDelete_Post_TaskPriority_Nop,
RtemsTaskReqDelete_Post_RestartExtensions_Nop,
RtemsTaskReqDelete_Post_TerminateExtensions_Nop,
RtemsTaskReqDelete_Post_Dormant_No, RtemsTaskReqDelete_Post_Suspended_Yes,
@@ -3894,7 +3869,7 @@ RtemsTaskReqDelete_Entries[] = {
{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
RtemsTaskReqDelete_Post_Status_CalledFromISR,
RtemsTaskReqDelete_Post_FatalError_Nop, RtemsTaskReqDelete_Post_Zombie_No,
- RtemsTaskReqDelete_Post_RealPriority_Nop,
+ RtemsTaskReqDelete_Post_TaskPriority_Nop,
RtemsTaskReqDelete_Post_RestartExtensions_Nop,
RtemsTaskReqDelete_Post_TerminateExtensions_Nop,
RtemsTaskReqDelete_Post_Dormant_No, RtemsTaskReqDelete_Post_Suspended_Yes,
@@ -3906,7 +3881,7 @@ RtemsTaskReqDelete_Entries[] = {
{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
RtemsTaskReqDelete_Post_Status_CalledFromISR,
RtemsTaskReqDelete_Post_FatalError_Nop, RtemsTaskReqDelete_Post_Zombie_No,
- RtemsTaskReqDelete_Post_RealPriority_Nop,
+ RtemsTaskReqDelete_Post_TaskPriority_Nop,
RtemsTaskReqDelete_Post_RestartExtensions_Nop,
RtemsTaskReqDelete_Post_TerminateExtensions_Nop,
RtemsTaskReqDelete_Post_Dormant_No, RtemsTaskReqDelete_Post_Suspended_Yes,
@@ -3917,7 +3892,7 @@ RtemsTaskReqDelete_Entries[] = {
{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
RtemsTaskReqDelete_Post_Status_CalledFromISR,
RtemsTaskReqDelete_Post_FatalError_Nop, RtemsTaskReqDelete_Post_Zombie_No,
- RtemsTaskReqDelete_Post_RealPriority_Nop,
+ RtemsTaskReqDelete_Post_TaskPriority_Nop,
RtemsTaskReqDelete_Post_RestartExtensions_Nop,
RtemsTaskReqDelete_Post_TerminateExtensions_Nop,
RtemsTaskReqDelete_Post_Dormant_No, RtemsTaskReqDelete_Post_Suspended_Yes,
@@ -3929,7 +3904,7 @@ RtemsTaskReqDelete_Entries[] = {
{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
RtemsTaskReqDelete_Post_Status_CalledFromISR,
RtemsTaskReqDelete_Post_FatalError_Nop, RtemsTaskReqDelete_Post_Zombie_No,
- RtemsTaskReqDelete_Post_RealPriority_Nop,
+ RtemsTaskReqDelete_Post_TaskPriority_Nop,
RtemsTaskReqDelete_Post_RestartExtensions_Nop,
RtemsTaskReqDelete_Post_TerminateExtensions_Nop,
RtemsTaskReqDelete_Post_Dormant_No, RtemsTaskReqDelete_Post_Suspended_Yes,
@@ -3941,7 +3916,7 @@ RtemsTaskReqDelete_Entries[] = {
{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
RtemsTaskReqDelete_Post_Status_CalledFromISR,
RtemsTaskReqDelete_Post_FatalError_Nop, RtemsTaskReqDelete_Post_Zombie_No,
- RtemsTaskReqDelete_Post_RealPriority_Nop,
+ RtemsTaskReqDelete_Post_TaskPriority_Nop,
RtemsTaskReqDelete_Post_RestartExtensions_Nop,
RtemsTaskReqDelete_Post_TerminateExtensions_Nop,
RtemsTaskReqDelete_Post_Dormant_No, RtemsTaskReqDelete_Post_Suspended_Yes,
@@ -3952,7 +3927,7 @@ RtemsTaskReqDelete_Entries[] = {
{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
RtemsTaskReqDelete_Post_Status_CalledFromISR,
RtemsTaskReqDelete_Post_FatalError_Nop, RtemsTaskReqDelete_Post_Zombie_No,
- RtemsTaskReqDelete_Post_RealPriority_Nop,
+ RtemsTaskReqDelete_Post_TaskPriority_Nop,
RtemsTaskReqDelete_Post_RestartExtensions_Nop,
RtemsTaskReqDelete_Post_TerminateExtensions_Nop,
RtemsTaskReqDelete_Post_Dormant_No, RtemsTaskReqDelete_Post_Suspended_Yes,
@@ -3964,7 +3939,7 @@ RtemsTaskReqDelete_Entries[] = {
{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
RtemsTaskReqDelete_Post_Status_CalledFromISR,
RtemsTaskReqDelete_Post_FatalError_Nop, RtemsTaskReqDelete_Post_Zombie_No,
- RtemsTaskReqDelete_Post_RealPriority_Nop,
+ RtemsTaskReqDelete_Post_TaskPriority_Nop,
RtemsTaskReqDelete_Post_RestartExtensions_Nop,
RtemsTaskReqDelete_Post_TerminateExtensions_Nop,
RtemsTaskReqDelete_Post_Dormant_No, RtemsTaskReqDelete_Post_Suspended_Yes,
@@ -3975,7 +3950,7 @@ RtemsTaskReqDelete_Entries[] = {
{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
RtemsTaskReqDelete_Post_Status_CalledFromISR,
RtemsTaskReqDelete_Post_FatalError_Nop, RtemsTaskReqDelete_Post_Zombie_No,
- RtemsTaskReqDelete_Post_RealPriority_Nop,
+ RtemsTaskReqDelete_Post_TaskPriority_Nop,
RtemsTaskReqDelete_Post_RestartExtensions_Nop,
RtemsTaskReqDelete_Post_TerminateExtensions_Nop,
RtemsTaskReqDelete_Post_Dormant_No, RtemsTaskReqDelete_Post_Suspended_No,
@@ -3987,7 +3962,7 @@ RtemsTaskReqDelete_Entries[] = {
{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
RtemsTaskReqDelete_Post_Status_CalledFromISR,
RtemsTaskReqDelete_Post_FatalError_Nop, RtemsTaskReqDelete_Post_Zombie_No,
- RtemsTaskReqDelete_Post_RealPriority_Nop,
+ RtemsTaskReqDelete_Post_TaskPriority_Nop,
RtemsTaskReqDelete_Post_RestartExtensions_Nop,
RtemsTaskReqDelete_Post_TerminateExtensions_Nop,
RtemsTaskReqDelete_Post_Dormant_No, RtemsTaskReqDelete_Post_Suspended_No,
@@ -3999,7 +3974,7 @@ RtemsTaskReqDelete_Entries[] = {
{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
RtemsTaskReqDelete_Post_Status_CalledFromISR,
RtemsTaskReqDelete_Post_FatalError_Nop, RtemsTaskReqDelete_Post_Zombie_No,
- RtemsTaskReqDelete_Post_RealPriority_Nop,
+ RtemsTaskReqDelete_Post_TaskPriority_Nop,
RtemsTaskReqDelete_Post_RestartExtensions_Nop,
RtemsTaskReqDelete_Post_TerminateExtensions_Nop,
RtemsTaskReqDelete_Post_Dormant_No, RtemsTaskReqDelete_Post_Suspended_No,
@@ -4010,7 +3985,7 @@ RtemsTaskReqDelete_Entries[] = {
{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
RtemsTaskReqDelete_Post_Status_CalledFromISR,
RtemsTaskReqDelete_Post_FatalError_Nop, RtemsTaskReqDelete_Post_Zombie_No,
- RtemsTaskReqDelete_Post_RealPriority_Nop,
+ RtemsTaskReqDelete_Post_TaskPriority_Nop,
RtemsTaskReqDelete_Post_RestartExtensions_Nop,
RtemsTaskReqDelete_Post_TerminateExtensions_Nop,
RtemsTaskReqDelete_Post_Dormant_No, RtemsTaskReqDelete_Post_Suspended_No,
@@ -4022,7 +3997,7 @@ RtemsTaskReqDelete_Entries[] = {
{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
RtemsTaskReqDelete_Post_Status_CalledFromISR,
RtemsTaskReqDelete_Post_FatalError_Nop, RtemsTaskReqDelete_Post_Zombie_No,
- RtemsTaskReqDelete_Post_RealPriority_Nop,
+ RtemsTaskReqDelete_Post_TaskPriority_Nop,
RtemsTaskReqDelete_Post_RestartExtensions_Nop,
RtemsTaskReqDelete_Post_TerminateExtensions_Nop,
RtemsTaskReqDelete_Post_Dormant_No, RtemsTaskReqDelete_Post_Suspended_No,
@@ -4033,7 +4008,7 @@ RtemsTaskReqDelete_Entries[] = {
{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
RtemsTaskReqDelete_Post_Status_CalledFromISR,
RtemsTaskReqDelete_Post_FatalError_Nop, RtemsTaskReqDelete_Post_Zombie_No,
- RtemsTaskReqDelete_Post_RealPriority_Nop,
+ RtemsTaskReqDelete_Post_TaskPriority_Nop,
RtemsTaskReqDelete_Post_RestartExtensions_Nop,
RtemsTaskReqDelete_Post_TerminateExtensions_Nop,
RtemsTaskReqDelete_Post_Dormant_No, RtemsTaskReqDelete_Post_Suspended_No,
@@ -4045,7 +4020,7 @@ RtemsTaskReqDelete_Entries[] = {
{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
RtemsTaskReqDelete_Post_Status_CalledFromISR,
RtemsTaskReqDelete_Post_FatalError_Nop, RtemsTaskReqDelete_Post_Zombie_No,
- RtemsTaskReqDelete_Post_RealPriority_Nop,
+ RtemsTaskReqDelete_Post_TaskPriority_Nop,
RtemsTaskReqDelete_Post_RestartExtensions_Nop,
RtemsTaskReqDelete_Post_TerminateExtensions_Nop,
RtemsTaskReqDelete_Post_Dormant_No, RtemsTaskReqDelete_Post_Suspended_No,
@@ -4057,7 +4032,7 @@ RtemsTaskReqDelete_Entries[] = {
{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
RtemsTaskReqDelete_Post_Status_CalledFromISR,
RtemsTaskReqDelete_Post_FatalError_Nop, RtemsTaskReqDelete_Post_Zombie_No,
- RtemsTaskReqDelete_Post_RealPriority_Nop,
+ RtemsTaskReqDelete_Post_TaskPriority_Nop,
RtemsTaskReqDelete_Post_RestartExtensions_Nop,
RtemsTaskReqDelete_Post_TerminateExtensions_Nop,
RtemsTaskReqDelete_Post_Dormant_No, RtemsTaskReqDelete_Post_Suspended_No,
@@ -4068,7 +4043,7 @@ RtemsTaskReqDelete_Entries[] = {
{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
RtemsTaskReqDelete_Post_Status_CalledFromISR,
RtemsTaskReqDelete_Post_FatalError_Nop, RtemsTaskReqDelete_Post_Zombie_No,
- RtemsTaskReqDelete_Post_RealPriority_Nop,
+ RtemsTaskReqDelete_Post_TaskPriority_Nop,
RtemsTaskReqDelete_Post_RestartExtensions_Nop,
RtemsTaskReqDelete_Post_TerminateExtensions_Nop,
RtemsTaskReqDelete_Post_Dormant_No, RtemsTaskReqDelete_Post_Suspended_No,
@@ -4080,7 +4055,7 @@ RtemsTaskReqDelete_Entries[] = {
{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
RtemsTaskReqDelete_Post_Status_CalledFromISR,
RtemsTaskReqDelete_Post_FatalError_Nop, RtemsTaskReqDelete_Post_Zombie_No,
- RtemsTaskReqDelete_Post_RealPriority_Nop,
+ RtemsTaskReqDelete_Post_TaskPriority_Nop,
RtemsTaskReqDelete_Post_RestartExtensions_Nop,
RtemsTaskReqDelete_Post_TerminateExtensions_Nop,
RtemsTaskReqDelete_Post_Dormant_No, RtemsTaskReqDelete_Post_Suspended_No,
@@ -4091,7 +4066,7 @@ RtemsTaskReqDelete_Entries[] = {
{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
RtemsTaskReqDelete_Post_Status_CalledFromISR,
RtemsTaskReqDelete_Post_FatalError_Nop, RtemsTaskReqDelete_Post_Zombie_No,
- RtemsTaskReqDelete_Post_RealPriority_Nop,
+ RtemsTaskReqDelete_Post_TaskPriority_Nop,
RtemsTaskReqDelete_Post_RestartExtensions_Nop,
RtemsTaskReqDelete_Post_TerminateExtensions_Nop,
RtemsTaskReqDelete_Post_Dormant_No, RtemsTaskReqDelete_Post_Suspended_No,
@@ -4103,7 +4078,7 @@ RtemsTaskReqDelete_Entries[] = {
{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
RtemsTaskReqDelete_Post_Status_CalledFromISR,
RtemsTaskReqDelete_Post_FatalError_Nop, RtemsTaskReqDelete_Post_Zombie_No,
- RtemsTaskReqDelete_Post_RealPriority_Nop,
+ RtemsTaskReqDelete_Post_TaskPriority_Nop,
RtemsTaskReqDelete_Post_RestartExtensions_Nop,
RtemsTaskReqDelete_Post_TerminateExtensions_Nop,
RtemsTaskReqDelete_Post_Dormant_No, RtemsTaskReqDelete_Post_Suspended_No,
@@ -4115,7 +4090,7 @@ RtemsTaskReqDelete_Entries[] = {
{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
RtemsTaskReqDelete_Post_Status_CalledFromISR,
RtemsTaskReqDelete_Post_FatalError_Nop, RtemsTaskReqDelete_Post_Zombie_No,
- RtemsTaskReqDelete_Post_RealPriority_Nop,
+ RtemsTaskReqDelete_Post_TaskPriority_Nop,
RtemsTaskReqDelete_Post_RestartExtensions_Nop,
RtemsTaskReqDelete_Post_TerminateExtensions_Nop,
RtemsTaskReqDelete_Post_Dormant_No, RtemsTaskReqDelete_Post_Suspended_No,
@@ -4126,7 +4101,7 @@ RtemsTaskReqDelete_Entries[] = {
{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
RtemsTaskReqDelete_Post_Status_CalledFromISR,
RtemsTaskReqDelete_Post_FatalError_Nop, RtemsTaskReqDelete_Post_Zombie_No,
- RtemsTaskReqDelete_Post_RealPriority_Nop,
+ RtemsTaskReqDelete_Post_TaskPriority_Nop,
RtemsTaskReqDelete_Post_RestartExtensions_Nop,
RtemsTaskReqDelete_Post_TerminateExtensions_Nop,
RtemsTaskReqDelete_Post_Dormant_No, RtemsTaskReqDelete_Post_Suspended_No,
@@ -4138,7 +4113,7 @@ RtemsTaskReqDelete_Entries[] = {
{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
RtemsTaskReqDelete_Post_Status_CalledFromISR,
RtemsTaskReqDelete_Post_FatalError_Nop, RtemsTaskReqDelete_Post_Zombie_No,
- RtemsTaskReqDelete_Post_RealPriority_Nop,
+ RtemsTaskReqDelete_Post_TaskPriority_Nop,
RtemsTaskReqDelete_Post_RestartExtensions_Nop,
RtemsTaskReqDelete_Post_TerminateExtensions_Nop,
RtemsTaskReqDelete_Post_Dormant_No, RtemsTaskReqDelete_Post_Suspended_No,
@@ -4149,7 +4124,7 @@ RtemsTaskReqDelete_Entries[] = {
{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
RtemsTaskReqDelete_Post_Status_CalledFromISR,
RtemsTaskReqDelete_Post_FatalError_Nop, RtemsTaskReqDelete_Post_Zombie_No,
- RtemsTaskReqDelete_Post_RealPriority_Nop,
+ RtemsTaskReqDelete_Post_TaskPriority_Nop,
RtemsTaskReqDelete_Post_RestartExtensions_Nop,
RtemsTaskReqDelete_Post_TerminateExtensions_Nop,
RtemsTaskReqDelete_Post_Dormant_No, RtemsTaskReqDelete_Post_Suspended_No,
@@ -4161,7 +4136,7 @@ RtemsTaskReqDelete_Entries[] = {
{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
RtemsTaskReqDelete_Post_Status_CalledFromISR,
RtemsTaskReqDelete_Post_FatalError_Nop, RtemsTaskReqDelete_Post_Zombie_No,
- RtemsTaskReqDelete_Post_RealPriority_Nop,
+ RtemsTaskReqDelete_Post_TaskPriority_Nop,
RtemsTaskReqDelete_Post_RestartExtensions_Nop,
RtemsTaskReqDelete_Post_TerminateExtensions_Nop,
RtemsTaskReqDelete_Post_Dormant_No, RtemsTaskReqDelete_Post_Suspended_No,
@@ -4173,7 +4148,7 @@ RtemsTaskReqDelete_Entries[] = {
{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
RtemsTaskReqDelete_Post_Status_CalledFromISR,
RtemsTaskReqDelete_Post_FatalError_Nop, RtemsTaskReqDelete_Post_Zombie_No,
- RtemsTaskReqDelete_Post_RealPriority_Nop,
+ RtemsTaskReqDelete_Post_TaskPriority_Nop,
RtemsTaskReqDelete_Post_RestartExtensions_Nop,
RtemsTaskReqDelete_Post_TerminateExtensions_Nop,
RtemsTaskReqDelete_Post_Dormant_No, RtemsTaskReqDelete_Post_Suspended_No,
@@ -4184,7 +4159,7 @@ RtemsTaskReqDelete_Entries[] = {
{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
RtemsTaskReqDelete_Post_Status_CalledFromISR,
RtemsTaskReqDelete_Post_FatalError_Nop, RtemsTaskReqDelete_Post_Zombie_No,
- RtemsTaskReqDelete_Post_RealPriority_Nop,
+ RtemsTaskReqDelete_Post_TaskPriority_Nop,
RtemsTaskReqDelete_Post_RestartExtensions_Nop,
RtemsTaskReqDelete_Post_TerminateExtensions_Nop,
RtemsTaskReqDelete_Post_Dormant_No, RtemsTaskReqDelete_Post_Suspended_No,
@@ -4196,7 +4171,7 @@ RtemsTaskReqDelete_Entries[] = {
{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
RtemsTaskReqDelete_Post_Status_CalledFromISR,
RtemsTaskReqDelete_Post_FatalError_Nop, RtemsTaskReqDelete_Post_Zombie_No,
- RtemsTaskReqDelete_Post_RealPriority_Nop,
+ RtemsTaskReqDelete_Post_TaskPriority_Nop,
RtemsTaskReqDelete_Post_RestartExtensions_Nop,
RtemsTaskReqDelete_Post_TerminateExtensions_Nop,
RtemsTaskReqDelete_Post_Dormant_No, RtemsTaskReqDelete_Post_Suspended_No,
@@ -4207,7 +4182,7 @@ RtemsTaskReqDelete_Entries[] = {
{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
RtemsTaskReqDelete_Post_Status_CalledFromISR,
RtemsTaskReqDelete_Post_FatalError_Nop, RtemsTaskReqDelete_Post_Zombie_No,
- RtemsTaskReqDelete_Post_RealPriority_Nop,
+ RtemsTaskReqDelete_Post_TaskPriority_Nop,
RtemsTaskReqDelete_Post_RestartExtensions_Nop,
RtemsTaskReqDelete_Post_TerminateExtensions_Nop,
RtemsTaskReqDelete_Post_Dormant_No, RtemsTaskReqDelete_Post_Suspended_No,
@@ -4219,7 +4194,7 @@ RtemsTaskReqDelete_Entries[] = {
{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
RtemsTaskReqDelete_Post_Status_CalledFromISR,
RtemsTaskReqDelete_Post_FatalError_Nop, RtemsTaskReqDelete_Post_Zombie_No,
- RtemsTaskReqDelete_Post_RealPriority_Nop,
+ RtemsTaskReqDelete_Post_TaskPriority_Nop,
RtemsTaskReqDelete_Post_RestartExtensions_Nop,
RtemsTaskReqDelete_Post_TerminateExtensions_Nop,
RtemsTaskReqDelete_Post_Dormant_No, RtemsTaskReqDelete_Post_Suspended_No,
@@ -4231,7 +4206,7 @@ RtemsTaskReqDelete_Entries[] = {
{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
RtemsTaskReqDelete_Post_Status_CalledFromISR,
RtemsTaskReqDelete_Post_FatalError_Nop, RtemsTaskReqDelete_Post_Zombie_No,
- RtemsTaskReqDelete_Post_RealPriority_Nop,
+ RtemsTaskReqDelete_Post_TaskPriority_Nop,
RtemsTaskReqDelete_Post_RestartExtensions_Nop,
RtemsTaskReqDelete_Post_TerminateExtensions_Nop,
RtemsTaskReqDelete_Post_Dormant_No, RtemsTaskReqDelete_Post_Suspended_No,
@@ -4242,7 +4217,7 @@ RtemsTaskReqDelete_Entries[] = {
{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
RtemsTaskReqDelete_Post_Status_CalledFromISR,
RtemsTaskReqDelete_Post_FatalError_Nop, RtemsTaskReqDelete_Post_Zombie_No,
- RtemsTaskReqDelete_Post_RealPriority_Nop,
+ RtemsTaskReqDelete_Post_TaskPriority_Nop,
RtemsTaskReqDelete_Post_RestartExtensions_Nop,
RtemsTaskReqDelete_Post_TerminateExtensions_Nop,
RtemsTaskReqDelete_Post_Dormant_No, RtemsTaskReqDelete_Post_Suspended_No,
@@ -4254,7 +4229,7 @@ RtemsTaskReqDelete_Entries[] = {
{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
RtemsTaskReqDelete_Post_Status_CalledFromISR,
RtemsTaskReqDelete_Post_FatalError_Nop, RtemsTaskReqDelete_Post_Zombie_No,
- RtemsTaskReqDelete_Post_RealPriority_Nop,
+ RtemsTaskReqDelete_Post_TaskPriority_Nop,
RtemsTaskReqDelete_Post_RestartExtensions_Nop,
RtemsTaskReqDelete_Post_TerminateExtensions_Nop,
RtemsTaskReqDelete_Post_Dormant_No, RtemsTaskReqDelete_Post_Suspended_No,
@@ -4265,7 +4240,7 @@ RtemsTaskReqDelete_Entries[] = {
{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
RtemsTaskReqDelete_Post_Status_CalledFromISR,
RtemsTaskReqDelete_Post_FatalError_Nop, RtemsTaskReqDelete_Post_Zombie_No,
- RtemsTaskReqDelete_Post_RealPriority_Nop,
+ RtemsTaskReqDelete_Post_TaskPriority_Nop,
RtemsTaskReqDelete_Post_RestartExtensions_Nop,
RtemsTaskReqDelete_Post_TerminateExtensions_Nop,
RtemsTaskReqDelete_Post_Dormant_No, RtemsTaskReqDelete_Post_Suspended_No,
@@ -4277,7 +4252,7 @@ RtemsTaskReqDelete_Entries[] = {
{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
RtemsTaskReqDelete_Post_Status_CalledFromISR,
RtemsTaskReqDelete_Post_FatalError_Nop, RtemsTaskReqDelete_Post_Zombie_No,
- RtemsTaskReqDelete_Post_RealPriority_Nop,
+ RtemsTaskReqDelete_Post_TaskPriority_Nop,
RtemsTaskReqDelete_Post_RestartExtensions_Nop,
RtemsTaskReqDelete_Post_TerminateExtensions_Nop,
RtemsTaskReqDelete_Post_Dormant_No, RtemsTaskReqDelete_Post_Suspended_No,
@@ -4289,7 +4264,7 @@ RtemsTaskReqDelete_Entries[] = {
{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
RtemsTaskReqDelete_Post_Status_CalledFromISR,
RtemsTaskReqDelete_Post_FatalError_Nop, RtemsTaskReqDelete_Post_Zombie_No,
- RtemsTaskReqDelete_Post_RealPriority_Nop,
+ RtemsTaskReqDelete_Post_TaskPriority_Nop,
RtemsTaskReqDelete_Post_RestartExtensions_Nop,
RtemsTaskReqDelete_Post_TerminateExtensions_Nop,
RtemsTaskReqDelete_Post_Dormant_No, RtemsTaskReqDelete_Post_Suspended_No,
@@ -4300,7 +4275,7 @@ RtemsTaskReqDelete_Entries[] = {
{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
RtemsTaskReqDelete_Post_Status_CalledFromISR,
RtemsTaskReqDelete_Post_FatalError_Nop, RtemsTaskReqDelete_Post_Zombie_No,
- RtemsTaskReqDelete_Post_RealPriority_Nop,
+ RtemsTaskReqDelete_Post_TaskPriority_Nop,
RtemsTaskReqDelete_Post_RestartExtensions_Nop,
RtemsTaskReqDelete_Post_TerminateExtensions_Nop,
RtemsTaskReqDelete_Post_Dormant_No, RtemsTaskReqDelete_Post_Suspended_No,
@@ -4312,7 +4287,7 @@ RtemsTaskReqDelete_Entries[] = {
{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
RtemsTaskReqDelete_Post_Status_CalledFromISR,
RtemsTaskReqDelete_Post_FatalError_Nop, RtemsTaskReqDelete_Post_Zombie_No,
- RtemsTaskReqDelete_Post_RealPriority_Nop,
+ RtemsTaskReqDelete_Post_TaskPriority_Nop,
RtemsTaskReqDelete_Post_RestartExtensions_Nop,
RtemsTaskReqDelete_Post_TerminateExtensions_Nop,
RtemsTaskReqDelete_Post_Dormant_No, RtemsTaskReqDelete_Post_Suspended_No,
@@ -4323,7 +4298,7 @@ RtemsTaskReqDelete_Entries[] = {
{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
RtemsTaskReqDelete_Post_Status_CalledFromISR,
RtemsTaskReqDelete_Post_FatalError_Nop, RtemsTaskReqDelete_Post_Zombie_No,
- RtemsTaskReqDelete_Post_RealPriority_Nop,
+ RtemsTaskReqDelete_Post_TaskPriority_Nop,
RtemsTaskReqDelete_Post_RestartExtensions_Nop,
RtemsTaskReqDelete_Post_TerminateExtensions_Nop,
RtemsTaskReqDelete_Post_Dormant_No, RtemsTaskReqDelete_Post_Suspended_No,
@@ -4335,7 +4310,7 @@ RtemsTaskReqDelete_Entries[] = {
{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
RtemsTaskReqDelete_Post_Status_CalledFromISR,
RtemsTaskReqDelete_Post_FatalError_Nop, RtemsTaskReqDelete_Post_Zombie_No,
- RtemsTaskReqDelete_Post_RealPriority_Nop,
+ RtemsTaskReqDelete_Post_TaskPriority_Nop,
RtemsTaskReqDelete_Post_RestartExtensions_Nop,
RtemsTaskReqDelete_Post_TerminateExtensions_Nop,
RtemsTaskReqDelete_Post_Dormant_No, RtemsTaskReqDelete_Post_Suspended_No,
@@ -4347,7 +4322,7 @@ RtemsTaskReqDelete_Entries[] = {
{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
RtemsTaskReqDelete_Post_Status_CalledFromISR,
RtemsTaskReqDelete_Post_FatalError_Nop, RtemsTaskReqDelete_Post_Zombie_No,
- RtemsTaskReqDelete_Post_RealPriority_Nop,
+ RtemsTaskReqDelete_Post_TaskPriority_Nop,
RtemsTaskReqDelete_Post_RestartExtensions_Nop,
RtemsTaskReqDelete_Post_TerminateExtensions_Nop,
RtemsTaskReqDelete_Post_Dormant_No, RtemsTaskReqDelete_Post_Suspended_No,
@@ -4358,7 +4333,7 @@ RtemsTaskReqDelete_Entries[] = {
{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
RtemsTaskReqDelete_Post_Status_CalledFromISR,
RtemsTaskReqDelete_Post_FatalError_Nop, RtemsTaskReqDelete_Post_Zombie_No,
- RtemsTaskReqDelete_Post_RealPriority_Nop,
+ RtemsTaskReqDelete_Post_TaskPriority_Nop,
RtemsTaskReqDelete_Post_RestartExtensions_Nop,
RtemsTaskReqDelete_Post_TerminateExtensions_Nop,
RtemsTaskReqDelete_Post_Dormant_No, RtemsTaskReqDelete_Post_Suspended_No,
@@ -4370,7 +4345,7 @@ RtemsTaskReqDelete_Entries[] = {
{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
RtemsTaskReqDelete_Post_Status_CalledFromISR,
RtemsTaskReqDelete_Post_FatalError_Nop, RtemsTaskReqDelete_Post_Zombie_No,
- RtemsTaskReqDelete_Post_RealPriority_Nop,
+ RtemsTaskReqDelete_Post_TaskPriority_Nop,
RtemsTaskReqDelete_Post_RestartExtensions_Nop,
RtemsTaskReqDelete_Post_TerminateExtensions_Nop,
RtemsTaskReqDelete_Post_Dormant_No, RtemsTaskReqDelete_Post_Suspended_No,
@@ -4381,7 +4356,7 @@ RtemsTaskReqDelete_Entries[] = {
{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
RtemsTaskReqDelete_Post_Status_CalledFromISR,
RtemsTaskReqDelete_Post_FatalError_Nop, RtemsTaskReqDelete_Post_Zombie_No,
- RtemsTaskReqDelete_Post_RealPriority_Nop,
+ RtemsTaskReqDelete_Post_TaskPriority_Nop,
RtemsTaskReqDelete_Post_RestartExtensions_Nop,
RtemsTaskReqDelete_Post_TerminateExtensions_Nop,
RtemsTaskReqDelete_Post_Dormant_No, RtemsTaskReqDelete_Post_Suspended_No,
@@ -4393,7 +4368,7 @@ RtemsTaskReqDelete_Entries[] = {
{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
RtemsTaskReqDelete_Post_Status_CalledFromISR,
RtemsTaskReqDelete_Post_FatalError_Nop, RtemsTaskReqDelete_Post_Zombie_No,
- RtemsTaskReqDelete_Post_RealPriority_Nop,
+ RtemsTaskReqDelete_Post_TaskPriority_Nop,
RtemsTaskReqDelete_Post_RestartExtensions_Nop,
RtemsTaskReqDelete_Post_TerminateExtensions_Nop,
RtemsTaskReqDelete_Post_Dormant_No, RtemsTaskReqDelete_Post_Suspended_No,
@@ -4405,7 +4380,7 @@ RtemsTaskReqDelete_Entries[] = {
{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
RtemsTaskReqDelete_Post_Status_CalledFromISR,
RtemsTaskReqDelete_Post_FatalError_Nop, RtemsTaskReqDelete_Post_Zombie_No,
- RtemsTaskReqDelete_Post_RealPriority_Nop,
+ RtemsTaskReqDelete_Post_TaskPriority_Nop,
RtemsTaskReqDelete_Post_RestartExtensions_Nop,
RtemsTaskReqDelete_Post_TerminateExtensions_Nop,
RtemsTaskReqDelete_Post_Dormant_No, RtemsTaskReqDelete_Post_Suspended_No,
@@ -4416,7 +4391,7 @@ RtemsTaskReqDelete_Entries[] = {
{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
RtemsTaskReqDelete_Post_Status_CalledFromISR,
RtemsTaskReqDelete_Post_FatalError_Nop, RtemsTaskReqDelete_Post_Zombie_No,
- RtemsTaskReqDelete_Post_RealPriority_Nop,
+ RtemsTaskReqDelete_Post_TaskPriority_Nop,
RtemsTaskReqDelete_Post_RestartExtensions_Nop,
RtemsTaskReqDelete_Post_TerminateExtensions_Nop,
RtemsTaskReqDelete_Post_Dormant_No, RtemsTaskReqDelete_Post_Suspended_No,
@@ -4428,7 +4403,7 @@ RtemsTaskReqDelete_Entries[] = {
{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
RtemsTaskReqDelete_Post_Status_CalledFromISR,
RtemsTaskReqDelete_Post_FatalError_Nop, RtemsTaskReqDelete_Post_Zombie_No,
- RtemsTaskReqDelete_Post_RealPriority_Nop,
+ RtemsTaskReqDelete_Post_TaskPriority_Nop,
RtemsTaskReqDelete_Post_RestartExtensions_Nop,
RtemsTaskReqDelete_Post_TerminateExtensions_Nop,
RtemsTaskReqDelete_Post_Dormant_No, RtemsTaskReqDelete_Post_Suspended_No,
@@ -4440,52 +4415,52 @@ RtemsTaskReqDelete_Entries[] = {
static const uint8_t
RtemsTaskReqDelete_Map[] = {
+ 3, 3, 19, 4, 3, 3, 3, 3, 20, 4, 3, 3, 3, 3, 19, 4, 3, 3, 3, 3, 20, 4, 3, 3,
3, 3, 21, 4, 3, 3, 3, 3, 22, 4, 3, 3, 3, 3, 21, 4, 3, 3, 3, 3, 22, 4, 3, 3,
3, 3, 23, 4, 3, 3, 3, 3, 24, 4, 3, 3, 3, 3, 23, 4, 3, 3, 3, 3, 24, 4, 3, 3,
3, 3, 25, 4, 3, 3, 3, 3, 26, 4, 3, 3, 3, 3, 25, 4, 3, 3, 3, 3, 26, 4, 3, 3,
- 3, 3, 27, 4, 3, 3, 3, 3, 28, 4, 3, 3, 3, 3, 27, 4, 3, 3, 3, 3, 28, 4, 3, 3,
2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 3, 21, 4, 3, 3, 3,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 3, 19, 4, 3, 3, 3,
+ 3, 20, 4, 3, 3, 3, 3, 19, 4, 3, 3, 3, 3, 20, 4, 3, 3, 3, 3, 21, 4, 3, 3, 3,
3, 22, 4, 3, 3, 3, 3, 21, 4, 3, 3, 3, 3, 22, 4, 3, 3, 3, 3, 23, 4, 3, 3, 3,
3, 24, 4, 3, 3, 3, 3, 23, 4, 3, 3, 3, 3, 24, 4, 3, 3, 3, 3, 25, 4, 3, 3, 3,
- 3, 26, 4, 3, 3, 3, 3, 25, 4, 3, 3, 3, 3, 26, 4, 3, 3, 3, 3, 27, 4, 3, 3, 3,
- 3, 28, 4, 3, 3, 3, 3, 27, 4, 3, 3, 3, 3, 28, 4, 3, 3, 2, 2, 2, 2, 2, 2, 2, 2,
+ 3, 26, 4, 3, 3, 3, 3, 25, 4, 3, 3, 3, 3, 26, 4, 3, 3, 2, 2, 2, 2, 2, 2, 2, 2,
2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 3, 29, 4, 3, 3, 3, 3, 30, 4, 3, 3, 3, 3, 29,
- 4, 3, 3, 3, 3, 30, 4, 3, 3, 3, 3, 31, 4, 3, 3, 3, 3, 32, 4, 3, 3, 3, 3, 31,
- 4, 3, 3, 3, 3, 32, 4, 3, 3, 3, 3, 19, 4, 3, 3, 3, 3, 19, 4, 3, 3, 3, 3, 19,
- 4, 3, 3, 3, 3, 19, 4, 3, 3, 3, 3, 20, 4, 3, 3, 3, 3, 20, 4, 3, 3, 3, 3, 20,
- 4, 3, 3, 3, 3, 20, 4, 3, 3, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 3, 27, 4, 3, 3, 3, 3, 28, 4, 3, 3, 3, 3, 27,
+ 4, 3, 3, 3, 3, 28, 4, 3, 3, 3, 3, 29, 4, 3, 3, 3, 3, 30, 4, 3, 3, 3, 3, 29,
+ 4, 3, 3, 3, 3, 30, 4, 3, 3, 3, 3, 17, 4, 3, 3, 3, 3, 17, 4, 3, 3, 3, 3, 17,
+ 4, 3, 3, 3, 3, 17, 4, 3, 3, 3, 3, 18, 4, 3, 3, 3, 3, 18, 4, 3, 3, 3, 3, 18,
+ 4, 3, 3, 3, 3, 18, 4, 3, 3, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 3, 3, 29, 4, 3, 3, 3, 3, 30, 4, 3, 3, 3, 3, 29, 4, 3, 3, 3, 3, 30, 4,
- 3, 3, 3, 3, 31, 4, 3, 3, 3, 3, 32, 4, 3, 3, 3, 3, 31, 4, 3, 3, 3, 3, 32, 4,
- 3, 3, 3, 3, 19, 4, 3, 3, 3, 3, 19, 4, 3, 3, 3, 3, 19, 4, 3, 3, 3, 3, 19, 4,
- 3, 3, 3, 3, 20, 4, 3, 3, 3, 3, 20, 4, 3, 3, 3, 3, 20, 4, 3, 3, 3, 3, 20, 4,
+ 2, 2, 3, 3, 27, 4, 3, 3, 3, 3, 28, 4, 3, 3, 3, 3, 27, 4, 3, 3, 3, 3, 28, 4,
+ 3, 3, 3, 3, 29, 4, 3, 3, 3, 3, 30, 4, 3, 3, 3, 3, 29, 4, 3, 3, 3, 3, 30, 4,
+ 3, 3, 3, 3, 17, 4, 3, 3, 3, 3, 17, 4, 3, 3, 3, 3, 17, 4, 3, 3, 3, 3, 17, 4,
+ 3, 3, 3, 3, 18, 4, 3, 3, 3, 3, 18, 4, 3, 3, 3, 3, 18, 4, 3, 3, 3, 3, 18, 4,
3, 3, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 73, 74, 75, 4,
- 76, 77, 78, 79, 80, 4, 81, 82, 83, 84, 85, 4, 86, 87, 88, 89, 90, 4, 91, 92,
- 93, 94, 95, 4, 96, 97, 98, 99, 100, 4, 101, 102, 103, 104, 105, 4, 106, 107,
- 108, 109, 110, 4, 111, 112, 113, 114, 115, 4, 116, 117, 118, 119, 120, 4,
- 121, 122, 123, 124, 125, 4, 126, 127, 128, 129, 130, 4, 131, 132, 133, 134,
- 135, 4, 136, 137, 138, 139, 140, 4, 141, 142, 143, 144, 145, 4, 146, 147,
- 148, 149, 150, 4, 151, 152, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 71, 72, 73, 4,
+ 74, 75, 76, 77, 78, 4, 79, 80, 81, 82, 83, 4, 84, 85, 86, 87, 88, 4, 89, 90,
+ 91, 92, 93, 4, 94, 95, 96, 97, 98, 4, 99, 100, 101, 102, 103, 4, 104, 105,
+ 106, 107, 108, 4, 109, 110, 111, 112, 113, 4, 114, 115, 116, 117, 118, 4,
+ 119, 120, 121, 122, 123, 4, 124, 125, 126, 127, 128, 4, 129, 130, 131, 132,
+ 133, 4, 134, 135, 136, 137, 138, 4, 139, 140, 141, 142, 143, 4, 144, 145,
+ 146, 147, 148, 4, 149, 150, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 73, 74, 75, 4, 76, 77, 78, 79, 80, 4, 81, 82, 83, 84, 85, 4, 86, 87,
- 88, 89, 90, 4, 91, 92, 93, 94, 95, 4, 96, 97, 98, 99, 100, 4, 101, 102, 103,
- 104, 105, 4, 106, 107, 108, 109, 110, 4, 111, 112, 113, 114, 115, 4, 116,
- 117, 118, 119, 120, 4, 121, 122, 123, 124, 125, 4, 126, 127, 128, 129, 130,
- 4, 131, 132, 133, 134, 135, 4, 136, 137, 138, 139, 140, 4, 141, 142, 143,
- 144, 145, 4, 146, 147, 148, 149, 150, 4, 151, 152, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 71, 72, 73, 4, 74, 75, 76, 77, 78, 4, 79, 80, 81, 82, 83, 4, 84, 85,
+ 86, 87, 88, 4, 89, 90, 91, 92, 93, 4, 94, 95, 96, 97, 98, 4, 99, 100, 101,
+ 102, 103, 4, 104, 105, 106, 107, 108, 4, 109, 110, 111, 112, 113, 4, 114,
+ 115, 116, 117, 118, 4, 119, 120, 121, 122, 123, 4, 124, 125, 126, 127, 128,
+ 4, 129, 130, 131, 132, 133, 4, 134, 135, 136, 137, 138, 4, 139, 140, 141,
+ 142, 143, 4, 144, 145, 146, 147, 148, 4, 149, 150, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
@@ -4504,61 +4479,60 @@ RtemsTaskReqDelete_Map[] = {
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 33, 34, 35, 4, 36, 37, 11, 11, 11, 4, 11, 11, 33, 34, 35, 4, 36, 37,
- 11, 11, 11, 4, 11, 11, 38, 39, 40, 4, 41, 42, 12, 12, 12, 4, 12, 12, 38, 39,
- 40, 4, 41, 42, 12, 12, 12, 4, 12, 12, 33, 34, 35, 4, 36, 37, 11, 11, 11, 4,
- 11, 11, 33, 34, 35, 4, 36, 37, 11, 11, 11, 4, 11, 11, 38, 39, 40, 4, 41, 42,
- 12, 12, 12, 4, 12, 12, 38, 39, 40, 4, 41, 42, 12, 12, 12, 4, 12, 12, 5, 5, 5,
+ 0, 0, 0, 31, 32, 33, 4, 34, 35, 9, 9, 9, 4, 9, 9, 31, 32, 33, 4, 34, 35, 9,
+ 9, 9, 4, 9, 9, 36, 37, 38, 4, 39, 40, 10, 10, 10, 4, 10, 10, 36, 37, 38, 4,
+ 39, 40, 10, 10, 10, 4, 10, 10, 31, 32, 33, 4, 34, 35, 9, 9, 9, 4, 9, 9, 31,
+ 32, 33, 4, 34, 35, 9, 9, 9, 4, 9, 9, 36, 37, 38, 4, 39, 40, 10, 10, 10, 4,
+ 10, 10, 36, 37, 38, 4, 39, 40, 10, 10, 10, 4, 10, 10, 5, 5, 5, 5, 5, 5, 5, 5,
5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
- 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 6, 6, 6, 6, 6, 6, 6,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6,
6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6,
- 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 43, 44, 45, 4, 46, 47, 13, 13,
- 13, 4, 13, 13, 43, 44, 45, 4, 46, 47, 13, 13, 13, 4, 13, 13, 48, 49, 50, 4,
- 51, 52, 14, 14, 14, 4, 14, 14, 48, 49, 50, 4, 51, 52, 14, 14, 14, 4, 14, 14,
- 43, 44, 45, 4, 46, 47, 13, 13, 13, 4, 13, 13, 43, 44, 45, 4, 46, 47, 13, 13,
- 13, 4, 13, 13, 48, 49, 50, 4, 51, 52, 14, 14, 14, 4, 14, 14, 48, 49, 50, 4,
- 51, 52, 14, 14, 14, 4, 14, 14, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 41, 42, 43, 4, 44, 45, 11, 11, 11, 4, 11, 11,
+ 41, 42, 43, 4, 44, 45, 11, 11, 11, 4, 11, 11, 46, 47, 48, 4, 49, 50, 12, 12,
+ 12, 4, 12, 12, 46, 47, 48, 4, 49, 50, 12, 12, 12, 4, 12, 12, 41, 42, 43, 4,
+ 44, 45, 11, 11, 11, 4, 11, 11, 41, 42, 43, 4, 44, 45, 11, 11, 11, 4, 11, 11,
+ 46, 47, 48, 4, 49, 50, 12, 12, 12, 4, 12, 12, 46, 47, 48, 4, 49, 50, 12, 12,
+ 12, 4, 12, 12, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6,
+ 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 51, 52,
+ 53, 4, 54, 55, 13, 13, 13, 4, 13, 13, 51, 52, 53, 4, 54, 55, 13, 13, 13, 4,
+ 13, 13, 56, 57, 58, 4, 59, 60, 14, 14, 14, 4, 14, 14, 56, 57, 58, 4, 59, 60,
+ 14, 14, 14, 4, 14, 14, 51, 52, 53, 4, 54, 55, 13, 13, 13, 4, 13, 13, 51, 52,
+ 53, 4, 54, 55, 13, 13, 13, 4, 13, 13, 56, 57, 58, 4, 59, 60, 14, 14, 14, 4,
+ 14, 14, 56, 57, 58, 4, 59, 60, 14, 14, 14, 4, 14, 14, 5, 5, 5, 5, 5, 5, 5, 5,
5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
- 5, 5, 5, 5, 5, 5, 5, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6,
6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6,
- 6, 6, 6, 53, 54, 55, 4, 56, 57, 15, 15, 15, 4, 15, 15, 53, 54, 55, 4, 56, 57,
- 15, 15, 15, 4, 15, 15, 58, 59, 60, 4, 61, 62, 16, 16, 16, 4, 16, 16, 58, 59,
- 60, 4, 61, 62, 16, 16, 16, 4, 16, 16, 53, 54, 55, 4, 56, 57, 15, 15, 15, 4,
- 15, 15, 53, 54, 55, 4, 56, 57, 15, 15, 15, 4, 15, 15, 58, 59, 60, 4, 61, 62,
- 16, 16, 16, 4, 16, 16, 58, 59, 60, 4, 61, 62, 16, 16, 16, 4, 16, 16, 7, 7, 7,
+ 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 61, 62, 63, 4, 64, 65, 15, 15, 15, 4, 15, 15,
+ 61, 62, 63, 4, 64, 65, 15, 15, 15, 4, 15, 15, 66, 67, 68, 4, 69, 70, 16, 16,
+ 16, 4, 16, 16, 66, 67, 68, 4, 69, 70, 16, 16, 16, 4, 16, 16, 61, 62, 63, 4,
+ 64, 65, 15, 15, 15, 4, 15, 15, 61, 62, 63, 4, 64, 65, 15, 15, 15, 4, 15, 15,
+ 66, 67, 68, 4, 69, 70, 16, 16, 16, 4, 16, 16, 66, 67, 68, 4, 69, 70, 16, 16,
+ 16, 4, 16, 16, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6,
+ 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 151,
+ 152, 153, 4, 154, 155, 156, 157, 158, 4, 159, 160, 161, 162, 163, 4, 164,
+ 165, 166, 167, 168, 4, 169, 170, 171, 172, 173, 4, 174, 175, 176, 177, 178,
+ 4, 179, 180, 181, 182, 183, 4, 184, 185, 186, 187, 188, 4, 189, 190, 191,
+ 192, 193, 4, 194, 195, 196, 197, 198, 4, 199, 200, 201, 202, 203, 4, 204,
+ 205, 206, 207, 208, 4, 209, 210, 211, 212, 213, 4, 214, 215, 216, 217, 218,
+ 4, 219, 220, 221, 222, 223, 4, 224, 225, 226, 227, 228, 4, 229, 230, 7, 7, 7,
7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 8, 8, 8, 8, 8, 8, 8,
8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
- 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 63, 64, 65, 4, 66, 67, 17, 17,
- 17, 4, 17, 17, 63, 64, 65, 4, 66, 67, 17, 17, 17, 4, 17, 17, 68, 69, 70, 4,
- 71, 72, 18, 18, 18, 4, 18, 18, 68, 69, 70, 4, 71, 72, 18, 18, 18, 4, 18, 18,
- 63, 64, 65, 4, 66, 67, 17, 17, 17, 4, 17, 17, 63, 64, 65, 4, 66, 67, 17, 17,
- 17, 4, 17, 17, 68, 69, 70, 4, 71, 72, 18, 18, 18, 4, 18, 18, 68, 69, 70, 4,
- 71, 72, 18, 18, 18, 4, 18, 18, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
+ 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 151, 152, 153, 4, 154, 155, 156,
+ 157, 158, 4, 159, 160, 161, 162, 163, 4, 164, 165, 166, 167, 168, 4, 169,
+ 170, 171, 172, 173, 4, 174, 175, 176, 177, 178, 4, 179, 180, 181, 182, 183,
+ 4, 184, 185, 186, 187, 188, 4, 189, 190, 191, 192, 193, 4, 194, 195, 196,
+ 197, 198, 4, 199, 200, 201, 202, 203, 4, 204, 205, 206, 207, 208, 4, 209,
+ 210, 211, 212, 213, 4, 214, 215, 216, 217, 218, 4, 219, 220, 221, 222, 223,
+ 4, 224, 225, 226, 227, 228, 4, 229, 230, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
- 7, 7, 7, 7, 7, 7, 7, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
+ 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
- 8, 8, 8, 153, 154, 155, 4, 156, 157, 158, 159, 160, 4, 161, 162, 163, 164,
- 165, 4, 166, 167, 168, 169, 170, 4, 171, 172, 173, 174, 175, 4, 176, 177,
- 178, 179, 180, 4, 181, 182, 183, 184, 185, 4, 186, 187, 188, 189, 190, 4,
- 191, 192, 193, 194, 195, 4, 196, 197, 198, 199, 200, 4, 201, 202, 203, 204,
- 205, 4, 206, 207, 208, 209, 210, 4, 211, 212, 213, 214, 215, 4, 216, 217,
- 218, 219, 220, 4, 221, 222, 223, 224, 225, 4, 226, 227, 228, 229, 230, 4,
- 231, 232, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
- 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
- 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
- 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
- 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 153, 154, 155, 4, 156, 157, 158, 159,
- 160, 4, 161, 162, 163, 164, 165, 4, 166, 167, 168, 169, 170, 4, 171, 172,
- 173, 174, 175, 4, 176, 177, 178, 179, 180, 4, 181, 182, 183, 184, 185, 4,
- 186, 187, 188, 189, 190, 4, 191, 192, 193, 194, 195, 4, 196, 197, 198, 199,
- 200, 4, 201, 202, 203, 204, 205, 4, 206, 207, 208, 209, 210, 4, 211, 212,
- 213, 214, 215, 4, 216, 217, 218, 219, 220, 4, 221, 222, 223, 224, 225, 4,
- 226, 227, 228, 229, 230, 4, 231, 232, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
- 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
- 9, 9, 9, 9, 9, 9, 9, 9, 9, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
- 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
- 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 0, 0, 0,
+ 8, 8, 8, 8, 8, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -4573,7 +4547,6 @@ RtemsTaskReqDelete_Map[] = {
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
@@ -4617,7 +4590,8 @@ RtemsTaskReqDelete_Map[] = {
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -4632,7 +4606,7 @@ RtemsTaskReqDelete_Map[] = {
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
+ 0, 0
};
static size_t RtemsTaskReqDelete_Scope( void *arg, char *buf, size_t n )
@@ -4746,9 +4720,9 @@ static void RtemsTaskReqDelete_TestVariant( RtemsTaskReqDelete_Context *ctx )
ctx->Map.entry.Post_FatalError
);
RtemsTaskReqDelete_Post_Zombie_Check( ctx, ctx->Map.entry.Post_Zombie );
- RtemsTaskReqDelete_Post_RealPriority_Check(
+ RtemsTaskReqDelete_Post_TaskPriority_Check(
ctx,
- ctx->Map.entry.Post_RealPriority
+ ctx->Map.entry.Post_TaskPriority
);
RtemsTaskReqDelete_Post_RestartExtensions_Check(
ctx,
@@ -4806,7 +4780,7 @@ T_TEST_CASE_FIXTURE( RtemsTaskReqDelete, &RtemsTaskReqDelete_Fixture )
++ctx->Map.pci[ 2 ]
) {
for (
- ctx->Map.pci[ 3 ] = RtemsTaskReqDelete_Pre_CallerPriority_Higher;
+ ctx->Map.pci[ 3 ] = RtemsTaskReqDelete_Pre_CallerPriority_Vital;
ctx->Map.pci[ 3 ] < RtemsTaskReqDelete_Pre_CallerPriority_NA;
++ctx->Map.pci[ 3 ]
) {
diff --git a/testsuites/validation/tc-task-exit.c b/testsuites/validation/tc-task-exit.c
index 6ceaa06bd8..24373f6c47 100644
--- a/testsuites/validation/tc-task-exit.c
+++ b/testsuites/validation/tc-task-exit.c
@@ -3,11 +3,11 @@
/**
* @file
*
- * @ingroup RTEMSTestCaseRtemsTaskReqExit
+ * @ingroup RtemsTaskReqExit
*/
/*
- * Copyright (C) 2021 embedded brains GmbH (http://www.embedded-brains.de)
+ * Copyright (C) 2021 embedded brains GmbH & Co. KG
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
@@ -55,6 +55,7 @@
#include <rtems.h>
#include <rtems/test-scheduler.h>
#include <rtems/score/apimutex.h>
+#include <rtems/score/statesimpl.h>
#include <rtems/score/threaddispatch.h>
#include "tx-support.h"
@@ -62,9 +63,9 @@
#include <rtems/test.h>
/**
- * @defgroup RTEMSTestCaseRtemsTaskReqExit spec:/rtems/task/req/exit
+ * @defgroup RtemsTaskReqExit spec:/rtems/task/req/exit
*
- * @ingroup RTEMSTestSuiteTestsuitesValidationNoClock0
+ * @ingroup TestsuitesValidationNoClock0
*
* @{
*/
@@ -116,10 +117,10 @@ typedef enum {
} RtemsTaskReqExit_Post_TerminateExtensions;
typedef enum {
- RtemsTaskReqExit_Post_Block_Yes,
- RtemsTaskReqExit_Post_Block_Nop,
- RtemsTaskReqExit_Post_Block_NA
-} RtemsTaskReqExit_Post_Block;
+ RtemsTaskReqExit_Post_Zombie_Yes,
+ RtemsTaskReqExit_Post_Zombie_No,
+ RtemsTaskReqExit_Post_Zombie_NA
+} RtemsTaskReqExit_Post_Zombie;
typedef enum {
RtemsTaskReqExit_Post_ID_Valid,
@@ -143,7 +144,7 @@ typedef struct {
uint32_t Post_DeleteExtensions : 1;
uint32_t Post_RestartExtensions : 1;
uint32_t Post_TerminateExtensions : 2;
- uint32_t Post_Block : 2;
+ uint32_t Post_Zombie : 2;
uint32_t Post_ID : 2;
uint32_t Post_Delete : 2;
} RtemsTaskReqExit_Entry;
@@ -644,9 +645,9 @@ static void RtemsTaskReqExit_Post_TerminateExtensions_Check(
}
}
-static void RtemsTaskReqExit_Post_Block_Check(
- RtemsTaskReqExit_Context *ctx,
- RtemsTaskReqExit_Post_Block state
+static void RtemsTaskReqExit_Post_Zombie_Check(
+ RtemsTaskReqExit_Context *ctx,
+ RtemsTaskReqExit_Post_Zombie state
)
{
const T_scheduler_event *event;
@@ -655,20 +656,28 @@ static void RtemsTaskReqExit_Post_Block_Check(
index = 0;
switch ( state ) {
- case RtemsTaskReqExit_Post_Block_Yes: {
+ case RtemsTaskReqExit_Post_Zombie_Yes: {
/*
- * The calling task shall be blocked exactly once by the
- * rtems_task_exit() call.
+ * The thread state of the calling task shall be set to the zombie state
+ * by the rtems_task_exit() call.
*/
event = T_scheduler_next_any( &ctx->scheduler_log.header, &index );
T_eq_int( event->operation, T_SCHEDULER_BLOCK );
T_eq_u32( event->thread->Object.id, ctx->worker_id );
+ T_eq_u32( event->thread->current_state, STATES_ZOMBIE );
if ( ctx->terminating ) {
+ /* The thread waiting for the worker exit was unblocked */
event = T_scheduler_next_any( &ctx->scheduler_log.header, &index );
T_eq_int( event->operation, T_SCHEDULER_UNBLOCK );
T_eq_u32( event->thread->Object.id, ctx->deleter_id );
+ /* Inherited priority was removed */
+ event = T_scheduler_next_any( &ctx->scheduler_log.header, &index );
+ T_eq_int( event->operation, T_SCHEDULER_UPDATE_PRIORITY );
+ T_eq_u32( event->thread->Object.id, ctx->worker_id );
+
+ /* The deleter task suspended itself */
event = T_scheduler_next_any( &ctx->scheduler_log.header, &index );
T_eq_int( event->operation, T_SCHEDULER_BLOCK );
T_eq_u32( event->thread->Object.id, ctx->deleter_id );
@@ -679,15 +688,16 @@ static void RtemsTaskReqExit_Post_Block_Check(
break;
}
- case RtemsTaskReqExit_Post_Block_Nop: {
+ case RtemsTaskReqExit_Post_Zombie_No: {
/*
- * No task shall be blocked by the rtems_task_exit() call.
+ * The thread state of the calling task shall be not modified by the
+ * rtems_task_exit() call.
*/
T_eq_sz( ctx->scheduler_log.header.recorded, 0 );
break;
}
- case RtemsTaskReqExit_Post_Block_NA:
+ case RtemsTaskReqExit_Post_Zombie_NA:
break;
}
}
@@ -859,13 +869,13 @@ RtemsTaskReqExit_Entries[] = {
RtemsTaskReqExit_Post_DeleteExtensions_Nop,
RtemsTaskReqExit_Post_RestartExtensions_Nop,
RtemsTaskReqExit_Post_TerminateExtensions_Yes,
- RtemsTaskReqExit_Post_Block_Yes, RtemsTaskReqExit_Post_ID_Invalid,
+ RtemsTaskReqExit_Post_Zombie_Yes, RtemsTaskReqExit_Post_ID_Invalid,
RtemsTaskReqExit_Post_Delete_NextAllocate },
{ 0, 0, 0, 0, 0, RtemsTaskReqExit_Post_FatalError_Yes,
RtemsTaskReqExit_Post_DeleteExtensions_Nop,
RtemsTaskReqExit_Post_RestartExtensions_Nop,
RtemsTaskReqExit_Post_TerminateExtensions_Nop,
- RtemsTaskReqExit_Post_Block_Nop, RtemsTaskReqExit_Post_ID_Valid,
+ RtemsTaskReqExit_Post_Zombie_No, RtemsTaskReqExit_Post_ID_Valid,
RtemsTaskReqExit_Post_Delete_Nop }
};
@@ -931,7 +941,7 @@ static void RtemsTaskReqExit_TestVariant( RtemsTaskReqExit_Context *ctx )
ctx,
ctx->Map.entry.Post_TerminateExtensions
);
- RtemsTaskReqExit_Post_Block_Check( ctx, ctx->Map.entry.Post_Block );
+ RtemsTaskReqExit_Post_Zombie_Check( ctx, ctx->Map.entry.Post_Zombie );
RtemsTaskReqExit_Post_ID_Check( ctx, ctx->Map.entry.Post_ID );
RtemsTaskReqExit_Post_Delete_Check( ctx, ctx->Map.entry.Post_Delete );
}
diff --git a/testsuites/validation/tc-task-get-affinity.c b/testsuites/validation/tc-task-get-affinity.c
index 8200f9f840..54244560df 100644
--- a/testsuites/validation/tc-task-get-affinity.c
+++ b/testsuites/validation/tc-task-get-affinity.c
@@ -3,11 +3,11 @@
/**
* @file
*
- * @ingroup RTEMSTestCaseRtemsTaskReqGetAffinity
+ * @ingroup RtemsTaskReqGetAffinity
*/
/*
- * Copyright (C) 2021 embedded brains GmbH (http://www.embedded-brains.de)
+ * Copyright (C) 2021 embedded brains GmbH & Co. KG
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
@@ -59,10 +59,9 @@
#include <rtems/test.h>
/**
- * @defgroup RTEMSTestCaseRtemsTaskReqGetAffinity \
- * spec:/rtems/task/req/get-affinity
+ * @defgroup RtemsTaskReqGetAffinity spec:/rtems/task/req/get-affinity
*
- * @ingroup RTEMSTestSuiteTestsuitesValidationNoClock0
+ * @ingroup TestsuitesValidationNoClock0
*
* @{
*/
diff --git a/testsuites/validation/tc-task-get-priority.c b/testsuites/validation/tc-task-get-priority.c
index 83843f4175..83170e8353 100644
--- a/testsuites/validation/tc-task-get-priority.c
+++ b/testsuites/validation/tc-task-get-priority.c
@@ -3,11 +3,11 @@
/**
* @file
*
- * @ingroup RTEMSTestCaseRtemsTaskReqGetPriority
+ * @ingroup RtemsTaskReqGetPriority
*/
/*
- * Copyright (C) 2021 embedded brains GmbH (http://www.embedded-brains.de)
+ * Copyright (C) 2021 embedded brains GmbH & Co. KG
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
@@ -60,10 +60,9 @@
#include <rtems/test.h>
/**
- * @defgroup RTEMSTestCaseRtemsTaskReqGetPriority \
- * spec:/rtems/task/req/get-priority
+ * @defgroup RtemsTaskReqGetPriority spec:/rtems/task/req/get-priority
*
- * @ingroup RTEMSTestSuiteTestsuitesValidationNoClock0
+ * @ingroup TestsuitesValidationNoClock0
*
* @{
*/
diff --git a/testsuites/validation/tc-task-get-scheduler.c b/testsuites/validation/tc-task-get-scheduler.c
index 1cd907cd09..41e0063b53 100644
--- a/testsuites/validation/tc-task-get-scheduler.c
+++ b/testsuites/validation/tc-task-get-scheduler.c
@@ -3,11 +3,11 @@
/**
* @file
*
- * @ingroup RTEMSTestCaseRtemsTaskReqGetScheduler
+ * @ingroup RtemsTaskReqGetScheduler
*/
/*
- * Copyright (C) 2021 embedded brains GmbH (http://www.embedded-brains.de)
+ * Copyright (C) 2021 embedded brains GmbH & Co. KG
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
@@ -59,10 +59,9 @@
#include <rtems/test.h>
/**
- * @defgroup RTEMSTestCaseRtemsTaskReqGetScheduler \
- * spec:/rtems/task/req/get-scheduler
+ * @defgroup RtemsTaskReqGetScheduler spec:/rtems/task/req/get-scheduler
*
- * @ingroup RTEMSTestSuiteTestsuitesValidationNoClock0
+ * @ingroup TestsuitesValidationNoClock0
*
* @{
*/
diff --git a/testsuites/validation/tc-task-ident.c b/testsuites/validation/tc-task-ident.c
index c4247f22cf..214e6e99c5 100644
--- a/testsuites/validation/tc-task-ident.c
+++ b/testsuites/validation/tc-task-ident.c
@@ -3,11 +3,11 @@
/**
* @file
*
- * @ingroup RTEMSTestCaseRtemsTaskReqIdent
+ * @ingroup RtemsTaskReqIdent
*/
/*
- * Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+ * Copyright (C) 2020 embedded brains GmbH & Co. KG
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
@@ -58,9 +58,9 @@
#include <rtems/test.h>
/**
- * @defgroup RTEMSTestCaseRtemsTaskReqIdent spec:/rtems/task/req/ident
+ * @defgroup RtemsTaskReqIdent spec:/rtems/task/req/ident
*
- * @ingroup RTEMSTestSuiteTestsuitesValidationNoClock0
+ * @ingroup TestsuitesValidationNoClock0
*
* @{
*/
@@ -167,7 +167,7 @@ static void RtemsTaskReqIdent_Pre_Name_Prepare(
/*
* While the ``name`` is not equal to RTEMS_WHO_AM_I or ``id`` parameter
* is equal to NULL, the behaviour of rtems_task_ident() shall be
- * specified by /rtems/req/ident.
+ * specified by spec:/rtems/req/ident.
*/
ctx->id = NULL;
/* Preparation performed by RtemsReqIdent_Run() */
diff --git a/testsuites/validation/tc-task-is-suspended.c b/testsuites/validation/tc-task-is-suspended.c
index 0897d28f56..d61c14f560 100644
--- a/testsuites/validation/tc-task-is-suspended.c
+++ b/testsuites/validation/tc-task-is-suspended.c
@@ -3,11 +3,11 @@
/**
* @file
*
- * @ingroup RTEMSTestCaseRtemsTaskReqIsSuspended
+ * @ingroup RtemsTaskReqIsSuspended
*/
/*
- * Copyright (C) 2021 embedded brains GmbH (http://www.embedded-brains.de)
+ * Copyright (C) 2021 embedded brains GmbH & Co. KG
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
@@ -59,10 +59,9 @@
#include <rtems/test.h>
/**
- * @defgroup RTEMSTestCaseRtemsTaskReqIsSuspended \
- * spec:/rtems/task/req/is-suspended
+ * @defgroup RtemsTaskReqIsSuspended spec:/rtems/task/req/is-suspended
*
- * @ingroup RTEMSTestSuiteTestsuitesValidationNoClock0
+ * @ingroup TestsuitesValidationNoClock0
*
* @{
*/
diff --git a/testsuites/validation/tc-task-mode.c b/testsuites/validation/tc-task-mode.c
index f5e225a206..ac045e4176 100644
--- a/testsuites/validation/tc-task-mode.c
+++ b/testsuites/validation/tc-task-mode.c
@@ -3,11 +3,11 @@
/**
* @file
*
- * @ingroup RTEMSTestCaseRtemsTaskReqMode
+ * @ingroup RtemsTaskReqMode
*/
/*
- * Copyright (C) 2021 embedded brains GmbH (http://www.embedded-brains.de)
+ * Copyright (C) 2021 embedded brains GmbH & Co. KG
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
@@ -60,10 +60,10 @@
#include <rtems/test.h>
/**
- * @defgroup RTEMSTestCaseRtemsTaskReqMode spec:/rtems/task/req/mode
+ * @defgroup RtemsTaskReqMode spec:/rtems/task/req/mode
*
- * @ingroup RTEMSTestSuiteTestsuitesValidationNoClock0
- * @ingroup RTEMSTestSuiteTestsuitesValidationOneCpu0
+ * @ingroup TestsuitesValidationNoClock0
+ * @ingroup TestsuitesValidationOneCpu0
*
* @{
*/
diff --git a/testsuites/validation/tc-task-performance.c b/testsuites/validation/tc-task-performance.c
index 2900ac6ca0..3fac8f4f4e 100644
--- a/testsuites/validation/tc-task-performance.c
+++ b/testsuites/validation/tc-task-performance.c
@@ -3,11 +3,11 @@
/**
* @file
*
- * @ingroup RTEMSTestCaseRtemsTaskValPerf
+ * @ingroup RtemsTaskValPerf
*/
/*
- * Copyright (C) 2021 embedded brains GmbH (http://www.embedded-brains.de)
+ * Copyright (C) 2021 embedded brains GmbH & Co. KG
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
@@ -60,9 +60,9 @@
#include <rtems/test.h>
/**
- * @defgroup RTEMSTestCaseRtemsTaskValPerf spec:/rtems/task/val/perf
+ * @defgroup RtemsTaskValPerf spec:/rtems/task/val/perf
*
- * @ingroup RTEMSTestSuiteTestsuitesPerformanceNoClock0
+ * @ingroup TestsuitesPerformanceNoClock0
*
* @brief This test case provides a context to run @ref RTEMSAPIClassicTasks
* performance tests.
@@ -113,13 +113,13 @@ typedef struct {
static RtemsTaskValPerf_Context
RtemsTaskValPerf_Instance;
-typedef RtemsTaskValPerf_Context Context;
+#define EVENT_RESTART RTEMS_EVENT_0
+
+#define EVENT_SET_END RTEMS_EVENT_1
-enum {
- EVENT_RESTART = RTEMS_EVENT_0,
- EVENT_SET_END = RTEMS_EVENT_1,
- EVENT_BUSY = RTEMS_EVENT_2
-} Event;
+#define EVENT_BUSY RTEMS_EVENT_2
+
+typedef RtemsTaskValPerf_Context Context;
RTEMS_ALIGNED( RTEMS_TASK_STORAGE_ALIGNMENT ) static char task_storage[
RTEMS_TASK_STORAGE_SIZE(
@@ -226,6 +226,12 @@ static T_fixture RtemsTaskValPerf_Fixture = {
};
/**
+ * @defgroup RtemsTaskReqPerfConstruct spec:/rtems/task/req/perf-construct
+ *
+ * @{
+ */
+
+/**
* @brief Construct a worker task.
*/
static void RtemsTaskReqPerfConstruct_Body( RtemsTaskValPerf_Context *ctx )
@@ -274,6 +280,14 @@ static bool RtemsTaskReqPerfConstruct_Teardown_Wrap(
return RtemsTaskReqPerfConstruct_Teardown( ctx, delta, tic, toc, retry );
}
+/** @} */
+
+/**
+ * @defgroup RtemsTaskReqPerfRestart spec:/rtems/task/req/perf-restart
+ *
+ * @{
+ */
+
/**
* @brief Create and start a worker task.
*/
@@ -340,6 +354,15 @@ static void RtemsTaskReqPerfRestart_Cleanup( RtemsTaskValPerf_Context *ctx )
DeleteTask( ctx->worker_id );
}
+/** @} */
+
+/**
+ * @defgroup RtemsTaskReqPerfRestartPreempt \
+ * spec:/rtems/task/req/perf-restart-preempt
+ *
+ * @{
+ */
+
/**
* @brief Create and start a worker task.
*/
@@ -422,6 +445,14 @@ static void RtemsTaskReqPerfRestartPreempt_Cleanup(
DeleteTask( ctx->worker_id );
}
+/** @} */
+
+/**
+ * @defgroup RtemsTaskReqPerfRestartSelf spec:/rtems/task/req/perf-restart-self
+ *
+ * @{
+ */
+
/**
* @brief Create and start a worker task.
*/
@@ -492,8 +523,17 @@ static void RtemsTaskReqPerfRestartSelf_Cleanup(
DeleteTask( ctx->worker_id );
}
+/** @} */
+
#if defined(RTEMS_SMP)
/**
+ * @defgroup RtemsTaskReqPerfSetSchedulerMove \
+ * spec:/rtems/task/req/perf-set-scheduler-move
+ *
+ * @{
+ */
+
+/**
* @brief Set the runner affinity.
*/
static void RtemsTaskReqPerfSetSchedulerMove_Prepare(
@@ -572,9 +612,18 @@ static void RtemsTaskReqPerfSetSchedulerMove_Cleanup(
{
SetSelfAffinityOne( 0 );
}
+
+/** @} */
#endif
/**
+ * @defgroup RtemsTaskReqPerfSetSchedulerNop \
+ * spec:/rtems/task/req/perf-set-scheduler-nop
+ *
+ * @{
+ */
+
+/**
* @brief Set the scheduler of the runner.
*/
static void RtemsTaskReqPerfSetSchedulerNop_Body(
@@ -632,8 +681,17 @@ static bool RtemsTaskReqPerfSetSchedulerNop_Teardown_Wrap(
);
}
+/** @} */
+
#if defined(RTEMS_SMP)
/**
+ * @defgroup RtemsTaskReqPerfSetSchedulerOther \
+ * spec:/rtems/task/req/perf-set-scheduler-other
+ *
+ * @{
+ */
+
+/**
* @brief Create and start a worker task for scheduler B.
*/
static void RtemsTaskReqPerfSetSchedulerOther_Prepare(
@@ -715,10 +773,19 @@ static void RtemsTaskReqPerfSetSchedulerOther_Cleanup(
{
DeleteTask( ctx->worker_id );
}
+
+/** @} */
#endif
#if defined(RTEMS_SMP)
/**
+ * @defgroup RtemsTaskReqPerfSetSchedulerPreempt \
+ * spec:/rtems/task/req/perf-set-scheduler-preempt
+ *
+ * @{
+ */
+
+/**
* @brief Create and start two worker tasks for scheduler B. Make the second
* worker busy.
*/
@@ -834,9 +901,17 @@ static void RtemsTaskReqPerfSetSchedulerPreempt_Cleanup(
DeleteTask( ctx->worker_2_id );
DeleteTask( ctx->worker_id );
}
+
+/** @} */
#endif
/**
+ * @defgroup RtemsTaskReqPerfStart spec:/rtems/task/req/perf-start
+ *
+ * @{
+ */
+
+/**
* @brief Create a worker task.
*/
static void RtemsTaskReqPerfStart_Setup( RtemsTaskValPerf_Context *ctx )
@@ -904,6 +979,15 @@ static bool RtemsTaskReqPerfStart_Teardown_Wrap(
return RtemsTaskReqPerfStart_Teardown( ctx, delta, tic, toc, retry );
}
+/** @} */
+
+/**
+ * @defgroup RtemsTaskReqPerfStartPreempt \
+ * spec:/rtems/task/req/perf-start-preempt
+ *
+ * @{
+ */
+
/**
* @brief Create a worker task.
*/
@@ -975,6 +1059,8 @@ static bool RtemsTaskReqPerfStartPreempt_Teardown_Wrap(
return RtemsTaskReqPerfStartPreempt_Teardown( ctx, delta, tic, toc, retry );
}
+/** @} */
+
/**
* @fn void T_case_body_RtemsTaskValPerf( void )
*/
diff --git a/testsuites/validation/tc-task-restart.c b/testsuites/validation/tc-task-restart.c
index 1c7528e961..c915f01a49 100644
--- a/testsuites/validation/tc-task-restart.c
+++ b/testsuites/validation/tc-task-restart.c
@@ -3,11 +3,11 @@
/**
* @file
*
- * @ingroup RTEMSTestCaseRtemsTaskReqRestart
+ * @ingroup RtemsTaskReqRestart
*/
/*
- * Copyright (C) 2021 embedded brains GmbH (http://www.embedded-brains.de)
+ * Copyright (C) 2021 embedded brains GmbH & Co. KG
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
@@ -65,9 +65,9 @@
#include <rtems/test.h>
/**
- * @defgroup RTEMSTestCaseRtemsTaskReqRestart spec:/rtems/task/req/restart
+ * @defgroup RtemsTaskReqRestart spec:/rtems/task/req/restart
*
- * @ingroup RTEMSTestSuiteTestsuitesValidationNoClock0
+ * @ingroup TestsuitesValidationNoClock0
*
* @{
*/
@@ -251,7 +251,7 @@ typedef struct {
/**
* @brief This member provides a jump context to resume a thread dispatch.
*/
- jmp_buf thread_dispatch_context;;
+ jmp_buf thread_dispatch_context;
/**
* @brief This member provides the context to wrap thread queue operations.
@@ -319,13 +319,13 @@ typedef struct {
/**
* @brief This member contains extension calls.
*/
- ExtensionCalls calls;;
+ ExtensionCalls calls;
/**
* @brief This member contains extension calls after the rtems_task_restart()
* call.
*/
- ExtensionCalls calls_after_restart;;
+ ExtensionCalls calls_after_restart;
/**
* @brief This member contains the actual argument passed to the entry point.
@@ -1424,7 +1424,7 @@ static void RtemsTaskReqRestart_Post_State_Check(
T_eq_ptr( event->thread, ctx->worker_tcb );
}
- if ( !ctx->real_priority_is_initial ) {
+ if ( !ctx->real_priority_is_initial && !ctx->terminating ) {
event = T_scheduler_next_any( &ctx->scheduler_log.header, &index );
T_eq_int( event->operation, T_SCHEDULER_UPDATE_PRIORITY );
T_eq_ptr( event->thread, ctx->worker_tcb );
@@ -1464,7 +1464,7 @@ static void RtemsTaskReqRestart_Post_State_Check(
}
}
- if ( !ctx->real_priority_is_initial ) {
+ if ( !ctx->real_priority_is_initial && !ctx->terminating ) {
event = T_scheduler_next_any( &ctx->scheduler_log.header, &index );
T_eq_int( event->operation, T_SCHEDULER_UPDATE_PRIORITY );
T_eq_ptr( event->thread, ctx->worker_tcb );
@@ -1504,7 +1504,7 @@ static void RtemsTaskReqRestart_Post_State_Check(
}
}
- if ( !ctx->real_priority_is_initial ) {
+ if ( !ctx->real_priority_is_initial && !ctx->terminating ) {
event = T_scheduler_next_any( &ctx->scheduler_log.header, &index );
T_eq_int( event->operation, T_SCHEDULER_UPDATE_PRIORITY );
T_eq_ptr( event->thread, ctx->worker_tcb );
diff --git a/testsuites/validation/tc-task-resume.c b/testsuites/validation/tc-task-resume.c
index f7c63234d6..d440b52bd5 100644
--- a/testsuites/validation/tc-task-resume.c
+++ b/testsuites/validation/tc-task-resume.c
@@ -3,11 +3,11 @@
/**
* @file
*
- * @ingroup RTEMSTestCaseRtemsTaskReqResume
+ * @ingroup RtemsTaskReqResume
*/
/*
- * Copyright (C) 2021 embedded brains GmbH (http://www.embedded-brains.de)
+ * Copyright (C) 2021 embedded brains GmbH & Co. KG
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
@@ -59,9 +59,9 @@
#include <rtems/test.h>
/**
- * @defgroup RTEMSTestCaseRtemsTaskReqResume spec:/rtems/task/req/resume
+ * @defgroup RtemsTaskReqResume spec:/rtems/task/req/resume
*
- * @ingroup RTEMSTestSuiteTestsuitesValidationNoClock0
+ * @ingroup TestsuitesValidationNoClock0
*
* @{
*/
diff --git a/testsuites/validation/tc-task-set-affinity.c b/testsuites/validation/tc-task-set-affinity.c
index ffa40fcf58..9502d009e1 100644
--- a/testsuites/validation/tc-task-set-affinity.c
+++ b/testsuites/validation/tc-task-set-affinity.c
@@ -3,11 +3,11 @@
/**
* @file
*
- * @ingroup RTEMSTestCaseRtemsTaskReqSetAffinity
+ * @ingroup RtemsTaskReqSetAffinity
*/
/*
- * Copyright (C) 2021 embedded brains GmbH (http://www.embedded-brains.de)
+ * Copyright (C) 2021 embedded brains GmbH & Co. KG
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
@@ -60,11 +60,10 @@
#include <rtems/test.h>
/**
- * @defgroup RTEMSTestCaseRtemsTaskReqSetAffinity \
- * spec:/rtems/task/req/set-affinity
+ * @defgroup RtemsTaskReqSetAffinity spec:/rtems/task/req/set-affinity
*
- * @ingroup RTEMSTestSuiteTestsuitesValidationNoClock0
- * @ingroup RTEMSTestSuiteTestsuitesValidationOneCpu0
+ * @ingroup TestsuitesValidationNoClock0
+ * @ingroup TestsuitesValidationOneCpu0
*
* @{
*/
@@ -132,7 +131,7 @@ typedef struct {
/**
* @brief This member provides the scheduler operation records.
*/
- T_scheduler_log_2 scheduler_log;;
+ T_scheduler_log_2 scheduler_log;
/**
* @brief This member provides the object referenced by the ``cpuset``
diff --git a/testsuites/validation/tc-task-set-priority.c b/testsuites/validation/tc-task-set-priority.c
index cbe4bfda2b..4094aaedfb 100644
--- a/testsuites/validation/tc-task-set-priority.c
+++ b/testsuites/validation/tc-task-set-priority.c
@@ -3,11 +3,11 @@
/**
* @file
*
- * @ingroup RTEMSTestCaseRtemsTaskReqSetPriority
+ * @ingroup RtemsTaskReqSetPriority
*/
/*
- * Copyright (C) 2021 embedded brains GmbH (http://www.embedded-brains.de)
+ * Copyright (C) 2021 embedded brains GmbH & Co. KG
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
@@ -59,11 +59,10 @@
#include <rtems/test.h>
/**
- * @defgroup RTEMSTestCaseRtemsTaskReqSetPriority \
- * spec:/rtems/task/req/set-priority
+ * @defgroup RtemsTaskReqSetPriority spec:/rtems/task/req/set-priority
*
- * @ingroup RTEMSTestSuiteTestsuitesValidationNoClock0
- * @ingroup RTEMSTestSuiteTestsuitesValidationOneCpu0
+ * @ingroup TestsuitesValidationNoClock0
+ * @ingroup TestsuitesValidationOneCpu0
*
* @{
*/
diff --git a/testsuites/validation/tc-task-set-scheduler.c b/testsuites/validation/tc-task-set-scheduler.c
index 018aa2c338..174aa55736 100644
--- a/testsuites/validation/tc-task-set-scheduler.c
+++ b/testsuites/validation/tc-task-set-scheduler.c
@@ -3,11 +3,11 @@
/**
* @file
*
- * @ingroup RTEMSTestCaseRtemsTaskReqSetScheduler
+ * @ingroup RtemsTaskReqSetScheduler
*/
/*
- * Copyright (C) 2021 embedded brains GmbH (http://www.embedded-brains.de)
+ * Copyright (C) 2021 embedded brains GmbH & Co. KG
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
@@ -61,10 +61,9 @@
#include <rtems/test.h>
/**
- * @defgroup RTEMSTestCaseRtemsTaskReqSetScheduler \
- * spec:/rtems/task/req/set-scheduler
+ * @defgroup RtemsTaskReqSetScheduler spec:/rtems/task/req/set-scheduler
*
- * @ingroup RTEMSTestSuiteTestsuitesValidationNoClock0
+ * @ingroup TestsuitesValidationNoClock0
*
* @{
*/
@@ -267,7 +266,7 @@ typedef struct {
/**
* @brief This member contains the identifier of the new scheduler.
*/
- rtems_id new_scheduler;;
+ rtems_id new_scheduler;
/**
* @brief This member contains the new priorities of the task.
diff --git a/testsuites/validation/tc-task-smp.c b/testsuites/validation/tc-task-smp.c
index 51165153f5..9bfdc4fd73 100644
--- a/testsuites/validation/tc-task-smp.c
+++ b/testsuites/validation/tc-task-smp.c
@@ -3,11 +3,11 @@
/**
* @file
*
- * @ingroup RTEMSTestCaseRtemsTaskValSmp
+ * @ingroup RtemsTaskValSmp
*/
/*
- * Copyright (C) 2022 embedded brains GmbH (http://www.embedded-brains.de)
+ * Copyright (C) 2022 embedded brains GmbH & Co. KG
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
@@ -60,9 +60,9 @@
#include <rtems/test.h>
/**
- * @defgroup RTEMSTestCaseRtemsTaskValSmp spec:/rtems/task/val/smp
+ * @defgroup RtemsTaskValSmp spec:/rtems/task/val/smp
*
- * @ingroup RTEMSTestSuiteTestsuitesValidationSmpOnly0
+ * @ingroup TestsuitesValidationSmpOnly0
*
* @brief This test case collection provides SMP-specific validation test cases
* for requirements of the @ref RTEMSAPIClassicTasks.
diff --git a/testsuites/validation/tc-task-start.c b/testsuites/validation/tc-task-start.c
index ffb0012439..235d9f0827 100644
--- a/testsuites/validation/tc-task-start.c
+++ b/testsuites/validation/tc-task-start.c
@@ -3,11 +3,11 @@
/**
* @file
*
- * @ingroup RTEMSTestCaseRtemsTaskReqStart
+ * @ingroup RtemsTaskReqStart
*/
/*
- * Copyright (C) 2021 embedded brains GmbH (http://www.embedded-brains.de)
+ * Copyright (C) 2021 embedded brains GmbH & Co. KG
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
@@ -60,9 +60,9 @@
#include <rtems/test.h>
/**
- * @defgroup RTEMSTestCaseRtemsTaskReqStart spec:/rtems/task/req/start
+ * @defgroup RtemsTaskReqStart spec:/rtems/task/req/start
*
- * @ingroup RTEMSTestSuiteTestsuitesValidationNoClock0
+ * @ingroup TestsuitesValidationNoClock0
*
* @{
*/
diff --git a/testsuites/validation/tc-task-storage-size.c b/testsuites/validation/tc-task-storage-size.c
index 6ad8b72cbe..29ac53c237 100644
--- a/testsuites/validation/tc-task-storage-size.c
+++ b/testsuites/validation/tc-task-storage-size.c
@@ -3,11 +3,11 @@
/**
* @file
*
- * @ingroup RTEMSTestCaseRtemsTaskReqStorageSize
+ * @ingroup RtemsTaskReqStorageSize
*/
/*
- * Copyright (C) 2021 embedded brains GmbH (http://www.embedded-brains.de)
+ * Copyright (C) 2021 embedded brains GmbH & Co. KG
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
@@ -59,10 +59,9 @@
#include <rtems/test.h>
/**
- * @defgroup RTEMSTestCaseRtemsTaskReqStorageSize \
- * spec:/rtems/task/req/storage-size
+ * @defgroup RtemsTaskReqStorageSize spec:/rtems/task/req/storage-size
*
- * @ingroup RTEMSTestSuiteTestsuitesValidationNoClock0
+ * @ingroup TestsuitesValidationNoClock0
*
* @{
*/
diff --git a/testsuites/validation/tc-task-suspend.c b/testsuites/validation/tc-task-suspend.c
index b56b420120..123e223fb9 100644
--- a/testsuites/validation/tc-task-suspend.c
+++ b/testsuites/validation/tc-task-suspend.c
@@ -3,11 +3,11 @@
/**
* @file
*
- * @ingroup RTEMSTestCaseRtemsTaskReqSuspend
+ * @ingroup RtemsTaskReqSuspend
*/
/*
- * Copyright (C) 2021 embedded brains GmbH (http://www.embedded-brains.de)
+ * Copyright (C) 2021 embedded brains GmbH & Co. KG
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
@@ -59,9 +59,9 @@
#include <rtems/test.h>
/**
- * @defgroup RTEMSTestCaseRtemsTaskReqSuspend spec:/rtems/task/req/suspend
+ * @defgroup RtemsTaskReqSuspend spec:/rtems/task/req/suspend
*
- * @ingroup RTEMSTestSuiteTestsuitesValidationNoClock0
+ * @ingroup TestsuitesValidationNoClock0
*
* @{
*/
diff --git a/testsuites/validation/tc-task-wake-after.c b/testsuites/validation/tc-task-wake-after.c
index 8966a14648..ba12d21c85 100644
--- a/testsuites/validation/tc-task-wake-after.c
+++ b/testsuites/validation/tc-task-wake-after.c
@@ -3,11 +3,11 @@
/**
* @file
*
- * @ingroup RTEMSTestCaseRtemsTaskReqWakeAfter
+ * @ingroup RtemsTaskReqWakeAfter
*/
/*
- * Copyright (C) 2021 embedded brains GmbH (http://www.embedded-brains.de)
+ * Copyright (C) 2021 embedded brains GmbH & Co. KG
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
@@ -62,10 +62,10 @@
#include <rtems/test.h>
/**
- * @defgroup RTEMSTestCaseRtemsTaskReqWakeAfter spec:/rtems/task/req/wake-after
+ * @defgroup RtemsTaskReqWakeAfter spec:/rtems/task/req/wake-after
*
- * @ingroup RTEMSTestSuiteTestsuitesValidationNoClock0
- * @ingroup RTEMSTestSuiteTestsuitesValidationOneCpu0
+ * @ingroup TestsuitesValidationNoClock0
+ * @ingroup TestsuitesValidationOneCpu0
*
* @{
*/
@@ -122,29 +122,29 @@ typedef struct {
/**
* @brief This member provides the scheduler operation records.
*/
- T_scheduler_log_4 scheduler_log;;
+ T_scheduler_log_4 scheduler_log;
/**
* @brief This member contains the clock tick value before the
* rtems_task_wake_after() call.
*/
- uint64_t now;;
+ uint64_t now;
/**
* @brief This member contains the worker task identifier.
*/
- rtems_id worker_id;;
+ rtems_id worker_id;
/**
* @brief If this member is true, then the worker shall be suspended during
* the rtems_task_wake_after() call.
*/
- bool suspended;;
+ bool suspended;
/**
* @brief This member contains the timer information of the worker task.
*/
- TaskTimerInfo timer_info;;
+ TaskTimerInfo timer_info;
/**
* @brief This member contains the return value of the
diff --git a/testsuites/validation/tc-task-wake-when.c b/testsuites/validation/tc-task-wake-when.c
index 223fbfd55f..bb31fded26 100644
--- a/testsuites/validation/tc-task-wake-when.c
+++ b/testsuites/validation/tc-task-wake-when.c
@@ -3,11 +3,11 @@
/**
* @file
*
- * @ingroup RTEMSTestCaseRtemsTaskReqWakeWhen
+ * @ingroup RtemsTaskReqWakeWhen
*/
/*
- * Copyright (C) 2021 embedded brains GmbH (http://www.embedded-brains.de)
+ * Copyright (C) 2021 embedded brains GmbH & Co. KG
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
@@ -62,9 +62,9 @@
#include <rtems/test.h>
/**
- * @defgroup RTEMSTestCaseRtemsTaskReqWakeWhen spec:/rtems/task/req/wake-when
+ * @defgroup RtemsTaskReqWakeWhen spec:/rtems/task/req/wake-when
*
- * @ingroup RTEMSTestSuiteTestsuitesValidationNoClock0
+ * @ingroup TestsuitesValidationNoClock0
*
* @{
*/
@@ -131,23 +131,23 @@ typedef struct {
/**
* @brief This member provides the scheduler operation records.
*/
- T_scheduler_log_4 scheduler_log;;
+ T_scheduler_log_4 scheduler_log;
/**
* @brief This member contains the CLOCK_REALTIME value before the
* rtems_task_wake_when() call.
*/
- struct timespec now;;
+ struct timespec now;
/**
* @brief This member contains the worker task identifier.
*/
- rtems_id worker_id;;
+ rtems_id worker_id;
/**
* @brief This member contains the timer information of the worker task.
*/
- TaskTimerInfo timer_info;;
+ TaskTimerInfo timer_info;
/**
* @brief This member provides the object referenced by the ``time_buffer``
diff --git a/testsuites/validation/tc-task.c b/testsuites/validation/tc-task.c
index 11d37e7017..5ab96445ed 100644
--- a/testsuites/validation/tc-task.c
+++ b/testsuites/validation/tc-task.c
@@ -3,11 +3,11 @@
/**
* @file
*
- * @ingroup RTEMSTestCaseRtemsTaskValTask
+ * @ingroup RtemsTaskValTask
*/
/*
- * Copyright (C) 2021, 2022 embedded brains GmbH (http://www.embedded-brains.de)
+ * Copyright (C) 2021, 2022 embedded brains GmbH & Co. KG
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
@@ -62,9 +62,9 @@
#include <rtems/test.h>
/**
- * @defgroup RTEMSTestCaseRtemsTaskValTask spec:/rtems/task/val/task
+ * @defgroup RtemsTaskValTask spec:/rtems/task/val/task
*
- * @ingroup RTEMSTestSuiteTestsuitesValidationNoClock0
+ * @ingroup TestsuitesValidationNoClock0
*
* @brief This test case collection provides validation test cases for
* requirements of the @ref RTEMSAPIClassicTasks.
@@ -303,7 +303,7 @@ static void RtemsTaskValTask_Action_8( void )
static void RtemsTaskValTask_Action_9( void )
{
rtems_status_code sc;
- rtems_status_code id;
+ rtems_id id;
/*
* Create a task. Check that the home scheduler of the created task is
diff --git a/testsuites/validation/tc-terminate.c b/testsuites/validation/tc-terminate.c
index a3f55fcc6c..b533092c19 100644
--- a/testsuites/validation/tc-terminate.c
+++ b/testsuites/validation/tc-terminate.c
@@ -3,11 +3,11 @@
/**
* @file
*
- * @ingroup RTEMSTestCaseScoreInterrValTerminate
+ * @ingroup ScoreInterrValTerminate
*/
/*
- * Copyright (C) 2021 embedded brains GmbH (http://www.embedded-brains.de)
+ * Copyright (C) 2021 embedded brains GmbH & Co. KG
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
@@ -56,8 +56,8 @@
#include <setjmp.h>
#include <string.h>
#include <rtems/bspIo.h>
+#include <rtems/test-info.h>
#include <rtems/score/atomic.h>
-#include <rtems/score/io.h>
#include <rtems/score/percpu.h>
#include <rtems/score/sysstate.h>
@@ -66,10 +66,9 @@
#include <rtems/test.h>
/**
- * @defgroup RTEMSTestCaseScoreInterrValTerminate \
- * spec:/score/interr/val/terminate
+ * @defgroup ScoreInterrValTerminate spec:/score/interr/val/terminate
*
- * @ingroup RTEMSTestSuiteTestsuitesTerminate
+ * @ingroup TestsuitesTerminate
*
* @brief Tests system termination procedure.
*
@@ -149,8 +148,8 @@ void __wrap__CPU_Fatal_halt( uint32_t source, CPU_Uint32ptr code )
halt_code = code;
longjmp( before_terminate, 1 );
} else {
-#if defined(RTEMS_COVERAGE)
- _IO_Dump_gcov_info( rtems_put_char, NULL );
+#if defined(RTEMS_GCOV_COVERAGE)
+ rtems_test_gcov_dump_info();
#endif
__real__CPU_Fatal_halt( source, code );
}
diff --git a/testsuites/validation/tc-thread-idle-body-no-return.c b/testsuites/validation/tc-thread-idle-body-no-return.c
new file mode 100644
index 0000000000..19c86dad99
--- /dev/null
+++ b/testsuites/validation/tc-thread-idle-body-no-return.c
@@ -0,0 +1,205 @@
+/* SPDX-License-Identifier: BSD-2-Clause */
+
+/**
+ * @file
+ *
+ * @ingroup ScoreThreadValIdleBodyNoReturn
+ */
+
+/*
+ * Copyright (C) 2022 embedded brains GmbH & Co. KG
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ */
+
+/*
+ * This file is part of the RTEMS quality process and was automatically
+ * generated. If you find something that needs to be fixed or
+ * worded better please post a report or patch to an RTEMS mailing list
+ * or raise a bug report:
+ *
+ * https://www.rtems.org/bugs.html
+ *
+ * For information on updating and regenerating please refer to the How-To
+ * section in the Software Requirements Engineering chapter of the
+ * RTEMS Software Engineering manual. The manual is provided as a part of
+ * a release. For development sources please refer to the online
+ * documentation at:
+ *
+ * https://docs.rtems.org
+ */
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#include <bsp.h>
+
+#include "tx-support.h"
+
+#include <rtems/test.h>
+
+/**
+ * @defgroup ScoreThreadValIdleBodyNoReturn \
+ * spec:/score/thread/val/idle-body-no-return
+ *
+ * @ingroup TestsuitesValidation0
+ *
+ * @brief Tests thread idle body behaviour.
+ *
+ * This test case performs the following actions:
+ *
+ * - Create threads which execute an thread idle body. Check that the thread
+ * idle body does not return. If it would return, then an
+ * INTERNAL_ERROR_THREAD_EXITTED fatal error would occur.
+ *
+ * - Check that the CPU port thread idle body does not return.
+ *
+ * - Where the BSP provides an idle thread body, check that it does not
+ * return.
+ *
+ * - Clean up all used resources.
+ *
+ * @{
+ */
+
+/**
+ * @brief Test context for spec:/score/thread/val/idle-body-no-return test
+ * case.
+ */
+typedef struct {
+ /**
+ * @brief This member contains a counter.
+ */
+ uint32_t counter;
+} ScoreThreadValIdleBodyNoReturn_Context;
+
+static ScoreThreadValIdleBodyNoReturn_Context
+ ScoreThreadValIdleBodyNoReturn_Instance;
+
+typedef ScoreThreadValIdleBodyNoReturn_Context Context;
+
+static void CheckIdleBody( Context *ctx, rtems_task_entry entry )
+{
+ rtems_id id;
+ rtems_interval interval;
+ rtems_status_code sc;
+
+ ctx->counter = 0;
+ id = CreateTask( "WORK", PRIO_LOW );
+ StartTask( id, entry, ctx );
+
+ /*
+ * With optimization disabled, coverage enabled, SMP enabled and a slow
+ * target, things may take some time.
+ */
+ interval = 1;
+ while ( ctx->counter == 0 && interval <= 1024 ) {
+
+ sc = rtems_task_wake_after( interval );
+ T_rsc_success( sc );
+
+ interval *= 2;
+ }
+
+ sc = rtems_task_wake_after( interval );
+ T_rsc_success( sc );
+
+ T_eq_u32( ctx->counter, 1 );
+ DeleteTask( id );
+}
+
+static void CPUThreadIdleBody( rtems_task_argument arg )
+{
+ Context *ctx;
+
+ ctx = (Context *) arg;
+ ++ctx->counter;
+
+ (void) _CPU_Thread_Idle_body( 0 );
+}
+
+#if defined(BSP_IDLE_TASK_BODY)
+static void BSPIdleTaskBody( rtems_task_argument arg )
+{
+ Context *ctx;
+
+ ctx = (Context *) arg;
+ ++ctx->counter;
+
+ (void) BSP_IDLE_TASK_BODY( 0 );
+}
+#endif
+
+static T_fixture ScoreThreadValIdleBodyNoReturn_Fixture = {
+ .setup = NULL,
+ .stop = NULL,
+ .teardown = NULL,
+ .scope = NULL,
+ .initial_context = &ScoreThreadValIdleBodyNoReturn_Instance
+};
+
+/**
+ * @brief Create threads which execute an thread idle body. Check that the
+ * thread idle body does not return. If it would return, then an
+ * INTERNAL_ERROR_THREAD_EXITTED fatal error would occur.
+ */
+static void ScoreThreadValIdleBodyNoReturn_Action_0(
+ ScoreThreadValIdleBodyNoReturn_Context *ctx
+)
+{
+ SetSelfPriority( PRIO_NORMAL );
+
+ /*
+ * Check that the CPU port thread idle body does not return.
+ */
+ CheckIdleBody( ctx, CPUThreadIdleBody );
+
+ /*
+ * Where the BSP provides an idle thread body, check that it does not return.
+ */
+ #if defined(BSP_IDLE_TASK_BODY)
+ CheckIdleBody( ctx, BSPIdleTaskBody );
+ #endif
+
+ /*
+ * Clean up all used resources.
+ */
+ RestoreRunnerPriority();
+}
+
+/**
+ * @fn void T_case_body_ScoreThreadValIdleBodyNoReturn( void )
+ */
+T_TEST_CASE_FIXTURE(
+ ScoreThreadValIdleBodyNoReturn,
+ &ScoreThreadValIdleBodyNoReturn_Fixture
+)
+{
+ ScoreThreadValIdleBodyNoReturn_Context *ctx;
+
+ ctx = T_fixture_context();
+
+ ScoreThreadValIdleBodyNoReturn_Action_0( ctx );
+}
+
+/** @} */
diff --git a/testsuites/validation/tc-timecounter-get-smp.c b/testsuites/validation/tc-timecounter-get-smp.c
index 520d532c7b..d8c9f598dd 100644
--- a/testsuites/validation/tc-timecounter-get-smp.c
+++ b/testsuites/validation/tc-timecounter-get-smp.c
@@ -3,11 +3,11 @@
/**
* @file
*
- * @ingroup RTEMSTestCaseScoreTimecounterValGetSmp
+ * @ingroup ScoreTimecounterValGetSmp
*/
/*
- * Copyright (C) 2021 embedded brains GmbH (http://www.embedded-brains.de)
+ * Copyright (C) 2021 embedded brains GmbH & Co. KG
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
@@ -63,10 +63,9 @@
#include <rtems/test.h>
/**
- * @defgroup RTEMSTestCaseScoreTimecounterValGetSmp \
- * spec:/score/timecounter/val/get-smp
+ * @defgroup ScoreTimecounterValGetSmp spec:/score/timecounter/val/get-smp
*
- * @ingroup RTEMSTestSuiteTestsuitesValidationTimecounterSmp0
+ * @ingroup TestsuitesValidationTimecounterSmp0
*
* @brief Tests directives to get a time value.
*
diff --git a/testsuites/validation/tc-timecounter-get.c b/testsuites/validation/tc-timecounter-get.c
index 7ab746ab86..cd2464399e 100644
--- a/testsuites/validation/tc-timecounter-get.c
+++ b/testsuites/validation/tc-timecounter-get.c
@@ -3,11 +3,11 @@
/**
* @file
*
- * @ingroup RTEMSTestCaseScoreTimecounterValGet
+ * @ingroup ScoreTimecounterValGet
*/
/*
- * Copyright (C) 2021 embedded brains GmbH (http://www.embedded-brains.de)
+ * Copyright (C) 2021 embedded brains GmbH & Co. KG
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
@@ -62,10 +62,9 @@
#include <rtems/test.h>
/**
- * @defgroup RTEMSTestCaseScoreTimecounterValGet \
- * spec:/score/timecounter/val/get
+ * @defgroup ScoreTimecounterValGet spec:/score/timecounter/val/get
*
- * @ingroup RTEMSTestSuiteTestsuitesValidationTimecounter1
+ * @ingroup TestsuitesValidationTimecounter1
*
* @brief Tests directives to get a time value.
*
diff --git a/testsuites/validation/tc-timecounter-install.c b/testsuites/validation/tc-timecounter-install.c
index 3189f37a23..14babc5b94 100644
--- a/testsuites/validation/tc-timecounter-install.c
+++ b/testsuites/validation/tc-timecounter-install.c
@@ -3,11 +3,11 @@
/**
* @file
*
- * @ingroup RTEMSTestCaseScoreTimecounterValInstall
+ * @ingroup ScoreTimecounterValInstall
*/
/*
- * Copyright (C) 2021 embedded brains GmbH (http://www.embedded-brains.de)
+ * Copyright (C) 2021 embedded brains GmbH & Co. KG
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
@@ -62,10 +62,9 @@
#include <rtems/test.h>
/**
- * @defgroup RTEMSTestCaseScoreTimecounterValInstall \
- * spec:/score/timecounter/val/install
+ * @defgroup ScoreTimecounterValInstall spec:/score/timecounter/val/install
*
- * @ingroup RTEMSTestSuiteTestsuitesValidationTimecounter0
+ * @ingroup TestsuitesValidationTimecounter0
*
* @brief Tests timecounter installation related functions and directives of
* the Clock Manager.
diff --git a/testsuites/validation/tc-timer-cancel.c b/testsuites/validation/tc-timer-cancel.c
index 223848fdee..3030045e9c 100644
--- a/testsuites/validation/tc-timer-cancel.c
+++ b/testsuites/validation/tc-timer-cancel.c
@@ -3,11 +3,11 @@
/**
* @file
*
- * @ingroup RTEMSTestCaseRtemsTimerReqCancel
+ * @ingroup RtemsTimerReqCancel
*/
/*
- * Copyright (C) 2021 embedded brains GmbH (http://www.embedded-brains.de)
+ * Copyright (C) 2021 embedded brains GmbH & Co. KG
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
@@ -59,9 +59,9 @@
#include <rtems/test.h>
/**
- * @defgroup RTEMSTestCaseRtemsTimerReqCancel spec:/rtems/timer/req/cancel
+ * @defgroup RtemsTimerReqCancel spec:/rtems/timer/req/cancel
*
- * @ingroup RTEMSTestSuiteTestsuitesValidationNoClock0
+ * @ingroup TestsuitesValidationNoClock0
*
* @{
*/
diff --git a/testsuites/validation/tc-timer-create.c b/testsuites/validation/tc-timer-create.c
index dea3a40175..416f5401d0 100644
--- a/testsuites/validation/tc-timer-create.c
+++ b/testsuites/validation/tc-timer-create.c
@@ -3,11 +3,11 @@
/**
* @file
*
- * @ingroup RTEMSTestCaseRtemsTimerReqCreate
+ * @ingroup RtemsTimerReqCreate
*/
/*
- * Copyright (C) 2021 embedded brains GmbH (http://www.embedded-brains.de)
+ * Copyright (C) 2021 embedded brains GmbH & Co. KG
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
@@ -60,9 +60,9 @@
#include <rtems/test.h>
/**
- * @defgroup RTEMSTestCaseRtemsTimerReqCreate spec:/rtems/timer/req/create
+ * @defgroup RtemsTimerReqCreate spec:/rtems/timer/req/create
*
- * @ingroup RTEMSTestSuiteTestsuitesValidationNoClock0
+ * @ingroup TestsuitesValidationNoClock0
*
* @{
*/
diff --git a/testsuites/validation/tc-timer-delete.c b/testsuites/validation/tc-timer-delete.c
index 92032c80cf..84999c5ae7 100644
--- a/testsuites/validation/tc-timer-delete.c
+++ b/testsuites/validation/tc-timer-delete.c
@@ -3,11 +3,11 @@
/**
* @file
*
- * @ingroup RTEMSTestCaseRtemsTimerReqDelete
+ * @ingroup RtemsTimerReqDelete
*/
/*
- * Copyright (C) 2021 embedded brains GmbH (http://www.embedded-brains.de)
+ * Copyright (C) 2021 embedded brains GmbH & Co. KG
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
@@ -58,9 +58,9 @@
#include <rtems/test.h>
/**
- * @defgroup RTEMSTestCaseRtemsTimerReqDelete spec:/rtems/timer/req/delete
+ * @defgroup RtemsTimerReqDelete spec:/rtems/timer/req/delete
*
- * @ingroup RTEMSTestSuiteTestsuitesValidationNoClock0
+ * @ingroup TestsuitesValidationNoClock0
*
* @{
*/
diff --git a/testsuites/validation/tc-timer-fire-after.c b/testsuites/validation/tc-timer-fire-after.c
index 980ecdde2d..27c27523cb 100644
--- a/testsuites/validation/tc-timer-fire-after.c
+++ b/testsuites/validation/tc-timer-fire-after.c
@@ -3,11 +3,11 @@
/**
* @file
*
- * @ingroup RTEMSTestCaseRtemsTimerReqFireAfter
+ * @ingroup RtemsTimerReqFireAfter
*/
/*
- * Copyright (C) 2021 embedded brains GmbH (http://www.embedded-brains.de)
+ * Copyright (C) 2021 embedded brains GmbH & Co. KG
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
@@ -59,10 +59,9 @@
#include <rtems/test.h>
/**
- * @defgroup RTEMSTestCaseRtemsTimerReqFireAfter \
- * spec:/rtems/timer/req/fire-after
+ * @defgroup RtemsTimerReqFireAfter spec:/rtems/timer/req/fire-after
*
- * @ingroup RTEMSTestSuiteTestsuitesValidationNoClock0
+ * @ingroup TestsuitesValidationNoClock0
*
* @{
*/
diff --git a/testsuites/validation/tc-timer-fire-when.c b/testsuites/validation/tc-timer-fire-when.c
index 8d5584ebf0..92bd505a41 100644
--- a/testsuites/validation/tc-timer-fire-when.c
+++ b/testsuites/validation/tc-timer-fire-when.c
@@ -3,11 +3,11 @@
/**
* @file
*
- * @ingroup RTEMSTestCaseRtemsTimerReqFireWhen
+ * @ingroup RtemsTimerReqFireWhen
*/
/*
- * Copyright (C) 2021 embedded brains GmbH (http://www.embedded-brains.de)
+ * Copyright (C) 2021 embedded brains GmbH & Co. KG
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
@@ -59,9 +59,9 @@
#include <rtems/test.h>
/**
- * @defgroup RTEMSTestCaseRtemsTimerReqFireWhen spec:/rtems/timer/req/fire-when
+ * @defgroup RtemsTimerReqFireWhen spec:/rtems/timer/req/fire-when
*
- * @ingroup RTEMSTestSuiteTestsuitesValidationNoClock0
+ * @ingroup TestsuitesValidationNoClock0
*
* @{
*/
diff --git a/testsuites/validation/tc-timer-ident.c b/testsuites/validation/tc-timer-ident.c
index bdee3d89d2..e39ec73b9a 100644
--- a/testsuites/validation/tc-timer-ident.c
+++ b/testsuites/validation/tc-timer-ident.c
@@ -3,11 +3,11 @@
/**
* @file
*
- * @ingroup RTEMSTestCaseRtemsTimerValIdent
+ * @ingroup RtemsTimerValIdent
*/
/*
- * Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+ * Copyright (C) 2020 embedded brains GmbH & Co. KG
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
@@ -57,16 +57,16 @@
#include <rtems/test.h>
/**
- * @defgroup RTEMSTestCaseRtemsTimerValIdent spec:/rtems/timer/val/ident
+ * @defgroup RtemsTimerValIdent spec:/rtems/timer/val/ident
*
- * @ingroup RTEMSTestSuiteTestsuitesValidationNoClock0
+ * @ingroup TestsuitesValidationNoClock0
*
* @brief Test the rtems_timer_ident() directive.
*
* This test case performs the following actions:
*
* - Run the generic object identification tests for Classic API timer class
- * objects defined by /rtems/req/ident-local.
+ * objects defined by spec:/rtems/req/ident-local.
*
* @{
*/
@@ -83,7 +83,7 @@ static rtems_status_code ClassicTimerIdentAction(
/**
* @brief Run the generic object identification tests for Classic API timer
- * class objects defined by /rtems/req/ident-local.
+ * class objects defined by spec:/rtems/req/ident-local.
*/
static void RtemsTimerValIdent_Action_0( void )
{
diff --git a/testsuites/validation/tc-timer-initiate-server.c b/testsuites/validation/tc-timer-initiate-server.c
index 89bb445a6f..7a21a3a10b 100644
--- a/testsuites/validation/tc-timer-initiate-server.c
+++ b/testsuites/validation/tc-timer-initiate-server.c
@@ -3,11 +3,11 @@
/**
* @file
*
- * @ingroup RTEMSTestCaseRtemsTimerReqInitiateServer
+ * @ingroup RtemsTimerReqInitiateServer
*/
/*
- * Copyright (C) 2021 embedded brains GmbH (http://www.embedded-brains.de)
+ * Copyright (C) 2021 embedded brains GmbH & Co. KG
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
@@ -60,10 +60,9 @@
#include <rtems/test.h>
/**
- * @defgroup RTEMSTestCaseRtemsTimerReqInitiateServer \
- * spec:/rtems/timer/req/initiate-server
+ * @defgroup RtemsTimerReqInitiateServer spec:/rtems/timer/req/initiate-server
*
- * @ingroup RTEMSTestSuiteTestsuitesValidationNoClock0
+ * @ingroup TestsuitesValidationNoClock0
*
* @{
*/
diff --git a/testsuites/validation/tc-timer-reset.c b/testsuites/validation/tc-timer-reset.c
index 2b87717b43..709b9fe8a5 100644
--- a/testsuites/validation/tc-timer-reset.c
+++ b/testsuites/validation/tc-timer-reset.c
@@ -3,11 +3,11 @@
/**
* @file
*
- * @ingroup RTEMSTestCaseRtemsTimerReqReset
+ * @ingroup RtemsTimerReqReset
*/
/*
- * Copyright (C) 2021 embedded brains GmbH (http://www.embedded-brains.de)
+ * Copyright (C) 2021 embedded brains GmbH & Co. KG
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
@@ -59,9 +59,9 @@
#include <rtems/test.h>
/**
- * @defgroup RTEMSTestCaseRtemsTimerReqReset spec:/rtems/timer/req/reset
+ * @defgroup RtemsTimerReqReset spec:/rtems/timer/req/reset
*
- * @ingroup RTEMSTestSuiteTestsuitesValidationNoClock0
+ * @ingroup TestsuitesValidationNoClock0
*
* @{
*/
@@ -225,7 +225,7 @@ typedef struct {
* @brief This member contains a reference to the user data to be used in the
* next call to the Timer Service Routine.
*/
- void **scheduled_user_data;;
+ void **scheduled_user_data;
/**
* @brief This member contains 1 if the Timer Service Routine "A" has been
diff --git a/testsuites/validation/tc-timer-server-fire-after.c b/testsuites/validation/tc-timer-server-fire-after.c
index 50e639e7c1..3ee91d8461 100644
--- a/testsuites/validation/tc-timer-server-fire-after.c
+++ b/testsuites/validation/tc-timer-server-fire-after.c
@@ -3,11 +3,11 @@
/**
* @file
*
- * @ingroup RTEMSTestCaseRtemsTimerReqServerFireAfter
+ * @ingroup RtemsTimerReqServerFireAfter
*/
/*
- * Copyright (C) 2021 embedded brains GmbH (http://www.embedded-brains.de)
+ * Copyright (C) 2021 embedded brains GmbH & Co. KG
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
@@ -59,10 +59,10 @@
#include <rtems/test.h>
/**
- * @defgroup RTEMSTestCaseRtemsTimerReqServerFireAfter \
+ * @defgroup RtemsTimerReqServerFireAfter \
* spec:/rtems/timer/req/server-fire-after
*
- * @ingroup RTEMSTestSuiteTestsuitesValidationNoClock0
+ * @ingroup TestsuitesValidationNoClock0
*
* @{
*/
diff --git a/testsuites/validation/tc-timer-server-fire-when.c b/testsuites/validation/tc-timer-server-fire-when.c
index a918405058..d9c5ba8221 100644
--- a/testsuites/validation/tc-timer-server-fire-when.c
+++ b/testsuites/validation/tc-timer-server-fire-when.c
@@ -3,11 +3,11 @@
/**
* @file
*
- * @ingroup RTEMSTestCaseRtemsTimerReqServerFireWhen
+ * @ingroup RtemsTimerReqServerFireWhen
*/
/*
- * Copyright (C) 2021 embedded brains GmbH (http://www.embedded-brains.de)
+ * Copyright (C) 2021 embedded brains GmbH & Co. KG
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
@@ -59,10 +59,9 @@
#include <rtems/test.h>
/**
- * @defgroup RTEMSTestCaseRtemsTimerReqServerFireWhen \
- * spec:/rtems/timer/req/server-fire-when
+ * @defgroup RtemsTimerReqServerFireWhen spec:/rtems/timer/req/server-fire-when
*
- * @ingroup RTEMSTestSuiteTestsuitesValidationNoClock0
+ * @ingroup TestsuitesValidationNoClock0
*
* @{
*/
diff --git a/testsuites/validation/tc-timer.c b/testsuites/validation/tc-timer.c
index a7a25222bb..d33ad6b440 100644
--- a/testsuites/validation/tc-timer.c
+++ b/testsuites/validation/tc-timer.c
@@ -3,11 +3,11 @@
/**
* @file
*
- * @ingroup RTEMSTestCaseRtemsTimerValTimer
+ * @ingroup RtemsTimerValTimer
*/
/*
- * Copyright (C) 2021 embedded brains GmbH (http://www.embedded-brains.de)
+ * Copyright (C) 2021 embedded brains GmbH & Co. KG
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
@@ -61,9 +61,9 @@
#include <rtems/test.h>
/**
- * @defgroup RTEMSTestCaseRtemsTimerValTimer spec:/rtems/timer/val/timer
+ * @defgroup RtemsTimerValTimer spec:/rtems/timer/val/timer
*
- * @ingroup RTEMSTestSuiteTestsuitesValidationNoClock0
+ * @ingroup TestsuitesValidationNoClock0
*
* @brief Tests general timer behaviour.
*
diff --git a/testsuites/validation/tc-type.c b/testsuites/validation/tc-type.c
index a19048746b..14f9aa1743 100644
--- a/testsuites/validation/tc-type.c
+++ b/testsuites/validation/tc-type.c
@@ -3,11 +3,11 @@
/**
* @file
*
- * @ingroup RTEMSTestCaseRtemsTypeValType
+ * @ingroup RtemsTypeValType
*/
/*
- * Copyright (C) 2021 embedded brains GmbH (http://www.embedded-brains.de)
+ * Copyright (C) 2021, 2023 embedded brains GmbH & Co. KG
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
@@ -58,9 +58,9 @@
#include <rtems/test.h>
/**
- * @defgroup RTEMSTestCaseRtemsTypeValType spec:/rtems/type/val/type
+ * @defgroup RtemsTypeValType spec:/rtems/type/val/type
*
- * @ingroup RTEMSTestSuiteTestsuitesValidationNoClock0
+ * @ingroup TestsuitesValidationNoClock0
*
* @brief Tests some @ref RTEMSAPIClassicTypes interfaces.
*
@@ -71,6 +71,13 @@
* - Assert that RTEMS_ID_NONE cannot be associated with an object because it
* has an object index outside the range of valid object indices.
*
+ * - Validate the RTEMS_NO_TIMEOUT constant.
+ *
+ * - Assert that RTEMS_NO_TIMEOUT is a compile time constant which evaluates
+ * to a value of zero.
+ *
+ * - Check that RTEMS_NO_TIMEOUT evaluates to a value of zero.
+ *
* @{
*/
@@ -93,11 +100,31 @@ static void RtemsTypeValType_Action_0( void )
}
/**
+ * @brief Validate the RTEMS_NO_TIMEOUT constant.
+ */
+static void RtemsTypeValType_Action_1( void )
+{
+ /* Nothing to do */
+
+ /*
+ * Assert that RTEMS_NO_TIMEOUT is a compile time constant which evaluates to
+ * a value of zero.
+ */
+ RTEMS_STATIC_ASSERT( RTEMS_NO_TIMEOUT == 0, NO_TIMEOUT );
+
+ /*
+ * Check that RTEMS_NO_TIMEOUT evaluates to a value of zero.
+ */
+ T_eq_u32( RTEMS_NO_TIMEOUT, 0 );
+}
+
+/**
* @fn void T_case_body_RtemsTypeValType( void )
*/
T_TEST_CASE( RtemsTypeValType )
{
RtemsTypeValType_Action_0();
+ RtemsTypeValType_Action_1();
}
/** @} */
diff --git a/testsuites/validation/tc-userext-create.c b/testsuites/validation/tc-userext-create.c
index 0ffcd12972..a15ccf6c1a 100644
--- a/testsuites/validation/tc-userext-create.c
+++ b/testsuites/validation/tc-userext-create.c
@@ -3,11 +3,11 @@
/**
* @file
*
- * @ingroup RTEMSTestCaseRtemsUserextReqCreate
+ * @ingroup RtemsUserextReqCreate
*/
/*
- * Copyright (C) 2021 embedded brains GmbH (http://www.embedded-brains.de)
+ * Copyright (C) 2021 embedded brains GmbH & Co. KG
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
@@ -60,9 +60,9 @@
#include <rtems/test.h>
/**
- * @defgroup RTEMSTestCaseRtemsUserextReqCreate spec:/rtems/userext/req/create
+ * @defgroup RtemsUserextReqCreate spec:/rtems/userext/req/create
*
- * @ingroup RTEMSTestSuiteTestsuitesValidationNoClock0
+ * @ingroup TestsuitesValidationNoClock0
*
* @{
*/
@@ -129,13 +129,13 @@ typedef struct {
typedef struct {
void *seized_objects;
- rtems_extensions_table table_variable;;
+ rtems_extensions_table table_variable;
rtems_id id_value;
rtems_name name;
- rtems_extensions_table *table;;
+ rtems_extensions_table *table;
rtems_id *id;
diff --git a/testsuites/validation/tc-userext-delete.c b/testsuites/validation/tc-userext-delete.c
index b264b34792..9827d715bc 100644
--- a/testsuites/validation/tc-userext-delete.c
+++ b/testsuites/validation/tc-userext-delete.c
@@ -3,11 +3,11 @@
/**
* @file
*
- * @ingroup RTEMSTestCaseRtemsUserextReqDelete
+ * @ingroup RtemsUserextReqDelete
*/
/*
- * Copyright (C) 2021 embedded brains GmbH (http://www.embedded-brains.de)
+ * Copyright (C) 2021 embedded brains GmbH & Co. KG
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
@@ -58,9 +58,9 @@
#include <rtems/test.h>
/**
- * @defgroup RTEMSTestCaseRtemsUserextReqDelete spec:/rtems/userext/req/delete
+ * @defgroup RtemsUserextReqDelete spec:/rtems/userext/req/delete
*
- * @ingroup RTEMSTestSuiteTestsuitesValidationNoClock0
+ * @ingroup TestsuitesValidationNoClock0
*
* @{
*/
diff --git a/testsuites/validation/tc-userext-ident.c b/testsuites/validation/tc-userext-ident.c
index 2ece528953..24646b6a54 100644
--- a/testsuites/validation/tc-userext-ident.c
+++ b/testsuites/validation/tc-userext-ident.c
@@ -3,11 +3,11 @@
/**
* @file
*
- * @ingroup RTEMSTestCaseRtemsUserextValIdent
+ * @ingroup RtemsUserextValIdent
*/
/*
- * Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+ * Copyright (C) 2020 embedded brains GmbH & Co. KG
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
@@ -57,16 +57,16 @@
#include <rtems/test.h>
/**
- * @defgroup RTEMSTestCaseRtemsUserextValIdent spec:/rtems/userext/val/ident
+ * @defgroup RtemsUserextValIdent spec:/rtems/userext/val/ident
*
- * @ingroup RTEMSTestSuiteTestsuitesValidationNoClock0
+ * @ingroup TestsuitesValidationNoClock0
*
* @brief Test the rtems_extension_ident() directive.
*
* This test case performs the following actions:
*
* - Run the generic object identification tests for Classic API user extension
- * class objects defined by /rtems/req/ident-local.
+ * class objects defined by spec:/rtems/req/ident-local.
*
* @{
*/
@@ -83,7 +83,7 @@ static rtems_status_code ClassicUserExtIdentAction(
/**
* @brief Run the generic object identification tests for Classic API user
- * extension class objects defined by /rtems/req/ident-local.
+ * extension class objects defined by spec:/rtems/req/ident-local.
*/
static void RtemsUserextValIdent_Action_0( void )
{
diff --git a/testsuites/validation/tc-userext.c b/testsuites/validation/tc-userext.c
index 252946e026..192be30669 100644
--- a/testsuites/validation/tc-userext.c
+++ b/testsuites/validation/tc-userext.c
@@ -3,11 +3,11 @@
/**
* @file
*
- * @ingroup RTEMSTestCaseRtemsUserextValUserext
+ * @ingroup RtemsUserextValUserext
*/
/*
- * Copyright (C) 2021 embedded brains GmbH (http://www.embedded-brains.de)
+ * Copyright (C) 2021 embedded brains GmbH & Co. KG
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
@@ -62,10 +62,9 @@
#include <rtems/test.h>
/**
- * @defgroup RTEMSTestCaseRtemsUserextValUserext \
- * spec:/rtems/userext/val/userext
+ * @defgroup RtemsUserextValUserext spec:/rtems/userext/val/userext
*
- * @ingroup RTEMSTestSuiteTestsuitesUserext
+ * @ingroup TestsuitesUserext
*
* @brief Tests the thread user extensions.
*
@@ -160,6 +159,18 @@
* - Check that the thread terminate extension of the extension set deleted
* before its turn in the invocation was not invoked.
*
+ * - Create five dynamic extensions. Let an idle thread return from its entry.
+ * Delete three dynamic extension during the thread exitted invocation.
+ * Clean up the used resources.
+ *
+ * - Check that the thread exitted extensions were invoked in the right
+ * order.
+ *
+ * - Check that the other extensions were not invoked.
+ *
+ * - Check that the thread exitted extension of the extension set deleted
+ * before its turn in the invocation was not invoked.
+ *
* @{
*/
@@ -294,7 +305,13 @@ static void Extension(
if ( index == 6 && ( kind == THREAD_EXITTED || kind == THREAD_RESTART ) ) {
StopTestCase();
- rtems_task_exit();
+
+ if ( GetExecuting()->is_idle ) {
+ SetSelfPriority( RTEMS_MAXIMUM_PRIORITY );
+ _CPU_Thread_Idle_body( 0 );
+ } else {
+ rtems_task_exit();
+ }
}
if ( index == 0 && kind == THREAD_TERMINATE ) {
@@ -517,6 +534,18 @@ static void TerminateWorker( rtems_task_argument arg )
rtems_task_exit();
}
+void *IdleBody( uintptr_t arg )
+{
+ rtems_event_set events;
+
+ do {
+ events = PollAnyEvents();
+ } while ( events == 0 );
+
+ (void) StartTestCase( THREAD_EXITTED );
+ return (void *) arg;
+}
+
static void RtemsUserextValUserext_Setup( void *ctx )
{
SetSelfPriority( PRIO_NORMAL );
@@ -833,6 +862,45 @@ static void RtemsUserextValUserext_Action_6( void )
}
/**
+ * @brief Create five dynamic extensions. Let an idle thread return from its
+ * entry. Delete three dynamic extension during the thread exitted
+ * invocation. Clean up the used resources.
+ */
+static void RtemsUserextValUserext_Action_7( void )
+{
+ rtems_tcb *thread;
+ rtems_id id;
+
+ /* ID of idle thread of processor 0 */
+ id = 0x09010001;
+ thread = GetThread( id );
+ SendEvents( id, RTEMS_EVENT_0 );
+ SetPriority( id, PRIO_HIGH );
+
+ /*
+ * Check that the thread exitted extensions were invoked in the right order.
+ */
+ CheckForward( THREAD_EXITTED, 1, 1, thread, NULL );
+
+ /*
+ * Check that the other extensions were not invoked.
+ */
+ CheckForward( THREAD_BEGIN, 0, 0, NULL, NULL );
+ CheckForward( THREAD_CREATE, 0, 0, NULL, NULL );
+ CheckReverse( THREAD_DELETE, 0, 0, NULL, NULL );
+ CheckForward( THREAD_RESTART, 0, 0, NULL, NULL );
+ CheckForward( THREAD_START, 0, 0, NULL, NULL );
+ CheckForward( THREAD_SWITCH, 0, 0, NULL, NULL );
+ CheckReverse( THREAD_TERMINATE, 0, 0, NULL, NULL );
+
+ /*
+ * Check that the thread exitted extension of the extension set deleted
+ * before its turn in the invocation was not invoked.
+ */
+ CheckDeletedNotInvoked( THREAD_EXITTED );
+}
+
+/**
* @fn void T_case_body_RtemsUserextValUserext( void )
*/
T_TEST_CASE_FIXTURE( RtemsUserextValUserext, &RtemsUserextValUserext_Fixture )
@@ -844,6 +912,7 @@ T_TEST_CASE_FIXTURE( RtemsUserextValUserext, &RtemsUserextValUserext_Fixture )
RtemsUserextValUserext_Action_4();
RtemsUserextValUserext_Action_5();
RtemsUserextValUserext_Action_6();
+ RtemsUserextValUserext_Action_7();
}
/** @} */
diff --git a/testsuites/validation/tc-userext.h b/testsuites/validation/tc-userext.h
index dbe9e30b67..538180dfd4 100644
--- a/testsuites/validation/tc-userext.h
+++ b/testsuites/validation/tc-userext.h
@@ -3,13 +3,13 @@
/**
* @file
*
- * @ingroup RTEMSTestCaseScoreInterrValTerminate
+ * @ingroup ScoreInterrValTerminate
*
* @brief This header file provides functions used by corresponding test suite.
*/
/*
- * Copyright (C) 2021 embedded brains GmbH (http://www.embedded-brains.de)
+ * Copyright (C) 2021 embedded brains GmbH & Co. KG
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
diff --git a/testsuites/validation/tr-event-constant.c b/testsuites/validation/tr-event-constant.c
index 6895fcc821..a0327973de 100644
--- a/testsuites/validation/tr-event-constant.c
+++ b/testsuites/validation/tr-event-constant.c
@@ -3,11 +3,11 @@
/**
* @file
*
- * @ingroup RTEMSTestCaseRtemsEventValEventConstant
+ * @ingroup RtemsEventValEventConstant
*/
/*
- * Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+ * Copyright (C) 2020 embedded brains GmbH & Co. KG
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
@@ -59,10 +59,9 @@
#include <rtems/test.h>
/**
- * @defgroup RTEMSTestCaseRtemsEventValEventConstant \
- * spec:/rtems/event/val/event-constant
+ * @defgroup RtemsEventValEventConstant spec:/rtems/event/val/event-constant
*
- * @ingroup RTEMSTestSuiteTestsuitesValidationNoClock0
+ * @ingroup TestsuitesValidationNoClock0
*
* @brief Tests an event constant and number of the Event Manager using the
* Classic and system event sets of the executing task.
@@ -682,6 +681,11 @@ static void RtemsEventValEventConstant_Action_16(
static T_fixture_node RtemsEventValEventConstant_Node;
+static T_remark RtemsEventValEventConstant_Remark = {
+ .next = NULL,
+ .remark = "RtemsEventValEventConstant"
+};
+
void RtemsEventValEventConstant_Run( rtems_event_set event, int number )
{
RtemsEventValEventConstant_Context *ctx;
@@ -715,6 +719,7 @@ void RtemsEventValEventConstant_Run( rtems_event_set event, int number )
RtemsEventValEventConstant_Action_15( ctx );
RtemsEventValEventConstant_Action_16( ctx );
+ T_add_remark( &RtemsEventValEventConstant_Remark );
T_pop_fixture();
}
diff --git a/testsuites/validation/tr-event-constant.h b/testsuites/validation/tr-event-constant.h
index b6484874d5..9c57ca2d8a 100644
--- a/testsuites/validation/tr-event-constant.h
+++ b/testsuites/validation/tr-event-constant.h
@@ -3,11 +3,11 @@
/**
* @file
*
- * @ingroup RTEMSTestCaseRtemsEventValEventConstant
+ * @ingroup RtemsEventValEventConstant
*/
/*
- * Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+ * Copyright (C) 2020 embedded brains GmbH & Co. KG
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
@@ -58,7 +58,7 @@ extern "C" {
#endif
/**
- * @addtogroup RTEMSTestCaseRtemsEventValEventConstant
+ * @addtogroup RtemsEventValEventConstant
*
* @{
*/
diff --git a/testsuites/validation/tr-event-send-receive.c b/testsuites/validation/tr-event-send-receive.c
index e7c48dae70..85d0040615 100644
--- a/testsuites/validation/tr-event-send-receive.c
+++ b/testsuites/validation/tr-event-send-receive.c
@@ -3,11 +3,11 @@
/**
* @file
*
- * @ingroup RTEMSTestCaseRtemsEventReqSendReceive
+ * @ingroup RtemsEventReqSendReceive
*/
/*
- * Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+ * Copyright (C) 2020 embedded brains GmbH & Co. KG
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
@@ -60,10 +60,9 @@
#include <rtems/test.h>
/**
- * @defgroup RTEMSTestCaseRtemsEventReqSendReceive \
- * spec:/rtems/event/req/send-receive
+ * @defgroup RtemsEventReqSendReceive spec:/rtems/event/req/send-receive
*
- * @ingroup RTEMSTestSuiteTestsuitesValidation0
+ * @ingroup TestsuitesValidation0
*
* @{
*/
@@ -1251,6 +1250,11 @@ static void RtemsEventReqSendReceive_TestVariant(
static T_fixture_node RtemsEventReqSendReceive_Node;
+static T_remark RtemsEventReqSendReceive_Remark = {
+ .next = NULL,
+ .remark = "RtemsEventReqSendReceive"
+};
+
void RtemsEventReqSendReceive_Run(
rtems_status_code ( *send )( rtems_id, rtems_event_set ),
rtems_status_code ( *receive )( rtems_event_set, rtems_option, rtems_interval, rtems_event_set * ),
@@ -1310,6 +1314,7 @@ void RtemsEventReqSendReceive_Run(
}
}
+ T_add_remark( &RtemsEventReqSendReceive_Remark );
T_pop_fixture();
}
diff --git a/testsuites/validation/tr-event-send-receive.h b/testsuites/validation/tr-event-send-receive.h
index b246a815ed..f6dee4ddca 100644
--- a/testsuites/validation/tr-event-send-receive.h
+++ b/testsuites/validation/tr-event-send-receive.h
@@ -3,11 +3,11 @@
/**
* @file
*
- * @ingroup RTEMSTestCaseRtemsEventReqSendReceive
+ * @ingroup RtemsEventReqSendReceive
*/
/*
- * Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+ * Copyright (C) 2020 embedded brains GmbH & Co. KG
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
@@ -59,7 +59,7 @@ extern "C" {
#endif
/**
- * @addtogroup RTEMSTestCaseRtemsEventReqSendReceive
+ * @addtogroup RtemsEventReqSendReceive
*
* @{
*/
diff --git a/testsuites/validation/tr-fatal-boot-processor-not-assigned-to-scheduler.c b/testsuites/validation/tr-fatal-boot-processor-not-assigned-to-scheduler.c
index f7cf1e1eb8..d02e2df8b6 100644
--- a/testsuites/validation/tr-fatal-boot-processor-not-assigned-to-scheduler.c
+++ b/testsuites/validation/tr-fatal-boot-processor-not-assigned-to-scheduler.c
@@ -3,11 +3,11 @@
/**
* @file
*
- * @ingroup RTEMSTestCaseScoreSmpValFatalBootProcessorNotAssignedToScheduler
+ * @ingroup ScoreSmpValFatalBootProcessorNotAssignedToScheduler
*/
/*
- * Copyright (C) 2021 embedded brains GmbH (http://www.embedded-brains.de)
+ * Copyright (C) 2021 embedded brains GmbH & Co. KG
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
@@ -59,10 +59,10 @@
#include <rtems/test.h>
/**
- * @defgroup RTEMSTestCaseScoreSmpValFatalBootProcessorNotAssignedToScheduler \
+ * @defgroup ScoreSmpValFatalBootProcessorNotAssignedToScheduler \
* spec:/score/smp/val/fatal-boot-processor-not-assigned-to-scheduler
*
- * @ingroup RTEMSTestSuiteTestsuitesFatalBootProcessorNotAssignedToScheduler
+ * @ingroup TestsuitesFatalBootProcessorNotAssignedToScheduler
*
* @brief Tests a fatal error.
*
diff --git a/testsuites/validation/tr-fatal-boot-processor-not-assigned-to-scheduler.h b/testsuites/validation/tr-fatal-boot-processor-not-assigned-to-scheduler.h
index 3cf19f5322..77299a5b39 100644
--- a/testsuites/validation/tr-fatal-boot-processor-not-assigned-to-scheduler.h
+++ b/testsuites/validation/tr-fatal-boot-processor-not-assigned-to-scheduler.h
@@ -3,11 +3,11 @@
/**
* @file
*
- * @ingroup RTEMSTestCaseScoreSmpValFatalBootProcessorNotAssignedToScheduler
+ * @ingroup ScoreSmpValFatalBootProcessorNotAssignedToScheduler
*/
/*
- * Copyright (C) 2021 embedded brains GmbH (http://www.embedded-brains.de)
+ * Copyright (C) 2021 embedded brains GmbH & Co. KG
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
@@ -58,7 +58,7 @@ extern "C" {
#endif
/**
- * @addtogroup RTEMSTestCaseScoreSmpValFatalBootProcessorNotAssignedToScheduler
+ * @addtogroup ScoreSmpValFatalBootProcessorNotAssignedToScheduler
*
* @{
*/
diff --git a/testsuites/validation/tr-fatal-idle-thread-create-failed.c b/testsuites/validation/tr-fatal-idle-thread-create-failed.c
new file mode 100644
index 0000000000..60a400c43d
--- /dev/null
+++ b/testsuites/validation/tr-fatal-idle-thread-create-failed.c
@@ -0,0 +1,158 @@
+/* SPDX-License-Identifier: BSD-2-Clause */
+
+/**
+ * @file
+ *
+ * @ingroup ScoreThreadValFatalIdleThreadCreateFailed
+ */
+
+/*
+ * Copyright (C) 2022 embedded brains GmbH & Co. KG
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ */
+
+/*
+ * This file is part of the RTEMS quality process and was automatically
+ * generated. If you find something that needs to be fixed or
+ * worded better please post a report or patch to an RTEMS mailing list
+ * or raise a bug report:
+ *
+ * https://www.rtems.org/bugs.html
+ *
+ * For information on updating and regenerating please refer to the How-To
+ * section in the Software Requirements Engineering chapter of the
+ * RTEMS Software Engineering manual. The manual is provided as a part of
+ * a release. For development sources please refer to the online
+ * documentation at:
+ *
+ * https://docs.rtems.org
+ */
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#include <rtems.h>
+
+#include "tr-fatal-idle-thread-create-failed.h"
+
+#include <rtems/test.h>
+
+/**
+ * @defgroup ScoreThreadValFatalIdleThreadCreateFailed \
+ * spec:/score/thread/val/fatal-idle-thread-create-failed
+ *
+ * @ingroup TestsuitesFatalIdleThreadCreateFailed
+ *
+ * @brief Tests a fatal error caused by a failing task create extension.
+ *
+ * This test case performs the following actions:
+ *
+ * - The test action is carried out by configuring a task create extension
+ * which always fails.
+ *
+ * - Check that the expected fatal source is present.
+ *
+ * - Check that the expected fatal code is present.
+ *
+ * @{
+ */
+
+/**
+ * @brief Test context for
+ * spec:/score/thread/val/fatal-idle-thread-create-failed test case.
+ */
+typedef struct {
+ /**
+ * @brief This member contains a copy of the corresponding
+ * ScoreThreadValFatalIdleThreadCreateFailed_Run() parameter.
+ */
+ rtems_fatal_source source;
+
+ /**
+ * @brief This member contains a copy of the corresponding
+ * ScoreThreadValFatalIdleThreadCreateFailed_Run() parameter.
+ */
+ rtems_fatal_code code;
+} ScoreThreadValFatalIdleThreadCreateFailed_Context;
+
+static ScoreThreadValFatalIdleThreadCreateFailed_Context
+ ScoreThreadValFatalIdleThreadCreateFailed_Instance;
+
+static T_fixture ScoreThreadValFatalIdleThreadCreateFailed_Fixture = {
+ .setup = NULL,
+ .stop = NULL,
+ .teardown = NULL,
+ .scope = NULL,
+ .initial_context = &ScoreThreadValFatalIdleThreadCreateFailed_Instance
+};
+
+/**
+ * @brief The test action is carried out by configuring a task create extension
+ * which always fails.
+ */
+static void ScoreThreadValFatalIdleThreadCreateFailed_Action_0(
+ ScoreThreadValFatalIdleThreadCreateFailed_Context *ctx
+)
+{
+ /* Nothing to do */
+
+ /*
+ * Check that the expected fatal source is present.
+ */
+ T_step_eq_int( 0, ctx->source, INTERNAL_ERROR_CORE );
+
+ /*
+ * Check that the expected fatal code is present.
+ */
+ T_step_eq_ulong(
+ 1,
+ ctx->code,
+ INTERNAL_ERROR_IDLE_THREAD_CREATE_FAILED
+ );
+}
+
+void ScoreThreadValFatalIdleThreadCreateFailed_Run(
+ rtems_fatal_source source,
+ rtems_fatal_code code
+)
+{
+ ScoreThreadValFatalIdleThreadCreateFailed_Context *ctx;
+
+ ctx = &ScoreThreadValFatalIdleThreadCreateFailed_Instance;
+ ctx->source = source;
+ ctx->code = code;
+
+ ctx = T_case_begin(
+ "ScoreThreadValFatalIdleThreadCreateFailed",
+ &ScoreThreadValFatalIdleThreadCreateFailed_Fixture
+ );
+
+ T_plan( 2 );
+
+ ScoreThreadValFatalIdleThreadCreateFailed_Action_0( ctx );
+
+ T_case_end();
+}
+
+/** @} */
diff --git a/testsuites/validation/tr-fatal-idle-thread-create-failed.h b/testsuites/validation/tr-fatal-idle-thread-create-failed.h
new file mode 100644
index 0000000000..d521f3ed29
--- /dev/null
+++ b/testsuites/validation/tr-fatal-idle-thread-create-failed.h
@@ -0,0 +1,84 @@
+/* SPDX-License-Identifier: BSD-2-Clause */
+
+/**
+ * @file
+ *
+ * @ingroup ScoreThreadValFatalIdleThreadCreateFailed
+ */
+
+/*
+ * Copyright (C) 2022 embedded brains GmbH & Co. KG
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ */
+
+/*
+ * This file is part of the RTEMS quality process and was automatically
+ * generated. If you find something that needs to be fixed or
+ * worded better please post a report or patch to an RTEMS mailing list
+ * or raise a bug report:
+ *
+ * https://www.rtems.org/bugs.html
+ *
+ * For information on updating and regenerating please refer to the How-To
+ * section in the Software Requirements Engineering chapter of the
+ * RTEMS Software Engineering manual. The manual is provided as a part of
+ * a release. For development sources please refer to the online
+ * documentation at:
+ *
+ * https://docs.rtems.org
+ */
+
+#ifndef _TR_FATAL_IDLE_THREAD_CREATE_FAILED_H
+#define _TR_FATAL_IDLE_THREAD_CREATE_FAILED_H
+
+#include <rtems.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/**
+ * @addtogroup ScoreThreadValFatalIdleThreadCreateFailed
+ *
+ * @{
+ */
+
+/**
+ * @brief Runs the parameterized test case.
+ *
+ * @param source is the fatal source.
+ *
+ * @param code is the fatal code.
+ */
+void ScoreThreadValFatalIdleThreadCreateFailed_Run(
+ rtems_fatal_source source,
+ rtems_fatal_code code
+);
+
+/** @} */
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* _TR_FATAL_IDLE_THREAD_CREATE_FAILED_H */
diff --git a/testsuites/validation/tr-fatal-idle-thread-stack-too-small.c b/testsuites/validation/tr-fatal-idle-thread-stack-too-small.c
new file mode 100644
index 0000000000..34a428c883
--- /dev/null
+++ b/testsuites/validation/tr-fatal-idle-thread-stack-too-small.c
@@ -0,0 +1,175 @@
+/* SPDX-License-Identifier: BSD-2-Clause */
+
+/**
+ * @file
+ *
+ * @ingroup ScoreThreadValFatalIdleThreadStackTooSmall
+ */
+
+/*
+ * Copyright (C) 2022 embedded brains GmbH & Co. KG
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ */
+
+/*
+ * This file is part of the RTEMS quality process and was automatically
+ * generated. If you find something that needs to be fixed or
+ * worded better please post a report or patch to an RTEMS mailing list
+ * or raise a bug report:
+ *
+ * https://www.rtems.org/bugs.html
+ *
+ * For information on updating and regenerating please refer to the How-To
+ * section in the Software Requirements Engineering chapter of the
+ * RTEMS Software Engineering manual. The manual is provided as a part of
+ * a release. For development sources please refer to the online
+ * documentation at:
+ *
+ * https://docs.rtems.org
+ */
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#include <rtems.h>
+
+#include "tr-fatal-idle-thread-stack-too-small.h"
+
+#include <rtems/test.h>
+
+/**
+ * @defgroup ScoreThreadValFatalIdleThreadStackTooSmall \
+ * spec:/score/thread/val/fatal-idle-thread-stack-too-small
+ *
+ * @ingroup TestsuitesFatalIdleThreadStackTooSmall
+ *
+ * @brief Tests a fatal error caused by a too small idle thread stack size.
+ *
+ * This test case performs the following actions:
+ *
+ * - The test action is carried out by configuring a thread-local storage
+ * demand which leads to a too small idle thread stack size.
+ *
+ * - Check that the expected fatal source is present.
+ *
+ * - Check that the expected fatal code is present.
+ *
+ * - Check the configured value of CONFIGURE_IDLE_TASK_STORAGE_SIZE.
+ *
+ * @{
+ */
+
+/**
+ * @brief Test context for
+ * spec:/score/thread/val/fatal-idle-thread-stack-too-small test case.
+ */
+typedef struct {
+ /**
+ * @brief This member contains a copy of the corresponding
+ * ScoreThreadValFatalIdleThreadStackTooSmall_Run() parameter.
+ */
+ rtems_fatal_source source;
+
+ /**
+ * @brief This member contains a copy of the corresponding
+ * ScoreThreadValFatalIdleThreadStackTooSmall_Run() parameter.
+ */
+ rtems_fatal_code code;
+} ScoreThreadValFatalIdleThreadStackTooSmall_Context;
+
+static ScoreThreadValFatalIdleThreadStackTooSmall_Context
+ ScoreThreadValFatalIdleThreadStackTooSmall_Instance;
+
+static T_fixture ScoreThreadValFatalIdleThreadStackTooSmall_Fixture = {
+ .setup = NULL,
+ .stop = NULL,
+ .teardown = NULL,
+ .scope = NULL,
+ .initial_context = &ScoreThreadValFatalIdleThreadStackTooSmall_Instance
+};
+
+/**
+ * @brief The test action is carried out by configuring a thread-local storage
+ * demand which leads to a too small idle thread stack size.
+ */
+static void ScoreThreadValFatalIdleThreadStackTooSmall_Action_0(
+ ScoreThreadValFatalIdleThreadStackTooSmall_Context *ctx
+)
+{
+ /* Nothing to do */
+
+ /*
+ * Check that the expected fatal source is present.
+ */
+ T_step_eq_int( 0, ctx->source, INTERNAL_ERROR_CORE );
+
+ /*
+ * Check that the expected fatal code is present.
+ */
+ T_step_eq_ulong(
+ 1,
+ ctx->code,
+ INTERNAL_ERROR_IDLE_THREAD_STACK_TOO_SMALL
+ );
+
+ /*
+ * Check the configured value of CONFIGURE_IDLE_TASK_STORAGE_SIZE.
+ */
+ T_step_eq_sz(
+ 2,
+ _Stack_Allocator_allocate_for_idle_storage_size,
+ RTEMS_ALIGN_UP(
+ RTEMS_TASK_STORAGE_SIZE(
+ RTEMS_MINIMUM_STACK_SIZE,
+ RTEMS_DEFAULT_ATTRIBUTES
+ ),
+ CPU_INTERRUPT_STACK_ALIGNMENT
+ )
+ );
+}
+
+void ScoreThreadValFatalIdleThreadStackTooSmall_Run(
+ rtems_fatal_source source,
+ rtems_fatal_code code
+)
+{
+ ScoreThreadValFatalIdleThreadStackTooSmall_Context *ctx;
+
+ ctx = &ScoreThreadValFatalIdleThreadStackTooSmall_Instance;
+ ctx->source = source;
+ ctx->code = code;
+
+ ctx = T_case_begin(
+ "ScoreThreadValFatalIdleThreadStackTooSmall",
+ &ScoreThreadValFatalIdleThreadStackTooSmall_Fixture
+ );
+
+ T_plan( 3 );
+
+ ScoreThreadValFatalIdleThreadStackTooSmall_Action_0( ctx );
+
+ T_case_end();
+}
+
+/** @} */
diff --git a/testsuites/validation/tr-fatal-idle-thread-stack-too-small.h b/testsuites/validation/tr-fatal-idle-thread-stack-too-small.h
new file mode 100644
index 0000000000..be29df8a39
--- /dev/null
+++ b/testsuites/validation/tr-fatal-idle-thread-stack-too-small.h
@@ -0,0 +1,84 @@
+/* SPDX-License-Identifier: BSD-2-Clause */
+
+/**
+ * @file
+ *
+ * @ingroup ScoreThreadValFatalIdleThreadStackTooSmall
+ */
+
+/*
+ * Copyright (C) 2022 embedded brains GmbH & Co. KG
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ */
+
+/*
+ * This file is part of the RTEMS quality process and was automatically
+ * generated. If you find something that needs to be fixed or
+ * worded better please post a report or patch to an RTEMS mailing list
+ * or raise a bug report:
+ *
+ * https://www.rtems.org/bugs.html
+ *
+ * For information on updating and regenerating please refer to the How-To
+ * section in the Software Requirements Engineering chapter of the
+ * RTEMS Software Engineering manual. The manual is provided as a part of
+ * a release. For development sources please refer to the online
+ * documentation at:
+ *
+ * https://docs.rtems.org
+ */
+
+#ifndef _TR_FATAL_IDLE_THREAD_STACK_TOO_SMALL_H
+#define _TR_FATAL_IDLE_THREAD_STACK_TOO_SMALL_H
+
+#include <rtems.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/**
+ * @addtogroup ScoreThreadValFatalIdleThreadStackTooSmall
+ *
+ * @{
+ */
+
+/**
+ * @brief Runs the parameterized test case.
+ *
+ * @param source is the fatal source.
+ *
+ * @param code is the fatal code.
+ */
+void ScoreThreadValFatalIdleThreadStackTooSmall_Run(
+ rtems_fatal_source source,
+ rtems_fatal_code code
+);
+
+/** @} */
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* _TR_FATAL_IDLE_THREAD_STACK_TOO_SMALL_H */
diff --git a/testsuites/validation/tr-fatal-init-task-construct-failed.c b/testsuites/validation/tr-fatal-init-task-construct-failed.c
index a7ee911f08..2bef7b73d8 100644
--- a/testsuites/validation/tr-fatal-init-task-construct-failed.c
+++ b/testsuites/validation/tr-fatal-init-task-construct-failed.c
@@ -3,11 +3,11 @@
/**
* @file
*
- * @ingroup RTEMSTestCaseAcfgValFatalInitTaskConstructFailed
+ * @ingroup AcfgValFatalInitTaskConstructFailed
*/
/*
- * Copyright (C) 2021 embedded brains GmbH (http://www.embedded-brains.de)
+ * Copyright (C) 2021 embedded brains GmbH & Co. KG
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
@@ -60,10 +60,10 @@
#include <rtems/test.h>
/**
- * @defgroup RTEMSTestCaseAcfgValFatalInitTaskConstructFailed \
+ * @defgroup AcfgValFatalInitTaskConstructFailed \
* spec:/acfg/val/fatal-init-task-construct-failed
*
- * @ingroup RTEMSTestSuiteTestsuitesFatalInitTaskConstructFailed
+ * @ingroup TestsuitesFatalInitTaskConstructFailed
*
* @brief Tests a fatal error caused by an invalid application configuration.
*
diff --git a/testsuites/validation/tr-fatal-init-task-construct-failed.h b/testsuites/validation/tr-fatal-init-task-construct-failed.h
index 1685ed567f..9288a7f724 100644
--- a/testsuites/validation/tr-fatal-init-task-construct-failed.h
+++ b/testsuites/validation/tr-fatal-init-task-construct-failed.h
@@ -3,11 +3,11 @@
/**
* @file
*
- * @ingroup RTEMSTestCaseAcfgValFatalInitTaskConstructFailed
+ * @ingroup AcfgValFatalInitTaskConstructFailed
*/
/*
- * Copyright (C) 2021 embedded brains GmbH (http://www.embedded-brains.de)
+ * Copyright (C) 2021 embedded brains GmbH & Co. KG
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
@@ -58,7 +58,7 @@ extern "C" {
#endif
/**
- * @addtogroup RTEMSTestCaseAcfgValFatalInitTaskConstructFailed
+ * @addtogroup AcfgValFatalInitTaskConstructFailed
*
* @{
*/
diff --git a/testsuites/validation/tr-fatal-mandatory-processor-not-present.c b/testsuites/validation/tr-fatal-mandatory-processor-not-present.c
index 0f2435d0d5..00b5678e1c 100644
--- a/testsuites/validation/tr-fatal-mandatory-processor-not-present.c
+++ b/testsuites/validation/tr-fatal-mandatory-processor-not-present.c
@@ -3,11 +3,11 @@
/**
* @file
*
- * @ingroup RTEMSTestCaseScoreSmpValFatalMandatoryProcessorNotPresent
+ * @ingroup ScoreSmpValFatalMandatoryProcessorNotPresent
*/
/*
- * Copyright (C) 2021 embedded brains GmbH (http://www.embedded-brains.de)
+ * Copyright (C) 2021 embedded brains GmbH & Co. KG
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
@@ -59,10 +59,10 @@
#include <rtems/test.h>
/**
- * @defgroup RTEMSTestCaseScoreSmpValFatalMandatoryProcessorNotPresent \
+ * @defgroup ScoreSmpValFatalMandatoryProcessorNotPresent \
* spec:/score/smp/val/fatal-mandatory-processor-not-present
*
- * @ingroup RTEMSTestSuiteTestsuitesFatalMandatoryProcessorNotPresent
+ * @ingroup TestsuitesFatalMandatoryProcessorNotPresent
*
* @brief Tests a fatal error.
*
diff --git a/testsuites/validation/tr-fatal-mandatory-processor-not-present.h b/testsuites/validation/tr-fatal-mandatory-processor-not-present.h
index fd41d1b961..46d1581cc2 100644
--- a/testsuites/validation/tr-fatal-mandatory-processor-not-present.h
+++ b/testsuites/validation/tr-fatal-mandatory-processor-not-present.h
@@ -3,11 +3,11 @@
/**
* @file
*
- * @ingroup RTEMSTestCaseScoreSmpValFatalMandatoryProcessorNotPresent
+ * @ingroup ScoreSmpValFatalMandatoryProcessorNotPresent
*/
/*
- * Copyright (C) 2021 embedded brains GmbH (http://www.embedded-brains.de)
+ * Copyright (C) 2021 embedded brains GmbH & Co. KG
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
@@ -58,7 +58,7 @@ extern "C" {
#endif
/**
- * @addtogroup RTEMSTestCaseScoreSmpValFatalMandatoryProcessorNotPresent
+ * @addtogroup ScoreSmpValFatalMandatoryProcessorNotPresent
*
* @{
*/
diff --git a/testsuites/validation/tr-fatal-scheduler-requires-exactly-one-processor.c b/testsuites/validation/tr-fatal-scheduler-requires-exactly-one-processor.c
index aefe76bb31..8ac69193fa 100644
--- a/testsuites/validation/tr-fatal-scheduler-requires-exactly-one-processor.c
+++ b/testsuites/validation/tr-fatal-scheduler-requires-exactly-one-processor.c
@@ -3,11 +3,11 @@
/**
* @file
*
- * @ingroup RTEMSTestCaseScoreSmpValFatalSchedulerRequiresExactlyOneProcessor
+ * @ingroup ScoreSmpValFatalSchedulerRequiresExactlyOneProcessor
*/
/*
- * Copyright (C) 2021 embedded brains GmbH (http://www.embedded-brains.de)
+ * Copyright (C) 2021 embedded brains GmbH & Co. KG
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
@@ -59,10 +59,10 @@
#include <rtems/test.h>
/**
- * @defgroup RTEMSTestCaseScoreSmpValFatalSchedulerRequiresExactlyOneProcessor \
+ * @defgroup ScoreSmpValFatalSchedulerRequiresExactlyOneProcessor \
* spec:/score/smp/val/fatal-scheduler-requires-exactly-one-processor
*
- * @ingroup RTEMSTestSuiteTestsuitesFatalSchedulerRequiresExactlyOneProcessor
+ * @ingroup TestsuitesFatalSchedulerRequiresExactlyOneProcessor
*
* @brief Tests a fatal error.
*
diff --git a/testsuites/validation/tr-fatal-scheduler-requires-exactly-one-processor.h b/testsuites/validation/tr-fatal-scheduler-requires-exactly-one-processor.h
index 2d0e3f32b2..6bfb18fcfd 100644
--- a/testsuites/validation/tr-fatal-scheduler-requires-exactly-one-processor.h
+++ b/testsuites/validation/tr-fatal-scheduler-requires-exactly-one-processor.h
@@ -3,11 +3,11 @@
/**
* @file
*
- * @ingroup RTEMSTestCaseScoreSmpValFatalSchedulerRequiresExactlyOneProcessor
+ * @ingroup ScoreSmpValFatalSchedulerRequiresExactlyOneProcessor
*/
/*
- * Copyright (C) 2021 embedded brains GmbH (http://www.embedded-brains.de)
+ * Copyright (C) 2021 embedded brains GmbH & Co. KG
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
@@ -58,7 +58,7 @@ extern "C" {
#endif
/**
- * @addtogroup RTEMSTestCaseScoreSmpValFatalSchedulerRequiresExactlyOneProcessor
+ * @addtogroup ScoreSmpValFatalSchedulerRequiresExactlyOneProcessor
*
* @{
*/
diff --git a/testsuites/validation/tr-fatal-smp.c b/testsuites/validation/tr-fatal-smp.c
index 425a95ade0..c2369d0ae7 100644
--- a/testsuites/validation/tr-fatal-smp.c
+++ b/testsuites/validation/tr-fatal-smp.c
@@ -3,11 +3,11 @@
/**
* @file
*
- * @ingroup RTEMSTestCaseScoreSmpValFatal
+ * @ingroup ScoreSmpValFatal
*/
/*
- * Copyright (C) 2021 embedded brains GmbH (http://www.embedded-brains.de)
+ * Copyright (C) 2021 embedded brains GmbH & Co. KG
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
@@ -64,9 +64,9 @@
#include <rtems/test.h>
/**
- * @defgroup RTEMSTestCaseScoreSmpValFatal spec:/score/smp/val/fatal
+ * @defgroup ScoreSmpValFatal spec:/score/smp/val/fatal
*
- * @ingroup RTEMSTestSuiteTestsuitesFatalSmp
+ * @ingroup TestsuitesFatalSmp
*
* @brief Tests four fatal errors.
*
diff --git a/testsuites/validation/tr-fatal-smp.h b/testsuites/validation/tr-fatal-smp.h
index 5b36498d29..ff7406a47f 100644
--- a/testsuites/validation/tr-fatal-smp.h
+++ b/testsuites/validation/tr-fatal-smp.h
@@ -3,11 +3,11 @@
/**
* @file
*
- * @ingroup RTEMSTestCaseScoreSmpValFatal
+ * @ingroup ScoreSmpValFatal
*/
/*
- * Copyright (C) 2021 embedded brains GmbH (http://www.embedded-brains.de)
+ * Copyright (C) 2021 embedded brains GmbH & Co. KG
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
@@ -58,7 +58,7 @@ extern "C" {
#endif
/**
- * @addtogroup RTEMSTestCaseScoreSmpValFatal
+ * @addtogroup ScoreSmpValFatal
*
* @{
*/
diff --git a/testsuites/validation/tr-fatal-start-of-mandatory-processor-failed.c b/testsuites/validation/tr-fatal-start-of-mandatory-processor-failed.c
index cc0de8c83c..5c1be8271a 100644
--- a/testsuites/validation/tr-fatal-start-of-mandatory-processor-failed.c
+++ b/testsuites/validation/tr-fatal-start-of-mandatory-processor-failed.c
@@ -3,11 +3,11 @@
/**
* @file
*
- * @ingroup RTEMSTestCaseScoreSmpValFatalStartOfMandatoryProcessorFailed
+ * @ingroup ScoreSmpValFatalStartOfMandatoryProcessorFailed
*/
/*
- * Copyright (C) 2021 embedded brains GmbH (http://www.embedded-brains.de)
+ * Copyright (C) 2021 embedded brains GmbH & Co. KG
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
@@ -59,10 +59,10 @@
#include <rtems/test.h>
/**
- * @defgroup RTEMSTestCaseScoreSmpValFatalStartOfMandatoryProcessorFailed \
+ * @defgroup ScoreSmpValFatalStartOfMandatoryProcessorFailed \
* spec:/score/smp/val/fatal-start-of-mandatory-processor-failed
*
- * @ingroup RTEMSTestSuiteTestsuitesFatalStartOfMandatoryProcessorFailed
+ * @ingroup TestsuitesFatalStartOfMandatoryProcessorFailed
*
* @brief Tests a fatal error.
*
diff --git a/testsuites/validation/tr-fatal-start-of-mandatory-processor-failed.h b/testsuites/validation/tr-fatal-start-of-mandatory-processor-failed.h
index c80456bd77..b233ddc00c 100644
--- a/testsuites/validation/tr-fatal-start-of-mandatory-processor-failed.h
+++ b/testsuites/validation/tr-fatal-start-of-mandatory-processor-failed.h
@@ -3,11 +3,11 @@
/**
* @file
*
- * @ingroup RTEMSTestCaseScoreSmpValFatalStartOfMandatoryProcessorFailed
+ * @ingroup ScoreSmpValFatalStartOfMandatoryProcessorFailed
*/
/*
- * Copyright (C) 2021 embedded brains GmbH (http://www.embedded-brains.de)
+ * Copyright (C) 2021 embedded brains GmbH & Co. KG
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
@@ -58,7 +58,7 @@ extern "C" {
#endif
/**
- * @addtogroup RTEMSTestCaseScoreSmpValFatalStartOfMandatoryProcessorFailed
+ * @addtogroup ScoreSmpValFatalStartOfMandatoryProcessorFailed
*
* @{
*/
diff --git a/testsuites/validation/tr-fatal-start-on-not-online-processor.c b/testsuites/validation/tr-fatal-start-on-not-online-processor.c
index 55081bc25d..2773b00783 100644
--- a/testsuites/validation/tr-fatal-start-on-not-online-processor.c
+++ b/testsuites/validation/tr-fatal-start-on-not-online-processor.c
@@ -3,11 +3,11 @@
/**
* @file
*
- * @ingroup RTEMSTestCaseScoreSmpValFatalStartOnNotOnlineProcessor
+ * @ingroup ScoreSmpValFatalStartOnNotOnlineProcessor
*/
/*
- * Copyright (C) 2022 embedded brains GmbH (http://www.embedded-brains.de)
+ * Copyright (C) 2022 embedded brains GmbH & Co. KG
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
@@ -59,10 +59,10 @@
#include <rtems/test.h>
/**
- * @defgroup RTEMSTestCaseScoreSmpValFatalStartOnNotOnlineProcessor \
+ * @defgroup ScoreSmpValFatalStartOnNotOnlineProcessor \
* spec:/score/smp/val/fatal-start-on-not-online-processor
*
- * @ingroup RTEMSTestSuiteTestsuitesFatalStartOnNotOnlineProcessor
+ * @ingroup TestsuitesFatalStartOnNotOnlineProcessor
*
* @brief Tests a fatal error.
*
diff --git a/testsuites/validation/tr-fatal-start-on-not-online-processor.h b/testsuites/validation/tr-fatal-start-on-not-online-processor.h
index 65a8a308f7..58e9641c4f 100644
--- a/testsuites/validation/tr-fatal-start-on-not-online-processor.h
+++ b/testsuites/validation/tr-fatal-start-on-not-online-processor.h
@@ -3,11 +3,11 @@
/**
* @file
*
- * @ingroup RTEMSTestCaseScoreSmpValFatalStartOnNotOnlineProcessor
+ * @ingroup ScoreSmpValFatalStartOnNotOnlineProcessor
*/
/*
- * Copyright (C) 2022 embedded brains GmbH (http://www.embedded-brains.de)
+ * Copyright (C) 2022 embedded brains GmbH & Co. KG
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
@@ -58,7 +58,7 @@ extern "C" {
#endif
/**
- * @addtogroup RTEMSTestCaseScoreSmpValFatalStartOnNotOnlineProcessor
+ * @addtogroup ScoreSmpValFatalStartOnNotOnlineProcessor
*
* @{
*/
diff --git a/testsuites/validation/tr-fatal-too-large-tls-size.c b/testsuites/validation/tr-fatal-too-large-tls-size.c
index 12beeaef90..9bf5dcda97 100644
--- a/testsuites/validation/tr-fatal-too-large-tls-size.c
+++ b/testsuites/validation/tr-fatal-too-large-tls-size.c
@@ -3,11 +3,11 @@
/**
* @file
*
- * @ingroup RTEMSTestCaseAcfgValFatalTooLargeTlsSize
+ * @ingroup AcfgValFatalTooLargeTlsSize
*/
/*
- * Copyright (C) 2021 embedded brains GmbH (http://www.embedded-brains.de)
+ * Copyright (C) 2021 embedded brains GmbH & Co. KG
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
@@ -60,10 +60,10 @@
#include <rtems/test.h>
/**
- * @defgroup RTEMSTestCaseAcfgValFatalTooLargeTlsSize \
+ * @defgroup AcfgValFatalTooLargeTlsSize \
* spec:/acfg/val/fatal-too-large-tls-size
*
- * @ingroup RTEMSTestSuiteTestsuitesFatalTooLargeTlsSize
+ * @ingroup TestsuitesFatalTooLargeTlsSize
*
* @brief Tests a fatal error.
*
diff --git a/testsuites/validation/tr-fatal-too-large-tls-size.h b/testsuites/validation/tr-fatal-too-large-tls-size.h
index 1b5c24e469..c1504261d2 100644
--- a/testsuites/validation/tr-fatal-too-large-tls-size.h
+++ b/testsuites/validation/tr-fatal-too-large-tls-size.h
@@ -3,11 +3,11 @@
/**
* @file
*
- * @ingroup RTEMSTestCaseAcfgValFatalTooLargeTlsSize
+ * @ingroup AcfgValFatalTooLargeTlsSize
*/
/*
- * Copyright (C) 2021 embedded brains GmbH (http://www.embedded-brains.de)
+ * Copyright (C) 2021 embedded brains GmbH & Co. KG
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
@@ -58,7 +58,7 @@ extern "C" {
#endif
/**
- * @addtogroup RTEMSTestCaseAcfgValFatalTooLargeTlsSize
+ * @addtogroup AcfgValFatalTooLargeTlsSize
*
* @{
*/
diff --git a/testsuites/validation/tr-io-kernel.c b/testsuites/validation/tr-io-kernel.c
index c31cf374e0..bbebfe5a26 100644
--- a/testsuites/validation/tr-io-kernel.c
+++ b/testsuites/validation/tr-io-kernel.c
@@ -3,11 +3,11 @@
/**
* @file
*
- * @ingroup RTEMSTestCaseRtemsIoValKernel
+ * @ingroup RtemsIoValKernel
*/
/*
- * Copyright (C) 2021 embedded brains GmbH (http://www.embedded-brains.de)
+ * Copyright (C) 2021 embedded brains GmbH & Co. KG
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
@@ -59,9 +59,9 @@
#include <rtems/test.h>
/**
- * @defgroup RTEMSTestCaseRtemsIoValKernel spec:/rtems/io/val/kernel
+ * @defgroup RtemsIoValKernel spec:/rtems/io/val/kernel
*
- * @ingroup RTEMSTestSuiteTestsuitesValidationIoKernel
+ * @ingroup TestsuitesValidationIoKernel
*
* @brief Tests the functions referenced by BSP_output_char and BSP_poll_char.
*
@@ -82,7 +82,9 @@
*/
static void RtemsIoValKernel_Action_0( void )
{
+ T_report_hash_sha256_update( 'X' );
( *BSP_output_char )( 'X' );
+ T_report_hash_sha256_update( '\n' );
( *BSP_output_char )( '\n' );
}
diff --git a/testsuites/validation/tr-io-kernel.h b/testsuites/validation/tr-io-kernel.h
index 88b12a0645..ef878982dc 100644
--- a/testsuites/validation/tr-io-kernel.h
+++ b/testsuites/validation/tr-io-kernel.h
@@ -3,11 +3,11 @@
/**
* @file
*
- * @ingroup RTEMSTestCaseRtemsIoValKernel
+ * @ingroup RtemsIoValKernel
*/
/*
- * Copyright (C) 2021 embedded brains GmbH (http://www.embedded-brains.de)
+ * Copyright (C) 2021 embedded brains GmbH & Co. KG
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
@@ -56,7 +56,7 @@ extern "C" {
#endif
/**
- * @addtogroup RTEMSTestCaseRtemsIoValKernel
+ * @addtogroup RtemsIoValKernel
*
* @{
*/
diff --git a/testsuites/validation/tr-mtx-seize-try.c b/testsuites/validation/tr-mtx-seize-try.c
index 8279780bff..ddc995c2e1 100644
--- a/testsuites/validation/tr-mtx-seize-try.c
+++ b/testsuites/validation/tr-mtx-seize-try.c
@@ -3,11 +3,11 @@
/**
* @file
*
- * @ingroup RTEMSTestCaseScoreMtxReqSeizeTry
+ * @ingroup ScoreMtxReqSeizeTry
*/
/*
- * Copyright (C) 2021 embedded brains GmbH (http://www.embedded-brains.de)
+ * Copyright (C) 2021 embedded brains GmbH & Co. KG
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
@@ -53,17 +53,13 @@
#endif
#include "tr-mtx-seize-try.h"
-#include "tr-tq-enqueue-ceiling.h"
-#include "tr-tq-enqueue-fifo.h"
-#include "tr-tq-enqueue-mrsp.h"
-#include "tr-tq-enqueue-priority.h"
#include <rtems/test.h>
/**
- * @defgroup RTEMSTestCaseScoreMtxReqSeizeTry spec:/score/mtx/req/seize-try
+ * @defgroup ScoreMtxReqSeizeTry spec:/score/mtx/req/seize-try
*
- * @ingroup RTEMSTestSuiteTestsuitesValidationNoClock0
+ * @ingroup TestsuitesValidationNoClock0
*
* @{
*/
@@ -88,19 +84,19 @@ typedef struct {
* @brief If this member is true, then the calling thread shall be the owner
* of the mutex.
*/
- bool owner_caller;;
+ bool owner_caller;
/**
* @brief If this member is true, then a thread other than the calling thread
* shall be the owner of the mutex.
*/
- bool owner_other;;
+ bool owner_other;
/**
* @brief This member contains the current priority of the calling thread
* before the directive call.
*/
- rtems_task_priority priority_before;;
+ rtems_task_priority priority_before;
/**
* @brief This member contains the owner of the mutex after the directive
@@ -112,7 +108,7 @@ typedef struct {
* @brief This member contains the current priority of the calling thread
* after the directive call.
*/
- rtems_task_priority priority_after;;
+ rtems_task_priority priority_after;
/**
* @brief This member contains a copy of the corresponding
@@ -805,6 +801,11 @@ static void ScoreMtxReqSeizeTry_TestVariant( ScoreMtxReqSeizeTry_Context *ctx )
static T_fixture_node ScoreMtxReqSeizeTry_Node;
+static T_remark ScoreMtxReqSeizeTry_Remark = {
+ .next = NULL,
+ .remark = "ScoreMtxReqSeizeTry"
+};
+
void ScoreMtxReqSeizeTry_Run( TQMtxContext *tq_ctx )
{
ScoreMtxReqSeizeTry_Context *ctx;
@@ -860,6 +861,7 @@ void ScoreMtxReqSeizeTry_Run( TQMtxContext *tq_ctx )
}
}
+ T_add_remark( &ScoreMtxReqSeizeTry_Remark );
T_pop_fixture();
}
diff --git a/testsuites/validation/tr-mtx-seize-try.h b/testsuites/validation/tr-mtx-seize-try.h
index 84e7cd6849..28bac7d25d 100644
--- a/testsuites/validation/tr-mtx-seize-try.h
+++ b/testsuites/validation/tr-mtx-seize-try.h
@@ -3,11 +3,11 @@
/**
* @file
*
- * @ingroup RTEMSTestCaseScoreMtxReqSeizeTry
+ * @ingroup ScoreMtxReqSeizeTry
*/
/*
- * Copyright (C) 2021 embedded brains GmbH (http://www.embedded-brains.de)
+ * Copyright (C) 2021 embedded brains GmbH & Co. KG
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
@@ -58,7 +58,7 @@ extern "C" {
#endif
/**
- * @addtogroup RTEMSTestCaseScoreMtxReqSeizeTry
+ * @addtogroup ScoreMtxReqSeizeTry
*
* @{
*/
diff --git a/testsuites/validation/tr-mtx-seize-wait.c b/testsuites/validation/tr-mtx-seize-wait.c
index 367ca0da32..2e2fe9d1ec 100644
--- a/testsuites/validation/tr-mtx-seize-wait.c
+++ b/testsuites/validation/tr-mtx-seize-wait.c
@@ -3,11 +3,11 @@
/**
* @file
*
- * @ingroup RTEMSTestCaseScoreMtxReqSeizeWait
+ * @ingroup ScoreMtxReqSeizeWait
*/
/*
- * Copyright (C) 2021 embedded brains GmbH (http://www.embedded-brains.de)
+ * Copyright (C) 2021 embedded brains GmbH & Co. KG
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
@@ -56,16 +56,15 @@
#include "tr-tq-enqueue-ceiling.h"
#include "tr-tq-enqueue-deadlock.h"
#include "tr-tq-enqueue-fifo.h"
-#include "tr-tq-enqueue-mrsp.h"
#include "tr-tq-enqueue-priority-inherit.h"
#include "tr-tq-enqueue-priority.h"
#include <rtems/test.h>
/**
- * @defgroup RTEMSTestCaseScoreMtxReqSeizeWait spec:/score/mtx/req/seize-wait
+ * @defgroup ScoreMtxReqSeizeWait spec:/score/mtx/req/seize-wait
*
- * @ingroup RTEMSTestSuiteTestsuitesValidationNoClock0
+ * @ingroup TestsuitesValidationNoClock0
*
* @{
*/
@@ -92,24 +91,24 @@ typedef struct {
* @brief If this member is true, then the calling thread shall be the owner
* of the mutex.
*/
- bool owner_caller;;
+ bool owner_caller;
/**
* @brief If this member is true, then a thread other than the calling thread
* shall be the owner of the mutex.
*/
- bool owner_other;;
+ bool owner_other;
/**
* @brief If this member is true, then a deadlock shall occur.
*/
- bool deadlock;;
+ bool deadlock;
/**
* @brief This member contains the current priority of the calling thread
* before the directive call.
*/
- rtems_task_priority priority_before;;
+ rtems_task_priority priority_before;
/**
* @brief This member contains the owner of the mutex after the directive
@@ -121,7 +120,7 @@ typedef struct {
* @brief This member contains the current priority of the calling thread
* after the directive call.
*/
- rtems_task_priority priority_after;;
+ rtems_task_priority priority_after;
/**
* @brief This member contains a copy of the corresponding
@@ -218,6 +217,10 @@ static const char * const * const ScoreMtxReqSeizeWait_PreDesc[] = {
NULL
};
+#if defined(RTEMS_SMP)
+#include "tr-tq-enqueue-mrsp.h"
+#endif
+
typedef ScoreMtxReqSeizeWait_Context Context;
static Status_Control Status( const Context *ctx, Status_Control status )
@@ -707,7 +710,7 @@ static void ScoreMtxReqSeizeWait_Post_Enqueued_Check(
case ScoreMtxReqSeizeWait_Post_Enqueued_PriorityInherit: {
/*
- * The calling thread shall be enqueued in priority order with priorit
+ * The calling thread shall be enqueued in priority order with priority
* inheritance.
*/
ScoreTqReqEnqueuePriorityInherit_Run( &ctx->tq_ctx->base );
@@ -728,7 +731,11 @@ static void ScoreMtxReqSeizeWait_Post_Enqueued_Check(
* The calling thread shall be enqueued in priority order according to
* the MrsP locking protocol.
*/
+ #if defined(RTEMS_SMP)
ScoreTqReqEnqueueMrsp_Run( &ctx->tq_ctx->base );
+ #else
+ T_unreachable();
+ #endif
break;
}
@@ -1072,6 +1079,11 @@ static void ScoreMtxReqSeizeWait_TestVariant(
static T_fixture_node ScoreMtxReqSeizeWait_Node;
+static T_remark ScoreMtxReqSeizeWait_Remark = {
+ .next = NULL,
+ .remark = "ScoreMtxReqSeizeWait"
+};
+
void ScoreMtxReqSeizeWait_Run( TQMtxContext *tq_ctx )
{
ScoreMtxReqSeizeWait_Context *ctx;
@@ -1133,6 +1145,7 @@ void ScoreMtxReqSeizeWait_Run( TQMtxContext *tq_ctx )
}
}
+ T_add_remark( &ScoreMtxReqSeizeWait_Remark );
T_pop_fixture();
}
diff --git a/testsuites/validation/tr-mtx-seize-wait.h b/testsuites/validation/tr-mtx-seize-wait.h
index 1ac532b1ce..0d3beeb97b 100644
--- a/testsuites/validation/tr-mtx-seize-wait.h
+++ b/testsuites/validation/tr-mtx-seize-wait.h
@@ -3,11 +3,11 @@
/**
* @file
*
- * @ingroup RTEMSTestCaseScoreMtxReqSeizeWait
+ * @ingroup ScoreMtxReqSeizeWait
*/
/*
- * Copyright (C) 2021 embedded brains GmbH (http://www.embedded-brains.de)
+ * Copyright (C) 2021 embedded brains GmbH & Co. KG
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
@@ -58,7 +58,7 @@ extern "C" {
#endif
/**
- * @addtogroup RTEMSTestCaseScoreMtxReqSeizeWait
+ * @addtogroup ScoreMtxReqSeizeWait
*
* @{
*/
diff --git a/testsuites/validation/tr-mtx-surrender.c b/testsuites/validation/tr-mtx-surrender.c
index 6e27ff2bc9..3c60726803 100644
--- a/testsuites/validation/tr-mtx-surrender.c
+++ b/testsuites/validation/tr-mtx-surrender.c
@@ -3,11 +3,11 @@
/**
* @file
*
- * @ingroup RTEMSTestCaseScoreMtxReqSurrender
+ * @ingroup ScoreMtxReqSurrender
*/
/*
- * Copyright (C) 2021 embedded brains GmbH (http://www.embedded-brains.de)
+ * Copyright (C) 2021 embedded brains GmbH & Co. KG
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
@@ -53,16 +53,15 @@
#endif
#include "tr-mtx-surrender.h"
-#include "tr-tq-surrender-mrsp.h"
#include "tr-tq-surrender-priority-inherit.h"
#include "tr-tq-surrender.h"
#include <rtems/test.h>
/**
- * @defgroup RTEMSTestCaseScoreMtxReqSurrender spec:/score/mtx/req/surrender
+ * @defgroup ScoreMtxReqSurrender spec:/score/mtx/req/surrender
*
- * @ingroup RTEMSTestSuiteTestsuitesValidationNoClock0
+ * @ingroup TestsuitesValidationNoClock0
*
* @{
*/
@@ -252,6 +251,10 @@ static const char * const * const ScoreMtxReqSurrender_PreDesc[] = {
NULL
};
+#if defined(RTEMS_SMP)
+#include "tr-tq-surrender-mrsp.h"
+#endif
+
typedef ScoreMtxReqSurrender_Context Context;
static Status_Control Status( const Context *ctx, Status_Control status )
@@ -810,8 +813,12 @@ static void ScoreMtxReqSurrender_Post_Surrender_Check(
* The thread queue of the mutex shall be surrendered in priority order
* with MrsP.
*/
+ #if defined(RTEMS_SMP)
T_eq_u32( ctx->counter, 1 );
ScoreTqReqSurrenderMrsp_Run( &ctx->tq_ctx->base );
+ #else
+ T_unreachable();
+ #endif
break;
}
@@ -1154,6 +1161,11 @@ static void ScoreMtxReqSurrender_TestVariant(
static T_fixture_node ScoreMtxReqSurrender_Node;
+static T_remark ScoreMtxReqSurrender_Remark = {
+ .next = NULL,
+ .remark = "ScoreMtxReqSurrender"
+};
+
void ScoreMtxReqSurrender_Run( TQMtxContext *tq_ctx )
{
ScoreMtxReqSurrender_Context *ctx;
@@ -1227,6 +1239,7 @@ void ScoreMtxReqSurrender_Run( TQMtxContext *tq_ctx )
}
}
+ T_add_remark( &ScoreMtxReqSurrender_Remark );
T_pop_fixture();
}
diff --git a/testsuites/validation/tr-mtx-surrender.h b/testsuites/validation/tr-mtx-surrender.h
index 79b044d184..1b732d5e73 100644
--- a/testsuites/validation/tr-mtx-surrender.h
+++ b/testsuites/validation/tr-mtx-surrender.h
@@ -3,11 +3,11 @@
/**
* @file
*
- * @ingroup RTEMSTestCaseScoreMtxReqSurrender
+ * @ingroup ScoreMtxReqSurrender
*/
/*
- * Copyright (C) 2021 embedded brains GmbH (http://www.embedded-brains.de)
+ * Copyright (C) 2021 embedded brains GmbH & Co. KG
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
@@ -58,7 +58,7 @@ extern "C" {
#endif
/**
- * @addtogroup RTEMSTestCaseScoreMtxReqSurrender
+ * @addtogroup ScoreMtxReqSurrender
*
* @{
*/
diff --git a/testsuites/validation/tr-object-ident-local.c b/testsuites/validation/tr-object-ident-local.c
index 1b3943fdb1..5cf521fbd6 100644
--- a/testsuites/validation/tr-object-ident-local.c
+++ b/testsuites/validation/tr-object-ident-local.c
@@ -3,11 +3,11 @@
/**
* @file
*
- * @ingroup RTEMSTestCaseRtemsReqIdentLocal
+ * @ingroup RtemsReqIdentLocal
*/
/*
- * Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+ * Copyright (C) 2020 embedded brains GmbH & Co. KG
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
@@ -57,9 +57,9 @@
#include <rtems/test.h>
/**
- * @defgroup RTEMSTestCaseRtemsReqIdentLocal spec:/rtems/req/ident-local
+ * @defgroup RtemsReqIdentLocal spec:/rtems/req/ident-local
*
- * @ingroup RTEMSTestSuiteTestsuitesValidationNoClock0
+ * @ingroup TestsuitesValidationNoClock0
*
* @{
*/
@@ -350,6 +350,11 @@ static void RtemsReqIdentLocal_TestVariant( RtemsReqIdentLocal_Context *ctx )
static T_fixture_node RtemsReqIdentLocal_Node;
+static T_remark RtemsReqIdentLocal_Remark = {
+ .next = NULL,
+ .remark = "RtemsReqIdentLocal"
+};
+
void RtemsReqIdentLocal_Run(
rtems_id id_local_object,
rtems_name name_local_object,
@@ -382,6 +387,7 @@ void RtemsReqIdentLocal_Run(
}
}
+ T_add_remark( &RtemsReqIdentLocal_Remark );
T_pop_fixture();
}
diff --git a/testsuites/validation/tr-object-ident-local.h b/testsuites/validation/tr-object-ident-local.h
index 83ad7e7416..d3cf1c307a 100644
--- a/testsuites/validation/tr-object-ident-local.h
+++ b/testsuites/validation/tr-object-ident-local.h
@@ -3,11 +3,11 @@
/**
* @file
*
- * @ingroup RTEMSTestCaseRtemsReqIdentLocal
+ * @ingroup RtemsReqIdentLocal
*/
/*
- * Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+ * Copyright (C) 2020 embedded brains GmbH & Co. KG
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
@@ -58,7 +58,7 @@ extern "C" {
#endif
/**
- * @addtogroup RTEMSTestCaseRtemsReqIdentLocal
+ * @addtogroup RtemsReqIdentLocal
*
* @{
*/
diff --git a/testsuites/validation/tr-object-ident.c b/testsuites/validation/tr-object-ident.c
index 438c1f3333..df66d51437 100644
--- a/testsuites/validation/tr-object-ident.c
+++ b/testsuites/validation/tr-object-ident.c
@@ -3,11 +3,11 @@
/**
* @file
*
- * @ingroup RTEMSTestCaseRtemsReqIdent
+ * @ingroup RtemsReqIdent
*/
/*
- * Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+ * Copyright (C) 2020 embedded brains GmbH & Co. KG
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
@@ -57,9 +57,9 @@
#include <rtems/test.h>
/**
- * @defgroup RTEMSTestCaseRtemsReqIdent spec:/rtems/req/ident
+ * @defgroup RtemsReqIdent spec:/rtems/req/ident
*
- * @ingroup RTEMSTestSuiteTestsuitesValidationNoClock0
+ * @ingroup TestsuitesValidationNoClock0
*
* @{
*/
@@ -454,6 +454,11 @@ static void RtemsReqIdent_TestVariant( RtemsReqIdent_Context *ctx )
static T_fixture_node RtemsReqIdent_Node;
+static T_remark RtemsReqIdent_Remark = {
+ .next = NULL,
+ .remark = "RtemsReqIdent"
+};
+
void RtemsReqIdent_Run(
rtems_id id_local_object,
rtems_name name_local_object,
@@ -492,6 +497,7 @@ void RtemsReqIdent_Run(
}
}
+ T_add_remark( &RtemsReqIdent_Remark );
T_pop_fixture();
}
diff --git a/testsuites/validation/tr-object-ident.h b/testsuites/validation/tr-object-ident.h
index 7917562eab..404d56c707 100644
--- a/testsuites/validation/tr-object-ident.h
+++ b/testsuites/validation/tr-object-ident.h
@@ -3,11 +3,11 @@
/**
* @file
*
- * @ingroup RTEMSTestCaseRtemsReqIdent
+ * @ingroup RtemsReqIdent
*/
/*
- * Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+ * Copyright (C) 2020 embedded brains GmbH & Co. KG
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
@@ -58,7 +58,7 @@ extern "C" {
#endif
/**
- * @addtogroup RTEMSTestCaseRtemsReqIdent
+ * @addtogroup RtemsReqIdent
*
* @{
*/
diff --git a/testsuites/validation/tr-sem-seize-try.c b/testsuites/validation/tr-sem-seize-try.c
index e723230288..3470f832fd 100644
--- a/testsuites/validation/tr-sem-seize-try.c
+++ b/testsuites/validation/tr-sem-seize-try.c
@@ -3,11 +3,11 @@
/**
* @file
*
- * @ingroup RTEMSTestCaseScoreSemReqSeizeTry
+ * @ingroup ScoreSemReqSeizeTry
*/
/*
- * Copyright (C) 2021 embedded brains GmbH (http://www.embedded-brains.de)
+ * Copyright (C) 2021 embedded brains GmbH & Co. KG
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
@@ -57,9 +57,9 @@
#include <rtems/test.h>
/**
- * @defgroup RTEMSTestCaseScoreSemReqSeizeTry spec:/score/sem/req/seize-try
+ * @defgroup ScoreSemReqSeizeTry spec:/score/sem/req/seize-try
*
- * @ingroup RTEMSTestSuiteTestsuitesValidationNoClock0
+ * @ingroup TestsuitesValidationNoClock0
*
* @{
*/
@@ -294,6 +294,11 @@ static void ScoreSemReqSeizeTry_TestVariant( ScoreSemReqSeizeTry_Context *ctx )
static T_fixture_node ScoreSemReqSeizeTry_Node;
+static T_remark ScoreSemReqSeizeTry_Remark = {
+ .next = NULL,
+ .remark = "ScoreSemReqSeizeTry"
+};
+
void ScoreSemReqSeizeTry_Run( TQSemContext *tq_ctx )
{
ScoreSemReqSeizeTry_Context *ctx;
@@ -317,6 +322,7 @@ void ScoreSemReqSeizeTry_Run( TQSemContext *tq_ctx )
ScoreSemReqSeizeTry_TestVariant( ctx );
}
+ T_add_remark( &ScoreSemReqSeizeTry_Remark );
T_pop_fixture();
}
diff --git a/testsuites/validation/tr-sem-seize-try.h b/testsuites/validation/tr-sem-seize-try.h
index 155bf59cf8..347c8aa61d 100644
--- a/testsuites/validation/tr-sem-seize-try.h
+++ b/testsuites/validation/tr-sem-seize-try.h
@@ -3,11 +3,11 @@
/**
* @file
*
- * @ingroup RTEMSTestCaseScoreSemReqSeizeTry
+ * @ingroup ScoreSemReqSeizeTry
*/
/*
- * Copyright (C) 2021 embedded brains GmbH (http://www.embedded-brains.de)
+ * Copyright (C) 2021 embedded brains GmbH & Co. KG
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
@@ -58,7 +58,7 @@ extern "C" {
#endif
/**
- * @addtogroup RTEMSTestCaseScoreSemReqSeizeTry
+ * @addtogroup ScoreSemReqSeizeTry
*
* @{
*/
diff --git a/testsuites/validation/tr-sem-seize-wait.c b/testsuites/validation/tr-sem-seize-wait.c
index b4c4266103..bbc1cfd252 100644
--- a/testsuites/validation/tr-sem-seize-wait.c
+++ b/testsuites/validation/tr-sem-seize-wait.c
@@ -3,11 +3,11 @@
/**
* @file
*
- * @ingroup RTEMSTestCaseScoreSemReqSeizeWait
+ * @ingroup ScoreSemReqSeizeWait
*/
/*
- * Copyright (C) 2021 embedded brains GmbH (http://www.embedded-brains.de)
+ * Copyright (C) 2021 embedded brains GmbH & Co. KG
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
@@ -61,9 +61,9 @@
#include <rtems/test.h>
/**
- * @defgroup RTEMSTestCaseScoreSemReqSeizeWait spec:/score/sem/req/seize-wait
+ * @defgroup ScoreSemReqSeizeWait spec:/score/sem/req/seize-wait
*
- * @ingroup RTEMSTestSuiteTestsuitesValidationNoClock0
+ * @ingroup TestsuitesValidationNoClock0
*
* @{
*/
@@ -368,6 +368,11 @@ static void ScoreSemReqSeizeWait_TestVariant(
static T_fixture_node ScoreSemReqSeizeWait_Node;
+static T_remark ScoreSemReqSeizeWait_Remark = {
+ .next = NULL,
+ .remark = "ScoreSemReqSeizeWait"
+};
+
void ScoreSemReqSeizeWait_Run( TQSemContext *tq_ctx )
{
ScoreSemReqSeizeWait_Context *ctx;
@@ -392,6 +397,7 @@ void ScoreSemReqSeizeWait_Run( TQSemContext *tq_ctx )
ScoreSemReqSeizeWait_TestVariant( ctx );
}
+ T_add_remark( &ScoreSemReqSeizeWait_Remark );
T_pop_fixture();
}
diff --git a/testsuites/validation/tr-sem-seize-wait.h b/testsuites/validation/tr-sem-seize-wait.h
index 91d1790347..68156abbc7 100644
--- a/testsuites/validation/tr-sem-seize-wait.h
+++ b/testsuites/validation/tr-sem-seize-wait.h
@@ -3,11 +3,11 @@
/**
* @file
*
- * @ingroup RTEMSTestCaseScoreSemReqSeizeWait
+ * @ingroup ScoreSemReqSeizeWait
*/
/*
- * Copyright (C) 2021 embedded brains GmbH (http://www.embedded-brains.de)
+ * Copyright (C) 2021 embedded brains GmbH & Co. KG
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
@@ -58,7 +58,7 @@ extern "C" {
#endif
/**
- * @addtogroup RTEMSTestCaseScoreSemReqSeizeWait
+ * @addtogroup ScoreSemReqSeizeWait
*
* @{
*/
diff --git a/testsuites/validation/tr-sem-surrender.c b/testsuites/validation/tr-sem-surrender.c
index 8226093dda..d554a33dd2 100644
--- a/testsuites/validation/tr-sem-surrender.c
+++ b/testsuites/validation/tr-sem-surrender.c
@@ -3,11 +3,11 @@
/**
* @file
*
- * @ingroup RTEMSTestCaseScoreSemReqSurrender
+ * @ingroup ScoreSemReqSurrender
*/
/*
- * Copyright (C) 2021 embedded brains GmbH (http://www.embedded-brains.de)
+ * Copyright (C) 2021 embedded brains GmbH & Co. KG
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
@@ -58,9 +58,9 @@
#include <rtems/test.h>
/**
- * @defgroup RTEMSTestCaseScoreSemReqSurrender spec:/score/sem/req/surrender
+ * @defgroup ScoreSemReqSurrender spec:/score/sem/req/surrender
*
- * @ingroup RTEMSTestSuiteTestsuitesValidationNoClock0
+ * @ingroup TestsuitesValidationNoClock0
*
* @{
*/
@@ -528,6 +528,11 @@ static void ScoreSemReqSurrender_TestVariant(
static T_fixture_node ScoreSemReqSurrender_Node;
+static T_remark ScoreSemReqSurrender_Remark = {
+ .next = NULL,
+ .remark = "ScoreSemReqSurrender"
+};
+
void ScoreSemReqSurrender_Run( TQSemContext *tq_ctx )
{
ScoreSemReqSurrender_Context *ctx;
@@ -564,6 +569,7 @@ void ScoreSemReqSurrender_Run( TQSemContext *tq_ctx )
}
}
+ T_add_remark( &ScoreSemReqSurrender_Remark );
T_pop_fixture();
}
diff --git a/testsuites/validation/tr-sem-surrender.h b/testsuites/validation/tr-sem-surrender.h
index 06ab4c20c1..d03fe56b54 100644
--- a/testsuites/validation/tr-sem-surrender.h
+++ b/testsuites/validation/tr-sem-surrender.h
@@ -3,11 +3,11 @@
/**
* @file
*
- * @ingroup RTEMSTestCaseScoreSemReqSurrender
+ * @ingroup ScoreSemReqSurrender
*/
/*
- * Copyright (C) 2021 embedded brains GmbH (http://www.embedded-brains.de)
+ * Copyright (C) 2021 embedded brains GmbH & Co. KG
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
@@ -58,7 +58,7 @@ extern "C" {
#endif
/**
- * @addtogroup RTEMSTestCaseScoreSemReqSurrender
+ * @addtogroup ScoreSemReqSurrender
*
* @{
*/
diff --git a/testsuites/validation/tr-signal-constant.c b/testsuites/validation/tr-signal-constant.c
index 323f977272..c8aeb463fd 100644
--- a/testsuites/validation/tr-signal-constant.c
+++ b/testsuites/validation/tr-signal-constant.c
@@ -3,11 +3,11 @@
/**
* @file
*
- * @ingroup RTEMSTestCaseRtemsSignalValSignalConstant
+ * @ingroup RtemsSignalValSignalConstant
*/
/*
- * Copyright (C) 2021 embedded brains GmbH (http://www.embedded-brains.de)
+ * Copyright (C) 2021 embedded brains GmbH & Co. KG
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
@@ -59,10 +59,10 @@
#include <rtems/test.h>
/**
- * @defgroup RTEMSTestCaseRtemsSignalValSignalConstant \
+ * @defgroup RtemsSignalValSignalConstant \
* spec:/rtems/signal/val/signal-constant
*
- * @ingroup RTEMSTestSuiteTestsuitesValidationNoClock0
+ * @ingroup TestsuitesValidationNoClock0
*
* @brief Tests a signal constant of the @ref RTEMSAPIClassicSignal using the
* signal set of the executing task.
@@ -176,6 +176,11 @@ static void RtemsSignalValSignalConstant_Action_1(
static T_fixture_node RtemsSignalValSignalConstant_Node;
+static T_remark RtemsSignalValSignalConstant_Remark = {
+ .next = NULL,
+ .remark = "RtemsSignalValSignalConstant"
+};
+
void RtemsSignalValSignalConstant_Run( rtems_signal_set signal, int number )
{
RtemsSignalValSignalConstant_Context *ctx;
@@ -194,6 +199,7 @@ void RtemsSignalValSignalConstant_Run( rtems_signal_set signal, int number )
RtemsSignalValSignalConstant_Action_0( ctx );
RtemsSignalValSignalConstant_Action_1( ctx );
+ T_add_remark( &RtemsSignalValSignalConstant_Remark );
T_pop_fixture();
}
diff --git a/testsuites/validation/tr-signal-constant.h b/testsuites/validation/tr-signal-constant.h
index 99b43f159b..a957426213 100644
--- a/testsuites/validation/tr-signal-constant.h
+++ b/testsuites/validation/tr-signal-constant.h
@@ -3,11 +3,11 @@
/**
* @file
*
- * @ingroup RTEMSTestCaseRtemsSignalValSignalConstant
+ * @ingroup RtemsSignalValSignalConstant
*/
/*
- * Copyright (C) 2021 embedded brains GmbH (http://www.embedded-brains.de)
+ * Copyright (C) 2021 embedded brains GmbH & Co. KG
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
@@ -58,7 +58,7 @@ extern "C" {
#endif
/**
- * @addtogroup RTEMSTestCaseRtemsSignalValSignalConstant
+ * @addtogroup RtemsSignalValSignalConstant
*
* @{
*/
diff --git a/testsuites/validation/tr-tq-enqueue-ceiling.c b/testsuites/validation/tr-tq-enqueue-ceiling.c
index 5309b31260..a0b4077689 100644
--- a/testsuites/validation/tr-tq-enqueue-ceiling.c
+++ b/testsuites/validation/tr-tq-enqueue-ceiling.c
@@ -3,11 +3,11 @@
/**
* @file
*
- * @ingroup RTEMSTestCaseScoreTqReqEnqueueCeiling
+ * @ingroup ScoreTqReqEnqueueCeiling
*/
/*
- * Copyright (C) 2021 embedded brains GmbH (http://www.embedded-brains.de)
+ * Copyright (C) 2021 embedded brains GmbH & Co. KG
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
@@ -57,10 +57,9 @@
#include <rtems/test.h>
/**
- * @defgroup RTEMSTestCaseScoreTqReqEnqueueCeiling \
- * spec:/score/tq/req/enqueue-ceiling
+ * @defgroup ScoreTqReqEnqueueCeiling spec:/score/tq/req/enqueue-ceiling
*
- * @ingroup RTEMSTestSuiteTestsuitesValidationNoClock0
+ * @ingroup TestsuitesValidationNoClock0
*
* @{
*/
@@ -87,7 +86,7 @@ typedef struct {
* @brief This member specifies the priority of a thread with an eligible
* scheduler equal to an eligible scheduler of the enqueueing thread.
*/
- rtems_task_priority priority;;
+ rtems_task_priority priority;
/**
* @brief If this member is true, then a thread those eligible schedulers are
@@ -95,7 +94,7 @@ typedef struct {
* thread with an eligible scheduler equal to an eligible scheduler of the
* enqueueing thread.
*/
- size_t other_before;;
+ size_t other_before;
/**
* @brief If this member is true, then a thread those eligible schedulers are
@@ -103,7 +102,7 @@ typedef struct {
* thread with an eligible scheduler equal to an eligible scheduler of the
* enqueueing thread.
*/
- size_t other_after;;
+ size_t other_after;
/**
* @brief This member contains a copy of the corresponding
@@ -455,7 +454,9 @@ static void ScoreTqReqEnqueueCeiling_Prepare(
ScoreTqReqEnqueueCeiling_Context *ctx
)
{
- ctx->priority = PRIO_PSEUDO_ISR; ctx->other_before = false; ctx->other_after = false;
+ ctx->priority = PRIO_PSEUDO_ISR;
+ ctx->other_before = false;
+ ctx->other_after = false;
}
static void ScoreTqReqEnqueueCeiling_Action(
@@ -644,6 +645,11 @@ static void ScoreTqReqEnqueueCeiling_TestVariant(
static T_fixture_node ScoreTqReqEnqueueCeiling_Node;
+static T_remark ScoreTqReqEnqueueCeiling_Remark = {
+ .next = NULL,
+ .remark = "ScoreTqReqEnqueueCeiling"
+};
+
void ScoreTqReqEnqueueCeiling_Run( TQContext *tq_ctx )
{
ScoreTqReqEnqueueCeiling_Context *ctx;
@@ -680,6 +686,7 @@ void ScoreTqReqEnqueueCeiling_Run( TQContext *tq_ctx )
}
}
+ T_add_remark( &ScoreTqReqEnqueueCeiling_Remark );
T_pop_fixture();
}
diff --git a/testsuites/validation/tr-tq-enqueue-ceiling.h b/testsuites/validation/tr-tq-enqueue-ceiling.h
index 3eca5033db..3f61865791 100644
--- a/testsuites/validation/tr-tq-enqueue-ceiling.h
+++ b/testsuites/validation/tr-tq-enqueue-ceiling.h
@@ -3,11 +3,11 @@
/**
* @file
*
- * @ingroup RTEMSTestCaseScoreTqReqEnqueueCeiling
+ * @ingroup ScoreTqReqEnqueueCeiling
*/
/*
- * Copyright (C) 2021 embedded brains GmbH (http://www.embedded-brains.de)
+ * Copyright (C) 2021 embedded brains GmbH & Co. KG
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
@@ -58,7 +58,7 @@ extern "C" {
#endif
/**
- * @addtogroup RTEMSTestCaseScoreTqReqEnqueueCeiling
+ * @addtogroup ScoreTqReqEnqueueCeiling
*
* @{
*/
diff --git a/testsuites/validation/tr-tq-enqueue-deadlock.c b/testsuites/validation/tr-tq-enqueue-deadlock.c
index afe4ef864e..7f61cbc444 100644
--- a/testsuites/validation/tr-tq-enqueue-deadlock.c
+++ b/testsuites/validation/tr-tq-enqueue-deadlock.c
@@ -3,11 +3,11 @@
/**
* @file
*
- * @ingroup RTEMSTestCaseScoreTqReqEnqueueDeadlock
+ * @ingroup ScoreTqReqEnqueueDeadlock
*/
/*
- * Copyright (C) 2021 embedded brains GmbH (http://www.embedded-brains.de)
+ * Copyright (C) 2021 embedded brains GmbH & Co. KG
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
@@ -57,10 +57,9 @@
#include <rtems/test.h>
/**
- * @defgroup RTEMSTestCaseScoreTqReqEnqueueDeadlock \
- * spec:/score/tq/req/enqueue-deadlock
+ * @defgroup ScoreTqReqEnqueueDeadlock spec:/score/tq/req/enqueue-deadlock
*
- * @ingroup RTEMSTestSuiteTestsuitesValidationNoClock0
+ * @ingroup TestsuitesValidationNoClock0
*
* @{
*/
@@ -406,6 +405,11 @@ static void ScoreTqReqEnqueueDeadlock_TestVariant(
static T_fixture_node ScoreTqReqEnqueueDeadlock_Node;
+static T_remark ScoreTqReqEnqueueDeadlock_Remark = {
+ .next = NULL,
+ .remark = "ScoreTqReqEnqueueDeadlock"
+};
+
void ScoreTqReqEnqueueDeadlock_Run( TQContext *tq_ctx )
{
ScoreTqReqEnqueueDeadlock_Context *ctx;
@@ -436,6 +440,7 @@ void ScoreTqReqEnqueueDeadlock_Run( TQContext *tq_ctx )
}
}
+ T_add_remark( &ScoreTqReqEnqueueDeadlock_Remark );
T_pop_fixture();
}
diff --git a/testsuites/validation/tr-tq-enqueue-deadlock.h b/testsuites/validation/tr-tq-enqueue-deadlock.h
index be23bcf879..1fe580a19c 100644
--- a/testsuites/validation/tr-tq-enqueue-deadlock.h
+++ b/testsuites/validation/tr-tq-enqueue-deadlock.h
@@ -3,11 +3,11 @@
/**
* @file
*
- * @ingroup RTEMSTestCaseScoreTqReqEnqueueDeadlock
+ * @ingroup ScoreTqReqEnqueueDeadlock
*/
/*
- * Copyright (C) 2021 embedded brains GmbH (http://www.embedded-brains.de)
+ * Copyright (C) 2021 embedded brains GmbH & Co. KG
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
@@ -58,7 +58,7 @@ extern "C" {
#endif
/**
- * @addtogroup RTEMSTestCaseScoreTqReqEnqueueDeadlock
+ * @addtogroup ScoreTqReqEnqueueDeadlock
*
* @{
*/
diff --git a/testsuites/validation/tr-tq-enqueue-fifo.c b/testsuites/validation/tr-tq-enqueue-fifo.c
index b64a99c0d1..27ac064797 100644
--- a/testsuites/validation/tr-tq-enqueue-fifo.c
+++ b/testsuites/validation/tr-tq-enqueue-fifo.c
@@ -3,11 +3,11 @@
/**
* @file
*
- * @ingroup RTEMSTestCaseScoreTqReqEnqueueFifo
+ * @ingroup ScoreTqReqEnqueueFifo
*/
/*
- * Copyright (C) 2021 embedded brains GmbH (http://www.embedded-brains.de)
+ * Copyright (C) 2021 embedded brains GmbH & Co. KG
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
@@ -57,9 +57,9 @@
#include <rtems/test.h>
/**
- * @defgroup RTEMSTestCaseScoreTqReqEnqueueFifo spec:/score/tq/req/enqueue-fifo
+ * @defgroup ScoreTqReqEnqueueFifo spec:/score/tq/req/enqueue-fifo
*
- * @ingroup RTEMSTestSuiteTestsuitesValidationNoClock0
+ * @ingroup TestsuitesValidationNoClock0
*
* @{
*/
@@ -305,6 +305,11 @@ static void ScoreTqReqEnqueueFifo_TestVariant(
static T_fixture_node ScoreTqReqEnqueueFifo_Node;
+static T_remark ScoreTqReqEnqueueFifo_Remark = {
+ .next = NULL,
+ .remark = "ScoreTqReqEnqueueFifo"
+};
+
void ScoreTqReqEnqueueFifo_Run( TQContext *tq_ctx )
{
ScoreTqReqEnqueueFifo_Context *ctx;
@@ -328,6 +333,7 @@ void ScoreTqReqEnqueueFifo_Run( TQContext *tq_ctx )
ScoreTqReqEnqueueFifo_TestVariant( ctx );
}
+ T_add_remark( &ScoreTqReqEnqueueFifo_Remark );
T_pop_fixture();
}
diff --git a/testsuites/validation/tr-tq-enqueue-fifo.h b/testsuites/validation/tr-tq-enqueue-fifo.h
index 776cded8b9..16a37ecf2b 100644
--- a/testsuites/validation/tr-tq-enqueue-fifo.h
+++ b/testsuites/validation/tr-tq-enqueue-fifo.h
@@ -3,11 +3,11 @@
/**
* @file
*
- * @ingroup RTEMSTestCaseScoreTqReqEnqueueFifo
+ * @ingroup ScoreTqReqEnqueueFifo
*/
/*
- * Copyright (C) 2021 embedded brains GmbH (http://www.embedded-brains.de)
+ * Copyright (C) 2021 embedded brains GmbH & Co. KG
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
@@ -58,7 +58,7 @@ extern "C" {
#endif
/**
- * @addtogroup RTEMSTestCaseScoreTqReqEnqueueFifo
+ * @addtogroup ScoreTqReqEnqueueFifo
*
* @{
*/
diff --git a/testsuites/validation/tr-tq-enqueue-mrsp.c b/testsuites/validation/tr-tq-enqueue-mrsp.c
index d48455b2eb..14f1f17713 100644
--- a/testsuites/validation/tr-tq-enqueue-mrsp.c
+++ b/testsuites/validation/tr-tq-enqueue-mrsp.c
@@ -3,11 +3,11 @@
/**
* @file
*
- * @ingroup RTEMSTestCaseScoreTqReqEnqueueMrsp
+ * @ingroup ScoreTqReqEnqueueMrsp
*/
/*
- * Copyright (C) 2021 embedded brains GmbH (http://www.embedded-brains.de)
+ * Copyright (C) 2021 embedded brains GmbH & Co. KG
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
@@ -57,9 +57,9 @@
#include <rtems/test.h>
/**
- * @defgroup RTEMSTestCaseScoreTqReqEnqueueMrsp spec:/score/tq/req/enqueue-mrsp
+ * @defgroup ScoreTqReqEnqueueMrsp spec:/score/tq/req/enqueue-mrsp
*
- * @ingroup RTEMSTestSuiteTestsuitesValidationNoClock0
+ * @ingroup TestsuitesValidationNoClock0
*
* @{
*/
@@ -88,7 +88,7 @@ typedef struct {
* with an eligible scheduler equal to an eligible scheduler of the
* enqueueing thread.
*/
- rtems_task_priority priority;;
+ rtems_task_priority priority;
/**
* @brief If this member is true, then a thread those eligible schedulers are
@@ -96,7 +96,7 @@ typedef struct {
* thread with an eligible scheduler equal to an eligible scheduler of the
* enqueueing thread.
*/
- size_t other_before;;
+ size_t other_before;
/**
* @brief If this member is true, then a thread those eligible schedulers are
@@ -104,7 +104,7 @@ typedef struct {
* thread with an eligible scheduler equal to an eligible scheduler of the
* enqueueing thread.
*/
- size_t other_after;;
+ size_t other_after;
/**
* @brief This member contains a copy of the corresponding
@@ -611,6 +611,11 @@ static void ScoreTqReqEnqueueMrsp_TestVariant(
static T_fixture_node ScoreTqReqEnqueueMrsp_Node;
+static T_remark ScoreTqReqEnqueueMrsp_Remark = {
+ .next = NULL,
+ .remark = "ScoreTqReqEnqueueMrsp"
+};
+
void ScoreTqReqEnqueueMrsp_Run( TQContext *tq_ctx )
{
ScoreTqReqEnqueueMrsp_Context *ctx;
@@ -646,6 +651,7 @@ void ScoreTqReqEnqueueMrsp_Run( TQContext *tq_ctx )
}
}
+ T_add_remark( &ScoreTqReqEnqueueMrsp_Remark );
T_pop_fixture();
}
diff --git a/testsuites/validation/tr-tq-enqueue-mrsp.h b/testsuites/validation/tr-tq-enqueue-mrsp.h
index 98cb8b9883..1c38b4b238 100644
--- a/testsuites/validation/tr-tq-enqueue-mrsp.h
+++ b/testsuites/validation/tr-tq-enqueue-mrsp.h
@@ -3,11 +3,11 @@
/**
* @file
*
- * @ingroup RTEMSTestCaseScoreTqReqEnqueueMrsp
+ * @ingroup ScoreTqReqEnqueueMrsp
*/
/*
- * Copyright (C) 2021 embedded brains GmbH (http://www.embedded-brains.de)
+ * Copyright (C) 2021 embedded brains GmbH & Co. KG
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
@@ -58,7 +58,7 @@ extern "C" {
#endif
/**
- * @addtogroup RTEMSTestCaseScoreTqReqEnqueueMrsp
+ * @addtogroup ScoreTqReqEnqueueMrsp
*
* @{
*/
diff --git a/testsuites/validation/tr-tq-enqueue-priority-inherit.c b/testsuites/validation/tr-tq-enqueue-priority-inherit.c
index fc9a75e4fa..160e2d7825 100644
--- a/testsuites/validation/tr-tq-enqueue-priority-inherit.c
+++ b/testsuites/validation/tr-tq-enqueue-priority-inherit.c
@@ -3,11 +3,11 @@
/**
* @file
*
- * @ingroup RTEMSTestCaseScoreTqReqEnqueuePriorityInherit
+ * @ingroup ScoreTqReqEnqueuePriorityInherit
*/
/*
- * Copyright (C) 2021 embedded brains GmbH (http://www.embedded-brains.de)
+ * Copyright (C) 2021 embedded brains GmbH & Co. KG
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
@@ -57,10 +57,10 @@
#include <rtems/test.h>
/**
- * @defgroup RTEMSTestCaseScoreTqReqEnqueuePriorityInherit \
+ * @defgroup ScoreTqReqEnqueuePriorityInherit \
* spec:/score/tq/req/enqueue-priority-inherit
*
- * @ingroup RTEMSTestSuiteTestsuitesValidationNoClock0
+ * @ingroup TestsuitesValidationNoClock0
*
* @{
*/
@@ -1668,6 +1668,11 @@ static void ScoreTqReqEnqueuePriorityInherit_TestVariant(
static T_fixture_node ScoreTqReqEnqueuePriorityInherit_Node;
+static T_remark ScoreTqReqEnqueuePriorityInherit_Remark = {
+ .next = NULL,
+ .remark = "ScoreTqReqEnqueuePriorityInherit"
+};
+
void ScoreTqReqEnqueuePriorityInherit_Run( TQContext *tq_ctx )
{
ScoreTqReqEnqueuePriorityInherit_Context *ctx;
@@ -1730,6 +1735,7 @@ void ScoreTqReqEnqueuePriorityInherit_Run( TQContext *tq_ctx )
}
}
+ T_add_remark( &ScoreTqReqEnqueuePriorityInherit_Remark );
T_pop_fixture();
}
diff --git a/testsuites/validation/tr-tq-enqueue-priority-inherit.h b/testsuites/validation/tr-tq-enqueue-priority-inherit.h
index 526766a981..c2ffa59902 100644
--- a/testsuites/validation/tr-tq-enqueue-priority-inherit.h
+++ b/testsuites/validation/tr-tq-enqueue-priority-inherit.h
@@ -3,11 +3,11 @@
/**
* @file
*
- * @ingroup RTEMSTestCaseScoreTqReqEnqueuePriorityInherit
+ * @ingroup ScoreTqReqEnqueuePriorityInherit
*/
/*
- * Copyright (C) 2021 embedded brains GmbH (http://www.embedded-brains.de)
+ * Copyright (C) 2021 embedded brains GmbH & Co. KG
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
@@ -58,7 +58,7 @@ extern "C" {
#endif
/**
- * @addtogroup RTEMSTestCaseScoreTqReqEnqueuePriorityInherit
+ * @addtogroup ScoreTqReqEnqueuePriorityInherit
*
* @{
*/
diff --git a/testsuites/validation/tr-tq-enqueue-priority.c b/testsuites/validation/tr-tq-enqueue-priority.c
index 6487c13aa2..18818e34cd 100644
--- a/testsuites/validation/tr-tq-enqueue-priority.c
+++ b/testsuites/validation/tr-tq-enqueue-priority.c
@@ -3,11 +3,11 @@
/**
* @file
*
- * @ingroup RTEMSTestCaseScoreTqReqEnqueuePriority
+ * @ingroup ScoreTqReqEnqueuePriority
*/
/*
- * Copyright (C) 2021 embedded brains GmbH (http://www.embedded-brains.de)
+ * Copyright (C) 2021 embedded brains GmbH & Co. KG
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
@@ -57,10 +57,9 @@
#include <rtems/test.h>
/**
- * @defgroup RTEMSTestCaseScoreTqReqEnqueuePriority \
- * spec:/score/tq/req/enqueue-priority
+ * @defgroup ScoreTqReqEnqueuePriority spec:/score/tq/req/enqueue-priority
*
- * @ingroup RTEMSTestSuiteTestsuitesValidationNoClock0
+ * @ingroup TestsuitesValidationNoClock0
*
* @{
*/
@@ -87,7 +86,7 @@ typedef struct {
* @brief This member specifies the priority of a thread with an eligible
* scheduler equal to an eligible scheduler of the enqueueing thread.
*/
- rtems_task_priority priority;;
+ rtems_task_priority priority;
/**
* @brief If this member is true, then a thread those eligible schedulers are
@@ -95,7 +94,7 @@ typedef struct {
* thread with an eligible scheduler equal to an eligible scheduler of the
* enqueueing thread.
*/
- size_t other_before;;
+ size_t other_before;
/**
* @brief If this member is true, then a thread those eligible schedulers are
@@ -103,7 +102,7 @@ typedef struct {
* thread with an eligible scheduler equal to an eligible scheduler of the
* enqueueing thread.
*/
- size_t other_after;;
+ size_t other_after;
/**
* @brief This member contains a copy of the corresponding
@@ -704,6 +703,11 @@ static void ScoreTqReqEnqueuePriority_TestVariant(
static T_fixture_node ScoreTqReqEnqueuePriority_Node;
+static T_remark ScoreTqReqEnqueuePriority_Remark = {
+ .next = NULL,
+ .remark = "ScoreTqReqEnqueuePriority"
+};
+
void ScoreTqReqEnqueuePriority_Run( TQContext *tq_ctx )
{
ScoreTqReqEnqueuePriority_Context *ctx;
@@ -740,6 +744,7 @@ void ScoreTqReqEnqueuePriority_Run( TQContext *tq_ctx )
}
}
+ T_add_remark( &ScoreTqReqEnqueuePriority_Remark );
T_pop_fixture();
}
diff --git a/testsuites/validation/tr-tq-enqueue-priority.h b/testsuites/validation/tr-tq-enqueue-priority.h
index 97f5f883de..141c8a122c 100644
--- a/testsuites/validation/tr-tq-enqueue-priority.h
+++ b/testsuites/validation/tr-tq-enqueue-priority.h
@@ -3,11 +3,11 @@
/**
* @file
*
- * @ingroup RTEMSTestCaseScoreTqReqEnqueuePriority
+ * @ingroup ScoreTqReqEnqueuePriority
*/
/*
- * Copyright (C) 2021 embedded brains GmbH (http://www.embedded-brains.de)
+ * Copyright (C) 2021 embedded brains GmbH & Co. KG
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
@@ -58,7 +58,7 @@ extern "C" {
#endif
/**
- * @addtogroup RTEMSTestCaseScoreTqReqEnqueuePriority
+ * @addtogroup ScoreTqReqEnqueuePriority
*
* @{
*/
diff --git a/testsuites/validation/tr-tq-flush-fifo.c b/testsuites/validation/tr-tq-flush-fifo.c
index 9b6821ac27..785d7b37a1 100644
--- a/testsuites/validation/tr-tq-flush-fifo.c
+++ b/testsuites/validation/tr-tq-flush-fifo.c
@@ -3,11 +3,11 @@
/**
* @file
*
- * @ingroup RTEMSTestCaseScoreTqReqFlushFifo
+ * @ingroup ScoreTqReqFlushFifo
*/
/*
- * Copyright (C) 2021 embedded brains GmbH (http://www.embedded-brains.de)
+ * Copyright (C) 2021 embedded brains GmbH & Co. KG
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
@@ -58,16 +58,19 @@
#include <rtems/test.h>
/**
- * @defgroup RTEMSTestCaseScoreTqReqFlushFifo spec:/score/tq/req/flush-fifo
+ * @defgroup ScoreTqReqFlushFifo spec:/score/tq/req/flush-fifo
*
- * @ingroup RTEMSTestSuiteTestsuitesValidationNoClock0
+ * @ingroup TestsuitesValidationNoClock0
*
* @{
*/
typedef struct {
uint8_t Skip : 1;
- uint8_t Pre_Queue_NA : 1;
+ uint8_t Pre_MayStop_NA : 1;
+ uint8_t Pre_QueueEmpty_NA : 1;
+ uint8_t Pre_Stop_NA : 1;
+ uint8_t Pre_WaitState_NA : 1;
uint8_t Post_Operation : 2;
} ScoreTqReqFlushFifo_Entry;
@@ -76,9 +79,20 @@ typedef struct {
*/
typedef struct {
/**
+ * @brief If this member is true, then the flush filter shall return NULL.
+ */
+ bool stop;
+
+ /**
+ * @brief If this member is true, then the least recently enqueued thread
+ * shall be in the intend to block wait state.
+ */
+ bool intend_to_block;
+
+ /**
* @brief This member contains the call within ISR request.
*/
- CallWithinISRRequest request;;
+ CallWithinISRRequest request;
/**
* @brief This member contains a copy of the corresponding
@@ -86,11 +100,23 @@ typedef struct {
*/
TQContext *tq_ctx;
+ /**
+ * @brief This member contains a copy of the corresponding
+ * ScoreTqReqFlushFifo_Run() parameter.
+ */
+ bool may_stop;
+
struct {
/**
+ * @brief This member defines the pre-condition indices for the next
+ * action.
+ */
+ size_t pci[ 4 ];
+
+ /**
* @brief This member defines the pre-condition states for the next action.
*/
- size_t pcs[ 1 ];
+ size_t pcs[ 4 ];
/**
* @brief If this member is true, then the test action loop is executed.
@@ -118,14 +144,35 @@ typedef struct {
static ScoreTqReqFlushFifo_Context
ScoreTqReqFlushFifo_Instance;
-static const char * const ScoreTqReqFlushFifo_PreDesc_Queue[] = {
- "Empty",
- "NonEmpty",
+static const char * const ScoreTqReqFlushFifo_PreDesc_MayStop[] = {
+ "Yes",
+ "No",
+ "NA"
+};
+
+static const char * const ScoreTqReqFlushFifo_PreDesc_QueueEmpty[] = {
+ "Yes",
+ "No",
+ "NA"
+};
+
+static const char * const ScoreTqReqFlushFifo_PreDesc_Stop[] = {
+ "Yes",
+ "No",
+ "NA"
+};
+
+static const char * const ScoreTqReqFlushFifo_PreDesc_WaitState[] = {
+ "Blocked",
+ "IntendToBlock",
"NA"
};
static const char * const * const ScoreTqReqFlushFifo_PreDesc[] = {
- ScoreTqReqFlushFifo_PreDesc_Queue,
+ ScoreTqReqFlushFifo_PreDesc_MayStop,
+ ScoreTqReqFlushFifo_PreDesc_QueueEmpty,
+ ScoreTqReqFlushFifo_PreDesc_Stop,
+ ScoreTqReqFlushFifo_PreDesc_WaitState,
NULL
};
@@ -141,13 +188,24 @@ static const rtems_tcb *GetTCB( Context *ctx, TQWorkerKind worker )
return ctx->tq_ctx->worker_tcb[ worker ];
}
-static void Flush( void *arg )
+static void BlockerAFlush( Context *ctx )
+{
+ TQSchedulerRecordStart( ctx->tq_ctx );
+
+ if ( ctx->stop ) {
+ TQSend( ctx->tq_ctx, TQ_BLOCKER_A, TQ_EVENT_FLUSH_PARTIAL );
+ } else {
+ TQSend( ctx->tq_ctx, TQ_BLOCKER_A, TQ_EVENT_FLUSH_ALL );
+ }
+}
+
+static void InterruptFlush( void *arg )
{
Context *ctx;
ctx = arg;
TQSchedulerRecordStart( ctx->tq_ctx );
- TQFlush( ctx->tq_ctx );
+ TQFlush( ctx->tq_ctx, !ctx->stop );
}
static void SchedulerEvent(
@@ -164,20 +222,109 @@ static void SchedulerEvent(
when == T_SCHEDULER_BEFORE &&
event->operation == T_SCHEDULER_BLOCK
) {
- ctx->request.handler = Flush;
- ctx->request.arg = ctx;
- CallWithinISRSubmit( &ctx->request );
T_scheduler_set_event_handler( NULL, NULL );
+ ctx->request.handler = InterruptFlush;
+ CallWithinISRSubmit( &ctx->request );
}
}
-static void ScoreTqReqFlushFifo_Pre_Queue_Prepare(
- ScoreTqReqFlushFifo_Context *ctx,
- ScoreTqReqFlushFifo_Pre_Queue state
+static uint32_t CheckExtractions( Context *ctx )
+{
+ uint32_t extracted_threads;
+ size_t i;
+ const T_scheduler_event *event;
+
+ extracted_threads = 0;
+ i = 0;
+
+ if ( !ctx->intend_to_block ) {
+ /* Event receive */
+ T_eq_ptr( GetUnblock( ctx, &i )->thread, GetTCB( ctx, TQ_BLOCKER_A ) );
+ }
+
+ event = GetUnblock( ctx, &i );
+
+ if ( event != &T_scheduler_event_null ) {
+ if ( ctx->intend_to_block ) {
+ T_eq_ptr( event->executing, NULL );
+ } else {
+ T_eq_ptr( event->executing, GetTCB( ctx, TQ_BLOCKER_A ) );
+ }
+
+ T_eq_ptr( event->thread, GetTCB( ctx, TQ_BLOCKER_B ) );
+ ++extracted_threads;
+ }
+
+ event = GetUnblock( ctx, &i );
+
+ if ( event != &T_scheduler_event_null ) {
+ if ( ctx->intend_to_block ) {
+ T_eq_ptr( event->executing, NULL );
+ } else {
+ T_eq_ptr( event->executing, GetTCB( ctx, TQ_BLOCKER_A ) );
+ }
+
+ T_eq_ptr( event->thread, GetTCB( ctx, TQ_BLOCKER_C ) );
+ ++extracted_threads;
+ }
+
+ event = GetUnblock( ctx, &i );
+
+ if ( event != &T_scheduler_event_null ) {
+ if ( ctx->intend_to_block ) {
+ T_eq_ptr( event->executing, GetTCB( ctx, TQ_BLOCKER_D ) );
+ } else {
+ T_eq_ptr( event->executing, GetTCB( ctx, TQ_BLOCKER_A ) );
+ }
+
+ T_eq_ptr( event->thread, GetTCB( ctx, TQ_BLOCKER_D ) );
+ ++extracted_threads;
+ }
+
+ T_eq_ptr( GetUnblock( ctx, &i ), &T_scheduler_event_null );
+ T_eq_u32( extracted_threads, ctx->tq_ctx->flush_count );
+
+ return extracted_threads;
+}
+
+static void ScoreTqReqFlushFifo_Pre_MayStop_Prepare(
+ ScoreTqReqFlushFifo_Context *ctx,
+ ScoreTqReqFlushFifo_Pre_MayStop state
)
{
switch ( state ) {
- case ScoreTqReqFlushFifo_Pre_Queue_Empty: {
+ case ScoreTqReqFlushFifo_Pre_MayStop_Yes: {
+ /*
+ * Where the flush filter may return NULL.
+ */
+ if ( !ctx->may_stop ) {
+ ctx->Map.skip = true;
+ }
+ break;
+ }
+
+ case ScoreTqReqFlushFifo_Pre_MayStop_No: {
+ /*
+ * Where the flush filter does not return NULL.
+ */
+ if ( ctx->may_stop ) {
+ ctx->Map.skip = true;
+ }
+ break;
+ }
+
+ case ScoreTqReqFlushFifo_Pre_MayStop_NA:
+ break;
+ }
+}
+
+static void ScoreTqReqFlushFifo_Pre_QueueEmpty_Prepare(
+ ScoreTqReqFlushFifo_Context *ctx,
+ ScoreTqReqFlushFifo_Pre_QueueEmpty state
+)
+{
+ switch ( state ) {
+ case ScoreTqReqFlushFifo_Pre_QueueEmpty_Yes: {
/*
* While the thread queue is empty.
*/
@@ -185,7 +332,7 @@ static void ScoreTqReqFlushFifo_Pre_Queue_Prepare(
break;
}
- case ScoreTqReqFlushFifo_Pre_Queue_NonEmpty: {
+ case ScoreTqReqFlushFifo_Pre_QueueEmpty_No: {
/*
* While the thread queue has at least one enqueued thread.
*/
@@ -193,7 +340,63 @@ static void ScoreTqReqFlushFifo_Pre_Queue_Prepare(
break;
}
- case ScoreTqReqFlushFifo_Pre_Queue_NA:
+ case ScoreTqReqFlushFifo_Pre_QueueEmpty_NA:
+ break;
+ }
+}
+
+static void ScoreTqReqFlushFifo_Pre_Stop_Prepare(
+ ScoreTqReqFlushFifo_Context *ctx,
+ ScoreTqReqFlushFifo_Pre_Stop state
+)
+{
+ switch ( state ) {
+ case ScoreTqReqFlushFifo_Pre_Stop_Yes: {
+ /*
+ * While the flush filter returns NULL for an enqueued thread.
+ */
+ ctx->stop = true;
+ break;
+ }
+
+ case ScoreTqReqFlushFifo_Pre_Stop_No: {
+ /*
+ * While the flush filter does not return NULL for an enqueued thread.
+ */
+ ctx->stop = false;
+ break;
+ }
+
+ case ScoreTqReqFlushFifo_Pre_Stop_NA:
+ break;
+ }
+}
+
+static void ScoreTqReqFlushFifo_Pre_WaitState_Prepare(
+ ScoreTqReqFlushFifo_Context *ctx,
+ ScoreTqReqFlushFifo_Pre_WaitState state
+)
+{
+ switch ( state ) {
+ case ScoreTqReqFlushFifo_Pre_WaitState_Blocked: {
+ /*
+ * While the least recently enqueued thread on the thread queue is in the
+ * blocked wait state.
+ */
+ ctx->intend_to_block = false;
+ break;
+ }
+
+ case ScoreTqReqFlushFifo_Pre_WaitState_IntendToBlock: {
+ /*
+ * While the least recently enqueued thread on the thread queue is in the
+ * intend to block wait state.
+ */
+ ctx->intend_to_block = true;
+ break;
+ }
+
+ case ScoreTqReqFlushFifo_Pre_WaitState_NA:
break;
}
}
@@ -203,40 +406,39 @@ static void ScoreTqReqFlushFifo_Post_Operation_Check(
ScoreTqReqFlushFifo_Post_Operation state
)
{
- size_t i;
- const T_scheduler_event *event;
-
- i = 0;
+ size_t i;
+ uint32_t extracted_threads;
switch ( state ) {
case ScoreTqReqFlushFifo_Post_Operation_Nop: {
/*
- * No operation shall be performed.
+ * No thread queue extraction operation shall be performed.
*/
/* Event receive */
+ i = 0;
T_eq_ptr( GetUnblock( ctx, &i )->thread, GetTCB( ctx, TQ_BLOCKER_A ) );
T_eq_ptr( GetUnblock( ctx, &i ), &T_scheduler_event_null );
break;
}
- case ScoreTqReqFlushFifo_Post_Operation_TryExtract: {
+ case ScoreTqReqFlushFifo_Post_Operation_ExtractAll: {
/*
- * The enqueued threads of the thread queue may be extracted in FIFO
+ * The enqueued threads shall be extracted from the thread queue in FIFO
* order.
*/
- event = GetUnblock( ctx, &i );
- T_eq_ptr( event->executing, NULL );
- T_eq_ptr( event->thread, GetTCB( ctx, TQ_BLOCKER_B ) );
-
- event = GetUnblock( ctx, &i );
- T_eq_ptr( event->executing, NULL );
- T_eq_ptr( event->thread, GetTCB( ctx, TQ_BLOCKER_C ) );
-
- event = GetUnblock( ctx, &i );
- T_eq_ptr( event->executing, GetTCB( ctx, TQ_BLOCKER_D ) );
- T_eq_ptr( event->thread, GetTCB( ctx, TQ_BLOCKER_D ) );
+ extracted_threads = CheckExtractions( ctx );
+ T_eq_sz( extracted_threads, ctx->tq_ctx->how_many );
+ break;
+ }
- T_eq_ptr( GetUnblock( ctx, &i ), &T_scheduler_event_null );
+ case ScoreTqReqFlushFifo_Post_Operation_ExtractPartial: {
+ /*
+ * The enqueued threads which precede in FIFO order the enqueued thread
+ * for which the flush filter returned NULL shall be extracted from the
+ * thread queue in FIFO order.
+ */
+ extracted_threads = CheckExtractions( ctx );
+ T_lt_sz( extracted_threads, ctx->tq_ctx->how_many );
break;
}
@@ -247,6 +449,7 @@ static void ScoreTqReqFlushFifo_Post_Operation_Check(
static void ScoreTqReqFlushFifo_Setup( ScoreTqReqFlushFifo_Context *ctx )
{
+ ctx->request.arg = ctx;
TQReset( ctx->tq_ctx );
TQSetPriority( ctx->tq_ctx, TQ_BLOCKER_A, PRIO_ULTRA_HIGH );
TQSetPriority( ctx->tq_ctx, TQ_BLOCKER_B, PRIO_VERY_HIGH );
@@ -279,31 +482,45 @@ static void ScoreTqReqFlushFifo_Teardown_Wrap( void *arg )
static void ScoreTqReqFlushFifo_Action( ScoreTqReqFlushFifo_Context *ctx )
{
+ uint32_t flush_count;
+
TQSend( ctx->tq_ctx, TQ_BLOCKER_A, TQ_EVENT_ENQUEUE_PREPARE );
if ( ctx->tq_ctx->how_many > 0 ) {
TQSend( ctx->tq_ctx, TQ_BLOCKER_B, TQ_EVENT_ENQUEUE );
TQSend( ctx->tq_ctx, TQ_BLOCKER_C, TQ_EVENT_ENQUEUE );
- T_scheduler_set_event_handler( SchedulerEvent, ctx );
+
+ if ( ctx->intend_to_block ) {
+ T_scheduler_set_event_handler( SchedulerEvent, ctx );
+ }
+
TQSend( ctx->tq_ctx, TQ_BLOCKER_D, TQ_EVENT_ENQUEUE );
+
+ if ( !ctx->intend_to_block ) {
+ BlockerAFlush( ctx );
+ }
} else {
- TQSchedulerRecordStart( ctx->tq_ctx );
- TQSend( ctx->tq_ctx, TQ_BLOCKER_A, TQ_EVENT_FLUSH );
+ BlockerAFlush( ctx );
}
+ flush_count = ctx->tq_ctx->flush_count;
TQSchedulerRecordStop( ctx->tq_ctx );
+ TQSend( ctx->tq_ctx, TQ_BLOCKER_A, TQ_EVENT_FLUSH_ALL );
TQSend( ctx->tq_ctx, TQ_BLOCKER_A, TQ_EVENT_ENQUEUE_DONE );
+ ctx->tq_ctx->flush_count = flush_count;
}
static const ScoreTqReqFlushFifo_Entry
ScoreTqReqFlushFifo_Entries[] = {
- { 0, 0, ScoreTqReqFlushFifo_Post_Operation_Nop },
- { 0, 0, ScoreTqReqFlushFifo_Post_Operation_TryExtract }
+ { 0, 0, 0, 1, 1, ScoreTqReqFlushFifo_Post_Operation_Nop },
+ { 0, 0, 0, 0, 0, ScoreTqReqFlushFifo_Post_Operation_ExtractAll },
+ { 0, 0, 0, 0, 0, ScoreTqReqFlushFifo_Post_Operation_ExtractPartial },
+ { 1, 0, 0, 0, 0, ScoreTqReqFlushFifo_Post_Operation_NA }
};
static const uint8_t
ScoreTqReqFlushFifo_Map[] = {
- 0, 1
+ 0, 0, 0, 0, 2, 2, 1, 1, 0, 0, 0, 0, 3, 3, 1, 1
};
static size_t ScoreTqReqFlushFifo_Scope( void *arg, char *buf, size_t n )
@@ -327,22 +544,86 @@ static T_fixture ScoreTqReqFlushFifo_Fixture = {
.initial_context = &ScoreTqReqFlushFifo_Instance
};
+static const uint8_t ScoreTqReqFlushFifo_Weights[] = {
+ 8, 4, 2, 1
+};
+
+static void ScoreTqReqFlushFifo_Skip(
+ ScoreTqReqFlushFifo_Context *ctx,
+ size_t index
+)
+{
+ switch ( index + 1 ) {
+ case 1:
+ ctx->Map.pci[ 1 ] = ScoreTqReqFlushFifo_Pre_QueueEmpty_NA - 1;
+ /* Fall through */
+ case 2:
+ ctx->Map.pci[ 2 ] = ScoreTqReqFlushFifo_Pre_Stop_NA - 1;
+ /* Fall through */
+ case 3:
+ ctx->Map.pci[ 3 ] = ScoreTqReqFlushFifo_Pre_WaitState_NA - 1;
+ break;
+ }
+}
+
static inline ScoreTqReqFlushFifo_Entry ScoreTqReqFlushFifo_PopEntry(
ScoreTqReqFlushFifo_Context *ctx
)
{
size_t index;
- index = ctx->Map.index;
+ if ( ctx->Map.skip ) {
+ size_t i;
+
+ ctx->Map.skip = false;
+ index = 0;
+
+ for ( i = 0; i < 4; ++i ) {
+ index += ScoreTqReqFlushFifo_Weights[ i ] * ctx->Map.pci[ i ];
+ }
+ } else {
+ index = ctx->Map.index;
+ }
+
ctx->Map.index = index + 1;
+
return ScoreTqReqFlushFifo_Entries[
ScoreTqReqFlushFifo_Map[ index ]
];
}
+static void ScoreTqReqFlushFifo_SetPreConditionStates(
+ ScoreTqReqFlushFifo_Context *ctx
+)
+{
+ ctx->Map.pcs[ 0 ] = ctx->Map.pci[ 0 ];
+ ctx->Map.pcs[ 1 ] = ctx->Map.pci[ 1 ];
+
+ if ( ctx->Map.entry.Pre_Stop_NA ) {
+ ctx->Map.pcs[ 2 ] = ScoreTqReqFlushFifo_Pre_Stop_NA;
+ } else {
+ ctx->Map.pcs[ 2 ] = ctx->Map.pci[ 2 ];
+ }
+
+ if ( ctx->Map.entry.Pre_WaitState_NA ) {
+ ctx->Map.pcs[ 3 ] = ScoreTqReqFlushFifo_Pre_WaitState_NA;
+ } else {
+ ctx->Map.pcs[ 3 ] = ctx->Map.pci[ 3 ];
+ }
+}
+
static void ScoreTqReqFlushFifo_TestVariant( ScoreTqReqFlushFifo_Context *ctx )
{
- ScoreTqReqFlushFifo_Pre_Queue_Prepare( ctx, ctx->Map.pcs[ 0 ] );
+ ScoreTqReqFlushFifo_Pre_MayStop_Prepare( ctx, ctx->Map.pcs[ 0 ] );
+
+ if ( ctx->Map.skip ) {
+ ScoreTqReqFlushFifo_Skip( ctx, 0 );
+ return;
+ }
+
+ ScoreTqReqFlushFifo_Pre_QueueEmpty_Prepare( ctx, ctx->Map.pcs[ 1 ] );
+ ScoreTqReqFlushFifo_Pre_Stop_Prepare( ctx, ctx->Map.pcs[ 2 ] );
+ ScoreTqReqFlushFifo_Pre_WaitState_Prepare( ctx, ctx->Map.pcs[ 3 ] );
ScoreTqReqFlushFifo_Action( ctx );
ScoreTqReqFlushFifo_Post_Operation_Check(
ctx,
@@ -352,12 +633,18 @@ static void ScoreTqReqFlushFifo_TestVariant( ScoreTqReqFlushFifo_Context *ctx )
static T_fixture_node ScoreTqReqFlushFifo_Node;
-void ScoreTqReqFlushFifo_Run( TQContext *tq_ctx )
+static T_remark ScoreTqReqFlushFifo_Remark = {
+ .next = NULL,
+ .remark = "ScoreTqReqFlushFifo"
+};
+
+void ScoreTqReqFlushFifo_Run( TQContext *tq_ctx, bool may_stop )
{
ScoreTqReqFlushFifo_Context *ctx;
ctx = &ScoreTqReqFlushFifo_Instance;
ctx->tq_ctx = tq_ctx;
+ ctx->may_stop = may_stop;
ctx = T_push_fixture(
&ScoreTqReqFlushFifo_Node,
@@ -365,16 +652,42 @@ void ScoreTqReqFlushFifo_Run( TQContext *tq_ctx )
);
ctx->Map.in_action_loop = true;
ctx->Map.index = 0;
+ ctx->Map.skip = false;
for (
- ctx->Map.pcs[ 0 ] = ScoreTqReqFlushFifo_Pre_Queue_Empty;
- ctx->Map.pcs[ 0 ] < ScoreTqReqFlushFifo_Pre_Queue_NA;
- ++ctx->Map.pcs[ 0 ]
+ ctx->Map.pci[ 0 ] = ScoreTqReqFlushFifo_Pre_MayStop_Yes;
+ ctx->Map.pci[ 0 ] < ScoreTqReqFlushFifo_Pre_MayStop_NA;
+ ++ctx->Map.pci[ 0 ]
) {
- ctx->Map.entry = ScoreTqReqFlushFifo_PopEntry( ctx );
- ScoreTqReqFlushFifo_TestVariant( ctx );
+ for (
+ ctx->Map.pci[ 1 ] = ScoreTqReqFlushFifo_Pre_QueueEmpty_Yes;
+ ctx->Map.pci[ 1 ] < ScoreTqReqFlushFifo_Pre_QueueEmpty_NA;
+ ++ctx->Map.pci[ 1 ]
+ ) {
+ for (
+ ctx->Map.pci[ 2 ] = ScoreTqReqFlushFifo_Pre_Stop_Yes;
+ ctx->Map.pci[ 2 ] < ScoreTqReqFlushFifo_Pre_Stop_NA;
+ ++ctx->Map.pci[ 2 ]
+ ) {
+ for (
+ ctx->Map.pci[ 3 ] = ScoreTqReqFlushFifo_Pre_WaitState_Blocked;
+ ctx->Map.pci[ 3 ] < ScoreTqReqFlushFifo_Pre_WaitState_NA;
+ ++ctx->Map.pci[ 3 ]
+ ) {
+ ctx->Map.entry = ScoreTqReqFlushFifo_PopEntry( ctx );
+
+ if ( ctx->Map.entry.Skip ) {
+ continue;
+ }
+
+ ScoreTqReqFlushFifo_SetPreConditionStates( ctx );
+ ScoreTqReqFlushFifo_TestVariant( ctx );
+ }
+ }
+ }
}
+ T_add_remark( &ScoreTqReqFlushFifo_Remark );
T_pop_fixture();
}
diff --git a/testsuites/validation/tr-tq-flush-fifo.h b/testsuites/validation/tr-tq-flush-fifo.h
index dca1444891..8d5bb8b8d6 100644
--- a/testsuites/validation/tr-tq-flush-fifo.h
+++ b/testsuites/validation/tr-tq-flush-fifo.h
@@ -3,11 +3,11 @@
/**
* @file
*
- * @ingroup RTEMSTestCaseScoreTqReqFlushFifo
+ * @ingroup ScoreTqReqFlushFifo
*/
/*
- * Copyright (C) 2021 embedded brains GmbH (http://www.embedded-brains.de)
+ * Copyright (C) 2021 embedded brains GmbH & Co. KG
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
@@ -58,20 +58,39 @@ extern "C" {
#endif
/**
- * @addtogroup RTEMSTestCaseScoreTqReqFlushFifo
+ * @addtogroup ScoreTqReqFlushFifo
*
* @{
*/
typedef enum {
- ScoreTqReqFlushFifo_Pre_Queue_Empty,
- ScoreTqReqFlushFifo_Pre_Queue_NonEmpty,
- ScoreTqReqFlushFifo_Pre_Queue_NA
-} ScoreTqReqFlushFifo_Pre_Queue;
+ ScoreTqReqFlushFifo_Pre_MayStop_Yes,
+ ScoreTqReqFlushFifo_Pre_MayStop_No,
+ ScoreTqReqFlushFifo_Pre_MayStop_NA
+} ScoreTqReqFlushFifo_Pre_MayStop;
+
+typedef enum {
+ ScoreTqReqFlushFifo_Pre_QueueEmpty_Yes,
+ ScoreTqReqFlushFifo_Pre_QueueEmpty_No,
+ ScoreTqReqFlushFifo_Pre_QueueEmpty_NA
+} ScoreTqReqFlushFifo_Pre_QueueEmpty;
+
+typedef enum {
+ ScoreTqReqFlushFifo_Pre_Stop_Yes,
+ ScoreTqReqFlushFifo_Pre_Stop_No,
+ ScoreTqReqFlushFifo_Pre_Stop_NA
+} ScoreTqReqFlushFifo_Pre_Stop;
+
+typedef enum {
+ ScoreTqReqFlushFifo_Pre_WaitState_Blocked,
+ ScoreTqReqFlushFifo_Pre_WaitState_IntendToBlock,
+ ScoreTqReqFlushFifo_Pre_WaitState_NA
+} ScoreTqReqFlushFifo_Pre_WaitState;
typedef enum {
ScoreTqReqFlushFifo_Post_Operation_Nop,
- ScoreTqReqFlushFifo_Post_Operation_TryExtract,
+ ScoreTqReqFlushFifo_Post_Operation_ExtractAll,
+ ScoreTqReqFlushFifo_Post_Operation_ExtractPartial,
ScoreTqReqFlushFifo_Post_Operation_NA
} ScoreTqReqFlushFifo_Post_Operation;
@@ -79,8 +98,10 @@ typedef enum {
* @brief Runs the parameterized test case.
*
* @param[in,out] tq_ctx is the thread queue test context.
+ *
+ * @param may_stop is true, if a partial flush is supported.
*/
-void ScoreTqReqFlushFifo_Run( TQContext *tq_ctx );
+void ScoreTqReqFlushFifo_Run( TQContext *tq_ctx, bool may_stop );
/** @} */
diff --git a/testsuites/validation/tr-tq-flush-priority-inherit.c b/testsuites/validation/tr-tq-flush-priority-inherit.c
index beb48ebbe7..903dc20cf2 100644
--- a/testsuites/validation/tr-tq-flush-priority-inherit.c
+++ b/testsuites/validation/tr-tq-flush-priority-inherit.c
@@ -3,11 +3,11 @@
/**
* @file
*
- * @ingroup RTEMSTestCaseScoreTqReqFlushPriorityInherit
+ * @ingroup ScoreTqReqFlushPriorityInherit
*/
/*
- * Copyright (C) 2021 embedded brains GmbH (http://www.embedded-brains.de)
+ * Copyright (C) 2021 embedded brains GmbH & Co. KG
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
@@ -58,10 +58,10 @@
#include <rtems/test.h>
/**
- * @defgroup RTEMSTestCaseScoreTqReqFlushPriorityInherit \
+ * @defgroup ScoreTqReqFlushPriorityInherit \
* spec:/score/tq/req/flush-priority-inherit
*
- * @ingroup RTEMSTestSuiteTestsuitesValidationNoClock0
+ * @ingroup TestsuitesValidationNoClock0
*
* @{
*/
@@ -81,7 +81,7 @@ typedef struct {
/**
* @brief This member contains the call within ISR request.
*/
- CallWithinISRRequest request;;
+ CallWithinISRRequest request;
/**
* @brief If this member is true, then a minimum priority of the owner of the
@@ -179,7 +179,7 @@ static void Flush( void *arg )
ctx = arg;
TQSchedulerRecordStart( ctx->tq_ctx );
- TQFlush( ctx->tq_ctx );
+ TQFlush( ctx->tq_ctx, true );
}
static void SchedulerEvent(
@@ -434,7 +434,7 @@ static void ScoreTqReqFlushPriorityInherit_Action(
);
} else {
TQSchedulerRecordStart( ctx->tq_ctx );
- TQSend( ctx->tq_ctx, TQ_BLOCKER_A, TQ_EVENT_FLUSH );
+ TQSend( ctx->tq_ctx, TQ_BLOCKER_A, TQ_EVENT_FLUSH_ALL );
}
TQSchedulerRecordStop( ctx->tq_ctx );
@@ -535,6 +535,11 @@ static void ScoreTqReqFlushPriorityInherit_TestVariant(
static T_fixture_node ScoreTqReqFlushPriorityInherit_Node;
+static T_remark ScoreTqReqFlushPriorityInherit_Remark = {
+ .next = NULL,
+ .remark = "ScoreTqReqFlushPriorityInherit"
+};
+
void ScoreTqReqFlushPriorityInherit_Run( TQContext *tq_ctx )
{
ScoreTqReqFlushPriorityInherit_Context *ctx;
@@ -565,6 +570,7 @@ void ScoreTqReqFlushPriorityInherit_Run( TQContext *tq_ctx )
}
}
+ T_add_remark( &ScoreTqReqFlushPriorityInherit_Remark );
T_pop_fixture();
}
diff --git a/testsuites/validation/tr-tq-flush-priority-inherit.h b/testsuites/validation/tr-tq-flush-priority-inherit.h
index 1b12f1afb0..277084244c 100644
--- a/testsuites/validation/tr-tq-flush-priority-inherit.h
+++ b/testsuites/validation/tr-tq-flush-priority-inherit.h
@@ -3,11 +3,11 @@
/**
* @file
*
- * @ingroup RTEMSTestCaseScoreTqReqFlushPriorityInherit
+ * @ingroup ScoreTqReqFlushPriorityInherit
*/
/*
- * Copyright (C) 2021 embedded brains GmbH (http://www.embedded-brains.de)
+ * Copyright (C) 2021 embedded brains GmbH & Co. KG
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
@@ -58,7 +58,7 @@ extern "C" {
#endif
/**
- * @addtogroup RTEMSTestCaseScoreTqReqFlushPriorityInherit
+ * @addtogroup ScoreTqReqFlushPriorityInherit
*
* @{
*/
diff --git a/testsuites/validation/tr-tq-flush-priority.c b/testsuites/validation/tr-tq-flush-priority.c
index 26e2a7fc3b..b8a06c2340 100644
--- a/testsuites/validation/tr-tq-flush-priority.c
+++ b/testsuites/validation/tr-tq-flush-priority.c
@@ -3,11 +3,11 @@
/**
* @file
*
- * @ingroup RTEMSTestCaseScoreTqReqFlushPriority
+ * @ingroup ScoreTqReqFlushPriority
*/
/*
- * Copyright (C) 2021 embedded brains GmbH (http://www.embedded-brains.de)
+ * Copyright (C) 2021 embedded brains GmbH & Co. KG
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
@@ -58,10 +58,9 @@
#include <rtems/test.h>
/**
- * @defgroup RTEMSTestCaseScoreTqReqFlushPriority \
- * spec:/score/tq/req/flush-priority
+ * @defgroup ScoreTqReqFlushPriority spec:/score/tq/req/flush-priority
*
- * @ingroup RTEMSTestSuiteTestsuitesValidationNoClock0
+ * @ingroup TestsuitesValidationNoClock0
*
* @{
*/
@@ -79,7 +78,7 @@ typedef struct {
/**
* @brief This member contains the call within ISR request.
*/
- CallWithinISRRequest request;;
+ CallWithinISRRequest request;
/**
* @brief This member contains a copy of the corresponding
@@ -154,7 +153,7 @@ static void Flush( void *arg )
ctx = arg;
TQSchedulerRecordStart( ctx->tq_ctx );
- TQFlush( ctx->tq_ctx );
+ TQFlush( ctx->tq_ctx, true );
}
static void SchedulerEvent(
@@ -315,7 +314,7 @@ static void ScoreTqReqFlushPriority_Action(
);
} else {
TQSchedulerRecordStart( ctx->tq_ctx );
- TQSend( ctx->tq_ctx, TQ_BLOCKER_A, TQ_EVENT_FLUSH );
+ TQSend( ctx->tq_ctx, TQ_BLOCKER_A, TQ_EVENT_FLUSH_ALL );
}
TQSchedulerRecordStop( ctx->tq_ctx );
@@ -386,6 +385,11 @@ static void ScoreTqReqFlushPriority_TestVariant(
static T_fixture_node ScoreTqReqFlushPriority_Node;
+static T_remark ScoreTqReqFlushPriority_Remark = {
+ .next = NULL,
+ .remark = "ScoreTqReqFlushPriority"
+};
+
void ScoreTqReqFlushPriority_Run(
TQContext *tq_ctx,
bool supports_multiple_priority_queues
@@ -413,6 +417,7 @@ void ScoreTqReqFlushPriority_Run(
ScoreTqReqFlushPriority_TestVariant( ctx );
}
+ T_add_remark( &ScoreTqReqFlushPriority_Remark );
T_pop_fixture();
}
diff --git a/testsuites/validation/tr-tq-flush-priority.h b/testsuites/validation/tr-tq-flush-priority.h
index 72bc372ca1..ae700ca192 100644
--- a/testsuites/validation/tr-tq-flush-priority.h
+++ b/testsuites/validation/tr-tq-flush-priority.h
@@ -3,11 +3,11 @@
/**
* @file
*
- * @ingroup RTEMSTestCaseScoreTqReqFlushPriority
+ * @ingroup ScoreTqReqFlushPriority
*/
/*
- * Copyright (C) 2021 embedded brains GmbH (http://www.embedded-brains.de)
+ * Copyright (C) 2021 embedded brains GmbH & Co. KG
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
@@ -58,7 +58,7 @@ extern "C" {
#endif
/**
- * @addtogroup RTEMSTestCaseScoreTqReqFlushPriority
+ * @addtogroup ScoreTqReqFlushPriority
*
* @{
*/
diff --git a/testsuites/validation/tr-tq-surrender-mrsp.c b/testsuites/validation/tr-tq-surrender-mrsp.c
index 156d4c4a5b..903146ccbe 100644
--- a/testsuites/validation/tr-tq-surrender-mrsp.c
+++ b/testsuites/validation/tr-tq-surrender-mrsp.c
@@ -3,11 +3,11 @@
/**
* @file
*
- * @ingroup RTEMSTestCaseScoreTqReqSurrenderMrsp
+ * @ingroup ScoreTqReqSurrenderMrsp
*/
/*
- * Copyright (C) 2021 embedded brains GmbH (http://www.embedded-brains.de)
+ * Copyright (C) 2021 embedded brains GmbH & Co. KG
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
@@ -60,10 +60,9 @@
#include <rtems/test.h>
/**
- * @defgroup RTEMSTestCaseScoreTqReqSurrenderMrsp \
- * spec:/score/tq/req/surrender-mrsp
+ * @defgroup ScoreTqReqSurrenderMrsp spec:/score/tq/req/surrender-mrsp
*
- * @ingroup RTEMSTestSuiteTestsuitesValidationNoClock0
+ * @ingroup TestsuitesValidationNoClock0
*
* @{
*/
@@ -354,7 +353,7 @@ static void ScoreTqReqSurrenderMrsp_Pre_Suspended_Prepare(
switch ( state ) {
case ScoreTqReqSurrenderMrsp_Pre_Suspended_Yes: {
/*
- * Whiel the new owner is suspended.
+ * While the new owner is suspended.
*/
ctx->suspended = true;
break;
@@ -362,7 +361,7 @@ static void ScoreTqReqSurrenderMrsp_Pre_Suspended_Prepare(
case ScoreTqReqSurrenderMrsp_Pre_Suspended_No: {
/*
- * Whiel the new owner is not suspended.
+ * While the new owner is not suspended.
*/
ctx->suspended = false;
break;
@@ -975,6 +974,11 @@ static void ScoreTqReqSurrenderMrsp_TestVariant(
static T_fixture_node ScoreTqReqSurrenderMrsp_Node;
+static T_remark ScoreTqReqSurrenderMrsp_Remark = {
+ .next = NULL,
+ .remark = "ScoreTqReqSurrenderMrsp"
+};
+
void ScoreTqReqSurrenderMrsp_Run( TQContext *tq_ctx )
{
ScoreTqReqSurrenderMrsp_Context *ctx;
@@ -1030,6 +1034,7 @@ void ScoreTqReqSurrenderMrsp_Run( TQContext *tq_ctx )
}
}
+ T_add_remark( &ScoreTqReqSurrenderMrsp_Remark );
T_pop_fixture();
}
diff --git a/testsuites/validation/tr-tq-surrender-mrsp.h b/testsuites/validation/tr-tq-surrender-mrsp.h
index 66be73adbb..eff865e612 100644
--- a/testsuites/validation/tr-tq-surrender-mrsp.h
+++ b/testsuites/validation/tr-tq-surrender-mrsp.h
@@ -3,11 +3,11 @@
/**
* @file
*
- * @ingroup RTEMSTestCaseScoreTqReqSurrenderMrsp
+ * @ingroup ScoreTqReqSurrenderMrsp
*/
/*
- * Copyright (C) 2021 embedded brains GmbH (http://www.embedded-brains.de)
+ * Copyright (C) 2021 embedded brains GmbH & Co. KG
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
@@ -58,7 +58,7 @@ extern "C" {
#endif
/**
- * @addtogroup RTEMSTestCaseScoreTqReqSurrenderMrsp
+ * @addtogroup ScoreTqReqSurrenderMrsp
*
* @{
*/
diff --git a/testsuites/validation/tr-tq-surrender-priority-inherit.c b/testsuites/validation/tr-tq-surrender-priority-inherit.c
index 75b93e40d2..d0a580f988 100644
--- a/testsuites/validation/tr-tq-surrender-priority-inherit.c
+++ b/testsuites/validation/tr-tq-surrender-priority-inherit.c
@@ -3,11 +3,11 @@
/**
* @file
*
- * @ingroup RTEMSTestCaseScoreTqReqSurrenderPriorityInherit
+ * @ingroup ScoreTqReqSurrenderPriorityInherit
*/
/*
- * Copyright (C) 2021 embedded brains GmbH (http://www.embedded-brains.de)
+ * Copyright (C) 2021 embedded brains GmbH & Co. KG
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
@@ -61,10 +61,10 @@
#include <rtems/test.h>
/**
- * @defgroup RTEMSTestCaseScoreTqReqSurrenderPriorityInherit \
+ * @defgroup ScoreTqReqSurrenderPriorityInherit \
* spec:/score/tq/req/surrender-priority-inherit
*
- * @ingroup RTEMSTestSuiteTestsuitesValidationNoClock0
+ * @ingroup TestsuitesValidationNoClock0
*
* @{
*/
@@ -96,7 +96,7 @@ typedef struct {
/**
* @brief This member contains the call within ISR request.
*/
- CallWithinISRRequest request;;
+ CallWithinISRRequest request;
/**
* @brief This member contains the barrier to synchronize the runner and the
@@ -921,7 +921,7 @@ static void ScoreTqReqSurrenderPriorityInherit_Pre_Suspended_Prepare(
switch ( state ) {
case ScoreTqReqSurrenderPriorityInherit_Pre_Suspended_Yes: {
/*
- * Whiel the new owner is suspended.
+ * While the new owner is suspended.
*/
ctx->suspended = true;
break;
@@ -929,7 +929,7 @@ static void ScoreTqReqSurrenderPriorityInherit_Pre_Suspended_Prepare(
case ScoreTqReqSurrenderPriorityInherit_Pre_Suspended_No: {
/*
- * Whiel the new owner is not suspended.
+ * While the new owner is not suspended.
*/
ctx->suspended = false;
break;
@@ -2435,6 +2435,11 @@ static void ScoreTqReqSurrenderPriorityInherit_TestVariant(
static T_fixture_node ScoreTqReqSurrenderPriorityInherit_Node;
+static T_remark ScoreTqReqSurrenderPriorityInherit_Remark = {
+ .next = NULL,
+ .remark = "ScoreTqReqSurrenderPriorityInherit"
+};
+
void ScoreTqReqSurrenderPriorityInherit_Run( TQContext *tq_ctx )
{
ScoreTqReqSurrenderPriorityInherit_Context *ctx;
@@ -2510,6 +2515,7 @@ void ScoreTqReqSurrenderPriorityInherit_Run( TQContext *tq_ctx )
}
}
+ T_add_remark( &ScoreTqReqSurrenderPriorityInherit_Remark );
T_pop_fixture();
}
diff --git a/testsuites/validation/tr-tq-surrender-priority-inherit.h b/testsuites/validation/tr-tq-surrender-priority-inherit.h
index b792de1b2e..941e9eb545 100644
--- a/testsuites/validation/tr-tq-surrender-priority-inherit.h
+++ b/testsuites/validation/tr-tq-surrender-priority-inherit.h
@@ -3,11 +3,11 @@
/**
* @file
*
- * @ingroup RTEMSTestCaseScoreTqReqSurrenderPriorityInherit
+ * @ingroup ScoreTqReqSurrenderPriorityInherit
*/
/*
- * Copyright (C) 2021 embedded brains GmbH (http://www.embedded-brains.de)
+ * Copyright (C) 2021 embedded brains GmbH & Co. KG
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
@@ -58,7 +58,7 @@ extern "C" {
#endif
/**
- * @addtogroup RTEMSTestCaseScoreTqReqSurrenderPriorityInherit
+ * @addtogroup ScoreTqReqSurrenderPriorityInherit
*
* @{
*/
diff --git a/testsuites/validation/tr-tq-surrender.c b/testsuites/validation/tr-tq-surrender.c
index 60091c2d0c..ce680d71d2 100644
--- a/testsuites/validation/tr-tq-surrender.c
+++ b/testsuites/validation/tr-tq-surrender.c
@@ -3,11 +3,11 @@
/**
* @file
*
- * @ingroup RTEMSTestCaseScoreTqReqSurrender
+ * @ingroup ScoreTqReqSurrender
*/
/*
- * Copyright (C) 2021 embedded brains GmbH (http://www.embedded-brains.de)
+ * Copyright (C) 2021 embedded brains GmbH & Co. KG
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
@@ -61,9 +61,9 @@
#include <rtems/test.h>
/**
- * @defgroup RTEMSTestCaseScoreTqReqSurrender spec:/score/tq/req/surrender
+ * @defgroup ScoreTqReqSurrender spec:/score/tq/req/surrender
*
- * @ingroup RTEMSTestSuiteTestsuitesValidationNoClock0
+ * @ingroup TestsuitesValidationNoClock0
*
* @{
*/
@@ -84,7 +84,7 @@ typedef struct {
/**
* @brief This member contains the call within ISR request.
*/
- CallWithinISRRequest request;;
+ CallWithinISRRequest request;
/**
* @brief This member contains the barrier to synchronize the runner and the
@@ -637,6 +637,11 @@ static void ScoreTqReqSurrender_TestVariant( ScoreTqReqSurrender_Context *ctx )
static T_fixture_node ScoreTqReqSurrender_Node;
+static T_remark ScoreTqReqSurrender_Remark = {
+ .next = NULL,
+ .remark = "ScoreTqReqSurrender"
+};
+
void ScoreTqReqSurrender_Run( TQContext *tq_ctx )
{
ScoreTqReqSurrender_Context *ctx;
@@ -678,6 +683,7 @@ void ScoreTqReqSurrender_Run( TQContext *tq_ctx )
}
}
+ T_add_remark( &ScoreTqReqSurrender_Remark );
T_pop_fixture();
}
diff --git a/testsuites/validation/tr-tq-surrender.h b/testsuites/validation/tr-tq-surrender.h
index fd64bbfa02..8155387069 100644
--- a/testsuites/validation/tr-tq-surrender.h
+++ b/testsuites/validation/tr-tq-surrender.h
@@ -3,11 +3,11 @@
/**
* @file
*
- * @ingroup RTEMSTestCaseScoreTqReqSurrender
+ * @ingroup ScoreTqReqSurrender
*/
/*
- * Copyright (C) 2021 embedded brains GmbH (http://www.embedded-brains.de)
+ * Copyright (C) 2021 embedded brains GmbH & Co. KG
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
@@ -58,7 +58,7 @@ extern "C" {
#endif
/**
- * @addtogroup RTEMSTestCaseScoreTqReqSurrender
+ * @addtogroup ScoreTqReqSurrender
*
* @{
*/
diff --git a/testsuites/validation/tr-tq-timeout-mrsp.c b/testsuites/validation/tr-tq-timeout-mrsp.c
index 2ee4960495..7362e1943b 100644
--- a/testsuites/validation/tr-tq-timeout-mrsp.c
+++ b/testsuites/validation/tr-tq-timeout-mrsp.c
@@ -3,11 +3,11 @@
/**
* @file
*
- * @ingroup RTEMSTestCaseScoreTqReqTimeoutMrsp
+ * @ingroup ScoreTqReqTimeoutMrsp
*/
/*
- * Copyright (C) 2021 embedded brains GmbH (http://www.embedded-brains.de)
+ * Copyright (C) 2021 embedded brains GmbH & Co. KG
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
@@ -61,9 +61,9 @@
#include <rtems/test.h>
/**
- * @defgroup RTEMSTestCaseScoreTqReqTimeoutMrsp spec:/score/tq/req/timeout-mrsp
+ * @defgroup ScoreTqReqTimeoutMrsp spec:/score/tq/req/timeout-mrsp
*
- * @ingroup RTEMSTestSuiteTestsuitesValidationNoClock0
+ * @ingroup TestsuitesValidationNoClock0
*
* @{
*/
@@ -439,6 +439,11 @@ static void ScoreTqReqTimeoutMrsp_TestVariant(
static T_fixture_node ScoreTqReqTimeoutMrsp_Node;
+static T_remark ScoreTqReqTimeoutMrsp_Remark = {
+ .next = NULL,
+ .remark = "ScoreTqReqTimeoutMrsp"
+};
+
void ScoreTqReqTimeoutMrsp_Run( TQContext *tq_ctx )
{
ScoreTqReqTimeoutMrsp_Context *ctx;
@@ -470,6 +475,7 @@ void ScoreTqReqTimeoutMrsp_Run( TQContext *tq_ctx )
}
}
+ T_add_remark( &ScoreTqReqTimeoutMrsp_Remark );
T_pop_fixture();
}
diff --git a/testsuites/validation/tr-tq-timeout-mrsp.h b/testsuites/validation/tr-tq-timeout-mrsp.h
index a08ef170c5..56df23d88b 100644
--- a/testsuites/validation/tr-tq-timeout-mrsp.h
+++ b/testsuites/validation/tr-tq-timeout-mrsp.h
@@ -3,11 +3,11 @@
/**
* @file
*
- * @ingroup RTEMSTestCaseScoreTqReqTimeoutMrsp
+ * @ingroup ScoreTqReqTimeoutMrsp
*/
/*
- * Copyright (C) 2021 embedded brains GmbH (http://www.embedded-brains.de)
+ * Copyright (C) 2021 embedded brains GmbH & Co. KG
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
@@ -58,7 +58,7 @@ extern "C" {
#endif
/**
- * @addtogroup RTEMSTestCaseScoreTqReqTimeoutMrsp
+ * @addtogroup ScoreTqReqTimeoutMrsp
*
* @{
*/
diff --git a/testsuites/validation/tr-tq-timeout-priority-inherit.c b/testsuites/validation/tr-tq-timeout-priority-inherit.c
index 6e744ba7d9..12ac70df90 100644
--- a/testsuites/validation/tr-tq-timeout-priority-inherit.c
+++ b/testsuites/validation/tr-tq-timeout-priority-inherit.c
@@ -3,11 +3,11 @@
/**
* @file
*
- * @ingroup RTEMSTestCaseScoreTqReqTimeoutPriorityInherit
+ * @ingroup ScoreTqReqTimeoutPriorityInherit
*/
/*
- * Copyright (C) 2021 embedded brains GmbH (http://www.embedded-brains.de)
+ * Copyright (C) 2021 embedded brains GmbH & Co. KG
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
@@ -61,10 +61,10 @@
#include <rtems/test.h>
/**
- * @defgroup RTEMSTestCaseScoreTqReqTimeoutPriorityInherit \
+ * @defgroup ScoreTqReqTimeoutPriorityInherit \
* spec:/score/tq/req/timeout-priority-inherit
*
- * @ingroup RTEMSTestSuiteTestsuitesValidationNoClock0
+ * @ingroup TestsuitesValidationNoClock0
*
* @{
*/
@@ -93,7 +93,7 @@ typedef struct {
/**
* @brief This member contains the call within ISR request.
*/
- CallWithinISRRequest request;;
+ CallWithinISRRequest request;
/**
* @brief This member specifies the scheduler of the thread.
@@ -2071,6 +2071,11 @@ static void ScoreTqReqTimeoutPriorityInherit_TestVariant(
static T_fixture_node ScoreTqReqTimeoutPriorityInherit_Node;
+static T_remark ScoreTqReqTimeoutPriorityInherit_Remark = {
+ .next = NULL,
+ .remark = "ScoreTqReqTimeoutPriorityInherit"
+};
+
void ScoreTqReqTimeoutPriorityInherit_Run( TQContext *tq_ctx )
{
ScoreTqReqTimeoutPriorityInherit_Context *ctx;
@@ -2148,6 +2153,7 @@ void ScoreTqReqTimeoutPriorityInherit_Run( TQContext *tq_ctx )
}
}
+ T_add_remark( &ScoreTqReqTimeoutPriorityInherit_Remark );
T_pop_fixture();
}
diff --git a/testsuites/validation/tr-tq-timeout-priority-inherit.h b/testsuites/validation/tr-tq-timeout-priority-inherit.h
index a75665f659..149ca69755 100644
--- a/testsuites/validation/tr-tq-timeout-priority-inherit.h
+++ b/testsuites/validation/tr-tq-timeout-priority-inherit.h
@@ -3,11 +3,11 @@
/**
* @file
*
- * @ingroup RTEMSTestCaseScoreTqReqTimeoutPriorityInherit
+ * @ingroup ScoreTqReqTimeoutPriorityInherit
*/
/*
- * Copyright (C) 2021 embedded brains GmbH (http://www.embedded-brains.de)
+ * Copyright (C) 2021 embedded brains GmbH & Co. KG
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
@@ -58,7 +58,7 @@ extern "C" {
#endif
/**
- * @addtogroup RTEMSTestCaseScoreTqReqTimeoutPriorityInherit
+ * @addtogroup ScoreTqReqTimeoutPriorityInherit
*
* @{
*/
diff --git a/testsuites/validation/tr-tq-timeout.c b/testsuites/validation/tr-tq-timeout.c
index 5575abdd57..c9bc13a937 100644
--- a/testsuites/validation/tr-tq-timeout.c
+++ b/testsuites/validation/tr-tq-timeout.c
@@ -3,11 +3,11 @@
/**
* @file
*
- * @ingroup RTEMSTestCaseScoreTqReqTimeout
+ * @ingroup ScoreTqReqTimeout
*/
/*
- * Copyright (C) 2021 embedded brains GmbH (http://www.embedded-brains.de)
+ * Copyright (C) 2021 embedded brains GmbH & Co. KG
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
@@ -60,9 +60,9 @@
#include <rtems/test.h>
/**
- * @defgroup RTEMSTestCaseScoreTqReqTimeout spec:/score/tq/req/timeout
+ * @defgroup ScoreTqReqTimeout spec:/score/tq/req/timeout
*
- * @ingroup RTEMSTestSuiteTestsuitesValidationNoClock0
+ * @ingroup TestsuitesValidationNoClock0
*
* @{
*/
@@ -81,7 +81,7 @@ typedef struct {
/**
* @brief This member contains the call within ISR request.
*/
- CallWithinISRRequest request;;
+ CallWithinISRRequest request;
/**
* @brief This member contains a copy of the corresponding
@@ -427,6 +427,11 @@ static void ScoreTqReqTimeout_TestVariant( ScoreTqReqTimeout_Context *ctx )
static T_fixture_node ScoreTqReqTimeout_Node;
+static T_remark ScoreTqReqTimeout_Remark = {
+ .next = NULL,
+ .remark = "ScoreTqReqTimeout"
+};
+
void ScoreTqReqTimeout_Run( TQContext *tq_ctx )
{
ScoreTqReqTimeout_Context *ctx;
@@ -447,6 +452,7 @@ void ScoreTqReqTimeout_Run( TQContext *tq_ctx )
ScoreTqReqTimeout_TestVariant( ctx );
}
+ T_add_remark( &ScoreTqReqTimeout_Remark );
T_pop_fixture();
}
diff --git a/testsuites/validation/tr-tq-timeout.h b/testsuites/validation/tr-tq-timeout.h
index 487c32743d..825ba798ea 100644
--- a/testsuites/validation/tr-tq-timeout.h
+++ b/testsuites/validation/tr-tq-timeout.h
@@ -3,11 +3,11 @@
/**
* @file
*
- * @ingroup RTEMSTestCaseScoreTqReqTimeout
+ * @ingroup ScoreTqReqTimeout
*/
/*
- * Copyright (C) 2021 embedded brains GmbH (http://www.embedded-brains.de)
+ * Copyright (C) 2021 embedded brains GmbH & Co. KG
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
@@ -58,7 +58,7 @@ extern "C" {
#endif
/**
- * @addtogroup RTEMSTestCaseScoreTqReqTimeout
+ * @addtogroup ScoreTqReqTimeout
*
* @{
*/
diff --git a/testsuites/validation/ts-acfg.h b/testsuites/validation/ts-acfg.h
index 3ee9951ebd..60d1833857 100644
--- a/testsuites/validation/ts-acfg.h
+++ b/testsuites/validation/ts-acfg.h
@@ -3,12 +3,14 @@
/**
* @file
*
+ * @ingroup RTEMSTestSuitesValidation
+ *
* @brief This header file provides a validation test suite runner for
* validation test cases specific to the application configuration.
*/
/*
- * Copyright (C) 2021 embedded brains GmbH (http://www.embedded-brains.de)
+ * Copyright (C) 2021 embedded brains GmbH & Co. KG
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
diff --git a/testsuites/validation/ts-config.h b/testsuites/validation/ts-config.h
index ecdd3b8f8d..f5f46738f0 100644
--- a/testsuites/validation/ts-config.h
+++ b/testsuites/validation/ts-config.h
@@ -3,14 +3,14 @@
/**
* @file
*
- * @ingroup RTEMSTestSuites
+ * @ingroup RTEMSTestSuitesValidation
*
* @brief This header file provides the constants used by the test suite
* configuration.
*/
/*
- * Copyright (C) 2021 embedded brains GmbH (http://www.embedded-brains.de)
+ * Copyright (C) 2021 embedded brains GmbH & Co. KG
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
@@ -44,7 +44,7 @@ extern "C" {
#endif
/**
- * @addtogroup RTEMSTestSuites
+ * @addtogroup RTEMSTestSuitesValidation
*
* @{
*/
@@ -65,7 +65,7 @@ extern "C" {
#define TEST_SCHEDULER_D_NAME rtems_build_name( 'D', ' ', ' ', ' ' )
-#if defined( __OPTIMIZE__ ) && !defined( RTEMS_COVERAGE )
+#if defined( __OPTIMIZE__ ) && !defined( RTEMS_GCOV_COVERAGE )
#define TEST_BASE_STACK_SIZE RTEMS_MINIMUM_STACK_SIZE
#else
#define TEST_BASE_STACK_SIZE ( 4 * RTEMS_MINIMUM_STACK_SIZE )
@@ -109,7 +109,7 @@ void *test_task_stack_allocate( size_t size );
void test_task_stack_deallocate( void *stack );
-void *test_idle_task_stack_allocate( uint32_t cpu_index, size_t size );
+void *test_idle_task_stack_allocate( uint32_t cpu_index, size_t *size );
extern rtems_task_argument test_runner_argument;
diff --git a/testsuites/validation/ts-default.h b/testsuites/validation/ts-default.h
index 9f317abf80..86c0b4e345 100644
--- a/testsuites/validation/ts-default.h
+++ b/testsuites/validation/ts-default.h
@@ -3,12 +3,14 @@
/**
* @file
*
+ * @ingroup RTEMSTestSuitesValidation
+ *
* @brief This header file provides the default validation test suite runner
* and application configuration.
*/
/*
- * Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+ * Copyright (C) 2020 embedded brains GmbH & Co. KG
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
@@ -296,25 +298,38 @@ T_scheduler_operations[ CONFIGURE_MAXIMUM_PROCESSORS ] = {
#define SCHEDULER_PRIORITY_ENTRY_POINTS T_SCHEDULER_ENTRY_POINTS
-#define CONFIGURE_SCHEDULER_NAME TEST_SCHEDULER_A_NAME
-
#define CONFIGURE_SCHEDULER_PRIORITY
+#if defined(CONFIGURE_SCHEDULER_TABLE_ENTRIES)
+
+#include <rtems/scheduler.h>
+
+RTEMS_SCHEDULER_PRIORITY( a, 64 );
+
+#else /* CONFIGURE_SCHEDULER_TABLE_ENTRIES */
+
+#define CONFIGURE_SCHEDULER_NAME TEST_SCHEDULER_A_NAME
+
#define CONFIGURE_MAXIMUM_PRIORITY 127
+#endif /* CONFIGURE_SCHEDULER_TABLE_ENTRIES */
+
#endif
#define CONFIGURE_IDLE_TASK_STACK_SIZE TEST_IDLE_STACK_SIZE
static char test_idle_stacks[ CONFIGURE_MAXIMUM_PROCESSORS ][
- ( TEST_IDLE_STACK_SIZE + CPU_IDLE_TASK_IS_FP * CONTEXT_FP_SIZE )
+ RTEMS_ALIGN_UP(
+ MAX_TLS_SIZE + TEST_IDLE_STACK_SIZE + CPU_IDLE_TASK_IS_FP * CONTEXT_FP_SIZE,
+ CPU_INTERRUPT_STACK_ALIGNMENT
+ )
]
RTEMS_ALIGNED( CPU_INTERRUPT_STACK_ALIGNMENT )
RTEMS_SECTION( ".rtemsstack.idle" );
-void *test_idle_task_stack_allocate( uint32_t cpu_index, size_t size )
+void *test_idle_task_stack_allocate( uint32_t cpu_index, size_t *size )
{
- if ( size > sizeof( test_idle_stacks[ 0 ] ) ) {
+ if ( *size > sizeof( test_idle_stacks[ 0 ] ) ) {
rtems_fatal( RTEMS_FATAL_SOURCE_APPLICATION, 0xABAD1DEA );
}
diff --git a/testsuites/validation/ts-fatal-boot-processor-not-assigned-to-scheduler.c b/testsuites/validation/ts-fatal-boot-processor-not-assigned-to-scheduler.c
index 1222b26b2e..c983cfd406 100644
--- a/testsuites/validation/ts-fatal-boot-processor-not-assigned-to-scheduler.c
+++ b/testsuites/validation/ts-fatal-boot-processor-not-assigned-to-scheduler.c
@@ -3,11 +3,11 @@
/**
* @file
*
- * @ingroup RTEMSTestSuiteTestsuitesFatalBootProcessorNotAssignedToScheduler
+ * @ingroup TestsuitesFatalBootProcessorNotAssignedToScheduler
*/
/*
- * Copyright (C) 2021 embedded brains GmbH (http://www.embedded-brains.de)
+ * Copyright (C) 2021 embedded brains GmbH & Co. KG
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
@@ -58,10 +58,10 @@
#include <rtems/test.h>
/**
- * @defgroup RTEMSTestSuiteTestsuitesFatalBootProcessorNotAssignedToScheduler \
+ * @defgroup TestsuitesFatalBootProcessorNotAssignedToScheduler \
* spec:/testsuites/fatal-boot-processor-not-assigned-to-scheduler
*
- * @ingroup RTEMSTestSuites
+ * @ingroup RTEMSTestSuitesValidation
*
* @brief This validation test suite uses an application configuration which
* triggers a fatal error during system initialization.
@@ -69,7 +69,7 @@
* @{
*/
-const char rtems_test_name[] = "FatalBootProcessorNotAssignedToScheduler";
+const char rtems_test_name[] = "TestsuitesFatalBootProcessorNotAssignedToScheduler";
#define FATAL_SYSINIT_RUN \
ScoreSmpValFatalBootProcessorNotAssignedToScheduler_Run
diff --git a/testsuites/validation/ts-fatal-idle-thread-create-failed.c b/testsuites/validation/ts-fatal-idle-thread-create-failed.c
new file mode 100644
index 0000000000..fb7a36c11a
--- /dev/null
+++ b/testsuites/validation/ts-fatal-idle-thread-create-failed.c
@@ -0,0 +1,90 @@
+/* SPDX-License-Identifier: BSD-2-Clause */
+
+/**
+ * @file
+ *
+ * @ingroup TestsuitesFatalIdleThreadCreateFailed
+ */
+
+/*
+ * Copyright (C) 2022 embedded brains GmbH & Co. KG
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ */
+
+/*
+ * This file is part of the RTEMS quality process and was automatically
+ * generated. If you find something that needs to be fixed or
+ * worded better please post a report or patch to an RTEMS mailing list
+ * or raise a bug report:
+ *
+ * https://www.rtems.org/bugs.html
+ *
+ * For information on updating and regenerating please refer to the How-To
+ * section in the Software Requirements Engineering chapter of the
+ * RTEMS Software Engineering manual. The manual is provided as a part of
+ * a release. For development sources please refer to the online
+ * documentation at:
+ *
+ * https://docs.rtems.org
+ */
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#include "tr-fatal-idle-thread-create-failed.h"
+
+#include <rtems/test.h>
+
+/**
+ * @defgroup TestsuitesFatalIdleThreadCreateFailed \
+ * spec:/testsuites/fatal-idle-thread-create-failed
+ *
+ * @ingroup RTEMSTestSuitesValidation
+ *
+ * @brief This validation test suite contains a test case which is triggered by
+ * a fatal error during system initialization.
+ *
+ * @{
+ */
+
+const char rtems_test_name[] = "TestsuitesFatalIdleThreadCreateFailed";
+
+static bool CreateTask( rtems_tcb *executing, rtems_tcb *created )
+{
+ (void) executing;
+ (void) created;
+ return false;
+}
+
+#define FATAL_SYSINIT_RUN ScoreThreadValFatalIdleThreadCreateFailed_Run
+
+#define CONFIGURE_APPLICATION_DOES_NOT_NEED_CLOCK_DRIVER
+
+#define CONFIGURE_IDLE_TASK_INITIALIZES_APPLICATION
+
+#define FATAL_SYSINIT_INITIAL_EXTENSION { .thread_create = CreateTask }
+
+#include "ts-fatal-sysinit.h"
+
+/** @} */
diff --git a/testsuites/validation/ts-fatal-idle-thread-stack-too-small.c b/testsuites/validation/ts-fatal-idle-thread-stack-too-small.c
new file mode 100644
index 0000000000..ddfe59df13
--- /dev/null
+++ b/testsuites/validation/ts-fatal-idle-thread-stack-too-small.c
@@ -0,0 +1,97 @@
+/* SPDX-License-Identifier: BSD-2-Clause */
+
+/**
+ * @file
+ *
+ * @ingroup TestsuitesFatalIdleThreadStackTooSmall
+ */
+
+/*
+ * Copyright (C) 2021 embedded brains GmbH & Co. KG
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ */
+
+/*
+ * This file is part of the RTEMS quality process and was automatically
+ * generated. If you find something that needs to be fixed or
+ * worded better please post a report or patch to an RTEMS mailing list
+ * or raise a bug report:
+ *
+ * https://www.rtems.org/bugs.html
+ *
+ * For information on updating and regenerating please refer to the How-To
+ * section in the Software Requirements Engineering chapter of the
+ * RTEMS Software Engineering manual. The manual is provided as a part of
+ * a release. For development sources please refer to the online
+ * documentation at:
+ *
+ * https://docs.rtems.org
+ */
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#include "tr-fatal-idle-thread-stack-too-small.h"
+
+#include <rtems/test.h>
+
+/**
+ * @defgroup TestsuitesFatalIdleThreadStackTooSmall \
+ * spec:/testsuites/fatal-idle-thread-stack-too-small
+ *
+ * @ingroup RTEMSTestSuitesValidation
+ *
+ * @brief This validation test suite contains a test case which triggers a
+ * fatal error during system initialization.
+ *
+ * @{
+ */
+
+const char rtems_test_name[] = "TestsuitesFatalIdleThreadStackTooSmall";
+
+#define FATAL_SYSINIT_RUN ScoreThreadValFatalIdleThreadStackTooSmall_Run
+
+static _Thread_local volatile uint8_t zero[ RTEMS_MINIMUM_STACK_SIZE ];
+
+static void Init( rtems_task_argument arg )
+{
+ (void) arg;
+ rtems_fatal( RTEMS_FATAL_SOURCE_EXIT, zero[ 0 ] + 1 );
+}
+
+#define CONFIGURE_APPLICATION_DOES_NOT_NEED_CLOCK_DRIVER
+
+#define CONFIGURE_MAXIMUM_TASKS 1
+
+#define CONFIGURE_MINIMUM_TASKS_WITH_USER_PROVIDED_STORAGE 1
+
+#define CONFIGURE_INIT_TASK_PRIORITY 0
+
+#define CONFIGURE_INIT_TASK_CONSTRUCT_STORAGE_SIZE RTEMS_MINIMUM_STACK_SIZE
+
+#define CONFIGURE_RTEMS_INIT_TASKS_TABLE
+
+#include "ts-fatal-sysinit.h"
+
+/** @} */
diff --git a/testsuites/validation/ts-fatal-init-task-construct-failed.c b/testsuites/validation/ts-fatal-init-task-construct-failed.c
index 8efd2b32ce..d8c87428e8 100644
--- a/testsuites/validation/ts-fatal-init-task-construct-failed.c
+++ b/testsuites/validation/ts-fatal-init-task-construct-failed.c
@@ -3,11 +3,11 @@
/**
* @file
*
- * @ingroup RTEMSTestSuiteTestsuitesFatalInitTaskConstructFailed
+ * @ingroup TestsuitesFatalInitTaskConstructFailed
*/
/*
- * Copyright (C) 2021 embedded brains GmbH (http://www.embedded-brains.de)
+ * Copyright (C) 2021 embedded brains GmbH & Co. KG
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
@@ -57,10 +57,10 @@
#include <rtems/test.h>
/**
- * @defgroup RTEMSTestSuiteTestsuitesFatalInitTaskConstructFailed \
+ * @defgroup TestsuitesFatalInitTaskConstructFailed \
* spec:/testsuites/fatal-init-task-construct-failed
*
- * @ingroup RTEMSTestSuites
+ * @ingroup RTEMSTestSuitesValidation
*
* @brief This validation test suite contains a test case which triggers a
* fatal error during system initialization.
@@ -68,7 +68,7 @@
* @{
*/
-const char rtems_test_name[] = "FatalInitTaskConstructFailed";
+const char rtems_test_name[] = "TestsuitesFatalInitTaskConstructFailed";
#define FATAL_SYSINIT_RUN AcfgValFatalInitTaskConstructFailed_Run
diff --git a/testsuites/validation/ts-fatal-mandatory-processor-not-present.c b/testsuites/validation/ts-fatal-mandatory-processor-not-present.c
index 3645313755..f9629d9699 100644
--- a/testsuites/validation/ts-fatal-mandatory-processor-not-present.c
+++ b/testsuites/validation/ts-fatal-mandatory-processor-not-present.c
@@ -3,11 +3,11 @@
/**
* @file
*
- * @ingroup RTEMSTestSuiteTestsuitesFatalMandatoryProcessorNotPresent
+ * @ingroup TestsuitesFatalMandatoryProcessorNotPresent
*/
/*
- * Copyright (C) 2021 embedded brains GmbH (http://www.embedded-brains.de)
+ * Copyright (C) 2021 embedded brains GmbH & Co. KG
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
@@ -58,10 +58,10 @@
#include <rtems/test.h>
/**
- * @defgroup RTEMSTestSuiteTestsuitesFatalMandatoryProcessorNotPresent \
+ * @defgroup TestsuitesFatalMandatoryProcessorNotPresent \
* spec:/testsuites/fatal-mandatory-processor-not-present
*
- * @ingroup RTEMSTestSuites
+ * @ingroup RTEMSTestSuitesValidation
*
* @brief This validation test suite contains a test case which triggers a
* fatal error during system initialization.
@@ -69,7 +69,7 @@
* @{
*/
-const char rtems_test_name[] = "FatalMandatoryProcessorNotPresent";
+const char rtems_test_name[] = "TestsuitesFatalMandatoryProcessorNotPresent";
#define FATAL_SYSINIT_RUN ScoreSmpValFatalMandatoryProcessorNotPresent_Run
diff --git a/testsuites/validation/ts-fatal-scheduler-requires-exactly-one-processor.c b/testsuites/validation/ts-fatal-scheduler-requires-exactly-one-processor.c
index d9eed5b092..d1de45d836 100644
--- a/testsuites/validation/ts-fatal-scheduler-requires-exactly-one-processor.c
+++ b/testsuites/validation/ts-fatal-scheduler-requires-exactly-one-processor.c
@@ -3,11 +3,11 @@
/**
* @file
*
- * @ingroup RTEMSTestSuiteTestsuitesFatalSchedulerRequiresExactlyOneProcessor
+ * @ingroup TestsuitesFatalSchedulerRequiresExactlyOneProcessor
*/
/*
- * Copyright (C) 2021 embedded brains GmbH (http://www.embedded-brains.de)
+ * Copyright (C) 2021 embedded brains GmbH & Co. KG
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
@@ -58,10 +58,10 @@
#include <rtems/test.h>
/**
- * @defgroup RTEMSTestSuiteTestsuitesFatalSchedulerRequiresExactlyOneProcessor \
+ * @defgroup TestsuitesFatalSchedulerRequiresExactlyOneProcessor \
* spec:/testsuites/fatal-scheduler-requires-exactly-one-processor
*
- * @ingroup RTEMSTestSuites
+ * @ingroup RTEMSTestSuitesValidation
*
* @brief This validation test suite uses an application configuration which
* triggers a fatal error during system initialization.
@@ -69,7 +69,7 @@
* @{
*/
-const char rtems_test_name[] = "FatalSchedulerRequiresExactlyOneProcessor";
+const char rtems_test_name[] = "TestsuitesFatalSchedulerRequiresExactlyOneProcessor";
#define FATAL_SYSINIT_RUN \
ScoreSmpValFatalSchedulerRequiresExactlyOneProcessor_Run
diff --git a/testsuites/validation/ts-fatal-smp.c b/testsuites/validation/ts-fatal-smp.c
index c1c4844643..ff6fd19d42 100644
--- a/testsuites/validation/ts-fatal-smp.c
+++ b/testsuites/validation/ts-fatal-smp.c
@@ -3,11 +3,11 @@
/**
* @file
*
- * @ingroup RTEMSTestSuiteTestsuitesFatalSmp
+ * @ingroup TestsuitesFatalSmp
*/
/*
- * Copyright (C) 2021 embedded brains GmbH (http://www.embedded-brains.de)
+ * Copyright (C) 2021 embedded brains GmbH & Co. KG
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
@@ -58,9 +58,9 @@
#include <rtems/test.h>
/**
- * @defgroup RTEMSTestSuiteTestsuitesFatalSmp spec:/testsuites/fatal-smp
+ * @defgroup TestsuitesFatalSmp spec:/testsuites/fatal-smp
*
- * @ingroup RTEMSTestSuites
+ * @ingroup RTEMSTestSuitesValidation
*
* @brief This validation test suite contains a test case which triggers
* SMP-specific fatal errors.
@@ -68,7 +68,7 @@
* @{
*/
-const char rtems_test_name[] = "FatalSmp";
+const char rtems_test_name[] = "TestsuitesFatalSmp";
#define FATAL_SYSINIT_RUN ScoreSmpValFatal_Run
diff --git a/testsuites/validation/ts-fatal-start-of-mandatory-processor-failed.c b/testsuites/validation/ts-fatal-start-of-mandatory-processor-failed.c
index 76e96f50ef..8ab860eea2 100644
--- a/testsuites/validation/ts-fatal-start-of-mandatory-processor-failed.c
+++ b/testsuites/validation/ts-fatal-start-of-mandatory-processor-failed.c
@@ -3,11 +3,11 @@
/**
* @file
*
- * @ingroup RTEMSTestSuiteTestsuitesFatalStartOfMandatoryProcessorFailed
+ * @ingroup TestsuitesFatalStartOfMandatoryProcessorFailed
*/
/*
- * Copyright (C) 2021 embedded brains GmbH (http://www.embedded-brains.de)
+ * Copyright (C) 2021 embedded brains GmbH & Co. KG
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
@@ -58,10 +58,10 @@
#include <rtems/test.h>
/**
- * @defgroup RTEMSTestSuiteTestsuitesFatalStartOfMandatoryProcessorFailed \
+ * @defgroup TestsuitesFatalStartOfMandatoryProcessorFailed \
* spec:/testsuites/fatal-start-of-mandatory-processor-failed
*
- * @ingroup RTEMSTestSuites
+ * @ingroup RTEMSTestSuitesValidation
*
* @brief This validation test suite contains a test case which triggers a
* fatal error during system initialization.
@@ -69,7 +69,7 @@
* @{
*/
-const char rtems_test_name[] = "FatalStartOfMandatoryProcessorFailed";
+const char rtems_test_name[] = "TestsuitesFatalStartOfMandatoryProcessorFailed";
#define FATAL_SYSINIT_RUN ScoreSmpValFatalStartOfMandatoryProcessorFailed_Run
diff --git a/testsuites/validation/ts-fatal-start-on-not-online-processor.c b/testsuites/validation/ts-fatal-start-on-not-online-processor.c
index 9cc981e381..794983823c 100644
--- a/testsuites/validation/ts-fatal-start-on-not-online-processor.c
+++ b/testsuites/validation/ts-fatal-start-on-not-online-processor.c
@@ -3,11 +3,11 @@
/**
* @file
*
- * @ingroup RTEMSTestSuiteTestsuitesFatalStartOnNotOnlineProcessor
+ * @ingroup TestsuitesFatalStartOnNotOnlineProcessor
*/
/*
- * Copyright (C) 2022 embedded brains GmbH (http://www.embedded-brains.de)
+ * Copyright (C) 2022 embedded brains GmbH & Co. KG
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
@@ -58,10 +58,10 @@
#include <rtems/test.h>
/**
- * @defgroup RTEMSTestSuiteTestsuitesFatalStartOnNotOnlineProcessor \
+ * @defgroup TestsuitesFatalStartOnNotOnlineProcessor \
* spec:/testsuites/fatal-start-on-not-online-processor
*
- * @ingroup RTEMSTestSuites
+ * @ingroup RTEMSTestSuitesValidation
*
* @brief This validation test suite contains a test case which triggers a
* fatal error during system initialization.
@@ -69,7 +69,7 @@
* @{
*/
-const char rtems_test_name[] = "FatalStartOnNotOnlineProcessor";
+const char rtems_test_name[] = "TestsuitesFatalStartOnNotOnlineProcessor";
#define FATAL_SYSINIT_RUN ScoreSmpValFatalStartOnNotOnlineProcessor_Run
diff --git a/testsuites/validation/ts-fatal-sysinit.h b/testsuites/validation/ts-fatal-sysinit.h
index 5744bc6fea..0b8f735f54 100644
--- a/testsuites/validation/ts-fatal-sysinit.h
+++ b/testsuites/validation/ts-fatal-sysinit.h
@@ -3,13 +3,15 @@
/**
* @file
*
+ * @ingroup RTEMSTestSuitesValidation
+ *
* @brief This header file provides a configurable validation test suite runner
* and application configuration for fatal error tests which occur during
* system initialization.
*/
/*
- * Copyright (C) 2021 embedded brains GmbH (http://www.embedded-brains.de)
+ * Copyright (C) 2021 embedded brains GmbH & Co. KG
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
@@ -122,10 +124,19 @@ RTEMS_SYSINIT_ITEM(
#define CONFIGURE_APPLICATION_DISABLE_FILESYSTEM
+#ifdef FATAL_SYSINIT_INITIAL_EXTENSION
+#define OPTIONAL_FATAL_SYSINIT_INITIAL_EXTENSION FATAL_SYSINIT_INITIAL_EXTENSION,
+#else
+#define OPTIONAL_FATAL_SYSINIT_INITIAL_EXTENSION
+#endif
+
#define CONFIGURE_INITIAL_EXTENSIONS \
+ OPTIONAL_FATAL_SYSINIT_INITIAL_EXTENSION \
{ .fatal = FatalInitialExtension }, \
{ .fatal = TestSuiteFatalExtension }
+#define CONFIGURE_IDLE_TASK_STORAGE_SIZE RTEMS_MINIMUM_STACK_SIZE
+
#if !defined(CONFIGURE_RTEMS_INIT_TASKS_TABLE)
#define CONFIGURE_IDLE_TASK_INITIALIZES_APPLICATION
diff --git a/testsuites/validation/ts-fatal-too-large-tls-size.c b/testsuites/validation/ts-fatal-too-large-tls-size.c
index ba41390680..ba2cc512df 100644
--- a/testsuites/validation/ts-fatal-too-large-tls-size.c
+++ b/testsuites/validation/ts-fatal-too-large-tls-size.c
@@ -3,11 +3,11 @@
/**
* @file
*
- * @ingroup RTEMSTestSuiteTestsuitesFatalTooLargeTlsSize
+ * @ingroup TestsuitesFatalTooLargeTlsSize
*/
/*
- * Copyright (C) 2021 embedded brains GmbH (http://www.embedded-brains.de)
+ * Copyright (C) 2021 embedded brains GmbH & Co. KG
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
@@ -57,10 +57,10 @@
#include <rtems/test.h>
/**
- * @defgroup RTEMSTestSuiteTestsuitesFatalTooLargeTlsSize \
+ * @defgroup TestsuitesFatalTooLargeTlsSize \
* spec:/testsuites/fatal-too-large-tls-size
*
- * @ingroup RTEMSTestSuites
+ * @ingroup RTEMSTestSuitesValidation
*
* @brief This validation test suite contains a test case which triggers a
* fatal error during system initialization.
@@ -68,7 +68,7 @@
* @{
*/
-const char rtems_test_name[] = "FatalTooLargeTlsSize";
+const char rtems_test_name[] = "TestsuitesFatalTooLargeTlsSize";
#define FATAL_SYSINIT_RUN AcfgValFatalTooLargeTlsSize_Run
diff --git a/testsuites/validation/ts-idle.h b/testsuites/validation/ts-idle.h
index 071209b5ef..6c4c8955f1 100644
--- a/testsuites/validation/ts-idle.h
+++ b/testsuites/validation/ts-idle.h
@@ -3,13 +3,15 @@
/**
* @file
*
+ * @ingroup RTEMSTestSuitesValidation
+ *
* @brief This header file provides a configurable validation test suite runner
* and application configuration for tests which should run within an idle
* task without a user initialization task.
*/
/*
- * Copyright (C) 2021 embedded brains GmbH (http://www.embedded-brains.de)
+ * Copyright (C) 2021 embedded brains GmbH & Co. KG
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
@@ -72,6 +74,10 @@ static const T_config test_config = {
#define CONFIGURE_INITIAL_EXTENSIONS \
{ .fatal = FatalInitialExtension }
+#ifndef CONFIGURE_IDLE_TASK_STORAGE_SIZE
+#define CONFIGURE_IDLE_TASK_STORAGE_SIZE RTEMS_MINIMUM_STACK_SIZE
+#endif
+
#define CONFIGURE_IDLE_TASK_INITIALIZES_APPLICATION
void *IdleBody( uintptr_t ignored )
diff --git a/testsuites/validation/ts-performance-no-clock-0.c b/testsuites/validation/ts-performance-no-clock-0.c
index e43b3a6327..b50276a46e 100644
--- a/testsuites/validation/ts-performance-no-clock-0.c
+++ b/testsuites/validation/ts-performance-no-clock-0.c
@@ -3,11 +3,11 @@
/**
* @file
*
- * @ingroup RTEMSTestSuiteTestsuitesPerformanceNoClock0
+ * @ingroup TestsuitesPerformanceNoClock0
*/
/*
- * Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+ * Copyright (C) 2020 embedded brains GmbH & Co. KG
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
@@ -57,10 +57,10 @@
#include <rtems/test.h>
/**
- * @defgroup RTEMSTestSuiteTestsuitesPerformanceNoClock0 \
+ * @defgroup TestsuitesPerformanceNoClock0 \
* spec:/testsuites/performance-no-clock-0
*
- * @ingroup RTEMSTestSuites
+ * @ingroup RTEMSTestSuitesValidation
*
* @brief This general purpose performance test suite provides enough resources
* to run basic performance tests for all specified managers and functions.
@@ -71,7 +71,7 @@
* @{
*/
-const char rtems_test_name[] = "PerformanceNoClock0";
+const char rtems_test_name[] = "TestsuitesPerformanceNoClock0";
#define CONFIGURE_MAXIMUM_PROCESSORS 4
diff --git a/testsuites/validation/ts-terminate.c b/testsuites/validation/ts-terminate.c
index 52676db6d9..670c7ec6a2 100644
--- a/testsuites/validation/ts-terminate.c
+++ b/testsuites/validation/ts-terminate.c
@@ -3,11 +3,11 @@
/**
* @file
*
- * @ingroup RTEMSTestSuiteTestsuitesTerminate
+ * @ingroup TestsuitesTerminate
*/
/*
- * Copyright (C) 2021 embedded brains GmbH (http://www.embedded-brains.de)
+ * Copyright (C) 2021 embedded brains GmbH & Co. KG
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
@@ -57,9 +57,9 @@
#include <rtems/test.h>
/**
- * @defgroup RTEMSTestSuiteTestsuitesTerminate spec:/testsuites/terminate
+ * @defgroup TestsuitesTerminate spec:/testsuites/terminate
*
- * @ingroup RTEMSTestSuites
+ * @ingroup RTEMSTestSuitesValidation
*
* @brief This validation test suite contains a test case for the system
* termination procedure.
@@ -67,7 +67,7 @@
* @{
*/
-const char rtems_test_name[] = "Terminate";
+const char rtems_test_name[] = "TestsuitesTerminate";
#define CONFIGURE_MAXIMUM_PROCESSORS 2
diff --git a/testsuites/validation/ts-userext.c b/testsuites/validation/ts-userext.c
index 5d41f52093..461a1ddc0e 100644
--- a/testsuites/validation/ts-userext.c
+++ b/testsuites/validation/ts-userext.c
@@ -3,11 +3,11 @@
/**
* @file
*
- * @ingroup RTEMSTestSuiteTestsuitesUserext
+ * @ingroup TestsuitesUserext
*/
/*
- * Copyright (C) 2021 embedded brains GmbH (http://www.embedded-brains.de)
+ * Copyright (C) 2021 embedded brains GmbH & Co. KG
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
@@ -57,9 +57,9 @@
#include <rtems/test.h>
/**
- * @defgroup RTEMSTestSuiteTestsuitesUserext spec:/testsuites/userext
+ * @defgroup TestsuitesUserext spec:/testsuites/userext
*
- * @ingroup RTEMSTestSuites
+ * @ingroup RTEMSTestSuitesValidation
*
* @brief This validation test suite contains a test cases related to the
* invocation of user extensions.
@@ -67,7 +67,7 @@
* @{
*/
-const char rtems_test_name[] = "Userext";
+const char rtems_test_name[] = "TestsuitesUserext";
#define CONFIGURE_MAXIMUM_PROCESSORS 2
@@ -92,6 +92,8 @@ const char rtems_test_name[] = "Userext";
.thread_terminate = ThreadTerminateExtension1 \
}
+#define CONFIGURE_IDLE_TASK_BODY IdleBody
+
#include "ts-default.h"
/** @} */
diff --git a/testsuites/validation/ts-validation-0.c b/testsuites/validation/ts-validation-0.c
index b80c09d47f..7f7dfb9215 100644
--- a/testsuites/validation/ts-validation-0.c
+++ b/testsuites/validation/ts-validation-0.c
@@ -3,11 +3,11 @@
/**
* @file
*
- * @ingroup RTEMSTestSuiteTestsuitesValidation0
+ * @ingroup TestsuitesValidation0
*/
/*
- * Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+ * Copyright (C) 2020 embedded brains GmbH & Co. KG
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
@@ -55,9 +55,9 @@
#include <rtems/test.h>
/**
- * @defgroup RTEMSTestSuiteTestsuitesValidation0 spec:/testsuites/validation-0
+ * @defgroup TestsuitesValidation0 spec:/testsuites/validation-0
*
- * @ingroup RTEMSTestSuites
+ * @ingroup RTEMSTestSuitesValidation
*
* @brief This general purpose validation test suite provides enough resources
* to run basic tests for all specified managers and functions.
@@ -68,7 +68,7 @@
* @{
*/
-const char rtems_test_name[] = "Validation0";
+const char rtems_test_name[] = "TestsuitesValidation0";
#define CONFIGURE_MAXIMUM_PROCESSORS 5
diff --git a/testsuites/validation/ts-validation-1.c b/testsuites/validation/ts-validation-1.c
index 6f396dc873..a33593afb1 100644
--- a/testsuites/validation/ts-validation-1.c
+++ b/testsuites/validation/ts-validation-1.c
@@ -3,11 +3,11 @@
/**
* @file
*
- * @ingroup RTEMSTestSuiteTestsuitesValidation1
+ * @ingroup TestsuitesValidation1
*/
/*
- * Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+ * Copyright (C) 2020 embedded brains GmbH & Co. KG
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
@@ -55,9 +55,9 @@
#include <rtems/test.h>
/**
- * @defgroup RTEMSTestSuiteTestsuitesValidation1 spec:/testsuites/validation-1
+ * @defgroup TestsuitesValidation1 spec:/testsuites/validation-1
*
- * @ingroup RTEMSTestSuites
+ * @ingroup RTEMSTestSuitesValidation
*
* @brief This general purpose validation test suite provides enough resources
* to run basic tests for all specified managers and functions.
@@ -68,7 +68,7 @@
* @{
*/
-const char rtems_test_name[] = "Validation1";
+const char rtems_test_name[] = "TestsuitesValidation1";
#define CONFIGURE_MAXIMUM_PROCESSORS 5
diff --git a/testsuites/validation/ts-validation-acfg-0.c b/testsuites/validation/ts-validation-acfg-0.c
index e1144dd95d..2afd0dae86 100644
--- a/testsuites/validation/ts-validation-acfg-0.c
+++ b/testsuites/validation/ts-validation-acfg-0.c
@@ -3,11 +3,11 @@
/**
* @file
*
- * @ingroup RTEMSTestSuiteTestsuitesValidationAcfg0
+ * @ingroup TestsuitesValidationAcfg0
*/
/*
- * Copyright (C) 2021 embedded brains GmbH (http://www.embedded-brains.de)
+ * Copyright (C) 2021 embedded brains GmbH & Co. KG
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
@@ -58,10 +58,9 @@
#include <rtems/test.h>
/**
- * @defgroup RTEMSTestSuiteTestsuitesValidationAcfg0 \
- * spec:/testsuites/validation-acfg-0
+ * @defgroup TestsuitesValidationAcfg0 spec:/testsuites/validation-acfg-0
*
- * @ingroup RTEMSTestSuites
+ * @ingroup RTEMSTestSuitesValidation
*
* @brief This validation test suite is used to validate the default value of
* application configuration options taking the optional BSP provided
@@ -70,7 +69,9 @@
* @{
*/
-const char rtems_test_name[] = "ValidationAcfg0";
+const char rtems_test_name[] = "TestsuitesValidationAcfg0";
+
+#define CONFIGURE_IDLE_TASK_STORAGE_SIZE RTEMS_MINIMUM_STACK_SIZE
#define CONFIGURE_IDLE_TASK_INITIALIZES_APPLICATION
diff --git a/testsuites/validation/ts-validation-acfg-1.c b/testsuites/validation/ts-validation-acfg-1.c
index 863a672b23..d1b44cf1ec 100644
--- a/testsuites/validation/ts-validation-acfg-1.c
+++ b/testsuites/validation/ts-validation-acfg-1.c
@@ -3,11 +3,11 @@
/**
* @file
*
- * @ingroup RTEMSTestSuiteTestsuitesValidationAcfg1
+ * @ingroup TestsuitesValidationAcfg1
*/
/*
- * Copyright (C) 2021 embedded brains GmbH (http://www.embedded-brains.de)
+ * Copyright (C) 2021 embedded brains GmbH & Co. KG
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
@@ -59,10 +59,9 @@
#include <rtems/test.h>
/**
- * @defgroup RTEMSTestSuiteTestsuitesValidationAcfg1 \
- * spec:/testsuites/validation-acfg-1
+ * @defgroup TestsuitesValidationAcfg1 spec:/testsuites/validation-acfg-1
*
- * @ingroup RTEMSTestSuites
+ * @ingroup RTEMSTestSuitesValidation
*
* @brief This validation test suite is used to validate the default value of
* application configuration options where all optional BSP provided settings
@@ -71,7 +70,7 @@
* @{
*/
-const char rtems_test_name[] = "ValidationAcfg1";
+const char rtems_test_name[] = "TestsuitesValidationAcfg1";
static void FatalExtension(
rtems_fatal_source source,
@@ -94,6 +93,8 @@ static void Init( rtems_task_argument arg )
#define CONFIGURE_DISABLE_BSP_SETTINGS
+#define CONFIGURE_IDLE_TASK_STORAGE_SIZE RTEMS_MINIMUM_STACK_SIZE
+
#define CONFIGURE_MAXIMUM_TASKS 1
#define CONFIGURE_RTEMS_INIT_TASKS_TABLE
diff --git a/testsuites/validation/ts-validation-cache.c b/testsuites/validation/ts-validation-cache.c
index cbc6a8ddb9..3522c02db7 100644
--- a/testsuites/validation/ts-validation-cache.c
+++ b/testsuites/validation/ts-validation-cache.c
@@ -3,11 +3,11 @@
/**
* @file
*
- * @ingroup RTEMSTestSuiteTestsuitesValidationCache
+ * @ingroup TestsuitesValidationCache
*/
/*
- * Copyright (C) 2021 embedded brains GmbH (http://www.embedded-brains.de)
+ * Copyright (C) 2021 embedded brains GmbH & Co. KG
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
@@ -55,10 +55,9 @@
#include <rtems/test.h>
/**
- * @defgroup RTEMSTestSuiteTestsuitesValidationCache \
- * spec:/testsuites/validation-cache
+ * @defgroup TestsuitesValidationCache spec:/testsuites/validation-cache
*
- * @ingroup RTEMSTestSuites
+ * @ingroup RTEMSTestSuitesValidation
*
* @brief This validation test suite provides enough resources to run tests for
* the directives of the @ref RTEMSAPIClassicCache.
@@ -69,7 +68,7 @@
* @{
*/
-const char rtems_test_name[] = "ValidationCache";
+const char rtems_test_name[] = "TestsuitesValidationCache";
#define CONFIGURE_MAXIMUM_PROCESSORS 4
diff --git a/testsuites/validation/ts-validation-intr.c b/testsuites/validation/ts-validation-intr.c
index 1a79608f78..74f849441a 100644
--- a/testsuites/validation/ts-validation-intr.c
+++ b/testsuites/validation/ts-validation-intr.c
@@ -3,11 +3,11 @@
/**
* @file
*
- * @ingroup RTEMSTestSuiteTestsuitesValidationIntr
+ * @ingroup TestsuitesValidationIntr
*/
/*
- * Copyright (C) 2021 embedded brains GmbH (http://www.embedded-brains.de)
+ * Copyright (C) 2021 embedded brains GmbH & Co. KG
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
@@ -55,10 +55,9 @@
#include <rtems/test.h>
/**
- * @defgroup RTEMSTestSuiteTestsuitesValidationIntr \
- * spec:/testsuites/validation-intr
+ * @defgroup TestsuitesValidationIntr spec:/testsuites/validation-intr
*
- * @ingroup RTEMSTestSuites
+ * @ingroup RTEMSTestSuitesValidation
*
* @brief This validation test suite provides enough resources to run tests for
* the interrupt controller related directives of the @ref
@@ -70,7 +69,7 @@
* @{
*/
-const char rtems_test_name[] = "ValidationIntr";
+const char rtems_test_name[] = "TestsuitesValidationIntr";
#define CONFIGURE_MAXIMUM_PROCESSORS 5
diff --git a/testsuites/validation/ts-validation-io-kernel.c b/testsuites/validation/ts-validation-io-kernel.c
index 83234ecfff..35779f6060 100644
--- a/testsuites/validation/ts-validation-io-kernel.c
+++ b/testsuites/validation/ts-validation-io-kernel.c
@@ -3,11 +3,11 @@
/**
* @file
*
- * @ingroup RTEMSTestSuiteTestsuitesValidationIoKernel
+ * @ingroup TestsuitesValidationIoKernel
*/
/*
- * Copyright (C) 2021 embedded brains GmbH (http://www.embedded-brains.de)
+ * Copyright (C) 2021 embedded brains GmbH & Co. KG
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
@@ -62,10 +62,9 @@
#include <rtems/test.h>
/**
- * @defgroup RTEMSTestSuiteTestsuitesValidationIoKernel \
- * spec:/testsuites/validation-io-kernel
+ * @defgroup TestsuitesValidationIoKernel spec:/testsuites/validation-io-kernel
*
- * @ingroup RTEMSTestSuites
+ * @ingroup RTEMSTestSuitesValidation
*
* @brief This validation test suite contains test cases which test the kernel
* character input/output device provided by the BSP before the system
@@ -74,7 +73,7 @@
* @{
*/
-const char rtems_test_name[] = "ValidationIoKernel";
+const char rtems_test_name[] = "TestsuitesValidationIoKernel";
static char buffer[ 512 ];
@@ -138,6 +137,8 @@ static void *IdleBody( uintptr_t ignored )
#define CONFIGURE_SCHEDULER_TABLE_ENTRIES { }
+#define CONFIGURE_IDLE_TASK_STORAGE_SIZE RTEMS_MINIMUM_STACK_SIZE
+
#define CONFIGURE_IDLE_TASK_INITIALIZES_APPLICATION
#define CONFIGURE_IDLE_TASK_BODY IdleBody
diff --git a/testsuites/validation/ts-validation-no-clock-0.c b/testsuites/validation/ts-validation-no-clock-0.c
index 5ff630b6c3..1fa610a3b4 100644
--- a/testsuites/validation/ts-validation-no-clock-0.c
+++ b/testsuites/validation/ts-validation-no-clock-0.c
@@ -3,11 +3,11 @@
/**
* @file
*
- * @ingroup RTEMSTestSuiteTestsuitesValidationNoClock0
+ * @ingroup TestsuitesValidationNoClock0
*/
/*
- * Copyright (C) 2021 embedded brains GmbH (http://www.embedded-brains.de)
+ * Copyright (C) 2021 embedded brains GmbH & Co. KG
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
@@ -55,10 +55,10 @@
#include <rtems/test.h>
/**
- * @defgroup RTEMSTestSuiteTestsuitesValidationNoClock0 \
+ * @defgroup TestsuitesValidationNoClock0 \
* spec:/testsuites/validation-no-clock-0
*
- * @ingroup RTEMSTestSuites
+ * @ingroup RTEMSTestSuitesValidation
*
* @brief This general purpose validation test suite provides enough resources
* to run basic tests without a Clock Driver for all specified managers and
@@ -70,7 +70,7 @@
* @{
*/
-const char rtems_test_name[] = "ValidationNoClock0";
+const char rtems_test_name[] = "TestsuitesValidationNoClock0";
#define CONFIGURE_MAXIMUM_PROCESSORS 5
diff --git a/testsuites/validation/ts-validation-non-smp.c b/testsuites/validation/ts-validation-non-smp.c
index 163223f18b..b7460222b5 100644
--- a/testsuites/validation/ts-validation-non-smp.c
+++ b/testsuites/validation/ts-validation-non-smp.c
@@ -3,11 +3,11 @@
/**
* @file
*
- * @ingroup RTEMSTestSuiteTestsuitesValidationNonSmp
+ * @ingroup TestsuitesValidationNonSmp
*/
/*
- * Copyright (C) 2021 embedded brains GmbH (http://www.embedded-brains.de)
+ * Copyright (C) 2021 embedded brains GmbH & Co. KG
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
@@ -55,10 +55,9 @@
#include <rtems/test.h>
/**
- * @defgroup RTEMSTestSuiteTestsuitesValidationNonSmp \
- * spec:/testsuites/validation-non-smp
+ * @defgroup TestsuitesValidationNonSmp spec:/testsuites/validation-non-smp
*
- * @ingroup RTEMSTestSuites
+ * @ingroup RTEMSTestSuitesValidation
*
* @brief This test suite for non-SMP test cases provides enough resources to
* run basic tests for all specified managers and functions.
@@ -66,7 +65,7 @@
* @{
*/
-const char rtems_test_name[] = "ValidationNonSMP";
+const char rtems_test_name[] = "TestsuitesValidationNonSmp";
#define CONFIGURE_MAXIMUM_PROCESSORS 1
diff --git a/testsuites/validation/ts-validation-one-cpu-0.c b/testsuites/validation/ts-validation-one-cpu-0.c
index d281b59d01..6eefe21b15 100644
--- a/testsuites/validation/ts-validation-one-cpu-0.c
+++ b/testsuites/validation/ts-validation-one-cpu-0.c
@@ -3,11 +3,11 @@
/**
* @file
*
- * @ingroup RTEMSTestSuiteTestsuitesValidationOneCpu0
+ * @ingroup TestsuitesValidationOneCpu0
*/
/*
- * Copyright (C) 2021 embedded brains GmbH (http://www.embedded-brains.de)
+ * Copyright (C) 2021 embedded brains GmbH & Co. KG
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
@@ -55,10 +55,9 @@
#include <rtems/test.h>
/**
- * @defgroup RTEMSTestSuiteTestsuitesValidationOneCpu0 \
- * spec:/testsuites/validation-one-cpu-0
+ * @defgroup TestsuitesValidationOneCpu0 spec:/testsuites/validation-one-cpu-0
*
- * @ingroup RTEMSTestSuites
+ * @ingroup RTEMSTestSuitesValidation
*
* @brief This general purpose validation test suite provides enough resources
* to run basic tests with exactly one processor and without a Clock Driver.
@@ -69,7 +68,7 @@
* @{
*/
-const char rtems_test_name[] = "ValidationOneCpu0";
+const char rtems_test_name[] = "TestsuitesValidationOneCpu0";
#define CONFIGURE_APPLICATION_DOES_NOT_NEED_CLOCK_DRIVER
diff --git a/testsuites/validation/ts-validation-one-cpu-1.c b/testsuites/validation/ts-validation-one-cpu-1.c
index e1be3ddd02..29288686b1 100644
--- a/testsuites/validation/ts-validation-one-cpu-1.c
+++ b/testsuites/validation/ts-validation-one-cpu-1.c
@@ -3,11 +3,11 @@
/**
* @file
*
- * @ingroup RTEMSTestSuiteTestsuitesValidationOneCpu1
+ * @ingroup TestsuitesValidationOneCpu1
*/
/*
- * Copyright (C) 2021 embedded brains GmbH (http://www.embedded-brains.de)
+ * Copyright (C) 2021 embedded brains GmbH & Co. KG
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
@@ -52,13 +52,14 @@
#include "config.h"
#endif
+#include "ts-config.h"
+
#include <rtems/test.h>
/**
- * @defgroup RTEMSTestSuiteTestsuitesValidationOneCpu1 \
- * spec:/testsuites/validation-one-cpu-1
+ * @defgroup TestsuitesValidationOneCpu1 spec:/testsuites/validation-one-cpu-1
*
- * @ingroup RTEMSTestSuites
+ * @ingroup RTEMSTestSuitesValidation
*
* @brief This general purpose validation test suite provides enough resources
* to run basic tests with exactly one processor and without a Clock Driver.
@@ -69,12 +70,15 @@
* @{
*/
-const char rtems_test_name[] = "ValidationOneCpu1";
+const char rtems_test_name[] = "TestsuitesValidationOneCpu1";
#define CONFIGURE_APPLICATION_DOES_NOT_NEED_CLOCK_DRIVER
#define CONFIGURE_MAXIMUM_PROCESSORS 1
+#define CONFIGURE_SCHEDULER_TABLE_ENTRIES \
+ RTEMS_SCHEDULER_TABLE_PRIORITY( a, TEST_SCHEDULER_A_NAME )
+
#include "ts-default.h"
/** @} */
diff --git a/testsuites/validation/ts-validation-smp-one-cpu-0.c b/testsuites/validation/ts-validation-smp-one-cpu-0.c
index 88c2370d5c..c5be91fb9e 100644
--- a/testsuites/validation/ts-validation-smp-one-cpu-0.c
+++ b/testsuites/validation/ts-validation-smp-one-cpu-0.c
@@ -3,11 +3,11 @@
/**
* @file
*
- * @ingroup RTEMSTestSuiteTestsuitesValidationSmpOneCpu0
+ * @ingroup TestsuitesValidationSmpOneCpu0
*/
/*
- * Copyright (C) 2021 embedded brains GmbH (http://www.embedded-brains.de)
+ * Copyright (C) 2021 embedded brains GmbH & Co. KG
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
@@ -55,10 +55,10 @@
#include <rtems/test.h>
/**
- * @defgroup RTEMSTestSuiteTestsuitesValidationSmpOneCpu0 \
+ * @defgroup TestsuitesValidationSmpOneCpu0 \
* spec:/testsuites/validation-smp-one-cpu-0
*
- * @ingroup RTEMSTestSuites
+ * @ingroup RTEMSTestSuitesValidation
*
* @brief This general purpose validation test suite provides enough resources
* to run basic tests for all specified managers and functions in a
@@ -67,7 +67,7 @@
* @{
*/
-const char rtems_test_name[] = "ValidationSmpOneCpu0";
+const char rtems_test_name[] = "TestsuitesValidationSmpOneCpu0";
#define CONFIGURE_MAXIMUM_PROCESSORS 1
diff --git a/testsuites/validation/ts-validation-smp-only-0.c b/testsuites/validation/ts-validation-smp-only-0.c
index 9907365cd9..30b1f705ed 100644
--- a/testsuites/validation/ts-validation-smp-only-0.c
+++ b/testsuites/validation/ts-validation-smp-only-0.c
@@ -3,11 +3,11 @@
/**
* @file
*
- * @ingroup RTEMSTestSuiteTestsuitesValidationSmpOnly0
+ * @ingroup TestsuitesValidationSmpOnly0
*/
/*
- * Copyright (C) 2021 embedded brains GmbH (http://www.embedded-brains.de)
+ * Copyright (C) 2021 embedded brains GmbH & Co. KG
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
@@ -55,10 +55,10 @@
#include <rtems/test.h>
/**
- * @defgroup RTEMSTestSuiteTestsuitesValidationSmpOnly0 \
+ * @defgroup TestsuitesValidationSmpOnly0 \
* spec:/testsuites/validation-smp-only-0
*
- * @ingroup RTEMSTestSuites
+ * @ingroup RTEMSTestSuitesValidation
*
* @brief This test suite for SMP-only test cases provides enough resources to
* run basic tests for all specified managers and functions.
@@ -69,7 +69,7 @@
* @{
*/
-const char rtems_test_name[] = "ValidationSMPOnly0";
+const char rtems_test_name[] = "TestsuitesValidationSmpOnly0";
#define CONFIGURE_MAXIMUM_PROCESSORS 5
diff --git a/testsuites/validation/ts-validation-smp-only-2.c b/testsuites/validation/ts-validation-smp-only-2.c
index 74cf5e1db8..62f0cd95d6 100644
--- a/testsuites/validation/ts-validation-smp-only-2.c
+++ b/testsuites/validation/ts-validation-smp-only-2.c
@@ -3,11 +3,11 @@
/**
* @file
*
- * @ingroup RTEMSTestSuiteTestsuitesValidationSmpOnly2
+ * @ingroup TestsuitesValidationSmpOnly2
*/
/*
- * Copyright (C) 2021 embedded brains GmbH (http://www.embedded-brains.de)
+ * Copyright (C) 2021 embedded brains GmbH & Co. KG
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
@@ -57,10 +57,10 @@
#include <rtems/test.h>
/**
- * @defgroup RTEMSTestSuiteTestsuitesValidationSmpOnly2 \
+ * @defgroup TestsuitesValidationSmpOnly2 \
* spec:/testsuites/validation-smp-only-2
*
- * @ingroup RTEMSTestSuites
+ * @ingroup RTEMSTestSuitesValidation
*
* @brief This SMP-only test suite validates the clustered scheduler
* configuration through an application configuration with a processor
@@ -70,7 +70,7 @@
* @{
*/
-const char rtems_test_name[] = "ValidationSMPOnly2";
+const char rtems_test_name[] = "TestsuitesValidationSmpOnly2";
bool __wrap__CPU_SMP_Start_processor( uint32_t cpu_index );
diff --git a/testsuites/validation/ts-validation-timecounter-0.c b/testsuites/validation/ts-validation-timecounter-0.c
index 9e4abeeab0..7a042c75ae 100644
--- a/testsuites/validation/ts-validation-timecounter-0.c
+++ b/testsuites/validation/ts-validation-timecounter-0.c
@@ -3,11 +3,11 @@
/**
* @file
*
- * @ingroup RTEMSTestSuiteTestsuitesValidationTimecounter0
+ * @ingroup TestsuitesValidationTimecounter0
*/
/*
- * Copyright (C) 2021 embedded brains GmbH (http://www.embedded-brains.de)
+ * Copyright (C) 2021 embedded brains GmbH & Co. KG
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
@@ -55,10 +55,10 @@
#include <rtems/test.h>
/**
- * @defgroup RTEMSTestSuiteTestsuitesValidationTimecounter0 \
+ * @defgroup TestsuitesValidationTimecounter0 \
* spec:/testsuites/validation-timecounter-0
*
- * @ingroup RTEMSTestSuites
+ * @ingroup RTEMSTestSuitesValidation
*
* @brief This validation test suite is intended test cases related to the
* installation of timecouters. The Clock Driver is disabled.
@@ -66,7 +66,7 @@
* @{
*/
-const char rtems_test_name[] = "ValidationTimecounter0";
+const char rtems_test_name[] = "TestsuitesValidationTimecounter0";
#define CONFIGURE_MAXIMUM_PROCESSORS 1
diff --git a/testsuites/validation/ts-validation-timecounter-1.c b/testsuites/validation/ts-validation-timecounter-1.c
index ec0ff027ee..918d6d093c 100644
--- a/testsuites/validation/ts-validation-timecounter-1.c
+++ b/testsuites/validation/ts-validation-timecounter-1.c
@@ -3,11 +3,11 @@
/**
* @file
*
- * @ingroup RTEMSTestSuiteTestsuitesValidationTimecounter1
+ * @ingroup TestsuitesValidationTimecounter1
*/
/*
- * Copyright (C) 2021 embedded brains GmbH (http://www.embedded-brains.de)
+ * Copyright (C) 2021 embedded brains GmbH & Co. KG
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
@@ -55,10 +55,10 @@
#include <rtems/test.h>
/**
- * @defgroup RTEMSTestSuiteTestsuitesValidationTimecounter1 \
+ * @defgroup TestsuitesValidationTimecounter1 \
* spec:/testsuites/validation-timecounter-1
*
- * @ingroup RTEMSTestSuites
+ * @ingroup RTEMSTestSuitesValidation
*
* @brief This validation test suite is intended test cases related to the use
* of timecouters. The Clock Driver is enabled.
@@ -66,7 +66,7 @@
* @{
*/
-const char rtems_test_name[] = "ValidationTimecounter1";
+const char rtems_test_name[] = "TestsuitesValidationTimecounter1";
#define CONFIGURE_MAXIMUM_PROCESSORS 4
diff --git a/testsuites/validation/ts-validation-timecounter-smp-0.c b/testsuites/validation/ts-validation-timecounter-smp-0.c
index 6ae0311b59..849a64d94b 100644
--- a/testsuites/validation/ts-validation-timecounter-smp-0.c
+++ b/testsuites/validation/ts-validation-timecounter-smp-0.c
@@ -3,11 +3,11 @@
/**
* @file
*
- * @ingroup RTEMSTestSuiteTestsuitesValidationTimecounterSmp0
+ * @ingroup TestsuitesValidationTimecounterSmp0
*/
/*
- * Copyright (C) 2021 embedded brains GmbH (http://www.embedded-brains.de)
+ * Copyright (C) 2021 embedded brains GmbH & Co. KG
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
@@ -55,10 +55,10 @@
#include <rtems/test.h>
/**
- * @defgroup RTEMSTestSuiteTestsuitesValidationTimecounterSmp0 \
+ * @defgroup TestsuitesValidationTimecounterSmp0 \
* spec:/testsuites/validation-timecounter-smp-0
*
- * @ingroup RTEMSTestSuites
+ * @ingroup RTEMSTestSuitesValidation
*
* @brief This validation test suite is intended test cases related to the use
* of timecouters. The Clock Driver is disabled.
@@ -66,7 +66,7 @@
* @{
*/
-const char rtems_test_name[] = "ValidationTimecounterSmp0";
+const char rtems_test_name[] = "TestsuitesValidationTimecounterSmp0";
#define CONFIGURE_MAXIMUM_PROCESSORS 4
diff --git a/testsuites/validation/ts-validation-tls-0.c b/testsuites/validation/ts-validation-tls-0.c
index 09e4d2fd2b..fe32bf35bd 100644
--- a/testsuites/validation/ts-validation-tls-0.c
+++ b/testsuites/validation/ts-validation-tls-0.c
@@ -3,11 +3,11 @@
/**
* @file
*
- * @ingroup RTEMSTestSuiteTestsuitesValidationTls0
+ * @ingroup TestsuitesValidationTls0
*/
/*
- * Copyright (C) 2021 embedded brains GmbH (http://www.embedded-brains.de)
+ * Copyright (C) 2021 embedded brains GmbH & Co. KG
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
@@ -55,10 +55,9 @@
#include <rtems/test.h>
/**
- * @defgroup RTEMSTestSuiteTestsuitesValidationTls0 \
- * spec:/testsuites/validation-tls-0
+ * @defgroup TestsuitesValidationTls0 spec:/testsuites/validation-tls-0
*
- * @ingroup RTEMSTestSuites
+ * @ingroup RTEMSTestSuitesValidation
*
* @brief This validation test suite contains test cases related to the
* thread-local storage support.
@@ -66,7 +65,7 @@
* @{
*/
-const char rtems_test_name[] = "ValidationTls0";
+const char rtems_test_name[] = "TestsuitesValidationTls0";
#define MAX_TLS_SIZE 1024
diff --git a/testsuites/validation/ts-validation-tls-1.c b/testsuites/validation/ts-validation-tls-1.c
index b9b4adc31e..00b74008b2 100644
--- a/testsuites/validation/ts-validation-tls-1.c
+++ b/testsuites/validation/ts-validation-tls-1.c
@@ -3,11 +3,11 @@
/**
* @file
*
- * @ingroup RTEMSTestSuiteTestsuitesValidationTls1
+ * @ingroup TestsuitesValidationTls1
*/
/*
- * Copyright (C) 2021 embedded brains GmbH (http://www.embedded-brains.de)
+ * Copyright (C) 2021 embedded brains GmbH & Co. KG
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
@@ -55,10 +55,9 @@
#include <rtems/test.h>
/**
- * @defgroup RTEMSTestSuiteTestsuitesValidationTls1 \
- * spec:/testsuites/validation-tls-1
+ * @defgroup TestsuitesValidationTls1 spec:/testsuites/validation-tls-1
*
- * @ingroup RTEMSTestSuites
+ * @ingroup RTEMSTestSuitesValidation
*
* @brief This validation test suite contains test cases related to the
* thread-local storage support.
@@ -66,7 +65,10 @@
* @{
*/
-const char rtems_test_name[] = "ValidationTls1";
+const char rtems_test_name[] = "TestsuitesValidationTls1";
+
+#define CONFIGURE_IDLE_TASK_STORAGE_SIZE \
+ ( RTEMS_MINIMUM_STACK_SIZE + 4096 )
#include "ts-idle.h"
diff --git a/testsuites/validation/tx-call-within-isr.c b/testsuites/validation/tx-call-within-isr.c
index 226647c0bc..8bbe0e7c29 100644
--- a/testsuites/validation/tx-call-within-isr.c
+++ b/testsuites/validation/tx-call-within-isr.c
@@ -3,14 +3,15 @@
/**
* @file
*
- * @ingroup RTEMSTestSuites
+ * @ingroup RTEMSTestSuitesValidation
*
- * @brief This source file contains the implementation of CallWithinISR(),
+ * @brief This source file contains the implementation of CallWithinISRClear(),
+ * CallWithinISRGetVector(), CallWithinISR(), CallWithinISRRaise(),
* CallWithinISRSubmit(), and CallWithinISRWait().
*/
/*
- * Copyright (C) 2021 embedded brains GmbH (http://www.embedded-brains.de)
+ * Copyright (C) 2021, 2022 embedded brains GmbH & Co. KG
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
@@ -44,6 +45,7 @@
#include <rtems/score/chainimpl.h>
#include <bsp.h>
+#include <bsp/irq-generic.h>
/* Some target architectures need this variable for <tm27.h> */
uint32_t Interrupt_nest;
@@ -64,13 +66,29 @@ static CallWithinISRContext CallWithinISRInstance = {
.pending = CHAIN_INITIALIZER_EMPTY( CallWithinISRInstance.pending )
};
-static void CallWithinISRHandler( rtems_vector_number vector )
+void CallWithinISRRaise( void )
+{
+ Cause_tm27_intr();
+}
+
+void CallWithinISRClear( void )
+{
+ Clear_tm27_intr();
+}
+
+#ifdef TM27_USE_VECTOR_HANDLER
+static rtems_isr CallWithinISRHandler( rtems_vector_number arg )
+#else
+static void CallWithinISRHandler( void *arg )
+#endif
{
CallWithinISRContext *ctx;
- (void) vector;
+ (void) arg;
ctx = &CallWithinISRInstance;
+ CallWithinISRClear();
+
while ( true ) {
rtems_interrupt_lock_context lock_context;
CallWithinISRRequest *request;
@@ -112,7 +130,7 @@ void CallWithinISRSubmit( CallWithinISRRequest *request )
_Chain_Append_unprotected( &ctx->pending, &request->node );
rtems_interrupt_lock_release( &ctx->lock, &lock_context );
- Cause_tm27_intr();
+ CallWithinISRRaise();
}
void CallWithinISRWait( const CallWithinISRRequest *request )
@@ -122,6 +140,82 @@ void CallWithinISRWait( const CallWithinISRRequest *request )
}
}
+#if !defined( TM27_INTERRUPT_VECTOR_DEFAULT )
+static void CallWithinISRIsHandlerInstalled(
+ void *arg,
+ const char *info,
+ rtems_option option,
+ rtems_interrupt_handler handler,
+ void *handler_arg
+)
+{
+ (void) info;
+ (void) option;
+ (void) handler_arg;
+
+ if ( handler == CallWithinISRHandler && handler_arg == NULL ) {
+ *(bool *) arg = true;
+ }
+}
+#endif
+
+rtems_vector_number CallWithinISRGetVector( void )
+{
+#if defined( TM27_INTERRUPT_VECTOR_DEFAULT )
+ return TM27_INTERRUPT_VECTOR_DEFAULT;
+#else
+ rtems_vector_number vector;
+
+ for ( vector = 0; vector < BSP_INTERRUPT_VECTOR_COUNT; ++vector ) {
+ bool installed;
+
+ installed = false;
+ (void) rtems_interrupt_handler_iterate(
+ vector,
+ CallWithinISRIsHandlerInstalled,
+ &installed
+ );
+
+ if ( installed ) {
+ return vector;
+ }
+ }
+
+ return UINT32_MAX;
+#endif
+}
+
+rtems_vector_number GetSoftwareInterruptVector( void )
+{
+#if defined( TM27_INTERRUPT_VECTOR_ALTERNATIVE )
+ return TM27_INTERRUPT_VECTOR_ALTERNATIVE;
+#else
+ return UINT32_MAX;
+#endif
+}
+
+rtems_status_code RaiseSoftwareInterrupt( rtems_vector_number vector )
+{
+#if defined( TM27_INTERRUPT_VECTOR_ALTERNATIVE )
+ if ( vector == TM27_INTERRUPT_VECTOR_ALTERNATIVE ) {
+ return _TM27_Raise_alternative();
+ }
+#endif
+
+ return rtems_interrupt_raise( vector );
+}
+
+rtems_status_code ClearSoftwareInterrupt( rtems_vector_number vector )
+{
+#if defined( TM27_INTERRUPT_VECTOR_ALTERNATIVE )
+ if ( vector == TM27_INTERRUPT_VECTOR_ALTERNATIVE ) {
+ return _TM27_Clear_alternative();
+ }
+#endif
+
+ return rtems_interrupt_clear( vector );
+}
+
static void CallWithinISRInitialize( void )
{
Install_tm27_vector( CallWithinISRHandler );
diff --git a/testsuites/validation/tx-default-task-config.c b/testsuites/validation/tx-default-task-config.c
index 59a0fd0ed3..0facc78298 100644
--- a/testsuites/validation/tx-default-task-config.c
+++ b/testsuites/validation/tx-default-task-config.c
@@ -3,13 +3,13 @@
/**
* @file
*
- * @ingroup RTEMSTestSuites
+ * @ingroup RTEMSTestSuitesValidation
*
* @brief This source file contains the definition of ::DefaultTaskConfig.
*/
/*
- * Copyright (C) 2022 embedded brains GmbH (http://www.embedded-brains.de)
+ * Copyright (C) 2022 embedded brains GmbH & Co. KG
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
diff --git a/testsuites/validation/tx-interrupt.c b/testsuites/validation/tx-interrupt.c
index 16f1e18c47..c5ea4142c2 100644
--- a/testsuites/validation/tx-interrupt.c
+++ b/testsuites/validation/tx-interrupt.c
@@ -3,14 +3,14 @@
/**
* @file
*
- * @ingroup RTEMSTestSuites
+ * @ingroup RTEMSTestSuitesValidation
*
* @brief This source file contains the implementation of
* HasInterruptVectorEntriesInstalled().
*/
/*
- * Copyright (C) 2021 embedded brains GmbH (http://www.embedded-brains.de)
+ * Copyright (C) 2021 embedded brains GmbH & Co. KG
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
@@ -139,6 +139,10 @@ rtems_vector_number GetTestableInterruptVector(
}
}
+ if ( vector == BSP_INTERRUPT_VECTOR_COUNT ) {
+ vector = GetSoftwareInterruptVector();
+ }
+
return vector;
}
diff --git a/testsuites/validation/tx-io-relax.c b/testsuites/validation/tx-io-relax.c
index 1930c66b19..30cc097b3a 100644
--- a/testsuites/validation/tx-io-relax.c
+++ b/testsuites/validation/tx-io-relax.c
@@ -3,13 +3,13 @@
/**
* @file
*
- * @ingroup RTEMSTestSuites
+ * @ingroup RTEMSTestSuitesValidation
*
* @brief This source file contains the implementation of SetIORelaxHandler().
*/
/*
- * Copyright (C) 2021 embedded brains GmbH (http://www.embedded-brains.de)
+ * Copyright (C) 2021 embedded brains GmbH & Co. KG
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
diff --git a/testsuites/validation/tx-memory-alloc.c b/testsuites/validation/tx-memory-alloc.c
index 82b79bc558..8959dbbdc5 100644
--- a/testsuites/validation/tx-memory-alloc.c
+++ b/testsuites/validation/tx-memory-alloc.c
@@ -3,14 +3,14 @@
/**
* @file
*
- * @ingroup RTEMSTestSuites
+ * @ingroup RTEMSTestSuitesValidation
*
* @brief This source file contains the implementation of
* MemoryAllocationFailWhen() and __wrap_rtems_malloc().
*/
/*
- * Copyright (C) 2021 embedded brains GmbH (http://www.embedded-brains.de)
+ * Copyright (C) 2021 embedded brains GmbH & Co. KG
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
diff --git a/testsuites/validation/tx-preemption-intervention.c b/testsuites/validation/tx-preemption-intervention.c
index 612190567e..f66ab839e5 100644
--- a/testsuites/validation/tx-preemption-intervention.c
+++ b/testsuites/validation/tx-preemption-intervention.c
@@ -3,14 +3,14 @@
/**
* @file
*
- * @ingroup RTEMSTestSuites
+ * @ingroup RTEMSTestSuitesValidation
*
* @brief This source file contains the implementation of
* SetPreemptionIntervention().
*/
/*
- * Copyright (C) 2021 embedded brains GmbH (http://www.embedded-brains.de)
+ * Copyright (C) 2021 embedded brains GmbH & Co. KG
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
diff --git a/testsuites/validation/tx-support.c b/testsuites/validation/tx-support.c
index f576373eb1..64ebe260f6 100644
--- a/testsuites/validation/tx-support.c
+++ b/testsuites/validation/tx-support.c
@@ -3,14 +3,14 @@
/**
* @file
*
- * @ingroup RTEMSTestSuites
+ * @ingroup RTEMSTestSuitesValidation
*
* @brief This source file contains the implementation of support functions for
* the validation test cases.
*/
/*
- * Copyright (C) 2021 embedded brains GmbH (http://www.embedded-brains.de)
+ * Copyright (C) 2021 embedded brains GmbH & Co. KG
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
diff --git a/testsuites/validation/tx-support.h b/testsuites/validation/tx-support.h
index 20f74faa2d..378bc4c466 100644
--- a/testsuites/validation/tx-support.h
+++ b/testsuites/validation/tx-support.h
@@ -3,14 +3,14 @@
/**
* @file
*
- * @ingroup RTEMSTestSuites
+ * @ingroup RTEMSTestSuitesValidation
*
* @brief This header file provides the support functions for the validation
* test cases.
*/
/*
- * Copyright (C) 2021 embedded brains GmbH (http://www.embedded-brains.de)
+ * Copyright (C) 2021 embedded brains GmbH & Co. KG
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
@@ -47,7 +47,7 @@ extern "C" {
#endif
/**
- * @addtogroup RTEMSTestSuites
+ * @addtogroup RTEMSTestSuitesValidation
*
* @{
*/
@@ -390,6 +390,14 @@ void CallWithinISRSubmit( CallWithinISRRequest *request );
void CallWithinISRWait( const CallWithinISRRequest *request );
+void CallWithinISRRaise( void );
+
+void CallWithinISRClear( void );
+
+rtems_vector_number CallWithinISRGetVector( void );
+
+rtems_vector_number GetSoftwareInterruptVector( void );
+
typedef struct {
Thread_queue_Operations tq_ops;
const Thread_queue_Operations *wrapped_ops;
@@ -431,6 +439,10 @@ rtems_vector_number GetTestableInterruptVector(
const rtems_interrupt_attributes *required
);
+rtems_status_code RaiseSoftwareInterrupt( rtems_vector_number vector );
+
+rtems_status_code ClearSoftwareInterrupt( rtems_vector_number vector );
+
bool HasInterruptVectorEntriesInstalled( rtems_vector_number vector );
/**
diff --git a/testsuites/validation/tx-thread-queue.c b/testsuites/validation/tx-thread-queue.c
index 1b0e8665c7..ee9d2cf96d 100644
--- a/testsuites/validation/tx-thread-queue.c
+++ b/testsuites/validation/tx-thread-queue.c
@@ -3,14 +3,14 @@
/**
* @file
*
- * @ingroup RTEMSTestSuites
+ * @ingroup RTEMSTestSuitesValidation
*
* @brief This source file contains the implementation of the thread queue test
* support.
*/
/*
- * Copyright (C) 2021 embedded brains GmbH (http://www.embedded-brains.de)
+ * Copyright (C) 2021 embedded brains GmbH & Co. KG
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
@@ -333,8 +333,12 @@ static void Worker( rtems_task_argument arg, TQWorkerKind worker )
_Thread_Dispatch_direct( cpu_self );
}
- if ( ( events & TQ_EVENT_FLUSH ) != 0 ) {
- TQFlush( ctx );
+ if ( ( events & TQ_EVENT_FLUSH_ALL ) != 0 ) {
+ TQFlush( ctx, true );
+ }
+
+ if ( ( events & TQ_EVENT_FLUSH_PARTIAL ) != 0 ) {
+ TQFlush( ctx, false );
}
if ( ( events & TQ_EVENT_ENQUEUE_DONE ) != 0 ) {
@@ -647,9 +651,9 @@ Status_Control TQSurrender( TQContext *ctx )
return ( *ctx->surrender )( ctx );
}
-void TQFlush( TQContext *ctx )
+void TQFlush( TQContext *ctx, bool flush_all )
{
- ( *ctx->flush )( ctx );
+ ctx->flush_count = ( *ctx->flush )( ctx, ctx->how_many, flush_all );
}
rtems_tcb *TQGetOwner( TQContext *ctx )
diff --git a/testsuites/validation/tx-thread-queue.h b/testsuites/validation/tx-thread-queue.h
index d9a1a4db8d..f95fcb790b 100644
--- a/testsuites/validation/tx-thread-queue.h
+++ b/testsuites/validation/tx-thread-queue.h
@@ -3,14 +3,14 @@
/**
* @file
*
- * @ingroup RTEMSTestSuites
+ * @ingroup RTEMSTestSuitesValidation
*
* @brief This header file provides the functions to test the
* @ref RTEMSScoreThreadQueue.
*/
/*
- * Copyright (C) 2021 embedded brains GmbH (http://www.embedded-brains.de)
+ * Copyright (C) 2021 embedded brains GmbH & Co. KG
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
@@ -50,7 +50,7 @@ extern "C" {
#endif
/**
- * @addtogroup RTEMSTestSuites
+ * @addtogroup RTEMSTestSuitesValidation
*
* @{
*/
@@ -120,23 +120,24 @@ typedef enum {
TQ_EVENT_MUTEX_B_OBTAIN = RTEMS_EVENT_10,
TQ_EVENT_MUTEX_B_RELEASE = RTEMS_EVENT_11,
TQ_EVENT_BUSY_WAIT = RTEMS_EVENT_12,
- TQ_EVENT_FLUSH = RTEMS_EVENT_13,
- TQ_EVENT_SCHEDULER_RECORD_START = RTEMS_EVENT_14,
- TQ_EVENT_SCHEDULER_RECORD_STOP = RTEMS_EVENT_15,
- TQ_EVENT_TIMEOUT = RTEMS_EVENT_16,
- TQ_EVENT_MUTEX_NO_PROTOCOL_OBTAIN = RTEMS_EVENT_17,
- TQ_EVENT_MUTEX_NO_PROTOCOL_RELEASE = RTEMS_EVENT_18,
- TQ_EVENT_ENQUEUE_FATAL = RTEMS_EVENT_19,
- TQ_EVENT_MUTEX_C_OBTAIN = RTEMS_EVENT_20,
- TQ_EVENT_MUTEX_C_RELEASE = RTEMS_EVENT_21,
- TQ_EVENT_MUTEX_FIFO_OBTAIN = RTEMS_EVENT_22,
- TQ_EVENT_MUTEX_FIFO_RELEASE = RTEMS_EVENT_23,
- TQ_EVENT_ENQUEUE_TIMED = RTEMS_EVENT_24,
- TQ_EVENT_MUTEX_D_OBTAIN = RTEMS_EVENT_25,
- TQ_EVENT_MUTEX_D_RELEASE = RTEMS_EVENT_26,
- TQ_EVENT_PIN = RTEMS_EVENT_27,
- TQ_EVENT_UNPIN = RTEMS_EVENT_28,
- TQ_EVENT_COUNT = RTEMS_EVENT_29
+ TQ_EVENT_FLUSH_ALL = RTEMS_EVENT_13,
+ TQ_EVENT_FLUSH_PARTIAL = RTEMS_EVENT_14,
+ TQ_EVENT_SCHEDULER_RECORD_START = RTEMS_EVENT_15,
+ TQ_EVENT_SCHEDULER_RECORD_STOP = RTEMS_EVENT_16,
+ TQ_EVENT_TIMEOUT = RTEMS_EVENT_17,
+ TQ_EVENT_MUTEX_NO_PROTOCOL_OBTAIN = RTEMS_EVENT_18,
+ TQ_EVENT_MUTEX_NO_PROTOCOL_RELEASE = RTEMS_EVENT_19,
+ TQ_EVENT_ENQUEUE_FATAL = RTEMS_EVENT_20,
+ TQ_EVENT_MUTEX_C_OBTAIN = RTEMS_EVENT_21,
+ TQ_EVENT_MUTEX_C_RELEASE = RTEMS_EVENT_22,
+ TQ_EVENT_MUTEX_FIFO_OBTAIN = RTEMS_EVENT_23,
+ TQ_EVENT_MUTEX_FIFO_RELEASE = RTEMS_EVENT_24,
+ TQ_EVENT_ENQUEUE_TIMED = RTEMS_EVENT_25,
+ TQ_EVENT_MUTEX_D_OBTAIN = RTEMS_EVENT_26,
+ TQ_EVENT_MUTEX_D_RELEASE = RTEMS_EVENT_27,
+ TQ_EVENT_PIN = RTEMS_EVENT_28,
+ TQ_EVENT_UNPIN = RTEMS_EVENT_29,
+ TQ_EVENT_COUNT = RTEMS_EVENT_30
} TQEvent;
typedef enum {
@@ -263,6 +264,12 @@ typedef struct TQContext {
uint32_t how_many;
/**
+ * @brief This this member contains the count of the least recently flushed
+ * threads.
+ */
+ uint32_t flush_count;
+
+ /**
* @brief This this member provides a context to jump back to before the
* enqueue.
*/
@@ -290,8 +297,13 @@ typedef struct TQContext {
/**
* @brief This member provides the thread queue flush handler.
+ *
+ * The second parameter specifies the count of enqueued threads. While the
+ * third parameter is true, all enqueued threads shall be extracted,
+ * otherwise the thread queue shall be partially flushed. The handler shall
+ * return the count of flushed threads.
*/
- void ( *flush )( struct TQContext * );
+ uint32_t ( *flush )( struct TQContext *, uint32_t, bool );
/**
* @brief This member provides the get owner handler.
@@ -390,7 +402,7 @@ void TQEnqueueDone( TQContext *ctx );
Status_Control TQSurrender( TQContext *ctx );
-void TQFlush( TQContext *ctx );
+void TQFlush( TQContext *ctx, bool flush_all );
rtems_tcb *TQGetOwner( TQContext *ctx );
diff --git a/testsuites/validation/tx-timecounter.c b/testsuites/validation/tx-timecounter.c
index c6738914a4..01b55f2578 100644
--- a/testsuites/validation/tx-timecounter.c
+++ b/testsuites/validation/tx-timecounter.c
@@ -3,14 +3,14 @@
/**
* @file
*
- * @ingroup RTEMSTestSuites
+ * @ingroup RTEMSTestSuitesValidation
*
* @brief This source file contains the definition of SetGetTimecountHandler(),
* GetTimecountCounter(), and SetTimecountCounter().
*/
/*
- * Copyright (C) 2021 embedded brains GmbH (http://www.embedded-brains.de)
+ * Copyright (C) 2021 embedded brains GmbH & Co. KG
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
diff --git a/testsuites/validation/tx-timer-server.c b/testsuites/validation/tx-timer-server.c
index 80ba853fb1..29575eb490 100644
--- a/testsuites/validation/tx-timer-server.c
+++ b/testsuites/validation/tx-timer-server.c
@@ -3,13 +3,13 @@
/**
* @file
*
- * @ingroup RTEMSTestSuites
+ * @ingroup RTEMSTestSuitesValidation
*
* @brief This source file contains the definition of DeleteTimerServer().
*/
/*
- * Copyright (C) 2021 embedded brains GmbH (http://www.embedded-brains.de)
+ * Copyright (C) 2021 embedded brains GmbH & Co. KG
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
diff --git a/testsuites/validation/tx-wrap-thread-queue.c b/testsuites/validation/tx-wrap-thread-queue.c
index 93b7b55f37..39d7b38129 100644
--- a/testsuites/validation/tx-wrap-thread-queue.c
+++ b/testsuites/validation/tx-wrap-thread-queue.c
@@ -3,14 +3,14 @@
/**
* @file
*
- * @ingroup RTEMSTestSuites
+ * @ingroup RTEMSTestSuitesValidation
*
* @brief This source file contains the implementation of the thread queue
* wrapper.
*/
/*
- * Copyright (C) 2021 embedded brains GmbH (http://www.embedded-brains.de)
+ * Copyright (C) 2021 embedded brains GmbH & Co. KG
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions