summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--.gitignore12
-rw-r--r--Doxyfile4
-rw-r--r--aclocal/version.m44
-rw-r--r--bsps/arm/atsam/include/bsp/sc16is752.h87
-rw-r--r--bsps/arm/atsam/spi/sc16is752.c27
-rw-r--r--bsps/arm/beagle/i2c/bbb-i2c.c2
-rw-r--r--bsps/arm/beagle/pwm/pwm.c4
-rw-r--r--bsps/arm/csb337/start/linkcmds.kit637_v627
-rw-r--r--bsps/arm/imx/gpio/imx-gpio.c359
-rw-r--r--bsps/arm/imx/headers.am1
-rw-r--r--bsps/arm/imx/include/bsp/imx-gpio.h196
-rw-r--r--bsps/arm/imx/include/bsp/irq.h1
-rw-r--r--bsps/arm/imx/spi/imx-ecspi.c92
-rw-r--r--bsps/arm/imx/start/bspstart.c2
-rw-r--r--bsps/arm/include/bsp/linker-symbols.h18
-rw-r--r--bsps/arm/shared/cp15/arm-cp15-set-ttb-entries.c2
-rw-r--r--bsps/arm/shared/serial/zynq-uart-polled.c2
-rw-r--r--bsps/arm/shared/start/arm-a9mpcore-smp.c5
-rw-r--r--bsps/epiphany/epiphany_sim/README6
-rw-r--r--bsps/epiphany/epiphany_sim/btimer/btimer.c108
-rw-r--r--bsps/epiphany/epiphany_sim/config/epiphany_sim.cfg10
-rw-r--r--bsps/epiphany/epiphany_sim/console/console-io.c104
-rw-r--r--bsps/epiphany/epiphany_sim/headers.am10
-rw-r--r--bsps/epiphany/epiphany_sim/include/bsp.h74
-rw-r--r--bsps/epiphany/epiphany_sim/include/bsp/irq.h49
-rw-r--r--bsps/epiphany/epiphany_sim/include/tm27.h1
-rw-r--r--bsps/epiphany/epiphany_sim/irq/irq.c64
-rw-r--r--bsps/epiphany/epiphany_sim/start/bsp_specs9
-rw-r--r--bsps/epiphany/epiphany_sim/start/linkcmds373
-rw-r--r--bsps/epiphany/epiphany_sim/start/start.S167
-rw-r--r--bsps/epiphany/headers.am5
-rw-r--r--bsps/epiphany/include/bsp/linker-symbols.h79
-rw-r--r--bsps/epiphany/shared/doxygen.h15
-rw-r--r--bsps/i386/include/bsp/smp-imps.h3
-rw-r--r--bsps/i386/pc386/clock/ckinit.c2
-rw-r--r--bsps/i386/pc386/console/conscfg.c7
-rw-r--r--bsps/i386/pc386/console/printk_support.c42
-rw-r--r--bsps/i386/pc386/include/bsp.h7
-rw-r--r--bsps/i386/pc386/include/bsp/tblsizes.h8
-rw-r--r--bsps/i386/pc386/start/bspsmp.c43
-rw-r--r--bsps/i386/pc386/start/getcpuid.c22
-rw-r--r--bsps/i386/pc386/start/ldsegs.S6
-rw-r--r--bsps/i386/pc386/start/smp-imps.c95
-rw-r--r--bsps/i386/pc386/start/start.S4
-rw-r--r--bsps/i386/pc386/start/start16.S254
-rw-r--r--bsps/i386/pc386/start/startAP.S108
-rw-r--r--bsps/i386/shared/irq/irq_asm.S102
-rw-r--r--bsps/include/bsp/fatal.h1
-rw-r--r--bsps/lm32/lm32_evr/headers.am4
-rw-r--r--bsps/lm32/lm32_evr/include/bsp/irq.h1
-rw-r--r--bsps/lm32/milkymist/headers.am4
-rw-r--r--bsps/lm32/milkymist/include/bsp/irq.h1
-rw-r--r--bsps/m68k/mcf52235/README1
-rw-r--r--bsps/m68k/mcf5225x/README1
-rw-r--r--bsps/m68k/mvme147/README5
-rw-r--r--bsps/m68k/mvme147s/README5
-rw-r--r--bsps/mips/malta/include/bsp/pci.h2
-rw-r--r--bsps/mips/shared/irq/i8259.c5
-rw-r--r--bsps/powerpc/gen5200/config/brs5l.cfg10
-rw-r--r--bsps/powerpc/gen5200/config/brs6l.cfg10
-rw-r--r--bsps/powerpc/gen5200/config/dp2.cfg5
-rw-r--r--bsps/powerpc/gen5200/start/linkcmds.brs5l15
-rw-r--r--bsps/powerpc/gen5200/start/linkcmds.brs6l15
-rw-r--r--bsps/powerpc/gen5200/start/linkcmds.dp215
-rw-r--r--bsps/powerpc/gen5200/start/start.S2
-rw-r--r--bsps/powerpc/gen83xx/start/cpuinit.c2
-rw-r--r--bsps/powerpc/include/libcpu/io.h8
-rw-r--r--bsps/powerpc/include/libcpu/mmu.h2
-rw-r--r--bsps/powerpc/include/libcpu/powerpc-utility.h73
-rw-r--r--bsps/powerpc/include/rtems/powerpc/powerpc.h6
-rw-r--r--bsps/powerpc/motorola_powerpc/bootloader/head.S2
-rw-r--r--bsps/powerpc/motorola_powerpc/bootloader/mm.c4
-rw-r--r--bsps/powerpc/mpc55xxevb/config/mpc5566evb_spe-testsuite.tcfg7
-rw-r--r--bsps/powerpc/mpc55xxevb/config/mpc5566evb_spe.cfg1
-rw-r--r--bsps/powerpc/mpc55xxevb/config/mpc55xx.inc5
-rw-r--r--bsps/powerpc/mpc55xxevb/config/mpc55xx_spe.inc3
-rw-r--r--bsps/powerpc/mpc55xxevb/config/mpc5643l_dpu-testsuite.tcfg13
-rw-r--r--bsps/powerpc/mpc55xxevb/config/mpc5643l_dpu.cfg10
-rw-r--r--bsps/powerpc/mpc55xxevb/config/mpc5674f_ecu508_app-testsuite.tcfg5
-rw-r--r--bsps/powerpc/mpc55xxevb/config/mpc5674f_ecu508_app.cfg1
-rw-r--r--bsps/powerpc/mpc55xxevb/config/mpc5674f_ecu508_boot-testsuite.tcfg5
-rw-r--r--bsps/powerpc/mpc55xxevb/config/mpc5674f_ecu508_boot.cfg1
-rw-r--r--bsps/powerpc/mpc55xxevb/config/mpc5674f_rsm6-testsuite.tcfg5
-rw-r--r--bsps/powerpc/mpc55xxevb/config/mpc5674f_rsm6.cfg1
-rw-r--r--bsps/powerpc/mpc55xxevb/config/mpc5674fevb_spe-testsuite.tcfg5
-rw-r--r--bsps/powerpc/mpc55xxevb/config/mpc5674fevb_spe.cfg1
-rw-r--r--bsps/powerpc/mpc55xxevb/config/phycore_mpc5554.cfg2
-rw-r--r--bsps/powerpc/mpc55xxevb/start/linkcmds.mpc5566evb_spe1
-rw-r--r--bsps/powerpc/mpc55xxevb/start/linkcmds.mpc5643l_dpu1
-rw-r--r--bsps/powerpc/mpc55xxevb/start/linkcmds.mpc5674f_ecu50851
-rw-r--r--bsps/powerpc/mpc55xxevb/start/linkcmds.mpc5674f_ecu508_app8
-rw-r--r--bsps/powerpc/mpc55xxevb/start/linkcmds.mpc5674f_ecu508_boot6
-rw-r--r--bsps/powerpc/mpc55xxevb/start/linkcmds.mpc5674f_rsm66
-rw-r--r--bsps/powerpc/mpc55xxevb/start/linkcmds.mpc5674f_rsm6_base28
-rw-r--r--bsps/powerpc/mpc55xxevb/start/linkcmds.mpc5674fevb_spe1
-rw-r--r--bsps/powerpc/mvme5500/start/start.S2
-rw-r--r--bsps/powerpc/psim/start/start.S11
-rw-r--r--bsps/powerpc/qoriq/config/qoriq.inc3
-rw-r--r--bsps/powerpc/qoriq/start/bspsmp.c30
-rw-r--r--bsps/powerpc/qoriq/start/bspstart.c5
-rw-r--r--bsps/powerpc/qoriq/start/mmu.c7
-rw-r--r--bsps/powerpc/shared/clock/clock-ppc-dec.c12
-rw-r--r--bsps/powerpc/shared/exceptions/ppc_exc_initialize.c45
-rw-r--r--bsps/powerpc/shared/mmu/e500-mmu.c31
-rw-r--r--bsps/powerpc/shared/mmu/pte121.c11
-rw-r--r--bsps/powerpc/shared/start/start.S2
-rw-r--r--bsps/powerpc/ss555/start/start.S17
-rw-r--r--bsps/powerpc/t32mppc/config/t32mppc.cfg2
-rw-r--r--bsps/riscv/griscv/start/bspsmp.c21
-rw-r--r--bsps/riscv/riscv/include/dev/serial/htif.h2
-rw-r--r--bsps/riscv/riscv/start/bsp_fatal_halt.c2
-rw-r--r--bsps/riscv/riscv/start/bspstart.c6
-rw-r--r--bsps/riscv/shared/start/start.S2
-rw-r--r--bsps/shared/dev/clock/clockimpl.h19
-rw-r--r--bsps/shared/dev/i2c/spi-memdrv.c21
-rw-r--r--bsps/shared/irq/irq-server.c365
-rw-r--r--bsps/shared/rtems-version.c3
-rw-r--r--bsps/shared/start/bsp-fdt.c8
-rw-r--r--bsps/sparc/leon3/console/printk_support.c9
-rw-r--r--bsps/sparc/leon3/start/bspsmp.c6
-rw-r--r--bsps/sparc/leon3/start/bspstart.c1
-rw-r--r--bsps/sparc/shared/irq/irq-shared.c14
-rw-r--r--c/src/aclocal/check-networking.m46
-rw-r--r--c/src/aclocal/rtems-cpu-subdirs.m41
-rw-r--r--c/src/aclocal/version.m44
-rw-r--r--c/src/lib/libbsp/arm/imx/Makefile.am3
-rw-r--r--c/src/lib/libbsp/epiphany/Makefile.am7
-rw-r--r--c/src/lib/libbsp/epiphany/acinclude.m410
-rw-r--r--c/src/lib/libbsp/epiphany/configure.ac20
-rw-r--r--c/src/lib/libbsp/epiphany/epiphany_sim/Makefile.am66
-rw-r--r--c/src/lib/libbsp/epiphany/epiphany_sim/configure.ac32
-rw-r--r--c/src/lib/libbsp/i386/pc386/Makefile.am8
-rw-r--r--c/src/lib/libbsp/powerpc/gen5200/Makefile.am3
-rw-r--r--c/src/lib/libbsp/powerpc/mpc55xxevb/Makefile.am8
-rw-r--r--cpukit/Makefile.am26
-rw-r--r--cpukit/aclocal/check-networking.m44
-rw-r--r--cpukit/aclocal/version.m44
-rw-r--r--cpukit/configure.ac1
-rw-r--r--cpukit/doxygen.h18
-rw-r--r--cpukit/doxygen/appl-config.h4260
-rw-r--r--cpukit/doxygen/top-level-groups.h50
-rw-r--r--cpukit/headers.am5
-rw-r--r--cpukit/include/adainclude/rtems.ads9
-rw-r--r--cpukit/include/dev/serial/sc16is752.h2
-rw-r--r--cpukit/include/rtems.h217
-rw-r--r--cpukit/include/rtems/confdefs/libio.h24
-rw-r--r--cpukit/include/rtems/confdefs/mpci.h13
-rw-r--r--cpukit/include/rtems/confdefs/threads.h27
-rw-r--r--cpukit/include/rtems/confdefs/wkspace.h10
-rw-r--r--cpukit/include/rtems/config.h17
-rw-r--r--cpukit/include/rtems/dosfs.h7
-rw-r--r--cpukit/include/rtems/extension.h3
-rw-r--r--cpukit/include/rtems/io.h17
-rw-r--r--cpukit/include/rtems/irq-extension.h143
-rw-r--r--cpukit/include/rtems/media.h3
-rw-r--r--cpukit/include/rtems/posix/keyimpl.h2
-rw-r--r--cpukit/include/rtems/printer.h6
-rw-r--r--cpukit/include/rtems/rtems/attr.h2
-rw-r--r--cpukit/include/rtems/rtems/mp.h16
-rw-r--r--cpukit/include/rtems/rtems/object.h59
-rw-r--r--cpukit/include/rtems/rtems/objectimpl.h82
-rw-r--r--cpukit/include/rtems/rtems/ratemon.h2
-rw-r--r--cpukit/include/rtems/rtems/tasks.h252
-rw-r--r--cpukit/include/rtems/rtems/tasksimpl.h11
-rw-r--r--cpukit/include/rtems/rtems/types.h48
-rw-r--r--cpukit/include/rtems/score/basedefs.h61
-rw-r--r--cpukit/include/rtems/score/copyrt.h10
-rw-r--r--cpukit/include/rtems/score/freechain.h109
-rw-r--r--cpukit/include/rtems/score/freechainimpl.h161
-rw-r--r--cpukit/include/rtems/score/interr.h3
-rw-r--r--cpukit/include/rtems/score/objectimpl.h27
-rw-r--r--cpukit/include/rtems/score/objectmp.h8
-rw-r--r--cpukit/include/rtems/score/scheduler.h23
-rw-r--r--cpukit/include/rtems/score/schedulerimpl.h73
-rw-r--r--cpukit/include/rtems/score/stack.h7
-rw-r--r--cpukit/include/rtems/score/stackimpl.h7
-rw-r--r--cpukit/include/rtems/score/thread.h21
-rw-r--r--cpukit/include/rtems/score/threadimpl.h42
-rw-r--r--cpukit/include/rtems/score/userext.h2
-rw-r--r--cpukit/include/rtems/sysinit.h1
-rw-r--r--cpukit/include/rtems/system.h65
-rw-r--r--cpukit/include/rtems/termiostypes.h2
-rw-r--r--cpukit/include/rtems/test-info.h327
-rw-r--r--cpukit/include/rtems/test.h2701
-rw-r--r--cpukit/include/rtems/trace/rtems-trace-buffer-vars.h25
-rw-r--r--cpukit/include/t.h2379
-rw-r--r--cpukit/libblock/src/media.c31
-rw-r--r--cpukit/libcsupport/src/free.c43
-rw-r--r--cpukit/libcsupport/src/libiozeroiops.c46
-rw-r--r--cpukit/libcsupport/src/malloc_deferred.c40
-rw-r--r--cpukit/libcsupport/src/malloc_p.h2
-rw-r--r--cpukit/libcsupport/src/newlibc_exit.c5
-rw-r--r--cpukit/libcsupport/src/termios.c3
-rw-r--r--cpukit/libcsupport/src/termiosinitialize.c2
-rw-r--r--cpukit/libdl/rtl-archive.c4
-rw-r--r--cpukit/libfs/src/dosfs/msdos_init.c5
-rw-r--r--cpukit/libfs/src/imfs/ioman.c21
-rw-r--r--cpukit/libmisc/capture/rtems-trace-buffer-default.c36
-rw-r--r--cpukit/libmisc/capture/rtems-trace-buffer-vars.c29
-rw-r--r--cpukit/libmisc/rtems-fdt/rtems-fdt-shell.c8
-rw-r--r--cpukit/libmisc/shell/main_dd.c17
-rw-r--r--cpukit/libmisc/shell/shell.c26
-rw-r--r--cpukit/libtest/t-test-busy-tick.c121
-rw-r--r--cpukit/libtest/t-test-busy.c58
-rw-r--r--cpukit/libtest/t-test-checks-eno.c10
-rw-r--r--cpukit/libtest/t-test-checks-psx.c10
-rw-r--r--cpukit/libtest/t-test-checks.c194
-rw-r--r--cpukit/libtest/t-test-hash-sha256.c2
-rw-r--r--cpukit/libtest/t-test-interrupt.c486
-rw-r--r--cpukit/libtest/t-test-malloc.c2
-rw-r--r--cpukit/libtest/t-test-rtems-context.c54
-rw-r--r--cpukit/libtest/t-test-rtems-fds.c5
-rw-r--r--cpukit/libtest/t-test-rtems-heap.c6
-rw-r--r--cpukit/libtest/t-test-rtems-measure.c2
-rw-r--r--cpukit/libtest/t-test-rtems-objs.c100
-rw-r--r--cpukit/libtest/t-test-rtems-posix-keys.c116
-rw-r--r--cpukit/libtest/t-test-rtems.c10
-rw-r--r--cpukit/libtest/t-test-rtems.h62
-rw-r--r--cpukit/libtest/t-test-thread-switch.c161
-rw-r--r--cpukit/libtest/t-test-time.c2
-rw-r--r--cpukit/libtest/t-test.c640
-rw-r--r--cpukit/libtest/testbeginend.c2
-rw-r--r--cpukit/libtest/testbusy.c89
-rw-r--r--cpukit/libtest/testextension.c2
-rw-r--r--cpukit/libtest/testparallel.c2
-rw-r--r--cpukit/libtest/testrun.c87
-rw-r--r--cpukit/libtest/testwrappers.c2
-rw-r--r--cpukit/posix/src/pthreadcreate.c4
-rw-r--r--cpukit/posix/src/pthreadgetattrnp.c10
-rw-r--r--cpukit/posix/src/shmunlink.c45
-rw-r--r--cpukit/rtems/src/barrierident.c55
-rw-r--r--cpukit/rtems/src/dpmemident.c51
-rw-r--r--cpukit/rtems/src/msgqcreate.c8
-rw-r--r--cpukit/rtems/src/msgqident.c57
-rw-r--r--cpukit/rtems/src/partcreate.c6
-rw-r--r--cpukit/rtems/src/partident.c47
-rw-r--r--cpukit/rtems/src/ratemonident.c56
-rw-r--r--cpukit/rtems/src/regionident.c57
-rw-r--r--cpukit/rtems/src/rtemsnametoid.c55
-rw-r--r--cpukit/rtems/src/semcreate.c7
-rw-r--r--cpukit/rtems/src/semident.c44
-rw-r--r--cpukit/rtems/src/taskconstruct.c300
-rw-r--r--cpukit/rtems/src/taskcreate.c286
-rw-r--r--cpukit/rtems/src/taskident.c65
-rw-r--r--cpukit/rtems/src/timerident.c56
-rw-r--r--cpukit/sapi/src/extensionident.c52
-rw-r--r--cpukit/sapi/src/getcopyrightnotice.c2
-rw-r--r--cpukit/sapi/src/getversionstring.c5
-rw-r--r--cpukit/sapi/src/interrtext.c5
-rw-r--r--cpukit/score/cpu/arm/armv7m-exception-default.c23
-rw-r--r--cpukit/score/cpu/arm/include/libcpu/arm-cp15.h16
-rw-r--r--cpukit/score/cpu/arm/include/rtems/score/cpu.h2
-rw-r--r--cpukit/score/cpu/bfin/include/rtems/score/cpu.h2
-rw-r--r--cpukit/score/cpu/epiphany/cpu.c87
-rw-r--r--cpukit/score/cpu/epiphany/epiphany-context-initialize.c66
-rw-r--r--cpukit/score/cpu/epiphany/epiphany-context-switch.S215
-rw-r--r--cpukit/score/cpu/epiphany/epiphany-exception-handler.S304
-rw-r--r--cpukit/score/cpu/epiphany/headers.am8
-rw-r--r--cpukit/score/cpu/epiphany/include/rtems/asm.h120
-rw-r--r--cpukit/score/cpu/epiphany/include/rtems/score/cpu.h612
-rw-r--r--cpukit/score/cpu/epiphany/include/rtems/score/cpu_asm.h74
-rw-r--r--cpukit/score/cpu/epiphany/include/rtems/score/cpuatomic.h14
-rw-r--r--cpukit/score/cpu/epiphany/include/rtems/score/cpuimpl.h67
-rw-r--r--cpukit/score/cpu/epiphany/include/rtems/score/epiphany-utility.h180
-rw-r--r--cpukit/score/cpu/epiphany/include/rtems/score/epiphany.h64
-rw-r--r--cpukit/score/cpu/epiphany/setjmp.S69
-rw-r--r--cpukit/score/cpu/i386/cpu_asm.S76
-rw-r--r--cpukit/score/cpu/i386/include/rtems/asm.h26
-rw-r--r--cpukit/score/cpu/i386/include/rtems/score/cpu.h38
-rw-r--r--cpukit/score/cpu/i386/include/rtems/score/cpuimpl.h2
-rw-r--r--cpukit/score/cpu/i386/sse_test.c2
-rw-r--r--cpukit/score/cpu/lm32/include/rtems/score/cpu.h2
-rw-r--r--cpukit/score/cpu/m68k/include/rtems/score/cpu.h2
-rw-r--r--cpukit/score/cpu/mips/include/rtems/score/cpu.h2
-rw-r--r--cpukit/score/cpu/moxie/include/rtems/score/cpu.h2
-rw-r--r--cpukit/score/cpu/nios2/include/rtems/score/cpu.h2
-rw-r--r--cpukit/score/cpu/no_cpu/include/rtems/score/cpu.h8
-rw-r--r--cpukit/score/cpu/or1k/include/rtems/score/cpu.h8
-rw-r--r--cpukit/score/cpu/powerpc/include/rtems/score/cpu.h3
-rw-r--r--cpukit/score/cpu/riscv/include/rtems/score/cpu.h2
-rw-r--r--cpukit/score/cpu/sh/include/rtems/score/cpu.h2
-rw-r--r--cpukit/score/cpu/sparc/include/rtems/asm.h6
-rw-r--r--cpukit/score/cpu/sparc/include/rtems/score/cpu.h2
-rw-r--r--cpukit/score/cpu/sparc64/include/rtems/score/cpu.h2
-rw-r--r--cpukit/score/cpu/v850/include/rtems/score/cpu.h2
-rw-r--r--cpukit/score/cpu/x86_64/include/rtems/score/cpu.h2
-rw-r--r--cpukit/score/src/freechain.c5
-rw-r--r--cpukit/score/src/objectmp.c9
-rw-r--r--cpukit/score/src/objectnametoid.c14
-rw-r--r--cpukit/score/src/stackallocator.c4
-rw-r--r--cpukit/score/src/stackallocatorfree.c35
-rw-r--r--cpukit/score/src/stackallocatorfreenothing.c45
-rw-r--r--cpukit/score/src/stackallocatorinit.c60
-rw-r--r--cpukit/score/src/thread.c23
-rw-r--r--cpukit/score/src/threadallocateunlimited.c1
-rw-r--r--cpukit/score/src/threadhandler.c8
-rw-r--r--cpukit/score/src/threadinitialize.c44
-rw-r--r--cpukit/score/src/threadqenqueue.c2
-rw-r--r--cpukit/score/src/threadrestart.c21
-rw-r--r--cpukit/score/src/tlsallocsize.c16
-rw-r--r--gccdeps.py238
-rw-r--r--long_gcc.py45
-rw-r--r--make/README465
-rw-r--r--make/compilers/gcc-target-default.cfg189
-rw-r--r--make/directory.cfg57
-rw-r--r--make/host.cfg48
-rw-r--r--make/lib.cfg15
-rwxr-xr-xrtems-bsps2
-rw-r--r--spec/build/bsps/arm/altera-cyclone-v/abi.yml21
-rw-r--r--spec/build/bsps/arm/altera-cyclone-v/bspalteracyclonev.yml142
-rw-r--r--spec/build/bsps/arm/altera-cyclone-v/objsmp.yml16
-rw-r--r--spec/build/bsps/arm/altera-cyclone-v/opta9periphclk.yml15
-rw-r--r--spec/build/bsps/arm/altera-cyclone-v/optcachedata.yml15
-rw-r--r--spec/build/bsps/arm/altera-cyclone-v/optcacheinst.yml15
-rw-r--r--spec/build/bsps/arm/altera-cyclone-v/optclkfastidle.yml18
-rw-r--r--spec/build/bsps/arm/altera-cyclone-v/optconcfg.yml15
-rw-r--r--spec/build/bsps/arm/altera-cyclone-v/optconuart1.yml15
-rw-r--r--spec/build/bsps/arm/altera-cyclone-v/optfdtcpyro.yml15
-rw-r--r--spec/build/bsps/arm/altera-cyclone-v/optfdten.yml15
-rw-r--r--spec/build/bsps/arm/altera-cyclone-v/optfdtmxsz.yml16
-rw-r--r--spec/build/bsps/arm/altera-cyclone-v/optfdtro.yml15
-rw-r--r--spec/build/bsps/arm/altera-cyclone-v/optfdtuboot.yml15
-rw-r--r--spec/build/bsps/arm/altera-cyclone-v/opti2cspeed.yml16
-rw-r--r--spec/build/bsps/arm/altera-cyclone-v/optnoi2c.yml15
-rw-r--r--spec/build/bsps/arm/altera-cyclone-v/optresetvec.yml15
-rw-r--r--spec/build/bsps/arm/altera-cyclone-v/optuartbaud.yml16
-rw-r--r--spec/build/bsps/arm/altera-cyclone-v/optuartirq.yml15
-rw-r--r--spec/build/bsps/arm/atsam/abi.yml20
-rw-r--r--spec/build/bsps/arm/atsam/bspatsam.yml411
-rw-r--r--spec/build/bsps/arm/atsam/linkcmds.yml49
-rw-r--r--spec/build/bsps/arm/atsam/objnet.yml22
-rw-r--r--spec/build/bsps/arm/atsam/optchgclksram.yml15
-rw-r--r--spec/build/bsps/arm/atsam/optchip.yml54
-rw-r--r--spec/build/bsps/arm/atsam/optconbaud.yml16
-rw-r--r--spec/build/bsps/arm/atsam/optconidx.yml15
-rw-r--r--spec/build/bsps/arm/atsam/optconirq.yml15
-rw-r--r--spec/build/bsps/arm/atsam/optcontype.yml15
-rw-r--r--spec/build/bsps/arm/atsam/optmck.yml16
-rw-r--r--spec/build/bsps/arm/atsam/optnocachesz.yml17
-rw-r--r--spec/build/bsps/arm/atsam/optoscmain.yml16
-rw-r--r--spec/build/bsps/arm/atsam/optqspiflashsz.yml17
-rw-r--r--spec/build/bsps/arm/atsam/optsdram.yml29
-rw-r--r--spec/build/bsps/arm/atsam/opttcmsz.yml17
-rw-r--r--spec/build/bsps/arm/atsam/optusextal.yml15
-rw-r--r--spec/build/bsps/arm/atsam/tstatsamv.yml35
-rw-r--r--spec/build/bsps/arm/beagle/abi.yml17
-rw-r--r--spec/build/bsps/arm/beagle/bspboardorig.yml19
-rw-r--r--spec/build/bsps/arm/beagle/bspboardxm.yml19
-rw-r--r--spec/build/bsps/arm/beagle/bspboneblack.yml19
-rw-r--r--spec/build/bsps/arm/beagle/bspbonewhite.yml19
-rw-r--r--spec/build/bsps/arm/beagle/grp.yml44
-rw-r--r--spec/build/bsps/arm/beagle/obj.yml61
-rw-r--r--spec/build/bsps/arm/beagle/optam335x.yml18
-rw-r--r--spec/build/bsps/arm/beagle/optconbaud.yml16
-rw-r--r--spec/build/bsps/arm/beagle/optconpoll.yml15
-rw-r--r--spec/build/bsps/arm/beagle/optdebug.yml18
-rw-r--r--spec/build/bsps/arm/beagle/optdm3730.yml18
-rw-r--r--spec/build/bsps/arm/beagle/optfdtcpyro.yml15
-rw-r--r--spec/build/bsps/arm/beagle/optfdtmxsz.yml16
-rw-r--r--spec/build/bsps/arm/beagle/optfdtro.yml15
-rw-r--r--spec/build/bsps/arm/beagle/optfdtuboot.yml15
-rw-r--r--spec/build/bsps/arm/csb336/abi.yml17
-rw-r--r--spec/build/bsps/arm/csb336/bspcsb336.yml59
-rw-r--r--spec/build/bsps/arm/csb336/objnet.yml17
-rw-r--r--spec/build/bsps/arm/csb336/start.yml14
-rw-r--r--spec/build/bsps/arm/csb337/abi.yml17
-rw-r--r--spec/build/bsps/arm/csb337/bspcsb337.yml19
-rw-r--r--spec/build/bsps/arm/csb337/bspcsb637.yml19
-rw-r--r--spec/build/bsps/arm/csb337/bspkit637v6.yml19
-rw-r--r--spec/build/bsps/arm/csb337/grp.yml52
-rw-r--r--spec/build/bsps/arm/csb337/obj.yml57
-rw-r--r--spec/build/bsps/arm/csb337/objlcd.yml16
-rw-r--r--spec/build/bsps/arm/csb337/objnet.yml16
-rw-r--r--spec/build/bsps/arm/csb337/objumon.yml26
-rw-r--r--spec/build/bsps/arm/csb337/objumoncon.yml15
-rw-r--r--spec/build/bsps/arm/csb337/optcsb637.yml21
-rw-r--r--spec/build/bsps/arm/csb337/optenlcd.yml19
-rw-r--r--spec/build/bsps/arm/csb337/optenumon.yml16
-rw-r--r--spec/build/bsps/arm/csb337/optenumoncon.yml16
-rw-r--r--spec/build/bsps/arm/csb337/optenusart0.yml15
-rw-r--r--spec/build/bsps/arm/csb337/optenusart1.yml15
-rw-r--r--spec/build/bsps/arm/csb337/optenusart2.yml15
-rw-r--r--spec/build/bsps/arm/csb337/optenusart3.yml15
-rw-r--r--spec/build/bsps/arm/csb337/start.yml14
-rw-r--r--spec/build/bsps/arm/edb7312/abi.yml17
-rw-r--r--spec/build/bsps/arm/edb7312/bspedb7312.yml62
-rw-r--r--spec/build/bsps/arm/edb7312/objnet.yml16
-rw-r--r--spec/build/bsps/arm/edb7312/optskyeye.yml15
-rw-r--r--spec/build/bsps/arm/edb7312/start.yml14
-rw-r--r--spec/build/bsps/arm/grp.yml62
-rw-r--r--spec/build/bsps/arm/gumstix/abi.yml17
-rw-r--r--spec/build/bsps/arm/gumstix/bspgumstix.yml66
-rw-r--r--spec/build/bsps/arm/gumstix/objnet.yml16
-rw-r--r--spec/build/bsps/arm/gumstix/optskyeye.yml15
-rw-r--r--spec/build/bsps/arm/gumstix/start.yml14
-rw-r--r--spec/build/bsps/arm/imx/abi.yml21
-rw-r--r--spec/build/bsps/arm/imx/bspimx.yml104
-rw-r--r--spec/build/bsps/arm/imx/objsmp.yml16
-rw-r--r--spec/build/bsps/arm/imx/optcachedata.yml18
-rw-r--r--spec/build/bsps/arm/imx/optcacheinst.yml18
-rw-r--r--spec/build/bsps/arm/imx/optccmahb.yml16
-rw-r--r--spec/build/bsps/arm/imx/optcmmecspi.yml16
-rw-r--r--spec/build/bsps/arm/imx/optcmmipg.yml16
-rw-r--r--spec/build/bsps/arm/imx/optcmmsdhci.yml16
-rw-r--r--spec/build/bsps/arm/imx/optcmmuart.yml16
-rw-r--r--spec/build/bsps/arm/imx/optconirq.yml16
-rw-r--r--spec/build/bsps/arm/imx/optfdtcpyro.yml15
-rw-r--r--spec/build/bsps/arm/imx/optfdtmxsz.yml16
-rw-r--r--spec/build/bsps/arm/imx/optfdtro.yml15
-rw-r--r--spec/build/bsps/arm/imx/optfdtuboot.yml15
-rw-r--r--spec/build/bsps/arm/imx/optresetvec.yml15
-rw-r--r--spec/build/bsps/arm/lm3s69xx/abi.yml18
-rw-r--r--spec/build/bsps/arm/lm3s69xx/bsplm3s3749.yml21
-rw-r--r--spec/build/bsps/arm/lm3s69xx/bsplm3s6965.yml21
-rw-r--r--spec/build/bsps/arm/lm3s69xx/bsplm4f120.yml21
-rw-r--r--spec/build/bsps/arm/lm3s69xx/bspqemu.yml19
-rw-r--r--spec/build/bsps/arm/lm3s69xx/grp.yml56
-rw-r--r--spec/build/bsps/arm/lm3s69xx/obj.yml55
-rw-r--r--spec/build/bsps/arm/lm3s69xx/optenuart0.yml15
-rw-r--r--spec/build/bsps/arm/lm3s69xx/optenuart1.yml15
-rw-r--r--spec/build/bsps/arm/lm3s69xx/optenuart2.yml15
-rw-r--r--spec/build/bsps/arm/lm3s69xx/optgpioahb.yml21
-rw-r--r--spec/build/bsps/arm/lm3s69xx/optgpionum.yml25
-rw-r--r--spec/build/bsps/arm/lm3s69xx/optlm3s3749.yml18
-rw-r--r--spec/build/bsps/arm/lm3s69xx/optlm3s6965.yml18
-rw-r--r--spec/build/bsps/arm/lm3s69xx/optlm4f120.yml18
-rw-r--r--spec/build/bsps/arm/lm3s69xx/optssiblks.yml25
-rw-r--r--spec/build/bsps/arm/lm3s69xx/optssiclk.yml16
-rw-r--r--spec/build/bsps/arm/lm3s69xx/optsysclk.yml22
-rw-r--r--spec/build/bsps/arm/lm3s69xx/optuartbaud.yml16
-rw-r--r--spec/build/bsps/arm/lm3s69xx/optudma.yml21
-rw-r--r--spec/build/bsps/arm/lm3s69xx/optxtalcfg.yml25
-rw-r--r--spec/build/bsps/arm/lm3s69xx/tstlm3s3749.yml38
-rw-r--r--spec/build/bsps/arm/lm3s69xx/tstlm3s6965.yml22
-rw-r--r--spec/build/bsps/arm/lm3s69xx/tstlm4f120.yml39
-rw-r--r--spec/build/bsps/arm/lpc176x/abi.yml18
-rw-r--r--spec/build/bsps/arm/lpc176x/bsplpc1768mbed.yml21
-rw-r--r--spec/build/bsps/arm/lpc176x/bsplpc1768mbedahbram.yml21
-rw-r--r--spec/build/bsps/arm/lpc176x/bsplpc1768mbedahbrameth.yml21
-rw-r--r--spec/build/bsps/arm/lpc176x/grp.yml52
-rw-r--r--spec/build/bsps/arm/lpc176x/obj.yml80
-rw-r--r--spec/build/bsps/arm/lpc176x/optcclk.yml16
-rw-r--r--spec/build/bsps/arm/lpc176x/optconcfg.yml15
-rw-r--r--spec/build/bsps/arm/lpc176x/optdmachn.yml16
-rw-r--r--spec/build/bsps/arm/lpc176x/optlpc1768.yml15
-rw-r--r--spec/build/bsps/arm/lpc176x/optmintskstksz.yml16
-rw-r--r--spec/build/bsps/arm/lpc176x/optoscmain.yml16
-rw-r--r--spec/build/bsps/arm/lpc176x/optoscrtc.yml16
-rw-r--r--spec/build/bsps/arm/lpc176x/optpclkdiv.yml16
-rw-r--r--spec/build/bsps/arm/lpc176x/optstopgpdma.yml15
-rw-r--r--spec/build/bsps/arm/lpc176x/optstopusb.yml15
-rw-r--r--spec/build/bsps/arm/lpc176x/optuart1cfg.yml15
-rw-r--r--spec/build/bsps/arm/lpc176x/optuartbaud.yml16
-rw-r--r--spec/build/bsps/arm/lpc176x/tstlpc1768mbed.yml37
-rw-r--r--spec/build/bsps/arm/lpc176x/tstlpc1768mbedahbram.yml38
-rw-r--r--spec/build/bsps/arm/lpc176x/tstlpc1768mbedahbrameth.yml140
-rw-r--r--spec/build/bsps/arm/lpc24xx/abi.yml34
-rw-r--r--spec/build/bsps/arm/lpc24xx/bsplpc17xxearam.yml19
-rw-r--r--spec/build/bsps/arm/lpc24xx/bsplpc17xxearomint.yml21
-rw-r--r--spec/build/bsps/arm/lpc24xx/bsplpc17xxplx800ram.yml19
-rw-r--r--spec/build/bsps/arm/lpc24xx/bsplpc17xxplx800romint.yml21
-rw-r--r--spec/build/bsps/arm/lpc24xx/bsplpc2362.yml21
-rw-r--r--spec/build/bsps/arm/lpc24xx/bsplpc23xxtli800.yml21
-rw-r--r--spec/build/bsps/arm/lpc24xx/bsplpc24xxea.yml19
-rw-r--r--spec/build/bsps/arm/lpc24xx/bsplpc40xxearam.yml19
-rw-r--r--spec/build/bsps/arm/lpc24xx/bsplpc40xxearomint.yml21
-rw-r--r--spec/build/bsps/arm/lpc24xx/bspncsram.yml19
-rw-r--r--spec/build/bsps/arm/lpc24xx/bspncsromext.yml19
-rw-r--r--spec/build/bsps/arm/lpc24xx/bspncsromint.yml21
-rw-r--r--spec/build/bsps/arm/lpc24xx/bspplx800ram.yml19
-rw-r--r--spec/build/bsps/arm/lpc24xx/bspplx800romint.yml21
-rw-r--r--spec/build/bsps/arm/lpc24xx/grp.yml84
-rw-r--r--spec/build/bsps/arm/lpc24xx/obj.yml90
-rw-r--r--spec/build/bsps/arm/lpc24xx/objnet.yml16
-rw-r--r--spec/build/bsps/arm/lpc24xx/optcclk.yml28
-rw-r--r--spec/build/bsps/arm/lpc24xx/optconcfg.yml15
-rw-r--r--spec/build/bsps/arm/lpc24xx/optdmachn.yml22
-rw-r--r--spec/build/bsps/arm/lpc24xx/optemcclkdiv.yml22
-rw-r--r--spec/build/bsps/arm/lpc24xx/optemcis42s32800b.yml21
-rw-r--r--spec/build/bsps/arm/lpc24xx/optemcis42s32800d7.yml18
-rw-r--r--spec/build/bsps/arm/lpc24xx/optemcm29w160e.yml18
-rw-r--r--spec/build/bsps/arm/lpc24xx/optemcm29w320e70.yml18
-rw-r--r--spec/build/bsps/arm/lpc24xx/optemcmt48lc4m16a2.yml18
-rw-r--r--spec/build/bsps/arm/lpc24xx/optemcsst39vf3201.yml15
-rw-r--r--spec/build/bsps/arm/lpc24xx/optemctest.yml15
-rw-r--r--spec/build/bsps/arm/lpc24xx/optemcw9825g2jb75i.yml15
-rw-r--r--spec/build/bsps/arm/lpc24xx/optethdownpin.yml15
-rw-r--r--spec/build/bsps/arm/lpc24xx/optethrmii.yml18
-rw-r--r--spec/build/bsps/arm/lpc24xx/optheapext.yml18
-rw-r--r--spec/build/bsps/arm/lpc24xx/optoscmain.yml19
-rw-r--r--spec/build/bsps/arm/lpc24xx/optoscrtc.yml16
-rw-r--r--spec/build/bsps/arm/lpc24xx/optotgi2c.yml22
-rw-r--r--spec/build/bsps/arm/lpc24xx/optpclkdiv.yml22
-rw-r--r--spec/build/bsps/arm/lpc24xx/optresetvec.yml19
-rw-r--r--spec/build/bsps/arm/lpc24xx/optstopeth.yml18
-rw-r--r--spec/build/bsps/arm/lpc24xx/optstopgpdma.yml15
-rw-r--r--spec/build/bsps/arm/lpc24xx/optstopusb.yml18
-rw-r--r--spec/build/bsps/arm/lpc24xx/optuart1cfg.yml18
-rw-r--r--spec/build/bsps/arm/lpc24xx/optuart2cfg.yml24
-rw-r--r--spec/build/bsps/arm/lpc24xx/optuart3cfg.yml21
-rw-r--r--spec/build/bsps/arm/lpc24xx/optuartbaud.yml16
-rw-r--r--spec/build/bsps/arm/lpc24xx/tstlpc17xxearomint.yml15
-rw-r--r--spec/build/bsps/arm/lpc24xx/tstlpc17xxplx800romint.yml15
-rw-r--r--spec/build/bsps/arm/lpc24xx/tstlpc2362.yml55
-rw-r--r--spec/build/bsps/arm/lpc24xx/tstlpc23xxtli800.yml66
-rw-r--r--spec/build/bsps/arm/lpc24xx/tstlpc40xxearomint.yml15
-rw-r--r--spec/build/bsps/arm/lpc24xx/tstncsromint.yml15
-rw-r--r--spec/build/bsps/arm/lpc24xx/tstplx800romint.yml15
-rw-r--r--spec/build/bsps/arm/lpc32xx/abi.yml18
-rw-r--r--spec/build/bsps/arm/lpc32xx/bsplpc32xxmzx.yml19
-rw-r--r--spec/build/bsps/arm/lpc32xx/bspmzxstage1.yml21
-rw-r--r--spec/build/bsps/arm/lpc32xx/bspmzxstage2.yml19
-rw-r--r--spec/build/bsps/arm/lpc32xx/bspphycore.yml19
-rw-r--r--spec/build/bsps/arm/lpc32xx/grp.yml84
-rw-r--r--spec/build/bsps/arm/lpc32xx/obj.yml69
-rw-r--r--spec/build/bsps/arm/lpc32xx/objnet.yml16
-rw-r--r--spec/build/bsps/arm/lpc32xx/optdismmu.yml15
-rw-r--r--spec/build/bsps/arm/lpc32xx/optdisroprot.yml15
-rw-r--r--spec/build/bsps/arm/lpc32xx/optdisrwdc.yml15
-rw-r--r--spec/build/bsps/arm/lpc32xx/optdmachn.yml16
-rw-r--r--spec/build/bsps/arm/lpc32xx/optenwdgrst.yml15
-rw-r--r--spec/build/bsps/arm/lpc32xx/optethrmii.yml15
-rw-r--r--spec/build/bsps/arm/lpc32xx/optoscmain.yml16
-rw-r--r--spec/build/bsps/arm/lpc32xx/optoscrtc.yml16
-rw-r--r--spec/build/bsps/arm/lpc32xx/optotgi2c.yml19
-rw-r--r--spec/build/bsps/arm/lpc32xx/optotgvbus.yml19
-rw-r--r--spec/build/bsps/arm/lpc32xx/optperiphclk.yml16
-rw-r--r--spec/build/bsps/arm/lpc32xx/optresetvec.yml15
-rw-r--r--spec/build/bsps/arm/lpc32xx/optscratchsz.yml19
-rw-r--r--spec/build/bsps/arm/lpc32xx/optstopeth.yml15
-rw-r--r--spec/build/bsps/arm/lpc32xx/optstopgpdma.yml15
-rw-r--r--spec/build/bsps/arm/lpc32xx/optstopusb.yml15
-rw-r--r--spec/build/bsps/arm/lpc32xx/optu3clk.yml16
-rw-r--r--spec/build/bsps/arm/lpc32xx/optu4clk.yml16
-rw-r--r--spec/build/bsps/arm/lpc32xx/optu5clk.yml16
-rw-r--r--spec/build/bsps/arm/lpc32xx/optu6clk.yml16
-rw-r--r--spec/build/bsps/arm/lpc32xx/optuart1baud.yml15
-rw-r--r--spec/build/bsps/arm/lpc32xx/optuart2baud.yml15
-rw-r--r--spec/build/bsps/arm/lpc32xx/optuart3baud.yml16
-rw-r--r--spec/build/bsps/arm/lpc32xx/optuart4baud.yml16
-rw-r--r--spec/build/bsps/arm/lpc32xx/optuart5baud.yml16
-rw-r--r--spec/build/bsps/arm/lpc32xx/optuart6baud.yml16
-rw-r--r--spec/build/bsps/arm/lpc32xx/optuart7baud.yml15
-rw-r--r--spec/build/bsps/arm/lpc32xx/tstmzxstage1.yml23
-rw-r--r--spec/build/bsps/arm/opta9periphclk.yml24
-rw-r--r--spec/build/bsps/arm/optmmusmallpages.yml17
-rw-r--r--spec/build/bsps/arm/optmmusz.yml21
-rw-r--r--spec/build/bsps/arm/raspberrypi/abi.yml25
-rw-r--r--spec/build/bsps/arm/raspberrypi/bspraspberrypi.yml19
-rw-r--r--spec/build/bsps/arm/raspberrypi/bspraspberrypi2.yml19
-rw-r--r--spec/build/bsps/arm/raspberrypi/grp.yml46
-rw-r--r--spec/build/bsps/arm/raspberrypi/linkcmds.yml43
-rw-r--r--spec/build/bsps/arm/raspberrypi/obj.yml61
-rw-r--r--spec/build/bsps/arm/raspberrypi/objsmp.yml16
-rw-r--r--spec/build/bsps/arm/raspberrypi/optenhyp.yml15
-rw-r--r--spec/build/bsps/arm/raspberrypi/opti2ciomode.yml15
-rw-r--r--spec/build/bsps/arm/raspberrypi/optnocachelen.yml18
-rw-r--r--spec/build/bsps/arm/raspberrypi/optramlen.yml18
-rw-r--r--spec/build/bsps/arm/raspberrypi/optresetvec.yml15
-rw-r--r--spec/build/bsps/arm/raspberrypi/optrpi2.yml18
-rw-r--r--spec/build/bsps/arm/raspberrypi/optspiiomode.yml15
-rw-r--r--spec/build/bsps/arm/realview-pbx-a9/abi.yml21
-rw-r--r--spec/build/bsps/arm/realview-pbx-a9/bsprealviewpbxa9.yml84
-rw-r--r--spec/build/bsps/arm/realview-pbx-a9/objsmp.yml16
-rw-r--r--spec/build/bsps/arm/realview-pbx-a9/opta9periphclk.yml16
-rw-r--r--spec/build/bsps/arm/realview-pbx-a9/optcachedata.yml18
-rw-r--r--spec/build/bsps/arm/realview-pbx-a9/optcacheinst.yml18
-rw-r--r--spec/build/bsps/arm/realview-pbx-a9/optclkbootcpu.yml18
-rw-r--r--spec/build/bsps/arm/realview-pbx-a9/optclkfastidle.yml18
-rw-r--r--spec/build/bsps/arm/realview-pbx-a9/optmmusmallpages.yml15
-rw-r--r--spec/build/bsps/arm/realview-pbx-a9/optresetvec.yml15
-rw-r--r--spec/build/bsps/arm/rtl22xx/abi.yml22
-rw-r--r--spec/build/bsps/arm/rtl22xx/bsprtl22xx.yml21
-rw-r--r--spec/build/bsps/arm/rtl22xx/bsprtl22xxt.yml21
-rw-r--r--spec/build/bsps/arm/rtl22xx/grp.yml30
-rw-r--r--spec/build/bsps/arm/rtl22xx/obj.yml41
-rw-r--r--spec/build/bsps/arm/rtl22xx/objnet.yml16
-rw-r--r--spec/build/bsps/arm/rtl22xx/optskyeye.yml15
-rw-r--r--spec/build/bsps/arm/rtl22xx/start.yml14
-rw-r--r--spec/build/bsps/arm/rtl22xx/tstrtl22xx.yml21
-rw-r--r--spec/build/bsps/arm/rtl22xx/tstrtl22xxt.yml18
-rw-r--r--spec/build/bsps/arm/smdk2410/abi.yml17
-rw-r--r--spec/build/bsps/arm/smdk2410/bspsmdk2410.yml69
-rw-r--r--spec/build/bsps/arm/smdk2410/optcpus3c2410.yml18
-rw-r--r--spec/build/bsps/arm/smdk2410/optskyeye.yml15
-rw-r--r--spec/build/bsps/arm/smdk2410/start.yml14
-rw-r--r--spec/build/bsps/arm/start.yml14
-rw-r--r--spec/build/bsps/arm/stm32f4/abi.yml23
-rw-r--r--spec/build/bsps/arm/stm32f4/bspstm32f105rc.yml21
-rw-r--r--spec/build/bsps/arm/stm32f4/bspstm32f4.yml21
-rw-r--r--spec/build/bsps/arm/stm32f4/grp.yml60
-rw-r--r--spec/build/bsps/arm/stm32f4/obj.yml70
-rw-r--r--spec/build/bsps/arm/stm32f4/opteni2c1.yml18
-rw-r--r--spec/build/bsps/arm/stm32f4/opteni2c2.yml15
-rw-r--r--spec/build/bsps/arm/stm32f4/optenuart4.yml15
-rw-r--r--spec/build/bsps/arm/stm32f4/optenuart5.yml15
-rw-r--r--spec/build/bsps/arm/stm32f4/optenusart1.yml15
-rw-r--r--spec/build/bsps/arm/stm32f4/optenusart2.yml15
-rw-r--r--spec/build/bsps/arm/stm32f4/optenusart3.yml15
-rw-r--r--spec/build/bsps/arm/stm32f4/optenusart6.yml15
-rw-r--r--spec/build/bsps/arm/stm32f4/optf10xxx.yml18
-rw-r--r--spec/build/bsps/arm/stm32f4/optf4xxxx.yml18
-rw-r--r--spec/build/bsps/arm/stm32f4/opthclk.yml19
-rw-r--r--spec/build/bsps/arm/stm32f4/optoschse.yml16
-rw-r--r--spec/build/bsps/arm/stm32f4/optpclk1.yml19
-rw-r--r--spec/build/bsps/arm/stm32f4/optpclk2.yml19
-rw-r--r--spec/build/bsps/arm/stm32f4/optsysclk.yml19
-rw-r--r--spec/build/bsps/arm/stm32f4/optusartbaud.yml16
-rw-r--r--spec/build/bsps/arm/stm32f4/tststm32f105rc.yml22
-rw-r--r--spec/build/bsps/arm/tms570/abi.yml21
-rw-r--r--spec/build/bsps/arm/tms570/bspls3137hdk.yml21
-rw-r--r--spec/build/bsps/arm/tms570/bspls3137hdkintram.yml21
-rw-r--r--spec/build/bsps/arm/tms570/bspls3137hdksdram.yml19
-rw-r--r--spec/build/bsps/arm/tms570/bspls3137hdkwithloader.yml21
-rw-r--r--spec/build/bsps/arm/tms570/grp.yml48
-rw-r--r--spec/build/bsps/arm/tms570/obj.yml100
-rw-r--r--spec/build/bsps/arm/tms570/objhwinit.yml27
-rw-r--r--spec/build/bsps/arm/tms570/optcclk.yml16
-rw-r--r--spec/build/bsps/arm/tms570/optconirq.yml16
-rw-r--r--spec/build/bsps/arm/tms570/optlowinit.yml16
-rw-r--r--spec/build/bsps/arm/tms570/optmintskstksz.yml16
-rw-r--r--spec/build/bsps/arm/tms570/optoscmain.yml16
-rw-r--r--spec/build/bsps/arm/tms570/optoscrtc.yml16
-rw-r--r--spec/build/bsps/arm/tms570/optreginit.yml15
-rw-r--r--spec/build/bsps/arm/tms570/optscibaud.yml16
-rw-r--r--spec/build/bsps/arm/tms570/opttms570ls3137.yml15
-rw-r--r--spec/build/bsps/arm/tms570/tstls3137hdkintram.yml23
-rw-r--r--spec/build/bsps/arm/xen/abi.yml20
-rw-r--r--spec/build/bsps/arm/xen/bspxen.yml78
-rw-r--r--spec/build/bsps/arm/xen/linkcmds.yml72
-rw-r--r--spec/build/bsps/arm/xen/optgentmrusevirt.yml15
-rw-r--r--spec/build/bsps/arm/xen/optgentmunmask.yml15
-rw-r--r--spec/build/bsps/arm/xen/optloadoff.yml18
-rw-r--r--spec/build/bsps/arm/xen/optnocachelen.yml18
-rw-r--r--spec/build/bsps/arm/xen/optramlen.yml18
-rw-r--r--spec/build/bsps/arm/xen/optramori.yml18
-rw-r--r--spec/build/bsps/arm/xen/optzimghdr.yml15
-rw-r--r--spec/build/bsps/arm/xilinx-zynq/abi.yml21
-rw-r--r--spec/build/bsps/arm/xilinx-zynq/bspqemu.yml19
-rw-r--r--spec/build/bsps/arm/xilinx-zynq/bspzc702.yml19
-rw-r--r--spec/build/bsps/arm/xilinx-zynq/bspzc706.yml19
-rw-r--r--spec/build/bsps/arm/xilinx-zynq/bspzedboard.yml19
-rw-r--r--spec/build/bsps/arm/xilinx-zynq/grp.yml64
-rw-r--r--spec/build/bsps/arm/xilinx-zynq/linkcmds.yml46
-rw-r--r--spec/build/bsps/arm/xilinx-zynq/obj.yml47
-rw-r--r--spec/build/bsps/arm/xilinx-zynq/objsmp.yml16
-rw-r--r--spec/build/bsps/arm/xilinx-zynq/opta9periphclk.yml22
-rw-r--r--spec/build/bsps/arm/xilinx-zynq/optcachedata.yml18
-rw-r--r--spec/build/bsps/arm/xilinx-zynq/optcacheinst.yml18
-rw-r--r--spec/build/bsps/arm/xilinx-zynq/optclkcpu1x.yml22
-rw-r--r--spec/build/bsps/arm/xilinx-zynq/optclkfastidle.yml18
-rw-r--r--spec/build/bsps/arm/xilinx-zynq/optclkuart.yml22
-rw-r--r--spec/build/bsps/arm/xilinx-zynq/optconirq.yml15
-rw-r--r--spec/build/bsps/arm/xilinx-zynq/optconminor.yml15
-rw-r--r--spec/build/bsps/arm/xilinx-zynq/optint0len.yml17
-rw-r--r--spec/build/bsps/arm/xilinx-zynq/optint0ori.yml17
-rw-r--r--spec/build/bsps/arm/xilinx-zynq/optint1len.yml17
-rw-r--r--spec/build/bsps/arm/xilinx-zynq/optint1ori.yml17
-rw-r--r--spec/build/bsps/arm/xilinx-zynq/optnocachelen.yml18
-rw-r--r--spec/build/bsps/arm/xilinx-zynq/optramlen.yml30
-rw-r--r--spec/build/bsps/arm/xilinx-zynq/optramori.yml21
-rw-r--r--spec/build/bsps/arm/xilinx-zynq/optresetvec.yml15
-rw-r--r--spec/build/bsps/arm/xilinx-zynqmp/abi.yml21
-rw-r--r--spec/build/bsps/arm/xilinx-zynqmp/bspxilinxzynqmp.yml95
-rw-r--r--spec/build/bsps/arm/xilinx-zynqmp/linkcmds.yml46
-rw-r--r--spec/build/bsps/arm/xilinx-zynqmp/objsmp.yml16
-rw-r--r--spec/build/bsps/arm/xilinx-zynqmp/optcachedata.yml18
-rw-r--r--spec/build/bsps/arm/xilinx-zynqmp/optcacheinst.yml18
-rw-r--r--spec/build/bsps/arm/xilinx-zynqmp/optclkfastidle.yml18
-rw-r--r--spec/build/bsps/arm/xilinx-zynqmp/optclkuart.yml19
-rw-r--r--spec/build/bsps/arm/xilinx-zynqmp/optconirq.yml15
-rw-r--r--spec/build/bsps/arm/xilinx-zynqmp/optconminor.yml15
-rw-r--r--spec/build/bsps/arm/xilinx-zynqmp/optgentmrfreq.yml15
-rw-r--r--spec/build/bsps/arm/xilinx-zynqmp/optgentmrusevirt.yml15
-rw-r--r--spec/build/bsps/arm/xilinx-zynqmp/optint0len.yml17
-rw-r--r--spec/build/bsps/arm/xilinx-zynqmp/optint0ori.yml17
-rw-r--r--spec/build/bsps/arm/xilinx-zynqmp/optint1len.yml17
-rw-r--r--spec/build/bsps/arm/xilinx-zynqmp/optint1ori.yml17
-rw-r--r--spec/build/bsps/arm/xilinx-zynqmp/optnocachelen.yml18
-rw-r--r--spec/build/bsps/arm/xilinx-zynqmp/optramlen.yml21
-rw-r--r--spec/build/bsps/arm/xilinx-zynqmp/optramori.yml18
-rw-r--r--spec/build/bsps/arm/xilinx-zynqmp/optresetvec.yml15
-rw-r--r--spec/build/bsps/bfin/TLL6527M/abi.yml17
-rw-r--r--spec/build/bsps/bfin/TLL6527M/bsptll6527m.yml62
-rw-r--r--spec/build/bsps/bfin/TLL6527M/optconbaud.yml16
-rw-r--r--spec/build/bsps/bfin/TLL6527M/optconirq.yml16
-rw-r--r--spec/build/bsps/bfin/TLL6527M/optirqtbl.yml15
-rw-r--r--spec/build/bsps/bfin/TLL6527M/optskyeye.yml15
-rw-r--r--spec/build/bsps/bfin/TLL6527M/optuartdma.yml15
-rw-r--r--spec/build/bsps/bfin/bf537Stamp/abi.yml16
-rw-r--r--spec/build/bsps/bfin/bf537Stamp/bspbf537stamp.yml57
-rw-r--r--spec/build/bsps/bfin/bf537Stamp/objnet.yml17
-rw-r--r--spec/build/bsps/bfin/bf537Stamp/optconirq.yml16
-rw-r--r--spec/build/bsps/bfin/bf537Stamp/optskyeye.yml15
-rw-r--r--spec/build/bsps/bfin/bf537Stamp/start.yml14
-rw-r--r--spec/build/bsps/bfin/eZKit533/abi.yml16
-rw-r--r--spec/build/bsps/bfin/eZKit533/bspezkit533.yml56
-rw-r--r--spec/build/bsps/bfin/eZKit533/optconirq.yml16
-rw-r--r--spec/build/bsps/bfin/eZKit533/optskyeye.yml15
-rw-r--r--spec/build/bsps/bfin/grp.yml46
-rw-r--r--spec/build/bsps/bfin/obj.yml21
-rw-r--r--spec/build/bsps/bfin/start.yml14
-rw-r--r--spec/build/bsps/bspopts.yml39
-rw-r--r--spec/build/bsps/grpmake.yml44
-rw-r--r--spec/build/bsps/i386/grp.yml29
-rw-r--r--spec/build/bsps/i386/pc386/abi.yml43
-rw-r--r--spec/build/bsps/i386/pc386/bsppc386.yml19
-rw-r--r--spec/build/bsps/i386/pc386/bsppc486.yml19
-rw-r--r--spec/build/bsps/i386/pc386/bsppc586.yml19
-rw-r--r--spec/build/bsps/i386/pc386/bsppc586sse.yml19
-rw-r--r--spec/build/bsps/i386/pc386/bsppc686.yml19
-rw-r--r--spec/build/bsps/i386/pc386/bsppcp4.yml19
-rw-r--r--spec/build/bsps/i386/pc386/grp.yml72
-rw-r--r--spec/build/bsps/i386/pc386/obj.yml83
-rw-r--r--spec/build/bsps/i386/pc386/objide.yml16
-rw-r--r--spec/build/bsps/i386/pc386/objnet.yml19
-rw-r--r--spec/build/bsps/i386/pc386/objsmp.yml16
-rw-r--r--spec/build/bsps/i386/pc386/objsmpstart.yml54
-rw-r--r--spec/build/bsps/i386/pc386/objvga.yml25
-rw-r--r--spec/build/bsps/i386/pc386/objvgacir.yml17
-rw-r--r--spec/build/bsps/i386/pc386/objvgavbe.yml17
-rw-r--r--spec/build/bsps/i386/pc386/objvgavga.yml17
-rw-r--r--spec/build/bsps/i386/pc386/optcirrus.yml16
-rw-r--r--spec/build/bsps/i386/pc386/optclk8253.yml15
-rw-r--r--spec/build/bsps/i386/pc386/optclktsc.yml15
-rw-r--r--spec/build/bsps/i386/pc386/optconcom1.yml15
-rw-r--r--spec/build/bsps/i386/pc386/optencom14.yml15
-rw-r--r--spec/build/bsps/i386/pc386/optenide.yml16
-rw-r--r--spec/build/bsps/i386/pc386/optenvga.yml16
-rw-r--r--spec/build/bsps/i386/pc386/optgdbstub.yml15
-rw-r--r--spec/build/bsps/i386/pc386/optgdtdesc.yml26
-rw-r--r--spec/build/bsps/i386/pc386/optidepriifc.yml15
-rw-r--r--spec/build/bsps/i386/pc386/optidesecifc.yml15
-rw-r--r--spec/build/bsps/i386/pc386/optrelocaddr.yml27
-rw-r--r--spec/build/bsps/i386/pc386/optvberm.yml16
-rw-r--r--spec/build/bsps/i386/pc386/optvga.yml16
-rw-r--r--spec/build/bsps/i386/pc386/optvideo80x50.yml15
-rw-r--r--spec/build/bsps/i386/pc386/start.yml14
-rw-r--r--spec/build/bsps/linkcmds.yml20
-rw-r--r--spec/build/bsps/lm32/grp.yml28
-rw-r--r--spec/build/bsps/lm32/lm32_evr/abi.yml16
-rw-r--r--spec/build/bsps/lm32/lm32_evr/bspgdbsim.yml21
-rw-r--r--spec/build/bsps/lm32/lm32_evr/bsplm32evr.yml19
-rw-r--r--spec/build/bsps/lm32/lm32_evr/grp.yml30
-rw-r--r--spec/build/bsps/lm32/lm32_evr/obj.yml33
-rw-r--r--spec/build/bsps/lm32/lm32_evr/objnet.yml16
-rw-r--r--spec/build/bsps/lm32/lm32_evr/optsim.yml18
-rw-r--r--spec/build/bsps/lm32/milkymist/abi.yml20
-rw-r--r--spec/build/bsps/lm32/milkymist/bspmilkymist.yml67
-rw-r--r--spec/build/bsps/lm32/milkymist/objnet.yml16
-rw-r--r--spec/build/bsps/lm32/milkymist/optsim.yml15
-rw-r--r--spec/build/bsps/lm32/start.yml14
-rw-r--r--spec/build/bsps/m68k/av5282/abi.yml17
-rw-r--r--spec/build/bsps/m68k/av5282/bspav5282.yml55
-rw-r--r--spec/build/bsps/m68k/av5282/objnet.yml16
-rw-r--r--spec/build/bsps/m68k/av5282/start.yml14
-rw-r--r--spec/build/bsps/m68k/csb360/abi.yml17
-rw-r--r--spec/build/bsps/m68k/csb360/bspcsb360.yml55
-rw-r--r--spec/build/bsps/m68k/csb360/start.yml14
-rw-r--r--spec/build/bsps/m68k/gen68340/abi.yml17
-rw-r--r--spec/build/bsps/m68k/gen68340/bspgen68340.yml61
-rw-r--r--spec/build/bsps/m68k/gen68340/start.yml14
-rw-r--r--spec/build/bsps/m68k/gen68360/abi.yml25
-rw-r--r--spec/build/bsps/m68k/gen68360/bspgen68360.yml19
-rw-r--r--spec/build/bsps/m68k/gen68360/bspgen68360040.yml19
-rw-r--r--spec/build/bsps/m68k/gen68360/bsppgh360.yml19
-rw-r--r--spec/build/bsps/m68k/gen68360/grp.yml36
-rw-r--r--spec/build/bsps/m68k/gen68360/obj.yml41
-rw-r--r--spec/build/bsps/m68k/gen68360/objnet.yml16
-rw-r--r--spec/build/bsps/m68k/gen68360/opt68360.yml18
-rw-r--r--spec/build/bsps/m68k/gen68360/opt68360x040.yml18
-rw-r--r--spec/build/bsps/m68k/gen68360/optpgh360.yml18
-rw-r--r--spec/build/bsps/m68k/gen68360/start.yml14
-rw-r--r--spec/build/bsps/m68k/genmcf548x/abi.yml18
-rw-r--r--spec/build/bsps/m68k/genmcf548x/bspcobra5475.yml19
-rw-r--r--spec/build/bsps/m68k/genmcf548x/bspm5484fireengine.yml19
-rw-r--r--spec/build/bsps/m68k/genmcf548x/grp.yml38
-rw-r--r--spec/build/bsps/m68k/genmcf548x/obj.yml52
-rw-r--r--spec/build/bsps/m68k/genmcf548x/objnet.yml16
-rw-r--r--spec/build/bsps/m68k/genmcf548x/optcpuclk.yml22
-rw-r--r--spec/build/bsps/m68k/genmcf548x/optdbug.yml18
-rw-r--r--spec/build/bsps/m68k/genmcf548x/optlowinit.yml18
-rw-r--r--spec/build/bsps/m68k/genmcf548x/optm5484fireengine.yml18
-rw-r--r--spec/build/bsps/m68k/genmcf548x/start.yml14
-rw-r--r--spec/build/bsps/m68k/grp.yml49
-rw-r--r--spec/build/bsps/m68k/mcf5206elite/abi.yml17
-rw-r--r--spec/build/bsps/m68k/mcf5206elite/bspmcf5206elite.yml71
-rw-r--r--spec/build/bsps/m68k/mcf5206elite/start.yml14
-rw-r--r--spec/build/bsps/m68k/mcf5206elite/tstmcf5206elite.yml14
-rw-r--r--spec/build/bsps/m68k/mcf52235/abi.yml17
-rw-r--r--spec/build/bsps/m68k/mcf52235/bspmcf52235.yml58
-rw-r--r--spec/build/bsps/m68k/mcf52235/start.yml14
-rw-r--r--spec/build/bsps/m68k/mcf52235/tstmcf52235.yml34
-rw-r--r--spec/build/bsps/m68k/mcf5225x/abi.yml17
-rw-r--r--spec/build/bsps/m68k/mcf5225x/bspmcf5225x.yml56
-rw-r--r--spec/build/bsps/m68k/mcf5225x/start.yml14
-rw-r--r--spec/build/bsps/m68k/mcf5225x/tstmcf5225x.yml17
-rw-r--r--spec/build/bsps/m68k/mcf5235/abi.yml17
-rw-r--r--spec/build/bsps/m68k/mcf5235/bspmcf5235.yml60
-rw-r--r--spec/build/bsps/m68k/mcf5235/objnet.yml16
-rw-r--r--spec/build/bsps/m68k/mcf5235/start.yml14
-rw-r--r--spec/build/bsps/m68k/mcf5329/abi.yml17
-rw-r--r--spec/build/bsps/m68k/mcf5329/bspmcf5329.yml57
-rw-r--r--spec/build/bsps/m68k/mcf5329/objnet.yml16
-rw-r--r--spec/build/bsps/m68k/mcf5329/start.yml14
-rw-r--r--spec/build/bsps/m68k/mrm332/abi.yml17
-rw-r--r--spec/build/bsps/m68k/mrm332/bspmrm332.yml59
-rw-r--r--spec/build/bsps/m68k/mrm332/start.yml14
-rw-r--r--spec/build/bsps/m68k/mrm332/tstmrm332.yml25
-rw-r--r--spec/build/bsps/m68k/mvme147/abi.yml17
-rw-r--r--spec/build/bsps/m68k/mvme147/bspmvme147.yml55
-rw-r--r--spec/build/bsps/m68k/mvme147s/abi.yml17
-rw-r--r--spec/build/bsps/m68k/mvme147s/bspmvme147s.yml57
-rw-r--r--spec/build/bsps/m68k/mvme147s/objmpci.yml18
-rw-r--r--spec/build/bsps/m68k/mvme162/abi.yml18
-rw-r--r--spec/build/bsps/m68k/mvme162/bspmvme162.yml21
-rw-r--r--spec/build/bsps/m68k/mvme162/bspmvme162lx.yml21
-rw-r--r--spec/build/bsps/m68k/mvme162/grp.yml30
-rw-r--r--spec/build/bsps/m68k/mvme162/obj.yml41
-rw-r--r--spec/build/bsps/m68k/mvme162/objnet.yml16
-rw-r--r--spec/build/bsps/m68k/mvme162/tstmvme162.yml13
-rw-r--r--spec/build/bsps/m68k/mvme162/tstmvme162lx.yml13
-rw-r--r--spec/build/bsps/m68k/mvme167/abi.yml17
-rw-r--r--spec/build/bsps/m68k/mvme167/bspmvme167.yml72
-rw-r--r--spec/build/bsps/m68k/mvme167/objnet.yml16
-rw-r--r--spec/build/bsps/m68k/mvme167/optconminor.yml15
-rw-r--r--spec/build/bsps/m68k/mvme167/optintlvl.yml15
-rw-r--r--spec/build/bsps/m68k/mvme167/optiomode.yml15
-rw-r--r--spec/build/bsps/m68k/mvme167/optmvme167.yml14
-rw-r--r--spec/build/bsps/m68k/mvme167/optprintkminor.yml16
-rw-r--r--spec/build/bsps/m68k/mvme167/optuseterm.yml15
-rw-r--r--spec/build/bsps/m68k/objfpsp.yml57
-rw-r--r--spec/build/bsps/m68k/start.yml14
-rw-r--r--spec/build/bsps/m68k/uC5282/abi.yml17
-rw-r--r--spec/build/bsps/m68k/uC5282/bspuc5282.yml55
-rw-r--r--spec/build/bsps/m68k/uC5282/objnet.yml16
-rw-r--r--spec/build/bsps/m68k/uC5282/start.yml14
-rw-r--r--spec/build/bsps/makebsp.yml41
-rw-r--r--spec/build/bsps/makecustom.yml15
-rw-r--r--spec/build/bsps/makeinc.yml65
-rw-r--r--spec/build/bsps/maketarget.yml55
-rw-r--r--spec/build/bsps/mips/csb350/abi.yml19
-rw-r--r--spec/build/bsps/mips/csb350/bspcsb350.yml58
-rw-r--r--spec/build/bsps/mips/csb350/objnet.yml16
-rw-r--r--spec/build/bsps/mips/csb350/start.yml14
-rw-r--r--spec/build/bsps/mips/grp.yml24
-rw-r--r--spec/build/bsps/mips/hurricane/abi.yml19
-rw-r--r--spec/build/bsps/mips/hurricane/bsphurricane.yml70
-rw-r--r--spec/build/bsps/mips/hurricane/optrm52xx.yml15
-rw-r--r--spec/build/bsps/mips/hurricane/optusc320.yml15
-rw-r--r--spec/build/bsps/mips/hurricane/start.yml14
-rw-r--r--spec/build/bsps/mips/jmr3904/abi.yml19
-rw-r--r--spec/build/bsps/mips/jmr3904/bspjmr3904.yml57
-rw-r--r--spec/build/bsps/mips/jmr3904/start.yml14
-rw-r--r--spec/build/bsps/mips/jmr3904/tstjmr3904.yml15
-rw-r--r--spec/build/bsps/mips/malta/abi.yml19
-rw-r--r--spec/build/bsps/mips/malta/bspmalta.yml67
-rw-r--r--spec/build/bsps/mips/malta/start.yml14
-rw-r--r--spec/build/bsps/mips/rbtx4925/abi.yml19
-rw-r--r--spec/build/bsps/mips/rbtx4925/bsprbtx4925.yml66
-rw-r--r--spec/build/bsps/mips/rbtx4925/opttx49xx.yml15
-rw-r--r--spec/build/bsps/mips/rbtx4925/start.yml14
-rw-r--r--spec/build/bsps/mips/rbtx4938/abi.yml19
-rw-r--r--spec/build/bsps/mips/rbtx4938/bsprbtx4938.yml64
-rw-r--r--spec/build/bsps/mips/rbtx4938/start.yml14
-rw-r--r--spec/build/bsps/moxie/moxiesim/abi.yml16
-rw-r--r--spec/build/bsps/moxie/moxiesim/bspmoxiesim.yml53
-rw-r--r--spec/build/bsps/moxie/moxiesim/start.yml14
-rw-r--r--spec/build/bsps/nios2/nios2_iss/abi.yml18
-rw-r--r--spec/build/bsps/nios2/nios2_iss/bspnios2iss.yml49
-rw-r--r--spec/build/bsps/nios2/nios2_iss/start.yml14
-rw-r--r--spec/build/bsps/obj.yml107
-rw-r--r--spec/build/bsps/objgrlib.yml142
-rw-r--r--spec/build/bsps/objgrlibnet.yml17
-rw-r--r--spec/build/bsps/objgrlibnosmp.yml15
-rw-r--r--spec/build/bsps/objirq.yml19
-rw-r--r--spec/build/bsps/objirqdflt.yml17
-rw-r--r--spec/build/bsps/objmpci.yml32
-rw-r--r--spec/build/bsps/objnet.yml34
-rw-r--r--spec/build/bsps/objnetnosmp.yml21
-rw-r--r--spec/build/bsps/optabi.yml17
-rw-r--r--spec/build/bsps/optasflags.yml16
-rw-r--r--spec/build/bsps/optbsp.yml15
-rw-r--r--spec/build/bsps/optcachedata.yml19
-rw-r--r--spec/build/bsps/optcacheinst.yml19
-rw-r--r--spec/build/bsps/optclang.yml17
-rw-r--r--spec/build/bsps/optclkbootcpu.yml20
-rw-r--r--spec/build/bsps/optclkfastidle.yml20
-rw-r--r--spec/build/bsps/optconsolebaud.yml23
-rw-r--r--spec/build/bsps/optconsoleirq.yml16
-rw-r--r--spec/build/bsps/optfatalverb.yml17
-rw-r--r--spec/build/bsps/optgcc.yml17
-rw-r--r--spec/build/bsps/optincludes.yml16
-rw-r--r--spec/build/bsps/optldflags.yml18
-rw-r--r--spec/build/bsps/optldflagsbsp.yml17
-rw-r--r--spec/build/bsps/optmake.yml19
-rw-r--r--spec/build/bsps/optmakelegacy.yml15
-rw-r--r--spec/build/bsps/opto0.yml22
-rw-r--r--spec/build/bsps/opto1.yml22
-rw-r--r--spec/build/bsps/opto2.yml22
-rw-r--r--spec/build/bsps/optobjcopy.yml16
-rw-r--r--spec/build/bsps/optog.yml22
-rw-r--r--spec/build/bsps/optos.yml22
-rw-r--r--spec/build/bsps/optprintexcpt.yml17
-rw-r--r--spec/build/bsps/optreset.yml16
-rw-r--r--spec/build/bsps/optresetkey.yml17
-rw-r--r--spec/build/bsps/or1k/generic_or1k/abi.yml17
-rw-r--r--spec/build/bsps/or1k/generic_or1k/bspgenericor1k.yml67
-rw-r--r--spec/build/bsps/or1k/generic_or1k/optperiphclk.yml16
-rw-r--r--spec/build/bsps/or1k/generic_or1k/optresetvec.yml15
-rw-r--r--spec/build/bsps/or1k/generic_or1k/start.yml14
-rw-r--r--spec/build/bsps/or1k/grp.yml15
-rw-r--r--spec/build/bsps/pkgconfig.yml34
-rw-r--r--spec/build/bsps/powerpc/beatnik/abi.yml17
-rw-r--r--spec/build/bsps/powerpc/beatnik/bspbeatnik.yml107
-rw-r--r--spec/build/bsps/powerpc/beatnik/objnet.yml23
-rw-r--r--spec/build/bsps/powerpc/beatnik/optsbrk.yml15
-rw-r--r--spec/build/bsps/powerpc/crti.yml14
-rw-r--r--spec/build/bsps/powerpc/crtn.yml14
-rw-r--r--spec/build/bsps/powerpc/gen5200/abi.yml20
-rw-r--r--spec/build/bsps/powerpc/gen5200/bspicecube.yml19
-rw-r--r--spec/build/bsps/powerpc/gen5200/bsppm520cr825.yml19
-rw-r--r--spec/build/bsps/powerpc/gen5200/bsppm520ze30.yml19
-rw-r--r--spec/build/bsps/powerpc/gen5200/grp.yml64
-rw-r--r--spec/build/bsps/powerpc/gen5200/obj.yml117
-rw-r--r--spec/build/bsps/powerpc/gen5200/objnet.yml16
-rw-r--r--spec/build/bsps/powerpc/gen5200/optbenchirq.yml15
-rw-r--r--spec/build/bsps/powerpc/gen5200/optenirqnest.yml18
-rw-r--r--spec/build/bsps/powerpc/gen5200/optgpiomsk.yml22
-rw-r--r--spec/build/bsps/powerpc/gen5200/optgpioval.yml22
-rw-r--r--spec/build/bsps/powerpc/gen5200/opticecub.yml18
-rw-r--r--spec/build/bsps/powerpc/gen5200/optpm520cr825.yml18
-rw-r--r--spec/build/bsps/powerpc/gen5200/optpm520ze30.yml18
-rw-r--r--spec/build/bsps/powerpc/gen5200/optprintkminor.yml16
-rw-r--r--spec/build/bsps/powerpc/gen5200/optpscgps.yml16
-rw-r--r--spec/build/bsps/powerpc/gen5200/optsinglechar.yml15
-rw-r--r--spec/build/bsps/powerpc/gen5200/optuartmsk.yml25
-rw-r--r--spec/build/bsps/powerpc/gen5200/optuartstermirq.yml15
-rw-r--r--spec/build/bsps/powerpc/gen5200/optuboot.yml21
-rw-r--r--spec/build/bsps/powerpc/gen5200/start.yml14
-rw-r--r--spec/build/bsps/powerpc/gen83xx/abi.yml20
-rw-r--r--spec/build/bsps/powerpc/gen83xx/bspbruid.yml19
-rw-r--r--spec/build/bsps/powerpc/gen83xx/bsphsccm01.yml19
-rw-r--r--spec/build/bsps/powerpc/gen83xx/bspmpc8309som.yml19
-rw-r--r--spec/build/bsps/powerpc/gen83xx/bspmpc8313erdb.yml19
-rw-r--r--spec/build/bsps/powerpc/gen83xx/bspmpc8349eamds.yml19
-rw-r--r--spec/build/bsps/powerpc/gen83xx/grp.yml66
-rw-r--r--spec/build/bsps/powerpc/gen83xx/obj.yml61
-rw-r--r--spec/build/bsps/powerpc/gen83xx/objnet.yml17
-rw-r--r--spec/build/bsps/powerpc/gen83xx/optbruid.yml18
-rw-r--r--spec/build/bsps/powerpc/gen83xx/optchiptype.yml28
-rw-r--r--spec/build/bsps/powerpc/gen83xx/opthsccm01.yml18
-rw-r--r--spec/build/bsps/powerpc/gen83xx/optirqnest.yml21
-rw-r--r--spec/build/bsps/powerpc/gen83xx/optmpc8309som.yml18
-rw-r--r--spec/build/bsps/powerpc/gen83xx/optmpc8313erdb.yml18
-rw-r--r--spec/build/bsps/powerpc/gen83xx/optmpc8349eamds.yml18
-rw-r--r--spec/build/bsps/powerpc/gen83xx/optnandcs0.yml18
-rw-r--r--spec/build/bsps/powerpc/gen83xx/optnet0phy.yml22
-rw-r--r--spec/build/bsps/powerpc/gen83xx/optuart2.yml15
-rw-r--r--spec/build/bsps/powerpc/gen83xx/optuartirq.yml18
-rw-r--r--spec/build/bsps/powerpc/gen83xx/optuboot.yml24
-rw-r--r--spec/build/bsps/powerpc/gen83xx/optulpi.yml18
-rw-r--r--spec/build/bsps/powerpc/gen83xx/start.yml14
-rw-r--r--spec/build/bsps/powerpc/grp.yml91
-rw-r--r--spec/build/bsps/powerpc/haleakala/abi.yml18
-rw-r--r--spec/build/bsps/powerpc/haleakala/bsphaleakala.yml70
-rw-r--r--spec/build/bsps/powerpc/haleakala/objnet.yml16
-rw-r--r--spec/build/bsps/powerpc/haleakala/optsprg.yml15
-rw-r--r--spec/build/bsps/powerpc/haleakala/optvecbase.yml16
-rw-r--r--spec/build/bsps/powerpc/haleakala/start.yml14
-rw-r--r--spec/build/bsps/powerpc/motld.yml28
-rw-r--r--spec/build/bsps/powerpc/motorola_powerpc/abi.yml40
-rw-r--r--spec/build/bsps/powerpc/motorola_powerpc/boot.yml49
-rw-r--r--spec/build/bsps/powerpc/motorola_powerpc/bspmcp750.yml19
-rw-r--r--spec/build/bsps/powerpc/motorola_powerpc/bspmtx603e.yml19
-rw-r--r--spec/build/bsps/powerpc/motorola_powerpc/bspmvme2100.yml19
-rw-r--r--spec/build/bsps/powerpc/motorola_powerpc/bspmvme2307.yml19
-rw-r--r--spec/build/bsps/powerpc/motorola_powerpc/bspqemu.yml19
-rw-r--r--spec/build/bsps/powerpc/motorola_powerpc/bspqemualtivec.yml19
-rw-r--r--spec/build/bsps/powerpc/motorola_powerpc/grp.yml56
-rw-r--r--spec/build/bsps/powerpc/motorola_powerpc/obj.yml61
-rw-r--r--spec/build/bsps/powerpc/motorola_powerpc/objqemunet.yml18
-rw-r--r--spec/build/bsps/powerpc/motorola_powerpc/optmpc603e.yml21
-rw-r--r--spec/build/bsps/powerpc/motorola_powerpc/optmpc750.yml18
-rw-r--r--spec/build/bsps/powerpc/motorola_powerpc/optmpc8240.yml18
-rw-r--r--spec/build/bsps/powerpc/motorola_powerpc/optmvme2100.yml18
-rw-r--r--spec/build/bsps/powerpc/motorola_powerpc/optqemu.yml18
-rw-r--r--spec/build/bsps/powerpc/motorola_powerpc/optsbrk.yml15
-rw-r--r--spec/build/bsps/powerpc/motorola_powerpc/qemufakerom.yml38
-rw-r--r--spec/build/bsps/powerpc/mpc55xxevb/abi.yml21
-rw-r--r--spec/build/bsps/powerpc/mpc55xxevb/bspgwlcfm.yml21
-rw-r--r--spec/build/bsps/powerpc/mpc55xxevb/bspmpc5566evb.yml21
-rw-r--r--spec/build/bsps/powerpc/mpc55xxevb/bspmpc5643levb.yml21
-rw-r--r--spec/build/bsps/powerpc/mpc55xxevb/bspmpc5668g.yml21
-rw-r--r--spec/build/bsps/powerpc/mpc55xxevb/bspmpc5674fevb.yml21
-rw-r--r--spec/build/bsps/powerpc/mpc55xxevb/bspphycorempc5554.yml21
-rw-r--r--spec/build/bsps/powerpc/mpc55xxevb/grp.yml112
-rw-r--r--spec/build/bsps/powerpc/mpc55xxevb/obj.yml97
-rw-r--r--spec/build/bsps/powerpc/mpc55xxevb/objnet.yml17
-rw-r--r--spec/build/bsps/powerpc/mpc55xxevb/ofmpllptmfd.yml25
-rw-r--r--spec/build/bsps/powerpc/mpc55xxevb/optbootflg.yml15
-rw-r--r--spec/build/bsps/powerpc/mpc55xxevb/optcachewritethru.yml15
-rw-r--r--spec/build/bsps/powerpc/mpc55xxevb/optchipfam.yml16
-rw-r--r--spec/build/bsps/powerpc/mpc55xxevb/optchiptype.yml31
-rw-r--r--spec/build/bsps/powerpc/mpc55xxevb/optclkemios.yml25
-rw-r--r--spec/build/bsps/powerpc/mpc55xxevb/optclkpit.yml22
-rw-r--r--spec/build/bsps/powerpc/mpc55xxevb/optconbaud.yml16
-rw-r--r--spec/build/bsps/powerpc/mpc55xxevb/optconminor.yml16
-rw-r--r--spec/build/bsps/powerpc/mpc55xxevb/optearlystksz.yml16
-rw-r--r--spec/build/bsps/powerpc/mpc55xxevb/opteepromname.yml19
-rw-r--r--spec/build/bsps/powerpc/mpc55xxevb/opteeprompath.yml19
-rw-r--r--spec/build/bsps/powerpc/mpc55xxevb/optemiosprescal.yml22
-rw-r--r--spec/build/bsps/powerpc/mpc55xxevb/optenstartpro.yml15
-rw-r--r--spec/build/bsps/powerpc/mpc55xxevb/optesciirq.yml15
-rw-r--r--spec/build/bsps/powerpc/mpc55xxevb/optexcbooke.yml15
-rw-r--r--spec/build/bsps/powerpc/mpc55xxevb/optexcfixdhdlr.yml15
-rw-r--r--spec/build/bsps/powerpc/mpc55xxevb/optfmpllesyncr1.yml16
-rw-r--r--spec/build/bsps/powerpc/mpc55xxevb/optfmpllprediv.yml25
-rw-r--r--spec/build/bsps/powerpc/mpc55xxevb/optgwlcfm.yml18
-rw-r--r--spec/build/bsps/powerpc/mpc55xxevb/optirqtblsz.yml25
-rw-r--r--spec/build/bsps/powerpc/mpc55xxevb/optlowinit.yml18
-rw-r--r--spec/build/bsps/powerpc/mpc55xxevb/optmpc5566evb.yml18
-rw-r--r--spec/build/bsps/powerpc/mpc55xxevb/optmpc5674fevb.yml18
-rw-r--r--spec/build/bsps/powerpc/mpc55xxevb/optnullprot.yml21
-rw-r--r--spec/build/bsps/powerpc/mpc55xxevb/optphycorempc5554.yml18
-rw-r--r--spec/build/bsps/powerpc/mpc55xxevb/optrefclk.yml28
-rw-r--r--spec/build/bsps/powerpc/mpc55xxevb/optsmc91111.yml18
-rw-r--r--spec/build/bsps/powerpc/mpc55xxevb/optsmc9111enaddr.yml18
-rw-r--r--spec/build/bsps/powerpc/mpc55xxevb/optsmc9218ibige.yml15
-rw-r--r--spec/build/bsps/powerpc/mpc55xxevb/optsmc9218iled.yml15
-rw-r--r--spec/build/bsps/powerpc/mpc55xxevb/optsmc9218ipinirq.yml19
-rw-r--r--spec/build/bsps/powerpc/mpc55xxevb/optsmc9218ipinrst.yml19
-rw-r--r--spec/build/bsps/powerpc/mpc55xxevb/optsmc9218irxchn.yml16
-rw-r--r--spec/build/bsps/powerpc/mpc55xxevb/optsmc9218itxchn.yml16
-rw-r--r--spec/build/bsps/powerpc/mpc55xxevb/optsysclk.yml25
-rw-r--r--spec/build/bsps/powerpc/mpc55xxevb/optsysclkdiv.yml19
-rw-r--r--spec/build/bsps/powerpc/mpc55xxevb/start.yml14
-rw-r--r--spec/build/bsps/powerpc/mpc55xxevb/tstgwlcfm.yml19
-rw-r--r--spec/build/bsps/powerpc/mpc55xxevb/tstmpc5643levb.yml18
-rw-r--r--spec/build/bsps/powerpc/mpc8260ads/abi.yml21
-rw-r--r--spec/build/bsps/powerpc/mpc8260ads/bspmpc8260ads.yml78
-rw-r--r--spec/build/bsps/powerpc/mpc8260ads/objnet.yml17
-rw-r--r--spec/build/bsps/powerpc/mpc8260ads/optconminor.yml16
-rw-r--r--spec/build/bsps/powerpc/mpc8260ads/optdisphandstat.yml15
-rw-r--r--spec/build/bsps/powerpc/mpc8260ads/optprintkminor.yml16
-rw-r--r--spec/build/bsps/powerpc/mpc8260ads/optuartsiomode.yml15
-rw-r--r--spec/build/bsps/powerpc/mpc8260ads/optuartsterm.yml15
-rw-r--r--spec/build/bsps/powerpc/mpc8260ads/start.yml14
-rw-r--r--spec/build/bsps/powerpc/mvme3100/abi.yml18
-rw-r--r--spec/build/bsps/powerpc/mvme3100/bspmvme3100.yml90
-rw-r--r--spec/build/bsps/powerpc/mvme3100/objnet.yml16
-rw-r--r--spec/build/bsps/powerpc/mvme3100/optsbrk.yml15
-rw-r--r--spec/build/bsps/powerpc/mvme3100/start.yml14
-rw-r--r--spec/build/bsps/powerpc/mvme5500/abi.yml19
-rw-r--r--spec/build/bsps/powerpc/mvme5500/bspmvme5500.yml99
-rw-r--r--spec/build/bsps/powerpc/mvme5500/objnet.yml18
-rw-r--r--spec/build/bsps/powerpc/mvme5500/optsbrk.yml15
-rw-r--r--spec/build/bsps/powerpc/mvme5500/start.yml26
-rw-r--r--spec/build/bsps/powerpc/obj.yml17
-rw-r--r--spec/build/bsps/powerpc/objexc.yml26
-rw-r--r--spec/build/bsps/powerpc/objvme.yml18
-rw-r--r--spec/build/bsps/powerpc/psim/abi.yml20
-rw-r--r--spec/build/bsps/powerpc/psim/bsppsim.yml85
-rw-r--r--spec/build/bsps/powerpc/psim/objmpci.yml18
-rw-r--r--spec/build/bsps/powerpc/psim/objnet.yml16
-rw-r--r--spec/build/bsps/powerpc/psim/optclkfastidle.yml18
-rw-r--r--spec/build/bsps/powerpc/psim/optsbrk.yml15
-rw-r--r--spec/build/bsps/powerpc/psim/optsprg.yml15
-rw-r--r--spec/build/bsps/powerpc/psim/optvecbase.yml16
-rw-r--r--spec/build/bsps/powerpc/psim/start.yml14
-rw-r--r--spec/build/bsps/powerpc/qemuppc/abi.yml18
-rw-r--r--spec/build/bsps/powerpc/qemuppc/bspqemuppc.yml65
-rw-r--r--spec/build/bsps/powerpc/qemuppc/start.yml14
-rw-r--r--spec/build/bsps/powerpc/qoriq/abi.yml32
-rw-r--r--spec/build/bsps/powerpc/qoriq/bspcore0.yml21
-rw-r--r--spec/build/bsps/powerpc/qoriq/bspcore1.yml21
-rw-r--r--spec/build/bsps/powerpc/qoriq/bspe500.yml21
-rw-r--r--spec/build/bsps/powerpc/qoriq/bspe650032.yml21
-rw-r--r--spec/build/bsps/powerpc/qoriq/bspe650064.yml21
-rw-r--r--spec/build/bsps/powerpc/qoriq/grp.yml118
-rw-r--r--spec/build/bsps/powerpc/qoriq/obj.yml75
-rw-r--r--spec/build/bsps/powerpc/qoriq/objnet.yml18
-rw-r--r--spec/build/bsps/powerpc/qoriq/objsmp.yml15
-rw-r--r--spec/build/bsps/powerpc/qoriq/optbucsr.yml19
-rw-r--r--spec/build/bsps/powerpc/qoriq/optbusclkdiv.yml19
-rw-r--r--spec/build/bsps/powerpc/qoriq/optcachealign.yml19
-rw-r--r--spec/build/bsps/powerpc/qoriq/optcacheblktouch.yml15
-rw-r--r--spec/build/bsps/powerpc/qoriq/optcachedatal1sz.yml16
-rw-r--r--spec/build/bsps/powerpc/qoriq/optcachedatal2sz.yml19
-rw-r--r--spec/build/bsps/powerpc/qoriq/optcacheinstl1sz.yml16
-rw-r--r--spec/build/bsps/powerpc/qoriq/optcacheinstl2sz.yml19
-rw-r--r--spec/build/bsps/powerpc/qoriq/optchipnum.yml19
-rw-r--r--spec/build/bsps/powerpc/qoriq/optchipser.yml19
-rw-r--r--spec/build/bsps/powerpc/qoriq/optclktmctr.yml19
-rw-r--r--spec/build/bsps/powerpc/qoriq/optclktmr.yml19
-rw-r--r--spec/build/bsps/powerpc/qoriq/optcpucnt.yml19
-rw-r--r--spec/build/bsps/powerpc/qoriq/optetsec1phy.yml16
-rw-r--r--spec/build/bsps/powerpc/qoriq/optetsec2phy.yml16
-rw-r--r--spec/build/bsps/powerpc/qoriq/optetsec3phy.yml16
-rw-r--r--spec/build/bsps/powerpc/qoriq/optexcbooke.yml15
-rw-r--r--spec/build/bsps/powerpc/qoriq/optexcfixdhdlr.yml15
-rw-r--r--spec/build/bsps/powerpc/qoriq/optfdtmxsz.yml16
-rw-r--r--spec/build/bsps/powerpc/qoriq/optfdtro.yml15
-rw-r--r--spec/build/bsps/powerpc/qoriq/opthid0.yml19
-rw-r--r--spec/build/bsps/powerpc/qoriq/opthyp.yml18
-rw-r--r--spec/build/bsps/powerpc/qoriq/opthypguest.yml15
-rw-r--r--spec/build/bsps/powerpc/qoriq/opticombegin.yml16
-rw-r--r--spec/build/bsps/powerpc/qoriq/opticomsz.yml16
-rw-r--r--spec/build/bsps/powerpc/qoriq/optmas7.yml19
-rw-r--r--spec/build/bsps/powerpc/qoriq/optmsr.yml22
-rw-r--r--spec/build/bsps/powerpc/qoriq/optspefscr.yml19
-rw-r--r--spec/build/bsps/powerpc/qoriq/optthrdcnt.yml19
-rw-r--r--spec/build/bsps/powerpc/qoriq/opttlb1cnt.yml19
-rw-r--r--spec/build/bsps/powerpc/qoriq/optuart0en.yml18
-rw-r--r--spec/build/bsps/powerpc/qoriq/optuart1en.yml18
-rw-r--r--spec/build/bsps/powerpc/qoriq/optuartbrg0en.yml15
-rw-r--r--spec/build/bsps/powerpc/qoriq/optuartbrg1en.yml21
-rw-r--r--spec/build/bsps/powerpc/qoriq/optuartbrgmas.yml16
-rw-r--r--spec/build/bsps/powerpc/qoriq/optuartbrgpri.yml16
-rw-r--r--spec/build/bsps/powerpc/qoriq/optuartbrgslv.yml16
-rw-r--r--spec/build/bsps/powerpc/qoriq/optuartirq.yml15
-rw-r--r--spec/build/bsps/powerpc/qoriq/start.yml14
-rw-r--r--spec/build/bsps/powerpc/ss555/abi.yml18
-rw-r--r--spec/build/bsps/powerpc/ss555/bspss555.yml81
-rw-r--r--spec/build/bsps/powerpc/ss555/optconminor.yml16
-rw-r--r--spec/build/bsps/powerpc/ss555/optprintkminor.yml16
-rw-r--r--spec/build/bsps/powerpc/ss555/optuartsiomode.yml15
-rw-r--r--spec/build/bsps/powerpc/ss555/optuartsterm.yml15
-rw-r--r--spec/build/bsps/powerpc/ss555/optwdgtimeout.yml16
-rw-r--r--spec/build/bsps/powerpc/ss555/start.yml14
-rw-r--r--spec/build/bsps/powerpc/start.yml14
-rw-r--r--spec/build/bsps/powerpc/t32mppc/abi.yml20
-rw-r--r--spec/build/bsps/powerpc/t32mppc/bspt32mppc.yml70
-rw-r--r--spec/build/bsps/powerpc/t32mppc/objsmp.yml15
-rw-r--r--spec/build/bsps/powerpc/t32mppc/optexcbooke.yml15
-rw-r--r--spec/build/bsps/powerpc/t32mppc/optexcfixdhdlr.yml15
-rw-r--r--spec/build/bsps/powerpc/t32mppc/start.yml14
-rw-r--r--spec/build/bsps/powerpc/tqm8xx/abi.yml22
-rw-r--r--spec/build/bsps/powerpc/tqm8xx/bsppghplus.yml19
-rw-r--r--spec/build/bsps/powerpc/tqm8xx/bspstk8xx.yml19
-rw-r--r--spec/build/bsps/powerpc/tqm8xx/grp.yml56
-rw-r--r--spec/build/bsps/powerpc/tqm8xx/obj.yml49
-rw-r--r--spec/build/bsps/powerpc/tqm8xx/objnet.yml17
-rw-r--r--spec/build/bsps/powerpc/tqm8xx/optconchn.yml16
-rw-r--r--spec/build/bsps/powerpc/tqm8xx/optconscc1.yml16
-rw-r--r--spec/build/bsps/powerpc/tqm8xx/optconscc2.yml16
-rw-r--r--spec/build/bsps/powerpc/tqm8xx/optconscc3.yml16
-rw-r--r--spec/build/bsps/powerpc/tqm8xx/optconscc4.yml16
-rw-r--r--spec/build/bsps/powerpc/tqm8xx/optconsmc1.yml22
-rw-r--r--spec/build/bsps/powerpc/tqm8xx/optconsmc2.yml19
-rw-r--r--spec/build/bsps/powerpc/tqm8xx/optnetfec.yml18
-rw-r--r--spec/build/bsps/powerpc/tqm8xx/optnetscc.yml18
-rw-r--r--spec/build/bsps/powerpc/tqm8xx/optprintkchn.yml16
-rw-r--r--spec/build/bsps/powerpc/tqm8xx/start.yml14
-rw-r--r--spec/build/bsps/powerpc/vecentry.yml14
-rw-r--r--spec/build/bsps/powerpc/virtex/abi.yml20
-rw-r--r--spec/build/bsps/powerpc/virtex/bspvirtex.yml86
-rw-r--r--spec/build/bsps/powerpc/virtex/linkcmds.yml45
-rw-r--r--spec/build/bsps/powerpc/virtex/objnet.yml16
-rw-r--r--spec/build/bsps/powerpc/virtex/optconirq.yml15
-rw-r--r--spec/build/bsps/powerpc/virtex/optfastramlen.yml18
-rw-r--r--spec/build/bsps/powerpc/virtex/optfastramorg.yml18
-rw-r--r--spec/build/bsps/powerpc/virtex/optramlen.yml18
-rw-r--r--spec/build/bsps/powerpc/virtex/optramorg.yml18
-rw-r--r--spec/build/bsps/powerpc/virtex/optresetlen.yml17
-rw-r--r--spec/build/bsps/powerpc/virtex/optresetorg.yml18
-rw-r--r--spec/build/bsps/powerpc/virtex/optxparam.yml16
-rw-r--r--spec/build/bsps/powerpc/virtex/start.yml14
-rw-r--r--spec/build/bsps/powerpc/virtex4/abi.yml18
-rw-r--r--spec/build/bsps/powerpc/virtex4/bspvirtex4.yml70
-rw-r--r--spec/build/bsps/powerpc/virtex4/optppccachedata.yml15
-rw-r--r--spec/build/bsps/powerpc/virtex4/optsprg.yml15
-rw-r--r--spec/build/bsps/powerpc/virtex4/optvecbase.yml16
-rw-r--r--spec/build/bsps/powerpc/virtex4/start.yml14
-rw-r--r--spec/build/bsps/powerpc/virtex5/abi.yml19
-rw-r--r--spec/build/bsps/powerpc/virtex5/bspvirtex5.yml71
-rw-r--r--spec/build/bsps/powerpc/virtex5/optppccachedata.yml15
-rw-r--r--spec/build/bsps/powerpc/virtex5/optsprg.yml15
-rw-r--r--spec/build/bsps/powerpc/virtex5/optvecbase.yml16
-rw-r--r--spec/build/bsps/powerpc/virtex5/start.yml14
-rw-r--r--spec/build/bsps/riscv/griscv/abi.yml38
-rw-r--r--spec/build/bsps/riscv/griscv/bspgriscv.yml19
-rw-r--r--spec/build/bsps/riscv/griscv/bspgrv32i.yml19
-rw-r--r--spec/build/bsps/riscv/griscv/bspgrv32im.yml19
-rw-r--r--spec/build/bsps/riscv/griscv/bspgrv32imac.yml19
-rw-r--r--spec/build/bsps/riscv/griscv/bspgrv32imafdc.yml19
-rw-r--r--spec/build/bsps/riscv/griscv/grp.yml46
-rw-r--r--spec/build/bsps/riscv/griscv/obj.yml36
-rw-r--r--spec/build/bsps/riscv/griscv/objsmp.yml15
-rw-r--r--spec/build/bsps/riscv/griscv/optextirqmax.yml16
-rw-r--r--spec/build/bsps/riscv/grp.yml15
-rw-r--r--spec/build/bsps/riscv/linkcmds.yml29
-rw-r--r--spec/build/bsps/riscv/linkcmdsbase.yml401
-rw-r--r--spec/build/bsps/riscv/optrambegin.yml24
-rw-r--r--spec/build/bsps/riscv/optramsize.yml21
-rw-r--r--spec/build/bsps/riscv/riscv/abi.yml79
-rw-r--r--spec/build/bsps/riscv/riscv/bspfrdme310arty.yml19
-rw-r--r--spec/build/bsps/riscv/riscv/bsprv32i.yml19
-rw-r--r--spec/build/bsps/riscv/riscv/bsprv32iac.yml19
-rw-r--r--spec/build/bsps/riscv/riscv/bsprv32im.yml19
-rw-r--r--spec/build/bsps/riscv/riscv/bsprv32imac.yml19
-rw-r--r--spec/build/bsps/riscv/riscv/bsprv32imafc.yml19
-rw-r--r--spec/build/bsps/riscv/riscv/bsprv32imafd.yml19
-rw-r--r--spec/build/bsps/riscv/riscv/bsprv32imafdc.yml19
-rw-r--r--spec/build/bsps/riscv/riscv/bsprv64imac.yml19
-rw-r--r--spec/build/bsps/riscv/riscv/bsprv64imacmedany.yml19
-rw-r--r--spec/build/bsps/riscv/riscv/bsprv64imafd.yml19
-rw-r--r--spec/build/bsps/riscv/riscv/bsprv64imafdc.yml19
-rw-r--r--spec/build/bsps/riscv/riscv/bsprv64imafdcmedany.yml19
-rw-r--r--spec/build/bsps/riscv/riscv/bsprv64imafdmedany.yml19
-rw-r--r--spec/build/bsps/riscv/riscv/grp.yml58
-rw-r--r--spec/build/bsps/riscv/riscv/obj.yml41
-rw-r--r--spec/build/bsps/riscv/riscv/objsmp.yml15
-rw-r--r--spec/build/bsps/riscv/riscv/optextirqmax.yml16
-rw-r--r--spec/build/bsps/riscv/riscv/optfdtcpyro.yml15
-rw-r--r--spec/build/bsps/riscv/riscv/optfdtmxsz.yml16
-rw-r--r--spec/build/bsps/riscv/riscv/optfdtro.yml15
-rw-r--r--spec/build/bsps/riscv/riscv/optfdtuboot.yml15
-rw-r--r--spec/build/bsps/riscv/riscv/optfrdme310arty.yml18
-rw-r--r--spec/build/bsps/riscv/riscv/opthtif.yml15
-rw-r--r--spec/build/bsps/riscv/riscv/optns16550max.yml19
-rw-r--r--spec/build/bsps/riscv/start.yml14
-rw-r--r--spec/build/bsps/sh/gensh1/abi.yml17
-rw-r--r--spec/build/bsps/sh/gensh1/bspgensh1.yml69
-rw-r--r--spec/build/bsps/sh/gensh1/optcpuclk.yml16
-rw-r--r--spec/build/bsps/sh/gensh1/optlowinit.yml15
-rw-r--r--spec/build/bsps/sh/gensh1/start.yml14
-rw-r--r--spec/build/bsps/sh/gensh1/tstgensh1.yml20
-rw-r--r--spec/build/bsps/sh/gensh2/abi.yml17
-rw-r--r--spec/build/bsps/sh/gensh2/bspgensh2.yml77
-rw-r--r--spec/build/bsps/sh/gensh2/optcpuclk.yml16
-rw-r--r--spec/build/bsps/sh/gensh2/optevb.yml15
-rw-r--r--spec/build/bsps/sh/gensh2/optlowinit.yml15
-rw-r--r--spec/build/bsps/sh/gensh2/start.yml14
-rw-r--r--spec/build/bsps/sh/gensh2/tstgensh2.yml20
-rw-r--r--spec/build/bsps/sh/gensh4/abi.yml18
-rw-r--r--spec/build/bsps/sh/gensh4/bspgensh4.yml72
-rw-r--r--spec/build/bsps/sh/gensh4/optcpuclk.yml16
-rw-r--r--spec/build/bsps/sh/gensh4/optcpydata.yml15
-rw-r--r--spec/build/bsps/sh/gensh4/optlowinit.yml15
-rw-r--r--spec/build/bsps/sh/gensh4/start.yml14
-rw-r--r--spec/build/bsps/sh/shsim/abi.yml31
-rw-r--r--spec/build/bsps/sh/shsim/bspsimsh1.yml21
-rw-r--r--spec/build/bsps/sh/shsim/bspsimsh2.yml21
-rw-r--r--spec/build/bsps/sh/shsim/bspsimsh2e.yml21
-rw-r--r--spec/build/bsps/sh/shsim/bspsimsh4.yml21
-rw-r--r--spec/build/bsps/sh/shsim/grp.yml28
-rw-r--r--spec/build/bsps/sh/shsim/obj.yml41
-rw-r--r--spec/build/bsps/sh/shsim/optcpuclk.yml16
-rw-r--r--spec/build/bsps/sh/shsim/optlowinit.yml15
-rw-r--r--spec/build/bsps/sh/shsim/start.yml14
-rw-r--r--spec/build/bsps/sh/shsim/tstsimsh1.yml24
-rw-r--r--spec/build/bsps/sh/shsim/tstsimsh2.yml24
-rw-r--r--spec/build/bsps/sh/shsim/tstsimsh2e.yml24
-rw-r--r--spec/build/bsps/sh/shsim/tstsimsh4.yml24
-rw-r--r--spec/build/bsps/sparc/erc32/abi.yml17
-rw-r--r--spec/build/bsps/sparc/erc32/bsperc32.yml76
-rw-r--r--spec/build/bsps/sparc/erc32/objnet.yml16
-rw-r--r--spec/build/bsps/sparc/erc32/objsmp.yml15
-rw-r--r--spec/build/bsps/sparc/erc32/optconirq.yml16
-rw-r--r--spec/build/bsps/sparc/erc32/optpwrdwnhlt.yml15
-rw-r--r--spec/build/bsps/sparc/grp.yml19
-rw-r--r--spec/build/bsps/sparc/leon2/abi.yml22
-rw-r--r--spec/build/bsps/sparc/leon2/bspat697f.yml19
-rw-r--r--spec/build/bsps/sparc/leon2/bspleon2.yml19
-rw-r--r--spec/build/bsps/sparc/leon2/grp.yml38
-rw-r--r--spec/build/bsps/sparc/leon2/obj.yml52
-rw-r--r--spec/build/bsps/sparc/leon2/objnet.yml17
-rw-r--r--spec/build/bsps/sparc/leon2/objsmp.yml16
-rw-r--r--spec/build/bsps/sparc/leon2/optconirq.yml16
-rw-r--r--spec/build/bsps/sparc/leon2/optpwrdwnhlt.yml15
-rw-r--r--spec/build/bsps/sparc/leon3/abi.yml33
-rw-r--r--spec/build/bsps/sparc/leon3/abiclang.yml36
-rw-r--r--spec/build/bsps/sparc/leon3/bspgr712rc.yml19
-rw-r--r--spec/build/bsps/sparc/leon3/bspgr740.yml19
-rw-r--r--spec/build/bsps/sparc/leon3/bspleon3.yml19
-rw-r--r--spec/build/bsps/sparc/leon3/bsput699.yml19
-rw-r--r--spec/build/bsps/sparc/leon3/bsput700.yml19
-rw-r--r--spec/build/bsps/sparc/leon3/grp.yml46
-rw-r--r--spec/build/bsps/sparc/leon3/obj.yml62
-rw-r--r--spec/build/bsps/sparc/leon3/objmpci.yml18
-rw-r--r--spec/build/bsps/sparc/leon3/objnet.yml17
-rw-r--r--spec/build/bsps/sparc/leon3/objnetnosmp.yml18
-rw-r--r--spec/build/bsps/sparc/leon3/objsmp.yml15
-rw-r--r--spec/build/bsps/sparc/leon3/optconirq.yml16
-rw-r--r--spec/build/bsps/sparc/leon3/optleon3smp.yml15
-rw-r--r--spec/build/bsps/sparc/leon3/optpwrdwnhlt.yml15
-rw-r--r--spec/build/bsps/sparc/start.yml14
-rw-r--r--spec/build/bsps/sparc64/grp.yml58
-rw-r--r--spec/build/bsps/sparc64/niagara/abi.yml18
-rw-r--r--spec/build/bsps/sparc64/niagara/bspniagara.yml63
-rw-r--r--spec/build/bsps/sparc64/start.yml14
-rw-r--r--spec/build/bsps/sparc64/usiii/abi.yml19
-rw-r--r--spec/build/bsps/sparc64/usiii/bspusiii.yml67
-rw-r--r--spec/build/bsps/sparc64/usiii/optclkfastidle.yml15
-rw-r--r--spec/build/bsps/tst.yml23
-rw-r--r--spec/build/bsps/tstnoiconv.yml15
-rw-r--r--spec/build/bsps/tstnointrcrit.yml35
-rw-r--r--spec/build/bsps/tstnojffs2.yml21
-rw-r--r--spec/build/bsps/tstnolibdl.yml22
-rw-r--r--spec/build/bsps/tstnorfs.yml22
-rw-r--r--spec/build/bsps/tstreqtick.yml59
-rw-r--r--spec/build/bsps/tstsmallmem.yml129
-rw-r--r--spec/build/bsps/v850/gdbv850sim/abi.yml37
-rw-r--r--spec/build/bsps/v850/gdbv850sim/bspv850e1sim.yml21
-rw-r--r--spec/build/bsps/v850/gdbv850sim/bspv850e2sim.yml21
-rw-r--r--spec/build/bsps/v850/gdbv850sim/bspv850e2v3sim.yml21
-rw-r--r--spec/build/bsps/v850/gdbv850sim/bspv850esim.yml21
-rw-r--r--spec/build/bsps/v850/gdbv850sim/bspv850essim.yml21
-rw-r--r--spec/build/bsps/v850/gdbv850sim/bspv850sim.yml21
-rw-r--r--spec/build/bsps/v850/gdbv850sim/grp.yml24
-rw-r--r--spec/build/bsps/v850/gdbv850sim/obj.yml37
-rw-r--r--spec/build/bsps/v850/gdbv850sim/start.yml14
-rw-r--r--spec/build/bsps/x86_64/amd64/abi.yml19
-rw-r--r--spec/build/bsps/x86_64/amd64/bspamd64.yml57
-rw-r--r--spec/build/bsps/x86_64/amd64/start.yml14
-rw-r--r--spec/build/bsps/x86_64/grp.yml18
-rw-r--r--spec/build/cpukit/cfgattrgetaff.yml14
-rw-r--r--spec/build/cpukit/cfgattrgetgrdsz.yml14
-rw-r--r--spec/build/cpukit/cfgattrgetstack.yml14
-rw-r--r--spec/build/cpukit/cfgattrsetaff.yml14
-rw-r--r--spec/build/cpukit/cfgattrsetgrdsz.yml14
-rw-r--r--spec/build/cpukit/cfgattrsetstack.yml14
-rw-r--r--spec/build/cpukit/cfgcfghdr.yml14
-rw-r--r--spec/build/cpukit/cfgcleanupctx.yml14
-rw-r--r--spec/build/cpukit/cfggetaff.yml14
-rw-r--r--spec/build/cpukit/cfggetattr.yml14
-rw-r--r--spec/build/cpukit/cfghdr.yml69
-rw-r--r--spec/build/cpukit/cfginttypes.yml14
-rw-r--r--spec/build/cpukit/cfgmemory.yml14
-rw-r--r--spec/build/cpukit/cfgnewlib.yml14
-rw-r--r--spec/build/cpukit/cfgpmtxceilcnst.yml14
-rw-r--r--spec/build/cpukit/cfgprionode.yml14
-rw-r--r--spec/build/cpukit/cfgpshdprmcnst.yml14
-rw-r--r--spec/build/cpukit/cfgrcmd.yml14
-rw-r--r--spec/build/cpukit/cfgsetaff.yml14
-rw-r--r--spec/build/cpukit/cfgstdatomic.yml14
-rw-r--r--spec/build/cpukit/cfgstdint.yml14
-rw-r--r--spec/build/cpukit/cfgstdlib.yml14
-rw-r--r--spec/build/cpukit/cfgstring.yml14
-rw-r--r--spec/build/cpukit/cfgstrings.yml14
-rw-r--r--spec/build/cpukit/cfgsysstat.yml14
-rw-r--r--spec/build/cpukit/cfgsystypes.yml14
-rw-r--r--spec/build/cpukit/cfgszoff.yml15
-rw-r--r--spec/build/cpukit/cfgszsize.yml14
-rw-r--r--spec/build/cpukit/cfgsztime.yml15
-rw-r--r--spec/build/cpukit/cfgunistd.yml14
-rw-r--r--spec/build/cpukit/cpuarm.yml62
-rw-r--r--spec/build/cpukit/cpubfin.yml37
-rw-r--r--spec/build/cpukit/cpui386.yml35
-rw-r--r--spec/build/cpukit/cpulm32.yml33
-rw-r--r--spec/build/cpukit/cpum68k.yml38
-rw-r--r--spec/build/cpukit/cpumips.yml34
-rw-r--r--spec/build/cpukit/cpumoxie.yml32
-rw-r--r--spec/build/cpukit/cpunios2.yml53
-rw-r--r--spec/build/cpukit/cpuopts.yml67
-rw-r--r--spec/build/cpukit/cpuor1k.yml34
-rw-r--r--spec/build/cpukit/cpupowerpc.yml35
-rw-r--r--spec/build/cpukit/cpuriscv.yml37
-rw-r--r--spec/build/cpukit/cpush.yml30
-rw-r--r--spec/build/cpukit/cpusparc.yml41
-rw-r--r--spec/build/cpukit/cpusparc64.yml31
-rw-r--r--spec/build/cpukit/cpuv850.yml33
-rw-r--r--spec/build/cpukit/cpux8664.yml34
-rw-r--r--spec/build/cpukit/grp.yml42
-rw-r--r--spec/build/cpukit/libdebugger.yml27
-rw-r--r--spec/build/cpukit/libftpd.yml20
-rw-r--r--spec/build/cpukit/libftpfs.yml19
-rw-r--r--spec/build/cpukit/libjffs2.yml38
-rw-r--r--spec/build/cpukit/libmghttpd.yml19
-rw-r--r--spec/build/cpukit/libnfs.yml23
-rw-r--r--spec/build/cpukit/libpppd.yml33
-rw-r--r--spec/build/cpukit/librtemscpu.yml1577
-rw-r--r--spec/build/cpukit/librtemsdfltcfg.yml16
-rw-r--r--spec/build/cpukit/librtemstest.yml39
-rw-r--r--spec/build/cpukit/libtelnetd.yml24
-rw-r--r--spec/build/cpukit/libtftpfs.yml20
-rw-r--r--spec/build/cpukit/libz.yml34
-rw-r--r--spec/build/cpukit/objdbgarm.yml15
-rw-r--r--spec/build/cpukit/objdbgi386.yml15
-rw-r--r--spec/build/cpukit/objdl.yml71
-rw-r--r--spec/build/cpukit/objdlarm.yml15
-rw-r--r--spec/build/cpukit/objdli386.yml15
-rw-r--r--spec/build/cpukit/objdlm68k.yml15
-rw-r--r--spec/build/cpukit/objdlmips.yml15
-rw-r--r--spec/build/cpukit/objdlmoxie.yml15
-rw-r--r--spec/build/cpukit/objdlpowerpc.yml15
-rw-r--r--spec/build/cpukit/objdlsparc.yml15
-rw-r--r--spec/build/cpukit/objdrvmgr.yml40
-rw-r--r--spec/build/cpukit/objgnat.yml16
-rw-r--r--spec/build/cpukit/objmpci.yml26
-rw-r--r--spec/build/cpukit/objnet.yml315
-rw-r--r--spec/build/cpukit/objpci.yml48
-rw-r--r--spec/build/cpukit/objpsxsgnl.yml52
-rw-r--r--spec/build/cpukit/objshell.yml115
-rw-r--r--spec/build/cpukit/objsmp.yml31
-rw-r--r--spec/build/cpukit/objutf8.yml17
-rw-r--r--spec/build/cpukit/optada.yml16
-rw-r--r--spec/build/cpukit/optarchbits.yml28
-rw-r--r--spec/build/cpukit/optarflags.yml17
-rw-r--r--spec/build/cpukit/optclang.yml45
-rw-r--r--spec/build/cpukit/optdebug.yml16
-rw-r--r--spec/build/cpukit/optdrvmgr.yml16
-rw-r--r--spec/build/cpukit/optgcc.yml40
-rw-r--r--spec/build/cpukit/optincludes.yml15
-rw-r--r--spec/build/cpukit/optinstall.yml21
-rw-r--r--spec/build/cpukit/optlibdl.yml21
-rw-r--r--spec/build/cpukit/optmpci.yml16
-rw-r--r--spec/build/cpukit/optnet.yml16
-rw-r--r--spec/build/cpukit/optnewlib.yml16
-rw-r--r--spec/build/cpukit/optparavirt.yml16
-rw-r--r--spec/build/cpukit/optposix.yml16
-rw-r--r--spec/build/cpukit/optsmp.yml16
-rw-r--r--spec/build/cpukit/optszblkcnt.yml15
-rw-r--r--spec/build/cpukit/optszblksize.yml15
-rw-r--r--spec/build/cpukit/optszmode.yml15
-rw-r--r--spec/build/cpukit/optszoff.yml15
-rw-r--r--spec/build/cpukit/optsztime.yml15
-rw-r--r--spec/build/cpukit/optvermaj.yml14
-rw-r--r--spec/build/cpukit/optvermin.yml14
-rw-r--r--spec/build/cpukit/optverrev.yml14
-rw-r--r--spec/build/cpukit/optversion.yml25
-rw-r--r--spec/build/cpukit/optwarn.yml19
-rw-r--r--spec/build/cpukit/optwarncc.yml21
-rw-r--r--spec/build/cpukit/optwarncxx.yml17
-rw-r--r--spec/build/cpukit/vckey.yml12
-rw-r--r--spec/build/grp.yml16
-rw-r--r--spec/build/testsuites/ada/adabasesp.yml23
-rw-r--r--spec/build/testsuites/ada/adahello.yml23
-rw-r--r--spec/build/testsuites/ada/adamp01node1.yml25
-rw-r--r--spec/build/testsuites/ada/adamp01node2.yml25
-rw-r--r--spec/build/testsuites/ada/adamp03node1.yml25
-rw-r--r--spec/build/testsuites/ada/adamp03node2.yml25
-rw-r--r--spec/build/testsuites/ada/adamp04node1.yml25
-rw-r--r--spec/build/testsuites/ada/adamp04node2.yml25
-rw-r--r--spec/build/testsuites/ada/adamp05node1.yml25
-rw-r--r--spec/build/testsuites/ada/adamp05node2.yml25
-rw-r--r--spec/build/testsuites/ada/adamp06node1.yml25
-rw-r--r--spec/build/testsuites/ada/adamp06node2.yml25
-rw-r--r--spec/build/testsuites/ada/adamp07node1.yml25
-rw-r--r--spec/build/testsuites/ada/adamp07node2.yml25
-rw-r--r--spec/build/testsuites/ada/adamp08node1.yml25
-rw-r--r--spec/build/testsuites/ada/adamp08node2.yml25
-rw-r--r--spec/build/testsuites/ada/adamp09node1.yml25
-rw-r--r--spec/build/testsuites/ada/adamp09node2.yml25
-rw-r--r--spec/build/testsuites/ada/adamp10node1.yml25
-rw-r--r--spec/build/testsuites/ada/adamp10node2.yml25
-rw-r--r--spec/build/testsuites/ada/adamp11node1.yml25
-rw-r--r--spec/build/testsuites/ada/adamp11node2.yml25
-rw-r--r--spec/build/testsuites/ada/adamp12node1.yml25
-rw-r--r--spec/build/testsuites/ada/adamp12node2.yml25
-rw-r--r--spec/build/testsuites/ada/adamp13node1.yml25
-rw-r--r--spec/build/testsuites/ada/adamp13node2.yml25
-rw-r--r--spec/build/testsuites/ada/adamp14node1.yml25
-rw-r--r--spec/build/testsuites/ada/adamp14node2.yml25
-rw-r--r--spec/build/testsuites/ada/adansecs.yml23
-rw-r--r--spec/build/testsuites/ada/adasp01.yml23
-rw-r--r--spec/build/testsuites/ada/adasp02.yml23
-rw-r--r--spec/build/testsuites/ada/adasp03.yml23
-rw-r--r--spec/build/testsuites/ada/adasp04.yml23
-rw-r--r--spec/build/testsuites/ada/adasp05.yml23
-rw-r--r--spec/build/testsuites/ada/adasp06.yml23
-rw-r--r--spec/build/testsuites/ada/adasp07.yml23
-rw-r--r--spec/build/testsuites/ada/adasp08.yml23
-rw-r--r--spec/build/testsuites/ada/adasp09.yml23
-rw-r--r--spec/build/testsuites/ada/adasp11.yml23
-rw-r--r--spec/build/testsuites/ada/adasp12.yml23
-rw-r--r--spec/build/testsuites/ada/adasp13.yml23
-rw-r--r--spec/build/testsuites/ada/adasp14.yml23
-rw-r--r--spec/build/testsuites/ada/adasp15.yml23
-rw-r--r--spec/build/testsuites/ada/adasp16.yml23
-rw-r--r--spec/build/testsuites/ada/adasp17.yml23
-rw-r--r--spec/build/testsuites/ada/adasp19.yml23
-rw-r--r--spec/build/testsuites/ada/adasp20.yml23
-rw-r--r--spec/build/testsuites/ada/adasp22.yml23
-rw-r--r--spec/build/testsuites/ada/adasp23.yml23
-rw-r--r--spec/build/testsuites/ada/adasp24.yml23
-rw-r--r--spec/build/testsuites/ada/adasp25.yml23
-rw-r--r--spec/build/testsuites/ada/adaspatcb01.yml24
-rw-r--r--spec/build/testsuites/ada/adaspname01.yml24
-rw-r--r--spec/build/testsuites/ada/adaticker.yml23
-rw-r--r--spec/build/testsuites/ada/adatm01.yml23
-rw-r--r--spec/build/testsuites/ada/adatm02.yml23
-rw-r--r--spec/build/testsuites/ada/adatm03.yml23
-rw-r--r--spec/build/testsuites/ada/adatm04.yml23
-rw-r--r--spec/build/testsuites/ada/adatm05.yml23
-rw-r--r--spec/build/testsuites/ada/adatm06.yml23
-rw-r--r--spec/build/testsuites/ada/adatm07.yml23
-rw-r--r--spec/build/testsuites/ada/adatm08.yml23
-rw-r--r--spec/build/testsuites/ada/adatm09.yml23
-rw-r--r--spec/build/testsuites/ada/adatm10.yml23
-rw-r--r--spec/build/testsuites/ada/adatm11.yml23
-rw-r--r--spec/build/testsuites/ada/adatm12.yml23
-rw-r--r--spec/build/testsuites/ada/adatm13.yml23
-rw-r--r--spec/build/testsuites/ada/adatm14.yml23
-rw-r--r--spec/build/testsuites/ada/adatm15.yml23
-rw-r--r--spec/build/testsuites/ada/adatm16.yml23
-rw-r--r--spec/build/testsuites/ada/adatm17.yml23
-rw-r--r--spec/build/testsuites/ada/adatm18.yml23
-rw-r--r--spec/build/testsuites/ada/adatm19.yml23
-rw-r--r--spec/build/testsuites/ada/adatm20.yml23
-rw-r--r--spec/build/testsuites/ada/adatm21.yml23
-rw-r--r--spec/build/testsuites/ada/adatm22.yml23
-rw-r--r--spec/build/testsuites/ada/adatm23.yml23
-rw-r--r--spec/build/testsuites/ada/adatm24.yml23
-rw-r--r--spec/build/testsuites/ada/adatm25.yml23
-rw-r--r--spec/build/testsuites/ada/adatm28.yml23
-rw-r--r--spec/build/testsuites/ada/adatm29.yml23
-rw-r--r--spec/build/testsuites/ada/adatmck.yml23
-rw-r--r--spec/build/testsuites/ada/grp.yml186
-rw-r--r--spec/build/testsuites/ada/optgnat.yml15
-rw-r--r--spec/build/testsuites/benchmarks/dhrystone.yml21
-rw-r--r--spec/build/testsuites/benchmarks/grp.yml24
-rw-r--r--spec/build/testsuites/benchmarks/linpack.yml21
-rw-r--r--spec/build/testsuites/benchmarks/whetstone.yml21
-rw-r--r--spec/build/testsuites/fstests/fsbdpart01.yml19
-rw-r--r--spec/build/testsuites/fstests/fsclose01.yml19
-rw-r--r--spec/build/testsuites/fstests/fsdosfsformat01.yml19
-rw-r--r--spec/build/testsuites/fstests/fsdosfsname01.yml19
-rw-r--r--spec/build/testsuites/fstests/fsdosfsname02.yml19
-rw-r--r--spec/build/testsuites/fstests/fsdosfssync01.yml19
-rw-r--r--spec/build/testsuites/fstests/fsdosfswrite01.yml19
-rw-r--r--spec/build/testsuites/fstests/fsfseeko01.yml19
-rw-r--r--spec/build/testsuites/fstests/fsimfsconfig01.yml19
-rw-r--r--spec/build/testsuites/fstests/fsimfsconfig02.yml19
-rw-r--r--spec/build/testsuites/fstests/fsimfsconfig03.yml19
-rw-r--r--spec/build/testsuites/fstests/fsimfsgeneric01.yml19
-rw-r--r--spec/build/testsuites/fstests/fsjffs2gc01.yml23
-rw-r--r--spec/build/testsuites/fstests/fsnofs01.yml19
-rw-r--r--spec/build/testsuites/fstests/fsrfsbitmap01.yml23
-rw-r--r--spec/build/testsuites/fstests/fsrofs01.yml19
-rw-r--r--spec/build/testsuites/fstests/grp.yml143
-rw-r--r--spec/build/testsuites/fstests/imfsfserror.yml21
-rw-r--r--spec/build/testsuites/fstests/imfsfslink.yml21
-rw-r--r--spec/build/testsuites/fstests/imfsfspatheval.yml21
-rw-r--r--spec/build/testsuites/fstests/imfsfspermission.yml21
-rw-r--r--spec/build/testsuites/fstests/imfsfsrdwr.yml21
-rw-r--r--spec/build/testsuites/fstests/imfsfsscandir01.yml21
-rw-r--r--spec/build/testsuites/fstests/imfsfssymlink.yml21
-rw-r--r--spec/build/testsuites/fstests/imfsfstime.yml21
-rw-r--r--spec/build/testsuites/fstests/jffs2fserror.yml22
-rw-r--r--spec/build/testsuites/fstests/jffs2fslink.yml22
-rw-r--r--spec/build/testsuites/fstests/jffs2fspatheval.yml22
-rw-r--r--spec/build/testsuites/fstests/jffs2fspermission.yml22
-rw-r--r--spec/build/testsuites/fstests/jffs2fsrdwr.yml22
-rw-r--r--spec/build/testsuites/fstests/jffs2fsscandir01.yml22
-rw-r--r--spec/build/testsuites/fstests/jffs2fssymlink.yml22
-rw-r--r--spec/build/testsuites/fstests/jffs2fstime.yml22
-rw-r--r--spec/build/testsuites/fstests/libdosfs.yml19
-rw-r--r--spec/build/testsuites/fstests/libimfs.yml18
-rw-r--r--spec/build/testsuites/fstests/libjffs2.yml18
-rw-r--r--spec/build/testsuites/fstests/libmimfs.yml18
-rw-r--r--spec/build/testsuites/fstests/librfs.yml19
-rw-r--r--spec/build/testsuites/fstests/mdosfsfserror.yml21
-rw-r--r--spec/build/testsuites/fstests/mdosfsfspatheval.yml21
-rw-r--r--spec/build/testsuites/fstests/mdosfsfsrdwr.yml21
-rw-r--r--spec/build/testsuites/fstests/mdosfsfsscandir01.yml21
-rw-r--r--spec/build/testsuites/fstests/mdosfsfsstatvfs.yml21
-rw-r--r--spec/build/testsuites/fstests/mdosfsfstime.yml21
-rw-r--r--spec/build/testsuites/fstests/mimfsfserror.yml21
-rw-r--r--spec/build/testsuites/fstests/mimfsfslink.yml21
-rw-r--r--spec/build/testsuites/fstests/mimfsfspatheval.yml21
-rw-r--r--spec/build/testsuites/fstests/mimfsfspermission.yml21
-rw-r--r--spec/build/testsuites/fstests/mimfsfsrdwr.yml21
-rw-r--r--spec/build/testsuites/fstests/mimfsfsrename.yml21
-rw-r--r--spec/build/testsuites/fstests/mimfsfsscandir01.yml21
-rw-r--r--spec/build/testsuites/fstests/mimfsfssymlink.yml21
-rw-r--r--spec/build/testsuites/fstests/mimfsfstime.yml21
-rw-r--r--spec/build/testsuites/fstests/mrfsfserror.yml21
-rw-r--r--spec/build/testsuites/fstests/mrfsfsfpathconf.yml21
-rw-r--r--spec/build/testsuites/fstests/mrfsfslink.yml21
-rw-r--r--spec/build/testsuites/fstests/mrfsfspatheval.yml21
-rw-r--r--spec/build/testsuites/fstests/mrfsfspermission.yml21
-rw-r--r--spec/build/testsuites/fstests/mrfsfsrdwr.yml21
-rw-r--r--spec/build/testsuites/fstests/mrfsfsrename.yml21
-rw-r--r--spec/build/testsuites/fstests/mrfsfsscandir01.yml21
-rw-r--r--spec/build/testsuites/fstests/mrfsfssymlink.yml21
-rw-r--r--spec/build/testsuites/fstests/mrfsfstime.yml21
-rw-r--r--spec/build/testsuites/grp.yml69
-rw-r--r--spec/build/testsuites/libtests/block01.yml19
-rw-r--r--spec/build/testsuites/libtests/block02.yml19
-rw-r--r--spec/build/testsuites/libtests/block03.yml19
-rw-r--r--spec/build/testsuites/libtests/block04.yml19
-rw-r--r--spec/build/testsuites/libtests/block05.yml19
-rw-r--r--spec/build/testsuites/libtests/block06.yml19
-rw-r--r--spec/build/testsuites/libtests/block07.yml19
-rw-r--r--spec/build/testsuites/libtests/block08.yml34
-rw-r--r--spec/build/testsuites/libtests/block09.yml19
-rw-r--r--spec/build/testsuites/libtests/block10.yml19
-rw-r--r--spec/build/testsuites/libtests/block11.yml19
-rw-r--r--spec/build/testsuites/libtests/block12.yml19
-rw-r--r--spec/build/testsuites/libtests/block13.yml19
-rw-r--r--spec/build/testsuites/libtests/block14.yml19
-rw-r--r--spec/build/testsuites/libtests/block15.yml19
-rw-r--r--spec/build/testsuites/libtests/block16.yml19
-rw-r--r--spec/build/testsuites/libtests/block17.yml19
-rw-r--r--spec/build/testsuites/libtests/bspcmdline01.yml19
-rw-r--r--spec/build/testsuites/libtests/calloc.yml20
-rw-r--r--spec/build/testsuites/libtests/capture01.yml20
-rw-r--r--spec/build/testsuites/libtests/clockgettime.yml20
-rw-r--r--spec/build/testsuites/libtests/close.yml20
-rw-r--r--spec/build/testsuites/libtests/complex.yml23
-rw-r--r--spec/build/testsuites/libtests/cpuuse.yml23
-rw-r--r--spec/build/testsuites/libtests/crypt01.yml19
-rw-r--r--spec/build/testsuites/libtests/debugger01.yml23
-rw-r--r--spec/build/testsuites/libtests/defaultconfig01.yml20
-rw-r--r--spec/build/testsuites/libtests/devfs01.yml19
-rw-r--r--spec/build/testsuites/libtests/devfs04.yml20
-rw-r--r--spec/build/testsuites/libtests/deviceio01.yml20
-rw-r--r--spec/build/testsuites/libtests/devnullfatal01.yml19
-rw-r--r--spec/build/testsuites/libtests/dl01.yml38
-rw-r--r--spec/build/testsuites/libtests/dl02.yml39
-rw-r--r--spec/build/testsuites/libtests/dl03.yml23
-rw-r--r--spec/build/testsuites/libtests/dl04.yml39
-rw-r--r--spec/build/testsuites/libtests/dl05.yml40
-rw-r--r--spec/build/testsuites/libtests/dl06.yml48
-rw-r--r--spec/build/testsuites/libtests/dl07.yml42
-rw-r--r--spec/build/testsuites/libtests/dl08.yml47
-rw-r--r--spec/build/testsuites/libtests/dl09.yml42
-rw-r--r--spec/build/testsuites/libtests/dl10.yml47
-rw-r--r--spec/build/testsuites/libtests/dumpbuf01.yml19
-rw-r--r--spec/build/testsuites/libtests/dup2.yml20
-rw-r--r--spec/build/testsuites/libtests/exit01.yml19
-rw-r--r--spec/build/testsuites/libtests/exit02.yml19
-rw-r--r--spec/build/testsuites/libtests/fcntl.yml20
-rw-r--r--spec/build/testsuites/libtests/flashdisk01.yml20
-rw-r--r--spec/build/testsuites/libtests/flockfile.yml20
-rw-r--r--spec/build/testsuites/libtests/fork.yml20
-rw-r--r--spec/build/testsuites/libtests/free.yml20
-rw-r--r--spec/build/testsuites/libtests/fstat.yml20
-rw-r--r--spec/build/testsuites/libtests/ftp01.yml23
-rw-r--r--spec/build/testsuites/libtests/ftrylockfile.yml20
-rw-r--r--spec/build/testsuites/libtests/funlockfile.yml20
-rw-r--r--spec/build/testsuites/libtests/getentropy01.yml19
-rw-r--r--spec/build/testsuites/libtests/getlogin.yml20
-rw-r--r--spec/build/testsuites/libtests/getpwnam.yml20
-rw-r--r--spec/build/testsuites/libtests/getpwuid.yml20
-rw-r--r--spec/build/testsuites/libtests/gettimeofday.yml20
-rw-r--r--spec/build/testsuites/libtests/getuid.yml20
-rw-r--r--spec/build/testsuites/libtests/grp.yml320
-rw-r--r--spec/build/testsuites/libtests/gxx01.yml19
-rw-r--r--spec/build/testsuites/libtests/heapwalk.yml19
-rw-r--r--spec/build/testsuites/libtests/htonl.yml20
-rw-r--r--spec/build/testsuites/libtests/i2c01.yml19
-rw-r--r--spec/build/testsuites/libtests/iconv.yml20
-rw-r--r--spec/build/testsuites/libtests/iconvclose.yml20
-rw-r--r--spec/build/testsuites/libtests/iconvopen.yml20
-rw-r--r--spec/build/testsuites/libtests/irqs01.yml19
-rw-r--r--spec/build/testsuites/libtests/kill.yml20
-rw-r--r--spec/build/testsuites/libtests/libdl081.yml17
-rw-r--r--spec/build/testsuites/libtests/libdl082.yml18
-rw-r--r--spec/build/testsuites/libtests/libdl101.yml17
-rw-r--r--spec/build/testsuites/libtests/libdl102.yml18
-rw-r--r--spec/build/testsuites/libtests/libfdt01.yml20
-rw-r--r--spec/build/testsuites/libtests/longjmp.yml20
-rw-r--r--spec/build/testsuites/libtests/lseek.yml20
-rw-r--r--spec/build/testsuites/libtests/lstat.yml20
-rw-r--r--spec/build/testsuites/libtests/malloc.yml20
-rw-r--r--spec/build/testsuites/libtests/malloc02.yml19
-rw-r--r--spec/build/testsuites/libtests/malloc03.yml19
-rw-r--r--spec/build/testsuites/libtests/malloc04.yml19
-rw-r--r--spec/build/testsuites/libtests/malloctest.yml20
-rw-r--r--spec/build/testsuites/libtests/math.yml22
-rw-r--r--spec/build/testsuites/libtests/mathf.yml22
-rw-r--r--spec/build/testsuites/libtests/mathl.yml22
-rw-r--r--spec/build/testsuites/libtests/md501.yml19
-rw-r--r--spec/build/testsuites/libtests/mghttpd01.yml32
-rw-r--r--spec/build/testsuites/libtests/monitor.yml19
-rw-r--r--spec/build/testsuites/libtests/monitor02.yml19
-rw-r--r--spec/build/testsuites/libtests/mouse01.yml22
-rw-r--r--spec/build/testsuites/libtests/nanosleep.yml20
-rw-r--r--spec/build/testsuites/libtests/networking01.yml21
-rw-r--r--spec/build/testsuites/libtests/newlib01.yml19
-rw-r--r--spec/build/testsuites/libtests/open.yml20
-rw-r--r--spec/build/testsuites/libtests/optbin2c.yml14
-rw-r--r--spec/build/testsuites/libtests/optgzip.yml14
-rw-r--r--spec/build/testsuites/libtests/optrtemsld.yml14
-rw-r--r--spec/build/testsuites/libtests/optrtemssyms.yml14
-rw-r--r--spec/build/testsuites/libtests/optxz.yml14
-rw-r--r--spec/build/testsuites/libtests/pipe.yml20
-rw-r--r--spec/build/testsuites/libtests/posix.yml66
-rw-r--r--spec/build/testsuites/libtests/posixmemalign.yml20
-rw-r--r--spec/build/testsuites/libtests/putenvtest.yml19
-rw-r--r--spec/build/testsuites/libtests/pwdgrp01.yml19
-rw-r--r--spec/build/testsuites/libtests/pwdgrp02.yml19
-rw-r--r--spec/build/testsuites/libtests/rbheap01.yml19
-rw-r--r--spec/build/testsuites/libtests/read.yml20
-rw-r--r--spec/build/testsuites/libtests/readv.yml20
-rw-r--r--spec/build/testsuites/libtests/realloc.yml20
-rw-r--r--spec/build/testsuites/libtests/record01.yml20
-rw-r--r--spec/build/testsuites/libtests/record02.yml20
-rw-r--r--spec/build/testsuites/libtests/rtmonuse.yml21
-rw-r--r--spec/build/testsuites/libtests/setjmp.yml20
-rw-r--r--spec/build/testsuites/libtests/sha.yml19
-rw-r--r--spec/build/testsuites/libtests/shell01.yml19
-rw-r--r--spec/build/testsuites/libtests/sigaddset.yml20
-rw-r--r--spec/build/testsuites/libtests/sigdelset.yml20
-rw-r--r--spec/build/testsuites/libtests/sigemptyset.yml20
-rw-r--r--spec/build/testsuites/libtests/sigfillset.yml20
-rw-r--r--spec/build/testsuites/libtests/sigismember.yml20
-rw-r--r--spec/build/testsuites/libtests/sigprocmask.yml20
-rw-r--r--spec/build/testsuites/libtests/sparsedisk01.yml19
-rw-r--r--spec/build/testsuites/libtests/spi01.yml19
-rw-r--r--spec/build/testsuites/libtests/stackchk.yml21
-rw-r--r--spec/build/testsuites/libtests/stackchk01.yml19
-rw-r--r--spec/build/testsuites/libtests/stat.yml20
-rw-r--r--spec/build/testsuites/libtests/stringto01.yml19
-rw-r--r--spec/build/testsuites/libtests/syscall01.yml21
-rw-r--r--spec/build/testsuites/libtests/tar01.yml35
-rw-r--r--spec/build/testsuites/libtests/tar02.yml29
-rw-r--r--spec/build/testsuites/libtests/tar03.yml19
-rw-r--r--spec/build/testsuites/libtests/telnetd01.yml22
-rw-r--r--spec/build/testsuites/libtests/termios.yml19
-rw-r--r--spec/build/testsuites/libtests/termios01.yml20
-rw-r--r--spec/build/testsuites/libtests/termios02.yml19
-rw-r--r--spec/build/testsuites/libtests/termios03.yml20
-rw-r--r--spec/build/testsuites/libtests/termios04.yml20
-rw-r--r--spec/build/testsuites/libtests/termios05.yml20
-rw-r--r--spec/build/testsuites/libtests/termios06.yml21
-rw-r--r--spec/build/testsuites/libtests/termios07.yml20
-rw-r--r--spec/build/testsuites/libtests/termios08.yml20
-rw-r--r--spec/build/testsuites/libtests/termios09.yml19
-rw-r--r--spec/build/testsuites/libtests/termios10.yml21
-rw-r--r--spec/build/testsuites/libtests/termios11.yml21
-rw-r--r--spec/build/testsuites/libtests/top.yml22
-rw-r--r--spec/build/testsuites/libtests/ttest01.yml36
-rw-r--r--spec/build/testsuites/libtests/ttest02.yml19
-rw-r--r--spec/build/testsuites/libtests/tztest.yml19
-rw-r--r--spec/build/testsuites/libtests/uid01.yml22
-rw-r--r--spec/build/testsuites/libtests/unlink.yml20
-rw-r--r--spec/build/testsuites/libtests/utf8proc01.yml19
-rw-r--r--spec/build/testsuites/libtests/vfork.yml20
-rw-r--r--spec/build/testsuites/libtests/wait.yml20
-rw-r--r--spec/build/testsuites/libtests/waitpid.yml20
-rw-r--r--spec/build/testsuites/libtests/write.yml20
-rw-r--r--spec/build/testsuites/libtests/writev.yml20
-rw-r--r--spec/build/testsuites/mptests/grp.yml70
-rw-r--r--spec/build/testsuites/mptests/mp01.yml21
-rw-r--r--spec/build/testsuites/mptests/mp01node1.yml21
-rw-r--r--spec/build/testsuites/mptests/mp01node2.yml21
-rw-r--r--spec/build/testsuites/mptests/mp03.yml22
-rw-r--r--spec/build/testsuites/mptests/mp03node1.yml22
-rw-r--r--spec/build/testsuites/mptests/mp03node2.yml22
-rw-r--r--spec/build/testsuites/mptests/mp04.yml21
-rw-r--r--spec/build/testsuites/mptests/mp04node1.yml21
-rw-r--r--spec/build/testsuites/mptests/mp04node2.yml21
-rw-r--r--spec/build/testsuites/mptests/mp05.yml22
-rw-r--r--spec/build/testsuites/mptests/mp05node1.yml22
-rw-r--r--spec/build/testsuites/mptests/mp05node2.yml22
-rw-r--r--spec/build/testsuites/mptests/mp06.yml21
-rw-r--r--spec/build/testsuites/mptests/mp06node1.yml21
-rw-r--r--spec/build/testsuites/mptests/mp06node2.yml21
-rw-r--r--spec/build/testsuites/mptests/mp07.yml21
-rw-r--r--spec/build/testsuites/mptests/mp07node1.yml21
-rw-r--r--spec/build/testsuites/mptests/mp07node2.yml21
-rw-r--r--spec/build/testsuites/mptests/mp08.yml21
-rw-r--r--spec/build/testsuites/mptests/mp08node1.yml21
-rw-r--r--spec/build/testsuites/mptests/mp08node2.yml21
-rw-r--r--spec/build/testsuites/mptests/mp09.yml23
-rw-r--r--spec/build/testsuites/mptests/mp09node1.yml23
-rw-r--r--spec/build/testsuites/mptests/mp09node2.yml23
-rw-r--r--spec/build/testsuites/mptests/mp10.yml23
-rw-r--r--spec/build/testsuites/mptests/mp10node1.yml23
-rw-r--r--spec/build/testsuites/mptests/mp10node2.yml23
-rw-r--r--spec/build/testsuites/mptests/mp11.yml20
-rw-r--r--spec/build/testsuites/mptests/mp11node1.yml20
-rw-r--r--spec/build/testsuites/mptests/mp11node2.yml20
-rw-r--r--spec/build/testsuites/mptests/mp12.yml20
-rw-r--r--spec/build/testsuites/mptests/mp12node1.yml20
-rw-r--r--spec/build/testsuites/mptests/mp12node2.yml20
-rw-r--r--spec/build/testsuites/mptests/mp13.yml22
-rw-r--r--spec/build/testsuites/mptests/mp13node1.yml22
-rw-r--r--spec/build/testsuites/mptests/mp13node2.yml22
-rw-r--r--spec/build/testsuites/mptests/mp14.yml27
-rw-r--r--spec/build/testsuites/mptests/mp14node1.yml27
-rw-r--r--spec/build/testsuites/mptests/mp14node2.yml27
-rw-r--r--spec/build/testsuites/optada.yml15
-rw-r--r--spec/build/testsuites/optall.yml15
-rw-r--r--spec/build/testsuites/optbenchmarks.yml15
-rw-r--r--spec/build/testsuites/optfs.yml15
-rw-r--r--spec/build/testsuites/optlib.yml15
-rw-r--r--spec/build/testsuites/optmp.yml15
-rw-r--r--spec/build/testsuites/optpsx.yml15
-rw-r--r--spec/build/testsuites/optpsxtm.yml15
-rw-r--r--spec/build/testsuites/optrhs.yml15
-rw-r--r--spec/build/testsuites/optsamples.yml15
-rw-r--r--spec/build/testsuites/optsmp.yml15
-rw-r--r--spec/build/testsuites/optsp.yml15
-rw-r--r--spec/build/testsuites/opttm.yml15
-rw-r--r--spec/build/testsuites/optvalidation.yml15
-rw-r--r--spec/build/testsuites/psxtests/grp.yml235
-rw-r--r--spec/build/testsuites/psxtests/libpsxhdrs.yml928
-rw-r--r--spec/build/testsuites/psxtests/psx01.yml20
-rw-r--r--spec/build/testsuites/psxtests/psx02.yml21
-rw-r--r--spec/build/testsuites/psxtests/psx03.yml21
-rw-r--r--spec/build/testsuites/psxtests/psx04.yml23
-rw-r--r--spec/build/testsuites/psxtests/psx05.yml22
-rw-r--r--spec/build/testsuites/psxtests/psx06.yml21
-rw-r--r--spec/build/testsuites/psxtests/psx07.yml20
-rw-r--r--spec/build/testsuites/psxtests/psx08.yml22
-rw-r--r--spec/build/testsuites/psxtests/psx09.yml20
-rw-r--r--spec/build/testsuites/psxtests/psx10.yml22
-rw-r--r--spec/build/testsuites/psxtests/psx11.yml20
-rw-r--r--spec/build/testsuites/psxtests/psx12.yml20
-rw-r--r--spec/build/testsuites/psxtests/psx13.yml20
-rw-r--r--spec/build/testsuites/psxtests/psx14.yml19
-rw-r--r--spec/build/testsuites/psxtests/psx15.yml19
-rw-r--r--spec/build/testsuites/psxtests/psx16.yml19
-rw-r--r--spec/build/testsuites/psxtests/psxaio01.yml20
-rw-r--r--spec/build/testsuites/psxtests/psxaio02.yml20
-rw-r--r--spec/build/testsuites/psxtests/psxaio03.yml20
-rw-r--r--spec/build/testsuites/psxtests/psxalarm01.yml20
-rw-r--r--spec/build/testsuites/psxtests/psxautoinit01.yml19
-rw-r--r--spec/build/testsuites/psxtests/psxautoinit02.yml19
-rw-r--r--spec/build/testsuites/psxtests/psxbarrier01.yml20
-rw-r--r--spec/build/testsuites/psxtests/psxcancel.yml19
-rw-r--r--spec/build/testsuites/psxtests/psxcancel01.yml19
-rw-r--r--spec/build/testsuites/psxtests/psxchroot01.yml20
-rw-r--r--spec/build/testsuites/psxtests/psxclassic01.yml20
-rw-r--r--spec/build/testsuites/psxtests/psxcleanup.yml19
-rw-r--r--spec/build/testsuites/psxtests/psxcleanup01.yml19
-rw-r--r--spec/build/testsuites/psxtests/psxcleanup02.yml20
-rw-r--r--spec/build/testsuites/psxtests/psxclock.yml19
-rw-r--r--spec/build/testsuites/psxtests/psxclock01.yml19
-rw-r--r--spec/build/testsuites/psxtests/psxclockrealtime01.yml19
-rw-r--r--spec/build/testsuites/psxtests/psxconcurrency01.yml19
-rw-r--r--spec/build/testsuites/psxtests/psxcond01.yml19
-rw-r--r--spec/build/testsuites/psxtests/psxcond02.yml19
-rw-r--r--spec/build/testsuites/psxtests/psxconfig01.yml19
-rw-r--r--spec/build/testsuites/psxtests/psxdevctl01.yml20
-rw-r--r--spec/build/testsuites/psxtests/psxeintrjoin.yml20
-rw-r--r--spec/build/testsuites/psxtests/psxenosys.yml19
-rw-r--r--spec/build/testsuites/psxtests/psxfatal01.yml19
-rw-r--r--spec/build/testsuites/psxtests/psxfatal02.yml19
-rw-r--r--spec/build/testsuites/psxtests/psxfatalsupport.yml19
-rw-r--r--spec/build/testsuites/psxtests/psxfchx01.yml19
-rw-r--r--spec/build/testsuites/psxtests/psxfenv01.yml20
-rw-r--r--spec/build/testsuites/psxtests/psxfile01.yml23
-rw-r--r--spec/build/testsuites/psxtests/psxfile02.yml20
-rw-r--r--spec/build/testsuites/psxtests/psxfilelock01.yml19
-rw-r--r--spec/build/testsuites/psxtests/psxgetattrnp01.yml19
-rw-r--r--spec/build/testsuites/psxtests/psxgetrusage01.yml20
-rw-r--r--spec/build/testsuites/psxtests/psxglobalcon01.yml19
-rw-r--r--spec/build/testsuites/psxtests/psxglobalcon02.yml19
-rw-r--r--spec/build/testsuites/psxtests/psxhdrs.yml18
-rw-r--r--spec/build/testsuites/psxtests/psxid01.yml19
-rw-r--r--spec/build/testsuites/psxtests/psximfs01.yml19
-rw-r--r--spec/build/testsuites/psxtests/psximfs02.yml19
-rw-r--r--spec/build/testsuites/psxtests/psxintrcritical01.yml20
-rw-r--r--spec/build/testsuites/psxtests/psxinttypes01.yml19
-rw-r--r--spec/build/testsuites/psxtests/psxitimer.yml20
-rw-r--r--spec/build/testsuites/psxtests/psxkey01.yml20
-rw-r--r--spec/build/testsuites/psxtests/psxkey02.yml19
-rw-r--r--spec/build/testsuites/psxtests/psxkey03.yml19
-rw-r--r--spec/build/testsuites/psxtests/psxkey04.yml19
-rw-r--r--spec/build/testsuites/psxtests/psxkey05.yml19
-rw-r--r--spec/build/testsuites/psxtests/psxkey06.yml19
-rw-r--r--spec/build/testsuites/psxtests/psxkey07.yml19
-rw-r--r--spec/build/testsuites/psxtests/psxkey08.yml19
-rw-r--r--spec/build/testsuites/psxtests/psxkey09.yml19
-rw-r--r--spec/build/testsuites/psxtests/psxkey10.yml19
-rw-r--r--spec/build/testsuites/psxtests/psxmmap01.yml21
-rw-r--r--spec/build/testsuites/psxtests/psxmount.yml20
-rw-r--r--spec/build/testsuites/psxtests/psxmsgq01.yml20
-rw-r--r--spec/build/testsuites/psxtests/psxmsgq02.yml20
-rw-r--r--spec/build/testsuites/psxtests/psxmsgq03.yml20
-rw-r--r--spec/build/testsuites/psxtests/psxmsgq04.yml20
-rw-r--r--spec/build/testsuites/psxtests/psxmutexattr01.yml19
-rw-r--r--spec/build/testsuites/psxtests/psxndbm01.yml19
-rw-r--r--spec/build/testsuites/psxtests/psxobj01.yml20
-rw-r--r--spec/build/testsuites/psxtests/psxonce01.yml19
-rw-r--r--spec/build/testsuites/psxtests/psxpasswd01.yml19
-rw-r--r--spec/build/testsuites/psxtests/psxpasswd02.yml19
-rw-r--r--spec/build/testsuites/psxtests/psxpipe01.yml19
-rw-r--r--spec/build/testsuites/psxtests/psxrdwrv.yml20
-rw-r--r--spec/build/testsuites/psxtests/psxreaddir.yml20
-rw-r--r--spec/build/testsuites/psxtests/psxrwlock01.yml20
-rw-r--r--spec/build/testsuites/psxtests/psxsem01.yml20
-rw-r--r--spec/build/testsuites/psxtests/psxshm01.yml19
-rw-r--r--spec/build/testsuites/psxtests/psxshm02.yml19
-rw-r--r--spec/build/testsuites/psxtests/psxsignal01.yml21
-rw-r--r--spec/build/testsuites/psxtests/psxsignal02.yml20
-rw-r--r--spec/build/testsuites/psxtests/psxsignal03.yml20
-rw-r--r--spec/build/testsuites/psxtests/psxsignal04.yml20
-rw-r--r--spec/build/testsuites/psxtests/psxsignal05.yml20
-rw-r--r--spec/build/testsuites/psxtests/psxsignal06.yml20
-rw-r--r--spec/build/testsuites/psxtests/psxsignal07.yml21
-rw-r--r--spec/build/testsuites/psxtests/psxsignal08.yml21
-rw-r--r--spec/build/testsuites/psxtests/psxspin01.yml20
-rw-r--r--spec/build/testsuites/psxtests/psxstack01.yml19
-rw-r--r--spec/build/testsuites/psxtests/psxstack02.yml19
-rw-r--r--spec/build/testsuites/psxtests/psxstat.yml20
-rw-r--r--spec/build/testsuites/psxtests/psxstrsignal01.yml19
-rw-r--r--spec/build/testsuites/psxtests/psxsysconf.yml19
-rw-r--r--spec/build/testsuites/psxtests/psxthreadname01.yml19
-rw-r--r--spec/build/testsuites/psxtests/psxtime.yml20
-rw-r--r--spec/build/testsuites/psxtests/psxtimer01.yml20
-rw-r--r--spec/build/testsuites/psxtests/psxtimer02.yml20
-rw-r--r--spec/build/testsuites/psxtests/psxtimes01.yml20
-rw-r--r--spec/build/testsuites/psxtests/psxualarm.yml20
-rw-r--r--spec/build/testsuites/psxtests/psxusleep.yml19
-rw-r--r--spec/build/testsuites/psxtmtests/grp.yml131
-rw-r--r--spec/build/testsuites/psxtmtests/psxtmbarrier01.yml21
-rw-r--r--spec/build/testsuites/psxtmtests/psxtmbarrier02.yml21
-rw-r--r--spec/build/testsuites/psxtmtests/psxtmbarrier03.yml21
-rw-r--r--spec/build/testsuites/psxtmtests/psxtmbarrier04.yml21
-rw-r--r--spec/build/testsuites/psxtmtests/psxtmbarrierattr01.yml21
-rw-r--r--spec/build/testsuites/psxtmtests/psxtmcleanup01.yml21
-rw-r--r--spec/build/testsuites/psxtmtests/psxtmclocknanosleep01.yml21
-rw-r--r--spec/build/testsuites/psxtmtests/psxtmclocknanosleep02.yml21
-rw-r--r--spec/build/testsuites/psxtmtests/psxtmclocknanosleep03.yml21
-rw-r--r--spec/build/testsuites/psxtmtests/psxtmcond01.yml21
-rw-r--r--spec/build/testsuites/psxtmtests/psxtmcond02.yml21
-rw-r--r--spec/build/testsuites/psxtmtests/psxtmcond03.yml21
-rw-r--r--spec/build/testsuites/psxtmtests/psxtmcond04.yml21
-rw-r--r--spec/build/testsuites/psxtmtests/psxtmcond05.yml21
-rw-r--r--spec/build/testsuites/psxtmtests/psxtmcond06.yml21
-rw-r--r--spec/build/testsuites/psxtmtests/psxtmcond07.yml21
-rw-r--r--spec/build/testsuites/psxtmtests/psxtmcond08.yml21
-rw-r--r--spec/build/testsuites/psxtmtests/psxtmcond09.yml21
-rw-r--r--spec/build/testsuites/psxtmtests/psxtmcond10.yml21
-rw-r--r--spec/build/testsuites/psxtmtests/psxtmkey01.yml21
-rw-r--r--spec/build/testsuites/psxtmtests/psxtmkey02.yml21
-rw-r--r--spec/build/testsuites/psxtmtests/psxtmmq01.yml21
-rw-r--r--spec/build/testsuites/psxtmtests/psxtmmqrcvblock01.yml21
-rw-r--r--spec/build/testsuites/psxtmtests/psxtmmqrcvblock02.yml21
-rw-r--r--spec/build/testsuites/psxtmtests/psxtmmutex01.yml21
-rw-r--r--spec/build/testsuites/psxtmtests/psxtmmutex02.yml21
-rw-r--r--spec/build/testsuites/psxtmtests/psxtmmutex03.yml21
-rw-r--r--spec/build/testsuites/psxtmtests/psxtmmutex04.yml21
-rw-r--r--spec/build/testsuites/psxtmtests/psxtmmutex05.yml21
-rw-r--r--spec/build/testsuites/psxtmtests/psxtmmutex06.yml21
-rw-r--r--spec/build/testsuites/psxtmtests/psxtmmutex07.yml21
-rw-r--r--spec/build/testsuites/psxtmtests/psxtmmutexattr01.yml21
-rw-r--r--spec/build/testsuites/psxtmtests/psxtmnanosleep01.yml21
-rw-r--r--spec/build/testsuites/psxtmtests/psxtmnanosleep02.yml21
-rw-r--r--spec/build/testsuites/psxtmtests/psxtmonce01.yml21
-rw-r--r--spec/build/testsuites/psxtmtests/psxtmrwlock01.yml21
-rw-r--r--spec/build/testsuites/psxtmtests/psxtmrwlock02.yml21
-rw-r--r--spec/build/testsuites/psxtmtests/psxtmrwlock03.yml21
-rw-r--r--spec/build/testsuites/psxtmtests/psxtmrwlock04.yml21
-rw-r--r--spec/build/testsuites/psxtmtests/psxtmrwlock05.yml21
-rw-r--r--spec/build/testsuites/psxtmtests/psxtmrwlock06.yml21
-rw-r--r--spec/build/testsuites/psxtmtests/psxtmrwlock07.yml21
-rw-r--r--spec/build/testsuites/psxtmtests/psxtmsem01.yml21
-rw-r--r--spec/build/testsuites/psxtmtests/psxtmsem02.yml21
-rw-r--r--spec/build/testsuites/psxtmtests/psxtmsem03.yml21
-rw-r--r--spec/build/testsuites/psxtmtests/psxtmsem04.yml21
-rw-r--r--spec/build/testsuites/psxtmtests/psxtmsem05.yml21
-rw-r--r--spec/build/testsuites/psxtmtests/psxtmsleep01.yml21
-rw-r--r--spec/build/testsuites/psxtmtests/psxtmsleep02.yml21
-rw-r--r--spec/build/testsuites/psxtmtests/psxtmthread01.yml21
-rw-r--r--spec/build/testsuites/psxtmtests/psxtmthread02.yml21
-rw-r--r--spec/build/testsuites/psxtmtests/psxtmthread03.yml21
-rw-r--r--spec/build/testsuites/psxtmtests/psxtmthread04.yml21
-rw-r--r--spec/build/testsuites/psxtmtests/psxtmthread05.yml21
-rw-r--r--spec/build/testsuites/psxtmtests/psxtmthread06.yml21
-rw-r--r--spec/build/testsuites/psxtmtests/psxtmthreadattr01.yml21
-rw-r--r--spec/build/testsuites/rhealstone/grp.yml31
-rw-r--r--spec/build/testsuites/rhealstone/rhdeadlockbrk.yml19
-rw-r--r--spec/build/testsuites/rhealstone/rhilatency.yml19
-rw-r--r--spec/build/testsuites/rhealstone/rhmlatency.yml19
-rw-r--r--spec/build/testsuites/rhealstone/rhsemshuffle.yml19
-rw-r--r--spec/build/testsuites/rhealstone/rhtaskpreempt.yml19
-rw-r--r--spec/build/testsuites/rhealstone/rhtaskswitch.yml19
-rw-r--r--spec/build/testsuites/samples/basempnode1.yml21
-rw-r--r--spec/build/testsuites/samples/basempnode2.yml21
-rw-r--r--spec/build/testsuites/samples/basesp.yml20
-rw-r--r--spec/build/testsuites/samples/capture.yml20
-rw-r--r--spec/build/testsuites/samples/cdtest.yml20
-rw-r--r--spec/build/testsuites/samples/fileio.yml19
-rw-r--r--spec/build/testsuites/samples/grp.yml48
-rw-r--r--spec/build/testsuites/samples/hello.yml19
-rw-r--r--spec/build/testsuites/samples/iostream.yml19
-rw-r--r--spec/build/testsuites/samples/loopback.yml21
-rw-r--r--spec/build/testsuites/samples/minimum.yml19
-rw-r--r--spec/build/testsuites/samples/nsecs.yml20
-rw-r--r--spec/build/testsuites/samples/paranoia.yml21
-rw-r--r--spec/build/testsuites/samples/pppd.yml25
-rw-r--r--spec/build/testsuites/samples/ticker.yml20
-rw-r--r--spec/build/testsuites/samples/unlimited.yml22
-rw-r--r--spec/build/testsuites/smptests/grp.yml141
-rw-r--r--spec/build/testsuites/smptests/smp01.yml22
-rw-r--r--spec/build/testsuites/smptests/smp02.yml22
-rw-r--r--spec/build/testsuites/smptests/smp03.yml22
-rw-r--r--spec/build/testsuites/smptests/smp05.yml21
-rw-r--r--spec/build/testsuites/smptests/smp07.yml21
-rw-r--r--spec/build/testsuites/smptests/smp08.yml22
-rw-r--r--spec/build/testsuites/smptests/smp09.yml21
-rw-r--r--spec/build/testsuites/smptests/smpaffinity01.yml20
-rw-r--r--spec/build/testsuites/smptests/smpatomic01.yml20
-rw-r--r--spec/build/testsuites/smptests/smpcache01.yml20
-rw-r--r--spec/build/testsuites/smptests/smpcapture01.yml20
-rw-r--r--spec/build/testsuites/smptests/smpcapture02.yml20
-rw-r--r--spec/build/testsuites/smptests/smpclock01.yml21
-rw-r--r--spec/build/testsuites/smptests/smpfatal01.yml20
-rw-r--r--spec/build/testsuites/smptests/smpfatal02.yml20
-rw-r--r--spec/build/testsuites/smptests/smpfatal03.yml20
-rw-r--r--spec/build/testsuites/smptests/smpfatal04.yml20
-rw-r--r--spec/build/testsuites/smptests/smpfatal05.yml20
-rw-r--r--spec/build/testsuites/smptests/smpfatal06.yml20
-rw-r--r--spec/build/testsuites/smptests/smpfatal08.yml20
-rw-r--r--spec/build/testsuites/smptests/smpfatal09.yml20
-rw-r--r--spec/build/testsuites/smptests/smpipi01.yml20
-rw-r--r--spec/build/testsuites/smptests/smpirqs01.yml20
-rw-r--r--spec/build/testsuites/smptests/smpload01.yml20
-rw-r--r--spec/build/testsuites/smptests/smplock01.yml20
-rw-r--r--spec/build/testsuites/smptests/smpmigration01.yml20
-rw-r--r--spec/build/testsuites/smptests/smpmigration02.yml20
-rw-r--r--spec/build/testsuites/smptests/smpmrsp01.yml20
-rw-r--r--spec/build/testsuites/smptests/smpmulticast01.yml20
-rw-r--r--spec/build/testsuites/smptests/smpmutex01.yml20
-rw-r--r--spec/build/testsuites/smptests/smpmutex02.yml20
-rw-r--r--spec/build/testsuites/smptests/smpopenmp01.yml22
-rw-r--r--spec/build/testsuites/smptests/smppsxaffinity01.yml20
-rw-r--r--spec/build/testsuites/smptests/smppsxaffinity02.yml20
-rw-r--r--spec/build/testsuites/smptests/smppsxmutex01.yml20
-rw-r--r--spec/build/testsuites/smptests/smppsxsignal01.yml22
-rw-r--r--spec/build/testsuites/smptests/smpschedaffinity01.yml20
-rw-r--r--spec/build/testsuites/smptests/smpschedaffinity02.yml20
-rw-r--r--spec/build/testsuites/smptests/smpschedaffinity03.yml20
-rw-r--r--spec/build/testsuites/smptests/smpschedaffinity04.yml20
-rw-r--r--spec/build/testsuites/smptests/smpschedaffinity05.yml20
-rw-r--r--spec/build/testsuites/smptests/smpschededf01.yml20
-rw-r--r--spec/build/testsuites/smptests/smpschededf02.yml20
-rw-r--r--spec/build/testsuites/smptests/smpschededf03.yml20
-rw-r--r--spec/build/testsuites/smptests/smpschededf04.yml20
-rw-r--r--spec/build/testsuites/smptests/smpschedsem01.yml20
-rw-r--r--spec/build/testsuites/smptests/smpscheduler01.yml20
-rw-r--r--spec/build/testsuites/smptests/smpscheduler02.yml20
-rw-r--r--spec/build/testsuites/smptests/smpscheduler03.yml21
-rw-r--r--spec/build/testsuites/smptests/smpscheduler04.yml20
-rw-r--r--spec/build/testsuites/smptests/smpscheduler05.yml21
-rw-r--r--spec/build/testsuites/smptests/smpscheduler06.yml21
-rw-r--r--spec/build/testsuites/smptests/smpscheduler07.yml21
-rw-r--r--spec/build/testsuites/smptests/smpsignal01.yml20
-rw-r--r--spec/build/testsuites/smptests/smpstrongapa01.yml20
-rw-r--r--spec/build/testsuites/smptests/smpswitchextension01.yml20
-rw-r--r--spec/build/testsuites/smptests/smpthreadlife01.yml20
-rw-r--r--spec/build/testsuites/smptests/smpthreadpin01.yml20
-rw-r--r--spec/build/testsuites/smptests/smpunsupported01.yml20
-rw-r--r--spec/build/testsuites/smptests/smpwakeafter01.yml20
-rw-r--r--spec/build/testsuites/sptests/grp.yml452
-rw-r--r--spec/build/testsuites/sptests/sp01.yml20
-rw-r--r--spec/build/testsuites/sptests/sp02.yml23
-rw-r--r--spec/build/testsuites/sptests/sp03.yml21
-rw-r--r--spec/build/testsuites/sptests/sp04.yml23
-rw-r--r--spec/build/testsuites/sptests/sp05.yml22
-rw-r--r--spec/build/testsuites/sptests/sp06.yml22
-rw-r--r--spec/build/testsuites/sptests/sp07.yml28
-rw-r--r--spec/build/testsuites/sptests/sp08.yml19
-rw-r--r--spec/build/testsuites/sptests/sp11.yml22
-rw-r--r--spec/build/testsuites/sptests/sp12.yml26
-rw-r--r--spec/build/testsuites/sptests/sp13.yml24
-rw-r--r--spec/build/testsuites/sptests/sp14.yml22
-rw-r--r--spec/build/testsuites/sptests/sp15.yml20
-rw-r--r--spec/build/testsuites/sptests/sp16.yml24
-rw-r--r--spec/build/testsuites/sptests/sp17.yml22
-rw-r--r--spec/build/testsuites/sptests/sp18.yml19
-rw-r--r--spec/build/testsuites/sptests/sp19.yml22
-rw-r--r--spec/build/testsuites/sptests/sp20.yml21
-rw-r--r--spec/build/testsuites/sptests/sp2038.yml19
-rw-r--r--spec/build/testsuites/sptests/sp21.yml19
-rw-r--r--spec/build/testsuites/sptests/sp22.yml22
-rw-r--r--spec/build/testsuites/sptests/sp23.yml20
-rw-r--r--spec/build/testsuites/sptests/sp24.yml21
-rw-r--r--spec/build/testsuites/sptests/sp25.yml20
-rw-r--r--spec/build/testsuites/sptests/sp26.yml20
-rw-r--r--spec/build/testsuites/sptests/sp27.yml19
-rw-r--r--spec/build/testsuites/sptests/sp27a.yml19
-rw-r--r--spec/build/testsuites/sptests/sp29.yml20
-rw-r--r--spec/build/testsuites/sptests/sp30.yml21
-rw-r--r--spec/build/testsuites/sptests/sp31.yml22
-rw-r--r--spec/build/testsuites/sptests/sp32.yml19
-rw-r--r--spec/build/testsuites/sptests/sp33.yml19
-rw-r--r--spec/build/testsuites/sptests/sp34.yml19
-rw-r--r--spec/build/testsuites/sptests/sp35.yml19
-rw-r--r--spec/build/testsuites/sptests/sp36.yml18
-rw-r--r--spec/build/testsuites/sptests/sp37.yml19
-rw-r--r--spec/build/testsuites/sptests/sp38.yml19
-rw-r--r--spec/build/testsuites/sptests/sp40.yml19
-rw-r--r--spec/build/testsuites/sptests/sp41.yml19
-rw-r--r--spec/build/testsuites/sptests/sp42.yml19
-rw-r--r--spec/build/testsuites/sptests/sp43.yml19
-rw-r--r--spec/build/testsuites/sptests/sp44.yml19
-rw-r--r--spec/build/testsuites/sptests/sp45.yml19
-rw-r--r--spec/build/testsuites/sptests/sp46.yml19
-rw-r--r--spec/build/testsuites/sptests/sp47.yml19
-rw-r--r--spec/build/testsuites/sptests/sp48.yml19
-rw-r--r--spec/build/testsuites/sptests/sp49.yml19
-rw-r--r--spec/build/testsuites/sptests/sp50.yml19
-rw-r--r--spec/build/testsuites/sptests/sp51.yml19
-rw-r--r--spec/build/testsuites/sptests/sp52.yml19
-rw-r--r--spec/build/testsuites/sptests/sp53.yml19
-rw-r--r--spec/build/testsuites/sptests/sp54.yml19
-rw-r--r--spec/build/testsuites/sptests/sp55.yml19
-rw-r--r--spec/build/testsuites/sptests/sp56.yml19
-rw-r--r--spec/build/testsuites/sptests/sp57.yml19
-rw-r--r--spec/build/testsuites/sptests/sp58.yml19
-rw-r--r--spec/build/testsuites/sptests/sp59.yml19
-rw-r--r--spec/build/testsuites/sptests/sp60.yml19
-rw-r--r--spec/build/testsuites/sptests/sp62.yml19
-rw-r--r--spec/build/testsuites/sptests/sp63.yml19
-rw-r--r--spec/build/testsuites/sptests/sp64.yml19
-rw-r--r--spec/build/testsuites/sptests/sp65.yml19
-rw-r--r--spec/build/testsuites/sptests/sp66.yml19
-rw-r--r--spec/build/testsuites/sptests/sp67.yml19
-rw-r--r--spec/build/testsuites/sptests/sp68.yml19
-rw-r--r--spec/build/testsuites/sptests/sp69.yml20
-rw-r--r--spec/build/testsuites/sptests/sp70.yml19
-rw-r--r--spec/build/testsuites/sptests/sp71.yml19
-rw-r--r--spec/build/testsuites/sptests/sp72.yml19
-rw-r--r--spec/build/testsuites/sptests/sp73.yml19
-rw-r--r--spec/build/testsuites/sptests/sp74.yml19
-rw-r--r--spec/build/testsuites/sptests/sp75.yml19
-rw-r--r--spec/build/testsuites/sptests/sp76.yml19
-rw-r--r--spec/build/testsuites/sptests/sp77.yml19
-rw-r--r--spec/build/testsuites/sptests/spassoc01.yml19
-rw-r--r--spec/build/testsuites/sptests/spatomic01.yml19
-rw-r--r--spec/build/testsuites/sptests/spcache01.yml19
-rw-r--r--spec/build/testsuites/sptests/spcbssched01.yml20
-rw-r--r--spec/build/testsuites/sptests/spcbssched02.yml20
-rw-r--r--spec/build/testsuites/sptests/spcbssched03.yml21
-rw-r--r--spec/build/testsuites/sptests/spchain.yml19
-rw-r--r--spec/build/testsuites/sptests/spclockerr01.yml20
-rw-r--r--spec/build/testsuites/sptests/spclockerr02.yml19
-rw-r--r--spec/build/testsuites/sptests/spclocktodhook01.yml19
-rw-r--r--spec/build/testsuites/sptests/spconfig01.yml19
-rw-r--r--spec/build/testsuites/sptests/spconfig02.yml19
-rw-r--r--spec/build/testsuites/sptests/spconsole01.yml20
-rw-r--r--spec/build/testsuites/sptests/spcontext01.yml19
-rw-r--r--spec/build/testsuites/sptests/spcoverage.yml19
-rw-r--r--spec/build/testsuites/sptests/spcpucounter01.yml19
-rw-r--r--spec/build/testsuites/sptests/spcpuset01.yml20
-rw-r--r--spec/build/testsuites/sptests/spcxx01.yml20
-rw-r--r--spec/build/testsuites/sptests/spedfsched01.yml20
-rw-r--r--spec/build/testsuites/sptests/spedfsched02.yml21
-rw-r--r--spec/build/testsuites/sptests/spedfsched03.yml21
-rw-r--r--spec/build/testsuites/sptests/spedfsched04.yml20
-rw-r--r--spec/build/testsuites/sptests/sperror01.yml19
-rw-r--r--spec/build/testsuites/sptests/sperror02.yml19
-rw-r--r--spec/build/testsuites/sptests/sperror03.yml19
-rw-r--r--spec/build/testsuites/sptests/speventerr03.yml19
-rw-r--r--spec/build/testsuites/sptests/speventsystem01.yml19
-rw-r--r--spec/build/testsuites/sptests/speventtransient01.yml19
-rw-r--r--spec/build/testsuites/sptests/spextensions01.yml19
-rw-r--r--spec/build/testsuites/sptests/spfatal01.yml19
-rw-r--r--spec/build/testsuites/sptests/spfatal02.yml19
-rw-r--r--spec/build/testsuites/sptests/spfatal03.yml19
-rw-r--r--spec/build/testsuites/sptests/spfatal04.yml19
-rw-r--r--spec/build/testsuites/sptests/spfatal05.yml19
-rw-r--r--spec/build/testsuites/sptests/spfatal06.yml19
-rw-r--r--spec/build/testsuites/sptests/spfatal07.yml18
-rw-r--r--spec/build/testsuites/sptests/spfatal09.yml19
-rw-r--r--spec/build/testsuites/sptests/spfatal10.yml19
-rw-r--r--spec/build/testsuites/sptests/spfatal11.yml19
-rw-r--r--spec/build/testsuites/sptests/spfatal12.yml19
-rw-r--r--spec/build/testsuites/sptests/spfatal13.yml18
-rw-r--r--spec/build/testsuites/sptests/spfatal14.yml19
-rw-r--r--spec/build/testsuites/sptests/spfatal15.yml19
-rw-r--r--spec/build/testsuites/sptests/spfatal16.yml18
-rw-r--r--spec/build/testsuites/sptests/spfatal17.yml18
-rw-r--r--spec/build/testsuites/sptests/spfatal18.yml18
-rw-r--r--spec/build/testsuites/sptests/spfatal19.yml18
-rw-r--r--spec/build/testsuites/sptests/spfatal20.yml18
-rw-r--r--spec/build/testsuites/sptests/spfatal24.yml19
-rw-r--r--spec/build/testsuites/sptests/spfatal25.yml19
-rw-r--r--spec/build/testsuites/sptests/spfatal26.yml19
-rw-r--r--spec/build/testsuites/sptests/spfatal28.yml19
-rw-r--r--spec/build/testsuites/sptests/spfatal29.yml19
-rw-r--r--spec/build/testsuites/sptests/spfatal30.yml19
-rw-r--r--spec/build/testsuites/sptests/spfatal31.yml19
-rw-r--r--spec/build/testsuites/sptests/spfatal32.yml19
-rw-r--r--spec/build/testsuites/sptests/spfatal33.yml19
-rw-r--r--spec/build/testsuites/sptests/spfatalsupport.yml19
-rw-r--r--spec/build/testsuites/sptests/spfifo01.yml19
-rw-r--r--spec/build/testsuites/sptests/spfifo02.yml19
-rw-r--r--spec/build/testsuites/sptests/spfifo03.yml19
-rw-r--r--spec/build/testsuites/sptests/spfifo04.yml19
-rw-r--r--spec/build/testsuites/sptests/spfifo05.yml19
-rw-r--r--spec/build/testsuites/sptests/spfreechain01.yml19
-rw-r--r--spec/build/testsuites/sptests/spglobalcon01.yml19
-rw-r--r--spec/build/testsuites/sptests/spglobalcon02.yml19
-rw-r--r--spec/build/testsuites/sptests/spheapprot.yml19
-rw-r--r--spec/build/testsuites/sptests/spinternalerror01.yml19
-rw-r--r--spec/build/testsuites/sptests/spinternalerror02.yml19
-rw-r--r--spec/build/testsuites/sptests/spintrcritical01.yml19
-rw-r--r--spec/build/testsuites/sptests/spintrcritical02.yml19
-rw-r--r--spec/build/testsuites/sptests/spintrcritical03.yml19
-rw-r--r--spec/build/testsuites/sptests/spintrcritical04.yml19
-rw-r--r--spec/build/testsuites/sptests/spintrcritical05.yml19
-rw-r--r--spec/build/testsuites/sptests/spintrcritical08.yml19
-rw-r--r--spec/build/testsuites/sptests/spintrcritical09.yml19
-rw-r--r--spec/build/testsuites/sptests/spintrcritical10.yml19
-rw-r--r--spec/build/testsuites/sptests/spintrcritical11.yml19
-rw-r--r--spec/build/testsuites/sptests/spintrcritical12.yml19
-rw-r--r--spec/build/testsuites/sptests/spintrcritical13.yml19
-rw-r--r--spec/build/testsuites/sptests/spintrcritical14.yml19
-rw-r--r--spec/build/testsuites/sptests/spintrcritical15.yml19
-rw-r--r--spec/build/testsuites/sptests/spintrcritical16.yml19
-rw-r--r--spec/build/testsuites/sptests/spintrcritical18.yml19
-rw-r--r--spec/build/testsuites/sptests/spintrcritical20.yml19
-rw-r--r--spec/build/testsuites/sptests/spintrcritical21.yml19
-rw-r--r--spec/build/testsuites/sptests/spintrcritical22.yml19
-rw-r--r--spec/build/testsuites/sptests/spintrcritical23.yml19
-rw-r--r--spec/build/testsuites/sptests/spintrcritical24.yml19
-rw-r--r--spec/build/testsuites/sptests/spintrerr01.yml20
-rw-r--r--spec/build/testsuites/sptests/splinkersets01.yml22
-rw-r--r--spec/build/testsuites/sptests/spmisc01.yml20
-rw-r--r--spec/build/testsuites/sptests/spmkdir.yml19
-rw-r--r--spec/build/testsuites/sptests/spmountmgr01.yml19
-rw-r--r--spec/build/testsuites/sptests/spmrsp01.yml19
-rw-r--r--spec/build/testsuites/sptests/spmsgqerr01.yml19
-rw-r--r--spec/build/testsuites/sptests/spmsgqerr02.yml20
-rw-r--r--spec/build/testsuites/sptests/spmutex01.yml19
-rw-r--r--spec/build/testsuites/sptests/spnsext01.yml19
-rw-r--r--spec/build/testsuites/sptests/spobjgetnext.yml19
-rw-r--r--spec/build/testsuites/sptests/sppagesize.yml19
-rw-r--r--spec/build/testsuites/sptests/sppartitionerr01.yml19
-rw-r--r--spec/build/testsuites/sptests/sppercpudata01.yml20
-rw-r--r--spec/build/testsuites/sptests/spporterr01.yml19
-rw-r--r--spec/build/testsuites/sptests/spprintk.yml19
-rw-r--r--spec/build/testsuites/sptests/spprivenv01.yml19
-rw-r--r--spec/build/testsuites/sptests/spprofiling01.yml19
-rw-r--r--spec/build/testsuites/sptests/spqreslib.yml20
-rw-r--r--spec/build/testsuites/sptests/spratemonerr01.yml21
-rw-r--r--spec/build/testsuites/sptests/sprbtree01.yml19
-rw-r--r--spec/build/testsuites/sptests/spregionerr01.yml19
-rw-r--r--spec/build/testsuites/sptests/sprmsched01.yml20
-rw-r--r--spec/build/testsuites/sptests/sprmsched02.yml20
-rw-r--r--spec/build/testsuites/sptests/spscheduler01.yml19
-rw-r--r--spec/build/testsuites/sptests/spsem01.yml19
-rw-r--r--spec/build/testsuites/sptests/spsem02.yml19
-rw-r--r--spec/build/testsuites/sptests/spsem03.yml19
-rw-r--r--spec/build/testsuites/sptests/spsemerr01.yml19
-rw-r--r--spec/build/testsuites/sptests/spsemerr02.yml20
-rw-r--r--spec/build/testsuites/sptests/spsignalerr01.yml20
-rw-r--r--spec/build/testsuites/sptests/spsimplesched01.yml19
-rw-r--r--spec/build/testsuites/sptests/spsimplesched02.yml19
-rw-r--r--spec/build/testsuites/sptests/spsimplesched03.yml19
-rw-r--r--spec/build/testsuites/sptests/spsize.yml21
-rw-r--r--spec/build/testsuites/sptests/spstdthreads01.yml19
-rw-r--r--spec/build/testsuites/sptests/spstkalloc.yml19
-rw-r--r--spec/build/testsuites/sptests/spstkalloc02.yml19
-rw-r--r--spec/build/testsuites/sptests/spsysinit01.yml19
-rw-r--r--spec/build/testsuites/sptests/spsyslock01.yml19
-rw-r--r--spec/build/testsuites/sptests/sptaskerr01.yml20
-rw-r--r--spec/build/testsuites/sptests/sptaskerr02.yml19
-rw-r--r--spec/build/testsuites/sptests/sptaskerr03.yml19
-rw-r--r--spec/build/testsuites/sptests/sptaskerr04.yml20
-rw-r--r--spec/build/testsuites/sptests/sptasknopreempt01.yml19
-rw-r--r--spec/build/testsuites/sptests/spthread01.yml19
-rw-r--r--spec/build/testsuites/sptests/spthreadlife01.yml19
-rw-r--r--spec/build/testsuites/sptests/spthreadq01.yml19
-rw-r--r--spec/build/testsuites/sptests/sptimecounter01.yml19
-rw-r--r--spec/build/testsuites/sptests/sptimecounter02.yml20
-rw-r--r--spec/build/testsuites/sptests/sptimecounter03.yml19
-rw-r--r--spec/build/testsuites/sptests/sptimecounter04.yml19
-rw-r--r--spec/build/testsuites/sptests/sptimererr01.yml19
-rw-r--r--spec/build/testsuites/sptests/sptimererr02.yml19
-rw-r--r--spec/build/testsuites/sptests/sptimerserver01.yml19
-rw-r--r--spec/build/testsuites/sptests/sptimespec01.yml19
-rw-r--r--spec/build/testsuites/sptests/sptls01.yml19
-rw-r--r--spec/build/testsuites/sptests/sptls02.yml20
-rw-r--r--spec/build/testsuites/sptests/sptls03.yml19
-rw-r--r--spec/build/testsuites/sptests/sptls04.yml19
-rw-r--r--spec/build/testsuites/sptests/spversion01.yml19
-rw-r--r--spec/build/testsuites/sptests/spwatchdog.yml22
-rw-r--r--spec/build/testsuites/sptests/spwkspace.yml19
-rw-r--r--spec/build/testsuites/tmtests/grp.yml101
-rw-r--r--spec/build/testsuites/tmtests/tm01.yml20
-rw-r--r--spec/build/testsuites/tmtests/tm02.yml20
-rw-r--r--spec/build/testsuites/tmtests/tm03.yml20
-rw-r--r--spec/build/testsuites/tmtests/tm04.yml20
-rw-r--r--spec/build/testsuites/tmtests/tm05.yml20
-rw-r--r--spec/build/testsuites/tmtests/tm06.yml20
-rw-r--r--spec/build/testsuites/tmtests/tm07.yml20
-rw-r--r--spec/build/testsuites/tmtests/tm08.yml20
-rw-r--r--spec/build/testsuites/tmtests/tm09.yml20
-rw-r--r--spec/build/testsuites/tmtests/tm10.yml20
-rw-r--r--spec/build/testsuites/tmtests/tm11.yml20
-rw-r--r--spec/build/testsuites/tmtests/tm12.yml20
-rw-r--r--spec/build/testsuites/tmtests/tm13.yml20
-rw-r--r--spec/build/testsuites/tmtests/tm14.yml20
-rw-r--r--spec/build/testsuites/tmtests/tm15.yml20
-rw-r--r--spec/build/testsuites/tmtests/tm16.yml20
-rw-r--r--spec/build/testsuites/tmtests/tm17.yml20
-rw-r--r--spec/build/testsuites/tmtests/tm18.yml20
-rw-r--r--spec/build/testsuites/tmtests/tm19.yml20
-rw-r--r--spec/build/testsuites/tmtests/tm20.yml20
-rw-r--r--spec/build/testsuites/tmtests/tm21.yml20
-rw-r--r--spec/build/testsuites/tmtests/tm22.yml20
-rw-r--r--spec/build/testsuites/tmtests/tm23.yml20
-rw-r--r--spec/build/testsuites/tmtests/tm24.yml20
-rw-r--r--spec/build/testsuites/tmtests/tm25.yml20
-rw-r--r--spec/build/testsuites/tmtests/tm26.yml20
-rw-r--r--spec/build/testsuites/tmtests/tm27.yml20
-rw-r--r--spec/build/testsuites/tmtests/tm28.yml20
-rw-r--r--spec/build/testsuites/tmtests/tm29.yml20
-rw-r--r--spec/build/testsuites/tmtests/tm30.yml21
-rw-r--r--spec/build/testsuites/tmtests/tm31.yml20
-rw-r--r--spec/build/testsuites/tmtests/tm32.yml20
-rw-r--r--spec/build/testsuites/tmtests/tm33.yml20
-rw-r--r--spec/build/testsuites/tmtests/tm34.yml20
-rw-r--r--spec/build/testsuites/tmtests/tm35.yml20
-rw-r--r--spec/build/testsuites/tmtests/tm36.yml20
-rw-r--r--spec/build/testsuites/tmtests/tmck.yml20
-rw-r--r--spec/build/testsuites/tmtests/tmcontext01.yml19
-rw-r--r--spec/build/testsuites/tmtests/tmfine01.yml19
-rw-r--r--spec/build/testsuites/tmtests/tmonetoone.yml19
-rw-r--r--spec/build/testsuites/tmtests/tmtimer01.yml19
-rw-r--r--spec/build/testsuites/validation/grp.yml18
-rw-r--r--spec/build/testsuites/validation/validation-0.yml20
-rw-r--r--testsuites/aclocal/version.m44
-rw-r--r--testsuites/ada/configure.ac1
-rw-r--r--testsuites/ada/support/initimpl.h2
-rw-r--r--testsuites/ada/tmtests/Makefile.am1
-rw-r--r--testsuites/ada/tmtests/tmoverhd/Makefile.am13
-rw-r--r--testsuites/ada/tmtests/tmoverhd/README5
-rw-r--r--testsuites/ada/tmtests/tmoverhd/dummy_rtems.adb891
-rw-r--r--testsuites/ada/tmtests/tmoverhd/dummy_rtems.ads445
-rw-r--r--testsuites/ada/tmtests/tmoverhd/init.c34
-rw-r--r--testsuites/ada/tmtests/tmoverhd/tmoverhd.adb55
-rw-r--r--testsuites/ada/tmtests/tmoverhd/tmtest.adb1363
-rw-r--r--testsuites/ada/tmtests/tmoverhd/tmtest.ads156
-rw-r--r--testsuites/build/.doorstop.skip0
-rw-r--r--testsuites/build/bad-integer.ini2
-rwxr-xr-xtestsuites/build/bin/fake-rtems5-ar31
-rwxr-xr-xtestsuites/build/bin/fake-rtems5-gcc43
-rwxr-xr-xtestsuites/build/bin/fake-rtems5-ld31
-rw-r--r--testsuites/build/fake-good.ini1
-rw-r--r--testsuites/build/fake-inherit-good.ini2
-rw-r--r--testsuites/build/fake-inherit-loop.ini4
-rw-r--r--testsuites/build/fake-inherit-none.ini2
-rw-r--r--testsuites/build/fake-none.ini1
-rw-r--r--testsuites/build/good-integer.ini2
-rw-r--r--testsuites/build/not-power-of-two.ini2
-rw-r--r--testsuites/build/spec/bsp.yml16
-rw-r--r--testsuites/build/spec/config-file.yml19
-rw-r--r--testsuites/build/spec/config-header.yml18
-rw-r--r--testsuites/build/spec/gcc.yml41
-rw-r--r--testsuites/build/spec/integer-option.yml25
-rw-r--r--testsuites/build/spec/string-option.yml24
-rw-r--r--testsuites/build/spec/top-level-group.yml17
-rw-r--r--testsuites/build/spec2/config-file.yml16
-rw-r--r--testsuites/build/spec2/gcc.yml41
-rw-r--r--testsuites/build/spec2/top-level-group.yml16
-rwxr-xr-xtestsuites/build/test.py200
-rw-r--r--testsuites/build/too-big.ini2
-rw-r--r--testsuites/build/too-small.ini2
-rw-r--r--testsuites/libtests/Makefile.am9
-rw-r--r--testsuites/libtests/block08/system.h2
-rw-r--r--testsuites/libtests/block09/init.c2
-rw-r--r--testsuites/libtests/block10/init.c2
-rw-r--r--testsuites/libtests/capture01/system.h2
-rw-r--r--testsuites/libtests/configure.ac1
-rw-r--r--testsuites/libtests/dl01/dl01-o1.c2
-rw-r--r--testsuites/libtests/dl02/dl02-o1.c2
-rw-r--r--testsuites/libtests/dl02/dl02-o2.c2
-rw-r--r--testsuites/libtests/dl05/dl05-o5.cc2
-rw-r--r--testsuites/libtests/dl06/dl06-o1.c2
-rw-r--r--testsuites/libtests/dl06/dl06-o2.c2
-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/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/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/dl10/dl-load.c22
-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.c2
-rw-r--r--testsuites/libtests/irqs01/init.c299
-rw-r--r--testsuites/libtests/irqs01/irqs01.doc16
-rw-r--r--testsuites/libtests/mathl/init.c2
-rwxr-xr-xtestsuites/libtests/tar01/home/abc/def/test_script2
-rw-r--r--testsuites/libtests/tar01/home/test_file2
l---------testsuites/libtests/tar01/symlink1
-rw-r--r--testsuites/libtests/ttest01/init.c6
-rw-r--r--testsuites/libtests/ttest01/test-assert.c2
-rw-r--r--testsuites/libtests/ttest01/test-checks.c25
-rw-r--r--testsuites/libtests/ttest01/test-destructor.c4
-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.c121
-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.c29
-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.c295
-rw-r--r--testsuites/libtests/ttest02/ttest02.doc11
-rw-r--r--testsuites/libtests/ttest02/ttest02.scn37
-rw-r--r--testsuites/mptests/mp03/delay.c2
-rwxr-xr-xtestsuites/psxtests/Makefile.am3
-rw-r--r--testsuites/psxtests/psxbarrier01/main.c2
-rw-r--r--testsuites/psxtests/psxconfig01/init.c2
-rw-r--r--testsuites/psxtests/psxfenv01/init.c94
-rw-r--r--testsuites/psxtests/psxfenv01/psxfenv01.doc7
-rw-r--r--testsuites/psxtests/psxfenv01/psxfenv01.scn4
-rw-r--r--testsuites/psxtests/psxhdrs/string/stpncpy.c7
-rw-r--r--testsuites/psxtests/psxhdrs/string/strncat.c2
-rw-r--r--testsuites/psxtests/psxhdrs/string/strncpy.c7
-rw-r--r--testsuites/psxtests/psxintrcritical01/init.c130
-rw-r--r--testsuites/psxtests/psxintrcritical01/psxintrcritical01.scn33
-rw-r--r--testsuites/psxtests/psxinttypes01/init.c2
-rw-r--r--testsuites/psxtests/psxkey01/system.h2
-rw-r--r--testsuites/psxtests/psxndbm01/init.c2
-rw-r--r--testsuites/psxtests/psxrwlock01/main.c2
-rw-r--r--testsuites/psxtmtests/psxtmcond08/psxtmcond08impl.h2
-rw-r--r--testsuites/samples/base_mp/system.h2
-rw-r--r--testsuites/samples/base_sp/system.h2
-rw-r--r--testsuites/samples/capture/system.h2
-rw-r--r--testsuites/samples/cdtest/main.cc2
-rw-r--r--testsuites/samples/cdtest/system.h2
-rw-r--r--testsuites/samples/fileio/system.h2
-rw-r--r--testsuites/samples/iostream/system.h2
-rw-r--r--testsuites/samples/nsecs/system.h2
-rw-r--r--testsuites/samples/paranoia/system.h2
-rw-r--r--testsuites/samples/pppd/system.h2
-rw-r--r--testsuites/samples/ticker/system.h2
-rw-r--r--testsuites/smptests/smpatomic01/init.c2
-rw-r--r--testsuites/smptests/smpirqs01/init.c197
-rw-r--r--testsuites/smptests/smpirqs01/smpirqs01.doc13
-rw-r--r--testsuites/smptests/smplock01/init.c2
-rw-r--r--testsuites/smptests/smpmulticast01/init.c18
-rw-r--r--testsuites/smptests/smpschededf02/init.c14
-rw-r--r--testsuites/smptests/smpscheduler03/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/sptests/Makefile.am97
-rw-r--r--testsuites/sptests/configure.ac2
-rw-r--r--testsuites/sptests/sp01/init.c24
-rw-r--r--testsuites/sptests/sp01/sp01.doc1
-rw-r--r--testsuites/sptests/sp01/system.h3
-rw-r--r--testsuites/sptests/sp04/init.c2
-rw-r--r--testsuites/sptests/sp12/init.c2
-rw-r--r--testsuites/sptests/sp13/init.c2
-rw-r--r--testsuites/sptests/sp15/init.c2
-rw-r--r--testsuites/sptests/sp21/init.c21
-rw-r--r--testsuites/sptests/sp37/init.c2
-rw-r--r--testsuites/sptests/spfatal33/init.c55
-rw-r--r--testsuites/sptests/spfatal33/spfatal33.doc11
-rw-r--r--testsuites/sptests/spfatal33/spfatal33.scn16
-rw-r--r--testsuites/sptests/spfreechain01/init.c2
-rw-r--r--testsuites/sptests/spheapprot/init.c2
-rw-r--r--testsuites/sptests/spinternalerror02/init.c4
-rw-r--r--testsuites/sptests/spintrcritical01/spintrcritical01.scn30
-rw-r--r--testsuites/sptests/spintrcritical01/spintrcritical01impl.h121
-rw-r--r--testsuites/sptests/spintrcritical02/spintrcritical02.scn30
-rw-r--r--testsuites/sptests/spintrcritical03/spintrcritical03.scn30
-rw-r--r--testsuites/sptests/spintrcritical04/spintrcritical04.scn30
-rw-r--r--testsuites/sptests/spintrcritical05/spintrcritical05.scn30
-rw-r--r--testsuites/sptests/spintrcritical06/init.c2
-rw-r--r--testsuites/sptests/spintrcritical06/spintrcritical06.doc28
-rw-r--r--testsuites/sptests/spintrcritical06/spintrcritical06.scn6
-rw-r--r--testsuites/sptests/spintrcritical06/spintrcritical06impl.h145
-rw-r--r--testsuites/sptests/spintrcritical07/init.c2
-rw-r--r--testsuites/sptests/spintrcritical07/spintrcritical07.doc28
-rw-r--r--testsuites/sptests/spintrcritical07/spintrcritical07.scn6
-rw-r--r--testsuites/sptests/spintrcritical08/init.c208
-rw-r--r--testsuites/sptests/spintrcritical08/spintrcritical08.scn30
-rw-r--r--testsuites/sptests/spintrcritical09/init.c121
-rw-r--r--testsuites/sptests/spintrcritical09/spintrcritical09.scn28
-rw-r--r--testsuites/sptests/spintrcritical10/init.c198
-rw-r--r--testsuites/sptests/spintrcritical10/spintrcritical10.scn33
-rw-r--r--testsuites/sptests/spintrcritical11/spintrcritical11.scn30
-rw-r--r--testsuites/sptests/spintrcritical11/spintrcritical11impl.h110
-rw-r--r--testsuites/sptests/spintrcritical12/spintrcritical12.scn30
-rw-r--r--testsuites/sptests/spintrcritical13/spintrcritical13.scn31
-rw-r--r--testsuites/sptests/spintrcritical13/spintrcritical13impl.h145
-rw-r--r--testsuites/sptests/spintrcritical14/spintrcritical14.scn31
-rw-r--r--testsuites/sptests/spintrcritical15/init.c133
-rw-r--r--testsuites/sptests/spintrcritical15/spintrcritical15.scn34
-rw-r--r--testsuites/sptests/spintrcritical16/init.c140
-rw-r--r--testsuites/sptests/spintrcritical16/spintrcritical16.scn31
-rw-r--r--testsuites/sptests/spintrcritical18/init.c143
-rw-r--r--testsuites/sptests/spintrcritical18/spintrcritical18.scn30
-rw-r--r--testsuites/sptests/spintrcritical20/init.c139
-rw-r--r--testsuites/sptests/spintrcritical20/spintrcritical20.scn32
-rw-r--r--testsuites/sptests/spintrcritical21/init.c220
-rw-r--r--testsuites/sptests/spintrcritical21/spintrcritical21.scn27
-rw-r--r--testsuites/sptests/spintrcritical21/system.h39
-rw-r--r--testsuites/sptests/spintrcritical22/init.c103
-rw-r--r--testsuites/sptests/spintrcritical22/spintrcritical22.scn20
-rw-r--r--testsuites/sptests/spintrcritical23/init.c112
-rw-r--r--testsuites/sptests/spintrcritical23/spintrcritical23.scn20
-rw-r--r--testsuites/sptests/spintrcritical24/init.c122
-rw-r--r--testsuites/sptests/spintrcritical24/spintrcritical24.scn32
-rw-r--r--testsuites/sptests/spintrcritical_support/intrcritical.c171
-rw-r--r--testsuites/sptests/spintrcritical_support/intrcritical.h52
-rw-r--r--testsuites/sptests/spmisc01/init.c15
-rw-r--r--testsuites/sptests/spmisc01/spmisc01.h45
-rw-r--r--testsuites/sptests/spmisc01/strong.c49
-rw-r--r--testsuites/sptests/spmsgq_err01/init.c21
-rw-r--r--testsuites/sptests/spmsgq_err01/spmsgq_err01.scn1
-rw-r--r--testsuites/sptests/sppartition_err01/init.c22
-rw-r--r--testsuites/sptests/sppartition_err01/sppartition_err01.scn1
-rw-r--r--testsuites/sptests/spsem_err01/init.c21
-rw-r--r--testsuites/sptests/spsem_err01/spsem_err01.scn1
-rw-r--r--testsuites/sptests/spsimplesched02/init.c4
-rw-r--r--testsuites/sptests/sptask_err03/init.c22
-rw-r--r--testsuites/sptests/sptask_err03/sptask_err03.scn1
-rw-r--r--testsuites/sptests/sptimecounter02/init.c2
-rw-r--r--testsuites/sptests/sptimecounter03/init.c2
-rw-r--r--testsuites/sptests/sptimecounter04/init.c2
-rw-r--r--testsuites/support/include/buffer_test_io.h2
-rw-r--r--testsuites/support/include/tmacros.h2
-rw-r--r--testsuites/tmtests/Makefile.am10
-rw-r--r--testsuites/tmtests/configure.ac1
-rw-r--r--testsuites/tmtests/tmfine01/init.c2
-rw-r--r--testsuites/tmtests/tmonetoone/init.c2
-rw-r--r--testsuites/tmtests/tmoverhd/dumrtems.h250
-rw-r--r--testsuites/tmtests/tmoverhd/empty.c45
-rw-r--r--testsuites/tmtests/tmoverhd/system.h54
-rw-r--r--testsuites/tmtests/tmoverhd/testtask.c1232
-rw-r--r--testsuites/tmtests/tmoverhd/tmoverhd.doc82
-rw-r--r--testsuites/validation/tc-task-construct-errors.c2367
-rw-r--r--testsuites/validation/ts-validation-0.c222
-rwxr-xr-xwaf173
-rwxr-xr-xwscript1565
-rw-r--r--yaml/LICENSE20
-rw-r--r--yaml/PKG-INFO38
-rw-r--r--yaml/lib/yaml/__init__.py431
-rw-r--r--yaml/lib/yaml/composer.py139
-rw-r--r--yaml/lib/yaml/constructor.py760
-rw-r--r--yaml/lib/yaml/cyaml.py101
-rw-r--r--yaml/lib/yaml/dumper.py62
-rw-r--r--yaml/lib/yaml/emitter.py1144
-rw-r--r--yaml/lib/yaml/error.py75
-rw-r--r--yaml/lib/yaml/events.py86
-rw-r--r--yaml/lib/yaml/loader.py63
-rw-r--r--yaml/lib/yaml/nodes.py49
-rw-r--r--yaml/lib/yaml/parser.py589
-rw-r--r--yaml/lib/yaml/reader.py188
-rw-r--r--yaml/lib/yaml/representer.py489
-rw-r--r--yaml/lib/yaml/resolver.py227
-rw-r--r--yaml/lib/yaml/scanner.py1444
-rw-r--r--yaml/lib/yaml/serializer.py111
-rw-r--r--yaml/lib/yaml/tokens.py104
-rw-r--r--yaml/lib3/yaml/__init__.py427
-rw-r--r--yaml/lib3/yaml/composer.py139
-rw-r--r--yaml/lib3/yaml/constructor.py748
-rw-r--r--yaml/lib3/yaml/cyaml.py101
-rw-r--r--yaml/lib3/yaml/dumper.py62
-rw-r--r--yaml/lib3/yaml/emitter.py1137
-rw-r--r--yaml/lib3/yaml/error.py75
-rw-r--r--yaml/lib3/yaml/events.py86
-rw-r--r--yaml/lib3/yaml/loader.py63
-rw-r--r--yaml/lib3/yaml/nodes.py49
-rw-r--r--yaml/lib3/yaml/parser.py589
-rw-r--r--yaml/lib3/yaml/reader.py185
-rw-r--r--yaml/lib3/yaml/representer.py389
-rw-r--r--yaml/lib3/yaml/resolver.py227
-rw-r--r--yaml/lib3/yaml/scanner.py1435
-rw-r--r--yaml/lib3/yaml/serializer.py111
-rw-r--r--yaml/lib3/yaml/tokens.py104
2578 files changed, 84880 insertions, 14936 deletions
diff --git a/.gitignore b/.gitignore
index e4836e446e..8b28b186e1 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,6 +1,14 @@
aclocal.m4
autom4te.cache
-configure
+/build
config.h.in
-Makefile.in
+configure
doc
+/*.ini
+.lock*
+Makefile.in
+*.pyc
+/testsuites/build/bin/fake-rtems5-g++
+/testsuites/build/build
+/testsuites/build/wscript
+.waf*
diff --git a/Doxyfile b/Doxyfile
index 9a8a6376fa..ffb87fe89d 100644
--- a/Doxyfile
+++ b/Doxyfile
@@ -38,7 +38,7 @@ PROJECT_NAME = RTEMS
# could be handy for archiving the generated documentation or if some version
# control system is used.
-PROJECT_NUMBER = 5.0.0
+PROJECT_NUMBER = 6.0.0
# Using the PROJECT_BRIEF tag one can provide an optional one line description
# for a project that appears at the top of each page and should give viewer a
@@ -812,7 +812,7 @@ WARN_LOGFILE =
# spaces. See also FILE_PATTERNS and EXTENSION_MAPPING
# Note: If this tag is empty the current directory is searched.
-INPUT = bsps cpukit
+INPUT = bsps cpukit testsuites/validation
# This tag can be used to specify the character encoding of the source files
# that doxygen parses. Internally doxygen uses the UTF-8 encoding. Doxygen uses
diff --git a/aclocal/version.m4 b/aclocal/version.m4
index 7c8b9df348..69e3eea10a 100644
--- a/aclocal/version.m4
+++ b/aclocal/version.m4
@@ -1,4 +1,4 @@
AC_DEFUN([RTEMS_VERSIONING],
-m4_define([_RTEMS_VERSION],[5.0.0]))
+m4_define([_RTEMS_VERSION],[6.0.0]))
-m4_define([_RTEMS_API],[5])
+m4_define([_RTEMS_API],[6])
diff --git a/bsps/arm/atsam/include/bsp/sc16is752.h b/bsps/arm/atsam/include/bsp/sc16is752.h
index e8973efc46..e27f80bf97 100644
--- a/bsps/arm/atsam/include/bsp/sc16is752.h
+++ b/bsps/arm/atsam/include/bsp/sc16is752.h
@@ -24,44 +24,85 @@
extern "C" {
#endif /* __cplusplus */
+/**
+ * @brief The SC16IS752 device context.
+ *
+ * All members are private to the device driver.
+ */
typedef struct {
sc16is752_spi_context base;
Pin irq_pin;
- rtems_interrupt_server_entry irqs_entry; /* Internal. Don't touch. */
- rtems_interrupt_server_action irqs_action; /* Internal. Don't touch. */
+ rtems_interrupt_server_entry irqs_entry;
+ rtems_interrupt_server_action irqs_action;
+ uint32_t irqs_index;
} atsam_sc16is752_spi_context;
/**
+ * @brief The SC16IS752 device configuration.
+ *
+ * @see atsam_sc16is752_spi_create().
+ */
+typedef struct {
+ /**
+ * @brief The device file path for the new device.
+ */
+ const char *device_path;
+
+ /**
+ * @brief The SC16IS752 mode.
+ */
+ sc16is752_mode mode;
+
+ /**
+ * @brief The input frequency in Hertz of the SC16IS752 chip. See XTAL1 and
+ * XTAL2 pins.
+ */
+ uint32_t input_frequency;
+
+ /**
+ * @brief The SPI bus device path.
+ */
+ const char *spi_path;
+
+ /**
+ * @brief The SPI chip select (starts with 0, the SPI driver uses
+ * SPI_ChipSelect(1 << spi_chip_select)).
+ */
+ uint8_t spi_chip_select;
+
+ /**
+ * @brief The SPI bus speed in Hertz.
+ */
+ uint32_t spi_speed_hz;
+
+ /**
+ * @brief The interrupt pin, e.g. { PIO_PD28, PIOD, ID_PIOD, PIO_INPUT,
+ * PIO_IT_LOW_LEVEL }.
+ */
+ const Pin irq_pin;
+
+ /**
+ * @brief The index to identify the interrupt server used for interrupt
+ * processing.
+ */
+ uint32_t server_index;
+} atsam_sc16is752_spi_config;
+
+/**
* @brief Creates an SPI connected SC16IS752 device.
*
- * This devices uses the interrupt server, see
- * rtems_interrupt_server_initialize().
+ * This devices uses the interrupt server, see rtems_interrupt_server_create().
*
* The device claims the interrupt of the PIO block.
*
- * @param[in] ctx The device context. May have an arbitrary content.
- * @param[in] device_path The device file path for the new device.
- * @param[in] mode The SC16IS752 mode.
- * @param[in] input_frequency The input frequency in Hertz of the SC16IS752
- * chip. See XTAL1 and XTAL2 pins.
- * @param[in] spi_path The SPI bus device path.
- * @param[in] spi_chip_select The SPI chip select (starts with 0, the SPI
- * driver uses SPI_ChipSelect(1 << spi_chip_select)).
- * @param[in] spi_speed_hz The SPI bus speed in Hertz.
- * @param[in] irq_pin The interrupt pin, e.g. { PIO_PD28, PIOD, ID_PIOD,
- * PIO_INPUT, PIO_IT_LOW_LEVEL }.
+ * @param[out] ctx is the device context. It may have an arbitrary content.
+ * @param config is the device configuration.
*
* @return See sc16is752_spi_create().
*/
int atsam_sc16is752_spi_create(
- atsam_sc16is752_spi_context *ctx,
- const char *device_path,
- sc16is752_mode mode,
- uint32_t input_frequency,
- const char *spi_path,
- uint8_t spi_chip_select,
- uint32_t spi_speed_hz,
- const Pin *irq_pin
+ atsam_sc16is752_spi_context *ctx,
+ const atsam_sc16is752_spi_config *config
);
#ifdef __cplusplus
diff --git a/bsps/arm/atsam/spi/sc16is752.c b/bsps/arm/atsam/spi/sc16is752.c
index 8d38fe92d6..59380d5057 100644
--- a/bsps/arm/atsam/spi/sc16is752.c
+++ b/bsps/arm/atsam/spi/sc16is752.c
@@ -41,7 +41,7 @@ static bool atsam_sc16is752_install_interrupt(sc16is752_context *base)
rtems_status_code sc;
uint8_t rv;
- sc = rtems_interrupt_server_entry_initialize(RTEMS_INTERRUPT_SERVER_DEFAULT,
+ sc = rtems_interrupt_server_entry_initialize(ctx->irqs_index,
&ctx->irqs_entry);
rtems_interrupt_server_action_prepend(&ctx->irqs_entry,
&ctx->irqs_action, atsam_sc16i752_irqs_handler, ctx);
@@ -64,24 +64,19 @@ static void atsam_sc16is752_remove_interrupt(sc16is752_context *base)
}
int atsam_sc16is752_spi_create(
- atsam_sc16is752_spi_context *ctx,
- const char *device_path,
- sc16is752_mode mode,
- uint32_t input_frequency,
- const char *spi_path,
- uint8_t spi_chip_select,
- uint32_t spi_speed_hz,
- const Pin *irq_pin
+ atsam_sc16is752_spi_context *ctx,
+ const atsam_sc16is752_spi_config *config
)
{
- ctx->base.base.mode = mode;
- ctx->base.base.input_frequency = input_frequency;
+ ctx->base.base.mode = config->mode;
+ ctx->base.base.input_frequency = config->input_frequency;
ctx->base.base.install_irq = atsam_sc16is752_install_interrupt;
ctx->base.base.remove_irq = atsam_sc16is752_remove_interrupt;
- ctx->base.spi_path = spi_path;
- ctx->base.cs = spi_chip_select;
- ctx->base.speed_hz = spi_speed_hz;
- ctx->irq_pin = *irq_pin;
+ ctx->base.spi_path = config->spi_path;
+ ctx->base.cs = config->spi_chip_select;
+ ctx->base.speed_hz = config->spi_speed_hz;
+ ctx->irq_pin = config->irq_pin;
+ ctx->irqs_index = config->server_index;
- return sc16is752_spi_create(&ctx->base, device_path);
+ return sc16is752_spi_create(&ctx->base, config->device_path);
}
diff --git a/bsps/arm/beagle/i2c/bbb-i2c.c b/bsps/arm/beagle/i2c/bbb-i2c.c
index 664684b02f..b2a7cf814d 100644
--- a/bsps/arm/beagle/i2c/bbb-i2c.c
+++ b/bsps/arm/beagle/i2c/bbb-i2c.c
@@ -199,7 +199,7 @@ static int am335x_i2c_reset( bbb_i2c_bus *bus )
}
if ( timeout <= 0 ) {
- puts( "ERROR: Timeout in soft-reset\n" );
+ debug_print( "ERROR: Timeout in soft-reset\n" );
return ETIMEDOUT;
}
diff --git a/bsps/arm/beagle/pwm/pwm.c b/bsps/arm/beagle/pwm/pwm.c
index 0bc5d125bf..81ace1254e 100644
--- a/bsps/arm/beagle/pwm/pwm.c
+++ b/bsps/arm/beagle/pwm/pwm.c
@@ -102,9 +102,9 @@ bool beagle_pwm_pinmux_setup(bbb_pwm_pin_t pin_no, BBB_PWMSS pwm_id)
} else if (pin_no == BBB_P8_36_1A) {
REG(AM335X_PADCONF_BASE + BBB_CONTROL_CONF_LCD_DATA(10)) = BBB_MUXMODE(BBB_P8_36_MUX_PWM);
} else if (pin_no == BBB_P9_14_1A) {
- REG(AM335X_PADCONF_BASE + BBB_CONTROL_CONF_GPMC_AD(2)) = BBB_MUXMODE(BBB_P9_14_MUX_PWM);
+ REG(AM335X_PADCONF_BASE + AM335X_CONF_GPMC_A2) = BBB_MUXMODE(BBB_P9_14_MUX_PWM);
} else if (pin_no == BBB_P9_16_1B) {
- REG(AM335X_PADCONF_BASE + BBB_CONTROL_CONF_GPMC_AD(3)) = BBB_MUXMODE(BBB_P9_16_MUX_PWM);
+ REG(AM335X_PADCONF_BASE + AM335X_CONF_GPMC_A3) = BBB_MUXMODE(BBB_P9_16_MUX_PWM);
} else {
is_valid = false;
}
diff --git a/bsps/arm/csb337/start/linkcmds.kit637_v6 b/bsps/arm/csb337/start/linkcmds.kit637_v6
new file mode 100644
index 0000000000..91a34b7229
--- /dev/null
+++ b/bsps/arm/csb337/start/linkcmds.kit637_v6
@@ -0,0 +1,27 @@
+MEMORY {
+ SDRAM : ORIGIN = 0x20100000, LENGTH = 63M - 16k
+ SDRAM_MMU : ORIGIN = 0x23ffc000, LENGTH = 16k
+ SRAM : ORIGIN = 0x00200000, LENGTH = 16k
+}
+
+REGION_ALIAS ("REGION_START", SDRAM);
+REGION_ALIAS ("REGION_VECTOR", SRAM);
+REGION_ALIAS ("REGION_TEXT", SDRAM);
+REGION_ALIAS ("REGION_TEXT_LOAD", SDRAM);
+REGION_ALIAS ("REGION_RODATA", SDRAM);
+REGION_ALIAS ("REGION_RODATA_LOAD", SDRAM);
+REGION_ALIAS ("REGION_DATA", SDRAM);
+REGION_ALIAS ("REGION_DATA_LOAD", SDRAM);
+REGION_ALIAS ("REGION_FAST_TEXT", SDRAM);
+REGION_ALIAS ("REGION_FAST_TEXT_LOAD", SDRAM);
+REGION_ALIAS ("REGION_FAST_DATA", SDRAM);
+REGION_ALIAS ("REGION_FAST_DATA_LOAD", SDRAM);
+REGION_ALIAS ("REGION_BSS", SDRAM);
+REGION_ALIAS ("REGION_WORK", SDRAM);
+REGION_ALIAS ("REGION_STACK", SDRAM);
+REGION_ALIAS ("REGION_NOCACHE", SDRAM);
+REGION_ALIAS ("REGION_NOCACHE_LOAD", SDRAM);
+
+_ttbl_base = ORIGIN (SDRAM_MMU);
+
+INCLUDE linkcmds.armv4
diff --git a/bsps/arm/imx/gpio/imx-gpio.c b/bsps/arm/imx/gpio/imx-gpio.c
new file mode 100644
index 0000000000..552e1d5cc2
--- /dev/null
+++ b/bsps/arm/imx/gpio/imx-gpio.c
@@ -0,0 +1,359 @@
+/*
+ * SPDX-License-Identifier: BSD-2-Clause
+ *
+ * Copyright (C) 2019-2020 embedded brains GmbH.
+ *
+ * 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 <assert.h>
+#include <bsp/fatal.h>
+#include <bsp/fdt.h>
+#include <bsp/imx-gpio.h>
+#include <libfdt.h>
+#include <rtems.h>
+#include <rtems/sysinit.h>
+
+#define IMX_GPIO_ALIAS_NAME "gpioX"
+
+/*
+ * i.MX6ULL has 5, i.MX7D has 7
+ *
+ * Be careful when changing this. The attach() does a simple ASCII conversion.
+ */
+#define IMX_MAX_GPIO_MODULES 7
+
+struct imx_gpio_regs {
+ uint32_t dr;
+ uint32_t gdir;
+ uint32_t psr;
+ uint32_t icr1;
+#define IMX_GPIO_ICR_LOW_LEVEL 0
+#define IMX_GPIO_ICR_HIGH_LEVEL 1
+#define IMX_GPIO_ICR_RISING_EDGE 2
+#define IMX_GPIO_ICR_FALLING_EDGE 3
+ uint32_t icr2;
+ uint32_t imr;
+ uint32_t isr;
+ uint32_t edge_sel;
+};
+
+struct imx_gpio {
+ char name[sizeof(IMX_GPIO_ALIAS_NAME)];
+ struct imx_gpio_regs *regs;
+ rtems_interrupt_lock lock;
+};
+
+/* The GPIO modules. These will be initialized based on the FDT alias table. */
+struct imx_gpio imx_gpio[IMX_MAX_GPIO_MODULES];
+
+const char *imx_gpio_get_name(struct imx_gpio *imx_gpio)
+{
+ return imx_gpio->name;
+}
+
+static void imx_gpio_attach(void)
+{
+ size_t i;
+ const void *fdt;
+
+ fdt = bsp_fdt_get();
+
+ memset(imx_gpio, 0, sizeof(imx_gpio));
+
+ for (i = 0; i < IMX_MAX_GPIO_MODULES; ++i) {
+ const char *path;
+ int node;
+ const uint32_t *val;
+ uint32_t gpio_regs = 0;
+ int len;
+
+ memcpy(imx_gpio[i].name, IMX_GPIO_ALIAS_NAME, sizeof(IMX_GPIO_ALIAS_NAME));
+ imx_gpio[i].name[sizeof(IMX_GPIO_ALIAS_NAME)-2] = (char)('0' + i);
+
+ path = fdt_get_alias(fdt, imx_gpio[i].name);
+ if (path == NULL) {
+ continue;
+ }
+
+ node = fdt_path_offset(fdt, path);
+ if (node < 0) {
+ bsp_fatal(IMX_FATAL_GPIO_UNEXPECTED_FDT);
+ }
+
+ val = fdt_getprop(fdt, node, "reg", &len);
+ if (len > 0) {
+ gpio_regs = fdt32_to_cpu(val[0]);
+ } else {
+ bsp_fatal(IMX_FATAL_GPIO_UNEXPECTED_FDT);
+ }
+
+ imx_gpio[i].regs = (struct imx_gpio_regs *)gpio_regs;
+ rtems_interrupt_lock_initialize(&imx_gpio[i].lock, imx_gpio[i].name);
+ }
+}
+
+struct imx_gpio *imx_gpio_get_by_index(unsigned idx)
+{
+ if ((idx < IMX_MAX_GPIO_MODULES) && (imx_gpio[idx].regs != NULL)) {
+ return &imx_gpio[idx];
+ }
+ return NULL;
+}
+
+struct imx_gpio *imx_gpio_get_by_register(void *regs)
+{
+ size_t i;
+
+ for (i = 0; i < IMX_MAX_GPIO_MODULES; ++i) {
+ if (imx_gpio[i].regs == regs) {
+ return &imx_gpio[i];
+ }
+ }
+ return NULL;
+}
+
+static void imx_gpio_direction_input(struct imx_gpio_pin *pin)
+{
+ rtems_interrupt_lock_context lock_context;
+ rtems_interrupt_lock_acquire(&pin->gpio->lock, &lock_context);
+ pin->gpio->regs->gdir &= ~pin->mask;
+ rtems_interrupt_lock_release(&pin->gpio->lock, &lock_context);
+}
+
+static void imx_gpio_direction_output(struct imx_gpio_pin *pin)
+{
+ rtems_interrupt_lock_context lock_context;
+ rtems_interrupt_lock_acquire(&pin->gpio->lock, &lock_context);
+ pin->gpio->regs->gdir |= pin->mask;
+ rtems_interrupt_lock_release(&pin->gpio->lock, &lock_context);
+}
+
+static void imx_gpio_set_interrupt_any_edge(struct imx_gpio_pin *pin)
+{
+ rtems_interrupt_lock_context lock_context;
+ rtems_interrupt_lock_acquire(&pin->gpio->lock, &lock_context);
+ pin->gpio->regs->edge_sel |= pin->mask;
+ rtems_interrupt_lock_release(&pin->gpio->lock, &lock_context);
+}
+
+static void imx_gpio_set_interrupt_mode(struct imx_gpio_pin *pin, uint32_t mode)
+{
+ size_t i;
+
+ for (i=0; i < 32; ++i) {
+ if ((pin->mask & (1u << i)) != 0) {
+ volatile uint32_t *icr;
+ size_t shift;
+ rtems_interrupt_lock_context lock_context;
+
+ if (i < 16) {
+ icr = &pin->gpio->regs->icr1;
+ shift = 2 * i;
+ } else {
+ icr = &pin->gpio->regs->icr2;
+ shift = 2 * (i - 16);
+ }
+
+ rtems_interrupt_lock_acquire(&pin->gpio->lock, &lock_context);
+ *icr = (*icr & ~(3u << shift)) | (mode << shift);
+ rtems_interrupt_lock_release(&pin->gpio->lock, &lock_context);
+ }
+ }
+}
+
+rtems_status_code imx_gpio_init_from_fdt_property (
+ struct imx_gpio_pin *pin,
+ int node_offset,
+ const char *property,
+ enum imx_gpio_mode mode,
+ size_t index
+)
+{
+ int len;
+ const uint32_t *val;
+ rtems_status_code sc = RTEMS_SUCCESSFUL;
+ const void *fdt;
+ uint32_t gpio_regs;
+ const unsigned pin_length_dwords = 3;
+ const unsigned pin_length_bytes = (pin_length_dwords * sizeof(uint32_t));
+ uint32_t gpio_phandle;
+ uint32_t pin_nr;
+ int cfgnode;
+
+ memset(pin, 0, sizeof(*pin));
+
+ fdt = bsp_fdt_get();
+ val = fdt_getprop(fdt, node_offset, property, &len);
+ if (val == NULL || (len % pin_length_bytes != 0) ||
+ (index >= len / pin_length_bytes)) {
+ sc = RTEMS_UNSATISFIED;
+ }
+ if (sc == RTEMS_SUCCESSFUL) {
+ pin_nr = fdt32_to_cpu(val[1 + index * pin_length_dwords]);
+ gpio_phandle = fdt32_to_cpu(val[0 + index * pin_length_dwords]);
+
+ cfgnode = fdt_node_offset_by_phandle(fdt, gpio_phandle);
+ val = fdt_getprop(fdt, cfgnode, "reg", &len);
+ if (len > 0) {
+ gpio_regs = fdt32_to_cpu(val[0]);
+ } else {
+ sc = RTEMS_UNSATISFIED;
+ }
+ }
+ if (sc == RTEMS_SUCCESSFUL) {
+ pin->gpio = imx_gpio_get_by_register((void *)gpio_regs);
+ pin->mask = 1u << pin_nr;
+ pin->shift = pin_nr;
+ pin->mode = mode;
+ }
+ if (sc == RTEMS_SUCCESSFUL) {
+ imx_gpio_init(pin);
+ }
+
+ return sc;
+}
+
+rtems_vector_number imx_gpio_get_irq_of_node(
+ const void *fdt,
+ int node,
+ size_t index
+)
+{
+ const uint32_t *val;
+ uint32_t pin;
+ int parent;
+ size_t parent_index;
+ int len;
+
+ val = fdt_getprop(fdt, node, "interrupts", &len);
+ if (val == NULL || len < (int) ((index + 1) * 8)) {
+ return UINT32_MAX;
+ }
+ pin = fdt32_to_cpu(val[index * 2]);
+ if (pin < 16) {
+ parent_index = 0;
+ } else {
+ parent_index = 1;
+ }
+
+ val = fdt_getprop(fdt, node, "interrupt-parent", &len);
+ if (len != 4) {
+ return UINT32_MAX;
+ }
+ parent = fdt_node_offset_by_phandle(fdt, fdt32_to_cpu(val[0]));
+
+ return imx_get_irq_of_node(fdt, parent, parent_index);
+}
+
+void imx_gpio_init (struct imx_gpio_pin *pin)
+{
+ switch (pin->mode) {
+ case (IMX_GPIO_MODE_INTERRUPT_LOW):
+ imx_gpio_direction_input(pin);
+ imx_gpio_set_interrupt_mode(pin, IMX_GPIO_ICR_LOW_LEVEL);
+ break;
+ case (IMX_GPIO_MODE_INTERRUPT_HIGH):
+ imx_gpio_direction_input(pin);
+ imx_gpio_set_interrupt_mode(pin, IMX_GPIO_ICR_HIGH_LEVEL);
+ break;
+ case (IMX_GPIO_MODE_INTERRUPT_RISING):
+ imx_gpio_direction_input(pin);
+ imx_gpio_set_interrupt_mode(pin, IMX_GPIO_ICR_RISING_EDGE);
+ break;
+ case (IMX_GPIO_MODE_INTERRUPT_FALLING):
+ imx_gpio_direction_input(pin);
+ imx_gpio_set_interrupt_mode(pin, IMX_GPIO_ICR_FALLING_EDGE);
+ break;
+ case (IMX_GPIO_MODE_INTERRUPT_ANY_EDGE):
+ imx_gpio_direction_input(pin);
+ imx_gpio_set_interrupt_any_edge(pin);
+ /* Interrupt mode isn't really relevant here. Just set it to get
+ * a defined behaviour in case of a bug. */
+ imx_gpio_set_interrupt_mode(pin, IMX_GPIO_ICR_FALLING_EDGE);
+ break;
+ case (IMX_GPIO_MODE_INPUT):
+ imx_gpio_direction_input(pin);
+ break;
+ case (IMX_GPIO_MODE_OUTPUT):
+ imx_gpio_direction_output(pin);
+ break;
+ default:
+ assert(false);
+ break;
+ }
+}
+
+void imx_gpio_set_output(struct imx_gpio_pin *pin, uint32_t set)
+{
+ rtems_interrupt_lock_context lock_context;
+ set <<= pin->shift;
+ set &= pin->mask;
+ rtems_interrupt_lock_acquire(&pin->gpio->lock, &lock_context);
+ pin->gpio->regs->dr = (pin->gpio->regs->dr & ~pin->mask) | set;
+ rtems_interrupt_lock_release(&pin->gpio->lock, &lock_context);
+}
+
+void imx_gpio_toggle_output(struct imx_gpio_pin *pin)
+{
+ rtems_interrupt_lock_context lock_context;
+ rtems_interrupt_lock_acquire(&pin->gpio->lock, &lock_context);
+ pin->gpio->regs->dr = (pin->gpio->regs->dr ^ pin->mask);
+ rtems_interrupt_lock_release(&pin->gpio->lock, &lock_context);
+}
+
+uint32_t imx_gpio_get_input(struct imx_gpio_pin *pin)
+{
+ return (pin->gpio->regs->dr & pin->mask) >> pin->shift;
+}
+
+void imx_gpio_int_disable(struct imx_gpio_pin *pin)
+{
+ rtems_interrupt_lock_context lock_context;
+ rtems_interrupt_lock_acquire(&pin->gpio->lock, &lock_context);
+ pin->gpio->regs->imr &= ~pin->mask;
+ rtems_interrupt_lock_release(&pin->gpio->lock, &lock_context);
+}
+
+void imx_gpio_int_enable(struct imx_gpio_pin *pin)
+{
+ rtems_interrupt_lock_context lock_context;
+ rtems_interrupt_lock_acquire(&pin->gpio->lock, &lock_context);
+ pin->gpio->regs->imr |= pin->mask;
+ rtems_interrupt_lock_release(&pin->gpio->lock, &lock_context);
+}
+
+uint32_t imx_gpio_get_isr(struct imx_gpio_pin *pin)
+{
+ return (pin->gpio->regs->isr & pin->mask) >> pin->shift;
+}
+
+void imx_gpio_clear_isr(struct imx_gpio_pin *pin, uint32_t clr)
+{
+ pin->gpio->regs->isr = (clr << pin->shift) & pin->mask;
+}
+
+RTEMS_SYSINIT_ITEM(
+ imx_gpio_attach,
+ RTEMS_SYSINIT_DEVICE_DRIVERS,
+ RTEMS_SYSINIT_ORDER_FIRST
+);
diff --git a/bsps/arm/imx/headers.am b/bsps/arm/imx/headers.am
index dd18164254..3a093b1698 100644
--- a/bsps/arm/imx/headers.am
+++ b/bsps/arm/imx/headers.am
@@ -19,4 +19,5 @@ include_arm_freescale_imx_HEADERS += ../../../../../../bsps/arm/imx/include/arm/
include_bspdir = $(includedir)/bsp
include_bsp_HEADERS =
+include_bsp_HEADERS += ../../../../../../bsps/arm/imx/include/bsp/imx-gpio.h
include_bsp_HEADERS += ../../../../../../bsps/arm/imx/include/bsp/irq.h
diff --git a/bsps/arm/imx/include/bsp/imx-gpio.h b/bsps/arm/imx/include/bsp/imx-gpio.h
new file mode 100644
index 0000000000..dca2d0cfad
--- /dev/null
+++ b/bsps/arm/imx/include/bsp/imx-gpio.h
@@ -0,0 +1,196 @@
+/* SPDX-License-Identifier: BSD-2-Clause */
+
+/*
+ * Copyright (C) 2020 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.
+ */
+
+#ifndef BSP_IMX_GPIO_H
+#define BSP_IMX_GPIO_H
+
+#include <rtems.h>
+#include <stdint.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif /* __cplusplus */
+
+/** Hardware registers and locking mechanism for one hardware GPIO module. */
+struct imx_gpio;
+
+/** Mode of the pin. */
+enum imx_gpio_mode {
+ IMX_GPIO_MODE_OUTPUT,
+ IMX_GPIO_MODE_INPUT,
+ IMX_GPIO_MODE_INTERRUPT_LOW,
+ IMX_GPIO_MODE_INTERRUPT_HIGH,
+ IMX_GPIO_MODE_INTERRUPT_RISING,
+ IMX_GPIO_MODE_INTERRUPT_FALLING,
+ IMX_GPIO_MODE_INTERRUPT_ANY_EDGE,
+};
+
+/**
+ * A i.MX GPIO pin or set of pins.
+ *
+ * Use this structures to handle pins in the application. You can either get
+ * them from an FDT entry (with @ref imx_gpio_init_from_fde_property) or fill
+ * them by hand.
+ */
+struct imx_gpio_pin {
+ /** Management structure for the GPIO. Get with @ref imx_gpio_get_by_index. */
+ volatile struct imx_gpio* gpio;
+ /**
+ * Select the pins you want to handle with this mask. The mask is not
+ * influenced by the @a shift field.
+ */
+ uint32_t mask;
+ /** If set to something != 0: Shift the pins that many bits. */
+ unsigned int shift;
+ /** Whether the pin is an input, output, interrupt, ... */
+ enum imx_gpio_mode mode;
+};
+
+/**
+ * Initialize a GPIO pin. Only necessary for manually filled imx_gpio
+ * structures.
+ */
+void imx_gpio_init (struct imx_gpio_pin *pin);
+
+/**
+ * Initialize a GPIO pin from a FDT property.
+ *
+ * If you have for example the following property in an FDT node:
+ *
+ * some-node {
+ * gpios = <&gpio5 1 GPIO_ACTIVE_LOW>, <&gpio4 22 GPIO_ACTIVE_LOW>;
+ * };
+ *
+ * you can use the following to initialize the second GPIO:
+ *
+ * imx_gpio_init_from_fdt_property(&pin, node, "gpios",
+ * IMX_GPIO_INTERRUPT_LOW, 1);
+ *
+ * NOTE: The information from the third parameter in the FDT (GPIO_ACTIVE_LOW in
+ * the example) is currently ignored.
+ */
+rtems_status_code imx_gpio_init_from_fdt_property(
+ struct imx_gpio_pin *pin,
+ int node_offset,
+ const char *property,
+ enum imx_gpio_mode mode,
+ size_t index);
+
+/**
+ * Return the RTEMS interrupt vector belonging to the GPIO interrupt of a given
+ * node. The node should look like follows:
+ *
+ * some-node {
+ * interrupt-parent = <&gpio4>;
+ * interrupts = <15 IRQ_TYPE_EDGE_BOTH>, <22 IRQ_TYPE_EDGE_BOTH>;
+ * };
+ *
+ * To get the interrupt vector from the first GPIO in interrupts use
+ *
+ * imx_gpio_get_irq_of_node(fdt, node, 0);
+ *
+ * @returns the interrupt vector if successful.
+ * @returns BSP_INTERRUPT_VECTOR_INVALID on failure.
+ */
+rtems_vector_number imx_gpio_get_irq_of_node(
+ const void *fdt,
+ int node,
+ size_t index);
+
+/**
+ * Return the gpio management structure based on the GPIO index. The index is
+ * the one used in the FDT alias list. So index 0 is GPIO1 in the i.MX docs for
+ * most FDTs based on the Linux one.
+ */
+struct imx_gpio *imx_gpio_get_by_index(unsigned idx);
+
+/**
+ * Return the gpio management structure based on the GPIO registers.
+ */
+struct imx_gpio *imx_gpio_get_by_register(void *regs);
+
+/**
+ * Get the name of the gpio.
+ */
+const char *imx_gpio_get_name(struct imx_gpio *imx_gpio);
+
+/**
+ * Set the value of the output pin. @a set will be shifted and masked (in that
+ * order) based on the values of @a pin.
+ */
+void imx_gpio_set_output(struct imx_gpio_pin *pin, uint32_t set);
+
+/**
+ * Toggle the value of the output pin.
+ */
+void imx_gpio_toggle_output(struct imx_gpio_pin *pin);
+
+/**
+ * Get the value of the input pin. The input value will be masked and shifted
+ * (in that order) based on the values of @a pin.
+ */
+uint32_t imx_gpio_get_input(struct imx_gpio_pin *pin);
+
+/**
+ * Disable the interrupt of the given @a pin.
+ */
+void imx_gpio_int_disable(struct imx_gpio_pin *pin);
+
+/**
+ * Enable the interrupt of the given @a pin.
+ */
+void imx_gpio_int_enable(struct imx_gpio_pin *pin);
+
+/**
+ * Read the interrupt status register for the given @a pin.
+ */
+uint32_t imx_gpio_get_isr(struct imx_gpio_pin *pin);
+
+/**
+ * Clear the interrupt status register for the given @a pin.
+ */
+void imx_gpio_clear_isr(struct imx_gpio_pin *pin, uint32_t clr);
+
+/**
+ * Fast access macros for the GPIOs. Note that these assume a FDT based on the
+ * Linux FDTs.
+ */
+/** @{ */
+#define IMX_GPIO1 (imx_gpio_get_by_index(0))
+#define IMX_GPIO2 (imx_gpio_get_by_index(1))
+#define IMX_GPIO3 (imx_gpio_get_by_index(2))
+#define IMX_GPIO4 (imx_gpio_get_by_index(3))
+#define IMX_GPIO5 (imx_gpio_get_by_index(4))
+#define IMX_GPIO6 (imx_gpio_get_by_index(5))
+#define IMX_GPIO7 (imx_gpio_get_by_index(6))
+/** @} */
+
+#ifdef __cplusplus
+}
+#endif /* __cplusplus */
+
+#endif /* BSP_IMX_GPIO_H */
diff --git a/bsps/arm/imx/include/bsp/irq.h b/bsps/arm/imx/include/bsp/irq.h
index 73d2e69b30..78b48e1613 100644
--- a/bsps/arm/imx/include/bsp/irq.h
+++ b/bsps/arm/imx/include/bsp/irq.h
@@ -28,6 +28,7 @@ extern "C" {
#define BSP_INTERRUPT_VECTOR_MIN 0
#define BSP_INTERRUPT_VECTOR_MAX 159
+#define BSP_INTERRUPT_VECTOR_INVALID (UINT32_MAX)
#ifdef __cplusplus
}
diff --git a/bsps/arm/imx/spi/imx-ecspi.c b/bsps/arm/imx/spi/imx-ecspi.c
index a18047f2e0..26ba812f62 100644
--- a/bsps/arm/imx/spi/imx-ecspi.c
+++ b/bsps/arm/imx/spi/imx-ecspi.c
@@ -14,6 +14,7 @@
#include <bsp.h>
#include <bsp/fdt.h>
+#include <bsp/imx-gpio.h>
#include <libfdt.h>
#include <arm/freescale/imx/imx_ccmvar.h>
#include <arm/freescale/imx/imx_ecspireg.h>
@@ -23,6 +24,8 @@
#include <sys/endian.h>
#define IMX_ECSPI_FIFO_SIZE 64
+#define IMX_ECSPI_MAX_CHIPSELECTS 4
+#define IMX_ECSPI_CS_NONE IMX_ECSPI_MAX_CHIPSELECTS
typedef struct imx_ecspi_bus imx_ecspi_bus;
@@ -44,6 +47,10 @@ struct imx_ecspi_bus {
void (*pop)(imx_ecspi_bus *, volatile imx_ecspi *);
rtems_id task_id;
rtems_vector_number irq;
+ struct {
+ struct imx_gpio_pin pin;
+ bool valid;
+ } cspins[IMX_ECSPI_MAX_CHIPSELECTS];
};
static bool imx_ecspi_is_rx_fifo_not_empty(volatile imx_ecspi *regs)
@@ -129,6 +136,27 @@ static void imx_ecspi_push(imx_ecspi_bus *bus, volatile imx_ecspi *regs)
}
}
+/* Call with IMX_ECSPI_CS_NONE for @a cs to set all to idle */
+static void
+imx_ecspi_set_chipsel(imx_ecspi_bus *bus, uint32_t cs)
+{
+ size_t i;
+
+ /* Currently this is fixed active low */
+ static const uint32_t idle = 1;
+ static const uint32_t select = 0;
+
+ for (i = 0; i < IMX_ECSPI_MAX_CHIPSELECTS; ++i) {
+ if (bus->cspins[i].valid) {
+ if (i != cs) {
+ imx_gpio_set_output(&bus->cspins[i].pin, idle);
+ } else {
+ imx_gpio_set_output(&bus->cspins[cs].pin, select);
+ }
+ }
+ }
+}
+
static uint32_t imx_ecspi_conreg_divider(imx_ecspi_bus *bus, uint32_t speed_hz)
{
uint32_t post;
@@ -286,6 +314,11 @@ static void imx_ecspi_next_msg(imx_ecspi_bus *bus, volatile imx_ecspi *regs)
msg->cs
);
}
+ if ((msg->mode & SPI_NO_CS) != 0) {
+ imx_ecspi_set_chipsel(bus, IMX_ECSPI_CS_NONE);
+ } else {
+ imx_ecspi_set_chipsel(bus, msg->cs);
+ }
bus->todo = msg->len;
bus->rx_buf = msg->rx_buf;
@@ -323,6 +356,37 @@ static void imx_ecspi_interrupt(void *arg)
}
}
+static int imx_ecspi_check_messages(
+ imx_ecspi_bus *bus,
+ const spi_ioc_transfer *msg,
+ uint32_t size)
+{
+ while(size > 0) {
+ if (msg->delay_usecs != 0) {
+ return -EINVAL;
+ }
+ if (msg->bits_per_word > 32) {
+ return -EINVAL;
+ }
+ if ((msg->mode &
+ ~(SPI_CPHA | SPI_CPOL | SPI_LOOP | SPI_NO_CS)) != 0) {
+ return -EINVAL;
+ }
+ if ((msg->mode & SPI_NO_CS) == 0 &&
+ (msg->cs > IMX_ECSPI_MAX_CHIPSELECTS || !bus->cspins[msg->cs].valid)) {
+ return -EINVAL;
+ }
+ if (msg->cs_change != 0) {
+ return -EINVAL;
+ }
+
+ ++msg;
+ --size;
+ }
+
+ return 0;
+}
+
static int imx_ecspi_transfer(
spi_bus *base,
const spi_ioc_transfer *msgs,
@@ -330,16 +394,22 @@ static int imx_ecspi_transfer(
)
{
imx_ecspi_bus *bus;
+ int rv;
bus = (imx_ecspi_bus *) base;
- bus->msg_todo = n;
- bus->msg = &msgs[0];
- bus->task_id = rtems_task_self();
+ rv = imx_ecspi_check_messages(bus, msgs, n);
- imx_ecspi_next_msg(bus, bus->regs);
- rtems_event_transient_receive(RTEMS_WAIT, RTEMS_NO_TIMEOUT);
- return 0;
+ if (rv == 0) {
+ bus->msg_todo = n;
+ bus->msg = &msgs[0];
+ bus->task_id = rtems_task_self();
+
+ imx_ecspi_next_msg(bus, bus->regs);
+ rtems_event_transient_receive(RTEMS_WAIT, RTEMS_NO_TIMEOUT);
+ imx_ecspi_set_chipsel(bus, IMX_ECSPI_CS_NONE);
+ }
+ return rv;
}
static void imx_ecspi_destroy(spi_bus *base)
@@ -356,6 +426,14 @@ static int imx_ecspi_init(imx_ecspi_bus *bus, const void *fdt, int node)
rtems_status_code sc;
int len;
const uint32_t *val;
+ size_t i;
+
+ for (i = 0; i < IMX_ECSPI_MAX_CHIPSELECTS; ++i) {
+ rtems_status_code sc_gpio = imx_gpio_init_from_fdt_property(
+ &bus->cspins[i].pin, node, "cs-gpios", IMX_GPIO_MODE_OUTPUT, i);
+ bus->cspins[i].valid = (sc_gpio == RTEMS_SUCCESSFUL);
+ }
+ imx_ecspi_set_chipsel(bus, IMX_ECSPI_CS_NONE);
imx_ecspi_config(
bus,
@@ -436,7 +514,7 @@ int spi_bus_register_imx(const char *bus_path, const char *alias_or_path)
}
bus->base.max_speed_hz = imx_ccm_ecspi_hz();
- bus->base.delay_usecs = 1;
+ bus->base.delay_usecs = 0;
bus->regs = imx_get_reg_of_node(fdt, node);
bus->irq = imx_get_irq_of_node(fdt, node, 0);
diff --git a/bsps/arm/imx/start/bspstart.c b/bsps/arm/imx/start/bspstart.c
index 36f62993a6..5fb07bf60a 100644
--- a/bsps/arm/imx/start/bspstart.c
+++ b/bsps/arm/imx/start/bspstart.c
@@ -47,7 +47,7 @@ rtems_vector_number imx_get_irq_of_node(
val = fdt_getprop(fdt, node, "interrupts", &len);
if (val == NULL || len < (int) ((index + 1) * 12)) {
- return UINT32_MAX;
+ return BSP_INTERRUPT_VECTOR_INVALID;
}
return fdt32_to_cpu(val[index * 3 + 1]) + MAGIC_IRQ_OFFSET;
diff --git a/bsps/arm/include/bsp/linker-symbols.h b/bsps/arm/include/bsp/linker-symbols.h
index d743f67f50..ab39b80b28 100644
--- a/bsps/arm/include/bsp/linker-symbols.h
+++ b/bsps/arm/include/bsp/linker-symbols.h
@@ -23,6 +23,8 @@
#ifndef LIBBSP_ARM_SHARED_LINKER_SYMBOLS_H
#define LIBBSP_ARM_SHARED_LINKER_SYMBOLS_H
+#include <rtems/score/basedefs.h>
+
#ifdef __cplusplus
extern "C" {
#endif /* __cplusplus */
@@ -123,19 +125,23 @@ LINKER_SYMBOL(bsp_start_vector_table_size)
LINKER_SYMBOL(bsp_translation_table_base)
LINKER_SYMBOL(bsp_translation_table_end)
-#define BSP_FAST_TEXT_SECTION __attribute__((section(".bsp_fast_text")))
+#define BSP_FAST_TEXT_SECTION \
+ RTEMS_SECTION(".bsp_fast_text")
-#define BSP_FAST_DATA_SECTION __attribute__((section(".bsp_fast_data")))
+#define BSP_FAST_DATA_SECTION \
+ RTEMS_SECTION(".bsp_fast_data")
-#define BSP_NOCACHE_SECTION __attribute__((section(".bsp_nocache")))
+#define BSP_NOCACHE_SECTION \
+ RTEMS_SECTION(".bsp_nocache")
#define BSP_NOCACHE_SUBSECTION(subsection) \
- __attribute__((section(".bsp_nocache." # subsection)))
+ RTEMS_SECTION(".bsp_nocache." # subsection)
-#define BSP_NOCACHENOLOAD_SECTION __attribute__((section(".bsp_noload_nocache")))
+#define BSP_NOCACHENOLOAD_SECTION \
+ RTEMS_SECTION(".bsp_noload_nocache")
#define BSP_NOCACHENOLOAD_SUBSECTION(subsection) \
- __attribute__((section(".bsp_noload_nocache." # subsection)))
+ RTEMS_SECTION(".bsp_noload_nocache." # subsection)
/** @} */
diff --git a/bsps/arm/shared/cp15/arm-cp15-set-ttb-entries.c b/bsps/arm/shared/cp15/arm-cp15-set-ttb-entries.c
index 507277dca1..976f87a36e 100644
--- a/bsps/arm/shared/cp15/arm-cp15-set-ttb-entries.c
+++ b/bsps/arm/shared/cp15/arm-cp15-set-ttb-entries.c
@@ -107,7 +107,7 @@ static uint32_t set_translation_table_entries(
#define MPIDR_UP (1 << 30)
const uint32_t mpidr = arm_cp15_get_multiprocessor_affinity();
if ((mpidr & (MPIDR_MX_FMT | MPIDR_UP)) == MPIDR_MX_FMT) {
- arm_cp15_tlb_invalidate_entry_all_asids(mva);
+ arm_cp15_tlb_invalidate_entry_all_asids_inner_shareable(mva);
}
else
#endif
diff --git a/bsps/arm/shared/serial/zynq-uart-polled.c b/bsps/arm/shared/serial/zynq-uart-polled.c
index 4e0ca46aca..e6f478ee07 100644
--- a/bsps/arm/shared/serial/zynq-uart-polled.c
+++ b/bsps/arm/shared/serial/zynq-uart-polled.c
@@ -122,6 +122,8 @@ void zynq_uart_initialize(rtems_termios_device_context *base)
uint32_t brgr = 0x3e;
uint32_t bauddiv = 0x6;
+ zynq_uart_reset_tx_flush(ctx);
+
zynq_cal_baud_rate(ZYNQ_UART_DEFAULT_BAUD, &brgr, &bauddiv, regs->mode);
regs->control &= ~(ZYNQ_UART_CONTROL_RXEN | ZYNQ_UART_CONTROL_TXEN);
diff --git a/bsps/arm/shared/start/arm-a9mpcore-smp.c b/bsps/arm/shared/start/arm-a9mpcore-smp.c
index c2550136f8..dd0512648c 100644
--- a/bsps/arm/shared/start/arm-a9mpcore-smp.c
+++ b/bsps/arm/shared/start/arm-a9mpcore-smp.c
@@ -12,8 +12,6 @@
* http://www.rtems.org/license/LICENSE.
*/
-#include <assert.h>
-
#include <rtems/score/smpimpl.h>
#include <libcpu/arm-cp15.h>
@@ -42,7 +40,8 @@ void _CPU_SMP_Finalize_initialization(uint32_t cpu_count)
bsp_inter_processor_interrupt,
NULL
);
- assert(sc == RTEMS_SUCCESSFUL);
+ _Assert(sc == RTEMS_SUCCESSFUL);
+ (void) sc;
#if defined(BSP_DATA_CACHE_ENABLED) || defined(BSP_INSTRUCTION_CACHE_ENABLED)
/* Enable unified L2 cache */
diff --git a/bsps/epiphany/epiphany_sim/README b/bsps/epiphany/epiphany_sim/README
deleted file mode 100644
index 7127d91a66..0000000000
--- a/bsps/epiphany/epiphany_sim/README
+++ /dev/null
@@ -1,6 +0,0 @@
-This BSP is intended to run on epiphany-*-run simulator.
-
-From command line type:
-
-$ epiphany-rtems4.11-run -e=on --memory-region 0x8e000000,0x2000000 \
- $PATH_TO_RTEMS_EXE
diff --git a/bsps/epiphany/epiphany_sim/btimer/btimer.c b/bsps/epiphany/epiphany_sim/btimer/btimer.c
deleted file mode 100644
index 9cb8526822..0000000000
--- a/bsps/epiphany/epiphany_sim/btimer/btimer.c
+++ /dev/null
@@ -1,108 +0,0 @@
-/*
- * Copyright (c) 2015 University of York.
- * Hesham ALMatary <hmka501@york.ac.uk>
- *
- * 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 AUTHOR 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 AUTHOR 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>
-#include <bsp.h>
-#include <rtems/btimer.h>
-#include <rtems/score/epiphany-utility.h>
-
-extern char bsp_start_vector_table_begin[];
-
-bool benchmark_timer_find_average_overhead;
-
-static void benchmark_timer1_interrupt_handler(void)
-{
- unsigned int val = 0xFFFFFFFF;
- unsigned int event_type = 0x1;
-
- /* Embed assembly code for setting timer1 */
- __asm__ __volatile__ ("movts ctimer1, %[val] \t \n" :: [val] "r" (val));
-
- __asm__ __volatile__ ("movfs r16, config; \t \n"
- "mov r17, %%low(0xfffff0ff);\t \n"
- "movt r17, %%high(0xffff0ff);\t \n"
- "lsl r18, %[event_type], 0x8; \t \n"
- "and r16, r16, r17; \t \n"
- "orr r16, r16, r18; \t \n"
- "movts config, r16; \t \n"
- :: [event_type] "r" (event_type));
-}
-
-/* Start eCore tiemr 1 usef for profiling and timing analysis */
-void benchmark_timer_initialize( void )
-{
- /* Install interrupt handler for timer 1 */
-
- void (**table)(void) = (void (**)(void)) bsp_start_vector_table_begin;
-
- table[TIMER1] = benchmark_timer1_interrupt_handler;
-
- benchmark_timer1_interrupt_handler();
-}
-
-/*
- * The following controls the behavior of benchmark_timer_read().
- *
- * AVG_OVEREHAD is the overhead for starting and stopping the timer. It
- * is usually deducted from the number returned.
- *
- * LEAST_VALID is the lowest number this routine should trust. Numbers
- * below this are "noise" and zero is returned.
- */
-
-#define AVG_OVERHEAD 0 /* It typically takes X.X microseconds */
- /* (Y countdowns) to start/stop the timer. */
- /* This value is in microseconds. */
-#define LEAST_VALID 1 /* Don't trust a clicks value lower than this */
-
-benchmark_timer_t benchmark_timer_read( void )
-{
- uint32_t timer_val = 0;
- uint32_t total;
-
- __asm__ __volatile__ ("movfs %[timer_val], ctimer1 \t \n"
- :[timer_val] "=r" (timer_val):);
-
- total = (0xFFFFFFFF - timer_val);
-
- if ( benchmark_timer_find_average_overhead == true )
- return total;
- else {
- if ( total < LEAST_VALID )
- return 0; /* below timer resolution */
- /*
- * Somehow convert total into microseconds
- */
- return (total - AVG_OVERHEAD);
- }
-}
-
-void benchmark_timer_disable_subtracting_average_overhead(
- bool find_flag
-)
-{
- benchmark_timer_find_average_overhead = find_flag;
-}
diff --git a/bsps/epiphany/epiphany_sim/config/epiphany_sim.cfg b/bsps/epiphany/epiphany_sim/config/epiphany_sim.cfg
deleted file mode 100644
index 1fef6085d1..0000000000
--- a/bsps/epiphany/epiphany_sim/config/epiphany_sim.cfg
+++ /dev/null
@@ -1,10 +0,0 @@
-include $(RTEMS_ROOT)/make/custom/default.cfg
-
-RTEMS_CPU = epiphany
-
-CPU_CFLAGS =
-
-CFLAGS_OPTIMIZE_V ?= -O0 -g
-CFLAGS_OPTIMIZE_V += -ffunction-sections -fdata-sections
-
-LDFLAGS = -Wl,--gc-sections
diff --git a/bsps/epiphany/epiphany_sim/console/console-io.c b/bsps/epiphany/epiphany_sim/console/console-io.c
deleted file mode 100644
index e3da54389f..0000000000
--- a/bsps/epiphany/epiphany_sim/console/console-io.c
+++ /dev/null
@@ -1,104 +0,0 @@
-/*
- * Copyright (c) 2015 University of York.
- * Hesham ALMatary <hmka501@york.ac.uk>
- *
- * 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 AUTHOR 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 AUTHOR 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 <bsp.h>
-#include <bsp/console-polled.h>
-#include <rtems/libio.h>
-#include <stdlib.h>
-#include <assert.h>
-#include <stdio.h>
-
-static void outbyte_console( char );
-static char inbyte_console( void );
-
-void console_initialize_hardware(void)
-{
- /* Do nothing */
-}
-
-/* Epiphany simulator would handle this system call */
-static void outbyte_console(char c)
-{
- register int chan asm("r0") = STDOUT_FILENO;
- register void* addr asm("r1") = &c;
- register int len asm("r2") = 1;
-
- /* Invoke write system call to be handled by Epiphany simulator */
- __asm__ __volatile__ ("trap 0" : : "r" (chan), "r" (addr), "r" (len));
-}
-
-static char inbyte_console(void)
-{
- char c;
- register int chan asm("r0") = STDIN_FILENO;
- register void* addr asm("r1") = &c;
- register int len asm("r2") = 1;
-
- /* Invoke read system call to be handled by Epiphany simulator */
- asm ("trap 1" :: "r" (chan), "r" (addr), "r" (len));
- return c;
-}
-
-/*
- * console_outbyte_polled
- *
- * This routine transmits a character using polling.
- */
-void console_outbyte_polled(
- int port,
- char ch
-)
-{
- outbyte_console( ch );
-}
-
-/*
- * console_inbyte_nonblocking
- *
- * This routine polls for a character.
- */
-
-int console_inbyte_nonblocking(int port)
-{
- char c;
-
- c = inbyte_console();
- if (!c)
- return -1;
- return (int) c;
-}
-
-/*
- * To support printk
- */
-
-#include <rtems/bspIo.h>
-
-static void Epiphany_output_char(char c) { console_outbyte_polled( 0, c ); }
-
-BSP_output_char_function_type BSP_output_char = Epiphany_output_char;
-BSP_polling_getchar_function_type BSP_poll_char =
- (void *)console_inbyte_nonblocking;
diff --git a/bsps/epiphany/epiphany_sim/headers.am b/bsps/epiphany/epiphany_sim/headers.am
deleted file mode 100644
index bbe2514398..0000000000
--- a/bsps/epiphany/epiphany_sim/headers.am
+++ /dev/null
@@ -1,10 +0,0 @@
-## This file was generated by "./boostrap -H".
-
-include_HEADERS =
-include_HEADERS += ../../../../../../bsps/epiphany/epiphany_sim/include/bsp.h
-include_HEADERS += include/bspopts.h
-include_HEADERS += ../../../../../../bsps/epiphany/epiphany_sim/include/tm27.h
-
-include_bspdir = $(includedir)/bsp
-include_bsp_HEADERS =
-include_bsp_HEADERS += ../../../../../../bsps/epiphany/epiphany_sim/include/bsp/irq.h
diff --git a/bsps/epiphany/epiphany_sim/include/bsp.h b/bsps/epiphany/epiphany_sim/include/bsp.h
deleted file mode 100644
index 36b3f1fad0..0000000000
--- a/bsps/epiphany/epiphany_sim/include/bsp.h
+++ /dev/null
@@ -1,74 +0,0 @@
-/**
- * @file
- *
- * @ingroup RTEMSBSPsEpiphanySim
- */
-
-/*
- * Copyright (c) 2015 University of York.
- * Hesham ALMatary <hmka501@york.ac.uk>
- *
- * COPYRIGHT (c) 1989-1999.
- * 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 AUTHOR 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 AUTHOR 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 LIBBSP_EPIPHANY_EPIPHANY_SIM_H
-#define LIBBSP_EPIPHANY_EPIPHANY_SIM_H
-
-/**
- * @defgroup RTEMSBSPsEpiphanySim Simulator
- *
- * @ingroup RTEMSBSPsEpiphany
- *
- * @brief Simulator Board Support Package.
- *
- * @{
- */
-
-#include <rtems.h>
-
-#include <bspopts.h>
-#include <bsp/default-initial-extension.h>
-
-#include <rtems/devnull.h>
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/**
- * @name Constants
- *
- * @{
- */
-void *clock_driver_sim_idle_body(uintptr_t);
-#define BSP_IDLE_TASK_BODY clock_driver_sim_idle_body
-/** @} */
-
-#ifdef __cplusplus
-}
-#endif
-/** @} */
-
-#endif /* LIBBSP_EPIPHANY_EPIPHANY_SIM_H */
diff --git a/bsps/epiphany/epiphany_sim/include/bsp/irq.h b/bsps/epiphany/epiphany_sim/include/bsp/irq.h
deleted file mode 100644
index 2b15a4536c..0000000000
--- a/bsps/epiphany/epiphany_sim/include/bsp/irq.h
+++ /dev/null
@@ -1,49 +0,0 @@
-/**
- * @file
- *
- * @ingroup Epiphany_IRQ
- *
- * @brief Interrupt definitions.
- */
-
-/*
- *
- * Copyright (c) 2015 University of York.
- * Hesham ALMatary <hmka501@york.ac.uk>
- *
- * 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 AUTHOR 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 AUTHOR 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 LIBBSP_GENERIC_EPIPHANY_IRQ_H
-#define LIBBSP_GENERIC_EPIPHANY_IRQ_H
-
-#ifndef ASM
-
-#include <rtems.h>
-#include <rtems/irq.h>
-#include <rtems/irq-extension.h>
-
-#define BSP_INTERRUPT_VECTOR_MIN 0x0
-#define BSP_INTERRUPT_VECTOR_MAX 0x24
-
-#endif /* ASM */
-#endif /* LIBBSP_GENERIC_OR1K_IRQ_H */
diff --git a/bsps/epiphany/epiphany_sim/include/tm27.h b/bsps/epiphany/epiphany_sim/include/tm27.h
deleted file mode 100644
index 0dfa7bf628..0000000000
--- a/bsps/epiphany/epiphany_sim/include/tm27.h
+++ /dev/null
@@ -1 +0,0 @@
-#include <rtems/tm27-default.h>
diff --git a/bsps/epiphany/epiphany_sim/irq/irq.c b/bsps/epiphany/epiphany_sim/irq/irq.c
deleted file mode 100644
index 994e25bf0e..0000000000
--- a/bsps/epiphany/epiphany_sim/irq/irq.c
+++ /dev/null
@@ -1,64 +0,0 @@
-/**
- * @file
- *
- * @ingroup epiphany_interrupt
- *
- * @brief Interrupt support.
- */
-
-/*
- * Epiphany CPU Dependent Source
- *
- * Copyright (c) 2015 University of York.
- * Hesham ALMatary <hmka501@york.ac.uk>
- *
- * 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 AUTHOR 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 AUTHOR 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 <bsp/irq.h>
-#include <bsp/irq-generic.h>
-
-#include <rtems/inttypes.h>
-
-/* Almost all of the jobs that the following functions should
- * do are implemented in cpukit
- */
-
-void bsp_interrupt_handler_default(rtems_vector_number vector)
-{
- printk("spurious interrupt: %" PRIdrtems_vector_number "\n", vector);
-}
-
-rtems_status_code bsp_interrupt_facility_initialize()
-{
- return 0;
-}
-
-void bsp_interrupt_vector_enable(rtems_vector_number vector)
-{
- bsp_interrupt_assert(bsp_interrupt_is_valid_vector(vector));
-}
-
-void bsp_interrupt_vector_disable(rtems_vector_number vector)
-{
- bsp_interrupt_assert(bsp_interrupt_is_valid_vector(vector));
-}
diff --git a/bsps/epiphany/epiphany_sim/start/bsp_specs b/bsps/epiphany/epiphany_sim/start/bsp_specs
deleted file mode 100644
index 87638cc027..0000000000
--- a/bsps/epiphany/epiphany_sim/start/bsp_specs
+++ /dev/null
@@ -1,9 +0,0 @@
-%rename endfile old_endfile
-%rename startfile old_startfile
-
-*startfile:
-%{!qrtems: %(old_startfile)} \
-%{!nostdlib: %{qrtems: crti.o%s crtbegin.o%s}}
-
-*endfile:
-%{!qrtems: %(old_endfile)} %{qrtems: crtend.o%s crtn.o%s}
diff --git a/bsps/epiphany/epiphany_sim/start/linkcmds b/bsps/epiphany/epiphany_sim/start/linkcmds
deleted file mode 100644
index 8ef1b5b89b..0000000000
--- a/bsps/epiphany/epiphany_sim/start/linkcmds
+++ /dev/null
@@ -1,373 +0,0 @@
-/**
- * @file
- *
- * @ingroup bsp_linker
- *
- * @brief Memory map
- */
-
-/*
- *
- * Copyright (c) 2015 University of York.
- * Hesham ALMatary <hmka501@york.ac.uk>
- *
- * 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 AUTHOR 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 AUTHOR 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.
- */
-
-OUTPUT_FORMAT("elf32-epiphany", "elf32-epiphany", "elf32-epiphany")
-OUTPUT_ARCH (epiphany)
-
-ENTRY (_start)
-STARTUP (start.o)
-
-MEMORY
-{
- VECTOR_RAM (AIW) : ORIGIN = 0x00000000, LENGTH = 0xB0
- LOCAL_MEM (AIW) : ORIGIN = 0x000000B0, LENGTH = 0x00007FC0 /* 32KiB Local memory */
- RAM : ORIGIN = 0x8E000000, LENGTH = 0x01000000 /* 16MiB external RAM */
-}
-
-REGION_ALIAS ("REGION_START", LOCAL_MEM);
-REGION_ALIAS ("REGION_VECTOR", VECTOR_RAM);
-REGION_ALIAS ("REGION_TEXT", RAM);
-REGION_ALIAS ("REGION_TEXT_LOAD", RAM);
-REGION_ALIAS ("REGION_RODATA", RAM);
-REGION_ALIAS ("REGION_RODATA_LOAD", RAM);
-REGION_ALIAS ("REGION_DATA", RAM);
-REGION_ALIAS ("REGION_DATA_LOAD", RAM);
-REGION_ALIAS ("REGION_FAST_DATA", RAM);
-REGION_ALIAS ("REGION_FAST_DATA_LOAD", RAM);
-REGION_ALIAS ("REGION_BSS", RAM);
-REGION_ALIAS ("REGION_WORK", RAM);
-REGION_ALIAS ("REGION_STACK", RAM);
-
-/* The following address is used for text output */
-bsp_section_outbut_buffer = 0x8F800000;
-bsp_section_vector_begin = 0x00000000;
-
-/*
- * Global symbols that may be defined externally
- */
-bsp_vector_table_size = DEFINED (bsp_vector_table_size) ? bsp_vector_table_size : 64;
-
-bsp_section_xbarrier_align = DEFINED (bsp_section_xbarrier_align) ? bsp_section_xbarrier_align : 1;
-bsp_section_robarrier_align = DEFINED (bsp_section_robarrier_align) ? bsp_section_robarrier_align : 1;
-bsp_section_rwbarrier_align = DEFINED (bsp_section_rwbarrier_align) ? bsp_section_rwbarrier_align : 1;
-
-bsp_stack_align = DEFINED (bsp_stack_align) ? bsp_stack_align : 8;
-
-bsp_stack_main_size = DEFINED (bsp_stack_main_size) ? bsp_stack_main_size : 1024;
-bsp_stack_main_size = ALIGN (bsp_stack_main_size, bsp_stack_align);
-
-SECTIONS {
-
- .vector :
- {
- *(.vector)
- . = ALIGN(bsp_vector_table_size);
- bsp_section_vector_end = .;
- } > REGION_VECTOR AT > REGION_VECTOR
- bsp_section_vector_size = bsp_section_vector_end - bsp_section_vector_begin;
- bsp_vector_table_begin = bsp_section_vector_begin;
- bsp_vector_table_end = bsp_vector_table_begin + bsp_vector_table_size;
-
- .start :
- {
- . = ALIGN(8);
- bsp_section_start_begin = .;
- KEEP (*(.bsp_start_text))
- KEEP (*(.bsp_start_data))
- bsp_section_start_end = .;
- } > REGION_START AT > REGION_START
- bsp_section_start_size = bsp_section_start_end - bsp_section_start_begin;
-
-.xbarrier : {
- . = ALIGN (bsp_section_xbarrier_align);
- } > REGION_VECTOR AT > REGION_VECTOR
-
-.text : {
- . = ALIGN(8);
- bsp_section_text_begin = .;
- *(.text.unlikely .text.*_unlikely)
- *(.text .stub .text.* .gnu.linkonce.t.*)
- /* .gnu.warning sections are handled specially by elf32.em. */
- *(.gnu.warning)
- *(.glue_7t) *(.glue_7) *(.vfp11_veneer) *(.v4_bx)
- } > REGION_TEXT AT > REGION_TEXT_LOAD
- .init : {
- KEEP (*(.init))
- } > REGION_TEXT AT > REGION_TEXT_LOAD
- .fini : {
- KEEP (*(.fini))
- . = ALIGN(8);
- bsp_section_text_end = .;
- } > REGION_TEXT AT > REGION_TEXT_LOAD
- bsp_section_text_size = bsp_section_text_end - bsp_section_text_begin;
- bsp_section_text_load_begin = LOADADDR (.text);
- bsp_section_text_load_end = bsp_section_text_load_begin + bsp_section_text_size;
-
-.robarrier : {
- . = ALIGN (bsp_section_robarrier_align);
- } > REGION_RODATA AT > REGION_RODATA
-
-.rodata : {
- . = ALIGN(8);
- bsp_section_rodata_begin = .;
- *(.rodata .rodata.* .gnu.linkonce.r.*)
- } > REGION_RODATA AT > REGION_RODATA_LOAD
-.eh_frame : {
- KEEP (*(.eh_frame))
- } > REGION_RODATA AT > REGION_RODATA_LOAD
- .gcc_except_table : {
- *(.gcc_except_table .gcc_except_table.*)
- } > REGION_RODATA AT > REGION_RODATA_LOAD
- .tdata : {
- _TLS_Data_begin = .;
- *(.tdata .tdata.* .gnu.linkonce.td.*)
- _TLS_Data_end = .;
- } > REGION_RODATA AT > REGION_RODATA_LOAD
- .tbss : {
- _TLS_BSS_begin = .;
- *(.tbss .tbss.* .gnu.linkonce.tb.*) *(.tcommon)
- _TLS_BSS_end = .;
- } > REGION_RODATA AT > REGION_RODATA_LOAD
- _TLS_Data_size = _TLS_Data_end - _TLS_Data_begin;
- _TLS_Data_begin = _TLS_Data_size != 0 ? _TLS_Data_begin : _TLS_BSS_begin;
- _TLS_Data_end = _TLS_Data_size != 0 ? _TLS_Data_end : _TLS_BSS_begin;
- _TLS_BSS_size = _TLS_BSS_end - _TLS_BSS_begin;
- _TLS_Size = _TLS_BSS_end - _TLS_Data_begin;
- _TLS_Alignment = MAX (ALIGNOF (.tdata), ALIGNOF (.tbss));
- .preinit_array : {
- PROVIDE_HIDDEN (__preinit_array_start = .);
- KEEP (*(.preinit_array))
- PROVIDE_HIDDEN (__preinit_array_end = .);
- } > REGION_RODATA AT > REGION_RODATA_LOAD
- .init_array : {
- PROVIDE_HIDDEN (__init_array_start = .);
- KEEP (*(SORT(.init_array.*)))
- KEEP (*(.init_array))
- PROVIDE_HIDDEN (__init_array_end = .);
- } > REGION_RODATA AT > REGION_RODATA_LOAD
- .fini_array : {
- PROVIDE_HIDDEN (__fini_array_start = .);
- KEEP (*(.fini_array))
- KEEP (*(SORT(.fini_array.*)))
- PROVIDE_HIDDEN (__fini_array_end = .);
- } > REGION_RODATA AT > REGION_RODATA_LOAD
- .ctors : {
- /* gcc uses crtbegin.o to find the start of
- the constructors, so we make sure it is
- first. Because this is a wildcard, it
- doesn't matter if the user does not
- actually link against crtbegin.o; the
- linker won't look for a file to match a
- wildcard. The wildcard also means that it
- doesn't matter which directory crtbegin.o
- is in. */
- KEEP (*crtbegin.o(.ctors))
- KEEP (*crtbegin?.o(.ctors))
- /* We don't want to include the .ctor section from
- the crtend.o file until after the sorted ctors.
- The .ctor section from the crtend file contains the
- end of ctors marker and it must be last */
- KEEP (*(EXCLUDE_FILE (*crtend.o *crtend?.o ) .ctors))
- KEEP (*(SORT(.ctors.*)))
- KEEP (*(.ctors))
- } > REGION_RODATA AT > REGION_RODATA_LOAD
- .dtors : {
- KEEP (*crtbegin.o(.dtors))
- KEEP (*crtbegin?.o(.dtors))
- KEEP (*(EXCLUDE_FILE (*crtend.o *crtend?.o ) .dtors))
- KEEP (*(SORT(.dtors.*)))
- KEEP (*(.dtors))
- } > REGION_RODATA AT > REGION_RODATA_LOAD
- .data.rel.ro : {
- *(.data.rel.ro.local* .gnu.linkonce.d.rel.ro.local.*)
- *(.data.rel.ro* .gnu.linkonce.d.rel.ro.*)
- } > REGION_RODATA AT > REGION_RODATA_LOAD
- .jcr : {
- KEEP (*(.jcr))
- } > REGION_RODATA AT > REGION_RODATA_LOAD
- .interp : {
- *(.interp)
- } > REGION_RODATA AT > REGION_RODATA_LOAD
- .note.gnu.build-id : {
- *(.note.gnu.build-id)
- } > REGION_RODATA AT > REGION_RODATA_LOAD
- .hash : {
- *(.hash)
- } > REGION_RODATA AT > REGION_RODATA_LOAD
- .gnu.hash : {
- *(.gnu.hash)
- } > REGION_RODATA AT > REGION_RODATA_LOAD
- .dynsym : {
- *(.dynsym)
- } > REGION_RODATA AT > REGION_RODATA_LOAD
- .dynstr : {
- *(.dynstr)
- } > REGION_RODATA AT > REGION_RODATA_LOAD
- .gnu.version : {
- *(.gnu.version)
- } > REGION_RODATA AT > REGION_RODATA_LOAD
- .gnu.version_d : {
- *(.gnu.version_d)
- } > REGION_RODATA AT > REGION_RODATA_LOAD
- .gnu.version_r : {
- *(.gnu.version_r)
- } > REGION_RODATA AT > REGION_RODATA_LOAD
- .rel.dyn : {
- *(.rel.init)
- *(.rel.text .rel.text.* .rel.gnu.linkonce.t.*)
- *(.rel.fini)
- *(.rel.rodata .rel.rodata.* .rel.gnu.linkonce.r.*)
- *(.rel.data.rel.ro* .rel.gnu.linkonce.d.rel.ro.*)
- *(.rel.data .rel.data.* .rel.gnu.linkonce.d.*)
- *(.rel.tdata .rel.tdata.* .rel.gnu.linkonce.td.*)
- *(.rel.tbss .rel.tbss.* .rel.gnu.linkonce.tb.*)
- *(.rel.ctors)
- *(.rel.dtors)
- *(.rel.got)
- *(.rel.bss .rel.bss.* .rel.gnu.linkonce.b.*)
- PROVIDE_HIDDEN (__rel_iplt_start = .);
- *(.rel.iplt)
- PROVIDE_HIDDEN (__rel_iplt_end = .);
- PROVIDE_HIDDEN (__rela_iplt_start = .);
- PROVIDE_HIDDEN (__rela_iplt_end = .);
- } > REGION_RODATA AT > REGION_RODATA_LOAD
- .rela.dyn : {
- *(.rela.init)
- *(.rela.text .rela.text.* .rela.gnu.linkonce.t.*)
- *(.rela.fini)
- *(.rela.rodata .rela.rodata.* .rela.gnu.linkonce.r.*)
- *(.rela.data .rela.data.* .rela.gnu.linkonce.d.*)
- *(.rela.tdata .rela.tdata.* .rela.gnu.linkonce.td.*)
- *(.rela.tbss .rela.tbss.* .rela.gnu.linkonce.tb.*)
- *(.rela.ctors)
- *(.rela.dtors)
- *(.rela.got)
- *(.rela.bss .rela.bss.* .rela.gnu.linkonce.b.*)
- PROVIDE_HIDDEN (__rel_iplt_start = .);
- PROVIDE_HIDDEN (__rel_iplt_end = .);
- PROVIDE_HIDDEN (__rela_iplt_start = .);
- *(.rela.iplt)
- PROVIDE_HIDDEN (__rela_iplt_end = .);
- } > REGION_RODATA AT > REGION_RODATA_LOAD
- .rel.plt : {
- *(.rel.plt)
- } > REGION_RODATA AT > REGION_RODATA_LOAD
- .rela.plt : {
- *(.rela.plt)
- } > REGION_RODATA AT > REGION_RODATA_LOAD
- .plt : {
- *(.plt)
- } > REGION_RODATA AT > REGION_RODATA_LOAD
- .iplt : {
- *(.iplt)
- } > REGION_RODATA AT > REGION_RODATA_LOAD
- .dynamic : {
- *(.dynamic)
- } > REGION_RODATA AT > REGION_RODATA_LOAD
- .got : {
- *(.got.plt) *(.igot.plt) *(.got) *(.igot)
- } > REGION_RODATA AT > REGION_RODATA_LOAD
- .rtemsroset : {
- /* Special FreeBSD linker set sections */
- __start_set_sysctl_set = .;
- *(set_sysctl_*);
- __stop_set_sysctl_set = .;
- *(set_domain_*);
- *(set_pseudo_*);
-
- KEEP (*(SORT(.rtemsroset.*)))
- . = ALIGN(8);
- bsp_section_rodata_end = .;
- } > REGION_RODATA AT > REGION_RODATA_LOAD
- bsp_section_rodata_size = bsp_section_rodata_end - bsp_section_rodata_begin;
- bsp_section_rodata_load_begin = LOADADDR (.rodata);
- bsp_section_rodata_load_end = bsp_section_rodata_load_begin + bsp_section_rodata_size;
-
- .rwbarrier : {
- . = ALIGN(8);
- . = ALIGN (bsp_section_rwbarrier_align);
- } > REGION_DATA AT > REGION_DATA
-
-.data : {
- . = ALIGN(8);
- bsp_section_data_begin = .;
- *(.data .data.* .gnu.linkonce.d.*)
- SORT(CONSTRUCTORS)
- } > REGION_DATA AT > REGION_DATA_LOAD
- .data1 : {
- *(.data1)
- } > REGION_DATA AT > REGION_DATA_LOAD
- .rtemsrwset : {
- KEEP (*(SORT(.rtemsrwset.*)))
- . = ALIGN(8);
- bsp_section_data_end = .;
- } > REGION_DATA AT > REGION_DATA_LOAD
- bsp_section_data_size = bsp_section_data_end - bsp_section_data_begin;
- bsp_section_data_load_begin = LOADADDR (.data);
- bsp_section_data_load_end = bsp_section_data_load_begin + bsp_section_data_size;
-
- .bss : {
- . = ALIGN(8);
- bsp_section_bss_begin = .;
- *(.dynbss)
- *(.bss .bss.* .gnu.linkonce.b.*)
- *(COMMON)
- . = ALIGN(8);
- bsp_section_bss_end = .;
- } > REGION_BSS AT > REGION_BSS
- bsp_section_bss_size = bsp_section_bss_end - bsp_section_bss_begin;
-
- .rtemsstack (NOLOAD) : {
- *(SORT(.rtemsstack.*))
- } > REGION_WORK AT > REGION_WORK
-
-.work : {
- /*
- * The work section will occupy the remaining REGION_WORK region and
- * contains the RTEMS work space and heap.
- */
- . = ALIGN(8);
- bsp_section_work_begin = .;
- . += ORIGIN (REGION_WORK) + LENGTH (REGION_WORK) - ABSOLUTE (.);
- . = ALIGN(8);
- bsp_section_work_end = .;
- } > REGION_WORK AT > REGION_WORK
- bsp_section_work_size = bsp_section_work_end - bsp_section_work_begin;
-
- .stack : {
- . = ALIGN(8);
- bsp_section_stack_begin = .;
- . += ORIGIN (REGION_STACK) + LENGTH (REGION_STACK) - ABSOLUTE (.);
- . = ALIGN(8);
- bsp_section_stack_end = .;
- } > REGION_STACK AT > REGION_STACK
- bsp_section_stack_size = bsp_section_stack_begin - bsp_section_stack_end;
-
- RamBase = ORIGIN (REGION_WORK);
- RamSize = LENGTH (REGION_WORK);
- RamEnd = RamBase + RamSize;
- WorkAreaBase = bsp_section_work_begin;
- HeapSize = 0;
-}
diff --git a/bsps/epiphany/epiphany_sim/start/start.S b/bsps/epiphany/epiphany_sim/start/start.S
deleted file mode 100644
index c79d23dc86..0000000000
--- a/bsps/epiphany/epiphany_sim/start/start.S
+++ /dev/null
@@ -1,167 +0,0 @@
-/*
- * Copyright (c) 2015 University of York.
- * Hesham ALMatary <hmka501@york.ac.uk>
- *
- * 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 AUTHOR 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 AUTHOR 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 <bsp/linker-symbols.h>
-#include <rtems/asm.h>
-
-EXTERN(bsp_section_bss_begin)
-EXTERN(bsp_section_bss_end)
-EXTERN(_ISR_Handler)
-EXTERN(bsp_start_vector_table_end)
-EXTERN(bsp_start_vector_table_size)
-EXTERN(bsp_vector_table_size)
-EXTERN(_ISR_Stack_area_end)
-
-PUBLIC(_EPIPHANY_Exception_default)
-PUBLIC(bsp_start_vector_table_begin)
-PUBLIC(_start)
-
-.section .vector, "wax"
-TYPE_FUNC(_start)
-SYM(_start):
- .balign 4 ;
- b .normal_start
-
- .balign 4 ; 0x4
- b .sw_exception
-
- .balign 4 ; 0x8
- b .normal_start
-
- .balign 4 ; 0xc
- b .clock_isr
-
- .balign 4 ; 0x10
- b .timer1_isr
-
- .balign 4 ; 0x14
- b _EPIPHANY_Exception_default
-
- .balign 4 ; 0x18
- b _EPIPHANY_Exception_default
-
- .balign 4 ; 0x1c
- b _EPIPHANY_Exception_default
-
- .balign 4 ; 0x20
- b _EPIPHANY_Exception_default
-
- .balign 4 ; 0x24
- b _EPIPHANY_Exception_default
-
-bsp_start_vector_table_begin:
- .word .normal_start /* Reset */
- .word _EPIPHANY_Exception_default /* SW exception */
- .word _EPIPHANY_Exception_default /* Data Page Fault */
- .word _EPIPHANY_Exception_default /* Timer 0 */
- .word _EPIPHANY_Exception_default /* Timer 1 */
- .word _EPIPHANY_Exception_default /* Message int */
- .word _EPIPHANY_Exception_default /* DMA0 int */
- .word _EPIPHANY_Exception_default /* DMA1 int */
- .word _EPIPHANY_Exception_default /* WAND */
- .word _EPIPHANY_Exception_default /* User interrupt */
-
-_bsp_start_vector_table_end:
-
-.size _start, .-_start
-
-.section .start,"ax"
-.align 4
-.type _external_start, %function
-.normal_start:
- /* Initialize the stack and frame pointers */
- mov sp, %low(_ISR_Stack_area_end)
- movt sp, %high(_ISR_Stack_area_end)
- mov fp, sp
-
-cpu0:
- /* Zero .bss section */
- mov r0, %low(bsp_section_bss_begin)
- movt r0, %high(bsp_section_bss_begin)
- mov r1, sp
- mov r2,#0
- mov r3,#0
-
-_bss_clear_loop:
- strd r2, [r0], +#1
- sub r5, r1, r0
- bne _bss_clear_loop
-
- /* Clear the reset interrupt flag */
- mov r0, %low(_jump_to_c)
- movt r0, %high(_jump_to_c)
- movts iret, r0
- rti
-
-_jump_to_c:
- /* Jump to bootcard */
- mov r3, %low(boot_card)
- movt r3, %high(boot_card)
- jalr r3
-
- /* Should never reach here */
- idle
-
-.size .normal_start, .-.normal_start
-
-.balign 4
-.type .sw_exception, %function
-.sw_exception:
- idle
-
-.balign 4
-.type .clock_isr, %function
-.clock_isr:
- /*
- * r62 and r63 are saved here, and restored from _ISR_Handler, they
- * and hold vector number and _ISR_Handler address repsectively.
- */
- add sp, sp, #-8
- str r62, [sp, #0]
- str r63, [sp, #4]
- mov r62, 3
- mov r63, %low(_ISR_Handler)
- movt r63, %high(_ISR_Handler)
- jr r6
-
-.balign 4
-.type .timer1_isr, %function
-.timer1_isr:
- /*
- * r62 and r63 are saved here, and restored from _ISR_Handler, they
- * and hold vector number and _ISR_Handler address repsectively.
- */
- add sp, sp, #-8
- str r62, [sp, 0]
- str r63, [sp, 4]
- mov r62, 4
- mov r63, %low(_ISR_Handler)
- movt r63, %high(_ISR_Handler)
- jr r63
-
-.balign 4
-TYPE_FUNC(_EPIPHANY_Exception_default)
-SYM(_EPIPHANY_Exception_default):
- idle
diff --git a/bsps/epiphany/headers.am b/bsps/epiphany/headers.am
deleted file mode 100644
index 0ce8fb808b..0000000000
--- a/bsps/epiphany/headers.am
+++ /dev/null
@@ -1,5 +0,0 @@
-## This file was generated by "./boostrap -H".
-
-include_bspdir = $(includedir)/bsp
-include_bsp_HEADERS =
-include_bsp_HEADERS += ../../../../../bsps/epiphany/include/bsp/linker-symbols.h
diff --git a/bsps/epiphany/include/bsp/linker-symbols.h b/bsps/epiphany/include/bsp/linker-symbols.h
deleted file mode 100644
index 1a3d88ec8a..0000000000
--- a/bsps/epiphany/include/bsp/linker-symbols.h
+++ /dev/null
@@ -1,79 +0,0 @@
-#ifndef LIBBSP_EPIPHANY_SHARED_LINKER_SYMBOLS_H
-#define LIBBSP_EPIPHANY_SHARED_LINKER_SYMBOLS_H
-
-#ifdef __cplusplus
-extern "C" {
-#endif /* __cplusplus */
-
-/**
- * @defgroup epiphany_linker Linker Support
- *
- * @ingroup RTEMSBSPsEpiphanyShared
- *
- * @brief Linker support.
- *
- * @{
- */
-
-#ifndef ASM
- #define LINKER_SYMBOL(sym) extern char sym [];
-#else
- #define LINKER_SYMBOL(sym) .extern sym
-#endif
-
-LINKER_SYMBOL(bsp_section_start_begin)
-LINKER_SYMBOL(bsp_section_start_end)
-LINKER_SYMBOL(bsp_section_start_size)
-
-LINKER_SYMBOL(bsp_section_vector_begin)
-LINKER_SYMBOL(bsp_section_vector_end)
-LINKER_SYMBOL(bsp_section_vector_size)
-
-LINKER_SYMBOL(bsp_section_text_begin)
-LINKER_SYMBOL(bsp_section_text_end)
-LINKER_SYMBOL(bsp_section_text_size)
-LINKER_SYMBOL(bsp_section_text_load_begin)
-LINKER_SYMBOL(bsp_section_text_load_end)
-
-LINKER_SYMBOL(bsp_section_rodata_begin)
-LINKER_SYMBOL(bsp_section_rodata_end)
-LINKER_SYMBOL(bsp_section_rodata_size)
-LINKER_SYMBOL(bsp_section_rodata_load_begin)
-LINKER_SYMBOL(bsp_section_rodata_load_end)
-
-LINKER_SYMBOL(bsp_section_data_begin)
-LINKER_SYMBOL(bsp_section_data_end)
-LINKER_SYMBOL(bsp_section_data_size)
-LINKER_SYMBOL(bsp_section_data_load_begin)
-LINKER_SYMBOL(bsp_section_data_load_end)
-
-LINKER_SYMBOL(bsp_section_bss_begin)
-LINKER_SYMBOL(bsp_section_bss_end)
-LINKER_SYMBOL(bsp_section_bss_size)
-
-LINKER_SYMBOL(bsp_section_work_begin)
-LINKER_SYMBOL(bsp_section_work_end)
-LINKER_SYMBOL(bsp_section_work_size)
-
-LINKER_SYMBOL(bsp_section_stack_begin)
-LINKER_SYMBOL(bsp_section_stack_end)
-LINKER_SYMBOL(bsp_section_stack_size)
-
-LINKER_SYMBOL(bsp_vector_table_begin)
-LINKER_SYMBOL(bsp_vector_table_end)
-LINKER_SYMBOL(bsp_vector_table_size)
-
-LINKER_SYMBOL(bsp_start_vector_table_begin)
-LINKER_SYMBOL(bsp_start_vector_table_end)
-LINKER_SYMBOL(bsp_start_vector_table_size)
-
-LINKER_SYMBOL(bsp_translation_table_base)
-LINKER_SYMBOL(bsp_translation_table_end)
-
-/** @} */
-
-#ifdef __cplusplus
-}
-#endif /* __cplusplus */
-
-#endif /* LIBBSP_EPIPHANY_SHARED_LINKER_SYMBOLS_H */
diff --git a/bsps/epiphany/shared/doxygen.h b/bsps/epiphany/shared/doxygen.h
deleted file mode 100644
index 2c33073078..0000000000
--- a/bsps/epiphany/shared/doxygen.h
+++ /dev/null
@@ -1,15 +0,0 @@
-/**
- * @defgroup RTEMSBSPsEpiphany Epiphany
- *
- * @ingroup RTEMSBSPs
- *
- * @brief Epiphany Board Support Packages.
- */
-
-/**
- * @defgroup RTEMSBSPsEpiphanyShared Shared
- *
- * @ingroup RTEMSBSPsEpiphany
- *
- * @brief Shared Support for Epiphany Board Support Packages.
- */
diff --git a/bsps/i386/include/bsp/smp-imps.h b/bsps/i386/include/bsp/smp-imps.h
index 03434b81ef..7b023ddcfc 100644
--- a/bsps/i386/include/bsp/smp-imps.h
+++ b/bsps/i386/include/bsp/smp-imps.h
@@ -233,6 +233,9 @@ extern unsigned char imps_apic_cpu_map[IMPS_MAX_CPUS];
extern char _binary_appstart_bin_start[];
extern char _binary_appstart_bin_size[];
+/** @brief base address of the local apic. Usually 0xFEE00000 */
+extern unsigned imps_lapic_addr;
+
/*
* Defines that use variables
*/
diff --git a/bsps/i386/pc386/clock/ckinit.c b/bsps/i386/pc386/clock/ckinit.c
index 2222d6e4b4..09afe73cde 100644
--- a/bsps/i386/pc386/clock/ckinit.c
+++ b/bsps/i386/pc386/clock/ckinit.c
@@ -73,7 +73,7 @@ extern volatile uint32_t Clock_driver_ticks;
Processor_mask targets; \
_Processor_mask_Assign(&targets, _SMP_Get_online_processors()); \
_Processor_mask_Clear(&targets, _SMP_Get_current_processor()); \
- _SMP_Multicast_action(&targets, Clock_isr, NULL); \
+ _SMP_Multicast_action(&targets, rtems_timecounter_tick, NULL); \
} while (0)
#endif
diff --git a/bsps/i386/pc386/console/conscfg.c b/bsps/i386/pc386/console/conscfg.c
index a4ae88626f..8aa8ab5c2a 100644
--- a/bsps/i386/pc386/console/conscfg.c
+++ b/bsps/i386/pc386/console/conscfg.c
@@ -46,15 +46,14 @@
#define CLOCK_RATE (115200 * 16)
- static uint8_t com_get_register(uint32_t addr, uint8_t i)
+ static uint8_t com_get_register(uintptr_t addr, uint8_t i)
{
- register uint8_t val;
-
+ uint8_t val;
inport_byte( (addr + i), val );
return val;
}
- static void com_set_register(uint32_t addr, uint8_t i, uint8_t val)
+ static void com_set_register(uintptr_t addr, uint8_t i, uint8_t val)
{
outport_byte( (addr + i), val );
}
diff --git a/bsps/i386/pc386/console/printk_support.c b/bsps/i386/pc386/console/printk_support.c
index d7bc329868..c9e003dab0 100644
--- a/bsps/i386/pc386/console/printk_support.c
+++ b/bsps/i386/pc386/console/printk_support.c
@@ -29,6 +29,28 @@
rtems_device_minor_number BSPPrintkPort = 0;
+static bool serialInit;
+static bool serialOK;
+
+static bool serialValid(console_tbl *port)
+{
+ if (port->pDeviceFns) {
+ if (!serialInit) {
+ serialOK = true;
+ if (port->pDeviceFns->deviceProbe != NULL) {
+ if (!port->pDeviceFns->deviceProbe( BSPPrintkPort ))
+ serialOK = false;
+ else if (port->pDeviceFns->deviceInitialize != NULL)
+ port->pDeviceFns->deviceInitialize( BSPPrintkPort );
+ else
+ serialOK = false;
+ }
+ serialInit = true;
+ }
+ }
+ return serialOK;
+}
+
void BSP_outch(char ch);
int BSP_inch(void);
@@ -42,10 +64,12 @@ void BSP_outch(char ch)
if ( !isVga ) {
console_tbl *port = Console_Port_Tbl[BSPPrintkPort];
- if (port->pDeviceFns && port->pDeviceFns->deviceWritePolled) {
- port->pDeviceFns->deviceWritePolled( BSPPrintkPort, ch );
+ if (serialValid(port)) {
+ if (port->pDeviceFns->deviceWritePolled) {
+ port->pDeviceFns->deviceWritePolled( BSPPrintkPort, ch );
+ }
+ return;
}
- return;
}
#if BSP_ENABLE_VGA
@@ -65,11 +89,13 @@ int BSP_inch(void)
if ( !isVga ) {
console_tbl *port = Console_Port_Tbl[BSPPrintkPort];
- if (port->pDeviceFns && port->pDeviceFns->deviceRead) {
- do {
- result = port->pDeviceFns->deviceRead( BSPPrintkPort );
- } while (result == -1);
- return result;
+ if (serialValid(port)) {
+ if (port->pDeviceFns->deviceRead) {
+ do {
+ result = port->pDeviceFns->deviceRead( BSPPrintkPort );
+ } while (result == -1);
+ return result;
+ }
}
}
diff --git a/bsps/i386/pc386/include/bsp.h b/bsps/i386/pc386/include/bsp.h
index 7989b880a9..1ed92e469a 100644
--- a/bsps/i386/pc386/include/bsp.h
+++ b/bsps/i386/pc386/include/bsp.h
@@ -252,6 +252,13 @@ uint32_t BSP_irq_count_dump(FILE *f);
void raw_idt_notify(void);
void C_dispatch_isr(int vector);
+#ifdef RTEMS_SMP
+ /* CPU specific functions used by the SMP API */
+ int imps_probe(void);
+ void ipi_install_irq(void);
+ int send_ipi(unsigned int dst, unsigned int v);
+#endif
+
#ifdef __cplusplus
}
#endif
diff --git a/bsps/i386/pc386/include/bsp/tblsizes.h b/bsps/i386/pc386/include/bsp/tblsizes.h
index 13429dc85f..978cde2b3e 100644
--- a/bsps/i386/pc386/include/bsp/tblsizes.h
+++ b/bsps/i386/pc386/include/bsp/tblsizes.h
@@ -20,5 +20,11 @@
#include <bspopts.h>
#define IDT_SIZE (256)
-#define NUM_SYSTEM_GDT_DESCRIPTORS 4
+/* We have 3 fixed segments (NULL, text, data) + a GS segment for TLS */
+#ifdef RTEMS_SMP
+/* Need one GS segment for each processor (x86 can have up to 256 processors) */
+#define NUM_SYSTEM_GDT_DESCRIPTORS 3+256
+#else
+#define NUM_SYSTEM_GDT_DESCRIPTORS 3+1
+#endif
#define GDT_SIZE (NUM_SYSTEM_GDT_DESCRIPTORS + NUM_APP_DRV_GDT_DESCRIPTORS)
diff --git a/bsps/i386/pc386/start/bspsmp.c b/bsps/i386/pc386/start/bspsmp.c
new file mode 100644
index 0000000000..026f86916f
--- /dev/null
+++ b/bsps/i386/pc386/start/bspsmp.c
@@ -0,0 +1,43 @@
+
+#include <rtems/score/smpimpl.h>
+
+#include <bsp/apic.h>
+#include <bsp/smp-imps.h>
+#include <bsp.h>
+#include <rtems.h>
+
+void _CPU_SMP_Prepare_start_multitasking( void )
+{
+ /* Do nothing */
+}
+
+bool _CPU_SMP_Start_processor( uint32_t cpu_index )
+{
+ (void) cpu_index;
+
+ return true;
+}
+
+
+uint32_t _CPU_SMP_Get_current_processor( void )
+{
+ return imps_apic_cpu_map[APIC_ID(IMPS_LAPIC_READ(LAPIC_ID))];
+}
+
+uint32_t _CPU_SMP_Initialize( void )
+{
+ /* XXX need to deal with finding too many cores */
+
+ return (uint32_t) imps_probe();
+}
+
+void _CPU_SMP_Finalize_initialization( uint32_t cpu_count )
+{
+ if ( cpu_count > 1 )
+ ipi_install_irq();
+}
+
+void _CPU_SMP_Send_interrupt( uint32_t target_processor_index )
+{
+ send_ipi( target_processor_index, 0x30 );
+}
diff --git a/bsps/i386/pc386/start/getcpuid.c b/bsps/i386/pc386/start/getcpuid.c
deleted file mode 100644
index c5284d0069..0000000000
--- a/bsps/i386/pc386/start/getcpuid.c
+++ /dev/null
@@ -1,22 +0,0 @@
-/*
- * COPYRIGHT (c) 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.
- */
-
-#include <rtems/score/cpu.h>
-
-#include <bsp/apic.h>
-#include <bsp/smp-imps.h>
-
-static int lapic_dummy = 0;
-unsigned imps_lapic_addr = ((unsigned)(&lapic_dummy)) - LAPIC_ID;
-
-uint32_t _CPU_SMP_Get_current_processor( void )
-{
- return APIC_ID(IMPS_LAPIC_READ(LAPIC_ID));
-}
-
diff --git a/bsps/i386/pc386/start/ldsegs.S b/bsps/i386/pc386/start/ldsegs.S
index b56bf836f0..44456d3377 100644
--- a/bsps/i386/pc386/start/ldsegs.S
+++ b/bsps/i386/pc386/start/ldsegs.S
@@ -67,7 +67,7 @@ BEGIN_CODE
.globl pc386_delay
pc386_delay:
_pc386_delay:
-#ifdef DELAY_USE_OUTB
+#ifdef DELAY_USE_OUTB
outb al, $0x80 # about 1uS delay on most machines
#else
movl $0x200, eax
@@ -191,9 +191,11 @@ SYM (_Global_descriptor_table):
.word 0xffff, 0
.byte 0, 0x92, 0xcf, 0
- /* gs segment */
+ /* gs segment(s) */
+ .rept (NUM_SYSTEM_GDT_DESCRIPTORS - 3)
.word 0xffff, 0
.byte 0, 0x92, 0xcf, 0
+ .endr
/* allocated space for user segments */
.rept (GDT_SIZE - NUM_SYSTEM_GDT_DESCRIPTORS)
diff --git a/bsps/i386/pc386/start/smp-imps.c b/bsps/i386/pc386/start/smp-imps.c
index 0543b17ec5..763ac0afc7 100644
--- a/bsps/i386/pc386/start/smp-imps.c
+++ b/bsps/i386/pc386/start/smp-imps.c
@@ -83,6 +83,10 @@
#include <assert.h>
extern void _pc386_delay(void);
+extern uint32_t* gdtdesc;
+
+static int lapic_dummy = 0;
+unsigned imps_lapic_addr = ((unsigned)(&lapic_dummy)) - LAPIC_ID;
/* #define KERNEL_PRINT(_format) printk(_format) */
@@ -219,12 +223,14 @@ get_checksum(unsigned start, int length)
/*
* APIC ICR write and status check function.
*/
-static int
+int
send_ipi(unsigned int dst, unsigned int v)
{
- int to, send_status;
+ int to, send_status, apicid;
- IMPS_LAPIC_WRITE(LAPIC_ICR+0x10, (dst << 24));
+ apicid = imps_cpu_apic_map[dst];
+
+ IMPS_LAPIC_WRITE(LAPIC_ICR+0x10, (apicid << 24));
IMPS_LAPIC_WRITE(LAPIC_ICR, v);
/* Wait for send to finish */
@@ -247,9 +253,11 @@ static int
boot_cpu(imps_processor *proc)
{
int apicid = proc->apic_id, success = 1;
+ int cpuid;
unsigned bootaddr;
unsigned bios_reset_vector = PHYS_TO_VIRTUAL(BIOS_RESET_VECTOR);
+ cpuid = imps_apic_cpu_map[apicid];
/*
* Copy boot code for secondary CPUs here. Find it in between
* "patch_code_start" and "patch_code_end" symbols. The other CPUs
@@ -258,10 +266,10 @@ boot_cpu(imps_processor *proc)
* under the 1MB boundary.
*/
- uint32_t *reset;
+ volatile uint32_t *reset;
bootaddr = (512-64)*1024;
- reset= (uint32_t *)bootaddr;
+ reset= (volatile uint32_t *)bootaddr;
memcpy(
(char *) bootaddr,
@@ -269,9 +277,14 @@ boot_cpu(imps_processor *proc)
(size_t)_binary_appstart_bin_size
);
+ /* Pass start function, stack region and gdtdescr to AP
+ * see startAP.S for location */
reset[1] = (uint32_t)secondary_cpu_initialize;
- reset[2] = (uint32_t)_Per_CPU_Get_by_index(apicid)->interrupt_stack_high;
-
+ reset[2] = (uint32_t)_Per_CPU_Get_by_index(cpuid)->interrupt_stack_high;
+ memcpy(
+ (char*) &reset[3],
+ &gdtdesc,
+ 6);
/*
* Generic CPU startup sequence starts here.
*/
@@ -286,13 +299,13 @@ boot_cpu(imps_processor *proc)
/* assert INIT IPI */
send_ipi(
- apicid,
+ cpuid,
LAPIC_ICR_TM_LEVEL | LAPIC_ICR_LEVELASSERT | LAPIC_ICR_DM_INIT
);
UDELAY(10000);
/* de-assert INIT IPI */
- send_ipi(apicid, LAPIC_ICR_TM_LEVEL | LAPIC_ICR_DM_INIT);
+ send_ipi(cpuid, LAPIC_ICR_TM_LEVEL | LAPIC_ICR_DM_INIT);
UDELAY(10000);
@@ -303,12 +316,17 @@ boot_cpu(imps_processor *proc)
if (proc->apic_ver >= APIC_VER_NEW) {
int i;
for (i = 1; i <= 2; i++) {
- send_ipi(apicid, LAPIC_ICR_DM_SIPI | ((bootaddr >> 12) & 0xFF));
+ send_ipi(cpuid, LAPIC_ICR_DM_SIPI | ((bootaddr >> 12) & 0xFF));
UDELAY(1000);
}
}
/*
+ * Wait until AP is in protected mode before starting the next AP
+ */
+ while (reset[2] != 0);
+
+ /*
* Generic CPU startup sequence ends here, the rest is cleanup.
*/
@@ -320,8 +338,6 @@ boot_cpu(imps_processor *proc)
CMOS_WRITE_BYTE(CMOS_RESET_CODE, 0);
*((volatile unsigned *) bios_reset_vector) = 0;
- printk("\n");
-
return success;
}
@@ -342,13 +358,19 @@ add_processor(imps_processor *proc)
printk("#0 BootStrap Processor (BSP)\n");
return;
}
+ /* Setup the apic/cpu maps before booting the APs
+ * otherwise calls to _Get_current_processor can deliver
+ * wrong values if the BSP gets interrupted
+ */
+ imps_cpu_apic_map[imps_num_cpus] = apicid;
+ imps_apic_cpu_map[apicid] = imps_num_cpus;
if (boot_cpu(proc)) {
/* XXXXX add OS-specific setup for secondary CPUs here */
- imps_cpu_apic_map[imps_num_cpus] = apicid;
- imps_apic_cpu_map[apicid] = imps_num_cpus;
+ /* AP booted successfully, increase number of available cores */
imps_num_cpus++;
+ printk("#%d Application Processor (AP)\n", imps_apic_cpu_map[apicid]);
}
}
@@ -683,7 +705,7 @@ imps_force(int ncpus)
*
* Function finished.
*/
-static int
+int
imps_probe(void)
{
/*
@@ -750,10 +772,21 @@ static void bsp_inter_processor_interrupt(void *arg)
smp_apic_ack();
+ /*
+ * Disallow nesting.
+ */
+ __asm__ __volatile__("cli");
+
_SMP_Inter_processor_interrupt_handler(_Per_CPU_Get());
+
+ /*
+ * Allow nesting.
+ */
+ __asm__ __volatile__("sti");
}
-static void ipi_install_irq(void)
+void
+ipi_install_irq(void)
{
rtems_status_code status;
@@ -787,33 +820,3 @@ static void secondary_cpu_initialize(void)
_SMP_Start_multitasking_on_secondary_processor( _Per_CPU_Get() );
}
-
-uint32_t _CPU_SMP_Initialize( void )
-{
- /* XXX need to deal with finding too many cores */
-
- return (uint32_t) imps_probe();
-}
-
-void _CPU_SMP_Prepare_start_multitasking( void )
-{
- /* Do nothing */
-}
-
-bool _CPU_SMP_Start_processor( uint32_t cpu_index )
-{
- (void) cpu_index;
-
- return true;
-}
-
-void _CPU_SMP_Finalize_initialization( uint32_t cpu_count )
-{
- if ( cpu_count > 1 )
- ipi_install_irq();
-}
-
-void _CPU_SMP_Send_interrupt( uint32_t target_processor_index )
-{
- send_ipi( target_processor_index, 0x30 );
-}
diff --git a/bsps/i386/pc386/start/start.S b/bsps/i386/pc386/start/start.S
index 06fd8b22ad..70d0b50eed 100644
--- a/bsps/i386/pc386/start/start.S
+++ b/bsps/i386/pc386/start/start.S
@@ -101,7 +101,7 @@ speakl: jmp speakl # and SPIN!!!
cld
/* Save multiboot info if we detect a multiboot loader */
- cmp $0x2badb002,eax
+ cmp $0x2badb002,eax
jne 2f
/* We have multiboot info; let's hope DS and ES are OK... */
@@ -111,7 +111,7 @@ speakl: jmp speakl # and SPIN!!!
movl (esi), eax
movl eax, ebx
movl $SYM(_boot_multiboot_info), edi
- /* save flags, always present */
+ /* save flags, always present */
movsd
/* flag 1 is memory */
and $1, eax
diff --git a/bsps/i386/pc386/start/start16.S b/bsps/i386/pc386/start/start16.S
deleted file mode 100644
index 3d46f40ed6..0000000000
--- a/bsps/i386/pc386/start/start16.S
+++ /dev/null
@@ -1,254 +0,0 @@
-/*--------------------------------------------------------------------------+
- * start16.s v1.0 - PC386 BSP - 1998/04/13
- *--------------------------------------------------------------------------+
- * This file contains the entry point for the application.
- * The name of this entry point is compiler dependent.
- * It jumps to the BSP which is responsible for performing all initialization.
- *--------------------------------------------------------------------------+
- * (C) Copyright 1997 -
- * - NavIST Group - Real-Time Distributed Systems and Industrial Automation
- *
- * http://pandora.ist.utl.pt
- *
- * Instituto Superior Tecnico * Lisboa * PORTUGAL
- *--------------------------------------------------------------------------+
- * Disclaimer:
- *
- * This file is provided "AS IS" without warranty of any kind, either
- * expressed or implied.
- *--------------------------------------------------------------------------+
- */
-
-/*
- * COPYRIGHT (c) 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.
- */
-
-
-#include <bspopts.h>
-
-/*---------------------------------------------------------------------------+
-| Constants
-+----------------------------------------------------------------------------*/
-
-#if defined(SMP_SECONDARY_CORE)
-.set PROT_CODE_SEG, 0x08 # offset of code segment descriptor into GDT
-#else
-.set PROT_CODE_SEG, 0x0 # offset of code segment descriptor into GDT
-#endif
-
-.set PROT_DATA_SEG, 0x10 # offset of code segment descriptor into GDT
-.set CR0_PE, 1 # protected mode flag on CR0 register
-.set HDRSTART, HEADERADDR # address of start of bin2boot header
-.set HDROFF, 0x24 # offset into bin2boot header of start32 addr
-.set STACKOFF, 0x200-0x10 # offset to load into %esp, from start of image
-
-/* #define NEW_GAS */
-#ifdef NEW_GAS
- #define LJMPL ljmpl
-#else
- #define LJMPL ljmp
-#endif
-
-/*----------------------------------------------------------------------------+
-| CODE section
-+----------------------------------------------------------------------------*/
-
-.text
-#if defined(SMP_SECONDARY_CORE)
- .globl app_processor_start # entry point
-app_processor_start:
-#else
- .globl _start16 # entry point
- .globl start16
-start16:
-_start16:
-#endif
-
-.code16
- cli # DISABLE INTERRUPTS!!!
-#if defined(SMP_SECONDARY_CORE)
- jmp 1f
- .align 4
-app_cpu_start:
- .long 0
-app_cpu_stack:
- .long 0
-1:
-#endif
- movw %cs, %ax # Initialize the rest of
- movw %ax, %ds # segment registers
- movw %ax, %es
- movw %ax, %ss
-
-#if !defined(SMP_SECONDARY_CODE) && (RTEMS_VIDEO_80x50 == 1)
- movl $0x0040,%eax # use 32 bit constant to ensure 16 MSB=0
- mov %ax,%es
- movw %es:0x4a, %ax # get 16 bit number of columns
- cmpw $0, %ax # or 0 if no video adapter
- je 1f # if no video, skip touching it
- /*---------------------------------------------------------------------+
- | Switch VGA video to 80 lines x 50 columns mode. Has to be done before
- | turning protected mode on since it uses BIOS int 10h (video) services.
- +---------------------------------------------------------------------*/
-
- movw $0x0003, %ax # forced set
- int $0x10
- movw $0x1112, %ax # use 8x8 font
- xorb %bl, %bl
- int $0x10
- movw $0x1201, %ax # turn off cursor emulation
- movb $0x34, %bl
- int $0x10
- movb $0x01, %ah # define cursor (scan lines 0 to 7)
- movw $0x0007, %cx
- int $0x10
-1:
-#endif /* !SMP_SECONDARY_CODE and RTEMS_VIDEO_80x50 */
-
- /*---------------------------------------------------------------------+
- | Bare PC machines boot in real mode! We have to turn protected mode on.
- +---------------------------------------------------------------------*/
-
-#if defined(SMP_SECONDARY_CORE)
- lgdt gdtptr - app_processor_start # load Global Descriptor Table
-#else
- lgdt gdtptr - start16 # load Global Descriptor Table
-#endif /* SMP_SECONDARY_CORE */
-
- movl %cr0, %eax
- orl $CR0_PE, %eax
- movl %eax, %cr0 # turn on protected mode
-#if defined(SMP_SECONDARY_CORE)
- LJMPL $PROT_CODE_SEG, $2f # flush prefetch queue, and reload %cs
-#else
- LJMPL $PROT_CODE_SEG, $2f # flush prefetch queue, and reload %cs
-#endif
-.code32
-2:
-
- /*---------------------------------------------------------------------+
- | load the other segment registers
- +---------------------------------------------------------------------*/
- movl $PROT_DATA_SEG, %eax
- movw %ax, %ds
- movw %ax, %es
- movw %ax, %ss
-#if defined(SMP_SECONDARY_CORE)
- movl app_cpu_stack, %esp # stack pointer
- movl app_cpu_stack, %ebp # base pointer
- #else
- movl $start16 + STACKOFF, %esp # set up stack pointer
- addl $start16 + STACKOFF, %ebp # set up stack pointer
-#endif /* SMP_SECONDARY_CORE */
-
- /*---------------------------------------------------------------------+
- | we have to enable A20 in order to access memory above 1MByte
- +---------------------------------------------------------------------*/
- call empty_8042
- movb $0xD1, %al # command write
- outb %al, $0x64
- call empty_8042
- movb $0xDF, %al # A20 on
- outb %al, $0x60
- call empty_8042
-
- call pc386_delay
- call pc386_delay
- call pc386_delay
-
-#if defined(SMP_SECONDARY_CORE)
- movl app_cpu_start, %eax # jump to app CPU start
-#else
- movl %cs:HDRSTART + HDROFF, %eax # jump to start of 32 bit code
-#endif /* SMP_SECONDARY_CORE */
- pushl %eax
- ret
-
-
-/*----------------------------------------------------------------------------+
-| pc386_delay
-+------------------------------------------------------------------------------
-| Delay is needed after doing I/O.
-|
-| The outb version is OK on most machines BUT the loop version ...
-|
-| will delay for 1us on 1Gz machine, it will take a little bit
-| longer on slower machines, however, it does not matter because we
-| are going to call this function only a few times
-!
-| NOTE: Saving the content of the EAX register just in case. - Rosimildo.
-+----------------------------------------------------------------------------*/
- .p2align 4
- .globl _pc386_delay
- .globl pc386_delay
-pc386_delay:
-_pc386_delay:
- pushl %eax
-#if defined(USE_OUTB_FOR_DELAY)
- outb %al, $0x80 # about 1uS delay on most machines
-
-#else
-
- movl $0x200, %eax
-pc386_delay1:
- dec %eax
- jnz pc386_delay1
-#endif
- popl %eax
- ret
-
-/*----------------------------------------------------------------------------+
-| empty_8042
-+------------------------------------------------------------------------------
-| This routine checks that the keyboard command queue is empty (after emptying
-| the output buffers).
-| No timeout is used - if this hangs there is something wrong with the machine,
-| and we probably couldn't proceed anyway.
-+----------------------------------------------------------------------------*/
- .p2align 4
- .globl _empty_8042
- .globl empty_8042
-empty_8042:
-_empty_8042:
- call pc386_delay
- inb $0x64, %al # 8042 status port
- testb $0x01, %al # output buffer?
- jz no_output
- call pc386_delay
- in $0x60, %al # read it
- jmp empty_8042
-no_output:
- test $0x02, %al # is input buffer full?
- jnz empty_8042 # yes - loop
- ret
-
-/*----------------------------------------------------------------------------+
-| DATA section
-+----------------------------------------------------------------------------*/
-
-/**************************
-* GLOBAL DESCRIPTOR TABLE *
-**************************/
-
- .p2align 4
-gdtptr:
- /* we use the NULL descriptor to store the GDT pointer - a trick quite
- nifty due to: Robert Collins (rcollins@x86.org) */
- .word gdtlen - 1
- .long gdtptr
- .word 0x0000
-
- /* code segment */
- .word 0xffff, 0
- .byte 0, 0x9f, 0xcf, 0
-
- /* data segment */
- .word 0xffff, 0
- .byte 0, 0x93, 0xcf, 0
-
- .set gdtlen, . - gdtptr # length of GDT
diff --git a/bsps/i386/pc386/start/startAP.S b/bsps/i386/pc386/start/startAP.S
new file mode 100644
index 0000000000..3f947b2a3a
--- /dev/null
+++ b/bsps/i386/pc386/start/startAP.S
@@ -0,0 +1,108 @@
+/*--------------------------------------------------------------------------+
+ * start16.s v1.0 - PC386 BSP - 1998/04/13
+ * startAP.s 05/2019
+ *--------------------------------------------------------------------------+
+ * This file contains the initialization code for application processors (AP)
+ * for i386 based board support packages in SMP configuration.
+ * The APs start in 16 bit real mode. The goal is to:
+ * 1. Initialize the CPU registers
+ * 2. Load the global descriptor table
+ * 3. Switch to protected mode
+ * 4. Setup the stack pointers
+ * 5. Switch to the higher level initialization routine
+ *
+ *--------------------------------------------------------------------------+
+ * (C) Copyright 1997 -
+ * - NavIST Group - Real-Time Distributed Systems and Industrial Automation
+ *
+ * http://pandora.ist.utl.pt
+ *
+ * Instituto Superior Tecnico * Lisboa * PORTUGAL
+ *--------------------------------------------------------------------------+
+ * Disclaimer:
+ *
+ * This file is provided "AS IS" without warranty of any kind, either
+ * expressed or implied.
+ *--------------------------------------------------------------------------+
+ */
+
+/*
+ * COPYRIGHT (c) 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.
+ */
+
+/*---------------------------------------------------------------------------+
+| Constants
++----------------------------------------------------------------------------*/
+
+.set PROT_CODE_SEG, 0x08 # offset of code segment descriptor into GDT
+.set PROT_DATA_SEG, 0x10 # offset of code segment descriptor into GDT
+.set CR0_PE, 1 # protected mode flag on CR0 register
+.set HDRSTART, HEADERADDR # address of start of bin2boot header
+.set HDROFF, 0x24 # offset into bin2boot header of start32 addr
+.set STACKOFF, 0x200-0x10 # offset to load into %esp, from start of image
+
+/*----------------------------------------------------------------------------+
+| CODE section
++----------------------------------------------------------------------------*/
+
+.text
+ .globl app_processor_start # entry point
+app_processor_start:
+
+.code16
+ cli # DISABLE INTERRUPTS!!!
+ jmp setup_processor
+/*
+ * Placeholder to copy information from boot_cpu()
+ * Do NOT move or add asm instruction before
+ */
+.align 4
+app_cpu_start:
+ .long 0
+app_cpu_stack:
+ .long 0
+app_gdt_descr:
+ .word 0 /* GDT size */
+ .long 0 /* GDT location */
+
+setup_processor:
+ movw %cs, %ax # Initialize the rest of
+ movw %ax, %ds # segment registers
+ movw %ax, %es
+ movw %ax, %ss
+
+ /*---------------------------------------------------------------------+
+ | Bare PC machines boot in real mode! We have to turn protected mode on.
+ +---------------------------------------------------------------------*/
+
+ lgdt app_gdt_descr - app_processor_start # load Global Descriptor Table
+
+ movl %cr0, %eax
+ orl $CR0_PE, %eax
+ movl %eax, %cr0 # turn on protected mode
+ ljmpl $PROT_CODE_SEG, $start_32bit # flush prefetch queue, and reload %cs
+
+.code32
+start_32bit:
+
+ /*---------------------------------------------------------------------+
+ | load the other segment registers
+ +---------------------------------------------------------------------*/
+ movl $PROT_DATA_SEG, %eax
+ movw %ax, %ds
+ movw %ax, %es
+ movw %ax, %ss
+ /* Prepare stack pointers */
+ movl app_cpu_stack, %esp # stack pointer
+ movl app_cpu_stack, %ebp # base pointer
+ movl app_cpu_start, %eax # jump to app CPU start
+ pushl %eax
+ /* Clear stack pointer to signal that the we jump to the kernel */
+ movl $0, app_cpu_stack
+ /* Switch to the higher level initialization routines */
+ ret
diff --git a/bsps/i386/shared/irq/irq_asm.S b/bsps/i386/shared/irq/irq_asm.S
index 2d65a79fe2..6a399f0c15 100644
--- a/bsps/i386/shared/irq/irq_asm.S
+++ b/bsps/i386/shared/irq/irq_asm.S
@@ -25,17 +25,19 @@
#endif
/* Stack frame we use for intermediate storage */
-#define ARG_OFF 0
-#define MSK_OFF 4 /* not used any more */
-#define EBX_OFF 8 /* ebx */
-#define EBP_OFF 12 /* code restoring ebp/esp relies on */
-#define ESP_OFF 16 /* esp being on top of ebp! */
+#define ARG_OFF 0
+#define EBX_OFF 4 /* ebx */
+#define EBP_OFF 8 /* code restoring ebp/esp relies on */
+#define ESP_OFF 12 /* esp being on top of ebp! */
#ifdef __SSE__
+#ifdef RTEMS_SMP
+#error SMP with SSE support has not been tested. Use at your own risk.
+#endif
/* need to be on 16 byte boundary for SSE, add 12 to do that */
#define FRM_SIZ (20+12+512)
#define SSE_OFF 32
#else
-#define FRM_SIZ 20
+#define FRM_SIZ 16
#endif
BEGIN_CODE
@@ -59,7 +61,7 @@ SYM (_ISR_Handler):
* NOTE: If the previous values of the segment registers are
* pushed, do not forget to adjust SAVED_REGS.
*
- * NOTE: Make sure the exit code which restores these
+ * NOTE: Make sure the Lthread_dispatch_done code restores these
* when this type of code is needed.
*/
@@ -72,17 +74,15 @@ SYM (_ISR_Handler):
/*
* Establish an aligned stack frame
* original sp
- * saved ebx
* saved ebp
- * saved irq mask
+ * saved ebx
* vector arg to BSP_dispatch_isr <- aligned SP
*/
movl esp, eax
subl $FRM_SIZ, esp
- andl $ - CPU_STACK_ALIGNMENT, esp
- movl ebx, EBX_OFF(esp)
movl eax, ESP_OFF(esp)
movl ebp, EBP_OFF(esp)
+ movl ebx, EBX_OFF(esp)
/*
* GCC versions starting with 4.3 no longer place the cld
@@ -100,10 +100,10 @@ SYM (_ISR_Handler):
/* We save SSE here (on the task stack) because we possibly
* call other C-code (besides the ISR, namely _Thread_Dispatch())
*/
- /* don't wait here; a possible exception condition will eventually be
- * detected when the task resumes control and executes a FP instruction
+ /* don't wait here; a possible exception condition will eventually be
+ * detected when the task resumes control and executes a FP instruction
fwait
- */
+ */
fxsave SSE_OFF(esp)
fninit /* clean-slate FPU */
movl $0x1f80, ARG_OFF(esp) /* use ARG_OFF as scratch space */
@@ -118,15 +118,9 @@ PUBLIC (ISR_STOP)
ISR_STOP:
.check_stack_switch:
movl esp, ebp /* ebp = previous stack pointer */
+ andl $ - CPU_STACK_ALIGNMENT, esp /* Make sure esp is 16 byte aligned */
-#ifdef RTEMS_SMP
- call SYM(_CPU_SMP_Get_current_processor)
- sall $PER_CPU_CONTROL_SIZE_LOG2, eax
- addl $SYM(_Per_CPU_Information), eax
- movl eax, ebx
-#else
- movl $SYM(_Per_CPU_Information), ebx
-#endif
+ GET_SELF_CPU_CONTROL ebx
/* is this the outermost interrupt? */
cmpl $0, PER_CPU_ISR_NEST_LEVEL(ebx)
@@ -161,32 +155,48 @@ nested:
*/
movl ebp, esp
- decl PER_CPU_ISR_NEST_LEVEL(ebx) /* one less ISR nest level */
- /* If interrupts are nested, */
- /* then dispatching is disabled */
-
- decl PER_CPU_THREAD_DISPATCH_DISABLE_LEVEL(ebx)
- /* unnest multitasking */
- /* Is dispatch disabled */
- jne .exit /* Yes, then exit */
-
- cmpb $0, PER_CPU_DISPATCH_NEEDED(ebx)
- /* Is task switch necessary? */
- jne .schedule /* Yes, then call the scheduler */
- jmp .exit /* No, exit */
-
-.schedule:
- /*
- * the scratch registers have already been saved and we are already
- * back on the thread system stack. So we can call _Thread_Dispatch
- * directly
- */
- call _Thread_Dispatch
/*
- * fall through exit to restore complete contex (scratch registers
- * eip, CS, Flags).
+ * Thread dispatching is necessary and allowed if and only if
+ * dispatch_necessary == 1 and
+ * isr_dispatch_disable == 0 and
+ * thread_dispatch_disable_level == 0.
+ *
+ * Otherwise, continue with .Lthread_dispatch_done
*/
-.exit:
+ movl PER_CPU_DISPATCH_NEEDED(ebx), eax
+ xorl PER_CPU_THREAD_DISPATCH_DISABLE_LEVEL(ebx), eax
+ decl PER_CPU_THREAD_DISPATCH_DISABLE_LEVEL(ebx)
+ orl PER_CPU_THREAD_DISPATCH_DISABLE_LEVEL(ebx), eax
+ orl PER_CPU_ISR_DISPATCH_DISABLE(ebx), eax
+ decl PER_CPU_ISR_NEST_LEVEL(ebx) /* one less ISR nest level */
+
+ cmpl $0, eax
+ jne .Lthread_dispatch_done /* Is task switch necessary? */
+
+.Ldo_thread_dispatch:
+ /* Set ISR dispatch disable and thread dispatch disable level to one */
+ movl $1, PER_CPU_ISR_DISPATCH_DISABLE(ebx)
+ movl $1, PER_CPU_THREAD_DISPATCH_DISABLE_LEVEL(ebx)
+ /* Call Thread_Do_dispatch(), this function will enable interrupts */
+ push $EFLAGS_INTR_ENABLE /* Set interrupt flag manually */
+ push ebx
+ call _Thread_Do_dispatch
+
+ /* Disable interrupts */
+ cli
+ addl $8, esp
+ /* Sometimes after returning from _Thread_Do_dispatch current CPU and ebx ptr are different */
+ GET_SELF_CPU_CONTROL ebx
+ cmpb $0, PER_CPU_DISPATCH_NEEDED(ebx)
+ jne .Ldo_thread_dispatch
+
+ /* We are done with thread dispatching */
+ movl $0, PER_CPU_ISR_DISPATCH_DISABLE(ebx)
+ /*
+ * fall through Lthread_dispatch_done to restore complete contex (scratch registers
+ * eip, CS, Flags).
+ */
+.Lthread_dispatch_done:
#ifdef __SSE__
fwait
diff --git a/bsps/include/bsp/fatal.h b/bsps/include/bsp/fatal.h
index 3f8e1eb591..f95290b890 100644
--- a/bsps/include/bsp/fatal.h
+++ b/bsps/include/bsp/fatal.h
@@ -138,6 +138,7 @@ typedef enum {
/* i.MX fatal codes */
IMX_FATAL_GENERIC_TIMER_FREQUENCY = BSP_FATAL_CODE_BLOCK(12),
+ IMX_FATAL_GPIO_UNEXPECTED_FDT,
/* RISC-V fatal codes */
RISCV_FATAL_NO_TIMEBASE_FREQUENCY_IN_DEVICE_TREE = BSP_FATAL_CODE_BLOCK(13),
diff --git a/bsps/lm32/lm32_evr/headers.am b/bsps/lm32/lm32_evr/headers.am
index 2c9d86fd68..213b66effe 100644
--- a/bsps/lm32/lm32_evr/headers.am
+++ b/bsps/lm32/lm32_evr/headers.am
@@ -5,7 +5,3 @@ include_HEADERS += ../../../../../../bsps/lm32/lm32_evr/include/bsp.h
include_HEADERS += include/bspopts.h
include_HEADERS += ../../../../../../bsps/lm32/lm32_evr/include/system_conf.h
include_HEADERS += ../../../../../../bsps/lm32/lm32_evr/include/tm27.h
-
-include_bspdir = $(includedir)/bsp
-include_bsp_HEADERS =
-include_bsp_HEADERS += ../../../../../../bsps/lm32/lm32_evr/include/bsp/irq.h
diff --git a/bsps/lm32/lm32_evr/include/bsp/irq.h b/bsps/lm32/lm32_evr/include/bsp/irq.h
deleted file mode 100644
index 8a97d7a1b0..0000000000
--- a/bsps/lm32/lm32_evr/include/bsp/irq.h
+++ /dev/null
@@ -1 +0,0 @@
-#include <bsp/irq-default.h>
diff --git a/bsps/lm32/milkymist/headers.am b/bsps/lm32/milkymist/headers.am
index 30df486e81..1bd114fba1 100644
--- a/bsps/lm32/milkymist/headers.am
+++ b/bsps/lm32/milkymist/headers.am
@@ -5,7 +5,3 @@ include_HEADERS += ../../../../../../bsps/lm32/milkymist/include/bsp.h
include_HEADERS += include/bspopts.h
include_HEADERS += ../../../../../../bsps/lm32/milkymist/include/system_conf.h
include_HEADERS += ../../../../../../bsps/lm32/milkymist/include/tm27.h
-
-include_bspdir = $(includedir)/bsp
-include_bsp_HEADERS =
-include_bsp_HEADERS += ../../../../../../bsps/lm32/milkymist/include/bsp/irq.h
diff --git a/bsps/lm32/milkymist/include/bsp/irq.h b/bsps/lm32/milkymist/include/bsp/irq.h
deleted file mode 100644
index 8a97d7a1b0..0000000000
--- a/bsps/lm32/milkymist/include/bsp/irq.h
+++ /dev/null
@@ -1 +0,0 @@
-#include <bsp/irq-default.h>
diff --git a/bsps/m68k/mcf52235/README b/bsps/m68k/mcf52235/README
index a5da02f8c6..7d44e16eb7 100644
--- a/bsps/m68k/mcf52235/README
+++ b/bsps/m68k/mcf52235/README
@@ -38,7 +38,6 @@ TODO:
*) Add drivers for I2C, ADC, FEC
*) Support for LWIP
-*) Update the coverhd.h (calling overheads) page 21 of the BSP guide
*) Recover the 1K stack space reserved in linkcmds used for board startup.
============================================================================
diff --git a/bsps/m68k/mcf5225x/README b/bsps/m68k/mcf5225x/README
index 883ff74974..604543ed6d 100644
--- a/bsps/m68k/mcf5225x/README
+++ b/bsps/m68k/mcf5225x/README
@@ -41,7 +41,6 @@ TODO:
*) Add drivers for I2C, ADC, FEC
*) Support for LWIP
-*) Update the coverhd.h (calling overheads) page 21 of the BSP guide
*) Recover the 1K stack space reserved in linkcmds used for board startup.
============================================================================
diff --git a/bsps/m68k/mvme147/README b/bsps/m68k/mvme147/README
index 91f78e2be3..3bc7afd89d 100644
--- a/bsps/m68k/mvme147/README
+++ b/bsps/m68k/mvme147/README
@@ -66,10 +66,7 @@ Other notes:
does not seem applicable on the VMEchip of the mvme147, so
I don't know where to start. Suggestions are welcome.
- * All the timing tests and sp tests have been run except tmoverhd.
- The test hangs during the pause (where the task should be suspended
- until a return). Maybe the rtems_initialize_executive is no more
- reentrant with this bsp.
+ * All the timing tests and sp tests have been run.
Future work:
diff --git a/bsps/m68k/mvme147s/README b/bsps/m68k/mvme147s/README
index c191872f42..77022980f0 100644
--- a/bsps/m68k/mvme147s/README
+++ b/bsps/m68k/mvme147s/README
@@ -81,8 +81,5 @@ To be done:
Other notes:
- * All the timing tests and sp tests have been run except tmoverhd.
- The test hangs during the pause (where the task should be suspended
- until a return). Maybe the rtems_initialize_executive is no more
- reentrant with this bsp.
+ * All the timing tests and sp tests have been run
diff --git a/bsps/mips/malta/include/bsp/pci.h b/bsps/mips/malta/include/bsp/pci.h
index 8f12459a80..34ff6bc73d 100644
--- a/bsps/mips/malta/include/bsp/pci.h
+++ b/bsps/mips/malta/include/bsp/pci.h
@@ -110,7 +110,7 @@ int indirect_pci_write_config_dword(
/* Can these be moved to the rtems pci.h? */
int FindPCIbridge( int mybus, struct pcibridge *pb );
-const pci_config_access_functions pci_indirect_functions;
+extern const pci_config_access_functions pci_indirect_functions;
void pci_out_le32( uint32_t base, uint32_t addr, uint32_t val);
void pci_out_32( uint32_t base, uint32_t addr, uint32_t val);
diff --git a/bsps/mips/shared/irq/i8259.c b/bsps/mips/shared/irq/i8259.c
index d92b5400a9..ffb6177f2f 100644
--- a/bsps/mips/shared/irq/i8259.c
+++ b/bsps/mips/shared/irq/i8259.c
@@ -251,9 +251,8 @@ void BSP_i8259s_init(void)
#define PCI__GEN(bus, off, num) (((off)^((bus) << 7))+((num) << 4))
#define PCI_INTR_ACK(bus) PCI__GEN(bus, 0x0c34, 0)
-volatile uint8_t master;
-volatile uint8_t slave;
-volatile uint8_t temp;
+static volatile uint8_t master;
+static volatile uint8_t slave;
void bsp_show_interrupt_regs(void);
void bsp_show_interrupt_regs() {
diff --git a/bsps/powerpc/gen5200/config/brs5l.cfg b/bsps/powerpc/gen5200/config/brs5l.cfg
deleted file mode 100644
index d6e556a183..0000000000
--- a/bsps/powerpc/gen5200/config/brs5l.cfg
+++ /dev/null
@@ -1,10 +0,0 @@
-#
-# Config file for customer specific MPC5200 board
-#
-
-#
-# All GEN5200 configurations share the same base file, only a few
-# parameters differ.
-#
-
-include $(RTEMS_ROOT)/make/custom/gen5200.inc
diff --git a/bsps/powerpc/gen5200/config/brs6l.cfg b/bsps/powerpc/gen5200/config/brs6l.cfg
deleted file mode 100644
index d6e556a183..0000000000
--- a/bsps/powerpc/gen5200/config/brs6l.cfg
+++ /dev/null
@@ -1,10 +0,0 @@
-#
-# Config file for customer specific MPC5200 board
-#
-
-#
-# All GEN5200 configurations share the same base file, only a few
-# parameters differ.
-#
-
-include $(RTEMS_ROOT)/make/custom/gen5200.inc
diff --git a/bsps/powerpc/gen5200/config/dp2.cfg b/bsps/powerpc/gen5200/config/dp2.cfg
deleted file mode 100644
index 81941fe0dc..0000000000
--- a/bsps/powerpc/gen5200/config/dp2.cfg
+++ /dev/null
@@ -1,5 +0,0 @@
-#
-# Config file for Direct Prototyping Data Processing (DP2) board.
-#
-
-include $(RTEMS_ROOT)/make/custom/gen5200.inc
diff --git a/bsps/powerpc/gen5200/start/linkcmds.brs5l b/bsps/powerpc/gen5200/start/linkcmds.brs5l
deleted file mode 100644
index 58407e5f56..0000000000
--- a/bsps/powerpc/gen5200/start/linkcmds.brs5l
+++ /dev/null
@@ -1,15 +0,0 @@
-/**
- * @file
- *
- * Linker command file for the BRS5L board.
- */
-
-MEMORY {
- /* For the 4k adjustment see cpuinit.c */
- RAM : ORIGIN = 0x0, LENGTH = 128M - 4k
- ROM : ORIGIN = 0xffe00000, LENGTH = 2M
- DPRAM : ORIGIN = 0xff000000, LENGTH = 1k
- REGS : ORIGIN = 0xf0000000, LENGTH = 64k
-}
-
-INCLUDE linkcmds.gen5200_base
diff --git a/bsps/powerpc/gen5200/start/linkcmds.brs6l b/bsps/powerpc/gen5200/start/linkcmds.brs6l
deleted file mode 100644
index ae80a72ad5..0000000000
--- a/bsps/powerpc/gen5200/start/linkcmds.brs6l
+++ /dev/null
@@ -1,15 +0,0 @@
-/**
- * @file
- *
- * Linker command file for the BRS6L board.
- */
-
-MEMORY {
- /* For the 4k adjustment see cpuinit.c */
- RAM : ORIGIN = 0x0, LENGTH = 128M - 4k
- ROM : ORIGIN = 0xff800000, LENGTH = 8M
- DPRAM : ORIGIN = 0xff000000, LENGTH = 0
- REGS : ORIGIN = 0xf0000000, LENGTH = 64k
-}
-
-INCLUDE linkcmds.gen5200_base
diff --git a/bsps/powerpc/gen5200/start/linkcmds.dp2 b/bsps/powerpc/gen5200/start/linkcmds.dp2
deleted file mode 100644
index 4ad76d6fce..0000000000
--- a/bsps/powerpc/gen5200/start/linkcmds.dp2
+++ /dev/null
@@ -1,15 +0,0 @@
-/**
- * @file
- *
- * Linker command file for the Direct Prototyping Data Processing board.
- */
-
-MEMORY {
- /* For the 4k adjustment see cpuinit.c */
- RAM : ORIGIN = 0x0, LENGTH = 64M - 4k
- ROM : ORIGIN = 0xffe00000, LENGTH = 2M
- REGS : ORIGIN = 0xf0000000, LENGTH = 64k
- DPRAM : ORIGIN = 0x0, LENGTH = 0
-}
-
-INCLUDE linkcmds.gen5200_base
diff --git a/bsps/powerpc/gen5200/start/start.S b/bsps/powerpc/gen5200/start/start.S
index 9e9e504861..fbb58cdfb1 100644
--- a/bsps/powerpc/gen5200/start/start.S
+++ b/bsps/powerpc/gen5200/start/start.S
@@ -775,7 +775,7 @@ TLB_init: /* Initialize translation lookaside buffers (TLBs) */
xor r29, r29, r29
TLB_init_loop:
- tlbie r29
+ tlbie r29, 0
tlbsync
addi r29, r29, 0x1000
addi r30, r30, 0x01
diff --git a/bsps/powerpc/gen83xx/start/cpuinit.c b/bsps/powerpc/gen83xx/start/cpuinit.c
index 1b0fd1efef..ad8fe98456 100644
--- a/bsps/powerpc/gen83xx/start/cpuinit.c
+++ b/bsps/powerpc/gen83xx/start/cpuinit.c
@@ -133,7 +133,7 @@ static void clear_mmu_regs( void)
/* Clear TLBs */
for (i = 0;i < 32;i++) {
- __asm__ volatile( "tlbie %0\n" : : "r" (i << (31 - 19)));
+ __asm__ volatile( "tlbie %0, 0\n" : : "r" (i << (31 - 19)));
}
}
diff --git a/bsps/powerpc/include/libcpu/io.h b/bsps/powerpc/include/libcpu/io.h
index 841df81f47..521c97801d 100644
--- a/bsps/powerpc/include/libcpu/io.h
+++ b/bsps/powerpc/include/libcpu/io.h
@@ -50,7 +50,7 @@
* Acts as a barrier to ensure all previous I/O accesses have
* completed before any further ones are issued.
*/
-static inline void eieio(void)
+static inline void io_eieio(void)
{
__asm__ __volatile__ ("eieio");
}
@@ -59,9 +59,9 @@ static inline void eieio(void)
/* Enforce in-order execution of data I/O.
* No distinction between read/write on PPC; use eieio for all three.
*/
-#define iobarrier_rw() eieio()
-#define iobarrier_r() eieio()
-#define iobarrier_w() eieio()
+#define iobarrier_rw() io_eieio()
+#define iobarrier_r() io_eieio()
+#define iobarrier_w() io_eieio()
/*
* 8, 16 and 32 bit, big and little endian I/O operations, with barrier.
diff --git a/bsps/powerpc/include/libcpu/mmu.h b/bsps/powerpc/include/libcpu/mmu.h
index d3081316eb..6e7abb15da 100644
--- a/bsps/powerpc/include/libcpu/mmu.h
+++ b/bsps/powerpc/include/libcpu/mmu.h
@@ -165,7 +165,7 @@ typedef struct _MMU_context {
/* invalidate a TLB entry */
static inline void _tlbie(unsigned long va)
{
- asm volatile ("tlbie %0" : : "r"(va));
+ asm volatile ("tlbie %0, 0" : : "r"(va));
}
extern void _tlbia(void); /* invalidate all TLB entries */
diff --git a/bsps/powerpc/include/libcpu/powerpc-utility.h b/bsps/powerpc/include/libcpu/powerpc-utility.h
index 60cfe85f60..2827430e13 100644
--- a/bsps/powerpc/include/libcpu/powerpc-utility.h
+++ b/bsps/powerpc/include/libcpu/powerpc-utility.h
@@ -860,6 +860,79 @@ static inline uint32_t ppc_fsl_system_version_mnrev(uint32_t svr)
return (svr >> 0) & 0xf;
}
+static inline void ppc_msync(void)
+{
+ __asm__ volatile (
+ ".machine push\n"
+ ".machine e500\n"
+ "msync\n"
+ ".machine pop"
+ :
+ :
+ : "memory"
+ );
+}
+
+static inline void ppc_tlbre(void)
+{
+ __asm__ volatile (
+ ".machine push\n"
+ ".machine e500\n"
+ "tlbre\n"
+ ".machine pop"
+ :
+ :
+ : "memory"
+ );
+}
+
+static inline void ppc_tlbwe(void)
+{
+ __asm__ volatile (
+ ".machine push\n"
+ ".machine e500\n"
+ "tlbwe\n"
+ ".machine pop"
+ :
+ :
+ : "memory"
+ );
+}
+
+static inline void ppc_tlbsx(void *addr)
+{
+ __asm__ volatile (
+ ".machine push\n"
+ ".machine e500\n"
+ "tlbsx 0, %0\n"
+ ".machine pop"
+ :
+ : "r" (addr)
+ : "memory"
+ );
+}
+
+static inline void ppc_mtivpr(void *prefix)
+{
+ __asm__ volatile (
+ ".machine push\n"
+ ".machine e500\n"
+ "mtivpr %0\n"
+ ".machine pop"
+ :
+ : "r" (prefix)
+ );
+}
+
+#define ppc_mtivor(x, vec) __asm__ volatile ( \
+ ".machine push\n" \
+ ".machine e500\n" \
+ "mtivor" RTEMS_XSTRING(x) " %0\n" \
+ ".machine pop" \
+ : \
+ : "r" (vec) \
+ )
+
void ppc_code_copy(void *dest, const void *src, size_t n);
/* FIXME: Do not use this function */
diff --git a/bsps/powerpc/include/rtems/powerpc/powerpc.h b/bsps/powerpc/include/rtems/powerpc/powerpc.h
index 4e16dd0be8..6a6b24f718 100644
--- a/bsps/powerpc/include/rtems/powerpc/powerpc.h
+++ b/bsps/powerpc/include/rtems/powerpc/powerpc.h
@@ -282,12 +282,6 @@ extern "C" {
#define PPC_INTERRUPT_MAX 125
#define PPC_USE_MULTIPLE 1
-#elif defined(__ppc_generic)
-
-#else
-
-#error "Unsupported CPU Model"
-
#endif
/*
diff --git a/bsps/powerpc/motorola_powerpc/bootloader/head.S b/bsps/powerpc/motorola_powerpc/bootloader/head.S
index 974b78a51c..b7e423e75d 100644
--- a/bsps/powerpc/motorola_powerpc/bootloader/head.S
+++ b/bsps/powerpc/motorola_powerpc/bootloader/head.S
@@ -383,7 +383,7 @@ MMUoff: blr
flush_tlb:
lis r11,0x1000
1: addic. r11,r11,-0x1000
- tlbie r11
+ tlbie r11, 0
bnl 1b
/* tlbsync is not implemented on 601, so use sync which seems to be a superset
* of tlbsync in all cases and do not bother with CPU dependant code
diff --git a/bsps/powerpc/motorola_powerpc/bootloader/mm.c b/bsps/powerpc/motorola_powerpc/bootloader/mm.c
index 1b3df41d49..2675396145 100644
--- a/bsps/powerpc/motorola_powerpc/bootloader/mm.c
+++ b/bsps/powerpc/motorola_powerpc/bootloader/mm.c
@@ -199,7 +199,7 @@ void _handler(int vec, ctxt *p) {
flushva |= ((hte[i].key<<21)&0xf0000000)
| ((hte[i].key<<22)&0x0fc00000);
hte[i].key=0;
- asm volatile("sync; tlbie %0; sync" : : "r" (flushva));
+ asm volatile("sync; tlbie %0, 0; sync" : : "r" (flushva));
found:
hte[i].rpn = rpn;
asm volatile("eieio": : );
@@ -583,7 +583,7 @@ void vflush(map *virtmap) {
| ((p[i].key<<22)&0x0fc00000);
if (va>=virtmap->base && va<=virtmap->end) {
p[i].key=0;
- asm volatile("sync; tlbie %0; sync" : :
+ asm volatile("sync; tlbie %0, 0; sync" : :
"r" (va));
}
}
diff --git a/bsps/powerpc/mpc55xxevb/config/mpc5566evb_spe-testsuite.tcfg b/bsps/powerpc/mpc55xxevb/config/mpc5566evb_spe-testsuite.tcfg
deleted file mode 100644
index aa3b464a42..0000000000
--- a/bsps/powerpc/mpc55xxevb/config/mpc5566evb_spe-testsuite.tcfg
+++ /dev/null
@@ -1,7 +0,0 @@
-#
-# mpc5566evb_spe RTEMS Test Database.
-#
-# Format is one line per test that is _NOT_ built.
-#
-
-include: testdata/small-memory-testsuite.tcfg
diff --git a/bsps/powerpc/mpc55xxevb/config/mpc5566evb_spe.cfg b/bsps/powerpc/mpc55xxevb/config/mpc5566evb_spe.cfg
deleted file mode 100644
index b0feb2e1ba..0000000000
--- a/bsps/powerpc/mpc55xxevb/config/mpc5566evb_spe.cfg
+++ /dev/null
@@ -1 +0,0 @@
-include $(RTEMS_ROOT)/make/custom/mpc55xx_spe.inc
diff --git a/bsps/powerpc/mpc55xxevb/config/mpc55xx.inc b/bsps/powerpc/mpc55xxevb/config/mpc55xx.inc
index 56c580156b..34433d740e 100644
--- a/bsps/powerpc/mpc55xxevb/config/mpc55xx.inc
+++ b/bsps/powerpc/mpc55xxevb/config/mpc55xx.inc
@@ -11,10 +11,7 @@ include $(RTEMS_ROOT)/make/custom/default.cfg
RTEMS_CPU = powerpc
-CPU_CFLAGS_FLOAT ?= -msoft-float -mno-spe
-
-# FIXME
-CPU_CFLAGS = -mcpu=8540 -meabi -msdata=sysv -fno-common $(CPU_CFLAGS_FLOAT) \
+CPU_CFLAGS = -mcpu=8540 -msoft-float -meabi -msdata=sysv -fno-common \
-mstrict-align
CFLAGS_OPTIMIZE_V = -O2 -g -fno-keep-inline-functions
diff --git a/bsps/powerpc/mpc55xxevb/config/mpc55xx_spe.inc b/bsps/powerpc/mpc55xxevb/config/mpc55xx_spe.inc
deleted file mode 100644
index fa69d09a3e..0000000000
--- a/bsps/powerpc/mpc55xxevb/config/mpc55xx_spe.inc
+++ /dev/null
@@ -1,3 +0,0 @@
-CPU_CFLAGS_FLOAT ?= -mspe -mabi=spe -mfloat-gprs=single
-
-include $(RTEMS_ROOT)/make/custom/mpc55xx.inc
diff --git a/bsps/powerpc/mpc55xxevb/config/mpc5643l_dpu-testsuite.tcfg b/bsps/powerpc/mpc55xxevb/config/mpc5643l_dpu-testsuite.tcfg
deleted file mode 100644
index 55ee88e5a7..0000000000
--- a/bsps/powerpc/mpc55xxevb/config/mpc5643l_dpu-testsuite.tcfg
+++ /dev/null
@@ -1,13 +0,0 @@
-#
-# mpc5643l_dpu RTEMS Test Database.
-#
-# Format is one line per test that is _NOT_ built.
-#
-
-include: testdata/small-memory-testsuite.tcfg
-
-exclude: fileio
-exclude: mghttpd01
-exclude: pppd
-# psxaio02 when debug
-exclude: psxaio02
diff --git a/bsps/powerpc/mpc55xxevb/config/mpc5643l_dpu.cfg b/bsps/powerpc/mpc55xxevb/config/mpc5643l_dpu.cfg
deleted file mode 100644
index 67fe396486..0000000000
--- a/bsps/powerpc/mpc55xxevb/config/mpc5643l_dpu.cfg
+++ /dev/null
@@ -1,10 +0,0 @@
-##
-#
-# @file
-#
-# @ingroup mpc55xx_config
-#
-# @brief Configuration file for MPC5643L Data Processing Unit board.
-#
-
-include $(RTEMS_ROOT)/make/custom/mpc55xx.inc
diff --git a/bsps/powerpc/mpc55xxevb/config/mpc5674f_ecu508_app-testsuite.tcfg b/bsps/powerpc/mpc55xxevb/config/mpc5674f_ecu508_app-testsuite.tcfg
deleted file mode 100644
index 1d2e02e9d1..0000000000
--- a/bsps/powerpc/mpc55xxevb/config/mpc5674f_ecu508_app-testsuite.tcfg
+++ /dev/null
@@ -1,5 +0,0 @@
-#
-# This is the set of tests which are known to not link on this BSP
-#
-
-include: testdata/small-memory-testsuite.tcfg
diff --git a/bsps/powerpc/mpc55xxevb/config/mpc5674f_ecu508_app.cfg b/bsps/powerpc/mpc55xxevb/config/mpc5674f_ecu508_app.cfg
deleted file mode 100644
index b0feb2e1ba..0000000000
--- a/bsps/powerpc/mpc55xxevb/config/mpc5674f_ecu508_app.cfg
+++ /dev/null
@@ -1 +0,0 @@
-include $(RTEMS_ROOT)/make/custom/mpc55xx_spe.inc
diff --git a/bsps/powerpc/mpc55xxevb/config/mpc5674f_ecu508_boot-testsuite.tcfg b/bsps/powerpc/mpc55xxevb/config/mpc5674f_ecu508_boot-testsuite.tcfg
deleted file mode 100644
index 17aa1967b2..0000000000
--- a/bsps/powerpc/mpc55xxevb/config/mpc5674f_ecu508_boot-testsuite.tcfg
+++ /dev/null
@@ -1,5 +0,0 @@
-#
-# mpc5674f_ecu508_boot RTEMS Test Database.
-#
-
-include: testdata/small-memory-testsuite.tcfg
diff --git a/bsps/powerpc/mpc55xxevb/config/mpc5674f_ecu508_boot.cfg b/bsps/powerpc/mpc55xxevb/config/mpc5674f_ecu508_boot.cfg
deleted file mode 100644
index b0feb2e1ba..0000000000
--- a/bsps/powerpc/mpc55xxevb/config/mpc5674f_ecu508_boot.cfg
+++ /dev/null
@@ -1 +0,0 @@
-include $(RTEMS_ROOT)/make/custom/mpc55xx_spe.inc
diff --git a/bsps/powerpc/mpc55xxevb/config/mpc5674f_rsm6-testsuite.tcfg b/bsps/powerpc/mpc55xxevb/config/mpc5674f_rsm6-testsuite.tcfg
deleted file mode 100644
index bc0cfa7086..0000000000
--- a/bsps/powerpc/mpc55xxevb/config/mpc5674f_rsm6-testsuite.tcfg
+++ /dev/null
@@ -1,5 +0,0 @@
-#
-# mpc5674f_rsm6 RTEMS Test Database.
-#
-
-include: testdata/small-memory-testsuite.tcfg
diff --git a/bsps/powerpc/mpc55xxevb/config/mpc5674f_rsm6.cfg b/bsps/powerpc/mpc55xxevb/config/mpc5674f_rsm6.cfg
deleted file mode 100644
index b0feb2e1ba..0000000000
--- a/bsps/powerpc/mpc55xxevb/config/mpc5674f_rsm6.cfg
+++ /dev/null
@@ -1 +0,0 @@
-include $(RTEMS_ROOT)/make/custom/mpc55xx_spe.inc
diff --git a/bsps/powerpc/mpc55xxevb/config/mpc5674fevb_spe-testsuite.tcfg b/bsps/powerpc/mpc55xxevb/config/mpc5674fevb_spe-testsuite.tcfg
deleted file mode 100644
index 1d2e02e9d1..0000000000
--- a/bsps/powerpc/mpc55xxevb/config/mpc5674fevb_spe-testsuite.tcfg
+++ /dev/null
@@ -1,5 +0,0 @@
-#
-# This is the set of tests which are known to not link on this BSP
-#
-
-include: testdata/small-memory-testsuite.tcfg
diff --git a/bsps/powerpc/mpc55xxevb/config/mpc5674fevb_spe.cfg b/bsps/powerpc/mpc55xxevb/config/mpc5674fevb_spe.cfg
deleted file mode 100644
index b0feb2e1ba..0000000000
--- a/bsps/powerpc/mpc55xxevb/config/mpc5674fevb_spe.cfg
+++ /dev/null
@@ -1 +0,0 @@
-include $(RTEMS_ROOT)/make/custom/mpc55xx_spe.inc
diff --git a/bsps/powerpc/mpc55xxevb/config/phycore_mpc5554.cfg b/bsps/powerpc/mpc55xxevb/config/phycore_mpc5554.cfg
index b0feb2e1ba..b0cb600143 100644
--- a/bsps/powerpc/mpc55xxevb/config/phycore_mpc5554.cfg
+++ b/bsps/powerpc/mpc55xxevb/config/phycore_mpc5554.cfg
@@ -1 +1 @@
-include $(RTEMS_ROOT)/make/custom/mpc55xx_spe.inc
+include $(RTEMS_ROOT)/make/custom/mpc55xx.inc
diff --git a/bsps/powerpc/mpc55xxevb/start/linkcmds.mpc5566evb_spe b/bsps/powerpc/mpc55xxevb/start/linkcmds.mpc5566evb_spe
deleted file mode 100644
index 9255b15076..0000000000
--- a/bsps/powerpc/mpc55xxevb/start/linkcmds.mpc5566evb_spe
+++ /dev/null
@@ -1 +0,0 @@
-INCLUDE linkcmds.mpc5566evb
diff --git a/bsps/powerpc/mpc55xxevb/start/linkcmds.mpc5643l_dpu b/bsps/powerpc/mpc55xxevb/start/linkcmds.mpc5643l_dpu
deleted file mode 100644
index 2f7d80716d..0000000000
--- a/bsps/powerpc/mpc55xxevb/start/linkcmds.mpc5643l_dpu
+++ /dev/null
@@ -1 +0,0 @@
-INCLUDE linkcmds.mpc5643l_evb
diff --git a/bsps/powerpc/mpc55xxevb/start/linkcmds.mpc5674f_ecu508 b/bsps/powerpc/mpc55xxevb/start/linkcmds.mpc5674f_ecu508
deleted file mode 100644
index 9b24b8f58e..0000000000
--- a/bsps/powerpc/mpc55xxevb/start/linkcmds.mpc5674f_ecu508
+++ /dev/null
@@ -1,51 +0,0 @@
-MEMORY {
- DSROM : ORIGIN = 0x00020000, LENGTH = 64k
- SYSROM : ORIGIN = 0x00100000, LENGTH = 4k
- RAM : ORIGIN = 0x40000000, LENGTH = 240k
- NOCACHE : ORIGIN = 0x4003c000, LENGTH = 16k
- DSRAM : ORIGIN = 0x20000000, LENGTH = 64k
- RAM_EXT : ORIGIN = 0x20010000, LENGTH = 444k
- SYSRAM : ORIGIN = 0x2007f000, LENGTH = 4k
- NVRAM : ORIGIN = 0x3ffa0000, LENGTH = 128k
-}
-
-REGION_ALIAS ("REGION_START", STARTROM);
-REGION_ALIAS ("REGION_FAST_TEXT", RAM);
-REGION_ALIAS ("REGION_FAST_TEXT_LOAD", ROM);
-REGION_ALIAS ("REGION_TEXT", ROM);
-REGION_ALIAS ("REGION_TEXT_LOAD", ROM);
-REGION_ALIAS ("REGION_RODATA", ROM);
-REGION_ALIAS ("REGION_RODATA_LOAD", ROM);
-REGION_ALIAS ("REGION_FAST_DATA", RAM);
-REGION_ALIAS ("REGION_FAST_DATA_LOAD", ROM);
-REGION_ALIAS ("REGION_DATA", RAM);
-REGION_ALIAS ("REGION_DATA_LOAD", ROM);
-REGION_ALIAS ("REGION_BSS", RAM);
-REGION_ALIAS ("REGION_RTEMSSTACK", RAM_EXT);
-REGION_ALIAS ("REGION_WORK", RAM);
-REGION_ALIAS ("REGION_STACK", RAM);
-REGION_ALIAS ("REGION_NOCACHE", NOCACHE);
-REGION_ALIAS ("REGION_NOCACHE_LOAD", ROM);
-REGION_ALIAS ("REGION_NVRAM", NVRAM);
-
-SECTIONS {
- .dsram (NOLOAD) : {
- bsp_section_dsram_begin = .;
- *(SORT(.bsp_dsram*))
- bsp_section_dsram_end = .;
- } > DSRAM AT > DSROM
- bsp_section_dsram_size = bsp_section_dsram_end - bsp_section_dsram_begin;
- bsp_section_dsram_load_begin = LOADADDR (.dsram);
- bsp_section_dsram_load_end = bsp_section_dsram_load_begin + bsp_section_dsram_size;
-
- .sysram : {
- bsp_section_sysram_begin = .;
- *(SORT(.bsp_sysram*))
- bsp_section_sysram_end = .;
- } > SYSRAM AT > SYSROM
- bsp_section_sysram_size = bsp_section_sysram_end - bsp_section_sysram_begin;
- bsp_section_sysram_load_begin = LOADADDR (.sysram);
- bsp_section_sysram_load_end = bsp_section_sysram_load_begin + bsp_section_sysram_size;
-}
-
-INCLUDE linkcmds.mpc55xx
diff --git a/bsps/powerpc/mpc55xxevb/start/linkcmds.mpc5674f_ecu508_app b/bsps/powerpc/mpc55xxevb/start/linkcmds.mpc5674f_ecu508_app
deleted file mode 100644
index 4b94ac50c4..0000000000
--- a/bsps/powerpc/mpc55xxevb/start/linkcmds.mpc5674f_ecu508_app
+++ /dev/null
@@ -1,8 +0,0 @@
-MEMORY {
- /* Let space for the binary image library header */
- ROM : ORIGIN = 0x00101000, LENGTH = 3064k
-}
-
-REGION_ALIAS ("STARTROM", ROM);
-
-INCLUDE linkcmds.mpc5674f_ecu508
diff --git a/bsps/powerpc/mpc55xxevb/start/linkcmds.mpc5674f_ecu508_boot b/bsps/powerpc/mpc55xxevb/start/linkcmds.mpc5674f_ecu508_boot
deleted file mode 100644
index 6dc5a7fcb0..0000000000
--- a/bsps/powerpc/mpc55xxevb/start/linkcmds.mpc5674f_ecu508_boot
+++ /dev/null
@@ -1,6 +0,0 @@
-MEMORY {
- STARTROM : ORIGIN = 0x0, LENGTH = 32k
- ROM : ORIGIN = 0x40000, LENGTH = 768k
-}
-
-INCLUDE linkcmds.mpc5674f_ecu508
diff --git a/bsps/powerpc/mpc55xxevb/start/linkcmds.mpc5674f_rsm6 b/bsps/powerpc/mpc55xxevb/start/linkcmds.mpc5674f_rsm6
deleted file mode 100644
index c96f8b9078..0000000000
--- a/bsps/powerpc/mpc55xxevb/start/linkcmds.mpc5674f_rsm6
+++ /dev/null
@@ -1,6 +0,0 @@
-MEMORY {
- STARTROM : ORIGIN = 0x0, LENGTH = 32k
- ROM : ORIGIN = 0x40000, LENGTH = 768k
-}
-
-INCLUDE linkcmds.mpc5674f_rsm6_base
diff --git a/bsps/powerpc/mpc55xxevb/start/linkcmds.mpc5674f_rsm6_base b/bsps/powerpc/mpc55xxevb/start/linkcmds.mpc5674f_rsm6_base
deleted file mode 100644
index 8f12295bd0..0000000000
--- a/bsps/powerpc/mpc55xxevb/start/linkcmds.mpc5674f_rsm6_base
+++ /dev/null
@@ -1,28 +0,0 @@
-MEMORY {
- RAM : ORIGIN = 0x40000000, LENGTH = 240k
- NOCACHE : ORIGIN = 0x4003c000, LENGTH = 16k
- MRAM : ORIGIN = 0x20000000, LENGTH = 4M
-}
-
-REGION_ALIAS ("RAM_EXT", RAM);
-
-REGION_ALIAS ("REGION_START", STARTROM);
-REGION_ALIAS ("REGION_FAST_TEXT", RAM);
-REGION_ALIAS ("REGION_FAST_TEXT_LOAD", ROM);
-REGION_ALIAS ("REGION_TEXT", ROM);
-REGION_ALIAS ("REGION_TEXT_LOAD", ROM);
-REGION_ALIAS ("REGION_RODATA", ROM);
-REGION_ALIAS ("REGION_RODATA_LOAD", ROM);
-REGION_ALIAS ("REGION_FAST_DATA", RAM);
-REGION_ALIAS ("REGION_FAST_DATA_LOAD", ROM);
-REGION_ALIAS ("REGION_DATA", RAM);
-REGION_ALIAS ("REGION_DATA_LOAD", ROM);
-REGION_ALIAS ("REGION_BSS", RAM);
-REGION_ALIAS ("REGION_RTEMSSTACK", RAM);
-REGION_ALIAS ("REGION_WORK", RAM);
-REGION_ALIAS ("REGION_STACK", RAM);
-REGION_ALIAS ("REGION_NOCACHE", NOCACHE);
-REGION_ALIAS ("REGION_NOCACHE_LOAD", ROM);
-REGION_ALIAS ("REGION_NVRAM", MRAM);
-
-INCLUDE linkcmds.mpc55xx
diff --git a/bsps/powerpc/mpc55xxevb/start/linkcmds.mpc5674fevb_spe b/bsps/powerpc/mpc55xxevb/start/linkcmds.mpc5674fevb_spe
deleted file mode 100644
index eab0907009..0000000000
--- a/bsps/powerpc/mpc55xxevb/start/linkcmds.mpc5674fevb_spe
+++ /dev/null
@@ -1 +0,0 @@
-INCLUDE linkcmds.mpc5674fevb
diff --git a/bsps/powerpc/mvme5500/start/start.S b/bsps/powerpc/mvme5500/start/start.S
index c948c9c1ef..7e339147fa 100644
--- a/bsps/powerpc/mvme5500/start/start.S
+++ b/bsps/powerpc/mvme5500/start/start.S
@@ -193,7 +193,7 @@ _return_to_ppcbug:
flush_tlbs:
lis r20, 0x1000
1: addic. r20, r20, -0x1000
- tlbie r20
+ tlbie r20, 0
bgt 1b
sync
blr
diff --git a/bsps/powerpc/psim/start/start.S b/bsps/powerpc/psim/start/start.S
index 645a0222c9..c56e246239 100644
--- a/bsps/powerpc/psim/start/start.S
+++ b/bsps/powerpc/psim/start/start.S
@@ -25,17 +25,6 @@
.LCTOC1 = .+32768
- .extern FUNC_NAME(atexit)
- .globl FUNC_NAME(__atexit)
- .section ".sdata","aw"
- .align 2
-FUNC_NAME(__atexit): /* tell C's eabi-ctor's we have an atexit function */
- .long FUNC_NAME(atexit)@fixup /* and that it is to register __do_global_dtors */
-
- .section ".fixup","aw"
- .align 2
- .long FUNC_NAME(__atexit)
-
.section ".got2","aw"
.Ltable = .-.LCTOC1
.long .LCTOC1 /* address we think .LCTOC1 is loaded at */
diff --git a/bsps/powerpc/qoriq/config/qoriq.inc b/bsps/powerpc/qoriq/config/qoriq.inc
index ad5c04b679..0e507058f4 100644
--- a/bsps/powerpc/qoriq/config/qoriq.inc
+++ b/bsps/powerpc/qoriq/config/qoriq.inc
@@ -6,8 +6,7 @@ include $(RTEMS_ROOT)/make/custom/default.cfg
RTEMS_CPU = powerpc
-CPU_CFLAGS = -mcpu=8540 -meabi -msdata=sysv -fno-common -mstrict-align \
- -mspe -mabi=spe -mfloat-gprs=double
+CPU_CFLAGS = -mcpu=8540 -msoft-float -meabi -msdata=sysv -fno-common -mstrict-align
CFLAGS_OPTIMIZE_V = -O2 -g
CFLAGS_OPTIMIZE_V += -ffunction-sections -fdata-sections
diff --git a/bsps/powerpc/qoriq/start/bspsmp.c b/bsps/powerpc/qoriq/start/bspsmp.c
index b5a2686d96..f9da7ddce1 100644
--- a/bsps/powerpc/qoriq/start/bspsmp.c
+++ b/bsps/powerpc/qoriq/start/bspsmp.c
@@ -210,24 +210,22 @@ bool _CPU_SMP_Start_processor(uint32_t cpu_index)
void _CPU_SMP_Finalize_initialization(uint32_t cpu_count)
{
-#ifdef QORIQ_IS_HYPERVISOR_GUEST
- (void) cpu_count;
-#else
- if (cpu_count > 1) {
- rtems_status_code sc;
-
- sc = rtems_interrupt_handler_install(
- QORIQ_IRQ_IPI_0 + IPI_INDEX,
- "IPI",
- RTEMS_INTERRUPT_UNIQUE,
- bsp_inter_processor_interrupt,
- NULL
- );
- if (sc != RTEMS_SUCCESSFUL) {
- bsp_fatal(QORIQ_FATAL_SMP_IPI_HANDLER_INSTALL);
- }
+#ifndef QORIQ_IS_HYPERVISOR_GUEST
+ rtems_status_code sc;
+
+ sc = rtems_interrupt_handler_install(
+ QORIQ_IRQ_IPI_0 + IPI_INDEX,
+ "IPI",
+ RTEMS_INTERRUPT_UNIQUE,
+ bsp_inter_processor_interrupt,
+ NULL
+ );
+ if (sc != RTEMS_SUCCESSFUL) {
+ bsp_fatal(QORIQ_FATAL_SMP_IPI_HANDLER_INSTALL);
}
#endif
+
+ (void) cpu_count;
}
void _CPU_SMP_Prepare_start_multitasking(void)
diff --git a/bsps/powerpc/qoriq/start/bspstart.c b/bsps/powerpc/qoriq/start/bspstart.c
index 3c75ecf020..5abd651a27 100644
--- a/bsps/powerpc/qoriq/start/bspstart.c
+++ b/bsps/powerpc/qoriq/start/bspstart.c
@@ -93,9 +93,6 @@ static void initialize_frequency_parameters(void)
#endif
}
-#define MTIVPR(base) \
- __asm__ volatile ("mtivpr %0" : : "r" (base))
-
#ifdef __powerpc64__
#define VECTOR_TABLE_ENTRY_SIZE 32
#else
@@ -117,7 +114,7 @@ void qoriq_initialize_exceptions(void *interrupt_stack_begin)
);
addr = (uintptr_t) bsp_exc_vector_base;
- MTIVPR(addr);
+ ppc_mtivpr((void *) addr);
MTIVOR(BOOKE_IVOR0, addr);
MTIVOR(BOOKE_IVOR1, addr);
MTIVOR(BOOKE_IVOR2, addr);
diff --git a/bsps/powerpc/qoriq/start/mmu.c b/bsps/powerpc/qoriq/start/mmu.c
index 87ffc11cc2..558c49618a 100644
--- a/bsps/powerpc/qoriq/start/mmu.c
+++ b/bsps/powerpc/qoriq/start/mmu.c
@@ -350,7 +350,7 @@ void qoriq_mmu_change_perm(uint32_t test, uint32_t set, uint32_t clear)
uint32_t mas1 = 0;
PPC_SET_SPECIAL_PURPOSE_REGISTER(FSL_EIS_MAS0, mas0);
- asm volatile ("tlbre");
+ ppc_tlbre();
mas1 = PPC_SPECIAL_PURPOSE_REGISTER(FSL_EIS_MAS1);
if ((mas1 & FSL_EIS_MAS1_V) != 0) {
@@ -361,7 +361,10 @@ void qoriq_mmu_change_perm(uint32_t test, uint32_t set, uint32_t clear)
mas3 &= ~(clear & mask);
mas3 |= set & mask;
PPC_SET_SPECIAL_PURPOSE_REGISTER(FSL_EIS_MAS3, mas3);
- asm volatile ("isync; msync; tlbwe; isync" : : : "memory");
+ ppc_msync();
+ ppc_synchronize_instructions();
+ ppc_tlbwe();
+ ppc_synchronize_instructions();
}
}
}
diff --git a/bsps/powerpc/shared/clock/clock-ppc-dec.c b/bsps/powerpc/shared/clock/clock-ppc-dec.c
index 798cf2a75b..a1f9ebd599 100644
--- a/bsps/powerpc/shared/clock/clock-ppc-dec.c
+++ b/bsps/powerpc/shared/clock/clock-ppc-dec.c
@@ -98,15 +98,21 @@ void clockOn(void* unused)
static void clockHandler(void)
{
#if (CLOCK_DRIVER_USE_FAST_IDLE == 1)
- rtems_interrupt_level level;
- uint32_t tb;
+ rtems_interrupt_level level;
+ uint32_t tb;
+ Per_CPU_Control *cpu_self;
rtems_interrupt_disable(level);
tb = ppc_time_base();
rtems_timecounter_tick();
+ cpu_self = _Per_CPU_Get();
- while ( _Thread_Heir == _Thread_Executing && _Thread_Executing->is_idle ) {
+ while (
+ cpu_self->thread_dispatch_disable_level == cpu_self->isr_nest_level
+ && cpu_self->heir == cpu_self->executing
+ && cpu_self->executing->is_idle
+ ) {
tb += Clock_Decrementer_value;
ppc_set_time_base( tb );
rtems_timecounter_tick();
diff --git a/bsps/powerpc/shared/exceptions/ppc_exc_initialize.c b/bsps/powerpc/shared/exceptions/ppc_exc_initialize.c
index 215918ac44..46b72524ea 100644
--- a/bsps/powerpc/shared/exceptions/ppc_exc_initialize.c
+++ b/bsps/powerpc/shared/exceptions/ppc_exc_initialize.c
@@ -29,13 +29,10 @@
uint32_t ppc_exc_cache_wb_check = 1;
-#define MTIVPR(prefix) __asm__ volatile ("mtivpr %0" : : "r" (prefix))
-#define MTIVOR(x, vec) __asm__ volatile ("mtivor"#x" %0" : : "r" (vec))
-
static void ppc_exc_initialize_booke(void *vector_base)
{
/* Interrupt vector prefix register */
- MTIVPR((uintptr_t) vector_base);
+ ppc_mtivpr(vector_base);
if (
ppc_cpu_is_specific_e200(PPC_e200z0)
@@ -49,29 +46,29 @@ static void ppc_exc_initialize_booke(void *vector_base)
}
/* Interupt vector offset registers */
- MTIVOR(0, ppc_exc_vector_address(ASM_BOOKE_CRIT_VECTOR, vector_base));
- MTIVOR(1, ppc_exc_vector_address(ASM_MACH_VECTOR, vector_base));
- MTIVOR(2, ppc_exc_vector_address(ASM_PROT_VECTOR, vector_base));
- MTIVOR(3, ppc_exc_vector_address(ASM_ISI_VECTOR, vector_base));
- MTIVOR(4, ppc_exc_vector_address(ASM_EXT_VECTOR, vector_base));
- MTIVOR(5, ppc_exc_vector_address(ASM_ALIGN_VECTOR, vector_base));
- MTIVOR(6, ppc_exc_vector_address(ASM_PROG_VECTOR, vector_base));
- MTIVOR(7, ppc_exc_vector_address(ASM_FLOAT_VECTOR, vector_base));
- MTIVOR(8, ppc_exc_vector_address(ASM_SYS_VECTOR, vector_base));
- MTIVOR(9, ppc_exc_vector_address(ASM_BOOKE_APU_VECTOR, vector_base));
- MTIVOR(10, ppc_exc_vector_address(ASM_BOOKE_DEC_VECTOR, vector_base));
- MTIVOR(11, ppc_exc_vector_address(ASM_BOOKE_FIT_VECTOR, vector_base));
- MTIVOR(12, ppc_exc_vector_address(ASM_BOOKE_WDOG_VECTOR, vector_base));
- MTIVOR(13, ppc_exc_vector_address(ASM_BOOKE_DTLBMISS_VECTOR, vector_base));
- MTIVOR(14, ppc_exc_vector_address(ASM_BOOKE_ITLBMISS_VECTOR, vector_base));
- MTIVOR(15, ppc_exc_vector_address(ASM_BOOKE_DEBUG_VECTOR, vector_base));
+ ppc_mtivor(0, ppc_exc_vector_address(ASM_BOOKE_CRIT_VECTOR, vector_base));
+ ppc_mtivor(1, ppc_exc_vector_address(ASM_MACH_VECTOR, vector_base));
+ ppc_mtivor(2, ppc_exc_vector_address(ASM_PROT_VECTOR, vector_base));
+ ppc_mtivor(3, ppc_exc_vector_address(ASM_ISI_VECTOR, vector_base));
+ ppc_mtivor(4, ppc_exc_vector_address(ASM_EXT_VECTOR, vector_base));
+ ppc_mtivor(5, ppc_exc_vector_address(ASM_ALIGN_VECTOR, vector_base));
+ ppc_mtivor(6, ppc_exc_vector_address(ASM_PROG_VECTOR, vector_base));
+ ppc_mtivor(7, ppc_exc_vector_address(ASM_FLOAT_VECTOR, vector_base));
+ ppc_mtivor(8, ppc_exc_vector_address(ASM_SYS_VECTOR, vector_base));
+ ppc_mtivor(9, ppc_exc_vector_address(ASM_BOOKE_APU_VECTOR, vector_base));
+ ppc_mtivor(10, ppc_exc_vector_address(ASM_BOOKE_DEC_VECTOR, vector_base));
+ ppc_mtivor(11, ppc_exc_vector_address(ASM_BOOKE_FIT_VECTOR, vector_base));
+ ppc_mtivor(12, ppc_exc_vector_address(ASM_BOOKE_WDOG_VECTOR, vector_base));
+ ppc_mtivor(13, ppc_exc_vector_address(ASM_BOOKE_DTLBMISS_VECTOR, vector_base));
+ ppc_mtivor(14, ppc_exc_vector_address(ASM_BOOKE_ITLBMISS_VECTOR, vector_base));
+ ppc_mtivor(15, ppc_exc_vector_address(ASM_BOOKE_DEBUG_VECTOR, vector_base));
if (ppc_cpu_is_e200() || ppc_cpu_is_e500()) {
- MTIVOR(32, ppc_exc_vector_address(ASM_E500_SPE_UNAVAILABLE_VECTOR, vector_base));
- MTIVOR(33, ppc_exc_vector_address(ASM_E500_EMB_FP_DATA_VECTOR, vector_base));
- MTIVOR(34, ppc_exc_vector_address(ASM_E500_EMB_FP_ROUND_VECTOR, vector_base));
+ ppc_mtivor(32, ppc_exc_vector_address(ASM_E500_SPE_UNAVAILABLE_VECTOR, vector_base));
+ ppc_mtivor(33, ppc_exc_vector_address(ASM_E500_EMB_FP_DATA_VECTOR, vector_base));
+ ppc_mtivor(34, ppc_exc_vector_address(ASM_E500_EMB_FP_ROUND_VECTOR, vector_base));
}
if (ppc_cpu_is_specific_e200(PPC_e200z7) || ppc_cpu_is_e500()) {
- MTIVOR(35, ppc_exc_vector_address(ASM_E500_PERFMON_VECTOR, vector_base));
+ ppc_mtivor(35, ppc_exc_vector_address(ASM_E500_PERFMON_VECTOR, vector_base));
}
}
diff --git a/bsps/powerpc/shared/mmu/e500-mmu.c b/bsps/powerpc/shared/mmu/e500-mmu.c
index 15fe88f91a..ee69172e46 100644
--- a/bsps/powerpc/shared/mmu/e500-mmu.c
+++ b/bsps/powerpc/shared/mmu/e500-mmu.c
@@ -75,6 +75,7 @@
#include <stdio.h>
#include <libcpu/e500_mmu.h>
+#include <libcpu/powerpc-utility.h>
#define TLBIVAX_TLBSEL (1<<(63-60))
#define TLBIVAX_INV_ALL (1<<(63-61))
@@ -215,7 +216,7 @@ rtems_e500_prtlb(rtems_e500_tlb_idx key, int quiet, FILE *f)
seltlb( key );
- asm volatile("tlbre");
+ ppc_tlbre();
/* not manipulating MAS0, skip reading it */
mas1 = _read_MAS1();
@@ -433,13 +434,11 @@ rtems_interrupt_level lvl;
_write_MAS3(mas3);
_write_MAS4(mas4);
- asm volatile(
- " sync\n"
- " isync\n"
- " tlbwe\n"
- " sync\n"
- " isync\n"
- );
+ ppc_synchronize_data();
+ ppc_synchronize_instructions();
+ ppc_tlbwe();
+ ppc_synchronize_data();
+ ppc_synchronize_instructions();
rtems_interrupt_enable(lvl);
@@ -536,7 +535,7 @@ rtems_interrupt_level lvl;
_write_MAS6( FSL_EIS_MAS6_SPID0(pid) | (as ? FSL_EIS_MAS6_SAS : 0 ) );
- asm volatile("tlbsx 0, %0"::"r"(ea));
+ ppc_tlbsx((void *)(uintptr_t) ea);
mas1 = _read_MAS1();
@@ -608,18 +607,16 @@ rtems_interrupt_level lvl;
seltlb(key);
- asm volatile("tlbre");
+ ppc_tlbre();
/* read old entries */
_write_MAS1( _read_MAS1() & ~FSL_EIS_MAS1_V );
- asm volatile(
- " sync\n"
- " isync\n"
- " tlbwe\n"
- " sync\n"
- " isync\n"
- );
+ ppc_synchronize_data();
+ ppc_synchronize_instructions();
+ ppc_tlbwe();
+ ppc_synchronize_data();
+ ppc_synchronize_instructions();
/* update cache */
if ( E500_SELTLB_1 & key )
diff --git a/bsps/powerpc/shared/mmu/pte121.c b/bsps/powerpc/shared/mmu/pte121.c
index 93ef909776..778d6353a9 100644
--- a/bsps/powerpc/shared/mmu/pte121.c
+++ b/bsps/powerpc/shared/mmu/pte121.c
@@ -122,9 +122,10 @@
* instructions in order to flush all TLBs.
* On the 750 and 7400, there are 128 two way I and D TLBs,
* indexed by EA[14:19]. Hence calling
- * tlbie rx
+ * tlbie rx, 0
* where rx scans 0x00000, 0x01000, 0x02000, ... 0x3f000
- * is sufficient to do the job
+ * is sufficient to do the job. The 0 in the tlbie instruction is the L operand
+ * which selects a 4KiB page size.
*/
#define NUM_TLB_PER_WAY 64 /* 750 and 7400 have 128 two way TLBs */
#define FLUSH_EA_RANGE (NUM_TLB_PER_WAY<<LD_PG_SIZE)
@@ -640,7 +641,7 @@ triv121PgTblActivate (Triv121PgTbl pt)
/* Now flush all TLBs, starting with the topmost index */
" lis %[tmp2], %[ea_range]@h\n"
"2: addic. %[tmp2], %[tmp2], -%[pg_sz]\n" /* address the next one (decrementing) */
- " tlbie %[tmp2]\n" /* invalidate & repeat */
+ " tlbie %[tmp2], 0\n" /* invalidate & repeat */
" bgt 2b\n"
" eieio \n"
" tlbsync \n"
@@ -872,7 +873,7 @@ triv121UnmapEa (unsigned long ea)
pte->v = 0;
do_dssall ();
__asm__ volatile (" sync \n\t"
- " tlbie %0 \n\t"
+ " tlbie %0, 0 \n\t"
" eieio \n\t"
" tlbsync \n\t"
" sync \n\t"::"r" (ea):"memory");
@@ -960,7 +961,7 @@ triv121ChangeEaAttributes (unsigned long ea, int wimg, int pp)
pte->wimg = wimg;
if (pp >= 0)
pte->pp = pp;
- __asm__ volatile ("tlbie %0; eieio"::"r" (ea):"memory");
+ __asm__ volatile ("tlbie %0, 0; eieio"::"r" (ea):"memory");
pte->v = 1;
__asm__ volatile ("tlbsync; sync":::"memory");
diff --git a/bsps/powerpc/shared/start/start.S b/bsps/powerpc/shared/start/start.S
index 76d4fc3e2a..eb91a6ce57 100644
--- a/bsps/powerpc/shared/start/start.S
+++ b/bsps/powerpc/shared/start/start.S
@@ -192,7 +192,7 @@ _return_to_ppcbug:
flush_tlbs:
lis r20, 0x1000
1: addic. r20, r20, -0x1000
- tlbie r20
+ tlbie r20, 0
bgt 1b
sync
blr
diff --git a/bsps/powerpc/ss555/start/start.S b/bsps/powerpc/ss555/start/start.S
index 443a40f0ad..121403e1fc 100644
--- a/bsps/powerpc/ss555/start/start.S
+++ b/bsps/powerpc/ss555/start/start.S
@@ -186,23 +186,6 @@
.L_D2:
.previous
-/*
- * Tell C's eabi-ctor's that we have an atexit function,
- * and that it is to register __do_global_dtors.
- */
- EXTERN_PROC(atexit)
- PUBLIC_VAR(__atexit)
- .section ".sdata","aw"
- .align 2
-SYM(__atexit):
- EXT_PROC_REF(atexit)@fixup
- .previous
-
- .section ".fixup","aw"
- .align 2
- EXT_SYM_REF(__atexit)
- .previous
-
/* That should do it */
/*
diff --git a/bsps/powerpc/t32mppc/config/t32mppc.cfg b/bsps/powerpc/t32mppc/config/t32mppc.cfg
index a83dafd3bb..2e3125268e 100644
--- a/bsps/powerpc/t32mppc/config/t32mppc.cfg
+++ b/bsps/powerpc/t32mppc/config/t32mppc.cfg
@@ -2,7 +2,7 @@ include $(RTEMS_ROOT)/make/custom/default.cfg
RTEMS_CPU = powerpc
-CPU_CFLAGS = -mcpu=8540 -meabi -msdata=sysv -fno-common -msoft-float -mno-spe
+CPU_CFLAGS = -mcpu=8540 -msoft-float -meabi -msdata=sysv -fno-common
CFLAGS_OPTIMIZE_V = -Og -g
CFLAGS_OPTIMIZE_V += -ffunction-sections -fdata-sections
diff --git a/bsps/riscv/griscv/start/bspsmp.c b/bsps/riscv/griscv/start/bspsmp.c
index df826f8217..0e5fd9903b 100644
--- a/bsps/riscv/griscv/start/bspsmp.c
+++ b/bsps/riscv/griscv/start/bspsmp.c
@@ -55,18 +55,15 @@ void bsp_start_on_secondary_processor(Per_CPU_Control *cpu_self)
uint32_t _CPU_SMP_Initialize(void)
{
- if ( rtems_configuration_get_maximum_processors() > 1 ) {
- GRLIB_Cpu_Unmask_interrupt(GRLIB_mp_irq, _CPU_SMP_Get_current_processor());
-
- rtems_interrupt_handler_install(
- GRLIB_mp_irq,
- "IPI",
- RTEMS_INTERRUPT_SHARED,
- bsp_inter_processor_interrupt,
- NULL
- );
-
- }
+ GRLIB_Cpu_Unmask_interrupt(GRLIB_mp_irq, _CPU_SMP_Get_current_processor());
+
+ rtems_interrupt_handler_install(
+ GRLIB_mp_irq,
+ "IPI",
+ RTEMS_INTERRUPT_SHARED,
+ bsp_inter_processor_interrupt,
+ NULL
+ );
return grlib_get_cpu_count(GRLIB_IrqCtrl_Regs);
}
diff --git a/bsps/riscv/riscv/include/dev/serial/htif.h b/bsps/riscv/riscv/include/dev/serial/htif.h
index b0d83652b7..4b16d87468 100644
--- a/bsps/riscv/riscv/include/dev/serial/htif.h
+++ b/bsps/riscv/riscv/include/dev/serial/htif.h
@@ -45,7 +45,7 @@ void htif_console_putchar(rtems_termios_device_context *base, char c);
int htif_console_getchar(rtems_termios_device_context *base);
-const rtems_termios_device_handler htif_console_handler;
+extern const rtems_termios_device_handler htif_console_handler;
#ifdef __cplusplus
}
diff --git a/bsps/riscv/riscv/start/bsp_fatal_halt.c b/bsps/riscv/riscv/start/bsp_fatal_halt.c
index af9e2ac7c6..348fa4f8f4 100644
--- a/bsps/riscv/riscv/start/bsp_fatal_halt.c
+++ b/bsps/riscv/riscv/start/bsp_fatal_halt.c
@@ -35,7 +35,7 @@ void _CPU_Fatal_halt(uint32_t source, uint32_t error)
{
const char *fdt;
int node;
- volatile uintptr_t *sifive_test;
+ volatile uint32_t *sifive_test;
#if RISCV_ENABLE_HTIF_SUPPORT != 0
htif_poweroff();
diff --git a/bsps/riscv/riscv/start/bspstart.c b/bsps/riscv/riscv/start/bspstart.c
index ff5738628d..d33e9965f8 100644
--- a/bsps/riscv/riscv/start/bspstart.c
+++ b/bsps/riscv/riscv/start/bspstart.c
@@ -194,6 +194,12 @@ uint32_t riscv_get_core_frequency(void)
return riscv_core_freq;
}
+uint32_t bsp_fdt_map_intr(const uint32_t *intr, size_t icells)
+{
+ (void) icells;
+ return intr[0];
+}
+
void bsp_start(void)
{
riscv_find_harts();
diff --git a/bsps/riscv/shared/start/start.S b/bsps/riscv/shared/start/start.S
index a8ff1b079f..04a62a26ce 100644
--- a/bsps/riscv/shared/start/start.S
+++ b/bsps/riscv/shared/start/start.S
@@ -93,7 +93,7 @@ SYM(_start):
#endif
li a0, 0
- j boot_card
+ tail boot_card
#ifdef RTEMS_SMP
diff --git a/bsps/shared/dev/clock/clockimpl.h b/bsps/shared/dev/clock/clockimpl.h
index f3b2565c56..dad71307f4 100644
--- a/bsps/shared/dev/clock/clockimpl.h
+++ b/bsps/shared/dev/clock/clockimpl.h
@@ -143,16 +143,23 @@ rtems_isr Clock_isr(
#if CLOCK_DRIVER_USE_FAST_IDLE
{
- struct timecounter *tc = _Timecounter;
- uint64_t us_per_tick = rtems_configuration_get_microseconds_per_tick();
- uint32_t interval = (uint32_t)
- ((tc->tc_frequency * us_per_tick) / 1000000);
-
Clock_driver_timecounter_tick();
if (_SMP_Get_processor_maximum() == 1) {
+ struct timecounter *tc;
+ uint64_t us_per_tick;
+ uint32_t interval;
+ Per_CPU_Control *cpu_self;
+
+ cpu_self = _Per_CPU_Get();
+ tc = _Timecounter;
+ us_per_tick = rtems_configuration_get_microseconds_per_tick();
+ interval = (uint32_t) ((tc->tc_frequency * us_per_tick) / 1000000);
+
while (
- _Thread_Heir == _Thread_Executing && _Thread_Executing->is_idle
+ cpu_self->thread_dispatch_disable_level == cpu_self->isr_nest_level
+ && cpu_self->heir == cpu_self->executing
+ && cpu_self->executing->is_idle
) {
ISR_lock_Context lock_context;
diff --git a/bsps/shared/dev/i2c/spi-memdrv.c b/bsps/shared/dev/i2c/spi-memdrv.c
index 593029732e..f3308e8fe1 100644
--- a/bsps/shared/dev/i2c/spi-memdrv.c
+++ b/bsps/shared/dev/i2c/spi-memdrv.c
@@ -365,26 +365,23 @@ rtems_status_code spi_memdrv_read
rc = rtems_libi2c_send_addr(minor,TRUE);
}
- if (off >= mem_param_ptr->mem_size) {
+ if (rc == RTEMS_SUCCESSFUL) {
/*
* HACK: beyond size of memory array? then read status register instead
*/
- /*
- * send read status register command
- */
- if (rc == RTEMS_SUCCESSFUL) {
+ if (off >= mem_param_ptr->mem_size) {
+ /*
+ * send read status register command
+ */
cmdbuf[0] = SPI_MEM_CMD_RDSR;
ret_cnt = rtems_libi2c_write_bytes(minor,cmdbuf,1);
if (ret_cnt < 0) {
rc = -ret_cnt;
}
- }
- }
- else {
- /*
- * send read command and address
- */
- if (rc == RTEMS_SUCCESSFUL) {
+ } else {
+ /*
+ * send read command and address
+ */
cmdbuf[0] = SPI_MEM_CMD_READ;
if (mem_param_ptr->mem_size > 0x10000 /* 256*256 */) {
cmdbuf[1] = (off >> 16) & 0xff;
diff --git a/bsps/shared/irq/irq-server.c b/bsps/shared/irq/irq-server.c
index 93e2d144d8..fe96b59cd4 100644
--- a/bsps/shared/irq/irq-server.c
+++ b/bsps/shared/irq/irq-server.c
@@ -7,13 +7,7 @@
*/
/*
- * Copyright (c) 2009, 2019 embedded brains GmbH. All rights reserved.
- *
- * embedded brains GmbH
- * Dornierstr. 4
- * 82178 Puchheim
- * Germany
- * <rtems@embedded-brains.de>
+ * Copyright (C) 2009, 2020 embedded brains GmbH (http://www.embedded-brains.de)
*
* The license and distribution terms for this file may be
* found in the file LICENSE in this distribution or at
@@ -21,6 +15,7 @@
*/
#include <stdlib.h>
+#include <string.h>
#include <rtems.h>
#include <rtems/chain.h>
@@ -30,54 +25,43 @@
#define BSP_INTERRUPT_SERVER_MANAGEMENT_VECTOR (BSP_INTERRUPT_VECTOR_MAX + 1)
-typedef struct {
- RTEMS_INTERRUPT_LOCK_MEMBER(lock);
- rtems_chain_control entries;
- rtems_id server;
- unsigned errors;
-} bsp_interrupt_server_context;
+static rtems_interrupt_server_control bsp_interrupt_server_default;
-#if defined(RTEMS_SMP)
-static bsp_interrupt_server_context *bsp_interrupt_server_instances;
-#else
-static bsp_interrupt_server_context bsp_interrupt_server_instance;
-#endif
+static rtems_chain_control bsp_interrupt_server_chain =
+ RTEMS_CHAIN_INITIALIZER_EMPTY(bsp_interrupt_server_chain);
-static bsp_interrupt_server_context *bsp_interrupt_server_get_context(
+static rtems_interrupt_server_control *bsp_interrupt_server_get_context(
uint32_t server_index,
rtems_status_code *sc
)
{
-#if defined(RTEMS_SMP)
- if (bsp_interrupt_server_instances == NULL) {
- *sc = RTEMS_INCORRECT_STATE;
- return NULL;
- }
-#else
- if (bsp_interrupt_server_instance.server == RTEMS_ID_NONE) {
- *sc = RTEMS_INCORRECT_STATE;
- return NULL;
- }
-#endif
+ rtems_chain_node *node;
+
+ bsp_interrupt_lock();
+ node = rtems_chain_first(&bsp_interrupt_server_chain);
- if (server_index >= rtems_scheduler_get_processor_maximum()) {
- *sc = RTEMS_INVALID_ID;
- return NULL;
+ while (node != rtems_chain_tail(&bsp_interrupt_server_chain)) {
+ rtems_interrupt_server_control *s;
+
+ s = RTEMS_CONTAINER_OF(node, rtems_interrupt_server_control, node);
+ if (s->index == server_index) {
+ bsp_interrupt_unlock();
+ return s;
+ }
+
+ node = rtems_chain_next(node);
}
- *sc = RTEMS_SUCCESSFUL;
-#if defined(RTEMS_SMP)
- return &bsp_interrupt_server_instances[server_index];
-#else
- return &bsp_interrupt_server_instance;
-#endif
+ bsp_interrupt_unlock();
+ *sc = RTEMS_INVALID_ID;
+ return NULL;
}
static void bsp_interrupt_server_trigger(void *arg)
{
rtems_interrupt_lock_context lock_context;
rtems_interrupt_server_entry *e = arg;
- bsp_interrupt_server_context *s = e->server;
+ rtems_interrupt_server_control *s = e->server;
if (bsp_interrupt_is_valid_vector(e->vector)) {
bsp_interrupt_vector_disable(e->vector);
@@ -137,7 +121,7 @@ static rtems_interrupt_server_entry *bsp_interrupt_server_query_entry(
}
typedef struct {
- bsp_interrupt_server_context *server;
+ rtems_interrupt_server_control *server;
rtems_vector_number vector;
rtems_option options;
rtems_interrupt_handler handler;
@@ -281,7 +265,7 @@ static void bsp_interrupt_server_remove_helper(void *arg)
}
static rtems_status_code bsp_interrupt_server_call_helper(
- bsp_interrupt_server_context *s,
+ rtems_interrupt_server_control *s,
rtems_vector_number vector,
rtems_option options,
rtems_interrupt_handler handler,
@@ -314,7 +298,7 @@ static rtems_status_code bsp_interrupt_server_call_helper(
}
static rtems_interrupt_server_entry *bsp_interrupt_server_get_entry(
- bsp_interrupt_server_context *s
+ rtems_interrupt_server_control *s
)
{
rtems_interrupt_lock_context lock_context;
@@ -337,7 +321,7 @@ static rtems_interrupt_server_entry *bsp_interrupt_server_get_entry(
static void bsp_interrupt_server_task(rtems_task_argument arg)
{
- bsp_interrupt_server_context *s = (bsp_interrupt_server_context *) arg;
+ rtems_interrupt_server_control *s = (rtems_interrupt_server_control *) arg;
while (true) {
rtems_event_set events;
@@ -377,7 +361,7 @@ rtems_status_code rtems_interrupt_server_handler_install(
)
{
rtems_status_code sc;
- bsp_interrupt_server_context *s;
+ rtems_interrupt_server_control *s;
s = bsp_interrupt_server_get_context(server_index, &sc);
if (s == NULL) {
@@ -402,7 +386,7 @@ rtems_status_code rtems_interrupt_server_handler_remove(
)
{
rtems_status_code sc;
- bsp_interrupt_server_context *s;
+ rtems_interrupt_server_control *s;
s = bsp_interrupt_server_get_context(server_index, &sc);
if (s == NULL) {
@@ -464,7 +448,7 @@ rtems_status_code rtems_interrupt_server_handler_iterate(
{
rtems_status_code sc;
bsp_interrupt_server_handler_iterate_helper_data hihd;
- bsp_interrupt_server_context *s;
+ rtems_interrupt_server_control *s;
s = bsp_interrupt_server_get_context(server_index, &sc);
if (s == NULL) {
@@ -487,103 +471,252 @@ rtems_status_code rtems_interrupt_server_handler_iterate(
);
}
-rtems_status_code rtems_interrupt_server_initialize(
+/*
+ * The default server is statically allocated. Just clear the structure so
+ * that it can be re-initialized.
+ */
+static void bsp_interrupt_server_destroy_default(
+ rtems_interrupt_server_control *s
+)
+{
+ memset(s, 0, sizeof(*s));
+}
+
+#if defined(RTEMS_SMP)
+static void bsp_interrupt_server_destroy_secondary(
+ rtems_interrupt_server_control *s
+)
+{
+ free(s);
+}
+#endif
+
+static rtems_status_code bsp_interrupt_server_create(
+ rtems_interrupt_server_control *s,
rtems_task_priority priority,
size_t stack_size,
rtems_mode modes,
rtems_attribute attributes,
- uint32_t *server_count
+ uint32_t cpu_index
)
{
- uint32_t cpu_index;
- uint32_t cpu_count;
- uint32_t dummy;
- bsp_interrupt_server_context *instances;
+ rtems_status_code sc;
+#if defined(RTEMS_SMP)
+ rtems_id scheduler;
+ cpu_set_t cpu;
+#endif
- if (server_count == NULL) {
- server_count = &dummy;
- }
+ rtems_interrupt_lock_initialize(&s->lock, "Interrupt Server");
+ rtems_chain_initialize_empty(&s->entries);
- cpu_count = rtems_scheduler_get_processor_maximum();
+ sc = rtems_task_create(
+ rtems_build_name('I', 'R', 'Q', 'S'),
+ priority,
+ stack_size,
+ modes,
+ attributes,
+ &s->server
+ );
+ if (sc != RTEMS_SUCCESSFUL) {
+ return sc;
+ }
#if defined(RTEMS_SMP)
- instances = calloc(cpu_count, sizeof(*instances));
- if (instances == NULL) {
- return RTEMS_NO_MEMORY;
+ sc = rtems_scheduler_ident_by_processor(cpu_index, &scheduler);
+ if (sc != RTEMS_SUCCESSFUL) {
+ /* Do not start an interrupt server on a processor without a scheduler */
+ return RTEMS_SUCCESSFUL;
}
+
+ sc = rtems_task_set_scheduler(s->server, scheduler, priority);
+ _Assert(sc == RTEMS_SUCCESSFUL);
+
+ /* Set the task to processor affinity on a best-effort basis */
+ CPU_ZERO(&cpu);
+ CPU_SET(cpu_index, &cpu);
+ (void) rtems_task_set_affinity(s->server, sizeof(cpu), &cpu);
#else
- instances = &bsp_interrupt_server_instance;
+ (void) cpu_index;
#endif
- for (cpu_index = 0; cpu_index < cpu_count; ++cpu_index) {
- bsp_interrupt_server_context *s = &instances[cpu_index];
- rtems_status_code sc;
+ rtems_chain_append_unprotected(&bsp_interrupt_server_chain, &s->node);
+
+ sc = rtems_task_start(
+ s->server,
+ bsp_interrupt_server_task,
+ (rtems_task_argument) s
+ );
+ _Assert(sc == RTEMS_SUCCESSFUL);
+
+ return sc;
+}
+
+rtems_status_code rtems_interrupt_server_initialize(
+ rtems_task_priority priority,
+ size_t stack_size,
+ rtems_mode modes,
+ rtems_attribute attributes,
+ uint32_t *server_count
+)
+{
+ rtems_status_code sc;
+ rtems_interrupt_server_control *s;
+ uint32_t cpu_index;
#if defined(RTEMS_SMP)
- rtems_id scheduler;
- cpu_set_t cpu;
+ uint32_t cpu_count;
#endif
- rtems_interrupt_lock_initialize(&s->lock, "Interrupt Server");
- rtems_chain_initialize_empty(&s->entries);
+ cpu_index = 0;
+ s = &bsp_interrupt_server_default;
+
+ bsp_interrupt_lock();
+
+ if (s->server != 0) {
+ sc = RTEMS_INCORRECT_STATE;
+ goto done;
+ }
+
+ s->destroy = bsp_interrupt_server_destroy_default;
+ sc = bsp_interrupt_server_create(
+ s,
+ priority,
+ stack_size,
+ modes,
+ attributes,
+ cpu_index
+ );
+ if (sc != RTEMS_SUCCESSFUL) {
+ goto done;
+ }
+
+ cpu_index = 1;
+
+#if defined(RTEMS_SMP)
+ cpu_count = rtems_scheduler_get_processor_maximum();
+
+ while (cpu_index < cpu_count) {
+ s = calloc(1, sizeof(*s));
- sc = rtems_task_create(
- rtems_build_name('I', 'R', 'Q', 'S'),
+ if (s == NULL) {
+ sc = RTEMS_NO_MEMORY;
+ goto done;
+ }
+
+ s->destroy = bsp_interrupt_server_destroy_secondary;
+ s->index = cpu_index;
+ sc = bsp_interrupt_server_create(
+ s,
priority,
stack_size,
modes,
attributes,
- &s->server
+ cpu_index
);
if (sc != RTEMS_SUCCESSFUL) {
- *server_count = cpu_index;
-
-#if defined(RTEMS_SMP)
- if (cpu_index > 0) {
- bsp_interrupt_server_instances = instances;
- return RTEMS_SUCCESSFUL;
- }
+ goto done;
+ }
- free(instances);
+ ++cpu_index;
+ }
#endif
- return RTEMS_TOO_MANY;
- }
+done:
+ bsp_interrupt_unlock();
-#if defined(RTEMS_SMP)
- sc = rtems_scheduler_ident_by_processor(cpu_index, &scheduler);
- if (sc != RTEMS_SUCCESSFUL) {
- /* Do not start an interrupt server on a processor without a scheduler */
- continue;
- }
+ if (server_count != NULL) {
+ *server_count = cpu_index;
+ }
- sc = rtems_task_set_scheduler(s->server, scheduler, priority);
- _Assert(sc == RTEMS_SUCCESSFUL);
+ return sc;
+}
- /* Set the task to processor affinity on a best-effort basis */
- CPU_ZERO(&cpu);
- CPU_SET(cpu_index, &cpu);
- (void) rtems_task_set_affinity(s->server, sizeof(cpu), &cpu);
-#endif
+rtems_status_code rtems_interrupt_server_create(
+ rtems_interrupt_server_control *s,
+ const rtems_interrupt_server_config *config,
+ uint32_t *server_index
+)
+{
+ rtems_status_code sc;
- sc = rtems_task_start(
- s->server,
- bsp_interrupt_server_task,
- (rtems_task_argument) s
- );
- _Assert(sc == RTEMS_SUCCESSFUL);
+ sc = rtems_task_create(
+ config->name,
+ config->priority,
+ config->storage_size,
+ config->modes,
+ config->attributes,
+ &s->server
+ );
+ if (sc != RTEMS_SUCCESSFUL) {
+ return sc;
}
-#if defined(RTEMS_SMP)
- bsp_interrupt_server_instances = instances;
-#endif
- *server_count = cpu_index;
+ rtems_interrupt_lock_initialize(&s->lock, "Interrupt Server");
+ rtems_chain_initialize_empty(&s->entries);
+ s->destroy = config->destroy;
+ s->index = rtems_object_id_get_index(s->server)
+ + rtems_scheduler_get_processor_maximum();
+ *server_index = s->index;
+ bsp_interrupt_lock();
+ rtems_chain_initialize_node(&s->node);
+ rtems_chain_append_unprotected(&bsp_interrupt_server_chain, &s->node);
+ bsp_interrupt_unlock();
+
+ sc = rtems_task_start(
+ s->server,
+ bsp_interrupt_server_task,
+ (rtems_task_argument) s
+ );
+ _Assert(sc == RTEMS_SUCCESSFUL);
+
+ return sc;
+}
+
+static void bsp_interrupt_server_destroy_helper(void *arg)
+{
+ bsp_interrupt_server_helper_data *hd = arg;
+ rtems_interrupt_server_control *s = hd->server;
+ rtems_status_code sc;
+
+ bsp_interrupt_lock();
+ rtems_chain_extract_unprotected(&s->node);
+ bsp_interrupt_unlock();
+
+ if (s->destroy != NULL) {
+ (*s->destroy)(s);
+ }
+
+ sc = rtems_event_transient_send(hd->task);
+ _Assert(sc == RTEMS_SUCCESSFUL);
+ (void) sc;
+
+ rtems_task_exit();
+}
+
+rtems_status_code rtems_interrupt_server_delete(uint32_t server_index)
+{
+ rtems_status_code sc;
+ rtems_interrupt_server_control *s;
+
+ s = bsp_interrupt_server_get_context(server_index, &sc);
+ if (s == NULL) {
+ return sc;
+ }
+
+ bsp_interrupt_server_call_helper(
+ s,
+ BSP_INTERRUPT_SERVER_MANAGEMENT_VECTOR,
+ 0,
+ NULL,
+ NULL,
+ bsp_interrupt_server_destroy_helper
+ );
return RTEMS_SUCCESSFUL;
}
static void bsp_interrupt_server_entry_initialize(
rtems_interrupt_server_entry *entry,
- bsp_interrupt_server_context *s
+ rtems_interrupt_server_control *s
)
{
rtems_chain_set_off_chain(&entry->node);
@@ -611,7 +744,7 @@ rtems_status_code rtems_interrupt_server_entry_initialize(
)
{
rtems_status_code sc;
- bsp_interrupt_server_context *s;
+ rtems_interrupt_server_control *s;
s = bsp_interrupt_server_get_context(server_index, &sc);
if (s == NULL) {
@@ -645,7 +778,7 @@ rtems_status_code rtems_interrupt_server_entry_move(
)
{
rtems_status_code sc;
- bsp_interrupt_server_context *s;
+ rtems_interrupt_server_control *s;
s = bsp_interrupt_server_get_context(destination_server_index, &sc);
if (s == NULL) {
@@ -667,7 +800,7 @@ void rtems_interrupt_server_entry_destroy(
rtems_interrupt_server_entry *entry
)
{
- bsp_interrupt_server_context *s;
+ rtems_interrupt_server_control *s;
rtems_interrupt_lock_context lock_context;
s = entry->server;
@@ -698,7 +831,7 @@ rtems_status_code rtems_interrupt_server_request_initialize(
)
{
rtems_status_code sc;
- bsp_interrupt_server_context *s;
+ rtems_interrupt_server_control *s;
s = bsp_interrupt_server_get_context(server_index, &sc);
if (s == NULL) {
@@ -727,8 +860,8 @@ static void bsp_interrupt_server_handler_move_helper(void *arg)
e = bsp_interrupt_server_query_entry(hd->vector, &trigger_options);
if (e != NULL) {
rtems_interrupt_lock_context lock_context;
- bsp_interrupt_server_context *src = e->server;
- bsp_interrupt_server_context *dst = hihd->arg;
+ rtems_interrupt_server_control *src = e->server;
+ rtems_interrupt_server_control *dst = hihd->arg;
bool pending;
/* The source server is only used in SMP configurations for the lock */
@@ -763,8 +896,8 @@ rtems_status_code rtems_interrupt_server_move(
)
{
rtems_status_code sc;
- bsp_interrupt_server_context *src;
- bsp_interrupt_server_context *dst;
+ rtems_interrupt_server_control *src;
+ rtems_interrupt_server_control *dst;
bsp_interrupt_server_handler_iterate_helper_data hihd;
src = bsp_interrupt_server_get_context(source_server_index, &sc);
@@ -810,7 +943,7 @@ static void bsp_interrupt_server_entry_suspend_helper(void *arg)
rtems_status_code rtems_interrupt_server_suspend(uint32_t server_index)
{
rtems_status_code sc;
- bsp_interrupt_server_context *s;
+ rtems_interrupt_server_control *s;
s = bsp_interrupt_server_get_context(server_index, &sc);
if (s == NULL) {
@@ -831,7 +964,7 @@ rtems_status_code rtems_interrupt_server_suspend(uint32_t server_index)
rtems_status_code rtems_interrupt_server_resume(uint32_t server_index)
{
rtems_status_code sc;
- bsp_interrupt_server_context *s;
+ rtems_interrupt_server_control *s;
s = bsp_interrupt_server_get_context(server_index, &sc);
if (s == NULL) {
@@ -858,7 +991,7 @@ rtems_status_code rtems_interrupt_server_set_affinity(
)
{
rtems_status_code sc;
- bsp_interrupt_server_context *s;
+ rtems_interrupt_server_control *s;
rtems_id scheduler;
s = bsp_interrupt_server_get_context(server_index, &sc);
diff --git a/bsps/shared/rtems-version.c b/bsps/shared/rtems-version.c
index 99b98966e6..b12504a1c9 100644
--- a/bsps/shared/rtems-version.c
+++ b/bsps/shared/rtems-version.c
@@ -8,7 +8,8 @@
*/
#include <rtems/version.h>
-#include <rtems/system.h>
+#include <rtems/score/copyrt.h>
+#include <rtems/score/cpu.h>
#include <bspopts.h>
diff --git a/bsps/shared/start/bsp-fdt.c b/bsps/shared/start/bsp-fdt.c
index 7e8d8922a8..50a485eb16 100644
--- a/bsps/shared/start/bsp-fdt.c
+++ b/bsps/shared/start/bsp-fdt.c
@@ -29,10 +29,11 @@
#ifdef BSP_FDT_BLOB_READ_ONLY
static const uint32_t
-bsp_fdt_blob[BSP_FDT_BLOB_SIZE_MAX / sizeof(uint32_t)] = { 0xdeadbeef };
+bsp_fdt_blob[BSP_FDT_BLOB_SIZE_MAX / sizeof(uint32_t)] CPU_STRUCTURE_ALIGNMENT =
+ { 0xdeadbeef };
#else
static uint32_t
-bsp_fdt_blob[BSP_FDT_BLOB_SIZE_MAX / sizeof(uint32_t)];
+bsp_fdt_blob[BSP_FDT_BLOB_SIZE_MAX / sizeof(uint32_t)] CPU_STRUCTURE_ALIGNMENT;
#endif
void bsp_fdt_copy(const void *src)
@@ -48,6 +49,7 @@ void bsp_fdt_copy(const void *src)
if (s != d) {
size_t m = MIN(sizeof(bsp_fdt_blob), fdt_totalsize(src));
+ size_t aligned_size = roundup2(m, CPU_CACHE_LINE_BYTES);
size_t n = (m + sizeof(*d) - 1) / sizeof(*d);
size_t i;
@@ -55,7 +57,7 @@ void bsp_fdt_copy(const void *src)
d[i] = s[i];
}
- rtems_cache_flush_multiple_data_lines(d, m);
+ rtems_cache_flush_multiple_data_lines(d, aligned_size);
}
}
diff --git a/bsps/sparc/leon3/console/printk_support.c b/bsps/sparc/leon3/console/printk_support.c
index c7811687f3..2d46efce8d 100644
--- a/bsps/sparc/leon3/console/printk_support.c
+++ b/bsps/sparc/leon3/console/printk_support.c
@@ -17,11 +17,8 @@
#include <bsp.h>
#include <leon.h>
-#include <rtems/libio.h>
+#include <rtems/bspIo.h>
#include <rtems/sysinit.h>
-#include <stdlib.h>
-#include <assert.h>
-#include <stdio.h>
#include <grlib/apbuart.h>
int leon3_debug_uart_index __attribute__((weak)) = 0;
@@ -99,8 +96,6 @@ static void bsp_out_char(char c)
* To support printk
*/
-#include <rtems/bspIo.h>
-
BSP_output_char_function_type BSP_output_char = bsp_out_char;
static int bsp_in_char(void)
@@ -108,7 +103,7 @@ static int bsp_in_char(void)
int tmp;
if (leon3_debug_uart == NULL)
- return EOF;
+ return -1;
while ((tmp = apbuart_inbyte_nonblocking(leon3_debug_uart)) < 0)
;
diff --git a/bsps/sparc/leon3/start/bspsmp.c b/bsps/sparc/leon3/start/bspsmp.c
index caf0200a3c..ba41a1fca1 100644
--- a/bsps/sparc/leon3/start/bspsmp.c
+++ b/bsps/sparc/leon3/start/bspsmp.c
@@ -60,10 +60,8 @@ uint32_t _CPU_SMP_Initialize( void )
if ( !leon3_data_cache_snooping_enabled() )
bsp_fatal( LEON3_FATAL_INVALID_CACHE_CONFIG_MAIN_PROCESSOR );
- if ( rtems_configuration_get_maximum_processors() > 1 ) {
- LEON_Unmask_interrupt(LEON3_mp_irq);
- set_vector(bsp_inter_processor_interrupt, LEON_TRAP_TYPE(LEON3_mp_irq), 1);
- }
+ LEON_Unmask_interrupt(LEON3_mp_irq);
+ set_vector(bsp_inter_processor_interrupt, LEON_TRAP_TYPE(LEON3_mp_irq), 1);
return leon3_get_cpu_count(LEON3_IrqCtrl_Regs);
}
diff --git a/bsps/sparc/leon3/start/bspstart.c b/bsps/sparc/leon3/start/bspstart.c
index e8975618d4..e4c3f1045e 100644
--- a/bsps/sparc/leon3/start/bspstart.c
+++ b/bsps/sparc/leon3/start/bspstart.c
@@ -22,7 +22,6 @@
#include <bsp.h>
#include <leon.h>
#include <bsp/bootcard.h>
-#include <drvmgr/drvmgr.h>
#include <rtems/sysinit.h>
#if defined(RTEMS_SMP) || defined(RTEMS_MULTIPROCESSING)
diff --git a/bsps/sparc/shared/irq/irq-shared.c b/bsps/sparc/shared/irq/irq-shared.c
index 344ed71a34..e0ac7d7f06 100644
--- a/bsps/sparc/shared/irq/irq-shared.c
+++ b/bsps/sparc/shared/irq/irq-shared.c
@@ -45,16 +45,10 @@ void BSP_shared_interrupt_init(void)
int i;
for (i=0; i <= BSP_INTERRUPT_VECTOR_MAX_STD; i++) {
-#if defined(LEON3) && \
- (defined(RTEMS_SMP) || defined(RTEMS_MULTIPROCESSING))
- /* Don't install IRQ handler on IPI interrupt. An SMP kernel with max one
- * CPU does not use IPIs
- */
-#ifdef RTEMS_SMP
- if (rtems_configuration_get_maximum_processors() > 1)
-#endif
- if (i == LEON3_mp_irq)
- continue;
+#if defined(LEON3) && (defined(RTEMS_SMP) || defined(RTEMS_MULTIPROCESSING))
+ /* Don't install IRQ handler on IPI interrupt */
+ if (i == LEON3_mp_irq)
+ continue;
#endif
vector = SPARC_ASYNCHRONOUS_TRAP(i) + 0x10;
rtems_interrupt_catch(bsp_isr_handler, vector, &previous_isr);
diff --git a/c/src/aclocal/check-networking.m4 b/c/src/aclocal/check-networking.m4
index dcf467d2ed..8200dca98d 100644
--- a/c/src/aclocal/check-networking.m4
+++ b/c/src/aclocal/check-networking.m4
@@ -7,11 +7,7 @@ AC_REQUIRE([RTEMS_INCLUDES])dnl
AC_CACHE_CHECK([whether BSP supports networking],
rtems_cv_HAS_NETWORKING,
[dnl
- case "$RTEMS_CPU" in
- # do not have address space to hold BSD TCP/IP stack
- epiphany*)
- rtems_cv_HAS_NETWORKING="no"
- ;;
+ case "$host" in
# Newer architecture ports that should only use new TCP/IP stack
x86_64*)
rtems_cv_HAS_NETWORKING="no"
diff --git a/c/src/aclocal/rtems-cpu-subdirs.m4 b/c/src/aclocal/rtems-cpu-subdirs.m4
index 47bd33945c..7805f892dd 100644
--- a/c/src/aclocal/rtems-cpu-subdirs.m4
+++ b/c/src/aclocal/rtems-cpu-subdirs.m4
@@ -12,7 +12,6 @@ AC_DEFUN([RTEMS_CPU_SUBDIRS],
case $RTEMS_CPU in
_RTEMS_CPU_SUBDIR([arm],[$1]);;
_RTEMS_CPU_SUBDIR([bfin],[$1]);;
-_RTEMS_CPU_SUBDIR([epiphany],[$1]);;
_RTEMS_CPU_SUBDIR([i386],[$1]);;
_RTEMS_CPU_SUBDIR([lm32],[$1]);;
_RTEMS_CPU_SUBDIR([m68k],[$1]);;
diff --git a/c/src/aclocal/version.m4 b/c/src/aclocal/version.m4
index 7c8b9df348..69e3eea10a 100644
--- a/c/src/aclocal/version.m4
+++ b/c/src/aclocal/version.m4
@@ -1,4 +1,4 @@
AC_DEFUN([RTEMS_VERSIONING],
-m4_define([_RTEMS_VERSION],[5.0.0]))
+m4_define([_RTEMS_VERSION],[6.0.0]))
-m4_define([_RTEMS_API],[5])
+m4_define([_RTEMS_API],[6])
diff --git a/c/src/lib/libbsp/arm/imx/Makefile.am b/c/src/lib/libbsp/arm/imx/Makefile.am
index 234995f406..f71508a077 100644
--- a/c/src/lib/libbsp/arm/imx/Makefile.am
+++ b/c/src/lib/libbsp/arm/imx/Makefile.am
@@ -64,6 +64,9 @@ librtemsbsp_a_SOURCES += ../../../../../../bsps/arm/shared/clock/clock-generic-t
librtemsbsp_a_SOURCES += ../../../../../../bsps/arm/shared/cache/cache-cp15.c
librtemsbsp_a_SOURCES += ../../../../../../bsps/arm/shared/cache/cache-v7ar-disable-data.S
+# GPIO
+librtemsbsp_a_SOURCES += ../../../../../../bsps/arm/imx/gpio/imx-gpio.c
+
# I2C
librtemsbsp_a_SOURCES += ../../../../../../bsps/arm/imx/i2c/imx-i2c.c
diff --git a/c/src/lib/libbsp/epiphany/Makefile.am b/c/src/lib/libbsp/epiphany/Makefile.am
deleted file mode 100644
index c024c4d01c..0000000000
--- a/c/src/lib/libbsp/epiphany/Makefile.am
+++ /dev/null
@@ -1,7 +0,0 @@
-ACLOCAL_AMFLAGS = -I ../../../aclocal
-## Descend into the @RTEMS_BSP_FAMILY@ directory
-## Currently, the shared directory is not explicitly
-## added but it is present in the source tree.
-_SUBDIRS = @RTEMS_BSP_FAMILY@
-include $(top_srcdir)/../../../automake/subdirs.am
-include $(srcdir)/../../../../../bsps/epiphany/headers.am
diff --git a/c/src/lib/libbsp/epiphany/acinclude.m4 b/c/src/lib/libbsp/epiphany/acinclude.m4
deleted file mode 100644
index 0fe1e2e79d..0000000000
--- a/c/src/lib/libbsp/epiphany/acinclude.m4
+++ /dev/null
@@ -1,10 +0,0 @@
-# RTEMS_CHECK_BSPDIR(RTEMS_BSP_FAMILY)
-AC_DEFUN([RTEMS_CHECK_BSPDIR],
-[
- case "$1" in
- epiphany_sim )
- AC_CONFIG_SUBDIRS([epiphany_sim]);;
- *)
- AC_MSG_ERROR([Invalid BSP]);;
- esac
-])
diff --git a/c/src/lib/libbsp/epiphany/configure.ac b/c/src/lib/libbsp/epiphany/configure.ac
deleted file mode 100644
index 35b39b9bdd..0000000000
--- a/c/src/lib/libbsp/epiphany/configure.ac
+++ /dev/null
@@ -1,20 +0,0 @@
-# Process this file with autoconf to produce a configure script.
-
-AC_PREREQ([2.69])
-AC_INIT([rtems-c-src-lib-libbsp-epiphany],[_RTEMS_VERSION],[http://www.rtems.org/bugzilla])
-RTEMS_TOP(../../../../..)
-RTEMS_SOURCE_TOP
-RTEMS_BUILD_TOP
-
-RTEMS_CANONICAL_TARGET_CPU
-AM_INIT_AUTOMAKE([no-define foreign subdir-objects 1.12.2])
-AM_MAINTAINER_MODE
-
-RTEMS_ENV_RTEMSBSP
-RTEMS_PROJECT_ROOT
-
-RTEMS_CHECK_BSPDIR([$RTEMS_BSP_FAMILY])
-
-# Explicitly list all Makefiles here
-AC_CONFIG_FILES([Makefile])
-AC_OUTPUT
diff --git a/c/src/lib/libbsp/epiphany/epiphany_sim/Makefile.am b/c/src/lib/libbsp/epiphany/epiphany_sim/Makefile.am
deleted file mode 100644
index f4901fd764..0000000000
--- a/c/src/lib/libbsp/epiphany/epiphany_sim/Makefile.am
+++ /dev/null
@@ -1,66 +0,0 @@
-##
-#
-# @brief Makefile of LibBSP for the Epiphany simulator.
-#
-#
-ACLOCAL_AMFLAGS = -I ../../../../aclocal
-
-include $(top_srcdir)/../../../../automake/compile.am
-include $(top_srcdir)/../../bsp.am
-
-dist_project_lib_DATA = ../../../../../../bsps/epiphany/epiphany_sim/start/bsp_specs
-
-###############################################################################
-# Header #
-###############################################################################
-
-###############################################################################
-# Data #
-###############################################################################
-
-start.$(OBJEXT): ../../../../../../bsps/epiphany/epiphany_sim/start/start.S
- $(CPPASCOMPILE) -o $@ -c $<
-project_lib_DATA = start.$(OBJEXT)
-
-project_lib_DATA += linkcmds
-
-###############################################################################
-# LibBSP #
-###############################################################################
-
-project_lib_LIBRARIES = librtemsbsp.a
-
-# Startup
-librtemsbsp_a_SOURCES = ../../../../../../bsps/shared/start/bspreset-empty.c
-librtemsbsp_a_SOURCES += ../../../../../../bsps/shared/start/bspstart-empty.c
-
-# Shared
-librtemsbsp_a_SOURCES += ../../../../../../bsps/shared/dev/getentropy/getentropy-cpucounter.c
-librtemsbsp_a_SOURCES += ../../../../../../bsps/shared/start/bspfatal-default.c
-librtemsbsp_a_SOURCES += ../../../../../../bsps/shared/start/sbrk.c
-librtemsbsp_a_SOURCES += ../../../../../../bsps/shared/start/stackalloc.c
-librtemsbsp_a_SOURCES += ../../../../../../bsps/shared/start/bspgetworkarea-default.c
-
-# clock
-librtemsbsp_a_SOURCES += ../../../../../../bsps/shared/dev/clock/clock-simidle.c
-
-# Timer
-librtemsbsp_a_SOURCES += ../../../../../../bsps/epiphany/epiphany_sim/btimer/btimer.c
-
-# console
-librtemsbsp_a_SOURCES += ../../../../../../bsps/shared/dev/serial/console-polled.c
-
-# IRQ
-librtemsbsp_a_SOURCES += ../../../../../../bsps/shared/irq/irq-default-handler.c
-librtemsbsp_a_SOURCES += ../../../../../../bsps/epiphany/epiphany_sim/irq/irq.c
-
-# Cache
-librtemsbsp_a_SOURCES += ../../../../../../bsps/shared/cache/nocache.c
-
-# debugio
-librtemsbsp_a_SOURCES += ../../../../../../bsps/epiphany/epiphany_sim/console/console-io.c
-
-
-include $(srcdir)/../../../../../../bsps/shared/irq-sources.am
-include $(srcdir)/../../../../../../bsps/shared/shared-sources.am
-include $(srcdir)/../../../../../../bsps/epiphany/epiphany_sim/headers.am
diff --git a/c/src/lib/libbsp/epiphany/epiphany_sim/configure.ac b/c/src/lib/libbsp/epiphany/epiphany_sim/configure.ac
deleted file mode 100644
index 8d5f787133..0000000000
--- a/c/src/lib/libbsp/epiphany/epiphany_sim/configure.ac
+++ /dev/null
@@ -1,32 +0,0 @@
-##
-#
-# @file
-#
-# @brief Configure script of LibBSP for epiphany_sim BSP.
-#
-
-AC_PREREQ(2.69)
-AC_INIT([rtems-c-src-lib-libbsp-epiphany-sim],[_RTEMS_VERSION],[http://www.rtems.org/bugzilla])
-RTEMS_TOP(../../../../../..)
-RTEMS_SOURCE_TOP
-RTEMS_BUILD_TOP
-RTEMS_BSP_LINKCMDS
-
-RTEMS_CANONICAL_TARGET_CPU
-AM_INIT_AUTOMAKE([no-define nostdinc foreign 1.12.2])
-RTEMS_BSP_CONFIGURE
-
-RTEMS_BSPOPTS_SET([BSP_START_RESET_VECTOR],[*],[])
-RTEMS_BSPOPTS_HELP([BSP_START_RESET_VECTOR],[reset vector address for BSP
-start])
-
-RTEMS_BSPOPTS_SET([BSP_EPIPHANY_PERIPHCLK],[*],[100000000U])
-RTEMS_BSPOPTS_HELP([BSP_EPIPHANY_PERIPHCLK],[epiphany PERIPHCLK clock
-frequency in Hz])
-
-
-
-RTEMS_BSP_CLEANUP_OPTIONS
-
-AC_CONFIG_FILES([Makefile])
-AC_OUTPUT
diff --git a/c/src/lib/libbsp/i386/pc386/Makefile.am b/c/src/lib/libbsp/i386/pc386/Makefile.am
index 354ad0b23e..6f4f156a66 100644
--- a/c/src/lib/libbsp/i386/pc386/Makefile.am
+++ b/c/src/lib/libbsp/i386/pc386/Makefile.am
@@ -110,15 +110,15 @@ librtemsbsp_a_SOURCES += ../../../../../../bsps/i386/pc386/ata/idecfg.c
endif
if HAS_SMP
-librtemsbsp_a_SOURCES += ../../../../../../bsps/i386/pc386/start/getcpuid.c
librtemsbsp_a_SOURCES += ../../../../../../bsps/i386/pc386/start/smp-imps.c
+librtemsbsp_a_SOURCES += ../../../../../../bsps/i386/pc386/start/bspsmp.c
project_lib_DATA += appstart.$(OBJEXT)
-appcpustart.$(OBJEXT): ../../../../../../bsps/i386/pc386/start/start16.S
- $(CPPASCOMPILE) $(AM_CPPFLAGS) -DSMP_SECONDARY_CORE -o $@ -c $<
+appcpustart.$(OBJEXT): ../../../../../../bsps/i386/pc386/start/startAP.S
+ $(CPPASCOMPILE) $(AM_CPPFLAGS) -o $@ -c $<
appstart.$(OBJEXT): appcpustart.$(OBJEXT)
- $(LD) -r -N -T $(top_srcdir)/../../../../../../bsps/i386/pc386/start/linkcmds \
+ $(LD) -N \
-Ttext 0x70000 -e app_processor_start -nostdlib \
-o appstart_tmp.exe $<
$(OBJCOPY) -O binary appstart_tmp.exe appstart.bin
diff --git a/c/src/lib/libbsp/powerpc/gen5200/Makefile.am b/c/src/lib/libbsp/powerpc/gen5200/Makefile.am
index a71b99a25b..c754587a4f 100644
--- a/c/src/lib/libbsp/powerpc/gen5200/Makefile.am
+++ b/c/src/lib/libbsp/powerpc/gen5200/Makefile.am
@@ -18,9 +18,6 @@ rtems_crti.$(OBJEXT): ../../../../../../bsps/powerpc/shared/start/rtems_crti.S
project_lib_DATA += rtems_crti.$(OBJEXT)
project_lib_DATA += linkcmds
-dist_project_lib_DATA += ../../../../../../bsps/powerpc/gen5200/start/linkcmds.brs5l
-dist_project_lib_DATA += ../../../../../../bsps/powerpc/gen5200/start/linkcmds.brs6l
-dist_project_lib_DATA += ../../../../../../bsps/powerpc/gen5200/start/linkcmds.dp2
dist_project_lib_DATA += ../../../../../../bsps/powerpc/gen5200/start/linkcmds.gen5200_base
dist_project_lib_DATA += ../../../../../../bsps/powerpc/gen5200/start/linkcmds.icecube
dist_project_lib_DATA += ../../../../../../bsps/powerpc/gen5200/start/linkcmds.pm520_cr825
diff --git a/c/src/lib/libbsp/powerpc/mpc55xxevb/Makefile.am b/c/src/lib/libbsp/powerpc/mpc55xxevb/Makefile.am
index 15b99628d5..403f4a7745 100644
--- a/c/src/lib/libbsp/powerpc/mpc55xxevb/Makefile.am
+++ b/c/src/lib/libbsp/powerpc/mpc55xxevb/Makefile.am
@@ -22,18 +22,10 @@ project_lib_DATA += linkcmds
dist_project_lib_DATA += ../../../../../../bsps/powerpc/shared/start/linkcmds.base
dist_project_lib_DATA += ../../../../../../bsps/powerpc/mpc55xxevb/start/linkcmds.gwlcfm
dist_project_lib_DATA += ../../../../../../bsps/powerpc/mpc55xxevb/start/linkcmds.mpc5566evb
-dist_project_lib_DATA += ../../../../../../bsps/powerpc/mpc55xxevb/start/linkcmds.mpc5566evb_spe
dist_project_lib_DATA += ../../../../../../bsps/powerpc/mpc55xxevb/start/linkcmds.mpc55xx
-dist_project_lib_DATA += ../../../../../../bsps/powerpc/mpc55xxevb/start/linkcmds.mpc5643l_dpu
dist_project_lib_DATA += ../../../../../../bsps/powerpc/mpc55xxevb/start/linkcmds.mpc5643l_evb
dist_project_lib_DATA += ../../../../../../bsps/powerpc/mpc55xxevb/start/linkcmds.mpc5668g
-dist_project_lib_DATA += ../../../../../../bsps/powerpc/mpc55xxevb/start/linkcmds.mpc5674f_ecu508
-dist_project_lib_DATA += ../../../../../../bsps/powerpc/mpc55xxevb/start/linkcmds.mpc5674f_ecu508_app
-dist_project_lib_DATA += ../../../../../../bsps/powerpc/mpc55xxevb/start/linkcmds.mpc5674f_ecu508_boot
dist_project_lib_DATA += ../../../../../../bsps/powerpc/mpc55xxevb/start/linkcmds.mpc5674fevb
-dist_project_lib_DATA += ../../../../../../bsps/powerpc/mpc55xxevb/start/linkcmds.mpc5674fevb_spe
-dist_project_lib_DATA += ../../../../../../bsps/powerpc/mpc55xxevb/start/linkcmds.mpc5674f_rsm6
-dist_project_lib_DATA += ../../../../../../bsps/powerpc/mpc55xxevb/start/linkcmds.mpc5674f_rsm6_base
dist_project_lib_DATA += ../../../../../../bsps/powerpc/mpc55xxevb/start/linkcmds.phycore_mpc5554
project_lib_LIBRARIES = librtemsbsp.a
diff --git a/cpukit/Makefile.am b/cpukit/Makefile.am
index 51f38c84c7..e2bed4b844 100644
--- a/cpukit/Makefile.am
+++ b/cpukit/Makefile.am
@@ -165,6 +165,7 @@ librtemscpu_a_SOURCES += libcsupport/src/lchown.c
librtemscpu_a_SOURCES += libcsupport/src/libio.c
librtemscpu_a_SOURCES += libcsupport/src/libio_exit.c
librtemscpu_a_SOURCES += libcsupport/src/libio_init.c
+librtemscpu_a_SOURCES += libcsupport/src/libiozeroiops.c
librtemscpu_a_SOURCES += libcsupport/src/link.c
librtemscpu_a_SOURCES += libcsupport/src/lseek.c
librtemscpu_a_SOURCES += libcsupport/src/lstat.c
@@ -279,6 +280,7 @@ librtemscpu_a_SOURCES += libmisc/capture/capture.c
librtemscpu_a_SOURCES += libmisc/capture/capture-cli.c
librtemscpu_a_SOURCES += libmisc/capture/capture_support.c
librtemscpu_a_SOURCES += libmisc/capture/capture_user_extension.c
+librtemscpu_a_SOURCES += libmisc/capture/rtems-trace-buffer-default.c
librtemscpu_a_SOURCES += libmisc/capture/rtems-trace-buffer-vars.c
librtemscpu_a_SOURCES += libmisc/cpuuse/cpuinforeport.c
librtemscpu_a_SOURCES += libmisc/cpuuse/cpuusagedata.c
@@ -745,6 +747,7 @@ librtemscpu_a_SOURCES += rtems/src/regionreturnsegment.c
librtemscpu_a_SOURCES += rtems/src/rtemsbuildid.c
librtemscpu_a_SOURCES += rtems/src/rtemsbuildname.c
librtemscpu_a_SOURCES += rtems/src/rtemsmaxprio.c
+librtemscpu_a_SOURCES += rtems/src/rtemsnametoid.c
librtemscpu_a_SOURCES += rtems/src/rtemsobjectapimaximumclass.c
librtemscpu_a_SOURCES += rtems/src/rtemsobjectapiminimumclass.c
librtemscpu_a_SOURCES += rtems/src/rtemsobjectgetapiclassname.c
@@ -784,6 +787,7 @@ librtemscpu_a_SOURCES += rtems/src/statustext.c
librtemscpu_a_SOURCES += rtems/src/statustoerrno.c
librtemscpu_a_SOURCES += rtems/src/systemeventreceive.c
librtemscpu_a_SOURCES += rtems/src/systemeventsend.c
+librtemscpu_a_SOURCES += rtems/src/taskconstruct.c
librtemscpu_a_SOURCES += rtems/src/taskcreate.c
librtemscpu_a_SOURCES += rtems/src/taskdelete.c
librtemscpu_a_SOURCES += rtems/src/taskexit.c
@@ -930,6 +934,9 @@ librtemscpu_a_SOURCES += score/src/schedulercbssetparameters.c
librtemscpu_a_SOURCES += score/src/schedulercbsreleasejob.c
librtemscpu_a_SOURCES += score/src/schedulercbsunblock.c
librtemscpu_a_SOURCES += score/src/stackallocator.c
+librtemscpu_a_SOURCES += score/src/stackallocatorfree.c
+librtemscpu_a_SOURCES += score/src/stackallocatorfreenothing.c
+librtemscpu_a_SOURCES += score/src/stackallocatorinit.c
librtemscpu_a_SOURCES += score/src/pheapallocate.c
librtemscpu_a_SOURCES += score/src/pheapextend.c
librtemscpu_a_SOURCES += score/src/pheapfree.c
@@ -1591,19 +1598,6 @@ librtemscpu_a_SOURCES += score/cpu/no_cpu/cpucounterread.c
endif
-if CPU_EPIPHANY
-
-include $(srcdir)/score/cpu/epiphany/headers.am
-
-librtemscpu_a_SOURCES += score/cpu/epiphany/cpu.c
-librtemscpu_a_SOURCES += score/cpu/epiphany/epiphany-context-initialize.c
-librtemscpu_a_SOURCES += score/cpu/epiphany/epiphany-context-switch.S
-librtemscpu_a_SOURCES += score/cpu/epiphany/epiphany-exception-handler.S
-librtemscpu_a_SOURCES += score/cpu/epiphany/setjmp.S
-librtemscpu_a_SOURCES += score/cpu/no_cpu/cpucounterfrequency.c
-
-endif
-
if CPU_I386
include $(srcdir)/score/cpu/i386/headers.am
@@ -1868,12 +1862,16 @@ librtemstest_a_SOURCES += libtest/testbeginend.c
librtemstest_a_SOURCES += libtest/testbusy.c
librtemstest_a_SOURCES += libtest/testextension.c
librtemstest_a_SOURCES += libtest/testparallel.c
+librtemstest_a_SOURCES += libtest/testrun.c
librtemstest_a_SOURCES += libtest/testwrappers.c
librtemstest_a_SOURCES += libtest/t-test.c
+librtemstest_a_SOURCES += libtest/t-test-busy.c
+librtemstest_a_SOURCES += libtest/t-test-busy-tick.c
librtemstest_a_SOURCES += libtest/t-test-checks.c
librtemstest_a_SOURCES += libtest/t-test-checks-eno.c
librtemstest_a_SOURCES += libtest/t-test-checks-psx.c
librtemstest_a_SOURCES += libtest/t-test-hash-sha256.c
+librtemstest_a_SOURCES += libtest/t-test-interrupt.c
librtemstest_a_SOURCES += libtest/t-test-malloc.c
librtemstest_a_SOURCES += libtest/t-test-rtems.c
librtemstest_a_SOURCES += libtest/t-test-rtems-context.c
@@ -1881,7 +1879,9 @@ librtemstest_a_SOURCES += libtest/t-test-rtems-fds.c
librtemstest_a_SOURCES += libtest/t-test-rtems-heap.c
librtemstest_a_SOURCES += libtest/t-test-rtems-measure.c
librtemstest_a_SOURCES += libtest/t-test-rtems-objs.c
+librtemstest_a_SOURCES += libtest/t-test-rtems-posix-keys.c
librtemstest_a_SOURCES += libtest/t-test-time.c
+librtemstest_a_SOURCES += libtest/t-test-thread-switch.c
project_lib_LIBRARIES += libftpd.a
diff --git a/cpukit/aclocal/check-networking.m4 b/cpukit/aclocal/check-networking.m4
index 38bc844468..7f38875dc6 100644
--- a/cpukit/aclocal/check-networking.m4
+++ b/cpukit/aclocal/check-networking.m4
@@ -9,10 +9,6 @@ AC_CACHE_CHECK([whether CPU supports networking],
rtems_cv_HAS_NETWORKING,
[dnl
case "$host" in
- # do not have address space to hold BSD TCP/IP stack
- epiphany*)
- rtems_cv_HAS_NETWORKING="no"
- ;;
# Newer architecture ports that should only use new TCP/IP stack
x86_64*)
rtems_cv_HAS_NETWORKING="no"
diff --git a/cpukit/aclocal/version.m4 b/cpukit/aclocal/version.m4
index 7c8b9df348..69e3eea10a 100644
--- a/cpukit/aclocal/version.m4
+++ b/cpukit/aclocal/version.m4
@@ -1,4 +1,4 @@
AC_DEFUN([RTEMS_VERSIONING],
-m4_define([_RTEMS_VERSION],[5.0.0]))
+m4_define([_RTEMS_VERSION],[6.0.0]))
-m4_define([_RTEMS_API],[5])
+m4_define([_RTEMS_API],[6])
diff --git a/cpukit/configure.ac b/cpukit/configure.ac
index 34b94a047c..16213d977c 100644
--- a/cpukit/configure.ac
+++ b/cpukit/configure.ac
@@ -359,7 +359,6 @@ AC_MSG_RESULT([$HAVE_LIBDRVMGR])
AM_CONDITIONAL([CPU_ARM],[test $RTEMS_CPU = "arm"])
AM_CONDITIONAL([CPU_BFIN],[test $RTEMS_CPU = "bfin"])
-AM_CONDITIONAL([CPU_EPIPHANY],[test $RTEMS_CPU = "epiphany"])
AM_CONDITIONAL([CPU_I386],[test $RTEMS_CPU = "i386"])
AM_CONDITIONAL([CPU_LM32],[test $RTEMS_CPU = "lm32"])
AM_CONDITIONAL([CPU_M68K],[test $RTEMS_CPU = "m68k"])
diff --git a/cpukit/doxygen.h b/cpukit/doxygen.h
index ba75c80349..c159b2082d 100644
--- a/cpukit/doxygen.h
+++ b/cpukit/doxygen.h
@@ -1,10 +1,4 @@
/**
- * @defgroup RTEMSInternal Internal
- *
- * @brief RTEMS Implementation.
- */
-
-/**
* @defgroup RTEMSInternalClassic Classic
*
* @ingroup RTEMSInternal
@@ -13,12 +7,6 @@
*/
/**
- * @defgroup RTEMSAPI API
- *
- * @brief API
- */
-
-/**
* @defgroup RTEMSAPIIO IO
*
* @ingroup RTEMSAPI
@@ -43,12 +31,6 @@
*/
/**
- * @defgroup RTEMSDeviceDrivers Device Drivers
- *
- * @brief Device Drivers
- */
-
-/**
* @defgroup RTEMSLegacyBenchmarkDrivers Legacy Benchmark Drivers
*
* @ingroup RTEMSDeviceDrivers
diff --git a/cpukit/doxygen/appl-config.h b/cpukit/doxygen/appl-config.h
new file mode 100644
index 0000000000..d4895bb66a
--- /dev/null
+++ b/cpukit/doxygen/appl-config.h
@@ -0,0 +1,4260 @@
+/* SPDX-License-Identifier: BSD-2-Clause */
+
+/*
+ * Copyright (C) 2019, 2020 embedded brains GmbH (http://www.embedded-brains.de)
+ * Copyright (C) 2010 Gedare Bloom
+ * Copyright (C) 1988, 2008 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 was automatically generated. Do not edit it manually.
+ * Please have a look at
+ *
+ * https://docs.rtems.org/branches/master/eng/req/howto.html
+ *
+ * for information how to maintain and re-generate this file.
+ */
+
+/**
+ * @defgroup RTEMSApplConfig Application Configuration Options
+ *
+ * @ingroup RTEMSAPI
+ */
+
+/**
+ * @defgroup RTEMSApplConfigBlockDeviceCacheConfiguration \
+ * Block Device Cache Configuration
+ *
+ * @ingroup RTEMSApplConfig
+ *
+ * This section describes configuration options related to the Block Device
+ * Cache (bdbuf).
+ *
+ * @{
+ */
+
+/**
+ * @brief This configuration option is a boolean feature define.
+ *
+ * In case this configuration option is defined, then the Block Device Cache is
+ * initialized during system initialization.
+ *
+ * @par Default Configuration
+ * If this configuration option is undefined, then the described feature is not
+ * enabled.
+ *
+ * @par Notes
+ * Each option of the Block Device Cache (bdbuf) configuration can be
+ * explicitly set by the user with the configuration options below. The Block
+ * Device Cache is used for example by the RFS and DOSFS filesystems.
+ */
+#define CONFIGURE_APPLICATION_NEEDS_LIBBLOCK
+
+/**
+ * @brief This configuration option is an integer define.
+ *
+ * The value of this configuration option defines the maximum size of a buffer
+ * in bytes.
+ *
+ * @par Default Value
+ * The default value is 4096.
+ *
+ * @par Value Constraints
+ * @parblock
+ * The value of this configuration option shall satisfy all of the following
+ * constraints:
+ *
+ * * It shall be greater than or equal to 0.
+ *
+ * * It shall be an integral multiple of #CONFIGURE_BDBUF_BUFFER_MIN_SIZE.
+ * @endparblock
+ */
+#define CONFIGURE_BDBUF_BUFFER_MAX_SIZE
+
+/**
+ * @brief This configuration option is an integer define.
+ *
+ * The value of this configuration option defines the minimum size of a buffer
+ * in bytes.
+ *
+ * @par Default Value
+ * The default value is 512.
+ *
+ * @par Value Constraints
+ * The value of this configuration option shall be greater than or equal to 0
+ * and less than or equal to <a
+ * href="https://en.cppreference.com/w/c/types/integer">UINT32_MAX</a>.
+ */
+#define CONFIGURE_BDBUF_BUFFER_MIN_SIZE
+
+/**
+ * @brief This configuration option is an integer define.
+ *
+ * The value of this configuration option defines the size of the cache memory
+ * in bytes.
+ *
+ * @par Default Value
+ * The default value is 32768.
+ *
+ * @par Value Constraints
+ * The value of this configuration option shall be greater than or equal to 0
+ * and less than or equal to <a
+ * href="https://en.cppreference.com/w/c/types/limits">SIZE_MAX</a>.
+ */
+#define CONFIGURE_BDBUF_CACHE_MEMORY_SIZE
+
+/**
+ * @brief This configuration option is an integer define.
+ *
+ * The value of this configuration option defines the maximum blocks per
+ * read-ahead request.
+ *
+ * @par Default Value
+ * The default value is 0.
+ *
+ * @par Value Constraints
+ * The value of this configuration option shall be greater than or equal to 0
+ * and less than or equal to <a
+ * href="https://en.cppreference.com/w/c/types/integer">UINT32_MAX</a>.
+ *
+ * @par Notes
+ * A value of 0 disables the read-ahead task (default). The read-ahead task
+ * will issue speculative read transfers if a sequential access pattern is
+ * detected. This can improve the performance on some systems.
+ */
+#define CONFIGURE_BDBUF_MAX_READ_AHEAD_BLOCKS
+
+/**
+ * @brief This configuration option is an integer define.
+ *
+ * The value of this configuration option defines the maximum blocks per write
+ * request.
+ *
+ * @par Default Value
+ * The default value is 16.
+ *
+ * @par Value Constraints
+ * The value of this configuration option shall be greater than or equal to 0
+ * and less than or equal to <a
+ * href="https://en.cppreference.com/w/c/types/integer">UINT32_MAX</a>.
+ */
+#define CONFIGURE_BDBUF_MAX_WRITE_BLOCKS
+
+/**
+ * @brief This configuration option is an integer define.
+ *
+ * The value of this configuration option defines the read-ahead task priority.
+ *
+ * @par Default Value
+ * The default value is 15.
+ *
+ * @par Value Constraints
+ * The value of this configuration option shall be a valid Classic API task
+ * priority. The set of valid task priorities is scheduler-specific.
+ */
+#define CONFIGURE_BDBUF_READ_AHEAD_TASK_PRIORITY
+
+/**
+ * @brief This configuration option is an integer define.
+ *
+ * The value of this configuration option defines the task stack size of the
+ * Block Device Cache tasks in bytes.
+ *
+ * @par Default Value
+ * The default value is #RTEMS_MINIMUM_STACK_SIZE.
+ *
+ * @par Value Constraints
+ * @parblock
+ * The value of this configuration option shall satisfy all of the following
+ * constraints:
+ *
+ * * It shall be greater than or equal to #CONFIGURE_MINIMUM_TASK_STACK_SIZE.
+ *
+ * * It shall be less than or equal to a BSP-specific and application-specific
+ * value which depends on the size of the memory available to the
+ * application.
+ *
+ * * It shall be small enough so that the task stack space calculation carried
+ * out by ``<rtems/confdefs.h>`` does not overflow an integer of type <a
+ * href="https://en.cppreference.com/w/c/types/integer">uintptr_t</a>.
+ * @endparblock
+ */
+#define CONFIGURE_BDBUF_TASK_STACK_SIZE
+
+/**
+ * @brief This configuration option is an integer define.
+ *
+ * The value of this configuration option defines the swapout task maximum
+ * block hold time in milliseconds.
+ *
+ * @par Default Value
+ * The default value is 1000.
+ *
+ * @par Value Constraints
+ * The value of this configuration option shall be greater than or equal to 0
+ * and less than or equal to <a
+ * href="https://en.cppreference.com/w/c/types/integer">UINT32_MAX</a>.
+ */
+#define CONFIGURE_SWAPOUT_BLOCK_HOLD
+
+/**
+ * @brief This configuration option is an integer define.
+ *
+ * The value of this configuration option defines the swapout task swap period
+ * in milliseconds.
+ *
+ * @par Default Value
+ * The default value is 250.
+ *
+ * @par Value Constraints
+ * The value of this configuration option shall be greater than or equal to 0
+ * and less than or equal to <a
+ * href="https://en.cppreference.com/w/c/types/integer">UINT32_MAX</a>.
+ */
+#define CONFIGURE_SWAPOUT_SWAP_PERIOD
+
+/**
+ * @brief This configuration option is an integer define.
+ *
+ * The value of this configuration option defines the swapout task priority.
+ *
+ * @par Default Value
+ * The default value is 15.
+ *
+ * @par Value Constraints
+ * The value of this configuration option shall be a valid Classic API task
+ * priority. The set of valid task priorities is scheduler-specific.
+ */
+#define CONFIGURE_SWAPOUT_TASK_PRIORITY
+
+/**
+ * @brief This configuration option is an integer define.
+ *
+ * The value of this configuration option defines the swapout worker task
+ * count.
+ *
+ * @par Default Value
+ * The default value is 0.
+ *
+ * @par Value Constraints
+ * The value of this configuration option shall be greater than or equal to 0
+ * and less than or equal to <a
+ * href="https://en.cppreference.com/w/c/types/integer">UINT32_MAX</a>.
+ */
+#define CONFIGURE_SWAPOUT_WORKER_TASKS
+
+/**
+ * @brief This configuration option is an integer define.
+ *
+ * The value of this configuration option defines the swapout worker task
+ * priority.
+ *
+ * @par Default Value
+ * The default value is 15.
+ *
+ * @par Value Constraints
+ * The value of this configuration option shall be a valid Classic API task
+ * priority. The set of valid task priorities is scheduler-specific.
+ */
+#define CONFIGURE_SWAPOUT_WORKER_TASK_PRIORITY
+
+/** @} */
+
+/**
+ * @defgroup RTEMSApplConfigBSPRelatedConfigurationOptions \
+ * BSP Related Configuration Options
+ *
+ * @ingroup RTEMSApplConfig
+ *
+ * This section describes configuration options related to the BSP. Some
+ * configuration options may have a BSP-specific setting which is defined by
+ * ``<bsp.h>``. The BSP-specific settings can be disabled by the
+ * #CONFIGURE_DISABLE_BSP_SETTINGS configuration option.
+ *
+ * @{
+ */
+
+/**
+ * @brief This configuration option is an initializer define.
+ *
+ * If
+ *
+ * * this configuration option is defined by the BSP
+ *
+ * * and #CONFIGURE_DISABLE_BSP_SETTINGS is undefined,
+ *
+ * then the value of this configuration option defines the default value of
+ * #CONFIGURE_IDLE_TASK_BODY.
+ *
+ * @par Default Value
+ * The default value is BSP-specific.
+ *
+ * @par Value Constraints
+ * The value of this configuration option shall be defined to a valid function
+ * pointer of the type ``void *( *idle_body )( uintptr_t )``.
+ *
+ * @par Notes
+ * As it has knowledge of the specific CPU model, system controller logic, and
+ * peripheral buses, a BSP-specific IDLE task may be capable of turning
+ * components off to save power during extended periods of no task activity.
+ */
+#define BSP_IDLE_TASK_BODY
+
+/**
+ * @brief This configuration option is an integer define.
+ *
+ * If
+ *
+ * * this configuration option is defined by the BSP
+ *
+ * * and #CONFIGURE_DISABLE_BSP_SETTINGS is undefined,
+ *
+ * then the value of this configuration option defines the default value of
+ * #CONFIGURE_IDLE_TASK_STACK_SIZE.
+ *
+ * @par Default Value
+ * The default value is BSP-specific.
+ *
+ * @par Value Constraints
+ * @parblock
+ * The value of this configuration option shall satisfy all of the following
+ * constraints:
+ *
+ * * It shall be greater than or equal to a BSP-specific and
+ * application-specific minimum value.
+ *
+ * * It shall be small enough so that the IDLE task stack area calculation
+ * carried out by ``<rtems/confdefs.h>`` does not overflow an integer of type
+ * <a href="https://en.cppreference.com/w/c/types/size_t">size_t</a>.
+ * @endparblock
+ */
+#define BSP_IDLE_TASK_STACK_SIZE
+
+/**
+ * @brief This configuration option is an initializer define.
+ *
+ * If
+ *
+ * * this configuration option is defined by the BSP
+ *
+ * * and #CONFIGURE_DISABLE_BSP_SETTINGS is undefined,
+ *
+ * then the value of this configuration option is used to initialize the table
+ * of initial user extensions.
+ *
+ * @par Default Value
+ * The default value is BSP-specific.
+ *
+ * @par Value Constraints
+ * The value of this configuration option shall be a list of initializers for
+ * structures of type ::rtems_extensions_table.
+ *
+ * @par Notes
+ * The value of this configuration option is placed after the entries of all
+ * other initial user extensions.
+ */
+#define BSP_INITIAL_EXTENSION
+
+/**
+ * @brief This configuration option is an integer define.
+ *
+ * If
+ *
+ * * this configuration option is defined by the BSP
+ *
+ * * and #CONFIGURE_DISABLE_BSP_SETTINGS is undefined,
+ *
+ * then the value of this configuration option defines the default value of
+ * #CONFIGURE_INTERRUPT_STACK_SIZE.
+ *
+ * @par Default Value
+ * The default value is BSP-specific.
+ *
+ * @par Value Constraints
+ * @parblock
+ * The value of this configuration option shall satisfy all of the following
+ * constraints:
+ *
+ * * It shall be greater than or equal to a BSP-specific and
+ * application-specific minimum value.
+ *
+ * * It shall be small enough so that the interrupt stack area calculation
+ * carried out by ``<rtems/confdefs.h>`` does not overflow an integer of type
+ * <a href="https://en.cppreference.com/w/c/types/size_t">size_t</a>.
+ *
+ * * It shall be aligned according to #CPU_INTERRUPT_STACK_ALIGNMENT.
+ * @endparblock
+ */
+#define BSP_INTERRUPT_STACK_SIZE
+
+/**
+ * @brief This configuration option is an initializer define.
+ *
+ * If
+ *
+ * * this configuration option is defined by the BSP
+ *
+ * * and #CONFIGURE_DISABLE_BSP_SETTINGS is undefined,
+ *
+ * then the value of this configuration option is used to initialize the table
+ * of initial user extensions.
+ *
+ * @par Default Value
+ * The default value is BSP-specific.
+ *
+ * @par Value Constraints
+ * The value of this configuration option shall be a list of initializers for
+ * structures of type ::rtems_extensions_table.
+ *
+ * @par Notes
+ * The value of this configuration option is placed before the entries of all
+ * other initial user extensions (including
+ * #CONFIGURE_APPLICATION_PREREQUISITE_DRIVERS).
+ */
+#define CONFIGURE_BSP_PREREQUISITE_DRIVERS
+
+/**
+ * @brief This configuration option is a boolean feature define.
+ *
+ * In case this configuration option is defined, then the following BSP related
+ * configuration options are undefined:
+ *
+ * * #BSP_IDLE_TASK_BODY
+ *
+ * * #BSP_IDLE_TASK_STACK_SIZE
+ *
+ * * #BSP_INITIAL_EXTENSION
+ *
+ * * #BSP_INTERRUPT_STACK_SIZE
+ *
+ * * #CONFIGURE_BSP_PREREQUISITE_DRIVERS
+ *
+ * * #CONFIGURE_MALLOC_BSP_SUPPORTS_SBRK
+ *
+ * @par Default Configuration
+ * If this configuration option is undefined, then the described feature is not
+ * enabled.
+ */
+#define CONFIGURE_DISABLE_BSP_SETTINGS
+
+/**
+ * @brief This configuration option is a boolean feature define.
+ *
+ * If
+ *
+ * * this configuration option is defined by the BSP
+ *
+ * * and #CONFIGURE_DISABLE_BSP_SETTINGS is undefined,
+ *
+ * then not all memory is made available to the C Program Heap immediately at
+ * system initialization time. When malloc() or other standard memory
+ * allocation functions are unable to allocate memory, they will call the BSP
+ * supplied sbrk() function to obtain more memory.
+ *
+ * @par Default Configuration
+ * If this configuration option is undefined, then the described feature is not
+ * enabled.
+ *
+ * @par Notes
+ * This option should not be defined by the application. Only the BSP knows how
+ * it allocates memory to the C Program Heap.
+ */
+#define CONFIGURE_MALLOC_BSP_SUPPORTS_SBRK
+
+/** @} */
+
+/**
+ * @defgroup RTEMSApplConfigClassicAPIConfiguration Classic API Configuration
+ *
+ * @ingroup RTEMSApplConfig
+ *
+ * This section describes configuration options related to the Classic API.
+ *
+ * @{
+ */
+
+/**
+ * @brief This configuration option is an integer define.
+ *
+ * The value of this configuration option defines the maximum number of Classic
+ * API Barriers that can be concurrently active.
+ *
+ * @par Default Value
+ * The default value is 0.
+ *
+ * @par Value Constraints
+ * @parblock
+ * The value of this configuration option shall satisfy all of the following
+ * constraints:
+ *
+ * * It shall be greater than or equal to 0.
+ *
+ * * It shall be less than or equal to 65535.
+ *
+ * * It shall be less than or equal to a BSP-specific and application-specific
+ * value which depends on the size of the memory available to the
+ * application.
+ *
+ * * It may be defined through rtems_resource_unlimited() the enable unlimited
+ * objects for this object class, if the value passed to
+ * rtems_resource_unlimited() satisfies all other constraints of this
+ * configuration option.
+ * @endparblock
+ *
+ * @par Notes
+ * This object class can be configured in unlimited allocation mode, see <a
+ * href=https://docs.rtems.org/branches/master/c-user/config/intro.html#unlimited-objects>Unlimited
+ * Objects</a>.
+ */
+#define CONFIGURE_MAXIMUM_BARRIERS
+
+/**
+ * @brief This configuration option is an integer define.
+ *
+ * The value of this configuration option defines the maximum number of Classic
+ * API Message Queues that can be concurrently active.
+ *
+ * @par Default Value
+ * The default value is 0.
+ *
+ * @par Value Constraints
+ * @parblock
+ * The value of this configuration option shall satisfy all of the following
+ * constraints:
+ *
+ * * It shall be greater than or equal to 0.
+ *
+ * * It shall be less than or equal to 65535.
+ *
+ * * It shall be less than or equal to a BSP-specific and application-specific
+ * value which depends on the size of the memory available to the
+ * application.
+ *
+ * * It may be defined through rtems_resource_unlimited() the enable unlimited
+ * objects for this object class, if the value passed to
+ * rtems_resource_unlimited() satisfies all other constraints of this
+ * configuration option.
+ * @endparblock
+ *
+ * @par Notes
+ * This object class can be configured in unlimited allocation mode, see <a
+ * href=https://docs.rtems.org/branches/master/c-user/config/intro.html#unlimited-objects>Unlimited
+ * Objects</a>. You have to account for the memory used to store the messages
+ * of each message queue, see #CONFIGURE_MESSAGE_BUFFER_MEMORY.
+ */
+#define CONFIGURE_MAXIMUM_MESSAGE_QUEUES
+
+/**
+ * @brief This configuration option is an integer define.
+ *
+ * The value of this configuration option defines the maximum number of Classic
+ * API Partitions that can be concurrently active.
+ *
+ * @par Default Value
+ * The default value is 0.
+ *
+ * @par Value Constraints
+ * @parblock
+ * The value of this configuration option shall satisfy all of the following
+ * constraints:
+ *
+ * * It shall be greater than or equal to 0.
+ *
+ * * It shall be less than or equal to 65535.
+ *
+ * * It shall be less than or equal to a BSP-specific and application-specific
+ * value which depends on the size of the memory available to the
+ * application.
+ *
+ * * It may be defined through rtems_resource_unlimited() the enable unlimited
+ * objects for this object class, if the value passed to
+ * rtems_resource_unlimited() satisfies all other constraints of this
+ * configuration option.
+ * @endparblock
+ *
+ * @par Notes
+ * This object class can be configured in unlimited allocation mode, see <a
+ * href=https://docs.rtems.org/branches/master/c-user/config/intro.html#unlimited-objects>Unlimited
+ * Objects</a>.
+ */
+#define CONFIGURE_MAXIMUM_PARTITIONS
+
+/**
+ * @brief This configuration option is an integer define.
+ *
+ * The value of this configuration option defines the maximum number of Classic
+ * API Periods that can be concurrently active.
+ *
+ * @par Default Value
+ * The default value is 0.
+ *
+ * @par Value Constraints
+ * @parblock
+ * The value of this configuration option shall satisfy all of the following
+ * constraints:
+ *
+ * * It shall be greater than or equal to 0.
+ *
+ * * It shall be less than or equal to 65535.
+ *
+ * * It shall be less than or equal to a BSP-specific and application-specific
+ * value which depends on the size of the memory available to the
+ * application.
+ *
+ * * It may be defined through rtems_resource_unlimited() the enable unlimited
+ * objects for this object class, if the value passed to
+ * rtems_resource_unlimited() satisfies all other constraints of this
+ * configuration option.
+ * @endparblock
+ *
+ * @par Notes
+ * This object class can be configured in unlimited allocation mode, see <a
+ * href=https://docs.rtems.org/branches/master/c-user/config/intro.html#unlimited-objects>Unlimited
+ * Objects</a>.
+ */
+#define CONFIGURE_MAXIMUM_PERIODS
+
+/**
+ * @brief This configuration option is an integer define.
+ *
+ * The value of this configuration option defines the maximum number of Classic
+ * API Ports that can be concurrently active.
+ *
+ * @par Default Value
+ * The default value is 0.
+ *
+ * @par Value Constraints
+ * @parblock
+ * The value of this configuration option shall satisfy all of the following
+ * constraints:
+ *
+ * * It shall be greater than or equal to 0.
+ *
+ * * It shall be less than or equal to 65535.
+ *
+ * * It shall be less than or equal to a BSP-specific and application-specific
+ * value which depends on the size of the memory available to the
+ * application.
+ *
+ * * It may be defined through rtems_resource_unlimited() the enable unlimited
+ * objects for this object class, if the value passed to
+ * rtems_resource_unlimited() satisfies all other constraints of this
+ * configuration option.
+ * @endparblock
+ *
+ * @par Notes
+ * This object class can be configured in unlimited allocation mode, see <a
+ * href=https://docs.rtems.org/branches/master/c-user/config/intro.html#unlimited-objects>Unlimited
+ * Objects</a>.
+ */
+#define CONFIGURE_MAXIMUM_PORTS
+
+/**
+ * @brief This configuration option is an integer define.
+ *
+ * The value of this configuration option defines the maximum number of Classic
+ * API Regions that can be concurrently active.
+ *
+ * @par Default Value
+ * The default value is 0.
+ *
+ * @par Value Constraints
+ * @parblock
+ * The value of this configuration option shall satisfy all of the following
+ * constraints:
+ *
+ * * It shall be greater than or equal to 0.
+ *
+ * * It shall be less than or equal to 65535.
+ *
+ * * It shall be less than or equal to a BSP-specific and application-specific
+ * value which depends on the size of the memory available to the
+ * application.
+ *
+ * * It may be defined through rtems_resource_unlimited() the enable unlimited
+ * objects for this object class, if the value passed to
+ * rtems_resource_unlimited() satisfies all other constraints of this
+ * configuration option.
+ * @endparblock
+ *
+ * @par Notes
+ * This object class can be configured in unlimited allocation mode, see <a
+ * href=https://docs.rtems.org/branches/master/c-user/config/intro.html#unlimited-objects>Unlimited
+ * Objects</a>.
+ */
+#define CONFIGURE_MAXIMUM_REGIONS
+
+/**
+ * @brief This configuration option is an integer define.
+ *
+ * The value of this configuration option defines the maximum number of Classic
+ * API Semaphore that can be concurrently active.
+ *
+ * @par Default Value
+ * The default value is 0.
+ *
+ * @par Value Constraints
+ * @parblock
+ * The value of this configuration option shall satisfy all of the following
+ * constraints:
+ *
+ * * It shall be greater than or equal to 0.
+ *
+ * * It shall be less than or equal to 65535.
+ *
+ * * It shall be less than or equal to a BSP-specific and application-specific
+ * value which depends on the size of the memory available to the
+ * application.
+ *
+ * * It may be defined through rtems_resource_unlimited() the enable unlimited
+ * objects for this object class, if the value passed to
+ * rtems_resource_unlimited() satisfies all other constraints of this
+ * configuration option.
+ * @endparblock
+ *
+ * @par Notes
+ * @parblock
+ * This object class can be configured in unlimited allocation mode, see <a
+ * href=https://docs.rtems.org/branches/master/c-user/config/intro.html#unlimited-objects>Unlimited
+ * Objects</a>.
+ *
+ * In SMP configurations, the size of a Semaphore Control Block depends on the
+ * scheduler count (see <a
+ * href=https://docs.rtems.org/branches/master/c-user/config/scheduler-clustered.html#configuration-step-3-scheduler-table>Configuration
+ * Step 3 - Scheduler Table</a>). The semaphores using the <a
+ * href=https://docs.rtems.org/branches/master/c-user/key_concepts.html#multiprocessor-resource-sharing-protocol-mrsp>Multiprocessor
+ * Resource Sharing Protocol (MrsP)</a> need a ceiling priority per scheduler.
+ * @endparblock
+ */
+#define CONFIGURE_MAXIMUM_SEMAPHORES
+
+/**
+ * @brief This configuration option is an integer define.
+ *
+ * The value of this configuration option defines the maximum number of Classic
+ * API Tasks that can be concurrently active.
+ *
+ * @par Default Value
+ * The default value is 0.
+ *
+ * @par Value Constraints
+ * @parblock
+ * The value of this configuration option shall satisfy all of the following
+ * constraints:
+ *
+ * * It shall be greater than or equal to 0.
+ *
+ * * It shall be less than or equal to 65535.
+ *
+ * * It shall be less than or equal to a BSP-specific and application-specific
+ * value which depends on the size of the memory available to the
+ * application.
+ *
+ * * It shall be small enough so that the task stack space calculation carried
+ * out by ``<rtems/confdefs.h>`` does not overflow an integer of type <a
+ * href="https://en.cppreference.com/w/c/types/integer">uintptr_t</a>.
+ *
+ * * It may be defined through rtems_resource_unlimited() the enable unlimited
+ * objects for this object class, if the value passed to
+ * rtems_resource_unlimited() satisfies all other constraints of this
+ * configuration option.
+ * @endparblock
+ *
+ * @par Notes
+ * @parblock
+ * This object class can be configured in unlimited allocation mode, see <a
+ * href=https://docs.rtems.org/branches/master/c-user/config/intro.html#unlimited-objects>Unlimited
+ * Objects</a>.
+ *
+ * The calculations for the required memory in the RTEMS Workspace for tasks
+ * assume that each task has a minimum stack size and has floating point
+ * support enabled. The configuration option #CONFIGURE_EXTRA_TASK_STACKS is
+ * used to specify task stack requirements *above* the minimum size required.
+ *
+ * The maximum number of POSIX threads is specified by
+ * #CONFIGURE_MAXIMUM_POSIX_THREADS.
+ *
+ * A future enhancement to ``<rtems/confdefs.h>`` could be to eliminate the
+ * assumption that all tasks have floating point enabled. This would require
+ * the addition of a new configuration parameter to specify the number of tasks
+ * which enable floating point support.
+ * @endparblock
+ */
+#define CONFIGURE_MAXIMUM_TASKS
+
+/**
+ * @brief This configuration option is an integer define.
+ *
+ * If the value of this configuration option is greater than zero, then it
+ * defines the maximum thread-local storage size, otherwise the thread-local
+ * storage size is defined by the linker depending on the thread-local storage
+ * objects used by the application in the statically-linked executable.
+ *
+ * @par Default Value
+ * The default value is 0.
+ *
+ * @par Value Constraints
+ * The value of this configuration option shall be greater than or equal to 0
+ * and less than or equal to <a
+ * href="https://en.cppreference.com/w/c/types/limits">SIZE_MAX</a>.
+ *
+ * @par Notes
+ * @parblock
+ * This configuration option can be used to reserve space for the dynamic
+ * linking of modules with thread-local storage objects.
+ *
+ * If the thread-local storage size defined by the thread-local storage objects
+ * used by the application in the statically-linked executable is greater than
+ * a non-zero value of this configuration option, then a fatal error will occur
+ * during system initialization.
+ *
+ * Use RTEMS_ALIGN_UP() and #RTEMS_TASK_STORAGE_ALIGNMENT to adjust the size to
+ * meet the minimum alignment requirement of a thread-local storage area.
+ *
+ * The actual thread-local storage size is determined when the application
+ * executable is linked. The ``rtems-exeinfo`` command line tool included in
+ * the RTEMS Tools can be used to obtain the thread-local storage size and
+ * alignment of an application executable.
+ * @endparblock
+ */
+#define CONFIGURE_MAXIMUM_THREAD_LOCAL_STORAGE_SIZE
+
+/**
+ * @brief This configuration option is an integer define.
+ *
+ * The value of this configuration option defines the maximum number of Classic
+ * API Timers that can be concurrently active.
+ *
+ * @par Default Value
+ * The default value is 0.
+ *
+ * @par Value Constraints
+ * @parblock
+ * The value of this configuration option shall satisfy all of the following
+ * constraints:
+ *
+ * * It shall be greater than or equal to 0.
+ *
+ * * It shall be less than or equal to 65535.
+ *
+ * * It shall be less than or equal to a BSP-specific and application-specific
+ * value which depends on the size of the memory available to the
+ * application.
+ *
+ * * It may be defined through rtems_resource_unlimited() the enable unlimited
+ * objects for this object class, if the value passed to
+ * rtems_resource_unlimited() satisfies all other constraints of this
+ * configuration option.
+ * @endparblock
+ *
+ * @par Notes
+ * This object class can be configured in unlimited allocation mode, see <a
+ * href=https://docs.rtems.org/branches/master/c-user/config/intro.html#unlimited-objects>Unlimited
+ * Objects</a>.
+ */
+#define CONFIGURE_MAXIMUM_TIMERS
+
+/**
+ * @brief This configuration option is an integer define.
+ *
+ * The value of this configuration option defines the maximum number of Classic
+ * API User Extensions that can be concurrently active.
+ *
+ * @par Default Value
+ * The default value is 0.
+ *
+ * @par Value Constraints
+ * @parblock
+ * The value of this configuration option shall satisfy all of the following
+ * constraints:
+ *
+ * * It shall be greater than or equal to 0.
+ *
+ * * It shall be less than or equal to 65535.
+ *
+ * * It shall be less than or equal to a BSP-specific and application-specific
+ * value which depends on the size of the memory available to the
+ * application.
+ * @endparblock
+ *
+ * @par Notes
+ * This object class cannot be configured in unlimited allocation mode.
+ */
+#define CONFIGURE_MAXIMUM_USER_EXTENSIONS
+
+/**
+ * @brief This configuration option is an integer define.
+ *
+ * The value of this configuration option defines the minimum count of Classic
+ * API Tasks which are constructed by rtems_task_construct().
+ *
+ * @par Default Value
+ * The default value is 0.
+ *
+ * @par Value Constraints
+ * The value of this configuration option shall be greater than or equal to 0
+ * and less than or equal to #CONFIGURE_MAXIMUM_TASKS.
+ *
+ * @par Notes
+ * By default, the calculation for the required memory in the RTEMS Workspace
+ * for tasks assumes that all Classic API Tasks are created by
+ * rtems_task_create(). This configuration option can be used to reduce the
+ * required memory for the system-provided task storage areas since tasks
+ * constructed by rtems_task_construct() use a user-provided task storage area.
+ */
+#define CONFIGURE_MINIMUM_TASKS_WITH_USER_PROVIDED_STORAGE
+
+/** @} */
+
+/**
+ * @defgroup RTEMSApplConfigClassicAPIInitializationTaskConfiguration \
+ * Classic API Initialization Task Configuration
+ *
+ * @ingroup RTEMSApplConfig
+ *
+ * This section describes configuration options related to the Classic API
+ * initialization task.
+ *
+ * @{
+ */
+
+/**
+ * @brief This configuration option is an integer define.
+ *
+ * The value of this configuration option defines task argument of the Classic
+ * API initialization task.
+ *
+ * @par Default Value
+ * The default value is 0.
+ *
+ * @par Value Constraints
+ * The value of this configuration option shall be a valid integer of type
+ * ::rtems_task_argument.
+ */
+#define CONFIGURE_INIT_TASK_ARGUMENTS
+
+/**
+ * @brief This configuration option is an integer define.
+ *
+ * The value of this configuration option defines the task attributes of the
+ * Classic API initialization task.
+ *
+ * @par Default Value
+ * The default value is #RTEMS_DEFAULT_ATTRIBUTES.
+ *
+ * @par Value Constraints
+ * The value of this configuration option shall be a valid task attribute set.
+ */
+#define CONFIGURE_INIT_TASK_ATTRIBUTES
+
+/**
+ * @brief This configuration option is an initializer define.
+ *
+ * The value of this configuration option initializes the entry point of the
+ * Classic API initialization task.
+ *
+ * @par Default Value
+ * The default value is ``Init``.
+ *
+ * @par Value Constraints
+ * The value of this configuration option shall be defined to a valid function
+ * pointer of the type ``void ( *entry_point )( rtems_task_argument )``.
+ *
+ * @par Notes
+ * The application shall provide the function referenced by this configuration
+ * option.
+ */
+#define CONFIGURE_INIT_TASK_ENTRY_POINT
+
+/**
+ * @brief This configuration option is an integer define.
+ *
+ * The value of this configuration option defines the initial execution mode of
+ * the Classic API initialization task.
+ *
+ * @par Default Value
+ * In SMP configurations, the default value is #RTEMS_DEFAULT_MODES otherwise
+ * the default value is #RTEMS_NO_PREEMPT.
+ *
+ * @par Value Constraints
+ * The value of this configuration option shall be a valid task mode set.
+ */
+#define CONFIGURE_INIT_TASK_INITIAL_MODES
+
+/**
+ * @brief This configuration option is an integer define.
+ *
+ * The value of this configuration option defines the name of the Classic API
+ * initialization task.
+ *
+ * @par Default Value
+ * The default value is ``rtems_build_name( 'U', 'I', '1', ' ' )``.
+ *
+ * @par Value Constraints
+ * The value of this configuration option shall be a valid integer of type
+ * ::rtems_name.
+ *
+ * @par Notes
+ * Use rtems_build_name() to define the task name.
+ */
+#define CONFIGURE_INIT_TASK_NAME
+
+/**
+ * @brief This configuration option is an integer define.
+ *
+ * The value of this configuration option defines the initial priority of the
+ * Classic API initialization task.
+ *
+ * @par Default Value
+ * The default value is 1.
+ *
+ * @par Value Constraints
+ * The value of this configuration option shall be a valid Classic API task
+ * priority. The set of valid task priorities is scheduler-specific.
+ */
+#define CONFIGURE_INIT_TASK_PRIORITY
+
+/**
+ * @brief This configuration option is an integer define.
+ *
+ * The value of this configuration option defines the task stack size of the
+ * Classic API initialization task.
+ *
+ * @par Default Value
+ * The default value is #CONFIGURE_MINIMUM_TASK_STACK_SIZE.
+ *
+ * @par Value Constraints
+ * @parblock
+ * The value of this configuration option shall satisfy all of the following
+ * constraints:
+ *
+ * * It shall be greater than or equal to #CONFIGURE_MINIMUM_TASK_STACK_SIZE.
+ *
+ * * It shall be small enough so that the task stack space calculation carried
+ * out by ``<rtems/confdefs.h>`` does not overflow an integer of type <a
+ * href="https://en.cppreference.com/w/c/types/integer">uintptr_t</a>.
+ * @endparblock
+ */
+#define CONFIGURE_INIT_TASK_STACK_SIZE
+
+/**
+ * @brief This configuration option is a boolean feature define.
+ *
+ * In case this configuration option is defined, then exactly one Classic API
+ * initialization task is configured.
+ *
+ * @par Default Configuration
+ * If this configuration option is undefined, then the described feature is not
+ * enabled.
+ *
+ * @par Notes
+ * @parblock
+ * The application shall define exactly one of the following configuration
+ * options
+ *
+ * * ``CONFIGURE_RTEMS_INIT_TASKS_TABLE``,
+ *
+ * * #CONFIGURE_POSIX_INIT_THREAD_TABLE, or
+ *
+ * * #CONFIGURE_IDLE_TASK_INITIALIZES_APPLICATION
+ *
+ * otherwise a compile time error in the configuration file will occur.
+ * @endparblock
+ */
+#define CONFIGURE_RTEMS_INIT_TASKS_TABLE
+
+/** @} */
+
+/**
+ * @defgroup RTEMSApplConfigDeviceDriverConfiguration \
+ * Device Driver Configuration
+ *
+ * @ingroup RTEMSApplConfig
+ *
+ * This section describes configuration options related to the device drivers.
+ * Note that network device drivers are not covered by the following options.
+ *
+ * @{
+ */
+
+/**
+ * @brief This configuration option is a boolean feature define.
+ *
+ * In case this configuration option is defined, then **no** Clock Driver is
+ * initialized during system initialization.
+ *
+ * @par Default Configuration
+ * If this configuration option is undefined, then a Clock Driver may be
+ * initialized during system initialization.
+ *
+ * @par Notes
+ * @parblock
+ * This configuration parameter is intended to prevent the common user error of
+ * using the Hello World example as the baseline for an application and leaving
+ * out a clock tick source.
+ *
+ * The application shall define exactly one of the following configuration
+ * options
+ *
+ * * #CONFIGURE_APPLICATION_NEEDS_CLOCK_DRIVER,
+ *
+ * * ``CONFIGURE_APPLICATION_DOES_NOT_NEED_CLOCK_DRIVER``, or
+ *
+ * * #CONFIGURE_APPLICATION_NEEDS_TIMER_DRIVER,
+ *
+ * otherwise a compile time error in the configuration file will occur.
+ * @endparblock
+ */
+#define CONFIGURE_APPLICATION_DOES_NOT_NEED_CLOCK_DRIVER
+
+/**
+ * @brief This configuration option is an initializer define.
+ *
+ * The value of this configuration option is used to initialize the Device
+ * Driver Table.
+ *
+ * @par Default Value
+ * The default value is the empty list.
+ *
+ * @par Value Constraints
+ * The value of this configuration option shall be a list of initializers for
+ * structures of type ::rtems_driver_address_table.
+ *
+ * @par Notes
+ * @parblock
+ * The value of this configuration option is placed after the entries of other
+ * device driver configuration options.
+ *
+ * See #CONFIGURE_APPLICATION_PREREQUISITE_DRIVERS for an alternative placement
+ * of application device driver initializers.
+ * @endparblock
+ */
+#define CONFIGURE_APPLICATION_EXTRA_DRIVERS
+
+/**
+ * @brief This configuration option is a boolean feature define.
+ *
+ * In case this configuration option is defined, then the ATA Driver is
+ * initialized during system initialization.
+ *
+ * @par Default Configuration
+ * If this configuration option is undefined, then the described feature is not
+ * enabled.
+ *
+ * @par Notes
+ * @parblock
+ * Most BSPs do not include support for an ATA Driver.
+ *
+ * If this option is defined and the BSP does not have this device driver, then
+ * the user will get a link time error for an undefined symbol.
+ * @endparblock
+ */
+#define CONFIGURE_APPLICATION_NEEDS_ATA_DRIVER
+
+/**
+ * @brief This configuration option is a boolean feature define.
+ *
+ * In case this configuration option is defined, then the Clock Driver is
+ * initialized during system initialization.
+ *
+ * @par Default Configuration
+ * If this configuration option is undefined, then the described feature is not
+ * enabled.
+ *
+ * @par Notes
+ * @parblock
+ * The Clock Driver is responsible for providing a regular interrupt which
+ * invokes a clock tick directive.
+ *
+ * The application shall define exactly one of the following configuration
+ * options
+ *
+ * * ``CONFIGURE_APPLICATION_NEEDS_CLOCK_DRIVER``,
+ *
+ * * #CONFIGURE_APPLICATION_DOES_NOT_NEED_CLOCK_DRIVER, or
+ *
+ * * #CONFIGURE_APPLICATION_NEEDS_TIMER_DRIVER,
+ *
+ * otherwise a compile time error in the configuration file will occur.
+ * @endparblock
+ */
+#define CONFIGURE_APPLICATION_NEEDS_CLOCK_DRIVER
+
+/**
+ * @brief This configuration option is a boolean feature define.
+ *
+ * In case this configuration option is defined, then the Console Driver is
+ * initialized during system initialization.
+ *
+ * @par Default Configuration
+ * If this configuration option is undefined, then the described feature is not
+ * enabled.
+ *
+ * @par Notes
+ * @parblock
+ * The Console Driver is responsible for providing the ``/dev/console`` device
+ * file. This device is used to initialize the standard input, output, and
+ * error file descriptors.
+ *
+ * BSPs should be constructed in a manner that allows printk() to work properly
+ * without the need for the Console Driver to be configured.
+ *
+ * The
+ *
+ * * ``CONFIGURE_APPLICATION_NEEDS_CONSOLE_DRIVER``,
+ *
+ * * #CONFIGURE_APPLICATION_NEEDS_SIMPLE_CONSOLE_DRIVER, and
+ *
+ * * #CONFIGURE_APPLICATION_NEEDS_SIMPLE_TASK_CONSOLE_DRIVER
+ *
+ * configuration options are mutually exclusive.
+ * @endparblock
+ */
+#define CONFIGURE_APPLICATION_NEEDS_CONSOLE_DRIVER
+
+/**
+ * @brief This configuration option is a boolean feature define.
+ *
+ * In case this configuration option is defined, then the Frame Buffer Driver
+ * is initialized during system initialization.
+ *
+ * @par Default Configuration
+ * If this configuration option is undefined, then the described feature is not
+ * enabled.
+ *
+ * @par Notes
+ * @parblock
+ * Most BSPs do not include support for a Frame Buffer Driver. This is because
+ * many boards do not include the required hardware.
+ *
+ * If this option is defined and the BSP does not have this device driver, then
+ * the user will get a link time error for an undefined symbol.
+ * @endparblock
+ */
+#define CONFIGURE_APPLICATION_NEEDS_FRAME_BUFFER_DRIVER
+
+/**
+ * @brief This configuration option is a boolean feature define.
+ *
+ * In case this configuration option is defined, then the IDE Driver is
+ * initialized during system initialization.
+ *
+ * @par Default Configuration
+ * If this configuration option is undefined, then the described feature is not
+ * enabled.
+ *
+ * @par Notes
+ * @parblock
+ * Most BSPs do not include support for an IDE Driver.
+ *
+ * If this option is defined and the BSP does not have this device driver, then
+ * the user will get a link time error for an undefined symbol.
+ * @endparblock
+ */
+#define CONFIGURE_APPLICATION_NEEDS_IDE_DRIVER
+
+/**
+ * @brief This configuration option is a boolean feature define.
+ *
+ * In case this configuration option is defined, then the ``/dev/null`` Driver
+ * is initialized during system initialization.
+ *
+ * @par Default Configuration
+ * If this configuration option is undefined, then the described feature is not
+ * enabled.
+ *
+ * @par Notes
+ * This device driver is supported by all BSPs.
+ */
+#define CONFIGURE_APPLICATION_NEEDS_NULL_DRIVER
+
+/**
+ * @brief This configuration option is a boolean feature define.
+ *
+ * In case this configuration option is defined, then the Real-Time Clock
+ * Driver is initialized during system initialization.
+ *
+ * @par Default Configuration
+ * If this configuration option is undefined, then the described feature is not
+ * enabled.
+ *
+ * @par Notes
+ * @parblock
+ * Most BSPs do not include support for a real-time clock (RTC). This is
+ * because many boards do not include the required hardware.
+ *
+ * If this is defined and the BSP does not have this device driver, then the
+ * user will get a link time error for an undefined symbol.
+ * @endparblock
+ */
+#define CONFIGURE_APPLICATION_NEEDS_RTC_DRIVER
+
+/**
+ * @brief This configuration option is a boolean feature define.
+ *
+ * In case this configuration option is defined, then the Simple Console Driver
+ * is initialized during system initialization.
+ *
+ * @par Default Configuration
+ * If this configuration option is undefined, then the described feature is not
+ * enabled.
+ *
+ * @par Notes
+ * @parblock
+ * This device driver is responsible for providing the ``/dev/console`` device
+ * file. This device is used to initialize the standard input, output, and
+ * error file descriptors.
+ *
+ * This device driver reads via rtems_putc().
+ *
+ * This device driver writes via getchark().
+ *
+ * The Termios framework is not used. There is no support to change device
+ * settings, e.g. baud, stop bits, parity, etc.
+ *
+ * The
+ *
+ * * #CONFIGURE_APPLICATION_NEEDS_CONSOLE_DRIVER,
+ *
+ * * ``CONFIGURE_APPLICATION_NEEDS_SIMPLE_CONSOLE_DRIVER``, and
+ *
+ * * #CONFIGURE_APPLICATION_NEEDS_SIMPLE_TASK_CONSOLE_DRIVER
+ *
+ * configuration options are mutually exclusive.
+ * @endparblock
+ */
+#define CONFIGURE_APPLICATION_NEEDS_SIMPLE_CONSOLE_DRIVER
+
+/**
+ * @brief This configuration option is a boolean feature define.
+ *
+ * In case this configuration option is defined, then the Simple Task Console
+ * Driver is initialized during system initialization.
+ *
+ * @par Default Configuration
+ * If this configuration option is undefined, then the described feature is not
+ * enabled.
+ *
+ * @par Notes
+ * @parblock
+ * This device driver is responsible for providing the ``/dev/console`` device
+ * file. This device is used to initialize the standard input, output, and
+ * error file descriptors.
+ *
+ * This device driver reads via rtems_putc().
+ *
+ * This device driver writes into a write buffer. The count of characters
+ * written into the write buffer is returned. It might be less than the
+ * requested count, in case the write buffer is full. The write is
+ * non-blocking and may be called from interrupt context. A dedicated task
+ * reads from the write buffer and outputs the characters via getchark(). This
+ * task runs with the least important priority. The write buffer size is 2047
+ * characters and it is not configurable.
+ *
+ * Use ``fsync( STDOUT_FILENO )`` or ``fdatasync( STDOUT_FILENO )`` to drain
+ * the write buffer.
+ *
+ * The Termios framework is not used. There is no support to change device
+ * settings, e.g. baud, stop bits, parity, etc.
+ *
+ * The
+ *
+ * * #CONFIGURE_APPLICATION_NEEDS_CONSOLE_DRIVER,
+ *
+ * * #CONFIGURE_APPLICATION_NEEDS_SIMPLE_CONSOLE_DRIVER, and
+ *
+ * * ``CONFIGURE_APPLICATION_NEEDS_SIMPLE_TASK_CONSOLE_DRIVER``
+ *
+ * configuration options are mutually exclusive.
+ * @endparblock
+ */
+#define CONFIGURE_APPLICATION_NEEDS_SIMPLE_TASK_CONSOLE_DRIVER
+
+/**
+ * @brief This configuration option is a boolean feature define.
+ *
+ * In case this configuration option is defined, then the Stub Driver is
+ * initialized during system initialization.
+ *
+ * @par Default Configuration
+ * If this configuration option is undefined, then the described feature is not
+ * enabled.
+ *
+ * @par Notes
+ * This device driver simply provides entry points that return successful and
+ * is primarily a test fixture. It is supported by all BSPs.
+ */
+#define CONFIGURE_APPLICATION_NEEDS_STUB_DRIVER
+
+/**
+ * @brief This configuration option is a boolean feature define.
+ *
+ * In case this configuration option is defined, then the Benchmark Timer
+ * Driver is initialized during system initialization.
+ *
+ * @par Default Configuration
+ * If this configuration option is undefined, then the described feature is not
+ * enabled.
+ *
+ * @par Notes
+ * @parblock
+ * The Benchmark Timer Driver is intended for the benchmark tests of the RTEMS
+ * Testsuite. Applications should not use this driver.
+ *
+ * The application shall define exactly one of the following configuration
+ * options
+ *
+ * * #CONFIGURE_APPLICATION_NEEDS_CLOCK_DRIVER,
+ *
+ * * #CONFIGURE_APPLICATION_DOES_NOT_NEED_CLOCK_DRIVER, or
+ *
+ * * ``CONFIGURE_APPLICATION_NEEDS_TIMER_DRIVER``,
+ *
+ * otherwise a compile time error will occur.
+ * @endparblock
+ */
+#define CONFIGURE_APPLICATION_NEEDS_TIMER_DRIVER
+
+/**
+ * @brief This configuration option is a boolean feature define.
+ *
+ * In case this configuration option is defined, then the Watchdog Driver is
+ * initialized during system initialization.
+ *
+ * @par Default Configuration
+ * If this configuration option is undefined, then the described feature is not
+ * enabled.
+ *
+ * @par Notes
+ * @parblock
+ * Most BSPs do not include support for a watchdog device driver. This is
+ * because many boards do not include the required hardware.
+ *
+ * If this is defined and the BSP does not have this device driver, then the
+ * user will get a link time error for an undefined symbol.
+ * @endparblock
+ */
+#define CONFIGURE_APPLICATION_NEEDS_WATCHDOG_DRIVER
+
+/**
+ * @brief This configuration option is a boolean feature define.
+ *
+ * In case this configuration option is defined, then the ``/dev/zero`` Driver
+ * is initialized during system initialization.
+ *
+ * @par Default Configuration
+ * If this configuration option is undefined, then the described feature is not
+ * enabled.
+ *
+ * @par Notes
+ * This device driver is supported by all BSPs.
+ */
+#define CONFIGURE_APPLICATION_NEEDS_ZERO_DRIVER
+
+/**
+ * @brief This configuration option is an initializer define.
+ *
+ * The value of this configuration option is used to initialize the Device
+ * Driver Table.
+ *
+ * @par Default Value
+ * The default value is the empty list.
+ *
+ * @par Value Constraints
+ * The value of this configuration option shall be a list of initializers for
+ * structures of type ::rtems_driver_address_table.
+ *
+ * @par Notes
+ * @parblock
+ * The value of this configuration option is placed after the entries defined
+ * by #CONFIGURE_BSP_PREREQUISITE_DRIVERS and before all other device driver
+ * configuration options.
+ *
+ * See #CONFIGURE_APPLICATION_EXTRA_DRIVERS for an alternative placement of
+ * application device driver initializers.
+ * @endparblock
+ */
+#define CONFIGURE_APPLICATION_PREREQUISITE_DRIVERS
+
+/**
+ * @brief This configuration option is an integer define.
+ *
+ * The value of this configuration option defines the ATA task priority.
+ *
+ * @par Default Value
+ * The default value is 140.
+ *
+ * @par Value Constraints
+ * The value of this configuration option shall be a valid Classic API task
+ * priority. The set of valid task priorities is scheduler-specific.
+ *
+ * @par Notes
+ * This configuration option is only evaluated if the configuration option
+ * #CONFIGURE_APPLICATION_NEEDS_ATA_DRIVER is defined.
+ */
+#define CONFIGURE_ATA_DRIVER_TASK_PRIORITY
+
+/**
+ * @brief This configuration option is an integer define.
+ *
+ * The value of this configuration option defines the number of device drivers.
+ *
+ * @par Default Value
+ * @parblock
+ * This is computed by default, and is set to the number of statically
+ * configured device drivers configured using the following configuration
+ * options:
+ *
+ * * #CONFIGURE_APPLICATION_EXTRA_DRIVERS
+ *
+ * * #CONFIGURE_APPLICATION_NEEDS_ATA_DRIVER
+ *
+ * * #CONFIGURE_APPLICATION_NEEDS_CLOCK_DRIVER
+ *
+ * * #CONFIGURE_APPLICATION_NEEDS_CONSOLE_DRIVER
+ *
+ * * #CONFIGURE_APPLICATION_NEEDS_FRAME_BUFFER_DRIVER
+ *
+ * * #CONFIGURE_APPLICATION_NEEDS_IDE_DRIVER
+ *
+ * * #CONFIGURE_APPLICATION_NEEDS_LIBBLOCK
+ *
+ * * #CONFIGURE_APPLICATION_NEEDS_NULL_DRIVER
+ *
+ * * #CONFIGURE_APPLICATION_NEEDS_RTC_DRIVER
+ *
+ * * #CONFIGURE_APPLICATION_NEEDS_SIMPLE_CONSOLE_DRIVER
+ *
+ * * #CONFIGURE_APPLICATION_NEEDS_SIMPLE_TASK_CONSOLE_DRIVER
+ *
+ * * #CONFIGURE_APPLICATION_NEEDS_STUB_DRIVER
+ *
+ * * #CONFIGURE_APPLICATION_NEEDS_TIMER_DRIVER
+ *
+ * * #CONFIGURE_APPLICATION_NEEDS_WATCHDOG_DRIVER
+ *
+ * * #CONFIGURE_APPLICATION_NEEDS_ZERO_DRIVER
+ *
+ * * #CONFIGURE_APPLICATION_PREREQUISITE_DRIVERS
+ *
+ * * #CONFIGURE_BSP_PREREQUISITE_DRIVERS
+ * @endparblock
+ *
+ * @par Value Constraints
+ * @parblock
+ * The value of this configuration option shall satisfy all of the following
+ * constraints:
+ *
+ * * It shall be less than or equal to <a
+ * href="https://en.cppreference.com/w/c/types/limits">SIZE_MAX</a>.
+ *
+ * * It shall be greater than or equal than the number of statically configured
+ * device drivers.
+ *
+ * * It shall be less than or equal to a BSP-specific and application-specific
+ * value which depends on the size of the memory available to the
+ * application.
+ * @endparblock
+ *
+ * @par Notes
+ * If the application will dynamically install device drivers, then the
+ * configuration option value shall be larger than the number of statically
+ * configured device drivers.
+ */
+#define CONFIGURE_MAXIMUM_DRIVERS
+
+/** @} */
+
+/**
+ * @defgroup RTEMSApplConfigEventRecordingConfiguration \
+ * Event Recording Configuration
+ *
+ * @ingroup RTEMSApplConfig
+ *
+ * This section describes configuration options related to the event recording.
+ *
+ * @{
+ */
+
+/**
+ * @brief This configuration option is a boolean feature define.
+ *
+ * In case
+ *
+ * * this configuration option is defined
+ *
+ * * and #CONFIGURE_RECORD_PER_PROCESSOR_ITEMS is properly defined,
+ *
+ * then the event record extensions are enabled.
+ *
+ * @par Default Configuration
+ * If this configuration option is undefined, then the described feature is not
+ * enabled.
+ *
+ * @par Notes
+ * The record extensions capture thread create, start, restart, delete, switch,
+ * begin, exitted and terminate events.
+ */
+#define CONFIGURE_RECORD_EXTENSIONS_ENABLED
+
+/**
+ * @brief This configuration option is a boolean feature define.
+ *
+ * In case
+ *
+ * * this configuration option is defined
+ *
+ * * and #CONFIGURE_RECORD_PER_PROCESSOR_ITEMS is properly defined,
+ *
+ * * and #CONFIGURE_RECORD_FATAL_DUMP_BASE64_ZLIB is undefined,
+ *
+ * then the event records are dumped in Base64 encoding in a fatal error
+ * extension (see <a
+ * href=https://docs.rtems.org/branches/master/c-user/fatal_error.html#announcing-a-fatal-error>Announcing
+ * a Fatal Error</a>).
+ *
+ * @par Default Configuration
+ * If this configuration option is undefined, then the described feature is not
+ * enabled.
+ *
+ * @par Notes
+ * This extension can be used to produce crash dumps.
+ */
+#define CONFIGURE_RECORD_FATAL_DUMP_BASE64
+
+/**
+ * @brief This configuration option is a boolean feature define.
+ *
+ * In case
+ *
+ * * this configuration option is defined
+ *
+ * * and #CONFIGURE_RECORD_PER_PROCESSOR_ITEMS is properly defined,
+ *
+ * then the event records are compressed by zlib and dumped in Base64 encoding
+ * in a fatal error extension (see <a
+ * href=https://docs.rtems.org/branches/master/c-user/fatal_error.html#announcing-a-fatal-error>Announcing
+ * a Fatal Error</a>).
+ *
+ * @par Default Configuration
+ * If this configuration option is undefined, then the described feature is not
+ * enabled.
+ *
+ * @par Notes
+ * The zlib compression needs about 512KiB of RAM. This extension can be used
+ * to produce crash dumps.
+ */
+#define CONFIGURE_RECORD_FATAL_DUMP_BASE64_ZLIB
+
+/**
+ * @brief This configuration option is an integer define.
+ *
+ * The value of this configuration option defines the event record item count
+ * per processor.
+ *
+ * @par Default Value
+ * The default value is 0.
+ *
+ * @par Value Constraints
+ * @parblock
+ * The value of this configuration option shall satisfy all of the following
+ * constraints:
+ *
+ * * It shall be greater than or equal to 16.
+ *
+ * * It shall be less than or equal to <a
+ * href="https://en.cppreference.com/w/c/types/limits">SIZE_MAX</a>.
+ *
+ * * It shall be a power of two.
+ *
+ * * It shall be less than or equal to a BSP-specific and application-specific
+ * value which depends on the size of the memory available to the
+ * application.
+ * @endparblock
+ *
+ * @par Notes
+ * The event record buffers are statically allocated for each configured
+ * processor (#CONFIGURE_MAXIMUM_PROCESSORS). If the value of this
+ * configuration option is zero, then nothing is allocated.
+ */
+#define CONFIGURE_RECORD_PER_PROCESSOR_ITEMS
+
+/** @} */
+
+/**
+ * @defgroup RTEMSApplConfigFilesystemConfiguration Filesystem Configuration
+ *
+ * @ingroup RTEMSApplConfig
+ *
+ * This section describes configuration options related to filesytems. By
+ * default, the In-Memory Filesystem (IMFS) is used as the base filesystem
+ * (also known as root filesystem). In order to save some memory for your
+ * application, you can disable the filesystem support with the
+ * #CONFIGURE_APPLICATION_DISABLE_FILESYSTEM configuration option.
+ * Alternatively, you can strip down the features of the base filesystem with
+ * the #CONFIGURE_USE_MINIIMFS_AS_BASE_FILESYSTEM and
+ * #CONFIGURE_USE_DEVFS_AS_BASE_FILESYSTEM configuration options. These three
+ * configuration options are mutually exclusive. They are intended for an
+ * advanced application configuration.
+ *
+ * Features of the IMFS can be disabled and enabled with the following
+ * configuration options:
+ *
+ * * #CONFIGURE_IMFS_DISABLE_CHMOD
+ *
+ * * #CONFIGURE_IMFS_DISABLE_CHOWN
+ *
+ * * #CONFIGURE_IMFS_DISABLE_LINK
+ *
+ * * #CONFIGURE_IMFS_DISABLE_MKNOD
+ *
+ * * #CONFIGURE_IMFS_DISABLE_MKNOD_FILE
+ *
+ * * #CONFIGURE_IMFS_DISABLE_MOUNT
+ *
+ * * #CONFIGURE_IMFS_DISABLE_READDIR
+ *
+ * * #CONFIGURE_IMFS_DISABLE_READLINK
+ *
+ * * #CONFIGURE_IMFS_DISABLE_RENAME
+ *
+ * * #CONFIGURE_IMFS_DISABLE_RMNOD
+ *
+ * * #CONFIGURE_IMFS_DISABLE_SYMLINK
+ *
+ * * #CONFIGURE_IMFS_DISABLE_UNMOUNT
+ *
+ * * #CONFIGURE_IMFS_DISABLE_UTIME
+ *
+ * * #CONFIGURE_IMFS_ENABLE_MKFIFO
+ *
+ * @{
+ */
+
+/**
+ * @brief This configuration option is a boolean feature define.
+ *
+ * In case this configuration option is defined, then **no base filesystem** is
+ * initialized during system initialization and **no filesystems** are
+ * configured.
+ *
+ * @par Default Configuration
+ * If this configuration option is undefined, then a base filesystem and the
+ * configured filesystems are initialized during system initialization.
+ *
+ * @par Notes
+ * Filesystems shall be initialized to support file descriptor based device
+ * drivers and basic input/output functions such as printf(). Filesystems can
+ * be disabled to reduce the memory footprint of an application.
+ */
+#define CONFIGURE_APPLICATION_DISABLE_FILESYSTEM
+
+/**
+ * @brief This configuration option is a boolean feature define.
+ *
+ * In case this configuration option is defined, then the following
+ * configuration options will be defined as well
+ *
+ * * #CONFIGURE_FILESYSTEM_DOSFS,
+ *
+ * * #CONFIGURE_FILESYSTEM_FTPFS,
+ *
+ * * #CONFIGURE_FILESYSTEM_IMFS,
+ *
+ * * #CONFIGURE_FILESYSTEM_JFFS2,
+ *
+ * * #CONFIGURE_FILESYSTEM_NFS,
+ *
+ * * #CONFIGURE_FILESYSTEM_RFS, and
+ *
+ * * #CONFIGURE_FILESYSTEM_TFTPFS.
+ *
+ * @par Default Configuration
+ * If this configuration option is undefined, then the described feature is not
+ * enabled.
+ */
+#define CONFIGURE_FILESYSTEM_ALL
+
+/**
+ * @brief This configuration option is a boolean feature define.
+ *
+ * In case this configuration option is defined, then the DOS (FAT) filesystem
+ * is registered, so that instances of this filesystem can be mounted by the
+ * application.
+ *
+ * @par Default Configuration
+ * If this configuration option is undefined, then the described feature is not
+ * enabled.
+ *
+ * @par Notes
+ * This filesystem requires a Block Device Cache configuration, see
+ * #CONFIGURE_APPLICATION_NEEDS_LIBBLOCK.
+ */
+#define CONFIGURE_FILESYSTEM_DOSFS
+
+/**
+ * @brief This configuration option is a boolean feature define.
+ *
+ * In case this configuration option is defined, then the FTP filesystem (FTP
+ * client) is registered, so that instances of this filesystem can be mounted
+ * by the application.
+ *
+ * @par Default Configuration
+ * If this configuration option is undefined, then the described feature is not
+ * enabled.
+ */
+#define CONFIGURE_FILESYSTEM_FTPFS
+
+/**
+ * @brief This configuration option is a boolean feature define.
+ *
+ * In case this configuration option is defined, then the In-Memory Filesystem
+ * (IMFS) is registered, so that instances of this filesystem can be mounted by
+ * the application.
+ *
+ * @par Default Configuration
+ * If this configuration option is undefined, then the described feature is not
+ * enabled.
+ *
+ * @par Notes
+ * Applications will rarely need this configuration option. This configuration
+ * option is intended for test programs. You do not need to define this
+ * configuration option for the base filesystem (also known as root
+ * filesystem).
+ */
+#define CONFIGURE_FILESYSTEM_IMFS
+
+/**
+ * @brief This configuration option is a boolean feature define.
+ *
+ * In case this configuration option is defined, then the JFFS2 filesystem is
+ * registered, so that instances of this filesystem can be mounted by the
+ * application.
+ *
+ * @par Default Configuration
+ * If this configuration option is undefined, then the described feature is not
+ * enabled.
+ */
+#define CONFIGURE_FILESYSTEM_JFFS2
+
+/**
+ * @brief This configuration option is a boolean feature define.
+ *
+ * In case this configuration option is defined, then the Network Filesystem
+ * (NFS) client is registered, so that instances of this filesystem can be
+ * mounted by the application.
+ *
+ * @par Default Configuration
+ * If this configuration option is undefined, then the described feature is not
+ * enabled.
+ */
+#define CONFIGURE_FILESYSTEM_NFS
+
+/**
+ * @brief This configuration option is a boolean feature define.
+ *
+ * In case this configuration option is defined, then the RTEMS Filesystem
+ * (RFS) is registered, so that instances of this filesystem can be mounted by
+ * the application.
+ *
+ * @par Default Configuration
+ * If this configuration option is undefined, then the described feature is not
+ * enabled.
+ *
+ * @par Notes
+ * This filesystem requires a Block Device Cache configuration, see
+ * #CONFIGURE_APPLICATION_NEEDS_LIBBLOCK.
+ */
+#define CONFIGURE_FILESYSTEM_RFS
+
+/**
+ * @brief This configuration option is a boolean feature define.
+ *
+ * In case this configuration option is defined, then the TFTP filesystem (TFTP
+ * client) is registered, so that instances of this filesystem can be mounted
+ * by the application.
+ *
+ * @par Default Configuration
+ * If this configuration option is undefined, then the described feature is not
+ * enabled.
+ */
+#define CONFIGURE_FILESYSTEM_TFTPFS
+
+/**
+ * @brief This configuration option is a boolean feature define.
+ *
+ * In case this configuration option is defined, then the root IMFS does not
+ * support changing the mode of files (no support for chmod()).
+ *
+ * @par Default Configuration
+ * If this configuration option is undefined, then the root IMFS supports
+ * changing the mode of files.
+ */
+#define CONFIGURE_IMFS_DISABLE_CHMOD
+
+/**
+ * @brief This configuration option is a boolean feature define.
+ *
+ * In case this configuration option is defined, then the root IMFS does not
+ * support changing the ownership of files (no support for chown()).
+ *
+ * @par Default Configuration
+ * If this configuration option is undefined, then the root IMFS supports
+ * changing the ownership of files.
+ */
+#define CONFIGURE_IMFS_DISABLE_CHOWN
+
+/**
+ * @brief This configuration option is a boolean feature define.
+ *
+ * In case this configuration option is defined, then the root IMFS does not
+ * support hard links (no support for link()).
+ *
+ * @par Default Configuration
+ * If this configuration option is undefined, then the root IMFS supports hard
+ * links.
+ */
+#define CONFIGURE_IMFS_DISABLE_LINK
+
+/**
+ * @brief This configuration option is a boolean feature define.
+ *
+ * In case this configuration option is defined, then the root IMFS does not
+ * support making files (no support for mknod()).
+ *
+ * @par Default Configuration
+ * If this configuration option is undefined, then the root IMFS supports
+ * making files.
+ */
+#define CONFIGURE_IMFS_DISABLE_MKNOD
+
+/**
+ * @brief This configuration option is a boolean feature define.
+ *
+ * In case this configuration option is defined, then the root IMFS does not
+ * support making device files.
+ *
+ * @par Default Configuration
+ * If this configuration option is undefined, then the root IMFS supports
+ * making device files.
+ */
+#define CONFIGURE_IMFS_DISABLE_MKNOD_DEVICE
+
+/**
+ * @brief This configuration option is a boolean feature define.
+ *
+ * In case this configuration option is defined, then the root IMFS does not
+ * support making regular files.
+ *
+ * @par Default Configuration
+ * If this configuration option is undefined, then the root IMFS supports
+ * making regular files.
+ */
+#define CONFIGURE_IMFS_DISABLE_MKNOD_FILE
+
+/**
+ * @brief This configuration option is a boolean feature define.
+ *
+ * In case this configuration option is defined, then the root IMFS does not
+ * support mounting other filesystems (no support for mount()).
+ *
+ * @par Default Configuration
+ * If this configuration option is undefined, then the root IMFS supports
+ * mounting other filesystems.
+ */
+#define CONFIGURE_IMFS_DISABLE_MOUNT
+
+/**
+ * @brief This configuration option is a boolean feature define.
+ *
+ * In case this configuration option is defined, then the root IMFS does not
+ * support reading directories (no support for readdir()). It is still
+ * possible to open files in a directory.
+ *
+ * @par Default Configuration
+ * If this configuration option is undefined, then the root IMFS supports
+ * reading directories.
+ */
+#define CONFIGURE_IMFS_DISABLE_READDIR
+
+/**
+ * @brief This configuration option is a boolean feature define.
+ *
+ * In case this configuration option is defined, then the root IMFS does not
+ * support reading symbolic links (no support for readlink()).
+ *
+ * @par Default Configuration
+ * If this configuration option is undefined, then the root IMFS supports
+ * reading symbolic links.
+ */
+#define CONFIGURE_IMFS_DISABLE_READLINK
+
+/**
+ * @brief This configuration option is a boolean feature define.
+ *
+ * In case this configuration option is defined, then the root IMFS does not
+ * support renaming files (no support for rename()).
+ *
+ * @par Default Configuration
+ * If this configuration option is undefined, then the root IMFS supports
+ * renaming files.
+ */
+#define CONFIGURE_IMFS_DISABLE_RENAME
+
+/**
+ * @brief This configuration option is a boolean feature define.
+ *
+ * In case this configuration option is defined, then the root IMFS does not
+ * support removing files (no support for rmnod()).
+ *
+ * @par Default Configuration
+ * If this configuration option is undefined, then the root IMFS supports
+ * removing files.
+ */
+#define CONFIGURE_IMFS_DISABLE_RMNOD
+
+/**
+ * @brief This configuration option is a boolean feature define.
+ *
+ * In case this configuration option is defined, then the root IMFS does not
+ * support creating symbolic links (no support for symlink()).
+ *
+ * @par Default Configuration
+ * If this configuration option is undefined, then the root IMFS supports
+ * creating symbolic links.
+ */
+#define CONFIGURE_IMFS_DISABLE_SYMLINK
+
+/**
+ * @brief This configuration option is a boolean feature define.
+ *
+ * In case this configuration option is defined, then the root IMFS does not
+ * support unmounting other filesystems (no support for unmount()).
+ *
+ * @par Default Configuration
+ * If this configuration option is undefined, then the root IMFS supports
+ * unmounting other filesystems.
+ */
+#define CONFIGURE_IMFS_DISABLE_UNMOUNT
+
+/**
+ * @brief This configuration option is a boolean feature define.
+ *
+ * In case this configuration option is defined, then the root IMFS does not
+ * support changing file times (no support for utime()).
+ *
+ * @par Default Configuration
+ * If this configuration option is undefined, then the root IMFS supports
+ * changing file times.
+ */
+#define CONFIGURE_IMFS_DISABLE_UTIME
+
+/**
+ * @brief This configuration option is a boolean feature define.
+ *
+ * In case this configuration option is defined, then the root IMFS supports
+ * making FIFOs.
+ *
+ * @par Default Configuration
+ * If this configuration option is undefined, then the root IMFS does not
+ * support making FIFOs (no support for mkfifo()).
+ */
+#define CONFIGURE_IMFS_ENABLE_MKFIFO
+
+/**
+ * @brief This configuration option is an integer define.
+ *
+ * The value of this configuration option defines the block size for in-memory
+ * files managed by the IMFS.
+ *
+ * @par Default Value
+ * The default value is 128.
+ *
+ * @par Value Constraints
+ * The value of this configuration option shall be an element of {16, 32, 64,
+ * 128, 256, 512}.
+ *
+ * @par Notes
+ * @parblock
+ * The configured block size has two impacts. The first is the average amount
+ * of unused memory in the last block of each file. For example, when the
+ * block size is 512, on average one-half of the last block of each file will
+ * remain unused and the memory is wasted. In contrast, when the block size is
+ * 16, the average unused memory per file is only 8 bytes. However, it requires
+ * more allocations for the same size file and thus more overhead per block for
+ * the dynamic memory management.
+ *
+ * Second, the block size has an impact on the maximum size file that can be
+ * stored in the IMFS. With smaller block size, the maximum file size is
+ * correspondingly smaller. The following shows the maximum file size possible
+ * based on the configured block size:
+ *
+ * * when the block size is 16 bytes, the maximum file size is 1,328 bytes.
+ *
+ * * when the block size is 32 bytes, the maximum file size is 18,656 bytes.
+ *
+ * * when the block size is 64 bytes, the maximum file size is 279,488 bytes.
+ *
+ * * when the block size is 128 bytes, the maximum file size is 4,329,344
+ * bytes.
+ *
+ * * when the block size is 256 bytes, the maximum file size is 68,173,568
+ * bytes.
+ *
+ * * when the block size is 512 bytes, the maximum file size is 1,082,195,456
+ * bytes.
+ * @endparblock
+ */
+#define CONFIGURE_IMFS_MEMFILE_BYTES_PER_BLOCK
+
+/**
+ * @brief This configuration option is a boolean feature define.
+ *
+ * In case this configuration option is defined, then an IMFS with a reduced
+ * feature set will be the base filesystem (also known as root filesystem).
+ *
+ * @par Default Configuration
+ * If this configuration option is undefined, then the described feature is not
+ * enabled.
+ *
+ * @par Notes
+ * @parblock
+ * In case this configuration option is defined, then the following
+ * configuration options will be defined as well
+ *
+ * * #CONFIGURE_IMFS_DISABLE_CHMOD,
+ *
+ * * #CONFIGURE_IMFS_DISABLE_CHOWN,
+ *
+ * * #CONFIGURE_IMFS_DISABLE_LINK,
+ *
+ * * #CONFIGURE_IMFS_DISABLE_MKNOD_FILE,
+ *
+ * * #CONFIGURE_IMFS_DISABLE_MOUNT,
+ *
+ * * #CONFIGURE_IMFS_DISABLE_READDIR,
+ *
+ * * #CONFIGURE_IMFS_DISABLE_READLINK,
+ *
+ * * #CONFIGURE_IMFS_DISABLE_RENAME,
+ *
+ * * #CONFIGURE_IMFS_DISABLE_RMNOD,
+ *
+ * * #CONFIGURE_IMFS_DISABLE_SYMLINK,
+ *
+ * * #CONFIGURE_IMFS_DISABLE_UTIME, and
+ *
+ * * #CONFIGURE_IMFS_DISABLE_UNMOUNT.
+ *
+ * In addition, a simplified path evaluation is enabled. It allows only a look
+ * up of absolute paths.
+ *
+ * This configuration of the IMFS is basically a device-only filesystem. It is
+ * comparable in functionality to the pseudo-filesystem name space provided
+ * before RTEMS release 4.5.0.
+ * @endparblock
+ */
+#define CONFIGURE_USE_DEVFS_AS_BASE_FILESYSTEM
+
+/**
+ * @brief This configuration option is a boolean feature define.
+ *
+ * In case this configuration option is defined, then an IMFS with a reduced
+ * feature set will be the base filesystem (also known as root filesystem).
+ *
+ * @par Default Configuration
+ * If this configuration option is undefined, then the described feature is not
+ * enabled.
+ *
+ * @par Notes
+ * @parblock
+ * In case this configuration option is defined, then the following
+ * configuration options will be defined as well
+ *
+ * * #CONFIGURE_IMFS_DISABLE_CHMOD,
+ *
+ * * #CONFIGURE_IMFS_DISABLE_CHOWN,
+ *
+ * * #CONFIGURE_IMFS_DISABLE_LINK,
+ *
+ * * #CONFIGURE_IMFS_DISABLE_READLINK,
+ *
+ * * #CONFIGURE_IMFS_DISABLE_RENAME,
+ *
+ * * #CONFIGURE_IMFS_DISABLE_SYMLINK,
+ *
+ * * #CONFIGURE_IMFS_DISABLE_UTIME, and
+ *
+ * * #CONFIGURE_IMFS_DISABLE_UNMOUNT.
+ * @endparblock
+ */
+#define CONFIGURE_USE_MINIIMFS_AS_BASE_FILESYSTEM
+
+/** @} */
+
+/**
+ * @defgroup RTEMSApplConfigGeneralSystemConfiguration \
+ * General System Configuration
+ *
+ * @ingroup RTEMSApplConfig
+ *
+ * This section describes general system configuration options.
+ *
+ * @{
+ */
+
+/**
+ * @brief This configuration option is a boolean feature define.
+ *
+ * In case this configuration option is defined, then the memory areas used for
+ * the RTEMS Workspace and the C Program Heap are dirtied with a ``0xCF`` byte
+ * pattern during system initialization.
+ *
+ * @par Default Configuration
+ * If this configuration option is undefined, then the described feature is not
+ * enabled.
+ *
+ * @par Notes
+ * @parblock
+ * Dirtying memory can add significantly to system initialization time. It may
+ * assist in finding code that incorrectly assumes the contents of free memory
+ * areas is cleared to zero during system initialization. In case
+ * #CONFIGURE_ZERO_WORKSPACE_AUTOMATICALLY is also defined, then the memory is
+ * first dirtied and then zeroed.
+ *
+ * See also #CONFIGURE_MALLOC_DIRTY.
+ * @endparblock
+ */
+#define CONFIGURE_DIRTY_MEMORY
+
+/**
+ * @brief This configuration option is a boolean feature define.
+ *
+ * In case this configuration option is defined, then the Newlib reentrancy
+ * support per thread is disabled and a global reentrancy structure is used.
+ *
+ * @par Default Configuration
+ * If this configuration option is undefined, then the described feature is not
+ * enabled.
+ *
+ * @par Notes
+ * You can enable this option to reduce the size of the :term:`TCB`. Use this
+ * option with care, since it can lead to race conditions and undefined system
+ * behaviour. For example, #errno is no longer a thread-local variable if this
+ * option is enabled.
+ */
+#define CONFIGURE_DISABLE_NEWLIB_REENTRANCY
+
+/**
+ * @brief This configuration option is an integer define.
+ *
+ * The value of this configuration option defines the RTEMS Workspace size in
+ * bytes.
+ *
+ * @par Default Value
+ * If this configuration option is undefined, then the RTEMS Workspace and task
+ * stack space size is calculated by ``<rtems/confdefs.h>`` based on the values
+ * configuration options.
+ *
+ * @par Value Constraints
+ * @parblock
+ * The value of this configuration option shall satisfy all of the following
+ * constraints:
+ *
+ * * It shall be greater than or equal to 0.
+ *
+ * * It shall be less than or equal to <a
+ * href="https://en.cppreference.com/w/c/types/integer">UINTPTR_MAX</a>.
+ *
+ * * It shall be less than or equal to a BSP-specific and application-specific
+ * value which depends on the size of the memory available to the
+ * application.
+ * @endparblock
+ *
+ * @par Notes
+ * This is an advanced configuration option. Use it only if you know exactly
+ * what you are doing.
+ */
+#define CONFIGURE_EXECUTIVE_RAM_SIZE
+
+/**
+ * @brief This configuration option is an integer define.
+ *
+ * The value of this configuration option defines the number of bytes the
+ * applications wishes to add to the task stack requirements calculated by
+ * ``<rtems/confdefs.h>``.
+ *
+ * @par Default Value
+ * The default value is 0.
+ *
+ * @par Value Constraints
+ * @parblock
+ * The value of this configuration option shall satisfy all of the following
+ * constraints:
+ *
+ * * It shall be greater than or equal to 0.
+ *
+ * * It shall be small enough so that the task stack space calculation carried
+ * out by ``<rtems/confdefs.h>`` does not overflow an integer of type <a
+ * href="https://en.cppreference.com/w/c/types/integer">uintptr_t</a>.
+ * @endparblock
+ *
+ * @par Notes
+ * This parameter is very important. If the application creates tasks with
+ * stacks larger then the minimum, then that memory is **not** accounted for by
+ * ``<rtems/confdefs.h>``.
+ */
+#define CONFIGURE_EXTRA_TASK_STACKS
+
+/**
+ * @brief This configuration option is an initializer define.
+ *
+ * The value of this configuration option is used to initialize the table of
+ * initial user extensions.
+ *
+ * @par Default Value
+ * The default value is the empty list.
+ *
+ * @par Value Constraints
+ * The value of this configuration option shall be a list of initializers for
+ * structures of type ::rtems_extensions_table.
+ *
+ * @par Notes
+ * The value of this configuration option is placed before the entries of
+ * #BSP_INITIAL_EXTENSION and after the entries of all other initial user
+ * extensions.
+ */
+#define CONFIGURE_INITIAL_EXTENSIONS
+
+/**
+ * @brief This configuration option is an integer define.
+ *
+ * The value of this configuration option defines the size of an interrupt
+ * stack in bytes.
+ *
+ * @par Default Value
+ * The default value is #BSP_INTERRUPT_STACK_SIZE in case it is defined,
+ * otherwise the default value is #CPU_STACK_MINIMUM_SIZE.
+ *
+ * @par Value Constraints
+ * @parblock
+ * The value of this configuration option shall satisfy all of the following
+ * constraints:
+ *
+ * * It shall be greater than or equal to a BSP-specific and
+ * application-specific minimum value.
+ *
+ * * It shall be small enough so that the interrupt stack area calculation
+ * carried out by ``<rtems/confdefs.h>`` does not overflow an integer of type
+ * <a href="https://en.cppreference.com/w/c/types/size_t">size_t</a>.
+ *
+ * * It shall be aligned according to #CPU_INTERRUPT_STACK_ALIGNMENT.
+ * @endparblock
+ *
+ * @par Notes
+ * @parblock
+ * There is one interrupt stack available for each configured processor
+ * (#CONFIGURE_MAXIMUM_PROCESSORS). The interrupt stack areas are statically
+ * allocated in a special linker section (``.rtemsstack.interrupt``). The
+ * placement of this linker section is BSP-specific.
+ *
+ * Some BSPs use the interrupt stack as the initialization stack which is used
+ * to perform the sequential system initialization before the multithreading is
+ * started.
+ *
+ * The interrupt stacks are covered by the stack checker, see
+ * #CONFIGURE_STACK_CHECKER_ENABLED. However, using a too small interrupt
+ * stack size may still result in undefined behaviour.
+ *
+ * In releases before RTEMS 5.1 the default value was
+ * #CONFIGURE_MINIMUM_TASK_STACK_SIZE instead of #CPU_STACK_MINIMUM_SIZE.
+ * @endparblock
+ */
+#define CONFIGURE_INTERRUPT_STACK_SIZE
+
+/**
+ * @brief This configuration option is a boolean feature define.
+ *
+ * In case this configuration option is defined, then each memory area returned
+ * by C Program Heap allocator functions such as malloc() is dirtied with a
+ * ``0xCF`` byte pattern before it is handed over to the application.
+ *
+ * @par Default Configuration
+ * If this configuration option is undefined, then the described feature is not
+ * enabled.
+ *
+ * @par Notes
+ * The dirtying performed by this option is carried out for each successful
+ * memory allocation from the C Program Heap in contrast to
+ * #CONFIGURE_DIRTY_MEMORY which dirties the memory only once during the system
+ * initialization.
+ */
+#define CONFIGURE_MALLOC_DIRTY
+
+/**
+ * @brief This configuration option is an integer define.
+ *
+ * The value of this configuration option defines the maximum number of file
+ * like objects that can be concurrently open.
+ *
+ * @par Default Value
+ * The default value is 3.
+ *
+ * @par Value Constraints
+ * @parblock
+ * The value of this configuration option shall satisfy all of the following
+ * constraints:
+ *
+ * * It shall be greater than or equal to 0.
+ *
+ * * It shall be less than or equal to <a
+ * href="https://en.cppreference.com/w/c/types/limits">SIZE_MAX</a>.
+ *
+ * * It shall be less than or equal to a BSP-specific and application-specific
+ * value which depends on the size of the memory available to the
+ * application.
+ * @endparblock
+ *
+ * @par Notes
+ * The default value of three file descriptors allows RTEMS to support standard
+ * input, output, and error I/O streams on ``/dev/console``.
+ */
+#define CONFIGURE_MAXIMUM_FILE_DESCRIPTORS
+
+/**
+ * @brief This configuration option is an integer define.
+ *
+ * The value of this configuration option defines the maximum number of
+ * processors an application intends to use. The number of actually available
+ * processors depends on the hardware and may be less. It is recommended to
+ * use the smallest value suitable for the application in order to save memory.
+ * Each processor needs an IDLE task stack and interrupt stack for example.
+ *
+ * @par Default Value
+ * The default value is 1.
+ *
+ * @par Value Constraints
+ * The value of this configuration option shall be greater than or equal to 1
+ * and less than or equal to #CPU_MAXIMUM_PROCESSORS.
+ *
+ * @par Notes
+ * @parblock
+ * If there are more processors available than configured, the rest will be
+ * ignored.
+ *
+ * This configuration option is only evaluated in SMP configurations (e.g.
+ * RTEMS was built with the ``--enable-smp`` build configuration option). In
+ * all other configurations it has no effect.
+ * @endparblock
+ */
+#define CONFIGURE_MAXIMUM_PROCESSORS
+
+/**
+ * @brief This configuration option is an integer define.
+ *
+ * The value of this configuration option defines the maximum thread name size
+ * including the terminating ``NUL`` character.
+ *
+ * @par Default Value
+ * The default value is 16.
+ *
+ * @par Value Constraints
+ * @parblock
+ * The value of this configuration option shall satisfy all of the following
+ * constraints:
+ *
+ * * It shall be greater than or equal to 0.
+ *
+ * * It shall be less than or equal to <a
+ * href="https://en.cppreference.com/w/c/types/limits">SIZE_MAX</a>.
+ *
+ * * It shall be less than or equal to a BSP-specific and application-specific
+ * value which depends on the size of the memory available to the
+ * application.
+ * @endparblock
+ *
+ * @par Notes
+ * @parblock
+ * The default value was chosen for Linux compatibility, see <a
+ * href=http://man7.org/linux/man-pages/man3/pthread_setname_np.3.html>PTHREAD_SETNAME_NP(3)</a>.
+ *
+ * The size of the thread control block is increased by the maximum thread name
+ * size.
+ *
+ * This configuration option is available since RTEMS 5.1.
+ * @endparblock
+ */
+#define CONFIGURE_MAXIMUM_THREAD_NAME_SIZE
+
+/**
+ * @brief This configuration option is an integer define.
+ *
+ * The value of this configuration option defines the number of kilobytes the
+ * application wishes to add to the RTEMS Workspace size calculated by
+ * ``<rtems/confdefs.h>``.
+ *
+ * @par Default Value
+ * The default value is 0.
+ *
+ * @par Value Constraints
+ * @parblock
+ * The value of this configuration option shall satisfy all of the following
+ * constraints:
+ *
+ * * It shall be greater than or equal to 0.
+ *
+ * * It shall be less than or equal to a BSP-specific and application-specific
+ * value which depends on the size of the memory available to the
+ * application.
+ *
+ * * It shall be small enough so that the RTEMS Workspace size calculation
+ * carried out by ``<rtems/confdefs.h>`` does not overflow an integer of type
+ * <a href="https://en.cppreference.com/w/c/types/integer">uintptr_t</a>.
+ * @endparblock
+ *
+ * @par Notes
+ * This configuration option should only be used when it is suspected that a
+ * bug in ``<rtems/confdefs.h>`` has resulted in an underestimation. Typically
+ * the memory allocation will be too low when an application does not account
+ * for all message queue buffers or task stacks, see
+ * #CONFIGURE_MESSAGE_BUFFER_MEMORY.
+ */
+#define CONFIGURE_MEMORY_OVERHEAD
+
+/**
+ * @brief This configuration option is an integer define.
+ *
+ * The value of this configuration option defines the number of bytes reserved
+ * for message queue buffers in the RTEMS Workspace.
+ *
+ * @par Default Value
+ * The default value is 0.
+ *
+ * @par Value Constraints
+ * @parblock
+ * The value of this configuration option shall satisfy all of the following
+ * constraints:
+ *
+ * * It shall be greater than or equal to 0.
+ *
+ * * It shall be less than or equal to a BSP-specific and application-specific
+ * value which depends on the size of the memory available to the
+ * application.
+ *
+ * * It shall be small enough so that the RTEMS Workspace size calculation
+ * carried out by ``<rtems/confdefs.h>`` does not overflow an integer of type
+ * <a href="https://en.cppreference.com/w/c/types/integer">uintptr_t</a>.
+ * @endparblock
+ *
+ * @par Notes
+ * @parblock
+ * The configuration options #CONFIGURE_MAXIMUM_MESSAGE_QUEUES and
+ * #CONFIGURE_MAXIMUM_POSIX_MESSAGE_QUEUES define only how many message queues
+ * can be created by the application. The memory for the message buffers is
+ * configured by this option. For each message queue you have to reserve some
+ * memory for the message buffers. The size depends on the maximum number of
+ * pending messages and the maximum size of the messages of a message queue.
+ * Use the ``CONFIGURE_MESSAGE_BUFFERS_FOR_QUEUE()`` macro to specify the
+ * message buffer memory for each message queue and sum them up to define the
+ * value for ``CONFIGURE_MAXIMUM_MESSAGE_QUEUES``.
+ *
+ * The interface for the ``CONFIGURE_MESSAGE_BUFFERS_FOR_QUEUE()`` help macro
+ * is as follows:
+ *
+ * @code
+ * CONFIGURE_MESSAGE_BUFFERS_FOR_QUEUE( max_messages, max_msg_size )
+ * @endcode
+ *
+ * Where ``max_messages`` is the maximum number of pending messages and
+ * ``max_msg_size`` is the maximum size in bytes of the messages of the
+ * corresponding message queue. Both parameters shall be compile time
+ * constants. Not using this help macro (e.g. just using ``max_messages *
+ * max_msg_size``) may result in an underestimate of the RTEMS Workspace size.
+ *
+ * The following example illustrates how the
+ * ``CONFIGURE_MESSAGE_BUFFERS_FOR_QUEUE()`` help macro can be used to assist
+ * in calculating the message buffer memory required. In this example, there
+ * are two message queues used in this application. The first message queue
+ * has a maximum of 24 pending messages with the message structure defined by
+ * the type ``one_message_type``. The other message queue has a maximum of 500
+ * pending messages with the message structure defined by the type
+ * ``other_message_type``.
+ *
+ * @code
+ * #define CONFIGURE_MESSAGE_BUFFER_MEMORY ( \
+ * CONFIGURE_MESSAGE_BUFFERS_FOR_QUEUE( \
+ * 24, \
+ * sizeof( one_message_type ) \
+ * ) \
+ * + CONFIGURE_MESSAGE_BUFFERS_FOR_QUEUE( \
+ * 500, \
+ * sizeof( other_message_type ) \
+ * ) \
+ * )
+ * @endcode
+ * @endparblock
+ */
+#define CONFIGURE_MESSAGE_BUFFER_MEMORY
+
+/**
+ * @brief This configuration option is an integer define.
+ *
+ * The value of this configuration option defines the length of time in
+ * microseconds between clock ticks (clock tick quantum).
+ *
+ * When the clock tick quantum value is too low, the system will spend so much
+ * time processing clock ticks that it does not have processing time available
+ * to perform application work. In this case, the system will become
+ * unresponsive.
+ *
+ * The lowest practical time quantum varies widely based upon the speed of the
+ * target hardware and the architectural overhead associated with interrupts.
+ * In general terms, you do not want to configure it lower than is needed for
+ * the application.
+ *
+ * The clock tick quantum should be selected such that it all blocking and
+ * delay times in the application are evenly divisible by it. Otherwise,
+ * rounding errors will be introduced which may negatively impact the
+ * application.
+ *
+ * @par Default Value
+ * The default value is 10000.
+ *
+ * @par Value Constraints
+ * @parblock
+ * The value of this configuration option shall satisfy all of the following
+ * constraints:
+ *
+ * * It shall be greater than or equal to a Clock Driver specific value.
+ *
+ * * It shall be less than or equal to a Clock Driver specific value.
+ *
+ * * The resulting clock ticks per second should be an integer.
+ * @endparblock
+ *
+ * @par Notes
+ * @parblock
+ * This configuration option has no impact if the Clock Driver is not
+ * configured, see #CONFIGURE_APPLICATION_DOES_NOT_NEED_CLOCK_DRIVER.
+ *
+ * There may be Clock Driver specific limits on the resolution or maximum value
+ * of a clock tick quantum.
+ * @endparblock
+ */
+#define CONFIGURE_MICROSECONDS_PER_TICK
+
+/**
+ * @brief This configuration option is an integer define.
+ *
+ * The value of this configuration option defines the minimum stack size in
+ * bytes for every user task or thread in the system.
+ *
+ * @par Default Value
+ * The default value is #CPU_STACK_MINIMUM_SIZE.
+ *
+ * @par Value Constraints
+ * @parblock
+ * The value of this configuration option shall satisfy all of the following
+ * constraints:
+ *
+ * * It shall be small enough so that the task stack space calculation carried
+ * out by ``<rtems/confdefs.h>`` does not overflow an integer of type <a
+ * href="https://en.cppreference.com/w/c/types/integer">uintptr_t</a>.
+ *
+ * * It shall be greater than or equal to a BSP-specific and
+ * application-specific minimum value.
+ * @endparblock
+ *
+ * @par Notes
+ * @parblock
+ * Adjusting this parameter should be done with caution. Examining the actual
+ * stack usage using the stack checker usage reporting facility is recommended
+ * (see also #CONFIGURE_STACK_CHECKER_ENABLED).
+ *
+ * This parameter can be used to lower the minimum from that recommended. This
+ * can be used in low memory systems to reduce memory consumption for stacks.
+ * However, this shall be done with caution as it could increase the
+ * possibility of a blown task stack.
+ *
+ * This parameter can be used to increase the minimum from that recommended.
+ * This can be used in higher memory systems to reduce the risk of stack
+ * overflow without performing analysis on actual consumption.
+ *
+ * By default, this configuration parameter defines also the minimum stack size
+ * of POSIX threads. This can be changed with the
+ * #CONFIGURE_MINIMUM_POSIX_THREAD_STACK_SIZE configuration option.
+ *
+ * In releases before RTEMS 5.1 the ``CONFIGURE_MINIMUM_TASK_STACK_SIZE`` was
+ * used to define the default value of #CONFIGURE_INTERRUPT_STACK_SIZE.
+ * @endparblock
+ */
+#define CONFIGURE_MINIMUM_TASK_STACK_SIZE
+
+/**
+ * @brief This configuration option is a boolean feature define.
+ *
+ * In case this configuration option is defined, then the stack checker is
+ * enabled.
+ *
+ * @par Default Configuration
+ * If this configuration option is undefined, then the described feature is not
+ * enabled.
+ *
+ * @par Notes
+ * @parblock
+ * The stack checker performs run-time stack bounds checking. This increases
+ * the time required to create tasks as well as adding overhead to each context
+ * switch.
+ *
+ * In 4.9 and older, this configuration option was named ``STACK_CHECKER_ON``.
+ * @endparblock
+ */
+#define CONFIGURE_STACK_CHECKER_ENABLED
+
+/**
+ * @brief This configuration option is an integer define.
+ *
+ * The value of this configuration option defines the length of the timeslice
+ * quantum in ticks for each task.
+ *
+ * @par Default Value
+ * The default value is 50.
+ *
+ * @par Value Constraints
+ * The value of this configuration option shall be greater than or equal to 0
+ * and less than or equal to <a
+ * href="https://en.cppreference.com/w/c/types/integer">UINT32_MAX</a>.
+ *
+ * @par Notes
+ * This configuration option has no impact if the Clock Driver is not
+ * configured, see #CONFIGURE_APPLICATION_DOES_NOT_NEED_CLOCK_DRIVER.
+ */
+#define CONFIGURE_TICKS_PER_TIMESLICE
+
+/**
+ * @brief This configuration option is a boolean feature define.
+ *
+ * In case this configuration option is defined, then the RTEMS Workspace and
+ * the C Program Heap will be one pool of memory.
+ *
+ * @par Default Configuration
+ * If this configuration option is undefined, then there will be separate
+ * memory pools for the RTEMS Workspace and C Program Heap.
+ *
+ * @par Notes
+ * @parblock
+ * Having separate pools does have 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 <a
+ * href=https://docs.rtems.org/branches/master/c-user/config/intro.html#unlimited-objects>Unlimited
+ * Objects</a> option. You will be able to create objects until you run out of
+ * all available memory rather then just until you run out of RTEMS Workspace.
+ * @endparblock
+ */
+#define CONFIGURE_UNIFIED_WORK_AREAS
+
+/**
+ * @brief This configuration option is an integer define.
+ *
+ * If #CONFIGURE_UNLIMITED_OBJECTS is defined, then the value of this
+ * configuration option defines the default objects maximum of all object
+ * classes supporting <a
+ * href=https://docs.rtems.org/branches/master/c-user/config/intro.html#unlimited-objects>Unlimited
+ * Objects</a> to ``rtems_resource_unlimited(
+ * CONFIGURE_UNLIMITED_ALLOCATION_SIZE )``.
+ *
+ * @par Default Value
+ * The default value is 8.
+ *
+ * @par Value Constraints
+ * The value of this configuration option shall meet the constraints of all
+ * object classes to which it is applied.
+ *
+ * @par Notes
+ * @parblock
+ * By allowing users to declare all resources as being unlimited the user can
+ * avoid identifying and limiting the resources used.
+ *
+ * The object maximum of each class can be configured also individually using
+ * the rtems_resource_unlimited() macro.
+ * @endparblock
+ */
+#define CONFIGURE_UNLIMITED_ALLOCATION_SIZE
+
+/**
+ * @brief This configuration option is a boolean feature define.
+ *
+ * In case this configuration option is defined, then unlimited objects are
+ * used by default.
+ *
+ * @par Default Configuration
+ * If this configuration option is undefined, then the described feature is not
+ * enabled.
+ *
+ * @par Notes
+ * @parblock
+ * When using unlimited objects, it is common practice to also specify
+ * #CONFIGURE_UNIFIED_WORK_AREAS so the system operates with a single pool of
+ * memory for both RTEMS Workspace and C Program Heap.
+ *
+ * This option does not override an explicit configuration for a particular
+ * object class by the user.
+ *
+ * See also #CONFIGURE_UNLIMITED_ALLOCATION_SIZE.
+ * @endparblock
+ */
+#define CONFIGURE_UNLIMITED_OBJECTS
+
+/**
+ * @brief This configuration option is a boolean feature define.
+ *
+ * In case this configuration option is defined, then the system initialization
+ * is verbose.
+ *
+ * @par Default Configuration
+ * If this configuration option is undefined, then the described feature is not
+ * enabled.
+ *
+ * @par Notes
+ * You may use this feature to debug system initialization issues. The
+ * printk() function is used to print the information.
+ */
+#define CONFIGURE_VERBOSE_SYSTEM_INITIALIZATION
+
+/**
+ * @brief This configuration option is a boolean feature define.
+ *
+ * In case this configuration option is defined, then the memory areas used for
+ * the RTEMS Workspace and the C Program Heap are zeroed with a ``0x00`` byte
+ * pattern during system initialization.
+ *
+ * @par Default Configuration
+ * If this configuration option is undefined, then the described feature is not
+ * enabled.
+ *
+ * @par Notes
+ * Zeroing memory can add significantly to the system initialization time. It
+ * is not necessary for RTEMS but is often assumed by support libraries. In
+ * case #CONFIGURE_DIRTY_MEMORY is also defined, then the memory is first
+ * dirtied and then zeroed.
+ */
+#define CONFIGURE_ZERO_WORKSPACE_AUTOMATICALLY
+
+/** @} */
+
+/**
+ * @defgroup RTEMSApplConfigIdleTaskConfiguration Idle Task Configuration
+ *
+ * @ingroup RTEMSApplConfig
+ *
+ * This section describes configuration options related to the idle tasks.
+ *
+ * @{
+ */
+
+/**
+ * @brief This configuration option is an initializer define.
+ *
+ * The value of this configuration option initializes the IDLE thread body.
+ *
+ * @par Default Value
+ * If #BSP_IDLE_TASK_BODY is defined, then this will be the default value,
+ * otherwise the default value is ``_CPU_Thread_Idle_body``.
+ *
+ * @par Value Constraints
+ * The value of this configuration option shall be defined to a valid function
+ * pointer of the type ``void *( *idle_body )( uintptr_t )``.
+ *
+ * @par Notes
+ * @parblock
+ * IDLE threads shall not block. A blocking IDLE thread results in undefined
+ * system behaviour because the scheduler assume that at least one ready thread
+ * exists.
+ *
+ * IDLE threads can be used to initialize the application, see configuration
+ * option #CONFIGURE_IDLE_TASK_INITIALIZES_APPLICATION.
+ * @endparblock
+ */
+#define CONFIGURE_IDLE_TASK_BODY
+
+/**
+ * @brief This configuration option is a boolean feature define.
+ *
+ * This configuration option is defined to indicate that the user has
+ * configured **no** user initialization tasks or threads and that the user
+ * provided IDLE task will perform application initialization and then
+ * transform itself into an IDLE task.
+ *
+ * @par Default Configuration
+ * If this configuration option is undefined, then the user is assumed to
+ * provide one or more initialization tasks.
+ *
+ * @par Notes
+ * @parblock
+ * If you use this option be careful, the user IDLE task **cannot** block at
+ * all during the initialization sequence. Further, once application
+ * initialization is complete, it shall make itself preemptible and enter an
+ * idle body loop.
+ *
+ * The IDLE task shall run at the lowest priority of all tasks in the system.
+ *
+ * If this configuration option is defined, then it is mandatory to configure a
+ * user IDLE task with the #CONFIGURE_IDLE_TASK_BODY configuration option,
+ * otherwise a compile time error in the configuration file will occur.
+ *
+ * The application shall define exactly one of the following configuration
+ * options
+ *
+ * * #CONFIGURE_RTEMS_INIT_TASKS_TABLE,
+ *
+ * * #CONFIGURE_POSIX_INIT_THREAD_TABLE, or
+ *
+ * * ``CONFIGURE_IDLE_TASK_INITIALIZES_APPLICATION``
+ *
+ * otherwise a compile time error in the configuration file will occur.
+ * @endparblock
+ */
+#define CONFIGURE_IDLE_TASK_INITIALIZES_APPLICATION
+
+/**
+ * @brief This configuration option is an integer define.
+ *
+ * The value of this configuration option defines the task stack size for an
+ * IDLE task.
+ *
+ * @par Default Value
+ * The default value is #CONFIGURE_MINIMUM_TASK_STACK_SIZE.
+ *
+ * @par Value Constraints
+ * @parblock
+ * The value of this configuration option shall satisfy all of the following
+ * constraints:
+ *
+ * * It shall be greater than or equal to a BSP-specific and
+ * application-specific minimum value.
+ *
+ * * It shall be small enough so that the IDLE task stack area calculation
+ * carried out by ``<rtems/confdefs.h>`` does not overflow an integer of type
+ * <a href="https://en.cppreference.com/w/c/types/size_t">size_t</a>.
+ * @endparblock
+ *
+ * @par Notes
+ * In SMP configurations, there is one IDLE task per configured processor, see
+ * #CONFIGURE_MAXIMUM_PROCESSORS.
+ */
+#define CONFIGURE_IDLE_TASK_STACK_SIZE
+
+/** @} */
+
+/**
+ * @defgroup RTEMSApplConfigMultiprocessingConfiguration \
+ * Multiprocessing Configuration
+ *
+ * @ingroup RTEMSApplConfig
+ *
+ * This section describes multiprocessing related configuration options. The
+ * options are only used if RTEMS was built with the
+ * ``--enable-multiprocessing`` build configuration option. Additionally, this
+ * class of configuration options are only applicable if the configuration
+ * option #CONFIGURE_MP_APPLICATION is defined. The multiprocessing (MPCI)
+ * support must not be confused with the SMP support.
+ *
+ * @{
+ */
+
+/**
+ * @brief This configuration option is an integer define.
+ *
+ * The value of this configuration option defines the number of bytes the
+ * applications wishes to add to the MPCI task stack on top of
+ * #CONFIGURE_MINIMUM_TASK_STACK_SIZE.
+ *
+ * @par Default Value
+ * The default value is 0.
+ *
+ * @par Value Constraints
+ * @parblock
+ * The value of this configuration option shall satisfy all of the following
+ * constraints:
+ *
+ * * It shall be greater than or equal to 0.
+ *
+ * * It shall be less than or equal to <a
+ * href="https://en.cppreference.com/w/c/types/integer">UINT32_MAX</a>.
+ *
+ * * It shall be small enough so that the MPCI receive server stack area
+ * calculation carried out by ``<rtems/confdefs.h>`` does not overflow an
+ * integer of type <a
+ * href="https://en.cppreference.com/w/c/types/size_t">size_t</a>.
+ * @endparblock
+ *
+ * @par Notes
+ * This configuration option is only evaluated if #CONFIGURE_MP_APPLICATION is
+ * defined.
+ */
+#define CONFIGURE_EXTRA_MPCI_RECEIVE_SERVER_STACK
+
+/**
+ * @brief This configuration option is a boolean feature define.
+ *
+ * This configuration option is defined to indicate that the application
+ * intends to be part of a multiprocessing configuration. Additional
+ * configuration options are assumed to be provided.
+ *
+ * @par Default Configuration
+ * If this configuration option is undefined, then the multiprocessing services
+ * are not initialized.
+ *
+ * @par Notes
+ * This configuration option shall be undefined if the multiprocessing support
+ * is not enabled (e.g. RTEMS was built without the
+ * ``--enable-multiprocessing`` build configuration option). Otherwise a
+ * compile time error in the configuration file will occur.
+ */
+#define CONFIGURE_MP_APPLICATION
+
+/**
+ * @brief This configuration option is an integer define.
+ *
+ * The value of this configuration option defines the maximum number of
+ * concurrently active global objects in a multiprocessor system.
+ *
+ * @par Default Value
+ * The default value is 32.
+ *
+ * @par Value Constraints
+ * The value of this configuration option shall be greater than or equal to 0
+ * and less than or equal to <a
+ * href="https://en.cppreference.com/w/c/types/integer">UINT32_MAX</a>.
+ *
+ * @par Notes
+ * @parblock
+ * This value corresponds to the total number of objects which can be created
+ * with the #RTEMS_GLOBAL attribute.
+ *
+ * This configuration option is only evaluated if #CONFIGURE_MP_APPLICATION is
+ * defined.
+ * @endparblock
+ */
+#define CONFIGURE_MP_MAXIMUM_GLOBAL_OBJECTS
+
+/**
+ * @brief This configuration option is an integer define.
+ *
+ * The value of this configuration option defines the maximum number of nodes
+ * in a multiprocessor system.
+ *
+ * @par Default Value
+ * The default value is 2.
+ *
+ * @par Value Constraints
+ * The value of this configuration option shall be greater than or equal to 0
+ * and less than or equal to <a
+ * href="https://en.cppreference.com/w/c/types/integer">UINT32_MAX</a>.
+ *
+ * @par Notes
+ * This configuration option is only evaluated if #CONFIGURE_MP_APPLICATION is
+ * defined.
+ */
+#define CONFIGURE_MP_MAXIMUM_NODES
+
+/**
+ * @brief This configuration option is an integer define.
+ *
+ * The value of this configuration option defines the maximum number of
+ * concurrently active thread/task proxies on this node in a multiprocessor
+ * system.
+ *
+ * @par Default Value
+ * The default value is 32.
+ *
+ * @par Value Constraints
+ * The value of this configuration option shall be greater than or equal to 0
+ * and less than or equal to <a
+ * href="https://en.cppreference.com/w/c/types/integer">UINT32_MAX</a>.
+ *
+ * @par Notes
+ * @parblock
+ * Since a proxy is used to represent a remote task/thread which is blocking on
+ * this node. This configuration parameter reflects the maximum number of
+ * remote tasks/threads which can be blocked on objects on this node, see <a
+ * href=https://docs.rtems.org/branches/master/c-user/multiprocessing.html#proxies>Proxies</a>.
+ *
+ * This configuration option is only evaluated if #CONFIGURE_MP_APPLICATION is
+ * defined.
+ * @endparblock
+ */
+#define CONFIGURE_MP_MAXIMUM_PROXIES
+
+/**
+ * @brief This configuration option is an initializer define.
+ *
+ * The value of this configuration option initializes the MPCI Configuration
+ * Table.
+ *
+ * @par Default Value
+ * The default value is ``&MPCI_table``.
+ *
+ * @par Value Constraints
+ * The value of this configuration option shall be a pointer to
+ * ::rtems_mpci_table.
+ *
+ * @par Notes
+ * @parblock
+ * RTEMS provides a Shared Memory MPCI Device Driver which can be used on any
+ * Multiprocessor System assuming the BSP provides the proper set of supporting
+ * methods.
+ *
+ * This configuration option is only evaluated if #CONFIGURE_MP_APPLICATION is
+ * defined.
+ * @endparblock
+ */
+#define CONFIGURE_MP_MPCI_TABLE_POINTER
+
+/**
+ * @brief This configuration option is an integer define.
+ *
+ * The value of this configuration option defines the node number of this node
+ * in a multiprocessor system.
+ *
+ * @par Default Value
+ * The default value is ``NODE_NUMBER``.
+ *
+ * @par Value Constraints
+ * The value of this configuration option shall be greater than or equal to 0
+ * and less than or equal to <a
+ * href="https://en.cppreference.com/w/c/types/integer">UINT32_MAX</a>.
+ *
+ * @par Notes
+ * @parblock
+ * In the RTEMS Multiprocessing Test Suite, the node number is derived from the
+ * Makefile variable ``NODE_NUMBER``. The same code is compiled with the
+ * ``NODE_NUMBER`` set to different values. The test programs behave
+ * differently based upon their node number.
+ *
+ * This configuration option is only evaluated if #CONFIGURE_MP_APPLICATION is
+ * defined.
+ * @endparblock
+ */
+#define CONFIGURE_MP_NODE_NUMBER
+
+/** @} */
+
+/**
+ * @defgroup RTEMSApplConfigPOSIXAPIConfiguration POSIX API Configuration
+ *
+ * @ingroup RTEMSApplConfig
+ *
+ * This section describes configuration options related to the POSIX API. Most
+ * POSIX API objects are available by default since RTEMS 5.1. The queued
+ * signals and timers are only available if RTEMS was built with the
+ * ``--enable-posix`` build configuration option.
+ *
+ * @{
+ */
+
+/**
+ * @brief This configuration option is an integer define.
+ *
+ * The value of this configuration option defines the maximum number of POSIX
+ * API Keys that can be concurrently active.
+ *
+ * @par Default Value
+ * The default value is 0.
+ *
+ * @par Value Constraints
+ * @parblock
+ * The value of this configuration option shall satisfy all of the following
+ * constraints:
+ *
+ * * It shall be greater than or equal to 0.
+ *
+ * * It shall be less than or equal to 65535.
+ *
+ * * It shall be less than or equal to a BSP-specific and application-specific
+ * value which depends on the size of the memory available to the
+ * application.
+ *
+ * * It may be defined through rtems_resource_unlimited() the enable unlimited
+ * objects for this object class, if the value passed to
+ * rtems_resource_unlimited() satisfies all other constraints of this
+ * configuration option.
+ * @endparblock
+ *
+ * @par Notes
+ * This object class can be configured in unlimited allocation mode, see <a
+ * href=https://docs.rtems.org/branches/master/c-user/config/intro.html#unlimited-objects>Unlimited
+ * Objects</a>.
+ */
+#define CONFIGURE_MAXIMUM_POSIX_KEYS
+
+/**
+ * @brief This configuration option is an integer define.
+ *
+ * The value of this configuration option defines the maximum number of key
+ * value pairs used by POSIX API Keys that can be concurrently active.
+ *
+ * @par Default Value
+ * The default value is #CONFIGURE_MAXIMUM_POSIX_KEYS *
+ * #CONFIGURE_MAXIMUM_TASKS + #CONFIGURE_MAXIMUM_POSIX_THREADS.
+ *
+ * @par Value Constraints
+ * @parblock
+ * The value of this configuration option shall satisfy all of the following
+ * constraints:
+ *
+ * * It shall be greater than or equal to 0.
+ *
+ * * It shall be less than or equal to 65535.
+ *
+ * * It shall be less than or equal to a BSP-specific and application-specific
+ * value which depends on the size of the memory available to the
+ * application.
+ *
+ * * It may be defined through rtems_resource_unlimited() the enable unlimited
+ * objects for this object class, if the value passed to
+ * rtems_resource_unlimited() satisfies all other constraints of this
+ * configuration option.
+ * @endparblock
+ *
+ * @par Notes
+ * @parblock
+ * This object class can be configured in unlimited allocation mode, see <a
+ * href=https://docs.rtems.org/branches/master/c-user/config/intro.html#unlimited-objects>Unlimited
+ * Objects</a>.
+ *
+ * A key value pair is created by pthread_setspecific() if the value is not <a
+ * href="https://en.cppreference.com/w/c/types/NULL">NULL</a>, otherwise it is
+ * deleted.
+ * @endparblock
+ */
+#define CONFIGURE_MAXIMUM_POSIX_KEY_VALUE_PAIRS
+
+/**
+ * @brief This configuration option is an integer define.
+ *
+ * The value of this configuration option defines the maximum number of POSIX
+ * API Message Queues that can be concurrently active.
+ *
+ * @par Default Value
+ * The default value is 0.
+ *
+ * @par Value Constraints
+ * @parblock
+ * The value of this configuration option shall satisfy all of the following
+ * constraints:
+ *
+ * * It shall be greater than or equal to 0.
+ *
+ * * It shall be less than or equal to 65535.
+ *
+ * * It shall be less than or equal to a BSP-specific and application-specific
+ * value which depends on the size of the memory available to the
+ * application.
+ *
+ * * It shall be small enough so that the RTEMS Workspace size calculation
+ * carried out by ``<rtems/confdefs.h>`` does not overflow an integer of type
+ * <a href="https://en.cppreference.com/w/c/types/integer">uintptr_t</a>.
+ *
+ * * It may be defined through rtems_resource_unlimited() the enable unlimited
+ * objects for this object class, if the value passed to
+ * rtems_resource_unlimited() satisfies all other constraints of this
+ * configuration option.
+ * @endparblock
+ *
+ * @par Notes
+ * This object class can be configured in unlimited allocation mode, see <a
+ * href=https://docs.rtems.org/branches/master/c-user/config/intro.html#unlimited-objects>Unlimited
+ * Objects</a>. You have to account for the memory used to store the messages
+ * of each message queue, see #CONFIGURE_MESSAGE_BUFFER_MEMORY.
+ */
+#define CONFIGURE_MAXIMUM_POSIX_MESSAGE_QUEUES
+
+/**
+ * @brief This configuration option is an integer define.
+ *
+ * The value of this configuration option defines the maximum number of POSIX
+ * API Queued Signals that can be concurrently active.
+ *
+ * @par Default Value
+ * The default value is 0.
+ *
+ * @par Value Constraints
+ * @parblock
+ * The value of this configuration option shall satisfy all of the following
+ * constraints:
+ *
+ * * It shall be greater than or equal to 0.
+ *
+ * * It shall be less than or equal to a BSP-specific and application-specific
+ * value which depends on the size of the memory available to the
+ * application.
+ *
+ * * It shall be small enough so that the RTEMS Workspace size calculation
+ * carried out by ``<rtems/confdefs.h>`` does not overflow an integer of type
+ * <a href="https://en.cppreference.com/w/c/types/integer">uintptr_t</a>.
+ *
+ * * It shall be zero if the POSIX API is not enabled (e.g. RTEMS was built
+ * without the ``--enable-posix`` build configuration option). Otherwise a
+ * compile time error in the configuration file will occur.
+ * @endparblock
+ *
+ * @par Notes
+ * @parblock
+ * Unlimited objects are not available for queued signals.
+ *
+ * Queued signals are only available if RTEMS was built with the
+ * ``--enable-posix`` build configuration option.
+ * @endparblock
+ */
+#define CONFIGURE_MAXIMUM_POSIX_QUEUED_SIGNALS
+
+/**
+ * @brief This configuration option is an integer define.
+ *
+ * The value of this configuration option defines the maximum number of POSIX
+ * API Named Semaphores that can be concurrently active.
+ *
+ * @par Default Value
+ * The default value is 0.
+ *
+ * @par Value Constraints
+ * @parblock
+ * The value of this configuration option shall satisfy all of the following
+ * constraints:
+ *
+ * * It shall be greater than or equal to 0.
+ *
+ * * It shall be less than or equal to 65535.
+ *
+ * * It shall be less than or equal to a BSP-specific and application-specific
+ * value which depends on the size of the memory available to the
+ * application.
+ *
+ * * It shall be small enough so that the RTEMS Workspace size calculation
+ * carried out by ``<rtems/confdefs.h>`` does not overflow an integer of type
+ * <a href="https://en.cppreference.com/w/c/types/integer">uintptr_t</a>.
+ *
+ * * It may be defined through rtems_resource_unlimited() the enable unlimited
+ * objects for this object class, if the value passed to
+ * rtems_resource_unlimited() satisfies all other constraints of this
+ * configuration option.
+ * @endparblock
+ *
+ * @par Notes
+ * @parblock
+ * This object class can be configured in unlimited allocation mode, see <a
+ * href=https://docs.rtems.org/branches/master/c-user/config/intro.html#unlimited-objects>Unlimited
+ * Objects</a>.
+ *
+ * Named semaphores are created with sem_open(). Semaphores initialized with
+ * sem_init() are not affected by this configuration option since the storage
+ * space for these semaphores is user-provided.
+ * @endparblock
+ */
+#define CONFIGURE_MAXIMUM_POSIX_SEMAPHORES
+
+/**
+ * @brief This configuration option is an integer define.
+ *
+ * The value of this configuration option defines the maximum number of POSIX
+ * API Shared Memory objects that can be concurrently active.
+ *
+ * @par Default Value
+ * The default value is 0.
+ *
+ * @par Value Constraints
+ * @parblock
+ * The value of this configuration option shall satisfy all of the following
+ * constraints:
+ *
+ * * It shall be greater than or equal to 0.
+ *
+ * * It shall be less than or equal to 65535.
+ *
+ * * It shall be less than or equal to a BSP-specific and application-specific
+ * value which depends on the size of the memory available to the
+ * application.
+ *
+ * * It shall be small enough so that the RTEMS Workspace size calculation
+ * carried out by ``<rtems/confdefs.h>`` does not overflow an integer of type
+ * <a href="https://en.cppreference.com/w/c/types/integer">uintptr_t</a>.
+ *
+ * * It may be defined through rtems_resource_unlimited() the enable unlimited
+ * objects for this object class, if the value passed to
+ * rtems_resource_unlimited() satisfies all other constraints of this
+ * configuration option.
+ * @endparblock
+ *
+ * @par Notes
+ * This object class can be configured in unlimited allocation mode, see <a
+ * href=https://docs.rtems.org/branches/master/c-user/config/intro.html#unlimited-objects>Unlimited
+ * Objects</a>.
+ */
+#define CONFIGURE_MAXIMUM_POSIX_SHMS
+
+/**
+ * @brief This configuration option is an integer define.
+ *
+ * The value of this configuration option defines the maximum number of POSIX
+ * API Threads that can be concurrently active.
+ *
+ * @par Default Value
+ * The default value is 0.
+ *
+ * @par Value Constraints
+ * @parblock
+ * The value of this configuration option shall satisfy all of the following
+ * constraints:
+ *
+ * * It shall be greater than or equal to 0.
+ *
+ * * It shall be less than or equal to 65535.
+ *
+ * * It shall be less than or equal to a BSP-specific and application-specific
+ * value which depends on the size of the memory available to the
+ * application.
+ *
+ * * It shall be small enough so that the task stack space calculation carried
+ * out by ``<rtems/confdefs.h>`` does not overflow an integer of type <a
+ * href="https://en.cppreference.com/w/c/types/integer">uintptr_t</a>.
+ * @endparblock
+ *
+ * @par Notes
+ * @parblock
+ * This object class can be configured in unlimited allocation mode, see <a
+ * href=https://docs.rtems.org/branches/master/c-user/config/intro.html#unlimited-objects>Unlimited
+ * Objects</a>.
+ *
+ * This calculations for the required memory in the RTEMS Workspace for threads
+ * assume that each thread has a minimum stack size and has floating point
+ * support enabled. The configuration option #CONFIGURE_EXTRA_TASK_STACKS is
+ * used to specify thread stack requirements **above** the minimum size
+ * required.
+ *
+ * The maximum number of Classic API Tasks is specified by
+ * #CONFIGURE_MAXIMUM_TASKS.
+ *
+ * All POSIX threads have floating point enabled.
+ * @endparblock
+ */
+#define CONFIGURE_MAXIMUM_POSIX_THREADS
+
+/**
+ * @brief This configuration option is an integer define.
+ *
+ * The value of this configuration option defines the maximum number of POSIX
+ * API Timers that can be concurrently active.
+ *
+ * @par Default Value
+ * The default value is 0.
+ *
+ * @par Value Constraints
+ * @parblock
+ * The value of this configuration option shall satisfy all of the following
+ * constraints:
+ *
+ * * It shall be greater than or equal to 0.
+ *
+ * * It shall be less than or equal to 65535.
+ *
+ * * It shall be less than or equal to a BSP-specific and application-specific
+ * value which depends on the size of the memory available to the
+ * application.
+ *
+ * * It may be defined through rtems_resource_unlimited() the enable unlimited
+ * objects for this object class, if the value passed to
+ * rtems_resource_unlimited() satisfies all other constraints of this
+ * configuration option.
+ *
+ * * It shall be zero if the POSIX API is not enabled (e.g. RTEMS was built
+ * without the ``--enable-posix`` build configuration option). Otherwise a
+ * compile time error in the configuration file will occur.
+ * @endparblock
+ *
+ * @par Notes
+ * @parblock
+ * This object class can be configured in unlimited allocation mode, see <a
+ * href=https://docs.rtems.org/branches/master/c-user/config/intro.html#unlimited-objects>Unlimited
+ * Objects</a>.
+ *
+ * Timers are only available if RTEMS was built with the ``--enable-posix``
+ * build configuration option.
+ * @endparblock
+ */
+#define CONFIGURE_MAXIMUM_POSIX_TIMERS
+
+/**
+ * @brief This configuration option is an integer define.
+ *
+ * The value of this configuration option defines the minimum stack size in
+ * bytes for every POSIX thread in the system.
+ *
+ * @par Default Value
+ * The default value is two times the value of
+ * #CONFIGURE_MINIMUM_TASK_STACK_SIZE.
+ *
+ * @par Value Constraints
+ * @parblock
+ * The value of this configuration option shall satisfy all of the following
+ * constraints:
+ *
+ * * It shall be small enough so that the task stack space calculation carried
+ * out by ``<rtems/confdefs.h>`` does not overflow an integer of type <a
+ * href="https://en.cppreference.com/w/c/types/integer">uintptr_t</a>.
+ *
+ * * It shall be greater than or equal to a BSP-specific and
+ * application-specific minimum value.
+ * @endparblock
+ */
+#define CONFIGURE_MINIMUM_POSIX_THREAD_STACK_SIZE
+
+/** @} */
+
+/**
+ * @defgroup RTEMSApplConfigPOSIXInitializationThreadConfiguration \
+ * POSIX Initialization Thread Configuration
+ *
+ * @ingroup RTEMSApplConfig
+ *
+ * This section describes configuration options related to the POSIX
+ * initialization thread.
+ *
+ * @{
+ */
+
+/**
+ * @brief This configuration option is an initializer define.
+ *
+ * The value of this configuration option initializes the entry point of the
+ * POSIX API initialization thread.
+ *
+ * @par Default Value
+ * The default value is ``POSIX_Init``.
+ *
+ * @par Value Constraints
+ * The value of this configuration option shall be defined to a valid function
+ * pointer of the type ``void *( *entry_point )( void * )``.
+ *
+ * @par Notes
+ * The application shall provide the function referenced by this configuration
+ * option.
+ */
+#define CONFIGURE_POSIX_INIT_THREAD_ENTRY_POINT
+
+/**
+ * @brief This configuration option is an integer define.
+ *
+ * The value of this configuration option defines the thread stack size of the
+ * POSIX API initialization thread.
+ *
+ * @par Default Value
+ * The default value is #CONFIGURE_MINIMUM_POSIX_THREAD_STACK_SIZE.
+ *
+ * @par Value Constraints
+ * @parblock
+ * The value of this configuration option shall satisfy all of the following
+ * constraints:
+ *
+ * * It shall be greater than or equal to #CONFIGURE_MINIMUM_TASK_STACK_SIZE.
+ *
+ * * It shall be small enough so that the task stack space calculation carried
+ * out by ``<rtems/confdefs.h>`` does not overflow an integer of type <a
+ * href="https://en.cppreference.com/w/c/types/integer">uintptr_t</a>.
+ * @endparblock
+ */
+#define CONFIGURE_POSIX_INIT_THREAD_STACK_SIZE
+
+/**
+ * @brief This configuration option is a boolean feature define.
+ *
+ * In case this configuration option is defined, then exactly one POSIX
+ * initialization thread is configured.
+ *
+ * @par Default Configuration
+ * If this configuration option is undefined, then the described feature is not
+ * enabled.
+ *
+ * @par Notes
+ * @parblock
+ * The application shall define exactly one of the following configuration
+ * options
+ *
+ * * #CONFIGURE_RTEMS_INIT_TASKS_TABLE,
+ *
+ * * ``CONFIGURE_POSIX_INIT_THREAD_TABLE``, or
+ *
+ * * #CONFIGURE_IDLE_TASK_INITIALIZES_APPLICATION
+ *
+ * otherwise a compile time error in the configuration file will occur.
+ * @endparblock
+ */
+#define CONFIGURE_POSIX_INIT_THREAD_TABLE
+
+/** @} */
+
+/**
+ * @defgroup RTEMSApplConfigGeneralSchedulerConfiguration \
+ * General Scheduler Configuration
+ *
+ * @ingroup RTEMSApplConfig
+ *
+ * This section describes configuration options related to selecting a
+ * scheduling algorithm for an application. A scheduler configuration is
+ * optional and only necessary in very specific circumstances. A normal
+ * application configuration does not need any of the configuration options
+ * described in this section.
+ *
+ * By default, the <a
+ * href=https://docs.rtems.org/branches/master/c-user/scheduling_concepts.html#deterministic-priority-scheduler>Deterministic
+ * Priority Scheduler</a> algorithm is used in uniprocessor configurations. In
+ * case SMP is enabled and the configured maximum processors
+ * (#CONFIGURE_MAXIMUM_PROCESSORS) is greater than one, then the <a
+ * href=https://docs.rtems.org/branches/master/c-user/scheduling_concepts.html#earliest-deadline-first-smp-scheduler>Earliest
+ * Deadline First SMP Scheduler</a> is selected as the default scheduler
+ * algorithm.
+ *
+ * For the schedulers provided by RTEMS (see <a
+ * href=https://docs.rtems.org/branches/master/c-user/scheduling_concepts.html>Scheduling
+ * Concepts</a>), the configuration is straightforward. All that is required
+ * is to define the configuration option which specifies which scheduler you
+ * want for in your application.
+ *
+ * The pluggable scheduler interface also enables the user to provide their own
+ * scheduling algorithm. If you choose to do this, you must define multiple
+ * configuration option.
+ *
+ * @{
+ */
+
+/**
+ * @brief This configuration option is an integer define.
+ *
+ * The value of this configuration option defines the maximum number Constant
+ * Bandwidth Servers that can be concurrently active.
+ *
+ * @par Default Value
+ * The default value is #CONFIGURE_MAXIMUM_TASKS.
+ *
+ * @par Value Constraints
+ * @parblock
+ * The value of this configuration option shall satisfy all of the following
+ * constraints:
+ *
+ * * It shall be greater than or equal to 0.
+ *
+ * * It shall be less than or equal to <a
+ * href="https://en.cppreference.com/w/c/types/limits">SIZE_MAX</a>.
+ *
+ * * It shall be less than or equal to a BSP-specific and application-specific
+ * value which depends on the size of the memory available to the
+ * application.
+ * @endparblock
+ *
+ * @par Notes
+ * This configuration option is only evaluated if the configuration option
+ * #CONFIGURE_SCHEDULER_CBS is defined.
+ */
+#define CONFIGURE_CBS_MAXIMUM_SERVERS
+
+/**
+ * @brief This configuration option is an integer define.
+ *
+ * For the following schedulers
+ *
+ * * <a
+ * href=https://docs.rtems.org/branches/master/c-user/scheduling_concepts.html#deterministic-priority-scheduler>Deterministic
+ * Priority Scheduler</a>, which is the default in uniprocessor
+ * configurations and can be configured through the
+ * #CONFIGURE_SCHEDULER_PRIORITY configuration option,
+ *
+ * * <a
+ * href=https://docs.rtems.org/branches/master/c-user/scheduling_concepts.html#deterministic-priority-smp-scheduler>Deterministic
+ * Priority SMP Scheduler</a> which can be configured through the
+ * #CONFIGURE_SCHEDULER_PRIORITY_SMP configuration option, and
+ *
+ * * <a
+ * href=https://docs.rtems.org/branches/master/c-user/scheduling_concepts.html#arbitrary-processor-affinity-priority-smp-scheduler>Arbitrary
+ * Processor Affinity Priority SMP Scheduler</a> which can be configured
+ * through the #CONFIGURE_SCHEDULER_PRIORITY_AFFINITY_SMP configuration
+ * option
+ *
+ * this configuration option specifies the maximum numeric priority of any task
+ * for these schedulers and one less that the number of priority levels for
+ * these schedulers. For all other schedulers provided by RTEMS, this
+ * configuration option has no effect.
+ *
+ * @par Default Value
+ * The default value is 255.
+ *
+ * @par Value Constraints
+ * The value of this configuration option shall be an element of {3, 7, 31, 63,
+ * 127, 255}.
+ *
+ * @par Notes
+ * @parblock
+ * The numerically greatest priority is the logically lowest priority in the
+ * system and will thus be used by the IDLE task.
+ *
+ * Priority zero is reserved for internal use by RTEMS and is not available to
+ * applications.
+ *
+ * Reducing the number of priorities through this configuration option reduces
+ * the amount of memory allocated by the schedulers listed above. These
+ * schedulers use a chain control structure per priority and this structure
+ * consists of three pointers. On a 32-bit architecture, the allocated memory
+ * is 12 bytes * (``CONFIGURE_MAXIMUM_PRIORITY`` + 1), e.g. 3072 bytes for 256
+ * priority levels (default), 48 bytes for 4 priority levels
+ * (``CONFIGURE_MAXIMUM_PRIORITY == 3``).
+ *
+ * The default value is 255, because RTEMS shall support 256 priority levels to
+ * be compliant with various standards. These priorities range from 0 to 255.
+ * @endparblock
+ */
+#define CONFIGURE_MAXIMUM_PRIORITY
+
+/**
+ * @brief This configuration option is an initializer define.
+ *
+ * The value of this configuration option is used to initialize the initial
+ * scheduler to processor assignments.
+ *
+ * @par Default Value
+ * The default value of this configuration option is computed so that the
+ * default scheduler is assigned to each configured processor (up to 32).
+ *
+ * @par Value Constraints
+ * @parblock
+ * The value of this configuration option shall satisfy all of the following
+ * constraints:
+ *
+ * * It shall be a list of the following macros:
+ *
+ * * ``RTEMS_SCHEDULER_ASSIGN( processor_index, attributes )``
+ *
+ * * ``RTEMS_SCHEDULER_ASSIGN_NO_SCHEDULER``
+ *
+ * * It shall be a list of exactly #CONFIGURE_MAXIMUM_PROCESSORS elements.
+ * @endparblock
+ *
+ * @par Notes
+ * @parblock
+ * This configuration option is only evaluated in SMP configurations.
+ *
+ * This is an advanced configuration option, see <a
+ * href=https://docs.rtems.org/branches/master/c-user/config/scheduler-clustered.html>Clustered
+ * Scheduler Configuration</a>.
+ * @endparblock
+ */
+#define CONFIGURE_SCHEDULER_ASSIGNMENTS
+
+/**
+ * @brief This configuration option is a boolean feature define.
+ *
+ * In case this configuration option is defined, then <a
+ * href=https://docs.rtems.org/branches/master/c-user/scheduling_concepts.html#constant-bandwidth-server-scheduling-cbs>Constant
+ * Bandwidth Server Scheduling (CBS)</a> algorithm is made available to the
+ * application.
+ *
+ * @par Default Configuration
+ * If this configuration option is undefined, then the described feature is not
+ * enabled.
+ *
+ * @par Notes
+ * @parblock
+ * This scheduler configuration option is an advanced configuration option.
+ * Think twice before you use it.
+ *
+ * In case no explicit <a
+ * href=https://docs.rtems.org/branches/master/c-user/config/scheduler-clustered.html>Clustered
+ * Scheduler Configuration</a> is present, then it is used as the scheduler for
+ * exactly one processor.
+ * @endparblock
+ */
+#define CONFIGURE_SCHEDULER_CBS
+
+/**
+ * @brief This configuration option is a boolean feature define.
+ *
+ * In case this configuration option is defined, then <a
+ * href=https://docs.rtems.org/branches/master/c-user/scheduling_concepts.html#earliest-deadline-first-scheduler>Earliest
+ * Deadline First Scheduler</a> algorithm is made available to the application.
+ *
+ * @par Default Configuration
+ * If this configuration option is undefined, then the described feature is not
+ * enabled.
+ *
+ * @par Notes
+ * @parblock
+ * This scheduler configuration option is an advanced configuration option.
+ * Think twice before you use it.
+ *
+ * In case no explicit <a
+ * href=https://docs.rtems.org/branches/master/c-user/config/scheduler-clustered.html>Clustered
+ * Scheduler Configuration</a> is present, then it is used as the scheduler for
+ * exactly one processor.
+ * @endparblock
+ */
+#define CONFIGURE_SCHEDULER_EDF
+
+/**
+ * @brief This configuration option is a boolean feature define.
+ *
+ * In case this configuration option is defined, then <a
+ * href=https://docs.rtems.org/branches/master/c-user/scheduling_concepts.html#earliest-deadline-first-smp-scheduler>Earliest
+ * Deadline First SMP Scheduler</a> algorithm is made available to the
+ * application.
+ *
+ * @par Default Configuration
+ * If this configuration option is undefined, then the described feature is not
+ * enabled.
+ *
+ * @par Notes
+ * @parblock
+ * This scheduler configuration option is an advanced configuration option.
+ * Think twice before you use it.
+ *
+ * This scheduler algorithm is only available when RTEMS is built with SMP
+ * support enabled.
+ *
+ * In case no explicit <a
+ * href=https://docs.rtems.org/branches/master/c-user/config/scheduler-clustered.html>Clustered
+ * Scheduler Configuration</a> is present, then it is used as the scheduler for
+ * up to 32 processors.
+ *
+ * This scheduler algorithm is the default in SMP configurations if
+ * #CONFIGURE_MAXIMUM_PROCESSORS is greater than one.
+ * @endparblock
+ */
+#define CONFIGURE_SCHEDULER_EDF_SMP
+
+/**
+ * @brief This configuration option is an integer define.
+ *
+ * The value of this configuration option defines the name of the default
+ * scheduler.
+ *
+ * @par Default Value
+ * @parblock
+ * The default value is
+ *
+ * * ``"MEDF"`` for the <a
+ * href=https://docs.rtems.org/branches/master/c-user/scheduling_concepts.html#earliest-deadline-first-smp-scheduler>Earliest
+ * Deadline First SMP Scheduler</a>,
+ *
+ * * ``"MPA "`` for the <a
+ * href=https://docs.rtems.org/branches/master/c-user/scheduling_concepts.html#arbitrary-processor-affinity-priority-smp-scheduler>Arbitrary
+ * Processor Affinity Priority SMP Scheduler</a>,
+ *
+ * * ``"MPD "`` for the <a
+ * href=https://docs.rtems.org/branches/master/c-user/scheduling_concepts.html#deterministic-priority-smp-scheduler>Deterministic
+ * Priority SMP Scheduler</a>,
+ *
+ * * ``"MPS "`` for the <a
+ * href=https://docs.rtems.org/branches/master/c-user/scheduling_concepts.html#simple-priority-smp-scheduler>Simple
+ * Priority SMP Scheduler</a>,
+ *
+ * * ``"UCBS"`` for the <a
+ * href=https://docs.rtems.org/branches/master/c-user/scheduling_concepts.html#constant-bandwidth-server-scheduling-cbs>Constant
+ * Bandwidth Server Scheduling (CBS)</a>,
+ *
+ * * ``"UEDF"`` for the <a
+ * href=https://docs.rtems.org/branches/master/c-user/scheduling_concepts.html#earliest-deadline-first-scheduler>Earliest
+ * Deadline First Scheduler</a>,
+ *
+ * * ``"UPD "`` for the <a
+ * href=https://docs.rtems.org/branches/master/c-user/scheduling_concepts.html#deterministic-priority-scheduler>Deterministic
+ * Priority Scheduler</a>, and
+ *
+ * * ``"UPS "`` for the <a
+ * href=https://docs.rtems.org/branches/master/c-user/scheduling_concepts.html#simple-priority-scheduler>Simple
+ * Priority Scheduler</a>.
+ * @endparblock
+ *
+ * @par Value Constraints
+ * The value of this configuration option shall be a valid integer of type
+ * ::rtems_name.
+ *
+ * @par Notes
+ * @parblock
+ * This scheduler configuration option is an advanced configuration option.
+ * Think twice before you use it.
+ *
+ * Schedulers can be identified via rtems_scheduler_ident().
+ *
+ * Use rtems_build_name() to define the scheduler name.
+ * @endparblock
+ */
+#define CONFIGURE_SCHEDULER_NAME
+
+/**
+ * @brief This configuration option is a boolean feature define.
+ *
+ * In case this configuration option is defined, then <a
+ * href=https://docs.rtems.org/branches/master/c-user/scheduling_concepts.html#deterministic-priority-scheduler>Deterministic
+ * Priority Scheduler</a> algorithm is made available to the application.
+ *
+ * @par Default Configuration
+ * If this configuration option is undefined, then the described feature is not
+ * enabled.
+ *
+ * @par Notes
+ * @parblock
+ * This scheduler configuration option is an advanced configuration option.
+ * Think twice before you use it.
+ *
+ * In case no explicit <a
+ * href=https://docs.rtems.org/branches/master/c-user/config/scheduler-clustered.html>Clustered
+ * Scheduler Configuration</a> is present, then it is used as the scheduler for
+ * exactly one processor.
+ *
+ * This scheduler algorithm is the default when #CONFIGURE_MAXIMUM_PROCESSORS
+ * is exactly one.
+ *
+ * The memory allocated for this scheduler depends on the
+ * #CONFIGURE_MAXIMUM_PRIORITY configuration option.
+ * @endparblock
+ */
+#define CONFIGURE_SCHEDULER_PRIORITY
+
+/**
+ * @brief This configuration option is a boolean feature define.
+ *
+ * In case this configuration option is defined, then <a
+ * href=https://docs.rtems.org/branches/master/c-user/scheduling_concepts.html#arbitrary-processor-affinity-priority-smp-scheduler>Arbitrary
+ * Processor Affinity Priority SMP Scheduler</a> algorithm is made available to
+ * the application.
+ *
+ * @par Default Configuration
+ * If this configuration option is undefined, then the described feature is not
+ * enabled.
+ *
+ * @par Notes
+ * @parblock
+ * This scheduler configuration option is an advanced configuration option.
+ * Think twice before you use it.
+ *
+ * This scheduler algorithm is only available when RTEMS is built with SMP
+ * support enabled.
+ *
+ * In case no explicit <a
+ * href=https://docs.rtems.org/branches/master/c-user/config/scheduler-clustered.html>Clustered
+ * Scheduler Configuration</a> is present, then it is used as the scheduler for
+ * up to 32 processors.
+ *
+ * The memory allocated for this scheduler depends on the
+ * #CONFIGURE_MAXIMUM_PRIORITY configuration option.
+ * @endparblock
+ */
+#define CONFIGURE_SCHEDULER_PRIORITY_AFFINITY_SMP
+
+/**
+ * @brief This configuration option is a boolean feature define.
+ *
+ * In case this configuration option is defined, then <a
+ * href=https://docs.rtems.org/branches/master/c-user/scheduling_concepts.html#deterministic-priority-smp-scheduler>Deterministic
+ * Priority SMP Scheduler</a> algorithm is made available to the application.
+ *
+ * @par Default Configuration
+ * If this configuration option is undefined, then the described feature is not
+ * enabled.
+ *
+ * @par Notes
+ * @parblock
+ * This scheduler configuration option is an advanced configuration option.
+ * Think twice before you use it.
+ *
+ * This scheduler algorithm is only available when RTEMS is built with SMP
+ * support enabled.
+ *
+ * In case no explicit <a
+ * href=https://docs.rtems.org/branches/master/c-user/config/scheduler-clustered.html>Clustered
+ * Scheduler Configuration</a> is present, then it is used as the scheduler for
+ * up to 32 processors.
+ *
+ * The memory allocated for this scheduler depends on the
+ * #CONFIGURE_MAXIMUM_PRIORITY configuration option.
+ * @endparblock
+ */
+#define CONFIGURE_SCHEDULER_PRIORITY_SMP
+
+/**
+ * @brief This configuration option is a boolean feature define.
+ *
+ * In case this configuration option is defined, then <a
+ * href=https://docs.rtems.org/branches/master/c-user/scheduling_concepts.html#simple-priority-scheduler>Simple
+ * Priority Scheduler</a> algorithm is made available to the application.
+ *
+ * @par Default Configuration
+ * If this configuration option is undefined, then the described feature is not
+ * enabled.
+ *
+ * @par Notes
+ * @parblock
+ * This scheduler configuration option is an advanced configuration option.
+ * Think twice before you use it.
+ *
+ * In case no explicit <a
+ * href=https://docs.rtems.org/branches/master/c-user/config/scheduler-clustered.html>Clustered
+ * Scheduler Configuration</a> is present, then it is used as the scheduler for
+ * exactly one processor.
+ * @endparblock
+ */
+#define CONFIGURE_SCHEDULER_SIMPLE
+
+/**
+ * @brief This configuration option is a boolean feature define.
+ *
+ * In case this configuration option is defined, then <a
+ * href=https://docs.rtems.org/branches/master/c-user/scheduling_concepts.html#simple-priority-smp-scheduler>Simple
+ * Priority SMP Scheduler</a> algorithm is made available to the application.
+ * application.
+ *
+ * @par Default Configuration
+ * If this configuration option is undefined, then the described feature is not
+ * enabled.
+ *
+ * @par Notes
+ * @parblock
+ * This scheduler configuration option is an advanced configuration option.
+ * Think twice before you use it.
+ *
+ * This scheduler algorithm is only available when RTEMS is built with SMP
+ * support enabled.
+ *
+ * In case no explicit <a
+ * href=https://docs.rtems.org/branches/master/c-user/config/scheduler-clustered.html>Clustered
+ * Scheduler Configuration</a> is present, then it is used as the scheduler for
+ * up to 32 processors.
+ * @endparblock
+ */
+#define CONFIGURE_SCHEDULER_SIMPLE_SMP
+
+/**
+ * @brief This configuration option is a boolean feature define.
+ *
+ * In case this configuration option is defined, then Strong APA algorithm is
+ * made available to the application.
+ *
+ * @par Default Configuration
+ * If this configuration option is undefined, then the described feature is not
+ * enabled.
+ *
+ * @par Notes
+ * @parblock
+ * This scheduler configuration option is an advanced configuration option.
+ * Think twice before you use it.
+ *
+ * This scheduler algorithm is only available when RTEMS is built with SMP
+ * support enabled.
+ *
+ * This scheduler algorithm is not correctly implemented. Do not use it.
+ * @endparblock
+ */
+#define CONFIGURE_SCHEDULER_STRONG_APA
+
+/**
+ * @brief This configuration option is a boolean feature define.
+ *
+ * In case this configuration option is defined, then the user shall provide a
+ * scheduler algorithm to the application.
+ *
+ * @par Default Configuration
+ * If this configuration option is undefined, then the described feature is not
+ * enabled.
+ *
+ * @par Notes
+ * @parblock
+ * This scheduler configuration option is an advanced configuration option.
+ * Think twice before you use it.
+ *
+ * RTEMS allows the application to provide its own task/thread scheduling
+ * algorithm. In order to do this, one shall define
+ * ``CONFIGURE_SCHEDULER_USER`` to indicate the application provides its own
+ * scheduling algorithm. If ``CONFIGURE_SCHEDULER_USER`` is defined then the
+ * following additional macros shall be defined:
+ *
+ * * ``CONFIGURE_SCHEDULER`` shall be defined to a static definition of the
+ * scheduler data structures of the user scheduler.
+ *
+ * * ``CONFIGURE_SCHEDULER_TABLE_ENTRIES`` shall be defined to a scheduler
+ * table entry initializer for the user scheduler.
+ *
+ * * ``CONFIGURE_SCHEDULER_USER_PER_THREAD`` shall be defined to the type of
+ * the per-thread information of the user scheduler.
+ *
+ * At this time, the mechanics and requirements for writing a new scheduler are
+ * evolving and not fully documented. It is recommended that you look at the
+ * existing Deterministic Priority Scheduler in
+ * ``cpukit/score/src/schedulerpriority*.c`` for guidance. For guidance on the
+ * configuration macros, please examine ``cpukit/sapi/include/confdefs.h`` for
+ * how these are defined for the Deterministic Priority Scheduler.
+ * @endparblock
+ */
+#define CONFIGURE_SCHEDULER_USER
+
+/** @} */
+
+/**
+ * @defgroup RTEMSApplConfigTaskStackAllocatorConfiguration \
+ * Task Stack Allocator Configuration
+ *
+ * @ingroup RTEMSApplConfig
+ *
+ * This section describes configuration options related to the task stack
+ * allocator. RTEMS allows the application or BSP to define its own allocation
+ * and deallocation methods for task stacks. This can be used to place task
+ * stacks in special areas of memory or to utilize a Memory Management Unit so
+ * that stack overflows are detected in hardware.
+ *
+ * @{
+ */
+
+/**
+ * @brief This configuration option is an initializer define.
+ *
+ * The value of this configuration option initializes the stack allocator
+ * allocate handler.
+ *
+ * @par Default Value
+ * The default value is ``_Workspace_Allocate``, which indicates that task
+ * stacks will be allocated from the RTEMS Workspace.
+ *
+ * @par Value Constraints
+ * The value of this configuration option shall be defined to a valid function
+ * pointer of the type ``void *( *allocate )( size_t )``.
+ *
+ * @par Notes
+ * @parblock
+ * A correctly configured system shall configure the following to be
+ * consistent:
+ *
+ * * #CONFIGURE_TASK_STACK_ALLOCATOR_INIT
+ *
+ * * ``CONFIGURE_TASK_STACK_ALLOCATOR``
+ *
+ * * #CONFIGURE_TASK_STACK_DEALLOCATOR
+ * @endparblock
+ */
+#define CONFIGURE_TASK_STACK_ALLOCATOR
+
+/**
+ * @brief This configuration option is a boolean feature define.
+ *
+ * In case this configuration option is defined, then the system is informed
+ * that the task stack allocator does not use the RTEMS Workspace.
+ *
+ * @par Default Configuration
+ * If this configuration option is undefined, then the described feature is not
+ * enabled.
+ *
+ * @par Notes
+ * This configuration option may be used if a custom task stack allocator is
+ * configured, see #CONFIGURE_TASK_STACK_ALLOCATOR.
+ */
+#define CONFIGURE_TASK_STACK_ALLOCATOR_AVOIDS_WORK_SPACE
+
+/**
+ * @brief This configuration option is an initializer define.
+ *
+ * The value of this configuration option initializes the stack allocator
+ * initialization handler.
+ *
+ * @par Default Value
+ * The default value is <a
+ * href="https://en.cppreference.com/w/c/types/NULL">NULL</a>.
+ *
+ * @par Value Constraints
+ * The value of this configuration option shall be defined to a valid function
+ * pointer of the type ``void ( *initialize )( size_t )`` or to <a
+ * href="https://en.cppreference.com/w/c/types/NULL">NULL</a>.
+ *
+ * @par Notes
+ * @parblock
+ * A correctly configured system shall configure the following to be
+ * consistent:
+ *
+ * * ``CONFIGURE_TASK_STACK_ALLOCATOR_INIT``
+ *
+ * * #CONFIGURE_TASK_STACK_ALLOCATOR
+ *
+ * * #CONFIGURE_TASK_STACK_DEALLOCATOR
+ * @endparblock
+ */
+#define CONFIGURE_TASK_STACK_ALLOCATOR_INIT
+
+/**
+ * @brief This configuration option is an initializer define.
+ *
+ * The value of this configuration option initializes the stack allocator
+ * deallocate handler.
+ *
+ * @par Default Value
+ * The default value is ``_Workspace_Free``, which indicates that task stacks
+ * will be allocated from the RTEMS Workspace.
+ *
+ * @par Value Constraints
+ * The value of this configuration option shall be defined to a valid function
+ * pointer of the type ``void ( *deallocate )( void * )``.
+ *
+ * @par Notes
+ * @parblock
+ * A correctly configured system shall configure the following to be
+ * consistent:
+ *
+ * * #CONFIGURE_TASK_STACK_ALLOCATOR_INIT
+ *
+ * * #CONFIGURE_TASK_STACK_ALLOCATOR
+ *
+ * * ``CONFIGURE_TASK_STACK_DEALLOCATOR``
+ * @endparblock
+ */
+#define CONFIGURE_TASK_STACK_DEALLOCATOR
+
+/**
+ * @brief This configuration option is an initializer define.
+ *
+ * The value of this configuration option is used to calculate the task stack
+ * space size.
+ *
+ * @par Default Value
+ * The default value is a macro which supports the system heap allocator.
+ *
+ * @par Value Constraints
+ * The value of this configuration option shall be defined to a macro which
+ * accepts exactly one parameter and returns an unsigned integer. The
+ * parameter will be an allocation size and the macro shall return this size
+ * plus the overhead of the allocator to manage an allocation request for this
+ * size.
+ *
+ * @par Notes
+ * This configuration option may be used if a custom task stack allocator is
+ * configured, see #CONFIGURE_TASK_STACK_ALLOCATOR.
+ */
+#define CONFIGURE_TASK_STACK_FROM_ALLOCATOR
+
+/** @} */
diff --git a/cpukit/doxygen/top-level-groups.h b/cpukit/doxygen/top-level-groups.h
new file mode 100644
index 0000000000..c1a91a3482
--- /dev/null
+++ b/cpukit/doxygen/top-level-groups.h
@@ -0,0 +1,50 @@
+/* SPDX-License-Identifier: BSD-2-Clause */
+
+/*
+ * Copyright (C) 2019, 2020 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.
+ */
+
+/**
+ * @defgroup RTEMSAPI API
+ *
+ * @brief API
+ */
+
+/**
+ * @defgroup RTEMSDeviceDrivers Device Drivers
+ *
+ * @brief Device Drivers
+ */
+
+/**
+ * @defgroup RTEMSInternal Internal
+ *
+ * @brief RTEMS Implementation.
+ */
+
+/**
+ * @defgroup RTEMSTestSuites Test Suites
+ *
+ * @brief Collection of Test Suites
+ */
diff --git a/cpukit/headers.am b/cpukit/headers.am
index fcf679f09d..77df5ecb4c 100644
--- a/cpukit/headers.am
+++ b/cpukit/headers.am
@@ -17,7 +17,6 @@ include_HEADERS += include/poll.h
include_HEADERS += include/rtems.h
include_HEADERS += include/sha256.h
include_HEADERS += include/sha512.h
-include_HEADERS += include/t.h
include_HEADERS += include/xz.h
include_HEADERS += include/zconf.h
include_HEADERS += include/zlib.h
@@ -166,11 +165,11 @@ include_rtems_HEADERS += include/rtems/status-checks.h
include_rtems_HEADERS += include/rtems/stdio-redirect.h
include_rtems_HEADERS += include/rtems/stringto.h
include_rtems_HEADERS += include/rtems/sysinit.h
-include_rtems_HEADERS += include/rtems/system.h
include_rtems_HEADERS += include/rtems/telnetd.h
include_rtems_HEADERS += include/rtems/termios_printk.h
include_rtems_HEADERS += include/rtems/termios_printk_cnf.h
include_rtems_HEADERS += include/rtems/termiostypes.h
+include_rtems_HEADERS += include/rtems/test-info.h
include_rtems_HEADERS += include/rtems/test.h
include_rtems_HEADERS += include/rtems/tftp.h
include_rtems_HEADERS += include/rtems/thread.h
@@ -277,6 +276,7 @@ include_rtems_rtems_HEADERS += include/rtems/rtems/modesimpl.h
include_rtems_rtems_HEADERS += include/rtems/rtems/mp.h
include_rtems_rtems_HEADERS += include/rtems/rtems/msgmp.h
include_rtems_rtems_HEADERS += include/rtems/rtems/object.h
+include_rtems_rtems_HEADERS += include/rtems/rtems/objectimpl.h
include_rtems_rtems_HEADERS += include/rtems/rtems/options.h
include_rtems_rtems_HEADERS += include/rtems/rtems/optionsimpl.h
include_rtems_rtems_HEADERS += include/rtems/rtems/part.h
@@ -343,6 +343,7 @@ include_rtems_score_HEADERS += include/rtems/score/coresem.h
include_rtems_score_HEADERS += include/rtems/score/coresemimpl.h
include_rtems_score_HEADERS += include/rtems/score/cpustdatomic.h
include_rtems_score_HEADERS += include/rtems/score/freechain.h
+include_rtems_score_HEADERS += include/rtems/score/freechainimpl.h
include_rtems_score_HEADERS += include/rtems/score/heap.h
include_rtems_score_HEADERS += include/rtems/score/heapimpl.h
include_rtems_score_HEADERS += include/rtems/score/heapinfo.h
diff --git a/cpukit/include/adainclude/rtems.ads b/cpukit/include/adainclude/rtems.ads
index 5069c36011..0b4b3e7e5f 100644
--- a/cpukit/include/adainclude/rtems.ads
+++ b/cpukit/include/adainclude/rtems.ads
@@ -201,6 +201,15 @@ pragma Elaborate_Body (RTEMS);
Inherit_Priority : constant RTEMS.Attribute := 16#00000040#;
No_Priority_Ceiling : constant RTEMS.Attribute := 16#00000000#;
Priority_Ceiling : constant RTEMS.Attribute := 16#00000080#;
+ No_Multiprocessor_Resource_Sharing
+ : constant RTEMS.Attribute := 16#00000000#;
+ Multiprocessor_Resource_Sharing
+ : constant RTEMS.Attribute := 16#00000100#;
+ Barrier_Manual_Release : constant RTEMS.Attribute := 16#00000000#;
+ Barrier_Automatic_Release
+ : constant RTEMS.Attribute := 16#00000200#;
+ Application_Task : constant RTEMS.Attribute := 16#00000000#;
+ System_Task : constant RTEMS.Attribute := 16#00008000#;
function Interrupt_Level (
Level : in RTEMS.Unsigned32
diff --git a/cpukit/include/dev/serial/sc16is752.h b/cpukit/include/dev/serial/sc16is752.h
index ff9f4b02e7..fbda5d5cc4 100644
--- a/cpukit/include/dev/serial/sc16is752.h
+++ b/cpukit/include/dev/serial/sc16is752.h
@@ -231,7 +231,7 @@ typedef struct {
const char *bus_path;
} sc16is752_i2c_context;
-const rtems_termios_device_handler sc16is752_termios_handler;
+extern const rtems_termios_device_handler sc16is752_termios_handler;
/**
* @brief The interrupt handler for receive and transmit operations.
diff --git a/cpukit/include/rtems.h b/cpukit/include/rtems.h
index 1b91965563..cda2bd5b24 100644
--- a/cpukit/include/rtems.h
+++ b/cpukit/include/rtems.h
@@ -1,197 +1,94 @@
+/* SPDX-License-Identifier: BSD-2-Clause */
+
/**
* @file
- *
+ *
* @ingroup RTEMSAPIClassic
*
- * the Public Interface to the RTEMS Classic API
+ * @brief This header file defines the RTEMS Classic API.
*/
-/* COPYRIGHT (c) 1989-2008.
- * On-Line Applications Research Corporation (OAR).
+/*
+ * Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+ * Copyright (C) 1988, 2008 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 was automatically generated. Do not edit it manually.
+ * Please have a look at
*
- * 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.
+ * https://docs.rtems.org/branches/master/eng/req/howto.html
+ *
+ * for information how to maintain and re-generate this file.
*/
#ifndef _RTEMS_H
#define _RTEMS_H
-/**
- * @defgroup RTEMSAPIClassic Classic
- *
- * @ingroup RTEMSAPI
- *
- * @brief RTEMS Classic API definitions and modules.
- */
-/** @{ */
-
-#include <rtems/system.h>
-#include <rtems/rtems/status.h>
-#include <rtems/rtems/types.h>
-
#include <rtems/config.h>
+#include <rtems/extension.h>
+#include <rtems/fatal.h>
#include <rtems/init.h>
-#include <rtems/rtems/options.h>
-#include <rtems/rtems/tasks.h>
-#include <rtems/rtems/intr.h>
+#include <rtems/io.h>
#include <rtems/rtems/barrier.h>
#include <rtems/rtems/cache.h>
#include <rtems/rtems/clock.h>
-#include <rtems/extension.h>
-#include <rtems/rtems/timer.h>
-#include <rtems/rtems/sem.h>
-#include <rtems/rtems/message.h>
-#include <rtems/rtems/event.h>
-#include <rtems/rtems/signal.h>
+#include <rtems/rtems/dpmem.h>
#include <rtems/rtems/event.h>
+#include <rtems/rtems/intr.h>
+#include <rtems/rtems/message.h>
#include <rtems/rtems/object.h>
+#include <rtems/rtems/options.h>
#include <rtems/rtems/part.h>
-#include <rtems/rtems/region.h>
-#include <rtems/rtems/dpmem.h>
-#include <rtems/io.h>
-#include <rtems/fatal.h>
#include <rtems/rtems/ratemon.h>
+#include <rtems/rtems/region.h>
+#include <rtems/rtems/sem.h>
+#include <rtems/rtems/signal.h>
+#include <rtems/rtems/status.h>
+#include <rtems/rtems/support.h>
+#include <rtems/rtems/tasks.h>
+#include <rtems/rtems/timer.h>
+#include <rtems/rtems/types.h>
+
#if defined(RTEMS_MULTIPROCESSING)
-#include <rtems/rtems/mp.h>
+ #include <rtems/rtems/mp.h>
#endif
-#include <rtems/rtems/support.h>
-#include <rtems/score/stack.h>
-
#ifdef __cplusplus
extern "C" {
#endif
/**
- * @brief Returns the pointer to the RTEMS copyright notice.
- */
-const char *rtems_get_copyright_notice(void);
-
-/**
- * @brief Returns the pointer to the RTEMS version string.
- */
-const char *rtems_get_version_string(void);
-
-/**
- * @brief Indicates whether this processor variant has hardware floating point
- * support.
- */
-#define RTEMS_HAS_HARDWARE_FP CPU_HARDWARE_FP
-
-/**********************************************************************
- * CONSTANTS WHICH MAY BE USED IN OBJECT NAME TO ID SEARCHES
- **********************************************************************/
-
-/**
- * @brief Indicates that a search is across all nodes.
- */
-#define RTEMS_SEARCH_ALL_NODES OBJECTS_SEARCH_ALL_NODES
-
-/**
- * @brief Indicates that a search is across all nodes except the one the call
- * is made from.
- */
-#define RTEMS_SEARCH_OTHER_NODES OBJECTS_SEARCH_OTHER_NODES
-
-/**
- * @brief Indicates that the search is to be restricted to the local node.
- */
-#define RTEMS_SEARCH_LOCAL_NODE OBJECTS_SEARCH_LOCAL_NODE
-
-/**
- * @brief Indicates that the caller wants to obtain the name of the currently
- * executing thread.
- *
- * This constant is only meaningful when obtaining the name of a task.
- */
-#define RTEMS_WHO_AM_I OBJECTS_WHO_AM_I
-
-/**********************************************************************
- * Parameters and return Id's for _Objects_Get_next
- **********************************************************************/
-
-/**
- * @brief Lowest valid index value for the index portion of an object
- * identifier.
- */
-#define RTEMS_OBJECT_ID_INITIAL_INDEX OBJECTS_ID_INITIAL_INDEX
-
-/**
- * @brief Maximum valid index value for the index portion of an object
- * identifier.
- */
-#define RTEMS_OBJECT_ID_FINAL_INDEX OBJECTS_ID_FINAL_INDEX
-
-/**
- * @brief Returns the identifier of the object with the lowest valid index
- * value.
- *
- * The object is specified by the API @a _api, the object class @a _class and
- * the node @a _node where the object resides.
- */
-#define RTEMS_OBJECT_ID_INITIAL(_api, _class, _node) \
- OBJECTS_ID_INITIAL(_api, _class, _node)
-
-/**
- * @brief Maximum valid object identifier.
- */
-#define RTEMS_OBJECT_ID_FINAL OBJECTS_ID_FINAL
-
-/**
- * @brief Minimum stack size which every thread must exceed.
- *
- * It is the minimum stack size recommended for use on this processor. This
- * value is selected by the RTEMS developers conservatively to minimize the
- * risk of blown stacks for most user applications. Using this constant when
- * specifying the task stack size, indicates that the stack size will be at
- * least RTEMS_MINIMUM_STACK_SIZE bytes in size. If the user configured minimum
- * stack size is larger than the recommended minimum, then it will be used.
- */
-#define RTEMS_MINIMUM_STACK_SIZE STACK_MINIMUM_SIZE
-
-/**
- * @brief Specifies that the task should be created with the configured minimum
- * stack size.
- *
- * Using this constant when specifying the task stack size indicates that this
- * task is to be created with a stack size of the minimum stack size that was
- * configured by the application. If not explicitly configured by the
- * application, the default configured minimum stack size is the processor
- * dependent value RTEMS_MINIMUM_STACK_SIZE. Since this uses the configured
- * minimum stack size value, you may get a stack size that is smaller or larger
- * than the recommended minimum. This can be used to provide large stacks for
- * all tasks on complex applications or small stacks on applications that are
- * trying to conserve memory.
- */
-#define RTEMS_CONFIGURED_MINIMUM_STACK_SIZE 0
-
-/**
- * @brief Constant for indefinite wait.
+ * @defgroup RTEMSAPIClassic Classic
*
- * This is actually an illegal interval value.
- */
-#define RTEMS_NO_TIMEOUT ((rtems_interval) WATCHDOG_NO_TIMEOUT)
-
-/**
- * @brief An MPCI must support packets of at least this size.
- */
-#define RTEMS_MINIMUM_PACKET_SIZE MP_PACKET_MINIMUM_PACKET_SIZE
-
-/**
- * @brief Defines the count of @c uint32_t numbers in a packet which must be
- * converted to native format in a heterogeneous system.
+ * @ingroup RTEMSAPI
*
- * In packets longer than this value, some of the extra data may be a user
- * message buffer which is not automatically endian swapped.
+ * @brief This group contains the Classic API groups.
*/
-#define RTEMS_MINIMUN_HETERO_CONVERSION MP_PACKET_MINIMUN_HETERO_CONVERSION
#ifdef __cplusplus
}
#endif
-/** @} */
-
-#endif
-/* end of include file */
+#endif /* _RTEMS_H */
diff --git a/cpukit/include/rtems/confdefs/libio.h b/cpukit/include/rtems/confdefs/libio.h
index e986262e3e..8f43c490b1 100644
--- a/cpukit/include/rtems/confdefs/libio.h
+++ b/cpukit/include/rtems/confdefs/libio.h
@@ -43,7 +43,6 @@
#ifdef CONFIGURE_INIT
#include <rtems/confdefs/bsp.h>
-#include <rtems/libio.h>
#include <rtems/sysinit.h>
#ifdef CONFIGURE_FILESYSTEM_ALL
@@ -86,6 +85,15 @@
#define CONFIGURE_IMFS_DISABLE_UTIME
#endif
+#ifndef CONFIGURE_MAXIMUM_FILE_DESCRIPTORS
+ #define CONFIGURE_MAXIMUM_FILE_DESCRIPTORS 3
+#endif
+
+#if !defined(CONFIGURE_APPLICATION_DISABLE_FILESYSTEM) || \
+ CONFIGURE_MAXIMUM_FILE_DESCRIPTORS > 0
+ #include <rtems/libio.h>
+#endif
+
#ifdef CONFIGURE_APPLICATION_DISABLE_FILESYSTEM
#ifdef CONFIGURE_USE_DEVFS_AS_BASE_FILESYSTEM
#error "CONFIGURE_APPLICATION_DISABLE_FILESYSTEM cannot be used together with CONFIGURE_USE_DEVFS_AS_BASE_FILESYSTEM"
@@ -122,10 +130,10 @@
#ifdef CONFIGURE_FILESYSTEM_TFTPFS
#error "CONFIGURE_APPLICATION_DISABLE_FILESYSTEM cannot be used together with CONFIGURE_FILESYSTEM_TFTPFS"
#endif
+#else
+ #include <rtems/imfs.h>
#endif
-#include <rtems/imfs.h>
-
#ifdef CONFIGURE_FILESYSTEM_DOSFS
#include <rtems/dosfs.h>
#endif
@@ -316,13 +324,11 @@ RTEMS_SYSINIT_ITEM(
#endif /* !CONFIGURE_APPLICATION_DISABLE_FILESYSTEM */
-#ifndef CONFIGURE_MAXIMUM_FILE_DESCRIPTORS
- #define CONFIGURE_MAXIMUM_FILE_DESCRIPTORS 3
-#endif
-
-rtems_libio_t rtems_libio_iops[ CONFIGURE_MAXIMUM_FILE_DESCRIPTORS ];
+#if CONFIGURE_MAXIMUM_FILE_DESCRIPTORS > 0
+ rtems_libio_t rtems_libio_iops[ CONFIGURE_MAXIMUM_FILE_DESCRIPTORS ];
-const uint32_t rtems_libio_number_iops = RTEMS_ARRAY_SIZE( rtems_libio_iops );
+ const uint32_t rtems_libio_number_iops = RTEMS_ARRAY_SIZE( rtems_libio_iops );
+#endif
#ifdef __cplusplus
}
diff --git a/cpukit/include/rtems/confdefs/mpci.h b/cpukit/include/rtems/confdefs/mpci.h
index e4d9737b31..0a9be4a2ea 100644
--- a/cpukit/include/rtems/confdefs/mpci.h
+++ b/cpukit/include/rtems/confdefs/mpci.h
@@ -6,9 +6,6 @@
* @ingroup RTEMSApplicationConfiguration
*
* @brief Evaluate MPCI Configuration Options
- *
- * This header file defines _CONFIGURE_MPCI_RECEIVE_SERVER_COUNT for use by
- * other configuration header files.
*/
/*
@@ -49,6 +46,8 @@
#ifdef CONFIGURE_MP_APPLICATION
+#include <rtems/confdefs/threads.h>
+
#ifndef CONFIGURE_EXTRA_MPCI_RECEIVE_SERVER_STACK
#define CONFIGURE_EXTRA_MPCI_RECEIVE_SERVER_STACK 0
#endif
@@ -83,8 +82,6 @@
#error "CONFIGURE_MP_NODE_NUMBER must be less than or equal to CONFIGURE_MP_MAXIMUM_NODES"
#endif
-#define _CONFIGURE_MPCI_RECEIVE_SERVER_COUNT 1
-
#ifdef __cplusplus
extern "C" {
#endif
@@ -126,10 +123,6 @@ RTEMS_SECTION( ".rtemsstack.mpci" );
}
#endif
-#else /* CONFIGURE_MP_APPLICATION */
-
-#define _CONFIGURE_MPCI_RECEIVE_SERVER_COUNT 0
-
#endif /* CONFIGURE_MP_APPLICATION */
#else /* RTEMS_MULTIPROCESSING */
@@ -138,8 +131,6 @@ RTEMS_SECTION( ".rtemsstack.mpci" );
#error "CONFIGURE_MP_APPLICATION must not be defined if multiprocessing is disabled"
#endif
-#define _CONFIGURE_MPCI_RECEIVE_SERVER_COUNT 0
-
#endif /* RTEMS_MULTIPROCESSING */
#endif /* CONFIGURE_INIT */
diff --git a/cpukit/include/rtems/confdefs/threads.h b/cpukit/include/rtems/confdefs/threads.h
index 7288243ead..8f72407695 100644
--- a/cpukit/include/rtems/confdefs/threads.h
+++ b/cpukit/include/rtems/confdefs/threads.h
@@ -44,20 +44,30 @@
#include <rtems/confdefs/bdbuf.h>
#include <rtems/confdefs/extensions.h>
-#include <rtems/confdefs/mpci.h>
#include <rtems/confdefs/percpu.h>
#include <rtems/confdefs/scheduler.h>
#include <rtems/confdefs/unlimited.h>
#include <rtems/score/thread.h>
-#include <rtems/posix/threadsup.h>
#include <rtems/rtems/tasksdata.h>
+#ifdef RTEMS_POSIX_API
+ #include <rtems/posix/threadsup.h>
+#endif
+
#ifndef CONFIGURE_MAXIMUM_TASKS
#define CONFIGURE_MAXIMUM_TASKS 0
#endif
#define _CONFIGURE_TASKS ( CONFIGURE_MAXIMUM_TASKS + _CONFIGURE_LIBBLOCK_TASKS )
+#ifndef CONFIGURE_MINIMUM_TASKS_WITH_USER_PROVIDED_STORAGE
+ #define CONFIGURE_MINIMUM_TASKS_WITH_USER_PROVIDED_STORAGE 0
+#endif
+
+#if CONFIGURE_MINIMUM_TASKS_WITH_USER_PROVIDED_STORAGE > CONFIGURE_MAXIMUM_TASKS
+ #error "CONFIGURE_MINIMUM_TASKS_WITH_USER_PROVIDED_STORAGE shall be less than or equal to CONFIGURE_MAXIMUM_TASKS"
+#endif
+
#ifndef CONFIGURE_MAXIMUM_POSIX_THREADS
#define CONFIGURE_MAXIMUM_POSIX_THREADS 0
#endif
@@ -82,6 +92,10 @@
#define CONFIGURE_MAXIMUM_THREAD_NAME_SIZE THREAD_DEFAULT_MAXIMUM_NAME_SIZE
#endif
+#ifndef CONFIGURE_MAXIMUM_THREAD_LOCAL_STORAGE_SIZE
+ #define CONFIGURE_MAXIMUM_THREAD_LOCAL_STORAGE_SIZE 0
+#endif
+
#ifdef __cplusplus
extern "C" {
#endif
@@ -123,6 +137,9 @@ typedef union {
const size_t _Thread_Maximum_name_size = CONFIGURE_MAXIMUM_THREAD_NAME_SIZE;
+const size_t _Thread_Maximum_TLS_size =
+ CONFIGURE_MAXIMUM_THREAD_LOCAL_STORAGE_SIZE;
+
struct Thread_Configured_control {
Thread_Control Control;
#if CONFIGURE_MAXIMUM_USER_EXTENSIONS > 0
@@ -197,6 +214,12 @@ const size_t _Thread_Initial_thread_count =
rtems_resource_maximum_per_allocation( _CONFIGURE_TASKS ) +
rtems_resource_maximum_per_allocation( CONFIGURE_MAXIMUM_POSIX_THREADS );
+#if defined(RTEMS_MULTIPROCESSING) && defined(CONFIGURE_MP_APPLICATION)
+ #define _CONFIGURE_MPCI_RECEIVE_SERVER_COUNT 1
+#else
+ #define _CONFIGURE_MPCI_RECEIVE_SERVER_COUNT 0
+#endif
+
THREAD_INFORMATION_DEFINE(
_Thread,
OBJECTS_INTERNAL_API,
diff --git a/cpukit/include/rtems/confdefs/wkspace.h b/cpukit/include/rtems/confdefs/wkspace.h
index 484dde20ea..3b464899dc 100644
--- a/cpukit/include/rtems/confdefs/wkspace.h
+++ b/cpukit/include/rtems/confdefs/wkspace.h
@@ -100,7 +100,9 @@
+ _CONFIGURE_POSIX_INIT_THREAD_STACK_EXTRA \
+ _CONFIGURE_LIBBLOCK_TASKS_STACK_EXTRA \
+ CONFIGURE_EXTRA_TASK_STACKS \
- + rtems_resource_maximum_per_allocation( _CONFIGURE_TASKS ) \
+ + rtems_resource_maximum_per_allocation( \
+ _CONFIGURE_TASKS - CONFIGURE_MINIMUM_TASKS_WITH_USER_PROVIDED_STORAGE \
+ ) \
* _Configure_From_stackspace( CONFIGURE_MINIMUM_TASK_STACK_SIZE ) \
+ rtems_resource_maximum_per_allocation( CONFIGURE_MAXIMUM_POSIX_THREADS ) \
* _Configure_From_stackspace( CONFIGURE_MINIMUM_POSIX_THREAD_STACK_SIZE ) \
@@ -150,6 +152,12 @@ const uintptr_t _Stack_Space_size = _CONFIGURE_STACK_SPACE_SIZE;
const Stack_Allocator_free _Stack_Allocator_free =
CONFIGURE_TASK_STACK_DEALLOCATOR;
+
+ RTEMS_SYSINIT_ITEM(
+ _Stack_Allocator_do_initialize,
+ RTEMS_SYSINIT_DIRTY_MEMORY,
+ RTEMS_SYSINIT_ORDER_MIDDLE
+ );
#elif defined(CONFIGURE_TASK_STACK_ALLOCATOR) \
|| defined(CONFIGURE_TASK_STACK_DEALLOCATOR)
#error "CONFIGURE_TASK_STACK_ALLOCATOR and CONFIGURE_TASK_STACK_DEALLOCATOR must be both defined or both undefined"
diff --git a/cpukit/include/rtems/config.h b/cpukit/include/rtems/config.h
index e82c7abf11..1fbcf22f2e 100644
--- a/cpukit/include/rtems/config.h
+++ b/cpukit/include/rtems/config.h
@@ -27,6 +27,7 @@
* the configuration table.
*/
+#include <rtems/score/cpu.h>
#include <rtems/score/object.h>
#include <rtems/score/isr.h>
#include <rtems/score/memory.h>
@@ -164,6 +165,22 @@ uint32_t rtems_configuration_get_maximum_extensions( void );
#define rtems_configuration_get_maximum_processors() \
(_SMP_Processor_configured_maximum)
+/**
+ * @brief Returns the pointer to the RTEMS copyright notice.
+ */
+const char *rtems_get_copyright_notice(void);
+
+/**
+ * @brief Returns the pointer to the RTEMS version string.
+ */
+const char *rtems_get_version_string(void);
+
+/**
+ * @brief Indicates whether this processor variant has hardware floating point
+ * support.
+ */
+#define RTEMS_HAS_HARDWARE_FP CPU_HARDWARE_FP
+
#ifdef __cplusplus
}
#endif
diff --git a/cpukit/include/rtems/dosfs.h b/cpukit/include/rtems/dosfs.h
index 7691ed7e43..70347f0c05 100644
--- a/cpukit/include/rtems/dosfs.h
+++ b/cpukit/include/rtems/dosfs.h
@@ -214,6 +214,9 @@ typedef struct {
/**
* @brief Converter implementation for new file system instance.
*
+ * Note: If you pass a converter to mount, you have to destroy it yourself if
+ * mount failed. In a good case it is destroyed at unmount.
+ *
* Before converters have been added to the RTEMS implementation of the FAT
* file system, the implementation was:
* - Short names were saved in code page format (as is still the case).
@@ -270,6 +273,10 @@ typedef struct {
* RTEMS_FILESYSTEM_READ_WRITE,
* &mount_opts
* );
+ *
+ * if (rv != 0) {
+ * (*mount_opts.converter->handler->destroy)(mount_opts.converter);
+ * }
* } else {
* rv = -1;
* errno = ENOMEM;
diff --git a/cpukit/include/rtems/extension.h b/cpukit/include/rtems/extension.h
index ec9ad7f83f..59d4839bf4 100644
--- a/cpukit/include/rtems/extension.h
+++ b/cpukit/include/rtems/extension.h
@@ -26,9 +26,6 @@
extern "C" {
#endif
-typedef User_extensions_routine
- rtems_extension RTEMS_DEPRECATED;
-
/**
* @defgroup ClassicUserExtensions User Extensions
*
diff --git a/cpukit/include/rtems/io.h b/cpukit/include/rtems/io.h
index 972a0aa431..f4066b647a 100644
--- a/cpukit/include/rtems/io.h
+++ b/cpukit/include/rtems/io.h
@@ -4,7 +4,7 @@
* @brief Classic Input/Output Manager API
*
* This file emulates the old Classic RTEMS IO manager directives
- * which register and lookup names using the in-memory filesystem.
+ * which register names using the in-memory filesystem.
*/
/*
@@ -231,21 +231,6 @@ rtems_status_code rtems_io_control(
/** @} */
-typedef struct {
- const char *device_name;
- size_t device_name_length;
- rtems_device_major_number major;
- rtems_device_minor_number minor;
-} rtems_driver_name_t;
-
-/**
- * @deprecated Use stat() instead.
- */
-rtems_status_code rtems_io_lookup_name(
- const char *name,
- rtems_driver_name_t *device_info
-) RTEMS_DEPRECATED;
-
#ifdef __cplusplus
}
#endif
diff --git a/cpukit/include/rtems/irq-extension.h b/cpukit/include/rtems/irq-extension.h
index 0d77b320bc..2105194c00 100644
--- a/cpukit/include/rtems/irq-extension.h
+++ b/cpukit/include/rtems/irq-extension.h
@@ -9,13 +9,7 @@
/*
* Based on concepts of Pavel Pisa, Till Straumann and Eric Valette.
*
- * Copyright (C) 2008, 2019 embedded brains GmbH
- *
- * embedded brains GmbH
- * Dornierstr. 4
- * 82178 Puchheim
- * Germany
- * <rtems@embedded-brains.de>
+ * Copyright (C) 2008, 2020 embedded brains GmbH (http://www.embedded-brains.de)
*
* The license and distribution terms for this file may be
* found in the file LICENSE in this distribution or at
@@ -260,6 +254,76 @@ typedef struct rtems_interrupt_server_action {
#define RTEMS_INTERRUPT_SERVER_DEFAULT 0
/**
+ * @brief An interrupt server control.
+ *
+ * This structure must be treated as an opaque data type. Members must not be
+ * accessed directly.
+ *
+ * @see rtems_interrupt_server_create()
+ */
+typedef struct rtems_interrupt_server_control {
+ RTEMS_INTERRUPT_LOCK_MEMBER( lock )
+ rtems_chain_control entries;
+ rtems_id server;
+ unsigned long errors;
+ uint32_t index;
+ rtems_chain_node node;
+ void ( *destroy )( struct rtems_interrupt_server_control * );
+} rtems_interrupt_server_control;
+
+/**
+ * @brief An interrupt server configuration.
+ *
+ * @see rtems_interrupt_server_create()
+ */
+typedef struct {
+ /**
+ * @brief The task name of the interrupt server.
+ */
+ rtems_name name;
+
+ /**
+ * @brief The initial task priority of the interrupt server.
+ */
+ rtems_task_priority priority;
+
+ /**
+ * @brief The task storage area of the interrupt server.
+ *
+ * It shall be NULL for interrupt servers created by
+ * rtems_interrupt_server_create().
+ */
+ void *storage_area;
+
+ /**
+ * @brief The task storage size of the interrupt server.
+ *
+ * For interrupt servers created by rtems_interrupt_server_create() this is
+ * the task stack size.
+ */
+ size_t storage_size;
+
+ /**
+ * @brief The initial task modes of the interrupt server.
+ */
+ rtems_mode modes;
+
+ /**
+ * @brief The task attributes of the interrupt server.
+ */
+ rtems_attribute attributes;
+
+ /**
+ * @brief An optional handler to destroy the interrupt server control handed
+ * over to rtems_interrupt_server_create().
+ *
+ * This handler is called in the context of the interrupt server to be
+ * deleted, see also rtems_interrupt_server_delete().
+ */
+ void ( *destroy )( rtems_interrupt_server_control * );
+} rtems_interrupt_server_config;
+
+/**
* @brief An interrupt server entry.
*
* This structure must be treated as an opaque data type. Members must not be
@@ -309,16 +373,19 @@ typedef struct {
*
* The server count pointer @a server_count may be @a NULL.
*
+ * The task name of interrupt servers created by this function is
+ * rtems_build_name( 'I', 'R', 'Q', 'S' ).
+ *
* This function may block.
*
- * @see rtems_task_create().
+ * @retval RTEMS_SUCCESSFUL The operation was successful.
*
- * @retval RTEMS_SUCCESSFUL Successful operation.
- * @retval RTEMS_INCORRECT_STATE The interrupt servers are not initialized.
- * @retval RTEMS_NO_MEMORY Not enough memory.
- * @retval RTEMS_TOO_MANY No free task available to create at least one server task.
- * @retval RTEMS_UNSATISFIED Task stack size too large.
- * @retval RTEMS_INVALID_PRIORITY Invalid task priority.
+ * @retval RTEMS_INCORRECT_STATE The interrupt servers were already initialized.
+ *
+ * @return The function uses rtems_task_create(). If this operation is not
+ * successful, then its status code is returned.
+ *
+ * @see rtems_interrupt_server_create() and rtems_interrupt_server_delete().
*/
rtems_status_code rtems_interrupt_server_initialize(
rtems_task_priority priority,
@@ -329,6 +396,54 @@ rtems_status_code rtems_interrupt_server_initialize(
);
/**
+ * @brief Creates an interrupt server.
+ *
+ * This function may block.
+ *
+ * @param[out] control is the interrupt server control. The ownership of this
+ * structure is transferred from the caller of this function to the interrupt
+ * server management.
+ *
+ * @param config is the interrupt server configuration.
+ *
+ * @param[out] server_index is the pointer to a server index variable. The
+ * index of the built interrupt server will be stored in the referenced
+ * variable if the operation was successful.
+ *
+ * @retval RTEMS_SUCCESSFUL The operation was successful.
+ *
+ * @return The function uses rtems_task_create(). If this operation is not
+ * successful, then its status code is returned.
+ *
+ * @see rtems_interrupt_server_initialize() and
+ * rtems_interrupt_server_delete().
+ */
+rtems_status_code rtems_interrupt_server_create(
+ rtems_interrupt_server_control *control,
+ const rtems_interrupt_server_config *config,
+ uint32_t *server_index
+);
+
+/**
+ * @brief Destroys the interrupt server.
+ *
+ * This function may block.
+ *
+ * The interrupt server deletes itself, so after the return of the function the
+ * interrupt server may be still in the termination process depending on the
+ * task priorities of the system.
+ *
+ * @param server_index is the index of the interrupt server to destroy. Use
+ * ::RTEMS_INTERRUPT_SERVER_DEFAULT to specify the default server.
+ *
+ * @retval RTEMS_SUCCESSFUL The operation was successful.
+ * @retval RTEMS_INVALID_ID The interrupt server index was invalid.
+ *
+ * @see rtems_interrupt_server_create()
+ */
+rtems_status_code rtems_interrupt_server_delete( uint32_t server_index );
+
+/**
* @brief Installs the interrupt handler routine @a handler for the interrupt
* vector with number @a vector on the server @a server.
*
diff --git a/cpukit/include/rtems/media.h b/cpukit/include/rtems/media.h
index b2a3e2dc91..3fea38b261 100644
--- a/cpukit/include/rtems/media.h
+++ b/cpukit/include/rtems/media.h
@@ -281,6 +281,9 @@ typedef enum {
*
* @retval RTEMS_SUCCESSFUL Successful operation.
* @retval RTEMS_IO_ERROR In the inquiry state this will abort the action.
+ * @retval RTEMS_INCORRECT_STATE In the failed state this will cause a retry.
+ * Make sure to have a retry counter or similar to avoid endless loops if you
+ * use this value.
*/
typedef rtems_status_code (*rtems_media_listener)(
rtems_media_event event,
diff --git a/cpukit/include/rtems/posix/keyimpl.h b/cpukit/include/rtems/posix/keyimpl.h
index d27244fe81..eed5d3fed2 100644
--- a/cpukit/include/rtems/posix/keyimpl.h
+++ b/cpukit/include/rtems/posix/keyimpl.h
@@ -19,7 +19,7 @@
#include <rtems/posix/key.h>
#include <rtems/score/chainimpl.h>
-#include <rtems/score/freechain.h>
+#include <rtems/score/freechainimpl.h>
#include <rtems/score/objectimpl.h>
#include <rtems/score/percpu.h>
diff --git a/cpukit/include/rtems/printer.h b/cpukit/include/rtems/printer.h
index dbd887221e..310937cc2f 100644
--- a/cpukit/include/rtems/printer.h
+++ b/cpukit/include/rtems/printer.h
@@ -130,7 +130,11 @@ static inline void rtems_printer_task_initialize(
rtems_printer_task_context *context
)
{
- memset( context, 0, sizeof( *context ) );
+ /*
+ * Some C++ compiler think that the structure is complex enough to need a
+ * proper constructor. Cast to void * to silence a warning.
+ */
+ memset( (void *) context, 0, sizeof( *context ) );
}
static inline void rtems_printer_task_set_stack_size(
diff --git a/cpukit/include/rtems/rtems/attr.h b/cpukit/include/rtems/rtems/attr.h
index abc9da08cd..74ed96fdba 100644
--- a/cpukit/include/rtems/rtems/attr.h
+++ b/cpukit/include/rtems/rtems/attr.h
@@ -156,7 +156,7 @@ typedef uint32_t rtems_attribute;
* This attribute constant indicates that the Classic API Barrier
* instance created will use an automatic release protocol.
*/
-#define RTEMS_BARRIER_AUTOMATIC_RELEASE 0x00000010
+#define RTEMS_BARRIER_AUTOMATIC_RELEASE 0x00000200
/**
* This attribute constant indicates that the Classic API Barrier
diff --git a/cpukit/include/rtems/rtems/mp.h b/cpukit/include/rtems/rtems/mp.h
index a3de1e6682..0ddeaf7d53 100644
--- a/cpukit/include/rtems/rtems/mp.h
+++ b/cpukit/include/rtems/rtems/mp.h
@@ -18,6 +18,8 @@
#ifndef _RTEMS_RTEMS_MP_H
#define _RTEMS_RTEMS_MP_H
+#include <rtems/score/mppkt.h>
+
/**
* @defgroup ClassicMP Multiprocessing
*
@@ -33,6 +35,20 @@ extern "C" {
#endif
/**
+ * @brief An MPCI must support packets of at least this size.
+ */
+#define RTEMS_MINIMUM_PACKET_SIZE MP_PACKET_MINIMUM_PACKET_SIZE
+
+/**
+ * @brief Defines the count of @c uint32_t numbers in a packet which must be
+ * converted to native format in a heterogeneous system.
+ *
+ * In packets longer than this value, some of the extra data may be a user
+ * message buffer which is not automatically endian swapped.
+ */
+#define RTEMS_MINIMUN_HETERO_CONVERSION MP_PACKET_MINIMUN_HETERO_CONVERSION
+
+/**
* @brief RTEMS Multiprocessing Announce
*
* This routine implements the MULTIPROCESSING_ANNOUNCE directive.
diff --git a/cpukit/include/rtems/rtems/object.h b/cpukit/include/rtems/rtems/object.h
index d6ae058425..8e8bfbf293 100644
--- a/cpukit/include/rtems/rtems/object.h
+++ b/cpukit/include/rtems/rtems/object.h
@@ -367,6 +367,65 @@ RTEMS_INLINE_ROUTINE uint16_t rtems_object_get_local_node( void )
return _Objects_Local_node;
}
+/**********************************************************************
+ * CONSTANTS WHICH MAY BE USED IN OBJECT NAME TO ID SEARCHES
+ **********************************************************************/
+
+/**
+ * @brief Indicates that a search is across all nodes.
+ */
+#define RTEMS_SEARCH_ALL_NODES OBJECTS_SEARCH_ALL_NODES
+
+/**
+ * @brief Indicates that a search is across all nodes except the one the call
+ * is made from.
+ */
+#define RTEMS_SEARCH_OTHER_NODES OBJECTS_SEARCH_OTHER_NODES
+
+/**
+ * @brief Indicates that the search is to be restricted to the local node.
+ */
+#define RTEMS_SEARCH_LOCAL_NODE OBJECTS_SEARCH_LOCAL_NODE
+
+/**
+ * @brief Indicates that the caller wants to obtain the name of the currently
+ * executing thread.
+ *
+ * This constant is only meaningful when obtaining the name of a task.
+ */
+#define RTEMS_WHO_AM_I OBJECTS_WHO_AM_I
+
+/**********************************************************************
+ * Parameters and return Id's for _Objects_Get_next
+ **********************************************************************/
+
+/**
+ * @brief Lowest valid index value for the index portion of an object
+ * identifier.
+ */
+#define RTEMS_OBJECT_ID_INITIAL_INDEX OBJECTS_ID_INITIAL_INDEX
+
+/**
+ * @brief Maximum valid index value for the index portion of an object
+ * identifier.
+ */
+#define RTEMS_OBJECT_ID_FINAL_INDEX OBJECTS_ID_FINAL_INDEX
+
+/**
+ * @brief Returns the identifier of the object with the lowest valid index
+ * value.
+ *
+ * The object is specified by the API @a _api, the object class @a _class and
+ * the node @a _node where the object resides.
+ */
+#define RTEMS_OBJECT_ID_INITIAL(_api, _class, _node) \
+ OBJECTS_ID_INITIAL(_api, _class, _node)
+
+/**
+ * @brief Maximum valid object identifier.
+ */
+#define RTEMS_OBJECT_ID_FINAL OBJECTS_ID_FINAL
+
#ifdef __cplusplus
}
#endif
diff --git a/cpukit/include/rtems/rtems/objectimpl.h b/cpukit/include/rtems/rtems/objectimpl.h
new file mode 100644
index 0000000000..08a9749832
--- /dev/null
+++ b/cpukit/include/rtems/rtems/objectimpl.h
@@ -0,0 +1,82 @@
+/* SPDX-License-Identifier: BSD-2-Clause */
+
+/**
+ * @file
+ *
+ * @ingroup ClassicObjectImpl
+ *
+ * @brief Implementation Interfaces for Classic Objects
+ */
+
+/*
+ * Copyright (C) 2020 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.
+ */
+
+#ifndef _RTEMS_RTEMS_OBJECTIMPL_H
+#define _RTEMS_RTEMS_OBJECTIMPL_H
+
+#include <rtems/score/objectimpl.h>
+#include <rtems/rtems/status.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/**
+ * @defgroup ClassicObjectImpl Classic Object Implementation
+ *
+ * @ingroup RTEMSInternalClassic
+ *
+ * @{
+ */
+
+/**
+ * @brief Calls _Objects_Name_to_id_u32() and converts the status.
+ *
+ * @param name is the name of the object to find.
+ * @param node is the set of nodes to search.
+ * @param[out] id is the pointer to an object identifier variable or NULL. The
+ * object identifier will be stored in the referenced variable, if the
+ * operation was successful.
+ * @param information is the pointer to an object class information block.
+ *
+ * @retval RTEMS_SUCCESSFUL The operations was successful.
+ * @retval RTEMS_INVALID_ADDRESS The id parameter was NULL.
+ * @retval RTEMS_INVALID_NAME No object exists with the specified name on the
+ * specified node set.
+ */
+rtems_status_code _RTEMS_Name_to_id(
+ uint32_t name,
+ uint32_t node,
+ Objects_Id *id,
+ const Objects_Information *information
+);
+
+/** @} */
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* _RTEMS_RTEMS_OBJECTIMPL_H */
diff --git a/cpukit/include/rtems/rtems/ratemon.h b/cpukit/include/rtems/rtems/ratemon.h
index c5918372a8..16d390d59f 100644
--- a/cpukit/include/rtems/rtems/ratemon.h
+++ b/cpukit/include/rtems/rtems/ratemon.h
@@ -55,8 +55,6 @@ extern "C" {
*/
/**@{*/
-typedef struct timespec rtems_rate_monotonic_period_time_t RTEMS_DEPRECATED;
-
/**
* The following enumerated type defines the states in which a
* period may be.
diff --git a/cpukit/include/rtems/rtems/tasks.h b/cpukit/include/rtems/rtems/tasks.h
index a4af236b6b..f685c315e3 100644
--- a/cpukit/include/rtems/rtems/tasks.h
+++ b/cpukit/include/rtems/rtems/tasks.h
@@ -21,7 +21,9 @@
#include <rtems/rtems/attr.h>
#include <rtems/rtems/status.h>
#include <rtems/rtems/types.h>
+#include <rtems/score/context.h>
#include <rtems/score/smp.h>
+#include <rtems/score/stack.h>
#ifdef __cplusplus
extern "C" {
@@ -50,6 +52,34 @@ extern "C" {
#define RTEMS_YIELD_PROCESSOR WATCHDOG_NO_TIMEOUT
/**
+ * @brief Minimum stack size which every thread must exceed.
+ *
+ * It is the minimum stack size recommended for use on this processor. This
+ * value is selected by the RTEMS developers conservatively to minimize the
+ * risk of blown stacks for most user applications. Using this constant when
+ * specifying the task stack size, indicates that the stack size will be at
+ * least RTEMS_MINIMUM_STACK_SIZE bytes in size. If the user configured minimum
+ * stack size is larger than the recommended minimum, then it will be used.
+ */
+#define RTEMS_MINIMUM_STACK_SIZE STACK_MINIMUM_SIZE
+
+/**
+ * @brief Specifies that the task should be created with the configured minimum
+ * stack size.
+ *
+ * Using this constant when specifying the task stack size indicates that this
+ * task is to be created with a stack size of the minimum stack size that was
+ * configured by the application. If not explicitly configured by the
+ * application, the default configured minimum stack size is the processor
+ * dependent value RTEMS_MINIMUM_STACK_SIZE. Since this uses the configured
+ * minimum stack size value, you may get a stack size that is smaller or larger
+ * than the recommended minimum. This can be used to provide large stacks for
+ * all tasks on complex applications or small stacks on applications that are
+ * trying to conserve memory.
+ */
+#define RTEMS_CONFIGURED_MINIMUM_STACK_SIZE 0
+
+/**
* Define the type for an RTEMS API task priority.
*/
typedef uint32_t rtems_task_priority;
@@ -165,6 +195,198 @@ rtems_status_code rtems_task_create(
);
/**
+ * @brief This constant defines the recommended alignment of a task storage
+ * area in bytes.
+ *
+ * Use it with RTEMS_ALIGNED() to define the alignment of a statically
+ * allocated task storage area.
+ */
+#define RTEMS_TASK_STORAGE_ALIGNMENT CPU_HEAP_ALIGNMENT
+
+/**
+ * @brief Returns the recommended task storage area size for the specified size
+ * and task attributes.
+ *
+ * @param _size is the size dedicated to the task stack and thread-local
+ * storage in bytes.
+ *
+ * @param _attributes is the attribute set of the task using the storage area.
+ *
+ * @return The recommended task storage area size calculated from the input
+ * parameters is returned.
+ */
+#if CPU_ALL_TASKS_ARE_FP == TRUE
+ #define RTEMS_TASK_STORAGE_SIZE( _size, _attributes ) \
+ ( ( _size ) + CONTEXT_FP_SIZE )
+#else
+ #define RTEMS_TASK_STORAGE_SIZE( _size, _attributes ) \
+ ( ( _size ) + \
+ ( ( ( _attributes ) & RTEMS_FLOATING_POINT ) != 0 ? \
+ CONTEXT_FP_SIZE : 0 ) )
+#endif
+
+/**
+ * @brief This structure defines the configuration of a task constructed by
+ * rtems_task_construct().
+ */
+typedef struct {
+ /**
+ * @brief This member defines the name of the task.
+ */
+ rtems_name name;
+
+ /**
+ * @brief This member defines the initial priority of the task.
+ */
+ rtems_task_priority initial_priority;
+
+ /**
+ * @brief This member shall point to the task storage area begin.
+ *
+ * The task storage area will contain the task stack, the thread-local storage,
+ * and the floating-point context on architectures with a separate
+ * floating-point context.
+ *
+ * The task storage area begin address and size should be aligned by
+ * #RTEMS_TASK_STORAGE_ALIGNMENT. To avoid memory waste, use RTEMS_ALIGNED()
+ * and #RTEMS_TASK_STORAGE_ALIGNMENT to enforce the recommended alignment of a
+ * statically allocated task storage area.
+ */
+ void *storage_area;
+
+ /**
+ * @brief This member defines size of the task storage area in bytes.
+ *
+ * Use the RTEMS_TASK_STORAGE_SIZE() macro to determine the recommended task
+ * storage area size.
+ */
+ size_t storage_size;
+
+ /**
+ * @brief This member defines the maximum thread-local storage size supported
+ * by the task storage area.
+ *
+ * Use RTEMS_ALIGN_UP() and #RTEMS_TASK_STORAGE_ALIGNMENT to adjust the size to
+ * meet the minimum alignment requirement of a thread-local storage area used
+ * to construct a task.
+ *
+ * If the value is less than the actual thread-local storage size, then the
+ * task construction by rtems_task_construct() fails.
+ *
+ * If the is less than the task storage area size, then the task construction
+ * by rtems_task_construct() fails.
+ *
+ * The actual thread-local storage size is determined when the application
+ * executable is linked. The ``rtems-exeinfo`` command line tool included in
+ * the RTEMS Tools can be used to obtain the thread-local storage size and
+ * alignment of an application executable.
+ *
+ * The application may configure the maximum thread-local storage size for all
+ * threads explicitly through the #CONFIGURE_MAXIMUM_THREAD_LOCAL_STORAGE_SIZE
+ * configuration option.
+ */
+ size_t maximum_thread_local_storage_size;
+
+ /**
+ * @brief This member defines the optional handler to free the task storage
+ * area.
+ *
+ * It is called on exactly two mutually exclusive occasions. Firstly, when the
+ * task construction aborts due to a failed task create extension, or secondly,
+ * when the task is deleted. It is called from task context under protection
+ * of the object allocator lock. It is allowed to call free() in this handler.
+ * If handler is NULL, then no action will be performed.
+ */
+ void ( *storage_free )( void * );
+
+ /**
+ * @brief This member defines the initial modes of the task.
+ */
+ rtems_mode initial_modes;
+
+ /**
+ * @brief This member defines the attributes of the task.
+ */
+ rtems_attribute attributes;
+} rtems_task_config;
+
+/**
+ * @brief Constructs a task from the specified the task configuration.
+ *
+ * In contrast to tasks created by rtems_task_create(), the tasks constructed
+ * by this directive use a user-provided task storage area. The task storage
+ * area contains the task stack, the thread-local storage, and the
+ * floating-point context on architectures with a separate floating-point
+ * context.
+ *
+ * This directive is intended for applications which do not want to use the
+ * RTEMS Workspace and instead statically allocate all operating system
+ * resources. It is not recommended to use rtems_task_create() and
+ * rtems_task_construct() together in an application. It is also not
+ * recommended to use rtems_task_construct() for drivers or general purpose
+ * libraries. The reason for these recommendations is that the task
+ * configuration needs settings which can be only given with a through
+ * knowledge of the application resources.
+ *
+ * An application based solely on static allocation can avoid any runtime
+ * memory allocators. This can simplify the application architecture as well
+ * as any analysis that may be required.
+ *
+ * The stack space estimate done by <rtems/confdefs.h> assumes that all tasks
+ * are created by rtems_task_create(). The estimate can be adjusted to take
+ * user-provided task storage areas into account through the
+ * #CONFIGURE_MINIMUM_TASKS_WITH_USER_PROVIDED_STORAGE application
+ * configuration option.
+ *
+ * The #CONFIGURE_MAXIMUM_TASKS should include tasks constructed by
+ * rtems_task_construct().
+ *
+ * @param config is the task configuration.
+ *
+ * @param[out] id is the pointer to an object identifier variable. The
+ * identifier of the constructed task object will be stored in this variable,
+ * in case of a successful operation.
+ *
+ * @retval ::RTEMS_SUCCESSFUL The requested operation was successful.
+ *
+ * @retval ::RTEMS_INVALID_ADDRESS The id parameter was NULL.
+ *
+ * @retval ::RTEMS_INVALID_NAME The task name was invalid.
+ *
+ * @retval ::RTEMS_INVALID_PRIORITY The initial task priority was invalid.
+ *
+ * @retval ::RTEMS_INVALID_SIZE The thread-local storage size is greater than
+ * the maximum thread-local storage size specified in the task configuration.
+ * The thread-local storage size is determined by the thread-local variables
+ * used by the application and #CONFIGURE_MAXIMUM_THREAD_LOCAL_STORAGE_SIZE.
+ *
+ * @retval ::RTEMS_INVALID_SIZE The task storage area was too small to provide
+ * a task stack of the configured minimum size, see
+ * #CONFIGURE_MINIMUM_TASK_STACK_SIZE. The task storage area contains the
+ * task stack, the thread-local storage, and the floating-point context on
+ * architectures with a separate floating-point context.
+ *
+ * @retval ::RTEMS_TOO_MANY There was no inactive task object available to
+ * construct a task.
+ *
+ * @retval ::RTEMS_TOO_MANY In multiprocessing configurations, there was no
+ * inactive global object available to construct a global task.
+ *
+ * @retval ::RTEMS_UNSATISFIED One of the task create extensions failed during
+ * the task construction.
+ *
+ * @retval ::RTEMS_UNSATISFIED In SMP configurations, the non-preemption mode
+ * was not supported.
+ *
+ * @retval ::RTEMS_UNSATISFIED In SMP configurations, the interrupt level mode
+ * was not supported.
+ */
+rtems_status_code rtems_task_construct(
+ const rtems_task_config *config,
+ rtems_id *id
+);
+
+/**
* @brief RTEMS Task Name to Id
*
* This routine implements the rtems_task_ident directive.
@@ -604,21 +826,6 @@ rtems_status_code rtems_scheduler_ident_by_processor_set(
#define rtems_scheduler_get_processor() _SMP_Get_current_processor()
/**
- * @brief Returns the index of the current processor.
- *
- * @return The index of the current processor.
- *
- * @deprecated
- *
- * Use rtems_scheduler_get_processor() instead.
- */
-RTEMS_DEPRECATED RTEMS_INLINE_ROUTINE uint32_t
-rtems_get_current_processor( void )
-{
- return rtems_scheduler_get_processor();
-}
-
-/**
* @brief Returns the processor maximum supported by the system.
*
* In uniprocessor configurations, a value of one will be returned.
@@ -637,21 +844,6 @@ rtems_get_current_processor( void )
#define rtems_scheduler_get_processor_maximum() _SMP_Get_processor_maximum()
/**
- * @brief Returns the processor maximum supported by the system.
- *
- * @return The processor maximum supported by the system.
- *
- * @deprecated
- *
- * Use rtems_scheduler_get_processor_maximum() instead.
- */
-RTEMS_DEPRECATED RTEMS_INLINE_ROUTINE uint32_t
-rtems_get_processor_count( void )
-{
- return rtems_scheduler_get_processor_maximum();
-}
-
-/**
* @brief Gets the set of processors owned by the specified scheduler instance.
*
* @param[in] scheduler_id Identifier of the scheduler instance.
diff --git a/cpukit/include/rtems/rtems/tasksimpl.h b/cpukit/include/rtems/rtems/tasksimpl.h
index c9544f8c27..a0aa252cea 100644
--- a/cpukit/include/rtems/rtems/tasksimpl.h
+++ b/cpukit/include/rtems/rtems/tasksimpl.h
@@ -42,6 +42,17 @@ extern "C" {
*/
void _RTEMS_tasks_Initialize_user_tasks( void );
+typedef rtems_status_code ( *RTEMS_tasks_Prepare_stack )(
+ Thread_Configuration *,
+ const rtems_task_config *
+);
+
+rtems_status_code _RTEMS_tasks_Create(
+ const rtems_task_config *config,
+ rtems_id *id,
+ RTEMS_tasks_Prepare_stack prepare_stack
+);
+
RTEMS_INLINE_ROUTINE Thread_Control *_RTEMS_tasks_Allocate(void)
{
_Objects_Allocator_lock();
diff --git a/cpukit/include/rtems/rtems/types.h b/cpukit/include/rtems/rtems/types.h
index b0600eb0a8..5ce3eb6604 100644
--- a/cpukit/include/rtems/rtems/types.h
+++ b/cpukit/include/rtems/rtems/types.h
@@ -44,29 +44,6 @@ extern "C" {
*/
/**@{**/
-#ifdef RTEMS_DEPRECATED_TYPES
-/**
- * @brief Single precision float type.
- *
- * @deprecated Use @c float instead.
- */
-typedef single_precision rtems_single RTEMS_DEPRECATED;
-
-/**
- * @brief Double precision float type.
- *
- * @deprecated Use @c double instead.
- */
-typedef double_precision rtems_double RTEMS_DEPRECATED;
-
-/**
- * @brief RTEMS boolean type.
- *
- * @deprecated Use @c bool instead
- */
-typedef boolean rtems_boolean RTEMS_DEPRECATED;
-#endif
-
/**
* @brief Classic API @ref ClassicRTEMSSubSecObjectNames "object name" type.
*
@@ -89,18 +66,6 @@ typedef Objects_Id rtems_id;
*/
#define RTEMS_ID_NONE OBJECTS_ID_NONE
-/**
- * @brief Public name for task context area.
- */
-typedef Context_Control rtems_context RTEMS_DEPRECATED;
-
-#if (CPU_HARDWARE_FP == TRUE) || (CPU_SOFTWARE_FP == TRUE)
-/**
- * @brief Public name for task floating point context area.
- */
-typedef Context_Control_fp rtems_context_fp RTEMS_DEPRECATED;
-#endif
-
#if (CPU_ISR_PASSES_FRAME_POINTER == TRUE)
/**
* @brief Defines the format of the interrupt stack frame as it appears to a
@@ -115,24 +80,17 @@ typedef CPU_Interrupt_frame rtems_interrupt_frame;
#endif
/**
- * @brief Information structure returned by the Heap Handler via the Region
- * Manager.
- */
-typedef Heap_Information_block region_information_block RTEMS_DEPRECATED;
-
-/**
* @brief Used to manage and manipulate intervals specified by
* @ref ClassicRTEMSSecTime "clock ticks".
*/
typedef Watchdog_Interval rtems_interval;
/**
- * @brief Represents the CPU usage per thread.
+ * @brief Constant for indefinite wait.
*
- * When using nanoseconds granularity timing, RTEMS may internally use a
- * variety of representations.
+ * This is actually an illegal interval value.
*/
-typedef struct timespec rtems_thread_cpu_usage_t RTEMS_DEPRECATED;
+#define RTEMS_NO_TIMEOUT ((rtems_interval) WATCHDOG_NO_TIMEOUT)
/**
* @brief Data structure to manage and manipulate calendar
diff --git a/cpukit/include/rtems/score/basedefs.h b/cpukit/include/rtems/score/basedefs.h
index 01c773ffe9..c31b4ebef7 100644
--- a/cpukit/include/rtems/score/basedefs.h
+++ b/cpukit/include/rtems/score/basedefs.h
@@ -198,6 +198,18 @@
#endif
/**
+ * @brief Instructs the compiler to define a weak function.
+ *
+ * Use this attribute for function definitions. Do not use it for function
+ * declarations.
+ */
+#if defined(__GNUC__)
+ #define RTEMS_WEAK __attribute__((__weak__))
+#else
+ #define RTEMS_WEAK
+#endif
+
+/**
* @brief Instructs the compiler to generate a weak alias to the specified
* target function.
*/
@@ -208,6 +220,36 @@
#endif
/**
+ * @brief Returns the specified value aligned down to the specified alignment.
+ *
+ * @param _value is the value to align down.
+ *
+ * @param _alignment is the desired alignment in bytes. The alignment shall be
+ * a power of two, otherwise the returned value is undefined. The alignment
+ * parameter is evaluated twice.
+ *
+ * @return The specified value aligned down to the specified alignment is
+ * returned.
+ */
+#define RTEMS_ALIGN_DOWN( _value, _alignment ) \
+ ( ( _value ) & ~( ( _alignment ) - 1 ) )
+
+/**
+ * @brief Returns the specified value aligned up to the specified alignment.
+ *
+ * @param _value is the value to align up.
+ *
+ * @param _alignment is the desired alignment in bytes. The alignment shall be
+ * a power of two, otherwise the returned value is undefined. The alignment
+ * parameter is evaluated twice.
+ *
+ * @return The specified value aligned up to the specified alignment is
+ * returned.
+ */
+#define RTEMS_ALIGN_UP( _value, _alignment ) \
+ ( ( ( _value ) + ( _alignment ) - 1 ) & ~( ( _alignment ) - 1 ) )
+
+/**
* @brief Instructs the compiler to enforce the specified alignment.
*/
#if defined(__GNUC__)
@@ -418,7 +460,11 @@
* doesn't allow flexible array members. Use the GNU extension which is also
* supported by other compilers.
*/
-#define RTEMS_ZERO_LENGTH_ARRAY 0
+#if __STDC_VERSION__ >= 199409L
+ #define RTEMS_ZERO_LENGTH_ARRAY
+#else
+ #define RTEMS_ZERO_LENGTH_ARRAY 0
+#endif
/**
* @brief Returns a pointer to the container of a specified member pointer.
@@ -548,19 +594,6 @@ extern void RTEMS_DEQUALIFY_types_not_compatible(void);
*/
#define RTEMS_XSTRING( _x ) RTEMS_STRING( _x )
-#ifndef ASM
- #ifdef RTEMS_DEPRECATED_TYPES
- typedef bool boolean RTEMS_DEPRECATED;
- typedef float single_precision RTEMS_DEPRECATED;
- typedef double double_precision RTEMS_DEPRECATED;
- #endif
-
- /**
- * XXX: Eventually proc_ptr needs to disappear!!!
- */
- typedef void * proc_ptr RTEMS_DEPRECATED;
-#endif
-
/** @} */
#endif /* _RTEMS_BASEDEFS_H */
diff --git a/cpukit/include/rtems/score/copyrt.h b/cpukit/include/rtems/score/copyrt.h
index c7b00b4247..1d0ad09f29 100644
--- a/cpukit/include/rtems/score/copyrt.h
+++ b/cpukit/include/rtems/score/copyrt.h
@@ -41,6 +41,16 @@ extern "C" {
*/
extern const char _Copyright_Notice[];
+/**
+ * @brief This constant provides the RTEMS version string.
+ *
+ * The constant name does not follow the naming conventions. Do not change it
+ * for backward compatibility reasons.
+ *
+ * @see rtems_get_version_string()
+ */
+extern const char _RTEMS_version[];
+
#ifdef __cplusplus
}
#endif
diff --git a/cpukit/include/rtems/score/freechain.h b/cpukit/include/rtems/score/freechain.h
index eaee077366..7db1101cff 100644
--- a/cpukit/include/rtems/score/freechain.h
+++ b/cpukit/include/rtems/score/freechain.h
@@ -16,8 +16,7 @@
#ifndef _RTEMS_SCORE_FREECHAIN_H
#define _RTEMS_SCORE_FREECHAIN_H
-#include <rtems/score/basedefs.h>
-#include <rtems/score/chainimpl.h>
+#include <rtems/score/chain.h>
#ifdef __cplusplus
extern "C" {
@@ -38,11 +37,6 @@ extern "C" {
*/
/**
- * @brief Allocator function.
- */
-typedef void *( *Freechain_Allocator )( size_t size );
-
-/**
* @brief The freechain control.
*/
typedef struct {
@@ -52,107 +46,6 @@ typedef struct {
Chain_Control Free;
} Freechain_Control;
-/**
- * @brief Initializes a freechain.
- *
- * This routine initializes the freechain control structure to manage a chain
- * of nodes. In the case the freechain is empty the extend handler is called to
- * get more nodes.
- *
- * @param[out] freechain The freechain control to initialize.
- * @param[out] initial_nodes Array with the initial nodes.
- * @param number_nodes The initial number of nodes.
- * @param node_size The node size.
- */
-RTEMS_INLINE_ROUTINE void _Freechain_Initialize(
- Freechain_Control *freechain,
- void *initial_nodes,
- size_t number_nodes,
- size_t node_size
-)
-{
- _Chain_Initialize(
- &freechain->Free,
- initial_nodes,
- number_nodes,
- node_size
- );
-}
-
-/**
- * @brief Return true if the freechain is empty, otherwise false
- *
- * @param freechain The freechain control.
- */
-RTEMS_INLINE_ROUTINE bool _Freechain_Is_empty(
- const Freechain_Control *freechain
-)
-{
- return _Chain_Is_empty( &freechain->Free );
-}
-
-/**
- * @brief Pop an item from the freechain.
- *
- * The freechain must not be empty.
- *
- * @param freechain The freechain control.
- */
-RTEMS_INLINE_ROUTINE void *_Freechain_Pop( Freechain_Control *freechain )
-{
- return _Chain_Get_first_unprotected( &freechain->Free );
-}
-
-/**
- * @brief Extend the freechain with new nodes.
- *
- * @param freechain The freechain control.
- * @param allocator The allocator function.
- * @param number_nodes_to_extend The number of nodes to extend.
- * @param node_size The node size.
- *
- * @retval NULL The extend operation failed.
- * @retval nodes Pointer to the new nodes.
- */
-void *_Freechain_Extend(
- Freechain_Control *freechain,
- Freechain_Allocator allocator,
- size_t number_nodes_to_extend,
- size_t node_size
-);
-
-/**
- * @brief Gets a node from the freechain.
- *
- * @param[in, out] freechain The freechain control.
- * @param allocator The allocator function.
- * @param number_nodes_to_extend The number of nodes in the case an extend is
- * necessary due to an empty freechain.
- * @param[in] node_size The node size.
- *
- * @retval NULL The freechain is empty and the extend operation failed.
- * @retval pointer Pointer to a node. The node ownership passes to the
- * caller.
- */
-void *_Freechain_Get(
- Freechain_Control *freechain,
- Freechain_Allocator allocator,
- size_t number_nodes_to_extend,
- size_t node_size
-);
-
-/**
- * @brief Puts a node back onto the freechain.
- *
- * @param[in, out] freechain The freechain control.
- * @param[out] node The node to put back. The node may be @c NULL, in this case
- * the function does nothing.
- */
-void _Freechain_Put(
- Freechain_Control *freechain,
- void *node
-);
-
/** @} */
#ifdef __cplusplus
diff --git a/cpukit/include/rtems/score/freechainimpl.h b/cpukit/include/rtems/score/freechainimpl.h
new file mode 100644
index 0000000000..25660003ff
--- /dev/null
+++ b/cpukit/include/rtems/score/freechainimpl.h
@@ -0,0 +1,161 @@
+/**
+ * @file
+ *
+ * @ingroup RTEMSScoreFreechain
+ *
+ * @brief Freechain Handler API
+ */
+/*
+ * Copyright (c) 2013 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.
+ */
+
+#ifndef _RTEMS_SCORE_FREECHAINIMPL_H
+#define _RTEMS_SCORE_FREECHAINIMPL_H
+
+#include <rtems/score/freechain.h>
+#include <rtems/score/basedefs.h>
+#include <rtems/score/chainimpl.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/**
+ * @addtogroup RTEMSScoreFreechain
+ *
+ * @{
+ */
+
+/**
+ * @brief Allocator function.
+ */
+typedef void *( *Freechain_Allocator )( size_t size );
+
+/**
+ * @brief Initializes a freechain.
+ *
+ * This routine initializes the freechain control structure to manage a chain
+ * of nodes. In the case the freechain is empty the extend handler is called to
+ * get more nodes.
+ *
+ * @param[out] freechain The freechain control to initialize.
+ * @param[out] initial_nodes Array with the initial nodes.
+ * @param number_nodes The initial number of nodes.
+ * @param node_size The node size.
+ */
+RTEMS_INLINE_ROUTINE void _Freechain_Initialize(
+ Freechain_Control *freechain,
+ void *initial_nodes,
+ size_t number_nodes,
+ size_t node_size
+)
+{
+ _Chain_Initialize(
+ &freechain->Free,
+ initial_nodes,
+ number_nodes,
+ node_size
+ );
+}
+
+/**
+ * @brief Return true if the freechain is empty, otherwise false
+ *
+ * @param freechain The freechain control.
+ */
+RTEMS_INLINE_ROUTINE bool _Freechain_Is_empty(
+ const Freechain_Control *freechain
+)
+{
+ return _Chain_Is_empty( &freechain->Free );
+}
+
+/**
+ * @brief Pops a node from the freechain.
+ *
+ * The freechain shall not be empty.
+ *
+ * @param freechain The freechain control.
+ */
+RTEMS_INLINE_ROUTINE void *_Freechain_Pop( Freechain_Control *freechain )
+{
+ return _Chain_Get_first_unprotected( &freechain->Free );
+}
+
+/**
+ * @brief Pushes a node back to the freechain.
+ *
+ * @param freechain The freechain control.
+ * @param node The node to push back. The node shall not be @c NULL.
+ */
+void RTEMS_INLINE_ROUTINE _Freechain_Push(
+ Freechain_Control *freechain,
+ void *node
+)
+{
+ _Chain_Initialize_node( node );
+ _Chain_Prepend_unprotected( &freechain->Free, node );
+}
+
+/**
+ * @brief Extend the freechain with new nodes.
+ *
+ * @param freechain The freechain control.
+ * @param allocator The allocator function.
+ * @param number_nodes_to_extend The number of nodes to extend.
+ * @param node_size The node size.
+ *
+ * @retval NULL The extend operation failed.
+ * @retval nodes Pointer to the new nodes.
+ */
+void *_Freechain_Extend(
+ Freechain_Control *freechain,
+ Freechain_Allocator allocator,
+ size_t number_nodes_to_extend,
+ size_t node_size
+);
+
+/**
+ * @brief Gets a node from the freechain.
+ *
+ * @param[in, out] freechain The freechain control.
+ * @param allocator The allocator function.
+ * @param number_nodes_to_extend The number of nodes in the case an extend is
+ * necessary due to an empty freechain.
+ * @param[in] node_size The node size.
+ *
+ * @retval NULL The freechain is empty and the extend operation failed.
+ * @retval pointer Pointer to a node. The node ownership passes to the
+ * caller.
+ */
+void *_Freechain_Get(
+ Freechain_Control *freechain,
+ Freechain_Allocator allocator,
+ size_t number_nodes_to_extend,
+ size_t node_size
+);
+
+/**
+ * @brief Puts a node back onto the freechain.
+ *
+ * @param[in, out] freechain The freechain control.
+ * @param[out] node The node to put back. The node may be @c NULL, in this case
+ * the function does nothing.
+ */
+void _Freechain_Put(
+ Freechain_Control *freechain,
+ void *node
+);
+
+/** @} */
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
+/* end of include file */
diff --git a/cpukit/include/rtems/score/interr.h b/cpukit/include/rtems/score/interr.h
index 2f449deedb..1371e55653 100644
--- a/cpukit/include/rtems/score/interr.h
+++ b/cpukit/include/rtems/score/interr.h
@@ -203,7 +203,8 @@ typedef enum {
INTERNAL_ERROR_LIBIO_STDERR_FD_OPEN_FAILED = 37,
INTERNAL_ERROR_ILLEGAL_USE_OF_FLOATING_POINT_UNIT = 38,
INTERNAL_ERROR_ARC4RANDOM_GETENTROPY_FAIL = 39,
- INTERNAL_ERROR_NO_MEMORY_FOR_PER_CPU_DATA = 40
+ INTERNAL_ERROR_NO_MEMORY_FOR_PER_CPU_DATA = 40,
+ INTERNAL_ERROR_TOO_LARGE_TLS_SIZE = 41
} Internal_errors_Core_list;
typedef CPU_Uint32ptr Internal_errors_t;
diff --git a/cpukit/include/rtems/score/objectimpl.h b/cpukit/include/rtems/score/objectimpl.h
index c540f90166..32387594f2 100644
--- a/cpukit/include/rtems/score/objectimpl.h
+++ b/cpukit/include/rtems/score/objectimpl.h
@@ -221,26 +221,29 @@ typedef enum {
#define OBJECTS_NAME_ERRORS_LAST OBJECTS_INVALID_NODE
/**
- * @brief Converts an object name to an Id.
+ * @brief Searches an object of the specified class with the specified name on
+ * the specified set of nodes.
*
- * This method converts an object name to an Id. It performs a look up
+ * This method converts an object name to an identifier. It performs a look up
* using the object information block for this object class.
*
- * @param information points to an object class information block.
* @param name is the name of the object to find.
* @param node is the set of nodes to search.
- * @param[out] id will contain the Id if the search is successful.
+ * @param[out] id is the pointer to an object identifier variable or NULL. The
+ * object identifier will be stored in the referenced variable, if the
+ * operation was successful.
+ * @param information is the pointer to an object class information block.
*
- * @retval OBJECTS_NAME_OR_ID_LOOKUP_SUCCESSFUL The operations was successful
- * @a id contains the ID.
- * @retval OBJECTS_INVALID_NAME The name was invalid.
- * @retval OBJECTS_INVALID_ID The id is not 0 before the operation.
+ * @retval OBJECTS_NAME_OR_ID_LOOKUP_SUCCESSFUL The operations was successful.
+ * @retval OBJECTS_INVALID_ADDRESS The id parameter was NULL.
+ * @retval OBJECTS_INVALID_NAME No object exists with the specified name on the
+ * specified node set.
*/
Objects_Name_or_id_lookup_errors _Objects_Name_to_id_u32(
- Objects_Information *information,
- uint32_t name,
- uint32_t node,
- Objects_Id *id
+ uint32_t name,
+ uint32_t node,
+ Objects_Id *id,
+ const Objects_Information *information
);
typedef enum {
diff --git a/cpukit/include/rtems/score/objectmp.h b/cpukit/include/rtems/score/objectmp.h
index fcdfa78aa3..c2621c3857 100644
--- a/cpukit/include/rtems/score/objectmp.h
+++ b/cpukit/include/rtems/score/objectmp.h
@@ -150,10 +150,10 @@ void _Objects_MP_Close (
* @retval OBJECTS_INVALID_NAME There is no global object with this name.
*/
Objects_Name_or_id_lookup_errors _Objects_MP_Global_name_search (
- Objects_Information *information,
- Objects_Name the_name,
- uint32_t nodes_to_search,
- Objects_Id *the_id
+ const Objects_Information *information,
+ Objects_Name the_name,
+ uint32_t nodes_to_search,
+ Objects_Id *the_id
);
/**
diff --git a/cpukit/include/rtems/score/scheduler.h b/cpukit/include/rtems/score/scheduler.h
index 9a6515ba1e..101ea7a5c1 100644
--- a/cpukit/include/rtems/score/scheduler.h
+++ b/cpukit/include/rtems/score/scheduler.h
@@ -30,12 +30,7 @@ extern "C" {
struct Per_CPU_Control;
/**
- * @defgroup RTEMSScoreScheduler Scheduler Handler
- *
- * @ingroup RTEMSScore
- *
- * This handler encapsulates functionality related to managing sets of threads
- * that are ready for execution.
+ * @addtogroup RTEMSScoreScheduler
*
* @{
*/
@@ -300,22 +295,24 @@ struct _Scheduler_Control {
};
/**
- * @brief Registered schedulers.
+ * @brief This table contains the configured schedulers.
*
- * Application provided via <rtems/confdefs.h>.
+ * The table is defined by <rtems/confdefs.h> through the
+ * #CONFIGURE_SCHEDULER_TABLE_ENTRIES application configuration option.
*
* @see _Scheduler_Count.
*/
extern const Scheduler_Control _Scheduler_Table[];
/**
- * @brief Count of registered schedulers.
+ * @brief This constant contains the count of configured schedulers.
*
- * Application provided via <rtems/confdefs.h> on SMP configurations.
+ * In SMP configurations, the constant is defined by <rtems/confdefs.h> through
+ * the count of entries of the #CONFIGURE_SCHEDULER_TABLE_ENTRIES application
+ * configuration option.
*
- * It is very important that this is a compile-time constant on uni-processor
- * configurations (in this case RTEMS_SMP is not defined) so that the compiler
- * can optimize the some loops away
+ * In uniprocessor configurations, this is a compile time constant set to one.
+ * This is important so that the compiler can optimize some loops away.
*
* @see _Scheduler_Table.
*/
diff --git a/cpukit/include/rtems/score/schedulerimpl.h b/cpukit/include/rtems/score/schedulerimpl.h
index e7fbb8b166..5ad6b5d553 100644
--- a/cpukit/include/rtems/score/schedulerimpl.h
+++ b/cpukit/include/rtems/score/schedulerimpl.h
@@ -34,7 +34,34 @@ extern "C" {
#endif
/**
- * @addtogroup RTEMSScoreScheduler
+ * @defgroup RTEMSScoreScheduler Scheduler Handler
+ *
+ * @ingroup RTEMSScore
+ *
+ * @brief This handler encapsulates functionality related to managing sets of
+ * threads that are ready for execution.
+ *
+ * Schedulers are used by the system to manage sets of threads that are ready
+ * for execution. A scheduler consists of
+ *
+ * * a scheduler algorithm implementation,
+ *
+ * * a scheduler index and an associated name, and
+ *
+ * * a set of processors owned by the scheduler (may be empty, but never
+ * overlaps with a set owned by another scheduler).
+ *
+ * Each thread uses exactly one scheduler as its home scheduler. Threads may
+ * temporarily use another scheduler due to actions of locking protocols.
+ *
+ * All properties of a scheduler can be configured and controlled by the user.
+ * Some properties are fixed at link time (defined by application configuration
+ * options), other properties can be changed at runtime through directive
+ * calls.
+ *
+ * The scheduler index, name, and initial processor set are defined for a
+ * particular application by the application configuration. The schedulers are
+ * registered in the ::_Scheduler_Table which has ::_Scheduler_Count entries.
*
* @{
*/
@@ -929,6 +956,10 @@ RTEMS_INLINE_ROUTINE Thread_Control *_Scheduler_Use_idle_thread(
return idle;
}
+/**
+ * @brief This enumeration defines what a scheduler should do with a node which
+ * could be scheduled.
+ */
typedef enum {
SCHEDULER_TRY_TO_SCHEDULE_DO_SCHEDULE,
SCHEDULER_TRY_TO_SCHEDULE_DO_IDLE_EXCHANGE,
@@ -936,21 +967,41 @@ typedef enum {
} Scheduler_Try_to_schedule_action;
/**
- * @brief Tries to schedule this scheduler node.
- *
- * @param context The scheduler instance context.
- * @param[in, out] node The node which wants to get scheduled.
- * @param idle A potential idle thread used by a potential victim node.
- * @param get_idle_thread Function to get an idle thread.
- *
- * @retval true This node can be scheduled.
- * @retval false This node cannot be scheduled.
+ * @brief Tries to schedule the scheduler node.
+ *
+ * When a scheduler needs to schedule a node, it shall use this function to
+ * determine what it shall do with the node. The node replaces a victim node if
+ * it can be scheduled.
+ *
+ * This function uses the state of the node and the scheduler state of the owner
+ * thread to determine what shall be done. Each scheduler maintains its nodes
+ * independent of other schedulers. This function ensures that a thread is
+ * scheduled by at most one scheduler. If a node requires an executing thread
+ * due to some locking protocol and the owner thread is already scheduled by
+ * another scheduler, then an idle thread shall be attached to the node.
+ *
+ * @param[in, out] context is the scheduler context.
+ * @param[in, out] node is the node which could be scheduled.
+ * @param idle is an idle thread used by the victim node or NULL.
+ * @param get_idle_thread points to a function to get an idle thread.
+ *
+ * @retval SCHEDULER_TRY_TO_SCHEDULE_DO_SCHEDULE The node shall be scheduled.
+ *
+ * @retval SCHEDULER_TRY_TO_SCHEDULE_DO_IDLE_EXCHANGE The node shall be
+ * scheduled and the provided idle thread shall be attached to the node. This
+ * action is returned, if the node cannot use the owner thread and shall use
+ * an idle thread instead. In this case, the idle thread is provided by the
+ * victim node.
+ *
+ * @retval SCHEDULER_TRY_TO_SCHEDULE_DO_BLOCK The node shall be blocked. This
+ * action is returned, if the owner thread is already scheduled by another
+ * scheduler.
*/
RTEMS_INLINE_ROUTINE Scheduler_Try_to_schedule_action
_Scheduler_Try_to_schedule_node(
Scheduler_Context *context,
Scheduler_Node *node,
- Thread_Control *idle,
+ const Thread_Control *idle,
Scheduler_Get_idle_thread get_idle_thread
)
{
diff --git a/cpukit/include/rtems/score/stack.h b/cpukit/include/rtems/score/stack.h
index df1df74867..e869a04db5 100644
--- a/cpukit/include/rtems/score/stack.h
+++ b/cpukit/include/rtems/score/stack.h
@@ -123,6 +123,13 @@ extern const Stack_Allocator_allocate _Stack_Allocator_allocate;
*/
extern const Stack_Allocator_free _Stack_Allocator_free;
+/**
+ * @brief Do the stack allocator initialization during system initialize.
+ *
+ * This function is used to initialize application provided stack allocators.
+ */
+void _Stack_Allocator_do_initialize( void );
+
/** @} */
#ifdef __cplusplus
diff --git a/cpukit/include/rtems/score/stackimpl.h b/cpukit/include/rtems/score/stackimpl.h
index 305c4e4e51..df9f87d5a3 100644
--- a/cpukit/include/rtems/score/stackimpl.h
+++ b/cpukit/include/rtems/score/stackimpl.h
@@ -166,6 +166,13 @@ void *_Stack_Allocate( size_t stack_size );
*/
void _Stack_Free( void *stack_area );
+/**
+ * @brief This function does nothing.
+ *
+ * @param stack_area is not used.
+ */
+void _Stack_Free_nothing( void *stack_area );
+
/** @} */
#ifdef __cplusplus
diff --git a/cpukit/include/rtems/score/thread.h b/cpukit/include/rtems/score/thread.h
index 2e7380f99a..1388744548 100644
--- a/cpukit/include/rtems/score/thread.h
+++ b/cpukit/include/rtems/score/thread.h
@@ -89,12 +89,6 @@ extern "C" {
#define RTEMS_SCORE_THREAD_ENABLE_RESOURCE_COUNT
#endif
-/*
- * Only provided for backward compatiblity to not break application
- * configurations.
- */
-typedef void *Thread RTEMS_DEPRECATED;
-
/**
* @brief Type of the numeric argument of a thread entry function with at
* least one numeric argument.
@@ -200,10 +194,9 @@ typedef struct {
/** This field is the initial priority. */
Priority_Control initial_priority;
/**
- * @brief This field is a pointer to the allocated stack area, otherwise it
- * is NULL.
+ * @brief This field points to the handler which should free the stack.
*/
- void *allocated_stack;
+ void ( *stack_free )( void * );
/** This field is the stack information. */
Stack_Control Initial_stack;
#if ( CPU_HARDWARE_FP == TRUE ) || ( CPU_SOFTWARE_FP == TRUE )
@@ -961,6 +954,16 @@ extern const size_t _Thread_Initial_thread_count;
extern const size_t _Thread_Maximum_name_size;
/**
+ * @brief If this constant is greater than zero, then it defines the maximum
+ * thread-local storage size, otherwise the thread-local storage size is defined
+ * by the linker depending on the thread-local storage objects used by the
+ * application in the statically-linked executable.
+ *
+ * This value is provided via <rtems/confdefs.h>.
+ */
+extern const size_t _Thread_Maximum_TLS_size;
+
+/**
* @brief The configured thread control block.
*
* This type is defined in <rtems/confdefs.h> and depends on the application
diff --git a/cpukit/include/rtems/score/threadimpl.h b/cpukit/include/rtems/score/threadimpl.h
index b4b85ffa90..61454eb7fe 100644
--- a/cpukit/include/rtems/score/threadimpl.h
+++ b/cpukit/include/rtems/score/threadimpl.h
@@ -144,9 +144,11 @@ typedef struct {
size_t stack_size;
/**
- * @brief The address of the allocated stack area or NULL.
+ * @brief This member contains the handler to free the stack.
+ *
+ * It shall not be NULL. Use _Stack_Free_nothing() if nothing is to free.
*/
- void *allocated_stack;
+ void ( *stack_free )( void * );
/**
* @brief The new thread's priority.
@@ -211,14 +213,38 @@ bool _Thread_Initialize(
);
/**
- * @brief Initializes thread and executes it.
+ * @brief Starts the specified thread.
+ *
+ * If the thread is not in the dormant state, the routine returns with a value
+ * of false and performs no actions except enabling interrupts as indicated by
+ * the ISR lock context.
+ *
+ * Otherwise, this routine initializes the executable information for the
+ * thread and makes it ready to execute. After the call of this routine, the
+ * thread competes with all other ready threads for CPU time.
+ *
+ * Then the routine enables the local interrupts as indicated by the ISR lock
+ * context.
+ *
+ * Then the thread start user extensions are called with thread dispatching
+ * disabled and interrupts enabled after making the thread ready. Please note
+ * that in SMP configurations, the thread switch and begin user extensions may
+ * be called in parallel on another processor.
+ *
+ * Then thread dispatching is enabled and other threads may execute before the
+ * routine returns.
+ *
+ * @param[in, out] the_thread is the thread to start.
+ *
+ * @param entry is the thread entry information.
+ *
+ * @param[in, out] is the ISR lock context which shall be used to disable the
+ * local interrupts before the call of this routine.
*
- * This routine initializes the executable information for a thread
- * and makes it ready to execute. After this routine executes, the
- * thread competes with all other threads for CPU time.
+ * @retval true The thread was in the dormant state and was sucessefully
+ * started.
*
- * @param the_thread The thread to be started.
- * @param entry The thread entry information.
+ * @retval false Otherwise.
*/
bool _Thread_Start(
Thread_Control *the_thread,
diff --git a/cpukit/include/rtems/score/userext.h b/cpukit/include/rtems/score/userext.h
index aec795cd57..4d41212957 100644
--- a/cpukit/include/rtems/score/userext.h
+++ b/cpukit/include/rtems/score/userext.h
@@ -26,8 +26,6 @@ extern "C" {
struct _Thread_Control;
-typedef void User_extensions_routine RTEMS_DEPRECATED;
-
/**
* @defgroup RTEMSScoreUserExt User Extension Handler
*
diff --git a/cpukit/include/rtems/sysinit.h b/cpukit/include/rtems/sysinit.h
index 245da74f2c..a28e44817a 100644
--- a/cpukit/include/rtems/sysinit.h
+++ b/cpukit/include/rtems/sysinit.h
@@ -41,6 +41,7 @@ extern "C" {
#define RTEMS_SYSINIT_INITIAL_EXTENSIONS 000500
#define RTEMS_SYSINIT_MP_EARLY 000600
#define RTEMS_SYSINIT_DATA_STRUCTURES 000700
+#define RTEMS_SYSINIT_STACK_ALLOCATOR 000780
#define RTEMS_SYSINIT_MP 000800
#define RTEMS_SYSINIT_USER_EXTENSIONS 000900
#define RTEMS_SYSINIT_CLASSIC_TASKS 000a00
diff --git a/cpukit/include/rtems/system.h b/cpukit/include/rtems/system.h
deleted file mode 100644
index 032ac56a95..0000000000
--- a/cpukit/include/rtems/system.h
+++ /dev/null
@@ -1,65 +0,0 @@
-/**
- * @file
- *
- * @brief Information Included in Every Function in the Executive
- *
- * This include file contains information that is included in every
- * function in the executive. This must be the first include file
- * included in all internal RTEMS files.
- */
-
-/*
- * COPYRIGHT (c) 1989-2007.
- * 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.
- */
-
-#ifndef _RTEMS_SYSTEM_H
-#define _RTEMS_SYSTEM_H
-
-#include <rtems/score/cpu.h>
-
-#ifndef _RTEMS_H
-#warning "This header file is deprecated and will be removed in RTEMS 6"
-#endif
-
-/**
- * @defgroup RTEMSScoreSystem System Information
- *
- * @ingroup RTEMSScore
- */
-/**@{*/
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-#ifndef ASM
-
-/*
- * The use of this variable is deprecated, use rtems_get_version_string()
- * instead.
- */
-extern RTEMS_DEPRECATED const char _RTEMS_version[];
-
-/**
- * The following is the extern for the RTEMS copyright string.
- */
-extern RTEMS_DEPRECATED const char _Copyright_Notice[];
-
-typedef RTEMS_DEPRECATED uint32_t RTEMS_MAXIMUM_NAME_LENGTH;
-/* The use of this define is deprecated, use sizeof(rtems_name) instead */
-#define RTEMS_MAXIMUM_NAME_LENGTH sizeof(RTEMS_MAXIMUM_NAME_LENGTH)
-
-#endif /* ASM */
-
-#ifdef __cplusplus
-}
-#endif
-
-/**@}*/
-#endif
-/* end of include file */
diff --git a/cpukit/include/rtems/termiostypes.h b/cpukit/include/rtems/termiostypes.h
index 6930e5958b..ef2c958271 100644
--- a/cpukit/include/rtems/termiostypes.h
+++ b/cpukit/include/rtems/termiostypes.h
@@ -596,8 +596,6 @@ int rtems_termios_poll(
#define RTEMS_TERMIOS_NUMBER_BAUD_RATES 25
-extern rtems_mutex rtems_termios_ttyMutex;
-
#ifdef __cplusplus
}
#endif
diff --git a/cpukit/include/rtems/test-info.h b/cpukit/include/rtems/test-info.h
new file mode 100644
index 0000000000..d5580bdebb
--- /dev/null
+++ b/cpukit/include/rtems/test-info.h
@@ -0,0 +1,327 @@
+/*
+ * Copyright (c) 2014, 2018 embedded brains GmbH. All rights reserved.
+ *
+ * embedded brains GmbH
+ * Dornierstr. 4
+ * 82178 Puchheim
+ * Germany
+ * <rtems@embedded-brains.de>
+ *
+ * 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.
+ */
+
+#ifndef _RTEMS_TEST_H
+#define _RTEMS_TEST_H
+
+#include <rtems.h>
+#include <rtems/printer.h>
+#include <rtems/score/atomic.h>
+#include <rtems/score/smpbarrier.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif /* __cplusplus */
+
+/**
+ * @defgroup RTEMSTest Test Support
+ *
+ * @ingroup RTEMSAPI
+ *
+ * @brief Test support functions.
+ *
+ * @{
+ */
+
+/**
+ * @brief Each test must define a test name string.
+ */
+extern const char rtems_test_name[];
+
+/**
+ * @brief Each test must define a printer.
+ */
+extern rtems_printer rtems_test_printer;
+
+/**
+ * @brief Fatal extension for tests.
+ */
+void rtems_test_fatal_extension(
+ rtems_fatal_source source,
+ bool always_set_to_false,
+ rtems_fatal_code code
+);
+
+/**
+ * @brief Initial extension for tests.
+ */
+#define RTEMS_TEST_INITIAL_EXTENSION \
+ { NULL, NULL, NULL, NULL, NULL, NULL, NULL, rtems_test_fatal_extension }
+
+/**
+ * @brief Test states.
+ */
+typedef enum
+{
+ RTEMS_TEST_STATE_PASS,
+ RTEMS_TEST_STATE_FAIL,
+ RTEMS_TEST_STATE_USER_INPUT,
+ RTEMS_TEST_STATE_INDETERMINATE,
+ RTEMS_TEST_STATE_BENCHMARK
+} RTEMS_TEST_STATE;
+
+#if (TEST_STATE_EXPECTED_FAIL && TEST_STATE_USER_INPUT) || \
+ (TEST_STATE_EXPECTED_FAIL && TEST_STATE_INDETERMINATE) || \
+ (TEST_STATE_EXPECTED_FAIL && TEST_STATE_BENCHMARK) || \
+ (TEST_STATE_USER_INPUT && TEST_STATE_INDETERMINATE) || \
+ (TEST_STATE_USER_INPUT && TEST_STATE_BENCHMARK) || \
+ (TEST_STATE_INDETERMINATE && TEST_STATE_BENCHMARK)
+ #error Test states must be unique
+#endif
+
+#if TEST_STATE_EXPECTED_FAIL
+ #define TEST_STATE RTEMS_TEST_STATE_FAIL
+#elif TEST_STATE_USER_INPUT
+ #define TEST_STATE RTEMS_TEST_STATE_USER_INPUT
+#elif TEST_STATE_INDETERMINATE
+ #define TEST_STATE RTEMS_TEST_STATE_INDETERMINATE
+#elif TEST_STATE_BENCHMARK
+ #define TEST_STATE RTEMS_TEST_STATE_BENCHMARK
+#else
+ #define TEST_STATE RTEMS_TEST_STATE_PASS
+#endif
+
+/**
+ * @brief Prints a begin of test message using printf().
+ *
+ * @returns As specified by printf().
+ */
+int rtems_test_begin(const char* name, const RTEMS_TEST_STATE state);
+
+/**
+ * @brief Prints an end of test message using printf().
+ *
+ * @returns As specified by printf().
+ */
+int rtems_test_end(const char* name);
+
+/**
+ * @brief Exit the test without calling exit() since it closes stdin, etc and
+ * pulls in stdio code
+ */
+void rtems_test_exit(int status) RTEMS_NO_RETURN;
+
+/**
+ * @brief Prints via the RTEMS printer.
+ *
+ * @returns As specified by printf().
+ */
+int rtems_test_printf(const char* format, ...) RTEMS_PRINTFLIKE(1, 2);
+
+#define RTEMS_TEST_PARALLEL_PROCESSOR_MAX 32
+
+typedef struct rtems_test_parallel_job rtems_test_parallel_job;
+
+/**
+ * @brief Internal context for parallel job execution.
+ */
+typedef struct {
+ Atomic_Ulong stop;
+ SMP_barrier_Control barrier;
+ size_t worker_count;
+ rtems_id worker_ids[RTEMS_TEST_PARALLEL_PROCESSOR_MAX];
+ rtems_id stop_worker_timer_id;
+ const struct rtems_test_parallel_job *jobs;
+ size_t job_count;
+} rtems_test_parallel_context;
+
+/**
+ * @brief Worker task setup handler.
+ *
+ * Called during rtems_test_parallel() to optionally setup a worker task before
+ * it is started.
+ *
+ * @param[in] ctx The parallel context.
+ * @param[in] worker_index The worker index.
+ * @param[in] worker_id The worker task identifier.
+ */
+typedef void (*rtems_test_parallel_worker_setup)(
+ rtems_test_parallel_context *ctx,
+ size_t worker_index,
+ rtems_id worker_id
+);
+
+/**
+ * @brief Basic parallel job description.
+ */
+struct rtems_test_parallel_job {
+ /**
+ * @brief Job initialization handler.
+ *
+ * This handler executes only in the context of the master worker before the
+ * job body handler.
+ *
+ * @param[in] ctx The parallel context.
+ * @param[in] arg The user specified argument.
+ * @param[in] active_workers Count of active workers. Depends on the cascade
+ * option.
+ *
+ * @return The desired job body execution time in clock ticks. See
+ * rtems_test_parallel_stop_job().
+ */
+ rtems_interval (*init)(
+ rtems_test_parallel_context *ctx,
+ void *arg,
+ size_t active_workers
+ );
+
+ /**
+ * @brief Job body handler.
+ *
+ * @param[in] ctx The parallel context.
+ * @param[in] arg The user specified argument.
+ * @param[in] active_workers Count of active workers. Depends on the cascade
+ * option.
+ * @param[in] worker_index The worker index. It ranges from 0 to the
+ * processor count minus one.
+ */
+ void (*body)(
+ rtems_test_parallel_context *ctx,
+ void *arg,
+ size_t active_workers,
+ size_t worker_index
+ );
+
+ /**
+ * @brief Job finalization handler.
+ *
+ * This handler executes only in the context of the master worker after the
+ * job body handler.
+ *
+ * @param[in] ctx The parallel context.
+ * @param[in] arg The user specified argument.
+ * @param[in] active_workers Count of active workers. Depends on the cascade
+ * option.
+ */
+ void (*fini)(
+ rtems_test_parallel_context *ctx,
+ void *arg,
+ size_t active_workers
+ );
+
+ /**
+ * @brief Job specific argument.
+ */
+ void *arg;
+
+ /**
+ * @brief Job cascading flag.
+ *
+ * This flag indicates whether the job should be executed in a cascaded
+ * manner (the job is executed on one processor first, two processors
+ * afterwards and incremented step by step until all processors are used).
+ */
+ bool cascade;
+};
+
+/**
+ * @brief Indicates if a job body should stop its work loop.
+ *
+ * @param[in] ctx The parallel context.
+ *
+ * @retval true The job body should stop its work loop and return to the caller.
+ * @retval false Otherwise.
+ */
+static inline bool rtems_test_parallel_stop_job(
+ const rtems_test_parallel_context *ctx
+)
+{
+ return _Atomic_Load_ulong(&ctx->stop, ATOMIC_ORDER_RELAXED) != 0;
+}
+
+/**
+ * @brief Indicates if a worker is the master worker.
+ *
+ * The master worker is the thread that called rtems_test_parallel().
+ *
+ * @param[in] worker_index The worker index.
+ *
+ * @retval true This is the master worker.
+ * @retval false Otherwise.
+ */
+static inline bool rtems_test_parallel_is_master_worker(size_t worker_index)
+{
+ return worker_index == 0;
+}
+
+/**
+ * @brief Returns the task identifier for a worker.
+ *
+ * @param[in] ctx The parallel context.
+ * @param[in] worker_index The worker index.
+ *
+ * @return The task identifier of the worker.
+ */
+static inline rtems_id rtems_test_parallel_get_task_id(
+ const rtems_test_parallel_context *ctx,
+ size_t worker_index
+)
+{
+ return ctx->worker_ids[worker_index];
+}
+
+/**
+ * @brief Runs a bunch of jobs in parallel on all processors of the system.
+ *
+ * The worker tasks inherit the priority of the executing task.
+ *
+ * There are SMP barriers before and after the job body.
+ *
+ * @param[in] ctx The parallel context.
+ * @param[in] worker_setup Optional handler to setup a worker task before it is
+ * started.
+ * @param[in] jobs The table of jobs.
+ * @param[in] job_count The count of jobs in the job table.
+ */
+void rtems_test_parallel(
+ rtems_test_parallel_context *ctx,
+ rtems_test_parallel_worker_setup worker_setup,
+ const rtems_test_parallel_job *jobs,
+ size_t job_count
+);
+
+/**
+ * @brief Performs a busy loop for the specified seconds and nanoseconds based
+ * on the CPU usage of the executing thread.
+ *
+ * This function continuously reads the CPU usage of the executing thread.
+ * This operation may lead to a scheduler instance lock contention in SMP
+ * configurations.
+ *
+ * @param[in] seconds The busy seconds.
+ * @param[in] nanoseconds The busy nanoseconds.
+ */
+void rtems_test_busy_cpu_usage(time_t seconds, long nanoseconds);
+
+/**
+ * @brief Runs the test cases of the RTEMS Test Framework using a default
+ * configuration in the context of a task.
+ *
+ * The application must provide rtems_test_name.
+ *
+ * @param arg is the task argument.
+ * @param state is the test state.
+ */
+RTEMS_NO_RETURN void rtems_test_run(
+ rtems_task_argument arg,
+ const RTEMS_TEST_STATE state
+);
+
+/** @} */
+
+#ifdef __cplusplus
+}
+#endif /* __cplusplus */
+
+#endif /* _RTEMS_TEST_H */
diff --git a/cpukit/include/rtems/test.h b/cpukit/include/rtems/test.h
index 873b8482af..935e796bf0 100644
--- a/cpukit/include/rtems/test.h
+++ b/cpukit/include/rtems/test.h
@@ -1,324 +1,2569 @@
/*
- * Copyright (c) 2014, 2018 embedded brains GmbH. All rights reserved.
+ * SPDX-License-Identifier: BSD-2-Clause
*
- * embedded brains GmbH
- * Dornierstr. 4
- * 82178 Puchheim
- * Germany
- * <rtems@embedded-brains.de>
+ * Copyright (C) 2017, 2020 embedded brains GmbH
*
- * 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.
*/
-#ifndef _RTEMS_TEST_H
-#define _RTEMS_TEST_H
+#ifndef THE_T_TEST_FRAMEWORK_H
+#define THE_T_TEST_FRAMEWORK_H
+
+#include <stdarg.h>
+#include <stdbool.h>
+#include <stddef.h>
+#include <stdint.h>
+#include <string.h>
-#include <rtems.h>
-#include <rtems/printer.h>
-#include <rtems/score/atomic.h>
-#include <rtems/score/smpbarrier.h>
+#ifdef __rtems__
+#include <rtems/score/cpu.h>
+#endif
#ifdef __cplusplus
extern "C" {
#endif /* __cplusplus */
/**
- * @defgroup RTEMSTest Test Support
+ * @defgroup RTEMSTestFramework RTEMS Test Framework
*
* @ingroup RTEMSAPI
*
- * @brief Test support functions.
+ * @brief The RTEMS Test Framework helps you to write tests.
*
* @{
*/
+typedef enum {
+ T_QUIET,
+ T_NORMAL,
+ T_VERBOSE
+} T_verbosity;
+
+typedef struct T_fixture {
+ void (*setup)(void *);
+ void (*stop)(void *);
+ void (*teardown)(void *);
+ size_t (*scope)(void *, char *, size_t);
+ void *initial_context;
+} T_fixture;
+
+typedef struct T_fixture_node {
+ struct T_fixture_node *next;
+ struct T_fixture_node *previous;
+ const T_fixture *fixture;
+ void *context;
+ unsigned int next_planned_steps;
+ unsigned int next_steps;
+ unsigned int failures;
+} T_fixture_node;
+
+#define T_ARRAY_SIZE(array) (sizeof(array) / sizeof((array)[0]))
+
+/*
+ * The __FILE__ includes the full file path from the command line. Enable the
+ * build system to give a sorter file name via a command line define.
+ */
+#ifndef T_FILE_NAME
+#define T_FILE_NAME __FILE__
+#endif
+
+#if defined(__GNUC__) || __STDC_VERSION__ >= 199409L
+#define T_ZERO_LENGTH_ARRAY
+#define T_ZERO_LENGTH_ARRAY_EXTENSION(n) (n)
+#else
+#define T_ZERO_LENGTH_ARRAY 1
+#define T_ZERO_LENGTH_ARRAY_EXTENSION(n) ((n) - 1)
+#endif
+
+/** @} */
+
/**
- * @brief Each test must define a test name string.
+ * @defgroup RTEMSTestFrameworkImpl RTEMS Test Framework Implementation
+ *
+ * @ingroup RTEMSTestFramework
+ *
+ * @brief Implementation details.
+ *
+ * @{
*/
-extern const char rtems_test_name[];
+
+#ifdef __cplusplus
+#define T_NO_RETURN [[ noreturn ]]
+#else
+#define T_NO_RETURN _Noreturn
+#endif
+
+typedef struct T_case_context {
+ const char *name;
+ void (*body)(void);
+ const T_fixture *fixture;
+ const struct T_case_context *next;
+} T_case_context;
+
+void T_case_register(T_case_context *);
+
+#define T_CHECK_STOP 1U
+
+#define T_CHECK_QUIET 2U
+
+/* If you change this value, you have to adjust T_VA_ARGS_KIND() as well */
+#define T_CHECK_FMT 4U
+
+#define T_CHECK_STEP_FLAG 8U
+
+#define T_CHECK_STEP_TO_FLAGS(step) ((unsigned int)(step) << 8)
+
+#define T_CHECK_STEP_FROM_FLAGS(flags) ((flags) >> 8)
+
+#define T_CHECK_STEP(step) (T_CHECK_STEP_TO_FLAGS(step) | T_CHECK_STEP_FLAG)
+
+typedef struct {
+ const char *file;
+ int line;
+ unsigned int flags;
+} T_check_context;
+
+typedef struct {
+ T_check_context base;
+ const char *msg;
+} T_check_context_msg;
+
+#define T_VA_ARGS_FIRST(...) T_VA_ARGS_FIRST_SELECT(__VA_ARGS__, throw_away)
+#define T_VA_ARGS_FIRST_SELECT(first, ...) first
+
+/*
+ * The T_VA_ARGS_MORE() supports up to nine arguments. It expands to nothing
+ * if only one argument is given. It expands to a comma and the second and
+ * following arguments if at least two arguments are present. The 4U shall
+ * correspond to T_CHECK_FMT.
+ */
+#define T_VA_ARGS_MORE(...) \
+ T_VA_ARGS_XEXPAND(T_VA_ARGS_KIND(__VA_ARGS__), __VA_ARGS__)
+#define T_VA_ARGS_XEXPAND(kind, ...) T_VA_ARGS_EXPAND(kind, __VA_ARGS__)
+#define T_VA_ARGS_EXPAND(kind, ...) T_VA_ARGS_EXPAND_##kind(__VA_ARGS__)
+#define T_VA_ARGS_EXPAND_0U(first)
+#define T_VA_ARGS_EXPAND_4U(first, ...) , __VA_ARGS__
+#define T_VA_ARGS_KIND(...) \
+ T_VA_ARGS_SELECT(__VA_ARGS__, \
+ 4U, 4U, 4U, 4U, 4U, 4U, 4U, 4U, 0U, throw_away)
+#define T_VA_ARGS_SELECT(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, ...) a10
+
+void T_check(const T_check_context *, bool, ...);
+
+extern const T_check_context T_special;
+
+#define T_flags_true(flags, ...) \
+{ \
+ static const T_check_context T_check_instance = { \
+ T_FILE_NAME, __LINE__, \
+ (flags) | T_VA_ARGS_KIND(__VA_ARGS__) }; \
+ T_check(&T_check_instance, \
+ T_VA_ARGS_FIRST(__VA_ARGS__) T_VA_ARGS_MORE(__VA_ARGS__)); \
+}
+
+#define T_flags_eq(flags, a, ...) \
+ T_flags_true(flags, \
+ (a) == (T_VA_ARGS_FIRST(__VA_ARGS__)) T_VA_ARGS_MORE(__VA_ARGS__))
+
+#define T_flags_ne(flags, a, ...) \
+ T_flags_true(flags, \
+ (a) != (T_VA_ARGS_FIRST(__VA_ARGS__)) T_VA_ARGS_MORE(__VA_ARGS__))
+
+void T_check_eq_ptr(const T_check_context_msg *, const void *, const void *);
+
+#define T_flags_eq_ptr(a, e, flags, sa, se) \
+{ \
+ static const T_check_context_msg T_check_instance = { \
+ { T_FILE_NAME, __LINE__, (flags) | T_CHECK_FMT }, \
+ sa " == " se }; \
+ T_check_eq_ptr(&T_check_instance, a, e); \
+}
+
+void T_check_ne_ptr(const T_check_context_msg *, const void *, const void *);
+
+#define T_flags_ne_ptr(a, e, flags, sa, se) \
+{ \
+ static const T_check_context_msg T_check_instance = { \
+ { T_FILE_NAME, __LINE__, (flags) | T_CHECK_FMT }, \
+ sa " != " se }; \
+ T_check_ne_ptr(&T_check_instance, a, e); \
+}
+
+void T_check_null(const T_check_context_msg *, const void *);
+
+#define T_flags_null(a, flags, sa) \
+{ \
+ static const T_check_context_msg T_check_instance = { \
+ { T_FILE_NAME, __LINE__, (flags) | T_CHECK_FMT }, sa }; \
+ T_check_null(&T_check_instance, a); \
+}
+
+void T_check_not_null(const T_check_context_msg *, const void *);
+
+#define T_flags_not_null(a, flags, sa) \
+{ \
+ static const T_check_context_msg T_check_instance = { \
+ { T_FILE_NAME, __LINE__, (flags) | T_CHECK_FMT }, sa }; \
+ T_check_not_null(&T_check_instance, a); \
+}
+
+void T_check_eq_mem(const T_check_context_msg *, const void *, const void *,
+ size_t);
+
+#define T_flags_eq_mem(a, e, n, flags, sa, se, sn) \
+{ \
+ static const T_check_context_msg T_check_instance = { \
+ { T_FILE_NAME, __LINE__, (flags) | T_CHECK_FMT }, \
+ "memcmp(" sa ", " se ", " sn ") == 0" }; \
+ T_check_eq_mem(&T_check_instance, a, e, n); \
+}
+
+void T_check_ne_mem(const T_check_context_msg *, const void *, const void *,
+ size_t);
+
+#define T_flags_ne_mem(a, e, n, flags, sa, se, sn) \
+{ \
+ static const T_check_context_msg T_check_instance = { \
+ { T_FILE_NAME, __LINE__, (flags) | T_CHECK_FMT }, \
+ "memcmp(" sa ", " se ", " sn ") != 0" }; \
+ T_check_ne_mem(&T_check_instance, a, e, n); \
+}
+
+void T_check_eq_str(const T_check_context *, const char *, const char *);
+
+#define T_flags_eq_str(a, e, flags) \
+{ \
+ static const T_check_context T_check_instance = { \
+ T_FILE_NAME, __LINE__, (flags) | T_CHECK_FMT }; \
+ T_check_eq_str(&T_check_instance, a, e); \
+}
+
+void T_check_ne_str(const T_check_context *, const char *, const char *);
+
+#define T_flags_ne_str(a, e, flags) \
+{ \
+ static const T_check_context T_check_instance = { \
+ T_FILE_NAME, __LINE__, (flags) | T_CHECK_FMT }; \
+ T_check_ne_str(&T_check_instance, a, e); \
+}
+
+void T_check_eq_nstr(const T_check_context *, const char *, const char *,
+ size_t);
+
+#define T_flags_eq_nstr(a, e, n, flags) \
+{ \
+ static const T_check_context T_check_instance = { \
+ T_FILE_NAME, __LINE__, (flags) | T_CHECK_FMT }; \
+ T_check_eq_nstr(&T_check_instance, a, e, n); \
+}
+
+void T_check_ne_nstr(const T_check_context *, const char *, const char *,
+ size_t);
+
+#define T_flags_ne_nstr(a, e, n, flags) \
+{ \
+ static const T_check_context T_check_instance = { \
+ T_FILE_NAME, __LINE__, (flags) | T_CHECK_FMT }; \
+ T_check_ne_nstr(&T_check_instance, a, e, n); \
+}
+
+void T_check_eq_char(const T_check_context *, char, char);
+
+#define T_flags_eq_char(a, e, flags) \
+{ \
+ static const T_check_context T_check_instance = { \
+ T_FILE_NAME, __LINE__, (flags) | T_CHECK_FMT }; \
+ T_check_eq_char(&T_check_instance, a, e); \
+}
+
+void T_check_ne_char(const T_check_context *, char, char);
+
+#define T_flags_ne_char(a, e, flags) \
+{ \
+ static const T_check_context T_check_instance = { \
+ T_FILE_NAME, __LINE__, (flags) | T_CHECK_FMT }; \
+ T_check_ne_char(&T_check_instance, a, e); \
+}
+
+void T_check_eq_int(const T_check_context *, int, int);
+
+#define T_flags_eq_int(a, e, flags) \
+{ \
+ static const T_check_context T_check_instance = { \
+ T_FILE_NAME, __LINE__, (flags) | T_CHECK_FMT }; \
+ T_check_eq_int(&T_check_instance, a, e); \
+}
+
+void T_check_ne_int(const T_check_context *, int, int);
+
+#define T_flags_ne_int(a, e, flags) \
+{ \
+ static const T_check_context T_check_instance = { \
+ T_FILE_NAME, __LINE__, (flags) | T_CHECK_FMT }; \
+ T_check_ne_int(&T_check_instance, a, e); \
+}
+
+void T_check_ge_int(const T_check_context *, int, int);
+
+#define T_flags_ge_int(a, e, flags) \
+{ \
+ static const T_check_context T_check_instance = { \
+ T_FILE_NAME, __LINE__, (flags) | T_CHECK_FMT }; \
+ T_check_ge_int(&T_check_instance, a, e); \
+}
+
+void T_check_gt_int(const T_check_context *, int, int);
+
+#define T_flags_gt_int(a, e, flags) \
+{ \
+ static const T_check_context T_check_instance = { \
+ T_FILE_NAME, __LINE__, (flags) | T_CHECK_FMT }; \
+ T_check_gt_int(&T_check_instance, a, e); \
+}
+
+void T_check_le_int(const T_check_context *, int, int);
+
+#define T_flags_le_int(a, e, flags) \
+{ \
+ static const T_check_context T_check_instance = { \
+ T_FILE_NAME, __LINE__, (flags) | T_CHECK_FMT }; \
+ T_check_le_int(&T_check_instance, a, e); \
+}
+
+void T_check_lt_int(const T_check_context *, int, int);
+
+#define T_flags_lt_int(a, e, flags) \
+{ \
+ static const T_check_context T_check_instance = { \
+ T_FILE_NAME, __LINE__, (flags) | T_CHECK_FMT }; \
+ T_check_lt_int(&T_check_instance, a, e); \
+}
+
+void T_check_eq_uint(const T_check_context *, unsigned int, unsigned int);
+
+#define T_flags_eq_uint(a, e, flags) \
+{ \
+ static const T_check_context T_check_instance = { \
+ T_FILE_NAME, __LINE__, (flags) | T_CHECK_FMT }; \
+ T_check_eq_uint(&T_check_instance, a, e); \
+}
+
+void T_check_ne_uint(const T_check_context *, unsigned int, unsigned int);
+
+#define T_flags_ne_uint(a, e, flags) \
+{ \
+ static const T_check_context T_check_instance = { \
+ T_FILE_NAME, __LINE__, (flags) | T_CHECK_FMT }; \
+ T_check_ne_uint(&T_check_instance, a, e); \
+}
+
+void T_check_ge_uint(const T_check_context *, unsigned int, unsigned int);
+
+#define T_flags_ge_uint(a, e, flags) \
+{ \
+ static const T_check_context T_check_instance = { \
+ T_FILE_NAME, __LINE__, (flags) | T_CHECK_FMT }; \
+ T_check_ge_uint(&T_check_instance, a, e); \
+}
+
+void T_check_gt_uint(const T_check_context *, unsigned int, unsigned int);
+
+#define T_flags_gt_uint(a, e, flags) \
+{ \
+ static const T_check_context T_check_instance = { \
+ T_FILE_NAME, __LINE__, (flags) | T_CHECK_FMT }; \
+ T_check_gt_uint(&T_check_instance, a, e); \
+}
+
+void T_check_le_uint(const T_check_context *, unsigned int, unsigned int);
+
+#define T_flags_le_uint(a, e, flags) \
+{ \
+ static const T_check_context T_check_instance = { \
+ T_FILE_NAME, __LINE__, (flags) | T_CHECK_FMT }; \
+ T_check_le_uint(&T_check_instance, a, e); \
+}
+
+void T_check_lt_uint(const T_check_context *, unsigned int, unsigned int);
+
+#define T_flags_lt_uint(a, e, flags) \
+{ \
+ static const T_check_context T_check_instance = { \
+ T_FILE_NAME, __LINE__, (flags) | T_CHECK_FMT }; \
+ T_check_lt_uint(&T_check_instance, a, e); \
+}
+
+void T_check_eq_long(const T_check_context *, long, long);
+
+#define T_flags_eq_long(a, e, flags) \
+{ \
+ static const T_check_context T_check_instance = { \
+ T_FILE_NAME, __LINE__, (flags) | T_CHECK_FMT }; \
+ T_check_eq_long(&T_check_instance, a, e); \
+}
+
+void T_check_ne_long(const T_check_context *, long, long);
+
+#define T_flags_ne_long(a, e, flags) \
+{ \
+ static const T_check_context T_check_instance = { \
+ T_FILE_NAME, __LINE__, (flags) | T_CHECK_FMT }; \
+ T_check_ne_long(&T_check_instance, a, e); \
+}
+
+void T_check_ge_long(const T_check_context *, long, long);
+
+#define T_flags_ge_long(a, e, flags) \
+{ \
+ static const T_check_context T_check_instance = { \
+ T_FILE_NAME, __LINE__, (flags) | T_CHECK_FMT }; \
+ T_check_ge_long(&T_check_instance, a, e); \
+}
+
+void T_check_gt_long(const T_check_context *, long, long);
+
+#define T_flags_gt_long(a, e, flags) \
+{ \
+ static const T_check_context T_check_instance = { \
+ T_FILE_NAME, __LINE__, (flags) | T_CHECK_FMT }; \
+ T_check_gt_long(&T_check_instance, a, e); \
+}
+
+void T_check_le_long(const T_check_context *, long, long);
+
+#define T_flags_le_long(a, e, flags) \
+{ \
+ static const T_check_context T_check_instance = { \
+ T_FILE_NAME, __LINE__, (flags) | T_CHECK_FMT }; \
+ T_check_le_long(&T_check_instance, a, e); \
+}
+
+void T_check_lt_long(const T_check_context *, long, long);
+
+#define T_flags_lt_long(a, e, flags) \
+{ \
+ static const T_check_context T_check_instance = { \
+ T_FILE_NAME, __LINE__, (flags) | T_CHECK_FMT }; \
+ T_check_lt_long(&T_check_instance, a, e); \
+}
+
+void T_check_eq_ulong(const T_check_context *, unsigned long, unsigned long);
+
+#define T_flags_eq_ulong(a, e, flags) \
+{ \
+ static const T_check_context T_check_instance = { \
+ T_FILE_NAME, __LINE__, (flags) | T_CHECK_FMT }; \
+ T_check_eq_ulong(&T_check_instance, a, e); \
+}
+
+void T_check_ne_ulong(const T_check_context *, unsigned long, unsigned long);
+
+#define T_flags_ne_ulong(a, e, flags) \
+{ \
+ static const T_check_context T_check_instance = { \
+ T_FILE_NAME, __LINE__, (flags) | T_CHECK_FMT }; \
+ T_check_ne_ulong(&T_check_instance, a, e); \
+}
+
+void T_check_ge_ulong(const T_check_context *, unsigned long, unsigned long);
+
+#define T_flags_ge_ulong(a, e, flags) \
+{ \
+ static const T_check_context T_check_instance = { \
+ T_FILE_NAME, __LINE__, (flags) | T_CHECK_FMT }; \
+ T_check_ge_ulong(&T_check_instance, a, e); \
+}
+
+void T_check_gt_ulong(const T_check_context *, unsigned long, unsigned long);
+
+#define T_flags_gt_ulong(a, e, flags) \
+{ \
+ static const T_check_context T_check_instance = { \
+ T_FILE_NAME, __LINE__, (flags) | T_CHECK_FMT }; \
+ T_check_gt_ulong(&T_check_instance, a, e); \
+}
+
+void T_check_le_ulong(const T_check_context *, unsigned long, unsigned long);
+
+#define T_flags_le_ulong(a, e, flags) \
+{ \
+ static const T_check_context T_check_instance = { \
+ T_FILE_NAME, __LINE__, (flags) | T_CHECK_FMT }; \
+ T_check_le_ulong(&T_check_instance, a, e); \
+}
+
+void T_check_lt_ulong(const T_check_context *, unsigned long, unsigned long);
+
+#define T_flags_lt_ulong(a, e, flags) \
+{ \
+ static const T_check_context T_check_instance = { \
+ T_FILE_NAME, __LINE__, (flags) | T_CHECK_FMT }; \
+ T_check_lt_ulong(&T_check_instance, a, e); \
+}
+
+void T_check_eq_ll(const T_check_context *, long long, long long);
+
+#define T_flags_eq_ll(a, e, flags) \
+{ \
+ static const T_check_context T_check_instance = { \
+ T_FILE_NAME, __LINE__, (flags) | T_CHECK_FMT }; \
+ T_check_eq_ll(&T_check_instance, a, e); \
+}
+
+void T_check_ne_ll(const T_check_context *, long long, long long);
+
+#define T_flags_ne_ll(a, e, flags) \
+{ \
+ static const T_check_context T_check_instance = { \
+ T_FILE_NAME, __LINE__, (flags) | T_CHECK_FMT }; \
+ T_check_ne_ll(&T_check_instance, a, e); \
+}
+
+void T_check_ge_ll(const T_check_context *, long long, long long);
+
+#define T_flags_ge_ll(a, e, flags) \
+{ \
+ static const T_check_context T_check_instance = { \
+ T_FILE_NAME, __LINE__, (flags) | T_CHECK_FMT }; \
+ T_check_ge_ll(&T_check_instance, a, e); \
+}
+
+void T_check_gt_ll(const T_check_context *, long long, long long);
+
+#define T_flags_gt_ll(a, e, flags) \
+{ \
+ static const T_check_context T_check_instance = { \
+ T_FILE_NAME, __LINE__, (flags) | T_CHECK_FMT }; \
+ T_check_gt_ll(&T_check_instance, a, e); \
+}
+
+void T_check_le_ll(const T_check_context *, long long, long long);
+
+#define T_flags_le_ll(a, e, flags) \
+{ \
+ static const T_check_context T_check_instance = { \
+ T_FILE_NAME, __LINE__, (flags) | T_CHECK_FMT }; \
+ T_check_le_ll(&T_check_instance, a, e); \
+}
+
+void T_check_lt_ll(const T_check_context *, long long, long long);
+
+#define T_flags_lt_ll(a, e, flags) \
+{ \
+ static const T_check_context T_check_instance = { \
+ T_FILE_NAME, __LINE__, (flags) | T_CHECK_FMT }; \
+ T_check_lt_ll(&T_check_instance, a, e); \
+}
+
+void T_check_eq_ull(const T_check_context *, unsigned long long,
+ unsigned long long);
+
+#define T_flags_eq_ull(a, e, flags) \
+{ \
+ static const T_check_context T_check_instance = { \
+ T_FILE_NAME, __LINE__, (flags) | T_CHECK_FMT }; \
+ T_check_eq_ull(&T_check_instance, a, e); \
+}
+
+void T_check_ne_ull(const T_check_context *, unsigned long long,
+ unsigned long long);
+
+#define T_flags_ne_ull(a, e, flags) \
+{ \
+ static const T_check_context T_check_instance = { \
+ T_FILE_NAME, __LINE__, (flags) | T_CHECK_FMT }; \
+ T_check_ne_ull(&T_check_instance, a, e); \
+}
+
+void T_check_ge_ull(const T_check_context *, unsigned long long,
+ unsigned long long);
+
+#define T_flags_ge_ull(a, e, flags) \
+{ \
+ static const T_check_context T_check_instance = { \
+ T_FILE_NAME, __LINE__, (flags) | T_CHECK_FMT }; \
+ T_check_ge_ull(&T_check_instance, a, e); \
+}
+
+void T_check_gt_ull(const T_check_context *, unsigned long long,
+ unsigned long long);
+
+#define T_flags_gt_ull(a, e, flags) \
+{ \
+ static const T_check_context T_check_instance = { \
+ T_FILE_NAME, __LINE__, (flags) | T_CHECK_FMT }; \
+ T_check_gt_ull(&T_check_instance, a, e); \
+}
+
+void T_check_le_ull(const T_check_context *, unsigned long long,
+ unsigned long long);
+
+#define T_flags_le_ull(a, e, flags) \
+{ \
+ static const T_check_context T_check_instance = { \
+ T_FILE_NAME, __LINE__, (flags) | T_CHECK_FMT }; \
+ T_check_le_ull(&T_check_instance, a, e); \
+}
+
+void T_check_lt_ull(const T_check_context *, unsigned long long,
+ unsigned long long);
+
+#define T_flags_lt_ull(a, e, flags) \
+{ \
+ static const T_check_context T_check_instance = { \
+ T_FILE_NAME, __LINE__, (flags) | T_CHECK_FMT }; \
+ T_check_lt_ull(&T_check_instance, a, e); \
+}
+
+void T_check_eno(const T_check_context *, int, int);
+
+#define T_flags_eno(a, e, flags) \
+{ \
+ static const T_check_context T_check_instance = { \
+ T_FILE_NAME, __LINE__, (flags) | T_CHECK_FMT }; \
+ T_check_eno(&T_check_instance, a, e); \
+}
+
+void T_check_eno_success(const T_check_context *, int);
+
+#define T_flags_eno_success(a, flags) \
+{ \
+ static const T_check_context T_check_instance = { \
+ T_FILE_NAME, __LINE__, (flags) | T_CHECK_FMT }; \
+ T_check_eno_success(&T_check_instance, a); \
+}
+
+void T_check_psx_error(const T_check_context *, int, int);
+
+#define T_flags_psx_error(a, eno, flags) \
+{ \
+ static const T_check_context T_check_instance = { \
+ T_FILE_NAME, __LINE__, (flags) | T_CHECK_FMT }; \
+ T_check_psx_error(&T_check_instance, a, eno); \
+}
+
+void T_check_psx_success(const T_check_context *, int);
+
+#define T_flags_psx_success(a, flags) \
+{ \
+ static const T_check_context T_check_instance = { \
+ T_FILE_NAME, __LINE__, (flags) | T_CHECK_FMT }; \
+ T_check_psx_success(&T_check_instance, a); \
+}
+
+/** @} */
+
+int T_printf(char const *, ...);
+
+int T_vprintf(char const *, va_list);
+
+int T_puts(const char *, size_t);
+
+int T_snprintf(char *, size_t, const char *, ...);
+
+void T_log(T_verbosity, char const *, ...);
+
+const char *T_case_name(void);
+
+T_verbosity T_set_verbosity(T_verbosity);
/**
- * @brief Each test must define a printer.
+ * @defgroup RTEMSTestFrameworkChecksBool Boolean Checks
+ *
+ * @ingroup RTEMSTestFramework
+ *
+ * @brief Checks for boolean expressions.
+ *
+ * @{
*/
-extern rtems_printer rtems_test_printer;
+
+#define T_true(...) T_flags_true(0, __VA_ARGS__)
+#define T_assert_true(...) T_flags_true(T_CHECK_STOP, __VA_ARGS__)
+#define T_quiet_true(...) T_flags_true(T_CHECK_QUIET, __VA_ARGS__)
+#define T_step_true(s, ...) T_flags_true(T_CHECK_STEP(s), __VA_ARGS__)
+#define T_step_assert_true(s, ...) \
+ T_flags_true(T_CHECK_STEP(s) | T_CHECK_STOP, __VA_ARGS__)
+
+#define T_false(...) \
+ T_flags_true(0, \
+ !(T_VA_ARGS_FIRST(__VA_ARGS__)) T_VA_ARGS_MORE(__VA_ARGS__))
+#define T_assert_false(...) \
+ T_flags_true(T_CHECK_STOP, \
+ !(T_VA_ARGS_FIRST(__VA_ARGS__)) T_VA_ARGS_MORE(__VA_ARGS__))
+#define T_quiet_false(...) \
+ T_flags_true(T_CHECK_QUIET, \
+ !(T_VA_ARGS_FIRST(__VA_ARGS__)) T_VA_ARGS_MORE(__VA_ARGS__))
+#define T_step_false(s, ...) \
+ T_flags_true(T_CHECK_STEP(s), \
+ !(T_VA_ARGS_FIRST(__VA_ARGS__)) T_VA_ARGS_MORE(__VA_ARGS__))
+#define T_step_assert_false(s, ...) \
+ T_flags_true(T_CHECK_STEP(s) | T_CHECK_STOP, \
+ !(T_VA_ARGS_FIRST(__VA_ARGS__)) T_VA_ARGS_MORE(__VA_ARGS__))
+
+/** @} */
/**
- * @brief Fatal extension for tests.
+ * @defgroup RTEMSTestFrameworkChecksGeneric Generic Checks
+ *
+ * @ingroup RTEMSTestFramework
+ *
+ * @brief Checks for data types with an equality or inequality operator.
+ *
+ * @{
*/
-void rtems_test_fatal_extension(
- rtems_fatal_source source,
- bool always_set_to_false,
- rtems_fatal_code code
-);
+
+#define T_eq(a, ...) T_flags_eq(0, a, __VA_ARGS__)
+#define T_assert_eq(a, ...) T_flags_eq(T_CHECK_STOP, a, __VA_ARGS__)
+#define T_quiet_eq(a, ...) T_flags_eq(T_CHECK_QUIET, a, __VA_ARGS__)
+#define T_step_eq(s, a, ...) T_flags_eq(T_CHECK_STEP(s), a, __VA_ARGS__)
+#define T_step_assert_eq(s, a, ...) \
+ T_flags_eq(T_CHECK_STEP(s) | T_CHECK_STOP, a, __VA_ARGS__)
+
+#define T_ne(a, ...) T_flags_ne(0, a, __VA_ARGS__)
+#define T_assert_ne(a, ...) T_flags_ne(T_CHECK_STOP, a, __VA_ARGS__)
+#define T_quiet_ne(a, ...) T_flags_ne(T_CHECK_QUIET, a, __VA_ARGS__)
+#define T_step_ne(s, a, ...) T_flags_ne(T_CHECK_STEP(s), a, __VA_ARGS__)
+#define T_step_assert_ne(s, a, ...) \
+ T_flags_ne(T_CHECK_STEP(s) | T_CHECK_STOP, a, __VA_ARGS__)
+
+/** @} */
/**
- * @brief Initial extension for tests.
+ * @defgroup RTEMSTestFrameworkChecksPointer Pointer Checks
+ *
+ * @ingroup RTEMSTestFramework
+ *
+ * @brief Checks for pointers.
+ *
+ * @{
*/
-#define RTEMS_TEST_INITIAL_EXTENSION \
- { NULL, NULL, NULL, NULL, NULL, NULL, NULL, rtems_test_fatal_extension }
+
+#define T_eq_ptr(a, e) T_flags_eq_ptr(a, e, 0, #a, #e)
+#define T_assert_eq_ptr(a, e) T_flags_eq_ptr(a, e, T_CHECK_STOP, #a, #e)
+#define T_quiet_eq_ptr(a, e) T_flags_eq_ptr(a, e, T_CHECK_QUIET, #a, #e)
+#define T_step_eq_ptr(s, a, e) T_flags_eq_ptr(a, e, T_CHECK_STEP(s), #a, #e)
+#define T_step_assert_eq_ptr(s, a, e) \
+ T_flags_eq_ptr(a, e, T_CHECK_STEP(s) | T_CHECK_STOP, #a, #e)
+
+#define T_ne_ptr(a, e) T_flags_ne_ptr(a, e, 0, #a, #e)
+#define T_assert_ne_ptr(a, e) T_flags_ne_ptr(a, e, T_CHECK_STOP, #a, #e)
+#define T_quiet_ne_ptr(a, e) T_flags_ne_ptr(a, e, T_CHECK_QUIET, #a, #e)
+#define T_step_ne_ptr(s, a, e) T_flags_ne_ptr(a, e, T_CHECK_STEP(s), #a, #e)
+#define T_step_assert_ne_ptr(s, a, e) \
+ T_flags_ne_ptr(a, e, T_CHECK_STEP(s) | T_CHECK_STOP, #a, #e)
+
+#define T_null(a) T_flags_null(a, 0, #a)
+#define T_assert_null(a) T_flags_null(a, T_CHECK_STOP, #a)
+#define T_quiet_null(a) T_flags_null(a, T_CHECK_QUIET, #a)
+#define T_quiet_assert_null(a) \
+ T_flags_null(a, T_CHECK_QUIET | T_CHECK_STOP, #a)
+#define T_step_null(s, a) T_flags_null(a, T_CHECK_STEP(s), #a)
+#define T_step_assert_null(s, a) \
+ T_flags_null(a, T_CHECK_STEP(s) | T_CHECK_STOP, #a)
+
+#define T_not_null(a) T_flags_not_null(a, 0, #a)
+#define T_assert_not_null(a) T_flags_not_null(a, T_CHECK_STOP, #a)
+#define T_quiet_not_null(a) T_flags_not_null(a, T_CHECK_QUIET, #a)
+#define T_quiet_assert_not_null(a) \
+ T_flags_not_null(a, T_CHECK_QUIET | T_CHECK_STOP, #a)
+#define T_step_not_null(s, a) T_flags_not_null(a, T_CHECK_STEP(s), #a)
+#define T_step_assert_not_null(s, a) \
+ T_flags_not_null(a, T_CHECK_STEP(s) | T_CHECK_STOP, #a)
+
+/** @} */
/**
- * @brief Test states.
+ * @defgroup RTEMSTestFrameworkChecksMemStr Memory Area Checks
+ *
+ * @ingroup RTEMSTestFramework
+ *
+ * @brief Checks for memory areas.
+ *
+ * @{
*/
-typedef enum
-{
- RTEMS_TEST_STATE_PASS,
- RTEMS_TEST_STATE_FAIL,
- RTEMS_TEST_STATE_USER_INPUT,
- RTEMS_TEST_STATE_INDETERMINATE,
- RTEMS_TEST_STATE_BENCHMARK
-} RTEMS_TEST_STATE;
-
-#if (TEST_STATE_EXPECTED_FAIL && TEST_STATE_USER_INPUT) || \
- (TEST_STATE_EXPECTED_FAIL && TEST_STATE_INDETERMINATE) || \
- (TEST_STATE_EXPECTED_FAIL && TEST_STATE_BENCHMARK) || \
- (TEST_STATE_USER_INPUT && TEST_STATE_INDETERMINATE) || \
- (TEST_STATE_USER_INPUT && TEST_STATE_BENCHMARK) || \
- (TEST_STATE_INDETERMINATE && TEST_STATE_BENCHMARK)
- #error Test states must be unique
-#endif
-#if TEST_STATE_EXPECTED_FAIL
- #define TEST_STATE RTEMS_TEST_STATE_FAIL
-#elif TEST_STATE_USER_INPUT
- #define TEST_STATE RTEMS_TEST_STATE_USER_INPUT
-#elif TEST_STATE_INDETERMINATE
- #define TEST_STATE RTEMS_TEST_STATE_INDETERMINATE
-#elif TEST_STATE_BENCHMARK
- #define TEST_STATE RTEMS_TEST_STATE_BENCHMARK
-#else
- #define TEST_STATE RTEMS_TEST_STATE_PASS
-#endif
+#define T_eq_mem(a, e, n) T_flags_eq_mem(a, e, n, 0, #a, #e, #n)
+#define T_assert_eq_mem(a, e, n) \
+ T_flags_eq_mem(a, e, n, T_CHECK_STOP, #a, #e, #n)
+#define T_quiet_eq_mem(a, e, n) \
+ T_flags_eq_mem(a, e, n, T_CHECK_QUIET, #a, #e, #n)
+#define T_step_eq_mem(s, a, e, n) \
+ T_flags_eq_mem(a, e, n, T_CHECK_STEP(s), #a, #e, #n)
+#define T_step_assert_eq_mem(s, a, e, n) \
+ T_flags_eq_mem(a, e, n, T_CHECK_STEP(s) | T_CHECK_STOP, #a, #e, #n)
+
+#define T_ne_mem(a, e, n) T_flags_ne_mem(a, e, n, 0, #a, #e, #n)
+#define T_assert_ne_mem(a, e, n) \
+ T_flags_ne_mem(a, e, n, T_CHECK_STOP, #a, #e, #n)
+#define T_quiet_ne_mem(a, e, n) \
+ T_flags_ne_mem(a, e, n, T_CHECK_QUIET, #a, #e, #n)
+#define T_step_ne_mem(s, a, e, n) \
+ T_flags_ne_mem(a, e, n, T_CHECK_STEP(s), #a, #e, #n)
+#define T_step_assert_ne_mem(s, a, e, n) \
+ T_flags_ne_mem(a, e, n, T_CHECK_STEP(s) | T_CHECK_STOP, #a, #e, #n)
+
+/** @} */
/**
- * @brief Prints a begin of test message using printf().
+ * @defgroup RTEMSTestFrameworkChecksStr String Checks
+ *
+ * @ingroup RTEMSTestFramework
*
- * @returns As specified by printf().
+ * @brief Checks for strings.
+ *
+ * @{
*/
-int rtems_test_begin(const char* name, const RTEMS_TEST_STATE state);
+
+
+#define T_eq_str(a, e) T_flags_eq_str(a, e, 0)
+#define T_assert_eq_str(a, e) T_flags_eq_str(a, e, T_CHECK_STOP)
+#define T_quiet_eq_str(a, e) T_flags_eq_str(a, e, T_CHECK_QUIET)
+#define T_step_eq_str(s, a, e) T_flags_eq_str(a, e, T_CHECK_STEP(s))
+#define T_step_assert_eq_str(s, a, e) \
+ T_flags_eq_str(a, e, T_CHECK_STEP(s) | T_CHECK_STOP)
+
+#define T_ne_str(a, e) T_flags_ne_str(a, e, 0)
+#define T_assert_ne_str(a, e) T_flags_ne_str(a, e, T_CHECK_STOP)
+#define T_quiet_ne_str(a, e) T_flags_ne_str(a, e, T_CHECK_QUIET)
+#define T_step_ne_str(s, a, e) T_flags_ne_str(a, e, T_CHECK_STEP(s))
+#define T_step_assert_ne_str(s, a, e) \
+ T_flags_ne_str(a, e, T_CHECK_STEP(s) | T_CHECK_STOP)
+
+#define T_eq_nstr(a, e, n) T_flags_eq_nstr(a, e, n, 0)
+#define T_assert_eq_nstr(a, e, n) T_flags_eq_nstr(a, e, n, T_CHECK_STOP)
+#define T_quiet_eq_nstr(a, e, n) T_flags_eq_nstr(a, e, n, T_CHECK_QUIET)
+#define T_step_eq_nstr(s, a, e, n) T_flags_eq_nstr(a, e, n, T_CHECK_STEP(s))
+#define T_step_assert_eq_nstr(s, a, e, n) \
+ T_flags_eq_nstr(a, e, n, T_CHECK_STEP(s) | T_CHECK_STOP)
+
+#define T_ne_nstr(a, e, n) T_flags_ne_nstr(a, e, n, 0)
+#define T_assert_ne_nstr(a, e, n) T_flags_ne_nstr(a, e, n, T_CHECK_STOP)
+#define T_quiet_ne_nstr(a, e, n) T_flags_ne_nstr(a, e, n, T_CHECK_QUIET)
+#define T_step_ne_nstr(s, a, e, n) T_flags_ne_nstr(a, e, n, T_CHECK_STEP(s))
+#define T_step_assert_ne_nstr(s, a, e, n) \
+ T_flags_ne_nstr(a, e, n, T_CHECK_STEP(s) | T_CHECK_STOP)
+
+/** @} */
/**
- * @brief Prints an end of test message using printf().
+ * @defgroup RTEMSTestFrameworkChecksChar Character Checks
+ *
+ * @ingroup RTEMSTestFramework
+ *
+ * @brief Checks for characters (char).
*
- * @returns As specified by printf().
+ * @{
*/
-int rtems_test_end(const char* name);
+
+#define T_eq_char(a, e) T_flags_eq_char(a, e, 0)
+#define T_assert_eq_char(a, e) T_flags_eq_char(a, e, T_CHECK_STOP)
+#define T_quiet_eq_char(a, e) T_flags_eq_char(a, e, T_CHECK_QUIET)
+#define T_step_eq_char(s, a, e) T_flags_eq_char(a, e, T_CHECK_STEP(s))
+#define T_step_assert_eq_char(s, a, e) \
+ T_flags_eq_char(a, e, T_CHECK_STEP(s) | T_CHECK_STOP)
+
+#define T_ne_char(a, e) T_flags_ne_char(a, e, 0)
+#define T_assert_ne_char(a, e) T_flags_ne_char(a, e, T_CHECK_STOP)
+#define T_quiet_ne_char(a, e) T_flags_ne_char(a, e, T_CHECK_QUIET)
+#define T_step_ne_char(s, a, e) T_flags_ne_char(a, e, T_CHECK_STEP(s))
+#define T_step_assert_ne_char(s, a, e) \
+ T_flags_ne_char(a, e, T_CHECK_STEP(s) | T_CHECK_STOP)
+
+/** @} */
/**
- * @brief Exit the test without calling exit() since it closes stdin, etc and
- * pulls in stdio code
+ * @defgroup RTEMSTestFrameworkChecksSChar Signed Character Checks
+ *
+ * @ingroup RTEMSTestFramework
+ *
+ * @brief Checks for signed characters (signed char).
+ *
+ * @{
*/
-void rtems_test_exit(int status) RTEMS_NO_RETURN;
+
+#define T_eq_schar(a, e) T_flags_eq_int(a, e, 0)
+#define T_assert_eq_schar(a, e) T_flags_eq_int(a, e, T_CHECK_STOP)
+#define T_quiet_eq_schar(a, e) T_flags_eq_int(a, e, T_CHECK_QUIET)
+#define T_step_eq_schar(s, a, e) T_flags_eq_int(a, e, T_CHECK_STEP(s))
+#define T_step_assert_eq_schar(s, a, e) \
+ T_flags_eq_int(a, e, T_CHECK_STEP(s) | T_CHECK_STOP)
+
+#define T_ne_schar(a, e) T_flags_ne_int(a, e, 0)
+#define T_assert_ne_schar(a, e) T_flags_ne_int(a, e, T_CHECK_STOP)
+#define T_quiet_ne_schar(a, e) T_flags_ne_int(a, e, T_CHECK_QUIET)
+#define T_step_ne_schar(s, a, e) T_flags_ne_int(a, e, T_CHECK_STEP(s))
+#define T_step_assert_ne_schar(s, a, e) \
+ T_flags_ne_int(a, e, T_CHECK_STEP(s) | T_CHECK_STOP)
+
+#define T_ge_schar(a, e) T_flags_ge_int(a, e, 0)
+#define T_assert_ge_schar(a, e) T_flags_ge_int(a, e, T_CHECK_STOP)
+#define T_quiet_ge_schar(a, e) T_flags_ge_int(a, e, T_CHECK_QUIET)
+#define T_step_ge_schar(s, a, e) T_flags_ge_int(a, e, T_CHECK_STEP(s))
+#define T_step_assert_ge_schar(s, a, e) \
+ T_flags_ge_int(a, e, T_CHECK_STEP(s) | T_CHECK_STOP)
+
+#define T_gt_schar(a, e) T_flags_gt_int(a, e, 0)
+#define T_assert_gt_schar(a, e) T_flags_gt_int(a, e, T_CHECK_STOP)
+#define T_quiet_gt_schar(a, e) T_flags_gt_int(a, e, T_CHECK_QUIET)
+#define T_step_gt_schar(s, a, e) T_flags_gt_int(a, e, T_CHECK_STEP(s))
+#define T_step_assert_gt_schar(s, a, e) \
+ T_flags_gt_int(a, e, T_CHECK_STEP(s) | T_CHECK_STOP)
+
+#define T_le_schar(a, e) T_flags_le_int(a, e, 0)
+#define T_assert_le_schar(a, e) T_flags_le_int(a, e, T_CHECK_STOP)
+#define T_quiet_le_schar(a, e) T_flags_le_int(a, e, T_CHECK_QUIET)
+#define T_step_le_schar(s, a, e) T_flags_le_int(a, e, T_CHECK_STEP(s))
+#define T_step_assert_le_schar(s, a, e) \
+ T_flags_le_int(a, e, T_CHECK_STEP(s) | T_CHECK_STOP)
+
+#define T_lt_schar(a, e) T_flags_lt_int(a, e, 0)
+#define T_assert_lt_schar(a, e) T_flags_lt_int(a, e, T_CHECK_STOP)
+#define T_quiet_lt_schar(a, e) T_flags_lt_int(a, e, T_CHECK_QUIET)
+#define T_step_lt_schar(s, a, e) T_flags_lt_int(a, e, T_CHECK_STEP(s))
+#define T_step_assert_lt_schar(s, a, e) \
+ T_flags_lt_int(a, e, T_CHECK_STEP(s) | T_CHECK_STOP)
+
+/** @} */
/**
- * @brief Prints via the RTEMS printer.
+ * @defgroup RTEMSTestFrameworkChecksUChar Unsigned Character Checks
*
- * @returns As specified by printf().
+ * @ingroup RTEMSTestFramework
+ *
+ * @brief Checks for unsigned characters (unsigned char).
+ *
+ * @{
*/
-int rtems_test_printf(const char* format, ...) RTEMS_PRINTFLIKE(1, 2);
-#define RTEMS_TEST_PARALLEL_PROCESSOR_MAX 32
+#define T_eq_uchar(a, e) T_flags_eq_uint(a, e, 0)
+#define T_assert_eq_uchar(a, e) T_flags_eq_uint(a, e, T_CHECK_STOP)
+#define T_quiet_eq_uchar(a, e) T_flags_eq_uint(a, e, T_CHECK_QUIET)
+#define T_step_eq_uchar(s, a, e) T_flags_eq_uint(a, e, T_CHECK_STEP(s))
+#define T_step_assert_eq_uchar(s, a, e) \
+ T_flags_eq_uint(a, e, T_CHECK_STEP(s) | T_CHECK_STOP)
+
+#define T_ne_uchar(a, e) T_flags_ne_uint(a, e, 0)
+#define T_assert_ne_uchar(a, e) T_flags_ne_uint(a, e, T_CHECK_STOP)
+#define T_quiet_ne_uchar(a, e) T_flags_ne_uint(a, e, T_CHECK_QUIET)
+#define T_step_ne_uchar(s, a, e) T_flags_ne_uint(a, e, T_CHECK_STEP(s))
+#define T_step_assert_ne_uchar(s, a, e) \
+ T_flags_ne_uint(a, e, T_CHECK_STEP(s) | T_CHECK_STOP)
+
+#define T_ge_uchar(a, e) T_flags_ge_uint(a, e, 0)
+#define T_assert_ge_uchar(a, e) T_flags_ge_uint(a, e, T_CHECK_STOP)
+#define T_quiet_ge_uchar(a, e) T_flags_ge_uint(a, e, T_CHECK_QUIET)
+#define T_step_ge_uchar(s, a, e) T_flags_ge_uint(a, e, T_CHECK_STEP(s))
+#define T_step_assert_ge_uchar(s, a, e) \
+ T_flags_ge_uint(a, e, T_CHECK_STEP(s) | T_CHECK_STOP)
+
+#define T_gt_uchar(a, e) T_flags_gt_uint(a, e, 0)
+#define T_assert_gt_uchar(a, e) T_flags_gt_uint(a, e, T_CHECK_STOP)
+#define T_quiet_gt_uchar(a, e) T_flags_gt_uint(a, e, T_CHECK_QUIET)
+#define T_step_gt_uchar(s, a, e) T_flags_gt_uint(a, e, T_CHECK_STEP(s))
+#define T_step_assert_gt_uchar(s, a, e) \
+ T_flags_gt_uint(a, e, T_CHECK_STEP(s) | T_CHECK_STOP)
-typedef struct rtems_test_parallel_job rtems_test_parallel_job;
+#define T_le_uchar(a, e) T_flags_le_uint(a, e, 0)
+#define T_assert_le_uchar(a, e) T_flags_le_uint(a, e, T_CHECK_STOP)
+#define T_quiet_le_uchar(a, e) T_flags_le_uint(a, e, T_CHECK_QUIET)
+#define T_step_le_uchar(s, a, e) T_flags_le_uint(a, e, T_CHECK_STEP(s))
+#define T_step_assert_le_uchar(s, a, e) \
+ T_flags_le_uint(a, e, T_CHECK_STEP(s) | T_CHECK_STOP)
+
+#define T_lt_uchar(a, e) T_flags_lt_uint(a, e, 0)
+#define T_assert_lt_uchar(a, e) T_flags_lt_uint(a, e, T_CHECK_STOP)
+#define T_quiet_lt_uchar(a, e) T_flags_lt_uint(a, e, T_CHECK_QUIET)
+#define T_step_lt_uchar(s, a, e) T_flags_lt_uint(a, e, T_CHECK_STEP(s))
+#define T_step_assert_lt_uchar(s, a, e) \
+ T_flags_lt_uint(a, e, T_CHECK_STEP(s) | T_CHECK_STOP)
+
+/** @} */
/**
- * @brief Internal context for parallel job execution.
+ * @defgroup RTEMSTestFrameworkChecksShort Signed Short Integer Checks
+ *
+ * @ingroup RTEMSTestFramework
+ *
+ * @brief Checks for signed short integers (short).
+ *
+ * @{
*/
-typedef struct {
- Atomic_Ulong stop;
- SMP_barrier_Control barrier;
- size_t worker_count;
- rtems_id worker_ids[RTEMS_TEST_PARALLEL_PROCESSOR_MAX];
- rtems_id stop_worker_timer_id;
- const struct rtems_test_parallel_job *jobs;
- size_t job_count;
-} rtems_test_parallel_context;
+
+#define T_eq_short(a, e) T_flags_eq_int(a, e, 0)
+#define T_assert_eq_short(a, e) T_flags_eq_int(a, e, T_CHECK_STOP)
+#define T_quiet_eq_short(a, e) T_flags_eq_int(a, e, T_CHECK_QUIET)
+#define T_step_eq_short(s, a, e) T_flags_eq_int(a, e, T_CHECK_STEP(s))
+#define T_step_assert_eq_short(s, a, e) \
+ T_flags_eq_int(a, e, T_CHECK_STEP(s) | T_CHECK_STOP)
+
+#define T_ne_short(a, e) T_flags_ne_int(a, e, 0)
+#define T_assert_ne_short(a, e) T_flags_ne_int(a, e, T_CHECK_STOP)
+#define T_quiet_ne_short(a, e) T_flags_ne_int(a, e, T_CHECK_QUIET)
+#define T_step_ne_short(s, a, e) T_flags_ne_int(a, e, T_CHECK_STEP(s))
+#define T_step_assert_ne_short(s, a, e) \
+ T_flags_ne_int(a, e, T_CHECK_STEP(s) | T_CHECK_STOP)
+
+#define T_ge_short(a, e) T_flags_ge_int(a, e, 0)
+#define T_assert_ge_short(a, e) T_flags_ge_int(a, e, T_CHECK_STOP)
+#define T_quiet_ge_short(a, e) T_flags_ge_int(a, e, T_CHECK_QUIET)
+#define T_step_ge_short(s, a, e) T_flags_ge_int(a, e, T_CHECK_STEP(s))
+#define T_step_assert_ge_short(s, a, e) \
+ T_flags_ge_int(a, e, T_CHECK_STEP(s) | T_CHECK_STOP)
+
+#define T_gt_short(a, e) T_flags_gt_int(a, e, 0)
+#define T_assert_gt_short(a, e) T_flags_gt_int(a, e, T_CHECK_STOP)
+#define T_quiet_gt_short(a, e) T_flags_gt_int(a, e, T_CHECK_QUIET)
+#define T_step_gt_short(s, a, e) T_flags_gt_int(a, e, T_CHECK_STEP(s))
+#define T_step_assert_gt_short(s, a, e) \
+ T_flags_gt_int(a, e, T_CHECK_STEP(s) | T_CHECK_STOP)
+
+#define T_le_short(a, e) T_flags_le_int(a, e, 0)
+#define T_assert_le_short(a, e) T_flags_le_int(a, e, T_CHECK_STOP)
+#define T_quiet_le_short(a, e) T_flags_le_int(a, e, T_CHECK_QUIET)
+#define T_step_le_short(s, a, e) T_flags_le_int(a, e, T_CHECK_STEP(s))
+#define T_step_assert_le_short(s, a, e) \
+ T_flags_le_int(a, e, T_CHECK_STEP(s) | T_CHECK_STOP)
+
+#define T_lt_short(a, e) T_flags_lt_int(a, e, 0)
+#define T_assert_lt_short(a, e) T_flags_lt_int(a, e, T_CHECK_STOP)
+#define T_quiet_lt_short(a, e) T_flags_lt_int(a, e, T_CHECK_QUIET)
+#define T_step_lt_short(s, a, e) T_flags_lt_int(a, e, T_CHECK_STEP(s))
+#define T_step_assert_lt_short(s, a, e) \
+ T_flags_lt_int(a, e, T_CHECK_STEP(s) | T_CHECK_STOP)
+
+/** @} */
/**
- * @brief Worker task setup handler.
+ * @defgroup RTEMSTestFrameworkChecksUShort Unsigned Short Integer Checks
+ *
+ * @ingroup RTEMSTestFramework
*
- * Called during rtems_test_parallel() to optionally setup a worker task before
- * it is started.
+ * @brief Checks for unsigned short integers (unsigned short).
*
- * @param[in] ctx The parallel context.
- * @param[in] worker_index The worker index.
- * @param[in] worker_id The worker task identifier.
+ * @{
*/
-typedef void (*rtems_test_parallel_worker_setup)(
- rtems_test_parallel_context *ctx,
- size_t worker_index,
- rtems_id worker_id
-);
+
+#define T_eq_ushort(a, e) T_flags_eq_uint(a, e, 0)
+#define T_assert_eq_ushort(a, e) T_flags_eq_uint(a, e, T_CHECK_STOP)
+#define T_quiet_eq_ushort(a, e) T_flags_eq_uint(a, e, T_CHECK_QUIET)
+#define T_step_eq_ushort(s, a, e) T_flags_eq_uint(a, e, T_CHECK_STEP(s))
+#define T_step_assert_eq_ushort(s, a, e) \
+ T_flags_eq_uint(a, e, T_CHECK_STEP(s) | T_CHECK_STOP)
+
+#define T_ne_ushort(a, e) T_flags_ne_uint(a, e, 0)
+#define T_assert_ne_ushort(a, e) T_flags_ne_uint(a, e, T_CHECK_STOP)
+#define T_quiet_ne_ushort(a, e) T_flags_ne_uint(a, e, T_CHECK_QUIET)
+#define T_step_ne_ushort(s, a, e) T_flags_ne_uint(a, e, T_CHECK_STEP(s))
+#define T_step_assert_ne_ushort(s, a, e) \
+ T_flags_ne_uint(a, e, T_CHECK_STEP(s) | T_CHECK_STOP)
+
+#define T_ge_ushort(a, e) T_flags_ge_uint(a, e, 0)
+#define T_assert_ge_ushort(a, e) T_flags_ge_uint(a, e, T_CHECK_STOP)
+#define T_quiet_ge_ushort(a, e) T_flags_ge_uint(a, e, T_CHECK_QUIET)
+#define T_step_ge_ushort(s, a, e) T_flags_ge_uint(a, e, T_CHECK_STEP(s))
+#define T_step_assert_ge_ushort(s, a, e) \
+ T_flags_ge_uint(a, e, T_CHECK_STEP(s) | T_CHECK_STOP)
+
+#define T_gt_ushort(a, e) T_flags_gt_uint(a, e, 0)
+#define T_assert_gt_ushort(a, e) T_flags_gt_uint(a, e, T_CHECK_STOP)
+#define T_quiet_gt_ushort(a, e) T_flags_gt_uint(a, e, T_CHECK_QUIET)
+#define T_step_gt_ushort(s, a, e) T_flags_gt_uint(a, e, T_CHECK_STEP(s))
+#define T_step_assert_gt_ushort(s, a, e) \
+ T_flags_gt_uint(a, e, T_CHECK_STEP(s) | T_CHECK_STOP)
+
+#define T_le_ushort(a, e) T_flags_le_uint(a, e, 0)
+#define T_assert_le_ushort(a, e) T_flags_le_uint(a, e, T_CHECK_STOP)
+#define T_quiet_le_ushort(a, e) T_flags_le_uint(a, e, T_CHECK_QUIET)
+#define T_step_le_ushort(s, a, e) T_flags_le_uint(a, e, T_CHECK_STEP(s))
+#define T_step_assert_le_ushort(s, a, e) \
+ T_flags_le_uint(a, e, T_CHECK_STEP(s) | T_CHECK_STOP)
+
+#define T_lt_ushort(a, e) T_flags_lt_uint(a, e, 0)
+#define T_assert_lt_ushort(a, e) T_flags_lt_uint(a, e, T_CHECK_STOP)
+#define T_quiet_lt_ushort(a, e) T_flags_lt_uint(a, e, T_CHECK_QUIET)
+#define T_step_lt_ushort(s, a, e) T_flags_lt_uint(a, e, T_CHECK_STEP(s))
+#define T_step_assert_lt_ushort(s, a, e) \
+ T_flags_lt_uint(a, e, T_CHECK_STEP(s) | T_CHECK_STOP)
+
+/** @} */
/**
- * @brief Basic parallel job description.
- */
-struct rtems_test_parallel_job {
- /**
- * @brief Job initialization handler.
- *
- * This handler executes only in the context of the master worker before the
- * job body handler.
- *
- * @param[in] ctx The parallel context.
- * @param[in] arg The user specified argument.
- * @param[in] active_workers Count of active workers. Depends on the cascade
- * option.
- *
- * @return The desired job body execution time in clock ticks. See
- * rtems_test_parallel_stop_job().
- */
- rtems_interval (*init)(
- rtems_test_parallel_context *ctx,
- void *arg,
- size_t active_workers
- );
-
- /**
- * @brief Job body handler.
- *
- * @param[in] ctx The parallel context.
- * @param[in] arg The user specified argument.
- * @param[in] active_workers Count of active workers. Depends on the cascade
- * option.
- * @param[in] worker_index The worker index. It ranges from 0 to the
- * processor count minus one.
- */
- void (*body)(
- rtems_test_parallel_context *ctx,
- void *arg,
- size_t active_workers,
- size_t worker_index
- );
-
- /**
- * @brief Job finalization handler.
- *
- * This handler executes only in the context of the master worker after the
- * job body handler.
- *
- * @param[in] ctx The parallel context.
- * @param[in] arg The user specified argument.
- * @param[in] active_workers Count of active workers. Depends on the cascade
- * option.
- */
- void (*fini)(
- rtems_test_parallel_context *ctx,
- void *arg,
- size_t active_workers
- );
-
- /**
- * @brief Job specific argument.
- */
- void *arg;
-
- /**
- * @brief Job cascading flag.
- *
- * This flag indicates whether the job should be executed in a cascaded
- * manner (the job is executed on one processor first, two processors
- * afterwards and incremented step by step until all processors are used).
- */
- bool cascade;
-};
-
-/**
- * @brief Indicates if a job body should stop its work loop.
- *
- * @param[in] ctx The parallel context.
- *
- * @retval true The job body should stop its work loop and return to the caller.
- * @retval false Otherwise.
- */
-static inline bool rtems_test_parallel_stop_job(
- const rtems_test_parallel_context *ctx
-)
-{
- return _Atomic_Load_ulong(&ctx->stop, ATOMIC_ORDER_RELAXED) != 0;
+ * @defgroup RTEMSTestFrameworkChecksInt Signed Integer Checks
+ *
+ * @ingroup RTEMSTestFramework
+ *
+ * @brief Checks for signed integers (int).
+ *
+ * @{
+ */
+
+#define T_eq_int(a, e) T_flags_eq_int(a, e, 0)
+#define T_assert_eq_int(a, e) T_flags_eq_int(a, e, T_CHECK_STOP)
+#define T_quiet_eq_int(a, e) T_flags_eq_int(a, e, T_CHECK_QUIET)
+#define T_step_eq_int(s, a, e) T_flags_eq_int(a, e, T_CHECK_STEP(s))
+#define T_step_assert_eq_int(s, a, e) \
+ T_flags_eq_int(a, e, T_CHECK_STEP(s) | T_CHECK_STOP)
+
+#define T_ne_int(a, e) T_flags_ne_int(a, e, 0)
+#define T_assert_ne_int(a, e) T_flags_ne_int(a, e, T_CHECK_STOP)
+#define T_quiet_ne_int(a, e) T_flags_ne_int(a, e, T_CHECK_QUIET)
+#define T_step_ne_int(s, a, e) T_flags_ne_int(a, e, T_CHECK_STEP(s))
+#define T_step_assert_ne_int(s, a, e) \
+ T_flags_ne_int(a, e, T_CHECK_STEP(s) | T_CHECK_STOP)
+
+#define T_ge_int(a, e) T_flags_ge_int(a, e, 0)
+#define T_assert_ge_int(a, e) T_flags_ge_int(a, e, T_CHECK_STOP)
+#define T_quiet_ge_int(a, e) T_flags_ge_int(a, e, T_CHECK_QUIET)
+#define T_step_ge_int(s, a, e) T_flags_ge_int(a, e, T_CHECK_STEP(s))
+#define T_step_assert_ge_int(s, a, e) \
+ T_flags_ge_int(a, e, T_CHECK_STEP(s) | T_CHECK_STOP)
+
+#define T_gt_int(a, e) T_flags_gt_int(a, e, 0)
+#define T_assert_gt_int(a, e) T_flags_gt_int(a, e, T_CHECK_STOP)
+#define T_quiet_gt_int(a, e) T_flags_gt_int(a, e, T_CHECK_QUIET)
+#define T_step_gt_int(s, a, e) T_flags_gt_int(a, e, T_CHECK_STEP(s))
+#define T_step_assert_gt_int(s, a, e) \
+ T_flags_gt_int(a, e, T_CHECK_STEP(s) | T_CHECK_STOP)
+
+#define T_le_int(a, e) T_flags_le_int(a, e, 0)
+#define T_assert_le_int(a, e) T_flags_le_int(a, e, T_CHECK_STOP)
+#define T_quiet_le_int(a, e) T_flags_le_int(a, e, T_CHECK_QUIET)
+#define T_step_le_int(s, a, e) T_flags_le_int(a, e, T_CHECK_STEP(s))
+#define T_step_assert_le_int(s, a, e) \
+ T_flags_le_int(a, e, T_CHECK_STEP(s) | T_CHECK_STOP)
+
+#define T_lt_int(a, e) T_flags_lt_int(a, e, 0)
+#define T_assert_lt_int(a, e) T_flags_lt_int(a, e, T_CHECK_STOP)
+#define T_quiet_lt_int(a, e) T_flags_lt_int(a, e, T_CHECK_QUIET)
+#define T_step_lt_int(s, a, e) T_flags_lt_int(a, e, T_CHECK_STEP(s))
+#define T_step_assert_lt_int(s, a, e) \
+ T_flags_lt_int(a, e, T_CHECK_STEP(s) | T_CHECK_STOP)
+
+/** @} */
+
+/**
+ * @defgroup RTEMSTestFrameworkChecksUInt Unsigned Integer Checks
+ *
+ * @ingroup RTEMSTestFramework
+ *
+ * @brief Checks for unsigned integers (unsigned int).
+ *
+ * @{
+ */
+
+#define T_eq_uint(a, e) T_flags_eq_uint(a, e, 0)
+#define T_assert_eq_uint(a, e) T_flags_eq_uint(a, e, T_CHECK_STOP)
+#define T_quiet_eq_uint(a, e) T_flags_eq_uint(a, e, T_CHECK_QUIET)
+#define T_step_eq_uint(s, a, e) T_flags_eq_uint(a, e, T_CHECK_STEP(s))
+#define T_step_assert_eq_uint(s, a, e) \
+ T_flags_eq_uint(a, e, T_CHECK_STEP(s) | T_CHECK_STOP)
+
+#define T_ne_uint(a, e) T_flags_ne_uint(a, e, 0)
+#define T_assert_ne_uint(a, e) T_flags_ne_uint(a, e, T_CHECK_STOP)
+#define T_quiet_ne_uint(a, e) T_flags_ne_uint(a, e, T_CHECK_QUIET)
+#define T_step_ne_uint(s, a, e) T_flags_ne_uint(a, e, T_CHECK_STEP(s))
+#define T_step_assert_ne_uint(s, a, e) \
+ T_flags_ne_uint(a, e, T_CHECK_STEP(s) | T_CHECK_STOP)
+
+#define T_ge_uint(a, e) T_flags_ge_uint(a, e, 0)
+#define T_assert_ge_uint(a, e) T_flags_ge_uint(a, e, T_CHECK_STOP)
+#define T_quiet_ge_uint(a, e) T_flags_ge_uint(a, e, T_CHECK_QUIET)
+#define T_step_ge_uint(s, a, e) T_flags_ge_uint(a, e, T_CHECK_STEP(s))
+#define T_step_assert_ge_uint(s, a, e) \
+ T_flags_ge_uint(a, e, T_CHECK_STEP(s) | T_CHECK_STOP)
+
+#define T_gt_uint(a, e) T_flags_gt_uint(a, e, 0)
+#define T_assert_gt_uint(a, e) T_flags_gt_uint(a, e, T_CHECK_STOP)
+#define T_quiet_gt_uint(a, e) T_flags_gt_uint(a, e, T_CHECK_QUIET)
+#define T_step_gt_uint(s, a, e) T_flags_gt_uint(a, e, T_CHECK_STEP(s))
+#define T_step_assert_gt_uint(s, a, e) \
+ T_flags_gt_uint(a, e, T_CHECK_STEP(s) | T_CHECK_STOP)
+
+#define T_le_uint(a, e) T_flags_le_uint(a, e, 0)
+#define T_assert_le_uint(a, e) T_flags_le_uint(a, e, T_CHECK_STOP)
+#define T_quiet_le_uint(a, e) T_flags_le_uint(a, e, T_CHECK_QUIET)
+#define T_step_le_uint(s, a, e) T_flags_le_uint(a, e, T_CHECK_STEP(s))
+#define T_step_assert_le_uint(s, a, e) \
+ T_flags_le_uint(a, e, T_CHECK_STEP(s) | T_CHECK_STOP)
+
+#define T_lt_uint(a, e) T_flags_lt_uint(a, e, 0)
+#define T_assert_lt_uint(a, e) T_flags_lt_uint(a, e, T_CHECK_STOP)
+#define T_quiet_lt_uint(a, e) T_flags_lt_uint(a, e, T_CHECK_QUIET)
+#define T_step_lt_uint(s, a, e) T_flags_lt_uint(a, e, T_CHECK_STEP(s))
+#define T_step_assert_lt_uint(s, a, e) \
+ T_flags_lt_uint(a, e, T_CHECK_STEP(s) | T_CHECK_STOP)
+
+/** @} */
+
+/**
+ * @defgroup RTEMSTestFrameworkChecksLong Signed Long Integer Checks
+ *
+ * @ingroup RTEMSTestFramework
+ *
+ * @brief Checks for signed long integers (long).
+ *
+ * @{
+ */
+
+#define T_eq_long(a, e) T_flags_eq_long(a, e, 0)
+#define T_assert_eq_long(a, e) T_flags_eq_long(a, e, T_CHECK_STOP)
+#define T_quiet_eq_long(a, e) T_flags_eq_long(a, e, T_CHECK_QUIET)
+#define T_step_eq_long(s, a, e) T_flags_eq_long(a, e, T_CHECK_STEP(s))
+#define T_step_assert_eq_long(s, a, e) \
+ T_flags_eq_long(a, e, T_CHECK_STEP(s) | T_CHECK_STOP)
+
+#define T_ne_long(a, e) T_flags_ne_long(a, e, 0)
+#define T_assert_ne_long(a, e) T_flags_ne_long(a, e, T_CHECK_STOP)
+#define T_quiet_ne_long(a, e) T_flags_ne_long(a, e, T_CHECK_QUIET)
+#define T_step_ne_long(s, a, e) T_flags_ne_long(a, e, T_CHECK_STEP(s))
+#define T_step_assert_ne_long(s, a, e) \
+ T_flags_ne_long(a, e, T_CHECK_STEP(s) | T_CHECK_STOP)
+
+#define T_ge_long(a, e) T_flags_ge_long(a, e, 0)
+#define T_assert_ge_long(a, e) T_flags_ge_long(a, e, T_CHECK_STOP)
+#define T_quiet_ge_long(a, e) T_flags_ge_long(a, e, T_CHECK_QUIET)
+#define T_step_ge_long(s, a, e) T_flags_ge_long(a, e, T_CHECK_STEP(s))
+#define T_step_assert_ge_long(s, a, e) \
+ T_flags_ge_long(a, e, T_CHECK_STEP(s) | T_CHECK_STOP)
+
+#define T_gt_long(a, e) T_flags_gt_long(a, e, 0)
+#define T_assert_gt_long(a, e) T_flags_gt_long(a, e, T_CHECK_STOP)
+#define T_quiet_gt_long(a, e) T_flags_gt_long(a, e, T_CHECK_QUIET)
+#define T_step_gt_long(s, a, e) T_flags_gt_long(a, e, T_CHECK_STEP(s))
+#define T_step_assert_gt_long(s, a, e) \
+ T_flags_gt_long(a, e, T_CHECK_STEP(s) | T_CHECK_STOP)
+
+#define T_le_long(a, e) T_flags_le_long(a, e, 0)
+#define T_assert_le_long(a, e) T_flags_le_long(a, e, T_CHECK_STOP)
+#define T_quiet_le_long(a, e) T_flags_le_long(a, e, T_CHECK_QUIET)
+#define T_step_le_long(s, a, e) T_flags_le_long(a, e, T_CHECK_STEP(s))
+#define T_step_assert_le_long(s, a, e) \
+ T_flags_le_long(a, e, T_CHECK_STEP(s) | T_CHECK_STOP)
+
+#define T_lt_long(a, e) T_flags_lt_long(a, e, 0)
+#define T_assert_lt_long(a, e) T_flags_lt_long(a, e, T_CHECK_STOP)
+#define T_quiet_lt_long(a, e) T_flags_lt_long(a, e, T_CHECK_QUIET)
+#define T_step_lt_long(s, a, e) T_flags_lt_long(a, e, T_CHECK_STEP(s))
+#define T_step_assert_lt_long(s, a, e) \
+ T_flags_lt_long(a, e, T_CHECK_STEP(s) | T_CHECK_STOP)
+
+/** @} */
+
+/**
+ * @defgroup RTEMSTestFrameworkChecksULong Unsigned Long Integer Checks
+ *
+ * @ingroup RTEMSTestFramework
+ *
+ * @brief Checks for unsigned long integers (unsigned long).
+ *
+ * @{
+ */
+
+#define T_eq_ulong(a, e) T_flags_eq_ulong(a, e, 0)
+#define T_assert_eq_ulong(a, e) T_flags_eq_ulong(a, e, T_CHECK_STOP)
+#define T_quiet_eq_ulong(a, e) T_flags_eq_ulong(a, e, T_CHECK_QUIET)
+#define T_step_eq_ulong(s, a, e) T_flags_eq_ulong(a, e, T_CHECK_STEP(s))
+#define T_step_assert_eq_ulong(s, a, e) \
+ T_flags_eq_ulong(a, e, T_CHECK_STEP(s) | T_CHECK_STOP)
+
+#define T_ne_ulong(a, e) T_flags_ne_ulong(a, e, 0)
+#define T_assert_ne_ulong(a, e) T_flags_ne_ulong(a, e, T_CHECK_STOP)
+#define T_quiet_ne_ulong(a, e) T_flags_ne_ulong(a, e, T_CHECK_QUIET)
+#define T_step_ne_ulong(s, a, e) T_flags_ne_ulong(a, e, T_CHECK_STEP(s))
+#define T_step_assert_ne_ulong(s, a, e) \
+ T_flags_ne_ulong(a, e, T_CHECK_STEP(s) | T_CHECK_STOP)
+
+#define T_ge_ulong(a, e) T_flags_ge_ulong(a, e, 0)
+#define T_assert_ge_ulong(a, e) T_flags_ge_ulong(a, e, T_CHECK_STOP)
+#define T_quiet_ge_ulong(a, e) T_flags_ge_ulong(a, e, T_CHECK_QUIET)
+#define T_step_ge_ulong(s, a, e) T_flags_ge_ulong(a, e, T_CHECK_STEP(s))
+#define T_step_assert_ge_ulong(s, a, e) \
+ T_flags_ge_ulong(a, e, T_CHECK_STEP(s) | T_CHECK_STOP)
+
+#define T_gt_ulong(a, e) T_flags_gt_ulong(a, e, 0)
+#define T_assert_gt_ulong(a, e) T_flags_gt_ulong(a, e, T_CHECK_STOP)
+#define T_quiet_gt_ulong(a, e) T_flags_gt_ulong(a, e, T_CHECK_QUIET)
+#define T_step_gt_ulong(s, a, e) T_flags_gt_ulong(a, e, T_CHECK_STEP(s))
+#define T_step_assert_gt_ulong(s, a, e) \
+ T_flags_gt_ulong(a, e, T_CHECK_STEP(s) | T_CHECK_STOP)
+
+#define T_le_ulong(a, e) T_flags_le_ulong(a, e, 0)
+#define T_assert_le_ulong(a, e) T_flags_le_ulong(a, e, T_CHECK_STOP)
+#define T_quiet_le_ulong(a, e) T_flags_le_ulong(a, e, T_CHECK_QUIET)
+#define T_step_le_ulong(s, a, e) T_flags_le_ulong(a, e, T_CHECK_STEP(s))
+#define T_step_assert_le_ulong(s, a, e) \
+ T_flags_le_ulong(a, e, T_CHECK_STEP(s) | T_CHECK_STOP)
+
+#define T_lt_ulong(a, e) T_flags_lt_ulong(a, e, 0)
+#define T_assert_lt_ulong(a, e) T_flags_lt_ulong(a, e, T_CHECK_STOP)
+#define T_quiet_lt_ulong(a, e) T_flags_lt_ulong(a, e, T_CHECK_QUIET)
+#define T_step_lt_ulong(s, a, e) T_flags_lt_ulong(a, e, T_CHECK_STEP(s))
+#define T_step_assert_lt_ulong(s, a, e) \
+ T_flags_lt_ulong(a, e, T_CHECK_STEP(s) | T_CHECK_STOP)
+
+/** @} */
+
+/**
+ * @defgroup RTEMSTestFrameworkChecksLong Signed Long Long Integer Checks
+ *
+ * @ingroup RTEMSTestFramework
+ *
+ * @brief Checks for signed long long integers (long long).
+ *
+ * @{
+ */
+
+#define T_eq_ll(a, e) T_flags_eq_ll(a, e, 0)
+#define T_assert_eq_ll(a, e) T_flags_eq_ll(a, e, T_CHECK_STOP)
+#define T_quiet_eq_ll(a, e) T_flags_eq_ll(a, e, T_CHECK_QUIET)
+#define T_step_eq_ll(s, a, e) T_flags_eq_ll(a, e, T_CHECK_STEP(s))
+#define T_step_assert_eq_ll(s, a, e) \
+ T_flags_eq_ll(a, e, T_CHECK_STEP(s) | T_CHECK_STOP)
+
+#define T_ne_ll(a, e) T_flags_ne_ll(a, e, 0)
+#define T_assert_ne_ll(a, e) T_flags_ne_ll(a, e, T_CHECK_STOP)
+#define T_quiet_ne_ll(a, e) T_flags_ne_ll(a, e, T_CHECK_QUIET)
+#define T_step_ne_ll(s, a, e) T_flags_ne_ll(a, e, T_CHECK_STEP(s))
+#define T_step_assert_ne_ll(s, a, e) \
+ T_flags_ne_ll(a, e, T_CHECK_STEP(s) | T_CHECK_STOP)
+
+#define T_ge_ll(a, e) T_flags_ge_ll(a, e, 0)
+#define T_assert_ge_ll(a, e) T_flags_ge_ll(a, e, T_CHECK_STOP)
+#define T_quiet_ge_ll(a, e) T_flags_ge_ll(a, e, T_CHECK_QUIET)
+#define T_step_ge_ll(s, a, e) T_flags_ge_ll(a, e, T_CHECK_STEP(s))
+#define T_step_assert_ge_ll(s, a, e) \
+ T_flags_ge_ll(a, e, T_CHECK_STEP(s) | T_CHECK_STOP)
+
+#define T_gt_ll(a, e) T_flags_gt_ll(a, e, 0)
+#define T_assert_gt_ll(a, e) T_flags_gt_ll(a, e, T_CHECK_STOP)
+#define T_quiet_gt_ll(a, e) T_flags_gt_ll(a, e, T_CHECK_QUIET)
+#define T_step_gt_ll(s, a, e) T_flags_gt_ll(a, e, T_CHECK_STEP(s))
+#define T_step_assert_gt_ll(s, a, e) \
+ T_flags_gt_ll(a, e, T_CHECK_STEP(s) | T_CHECK_STOP)
+
+#define T_le_ll(a, e) T_flags_le_ll(a, e, 0)
+#define T_assert_le_ll(a, e) T_flags_le_ll(a, e, T_CHECK_STOP)
+#define T_quiet_le_ll(a, e) T_flags_le_ll(a, e, T_CHECK_QUIET)
+#define T_step_le_ll(s, a, e) T_flags_le_ll(a, e, T_CHECK_STEP(s))
+#define T_step_assert_le_ll(s, a, e) \
+ T_flags_le_ll(a, e, T_CHECK_STEP(s) | T_CHECK_STOP)
+
+#define T_lt_ll(a, e) T_flags_lt_ll(a, e, 0)
+#define T_assert_lt_ll(a, e) T_flags_lt_ll(a, e, T_CHECK_STOP)
+#define T_quiet_lt_ll(a, e) T_flags_lt_ll(a, e, T_CHECK_QUIET)
+#define T_step_lt_ll(s, a, e) T_flags_lt_ll(a, e, T_CHECK_STEP(s))
+#define T_step_assert_lt_ll(s, a, e) \
+ T_flags_lt_ll(a, e, T_CHECK_STEP(s) | T_CHECK_STOP)
+
+/** @} */
+
+/**
+ * @defgroup RTEMSTestFrameworkChecksULongLong Unsigned Long Long Integer Checks
+ *
+ * @ingroup RTEMSTestFramework
+ *
+ * @brief Checks for unsigned long long integers (unsigned long long).
+ *
+ * @{
+ */
+
+#define T_eq_ull(a, e) T_flags_eq_ull(a, e, 0)
+#define T_assert_eq_ull(a, e) T_flags_eq_ull(a, e, T_CHECK_STOP)
+#define T_quiet_eq_ull(a, e) T_flags_eq_ull(a, e, T_CHECK_QUIET)
+#define T_step_eq_ull(s, a, e) T_flags_eq_ull(a, e, T_CHECK_STEP(s))
+#define T_step_assert_eq_ull(s, a, e) \
+ T_flags_eq_ull(a, e, T_CHECK_STEP(s) | T_CHECK_STOP)
+
+#define T_ne_ull(a, e) T_flags_ne_ull(a, e, 0)
+#define T_assert_ne_ull(a, e) T_flags_ne_ull(a, e, T_CHECK_STOP)
+#define T_quiet_ne_ull(a, e) T_flags_ne_ull(a, e, T_CHECK_QUIET)
+#define T_step_ne_ull(s, a, e) T_flags_ne_ull(a, e, T_CHECK_STEP(s))
+#define T_step_assert_ne_ull(s, a, e) \
+ T_flags_ne_ull(a, e, T_CHECK_STEP(s) | T_CHECK_STOP)
+
+#define T_ge_ull(a, e) T_flags_ge_ull(a, e, 0)
+#define T_assert_ge_ull(a, e) T_flags_ge_ull(a, e, T_CHECK_STOP)
+#define T_quiet_ge_ull(a, e) T_flags_ge_ull(a, e, T_CHECK_QUIET)
+#define T_step_ge_ull(s, a, e) T_flags_ge_ull(a, e, T_CHECK_STEP(s))
+#define T_step_assert_ge_ull(s, a, e) \
+ T_flags_ge_ull(a, e, T_CHECK_STEP(s) | T_CHECK_STOP)
+
+#define T_gt_ull(a, e) T_flags_gt_ull(a, e, 0)
+#define T_assert_gt_ull(a, e) T_flags_gt_ull(a, e, T_CHECK_STOP)
+#define T_quiet_gt_ull(a, e) T_flags_gt_ull(a, e, T_CHECK_QUIET)
+#define T_step_gt_ull(s, a, e) T_flags_gt_ull(a, e, T_CHECK_STEP(s))
+#define T_step_assert_gt_ull(s, a, e) \
+ T_flags_gt_ull(a, e, T_CHECK_STEP(s) | T_CHECK_STOP)
+
+#define T_le_ull(a, e) T_flags_le_ull(a, e, 0)
+#define T_assert_le_ull(a, e) T_flags_le_ull(a, e, T_CHECK_STOP)
+#define T_quiet_le_ull(a, e) T_flags_le_ull(a, e, T_CHECK_QUIET)
+#define T_step_le_ull(s, a, e) T_flags_le_ull(a, e, T_CHECK_STEP(s))
+#define T_step_assert_le_ull(s, a, e) \
+ T_flags_le_ull(a, e, T_CHECK_STEP(s) | T_CHECK_STOP)
+
+#define T_lt_ull(a, e) T_flags_lt_ull(a, e, 0)
+#define T_assert_lt_ull(a, e) T_flags_lt_ull(a, e, T_CHECK_STOP)
+#define T_quiet_lt_ull(a, e) T_flags_lt_ull(a, e, T_CHECK_QUIET)
+#define T_step_lt_ull(s, a, e) T_flags_lt_ull(a, e, T_CHECK_STEP(s))
+#define T_step_assert_lt_ull(s, a, e) \
+ T_flags_lt_ull(a, e, T_CHECK_STEP(s) | T_CHECK_STOP)
+
+/** @} */
+
+/**
+ * @defgroup RTEMSTestFrameworkChecksInt8 Signed 8-Bit Integer Checks
+ *
+ * @ingroup RTEMSTestFramework
+ *
+ * @brief Checks for signed 8-bit integers (int8_t).
+ *
+ * @{
+ */
+
+#define T_eq_i8(a, e) T_flags_eq_int(a, e, 0)
+#define T_assert_eq_i8(a, e) T_flags_eq_int(a, e, T_CHECK_STOP)
+#define T_quiet_eq_i8(a, e) T_flags_eq_int(a, e, T_CHECK_QUIET)
+#define T_step_eq_i8(s, a, e) T_flags_eq_int(a, e, T_CHECK_STEP(s))
+#define T_step_assert_eq_i8(s, a, e) \
+ T_flags_eq_int(a, e, T_CHECK_STEP(s) | T_CHECK_STOP)
+
+#define T_ne_i8(a, e) T_flags_ne_int(a, e, 0)
+#define T_assert_ne_i8(a, e) T_flags_ne_int(a, e, T_CHECK_STOP)
+#define T_quiet_ne_i8(a, e) T_flags_ne_int(a, e, T_CHECK_QUIET)
+#define T_step_ne_i8(s, a, e) T_flags_ne_int(a, e, T_CHECK_STEP(s))
+#define T_step_assert_ne_i8(s, a, e) \
+ T_flags_ne_int(a, e, T_CHECK_STEP(s) | T_CHECK_STOP)
+
+#define T_ge_i8(a, e) T_flags_ge_int(a, e, 0)
+#define T_assert_ge_i8(a, e) T_flags_ge_int(a, e, T_CHECK_STOP)
+#define T_quiet_ge_i8(a, e) T_flags_ge_int(a, e, T_CHECK_QUIET)
+#define T_step_ge_i8(s, a, e) T_flags_ge_int(a, e, T_CHECK_STEP(s))
+#define T_step_assert_ge_i8(s, a, e) \
+ T_flags_ge_int(a, e, T_CHECK_STEP(s) | T_CHECK_STOP)
+
+#define T_gt_i8(a, e) T_flags_gt_int(a, e, 0)
+#define T_assert_gt_i8(a, e) T_flags_gt_int(a, e, T_CHECK_STOP)
+#define T_quiet_gt_i8(a, e) T_flags_gt_int(a, e, T_CHECK_QUIET)
+#define T_step_gt_i8(s, a, e) T_flags_gt_int(a, e, T_CHECK_STEP(s))
+#define T_step_assert_gt_i8(s, a, e) \
+ T_flags_gt_int(a, e, T_CHECK_STEP(s) | T_CHECK_STOP)
+
+#define T_le_i8(a, e) T_flags_le_int(a, e, 0)
+#define T_assert_le_i8(a, e) T_flags_le_int(a, e, T_CHECK_STOP)
+#define T_quiet_le_i8(a, e) T_flags_le_int(a, e, T_CHECK_QUIET)
+#define T_step_le_i8(s, a, e) T_flags_le_int(a, e, T_CHECK_STEP(s))
+#define T_step_assert_le_i8(s, a, e) \
+ T_flags_le_int(a, e, T_CHECK_STEP(s) | T_CHECK_STOP)
+
+#define T_lt_i8(a, e) T_flags_lt_int(a, e, 0)
+#define T_assert_lt_i8(a, e) T_flags_lt_int(a, e, T_CHECK_STOP)
+#define T_quiet_lt_i8(a, e) T_flags_lt_int(a, e, T_CHECK_QUIET)
+#define T_step_lt_i8(s, a, e) T_flags_lt_int(a, e, T_CHECK_STEP(s))
+#define T_step_assert_lt_i8(s, a, e) \
+ T_flags_lt_int(a, e, T_CHECK_STEP(s) | T_CHECK_STOP)
+
+/** @} */
+
+/**
+ * @defgroup RTEMSTestFrameworkChecksUInt8 Unsigned 8-Bit Integer Checks
+ *
+ * @ingroup RTEMSTestFramework
+ *
+ * @brief Checks for unsigned 8-bit integers (uint8_t).
+ *
+ * @{
+ */
+
+#define T_eq_u8(a, e) T_flags_eq_uint(a, e, 0)
+#define T_assert_eq_u8(a, e) T_flags_eq_uint(a, e, T_CHECK_STOP)
+#define T_quiet_eq_u8(a, e) T_flags_eq_uint(a, e, T_CHECK_QUIET)
+#define T_step_eq_u8(s, a, e) T_flags_eq_uint(a, e, T_CHECK_STEP(s))
+#define T_step_assert_eq_u8(s, a, e) \
+ T_flags_eq_uint(a, e, T_CHECK_STEP(s) | T_CHECK_STOP)
+
+#define T_ne_u8(a, e) T_flags_ne_uint(a, e, 0)
+#define T_assert_ne_u8(a, e) T_flags_ne_uint(a, e, T_CHECK_STOP)
+#define T_quiet_ne_u8(a, e) T_flags_ne_uint(a, e, T_CHECK_QUIET)
+#define T_step_ne_u8(s, a, e) T_flags_ne_uint(a, e, T_CHECK_STEP(s))
+#define T_step_assert_ne_u8(s, a, e) \
+ T_flags_ne_uint(a, e, T_CHECK_STEP(s) | T_CHECK_STOP)
+
+#define T_ge_u8(a, e) T_flags_ge_uint(a, e, 0)
+#define T_assert_ge_u8(a, e) T_flags_ge_uint(a, e, T_CHECK_STOP)
+#define T_quiet_ge_u8(a, e) T_flags_ge_uint(a, e, T_CHECK_QUIET)
+#define T_step_ge_u8(s, a, e) T_flags_ge_uint(a, e, T_CHECK_STEP(s))
+#define T_step_assert_ge_u8(s, a, e) \
+ T_flags_ge_uint(a, e, T_CHECK_STEP(s) | T_CHECK_STOP)
+
+#define T_gt_u8(a, e) T_flags_gt_uint(a, e, 0)
+#define T_assert_gt_u8(a, e) T_flags_gt_uint(a, e, T_CHECK_STOP)
+#define T_quiet_gt_u8(a, e) T_flags_gt_uint(a, e, T_CHECK_QUIET)
+#define T_step_gt_u8(s, a, e) T_flags_gt_uint(a, e, T_CHECK_STEP(s))
+#define T_step_assert_gt_u8(s, a, e) \
+ T_flags_gt_uint(a, e, T_CHECK_STEP(s) | T_CHECK_STOP)
+
+#define T_le_u8(a, e) T_flags_le_uint(a, e, 0)
+#define T_assert_le_u8(a, e) T_flags_le_uint(a, e, T_CHECK_STOP)
+#define T_quiet_le_u8(a, e) T_flags_le_uint(a, e, T_CHECK_QUIET)
+#define T_step_le_u8(s, a, e) T_flags_le_uint(a, e, T_CHECK_STEP(s))
+#define T_step_assert_le_u8(s, a, e) \
+ T_flags_le_uint(a, e, T_CHECK_STEP(s) | T_CHECK_STOP)
+
+#define T_lt_u8(a, e) T_flags_lt_uint(a, e, 0)
+#define T_assert_lt_u8(a, e) T_flags_lt_uint(a, e, T_CHECK_STOP)
+#define T_quiet_lt_u8(a, e) T_flags_lt_uint(a, e, T_CHECK_QUIET)
+#define T_step_lt_u8(s, a, e) T_flags_lt_uint(a, e, T_CHECK_STEP(s))
+#define T_step_assert_lt_u8(s, a, e) \
+ T_flags_lt_uint(a, e, T_CHECK_STEP(s) | T_CHECK_STOP)
+
+/** @} */
+
+/**
+ * @defgroup RTEMSTestFrameworkChecksInt16 Signed 16-Bit Integer Checks
+ *
+ * @ingroup RTEMSTestFramework
+ *
+ * @brief Checks for signed 16-bit integers (int16_t).
+ *
+ * @{
+ */
+
+#define T_eq_i16(a, e) T_flags_eq_int(a, e, 0)
+#define T_assert_eq_i16(a, e) T_flags_eq_int(a, e, T_CHECK_STOP)
+#define T_quiet_eq_i16(a, e) T_flags_eq_int(a, e, T_CHECK_QUIET)
+#define T_step_eq_i16(s, a, e) T_flags_eq_int(a, e, T_CHECK_STEP(s))
+#define T_step_assert_eq_i16(s, a, e) \
+ T_flags_eq_int(a, e, T_CHECK_STEP(s) | T_CHECK_STOP)
+
+#define T_ne_i16(a, e) T_flags_ne_int(a, e, 0)
+#define T_assert_ne_i16(a, e) T_flags_ne_int(a, e, T_CHECK_STOP)
+#define T_quiet_ne_i16(a, e) T_flags_ne_int(a, e, T_CHECK_QUIET)
+#define T_step_ne_i16(s, a, e) T_flags_ne_int(a, e, T_CHECK_STEP(s))
+#define T_step_assert_ne_i16(s, a, e) \
+ T_flags_ne_int(a, e, T_CHECK_STEP(s) | T_CHECK_STOP)
+
+#define T_ge_i16(a, e) T_flags_ge_int(a, e, 0)
+#define T_assert_ge_i16(a, e) T_flags_ge_int(a, e, T_CHECK_STOP)
+#define T_quiet_ge_i16(a, e) T_flags_ge_int(a, e, T_CHECK_QUIET)
+#define T_step_ge_i16(s, a, e) T_flags_ge_int(a, e, T_CHECK_STEP(s))
+#define T_step_assert_ge_i16(s, a, e) \
+ T_flags_ge_int(a, e, T_CHECK_STEP(s) | T_CHECK_STOP)
+
+#define T_gt_i16(a, e) T_flags_gt_int(a, e, 0)
+#define T_assert_gt_i16(a, e) T_flags_gt_int(a, e, T_CHECK_STOP)
+#define T_quiet_gt_i16(a, e) T_flags_gt_int(a, e, T_CHECK_QUIET)
+#define T_step_gt_i16(s, a, e) T_flags_gt_int(a, e, T_CHECK_STEP(s))
+#define T_step_assert_gt_i16(s, a, e) \
+ T_flags_gt_int(a, e, T_CHECK_STEP(s) | T_CHECK_STOP)
+
+#define T_le_i16(a, e) T_flags_le_int(a, e, 0)
+#define T_assert_le_i16(a, e) T_flags_le_int(a, e, T_CHECK_STOP)
+#define T_quiet_le_i16(a, e) T_flags_le_int(a, e, T_CHECK_QUIET)
+#define T_step_le_i16(s, a, e) T_flags_le_int(a, e, T_CHECK_STEP(s))
+#define T_step_assert_le_i16(s, a, e) \
+ T_flags_le_int(a, e, T_CHECK_STEP(s) | T_CHECK_STOP)
+
+#define T_lt_i16(a, e) T_flags_lt_int(a, e, 0)
+#define T_assert_lt_i16(a, e) T_flags_lt_int(a, e, T_CHECK_STOP)
+#define T_quiet_lt_i16(a, e) T_flags_lt_int(a, e, T_CHECK_QUIET)
+#define T_step_lt_i16(s, a, e) T_flags_lt_int(a, e, T_CHECK_STEP(s))
+#define T_step_assert_lt_i16(s, a, e) \
+ T_flags_lt_int(a, e, T_CHECK_STEP(s) | T_CHECK_STOP)
+
+/** @} */
+
+/**
+ * @defgroup RTEMSTestFrameworkChecksUInt16 Unsigned 16-Bit Integer Checks
+ *
+ * @ingroup RTEMSTestFramework
+ *
+ * @brief Checks for unsigned 16-bit integers (uint16_t).
+ *
+ * @{
+ */
+
+#define T_eq_u16(a, e) T_flags_eq_uint(a, e, 0)
+#define T_assert_eq_u16(a, e) T_flags_eq_uint(a, e, T_CHECK_STOP)
+#define T_quiet_eq_u16(a, e) T_flags_eq_uint(a, e, T_CHECK_QUIET)
+#define T_step_eq_u16(s, a, e) T_flags_eq_uint(a, e, T_CHECK_STEP(s))
+#define T_step_assert_eq_u16(s, a, e) \
+ T_flags_eq_uint(a, e, T_CHECK_STEP(s) | T_CHECK_STOP)
+
+#define T_ne_u16(a, e) T_flags_ne_uint(a, e, 0)
+#define T_assert_ne_u16(a, e) T_flags_ne_uint(a, e, T_CHECK_STOP)
+#define T_quiet_ne_u16(a, e) T_flags_ne_uint(a, e, T_CHECK_QUIET)
+#define T_step_ne_u16(s, a, e) T_flags_ne_uint(a, e, T_CHECK_STEP(s))
+#define T_step_assert_ne_u16(s, a, e) \
+ T_flags_ne_uint(a, e, T_CHECK_STEP(s) | T_CHECK_STOP)
+
+#define T_ge_u16(a, e) T_flags_ge_uint(a, e, 0)
+#define T_assert_ge_u16(a, e) T_flags_ge_uint(a, e, T_CHECK_STOP)
+#define T_quiet_ge_u16(a, e) T_flags_ge_uint(a, e, T_CHECK_QUIET)
+#define T_step_ge_u16(s, a, e) T_flags_ge_uint(a, e, T_CHECK_STEP(s))
+#define T_step_assert_ge_u16(s, a, e) \
+ T_flags_ge_uint(a, e, T_CHECK_STEP(s) | T_CHECK_STOP)
+
+#define T_gt_u16(a, e) T_flags_gt_uint(a, e, 0)
+#define T_assert_gt_u16(a, e) T_flags_gt_uint(a, e, T_CHECK_STOP)
+#define T_quiet_gt_u16(a, e) T_flags_gt_uint(a, e, T_CHECK_QUIET)
+#define T_step_gt_u16(s, a, e) T_flags_gt_uint(a, e, T_CHECK_STEP(s))
+#define T_step_assert_gt_u16(s, a, e) \
+ T_flags_gt_uint(a, e, T_CHECK_STEP(s) | T_CHECK_STOP)
+
+#define T_le_u16(a, e) T_flags_le_uint(a, e, 0)
+#define T_assert_le_u16(a, e) T_flags_le_uint(a, e, T_CHECK_STOP)
+#define T_quiet_le_u16(a, e) T_flags_le_uint(a, e, T_CHECK_QUIET)
+#define T_step_le_u16(s, a, e) T_flags_le_uint(a, e, T_CHECK_STEP(s))
+#define T_step_assert_le_u16(s, a, e) \
+ T_flags_le_uint(a, e, T_CHECK_STEP(s) | T_CHECK_STOP)
+
+#define T_lt_u16(a, e) T_flags_lt_uint(a, e, 0)
+#define T_assert_lt_u16(a, e) T_flags_lt_uint(a, e, T_CHECK_STOP)
+#define T_quiet_lt_u16(a, e) T_flags_lt_uint(a, e, T_CHECK_QUIET)
+#define T_step_lt_u16(s, a, e) T_flags_lt_uint(a, e, T_CHECK_STEP(s))
+#define T_step_assert_lt_u16(s, a, e) \
+ T_flags_lt_uint(a, e, T_CHECK_STEP(s) | T_CHECK_STOP)
+
+/** @} */
+
+/**
+ * @defgroup RTEMSTestFrameworkChecksInt32 Signed 32-Bit Integer Checks
+ *
+ * @ingroup RTEMSTestFramework
+ *
+ * @brief Checks for signed 32-bit integers (int32_t).
+ *
+ * @{
+ */
+
+#define T_eq_i32(a, e) T_flags_eq_long(a, e, 0)
+#define T_assert_eq_i32(a, e) T_flags_eq_long(a, e, T_CHECK_STOP)
+#define T_quiet_eq_i32(a, e) T_flags_eq_long(a, e, T_CHECK_QUIET)
+#define T_step_eq_i32(s, a, e) T_flags_eq_long(a, e, T_CHECK_STEP(s))
+#define T_step_assert_eq_i32(s, a, e) \
+ T_flags_eq_long(a, e, T_CHECK_STEP(s) | T_CHECK_STOP)
+
+#define T_ne_i32(a, e) T_flags_ne_long(a, e, 0)
+#define T_assert_ne_i32(a, e) T_flags_ne_long(a, e, T_CHECK_STOP)
+#define T_quiet_ne_i32(a, e) T_flags_ne_long(a, e, T_CHECK_QUIET)
+#define T_step_ne_i32(s, a, e) T_flags_ne_long(a, e, T_CHECK_STEP(s))
+#define T_step_assert_ne_i32(s, a, e) \
+ T_flags_ne_long(a, e, T_CHECK_STEP(s) | T_CHECK_STOP)
+
+#define T_ge_i32(a, e) T_flags_ge_long(a, e, 0)
+#define T_assert_ge_i32(a, e) T_flags_ge_long(a, e, T_CHECK_STOP)
+#define T_quiet_ge_i32(a, e) T_flags_ge_long(a, e, T_CHECK_QUIET)
+#define T_step_ge_i32(s, a, e) T_flags_ge_long(a, e, T_CHECK_STEP(s))
+#define T_step_assert_ge_i32(s, a, e) \
+ T_flags_ge_long(a, e, T_CHECK_STEP(s) | T_CHECK_STOP)
+
+#define T_gt_i32(a, e) T_flags_gt_long(a, e, 0)
+#define T_assert_gt_i32(a, e) T_flags_gt_long(a, e, T_CHECK_STOP)
+#define T_quiet_gt_i32(a, e) T_flags_gt_long(a, e, T_CHECK_QUIET)
+#define T_step_gt_i32(s, a, e) T_flags_gt_long(a, e, T_CHECK_STEP(s))
+#define T_step_assert_gt_i32(s, a, e) \
+ T_flags_gt_long(a, e, T_CHECK_STEP(s) | T_CHECK_STOP)
+
+#define T_le_i32(a, e) T_flags_le_long(a, e, 0)
+#define T_assert_le_i32(a, e) T_flags_le_long(a, e, T_CHECK_STOP)
+#define T_quiet_le_i32(a, e) T_flags_le_long(a, e, T_CHECK_QUIET)
+#define T_step_le_i32(s, a, e) T_flags_le_long(a, e, T_CHECK_STEP(s))
+#define T_step_assert_le_i32(s, a, e) \
+ T_flags_le_long(a, e, T_CHECK_STEP(s) | T_CHECK_STOP)
+
+#define T_lt_i32(a, e) T_flags_lt_long(a, e, 0)
+#define T_assert_lt_i32(a, e) T_flags_lt_long(a, e, T_CHECK_STOP)
+#define T_quiet_lt_i32(a, e) T_flags_lt_long(a, e, T_CHECK_QUIET)
+#define T_step_lt_i32(s, a, e) T_flags_lt_long(a, e, T_CHECK_STEP(s))
+#define T_step_assert_lt_i32(s, a, e) \
+ T_flags_lt_long(a, e, T_CHECK_STEP(s) | T_CHECK_STOP)
+
+/** @} */
+
+/**
+ * @defgroup RTEMSTestFrameworkChecksUInt32 Unsigned 32-Bit Integer Checks
+ *
+ * @ingroup RTEMSTestFramework
+ *
+ * @brief Checks for unsigned 32-bit integers (uint32_t).
+ *
+ * @{
+ */
+
+#define T_eq_u32(a, e) T_flags_eq_ulong(a, e, 0)
+#define T_assert_eq_u32(a, e) T_flags_eq_ulong(a, e, T_CHECK_STOP)
+#define T_quiet_eq_u32(a, e) T_flags_eq_ulong(a, e, T_CHECK_QUIET)
+#define T_step_eq_u32(s, a, e) T_flags_eq_ulong(a, e, T_CHECK_STEP(s))
+#define T_step_assert_eq_u32(s, a, e) \
+ T_flags_eq_ulong(a, e, T_CHECK_STEP(s) | T_CHECK_STOP)
+
+#define T_ne_u32(a, e) T_flags_ne_ulong(a, e, 0)
+#define T_assert_ne_u32(a, e) T_flags_ne_ulong(a, e, T_CHECK_STOP)
+#define T_quiet_ne_u32(a, e) T_flags_ne_ulong(a, e, T_CHECK_QUIET)
+#define T_step_ne_u32(s, a, e) T_flags_ne_ulong(a, e, T_CHECK_STEP(s))
+#define T_step_assert_ne_u32(s, a, e) \
+ T_flags_ne_ulong(a, e, T_CHECK_STEP(s) | T_CHECK_STOP)
+
+#define T_ge_u32(a, e) T_flags_ge_ulong(a, e, 0)
+#define T_assert_ge_u32(a, e) T_flags_ge_ulong(a, e, T_CHECK_STOP)
+#define T_quiet_ge_u32(a, e) T_flags_ge_ulong(a, e, T_CHECK_QUIET)
+#define T_step_ge_u32(s, a, e) T_flags_ge_ulong(a, e, T_CHECK_STEP(s))
+#define T_step_assert_ge_u32(s, a, e) \
+ T_flags_ge_ulong(a, e, T_CHECK_STEP(s) | T_CHECK_STOP)
+
+#define T_gt_u32(a, e) T_flags_gt_ulong(a, e, 0)
+#define T_assert_gt_u32(a, e) T_flags_gt_ulong(a, e, T_CHECK_STOP)
+#define T_quiet_gt_u32(a, e) T_flags_gt_ulong(a, e, T_CHECK_QUIET)
+#define T_step_gt_u32(s, a, e) T_flags_gt_ulong(a, e, T_CHECK_STEP(s))
+#define T_step_assert_gt_u32(s, a, e) \
+ T_flags_gt_ulong(a, e, T_CHECK_STEP(s) | T_CHECK_STOP)
+
+#define T_le_u32(a, e) T_flags_le_ulong(a, e, 0)
+#define T_assert_le_u32(a, e) T_flags_le_ulong(a, e, T_CHECK_STOP)
+#define T_quiet_le_u32(a, e) T_flags_le_ulong(a, e, T_CHECK_QUIET)
+#define T_step_le_u32(s, a, e) T_flags_le_ulong(a, e, T_CHECK_STEP(s))
+#define T_step_assert_le_u32(s, a, e) \
+ T_flags_le_ulong(a, e, T_CHECK_STEP(s) | T_CHECK_STOP)
+
+#define T_lt_u32(a, e) T_flags_lt_ulong(a, e, 0)
+#define T_assert_lt_u32(a, e) T_flags_lt_ulong(a, e, T_CHECK_STOP)
+#define T_quiet_lt_u32(a, e) T_flags_lt_ulong(a, e, T_CHECK_QUIET)
+#define T_step_lt_u32(s, a, e) T_flags_lt_ulong(a, e, T_CHECK_STEP(s))
+#define T_step_assert_lt_u32(s, a, e) \
+ T_flags_lt_ulong(a, e, T_CHECK_STEP(s) | T_CHECK_STOP)
+
+/** @} */
+
+/**
+ * @defgroup RTEMSTestFrameworkChecksInt64 Signed 64-Bit Integer Checks
+ *
+ * @ingroup RTEMSTestFramework
+ *
+ * @brief Checks for signed 64-bit integers (int64_t).
+ *
+ * @{
+ */
+
+#define T_eq_i64(a, e) T_flags_eq_ll(a, e, 0)
+#define T_assert_eq_i64(a, e) T_flags_eq_ll(a, e, T_CHECK_STOP)
+#define T_quiet_eq_i64(a, e) T_flags_eq_ll(a, e, T_CHECK_QUIET)
+#define T_step_eq_i64(s, a, e) T_flags_eq_ll(a, e, T_CHECK_STEP(s))
+#define T_step_assert_eq_i64(s, a, e) \
+ T_flags_eq_ll(a, e, T_CHECK_STEP(s) | T_CHECK_STOP)
+
+#define T_ne_i64(a, e) T_flags_ne_ll(a, e, 0)
+#define T_assert_ne_i64(a, e) T_flags_ne_ll(a, e, T_CHECK_STOP)
+#define T_quiet_ne_i64(a, e) T_flags_ne_ll(a, e, T_CHECK_QUIET)
+#define T_step_ne_i64(s, a, e) T_flags_ne_ll(a, e, T_CHECK_STEP(s))
+#define T_step_assert_ne_i64(s, a, e) \
+ T_flags_ne_ll(a, e, T_CHECK_STEP(s) | T_CHECK_STOP)
+
+#define T_ge_i64(a, e) T_flags_ge_ll(a, e, 0)
+#define T_assert_ge_i64(a, e) T_flags_ge_ll(a, e, T_CHECK_STOP)
+#define T_quiet_ge_i64(a, e) T_flags_ge_ll(a, e, T_CHECK_QUIET)
+#define T_step_ge_i64(s, a, e) T_flags_ge_ll(a, e, T_CHECK_STEP(s))
+#define T_step_assert_ge_i64(s, a, e) \
+ T_flags_ge_ll(a, e, T_CHECK_STEP(s) | T_CHECK_STOP)
+
+#define T_gt_i64(a, e) T_flags_gt_ll(a, e, 0)
+#define T_assert_gt_i64(a, e) T_flags_gt_ll(a, e, T_CHECK_STOP)
+#define T_quiet_gt_i64(a, e) T_flags_gt_ll(a, e, T_CHECK_QUIET)
+#define T_step_gt_i64(s, a, e) T_flags_gt_ll(a, e, T_CHECK_STEP(s))
+#define T_step_assert_gt_i64(s, a, e) \
+ T_flags_gt_ll(a, e, T_CHECK_STEP(s) | T_CHECK_STOP)
+
+#define T_le_i64(a, e) T_flags_le_ll(a, e, 0)
+#define T_assert_le_i64(a, e) T_flags_le_ll(a, e, T_CHECK_STOP)
+#define T_quiet_le_i64(a, e) T_flags_le_ll(a, e, T_CHECK_QUIET)
+#define T_step_le_i64(s, a, e) T_flags_le_ll(a, e, T_CHECK_STEP(s))
+#define T_step_assert_le_i64(s, a, e) \
+ T_flags_le_ll(a, e, T_CHECK_STEP(s) | T_CHECK_STOP)
+
+#define T_lt_i64(a, e) T_flags_lt_ll(a, e, 0)
+#define T_assert_lt_i64(a, e) T_flags_lt_ll(a, e, T_CHECK_STOP)
+#define T_quiet_lt_i64(a, e) T_flags_lt_ll(a, e, T_CHECK_QUIET)
+#define T_step_lt_i64(s, a, e) T_flags_lt_ll(a, e, T_CHECK_STEP(s))
+#define T_step_assert_lt_i64(s, a, e) \
+ T_flags_lt_ll(a, e, T_CHECK_STEP(s) | T_CHECK_STOP)
+
+/** @} */
+
+/**
+ * @defgroup RTEMSTestFrameworkChecksUInt64 Unsigned 64-Bit Integer Checks
+ *
+ * @ingroup RTEMSTestFramework
+ *
+ * @brief Checks for unsigned 64-bit integers (uint64_t).
+ *
+ * @{
+ */
+
+#define T_eq_u64(a, e) T_flags_eq_ull(a, e, 0)
+#define T_assert_eq_u64(a, e) T_flags_eq_ull(a, e, T_CHECK_STOP)
+#define T_quiet_eq_u64(a, e) T_flags_eq_ull(a, e, T_CHECK_QUIET)
+#define T_step_eq_u64(s, a, e) T_flags_eq_ull(a, e, T_CHECK_STEP(s))
+#define T_step_assert_eq_u64(s, a, e) \
+ T_flags_eq_ull(a, e, T_CHECK_STEP(s) | T_CHECK_STOP)
+
+#define T_ne_u64(a, e) T_flags_ne_ull(a, e, 0)
+#define T_assert_ne_u64(a, e) T_flags_ne_ull(a, e, T_CHECK_STOP)
+#define T_quiet_ne_u64(a, e) T_flags_ne_ull(a, e, T_CHECK_QUIET)
+#define T_step_ne_u64(s, a, e) T_flags_ne_ull(a, e, T_CHECK_STEP(s))
+#define T_step_assert_ne_u64(s, a, e) \
+ T_flags_ne_ull(a, e, T_CHECK_STEP(s) | T_CHECK_STOP)
+
+#define T_ge_u64(a, e) T_flags_ge_ull(a, e, 0)
+#define T_assert_ge_u64(a, e) T_flags_ge_ull(a, e, T_CHECK_STOP)
+#define T_quiet_ge_u64(a, e) T_flags_ge_ull(a, e, T_CHECK_QUIET)
+#define T_step_ge_u64(s, a, e) T_flags_ge_ull(a, e, T_CHECK_STEP(s))
+#define T_step_assert_ge_u64(s, a, e) \
+ T_flags_ge_ull(a, e, T_CHECK_STEP(s) | T_CHECK_STOP)
+
+#define T_gt_u64(a, e) T_flags_gt_ull(a, e, 0)
+#define T_assert_gt_u64(a, e) T_flags_gt_ull(a, e, T_CHECK_STOP)
+#define T_quiet_gt_u64(a, e) T_flags_gt_ull(a, e, T_CHECK_QUIET)
+#define T_step_gt_u64(s, a, e) T_flags_gt_ull(a, e, T_CHECK_STEP(s))
+#define T_step_assert_gt_u64(s, a, e) \
+ T_flags_gt_ull(a, e, T_CHECK_STEP(s) | T_CHECK_STOP)
+
+#define T_le_u64(a, e) T_flags_le_ull(a, e, 0)
+#define T_assert_le_u64(a, e) T_flags_le_ull(a, e, T_CHECK_STOP)
+#define T_quiet_le_u64(a, e) T_flags_le_ull(a, e, T_CHECK_QUIET)
+#define T_step_le_u64(s, a, e) T_flags_le_ull(a, e, T_CHECK_STEP(s))
+#define T_step_assert_le_u64(s, a, e) \
+ T_flags_le_ull(a, e, T_CHECK_STEP(s) | T_CHECK_STOP)
+
+#define T_lt_u64(a, e) T_flags_lt_ull(a, e, 0)
+#define T_assert_lt_u64(a, e) T_flags_lt_ull(a, e, T_CHECK_STOP)
+#define T_quiet_lt_u64(a, e) T_flags_lt_ull(a, e, T_CHECK_QUIET)
+#define T_step_lt_u64(s, a, e) T_flags_lt_ull(a, e, T_CHECK_STEP(s))
+#define T_step_assert_lt_u64(s, a, e) \
+ T_flags_lt_ull(a, e, T_CHECK_STEP(s) | T_CHECK_STOP)
+
+/** @} */
+
+/**
+ * @defgroup RTEMSTestFrameworkChecksIntptr Signed Pointer Value Checks
+ *
+ * @ingroup RTEMSTestFramework
+ *
+ * @brief Checks for signed pointer values (intptr_t).
+ *
+ * @{
+ */
+
+#define T_eq_iptr(a, e) T_flags_eq_long(a, e, 0)
+#define T_assert_eq_iptr(a, e) T_flags_eq_long(a, e, T_CHECK_STOP)
+#define T_quiet_eq_iptr(a, e) T_flags_eq_long(a, e, T_CHECK_QUIET)
+#define T_step_eq_iptr(s, a, e) T_flags_eq_long(a, e, T_CHECK_STEP(s))
+#define T_step_assert_eq_iptr(s, a, e) \
+ T_flags_eq_long(a, e, T_CHECK_STEP(s) | T_CHECK_STOP)
+
+#define T_ne_iptr(a, e) T_flags_ne_long(a, e, 0)
+#define T_assert_ne_iptr(a, e) T_flags_ne_long(a, e, T_CHECK_STOP)
+#define T_quiet_ne_iptr(a, e) T_flags_ne_long(a, e, T_CHECK_QUIET)
+#define T_step_ne_iptr(s, a, e) T_flags_ne_long(a, e, T_CHECK_STEP(s))
+#define T_step_assert_ne_iptr(s, a, e) \
+ T_flags_ne_long(a, e, T_CHECK_STEP(s) | T_CHECK_STOP)
+
+#define T_ge_iptr(a, e) T_flags_ge_long(a, e, 0)
+#define T_assert_ge_iptr(a, e) T_flags_ge_long(a, e, T_CHECK_STOP)
+#define T_quiet_ge_iptr(a, e) T_flags_ge_long(a, e, T_CHECK_QUIET)
+#define T_step_ge_iptr(s, a, e) T_flags_ge_long(a, e, T_CHECK_STEP(s))
+#define T_step_assert_ge_iptr(s, a, e) \
+ T_flags_ge_long(a, e, T_CHECK_STEP(s) | T_CHECK_STOP)
+
+#define T_gt_iptr(a, e) T_flags_gt_long(a, e, 0)
+#define T_assert_gt_iptr(a, e) T_flags_gt_long(a, e, T_CHECK_STOP)
+#define T_quiet_gt_iptr(a, e) T_flags_gt_long(a, e, T_CHECK_QUIET)
+#define T_step_gt_iptr(s, a, e) T_flags_gt_long(a, e, T_CHECK_STEP(s))
+#define T_step_assert_gt_iptr(s, a, e) \
+ T_flags_gt_long(a, e, T_CHECK_STEP(s) | T_CHECK_STOP)
+
+#define T_le_iptr(a, e) T_flags_le_long(a, e, 0)
+#define T_assert_le_iptr(a, e) T_flags_le_long(a, e, T_CHECK_STOP)
+#define T_quiet_le_iptr(a, e) T_flags_le_long(a, e, T_CHECK_QUIET)
+#define T_step_le_iptr(s, a, e) T_flags_le_long(a, e, T_CHECK_STEP(s))
+#define T_step_assert_le_iptr(s, a, e) \
+ T_flags_le_long(a, e, T_CHECK_STEP(s) | T_CHECK_STOP)
+
+#define T_lt_iptr(a, e) T_flags_lt_long(a, e, 0)
+#define T_assert_lt_iptr(a, e) T_flags_lt_long(a, e, T_CHECK_STOP)
+#define T_quiet_lt_iptr(a, e) T_flags_lt_long(a, e, T_CHECK_QUIET)
+#define T_step_lt_iptr(s, a, e) T_flags_lt_long(a, e, T_CHECK_STEP(s))
+#define T_step_assert_lt_iptr(s, a, e) \
+ T_flags_lt_long(a, e, T_CHECK_STEP(s) | T_CHECK_STOP)
+
+/** @} */
+
+/**
+ * @defgroup RTEMSTestFrameworkChecksUIntptr Unsigned Pointer Value Checks
+ *
+ * @ingroup RTEMSTestFramework
+ *
+ * @brief Checks for unsigned pointer values (uintptr_t).
+ *
+ * @{
+ */
+
+#define T_eq_uptr(a, e) T_flags_eq_ulong(a, e, 0)
+#define T_assert_eq_uptr(a, e) T_flags_eq_ulong(a, e, T_CHECK_STOP)
+#define T_quiet_eq_uptr(a, e) T_flags_eq_ulong(a, e, T_CHECK_QUIET)
+#define T_step_eq_uptr(s, a, e) T_flags_eq_ulong(a, e, T_CHECK_STEP(s))
+#define T_step_assert_eq_uptr(s, a, e) \
+ T_flags_eq_ulong(a, e, T_CHECK_STEP(s) | T_CHECK_STOP)
+
+#define T_ne_uptr(a, e) T_flags_ne_ulong(a, e, 0)
+#define T_assert_ne_uptr(a, e) T_flags_ne_ulong(a, e, T_CHECK_STOP)
+#define T_quiet_ne_uptr(a, e) T_flags_ne_ulong(a, e, T_CHECK_QUIET)
+#define T_step_ne_uptr(s, a, e) T_flags_ne_ulong(a, e, T_CHECK_STEP(s))
+#define T_step_assert_ne_uptr(s, a, e) \
+ T_flags_ne_ulong(a, e, T_CHECK_STEP(s) | T_CHECK_STOP)
+
+#define T_ge_uptr(a, e) T_flags_ge_ulong(a, e, 0)
+#define T_assert_ge_uptr(a, e) T_flags_ge_ulong(a, e, T_CHECK_STOP)
+#define T_quiet_ge_uptr(a, e) T_flags_ge_ulong(a, e, T_CHECK_QUIET)
+#define T_step_ge_uptr(s, a, e) T_flags_ge_ulong(a, e, T_CHECK_STEP(s))
+#define T_step_assert_ge_uptr(s, a, e) \
+ T_flags_ge_ulong(a, e, T_CHECK_STEP(s) | T_CHECK_STOP)
+
+#define T_gt_uptr(a, e) T_flags_gt_ulong(a, e, 0)
+#define T_assert_gt_uptr(a, e) T_flags_gt_ulong(a, e, T_CHECK_STOP)
+#define T_quiet_gt_uptr(a, e) T_flags_gt_ulong(a, e, T_CHECK_QUIET)
+#define T_step_gt_uptr(s, a, e) T_flags_gt_ulong(a, e, T_CHECK_STEP(s))
+#define T_step_assert_gt_uptr(s, a, e) \
+ T_flags_gt_ulong(a, e, T_CHECK_STEP(s) | T_CHECK_STOP)
+
+#define T_le_uptr(a, e) T_flags_le_ulong(a, e, 0)
+#define T_assert_le_uptr(a, e) T_flags_le_ulong(a, e, T_CHECK_STOP)
+#define T_quiet_le_uptr(a, e) T_flags_le_ulong(a, e, T_CHECK_QUIET)
+#define T_step_le_uptr(s, a, e) T_flags_le_ulong(a, e, T_CHECK_STEP(s))
+#define T_step_assert_le_uptr(s, a, e) \
+ T_flags_le_ulong(a, e, T_CHECK_STEP(s) | T_CHECK_STOP)
+
+#define T_lt_uptr(a, e) T_flags_lt_ulong(a, e, 0)
+#define T_assert_lt_uptr(a, e) T_flags_lt_ulong(a, e, T_CHECK_STOP)
+#define T_quiet_lt_uptr(a, e) T_flags_lt_ulong(a, e, T_CHECK_QUIET)
+#define T_step_lt_uptr(s, a, e) T_flags_lt_ulong(a, e, T_CHECK_STEP(s))
+#define T_step_assert_lt_uptr(s, a, e) \
+ T_flags_lt_ulong(a, e, T_CHECK_STEP(s) | T_CHECK_STOP)
+
+/** @} */
+
+/**
+ * @defgroup RTEMSTestFrameworkChecksSSZ Signed Size Checks
+ *
+ * @ingroup RTEMSTestFramework
+ *
+ * @brief Checks for signed sizes (ssize_t).
+ *
+ * @{
+ */
+
+#define T_eq_ssz(a, e) T_flags_eq_long(a, e, 0)
+#define T_assert_eq_ssz(a, e) T_flags_eq_long(a, e, T_CHECK_STOP)
+#define T_quiet_eq_ssz(a, e) T_flags_eq_long(a, e, T_CHECK_QUIET)
+#define T_step_eq_ssz(s, a, e) T_flags_eq_long(a, e, T_CHECK_STEP(s))
+#define T_step_assert_eq_ssz(s, a, e) \
+ T_flags_eq_long(a, e, T_CHECK_STEP(s) | T_CHECK_STOP)
+
+#define T_ne_ssz(a, e) T_flags_ne_long(a, e, 0)
+#define T_assert_ne_ssz(a, e) T_flags_ne_long(a, e, T_CHECK_STOP)
+#define T_quiet_ne_ssz(a, e) T_flags_ne_long(a, e, T_CHECK_QUIET)
+#define T_step_ne_ssz(s, a, e) T_flags_ne_long(a, e, T_CHECK_STEP(s))
+#define T_step_assert_ne_ssz(s, a, e) \
+ T_flags_ne_long(a, e, T_CHECK_STEP(s) | T_CHECK_STOP)
+
+#define T_ge_ssz(a, e) T_flags_ge_long(a, e, 0)
+#define T_assert_ge_ssz(a, e) T_flags_ge_long(a, e, T_CHECK_STOP)
+#define T_quiet_ge_ssz(a, e) T_flags_ge_long(a, e, T_CHECK_QUIET)
+#define T_step_ge_ssz(s, a, e) T_flags_ge_long(a, e, T_CHECK_STEP(s))
+#define T_step_assert_ge_ssz(s, a, e) \
+ T_flags_ge_long(a, e, T_CHECK_STEP(s) | T_CHECK_STOP)
+
+#define T_gt_ssz(a, e) T_flags_gt_long(a, e, 0)
+#define T_assert_gt_ssz(a, e) T_flags_gt_long(a, e, T_CHECK_STOP)
+#define T_quiet_gt_ssz(a, e) T_flags_gt_long(a, e, T_CHECK_QUIET)
+#define T_step_gt_ssz(s, a, e) T_flags_gt_long(a, e, T_CHECK_STEP(s))
+#define T_step_assert_gt_ssz(s, a, e) \
+ T_flags_gt_long(a, e, T_CHECK_STEP(s) | T_CHECK_STOP)
+
+#define T_le_ssz(a, e) T_flags_le_long(a, e, 0)
+#define T_assert_le_ssz(a, e) T_flags_le_long(a, e, T_CHECK_STOP)
+#define T_quiet_le_ssz(a, e) T_flags_le_long(a, e, T_CHECK_QUIET)
+#define T_step_le_ssz(s, a, e) T_flags_le_long(a, e, T_CHECK_STEP(s))
+#define T_step_assert_le_ssz(s, a, e) \
+ T_flags_le_long(a, e, T_CHECK_STEP(s) | T_CHECK_STOP)
+
+#define T_lt_ssz(a, e) T_flags_lt_long(a, e, 0)
+#define T_assert_lt_ssz(a, e) T_flags_lt_long(a, e, T_CHECK_STOP)
+#define T_quiet_lt_ssz(a, e) T_flags_lt_long(a, e, T_CHECK_QUIET)
+#define T_step_lt_ssz(s, a, e) T_flags_lt_long(a, e, T_CHECK_STEP(s))
+#define T_step_assert_lt_ssz(s, a, e) \
+ T_flags_lt_long(a, e, T_CHECK_STEP(s) | T_CHECK_STOP)
+
+/** @} */
+
+/**
+ * @defgroup RTEMSTestFrameworkChecksSZ Size Checks
+ *
+ * @ingroup RTEMSTestFramework
+ *
+ * @brief Checks for sizes (size_t).
+ *
+ * @{
+ */
+
+#define T_eq_sz(a, e) T_flags_eq_ulong(a, e, 0)
+#define T_assert_eq_sz(a, e) T_flags_eq_ulong(a, e, T_CHECK_STOP)
+#define T_quiet_eq_sz(a, e) T_flags_eq_ulong(a, e, T_CHECK_QUIET)
+#define T_step_eq_sz(s, a, e) T_flags_eq_ulong(a, e, T_CHECK_STEP(s))
+#define T_step_assert_eq_sz(s, a, e) \
+ T_flags_eq_ulong(a, e, T_CHECK_STEP(s) | T_CHECK_STOP)
+
+#define T_ne_sz(a, e) T_flags_ne_ulong(a, e, 0)
+#define T_assert_ne_sz(a, e) T_flags_ne_ulong(a, e, T_CHECK_STOP)
+#define T_quiet_ne_sz(a, e) T_flags_ne_ulong(a, e, T_CHECK_QUIET)
+#define T_step_ne_sz(s, a, e) T_flags_ne_ulong(a, e, T_CHECK_STEP(s))
+#define T_step_assert_ne_sz(s, a, e) \
+ T_flags_ne_ulong(a, e, T_CHECK_STEP(s) | T_CHECK_STOP)
+
+#define T_ge_sz(a, e) T_flags_ge_ulong(a, e, 0)
+#define T_assert_ge_sz(a, e) T_flags_ge_ulong(a, e, T_CHECK_STOP)
+#define T_quiet_ge_sz(a, e) T_flags_ge_ulong(a, e, T_CHECK_QUIET)
+#define T_step_ge_sz(s, a, e) T_flags_ge_ulong(a, e, T_CHECK_STEP(s))
+#define T_step_assert_ge_sz(s, a, e) \
+ T_flags_ge_ulong(a, e, T_CHECK_STEP(s) | T_CHECK_STOP)
+
+#define T_gt_sz(a, e) T_flags_gt_ulong(a, e, 0)
+#define T_assert_gt_sz(a, e) T_flags_gt_ulong(a, e, T_CHECK_STOP)
+#define T_quiet_gt_sz(a, e) T_flags_gt_ulong(a, e, T_CHECK_QUIET)
+#define T_step_gt_sz(s, a, e) T_flags_gt_ulong(a, e, T_CHECK_STEP(s))
+#define T_step_assert_gt_sz(s, a, e) \
+ T_flags_gt_ulong(a, e, T_CHECK_STEP(s) | T_CHECK_STOP)
+
+#define T_le_sz(a, e) T_flags_le_ulong(a, e, 0)
+#define T_assert_le_sz(a, e) T_flags_le_ulong(a, e, T_CHECK_STOP)
+#define T_quiet_le_sz(a, e) T_flags_le_ulong(a, e, T_CHECK_QUIET)
+#define T_step_le_sz(s, a, e) T_flags_le_ulong(a, e, T_CHECK_STEP(s))
+#define T_step_assert_le_sz(s, a, e) \
+ T_flags_le_ulong(a, e, T_CHECK_STEP(s) | T_CHECK_STOP)
+
+#define T_lt_sz(a, e) T_flags_lt_ulong(a, e, 0)
+#define T_assert_lt_sz(a, e) T_flags_lt_ulong(a, e, T_CHECK_STOP)
+#define T_quiet_lt_sz(a, e) T_flags_lt_ulong(a, e, T_CHECK_QUIET)
+#define T_step_lt_sz(s, a, e) T_flags_lt_ulong(a, e, T_CHECK_STEP(s))
+#define T_step_assert_lt_sz(s, a, e) \
+ T_flags_lt_ulong(a, e, T_CHECK_STEP(s) | T_CHECK_STOP)
+
+/** @} */
+
+/**
+ * @defgroup RTEMSTestFrameworkChecksPSX POSIX Status and Error Number Checks
+ *
+ * @ingroup RTEMSTestFramework
+ *
+ * @brief Checks for POSIX status and error numbers.
+ *
+ * @{
+ */
+
+const char *T_strerror(int);
+
+#define T_eno(a, e) T_flags_eno(a, e, 0)
+#define T_assert_eno(a, e) T_flags_eno(a, e, T_CHECK_STOP)
+#define T_quiet_eno(a, e) T_flags_eno(a, e, T_CHECK_QUIET)
+#define T_step_eno(s, a, e) T_flags_eno(a, e, T_CHECK_STEP(s))
+#define T_step_assert_eno(s, a, e) \
+ T_flags_eno(a, e, T_CHECK_STEP(s) | T_CHECK_STOP)
+
+#define T_eno_success(a) T_flags_eno_success(a, 0)
+#define T_assert_eno_success(a) T_flags_eno_success(a, T_CHECK_STOP)
+#define T_quiet_eno_success(a) T_flags_eno_success(a, T_CHECK_QUIET)
+#define T_step_eno_success(s, a) T_flags_eno_success(a, T_CHECK_STEP(s))
+#define T_step_assert_eno_success(s, a) \
+ T_flags_eno_success(a, T_CHECK_STEP(s) | T_CHECK_STOP)
+
+#define T_psx_error(a, eno) T_flags_psx_error(a, eno, 0)
+#define T_assert_psx_error(a, eno) T_flags_psx_error(a, eno, T_CHECK_STOP)
+#define T_quiet_psx_error(a, eno) T_flags_psx_error(a, eno, T_CHECK_QUIET)
+#define T_step_psx_error(s, a, eno) T_flags_psx_error(a, eno, T_CHECK_STEP(s))
+#define T_step_assert_psx_error(s, a, eno) \
+ T_flags_psx_error(a, eno, T_CHECK_STEP(s) | T_CHECK_STOP)
+
+#define T_psx_success(a) T_flags_psx_success(a, 0)
+#define T_assert_psx_success(a) T_flags_psx_success(a, T_CHECK_STOP)
+#define T_quiet_psx_success(a) T_flags_psx_success(a, T_CHECK_QUIET)
+#define T_step_psx_success(s, a) T_flags_psx_success(a, T_CHECK_STEP(s))
+#define T_step_assert_psx_success(s, a) \
+ T_flags_psx_success(a, T_CHECK_STEP(s) | T_CHECK_STOP)
+
+/** @} */
+
+#ifdef __rtems__
+void T_check_rsc(const T_check_context *, uint32_t, uint32_t);
+
+#define T_flags_rsc(a, e, flags) \
+{ \
+ static const T_check_context T_check_instance = { \
+ T_FILE_NAME, __LINE__, (flags) | T_CHECK_FMT }; \
+ T_check_rsc(&T_check_instance, a, e); \
+}
+
+void T_check_rsc_success(const T_check_context *, uint32_t);
+
+#define T_flags_rsc_success(a, flags) \
+{ \
+ static const T_check_context T_check_instance = { \
+ T_FILE_NAME, __LINE__, (flags) | T_CHECK_FMT }; \
+ T_check_rsc_success(&T_check_instance, a); \
}
/**
- * @brief Indicates if a worker is the master worker.
+ * @defgroup RTEMSTestFrameworkChecksRSC RTEMS Status Code Checks
*
- * The master worker is the thread that called rtems_test_parallel().
+ * @ingroup RTEMSTestFramework
*
- * @param[in] worker_index The worker index.
+ * @brief Checks for RTEMS status codes (rtems_status_code).
*
- * @retval true This is the master worker.
- * @retval false Otherwise.
+ * @{
*/
-static inline bool rtems_test_parallel_is_master_worker(size_t worker_index)
-{
- return worker_index == 0;
+
+#define T_rsc(a, e) T_flags_rsc(a, e, 0)
+#define T_assert_rsc(a, e) T_flags_rsc(a, e, T_CHECK_STOP)
+#define T_quiet_rsc(a, e) T_flags_rsc(a, e, T_CHECK_QUIET)
+#define T_step_rsc(s, a, e) T_flags_rsc(a, e, T_CHECK_STEP(s))
+#define T_step_assert_rsc(s, a, e) \
+ T_flags_rsc(a, e, T_CHECK_STEP(s) | T_CHECK_STOP)
+
+#define T_rsc_success(a) T_flags_rsc_success(a, 0)
+#define T_assert_rsc_success(a) T_flags_rsc_success(a, T_CHECK_STOP)
+#define T_quiet_rsc_success(a) T_flags_rsc_success(a, T_CHECK_QUIET)
+#define T_step_rsc_success(s, a) T_flags_rsc_success(a, T_CHECK_STEP(s))
+#define T_step_assert_rsc_success(s, a) \
+ T_flags_rsc_success(a, T_CHECK_STEP(s) | T_CHECK_STOP)
+
+/** @} */
+#endif /* __rtems__ */
+
+void T_plan(unsigned int);
+
+extern const T_fixture T_empty_fixture;
+
+void T_push_plan(T_fixture_node *, unsigned int);
+
+void T_pop_plan(void);
+
+void T_check_step(const T_check_context *, unsigned int);
+
+#define T_flags_step(a, flags) \
+{ \
+ static const T_check_context T_check_instance = { \
+ T_FILE_NAME, __LINE__, (flags) | T_CHECK_FMT }; \
+ T_check_step(&T_check_instance, a); \
}
+#define T_step(e) T_flags_step(e, 0)
+#define T_step_assert(e) T_flags_step(e, T_CHECK_STOP)
+
/**
- * @brief Returns the task identifier for a worker.
+ * @defgroup RTEMSTestFrameworkTime Time Services
+ *
+ * @ingroup RTEMSTestFramework
*
- * @param[in] ctx The parallel context.
- * @param[in] worker_index The worker index.
+ * @brief Time service functions.
*
- * @return The task identifier of the worker.
+ * @{
*/
-static inline rtems_id rtems_test_parallel_get_task_id(
- const rtems_test_parallel_context *ctx,
- size_t worker_index
-)
+
+#ifdef __rtems__
+typedef CPU_Counter_ticks T_ticks;
+#else
+typedef unsigned long T_ticks;
+#endif
+
+typedef uint64_t T_time;
+
+/* More than enough for sizeof("18446744073.709552765") */
+typedef char T_time_string[24];
+
+const char *T_time_to_string_ns(T_time, T_time_string);
+
+const char *T_time_to_string_us(T_time, T_time_string);
+
+const char *T_time_to_string_ms(T_time, T_time_string);
+
+const char *T_time_to_string_s(T_time, T_time_string);
+
+const char *T_ticks_to_string_ns(T_ticks, T_time_string);
+
+const char *T_ticks_to_string_us(T_ticks, T_time_string);
+
+const char *T_ticks_to_string_ms(T_ticks, T_time_string);
+
+const char *T_ticks_to_string_s(T_ticks, T_time_string);
+
+T_time T_ticks_to_time(T_ticks);
+
+T_ticks T_time_to_ticks(T_time);
+
+T_time T_seconds_and_nanoseconds_to_time(uint32_t, uint32_t);
+
+void T_time_to_seconds_and_nanoseconds(T_time, uint32_t *, uint32_t *);
+
+T_time T_now(void);
+
+#ifdef __rtems__
+static inline T_ticks
+T_tick(void)
{
- return ctx->worker_ids[worker_index];
+ return _CPU_Counter_read();
}
+#else
+T_ticks T_tick(void);
+#endif
+
+T_time T_now_clock(void);
+
+T_time T_now_dummy(void);
+
+T_time T_now_tick(void);
+
+T_time T_case_begin_time(void);
+
+/** @} */
+
+void *T_malloc(size_t);
+
+void *T_calloc(size_t, size_t);
+
+void *T_zalloc(size_t, void (*)(void *));
+
+void T_free(void *);
+
+void T_register(void);
+
+typedef enum {
+ T_EVENT_RUN_INITIALIZE_EARLY,
+ T_EVENT_RUN_INITIALIZE_LATE,
+ T_EVENT_CASE_EARLY,
+ T_EVENT_CASE_BEGIN,
+ T_EVENT_CASE_END,
+ T_EVENT_CASE_LATE,
+ T_EVENT_RUN_FINALIZE_EARLY,
+ T_EVENT_RUN_FINALIZE_LATE
+} T_event;
+
+typedef void (*T_action)(T_event, const char *);
+
+typedef void (*T_putchar)(int, void *);
+
+typedef struct {
+ const char *name;
+ char *buf;
+ size_t buf_size;
+ T_putchar putchar;
+ void *putchar_arg;
+ T_verbosity verbosity;
+ T_time (*now)(void);
+ size_t action_count;
+ const T_action *actions;
+} T_config;
+
+void T_putchar_default(int, void *);
+
+int T_main(const T_config *);
+
+void T_make_runner(void);
+
+bool T_is_runner(void);
+
+void T_run_initialize(const T_config *);
+
+void T_run_all(void);
+
+void T_run_by_name(const char *);
+
+void T_case_begin(const char *, const T_fixture *);
+
+void T_case_end(void);
+
+bool T_run_finalize(void);
+
+void T_set_putchar(T_putchar, void *, T_putchar *, void **);
+
+void *T_fixture_context(void);
+
+void T_set_fixture_context(void *);
+
+void *T_push_fixture(T_fixture_node *, const T_fixture *);
+
+void T_pop_fixture(void);
+
+T_NO_RETURN void T_stop(void);
+
+#define T_unreachable() \
+ do { T_true(false, "Unreachable"); T_stop(); } while (0)
/**
- * @brief Runs a bunch of jobs in parallel on all processors of the system.
+ * @brief Gets the scope for nested fixtures.
+ *
+ * This function should help implementing scope fixture methods. The parameter
+ * layout allows efficient code generation for this method.
+ *
+ * @param desc is the description table. It shall be a NULL-terminated array
+ * which references arrays of descriptive strings.
+ *
+ * @param buf is the buffer for the scope string.
*
- * The worker tasks inherit the priority of the executing task.
+ * @param n is the size of the scope buffer in characters.
*
- * There are SMP barriers before and after the job body.
+ * @param second_indices is an array of indices defining which descriptive
+ * string is used for each entry in the description table.
*
- * @param[in] ctx The parallel context.
- * @param[in] worker_setup Optional handler to setup a worker task before it is
- * started.
- * @param[in] jobs The table of jobs.
- * @param[in] job_count The count of jobs in the job table.
+ * @return Returns the characters consumed from the buffer for the produced
+ * scope.
*/
-void rtems_test_parallel(
- rtems_test_parallel_context *ctx,
- rtems_test_parallel_worker_setup worker_setup,
- const rtems_test_parallel_job *jobs,
- size_t job_count
+size_t T_get_scope(
+ const char * const * const *desc,
+ char *buf,
+ size_t n,
+ const size_t *second_indices
);
+size_t T_str_copy(char *, const char *, size_t);
+
+#ifdef __rtems__
+#define T_TEST_CASE_FIXTURE(name, fixture) \
+void T_case_body_##name(void); \
+T_case_context T_case_instance_##name = { \
+ #name, \
+ T_case_body_##name, \
+ fixture, \
+ NULL \
+}; \
+static T_case_context * const T_case_item_##name \
+__attribute((__section__(".rtemsroset._T.content.0." #name))) \
+__attribute((__used__)) = &T_case_instance_##name; \
+void T_case_body_##name(void)
+#else /* __rtems__ */
+#define T_TEST_CASE_FIXTURE(name, fixture) \
+void T_case_body_##name(void); \
+T_case_context T_case_instance_##name = { \
+ #name, \
+ T_case_body_##name, \
+ fixture, \
+ NULL \
+}; \
+__attribute((__constructor__)) static void \
+T_case_register_##name(void) \
+{ \
+ T_case_register(&T_case_instance_##name); \
+} \
+void T_case_body_##name(void)
+#endif /* __rtems__ */
+
+#define T_TEST_CASE(name) T_TEST_CASE_FIXTURE(name, NULL)
+
+void T_busy(uint_fast32_t);
+
+uint_fast32_t T_get_one_clock_tick_busy(void);
+
+typedef enum {
+ T_INTERRUPT_TEST_INITIAL,
+ T_INTERRUPT_TEST_ACTION,
+ T_INTERRUPT_TEST_BLOCKED,
+ T_INTERRUPT_TEST_CONTINUE,
+ T_INTERRUPT_TEST_DONE,
+ T_INTERRUPT_TEST_EARLY,
+ T_INTERRUPT_TEST_INTERRUPT,
+ T_INTERRUPT_TEST_LATE,
+ T_INTERRUPT_TEST_TIMEOUT
+} T_interrupt_test_state;
+
+typedef struct {
+ void (*prepare)(void *);
+ void (*action)(void *);
+ T_interrupt_test_state (*interrupt)(void *);
+ void (*blocked)(void *);
+ uint32_t max_iteration_count;
+} T_interrupt_test_config;
+
+T_interrupt_test_state T_interrupt_test_change_state(T_interrupt_test_state,
+ T_interrupt_test_state);
+
+T_interrupt_test_state T_interrupt_test_get_state(void);
+
+void T_interrupt_test_busy_wait_for_interrupt(void);
+
+T_interrupt_test_state T_interrupt_test(const T_interrupt_test_config *config,
+ void *arg);
+
+typedef struct {
+ uint32_t executing;
+ uint32_t heir;
+ uint32_t cpu;
+ T_time instant;
+} T_thread_switch_event;
+
+typedef struct {
+ size_t recorded;
+ size_t capacity;
+ uint64_t switches;
+ T_thread_switch_event events[T_ZERO_LENGTH_ARRAY];
+} T_thread_switch_log;
+
+typedef struct {
+ T_thread_switch_log log;
+ T_thread_switch_event events[T_ZERO_LENGTH_ARRAY_EXTENSION(2)];
+} T_thread_switch_log_2;
+
+typedef struct {
+ T_thread_switch_log log;
+ T_thread_switch_event events[T_ZERO_LENGTH_ARRAY_EXTENSION(4)];
+} T_thread_switch_log_4;
+
+typedef struct {
+ T_thread_switch_log log;
+ T_thread_switch_event events[T_ZERO_LENGTH_ARRAY_EXTENSION(10)];
+} T_thread_switch_log_10;
+
+T_thread_switch_log *T_thread_switch_record(T_thread_switch_log *);
+
+T_thread_switch_log *T_thread_switch_record_2(T_thread_switch_log_2 *);
+
+T_thread_switch_log *T_thread_switch_record_4(T_thread_switch_log_4 *);
+
+T_thread_switch_log *T_thread_switch_record_10(T_thread_switch_log_10 *);
+
+void T_report_hash_sha256(T_event, const char *);
+
+void T_check_heap(T_event, const char *);
+
+#ifdef __rtems__
+void T_check_task_context(T_event, const char *);
+
+void T_check_file_descriptors(T_event, const char *);
+
+void T_check_rtems_barriers(T_event, const char *);
+
+void T_check_rtems_extensions(T_event, const char *);
+
+void T_check_rtems_message_queues(T_event, const char *);
+
+void T_check_rtems_partitions(T_event, const char *);
+
+void T_check_rtems_periods(T_event, const char *);
+
+void T_check_rtems_regions(T_event, const char *);
+
+void T_check_rtems_semaphores(T_event, const char *);
+
+void T_check_rtems_tasks(T_event, const char *);
+
+void T_check_rtems_timers(T_event, const char *);
+
+void T_check_posix_keys(T_event, const char *);
+
+void T_check_posix_message_queues(T_event, const char *);
+
+void T_check_posix_semaphores(T_event, const char *);
+
+void T_check_posix_shms(T_event, const char *);
+
+void T_check_posix_threads(T_event, const char *);
+
+void T_check_posix_timers(T_event, const char *);
+#endif /* __rtems__ */
+
/**
- * @brief Performs a busy loop for the specified seconds and nanoseconds based
- * on the CPU usage of the executing thread.
+ * @defgroup RTEMSTestFrameworkDestructors Destructors
+ *
+ * @ingroup RTEMSTestFramework
*
- * This function continuously reads the CPU usage of the executing thread.
- * This operation may lead to a scheduler instance lock contention in SMP
- * configurations.
+ * @brief Support to run destructors at the end of a test case.
*
- * @param[in] seconds The busy seconds.
- * @param[in] nanoseconds The busy nanoseconds.
+ * @{
*/
-void rtems_test_busy_cpu_usage(time_t seconds, long nanoseconds);
+
+typedef struct T_destructor {
+ struct {
+ struct T_destructor *le_next;
+ struct T_destructor **le_prev;
+ } node;
+ void (*destroy)(struct T_destructor *);
+} T_destructor;
+
+void T_add_destructor(T_destructor *, void (*)(T_destructor *));
+
+void T_remove_destructor(T_destructor *);
+
+/** @} */
/**
- * @brief Performs a busy loop with the specified iteration count.
+ * @defgroup RTEMSTestFrameworkMeasureRuntime Runtime Measurements
*
- * This function is optimized to not perform memory accesses and should have a
- * small jitter.
+ * @ingroup RTEMSTestFramework
*
- * @param[in] count The iteration count.
+ * @brief Support to measure the runtime of code fragments.
+ *
+ * @{
*/
-void rtems_test_busy(uint_fast32_t count);
-/**
- * @brief Returns a count value for rtems_test_busy() which yields roughly a
- * duration of one clock tick.
- */
-uint_fast32_t rtems_test_get_one_tick_busy_count(void);
+typedef struct T_measure_runtime_context T_measure_runtime_context;
+
+typedef struct {
+ size_t sample_count;
+} T_measure_runtime_config;
+
+typedef struct {
+ const char *name;
+ int flags;
+ void (*setup)(void *);
+ void (*body)(void *);
+ bool (*teardown)(void *, T_ticks *, uint32_t, uint32_t, unsigned int);
+ void *arg;
+} T_measure_runtime_request;
+
+#define T_MEASURE_RUNTIME_ALLOW_CLOCK_ISR 0x1
+
+#define T_MEASURE_RUNTIME_REPORT_SAMPLES 0x2
+
+#define T_MEASURE_RUNTIME_DISABLE_VALID_CACHE 0x10
+
+#define T_MEASURE_RUNTIME_DISABLE_HOT_CACHE 0x20
+
+#define T_MEASURE_RUNTIME_DISABLE_DIRTY_CACHE 0x40
+
+#define T_MEASURE_RUNTIME_DISABLE_MINOR_LOAD 0x80
+
+#define T_MEASURE_RUNTIME_DISABLE_MAX_LOAD 0x100
+
+T_measure_runtime_context *T_measure_runtime_create(
+ const T_measure_runtime_config *);
+
+void T_measure_runtime(T_measure_runtime_context *,
+ const T_measure_runtime_request *);
/** @} */
@@ -326,4 +2571,4 @@ uint_fast32_t rtems_test_get_one_tick_busy_count(void);
}
#endif /* __cplusplus */
-#endif /* _RTEMS_TEST_H */
+#endif /* THE_T_TEST_FRAMEWORK_H */
diff --git a/cpukit/include/rtems/trace/rtems-trace-buffer-vars.h b/cpukit/include/rtems/trace/rtems-trace-buffer-vars.h
index 8f0ff08587..c6a13b9a2b 100644
--- a/cpukit/include/rtems/trace/rtems-trace-buffer-vars.h
+++ b/cpukit/include/rtems/trace/rtems-trace-buffer-vars.h
@@ -16,6 +16,9 @@
#if !defined (_RTEMS_TRACE_BUFFER_VARS_H_)
#define _RTEMS_TRACE_BUFFER_VARS_H_
+#include <stdbool.h>
+#include <stdint.h>
+
#ifdef __cplusplus
extern "C" {
#endif /* __cplusplus */
@@ -43,6 +46,28 @@ typedef struct
typedef __rtld_trace_sig_arg rtems_trace_sig_arg;
typedef __rtld_trace_sig rtems_trace_sig;
+/*
+ * Trace linker data.
+ */
+extern uint32_t __rtld_trace_names_size;
+extern const char *const __rtld_trace_names[];
+extern uint32_t __rtld_trace_enables_size;
+extern const uint32_t __rtld_trace_enables[];
+extern uint32_t __rtld_trace_triggers_size;
+extern const uint32_t __rtld_trace_triggers[];
+extern const __rtld_trace_sig __rtld_trace_signatures[];
+
+/*
+ * Trace buffer generator data.
+ */
+extern const bool __rtld_tbg_present;
+extern const uint32_t __rtld_tbg_mode;
+extern const uint32_t __rtld_tbg_buffer_size;
+extern uint32_t __rtld_tbg_buffer[];
+extern volatile uint32_t __rtld_tbg_buffer_in;
+extern volatile bool __rtld_tbg_finished;
+extern volatile bool __rtld_tbg_triggered;
+
/**
* Returns the number of trace functions.
*/
diff --git a/cpukit/include/t.h b/cpukit/include/t.h
deleted file mode 100644
index ecdc03f94c..0000000000
--- a/cpukit/include/t.h
+++ /dev/null
@@ -1,2379 +0,0 @@
-/*
- * SPDX-License-Identifier: BSD-2-Clause
- *
- * Copyright (C) 2018, 2019 embedded brains GmbH
- *
- * 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 THE_T_TEST_FRAMEWORK_H
-#define THE_T_TEST_FRAMEWORK_H
-
-#include <stdarg.h>
-#include <stdbool.h>
-#include <stddef.h>
-#include <stdint.h>
-#include <string.h>
-
-#ifdef __rtems__
-#include <rtems/score/cpu.h>
-#endif
-
-#ifdef __cplusplus
-extern "C" {
-#endif /* __cplusplus */
-
-/**
- * @defgroup RTEMSTestFramework RTEMS Test Framework
- *
- * @ingroup RTEMSAPI
- *
- * @brief The RTEMS Test Framework helps you to write tests.
- *
- * @{
- */
-
-typedef enum {
- T_QUIET,
- T_NORMAL,
- T_VERBOSE
-} T_verbosity;
-
-typedef struct T_fixture {
- void (*setup)(void *);
- void (*stop)(void *);
- void (*teardown)(void *);
- void *initial_context;
-} T_fixture;
-
-#define T_ARRAY_SIZE(array) (sizeof(array) / sizeof((array)[0]))
-
-/*
- * The __FILE__ includes the full file path from the command line. Enable the
- * build system to give a sorter file name via a command line define.
- */
-#ifndef T_FILE_NAME
-#define T_FILE_NAME __FILE__
-#endif
-
-/** @} */
-
-/**
- * @defgroup RTEMSTestFrameworkImpl RTEMS Test Framework Implementation
- *
- * @ingroup RTEMSTestFramework
- *
- * @brief Implementation details.
- *
- * @{
- */
-
-typedef struct T_case_context {
- const char *name;
- void (*body)(void);
- const T_fixture *fixture;
- const struct T_case_context *next;
-} T_case_context;
-
-void T_case_register(T_case_context *);
-
-#define T_CHECK_STOP 1U
-
-#define T_CHECK_QUIET 2U
-
-#define T_CHECK_STEP_FLAG 4U
-
-#define T_CHECK_STEP_TO_FLAGS(step) ((unsigned int)(step) << 8)
-
-#define T_CHECK_STEP_FROM_FLAGS(flags) ((flags) >> 8)
-
-#define T_CHECK_STEP(step) (T_CHECK_STEP_TO_FLAGS(step) | T_CHECK_STEP_FLAG)
-
-typedef struct {
- const char *file;
- int line;
- unsigned int flags;
-} T_check_context;
-
-typedef struct {
- T_check_context base;
- const char *msg;
-} T_check_context_msg;
-
-void T_check_true(bool, const T_check_context *, const char *, ...);
-
-#define T_flags_true(a, flags, ...) \
-{ \
- static const T_check_context T_check_instance = { \
- T_FILE_NAME, __LINE__, flags }; \
- T_check_true(a, &T_check_instance, __VA_ARGS__); \
-}
-
-#define T_flags_eq(a, e, flags, ...) \
- T_flags_true((a) == (e), flags, __VA_ARGS__)
-
-#define T_flags_ne(a, e, flags, ...) \
- T_flags_true((a) != (e), flags, __VA_ARGS__)
-
-void T_check_eq_ptr(const void *, const T_check_context_msg *, const void *);
-
-#define T_flags_eq_ptr(a, e, flags, sa, se) \
-{ \
- static const T_check_context_msg T_check_instance = { \
- { T_FILE_NAME, __LINE__, flags }, sa " == " se }; \
- T_check_eq_ptr(a, &T_check_instance, e); \
-}
-
-void T_check_ne_ptr(const void *, const T_check_context_msg *, const void *);
-
-#define T_flags_ne_ptr(a, e, flags, sa, se) \
-{ \
- static const T_check_context_msg T_check_instance = { \
- { T_FILE_NAME, __LINE__, flags }, sa " != " se }; \
- T_check_ne_ptr(a, &T_check_instance, e); \
-}
-
-void T_check_null(const void *, const T_check_context_msg *);
-
-#define T_flags_null(a, flags, sa) \
-{ \
- static const T_check_context_msg T_check_instance = { \
- { T_FILE_NAME, __LINE__, flags }, sa }; \
- T_check_null(a, &T_check_instance); \
-}
-
-void T_check_not_null(const void *, const T_check_context_msg *);
-
-#define T_flags_not_null(a, flags, sa) \
-{ \
- static const T_check_context_msg T_check_instance = { \
- { T_FILE_NAME, __LINE__, flags }, sa }; \
- T_check_not_null(a, &T_check_instance); \
-}
-
-void T_check_eq_mem(const void *, const T_check_context_msg *, const void *,
- size_t);
-
-#define T_flags_eq_mem(a, e, n, flags, sa, se, sn) \
-{ \
- static const T_check_context_msg T_check_instance = { \
- { T_FILE_NAME, __LINE__, flags }, \
- "memcmp(" sa ", " se ", " sn ") == 0" }; \
- T_check_eq_mem(a, &T_check_instance, e, n); \
-}
-
-void T_check_ne_mem(const void *, const T_check_context_msg *, const void *,
- size_t);
-
-#define T_flags_ne_mem(a, e, n, flags, sa, se, sn) \
-{ \
- static const T_check_context_msg T_check_instance = { \
- { T_FILE_NAME, __LINE__, flags }, \
- "memcmp(" sa ", " se ", " sn ") != 0" }; \
- T_check_ne_mem(a, &T_check_instance, e, n); \
-}
-
-void T_check_eq_str(const char *, const T_check_context *, const char *);
-
-#define T_flags_eq_str(a, e, flags) \
-{ \
- static const T_check_context T_check_instance = { \
- T_FILE_NAME, __LINE__, flags }; \
- T_check_eq_str(a, &T_check_instance, e); \
-}
-
-void T_check_ne_str(const char *, const T_check_context *, const char *);
-
-#define T_flags_ne_str(a, e, flags) \
-{ \
- static const T_check_context T_check_instance = { \
- T_FILE_NAME, __LINE__, flags }; \
- T_check_ne_str(a, &T_check_instance, e); \
-}
-
-void T_check_eq_nstr(const char *, const T_check_context *, const char *,
- size_t);
-
-#define T_flags_eq_nstr(a, e, n, flags) \
-{ \
- static const T_check_context T_check_instance = { \
- T_FILE_NAME, __LINE__, flags }; \
- T_check_eq_nstr(a, &T_check_instance, e, n); \
-}
-
-void T_check_ne_nstr(const char *, const T_check_context *, const char *,
- size_t);
-
-#define T_flags_ne_nstr(a, e, n, flags) \
-{ \
- static const T_check_context T_check_instance = { \
- T_FILE_NAME, __LINE__, flags }; \
- T_check_ne_nstr(a, &T_check_instance, e, n); \
-}
-
-void T_check_eq_char(char, const T_check_context *, char);
-
-#define T_flags_eq_char(a, e, flags) \
-{ \
- static const T_check_context T_check_instance = { \
- T_FILE_NAME, __LINE__, flags }; \
- T_check_eq_char(a, &T_check_instance, e); \
-}
-
-void T_check_ne_char(char, const T_check_context *, char);
-
-#define T_flags_ne_char(a, e, flags) \
-{ \
- static const T_check_context T_check_instance = { \
- T_FILE_NAME, __LINE__, flags }; \
- T_check_ne_char(a, &T_check_instance, e); \
-}
-
-void T_check_eq_int(int, const T_check_context *, int);
-
-#define T_flags_eq_int(a, e, flags) \
-{ \
- static const T_check_context T_check_instance = { \
- T_FILE_NAME, __LINE__, flags }; \
- T_check_eq_int(a, &T_check_instance, e); \
-}
-
-void T_check_ne_int(int, const T_check_context *, int);
-
-#define T_flags_ne_int(a, e, flags) \
-{ \
- static const T_check_context T_check_instance = { \
- T_FILE_NAME, __LINE__, flags }; \
- T_check_ne_int(a, &T_check_instance, e); \
-}
-
-void T_check_ge_int(int, const T_check_context *, int);
-
-#define T_flags_ge_int(a, e, flags) \
-{ \
- static const T_check_context T_check_instance = { \
- T_FILE_NAME, __LINE__, flags }; \
- T_check_ge_int(a, &T_check_instance, e); \
-}
-
-void T_check_gt_int(int, const T_check_context *, int);
-
-#define T_flags_gt_int(a, e, flags) \
-{ \
- static const T_check_context T_check_instance = { \
- T_FILE_NAME, __LINE__, flags }; \
- T_check_gt_int(a, &T_check_instance, e); \
-}
-
-void T_check_le_int(int, const T_check_context *, int);
-
-#define T_flags_le_int(a, e, flags) \
-{ \
- static const T_check_context T_check_instance = { \
- T_FILE_NAME, __LINE__, flags }; \
- T_check_le_int(a, &T_check_instance, e); \
-}
-
-void T_check_lt_int(int, const T_check_context *, int);
-
-#define T_flags_lt_int(a, e, flags) \
-{ \
- static const T_check_context T_check_instance = { \
- T_FILE_NAME, __LINE__, flags }; \
- T_check_lt_int(a, &T_check_instance, e); \
-}
-
-void T_check_eq_uint(unsigned int, const T_check_context *, unsigned int);
-
-#define T_flags_eq_uint(a, e, flags) \
-{ \
- static const T_check_context T_check_instance = { \
- T_FILE_NAME, __LINE__, flags }; \
- T_check_eq_uint(a, &T_check_instance, e); \
-}
-
-void T_check_ne_uint(unsigned int, const T_check_context *, unsigned int);
-
-#define T_flags_ne_uint(a, e, flags) \
-{ \
- static const T_check_context T_check_instance = { \
- T_FILE_NAME, __LINE__, flags }; \
- T_check_ne_uint(a, &T_check_instance, e); \
-}
-
-void T_check_ge_uint(unsigned int, const T_check_context *, unsigned int);
-
-#define T_flags_ge_uint(a, e, flags) \
-{ \
- static const T_check_context T_check_instance = { \
- T_FILE_NAME, __LINE__, flags }; \
- T_check_ge_uint(a, &T_check_instance, e); \
-}
-
-void T_check_gt_uint(unsigned int, const T_check_context *, unsigned int);
-
-#define T_flags_gt_uint(a, e, flags) \
-{ \
- static const T_check_context T_check_instance = { \
- T_FILE_NAME, __LINE__, flags }; \
- T_check_gt_uint(a, &T_check_instance, e); \
-}
-
-void T_check_le_uint(unsigned int, const T_check_context *, unsigned int);
-
-#define T_flags_le_uint(a, e, flags) \
-{ \
- static const T_check_context T_check_instance = { \
- T_FILE_NAME, __LINE__, flags }; \
- T_check_le_uint(a, &T_check_instance, e); \
-}
-
-void T_check_lt_uint(unsigned int, const T_check_context *, unsigned int);
-
-#define T_flags_lt_uint(a, e, flags) \
-{ \
- static const T_check_context T_check_instance = { \
- T_FILE_NAME, __LINE__, flags }; \
- T_check_lt_uint(a, &T_check_instance, e); \
-}
-
-void T_check_eq_long(long, const T_check_context *, long);
-
-#define T_flags_eq_long(a, e, flags) \
-{ \
- static const T_check_context T_check_instance = { \
- T_FILE_NAME, __LINE__, flags }; \
- T_check_eq_long(a, &T_check_instance, e); \
-}
-
-void T_check_ne_long(long, const T_check_context *, long);
-
-#define T_flags_ne_long(a, e, flags) \
-{ \
- static const T_check_context T_check_instance = { \
- T_FILE_NAME, __LINE__, flags }; \
- T_check_ne_long(a, &T_check_instance, e); \
-}
-
-void T_check_ge_long(long, const T_check_context *, long);
-
-#define T_flags_ge_long(a, e, flags) \
-{ \
- static const T_check_context T_check_instance = { \
- T_FILE_NAME, __LINE__, flags }; \
- T_check_ge_long(a, &T_check_instance, e); \
-}
-
-void T_check_gt_long(long, const T_check_context *, long);
-
-#define T_flags_gt_long(a, e, flags) \
-{ \
- static const T_check_context T_check_instance = { \
- T_FILE_NAME, __LINE__, flags }; \
- T_check_gt_long(a, &T_check_instance, e); \
-}
-
-void T_check_le_long(long, const T_check_context *, long);
-
-#define T_flags_le_long(a, e, flags) \
-{ \
- static const T_check_context T_check_instance = { \
- T_FILE_NAME, __LINE__, flags }; \
- T_check_le_long(a, &T_check_instance, e); \
-}
-
-void T_check_lt_long(long, const T_check_context *, long);
-
-#define T_flags_lt_long(a, e, flags) \
-{ \
- static const T_check_context T_check_instance = { \
- T_FILE_NAME, __LINE__, flags }; \
- T_check_lt_long(a, &T_check_instance, e); \
-}
-
-void T_check_eq_ulong(unsigned long, const T_check_context *, unsigned long);
-
-#define T_flags_eq_ulong(a, e, flags) \
-{ \
- static const T_check_context T_check_instance = { \
- T_FILE_NAME, __LINE__, flags }; \
- T_check_eq_ulong(a, &T_check_instance, e); \
-}
-
-void T_check_ne_ulong(unsigned long, const T_check_context *, unsigned long);
-
-#define T_flags_ne_ulong(a, e, flags) \
-{ \
- static const T_check_context T_check_instance = { \
- T_FILE_NAME, __LINE__, flags }; \
- T_check_ne_ulong(a, &T_check_instance, e); \
-}
-
-void T_check_ge_ulong(unsigned long, const T_check_context *, unsigned long);
-
-#define T_flags_ge_ulong(a, e, flags) \
-{ \
- static const T_check_context T_check_instance = { \
- T_FILE_NAME, __LINE__, flags }; \
- T_check_ge_ulong(a, &T_check_instance, e); \
-}
-
-void T_check_gt_ulong(unsigned long, const T_check_context *, unsigned long);
-
-#define T_flags_gt_ulong(a, e, flags) \
-{ \
- static const T_check_context T_check_instance = { \
- T_FILE_NAME, __LINE__, flags }; \
- T_check_gt_ulong(a, &T_check_instance, e); \
-}
-
-void T_check_le_ulong(unsigned long, const T_check_context *, unsigned long);
-
-#define T_flags_le_ulong(a, e, flags) \
-{ \
- static const T_check_context T_check_instance = { \
- T_FILE_NAME, __LINE__, flags }; \
- T_check_le_ulong(a, &T_check_instance, e); \
-}
-
-void T_check_lt_ulong(unsigned long, const T_check_context *, unsigned long);
-
-#define T_flags_lt_ulong(a, e, flags) \
-{ \
- static const T_check_context T_check_instance = { \
- T_FILE_NAME, __LINE__, flags }; \
- T_check_lt_ulong(a, &T_check_instance, e); \
-}
-
-void T_check_eq_ll(long long, const T_check_context *, long long);
-
-#define T_flags_eq_ll(a, e, flags) \
-{ \
- static const T_check_context T_check_instance = { \
- T_FILE_NAME, __LINE__, flags }; \
- T_check_eq_ll(a, &T_check_instance, e); \
-}
-
-void T_check_ne_ll(long long, const T_check_context *, long long);
-
-#define T_flags_ne_ll(a, e, flags) \
-{ \
- static const T_check_context T_check_instance = { \
- T_FILE_NAME, __LINE__, flags }; \
- T_check_ne_ll(a, &T_check_instance, e); \
-}
-
-void T_check_ge_ll(long long, const T_check_context *, long long);
-
-#define T_flags_ge_ll(a, e, flags) \
-{ \
- static const T_check_context T_check_instance = { \
- T_FILE_NAME, __LINE__, flags }; \
- T_check_ge_ll(a, &T_check_instance, e); \
-}
-
-void T_check_gt_ll(long long, const T_check_context *, long long);
-
-#define T_flags_gt_ll(a, e, flags) \
-{ \
- static const T_check_context T_check_instance = { \
- T_FILE_NAME, __LINE__, flags }; \
- T_check_gt_ll(a, &T_check_instance, e); \
-}
-
-void T_check_le_ll(long long, const T_check_context *, long long);
-
-#define T_flags_le_ll(a, e, flags) \
-{ \
- static const T_check_context T_check_instance = { \
- T_FILE_NAME, __LINE__, flags }; \
- T_check_le_ll(a, &T_check_instance, e); \
-}
-
-void T_check_lt_ll(long long, const T_check_context *, long long);
-
-#define T_flags_lt_ll(a, e, flags) \
-{ \
- static const T_check_context T_check_instance = { \
- T_FILE_NAME, __LINE__, flags }; \
- T_check_lt_ll(a, &T_check_instance, e); \
-}
-
-void T_check_eq_ull(unsigned long long, const T_check_context *,
- unsigned long long);
-
-#define T_flags_eq_ull(a, e, flags) \
-{ \
- static const T_check_context T_check_instance = { \
- T_FILE_NAME, __LINE__, flags }; \
- T_check_eq_ull(a, &T_check_instance, e); \
-}
-
-void T_check_ne_ull(unsigned long long, const T_check_context *,
- unsigned long long);
-
-#define T_flags_ne_ull(a, e, flags) \
-{ \
- static const T_check_context T_check_instance = { \
- T_FILE_NAME, __LINE__, flags }; \
- T_check_ne_ull(a, &T_check_instance, e); \
-}
-
-void T_check_ge_ull(unsigned long long, const T_check_context *,
- unsigned long long);
-
-#define T_flags_ge_ull(a, e, flags) \
-{ \
- static const T_check_context T_check_instance = { \
- T_FILE_NAME, __LINE__, flags }; \
- T_check_ge_ull(a, &T_check_instance, e); \
-}
-
-void T_check_gt_ull(unsigned long long, const T_check_context *,
- unsigned long long);
-
-#define T_flags_gt_ull(a, e, flags) \
-{ \
- static const T_check_context T_check_instance = { \
- T_FILE_NAME, __LINE__, flags }; \
- T_check_gt_ull(a, &T_check_instance, e); \
-}
-
-void T_check_le_ull(unsigned long long, const T_check_context *,
- unsigned long long);
-
-#define T_flags_le_ull(a, e, flags) \
-{ \
- static const T_check_context T_check_instance = { \
- T_FILE_NAME, __LINE__, flags }; \
- T_check_le_ull(a, &T_check_instance, e); \
-}
-
-void T_check_lt_ull(unsigned long long, const T_check_context *,
- unsigned long long);
-
-#define T_flags_lt_ull(a, e, flags) \
-{ \
- static const T_check_context T_check_instance = { \
- T_FILE_NAME, __LINE__, flags }; \
- T_check_lt_ull(a, &T_check_instance, e); \
-}
-
-void T_check_eno(int, const T_check_context *, int);
-
-#define T_flags_eno(a, e, flags) \
-{ \
- static const T_check_context T_check_instance = { \
- T_FILE_NAME, __LINE__, flags }; \
- T_check_eno(a, &T_check_instance, e); \
-}
-
-void T_check_eno_success(int, const T_check_context *);
-
-#define T_flags_eno_success(a, flags) \
-{ \
- static const T_check_context T_check_instance = { \
- T_FILE_NAME, __LINE__, flags }; \
- T_check_eno_success(a, &T_check_instance); \
-}
-
-void T_check_psx_error(int, const T_check_context *, int);
-
-#define T_flags_psx_error(a, eno, flags) \
-{ \
- static const T_check_context T_check_instance = { \
- T_FILE_NAME, __LINE__, flags }; \
- T_check_psx_error(a, &T_check_instance, eno); \
-}
-
-void T_check_psx_success(int, const T_check_context *);
-
-#define T_flags_psx_success(a, flags) \
-{ \
- static const T_check_context T_check_instance = { \
- T_FILE_NAME, __LINE__, flags }; \
- T_check_psx_success(a, &T_check_instance); \
-}
-
-/** @} */
-
-int T_printf(char const *, ...);
-
-int T_vprintf(char const *, va_list);
-
-int T_snprintf(char *, size_t, const char *, ...);
-
-void T_log(T_verbosity, char const *, ...);
-
-const char *T_case_name(void);
-
-T_verbosity T_set_verbosity(T_verbosity);
-
-/**
- * @defgroup RTEMSTestFrameworkChecksBool Boolean Checks
- *
- * @ingroup RTEMSTestFramework
- *
- * @brief Checks for boolean expressions.
- *
- * @{
- */
-
-#define T_true(a, ...) T_flags_true(a, 0, __VA_ARGS__)
-#define T_assert_true(a, ...) T_flags_true(a, T_CHECK_STOP, __VA_ARGS__)
-#define T_quiet_true(a, ...) T_flags_true(a, T_CHECK_QUIET, __VA_ARGS__)
-#define T_step_true(s, a, ...) T_flags_true(a, T_CHECK_STEP(s), __VA_ARGS__)
-#define T_step_assert_true(s, a, ...) \
- T_flags_true(a, T_CHECK_STEP(s) | T_CHECK_STOP, __VA_ARGS__)
-
-#define T_false(a, ...) T_flags_true(!(a), 0, __VA_ARGS__)
-#define T_assert_false(a, ...) T_flags_true(!(a), T_CHECK_STOP, __VA_ARGS__)
-#define T_quiet_false(a, ...) T_flags_true(!(a), T_CHECK_QUIET, __VA_ARGS__)
-#define T_step_false(s, a, ...) T_flags_true(!(a), T_CHECK_STEP(s), __VA_ARGS__)
-#define T_step_assert_false(s, a, ...) \
- T_flags_true(!(a), T_CHECK_STEP(s) | T_CHECK_STOP, __VA_ARGS__)
-
-/** @} */
-
-/**
- * @defgroup RTEMSTestFrameworkChecksGeneric Generic Checks
- *
- * @ingroup RTEMSTestFramework
- *
- * @brief Checks for data types with an equality or inequality operator.
- *
- * @{
- */
-
-#define T_eq(a, e, ...) T_flags_eq(a, e, 0, __VA_ARGS__)
-#define T_assert_eq(a, e, ...) T_flags_eq(a, e, T_CHECK_STOP, __VA_ARGS__)
-#define T_quiet_eq(a, e, ...) T_flags_eq(a, e, T_CHECK_QUIET, __VA_ARGS__)
-#define T_step_eq(s, a, e, ...) T_flags_eq(a, e, T_CHECK_STEP(s), __VA_ARGS__)
-#define T_step_assert_eq(s, a, e, ...) \
- T_flags_eq(a, e, T_CHECK_STEP(s) | T_CHECK_STOP, __VA_ARGS__)
-
-#define T_ne(a, e, ...) T_flags_ne(a, e, 0, __VA_ARGS__)
-#define T_assert_ne(a, e, ...) T_flags_ne(a, e, T_CHECK_STOP, __VA_ARGS__)
-#define T_quiet_ne(a, e, ...) T_flags_ne(a, e, T_CHECK_QUIET, __VA_ARGS__)
-#define T_step_ne(s, a, e, ...) T_flags_ne(a, e, T_CHECK_STEP(s), __VA_ARGS__)
-#define T_step_assert_ne(s, a, e, ...) \
- T_flags_ne(a, e, T_CHECK_STEP(s) | T_CHECK_STOP, __VA_ARGS__)
-
-/** @} */
-
-/**
- * @defgroup RTEMSTestFrameworkChecksPointer Pointer Checks
- *
- * @ingroup RTEMSTestFramework
- *
- * @brief Checks for pointers.
- *
- * @{
- */
-
-#define T_eq_ptr(a, e) T_flags_eq_ptr(a, e, 0, #a, #e)
-#define T_assert_eq_ptr(a, e) T_flags_eq_ptr(a, e, T_CHECK_STOP, #a, #e)
-#define T_quiet_eq_ptr(a, e) T_flags_eq_ptr(a, e, T_CHECK_QUIET, #a, #e)
-#define T_step_eq_ptr(s, a, e) T_flags_eq_ptr(a, e, T_CHECK_STEP(s), #a, #e)
-#define T_step_assert_eq_ptr(s, a, e) \
- T_flags_eq_ptr(a, e, T_CHECK_STEP(s) | T_CHECK_STOP, #a, #e)
-
-#define T_ne_ptr(a, e) T_flags_ne_ptr(a, e, 0, #a, #e)
-#define T_assert_ne_ptr(a, e) T_flags_ne_ptr(a, e, T_CHECK_STOP, #a, #e)
-#define T_quiet_ne_ptr(a, e) T_flags_ne_ptr(a, e, T_CHECK_QUIET, #a, #e)
-#define T_step_ne_ptr(s, a, e) T_flags_ne_ptr(a, e, T_CHECK_STEP(s), #a, #e)
-#define T_step_assert_ne_ptr(s, a, e) \
- T_flags_ne_ptr(a, e, T_CHECK_STEP(s) | T_CHECK_STOP, #a, #e)
-
-#define T_null(a) T_flags_null(a, 0, #a)
-#define T_assert_null(a) T_flags_null(a, T_CHECK_STOP, #a)
-#define T_quiet_null(a) T_flags_null(a, T_CHECK_QUIET, #a)
-#define T_step_null(s, a) T_flags_null(a, T_CHECK_STEP(s), #a)
-#define T_step_assert_null(s, a) \
- T_flags_null(a, T_CHECK_STEP(s) | T_CHECK_STOP, #a)
-
-#define T_not_null(a) T_flags_not_null(a, 0, #a)
-#define T_assert_not_null(a) T_flags_not_null(a, T_CHECK_STOP, #a)
-#define T_quiet_not_null(a) T_flags_not_null(a, T_CHECK_QUIET, #a)
-#define T_step_not_null(s, a) T_flags_not_null(a, T_CHECK_STEP(s), #a)
-#define T_step_assert_not_null(s, a) \
- T_flags_not_null(a, T_CHECK_STEP(s) | T_CHECK_STOP, #a)
-
-/** @} */
-
-/**
- * @defgroup RTEMSTestFrameworkChecksMemStr Memory Area Checks
- *
- * @ingroup RTEMSTestFramework
- *
- * @brief Checks for memory areas.
- *
- * @{
- */
-
-#define T_eq_mem(a, e, n) T_flags_eq_mem(a, e, n, 0, #a, #e, #n)
-#define T_assert_eq_mem(a, e, n) \
- T_flags_eq_mem(a, e, n, T_CHECK_STOP, #a, #e, #n)
-#define T_quiet_eq_mem(a, e, n) \
- T_flags_eq_mem(a, e, n, T_CHECK_QUIET, #a, #e, #n)
-#define T_step_eq_mem(s, a, e, n) \
- T_flags_eq_mem(a, e, n, T_CHECK_STEP(s), #a, #e, #n)
-#define T_step_assert_eq_mem(s, a, e, n) \
- T_flags_eq_mem(a, e, n, T_CHECK_STEP(s) | T_CHECK_STOP, #a, #e, #n)
-
-#define T_ne_mem(a, e, n) T_flags_ne_mem(a, e, n, 0, #a, #e, #n)
-#define T_assert_ne_mem(a, e, n) \
- T_flags_ne_mem(a, e, n, T_CHECK_STOP, #a, #e, #n)
-#define T_quiet_ne_mem(a, e, n) \
- T_flags_ne_mem(a, e, n, T_CHECK_QUIET, #a, #e, #n)
-#define T_step_ne_mem(s, a, e, n) \
- T_flags_ne_mem(a, e, n, T_CHECK_STEP(s), #a, #e, #n)
-#define T_step_assert_ne_mem(s, a, e, n) \
- T_flags_ne_mem(a, e, n, T_CHECK_STEP(s) | T_CHECK_STOP, #a, #e, #n)
-
-/** @} */
-
-/**
- * @defgroup RTEMSTestFrameworkChecksStr String Checks
- *
- * @ingroup RTEMSTestFramework
- *
- * @brief Checks for strings.
- *
- * @{
- */
-
-
-#define T_eq_str(a, e) T_flags_eq_str(a, e, 0)
-#define T_assert_eq_str(a, e) T_flags_eq_str(a, e, T_CHECK_STOP)
-#define T_quiet_eq_str(a, e) T_flags_eq_str(a, e, T_CHECK_QUIET)
-#define T_step_eq_str(s, a, e) T_flags_eq_str(a, e, T_CHECK_STEP(s))
-#define T_step_assert_eq_str(s, a, e) \
- T_flags_eq_str(a, e, T_CHECK_STEP(s) | T_CHECK_STOP)
-
-#define T_ne_str(a, e) T_flags_ne_str(a, e, 0)
-#define T_assert_ne_str(a, e) T_flags_ne_str(a, e, T_CHECK_STOP)
-#define T_quiet_ne_str(a, e) T_flags_ne_str(a, e, T_CHECK_QUIET)
-#define T_step_ne_str(s, a, e) T_flags_ne_str(a, e, T_CHECK_STEP(s))
-#define T_step_assert_ne_str(s, a, e) \
- T_flags_ne_str(a, e, T_CHECK_STEP(s) | T_CHECK_STOP)
-
-#define T_eq_nstr(a, e, n) T_flags_eq_nstr(a, e, n, 0)
-#define T_assert_eq_nstr(a, e, n) T_flags_eq_nstr(a, e, n, T_CHECK_STOP)
-#define T_quiet_eq_nstr(a, e, n) T_flags_eq_nstr(a, e, n, T_CHECK_QUIET)
-#define T_step_eq_nstr(s, a, e, n) T_flags_eq_nstr(a, e, n, T_CHECK_STEP(s))
-#define T_step_assert_eq_nstr(s, a, e, n) \
- T_flags_eq_nstr(a, e, n, T_CHECK_STEP(s) | T_CHECK_STOP)
-
-#define T_ne_nstr(a, e, n) T_flags_ne_nstr(a, e, n, 0)
-#define T_assert_ne_nstr(a, e, n) T_flags_ne_nstr(a, e, n, T_CHECK_STOP)
-#define T_quiet_ne_nstr(a, e, n) T_flags_ne_nstr(a, e, n, T_CHECK_QUIET)
-#define T_step_ne_nstr(s, a, e, n) T_flags_ne_nstr(a, e, n, T_CHECK_STEP(s))
-#define T_step_assert_ne_nstr(s, a, e, n) \
- T_flags_ne_nstr(a, e, n, T_CHECK_STEP(s) | T_CHECK_STOP)
-
-/** @} */
-
-/**
- * @defgroup RTEMSTestFrameworkChecksChar Character Checks
- *
- * @ingroup RTEMSTestFramework
- *
- * @brief Checks for characters (char).
- *
- * @{
- */
-
-#define T_eq_char(a, e) T_flags_eq_char(a, e, 0)
-#define T_assert_eq_char(a, e) T_flags_eq_char(a, e, T_CHECK_STOP)
-#define T_quiet_eq_char(a, e) T_flags_eq_char(a, e, T_CHECK_QUIET)
-#define T_step_eq_char(s, a, e) T_flags_eq_char(a, e, T_CHECK_STEP(s))
-#define T_step_assert_eq_char(s, a, e) \
- T_flags_eq_char(a, e, T_CHECK_STEP(s) | T_CHECK_STOP)
-
-#define T_ne_char(a, e) T_flags_ne_char(a, e, 0)
-#define T_assert_ne_char(a, e) T_flags_ne_char(a, e, T_CHECK_STOP)
-#define T_quiet_ne_char(a, e) T_flags_ne_char(a, e, T_CHECK_QUIET)
-#define T_step_ne_char(s, a, e) T_flags_ne_char(a, e, T_CHECK_STEP(s))
-#define T_step_assert_ne_char(s, a, e) \
- T_flags_ne_char(a, e, T_CHECK_STEP(s) | T_CHECK_STOP)
-
-/** @} */
-
-/**
- * @defgroup RTEMSTestFrameworkChecksSChar Signed Character Checks
- *
- * @ingroup RTEMSTestFramework
- *
- * @brief Checks for signed characters (signed char).
- *
- * @{
- */
-
-#define T_eq_schar(a, e) T_flags_eq_int(a, e, 0)
-#define T_assert_eq_schar(a, e) T_flags_eq_int(a, e, T_CHECK_STOP)
-#define T_quiet_eq_schar(a, e) T_flags_eq_int(a, e, T_CHECK_QUIET)
-#define T_step_eq_schar(s, a, e) T_flags_eq_int(a, e, T_CHECK_STEP(s))
-#define T_step_assert_eq_schar(s, a, e) \
- T_flags_eq_int(a, e, T_CHECK_STEP(s) | T_CHECK_STOP)
-
-#define T_ne_schar(a, e) T_flags_ne_int(a, e, 0)
-#define T_assert_ne_schar(a, e) T_flags_ne_int(a, e, T_CHECK_STOP)
-#define T_quiet_ne_schar(a, e) T_flags_ne_int(a, e, T_CHECK_QUIET)
-#define T_step_ne_schar(s, a, e) T_flags_ne_int(a, e, T_CHECK_STEP(s))
-#define T_step_assert_ne_schar(s, a, e) \
- T_flags_ne_int(a, e, T_CHECK_STEP(s) | T_CHECK_STOP)
-
-#define T_ge_schar(a, e) T_flags_ge_int(a, e, 0)
-#define T_assert_ge_schar(a, e) T_flags_ge_int(a, e, T_CHECK_STOP)
-#define T_quiet_ge_schar(a, e) T_flags_ge_int(a, e, T_CHECK_QUIET)
-#define T_step_ge_schar(s, a, e) T_flags_ge_int(a, e, T_CHECK_STEP(s))
-#define T_step_assert_ge_schar(s, a, e) \
- T_flags_ge_int(a, e, T_CHECK_STEP(s) | T_CHECK_STOP)
-
-#define T_gt_schar(a, e) T_flags_gt_int(a, e, 0)
-#define T_assert_gt_schar(a, e) T_flags_gt_int(a, e, T_CHECK_STOP)
-#define T_quiet_gt_schar(a, e) T_flags_gt_int(a, e, T_CHECK_QUIET)
-#define T_step_gt_schar(s, a, e) T_flags_gt_int(a, e, T_CHECK_STEP(s))
-#define T_step_assert_gt_schar(s, a, e) \
- T_flags_gt_int(a, e, T_CHECK_STEP(s) | T_CHECK_STOP)
-
-#define T_le_schar(a, e) T_flags_le_int(a, e, 0)
-#define T_assert_le_schar(a, e) T_flags_le_int(a, e, T_CHECK_STOP)
-#define T_quiet_le_schar(a, e) T_flags_le_int(a, e, T_CHECK_QUIET)
-#define T_step_le_schar(s, a, e) T_flags_le_int(a, e, T_CHECK_STEP(s))
-#define T_step_assert_le_schar(s, a, e) \
- T_flags_le_int(a, e, T_CHECK_STEP(s) | T_CHECK_STOP)
-
-#define T_lt_schar(a, e) T_flags_lt_int(a, e, 0)
-#define T_assert_lt_schar(a, e) T_flags_lt_int(a, e, T_CHECK_STOP)
-#define T_quiet_lt_schar(a, e) T_flags_lt_int(a, e, T_CHECK_QUIET)
-#define T_step_lt_schar(s, a, e) T_flags_lt_int(a, e, T_CHECK_STEP(s))
-#define T_step_assert_lt_schar(s, a, e) \
- T_flags_lt_int(a, e, T_CHECK_STEP(s) | T_CHECK_STOP)
-
-/** @} */
-
-/**
- * @defgroup RTEMSTestFrameworkChecksUChar Unsigned Character Checks
- *
- * @ingroup RTEMSTestFramework
- *
- * @brief Checks for unsigned characters (unsigned char).
- *
- * @{
- */
-
-#define T_eq_uchar(a, e) T_flags_eq_uint(a, e, 0)
-#define T_assert_eq_uchar(a, e) T_flags_eq_uint(a, e, T_CHECK_STOP)
-#define T_quiet_eq_uchar(a, e) T_flags_eq_uint(a, e, T_CHECK_QUIET)
-#define T_step_eq_uchar(s, a, e) T_flags_eq_uint(a, e, T_CHECK_STEP(s))
-#define T_step_assert_eq_uchar(s, a, e) \
- T_flags_eq_uint(a, e, T_CHECK_STEP(s) | T_CHECK_STOP)
-
-#define T_ne_uchar(a, e) T_flags_ne_uint(a, e, 0)
-#define T_assert_ne_uchar(a, e) T_flags_ne_uint(a, e, T_CHECK_STOP)
-#define T_quiet_ne_uchar(a, e) T_flags_ne_uint(a, e, T_CHECK_QUIET)
-#define T_step_ne_uchar(s, a, e) T_flags_ne_uint(a, e, T_CHECK_STEP(s))
-#define T_step_assert_ne_uchar(s, a, e) \
- T_flags_ne_uint(a, e, T_CHECK_STEP(s) | T_CHECK_STOP)
-
-#define T_ge_uchar(a, e) T_flags_ge_uint(a, e, 0)
-#define T_assert_ge_uchar(a, e) T_flags_ge_uint(a, e, T_CHECK_STOP)
-#define T_quiet_ge_uchar(a, e) T_flags_ge_uint(a, e, T_CHECK_QUIET)
-#define T_step_ge_uchar(s, a, e) T_flags_ge_uint(a, e, T_CHECK_STEP(s))
-#define T_step_assert_ge_uchar(s, a, e) \
- T_flags_ge_uint(a, e, T_CHECK_STEP(s) | T_CHECK_STOP)
-
-#define T_gt_uchar(a, e) T_flags_gt_uint(a, e, 0)
-#define T_assert_gt_uchar(a, e) T_flags_gt_uint(a, e, T_CHECK_STOP)
-#define T_quiet_gt_uchar(a, e) T_flags_gt_uint(a, e, T_CHECK_QUIET)
-#define T_step_gt_uchar(s, a, e) T_flags_gt_uint(a, e, T_CHECK_STEP(s))
-#define T_step_assert_gt_uchar(s, a, e) \
- T_flags_gt_uint(a, e, T_CHECK_STEP(s) | T_CHECK_STOP)
-
-#define T_le_uchar(a, e) T_flags_le_uint(a, e, 0)
-#define T_assert_le_uchar(a, e) T_flags_le_uint(a, e, T_CHECK_STOP)
-#define T_quiet_le_uchar(a, e) T_flags_le_uint(a, e, T_CHECK_QUIET)
-#define T_step_le_uchar(s, a, e) T_flags_le_uint(a, e, T_CHECK_STEP(s))
-#define T_step_assert_le_uchar(s, a, e) \
- T_flags_le_uint(a, e, T_CHECK_STEP(s) | T_CHECK_STOP)
-
-#define T_lt_uchar(a, e) T_flags_lt_uint(a, e, 0)
-#define T_assert_lt_uchar(a, e) T_flags_lt_uint(a, e, T_CHECK_STOP)
-#define T_quiet_lt_uchar(a, e) T_flags_lt_uint(a, e, T_CHECK_QUIET)
-#define T_step_lt_uchar(s, a, e) T_flags_lt_uint(a, e, T_CHECK_STEP(s))
-#define T_step_assert_lt_uchar(s, a, e) \
- T_flags_lt_uint(a, e, T_CHECK_STEP(s) | T_CHECK_STOP)
-
-/** @} */
-
-/**
- * @defgroup RTEMSTestFrameworkChecksShort Signed Short Integer Checks
- *
- * @ingroup RTEMSTestFramework
- *
- * @brief Checks for signed short integers (short).
- *
- * @{
- */
-
-#define T_eq_short(a, e) T_flags_eq_int(a, e, 0)
-#define T_assert_eq_short(a, e) T_flags_eq_int(a, e, T_CHECK_STOP)
-#define T_quiet_eq_short(a, e) T_flags_eq_int(a, e, T_CHECK_QUIET)
-#define T_step_eq_short(s, a, e) T_flags_eq_int(a, e, T_CHECK_STEP(s))
-#define T_step_assert_eq_short(s, a, e) \
- T_flags_eq_int(a, e, T_CHECK_STEP(s) | T_CHECK_STOP)
-
-#define T_ne_short(a, e) T_flags_ne_int(a, e, 0)
-#define T_assert_ne_short(a, e) T_flags_ne_int(a, e, T_CHECK_STOP)
-#define T_quiet_ne_short(a, e) T_flags_ne_int(a, e, T_CHECK_QUIET)
-#define T_step_ne_short(s, a, e) T_flags_ne_int(a, e, T_CHECK_STEP(s))
-#define T_step_assert_ne_short(s, a, e) \
- T_flags_ne_int(a, e, T_CHECK_STEP(s) | T_CHECK_STOP)
-
-#define T_ge_short(a, e) T_flags_ge_int(a, e, 0)
-#define T_assert_ge_short(a, e) T_flags_ge_int(a, e, T_CHECK_STOP)
-#define T_quiet_ge_short(a, e) T_flags_ge_int(a, e, T_CHECK_QUIET)
-#define T_step_ge_short(s, a, e) T_flags_ge_int(a, e, T_CHECK_STEP(s))
-#define T_step_assert_ge_short(s, a, e) \
- T_flags_ge_int(a, e, T_CHECK_STEP(s) | T_CHECK_STOP)
-
-#define T_gt_short(a, e) T_flags_gt_int(a, e, 0)
-#define T_assert_gt_short(a, e) T_flags_gt_int(a, e, T_CHECK_STOP)
-#define T_quiet_gt_short(a, e) T_flags_gt_int(a, e, T_CHECK_QUIET)
-#define T_step_gt_short(s, a, e) T_flags_gt_int(a, e, T_CHECK_STEP(s))
-#define T_step_assert_gt_short(s, a, e) \
- T_flags_gt_int(a, e, T_CHECK_STEP(s) | T_CHECK_STOP)
-
-#define T_le_short(a, e) T_flags_le_int(a, e, 0)
-#define T_assert_le_short(a, e) T_flags_le_int(a, e, T_CHECK_STOP)
-#define T_quiet_le_short(a, e) T_flags_le_int(a, e, T_CHECK_QUIET)
-#define T_step_le_short(s, a, e) T_flags_le_int(a, e, T_CHECK_STEP(s))
-#define T_step_assert_le_short(s, a, e) \
- T_flags_le_int(a, e, T_CHECK_STEP(s) | T_CHECK_STOP)
-
-#define T_lt_short(a, e) T_flags_lt_int(a, e, 0)
-#define T_assert_lt_short(a, e) T_flags_lt_int(a, e, T_CHECK_STOP)
-#define T_quiet_lt_short(a, e) T_flags_lt_int(a, e, T_CHECK_QUIET)
-#define T_step_lt_short(s, a, e) T_flags_lt_int(a, e, T_CHECK_STEP(s))
-#define T_step_assert_lt_short(s, a, e) \
- T_flags_lt_int(a, e, T_CHECK_STEP(s) | T_CHECK_STOP)
-
-/** @} */
-
-/**
- * @defgroup RTEMSTestFrameworkChecksUShort Unsigned Short Integer Checks
- *
- * @ingroup RTEMSTestFramework
- *
- * @brief Checks for unsigned short integers (unsigned short).
- *
- * @{
- */
-
-#define T_eq_ushort(a, e) T_flags_eq_uint(a, e, 0)
-#define T_assert_eq_ushort(a, e) T_flags_eq_uint(a, e, T_CHECK_STOP)
-#define T_quiet_eq_ushort(a, e) T_flags_eq_uint(a, e, T_CHECK_QUIET)
-#define T_step_eq_ushort(s, a, e) T_flags_eq_uint(a, e, T_CHECK_STEP(s))
-#define T_step_assert_eq_ushort(s, a, e) \
- T_flags_eq_uint(a, e, T_CHECK_STEP(s) | T_CHECK_STOP)
-
-#define T_ne_ushort(a, e) T_flags_ne_uint(a, e, 0)
-#define T_assert_ne_ushort(a, e) T_flags_ne_uint(a, e, T_CHECK_STOP)
-#define T_quiet_ne_ushort(a, e) T_flags_ne_uint(a, e, T_CHECK_QUIET)
-#define T_step_ne_ushort(s, a, e) T_flags_ne_uint(a, e, T_CHECK_STEP(s))
-#define T_step_assert_ne_ushort(s, a, e) \
- T_flags_ne_uint(a, e, T_CHECK_STEP(s) | T_CHECK_STOP)
-
-#define T_ge_ushort(a, e) T_flags_ge_uint(a, e, 0)
-#define T_assert_ge_ushort(a, e) T_flags_ge_uint(a, e, T_CHECK_STOP)
-#define T_quiet_ge_ushort(a, e) T_flags_ge_uint(a, e, T_CHECK_QUIET)
-#define T_step_ge_ushort(s, a, e) T_flags_ge_uint(a, e, T_CHECK_STEP(s))
-#define T_step_assert_ge_ushort(s, a, e) \
- T_flags_ge_uint(a, e, T_CHECK_STEP(s) | T_CHECK_STOP)
-
-#define T_gt_ushort(a, e) T_flags_gt_uint(a, e, 0)
-#define T_assert_gt_ushort(a, e) T_flags_gt_uint(a, e, T_CHECK_STOP)
-#define T_quiet_gt_ushort(a, e) T_flags_gt_uint(a, e, T_CHECK_QUIET)
-#define T_step_gt_ushort(s, a, e) T_flags_gt_uint(a, e, T_CHECK_STEP(s))
-#define T_step_assert_gt_ushort(s, a, e) \
- T_flags_gt_uint(a, e, T_CHECK_STEP(s) | T_CHECK_STOP)
-
-#define T_le_ushort(a, e) T_flags_le_uint(a, e, 0)
-#define T_assert_le_ushort(a, e) T_flags_le_uint(a, e, T_CHECK_STOP)
-#define T_quiet_le_ushort(a, e) T_flags_le_uint(a, e, T_CHECK_QUIET)
-#define T_step_le_ushort(s, a, e) T_flags_le_uint(a, e, T_CHECK_STEP(s))
-#define T_step_assert_le_ushort(s, a, e) \
- T_flags_le_uint(a, e, T_CHECK_STEP(s) | T_CHECK_STOP)
-
-#define T_lt_ushort(a, e) T_flags_lt_uint(a, e, 0)
-#define T_assert_lt_ushort(a, e) T_flags_lt_uint(a, e, T_CHECK_STOP)
-#define T_quiet_lt_ushort(a, e) T_flags_lt_uint(a, e, T_CHECK_QUIET)
-#define T_step_lt_ushort(s, a, e) T_flags_lt_uint(a, e, T_CHECK_STEP(s))
-#define T_step_assert_lt_ushort(s, a, e) \
- T_flags_lt_uint(a, e, T_CHECK_STEP(s) | T_CHECK_STOP)
-
-/** @} */
-
-/**
- * @defgroup RTEMSTestFrameworkChecksInt Signed Integer Checks
- *
- * @ingroup RTEMSTestFramework
- *
- * @brief Checks for signed integers (int).
- *
- * @{
- */
-
-#define T_eq_int(a, e) T_flags_eq_int(a, e, 0)
-#define T_assert_eq_int(a, e) T_flags_eq_int(a, e, T_CHECK_STOP)
-#define T_quiet_eq_int(a, e) T_flags_eq_int(a, e, T_CHECK_QUIET)
-#define T_step_eq_int(s, a, e) T_flags_eq_int(a, e, T_CHECK_STEP(s))
-#define T_step_assert_eq_int(s, a, e) \
- T_flags_eq_int(a, e, T_CHECK_STEP(s) | T_CHECK_STOP)
-
-#define T_ne_int(a, e) T_flags_ne_int(a, e, 0)
-#define T_assert_ne_int(a, e) T_flags_ne_int(a, e, T_CHECK_STOP)
-#define T_quiet_ne_int(a, e) T_flags_ne_int(a, e, T_CHECK_QUIET)
-#define T_step_ne_int(s, a, e) T_flags_ne_int(a, e, T_CHECK_STEP(s))
-#define T_step_assert_ne_int(s, a, e) \
- T_flags_ne_int(a, e, T_CHECK_STEP(s) | T_CHECK_STOP)
-
-#define T_ge_int(a, e) T_flags_ge_int(a, e, 0)
-#define T_assert_ge_int(a, e) T_flags_ge_int(a, e, T_CHECK_STOP)
-#define T_quiet_ge_int(a, e) T_flags_ge_int(a, e, T_CHECK_QUIET)
-#define T_step_ge_int(s, a, e) T_flags_ge_int(a, e, T_CHECK_STEP(s))
-#define T_step_assert_ge_int(s, a, e) \
- T_flags_ge_int(a, e, T_CHECK_STEP(s) | T_CHECK_STOP)
-
-#define T_gt_int(a, e) T_flags_gt_int(a, e, 0)
-#define T_assert_gt_int(a, e) T_flags_gt_int(a, e, T_CHECK_STOP)
-#define T_quiet_gt_int(a, e) T_flags_gt_int(a, e, T_CHECK_QUIET)
-#define T_step_gt_int(s, a, e) T_flags_gt_int(a, e, T_CHECK_STEP(s))
-#define T_step_assert_gt_int(s, a, e) \
- T_flags_gt_int(a, e, T_CHECK_STEP(s) | T_CHECK_STOP)
-
-#define T_le_int(a, e) T_flags_le_int(a, e, 0)
-#define T_assert_le_int(a, e) T_flags_le_int(a, e, T_CHECK_STOP)
-#define T_quiet_le_int(a, e) T_flags_le_int(a, e, T_CHECK_QUIET)
-#define T_step_le_int(s, a, e) T_flags_le_int(a, e, T_CHECK_STEP(s))
-#define T_step_assert_le_int(s, a, e) \
- T_flags_le_int(a, e, T_CHECK_STEP(s) | T_CHECK_STOP)
-
-#define T_lt_int(a, e) T_flags_lt_int(a, e, 0)
-#define T_assert_lt_int(a, e) T_flags_lt_int(a, e, T_CHECK_STOP)
-#define T_quiet_lt_int(a, e) T_flags_lt_int(a, e, T_CHECK_QUIET)
-#define T_step_lt_int(s, a, e) T_flags_lt_int(a, e, T_CHECK_STEP(s))
-#define T_step_assert_lt_int(s, a, e) \
- T_flags_lt_int(a, e, T_CHECK_STEP(s) | T_CHECK_STOP)
-
-/** @} */
-
-/**
- * @defgroup RTEMSTestFrameworkChecksUInt Unsigned Integer Checks
- *
- * @ingroup RTEMSTestFramework
- *
- * @brief Checks for unsigned integers (unsigned int).
- *
- * @{
- */
-
-#define T_eq_uint(a, e) T_flags_eq_uint(a, e, 0)
-#define T_assert_eq_uint(a, e) T_flags_eq_uint(a, e, T_CHECK_STOP)
-#define T_quiet_eq_uint(a, e) T_flags_eq_uint(a, e, T_CHECK_QUIET)
-#define T_step_eq_uint(s, a, e) T_flags_eq_uint(a, e, T_CHECK_STEP(s))
-#define T_step_assert_eq_uint(s, a, e) \
- T_flags_eq_uint(a, e, T_CHECK_STEP(s) | T_CHECK_STOP)
-
-#define T_ne_uint(a, e) T_flags_ne_uint(a, e, 0)
-#define T_assert_ne_uint(a, e) T_flags_ne_uint(a, e, T_CHECK_STOP)
-#define T_quiet_ne_uint(a, e) T_flags_ne_uint(a, e, T_CHECK_QUIET)
-#define T_step_ne_uint(s, a, e) T_flags_ne_uint(a, e, T_CHECK_STEP(s))
-#define T_step_assert_ne_uint(s, a, e) \
- T_flags_ne_uint(a, e, T_CHECK_STEP(s) | T_CHECK_STOP)
-
-#define T_ge_uint(a, e) T_flags_ge_uint(a, e, 0)
-#define T_assert_ge_uint(a, e) T_flags_ge_uint(a, e, T_CHECK_STOP)
-#define T_quiet_ge_uint(a, e) T_flags_ge_uint(a, e, T_CHECK_QUIET)
-#define T_step_ge_uint(s, a, e) T_flags_ge_uint(a, e, T_CHECK_STEP(s))
-#define T_step_assert_ge_uint(s, a, e) \
- T_flags_ge_uint(a, e, T_CHECK_STEP(s) | T_CHECK_STOP)
-
-#define T_gt_uint(a, e) T_flags_gt_uint(a, e, 0)
-#define T_assert_gt_uint(a, e) T_flags_gt_uint(a, e, T_CHECK_STOP)
-#define T_quiet_gt_uint(a, e) T_flags_gt_uint(a, e, T_CHECK_QUIET)
-#define T_step_gt_uint(s, a, e) T_flags_gt_uint(a, e, T_CHECK_STEP(s))
-#define T_step_assert_gt_uint(s, a, e) \
- T_flags_gt_uint(a, e, T_CHECK_STEP(s) | T_CHECK_STOP)
-
-#define T_le_uint(a, e) T_flags_le_uint(a, e, 0)
-#define T_assert_le_uint(a, e) T_flags_le_uint(a, e, T_CHECK_STOP)
-#define T_quiet_le_uint(a, e) T_flags_le_uint(a, e, T_CHECK_QUIET)
-#define T_step_le_uint(s, a, e) T_flags_le_uint(a, e, T_CHECK_STEP(s))
-#define T_step_assert_le_uint(s, a, e) \
- T_flags_le_uint(a, e, T_CHECK_STEP(s) | T_CHECK_STOP)
-
-#define T_lt_uint(a, e) T_flags_lt_uint(a, e, 0)
-#define T_assert_lt_uint(a, e) T_flags_lt_uint(a, e, T_CHECK_STOP)
-#define T_quiet_lt_uint(a, e) T_flags_lt_uint(a, e, T_CHECK_QUIET)
-#define T_step_lt_uint(s, a, e) T_flags_lt_uint(a, e, T_CHECK_STEP(s))
-#define T_step_assert_lt_uint(s, a, e) \
- T_flags_lt_uint(a, e, T_CHECK_STEP(s) | T_CHECK_STOP)
-
-/** @} */
-
-/**
- * @defgroup RTEMSTestFrameworkChecksLong Signed Long Integer Checks
- *
- * @ingroup RTEMSTestFramework
- *
- * @brief Checks for signed long integers (long).
- *
- * @{
- */
-
-#define T_eq_long(a, e) T_flags_eq_long(a, e, 0)
-#define T_assert_eq_long(a, e) T_flags_eq_long(a, e, T_CHECK_STOP)
-#define T_quiet_eq_long(a, e) T_flags_eq_long(a, e, T_CHECK_QUIET)
-#define T_step_eq_long(s, a, e) T_flags_eq_long(a, e, T_CHECK_STEP(s))
-#define T_step_assert_eq_long(s, a, e) \
- T_flags_eq_long(a, e, T_CHECK_STEP(s) | T_CHECK_STOP)
-
-#define T_ne_long(a, e) T_flags_ne_long(a, e, 0)
-#define T_assert_ne_long(a, e) T_flags_ne_long(a, e, T_CHECK_STOP)
-#define T_quiet_ne_long(a, e) T_flags_ne_long(a, e, T_CHECK_QUIET)
-#define T_step_ne_long(s, a, e) T_flags_ne_long(a, e, T_CHECK_STEP(s))
-#define T_step_assert_ne_long(s, a, e) \
- T_flags_ne_long(a, e, T_CHECK_STEP(s) | T_CHECK_STOP)
-
-#define T_ge_long(a, e) T_flags_ge_long(a, e, 0)
-#define T_assert_ge_long(a, e) T_flags_ge_long(a, e, T_CHECK_STOP)
-#define T_quiet_ge_long(a, e) T_flags_ge_long(a, e, T_CHECK_QUIET)
-#define T_step_ge_long(s, a, e) T_flags_ge_long(a, e, T_CHECK_STEP(s))
-#define T_step_assert_ge_long(s, a, e) \
- T_flags_ge_long(a, e, T_CHECK_STEP(s) | T_CHECK_STOP)
-
-#define T_gt_long(a, e) T_flags_gt_long(a, e, 0)
-#define T_assert_gt_long(a, e) T_flags_gt_long(a, e, T_CHECK_STOP)
-#define T_quiet_gt_long(a, e) T_flags_gt_long(a, e, T_CHECK_QUIET)
-#define T_step_gt_long(s, a, e) T_flags_gt_long(a, e, T_CHECK_STEP(s))
-#define T_step_assert_gt_long(s, a, e) \
- T_flags_gt_long(a, e, T_CHECK_STEP(s) | T_CHECK_STOP)
-
-#define T_le_long(a, e) T_flags_le_long(a, e, 0)
-#define T_assert_le_long(a, e) T_flags_le_long(a, e, T_CHECK_STOP)
-#define T_quiet_le_long(a, e) T_flags_le_long(a, e, T_CHECK_QUIET)
-#define T_step_le_long(s, a, e) T_flags_le_long(a, e, T_CHECK_STEP(s))
-#define T_step_assert_le_long(s, a, e) \
- T_flags_le_long(a, e, T_CHECK_STEP(s) | T_CHECK_STOP)
-
-#define T_lt_long(a, e) T_flags_lt_long(a, e, 0)
-#define T_assert_lt_long(a, e) T_flags_lt_long(a, e, T_CHECK_STOP)
-#define T_quiet_lt_long(a, e) T_flags_lt_long(a, e, T_CHECK_QUIET)
-#define T_step_lt_long(s, a, e) T_flags_lt_long(a, e, T_CHECK_STEP(s))
-#define T_step_assert_lt_long(s, a, e) \
- T_flags_lt_long(a, e, T_CHECK_STEP(s) | T_CHECK_STOP)
-
-/** @} */
-
-/**
- * @defgroup RTEMSTestFrameworkChecksULong Unsigned Long Integer Checks
- *
- * @ingroup RTEMSTestFramework
- *
- * @brief Checks for unsigned long integers (unsigned long).
- *
- * @{
- */
-
-#define T_eq_ulong(a, e) T_flags_eq_ulong(a, e, 0)
-#define T_assert_eq_ulong(a, e) T_flags_eq_ulong(a, e, T_CHECK_STOP)
-#define T_quiet_eq_ulong(a, e) T_flags_eq_ulong(a, e, T_CHECK_QUIET)
-#define T_step_eq_ulong(s, a, e) T_flags_eq_ulong(a, e, T_CHECK_STEP(s))
-#define T_step_assert_eq_ulong(s, a, e) \
- T_flags_eq_ulong(a, e, T_CHECK_STEP(s) | T_CHECK_STOP)
-
-#define T_ne_ulong(a, e) T_flags_ne_ulong(a, e, 0)
-#define T_assert_ne_ulong(a, e) T_flags_ne_ulong(a, e, T_CHECK_STOP)
-#define T_quiet_ne_ulong(a, e) T_flags_ne_ulong(a, e, T_CHECK_QUIET)
-#define T_step_ne_ulong(s, a, e) T_flags_ne_ulong(a, e, T_CHECK_STEP(s))
-#define T_step_assert_ne_ulong(s, a, e) \
- T_flags_ne_ulong(a, e, T_CHECK_STEP(s) | T_CHECK_STOP)
-
-#define T_ge_ulong(a, e) T_flags_ge_ulong(a, e, 0)
-#define T_assert_ge_ulong(a, e) T_flags_ge_ulong(a, e, T_CHECK_STOP)
-#define T_quiet_ge_ulong(a, e) T_flags_ge_ulong(a, e, T_CHECK_QUIET)
-#define T_step_ge_ulong(s, a, e) T_flags_ge_ulong(a, e, T_CHECK_STEP(s))
-#define T_step_assert_ge_ulong(s, a, e) \
- T_flags_ge_ulong(a, e, T_CHECK_STEP(s) | T_CHECK_STOP)
-
-#define T_gt_ulong(a, e) T_flags_gt_ulong(a, e, 0)
-#define T_assert_gt_ulong(a, e) T_flags_gt_ulong(a, e, T_CHECK_STOP)
-#define T_quiet_gt_ulong(a, e) T_flags_gt_ulong(a, e, T_CHECK_QUIET)
-#define T_step_gt_ulong(s, a, e) T_flags_gt_ulong(a, e, T_CHECK_STEP(s))
-#define T_step_assert_gt_ulong(s, a, e) \
- T_flags_gt_ulong(a, e, T_CHECK_STEP(s) | T_CHECK_STOP)
-
-#define T_le_ulong(a, e) T_flags_le_ulong(a, e, 0)
-#define T_assert_le_ulong(a, e) T_flags_le_ulong(a, e, T_CHECK_STOP)
-#define T_quiet_le_ulong(a, e) T_flags_le_ulong(a, e, T_CHECK_QUIET)
-#define T_step_le_ulong(s, a, e) T_flags_le_ulong(a, e, T_CHECK_STEP(s))
-#define T_step_assert_le_ulong(s, a, e) \
- T_flags_le_ulong(a, e, T_CHECK_STEP(s) | T_CHECK_STOP)
-
-#define T_lt_ulong(a, e) T_flags_lt_ulong(a, e, 0)
-#define T_assert_lt_ulong(a, e) T_flags_lt_ulong(a, e, T_CHECK_STOP)
-#define T_quiet_lt_ulong(a, e) T_flags_lt_ulong(a, e, T_CHECK_QUIET)
-#define T_step_lt_ulong(s, a, e) T_flags_lt_ulong(a, e, T_CHECK_STEP(s))
-#define T_step_assert_lt_ulong(s, a, e) \
- T_flags_lt_ulong(a, e, T_CHECK_STEP(s) | T_CHECK_STOP)
-
-/** @} */
-
-/**
- * @defgroup RTEMSTestFrameworkChecksLong Signed Long Long Integer Checks
- *
- * @ingroup RTEMSTestFramework
- *
- * @brief Checks for signed long long integers (long long).
- *
- * @{
- */
-
-#define T_eq_ll(a, e) T_flags_eq_ll(a, e, 0)
-#define T_assert_eq_ll(a, e) T_flags_eq_ll(a, e, T_CHECK_STOP)
-#define T_quiet_eq_ll(a, e) T_flags_eq_ll(a, e, T_CHECK_QUIET)
-#define T_step_eq_ll(s, a, e) T_flags_eq_ll(a, e, T_CHECK_STEP(s))
-#define T_step_assert_eq_ll(s, a, e) \
- T_flags_eq_ll(a, e, T_CHECK_STEP(s) | T_CHECK_STOP)
-
-#define T_ne_ll(a, e) T_flags_ne_ll(a, e, 0)
-#define T_assert_ne_ll(a, e) T_flags_ne_ll(a, e, T_CHECK_STOP)
-#define T_quiet_ne_ll(a, e) T_flags_ne_ll(a, e, T_CHECK_QUIET)
-#define T_step_ne_ll(s, a, e) T_flags_ne_ll(a, e, T_CHECK_STEP(s))
-#define T_step_assert_ne_ll(s, a, e) \
- T_flags_ne_ll(a, e, T_CHECK_STEP(s) | T_CHECK_STOP)
-
-#define T_ge_ll(a, e) T_flags_ge_ll(a, e, 0)
-#define T_assert_ge_ll(a, e) T_flags_ge_ll(a, e, T_CHECK_STOP)
-#define T_quiet_ge_ll(a, e) T_flags_ge_ll(a, e, T_CHECK_QUIET)
-#define T_step_ge_ll(s, a, e) T_flags_ge_ll(a, e, T_CHECK_STEP(s))
-#define T_step_assert_ge_ll(s, a, e) \
- T_flags_ge_ll(a, e, T_CHECK_STEP(s) | T_CHECK_STOP)
-
-#define T_gt_ll(a, e) T_flags_gt_ll(a, e, 0)
-#define T_assert_gt_ll(a, e) T_flags_gt_ll(a, e, T_CHECK_STOP)
-#define T_quiet_gt_ll(a, e) T_flags_gt_ll(a, e, T_CHECK_QUIET)
-#define T_step_gt_ll(s, a, e) T_flags_gt_ll(a, e, T_CHECK_STEP(s))
-#define T_step_assert_gt_ll(s, a, e) \
- T_flags_gt_ll(a, e, T_CHECK_STEP(s) | T_CHECK_STOP)
-
-#define T_le_ll(a, e) T_flags_le_ll(a, e, 0)
-#define T_assert_le_ll(a, e) T_flags_le_ll(a, e, T_CHECK_STOP)
-#define T_quiet_le_ll(a, e) T_flags_le_ll(a, e, T_CHECK_QUIET)
-#define T_step_le_ll(s, a, e) T_flags_le_ll(a, e, T_CHECK_STEP(s))
-#define T_step_assert_le_ll(s, a, e) \
- T_flags_le_ll(a, e, T_CHECK_STEP(s) | T_CHECK_STOP)
-
-#define T_lt_ll(a, e) T_flags_lt_ll(a, e, 0)
-#define T_assert_lt_ll(a, e) T_flags_lt_ll(a, e, T_CHECK_STOP)
-#define T_quiet_lt_ll(a, e) T_flags_lt_ll(a, e, T_CHECK_QUIET)
-#define T_step_lt_ll(s, a, e) T_flags_lt_ll(a, e, T_CHECK_STEP(s))
-#define T_step_assert_lt_ll(s, a, e) \
- T_flags_lt_ll(a, e, T_CHECK_STEP(s) | T_CHECK_STOP)
-
-/** @} */
-
-/**
- * @defgroup RTEMSTestFrameworkChecksULongLong Unsigned Long Long Integer Checks
- *
- * @ingroup RTEMSTestFramework
- *
- * @brief Checks for unsigned long long integers (unsigned long long).
- *
- * @{
- */
-
-#define T_eq_ull(a, e) T_flags_eq_ull(a, e, 0)
-#define T_assert_eq_ull(a, e) T_flags_eq_ull(a, e, T_CHECK_STOP)
-#define T_quiet_eq_ull(a, e) T_flags_eq_ull(a, e, T_CHECK_QUIET)
-#define T_step_eq_ull(s, a, e) T_flags_eq_ull(a, e, T_CHECK_STEP(s))
-#define T_step_assert_eq_ull(s, a, e) \
- T_flags_eq_ull(a, e, T_CHECK_STEP(s) | T_CHECK_STOP)
-
-#define T_ne_ull(a, e) T_flags_ne_ull(a, e, 0)
-#define T_assert_ne_ull(a, e) T_flags_ne_ull(a, e, T_CHECK_STOP)
-#define T_quiet_ne_ull(a, e) T_flags_ne_ull(a, e, T_CHECK_QUIET)
-#define T_step_ne_ull(s, a, e) T_flags_ne_ull(a, e, T_CHECK_STEP(s))
-#define T_step_assert_ne_ull(s, a, e) \
- T_flags_ne_ull(a, e, T_CHECK_STEP(s) | T_CHECK_STOP)
-
-#define T_ge_ull(a, e) T_flags_ge_ull(a, e, 0)
-#define T_assert_ge_ull(a, e) T_flags_ge_ull(a, e, T_CHECK_STOP)
-#define T_quiet_ge_ull(a, e) T_flags_ge_ull(a, e, T_CHECK_QUIET)
-#define T_step_ge_ull(s, a, e) T_flags_ge_ull(a, e, T_CHECK_STEP(s))
-#define T_step_assert_ge_ull(s, a, e) \
- T_flags_ge_ull(a, e, T_CHECK_STEP(s) | T_CHECK_STOP)
-
-#define T_gt_ull(a, e) T_flags_gt_ull(a, e, 0)
-#define T_assert_gt_ull(a, e) T_flags_gt_ull(a, e, T_CHECK_STOP)
-#define T_quiet_gt_ull(a, e) T_flags_gt_ull(a, e, T_CHECK_QUIET)
-#define T_step_gt_ull(s, a, e) T_flags_gt_ull(a, e, T_CHECK_STEP(s))
-#define T_step_assert_gt_ull(s, a, e) \
- T_flags_gt_ull(a, e, T_CHECK_STEP(s) | T_CHECK_STOP)
-
-#define T_le_ull(a, e) T_flags_le_ull(a, e, 0)
-#define T_assert_le_ull(a, e) T_flags_le_ull(a, e, T_CHECK_STOP)
-#define T_quiet_le_ull(a, e) T_flags_le_ull(a, e, T_CHECK_QUIET)
-#define T_step_le_ull(s, a, e) T_flags_le_ull(a, e, T_CHECK_STEP(s))
-#define T_step_assert_le_ull(s, a, e) \
- T_flags_le_ull(a, e, T_CHECK_STEP(s) | T_CHECK_STOP)
-
-#define T_lt_ull(a, e) T_flags_lt_ull(a, e, 0)
-#define T_assert_lt_ull(a, e) T_flags_lt_ull(a, e, T_CHECK_STOP)
-#define T_quiet_lt_ull(a, e) T_flags_lt_ull(a, e, T_CHECK_QUIET)
-#define T_step_lt_ull(s, a, e) T_flags_lt_ull(a, e, T_CHECK_STEP(s))
-#define T_step_assert_lt_ull(s, a, e) \
- T_flags_lt_ull(a, e, T_CHECK_STEP(s) | T_CHECK_STOP)
-
-/** @} */
-
-/**
- * @defgroup RTEMSTestFrameworkChecksInt8 Signed 8-Bit Integer Checks
- *
- * @ingroup RTEMSTestFramework
- *
- * @brief Checks for signed 8-bit integers (int8_t).
- *
- * @{
- */
-
-#define T_eq_i8(a, e) T_flags_eq_int(a, e, 0)
-#define T_assert_eq_i8(a, e) T_flags_eq_int(a, e, T_CHECK_STOP)
-#define T_quiet_eq_i8(a, e) T_flags_eq_int(a, e, T_CHECK_QUIET)
-#define T_step_eq_i8(s, a, e) T_flags_eq_int(a, e, T_CHECK_STEP(s))
-#define T_step_assert_eq_i8(s, a, e) \
- T_flags_eq_int(a, e, T_CHECK_STEP(s) | T_CHECK_STOP)
-
-#define T_ne_i8(a, e) T_flags_ne_int(a, e, 0)
-#define T_assert_ne_i8(a, e) T_flags_ne_int(a, e, T_CHECK_STOP)
-#define T_quiet_ne_i8(a, e) T_flags_ne_int(a, e, T_CHECK_QUIET)
-#define T_step_ne_i8(s, a, e) T_flags_ne_int(a, e, T_CHECK_STEP(s))
-#define T_step_assert_ne_i8(s, a, e) \
- T_flags_ne_int(a, e, T_CHECK_STEP(s) | T_CHECK_STOP)
-
-#define T_ge_i8(a, e) T_flags_ge_int(a, e, 0)
-#define T_assert_ge_i8(a, e) T_flags_ge_int(a, e, T_CHECK_STOP)
-#define T_quiet_ge_i8(a, e) T_flags_ge_int(a, e, T_CHECK_QUIET)
-#define T_step_ge_i8(s, a, e) T_flags_ge_int(a, e, T_CHECK_STEP(s))
-#define T_step_assert_ge_i8(s, a, e) \
- T_flags_ge_int(a, e, T_CHECK_STEP(s) | T_CHECK_STOP)
-
-#define T_gt_i8(a, e) T_flags_gt_int(a, e, 0)
-#define T_assert_gt_i8(a, e) T_flags_gt_int(a, e, T_CHECK_STOP)
-#define T_quiet_gt_i8(a, e) T_flags_gt_int(a, e, T_CHECK_QUIET)
-#define T_step_gt_i8(s, a, e) T_flags_gt_int(a, e, T_CHECK_STEP(s))
-#define T_step_assert_gt_i8(s, a, e) \
- T_flags_gt_int(a, e, T_CHECK_STEP(s) | T_CHECK_STOP)
-
-#define T_le_i8(a, e) T_flags_le_int(a, e, 0)
-#define T_assert_le_i8(a, e) T_flags_le_int(a, e, T_CHECK_STOP)
-#define T_quiet_le_i8(a, e) T_flags_le_int(a, e, T_CHECK_QUIET)
-#define T_step_le_i8(s, a, e) T_flags_le_int(a, e, T_CHECK_STEP(s))
-#define T_step_assert_le_i8(s, a, e) \
- T_flags_le_int(a, e, T_CHECK_STEP(s) | T_CHECK_STOP)
-
-#define T_lt_i8(a, e) T_flags_lt_int(a, e, 0)
-#define T_assert_lt_i8(a, e) T_flags_lt_int(a, e, T_CHECK_STOP)
-#define T_quiet_lt_i8(a, e) T_flags_lt_int(a, e, T_CHECK_QUIET)
-#define T_step_lt_i8(s, a, e) T_flags_lt_int(a, e, T_CHECK_STEP(s))
-#define T_step_assert_lt_i8(s, a, e) \
- T_flags_lt_int(a, e, T_CHECK_STEP(s) | T_CHECK_STOP)
-
-/** @} */
-
-/**
- * @defgroup RTEMSTestFrameworkChecksUInt8 Unsigned 8-Bit Integer Checks
- *
- * @ingroup RTEMSTestFramework
- *
- * @brief Checks for unsigned 8-bit integers (uint8_t).
- *
- * @{
- */
-
-#define T_eq_u8(a, e) T_flags_eq_uint(a, e, 0)
-#define T_assert_eq_u8(a, e) T_flags_eq_uint(a, e, T_CHECK_STOP)
-#define T_quiet_eq_u8(a, e) T_flags_eq_uint(a, e, T_CHECK_QUIET)
-#define T_step_eq_u8(s, a, e) T_flags_eq_uint(a, e, T_CHECK_STEP(s))
-#define T_step_assert_eq_u8(s, a, e) \
- T_flags_eq_uint(a, e, T_CHECK_STEP(s) | T_CHECK_STOP)
-
-#define T_ne_u8(a, e) T_flags_ne_uint(a, e, 0)
-#define T_assert_ne_u8(a, e) T_flags_ne_uint(a, e, T_CHECK_STOP)
-#define T_quiet_ne_u8(a, e) T_flags_ne_uint(a, e, T_CHECK_QUIET)
-#define T_step_ne_u8(s, a, e) T_flags_ne_uint(a, e, T_CHECK_STEP(s))
-#define T_step_assert_ne_u8(s, a, e) \
- T_flags_ne_uint(a, e, T_CHECK_STEP(s) | T_CHECK_STOP)
-
-#define T_ge_u8(a, e) T_flags_ge_uint(a, e, 0)
-#define T_assert_ge_u8(a, e) T_flags_ge_uint(a, e, T_CHECK_STOP)
-#define T_quiet_ge_u8(a, e) T_flags_ge_uint(a, e, T_CHECK_QUIET)
-#define T_step_ge_u8(s, a, e) T_flags_ge_uint(a, e, T_CHECK_STEP(s))
-#define T_step_assert_ge_u8(s, a, e) \
- T_flags_ge_uint(a, e, T_CHECK_STEP(s) | T_CHECK_STOP)
-
-#define T_gt_u8(a, e) T_flags_gt_uint(a, e, 0)
-#define T_assert_gt_u8(a, e) T_flags_gt_uint(a, e, T_CHECK_STOP)
-#define T_quiet_gt_u8(a, e) T_flags_gt_uint(a, e, T_CHECK_QUIET)
-#define T_step_gt_u8(s, a, e) T_flags_gt_uint(a, e, T_CHECK_STEP(s))
-#define T_step_assert_gt_u8(s, a, e) \
- T_flags_gt_uint(a, e, T_CHECK_STEP(s) | T_CHECK_STOP)
-
-#define T_le_u8(a, e) T_flags_le_uint(a, e, 0)
-#define T_assert_le_u8(a, e) T_flags_le_uint(a, e, T_CHECK_STOP)
-#define T_quiet_le_u8(a, e) T_flags_le_uint(a, e, T_CHECK_QUIET)
-#define T_step_le_u8(s, a, e) T_flags_le_uint(a, e, T_CHECK_STEP(s))
-#define T_step_assert_le_u8(s, a, e) \
- T_flags_le_uint(a, e, T_CHECK_STEP(s) | T_CHECK_STOP)
-
-#define T_lt_u8(a, e) T_flags_lt_uint(a, e, 0)
-#define T_assert_lt_u8(a, e) T_flags_lt_uint(a, e, T_CHECK_STOP)
-#define T_quiet_lt_u8(a, e) T_flags_lt_uint(a, e, T_CHECK_QUIET)
-#define T_step_lt_u8(s, a, e) T_flags_lt_uint(a, e, T_CHECK_STEP(s))
-#define T_step_assert_lt_u8(s, a, e) \
- T_flags_lt_uint(a, e, T_CHECK_STEP(s) | T_CHECK_STOP)
-
-/** @} */
-
-/**
- * @defgroup RTEMSTestFrameworkChecksInt16 Signed 16-Bit Integer Checks
- *
- * @ingroup RTEMSTestFramework
- *
- * @brief Checks for signed 16-bit integers (int16_t).
- *
- * @{
- */
-
-#define T_eq_i16(a, e) T_flags_eq_int(a, e, 0)
-#define T_assert_eq_i16(a, e) T_flags_eq_int(a, e, T_CHECK_STOP)
-#define T_quiet_eq_i16(a, e) T_flags_eq_int(a, e, T_CHECK_QUIET)
-#define T_step_eq_i16(s, a, e) T_flags_eq_int(a, e, T_CHECK_STEP(s))
-#define T_step_assert_eq_i16(s, a, e) \
- T_flags_eq_int(a, e, T_CHECK_STEP(s) | T_CHECK_STOP)
-
-#define T_ne_i16(a, e) T_flags_ne_int(a, e, 0)
-#define T_assert_ne_i16(a, e) T_flags_ne_int(a, e, T_CHECK_STOP)
-#define T_quiet_ne_i16(a, e) T_flags_ne_int(a, e, T_CHECK_QUIET)
-#define T_step_ne_i16(s, a, e) T_flags_ne_int(a, e, T_CHECK_STEP(s))
-#define T_step_assert_ne_i16(s, a, e) \
- T_flags_ne_int(a, e, T_CHECK_STEP(s) | T_CHECK_STOP)
-
-#define T_ge_i16(a, e) T_flags_ge_int(a, e, 0)
-#define T_assert_ge_i16(a, e) T_flags_ge_int(a, e, T_CHECK_STOP)
-#define T_quiet_ge_i16(a, e) T_flags_ge_int(a, e, T_CHECK_QUIET)
-#define T_step_ge_i16(s, a, e) T_flags_ge_int(a, e, T_CHECK_STEP(s))
-#define T_step_assert_ge_i16(s, a, e) \
- T_flags_ge_int(a, e, T_CHECK_STEP(s) | T_CHECK_STOP)
-
-#define T_gt_i16(a, e) T_flags_gt_int(a, e, 0)
-#define T_assert_gt_i16(a, e) T_flags_gt_int(a, e, T_CHECK_STOP)
-#define T_quiet_gt_i16(a, e) T_flags_gt_int(a, e, T_CHECK_QUIET)
-#define T_step_gt_i16(s, a, e) T_flags_gt_int(a, e, T_CHECK_STEP(s))
-#define T_step_assert_gt_i16(s, a, e) \
- T_flags_gt_int(a, e, T_CHECK_STEP(s) | T_CHECK_STOP)
-
-#define T_le_i16(a, e) T_flags_le_int(a, e, 0)
-#define T_assert_le_i16(a, e) T_flags_le_int(a, e, T_CHECK_STOP)
-#define T_quiet_le_i16(a, e) T_flags_le_int(a, e, T_CHECK_QUIET)
-#define T_step_le_i16(s, a, e) T_flags_le_int(a, e, T_CHECK_STEP(s))
-#define T_step_assert_le_i16(s, a, e) \
- T_flags_le_int(a, e, T_CHECK_STEP(s) | T_CHECK_STOP)
-
-#define T_lt_i16(a, e) T_flags_lt_int(a, e, 0)
-#define T_assert_lt_i16(a, e) T_flags_lt_int(a, e, T_CHECK_STOP)
-#define T_quiet_lt_i16(a, e) T_flags_lt_int(a, e, T_CHECK_QUIET)
-#define T_step_lt_i16(s, a, e) T_flags_lt_int(a, e, T_CHECK_STEP(s))
-#define T_step_assert_lt_i16(s, a, e) \
- T_flags_lt_int(a, e, T_CHECK_STEP(s) | T_CHECK_STOP)
-
-/** @} */
-
-/**
- * @defgroup RTEMSTestFrameworkChecksUInt16 Unsigned 16-Bit Integer Checks
- *
- * @ingroup RTEMSTestFramework
- *
- * @brief Checks for unsigned 16-bit integers (uint16_t).
- *
- * @{
- */
-
-#define T_eq_u16(a, e) T_flags_eq_uint(a, e, 0)
-#define T_assert_eq_u16(a, e) T_flags_eq_uint(a, e, T_CHECK_STOP)
-#define T_quiet_eq_u16(a, e) T_flags_eq_uint(a, e, T_CHECK_QUIET)
-#define T_step_eq_u16(s, a, e) T_flags_eq_uint(a, e, T_CHECK_STEP(s))
-#define T_step_assert_eq_u16(s, a, e) \
- T_flags_eq_uint(a, e, T_CHECK_STEP(s) | T_CHECK_STOP)
-
-#define T_ne_u16(a, e) T_flags_ne_uint(a, e, 0)
-#define T_assert_ne_u16(a, e) T_flags_ne_uint(a, e, T_CHECK_STOP)
-#define T_quiet_ne_u16(a, e) T_flags_ne_uint(a, e, T_CHECK_QUIET)
-#define T_step_ne_u16(s, a, e) T_flags_ne_uint(a, e, T_CHECK_STEP(s))
-#define T_step_assert_ne_u16(s, a, e) \
- T_flags_ne_uint(a, e, T_CHECK_STEP(s) | T_CHECK_STOP)
-
-#define T_ge_u16(a, e) T_flags_ge_uint(a, e, 0)
-#define T_assert_ge_u16(a, e) T_flags_ge_uint(a, e, T_CHECK_STOP)
-#define T_quiet_ge_u16(a, e) T_flags_ge_uint(a, e, T_CHECK_QUIET)
-#define T_step_ge_u16(s, a, e) T_flags_ge_uint(a, e, T_CHECK_STEP(s))
-#define T_step_assert_ge_u16(s, a, e) \
- T_flags_ge_uint(a, e, T_CHECK_STEP(s) | T_CHECK_STOP)
-
-#define T_gt_u16(a, e) T_flags_gt_uint(a, e, 0)
-#define T_assert_gt_u16(a, e) T_flags_gt_uint(a, e, T_CHECK_STOP)
-#define T_quiet_gt_u16(a, e) T_flags_gt_uint(a, e, T_CHECK_QUIET)
-#define T_step_gt_u16(s, a, e) T_flags_gt_uint(a, e, T_CHECK_STEP(s))
-#define T_step_assert_gt_u16(s, a, e) \
- T_flags_gt_uint(a, e, T_CHECK_STEP(s) | T_CHECK_STOP)
-
-#define T_le_u16(a, e) T_flags_le_uint(a, e, 0)
-#define T_assert_le_u16(a, e) T_flags_le_uint(a, e, T_CHECK_STOP)
-#define T_quiet_le_u16(a, e) T_flags_le_uint(a, e, T_CHECK_QUIET)
-#define T_step_le_u16(s, a, e) T_flags_le_uint(a, e, T_CHECK_STEP(s))
-#define T_step_assert_le_u16(s, a, e) \
- T_flags_le_uint(a, e, T_CHECK_STEP(s) | T_CHECK_STOP)
-
-#define T_lt_u16(a, e) T_flags_lt_uint(a, e, 0)
-#define T_assert_lt_u16(a, e) T_flags_lt_uint(a, e, T_CHECK_STOP)
-#define T_quiet_lt_u16(a, e) T_flags_lt_uint(a, e, T_CHECK_QUIET)
-#define T_step_lt_u16(s, a, e) T_flags_lt_uint(a, e, T_CHECK_STEP(s))
-#define T_step_assert_lt_u16(s, a, e) \
- T_flags_lt_uint(a, e, T_CHECK_STEP(s) | T_CHECK_STOP)
-
-/** @} */
-
-/**
- * @defgroup RTEMSTestFrameworkChecksInt32 Signed 32-Bit Integer Checks
- *
- * @ingroup RTEMSTestFramework
- *
- * @brief Checks for signed 32-bit integers (int32_t).
- *
- * @{
- */
-
-#define T_eq_i32(a, e) T_flags_eq_long(a, e, 0)
-#define T_assert_eq_i32(a, e) T_flags_eq_long(a, e, T_CHECK_STOP)
-#define T_quiet_eq_i32(a, e) T_flags_eq_long(a, e, T_CHECK_QUIET)
-#define T_step_eq_i32(s, a, e) T_flags_eq_long(a, e, T_CHECK_STEP(s))
-#define T_step_assert_eq_i32(s, a, e) \
- T_flags_eq_long(a, e, T_CHECK_STEP(s) | T_CHECK_STOP)
-
-#define T_ne_i32(a, e) T_flags_ne_long(a, e, 0)
-#define T_assert_ne_i32(a, e) T_flags_ne_long(a, e, T_CHECK_STOP)
-#define T_quiet_ne_i32(a, e) T_flags_ne_long(a, e, T_CHECK_QUIET)
-#define T_step_ne_i32(s, a, e) T_flags_ne_long(a, e, T_CHECK_STEP(s))
-#define T_step_assert_ne_i32(s, a, e) \
- T_flags_ne_long(a, e, T_CHECK_STEP(s) | T_CHECK_STOP)
-
-#define T_ge_i32(a, e) T_flags_ge_long(a, e, 0)
-#define T_assert_ge_i32(a, e) T_flags_ge_long(a, e, T_CHECK_STOP)
-#define T_quiet_ge_i32(a, e) T_flags_ge_long(a, e, T_CHECK_QUIET)
-#define T_step_ge_i32(s, a, e) T_flags_ge_long(a, e, T_CHECK_STEP(s))
-#define T_step_assert_ge_i32(s, a, e) \
- T_flags_ge_long(a, e, T_CHECK_STEP(s) | T_CHECK_STOP)
-
-#define T_gt_i32(a, e) T_flags_gt_long(a, e, 0)
-#define T_assert_gt_i32(a, e) T_flags_gt_long(a, e, T_CHECK_STOP)
-#define T_quiet_gt_i32(a, e) T_flags_gt_long(a, e, T_CHECK_QUIET)
-#define T_step_gt_i32(s, a, e) T_flags_gt_long(a, e, T_CHECK_STEP(s))
-#define T_step_assert_gt_i32(s, a, e) \
- T_flags_gt_long(a, e, T_CHECK_STEP(s) | T_CHECK_STOP)
-
-#define T_le_i32(a, e) T_flags_le_long(a, e, 0)
-#define T_assert_le_i32(a, e) T_flags_le_long(a, e, T_CHECK_STOP)
-#define T_quiet_le_i32(a, e) T_flags_le_long(a, e, T_CHECK_QUIET)
-#define T_step_le_i32(s, a, e) T_flags_le_long(a, e, T_CHECK_STEP(s))
-#define T_step_assert_le_i32(s, a, e) \
- T_flags_le_long(a, e, T_CHECK_STEP(s) | T_CHECK_STOP)
-
-#define T_lt_i32(a, e) T_flags_lt_long(a, e, 0)
-#define T_assert_lt_i32(a, e) T_flags_lt_long(a, e, T_CHECK_STOP)
-#define T_quiet_lt_i32(a, e) T_flags_lt_long(a, e, T_CHECK_QUIET)
-#define T_step_lt_i32(s, a, e) T_flags_lt_long(a, e, T_CHECK_STEP(s))
-#define T_step_assert_lt_i32(s, a, e) \
- T_flags_lt_long(a, e, T_CHECK_STEP(s) | T_CHECK_STOP)
-
-/** @} */
-
-/**
- * @defgroup RTEMSTestFrameworkChecksUInt32 Unsigned 32-Bit Integer Checks
- *
- * @ingroup RTEMSTestFramework
- *
- * @brief Checks for unsigned 32-bit integers (uint32_t).
- *
- * @{
- */
-
-#define T_eq_u32(a, e) T_flags_eq_ulong(a, e, 0)
-#define T_assert_eq_u32(a, e) T_flags_eq_ulong(a, e, T_CHECK_STOP)
-#define T_quiet_eq_u32(a, e) T_flags_eq_ulong(a, e, T_CHECK_QUIET)
-#define T_step_eq_u32(s, a, e) T_flags_eq_ulong(a, e, T_CHECK_STEP(s))
-#define T_step_assert_eq_u32(s, a, e) \
- T_flags_eq_ulong(a, e, T_CHECK_STEP(s) | T_CHECK_STOP)
-
-#define T_ne_u32(a, e) T_flags_ne_ulong(a, e, 0)
-#define T_assert_ne_u32(a, e) T_flags_ne_ulong(a, e, T_CHECK_STOP)
-#define T_quiet_ne_u32(a, e) T_flags_ne_ulong(a, e, T_CHECK_QUIET)
-#define T_step_ne_u32(s, a, e) T_flags_ne_ulong(a, e, T_CHECK_STEP(s))
-#define T_step_assert_ne_u32(s, a, e) \
- T_flags_ne_ulong(a, e, T_CHECK_STEP(s) | T_CHECK_STOP)
-
-#define T_ge_u32(a, e) T_flags_ge_ulong(a, e, 0)
-#define T_assert_ge_u32(a, e) T_flags_ge_ulong(a, e, T_CHECK_STOP)
-#define T_quiet_ge_u32(a, e) T_flags_ge_ulong(a, e, T_CHECK_QUIET)
-#define T_step_ge_u32(s, a, e) T_flags_ge_ulong(a, e, T_CHECK_STEP(s))
-#define T_step_assert_ge_u32(s, a, e) \
- T_flags_ge_ulong(a, e, T_CHECK_STEP(s) | T_CHECK_STOP)
-
-#define T_gt_u32(a, e) T_flags_gt_ulong(a, e, 0)
-#define T_assert_gt_u32(a, e) T_flags_gt_ulong(a, e, T_CHECK_STOP)
-#define T_quiet_gt_u32(a, e) T_flags_gt_ulong(a, e, T_CHECK_QUIET)
-#define T_step_gt_u32(s, a, e) T_flags_gt_ulong(a, e, T_CHECK_STEP(s))
-#define T_step_assert_gt_u32(s, a, e) \
- T_flags_gt_ulong(a, e, T_CHECK_STEP(s) | T_CHECK_STOP)
-
-#define T_le_u32(a, e) T_flags_le_ulong(a, e, 0)
-#define T_assert_le_u32(a, e) T_flags_le_ulong(a, e, T_CHECK_STOP)
-#define T_quiet_le_u32(a, e) T_flags_le_ulong(a, e, T_CHECK_QUIET)
-#define T_step_le_u32(s, a, e) T_flags_le_ulong(a, e, T_CHECK_STEP(s))
-#define T_step_assert_le_u32(s, a, e) \
- T_flags_le_ulong(a, e, T_CHECK_STEP(s) | T_CHECK_STOP)
-
-#define T_lt_u32(a, e) T_flags_lt_ulong(a, e, 0)
-#define T_assert_lt_u32(a, e) T_flags_lt_ulong(a, e, T_CHECK_STOP)
-#define T_quiet_lt_u32(a, e) T_flags_lt_ulong(a, e, T_CHECK_QUIET)
-#define T_step_lt_u32(s, a, e) T_flags_lt_ulong(a, e, T_CHECK_STEP(s))
-#define T_step_assert_lt_u32(s, a, e) \
- T_flags_lt_ulong(a, e, T_CHECK_STEP(s) | T_CHECK_STOP)
-
-/** @} */
-
-/**
- * @defgroup RTEMSTestFrameworkChecksInt64 Signed 64-Bit Integer Checks
- *
- * @ingroup RTEMSTestFramework
- *
- * @brief Checks for signed 64-bit integers (int64_t).
- *
- * @{
- */
-
-#define T_eq_i64(a, e) T_flags_eq_ll(a, e, 0)
-#define T_assert_eq_i64(a, e) T_flags_eq_ll(a, e, T_CHECK_STOP)
-#define T_quiet_eq_i64(a, e) T_flags_eq_ll(a, e, T_CHECK_QUIET)
-#define T_step_eq_i64(s, a, e) T_flags_eq_ll(a, e, T_CHECK_STEP(s))
-#define T_step_assert_eq_i64(s, a, e) \
- T_flags_eq_ll(a, e, T_CHECK_STEP(s) | T_CHECK_STOP)
-
-#define T_ne_i64(a, e) T_flags_ne_ll(a, e, 0)
-#define T_assert_ne_i64(a, e) T_flags_ne_ll(a, e, T_CHECK_STOP)
-#define T_quiet_ne_i64(a, e) T_flags_ne_ll(a, e, T_CHECK_QUIET)
-#define T_step_ne_i64(s, a, e) T_flags_ne_ll(a, e, T_CHECK_STEP(s))
-#define T_step_assert_ne_i64(s, a, e) \
- T_flags_ne_ll(a, e, T_CHECK_STEP(s) | T_CHECK_STOP)
-
-#define T_ge_i64(a, e) T_flags_ge_ll(a, e, 0)
-#define T_assert_ge_i64(a, e) T_flags_ge_ll(a, e, T_CHECK_STOP)
-#define T_quiet_ge_i64(a, e) T_flags_ge_ll(a, e, T_CHECK_QUIET)
-#define T_step_ge_i64(s, a, e) T_flags_ge_ll(a, e, T_CHECK_STEP(s))
-#define T_step_assert_ge_i64(s, a, e) \
- T_flags_ge_ll(a, e, T_CHECK_STEP(s) | T_CHECK_STOP)
-
-#define T_gt_i64(a, e) T_flags_gt_ll(a, e, 0)
-#define T_assert_gt_i64(a, e) T_flags_gt_ll(a, e, T_CHECK_STOP)
-#define T_quiet_gt_i64(a, e) T_flags_gt_ll(a, e, T_CHECK_QUIET)
-#define T_step_gt_i64(s, a, e) T_flags_gt_ll(a, e, T_CHECK_STEP(s))
-#define T_step_assert_gt_i64(s, a, e) \
- T_flags_gt_ll(a, e, T_CHECK_STEP(s) | T_CHECK_STOP)
-
-#define T_le_i64(a, e) T_flags_le_ll(a, e, 0)
-#define T_assert_le_i64(a, e) T_flags_le_ll(a, e, T_CHECK_STOP)
-#define T_quiet_le_i64(a, e) T_flags_le_ll(a, e, T_CHECK_QUIET)
-#define T_step_le_i64(s, a, e) T_flags_le_ll(a, e, T_CHECK_STEP(s))
-#define T_step_assert_le_i64(s, a, e) \
- T_flags_le_ll(a, e, T_CHECK_STEP(s) | T_CHECK_STOP)
-
-#define T_lt_i64(a, e) T_flags_lt_ll(a, e, 0)
-#define T_assert_lt_i64(a, e) T_flags_lt_ll(a, e, T_CHECK_STOP)
-#define T_quiet_lt_i64(a, e) T_flags_lt_ll(a, e, T_CHECK_QUIET)
-#define T_step_lt_i64(s, a, e) T_flags_lt_ll(a, e, T_CHECK_STEP(s))
-#define T_step_assert_lt_i64(s, a, e) \
- T_flags_lt_ll(a, e, T_CHECK_STEP(s) | T_CHECK_STOP)
-
-/** @} */
-
-/**
- * @defgroup RTEMSTestFrameworkChecksUInt64 Unsigned 64-Bit Integer Checks
- *
- * @ingroup RTEMSTestFramework
- *
- * @brief Checks for unsigned 64-bit integers (uint64_t).
- *
- * @{
- */
-
-#define T_eq_u64(a, e) T_flags_eq_ull(a, e, 0)
-#define T_assert_eq_u64(a, e) T_flags_eq_ull(a, e, T_CHECK_STOP)
-#define T_quiet_eq_u64(a, e) T_flags_eq_ull(a, e, T_CHECK_QUIET)
-#define T_step_eq_u64(s, a, e) T_flags_eq_ull(a, e, T_CHECK_STEP(s))
-#define T_step_assert_eq_u64(s, a, e) \
- T_flags_eq_ull(a, e, T_CHECK_STEP(s) | T_CHECK_STOP)
-
-#define T_ne_u64(a, e) T_flags_ne_ull(a, e, 0)
-#define T_assert_ne_u64(a, e) T_flags_ne_ull(a, e, T_CHECK_STOP)
-#define T_quiet_ne_u64(a, e) T_flags_ne_ull(a, e, T_CHECK_QUIET)
-#define T_step_ne_u64(s, a, e) T_flags_ne_ull(a, e, T_CHECK_STEP(s))
-#define T_step_assert_ne_u64(s, a, e) \
- T_flags_ne_ull(a, e, T_CHECK_STEP(s) | T_CHECK_STOP)
-
-#define T_ge_u64(a, e) T_flags_ge_ull(a, e, 0)
-#define T_assert_ge_u64(a, e) T_flags_ge_ull(a, e, T_CHECK_STOP)
-#define T_quiet_ge_u64(a, e) T_flags_ge_ull(a, e, T_CHECK_QUIET)
-#define T_step_ge_u64(s, a, e) T_flags_ge_ull(a, e, T_CHECK_STEP(s))
-#define T_step_assert_ge_u64(s, a, e) \
- T_flags_ge_ull(a, e, T_CHECK_STEP(s) | T_CHECK_STOP)
-
-#define T_gt_u64(a, e) T_flags_gt_ull(a, e, 0)
-#define T_assert_gt_u64(a, e) T_flags_gt_ull(a, e, T_CHECK_STOP)
-#define T_quiet_gt_u64(a, e) T_flags_gt_ull(a, e, T_CHECK_QUIET)
-#define T_step_gt_u64(s, a, e) T_flags_gt_ull(a, e, T_CHECK_STEP(s))
-#define T_step_assert_gt_u64(s, a, e) \
- T_flags_gt_ull(a, e, T_CHECK_STEP(s) | T_CHECK_STOP)
-
-#define T_le_u64(a, e) T_flags_le_ull(a, e, 0)
-#define T_assert_le_u64(a, e) T_flags_le_ull(a, e, T_CHECK_STOP)
-#define T_quiet_le_u64(a, e) T_flags_le_ull(a, e, T_CHECK_QUIET)
-#define T_step_le_u64(s, a, e) T_flags_le_ull(a, e, T_CHECK_STEP(s))
-#define T_step_assert_le_u64(s, a, e) \
- T_flags_le_ull(a, e, T_CHECK_STEP(s) | T_CHECK_STOP)
-
-#define T_lt_u64(a, e) T_flags_lt_ull(a, e, 0)
-#define T_assert_lt_u64(a, e) T_flags_lt_ull(a, e, T_CHECK_STOP)
-#define T_quiet_lt_u64(a, e) T_flags_lt_ull(a, e, T_CHECK_QUIET)
-#define T_step_lt_u64(s, a, e) T_flags_lt_ull(a, e, T_CHECK_STEP(s))
-#define T_step_assert_lt_u64(s, a, e) \
- T_flags_lt_ull(a, e, T_CHECK_STEP(s) | T_CHECK_STOP)
-
-/** @} */
-
-/**
- * @defgroup RTEMSTestFrameworkChecksIntptr Signed Pointer Value Checks
- *
- * @ingroup RTEMSTestFramework
- *
- * @brief Checks for signed pointer values (intptr_t).
- *
- * @{
- */
-
-#define T_eq_iptr(a, e) T_flags_eq_long(a, e, 0)
-#define T_assert_eq_iptr(a, e) T_flags_eq_long(a, e, T_CHECK_STOP)
-#define T_quiet_eq_iptr(a, e) T_flags_eq_long(a, e, T_CHECK_QUIET)
-#define T_step_eq_iptr(s, a, e) T_flags_eq_long(a, e, T_CHECK_STEP(s))
-#define T_step_assert_eq_iptr(s, a, e) \
- T_flags_eq_long(a, e, T_CHECK_STEP(s) | T_CHECK_STOP)
-
-#define T_ne_iptr(a, e) T_flags_ne_long(a, e, 0)
-#define T_assert_ne_iptr(a, e) T_flags_ne_long(a, e, T_CHECK_STOP)
-#define T_quiet_ne_iptr(a, e) T_flags_ne_long(a, e, T_CHECK_QUIET)
-#define T_step_ne_iptr(s, a, e) T_flags_ne_long(a, e, T_CHECK_STEP(s))
-#define T_step_assert_ne_iptr(s, a, e) \
- T_flags_ne_long(a, e, T_CHECK_STEP(s) | T_CHECK_STOP)
-
-#define T_ge_iptr(a, e) T_flags_ge_long(a, e, 0)
-#define T_assert_ge_iptr(a, e) T_flags_ge_long(a, e, T_CHECK_STOP)
-#define T_quiet_ge_iptr(a, e) T_flags_ge_long(a, e, T_CHECK_QUIET)
-#define T_step_ge_iptr(s, a, e) T_flags_ge_long(a, e, T_CHECK_STEP(s))
-#define T_step_assert_ge_iptr(s, a, e) \
- T_flags_ge_long(a, e, T_CHECK_STEP(s) | T_CHECK_STOP)
-
-#define T_gt_iptr(a, e) T_flags_gt_long(a, e, 0)
-#define T_assert_gt_iptr(a, e) T_flags_gt_long(a, e, T_CHECK_STOP)
-#define T_quiet_gt_iptr(a, e) T_flags_gt_long(a, e, T_CHECK_QUIET)
-#define T_step_gt_iptr(s, a, e) T_flags_gt_long(a, e, T_CHECK_STEP(s))
-#define T_step_assert_gt_iptr(s, a, e) \
- T_flags_gt_long(a, e, T_CHECK_STEP(s) | T_CHECK_STOP)
-
-#define T_le_iptr(a, e) T_flags_le_long(a, e, 0)
-#define T_assert_le_iptr(a, e) T_flags_le_long(a, e, T_CHECK_STOP)
-#define T_quiet_le_iptr(a, e) T_flags_le_long(a, e, T_CHECK_QUIET)
-#define T_step_le_iptr(s, a, e) T_flags_le_long(a, e, T_CHECK_STEP(s))
-#define T_step_assert_le_iptr(s, a, e) \
- T_flags_le_long(a, e, T_CHECK_STEP(s) | T_CHECK_STOP)
-
-#define T_lt_iptr(a, e) T_flags_lt_long(a, e, 0)
-#define T_assert_lt_iptr(a, e) T_flags_lt_long(a, e, T_CHECK_STOP)
-#define T_quiet_lt_iptr(a, e) T_flags_lt_long(a, e, T_CHECK_QUIET)
-#define T_step_lt_iptr(s, a, e) T_flags_lt_long(a, e, T_CHECK_STEP(s))
-#define T_step_assert_lt_iptr(s, a, e) \
- T_flags_lt_long(a, e, T_CHECK_STEP(s) | T_CHECK_STOP)
-
-/** @} */
-
-/**
- * @defgroup RTEMSTestFrameworkChecksUIntptr Unsigned Pointer Value Checks
- *
- * @ingroup RTEMSTestFramework
- *
- * @brief Checks for unsigned pointer values (uintptr_t).
- *
- * @{
- */
-
-#define T_eq_uptr(a, e) T_flags_eq_ulong(a, e, 0)
-#define T_assert_eq_uptr(a, e) T_flags_eq_ulong(a, e, T_CHECK_STOP)
-#define T_quiet_eq_uptr(a, e) T_flags_eq_ulong(a, e, T_CHECK_QUIET)
-#define T_step_eq_uptr(s, a, e) T_flags_eq_ulong(a, e, T_CHECK_STEP(s))
-#define T_step_assert_eq_uptr(s, a, e) \
- T_flags_eq_ulong(a, e, T_CHECK_STEP(s) | T_CHECK_STOP)
-
-#define T_ne_uptr(a, e) T_flags_ne_ulong(a, e, 0)
-#define T_assert_ne_uptr(a, e) T_flags_ne_ulong(a, e, T_CHECK_STOP)
-#define T_quiet_ne_uptr(a, e) T_flags_ne_ulong(a, e, T_CHECK_QUIET)
-#define T_step_ne_uptr(s, a, e) T_flags_ne_ulong(a, e, T_CHECK_STEP(s))
-#define T_step_assert_ne_uptr(s, a, e) \
- T_flags_ne_ulong(a, e, T_CHECK_STEP(s) | T_CHECK_STOP)
-
-#define T_ge_uptr(a, e) T_flags_ge_ulong(a, e, 0)
-#define T_assert_ge_uptr(a, e) T_flags_ge_ulong(a, e, T_CHECK_STOP)
-#define T_quiet_ge_uptr(a, e) T_flags_ge_ulong(a, e, T_CHECK_QUIET)
-#define T_step_ge_uptr(s, a, e) T_flags_ge_ulong(a, e, T_CHECK_STEP(s))
-#define T_step_assert_ge_uptr(s, a, e) \
- T_flags_ge_ulong(a, e, T_CHECK_STEP(s) | T_CHECK_STOP)
-
-#define T_gt_uptr(a, e) T_flags_gt_ulong(a, e, 0)
-#define T_assert_gt_uptr(a, e) T_flags_gt_ulong(a, e, T_CHECK_STOP)
-#define T_quiet_gt_uptr(a, e) T_flags_gt_ulong(a, e, T_CHECK_QUIET)
-#define T_step_gt_uptr(s, a, e) T_flags_gt_ulong(a, e, T_CHECK_STEP(s))
-#define T_step_assert_gt_uptr(s, a, e) \
- T_flags_gt_ulong(a, e, T_CHECK_STEP(s) | T_CHECK_STOP)
-
-#define T_le_uptr(a, e) T_flags_le_ulong(a, e, 0)
-#define T_assert_le_uptr(a, e) T_flags_le_ulong(a, e, T_CHECK_STOP)
-#define T_quiet_le_uptr(a, e) T_flags_le_ulong(a, e, T_CHECK_QUIET)
-#define T_step_le_uptr(s, a, e) T_flags_le_ulong(a, e, T_CHECK_STEP(s))
-#define T_step_assert_le_uptr(s, a, e) \
- T_flags_le_ulong(a, e, T_CHECK_STEP(s) | T_CHECK_STOP)
-
-#define T_lt_uptr(a, e) T_flags_lt_ulong(a, e, 0)
-#define T_assert_lt_uptr(a, e) T_flags_lt_ulong(a, e, T_CHECK_STOP)
-#define T_quiet_lt_uptr(a, e) T_flags_lt_ulong(a, e, T_CHECK_QUIET)
-#define T_step_lt_uptr(s, a, e) T_flags_lt_ulong(a, e, T_CHECK_STEP(s))
-#define T_step_assert_lt_uptr(s, a, e) \
- T_flags_lt_ulong(a, e, T_CHECK_STEP(s) | T_CHECK_STOP)
-
-/** @} */
-
-/**
- * @defgroup RTEMSTestFrameworkChecksSSZ Signed Size Checks
- *
- * @ingroup RTEMSTestFramework
- *
- * @brief Checks for signed sizes (ssize_t).
- *
- * @{
- */
-
-#define T_eq_ssz(a, e) T_flags_eq_long(a, e, 0)
-#define T_assert_eq_ssz(a, e) T_flags_eq_long(a, e, T_CHECK_STOP)
-#define T_quiet_eq_ssz(a, e) T_flags_eq_long(a, e, T_CHECK_QUIET)
-#define T_step_eq_ssz(s, a, e) T_flags_eq_long(a, e, T_CHECK_STEP(s))
-#define T_step_assert_eq_ssz(s, a, e) \
- T_flags_eq_long(a, e, T_CHECK_STEP(s) | T_CHECK_STOP)
-
-#define T_ne_ssz(a, e) T_flags_ne_long(a, e, 0)
-#define T_assert_ne_ssz(a, e) T_flags_ne_long(a, e, T_CHECK_STOP)
-#define T_quiet_ne_ssz(a, e) T_flags_ne_long(a, e, T_CHECK_QUIET)
-#define T_step_ne_ssz(s, a, e) T_flags_ne_long(a, e, T_CHECK_STEP(s))
-#define T_step_assert_ne_ssz(s, a, e) \
- T_flags_ne_long(a, e, T_CHECK_STEP(s) | T_CHECK_STOP)
-
-#define T_ge_ssz(a, e) T_flags_ge_long(a, e, 0)
-#define T_assert_ge_ssz(a, e) T_flags_ge_long(a, e, T_CHECK_STOP)
-#define T_quiet_ge_ssz(a, e) T_flags_ge_long(a, e, T_CHECK_QUIET)
-#define T_step_ge_ssz(s, a, e) T_flags_ge_long(a, e, T_CHECK_STEP(s))
-#define T_step_assert_ge_ssz(s, a, e) \
- T_flags_ge_long(a, e, T_CHECK_STEP(s) | T_CHECK_STOP)
-
-#define T_gt_ssz(a, e) T_flags_gt_long(a, e, 0)
-#define T_assert_gt_ssz(a, e) T_flags_gt_long(a, e, T_CHECK_STOP)
-#define T_quiet_gt_ssz(a, e) T_flags_gt_long(a, e, T_CHECK_QUIET)
-#define T_step_gt_ssz(s, a, e) T_flags_gt_long(a, e, T_CHECK_STEP(s))
-#define T_step_assert_gt_ssz(s, a, e) \
- T_flags_gt_long(a, e, T_CHECK_STEP(s) | T_CHECK_STOP)
-
-#define T_le_ssz(a, e) T_flags_le_long(a, e, 0)
-#define T_assert_le_ssz(a, e) T_flags_le_long(a, e, T_CHECK_STOP)
-#define T_quiet_le_ssz(a, e) T_flags_le_long(a, e, T_CHECK_QUIET)
-#define T_step_le_ssz(s, a, e) T_flags_le_long(a, e, T_CHECK_STEP(s))
-#define T_step_assert_le_ssz(s, a, e) \
- T_flags_le_long(a, e, T_CHECK_STEP(s) | T_CHECK_STOP)
-
-#define T_lt_ssz(a, e) T_flags_lt_long(a, e, 0)
-#define T_assert_lt_ssz(a, e) T_flags_lt_long(a, e, T_CHECK_STOP)
-#define T_quiet_lt_ssz(a, e) T_flags_lt_long(a, e, T_CHECK_QUIET)
-#define T_step_lt_ssz(s, a, e) T_flags_lt_long(a, e, T_CHECK_STEP(s))
-#define T_step_assert_lt_ssz(s, a, e) \
- T_flags_lt_long(a, e, T_CHECK_STEP(s) | T_CHECK_STOP)
-
-/** @} */
-
-/**
- * @defgroup RTEMSTestFrameworkChecksSZ Size Checks
- *
- * @ingroup RTEMSTestFramework
- *
- * @brief Checks for sizes (size_t).
- *
- * @{
- */
-
-#define T_eq_sz(a, e) T_flags_eq_ulong(a, e, 0)
-#define T_assert_eq_sz(a, e) T_flags_eq_ulong(a, e, T_CHECK_STOP)
-#define T_quiet_eq_sz(a, e) T_flags_eq_ulong(a, e, T_CHECK_QUIET)
-#define T_step_eq_sz(s, a, e) T_flags_eq_ulong(a, e, T_CHECK_STEP(s))
-#define T_step_assert_eq_sz(s, a, e) \
- T_flags_eq_ulong(a, e, T_CHECK_STEP(s) | T_CHECK_STOP)
-
-#define T_ne_sz(a, e) T_flags_ne_ulong(a, e, 0)
-#define T_assert_ne_sz(a, e) T_flags_ne_ulong(a, e, T_CHECK_STOP)
-#define T_quiet_ne_sz(a, e) T_flags_ne_ulong(a, e, T_CHECK_QUIET)
-#define T_step_ne_sz(s, a, e) T_flags_ne_ulong(a, e, T_CHECK_STEP(s))
-#define T_step_assert_ne_sz(s, a, e) \
- T_flags_ne_ulong(a, e, T_CHECK_STEP(s) | T_CHECK_STOP)
-
-#define T_ge_sz(a, e) T_flags_ge_ulong(a, e, 0)
-#define T_assert_ge_sz(a, e) T_flags_ge_ulong(a, e, T_CHECK_STOP)
-#define T_quiet_ge_sz(a, e) T_flags_ge_ulong(a, e, T_CHECK_QUIET)
-#define T_step_ge_sz(s, a, e) T_flags_ge_ulong(a, e, T_CHECK_STEP(s))
-#define T_step_assert_ge_sz(s, a, e) \
- T_flags_ge_ulong(a, e, T_CHECK_STEP(s) | T_CHECK_STOP)
-
-#define T_gt_sz(a, e) T_flags_gt_ulong(a, e, 0)
-#define T_assert_gt_sz(a, e) T_flags_gt_ulong(a, e, T_CHECK_STOP)
-#define T_quiet_gt_sz(a, e) T_flags_gt_ulong(a, e, T_CHECK_QUIET)
-#define T_step_gt_sz(s, a, e) T_flags_gt_ulong(a, e, T_CHECK_STEP(s))
-#define T_step_assert_gt_sz(s, a, e) \
- T_flags_gt_ulong(a, e, T_CHECK_STEP(s) | T_CHECK_STOP)
-
-#define T_le_sz(a, e) T_flags_le_ulong(a, e, 0)
-#define T_assert_le_sz(a, e) T_flags_le_ulong(a, e, T_CHECK_STOP)
-#define T_quiet_le_sz(a, e) T_flags_le_ulong(a, e, T_CHECK_QUIET)
-#define T_step_le_sz(s, a, e) T_flags_le_ulong(a, e, T_CHECK_STEP(s))
-#define T_step_assert_le_sz(s, a, e) \
- T_flags_le_ulong(a, e, T_CHECK_STEP(s) | T_CHECK_STOP)
-
-#define T_lt_sz(a, e) T_flags_lt_ulong(a, e, 0)
-#define T_assert_lt_sz(a, e) T_flags_lt_ulong(a, e, T_CHECK_STOP)
-#define T_quiet_lt_sz(a, e) T_flags_lt_ulong(a, e, T_CHECK_QUIET)
-#define T_step_lt_sz(s, a, e) T_flags_lt_ulong(a, e, T_CHECK_STEP(s))
-#define T_step_assert_lt_sz(s, a, e) \
- T_flags_lt_ulong(a, e, T_CHECK_STEP(s) | T_CHECK_STOP)
-
-/** @} */
-
-/**
- * @defgroup RTEMSTestFrameworkChecksPSX POSIX Status and Error Number Checks
- *
- * @ingroup RTEMSTestFramework
- *
- * @brief Checks for POSIX status and error numbers.
- *
- * @{
- */
-
-const char *T_strerror(int);
-
-#define T_eno(a, e) T_flags_eno(a, e, 0)
-#define T_assert_eno(a, e) T_flags_eno(a, e, T_CHECK_STOP)
-#define T_quiet_eno(a, e) T_flags_eno(a, e, T_CHECK_QUIET)
-#define T_step_eno(s, a, e) T_flags_eno(a, e, T_CHECK_STEP(s))
-#define T_step_assert_eno(s, a, e) \
- T_flags_eno(a, e, T_CHECK_STEP(s) | T_CHECK_STOP)
-
-#define T_eno_success(a) T_flags_eno_success(a, 0)
-#define T_assert_eno_success(a) T_flags_eno_success(a, T_CHECK_STOP)
-#define T_quiet_eno_success(a) T_flags_eno_success(a, T_CHECK_QUIET)
-#define T_step_eno_success(s, a) T_flags_eno_success(a, T_CHECK_STEP(s))
-#define T_step_assert_eno_success(s, a) \
- T_flags_eno_success(a, T_CHECK_STEP(s) | T_CHECK_STOP)
-
-#define T_psx_error(a, eno) T_flags_psx_error(a, eno, 0)
-#define T_assert_psx_error(a, eno) T_flags_psx_error(a, eno, T_CHECK_STOP)
-#define T_quiet_psx_error(a, eno) T_flags_psx_error(a, eno, T_CHECK_QUIET)
-#define T_step_psx_error(s, a, eno) T_flags_psx_error(a, eno, T_CHECK_STEP(s))
-#define T_step_assert_psx_error(s, a, eno) \
- T_flags_psx_error(a, eno, T_CHECK_STEP(s) | T_CHECK_STOP)
-
-#define T_psx_success(a) T_flags_psx_success(a, 0)
-#define T_assert_psx_success(a) T_flags_psx_success(a, T_CHECK_STOP)
-#define T_quiet_psx_success(a) T_flags_psx_success(a, T_CHECK_QUIET)
-#define T_step_psx_success(s, a) T_flags_psx_success(a, T_CHECK_STEP(s))
-#define T_step_assert_psx_success(s, a) \
- T_flags_psx_success(a, T_CHECK_STEP(s) | T_CHECK_STOP)
-
-/** @} */
-
-#ifdef __rtems__
-void T_check_rsc(uint32_t, const T_check_context *, uint32_t);
-
-#define T_flags_rsc(a, e, flags) \
-{ \
- static const T_check_context T_check_instance = { \
- T_FILE_NAME, __LINE__, flags }; \
- T_check_rsc(a, &T_check_instance, e); \
-}
-
-void T_check_rsc_success(uint32_t, const T_check_context *);
-
-#define T_flags_rsc_success(a, flags) \
-{ \
- static const T_check_context T_check_instance = { \
- T_FILE_NAME, __LINE__, flags }; \
- T_check_rsc_success(a, &T_check_instance); \
-}
-
-/**
- * @defgroup RTEMSTestFrameworkChecksRSC RTEMS Status Code Checks
- *
- * @ingroup RTEMSTestFramework
- *
- * @brief Checks for RTEMS status codes (rtems_status_code).
- *
- * @{
- */
-
-#define T_rsc(a, e) T_flags_rsc(a, e, 0)
-#define T_assert_rsc(a, e) T_flags_rsc(a, e, T_CHECK_STOP)
-#define T_quiet_rsc(a, e) T_flags_rsc(a, e, T_CHECK_QUIET)
-#define T_step_rsc(s, a, e) T_flags_rsc(a, e, T_CHECK_STEP(s))
-#define T_step_assert_rsc(s, a, e) \
- T_flags_rsc(a, e, T_CHECK_STEP(s) | T_CHECK_STOP)
-
-#define T_rsc_success(a) T_flags_rsc_success(a, 0)
-#define T_assert_rsc_success(a) T_flags_rsc_success(a, T_CHECK_STOP)
-#define T_quiet_rsc_success(a) T_flags_rsc_success(a, T_CHECK_QUIET)
-#define T_step_rsc_success(s, a) T_flags_rsc_success(a, T_CHECK_STEP(s))
-#define T_step_assert_rsc_success(s, a) \
- T_flags_rsc_success(a, T_CHECK_STEP(s) | T_CHECK_STOP)
-
-/** @} */
-#endif /* __rtems__ */
-
-void T_plan(unsigned int);
-
-#define T_step(s, ...) T_flags_true(true, T_CHECK_STEP(s), __VA_ARGS__)
-#define T_step_assert(s, ...) \
- T_flags_true(true, T_CHECK_STEP(s) | T_CHECK_STOP, __VA_ARGS__)
-
-/**
- * @defgroup RTEMSTestFrameworkTime Time Services
- *
- * @ingroup RTEMSTestFramework
- *
- * @brief Time service functions.
- *
- * @{
- */
-
-#ifdef __rtems__
-typedef CPU_Counter_ticks T_ticks;
-#else
-typedef unsigned long T_ticks;
-#endif
-
-typedef uint64_t T_time;
-
-/* More than enough for sizeof("18446744073.709552765") */
-typedef char T_time_string[24];
-
-const char *T_time_to_string_ns(T_time, T_time_string);
-
-const char *T_time_to_string_us(T_time, T_time_string);
-
-const char *T_time_to_string_ms(T_time, T_time_string);
-
-const char *T_time_to_string_s(T_time, T_time_string);
-
-const char *T_ticks_to_string_ns(T_ticks, T_time_string);
-
-const char *T_ticks_to_string_us(T_ticks, T_time_string);
-
-const char *T_ticks_to_string_ms(T_ticks, T_time_string);
-
-const char *T_ticks_to_string_s(T_ticks, T_time_string);
-
-T_time T_ticks_to_time(T_ticks);
-
-T_ticks T_time_to_ticks(T_time);
-
-T_time T_seconds_and_nanoseconds_to_time(uint32_t, uint32_t);
-
-void T_time_to_seconds_and_nanoseconds(T_time, uint32_t *, uint32_t *);
-
-T_time T_now(void);
-
-#ifdef __rtems__
-static inline T_ticks
-T_tick(void)
-{
- return _CPU_Counter_read();
-}
-#else
-T_ticks T_tick(void);
-#endif
-
-T_time T_now_clock(void);
-
-T_time T_now_dummy(void);
-
-T_time T_now_tick(void);
-
-T_time T_case_begin_time(void);
-
-/** @} */
-
-void *T_malloc(size_t);
-
-void *T_calloc(size_t, size_t);
-
-void *T_zalloc(size_t, void (*)(void *));
-
-void T_free(void *);
-
-void T_register(void);
-
-typedef enum {
- T_EVENT_RUN_INITIALIZE_EARLY,
- T_EVENT_RUN_INITIALIZE_LATE,
- T_EVENT_CASE_EARLY,
- T_EVENT_CASE_BEGIN,
- T_EVENT_CASE_END,
- T_EVENT_CASE_LATE,
- T_EVENT_RUN_FINALIZE_EARLY,
- T_EVENT_RUN_FINALIZE_LATE
-} T_event;
-
-typedef void (*T_action)(T_event, const char *);
-
-typedef void (*T_putchar)(int, void *);
-
-typedef struct {
- const char *name;
- char *buf;
- size_t buf_size;
- T_putchar putchar;
- void *putchar_arg;
- T_verbosity verbosity;
- T_time (*now)(void);
- size_t action_count;
- const T_action *actions;
-} T_config;
-
-void T_putchar_default(int, void *);
-
-int T_main(const T_config *);
-
-bool T_is_runner(void);
-
-void T_run_initialize(const T_config *);
-
-void T_run_all(void);
-
-void T_run_by_name(const char *);
-
-void T_case_begin(const char *, const T_fixture *);
-
-void T_case_end(void);
-
-bool T_run_finalize(void);
-
-void T_set_putchar(T_putchar, void *, T_putchar *, void **);
-
-void *T_fixture_context(void);
-
-void T_set_fixture_context(void *);
-
-#ifdef __rtems__
-#define T_TEST_CASE_FIXTURE(name, fixture) \
-void T_case_body_##name(void); \
-T_case_context T_case_instance_##name = { \
- #name, \
- T_case_body_##name, \
- fixture, \
- NULL \
-}; \
-static T_case_context * const T_case_item_##name \
-__attribute((__section__(".rtemsroset._T.content.0." #name))) \
-__attribute((__used__)) = &T_case_instance_##name; \
-void T_case_body_##name(void)
-#else /* __rtems__ */
-#define T_TEST_CASE_FIXTURE(name, fixture) \
-void T_case_body_##name(void); \
-T_case_context T_case_instance_##name = { \
- #name, \
- T_case_body_##name, \
- fixture, \
- NULL \
-}; \
-__attribute((__constructor__)) static void \
-T_case_register_##name(void) \
-{ \
- T_case_register(&T_case_instance_##name); \
-} \
-void T_case_body_##name(void)
-#endif /* __rtems__ */
-
-#define T_TEST_CASE(name) T_TEST_CASE_FIXTURE(name, NULL)
-
-void T_report_hash_sha256(T_event, const char *);
-
-void T_check_heap(T_event, const char *);
-
-#ifdef __rtems__
-void T_check_task_context(T_event, const char *);
-
-void T_check_file_descriptors(T_event, const char *);
-
-void T_check_rtems_barriers(T_event, const char *);
-
-void T_check_rtems_extensions(T_event, const char *);
-
-void T_check_rtems_message_queues(T_event, const char *);
-
-void T_check_rtems_partitions(T_event, const char *);
-
-void T_check_rtems_periods(T_event, const char *);
-
-void T_check_rtems_regions(T_event, const char *);
-
-void T_check_rtems_semaphores(T_event, const char *);
-
-void T_check_rtems_tasks(T_event, const char *);
-
-void T_check_rtems_timers(T_event, const char *);
-
-void T_check_posix_keys(T_event, const char *);
-
-void T_check_posix_message_queues(T_event, const char *);
-
-void T_check_posix_semaphores(T_event, const char *);
-
-void T_check_posix_shms(T_event, const char *);
-
-void T_check_posix_threads(T_event, const char *);
-
-void T_check_posix_timers(T_event, const char *);
-#endif /* __rtems__ */
-
-/**
- * @defgroup RTEMSTestFrameworkDestructors Destructors
- *
- * @ingroup RTEMSTestFramework
- *
- * @brief Support to run destructors at the end of a test case.
- *
- * @{
- */
-
-typedef struct T_destructor {
- struct {
- struct T_destructor *le_next;
- struct T_destructor **le_prev;
- } node;
- void (*destroy)(struct T_destructor *);
-} T_destructor;
-
-void T_add_destructor(T_destructor *, void (*)(T_destructor *));
-
-void T_remove_destructor(T_destructor *);
-
-/** @} */
-
-/**
- * @defgroup RTEMSTestFrameworkMeasureRuntime Runtime Measurements
- *
- * @ingroup RTEMSTestFramework
- *
- * @brief Support to measure the runtime of code fragments.
- *
- * @{
- */
-
-typedef struct T_measure_runtime_context T_measure_runtime_context;
-
-typedef struct {
- size_t sample_count;
-} T_measure_runtime_config;
-
-typedef struct {
- const char *name;
- int flags;
- void (*setup)(void *);
- void (*body)(void *);
- bool (*teardown)(void *, T_ticks *, uint32_t, uint32_t, unsigned int);
- void *arg;
-} T_measure_runtime_request;
-
-#define T_MEASURE_RUNTIME_ALLOW_CLOCK_ISR 0x1
-
-#define T_MEASURE_RUNTIME_REPORT_SAMPLES 0x2
-
-#define T_MEASURE_RUNTIME_DISABLE_VALID_CACHE 0x10
-
-#define T_MEASURE_RUNTIME_DISABLE_HOT_CACHE 0x20
-
-#define T_MEASURE_RUNTIME_DISABLE_DIRTY_CACHE 0x40
-
-#define T_MEASURE_RUNTIME_DISABLE_MINOR_LOAD 0x80
-
-#define T_MEASURE_RUNTIME_DISABLE_MAX_LOAD 0x100
-
-T_measure_runtime_context *T_measure_runtime_create(
- const T_measure_runtime_config *);
-
-void T_measure_runtime(T_measure_runtime_context *,
- const T_measure_runtime_request *);
-
-/** @} */
-
-#ifdef __cplusplus
-}
-#endif /* __cplusplus */
-
-#endif /* THE_T_TEST_FRAMEWORK_H */
diff --git a/cpukit/libblock/src/media.c b/cpukit/libblock/src/media.c
index 5b2b06b5b2..c176e12243 100644
--- a/cpukit/libblock/src/media.c
+++ b/cpukit/libblock/src/media.c
@@ -420,26 +420,30 @@ static rtems_status_code process_event(
)
{
rtems_status_code sc = RTEMS_SUCCESSFUL;
+ rtems_status_code sc_retry = RTEMS_SUCCESSFUL;
rtems_media_state state = RTEMS_MEDIA_STATE_FAILED;
char *dest = NULL;
- sc = notify(event, RTEMS_MEDIA_STATE_INQUIRY, src, NULL);
- if (sc == RTEMS_SUCCESSFUL) {
- state = RTEMS_MEDIA_STATE_READY;
- } else {
- state = RTEMS_MEDIA_STATE_ABORTED;
- }
-
- sc = (*worker)(state, src, &dest, worker_arg);
- if (state == RTEMS_MEDIA_STATE_READY) {
+ do {
+ sc = notify(event, RTEMS_MEDIA_STATE_INQUIRY, src, NULL);
if (sc == RTEMS_SUCCESSFUL) {
- state = RTEMS_MEDIA_STATE_SUCCESS;
+ state = RTEMS_MEDIA_STATE_READY;
} else {
- state = RTEMS_MEDIA_STATE_FAILED;
+ state = RTEMS_MEDIA_STATE_ABORTED;
+ }
+
+ sc = (*worker)(state, src, &dest, worker_arg);
+ if (state == RTEMS_MEDIA_STATE_READY) {
+ if (sc == RTEMS_SUCCESSFUL) {
+ state = RTEMS_MEDIA_STATE_SUCCESS;
+ } else {
+ state = RTEMS_MEDIA_STATE_FAILED;
+ }
}
- }
- notify(event, state, src, dest);
+ sc_retry = notify(event, state, src, dest);
+ } while (state == RTEMS_MEDIA_STATE_FAILED
+ && sc_retry == RTEMS_INCORRECT_STATE);
remember_event(event, state, src, dest);
if (state == RTEMS_MEDIA_STATE_SUCCESS) {
@@ -504,6 +508,7 @@ static rtems_status_code mount_worker(
if (rv != 0) {
rmdir(mount_path);
free(mount_path);
+ (*mount_options.converter->handler->destroy)(mount_options.converter);
return RTEMS_IO_ERROR;
}
diff --git a/cpukit/libcsupport/src/free.c b/cpukit/libcsupport/src/free.c
index f4542e0c72..9f7c577852 100644
--- a/cpukit/libcsupport/src/free.c
+++ b/cpukit/libcsupport/src/free.c
@@ -23,6 +23,49 @@
#include "malloc_p.h"
#include <stdlib.h>
+#include <rtems/chain.h>
+
+static RTEMS_CHAIN_DEFINE_EMPTY( _Malloc_GC_list );
+
+RTEMS_INTERRUPT_LOCK_DEFINE( static, _Malloc_GC_lock, "Malloc GC" )
+
+static void *_Malloc_Get_deferred_free( void )
+{
+ rtems_interrupt_lock_context lock_context;
+ void *p;
+
+ rtems_interrupt_lock_acquire( &_Malloc_GC_lock, &lock_context );
+ p = rtems_chain_get_unprotected( &_Malloc_GC_list );
+ rtems_interrupt_lock_release( &_Malloc_GC_lock, &lock_context );
+
+ return p;
+}
+
+void _Malloc_Process_deferred_frees( void )
+{
+ rtems_chain_node *to_be_freed;
+
+ /*
+ * If some free's have been deferred, then do them now.
+ */
+ while ( ( to_be_freed = _Malloc_Get_deferred_free() ) != NULL ) {
+ free( to_be_freed );
+ }
+}
+
+static void _Malloc_Deferred_free( void *p )
+{
+ rtems_interrupt_lock_context lock_context;
+ rtems_chain_node *node;
+
+ node = (rtems_chain_node *) p;
+
+ rtems_interrupt_lock_acquire( &_Malloc_GC_lock, &lock_context );
+ rtems_chain_initialize_node( node );
+ rtems_chain_append_unprotected( &_Malloc_GC_list, node );
+ rtems_interrupt_lock_release( &_Malloc_GC_lock, &lock_context );
+}
+
void free(
void *ptr
)
diff --git a/cpukit/libcsupport/src/libiozeroiops.c b/cpukit/libcsupport/src/libiozeroiops.c
new file mode 100644
index 0000000000..b4533c7ae1
--- /dev/null
+++ b/cpukit/libcsupport/src/libiozeroiops.c
@@ -0,0 +1,46 @@
+/* SPDX-License-Identifier: BSD-2-Clause */
+
+/**
+ * @file
+ *
+ * @ingroup LibIOInternal
+ *
+ * @brief This source file provides rtems_libio_iops and
+ * rtems_libio_number_iops for a zero file descriptor application
+ * configuration.
+ */
+
+/*
+ * Copyright (C) 2020 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.
+ */
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#include <rtems/libio_.h>
+
+rtems_libio_t rtems_libio_iops[ 0 ];
+
+const uint32_t rtems_libio_number_iops = 0;
diff --git a/cpukit/libcsupport/src/malloc_deferred.c b/cpukit/libcsupport/src/malloc_deferred.c
index 62c231d2f8..f66dd54676 100644
--- a/cpukit/libcsupport/src/malloc_deferred.c
+++ b/cpukit/libcsupport/src/malloc_deferred.c
@@ -27,14 +27,9 @@
#include "malloc_p.h"
-#include <rtems/chain.h>
#include <rtems/score/sysstate.h>
#include <rtems/score/threaddispatch.h>
-static RTEMS_CHAIN_DEFINE_EMPTY( _Malloc_GC_list );
-
-RTEMS_INTERRUPT_LOCK_DEFINE( static, _Malloc_GC_lock, "Malloc GC" )
-
Malloc_System_state _Malloc_System_state( void )
{
System_state_Codes state = _System_state_Get();
@@ -52,28 +47,12 @@ Malloc_System_state _Malloc_System_state( void )
}
}
-static void *_Malloc_Get_deferred_free( void )
-{
- rtems_interrupt_lock_context lock_context;
- void *p;
-
- rtems_interrupt_lock_acquire( &_Malloc_GC_lock, &lock_context );
- p = rtems_chain_get_unprotected( &_Malloc_GC_list );
- rtems_interrupt_lock_release( &_Malloc_GC_lock, &lock_context );
-
- return p;
-}
-
-void _Malloc_Process_deferred_frees( void )
+RTEMS_WEAK void _Malloc_Process_deferred_frees( void )
{
- rtems_chain_node *to_be_freed;
-
/*
- * If some free's have been deferred, then do them now.
+ * Do nothing by default. If free() is used by the application, then a
+ * strong implementation of this function will be provided.
*/
- while ( ( to_be_freed = _Malloc_Get_deferred_free() ) != NULL ) {
- free( to_be_freed );
- }
}
void *rtems_heap_allocate_aligned_with_boundary(
@@ -125,19 +104,6 @@ void *rtems_heap_allocate_aligned_with_boundary(
return p;
}
-void _Malloc_Deferred_free( void *p )
-{
- rtems_interrupt_lock_context lock_context;
- rtems_chain_node *node;
-
- node = (rtems_chain_node *) p;
-
- rtems_interrupt_lock_acquire( &_Malloc_GC_lock, &lock_context );
- rtems_chain_initialize_node( node );
- rtems_chain_append_unprotected( &_Malloc_GC_list, node );
- rtems_interrupt_lock_release( &_Malloc_GC_lock, &lock_context );
-}
-
void *rtems_malloc( size_t size )
{
if ( size == 0 ) {
diff --git a/cpukit/libcsupport/src/malloc_p.h b/cpukit/libcsupport/src/malloc_p.h
index f3715a9966..cb26050ff1 100644
--- a/cpukit/libcsupport/src/malloc_p.h
+++ b/cpukit/libcsupport/src/malloc_p.h
@@ -25,8 +25,6 @@ typedef enum {
Malloc_System_state _Malloc_System_state( void );
-void _Malloc_Deferred_free( void * );
-
void _Malloc_Process_deferred_frees( void );
#ifdef __cplusplus
diff --git a/cpukit/libcsupport/src/newlibc_exit.c b/cpukit/libcsupport/src/newlibc_exit.c
index 650b692c74..d29214af3f 100644
--- a/cpukit/libcsupport/src/newlibc_exit.c
+++ b/cpukit/libcsupport/src/newlibc_exit.c
@@ -17,11 +17,8 @@
#include <stdio.h>
#include <unistd.h>
-/* FIXME: These defines are a blatant hack */
-
#if defined(__USE_INIT_FINI__)
- #if defined(__ARM_EABI__) || defined(__riscv) \
- || defined(__or1k__) || defined(__or1knd__)
+ #if CPU_USE_LIBC_INIT_FINI_ARRAY == TRUE
#define FINI_SYMBOL __libc_fini_array
#else
#define FINI_SYMBOL _fini
diff --git a/cpukit/libcsupport/src/termios.c b/cpukit/libcsupport/src/termios.c
index 75925cf8ec..829c2bf158 100644
--- a/cpukit/libcsupport/src/termios.c
+++ b/cpukit/libcsupport/src/termios.c
@@ -113,6 +113,9 @@ static rtems_task rtems_termios_txdaemon(rtems_task_argument argument);
#define TERMIOS_RX_PROC_EVENT RTEMS_EVENT_1
#define TERMIOS_RX_TERMINATE_EVENT RTEMS_EVENT_0
+static rtems_mutex rtems_termios_ttyMutex =
+ RTEMS_MUTEX_INITIALIZER( "termios" );
+
static void
rtems_termios_obtain (void)
{
diff --git a/cpukit/libcsupport/src/termiosinitialize.c b/cpukit/libcsupport/src/termiosinitialize.c
index 2aeba89ecc..2ea34f08b3 100644
--- a/cpukit/libcsupport/src/termiosinitialize.c
+++ b/cpukit/libcsupport/src/termiosinitialize.c
@@ -24,8 +24,6 @@
#include <rtems/termiostypes.h>
-rtems_mutex rtems_termios_ttyMutex = RTEMS_MUTEX_INITIALIZER( "termios" );
-
void
rtems_termios_device_lock_acquire_default(
rtems_termios_device_context *ctx,
diff --git a/cpukit/libdl/rtl-archive.c b/cpukit/libdl/rtl-archive.c
index eb7641b034..6eba1585b6 100644
--- a/cpukit/libdl/rtl-archive.c
+++ b/cpukit/libdl/rtl-archive.c
@@ -516,13 +516,13 @@ rtems_rtl_archives_load_config (rtems_rtl_archives* archives)
{
size_t ls = strlen (&s[r]);
size_t b = 0;
- while (b < ls && isspace (s[r + b]))
+ while (b < ls && isspace ((unsigned char) s[r + b]))
{
s[r + b] = '\0';
++b;
}
b = ls - 1;
- while (b > 0 && isspace (s[r + b]))
+ while (b > 0 && isspace ((unsigned char) s[r + b]))
{
s[r + b] = '\0';
--b;
diff --git a/cpukit/libfs/src/dosfs/msdos_init.c b/cpukit/libfs/src/dosfs/msdos_init.c
index 3ea6f104e8..2874172484 100644
--- a/cpukit/libfs/src/dosfs/msdos_init.c
+++ b/cpukit/libfs/src/dosfs/msdos_init.c
@@ -103,10 +103,12 @@ int rtems_dosfs_initialize(
int rc = 0;
const rtems_dosfs_mount_options *mount_options = data;
rtems_dosfs_convert_control *converter;
+ bool converter_created = false;
if (mount_options == NULL || mount_options->converter == NULL) {
converter = rtems_dosfs_create_default_converter();
+ converter_created = true;
} else {
converter = mount_options->converter;
}
@@ -117,6 +119,9 @@ int rtems_dosfs_initialize(
&msdos_file_handlers,
&msdos_dir_handlers,
converter);
+ if (rc != 0 && converter_created) {
+ (*converter->handler->destroy)(converter);
+ }
} else {
errno = ENOMEM;
rc = -1;
diff --git a/cpukit/libfs/src/imfs/ioman.c b/cpukit/libfs/src/imfs/ioman.c
index 59b93e400c..55fb1728b5 100644
--- a/cpukit/libfs/src/imfs/ioman.c
+++ b/cpukit/libfs/src/imfs/ioman.c
@@ -45,24 +45,3 @@ rtems_status_code rtems_io_register_name(
return RTEMS_SUCCESSFUL;
}
-
-rtems_status_code rtems_io_lookup_name(
- const char *name,
- rtems_driver_name_t *device_info
-)
-{
- rtems_status_code sc = RTEMS_SUCCESSFUL;
- struct stat st;
- int rv = stat( name, &st );
-
- if ( rv == 0 && S_ISCHR( st.st_mode ) ) {
- device_info->device_name = name;
- device_info->device_name_length = strlen( name );
- device_info->major = rtems_filesystem_dev_major_t( st.st_rdev );
- device_info->minor = rtems_filesystem_dev_minor_t( st.st_rdev );
- } else {
- sc = RTEMS_UNSATISFIED;
- }
-
- return sc;
-}
diff --git a/cpukit/libmisc/capture/rtems-trace-buffer-default.c b/cpukit/libmisc/capture/rtems-trace-buffer-default.c
new file mode 100644
index 0000000000..23c66cdc88
--- /dev/null
+++ b/cpukit/libmisc/capture/rtems-trace-buffer-default.c
@@ -0,0 +1,36 @@
+/*
+ * Copyright (c) 2015 Chris Johns <chrisj@rtems.org>
+ *
+ * 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.
+ */
+
+#include <rtems/trace/rtems-trace-buffer-vars.h>
+
+/**
+ * External Trace Linker and TBG data. We provide weak versions to allow us to
+ * link and be present in an application that has not been trace linked.
+ */
+
+/*
+ * Trace linker data.
+ */
+uint32_t __rtld_trace_names_size __attribute__ ((weak));
+const char *const __rtld_trace_names[1] __attribute__ ((weak));
+uint32_t __rtld_trace_enables_size __attribute__ ((weak));
+const uint32_t __rtld_trace_enables[1] __attribute__ ((weak));
+uint32_t __rtld_trace_triggers_size __attribute__ ((weak));
+const uint32_t __rtld_trace_triggers[1] __attribute__ ((weak));
+const __rtld_trace_sig __rtld_trace_signatures[1] __attribute__ ((weak));
+
+/*
+ * Trace buffer generator data.
+ */
+const bool __rtld_tbg_present __attribute__ ((weak));
+const uint32_t __rtld_tbg_mode __attribute__ ((weak));
+const uint32_t __rtld_tbg_buffer_size __attribute__ ((weak));
+uint32_t __rtld_tbg_buffer[1] __attribute__ ((weak));
+volatile uint32_t __rtld_tbg_buffer_in __attribute__ ((weak));
+volatile bool __rtld_tbg_finished __attribute__ ((weak));
+volatile bool __rtld_tbg_triggered __attribute__ ((weak));
diff --git a/cpukit/libmisc/capture/rtems-trace-buffer-vars.c b/cpukit/libmisc/capture/rtems-trace-buffer-vars.c
index b0f70707ea..ec24181253 100644
--- a/cpukit/libmisc/capture/rtems-trace-buffer-vars.c
+++ b/cpukit/libmisc/capture/rtems-trace-buffer-vars.c
@@ -6,36 +6,9 @@
* http://www.rtems.org/license/LICENSE.
*/
-#include <rtems.h>
-
#include <rtems/trace/rtems-trace-buffer-vars.h>
-/**
- * External Trace Linker and TBG data. We provide weak versions to allow us to
- * link and be present in an application that has not been trace linked.
- */
-
-/*
- * Trace linker data.
- */
-uint32_t __rtld_trace_names_size __attribute__ ((weak));
-const char *const __rtld_trace_names[1] __attribute__ ((weak));
-uint32_t __rtld_trace_enables_size __attribute__ ((weak));
-const uint32_t __rtld_trace_enables[1] __attribute__ ((weak));
-uint32_t __rtld_trace_triggers_size __attribute__ ((weak));
-const uint32_t __rtld_trace_triggers[1] __attribute__ ((weak));
-const __rtld_trace_sig __rtld_trace_signatures[1] __attribute__ ((weak));
-
-/*
- * Trace buffer generator data.
- */
-const bool __rtld_tbg_present __attribute__ ((weak));
-const uint32_t __rtld_tbg_mode __attribute__ ((weak));
-const uint32_t __rtld_tbg_buffer_size __attribute__ ((weak));
-uint32_t __rtld_tbg_buffer[1] __attribute__ ((weak));
-volatile uint32_t __rtld_tbg_buffer_in __attribute__ ((weak));
-volatile bool __rtld_tbg_finished __attribute__ ((weak));
-volatile bool __rtld_tbg_triggered __attribute__ ((weak));
+#include <rtems.h>
ISR_LOCK_DEFINE (static, __rtld_tbg_lock, "RTLD TBG")
diff --git a/cpukit/libmisc/rtems-fdt/rtems-fdt-shell.c b/cpukit/libmisc/rtems-fdt/rtems-fdt-shell.c
index b15103e53d..b0894c1d38 100644
--- a/cpukit/libmisc/rtems-fdt/rtems-fdt-shell.c
+++ b/cpukit/libmisc/rtems-fdt/rtems-fdt-shell.c
@@ -338,7 +338,7 @@ rtems_fdt_shell_set (int argc, char *argv[])
if (!rtems_fdt_get_value32 (argv[1], "reg", sizeof (uint32_t), &address))
return 1;
- if (isdigit (argv[mask_arg][0]))
+ if (isdigit ((unsigned char) argv[mask_arg][0]))
mask = strtoul (argv[mask_arg], 0, 0);
else
{
@@ -380,7 +380,7 @@ rtems_fdt_shell_cl (int argc, char *argv[])
if (!rtems_fdt_get_value32 (argv[1], "reg", sizeof (uint32_t), &address))
return 1;
- if (isdigit (argv[mask_arg][0]))
+ if (isdigit ((unsigned char) argv[mask_arg][0]))
mask = strtoul (argv[mask_arg], 0, 0);
else
{
@@ -426,7 +426,7 @@ rtems_fdt_shell_up (int argc, char *argv[])
if (!rtems_fdt_get_value32 (argv[1], "reg", sizeof (uint32_t), &address))
return 1;
- if (isdigit (argv[mask_arg][0]))
+ if (isdigit ((unsigned char) argv[mask_arg][0]))
mask = strtoul (argv[mask_arg], 0, 0);
else
{
@@ -473,7 +473,7 @@ rtems_fdt_shell_tst (int argc, char *argv[])
if (!rtems_fdt_get_value32 (argv[1], "reg", sizeof (uint32_t), &address))
return 1;
- if (isdigit (argv[mask_arg][0]))
+ if (isdigit ((unsigned char) argv[mask_arg][0]))
mask = strtoul (argv[mask_arg], 0, 0);
else
{
diff --git a/cpukit/libmisc/shell/main_dd.c b/cpukit/libmisc/shell/main_dd.c
index 1a715303ef..35cd826711 100644
--- a/cpukit/libmisc/shell/main_dd.c
+++ b/cpukit/libmisc/shell/main_dd.c
@@ -335,6 +335,21 @@ getfdtype(rtems_shell_dd_globals* globals, IO *io)
}
static void
+swapbytes(void *v, size_t len)
+{
+ unsigned char *p = v;
+ unsigned char t;
+
+ while (len > 1) {
+ t = p[0];
+ p[0] = p[1];
+ p[1] = t;
+ p += 2;
+ len -= 2;
+ }
+}
+
+static void
dd_in(rtems_shell_dd_globals* globals)
{
ssize_t n;
@@ -431,7 +446,7 @@ dd_in(rtems_shell_dd_globals* globals)
++st.swab;
--n;
}
- swab(in.dbp, in.dbp, (size_t)n);
+ swapbytes(in.dbp, (size_t)n);
}
in.dbp += in.dbrcnt;
diff --git a/cpukit/libmisc/shell/shell.c b/cpukit/libmisc/shell/shell.c
index 0b06e8b4d1..13ae411f9c 100644
--- a/cpukit/libmisc/shell/shell.c
+++ b/cpukit/libmisc/shell/shell.c
@@ -234,12 +234,16 @@ static void rtems_shell_clear_shell_env(void)
eno = pthread_setspecific(rtems_shell_current_env_key, NULL);
if (eno != 0)
rtems_error(0, "pthread_setspecific(shell_current_env_key): clear");
+}
- /*
- * Clear stdin and stdout file pointers of they will be closed
- */
+/*
+ * Clear stdin, stdout and stderr file pointers so they will not be closed.
+ */
+static void rtems_shell_clear_shell_std_handles(void)
+{
stdin = NULL;
stdout = NULL;
+ stderr = NULL;
}
/*
@@ -775,6 +779,7 @@ void rtems_shell_print_env(
{
if ( !shell_env ) {
printk( "shell_env is NULL\n" );
+
return;
}
printk( "shell_env=%p\n"
@@ -797,6 +802,7 @@ static rtems_task rtems_shell_task(rtems_task_argument task_argument)
rtems_shell_env_t *shell_env = (rtems_shell_env_t*) task_argument;
rtems_id wake_on_end = shell_env->wake_on_end;
rtems_shell_main_loop( shell_env );
+ rtems_shell_clear_shell_std_handles();
if (wake_on_end != RTEMS_INVALID_ID)
rtems_event_send (wake_on_end, RTEMS_EVENT_1);
rtems_task_exit();
@@ -872,6 +878,11 @@ bool rtems_shell_main_loop(
else
stdout = stderr;
} else if (strcmp(shell_env->output, "/dev/null") == 0) {
+ if (stdout == NULL) {
+ fprintf(stderr, "shell: stdout is NULLs\n");
+ rtems_shell_clear_shell_env();
+ return false;
+ }
fclose (stdout);
} else {
FILE *output = fopen(shell_env->output,
@@ -906,6 +917,13 @@ bool rtems_shell_main_loop(
}
if (!input_file) {
+ if (stdin == NULL) {
+ fprintf(stderr, "shell: stdin is NULLs\n");
+ if (stdoutToClose != NULL)
+ fclose(stdoutToClose);
+ rtems_shell_clear_shell_env();
+ return false;
+ }
/* Make a raw terminal, Linux Manuals */
if (tcgetattr(fileno(stdin), &previous_term) >= 0) {
term = previous_term;
@@ -967,7 +985,7 @@ bool rtems_shell_main_loop(
* keep on trucking.
*/
if (shell_env->login_check != NULL) {
- result = rtems_shell_login(shell_env, stdin,stdout);
+ result = rtems_shell_login(shell_env, stdin, stdout);
} else {
setuid(shell_env->uid);
setgid(shell_env->gid);
diff --git a/cpukit/libtest/t-test-busy-tick.c b/cpukit/libtest/t-test-busy-tick.c
new file mode 100644
index 0000000000..3613f8ed72
--- /dev/null
+++ b/cpukit/libtest/t-test-busy-tick.c
@@ -0,0 +1,121 @@
+/* SPDX-License-Identifier: BSD-2-Clause */
+
+/**
+ * @file
+ *
+ * @ingroup RTEMSTestFrameworkImpl
+ *
+ * @brief Implementation of T_get_one_clock_tick_busy().
+ */
+
+/*
+ * Copyright (C) 2014, 2020 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.
+ */
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#include <rtems/test.h>
+
+#include <rtems.h>
+
+static uint_fast32_t
+T_estimate_busy_loop_maximum(void)
+{
+ uint_fast32_t initial;
+ uint_fast32_t units;
+
+ initial = rtems_clock_get_ticks_since_boot();
+ units = 0;
+
+ while (initial == rtems_clock_get_ticks_since_boot()) {
+ ++units;
+ }
+
+ return units;
+}
+
+static uint_fast32_t
+T_wait_for_tick_change(void)
+{
+ uint_fast32_t initial;
+ uint_fast32_t now;
+
+ initial = rtems_clock_get_ticks_since_boot();
+
+ do {
+ now = rtems_clock_get_ticks_since_boot();
+ } while (now == initial);
+
+ return now;
+}
+
+uint_fast32_t
+T_get_one_clock_tick_busy(void)
+{
+ uint_fast32_t last;
+ uint_fast32_t now;
+ uint_fast32_t a;
+ uint_fast32_t b;
+ uint_fast32_t m;
+
+ /* Choose a lower bound */
+ a = 1;
+
+ /* Estimate an upper bound */
+
+ T_wait_for_tick_change();
+ b = 2 * T_estimate_busy_loop_maximum();
+
+ while (true) {
+ last = T_wait_for_tick_change();
+ T_busy(b);
+ now = rtems_clock_get_ticks_since_boot();
+
+ if (now != last) {
+ break;
+ }
+
+ b *= 2;
+ last = now;
+ }
+
+ /* Find a good value */
+ do {
+ m = (a + b) / 2;
+
+ last = T_wait_for_tick_change();
+ T_busy(m);
+ now = rtems_clock_get_ticks_since_boot();
+
+ if (now != last) {
+ b = m;
+ } else {
+ a = m;
+ }
+ } while (b - a > 1);
+
+ return m;
+}
diff --git a/cpukit/libtest/t-test-busy.c b/cpukit/libtest/t-test-busy.c
new file mode 100644
index 0000000000..3bf149b8bb
--- /dev/null
+++ b/cpukit/libtest/t-test-busy.c
@@ -0,0 +1,58 @@
+/* SPDX-License-Identifier: BSD-2-Clause */
+
+/**
+ * @file
+ *
+ * @ingroup RTEMSTestFrameworkImpl
+ *
+ * @brief Implementation of T_busy().
+ */
+
+/*
+ * Copyright (C) 2014, 2020 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.
+ */
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#include <rtems/test.h>
+
+/*
+ * It is important that we actually use the same T_busy() function at the
+ * various places. So, the compiler must not inline this function. Take care
+ * of link time optimization.
+ */
+__attribute__((__noinline__)) void
+T_busy(uint_fast32_t count)
+{
+ uint_fast32_t i;
+
+ i = 0;
+
+ do {
+ __asm__ volatile ("");
+ ++i;
+ } while (i < count);
+}
diff --git a/cpukit/libtest/t-test-checks-eno.c b/cpukit/libtest/t-test-checks-eno.c
index c33b196206..b80f1d110c 100644
--- a/cpukit/libtest/t-test-checks-eno.c
+++ b/cpukit/libtest/t-test-checks-eno.c
@@ -25,7 +25,7 @@
* POSSIBILITY OF SUCH DAMAGE.
*/
-#include <t.h>
+#include <rtems/test.h>
#include <errno.h>
@@ -134,12 +134,12 @@ const char *T_strerror(int eno)
}
}
-void T_check_eno(int a, const T_check_context *t, int e)
+void T_check_eno(const T_check_context *t, int a, int e)
{
- T_check_true(a == e, t, "%s == %s", T_strerror(a), T_strerror(e));
+ T_check(t, a == e, "%s == %s", T_strerror(a), T_strerror(e));
}
-void T_check_eno_success(int a, const T_check_context *t)
+void T_check_eno_success(const T_check_context *t, int a)
{
- T_check_eno(a, t, 0);
+ T_check_eno(t, a, 0);
}
diff --git a/cpukit/libtest/t-test-checks-psx.c b/cpukit/libtest/t-test-checks-psx.c
index 58e9fb64f5..fe2b375b8f 100644
--- a/cpukit/libtest/t-test-checks-psx.c
+++ b/cpukit/libtest/t-test-checks-psx.c
@@ -1,17 +1,17 @@
-#include <t.h>
+#include <rtems/test.h>
#include <errno.h>
-void T_check_psx_error(int a, const T_check_context *t, int eeno)
+void T_check_psx_error(const T_check_context *t, int a, int eeno)
{
int aeno;
aeno = errno;
- T_check_true(a == -1 && aeno == eeno, t, "%i == -1, %s == %s", a,
+ T_check(t, a == -1 && aeno == eeno, "%i == -1, %s == %s", a,
T_strerror(aeno), T_strerror(eeno));
}
-void T_check_psx_success(int a, const T_check_context *t)
+void T_check_psx_success(const T_check_context *t, int a)
{
- T_check_true(a == 0, t, "%i == 0, %s", a, T_strerror(errno));
+ T_check(t, a == 0, "%i == 0, %s", a, T_strerror(errno));
}
diff --git a/cpukit/libtest/t-test-checks.c b/cpukit/libtest/t-test-checks.c
index b9e1f7b5f5..c86596521b 100644
--- a/cpukit/libtest/t-test-checks.c
+++ b/cpukit/libtest/t-test-checks.c
@@ -25,304 +25,304 @@
* POSSIBILITY OF SUCH DAMAGE.
*/
-#include <t.h>
+#include <rtems/test.h>
#include <inttypes.h>
void
-T_check_eq_ptr(const void *a, const T_check_context_msg *t, const void *e)
+T_check_eq_ptr(const T_check_context_msg *t, const void *a, const void *e)
{
- T_check_true(a == e, &t->base, "%s", t->msg);
+ T_check(&t->base, a == e, "%s", t->msg);
}
void
-T_check_ne_ptr(const void *a, const T_check_context_msg *t, const void *e)
+T_check_ne_ptr(const T_check_context_msg *t, const void *a, const void *e)
{
- T_check_true(a != e, &t->base, "%s", t->msg);
+ T_check(&t->base, a != e, "%s", t->msg);
}
void
-T_check_null(const void *a, const T_check_context_msg *t)
+T_check_null(const T_check_context_msg *t, const void *a)
{
- T_check_true(a == NULL, &t->base, "%s == NULL", t->msg);
+ T_check(&t->base, a == NULL, "%s == NULL", t->msg);
}
void
-T_check_not_null(const void *a, const T_check_context_msg *t)
+T_check_not_null(const T_check_context_msg *t, const void *a)
{
- T_check_true(a != NULL, &t->base, "%s != NULL", t->msg);
+ T_check(&t->base, a != NULL, "%s != NULL", t->msg);
}
void
-T_check_eq_mem(const void *a, const T_check_context_msg *t, const void *e,
+T_check_eq_mem(const T_check_context_msg *t, const void *a, const void *e,
size_t n)
{
- T_check_true(memcmp(a, e, n) == 0, &t->base, "%s", t->msg);
+ T_check(&t->base, memcmp(a, e, n) == 0, "%s", t->msg);
}
void
-T_check_ne_mem(const void *a, const T_check_context_msg *t, const void *e,
+T_check_ne_mem(const T_check_context_msg *t, const void *a, const void *e,
size_t n)
{
- T_check_true(memcmp(a, e, n) != 0, &t->base, "%s", t->msg);
+ T_check(&t->base, memcmp(a, e, n) != 0, "%s", t->msg);
}
void
-T_check_eq_str(const char *a, const T_check_context *t, const char *e)
+T_check_eq_str(const T_check_context *t, const char *a, const char *e)
{
- T_check_true(strcmp(a, e) == 0, t, "\"%s\" == \"%s\"", a, e);
+ T_check(t, strcmp(a, e) == 0, "\"%s\" == \"%s\"", a, e);
}
void
-T_check_ne_str(const char *a, const T_check_context *t, const char *e)
+T_check_ne_str(const T_check_context *t, const char *a, const char *e)
{
- T_check_true(strcmp(a, e) != 0, t, "\"%s\" != \"%s\"", a, e);
+ T_check(t, strcmp(a, e) != 0, "\"%s\" != \"%s\"", a, e);
}
void
-T_check_eq_nstr(const char *a, const T_check_context *t, const char *e, size_t n)
+T_check_eq_nstr(const T_check_context *t, const char *a, const char *e, size_t n)
{
- T_check_true(strncmp(a, e, n) == 0, t, "\"%.*s\" == \"%.*s\"", (int)n, a,
+ T_check(t, strncmp(a, e, n) == 0, "\"%.*s\" == \"%.*s\"", (int)n, a,
(int)n, e);
}
void
-T_check_ne_nstr(const char *a, const T_check_context *t, const char *e, size_t n)
+T_check_ne_nstr(const T_check_context *t, const char *a, const char *e, size_t n)
{
- T_check_true(strncmp(a, e, n) != 0, t, "\"%.*s\" != \"%.*s\"", (int)n, a,
+ T_check(t, strncmp(a, e, n) != 0, "\"%.*s\" != \"%.*s\"", (int)n, a,
(int)n, e);
}
void
-T_check_eq_char(char a, const T_check_context *t, char e)
+T_check_eq_char(const T_check_context *t, char a, char e)
{
- T_check_true(a == e, t, "'%c' == '%c'", a, e);
+ T_check(t, a == e, "'%c' == '%c'", a, e);
}
void
-T_check_ne_char(char a, const T_check_context *t, char e)
+T_check_ne_char(const T_check_context *t, char a, char e)
{
- T_check_true(a != e, t, "'%c' != '%c'", a, e);
+ T_check(t, a != e, "'%c' != '%c'", a, e);
}
void
-T_check_eq_int(int a, const T_check_context *t, int e)
+T_check_eq_int(const T_check_context *t, int a, int e)
{
- T_check_true(a == e, t, "%i == %i", a, e);
+ T_check(t, a == e, "%i == %i", a, e);
}
void
-T_check_ne_int(int a, const T_check_context *t, int e)
+T_check_ne_int(const T_check_context *t, int a, int e)
{
- T_check_true(a != e, t, "%i != %i", a, e);
+ T_check(t, a != e, "%i != %i", a, e);
}
void
-T_check_ge_int(int a, const T_check_context *t, int e)
+T_check_ge_int(const T_check_context *t, int a, int e)
{
- T_check_true(a >= e, t, "%i >= %i", a, e);
+ T_check(t, a >= e, "%i >= %i", a, e);
}
void
-T_check_gt_int(int a, const T_check_context *t, int e)
+T_check_gt_int(const T_check_context *t, int a, int e)
{
- T_check_true(a > e, t, "%i > %i", a, e);
+ T_check(t, a > e, "%i > %i", a, e);
}
void
-T_check_le_int(int a, const T_check_context *t, int e)
+T_check_le_int(const T_check_context *t, int a, int e)
{
- T_check_true(a <= e, t, "%i <= %i", a, e);
+ T_check(t, a <= e, "%i <= %i", a, e);
}
void
-T_check_lt_int(int a, const T_check_context *t, int e)
+T_check_lt_int(const T_check_context *t, int a, int e)
{
- T_check_true(a < e, t, "%i < %i", a, e);
+ T_check(t, a < e, "%i < %i", a, e);
}
void
-T_check_eq_uint(unsigned int a, const T_check_context *t, unsigned int e)
+T_check_eq_uint(const T_check_context *t, unsigned int a, unsigned int e)
{
- T_check_true(a == e, t, "%u == %u", a, e);
+ T_check(t, a == e, "%u == %u", a, e);
}
void
-T_check_ne_uint(unsigned int a, const T_check_context *t, unsigned int e)
+T_check_ne_uint(const T_check_context *t, unsigned int a, unsigned int e)
{
- T_check_true(a != e, t, "%u != %u", a, e);
+ T_check(t, a != e, "%u != %u", a, e);
}
void
-T_check_ge_uint(unsigned int a, const T_check_context *t, unsigned int e)
+T_check_ge_uint(const T_check_context *t, unsigned int a, unsigned int e)
{
- T_check_true(a >= e, t, "%u >= %u", a, e);
+ T_check(t, a >= e, "%u >= %u", a, e);
}
void
-T_check_gt_uint(unsigned int a, const T_check_context *t, unsigned int e)
+T_check_gt_uint(const T_check_context *t, unsigned int a, unsigned int e)
{
- T_check_true(a > e, t, "%u > %u", a, e);
+ T_check(t, a > e, "%u > %u", a, e);
}
void
-T_check_le_uint(unsigned int a, const T_check_context *t, unsigned int e)
+T_check_le_uint(const T_check_context *t, unsigned int a, unsigned int e)
{
- T_check_true(a <= e, t, "%u <= %u", a, e);
+ T_check(t, a <= e, "%u <= %u", a, e);
}
void
-T_check_lt_uint(unsigned int a, const T_check_context *t, unsigned int e)
+T_check_lt_uint(const T_check_context *t, unsigned int a, unsigned int e)
{
- T_check_true(a < e, t, "%u < %u", a, e);
+ T_check(t, a < e, "%u < %u", a, e);
}
void
-T_check_eq_long(long a, const T_check_context *t, long e)
+T_check_eq_long(const T_check_context *t, long a, long e)
{
- T_check_true(a == e, t, "%li == %li", a, e);
+ T_check(t, a == e, "%li == %li", a, e);
}
void
-T_check_ne_long(long a, const T_check_context *t, long e)
+T_check_ne_long(const T_check_context *t, long a, long e)
{
- T_check_true(a != e, t, "%li != %li", a, e);
+ T_check(t, a != e, "%li != %li", a, e);
}
void
-T_check_ge_long(long a, const T_check_context *t, long e)
+T_check_ge_long(const T_check_context *t, long a, long e)
{
- T_check_true(a >= e, t, "%li >= %li", a, e);
+ T_check(t, a >= e, "%li >= %li", a, e);
}
void
-T_check_gt_long(long a, const T_check_context *t, long e)
+T_check_gt_long(const T_check_context *t, long a, long e)
{
- T_check_true(a > e, t, "%li > %li", a, e);
+ T_check(t, a > e, "%li > %li", a, e);
}
void
-T_check_le_long(long a, const T_check_context *t, long e)
+T_check_le_long(const T_check_context *t, long a, long e)
{
- T_check_true(a <= e, t, "%li <= %li", a, e);
+ T_check(t, a <= e, "%li <= %li", a, e);
}
void
-T_check_lt_long(long a, const T_check_context *t, long e)
+T_check_lt_long(const T_check_context *t, long a, long e)
{
- T_check_true(a < e, t, "%li < %li", a, e);
+ T_check(t, a < e, "%li < %li", a, e);
}
void
-T_check_eq_ulong(unsigned long a, const T_check_context *t, unsigned long e)
+T_check_eq_ulong(const T_check_context *t, unsigned long a, unsigned long e)
{
- T_check_true(a == e, t, "%lu == %lu", a, e);
+ T_check(t, a == e, "%lu == %lu", a, e);
}
void
-T_check_ne_ulong(unsigned long a, const T_check_context *t, unsigned long e)
+T_check_ne_ulong(const T_check_context *t, unsigned long a, unsigned long e)
{
- T_check_true(a != e, t, "%lu != %lu", a, e);
+ T_check(t, a != e, "%lu != %lu", a, e);
}
void
-T_check_ge_ulong(unsigned long a, const T_check_context *t, unsigned long e)
+T_check_ge_ulong(const T_check_context *t, unsigned long a, unsigned long e)
{
- T_check_true(a >= e, t, "%lu >= %lu", a, e);
+ T_check(t, a >= e, "%lu >= %lu", a, e);
}
void
-T_check_gt_ulong(unsigned long a, const T_check_context *t, unsigned long e)
+T_check_gt_ulong(const T_check_context *t, unsigned long a, unsigned long e)
{
- T_check_true(a > e, t, "%lu > %lu", a, e);
+ T_check(t, a > e, "%lu > %lu", a, e);
}
void
-T_check_le_ulong(unsigned long a, const T_check_context *t, unsigned long e)
+T_check_le_ulong(const T_check_context *t, unsigned long a, unsigned long e)
{
- T_check_true(a <= e, t, "%lu <= %lu", a, e);
+ T_check(t, a <= e, "%lu <= %lu", a, e);
}
void
-T_check_lt_ulong(unsigned long a, const T_check_context *t, unsigned long e)
+T_check_lt_ulong(const T_check_context *t, unsigned long a, unsigned long e)
{
- T_check_true(a < e, t, "%lu < %lu", a, e);
+ T_check(t, a < e, "%lu < %lu", a, e);
}
void
-T_check_eq_ll(long long a, const T_check_context *t, long long e)
+T_check_eq_ll(const T_check_context *t, long long a, long long e)
{
- T_check_true(a == e, t, "%lli == %lli", a, e);
+ T_check(t, a == e, "%lli == %lli", a, e);
}
void
-T_check_ne_ll(long long a, const T_check_context *t, long long e)
+T_check_ne_ll(const T_check_context *t, long long a, long long e)
{
- T_check_true(a != e, t, "%lli != %lli", a, e);
+ T_check(t, a != e, "%lli != %lli", a, e);
}
void
-T_check_ge_ll(long long a, const T_check_context *t, long long e)
+T_check_ge_ll(const T_check_context *t, long long a, long long e)
{
- T_check_true(a >= e, t, "%lli >= %lli", a, e);
+ T_check(t, a >= e, "%lli >= %lli", a, e);
}
void
-T_check_gt_ll(long long a, const T_check_context *t, long long e)
+T_check_gt_ll(const T_check_context *t, long long a, long long e)
{
- T_check_true(a > e, t, "%lli > %lli", a, e);
+ T_check(t, a > e, "%lli > %lli", a, e);
}
void
-T_check_le_ll(long long a, const T_check_context *t, long long e)
+T_check_le_ll(const T_check_context *t, long long a, long long e)
{
- T_check_true(a <= e, t, "%lli <= %lli", a, e);
+ T_check(t, a <= e, "%lli <= %lli", a, e);
}
void
-T_check_lt_ll(long long a, const T_check_context *t, long long e)
+T_check_lt_ll(const T_check_context *t, long long a, long long e)
{
- T_check_true(a < e, t, "%lli < %lli", a, e);
+ T_check(t, a < e, "%lli < %lli", a, e);
}
void
-T_check_eq_ull(unsigned long long a, const T_check_context *t,
+T_check_eq_ull(const T_check_context *t, unsigned long long a,
unsigned long long e)
{
- T_check_true(a == e, t, "%llu == %llu", a, e);
+ T_check(t, a == e, "%llu == %llu", a, e);
}
void
-T_check_ne_ull(unsigned long long a, const T_check_context *t,
+T_check_ne_ull(const T_check_context *t, unsigned long long a,
unsigned long long e)
{
- T_check_true(a != e, t, "%llu != %llu", a, e);
+ T_check(t, a != e, "%llu != %llu", a, e);
}
void
-T_check_ge_ull(unsigned long long a, const T_check_context *t,
+T_check_ge_ull(const T_check_context *t, unsigned long long a,
unsigned long long e)
{
- T_check_true(a >= e, t, "%llu >= %llu", a, e);
+ T_check(t, a >= e, "%llu >= %llu", a, e);
}
void
-T_check_gt_ull(unsigned long long a, const T_check_context *t,
+T_check_gt_ull(const T_check_context *t, unsigned long long a,
unsigned long long e)
{
- T_check_true(a > e, t, "%llu > %llu", a, e);
+ T_check(t, a > e, "%llu > %llu", a, e);
}
void
-T_check_le_ull(unsigned long long a, const T_check_context *t,
+T_check_le_ull(const T_check_context *t, unsigned long long a,
unsigned long long e)
{
- T_check_true(a <= e, t, "%llu <= %llu", a, e);
+ T_check(t, a <= e, "%llu <= %llu", a, e);
}
void
-T_check_lt_ull(unsigned long long a, const T_check_context *t,
+T_check_lt_ull(const T_check_context *t, unsigned long long a,
unsigned long long e)
{
- T_check_true(a < e, t, "%llu < %llu", a, e);
+ T_check(t, a < e, "%llu < %llu", a, e);
}
diff --git a/cpukit/libtest/t-test-hash-sha256.c b/cpukit/libtest/t-test-hash-sha256.c
index 4793a508e5..25584cce14 100644
--- a/cpukit/libtest/t-test-hash-sha256.c
+++ b/cpukit/libtest/t-test-hash-sha256.c
@@ -25,7 +25,7 @@
* POSSIBILITY OF SUCH DAMAGE.
*/
-#include <t.h>
+#include <rtems/test.h>
#if defined(__rtems__)
#include <sha256.h>
diff --git a/cpukit/libtest/t-test-interrupt.c b/cpukit/libtest/t-test-interrupt.c
new file mode 100644
index 0000000000..5e17043313
--- /dev/null
+++ b/cpukit/libtest/t-test-interrupt.c
@@ -0,0 +1,486 @@
+/* SPDX-License-Identifier: BSD-2-Clause */
+
+/**
+ * @file
+ *
+ * @ingroup RTEMSTestFrameworkImpl
+ *
+ * @brief Implementation of T_interrupt_test().
+ */
+
+/*
+ * Copyright (C) 2020 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.
+ */
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#include <rtems/test.h>
+
+#include <rtems/score/atomic.h>
+#include <rtems/score/percpu.h>
+#include <rtems/score/thread.h>
+#include <rtems/score/timecounter.h>
+#include <rtems/score/timestampimpl.h>
+#include <rtems/score/userextimpl.h>
+#include <rtems/score/watchdogimpl.h>
+
+#ifdef RTEMS_SMP
+#include <rtems/score/smpimpl.h>
+#endif
+
+typedef T_interrupt_test_state (*T_interrupt_test_handler)(void *);
+
+#define T_INTERRUPT_SAMPLE_COUNT 8
+
+typedef struct {
+ uint_fast32_t one_tick_busy;
+ int64_t t0;
+ Thread_Control *self;
+ Atomic_Uint state;
+ void (*prepare)(void *);
+ void (*action)(void *);
+ T_interrupt_test_state (*interrupt)(void *);
+ void (*blocked)(void *);
+ void *arg;
+#ifdef RTEMS_SMP
+ Per_CPU_Job job;
+ Per_CPU_Job_context job_context;
+#endif
+ Watchdog_Control wdg;
+ User_extensions_Control ext;
+ T_fixture_node node;
+} T_interrupt_context;
+
+typedef struct {
+ int64_t t;
+ int64_t d;
+} T_interrupt_clock_time;
+
+static void
+T_interrupt_sort(T_interrupt_clock_time *ct, size_t n)
+{
+ size_t i;
+
+ /* Bubble sort */
+ for (i = 1; i < n ; ++i) {
+ size_t j;
+
+ for (j = 0; j < n - i; ++j) {
+ if (ct[j].d > ct[j + 1].d) {
+ T_interrupt_clock_time tmp;
+
+ tmp = ct[j];
+ ct[j] = ct[j + 1];
+ ct[j + 1] = tmp;
+ }
+ }
+ }
+}
+
+static int64_t
+T_interrupt_time_close_to_tick(void)
+{
+ Watchdog_Interval c0;
+ Watchdog_Interval c1;
+ T_interrupt_clock_time ct[12];
+ Timestamp_Control t;
+ int32_t ns_per_tick;
+ size_t i;
+ size_t n;
+
+ ns_per_tick = (int32_t)_Watchdog_Nanoseconds_per_tick;
+ n = RTEMS_ARRAY_SIZE(ct);
+ c0 = _Watchdog_Ticks_since_boot;
+
+ for (i = 0; i < n; ++i) {
+ do {
+ c1 = _Watchdog_Ticks_since_boot;
+ t = _Timecounter_Sbinuptime();
+ } while (c0 == c1);
+
+ c0 = c1;
+ ct[i].t = sbttons(t);
+ }
+
+ for (i = 1; i < n; ++i) {
+ int64_t d;
+
+ d = (ct[i].t - ct[1].t) % ns_per_tick;
+
+ if (d > ns_per_tick / 2) {
+ d -= ns_per_tick;
+ }
+
+ ct[i].d = d;
+ }
+
+ /*
+ * Use the median and not the arithmetic mean since on simulator
+ * platforms there may be outliers.
+ */
+ T_interrupt_sort(&ct[1], n - 1);
+ return ct[1 + (n - 1) / 2].t;
+}
+
+static void
+T_interrupt_watchdog(Watchdog_Control *wdg)
+{
+ T_interrupt_context *ctx;
+ ISR_Level level;
+ T_interrupt_test_state state;
+ unsigned int expected;
+
+ ctx = RTEMS_CONTAINER_OF(wdg, T_interrupt_context, wdg);
+
+ _ISR_Local_disable(level);
+ _Watchdog_Per_CPU_insert_ticks(&ctx->wdg,
+ _Watchdog_Get_CPU(&ctx->wdg), 1);
+ _ISR_Local_enable(level);
+
+ state = (*ctx->interrupt)(ctx->arg);
+
+ expected = T_INTERRUPT_TEST_ACTION;
+ _Atomic_Compare_exchange_uint(&ctx->state, &expected,
+ state, ATOMIC_ORDER_RELAXED, ATOMIC_ORDER_RELAXED);
+}
+
+static void
+T_interrupt_watchdog_insert(T_interrupt_context *ctx)
+{
+ ISR_Level level;
+
+ _ISR_Local_disable(level);
+ _Watchdog_Per_CPU_insert_ticks(&ctx->wdg, _Per_CPU_Get(), 1);
+ _ISR_Local_enable(level);
+}
+
+static void
+T_interrupt_watchdog_remove(T_interrupt_context *ctx)
+{
+ ISR_Level level;
+
+ _ISR_Local_disable(level);
+ _Watchdog_Per_CPU_remove_ticks(&ctx->wdg);
+ _ISR_Local_enable(level);
+}
+
+static void
+T_interrupt_init_once(T_interrupt_context *ctx)
+{
+ ctx->t0 = T_interrupt_time_close_to_tick();
+ ctx->one_tick_busy = T_get_one_clock_tick_busy();
+}
+
+static T_interrupt_test_state
+T_interrupt_continue(void *arg)
+{
+ (void)arg;
+ return T_INTERRUPT_TEST_CONTINUE;
+}
+
+static void
+T_interrupt_do_nothing(void *arg)
+{
+ (void)arg;
+}
+
+#ifdef RTEMS_SMP
+static void
+T_interrupt_blocked(void *arg)
+{
+ T_interrupt_context *ctx;
+
+ ctx = arg;
+ (*ctx->blocked)(ctx->arg);
+}
+#endif
+
+static void T_interrupt_thread_switch(Thread_Control *, Thread_Control *);
+
+static T_interrupt_context T_interrupt_instance = {
+ .interrupt = T_interrupt_continue,
+ .blocked = T_interrupt_do_nothing,
+#ifdef RTEMS_SMP
+ .job = {
+ .context = &T_interrupt_instance.job_context
+ },
+ .job_context = {
+ .handler = T_interrupt_blocked,
+ .arg = &T_interrupt_instance
+ },
+#endif
+ .wdg = WATCHDOG_INITIALIZER(T_interrupt_watchdog),
+ .ext = {
+ .Callouts = {
+ .thread_switch = T_interrupt_thread_switch
+ }
+ }
+};
+
+T_interrupt_test_state
+T_interrupt_test_change_state(T_interrupt_test_state expected_state,
+ T_interrupt_test_state desired_state)
+{
+ T_interrupt_context *ctx;
+ unsigned int expected;
+
+ ctx = &T_interrupt_instance;
+ expected = expected_state;
+ _Atomic_Compare_exchange_uint(&ctx->state, &expected,
+ desired_state, ATOMIC_ORDER_RELAXED, ATOMIC_ORDER_RELAXED);
+
+ return expected;
+}
+
+T_interrupt_test_state
+T_interrupt_test_get_state(void)
+{
+ T_interrupt_context *ctx;
+
+ ctx = &T_interrupt_instance;
+ return _Atomic_Load_uint(&ctx->state, ATOMIC_ORDER_RELAXED);
+}
+
+void
+T_interrupt_test_busy_wait_for_interrupt(void)
+{
+ T_interrupt_context *ctx;
+ unsigned int state;
+
+ ctx = &T_interrupt_instance;
+
+ do {
+ state = _Atomic_Load_uint(&ctx->state, ATOMIC_ORDER_RELAXED);
+ } while (state == T_INTERRUPT_TEST_ACTION);
+}
+
+static void
+T_interrupt_thread_switch(Thread_Control *executing, Thread_Control *heir)
+{
+ T_interrupt_context *ctx;
+
+ (void)heir;
+ ctx = &T_interrupt_instance;
+
+ if (ctx->self == executing) {
+ T_interrupt_test_state state;
+
+ state = _Atomic_Load_uint(&ctx->state, ATOMIC_ORDER_RELAXED);
+
+ if (state != T_INTERRUPT_TEST_INITIAL) {
+#ifdef RTEMS_SMP
+ Per_CPU_Control *cpu_self;
+
+ /*
+ * In SMP configurations, the thread switch extension
+ * runs in a very restricted environment. Interrupts
+ * are disabled and the caller owns the per-CPU lock.
+ * In order to avoid deadlocks at SMP lock level, we
+ * have to use an SMP job which runs later in the
+ * context of the inter-processor interrupt.
+ */
+ cpu_self = _Per_CPU_Get();
+ _Per_CPU_Add_job(cpu_self, &ctx->job);
+ _SMP_Send_message(_Per_CPU_Get_index(cpu_self),
+ SMP_MESSAGE_PERFORM_JOBS);
+#else
+ (*ctx->blocked)(ctx->arg);
+#endif
+ }
+ }
+}
+
+static T_interrupt_context *
+T_interrupt_setup(const T_interrupt_test_config *config, void *arg)
+{
+ T_interrupt_context *ctx;
+
+ T_quiet_assert_not_null(config->action);
+ T_quiet_assert_not_null(config->interrupt);
+ ctx = &T_interrupt_instance;
+ ctx->self = _Thread_Get_executing();
+ ctx->arg = arg;
+ ctx->interrupt = config->interrupt;
+
+ if (config->blocked != NULL) {
+ ctx->blocked = config->blocked;
+ }
+
+ if (ctx->t0 == 0) {
+ T_interrupt_init_once(ctx);
+ }
+
+ _User_extensions_Add_set(&ctx->ext);
+ T_interrupt_watchdog_insert(ctx);
+ return ctx;
+}
+
+static void
+T_interrupt_teardown(void *arg)
+{
+ T_interrupt_context *ctx;
+
+ ctx = arg;
+ ctx->interrupt = T_interrupt_continue;
+ ctx->blocked = T_interrupt_do_nothing;
+ T_interrupt_watchdog_remove(ctx);
+ _User_extensions_Remove_set(&ctx->ext);
+ ctx->self = NULL;
+ ctx->arg = NULL;
+}
+
+static const T_fixture T_interrupt_fixture = {
+ .teardown = T_interrupt_teardown,
+ .initial_context = &T_interrupt_instance
+};
+
+T_interrupt_test_state
+T_interrupt_test(const T_interrupt_test_config *config, void *arg)
+{
+ T_interrupt_context *ctx;
+ uint_fast32_t lower_bound[T_INTERRUPT_SAMPLE_COUNT];
+ uint_fast32_t upper_bound[T_INTERRUPT_SAMPLE_COUNT];
+ uint_fast32_t lower_sum;
+ uint_fast32_t upper_sum;
+ int32_t ns_per_tick;
+ size_t sample;
+ uint32_t iter;
+
+ ctx = T_interrupt_setup(config, arg);
+ T_push_fixture(&ctx->node, &T_interrupt_fixture);
+ ns_per_tick = (int32_t)_Watchdog_Nanoseconds_per_tick;
+ lower_sum = 0;
+ upper_sum = T_INTERRUPT_SAMPLE_COUNT * ctx->one_tick_busy;
+
+ for (sample = 0; sample < T_INTERRUPT_SAMPLE_COUNT; ++sample) {
+ lower_bound[sample] = 0;
+ upper_bound[sample] = ctx->one_tick_busy;
+ }
+
+ sample = 0;
+
+ for (iter = 0; iter < config->max_iteration_count; ++iter) {
+ T_interrupt_test_state state;
+ int64_t t;
+ int64_t d;
+ Timestamp_Control s1;
+ Timestamp_Control s0;
+ uint_fast32_t busy;
+ uint_fast32_t delta;
+
+ if (config->prepare != NULL) {
+ (*config->prepare)(arg);
+ }
+
+ /*
+ * We use some sort of a damped bisection to find the right
+ * interrupt time point.
+ */
+ busy = (lower_sum + upper_sum) /
+ (2 * T_INTERRUPT_SAMPLE_COUNT);
+
+ t = sbttons(_Timecounter_Sbinuptime());
+ d = (t - ctx->t0) % ns_per_tick;
+ t += ns_per_tick / 4 - d;
+
+ if (d > ns_per_tick / 8) {
+ t += ns_per_tick;
+ }
+
+ /*
+ * The s1 value is a future time point close to 25% of a clock
+ * tick interval.
+ */
+ s1 = nstosbt(t);
+
+ /*
+ * The path from here to the action call must avoid anything
+ * which can cause jitters. We wait until 25% of the clock
+ * tick interval are elapsed using the timecounter. Then we do
+ * a busy wait and call the action. The interrupt time point
+ * is controlled by the busy count.
+ */
+
+ do {
+ s0 = _Timecounter_Sbinuptime();
+ } while (s0 < s1);
+
+ _Atomic_Store_uint(&ctx->state, T_INTERRUPT_TEST_ACTION,
+ ATOMIC_ORDER_RELAXED);
+ T_busy(busy);
+ (*config->action)(arg);
+
+ state = _Atomic_Exchange_uint(&ctx->state,
+ T_INTERRUPT_TEST_INITIAL, ATOMIC_ORDER_RELAXED);
+
+ if (state == T_INTERRUPT_TEST_DONE) {
+ break;
+ }
+
+ /* Adjust the lower/upper bound of the bisection interval */
+ if (state == T_INTERRUPT_TEST_EARLY) {
+ uint_fast32_t lower;
+
+ upper_sum -= upper_bound[sample];
+ upper_sum += busy;
+ upper_bound[sample] = busy;
+
+ /* Round down to make sure no underflow happens */
+ lower = lower_bound[sample];
+ delta = lower / 32;
+ lower_sum -= delta;
+ lower_bound[sample] = lower - delta;
+
+ sample = (sample + 1) % T_INTERRUPT_SAMPLE_COUNT;
+ } else if (state == T_INTERRUPT_TEST_LATE) {
+ uint_fast32_t upper;
+
+ lower_sum -= lower_bound[sample];
+ lower_sum += busy;
+ lower_bound[sample] = busy;
+
+ /*
+ * The one tick busy count value is not really
+ * trustable on some platforms. Allow the upper bound
+ * to grow over this value in time.
+ */
+ upper = upper_bound[sample];
+ delta = (upper + 31) / 32;
+ upper_sum += delta;
+ upper_bound[sample] = upper + delta;
+
+ sample = (sample + 1) % T_INTERRUPT_SAMPLE_COUNT;
+ }
+ }
+
+ T_pop_fixture();
+
+ if (iter == config->max_iteration_count) {
+ return T_INTERRUPT_TEST_TIMEOUT;
+ }
+
+ return T_INTERRUPT_TEST_DONE;
+}
diff --git a/cpukit/libtest/t-test-malloc.c b/cpukit/libtest/t-test-malloc.c
index 83f32bebf5..369bff9a57 100644
--- a/cpukit/libtest/t-test-malloc.c
+++ b/cpukit/libtest/t-test-malloc.c
@@ -25,7 +25,7 @@
* POSSIBILITY OF SUCH DAMAGE.
*/
-#include <t.h>
+#include <rtems/test.h>
#include <stdlib.h>
diff --git a/cpukit/libtest/t-test-rtems-context.c b/cpukit/libtest/t-test-rtems-context.c
index 82c93f9afe..8d33d08866 100644
--- a/cpukit/libtest/t-test-rtems-context.c
+++ b/cpukit/libtest/t-test-rtems-context.c
@@ -27,30 +27,74 @@
#undef __STRICT_ANSI__
-#include <t.h>
+#include <rtems/test.h>
+#include <rtems.h>
#include <rtems/score/isrlevel.h>
#include <rtems/score/percpu.h>
#include <rtems/score/threaddispatch.h>
#include <inttypes.h>
+#ifdef RTEMS_SMP
+static rtems_id T_runner_scheduler;
+#endif
+
+static rtems_task_priority T_runner_priority;
+
+static void
+T_initialize_runner_properties(void)
+{
+ rtems_status_code sc;
+
+#ifdef RTEMS_SMP
+ sc = rtems_task_get_scheduler(RTEMS_SELF, &T_runner_scheduler);
+ T_quiet_rsc_success(sc);
+#endif
+
+ sc = rtems_task_set_priority(RTEMS_SELF, RTEMS_CURRENT_PRIORITY,
+ &T_runner_priority);
+ T_quiet_rsc_success(sc);
+}
+
static void
T_do_check_task_context(void)
{
+ rtems_task_priority prio;
+ rtems_status_code sc;
uint32_t v;
+#ifdef RTEMS_SMP
+ rtems_id id;
+#endif
v = _Per_CPU_Get_snapshot()->thread_dispatch_disable_level;
- T_check_true(v == 0, NULL,
+ T_check(&T_special, v == 0,
"Wrong thread dispatch disabled level (%" PRIu32 ")", v);
v = _Per_CPU_Get_snapshot()->isr_nest_level;
- T_check_true(v == 0, NULL,
+ T_check(&T_special, v == 0,
"Wrong ISR nest level (%" PRIu32 ")", v);
v = _ISR_Get_level();
- T_check_true(v == 0, NULL,
+ T_check(&T_special, v == 0,
"Wrong ISR level (%" PRIu32 ")", v);
+
+#ifdef RTEMS_SMP
+ id = 0;
+ sc = rtems_task_get_scheduler(RTEMS_SELF, &id);
+ T_quiet_rsc_success(sc);
+ T_check(&T_special, id == T_runner_scheduler,
+ "Wrong runner scheduler, expected ID %08" PRIx32 ", actual ID %08"
+ PRIx32, T_runner_scheduler, id);
+#endif
+
+ prio = 0;
+ sc = rtems_task_set_priority(RTEMS_SELF, RTEMS_CURRENT_PRIORITY,
+ &prio);
+ T_quiet_rsc_success(sc);
+ T_check(&T_special, prio == T_runner_priority,
+ "Wrong runner priority, expected %" PRIu32 ", actual %"
+ PRIu32, T_runner_priority, prio);
}
void
@@ -60,6 +104,8 @@ T_check_task_context(T_event event, const char *name)
switch (event) {
case T_EVENT_RUN_INITIALIZE_LATE:
+ T_initialize_runner_properties();
+ /* Fall through */
case T_EVENT_CASE_END:
T_do_check_task_context();
break;
diff --git a/cpukit/libtest/t-test-rtems-fds.c b/cpukit/libtest/t-test-rtems-fds.c
index a836c9f9bd..8d3ac882e9 100644
--- a/cpukit/libtest/t-test-rtems-fds.c
+++ b/cpukit/libtest/t-test-rtems-fds.c
@@ -25,7 +25,7 @@
* POSSIBILITY OF SUCH DAMAGE.
*/
-#include <t.h>
+#include <rtems/test.h>
#include <rtems/libio_.h>
@@ -61,7 +61,8 @@ T_check_open_fds(void)
if (delta != 0) {
T_open_fds = open_fds;
- T_check_true(false, NULL, "file descriptor leak (%+i)", delta);
+ T_check(&T_special, false, "file descriptor leak (%+i)",
+ delta);
}
}
diff --git a/cpukit/libtest/t-test-rtems-heap.c b/cpukit/libtest/t-test-rtems-heap.c
index 6755e886b2..9b9e8a73ec 100644
--- a/cpukit/libtest/t-test-rtems-heap.c
+++ b/cpukit/libtest/t-test-rtems-heap.c
@@ -25,7 +25,7 @@
* POSSIBILITY OF SUCH DAMAGE.
*/
-#include <t.h>
+#include <rtems/test.h>
#include <rtems/score/heapimpl.h>
#include <rtems/score/wkspace.h>
@@ -79,7 +79,7 @@ T_heap_case_end(void)
where = "workspace";
}
- T_check_true(ok, NULL, "memory leak in %s", where);
+ T_check(&T_special, ok, "memory leak in %s", where);
memcpy(&ctx->workspace_info, &info, sizeof(info));
}
@@ -88,7 +88,7 @@ T_heap_case_end(void)
ok = memcmp(&info, &ctx->heap_info, sizeof(info)) == 0;
if (!ok) {
- T_check_true(ok, NULL, "memory leak in heap");
+ T_check(&T_special, ok, "memory leak in heap");
memcpy(&ctx->heap_info, &info, sizeof(info));
}
}
diff --git a/cpukit/libtest/t-test-rtems-measure.c b/cpukit/libtest/t-test-rtems-measure.c
index 80b404f1ad..162aad0e93 100644
--- a/cpukit/libtest/t-test-rtems-measure.c
+++ b/cpukit/libtest/t-test-rtems-measure.c
@@ -25,7 +25,7 @@
* POSSIBILITY OF SUCH DAMAGE.
*/
-#include <t.h>
+#include <rtems/test.h>
#include <alloca.h>
#include <inttypes.h>
diff --git a/cpukit/libtest/t-test-rtems-objs.c b/cpukit/libtest/t-test-rtems-objs.c
index 246e8f24e5..ed7222e98e 100644
--- a/cpukit/libtest/t-test-rtems-objs.c
+++ b/cpukit/libtest/t-test-rtems-objs.c
@@ -1,7 +1,15 @@
-/*
- * SPDX-License-Identifier: BSD-2-Clause
+/* SPDX-License-Identifier: BSD-2-Clause */
+
+/**
+ * @file
*
- * Copyright (C) 2018 embedded brains GmbH
+ * @ingroup RTEMSTestFramework
+ *
+ * @brief RTEMS Objects Support for Test Framework
+ */
+
+/*
+ * Copyright (C) 2018 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
@@ -27,15 +35,15 @@
#undef __STRICT_ANSI__
-#include <t.h>
+#include "t-test-rtems.h"
+
+#include <rtems/test.h>
#include <inttypes.h>
-#include <rtems/score/objectimpl.h>
#include <rtems/score/threadimpl.h>
-#include <rtems/posix/keyimpl.h>
-static Objects_Maximum
+Objects_Maximum
T_objects_count(Objects_APIs api, uint16_t cls)
{
const Objects_Information *information;
@@ -56,7 +64,7 @@ T_objects_count(Objects_APIs api, uint16_t cls)
return count;
}
-static void
+void
T_objects_check(Objects_APIs api, uint16_t cls,
Objects_Maximum *expected, const char *name)
{
@@ -68,7 +76,8 @@ T_objects_check(Objects_APIs api, uint16_t cls,
if (delta != 0) {
*expected = count;
- T_check_true(false, NULL, "%s leak (%" PRIi32 ")", name, delta);
+ T_check(&T_special, false, "%s leak (%" PRIi32 ")", name,
+ delta);
}
}
@@ -372,76 +381,3 @@ T_check_rtems_timers(T_event event, const char *name)
break;
};
}
-
-static Objects_Maximum T_posix_key_count;
-
-static ssize_t T_posix_key_value_count;
-
-static POSIX_Keys_Control *
-T_get_next_posix_key(Objects_Id *id)
-{
- return (POSIX_Keys_Control *)
- _Objects_Get_next(*id, &_POSIX_Keys_Information, id);
-}
-
-static ssize_t
-T_get_active_posix_key_value_pairs(void)
-{
- ssize_t count;
- Objects_Id id;
- POSIX_Keys_Control *the_key;
-
- count = 0;
- id = OBJECTS_ID_INITIAL_INDEX;
-
- while ((the_key = T_get_next_posix_key(&id)) != NULL ) {
- count += (ssize_t)
- _Chain_Node_count_unprotected(&the_key->Key_value_pairs);
- _Objects_Allocator_unlock();
- }
-
- return count;
-}
-
-static void
-T_posix_keys_run_initialize(void)
-{
- T_posix_key_count = T_objects_count(OBJECTS_POSIX_API,
- OBJECTS_POSIX_KEYS);
- T_posix_key_value_count = T_get_active_posix_key_value_pairs();
-}
-
-static void
-T_posix_keys_case_end(void)
-{
- ssize_t count;
- ssize_t delta;
-
- T_objects_check(OBJECTS_POSIX_API, OBJECTS_POSIX_KEYS,
- &T_posix_key_count, "POSIX key");
-
- count = T_get_active_posix_key_value_pairs();
- delta = count - T_posix_key_value_count;
-
- if (delta != 0) {
- T_posix_key_value_count = count;
- T_check_true(false, NULL, "POSIX key value pair leak (%zi)", delta);
- }
-}
-
-void
-T_check_posix_keys(T_event event, const char *name)
-{
- (void)name;
-
- switch (event) {
- case T_EVENT_RUN_INITIALIZE_EARLY:
- T_posix_keys_run_initialize();
- break;
- case T_EVENT_CASE_END:
- T_posix_keys_case_end();
- break;
- default:
- break;
- };
-}
diff --git a/cpukit/libtest/t-test-rtems-posix-keys.c b/cpukit/libtest/t-test-rtems-posix-keys.c
new file mode 100644
index 0000000000..3046fbb6c8
--- /dev/null
+++ b/cpukit/libtest/t-test-rtems-posix-keys.c
@@ -0,0 +1,116 @@
+/* SPDX-License-Identifier: BSD-2-Clause */
+
+/**
+ * @file
+ *
+ * @ingroup RTEMSTestFramework
+ *
+ * @brief RTEMS POSIX Keys Support for Test Framework
+ */
+
+/*
+ * Copyright (C) 2018 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.
+ */
+
+#undef __STRICT_ANSI__
+
+#include "t-test-rtems.h"
+
+#include <rtems/test.h>
+
+#include <rtems/posix/keyimpl.h>
+
+static Objects_Maximum T_posix_key_count;
+
+static ssize_t T_posix_key_value_count;
+
+static POSIX_Keys_Control *
+T_get_next_posix_key(Objects_Id *id)
+{
+ return (POSIX_Keys_Control *)
+ _Objects_Get_next(*id, &_POSIX_Keys_Information, id);
+}
+
+static ssize_t
+T_get_active_posix_key_value_pairs(void)
+{
+ ssize_t count;
+ Objects_Id id;
+ POSIX_Keys_Control *the_key;
+
+ count = 0;
+ id = OBJECTS_ID_INITIAL_INDEX;
+
+ while ((the_key = T_get_next_posix_key(&id)) != NULL ) {
+ count += (ssize_t)
+ _Chain_Node_count_unprotected(&the_key->Key_value_pairs);
+ _Objects_Allocator_unlock();
+ }
+
+ return count;
+}
+
+static void
+T_posix_keys_run_initialize(void)
+{
+ T_posix_key_count = T_objects_count(OBJECTS_POSIX_API,
+ OBJECTS_POSIX_KEYS);
+ T_posix_key_value_count = T_get_active_posix_key_value_pairs();
+}
+
+static void
+T_posix_keys_case_end(void)
+{
+ ssize_t count;
+ ssize_t delta;
+
+ T_objects_check(OBJECTS_POSIX_API, OBJECTS_POSIX_KEYS,
+ &T_posix_key_count, "POSIX key");
+
+ count = T_get_active_posix_key_value_pairs();
+ delta = count - T_posix_key_value_count;
+
+ if (delta != 0) {
+ T_posix_key_value_count = count;
+ T_check(&T_special, false, "POSIX key value pair leak (%zi)",
+ delta);
+ }
+}
+
+void
+T_check_posix_keys(T_event event, const char *name)
+{
+ (void)name;
+
+ switch (event) {
+ case T_EVENT_RUN_INITIALIZE_EARLY:
+ T_posix_keys_run_initialize();
+ break;
+ case T_EVENT_CASE_END:
+ T_posix_keys_case_end();
+ break;
+ default:
+ break;
+ };
+}
diff --git a/cpukit/libtest/t-test-rtems.c b/cpukit/libtest/t-test-rtems.c
index 7f53005862..8ca5a089df 100644
--- a/cpukit/libtest/t-test-rtems.c
+++ b/cpukit/libtest/t-test-rtems.c
@@ -25,7 +25,7 @@
* POSSIBILITY OF SUCH DAMAGE.
*/
-#include <t.h>
+#include <rtems/test.h>
#include <rtems.h>
#include <rtems/bspIo.h>
@@ -38,14 +38,14 @@ T_putchar_default(int c, void *arg)
}
void
-T_check_rsc(uint32_t a, const T_check_context *t, uint32_t e)
+T_check_rsc(const T_check_context *t, uint32_t a, uint32_t e)
{
- T_check_true(a == e, t, "%s == %s", rtems_status_text(a),
+ T_check(t, a == e, "%s == %s", rtems_status_text(a),
rtems_status_text(e));
}
void
-T_check_rsc_success(uint32_t a, const T_check_context *t)
+T_check_rsc_success(const T_check_context *t, uint32_t a)
{
- T_check_rsc(a, t, RTEMS_SUCCESSFUL);
+ T_check_rsc(t, a, RTEMS_SUCCESSFUL);
}
diff --git a/cpukit/libtest/t-test-rtems.h b/cpukit/libtest/t-test-rtems.h
new file mode 100644
index 0000000000..cc36ba96a1
--- /dev/null
+++ b/cpukit/libtest/t-test-rtems.h
@@ -0,0 +1,62 @@
+/* SPDX-License-Identifier: BSD-2-Clause */
+
+/**
+ * @file
+ *
+ * @ingroup RTEMSTestFrameworkImpl
+ *
+ * @brief RTEMS Support for Test Framework
+ */
+
+/*
+ * Copyright (C) 2020 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.
+ */
+
+#ifndef _T_TEST_RTEMS_H
+#define _T_TEST_RTEMS_H
+
+#include <rtems/score/objectimpl.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/**
+ * @addtogroup RTEMSTestFrameworkImpl
+ *
+ * @{
+ */
+
+Objects_Maximum T_objects_count(Objects_APIs api, uint16_t cls);
+
+void T_objects_check(Objects_APIs api, uint16_t cls,
+ Objects_Maximum *expected, const char *name);
+
+/** @} */
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* _T_TEST_RTEMS_H */
diff --git a/cpukit/libtest/t-test-thread-switch.c b/cpukit/libtest/t-test-thread-switch.c
new file mode 100644
index 0000000000..87ad4651fc
--- /dev/null
+++ b/cpukit/libtest/t-test-thread-switch.c
@@ -0,0 +1,161 @@
+/* SPDX-License-Identifier: BSD-2-Clause */
+
+/**
+ * @file
+ *
+ * @ingroup RTEMSTestFrameworkImpl
+ *
+ * @brief Implementation of T_thread_switch_record().
+ */
+
+/*
+ * Copyright (C) 2020 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.
+ */
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#include <rtems/test.h>
+
+#include <rtems.h>
+#include <rtems/score/percpu.h>
+#include <rtems/score/smp.h>
+#include <rtems/score/thread.h>
+#include <rtems/score/userextimpl.h>
+
+typedef struct {
+ RTEMS_INTERRUPT_LOCK_MEMBER(lock)
+ T_thread_switch_log *active;
+ User_extensions_Control ext;
+ T_destructor dtor;
+} T_thread_switch_context;
+
+static void T_thread_switch_recorder(Thread_Control *, Thread_Control *);
+
+static T_thread_switch_context T_thread_switch_instance = {
+#ifdef RTEMS_SMP
+ .lock = RTEMS_INTERRUPT_LOCK_INITIALIZER("Test Thread Switches"),
+#endif
+ .ext = {
+ .Callouts = {
+ .thread_switch = T_thread_switch_recorder
+ }
+ }
+};
+
+static void
+T_thread_switch_destroy(T_destructor *dtor)
+{
+ T_thread_switch_context *ctx;
+
+ ctx = RTEMS_CONTAINER_OF(dtor, T_thread_switch_context, dtor);
+ _User_extensions_Remove_set(&ctx->ext);
+ _Chain_Set_off_chain(&ctx->ext.Node);
+}
+
+static void
+T_thread_switch_recorder(Thread_Control *executing, Thread_Control *heir)
+{
+ rtems_interrupt_lock_context lock_context;
+ T_thread_switch_context *ctx;
+ T_thread_switch_log *log;
+
+ ctx = &T_thread_switch_instance;
+
+#ifdef RTEMS_SMP
+ if (ctx->active == NULL) {
+ return;
+ }
+#endif
+
+ rtems_interrupt_lock_acquire_isr(&ctx->lock, &lock_context);
+ log = ctx->active;
+
+ if (log != NULL) {
+ size_t recorded;
+
+ ++log->switches;
+ recorded = log->recorded;
+
+ if (recorded < log->capacity) {
+ log->recorded = recorded + 1;
+ log->events[recorded].executing = executing->Object.id;
+ log->events[recorded].heir = heir->Object.id;
+ log->events[recorded].cpu =
+ _SMP_Get_current_processor();
+ log->events[recorded].instant = T_now();
+ }
+ }
+
+ rtems_interrupt_lock_release_isr(&ctx->lock, &lock_context);
+}
+
+T_thread_switch_log *
+T_thread_switch_record(T_thread_switch_log *log)
+{
+ rtems_interrupt_lock_context lock_context;
+ T_thread_switch_log *previous;
+ T_thread_switch_context *ctx;
+
+ ctx = &T_thread_switch_instance;
+
+ if (_Chain_Is_node_off_chain(&ctx->ext.Node)) {
+ _User_extensions_Add_set(&ctx->ext);
+ T_add_destructor(&ctx->dtor, T_thread_switch_destroy);
+ }
+
+ if (log != NULL) {
+ log->recorded = 0;
+ log->switches = 0;
+ }
+
+ rtems_interrupt_lock_acquire(&ctx->lock, &lock_context);
+ previous = ctx->active;
+ ctx->active = log;
+ rtems_interrupt_lock_release(&ctx->lock, &lock_context);
+
+ return previous;
+}
+
+T_thread_switch_log *
+T_thread_switch_record_2(T_thread_switch_log_2 *log)
+{
+ log->log.capacity = 2;
+ return T_thread_switch_record(&log->log);
+}
+
+T_thread_switch_log *
+T_thread_switch_record_4(T_thread_switch_log_4 *log)
+{
+ log->log.capacity = 4;
+ return T_thread_switch_record(&log->log);
+}
+
+T_thread_switch_log *
+T_thread_switch_record_10(T_thread_switch_log_10 *log)
+{
+ log->log.capacity = 10;
+ return T_thread_switch_record(&log->log);
+}
diff --git a/cpukit/libtest/t-test-time.c b/cpukit/libtest/t-test-time.c
index 94a9ca393b..156ceaad1f 100644
--- a/cpukit/libtest/t-test-time.c
+++ b/cpukit/libtest/t-test-time.c
@@ -27,7 +27,7 @@
#undef __STRICT_ANSI__
-#include <t.h>
+#include <rtems/test.h>
#include <inttypes.h>
#include <stdatomic.h>
diff --git a/cpukit/libtest/t-test.c b/cpukit/libtest/t-test.c
index aedf9a49b1..11f1cf70e9 100644
--- a/cpukit/libtest/t-test.c
+++ b/cpukit/libtest/t-test.c
@@ -1,7 +1,7 @@
/*
* SPDX-License-Identifier: BSD-2-Clause
*
- * Copyright (C) 2018, 2019 embedded brains GmbH
+ * Copyright (C) 2018, 2020 embedded brains GmbH
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
@@ -27,7 +27,7 @@
#define _GNU_SOURCE
-#include <t.h>
+#include <rtems/test.h>
#include <sys/queue.h>
#include <limits.h>
@@ -49,8 +49,6 @@
#define T_LINE_SIZE 128
-#define T_SCOPE_SIZE 5
-
typedef struct {
pthread_spinlock_t lock;
char *buf;
@@ -62,13 +60,15 @@ typedef struct {
T_verbosity verbosity;
const T_case_context *registered_cases;
const T_case_context *current_case;
- void *fixture_context;
+ T_fixture_node *fixtures;
+ T_fixture_node case_fixture;
LIST_HEAD(, T_destructor) destructors;
T_time case_begin_time;
atomic_uint planned_steps;
atomic_uint steps;
atomic_uint failures;
jmp_buf case_begin_context;
+ unsigned int fixture_steps;
unsigned int overall_cases;
unsigned int overall_steps;
unsigned int overall_failures;
@@ -85,6 +85,46 @@ typedef struct {
static T_context T_instance;
+const T_check_context T_special = {
+ .file = "*",
+ .line = -1,
+ .flags = T_CHECK_FMT | T_CHECK_QUIET
+};
+
+static bool
+T_do_is_runner(T_context *ctx)
+{
+ bool is_runner;
+#ifdef __rtems__
+ ISR_Level level;
+ const Per_CPU_Control *cpu_self;
+#endif
+
+#ifdef __rtems__
+ _ISR_Local_disable(level);
+ cpu_self = _Per_CPU_Get();
+
+ if (ctx->runner_thread != NULL) {
+ is_runner = cpu_self->isr_nest_level == 0 &&
+ _Per_CPU_Get_executing(cpu_self) == ctx->runner_thread;
+ } else {
+ is_runner = cpu_self == ctx->runner_cpu;
+ }
+
+ _ISR_Local_enable(level);
+#else
+ is_runner = ctx->runner_valid &&
+ pthread_equal(pthread_self(), ctx->runner_thread) != 0;
+#endif
+
+ return is_runner;
+}
+
+bool T_is_runner(void)
+{
+ return T_do_is_runner(&T_instance);
+}
+
typedef struct {
char *s;
size_t n;
@@ -136,15 +176,12 @@ T_snprintf(char *s, size_t n, char const *fmt, ...)
return len;
}
-static int
-T_vprintf_direct(char const *fmt, va_list ap)
+static void
+T_output_buffer_drain(T_context *ctx)
{
- T_context *ctx;
unsigned int head;
unsigned int tail;
- ctx = &T_instance;
-
head = atomic_load_explicit(&ctx->buf_head, memory_order_acquire);
tail = atomic_load_explicit(&ctx->buf_tail, memory_order_relaxed);
@@ -154,32 +191,16 @@ T_vprintf_direct(char const *fmt, va_list ap)
}
atomic_store_explicit(&ctx->buf_tail, tail, memory_order_relaxed);
-
- return _IO_Vprintf(ctx->putchar, ctx->putchar_arg, fmt, ap);
}
-static int
-T_vprintf_buffered(char const *fmt, va_list ap)
+static unsigned int
+T_output_buffer_fill(T_context *ctx, const char *buf, unsigned int len)
{
- unsigned int len;
- T_context *ctx;
- char buf[T_LINE_SIZE];
- T_putchar_string_context sctx = {
- .s = buf,
- .n = sizeof(buf)
- };
unsigned int head;
unsigned int tail;
unsigned int mask;
unsigned int capacity;
- len = (unsigned int)_IO_Vprintf(T_putchar_string, &sctx, fmt, ap);
-
- if (len >= sizeof(buf)) {
- len = sizeof(buf) - 1;
- }
-
- ctx = &T_instance;
pthread_spin_lock(&ctx->lock);
head = atomic_load_explicit(&ctx->buf_head, memory_order_relaxed);
tail = atomic_load_explicit(&ctx->buf_tail, memory_order_relaxed);
@@ -188,7 +209,7 @@ T_vprintf_buffered(char const *fmt, va_list ap)
if (len <= capacity) {
unsigned int todo;
- char *c;
+ const char *c;
todo = len;
c = buf;
@@ -208,7 +229,36 @@ T_vprintf_buffered(char const *fmt, va_list ap)
}
pthread_spin_unlock(&ctx->lock);
- return (int)len;
+ return len;
+}
+
+static int
+T_vprintf_direct(char const *fmt, va_list ap)
+{
+ T_context *ctx;
+
+ ctx = &T_instance;
+ T_output_buffer_drain(ctx);
+ return _IO_Vprintf(ctx->putchar, ctx->putchar_arg, fmt, ap);
+}
+
+static int
+T_vprintf_buffered(char const *fmt, va_list ap)
+{
+ char buf[T_LINE_SIZE];
+ T_putchar_string_context sctx = {
+ .s = buf,
+ .n = sizeof(buf)
+ };
+ unsigned int len;
+
+ len = (unsigned int)_IO_Vprintf(T_putchar_string, &sctx, fmt, ap);
+
+ if (len >= sizeof(buf)) {
+ len = sizeof(buf) - 1;
+ }
+
+ return (int)T_output_buffer_fill(&T_instance, buf, len);
}
int
@@ -226,6 +276,30 @@ T_vprintf(char const *fmt, va_list ap)
}
static int
+T_do_puts(T_context *ctx, const char *buf, size_t len)
+{
+ if (T_do_is_runner(ctx)) {
+ size_t i;
+
+ T_output_buffer_drain(ctx);
+
+ for (i = 0; i < len; ++i) {
+ (*ctx->putchar)(buf[i], ctx->putchar_arg);
+ }
+ } else {
+ len = T_output_buffer_fill(ctx, buf, len);
+ }
+
+ return (int)len;
+}
+
+int
+T_puts(const char *buf, size_t len)
+{
+ return T_do_puts(&T_instance, buf, len);
+}
+
+static int
T_cpu(void)
{
#if defined(__rtems__)
@@ -237,9 +311,26 @@ T_cpu(void)
#endif
}
+size_t
+T_str_copy(char *dst, const char *src, size_t n)
+{
+ size_t i;
+
+ i = 0;
+
+ while (*src != '\0' && i < n) {
+ *dst = *src;
+ ++dst;
+ ++src;
+ ++i;
+ }
+
+ return i;
+}
+
#if defined(__rtems__)
-static const char *
-T_object_name_to_string(Objects_Name name, char *buf)
+static size_t
+T_object_name_to_string(char *dst, Objects_Name name, size_t n)
{
uint32_t on;
size_t i;
@@ -253,18 +344,18 @@ T_object_name_to_string(Objects_Name name, char *buf)
c = (unsigned char)(on >> s);
- if (c >= '!' && c <= '~') {
- buf[i] = (char)c;
+ if (c >= '!' && c <= '~' && i < n) {
+ *dst = (char)c;
+ ++dst;
++i;
}
}
- buf[i] = '\0';
- return buf;
+ return i;
}
-static const char *
-T_thread_name(const Thread_Control *th, char *buf)
+static size_t
+T_thread_name(char *dst, const Thread_Control *th, size_t n)
{
if (th != NULL) {
const char *name;
@@ -272,22 +363,21 @@ T_thread_name(const Thread_Control *th, char *buf)
name = th->Join_queue.Queue.name;
if (name != NULL && name[0] != '\0') {
- return name;
- } else {
- return T_object_name_to_string(th->Object.name, buf);
+ return T_str_copy(dst, name, n);
}
- } else {
- buf[0] = '?';
- buf[1] = '\0';
- return buf;
+
+ return T_object_name_to_string(dst, th->Object.name, n);
}
+
+ return T_str_copy(dst, "?", n);
}
#endif
-static const char *
-T_scope(char *buf)
+static size_t
+T_scope(T_context *ctx, char *dst, size_t n)
{
- const char *r;
+ T_fixture_node *node;
+ size_t len;
#if defined(__rtems__)
ISR_Level level;
@@ -301,36 +391,50 @@ T_scope(char *buf)
executing = _Per_CPU_Get_executing(cpu_self);
_ISR_Local_enable(level);
- r = T_thread_name(executing, buf);
+ len = T_thread_name(dst, executing, n);
} else {
_ISR_Local_enable(level);
- buf[0] = 'I';
- buf[1] = 'S';
- buf[2] = 'R';
- buf[3] = '\0';
- r = buf;
+ len = T_str_copy(dst, "ISR", n);
}
+
#elif defined(__linux__)
static __thread char name[128];
- (void)buf;
-
if (name[0] == '\0') {
pthread_getname_np(pthread_self(), name, sizeof(name));
}
- r = &name[0];
+ len = T_str_copy(dst, name, n);
#else
- buf[0] = '?';
- buf[1] = '\0';
- r = buf;
+ len = T_str_copy(dst, "?", n);
#endif
- return r;
+ dst += len;
+ n -= len;
+ node = &ctx->case_fixture;
+
+ do {
+ const T_fixture *fixture;
+
+ fixture = node->fixture;
+
+ if (fixture != NULL && fixture->scope != NULL) {
+ size_t m;
+
+ m = (*fixture->scope)(node->context, dst, n);
+ dst += m;
+ n -= m;
+ len += m;
+ }
+
+ node = node->previous;
+ } while (node != NULL);
+
+ return len;
}
static void
-T_set_runner(T_context *ctx)
+T_do_make_runner(T_context *ctx)
{
#ifdef __rtems__
ISR_Level level;
@@ -353,6 +457,12 @@ T_set_runner(T_context *ctx)
#endif
}
+void
+T_make_runner(void)
+{
+ T_do_make_runner(&T_instance);
+}
+
int
T_printf(char const *fmt, ...)
{
@@ -397,26 +507,34 @@ T_add_failure(T_context *ctx)
memory_order_relaxed);
}
-static void
-T_stop(T_context *ctx)
+T_NO_RETURN static void
+T_do_stop(T_context *ctx)
{
- const T_case_context *tc;
+ T_fixture_node *node;
- tc = ctx->current_case;
+ node = ctx->fixtures;
- if (tc != NULL) {
+ while (node != NULL) {
const T_fixture *fixture;
- fixture = tc->fixture;
+ fixture = node->fixture;
if (fixture != NULL && fixture->stop != NULL) {
- (*fixture->stop)(ctx->fixture_context);
+ (*fixture->stop)(node->context);
}
+
+ node = node->next;
}
longjmp(ctx->case_begin_context, 1);
}
+T_NO_RETURN void
+T_stop(void)
+{
+ T_do_stop(&T_instance);
+}
+
void T_plan(unsigned int planned_steps)
{
T_context *ctx;
@@ -428,7 +546,34 @@ void T_plan(unsigned int planned_steps)
success = atomic_compare_exchange_strong_explicit(&ctx->planned_steps,
&expected, planned_steps, memory_order_relaxed,
memory_order_relaxed);
- T_check_true(success, NULL, "planned steps (%u) already set", expected);
+ T_check(&T_special, success, "planned steps (%u) already set",
+ expected);
+}
+
+const T_fixture T_empty_fixture;
+
+void
+T_push_plan(T_fixture_node *node, unsigned int planned_steps)
+{
+ T_push_fixture(node, &T_empty_fixture);
+ T_plan(planned_steps);
+}
+
+void
+T_pop_plan(void)
+{
+ T_pop_fixture();
+}
+
+void
+T_check_step(const T_check_context *t, unsigned int expected)
+{
+ T_check_context tt;
+
+ tt = *t;
+ tt.flags |= T_CHECK_STEP(expected);
+ T_check(&tt, true, "actual step is not equal to expected step (%u)",
+ expected);
}
void
@@ -457,13 +602,13 @@ T_set_verbosity(T_verbosity verbosity)
void *
T_fixture_context(void)
{
- return T_instance.fixture_context;
+ return T_instance.fixtures->context;
}
void
T_set_fixture_context(void *context)
{
- T_instance.fixture_context = context;
+ T_instance.fixtures->context = context;
}
const char *
@@ -494,69 +639,144 @@ T_file(const T_check_context *t)
return file + 1;
}
+static const char T_planned_step_fmt[] = "planned step (%u)";
+
+static void
+T_check_putc(int c, void *arg)
+{
+ T_putchar_string_context *sctx;
+ size_t n;
+
+ sctx = arg;
+ n = sctx->n;
+
+ if (n > 0) {
+ char *s;
+
+ s = sctx->s;
+ *s = (char)c;
+ sctx->s = s + 1;
+ sctx->n = n - 1;
+ }
+}
+
+static void
+T_check_print_steps(T_context *ctx, T_putchar_string_context *sctx,
+ unsigned int step)
+{
+ T_fixture_node *node;
+
+ node = &ctx->case_fixture;
+
+ while (true) {
+ node = node->previous;
+
+ if (node != NULL) {
+ _IO_Printf(T_check_putc, sctx, "%u.",
+ node->next_steps);
+ } else {
+ break;
+ }
+ }
+
+ if (step != UINT_MAX) {
+ _IO_Printf(T_check_putc, sctx, "%u", step);
+ } else {
+ T_check_putc('*', sctx);
+ }
+}
+
void
-T_check_true(bool ok, const T_check_context *t, const char *fmt, ...)
+T_check(const T_check_context *t, bool ok, ...)
{
T_context *ctx;
va_list ap;
- char scope[T_SCOPE_SIZE];
+ char line[T_LINE_SIZE];
+ unsigned int step;
+ int line_number;
+ const char *fmt;
ctx = &T_instance;
- if (t != NULL) {
- unsigned int step;
+ if ((t->flags & T_CHECK_QUIET) == 0) {
+ step = T_fetch_add_step(ctx);
+ } else {
+ step = UINT_MAX;
+ }
- if ((t->flags & T_CHECK_QUIET) == 0) {
- step = T_fetch_add_step(ctx);
- } else {
- step = UINT_MAX;
- }
+ va_start(ap, ok);
+ line[0] = '\0';
+ line_number = -1;
+ fmt = NULL;
- if ((t->flags & T_CHECK_STEP_FLAG) != 0 &&
- step != T_CHECK_STEP_FROM_FLAGS(t->flags)) {
- T_add_failure(ctx);
- T_printf("F:%u:%i:%s:%s:%i:planned step (%u)\n", step,
- T_cpu(), T_scope(scope), T_file(t), t->line,
- T_CHECK_STEP_FROM_FLAGS(t->flags));
- } else if (!ok) {
- T_add_failure(ctx);
-
- if (ctx->verbosity >= T_NORMAL) {
- if ((t->flags & T_CHECK_QUIET) == 0) {
- T_printf("F:%u:%i:%s:%s:%i:",
- step, T_cpu(), T_scope(scope),
- T_file(t), t->line);
- } else {
- T_printf("F:*:%i:%s:%s:%i:", T_cpu(),
- T_scope(scope), T_file(t), t->line);
- }
-
- va_start(ap, fmt);
- T_vprintf(fmt, ap);
- va_end(ap);
-
- T_printf("\n");
- }
+ if ((t->flags & T_CHECK_STEP_FLAG) != 0 &&
+ step != T_CHECK_STEP_FROM_FLAGS(t->flags)) {
+ T_add_failure(ctx);
+ line[0] = 'F';
+ line_number = t->line;
+ fmt = T_planned_step_fmt;
+ } else if (!ok) {
+ T_add_failure(ctx);
- if ((t->flags & T_CHECK_STOP) != 0) {
- T_stop(ctx);
+ if (ctx->verbosity >= T_NORMAL) {
+ line[0] = 'F';
+ line_number = t->line;
+
+ if ((t->flags & T_CHECK_FMT) != 0) {
+ fmt = va_arg(ap, const char *);
}
- } else if ((t->flags & T_CHECK_QUIET) == 0 &&
- ctx->verbosity >= T_VERBOSE) {
- T_printf("P:%u:%i:%s:%s:%i\n", step, T_cpu(),
- T_scope(scope), T_file(t), t->line);
}
- } else if (!ok) {
- T_add_failure(ctx);
+ } else if ((t->flags & T_CHECK_QUIET) == 0 &&
+ ctx->verbosity >= T_VERBOSE) {
+ line[0] = 'P';
+ line_number = t->line;
+ }
- T_printf("F:*:%i:%s:*:*:", T_cpu(), T_scope(scope));
+ if (line[0] != '\0') {
+ T_putchar_string_context sctx;
+ size_t chunk;
+
+ sctx.n = sizeof(line) - 1;
+ sctx.s = &line[1];
+ T_check_putc(':', &sctx);
+ T_check_print_steps(ctx, &sctx, step);
+ _IO_Printf(T_check_putc, &sctx, ":%i:", T_cpu());
+ chunk = T_scope(ctx, sctx.s, sctx.n);
+ sctx.s += chunk;
+ sctx.n -= chunk;
+ T_check_putc(':', &sctx);
+ chunk = T_str_copy(sctx.s, T_file(t), sctx.n);
+ sctx.s += chunk;
+ sctx.n -= chunk;
+ T_check_putc(':', &sctx);
+
+ if (line_number >= 0) {
+ _IO_Printf(T_check_putc, &sctx, "%i", line_number);
+ } else {
+ T_check_putc('*', &sctx);
+ }
- va_start(ap, fmt);
- T_vprintf(fmt, ap);
- va_end(ap);
+ if (fmt != NULL) {
+ if (fmt == T_planned_step_fmt) {
+ T_check_putc(':', &sctx);
+ _IO_Printf(T_check_putc, &sctx, fmt,
+ T_CHECK_STEP_FROM_FLAGS(t->flags));
+ } else {
+ T_check_putc(':', &sctx);
+ _IO_Vprintf(T_check_putc, &sctx, fmt, ap);
+ }
+ }
- T_printf("\n");
+ T_check_putc('\n', &sctx);
+ line[sizeof(line) - 1] = '\n';
+ T_puts(&line[0], sizeof(line) - sctx.n);
+ }
+
+ if (!ok && (t->flags & T_CHECK_STOP) != 0) {
+ T_do_stop(ctx);
}
+
+ va_end(ap);
}
static void
@@ -708,18 +928,17 @@ T_do_run_initialize(const T_config *config)
ctx->buf_mask = 0;
}
+ ctx->fixtures = &ctx->case_fixture;
atomic_store_explicit(&ctx->buf_head, 0, memory_order_relaxed);
ctx->buf_tail = 0;
ctx->putchar = config->putchar;
ctx->putchar_arg = config->putchar_arg;
ctx->verbosity = config->verbosity;
- atomic_store_explicit(&ctx->steps, 0, memory_order_relaxed);
- atomic_store_explicit(&ctx->failures, 0, memory_order_relaxed);
ctx->overall_cases = 0;
ctx->overall_steps = 0;
ctx->overall_failures = 0;
- T_set_runner(ctx);
+ T_do_make_runner(ctx);
T_actions_forward(config, T_EVENT_RUN_INITIALIZE_EARLY, config->name);
T_do_log(ctx, T_QUIET, "A:%s\n", config->name);
T_system(ctx);
@@ -739,11 +958,13 @@ T_do_case_begin(T_context *ctx, const T_case_context *tc)
fixture = tc->fixture;
ctx->verbosity = config->verbosity;
ctx->current_case = tc;
+ ctx->fixtures = &ctx->case_fixture;
LIST_INIT(&ctx->destructors);
atomic_store_explicit(&ctx->planned_steps, UINT_MAX,
memory_order_relaxed);
atomic_store_explicit(&ctx->steps, 0, memory_order_relaxed);
atomic_store_explicit(&ctx->failures, 0, memory_order_relaxed);
+ ctx->fixture_steps = 0;
T_actions_forward(config, T_EVENT_CASE_EARLY, tc->name);
T_do_log(ctx, T_NORMAL, "B:%s\n", tc->name);
@@ -751,33 +972,42 @@ T_do_case_begin(T_context *ctx, const T_case_context *tc)
T_actions_forward(config, T_EVENT_CASE_BEGIN, tc->name);
if (fixture != NULL) {
- ctx->fixture_context = fixture->initial_context;
+ ctx->case_fixture.fixture = fixture;
+ ctx->case_fixture.context = fixture->initial_context;
if (fixture->setup != NULL) {
- (*fixture->setup)(ctx->fixture_context);
+ (*fixture->setup)(ctx->case_fixture.context);
}
}
}
static void
+T_check_steps(unsigned int planned_steps, unsigned int steps,
+ unsigned int failures)
+{
+ if (planned_steps != UINT_MAX && planned_steps != steps &&
+ failures == 0) {
+ T_check(&T_special, false, "actual steps (%u), "
+ "planned steps (%u)", steps, planned_steps);
+ }
+}
+
+static void
T_do_case_end(T_context *ctx, const T_case_context *tc)
{
const T_config *config;
- const T_fixture *fixture;
unsigned int planned_steps;
unsigned int steps;
unsigned int failures;
T_time delta;
T_time_string ts;
- config = ctx->config;
- fixture = tc->fixture;
-
- if (fixture != NULL && fixture->teardown != NULL) {
- (*fixture->teardown)(ctx->fixture_context);
+ while (ctx->fixtures != NULL) {
+ T_pop_fixture();
}
T_call_destructors(ctx);
+ config = ctx->config;
T_actions_backward(config, T_EVENT_CASE_END, tc->name);
planned_steps = atomic_fetch_add_explicit(&ctx->planned_steps,
@@ -786,21 +1016,11 @@ T_do_case_end(T_context *ctx, const T_case_context *tc)
memory_order_relaxed);
failures = atomic_fetch_add_explicit(&ctx->failures, 0,
memory_order_relaxed);
+ T_check_steps(planned_steps, steps, failures);
- if (planned_steps != UINT_MAX && planned_steps != steps &&
- failures == 0) {
- ++failures;
-
- if (ctx->verbosity >= T_NORMAL) {
- char scope[T_SCOPE_SIZE];
-
- T_printf("F:*:%i:%s:*:*:actual steps (%u), "
- "planned steps (%u)\n", T_cpu(),
- T_scope(scope), steps, planned_steps);
- }
- }
-
+ failures = atomic_load_explicit(&ctx->failures, memory_order_relaxed);
delta = (*config->now)() - ctx->case_begin_time;
+ steps += ctx->fixture_steps;
T_do_log(ctx, T_QUIET, "E:%s:N:%u:F:%u:D:%s\n",
tc->name, steps, failures, T_time_to_string_us(delta, ts));
@@ -872,36 +1092,6 @@ T_main(const T_config *config)
return T_do_run_finalize(ctx) ? 0 : 1;
}
-bool T_is_runner(void)
-{
- T_context *ctx;
- bool is_runner;
-#ifdef __rtems__
- ISR_Level level;
- const Per_CPU_Control *cpu_self;
-#endif
-
- ctx = &T_instance;
-#ifdef __rtems__
- _ISR_Local_disable(level);
- cpu_self = _Per_CPU_Get();
-
- if (ctx->runner_thread != NULL) {
- is_runner = cpu_self->isr_nest_level == 0 &&
- _Per_CPU_Get_executing(cpu_self) == ctx->runner_thread;
- } else {
- is_runner = cpu_self == ctx->runner_cpu;
- }
-
- _ISR_Local_enable(level);
-#else
- is_runner = ctx->runner_valid &&
- pthread_equal(pthread_self(), ctx->runner_thread) != 0;
-#endif
-
- return is_runner;
-}
-
#ifdef __rtems__
RTEMS_LINKER_ROSET(_T, T_case_context *);
#endif /* __rtems__ */
@@ -1005,3 +1195,107 @@ T_now(void)
config = ctx->config;
return (*config->now)();
}
+
+void *
+T_push_fixture(T_fixture_node *node, const T_fixture *fixture)
+{
+ T_context *ctx;
+ T_fixture_node *old;
+ void *context;
+
+ ctx = &T_instance;
+ old = ctx->fixtures;
+ old->previous = node;
+ node->next = old;
+ node->previous = NULL;
+ node->fixture = fixture;
+ context = fixture->initial_context;
+ node->context = context;
+ node->next_planned_steps = atomic_exchange_explicit(
+ &ctx->planned_steps, UINT_MAX, memory_order_relaxed);
+ node->next_steps = atomic_exchange_explicit(&ctx->steps, 0,
+ memory_order_relaxed);
+ node->failures = atomic_fetch_add_explicit(&ctx->failures, 0,
+ memory_order_relaxed);
+ ctx->fixtures = node;
+
+ if (fixture != NULL && fixture->setup != NULL) {
+ (*fixture->setup)(context);
+ }
+
+ return context;
+}
+
+void
+T_pop_fixture(void)
+{
+ T_context *ctx;
+ T_fixture_node *node;
+ const T_fixture *fixture;
+ T_fixture_node *next;
+
+ ctx = &T_instance;
+ node = ctx->fixtures;
+ next = node->next;
+ ctx->fixtures = next;
+ fixture = node->fixture;
+
+ if (fixture != NULL && fixture->teardown != NULL) {
+ (*fixture->teardown)(node->context);
+ }
+
+ if (next != NULL) {
+ unsigned int planned_steps;
+ unsigned int steps;
+ unsigned int failures;
+
+ next->previous = NULL;
+ planned_steps = atomic_exchange_explicit(&ctx->planned_steps,
+ node->next_planned_steps, memory_order_relaxed);
+ steps = atomic_exchange_explicit(&ctx->steps, node->next_steps,
+ memory_order_relaxed);
+ failures = atomic_fetch_add_explicit(&ctx->failures, 0,
+ memory_order_relaxed);
+ ctx->fixture_steps += steps;
+ T_check_steps(planned_steps, steps, node->failures - failures);
+ }
+
+ memset(node, 0, sizeof(*node));
+}
+
+size_t
+T_get_scope(const char * const * const *desc, char *buf, size_t n,
+ const size_t *second_indices)
+{
+ size_t c;
+ size_t i;
+
+ c = n;
+ i = 0;
+
+ while (true) {
+ const char * const *desc2;
+ size_t m;
+
+ desc2 = desc[i];
+
+ if (desc2 == NULL) {
+ break;
+ }
+
+ if (c > 1) {
+ buf[0] = '/';
+ --c;
+ ++buf;
+ } else {
+ break;
+ }
+
+ m = T_str_copy(buf, desc2[second_indices[i]], c);
+ buf += m;
+ c -= m;
+ ++i;
+ }
+
+ return n - c;
+}
diff --git a/cpukit/libtest/testbeginend.c b/cpukit/libtest/testbeginend.c
index 4a85673a91..89b2468070 100644
--- a/cpukit/libtest/testbeginend.c
+++ b/cpukit/libtest/testbeginend.c
@@ -18,7 +18,7 @@
#include "config.h"
#endif
-#include <rtems/test.h>
+#include <rtems/test-info.h>
#include <rtems/bspIo.h>
#include <rtems/version.h>
diff --git a/cpukit/libtest/testbusy.c b/cpukit/libtest/testbusy.c
index 4cc8aa01fe..c1d44278be 100644
--- a/cpukit/libtest/testbusy.c
+++ b/cpukit/libtest/testbusy.c
@@ -17,96 +17,9 @@
#include "config.h"
#endif
-#include <rtems/test.h>
-#include <rtems.h>
+#include <rtems/test-info.h>
#include <rtems/score/threadimpl.h>
-static uint_fast32_t estimate_busy_loop_maximum( void )
-{
- uint_fast32_t units = 0;
- uint_fast32_t initial = rtems_clock_get_ticks_since_boot();
-
- while ( initial == rtems_clock_get_ticks_since_boot() ) {
- ++units;
- }
-
- return units;
-}
-
-static uint_fast32_t wait_for_tick_change( void )
-{
- uint_fast32_t initial = rtems_clock_get_ticks_since_boot();
- uint_fast32_t now;
-
- do {
- now = rtems_clock_get_ticks_since_boot();
- } while ( now == initial );
-
- return now;
-}
-
-/*
- * It is important that we use actually use the same rtems_test_busy() function
- * at the various places, since otherwise the obtained maximum value might be
- * wrong. So, the compiler must not inline this function.
- */
-RTEMS_NO_INLINE void rtems_test_busy( uint_fast32_t count )
-{
- uint_fast32_t i = 0;
-
- do {
- __asm__ volatile ("");
- ++i;
- } while ( i < count );
-}
-
-uint_fast32_t rtems_test_get_one_tick_busy_count( void )
-{
- uint_fast32_t last;
- uint_fast32_t now;
- uint_fast32_t a;
- uint_fast32_t b;
- uint_fast32_t m;
-
- /* Choose a lower bound */
- a = 1;
-
- /* Estimate an upper bound */
-
- wait_for_tick_change();
- b = 2 * estimate_busy_loop_maximum();
-
- while ( true ) {
- last = wait_for_tick_change();
- rtems_test_busy( b );
- now = rtems_clock_get_ticks_since_boot();
-
- if ( now != last ) {
- break;
- }
-
- b *= 2;
- last = now;
- }
-
- /* Find a good value */
- do {
- m = ( a + b ) / 2;
-
- last = wait_for_tick_change();
- rtems_test_busy( m );
- now = rtems_clock_get_ticks_since_boot();
-
- if ( now != last ) {
- b = m;
- } else {
- a = m;
- }
- } while ( b - a > 1 );
-
- return m;
-}
-
void rtems_test_busy_cpu_usage( time_t seconds, long nanoseconds )
{
Thread_Control *executing;
diff --git a/cpukit/libtest/testextension.c b/cpukit/libtest/testextension.c
index 56d97da3fb..ee9681a847 100644
--- a/cpukit/libtest/testextension.c
+++ b/cpukit/libtest/testextension.c
@@ -16,7 +16,7 @@
#include "config.h"
#endif
-#include <rtems/test.h>
+#include <rtems/test-info.h>
#include <rtems/profiling.h>
#include <rtems/bspIo.h>
diff --git a/cpukit/libtest/testparallel.c b/cpukit/libtest/testparallel.c
index 3982dce034..f9845e0af1 100644
--- a/cpukit/libtest/testparallel.c
+++ b/cpukit/libtest/testparallel.c
@@ -17,7 +17,7 @@
#include "config.h"
#endif
-#include <rtems/test.h>
+#include <rtems/test-info.h>
#include <rtems/score/assert.h>
#include <rtems.h>
diff --git a/cpukit/libtest/testrun.c b/cpukit/libtest/testrun.c
new file mode 100644
index 0000000000..d11bf63c17
--- /dev/null
+++ b/cpukit/libtest/testrun.c
@@ -0,0 +1,87 @@
+/* SPDX-License-Identifier: BSD-2-Clause */
+
+/**
+ * @file
+ *
+ * @ingroup RTEMSAPI
+ *
+ * @brief Implementation of rtems_test_run_default().
+ */
+
+/*
+ * Copyright (C) 2020 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.
+ */
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#include <rtems/test-info.h>
+#include <rtems/test.h>
+
+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 = rtems_test_name,
+ .buf = buffer,
+ .buf_size = sizeof( buffer ),
+ .putchar = T_putchar_default,
+ .verbosity = T_VERBOSE,
+ .now = T_now_clock,
+ .action_count = T_ARRAY_SIZE( actions ),
+ .actions = actions
+};
+
+void rtems_test_run(
+ rtems_task_argument arg,
+ const RTEMS_TEST_STATE state
+)
+{
+ (void) arg;
+
+ rtems_test_begin( rtems_test_name, state );
+ T_register();
+
+ if ( T_main( &config ) == 0 ) {
+ rtems_test_end( rtems_test_name );
+ }
+
+ rtems_test_exit( 0 );
+}
diff --git a/cpukit/libtest/testwrappers.c b/cpukit/libtest/testwrappers.c
index 782beb9863..9679f75b6c 100644
--- a/cpukit/libtest/testwrappers.c
+++ b/cpukit/libtest/testwrappers.c
@@ -10,7 +10,7 @@
#include "config.h"
#endif
-#include <rtems/test.h>
+#include <rtems/test-info.h>
int __wrap_printf(const char* format, ...);
int __wrap_puts(const char *str);
diff --git a/cpukit/posix/src/pthreadcreate.c b/cpukit/posix/src/pthreadcreate.c
index d431c64a3e..33c5f8d03a 100644
--- a/cpukit/posix/src/pthreadcreate.c
+++ b/cpukit/posix/src/pthreadcreate.c
@@ -218,8 +218,10 @@ int pthread_create(
}
if ( config.stack_area == NULL ) {
+ config.stack_free = _Stack_Free;
config.stack_area = _Stack_Allocate( config.stack_size );
- config.allocated_stack = config.stack_area;
+ } else {
+ config.stack_free = _Stack_Free_nothing;
}
status = ( config.stack_area != NULL );
diff --git a/cpukit/posix/src/pthreadgetattrnp.c b/cpukit/posix/src/pthreadgetattrnp.c
index a449ad48eb..eae29d1de7 100644
--- a/cpukit/posix/src/pthreadgetattrnp.c
+++ b/cpukit/posix/src/pthreadgetattrnp.c
@@ -40,6 +40,7 @@ int pthread_getattr_np(
ISR_lock_Context lock_context;
Thread_CPU_budget_algorithms budget_algorithm;
const Scheduler_Control *scheduler;
+ Priority_Control priority;
bool ok;
if ( attr == NULL ) {
@@ -66,15 +67,12 @@ int pthread_getattr_np(
}
scheduler = _Thread_Scheduler_get_home( the_thread );
- attr->schedparam.sched_priority = _POSIX_Priority_From_core(
- scheduler,
- _Thread_Get_priority( the_thread )
- );
_POSIX_Threads_Get_sched_param_sporadic(
the_thread,
scheduler,
&attr->schedparam
);
+ priority = the_thread->Real_priority.priority;
if ( _Thread_Is_joinable( the_thread ) ) {
attr->detachstate = PTHREAD_CREATE_JOINABLE;
@@ -97,6 +95,10 @@ int pthread_getattr_np(
attr->is_initialized = true;
attr->contentionscope = PTHREAD_SCOPE_PROCESS;
attr->cputime_clock_allowed = 1;
+ attr->schedparam.sched_priority = _POSIX_Priority_From_core(
+ scheduler,
+ priority
+ );
attr->schedpolicy =
_POSIX_Thread_Translate_to_sched_policy( budget_algorithm );
diff --git a/cpukit/posix/src/shmunlink.c b/cpukit/posix/src/shmunlink.c
index 053b9c4946..a889b4029c 100644
--- a/cpukit/posix/src/shmunlink.c
+++ b/cpukit/posix/src/shmunlink.c
@@ -29,28 +29,29 @@ int shm_unlink( const char *name )
_Objects_Allocator_lock();
shm = _POSIX_Shm_Get_by_name( name, 0, &obj_err );
- switch ( obj_err ) {
- case OBJECTS_GET_BY_NAME_INVALID_NAME:
- err = ENOENT;
- break;
-
- case OBJECTS_GET_BY_NAME_NAME_TOO_LONG:
- err = ENAMETOOLONG;
- break;
-
- case OBJECTS_GET_BY_NAME_NO_OBJECT:
- default:
- _Objects_Namespace_remove_string(
- &_POSIX_Shm_Information,
- &shm->Object
- );
-
- if ( shm->reference_count == 0 ) {
- /* Only remove the shm object if no references exist to it. Otherwise,
- * the shm object will be freed later in _POSIX_Shm_Attempt_delete */
- _POSIX_Shm_Free( shm );
- }
- break;
+ if ( shm ) {
+ _Objects_Namespace_remove_string(
+ &_POSIX_Shm_Information,
+ &shm->Object
+ );
+
+ if ( shm->reference_count == 0 ) {
+ /* Only remove the shm object if no references exist to it. Otherwise,
+ * the shm object will be freed later in _POSIX_Shm_Attempt_delete */
+ _POSIX_Shm_Free( shm );
+ }
+ } else {
+ switch ( obj_err ) {
+ case OBJECTS_GET_BY_NAME_NAME_TOO_LONG:
+ err = ENAMETOOLONG;
+ break;
+
+ case OBJECTS_GET_BY_NAME_INVALID_NAME:
+ case OBJECTS_GET_BY_NAME_NO_OBJECT:
+ default:
+ err = ENOENT;
+ break;
+ }
}
_Objects_Allocator_unlock();
diff --git a/cpukit/rtems/src/barrierident.c b/cpukit/rtems/src/barrierident.c
index e3d6a84b80..928cc0ce9e 100644
--- a/cpukit/rtems/src/barrierident.c
+++ b/cpukit/rtems/src/barrierident.c
@@ -1,41 +1,52 @@
+/* SPDX-License-Identifier: BSD-2-Clause */
+
/**
- * @file
+ * @file
+ *
+ * @ingroup ClassicBarrierImpl
*
- * @brief RTEMS Barrier name to Id
- * @ingroup ClassicBarrier
+ * @brief rtems_barrier_ident() Implementation
*/
/*
- * COPYRIGHT (c) 1989-2006.
- * On-Line Applications Research Corporation (OAR).
+ * Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+ * Copyright (C) 1989 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.
*
- * 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
#include "config.h"
#endif
-#include <rtems/rtems/statusimpl.h>
-#include <rtems/rtems/support.h>
-#include <rtems/rtems/options.h>
#include <rtems/rtems/barrierimpl.h>
+#include <rtems/rtems/objectimpl.h>
-rtems_status_code rtems_barrier_ident(
- rtems_name name,
- rtems_id *id
-)
+rtems_status_code rtems_barrier_ident( rtems_name name, rtems_id *id )
{
- Objects_Name_or_id_lookup_errors status;
-
- status = _Objects_Name_to_id_u32(
- &_Barrier_Information,
+ return _RTEMS_Name_to_id(
name,
OBJECTS_SEARCH_LOCAL_NODE,
- id
+ id,
+ &_Barrier_Information
);
-
- return _Status_Object_name_errors_to_status[ status ];
}
diff --git a/cpukit/rtems/src/dpmemident.c b/cpukit/rtems/src/dpmemident.c
index 775d833bde..38d906833f 100644
--- a/cpukit/rtems/src/dpmemident.c
+++ b/cpukit/rtems/src/dpmemident.c
@@ -1,42 +1,55 @@
+/* SPDX-License-Identifier: BSD-2-Clause */
+
/**
- * @file
+ * @file
+ *
+ * @ingroup ClassicDPMEMImpl
*
- * @brief RTEMS Port Name to Id
- * @ingroup ClassicDPMEM
+ * @brief rtems_port_ident() Implementation
*/
/*
- * COPYRIGHT (c) 1989-1999.
- * On-Line Applications Research Corporation (OAR).
+ * Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+ * Copyright (C) 1989 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.
*
- * 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
#include "config.h"
#endif
-#include <rtems/rtems/statusimpl.h>
-#include <rtems/rtems/support.h>
-#include <rtems/score/address.h>
#include <rtems/rtems/dpmemimpl.h>
-#include <rtems/score/thread.h>
+#include <rtems/rtems/objectimpl.h>
rtems_status_code rtems_port_ident(
rtems_name name,
rtems_id *id
)
{
- Objects_Name_or_id_lookup_errors status;
-
- status = _Objects_Name_to_id_u32(
- &_Dual_ported_memory_Information,
+ return _RTEMS_Name_to_id(
name,
OBJECTS_SEARCH_ALL_NODES,
- id
+ id,
+ &_Dual_ported_memory_Information
);
-
- return _Status_Object_name_errors_to_status[ status ];
}
diff --git a/cpukit/rtems/src/msgqcreate.c b/cpukit/rtems/src/msgqcreate.c
index 9d4e8cdfd6..3741347cc9 100644
--- a/cpukit/rtems/src/msgqcreate.c
+++ b/cpukit/rtems/src/msgqcreate.c
@@ -52,9 +52,11 @@ rtems_status_code rtems_message_queue_create(
return RTEMS_INVALID_ADDRESS;
#if defined(RTEMS_MULTIPROCESSING)
- if ( (is_global = _Attributes_Is_global( attribute_set ) ) &&
- !_System_state_Is_multiprocessing )
- return RTEMS_MP_NOT_CONFIGURED;
+ if ( !_System_state_Is_multiprocessing ) {
+ attribute_set = _Attributes_Clear( attribute_set, RTEMS_GLOBAL );
+ }
+
+ is_global = _Attributes_Is_global( attribute_set );
#endif
if ( count == 0 )
diff --git a/cpukit/rtems/src/msgqident.c b/cpukit/rtems/src/msgqident.c
index f25f0cdc6c..dfd68d21f0 100644
--- a/cpukit/rtems/src/msgqident.c
+++ b/cpukit/rtems/src/msgqident.c
@@ -1,33 +1,45 @@
+/* SPDX-License-Identifier: BSD-2-Clause */
+
/**
- * @file
+ * @file
+ *
+ * @ingroup ClassicMessageQueueImpl
*
- * @brief RTEMS Message Queue Name to Id
- * @ingroup ClassicMessageQueue
+ * @brief rtems_message_queue_ident() Implementation
*/
/*
- * COPYRIGHT (c) 1989-1999.
- * On-Line Applications Research Corporation (OAR).
+ * Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+ * Copyright (C) 1989 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.
*
- * 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
#include "config.h"
#endif
-#include <rtems/score/chain.h>
-#include <rtems/score/isr.h>
-#include <rtems/score/coremsgimpl.h>
-#include <rtems/score/thread.h>
-#include <rtems/score/wkspace.h>
-#include <rtems/rtems/statusimpl.h>
-#include <rtems/rtems/attrimpl.h>
#include <rtems/rtems/messageimpl.h>
-#include <rtems/rtems/options.h>
-#include <rtems/rtems/support.h>
+#include <rtems/rtems/objectimpl.h>
rtems_status_code rtems_message_queue_ident(
rtems_name name,
@@ -35,14 +47,5 @@ rtems_status_code rtems_message_queue_ident(
rtems_id *id
)
{
- Objects_Name_or_id_lookup_errors status;
-
- status = _Objects_Name_to_id_u32(
- &_Message_queue_Information,
- name,
- node,
- id
- );
-
- return _Status_Object_name_errors_to_status[ status ];
+ return _RTEMS_Name_to_id( name, node, id, &_Message_queue_Information );
}
diff --git a/cpukit/rtems/src/partcreate.c b/cpukit/rtems/src/partcreate.c
index 2aefce8067..9aa5e80bf1 100644
--- a/cpukit/rtems/src/partcreate.c
+++ b/cpukit/rtems/src/partcreate.c
@@ -66,9 +66,9 @@ rtems_status_code rtems_partition_create(
return RTEMS_INVALID_ADDRESS;
#if defined(RTEMS_MULTIPROCESSING)
- if ( _Attributes_Is_global( attribute_set ) &&
- !_System_state_Is_multiprocessing )
- return RTEMS_MP_NOT_CONFIGURED;
+ if ( !_System_state_Is_multiprocessing ) {
+ attribute_set = _Attributes_Clear( attribute_set, RTEMS_GLOBAL );
+ }
#endif
the_partition = _Partition_Allocate();
diff --git a/cpukit/rtems/src/partident.c b/cpukit/rtems/src/partident.c
index 03490cd95d..5e7140f8d9 100644
--- a/cpukit/rtems/src/partident.c
+++ b/cpukit/rtems/src/partident.c
@@ -1,28 +1,45 @@
+/* SPDX-License-Identifier: BSD-2-Clause */
+
/**
- * @file
+ * @file
+ *
+ * @ingroup ClassicPartitionImpl
*
- * @brief RTEMS Partition Name to Id
- * @ingroup ClassicPart
+ * @brief rtems_partition_ident() Implementation
*/
/*
- * COPYRIGHT (c) 1989-1999.
- * On-Line Applications Research Corporation (OAR).
+ * Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+ * Copyright (C) 1989 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.
*
- * 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
#include "config.h"
#endif
-#include <rtems/rtems/statusimpl.h>
-#include <rtems/rtems/support.h>
-#include <rtems/score/address.h>
#include <rtems/rtems/partimpl.h>
-#include <rtems/score/thread.h>
+#include <rtems/rtems/objectimpl.h>
rtems_status_code rtems_partition_ident(
rtems_name name,
@@ -30,9 +47,5 @@ rtems_status_code rtems_partition_ident(
rtems_id *id
)
{
- Objects_Name_or_id_lookup_errors status;
-
- status = _Objects_Name_to_id_u32( &_Partition_Information, name, node, id );
-
- return _Status_Object_name_errors_to_status[ status ];
+ return _RTEMS_Name_to_id( name, node, id, &_Partition_Information );
}
diff --git a/cpukit/rtems/src/ratemonident.c b/cpukit/rtems/src/ratemonident.c
index 9c1ae3fba0..67ba13b476 100644
--- a/cpukit/rtems/src/ratemonident.c
+++ b/cpukit/rtems/src/ratemonident.c
@@ -1,42 +1,52 @@
+/* SPDX-License-Identifier: BSD-2-Clause */
+
/**
- * @file
+ * @file
+ *
+ * @ingroup ClassicRateMonImpl
*
- * @brief RTEMS Rate Monotonic Name to Id
- * @ingroup ClassicRateMon
+ * @brief rtems_rate_monotonic_ident() Implementation
*/
/*
- * COPYRIGHT (c) 1989-2007.
- * On-Line Applications Research Corporation (OAR).
+ * Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+ * Copyright (C) 1989 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.
*
- * 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
#include "config.h"
#endif
-#include <rtems/rtems/statusimpl.h>
-#include <rtems/rtems/support.h>
-#include <rtems/score/isr.h>
#include <rtems/rtems/ratemonimpl.h>
-#include <rtems/score/thread.h>
+#include <rtems/rtems/objectimpl.h>
-rtems_status_code rtems_rate_monotonic_ident(
- rtems_name name,
- rtems_id *id
-)
+rtems_status_code rtems_rate_monotonic_ident( rtems_name name, rtems_id *id )
{
- Objects_Name_or_id_lookup_errors status;
-
- status = _Objects_Name_to_id_u32(
- &_Rate_monotonic_Information,
+ return _RTEMS_Name_to_id(
name,
OBJECTS_SEARCH_LOCAL_NODE,
- id
+ id,
+ &_Rate_monotonic_Information
);
-
- return _Status_Object_name_errors_to_status[ status ];
}
diff --git a/cpukit/rtems/src/regionident.c b/cpukit/rtems/src/regionident.c
index 9e4d4b7085..c8a643c356 100644
--- a/cpukit/rtems/src/regionident.c
+++ b/cpukit/rtems/src/regionident.c
@@ -1,43 +1,52 @@
+/* SPDX-License-Identifier: BSD-2-Clause */
+
/**
- * @file
+ * @file
+ *
+ * @ingroup ClassicRegionImpl
*
- * @brief RTEMS Region Name to Id
- * @ingroup ClassicRegion
+ * @brief rtems_region_ident() Implementation
*/
/*
- * COPYRIGHT (c) 1989-1999.
- * On-Line Applications Research Corporation (OAR).
+ * Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+ * Copyright (C) 1989 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.
*
- * 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
#include "config.h"
#endif
-#include <rtems/rtems/statusimpl.h>
-#include <rtems/rtems/support.h>
-#include <rtems/rtems/options.h>
#include <rtems/rtems/regionimpl.h>
-#include <rtems/score/thread.h>
-#include <rtems/score/apimutex.h>
+#include <rtems/rtems/objectimpl.h>
-rtems_status_code rtems_region_ident(
- rtems_name name,
- rtems_id *id
-)
+rtems_status_code rtems_region_ident( rtems_name name, rtems_id *id )
{
- Objects_Name_or_id_lookup_errors status;
-
- status = _Objects_Name_to_id_u32(
- &_Region_Information,
+ return _RTEMS_Name_to_id(
name,
OBJECTS_SEARCH_LOCAL_NODE,
- id
+ id,
+ &_Region_Information
);
-
- return _Status_Object_name_errors_to_status[ status ];
}
diff --git a/cpukit/rtems/src/rtemsnametoid.c b/cpukit/rtems/src/rtemsnametoid.c
new file mode 100644
index 0000000000..43a6d20908
--- /dev/null
+++ b/cpukit/rtems/src/rtemsnametoid.c
@@ -0,0 +1,55 @@
+/* SPDX-License-Identifier: BSD-2-Clause */
+
+/**
+ * @file
+ *
+ * @ingroup ClassicObjectImpl
+ *
+ * @brief _RTEMS_Name_to_id() Implementation
+ */
+
+/*
+ * Copyright (C) 2020 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.
+ */
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#include <rtems/rtems/objectimpl.h>
+#include <rtems/rtems/statusimpl.h>
+
+rtems_status_code _RTEMS_Name_to_id(
+ uint32_t name,
+ uint32_t node,
+ Objects_Id *id,
+ const Objects_Information *information
+)
+{
+ Objects_Name_or_id_lookup_errors status;
+
+ status = _Objects_Name_to_id_u32( name, node, id, information );
+
+ return _Status_Object_name_errors_to_status[ status ];
+}
diff --git a/cpukit/rtems/src/semcreate.c b/cpukit/rtems/src/semcreate.c
index 6cdd877cce..b57b635d85 100644
--- a/cpukit/rtems/src/semcreate.c
+++ b/cpukit/rtems/src/semcreate.c
@@ -57,11 +57,8 @@ rtems_status_code rtems_semaphore_create(
return RTEMS_INVALID_ADDRESS;
#if defined(RTEMS_MULTIPROCESSING)
- if (
- _Attributes_Is_global( attribute_set )
- && !_System_state_Is_multiprocessing
- ) {
- return RTEMS_MP_NOT_CONFIGURED;
+ if ( !_System_state_Is_multiprocessing ) {
+ attribute_set = _Attributes_Clear( attribute_set, RTEMS_GLOBAL );
}
#endif
diff --git a/cpukit/rtems/src/semident.c b/cpukit/rtems/src/semident.c
index 37c776cf81..93c325c48d 100644
--- a/cpukit/rtems/src/semident.c
+++ b/cpukit/rtems/src/semident.c
@@ -1,17 +1,37 @@
+/* SPDX-License-Identifier: BSD-2-Clause */
+
/**
- * @file
+ * @file
+ *
+ * @ingroup ClassicSemImpl
*
- * @brief RTEMS Semaphore Name to Id
- * @ingroup ClassicSem
+ * @brief rtems_semaphore_ident() Implementation
*/
/*
- * COPYRIGHT (c) 1989-1999.
- * On-Line Applications Research Corporation (OAR).
+ * Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+ * Copyright (C) 1989 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.
*
- * 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
@@ -19,7 +39,7 @@
#endif
#include <rtems/rtems/semimpl.h>
-#include <rtems/rtems/statusimpl.h>
+#include <rtems/rtems/objectimpl.h>
rtems_status_code rtems_semaphore_ident(
rtems_name name,
@@ -27,9 +47,5 @@ rtems_status_code rtems_semaphore_ident(
rtems_id *id
)
{
- Objects_Name_or_id_lookup_errors status;
-
- status = _Objects_Name_to_id_u32( &_Semaphore_Information, name, node, id );
-
- return _Status_Object_name_errors_to_status[ status ];
+ return _RTEMS_Name_to_id( name, node, id, &_Semaphore_Information );
}
diff --git a/cpukit/rtems/src/taskconstruct.c b/cpukit/rtems/src/taskconstruct.c
new file mode 100644
index 0000000000..76ef8ce5d6
--- /dev/null
+++ b/cpukit/rtems/src/taskconstruct.c
@@ -0,0 +1,300 @@
+/**
+ * @file
+ *
+ * @ingroup ClassicTasks
+ *
+ * @brief RTEMS Task Create from Config
+ */
+
+/*
+ * COPYRIGHT (c) 1989-2014,2016.
+ * 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.
+ */
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#include <rtems/rtems/tasksimpl.h>
+#include <rtems/rtems/attrimpl.h>
+#include <rtems/rtems/eventimpl.h>
+#include <rtems/rtems/modesimpl.h>
+#include <rtems/rtems/support.h>
+#include <rtems/score/apimutex.h>
+#include <rtems/score/schedulerimpl.h>
+#include <rtems/score/stackimpl.h>
+#include <rtems/score/threadimpl.h>
+#include <rtems/score/userextimpl.h>
+#include <rtems/sysinit.h>
+
+#include <string.h>
+
+static rtems_status_code _RTEMS_tasks_Prepare_user_stack(
+ Thread_Configuration *thread_config,
+ const rtems_task_config *config
+)
+{
+ size_t size;
+
+ size = _TLS_Get_allocation_size();
+
+ if ( config->maximum_thread_local_storage_size < size ) {
+ return RTEMS_INVALID_SIZE;
+ }
+
+#if ( CPU_HARDWARE_FP == TRUE ) || ( CPU_SOFTWARE_FP == TRUE )
+ if ( thread_config->is_fp ) {
+ size += CONTEXT_FP_SIZE;
+ }
+#endif
+
+ size += _Stack_Minimum();
+
+ if ( config->storage_size < size ) {
+ return RTEMS_INVALID_SIZE;
+ }
+
+ thread_config->stack_size = config->storage_size;
+ thread_config->stack_area = config->storage_area;
+
+ if ( config->storage_free != NULL ) {
+ thread_config->stack_free = config->storage_free;
+ } else {
+ thread_config->stack_free = _Stack_Free_nothing;
+ }
+
+ return RTEMS_SUCCESSFUL;
+}
+
+rtems_status_code rtems_task_construct(
+ const rtems_task_config *config,
+ rtems_id *id
+)
+{
+ return _RTEMS_tasks_Create( config, id, _RTEMS_tasks_Prepare_user_stack );
+}
+
+rtems_status_code _RTEMS_tasks_Create(
+ const rtems_task_config *config,
+ rtems_id *id,
+ RTEMS_tasks_Prepare_stack prepare_stack
+)
+{
+ Thread_Control *the_thread;
+ Thread_Configuration thread_config;
+#if defined(RTEMS_MULTIPROCESSING)
+ Objects_MP_Control *the_global_object = NULL;
+ bool is_global;
+#endif
+ rtems_status_code status;
+ rtems_attribute attributes;
+ bool valid;
+ RTEMS_API_Control *api;
+ ASR_Information *asr;
+
+ if ( !id )
+ return RTEMS_INVALID_ADDRESS;
+
+ if ( !rtems_is_name_valid( config->name ) )
+ return RTEMS_INVALID_NAME;
+
+ /*
+ * Core Thread Initialize insures we get the minimum amount of
+ * stack space.
+ */
+
+ /*
+ * Fix the attribute set to match the attributes which
+ * this processor (1) requires and (2) is able to support.
+ * First add in the required flags for attributes
+ * Typically this might include FP if the platform
+ * or application required all tasks to be fp aware.
+ * Then turn off the requested bits which are not supported.
+ */
+
+ attributes = _Attributes_Set( config->attributes, ATTRIBUTES_REQUIRED );
+ attributes = _Attributes_Clear( attributes, ATTRIBUTES_NOT_SUPPORTED );
+
+ memset( &thread_config, 0, sizeof( thread_config ) );
+ thread_config.budget_algorithm = _Modes_Is_timeslice( config->initial_modes ) ?
+ THREAD_CPU_BUDGET_ALGORITHM_RESET_TIMESLICE
+ : THREAD_CPU_BUDGET_ALGORITHM_NONE,
+ thread_config.isr_level = _Modes_Get_interrupt_level( config->initial_modes );
+ thread_config.name.name_u32 = config->name;
+ thread_config.is_fp = _Attributes_Is_floating_point( attributes );
+ thread_config.is_preemptible = _Modes_Is_preempt( config->initial_modes );
+
+ /*
+ * Validate the RTEMS API priority and convert it to the core priority range.
+ */
+
+ if ( !_Attributes_Is_system_task( attributes ) ) {
+ if ( config->initial_priority == PRIORITY_MINIMUM ) {
+ return RTEMS_INVALID_PRIORITY;
+ }
+ }
+
+ thread_config.scheduler =
+ _Thread_Scheduler_get_home( _Thread_Get_executing() );
+
+ thread_config.priority = _RTEMS_Priority_To_core(
+ thread_config.scheduler,
+ config->initial_priority,
+ &valid
+ );
+ if ( !valid ) {
+ return RTEMS_INVALID_PRIORITY;
+ }
+
+#if defined(RTEMS_MULTIPROCESSING)
+ if ( !_System_state_Is_multiprocessing ) {
+ attributes = _Attributes_Clear( attributes, RTEMS_GLOBAL );
+ }
+
+ is_global = _Attributes_Is_global( attributes );
+#endif
+
+ /*
+ * Allocate the thread control block and -- if the task is global --
+ * allocate a global object control block.
+ *
+ * NOTE: This routine does not use the combined allocate and open
+ * global object routine (_Objects_MP_Allocate_and_open) because
+ * this results in a lack of control over when memory is allocated
+ * and can be freed in the event of an error.
+ */
+ the_thread = _RTEMS_tasks_Allocate();
+
+ if ( !the_thread ) {
+ _Objects_Allocator_unlock();
+ return RTEMS_TOO_MANY;
+ }
+
+#if defined(RTEMS_MULTIPROCESSING)
+ if ( is_global ) {
+ the_global_object = _Objects_MP_Allocate_global_object();
+
+ if ( _Objects_MP_Is_null_global_object( the_global_object ) ) {
+ _RTEMS_tasks_Free( the_thread );
+ _Objects_Allocator_unlock();
+ return RTEMS_TOO_MANY;
+ }
+ }
+#endif
+
+ status = ( *prepare_stack )( &thread_config, config );
+
+ /*
+ * Initialize the core thread for this task.
+ */
+
+ if ( status == RTEMS_SUCCESSFUL ) {
+ bool ok;
+
+ ok = _Thread_Initialize(
+ &_RTEMS_tasks_Information,
+ the_thread,
+ &thread_config
+ );
+
+ if ( !ok ) {
+ status = RTEMS_UNSATISFIED;
+ }
+ }
+
+ if ( status != RTEMS_SUCCESSFUL ) {
+#if defined(RTEMS_MULTIPROCESSING)
+ if ( is_global )
+ _Objects_MP_Free_global_object( the_global_object );
+#endif
+ _RTEMS_tasks_Free( the_thread );
+ _Objects_Allocator_unlock();
+ return status;
+ }
+
+ api = the_thread->API_Extensions[ THREAD_API_RTEMS ];
+ asr = &api->Signal;
+
+ asr->is_enabled = !_Modes_Is_asr_disabled( config->initial_modes );
+
+ *id = the_thread->Object.id;
+
+#if defined(RTEMS_MULTIPROCESSING)
+ the_thread->is_global = is_global;
+ if ( is_global ) {
+
+ _Objects_MP_Open(
+ &_RTEMS_tasks_Information.Objects,
+ the_global_object,
+ config->name,
+ the_thread->Object.id
+ );
+
+ _RTEMS_tasks_MP_Send_process_packet(
+ RTEMS_TASKS_MP_ANNOUNCE_CREATE,
+ the_thread->Object.id,
+ config->name
+ );
+
+ }
+#endif
+
+ _Objects_Allocator_unlock();
+ return RTEMS_SUCCESSFUL;
+}
+
+static void _RTEMS_tasks_Start_extension(
+ Thread_Control *executing,
+ Thread_Control *started
+)
+{
+ RTEMS_API_Control *api;
+
+ api = started->API_Extensions[ THREAD_API_RTEMS ];
+
+ _Event_Initialize( &api->Event );
+ _Event_Initialize( &api->System_event );
+}
+
+#if defined(RTEMS_MULTIPROCESSING)
+static void _RTEMS_tasks_Terminate_extension( Thread_Control *executing )
+{
+ if ( executing->is_global ) {
+ _Objects_MP_Close(
+ &_RTEMS_tasks_Information.Objects,
+ executing->Object.id
+ );
+ _RTEMS_tasks_MP_Send_process_packet(
+ RTEMS_TASKS_MP_ANNOUNCE_DELETE,
+ executing->Object.id,
+ 0 /* Not used */
+ );
+ }
+}
+#endif
+
+static User_extensions_Control _RTEMS_tasks_User_extensions = {
+ .Callouts = {
+#if defined(RTEMS_MULTIPROCESSING)
+ .thread_terminate = _RTEMS_tasks_Terminate_extension,
+#endif
+ .thread_start = _RTEMS_tasks_Start_extension,
+ .thread_restart = _RTEMS_tasks_Start_extension
+ }
+};
+
+static void _RTEMS_tasks_Manager_initialization( void )
+{
+ _Thread_Initialize_information( &_RTEMS_tasks_Information );
+ _User_extensions_Add_API_set( &_RTEMS_tasks_User_extensions );
+}
+
+RTEMS_SYSINIT_ITEM(
+ _RTEMS_tasks_Manager_initialization,
+ RTEMS_SYSINIT_CLASSIC_TASKS,
+ RTEMS_SYSINIT_ORDER_MIDDLE
+);
diff --git a/cpukit/rtems/src/taskcreate.c b/cpukit/rtems/src/taskcreate.c
index 288eafa5c7..917d931424 100644
--- a/cpukit/rtems/src/taskcreate.c
+++ b/cpukit/rtems/src/taskcreate.c
@@ -1,17 +1,36 @@
+/* SPDX-License-Identifier: BSD-2-Clause */
+
/**
- * @file
+ * @file
+ *
+ * @ingroup ClassicTasks
*
- * @brief RTEMS Task Create
- * @ingroup ClassicTasks
+ * @brief RTEMS Task Create
*/
/*
- * COPYRIGHT (c) 1989-2014,2016.
- * On-Line Applications Research Corporation (OAR).
+ * Copyright (C) 2020 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.
*
- * 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
@@ -19,242 +38,51 @@
#endif
#include <rtems/rtems/tasksimpl.h>
-#include <rtems/rtems/attrimpl.h>
-#include <rtems/rtems/eventimpl.h>
-#include <rtems/rtems/modesimpl.h>
-#include <rtems/rtems/support.h>
-#include <rtems/score/apimutex.h>
-#include <rtems/score/schedulerimpl.h>
#include <rtems/score/stackimpl.h>
-#include <rtems/score/sysstate.h>
-#include <rtems/score/threadimpl.h>
-#include <rtems/score/userextimpl.h>
-#include <rtems/sysinit.h>
#include <string.h>
-rtems_status_code rtems_task_create(
- rtems_name name,
- rtems_task_priority initial_priority,
- size_t stack_size,
- rtems_mode initial_modes,
- rtems_attribute attribute_set,
- rtems_id *id
+static rtems_status_code _RTEMS_tasks_Allocate_and_prepare_stack(
+ Thread_Configuration *thread_config,
+ const rtems_task_config *config
)
{
- Thread_Control *the_thread;
- Thread_Configuration config;
-#if defined(RTEMS_MULTIPROCESSING)
- Objects_MP_Control *the_global_object = NULL;
- bool is_global;
-#endif
- bool status;
- rtems_attribute the_attribute_set;
- bool valid;
- RTEMS_API_Control *api;
- ASR_Information *asr;
-
- if ( !id )
- return RTEMS_INVALID_ADDRESS;
-
- if ( !rtems_is_name_valid( name ) )
- return RTEMS_INVALID_NAME;
-
- /*
- * Core Thread Initialize insures we get the minimum amount of
- * stack space.
- */
-
- /*
- * Fix the attribute set to match the attributes which
- * this processor (1) requires and (2) is able to support.
- * First add in the required flags for attribute_set
- * Typically this might include FP if the platform
- * or application required all tasks to be fp aware.
- * Then turn off the requested bits which are not supported.
- */
-
- the_attribute_set = _Attributes_Set( attribute_set, ATTRIBUTES_REQUIRED );
- the_attribute_set =
- _Attributes_Clear( the_attribute_set, ATTRIBUTES_NOT_SUPPORTED );
-
- memset( &config, 0, sizeof( config ) );
- config.budget_algorithm = _Modes_Is_timeslice( initial_modes ) ?
- THREAD_CPU_BUDGET_ALGORITHM_RESET_TIMESLICE
- : THREAD_CPU_BUDGET_ALGORITHM_NONE,
- config.isr_level = _Modes_Get_interrupt_level( initial_modes );
- config.name.name_u32 = name;
- config.is_fp = _Attributes_Is_floating_point( the_attribute_set );
- config.is_preemptible = _Modes_Is_preempt( initial_modes );
- config.stack_size = _Stack_Ensure_minimum( stack_size );
- config.stack_size = _Stack_Extend_size( config.stack_size, config.is_fp );
+ size_t size;
- /*
- * Validate the RTEMS API priority and convert it to the core priority range.
- */
-
- if ( !_Attributes_Is_system_task( the_attribute_set ) ) {
- if ( initial_priority == PRIORITY_MINIMUM ) {
- return RTEMS_INVALID_PRIORITY;
- }
- }
-
- config.scheduler = _Thread_Scheduler_get_home( _Thread_Get_executing() );
-
- config.priority = _RTEMS_Priority_To_core(
- config.scheduler,
- initial_priority,
- &valid
- );
- if ( !valid ) {
- return RTEMS_INVALID_PRIORITY;
- }
-
-#if defined(RTEMS_MULTIPROCESSING)
- if ( _Attributes_Is_global( the_attribute_set ) ) {
-
- is_global = true;
-
- if ( !_System_state_Is_multiprocessing )
- return RTEMS_MP_NOT_CONFIGURED;
-
- } else
- is_global = false;
-#endif
-
- /*
- * Allocate the thread control block and -- if the task is global --
- * allocate a global object control block.
- *
- * NOTE: This routine does not use the combined allocate and open
- * global object routine (_Objects_MP_Allocate_and_open) because
- * this results in a lack of control over when memory is allocated
- * and can be freed in the event of an error.
- */
- the_thread = _RTEMS_tasks_Allocate();
-
- if ( !the_thread ) {
- _Objects_Allocator_unlock();
- return RTEMS_TOO_MANY;
- }
-
-#if defined(RTEMS_MULTIPROCESSING)
- if ( is_global ) {
- the_global_object = _Objects_MP_Allocate_global_object();
-
- if ( _Objects_MP_Is_null_global_object( the_global_object ) ) {
- _RTEMS_tasks_Free( the_thread );
- _Objects_Allocator_unlock();
- return RTEMS_TOO_MANY;
- }
- }
-#endif
+ thread_config->stack_free = _Stack_Free;
+ size = _Stack_Ensure_minimum( config->storage_size );
+ size = _Stack_Extend_size( size, thread_config->is_fp );
+ thread_config->stack_size = size;
+ thread_config->stack_area = _Stack_Allocate( size );
- config.stack_area = _Stack_Allocate( config.stack_size );
- config.allocated_stack = config.stack_area;
- status = ( config.stack_area != NULL );
-
- /*
- * Initialize the core thread for this task.
- */
-
- if ( status ) {
- status = _Thread_Initialize(
- &_RTEMS_tasks_Information,
- the_thread,
- &config
- );
- }
-
- if ( !status ) {
-#if defined(RTEMS_MULTIPROCESSING)
- if ( is_global )
- _Objects_MP_Free_global_object( the_global_object );
-#endif
- _RTEMS_tasks_Free( the_thread );
- _Objects_Allocator_unlock();
+ if ( thread_config->stack_area == NULL ) {
return RTEMS_UNSATISFIED;
}
- api = the_thread->API_Extensions[ THREAD_API_RTEMS ];
- asr = &api->Signal;
-
- asr->is_enabled = _Modes_Is_asr_disabled(initial_modes) ? false : true;
-
- *id = the_thread->Object.id;
-
-#if defined(RTEMS_MULTIPROCESSING)
- the_thread->is_global = is_global;
- if ( is_global ) {
-
- _Objects_MP_Open(
- &_RTEMS_tasks_Information.Objects,
- the_global_object,
- name,
- the_thread->Object.id
- );
-
- _RTEMS_tasks_MP_Send_process_packet(
- RTEMS_TASKS_MP_ANNOUNCE_CREATE,
- the_thread->Object.id,
- name
- );
-
- }
-#endif
-
- _Objects_Allocator_unlock();
return RTEMS_SUCCESSFUL;
}
-static void _RTEMS_tasks_Start_extension(
- Thread_Control *executing,
- Thread_Control *started
+rtems_status_code rtems_task_create(
+ rtems_name name,
+ rtems_task_priority initial_priority,
+ size_t stack_size,
+ rtems_mode initial_modes,
+ rtems_attribute attribute_set,
+ rtems_id *id
)
{
- RTEMS_API_Control *api;
-
- api = started->API_Extensions[ THREAD_API_RTEMS ];
-
- _Event_Initialize( &api->Event );
- _Event_Initialize( &api->System_event );
-}
+ rtems_task_config config;
-#if defined(RTEMS_MULTIPROCESSING)
-static void _RTEMS_tasks_Terminate_extension( Thread_Control *executing )
-{
- if ( executing->is_global ) {
- _Objects_MP_Close(
- &_RTEMS_tasks_Information.Objects,
- executing->Object.id
- );
- _RTEMS_tasks_MP_Send_process_packet(
- RTEMS_TASKS_MP_ANNOUNCE_DELETE,
- executing->Object.id,
- 0 /* Not used */
- );
- }
-}
-#endif
-
-static User_extensions_Control _RTEMS_tasks_User_extensions = {
- .Callouts = {
-#if defined(RTEMS_MULTIPROCESSING)
- .thread_terminate = _RTEMS_tasks_Terminate_extension,
-#endif
- .thread_start = _RTEMS_tasks_Start_extension,
- .thread_restart = _RTEMS_tasks_Start_extension
- }
-};
-
-static void _RTEMS_tasks_Manager_initialization( void )
-{
- _Thread_Initialize_information( &_RTEMS_tasks_Information );
- _User_extensions_Add_API_set( &_RTEMS_tasks_User_extensions );
+ memset( &config, 0, sizeof( config ) );
+ config.name = name;
+ config.initial_priority = initial_priority;
+ config.storage_size = stack_size;
+ config.initial_modes = initial_modes;
+ config.attributes = attribute_set;
+
+ return _RTEMS_tasks_Create(
+ &config,
+ id,
+ _RTEMS_tasks_Allocate_and_prepare_stack
+ );
}
-
-RTEMS_SYSINIT_ITEM(
- _RTEMS_tasks_Manager_initialization,
- RTEMS_SYSINIT_CLASSIC_TASKS,
- RTEMS_SYSINIT_ORDER_MIDDLE
-);
diff --git a/cpukit/rtems/src/taskident.c b/cpukit/rtems/src/taskident.c
index d35a617c1f..501bd0b05f 100644
--- a/cpukit/rtems/src/taskident.c
+++ b/cpukit/rtems/src/taskident.c
@@ -1,53 +1,66 @@
+/* SPDX-License-Identifier: BSD-2-Clause */
+
/**
- * @file
+ * @file
+ *
+ * @ingroup ClassicTasksImpl
*
- * @brief RTEMS Task Name to Id
- * @ingroup ClassicTasks
+ * @brief rtems_task_ident() Implementation
*/
/*
- * COPYRIGHT (c) 1989-1999.
- * On-Line Applications Research Corporation (OAR).
+ * Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+ * Copyright (C) 1989 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.
*
- * 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
#include "config.h"
#endif
-#include <rtems/rtems/statusimpl.h>
-#include <rtems/rtems/support.h>
-#include <rtems/rtems/modes.h>
-#include <rtems/score/stack.h>
#include <rtems/rtems/tasksimpl.h>
-#include <rtems/score/thread.h>
-#include <rtems/score/wkspace.h>
+#include <rtems/rtems/objectimpl.h>
+#include <rtems/score/percpu.h>
rtems_status_code rtems_task_ident(
- rtems_name name,
- uint32_t node,
- rtems_id *id
+ rtems_name name,
+ uint32_t node,
+ rtems_id *id
)
{
- Objects_Name_or_id_lookup_errors status;
-
- if ( !id )
+ if ( id == NULL ) {
return RTEMS_INVALID_ADDRESS;
+ }
if ( name == OBJECTS_ID_OF_SELF ) {
*id = _Thread_Get_executing()->Object.id;
return RTEMS_SUCCESSFUL;
- }
+ }
- status = _Objects_Name_to_id_u32(
- &_RTEMS_tasks_Information.Objects,
+ return _RTEMS_Name_to_id(
name,
node,
- id
+ id,
+ &_RTEMS_tasks_Information.Objects
);
-
- return _Status_Object_name_errors_to_status[ status ];
}
diff --git a/cpukit/rtems/src/timerident.c b/cpukit/rtems/src/timerident.c
index b11550a744..8259507c15 100644
--- a/cpukit/rtems/src/timerident.c
+++ b/cpukit/rtems/src/timerident.c
@@ -1,42 +1,52 @@
+/* SPDX-License-Identifier: BSD-2-Clause */
+
/**
- * @file
+ * @file
+ *
+ * @ingroup ClassicTimerImpl
*
- * @brief RTEMS Timer Name to Id
- * @ingroup ClassicTimer
+ * @brief rtems_timer_ident() Implementation
*/
/*
- * COPYRIGHT (c) 1989-2002.
- * On-Line Applications Research Corporation (OAR).
+ * Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+ * Copyright (C) 1989 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.
*
- * 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
#include "config.h"
#endif
-#include <rtems/rtems/statusimpl.h>
-#include <rtems/rtems/support.h>
-#include <rtems/score/thread.h>
#include <rtems/rtems/timerimpl.h>
-#include <rtems/score/watchdog.h>
+#include <rtems/rtems/objectimpl.h>
-rtems_status_code rtems_timer_ident(
- rtems_name name,
- rtems_id *id
-)
+rtems_status_code rtems_timer_ident( rtems_name name, rtems_id *id )
{
- Objects_Name_or_id_lookup_errors status;
-
- status = _Objects_Name_to_id_u32(
- &_Timer_Information,
+ return _RTEMS_Name_to_id(
name,
OBJECTS_SEARCH_LOCAL_NODE,
- id
+ id,
+ &_Timer_Information
);
-
- return _Status_Object_name_errors_to_status[ status ];
}
diff --git a/cpukit/sapi/src/extensionident.c b/cpukit/sapi/src/extensionident.c
index c92a779c0b..d408f68dd1 100644
--- a/cpukit/sapi/src/extensionident.c
+++ b/cpukit/sapi/src/extensionident.c
@@ -1,42 +1,52 @@
+/* SPDX-License-Identifier: BSD-2-Clause */
+
/**
* @file
*
- * @ingroup ClassicUserExtensions
+ * @ingroup ClassicUserExtensionsImpl
*
- * @brief User Extensions Implementation.
+ * @brief rtems_extension_ident() Implementation
*/
/*
- * COPYRIGHT (c) 1989-2007.
- * On-Line Applications Research Corporation (OAR).
+ * Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+ * Copyright (C) 1989 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.
*
- * 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
#include "config.h"
#endif
-#include <rtems/rtems/statusimpl.h>
-#include <rtems/rtems/support.h>
-#include <rtems/score/thread.h>
#include <rtems/extensionimpl.h>
+#include <rtems/rtems/objectimpl.h>
-rtems_status_code rtems_extension_ident(
- rtems_name name,
- rtems_id *id
-)
+rtems_status_code rtems_extension_ident( rtems_name name, rtems_id *id )
{
- Objects_Name_or_id_lookup_errors status;
-
- status = _Objects_Name_to_id_u32(
- &_Extension_Information,
+ return _RTEMS_Name_to_id(
name,
OBJECTS_SEARCH_LOCAL_NODE,
- id
+ id,
+ &_Extension_Information
);
-
- return _Status_Object_name_errors_to_status[ status ];
}
diff --git a/cpukit/sapi/src/getcopyrightnotice.c b/cpukit/sapi/src/getcopyrightnotice.c
index 4e5df66524..cd601254e6 100644
--- a/cpukit/sapi/src/getcopyrightnotice.c
+++ b/cpukit/sapi/src/getcopyrightnotice.c
@@ -39,7 +39,7 @@
#pragma GCC diagnostic ignored "-Wdeprecated-declarations"
-#include <rtems.h>
+#include <rtems/config.h>
#include <rtems/score/copyrt.h>
const char *rtems_get_copyright_notice( void )
diff --git a/cpukit/sapi/src/getversionstring.c b/cpukit/sapi/src/getversionstring.c
index f3fada9c48..f8380f7b4f 100644
--- a/cpukit/sapi/src/getversionstring.c
+++ b/cpukit/sapi/src/getversionstring.c
@@ -19,9 +19,8 @@
#include "config.h"
#endif
-#pragma GCC diagnostic ignored "-Wdeprecated-declarations"
-
-#include <rtems.h>
+#include <rtems/config.h>
+#include <rtems/score/copyrt.h>
const char *rtems_get_version_string(void)
{
diff --git a/cpukit/sapi/src/interrtext.c b/cpukit/sapi/src/interrtext.c
index 2aff34487a..3d49135c44 100644
--- a/cpukit/sapi/src/interrtext.c
+++ b/cpukit/sapi/src/interrtext.c
@@ -7,7 +7,7 @@
*/
/*
- * Copyright (c) 2012, 2018 embedded brains GmbH. All rights reserved.
+ * Copyright (c) 2012, 2020 embedded brains GmbH. All rights reserved.
*
* embedded brains GmbH
* Dornierstr. 4
@@ -67,7 +67,8 @@ static const char *const internal_error_text[] = {
"INTERNAL_ERROR_LIBIO_STDERR_FD_OPEN_FAILED",
"INTERNAL_ERROR_ILLEGAL_USE_OF_FLOATING_POINT_UNIT",
"INTERNAL_ERROR_ARC4RANDOM_GETENTROPY_FAIL",
- "INTERNAL_ERROR_NO_MEMORY_FOR_PER_CPU_DATA"
+ "INTERNAL_ERROR_NO_MEMORY_FOR_PER_CPU_DATA",
+ "INTERNAL_ERROR_TOO_LARGE_TLS_SIZE"
};
const char *rtems_internal_error_text( rtems_fatal_code error )
diff --git a/cpukit/score/cpu/arm/armv7m-exception-default.c b/cpukit/score/cpu/arm/armv7m-exception-default.c
index 5add31a609..39c5b01242 100644
--- a/cpukit/score/cpu/arm/armv7m-exception-default.c
+++ b/cpukit/score/cpu/arm/armv7m-exception-default.c
@@ -40,13 +40,20 @@ void __attribute__((naked)) _ARMV7M_Exception_default( void )
"stm sp, {r0-r12}\n"
"tst lr, #4\n" /* Check if bit 2 of LR is zero. If so, PSR.Z = 1 */
"itte eq\n" /* IF bit 2 of LR is zero... (PSR.Z == 1) */
- "mrseq r0, msp\n" /* THEN we were using MSP. */
- "addeq r0, %[cpufsz]\n" /* THEN, set r0 = old MSP value. */
- "mrsne r0, psp\n" /* ELSE it's not zero; we were using PSP. */
- "add r2, r0, %[v7mlroff]\n"
- "add r1, sp, %[cpulroff]\n"
- "ldm r2, {r3-r5}\n" /* Grab LR, PC and PSR from the stack.. */
- "stm r1, {r3-r5}\n" /* ..and store them in our CPU_Exception_frame. */
+ "mrseq r3, msp\n" /* THEN we were using MSP */
+ "addeq r3, %[cpufsz]\n" /* THEN, set r3 = old MSP value */
+ "mrsne r3, psp\n" /* ELSE it is not zero; we were using PSP */
+ "add r2, r3, %[v7mlroff]\n"
+ "add r1, sp, %[cpuspoff]\n"
+ "ldm r2, {r4-r6}\n" /* Grab LR, PC and xPSR from the stack */
+ "tst lr, #16\n" /* Check if we have an FP state on the frame */
+ "ite eq\n"
+ "addeq r3, #104\n" /* Back to previous SP with FP state */
+ "addne r3, #32\n" /* Back to previous SP without FP state */
+ "tst r6, #512\n" /* Check xPSR if the SP was aligned */
+ "it ne\n"
+ "addne r3, #4\n" /* Undo alignment */
+ "stm r1, {r3-r6}\n" /* Store to CPU_Exception_frame */
"mrs r1, ipsr\n"
"str r1, [sp, %[cpuvecoff]]\n"
@@ -85,7 +92,7 @@ void __attribute__((naked)) _ARMV7M_Exception_default( void )
"b _ARM_Exception_default\n"
:
: [cpufsz] "i" (sizeof(CPU_Exception_frame)),
- [cpulroff] "i" (offsetof(CPU_Exception_frame, register_lr)),
+ [cpuspoff] "i" (offsetof(CPU_Exception_frame, register_sp)),
[v7mlroff] "i" (offsetof(ARMV7M_Exception_frame, register_lr)),
[cpuvecoff] "J" (offsetof(CPU_Exception_frame, vector)),
[cpuvfpoff] "i" (ARM_EXCEPTION_FRAME_VFP_CONTEXT_OFFSET),
diff --git a/cpukit/score/cpu/arm/include/libcpu/arm-cp15.h b/cpukit/score/cpu/arm/include/libcpu/arm-cp15.h
index 8d43ca0ac2..6097d60ba6 100644
--- a/cpukit/score/cpu/arm/include/libcpu/arm-cp15.h
+++ b/cpukit/score/cpu/arm/include/libcpu/arm-cp15.h
@@ -647,6 +647,22 @@ arm_cp15_tlb_invalidate_entry_all_asids(const void *mva)
}
ARM_CP15_TEXT_SECTION static inline void
+arm_cp15_tlb_invalidate_entry_all_asids_inner_shareable(const void *mva)
+{
+ ARM_SWITCH_REGISTERS;
+
+ mva = ARM_CP15_TLB_PREPARE_MVA(mva);
+
+ __asm__ volatile (
+ ARM_SWITCH_TO_ARM
+ "mcr p15, 0, %[mva], c8, c3, 3\n"
+ ARM_SWITCH_BACK
+ : ARM_SWITCH_OUTPUT
+ : [mva] "r" (mva)
+ );
+}
+
+ARM_CP15_TEXT_SECTION static inline void
arm_cp15_tlb_instruction_invalidate(void)
{
ARM_SWITCH_REGISTERS;
diff --git a/cpukit/score/cpu/arm/include/rtems/score/cpu.h b/cpukit/score/cpu/arm/include/rtems/score/cpu.h
index b7b48a3ac3..b90fb1f394 100644
--- a/cpukit/score/cpu/arm/include/rtems/score/cpu.h
+++ b/cpukit/score/cpu/arm/include/rtems/score/cpu.h
@@ -153,6 +153,8 @@
#define CPU_USE_GENERIC_BITFIELD_CODE TRUE
+#define CPU_USE_LIBC_INIT_FINI_ARRAY TRUE
+
#define CPU_MAXIMUM_PROCESSORS 32
#ifdef ARM_MULTILIB_HAS_THREAD_ID_REGISTER
diff --git a/cpukit/score/cpu/bfin/include/rtems/score/cpu.h b/cpukit/score/cpu/bfin/include/rtems/score/cpu.h
index 893a3ae359..3b0f0bece3 100644
--- a/cpukit/score/cpu/bfin/include/rtems/score/cpu.h
+++ b/cpukit/score/cpu/bfin/include/rtems/score/cpu.h
@@ -507,6 +507,8 @@ void _CPU_Context_Initialize(
#define CPU_USE_GENERIC_BITFIELD_CODE TRUE
+#define CPU_USE_LIBC_INIT_FINI_ARRAY FALSE
+
/* functions */
/**
diff --git a/cpukit/score/cpu/epiphany/cpu.c b/cpukit/score/cpu/epiphany/cpu.c
deleted file mode 100644
index d025d92a6e..0000000000
--- a/cpukit/score/cpu/epiphany/cpu.c
+++ /dev/null
@@ -1,87 +0,0 @@
-/*
- * Epiphany CPU Dependent Source
- *
- * Copyright (c) 2015 University of York.
- * Hesham ALMatary <hmka501@york.ac.uk>
- *
- * COPYRIGHT (c) 1989-1999.
- * 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 AUTHOR 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 AUTHOR 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/score/cpu.h>
-
-void _init(void);
-void _fini(void);
-
-void _init(void)
-{
-}
-
-void _fini(void)
-{
-}
-
-void _CPU_Exception_frame_print (const CPU_Exception_frame *ctx)
-{
- /* Do nothing */
-}
-/**
- * @brief Performs processor dependent initialization.
- */
-void _CPU_Initialize(void)
-{
- /* Do nothing */
-}
-
-void _CPU_ISR_Set_level(uint32_t level)
-{
- /* Do nothing */
-}
-
-uint32_t _CPU_ISR_Get_level( void )
-{
- /* Do nothing */
- return 0;
-}
-
-CPU_Counter_ticks _CPU_Counter_read( void )
-{
- static CPU_Counter_ticks counter;
-
- CPU_Counter_ticks snapshot;
-
- snapshot = counter;
- counter = snapshot + 1;
-
- return snapshot;
-}
-
-void *_CPU_Thread_Idle_body( uintptr_t ignored )
-{
- do {
- __asm__ __volatile__ ("idle");
- } while (1);
-
- return NULL;
-}
diff --git a/cpukit/score/cpu/epiphany/epiphany-context-initialize.c b/cpukit/score/cpu/epiphany/epiphany-context-initialize.c
deleted file mode 100644
index c43d502029..0000000000
--- a/cpukit/score/cpu/epiphany/epiphany-context-initialize.c
+++ /dev/null
@@ -1,66 +0,0 @@
-/*
- *
- * Copyright (c) 2015 University of York.
- * Hesham ALMatary <hmka501@york.ac.uk>
- *
- * COPYRIGHT (c) 1989-2006.
- * 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 AUTHOR 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 AUTHOR 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 <string.h>
-
-#include <rtems/score/cpu.h>
-#include <rtems/score/interr.h>
-
-void _CPU_Context_Initialize(
- Context_Control *context,
- void *stack_area_begin,
- size_t stack_area_size,
- uint32_t new_level,
- void (*entry_point)( void ),
- bool is_fp,
- void *tls_area
-)
-{
- uintptr_t stack = ((uintptr_t) stack_area_begin);
- uint32_t sr, iret;
-
- /* Account for red-zone */
- uintptr_t stack_high = stack + stack_area_size - EPIPHANY_GCC_RED_ZONE_SIZE;
-
- asm volatile ("movfs %0, status \n" : "=r" (sr):);
- asm volatile ("movfs %0, iret \n" : "=r" (iret):);
-
- memset(context, 0, sizeof(*context));
-
- context->r[11] = stack_high;
- context->r[13] = stack_high;
- context->r[14] = (uintptr_t) entry_point;
- context->status = sr;
- context->iret = iret;
-}
diff --git a/cpukit/score/cpu/epiphany/epiphany-context-switch.S b/cpukit/score/cpu/epiphany/epiphany-context-switch.S
deleted file mode 100644
index 8c530651c3..0000000000
--- a/cpukit/score/cpu/epiphany/epiphany-context-switch.S
+++ /dev/null
@@ -1,215 +0,0 @@
-/*
- * Epiphany CPU Dependent Source
- *
- * Copyright (c) 2015 University of York.
- * Hesham ALMatary <hmka501@york.ac.uk>
- *
- * 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 AUTHOR 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 AUTHOR 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/asm.h>
-
-.section .text,"ax"
-.align 4
-
-PUBLIC(_CPU_Context_switch)
-PUBLIC(_CPU_Context_restore)
-PUBLIC(_CPU_Context_restore_fp)
-PUBLIC(_CPU_Context_save_fp)
-
-SYM(_CPU_Context_switch):
- /* Disable interrupts and store all registers */
- gid
-
- str r0, [r0]
- str r1, [r0,1]
- str r2, [r0,2]
- str r3, [r0,3]
- str r4, [r0,4]
- str r5, [r0,5]
- str r6, [r0,6]
- str r7, [r0,7]
- str r8, [r0,8]
- str r9, [r0,9]
- str r10, [r0,10]
- str fp, [r0,11]
- str r12, [r0,12]
- str sp, [r0,13]
- str lr, [r0,14]
- str r15, [r0,15]
- str r16, [r0,16]
- str r17, [r0,17]
- str r18, [r0,18]
- str r19, [r0,19]
- str r20, [r0,20]
- str r21, [r0,21]
- str r22, [r0,22]
- str r23, [r0,23]
- str r24, [r0,24]
- str r25, [r0,25]
- str r26, [r0,26]
- str r27, [r0,27]
- str r28, [r0,28]
- str r29, [r0,29]
- str r30, [r0,30]
- str r31, [r0,31]
- str r32, [r0,32]
- str r33, [r0,33]
- str r34, [r0,34]
- str r35, [r0,35]
- str r36, [r0,36]
- str r37, [r0,37]
- str r38, [r0,38]
- str r39, [r0,39]
- str r40, [r0,40]
- str r41, [r0,41]
- str r42, [r0,42]
- str r43, [r0,43]
- str r44, [r0,44]
- str r45, [r0,45]
- str r46, [r0,46]
- str r47, [r0,47]
- str r48, [r0,48]
- str r49, [r0,49]
- str r50, [r0,50]
- str r51, [r0,51]
- str r52, [r0,52]
- str r53, [r0,53]
- str r54, [r0,54]
- str r55, [r0,55]
- str r56, [r0,56]
- str r57, [r0,57]
- str r58, [r0,58]
- str r59, [r0,59]
- str r60, [r0,60]
- str r61, [r0,61]
- str r62, [r0,62]
- str r63, [r0,63]
-
- /* Store status register */
- movfs r27, status
- str r27, [r0,64]
-
- /* Store config register */
- movfs r27, config
- str r27, [r0,65]
-
- /* Store interrupt return address register */
- movfs r27, iret
- str r27, [r0,66]
-
-.Lrestore:
-
- /* r1 contains buffer address, skip it */
- ldr r2, [r1,2]
- ldr r3, [r1,3]
- ldr r4, [r1,4]
- ldr r5, [r1,5]
- ldr r6, [r1,6]
- ldr r7, [r1,7]
- ldr r8, [r1,8]
- ldr r9, [r1,9]
- ldr r10, [r1,10]
- ldr fp, [r1,11]
- ldr r12, [r1,12]
- ldr sp, [r1,13]
- ldr lr, [r1,14]
- ldr r15, [r1,15]
- ldr r16, [r1,16]
- ldr r17, [r1,17]
- ldr r18, [r1,18]
- ldr r19, [r1,19]
- ldr r20, [r1,20]
- ldr r21, [r1,21]
- ldr r22, [r1,22]
- ldr r23, [r1,23]
- ldr r24, [r1,24]
- ldr r25, [r1,25]
- ldr r26, [r1,26]
- ldr r27, [r1,27]
- ldr r32, [r1,32]
- ldr r33, [r1,33]
- ldr r34, [r1,34]
- ldr r35, [r1,35]
- ldr r36, [r1,36]
- ldr r37, [r1,37]
- ldr r38, [r1,38]
- ldr r39, [r1,39]
- ldr r40, [r1,40]
- ldr r41, [r1,41]
- ldr r42, [r1,42]
- ldr r43, [r1,43]
- ldr r44, [r1,44]
- ldr r45, [r1,45]
- ldr r46, [r1,46]
- ldr r47, [r1,47]
- ldr r48, [r1,48]
- ldr r49, [r1,49]
- ldr r50, [r1,50]
- ldr r51, [r1,51]
- ldr r52, [r1,52]
- ldr r53, [r1,53]
- ldr r54, [r1,54]
- ldr r55, [r1,55]
- ldr r56, [r1,56]
- ldr r57, [r1,57]
- ldr r58, [r1,58]
- ldr r59, [r1,59]
- ldr r60, [r1,60]
- ldr r61, [r1,61]
- ldr r62, [r1,62]
- ldr r63, [r1,63]
-
- /* Load status register */
- ldr r0, [r1,64]
- movts status, r0
-
- /* Load config register */
- ldr r0, [r1,65]
- movts config, r0
-
- /* Load interrupt return address register */
- ldr r0,[r1,66]
- movts iret, r0
-
- ldr r0,[r1]
- ldr r1,[r1,1]
-
- /* Enable interrupts and return */
- gie
- jr lr
-
-SYM(_CPU_Context_restore):
- mov r1, r0
- b .Lrestore
- nop
-
-/* No FP support for Epiphany yet */
-SYM(_CPU_Context_restore_fp):
- nop
-
- SYM(_CPU_Context_save_fp):
- nop
diff --git a/cpukit/score/cpu/epiphany/epiphany-exception-handler.S b/cpukit/score/cpu/epiphany/epiphany-exception-handler.S
deleted file mode 100644
index f4fd1d1ff9..0000000000
--- a/cpukit/score/cpu/epiphany/epiphany-exception-handler.S
+++ /dev/null
@@ -1,304 +0,0 @@
-/**
- * @file
- *
- * @addtogroup RTEMSScoreCPU
- *
- * @brief Epiphany exception support implementation.
- */
-
-/*
- * Copyright (c) 2015 University of York.
- * Hesham ALMatary <hmka501@york.ac.uk>
- *
- * 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 AUTHOR 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 AUTHOR 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/score/cpu.h>
-
-#include <rtems/asm.h>
-#include <rtems/score/percpu.h>
-
-EXTERN(bsp_start_vector_table_begin)
-EXTERN(_Thread_Dispatch)
-PUBLIC(_ISR_Handler)
-
-.section .text, "ax"
-.align 4
-TYPE_FUNC(_ISR_Handler)
-SYM(_ISR_Handler):
- /* Reserve space for CPU_Exception_frame */
- sub sp, sp, #(CPU_EXCEPTION_FRAME_SIZE)
-
- str r0, [sp]
- str r1, [sp,1]
- str r2, [sp,2]
- str r3, [sp,3]
- str r4, [sp,4]
- str r5, [sp,5]
- str r6, [sp,6]
- str r7, [sp,7]
- str r8, [sp,8]
- str r9, [sp,9]
- str r10, [sp,10]
- str fp, [sp,11]
- str r12, [sp,12]
-
- /* Save interrupted task stack pointer */
- add r1, sp, #(CPU_EXCEPTION_FRAME_SIZE + 8)
- str r1,[sp,13]
-
- str lr, [sp,14]
- str r15, [sp,15]
- str r16, [sp,16]
- str r17, [sp,17]
- str r18, [sp,18]
- str r19, [sp,19]
- str r20, [sp,20]
- str r21, [sp,21]
- str r22, [sp,22]
- str r23, [sp,23]
- str r24, [sp,24]
- str r25, [sp,25]
- str r26, [sp,26]
- str r27, [sp,27]
- str r28, [sp,28]
- str r29, [sp,29]
- str r30, [sp,30]
- str r31, [sp,31]
- str r32, [sp,32]
- str r33, [sp,33]
- str r34, [sp,34]
- str r35, [sp,35]
- str r36, [sp,36]
- str r37, [sp,37]
- str r38, [sp,38]
- str r39, [sp,39]
- str r40, [sp,40]
- str r41, [sp,41]
- str r42, [sp,42]
- str r43, [sp,43]
- str r44, [sp,44]
- str r45, [sp,45]
- str r46, [sp,46]
- str r47, [sp,47]
- str r48, [sp,48]
- str r49, [sp,49]
- str r50, [sp,50]
- str r51, [sp,51]
- str r52, [sp,52]
- str r53, [sp,53]
- str r54, [sp,54]
- str r55, [sp,55]
- str r56, [sp,56]
- str r57, [sp,57]
- str r58, [sp,58]
- str r59, [sp,59]
- str r60, [sp,60]
- str r61, [sp,61]
- /* r62 and r63 are saved from start.S interrupt entry
- * and hold vector number and _ISR_Handler address repsectively.
- */
-
- /* Save status register */
- movfs r1,status
- str r1, [sp,62]
-
- /* Save config register */
- movfs r1,config
- str r1, [sp,63]
-
- /* Save interrupt return address register */
- movfs r1,iret
- str r1, [sp,64]
-
- mov r33, %low(_Per_CPU_Information)
- movt r33, %high(_Per_CPU_Information)
-
- add r6, r33, #(PER_CPU_ISR_NEST_LEVEL)
- add r8, r33, #(PER_CPU_THREAD_DISPATCH_DISABLE_LEVEL)
-
- /* Increment nesting level and disable thread dispatch */
- ldr r5, [r6]
- ldr r7, [r8]
- add r5, r5, #1
- add r7, r7, #1
- str r5, [r6]
- str r7, [r8]
-
- /* Keep sp (Exception frame address) in r32 - Callee saved */
- mov r32, sp
-
- /* Keep _Per_CPU_Information address in r33 - Callee saved */
- mov r33, r18
-
- /* Call the exception handler from vector table.
- * First function arg for C handler is vector number,
- * and the second is a pointer to exception frame.
- */
- mov r0, r62
- mov r1, sp
-
- mov r27, r62
- lsl r27, r27, #2
- mov r26, %low(bsp_start_vector_table_begin)
- movt r15, #0
- add r27, r27, r26
- ldr r27, [r27]
-
- /* Do not switch stacks if we are in a nested interrupt. At
- * this point r5 should be holding ISR_NEST_LEVEL value.
- */
- sub r37, r5, #1
- bgtu jump_to_c_handler
-
- /* Switch to RTEMS dedicated interrupt stack */
- add sp, r18, #(PER_CPU_INTERRUPT_STACK_HIGH)
- ldr sp, [sp]
-
-jump_to_c_handler:
- jalr r27
-
- /* Switch back to the interrupted task stack */
- mov sp, r32
-
- /* Get the address of _Per_CPU_Information */
- mov r18, r33
-
- /* Decrement nesting level and enable multitasking */
- add r6, r18, #(PER_CPU_ISR_NEST_LEVEL)
- add r8, r18, #(PER_CPU_THREAD_DISPATCH_DISABLE_LEVEL)
-
- ldr r5, [r6]
- ldr r7, [r8]
- sub r5, r5, #1
- sub r7, r7, #1
- str r5, [r6]
- str r7, [r8]
-
- /* Check if _ISR_Nest_level > 0 */
- sub r37, r5, #0
- bgtu exception_frame_restore
-
- /* Check if _Thread_Dispatch_disable_level > 0 */
- sub r37, r7, #0
- bgtu exception_frame_restore
-
- /* Check if dispatch needed */
- add r31, r18, #(PER_CPU_DISPATCH_NEEDED)
- ldr r31, [r31]
-
- sub r35, r31, #0
- beq exception_frame_restore
-
- mov r35, %low(_Thread_Dispatch)
- movt r35, %high(_Thread_Dispatch)
- jalr r35
-
-exception_frame_restore:
-
- ldr r1, [sp,1]
- ldr r2, [sp,2]
- ldr r3, [sp,3]
- ldr r4, [sp,4]
- ldr r5, [sp,5]
- ldr r6, [sp,6]
- ldr r7, [sp,7]
- ldr r8, [sp,8]
- ldr r9, [sp,9]
- ldr r10, [sp,10]
- ldr fp, [sp,11]
- ldr r12, [sp,12]
- ldr lr, [sp,14]
- ldr r15, [sp,15]
- ldr r16, [sp,16]
- ldr r17, [sp,17]
- ldr r18, [sp,18]
- ldr r19, [sp,19]
- ldr r20, [sp,20]
- ldr r21, [sp,21]
- ldr r22, [sp,22]
- ldr r23, [sp,23]
- ldr r24, [sp,24]
- ldr r25, [sp,25]
- ldr r26, [sp,26]
- ldr r27, [sp,27]
- ldr r28, [sp,28]
- ldr r29, [sp,29]
- ldr r30, [sp,30]
- ldr r31, [sp,31]
- ldr r32, [sp,32]
- ldr r34, [sp,34]
- ldr r36, [sp,36]
- ldr r38, [sp,38]
- ldr r39, [sp,39]
- ldr r40, [sp,40]
- ldr r41, [sp,41]
- ldr r42, [sp,42]
- ldr r43, [sp,43]
- ldr r44, [sp,44]
- ldr r45, [sp,45]
- ldr r46, [sp,46]
- ldr r47, [sp,47]
- ldr r48, [sp,48]
- ldr r49, [sp,49]
- ldr r50, [sp,50]
- ldr r51, [sp,51]
- ldr r52, [sp,52]
- ldr r53, [sp,53]
- ldr r54, [sp,54]
- ldr r55, [sp,55]
- ldr r56, [sp,56]
- ldr r57, [sp,57]
- ldr r58, [sp,58]
- ldr r59, [sp,59]
- ldr r60, [sp,60]
- ldr r61, [sp,61]
-
- /* Restore status register */
- ldr r0,[sp,62]
- movts status, r0
-
- /* Restore config register */
- ldr r0, [sp,63]
- movts config, r0
-
- /* Restore interrupt return address register */
- ldr r0, [sp,64]
- movts iret, r0
-
- ldr r0,[sp]
-
- /* Restore interrupted task's stack pointer */
- ldr sp, [sp,13]
-
- /* r62 and r63 are saved from start.S interrupt entry
- * and hold vector number and _ISR_Handler address repsectively.
- */
- ldr r62, [sp, -8]
- ldr r63, [sp, -4]
-
- /* return from interrupt */
- rti
diff --git a/cpukit/score/cpu/epiphany/headers.am b/cpukit/score/cpu/epiphany/headers.am
deleted file mode 100644
index d5ba2394d9..0000000000
--- a/cpukit/score/cpu/epiphany/headers.am
+++ /dev/null
@@ -1,8 +0,0 @@
-## This file was generated by "./boostrap -H".
-include_rtems_HEADERS += score/cpu/epiphany/include/rtems/asm.h
-include_rtems_score_HEADERS += score/cpu/epiphany/include/rtems/score/cpu.h
-include_rtems_score_HEADERS += score/cpu/epiphany/include/rtems/score/cpu_asm.h
-include_rtems_score_HEADERS += score/cpu/epiphany/include/rtems/score/cpuatomic.h
-include_rtems_score_HEADERS += score/cpu/epiphany/include/rtems/score/cpuimpl.h
-include_rtems_score_HEADERS += score/cpu/epiphany/include/rtems/score/epiphany-utility.h
-include_rtems_score_HEADERS += score/cpu/epiphany/include/rtems/score/epiphany.h
diff --git a/cpukit/score/cpu/epiphany/include/rtems/asm.h b/cpukit/score/cpu/epiphany/include/rtems/asm.h
deleted file mode 100644
index 219ed81846..0000000000
--- a/cpukit/score/cpu/epiphany/include/rtems/asm.h
+++ /dev/null
@@ -1,120 +0,0 @@
-/**
- * @file
- *
- * This include file attempts to address the problems
- * caused by incompatible flavors of assemblers and
- * toolsets. It primarily addresses variations in the
- * use of leading underscores on symbols and the requirement
- * that register names be preceded by a %.
- */
-
-/*
- * NOTE: The spacing in the use of these macros
- * is critical to them working as advertised.
- *
- * This file is based on similar code found in newlib available
- * from ftp.cygnus.com. The file which was used had no copyright
- * notice. This file is freely distributable as long as the source
- * of the file is noted. This file is:
- *
- * Copyright (c) 2015 University of York.
- * Hesham ALMatary <hmka501@york.ac.uk>
- *
- *
- * COPYRIGHT (c) 1994-1997.
- * 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 AUTHOR 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 AUTHOR 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 __EPIPHANY_ASM_H
-#define __EPIPHANY_ASM_H
-
-/*
- * Indicate we are in an assembly file and get the basic CPU definitions.
- */
-
-#ifndef ASM
-#define ASM
-#endif
-#include <rtems/score/cpuopts.h>
-#include <rtems/score/epiphany.h>
-
-/*
- * Recent versions of GNU cpp define variables which indicate the
- * need for underscores and percents. If not using GNU cpp or
- * the version does not support this, then you will obviously
- * have to define these as appropriate.
- */
-
-#ifndef __USER_LABEL_PREFIX__
-#define __USER_LABEL_PREFIX__ _
-#endif
-
-#ifndef __REGISTER_PREFIX__
-#define __REGISTER_PREFIX__
-#endif
-
-/* ANSI concatenation macros. */
-
-#define CONCAT1(a, b) CONCAT2(a, b)
-#define CONCAT2(a, b) a ## b
-
-/* Use the right prefix for global labels. */
-
-#define SYM(x) CONCAT1 (__USER_LABEL_PREFIX__, x)
-
-/* Use the right prefix for registers. */
-
-#define REG(x) CONCAT1 (__REGISTER_PREFIX__, x)
-
-/*
- * define macros for all of the registers on this CPU
- *
- * EXAMPLE: #define d0 REG (d0)
- */
-
-/*
- * Define macros to handle section beginning and ends.
- */
-#define BEGIN_CODE_DCL .text
-#define END_CODE_DCL
-#define BEGIN_DATA_DCL .data
-#define END_DATA_DCL
-#define BEGIN_CODE .text
-#define END_CODE
-#define BEGIN_DATA
-#define END_DATA
-#define BEGIN_BSS
-#define END_BSS
-#define END
-
-/*
- * Following must be tailor for a particular flavor of the C compiler.
- * They may need to put underscores in front of the symbols.
- */
-
-#define PUBLIC(sym) .global SYM (sym)
-#define EXTERN(sym) .extern SYM (sym)
-#define TYPE_FUNC(sym) .type SYM (sym), %function
-
-#endif
diff --git a/cpukit/score/cpu/epiphany/include/rtems/score/cpu.h b/cpukit/score/cpu/epiphany/include/rtems/score/cpu.h
deleted file mode 100644
index 462ffab040..0000000000
--- a/cpukit/score/cpu/epiphany/include/rtems/score/cpu.h
+++ /dev/null
@@ -1,612 +0,0 @@
-/**
- * @file
- */
-
-/*
- *
- * Copyright (c) 2015 University of York.
- * Hesham ALMatary <hmka501@york.ac.uk>
- *
- * COPYRIGHT (c) 1989-1999.
- * 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 AUTHOR 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 AUTHOR 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 _EPIPHANY_CPU_H
-#define _EPIPHANY_CPU_H
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-#include <rtems/score/basedefs.h>
-#include <rtems/score/epiphany.h> /* pick up machine definitions */
-#ifndef ASM
-#include <rtems/bspIo.h>
-#include <stdint.h>
-#include <stdio.h> /* for printk */
-#endif
-
-/**
- * @addtogroup RTEMSScoreCPUEpiphany
- */
-/**@{**/
-
-/* conditional compilation parameters */
-
-/*
- * Does the RTEMS invoke the user's ISR with the vector number and
- * a pointer to the saved interrupt frame (1) or just the vector
- * number (0)?
- *
- */
-
-#define CPU_ISR_PASSES_FRAME_POINTER TRUE
-
-#define CPU_HARDWARE_FP FALSE
-
-#define CPU_SOFTWARE_FP FALSE
-
-#define CPU_ALL_TASKS_ARE_FP FALSE
-
-#define CPU_IDLE_TASK_IS_FP FALSE
-
-#define CPU_USE_DEFERRED_FP_SWITCH FALSE
-
-#define CPU_ENABLE_ROBUST_THREAD_DISPATCH FALSE
-
-/*
- * Does the stack grow up (toward higher addresses) or down
- * (toward lower addresses)?
- *
- * If TRUE, then the grows upward.
- * If FALSE, then the grows toward smaller addresses.
- *
- */
-
-#define CPU_STACK_GROWS_UP FALSE
-
-/* FIXME: Is this the right value? */
-#define CPU_CACHE_LINE_BYTES 64
-
-#define CPU_STRUCTURE_ALIGNMENT RTEMS_ALIGNED( CPU_CACHE_LINE_BYTES )
-
-/*
- * The following defines the number of bits actually used in the
- * interrupt field of the task mode. How those bits map to the
- * CPU interrupt levels is defined by the routine _CPU_ISR_Set_level().
- *
- */
-
-#define CPU_MODES_INTERRUPT_MASK 0x00000001
-
-/*
- * Processor defined structures required for cpukit/score.
- */
-
-/*
- * Contexts
- *
- * Generally there are 2 types of context to save.
- * 1. Interrupt registers to save
- * 2. Task level registers to save
- *
- * This means we have the following 3 context items:
- * 1. task level context stuff:: Context_Control
- * 2. floating point task stuff:: Context_Control_fp
- * 3. special interrupt level context :: Context_Control_interrupt
- *
- * On some processors, it is cost-effective to save only the callee
- * preserved registers during a task context switch. This means
- * that the ISR code needs to save those registers which do not
- * persist across function calls. It is not mandatory to make this
- * distinctions between the caller/callee saves registers for the
- * purpose of minimizing context saved during task switch and on interrupts.
- * If the cost of saving extra registers is minimal, simplicity is the
- * choice. Save the same context on interrupt entry as for tasks in
- * this case.
- *
- * Additionally, if gdb is to be made aware of RTEMS tasks for this CPU, then
- * care should be used in designing the context area.
- *
- * On some CPUs with hardware floating point support, the Context_Control_fp
- * structure will not be used or it simply consist of an array of a
- * fixed number of bytes. This is done when the floating point context
- * is dumped by a "FP save context" type instruction and the format
- * is not really defined by the CPU. In this case, there is no need
- * to figure out the exact format -- only the size. Of course, although
- * this is enough information for RTEMS, it is probably not enough for
- * a debugger such as gdb. But that is another problem.
- *
- *
- */
-#ifndef ASM
-
-typedef struct {
- uint32_t r[64];
-
- uint32_t status;
- uint32_t config;
- uint32_t iret;
-
-#ifdef RTEMS_SMP
- /**
- * @brief On SMP configurations the thread context must contain a boolean
- * indicator to signal if this context is executing on a processor.
- *
- * This field must be updated during a context switch. The context switch
- * to the heir must wait until the heir context indicates that it is no
- * longer executing on a processor. The context switch must also check if
- * a thread dispatch is necessary to honor updates of the heir thread for
- * this processor. This indicator must be updated using an atomic test and
- * set operation to ensure that at most one processor uses the heir
- * context at the same time.
- *
- * @code
- * void _CPU_Context_switch(
- * Context_Control *executing,
- * Context_Control *heir
- * )
- * {
- * save( executing );
- *
- * executing->is_executing = false;
- * memory_barrier();
- *
- * if ( test_and_set( &heir->is_executing ) ) {
- * do {
- * Per_CPU_Control *cpu_self = _Per_CPU_Get_snapshot();
- *
- * if ( cpu_self->dispatch_necessary ) {
- * heir = _Thread_Get_heir_and_make_it_executing( cpu_self );
- * }
- * } while ( test_and_set( &heir->is_executing ) );
- * }
- *
- * restore( heir );
- * }
- * @endcode
- */
- volatile bool is_executing;
-#endif
-} Context_Control;
-
-#define _CPU_Context_Get_SP( _context ) \
- (_context)->r[13]
-
-typedef Context_Control CPU_Interrupt_frame;
-
-/*
- * Amount of extra stack (above minimum stack size) required by
- * MPCI receive server thread. Remember that in a multiprocessor
- * system this thread must exist and be able to process all directives.
- *
- */
-
-#define CPU_MPCI_RECEIVE_SERVER_EXTRA_STACK 0
-
-/*
- * Should be large enough to run all RTEMS tests. This insures
- * that a "reasonable" small application should not have any problems.
- *
- */
-
-#define CPU_STACK_MINIMUM_SIZE 4096
-
-/*
- * CPU's worst alignment requirement for data types on a byte boundary. This
- * alignment does not take into account the requirements for the stack.
- *
- */
-
-#define CPU_ALIGNMENT 8
-
-/*
- * This is defined if the port has a special way to report the ISR nesting
- * level. Most ports maintain the variable _ISR_Nest_level.
- */
-#define CPU_PROVIDES_ISR_IS_IN_PROGRESS FALSE
-
-/*
- * This number corresponds to the byte alignment requirement for the
- * heap handler. This alignment requirement may be stricter than that
- * for the data types alignment specified by CPU_ALIGNMENT. It is
- * common for the heap to follow the same alignment requirement as
- * CPU_ALIGNMENT. If the CPU_ALIGNMENT is strict enough for the heap,
- * then this should be set to CPU_ALIGNMENT.
- *
- * NOTE: This does not have to be a power of 2 although it should be
- * a multiple of 2 greater than or equal to 2. The requirement
- * to be a multiple of 2 is because the heap uses the least
- * significant field of the front and back flags to indicate
- * that a block is in use or free. So you do not want any odd
- * length blocks really putting length data in that bit.
- *
- * On byte oriented architectures, CPU_HEAP_ALIGNMENT normally will
- * have to be greater or equal to than CPU_ALIGNMENT to ensure that
- * elements allocated from the heap meet all restrictions.
- *
- */
-
-#define CPU_HEAP_ALIGNMENT CPU_ALIGNMENT
-
-/*
- * This number corresponds to the byte alignment requirement for the
- * stack. This alignment requirement may be stricter than that for the
- * data types alignment specified by CPU_ALIGNMENT. If the CPU_ALIGNMENT
- * is strict enough for the stack, then this should be set to 0.
- *
- * NOTE: This must be a power of 2 either 0 or greater than CPU_ALIGNMENT.
- *
- */
-
-#define CPU_STACK_ALIGNMENT 8
-
-#define CPU_INTERRUPT_STACK_ALIGNMENT CPU_CACHE_LINE_BYTES
-
-/* ISR handler macros */
-
-/*
- * Support routine to initialize the RTEMS vector table after it is allocated.
- *
- * NO_CPU Specific Information:
- *
- * XXX document implementation including references if appropriate
- */
-
-#define _CPU_Initialize_vectors()
-
-/*
- * Disable all interrupts for an RTEMS critical section. The previous
- * level is returned in _level.
- *
- */
-
-static inline uint32_t epiphany_interrupt_disable( void )
-{
- uint32_t sr;
- __asm__ __volatile__ ("movfs %[sr], status \n" : [sr] "=r" (sr):);
- __asm__ __volatile__("gid \n");
- return sr;
-}
-
-static inline void epiphany_interrupt_enable(uint32_t level)
-{
- __asm__ __volatile__("gie \n");
- __asm__ __volatile__ ("movts status, %[level] \n" :: [level] "r" (level):);
-}
-
-#define _CPU_ISR_Disable( _level ) \
- _level = epiphany_interrupt_disable()
-
-/*
- * Enable interrupts to the previous level (returned by _CPU_ISR_Disable).
- * This indicates the end of an RTEMS critical section. The parameter
- * _level is not modified.
- *
- */
-
-#define _CPU_ISR_Enable( _level ) \
- epiphany_interrupt_enable( _level )
-
-/*
- * This temporarily restores the interrupt to _level before immediately
- * disabling them again. This is used to divide long RTEMS critical
- * sections into two or more parts. The parameter _level is not
- * modified.
- *
- */
-
-#define _CPU_ISR_Flash( _level ) \
- do{ \
- if ( (_level & 0x2) != 0 ) \
- _CPU_ISR_Enable( _level ); \
- epiphany_interrupt_disable(); \
- } while(0)
-
-RTEMS_INLINE_ROUTINE bool _CPU_ISR_Is_enabled( uint32_t level )
-{
- return ( level & 0x2 ) != 0;
-}
-
-/*
- * Map interrupt level in task mode onto the hardware that the CPU
- * actually provides. Currently, interrupt levels which do not
- * map onto the CPU in a generic fashion are undefined. Someday,
- * it would be nice if these were "mapped" by the application
- * via a callout. For example, m68k has 8 levels 0 - 7, levels
- * 8 - 255 would be available for bsp/application specific meaning.
- * This could be used to manage a programmable interrupt controller
- * via the rtems_task_mode directive.
- *
- * The get routine usually must be implemented as a subroutine.
- *
- */
-
-void _CPU_ISR_Set_level( uint32_t level );
-
-uint32_t _CPU_ISR_Get_level( void );
-
-/* end of ISR handler macros */
-
-/* Context handler macros */
-
-/*
- * Initialize the context to a state suitable for starting a
- * task after a context restore operation. Generally, this
- * involves:
- *
- * - setting a starting address
- * - preparing the stack
- * - preparing the stack and frame pointers
- * - setting the proper interrupt level in the context
- * - initializing the floating point context
- *
- * This routine generally does not set any unnecessary register
- * in the context. The state of the "general data" registers is
- * undefined at task start time.
- *
- * NOTE: This is_fp parameter is TRUE if the thread is to be a floating
- * point thread. This is typically only used on CPUs where the
- * FPU may be easily disabled by software such as on the SPARC
- * where the PSR contains an enable FPU bit.
- *
- */
-
-/**
- * @brief Account for GCC red-zone
- *
- * The following macro is used when initializing task's stack
- * to account for GCC red-zone.
- */
-
-#define EPIPHANY_GCC_RED_ZONE_SIZE 128
-
-/**
- * @brief Initializes the CPU context.
- *
- * The following steps are performed:
- * - setting a starting address
- * - preparing the stack
- * - preparing the stack and frame pointers
- * - setting the proper interrupt level in the context
- *
- * @param[in] context points to the context area
- * @param[in] stack_area_begin is the low address of the allocated stack area
- * @param[in] stack_area_size is the size of the stack area in bytes
- * @param[in] new_level is the interrupt level for the task
- * @param[in] entry_point is the task's entry point
- * @param[in] is_fp is set to @c true if the task is a floating point task
- * @param[in] tls_area is the thread-local storage (TLS) area
- */
-void _CPU_Context_Initialize(
- Context_Control *context,
- void *stack_area_begin,
- size_t stack_area_size,
- uint32_t new_level,
- void (*entry_point)( void ),
- bool is_fp,
- void *tls_area
-);
-
-/*
- * This routine is responsible for somehow restarting the currently
- * executing task. If you are lucky, then all that is necessary
- * is restoring the context. Otherwise, there will need to be
- * a special assembly routine which does something special in this
- * case. Context_Restore should work most of the time. It will
- * not work if restarting self conflicts with the stack frame
- * assumptions of restoring a context.
- *
- */
-
-#define _CPU_Context_Restart_self( _the_context ) \
- _CPU_Context_restore( (_the_context) )
-
-/* end of Context handler macros */
-
-/* Fatal Error manager macros */
-
-/*
- * This routine copies _error into a known place -- typically a stack
- * location or a register, optionally disables interrupts, and
- * halts/stops the CPU.
- *
- */
-
-#include <inttypes.h>
-
-#define _CPU_Fatal_halt(_source, _error ) \
- printk("Fatal Error %d.%" PRIu32 " Halted\n",_source, _error); \
- asm("trap 3" :: "r" (_error)); \
- for(;;)
-
-/* end of Fatal Error manager macros */
-
-#define CPU_USE_GENERIC_BITFIELD_CODE TRUE
-
-#endif /* ASM */
-
-/**
- * Size of a pointer.
- *
- * This must be an integer literal that can be used by the assembler. This
- * value will be used to calculate offsets of structure members. These
- * offsets will be used in assembler code.
- */
-#define CPU_SIZEOF_POINTER 4
-#define CPU_EXCEPTION_FRAME_SIZE 260
-
-#define CPU_MAXIMUM_PROCESSORS 32
-
-#ifndef ASM
-
-typedef struct {
- uint32_t r[62];
- uint32_t status;
- uint32_t config;
- uint32_t iret;
-} CPU_Exception_frame;
-
-/**
- * @brief Prints the exception frame via printk().
- *
- * @see rtems_fatal() and RTEMS_FATAL_SOURCE_EXCEPTION.
- */
-void _CPU_Exception_frame_print( const CPU_Exception_frame *frame );
-
-
-/* end of Priority handler macros */
-
-/* functions */
-
-/*
- * _CPU_Initialize
- *
- * This routine performs CPU dependent initialization.
- *
- */
-
-void _CPU_Initialize(
- void
-);
-
-void *_CPU_Thread_Idle_body( uintptr_t ignored );
-
-/*
- * _CPU_Context_switch
- *
- * This routine switches from the run context to the heir context.
- *
- * epiphany Specific Information:
- *
- * Please see the comments in the .c file for a description of how
- * this function works. There are several things to be aware of.
- */
-
-void _CPU_Context_switch(
- Context_Control *run,
- Context_Control *heir
-);
-
-/*
- * _CPU_Context_restore
- *
- * This routine is generally used only to restart self in an
- * efficient manner. It may simply be a label in _CPU_Context_switch.
- *
- * NOTE: May be unnecessary to reload some registers.
- *
- */
-
-void _CPU_Context_restore(
- Context_Control *new_context
-) RTEMS_NO_RETURN;
-
-/*
- * _CPU_Context_save_fp
- *
- * This routine saves the floating point context passed to it.
- *
- */
-
-void _CPU_Context_save_fp(
- void **fp_context_ptr
-);
-
-/*
- * _CPU_Context_restore_fp
- *
- * This routine restores the floating point context passed to it.
- *
- */
-
-void _CPU_Context_restore_fp(
- void **fp_context_ptr
-);
-
-/* The following routine swaps the endian format of an unsigned int.
- * It must be static because it is referenced indirectly.
- *
- * This version will work on any processor, but if there is a better
- * way for your CPU PLEASE use it. The most common way to do this is to:
- *
- * swap least significant two bytes with 16-bit rotate
- * swap upper and lower 16-bits
- * swap most significant two bytes with 16-bit rotate
- *
- * Some CPUs have special instructions which swap a 32-bit quantity in
- * a single instruction (e.g. i486). It is probably best to avoid
- * an "endian swapping control bit" in the CPU. One good reason is
- * that interrupts would probably have to be disabled to insure that
- * an interrupt does not try to access the same "chunk" with the wrong
- * endian. Another good reason is that on some CPUs, the endian bit
- * endianness for ALL fetches -- both code and data -- so the code
- * will be fetched incorrectly.
- *
- */
-
-static inline unsigned int CPU_swap_u32(
- unsigned int value
-)
-{
- uint32_t byte1, byte2, byte3, byte4, swapped;
-
- byte4 = (value >> 24) & 0xff;
- byte3 = (value >> 16) & 0xff;
- byte2 = (value >> 8) & 0xff;
- byte1 = value & 0xff;
-
- swapped = (byte1 << 24) | (byte2 << 16) | (byte3 << 8) | byte4;
- return( swapped );
-}
-
-#define CPU_swap_u16( value ) \
- (((value&0xff) << 8) | ((value >> 8)&0xff))
-
-typedef uint32_t CPU_Counter_ticks;
-
-uint32_t _CPU_Counter_frequency( void );
-
-CPU_Counter_ticks _CPU_Counter_read( void );
-
-static inline CPU_Counter_ticks _CPU_Counter_difference(
- CPU_Counter_ticks second,
- CPU_Counter_ticks first
-)
-{
- return second - first;
-}
-
-/** Type that can store a 32-bit integer or a pointer. */
-typedef uintptr_t CPU_Uint32ptr;
-
-#endif /* ASM */
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif
-
-/**@}*/
diff --git a/cpukit/score/cpu/epiphany/include/rtems/score/cpu_asm.h b/cpukit/score/cpu/epiphany/include/rtems/score/cpu_asm.h
deleted file mode 100644
index cc091fa909..0000000000
--- a/cpukit/score/cpu/epiphany/include/rtems/score/cpu_asm.h
+++ /dev/null
@@ -1,74 +0,0 @@
-/**
- * @file
- *
- * @brief Epiphany Assembly File
- *
- * Very loose template for an include file for the cpu_asm.? file
- * if it is implemented as a ".S" file (preprocessed by cpp) instead
- * of a ".s" file (preprocessed by gm4 or gasp).
- */
-
-/*
- * 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.
- *
- */
-
-#ifndef _RTEMS_SCORE_CPU_ASM_H
-#define _RTEMS_SCORE_CPU_ASM_H
-
-/* pull in the generated offsets */
-
-/*
-#include <rtems/score/offsets.h>
-*/
-
-/*
- * Hardware General Registers
- */
-
-/* put something here */
-
-/*
- * Hardware Floating Point Registers
- */
-
-/* put something here */
-
-/*
- * Hardware Control Registers
- */
-
-/* put something here */
-
-/*
- * Calling Convention
- */
-
-/* put something here */
-
-/*
- * Temporary registers
- */
-
-/* put something here */
-
-/*
- * Floating Point Registers - SW Conventions
- */
-
-/* put something here */
-
-/*
- * Temporary floating point registers
- */
-
-/* put something here */
-
-#endif
-
-/* end of file */
diff --git a/cpukit/score/cpu/epiphany/include/rtems/score/cpuatomic.h b/cpukit/score/cpu/epiphany/include/rtems/score/cpuatomic.h
deleted file mode 100644
index 598ee76b20..0000000000
--- a/cpukit/score/cpu/epiphany/include/rtems/score/cpuatomic.h
+++ /dev/null
@@ -1,14 +0,0 @@
-/*
- * COPYRIGHT (c) 2012-2013 Deng Hengyi.
- *
- * 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.
- */
-
-#ifndef _RTEMS_SCORE_ATOMIC_CPU_H
-#define _RTEMS_SCORE_ATOMIC_CPU_H
-
-#include <rtems/score/cpustdatomic.h>
-
-#endif /* _RTEMS_SCORE_ATOMIC_CPU_H */
diff --git a/cpukit/score/cpu/epiphany/include/rtems/score/cpuimpl.h b/cpukit/score/cpu/epiphany/include/rtems/score/cpuimpl.h
deleted file mode 100644
index 967b4911ee..0000000000
--- a/cpukit/score/cpu/epiphany/include/rtems/score/cpuimpl.h
+++ /dev/null
@@ -1,67 +0,0 @@
-/**
- * @file
- *
- * @brief CPU Port Implementation API
- */
-
-/*
- * Copyright (c) 2013 embedded brains GmbH
- *
- * 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.
- */
-
-#ifndef _RTEMS_SCORE_CPUIMPL_H
-#define _RTEMS_SCORE_CPUIMPL_H
-
-#include <rtems/score/cpu.h>
-
-/**
- * @defgroup RTEMSScoreCPUEpiphany Epiphany
- *
- * @ingroup RTEMSScoreCPU
- *
- * @brief Epiphany Architecture Support.
- */
-/**@{**/
-
-#define CPU_PER_CPU_CONTROL_SIZE 0
-
-#ifndef ASM
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-RTEMS_INLINE_ROUTINE void _CPU_Context_volatile_clobber( uintptr_t pattern )
-{
- /* TODO */
-}
-
-RTEMS_INLINE_ROUTINE void _CPU_Context_validate( uintptr_t pattern )
-{
- while (1) {
- /* TODO */
- }
-}
-
-RTEMS_INLINE_ROUTINE void _CPU_Instruction_illegal( void )
-{
- __asm__ volatile ( ".word 0" );
-}
-
-RTEMS_INLINE_ROUTINE void _CPU_Instruction_no_operation( void )
-{
- __asm__ volatile ( "nop" );
-}
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* ASM */
-
-/**@}*/
-
-#endif /* _RTEMS_SCORE_CPUIMPL_H */
diff --git a/cpukit/score/cpu/epiphany/include/rtems/score/epiphany-utility.h b/cpukit/score/cpu/epiphany/include/rtems/score/epiphany-utility.h
deleted file mode 100644
index 10426dc94d..0000000000
--- a/cpukit/score/cpu/epiphany/include/rtems/score/epiphany-utility.h
+++ /dev/null
@@ -1,180 +0,0 @@
-/**
- * @file
- *
- * @addtogroup RTEMSScoreCPU
- *
- * @brief This include file contains macros pertaining to the
- * Epiphany processor family.
- */
-
-/*
- * Copyright (c) 2015 University of York.
- * Hesham ALMatary <hmka501@york.ac.uk>
- *
- * 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 AUTHOR 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 AUTHOR 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 _EPIPHANY_UTILITY_H
-#define _EPIPHANY_UTILITY_H
-
-/* eCore IRQs */
-typedef enum
-{
- START,
- SW_EXCEPTION,
- MEM_FAULT,
- TIMER0,
- TIMER1,
- SMP_MESSAGE,
- DMA0,
- DMA1,
- SER,
-} EPIPHANY_IRQ_PER_CORE_T;
-
-/* Per-core IO mapped register addresses
- * @see Epiphany architecture reference.
- */
-#define EPIPHANY_PER_CORE_REG_CONFIG 0xF0400
-#define EPIPHANY_PER_CORE_REG_STATUS 0xF0404
-#define EPIPHANY_PER_CORE_REG_PC 0xF0408
-#define EPIPHANY_PER_CORE_REG_DEBUGSTATUS 0xF040C
-#define EPIPHANY_PER_CORE_REG_LC 0xF0414
-#define EPIPHANY_PER_CORE_REG_LS 0xF0418
-#define EPIPHANY_PER_CORE_REG_LE 0xF041C
-#define EPIPHANY_PER_CORE_REG_IRET 0xF0420
-#define EPIPHANY_PER_CORE_REG_IMASK 0xF0424
-#define EPIPHANY_PER_CORE_REG_ILAT 0xF0428
-#define EPIPHANY_PER_CORE_REG_ILATST 0xF042C
-#define EPIPHANY_PER_CORE_REG_ILATCL 0xF0430
-#define EPIPHANY_PER_CORE_REG_IPEND 0xF0434
-#define EPIPHANY_PER_CORE_REG_FSTATUS 0xF0440
-#define EPIPHANY_PER_CORE_REG_DEBUGCMD 0xF0448
-#define EPIPHANY_PER_CORE_REG_RESETCORE 0xF070C
-
-/* Event timer registers */
-#define EPIPHANY_PER_CORE_REG_CTIMER0 0xF0438
-#define EPIPHANY_PER_CORE_REG_CTIMER1 0xF043C
-
-/* Processor control registers */
-#define EPIPHANY_PER_CORE_REG_MEMSTATUS 0xF0604
-#define EPIPHANY_PER_CORE_REG_MEMPROTECT 0xF0608
-
-/* DMA Registers */
-#define EPIPHANY_PER_CORE_REG_DMA0CONFIG 0xF0500
-#define EPIPHANY_PER_CORE_REG_DMA0STRIDE 0xF0504
-#define EPIPHANY_PER_CORE_REG_DMA0COUNT 0xF0508
-#define EPIPHANY_PER_CORE_REG_DMA0SRCADDR 0xF050C
-#define EPIPHANY_PER_CORE_REG_DMA0DSTADDR 0xF0510
-#define EPIPHANY_PER_CORE_REG_DMA0AUTO0 0xF0514
-#define EPIPHANY_PER_CORE_REG_DMA0AUTO1 0xF0518
-#define EPIPHANY_PER_CORE_REG_DMA0STATUS 0xF051C
-#define EPIPHANY_PER_CORE_REG_DMA1CONFIG 0xF0520
-#define EPIPHANY_PER_CORE_REG_DMA1STRIDE 0xF0524
-#define EPIPHANY_PER_CORE_REG_DMA1COUNT 0xF0528
-#define EPIPHANY_PER_CORE_REG_DMA1SRCADDR 0xF052C
-#define EPIPHANY_PER_CORE_REG_DMA1DSTADDR 0xF0530
-#define EPIPHANY_PER_CORE_REG_DMA1AUTO0 0xF0534
-#define EPIPHANY_PER_CORE_REG_DMA1AUTO1 0xF0538
-#define EPIPHANY_PER_CORE_REG_DMA1STATUS 0xF053C
-
-/* Mesh Node Control Registers */
-#define EPIPHANY_PER_CORE_REG_MESHCONFIG 0xF0700
-#define EPIPHANY_PER_CORE_REG_COREID 0xF0704
-#define EPIPHANY_PER_CORE_REG_MULTICAST 0xF0708
-#define EPIPHANY_PER_CORE_REG_CMESHROUTE 0xF0710
-#define EPIPHANY_PER_CORE_REG_XMESHROUTE 0xF0714
-#define EPIPHANY_PER_CORE_REG_RMESHROUTE 0xF0718
-
-/* This macros constructs an address space of epiphany cores
- * from their IDs.
- */
-#define EPIPHANY_COREID_TO_MSB_ADDR(id) (id) << 20
-
-/* Construct a complete/absolute IO mapped address register from
- * core ID and register name
- */
-#define EPIPHANY_GET_REG_ABSOLUTE_ADDR(coreid, reg) \
- (EPIPHANY_COREID_TO_MSB_ADDR(coreid) | (reg))
-
-#define EPIPHANY_REG(reg) (uint32_t *) (reg)
-
-/* Read register with its absolute address */
-static inline uint32_t read_epiphany_reg(volatile uint32_t reg_addr)
-{
- return *(EPIPHANY_REG(reg_addr));
-}
-
-/* Write register with its abolute address */
-static inline void write_epiphany_reg(volatile uint32_t reg_addr, uint32_t val)
-{
- *(EPIPHANY_REG(reg_addr)) = val;
-}
-
-/* Epiphany uses 12 bits for defining core IDs, while RTEMS uses
- * linear IDs. The following function converts RTEMS linear IDs to
- * Epiphany corresponding ones
- */
-static const uint32_t map[16] =
-{
- 0x808, 0x809, 0x80A, 0x80B,
- 0x848, 0x849, 0x84A, 0x84B,
- 0x888, 0x889, 0x88A, 0x88B,
- 0x8C8, 0x8C9, 0x8CA, 0x8CB
-};
-
-static inline uint32_t rtems_coreid_to_epiphany_map(uint32_t rtems_id)
-{
- return map[rtems_id];
-}
-
-/* Epiphany uses 12 bits for defining core IDs, while RTEMS uses
- * linear IDs. The following function is used to map Epiphany IDs to
- * RTEMS linear IDs.
- */
-static inline uint32_t epiphany_coreid_to_rtems_map(uint32_t epiphany_id)
-{
- register uint32_t coreid asm ("r17") = epiphany_id;
-
- /* Mapping from Epiphany IDs to 0-16 IDs macro */
- __asm__ __volatile__(" \
- movfs r17, coreid \
- mov r19, #0x003 \
- mov r20, #0x0F0 \
- and r19, r17, r19 \
- and r20, r17, r20 \
- lsr r20, r20, #4 \
- add r17, r19, r20 \
- ");
-
- /* coreid or r17 now holds the rtems core id */
- return coreid;
-}
-
-static inline uint32_t _Epiphany_Get_current_processor(void)
-{
- uint32_t coreid;
-
- asm volatile ("movfs %0, coreid" : "=r" (coreid): );
-
- return epiphany_coreid_to_rtems_map(coreid);
-}
-#endif /* _EPIPHANY_UTILITY_H */
diff --git a/cpukit/score/cpu/epiphany/include/rtems/score/epiphany.h b/cpukit/score/cpu/epiphany/include/rtems/score/epiphany.h
deleted file mode 100644
index 3eeddec421..0000000000
--- a/cpukit/score/cpu/epiphany/include/rtems/score/epiphany.h
+++ /dev/null
@@ -1,64 +0,0 @@
-/**
- * @file
- */
-
-/*
- * Copyright (c) 2015 University of York.
- * Hesham ALMatary <hmka501@york.ac.uk>
- *
- * COPYRIGHT (c) 1989-1999, 2010.
- * 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 AUTHOR 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 AUTHOR 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 _RTEMS_SCORE_EPIPHANY_H
-#define _RTEMS_SCORE_EPIPHANY_H
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/*
- * This file contains the information required to build
- * RTEMS for a particular member of the Epiphany family.
- * It does this by setting variables to indicate which
- * implementation dependent features are present in a particular
- * member of the family.
- *
- * This is a good place to list all the known CPU models
- * that this port supports and which RTEMS CPU model they correspond
- * to.
- */
-
- /*
- * Define the name of the CPU family and specific model.
- */
-
-#define CPU_NAME "EPIPHANY"
-#define CPU_MODEL_NAME "EPIPHANY"
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* _RTEMS_SCORE_EPIPHANY_H */
diff --git a/cpukit/score/cpu/epiphany/setjmp.S b/cpukit/score/cpu/epiphany/setjmp.S
deleted file mode 100644
index b981ee51e2..0000000000
--- a/cpukit/score/cpu/epiphany/setjmp.S
+++ /dev/null
@@ -1,69 +0,0 @@
-/* setjmp and longjmp
-
- Copyright (c) 2011, Adapteva, Inc.
- All rights reserved.
-
- Redistribution and use in source and binary forms, with or without
- modification, are permitted provided that the following conditions are met:
- * Redistributions of source code must retain the above copyright notice,
- this list of conditions and the following disclaimer.
- * 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.
- * Neither the name of Adapteva nor the names of its contributors may be
- used to endorse or promote products derived from this software without
- specific prior written permission.
-
- 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 HOLDER 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. */
-
- .file "setjmp.S"
- .section .text
- .align 4
- .global _setjmp
- .type _setjmp, %function
-_setjmp:
- strd lr,[r0]
- strd r4,[r0,1]
- strd r6,[r0,2]
- strd r8,[r0,3]
- strd r10,[r0,4]
- strd r32,[r0,5]
- strd r34,[r0,6]
- strd r36,[r0,7]
- strd r38,[r0,8]
- str sp,[r0,18]
- mov r0,#0
- rts
- .size _setjmp, .-_setjmp
- .global setjmp
- .set setjmp, _setjmp
-
- .global _longjmp
-_longjmp:
- ldrd lr,[r0] ; return address / r15
- ldrd r4,[r0,1]
- ldrd r6,[r0,2]
- ldrd r8,[r0,3]
- ldrd r10,[r0,4]
- ldrd r32,[r0,5]
- ldrd r34,[r0,6]
- ldrd r36,[r0,7]
- ldrd r38,[r0,8]
- ldr sp,[r0,18]
- sub r1,r1,0
- mov r0,#1
- movne r0,r1
- jr lr
- .size _longjmp, .-_longjmp
- .global longjmp
- .set longjmp, _longjmp
diff --git a/cpukit/score/cpu/i386/cpu_asm.S b/cpukit/score/cpu/i386/cpu_asm.S
index 6b609ab4ce..23360959f5 100644
--- a/cpukit/score/cpu/i386/cpu_asm.S
+++ b/cpukit/score/cpu/i386/cpu_asm.S
@@ -51,6 +51,8 @@
SYM (_CPU_Context_switch):
movl RUNCONTEXT_ARG(esp),eax /* eax = running threads context */
+ GET_SELF_CPU_CONTROL edx /* edx has address for per_CPU information */
+ movl PER_CPU_ISR_DISPATCH_DISABLE(edx),ecx
pushf /* push eflags */
popl REG_EFLAGS(eax) /* save eflags */
movl esp,REG_ESP(eax) /* save stack pointer */
@@ -58,39 +60,43 @@ SYM (_CPU_Context_switch):
movl ebx,REG_EBX(eax) /* save ebx */
movl esi,REG_ESI(eax) /* save source register */
movl edi,REG_EDI(eax) /* save destination register */
+ movl ecx, I386_CONTEXT_CONTROL_ISR_DISPATCH_DISABLE(eax)
-#ifdef RTEMS_SMP
- /* The executing context no longer executes on this processor */
- movb $0, I386_CONTEXT_CONTROL_IS_EXECUTING_OFFSET(eax)
-#endif
-
+ movl eax,ecx /* ecx = running threads context */
movl HEIRCONTEXT_ARG(esp),eax /* eax = heir threads context */
#ifdef RTEMS_SMP
- /* Wait for heir context to stop execution */
-1:
- movb I386_CONTEXT_CONTROL_IS_EXECUTING_OFFSET(eax), bl
- testb bl, bl
- jne 1b
-
- /* The heir context executes now on this processor */
- movb $1, I386_CONTEXT_CONTROL_IS_EXECUTING_OFFSET(eax)
+ /*
+ * The executing thread no longer executes on this processor. Switch
+ * the stack to the temporary interrupt stack of this processor. Mark
+ * the context of the executing thread as not executing.
+ */
+ leal PER_CPU_INTERRUPT_FRAME_AREA + CPU_INTERRUPT_FRAME_SIZE(edx),esp
+ movb $0, I386_CONTEXT_CONTROL_IS_EXECUTING_OFFSET(ecx)
+
+.L_check_is_executing:
+ lock bts $0,I386_CONTEXT_CONTROL_IS_EXECUTING_OFFSET(eax) /* Indicator in carry flag */
+ jc .L_get_potential_new_heir
#endif
-restore:
+/* Start restoring context */
+.L_restore:
+ movl I386_CONTEXT_CONTROL_ISR_DISPATCH_DISABLE(eax),ecx
+ movl ecx,PER_CPU_ISR_DISPATCH_DISABLE(edx)
+ movl REG_ESP(eax),esp /* restore stack pointer */
pushl REG_EFLAGS(eax) /* push eflags */
popf /* restore eflags */
- movl REG_ESP(eax),esp /* restore stack pointer */
movl REG_EBP(eax),ebp /* restore base pointer */
movl REG_EBX(eax),ebx /* restore ebx */
movl REG_ESI(eax),esi /* restore source register */
movl REG_EDI(eax),edi /* restore destination register */
- movl REG_GS_0(eax), ecx /* restore gs segment */
+ GET_CPU_ID ecx
+ movl REG_GS_0(eax), edx /* restore gs segment */
+ movl edx, _Global_descriptor_table+24(,ecx,8)
movl REG_GS_1(eax), edx
- movl ecx, _Global_descriptor_table + 24
- movl edx, _Global_descriptor_table + 28
- movl $24, ecx
- mov ecx, gs
+ movl edx, _Global_descriptor_table+28(,ecx,8)
+ leal 24(,ecx,8), edx
+ movl edx, gs
ret
/*
@@ -109,7 +115,35 @@ restore:
SYM (_CPU_Context_restore):
movl NEWCONTEXT_ARG(esp),eax /* eax = running threads context */
- jmp restore
+ GET_SELF_CPU_CONTROL edx /* edx has address for per_CPU information */
+ jmp .L_restore
+
+#ifdef RTEMS_SMP
+
+.L_get_potential_new_heir:
+
+ /* We may have a new heir */
+
+ /* Read the executing and heir */
+ movl PER_CPU_OFFSET_EXECUTING(edx),ebx
+ movl PER_CPU_OFFSET_HEIR(edx),esi
+
+ /*
+ * Update the executing only if necessary to avoid cache line
+ * monopolization.
+ */
+ cmp esi,ebx
+ je .L_check_is_executing
+
+ /* Calculate the heir context pointer */
+ addl esi,eax
+ subl ebx,eax
+
+ /* Update the executing */
+ movl esi,PER_CPU_OFFSET_EXECUTING(edx)
+
+ jmp .L_check_is_executing
+#endif
/*void _CPU_Context_save_fp_context( &fp_context_ptr )
* void _CPU_Context_restore_fp_context( &fp_context_ptr )
diff --git a/cpukit/score/cpu/i386/include/rtems/asm.h b/cpukit/score/cpu/i386/include/rtems/asm.h
index 5db402c930..904dc53846 100644
--- a/cpukit/score/cpu/i386/include/rtems/asm.h
+++ b/cpukit/score/cpu/i386/include/rtems/asm.h
@@ -38,6 +38,7 @@
#endif
#include <rtems/score/cpuopts.h>
#include <rtems/score/i386.h>
+#include <rtems/score/percpu.h>
/**
* @defgroup RTEMSScoreCPUi386ASM i386 Assembler Support
@@ -146,6 +147,31 @@
#define PUBLIC(sym) .globl SYM (sym)
#define EXTERN(sym) .globl SYM (sym)
+#ifdef RTEMS_SMP
+.macro GET_CPU_ID REG
+ .set LAPIC_ID, 0x20
+ .set LAPIC_ID_SHIFT, 0x18L
+ movl imps_lapic_addr,\REG
+ movl LAPIC_ID(\REG),\REG
+ shrl $LAPIC_ID_SHIFT,\REG /* LAPIC_ID in REG */
+ movzbl imps_apic_cpu_map(\REG),\REG /* CPU ID in REG */
+.endm
+
+.macro GET_SELF_CPU_CONTROL REG
+ GET_CPU_ID \REG
+ shll $PER_CPU_CONTROL_SIZE_LOG2,\REG /* Calculate offset for CPU structure */
+ leal _Per_CPU_Information(\REG),\REG /* Address of info for current CPU in REG */
+.endm
+#else
+.macro GET_CPU_ID REG
+ movl $0,\REG
+.endm
+
+.macro GET_SELF_CPU_CONTROL REG
+ leal _Per_CPU_Information, \REG
+.endm
+#endif
+
/**@}**/
#endif
diff --git a/cpukit/score/cpu/i386/include/rtems/score/cpu.h b/cpukit/score/cpu/i386/include/rtems/score/cpu.h
index 5d14455563..632bf5ff38 100644
--- a/cpukit/score/cpu/i386/include/rtems/score/cpu.h
+++ b/cpukit/score/cpu/i386/include/rtems/score/cpu.h
@@ -115,9 +115,10 @@ extern "C" {
#define I386_CONTEXT_CONTROL_EDI_OFFSET 20
#define I386_CONTEXT_CONTROL_GS_0_OFFSET 24
#define I386_CONTEXT_CONTROL_GS_1_OFFSET 28
+#define I386_CONTEXT_CONTROL_ISR_DISPATCH_DISABLE 32
#ifdef RTEMS_SMP
- #define I386_CONTEXT_CONTROL_IS_EXECUTING_OFFSET 32
+ #define I386_CONTEXT_CONTROL_IS_EXECUTING_OFFSET 36
#endif
/* structures */
@@ -136,6 +137,7 @@ typedef struct {
uint32_t esi; /* extended source index register */
uint32_t edi; /* extended destination index flags register */
segment_descriptors gs; /* gs segment descriptor */
+ uint32_t isr_dispatch_disable;
#ifdef RTEMS_SMP
volatile bool is_executing;
#endif
@@ -262,25 +264,27 @@ typedef void (*cpuExcHandlerType) (CPU_Exception_frame*);
extern cpuExcHandlerType _currentExcHandler;
extern void rtems_exception_init_mngt(void);
-#ifdef RTEMS_SMP
- /* Throw compile-time error to indicate incomplete support */
- #error "i386 targets do not support SMP.\
- See: https://devel.rtems.org/ticket/3335"
-
- /*
- * This size must match the size of the CPU_Interrupt_frame, which must be
- * used in the SMP context switch code, which is incomplete at the moment.
- */
- #define CPU_INTERRUPT_FRAME_SIZE 4
-#endif
-
/*
* This port does not pass any frame info to the
* interrupt handler.
*/
typedef struct {
- uint32_t todo_replace_with_apt_registers;
+/* allow for 16B alignment (worst case 12 Bytes more) and isr right after pushfl */
+ uint32_t reserved[3];
+/* registers saved by _ISR_Handler */
+ uint32_t isr_vector;
+ uint32_t ebx;
+ uint32_t ebp;
+ uint32_t esp;
+/* registers saved by rtems_irq_prologue_##_vector */
+ uint32_t edx;
+ uint32_t ecx;
+ uint32_t eax;
+/* registers saved by CPU */
+ uint32_t eip;
+ uint32_t cs;
+ uint32_t eflags;
} CPU_Interrupt_frame;
typedef enum {
@@ -499,6 +503,8 @@ extern void _CPU_Fatal_halt(uint32_t source, uint32_t error)
/* end of Fatal Error manager macros */
+#define CPU_USE_LIBC_INIT_FINI_ARRAY FALSE
+
/*
* Bitfield handler macros
*
@@ -615,7 +621,7 @@ void _CPU_Context_save_fp(
__asm__ __volatile__( \
"fldcw %0" \
::"m"((*(fp_context_pp))->fpucw) \
- :"fpcr" \
+ :"memory" \
); \
__builtin_ia32_ldmxcsr(_Thread_Executing->fp_context->mxcsr); \
} while (0)
@@ -634,7 +640,7 @@ void _CPU_Context_restore_fp(
: \
:"st","st(1)","st(2)","st(3)", \
"st(4)","st(5)","st(6)","st(7)", \
- "fpsr","fpcr" \
+ "fpsr","memory" \
); \
if ( _Thread_Executing->fp_context ) { \
_CPU_Context_restore_fp(&_Thread_Executing->fp_context); \
diff --git a/cpukit/score/cpu/i386/include/rtems/score/cpuimpl.h b/cpukit/score/cpu/i386/include/rtems/score/cpuimpl.h
index a89b1fedfb..570b5cc167 100644
--- a/cpukit/score/cpu/i386/include/rtems/score/cpuimpl.h
+++ b/cpukit/score/cpu/i386/include/rtems/score/cpuimpl.h
@@ -29,6 +29,8 @@
#define CPU_PER_CPU_CONTROL_SIZE 0
+#define CPU_INTERRUPT_FRAME_SIZE 52
+
#ifndef ASM
#ifdef __cplusplus
diff --git a/cpukit/score/cpu/i386/sse_test.c b/cpukit/score/cpu/i386/sse_test.c
index dc87371c1f..14e7dd9fbf 100644
--- a/cpukit/score/cpu/i386/sse_test.c
+++ b/cpukit/score/cpu/i386/sse_test.c
@@ -229,7 +229,7 @@ fp_ld(Context_Control_sse *p_ctxt, int i)
#define FPUCLOBBER \
"st","st(1)","st(2)","st(3)", \
"st(4)","st(5)","st(6)","st(7)",\
- "fpsr","fpcr"
+ "fpsr","memory"
/* There seems to be no way to say that mxcsr was clobbered */
diff --git a/cpukit/score/cpu/lm32/include/rtems/score/cpu.h b/cpukit/score/cpu/lm32/include/rtems/score/cpu.h
index 13f8f36194..8e702992c1 100644
--- a/cpukit/score/cpu/lm32/include/rtems/score/cpu.h
+++ b/cpukit/score/cpu/lm32/include/rtems/score/cpu.h
@@ -628,6 +628,8 @@ extern char _gp[];
#define CPU_USE_GENERIC_BITFIELD_CODE TRUE
+#define CPU_USE_LIBC_INIT_FINI_ARRAY FALSE
+
/* functions */
/**
diff --git a/cpukit/score/cpu/m68k/include/rtems/score/cpu.h b/cpukit/score/cpu/m68k/include/rtems/score/cpu.h
index de085c9f7d..777fbfeb30 100644
--- a/cpukit/score/cpu/m68k/include/rtems/score/cpu.h
+++ b/cpukit/score/cpu/m68k/include/rtems/score/cpu.h
@@ -433,6 +433,8 @@ void *_CPU_Thread_Idle_body( uintptr_t ignored );
/* end of Fatal Error manager macros */
+#define CPU_USE_LIBC_INIT_FINI_ARRAY FALSE
+
/*
* Bitfield handler macros
*
diff --git a/cpukit/score/cpu/mips/include/rtems/score/cpu.h b/cpukit/score/cpu/mips/include/rtems/score/cpu.h
index c9c212eab5..2b662cd549 100644
--- a/cpukit/score/cpu/mips/include/rtems/score/cpu.h
+++ b/cpukit/score/cpu/mips/include/rtems/score/cpu.h
@@ -740,6 +740,8 @@ extern void mips_break( int error );
#define CPU_USE_GENERIC_BITFIELD_CODE TRUE
+#define CPU_USE_LIBC_INIT_FINI_ARRAY FALSE
+
/* functions */
/*
diff --git a/cpukit/score/cpu/moxie/include/rtems/score/cpu.h b/cpukit/score/cpu/moxie/include/rtems/score/cpu.h
index 318650ea3f..c47e414f92 100644
--- a/cpukit/score/cpu/moxie/include/rtems/score/cpu.h
+++ b/cpukit/score/cpu/moxie/include/rtems/score/cpu.h
@@ -427,6 +427,8 @@ uint32_t _CPU_ISR_Get_level( void );
#define CPU_USE_GENERIC_BITFIELD_CODE TRUE
+#define CPU_USE_LIBC_INIT_FINI_ARRAY FALSE
+
/* functions */
/*
diff --git a/cpukit/score/cpu/nios2/include/rtems/score/cpu.h b/cpukit/score/cpu/nios2/include/rtems/score/cpu.h
index d98b0c5c35..5528561d1c 100644
--- a/cpukit/score/cpu/nios2/include/rtems/score/cpu.h
+++ b/cpukit/score/cpu/nios2/include/rtems/score/cpu.h
@@ -90,6 +90,8 @@ extern "C" {
#define CPU_USE_GENERIC_BITFIELD_CODE TRUE
+#define CPU_USE_LIBC_INIT_FINI_ARRAY FALSE
+
#define CPU_MPCI_RECEIVE_SERVER_EXTRA_STACK 0
#define CPU_MAXIMUM_PROCESSORS 32
diff --git a/cpukit/score/cpu/no_cpu/include/rtems/score/cpu.h b/cpukit/score/cpu/no_cpu/include/rtems/score/cpu.h
index 7f6e1f539d..50313bbd61 100644
--- a/cpukit/score/cpu/no_cpu/include/rtems/score/cpu.h
+++ b/cpukit/score/cpu/no_cpu/include/rtems/score/cpu.h
@@ -249,6 +249,14 @@ extern "C" {
*/
#define CPU_MAXIMUM_PROCESSORS 32
+/**
+ * The following define determines whether or not this CPU port will use the C
+ * library support to run the global constructors and destructors on
+ * architectures that use .init_array and .fini_array sections. If defined to
+ * FALSE, then the _init() and _fini() functions will be used.
+ */
+#define CPU_USE_LIBC_INIT_FINI_ARRAY TRUE
+
/*
* Processor defined structures required for cpukit/score.
*
diff --git a/cpukit/score/cpu/or1k/include/rtems/score/cpu.h b/cpukit/score/cpu/or1k/include/rtems/score/cpu.h
index 39920bebc3..c14388a804 100644
--- a/cpukit/score/cpu/or1k/include/rtems/score/cpu.h
+++ b/cpukit/score/cpu/or1k/include/rtems/score/cpu.h
@@ -33,11 +33,6 @@ extern "C" {
#include <rtems/score/or1k.h> /* pick up machine definitions */
#include <rtems/score/or1k-utility.h>
#include <rtems/score/basedefs.h>
-#ifndef ASM
-#include <rtems/bspIo.h>
-#include <stdint.h>
-#include <stdio.h> /* for printk */
-#endif
/* conditional compilation parameters */
@@ -427,7 +422,6 @@ void _CPU_Context_Initialize(
#include <inttypes.h>
#define _CPU_Fatal_halt(_source, _error ) \
- printk("Fatal Error %d.%" PRId32 " Halted\n",_source, _error); \
_OR1KSIM_CPU_Halt(); \
for(;;)
@@ -435,6 +429,8 @@ void _CPU_Context_Initialize(
#define CPU_USE_GENERIC_BITFIELD_CODE TRUE
+#define CPU_USE_LIBC_INIT_FINI_ARRAY TRUE
+
#endif /* ASM */
#define CPU_SIZEOF_POINTER 4
diff --git a/cpukit/score/cpu/powerpc/include/rtems/score/cpu.h b/cpukit/score/cpu/powerpc/include/rtems/score/cpu.h
index 8e4b10156f..33d8755ba4 100644
--- a/cpukit/score/cpu/powerpc/include/rtems/score/cpu.h
+++ b/cpukit/score/cpu/powerpc/include/rtems/score/cpu.h
@@ -805,6 +805,9 @@ void _CPU_Context_Initialize(
#endif /* ASM */
#ifndef ASM
+
+#define CPU_USE_LIBC_INIT_FINI_ARRAY FALSE
+
/* Bitfield handler macros */
#define CPU_USE_GENERIC_BITFIELD_CODE FALSE
diff --git a/cpukit/score/cpu/riscv/include/rtems/score/cpu.h b/cpukit/score/cpu/riscv/include/rtems/score/cpu.h
index e08307d372..501973a6dc 100644
--- a/cpukit/score/cpu/riscv/include/rtems/score/cpu.h
+++ b/cpukit/score/cpu/riscv/include/rtems/score/cpu.h
@@ -219,6 +219,8 @@ extern void _CPU_Fatal_halt(uint32_t source, uint32_t error) RTEMS_NO_RETURN;
#define CPU_USE_GENERIC_BITFIELD_DATA TRUE
+#define CPU_USE_LIBC_INIT_FINI_ARRAY TRUE
+
#define CPU_MAXIMUM_PROCESSORS 32
typedef uint16_t Priority_bit_map_Word;
diff --git a/cpukit/score/cpu/sh/include/rtems/score/cpu.h b/cpukit/score/cpu/sh/include/rtems/score/cpu.h
index a7cd5f89fd..9264479153 100644
--- a/cpukit/score/cpu/sh/include/rtems/score/cpu.h
+++ b/cpukit/score/cpu/sh/include/rtems/score/cpu.h
@@ -535,6 +535,8 @@ void _CPU_Context_Initialize(
#define CPU_USE_GENERIC_BITFIELD_CODE TRUE
+#define CPU_USE_LIBC_INIT_FINI_ARRAY FALSE
+
/* functions */
/*
diff --git a/cpukit/score/cpu/sparc/include/rtems/asm.h b/cpukit/score/cpu/sparc/include/rtems/asm.h
index cf2f25d06c..de65f35d2c 100644
--- a/cpukit/score/cpu/sparc/include/rtems/asm.h
+++ b/cpukit/score/cpu/sparc/include/rtems/asm.h
@@ -66,15 +66,13 @@
#define __REGISTER_PREFIX__
#endif
-#include <rtems/concat.h>
-
/* Use the right prefix for global labels. */
-#define SYM(x) CONCAT1 (__USER_LABEL_PREFIX__, x)
+#define SYM(x) RTEMS_XCONCAT(__USER_LABEL_PREFIX__, x)
/* Use the right prefix for registers. */
-#define REG(x) CONCAT1 (__REGISTER_PREFIX__, x)
+#define REG(x) RTEMS_XCONCAT(__REGISTER_PREFIX__, x)
/*
* define macros for all of the registers on this CPU
diff --git a/cpukit/score/cpu/sparc/include/rtems/score/cpu.h b/cpukit/score/cpu/sparc/include/rtems/score/cpu.h
index d4b24f3f56..13782f2f12 100644
--- a/cpukit/score/cpu/sparc/include/rtems/score/cpu.h
+++ b/cpukit/score/cpu/sparc/include/rtems/score/cpu.h
@@ -917,6 +917,8 @@ extern void _CPU_Fatal_halt(uint32_t source, uint32_t error)
/* end of Fatal Error manager macros */
+#define CPU_USE_LIBC_INIT_FINI_ARRAY FALSE
+
/* Bitfield handler macros */
#if ( SPARC_HAS_BITSCAN == 0 )
diff --git a/cpukit/score/cpu/sparc64/include/rtems/score/cpu.h b/cpukit/score/cpu/sparc64/include/rtems/score/cpu.h
index 84cb5865bd..2dd5cb194f 100644
--- a/cpukit/score/cpu/sparc64/include/rtems/score/cpu.h
+++ b/cpukit/score/cpu/sparc64/include/rtems/score/cpu.h
@@ -801,6 +801,8 @@ void _CPU_Context_Initialize(
/* end of Fatal Error manager macros */
+#define CPU_USE_LIBC_INIT_FINI_ARRAY FALSE
+
/* Bitfield handler macros */
/*
diff --git a/cpukit/score/cpu/v850/include/rtems/score/cpu.h b/cpukit/score/cpu/v850/include/rtems/score/cpu.h
index 0ab1d68ba7..a538789a58 100644
--- a/cpukit/score/cpu/v850/include/rtems/score/cpu.h
+++ b/cpukit/score/cpu/v850/include/rtems/score/cpu.h
@@ -493,6 +493,8 @@ void _CPU_Context_Initialize(
#define CPU_USE_GENERIC_BITFIELD_CODE TRUE
+#define CPU_USE_LIBC_INIT_FINI_ARRAY FALSE
+
/* functions */
/**
diff --git a/cpukit/score/cpu/x86_64/include/rtems/score/cpu.h b/cpukit/score/cpu/x86_64/include/rtems/score/cpu.h
index e3da0aa524..12ae14e229 100644
--- a/cpukit/score/cpu/x86_64/include/rtems/score/cpu.h
+++ b/cpukit/score/cpu/x86_64/include/rtems/score/cpu.h
@@ -242,6 +242,8 @@ void _CPU_Context_Initialize(
/* end of Fatal Error manager macros */
+#define CPU_USE_LIBC_INIT_FINI_ARRAY FALSE
+
/* Bitfield handler macros */
#define CPU_USE_GENERIC_BITFIELD_CODE TRUE
diff --git a/cpukit/score/src/freechain.c b/cpukit/score/src/freechain.c
index 7f60c655db..e5b1f84a63 100644
--- a/cpukit/score/src/freechain.c
+++ b/cpukit/score/src/freechain.c
@@ -18,7 +18,7 @@
#include "config.h"
#endif
-#include <rtems/score/freechain.h>
+#include <rtems/score/freechainimpl.h>
#include <rtems/score/assert.h>
void *_Freechain_Extend(
@@ -67,7 +67,6 @@ void *_Freechain_Get(
void _Freechain_Put( Freechain_Control *freechain, void *node )
{
if ( node != NULL ) {
- _Chain_Initialize_node( node );
- _Chain_Prepend_unprotected( &freechain->Free, node );
+ _Freechain_Push( freechain, node );
}
}
diff --git a/cpukit/score/src/objectmp.c b/cpukit/score/src/objectmp.c
index 987b86a968..74d55305a9 100644
--- a/cpukit/score/src/objectmp.c
+++ b/cpukit/score/src/objectmp.c
@@ -284,10 +284,10 @@ void _Objects_MP_Close (
}
Objects_Name_or_id_lookup_errors _Objects_MP_Global_name_search(
- Objects_Information *information,
- Objects_Name the_name,
- uint32_t nodes_to_search,
- Objects_Id *the_id
+ const Objects_Information *information,
+ Objects_Name the_name,
+ uint32_t nodes_to_search,
+ Objects_Id *the_id
)
{
Objects_Name_or_id_lookup_errors status;
@@ -325,6 +325,7 @@ Objects_Name_or_id_lookup_errors _Objects_MP_Global_name_search(
if ( the_global_object != NULL ) {
*the_id = the_global_object->id;
+ _Assert( the_global_object->name.name_u32 != 0 );
status = OBJECTS_NAME_OR_ID_LOOKUP_SUCCESSFUL;
} else {
status = OBJECTS_INVALID_NAME;
diff --git a/cpukit/score/src/objectnametoid.c b/cpukit/score/src/objectnametoid.c
index bafa7b23f4..ba73bdbad6 100644
--- a/cpukit/score/src/objectnametoid.c
+++ b/cpukit/score/src/objectnametoid.c
@@ -21,14 +21,14 @@
#include <rtems/score/objectimpl.h>
Objects_Name_or_id_lookup_errors _Objects_Name_to_id_u32(
- Objects_Information *information,
- uint32_t name,
- uint32_t node,
- Objects_Id *id
+ uint32_t name,
+ uint32_t node,
+ Objects_Id *id,
+ const Objects_Information *information
)
{
bool search_local_node;
- Objects_Control *the_object;
+ const Objects_Control *the_object;
Objects_Maximum maximum;
Objects_Maximum index;
#if defined(RTEMS_MULTIPROCESSING)
@@ -40,9 +40,6 @@ Objects_Name_or_id_lookup_errors _Objects_Name_to_id_u32(
if ( !id )
return OBJECTS_INVALID_ADDRESS;
- if ( name == 0 )
- return OBJECTS_INVALID_NAME;
-
maximum = _Objects_Get_maximum_index( information );
search_local_node = false;
@@ -61,6 +58,7 @@ Objects_Name_or_id_lookup_errors _Objects_Name_to_id_u32(
if ( name == the_object->name.name_u32 ) {
*id = the_object->id;
+ _Assert( name != 0 );
return OBJECTS_NAME_OR_ID_LOOKUP_SUCCESSFUL;
}
}
diff --git a/cpukit/score/src/stackallocator.c b/cpukit/score/src/stackallocator.c
index 404b98fa1c..6fd8bf9489 100644
--- a/cpukit/score/src/stackallocator.c
+++ b/cpukit/score/src/stackallocator.c
@@ -34,8 +34,4 @@
const bool _Stack_Allocator_avoids_workspace = false;
-const Stack_Allocator_initialize _Stack_Allocator_initialize = NULL;
-
const Stack_Allocator_allocate _Stack_Allocator_allocate = _Workspace_Allocate;
-
-const Stack_Allocator_free _Stack_Allocator_free = _Workspace_Free;
diff --git a/cpukit/score/src/stackallocatorfree.c b/cpukit/score/src/stackallocatorfree.c
new file mode 100644
index 0000000000..efb63d7cca
--- /dev/null
+++ b/cpukit/score/src/stackallocatorfree.c
@@ -0,0 +1,35 @@
+/*
+ * SPDX-License-Identifier: BSD-2-Clause
+ *
+ * Copyright (C) 2019 embedded brains GmbH
+ *
+ * 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/score/stack.h>
+#include <rtems/score/wkspace.h>
+
+const Stack_Allocator_free _Stack_Allocator_free = _Workspace_Free;
diff --git a/cpukit/score/src/stackallocatorfreenothing.c b/cpukit/score/src/stackallocatorfreenothing.c
new file mode 100644
index 0000000000..b469f650b6
--- /dev/null
+++ b/cpukit/score/src/stackallocatorfreenothing.c
@@ -0,0 +1,45 @@
+/* SPDX-License-Identifier: BSD-2-Clause */
+
+/**
+ * @file
+ *
+ * @ingroup RTEMSScoreStack
+ *
+ * @brief _Stack_Free_nothing() Implementation
+ */
+
+/*
+ * Copyright (C) 2020 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.
+ */
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#include <rtems/score/stackimpl.h>
+
+void _Stack_Free_nothing( void *stack_area )
+{
+ (void) stack_area;
+}
diff --git a/cpukit/score/src/stackallocatorinit.c b/cpukit/score/src/stackallocatorinit.c
new file mode 100644
index 0000000000..60d243631f
--- /dev/null
+++ b/cpukit/score/src/stackallocatorinit.c
@@ -0,0 +1,60 @@
+/* SPDX-License-Identifier: BSD-2-Clause */
+
+/**
+ * @file
+ *
+ * @ingroup RTEMSScoreStack
+ *
+ * @brief Stack Allocator Initialization
+ */
+
+/*
+ * Copyright (C) 2020 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.
+ */
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#include <rtems/score/stack.h>
+#include <rtems/score/interr.h>
+#include <rtems/config.h>
+
+void _Stack_Allocator_do_initialize( void )
+{
+ rtems_stack_allocate_init_hook init_hook;
+
+ if (
+ rtems_configuration_get_stack_allocate_hook() == NULL
+ || rtems_configuration_get_stack_free_hook() == NULL
+ ) {
+ _Internal_error( INTERNAL_ERROR_BAD_STACK_HOOK );
+ }
+
+ init_hook = rtems_configuration_get_stack_allocate_init_hook();
+
+ if ( init_hook != NULL ) {
+ (*init_hook )( rtems_configuration_get_stack_space_size() );
+ }
+}
diff --git a/cpukit/score/src/thread.c b/cpukit/score/src/thread.c
index 69bfcf66e7..3dde437e72 100644
--- a/cpukit/score/src/thread.c
+++ b/cpukit/score/src/thread.c
@@ -19,10 +19,9 @@
#endif
#include <rtems/score/threadimpl.h>
-#include <rtems/score/interr.h>
+#include <rtems/score/freechainimpl.h>
#include <rtems/score/objectimpl.h>
#include <rtems/score/scheduler.h>
-#include <rtems/score/wkspace.h>
#define THREAD_OFFSET_ASSERT( field ) \
RTEMS_STATIC_ASSERT( \
@@ -58,23 +57,9 @@ void _Thread_Initialize_information( Thread_Information *information )
void _Thread_Handler_initialization(void)
{
- rtems_stack_allocate_init_hook stack_allocate_init_hook =
- rtems_configuration_get_stack_allocate_init_hook();
- #if defined(RTEMS_MULTIPROCESSING)
- uint32_t maximum_proxies =
- _MPCI_Configuration.maximum_proxies;
- #endif
-
- if ( rtems_configuration_get_stack_allocate_hook() == NULL ||
- rtems_configuration_get_stack_free_hook() == NULL)
- _Internal_error( INTERNAL_ERROR_BAD_STACK_HOOK );
-
- if ( stack_allocate_init_hook != NULL )
- (*stack_allocate_init_hook)( rtems_configuration_get_stack_space_size() );
-
- #if defined(RTEMS_MULTIPROCESSING)
- _Thread_MP_Handler_initialization( maximum_proxies );
- #endif
+#if defined(RTEMS_MULTIPROCESSING)
+ _Thread_MP_Handler_initialization( _MPCI_Configuration.maximum_proxies );
+#endif
/*
* Initialize the internal class of threads. We need an IDLE thread
diff --git a/cpukit/score/src/threadallocateunlimited.c b/cpukit/score/src/threadallocateunlimited.c
index 463a0ecb5d..6f2dec7388 100644
--- a/cpukit/score/src/threadallocateunlimited.c
+++ b/cpukit/score/src/threadallocateunlimited.c
@@ -36,6 +36,7 @@
#endif
#include <rtems/score/thread.h>
+#include <rtems/score/freechainimpl.h>
#include <rtems/score/objectimpl.h>
#include <rtems/score/wkspace.h>
diff --git a/cpukit/score/src/threadhandler.c b/cpukit/score/src/threadhandler.c
index acbe186a53..6742b0b391 100644
--- a/cpukit/score/src/threadhandler.c
+++ b/cpukit/score/src/threadhandler.c
@@ -28,9 +28,13 @@
* Conditional magic to determine what style of C++ constructor
* initialization this target and compiler version uses.
*/
+RTEMS_STATIC_ASSERT(
+ CPU_USE_LIBC_INIT_FINI_ARRAY == TRUE
+ || CPU_USE_LIBC_INIT_FINI_ARRAY == FALSE,
+ CPU_USE_LIBC_INIT_FINI_ARRAY
+);
#if defined(__USE_INIT_FINI__)
- #if defined(__ARM_EABI__) || defined(__riscv) \
- || defined(__or1k__) || defined(__or1knd__)
+ #if CPU_USE_LIBC_INIT_FINI_ARRAY == TRUE
#define INIT_NAME __libc_init_array
#else
#define INIT_NAME _init
diff --git a/cpukit/score/src/threadinitialize.c b/cpukit/score/src/threadinitialize.c
index 691f56388e..4c6d849111 100644
--- a/cpukit/score/src/threadinitialize.c
+++ b/cpukit/score/src/threadinitialize.c
@@ -19,6 +19,7 @@
#endif
#include <rtems/score/threadimpl.h>
+#include <rtems/score/freechainimpl.h>
#include <rtems/score/schedulerimpl.h>
#include <rtems/score/stackimpl.h>
#include <rtems/score/tls.h>
@@ -35,8 +36,8 @@ bool _Thread_Initialize(
uintptr_t tls_size;
bool extension_status;
size_t i;
- char *stack_area;
- size_t stack_size;
+ char *stack_begin;
+ char *stack_end;
Scheduler_Node *scheduler_node;
#if defined(RTEMS_SMP)
Scheduler_Node *scheduler_node_for_index;
@@ -59,8 +60,7 @@ bool _Thread_Initialize(
}
/* Set everything to perform the error case clean up */
- scheduler_index = 0;
- the_thread->Start.allocated_stack = config->allocated_stack;
+ the_thread->Start.stack_free = config->stack_free;
#if defined(RTEMS_SMP)
if (
@@ -82,16 +82,15 @@ bool _Thread_Initialize(
}
#endif
- stack_area = config->stack_area;
- stack_size = config->stack_size;
+ stack_begin = config->stack_area;
+ stack_end = stack_begin + config->stack_size;
/* Allocate floating-point context in stack area */
#if ( CPU_HARDWARE_FP == TRUE ) || ( CPU_SOFTWARE_FP == TRUE )
if ( config->is_fp ) {
- the_thread->fp_context = ( Context_Control_fp *) stack_area;
- the_thread->Start.fp_context = ( Context_Control_fp *) stack_area;
- stack_size -= CONTEXT_FP_SIZE;
- stack_area += CONTEXT_FP_SIZE;
+ stack_end -= CONTEXT_FP_SIZE;
+ the_thread->fp_context = (Context_Control_fp *) stack_end;
+ the_thread->Start.fp_context = (Context_Control_fp *) stack_end;
}
#endif
@@ -101,17 +100,16 @@ bool _Thread_Initialize(
if ( tls_size > 0 ) {
uintptr_t tls_align;
+ stack_end -= tls_size;
tls_align = (uintptr_t) _TLS_Alignment;
the_thread->Start.tls_area = (void *)
- ( ( (uintptr_t) stack_area + tls_align - 1 ) & ~( tls_align - 1 ) );
- stack_size -= tls_size;
- stack_area += tls_size;
+ ( ( (uintptr_t) stack_end + tls_align - 1 ) & ~( tls_align - 1 ) );
}
_Stack_Initialize(
- &the_thread->Start.Initial_stack,
- stack_area,
- stack_size
+ &the_thread->Start.Initial_stack,
+ stack_begin,
+ stack_end - stack_begin
);
/*
@@ -154,6 +152,7 @@ bool _Thread_Initialize(
scheduler_node = NULL;
scheduler_node_for_index = the_thread->Scheduler.nodes;
scheduler_for_index = &_Scheduler_Table[ 0 ];
+ scheduler_index = 0;
while ( scheduler_index < _Scheduler_Count ) {
Priority_Control priority_for_index;
@@ -256,10 +255,6 @@ bool _Thread_Initialize(
if ( extension_status )
return true;
-#if defined(RTEMS_SMP) || CPU_ENABLE_ROBUST_THREAD_DISPATCH == TRUE
-failed:
-#endif
-
#if defined(RTEMS_SMP)
while ( scheduler_index > 0 ) {
scheduler_node_for_index = (Scheduler_Node *)
@@ -274,10 +269,15 @@ failed:
}
#endif
- _Freechain_Put(
+ _Freechain_Push(
&information->Thread_queue_heads.Free,
the_thread->Wait.spare_heads
);
- _Stack_Free( the_thread->Start.allocated_stack );
+
+#if defined(RTEMS_SMP) || CPU_ENABLE_ROBUST_THREAD_DISPATCH == TRUE
+failed:
+#endif
+
+ ( *the_thread->Start.stack_free )( the_thread->Start.Initial_stack.area );
return false;
}
diff --git a/cpukit/score/src/threadqenqueue.c b/cpukit/score/src/threadqenqueue.c
index 972736f3f2..f0a28457a1 100644
--- a/cpukit/score/src/threadqenqueue.c
+++ b/cpukit/score/src/threadqenqueue.c
@@ -531,7 +531,7 @@ static bool _Thread_queue_MP_set_callout(
the_proxy = (Thread_Proxy_control *) the_thread;
mp_callout = queue_context->mp_callout;
_Assert( mp_callout != NULL );
- the_proxy->thread_queue_callout = queue_context->mp_callout;
+ the_proxy->thread_queue_callout = mp_callout;
return true;
}
#endif
diff --git a/cpukit/score/src/threadrestart.c b/cpukit/score/src/threadrestart.c
index 4e892f75f1..3350bfe464 100644
--- a/cpukit/score/src/threadrestart.c
+++ b/cpukit/score/src/threadrestart.c
@@ -25,6 +25,7 @@
#include <rtems/score/apimutex.h>
#include <rtems/score/assert.h>
#include <rtems/score/chainimpl.h>
+#include <rtems/score/freechainimpl.h>
#include <rtems/score/isrlock.h>
#include <rtems/score/schedulerimpl.h>
#include <rtems/score/stackimpl.h>
@@ -175,7 +176,7 @@ static void _Thread_Free( Thread_Control *the_thread )
#endif
#endif
- _Freechain_Put(
+ _Freechain_Push(
&information->Thread_queue_heads.Free,
the_thread->Wait.spare_heads
);
@@ -184,7 +185,7 @@ static void _Thread_Free( Thread_Control *the_thread )
* Free the rest of the memory associated with this task
* and set the associated pointers to NULL for safety.
*/
- _Stack_Free( the_thread->Start.allocated_stack );
+ ( *the_thread->Start.stack_free )( the_thread->Start.Initial_stack.area );
#if defined(RTEMS_SMP)
_ISR_lock_Destroy( &the_thread->Scheduler.Lock );
@@ -336,6 +337,18 @@ void _Thread_Life_action_handler(
_Thread_State_acquire( executing, lock_context );
+ /*
+ * The executing thread runs with thread dispatching disabled right now.
+ * Other threads may have suspended the executing thread. The thread life
+ * handler may run in parallel with _Thread_Add_life_change_request() which
+ * may have set STATES_LIFE_IS_CHANGING.
+ */
+ _Assert(
+ executing->current_state == STATES_READY
+ || executing->current_state == STATES_SUSPENDED
+ || executing->current_state == STATES_LIFE_IS_CHANGING
+ );
+
_Thread_Change_life_locked(
executing,
THREAD_LIFE_PROTECTED | THREAD_LIFE_RESTARTING,
@@ -348,10 +361,6 @@ void _Thread_Life_action_handler(
_Assert(
_Watchdog_Get_state( &executing->Timer.Watchdog ) == WATCHDOG_INACTIVE
);
- _Assert(
- executing->current_state == STATES_READY
- || executing->current_state == STATES_SUSPENDED
- );
_User_extensions_Destroy_iterators( executing );
_Thread_Load_environment( executing );
diff --git a/cpukit/score/src/tlsallocsize.c b/cpukit/score/src/tlsallocsize.c
index 8fa5600602..a9f0c0cd23 100644
--- a/cpukit/score/src/tlsallocsize.c
+++ b/cpukit/score/src/tlsallocsize.c
@@ -1,7 +1,7 @@
+/* SPDX-License-Identifier: BSD-2-Clause */
+
/*
- * SPDX-License-Identifier: BSD-2-Clause
- *
- * Copyright (C) 2014, 2019 embedded brains GmbH
+ * Copyright (C) 2014, 2020 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
@@ -30,6 +30,8 @@
#endif
#include <rtems/score/tls.h>
+#include <rtems/score/interr.h>
+#include <rtems/score/thread.h>
static uintptr_t _TLS_Allocation_size;
@@ -65,6 +67,14 @@ uintptr_t _TLS_Get_allocation_size( void )
allocation_size += sizeof(TLS_Dynamic_thread_vector);
#endif
+ if ( _Thread_Maximum_TLS_size != 0 ) {
+ if ( allocation_size <= _Thread_Maximum_TLS_size ) {
+ allocation_size = _Thread_Maximum_TLS_size;
+ } else {
+ _Internal_error( INTERNAL_ERROR_TOO_LARGE_TLS_SIZE );
+ }
+ }
+
_TLS_Allocation_size = allocation_size;
}
diff --git a/gccdeps.py b/gccdeps.py
new file mode 100644
index 0000000000..1fc9373489
--- /dev/null
+++ b/gccdeps.py
@@ -0,0 +1,238 @@
+#!/usr/bin/env python
+# encoding: utf-8
+# Thomas Nagy, 2008-2010 (ita)
+
+"""
+Execute the tasks with gcc -MD, read the dependencies from the .d file
+and prepare the dependency calculation for the next run.
+This affects the cxx class, so make sure to load Qt5 after this tool.
+
+Usage::
+
+ def options(opt):
+ opt.load('compiler_cxx')
+ def configure(conf):
+ conf.load('compiler_cxx gccdeps')
+"""
+
+import os, re, threading
+from waflib import Task, Logs, Utils, Errors
+from waflib.Tools import c_preproc
+from waflib.TaskGen import before_method, feature
+
+lock = threading.Lock()
+
+gccdeps_flags = ['-MD']
+if not c_preproc.go_absolute:
+ gccdeps_flags = ['-MMD']
+
+# Third-party tools are allowed to add extra names in here with append()
+supported_compilers = ['gas', 'gcc', 'icc', 'clang']
+
+def scan(self):
+ if not self.__class__.__name__ in self.env.ENABLE_GCCDEPS:
+ return super(self.derived_gccdeps, self).scan()
+ nodes = self.generator.bld.node_deps.get(self.uid(), [])
+ names = []
+ return (nodes, names)
+
+re_o = re.compile(r"\.o$")
+re_splitter = re.compile(r'(?<!\\)\s+') # split by space, except when spaces are escaped
+
+def remove_makefile_rule_lhs(line):
+ # Splitting on a plain colon would accidentally match inside a
+ # Windows absolute-path filename, so we must search for a colon
+ # followed by whitespace to find the divider between LHS and RHS
+ # of the Makefile rule.
+ rulesep = ': '
+
+ sep_idx = line.find(rulesep)
+ if sep_idx >= 0:
+ return line[sep_idx + 2:]
+ else:
+ return line
+
+def path_to_node(base_node, path, cached_nodes):
+ # Take the base node and the path and return a node
+ # Results are cached because searching the node tree is expensive
+ # The following code is executed by threads, it is not safe, so a lock is needed...
+ if getattr(path, '__hash__'):
+ node_lookup_key = (base_node, path)
+ else:
+ # Not hashable, assume it is a list and join into a string
+ node_lookup_key = (base_node, os.path.sep.join(path))
+ try:
+ lock.acquire()
+ node = cached_nodes[node_lookup_key]
+ except KeyError:
+ node = base_node.find_resource(path)
+ cached_nodes[node_lookup_key] = node
+ finally:
+ lock.release()
+ return node
+
+def post_run(self):
+ if not self.__class__.__name__ in self.env.ENABLE_GCCDEPS:
+ return super(self.derived_gccdeps, self).post_run()
+
+ name = self.outputs[0].abspath()
+ name = re_o.sub('.d', name)
+ try:
+ txt = Utils.readf(name)
+ except EnvironmentError:
+ Logs.error('Could not find a .d dependency file, are cflags/cxxflags overwritten?')
+ raise
+ #os.remove(name)
+
+ # Compilers have the choice to either output the file's dependencies
+ # as one large Makefile rule:
+ #
+ # /path/to/file.o: /path/to/dep1.h \
+ # /path/to/dep2.h \
+ # /path/to/dep3.h \
+ # ...
+ #
+ # or as many individual rules:
+ #
+ # /path/to/file.o: /path/to/dep1.h
+ # /path/to/file.o: /path/to/dep2.h
+ # /path/to/file.o: /path/to/dep3.h
+ # ...
+ #
+ # So the first step is to sanitize the input by stripping out the left-
+ # hand side of all these lines. After that, whatever remains are the
+ # implicit dependencies of task.outputs[0]
+ txt = '\n'.join([remove_makefile_rule_lhs(line) for line in txt.splitlines()])
+
+ # Now join all the lines together
+ txt = txt.replace('\\\n', '')
+
+ val = txt.strip()
+ val = [x.replace('\\ ', ' ') for x in re_splitter.split(val) if x]
+
+ nodes = []
+ bld = self.generator.bld
+
+ # Dynamically bind to the cache
+ try:
+ cached_nodes = bld.cached_nodes
+ except AttributeError:
+ cached_nodes = bld.cached_nodes = {}
+
+ for x in val:
+
+ node = None
+ if os.path.isabs(x):
+ node = path_to_node(bld.root, x, cached_nodes)
+ else:
+ # TODO waf 1.9 - single cwd value
+ path = getattr(bld, 'cwdx', bld.bldnode)
+ # when calling find_resource, make sure the path does not contain '..'
+ x = [k for k in Utils.split_path(x) if k and k != '.']
+ while '..' in x:
+ idx = x.index('..')
+ if idx == 0:
+ x = x[1:]
+ path = path.parent
+ else:
+ del x[idx]
+ del x[idx-1]
+
+ node = path_to_node(path, x, cached_nodes)
+
+ if not node:
+ raise ValueError('could not find %r for %r' % (x, self))
+ if id(node) == id(self.inputs[0]):
+ # ignore the source file, it is already in the dependencies
+ # this way, successful config tests may be retrieved from the cache
+ continue
+ nodes.append(node)
+
+ Logs.debug('deps: gccdeps for %s returned %s', self, nodes)
+
+ bld.node_deps[self.uid()] = nodes
+ bld.raw_deps[self.uid()] = []
+
+ try:
+ del self.cache_sig
+ except AttributeError:
+ pass
+
+ Task.Task.post_run(self)
+
+def sig_implicit_deps(self):
+ if not self.__class__.__name__ in self.env.ENABLE_GCCDEPS:
+ return super(self.derived_gccdeps, self).sig_implicit_deps()
+ bld = self.generator.bld
+
+ try:
+ return self.compute_sig_implicit_deps()
+ except Errors.TaskNotReady:
+ raise ValueError("Please specify the build order precisely with gccdeps (asm/c/c++ tasks)")
+ except EnvironmentError:
+ # If a file is renamed, assume the dependencies are stale and must be recalculated
+ for x in bld.node_deps.get(self.uid(), []):
+ if not x.is_bld() and not x.exists():
+ try:
+ del x.parent.children[x.name]
+ except KeyError:
+ pass
+
+ key = self.uid()
+ bld.node_deps[key] = []
+ bld.raw_deps[key] = []
+ return Utils.SIG_NIL
+
+def wrap_compiled_task(classname):
+ derived_class = type(classname, (Task.classes[classname],), {})
+ derived_class.derived_gccdeps = derived_class
+ derived_class.post_run = post_run
+ derived_class.scan = scan
+ derived_class.sig_implicit_deps = sig_implicit_deps
+
+for k in ('asm', 'c', 'cxx'):
+ if k in Task.classes:
+ wrap_compiled_task(k)
+
+@before_method('process_source')
+@feature('force_gccdeps')
+def force_gccdeps(self):
+ self.env.ENABLE_GCCDEPS = ['asm', 'c', 'cxx']
+
+def configure(conf):
+ # in case someone provides a --enable-gccdeps command-line option
+ if not getattr(conf.options, 'enable_gccdeps', True):
+ return
+
+ global gccdeps_flags
+ flags = conf.env.GCCDEPS_FLAGS or gccdeps_flags
+ if conf.env.ASM_NAME in supported_compilers:
+ try:
+ conf.check(fragment='', features='asm force_gccdeps', asflags=flags, compile_filename='test.S', msg='Checking for asm flags %r' % ''.join(flags))
+ except Errors.ConfigurationError:
+ pass
+ else:
+ conf.env.append_value('ASFLAGS', flags)
+ conf.env.append_unique('ENABLE_GCCDEPS', 'asm')
+
+ if conf.env.CC_NAME in supported_compilers:
+ try:
+ conf.check(fragment='int main() { return 0; }', features='c force_gccdeps', cflags=flags, msg='Checking for c flags %r' % ''.join(flags))
+ except Errors.ConfigurationError:
+ pass
+ else:
+ conf.env.append_value('CFLAGS', flags)
+ conf.env.append_unique('ENABLE_GCCDEPS', 'c')
+
+ if conf.env.CXX_NAME in supported_compilers:
+ try:
+ conf.check(fragment='int main() { return 0; }', features='cxx force_gccdeps', cxxflags=flags, msg='Checking for cxx flags %r' % ''.join(flags))
+ except Errors.ConfigurationError:
+ pass
+ else:
+ conf.env.append_value('CXXFLAGS', flags)
+ conf.env.append_unique('ENABLE_GCCDEPS', 'cxx')
+
+def options(opt):
+ raise ValueError('Do not load gccdeps options')
+
diff --git a/long_gcc.py b/long_gcc.py
new file mode 100644
index 0000000000..20ca2a7f77
--- /dev/null
+++ b/long_gcc.py
@@ -0,0 +1,45 @@
+#! /usr/bin/env python
+# encoding: utf-8
+
+"""
+def build(bld):
+ bld.load('long_gcc')
+"""
+
+import os, tempfile
+from waflib import Task
+
+def exec_command(self, cmd, **kw):
+ # workaround for command line length limit:
+ # http://support.microsoft.com/kb/830473
+ tmp = None
+ try:
+ if not isinstance(cmd, str) and len(str(cmd)) > 8192:
+ (fd, tmp) = tempfile.mkstemp(dir=self.generator.bld.bldnode.abspath())
+ flat = ['"%s"' % x.replace('\\', '\\\\').replace('"', '\\"') for x in cmd[1:]]
+ try:
+ os.write(fd, ' '.join(flat).encode())
+ finally:
+ if tmp:
+ os.close(fd)
+ # Line may be very long:
+ # Logs.debug('runner:' + ' '.join(flat))
+ cmd = [cmd[0], '@' + tmp]
+ ret = super(self.__class__, self).exec_command(cmd, **kw)
+ finally:
+ if tmp:
+ os.remove(tmp)
+ return ret
+
+def wrap_class(class_name):
+ cls = Task.classes.get(class_name)
+ if not cls:
+ return None
+ derived_class = type(class_name, (cls,), {})
+ derived_class.exec_command = exec_command
+ if hasattr(cls, 'hcode'):
+ derived_class.hcode = cls.hcode
+ return derived_class
+
+for k in 'c cxx cprogram cxxprogram cshlib cxxshlib cstlib cxxstlib'.split():
+ wrap_class(k)
diff --git a/make/README b/make/README
new file mode 100644
index 0000000000..f3491c2577
--- /dev/null
+++ b/make/README
@@ -0,0 +1,465 @@
+ make/README
+
+ This file describes the layout and conventions of the application
+ makefile support for RTEMS applications. Internally, RTEMS uses
+ GNU-style autoconf/automake Makefiles as much as possible to
+ ease integration with other GNU tools.
+
+ All of these "make" trees are substantially similar; however this
+ file documents the current state of the RTEMS Application Makefile
+ support.
+
+ This make tree is based on a build system originally developed
+ to simplify porting projects between various OS's. The primary
+ goals were:
+
+ . simple *and* customizable individual makefiles
+
+ . use widely available GNU make. There is no pre-processing or
+ automatic generation of Makefiles.
+
+ . Same makefiles work on *many* host OS's due to portability
+ of GNU make and the host OS config files.
+
+ . Support for different compilers and operating systems
+ on a per-user basis. Using the same sources (including
+ Makefiles) one developer can develop and test under SVR4,
+ another under 4.x, another under HPUX.
+
+ . Builtin support for compiling "variants" such as debug
+ versions. These variants can be built
+ recursively.
+
+ . Control of system dependencies. "hidden" dependencies on
+ environment variables (such as PATH)
+ have been removed whenever possible. No matter what your
+ PATH variable is set to, you should get the same thing
+ when you 'make' as everyone else on the project.
+
+ This Makefile system has evolved into its present form and as it
+ exists in RTEMS today, its sole goal is to build RTEMS applications.
+ The use of these Makefiles hides the complexity of producing
+ executables for a wide variety of embedded CPU families and target
+ BSPs. Switching between RTEMS BSPs is accomplished via setting
+ the environment variable "RTEMS_MAKEFILE_PATH."
+
+ This description attempts to cover all aspects of the Makefile tree. Most
+ of what is described here is maintained automatically by the configuration
+ files.
+
+ The example makefiles in make/Templates should be used as a starting
+ point for new directories.
+
+ There are 2 main types of Makefile:
+
+ directory and leaf.
+
+ Directory Makefiles
+ -------------------
+
+ A Makefile in a source directory with sub-directories is called a
+ "directory" Makefile.
+
+ Directory Makefile's are simply responsible for acting as "middle-men"
+ and recursing into their sub-directories and propagating the make.
+
+ For example, directory src/bin will contain only a Makefile and
+ sub-directories. No actual source code will reside in the directory.
+ The following commands:
+
+ $ cd src/bin
+ $ make all
+
+ would descend into all the subdirectories of 'src/bin' and recursively
+ perform a 'make all'.
+
+ A 'make debug' will recurse thru sub-directories as a debug build.
+
+ A template directory Makefile which should work in almost all
+ cases is in make/Templates/Makefile.dir
+
+
+ Leaf Makefiles
+ --------------
+
+ Source directories that contain source code for libraries or
+ programs use a "leaf" Makefile.
+
+ These makefiles contain the rules necessary to build programs
+ (or libraries).
+
+ A template leaf Makefile is in Templates/Makefile.leaf . A template
+ leaf Makefile for building libraries is in Templates/Makefile.lib .
+
+
+ NOTE: To simplify nested makefile's and source maintenance, we disallow
+ combining source and directories (that make(1) would be expected to
+ recurse into) in one source directory. Ie., a directory in the source
+ tree may contain EITHER source files OR recursive sub directories, but NOT
+ both. This assumption is generally shared with GNU automake.
+
+ Variants (where objects go)
+ ---------------------------
+
+ All binary targets are placed in a sub-directory whose name is (for
+ example):
+
+ o-optimize/ -- optimized binaries
+ o-debug/ -- debug binaries
+
+ Using the template Makefiles, this will all happen automatically.
+ The contents of these directories are specific to a BSP.
+
+ Within a Makefile, the ${ARCH} variable is set to o-optimize,
+ o-debug, etc., as appropriate.
+
+ HISTORICAL NOTE: Prior to version 4.5, the name of the sub-directory
+ in which objects were placed included the BSP name.
+
+ Typing 'make' will place objects in o-optimize.
+ 'make debug' will place objects in o-debug.
+
+ The debug targets are equivalent to 'all' except that
+ CFLAGS and/or LDFLAGS are modified as per the compiler config file for
+ debug and profile support.
+
+ The targets debug etc., can be invoked recursively at
+ the directory make level. So from the top of a tree, one could
+ install a debug version of everything under that point by:
+
+ $ cd src/lib
+ $ gmake debug
+ $ gmake install
+
+ When building a command that is linked with a generated library, the
+ appropriate version of the library will be linked in.
+
+ For example, the following fragments link the normal, debug, or
+ version of "libmine.a" as appropriate:
+
+ LD_LIBS += $(LIBMINE)
+ LIBMINE = ../libmine/${ARCH}/libmine.a
+
+ ${ARCH}/pgm: $(LIBMINE) ${OBJS}
+ $(make-exe)
+
+ If we do 'gmake debug', then the library in
+ ../libmine/o-debug/libmine.a will be linked in. If $(LIBMINE)
+ might not exist (or might be out of date) at this point, we could add
+
+ ${LIBMINE}: FORCEIT
+ cd ../libmine; ${MAKE} ${VARIANT_VA}
+
+ The above would generate the following command to build libmine.a:
+
+ cd ../libmine; gmake debug
+
+ The macro reference ${VARIANT_VA} converts ${ARCH} to the word 'debug'
+ (in this example) and thus ensures the proper version of the library
+ is built.
+
+
+ Targets
+ -------
+
+ All Makefile's support the following targets:
+
+ all -- make "everything"
+ install -- install "everything"
+
+ The following targets are provided automatically by
+ the included config files:
+
+ clean -- delete all targets
+ depend -- build a make dependency file
+ "variant targets" -- special variants, see below
+
+
+ All directory Makefiles automatically propagate all these targets. If
+ you don't wish to support 'all' or 'install' in your source directory,
+ you must leave the rules section empty, as the parent directory Makefile
+ will attempt it on recursive make's.
+
+
+ Configuration
+ -------------
+
+ All the real work described here happens in file(s) included
+ from your Makefile.
+
+ All Makefiles include a customization file which is used to select
+ compiler and host operating system. The environment variable
+ RTEMS_MAKEFILE_PATH must point to the directory containing this file; eg:
+
+ export RTEMS_MAKEFILE_PATH=/.../pc386/
+
+ All leaf Makefile's also include either 'make/leaf.cfg' (or
+ 'make/lib.cfg' for building libraries). These config files provide
+ default rules and set up the command macros as appropriate.
+
+ All directory Makefiles include 'make/directory.cfg'. directory.cfg
+ provides all the rules for recursing through sub directories.
+
+ The Makefile templates already perform these include's.
+
+ 'make/leaf.cfg' (or directory.cfg) in turn includes:
+
+ a file specifying general purpose rules appropriate for
+ both leaf and directory makefiles.
+ ( make/main.cfg )
+
+ personality modules specified by the customization file for:
+ compiler ( make/compilers/??.cfg )
+
+
+ generic rules file
+ ------------------
+
+ [ make/main.cfg ]
+ included by leaf.cfg or directory.cfg.
+
+ This file contains some standard rules and variable assignments
+ that all Makefiles need.
+
+ It also includes the FORCEIT: pseudo target.
+
+
+ OS config file for host machine
+ -------------------------------
+
+ [ make/os/OS-NAME.cfg ]
+ included by main.cfg
+
+ Figures out the target architecture and specifies command names
+ for the OS tools including RCS/CVS (but NOT for the compiler tools).
+
+
+ Compiler configuration for the target
+ -------------------------------------
+
+ [ compilers/COMPILER-NAME.cfg ]
+ included by leaf.cfg
+
+ Specifies the names of tools for compiling programs.
+ Names in here should be fully qualified, and NOT depend on $PATH.
+
+ Also specifies compiler flags to be used to generate optimized,
+ debugging versions, as well as rules to compile
+ assembly language and make makefile dependencies.
+
+
+ Configuration Variables
+ -----------------------
+
+ Variables you have to set in the environment or in your Makefile.
+ Note: the RTEMS module files set RTEMS_ROOT and RTEMS_CUSTOM
+ for you.
+
+ Makefile Variables
+ ------------------
+
+ RTEMS_BSP -- name of your 'bsp' eg: pc386, mvme136
+
+ RTEMS_CPU -- CPU architecture e.g.: i386, m68k
+
+ RTEMS_CPU_FAMILY -- CPU model e.g.: i486dx, m68020
+
+ RTEMS_ROOT -- The root of your source tree.
+ All other file names are derived from this.
+ [ eg: % setenv RTEMS_ROOT $HOME/work/RTEMS ]
+
+ RTEMS_CUSTOM -- name of your config files in make/custom
+ Example:
+ $(RTEMS_ROOT)/make/custom/$(RTEMS_BSP).cfg
+
+ The value RTEMS_ROOT is used in the custom
+ files to generate the make(1) variables:
+
+ PROJECT_RELEASE
+ PROJECT_BIN
+ PROJECT_INCLUDE
+ PROJECT_TOOLS
+
+ etc., which are used within the make config files themselves.
+ (The files in make/*.cfg try to avoid use of word RTEMS so
+ they can be more easily shared by other projects)
+
+ Preset variables
+ ----------------
+
+ Aside from command names set by the OS and compiler config files,
+ a number of MAKE variables are automatically set and maintained by
+ the config files.
+
+ PROJECT_RELEASE
+ -- release/install directory
+ [ $(PROJECT_ROOT) ]
+
+ PROJECT_BIN
+ -- directory for installed binaries
+ [ $(PROJECT_ROOT)/bin ]
+
+ PROJECT_TOOLS
+ -- directory for build environment commands
+ [ eg: $(PROJECT_ROOT)/build-tools ]
+
+ ARCH -- target sub-directory for object code
+ [ eg: o-optimize or o-debug ]
+
+ VARIANTS -- full list of all possible values for $(ARCH);
+ used mainly for 'make clean'
+ [ eg: "o-optimize o-debug" ]
+
+ VARIANT_VA -- Variant name.
+ Normally "", but for 'make debug' it is "debug".
+
+ see make/leaf.cfg for more info.
+
+
+ Preset compilation variables
+ ----------------------------
+
+ This is a list of some of the compilation variables.
+ Refer to the compiler config files for the complete list.
+
+ CFLAGS_OPTIMIZE_V -- value of optimize flag for compiler
+ [ eg: -O ]
+
+ CFLAGS_DEBUG_V -- value of debug flag for compiler
+ [ eg: -g ]
+
+ CFLAGS_DEBUG
+ CFLAGS_OPTIMIZE -- current values for each depending
+ on make variant.
+
+ LDFLAGS_STATIC_LIBRARIES_V
+ -- ld option for static libraries
+ -Bstatic or -dy (svr4)
+
+ LDFLAGS_SHARED_LIBRARIES_V
+ -- ld option for dynamic libraries
+ -Bdynamic or -dn (svr4)
+
+ Makefile Variables
+ ------------------
+
+ The following variables may be set in a typical Makefile.
+
+ C_PIECES -- File names of your .c files without '.c' suffix.
+ [ eg: C_PIECES=main funcs stuff ]
+
+ CC_PIECES -- ditto, except for .cc files
+
+ S_PIECES -- ditto, except for .S files.
+
+ LIB -- target library name in leaf library makefiles.
+ [ eg: LIB=${ARCH}/libmine.a ]
+
+ H_FILES -- your .h files in this directory.
+ [ eg: H_FILES=stuff.h extra.h ]
+
+ DEFINES -- cc -D items. Included in CPPFLAGS.
+ leaf Makefiles.
+ [ eg: DEFINES += -DUNIX ]
+
+ CPPFLAGS -- -I include directories.
+ leaf Makefiles.
+ [ eg: CPPFLAGS += -I../include ]
+
+ LD_PATHS -- arguments to -L for ld.
+ Will be prefixed with '-L' or '-L ' as appropriate
+ and included in LDFLAGS.
+
+ LDFLAGS -- -L arguments to ld; more may be ADDed.
+
+ LD_LIBS -- libraries to be linked in.
+ [ eg: LDLIBS += ../libfoo/${ARCH}/libfoo.a ]
+
+ XCFLAGS -- "extra" CFLAGS for special needs. Pre-pended
+ to CFLAGS.
+ Not set or used by Makefiles.
+ Can be set on command line to pass extra flags
+ to the compiler.
+
+ XCPPFLAGS -- ditto for CPPFLAGS
+ Can be set on command line to pass extra flags
+ to the preprocessor.
+
+ XCCPPFLAGS -- same as XCPPFLAGS for C++.
+
+ XCCFLAGS -- same as XCFLAGS for C++.
+
+ SUBDIRS -- list of sub directories for make recursion.
+ directory Makefiles only.
+ [ eg: SUBDIRS=cpu bsp ]
+
+ CLEAN_ADDITIONS
+ -- list of files or directories that should
+ be deleted by 'make clean'
+ [ eg: CLEAN_ADDITIONS += y.tab.c ]
+
+ See 'leaf.cfg' for the 'clean:' rule and its
+ default deletions.
+
+ CLOBBER_ADDITIONS
+ -- list of files or directories that should
+ be deleted by 'make clobber'
+ Since 'make clobber' includes 'make clean',
+ you don't need to duplicate items in both.
+
+ Command names
+ -------------
+
+ The following commands should only be called
+ as make variables:
+
+ MAKE,INSTALL,INSTALL_VARIANT,SHELL
+
+ ECHO,CAT,CP,MV,LN,MKDIR,CHMOD
+
+ SED
+
+ CC,CPP,AS,AR,LD,NM,SIZE,RANLIB,MKLIB,
+ YACC,LEX,LINT,CTAGS,ETAGS
+
+ In addition, the following commands specifically support
+ the installation of libraries, executables, header files,
+ and other things that need to be installed:
+
+ INSTALL_CHANGE - set to host "install" program by default
+
+ INSTALL_VARIANT - set to host "install" program by default
+
+ Special Directory Makefile Targets
+ ----------------------------------
+
+ all_WRAPUP
+ clean_WRAPUP
+ install_WRAPUP
+ clean_WRAPUP
+ clobber_WRAPUP
+ depend_WRAPUP
+ -- Specify additional commands for recursive
+ (directory level) targets.
+
+ This is handy in certain cases where you need
+ to do bit of work *after* a recursive make.
+
+ make/Templates
+ --------------
+
+ This directory contains Makefile and source file templates that
+ should help in creating or converting makefiles.
+
+ Makefile.leaf
+ Template leaf Makefiles.
+
+ Makefile.lib
+ Template leaf library Makefiles.
+
+ Makefile.dir
+ Template "directory" makefile.
+
+
+
+
diff --git a/make/compilers/gcc-target-default.cfg b/make/compilers/gcc-target-default.cfg
new file mode 100644
index 0000000000..813bd5c2c4
--- /dev/null
+++ b/make/compilers/gcc-target-default.cfg
@@ -0,0 +1,189 @@
+#
+# Shared compiler for all GNU tools configurations
+#
+
+##
+# CFLAGS_OPTIMIZE_V, CFLAGS_DEBUG_V are the values we
+# would want the corresponding macros to be set to.
+#
+# CFLAGS_OPTIMIZE, CFLAGS_DEBUG are set in the leaf
+# Makefiles by the 'debug:' targets to their _V values.
+#
+
+# default flags
+# XCPPFLAGS, XCFLAGS, XCXXFLAGS, XASFLAGS
+# are used to add flags from the shell
+# cf. make.info ("Implicit rules/variables" for details)
+
+# NOTE: Should these go to CPPFLAGS ?
+CFLAGS_DEFAULT=-Wall
+
+# NOTE: CPU_CFLAGS should probably be renamed to CPU_CPPFLAGS
+# NOTE: CPU_DEFINES should probably be merged with CPU_CFLAGS
+CPPFLAGS += $(CPU_DEFINES) $(CPU_CFLAGS) $(DEFINES) $(XCPPFLAGS)
+CFLAGS = $(CFLAGS_DEFAULT) $(XCFLAGS)
+CXXFLAGS = $(CFLAGS_DEFAULT) $(XCXXFLAGS)
+ASFLAGS = $(CPU_ASFLAGS) $(XASFLAGS)
+
+# NOTE: GCCSPECS probably belongs to CPPFLAGS
+GCCSPECS_OPTIMIZE_V =
+GCCSPECS_DEBUG_V =
+
+GCCSPECS = -B$(PROJECT_RELEASE)/lib/ -specs bsp_specs -qrtems
+GCCSPECS += $(GCCSPECS_$(VARIANT_V)_V)
+
+CC += $(GCCSPECS)
+CXX += $(GCCSPECS)
+
+CPPFLAGS +=
+
+# Define this to yes if C++ is included in the development environment.
+# This requires that at least the GNU C++ compiler and libg++ be installed.
+ifeq ($(HAS_CPLUSPLUS),yes)
+CPLUS_LD_LIBS += $(PROJECT_RELEASE)/lib/librtems++$(LIBSUFFIX_VA)
+endif
+
+# debug flag;
+CFLAGS_DEBUG_V ?= -O0 -g
+CXXFLAGS_DEBUG_V ?= $(CFLAGS_DEBUG_V)
+
+# when debugging, optimize flag: typically empty
+# some compilers do allow optimization with their "-g"
+CFLAGS_OPTIMIZE_V ?= -O2 -g
+CXXFLAGS_OPTIMIZE_V ?= $(CFLAGS_OPTIMIZE_V)
+
+ifndef AUTOMAKE
+CPPFLAGS_$(VARIANT)=$(CPPFLAGS_$(VARIANT)_V)
+CFLAGS_$(VARIANT) =$(CFLAGS_$(VARIANT)_V)
+CXXFLAGS_$(VARIANT)=$(CXXFLAGS_$(VARIANT)_V)
+endif
+
+ifndef AUTOMAKE
+CPPFLAGS += $(CPPFLAGS_OPTIMIZE) $(CPPFLAGS_DEBUG)
+CFLAGS += $(CFLAGS_OPTIMIZE) $(CFLAGS_DEBUG)
+CXXFLAGS += $(CXXFLAGS_OPTIMIZE) $(CXXFLAGS_DEBUG)
+endif
+
+# List of library paths without -L
+LD_PATHS= $(PROJECT_RELEASE)/lib
+
+# ld flag for incomplete link
+LDFLAGS_INCOMPLETE = -r
+
+# LDFLAGS=$(LDFLAGS_DEBUG) $(LD_PATHS:%=-L%)
+LDFLAGS += $(LDFLAGS_DEBUG)
+
+#
+# Stuff to clean and clobber for the compiler and its tools
+#
+
+CLEAN_CC = a.out *.o *.BAK
+CLOBBER_CC =
+
+#
+# Client compiler and support tools
+#
+
+# CPP command to write file to standard output with warnings suppressed
+CPP=$(CC) -E -w
+
+# egrep regexp to ignore symbol table entries in ar archives.
+# Only used to make sure we skip them when coalescing libraries.
+# skip __.SYMDEF and empty names (maybe bug in ranlib??).
+AR_SYMBOL_TABLE="HIGHLY-UNLIKELY-TO-CONFLICT"
+ARFLAGS=ruv
+
+#
+# How to compile stuff into ${ARCH} subdirectory
+#
+
+${ARCH}/%.o: %.c
+ ${COMPILE.c} $(AM_CPPFLAGS) $(AM_CFLAGS) -o $@ $<
+
+${ARCH}/%.o: %.cc
+ ${COMPILE.cc} $(AM_CPPFLAGS) $(AM_CXXFLAGS) -o $@ $<
+
+${ARCH}/%.o: %.cpp
+ ${COMPILE.cc} $(AM_CPPFLAGS) $(AM_CXXFLAGS) -o $@ $<
+
+${ARCH}/%.o: %.cxx
+ ${COMPILE.cc} $(AM_CPPFLAGS) $(AM_CXXFLAGS) -o $@ $<
+
+${ARCH}/%.o: %.C
+ ${COMPILE.cc} $(AM_CPPFLAGS) $(AM_CXXFLAGS) -o $@ $<
+
+${ARCH}/%.o: %.S
+ ${COMPILE.S} $(AM_CPPFLAGS) -DASM -o $@ $<
+
+# Make foo.rel from foo.o
+${ARCH}/%.rel: ${ARCH}/%.o
+ ${make-rel}
+
+# create $(ARCH)/pgm from pgm.sh
+${ARCH}/%: %.sh
+ $(RM) $@
+ $(CP) $< $@
+ $(CHMOD) +x $@
+
+# Dependency files for use by gmake
+# NOTE: we don't put them into $(ARCH)
+# so that 'make clean' doesn't blow it away
+
+DEPEND=Depends-${ARCH}
+
+CLEAN_DEPEND=$(DEPEND).tmp
+CLOBBER_DEPEND=$(DEPEND)
+
+# We deliberately don't have anything depend on the
+# $(DEPEND) file; otherwise it will get rebuilt even
+# on 'make clean'
+#
+
+depend-am: $(C_FILES) $(CC_FILES) $(S_FILES)
+ifneq ($(words $(C_FILES) $(CC_FILES) $(S_FILES)), 0)
+# Use gcc -M to generate dependencies
+# Replace foo.o with $(ARCH)/foo.o
+# Replace $(ARCH) value with string $(ARCH)
+# so that it will for debug cases
+ $(COMPILE.c) $(AM_CPPFLAGS) $(AM_CFLAGS) -M $^ | \
+ $(SED) -e 's?^\(.*\)\.o[ ]*:?$$(ARCH)/\1.o:?' \
+ -e 's?$(ARCH)/?$$(ARCH)/?' >$(DEPEND).tmp
+ $(MV) $(DEPEND).tmp $(DEPEND)
+endif
+depend: depend-am
+
+# spell out all the LINK_FILE's, rather than using -lbsp, so
+# that $(LINK_FILES) can be a dependency
+
+#
+# NOTE: a rule to link an rtems' application should look similar to this
+# (cf. "make-exe" in make/custom/*.cfg):
+#
+# gcc28:
+# $(PGM): $(LINK_FILES)
+# $(CC) $(CFLAGS) -o $@ $(LINK_OBJS) $(LINK_LIBS)
+#
+
+LINK_OBJS =\
+ $(CONSTRUCTOR) \
+ $(OBJS)
+
+LINK_FILES =\
+ $(CONSTRUCTOR) \
+ $(OBJS) \
+ $(PROJECT_RELEASE)/lib/librtemsbsp$(LIBSUFFIX_VA) \
+ $(PROJECT_RELEASE)/lib/librtemscpu$(LIBSUFFIX_VA)
+
+LINK_LIBS += $(LD_LIBS)
+
+#
+# Allow user to override link commands (to build a prom image, perhaps)
+#
+ifndef LINKCMDS
+LINKCMDS=$(PROJECT_RELEASE)/lib/linkcmds
+endif
+
+define make-rel
+ $(LINK.c) $(CFLAGS) $(AM_CFLAGS) $(AM_LDFLAGS) \
+ -qnolinkcmds -nostdlib -Wl,-r $(XLDFLAGS) -o $@ $^
+endef
diff --git a/make/directory.cfg b/make/directory.cfg
new file mode 100644
index 0000000000..83ea0ecde3
--- /dev/null
+++ b/make/directory.cfg
@@ -0,0 +1,57 @@
+# make/directory.cfg
+#
+# Make(1) configuration file include'd by all directory-level Makefile's.
+#
+# See also make/main.cfg
+#
+
+# This is a simplified variant of automake-1.4's rule for handling
+# subdirectories
+$(RECURSE_TARGETS):
+ @set fnord $(MAKEFLAGS); amf=$$2; \
+ dot_seen=no; \
+ target=`echo $@ | sed -e s/-recursive// -e s/debug_// `; \
+ list='$(SUBDIRS)'; for subdir in $$list; do \
+ echo "Making $$target in $$subdir"; \
+ local_target="$$target"; \
+ (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
+ || case "$$amf" in *=*) exit 1;; *k*) fail=yes;; *) exit 1;; esac; \
+ done && test -z "$$fail"
+
+
+# mostlyclean-recursive maintainer-clean-recursive:
+clean-recursive \
+distclean-recursive:
+ @set fnord $(MAKEFLAGS); amf=$$2; \
+ dot_seen=no; \
+ rev=''; list='$(SUBDIRS)'; for subdir in $$list; do \
+ rev="$$subdir $$rev"; \
+ test "$$subdir" = "." && dot_seen=yes; \
+ done; \
+ test "$$dot_seen" = "no" && rev=". $$rev"; \
+ target=`echo $@ | sed s/-recursive//`; \
+ for subdir in $$rev; do \
+ echo "Making $$target in $$subdir"; \
+ if test "$$subdir" = "."; then \
+ local_target="$$target-am"; \
+ else \
+ local_target="$$target"; \
+ fi; \
+ (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
+ || case "$$amf" in *=*) exit 1;; *k*) fail=yes;; *) exit 1;; esac; \
+ done && test -z "$$fail"
+
+clean-am: clean-generic
+distclean-am: distclean-generic clean-am
+
+preinstall: preinstall-recursive
+.PHONY: preinstall preinstall-am preinstall-recursive
+
+distclean: distclean-recursive
+ -$(RM) config.status
+
+.PHONY: distclean distclean-am distclean-recursive
+
+clean: clean-recursive
+.PHONY: clean clean-am clean-recursive
+
diff --git a/make/host.cfg b/make/host.cfg
new file mode 100644
index 0000000000..890a2d2ee2
--- /dev/null
+++ b/make/host.cfg
@@ -0,0 +1,48 @@
+# OS-specific configuration
+#
+# Derived from rtems/c/make/os/*.cfg in previous RTEMS version.
+#
+
+#
+# Stuff to clean and clobber for the OS
+#
+
+CLEAN_OS =
+CLOBBER_OS = *~ *.bak TAGS tags
+
+SHELL=sh
+ECHO=echo
+
+CAT=cat
+CP=cp
+MV=mv
+LN=ln
+MKDIR=mkdir
+CHMOD=chmod
+SED=sed
+
+# Global tools
+
+ifndef BIN2C
+BIN2C=rtems-bin2c
+endif
+
+ifndef INSTALL_CHANGE
+INSTALL_CHANGE=install
+endif
+ifndef INSTALL_VARIANT
+INSTALL_VARIANT=install
+endif
+
+# ksh (or bash) is used by some shell scripts; ref build-tools/scripts/Makefile
+#
+# Must have shell functions. Some ksh's core dump mysteriously and
+# unreliably on RTEMS shell scripts. bash appears to be the most
+# reliable but late model ksh's are usually OK.
+KSH=bash
+
+INSTBINFLAGS = -m 0755
+INSTDATAFLAGS = -m 0644
+INSTLIBFLAGS = -m 0644
+INSTDIRFLAGS = -m 0755 -d
+INSTINCFLAGS = -m 0644
diff --git a/make/lib.cfg b/make/lib.cfg
new file mode 100644
index 0000000000..c4a2c679d5
--- /dev/null
+++ b/make/lib.cfg
@@ -0,0 +1,15 @@
+# make/lib.cfg
+#
+# Make(1) configuration file include'd by all "library" Makefile
+# Assumes $(LIB) is set to $(ARCH)/libfoo.a
+#
+
+include $(PROJECT_ROOT)/make/leaf.cfg
+
+define make-library
+$(RM) $@
+$(AR) $(ARFLAGS) $@ $(OBJS)
+$(RANLIB) $@
+endef
+
+.PRECIOUS: $(LIB)
diff --git a/rtems-bsps b/rtems-bsps
index 82c5150969..05bf396e57 100755
--- a/rtems-bsps
+++ b/rtems-bsps
@@ -34,7 +34,7 @@ import os
import os.path
import sys
-rtems_version = 5
+rtems_version = 6
class ArchBsps:
diff --git a/spec/build/bsps/arm/altera-cyclone-v/abi.yml b/spec/build/bsps/arm/altera-cyclone-v/abi.yml
new file mode 100644
index 0000000000..a3a710c97d
--- /dev/null
+++ b/spec/build/bsps/arm/altera-cyclone-v/abi.yml
@@ -0,0 +1,21 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+actions:
+- get-string: null
+- split: null
+- env-append: null
+build-type: option
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+default:
+- -march=armv7-a
+- -mthumb
+- -mfpu=neon
+- -mfloat-abi=hard
+- -mtune=cortex-a9
+default-by-variant: []
+description: |
+ ABI flags
+enabled-by: true
+links: []
+name: ABI_FLAGS
+type: build
diff --git a/spec/build/bsps/arm/altera-cyclone-v/bspalteracyclonev.yml b/spec/build/bsps/arm/altera-cyclone-v/bspalteracyclonev.yml
new file mode 100644
index 0000000000..abe3d7f490
--- /dev/null
+++ b/spec/build/bsps/arm/altera-cyclone-v/bspalteracyclonev.yml
@@ -0,0 +1,142 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+arch: arm
+bsp: altcycv_devkit
+build-type: bsp
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+enabled-by: true
+family: altera-cyclone-v
+includes: []
+install:
+- destination: ${BSP_INCLUDEDIR}
+ source:
+ - bsps/arm/altera-cyclone-v/include/bsp.h
+ - bsps/arm/altera-cyclone-v/include/tm27.h
+- destination: ${BSP_INCLUDEDIR}/bsp
+ source:
+ - bsps/arm/altera-cyclone-v/include/bsp/alt_16550_uart.h
+ - bsps/arm/altera-cyclone-v/include/bsp/alt_address_space.h
+ - bsps/arm/altera-cyclone-v/include/bsp/alt_cache.h
+ - bsps/arm/altera-cyclone-v/include/bsp/alt_clock_group.h
+ - bsps/arm/altera-cyclone-v/include/bsp/alt_clock_manager.h
+ - bsps/arm/altera-cyclone-v/include/bsp/alt_dma.h
+ - bsps/arm/altera-cyclone-v/include/bsp/alt_dma_common.h
+ - bsps/arm/altera-cyclone-v/include/bsp/alt_dma_program.h
+ - bsps/arm/altera-cyclone-v/include/bsp/alt_generalpurpose_io.h
+ - bsps/arm/altera-cyclone-v/include/bsp/alt_hwlibs_ver.h
+ - bsps/arm/altera-cyclone-v/include/bsp/alt_i2c.h
+ - bsps/arm/altera-cyclone-v/include/bsp/alt_interrupt_common.h
+ - bsps/arm/altera-cyclone-v/include/bsp/alt_mpu_registers.h
+ - bsps/arm/altera-cyclone-v/include/bsp/alt_qspi_private.h
+ - bsps/arm/altera-cyclone-v/include/bsp/alt_reset_manager.h
+ - bsps/arm/altera-cyclone-v/include/bsp/hwlib.h
+ - bsps/arm/altera-cyclone-v/include/bsp/i2cdrv.h
+ - bsps/arm/altera-cyclone-v/include/bsp/irq.h
+- destination: ${BSP_INCLUDEDIR}/bsp/socal
+ source:
+ - bsps/arm/altera-cyclone-v/include/bsp/socal/alt_acpidmap.h
+ - bsps/arm/altera-cyclone-v/include/bsp/socal/alt_clkmgr.h
+ - bsps/arm/altera-cyclone-v/include/bsp/socal/alt_dmanonsecure.h
+ - bsps/arm/altera-cyclone-v/include/bsp/socal/alt_dmasecure.h
+ - bsps/arm/altera-cyclone-v/include/bsp/socal/alt_gpio.h
+ - bsps/arm/altera-cyclone-v/include/bsp/socal/alt_i2c.h
+ - bsps/arm/altera-cyclone-v/include/bsp/socal/alt_l3.h
+ - bsps/arm/altera-cyclone-v/include/bsp/socal/alt_qspi.h
+ - bsps/arm/altera-cyclone-v/include/bsp/socal/alt_qspidata.h
+ - bsps/arm/altera-cyclone-v/include/bsp/socal/alt_rstmgr.h
+ - bsps/arm/altera-cyclone-v/include/bsp/socal/alt_sdr.h
+ - bsps/arm/altera-cyclone-v/include/bsp/socal/alt_sysmgr.h
+ - bsps/arm/altera-cyclone-v/include/bsp/socal/alt_uart.h
+ - bsps/arm/altera-cyclone-v/include/bsp/socal/hps.h
+ - bsps/arm/altera-cyclone-v/include/bsp/socal/socal.h
+- destination: ${BSP_LIBDIR}
+ source:
+ - bsps/arm/altera-cyclone-v/start/linkcmds
+ - bsps/arm/altera-cyclone-v/start/linkcmds.altcycv
+links:
+- role: build-dependency
+ uid: abi
+- role: build-dependency
+ uid: objsmp
+- role: build-dependency
+ uid: opta9periphclk
+- role: build-dependency
+ uid: optcachedata
+- role: build-dependency
+ uid: optcacheinst
+- role: build-dependency
+ uid: optclkfastidle
+- role: build-dependency
+ uid: optconcfg
+- role: build-dependency
+ uid: optconuart1
+- role: build-dependency
+ uid: optfdtcpyro
+- role: build-dependency
+ uid: optfdten
+- role: build-dependency
+ uid: optfdtmxsz
+- role: build-dependency
+ uid: optfdtro
+- role: build-dependency
+ uid: optfdtuboot
+- role: build-dependency
+ uid: opti2cspeed
+- role: build-dependency
+ uid: optnoi2c
+- role: build-dependency
+ uid: optresetvec
+- role: build-dependency
+ uid: optuartbaud
+- role: build-dependency
+ uid: optuartirq
+- role: build-dependency
+ uid: ../grp
+- role: build-dependency
+ uid: ../start
+- role: build-dependency
+ uid: ../../obj
+- role: build-dependency
+ uid: ../../objirq
+- role: build-dependency
+ uid: ../../opto2
+- role: build-dependency
+ uid: ../../bspopts
+source:
+- bsps/arm/altera-cyclone-v/console/console-config.c
+- bsps/arm/altera-cyclone-v/contrib/hwlib/src/hwmgr/alt_16550_uart.c
+- bsps/arm/altera-cyclone-v/contrib/hwlib/src/hwmgr/alt_address_space.c
+- bsps/arm/altera-cyclone-v/contrib/hwlib/src/hwmgr/alt_clock_manager.c
+- bsps/arm/altera-cyclone-v/contrib/hwlib/src/hwmgr/alt_dma.c
+- bsps/arm/altera-cyclone-v/contrib/hwlib/src/hwmgr/alt_dma_program.c
+- bsps/arm/altera-cyclone-v/contrib/hwlib/src/hwmgr/alt_generalpurpose_io.c
+- bsps/arm/altera-cyclone-v/contrib/hwlib/src/hwmgr/alt_i2c.c
+- bsps/arm/altera-cyclone-v/contrib/hwlib/src/hwmgr/alt_qspi.c
+- bsps/arm/altera-cyclone-v/contrib/hwlib/src/hwmgr/alt_reset_manager.c
+- bsps/arm/altera-cyclone-v/i2c/i2cdrv-config.c
+- bsps/arm/altera-cyclone-v/i2c/i2cdrv.c
+- bsps/arm/altera-cyclone-v/rtc/rtc.c
+- bsps/arm/altera-cyclone-v/start/bspclean.c
+- bsps/arm/altera-cyclone-v/start/bspgetworkarea.c
+- bsps/arm/altera-cyclone-v/start/bspreset.c
+- bsps/arm/altera-cyclone-v/start/bspstart.c
+- bsps/arm/altera-cyclone-v/start/bspstarthooks.c
+- bsps/arm/altera-cyclone-v/start/mmu-config.c
+- bsps/arm/shared/cache/cache-l2c-310.c
+- bsps/arm/shared/clock/clock-a9mpcore.c
+- bsps/arm/shared/cp15/arm-cp15-set-exception-handler.c
+- bsps/arm/shared/cp15/arm-cp15-set-ttb-entries.c
+- bsps/arm/shared/irq/irq-gic.c
+- bsps/arm/shared/start/bsp-start-memcpy.S
+- bsps/shared/dev/btimer/btimer-stub.c
+- bsps/shared/dev/getentropy/getentropy-cpucounter.c
+- bsps/shared/dev/rtc/rtc-support.c
+- bsps/shared/dev/serial/console-termios-init.c
+- bsps/shared/dev/serial/console-termios.c
+- bsps/shared/irq/irq-default-handler.c
+- bsps/shared/start/bsp-fdt.c
+- bsps/shared/start/sbrk.c
+- bsps/shared/start/stackalloc.c
+type: build
diff --git a/spec/build/bsps/arm/altera-cyclone-v/objsmp.yml b/spec/build/bsps/arm/altera-cyclone-v/objsmp.yml
new file mode 100644
index 0000000000..bf0c99d21f
--- /dev/null
+++ b/spec/build/bsps/arm/altera-cyclone-v/objsmp.yml
@@ -0,0 +1,16 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: objects
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by:
+- RTEMS_SMP
+includes: []
+install: []
+links: []
+source:
+- bsps/arm/altera-cyclone-v/start/bspsmp.c
+- bsps/arm/shared/start/arm-a9mpcore-smp.c
+type: build
diff --git a/spec/build/bsps/arm/altera-cyclone-v/opta9periphclk.yml b/spec/build/bsps/arm/altera-cyclone-v/opta9periphclk.yml
new file mode 100644
index 0000000000..e67ddc129b
--- /dev/null
+++ b/spec/build/bsps/arm/altera-cyclone-v/opta9periphclk.yml
@@ -0,0 +1,15 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+actions:
+- get-boolean: null
+- define-condition: null
+build-type: option
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+default: false
+default-by-variant: []
+description: |
+ define to set ARM Cortex-A9 MPCore PERIPHCLK clock frequency in Hz, otherwise alt_clk_freq_get() is used
+enabled-by: true
+links: []
+name: BSP_ARM_A9MPCORE_PERIPHCLK
+type: build
diff --git a/spec/build/bsps/arm/altera-cyclone-v/optcachedata.yml b/spec/build/bsps/arm/altera-cyclone-v/optcachedata.yml
new file mode 100644
index 0000000000..77dac09116
--- /dev/null
+++ b/spec/build/bsps/arm/altera-cyclone-v/optcachedata.yml
@@ -0,0 +1,15 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+actions:
+- get-boolean: null
+- define-condition: null
+build-type: option
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+default: true
+default-by-variant: []
+description: |
+ enable data cache
+enabled-by: true
+links: []
+name: BSP_DATA_CACHE_ENABLED
+type: build
diff --git a/spec/build/bsps/arm/altera-cyclone-v/optcacheinst.yml b/spec/build/bsps/arm/altera-cyclone-v/optcacheinst.yml
new file mode 100644
index 0000000000..a59db43f31
--- /dev/null
+++ b/spec/build/bsps/arm/altera-cyclone-v/optcacheinst.yml
@@ -0,0 +1,15 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+actions:
+- get-boolean: null
+- define-condition: null
+build-type: option
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+default: true
+default-by-variant: []
+description: |
+ enable instruction cache
+enabled-by: true
+links: []
+name: BSP_INSTRUCTION_CACHE_ENABLED
+type: build
diff --git a/spec/build/bsps/arm/altera-cyclone-v/optclkfastidle.yml b/spec/build/bsps/arm/altera-cyclone-v/optclkfastidle.yml
new file mode 100644
index 0000000000..b800b20428
--- /dev/null
+++ b/spec/build/bsps/arm/altera-cyclone-v/optclkfastidle.yml
@@ -0,0 +1,18 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+actions:
+- get-boolean: null
+- define-condition: null
+build-type: option
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+default: false
+default-by-variant:
+- value: true
+ variants:
+ - arm/.*qemu
+description: |
+ This sets a mode where the time runs as fast as possible when a clock ISR occurs while the IDLE thread is executing. This can significantly reduce simulation times.
+enabled-by: true
+links: []
+name: CLOCK_DRIVER_USE_FAST_IDLE
+type: build
diff --git a/spec/build/bsps/arm/altera-cyclone-v/optconcfg.yml b/spec/build/bsps/arm/altera-cyclone-v/optconcfg.yml
new file mode 100644
index 0000000000..635697cc8a
--- /dev/null
+++ b/spec/build/bsps/arm/altera-cyclone-v/optconcfg.yml
@@ -0,0 +1,15 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+actions:
+- get-boolean: null
+- define-condition: null
+build-type: option
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+default: true
+default-by-variant: []
+description: |
+ configuration for console (UART 0)
+enabled-by: true
+links: []
+name: CYCLONE_V_CONFIG_CONSOLE
+type: build
diff --git a/spec/build/bsps/arm/altera-cyclone-v/optconuart1.yml b/spec/build/bsps/arm/altera-cyclone-v/optconuart1.yml
new file mode 100644
index 0000000000..f5c588a330
--- /dev/null
+++ b/spec/build/bsps/arm/altera-cyclone-v/optconuart1.yml
@@ -0,0 +1,15 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+actions:
+- get-boolean: null
+- define-condition: null
+build-type: option
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+default: true
+default-by-variant: []
+description: |
+ configuration for UART 1
+enabled-by: true
+links: []
+name: CYCLONE_V_CONFIG_UART_1
+type: build
diff --git a/spec/build/bsps/arm/altera-cyclone-v/optfdtcpyro.yml b/spec/build/bsps/arm/altera-cyclone-v/optfdtcpyro.yml
new file mode 100644
index 0000000000..c26b1ae051
--- /dev/null
+++ b/spec/build/bsps/arm/altera-cyclone-v/optfdtcpyro.yml
@@ -0,0 +1,15 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+actions:
+- get-boolean: null
+- define-condition: null
+build-type: option
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+default: true
+default-by-variant: []
+description: |
+ copy the FDT blob into the read-only load area via bsp_fdt_copy()
+enabled-by: true
+links: []
+name: BSP_FDT_BLOB_COPY_TO_READ_ONLY_LOAD_AREA
+type: build
diff --git a/spec/build/bsps/arm/altera-cyclone-v/optfdten.yml b/spec/build/bsps/arm/altera-cyclone-v/optfdten.yml
new file mode 100644
index 0000000000..f2fc473967
--- /dev/null
+++ b/spec/build/bsps/arm/altera-cyclone-v/optfdten.yml
@@ -0,0 +1,15 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+actions:
+- get-boolean: null
+- define-condition: null
+build-type: option
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+default: true
+default-by-variant: []
+description: |
+ define if FDT is supported
+enabled-by: true
+links: []
+name: BSP_FDT_IS_SUPPORTED
+type: build
diff --git a/spec/build/bsps/arm/altera-cyclone-v/optfdtmxsz.yml b/spec/build/bsps/arm/altera-cyclone-v/optfdtmxsz.yml
new file mode 100644
index 0000000000..14af766230
--- /dev/null
+++ b/spec/build/bsps/arm/altera-cyclone-v/optfdtmxsz.yml
@@ -0,0 +1,16 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+actions:
+- get-integer: null
+- define: null
+build-type: option
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+default: 262144
+default-by-variant: []
+description: |
+ maximum size of the FDT blob in bytes
+enabled-by: true
+format: '{}'
+links: []
+name: BSP_FDT_BLOB_SIZE_MAX
+type: build
diff --git a/spec/build/bsps/arm/altera-cyclone-v/optfdtro.yml b/spec/build/bsps/arm/altera-cyclone-v/optfdtro.yml
new file mode 100644
index 0000000000..a61bb2924b
--- /dev/null
+++ b/spec/build/bsps/arm/altera-cyclone-v/optfdtro.yml
@@ -0,0 +1,15 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+actions:
+- get-boolean: null
+- define-condition: null
+build-type: option
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+default: true
+default-by-variant: []
+description: |
+ place the FDT blob into the read-only data area
+enabled-by: true
+links: []
+name: BSP_FDT_BLOB_READ_ONLY
+type: build
diff --git a/spec/build/bsps/arm/altera-cyclone-v/optfdtuboot.yml b/spec/build/bsps/arm/altera-cyclone-v/optfdtuboot.yml
new file mode 100644
index 0000000000..5805e912ff
--- /dev/null
+++ b/spec/build/bsps/arm/altera-cyclone-v/optfdtuboot.yml
@@ -0,0 +1,15 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+actions:
+- get-boolean: null
+- define-condition: null
+build-type: option
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+default: true
+default-by-variant: []
+description: |
+ copy the U-Boot provided FDT to an internal storage
+enabled-by: true
+links: []
+name: BSP_START_COPY_FDT_FROM_U_BOOT
+type: build
diff --git a/spec/build/bsps/arm/altera-cyclone-v/opti2cspeed.yml b/spec/build/bsps/arm/altera-cyclone-v/opti2cspeed.yml
new file mode 100644
index 0000000000..ee8097aa3b
--- /dev/null
+++ b/spec/build/bsps/arm/altera-cyclone-v/opti2cspeed.yml
@@ -0,0 +1,16 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+actions:
+- get-integer: null
+- define: null
+build-type: option
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+default: 100000
+default-by-variant: []
+description: |
+ speed for I2C0 in HZ
+enabled-by: true
+format: '{}'
+links: []
+name: CYCLONE_V_I2C0_SPEED
+type: build
diff --git a/spec/build/bsps/arm/altera-cyclone-v/optnoi2c.yml b/spec/build/bsps/arm/altera-cyclone-v/optnoi2c.yml
new file mode 100644
index 0000000000..2d36d5f930
--- /dev/null
+++ b/spec/build/bsps/arm/altera-cyclone-v/optnoi2c.yml
@@ -0,0 +1,15 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+actions:
+- get-boolean: null
+- define-condition: null
+build-type: option
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+default: true
+default-by-variant: []
+description: |
+ Number of configured I2C buses. Note that each bus has to be configured in an apropriate i2cdrv_config array.
+enabled-by: true
+links: []
+name: CYCLONE_V_NO_I2C
+type: build
diff --git a/spec/build/bsps/arm/altera-cyclone-v/optresetvec.yml b/spec/build/bsps/arm/altera-cyclone-v/optresetvec.yml
new file mode 100644
index 0000000000..efd1ea2b2a
--- /dev/null
+++ b/spec/build/bsps/arm/altera-cyclone-v/optresetvec.yml
@@ -0,0 +1,15 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+actions:
+- get-boolean: null
+- define-condition: null
+build-type: option
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+default: false
+default-by-variant: []
+description: |
+ reset vector address for BSP start
+enabled-by: true
+links: []
+name: BSP_START_RESET_VECTOR
+type: build
diff --git a/spec/build/bsps/arm/altera-cyclone-v/optuartbaud.yml b/spec/build/bsps/arm/altera-cyclone-v/optuartbaud.yml
new file mode 100644
index 0000000000..b5f577ffc3
--- /dev/null
+++ b/spec/build/bsps/arm/altera-cyclone-v/optuartbaud.yml
@@ -0,0 +1,16 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+actions:
+- get-integer: null
+- define: null
+build-type: option
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+default: 115200
+default-by-variant: []
+description: |
+ baud for UARTs
+enabled-by: true
+format: '{}'
+links: []
+name: CYCLONE_V_UART_BAUD
+type: build
diff --git a/spec/build/bsps/arm/altera-cyclone-v/optuartirq.yml b/spec/build/bsps/arm/altera-cyclone-v/optuartirq.yml
new file mode 100644
index 0000000000..152668b2d9
--- /dev/null
+++ b/spec/build/bsps/arm/altera-cyclone-v/optuartirq.yml
@@ -0,0 +1,15 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+actions:
+- get-boolean: null
+- define-condition: null
+build-type: option
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+default: true
+default-by-variant: []
+description: |
+ enable usage of interrupts for the UART modules
+enabled-by: true
+links: []
+name: BSP_USE_UART_INTERRUPTS
+type: build
diff --git a/spec/build/bsps/arm/atsam/abi.yml b/spec/build/bsps/arm/atsam/abi.yml
new file mode 100644
index 0000000000..7a95742c36
--- /dev/null
+++ b/spec/build/bsps/arm/atsam/abi.yml
@@ -0,0 +1,20 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+actions:
+- get-string: null
+- split: null
+- env-append: null
+build-type: option
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+default:
+- -mthumb
+- -mcpu=cortex-m7
+- -mfpu=fpv5-d16
+- -mfloat-abi=hard
+default-by-variant: []
+description: |
+ ABI flags
+enabled-by: true
+links: []
+name: ABI_FLAGS
+type: build
diff --git a/spec/build/bsps/arm/atsam/bspatsam.yml b/spec/build/bsps/arm/atsam/bspatsam.yml
new file mode 100644
index 0000000000..f0aaa17cf7
--- /dev/null
+++ b/spec/build/bsps/arm/atsam/bspatsam.yml
@@ -0,0 +1,411 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+arch: arm
+bsp: atsamv
+build-type: bsp
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+enabled-by: true
+family: atsam
+includes:
+- bsps/arm/atsam/contrib/libraries/libboard
+- bsps/arm/atsam/contrib/libraries/libboard/include
+- bsps/arm/atsam/contrib/libraries/libchip
+- bsps/arm/atsam/contrib/libraries/libchip/include
+- bsps/arm/atsam/include/libchip
+- bsps/arm/atsam/include/libchip/include
+install:
+- destination: ${BSP_INCLUDEDIR}
+ source:
+ - bsps/arm/atsam/include/bsp.h
+ - bsps/arm/atsam/include/tm27.h
+- destination: ${BSP_INCLUDEDIR}/bsp
+ source:
+ - bsps/arm/atsam/include/bsp/atsam-clock-config.h
+ - bsps/arm/atsam/include/bsp/atsam-i2c.h
+ - bsps/arm/atsam/include/bsp/atsam-spi.h
+ - bsps/arm/atsam/include/bsp/i2c.h
+ - bsps/arm/atsam/include/bsp/iocopy.h
+ - bsps/arm/atsam/include/bsp/irq.h
+ - bsps/arm/atsam/include/bsp/pin-config.h
+ - bsps/arm/atsam/include/bsp/power.h
+ - bsps/arm/atsam/include/bsp/sc16is752.h
+ - bsps/arm/atsam/include/bsp/spi.h
+- destination: ${BSP_INCLUDEDIR}/libchip
+ source:
+ - bsps/arm/atsam/include/libchip/chip.h
+ - bsps/arm/atsam/include/libchip/compiler.h
+- destination: ${BSP_INCLUDEDIR}/libchip/include
+ source:
+ - bsps/arm/atsam/include/libchip/include/acc.h
+ - bsps/arm/atsam/include/libchip/include/adc.h
+ - bsps/arm/atsam/include/libchip/include/aes.h
+ - bsps/arm/atsam/include/libchip/include/afe_dma.h
+ - bsps/arm/atsam/include/libchip/include/afec.h
+ - bsps/arm/atsam/include/libchip/include/chip.h
+ - bsps/arm/atsam/include/libchip/include/dac_dma.h
+ - bsps/arm/atsam/include/libchip/include/efc.h
+ - bsps/arm/atsam/include/libchip/include/exceptions.h
+ - bsps/arm/atsam/include/libchip/include/flashd.h
+ - bsps/arm/atsam/include/libchip/include/gmac.h
+ - bsps/arm/atsam/include/libchip/include/gmacd.h
+ - bsps/arm/atsam/include/libchip/include/hsmci.h
+ - bsps/arm/atsam/include/libchip/include/icm.h
+ - bsps/arm/atsam/include/libchip/include/isi.h
+ - bsps/arm/atsam/include/libchip/include/iso7816_4.h
+ - bsps/arm/atsam/include/libchip/include/mcan.h
+ - bsps/arm/atsam/include/libchip/include/mcid.h
+ - bsps/arm/atsam/include/libchip/include/mediaLB.h
+ - bsps/arm/atsam/include/libchip/include/mpu.h
+ - bsps/arm/atsam/include/libchip/include/pio.h
+ - bsps/arm/atsam/include/libchip/include/pio_capture.h
+ - bsps/arm/atsam/include/libchip/include/pio_it.h
+ - bsps/arm/atsam/include/libchip/include/pmc.h
+ - bsps/arm/atsam/include/libchip/include/pwmc.h
+ - bsps/arm/atsam/include/libchip/include/qspi.h
+ - bsps/arm/atsam/include/libchip/include/qspi_dma.h
+ - bsps/arm/atsam/include/libchip/include/rstc.h
+ - bsps/arm/atsam/include/libchip/include/rtc.h
+ - bsps/arm/atsam/include/libchip/include/rtt.h
+ - bsps/arm/atsam/include/libchip/include/sdramc.h
+ - bsps/arm/atsam/include/libchip/include/smc.h
+ - bsps/arm/atsam/include/libchip/include/spi.h
+ - bsps/arm/atsam/include/libchip/include/spi_dma.h
+ - bsps/arm/atsam/include/libchip/include/ssc.h
+ - bsps/arm/atsam/include/libchip/include/supc.h
+ - bsps/arm/atsam/include/libchip/include/tc.h
+ - bsps/arm/atsam/include/libchip/include/timetick.h
+ - bsps/arm/atsam/include/libchip/include/trace.h
+ - bsps/arm/atsam/include/libchip/include/trng.h
+ - bsps/arm/atsam/include/libchip/include/twi.h
+ - bsps/arm/atsam/include/libchip/include/twid.h
+ - bsps/arm/atsam/include/libchip/include/uart.h
+ - bsps/arm/atsam/include/libchip/include/uart_dma.h
+ - bsps/arm/atsam/include/libchip/include/usart.h
+ - bsps/arm/atsam/include/libchip/include/usart_dma.h
+ - bsps/arm/atsam/include/libchip/include/usbhs.h
+ - bsps/arm/atsam/include/libchip/include/video.h
+ - bsps/arm/atsam/include/libchip/include/wdt.h
+ - bsps/arm/atsam/include/libchip/include/xdma_hardware_interface.h
+ - bsps/arm/atsam/include/libchip/include/xdmac.h
+ - bsps/arm/atsam/include/libchip/include/xdmad.h
+- destination: ${BSP_INCLUDEDIR}/libchip/include/same70
+ source:
+ - bsps/arm/atsam/include/libchip/include/same70/same70.h
+ - bsps/arm/atsam/include/libchip/include/same70/same70j19.h
+ - bsps/arm/atsam/include/libchip/include/same70/same70j20.h
+ - bsps/arm/atsam/include/libchip/include/same70/same70j21.h
+ - bsps/arm/atsam/include/libchip/include/same70/same70n19.h
+ - bsps/arm/atsam/include/libchip/include/same70/same70n20.h
+ - bsps/arm/atsam/include/libchip/include/same70/same70n21.h
+ - bsps/arm/atsam/include/libchip/include/same70/same70q19.h
+ - bsps/arm/atsam/include/libchip/include/same70/same70q20.h
+ - bsps/arm/atsam/include/libchip/include/same70/same70q21.h
+ - bsps/arm/atsam/include/libchip/include/same70/system_same70.h
+- destination: ${BSP_INCLUDEDIR}/libchip/include/same70/component
+ source:
+ - bsps/arm/atsam/include/libchip/include/same70/component/component_acc.h
+ - bsps/arm/atsam/include/libchip/include/same70/component/component_aes.h
+ - bsps/arm/atsam/include/libchip/include/same70/component/component_afec.h
+ - bsps/arm/atsam/include/libchip/include/same70/component/component_chipid.h
+ - bsps/arm/atsam/include/libchip/include/same70/component/component_dacc.h
+ - bsps/arm/atsam/include/libchip/include/same70/component/component_efc.h
+ - bsps/arm/atsam/include/libchip/include/same70/component/component_gmac.h
+ - bsps/arm/atsam/include/libchip/include/same70/component/component_gpbr.h
+ - bsps/arm/atsam/include/libchip/include/same70/component/component_hsmci.h
+ - bsps/arm/atsam/include/libchip/include/same70/component/component_icm.h
+ - bsps/arm/atsam/include/libchip/include/same70/component/component_isi.h
+ - bsps/arm/atsam/include/libchip/include/same70/component/component_matrix.h
+ - bsps/arm/atsam/include/libchip/include/same70/component/component_mcan.h
+ - bsps/arm/atsam/include/libchip/include/same70/component/component_pio.h
+ - bsps/arm/atsam/include/libchip/include/same70/component/component_pmc.h
+ - bsps/arm/atsam/include/libchip/include/same70/component/component_pwm.h
+ - bsps/arm/atsam/include/libchip/include/same70/component/component_qspi.h
+ - bsps/arm/atsam/include/libchip/include/same70/component/component_rstc.h
+ - bsps/arm/atsam/include/libchip/include/same70/component/component_rswdt.h
+ - bsps/arm/atsam/include/libchip/include/same70/component/component_rtc.h
+ - bsps/arm/atsam/include/libchip/include/same70/component/component_rtt.h
+ - bsps/arm/atsam/include/libchip/include/same70/component/component_sdramc.h
+ - bsps/arm/atsam/include/libchip/include/same70/component/component_smc.h
+ - bsps/arm/atsam/include/libchip/include/same70/component/component_spi.h
+ - bsps/arm/atsam/include/libchip/include/same70/component/component_ssc.h
+ - bsps/arm/atsam/include/libchip/include/same70/component/component_supc.h
+ - bsps/arm/atsam/include/libchip/include/same70/component/component_tc.h
+ - bsps/arm/atsam/include/libchip/include/same70/component/component_trng.h
+ - bsps/arm/atsam/include/libchip/include/same70/component/component_twihs.h
+ - bsps/arm/atsam/include/libchip/include/same70/component/component_uart.h
+ - bsps/arm/atsam/include/libchip/include/same70/component/component_usart.h
+ - bsps/arm/atsam/include/libchip/include/same70/component/component_usbhs.h
+ - bsps/arm/atsam/include/libchip/include/same70/component/component_utmi.h
+ - bsps/arm/atsam/include/libchip/include/same70/component/component_wdt.h
+ - bsps/arm/atsam/include/libchip/include/same70/component/component_xdmac.h
+- destination: ${BSP_INCLUDEDIR}/libchip/include/same70/pio
+ source:
+ - bsps/arm/atsam/include/libchip/include/same70/pio/pio_same70j19.h
+ - bsps/arm/atsam/include/libchip/include/same70/pio/pio_same70j20.h
+ - bsps/arm/atsam/include/libchip/include/same70/pio/pio_same70j21.h
+ - bsps/arm/atsam/include/libchip/include/same70/pio/pio_same70n19.h
+ - bsps/arm/atsam/include/libchip/include/same70/pio/pio_same70n20.h
+ - bsps/arm/atsam/include/libchip/include/same70/pio/pio_same70n21.h
+ - bsps/arm/atsam/include/libchip/include/same70/pio/pio_same70q19.h
+ - bsps/arm/atsam/include/libchip/include/same70/pio/pio_same70q20.h
+ - bsps/arm/atsam/include/libchip/include/same70/pio/pio_same70q21.h
+- destination: ${BSP_INCLUDEDIR}/libchip/include/sams70
+ source:
+ - bsps/arm/atsam/include/libchip/include/sams70/sams70.h
+ - bsps/arm/atsam/include/libchip/include/sams70/sams70j19.h
+ - bsps/arm/atsam/include/libchip/include/sams70/sams70j20.h
+ - bsps/arm/atsam/include/libchip/include/sams70/sams70j21.h
+ - bsps/arm/atsam/include/libchip/include/sams70/sams70n19.h
+ - bsps/arm/atsam/include/libchip/include/sams70/sams70n20.h
+ - bsps/arm/atsam/include/libchip/include/sams70/sams70n21.h
+ - bsps/arm/atsam/include/libchip/include/sams70/sams70q19.h
+ - bsps/arm/atsam/include/libchip/include/sams70/sams70q20.h
+ - bsps/arm/atsam/include/libchip/include/sams70/sams70q21.h
+ - bsps/arm/atsam/include/libchip/include/sams70/system_sams70.h
+- destination: ${BSP_INCLUDEDIR}/libchip/include/sams70/component
+ source:
+ - bsps/arm/atsam/include/libchip/include/sams70/component/component_acc.h
+ - bsps/arm/atsam/include/libchip/include/sams70/component/component_aes.h
+ - bsps/arm/atsam/include/libchip/include/sams70/component/component_afec.h
+ - bsps/arm/atsam/include/libchip/include/sams70/component/component_chipid.h
+ - bsps/arm/atsam/include/libchip/include/sams70/component/component_dacc.h
+ - bsps/arm/atsam/include/libchip/include/sams70/component/component_efc.h
+ - bsps/arm/atsam/include/libchip/include/sams70/component/component_gpbr.h
+ - bsps/arm/atsam/include/libchip/include/sams70/component/component_hsmci.h
+ - bsps/arm/atsam/include/libchip/include/sams70/component/component_icm.h
+ - bsps/arm/atsam/include/libchip/include/sams70/component/component_isi.h
+ - bsps/arm/atsam/include/libchip/include/sams70/component/component_matrix.h
+ - bsps/arm/atsam/include/libchip/include/sams70/component/component_pio.h
+ - bsps/arm/atsam/include/libchip/include/sams70/component/component_pmc.h
+ - bsps/arm/atsam/include/libchip/include/sams70/component/component_pwm.h
+ - bsps/arm/atsam/include/libchip/include/sams70/component/component_qspi.h
+ - bsps/arm/atsam/include/libchip/include/sams70/component/component_rstc.h
+ - bsps/arm/atsam/include/libchip/include/sams70/component/component_rswdt.h
+ - bsps/arm/atsam/include/libchip/include/sams70/component/component_rtc.h
+ - bsps/arm/atsam/include/libchip/include/sams70/component/component_rtt.h
+ - bsps/arm/atsam/include/libchip/include/sams70/component/component_sdramc.h
+ - bsps/arm/atsam/include/libchip/include/sams70/component/component_smc.h
+ - bsps/arm/atsam/include/libchip/include/sams70/component/component_spi.h
+ - bsps/arm/atsam/include/libchip/include/sams70/component/component_ssc.h
+ - bsps/arm/atsam/include/libchip/include/sams70/component/component_supc.h
+ - bsps/arm/atsam/include/libchip/include/sams70/component/component_tc.h
+ - bsps/arm/atsam/include/libchip/include/sams70/component/component_trng.h
+ - bsps/arm/atsam/include/libchip/include/sams70/component/component_twihs.h
+ - bsps/arm/atsam/include/libchip/include/sams70/component/component_uart.h
+ - bsps/arm/atsam/include/libchip/include/sams70/component/component_usart.h
+ - bsps/arm/atsam/include/libchip/include/sams70/component/component_usbhs.h
+ - bsps/arm/atsam/include/libchip/include/sams70/component/component_utmi.h
+ - bsps/arm/atsam/include/libchip/include/sams70/component/component_wdt.h
+ - bsps/arm/atsam/include/libchip/include/sams70/component/component_xdmac.h
+- destination: ${BSP_INCLUDEDIR}/libchip/include/sams70/pio
+ source:
+ - bsps/arm/atsam/include/libchip/include/sams70/pio/pio_sams70j19.h
+ - bsps/arm/atsam/include/libchip/include/sams70/pio/pio_sams70j20.h
+ - bsps/arm/atsam/include/libchip/include/sams70/pio/pio_sams70j21.h
+ - bsps/arm/atsam/include/libchip/include/sams70/pio/pio_sams70n19.h
+ - bsps/arm/atsam/include/libchip/include/sams70/pio/pio_sams70n20.h
+ - bsps/arm/atsam/include/libchip/include/sams70/pio/pio_sams70n21.h
+ - bsps/arm/atsam/include/libchip/include/sams70/pio/pio_sams70q19.h
+ - bsps/arm/atsam/include/libchip/include/sams70/pio/pio_sams70q20.h
+ - bsps/arm/atsam/include/libchip/include/sams70/pio/pio_sams70q21.h
+- destination: ${BSP_INCLUDEDIR}/libchip/include/samv71
+ source:
+ - bsps/arm/atsam/include/libchip/include/samv71/samv71.h
+ - bsps/arm/atsam/include/libchip/include/samv71/samv71j19.h
+ - bsps/arm/atsam/include/libchip/include/samv71/samv71j20.h
+ - bsps/arm/atsam/include/libchip/include/samv71/samv71j21.h
+ - bsps/arm/atsam/include/libchip/include/samv71/samv71n19.h
+ - bsps/arm/atsam/include/libchip/include/samv71/samv71n20.h
+ - bsps/arm/atsam/include/libchip/include/samv71/samv71n21.h
+ - bsps/arm/atsam/include/libchip/include/samv71/samv71q19.h
+ - bsps/arm/atsam/include/libchip/include/samv71/samv71q20.h
+ - bsps/arm/atsam/include/libchip/include/samv71/samv71q21.h
+ - bsps/arm/atsam/include/libchip/include/samv71/system_samv71.h
+- destination: ${BSP_INCLUDEDIR}/libchip/include/samv71/component
+ source:
+ - bsps/arm/atsam/include/libchip/include/samv71/component/component_acc.h
+ - bsps/arm/atsam/include/libchip/include/samv71/component/component_aes.h
+ - bsps/arm/atsam/include/libchip/include/samv71/component/component_afec.h
+ - bsps/arm/atsam/include/libchip/include/samv71/component/component_chipid.h
+ - bsps/arm/atsam/include/libchip/include/samv71/component/component_dacc.h
+ - bsps/arm/atsam/include/libchip/include/samv71/component/component_efc.h
+ - bsps/arm/atsam/include/libchip/include/samv71/component/component_gmac.h
+ - bsps/arm/atsam/include/libchip/include/samv71/component/component_gpbr.h
+ - bsps/arm/atsam/include/libchip/include/samv71/component/component_hsmci.h
+ - bsps/arm/atsam/include/libchip/include/samv71/component/component_icm.h
+ - bsps/arm/atsam/include/libchip/include/samv71/component/component_isi.h
+ - bsps/arm/atsam/include/libchip/include/samv71/component/component_matrix.h
+ - bsps/arm/atsam/include/libchip/include/samv71/component/component_mcan.h
+ - bsps/arm/atsam/include/libchip/include/samv71/component/component_mlb.h
+ - bsps/arm/atsam/include/libchip/include/samv71/component/component_pio.h
+ - bsps/arm/atsam/include/libchip/include/samv71/component/component_pmc.h
+ - bsps/arm/atsam/include/libchip/include/samv71/component/component_pwm.h
+ - bsps/arm/atsam/include/libchip/include/samv71/component/component_qspi.h
+ - bsps/arm/atsam/include/libchip/include/samv71/component/component_rstc.h
+ - bsps/arm/atsam/include/libchip/include/samv71/component/component_rswdt.h
+ - bsps/arm/atsam/include/libchip/include/samv71/component/component_rtc.h
+ - bsps/arm/atsam/include/libchip/include/samv71/component/component_rtt.h
+ - bsps/arm/atsam/include/libchip/include/samv71/component/component_sdramc.h
+ - bsps/arm/atsam/include/libchip/include/samv71/component/component_smc.h
+ - bsps/arm/atsam/include/libchip/include/samv71/component/component_spi.h
+ - bsps/arm/atsam/include/libchip/include/samv71/component/component_ssc.h
+ - bsps/arm/atsam/include/libchip/include/samv71/component/component_supc.h
+ - bsps/arm/atsam/include/libchip/include/samv71/component/component_tc.h
+ - bsps/arm/atsam/include/libchip/include/samv71/component/component_trng.h
+ - bsps/arm/atsam/include/libchip/include/samv71/component/component_twihs.h
+ - bsps/arm/atsam/include/libchip/include/samv71/component/component_uart.h
+ - bsps/arm/atsam/include/libchip/include/samv71/component/component_usart.h
+ - bsps/arm/atsam/include/libchip/include/samv71/component/component_usbhs.h
+ - bsps/arm/atsam/include/libchip/include/samv71/component/component_utmi.h
+ - bsps/arm/atsam/include/libchip/include/samv71/component/component_wdt.h
+ - bsps/arm/atsam/include/libchip/include/samv71/component/component_xdmac.h
+- destination: ${BSP_INCLUDEDIR}/libchip/include/samv71/pio
+ source:
+ - bsps/arm/atsam/include/libchip/include/samv71/pio/pio_samv71j19.h
+ - bsps/arm/atsam/include/libchip/include/samv71/pio/pio_samv71j20.h
+ - bsps/arm/atsam/include/libchip/include/samv71/pio/pio_samv71j21.h
+ - bsps/arm/atsam/include/libchip/include/samv71/pio/pio_samv71n19.h
+ - bsps/arm/atsam/include/libchip/include/samv71/pio/pio_samv71n20.h
+ - bsps/arm/atsam/include/libchip/include/samv71/pio/pio_samv71n21.h
+ - bsps/arm/atsam/include/libchip/include/samv71/pio/pio_samv71q19.h
+ - bsps/arm/atsam/include/libchip/include/samv71/pio/pio_samv71q20.h
+ - bsps/arm/atsam/include/libchip/include/samv71/pio/pio_samv71q21.h
+- destination: ${BSP_LIBDIR}
+ source:
+ - bsps/arm/atsam/start/linkcmds
+ - bsps/arm/atsam/start/linkcmds.intsram
+ - bsps/arm/atsam/start/linkcmds.qspiflash
+ - bsps/arm/atsam/start/linkcmds.sdram
+links:
+- role: build-dependency
+ uid: abi
+- role: build-dependency
+ uid: objnet
+- role: build-dependency
+ uid: optchgclksram
+- role: build-dependency
+ uid: optchip
+- role: build-dependency
+ uid: optconbaud
+- role: build-dependency
+ uid: optconidx
+- role: build-dependency
+ uid: optconirq
+- role: build-dependency
+ uid: optcontype
+- role: build-dependency
+ uid: optmck
+- role: build-dependency
+ uid: optnocachesz
+- role: build-dependency
+ uid: optoscmain
+- role: build-dependency
+ uid: optqspiflashsz
+- role: build-dependency
+ uid: optsdram
+- role: build-dependency
+ uid: opttcmsz
+- role: build-dependency
+ uid: optusextal
+- role: build-dependency
+ uid: tstatsamv
+- role: build-dependency
+ uid: ../grp
+- role: build-dependency
+ uid: ../start
+- role: build-dependency
+ uid: ../../obj
+- role: build-dependency
+ uid: ../../objirq
+- role: build-dependency
+ uid: ../../opto2
+- role: build-dependency
+ uid: linkcmds
+- role: build-dependency
+ uid: ../../bspopts
+source:
+- bsps/arm/atsam/clock/systick-freq.c
+- bsps/arm/atsam/console/console.c
+- bsps/arm/atsam/console/debug-console.c
+- bsps/arm/atsam/contrib/libraries/libboard/resources_v71/system_samv71.c
+- bsps/arm/atsam/contrib/libraries/libboard/source/board_lowlevel.c
+- bsps/arm/atsam/contrib/libraries/libboard/source/board_memories.c
+- bsps/arm/atsam/contrib/libraries/libboard/source/dbg_console.c
+- bsps/arm/atsam/contrib/libraries/libchip/source/acc.c
+- bsps/arm/atsam/contrib/libraries/libchip/source/aes.c
+- bsps/arm/atsam/contrib/libraries/libchip/source/afe_dma.c
+- bsps/arm/atsam/contrib/libraries/libchip/source/afec.c
+- bsps/arm/atsam/contrib/libraries/libchip/source/dac_dma.c
+- bsps/arm/atsam/contrib/libraries/libchip/source/efc.c
+- bsps/arm/atsam/contrib/libraries/libchip/source/exceptions.c
+- bsps/arm/atsam/contrib/libraries/libchip/source/flashd.c
+- bsps/arm/atsam/contrib/libraries/libchip/source/gmac.c
+- bsps/arm/atsam/contrib/libraries/libchip/source/gmacd.c
+- bsps/arm/atsam/contrib/libraries/libchip/source/hsmci.c
+- bsps/arm/atsam/contrib/libraries/libchip/source/icm.c
+- bsps/arm/atsam/contrib/libraries/libchip/source/isi.c
+- bsps/arm/atsam/contrib/libraries/libchip/source/mcan.c
+- bsps/arm/atsam/contrib/libraries/libchip/source/mediaLB.c
+- bsps/arm/atsam/contrib/libraries/libchip/source/mpu.c
+- bsps/arm/atsam/contrib/libraries/libchip/source/pio.c
+- bsps/arm/atsam/contrib/libraries/libchip/source/pio_capture.c
+- bsps/arm/atsam/contrib/libraries/libchip/source/pio_it.c
+- bsps/arm/atsam/contrib/libraries/libchip/source/pmc.c
+- bsps/arm/atsam/contrib/libraries/libchip/source/pwmc.c
+- bsps/arm/atsam/contrib/libraries/libchip/source/qspi.c
+- bsps/arm/atsam/contrib/libraries/libchip/source/qspi_dma.c
+- bsps/arm/atsam/contrib/libraries/libchip/source/rstc.c
+- bsps/arm/atsam/contrib/libraries/libchip/source/rtc.c
+- bsps/arm/atsam/contrib/libraries/libchip/source/rtt.c
+- bsps/arm/atsam/contrib/libraries/libchip/source/sdramc.c
+- bsps/arm/atsam/contrib/libraries/libchip/source/spi.c
+- bsps/arm/atsam/contrib/libraries/libchip/source/spi_dma.c
+- bsps/arm/atsam/contrib/libraries/libchip/source/ssc.c
+- bsps/arm/atsam/contrib/libraries/libchip/source/supc.c
+- bsps/arm/atsam/contrib/libraries/libchip/source/tc.c
+- bsps/arm/atsam/contrib/libraries/libchip/source/trng.c
+- bsps/arm/atsam/contrib/libraries/libchip/source/twi.c
+- bsps/arm/atsam/contrib/libraries/libchip/source/twid.c
+- bsps/arm/atsam/contrib/libraries/libchip/source/uart.c
+- bsps/arm/atsam/contrib/libraries/libchip/source/uart_dma.c
+- bsps/arm/atsam/contrib/libraries/libchip/source/usart.c
+- bsps/arm/atsam/contrib/libraries/libchip/source/usart_dma.c
+- bsps/arm/atsam/contrib/libraries/libchip/source/wdt.c
+- bsps/arm/atsam/contrib/libraries/libchip/source/xdma_hardware_interface.c
+- bsps/arm/atsam/contrib/libraries/libchip/source/xdmad.c
+- bsps/arm/atsam/i2c/atsam_i2c_bus.c
+- bsps/arm/atsam/i2c/atsam_i2c_init.c
+- bsps/arm/atsam/rtc/rtc-config.c
+- bsps/arm/atsam/spi/atsam_spi_bus.c
+- bsps/arm/atsam/spi/atsam_spi_init.c
+- bsps/arm/atsam/spi/sc16is752.c
+- bsps/arm/atsam/start/bspstart.c
+- bsps/arm/atsam/start/bspstarthooks.c
+- bsps/arm/atsam/start/getentropy-trng.c
+- bsps/arm/atsam/start/iocopy.c
+- bsps/arm/atsam/start/pin-config.c
+- bsps/arm/atsam/start/pmc-config.c
+- bsps/arm/atsam/start/power-clock.c
+- bsps/arm/atsam/start/power-rtc.c
+- bsps/arm/atsam/start/power-wait.c
+- bsps/arm/atsam/start/power.c
+- bsps/arm/atsam/start/restart.c
+- bsps/arm/atsam/start/sdram-config.c
+- bsps/arm/shared/cache/cache-v7m.c
+- bsps/arm/shared/clock/clock-armv7m.c
+- bsps/arm/shared/cpucounter/cpucounter-armv7m.c
+- bsps/arm/shared/irq/irq-armv7m.c
+- bsps/arm/shared/irq/irq-dispatch-armv7m.c
+- bsps/arm/shared/start/bsp-start-memcpy.S
+- bsps/arm/shared/start/bspreset-armv7m.c
+- bsps/shared/dev/btimer/btimer-stub.c
+- bsps/shared/dev/rtc/rtc-support.c
+- bsps/shared/dev/serial/console-termios.c
+- bsps/shared/irq/irq-default-handler.c
+- bsps/shared/start/bspfatal-default.c
+- bsps/shared/start/bspgetworkarea-default.c
+- bsps/shared/start/sbrk.c
+- bsps/shared/start/stackalloc.c
+type: build
diff --git a/spec/build/bsps/arm/atsam/linkcmds.yml b/spec/build/bsps/arm/atsam/linkcmds.yml
new file mode 100644
index 0000000000..fe6211f82f
--- /dev/null
+++ b/spec/build/bsps/arm/atsam/linkcmds.yml
@@ -0,0 +1,49 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: config-file
+content: |
+ MEMORY {
+ ITCM : ORIGIN = 0x00000000, LENGTH = ${ATSAM_MEMORY_TCM_SIZE}
+ INTFLASH : ORIGIN = 0x00400000, LENGTH = ${ATSAM_MEMORY_INTFLASH_SIZE}
+ DTCM : ORIGIN = 0x20000000, LENGTH = ${ATSAM_MEMORY_TCM_SIZE}
+ INTSRAM : ORIGIN = 0x20400000, LENGTH = ${ATSAM_MEMORY_INTSRAM_SIZE} - 2 * ${ATSAM_MEMORY_TCM_SIZE} - ${ATSAM_MEMORY_NOCACHE_SIZE}
+ NOCACHE : ORIGIN = 0x20400000 + ${ATSAM_MEMORY_INTSRAM_SIZE} - 2 * ${ATSAM_MEMORY_TCM_SIZE} - ${ATSAM_MEMORY_NOCACHE_SIZE}, LENGTH = ${ATSAM_MEMORY_NOCACHE_SIZE}
+ SDRAM : ORIGIN = 0x70000000, LENGTH = ${ATSAM_MEMORY_SDRAM_SIZE}
+ QSPIFLASH : ORIGIN = 0x80000000, LENGTH = ${ATSAM_MEMORY_QSPIFLASH_SIZE}
+ }
+
+ /* Must be used only for MPU definitions */
+
+ atsam_memory_itcm_begin = ORIGIN (ITCM);
+ atsam_memory_itcm_end = ORIGIN (ITCM) + LENGTH (ITCM);
+ atsam_memory_itcm_size = LENGTH (ITCM);
+
+ atsam_memory_intflash_begin = ORIGIN (INTFLASH);
+ atsam_memory_intflash_end = ORIGIN (INTFLASH) + LENGTH (INTFLASH);
+ atsam_memory_intflash_size = LENGTH (INTFLASH);
+
+ atsam_memory_dtcm_begin = ORIGIN (DTCM);
+ atsam_memory_dtcm_end = ORIGIN (DTCM) + LENGTH (DTCM);
+ atsam_memory_dtcm_size = LENGTH (DTCM);
+
+ atsam_memory_intsram_begin = ORIGIN (INTSRAM);
+ atsam_memory_intsram_end = ORIGIN (INTSRAM) + LENGTH (INTSRAM);
+ atsam_memory_intsram_size = LENGTH (INTSRAM);
+
+ atsam_memory_nocache_begin = ORIGIN (NOCACHE);
+ atsam_memory_nocache_end = ORIGIN (NOCACHE) + LENGTH (NOCACHE);
+ atsam_memory_nocache_size = LENGTH (NOCACHE);
+
+ atsam_memory_sdram_begin = ORIGIN (SDRAM);
+ atsam_memory_sdram_end = ORIGIN (SDRAM) + LENGTH (SDRAM);
+ atsam_memory_sdram_size = LENGTH (SDRAM);
+
+ atsam_memory_qspiflash_begin = ORIGIN (QSPIFLASH);
+ atsam_memory_qspiflash_end = ORIGIN (QSPIFLASH) + LENGTH (QSPIFLASH);
+ atsam_memory_qspiflash_size = LENGTH (QSPIFLASH);
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+enabled-by: true
+install-path: ${BSP_LIBDIR}
+links: []
+target: linkcmds.memory
+type: build
diff --git a/spec/build/bsps/arm/atsam/objnet.yml b/spec/build/bsps/arm/atsam/objnet.yml
new file mode 100644
index 0000000000..7aeceb47d9
--- /dev/null
+++ b/spec/build/bsps/arm/atsam/objnet.yml
@@ -0,0 +1,22 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: objects
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by:
+- RTEMS_NETWORKING
+includes:
+- bsps/arm/atsam/contrib/libraries/libboard
+- bsps/arm/atsam/contrib/libraries/libboard/include
+- bsps/arm/atsam/contrib/libraries/libchip
+- bsps/arm/atsam/contrib/libraries/libchip/include
+- bsps/arm/atsam/include/libchip
+- bsps/arm/atsam/include/libchip/include
+- cpukit/libnetworking
+install: []
+links: []
+source:
+- bsps/arm/atsam/net/if_atsam.c
+type: build
diff --git a/spec/build/bsps/arm/atsam/optchgclksram.yml b/spec/build/bsps/arm/atsam/optchgclksram.yml
new file mode 100644
index 0000000000..58dca377d7
--- /dev/null
+++ b/spec/build/bsps/arm/atsam/optchgclksram.yml
@@ -0,0 +1,15 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+actions:
+- get-boolean: null
+- define-condition: null
+build-type: option
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+default: false
+default-by-variant: []
+description: |
+ Move the functions that set up the clock into the SRAM. This allows to change the clock frequency even if the application is started from SDRAM. Requires a TCM_SIZE > 0.
+enabled-by: true
+links: []
+name: ATSAM_CHANGE_CLOCK_FROM_SRAM
+type: build
diff --git a/spec/build/bsps/arm/atsam/optchip.yml b/spec/build/bsps/arm/atsam/optchip.yml
new file mode 100644
index 0000000000..16998e6c2a
--- /dev/null
+++ b/spec/build/bsps/arm/atsam/optchip.yml
@@ -0,0 +1,54 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+actions:
+- get-string: null
+- script: |
+ c = ("__SAMV71Q21__", 0x00200000, 0x00060000)
+ chips = {
+ "same70j19": ("__SAME70J19__", 0x00080000, 0x00040000),
+ "same70j20": ("__SAME70J20__", 0x00100000, 0x00060000),
+ "same70j21": ("__SAME70J21__", 0x00200000, 0x00060000),
+ "same70n19": ("__SAME70N19__", 0x00080000, 0x00040000),
+ "same70n20": ("__SAME70N20__", 0x00100000, 0x00060000),
+ "same70n21": ("__SAME70N21__", 0x00200000, 0x00060000),
+ "same70q19": ("__SAME70Q19__", 0x00080000, 0x00040000),
+ "same70q20": ("__SAME70Q20__", 0x00100000, 0x00060000),
+ "same70q21": ("__SAME70Q21__", 0x00200000, 0x00060000),
+ "sams70j19": ("__SAMS70J19__", 0x00080000, 0x00040000),
+ "sams70j20": ("__SAMS70J20__", 0x00100000, 0x00060000),
+ "sams70j21": ("__SAMS70J21__", 0x00200000, 0x00060000),
+ "sams70n19": ("__SAMS70N19__", 0x00080000, 0x00040000),
+ "sams70n20": ("__SAMS70N20__", 0x00100000, 0x00060000),
+ "sams70n21": ("__SAMS70N21__", 0x00200000, 0x00060000),
+ "sams70q19": ("__SAMS70Q19__", 0x00080000, 0x00040000),
+ "sams70q20": ("__SAMS70Q20__", 0x00100000, 0x00060000),
+ "sams70q21": ("__SAMS70Q21__", 0x00200000, 0x00060000),
+ "samv71j19": ("__SAMV71J19__", 0x00080000, 0x00040000),
+ "samv71j20": ("__SAMV71J20__", 0x00100000, 0x00060000),
+ "samv71j21": ("__SAMV71J21__", 0x00200000, 0x00060000),
+ "samv71n19": ("__SAMV71N19__", 0x00080000, 0x00040000),
+ "samv71n20": ("__SAMV71N20__", 0x00100000, 0x00060000),
+ "samv71n21": ("__SAMV71N21__", 0x00200000, 0x00060000),
+ "samv71q19": ("__SAMV71Q19__", 0x00080000, 0x00040000),
+ "samv71q20": ("__SAMV71Q20__", 0x00100000, 0x00060000),
+ "samv71q21": c,
+ }
+ if value:
+ try:
+ c = chips[value]
+ except:
+ conf.fatal("Unkown chip variant '{}'".format(value))
+ conf.define_cond(c[0], True)
+ conf.env["ATSAM_MEMORY_INTFLASH_SIZE"] = c[1]
+ conf.env["ATSAM_MEMORY_INTSRAM_SIZE"] = c[2]
+build-type: option
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+default: samv71q21
+default-by-variant: []
+description: |
+ Chip variant
+enabled-by: true
+format: '{}'
+links: []
+name: ATSAM_CHIP
+type: build
diff --git a/spec/build/bsps/arm/atsam/optconbaud.yml b/spec/build/bsps/arm/atsam/optconbaud.yml
new file mode 100644
index 0000000000..b0e34e7505
--- /dev/null
+++ b/spec/build/bsps/arm/atsam/optconbaud.yml
@@ -0,0 +1,16 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+actions:
+- get-integer: null
+- define: null
+build-type: option
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+default: 115200
+default-by-variant: []
+description: |
+ initial baud for console devices (default 115200)
+enabled-by: true
+format: '{}'
+links: []
+name: ATSAM_CONSOLE_BAUD
+type: build
diff --git a/spec/build/bsps/arm/atsam/optconidx.yml b/spec/build/bsps/arm/atsam/optconidx.yml
new file mode 100644
index 0000000000..42fb3b142a
--- /dev/null
+++ b/spec/build/bsps/arm/atsam/optconidx.yml
@@ -0,0 +1,15 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+actions:
+- get-boolean: null
+- define-condition: null
+build-type: option
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+default: true
+default-by-variant: []
+description: |
+ device index for /dev/console (default 1, e.g. USART1)
+enabled-by: true
+links: []
+name: ATSAM_CONSOLE_DEVICE_INDEX
+type: build
diff --git a/spec/build/bsps/arm/atsam/optconirq.yml b/spec/build/bsps/arm/atsam/optconirq.yml
new file mode 100644
index 0000000000..a410e05060
--- /dev/null
+++ b/spec/build/bsps/arm/atsam/optconirq.yml
@@ -0,0 +1,15 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+actions:
+- get-boolean: null
+- define-condition: null
+build-type: option
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+default: true
+default-by-variant: []
+description: |
+ use interrupt driven mode for console devices (used by default)
+enabled-by: true
+links: []
+name: ATSAM_CONSOLE_USE_INTERRUPTS
+type: build
diff --git a/spec/build/bsps/arm/atsam/optcontype.yml b/spec/build/bsps/arm/atsam/optcontype.yml
new file mode 100644
index 0000000000..eddbee1063
--- /dev/null
+++ b/spec/build/bsps/arm/atsam/optcontype.yml
@@ -0,0 +1,15 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+actions:
+- get-boolean: null
+- define-condition: null
+build-type: option
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+default: false
+default-by-variant: []
+description: |
+ device type for /dev/console, use 0 for USART and 1 for UART (default USART)
+enabled-by: true
+links: []
+name: ATSAM_CONSOLE_DEVICE_TYPE
+type: build
diff --git a/spec/build/bsps/arm/atsam/optmck.yml b/spec/build/bsps/arm/atsam/optmck.yml
new file mode 100644
index 0000000000..d216542285
--- /dev/null
+++ b/spec/build/bsps/arm/atsam/optmck.yml
@@ -0,0 +1,16 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+actions:
+- get-integer: null
+- define: null
+build-type: option
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+default: 123000000
+default-by-variant: []
+description: |
+ Frequency of the MCK in Hz. Set to 0 to force application defined speed. See start/pmc-config.c for available clock configurations.
+enabled-by: true
+format: '{}'
+links: []
+name: ATSAM_MCK
+type: build
diff --git a/spec/build/bsps/arm/atsam/optnocachesz.yml b/spec/build/bsps/arm/atsam/optnocachesz.yml
new file mode 100644
index 0000000000..433633d3b0
--- /dev/null
+++ b/spec/build/bsps/arm/atsam/optnocachesz.yml
@@ -0,0 +1,17 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+actions:
+- get-integer: null
+- format-and-define: null
+- env-assign: null
+build-type: option
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+default: 4096
+default-by-variant: []
+description: |
+ size of NOCACHE section in bytes
+enabled-by: true
+format: '{:#010x}'
+links: []
+name: ATSAM_MEMORY_NOCACHE_SIZE
+type: build
diff --git a/spec/build/bsps/arm/atsam/optoscmain.yml b/spec/build/bsps/arm/atsam/optoscmain.yml
new file mode 100644
index 0000000000..4cafffea37
--- /dev/null
+++ b/spec/build/bsps/arm/atsam/optoscmain.yml
@@ -0,0 +1,16 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+actions:
+- get-integer: null
+- define: null
+build-type: option
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+default: 12000000
+default-by-variant: []
+description: |
+ Main oscillator frequency in Hz (default 12MHz)
+enabled-by: true
+format: '{}'
+links: []
+name: BOARD_MAINOSC
+type: build
diff --git a/spec/build/bsps/arm/atsam/optqspiflashsz.yml b/spec/build/bsps/arm/atsam/optqspiflashsz.yml
new file mode 100644
index 0000000000..a9a71b049f
--- /dev/null
+++ b/spec/build/bsps/arm/atsam/optqspiflashsz.yml
@@ -0,0 +1,17 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+actions:
+- get-integer: null
+- format-and-define: null
+- env-assign: null
+build-type: option
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+default: 2097152
+default-by-variant: []
+description: |
+ size of QSPI flash in bytes
+enabled-by: true
+format: '{:#010x}'
+links: []
+name: ATSAM_MEMORY_QSPIFLASH_SIZE
+type: build
diff --git a/spec/build/bsps/arm/atsam/optsdram.yml b/spec/build/bsps/arm/atsam/optsdram.yml
new file mode 100644
index 0000000000..c07edd9ba5
--- /dev/null
+++ b/spec/build/bsps/arm/atsam/optsdram.yml
@@ -0,0 +1,29 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+actions:
+- get-string: null
+- script: |
+ s = ("ATSAM_SDRAM_IS42S16100E_7BLI", 0x00200000)
+ sdram = {
+ "is42s16100e-7bli": s,
+ "is42s16320f-7bl": ("ATSAM_SDRAM_IS42S16320F_7BL", 0x04000000),
+ "mt48lc16m16a2p-6a": ("ATSAM_SDRAM_MT48LC16M16A2P_6A", 0x02000000),
+ }
+ if value:
+ try:
+ s = sdram[value]
+ except:
+ conf.fatal("Unkown SDRAM variant '{}'".format(value))
+ conf.define_cond(s[0], True)
+ conf.env["ATSAM_MEMORY_SDRAM_SIZE"] = s[1]
+build-type: option
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+default: is42s16100e-7bli
+default-by-variant: []
+description: |
+ SDRAM variant
+enabled-by: true
+format: '{}'
+links: []
+name: ATSAM_SDRAM
+type: build
diff --git a/spec/build/bsps/arm/atsam/opttcmsz.yml b/spec/build/bsps/arm/atsam/opttcmsz.yml
new file mode 100644
index 0000000000..7e8b1121e8
--- /dev/null
+++ b/spec/build/bsps/arm/atsam/opttcmsz.yml
@@ -0,0 +1,17 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+actions:
+- get-integer: null
+- format-and-define: null
+- env-assign: null
+build-type: option
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+default: 0
+default-by-variant: []
+description: |
+ size of tightly coupled memories (TCM) in bytes
+enabled-by: true
+format: '{:#010x}'
+links: []
+name: ATSAM_MEMORY_TCM_SIZE
+type: build
diff --git a/spec/build/bsps/arm/atsam/optusextal.yml b/spec/build/bsps/arm/atsam/optusextal.yml
new file mode 100644
index 0000000000..6353956d15
--- /dev/null
+++ b/spec/build/bsps/arm/atsam/optusextal.yml
@@ -0,0 +1,15 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+actions:
+- get-boolean: null
+- define-condition: null
+build-type: option
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+default: true
+default-by-variant: []
+description: |
+ Use the external crystal as source for the slow clock instead of the internal RC oscillator. Note that on the ATSAM the NRST pin seems to depend on the slow clock as well as all watchdogs. If ATSAM_SLOWCLOCK_USE_XTAL is set to 1 without a external crystal connected, the controller might hang in the switching process without a working NRST pin.
+enabled-by: true
+links: []
+name: ATSAM_SLOWCLOCK_USE_XTAL
+type: build
diff --git a/spec/build/bsps/arm/atsam/tstatsamv.yml b/spec/build/bsps/arm/atsam/tstatsamv.yml
new file mode 100644
index 0000000000..41d28657e9
--- /dev/null
+++ b/spec/build/bsps/arm/atsam/tstatsamv.yml
@@ -0,0 +1,35 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+actions:
+- set-test-state:
+ fileio: exclude
+ flashdisk01: exclude
+ fsdosfsname01: exclude
+ ftp01: exclude
+ jffs2fserror: exclude
+ jffs2fslink: exclude
+ jffs2fspatheval: exclude
+ jffs2fspermission: exclude
+ jffs2fsrdwr: exclude
+ jffs2fsscandir01: exclude
+ jffs2fssymlink: exclude
+ jffs2fstime: exclude
+ linpack: exclude
+ mghttpd01: exclude
+ pppd: exclude
+ psxconfig01: exclude
+ record02: exclude
+ sp16: exclude
+ sp25: exclude
+ sp48: exclude
+ spregionerr01: exclude
+ spstkalloc02: exclude
+ tmfine01: exclude
+build-type: option
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+default: null
+default-by-variant: []
+description: ''
+enabled-by: true
+links: []
+type: build
diff --git a/spec/build/bsps/arm/beagle/abi.yml b/spec/build/bsps/arm/beagle/abi.yml
new file mode 100644
index 0000000000..80b94605e7
--- /dev/null
+++ b/spec/build/bsps/arm/beagle/abi.yml
@@ -0,0 +1,17 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+actions:
+- get-string: null
+- split: null
+- env-append: null
+build-type: option
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+default:
+- -mcpu=cortex-a8
+default-by-variant: []
+description: |
+ ABI flags
+enabled-by: true
+links: []
+name: ABI_FLAGS
+type: build
diff --git a/spec/build/bsps/arm/beagle/bspboardorig.yml b/spec/build/bsps/arm/beagle/bspboardorig.yml
new file mode 100644
index 0000000000..92eb7001fd
--- /dev/null
+++ b/spec/build/bsps/arm/beagle/bspboardorig.yml
@@ -0,0 +1,19 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+arch: arm
+bsp: beagleboardorig
+build-type: bsp
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+enabled-by: true
+family: beagle
+includes: []
+install: []
+links:
+- role: build-dependency
+ uid: grp
+- role: build-dependency
+ uid: ../../opto2
+source: []
+type: build
diff --git a/spec/build/bsps/arm/beagle/bspboardxm.yml b/spec/build/bsps/arm/beagle/bspboardxm.yml
new file mode 100644
index 0000000000..b0869cfbce
--- /dev/null
+++ b/spec/build/bsps/arm/beagle/bspboardxm.yml
@@ -0,0 +1,19 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+arch: arm
+bsp: beagleboardxm
+build-type: bsp
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+enabled-by: true
+family: beagle
+includes: []
+install: []
+links:
+- role: build-dependency
+ uid: grp
+- role: build-dependency
+ uid: ../../opto2
+source: []
+type: build
diff --git a/spec/build/bsps/arm/beagle/bspboneblack.yml b/spec/build/bsps/arm/beagle/bspboneblack.yml
new file mode 100644
index 0000000000..7818fdebfa
--- /dev/null
+++ b/spec/build/bsps/arm/beagle/bspboneblack.yml
@@ -0,0 +1,19 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+arch: arm
+bsp: beagleboneblack
+build-type: bsp
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+enabled-by: true
+family: beagle
+includes: []
+install: []
+links:
+- role: build-dependency
+ uid: grp
+- role: build-dependency
+ uid: ../../opto2
+source: []
+type: build
diff --git a/spec/build/bsps/arm/beagle/bspbonewhite.yml b/spec/build/bsps/arm/beagle/bspbonewhite.yml
new file mode 100644
index 0000000000..85ae13cea5
--- /dev/null
+++ b/spec/build/bsps/arm/beagle/bspbonewhite.yml
@@ -0,0 +1,19 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+arch: arm
+bsp: beaglebonewhite
+build-type: bsp
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+enabled-by: true
+family: beagle
+includes: []
+install: []
+links:
+- role: build-dependency
+ uid: grp
+- role: build-dependency
+ uid: ../../opto2
+source: []
+type: build
diff --git a/spec/build/bsps/arm/beagle/grp.yml b/spec/build/bsps/arm/beagle/grp.yml
new file mode 100644
index 0000000000..1375913fd0
--- /dev/null
+++ b/spec/build/bsps/arm/beagle/grp.yml
@@ -0,0 +1,44 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: group
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+enabled-by: true
+includes: []
+install: []
+ldflags: []
+links:
+- role: build-dependency
+ uid: abi
+- role: build-dependency
+ uid: obj
+- role: build-dependency
+ uid: optam335x
+- role: build-dependency
+ uid: optconbaud
+- role: build-dependency
+ uid: optconpoll
+- role: build-dependency
+ uid: optdebug
+- role: build-dependency
+ uid: optdm3730
+- role: build-dependency
+ uid: optfdtcpyro
+- role: build-dependency
+ uid: optfdtmxsz
+- role: build-dependency
+ uid: optfdtro
+- role: build-dependency
+ uid: optfdtuboot
+- role: build-dependency
+ uid: ../grp
+- role: build-dependency
+ uid: ../start
+- role: build-dependency
+ uid: ../../obj
+- role: build-dependency
+ uid: ../../objirq
+- role: build-dependency
+ uid: ../../bspopts
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/bsps/arm/beagle/obj.yml b/spec/build/bsps/arm/beagle/obj.yml
new file mode 100644
index 0000000000..87c0ad873d
--- /dev/null
+++ b/spec/build/bsps/arm/beagle/obj.yml
@@ -0,0 +1,61 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: objects
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by: true
+includes: []
+install:
+- destination: ${BSP_INCLUDEDIR}
+ source:
+ - bsps/arm/beagle/include/bsp.h
+ - bsps/arm/beagle/include/tm27.h
+- destination: ${BSP_INCLUDEDIR}/bsp
+ source:
+ - bsps/arm/beagle/include/bsp/bbb-gpio.h
+ - bsps/arm/beagle/include/bsp/bbb-pwm.h
+ - bsps/arm/beagle/include/bsp/beagleboneblack.h
+ - bsps/arm/beagle/include/bsp/i2c.h
+ - bsps/arm/beagle/include/bsp/irq.h
+ - bsps/arm/beagle/include/bsp/spi.h
+- destination: ${BSP_LIBDIR}
+ source:
+ - bsps/arm/beagle/start/linkcmds
+links: []
+source:
+- bsps/arm/beagle/clock/clock.c
+- bsps/arm/beagle/console/console-config.c
+- bsps/arm/beagle/gpio/bbb-gpio.c
+- bsps/arm/beagle/i2c/bbb-i2c.c
+- bsps/arm/beagle/irq/irq.c
+- bsps/arm/beagle/pwm/pwm.c
+- bsps/arm/beagle/rtc/rtc.c
+- bsps/arm/beagle/spi/spi.c
+- bsps/arm/beagle/start/bspdebug.c
+- bsps/arm/beagle/start/bspreset.c
+- bsps/arm/beagle/start/bspstart.c
+- bsps/arm/beagle/start/bspstarthooks.c
+- bsps/arm/beagle/start/bspstartmmu.c
+- bsps/arm/shared/cache/cache-cp15.c
+- bsps/arm/shared/cache/cache-v7ar-disable-data.S
+- bsps/arm/shared/cp15/arm-cp15-set-exception-handler.c
+- bsps/arm/shared/cp15/arm-cp15-set-ttb-entries.c
+- bsps/arm/shared/start/bsp-start-memcpy.S
+- bsps/shared/dev/btimer/btimer-stub.c
+- bsps/shared/dev/cpucounter/cpucounterfrequency.c
+- bsps/shared/dev/cpucounter/cpucounterread.c
+- bsps/shared/dev/getentropy/getentropy-cpucounter.c
+- bsps/shared/dev/gpio/gpio-support.c
+- bsps/shared/dev/rtc/rtc-support.c
+- bsps/shared/dev/serial/legacy-console-control.c
+- bsps/shared/dev/serial/legacy-console-select.c
+- bsps/shared/dev/serial/legacy-console.c
+- bsps/shared/irq/irq-default-handler.c
+- bsps/shared/start/bsp-fdt.c
+- bsps/shared/start/bspfatal-default.c
+- bsps/shared/start/bspgetworkarea-default.c
+- bsps/shared/start/sbrk.c
+- bsps/shared/start/stackalloc.c
+type: build
diff --git a/spec/build/bsps/arm/beagle/optam335x.yml b/spec/build/bsps/arm/beagle/optam335x.yml
new file mode 100644
index 0000000000..2453aae088
--- /dev/null
+++ b/spec/build/bsps/arm/beagle/optam335x.yml
@@ -0,0 +1,18 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+actions:
+- get-boolean: null
+- define-condition: null
+build-type: option
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+default: false
+default-by-variant:
+- value: true
+ variants:
+ - arm/beaglebone.*
+description: |
+ true if SOC is AM335X
+enabled-by: true
+links: []
+name: IS_AM335X
+type: build
diff --git a/spec/build/bsps/arm/beagle/optconbaud.yml b/spec/build/bsps/arm/beagle/optconbaud.yml
new file mode 100644
index 0000000000..9c3eaff15b
--- /dev/null
+++ b/spec/build/bsps/arm/beagle/optconbaud.yml
@@ -0,0 +1,16 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+actions:
+- get-integer: null
+- define: null
+build-type: option
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+default: 115200
+default-by-variant: []
+description: |
+ initial baud for console UART
+enabled-by: true
+format: '{}'
+links: []
+name: CONSOLE_BAUD
+type: build
diff --git a/spec/build/bsps/arm/beagle/optconpoll.yml b/spec/build/bsps/arm/beagle/optconpoll.yml
new file mode 100644
index 0000000000..1717792bb8
--- /dev/null
+++ b/spec/build/bsps/arm/beagle/optconpoll.yml
@@ -0,0 +1,15 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+actions:
+- get-boolean: null
+- define-condition: null
+build-type: option
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+default: false
+default-by-variant: []
+description: |
+ polled console i/o (e.g. to run testsuite)
+enabled-by: true
+links: []
+name: CONSOLE_POLLED
+type: build
diff --git a/spec/build/bsps/arm/beagle/optdebug.yml b/spec/build/bsps/arm/beagle/optdebug.yml
new file mode 100644
index 0000000000..54f6c55f9a
--- /dev/null
+++ b/spec/build/bsps/arm/beagle/optdebug.yml
@@ -0,0 +1,18 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+actions:
+- get-boolean: null
+- define-condition: null
+build-type: option
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+default: false
+default-by-variant:
+- value: false
+ variants:
+ - arm/beaglebone.*
+description: |
+ Enable BBB debug
+enabled-by: true
+links: []
+name: BBB_DEBUG
+type: build
diff --git a/spec/build/bsps/arm/beagle/optdm3730.yml b/spec/build/bsps/arm/beagle/optdm3730.yml
new file mode 100644
index 0000000000..3dd60260f3
--- /dev/null
+++ b/spec/build/bsps/arm/beagle/optdm3730.yml
@@ -0,0 +1,18 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+actions:
+- get-boolean: null
+- define-condition: null
+build-type: option
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+default: false
+default-by-variant:
+- value: true
+ variants:
+ - arm/beagleboard.*
+description: |
+ true if SOC is DM3730
+enabled-by: true
+links: []
+name: IS_DM3730
+type: build
diff --git a/spec/build/bsps/arm/beagle/optfdtcpyro.yml b/spec/build/bsps/arm/beagle/optfdtcpyro.yml
new file mode 100644
index 0000000000..c26b1ae051
--- /dev/null
+++ b/spec/build/bsps/arm/beagle/optfdtcpyro.yml
@@ -0,0 +1,15 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+actions:
+- get-boolean: null
+- define-condition: null
+build-type: option
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+default: true
+default-by-variant: []
+description: |
+ copy the FDT blob into the read-only load area via bsp_fdt_copy()
+enabled-by: true
+links: []
+name: BSP_FDT_BLOB_COPY_TO_READ_ONLY_LOAD_AREA
+type: build
diff --git a/spec/build/bsps/arm/beagle/optfdtmxsz.yml b/spec/build/bsps/arm/beagle/optfdtmxsz.yml
new file mode 100644
index 0000000000..14af766230
--- /dev/null
+++ b/spec/build/bsps/arm/beagle/optfdtmxsz.yml
@@ -0,0 +1,16 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+actions:
+- get-integer: null
+- define: null
+build-type: option
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+default: 262144
+default-by-variant: []
+description: |
+ maximum size of the FDT blob in bytes
+enabled-by: true
+format: '{}'
+links: []
+name: BSP_FDT_BLOB_SIZE_MAX
+type: build
diff --git a/spec/build/bsps/arm/beagle/optfdtro.yml b/spec/build/bsps/arm/beagle/optfdtro.yml
new file mode 100644
index 0000000000..a61bb2924b
--- /dev/null
+++ b/spec/build/bsps/arm/beagle/optfdtro.yml
@@ -0,0 +1,15 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+actions:
+- get-boolean: null
+- define-condition: null
+build-type: option
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+default: true
+default-by-variant: []
+description: |
+ place the FDT blob into the read-only data area
+enabled-by: true
+links: []
+name: BSP_FDT_BLOB_READ_ONLY
+type: build
diff --git a/spec/build/bsps/arm/beagle/optfdtuboot.yml b/spec/build/bsps/arm/beagle/optfdtuboot.yml
new file mode 100644
index 0000000000..5805e912ff
--- /dev/null
+++ b/spec/build/bsps/arm/beagle/optfdtuboot.yml
@@ -0,0 +1,15 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+actions:
+- get-boolean: null
+- define-condition: null
+build-type: option
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+default: true
+default-by-variant: []
+description: |
+ copy the U-Boot provided FDT to an internal storage
+enabled-by: true
+links: []
+name: BSP_START_COPY_FDT_FROM_U_BOOT
+type: build
diff --git a/spec/build/bsps/arm/csb336/abi.yml b/spec/build/bsps/arm/csb336/abi.yml
new file mode 100644
index 0000000000..ccf0bc7ea2
--- /dev/null
+++ b/spec/build/bsps/arm/csb336/abi.yml
@@ -0,0 +1,17 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+actions:
+- get-string: null
+- split: null
+- env-append: null
+build-type: option
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+default:
+- -mcpu=arm920
+default-by-variant: []
+description: |
+ ABI flags
+enabled-by: true
+links: []
+name: ABI_FLAGS
+type: build
diff --git a/spec/build/bsps/arm/csb336/bspcsb336.yml b/spec/build/bsps/arm/csb336/bspcsb336.yml
new file mode 100644
index 0000000000..2842b0d5ac
--- /dev/null
+++ b/spec/build/bsps/arm/csb336/bspcsb336.yml
@@ -0,0 +1,59 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+arch: arm
+bsp: csb336
+build-type: bsp
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+enabled-by: true
+family: csb336
+includes: []
+install:
+- destination: ${BSP_INCLUDEDIR}
+ source:
+ - bsps/arm/csb336/include/bsp.h
+ - bsps/arm/csb336/include/mc9328mxl.h
+ - bsps/arm/csb336/include/tm27.h
+- destination: ${BSP_INCLUDEDIR}/bsp
+ source:
+ - bsps/arm/csb336/include/bsp/irq.h
+- destination: ${BSP_LIBDIR}
+ source:
+ - bsps/arm/csb336/start/linkcmds
+ - bsps/arm/csb336/start/linkcmds
+links:
+- role: build-dependency
+ uid: abi
+- role: build-dependency
+ uid: objnet
+- role: build-dependency
+ uid: start
+- role: build-dependency
+ uid: ../grp
+- role: build-dependency
+ uid: ../../obj
+- role: build-dependency
+ uid: ../../objirq
+- role: build-dependency
+ uid: ../../opto2
+- role: build-dependency
+ uid: ../../bspopts
+source:
+- bsps/arm/csb336/btimer/btimer.c
+- bsps/arm/csb336/clock/clockdrv.c
+- bsps/arm/csb336/console/uart.c
+- bsps/arm/csb336/irq/irq.c
+- bsps/arm/csb336/start/bspstart.c
+- bsps/arm/csb336/start/memmap.c
+- bsps/arm/shared/cache/cache-cp15.c
+- bsps/arm/shared/cp15/arm920-mmu.c
+- bsps/shared/dev/cpucounter/cpucounterfrequency.c
+- bsps/shared/dev/cpucounter/cpucounterread.c
+- bsps/shared/dev/getentropy/getentropy-cpucounter.c
+- bsps/shared/irq/irq-default-handler.c
+- bsps/shared/start/bspfatal-default.c
+- bsps/shared/start/bspgetworkarea-default.c
+- bsps/shared/start/bspreset-empty.c
+- bsps/shared/start/sbrk.c
+type: build
diff --git a/spec/build/bsps/arm/csb336/objnet.yml b/spec/build/bsps/arm/csb336/objnet.yml
new file mode 100644
index 0000000000..2888ae50e2
--- /dev/null
+++ b/spec/build/bsps/arm/csb336/objnet.yml
@@ -0,0 +1,17 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: objects
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by:
+- RTEMS_NETWORKING
+includes:
+- cpukit/libnetworking
+install: []
+links: []
+source:
+- bsps/arm/csb336/net/lan91c11x.c
+- bsps/arm/csb336/net/network.c
+type: build
diff --git a/spec/build/bsps/arm/csb336/start.yml b/spec/build/bsps/arm/csb336/start.yml
new file mode 100644
index 0000000000..7791d5b557
--- /dev/null
+++ b/spec/build/bsps/arm/csb336/start.yml
@@ -0,0 +1,14 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+asflags: []
+build-type: start-file
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+enabled-by: true
+includes: []
+install-path: ${BSP_LIBDIR}
+links: []
+source:
+- bsps/arm/csb336/start/start.S
+target: start.o
+type: build
diff --git a/spec/build/bsps/arm/csb337/abi.yml b/spec/build/bsps/arm/csb337/abi.yml
new file mode 100644
index 0000000000..ccf0bc7ea2
--- /dev/null
+++ b/spec/build/bsps/arm/csb337/abi.yml
@@ -0,0 +1,17 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+actions:
+- get-string: null
+- split: null
+- env-append: null
+build-type: option
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+default:
+- -mcpu=arm920
+default-by-variant: []
+description: |
+ ABI flags
+enabled-by: true
+links: []
+name: ABI_FLAGS
+type: build
diff --git a/spec/build/bsps/arm/csb337/bspcsb337.yml b/spec/build/bsps/arm/csb337/bspcsb337.yml
new file mode 100644
index 0000000000..5665a29ef2
--- /dev/null
+++ b/spec/build/bsps/arm/csb337/bspcsb337.yml
@@ -0,0 +1,19 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+arch: arm
+bsp: csb337
+build-type: bsp
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+enabled-by: true
+family: csb337
+includes: []
+install: []
+links:
+- role: build-dependency
+ uid: grp
+- role: build-dependency
+ uid: ../../opto2
+source: []
+type: build
diff --git a/spec/build/bsps/arm/csb337/bspcsb637.yml b/spec/build/bsps/arm/csb337/bspcsb637.yml
new file mode 100644
index 0000000000..dd8a4e1659
--- /dev/null
+++ b/spec/build/bsps/arm/csb337/bspcsb637.yml
@@ -0,0 +1,19 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+arch: arm
+bsp: csb637
+build-type: bsp
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+enabled-by: true
+family: csb337
+includes: []
+install: []
+links:
+- role: build-dependency
+ uid: grp
+- role: build-dependency
+ uid: ../../opto2
+source: []
+type: build
diff --git a/spec/build/bsps/arm/csb337/bspkit637v6.yml b/spec/build/bsps/arm/csb337/bspkit637v6.yml
new file mode 100644
index 0000000000..375c264880
--- /dev/null
+++ b/spec/build/bsps/arm/csb337/bspkit637v6.yml
@@ -0,0 +1,19 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+arch: arm
+bsp: kit637_v6
+build-type: bsp
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+enabled-by: true
+family: csb337
+includes: []
+install: []
+links:
+- role: build-dependency
+ uid: grp
+- role: build-dependency
+ uid: ../../opto2
+source: []
+type: build
diff --git a/spec/build/bsps/arm/csb337/grp.yml b/spec/build/bsps/arm/csb337/grp.yml
new file mode 100644
index 0000000000..ac5fc9279f
--- /dev/null
+++ b/spec/build/bsps/arm/csb337/grp.yml
@@ -0,0 +1,52 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: group
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+enabled-by: true
+includes: []
+install: []
+ldflags: []
+links:
+- role: build-dependency
+ uid: abi
+- role: build-dependency
+ uid: obj
+- role: build-dependency
+ uid: objlcd
+- role: build-dependency
+ uid: objnet
+- role: build-dependency
+ uid: objumon
+- role: build-dependency
+ uid: objumoncon
+- role: build-dependency
+ uid: optcsb637
+- role: build-dependency
+ uid: optenlcd
+- role: build-dependency
+ uid: optenumon
+- role: build-dependency
+ uid: optenumoncon
+- role: build-dependency
+ uid: optenusart0
+- role: build-dependency
+ uid: optenusart1
+- role: build-dependency
+ uid: optenusart2
+- role: build-dependency
+ uid: optenusart3
+- role: build-dependency
+ uid: start
+- role: build-dependency
+ uid: ../grp
+- role: build-dependency
+ uid: ../../linkcmds
+- role: build-dependency
+ uid: ../../obj
+- role: build-dependency
+ uid: ../../objirq
+- role: build-dependency
+ uid: ../../bspopts
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/bsps/arm/csb337/obj.yml b/spec/build/bsps/arm/csb337/obj.yml
new file mode 100644
index 0000000000..c541cfc207
--- /dev/null
+++ b/spec/build/bsps/arm/csb337/obj.yml
@@ -0,0 +1,57 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: objects
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by: true
+includes: []
+install:
+- destination: ${BSP_INCLUDEDIR}
+ source:
+ - bsps/arm/csb337/include/at91rm9200.h
+ - bsps/arm/csb337/include/at91rm9200_dbgu.h
+ - bsps/arm/csb337/include/at91rm9200_emac.h
+ - bsps/arm/csb337/include/at91rm9200_gpio.h
+ - bsps/arm/csb337/include/at91rm9200_mem.h
+ - bsps/arm/csb337/include/at91rm9200_pmc.h
+ - bsps/arm/csb337/include/at91rm9200_usart.h
+ - bsps/arm/csb337/include/bits.h
+ - bsps/arm/csb337/include/bsp.h
+ - bsps/arm/csb337/include/font8x16.h
+ - bsps/arm/csb337/include/sed1356.h
+ - bsps/arm/csb337/include/sed1356_16bit.h
+ - bsps/arm/csb337/include/tm27.h
+- destination: ${BSP_INCLUDEDIR}/bsp
+ source:
+ - bsps/arm/csb337/include/bsp/irq.h
+- destination: ${BSP_LIBDIR}
+ source:
+ - bsps/arm/csb337/start/linkcmds.csb337
+ - bsps/arm/csb337/start/linkcmds.csb637
+links: []
+source:
+- bsps/arm/csb337/btimer/btimer.c
+- bsps/arm/csb337/clock/clock.c
+- bsps/arm/csb337/console/dbgu.c
+- bsps/arm/csb337/console/uarts.c
+- bsps/arm/csb337/console/usart.c
+- bsps/arm/csb337/irq/irq.c
+- bsps/arm/csb337/start/bspreset.c
+- bsps/arm/csb337/start/bspstart.c
+- bsps/arm/csb337/start/memmap.c
+- bsps/arm/csb337/start/pmc.c
+- bsps/arm/shared/cache/cache-cp15.c
+- bsps/arm/shared/cp15/arm920-mmu.c
+- bsps/shared/dev/cpucounter/cpucounterfrequency.c
+- bsps/shared/dev/cpucounter/cpucounterread.c
+- bsps/shared/dev/getentropy/getentropy-cpucounter.c
+- bsps/shared/dev/serial/legacy-console-control.c
+- bsps/shared/dev/serial/legacy-console-select.c
+- bsps/shared/dev/serial/legacy-console.c
+- bsps/shared/irq/irq-default-handler.c
+- bsps/shared/start/bspfatal-default.c
+- bsps/shared/start/bspgetworkarea-default.c
+- bsps/shared/start/sbrk.c
+type: build
diff --git a/spec/build/bsps/arm/csb337/objlcd.yml b/spec/build/bsps/arm/csb337/objlcd.yml
new file mode 100644
index 0000000000..6db16816cd
--- /dev/null
+++ b/spec/build/bsps/arm/csb337/objlcd.yml
@@ -0,0 +1,16 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: objects
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by:
+- ENABLE_LCD
+includes: []
+install: []
+links: []
+source:
+- bsps/arm/csb337/console/fbcons.c
+- bsps/arm/csb337/console/sed1356.c
+type: build
diff --git a/spec/build/bsps/arm/csb337/objnet.yml b/spec/build/bsps/arm/csb337/objnet.yml
new file mode 100644
index 0000000000..60849d530d
--- /dev/null
+++ b/spec/build/bsps/arm/csb337/objnet.yml
@@ -0,0 +1,16 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: objects
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by:
+- RTEMS_NETWORKING
+includes:
+- cpukit/libnetworking
+install: []
+links: []
+source:
+- bsps/arm/csb337/net/network.c
+type: build
diff --git a/spec/build/bsps/arm/csb337/objumon.yml b/spec/build/bsps/arm/csb337/objumon.yml
new file mode 100644
index 0000000000..e7d8c38a96
--- /dev/null
+++ b/spec/build/bsps/arm/csb337/objumon.yml
@@ -0,0 +1,26 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: objects
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by:
+- ENABLE_UMON
+includes: []
+install:
+- destination: ${BSP_INCLUDEDIR}/rtems
+ source:
+ - bsps/include/rtems/umon.h
+- destination: ${BSP_INCLUDEDIR}/umon
+ source:
+ - bsps/include/umon/cli.h
+ - bsps/include/umon/monlib.h
+ - bsps/include/umon/tfs.h
+links: []
+source:
+- bsps/arm/csb337/start/umonsupp.c
+- bsps/arm/csb337/umon/monlib.c
+- bsps/arm/csb337/umon/tfsDriver.c
+- bsps/arm/csb337/umon/umonrtemsglue.c
+type: build
diff --git a/spec/build/bsps/arm/csb337/objumoncon.yml b/spec/build/bsps/arm/csb337/objumoncon.yml
new file mode 100644
index 0000000000..93e42a8058
--- /dev/null
+++ b/spec/build/bsps/arm/csb337/objumoncon.yml
@@ -0,0 +1,15 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: objects
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by:
+- ENABLE_UMON_CONSOLE
+includes: []
+install: []
+links: []
+source:
+- bsps/arm/csb337/umon/umoncons.c
+type: build
diff --git a/spec/build/bsps/arm/csb337/optcsb637.yml b/spec/build/bsps/arm/csb337/optcsb637.yml
new file mode 100644
index 0000000000..5db48e1f0a
--- /dev/null
+++ b/spec/build/bsps/arm/csb337/optcsb637.yml
@@ -0,0 +1,21 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+actions:
+- get-boolean: null
+- define-condition: null
+build-type: option
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+default: false
+default-by-variant:
+- value: true
+ variants:
+ - arm/kit637_v6
+- value: true
+ variants:
+ - arm/csb637
+description: |
+ If defined, this indicates that the BSP is being built for the csb637 variant.
+enabled-by: true
+links: []
+name: csb637
+type: build
diff --git a/spec/build/bsps/arm/csb337/optenlcd.yml b/spec/build/bsps/arm/csb337/optenlcd.yml
new file mode 100644
index 0000000000..40617f7c2f
--- /dev/null
+++ b/spec/build/bsps/arm/csb337/optenlcd.yml
@@ -0,0 +1,19 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+actions:
+- get-boolean: null
+- define-condition: null
+- env-enable: null
+build-type: option
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+default: false
+default-by-variant:
+- value: false
+ variants:
+ - arm/kit637_v6
+description: |
+ If defined, enable use of the SED1356 controller and LCD.
+enabled-by: true
+links: []
+name: ENABLE_LCD
+type: build
diff --git a/spec/build/bsps/arm/csb337/optenumon.yml b/spec/build/bsps/arm/csb337/optenumon.yml
new file mode 100644
index 0000000000..8286e0fa4b
--- /dev/null
+++ b/spec/build/bsps/arm/csb337/optenumon.yml
@@ -0,0 +1,16 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+actions:
+- get-boolean: null
+- define-condition: null
+- env-enable: null
+build-type: option
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+default: true
+default-by-variant: []
+description: |
+ If defined, enable use of the uMon console.
+enabled-by: true
+links: []
+name: ENABLE_UMON
+type: build
diff --git a/spec/build/bsps/arm/csb337/optenumoncon.yml b/spec/build/bsps/arm/csb337/optenumoncon.yml
new file mode 100644
index 0000000000..e2ca577184
--- /dev/null
+++ b/spec/build/bsps/arm/csb337/optenumoncon.yml
@@ -0,0 +1,16 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+actions:
+- get-boolean: null
+- define-condition: null
+- env-enable: null
+build-type: option
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+default: true
+default-by-variant: []
+description: |
+ If defined, enable use of the MicroMonitor console device.
+enabled-by: true
+links: []
+name: ENABLE_UMON_CONSOLE
+type: build
diff --git a/spec/build/bsps/arm/csb337/optenusart0.yml b/spec/build/bsps/arm/csb337/optenusart0.yml
new file mode 100644
index 0000000000..cd968f8dbc
--- /dev/null
+++ b/spec/build/bsps/arm/csb337/optenusart0.yml
@@ -0,0 +1,15 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+actions:
+- get-boolean: null
+- define-condition: null
+build-type: option
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+default: true
+default-by-variant: []
+description: |
+ If defined, enable use of the USART 0.
+enabled-by: true
+links: []
+name: ENABLE_USART0
+type: build
diff --git a/spec/build/bsps/arm/csb337/optenusart1.yml b/spec/build/bsps/arm/csb337/optenusart1.yml
new file mode 100644
index 0000000000..963d2a9742
--- /dev/null
+++ b/spec/build/bsps/arm/csb337/optenusart1.yml
@@ -0,0 +1,15 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+actions:
+- get-boolean: null
+- define-condition: null
+build-type: option
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+default: true
+default-by-variant: []
+description: |
+ If defined, enable use of the USART 1.
+enabled-by: true
+links: []
+name: ENABLE_USART1
+type: build
diff --git a/spec/build/bsps/arm/csb337/optenusart2.yml b/spec/build/bsps/arm/csb337/optenusart2.yml
new file mode 100644
index 0000000000..d4ae1fe756
--- /dev/null
+++ b/spec/build/bsps/arm/csb337/optenusart2.yml
@@ -0,0 +1,15 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+actions:
+- get-boolean: null
+- define-condition: null
+build-type: option
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+default: true
+default-by-variant: []
+description: |
+ If defined, enable use of the USART 2.
+enabled-by: true
+links: []
+name: ENABLE_USART2
+type: build
diff --git a/spec/build/bsps/arm/csb337/optenusart3.yml b/spec/build/bsps/arm/csb337/optenusart3.yml
new file mode 100644
index 0000000000..200824f3e3
--- /dev/null
+++ b/spec/build/bsps/arm/csb337/optenusart3.yml
@@ -0,0 +1,15 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+actions:
+- get-boolean: null
+- define-condition: null
+build-type: option
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+default: true
+default-by-variant: []
+description: |
+ If defined, enable use of the USART 3.
+enabled-by: true
+links: []
+name: ENABLE_USART3
+type: build
diff --git a/spec/build/bsps/arm/csb337/start.yml b/spec/build/bsps/arm/csb337/start.yml
new file mode 100644
index 0000000000..7dd6661d98
--- /dev/null
+++ b/spec/build/bsps/arm/csb337/start.yml
@@ -0,0 +1,14 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+asflags: []
+build-type: start-file
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+enabled-by: true
+includes: []
+install-path: ${BSP_LIBDIR}
+links: []
+source:
+- bsps/arm/csb337/start/start.S
+target: start.o
+type: build
diff --git a/spec/build/bsps/arm/edb7312/abi.yml b/spec/build/bsps/arm/edb7312/abi.yml
new file mode 100644
index 0000000000..ab6ef203fa
--- /dev/null
+++ b/spec/build/bsps/arm/edb7312/abi.yml
@@ -0,0 +1,17 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+actions:
+- get-string: null
+- split: null
+- env-append: null
+build-type: option
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+default:
+- -mcpu=arm7tdmi
+default-by-variant: []
+description: |
+ ABI flags
+enabled-by: true
+links: []
+name: ABI_FLAGS
+type: build
diff --git a/spec/build/bsps/arm/edb7312/bspedb7312.yml b/spec/build/bsps/arm/edb7312/bspedb7312.yml
new file mode 100644
index 0000000000..aa73f7a51b
--- /dev/null
+++ b/spec/build/bsps/arm/edb7312/bspedb7312.yml
@@ -0,0 +1,62 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+arch: arm
+bsp: edb7312
+build-type: bsp
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+enabled-by: true
+family: edb7312
+includes: []
+install:
+- destination: ${BSP_INCLUDEDIR}
+ source:
+ - bsps/arm/edb7312/include/bsp.h
+ - bsps/arm/edb7312/include/ep7312.h
+ - bsps/arm/edb7312/include/tm27.h
+- destination: ${BSP_INCLUDEDIR}/bsp
+ source:
+ - bsps/arm/edb7312/include/bsp/irq.h
+- destination: ${BSP_LIBDIR}
+ source:
+ - bsps/arm/edb7312/start/linkcmds
+links:
+- role: build-dependency
+ uid: abi
+- role: build-dependency
+ uid: objnet
+- role: build-dependency
+ uid: optskyeye
+- role: build-dependency
+ uid: start
+- role: build-dependency
+ uid: ../grp
+- role: build-dependency
+ uid: ../../obj
+- role: build-dependency
+ uid: ../../objirq
+- role: build-dependency
+ uid: ../../opto2
+- role: build-dependency
+ uid: ../../bspopts
+source:
+- bsps/arm/edb7312/btimer/btimer.c
+- bsps/arm/edb7312/clock/clockdrv.c
+- bsps/arm/edb7312/console/uart.c
+- bsps/arm/edb7312/irq/bsp_irq_asm.S
+- bsps/arm/edb7312/irq/irq.c
+- bsps/arm/edb7312/start/bspreset.c
+- bsps/arm/edb7312/start/bspstart.c
+- bsps/shared/cache/nocache.c
+- bsps/shared/dev/cpucounter/cpucounterfrequency.c
+- bsps/shared/dev/cpucounter/cpucounterread.c
+- bsps/shared/dev/getentropy/getentropy-cpucounter.c
+- bsps/shared/dev/serial/legacy-console-control.c
+- bsps/shared/dev/serial/legacy-console-select.c
+- bsps/shared/dev/serial/legacy-console.c
+- bsps/shared/irq/irq-default-handler.c
+- bsps/shared/start/bspfatal-default.c
+- bsps/shared/start/bspgetworkarea-default.c
+- bsps/shared/start/sbrk.c
+type: build
diff --git a/spec/build/bsps/arm/edb7312/objnet.yml b/spec/build/bsps/arm/edb7312/objnet.yml
new file mode 100644
index 0000000000..7c7d6080cf
--- /dev/null
+++ b/spec/build/bsps/arm/edb7312/objnet.yml
@@ -0,0 +1,16 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: objects
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by:
+- RTEMS_NETWORKING
+includes:
+- cpukit/libnetworking
+install: []
+links: []
+source:
+- bsps/arm/edb7312/net/network.c
+type: build
diff --git a/spec/build/bsps/arm/edb7312/optskyeye.yml b/spec/build/bsps/arm/edb7312/optskyeye.yml
new file mode 100644
index 0000000000..be55a98c3a
--- /dev/null
+++ b/spec/build/bsps/arm/edb7312/optskyeye.yml
@@ -0,0 +1,15 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+actions:
+- get-boolean: null
+- define-condition: null
+build-type: option
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+default: false
+default-by-variant: []
+description: |
+ If defined, enable options which optimize executingon the Skyeye simulator. Speed up the clock ticks while the idle task is running so time spent in the idle task is minimized. This significantly reduces the wall time required to execute the RTEMS test suites.
+enabled-by: true
+links: []
+name: ON_SKYEYE
+type: build
diff --git a/spec/build/bsps/arm/edb7312/start.yml b/spec/build/bsps/arm/edb7312/start.yml
new file mode 100644
index 0000000000..b1270224f1
--- /dev/null
+++ b/spec/build/bsps/arm/edb7312/start.yml
@@ -0,0 +1,14 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+asflags: []
+build-type: start-file
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+enabled-by: true
+includes: []
+install-path: ${BSP_LIBDIR}
+links: []
+source:
+- bsps/arm/edb7312/start/start.S
+target: start.o
+type: build
diff --git a/spec/build/bsps/arm/grp.yml b/spec/build/bsps/arm/grp.yml
new file mode 100644
index 0000000000..2bf0b82423
--- /dev/null
+++ b/spec/build/bsps/arm/grp.yml
@@ -0,0 +1,62 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: group
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+enabled-by: true
+includes: []
+install:
+- destination: ${BSP_INCLUDEDIR}
+ source:
+ - bsps/arm/include/cmsis_gcc.h
+ - bsps/arm/include/core_cm7.h
+ - bsps/arm/include/core_cmFunc.h
+ - bsps/arm/include/core_cmInstr.h
+ - bsps/arm/include/core_cmSimd.h
+ - bsps/arm/include/uart.h
+- destination: ${BSP_INCLUDEDIR}/bsp
+ source:
+ - bsps/arm/include/bsp/arm-a8core-start.h
+ - bsps/arm/include/bsp/arm-a9mpcore-clock.h
+ - bsps/arm/include/bsp/arm-a9mpcore-irq.h
+ - bsps/arm/include/bsp/arm-a9mpcore-regs.h
+ - bsps/arm/include/bsp/arm-a9mpcore-start.h
+ - bsps/arm/include/bsp/arm-cp15-start.h
+ - bsps/arm/include/bsp/arm-errata.h
+ - bsps/arm/include/bsp/arm-gic-irq.h
+ - bsps/arm/include/bsp/arm-gic-regs.h
+ - bsps/arm/include/bsp/arm-gic-tm27.h
+ - bsps/arm/include/bsp/arm-gic.h
+ - bsps/arm/include/bsp/arm-pl011-regs.h
+ - bsps/arm/include/bsp/arm-pl011.h
+ - bsps/arm/include/bsp/arm-pl050-regs.h
+ - bsps/arm/include/bsp/arm-pl050.h
+ - bsps/arm/include/bsp/arm-pl111-fb.h
+ - bsps/arm/include/bsp/arm-pl111-regs.h
+ - bsps/arm/include/bsp/arm-release-id.h
+ - bsps/arm/include/bsp/armv7m-irq.h
+ - bsps/arm/include/bsp/clock-armv7m.h
+ - bsps/arm/include/bsp/linker-symbols.h
+ - bsps/arm/include/bsp/lpc-dma.h
+ - bsps/arm/include/bsp/lpc-emc.h
+ - bsps/arm/include/bsp/lpc-i2s.h
+ - bsps/arm/include/bsp/lpc-lcd.h
+ - bsps/arm/include/bsp/lpc-timer.h
+ - bsps/arm/include/bsp/start.h
+ - bsps/arm/include/bsp/zynq-uart-regs.h
+ - bsps/arm/include/bsp/zynq-uart.h
+- destination: ${BSP_INCLUDEDIR}/libcpu
+ source:
+ - bsps/arm/include/libcpu/am335x.h
+ - bsps/arm/include/libcpu/mmu.h
+ - bsps/arm/include/libcpu/omap3.h
+ - bsps/arm/include/libcpu/omap_timer.h
+- destination: ${BSP_LIBDIR}
+ source:
+ - bsps/arm/shared/start/linkcmds.armv4
+ - bsps/arm/shared/start/linkcmds.armv7m
+ - bsps/arm/shared/start/linkcmds.base
+ldflags: []
+links: []
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/bsps/arm/gumstix/abi.yml b/spec/build/bsps/arm/gumstix/abi.yml
new file mode 100644
index 0000000000..41a3903894
--- /dev/null
+++ b/spec/build/bsps/arm/gumstix/abi.yml
@@ -0,0 +1,17 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+actions:
+- get-string: null
+- split: null
+- env-append: null
+build-type: option
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+default:
+- -mcpu=xscale
+default-by-variant: []
+description: |
+ ABI flags
+enabled-by: true
+links: []
+name: ABI_FLAGS
+type: build
diff --git a/spec/build/bsps/arm/gumstix/bspgumstix.yml b/spec/build/bsps/arm/gumstix/bspgumstix.yml
new file mode 100644
index 0000000000..49b809561f
--- /dev/null
+++ b/spec/build/bsps/arm/gumstix/bspgumstix.yml
@@ -0,0 +1,66 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+arch: arm
+bsp: gumstix
+build-type: bsp
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+enabled-by: true
+family: gumstix
+includes: []
+install:
+- destination: ${BSP_INCLUDEDIR}
+ source:
+ - bsps/arm/gumstix/include/bsp.h
+ - bsps/arm/gumstix/include/ffuart.h
+ - bsps/arm/gumstix/include/pxa255.h
+ - bsps/arm/gumstix/include/tm27.h
+- destination: ${BSP_INCLUDEDIR}/bsp
+ source:
+ - bsps/arm/gumstix/include/bsp/irq.h
+- destination: ${BSP_LIBDIR}
+ source:
+ - bsps/arm/gumstix/start/linkcmds
+links:
+- role: build-dependency
+ uid: ../grp
+- role: build-dependency
+ uid: abi
+- role: build-dependency
+ uid: objnet
+- role: build-dependency
+ uid: optskyeye
+- role: build-dependency
+ uid: start
+- role: build-dependency
+ uid: ../../obj
+- role: build-dependency
+ uid: ../../objirq
+- role: build-dependency
+ uid: ../../opto2
+- role: build-dependency
+ uid: ../../bspopts
+source:
+- bsps/arm/gumstix/btimer/btimer.c
+- bsps/arm/gumstix/clock/clock.c
+- bsps/arm/gumstix/console/ffuart.c
+- bsps/arm/gumstix/console/uarts.c
+- bsps/arm/gumstix/fb/fb.c
+- bsps/arm/gumstix/irq/irq.c
+- bsps/arm/gumstix/start/bspreset.c
+- bsps/arm/gumstix/start/bspstart.c
+- bsps/arm/gumstix/start/memmap.c
+- bsps/arm/shared/cp15/arm920-mmu.c
+- bsps/shared/cache/nocache.c
+- bsps/shared/dev/cpucounter/cpucounterfrequency.c
+- bsps/shared/dev/cpucounter/cpucounterread.c
+- bsps/shared/dev/getentropy/getentropy-cpucounter.c
+- bsps/shared/dev/serial/legacy-console-control.c
+- bsps/shared/dev/serial/legacy-console-select.c
+- bsps/shared/dev/serial/legacy-console.c
+- bsps/shared/irq/irq-default-handler.c
+- bsps/shared/start/bspfatal-default.c
+- bsps/shared/start/bspgetworkarea-default.c
+- bsps/shared/start/sbrk.c
+type: build
diff --git a/spec/build/bsps/arm/gumstix/objnet.yml b/spec/build/bsps/arm/gumstix/objnet.yml
new file mode 100644
index 0000000000..01ca5bea2d
--- /dev/null
+++ b/spec/build/bsps/arm/gumstix/objnet.yml
@@ -0,0 +1,16 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: objects
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by:
+- RTEMS_NETWORKING
+includes:
+- cpukit/libnetworking
+install: []
+links: []
+source:
+- bsps/arm/gumstix/net/rtl8019.c
+type: build
diff --git a/spec/build/bsps/arm/gumstix/optskyeye.yml b/spec/build/bsps/arm/gumstix/optskyeye.yml
new file mode 100644
index 0000000000..be55a98c3a
--- /dev/null
+++ b/spec/build/bsps/arm/gumstix/optskyeye.yml
@@ -0,0 +1,15 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+actions:
+- get-boolean: null
+- define-condition: null
+build-type: option
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+default: false
+default-by-variant: []
+description: |
+ If defined, enable options which optimize executingon the Skyeye simulator. Speed up the clock ticks while the idle task is running so time spent in the idle task is minimized. This significantly reduces the wall time required to execute the RTEMS test suites.
+enabled-by: true
+links: []
+name: ON_SKYEYE
+type: build
diff --git a/spec/build/bsps/arm/gumstix/start.yml b/spec/build/bsps/arm/gumstix/start.yml
new file mode 100644
index 0000000000..e663028666
--- /dev/null
+++ b/spec/build/bsps/arm/gumstix/start.yml
@@ -0,0 +1,14 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+asflags: []
+build-type: start-file
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+enabled-by: true
+includes: []
+install-path: ${BSP_LIBDIR}
+links: []
+source:
+- bsps/arm/gumstix/start/start.S
+target: start.o
+type: build
diff --git a/spec/build/bsps/arm/imx/abi.yml b/spec/build/bsps/arm/imx/abi.yml
new file mode 100644
index 0000000000..169a5e6584
--- /dev/null
+++ b/spec/build/bsps/arm/imx/abi.yml
@@ -0,0 +1,21 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+actions:
+- get-string: null
+- split: null
+- env-append: null
+build-type: option
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+default:
+- -march=armv7-a
+- -mthumb
+- -mfpu=neon
+- -mfloat-abi=hard
+- -mtune=cortex-a7
+default-by-variant: []
+description: |
+ ABI flags
+enabled-by: true
+links: []
+name: ABI_FLAGS
+type: build
diff --git a/spec/build/bsps/arm/imx/bspimx.yml b/spec/build/bsps/arm/imx/bspimx.yml
new file mode 100644
index 0000000000..0d32669a4a
--- /dev/null
+++ b/spec/build/bsps/arm/imx/bspimx.yml
@@ -0,0 +1,104 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+arch: arm
+bsp: imx7
+build-type: bsp
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+enabled-by: true
+family: imx
+includes: []
+install:
+- destination: ${BSP_INCLUDEDIR}
+ source:
+ - bsps/arm/imx/include/bsp.h
+ - bsps/arm/imx/include/tm27.h
+- destination: ${BSP_INCLUDEDIR}/arm/freescale/imx
+ source:
+ - bsps/arm/imx/include/arm/freescale/imx/imx_ccmvar.h
+ - bsps/arm/imx/include/arm/freescale/imx/imx_ecspireg.h
+ - bsps/arm/imx/include/arm/freescale/imx/imx_gpcreg.h
+ - bsps/arm/imx/include/arm/freescale/imx/imx_i2creg.h
+ - bsps/arm/imx/include/arm/freescale/imx/imx_iomuxreg.h
+ - bsps/arm/imx/include/arm/freescale/imx/imx_iomuxvar.h
+ - bsps/arm/imx/include/arm/freescale/imx/imx_srcreg.h
+ - bsps/arm/imx/include/arm/freescale/imx/imx_uartreg.h
+ - bsps/arm/imx/include/arm/freescale/imx/imx_wdogreg.h
+- destination: ${BSP_INCLUDEDIR}/bsp
+ source:
+ - bsps/arm/imx/include/bsp/imx-gpio.h
+ - bsps/arm/imx/include/bsp/irq.h
+- destination: ${BSP_LIBDIR}
+ source:
+ - bsps/arm/imx/start/linkcmds
+ - bsps/arm/imx/start/linkcmds
+links:
+- role: build-dependency
+ uid: ../grp
+- role: build-dependency
+ uid: abi
+- role: build-dependency
+ uid: objsmp
+- role: build-dependency
+ uid: optcachedata
+- role: build-dependency
+ uid: optcacheinst
+- role: build-dependency
+ uid: optccmahb
+- role: build-dependency
+ uid: optcmmecspi
+- role: build-dependency
+ uid: optcmmipg
+- role: build-dependency
+ uid: optcmmsdhci
+- role: build-dependency
+ uid: optcmmuart
+- role: build-dependency
+ uid: optconirq
+- role: build-dependency
+ uid: optfdtcpyro
+- role: build-dependency
+ uid: optfdtmxsz
+- role: build-dependency
+ uid: optfdtro
+- role: build-dependency
+ uid: optfdtuboot
+- role: build-dependency
+ uid: optresetvec
+- role: build-dependency
+ uid: ../start
+- role: build-dependency
+ uid: ../../obj
+- role: build-dependency
+ uid: ../../objirq
+- role: build-dependency
+ uid: ../../opto2
+- role: build-dependency
+ uid: ../../bspopts
+source:
+- bsps/arm/imx/console/console-config.c
+- bsps/arm/imx/gpio/imx-gpio.c
+- bsps/arm/imx/i2c/imx-i2c.c
+- bsps/arm/imx/spi/imx-ecspi.c
+- bsps/arm/imx/start/bspreset.c
+- bsps/arm/imx/start/bspstart.c
+- bsps/arm/imx/start/bspstarthooks.c
+- bsps/arm/imx/start/ccm.c
+- bsps/arm/imx/start/imx_iomux.c
+- bsps/arm/shared/cache/cache-cp15.c
+- bsps/arm/shared/cache/cache-v7ar-disable-data.S
+- bsps/arm/shared/clock/clock-generic-timer.c
+- bsps/arm/shared/cp15/arm-cp15-set-exception-handler.c
+- bsps/arm/shared/cp15/arm-cp15-set-ttb-entries.c
+- bsps/arm/shared/irq/irq-gic.c
+- bsps/arm/shared/start/bsp-start-memcpy.S
+- bsps/shared/dev/btimer/btimer-stub.c
+- bsps/shared/dev/getentropy/getentropy-cpucounter.c
+- bsps/shared/dev/serial/console-termios.c
+- bsps/shared/irq/irq-default-handler.c
+- bsps/shared/start/bsp-fdt.c
+- bsps/shared/start/bspfatal-default.c
+- bsps/shared/start/sbrk.c
+- bsps/shared/start/stackalloc.c
+type: build
diff --git a/spec/build/bsps/arm/imx/objsmp.yml b/spec/build/bsps/arm/imx/objsmp.yml
new file mode 100644
index 0000000000..80dd811ddc
--- /dev/null
+++ b/spec/build/bsps/arm/imx/objsmp.yml
@@ -0,0 +1,16 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: objects
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by:
+- RTEMS_SMP
+includes: []
+install: []
+links: []
+source:
+- bsps/arm/imx/start/bspsmp.c
+- bsps/arm/shared/start/arm-a9mpcore-smp.c
+type: build
diff --git a/spec/build/bsps/arm/imx/optcachedata.yml b/spec/build/bsps/arm/imx/optcachedata.yml
new file mode 100644
index 0000000000..1664b0fc31
--- /dev/null
+++ b/spec/build/bsps/arm/imx/optcachedata.yml
@@ -0,0 +1,18 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+actions:
+- get-boolean: null
+- define-condition: null
+build-type: option
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+default: true
+default-by-variant:
+- value: false
+ variants:
+ - arm/.*qemu
+description: |
+ enable data cache
+enabled-by: true
+links: []
+name: BSP_DATA_CACHE_ENABLED
+type: build
diff --git a/spec/build/bsps/arm/imx/optcacheinst.yml b/spec/build/bsps/arm/imx/optcacheinst.yml
new file mode 100644
index 0000000000..b191133af9
--- /dev/null
+++ b/spec/build/bsps/arm/imx/optcacheinst.yml
@@ -0,0 +1,18 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+actions:
+- get-boolean: null
+- define-condition: null
+build-type: option
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+default: true
+default-by-variant:
+- value: false
+ variants:
+ - arm/.*qemu
+description: |
+ enable instruction cache
+enabled-by: true
+links: []
+name: BSP_INSTRUCTION_CACHE_ENABLED
+type: build
diff --git a/spec/build/bsps/arm/imx/optccmahb.yml b/spec/build/bsps/arm/imx/optccmahb.yml
new file mode 100644
index 0000000000..a515a44204
--- /dev/null
+++ b/spec/build/bsps/arm/imx/optccmahb.yml
@@ -0,0 +1,16 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+actions:
+- get-integer: null
+- define: null
+build-type: option
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+default: 135000000
+default-by-variant: []
+description: |
+ AHB clock frequency in Hz
+enabled-by: true
+format: '{}'
+links: []
+name: IMX_CCM_AHB_HZ
+type: build
diff --git a/spec/build/bsps/arm/imx/optcmmecspi.yml b/spec/build/bsps/arm/imx/optcmmecspi.yml
new file mode 100644
index 0000000000..1f32305aef
--- /dev/null
+++ b/spec/build/bsps/arm/imx/optcmmecspi.yml
@@ -0,0 +1,16 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+actions:
+- get-integer: null
+- define: null
+build-type: option
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+default: 67500000
+default-by-variant: []
+description: |
+ ECSPI clock frequency in Hz
+enabled-by: true
+format: '{}'
+links: []
+name: IMX_CCM_ECSPI_HZ
+type: build
diff --git a/spec/build/bsps/arm/imx/optcmmipg.yml b/spec/build/bsps/arm/imx/optcmmipg.yml
new file mode 100644
index 0000000000..8c62921ef6
--- /dev/null
+++ b/spec/build/bsps/arm/imx/optcmmipg.yml
@@ -0,0 +1,16 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+actions:
+- get-integer: null
+- define: null
+build-type: option
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+default: 67500000
+default-by-variant: []
+description: |
+ IPG clock frequency in Hz
+enabled-by: true
+format: '{}'
+links: []
+name: IMX_CCM_IPG_HZ
+type: build
diff --git a/spec/build/bsps/arm/imx/optcmmsdhci.yml b/spec/build/bsps/arm/imx/optcmmsdhci.yml
new file mode 100644
index 0000000000..fa06f8111a
--- /dev/null
+++ b/spec/build/bsps/arm/imx/optcmmsdhci.yml
@@ -0,0 +1,16 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+actions:
+- get-integer: null
+- define: null
+build-type: option
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+default: 196363000
+default-by-variant: []
+description: |
+ SDHCI clock frequency in Hz
+enabled-by: true
+format: '{}'
+links: []
+name: IMX_CCM_SDHCI_HZ
+type: build
diff --git a/spec/build/bsps/arm/imx/optcmmuart.yml b/spec/build/bsps/arm/imx/optcmmuart.yml
new file mode 100644
index 0000000000..ab69c87323
--- /dev/null
+++ b/spec/build/bsps/arm/imx/optcmmuart.yml
@@ -0,0 +1,16 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+actions:
+- get-integer: null
+- define: null
+build-type: option
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+default: 24000000
+default-by-variant: []
+description: |
+ UART clock frequency in Hz
+enabled-by: true
+format: '{}'
+links: []
+name: IMX_CCM_UART_HZ
+type: build
diff --git a/spec/build/bsps/arm/imx/optconirq.yml b/spec/build/bsps/arm/imx/optconirq.yml
new file mode 100644
index 0000000000..d94a5d20d9
--- /dev/null
+++ b/spec/build/bsps/arm/imx/optconirq.yml
@@ -0,0 +1,16 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+actions:
+- get-integer: null
+- define: null
+build-type: option
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+default: 1
+default-by-variant: []
+description: |
+ use interrupt driven mode for console devices (used by default)
+enabled-by: true
+format: '{}'
+links: []
+name: CONSOLE_USE_INTERRUPTS
+type: build
diff --git a/spec/build/bsps/arm/imx/optfdtcpyro.yml b/spec/build/bsps/arm/imx/optfdtcpyro.yml
new file mode 100644
index 0000000000..c26b1ae051
--- /dev/null
+++ b/spec/build/bsps/arm/imx/optfdtcpyro.yml
@@ -0,0 +1,15 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+actions:
+- get-boolean: null
+- define-condition: null
+build-type: option
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+default: true
+default-by-variant: []
+description: |
+ copy the FDT blob into the read-only load area via bsp_fdt_copy()
+enabled-by: true
+links: []
+name: BSP_FDT_BLOB_COPY_TO_READ_ONLY_LOAD_AREA
+type: build
diff --git a/spec/build/bsps/arm/imx/optfdtmxsz.yml b/spec/build/bsps/arm/imx/optfdtmxsz.yml
new file mode 100644
index 0000000000..14af766230
--- /dev/null
+++ b/spec/build/bsps/arm/imx/optfdtmxsz.yml
@@ -0,0 +1,16 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+actions:
+- get-integer: null
+- define: null
+build-type: option
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+default: 262144
+default-by-variant: []
+description: |
+ maximum size of the FDT blob in bytes
+enabled-by: true
+format: '{}'
+links: []
+name: BSP_FDT_BLOB_SIZE_MAX
+type: build
diff --git a/spec/build/bsps/arm/imx/optfdtro.yml b/spec/build/bsps/arm/imx/optfdtro.yml
new file mode 100644
index 0000000000..a61bb2924b
--- /dev/null
+++ b/spec/build/bsps/arm/imx/optfdtro.yml
@@ -0,0 +1,15 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+actions:
+- get-boolean: null
+- define-condition: null
+build-type: option
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+default: true
+default-by-variant: []
+description: |
+ place the FDT blob into the read-only data area
+enabled-by: true
+links: []
+name: BSP_FDT_BLOB_READ_ONLY
+type: build
diff --git a/spec/build/bsps/arm/imx/optfdtuboot.yml b/spec/build/bsps/arm/imx/optfdtuboot.yml
new file mode 100644
index 0000000000..5805e912ff
--- /dev/null
+++ b/spec/build/bsps/arm/imx/optfdtuboot.yml
@@ -0,0 +1,15 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+actions:
+- get-boolean: null
+- define-condition: null
+build-type: option
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+default: true
+default-by-variant: []
+description: |
+ copy the U-Boot provided FDT to an internal storage
+enabled-by: true
+links: []
+name: BSP_START_COPY_FDT_FROM_U_BOOT
+type: build
diff --git a/spec/build/bsps/arm/imx/optresetvec.yml b/spec/build/bsps/arm/imx/optresetvec.yml
new file mode 100644
index 0000000000..efd1ea2b2a
--- /dev/null
+++ b/spec/build/bsps/arm/imx/optresetvec.yml
@@ -0,0 +1,15 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+actions:
+- get-boolean: null
+- define-condition: null
+build-type: option
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+default: false
+default-by-variant: []
+description: |
+ reset vector address for BSP start
+enabled-by: true
+links: []
+name: BSP_START_RESET_VECTOR
+type: build
diff --git a/spec/build/bsps/arm/lm3s69xx/abi.yml b/spec/build/bsps/arm/lm3s69xx/abi.yml
new file mode 100644
index 0000000000..77d5db8cf7
--- /dev/null
+++ b/spec/build/bsps/arm/lm3s69xx/abi.yml
@@ -0,0 +1,18 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+actions:
+- get-string: null
+- split: null
+- env-append: null
+build-type: option
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+default:
+- -mthumb
+- -mcpu=cortex-m3
+default-by-variant: []
+description: |
+ ABI flags
+enabled-by: true
+links: []
+name: ABI_FLAGS
+type: build
diff --git a/spec/build/bsps/arm/lm3s69xx/bsplm3s3749.yml b/spec/build/bsps/arm/lm3s69xx/bsplm3s3749.yml
new file mode 100644
index 0000000000..f9006ac2cd
--- /dev/null
+++ b/spec/build/bsps/arm/lm3s69xx/bsplm3s3749.yml
@@ -0,0 +1,21 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+arch: arm
+bsp: lm3s3749
+build-type: bsp
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+enabled-by: true
+family: lm3s69xx
+includes: []
+install: []
+links:
+- role: build-dependency
+ uid: grp
+- role: build-dependency
+ uid: tstlm3s3749
+- role: build-dependency
+ uid: ../../opto2
+source: []
+type: build
diff --git a/spec/build/bsps/arm/lm3s69xx/bsplm3s6965.yml b/spec/build/bsps/arm/lm3s69xx/bsplm3s6965.yml
new file mode 100644
index 0000000000..aa7627d33f
--- /dev/null
+++ b/spec/build/bsps/arm/lm3s69xx/bsplm3s6965.yml
@@ -0,0 +1,21 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+arch: arm
+bsp: lm3s6965
+build-type: bsp
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+enabled-by: true
+family: lm3s69xx
+includes: []
+install: []
+links:
+- role: build-dependency
+ uid: grp
+- role: build-dependency
+ uid: tstlm3s6965
+- role: build-dependency
+ uid: ../../opto2
+source: []
+type: build
diff --git a/spec/build/bsps/arm/lm3s69xx/bsplm4f120.yml b/spec/build/bsps/arm/lm3s69xx/bsplm4f120.yml
new file mode 100644
index 0000000000..cbfe6707d5
--- /dev/null
+++ b/spec/build/bsps/arm/lm3s69xx/bsplm4f120.yml
@@ -0,0 +1,21 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+arch: arm
+bsp: lm4f120
+build-type: bsp
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+enabled-by: true
+family: lm3s69xx
+includes: []
+install: []
+links:
+- role: build-dependency
+ uid: grp
+- role: build-dependency
+ uid: tstlm4f120
+- role: build-dependency
+ uid: ../../opto2
+source: []
+type: build
diff --git a/spec/build/bsps/arm/lm3s69xx/bspqemu.yml b/spec/build/bsps/arm/lm3s69xx/bspqemu.yml
new file mode 100644
index 0000000000..ca15af5b37
--- /dev/null
+++ b/spec/build/bsps/arm/lm3s69xx/bspqemu.yml
@@ -0,0 +1,19 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+arch: arm
+bsp: lm3s6965_qemu
+build-type: bsp
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+enabled-by: true
+family: lm3s69xx
+includes: []
+install: []
+links:
+- role: build-dependency
+ uid: grp
+- role: build-dependency
+ uid: ../../opto2
+source: []
+type: build
diff --git a/spec/build/bsps/arm/lm3s69xx/grp.yml b/spec/build/bsps/arm/lm3s69xx/grp.yml
new file mode 100644
index 0000000000..2ab26fe919
--- /dev/null
+++ b/spec/build/bsps/arm/lm3s69xx/grp.yml
@@ -0,0 +1,56 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: group
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+enabled-by: true
+includes: []
+install: []
+ldflags: []
+links:
+- role: build-dependency
+ uid: ../grp
+- role: build-dependency
+ uid: abi
+- role: build-dependency
+ uid: obj
+- role: build-dependency
+ uid: optenuart0
+- role: build-dependency
+ uid: optenuart1
+- role: build-dependency
+ uid: optenuart2
+- role: build-dependency
+ uid: optgpioahb
+- role: build-dependency
+ uid: optgpionum
+- role: build-dependency
+ uid: optlm3s3749
+- role: build-dependency
+ uid: optlm3s6965
+- role: build-dependency
+ uid: optlm4f120
+- role: build-dependency
+ uid: optssiblks
+- role: build-dependency
+ uid: optssiclk
+- role: build-dependency
+ uid: optsysclk
+- role: build-dependency
+ uid: optuartbaud
+- role: build-dependency
+ uid: optudma
+- role: build-dependency
+ uid: optxtalcfg
+- role: build-dependency
+ uid: ../start
+- role: build-dependency
+ uid: ../../linkcmds
+- role: build-dependency
+ uid: ../../obj
+- role: build-dependency
+ uid: ../../objirq
+- role: build-dependency
+ uid: ../../bspopts
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/bsps/arm/lm3s69xx/obj.yml b/spec/build/bsps/arm/lm3s69xx/obj.yml
new file mode 100644
index 0000000000..5e01ce7a61
--- /dev/null
+++ b/spec/build/bsps/arm/lm3s69xx/obj.yml
@@ -0,0 +1,55 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: objects
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by: true
+includes: []
+install:
+- destination: ${BSP_INCLUDEDIR}
+ source:
+ - bsps/arm/lm3s69xx/include/bsp.h
+ - bsps/arm/lm3s69xx/include/tm27.h
+- destination: ${BSP_INCLUDEDIR}/bsp
+ source:
+ - bsps/arm/lm3s69xx/include/bsp/io.h
+ - bsps/arm/lm3s69xx/include/bsp/irq.h
+ - bsps/arm/lm3s69xx/include/bsp/lm3s69xx.h
+ - bsps/arm/lm3s69xx/include/bsp/ssi.h
+ - bsps/arm/lm3s69xx/include/bsp/syscon.h
+ - bsps/arm/lm3s69xx/include/bsp/uart.h
+- destination: ${BSP_LIBDIR}
+ source:
+ - bsps/arm/lm3s69xx/start/linkcmds.lm3s3749
+ - bsps/arm/lm3s69xx/start/linkcmds.lm3s6965
+ - bsps/arm/lm3s69xx/start/linkcmds.lm3s6965_qemu
+links: []
+source:
+- bsps/arm/lm3s69xx/console/console-config.c
+- bsps/arm/lm3s69xx/console/uart.c
+- bsps/arm/lm3s69xx/i2c/ssi.c
+- bsps/arm/lm3s69xx/start/bspstart.c
+- bsps/arm/lm3s69xx/start/bspstarthook.c
+- bsps/arm/lm3s69xx/start/io.c
+- bsps/arm/lm3s69xx/start/syscon.c
+- bsps/arm/shared/clock/clock-armv7m.c
+- bsps/arm/shared/irq/irq-armv7m.c
+- bsps/arm/shared/irq/irq-dispatch-armv7m.c
+- bsps/arm/shared/start/bsp-start-memcpy.S
+- bsps/arm/shared/start/bspreset-armv7m.c
+- bsps/shared/cache/nocache.c
+- bsps/shared/dev/btimer/btimer-stub.c
+- bsps/shared/dev/cpucounter/cpucounterfrequency.c
+- bsps/shared/dev/cpucounter/cpucounterread.c
+- bsps/shared/dev/getentropy/getentropy-cpucounter.c
+- bsps/shared/dev/serial/legacy-console-control.c
+- bsps/shared/dev/serial/legacy-console-select.c
+- bsps/shared/dev/serial/legacy-console.c
+- bsps/shared/irq/irq-default-handler.c
+- bsps/shared/start/bspfatal-default.c
+- bsps/shared/start/bspgetworkarea-default.c
+- bsps/shared/start/sbrk.c
+- bsps/shared/start/stackalloc.c
+type: build
diff --git a/spec/build/bsps/arm/lm3s69xx/optenuart0.yml b/spec/build/bsps/arm/lm3s69xx/optenuart0.yml
new file mode 100644
index 0000000000..fa3254dbf5
--- /dev/null
+++ b/spec/build/bsps/arm/lm3s69xx/optenuart0.yml
@@ -0,0 +1,15 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+actions:
+- get-boolean: null
+- define-condition: null
+build-type: option
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+default: true
+default-by-variant: []
+description: |
+ enable UART 0
+enabled-by: true
+links: []
+name: LM3S69XX_ENABLE_UART_0
+type: build
diff --git a/spec/build/bsps/arm/lm3s69xx/optenuart1.yml b/spec/build/bsps/arm/lm3s69xx/optenuart1.yml
new file mode 100644
index 0000000000..42c6133cf5
--- /dev/null
+++ b/spec/build/bsps/arm/lm3s69xx/optenuart1.yml
@@ -0,0 +1,15 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+actions:
+- get-boolean: null
+- define-condition: null
+build-type: option
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+default: false
+default-by-variant: []
+description: |
+ enable UART 1
+enabled-by: true
+links: []
+name: LM3S69XX_ENABLE_UART_1
+type: build
diff --git a/spec/build/bsps/arm/lm3s69xx/optenuart2.yml b/spec/build/bsps/arm/lm3s69xx/optenuart2.yml
new file mode 100644
index 0000000000..0de60cb7a7
--- /dev/null
+++ b/spec/build/bsps/arm/lm3s69xx/optenuart2.yml
@@ -0,0 +1,15 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+actions:
+- get-boolean: null
+- define-condition: null
+build-type: option
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+default: false
+default-by-variant: []
+description: |
+ enable UART 2
+enabled-by: true
+links: []
+name: LM3S69XX_ENABLE_UART_2
+type: build
diff --git a/spec/build/bsps/arm/lm3s69xx/optgpioahb.yml b/spec/build/bsps/arm/lm3s69xx/optgpioahb.yml
new file mode 100644
index 0000000000..5266ec8549
--- /dev/null
+++ b/spec/build/bsps/arm/lm3s69xx/optgpioahb.yml
@@ -0,0 +1,21 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+actions:
+- get-boolean: null
+- define-condition: null
+build-type: option
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+default: false
+default-by-variant:
+- value: true
+ variants:
+ - arm/lm3s3749.*
+- value: true
+ variants:
+ - arm/lm4f.*
+description: |
+ use AHB apperture to access GPIO registers
+enabled-by: true
+links: []
+name: LM3S69XX_USE_AHB_FOR_GPIO
+type: build
diff --git a/spec/build/bsps/arm/lm3s69xx/optgpionum.yml b/spec/build/bsps/arm/lm3s69xx/optgpionum.yml
new file mode 100644
index 0000000000..05911d140c
--- /dev/null
+++ b/spec/build/bsps/arm/lm3s69xx/optgpionum.yml
@@ -0,0 +1,25 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+actions:
+- get-integer: null
+- define: null
+build-type: option
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+default: 0
+default-by-variant:
+- value: 8
+ variants:
+ - arm/lm3s3749.*
+- value: 7
+ variants:
+ - arm/lm3s6965.*
+- value: 6
+ variants:
+ - arm/lm4f120.*
+description: |
+ number of GPIO blocks supported by MCU
+enabled-by: true
+format: '{}'
+links: []
+name: LM3S69XX_NUM_GPIO_BLOCKS
+type: build
diff --git a/spec/build/bsps/arm/lm3s69xx/optlm3s3749.yml b/spec/build/bsps/arm/lm3s69xx/optlm3s3749.yml
new file mode 100644
index 0000000000..22199d8d59
--- /dev/null
+++ b/spec/build/bsps/arm/lm3s69xx/optlm3s3749.yml
@@ -0,0 +1,18 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+actions:
+- get-boolean: null
+- define-condition: null
+build-type: option
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+default: false
+default-by-variant:
+- value: true
+ variants:
+ - arm/lm3s3749.*
+description: |
+ board has LM3S3749 MCU
+enabled-by: true
+links: []
+name: LM3S69XX_MCU_LM3S3749
+type: build
diff --git a/spec/build/bsps/arm/lm3s69xx/optlm3s6965.yml b/spec/build/bsps/arm/lm3s69xx/optlm3s6965.yml
new file mode 100644
index 0000000000..be01195f1d
--- /dev/null
+++ b/spec/build/bsps/arm/lm3s69xx/optlm3s6965.yml
@@ -0,0 +1,18 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+actions:
+- get-boolean: null
+- define-condition: null
+build-type: option
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+default: false
+default-by-variant:
+- value: true
+ variants:
+ - arm/lm3s6965.*
+description: |
+ board has LM3S6965 MCU
+enabled-by: true
+links: []
+name: LM3S69XX_MCU_LM3S6965
+type: build
diff --git a/spec/build/bsps/arm/lm3s69xx/optlm4f120.yml b/spec/build/bsps/arm/lm3s69xx/optlm4f120.yml
new file mode 100644
index 0000000000..b3c59921b6
--- /dev/null
+++ b/spec/build/bsps/arm/lm3s69xx/optlm4f120.yml
@@ -0,0 +1,18 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+actions:
+- get-boolean: null
+- define-condition: null
+build-type: option
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+default: false
+default-by-variant:
+- value: true
+ variants:
+ - arm/lm4f120.*
+description: |
+ board has LM4F120xxx MCU
+enabled-by: true
+links: []
+name: LM3S69XX_MCU_LM4F120
+type: build
diff --git a/spec/build/bsps/arm/lm3s69xx/optssiblks.yml b/spec/build/bsps/arm/lm3s69xx/optssiblks.yml
new file mode 100644
index 0000000000..551a27cbf2
--- /dev/null
+++ b/spec/build/bsps/arm/lm3s69xx/optssiblks.yml
@@ -0,0 +1,25 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+actions:
+- get-integer: null
+- define: null
+build-type: option
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+default: 0
+default-by-variant:
+- value: 2
+ variants:
+ - arm/lm3s3749.*
+- value: 1
+ variants:
+ - arm/lm3s6965.*
+- value: 4
+ variants:
+ - arm/lm4f120.*
+description: |
+ number of SSI blocks supported by MCU
+enabled-by: true
+format: '{}'
+links: []
+name: LM3S69XX_NUM_SSI_BLOCKS
+type: build
diff --git a/spec/build/bsps/arm/lm3s69xx/optssiclk.yml b/spec/build/bsps/arm/lm3s69xx/optssiclk.yml
new file mode 100644
index 0000000000..b278880160
--- /dev/null
+++ b/spec/build/bsps/arm/lm3s69xx/optssiclk.yml
@@ -0,0 +1,16 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+actions:
+- get-integer: null
+- define: null
+build-type: option
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+default: 1000000
+default-by-variant: []
+description: |
+ SSI clock in Hz
+enabled-by: true
+format: '{}'
+links: []
+name: LM3S69XX_SSI_CLOCK
+type: build
diff --git a/spec/build/bsps/arm/lm3s69xx/optsysclk.yml b/spec/build/bsps/arm/lm3s69xx/optsysclk.yml
new file mode 100644
index 0000000000..ffdd8d78c3
--- /dev/null
+++ b/spec/build/bsps/arm/lm3s69xx/optsysclk.yml
@@ -0,0 +1,22 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+actions:
+- get-integer: null
+- define: null
+build-type: option
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+default: 0
+default-by-variant:
+- value: 50000000
+ variants:
+ - arm/lm3s.*
+- value: 80000000
+ variants:
+ - arm/lm4f.*
+description: |
+ system clock in Hz
+enabled-by: true
+format: '{}'
+links: []
+name: LM3S69XX_SYSTEM_CLOCK
+type: build
diff --git a/spec/build/bsps/arm/lm3s69xx/optuartbaud.yml b/spec/build/bsps/arm/lm3s69xx/optuartbaud.yml
new file mode 100644
index 0000000000..9b1deff47c
--- /dev/null
+++ b/spec/build/bsps/arm/lm3s69xx/optuartbaud.yml
@@ -0,0 +1,16 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+actions:
+- get-integer: null
+- define: null
+build-type: option
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+default: 115200
+default-by-variant: []
+description: |
+ baud for UARTs
+enabled-by: true
+format: '{}'
+links: []
+name: LM3S69XX_UART_BAUD
+type: build
diff --git a/spec/build/bsps/arm/lm3s69xx/optudma.yml b/spec/build/bsps/arm/lm3s69xx/optudma.yml
new file mode 100644
index 0000000000..88aae5094c
--- /dev/null
+++ b/spec/build/bsps/arm/lm3s69xx/optudma.yml
@@ -0,0 +1,21 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+actions:
+- get-boolean: null
+- define-condition: null
+build-type: option
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+default: false
+default-by-variant:
+- value: true
+ variants:
+ - arm/lm3s3749.*
+- value: true
+ variants:
+ - arm/lm4f.*
+description: |
+ defined if MCU supports UDMA
+enabled-by: true
+links: []
+name: LM3S69XX_HAS_UDMA
+type: build
diff --git a/spec/build/bsps/arm/lm3s69xx/optxtalcfg.yml b/spec/build/bsps/arm/lm3s69xx/optxtalcfg.yml
new file mode 100644
index 0000000000..d034385cd3
--- /dev/null
+++ b/spec/build/bsps/arm/lm3s69xx/optxtalcfg.yml
@@ -0,0 +1,25 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+actions:
+- get-integer: null
+- define: null
+build-type: option
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+default: 0
+default-by-variant:
+- value: 14
+ variants:
+ - arm/lm3s6965.*
+- value: 16
+ variants:
+ - arm/lm3s3749.*
+- value: 21
+ variants:
+ - arm/lm4f120.*
+description: |
+ crystal configuration for RCC register
+enabled-by: true
+format: '{:#010x}'
+links: []
+name: LM3S69XX_XTAL_CONFIG
+type: build
diff --git a/spec/build/bsps/arm/lm3s69xx/tstlm3s3749.yml b/spec/build/bsps/arm/lm3s69xx/tstlm3s3749.yml
new file mode 100644
index 0000000000..1e62c8bda5
--- /dev/null
+++ b/spec/build/bsps/arm/lm3s69xx/tstlm3s3749.yml
@@ -0,0 +1,38 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+actions:
+- set-test-state:
+ capture: exclude
+ cdtest: exclude
+ fileio: exclude
+ fsdosfsformat01: exclude
+ fsrfsbitmap01: exclude
+ ftp01: exclude
+ iostream: exclude
+ loopback: exclude
+ mdosfsfserror: exclude
+ mdosfsfsrdwr: exclude
+ mghttpd01: exclude
+ monitor02: exclude
+ paranoia: exclude
+ pppd: exclude
+ record01: exclude
+ rtems: exclude
+ shell01: exclude
+ sptls02: exclude
+ syscall01: exclude
+ telnetd01: exclude
+ ttest01: exclude
+ utf8proc01: exclude
+build-type: option
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+default: null
+default-by-variant: []
+description: ''
+enabled-by: true
+links:
+- role: build-dependency
+ uid: ../../tstnorfs
+- role: build-dependency
+ uid: ../../tstsmallmem
+type: build
diff --git a/spec/build/bsps/arm/lm3s69xx/tstlm3s6965.yml b/spec/build/bsps/arm/lm3s69xx/tstlm3s6965.yml
new file mode 100644
index 0000000000..f752f18b93
--- /dev/null
+++ b/spec/build/bsps/arm/lm3s69xx/tstlm3s6965.yml
@@ -0,0 +1,22 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+actions:
+- set-test-state:
+ fileio: exclude
+ ftp01: exclude
+ iostream: exclude
+ mghttpd01: exclude
+ monitor02: exclude
+ pppd: exclude
+ rtems: exclude
+ utf8proc01: exclude
+build-type: option
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+default: null
+default-by-variant: []
+description: ''
+enabled-by: true
+links:
+- role: build-dependency
+ uid: ../../tstsmallmem
+type: build
diff --git a/spec/build/bsps/arm/lm3s69xx/tstlm4f120.yml b/spec/build/bsps/arm/lm3s69xx/tstlm4f120.yml
new file mode 100644
index 0000000000..e9dbfc5a9f
--- /dev/null
+++ b/spec/build/bsps/arm/lm3s69xx/tstlm4f120.yml
@@ -0,0 +1,39 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+actions:
+- set-test-state:
+ block08: exclude
+ capture: exclude
+ fileio: exclude
+ ftp01: exclude
+ iostream: exclude
+ loopback: exclude
+ mghttpd01: exclude
+ ostream: exclude
+ pppd: exclude
+ psxaio01: exclude
+ psxaio02: exclude
+ psxaio03: exclude
+ psxsignal07: exclude
+ sp16: exclude
+ sp25: exclude
+ sp42: exclude
+ sp48: exclude
+ sp71: exclude
+ spregionerr01: exclude
+ sptimecounter02: exclude
+ sptimecounter03: exclude
+ telnetd01: exclude
+ tmcontext01: exclude
+ top: exclude
+ utf8proc01: exclude
+build-type: option
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+default: null
+default-by-variant: []
+description: ''
+enabled-by: true
+links:
+- role: build-dependency
+ uid: ../../tstsmallmem
+type: build
diff --git a/spec/build/bsps/arm/lpc176x/abi.yml b/spec/build/bsps/arm/lpc176x/abi.yml
new file mode 100644
index 0000000000..77d5db8cf7
--- /dev/null
+++ b/spec/build/bsps/arm/lpc176x/abi.yml
@@ -0,0 +1,18 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+actions:
+- get-string: null
+- split: null
+- env-append: null
+build-type: option
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+default:
+- -mthumb
+- -mcpu=cortex-m3
+default-by-variant: []
+description: |
+ ABI flags
+enabled-by: true
+links: []
+name: ABI_FLAGS
+type: build
diff --git a/spec/build/bsps/arm/lpc176x/bsplpc1768mbed.yml b/spec/build/bsps/arm/lpc176x/bsplpc1768mbed.yml
new file mode 100644
index 0000000000..189ef44c63
--- /dev/null
+++ b/spec/build/bsps/arm/lpc176x/bsplpc1768mbed.yml
@@ -0,0 +1,21 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+arch: arm
+bsp: lpc1768_mbed
+build-type: bsp
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+enabled-by: true
+family: lpc176x
+includes: []
+install: []
+links:
+- role: build-dependency
+ uid: grp
+- role: build-dependency
+ uid: tstlpc1768mbed
+- role: build-dependency
+ uid: ../../opto2
+source: []
+type: build
diff --git a/spec/build/bsps/arm/lpc176x/bsplpc1768mbedahbram.yml b/spec/build/bsps/arm/lpc176x/bsplpc1768mbedahbram.yml
new file mode 100644
index 0000000000..705599cbb8
--- /dev/null
+++ b/spec/build/bsps/arm/lpc176x/bsplpc1768mbedahbram.yml
@@ -0,0 +1,21 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+arch: arm
+bsp: lpc1768_mbed_ahb_ram
+build-type: bsp
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+enabled-by: true
+family: lpc176x
+includes: []
+install: []
+links:
+- role: build-dependency
+ uid: grp
+- role: build-dependency
+ uid: tstlpc1768mbedahbram
+- role: build-dependency
+ uid: ../../opto2
+source: []
+type: build
diff --git a/spec/build/bsps/arm/lpc176x/bsplpc1768mbedahbrameth.yml b/spec/build/bsps/arm/lpc176x/bsplpc1768mbedahbrameth.yml
new file mode 100644
index 0000000000..4d1dddef55
--- /dev/null
+++ b/spec/build/bsps/arm/lpc176x/bsplpc1768mbedahbrameth.yml
@@ -0,0 +1,21 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+arch: arm
+bsp: lpc1768_mbed_ahb_ram_eth
+build-type: bsp
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+enabled-by: true
+family: lpc176x
+includes: []
+install: []
+links:
+- role: build-dependency
+ uid: grp
+- role: build-dependency
+ uid: tstlpc1768mbedahbrameth
+- role: build-dependency
+ uid: ../../opto2
+source: []
+type: build
diff --git a/spec/build/bsps/arm/lpc176x/grp.yml b/spec/build/bsps/arm/lpc176x/grp.yml
new file mode 100644
index 0000000000..fba2a13cd8
--- /dev/null
+++ b/spec/build/bsps/arm/lpc176x/grp.yml
@@ -0,0 +1,52 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: group
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+enabled-by: true
+includes: []
+install: []
+ldflags: []
+links:
+- role: build-dependency
+ uid: ../grp
+- role: build-dependency
+ uid: abi
+- role: build-dependency
+ uid: obj
+- role: build-dependency
+ uid: optcclk
+- role: build-dependency
+ uid: optconcfg
+- role: build-dependency
+ uid: optdmachn
+- role: build-dependency
+ uid: optlpc1768
+- role: build-dependency
+ uid: optmintskstksz
+- role: build-dependency
+ uid: optoscmain
+- role: build-dependency
+ uid: optoscrtc
+- role: build-dependency
+ uid: optpclkdiv
+- role: build-dependency
+ uid: optstopgpdma
+- role: build-dependency
+ uid: optstopusb
+- role: build-dependency
+ uid: optuart1cfg
+- role: build-dependency
+ uid: optuartbaud
+- role: build-dependency
+ uid: ../start
+- role: build-dependency
+ uid: ../../linkcmds
+- role: build-dependency
+ uid: ../../obj
+- role: build-dependency
+ uid: ../../objirq
+- role: build-dependency
+ uid: ../../bspopts
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/bsps/arm/lpc176x/obj.yml b/spec/build/bsps/arm/lpc176x/obj.yml
new file mode 100644
index 0000000000..c77a7ce404
--- /dev/null
+++ b/spec/build/bsps/arm/lpc176x/obj.yml
@@ -0,0 +1,80 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: objects
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by: true
+includes: []
+install:
+- destination: ${BSP_INCLUDEDIR}
+ source:
+ - bsps/arm/lpc176x/include/bsp.h
+ - bsps/arm/lpc176x/include/tm27.h
+- destination: ${BSP_INCLUDEDIR}/bsp
+ source:
+ - bsps/arm/lpc176x/include/bsp/adc-defs.h
+ - bsps/arm/lpc176x/include/bsp/adc.h
+ - bsps/arm/lpc176x/include/bsp/can-defs.h
+ - bsps/arm/lpc176x/include/bsp/can.h
+ - bsps/arm/lpc176x/include/bsp/common-types.h
+ - bsps/arm/lpc176x/include/bsp/dma.h
+ - bsps/arm/lpc176x/include/bsp/gpio-defs.h
+ - bsps/arm/lpc176x/include/bsp/io-defs.h
+ - bsps/arm/lpc176x/include/bsp/io.h
+ - bsps/arm/lpc176x/include/bsp/irq.h
+ - bsps/arm/lpc176x/include/bsp/lpc-clock-config.h
+ - bsps/arm/lpc176x/include/bsp/lpc-gpio.h
+ - bsps/arm/lpc176x/include/bsp/lpc176x.h
+ - bsps/arm/lpc176x/include/bsp/mbed-pinmap.h
+ - bsps/arm/lpc176x/include/bsp/pwmout-defs.h
+ - bsps/arm/lpc176x/include/bsp/pwmout.h
+ - bsps/arm/lpc176x/include/bsp/system-clocks.h
+ - bsps/arm/lpc176x/include/bsp/timer-defs.h
+ - bsps/arm/lpc176x/include/bsp/timer.h
+ - bsps/arm/lpc176x/include/bsp/watchdog-defs.h
+ - bsps/arm/lpc176x/include/bsp/watchdog.h
+- destination: ${BSP_LIBDIR}
+ source:
+ - bsps/arm/lpc176x/start/linkcmds.lpc1768_mbed
+ - bsps/arm/lpc176x/start/linkcmds.lpc1768_mbed_ahb_ram
+ - bsps/arm/lpc176x/start/linkcmds.lpc1768_mbed_ahb_ram_eth
+links: []
+source:
+- bsps/arm/lpc176x/btimer/btimer.c
+- bsps/arm/lpc176x/can/can.c
+- bsps/arm/lpc176x/console/console-config.c
+- bsps/arm/lpc176x/gpio/lpc-gpio.c
+- bsps/arm/lpc176x/irq/irq.c
+- bsps/arm/lpc176x/pwm/pwmout.c
+- bsps/arm/lpc176x/rtc/rtc-config.c
+- bsps/arm/lpc176x/start/adc.c
+- bsps/arm/lpc176x/start/bspidle.c
+- bsps/arm/lpc176x/start/bspstart.c
+- bsps/arm/lpc176x/start/bspstarthooks.c
+- bsps/arm/lpc176x/start/dma-copy.c
+- bsps/arm/lpc176x/start/dma.c
+- bsps/arm/lpc176x/start/io.c
+- bsps/arm/lpc176x/start/restart.c
+- bsps/arm/lpc176x/start/system-clocks.c
+- bsps/arm/lpc176x/start/watchdog.c
+- bsps/arm/lpc176x/timer/timer.c
+- bsps/arm/shared/clock/clock-armv7m.c
+- bsps/arm/shared/clock/clock-nxp-lpc.c
+- bsps/arm/shared/irq/irq-armv7m.c
+- bsps/arm/shared/irq/irq-dispatch-armv7m.c
+- bsps/arm/shared/start/bsp-start-memcpy.S
+- bsps/arm/shared/start/bspreset-armv7m.c
+- bsps/shared/cache/nocache.c
+- bsps/shared/dev/getentropy/getentropy-cpucounter.c
+- bsps/shared/dev/rtc/rtc-support.c
+- bsps/shared/dev/serial/console-termios-init.c
+- bsps/shared/dev/serial/console-termios.c
+- bsps/shared/dev/serial/uart-output-char.c
+- bsps/shared/irq/irq-default-handler.c
+- bsps/shared/start/bspfatal-default.c
+- bsps/shared/start/bspgetworkarea-default.c
+- bsps/shared/start/sbrk.c
+- bsps/shared/start/stackalloc.c
+type: build
diff --git a/spec/build/bsps/arm/lpc176x/optcclk.yml b/spec/build/bsps/arm/lpc176x/optcclk.yml
new file mode 100644
index 0000000000..5df9f0a5e2
--- /dev/null
+++ b/spec/build/bsps/arm/lpc176x/optcclk.yml
@@ -0,0 +1,16 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+actions:
+- get-integer: null
+- define: null
+build-type: option
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+default: 96000000
+default-by-variant: []
+description: |
+ CPU clock in Hz
+enabled-by: true
+format: '{}'
+links: []
+name: LPC176X_CCLK
+type: build
diff --git a/spec/build/bsps/arm/lpc176x/optconcfg.yml b/spec/build/bsps/arm/lpc176x/optconcfg.yml
new file mode 100644
index 0000000000..98ff2a9325
--- /dev/null
+++ b/spec/build/bsps/arm/lpc176x/optconcfg.yml
@@ -0,0 +1,15 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+actions:
+- get-boolean: null
+- define-condition: null
+build-type: option
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+default: false
+default-by-variant: []
+description: |
+ configuration for console (UART 0)
+enabled-by: true
+links: []
+name: LPC176X_CONFIG_CONSOLE
+type: build
diff --git a/spec/build/bsps/arm/lpc176x/optdmachn.yml b/spec/build/bsps/arm/lpc176x/optdmachn.yml
new file mode 100644
index 0000000000..a7c288b3c7
--- /dev/null
+++ b/spec/build/bsps/arm/lpc176x/optdmachn.yml
@@ -0,0 +1,16 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+actions:
+- get-integer: null
+- define: null
+build-type: option
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+default: 2
+default-by-variant: []
+description: |
+ DMA channel count
+enabled-by: true
+format: '{}'
+links: []
+name: LPC_DMA_CHANNEL_COUNT
+type: build
diff --git a/spec/build/bsps/arm/lpc176x/optlpc1768.yml b/spec/build/bsps/arm/lpc176x/optlpc1768.yml
new file mode 100644
index 0000000000..9d9673b002
--- /dev/null
+++ b/spec/build/bsps/arm/lpc176x/optlpc1768.yml
@@ -0,0 +1,15 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+actions:
+- get-boolean: null
+- define-condition: null
+build-type: option
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+default: false
+default-by-variant: []
+description: |
+ target used for identify LPC1768 board
+enabled-by: true
+links: []
+name: ARM_LPC1768
+type: build
diff --git a/spec/build/bsps/arm/lpc176x/optmintskstksz.yml b/spec/build/bsps/arm/lpc176x/optmintskstksz.yml
new file mode 100644
index 0000000000..57e77ae551
--- /dev/null
+++ b/spec/build/bsps/arm/lpc176x/optmintskstksz.yml
@@ -0,0 +1,16 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+actions:
+- get-integer: null
+- define: null
+build-type: option
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+default: 1024
+default-by-variant: []
+description: |
+ Suggested minimum task stack size in bytes
+enabled-by: true
+format: '{}'
+links: []
+name: BSP_MINIMUM_TASK_STACK_SIZE
+type: build
diff --git a/spec/build/bsps/arm/lpc176x/optoscmain.yml b/spec/build/bsps/arm/lpc176x/optoscmain.yml
new file mode 100644
index 0000000000..eccce9a3ea
--- /dev/null
+++ b/spec/build/bsps/arm/lpc176x/optoscmain.yml
@@ -0,0 +1,16 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+actions:
+- get-integer: null
+- define: null
+build-type: option
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+default: 12000000
+default-by-variant: []
+description: |
+ main oscillator frequency in Hz
+enabled-by: true
+format: '{}'
+links: []
+name: LPC176X_OSCILLATOR_MAIN
+type: build
diff --git a/spec/build/bsps/arm/lpc176x/optoscrtc.yml b/spec/build/bsps/arm/lpc176x/optoscrtc.yml
new file mode 100644
index 0000000000..a5eff014e9
--- /dev/null
+++ b/spec/build/bsps/arm/lpc176x/optoscrtc.yml
@@ -0,0 +1,16 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+actions:
+- get-integer: null
+- define: null
+build-type: option
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+default: 32768
+default-by-variant: []
+description: |
+ RTC oscillator frequency in Hz
+enabled-by: true
+format: '{}'
+links: []
+name: LPC176X_OSCILLATOR_RTC
+type: build
diff --git a/spec/build/bsps/arm/lpc176x/optpclkdiv.yml b/spec/build/bsps/arm/lpc176x/optpclkdiv.yml
new file mode 100644
index 0000000000..4027f8ad17
--- /dev/null
+++ b/spec/build/bsps/arm/lpc176x/optpclkdiv.yml
@@ -0,0 +1,16 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+actions:
+- get-integer: null
+- define: null
+build-type: option
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+default: 1
+default-by-variant: []
+description: |
+ clock divider for default PCLK (PCLK = CCLK / PCLKDIV)
+enabled-by: true
+format: '{}'
+links: []
+name: LPC176X_PCLKDIV
+type: build
diff --git a/spec/build/bsps/arm/lpc176x/optstopgpdma.yml b/spec/build/bsps/arm/lpc176x/optstopgpdma.yml
new file mode 100644
index 0000000000..d407af65e7
--- /dev/null
+++ b/spec/build/bsps/arm/lpc176x/optstopgpdma.yml
@@ -0,0 +1,15 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+actions:
+- get-boolean: null
+- define-condition: null
+build-type: option
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+default: true
+default-by-variant: []
+description: |
+ stop general purpose DMA at start-up to avoid DMA interference
+enabled-by: true
+links: []
+name: LPC176X_STOP_GPDMA
+type: build
diff --git a/spec/build/bsps/arm/lpc176x/optstopusb.yml b/spec/build/bsps/arm/lpc176x/optstopusb.yml
new file mode 100644
index 0000000000..708a5bb41c
--- /dev/null
+++ b/spec/build/bsps/arm/lpc176x/optstopusb.yml
@@ -0,0 +1,15 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+actions:
+- get-boolean: null
+- define-condition: null
+build-type: option
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+default: true
+default-by-variant: []
+description: |
+ stop USB controller at start-up to avoid DMA interference
+enabled-by: true
+links: []
+name: LPC176X_STOP_USB
+type: build
diff --git a/spec/build/bsps/arm/lpc176x/optuart1cfg.yml b/spec/build/bsps/arm/lpc176x/optuart1cfg.yml
new file mode 100644
index 0000000000..ec9d9843d5
--- /dev/null
+++ b/spec/build/bsps/arm/lpc176x/optuart1cfg.yml
@@ -0,0 +1,15 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+actions:
+- get-boolean: null
+- define-condition: null
+build-type: option
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+default: true
+default-by-variant: []
+description: |
+ Use Uart 1
+enabled-by: true
+links: []
+name: LPC176X_CONFIG_UART_1
+type: build
diff --git a/spec/build/bsps/arm/lpc176x/optuartbaud.yml b/spec/build/bsps/arm/lpc176x/optuartbaud.yml
new file mode 100644
index 0000000000..c5e094beef
--- /dev/null
+++ b/spec/build/bsps/arm/lpc176x/optuartbaud.yml
@@ -0,0 +1,16 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+actions:
+- get-integer: null
+- define: null
+build-type: option
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+default: 9600
+default-by-variant: []
+description: |
+ baud for UARTs
+enabled-by: true
+format: '{}'
+links: []
+name: LPC176X_UART_BAUD
+type: build
diff --git a/spec/build/bsps/arm/lpc176x/tstlpc1768mbed.yml b/spec/build/bsps/arm/lpc176x/tstlpc1768mbed.yml
new file mode 100644
index 0000000000..566f53a2a3
--- /dev/null
+++ b/spec/build/bsps/arm/lpc176x/tstlpc1768mbed.yml
@@ -0,0 +1,37 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+actions:
+- set-test-state:
+ block08: exclude
+ capture: exclude
+ fileio: exclude
+ ftp01: exclude
+ iostream: exclude
+ loopback: exclude
+ mghttpd01: exclude
+ pppd: exclude
+ psxaio01: exclude
+ psxaio02: exclude
+ psxsignal07: exclude
+ rtems: exclude
+ sp16: exclude
+ sp25: exclude
+ sp42: exclude
+ sp48: exclude
+ sptimecounter02: exclude
+ sptimecounter03: exclude
+ telnetd01: exclude
+ tmcontext01: exclude
+ tmfine01: exclude
+ top: exclude
+ utf8proc01: exclude
+build-type: option
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+default: null
+default-by-variant: []
+description: ''
+enabled-by: true
+links:
+- role: build-dependency
+ uid: ../../tstsmallmem
+type: build
diff --git a/spec/build/bsps/arm/lpc176x/tstlpc1768mbedahbram.yml b/spec/build/bsps/arm/lpc176x/tstlpc1768mbedahbram.yml
new file mode 100644
index 0000000000..5f4d24d544
--- /dev/null
+++ b/spec/build/bsps/arm/lpc176x/tstlpc1768mbedahbram.yml
@@ -0,0 +1,38 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+actions:
+- set-test-state:
+ block08: exclude
+ capture: exclude
+ fileio: exclude
+ ftp01: exclude
+ iostream: exclude
+ loopback: exclude
+ mghttpd01: exclude
+ pppd: exclude
+ psxaio01: exclude
+ psxaio02: exclude
+ psxaio03: exclude
+ psxsignal07: exclude
+ rtems: exclude
+ sp16: exclude
+ sp25: exclude
+ sp42: exclude
+ sp48: exclude
+ sptimecounter02: exclude
+ sptimecounter03: exclude
+ sptls02: exclude
+ tmcontext01: exclude
+ tmfine01: exclude
+ top: exclude
+ utf8proc01: exclude
+build-type: option
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+default: null
+default-by-variant: []
+description: ''
+enabled-by: true
+links:
+- role: build-dependency
+ uid: ../../tstsmallmem
+type: build
diff --git a/spec/build/bsps/arm/lpc176x/tstlpc1768mbedahbrameth.yml b/spec/build/bsps/arm/lpc176x/tstlpc1768mbedahbrameth.yml
new file mode 100644
index 0000000000..4760c9d08c
--- /dev/null
+++ b/spec/build/bsps/arm/lpc176x/tstlpc1768mbedahbrameth.yml
@@ -0,0 +1,140 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+actions:
+- set-test-state:
+ block08: exclude
+ calloc: exclude
+ capture: exclude
+ cdtest: exclude
+ clockgettime: exclude
+ close: exclude
+ debugger01: exclude
+ defaultconfig01: exclude
+ dhrystone: exclude
+ dup2: exclude
+ fcntl: exclude
+ fileio: exclude
+ flockfile: exclude
+ fork: exclude
+ free: exclude
+ fsdosfswrite01: exclude
+ fsrfsbitmap01: exclude
+ fstat: exclude
+ ftp01: exclude
+ ftrylockfile: exclude
+ funlockfile: exclude
+ getlogin: exclude
+ getpwnam: exclude
+ getpwuid: exclude
+ gettimeofday: exclude
+ getuid: exclude
+ heapwalk: exclude
+ htonl: exclude
+ imfsfserror: exclude
+ imfsfslink: exclude
+ imfsfspatheval: exclude
+ imfsfspermission: exclude
+ imfsfsrdwr: exclude
+ imfsfsscandir01: exclude
+ imfsfssymlink: exclude
+ imfsfstime: exclude
+ iostream: exclude
+ kill: exclude
+ longjmp: exclude
+ loopback: exclude
+ lseek: exclude
+ lstat: exclude
+ malloc: exclude
+ mdosfsfserror: exclude
+ mdosfsfspatheval: exclude
+ mdosfsfsrdwr: exclude
+ mdosfsfsscandir01: exclude
+ mdosfsfsstatvfs: exclude
+ mdosfsfstime: exclude
+ mghttpd01: exclude
+ mimfsfserror: exclude
+ mimfsfslink: exclude
+ mimfsfspatheval: exclude
+ mimfsfspermission: exclude
+ mimfsfsrdwr: exclude
+ mimfsfsrename: exclude
+ mimfsfsscandir01: exclude
+ mimfsfssymlink: exclude
+ mimfsfstime: exclude
+ monitor: exclude
+ monitor01: exclude
+ monitor02: exclude
+ nanosleep: exclude
+ open: exclude
+ pipe: exclude
+ posixmemalign: exclude
+ pppd: exclude
+ psxaio01: exclude
+ psxaio02: exclude
+ psxaio03: exclude
+ psxbarrier01: exclude
+ psxkey07: exclude
+ psxkey08: exclude
+ psxsignal02: exclude
+ psxsignal07: exclude
+ rbheap01: exclude
+ read: exclude
+ readv: exclude
+ realloc: exclude
+ rtems: exclude
+ setjmp: exclude
+ sigaddset: exclude
+ sigdelset: exclude
+ sigemptyset: exclude
+ sigfillset: exclude
+ sigismember: exclude
+ sigprocmask: exclude
+ sp01: exclude
+ sp16: exclude
+ sp20: exclude
+ sp25: exclude
+ sp35: exclude
+ sp42: exclude
+ sp48: exclude
+ spclockerr01: exclude
+ speventerr03: exclude
+ spintrerr01: exclude
+ spmsgqerr01: exclude
+ spmsgqerr02: exclude
+ spporterr01: exclude
+ spratemonerr01: exclude
+ spregionerr01: exclude
+ spsemerr01: exclude
+ spsemerr02: exclude
+ spsignalerr01: exclude
+ spstkalloc: exclude
+ sptaskerr01: exclude
+ sptaskerr03: exclude
+ sptimecounter02: exclude
+ sptimecounter03: exclude
+ sptls02: exclude
+ stat: exclude
+ telnetd01: exclude
+ tm21: exclude
+ tmcontext01: exclude
+ tmfine01: exclude
+ top: exclude
+ unlink: exclude
+ utf8proc01: exclude
+ vfork: exclude
+ wait: exclude
+ waitpid: exclude
+ write: exclude
+ writev: exclude
+build-type: option
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+default: null
+default-by-variant: []
+description: ''
+enabled-by: true
+links:
+- role: build-dependency
+ uid: ../../tstnorfs
+- role: build-dependency
+ uid: ../../tstsmallmem
+type: build
diff --git a/spec/build/bsps/arm/lpc24xx/abi.yml b/spec/build/bsps/arm/lpc24xx/abi.yml
new file mode 100644
index 0000000000..dd98de97fe
--- /dev/null
+++ b/spec/build/bsps/arm/lpc24xx/abi.yml
@@ -0,0 +1,34 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+actions:
+- get-string: null
+- split: null
+- env-append: null
+build-type: option
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+default:
+- -mcpu=arm7tdmi-s
+- -mthumb
+default-by-variant:
+- value:
+ - -mthumb
+ - -mcpu=cortex-m3
+ variants:
+ - arm/lpc17xx_ea_ram
+ - arm/lpc17xx_ea_rom_int
+ - arm/lpc17xx_plx800_ram
+ - arm/lpc17xx_plx800_rom_int
+- value:
+ - -mthumb
+ - -mcpu=cortex-m4
+ - -mfpu=fpv4-sp-d16
+ - -mfloat-abi=hard
+ variants:
+ - arm/lpc40xx_ea_ram
+ - arm/lpc40xx_ea_rom_int
+description: |
+ ABI flags
+enabled-by: true
+links: []
+name: ABI_FLAGS
+type: build
diff --git a/spec/build/bsps/arm/lpc24xx/bsplpc17xxearam.yml b/spec/build/bsps/arm/lpc24xx/bsplpc17xxearam.yml
new file mode 100644
index 0000000000..181c49c60a
--- /dev/null
+++ b/spec/build/bsps/arm/lpc24xx/bsplpc17xxearam.yml
@@ -0,0 +1,19 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+arch: arm
+bsp: lpc17xx_ea_ram
+build-type: bsp
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+enabled-by: true
+family: lpc24xx
+includes: []
+install: []
+links:
+- role: build-dependency
+ uid: grp
+- role: build-dependency
+ uid: ../../opto2
+source: []
+type: build
diff --git a/spec/build/bsps/arm/lpc24xx/bsplpc17xxearomint.yml b/spec/build/bsps/arm/lpc24xx/bsplpc17xxearomint.yml
new file mode 100644
index 0000000000..ad6e72110a
--- /dev/null
+++ b/spec/build/bsps/arm/lpc24xx/bsplpc17xxearomint.yml
@@ -0,0 +1,21 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+arch: arm
+bsp: lpc17xx_ea_rom_int
+build-type: bsp
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+enabled-by: true
+family: lpc24xx
+includes: []
+install: []
+links:
+- role: build-dependency
+ uid: grp
+- role: build-dependency
+ uid: tstlpc17xxearomint
+- role: build-dependency
+ uid: ../../opto2
+source: []
+type: build
diff --git a/spec/build/bsps/arm/lpc24xx/bsplpc17xxplx800ram.yml b/spec/build/bsps/arm/lpc24xx/bsplpc17xxplx800ram.yml
new file mode 100644
index 0000000000..c19e6174f0
--- /dev/null
+++ b/spec/build/bsps/arm/lpc24xx/bsplpc17xxplx800ram.yml
@@ -0,0 +1,19 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+arch: arm
+bsp: lpc17xx_plx800_ram
+build-type: bsp
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+enabled-by: true
+family: lpc24xx
+includes: []
+install: []
+links:
+- role: build-dependency
+ uid: grp
+- role: build-dependency
+ uid: ../../opto2
+source: []
+type: build
diff --git a/spec/build/bsps/arm/lpc24xx/bsplpc17xxplx800romint.yml b/spec/build/bsps/arm/lpc24xx/bsplpc17xxplx800romint.yml
new file mode 100644
index 0000000000..ec07975717
--- /dev/null
+++ b/spec/build/bsps/arm/lpc24xx/bsplpc17xxplx800romint.yml
@@ -0,0 +1,21 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+arch: arm
+bsp: lpc17xx_plx800_rom_int
+build-type: bsp
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+enabled-by: true
+family: lpc24xx
+includes: []
+install: []
+links:
+- role: build-dependency
+ uid: grp
+- role: build-dependency
+ uid: tstlpc17xxplx800romint
+- role: build-dependency
+ uid: ../../opto2
+source: []
+type: build
diff --git a/spec/build/bsps/arm/lpc24xx/bsplpc2362.yml b/spec/build/bsps/arm/lpc24xx/bsplpc2362.yml
new file mode 100644
index 0000000000..fe667c755f
--- /dev/null
+++ b/spec/build/bsps/arm/lpc24xx/bsplpc2362.yml
@@ -0,0 +1,21 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+arch: arm
+bsp: lpc2362
+build-type: bsp
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+enabled-by: true
+family: lpc24xx
+includes: []
+install: []
+links:
+- role: build-dependency
+ uid: grp
+- role: build-dependency
+ uid: tstlpc2362
+- role: build-dependency
+ uid: ../../opto2
+source: []
+type: build
diff --git a/spec/build/bsps/arm/lpc24xx/bsplpc23xxtli800.yml b/spec/build/bsps/arm/lpc24xx/bsplpc23xxtli800.yml
new file mode 100644
index 0000000000..4815cdff2a
--- /dev/null
+++ b/spec/build/bsps/arm/lpc24xx/bsplpc23xxtli800.yml
@@ -0,0 +1,21 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+arch: arm
+bsp: lpc23xx_tli800
+build-type: bsp
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+enabled-by: true
+family: lpc24xx
+includes: []
+install: []
+links:
+- role: build-dependency
+ uid: grp
+- role: build-dependency
+ uid: tstlpc23xxtli800
+- role: build-dependency
+ uid: ../../opto2
+source: []
+type: build
diff --git a/spec/build/bsps/arm/lpc24xx/bsplpc24xxea.yml b/spec/build/bsps/arm/lpc24xx/bsplpc24xxea.yml
new file mode 100644
index 0000000000..8aa5210101
--- /dev/null
+++ b/spec/build/bsps/arm/lpc24xx/bsplpc24xxea.yml
@@ -0,0 +1,19 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+arch: arm
+bsp: lpc24xx_ea
+build-type: bsp
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+enabled-by: true
+family: lpc24xx
+includes: []
+install: []
+links:
+- role: build-dependency
+ uid: grp
+- role: build-dependency
+ uid: ../../opto2
+source: []
+type: build
diff --git a/spec/build/bsps/arm/lpc24xx/bsplpc40xxearam.yml b/spec/build/bsps/arm/lpc24xx/bsplpc40xxearam.yml
new file mode 100644
index 0000000000..74dd4b4e0f
--- /dev/null
+++ b/spec/build/bsps/arm/lpc24xx/bsplpc40xxearam.yml
@@ -0,0 +1,19 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+arch: arm
+bsp: lpc40xx_ea_ram
+build-type: bsp
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+enabled-by: true
+family: lpc24xx
+includes: []
+install: []
+links:
+- role: build-dependency
+ uid: grp
+- role: build-dependency
+ uid: ../../opto2
+source: []
+type: build
diff --git a/spec/build/bsps/arm/lpc24xx/bsplpc40xxearomint.yml b/spec/build/bsps/arm/lpc24xx/bsplpc40xxearomint.yml
new file mode 100644
index 0000000000..babf218f6d
--- /dev/null
+++ b/spec/build/bsps/arm/lpc24xx/bsplpc40xxearomint.yml
@@ -0,0 +1,21 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+arch: arm
+bsp: lpc40xx_ea_rom_int
+build-type: bsp
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+enabled-by: true
+family: lpc24xx
+includes: []
+install: []
+links:
+- role: build-dependency
+ uid: grp
+- role: build-dependency
+ uid: tstlpc40xxearomint
+- role: build-dependency
+ uid: ../../opto2
+source: []
+type: build
diff --git a/spec/build/bsps/arm/lpc24xx/bspncsram.yml b/spec/build/bsps/arm/lpc24xx/bspncsram.yml
new file mode 100644
index 0000000000..f5fd8fb730
--- /dev/null
+++ b/spec/build/bsps/arm/lpc24xx/bspncsram.yml
@@ -0,0 +1,19 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+arch: arm
+bsp: lpc24xx_ncs_ram
+build-type: bsp
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+enabled-by: true
+family: lpc24xx
+includes: []
+install: []
+links:
+- role: build-dependency
+ uid: grp
+- role: build-dependency
+ uid: ../../opto2
+source: []
+type: build
diff --git a/spec/build/bsps/arm/lpc24xx/bspncsromext.yml b/spec/build/bsps/arm/lpc24xx/bspncsromext.yml
new file mode 100644
index 0000000000..219538f4ba
--- /dev/null
+++ b/spec/build/bsps/arm/lpc24xx/bspncsromext.yml
@@ -0,0 +1,19 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+arch: arm
+bsp: lpc24xx_ncs_rom_ext
+build-type: bsp
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+enabled-by: true
+family: lpc24xx
+includes: []
+install: []
+links:
+- role: build-dependency
+ uid: grp
+- role: build-dependency
+ uid: ../../opto2
+source: []
+type: build
diff --git a/spec/build/bsps/arm/lpc24xx/bspncsromint.yml b/spec/build/bsps/arm/lpc24xx/bspncsromint.yml
new file mode 100644
index 0000000000..ad3066f149
--- /dev/null
+++ b/spec/build/bsps/arm/lpc24xx/bspncsromint.yml
@@ -0,0 +1,21 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+arch: arm
+bsp: lpc24xx_ncs_rom_int
+build-type: bsp
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+enabled-by: true
+family: lpc24xx
+includes: []
+install: []
+links:
+- role: build-dependency
+ uid: grp
+- role: build-dependency
+ uid: tstncsromint
+- role: build-dependency
+ uid: ../../opto2
+source: []
+type: build
diff --git a/spec/build/bsps/arm/lpc24xx/bspplx800ram.yml b/spec/build/bsps/arm/lpc24xx/bspplx800ram.yml
new file mode 100644
index 0000000000..1b67bf9030
--- /dev/null
+++ b/spec/build/bsps/arm/lpc24xx/bspplx800ram.yml
@@ -0,0 +1,19 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+arch: arm
+bsp: lpc24xx_plx800_ram
+build-type: bsp
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+enabled-by: true
+family: lpc24xx
+includes: []
+install: []
+links:
+- role: build-dependency
+ uid: grp
+- role: build-dependency
+ uid: ../../opto2
+source: []
+type: build
diff --git a/spec/build/bsps/arm/lpc24xx/bspplx800romint.yml b/spec/build/bsps/arm/lpc24xx/bspplx800romint.yml
new file mode 100644
index 0000000000..d205aca3b3
--- /dev/null
+++ b/spec/build/bsps/arm/lpc24xx/bspplx800romint.yml
@@ -0,0 +1,21 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+arch: arm
+bsp: lpc24xx_plx800_rom_int
+build-type: bsp
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+enabled-by: true
+family: lpc24xx
+includes: []
+install: []
+links:
+- role: build-dependency
+ uid: grp
+- role: build-dependency
+ uid: tstplx800romint
+- role: build-dependency
+ uid: ../../opto2
+source: []
+type: build
diff --git a/spec/build/bsps/arm/lpc24xx/grp.yml b/spec/build/bsps/arm/lpc24xx/grp.yml
new file mode 100644
index 0000000000..ba3d3df09d
--- /dev/null
+++ b/spec/build/bsps/arm/lpc24xx/grp.yml
@@ -0,0 +1,84 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: group
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+enabled-by: true
+includes: []
+install: []
+ldflags: []
+links:
+- role: build-dependency
+ uid: ../grp
+- role: build-dependency
+ uid: abi
+- role: build-dependency
+ uid: obj
+- role: build-dependency
+ uid: objnet
+- role: build-dependency
+ uid: optcclk
+- role: build-dependency
+ uid: optconcfg
+- role: build-dependency
+ uid: optdmachn
+- role: build-dependency
+ uid: optemcclkdiv
+- role: build-dependency
+ uid: optemcis42s32800b
+- role: build-dependency
+ uid: optemcis42s32800d7
+- role: build-dependency
+ uid: optemcm29w160e
+- role: build-dependency
+ uid: optemcm29w320e70
+- role: build-dependency
+ uid: optemcmt48lc4m16a2
+- role: build-dependency
+ uid: optemcsst39vf3201
+- role: build-dependency
+ uid: optemctest
+- role: build-dependency
+ uid: optemcw9825g2jb75i
+- role: build-dependency
+ uid: optethdownpin
+- role: build-dependency
+ uid: optethrmii
+- role: build-dependency
+ uid: optheapext
+- role: build-dependency
+ uid: optoscmain
+- role: build-dependency
+ uid: optoscrtc
+- role: build-dependency
+ uid: optotgi2c
+- role: build-dependency
+ uid: optpclkdiv
+- role: build-dependency
+ uid: optresetvec
+- role: build-dependency
+ uid: optstopeth
+- role: build-dependency
+ uid: optstopgpdma
+- role: build-dependency
+ uid: optstopusb
+- role: build-dependency
+ uid: optuart1cfg
+- role: build-dependency
+ uid: optuart2cfg
+- role: build-dependency
+ uid: optuart3cfg
+- role: build-dependency
+ uid: optuartbaud
+- role: build-dependency
+ uid: ../start
+- role: build-dependency
+ uid: ../../linkcmds
+- role: build-dependency
+ uid: ../../obj
+- role: build-dependency
+ uid: ../../objirq
+- role: build-dependency
+ uid: ../../bspopts
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/bsps/arm/lpc24xx/obj.yml b/spec/build/bsps/arm/lpc24xx/obj.yml
new file mode 100644
index 0000000000..43bdf40820
--- /dev/null
+++ b/spec/build/bsps/arm/lpc24xx/obj.yml
@@ -0,0 +1,90 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: objects
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by: true
+includes: []
+install:
+- destination: ${BSP_INCLUDEDIR}
+ source:
+ - bsps/arm/lpc24xx/include/bsp.h
+ - bsps/arm/lpc24xx/include/tm27.h
+- destination: ${BSP_INCLUDEDIR}/bsp
+ source:
+ - bsps/arm/lpc24xx/include/bsp/dma.h
+ - bsps/arm/lpc24xx/include/bsp/i2c.h
+ - bsps/arm/lpc24xx/include/bsp/io.h
+ - bsps/arm/lpc24xx/include/bsp/irq.h
+ - bsps/arm/lpc24xx/include/bsp/lcd.h
+ - bsps/arm/lpc24xx/include/bsp/lpc-clock-config.h
+ - bsps/arm/lpc24xx/include/bsp/lpc-ethernet-config.h
+ - bsps/arm/lpc24xx/include/bsp/lpc17xx.h
+ - bsps/arm/lpc24xx/include/bsp/lpc24xx.h
+ - bsps/arm/lpc24xx/include/bsp/ssp.h
+ - bsps/arm/lpc24xx/include/bsp/start-config.h
+ - bsps/arm/lpc24xx/include/bsp/system-clocks.h
+- destination: ${BSP_LIBDIR}
+ source:
+ - bsps/arm/lpc24xx/start/linkcmds.lpc17xx_ea_ram
+ - bsps/arm/lpc24xx/start/linkcmds.lpc17xx_ea_rom_int
+ - bsps/arm/lpc24xx/start/linkcmds.lpc17xx_plx800_ram
+ - bsps/arm/lpc24xx/start/linkcmds.lpc17xx_plx800_rom_int
+ - bsps/arm/lpc24xx/start/linkcmds.lpc2362
+ - bsps/arm/lpc24xx/start/linkcmds.lpc23xx_tli800
+ - bsps/arm/lpc24xx/start/linkcmds.lpc24xx_ea
+ - bsps/arm/lpc24xx/start/linkcmds.lpc24xx_ncs_ram
+ - bsps/arm/lpc24xx/start/linkcmds.lpc24xx_ncs_rom_ext
+ - bsps/arm/lpc24xx/start/linkcmds.lpc24xx_ncs_rom_int
+ - bsps/arm/lpc24xx/start/linkcmds.lpc24xx_plx800_ram
+ - bsps/arm/lpc24xx/start/linkcmds.lpc24xx_plx800_rom_int
+ - bsps/arm/lpc24xx/start/linkcmds.lpc40xx_ea_ram
+ - bsps/arm/lpc24xx/start/linkcmds.lpc40xx_ea_rom_int
+links: []
+source:
+- bsps/arm/lpc24xx/console/console-config.c
+- bsps/arm/lpc24xx/console/uart-probe-1.c
+- bsps/arm/lpc24xx/console/uart-probe-2.c
+- bsps/arm/lpc24xx/console/uart-probe-3.c
+- bsps/arm/lpc24xx/fb/lcd.c
+- bsps/arm/lpc24xx/i2c/i2c.c
+- bsps/arm/lpc24xx/irq/irq-dispatch.c
+- bsps/arm/lpc24xx/irq/irq.c
+- bsps/arm/lpc24xx/rtc/rtc-config.c
+- bsps/arm/lpc24xx/spi/ssp.c
+- bsps/arm/lpc24xx/start/bspidle.c
+- bsps/arm/lpc24xx/start/bspreset-armv4.c
+- bsps/arm/lpc24xx/start/bspstart.c
+- bsps/arm/lpc24xx/start/bspstarthooks.c
+- bsps/arm/lpc24xx/start/dma-copy.c
+- bsps/arm/lpc24xx/start/dma.c
+- bsps/arm/lpc24xx/start/fb-config.c
+- bsps/arm/lpc24xx/start/io.c
+- bsps/arm/lpc24xx/start/restart.c
+- bsps/arm/lpc24xx/start/start-config-emc-dynamic.c
+- bsps/arm/lpc24xx/start/start-config-emc-static.c
+- bsps/arm/lpc24xx/start/start-config-mpu.c
+- bsps/arm/lpc24xx/start/start-config-pinsel.c
+- bsps/arm/lpc24xx/start/system-clocks.c
+- bsps/arm/lpc24xx/start/timer.c
+- bsps/arm/shared/clock/clock-armv7m.c
+- bsps/arm/shared/clock/clock-nxp-lpc.c
+- bsps/arm/shared/fb/arm-pl111.c
+- bsps/arm/shared/irq/irq-armv7m.c
+- bsps/arm/shared/irq/irq-dispatch-armv7m.c
+- bsps/arm/shared/start/bsp-start-memcpy.S
+- bsps/arm/shared/start/bspreset-armv7m.c
+- bsps/shared/cache/nocache.c
+- bsps/shared/dev/getentropy/getentropy-cpucounter.c
+- bsps/shared/dev/rtc/rtc-support.c
+- bsps/shared/dev/serial/console-termios-init.c
+- bsps/shared/dev/serial/console-termios.c
+- bsps/shared/dev/serial/uart-output-char.c
+- bsps/shared/irq/irq-default-handler.c
+- bsps/shared/start/bspfatal-default.c
+- bsps/shared/start/bspgetworkarea-default.c
+- bsps/shared/start/sbrk.c
+- bsps/shared/start/stackalloc.c
+type: build
diff --git a/spec/build/bsps/arm/lpc24xx/objnet.yml b/spec/build/bsps/arm/lpc24xx/objnet.yml
new file mode 100644
index 0000000000..8534edceaf
--- /dev/null
+++ b/spec/build/bsps/arm/lpc24xx/objnet.yml
@@ -0,0 +1,16 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: objects
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by:
+- RTEMS_NETWORKING
+includes:
+- cpukit/libnetworking
+install: []
+links: []
+source:
+- bsps/arm/shared/net/lpc-ethernet.c
+type: build
diff --git a/spec/build/bsps/arm/lpc24xx/optcclk.yml b/spec/build/bsps/arm/lpc24xx/optcclk.yml
new file mode 100644
index 0000000000..aacf2192c2
--- /dev/null
+++ b/spec/build/bsps/arm/lpc24xx/optcclk.yml
@@ -0,0 +1,28 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+actions:
+- get-integer: null
+- define: null
+build-type: option
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+default: 72000000
+default-by-variant:
+- value: 96000000
+ variants:
+ - arm/lpc17xx_ea.*
+- value: 96000000
+ variants:
+ - arm/lpc40xx_ea.*
+- value: 58982400
+ variants:
+ - arm/lpc23.*
+- value: 51612800
+ variants:
+ - arm/lpc24xx_plx800_.*
+description: |
+ CPU clock in Hz
+enabled-by: true
+format: '{}'
+links: []
+name: LPC24XX_CCLK
+type: build
diff --git a/spec/build/bsps/arm/lpc24xx/optconcfg.yml b/spec/build/bsps/arm/lpc24xx/optconcfg.yml
new file mode 100644
index 0000000000..4e09164cdf
--- /dev/null
+++ b/spec/build/bsps/arm/lpc24xx/optconcfg.yml
@@ -0,0 +1,15 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+actions:
+- get-boolean: null
+- define-condition: null
+build-type: option
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+default: false
+default-by-variant: []
+description: |
+ configuration for console (UART 0)
+enabled-by: true
+links: []
+name: LPC24XX_CONFIG_CONSOLE
+type: build
diff --git a/spec/build/bsps/arm/lpc24xx/optdmachn.yml b/spec/build/bsps/arm/lpc24xx/optdmachn.yml
new file mode 100644
index 0000000000..1a67589bfc
--- /dev/null
+++ b/spec/build/bsps/arm/lpc24xx/optdmachn.yml
@@ -0,0 +1,22 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+actions:
+- get-integer: null
+- define: null
+build-type: option
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+default: 2
+default-by-variant:
+- value: 8
+ variants:
+ - arm/lpc17.*
+- value: 8
+ variants:
+ - arm/lpc40.*
+description: |
+ DMA channel count
+enabled-by: true
+format: '{}'
+links: []
+name: LPC_DMA_CHANNEL_COUNT
+type: build
diff --git a/spec/build/bsps/arm/lpc24xx/optemcclkdiv.yml b/spec/build/bsps/arm/lpc24xx/optemcclkdiv.yml
new file mode 100644
index 0000000000..8851dadfa7
--- /dev/null
+++ b/spec/build/bsps/arm/lpc24xx/optemcclkdiv.yml
@@ -0,0 +1,22 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+actions:
+- get-integer: null
+- define: null
+build-type: option
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+default: 1
+default-by-variant:
+- value: 2
+ variants:
+ - arm/lpc17xx_ea.*
+- value: 2
+ variants:
+ - arm/lpc40xx_ea.*
+description: |
+ clock divider for EMCCLK (EMCCLK = CCLK / EMCCLKDIV)
+enabled-by: true
+format: '{}'
+links: []
+name: LPC24XX_EMCCLKDIV
+type: build
diff --git a/spec/build/bsps/arm/lpc24xx/optemcis42s32800b.yml b/spec/build/bsps/arm/lpc24xx/optemcis42s32800b.yml
new file mode 100644
index 0000000000..de40eca73a
--- /dev/null
+++ b/spec/build/bsps/arm/lpc24xx/optemcis42s32800b.yml
@@ -0,0 +1,21 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+actions:
+- get-boolean: null
+- define-condition: null
+build-type: option
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+default: false
+default-by-variant:
+- value: true
+ variants:
+ - arm/lpc17xx_ea_rom_.*
+- value: true
+ variants:
+ - arm/lpc40xx_ea_rom_.*
+description: |
+ enable ISSI IS42S32800B configuration for EMC
+enabled-by: true
+links: []
+name: LPC24XX_EMC_IS42S32800B
+type: build
diff --git a/spec/build/bsps/arm/lpc24xx/optemcis42s32800d7.yml b/spec/build/bsps/arm/lpc24xx/optemcis42s32800d7.yml
new file mode 100644
index 0000000000..e7ad228709
--- /dev/null
+++ b/spec/build/bsps/arm/lpc24xx/optemcis42s32800d7.yml
@@ -0,0 +1,18 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+actions:
+- get-boolean: null
+- define-condition: null
+build-type: option
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+default: false
+default-by-variant:
+- value: true
+ variants:
+ - arm/.*_plx800_rom_.*
+description: |
+ enable ISSI IS42S32800D7 configuration for EMC
+enabled-by: true
+links: []
+name: LPC24XX_EMC_IS42S32800D7
+type: build
diff --git a/spec/build/bsps/arm/lpc24xx/optemcm29w160e.yml b/spec/build/bsps/arm/lpc24xx/optemcm29w160e.yml
new file mode 100644
index 0000000000..40a4bfbf71
--- /dev/null
+++ b/spec/build/bsps/arm/lpc24xx/optemcm29w160e.yml
@@ -0,0 +1,18 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+actions:
+- get-boolean: null
+- define-condition: null
+build-type: option
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+default: false
+default-by-variant:
+- value: true
+ variants:
+ - arm/lpc24xx_ncs_rom_.*
+description: |
+ enable M29W160E configuration for EMC
+enabled-by: true
+links: []
+name: LPC24XX_EMC_M29W160E
+type: build
diff --git a/spec/build/bsps/arm/lpc24xx/optemcm29w320e70.yml b/spec/build/bsps/arm/lpc24xx/optemcm29w320e70.yml
new file mode 100644
index 0000000000..a32c1a3eb6
--- /dev/null
+++ b/spec/build/bsps/arm/lpc24xx/optemcm29w320e70.yml
@@ -0,0 +1,18 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+actions:
+- get-boolean: null
+- define-condition: null
+build-type: option
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+default: false
+default-by-variant:
+- value: true
+ variants:
+ - arm/.*_plx800_rom_.*
+description: |
+ enable M29W320E70 configuration for EMC
+enabled-by: true
+links: []
+name: LPC24XX_EMC_M29W320E70
+type: build
diff --git a/spec/build/bsps/arm/lpc24xx/optemcmt48lc4m16a2.yml b/spec/build/bsps/arm/lpc24xx/optemcmt48lc4m16a2.yml
new file mode 100644
index 0000000000..ab6f25fef8
--- /dev/null
+++ b/spec/build/bsps/arm/lpc24xx/optemcmt48lc4m16a2.yml
@@ -0,0 +1,18 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+actions:
+- get-boolean: null
+- define-condition: null
+build-type: option
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+default: false
+default-by-variant:
+- value: true
+ variants:
+ - arm/lpc24xx_ncs_rom_.*
+description: |
+ enable Micron MT48LC4M16A2 configuration for EMC
+enabled-by: true
+links: []
+name: LPC24XX_EMC_MT48LC4M16A2
+type: build
diff --git a/spec/build/bsps/arm/lpc24xx/optemcsst39vf3201.yml b/spec/build/bsps/arm/lpc24xx/optemcsst39vf3201.yml
new file mode 100644
index 0000000000..851c28a275
--- /dev/null
+++ b/spec/build/bsps/arm/lpc24xx/optemcsst39vf3201.yml
@@ -0,0 +1,15 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+actions:
+- get-boolean: null
+- define-condition: null
+build-type: option
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+default: false
+default-by-variant: []
+description: |
+ enable SST39VF3201 configuration for EMC
+enabled-by: true
+links: []
+name: LPC24XX_EMC_SST39VF3201
+type: build
diff --git a/spec/build/bsps/arm/lpc24xx/optemctest.yml b/spec/build/bsps/arm/lpc24xx/optemctest.yml
new file mode 100644
index 0000000000..4153bd2664
--- /dev/null
+++ b/spec/build/bsps/arm/lpc24xx/optemctest.yml
@@ -0,0 +1,15 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+actions:
+- get-boolean: null
+- define-condition: null
+build-type: option
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+default: false
+default-by-variant: []
+description: |
+ enable tests for EMC
+enabled-by: true
+links: []
+name: LPC24XX_EMC_TEST
+type: build
diff --git a/spec/build/bsps/arm/lpc24xx/optemcw9825g2jb75i.yml b/spec/build/bsps/arm/lpc24xx/optemcw9825g2jb75i.yml
new file mode 100644
index 0000000000..2be3f76372
--- /dev/null
+++ b/spec/build/bsps/arm/lpc24xx/optemcw9825g2jb75i.yml
@@ -0,0 +1,15 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+actions:
+- get-boolean: null
+- define-condition: null
+build-type: option
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+default: false
+default-by-variant: []
+description: |
+ enable Winbond W9825G2JB75I configuration for EMC
+enabled-by: true
+links: []
+name: LPC24XX_EMC_W9825G2JB75I
+type: build
diff --git a/spec/build/bsps/arm/lpc24xx/optethdownpin.yml b/spec/build/bsps/arm/lpc24xx/optethdownpin.yml
new file mode 100644
index 0000000000..c3889b0eea
--- /dev/null
+++ b/spec/build/bsps/arm/lpc24xx/optethdownpin.yml
@@ -0,0 +1,15 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+actions:
+- get-boolean: null
+- define-condition: null
+build-type: option
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+default: false
+default-by-variant: []
+description: |
+ optional Ethernet power-down pin, output is set to high to enable power
+enabled-by: true
+links: []
+name: LPC24XX_PIN_ETHERNET_POWER_DOWN
+type: build
diff --git a/spec/build/bsps/arm/lpc24xx/optethrmii.yml b/spec/build/bsps/arm/lpc24xx/optethrmii.yml
new file mode 100644
index 0000000000..c7c3627c82
--- /dev/null
+++ b/spec/build/bsps/arm/lpc24xx/optethrmii.yml
@@ -0,0 +1,18 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+actions:
+- get-boolean: null
+- define-condition: null
+build-type: option
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+default: false
+default-by-variant:
+- value: true
+ variants:
+ - arm/.*_ea_.*
+description: |
+ enable RMII for Ethernet
+enabled-by: true
+links: []
+name: LPC24XX_ETHERNET_RMII
+type: build
diff --git a/spec/build/bsps/arm/lpc24xx/optheapext.yml b/spec/build/bsps/arm/lpc24xx/optheapext.yml
new file mode 100644
index 0000000000..b485eb6cc3
--- /dev/null
+++ b/spec/build/bsps/arm/lpc24xx/optheapext.yml
@@ -0,0 +1,18 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+actions:
+- get-boolean: null
+- define-condition: null
+build-type: option
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+default: false
+default-by-variant:
+- value: true
+ variants:
+ - arm/lpc23.*
+description: |
+ enable heap extend by Ethernet and USB regions
+enabled-by: true
+links: []
+name: LPC24XX_HEAP_EXTEND
+type: build
diff --git a/spec/build/bsps/arm/lpc24xx/optoscmain.yml b/spec/build/bsps/arm/lpc24xx/optoscmain.yml
new file mode 100644
index 0000000000..ec529345a1
--- /dev/null
+++ b/spec/build/bsps/arm/lpc24xx/optoscmain.yml
@@ -0,0 +1,19 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+actions:
+- get-integer: null
+- define: null
+build-type: option
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+default: 12000000
+default-by-variant:
+- value: 3686400
+ variants:
+ - arm/lpc23.*
+description: |
+ main oscillator frequency in Hz
+enabled-by: true
+format: '{}'
+links: []
+name: LPC24XX_OSCILLATOR_MAIN
+type: build
diff --git a/spec/build/bsps/arm/lpc24xx/optoscrtc.yml b/spec/build/bsps/arm/lpc24xx/optoscrtc.yml
new file mode 100644
index 0000000000..0b66f8a553
--- /dev/null
+++ b/spec/build/bsps/arm/lpc24xx/optoscrtc.yml
@@ -0,0 +1,16 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+actions:
+- get-integer: null
+- define: null
+build-type: option
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+default: 32768
+default-by-variant: []
+description: |
+ RTC oscillator frequency in Hz
+enabled-by: true
+format: '{}'
+links: []
+name: LPC24XX_OSCILLATOR_RTC
+type: build
diff --git a/spec/build/bsps/arm/lpc24xx/optotgi2c.yml b/spec/build/bsps/arm/lpc24xx/optotgi2c.yml
new file mode 100644
index 0000000000..4e205cb0af
--- /dev/null
+++ b/spec/build/bsps/arm/lpc24xx/optotgi2c.yml
@@ -0,0 +1,22 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+actions:
+- get-integer: null
+- define: null
+build-type: option
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+default: 0
+default-by-variant:
+- value: 94
+ variants:
+ - arm/lpc17xx_ea.*
+- value: 94
+ variants:
+ - arm/lpc40xx_ea.*
+description: |
+ USB OTG transceiver I2C address used by USB stack
+enabled-by: true
+format: '{:#010x}'
+links: []
+name: BSP_USB_OTG_TRANSCEIVER_I2C_ADDR
+type: build
diff --git a/spec/build/bsps/arm/lpc24xx/optpclkdiv.yml b/spec/build/bsps/arm/lpc24xx/optpclkdiv.yml
new file mode 100644
index 0000000000..296486c78f
--- /dev/null
+++ b/spec/build/bsps/arm/lpc24xx/optpclkdiv.yml
@@ -0,0 +1,22 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+actions:
+- get-integer: null
+- define: null
+build-type: option
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+default: 1
+default-by-variant:
+- value: 2
+ variants:
+ - arm/lpc17xx_ea.*
+- value: 2
+ variants:
+ - arm/lpc40xx_ea.*
+description: |
+ clock divider for default PCLK (PCLK = CCLK / PCLKDIV)
+enabled-by: true
+format: '{}'
+links: []
+name: LPC24XX_PCLKDIV
+type: build
diff --git a/spec/build/bsps/arm/lpc24xx/optresetvec.yml b/spec/build/bsps/arm/lpc24xx/optresetvec.yml
new file mode 100644
index 0000000000..a73530db7b
--- /dev/null
+++ b/spec/build/bsps/arm/lpc24xx/optresetvec.yml
@@ -0,0 +1,19 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+actions:
+- get-integer: null
+- define: null
+build-type: option
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+default: 0
+default-by-variant:
+- value: 2147483712
+ variants:
+ - arm/lpc24xx_ncs_rom_ext
+description: |
+ reset vector address for BSP start
+enabled-by: true
+format: '{:#010x}'
+links: []
+name: BSP_START_RESET_VECTOR
+type: build
diff --git a/spec/build/bsps/arm/lpc24xx/optstopeth.yml b/spec/build/bsps/arm/lpc24xx/optstopeth.yml
new file mode 100644
index 0000000000..60f07f9a06
--- /dev/null
+++ b/spec/build/bsps/arm/lpc24xx/optstopeth.yml
@@ -0,0 +1,18 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+actions:
+- get-boolean: null
+- define-condition: null
+build-type: option
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+default: true
+default-by-variant:
+- value: false
+ variants:
+ - arm/lpc23.*
+description: |
+ stop Ethernet controller at start-up to avoid DMA interference
+enabled-by: true
+links: []
+name: LPC24XX_STOP_ETHERNET
+type: build
diff --git a/spec/build/bsps/arm/lpc24xx/optstopgpdma.yml b/spec/build/bsps/arm/lpc24xx/optstopgpdma.yml
new file mode 100644
index 0000000000..5705cc03ef
--- /dev/null
+++ b/spec/build/bsps/arm/lpc24xx/optstopgpdma.yml
@@ -0,0 +1,15 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+actions:
+- get-boolean: null
+- define-condition: null
+build-type: option
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+default: true
+default-by-variant: []
+description: |
+ stop general purpose DMA at start-up to avoid DMA interference
+enabled-by: true
+links: []
+name: LPC24XX_STOP_GPDMA
+type: build
diff --git a/spec/build/bsps/arm/lpc24xx/optstopusb.yml b/spec/build/bsps/arm/lpc24xx/optstopusb.yml
new file mode 100644
index 0000000000..2f2bfc5c93
--- /dev/null
+++ b/spec/build/bsps/arm/lpc24xx/optstopusb.yml
@@ -0,0 +1,18 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+actions:
+- get-boolean: null
+- define-condition: null
+build-type: option
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+default: true
+default-by-variant:
+- value: false
+ variants:
+ - arm/lpc23.*
+description: |
+ stop USB controller at start-up to avoid DMA interference
+enabled-by: true
+links: []
+name: LPC24XX_STOP_USB
+type: build
diff --git a/spec/build/bsps/arm/lpc24xx/optuart1cfg.yml b/spec/build/bsps/arm/lpc24xx/optuart1cfg.yml
new file mode 100644
index 0000000000..c1f133f08f
--- /dev/null
+++ b/spec/build/bsps/arm/lpc24xx/optuart1cfg.yml
@@ -0,0 +1,18 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+actions:
+- get-boolean: null
+- define-condition: null
+build-type: option
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+default: false
+default-by-variant:
+- value: false
+ variants:
+ - arm/.*_plx800_.*
+description: |
+ configuration for UART 1
+enabled-by: true
+links: []
+name: LPC24XX_CONFIG_UART_1
+type: build
diff --git a/spec/build/bsps/arm/lpc24xx/optuart2cfg.yml b/spec/build/bsps/arm/lpc24xx/optuart2cfg.yml
new file mode 100644
index 0000000000..3e523147ca
--- /dev/null
+++ b/spec/build/bsps/arm/lpc24xx/optuart2cfg.yml
@@ -0,0 +1,24 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+actions:
+- get-boolean: null
+- define-condition: null
+build-type: option
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+default: false
+default-by-variant:
+- value: false
+ variants:
+ - arm/lpc23.*
+- value: false
+ variants:
+ - arm/lpc24xx_ncs_.*
+- value: false
+ variants:
+ - arm/.*_plx800_.*
+description: |
+ configuration for UART 2
+enabled-by: true
+links: []
+name: LPC24XX_CONFIG_UART_2
+type: build
diff --git a/spec/build/bsps/arm/lpc24xx/optuart3cfg.yml b/spec/build/bsps/arm/lpc24xx/optuart3cfg.yml
new file mode 100644
index 0000000000..2af84c927d
--- /dev/null
+++ b/spec/build/bsps/arm/lpc24xx/optuart3cfg.yml
@@ -0,0 +1,21 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+actions:
+- get-boolean: null
+- define-condition: null
+build-type: option
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+default: false
+default-by-variant:
+- value: false
+ variants:
+ - arm/lpc23.*
+- value: false
+ variants:
+ - arm/lpc24xx_ncs_.*
+description: |
+ configuration for UART 3
+enabled-by: true
+links: []
+name: LPC24XX_CONFIG_UART_3
+type: build
diff --git a/spec/build/bsps/arm/lpc24xx/optuartbaud.yml b/spec/build/bsps/arm/lpc24xx/optuartbaud.yml
new file mode 100644
index 0000000000..e772d71381
--- /dev/null
+++ b/spec/build/bsps/arm/lpc24xx/optuartbaud.yml
@@ -0,0 +1,16 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+actions:
+- get-integer: null
+- define: null
+build-type: option
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+default: 115200
+default-by-variant: []
+description: |
+ baud for UARTs
+enabled-by: true
+format: '{}'
+links: []
+name: LPC24XX_UART_BAUD
+type: build
diff --git a/spec/build/bsps/arm/lpc24xx/tstlpc17xxearomint.yml b/spec/build/bsps/arm/lpc24xx/tstlpc17xxearomint.yml
new file mode 100644
index 0000000000..7d60bda27a
--- /dev/null
+++ b/spec/build/bsps/arm/lpc24xx/tstlpc17xxearomint.yml
@@ -0,0 +1,15 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+actions:
+- set-test-state:
+ fsdosfsname01: exclude
+build-type: option
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+default: null
+default-by-variant: []
+description: ''
+enabled-by: true
+links:
+- role: build-dependency
+ uid: ../../tstnoiconv
+type: build
diff --git a/spec/build/bsps/arm/lpc24xx/tstlpc17xxplx800romint.yml b/spec/build/bsps/arm/lpc24xx/tstlpc17xxplx800romint.yml
new file mode 100644
index 0000000000..7d60bda27a
--- /dev/null
+++ b/spec/build/bsps/arm/lpc24xx/tstlpc17xxplx800romint.yml
@@ -0,0 +1,15 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+actions:
+- set-test-state:
+ fsdosfsname01: exclude
+build-type: option
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+default: null
+default-by-variant: []
+description: ''
+enabled-by: true
+links:
+- role: build-dependency
+ uid: ../../tstnoiconv
+type: build
diff --git a/spec/build/bsps/arm/lpc24xx/tstlpc2362.yml b/spec/build/bsps/arm/lpc24xx/tstlpc2362.yml
new file mode 100644
index 0000000000..da7d418688
--- /dev/null
+++ b/spec/build/bsps/arm/lpc24xx/tstlpc2362.yml
@@ -0,0 +1,55 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+actions:
+- set-test-state:
+ block08: exclude
+ capture: exclude
+ cdtest: exclude
+ fileio: exclude
+ fsdosfsformat01: exclude
+ fsrfsbitmap01: exclude
+ fsrofs01: exclude
+ ftp01: exclude
+ iostream: exclude
+ loopback: exclude
+ math: exclude
+ mdosfsfserror: exclude
+ mdosfsfsrdwr: exclude
+ mghttpd01: exclude
+ monitor02: exclude
+ paranoia: exclude
+ pppd: exclude
+ psxaio01: exclude
+ psxaio02: exclude
+ psxaio03: exclude
+ psxsignal07: exclude
+ record01: exclude
+ rtems: exclude
+ shell01: exclude
+ sp16: exclude
+ sp25: exclude
+ sp42: exclude
+ sp48: exclude
+ spcxx01: exclude
+ sptimecounter02: exclude
+ sptimecounter03: exclude
+ sptls02: exclude
+ syscall01: exclude
+ telnetd01: exclude
+ tmcontext01: exclude
+ tmfine01: exclude
+ top: exclude
+ ttest01: exclude
+ utf8proc01: exclude
+build-type: option
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+default: null
+default-by-variant: []
+description: ''
+enabled-by: true
+links:
+- role: build-dependency
+ uid: ../../tstnorfs
+- role: build-dependency
+ uid: ../../tstsmallmem
+type: build
diff --git a/spec/build/bsps/arm/lpc24xx/tstlpc23xxtli800.yml b/spec/build/bsps/arm/lpc24xx/tstlpc23xxtli800.yml
new file mode 100644
index 0000000000..97a1aa3b43
--- /dev/null
+++ b/spec/build/bsps/arm/lpc24xx/tstlpc23xxtli800.yml
@@ -0,0 +1,66 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+actions:
+- set-test-state:
+ block08: exclude
+ capture: exclude
+ cdtest: exclude
+ complex: exclude
+ crypt01: exclude
+ fileio: exclude
+ fsdosfsformat01: exclude
+ fsdosfswrite01: exclude
+ fsrfsbitmap01: exclude
+ fsrofs01: exclude
+ ftp01: exclude
+ iostream: exclude
+ loopback: exclude
+ math: exclude
+ mathf: exclude
+ mdosfsfserror: exclude
+ mdosfsfspatheval: exclude
+ mdosfsfsrdwr: exclude
+ mdosfsfsscandir01: exclude
+ mdosfsfstime: exclude
+ mghttpd01: exclude
+ monitor: exclude
+ monitor02: exclude
+ paranoia: exclude
+ pppd: exclude
+ psxaio01: exclude
+ psxaio02: exclude
+ psxaio03: exclude
+ psxmsgq01: exclude
+ psxsignal07: exclude
+ record01: exclude
+ rtems: exclude
+ shell01: exclude
+ sp16: exclude
+ sp25: exclude
+ sp42: exclude
+ sp48: exclude
+ spcxx01: exclude
+ sptimecounter02: exclude
+ sptimecounter03: exclude
+ sptls02: exclude
+ syscall01: exclude
+ tar01: exclude
+ telnetd01: exclude
+ termios: exclude
+ tmcontext01: exclude
+ tmfine01: exclude
+ top: exclude
+ ttest01: exclude
+ utf8proc01: exclude
+build-type: option
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+default: null
+default-by-variant: []
+description: ''
+enabled-by: true
+links:
+- role: build-dependency
+ uid: ../../tstnorfs
+- role: build-dependency
+ uid: ../../tstsmallmem
+type: build
diff --git a/spec/build/bsps/arm/lpc24xx/tstlpc40xxearomint.yml b/spec/build/bsps/arm/lpc24xx/tstlpc40xxearomint.yml
new file mode 100644
index 0000000000..7d60bda27a
--- /dev/null
+++ b/spec/build/bsps/arm/lpc24xx/tstlpc40xxearomint.yml
@@ -0,0 +1,15 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+actions:
+- set-test-state:
+ fsdosfsname01: exclude
+build-type: option
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+default: null
+default-by-variant: []
+description: ''
+enabled-by: true
+links:
+- role: build-dependency
+ uid: ../../tstnoiconv
+type: build
diff --git a/spec/build/bsps/arm/lpc24xx/tstncsromint.yml b/spec/build/bsps/arm/lpc24xx/tstncsromint.yml
new file mode 100644
index 0000000000..7d60bda27a
--- /dev/null
+++ b/spec/build/bsps/arm/lpc24xx/tstncsromint.yml
@@ -0,0 +1,15 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+actions:
+- set-test-state:
+ fsdosfsname01: exclude
+build-type: option
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+default: null
+default-by-variant: []
+description: ''
+enabled-by: true
+links:
+- role: build-dependency
+ uid: ../../tstnoiconv
+type: build
diff --git a/spec/build/bsps/arm/lpc24xx/tstplx800romint.yml b/spec/build/bsps/arm/lpc24xx/tstplx800romint.yml
new file mode 100644
index 0000000000..7d60bda27a
--- /dev/null
+++ b/spec/build/bsps/arm/lpc24xx/tstplx800romint.yml
@@ -0,0 +1,15 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+actions:
+- set-test-state:
+ fsdosfsname01: exclude
+build-type: option
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+default: null
+default-by-variant: []
+description: ''
+enabled-by: true
+links:
+- role: build-dependency
+ uid: ../../tstnoiconv
+type: build
diff --git a/spec/build/bsps/arm/lpc32xx/abi.yml b/spec/build/bsps/arm/lpc32xx/abi.yml
new file mode 100644
index 0000000000..ae245b4eb0
--- /dev/null
+++ b/spec/build/bsps/arm/lpc32xx/abi.yml
@@ -0,0 +1,18 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+actions:
+- get-string: null
+- split: null
+- env-append: null
+build-type: option
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+default:
+- -mcpu=arm926ej-s
+- -mthumb
+default-by-variant: []
+description: |
+ ABI flags
+enabled-by: true
+links: []
+name: ABI_FLAGS
+type: build
diff --git a/spec/build/bsps/arm/lpc32xx/bsplpc32xxmzx.yml b/spec/build/bsps/arm/lpc32xx/bsplpc32xxmzx.yml
new file mode 100644
index 0000000000..9a9762dd5d
--- /dev/null
+++ b/spec/build/bsps/arm/lpc32xx/bsplpc32xxmzx.yml
@@ -0,0 +1,19 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+arch: arm
+bsp: lpc32xx_mzx
+build-type: bsp
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+enabled-by: true
+family: lpc32xx
+includes: []
+install: []
+links:
+- role: build-dependency
+ uid: grp
+- role: build-dependency
+ uid: ../../opto2
+source: []
+type: build
diff --git a/spec/build/bsps/arm/lpc32xx/bspmzxstage1.yml b/spec/build/bsps/arm/lpc32xx/bspmzxstage1.yml
new file mode 100644
index 0000000000..09a70a0654
--- /dev/null
+++ b/spec/build/bsps/arm/lpc32xx/bspmzxstage1.yml
@@ -0,0 +1,21 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+arch: arm
+bsp: lpc32xx_mzx_stage_1
+build-type: bsp
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+enabled-by: true
+family: lpc32xx
+includes: []
+install: []
+links:
+- role: build-dependency
+ uid: grp
+- role: build-dependency
+ uid: tstmzxstage1
+- role: build-dependency
+ uid: ../../opto2
+source: []
+type: build
diff --git a/spec/build/bsps/arm/lpc32xx/bspmzxstage2.yml b/spec/build/bsps/arm/lpc32xx/bspmzxstage2.yml
new file mode 100644
index 0000000000..ff709b0bc3
--- /dev/null
+++ b/spec/build/bsps/arm/lpc32xx/bspmzxstage2.yml
@@ -0,0 +1,19 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+arch: arm
+bsp: lpc32xx_mzx_stage_2
+build-type: bsp
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+enabled-by: true
+family: lpc32xx
+includes: []
+install: []
+links:
+- role: build-dependency
+ uid: grp
+- role: build-dependency
+ uid: ../../opto2
+source: []
+type: build
diff --git a/spec/build/bsps/arm/lpc32xx/bspphycore.yml b/spec/build/bsps/arm/lpc32xx/bspphycore.yml
new file mode 100644
index 0000000000..74396727d6
--- /dev/null
+++ b/spec/build/bsps/arm/lpc32xx/bspphycore.yml
@@ -0,0 +1,19 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+arch: arm
+bsp: lpc32xx_phycore
+build-type: bsp
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+enabled-by: true
+family: lpc32xx
+includes: []
+install: []
+links:
+- role: build-dependency
+ uid: grp
+- role: build-dependency
+ uid: ../../opto2
+source: []
+type: build
diff --git a/spec/build/bsps/arm/lpc32xx/grp.yml b/spec/build/bsps/arm/lpc32xx/grp.yml
new file mode 100644
index 0000000000..510909428c
--- /dev/null
+++ b/spec/build/bsps/arm/lpc32xx/grp.yml
@@ -0,0 +1,84 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: group
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+enabled-by: true
+includes: []
+install: []
+ldflags: []
+links:
+- role: build-dependency
+ uid: ../grp
+- role: build-dependency
+ uid: abi
+- role: build-dependency
+ uid: obj
+- role: build-dependency
+ uid: objnet
+- role: build-dependency
+ uid: optdismmu
+- role: build-dependency
+ uid: optdisroprot
+- role: build-dependency
+ uid: optdisrwdc
+- role: build-dependency
+ uid: optdmachn
+- role: build-dependency
+ uid: optenwdgrst
+- role: build-dependency
+ uid: optethrmii
+- role: build-dependency
+ uid: optoscmain
+- role: build-dependency
+ uid: optoscrtc
+- role: build-dependency
+ uid: optotgi2c
+- role: build-dependency
+ uid: optotgvbus
+- role: build-dependency
+ uid: optperiphclk
+- role: build-dependency
+ uid: optresetvec
+- role: build-dependency
+ uid: optscratchsz
+- role: build-dependency
+ uid: optstopeth
+- role: build-dependency
+ uid: optstopgpdma
+- role: build-dependency
+ uid: optstopusb
+- role: build-dependency
+ uid: optu3clk
+- role: build-dependency
+ uid: optu4clk
+- role: build-dependency
+ uid: optu5clk
+- role: build-dependency
+ uid: optu6clk
+- role: build-dependency
+ uid: optuart1baud
+- role: build-dependency
+ uid: optuart2baud
+- role: build-dependency
+ uid: optuart3baud
+- role: build-dependency
+ uid: optuart4baud
+- role: build-dependency
+ uid: optuart5baud
+- role: build-dependency
+ uid: optuart6baud
+- role: build-dependency
+ uid: optuart7baud
+- role: build-dependency
+ uid: ../start
+- role: build-dependency
+ uid: ../../linkcmds
+- role: build-dependency
+ uid: ../../obj
+- role: build-dependency
+ uid: ../../objirq
+- role: build-dependency
+ uid: ../../bspopts
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/bsps/arm/lpc32xx/obj.yml b/spec/build/bsps/arm/lpc32xx/obj.yml
new file mode 100644
index 0000000000..70ee86302c
--- /dev/null
+++ b/spec/build/bsps/arm/lpc32xx/obj.yml
@@ -0,0 +1,69 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: objects
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by: true
+includes: []
+install:
+- destination: ${BSP_INCLUDEDIR}
+ source:
+ - bsps/arm/lpc32xx/include/bsp.h
+ - bsps/arm/lpc32xx/include/tm27.h
+- destination: ${BSP_INCLUDEDIR}/bsp
+ source:
+ - bsps/arm/lpc32xx/include/bsp/boot.h
+ - bsps/arm/lpc32xx/include/bsp/emc.h
+ - bsps/arm/lpc32xx/include/bsp/hsu.h
+ - bsps/arm/lpc32xx/include/bsp/i2c.h
+ - bsps/arm/lpc32xx/include/bsp/irq.h
+ - bsps/arm/lpc32xx/include/bsp/lpc-clock-config.h
+ - bsps/arm/lpc32xx/include/bsp/lpc-ethernet-config.h
+ - bsps/arm/lpc32xx/include/bsp/lpc32xx.h
+ - bsps/arm/lpc32xx/include/bsp/mmu.h
+ - bsps/arm/lpc32xx/include/bsp/nand-mlc.h
+- destination: ${BSP_LIBDIR}
+ source:
+ - bsps/arm/lpc32xx/start/linkcmds.lpc32xx
+ - bsps/arm/lpc32xx/start/linkcmds.lpc32xx_mzx
+ - bsps/arm/lpc32xx/start/linkcmds.lpc32xx_mzx_stage_1
+ - bsps/arm/lpc32xx/start/linkcmds.lpc32xx_mzx_stage_2
+ - bsps/arm/lpc32xx/start/linkcmds.lpc32xx_phycore
+links: []
+source:
+- bsps/arm/lpc32xx/console/console-config.c
+- bsps/arm/lpc32xx/console/hsu.c
+- bsps/arm/lpc32xx/i2c/i2c.c
+- bsps/arm/lpc32xx/irq/irq.c
+- bsps/arm/lpc32xx/nand/nand-mlc-erase-block-safe.c
+- bsps/arm/lpc32xx/nand/nand-mlc-read-blocks.c
+- bsps/arm/lpc32xx/nand/nand-mlc-write-blocks.c
+- bsps/arm/lpc32xx/nand/nand-mlc.c
+- bsps/arm/lpc32xx/nand/nand-select.c
+- bsps/arm/lpc32xx/rtc/rtc-config.c
+- bsps/arm/lpc32xx/start/boot.c
+- bsps/arm/lpc32xx/start/bspidle.c
+- bsps/arm/lpc32xx/start/bspreset.c
+- bsps/arm/lpc32xx/start/bspstart.c
+- bsps/arm/lpc32xx/start/bspstarthooks.c
+- bsps/arm/lpc32xx/start/emc.c
+- bsps/arm/lpc32xx/start/restart.c
+- bsps/arm/lpc32xx/start/system-clocks.c
+- bsps/arm/lpc32xx/start/timer.c
+- bsps/arm/shared/cache/cache-cp15.c
+- bsps/arm/shared/clock/clock-nxp-lpc.c
+- bsps/arm/shared/cp15/arm-cp15-set-ttb-entries.c
+- bsps/arm/shared/start/bsp-start-memcpy.S
+- bsps/shared/dev/getentropy/getentropy-cpucounter.c
+- bsps/shared/dev/rtc/rtc-support.c
+- bsps/shared/dev/serial/console-termios-init.c
+- bsps/shared/dev/serial/console-termios.c
+- bsps/shared/dev/serial/uart-output-char.c
+- bsps/shared/irq/irq-default-handler.c
+- bsps/shared/start/bspfatal-default.c
+- bsps/shared/start/bspgetworkarea-default.c
+- bsps/shared/start/sbrk.c
+- bsps/shared/start/stackalloc.c
+type: build
diff --git a/spec/build/bsps/arm/lpc32xx/objnet.yml b/spec/build/bsps/arm/lpc32xx/objnet.yml
new file mode 100644
index 0000000000..8534edceaf
--- /dev/null
+++ b/spec/build/bsps/arm/lpc32xx/objnet.yml
@@ -0,0 +1,16 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: objects
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by:
+- RTEMS_NETWORKING
+includes:
+- cpukit/libnetworking
+install: []
+links: []
+source:
+- bsps/arm/shared/net/lpc-ethernet.c
+type: build
diff --git a/spec/build/bsps/arm/lpc32xx/optdismmu.yml b/spec/build/bsps/arm/lpc32xx/optdismmu.yml
new file mode 100644
index 0000000000..b431f04841
--- /dev/null
+++ b/spec/build/bsps/arm/lpc32xx/optdismmu.yml
@@ -0,0 +1,15 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+actions:
+- get-boolean: null
+- define-condition: null
+build-type: option
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+default: false
+default-by-variant: []
+description: |
+ disable MMU
+enabled-by: true
+links: []
+name: LPC32XX_DISABLE_MMU
+type: build
diff --git a/spec/build/bsps/arm/lpc32xx/optdisroprot.yml b/spec/build/bsps/arm/lpc32xx/optdisroprot.yml
new file mode 100644
index 0000000000..5ce23607b8
--- /dev/null
+++ b/spec/build/bsps/arm/lpc32xx/optdisroprot.yml
@@ -0,0 +1,15 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+actions:
+- get-boolean: null
+- define-condition: null
+build-type: option
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+default: false
+default-by-variant: []
+description: |
+ disable MMU protection of read-only sections
+enabled-by: true
+links: []
+name: LPC32XX_DISABLE_READ_ONLY_PROTECTION
+type: build
diff --git a/spec/build/bsps/arm/lpc32xx/optdisrwdc.yml b/spec/build/bsps/arm/lpc32xx/optdisrwdc.yml
new file mode 100644
index 0000000000..55765c3e8e
--- /dev/null
+++ b/spec/build/bsps/arm/lpc32xx/optdisrwdc.yml
@@ -0,0 +1,15 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+actions:
+- get-boolean: null
+- define-condition: null
+build-type: option
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+default: false
+default-by-variant: []
+description: |
+ disable cache for read-write data sections
+enabled-by: true
+links: []
+name: LPC32XX_DISABLE_READ_WRITE_DATA_CACHE
+type: build
diff --git a/spec/build/bsps/arm/lpc32xx/optdmachn.yml b/spec/build/bsps/arm/lpc32xx/optdmachn.yml
new file mode 100644
index 0000000000..4c826a5f01
--- /dev/null
+++ b/spec/build/bsps/arm/lpc32xx/optdmachn.yml
@@ -0,0 +1,16 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+actions:
+- get-integer: null
+- define: null
+build-type: option
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+default: 8
+default-by-variant: []
+description: |
+ DMA channel count
+enabled-by: true
+format: '{}'
+links: []
+name: LPC_DMA_CHANNEL_COUNT
+type: build
diff --git a/spec/build/bsps/arm/lpc32xx/optenwdgrst.yml b/spec/build/bsps/arm/lpc32xx/optenwdgrst.yml
new file mode 100644
index 0000000000..d36a5c0398
--- /dev/null
+++ b/spec/build/bsps/arm/lpc32xx/optenwdgrst.yml
@@ -0,0 +1,15 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+actions:
+- get-boolean: null
+- define-condition: null
+build-type: option
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+default: true
+default-by-variant: []
+description: |
+ bsp_reset() will use the watchdog to reset the chip
+enabled-by: true
+links: []
+name: LPC32XX_ENABLE_WATCHDOG_RESET
+type: build
diff --git a/spec/build/bsps/arm/lpc32xx/optethrmii.yml b/spec/build/bsps/arm/lpc32xx/optethrmii.yml
new file mode 100644
index 0000000000..ccb4c95abc
--- /dev/null
+++ b/spec/build/bsps/arm/lpc32xx/optethrmii.yml
@@ -0,0 +1,15 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+actions:
+- get-boolean: null
+- define-condition: null
+build-type: option
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+default: true
+default-by-variant: []
+description: |
+ enable RMII for Ethernet
+enabled-by: true
+links: []
+name: LPC32XX_ETHERNET_RMII
+type: build
diff --git a/spec/build/bsps/arm/lpc32xx/optoscmain.yml b/spec/build/bsps/arm/lpc32xx/optoscmain.yml
new file mode 100644
index 0000000000..aadb9b6799
--- /dev/null
+++ b/spec/build/bsps/arm/lpc32xx/optoscmain.yml
@@ -0,0 +1,16 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+actions:
+- get-integer: null
+- define: null
+build-type: option
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+default: 13000000
+default-by-variant: []
+description: |
+ main oscillator frequency in Hz
+enabled-by: true
+format: '{}'
+links: []
+name: LPC32XX_OSCILLATOR_MAIN
+type: build
diff --git a/spec/build/bsps/arm/lpc32xx/optoscrtc.yml b/spec/build/bsps/arm/lpc32xx/optoscrtc.yml
new file mode 100644
index 0000000000..09aab2d9c6
--- /dev/null
+++ b/spec/build/bsps/arm/lpc32xx/optoscrtc.yml
@@ -0,0 +1,16 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+actions:
+- get-integer: null
+- define: null
+build-type: option
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+default: 32768
+default-by-variant: []
+description: |
+ RTC oscillator frequency in Hz
+enabled-by: true
+format: '{}'
+links: []
+name: LPC32XX_OSCILLATOR_RTC
+type: build
diff --git a/spec/build/bsps/arm/lpc32xx/optotgi2c.yml b/spec/build/bsps/arm/lpc32xx/optotgi2c.yml
new file mode 100644
index 0000000000..72137d9c27
--- /dev/null
+++ b/spec/build/bsps/arm/lpc32xx/optotgi2c.yml
@@ -0,0 +1,19 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+actions:
+- get-integer: null
+- define: null
+build-type: option
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+default: 0
+default-by-variant:
+- value: 88
+ variants:
+ - arm/lpc32xx_mzx.*
+description: |
+ USB OTG transceiver I2C address used by USB stack
+enabled-by: true
+format: '{:#010x}'
+links: []
+name: BSP_USB_OTG_TRANSCEIVER_I2C_ADDR
+type: build
diff --git a/spec/build/bsps/arm/lpc32xx/optotgvbus.yml b/spec/build/bsps/arm/lpc32xx/optotgvbus.yml
new file mode 100644
index 0000000000..0d9d6b65f5
--- /dev/null
+++ b/spec/build/bsps/arm/lpc32xx/optotgvbus.yml
@@ -0,0 +1,19 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+actions:
+- get-string: null
+- define-unquoted: null
+build-type: option
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+default: false
+default-by-variant:
+- value: USB_OTG_VBUS_POWER_WITH_CHARGE_PUMP
+ variants:
+ - arm/lpc32xx_mzx.*
+description: |
+ USB OTG transceiver VBUS policy
+enabled-by: true
+format: '{}'
+links: []
+name: BSP_USB_OTG_TRANSCEIVER_VBUS
+type: build
diff --git a/spec/build/bsps/arm/lpc32xx/optperiphclk.yml b/spec/build/bsps/arm/lpc32xx/optperiphclk.yml
new file mode 100644
index 0000000000..70be8d51bf
--- /dev/null
+++ b/spec/build/bsps/arm/lpc32xx/optperiphclk.yml
@@ -0,0 +1,16 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+actions:
+- get-integer: null
+- define: null
+build-type: option
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+default: 13000000
+default-by-variant: []
+description: |
+ peripheral clock in Hz
+enabled-by: true
+format: '{}'
+links: []
+name: LPC32XX_PERIPH_CLK
+type: build
diff --git a/spec/build/bsps/arm/lpc32xx/optresetvec.yml b/spec/build/bsps/arm/lpc32xx/optresetvec.yml
new file mode 100644
index 0000000000..efd1ea2b2a
--- /dev/null
+++ b/spec/build/bsps/arm/lpc32xx/optresetvec.yml
@@ -0,0 +1,15 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+actions:
+- get-boolean: null
+- define-condition: null
+build-type: option
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+default: false
+default-by-variant: []
+description: |
+ reset vector address for BSP start
+enabled-by: true
+links: []
+name: BSP_START_RESET_VECTOR
+type: build
diff --git a/spec/build/bsps/arm/lpc32xx/optscratchsz.yml b/spec/build/bsps/arm/lpc32xx/optscratchsz.yml
new file mode 100644
index 0000000000..c54f1ae7b3
--- /dev/null
+++ b/spec/build/bsps/arm/lpc32xx/optscratchsz.yml
@@ -0,0 +1,19 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+actions:
+- get-integer: null
+- define: null
+build-type: option
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+default: 0
+default-by-variant:
+- value: 4096
+ variants:
+ - arm/lpc32xx_mzx.*
+description: |
+ size of scratch area
+enabled-by: true
+format: '{}'
+links: []
+name: LPC32XX_SCRATCH_AREA_SIZE
+type: build
diff --git a/spec/build/bsps/arm/lpc32xx/optstopeth.yml b/spec/build/bsps/arm/lpc32xx/optstopeth.yml
new file mode 100644
index 0000000000..2d430a1862
--- /dev/null
+++ b/spec/build/bsps/arm/lpc32xx/optstopeth.yml
@@ -0,0 +1,15 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+actions:
+- get-boolean: null
+- define-condition: null
+build-type: option
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+default: true
+default-by-variant: []
+description: |
+ stop Ethernet controller at start-up to avoid DMA interference
+enabled-by: true
+links: []
+name: LPC32XX_STOP_ETHERNET
+type: build
diff --git a/spec/build/bsps/arm/lpc32xx/optstopgpdma.yml b/spec/build/bsps/arm/lpc32xx/optstopgpdma.yml
new file mode 100644
index 0000000000..5096cc48a9
--- /dev/null
+++ b/spec/build/bsps/arm/lpc32xx/optstopgpdma.yml
@@ -0,0 +1,15 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+actions:
+- get-boolean: null
+- define-condition: null
+build-type: option
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+default: true
+default-by-variant: []
+description: |
+ stop general purpose DMA at start-up to avoid DMA interference
+enabled-by: true
+links: []
+name: LPC32XX_STOP_GPDMA
+type: build
diff --git a/spec/build/bsps/arm/lpc32xx/optstopusb.yml b/spec/build/bsps/arm/lpc32xx/optstopusb.yml
new file mode 100644
index 0000000000..e2bbc72f5f
--- /dev/null
+++ b/spec/build/bsps/arm/lpc32xx/optstopusb.yml
@@ -0,0 +1,15 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+actions:
+- get-boolean: null
+- define-condition: null
+build-type: option
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+default: true
+default-by-variant: []
+description: |
+ stop USB controller at start-up to avoid DMA interference
+enabled-by: true
+links: []
+name: LPC32XX_STOP_USB
+type: build
diff --git a/spec/build/bsps/arm/lpc32xx/optu3clk.yml b/spec/build/bsps/arm/lpc32xx/optu3clk.yml
new file mode 100644
index 0000000000..e8aa25671f
--- /dev/null
+++ b/spec/build/bsps/arm/lpc32xx/optu3clk.yml
@@ -0,0 +1,16 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+actions:
+- get-integer: null
+- define: null
+build-type: option
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+default: 4998
+default-by-variant: []
+description: |
+ clock configuration for UART 3
+enabled-by: true
+format: '{:#010x}'
+links: []
+name: LPC32XX_CONFIG_U3CLK
+type: build
diff --git a/spec/build/bsps/arm/lpc32xx/optu4clk.yml b/spec/build/bsps/arm/lpc32xx/optu4clk.yml
new file mode 100644
index 0000000000..19c36967e1
--- /dev/null
+++ b/spec/build/bsps/arm/lpc32xx/optu4clk.yml
@@ -0,0 +1,16 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+actions:
+- get-integer: null
+- define: null
+build-type: option
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+default: 4998
+default-by-variant: []
+description: |
+ clock configuration for UART 4
+enabled-by: true
+format: '{:#010x}'
+links: []
+name: LPC32XX_CONFIG_U4CLK
+type: build
diff --git a/spec/build/bsps/arm/lpc32xx/optu5clk.yml b/spec/build/bsps/arm/lpc32xx/optu5clk.yml
new file mode 100644
index 0000000000..66a67dea95
--- /dev/null
+++ b/spec/build/bsps/arm/lpc32xx/optu5clk.yml
@@ -0,0 +1,16 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+actions:
+- get-integer: null
+- define: null
+build-type: option
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+default: 4998
+default-by-variant: []
+description: |
+ clock configuration for UART 5
+enabled-by: true
+format: '{:#010x}'
+links: []
+name: LPC32XX_CONFIG_U5CLK
+type: build
diff --git a/spec/build/bsps/arm/lpc32xx/optu6clk.yml b/spec/build/bsps/arm/lpc32xx/optu6clk.yml
new file mode 100644
index 0000000000..364e3143f9
--- /dev/null
+++ b/spec/build/bsps/arm/lpc32xx/optu6clk.yml
@@ -0,0 +1,16 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+actions:
+- get-integer: null
+- define: null
+build-type: option
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+default: 4998
+default-by-variant: []
+description: |
+ clock configuration for UART 6
+enabled-by: true
+format: '{:#010x}'
+links: []
+name: LPC32XX_CONFIG_U6CLK
+type: build
diff --git a/spec/build/bsps/arm/lpc32xx/optuart1baud.yml b/spec/build/bsps/arm/lpc32xx/optuart1baud.yml
new file mode 100644
index 0000000000..d0b7a546db
--- /dev/null
+++ b/spec/build/bsps/arm/lpc32xx/optuart1baud.yml
@@ -0,0 +1,15 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+actions:
+- get-boolean: null
+- define-condition: null
+build-type: option
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+default: false
+default-by-variant: []
+description: |
+ baud for UART 1
+enabled-by: true
+links: []
+name: LPC32XX_UART_1_BAUD
+type: build
diff --git a/spec/build/bsps/arm/lpc32xx/optuart2baud.yml b/spec/build/bsps/arm/lpc32xx/optuart2baud.yml
new file mode 100644
index 0000000000..5bdf8be11b
--- /dev/null
+++ b/spec/build/bsps/arm/lpc32xx/optuart2baud.yml
@@ -0,0 +1,15 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+actions:
+- get-boolean: null
+- define-condition: null
+build-type: option
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+default: false
+default-by-variant: []
+description: |
+ baud for UART 2
+enabled-by: true
+links: []
+name: LPC32XX_UART_2_BAUD
+type: build
diff --git a/spec/build/bsps/arm/lpc32xx/optuart3baud.yml b/spec/build/bsps/arm/lpc32xx/optuart3baud.yml
new file mode 100644
index 0000000000..95e63cf56e
--- /dev/null
+++ b/spec/build/bsps/arm/lpc32xx/optuart3baud.yml
@@ -0,0 +1,16 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+actions:
+- get-integer: null
+- define: null
+build-type: option
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+default: 115200
+default-by-variant: []
+description: |
+ baud for UART 3
+enabled-by: true
+format: '{}'
+links: []
+name: LPC32XX_UART_3_BAUD
+type: build
diff --git a/spec/build/bsps/arm/lpc32xx/optuart4baud.yml b/spec/build/bsps/arm/lpc32xx/optuart4baud.yml
new file mode 100644
index 0000000000..d210bd3c6b
--- /dev/null
+++ b/spec/build/bsps/arm/lpc32xx/optuart4baud.yml
@@ -0,0 +1,16 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+actions:
+- get-integer: null
+- define: null
+build-type: option
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+default: 115200
+default-by-variant: []
+description: |
+ baud for UART 4
+enabled-by: true
+format: '{}'
+links: []
+name: LPC32XX_UART_4_BAUD
+type: build
diff --git a/spec/build/bsps/arm/lpc32xx/optuart5baud.yml b/spec/build/bsps/arm/lpc32xx/optuart5baud.yml
new file mode 100644
index 0000000000..0021d5c9ed
--- /dev/null
+++ b/spec/build/bsps/arm/lpc32xx/optuart5baud.yml
@@ -0,0 +1,16 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+actions:
+- get-integer: null
+- define: null
+build-type: option
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+default: 115200
+default-by-variant: []
+description: |
+ baud for UART 5
+enabled-by: true
+format: '{}'
+links: []
+name: LPC32XX_UART_5_BAUD
+type: build
diff --git a/spec/build/bsps/arm/lpc32xx/optuart6baud.yml b/spec/build/bsps/arm/lpc32xx/optuart6baud.yml
new file mode 100644
index 0000000000..dc856fa33e
--- /dev/null
+++ b/spec/build/bsps/arm/lpc32xx/optuart6baud.yml
@@ -0,0 +1,16 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+actions:
+- get-integer: null
+- define: null
+build-type: option
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+default: 115200
+default-by-variant: []
+description: |
+ baud for UART 6
+enabled-by: true
+format: '{}'
+links: []
+name: LPC32XX_UART_6_BAUD
+type: build
diff --git a/spec/build/bsps/arm/lpc32xx/optuart7baud.yml b/spec/build/bsps/arm/lpc32xx/optuart7baud.yml
new file mode 100644
index 0000000000..867d534e57
--- /dev/null
+++ b/spec/build/bsps/arm/lpc32xx/optuart7baud.yml
@@ -0,0 +1,15 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+actions:
+- get-boolean: null
+- define-condition: null
+build-type: option
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+default: false
+default-by-variant: []
+description: |
+ baud for UART 7
+enabled-by: true
+links: []
+name: LPC32XX_UART_7_BAUD
+type: build
diff --git a/spec/build/bsps/arm/lpc32xx/tstmzxstage1.yml b/spec/build/bsps/arm/lpc32xx/tstmzxstage1.yml
new file mode 100644
index 0000000000..0bb2da517c
--- /dev/null
+++ b/spec/build/bsps/arm/lpc32xx/tstmzxstage1.yml
@@ -0,0 +1,23 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+actions:
+- set-test-state:
+ fileio: exclude
+ ftp01: exclude
+ iostream: exclude
+ mghttpd01: exclude
+ monitor02: exclude
+ pppd: exclude
+ rtems: exclude
+ sp71: exclude
+ utf8proc01: exclude
+build-type: option
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+default: null
+default-by-variant: []
+description: ''
+enabled-by: true
+links:
+- role: build-dependency
+ uid: ../../tstsmallmem
+type: build
diff --git a/spec/build/bsps/arm/opta9periphclk.yml b/spec/build/bsps/arm/opta9periphclk.yml
new file mode 100644
index 0000000000..8d8c240606
--- /dev/null
+++ b/spec/build/bsps/arm/opta9periphclk.yml
@@ -0,0 +1,24 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+actions:
+- get-integer: null
+- assert-uint32: null
+- env-assign: null
+- define: null
+build-type: option
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+default: 100000000
+default-by-variant:
+- value: 333333333
+ variants:
+ - arm/xilinx_zynq_zc702
+- value: 666666667
+ variants:
+ - arm/xilinx_zynq_zedboard
+description: |
+ ARM Cortex-A9 MPCore PERIPHCLK clock frequency in Hz
+enabled-by: true
+format: '{}'
+links: []
+name: BSP_ARM_A9MPCORE_PERIPHCLK
+type: build
diff --git a/spec/build/bsps/arm/optmmusmallpages.yml b/spec/build/bsps/arm/optmmusmallpages.yml
new file mode 100644
index 0000000000..a080dec5c6
--- /dev/null
+++ b/spec/build/bsps/arm/optmmusmallpages.yml
@@ -0,0 +1,17 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+actions:
+- get-boolean: null
+- env-assign: null
+- define-condition: null
+build-type: option
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+default: true
+default-by-variant: []
+description: |
+ Use MMU with small pages (4KiB)
+enabled-by: true
+format: '{}'
+links: []
+name: ARM_MMU_USE_SMALL_PAGES
+type: build
diff --git a/spec/build/bsps/arm/optmmusz.yml b/spec/build/bsps/arm/optmmusz.yml
new file mode 100644
index 0000000000..64c97be60a
--- /dev/null
+++ b/spec/build/bsps/arm/optmmusz.yml
@@ -0,0 +1,21 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+actions:
+- get-integer: null
+- assert-ge: 16384
+- assert-le: 33554432
+- env-assign: null
+- format-and-define: null
+build-type: option
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+default: 16384
+default-by-variant: []
+description: |
+ Defines the size of the MMU translation table in bytes. The translation
+ table size depends on the configured MMU granularity, for example 4KiB pages
+ or 1MiB sections.
+enabled-by: true
+format: '{:#010x}'
+links: []
+name: ARM_MMU_TRANSLATION_TABLE_SIZE
+type: build
diff --git a/spec/build/bsps/arm/raspberrypi/abi.yml b/spec/build/bsps/arm/raspberrypi/abi.yml
new file mode 100644
index 0000000000..66459a1e1b
--- /dev/null
+++ b/spec/build/bsps/arm/raspberrypi/abi.yml
@@ -0,0 +1,25 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+actions:
+- get-string: null
+- split: null
+- env-append: null
+build-type: option
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+default:
+- -march=armv7-a
+- -mthumb
+- -mfpu=neon
+- -mfloat-abi=hard
+- -mtune=cortex-a7
+default-by-variant:
+- value:
+ - -mcpu=arm1176jzf-s
+ variants:
+ - arm/raspberrypi
+description: |
+ ABI flags
+enabled-by: true
+links: []
+name: ABI_FLAGS
+type: build
diff --git a/spec/build/bsps/arm/raspberrypi/bspraspberrypi.yml b/spec/build/bsps/arm/raspberrypi/bspraspberrypi.yml
new file mode 100644
index 0000000000..ceef1d06e0
--- /dev/null
+++ b/spec/build/bsps/arm/raspberrypi/bspraspberrypi.yml
@@ -0,0 +1,19 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+arch: arm
+bsp: raspberrypi
+build-type: bsp
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+enabled-by: true
+family: raspberrypi
+includes: []
+install: []
+links:
+- role: build-dependency
+ uid: grp
+- role: build-dependency
+ uid: ../../opto2
+source: []
+type: build
diff --git a/spec/build/bsps/arm/raspberrypi/bspraspberrypi2.yml b/spec/build/bsps/arm/raspberrypi/bspraspberrypi2.yml
new file mode 100644
index 0000000000..5f604aa42f
--- /dev/null
+++ b/spec/build/bsps/arm/raspberrypi/bspraspberrypi2.yml
@@ -0,0 +1,19 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+arch: arm
+bsp: raspberrypi2
+build-type: bsp
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+enabled-by: true
+family: raspberrypi
+includes: []
+install: []
+links:
+- role: build-dependency
+ uid: grp
+- role: build-dependency
+ uid: ../../opto2
+source: []
+type: build
diff --git a/spec/build/bsps/arm/raspberrypi/grp.yml b/spec/build/bsps/arm/raspberrypi/grp.yml
new file mode 100644
index 0000000000..e28f387c8d
--- /dev/null
+++ b/spec/build/bsps/arm/raspberrypi/grp.yml
@@ -0,0 +1,46 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: group
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+enabled-by: true
+includes: []
+install: []
+ldflags: []
+links:
+- role: build-dependency
+ uid: ../grp
+- role: build-dependency
+ uid: abi
+- role: build-dependency
+ uid: obj
+- role: build-dependency
+ uid: objsmp
+- role: build-dependency
+ uid: optenhyp
+- role: build-dependency
+ uid: opti2ciomode
+- role: build-dependency
+ uid: ../optmmusz
+- role: build-dependency
+ uid: optnocachelen
+- role: build-dependency
+ uid: optramlen
+- role: build-dependency
+ uid: optresetvec
+- role: build-dependency
+ uid: optrpi2
+- role: build-dependency
+ uid: optspiiomode
+- role: build-dependency
+ uid: ../start
+- role: build-dependency
+ uid: ../../obj
+- role: build-dependency
+ uid: ../../objirq
+- role: build-dependency
+ uid: linkcmds
+- role: build-dependency
+ uid: ../../bspopts
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/bsps/arm/raspberrypi/linkcmds.yml b/spec/build/bsps/arm/raspberrypi/linkcmds.yml
new file mode 100644
index 0000000000..100d593757
--- /dev/null
+++ b/spec/build/bsps/arm/raspberrypi/linkcmds.yml
@@ -0,0 +1,43 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: config-file
+content: |
+ MEMORY {
+ RAM_MMU (AIW) : ORIGIN = 0x00100000, LENGTH = ${ARM_MMU_TRANSLATION_TABLE_SIZE}
+ RAM (AIW) : ORIGIN = 0x00200000, LENGTH = ${RPI_RAM_LENGTH_AVAILABLE} - ${RPI_RAM_NOCACHE_LENGTH}
+ }
+
+ REGION_ALIAS ("REGION_START", RAM);
+ REGION_ALIAS ("REGION_VECTOR", RAM);
+ REGION_ALIAS ("REGION_TEXT", RAM);
+ REGION_ALIAS ("REGION_TEXT_LOAD", RAM);
+ REGION_ALIAS ("REGION_RODATA", RAM);
+ REGION_ALIAS ("REGION_RODATA_LOAD", RAM);
+ REGION_ALIAS ("REGION_DATA", RAM);
+ REGION_ALIAS ("REGION_DATA_LOAD", RAM);
+ REGION_ALIAS ("REGION_FAST_TEXT", RAM);
+ REGION_ALIAS ("REGION_FAST_TEXT_LOAD", RAM);
+ REGION_ALIAS ("REGION_FAST_DATA", RAM);
+ REGION_ALIAS ("REGION_FAST_DATA_LOAD", RAM);
+ REGION_ALIAS ("REGION_BSS", RAM);
+ REGION_ALIAS ("REGION_WORK", RAM);
+ REGION_ALIAS ("REGION_STACK", RAM);
+ REGION_ALIAS ("REGION_NOCACHE", RAM);
+ REGION_ALIAS ("REGION_NOCACHE_LOAD", RAM);
+
+ bsp_stack_abt_size = DEFINED (bsp_stack_abt_size) ? bsp_stack_abt_size : 1024;
+
+ bsp_section_rwbarrier_align = DEFINED (bsp_section_rwbarrier_align) ? bsp_section_rwbarrier_align : 1M;
+
+ bsp_vector_table_in_start_section = 1;
+
+ bsp_translation_table_base = ORIGIN (RAM_MMU);
+ bsp_translation_table_end = ORIGIN (RAM_MMU) + LENGTH (RAM_MMU);
+
+ INCLUDE linkcmds.armv4
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+enabled-by: true
+install-path: ${BSP_LIBDIR}
+links: []
+target: linkcmds
+type: build
diff --git a/spec/build/bsps/arm/raspberrypi/obj.yml b/spec/build/bsps/arm/raspberrypi/obj.yml
new file mode 100644
index 0000000000..45180cdd5f
--- /dev/null
+++ b/spec/build/bsps/arm/raspberrypi/obj.yml
@@ -0,0 +1,61 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: objects
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by: true
+includes: []
+install:
+- destination: ${BSP_INCLUDEDIR}
+ source:
+ - bsps/arm/raspberrypi/include/bsp.h
+ - bsps/arm/raspberrypi/include/tm27.h
+- destination: ${BSP_INCLUDEDIR}/bsp
+ source:
+ - bsps/arm/raspberrypi/include/bsp/fbcons.h
+ - bsps/arm/raspberrypi/include/bsp/i2c.h
+ - bsps/arm/raspberrypi/include/bsp/irq.h
+ - bsps/arm/raspberrypi/include/bsp/mailbox.h
+ - bsps/arm/raspberrypi/include/bsp/mmu.h
+ - bsps/arm/raspberrypi/include/bsp/raspberrypi.h
+ - bsps/arm/raspberrypi/include/bsp/rpi-fb.h
+ - bsps/arm/raspberrypi/include/bsp/rpi-gpio.h
+ - bsps/arm/raspberrypi/include/bsp/spi.h
+ - bsps/arm/raspberrypi/include/bsp/usart.h
+ - bsps/arm/raspberrypi/include/bsp/vc.h
+links: []
+source:
+- bsps/arm/raspberrypi/clock/clockdrv.c
+- bsps/arm/raspberrypi/console/console-config.c
+- bsps/arm/raspberrypi/console/fb.c
+- bsps/arm/raspberrypi/console/fbcons.c
+- bsps/arm/raspberrypi/console/outch.c
+- bsps/arm/raspberrypi/gpio/rpi-gpio.c
+- bsps/arm/raspberrypi/i2c/i2c.c
+- bsps/arm/raspberrypi/irq/irq.c
+- bsps/arm/raspberrypi/spi/spi.c
+- bsps/arm/raspberrypi/start/bspreset.c
+- bsps/arm/raspberrypi/start/bspstart.c
+- bsps/arm/raspberrypi/start/bspstarthooks.c
+- bsps/arm/raspberrypi/start/cmdline.c
+- bsps/arm/raspberrypi/start/mailbox.c
+- bsps/arm/raspberrypi/start/timer.c
+- bsps/arm/raspberrypi/start/vc.c
+- bsps/arm/shared/cache/cache-cp15.c
+- bsps/arm/shared/cache/cache-v7ar-disable-data.S
+- bsps/arm/shared/cp15/arm-cp15-set-exception-handler.c
+- bsps/arm/shared/cp15/arm-cp15-set-ttb-entries.c
+- bsps/arm/shared/serial/arm-pl011.c
+- bsps/arm/shared/start/bsp-start-memcpy.S
+- bsps/shared/dev/cpucounter/cpucounterfrequency.c
+- bsps/shared/dev/cpucounter/cpucounterread.c
+- bsps/shared/dev/getentropy/getentropy-cpucounter.c
+- bsps/shared/dev/gpio/gpio-support.c
+- bsps/shared/dev/serial/console-termios.c
+- bsps/shared/start/bspfatal-default.c
+- bsps/shared/start/bsp-fdt.c
+- bsps/shared/start/sbrk.c
+- bsps/shared/start/stackalloc.c
+type: build
diff --git a/spec/build/bsps/arm/raspberrypi/objsmp.yml b/spec/build/bsps/arm/raspberrypi/objsmp.yml
new file mode 100644
index 0000000000..547c39abf5
--- /dev/null
+++ b/spec/build/bsps/arm/raspberrypi/objsmp.yml
@@ -0,0 +1,16 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: objects
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by:
+- RTEMS_SMP
+includes: []
+install: []
+links: []
+source:
+- bsps/arm/raspberrypi/start/bspsmp.c
+- bsps/arm/raspberrypi/start/bspsmp_init.c
+type: build
diff --git a/spec/build/bsps/arm/raspberrypi/optenhyp.yml b/spec/build/bsps/arm/raspberrypi/optenhyp.yml
new file mode 100644
index 0000000000..b9b9cb89ae
--- /dev/null
+++ b/spec/build/bsps/arm/raspberrypi/optenhyp.yml
@@ -0,0 +1,15 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+actions:
+- get-boolean: null
+- define-condition: null
+build-type: option
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+default: true
+default-by-variant: []
+description: |
+ Support start of BSP in ARM HYP mode
+enabled-by: true
+links: []
+name: BSP_START_IN_HYP_SUPPORT
+type: build
diff --git a/spec/build/bsps/arm/raspberrypi/opti2ciomode.yml b/spec/build/bsps/arm/raspberrypi/opti2ciomode.yml
new file mode 100644
index 0000000000..82ba37dc4d
--- /dev/null
+++ b/spec/build/bsps/arm/raspberrypi/opti2ciomode.yml
@@ -0,0 +1,15 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+actions:
+- get-boolean: null
+- define-condition: null
+build-type: option
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+default: true
+default-by-variant: []
+description: |
+ Define to 1 to use interrupt-driven I/O with the Raspberry Pi I2C bus. If defined to other value the access will be polled-driven.
+enabled-by: true
+links: []
+name: I2C_IO_MODE
+type: build
diff --git a/spec/build/bsps/arm/raspberrypi/optnocachelen.yml b/spec/build/bsps/arm/raspberrypi/optnocachelen.yml
new file mode 100644
index 0000000000..b9d9071b17
--- /dev/null
+++ b/spec/build/bsps/arm/raspberrypi/optnocachelen.yml
@@ -0,0 +1,18 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+actions:
+- get-integer: null
+- assert-uint32: null
+- env-assign: null
+- format-and-define: null
+build-type: option
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+default: 2097152
+default-by-variant: []
+description: |
+ No-cache region length
+enabled-by: true
+format: '{:#010x}'
+links: []
+name: RPI_RAM_NOCACHE_LENGTH
+type: build
diff --git a/spec/build/bsps/arm/raspberrypi/optramlen.yml b/spec/build/bsps/arm/raspberrypi/optramlen.yml
new file mode 100644
index 0000000000..040d514dad
--- /dev/null
+++ b/spec/build/bsps/arm/raspberrypi/optramlen.yml
@@ -0,0 +1,18 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+actions:
+- get-integer: null
+- assert-uint32: null
+- env-assign: null
+- format-and-define: null
+build-type: option
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+default: 268435456
+default-by-variant: []
+description: |
+ RAM region length
+enabled-by: true
+format: '{:#010x}'
+links: []
+name: RPI_RAM_LENGTH_AVAILABLE
+type: build
diff --git a/spec/build/bsps/arm/raspberrypi/optresetvec.yml b/spec/build/bsps/arm/raspberrypi/optresetvec.yml
new file mode 100644
index 0000000000..efd1ea2b2a
--- /dev/null
+++ b/spec/build/bsps/arm/raspberrypi/optresetvec.yml
@@ -0,0 +1,15 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+actions:
+- get-boolean: null
+- define-condition: null
+build-type: option
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+default: false
+default-by-variant: []
+description: |
+ reset vector address for BSP start
+enabled-by: true
+links: []
+name: BSP_START_RESET_VECTOR
+type: build
diff --git a/spec/build/bsps/arm/raspberrypi/optrpi2.yml b/spec/build/bsps/arm/raspberrypi/optrpi2.yml
new file mode 100644
index 0000000000..08e3a1e381
--- /dev/null
+++ b/spec/build/bsps/arm/raspberrypi/optrpi2.yml
@@ -0,0 +1,18 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+actions:
+- get-boolean: null
+- define-condition: null
+build-type: option
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+default: false
+default-by-variant:
+- value: true
+ variants:
+ - arm/raspberrypi2
+description: |
+ Set if the BSP variant is Raspberry Pi 2.
+enabled-by: true
+links: []
+name: BSP_IS_RPI2
+type: build
diff --git a/spec/build/bsps/arm/raspberrypi/optspiiomode.yml b/spec/build/bsps/arm/raspberrypi/optspiiomode.yml
new file mode 100644
index 0000000000..bb0b94a683
--- /dev/null
+++ b/spec/build/bsps/arm/raspberrypi/optspiiomode.yml
@@ -0,0 +1,15 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+actions:
+- get-boolean: null
+- define-condition: null
+build-type: option
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+default: true
+default-by-variant: []
+description: |
+ Define to 1 to use interrupt-driven I/O with the Raspberry Pi SPI bus. If defined to other value the access will be polled-driven.
+enabled-by: true
+links: []
+name: SPI_IO_MODE
+type: build
diff --git a/spec/build/bsps/arm/realview-pbx-a9/abi.yml b/spec/build/bsps/arm/realview-pbx-a9/abi.yml
new file mode 100644
index 0000000000..a3a710c97d
--- /dev/null
+++ b/spec/build/bsps/arm/realview-pbx-a9/abi.yml
@@ -0,0 +1,21 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+actions:
+- get-string: null
+- split: null
+- env-append: null
+build-type: option
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+default:
+- -march=armv7-a
+- -mthumb
+- -mfpu=neon
+- -mfloat-abi=hard
+- -mtune=cortex-a9
+default-by-variant: []
+description: |
+ ABI flags
+enabled-by: true
+links: []
+name: ABI_FLAGS
+type: build
diff --git a/spec/build/bsps/arm/realview-pbx-a9/bsprealviewpbxa9.yml b/spec/build/bsps/arm/realview-pbx-a9/bsprealviewpbxa9.yml
new file mode 100644
index 0000000000..2721152b93
--- /dev/null
+++ b/spec/build/bsps/arm/realview-pbx-a9/bsprealviewpbxa9.yml
@@ -0,0 +1,84 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+arch: arm
+bsp: realview_pbx_a9_qemu
+build-type: bsp
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+enabled-by: true
+family: realview-pbx-a9
+includes: []
+install:
+- destination: ${BSP_INCLUDEDIR}
+ source:
+ - bsps/arm/realview-pbx-a9/include/bsp.h
+ - bsps/arm/realview-pbx-a9/include/tm27.h
+- destination: ${BSP_INCLUDEDIR}/bsp
+ source:
+ - bsps/arm/realview-pbx-a9/include/bsp/console.h
+ - bsps/arm/realview-pbx-a9/include/bsp/irq.h
+- destination: ${BSP_LIBDIR}
+ source:
+ - bsps/arm/realview-pbx-a9/start/linkcmds.realview_pbx_a9_qemu
+links:
+- role: build-dependency
+ uid: ../grp
+- role: build-dependency
+ uid: abi
+- role: build-dependency
+ uid: objsmp
+- role: build-dependency
+ uid: opta9periphclk
+- role: build-dependency
+ uid: optcachedata
+- role: build-dependency
+ uid: optcacheinst
+- role: build-dependency
+ uid: optclkbootcpu
+- role: build-dependency
+ uid: optclkfastidle
+- role: build-dependency
+ uid: optmmusmallpages
+- role: build-dependency
+ uid: optresetvec
+- role: build-dependency
+ uid: ../start
+- role: build-dependency
+ uid: ../../linkcmds
+- role: build-dependency
+ uid: ../../obj
+- role: build-dependency
+ uid: ../../objirq
+- role: build-dependency
+ uid: ../../opto0
+- role: build-dependency
+ uid: ../../bspopts
+source:
+- bsps/arm/realview-pbx-a9/console/console-config.c
+- bsps/arm/realview-pbx-a9/console/console-polled.c
+- bsps/arm/realview-pbx-a9/start/bspreset.c
+- bsps/arm/realview-pbx-a9/start/bspstart.c
+- bsps/arm/realview-pbx-a9/start/bspstarthooks.c
+- bsps/arm/realview-pbx-a9/start/fb-config.c
+- bsps/arm/shared/cache/cache-cp15.c
+- bsps/arm/shared/cache/cache-v7ar-disable-data.S
+- bsps/arm/shared/clock/clock-a9mpcore.c
+- bsps/arm/shared/cp15/arm-cp15-set-exception-handler.c
+- bsps/arm/shared/cp15/arm-cp15-set-ttb-entries.c
+- bsps/arm/shared/fb/arm-pl111.c
+- bsps/arm/shared/irq/irq-gic.c
+- bsps/arm/shared/serial/arm-pl011.c
+- bsps/arm/shared/serial/arm-pl050.c
+- bsps/arm/shared/start/bsp-start-memcpy.S
+- bsps/shared/dev/btimer/btimer-stub.c
+- bsps/shared/dev/getentropy/getentropy-cpucounter.c
+- bsps/shared/dev/serial/console-termios-init.c
+- bsps/shared/dev/serial/console-termios.c
+- bsps/shared/dev/serial/getserialmouseps2.c
+- bsps/shared/irq/irq-default-handler.c
+- bsps/shared/start/bspfatal-default.c
+- bsps/shared/start/bspgetworkarea-default.c
+- bsps/shared/start/sbrk.c
+- bsps/shared/start/stackalloc.c
+type: build
diff --git a/spec/build/bsps/arm/realview-pbx-a9/objsmp.yml b/spec/build/bsps/arm/realview-pbx-a9/objsmp.yml
new file mode 100644
index 0000000000..0c1ac9e6bb
--- /dev/null
+++ b/spec/build/bsps/arm/realview-pbx-a9/objsmp.yml
@@ -0,0 +1,16 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: objects
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by:
+- RTEMS_SMP
+includes: []
+install: []
+links: []
+source:
+- bsps/arm/realview-pbx-a9/start/bspsmp.c
+- bsps/arm/shared/start/arm-a9mpcore-smp.c
+type: build
diff --git a/spec/build/bsps/arm/realview-pbx-a9/opta9periphclk.yml b/spec/build/bsps/arm/realview-pbx-a9/opta9periphclk.yml
new file mode 100644
index 0000000000..3ab2b72830
--- /dev/null
+++ b/spec/build/bsps/arm/realview-pbx-a9/opta9periphclk.yml
@@ -0,0 +1,16 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+actions:
+- get-integer: null
+- define: null
+build-type: option
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+default: 100000000
+default-by-variant: []
+description: |
+ ARM Cortex-A9 MPCore PERIPHCLK clock frequency in Hz
+enabled-by: true
+format: '{}'
+links: []
+name: BSP_ARM_A9MPCORE_PERIPHCLK
+type: build
diff --git a/spec/build/bsps/arm/realview-pbx-a9/optcachedata.yml b/spec/build/bsps/arm/realview-pbx-a9/optcachedata.yml
new file mode 100644
index 0000000000..1664b0fc31
--- /dev/null
+++ b/spec/build/bsps/arm/realview-pbx-a9/optcachedata.yml
@@ -0,0 +1,18 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+actions:
+- get-boolean: null
+- define-condition: null
+build-type: option
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+default: true
+default-by-variant:
+- value: false
+ variants:
+ - arm/.*qemu
+description: |
+ enable data cache
+enabled-by: true
+links: []
+name: BSP_DATA_CACHE_ENABLED
+type: build
diff --git a/spec/build/bsps/arm/realview-pbx-a9/optcacheinst.yml b/spec/build/bsps/arm/realview-pbx-a9/optcacheinst.yml
new file mode 100644
index 0000000000..b191133af9
--- /dev/null
+++ b/spec/build/bsps/arm/realview-pbx-a9/optcacheinst.yml
@@ -0,0 +1,18 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+actions:
+- get-boolean: null
+- define-condition: null
+build-type: option
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+default: true
+default-by-variant:
+- value: false
+ variants:
+ - arm/.*qemu
+description: |
+ enable instruction cache
+enabled-by: true
+links: []
+name: BSP_INSTRUCTION_CACHE_ENABLED
+type: build
diff --git a/spec/build/bsps/arm/realview-pbx-a9/optclkbootcpu.yml b/spec/build/bsps/arm/realview-pbx-a9/optclkbootcpu.yml
new file mode 100644
index 0000000000..8d78c9ce6a
--- /dev/null
+++ b/spec/build/bsps/arm/realview-pbx-a9/optclkbootcpu.yml
@@ -0,0 +1,18 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+actions:
+- get-boolean: null
+- define-condition: null
+build-type: option
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+default: false
+default-by-variant:
+- value: true
+ variants:
+ - arm/.*qemu.*
+description: |
+ If defined, then do the clock tick processing on the boot processor on behalf of all other processors.
+enabled-by: true
+links: []
+name: CLOCK_DRIVER_USE_ONLY_BOOT_PROCESSOR
+type: build
diff --git a/spec/build/bsps/arm/realview-pbx-a9/optclkfastidle.yml b/spec/build/bsps/arm/realview-pbx-a9/optclkfastidle.yml
new file mode 100644
index 0000000000..e4624223eb
--- /dev/null
+++ b/spec/build/bsps/arm/realview-pbx-a9/optclkfastidle.yml
@@ -0,0 +1,18 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+actions:
+- get-boolean: null
+- define-condition: null
+build-type: option
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+default: false
+default-by-variant:
+- value: true
+ variants:
+ - arm/.*qemu.*
+description: |
+ This sets a mode where the time runs as fast as possible when a clock ISR occurs while the IDLE thread is executing. This can significantly reduce simulation times.
+enabled-by: true
+links: []
+name: CLOCK_DRIVER_USE_FAST_IDLE
+type: build
diff --git a/spec/build/bsps/arm/realview-pbx-a9/optmmusmallpages.yml b/spec/build/bsps/arm/realview-pbx-a9/optmmusmallpages.yml
new file mode 100644
index 0000000000..d24005197e
--- /dev/null
+++ b/spec/build/bsps/arm/realview-pbx-a9/optmmusmallpages.yml
@@ -0,0 +1,15 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+actions:
+- get-boolean: null
+- define-condition: null
+build-type: option
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+default: true
+default-by-variant: []
+description: |
+ use MMU with small pages (4KiB)
+enabled-by: true
+links: []
+name: ARM_MMU_USE_SMALL_PAGES
+type: build
diff --git a/spec/build/bsps/arm/realview-pbx-a9/optresetvec.yml b/spec/build/bsps/arm/realview-pbx-a9/optresetvec.yml
new file mode 100644
index 0000000000..efd1ea2b2a
--- /dev/null
+++ b/spec/build/bsps/arm/realview-pbx-a9/optresetvec.yml
@@ -0,0 +1,15 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+actions:
+- get-boolean: null
+- define-condition: null
+build-type: option
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+default: false
+default-by-variant: []
+description: |
+ reset vector address for BSP start
+enabled-by: true
+links: []
+name: BSP_START_RESET_VECTOR
+type: build
diff --git a/spec/build/bsps/arm/rtl22xx/abi.yml b/spec/build/bsps/arm/rtl22xx/abi.yml
new file mode 100644
index 0000000000..abb7f66b50
--- /dev/null
+++ b/spec/build/bsps/arm/rtl22xx/abi.yml
@@ -0,0 +1,22 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+actions:
+- get-string: null
+- split: null
+- env-append: null
+build-type: option
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+default:
+- -mcpu=arm7tdmi
+- -mthumb
+default-by-variant:
+- value:
+ - -mcpu=arm7tdmi
+ variants:
+ - arm/rtl22xx
+description: |
+ ABI flags
+enabled-by: true
+links: []
+name: ABI_FLAGS
+type: build
diff --git a/spec/build/bsps/arm/rtl22xx/bsprtl22xx.yml b/spec/build/bsps/arm/rtl22xx/bsprtl22xx.yml
new file mode 100644
index 0000000000..340172deef
--- /dev/null
+++ b/spec/build/bsps/arm/rtl22xx/bsprtl22xx.yml
@@ -0,0 +1,21 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+arch: arm
+bsp: rtl22xx
+build-type: bsp
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+enabled-by: true
+family: rtl22xx
+includes: []
+install: []
+links:
+- role: build-dependency
+ uid: grp
+- role: build-dependency
+ uid: tstrtl22xx
+- role: build-dependency
+ uid: ../../opto2
+source: []
+type: build
diff --git a/spec/build/bsps/arm/rtl22xx/bsprtl22xxt.yml b/spec/build/bsps/arm/rtl22xx/bsprtl22xxt.yml
new file mode 100644
index 0000000000..ecd5f8baec
--- /dev/null
+++ b/spec/build/bsps/arm/rtl22xx/bsprtl22xxt.yml
@@ -0,0 +1,21 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+arch: arm
+bsp: rtl22xx_t
+build-type: bsp
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+enabled-by: true
+family: rtl22xx
+includes: []
+install: []
+links:
+- role: build-dependency
+ uid: grp
+- role: build-dependency
+ uid: tstrtl22xxt
+- role: build-dependency
+ uid: ../../opto2
+source: []
+type: build
diff --git a/spec/build/bsps/arm/rtl22xx/grp.yml b/spec/build/bsps/arm/rtl22xx/grp.yml
new file mode 100644
index 0000000000..4d560158f4
--- /dev/null
+++ b/spec/build/bsps/arm/rtl22xx/grp.yml
@@ -0,0 +1,30 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: group
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+enabled-by: true
+includes: []
+install: []
+ldflags: []
+links:
+- role: build-dependency
+ uid: ../grp
+- role: build-dependency
+ uid: abi
+- role: build-dependency
+ uid: obj
+- role: build-dependency
+ uid: objnet
+- role: build-dependency
+ uid: optskyeye
+- role: build-dependency
+ uid: start
+- role: build-dependency
+ uid: ../../obj
+- role: build-dependency
+ uid: ../../objirq
+- role: build-dependency
+ uid: ../../bspopts
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/bsps/arm/rtl22xx/obj.yml b/spec/build/bsps/arm/rtl22xx/obj.yml
new file mode 100644
index 0000000000..1889f0d842
--- /dev/null
+++ b/spec/build/bsps/arm/rtl22xx/obj.yml
@@ -0,0 +1,41 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: objects
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by: true
+includes: []
+install:
+- destination: ${BSP_INCLUDEDIR}
+ source:
+ - bsps/arm/rtl22xx/include/bsp.h
+ - bsps/arm/rtl22xx/include/lpc22xx.h
+ - bsps/arm/rtl22xx/include/tm27.h
+- destination: ${BSP_INCLUDEDIR}/bsp
+ source:
+ - bsps/arm/rtl22xx/include/bsp/irq.h
+- destination: ${BSP_LIBDIR}
+ source:
+ - bsps/arm/rtl22xx/start/linkcmds
+links: []
+source:
+- bsps/arm/rtl22xx/btimer/btimer.c
+- bsps/arm/rtl22xx/clock/clockdrv.c
+- bsps/arm/rtl22xx/console/uart.c
+- bsps/arm/rtl22xx/irq/irq.c
+- bsps/arm/rtl22xx/start/bspreset.c
+- bsps/arm/rtl22xx/start/bspstart.c
+- bsps/shared/cache/nocache.c
+- bsps/shared/dev/cpucounter/cpucounterfrequency.c
+- bsps/shared/dev/cpucounter/cpucounterread.c
+- bsps/shared/dev/getentropy/getentropy-cpucounter.c
+- bsps/shared/dev/serial/legacy-console-control.c
+- bsps/shared/dev/serial/legacy-console-select.c
+- bsps/shared/dev/serial/legacy-console.c
+- bsps/shared/irq/irq-default-handler.c
+- bsps/shared/start/bspfatal-default.c
+- bsps/shared/start/bspgetworkarea-default.c
+- bsps/shared/start/sbrk.c
+type: build
diff --git a/spec/build/bsps/arm/rtl22xx/objnet.yml b/spec/build/bsps/arm/rtl22xx/objnet.yml
new file mode 100644
index 0000000000..3e9f691ec5
--- /dev/null
+++ b/spec/build/bsps/arm/rtl22xx/objnet.yml
@@ -0,0 +1,16 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: objects
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by:
+- RTEMS_NETWORKING
+includes:
+- cpukit/libnetworking
+install: []
+links: []
+source:
+- bsps/arm/rtl22xx/net/network.c
+type: build
diff --git a/spec/build/bsps/arm/rtl22xx/optskyeye.yml b/spec/build/bsps/arm/rtl22xx/optskyeye.yml
new file mode 100644
index 0000000000..be55a98c3a
--- /dev/null
+++ b/spec/build/bsps/arm/rtl22xx/optskyeye.yml
@@ -0,0 +1,15 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+actions:
+- get-boolean: null
+- define-condition: null
+build-type: option
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+default: false
+default-by-variant: []
+description: |
+ If defined, enable options which optimize executingon the Skyeye simulator. Speed up the clock ticks while the idle task is running so time spent in the idle task is minimized. This significantly reduces the wall time required to execute the RTEMS test suites.
+enabled-by: true
+links: []
+name: ON_SKYEYE
+type: build
diff --git a/spec/build/bsps/arm/rtl22xx/start.yml b/spec/build/bsps/arm/rtl22xx/start.yml
new file mode 100644
index 0000000000..4fe0065e7e
--- /dev/null
+++ b/spec/build/bsps/arm/rtl22xx/start.yml
@@ -0,0 +1,14 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+asflags: []
+build-type: start-file
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+enabled-by: true
+includes: []
+install-path: ${BSP_LIBDIR}
+links: []
+source:
+- bsps/arm/rtl22xx/start/start.S
+target: start.o
+type: build
diff --git a/spec/build/bsps/arm/rtl22xx/tstrtl22xx.yml b/spec/build/bsps/arm/rtl22xx/tstrtl22xx.yml
new file mode 100644
index 0000000000..9e3fe758bc
--- /dev/null
+++ b/spec/build/bsps/arm/rtl22xx/tstrtl22xx.yml
@@ -0,0 +1,21 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+actions:
+- set-test-state:
+ dl10: exclude
+ fileio: exclude
+ fsdosfsname01: exclude
+ iostream: exclude
+ linpack: exclude
+ record02: exclude
+ utf8proc01: exclude
+build-type: option
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+default: null
+default-by-variant: []
+description: ''
+enabled-by: true
+links:
+- role: build-dependency
+ uid: ../../tstnoiconv
+type: build
diff --git a/spec/build/bsps/arm/rtl22xx/tstrtl22xxt.yml b/spec/build/bsps/arm/rtl22xx/tstrtl22xxt.yml
new file mode 100644
index 0000000000..53b3efd010
--- /dev/null
+++ b/spec/build/bsps/arm/rtl22xx/tstrtl22xxt.yml
@@ -0,0 +1,18 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+actions:
+- set-test-state:
+ dl10: exclude
+ fsdosfsname01: exclude
+ linpack: exclude
+ record02: exclude
+build-type: option
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+default: null
+default-by-variant: []
+description: ''
+enabled-by: true
+links:
+- role: build-dependency
+ uid: ../../tstnoiconv
+type: build
diff --git a/spec/build/bsps/arm/smdk2410/abi.yml b/spec/build/bsps/arm/smdk2410/abi.yml
new file mode 100644
index 0000000000..d964ca5d2f
--- /dev/null
+++ b/spec/build/bsps/arm/smdk2410/abi.yml
@@ -0,0 +1,17 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+actions:
+- get-string: null
+- split: null
+- env-append: null
+build-type: option
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+default:
+- -mcpu=arm920t
+default-by-variant: []
+description: |
+ ABI flags
+enabled-by: true
+links: []
+name: ABI_FLAGS
+type: build
diff --git a/spec/build/bsps/arm/smdk2410/bspsmdk2410.yml b/spec/build/bsps/arm/smdk2410/bspsmdk2410.yml
new file mode 100644
index 0000000000..3b15c7ca91
--- /dev/null
+++ b/spec/build/bsps/arm/smdk2410/bspsmdk2410.yml
@@ -0,0 +1,69 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+arch: arm
+bsp: smdk2410
+build-type: bsp
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+enabled-by: true
+family: smdk2410
+includes: []
+install:
+- destination: ${BSP_INCLUDEDIR}
+ source:
+ - bsps/arm/smdk2410/include/bsp.h
+ - bsps/arm/smdk2410/include/s3c2400.h
+ - bsps/arm/smdk2410/include/s3c2410.h
+ - bsps/arm/smdk2410/include/s3c24xx.h
+ - bsps/arm/smdk2410/include/smc.h
+ - bsps/arm/smdk2410/include/tm27.h
+- destination: ${BSP_INCLUDEDIR}/bsp
+ source:
+ - bsps/arm/smdk2410/include/bsp/irq.h
+- destination: ${BSP_LIBDIR}
+ source:
+ - bsps/arm/smdk2410/start/linkcmds
+links:
+- role: build-dependency
+ uid: ../grp
+- role: build-dependency
+ uid: abi
+- role: build-dependency
+ uid: optcpus3c2410
+- role: build-dependency
+ uid: optskyeye
+- role: build-dependency
+ uid: start
+- role: build-dependency
+ uid: ../../obj
+- role: build-dependency
+ uid: ../../objirq
+- role: build-dependency
+ uid: ../../opto2
+- role: build-dependency
+ uid: ../../bspopts
+source:
+- bsps/arm/shared/cache/cache-cp15.c
+- bsps/arm/shared/cp15/arm920-mmu.c
+- bsps/arm/smdk2410/btimer/btimer.c
+- bsps/arm/smdk2410/clock/clockdrv.c
+- bsps/arm/smdk2410/clock/support.c
+- bsps/arm/smdk2410/console/uart.c
+- bsps/arm/smdk2410/irq/irq.c
+- bsps/arm/smdk2410/smc/smc.c
+- bsps/arm/smdk2410/start/bspidle.c
+- bsps/arm/smdk2410/start/bspreset.c
+- bsps/arm/smdk2410/start/bspstart.c
+- bsps/arm/smdk2410/start/memmap.c
+- bsps/shared/dev/cpucounter/cpucounterfrequency.c
+- bsps/shared/dev/cpucounter/cpucounterread.c
+- bsps/shared/dev/getentropy/getentropy-cpucounter.c
+- bsps/shared/dev/serial/legacy-console-control.c
+- bsps/shared/dev/serial/legacy-console-select.c
+- bsps/shared/dev/serial/legacy-console.c
+- bsps/shared/irq/irq-default-handler.c
+- bsps/shared/start/bspfatal-default.c
+- bsps/shared/start/bspgetworkarea-default.c
+- bsps/shared/start/sbrk.c
+type: build
diff --git a/spec/build/bsps/arm/smdk2410/optcpus3c2410.yml b/spec/build/bsps/arm/smdk2410/optcpus3c2410.yml
new file mode 100644
index 0000000000..ba24539e4a
--- /dev/null
+++ b/spec/build/bsps/arm/smdk2410/optcpus3c2410.yml
@@ -0,0 +1,18 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+actions:
+- get-boolean: null
+- define-condition: null
+build-type: option
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+default: false
+default-by-variant:
+- value: true
+ variants:
+ - arm/smdk2410
+description: |
+ If defined, enable optons for the S3C2410 CPU model.
+enabled-by: true
+links: []
+name: CPU_S3C2410
+type: build
diff --git a/spec/build/bsps/arm/smdk2410/optskyeye.yml b/spec/build/bsps/arm/smdk2410/optskyeye.yml
new file mode 100644
index 0000000000..be55a98c3a
--- /dev/null
+++ b/spec/build/bsps/arm/smdk2410/optskyeye.yml
@@ -0,0 +1,15 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+actions:
+- get-boolean: null
+- define-condition: null
+build-type: option
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+default: false
+default-by-variant: []
+description: |
+ If defined, enable options which optimize executingon the Skyeye simulator. Speed up the clock ticks while the idle task is running so time spent in the idle task is minimized. This significantly reduces the wall time required to execute the RTEMS test suites.
+enabled-by: true
+links: []
+name: ON_SKYEYE
+type: build
diff --git a/spec/build/bsps/arm/smdk2410/start.yml b/spec/build/bsps/arm/smdk2410/start.yml
new file mode 100644
index 0000000000..6910892daf
--- /dev/null
+++ b/spec/build/bsps/arm/smdk2410/start.yml
@@ -0,0 +1,14 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+asflags: []
+build-type: start-file
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+enabled-by: true
+includes: []
+install-path: ${BSP_LIBDIR}
+links: []
+source:
+- bsps/arm/smdk2410/start/start.S
+target: start.o
+type: build
diff --git a/spec/build/bsps/arm/start.yml b/spec/build/bsps/arm/start.yml
new file mode 100644
index 0000000000..07120dcc71
--- /dev/null
+++ b/spec/build/bsps/arm/start.yml
@@ -0,0 +1,14 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+asflags: []
+build-type: start-file
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+enabled-by: true
+includes: []
+install-path: ${BSP_LIBDIR}
+links: []
+source:
+- bsps/arm/shared/start/start.S
+target: start.o
+type: build
diff --git a/spec/build/bsps/arm/stm32f4/abi.yml b/spec/build/bsps/arm/stm32f4/abi.yml
new file mode 100644
index 0000000000..8c9b62c6ea
--- /dev/null
+++ b/spec/build/bsps/arm/stm32f4/abi.yml
@@ -0,0 +1,23 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+actions:
+- get-string: null
+- split: null
+- env-append: null
+build-type: option
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+default:
+- -mthumb
+- -mcpu=cortex-m4
+default-by-variant:
+- value:
+ - -mthumb
+ - -mcpu=cortex-m3
+ variants:
+ - arm/stm32f105rc
+description: |
+ ABI flags
+enabled-by: true
+links: []
+name: ABI_FLAGS
+type: build
diff --git a/spec/build/bsps/arm/stm32f4/bspstm32f105rc.yml b/spec/build/bsps/arm/stm32f4/bspstm32f105rc.yml
new file mode 100644
index 0000000000..f00a177dc0
--- /dev/null
+++ b/spec/build/bsps/arm/stm32f4/bspstm32f105rc.yml
@@ -0,0 +1,21 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+arch: arm
+bsp: stm32f105rc
+build-type: bsp
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+enabled-by: true
+family: stm32f4
+includes: []
+install: []
+links:
+- role: build-dependency
+ uid: grp
+- role: build-dependency
+ uid: tststm32f105rc
+- role: build-dependency
+ uid: ../../opto2
+source: []
+type: build
diff --git a/spec/build/bsps/arm/stm32f4/bspstm32f4.yml b/spec/build/bsps/arm/stm32f4/bspstm32f4.yml
new file mode 100644
index 0000000000..f3c6426f07
--- /dev/null
+++ b/spec/build/bsps/arm/stm32f4/bspstm32f4.yml
@@ -0,0 +1,21 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+arch: arm
+bsp: stm32f4
+build-type: bsp
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+enabled-by: true
+family: stm32f4
+includes: []
+install: []
+links:
+- role: build-dependency
+ uid: grp
+- role: build-dependency
+ uid: ../../opto2
+- role: build-dependency
+ uid: ../../tstsmallmem
+source: []
+type: build
diff --git a/spec/build/bsps/arm/stm32f4/grp.yml b/spec/build/bsps/arm/stm32f4/grp.yml
new file mode 100644
index 0000000000..ad08ee63c1
--- /dev/null
+++ b/spec/build/bsps/arm/stm32f4/grp.yml
@@ -0,0 +1,60 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: group
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+enabled-by: true
+includes: []
+install: []
+ldflags: []
+links:
+- role: build-dependency
+ uid: ../grp
+- role: build-dependency
+ uid: ../start
+- role: build-dependency
+ uid: abi
+- role: build-dependency
+ uid: obj
+- role: build-dependency
+ uid: opteni2c1
+- role: build-dependency
+ uid: opteni2c2
+- role: build-dependency
+ uid: optenuart4
+- role: build-dependency
+ uid: optenuart5
+- role: build-dependency
+ uid: optenusart1
+- role: build-dependency
+ uid: optenusart2
+- role: build-dependency
+ uid: optenusart3
+- role: build-dependency
+ uid: optenusart6
+- role: build-dependency
+ uid: optf10xxx
+- role: build-dependency
+ uid: optf4xxxx
+- role: build-dependency
+ uid: opthclk
+- role: build-dependency
+ uid: optoschse
+- role: build-dependency
+ uid: optpclk1
+- role: build-dependency
+ uid: optpclk2
+- role: build-dependency
+ uid: optsysclk
+- role: build-dependency
+ uid: optusartbaud
+- role: build-dependency
+ uid: ../../linkcmds
+- role: build-dependency
+ uid: ../../obj
+- role: build-dependency
+ uid: ../../objirq
+- role: build-dependency
+ uid: ../../bspopts
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/bsps/arm/stm32f4/obj.yml b/spec/build/bsps/arm/stm32f4/obj.yml
new file mode 100644
index 0000000000..22b73177cd
--- /dev/null
+++ b/spec/build/bsps/arm/stm32f4/obj.yml
@@ -0,0 +1,70 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: objects
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by: true
+includes: []
+install:
+- destination: ${BSP_INCLUDEDIR}
+ source:
+ - bsps/arm/stm32f4/include/bsp.h
+ - bsps/arm/stm32f4/include/tm27.h
+- destination: ${BSP_INCLUDEDIR}/bsp
+ source:
+ - bsps/arm/stm32f4/include/bsp/i2c.h
+ - bsps/arm/stm32f4/include/bsp/io.h
+ - bsps/arm/stm32f4/include/bsp/irq.h
+ - bsps/arm/stm32f4/include/bsp/rcc.h
+ - bsps/arm/stm32f4/include/bsp/stm32_i2c.h
+ - bsps/arm/stm32f4/include/bsp/stm32_usart.h
+ - bsps/arm/stm32f4/include/bsp/stm32f10xxx_exti.h
+ - bsps/arm/stm32f4/include/bsp/stm32f10xxx_gpio.h
+ - bsps/arm/stm32f4/include/bsp/stm32f10xxx_rcc.h
+ - bsps/arm/stm32f4/include/bsp/stm32f4.h
+ - bsps/arm/stm32f4/include/bsp/stm32f4xxxx_adc.h
+ - bsps/arm/stm32f4/include/bsp/stm32f4xxxx_exti.h
+ - bsps/arm/stm32f4/include/bsp/stm32f4xxxx_flash.h
+ - bsps/arm/stm32f4/include/bsp/stm32f4xxxx_gpio.h
+ - bsps/arm/stm32f4/include/bsp/stm32f4xxxx_otgfs.h
+ - bsps/arm/stm32f4/include/bsp/stm32f4xxxx_pwr.h
+ - bsps/arm/stm32f4/include/bsp/stm32f4xxxx_rcc.h
+ - bsps/arm/stm32f4/include/bsp/stm32f4xxxx_syscfg.h
+ - bsps/arm/stm32f4/include/bsp/stm32f4xxxx_tim.h
+ - bsps/arm/stm32f4/include/bsp/usart.h
+- destination: ${BSP_LIBDIR}
+ source:
+ - bsps/arm/stm32f4/start/linkcmds.stm32f105rc
+ - bsps/arm/stm32f4/start/linkcmds.stm32f4
+links: []
+source:
+- bsps/arm/shared/clock/clock-armv7m.c
+- bsps/arm/shared/irq/irq-armv7m.c
+- bsps/arm/shared/irq/irq-dispatch-armv7m.c
+- bsps/arm/shared/start/bsp-start-memcpy.S
+- bsps/arm/stm32f4/console/console-config.c
+- bsps/arm/stm32f4/console/usart.c
+- bsps/arm/stm32f4/i2c/i2c-config.c
+- bsps/arm/stm32f4/i2c/i2c.c
+- bsps/arm/stm32f4/start/bspreset.c
+- bsps/arm/stm32f4/start/bspstart.c
+- bsps/arm/stm32f4/start/bspstarthook.c
+- bsps/arm/stm32f4/start/io.c
+- bsps/arm/stm32f4/start/rcc.c
+- bsps/arm/stm32f4/start/start-config-io.c
+- bsps/shared/cache/nocache.c
+- bsps/shared/dev/btimer/btimer-stub.c
+- bsps/shared/dev/cpucounter/cpucounterfrequency.c
+- bsps/shared/dev/cpucounter/cpucounterread.c
+- bsps/shared/dev/getentropy/getentropy-cpucounter.c
+- bsps/shared/dev/serial/legacy-console-control.c
+- bsps/shared/dev/serial/legacy-console-select.c
+- bsps/shared/dev/serial/legacy-console.c
+- bsps/shared/irq/irq-default-handler.c
+- bsps/shared/start/bspfatal-default.c
+- bsps/shared/start/bspgetworkarea-default.c
+- bsps/shared/start/sbrk.c
+- bsps/shared/start/stackalloc.c
+type: build
diff --git a/spec/build/bsps/arm/stm32f4/opteni2c1.yml b/spec/build/bsps/arm/stm32f4/opteni2c1.yml
new file mode 100644
index 0000000000..e200c81623
--- /dev/null
+++ b/spec/build/bsps/arm/stm32f4/opteni2c1.yml
@@ -0,0 +1,18 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+actions:
+- get-boolean: null
+- define-condition: null
+build-type: option
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+default: false
+default-by-variant:
+- value: true
+ variants:
+ - arm/stm32f1.*
+description: |
+ enable I2C 1
+enabled-by: true
+links: []
+name: STM32F4_ENABLE_I2C1
+type: build
diff --git a/spec/build/bsps/arm/stm32f4/opteni2c2.yml b/spec/build/bsps/arm/stm32f4/opteni2c2.yml
new file mode 100644
index 0000000000..d4ef7328e1
--- /dev/null
+++ b/spec/build/bsps/arm/stm32f4/opteni2c2.yml
@@ -0,0 +1,15 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+actions:
+- get-boolean: null
+- define-condition: null
+build-type: option
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+default: false
+default-by-variant: []
+description: |
+ enable I2C 2
+enabled-by: true
+links: []
+name: STM32F4_ENABLE_I2C2
+type: build
diff --git a/spec/build/bsps/arm/stm32f4/optenuart4.yml b/spec/build/bsps/arm/stm32f4/optenuart4.yml
new file mode 100644
index 0000000000..5bf266707f
--- /dev/null
+++ b/spec/build/bsps/arm/stm32f4/optenuart4.yml
@@ -0,0 +1,15 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+actions:
+- get-boolean: null
+- define-condition: null
+build-type: option
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+default: false
+default-by-variant: []
+description: |
+ enable UART 4
+enabled-by: true
+links: []
+name: STM32F4_ENABLE_UART_4
+type: build
diff --git a/spec/build/bsps/arm/stm32f4/optenuart5.yml b/spec/build/bsps/arm/stm32f4/optenuart5.yml
new file mode 100644
index 0000000000..21f1e6f963
--- /dev/null
+++ b/spec/build/bsps/arm/stm32f4/optenuart5.yml
@@ -0,0 +1,15 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+actions:
+- get-boolean: null
+- define-condition: null
+build-type: option
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+default: false
+default-by-variant: []
+description: |
+ enable UART 5
+enabled-by: true
+links: []
+name: STM32F4_ENABLE_UART_5
+type: build
diff --git a/spec/build/bsps/arm/stm32f4/optenusart1.yml b/spec/build/bsps/arm/stm32f4/optenusart1.yml
new file mode 100644
index 0000000000..9fd8f99af2
--- /dev/null
+++ b/spec/build/bsps/arm/stm32f4/optenusart1.yml
@@ -0,0 +1,15 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+actions:
+- get-boolean: null
+- define-condition: null
+build-type: option
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+default: false
+default-by-variant: []
+description: |
+ enable USART 1
+enabled-by: true
+links: []
+name: STM32F4_ENABLE_USART_1
+type: build
diff --git a/spec/build/bsps/arm/stm32f4/optenusart2.yml b/spec/build/bsps/arm/stm32f4/optenusart2.yml
new file mode 100644
index 0000000000..d9dd3a3d22
--- /dev/null
+++ b/spec/build/bsps/arm/stm32f4/optenusart2.yml
@@ -0,0 +1,15 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+actions:
+- get-boolean: null
+- define-condition: null
+build-type: option
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+default: false
+default-by-variant: []
+description: |
+ enable USART 2
+enabled-by: true
+links: []
+name: STM32F4_ENABLE_USART_2
+type: build
diff --git a/spec/build/bsps/arm/stm32f4/optenusart3.yml b/spec/build/bsps/arm/stm32f4/optenusart3.yml
new file mode 100644
index 0000000000..3cc11ba79b
--- /dev/null
+++ b/spec/build/bsps/arm/stm32f4/optenusart3.yml
@@ -0,0 +1,15 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+actions:
+- get-boolean: null
+- define-condition: null
+build-type: option
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+default: true
+default-by-variant: []
+description: |
+ enable USART 3
+enabled-by: true
+links: []
+name: STM32F4_ENABLE_USART_3
+type: build
diff --git a/spec/build/bsps/arm/stm32f4/optenusart6.yml b/spec/build/bsps/arm/stm32f4/optenusart6.yml
new file mode 100644
index 0000000000..4e20fb4317
--- /dev/null
+++ b/spec/build/bsps/arm/stm32f4/optenusart6.yml
@@ -0,0 +1,15 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+actions:
+- get-boolean: null
+- define-condition: null
+build-type: option
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+default: false
+default-by-variant: []
+description: |
+ enable USART 6
+enabled-by: true
+links: []
+name: STM32F4_ENABLE_USART_6
+type: build
diff --git a/spec/build/bsps/arm/stm32f4/optf10xxx.yml b/spec/build/bsps/arm/stm32f4/optf10xxx.yml
new file mode 100644
index 0000000000..54f1418cf9
--- /dev/null
+++ b/spec/build/bsps/arm/stm32f4/optf10xxx.yml
@@ -0,0 +1,18 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+actions:
+- get-boolean: null
+- define-condition: null
+build-type: option
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+default: false
+default-by-variant:
+- value: true
+ variants:
+ - arm/stm32f1.*
+description: |
+ Chip belongs to the STM32F10XXX family.
+enabled-by: true
+links: []
+name: STM32F4_FAMILY_F10XXX
+type: build
diff --git a/spec/build/bsps/arm/stm32f4/optf4xxxx.yml b/spec/build/bsps/arm/stm32f4/optf4xxxx.yml
new file mode 100644
index 0000000000..66604f249a
--- /dev/null
+++ b/spec/build/bsps/arm/stm32f4/optf4xxxx.yml
@@ -0,0 +1,18 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+actions:
+- get-boolean: null
+- define-condition: null
+build-type: option
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+default: false
+default-by-variant:
+- value: true
+ variants:
+ - arm/stm32f4.*
+description: |
+ Chip belongs to the STM32F4XXXX family.
+enabled-by: true
+links: []
+name: STM32F4_FAMILY_F4XXXX
+type: build
diff --git a/spec/build/bsps/arm/stm32f4/opthclk.yml b/spec/build/bsps/arm/stm32f4/opthclk.yml
new file mode 100644
index 0000000000..7f315f12b2
--- /dev/null
+++ b/spec/build/bsps/arm/stm32f4/opthclk.yml
@@ -0,0 +1,19 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+actions:
+- get-integer: null
+- define: null
+build-type: option
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+default: 16000000
+default-by-variant:
+- value: 8000000
+ variants:
+ - arm/stm32f1.*
+description: |
+ HCLK frequency in Hz
+enabled-by: true
+format: '{}'
+links: []
+name: STM32F4_HCLK
+type: build
diff --git a/spec/build/bsps/arm/stm32f4/optoschse.yml b/spec/build/bsps/arm/stm32f4/optoschse.yml
new file mode 100644
index 0000000000..2b1dad620e
--- /dev/null
+++ b/spec/build/bsps/arm/stm32f4/optoschse.yml
@@ -0,0 +1,16 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+actions:
+- get-integer: null
+- define: null
+build-type: option
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+default: 8000000
+default-by-variant: []
+description: |
+ HSE oscillator frequency in Hz
+enabled-by: true
+format: '{}'
+links: []
+name: STM32F4_HSE_OSCILLATOR
+type: build
diff --git a/spec/build/bsps/arm/stm32f4/optpclk1.yml b/spec/build/bsps/arm/stm32f4/optpclk1.yml
new file mode 100644
index 0000000000..9ac285b0bc
--- /dev/null
+++ b/spec/build/bsps/arm/stm32f4/optpclk1.yml
@@ -0,0 +1,19 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+actions:
+- get-integer: null
+- define: null
+build-type: option
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+default: 16000000
+default-by-variant:
+- value: 8000000
+ variants:
+ - arm/stm32f1.*
+description: |
+ PCLK1 frequency in Hz
+enabled-by: true
+format: '{}'
+links: []
+name: STM32F4_PCLK1
+type: build
diff --git a/spec/build/bsps/arm/stm32f4/optpclk2.yml b/spec/build/bsps/arm/stm32f4/optpclk2.yml
new file mode 100644
index 0000000000..e51eeaf36f
--- /dev/null
+++ b/spec/build/bsps/arm/stm32f4/optpclk2.yml
@@ -0,0 +1,19 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+actions:
+- get-integer: null
+- define: null
+build-type: option
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+default: 16000000
+default-by-variant:
+- value: 8000000
+ variants:
+ - arm/stm32f1.*
+description: |
+ PCLK2 frequency in Hz
+enabled-by: true
+format: '{}'
+links: []
+name: STM32F4_PCLK2
+type: build
diff --git a/spec/build/bsps/arm/stm32f4/optsysclk.yml b/spec/build/bsps/arm/stm32f4/optsysclk.yml
new file mode 100644
index 0000000000..5f08d4ecde
--- /dev/null
+++ b/spec/build/bsps/arm/stm32f4/optsysclk.yml
@@ -0,0 +1,19 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+actions:
+- get-integer: null
+- define: null
+build-type: option
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+default: 16000000
+default-by-variant:
+- value: 8000000
+ variants:
+ - arm/stm32f1.*
+description: |
+ SYSCLK frequency in Hz
+enabled-by: true
+format: '{}'
+links: []
+name: STM32F4_SYSCLK
+type: build
diff --git a/spec/build/bsps/arm/stm32f4/optusartbaud.yml b/spec/build/bsps/arm/stm32f4/optusartbaud.yml
new file mode 100644
index 0000000000..b102e37eb6
--- /dev/null
+++ b/spec/build/bsps/arm/stm32f4/optusartbaud.yml
@@ -0,0 +1,16 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+actions:
+- get-integer: null
+- define: null
+build-type: option
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+default: 115200
+default-by-variant: []
+description: |
+ baud for USARTs
+enabled-by: true
+format: '{}'
+links: []
+name: STM32F4_USART_BAUD
+type: build
diff --git a/spec/build/bsps/arm/stm32f4/tststm32f105rc.yml b/spec/build/bsps/arm/stm32f4/tststm32f105rc.yml
new file mode 100644
index 0000000000..f752f18b93
--- /dev/null
+++ b/spec/build/bsps/arm/stm32f4/tststm32f105rc.yml
@@ -0,0 +1,22 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+actions:
+- set-test-state:
+ fileio: exclude
+ ftp01: exclude
+ iostream: exclude
+ mghttpd01: exclude
+ monitor02: exclude
+ pppd: exclude
+ rtems: exclude
+ utf8proc01: exclude
+build-type: option
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+default: null
+default-by-variant: []
+description: ''
+enabled-by: true
+links:
+- role: build-dependency
+ uid: ../../tstsmallmem
+type: build
diff --git a/spec/build/bsps/arm/tms570/abi.yml b/spec/build/bsps/arm/tms570/abi.yml
new file mode 100644
index 0000000000..0177616e2a
--- /dev/null
+++ b/spec/build/bsps/arm/tms570/abi.yml
@@ -0,0 +1,21 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+actions:
+- get-string: null
+- split: null
+- env-append: null
+build-type: option
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+default:
+- -march=armv7-r
+- -mthumb
+- -mbig-endian
+- -mfpu=vfpv3-d16
+- -mfloat-abi=hard
+default-by-variant: []
+description: |
+ ABI flags
+enabled-by: true
+links: []
+name: ABI_FLAGS
+type: build
diff --git a/spec/build/bsps/arm/tms570/bspls3137hdk.yml b/spec/build/bsps/arm/tms570/bspls3137hdk.yml
new file mode 100644
index 0000000000..e2704a268d
--- /dev/null
+++ b/spec/build/bsps/arm/tms570/bspls3137hdk.yml
@@ -0,0 +1,21 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+arch: arm
+bsp: tms570ls3137_hdk
+build-type: bsp
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+enabled-by: true
+family: tms570
+includes: []
+install: []
+links:
+- role: build-dependency
+ uid: grp
+- role: build-dependency
+ uid: ../../opto2
+- role: build-dependency
+ uid: ../../tstsmallmem
+source: []
+type: build
diff --git a/spec/build/bsps/arm/tms570/bspls3137hdkintram.yml b/spec/build/bsps/arm/tms570/bspls3137hdkintram.yml
new file mode 100644
index 0000000000..77a21e861b
--- /dev/null
+++ b/spec/build/bsps/arm/tms570/bspls3137hdkintram.yml
@@ -0,0 +1,21 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+arch: arm
+bsp: tms570ls3137_hdk_intram
+build-type: bsp
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+enabled-by: true
+family: tms570
+includes: []
+install: []
+links:
+- role: build-dependency
+ uid: grp
+- role: build-dependency
+ uid: tstls3137hdkintram
+- role: build-dependency
+ uid: ../../opto2
+source: []
+type: build
diff --git a/spec/build/bsps/arm/tms570/bspls3137hdksdram.yml b/spec/build/bsps/arm/tms570/bspls3137hdksdram.yml
new file mode 100644
index 0000000000..8ffb5294d2
--- /dev/null
+++ b/spec/build/bsps/arm/tms570/bspls3137hdksdram.yml
@@ -0,0 +1,19 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+arch: arm
+bsp: tms570ls3137_hdk_sdram
+build-type: bsp
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+enabled-by: true
+family: tms570
+includes: []
+install: []
+links:
+- role: build-dependency
+ uid: grp
+- role: build-dependency
+ uid: ../../opto2
+source: []
+type: build
diff --git a/spec/build/bsps/arm/tms570/bspls3137hdkwithloader.yml b/spec/build/bsps/arm/tms570/bspls3137hdkwithloader.yml
new file mode 100644
index 0000000000..f8e8cb81bb
--- /dev/null
+++ b/spec/build/bsps/arm/tms570/bspls3137hdkwithloader.yml
@@ -0,0 +1,21 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+arch: arm
+bsp: tms570ls3137_hdk_with_loader
+build-type: bsp
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+enabled-by: true
+family: tms570
+includes: []
+install: []
+links:
+- role: build-dependency
+ uid: grp
+- role: build-dependency
+ uid: ../../opto2
+- role: build-dependency
+ uid: ../../tstsmallmem
+source: []
+type: build
diff --git a/spec/build/bsps/arm/tms570/grp.yml b/spec/build/bsps/arm/tms570/grp.yml
new file mode 100644
index 0000000000..f7b84e2f57
--- /dev/null
+++ b/spec/build/bsps/arm/tms570/grp.yml
@@ -0,0 +1,48 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: group
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+enabled-by: true
+includes: []
+install: []
+ldflags: []
+links:
+- role: build-dependency
+ uid: ../grp
+- role: build-dependency
+ uid: ../start
+- role: build-dependency
+ uid: abi
+- role: build-dependency
+ uid: obj
+- role: build-dependency
+ uid: objhwinit
+- role: build-dependency
+ uid: optcclk
+- role: build-dependency
+ uid: optconirq
+- role: build-dependency
+ uid: optlowinit
+- role: build-dependency
+ uid: optmintskstksz
+- role: build-dependency
+ uid: optoscmain
+- role: build-dependency
+ uid: optoscrtc
+- role: build-dependency
+ uid: optreginit
+- role: build-dependency
+ uid: optscibaud
+- role: build-dependency
+ uid: opttms570ls3137
+- role: build-dependency
+ uid: ../../linkcmds
+- role: build-dependency
+ uid: ../../obj
+- role: build-dependency
+ uid: ../../objirq
+- role: build-dependency
+ uid: ../../bspopts
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/bsps/arm/tms570/obj.yml b/spec/build/bsps/arm/tms570/obj.yml
new file mode 100644
index 0000000000..8e5b665a78
--- /dev/null
+++ b/spec/build/bsps/arm/tms570/obj.yml
@@ -0,0 +1,100 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: objects
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by: true
+includes: []
+install:
+- destination: ${BSP_INCLUDEDIR}
+ source:
+ - bsps/arm/tms570/include/bsp.h
+ - bsps/arm/tms570/include/tm27.h
+- destination: ${BSP_INCLUDEDIR}/bsp
+ source:
+ - bsps/arm/tms570/include/bsp/irq.h
+ - bsps/arm/tms570/include/bsp/system-clocks.h
+ - bsps/arm/tms570/include/bsp/tms570-pinmux.h
+ - bsps/arm/tms570/include/bsp/tms570-pins.h
+ - bsps/arm/tms570/include/bsp/tms570-pom.h
+ - bsps/arm/tms570/include/bsp/tms570-rti.h
+ - bsps/arm/tms570/include/bsp/tms570-sci-driver.h
+ - bsps/arm/tms570/include/bsp/tms570-sci.h
+ - bsps/arm/tms570/include/bsp/tms570-vim.h
+ - bsps/arm/tms570/include/bsp/tms570.h
+ - bsps/arm/tms570/include/bsp/tms570_hwinit.h
+ - bsps/arm/tms570/include/bsp/tms570_selftest.h
+ - bsps/arm/tms570/include/bsp/tms570_selftest_parity.h
+ - bsps/arm/tms570/include/bsp/tms570lc4357-pins.h
+ - bsps/arm/tms570/include/bsp/tms570ls3137zwt-pins.h
+- destination: ${BSP_INCLUDEDIR}/bsp/ti/herc
+ source:
+ - bsps/arm/tms570/include/bsp/ti_herc/reg_adc.h
+ - bsps/arm/tms570/include/bsp/ti_herc/reg_ccmsr.h
+ - bsps/arm/tms570/include/bsp/ti_herc/reg_crc.h
+ - bsps/arm/tms570/include/bsp/ti_herc/reg_dcan.h
+ - bsps/arm/tms570/include/bsp/ti_herc/reg_dcc.h
+ - bsps/arm/tms570/include/bsp/ti_herc/reg_dma.h
+ - bsps/arm/tms570/include/bsp/ti_herc/reg_dmm.h
+ - bsps/arm/tms570/include/bsp/ti_herc/reg_efuse.h
+ - bsps/arm/tms570/include/bsp/ti_herc/reg_emacc.h
+ - bsps/arm/tms570/include/bsp/ti_herc/reg_emacm.h
+ - bsps/arm/tms570/include/bsp/ti_herc/reg_emif.h
+ - bsps/arm/tms570/include/bsp/ti_herc/reg_esm.h
+ - bsps/arm/tms570/include/bsp/ti_herc/reg_flash.h
+ - bsps/arm/tms570/include/bsp/ti_herc/reg_flex_ray.h
+ - bsps/arm/tms570/include/bsp/ti_herc/reg_gio.h
+ - bsps/arm/tms570/include/bsp/ti_herc/reg_htu.h
+ - bsps/arm/tms570/include/bsp/ti_herc/reg_i2c.h
+ - bsps/arm/tms570/include/bsp/ti_herc/reg_iomm.h
+ - bsps/arm/tms570/include/bsp/ti_herc/reg_lin.h
+ - bsps/arm/tms570/include/bsp/ti_herc/reg_mdio.h
+ - bsps/arm/tms570/include/bsp/ti_herc/reg_n2het.h
+ - bsps/arm/tms570/include/bsp/ti_herc/reg_pbist.h
+ - bsps/arm/tms570/include/bsp/ti_herc/reg_pcr.h
+ - bsps/arm/tms570/include/bsp/ti_herc/reg_pll.h
+ - bsps/arm/tms570/include/bsp/ti_herc/reg_pmm.h
+ - bsps/arm/tms570/include/bsp/ti_herc/reg_pom.h
+ - bsps/arm/tms570/include/bsp/ti_herc/reg_rti.h
+ - bsps/arm/tms570/include/bsp/ti_herc/reg_rtp.h
+ - bsps/arm/tms570/include/bsp/ti_herc/reg_sci.h
+ - bsps/arm/tms570/include/bsp/ti_herc/reg_spi.h
+ - bsps/arm/tms570/include/bsp/ti_herc/reg_stc.h
+ - bsps/arm/tms570/include/bsp/ti_herc/reg_sys.h
+ - bsps/arm/tms570/include/bsp/ti_herc/reg_sys2.h
+ - bsps/arm/tms570/include/bsp/ti_herc/reg_tcr.h
+ - bsps/arm/tms570/include/bsp/ti_herc/reg_tcram.h
+ - bsps/arm/tms570/include/bsp/ti_herc/reg_vim.h
+- destination: ${BSP_LIBDIR}
+ source:
+ - bsps/arm/tms570/start/linkcmds.tms570ls3137_hdk
+ - bsps/arm/tms570/start/linkcmds.tms570ls3137_hdk_intram
+ - bsps/arm/tms570/start/linkcmds.tms570ls3137_hdk_sdram
+ - bsps/arm/tms570/start/linkcmds.tms570ls3137_hdk_with_loader
+links: []
+source:
+- bsps/arm/shared/cp15/arm-cp15-set-exception-handler.c
+- bsps/arm/shared/cp15/arm-cp15-set-ttb-entries.c
+- bsps/arm/shared/start/bsp-start-memcpy.S
+- bsps/arm/tms570/clock/clock.c
+- bsps/arm/tms570/console/printk-support.c
+- bsps/arm/tms570/console/tms570-sci.c
+- bsps/arm/tms570/cpucounter/cpucounterread.c
+- bsps/arm/tms570/irq/irq.c
+- bsps/arm/tms570/start/bspreset.c
+- bsps/arm/tms570/start/bspstart.c
+- bsps/arm/tms570/start/bspstarthooks.c
+- bsps/arm/tms570/start/pinmux.c
+- bsps/arm/tms570/start/tms570-pom.c
+- bsps/shared/cache/nocache.c
+- bsps/shared/dev/btimer/btimer-cpucounter.c
+- bsps/shared/dev/getentropy/getentropy-cpucounter.c
+- bsps/shared/dev/serial/console-termios.c
+- bsps/shared/irq/irq-default-handler.c
+- bsps/shared/start/bspfatal-default.c
+- bsps/shared/start/bspgetworkarea-default.c
+- bsps/shared/start/sbrk.c
+- bsps/shared/start/stackalloc.c
+type: build
diff --git a/spec/build/bsps/arm/tms570/objhwinit.yml b/spec/build/bsps/arm/tms570/objhwinit.yml
new file mode 100644
index 0000000000..04241dffc9
--- /dev/null
+++ b/spec/build/bsps/arm/tms570/objhwinit.yml
@@ -0,0 +1,27 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: objects
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by:
+- TMS570_USE_HWINIT_STARTUP
+includes: []
+install: []
+links: []
+source:
+- bsps/arm/tms570/start/bspstarthooks-hwinit.c
+- bsps/arm/tms570/start/fail_notification.c
+- bsps/arm/tms570/start/init_emif_sdram.c
+- bsps/arm/tms570/start/init_esm.c
+- bsps/arm/tms570/start/init_pinmux.c
+- bsps/arm/tms570/start/init_system.c
+- bsps/arm/tms570/start/tms570_selftest.c
+- bsps/arm/tms570/start/tms570_selftest_par_can.c
+- bsps/arm/tms570/start/tms570_selftest_par_mibspi.c
+- bsps/arm/tms570/start/tms570_selftest_par_std.c
+- bsps/arm/tms570/start/tms570_selftest_parity.c
+- bsps/arm/tms570/start/tms570_sys_core.S
+- bsps/arm/tms570/start/tms570_tcram_tests.c
+type: build
diff --git a/spec/build/bsps/arm/tms570/optcclk.yml b/spec/build/bsps/arm/tms570/optcclk.yml
new file mode 100644
index 0000000000..674ec1ac86
--- /dev/null
+++ b/spec/build/bsps/arm/tms570/optcclk.yml
@@ -0,0 +1,16 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+actions:
+- get-integer: null
+- define: null
+build-type: option
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+default: 96000000
+default-by-variant: []
+description: |
+ CPU clock in Hz
+enabled-by: true
+format: '{}'
+links: []
+name: TMS570_CCLK
+type: build
diff --git a/spec/build/bsps/arm/tms570/optconirq.yml b/spec/build/bsps/arm/tms570/optconirq.yml
new file mode 100644
index 0000000000..3e3dc5a836
--- /dev/null
+++ b/spec/build/bsps/arm/tms570/optconirq.yml
@@ -0,0 +1,16 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+actions:
+- get-integer: null
+- define: null
+build-type: option
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+default: 1
+default-by-variant: []
+description: |
+ The tms570 console driver can operate in either polled or interrupt mode.
+enabled-by: true
+format: '{}'
+links: []
+name: CONSOLE_USE_INTERRUPTS
+type: build
diff --git a/spec/build/bsps/arm/tms570/optlowinit.yml b/spec/build/bsps/arm/tms570/optlowinit.yml
new file mode 100644
index 0000000000..d889dd2573
--- /dev/null
+++ b/spec/build/bsps/arm/tms570/optlowinit.yml
@@ -0,0 +1,16 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+actions:
+- get-boolean: null
+- define-condition: null
+- env-enable: null
+build-type: option
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+default: false
+default-by-variant: []
+description: |
+ Include BSP startup code for TMS570LS3137 which allows to start RTEMS application directly after reset
+enabled-by: true
+links: []
+name: TMS570_USE_HWINIT_STARTUP
+type: build
diff --git a/spec/build/bsps/arm/tms570/optmintskstksz.yml b/spec/build/bsps/arm/tms570/optmintskstksz.yml
new file mode 100644
index 0000000000..57e77ae551
--- /dev/null
+++ b/spec/build/bsps/arm/tms570/optmintskstksz.yml
@@ -0,0 +1,16 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+actions:
+- get-integer: null
+- define: null
+build-type: option
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+default: 1024
+default-by-variant: []
+description: |
+ Suggested minimum task stack size in bytes
+enabled-by: true
+format: '{}'
+links: []
+name: BSP_MINIMUM_TASK_STACK_SIZE
+type: build
diff --git a/spec/build/bsps/arm/tms570/optoscmain.yml b/spec/build/bsps/arm/tms570/optoscmain.yml
new file mode 100644
index 0000000000..8ebd6bb82d
--- /dev/null
+++ b/spec/build/bsps/arm/tms570/optoscmain.yml
@@ -0,0 +1,16 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+actions:
+- get-integer: null
+- define: null
+build-type: option
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+default: 12000000
+default-by-variant: []
+description: |
+ main oscillator frequency in Hz
+enabled-by: true
+format: '{}'
+links: []
+name: TMS570_OSCILLATOR_MAIN
+type: build
diff --git a/spec/build/bsps/arm/tms570/optoscrtc.yml b/spec/build/bsps/arm/tms570/optoscrtc.yml
new file mode 100644
index 0000000000..8e14cbf9a8
--- /dev/null
+++ b/spec/build/bsps/arm/tms570/optoscrtc.yml
@@ -0,0 +1,16 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+actions:
+- get-integer: null
+- define: null
+build-type: option
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+default: 32768
+default-by-variant: []
+description: |
+ RTC oscillator frequency in Hz
+enabled-by: true
+format: '{}'
+links: []
+name: TMS570_OSCILLATOR_RTC
+type: build
diff --git a/spec/build/bsps/arm/tms570/optreginit.yml b/spec/build/bsps/arm/tms570/optreginit.yml
new file mode 100644
index 0000000000..3f7e9f2bf2
--- /dev/null
+++ b/spec/build/bsps/arm/tms570/optreginit.yml
@@ -0,0 +1,15 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+actions:
+- get-boolean: null
+- define-condition: null
+build-type: option
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+default: true
+default-by-variant: []
+description: |
+ The TMS570 needs to have the registers of its CPU initialized to avoid CCMR4F errors
+enabled-by: true
+links: []
+name: BSP_START_NEEDS_REGISTER_INITIALIZATION
+type: build
diff --git a/spec/build/bsps/arm/tms570/optscibaud.yml b/spec/build/bsps/arm/tms570/optscibaud.yml
new file mode 100644
index 0000000000..e4eedd871b
--- /dev/null
+++ b/spec/build/bsps/arm/tms570/optscibaud.yml
@@ -0,0 +1,16 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+actions:
+- get-integer: null
+- define: null
+build-type: option
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+default: 115200
+default-by-variant: []
+description: |
+ baud for UARTs
+enabled-by: true
+format: '{}'
+links: []
+name: TMS570_SCI_BAUD_RATE
+type: build
diff --git a/spec/build/bsps/arm/tms570/opttms570ls3137.yml b/spec/build/bsps/arm/tms570/opttms570ls3137.yml
new file mode 100644
index 0000000000..344f209ca1
--- /dev/null
+++ b/spec/build/bsps/arm/tms570/opttms570ls3137.yml
@@ -0,0 +1,15 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+actions:
+- get-boolean: null
+- define-condition: null
+build-type: option
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+default: false
+default-by-variant: []
+description: |
+ target used for identify TMS570LS3137 board
+enabled-by: true
+links: []
+name: ARM_TMS570LS3137
+type: build
diff --git a/spec/build/bsps/arm/tms570/tstls3137hdkintram.yml b/spec/build/bsps/arm/tms570/tstls3137hdkintram.yml
new file mode 100644
index 0000000000..c9271afdd0
--- /dev/null
+++ b/spec/build/bsps/arm/tms570/tstls3137hdkintram.yml
@@ -0,0 +1,23 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+actions:
+- set-test-state:
+ fileio: exclude
+ ftp01: exclude
+ iostream: exclude
+ loopback: exclude
+ mghttpd01: exclude
+ monitor02: exclude
+ pppd: exclude
+ syscall01: exclude
+ utf8proc01: exclude
+build-type: option
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+default: null
+default-by-variant: []
+description: ''
+enabled-by: true
+links:
+- role: build-dependency
+ uid: ../../tstsmallmem
+type: build
diff --git a/spec/build/bsps/arm/xen/abi.yml b/spec/build/bsps/arm/xen/abi.yml
new file mode 100644
index 0000000000..ed581d94f4
--- /dev/null
+++ b/spec/build/bsps/arm/xen/abi.yml
@@ -0,0 +1,20 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+actions:
+- get-string: null
+- split: null
+- env-append: null
+build-type: option
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+default:
+- -march=armv7-a
+- -mthumb
+- -mfpu=neon
+- -mfloat-abi=hard
+default-by-variant: []
+description: |
+ ABI flags
+enabled-by: true
+links: []
+name: ABI_FLAGS
+type: build
diff --git a/spec/build/bsps/arm/xen/bspxen.yml b/spec/build/bsps/arm/xen/bspxen.yml
new file mode 100644
index 0000000000..e469170e34
--- /dev/null
+++ b/spec/build/bsps/arm/xen/bspxen.yml
@@ -0,0 +1,78 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+arch: arm
+bsp: xen_virtual
+build-type: bsp
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+enabled-by: true
+family: xen
+includes: []
+install:
+- destination: ${BSP_INCLUDEDIR}
+ source:
+ - bsps/arm/xen/include/bsp.h
+ - bsps/arm/xen/include/tm27.h
+- destination: ${BSP_INCLUDEDIR}/bsp
+ source:
+ - bsps/arm/xen/include/bsp/irq.h
+links:
+- role: build-dependency
+ uid: ../grp
+- role: build-dependency
+ uid: ../start
+- role: build-dependency
+ uid: abi
+- role: build-dependency
+ uid: optgentmrusevirt
+- role: build-dependency
+ uid: optgentmunmask
+- role: build-dependency
+ uid: optloadoff
+- role: build-dependency
+ uid: ../optmmusz
+- role: build-dependency
+ uid: optnocachelen
+- role: build-dependency
+ uid: optramlen
+- role: build-dependency
+ uid: optramori
+- role: build-dependency
+ uid: optzimghdr
+- role: build-dependency
+ uid: ../../obj
+- role: build-dependency
+ uid: ../../objirq
+- role: build-dependency
+ uid: ../../optcachedata
+- role: build-dependency
+ uid: ../../optcacheinst
+- role: build-dependency
+ uid: ../../opto2
+- role: build-dependency
+ uid: linkcmds
+- role: build-dependency
+ uid: ../../bspopts
+source:
+- bsps/arm/shared/cache/cache-cp15.c
+- bsps/arm/shared/clock/clock-generic-timer.c
+- bsps/arm/shared/cp15/arm-cp15-set-exception-handler.c
+- bsps/arm/shared/cp15/arm-cp15-set-ttb-entries.c
+- bsps/arm/shared/irq/irq-gic.c
+- bsps/arm/shared/serial/arm-pl011.c
+- bsps/arm/shared/start/bsp-start-memcpy.S
+- bsps/arm/xen/console/console.c
+- bsps/arm/xen/start/bspstart.c
+- bsps/arm/xen/start/bspstarthooks.c
+- bsps/arm/xen/start/bspstartmmu.c
+- bsps/shared/dev/btimer/btimer-stub.c
+- bsps/shared/dev/getentropy/getentropy-cpucounter.c
+- bsps/shared/dev/serial/console-termios-init.c
+- bsps/shared/dev/serial/console-termios.c
+- bsps/shared/irq/irq-default-handler.c
+- bsps/shared/start/bspfatal-default.c
+- bsps/shared/start/bspgetworkarea-default.c
+- bsps/shared/start/bspreset-empty.c
+- bsps/shared/start/sbrk.c
+type: build
diff --git a/spec/build/bsps/arm/xen/linkcmds.yml b/spec/build/bsps/arm/xen/linkcmds.yml
new file mode 100644
index 0000000000..ab36af512b
--- /dev/null
+++ b/spec/build/bsps/arm/xen/linkcmds.yml
@@ -0,0 +1,72 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: config-file
+content: |
+ /*
+ * SPDX-License-Identifier: BSD-2-Clause
+ *
+ * Copyright (C) 2019 DornerWorks
+ * Written by Jeff Kubascik <jeff.kubascik@dornerworks.com>
+ *
+ * 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.
+ */
+
+ MEMORY {
+ RAM_MMU : ORIGIN = ${BSP_XEN_RAM_BASE}, LENGTH = ${ARM_MMU_TRANSLATION_TABLE_SIZE}
+ RAM : ORIGIN = ${BSP_XEN_RAM_BASE} + ${BSP_XEN_LOAD_OFFSET}, LENGTH = ${BSP_XEN_RAM_LENGTH} - ${BSP_XEN_LOAD_OFFSET} - ${BSP_XEN_NOCACHE_LENGTH}
+ NOCACHE : ORIGIN = ${BSP_XEN_RAM_BASE} + ${BSP_XEN_RAM_LENGTH} - ${BSP_XEN_NOCACHE_LENGTH}, LENGTH = ${BSP_XEN_NOCACHE_LENGTH}
+ }
+
+ REGION_ALIAS ("REGION_START", RAM);
+ REGION_ALIAS ("REGION_VECTOR", RAM);
+ REGION_ALIAS ("REGION_TEXT", RAM);
+ REGION_ALIAS ("REGION_TEXT_LOAD", RAM);
+ REGION_ALIAS ("REGION_RODATA", RAM);
+ REGION_ALIAS ("REGION_RODATA_LOAD", RAM);
+ REGION_ALIAS ("REGION_DATA", RAM);
+ REGION_ALIAS ("REGION_DATA_LOAD", RAM);
+ REGION_ALIAS ("REGION_FAST_TEXT", RAM);
+ REGION_ALIAS ("REGION_FAST_TEXT_LOAD", RAM);
+ REGION_ALIAS ("REGION_FAST_DATA", RAM);
+ REGION_ALIAS ("REGION_FAST_DATA_LOAD", RAM);
+ REGION_ALIAS ("REGION_BSS", RAM);
+ REGION_ALIAS ("REGION_WORK", RAM);
+ REGION_ALIAS ("REGION_STACK", RAM);
+ REGION_ALIAS ("REGION_NOCACHE", NOCACHE);
+ REGION_ALIAS ("REGION_NOCACHE_LOAD", NOCACHE);
+
+ bsp_stack_abt_size = DEFINED (bsp_stack_abt_size) ? bsp_stack_abt_size : 1024;
+
+ bsp_section_rwbarrier_align = DEFINED (bsp_section_rwbarrier_align) ? bsp_section_rwbarrier_align : 1M;
+
+ bsp_vector_table_in_start_section = 1;
+
+ bsp_translation_table_base = ORIGIN (RAM_MMU);
+ bsp_translation_table_end = ORIGIN (RAM_MMU) + LENGTH (RAM_MMU);
+
+ INCLUDE linkcmds.armv4
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+enabled-by: true
+install-path: ${BSP_LIBDIR}
+links: []
+target: linkcmds
+type: build
diff --git a/spec/build/bsps/arm/xen/optgentmrusevirt.yml b/spec/build/bsps/arm/xen/optgentmrusevirt.yml
new file mode 100644
index 0000000000..cfcc9e86d3
--- /dev/null
+++ b/spec/build/bsps/arm/xen/optgentmrusevirt.yml
@@ -0,0 +1,15 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+actions:
+- get-boolean: null
+- define-condition: null
+build-type: option
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+default: true
+default-by-variant: []
+description: |
+ use virtual ARM generic timer
+enabled-by: true
+links: []
+name: ARM_GENERIC_TIMER_USE_VIRTUAL
+type: build
diff --git a/spec/build/bsps/arm/xen/optgentmunmask.yml b/spec/build/bsps/arm/xen/optgentmunmask.yml
new file mode 100644
index 0000000000..1e7c523f15
--- /dev/null
+++ b/spec/build/bsps/arm/xen/optgentmunmask.yml
@@ -0,0 +1,15 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+actions:
+- get-boolean: null
+- define-condition: null
+build-type: option
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+default: true
+default-by-variant: []
+description: |
+ unmask the timer in the tick handler, since Xen will mask the virtual timer before injecting the interrupt to the guest
+enabled-by: true
+links: []
+name: ARM_GENERIC_TIMER_UNMASK_AT_TICK
+type: build
diff --git a/spec/build/bsps/arm/xen/optloadoff.yml b/spec/build/bsps/arm/xen/optloadoff.yml
new file mode 100644
index 0000000000..4589807f88
--- /dev/null
+++ b/spec/build/bsps/arm/xen/optloadoff.yml
@@ -0,0 +1,18 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+actions:
+- get-integer: null
+- assert-uint32: null
+- env-assign: null
+- format-and-define: null
+build-type: option
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+default: 32768
+default-by-variant: []
+description: |
+ offset of RAM region from memory area base
+enabled-by: true
+format: '{:#010x}'
+links: []
+name: BSP_XEN_LOAD_OFFSET
+type: build
diff --git a/spec/build/bsps/arm/xen/optnocachelen.yml b/spec/build/bsps/arm/xen/optnocachelen.yml
new file mode 100644
index 0000000000..389fbb596b
--- /dev/null
+++ b/spec/build/bsps/arm/xen/optnocachelen.yml
@@ -0,0 +1,18 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+actions:
+- get-integer: null
+- assert-uint32: null
+- env-assign: null
+- format-and-define: null
+build-type: option
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+default: 1048576
+default-by-variant: []
+description: |
+ length of nocache RAM region
+enabled-by: true
+format: '{:#010x}'
+links: []
+name: BSP_XEN_NOCACHE_LENGTH
+type: build
diff --git a/spec/build/bsps/arm/xen/optramlen.yml b/spec/build/bsps/arm/xen/optramlen.yml
new file mode 100644
index 0000000000..1d1b43615a
--- /dev/null
+++ b/spec/build/bsps/arm/xen/optramlen.yml
@@ -0,0 +1,18 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+actions:
+- get-integer: null
+- assert-uint32: null
+- env-assign: null
+- format-and-define: null
+build-type: option
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+default: 8388608
+default-by-variant: []
+description: |
+ length of memory area available to the BSP
+enabled-by: true
+format: '{:#010x}'
+links: []
+name: BSP_XEN_RAM_LENGTH
+type: build
diff --git a/spec/build/bsps/arm/xen/optramori.yml b/spec/build/bsps/arm/xen/optramori.yml
new file mode 100644
index 0000000000..95fbf64079
--- /dev/null
+++ b/spec/build/bsps/arm/xen/optramori.yml
@@ -0,0 +1,18 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+actions:
+- get-integer: null
+- assert-uint32: null
+- env-assign: null
+- format-and-define: null
+build-type: option
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+default: 1073741824
+default-by-variant: []
+description: |
+ base address of memory area available to the BSP
+enabled-by: true
+format: '{:#010x}'
+links: []
+name: BSP_XEN_RAM_BASE
+type: build
diff --git a/spec/build/bsps/arm/xen/optzimghdr.yml b/spec/build/bsps/arm/xen/optzimghdr.yml
new file mode 100644
index 0000000000..56aa00c8b1
--- /dev/null
+++ b/spec/build/bsps/arm/xen/optzimghdr.yml
@@ -0,0 +1,15 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+actions:
+- get-boolean: null
+- define-condition: null
+build-type: option
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+default: true
+default-by-variant: []
+description: |
+ include zImage boot header
+enabled-by: true
+links: []
+name: BSP_START_ZIMAGE_HEADER
+type: build
diff --git a/spec/build/bsps/arm/xilinx-zynq/abi.yml b/spec/build/bsps/arm/xilinx-zynq/abi.yml
new file mode 100644
index 0000000000..a3a710c97d
--- /dev/null
+++ b/spec/build/bsps/arm/xilinx-zynq/abi.yml
@@ -0,0 +1,21 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+actions:
+- get-string: null
+- split: null
+- env-append: null
+build-type: option
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+default:
+- -march=armv7-a
+- -mthumb
+- -mfpu=neon
+- -mfloat-abi=hard
+- -mtune=cortex-a9
+default-by-variant: []
+description: |
+ ABI flags
+enabled-by: true
+links: []
+name: ABI_FLAGS
+type: build
diff --git a/spec/build/bsps/arm/xilinx-zynq/bspqemu.yml b/spec/build/bsps/arm/xilinx-zynq/bspqemu.yml
new file mode 100644
index 0000000000..a8f59548d9
--- /dev/null
+++ b/spec/build/bsps/arm/xilinx-zynq/bspqemu.yml
@@ -0,0 +1,19 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+arch: arm
+bsp: xilinx_zynq_a9_qemu
+build-type: bsp
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+enabled-by: true
+family: xilinx-zynq
+includes: []
+install: []
+links:
+- role: build-dependency
+ uid: grp
+- role: build-dependency
+ uid: ../../opto2
+source: []
+type: build
diff --git a/spec/build/bsps/arm/xilinx-zynq/bspzc702.yml b/spec/build/bsps/arm/xilinx-zynq/bspzc702.yml
new file mode 100644
index 0000000000..683c2c7b8c
--- /dev/null
+++ b/spec/build/bsps/arm/xilinx-zynq/bspzc702.yml
@@ -0,0 +1,19 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+arch: arm
+bsp: xilinx_zynq_zc702
+build-type: bsp
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+enabled-by: true
+family: xilinx-zynq
+includes: []
+install: []
+links:
+- role: build-dependency
+ uid: grp
+- role: build-dependency
+ uid: ../../opto2
+source: []
+type: build
diff --git a/spec/build/bsps/arm/xilinx-zynq/bspzc706.yml b/spec/build/bsps/arm/xilinx-zynq/bspzc706.yml
new file mode 100644
index 0000000000..eca7aaf46c
--- /dev/null
+++ b/spec/build/bsps/arm/xilinx-zynq/bspzc706.yml
@@ -0,0 +1,19 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+arch: arm
+bsp: xilinx_zynq_zc706
+build-type: bsp
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+enabled-by: true
+family: xilinx-zynq
+includes: []
+install: []
+links:
+- role: build-dependency
+ uid: grp
+- role: build-dependency
+ uid: ../../opto2
+source: []
+type: build
diff --git a/spec/build/bsps/arm/xilinx-zynq/bspzedboard.yml b/spec/build/bsps/arm/xilinx-zynq/bspzedboard.yml
new file mode 100644
index 0000000000..ba285c1b80
--- /dev/null
+++ b/spec/build/bsps/arm/xilinx-zynq/bspzedboard.yml
@@ -0,0 +1,19 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+arch: arm
+bsp: xilinx_zynq_zedboard
+build-type: bsp
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+enabled-by: true
+family: xilinx-zynq
+includes: []
+install: []
+links:
+- role: build-dependency
+ uid: grp
+- role: build-dependency
+ uid: ../../opto2
+source: []
+type: build
diff --git a/spec/build/bsps/arm/xilinx-zynq/grp.yml b/spec/build/bsps/arm/xilinx-zynq/grp.yml
new file mode 100644
index 0000000000..264308e6ad
--- /dev/null
+++ b/spec/build/bsps/arm/xilinx-zynq/grp.yml
@@ -0,0 +1,64 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: group
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+enabled-by: true
+includes: []
+install: []
+ldflags: []
+links:
+- role: build-dependency
+ uid: ../grp
+- role: build-dependency
+ uid: ../start
+- role: build-dependency
+ uid: abi
+- role: build-dependency
+ uid: obj
+- role: build-dependency
+ uid: objsmp
+- role: build-dependency
+ uid: opta9periphclk
+- role: build-dependency
+ uid: optcachedata
+- role: build-dependency
+ uid: optcacheinst
+- role: build-dependency
+ uid: optclkcpu1x
+- role: build-dependency
+ uid: optclkfastidle
+- role: build-dependency
+ uid: optclkuart
+- role: build-dependency
+ uid: optconirq
+- role: build-dependency
+ uid: optconminor
+- role: build-dependency
+ uid: optint0len
+- role: build-dependency
+ uid: optint0ori
+- role: build-dependency
+ uid: optint1len
+- role: build-dependency
+ uid: optint1ori
+- role: build-dependency
+ uid: ../optmmusz
+- role: build-dependency
+ uid: optnocachelen
+- role: build-dependency
+ uid: optramlen
+- role: build-dependency
+ uid: optramori
+- role: build-dependency
+ uid: optresetvec
+- role: build-dependency
+ uid: ../../obj
+- role: build-dependency
+ uid: ../../objirq
+- role: build-dependency
+ uid: linkcmds
+- role: build-dependency
+ uid: ../../bspopts
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/bsps/arm/xilinx-zynq/linkcmds.yml b/spec/build/bsps/arm/xilinx-zynq/linkcmds.yml
new file mode 100644
index 0000000000..d7c0934f78
--- /dev/null
+++ b/spec/build/bsps/arm/xilinx-zynq/linkcmds.yml
@@ -0,0 +1,46 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: config-file
+content: |
+ MEMORY {
+ RAM_INT_0 : ORIGIN = ${ZYNQ_RAM_INT_0_ORIGIN:#010x}, LENGTH = ${ZYNQ_RAM_INT_0_LENGTH:#010x}
+ RAM_INT_1 : ORIGIN = ${ZYNQ_RAM_INT_1_ORIGIN:#010x}, LENGTH = ${ZYNQ_RAM_INT_1_LENGTH:#010x}
+ RAM_MMU : ORIGIN = ${ZYNQ_RAM_ORIGIN:#010x}, LENGTH = ${ARM_MMU_TRANSLATION_TABLE_SIZE:#010x}
+ RAM : ORIGIN = ${ZYNQ_RAM_ORIGIN:#010x} + ${ARM_MMU_TRANSLATION_TABLE_SIZE:#010x}, LENGTH = ${ZYNQ_RAM_LENGTH:#010x} - ${ZYNQ_RAM_ORIGIN:#010x} - ${ARM_MMU_TRANSLATION_TABLE_SIZE:#010x} - ${ZYNQ_RAM_NOCACHE_LENGTH:#010x}
+ NOCACHE : ORIGIN = ${ZYNQ_RAM_LENGTH:#010x} - ${ZYNQ_RAM_NOCACHE_LENGTH:#010x}, LENGTH = ${ZYNQ_RAM_NOCACHE_LENGTH:#010x}
+ }
+
+ REGION_ALIAS ("REGION_START", RAM);
+ REGION_ALIAS ("REGION_VECTOR", RAM);
+ REGION_ALIAS ("REGION_TEXT", RAM);
+ REGION_ALIAS ("REGION_TEXT_LOAD", RAM);
+ REGION_ALIAS ("REGION_RODATA", RAM);
+ REGION_ALIAS ("REGION_RODATA_LOAD", RAM);
+ REGION_ALIAS ("REGION_DATA", RAM);
+ REGION_ALIAS ("REGION_DATA_LOAD", RAM);
+ REGION_ALIAS ("REGION_FAST_TEXT", RAM);
+ REGION_ALIAS ("REGION_FAST_TEXT_LOAD", RAM);
+ REGION_ALIAS ("REGION_FAST_DATA", RAM);
+ REGION_ALIAS ("REGION_FAST_DATA_LOAD", RAM);
+ REGION_ALIAS ("REGION_BSS", RAM);
+ REGION_ALIAS ("REGION_WORK", RAM);
+ REGION_ALIAS ("REGION_STACK", RAM);
+ REGION_ALIAS ("REGION_NOCACHE", NOCACHE);
+ REGION_ALIAS ("REGION_NOCACHE_LOAD", NOCACHE);
+
+ bsp_stack_abt_size = DEFINED (bsp_stack_abt_size) ? bsp_stack_abt_size : 1024;
+
+ bsp_section_rwbarrier_align = DEFINED (bsp_section_rwbarrier_align) ? bsp_section_rwbarrier_align : 1M;
+
+ bsp_vector_table_in_start_section = 1;
+
+ bsp_translation_table_base = ORIGIN (RAM_MMU);
+ bsp_translation_table_end = ORIGIN (RAM_MMU) + LENGTH (RAM_MMU);
+
+ INCLUDE linkcmds.armv4
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+enabled-by: true
+install-path: ${BSP_LIBDIR}
+links: []
+target: linkcmds
+type: build
diff --git a/spec/build/bsps/arm/xilinx-zynq/obj.yml b/spec/build/bsps/arm/xilinx-zynq/obj.yml
new file mode 100644
index 0000000000..6f7f8ab39a
--- /dev/null
+++ b/spec/build/bsps/arm/xilinx-zynq/obj.yml
@@ -0,0 +1,47 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: objects
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by: true
+includes: []
+install:
+- destination: ${BSP_INCLUDEDIR}
+ source:
+ - bsps/arm/xilinx-zynq/include/bsp.h
+ - bsps/arm/xilinx-zynq/include/tm27.h
+- destination: ${BSP_INCLUDEDIR}/bsp
+ source:
+ - bsps/arm/xilinx-zynq/include/bsp/cadence-i2c-regs.h
+ - bsps/arm/xilinx-zynq/include/bsp/cadence-i2c.h
+ - bsps/arm/xilinx-zynq/include/bsp/i2c.h
+ - bsps/arm/xilinx-zynq/include/bsp/irq.h
+links: []
+source:
+- bsps/arm/shared/cache/cache-l2c-310.c
+- bsps/arm/shared/clock/clock-a9mpcore.c
+- bsps/arm/shared/cp15/arm-cp15-set-exception-handler.c
+- bsps/arm/shared/cp15/arm-cp15-set-ttb-entries.c
+- bsps/arm/shared/irq/irq-gic.c
+- bsps/arm/shared/serial/zynq-uart.c
+- bsps/arm/shared/serial/zynq-uart-polled.c
+- bsps/arm/shared/start/bsp-start-memcpy.S
+- bsps/arm/xilinx-zynq/console/console-config.c
+- bsps/arm/xilinx-zynq/console/console-init.c
+- bsps/arm/xilinx-zynq/console/debug-console.c
+- bsps/arm/xilinx-zynq/i2c/cadence-i2c.c
+- bsps/arm/xilinx-zynq/start/bspreset.c
+- bsps/arm/xilinx-zynq/start/bspstart.c
+- bsps/arm/xilinx-zynq/start/bspstarthooks.c
+- bsps/arm/xilinx-zynq/start/bspstartmmu.c
+- bsps/shared/dev/btimer/btimer-stub.c
+- bsps/shared/dev/getentropy/getentropy-cpucounter.c
+- bsps/shared/dev/serial/console-termios.c
+- bsps/shared/irq/irq-default-handler.c
+- bsps/shared/start/bspfatal-default.c
+- bsps/shared/start/bspgetworkarea-default.c
+- bsps/shared/start/sbrk.c
+- bsps/shared/start/stackalloc.c
+type: build
diff --git a/spec/build/bsps/arm/xilinx-zynq/objsmp.yml b/spec/build/bsps/arm/xilinx-zynq/objsmp.yml
new file mode 100644
index 0000000000..587884f6a3
--- /dev/null
+++ b/spec/build/bsps/arm/xilinx-zynq/objsmp.yml
@@ -0,0 +1,16 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: objects
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by:
+- RTEMS_SMP
+includes: []
+install: []
+links: []
+source:
+- bsps/arm/shared/start/arm-a9mpcore-smp.c
+- bsps/arm/xilinx-zynq/start/bspsmp.c
+type: build
diff --git a/spec/build/bsps/arm/xilinx-zynq/opta9periphclk.yml b/spec/build/bsps/arm/xilinx-zynq/opta9periphclk.yml
new file mode 100644
index 0000000000..0b10b47bc2
--- /dev/null
+++ b/spec/build/bsps/arm/xilinx-zynq/opta9periphclk.yml
@@ -0,0 +1,22 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+actions:
+- get-integer: null
+- define: null
+build-type: option
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+default: 100000000
+default-by-variant:
+- value: 333333333
+ variants:
+ - arm/xilinx_zynq_zc702.*
+- value: 666666667
+ variants:
+ - arm/xilinx_zynq_zedboard.*
+description: |
+ ARM Cortex-A9 MPCore PERIPHCLK clock frequency in Hz
+enabled-by: true
+format: '{}'
+links: []
+name: BSP_ARM_A9MPCORE_PERIPHCLK
+type: build
diff --git a/spec/build/bsps/arm/xilinx-zynq/optcachedata.yml b/spec/build/bsps/arm/xilinx-zynq/optcachedata.yml
new file mode 100644
index 0000000000..1664b0fc31
--- /dev/null
+++ b/spec/build/bsps/arm/xilinx-zynq/optcachedata.yml
@@ -0,0 +1,18 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+actions:
+- get-boolean: null
+- define-condition: null
+build-type: option
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+default: true
+default-by-variant:
+- value: false
+ variants:
+ - arm/.*qemu
+description: |
+ enable data cache
+enabled-by: true
+links: []
+name: BSP_DATA_CACHE_ENABLED
+type: build
diff --git a/spec/build/bsps/arm/xilinx-zynq/optcacheinst.yml b/spec/build/bsps/arm/xilinx-zynq/optcacheinst.yml
new file mode 100644
index 0000000000..b191133af9
--- /dev/null
+++ b/spec/build/bsps/arm/xilinx-zynq/optcacheinst.yml
@@ -0,0 +1,18 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+actions:
+- get-boolean: null
+- define-condition: null
+build-type: option
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+default: true
+default-by-variant:
+- value: false
+ variants:
+ - arm/.*qemu
+description: |
+ enable instruction cache
+enabled-by: true
+links: []
+name: BSP_INSTRUCTION_CACHE_ENABLED
+type: build
diff --git a/spec/build/bsps/arm/xilinx-zynq/optclkcpu1x.yml b/spec/build/bsps/arm/xilinx-zynq/optclkcpu1x.yml
new file mode 100644
index 0000000000..1f93f52a8a
--- /dev/null
+++ b/spec/build/bsps/arm/xilinx-zynq/optclkcpu1x.yml
@@ -0,0 +1,22 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+actions:
+- get-integer: null
+- define: null
+build-type: option
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+default: 111111111
+default-by-variant:
+- value: 111111111
+ variants:
+ - arm/xilinx_zynq_zc702.*
+- value: 111111111
+ variants:
+ - arm/xilinx_zynq_zedboard.*
+description: |
+ Zynq cpu_1x clock frequency in Hz
+enabled-by: true
+format: '{}'
+links: []
+name: ZYNQ_CLOCK_CPU_1X
+type: build
diff --git a/spec/build/bsps/arm/xilinx-zynq/optclkfastidle.yml b/spec/build/bsps/arm/xilinx-zynq/optclkfastidle.yml
new file mode 100644
index 0000000000..b800b20428
--- /dev/null
+++ b/spec/build/bsps/arm/xilinx-zynq/optclkfastidle.yml
@@ -0,0 +1,18 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+actions:
+- get-boolean: null
+- define-condition: null
+build-type: option
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+default: false
+default-by-variant:
+- value: true
+ variants:
+ - arm/.*qemu
+description: |
+ This sets a mode where the time runs as fast as possible when a clock ISR occurs while the IDLE thread is executing. This can significantly reduce simulation times.
+enabled-by: true
+links: []
+name: CLOCK_DRIVER_USE_FAST_IDLE
+type: build
diff --git a/spec/build/bsps/arm/xilinx-zynq/optclkuart.yml b/spec/build/bsps/arm/xilinx-zynq/optclkuart.yml
new file mode 100644
index 0000000000..7d69273eb2
--- /dev/null
+++ b/spec/build/bsps/arm/xilinx-zynq/optclkuart.yml
@@ -0,0 +1,22 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+actions:
+- get-integer: null
+- define: null
+build-type: option
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+default: 50000000
+default-by-variant:
+- value: 50000000
+ variants:
+ - arm/xilinx_zynq_zc702.*
+- value: 50000000
+ variants:
+ - arm/xilinx_zynq_zedboard.*
+description: |
+ Zynq UART clock frequency in Hz
+enabled-by: true
+format: '{}'
+links: []
+name: ZYNQ_CLOCK_UART
+type: build
diff --git a/spec/build/bsps/arm/xilinx-zynq/optconirq.yml b/spec/build/bsps/arm/xilinx-zynq/optconirq.yml
new file mode 100644
index 0000000000..ecb91d81a3
--- /dev/null
+++ b/spec/build/bsps/arm/xilinx-zynq/optconirq.yml
@@ -0,0 +1,15 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+actions:
+- get-boolean: null
+- define-condition: null
+build-type: option
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+default: true
+default-by-variant: []
+description: |
+ use interrupt driven mode for console devices (used by default)
+enabled-by: true
+links: []
+name: ZYNQ_CONSOLE_USE_INTERRUPTS
+type: build
diff --git a/spec/build/bsps/arm/xilinx-zynq/optconminor.yml b/spec/build/bsps/arm/xilinx-zynq/optconminor.yml
new file mode 100644
index 0000000000..55074c6dac
--- /dev/null
+++ b/spec/build/bsps/arm/xilinx-zynq/optconminor.yml
@@ -0,0 +1,15 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+actions:
+- get-boolean: null
+- define-condition: null
+build-type: option
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+default: true
+default-by-variant: []
+description: |
+ minor number of console device
+enabled-by: true
+links: []
+name: BSP_CONSOLE_MINOR
+type: build
diff --git a/spec/build/bsps/arm/xilinx-zynq/optint0len.yml b/spec/build/bsps/arm/xilinx-zynq/optint0len.yml
new file mode 100644
index 0000000000..90d77daeb7
--- /dev/null
+++ b/spec/build/bsps/arm/xilinx-zynq/optint0len.yml
@@ -0,0 +1,17 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+actions:
+- get-integer: null
+- assert-uint32: null
+- env-assign: null
+- format-and-define: null
+build-type: option
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+default: 196608
+default-by-variant: []
+description: ''
+enabled-by: true
+format: '{:#010x}'
+links: []
+name: ZYNQ_RAM_INT_0_LENGTH
+type: build
diff --git a/spec/build/bsps/arm/xilinx-zynq/optint0ori.yml b/spec/build/bsps/arm/xilinx-zynq/optint0ori.yml
new file mode 100644
index 0000000000..a8c4514fd9
--- /dev/null
+++ b/spec/build/bsps/arm/xilinx-zynq/optint0ori.yml
@@ -0,0 +1,17 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+actions:
+- get-integer: null
+- assert-uint32: null
+- env-assign: null
+- format-and-define: null
+build-type: option
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+default: 0
+default-by-variant: []
+description: ''
+enabled-by: true
+format: '{:#010x}'
+links: []
+name: ZYNQ_RAM_INT_0_ORIGIN
+type: build
diff --git a/spec/build/bsps/arm/xilinx-zynq/optint1len.yml b/spec/build/bsps/arm/xilinx-zynq/optint1len.yml
new file mode 100644
index 0000000000..32a2c8f3d6
--- /dev/null
+++ b/spec/build/bsps/arm/xilinx-zynq/optint1len.yml
@@ -0,0 +1,17 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+actions:
+- get-integer: null
+- assert-uint32: null
+- env-assign: null
+- format-and-define: null
+build-type: option
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+default: 65024
+default-by-variant: []
+description: ''
+enabled-by: true
+format: '{:#010x}'
+links: []
+name: ZYNQ_RAM_INT_1_LENGTH
+type: build
diff --git a/spec/build/bsps/arm/xilinx-zynq/optint1ori.yml b/spec/build/bsps/arm/xilinx-zynq/optint1ori.yml
new file mode 100644
index 0000000000..f089c467c4
--- /dev/null
+++ b/spec/build/bsps/arm/xilinx-zynq/optint1ori.yml
@@ -0,0 +1,17 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+actions:
+- get-integer: null
+- assert-uint32: null
+- env-assign: null
+- format-and-define: null
+build-type: option
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+default: 4294901760
+default-by-variant: []
+description: ''
+enabled-by: true
+format: '{:#010x}'
+links: []
+name: ZYNQ_RAM_INT_1_ORIGIN
+type: build
diff --git a/spec/build/bsps/arm/xilinx-zynq/optnocachelen.yml b/spec/build/bsps/arm/xilinx-zynq/optnocachelen.yml
new file mode 100644
index 0000000000..7a553ab9a2
--- /dev/null
+++ b/spec/build/bsps/arm/xilinx-zynq/optnocachelen.yml
@@ -0,0 +1,18 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+actions:
+- get-integer: null
+- assert-uint32: null
+- env-assign: null
+- format-and-define: null
+build-type: option
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+default: 1048576
+default-by-variant: []
+description: |
+ length of nocache RAM region
+enabled-by: true
+format: '{:#010x}'
+links: []
+name: ZYNQ_RAM_NOCACHE_LENGTH
+type: build
diff --git a/spec/build/bsps/arm/xilinx-zynq/optramlen.yml b/spec/build/bsps/arm/xilinx-zynq/optramlen.yml
new file mode 100644
index 0000000000..e51d3ebf38
--- /dev/null
+++ b/spec/build/bsps/arm/xilinx-zynq/optramlen.yml
@@ -0,0 +1,30 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+actions:
+- get-integer: null
+- assert-uint32: null
+- env-assign: null
+- format-and-define: null
+build-type: option
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+default: 268435456
+default-by-variant:
+- value: 268435456
+ variants:
+ - arm/xilinx_zynq_a9_qemu
+- value: 1073741824
+ variants:
+ - arm/xilinx_zynq_zc702
+- value: 1073741824
+ variants:
+ - arm/xilinx_zynq_zc706
+- value: 536870912
+ variants:
+ - arm/xilinx_zynq_zedboard
+description: |
+ override a BSP's default RAM length
+enabled-by: true
+format: '{:#010x}'
+links: []
+name: ZYNQ_RAM_LENGTH
+type: build
diff --git a/spec/build/bsps/arm/xilinx-zynq/optramori.yml b/spec/build/bsps/arm/xilinx-zynq/optramori.yml
new file mode 100644
index 0000000000..5723b73d53
--- /dev/null
+++ b/spec/build/bsps/arm/xilinx-zynq/optramori.yml
@@ -0,0 +1,21 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+actions:
+- get-integer: null
+- assert-uint32: null
+- assert-aligned: 1048576
+- env-assign: null
+- format-and-define: null
+build-type: option
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+default: 1048576
+default-by-variant:
+- value: 4194304
+ variants:
+ - arm/xilinx_zynq_zc706
+description: ''
+enabled-by: true
+format: '{:#010x}'
+links: []
+name: ZYNQ_RAM_ORIGIN
+type: build
diff --git a/spec/build/bsps/arm/xilinx-zynq/optresetvec.yml b/spec/build/bsps/arm/xilinx-zynq/optresetvec.yml
new file mode 100644
index 0000000000..efd1ea2b2a
--- /dev/null
+++ b/spec/build/bsps/arm/xilinx-zynq/optresetvec.yml
@@ -0,0 +1,15 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+actions:
+- get-boolean: null
+- define-condition: null
+build-type: option
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+default: false
+default-by-variant: []
+description: |
+ reset vector address for BSP start
+enabled-by: true
+links: []
+name: BSP_START_RESET_VECTOR
+type: build
diff --git a/spec/build/bsps/arm/xilinx-zynqmp/abi.yml b/spec/build/bsps/arm/xilinx-zynqmp/abi.yml
new file mode 100644
index 0000000000..23c66bb5b8
--- /dev/null
+++ b/spec/build/bsps/arm/xilinx-zynqmp/abi.yml
@@ -0,0 +1,21 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+actions:
+- get-string: null
+- split: null
+- env-append: null
+build-type: option
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+default:
+- -march=armv7-a
+- -mthumb
+- -mfpu=neon
+- -mfloat-abi=hard
+- -mtune=cortex-a53
+default-by-variant: []
+description: |
+ ABI flags
+enabled-by: true
+links: []
+name: ABI_FLAGS
+type: build
diff --git a/spec/build/bsps/arm/xilinx-zynqmp/bspxilinxzynqmp.yml b/spec/build/bsps/arm/xilinx-zynqmp/bspxilinxzynqmp.yml
new file mode 100644
index 0000000000..fe56228c38
--- /dev/null
+++ b/spec/build/bsps/arm/xilinx-zynqmp/bspxilinxzynqmp.yml
@@ -0,0 +1,95 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+arch: arm
+bsp: xilinx_zynqmp_ultra96
+build-type: bsp
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+enabled-by: true
+family: xilinx-zynqmp
+includes: []
+install:
+- destination: ${BSP_INCLUDEDIR}
+ source:
+ - bsps/arm/xilinx-zynqmp/include/bsp.h
+ - bsps/arm/xilinx-zynqmp/include/tm27.h
+- destination: ${BSP_INCLUDEDIR}/bsp
+ source:
+ - bsps/arm/xilinx-zynqmp/include/bsp/irq.h
+links:
+- role: build-dependency
+ uid: ../grp
+- role: build-dependency
+ uid: ../start
+- role: build-dependency
+ uid: abi
+- role: build-dependency
+ uid: objsmp
+- role: build-dependency
+ uid: optcachedata
+- role: build-dependency
+ uid: optcacheinst
+- role: build-dependency
+ uid: optclkfastidle
+- role: build-dependency
+ uid: optclkuart
+- role: build-dependency
+ uid: optconirq
+- role: build-dependency
+ uid: optconminor
+- role: build-dependency
+ uid: optgentmrfreq
+- role: build-dependency
+ uid: optgentmrusevirt
+- role: build-dependency
+ uid: optint0len
+- role: build-dependency
+ uid: optint0ori
+- role: build-dependency
+ uid: optint1len
+- role: build-dependency
+ uid: optint1ori
+- role: build-dependency
+ uid: ../optmmusz
+- role: build-dependency
+ uid: optnocachelen
+- role: build-dependency
+ uid: optramlen
+- role: build-dependency
+ uid: optramori
+- role: build-dependency
+ uid: optresetvec
+- role: build-dependency
+ uid: ../../obj
+- role: build-dependency
+ uid: ../../objirq
+- role: build-dependency
+ uid: ../../opto2
+- role: build-dependency
+ uid: linkcmds
+- role: build-dependency
+ uid: ../../bspopts
+source:
+- bsps/arm/shared/cache/cache-cp15.c
+- bsps/arm/shared/clock/clock-generic-timer.c
+- bsps/arm/shared/cp15/arm-cp15-set-exception-handler.c
+- bsps/arm/shared/cp15/arm-cp15-set-ttb-entries.c
+- bsps/arm/shared/irq/irq-gic.c
+- bsps/arm/shared/serial/zynq-uart.c
+- bsps/arm/shared/serial/zynq-uart-polled.c
+- bsps/arm/shared/start/bsp-start-memcpy.S
+- bsps/arm/xilinx-zynqmp/console/console-config.c
+- bsps/arm/xilinx-zynqmp/start/bspreset.c
+- bsps/arm/xilinx-zynqmp/start/bspstart.c
+- bsps/arm/xilinx-zynqmp/start/bspstarthooks.c
+- bsps/arm/xilinx-zynqmp/start/bspstartmmu.c
+- bsps/shared/dev/btimer/btimer-stub.c
+- bsps/shared/dev/getentropy/getentropy-cpucounter.c
+- bsps/shared/dev/serial/console-termios.c
+- bsps/shared/irq/irq-default-handler.c
+- bsps/shared/start/bspfatal-default.c
+- bsps/shared/start/bspgetworkarea-default.c
+- bsps/shared/start/sbrk.c
+- bsps/shared/start/stackalloc.c
+type: build
diff --git a/spec/build/bsps/arm/xilinx-zynqmp/linkcmds.yml b/spec/build/bsps/arm/xilinx-zynqmp/linkcmds.yml
new file mode 100644
index 0000000000..77bd5fb763
--- /dev/null
+++ b/spec/build/bsps/arm/xilinx-zynqmp/linkcmds.yml
@@ -0,0 +1,46 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: config-file
+content: |
+ MEMORY {
+ RAM_INT_0 : ORIGIN = ${ZYNQMP_RAM_INT_0_ORIGIN:#010x}, LENGTH = ${ZYNQMP_RAM_INT_0_LENGTH:#010x}
+ RAM_INT_1 : ORIGIN = ${ZYNQMP_RAM_INT_1_ORIGIN:#010x}, LENGTH = ${ZYNQMP_RAM_INT_1_LENGTH:#010x}
+ RAM_MMU : ORIGIN = ${ZYNQMP_RAM_ORIGIN:#010x}, LENGTH = ${ARM_MMU_TRANSLATION_TABLE_SIZE:#010x}
+ RAM : ORIGIN = ${ZYNQMP_RAM_ORIGIN:#010x} + ${ARM_MMU_TRANSLATION_TABLE_SIZE:#010x}, LENGTH = ${ZYNQMP_RAM_LENGTH:#010x} - ${ZYNQMP_RAM_ORIGIN:#010x} - ${ARM_MMU_TRANSLATION_TABLE_SIZE:#010x} - ${ZYNQMP_RAM_NOCACHE_LENGTH:#010x}
+ NOCACHE : ORIGIN = ${ZYNQMP_RAM_LENGTH:#010x} - ${ZYNQMP_RAM_NOCACHE_LENGTH:#010x}, LENGTH = ${ZYNQMP_RAM_NOCACHE_LENGTH:#010x}
+ }
+
+ REGION_ALIAS ("REGION_START", RAM);
+ REGION_ALIAS ("REGION_VECTOR", RAM);
+ REGION_ALIAS ("REGION_TEXT", RAM);
+ REGION_ALIAS ("REGION_TEXT_LOAD", RAM);
+ REGION_ALIAS ("REGION_RODATA", RAM);
+ REGION_ALIAS ("REGION_RODATA_LOAD", RAM);
+ REGION_ALIAS ("REGION_DATA", RAM);
+ REGION_ALIAS ("REGION_DATA_LOAD", RAM);
+ REGION_ALIAS ("REGION_FAST_TEXT", RAM);
+ REGION_ALIAS ("REGION_FAST_TEXT_LOAD", RAM);
+ REGION_ALIAS ("REGION_FAST_DATA", RAM);
+ REGION_ALIAS ("REGION_FAST_DATA_LOAD", RAM);
+ REGION_ALIAS ("REGION_BSS", RAM);
+ REGION_ALIAS ("REGION_WORK", RAM);
+ REGION_ALIAS ("REGION_STACK", RAM);
+ REGION_ALIAS ("REGION_NOCACHE", NOCACHE);
+ REGION_ALIAS ("REGION_NOCACHE_LOAD", NOCACHE);
+
+ bsp_stack_abt_size = DEFINED (bsp_stack_abt_size) ? bsp_stack_abt_size : 1024;
+
+ bsp_section_rwbarrier_align = DEFINED (bsp_section_rwbarrier_align) ? bsp_section_rwbarrier_align : 1M;
+
+ bsp_vector_table_in_start_section = 1;
+
+ bsp_translation_table_base = ORIGIN (RAM_MMU);
+ bsp_translation_table_end = ORIGIN (RAM_MMU) + LENGTH (RAM_MMU);
+
+ INCLUDE linkcmds.armv4
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+enabled-by: true
+install-path: ${BSP_LIBDIR}
+links: []
+target: linkcmds
+type: build
diff --git a/spec/build/bsps/arm/xilinx-zynqmp/objsmp.yml b/spec/build/bsps/arm/xilinx-zynqmp/objsmp.yml
new file mode 100644
index 0000000000..e8b954b5cb
--- /dev/null
+++ b/spec/build/bsps/arm/xilinx-zynqmp/objsmp.yml
@@ -0,0 +1,16 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: objects
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by:
+- RTEMS_SMP
+includes: []
+install: []
+links: []
+source:
+- bsps/arm/shared/start/arm-a9mpcore-smp.c
+- bsps/arm/xilinx-zynqmp/start/bspsmp.c
+type: build
diff --git a/spec/build/bsps/arm/xilinx-zynqmp/optcachedata.yml b/spec/build/bsps/arm/xilinx-zynqmp/optcachedata.yml
new file mode 100644
index 0000000000..1664b0fc31
--- /dev/null
+++ b/spec/build/bsps/arm/xilinx-zynqmp/optcachedata.yml
@@ -0,0 +1,18 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+actions:
+- get-boolean: null
+- define-condition: null
+build-type: option
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+default: true
+default-by-variant:
+- value: false
+ variants:
+ - arm/.*qemu
+description: |
+ enable data cache
+enabled-by: true
+links: []
+name: BSP_DATA_CACHE_ENABLED
+type: build
diff --git a/spec/build/bsps/arm/xilinx-zynqmp/optcacheinst.yml b/spec/build/bsps/arm/xilinx-zynqmp/optcacheinst.yml
new file mode 100644
index 0000000000..b191133af9
--- /dev/null
+++ b/spec/build/bsps/arm/xilinx-zynqmp/optcacheinst.yml
@@ -0,0 +1,18 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+actions:
+- get-boolean: null
+- define-condition: null
+build-type: option
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+default: true
+default-by-variant:
+- value: false
+ variants:
+ - arm/.*qemu
+description: |
+ enable instruction cache
+enabled-by: true
+links: []
+name: BSP_INSTRUCTION_CACHE_ENABLED
+type: build
diff --git a/spec/build/bsps/arm/xilinx-zynqmp/optclkfastidle.yml b/spec/build/bsps/arm/xilinx-zynqmp/optclkfastidle.yml
new file mode 100644
index 0000000000..b800b20428
--- /dev/null
+++ b/spec/build/bsps/arm/xilinx-zynqmp/optclkfastidle.yml
@@ -0,0 +1,18 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+actions:
+- get-boolean: null
+- define-condition: null
+build-type: option
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+default: false
+default-by-variant:
+- value: true
+ variants:
+ - arm/.*qemu
+description: |
+ This sets a mode where the time runs as fast as possible when a clock ISR occurs while the IDLE thread is executing. This can significantly reduce simulation times.
+enabled-by: true
+links: []
+name: CLOCK_DRIVER_USE_FAST_IDLE
+type: build
diff --git a/spec/build/bsps/arm/xilinx-zynqmp/optclkuart.yml b/spec/build/bsps/arm/xilinx-zynqmp/optclkuart.yml
new file mode 100644
index 0000000000..a2def36606
--- /dev/null
+++ b/spec/build/bsps/arm/xilinx-zynqmp/optclkuart.yml
@@ -0,0 +1,19 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+actions:
+- get-integer: null
+- define: null
+build-type: option
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+default: 100000000
+default-by-variant:
+- value: 100000000
+ variants:
+ - arm/xilinx_zynqmp_ultra96.*
+description: |
+ Zynq UART clock frequency in Hz
+enabled-by: true
+format: '{}'
+links: []
+name: ZYNQ_CLOCK_UART
+type: build
diff --git a/spec/build/bsps/arm/xilinx-zynqmp/optconirq.yml b/spec/build/bsps/arm/xilinx-zynqmp/optconirq.yml
new file mode 100644
index 0000000000..ecb91d81a3
--- /dev/null
+++ b/spec/build/bsps/arm/xilinx-zynqmp/optconirq.yml
@@ -0,0 +1,15 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+actions:
+- get-boolean: null
+- define-condition: null
+build-type: option
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+default: true
+default-by-variant: []
+description: |
+ use interrupt driven mode for console devices (used by default)
+enabled-by: true
+links: []
+name: ZYNQ_CONSOLE_USE_INTERRUPTS
+type: build
diff --git a/spec/build/bsps/arm/xilinx-zynqmp/optconminor.yml b/spec/build/bsps/arm/xilinx-zynqmp/optconminor.yml
new file mode 100644
index 0000000000..55074c6dac
--- /dev/null
+++ b/spec/build/bsps/arm/xilinx-zynqmp/optconminor.yml
@@ -0,0 +1,15 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+actions:
+- get-boolean: null
+- define-condition: null
+build-type: option
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+default: true
+default-by-variant: []
+description: |
+ minor number of console device
+enabled-by: true
+links: []
+name: BSP_CONSOLE_MINOR
+type: build
diff --git a/spec/build/bsps/arm/xilinx-zynqmp/optgentmrfreq.yml b/spec/build/bsps/arm/xilinx-zynqmp/optgentmrfreq.yml
new file mode 100644
index 0000000000..a31630ebd6
--- /dev/null
+++ b/spec/build/bsps/arm/xilinx-zynqmp/optgentmrfreq.yml
@@ -0,0 +1,15 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+actions:
+- get-boolean: null
+- define-condition: null
+build-type: option
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+default: false
+default-by-variant: []
+description: |
+ ARM generic timer frequency in Hz
+enabled-by: true
+links: []
+name: ARM_GENERIC_TIMER_FREQ
+type: build
diff --git a/spec/build/bsps/arm/xilinx-zynqmp/optgentmrusevirt.yml b/spec/build/bsps/arm/xilinx-zynqmp/optgentmrusevirt.yml
new file mode 100644
index 0000000000..794f66244b
--- /dev/null
+++ b/spec/build/bsps/arm/xilinx-zynqmp/optgentmrusevirt.yml
@@ -0,0 +1,15 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+actions:
+- get-boolean: null
+- define-condition: null
+build-type: option
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+default: false
+default-by-variant: []
+description: |
+ Use virtual ARM generic timer
+enabled-by: true
+links: []
+name: ARM_GENERIC_TIMER_USE_VIRTUAL
+type: build
diff --git a/spec/build/bsps/arm/xilinx-zynqmp/optint0len.yml b/spec/build/bsps/arm/xilinx-zynqmp/optint0len.yml
new file mode 100644
index 0000000000..55b3487553
--- /dev/null
+++ b/spec/build/bsps/arm/xilinx-zynqmp/optint0len.yml
@@ -0,0 +1,17 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+actions:
+- get-integer: null
+- assert-uint32: null
+- env-assign: null
+- format-and-define: null
+build-type: option
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+default: 196608
+default-by-variant: []
+description: ''
+enabled-by: true
+format: '{:#010x}'
+links: []
+name: ZYNQMP_RAM_INT_0_LENGTH
+type: build
diff --git a/spec/build/bsps/arm/xilinx-zynqmp/optint0ori.yml b/spec/build/bsps/arm/xilinx-zynqmp/optint0ori.yml
new file mode 100644
index 0000000000..f6a8b5f7d4
--- /dev/null
+++ b/spec/build/bsps/arm/xilinx-zynqmp/optint0ori.yml
@@ -0,0 +1,17 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+actions:
+- get-integer: null
+- assert-uint32: null
+- env-assign: null
+- format-and-define: null
+build-type: option
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+default: 0
+default-by-variant: []
+description: ''
+enabled-by: true
+format: '{:#010x}'
+links: []
+name: ZYNQMP_RAM_INT_0_ORIGIN
+type: build
diff --git a/spec/build/bsps/arm/xilinx-zynqmp/optint1len.yml b/spec/build/bsps/arm/xilinx-zynqmp/optint1len.yml
new file mode 100644
index 0000000000..bdaef49951
--- /dev/null
+++ b/spec/build/bsps/arm/xilinx-zynqmp/optint1len.yml
@@ -0,0 +1,17 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+actions:
+- get-integer: null
+- assert-uint32: null
+- env-assign: null
+- format-and-define: null
+build-type: option
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+default: 65024
+default-by-variant: []
+description: ''
+enabled-by: true
+format: '{:#010x}'
+links: []
+name: ZYNQMP_RAM_INT_1_LENGTH
+type: build
diff --git a/spec/build/bsps/arm/xilinx-zynqmp/optint1ori.yml b/spec/build/bsps/arm/xilinx-zynqmp/optint1ori.yml
new file mode 100644
index 0000000000..55caa6f4a2
--- /dev/null
+++ b/spec/build/bsps/arm/xilinx-zynqmp/optint1ori.yml
@@ -0,0 +1,17 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+actions:
+- get-integer: null
+- assert-uint32: null
+- env-assign: null
+- format-and-define: null
+build-type: option
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+default: 4294901760
+default-by-variant: []
+description: ''
+enabled-by: true
+format: '{:#010x}'
+links: []
+name: ZYNQMP_RAM_INT_1_ORIGIN
+type: build
diff --git a/spec/build/bsps/arm/xilinx-zynqmp/optnocachelen.yml b/spec/build/bsps/arm/xilinx-zynqmp/optnocachelen.yml
new file mode 100644
index 0000000000..4b9118d926
--- /dev/null
+++ b/spec/build/bsps/arm/xilinx-zynqmp/optnocachelen.yml
@@ -0,0 +1,18 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+actions:
+- get-integer: null
+- assert-uint32: null
+- env-assign: null
+- format-and-define: null
+build-type: option
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+default: 1048576
+default-by-variant: []
+description: |
+ length of nocache RAM region
+enabled-by: true
+format: '{:#010x}'
+links: []
+name: ZYNQMP_RAM_NOCACHE_LENGTH
+type: build
diff --git a/spec/build/bsps/arm/xilinx-zynqmp/optramlen.yml b/spec/build/bsps/arm/xilinx-zynqmp/optramlen.yml
new file mode 100644
index 0000000000..6efaf7b13b
--- /dev/null
+++ b/spec/build/bsps/arm/xilinx-zynqmp/optramlen.yml
@@ -0,0 +1,21 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+actions:
+- get-integer: null
+- assert-uint32: null
+- env-assign: null
+- format-and-define: null
+build-type: option
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+default: 268435456
+default-by-variant:
+- value: 2147483648
+ variants:
+ - arm/xilinx_zynqmp_ultra96
+description: |
+ override a BSP's default RAM length
+enabled-by: true
+format: '{:#010x}'
+links: []
+name: ZYNQMP_RAM_LENGTH
+type: build
diff --git a/spec/build/bsps/arm/xilinx-zynqmp/optramori.yml b/spec/build/bsps/arm/xilinx-zynqmp/optramori.yml
new file mode 100644
index 0000000000..401b8ec3a3
--- /dev/null
+++ b/spec/build/bsps/arm/xilinx-zynqmp/optramori.yml
@@ -0,0 +1,18 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+actions:
+- get-integer: null
+- assert-uint32: null
+- assert-aligned: 1048576
+- env-assign: null
+- format-and-define: null
+build-type: option
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+default: 1048576
+default-by-variant: []
+description: ''
+enabled-by: true
+format: '{:#010x}'
+links: []
+name: ZYNQMP_RAM_ORIGIN
+type: build
diff --git a/spec/build/bsps/arm/xilinx-zynqmp/optresetvec.yml b/spec/build/bsps/arm/xilinx-zynqmp/optresetvec.yml
new file mode 100644
index 0000000000..efd1ea2b2a
--- /dev/null
+++ b/spec/build/bsps/arm/xilinx-zynqmp/optresetvec.yml
@@ -0,0 +1,15 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+actions:
+- get-boolean: null
+- define-condition: null
+build-type: option
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+default: false
+default-by-variant: []
+description: |
+ reset vector address for BSP start
+enabled-by: true
+links: []
+name: BSP_START_RESET_VECTOR
+type: build
diff --git a/spec/build/bsps/bfin/TLL6527M/abi.yml b/spec/build/bsps/bfin/TLL6527M/abi.yml
new file mode 100644
index 0000000000..861623f2a5
--- /dev/null
+++ b/spec/build/bsps/bfin/TLL6527M/abi.yml
@@ -0,0 +1,17 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+actions:
+- get-string: null
+- split: null
+- env-append: null
+build-type: option
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+default:
+- -mcpu=bf527
+default-by-variant: []
+description: |
+ ABI flags
+enabled-by: true
+links: []
+name: ABI_FLAGS
+type: build
diff --git a/spec/build/bsps/bfin/TLL6527M/bsptll6527m.yml b/spec/build/bsps/bfin/TLL6527M/bsptll6527m.yml
new file mode 100644
index 0000000000..8c90c20272
--- /dev/null
+++ b/spec/build/bsps/bfin/TLL6527M/bsptll6527m.yml
@@ -0,0 +1,62 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+arch: bfin
+bsp: TLL6527M
+build-type: bsp
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+enabled-by: true
+family: TLL6527M
+includes: []
+install:
+- destination: ${BSP_INCLUDEDIR}
+ source:
+ - bsps/bfin/TLL6527M/include/bsp.h
+ - bsps/bfin/TLL6527M/include/cplb.h
+ - bsps/bfin/TLL6527M/include/tm27.h
+- destination: ${BSP_INCLUDEDIR}/bsp
+ source:
+ - bsps/bfin/TLL6527M/include/bsp/irq.h
+- destination: ${BSP_LIBDIR}
+ source:
+ - bsps/bfin/TLL6527M/start/linkcmds
+links:
+- role: build-dependency
+ uid: ../grp
+- role: build-dependency
+ uid: ../obj
+- role: build-dependency
+ uid: ../start
+- role: build-dependency
+ uid: abi
+- role: build-dependency
+ uid: optconbaud
+- role: build-dependency
+ uid: optconirq
+- role: build-dependency
+ uid: optirqtbl
+- role: build-dependency
+ uid: optskyeye
+- role: build-dependency
+ uid: optuartdma
+- role: build-dependency
+ uid: ../../obj
+- role: build-dependency
+ uid: ../../objirqdflt
+- role: build-dependency
+ uid: ../../opto2
+- role: build-dependency
+ uid: ../../bspopts
+source:
+- bsps/bfin/TLL6527M/console/console.c
+- bsps/bfin/TLL6527M/start/bspstart.c
+- bsps/bfin/TLL6527M/start/interrupt.c
+- bsps/bfin/shared/cache/cache.c
+- bsps/shared/dev/getentropy/getentropy-cpucounter.c
+- bsps/shared/start/bspfatal-default.c
+- bsps/shared/start/bspgetworkarea-default.c
+- bsps/shared/start/bspreset-empty.c
+- bsps/shared/start/sbrk.c
+- bsps/shared/start/setvec.c
+type: build
diff --git a/spec/build/bsps/bfin/TLL6527M/optconbaud.yml b/spec/build/bsps/bfin/TLL6527M/optconbaud.yml
new file mode 100644
index 0000000000..c1823caa93
--- /dev/null
+++ b/spec/build/bsps/bfin/TLL6527M/optconbaud.yml
@@ -0,0 +1,16 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+actions:
+- get-integer: null
+- define: null
+build-type: option
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+default: 9600
+default-by-variant: []
+description: |
+ The baudrate of the console uart.
+enabled-by: true
+format: '{}'
+links: []
+name: CONSOLE_BAUDRATE
+type: build
diff --git a/spec/build/bsps/bfin/TLL6527M/optconirq.yml b/spec/build/bsps/bfin/TLL6527M/optconirq.yml
new file mode 100644
index 0000000000..1557437cae
--- /dev/null
+++ b/spec/build/bsps/bfin/TLL6527M/optconirq.yml
@@ -0,0 +1,16 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+actions:
+- get-integer: null
+- define: null
+build-type: option
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+default: 1
+default-by-variant: []
+description: |
+ The console driver can operate in either polled or interrupt mode.
+enabled-by: true
+format: '{}'
+links: []
+name: CONSOLE_USE_INTERRUPTS
+type: build
diff --git a/spec/build/bsps/bfin/TLL6527M/optirqtbl.yml b/spec/build/bsps/bfin/TLL6527M/optirqtbl.yml
new file mode 100644
index 0000000000..925753a83b
--- /dev/null
+++ b/spec/build/bsps/bfin/TLL6527M/optirqtbl.yml
@@ -0,0 +1,15 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+actions:
+- get-boolean: null
+- define-condition: null
+build-type: option
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+default: true
+default-by-variant: []
+description: |
+ Select if INTERRUPT use table or link list
+enabled-by: true
+links: []
+name: INTERRUPT_USE_TABLE
+type: build
diff --git a/spec/build/bsps/bfin/TLL6527M/optskyeye.yml b/spec/build/bsps/bfin/TLL6527M/optskyeye.yml
new file mode 100644
index 0000000000..f6b9655e57
--- /dev/null
+++ b/spec/build/bsps/bfin/TLL6527M/optskyeye.yml
@@ -0,0 +1,15 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+actions:
+- get-boolean: null
+- define-condition: null
+build-type: option
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+default: false
+default-by-variant: []
+description: |
+ (BSP--Skyeye) If defined, disable features which are not supported on Skyeye.
+enabled-by: true
+links: []
+name: BFIN_ON_SKYEYE
+type: build
diff --git a/spec/build/bsps/bfin/TLL6527M/optuartdma.yml b/spec/build/bsps/bfin/TLL6527M/optuartdma.yml
new file mode 100644
index 0000000000..915333096d
--- /dev/null
+++ b/spec/build/bsps/bfin/TLL6527M/optuartdma.yml
@@ -0,0 +1,15 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+actions:
+- get-boolean: null
+- define-condition: null
+build-type: option
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+default: true
+default-by-variant: []
+description: |
+ The uart driver can operate in dma mode with interrupts. Set to 1 if DMA operation is required
+enabled-by: true
+links: []
+name: UART_USE_DMA
+type: build
diff --git a/spec/build/bsps/bfin/bf537Stamp/abi.yml b/spec/build/bsps/bfin/bf537Stamp/abi.yml
new file mode 100644
index 0000000000..530e7a5d14
--- /dev/null
+++ b/spec/build/bsps/bfin/bf537Stamp/abi.yml
@@ -0,0 +1,16 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+actions:
+- get-string: null
+- split: null
+- env-append: null
+build-type: option
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+default: []
+default-by-variant: []
+description: |
+ ABI flags
+enabled-by: true
+links: []
+name: ABI_FLAGS
+type: build
diff --git a/spec/build/bsps/bfin/bf537Stamp/bspbf537stamp.yml b/spec/build/bsps/bfin/bf537Stamp/bspbf537stamp.yml
new file mode 100644
index 0000000000..3307b2d110
--- /dev/null
+++ b/spec/build/bsps/bfin/bf537Stamp/bspbf537stamp.yml
@@ -0,0 +1,57 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+arch: bfin
+bsp: bf537Stamp
+build-type: bsp
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+enabled-by: true
+family: bf537Stamp
+includes: []
+install:
+- destination: ${BSP_INCLUDEDIR}
+ source:
+ - bsps/bfin/bf537Stamp/include/bsp.h
+ - bsps/bfin/bf537Stamp/include/tm27.h
+- destination: ${BSP_INCLUDEDIR}/bsp
+ source:
+ - bsps/bfin/bf537Stamp/include/bsp/irq.h
+- destination: ${BSP_LIBDIR}
+ source:
+ - bsps/bfin/bf537Stamp/start/linkcmds
+links:
+- role: build-dependency
+ uid: abi
+- role: build-dependency
+ uid: objnet
+- role: build-dependency
+ uid: optconirq
+- role: build-dependency
+ uid: optskyeye
+- role: build-dependency
+ uid: start
+- role: build-dependency
+ uid: ../grp
+- role: build-dependency
+ uid: ../obj
+- role: build-dependency
+ uid: ../../obj
+- role: build-dependency
+ uid: ../../objirqdflt
+- role: build-dependency
+ uid: ../../opto2
+- role: build-dependency
+ uid: ../../bspopts
+source:
+- bsps/bfin/bf537Stamp/console/console.c
+- bsps/bfin/bf537Stamp/start/bspstart.c
+- bsps/bfin/shared/cache/cache.c
+- bsps/bfin/shared/interrupt.c
+- bsps/shared/dev/getentropy/getentropy-cpucounter.c
+- bsps/shared/start/bspfatal-default.c
+- bsps/shared/start/bspgetworkarea-default.c
+- bsps/shared/start/bspreset-empty.c
+- bsps/shared/start/sbrk.c
+- bsps/shared/start/setvec.c
+type: build
diff --git a/spec/build/bsps/bfin/bf537Stamp/objnet.yml b/spec/build/bsps/bfin/bf537Stamp/objnet.yml
new file mode 100644
index 0000000000..151d36831e
--- /dev/null
+++ b/spec/build/bsps/bfin/bf537Stamp/objnet.yml
@@ -0,0 +1,17 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: objects
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by:
+- RTEMS_NETWORKING
+includes:
+- cpukit/libnetworking
+install: []
+links: []
+source:
+- bsps/bfin/bf537Stamp/net/ethernet.c
+- bsps/bfin/bf537Stamp/net/networkconfig.c
+type: build
diff --git a/spec/build/bsps/bfin/bf537Stamp/optconirq.yml b/spec/build/bsps/bfin/bf537Stamp/optconirq.yml
new file mode 100644
index 0000000000..683469c931
--- /dev/null
+++ b/spec/build/bsps/bfin/bf537Stamp/optconirq.yml
@@ -0,0 +1,16 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+actions:
+- get-integer: null
+- define: null
+build-type: option
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+default: 0
+default-by-variant: []
+description: |
+ The console driver can operate in either polled or interrupt mode.
+enabled-by: true
+format: '{}'
+links: []
+name: CONSOLE_USE_INTERRUPTS
+type: build
diff --git a/spec/build/bsps/bfin/bf537Stamp/optskyeye.yml b/spec/build/bsps/bfin/bf537Stamp/optskyeye.yml
new file mode 100644
index 0000000000..f6b9655e57
--- /dev/null
+++ b/spec/build/bsps/bfin/bf537Stamp/optskyeye.yml
@@ -0,0 +1,15 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+actions:
+- get-boolean: null
+- define-condition: null
+build-type: option
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+default: false
+default-by-variant: []
+description: |
+ (BSP--Skyeye) If defined, disable features which are not supported on Skyeye.
+enabled-by: true
+links: []
+name: BFIN_ON_SKYEYE
+type: build
diff --git a/spec/build/bsps/bfin/bf537Stamp/start.yml b/spec/build/bsps/bfin/bf537Stamp/start.yml
new file mode 100644
index 0000000000..e105798e1d
--- /dev/null
+++ b/spec/build/bsps/bfin/bf537Stamp/start.yml
@@ -0,0 +1,14 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+asflags: []
+build-type: start-file
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+enabled-by: true
+includes: []
+install-path: ${BSP_LIBDIR}
+links: []
+source:
+- bsps/bfin/bf537Stamp/start/start.S
+target: start.o
+type: build
diff --git a/spec/build/bsps/bfin/eZKit533/abi.yml b/spec/build/bsps/bfin/eZKit533/abi.yml
new file mode 100644
index 0000000000..530e7a5d14
--- /dev/null
+++ b/spec/build/bsps/bfin/eZKit533/abi.yml
@@ -0,0 +1,16 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+actions:
+- get-string: null
+- split: null
+- env-append: null
+build-type: option
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+default: []
+default-by-variant: []
+description: |
+ ABI flags
+enabled-by: true
+links: []
+name: ABI_FLAGS
+type: build
diff --git a/spec/build/bsps/bfin/eZKit533/bspezkit533.yml b/spec/build/bsps/bfin/eZKit533/bspezkit533.yml
new file mode 100644
index 0000000000..aebacd3596
--- /dev/null
+++ b/spec/build/bsps/bfin/eZKit533/bspezkit533.yml
@@ -0,0 +1,56 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+arch: bfin
+bsp: eZKit533
+build-type: bsp
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+enabled-by: true
+family: eZKit533
+includes: []
+install:
+- destination: ${BSP_INCLUDEDIR}
+ source:
+ - bsps/bfin/eZKit533/include/bsp.h
+ - bsps/bfin/eZKit533/include/cplb.h
+ - bsps/bfin/eZKit533/include/tm27.h
+- destination: ${BSP_INCLUDEDIR}/bsp
+ source:
+ - bsps/bfin/eZKit533/include/bsp/irq.h
+- destination: ${BSP_LIBDIR}
+ source:
+ - bsps/bfin/eZKit533/start/linkcmds
+links:
+- role: build-dependency
+ uid: abi
+- role: build-dependency
+ uid: optconirq
+- role: build-dependency
+ uid: optskyeye
+- role: build-dependency
+ uid: ../grp
+- role: build-dependency
+ uid: ../obj
+- role: build-dependency
+ uid: ../start
+- role: build-dependency
+ uid: ../../obj
+- role: build-dependency
+ uid: ../../objirqdflt
+- role: build-dependency
+ uid: ../../opto2
+- role: build-dependency
+ uid: ../../bspopts
+source:
+- bsps/bfin/eZKit533/console/console-io.c
+- bsps/bfin/eZKit533/start/bspstart.c
+- bsps/bfin/shared/cache/cache.c
+- bsps/bfin/shared/interrupt.c
+- bsps/shared/dev/getentropy/getentropy-cpucounter.c
+- bsps/shared/start/bspfatal-default.c
+- bsps/shared/start/bspgetworkarea-default.c
+- bsps/shared/start/bspreset-empty.c
+- bsps/shared/start/sbrk.c
+- bsps/shared/start/setvec.c
+type: build
diff --git a/spec/build/bsps/bfin/eZKit533/optconirq.yml b/spec/build/bsps/bfin/eZKit533/optconirq.yml
new file mode 100644
index 0000000000..683469c931
--- /dev/null
+++ b/spec/build/bsps/bfin/eZKit533/optconirq.yml
@@ -0,0 +1,16 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+actions:
+- get-integer: null
+- define: null
+build-type: option
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+default: 0
+default-by-variant: []
+description: |
+ The console driver can operate in either polled or interrupt mode.
+enabled-by: true
+format: '{}'
+links: []
+name: CONSOLE_USE_INTERRUPTS
+type: build
diff --git a/spec/build/bsps/bfin/eZKit533/optskyeye.yml b/spec/build/bsps/bfin/eZKit533/optskyeye.yml
new file mode 100644
index 0000000000..f6b9655e57
--- /dev/null
+++ b/spec/build/bsps/bfin/eZKit533/optskyeye.yml
@@ -0,0 +1,15 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+actions:
+- get-boolean: null
+- define-condition: null
+build-type: option
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+default: false
+default-by-variant: []
+description: |
+ (BSP--Skyeye) If defined, disable features which are not supported on Skyeye.
+enabled-by: true
+links: []
+name: BFIN_ON_SKYEYE
+type: build
diff --git a/spec/build/bsps/bfin/grp.yml b/spec/build/bsps/bfin/grp.yml
new file mode 100644
index 0000000000..86241a16cf
--- /dev/null
+++ b/spec/build/bsps/bfin/grp.yml
@@ -0,0 +1,46 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: group
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+enabled-by: true
+includes: []
+install:
+- destination: ${BSP_INCLUDEDIR}
+ source:
+ - bsps/bfin/include/bf52x.h
+- destination: ${BSP_INCLUDEDIR}/bsp
+ source:
+ - bsps/bfin/include/bsp/interrupt.h
+- destination: ${BSP_INCLUDEDIR}/libcpu
+ source:
+ - bsps/bfin/include/libcpu/bf533.h
+ - bsps/bfin/include/libcpu/bf537.h
+ - bsps/bfin/include/libcpu/cecRegs.h
+ - bsps/bfin/include/libcpu/coreTimerRegs.h
+ - bsps/bfin/include/libcpu/dmaRegs.h
+ - bsps/bfin/include/libcpu/ebiuRegs.h
+ - bsps/bfin/include/libcpu/ethernet.h
+ - bsps/bfin/include/libcpu/ethernetRegs.h
+ - bsps/bfin/include/libcpu/gpioRegs.h
+ - bsps/bfin/include/libcpu/interrupt.h
+ - bsps/bfin/include/libcpu/memoryRegs.h
+ - bsps/bfin/include/libcpu/mmu.h
+ - bsps/bfin/include/libcpu/mmuRegs.h
+ - bsps/bfin/include/libcpu/ppiRegs.h
+ - bsps/bfin/include/libcpu/rtcRegs.h
+ - bsps/bfin/include/libcpu/sicRegs.h
+ - bsps/bfin/include/libcpu/spi.h
+ - bsps/bfin/include/libcpu/spiRegs.h
+ - bsps/bfin/include/libcpu/sport.h
+ - bsps/bfin/include/libcpu/sportRegs.h
+ - bsps/bfin/include/libcpu/timerRegs.h
+ - bsps/bfin/include/libcpu/twi.h
+ - bsps/bfin/include/libcpu/twiRegs.h
+ - bsps/bfin/include/libcpu/uart.h
+ - bsps/bfin/include/libcpu/uartRegs.h
+ - bsps/bfin/include/libcpu/wdogRegs.h
+ldflags: []
+links: []
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/bsps/bfin/obj.yml b/spec/build/bsps/bfin/obj.yml
new file mode 100644
index 0000000000..b5f666414d
--- /dev/null
+++ b/spec/build/bsps/bfin/obj.yml
@@ -0,0 +1,21 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: objects
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by: true
+includes: []
+install: []
+links: []
+source:
+- bsps/bfin/shared/mmu.c
+- bsps/bfin/shared/dev/clock.c
+- bsps/bfin/shared/dev/rtc.c
+- bsps/bfin/shared/dev/spi.c
+- bsps/bfin/shared/dev/sport.c
+- bsps/bfin/shared/dev/timer.c
+- bsps/bfin/shared/dev/twi.c
+- bsps/bfin/shared/dev/uart.c
+type: build
diff --git a/spec/build/bsps/bfin/start.yml b/spec/build/bsps/bfin/start.yml
new file mode 100644
index 0000000000..bf4c4457c4
--- /dev/null
+++ b/spec/build/bsps/bfin/start.yml
@@ -0,0 +1,14 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+asflags: []
+build-type: start-file
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+enabled-by: true
+includes: []
+install-path: ${BSP_LIBDIR}
+links: []
+source:
+- bsps/bfin/shared/start/start.S
+target: start.o
+type: build
diff --git a/spec/build/bsps/bspopts.yml b/spec/build/bsps/bspopts.yml
new file mode 100644
index 0000000000..836d94476e
--- /dev/null
+++ b/spec/build/bsps/bspopts.yml
@@ -0,0 +1,39 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: config-header
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+enabled-by: true
+guard: __BSP_OPTIONS_H
+include-headers: []
+install-path: ${BSP_INCLUDEDIR}
+links:
+- role: build-dependency
+ uid: optabi
+- role: build-dependency
+ uid: optasflags
+- role: build-dependency
+ uid: optbsp
+- role: build-dependency
+ uid: optfatalverb
+- role: build-dependency
+ uid: optincludes
+- role: build-dependency
+ uid: optldflags
+- role: build-dependency
+ uid: optldflagsbsp
+- role: build-dependency
+ uid: optmakelegacy
+- role: build-dependency
+ uid: optprintexcpt
+- role: build-dependency
+ uid: optreset
+- role: build-dependency
+ uid: optresetkey
+- role: build-dependency
+ uid: pkgconfig
+- role: build-dependency
+ uid: tst
+- role: build-dependency
+ uid: grpmake
+target: bsps/include/bspopts.h
+type: build
diff --git a/spec/build/bsps/grpmake.yml b/spec/build/bsps/grpmake.yml
new file mode 100644
index 0000000000..0998efc49e
--- /dev/null
+++ b/spec/build/bsps/grpmake.yml
@@ -0,0 +1,44 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: group
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+enabled-by:
+- INSTALL_LEGACY_MAKEFILES
+includes: []
+install:
+- destination: ${PREFIX}/share/rtems${__RTEMS_MAJOR__}/make
+ source:
+ - make/lib.cfg
+ - make/host.cfg
+ - make/directory.cfg
+ - make/README
+- destination: ${PREFIX}/share/rtems${__RTEMS_MAJOR__}/make/compilers
+ source:
+ - make/compilers/gcc-target-default.cfg
+- destination: ${PREFIX}/share/rtems${__RTEMS_MAJOR__}/make/Templates
+ source:
+ - make/Templates/Makefile.dir
+ - make/Templates/Makefile.lib
+ - make/Templates/Makefile.leaf
+- destination: ${PREFIX}/make
+ source:
+ - make/main.cfg
+ - make/leaf.cfg
+- destination: ${PREFIX}/make/custom
+ source:
+ - make/custom/default.cfg
+ldflags: []
+links:
+- role: build-dependency
+ uid: makebsp
+- role: build-dependency
+ uid: makecustom
+- role: build-dependency
+ uid: makeinc
+- role: build-dependency
+ uid: maketarget
+- role: build-dependency
+ uid: optmake
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/bsps/i386/grp.yml b/spec/build/bsps/i386/grp.yml
new file mode 100644
index 0000000000..bd68f7f340
--- /dev/null
+++ b/spec/build/bsps/i386/grp.yml
@@ -0,0 +1,29 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: group
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+enabled-by: true
+includes: []
+install:
+- destination: ${BSP_INCLUDEDIR}
+ source:
+ - bsps/i386/include/i386_io.h
+ - bsps/i386/include/uart.h
+- destination: ${BSP_INCLUDEDIR}/bsp
+ source:
+ - bsps/i386/include/bsp/apic.h
+ - bsps/i386/include/bsp/irq.h
+ - bsps/i386/include/bsp/irq_asm.h
+ - bsps/i386/include/bsp/realmode_int.h
+ - bsps/i386/include/bsp/smp-imps.h
+ - bsps/i386/include/bsp/tty_drv.h
+- destination: ${BSP_INCLUDEDIR}/libcpu
+ source:
+ - bsps/i386/include/libcpu/byteorder.h
+ - bsps/i386/include/libcpu/cpuModel.h
+ - bsps/i386/include/libcpu/page.h
+ldflags: []
+links: []
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/bsps/i386/pc386/abi.yml b/spec/build/bsps/i386/pc386/abi.yml
new file mode 100644
index 0000000000..6a29742266
--- /dev/null
+++ b/spec/build/bsps/i386/pc386/abi.yml
@@ -0,0 +1,43 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+actions:
+- get-string: null
+- split: null
+- env-append: null
+build-type: option
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+default:
+- -mtune=pentium4
+- -march=pentium4
+- -msse3
+default-by-variant:
+- value:
+ - -mtune=pentiumpro
+ - -march=pentium
+ variants:
+ - i386/pc686
+- value:
+ - -mtune=pentium
+ - -march=pentium
+ - -msse2
+ variants:
+ - i386/pc586-sse
+- value:
+ - -mtune=pentium
+ - -march=pentium
+ variants:
+ - i386/pc586
+- value:
+ - -mtune=i486
+ variants:
+ - i386/pc486
+- value:
+ - -mtune=i386
+ variants:
+ - i386/pc386
+description: |
+ ABI flags
+enabled-by: true
+links: []
+name: ABI_FLAGS
+type: build
diff --git a/spec/build/bsps/i386/pc386/bsppc386.yml b/spec/build/bsps/i386/pc386/bsppc386.yml
new file mode 100644
index 0000000000..a221bb5820
--- /dev/null
+++ b/spec/build/bsps/i386/pc386/bsppc386.yml
@@ -0,0 +1,19 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+arch: i386
+bsp: pc386
+build-type: bsp
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+enabled-by: true
+family: pc386
+includes: []
+install: []
+links:
+- role: build-dependency
+ uid: grp
+- role: build-dependency
+ uid: ../../opto2
+source: []
+type: build
diff --git a/spec/build/bsps/i386/pc386/bsppc486.yml b/spec/build/bsps/i386/pc386/bsppc486.yml
new file mode 100644
index 0000000000..7a14db2f06
--- /dev/null
+++ b/spec/build/bsps/i386/pc386/bsppc486.yml
@@ -0,0 +1,19 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+arch: i386
+bsp: pc486
+build-type: bsp
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+enabled-by: true
+family: pc386
+includes: []
+install: []
+links:
+- role: build-dependency
+ uid: grp
+- role: build-dependency
+ uid: ../../opto2
+source: []
+type: build
diff --git a/spec/build/bsps/i386/pc386/bsppc586.yml b/spec/build/bsps/i386/pc386/bsppc586.yml
new file mode 100644
index 0000000000..5c73a6368b
--- /dev/null
+++ b/spec/build/bsps/i386/pc386/bsppc586.yml
@@ -0,0 +1,19 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+arch: i386
+bsp: pc586
+build-type: bsp
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+enabled-by: true
+family: pc386
+includes: []
+install: []
+links:
+- role: build-dependency
+ uid: grp
+- role: build-dependency
+ uid: ../../opto2
+source: []
+type: build
diff --git a/spec/build/bsps/i386/pc386/bsppc586sse.yml b/spec/build/bsps/i386/pc386/bsppc586sse.yml
new file mode 100644
index 0000000000..5af45aba6d
--- /dev/null
+++ b/spec/build/bsps/i386/pc386/bsppc586sse.yml
@@ -0,0 +1,19 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+arch: i386
+bsp: pc586-sse
+build-type: bsp
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+enabled-by: true
+family: pc386
+includes: []
+install: []
+links:
+- role: build-dependency
+ uid: grp
+- role: build-dependency
+ uid: ../../opto2
+source: []
+type: build
diff --git a/spec/build/bsps/i386/pc386/bsppc686.yml b/spec/build/bsps/i386/pc386/bsppc686.yml
new file mode 100644
index 0000000000..4f491b47d4
--- /dev/null
+++ b/spec/build/bsps/i386/pc386/bsppc686.yml
@@ -0,0 +1,19 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+arch: i386
+bsp: pc686
+build-type: bsp
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+enabled-by: true
+family: pc386
+includes: []
+install: []
+links:
+- role: build-dependency
+ uid: grp
+- role: build-dependency
+ uid: ../../opto2
+source: []
+type: build
diff --git a/spec/build/bsps/i386/pc386/bsppcp4.yml b/spec/build/bsps/i386/pc386/bsppcp4.yml
new file mode 100644
index 0000000000..41329d7930
--- /dev/null
+++ b/spec/build/bsps/i386/pc386/bsppcp4.yml
@@ -0,0 +1,19 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+arch: i386
+bsp: pcp4
+build-type: bsp
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+enabled-by: true
+family: pc386
+includes: []
+install: []
+links:
+- role: build-dependency
+ uid: grp
+- role: build-dependency
+ uid: ../../opto2
+source: []
+type: build
diff --git a/spec/build/bsps/i386/pc386/grp.yml b/spec/build/bsps/i386/pc386/grp.yml
new file mode 100644
index 0000000000..252b813f50
--- /dev/null
+++ b/spec/build/bsps/i386/pc386/grp.yml
@@ -0,0 +1,72 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: group
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+enabled-by: true
+includes: []
+install: []
+ldflags: []
+links:
+- role: build-dependency
+ uid: ../grp
+- role: build-dependency
+ uid: abi
+- role: build-dependency
+ uid: obj
+- role: build-dependency
+ uid: objide
+- role: build-dependency
+ uid: objnet
+- role: build-dependency
+ uid: objsmp
+- role: build-dependency
+ uid: objsmpstart
+- role: build-dependency
+ uid: objvga
+- role: build-dependency
+ uid: optrelocaddr
+- role: build-dependency
+ uid: optvberm
+- role: build-dependency
+ uid: objvgacir
+- role: build-dependency
+ uid: objvgavbe
+- role: build-dependency
+ uid: objvgavga
+- role: build-dependency
+ uid: optcirrus
+- role: build-dependency
+ uid: optclk8253
+- role: build-dependency
+ uid: optclktsc
+- role: build-dependency
+ uid: optconcom1
+- role: build-dependency
+ uid: optencom14
+- role: build-dependency
+ uid: optenide
+- role: build-dependency
+ uid: optenvga
+- role: build-dependency
+ uid: optgdbstub
+- role: build-dependency
+ uid: optidepriifc
+- role: build-dependency
+ uid: optidesecifc
+- role: build-dependency
+ uid: optvga
+- role: build-dependency
+ uid: optvideo80x50
+- role: build-dependency
+ uid: optgdtdesc
+- role: build-dependency
+ uid: start
+- role: build-dependency
+ uid: ../../obj
+- role: build-dependency
+ uid: ../../objirq
+- role: build-dependency
+ uid: ../../bspopts
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/bsps/i386/pc386/obj.yml b/spec/build/bsps/i386/pc386/obj.yml
new file mode 100644
index 0000000000..e9a6decddc
--- /dev/null
+++ b/spec/build/bsps/i386/pc386/obj.yml
@@ -0,0 +1,83 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: objects
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by: true
+includes: []
+install:
+- destination: ${BSP_INCLUDEDIR}
+ source:
+ - bsps/i386/pc386/include/bsp.h
+ - bsps/i386/pc386/include/crt.h
+ - bsps/i386/pc386/include/edid.h
+ - bsps/i386/pc386/include/tm27.h
+- destination: ${BSP_INCLUDEDIR}/bsp
+ source:
+ - bsps/i386/pc386/include/bsp/bspimpl.h
+ - bsps/i386/pc386/include/bsp/exar17d15x.h
+ - bsps/i386/pc386/include/bsp/fb_default_mode.h
+ - bsps/i386/pc386/include/bsp/fb_vesa.h
+ - bsps/i386/pc386/include/bsp/rtd316.h
+ - bsps/i386/pc386/include/bsp/tblsizes.h
+ - bsps/i386/pc386/include/bsp/vbe3.h
+- destination: ${BSP_INCLUDEDIR}/rtems
+ source:
+ - bsps/i386/pc386/include/rtems/kd.h
+ - bsps/i386/pc386/include/rtems/keyboard.h
+ - bsps/i386/pc386/include/rtems/ps2_drv.h
+ - bsps/i386/pc386/include/rtems/vgacons.h
+- destination: ${BSP_LIBDIR}
+ source:
+ - bsps/i386/pc386/start/linkcmds
+links: []
+source:
+- bsps/i386/pc386/btimer/btimer.c
+- bsps/i386/pc386/btimer/timerisr.S
+- bsps/i386/pc386/clock/ckinit.c
+- bsps/i386/pc386/clock/todcfg.c
+- bsps/i386/pc386/console/conscfg.c
+- bsps/i386/pc386/console/console_control.c
+- bsps/i386/pc386/console/console_select.c
+- bsps/i386/pc386/console/exar17d15x.c
+- bsps/i386/pc386/console/gdb_glue.c
+- bsps/i386/pc386/console/gdb_select.c
+- bsps/i386/pc386/console/i386-stub-glue.c
+- bsps/i386/pc386/console/i386-stub.c
+- bsps/i386/pc386/console/printk_support.c
+- bsps/i386/pc386/console/rtd316.c
+- bsps/i386/pc386/console/serial_mouse_config.c
+- bsps/i386/pc386/console/tty_drv.c
+- bsps/i386/pc386/console/uart.c
+- bsps/i386/pc386/console/uart_bus_pci.c
+- bsps/i386/pc386/start/bsp_fatal_halt.c
+- bsps/i386/pc386/start/bspcmdline.c
+- bsps/i386/pc386/start/bspgetworkarea.c
+- bsps/i386/pc386/start/bspidle.S
+- bsps/i386/pc386/start/bspreset.c
+- bsps/i386/pc386/start/bspstart.c
+- bsps/i386/pc386/start/cpuModel.S
+- bsps/i386/pc386/start/displayCpu.c
+- bsps/i386/pc386/start/idtr.S
+- bsps/i386/pc386/start/ldsegs.S
+- bsps/i386/pc386/start/page.c
+- bsps/i386/pc386/start/realmode_int.c
+- bsps/i386/shared/cache/cache.c
+- bsps/i386/shared/irq/elcr.c
+- bsps/i386/shared/irq/idt.c
+- bsps/i386/shared/irq/irq.c
+- bsps/i386/shared/irq/irq_asm.S
+- bsps/i386/shared/irq/irq_init.c
+- bsps/i386/shared/pci/pci_io.c
+- bsps/i386/shared/pci/pcibios.c
+- bsps/shared/dev/getentropy/getentropy-cpucounter.c
+- bsps/shared/dev/pci/pci_bus_count.c
+- bsps/shared/dev/pci/pci_find_device.c
+- bsps/shared/dev/rtc/rtc-support.c
+- bsps/shared/dev/serial/legacy-console.c
+- bsps/shared/irq/irq-default-handler.c
+- bsps/shared/start/bspfatal-default.c
+- bsps/shared/start/sbrk.c
+type: build
diff --git a/spec/build/bsps/i386/pc386/objide.yml b/spec/build/bsps/i386/pc386/objide.yml
new file mode 100644
index 0000000000..8065afc402
--- /dev/null
+++ b/spec/build/bsps/i386/pc386/objide.yml
@@ -0,0 +1,16 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: objects
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by:
+- BSP_ENABLE_IDE
+includes: []
+install: []
+links: []
+source:
+- bsps/i386/pc386/ata/ide.c
+- bsps/i386/pc386/ata/idecfg.c
+type: build
diff --git a/spec/build/bsps/i386/pc386/objnet.yml b/spec/build/bsps/i386/pc386/objnet.yml
new file mode 100644
index 0000000000..da30f2423b
--- /dev/null
+++ b/spec/build/bsps/i386/pc386/objnet.yml
@@ -0,0 +1,19 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: objects
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by:
+- RTEMS_NETWORKING
+includes:
+- cpukit/libnetworking
+install: []
+links: []
+source:
+- bsps/i386/pc386/net/3c509.c
+- bsps/i386/pc386/net/elink.c
+- bsps/i386/pc386/net/ne2000.c
+- bsps/i386/pc386/net/wd8003.c
+type: build
diff --git a/spec/build/bsps/i386/pc386/objsmp.yml b/spec/build/bsps/i386/pc386/objsmp.yml
new file mode 100644
index 0000000000..9eaf97d4b9
--- /dev/null
+++ b/spec/build/bsps/i386/pc386/objsmp.yml
@@ -0,0 +1,16 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: objects
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by:
+- RTEMS_SMP
+includes: []
+install: []
+links: []
+source:
+- bsps/i386/pc386/start/bspsmp.c
+- bsps/i386/pc386/start/smp-imps.c
+type: build
diff --git a/spec/build/bsps/i386/pc386/objsmpstart.yml b/spec/build/bsps/i386/pc386/objsmpstart.yml
new file mode 100644
index 0000000000..dc2302278d
--- /dev/null
+++ b/spec/build/bsps/i386/pc386/objsmpstart.yml
@@ -0,0 +1,54 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+asflags: []
+build-type: script
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+do-build: |
+ from waflib import TaskGen
+
+ @TaskGen.feature("i386objcopy")
+ @TaskGen.after("process_rule")
+ def process_i386objcopy(self):
+ self.compiled_tasks = self.tasks
+
+ startAP = "bsps/i386/pc386/start/startAP"
+ startAP_o = startAP + ".o"
+ self.asm(bld, bic, startAP + ".S", startAP_o)
+ startAP_exe = startAP + ".exe"
+ ldflags = "-N -Ttext 0x70000 -e app_processor_start -nostdlib"
+ bld(
+ rule="${LD} " + ldflags + " -o ${TGT} ${SRC}",
+ source=startAP_o,
+ target=startAP_exe,
+ )
+ appstart_bin = "appstart.bin"
+ bld(
+ rule="${OBJCOPY} -O binary ${SRC} ${TGT}",
+ source=startAP_exe,
+ target=appstart_bin,
+ )
+ appstart_o = "appstart.o"
+ bld(
+ rule="${OBJCOPY} -I binary -O elf32-i386 -B i386 ${SRC} ${TGT}",
+ source=appstart_bin,
+ target=appstart_o,
+ name=self.uid,
+ features="i386objcopy c",
+ )
+ bic.objects.append(self.uid)
+do-configure: null
+enabled-by:
+- RTEMS_SMP
+includes: []
+ldflags: []
+links:
+- role: build-dependency
+ uid: ../../optobjcopy
+prepare-build: null
+prepare-configure: null
+stlib: []
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/bsps/i386/pc386/objvga.yml b/spec/build/bsps/i386/pc386/objvga.yml
new file mode 100644
index 0000000000..9e212637bb
--- /dev/null
+++ b/spec/build/bsps/i386/pc386/objvga.yml
@@ -0,0 +1,25 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: objects
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by:
+- BSP_ENABLE_VGA
+includes: []
+install: []
+links: []
+source:
+- bsps/i386/pc386/console/defkeymap.c
+- bsps/i386/pc386/console/inch.c
+- bsps/i386/pc386/console/kbd_parser.c
+- bsps/i386/pc386/console/keyboard.c
+- bsps/i386/pc386/console/outch.c
+- bsps/i386/pc386/console/pc_keyb.c
+- bsps/i386/pc386/console/ps2_mouse.c
+- bsps/i386/pc386/console/vgacons.c
+- bsps/i386/pc386/console/vgainit.c
+- bsps/i386/pc386/console/videoAsm.S
+- bsps/i386/pc386/console/vt.c
+type: build
diff --git a/spec/build/bsps/i386/pc386/objvgacir.yml b/spec/build/bsps/i386/pc386/objvgacir.yml
new file mode 100644
index 0000000000..530c12b99d
--- /dev/null
+++ b/spec/build/bsps/i386/pc386/objvgacir.yml
@@ -0,0 +1,17 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: objects
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by:
+- and:
+ - BSP_ENABLE_VGA
+ - USE_CIRRUS_GD5446
+includes: []
+install: []
+links: []
+source:
+- bsps/i386/pc386/console/fb_cirrus.c
+type: build
diff --git a/spec/build/bsps/i386/pc386/objvgavbe.yml b/spec/build/bsps/i386/pc386/objvgavbe.yml
new file mode 100644
index 0000000000..57206ff9de
--- /dev/null
+++ b/spec/build/bsps/i386/pc386/objvgavbe.yml
@@ -0,0 +1,17 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: objects
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by:
+- and:
+ - BSP_ENABLE_VGA
+ - USE_VBE_RM
+includes: []
+install: []
+links: []
+source:
+- bsps/i386/pc386/console/fb_vesa_rm.c
+type: build
diff --git a/spec/build/bsps/i386/pc386/objvgavga.yml b/spec/build/bsps/i386/pc386/objvgavga.yml
new file mode 100644
index 0000000000..5f658c0d2f
--- /dev/null
+++ b/spec/build/bsps/i386/pc386/objvgavga.yml
@@ -0,0 +1,17 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: objects
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by:
+- and:
+ - BSP_ENABLE_VGA
+ - USE_VGA
+includes: []
+install: []
+links: []
+source:
+- bsps/i386/pc386/console/fb_vga.c
+type: build
diff --git a/spec/build/bsps/i386/pc386/optcirrus.yml b/spec/build/bsps/i386/pc386/optcirrus.yml
new file mode 100644
index 0000000000..c974001647
--- /dev/null
+++ b/spec/build/bsps/i386/pc386/optcirrus.yml
@@ -0,0 +1,16 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+actions:
+- get-boolean: null
+- define-condition: null
+- env-enable: null
+build-type: option
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+default: false
+default-by-variant: []
+description: |
+ If defined, enables use of the Cirrus GD5446 controller rather than the controller utilizing Vesa Bios Extensions - real mode interface. NOTE: This has only been tested on Qemu.
+enabled-by: true
+links: []
+name: USE_CIRRUS_GD5446
+type: build
diff --git a/spec/build/bsps/i386/pc386/optclk8253.yml b/spec/build/bsps/i386/pc386/optclk8253.yml
new file mode 100644
index 0000000000..ddaeb3bb75
--- /dev/null
+++ b/spec/build/bsps/i386/pc386/optclk8253.yml
@@ -0,0 +1,15 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+actions:
+- get-boolean: null
+- define-condition: null
+build-type: option
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+default: false
+default-by-variant: []
+description: |
+ None
+enabled-by: true
+links: []
+name: CLOCK_DRIVER_USE_8254
+type: build
diff --git a/spec/build/bsps/i386/pc386/optclktsc.yml b/spec/build/bsps/i386/pc386/optclktsc.yml
new file mode 100644
index 0000000000..2b02523def
--- /dev/null
+++ b/spec/build/bsps/i386/pc386/optclktsc.yml
@@ -0,0 +1,15 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+actions:
+- get-boolean: null
+- define-condition: null
+build-type: option
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+default: false
+default-by-variant: []
+description: |
+ None
+enabled-by: true
+links: []
+name: CLOCK_DRIVER_USE_TSC
+type: build
diff --git a/spec/build/bsps/i386/pc386/optconcom1.yml b/spec/build/bsps/i386/pc386/optconcom1.yml
new file mode 100644
index 0000000000..6743683ecc
--- /dev/null
+++ b/spec/build/bsps/i386/pc386/optconcom1.yml
@@ -0,0 +1,15 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+actions:
+- get-boolean: null
+- define-condition: null
+build-type: option
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+default: false
+default-by-variant: []
+description: |
+ Determines, whether the console will be associated with the standard VGA display or with the COM1 serial port. Currently only the VGA display and COM1 support printk.
+enabled-by: true
+links: []
+name: USE_COM1_AS_CONSOLE
+type: build
diff --git a/spec/build/bsps/i386/pc386/optencom14.yml b/spec/build/bsps/i386/pc386/optencom14.yml
new file mode 100644
index 0000000000..1547f5d890
--- /dev/null
+++ b/spec/build/bsps/i386/pc386/optencom14.yml
@@ -0,0 +1,15 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+actions:
+- get-boolean: null
+- define-condition: null
+build-type: option
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+default: true
+default-by-variant: []
+description: |
+ Set if COM1..COM4 support is enabled.
+enabled-by: true
+links: []
+name: BSP_ENABLE_COM1_COM4
+type: build
diff --git a/spec/build/bsps/i386/pc386/optenide.yml b/spec/build/bsps/i386/pc386/optenide.yml
new file mode 100644
index 0000000000..db3a9aaf04
--- /dev/null
+++ b/spec/build/bsps/i386/pc386/optenide.yml
@@ -0,0 +1,16 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+actions:
+- get-boolean: null
+- define-condition: null
+- env-enable: null
+build-type: option
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+default: true
+default-by-variant: []
+description: |
+ Set if IDE support is enabled.
+enabled-by: true
+links: []
+name: BSP_ENABLE_IDE
+type: build
diff --git a/spec/build/bsps/i386/pc386/optenvga.yml b/spec/build/bsps/i386/pc386/optenvga.yml
new file mode 100644
index 0000000000..d2f4755a8b
--- /dev/null
+++ b/spec/build/bsps/i386/pc386/optenvga.yml
@@ -0,0 +1,16 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+actions:
+- get-boolean: null
+- define-condition: null
+- env-enable: null
+build-type: option
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+default: true
+default-by-variant: []
+description: |
+ Set if the VGA and keyboard console support is enabled.
+enabled-by: true
+links: []
+name: BSP_ENABLE_VGA
+type: build
diff --git a/spec/build/bsps/i386/pc386/optgdbstub.yml b/spec/build/bsps/i386/pc386/optgdbstub.yml
new file mode 100644
index 0000000000..6af1c8ec56
--- /dev/null
+++ b/spec/build/bsps/i386/pc386/optgdbstub.yml
@@ -0,0 +1,15 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+actions:
+- get-boolean: null
+- define-condition: null
+build-type: option
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+default: true
+default-by-variant: []
+description: |
+ Defined by default. Enables use of the GDB stub for debugging via a serial port.
+enabled-by: true
+links: []
+name: BSP_GDB_STUB
+type: build
diff --git a/spec/build/bsps/i386/pc386/optgdtdesc.yml b/spec/build/bsps/i386/pc386/optgdtdesc.yml
new file mode 100644
index 0000000000..8898bf4726
--- /dev/null
+++ b/spec/build/bsps/i386/pc386/optgdtdesc.yml
@@ -0,0 +1,26 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+actions:
+- get-integer: null
+- script: |
+ if "USE_CIRRUS_GD5446" not in conf.env.ENABLE and "USE_VGA" not in conf.env.ENABLE:
+ if "USE_VBE_RM" not in conf.env.ENABLE:
+ conf.fatal(
+ "USE_VBE_RM must be enabled in case USE_CIRRUS_GD5446 and USE_VGA are disabled"
+ )
+ if value:
+ value += 2
+ else:
+ value = 2
+- define: null
+build-type: option
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+default: 0
+default-by-variant: []
+description: |
+ Defines how many descriptors in GDT may be allocated for application or driver usage.
+enabled-by: true
+format: '{}'
+links: []
+name: NUM_APP_DRV_GDT_DESCRIPTORS
+type: build
diff --git a/spec/build/bsps/i386/pc386/optidepriifc.yml b/spec/build/bsps/i386/pc386/optidepriifc.yml
new file mode 100644
index 0000000000..375b89904b
--- /dev/null
+++ b/spec/build/bsps/i386/pc386/optidepriifc.yml
@@ -0,0 +1,15 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+actions:
+- get-boolean: null
+- define-condition: null
+build-type: option
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+default: true
+default-by-variant: []
+description: |
+ Determines, whether RTEMS will try to use the primary IDE interface. Disable it, if: - you have no primary IDE interface - or you have no disk attached to this interface - or you do not want to access disks attached to this interface
+enabled-by: true
+links: []
+name: IDE_USE_PRIMARY_INTERFACE
+type: build
diff --git a/spec/build/bsps/i386/pc386/optidesecifc.yml b/spec/build/bsps/i386/pc386/optidesecifc.yml
new file mode 100644
index 0000000000..4b61958f7d
--- /dev/null
+++ b/spec/build/bsps/i386/pc386/optidesecifc.yml
@@ -0,0 +1,15 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+actions:
+- get-boolean: null
+- define-condition: null
+build-type: option
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+default: false
+default-by-variant: []
+description: |
+ Determines, whether RTEMS will try to use the secondary IDE interface. Enable it, if: - you have a secondary IDE interface - and you have at least one disk attached to this interface - and you do want to access disks attached to this interface
+enabled-by: true
+links: []
+name: IDE_USE_SECONDARY_INTERFACE
+type: build
diff --git a/spec/build/bsps/i386/pc386/optrelocaddr.yml b/spec/build/bsps/i386/pc386/optrelocaddr.yml
new file mode 100644
index 0000000000..e052383f80
--- /dev/null
+++ b/spec/build/bsps/i386/pc386/optrelocaddr.yml
@@ -0,0 +1,27 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+actions:
+- get-integer: null
+- assert-uint32: null
+- env-assign: null
+- set-value: -Wl,-Ttext,${RELOCADDR:#010x}
+- substitute: null
+- env-append: LDFLAGS
+- env-append: PKGCONFIG_LDFLAGS
+build-type: option
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+default: 1048576
+default-by-variant: []
+description: |
+ Set the value of RELOCADDR to the address where you want your image to load.
+ If you'll be using GRUB to load the images it will have to be >= 0x100000
+ (1024K). If you are using NetBoot to load the images it can be
+ >= 0x10000 (64K) AND <= 0x97C00 (607K) OR >= 0x100000 (1024K). The memory
+ top is of course another limit. Make sure there is enough space before the
+ upper memory limits for the image and the memory allocated by it to fit.
+ Make sure the value you choose is aligned to 4 bytes.
+enabled-by: true
+format: '{:#010x}'
+links: []
+name: RELOCADDR
+type: build
diff --git a/spec/build/bsps/i386/pc386/optvberm.yml b/spec/build/bsps/i386/pc386/optvberm.yml
new file mode 100644
index 0000000000..dce5975ef8
--- /dev/null
+++ b/spec/build/bsps/i386/pc386/optvberm.yml
@@ -0,0 +1,16 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+actions:
+- get-boolean: null
+- define-condition: null
+- env-enable: null
+build-type: option
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+default: true
+default-by-variant: []
+description: |
+ Defined by default. Enables use of the Vesa Bios Extensions - real mode interface, which enables graphical mode and introduce it upon bootup.
+enabled-by: true
+links: []
+name: USE_VBE_RM
+type: build
diff --git a/spec/build/bsps/i386/pc386/optvga.yml b/spec/build/bsps/i386/pc386/optvga.yml
new file mode 100644
index 0000000000..5477de3e0b
--- /dev/null
+++ b/spec/build/bsps/i386/pc386/optvga.yml
@@ -0,0 +1,16 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+actions:
+- get-boolean: null
+- define-condition: null
+- env-enable: null
+build-type: option
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+default: false
+default-by-variant: []
+description: |
+ If defined, enables use of the very basic VGA driver for framebuffer support rather than the controller utilizing Vesa Bios Extensions - real mode interface.
+enabled-by: true
+links: []
+name: USE_VGA
+type: build
diff --git a/spec/build/bsps/i386/pc386/optvideo80x50.yml b/spec/build/bsps/i386/pc386/optvideo80x50.yml
new file mode 100644
index 0000000000..f95225bc04
--- /dev/null
+++ b/spec/build/bsps/i386/pc386/optvideo80x50.yml
@@ -0,0 +1,15 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+actions:
+- get-boolean: null
+- define-condition: null
+build-type: option
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+default: false
+default-by-variant: []
+description: |
+ If defined, set the VGA display to 80x50.
+enabled-by: true
+links: []
+name: BSP_VIDEO_80x50
+type: build
diff --git a/spec/build/bsps/i386/pc386/start.yml b/spec/build/bsps/i386/pc386/start.yml
new file mode 100644
index 0000000000..99cefa2751
--- /dev/null
+++ b/spec/build/bsps/i386/pc386/start.yml
@@ -0,0 +1,14 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+asflags: []
+build-type: start-file
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+enabled-by: true
+includes: []
+install-path: ${BSP_LIBDIR}
+links: []
+source:
+- bsps/i386/pc386/start/start.S
+target: start.o
+type: build
diff --git a/spec/build/bsps/linkcmds.yml b/spec/build/bsps/linkcmds.yml
new file mode 100644
index 0000000000..420108473d
--- /dev/null
+++ b/spec/build/bsps/linkcmds.yml
@@ -0,0 +1,20 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: script
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+do-build: |
+ bld.install_as(
+ "${BSP_LIBDIR}/linkcmds",
+ "bsps/" + bld.env.ARCH + "/" + bld.env.BSP_FAMILY +
+ "/start/linkcmds." + bld.env.BSP_BASE
+ )
+do-configure: |
+ conf.env.append_value(
+ "LINKFLAGS",
+ ["-qnolinkcmds", "-T", "linkcmds." + conf.env.BSP_BASE]
+ )
+enabled-by: true
+links: []
+prepare-build: null
+prepare-configure: null
+type: build
diff --git a/spec/build/bsps/lm32/grp.yml b/spec/build/bsps/lm32/grp.yml
new file mode 100644
index 0000000000..218367fb08
--- /dev/null
+++ b/spec/build/bsps/lm32/grp.yml
@@ -0,0 +1,28 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: group
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+enabled-by: true
+includes: []
+install:
+- destination: ${BSP_INCLUDEDIR}/bsp
+ source:
+ - bsps/lm32/include/bsp/irq.h
+ - bsps/lm32/include/bsp/milkymist_ac97.h
+ - bsps/lm32/include/bsp/milkymist_buttons.h
+ - bsps/lm32/include/bsp/milkymist_dmx.h
+ - bsps/lm32/include/bsp/milkymist_flash.h
+ - bsps/lm32/include/bsp/milkymist_gpio.h
+ - bsps/lm32/include/bsp/milkymist_ir.h
+ - bsps/lm32/include/bsp/milkymist_memcard.h
+ - bsps/lm32/include/bsp/milkymist_midi.h
+ - bsps/lm32/include/bsp/milkymist_pfpu.h
+ - bsps/lm32/include/bsp/milkymist_tmu.h
+ - bsps/lm32/include/bsp/milkymist_usbinput.h
+ - bsps/lm32/include/bsp/milkymist_versions.h
+ - bsps/lm32/include/bsp/milkymist_video.h
+ldflags: []
+links: []
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/bsps/lm32/lm32_evr/abi.yml b/spec/build/bsps/lm32/lm32_evr/abi.yml
new file mode 100644
index 0000000000..530e7a5d14
--- /dev/null
+++ b/spec/build/bsps/lm32/lm32_evr/abi.yml
@@ -0,0 +1,16 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+actions:
+- get-string: null
+- split: null
+- env-append: null
+build-type: option
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+default: []
+default-by-variant: []
+description: |
+ ABI flags
+enabled-by: true
+links: []
+name: ABI_FLAGS
+type: build
diff --git a/spec/build/bsps/lm32/lm32_evr/bspgdbsim.yml b/spec/build/bsps/lm32/lm32_evr/bspgdbsim.yml
new file mode 100644
index 0000000000..8c9c736d8f
--- /dev/null
+++ b/spec/build/bsps/lm32/lm32_evr/bspgdbsim.yml
@@ -0,0 +1,21 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+arch: lm32
+bsp: lm32_evr_gdbsim
+build-type: bsp
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+enabled-by: true
+family: lm32_evr
+includes: []
+install: []
+links:
+- role: build-dependency
+ uid: grp
+- role: build-dependency
+ uid: ../../opto2
+- role: build-dependency
+ uid: ../../tstnointrcrit
+source: []
+type: build
diff --git a/spec/build/bsps/lm32/lm32_evr/bsplm32evr.yml b/spec/build/bsps/lm32/lm32_evr/bsplm32evr.yml
new file mode 100644
index 0000000000..f3576154ca
--- /dev/null
+++ b/spec/build/bsps/lm32/lm32_evr/bsplm32evr.yml
@@ -0,0 +1,19 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+arch: lm32
+bsp: lm32_evr
+build-type: bsp
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+enabled-by: true
+family: lm32_evr
+includes: []
+install: []
+links:
+- role: build-dependency
+ uid: grp
+- role: build-dependency
+ uid: ../../opto2
+source: []
+type: build
diff --git a/spec/build/bsps/lm32/lm32_evr/grp.yml b/spec/build/bsps/lm32/lm32_evr/grp.yml
new file mode 100644
index 0000000000..3dec0056fb
--- /dev/null
+++ b/spec/build/bsps/lm32/lm32_evr/grp.yml
@@ -0,0 +1,30 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: group
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+enabled-by: true
+includes: []
+install: []
+ldflags: []
+links:
+- role: build-dependency
+ uid: ../grp
+- role: build-dependency
+ uid: abi
+- role: build-dependency
+ uid: obj
+- role: build-dependency
+ uid: objnet
+- role: build-dependency
+ uid: optsim
+- role: build-dependency
+ uid: ../start
+- role: build-dependency
+ uid: ../../obj
+- role: build-dependency
+ uid: ../../objirqdflt
+- role: build-dependency
+ uid: ../../bspopts
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/bsps/lm32/lm32_evr/obj.yml b/spec/build/bsps/lm32/lm32_evr/obj.yml
new file mode 100644
index 0000000000..eec04aefe8
--- /dev/null
+++ b/spec/build/bsps/lm32/lm32_evr/obj.yml
@@ -0,0 +1,33 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: objects
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by: true
+includes: []
+install:
+- destination: ${BSP_INCLUDEDIR}
+ source:
+ - bsps/lm32/lm32_evr/include/bsp.h
+ - bsps/lm32/lm32_evr/include/system_conf.h
+ - bsps/lm32/lm32_evr/include/tm27.h
+- destination: ${BSP_LIBDIR}
+ source:
+ - bsps/lm32/lm32_evr/start/linkcmds
+links: []
+source:
+- bsps/lm32/shared/btimer/btimer.c
+- bsps/lm32/shared/clock/ckinit.c
+- bsps/lm32/shared/console/console.c
+- bsps/lm32/shared/console/uart.c
+- bsps/lm32/shared/start/bspreset.c
+- bsps/lm32/shared/start/bspstart.c
+- bsps/shared/cache/nocache.c
+- bsps/shared/dev/getentropy/getentropy-cpucounter.c
+- bsps/shared/start/bspfatal-default.c
+- bsps/shared/start/bspgetworkarea-default.c
+- bsps/shared/start/sbrk.c
+- bsps/shared/start/setvec.c
+type: build
diff --git a/spec/build/bsps/lm32/lm32_evr/objnet.yml b/spec/build/bsps/lm32/lm32_evr/objnet.yml
new file mode 100644
index 0000000000..32e64832c7
--- /dev/null
+++ b/spec/build/bsps/lm32/lm32_evr/objnet.yml
@@ -0,0 +1,16 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: objects
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by:
+- RTEMS_NETWORKING
+includes:
+- cpukit/libnetworking
+install: []
+links: []
+source:
+- bsps/lm32/shared/net/tsmac.c
+type: build
diff --git a/spec/build/bsps/lm32/lm32_evr/optsim.yml b/spec/build/bsps/lm32/lm32_evr/optsim.yml
new file mode 100644
index 0000000000..b02e333c26
--- /dev/null
+++ b/spec/build/bsps/lm32/lm32_evr/optsim.yml
@@ -0,0 +1,18 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+actions:
+- get-boolean: null
+- define-condition: null
+build-type: option
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+default: false
+default-by-variant:
+- value: true
+ variants:
+ - lm32/lm32_evr_gdbsim
+description: |
+ If defined, this indicates the BSP is being built to run on the lm32 simulator in GDB. This enables fast idle support which speeds up the clock ticks while the idle task is running so time spent in the idle task is minimized. This significantly reduces the wall time required to execute the RTEMS test suites. It also enables a special exit and alternate printk support.
+enabled-by: true
+links: []
+name: LM32_ON_SIMULATOR
+type: build
diff --git a/spec/build/bsps/lm32/milkymist/abi.yml b/spec/build/bsps/lm32/milkymist/abi.yml
new file mode 100644
index 0000000000..1b553c1f4d
--- /dev/null
+++ b/spec/build/bsps/lm32/milkymist/abi.yml
@@ -0,0 +1,20 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+actions:
+- get-string: null
+- split: null
+- env-append: null
+build-type: option
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+default:
+- -mbarrel-shift-enabled
+- -mmultiply-enabled
+- -mdivide-enabled
+- -msign-extend-enabled
+default-by-variant: []
+description: |
+ ABI flags
+enabled-by: true
+links: []
+name: ABI_FLAGS
+type: build
diff --git a/spec/build/bsps/lm32/milkymist/bspmilkymist.yml b/spec/build/bsps/lm32/milkymist/bspmilkymist.yml
new file mode 100644
index 0000000000..a599d42f8d
--- /dev/null
+++ b/spec/build/bsps/lm32/milkymist/bspmilkymist.yml
@@ -0,0 +1,67 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+arch: lm32
+bsp: milkymist
+build-type: bsp
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+enabled-by: true
+family: milkymist
+includes: []
+install:
+- destination: ${BSP_INCLUDEDIR}
+ source:
+ - bsps/lm32/milkymist/include/bsp.h
+ - bsps/lm32/milkymist/include/system_conf.h
+ - bsps/lm32/milkymist/include/tm27.h
+- destination: ${BSP_LIBDIR}
+ source:
+ - bsps/lm32/milkymist/start/linkcmds
+links:
+- role: build-dependency
+ uid: ../grp
+- role: build-dependency
+ uid: abi
+- role: build-dependency
+ uid: objnet
+- role: build-dependency
+ uid: optsim
+- role: build-dependency
+ uid: ../start
+- role: build-dependency
+ uid: ../../obj
+- role: build-dependency
+ uid: ../../objirqdflt
+- role: build-dependency
+ uid: ../../opto2
+- role: build-dependency
+ uid: ../../bspopts
+source:
+- bsps/lm32/milkymist/start/bspclean.c
+- bsps/lm32/shared/irq/irq.c
+- bsps/lm32/shared/milkymist_ac97/ac97.c
+- bsps/lm32/shared/milkymist_buttons/buttons.c
+- bsps/lm32/shared/milkymist_clock/ckinit.c
+- bsps/lm32/shared/milkymist_console/console.c
+- bsps/lm32/shared/milkymist_console/uart.c
+- bsps/lm32/shared/milkymist_dmx/dmx.c
+- bsps/lm32/shared/milkymist_flash/flash.c
+- bsps/lm32/shared/milkymist_framebuffer/framebuffer.c
+- bsps/lm32/shared/milkymist_gpio/gpio.c
+- bsps/lm32/shared/milkymist_ir/ir.c
+- bsps/lm32/shared/milkymist_memcard/memcard.c
+- bsps/lm32/shared/milkymist_midi/midi.c
+- bsps/lm32/shared/milkymist_pfpu/pfpu.c
+- bsps/lm32/shared/milkymist_timer/timer.c
+- bsps/lm32/shared/milkymist_tmu/tmu.c
+- bsps/lm32/shared/milkymist_usbinput/usbinput.c
+- bsps/lm32/shared/milkymist_versions/versions.c
+- bsps/lm32/shared/milkymist_video/video.c
+- bsps/lm32/shared/start/bspstart.c
+- bsps/shared/cache/nocache.c
+- bsps/shared/dev/getentropy/getentropy-cpucounter.c
+- bsps/shared/start/bspgetworkarea-default.c
+- bsps/shared/start/bspreset-empty.c
+- bsps/shared/start/sbrk.c
+type: build
diff --git a/spec/build/bsps/lm32/milkymist/objnet.yml b/spec/build/bsps/lm32/milkymist/objnet.yml
new file mode 100644
index 0000000000..14d84f9e7e
--- /dev/null
+++ b/spec/build/bsps/lm32/milkymist/objnet.yml
@@ -0,0 +1,16 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: objects
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by:
+- RTEMS_NETWORKING
+includes:
+- cpukit/libnetworking
+install: []
+links: []
+source:
+- bsps/lm32/shared/net/network.c
+type: build
diff --git a/spec/build/bsps/lm32/milkymist/optsim.yml b/spec/build/bsps/lm32/milkymist/optsim.yml
new file mode 100644
index 0000000000..5172e03c63
--- /dev/null
+++ b/spec/build/bsps/lm32/milkymist/optsim.yml
@@ -0,0 +1,15 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+actions:
+- get-boolean: null
+- define-condition: null
+build-type: option
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+default: false
+default-by-variant: []
+description: |
+ If defined, this indicates the BSP is being built to run on the lm32 simulator in GDB. This enables fast idle support which speeds up the clock ticks while the idle task is running so time spent in the idle task is minimized. This significantly reduces the wall time required to execute the RTEMS test suites. It also enables a special exit and alternate printk support.
+enabled-by: true
+links: []
+name: LM32_ON_SIMULATOR
+type: build
diff --git a/spec/build/bsps/lm32/start.yml b/spec/build/bsps/lm32/start.yml
new file mode 100644
index 0000000000..4ebb69a1e1
--- /dev/null
+++ b/spec/build/bsps/lm32/start.yml
@@ -0,0 +1,14 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+asflags: []
+build-type: start-file
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+enabled-by: true
+includes: []
+install-path: ${BSP_LIBDIR}
+links: []
+source:
+- bsps/lm32/shared/start/start.S
+target: start.o
+type: build
diff --git a/spec/build/bsps/m68k/av5282/abi.yml b/spec/build/bsps/m68k/av5282/abi.yml
new file mode 100644
index 0000000000..78f70236d3
--- /dev/null
+++ b/spec/build/bsps/m68k/av5282/abi.yml
@@ -0,0 +1,17 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+actions:
+- get-string: null
+- split: null
+- env-append: null
+build-type: option
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+default:
+- -mcpu=528x
+default-by-variant: []
+description: |
+ ABI flags
+enabled-by: true
+links: []
+name: ABI_FLAGS
+type: build
diff --git a/spec/build/bsps/m68k/av5282/bspav5282.yml b/spec/build/bsps/m68k/av5282/bspav5282.yml
new file mode 100644
index 0000000000..66ab1333d2
--- /dev/null
+++ b/spec/build/bsps/m68k/av5282/bspav5282.yml
@@ -0,0 +1,55 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+arch: m68k
+bsp: av5282
+build-type: bsp
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+enabled-by: true
+family: av5282
+includes: []
+install:
+- destination: ${BSP_INCLUDEDIR}
+ source:
+ - bsps/m68k/av5282/include/bsp.h
+ - bsps/m68k/av5282/include/tm27.h
+- destination: ${BSP_INCLUDEDIR}/bsp
+ source:
+ - bsps/m68k/av5282/include/bsp/irq.h
+- destination: ${BSP_LIBDIR}
+ source:
+ - bsps/m68k/av5282/start/linkcmds
+links:
+- role: build-dependency
+ uid: abi
+- role: build-dependency
+ uid: objnet
+- role: build-dependency
+ uid: start
+- role: build-dependency
+ uid: ../grp
+- role: build-dependency
+ uid: ../../obj
+- role: build-dependency
+ uid: ../../objirqdflt
+- role: build-dependency
+ uid: ../../opto2
+- role: build-dependency
+ uid: ../../bspopts
+source:
+- bsps/m68k/av5282/btimer/btimer.c
+- bsps/m68k/av5282/clock/clock.c
+- bsps/m68k/av5282/console/console.c
+- bsps/m68k/av5282/start/bspstart.c
+- bsps/m68k/av5282/start/init5282.c
+- bsps/m68k/shared/cache/cache-mcf5282.c
+- bsps/m68k/shared/m68kidle.c
+- bsps/m68k/shared/memProbe.c
+- bsps/shared/dev/getentropy/getentropy-cpucounter.c
+- bsps/shared/start/bspfatal-default.c
+- bsps/shared/start/bspgetworkarea-default.c
+- bsps/shared/start/bspreset-loop.c
+- bsps/shared/start/sbrk.c
+- bsps/shared/start/setvec.c
+type: build
diff --git a/spec/build/bsps/m68k/av5282/objnet.yml b/spec/build/bsps/m68k/av5282/objnet.yml
new file mode 100644
index 0000000000..4346dad873
--- /dev/null
+++ b/spec/build/bsps/m68k/av5282/objnet.yml
@@ -0,0 +1,16 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: objects
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by:
+- RTEMS_NETWORKING
+includes:
+- cpukit/libnetworking
+install: []
+links: []
+source:
+- bsps/m68k/av5282/net/network.c
+type: build
diff --git a/spec/build/bsps/m68k/av5282/start.yml b/spec/build/bsps/m68k/av5282/start.yml
new file mode 100644
index 0000000000..a67f06364f
--- /dev/null
+++ b/spec/build/bsps/m68k/av5282/start.yml
@@ -0,0 +1,14 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+asflags: []
+build-type: start-file
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+enabled-by: true
+includes: []
+install-path: ${BSP_LIBDIR}
+links: []
+source:
+- bsps/m68k/av5282/start/start.S
+target: start.o
+type: build
diff --git a/spec/build/bsps/m68k/csb360/abi.yml b/spec/build/bsps/m68k/csb360/abi.yml
new file mode 100644
index 0000000000..1ff2806a6c
--- /dev/null
+++ b/spec/build/bsps/m68k/csb360/abi.yml
@@ -0,0 +1,17 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+actions:
+- get-string: null
+- split: null
+- env-append: null
+build-type: option
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+default:
+- -mcpu=5272
+default-by-variant: []
+description: |
+ ABI flags
+enabled-by: true
+links: []
+name: ABI_FLAGS
+type: build
diff --git a/spec/build/bsps/m68k/csb360/bspcsb360.yml b/spec/build/bsps/m68k/csb360/bspcsb360.yml
new file mode 100644
index 0000000000..e2add1c268
--- /dev/null
+++ b/spec/build/bsps/m68k/csb360/bspcsb360.yml
@@ -0,0 +1,55 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+arch: m68k
+bsp: csb360
+build-type: bsp
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+enabled-by: true
+family: csb360
+includes: []
+install:
+- destination: ${BSP_INCLUDEDIR}
+ source:
+ - bsps/m68k/csb360/include/bsp.h
+ - bsps/m68k/csb360/include/tm27.h
+- destination: ${BSP_INCLUDEDIR}/bsp
+ source:
+ - bsps/m68k/csb360/include/bsp/irq.h
+- destination: ${BSP_LIBDIR}
+ source:
+ - bsps/m68k/csb360/start/linkcmds
+links:
+- role: build-dependency
+ uid: abi
+- role: build-dependency
+ uid: start
+- role: build-dependency
+ uid: ../grp
+- role: build-dependency
+ uid: ../../obj
+- role: build-dependency
+ uid: ../../objirqdflt
+- role: build-dependency
+ uid: ../../opto2
+- role: build-dependency
+ uid: ../../bspopts
+source:
+- bsps/m68k/csb360/console/console-io.c
+- bsps/m68k/csb360/dev/ckinit.c
+- bsps/m68k/csb360/dev/timer.c
+- bsps/m68k/csb360/dev/timerisr.S
+- bsps/m68k/csb360/start/idle-mcf5272.c
+- bsps/m68k/csb360/start/init5272.c
+- bsps/m68k/shared/memProbe.c
+- bsps/shared/cache/nocache.c
+- bsps/shared/dev/getentropy/getentropy-cpucounter.c
+- bsps/shared/dev/serial/console-polled.c
+- bsps/shared/start/bspfatal-default.c
+- bsps/shared/start/bspgetworkarea-default.c
+- bsps/shared/start/bspreset-empty.c
+- bsps/shared/start/bspstart-empty.c
+- bsps/shared/start/sbrk.c
+- bsps/shared/start/setvec.c
+type: build
diff --git a/spec/build/bsps/m68k/csb360/start.yml b/spec/build/bsps/m68k/csb360/start.yml
new file mode 100644
index 0000000000..fd94bd5958
--- /dev/null
+++ b/spec/build/bsps/m68k/csb360/start.yml
@@ -0,0 +1,14 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+asflags: []
+build-type: start-file
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+enabled-by: true
+includes: []
+install-path: ${BSP_LIBDIR}
+links: []
+source:
+- bsps/m68k/csb360/start/start.S
+target: start.o
+type: build
diff --git a/spec/build/bsps/m68k/gen68340/abi.yml b/spec/build/bsps/m68k/gen68340/abi.yml
new file mode 100644
index 0000000000..0daf8ee06b
--- /dev/null
+++ b/spec/build/bsps/m68k/gen68340/abi.yml
@@ -0,0 +1,17 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+actions:
+- get-string: null
+- split: null
+- env-append: null
+build-type: option
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+default:
+- -mcpu=cpu32
+default-by-variant: []
+description: |
+ ABI flags
+enabled-by: true
+links: []
+name: ABI_FLAGS
+type: build
diff --git a/spec/build/bsps/m68k/gen68340/bspgen68340.yml b/spec/build/bsps/m68k/gen68340/bspgen68340.yml
new file mode 100644
index 0000000000..e07abddd43
--- /dev/null
+++ b/spec/build/bsps/m68k/gen68340/bspgen68340.yml
@@ -0,0 +1,61 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+arch: m68k
+bsp: gen68340
+build-type: bsp
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+enabled-by: true
+family: gen68340
+includes: []
+install:
+- destination: ${BSP_INCLUDEDIR}
+ source:
+ - bsps/m68k/gen68340/include/bsp.h
+ - bsps/m68k/gen68340/include/m340timer.h
+ - bsps/m68k/gen68340/include/m340uart.h
+ - bsps/m68k/gen68340/include/m68340.h
+ - bsps/m68k/gen68340/include/m68340.inc
+ - bsps/m68k/gen68340/include/m68349.inc
+ - bsps/m68k/gen68340/include/tm27.h
+- destination: ${BSP_INCLUDEDIR}/bsp
+ source:
+ - bsps/m68k/gen68340/include/bsp/irq.h
+- destination: ${BSP_LIBDIR}
+ source:
+ - bsps/m68k/gen68340/start/linkcmds
+links:
+- role: build-dependency
+ uid: abi
+- role: build-dependency
+ uid: start
+- role: build-dependency
+ uid: ../grp
+- role: build-dependency
+ uid: ../../obj
+- role: build-dependency
+ uid: ../../objirqdflt
+- role: build-dependency
+ uid: ../../opto2
+- role: build-dependency
+ uid: ../../bspopts
+source:
+- bsps/m68k/gen68340/btimer/btimer.c
+- bsps/m68k/gen68340/clock/ckinit.c
+- bsps/m68k/gen68340/console/console.c
+- bsps/m68k/gen68340/console/m340uart.c
+- bsps/m68k/gen68340/start/dumpanic.c
+- bsps/m68k/gen68340/start/init68340.c
+- bsps/m68k/shared/cache/cache.c
+- bsps/m68k/shared/m68kidle.c
+- bsps/m68k/shared/memProbe.c
+- bsps/shared/dev/getentropy/getentropy-cpucounter.c
+- bsps/shared/dev/serial/printk-dummy.c
+- bsps/shared/start/bspfatal-default.c
+- bsps/shared/start/bspgetworkarea-default.c
+- bsps/shared/start/bspreset-empty.c
+- bsps/shared/start/bspstart-empty.c
+- bsps/shared/start/sbrk.c
+- bsps/shared/start/setvec.c
+type: build
diff --git a/spec/build/bsps/m68k/gen68340/start.yml b/spec/build/bsps/m68k/gen68340/start.yml
new file mode 100644
index 0000000000..be6f431af3
--- /dev/null
+++ b/spec/build/bsps/m68k/gen68340/start.yml
@@ -0,0 +1,14 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+asflags: []
+build-type: start-file
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+enabled-by: true
+includes: []
+install-path: ${BSP_LIBDIR}
+links: []
+source:
+- bsps/m68k/gen68340/start/start.S
+target: start.o
+type: build
diff --git a/spec/build/bsps/m68k/gen68360/abi.yml b/spec/build/bsps/m68k/gen68360/abi.yml
new file mode 100644
index 0000000000..5e83fae804
--- /dev/null
+++ b/spec/build/bsps/m68k/gen68360/abi.yml
@@ -0,0 +1,25 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+actions:
+- get-string: null
+- split: null
+- env-append: null
+build-type: option
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+default:
+- -mcpu32
+default-by-variant:
+- value:
+ - -mcpu=68040
+ variants:
+ - m68k/gen68360_040
+- value:
+ - -mcpu=cpu32
+ variants:
+ - m68k/gen68360
+description: |
+ ABI flags
+enabled-by: true
+links: []
+name: ABI_FLAGS
+type: build
diff --git a/spec/build/bsps/m68k/gen68360/bspgen68360.yml b/spec/build/bsps/m68k/gen68360/bspgen68360.yml
new file mode 100644
index 0000000000..3fe72993b3
--- /dev/null
+++ b/spec/build/bsps/m68k/gen68360/bspgen68360.yml
@@ -0,0 +1,19 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+arch: m68k
+bsp: gen68360
+build-type: bsp
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+enabled-by: true
+family: gen68360
+includes: []
+install: []
+links:
+- role: build-dependency
+ uid: grp
+- role: build-dependency
+ uid: ../../opto2
+source: []
+type: build
diff --git a/spec/build/bsps/m68k/gen68360/bspgen68360040.yml b/spec/build/bsps/m68k/gen68360/bspgen68360040.yml
new file mode 100644
index 0000000000..24c1d855a5
--- /dev/null
+++ b/spec/build/bsps/m68k/gen68360/bspgen68360040.yml
@@ -0,0 +1,19 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+arch: m68k
+bsp: gen68360_040
+build-type: bsp
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+enabled-by: true
+family: gen68360
+includes: []
+install: []
+links:
+- role: build-dependency
+ uid: grp
+- role: build-dependency
+ uid: ../../opto2
+source: []
+type: build
diff --git a/spec/build/bsps/m68k/gen68360/bsppgh360.yml b/spec/build/bsps/m68k/gen68360/bsppgh360.yml
new file mode 100644
index 0000000000..2a8f2f2131
--- /dev/null
+++ b/spec/build/bsps/m68k/gen68360/bsppgh360.yml
@@ -0,0 +1,19 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+arch: m68k
+bsp: pgh360
+build-type: bsp
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+enabled-by: true
+family: gen68360
+includes: []
+install: []
+links:
+- role: build-dependency
+ uid: grp
+- role: build-dependency
+ uid: ../../opto2
+source: []
+type: build
diff --git a/spec/build/bsps/m68k/gen68360/grp.yml b/spec/build/bsps/m68k/gen68360/grp.yml
new file mode 100644
index 0000000000..56357004ce
--- /dev/null
+++ b/spec/build/bsps/m68k/gen68360/grp.yml
@@ -0,0 +1,36 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: group
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+enabled-by: true
+includes: []
+install: []
+ldflags: []
+links:
+- role: build-dependency
+ uid: abi
+- role: build-dependency
+ uid: obj
+- role: build-dependency
+ uid: objnet
+- role: build-dependency
+ uid: opt68360
+- role: build-dependency
+ uid: opt68360x040
+- role: build-dependency
+ uid: optpgh360
+- role: build-dependency
+ uid: start
+- role: build-dependency
+ uid: ../grp
+- role: build-dependency
+ uid: ../objfpsp
+- role: build-dependency
+ uid: ../../obj
+- role: build-dependency
+ uid: ../../objirqdflt
+- role: build-dependency
+ uid: ../../bspopts
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/bsps/m68k/gen68360/obj.yml b/spec/build/bsps/m68k/gen68360/obj.yml
new file mode 100644
index 0000000000..27e7bb8517
--- /dev/null
+++ b/spec/build/bsps/m68k/gen68360/obj.yml
@@ -0,0 +1,41 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: objects
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by: true
+includes: []
+install:
+- destination: ${BSP_INCLUDEDIR}
+ source:
+ - bsps/m68k/gen68360/include/bsp.h
+ - bsps/m68k/gen68360/include/tm27.h
+- destination: ${BSP_INCLUDEDIR}/bsp
+ source:
+ - bsps/m68k/gen68360/include/bsp/irq.h
+- destination: ${BSP_LIBDIR}
+ source:
+ - bsps/m68k/gen68360/start/linkcmds
+ - bsps/m68k/gen68360/start/linkcmds.bootp
+ - bsps/m68k/gen68360/start/linkcmds.prom
+links: []
+source:
+- bsps/m68k/gen68360/btimer/btimer.c
+- bsps/m68k/gen68360/clock/clock.c
+- bsps/m68k/gen68360/console/console.c
+- bsps/m68k/gen68360/start/alloc360.c
+- bsps/m68k/gen68360/start/init68360.c
+- bsps/m68k/shared/cache/cache.c
+- bsps/m68k/shared/m68kidle.c
+- bsps/m68k/shared/memProbe.c
+- bsps/shared/dev/getentropy/getentropy-cpucounter.c
+- bsps/shared/dev/serial/printk-dummy.c
+- bsps/shared/start/bspfatal-default.c
+- bsps/shared/start/bspgetworkarea-default.c
+- bsps/shared/start/bspreset-empty.c
+- bsps/shared/start/bspstart-empty.c
+- bsps/shared/start/sbrk.c
+- bsps/shared/start/setvec.c
+type: build
diff --git a/spec/build/bsps/m68k/gen68360/objnet.yml b/spec/build/bsps/m68k/gen68360/objnet.yml
new file mode 100644
index 0000000000..4b9ee8164b
--- /dev/null
+++ b/spec/build/bsps/m68k/gen68360/objnet.yml
@@ -0,0 +1,16 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: objects
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by:
+- RTEMS_NETWORKING
+includes:
+- cpukit/libnetworking
+install: []
+links: []
+source:
+- bsps/m68k/gen68360/net/network.c
+type: build
diff --git a/spec/build/bsps/m68k/gen68360/opt68360.yml b/spec/build/bsps/m68k/gen68360/opt68360.yml
new file mode 100644
index 0000000000..11f0f054c9
--- /dev/null
+++ b/spec/build/bsps/m68k/gen68360/opt68360.yml
@@ -0,0 +1,18 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+actions:
+- get-boolean: null
+- define-condition: null
+build-type: option
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+default: false
+default-by-variant:
+- value: true
+ variants:
+ - m68k/gen68360
+description: |
+ If defined, use custom settings for the gen68360 BSP.
+enabled-by: true
+links: []
+name: GEN68360
+type: build
diff --git a/spec/build/bsps/m68k/gen68360/opt68360x040.yml b/spec/build/bsps/m68k/gen68360/opt68360x040.yml
new file mode 100644
index 0000000000..c176a780a3
--- /dev/null
+++ b/spec/build/bsps/m68k/gen68360/opt68360x040.yml
@@ -0,0 +1,18 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+actions:
+- get-boolean: null
+- define-condition: null
+build-type: option
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+default: false
+default-by-variant:
+- value: true
+ variants:
+ - m68k/gen68360_040
+description: |
+ If defined, use custom settings for the gen68360_040 BSP.
+enabled-by: true
+links: []
+name: GEN68360_040
+type: build
diff --git a/spec/build/bsps/m68k/gen68360/optpgh360.yml b/spec/build/bsps/m68k/gen68360/optpgh360.yml
new file mode 100644
index 0000000000..8fea68fa42
--- /dev/null
+++ b/spec/build/bsps/m68k/gen68360/optpgh360.yml
@@ -0,0 +1,18 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+actions:
+- get-boolean: null
+- define-condition: null
+build-type: option
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+default: false
+default-by-variant:
+- value: true
+ variants:
+ - m68k/pgh360
+description: |
+ If defined, use custom settings for the pgh360 BSP.
+enabled-by: true
+links: []
+name: PGH360
+type: build
diff --git a/spec/build/bsps/m68k/gen68360/start.yml b/spec/build/bsps/m68k/gen68360/start.yml
new file mode 100644
index 0000000000..88a6949b60
--- /dev/null
+++ b/spec/build/bsps/m68k/gen68360/start.yml
@@ -0,0 +1,14 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+asflags: []
+build-type: start-file
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+enabled-by: true
+includes: []
+install-path: ${BSP_LIBDIR}
+links: []
+source:
+- bsps/m68k/gen68360/start/start.S
+target: start.o
+type: build
diff --git a/spec/build/bsps/m68k/genmcf548x/abi.yml b/spec/build/bsps/m68k/genmcf548x/abi.yml
new file mode 100644
index 0000000000..6680decb4c
--- /dev/null
+++ b/spec/build/bsps/m68k/genmcf548x/abi.yml
@@ -0,0 +1,18 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+actions:
+- get-string: null
+- split: null
+- env-append: null
+build-type: option
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+default:
+- -mcfv4e
+- -Wa,-memac
+default-by-variant: []
+description: |
+ ABI flags
+enabled-by: true
+links: []
+name: ABI_FLAGS
+type: build
diff --git a/spec/build/bsps/m68k/genmcf548x/bspcobra5475.yml b/spec/build/bsps/m68k/genmcf548x/bspcobra5475.yml
new file mode 100644
index 0000000000..481c2edbe5
--- /dev/null
+++ b/spec/build/bsps/m68k/genmcf548x/bspcobra5475.yml
@@ -0,0 +1,19 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+arch: m68k
+bsp: COBRA5475
+build-type: bsp
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+enabled-by: true
+family: genmcf548x
+includes: []
+install: []
+links:
+- role: build-dependency
+ uid: grp
+- role: build-dependency
+ uid: ../../opto2
+source: []
+type: build
diff --git a/spec/build/bsps/m68k/genmcf548x/bspm5484fireengine.yml b/spec/build/bsps/m68k/genmcf548x/bspm5484fireengine.yml
new file mode 100644
index 0000000000..51d434bd02
--- /dev/null
+++ b/spec/build/bsps/m68k/genmcf548x/bspm5484fireengine.yml
@@ -0,0 +1,19 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+arch: m68k
+bsp: m5484FireEngine
+build-type: bsp
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+enabled-by: true
+family: genmcf548x
+includes: []
+install: []
+links:
+- role: build-dependency
+ uid: grp
+- role: build-dependency
+ uid: ../../opto2
+source: []
+type: build
diff --git a/spec/build/bsps/m68k/genmcf548x/grp.yml b/spec/build/bsps/m68k/genmcf548x/grp.yml
new file mode 100644
index 0000000000..b4e72b6199
--- /dev/null
+++ b/spec/build/bsps/m68k/genmcf548x/grp.yml
@@ -0,0 +1,38 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: group
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+enabled-by: true
+includes: []
+install: []
+ldflags: []
+links:
+- role: build-dependency
+ uid: ../../linkcmds
+- role: build-dependency
+ uid: abi
+- role: build-dependency
+ uid: obj
+- role: build-dependency
+ uid: objnet
+- role: build-dependency
+ uid: optcpuclk
+- role: build-dependency
+ uid: optdbug
+- role: build-dependency
+ uid: optlowinit
+- role: build-dependency
+ uid: optm5484fireengine
+- role: build-dependency
+ uid: start
+- role: build-dependency
+ uid: ../grp
+- role: build-dependency
+ uid: ../../obj
+- role: build-dependency
+ uid: ../../optconsolebaud
+- role: build-dependency
+ uid: ../../bspopts
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/bsps/m68k/genmcf548x/obj.yml b/spec/build/bsps/m68k/genmcf548x/obj.yml
new file mode 100644
index 0000000000..729c1f045a
--- /dev/null
+++ b/spec/build/bsps/m68k/genmcf548x/obj.yml
@@ -0,0 +1,52 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: objects
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by: true
+includes: []
+install:
+- destination: ${BSP_INCLUDEDIR}
+ source:
+ - bsps/m68k/genmcf548x/include/bsp.h
+ - bsps/m68k/genmcf548x/include/tm27.h
+- destination: ${BSP_INCLUDEDIR}/bsp
+ source:
+ - bsps/m68k/genmcf548x/include/bsp/irq.h
+- destination: ${BSP_LIBDIR}
+ source:
+ - bsps/m68k/genmcf548x/start/linkcmds.COBRA5475
+ - bsps/m68k/genmcf548x/start/linkcmds.m5484FireEngine
+ - bsps/m68k/genmcf548x/start/linkcmds.m5484FireEngine.flash
+ - bsps/m68k/shared/start/linkcmds.base
+links: []
+source:
+- bsps/m68k/genmcf548x/btimer/btimer.c
+- bsps/m68k/genmcf548x/clock/clock.c
+- bsps/m68k/genmcf548x/console/console.c
+- bsps/m68k/genmcf548x/irq/intc-icr-init-values.c
+- bsps/m68k/genmcf548x/irq/irq.c
+- bsps/m68k/genmcf548x/mcdma/MCD_dmaApi.c
+- bsps/m68k/genmcf548x/mcdma/MCD_tasks.c
+- bsps/m68k/genmcf548x/mcdma/MCD_tasksInit.c
+- bsps/m68k/genmcf548x/mcdma/mcdma_glue.c
+- bsps/m68k/genmcf548x/start/bspstart.c
+- bsps/m68k/genmcf548x/start/cache.c
+- bsps/m68k/genmcf548x/start/init548x.c
+- bsps/m68k/shared/m68kidle.c
+- bsps/m68k/shared/memProbe.c
+- bsps/shared/dev/getentropy/getentropy-cpucounter.c
+- bsps/shared/irq/irq-default-handler.c
+- bsps/shared/irq/irq-info.c
+- bsps/shared/irq/irq-legacy.c
+- bsps/shared/irq/irq-lock.c
+- bsps/shared/irq/irq-server.c
+- bsps/shared/irq/irq-shell.c
+- bsps/shared/start/bspfatal-default.c
+- bsps/shared/start/bspgetworkarea-default.c
+- bsps/shared/start/bspreset-loop.c
+- bsps/shared/start/sbrk.c
+- bsps/shared/start/setvec.c
+type: build
diff --git a/spec/build/bsps/m68k/genmcf548x/objnet.yml b/spec/build/bsps/m68k/genmcf548x/objnet.yml
new file mode 100644
index 0000000000..203cb408a8
--- /dev/null
+++ b/spec/build/bsps/m68k/genmcf548x/objnet.yml
@@ -0,0 +1,16 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: objects
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by:
+- RTEMS_NETWORKING
+includes:
+- cpukit/libnetworking
+install: []
+links: []
+source:
+- bsps/m68k/genmcf548x/net/network.c
+type: build
diff --git a/spec/build/bsps/m68k/genmcf548x/optcpuclk.yml b/spec/build/bsps/m68k/genmcf548x/optcpuclk.yml
new file mode 100644
index 0000000000..6cf392fbb6
--- /dev/null
+++ b/spec/build/bsps/m68k/genmcf548x/optcpuclk.yml
@@ -0,0 +1,22 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+actions:
+- get-integer: null
+- define: null
+build-type: option
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+default: 100000000
+default-by-variant:
+- value: 132000000
+ variants:
+ - m68k/COBRA5475
+- value: 100000000
+ variants:
+ - m68k/m5484FireEngine
+description: |
+ The bus clock to be used inside the mcf54xx
+enabled-by: true
+format: '{}'
+links: []
+name: BSP_CPU_CLOCK_SPEED
+type: build
diff --git a/spec/build/bsps/m68k/genmcf548x/optdbug.yml b/spec/build/bsps/m68k/genmcf548x/optdbug.yml
new file mode 100644
index 0000000000..26f93cd969
--- /dev/null
+++ b/spec/build/bsps/m68k/genmcf548x/optdbug.yml
@@ -0,0 +1,18 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+actions:
+- get-boolean: null
+- define-condition: null
+build-type: option
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+default: false
+default-by-variant:
+- value: true
+ variants:
+ - m68k/COBRA5475
+description: |
+ If defined, we will not boot from RESET, but from Freescale DBug monitor.
+enabled-by: true
+links: []
+name: HAS_DBUG
+type: build
diff --git a/spec/build/bsps/m68k/genmcf548x/optlowinit.yml b/spec/build/bsps/m68k/genmcf548x/optlowinit.yml
new file mode 100644
index 0000000000..7d0f76a6be
--- /dev/null
+++ b/spec/build/bsps/m68k/genmcf548x/optlowinit.yml
@@ -0,0 +1,18 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+actions:
+- get-boolean: null
+- define-condition: null
+build-type: option
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+default: false
+default-by-variant:
+- value: true
+ variants:
+ - m68k/m5484FireEngine
+description: |
+ If defined, we will do all the low level init of the chip (like bus/memory...).
+enabled-by: true
+links: []
+name: HAS_LOW_LEVEL_INIT
+type: build
diff --git a/spec/build/bsps/m68k/genmcf548x/optm5484fireengine.yml b/spec/build/bsps/m68k/genmcf548x/optm5484fireengine.yml
new file mode 100644
index 0000000000..e2b71f1af1
--- /dev/null
+++ b/spec/build/bsps/m68k/genmcf548x/optm5484fireengine.yml
@@ -0,0 +1,18 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+actions:
+- get-boolean: null
+- define-condition: null
+build-type: option
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+default: false
+default-by-variant:
+- value: true
+ variants:
+ - m68k/m5484FireEngine
+description: |
+ If defined, use custom settings for the m5484FireEngine BSP.
+enabled-by: true
+links: []
+name: M5484FIREENGINE
+type: build
diff --git a/spec/build/bsps/m68k/genmcf548x/start.yml b/spec/build/bsps/m68k/genmcf548x/start.yml
new file mode 100644
index 0000000000..7176737200
--- /dev/null
+++ b/spec/build/bsps/m68k/genmcf548x/start.yml
@@ -0,0 +1,14 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+asflags: []
+build-type: start-file
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+enabled-by: true
+includes: []
+install-path: ${BSP_LIBDIR}
+links: []
+source:
+- bsps/m68k/genmcf548x/start/start.S
+target: start.o
+type: build
diff --git a/spec/build/bsps/m68k/grp.yml b/spec/build/bsps/m68k/grp.yml
new file mode 100644
index 0000000000..f04277d74c
--- /dev/null
+++ b/spec/build/bsps/m68k/grp.yml
@@ -0,0 +1,49 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: group
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+enabled-by: true
+includes: []
+install:
+- destination: ${BSP_INCLUDEDIR}
+ source:
+ - bsps/m68k/include/mvme16x_hw.h
+- destination: ${BSP_INCLUDEDIR}/bsp
+ source:
+ - bsps/m68k/include/bsp/linker-symbols.h
+- destination: ${BSP_INCLUDEDIR}/mcf5206
+ source:
+ - bsps/m68k/include/mcf5206/mcf5206e.h
+ - bsps/m68k/include/mcf5206/mcfmbus.h
+ - bsps/m68k/include/mcf5206/mcfuart.h
+- destination: ${BSP_INCLUDEDIR}/mcf5223x
+ source:
+ - bsps/m68k/include/mcf5223x/mcf5223x.h
+- destination: ${BSP_INCLUDEDIR}/mcf5225x
+ source:
+ - bsps/m68k/include/mcf5225x/fec.h
+ - bsps/m68k/include/mcf5225x/mcf5225x.h
+- destination: ${BSP_INCLUDEDIR}/mcf5235
+ source:
+ - bsps/m68k/include/mcf5235/mcf5235.h
+- destination: ${BSP_INCLUDEDIR}/mcf5272
+ source:
+ - bsps/m68k/include/mcf5272/mcf5272.h
+- destination: ${BSP_INCLUDEDIR}/mcf5282
+ source:
+ - bsps/m68k/include/mcf5282/mcf5282.h
+- destination: ${BSP_INCLUDEDIR}/mcf532x
+ source:
+ - bsps/m68k/include/mcf532x/mcf532x.h
+- destination: ${BSP_INCLUDEDIR}/mcf548x
+ source:
+ - bsps/m68k/include/mcf548x/MCD_dma.h
+ - bsps/m68k/include/mcf548x/MCD_progCheck.h
+ - bsps/m68k/include/mcf548x/MCD_tasksInit.h
+ - bsps/m68k/include/mcf548x/mcdma_glue.h
+ - bsps/m68k/include/mcf548x/mcf548x.h
+ldflags: []
+links: []
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/bsps/m68k/mcf5206elite/abi.yml b/spec/build/bsps/m68k/mcf5206elite/abi.yml
new file mode 100644
index 0000000000..703730cf3d
--- /dev/null
+++ b/spec/build/bsps/m68k/mcf5206elite/abi.yml
@@ -0,0 +1,17 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+actions:
+- get-string: null
+- split: null
+- env-append: null
+build-type: option
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+default:
+- -mcpu=5206
+default-by-variant: []
+description: |
+ ABI flags
+enabled-by: true
+links: []
+name: ABI_FLAGS
+type: build
diff --git a/spec/build/bsps/m68k/mcf5206elite/bspmcf5206elite.yml b/spec/build/bsps/m68k/mcf5206elite/bspmcf5206elite.yml
new file mode 100644
index 0000000000..b00f11c217
--- /dev/null
+++ b/spec/build/bsps/m68k/mcf5206elite/bspmcf5206elite.yml
@@ -0,0 +1,71 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+arch: m68k
+bsp: mcf5206elite
+build-type: bsp
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+enabled-by: true
+family: mcf5206elite
+includes: []
+install:
+- destination: ${BSP_INCLUDEDIR}
+ source:
+ - bsps/m68k/mcf5206elite/include/bsp.h
+ - bsps/m68k/mcf5206elite/include/ds1307.h
+ - bsps/m68k/mcf5206elite/include/i2c.h
+ - bsps/m68k/mcf5206elite/include/i2cdrv.h
+ - bsps/m68k/mcf5206elite/include/nvram.h
+ - bsps/m68k/mcf5206elite/include/tm27.h
+- destination: ${BSP_INCLUDEDIR}/bsp
+ source:
+ - bsps/m68k/mcf5206elite/include/bsp/irq.h
+- destination: ${BSP_LIBDIR}
+ source:
+ - bsps/m68k/mcf5206elite/start/gdbinit
+ - bsps/m68k/mcf5206elite/start/linkcmds
+ - bsps/m68k/mcf5206elite/start/linkcmds.flash
+links:
+- role: build-dependency
+ uid: ../grp
+- role: build-dependency
+ uid: abi
+- role: build-dependency
+ uid: start
+- role: build-dependency
+ uid: tstmcf5206elite
+- role: build-dependency
+ uid: ../../obj
+- role: build-dependency
+ uid: ../../objirqdflt
+- role: build-dependency
+ uid: ../../opto2
+- role: build-dependency
+ uid: ../../bspopts
+source:
+- bsps/m68k/mcf5206elite/console/console.c
+- bsps/m68k/mcf5206elite/dev/ckinit.c
+- bsps/m68k/mcf5206elite/dev/mcfmbus.c
+- bsps/m68k/mcf5206elite/dev/mcfuart.c
+- bsps/m68k/mcf5206elite/dev/timer.c
+- bsps/m68k/mcf5206elite/dev/timerisr.S
+- bsps/m68k/mcf5206elite/i2c/i2c.c
+- bsps/m68k/mcf5206elite/i2c/i2cdrv.c
+- bsps/m68k/mcf5206elite/nvram/nvram.c
+- bsps/m68k/mcf5206elite/rtc/ds1307.c
+- bsps/m68k/mcf5206elite/rtc/todcfg.c
+- bsps/m68k/mcf5206elite/start/init5206e.c
+- bsps/m68k/shared/m68kidle.c
+- bsps/m68k/shared/memProbe.c
+- bsps/shared/cache/nocache.c
+- bsps/shared/dev/getentropy/getentropy-cpucounter.c
+- bsps/shared/dev/rtc/rtc-support.c
+- bsps/shared/dev/serial/printk-dummy.c
+- bsps/shared/start/bspfatal-default.c
+- bsps/shared/start/bspgetworkarea-default.c
+- bsps/shared/start/bspreset-empty.c
+- bsps/shared/start/bspstart-empty.c
+- bsps/shared/start/sbrk.c
+- bsps/shared/start/setvec.c
+type: build
diff --git a/spec/build/bsps/m68k/mcf5206elite/start.yml b/spec/build/bsps/m68k/mcf5206elite/start.yml
new file mode 100644
index 0000000000..624d89a612
--- /dev/null
+++ b/spec/build/bsps/m68k/mcf5206elite/start.yml
@@ -0,0 +1,14 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+asflags: []
+build-type: start-file
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+enabled-by: true
+includes: []
+install-path: ${BSP_LIBDIR}
+links: []
+source:
+- bsps/m68k/mcf5206elite/start/start.S
+target: start.o
+type: build
diff --git a/spec/build/bsps/m68k/mcf5206elite/tstmcf5206elite.yml b/spec/build/bsps/m68k/mcf5206elite/tstmcf5206elite.yml
new file mode 100644
index 0000000000..02faf0a666
--- /dev/null
+++ b/spec/build/bsps/m68k/mcf5206elite/tstmcf5206elite.yml
@@ -0,0 +1,14 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+actions:
+- set-test-state:
+ dl05: exclude
+ fsdosfsname01: exclude
+build-type: option
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+default: null
+default-by-variant: []
+description: ''
+enabled-by: true
+links: []
+type: build
diff --git a/spec/build/bsps/m68k/mcf52235/abi.yml b/spec/build/bsps/m68k/mcf52235/abi.yml
new file mode 100644
index 0000000000..643eaa7548
--- /dev/null
+++ b/spec/build/bsps/m68k/mcf52235/abi.yml
@@ -0,0 +1,17 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+actions:
+- get-string: null
+- split: null
+- env-append: null
+build-type: option
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+default:
+- -mcpu=52235
+default-by-variant: []
+description: |
+ ABI flags
+enabled-by: true
+links: []
+name: ABI_FLAGS
+type: build
diff --git a/spec/build/bsps/m68k/mcf52235/bspmcf52235.yml b/spec/build/bsps/m68k/mcf52235/bspmcf52235.yml
new file mode 100644
index 0000000000..56e342023c
--- /dev/null
+++ b/spec/build/bsps/m68k/mcf52235/bspmcf52235.yml
@@ -0,0 +1,58 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+arch: m68k
+bsp: mcf52235
+build-type: bsp
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+enabled-by: true
+family: mcf52235
+includes: []
+install:
+- destination: ${BSP_INCLUDEDIR}
+ source:
+ - bsps/m68k/mcf52235/include/bsp.h
+ - bsps/m68k/mcf52235/include/tm27.h
+- destination: ${BSP_INCLUDEDIR}/bsp
+ source:
+ - bsps/m68k/mcf52235/include/bsp/irq.h
+- destination: ${BSP_LIBDIR}
+ source:
+ - bsps/m68k/mcf52235/start/linkcmds
+links:
+- role: build-dependency
+ uid: ../grp
+- role: build-dependency
+ uid: abi
+- role: build-dependency
+ uid: start
+- role: build-dependency
+ uid: tstmcf52235
+- role: build-dependency
+ uid: ../../obj
+- role: build-dependency
+ uid: ../../objirqdflt
+- role: build-dependency
+ uid: ../../opto2
+- role: build-dependency
+ uid: ../../bspopts
+source:
+- bsps/m68k/mcf52235/btimer/btimer.c
+- bsps/m68k/mcf52235/clock/clock.c
+- bsps/m68k/mcf52235/console/console.c
+- bsps/m68k/mcf52235/console/debugio.c
+- bsps/m68k/mcf52235/start/bspgetcpuclockspeed.c
+- bsps/m68k/mcf52235/start/cfinit.c
+- bsps/m68k/mcf52235/start/init52235.c
+- bsps/m68k/shared/cache/cache-mcf5223x.c
+- bsps/m68k/shared/m68kidle.c
+- bsps/m68k/shared/memProbe.c
+- bsps/shared/dev/getentropy/getentropy-cpucounter.c
+- bsps/shared/start/bspfatal-default.c
+- bsps/shared/start/bspgetworkarea-default.c
+- bsps/shared/start/bspreset-loop.c
+- bsps/shared/start/bspstart-empty.c
+- bsps/shared/start/sbrk.c
+- bsps/shared/start/setvec.c
+type: build
diff --git a/spec/build/bsps/m68k/mcf52235/start.yml b/spec/build/bsps/m68k/mcf52235/start.yml
new file mode 100644
index 0000000000..16383bedde
--- /dev/null
+++ b/spec/build/bsps/m68k/mcf52235/start.yml
@@ -0,0 +1,14 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+asflags: []
+build-type: start-file
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+enabled-by: true
+includes: []
+install-path: ${BSP_LIBDIR}
+links: []
+source:
+- bsps/m68k/mcf52235/start/start.S
+target: start.o
+type: build
diff --git a/spec/build/bsps/m68k/mcf52235/tstmcf52235.yml b/spec/build/bsps/m68k/mcf52235/tstmcf52235.yml
new file mode 100644
index 0000000000..f1b5135b3c
--- /dev/null
+++ b/spec/build/bsps/m68k/mcf52235/tstmcf52235.yml
@@ -0,0 +1,34 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+actions:
+- set-test-state:
+ block08: exclude
+ capture: exclude
+ cdtest: exclude
+ fileio: exclude
+ fsdosfsformat01: exclude
+ ftp01: exclude
+ iostream: exclude
+ loopback: exclude
+ mghttpd01: exclude
+ monitor02: exclude
+ paranoia: exclude
+ pppd: exclude
+ sp16: exclude
+ sptimecounter02: exclude
+ sptimecounter03: exclude
+ syscall01: exclude
+ tmcontext01: exclude
+ tmfine01: exclude
+ top: exclude
+ utf8proc01: exclude
+build-type: option
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+default: null
+default-by-variant: []
+description: ''
+enabled-by: true
+links:
+- role: build-dependency
+ uid: ../../tstsmallmem
+type: build
diff --git a/spec/build/bsps/m68k/mcf5225x/abi.yml b/spec/build/bsps/m68k/mcf5225x/abi.yml
new file mode 100644
index 0000000000..643eaa7548
--- /dev/null
+++ b/spec/build/bsps/m68k/mcf5225x/abi.yml
@@ -0,0 +1,17 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+actions:
+- get-string: null
+- split: null
+- env-append: null
+build-type: option
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+default:
+- -mcpu=52235
+default-by-variant: []
+description: |
+ ABI flags
+enabled-by: true
+links: []
+name: ABI_FLAGS
+type: build
diff --git a/spec/build/bsps/m68k/mcf5225x/bspmcf5225x.yml b/spec/build/bsps/m68k/mcf5225x/bspmcf5225x.yml
new file mode 100644
index 0000000000..81591fa4e0
--- /dev/null
+++ b/spec/build/bsps/m68k/mcf5225x/bspmcf5225x.yml
@@ -0,0 +1,56 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+arch: m68k
+bsp: mcf5225x
+build-type: bsp
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+enabled-by: true
+family: mcf5225x
+includes: []
+install:
+- destination: ${BSP_INCLUDEDIR}
+ source:
+ - bsps/m68k/mcf5225x/include/bsp.h
+ - bsps/m68k/mcf5225x/include/tm27.h
+- destination: ${BSP_INCLUDEDIR}/bsp
+ source:
+ - bsps/m68k/mcf5225x/include/bsp/irq.h
+- destination: ${BSP_LIBDIR}
+ source:
+ - bsps/m68k/mcf5225x/start/linkcmds
+links:
+- role: build-dependency
+ uid: ../grp
+- role: build-dependency
+ uid: abi
+- role: build-dependency
+ uid: start
+- role: build-dependency
+ uid: tstmcf5225x
+- role: build-dependency
+ uid: ../../obj
+- role: build-dependency
+ uid: ../../objirqdflt
+- role: build-dependency
+ uid: ../../opto2
+- role: build-dependency
+ uid: ../../bspopts
+source:
+- bsps/m68k/mcf5225x/btimer/btimer.c
+- bsps/m68k/mcf5225x/clock/clock.c
+- bsps/m68k/mcf5225x/console/console.c
+- bsps/m68k/mcf5225x/console/debugio.c
+- bsps/m68k/mcf5225x/start/bspstart.c
+- bsps/m68k/mcf5225x/start/init5225x.c
+- bsps/m68k/shared/cache/cache-mcf5225x.c
+- bsps/m68k/shared/m68kidle.c
+- bsps/m68k/shared/memProbe.c
+- bsps/shared/dev/getentropy/getentropy-cpucounter.c
+- bsps/shared/start/bspfatal-default.c
+- bsps/shared/start/bspgetworkarea-default.c
+- bsps/shared/start/bspreset-loop.c
+- bsps/shared/start/sbrk.c
+- bsps/shared/start/setvec.c
+type: build
diff --git a/spec/build/bsps/m68k/mcf5225x/start.yml b/spec/build/bsps/m68k/mcf5225x/start.yml
new file mode 100644
index 0000000000..d43849e9c5
--- /dev/null
+++ b/spec/build/bsps/m68k/mcf5225x/start.yml
@@ -0,0 +1,14 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+asflags: []
+build-type: start-file
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+enabled-by: true
+includes: []
+install-path: ${BSP_LIBDIR}
+links: []
+source:
+- bsps/m68k/mcf5225x/start/start.S
+target: start.o
+type: build
diff --git a/spec/build/bsps/m68k/mcf5225x/tstmcf5225x.yml b/spec/build/bsps/m68k/mcf5225x/tstmcf5225x.yml
new file mode 100644
index 0000000000..aebe0bc83e
--- /dev/null
+++ b/spec/build/bsps/m68k/mcf5225x/tstmcf5225x.yml
@@ -0,0 +1,17 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+actions:
+- set-test-state:
+ cdtest: exclude
+ fileio: exclude
+ iostream: exclude
+build-type: option
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+default: null
+default-by-variant: []
+description: ''
+enabled-by: true
+links:
+- role: build-dependency
+ uid: ../../tstsmallmem
+type: build
diff --git a/spec/build/bsps/m68k/mcf5235/abi.yml b/spec/build/bsps/m68k/mcf5235/abi.yml
new file mode 100644
index 0000000000..3e7f43f45f
--- /dev/null
+++ b/spec/build/bsps/m68k/mcf5235/abi.yml
@@ -0,0 +1,17 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+actions:
+- get-string: null
+- split: null
+- env-append: null
+build-type: option
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+default:
+- -mcpu=5235
+default-by-variant: []
+description: |
+ ABI flags
+enabled-by: true
+links: []
+name: ABI_FLAGS
+type: build
diff --git a/spec/build/bsps/m68k/mcf5235/bspmcf5235.yml b/spec/build/bsps/m68k/mcf5235/bspmcf5235.yml
new file mode 100644
index 0000000000..542a495929
--- /dev/null
+++ b/spec/build/bsps/m68k/mcf5235/bspmcf5235.yml
@@ -0,0 +1,60 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+arch: m68k
+bsp: mcf5235
+build-type: bsp
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+enabled-by: true
+family: mcf5235
+includes: []
+install:
+- destination: ${BSP_INCLUDEDIR}
+ source:
+ - bsps/m68k/mcf5235/include/bsp.h
+ - bsps/m68k/mcf5235/include/tm27.h
+- destination: ${BSP_INCLUDEDIR}/bsp
+ source:
+ - bsps/m68k/mcf5235/include/bsp/irq.h
+- destination: ${BSP_LIBDIR}
+ source:
+ - bsps/m68k/mcf5235/start/linkcmds
+ - bsps/m68k/mcf5235/start/linkcmds
+ - bsps/m68k/mcf5235/start/linkcmdsflash
+ - bsps/m68k/mcf5235/start/linkcmdsram
+links:
+- role: build-dependency
+ uid: ../grp
+- role: build-dependency
+ uid: abi
+- role: build-dependency
+ uid: objnet
+- role: build-dependency
+ uid: start
+- role: build-dependency
+ uid: ../../obj
+- role: build-dependency
+ uid: ../../objirqdflt
+- role: build-dependency
+ uid: ../../opto2
+- role: build-dependency
+ uid: ../../bspopts
+source:
+- bsps/m68k/mcf5235/btimer/btimer.c
+- bsps/m68k/mcf5235/clock/clock.c
+- bsps/m68k/mcf5235/console/console.c
+- bsps/m68k/mcf5235/start/bspgetcpuclockspeed.c
+- bsps/m68k/mcf5235/start/bspstart.c
+- bsps/m68k/mcf5235/start/copyvectors.c
+- bsps/m68k/mcf5235/start/init5235.c
+- bsps/m68k/shared/cache/cache-mcf5235.c
+- bsps/m68k/shared/m68kidle.c
+- bsps/m68k/shared/memProbe.c
+- bsps/shared/dev/getentropy/getentropy-cpucounter.c
+- bsps/shared/start/bspfatal-default.c
+- bsps/shared/start/bspgetworkarea-default.c
+- bsps/shared/start/bspreset-loop.c
+- bsps/shared/start/sbrk.c
+- bsps/shared/start/setvec.c
+type: build
diff --git a/spec/build/bsps/m68k/mcf5235/objnet.yml b/spec/build/bsps/m68k/mcf5235/objnet.yml
new file mode 100644
index 0000000000..48a3c73242
--- /dev/null
+++ b/spec/build/bsps/m68k/mcf5235/objnet.yml
@@ -0,0 +1,16 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: objects
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by:
+- RTEMS_NETWORKING
+includes:
+- cpukit/libnetworking
+install: []
+links: []
+source:
+- bsps/m68k/mcf5235/net/network.c
+type: build
diff --git a/spec/build/bsps/m68k/mcf5235/start.yml b/spec/build/bsps/m68k/mcf5235/start.yml
new file mode 100644
index 0000000000..e9bc319e6e
--- /dev/null
+++ b/spec/build/bsps/m68k/mcf5235/start.yml
@@ -0,0 +1,14 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+asflags: []
+build-type: start-file
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+enabled-by: true
+includes: []
+install-path: ${BSP_LIBDIR}
+links: []
+source:
+- bsps/m68k/mcf5235/start/start.S
+target: start.o
+type: build
diff --git a/spec/build/bsps/m68k/mcf5329/abi.yml b/spec/build/bsps/m68k/mcf5329/abi.yml
new file mode 100644
index 0000000000..163fedd212
--- /dev/null
+++ b/spec/build/bsps/m68k/mcf5329/abi.yml
@@ -0,0 +1,17 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+actions:
+- get-string: null
+- split: null
+- env-append: null
+build-type: option
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+default:
+- -mcpu=5307
+default-by-variant: []
+description: |
+ ABI flags
+enabled-by: true
+links: []
+name: ABI_FLAGS
+type: build
diff --git a/spec/build/bsps/m68k/mcf5329/bspmcf5329.yml b/spec/build/bsps/m68k/mcf5329/bspmcf5329.yml
new file mode 100644
index 0000000000..e0def013f4
--- /dev/null
+++ b/spec/build/bsps/m68k/mcf5329/bspmcf5329.yml
@@ -0,0 +1,57 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+arch: m68k
+bsp: mcf5329
+build-type: bsp
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+enabled-by: true
+family: mcf5329
+includes: []
+install:
+- destination: ${BSP_INCLUDEDIR}
+ source:
+ - bsps/m68k/mcf5329/include/bsp.h
+ - bsps/m68k/mcf5329/include/tm27.h
+- destination: ${BSP_INCLUDEDIR}/bsp
+ source:
+ - bsps/m68k/mcf5329/include/bsp/irq.h
+- destination: ${BSP_LIBDIR}
+ source:
+ - bsps/m68k/mcf5329/start/linkcmds
+ - bsps/m68k/mcf5329/start/linkcmdsflash
+links:
+- role: build-dependency
+ uid: ../grp
+- role: build-dependency
+ uid: abi
+- role: build-dependency
+ uid: objnet
+- role: build-dependency
+ uid: start
+- role: build-dependency
+ uid: ../../obj
+- role: build-dependency
+ uid: ../../objirqdflt
+- role: build-dependency
+ uid: ../../opto2
+- role: build-dependency
+ uid: ../../bspopts
+source:
+- bsps/m68k/mcf5329/btimer/btimer.c
+- bsps/m68k/mcf5329/clock/clock.c
+- bsps/m68k/mcf5329/console/console.c
+- bsps/m68k/mcf5329/start/bspstart.c
+- bsps/m68k/mcf5329/start/cfinit.c
+- bsps/m68k/mcf5329/start/init5329.c
+- bsps/m68k/shared/cache/cache-mcf532x.c
+- bsps/m68k/shared/m68kidle.c
+- bsps/m68k/shared/memProbe.c
+- bsps/shared/dev/getentropy/getentropy-cpucounter.c
+- bsps/shared/start/bspfatal-default.c
+- bsps/shared/start/bspgetworkarea-default.c
+- bsps/shared/start/bspreset-loop.c
+- bsps/shared/start/sbrk.c
+- bsps/shared/start/setvec.c
+type: build
diff --git a/spec/build/bsps/m68k/mcf5329/objnet.yml b/spec/build/bsps/m68k/mcf5329/objnet.yml
new file mode 100644
index 0000000000..c5951112c5
--- /dev/null
+++ b/spec/build/bsps/m68k/mcf5329/objnet.yml
@@ -0,0 +1,16 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: objects
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by:
+- RTEMS_NETWORKING
+includes:
+- cpukit/libnetworking
+install: []
+links: []
+source:
+- bsps/m68k/mcf5329/net/network.c
+type: build
diff --git a/spec/build/bsps/m68k/mcf5329/start.yml b/spec/build/bsps/m68k/mcf5329/start.yml
new file mode 100644
index 0000000000..cdf3bc0e28
--- /dev/null
+++ b/spec/build/bsps/m68k/mcf5329/start.yml
@@ -0,0 +1,14 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+asflags: []
+build-type: start-file
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+enabled-by: true
+includes: []
+install-path: ${BSP_LIBDIR}
+links: []
+source:
+- bsps/m68k/mcf5329/start/start.S
+target: start.o
+type: build
diff --git a/spec/build/bsps/m68k/mrm332/abi.yml b/spec/build/bsps/m68k/mrm332/abi.yml
new file mode 100644
index 0000000000..0daf8ee06b
--- /dev/null
+++ b/spec/build/bsps/m68k/mrm332/abi.yml
@@ -0,0 +1,17 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+actions:
+- get-string: null
+- split: null
+- env-append: null
+build-type: option
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+default:
+- -mcpu=cpu32
+default-by-variant: []
+description: |
+ ABI flags
+enabled-by: true
+links: []
+name: ABI_FLAGS
+type: build
diff --git a/spec/build/bsps/m68k/mrm332/bspmrm332.yml b/spec/build/bsps/m68k/mrm332/bspmrm332.yml
new file mode 100644
index 0000000000..1162b6c8ff
--- /dev/null
+++ b/spec/build/bsps/m68k/mrm332/bspmrm332.yml
@@ -0,0 +1,59 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+arch: m68k
+bsp: mrm332
+build-type: bsp
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+enabled-by: true
+family: mrm332
+includes: []
+install:
+- destination: ${BSP_INCLUDEDIR}
+ source:
+ - bsps/m68k/mrm332/include/bsp.h
+ - bsps/m68k/mrm332/include/mrm332.h
+ - bsps/m68k/mrm332/include/tm27.h
+- destination: ${BSP_INCLUDEDIR}/bsp
+ source:
+ - bsps/m68k/mrm332/include/bsp/irq.h
+- destination: ${BSP_LIBDIR}
+ source:
+ - bsps/m68k/mrm332/start/linkcmds
+links:
+- role: build-dependency
+ uid: ../grp
+- role: build-dependency
+ uid: abi
+- role: build-dependency
+ uid: start
+- role: build-dependency
+ uid: tstmrm332
+- role: build-dependency
+ uid: ../../obj
+- role: build-dependency
+ uid: ../../objirqdflt
+- role: build-dependency
+ uid: ../../optos
+- role: build-dependency
+ uid: ../../bspopts
+source:
+- bsps/m68k/mrm332/btimer/btimer.c
+- bsps/m68k/mrm332/clock/ckinit.c
+- bsps/m68k/mrm332/console/console.c
+- bsps/m68k/mrm332/console/sci.c
+- bsps/m68k/mrm332/start/bspstart.c
+- bsps/m68k/mrm332/start/spinit.c
+- bsps/m68k/mrm332/start/start_c.c
+- bsps/m68k/shared/cache/cache.c
+- bsps/m68k/shared/m68kidle.c
+- bsps/m68k/shared/memProbe.c
+- bsps/shared/dev/getentropy/getentropy-cpucounter.c
+- bsps/shared/start/bspfatal-default.c
+- bsps/shared/start/bspgetworkarea-default.c
+- bsps/shared/start/bspreset-empty.c
+- bsps/shared/start/bspstart-empty.c
+- bsps/shared/start/sbrk.c
+- bsps/shared/start/setvec.c
+type: build
diff --git a/spec/build/bsps/m68k/mrm332/start.yml b/spec/build/bsps/m68k/mrm332/start.yml
new file mode 100644
index 0000000000..a545905944
--- /dev/null
+++ b/spec/build/bsps/m68k/mrm332/start.yml
@@ -0,0 +1,14 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+asflags: []
+build-type: start-file
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+enabled-by: true
+includes: []
+install-path: ${BSP_LIBDIR}
+links: []
+source:
+- bsps/m68k/mrm332/start/start.S
+target: start.o
+type: build
diff --git a/spec/build/bsps/m68k/mrm332/tstmrm332.yml b/spec/build/bsps/m68k/mrm332/tstmrm332.yml
new file mode 100644
index 0000000000..5c045c1764
--- /dev/null
+++ b/spec/build/bsps/m68k/mrm332/tstmrm332.yml
@@ -0,0 +1,25 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+actions:
+- set-test-state:
+ cdtest: exclude
+ dl05: exclude
+ dl10: exclude
+ fileio: exclude
+ fsdosfsname01: exclude
+ iostream: exclude
+ linpack: exclude
+ record02: exclude
+ sptls01: exclude
+ sptls02: exclude
+ utf8proc01: exclude
+build-type: option
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+default: null
+default-by-variant: []
+description: ''
+enabled-by: true
+links:
+- role: build-dependency
+ uid: ../../tstnoiconv
+type: build
diff --git a/spec/build/bsps/m68k/mvme147/abi.yml b/spec/build/bsps/m68k/mvme147/abi.yml
new file mode 100644
index 0000000000..9d29b297c5
--- /dev/null
+++ b/spec/build/bsps/m68k/mvme147/abi.yml
@@ -0,0 +1,17 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+actions:
+- get-string: null
+- split: null
+- env-append: null
+build-type: option
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+default:
+- -mcpu=68030
+default-by-variant: []
+description: |
+ ABI flags
+enabled-by: true
+links: []
+name: ABI_FLAGS
+type: build
diff --git a/spec/build/bsps/m68k/mvme147/bspmvme147.yml b/spec/build/bsps/m68k/mvme147/bspmvme147.yml
new file mode 100644
index 0000000000..1c96cf548a
--- /dev/null
+++ b/spec/build/bsps/m68k/mvme147/bspmvme147.yml
@@ -0,0 +1,55 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+arch: m68k
+bsp: mvme147
+build-type: bsp
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+enabled-by: true
+family: mvme147
+includes: []
+install:
+- destination: ${BSP_INCLUDEDIR}
+ source:
+ - bsps/m68k/mvme147/include/bsp.h
+ - bsps/m68k/mvme147/include/tm27.h
+- destination: ${BSP_INCLUDEDIR}/bsp
+ source:
+ - bsps/m68k/mvme147/include/bsp/irq.h
+- destination: ${BSP_LIBDIR}
+ source:
+ - bsps/m68k/mvme147/start/linkcmds
+ - bsps/m68k/shared/start/linkcmds.base
+links:
+- role: build-dependency
+ uid: ../grp
+- role: build-dependency
+ uid: abi
+- role: build-dependency
+ uid: ../start
+- role: build-dependency
+ uid: ../../obj
+- role: build-dependency
+ uid: ../../objirqdflt
+- role: build-dependency
+ uid: ../../opto2
+- role: build-dependency
+ uid: ../../bspopts
+source:
+- bsps/m68k/mvme147/btimer/btimer.c
+- bsps/m68k/mvme147/btimer/timerisr.S
+- bsps/m68k/mvme147/clock/ckinit.c
+- bsps/m68k/mvme147/console/console.c
+- bsps/m68k/mvme147/start/bspclean.c
+- bsps/m68k/mvme147/start/bspstart.c
+- bsps/m68k/shared/cache/cache.c
+- bsps/m68k/shared/m68kidle.c
+- bsps/m68k/shared/memProbe.c
+- bsps/shared/dev/getentropy/getentropy-cpucounter.c
+- bsps/shared/dev/serial/printk-dummy.c
+- bsps/shared/start/bspgetworkarea-default.c
+- bsps/shared/start/bspreset-empty.c
+- bsps/shared/start/sbrk.c
+- bsps/shared/start/setvec.c
+type: build
diff --git a/spec/build/bsps/m68k/mvme147s/abi.yml b/spec/build/bsps/m68k/mvme147s/abi.yml
new file mode 100644
index 0000000000..9d29b297c5
--- /dev/null
+++ b/spec/build/bsps/m68k/mvme147s/abi.yml
@@ -0,0 +1,17 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+actions:
+- get-string: null
+- split: null
+- env-append: null
+build-type: option
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+default:
+- -mcpu=68030
+default-by-variant: []
+description: |
+ ABI flags
+enabled-by: true
+links: []
+name: ABI_FLAGS
+type: build
diff --git a/spec/build/bsps/m68k/mvme147s/bspmvme147s.yml b/spec/build/bsps/m68k/mvme147s/bspmvme147s.yml
new file mode 100644
index 0000000000..ee2f4cc64d
--- /dev/null
+++ b/spec/build/bsps/m68k/mvme147s/bspmvme147s.yml
@@ -0,0 +1,57 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+arch: m68k
+bsp: mvme147s
+build-type: bsp
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+enabled-by: true
+family: mvme147s
+includes: []
+install:
+- destination: ${BSP_INCLUDEDIR}
+ source:
+ - bsps/m68k/mvme147s/include/bsp.h
+ - bsps/m68k/mvme147s/include/tm27.h
+- destination: ${BSP_INCLUDEDIR}/bsp
+ source:
+ - bsps/m68k/mvme147s/include/bsp/irq.h
+- destination: ${BSP_LIBDIR}
+ source:
+ - bsps/m68k/mvme147s/start/linkcmds
+ - bsps/m68k/shared/start/linkcmds.base
+links:
+- role: build-dependency
+ uid: ../grp
+- role: build-dependency
+ uid: abi
+- role: build-dependency
+ uid: objmpci
+- role: build-dependency
+ uid: ../start
+- role: build-dependency
+ uid: ../../obj
+- role: build-dependency
+ uid: ../../objirqdflt
+- role: build-dependency
+ uid: ../../opto2
+- role: build-dependency
+ uid: ../../bspopts
+source:
+- bsps/m68k/mvme147/btimer/btimer.c
+- bsps/m68k/mvme147/btimer/timerisr.S
+- bsps/m68k/mvme147/clock/ckinit.c
+- bsps/m68k/mvme147/console/console.c
+- bsps/m68k/mvme147s/start/bspstart.c
+- bsps/m68k/shared/cache/cache.c
+- bsps/m68k/shared/m68kidle.c
+- bsps/m68k/shared/memProbe.c
+- bsps/shared/dev/getentropy/getentropy-cpucounter.c
+- bsps/shared/dev/serial/printk-dummy.c
+- bsps/shared/start/bspfatal-default.c
+- bsps/shared/start/bspgetworkarea-default.c
+- bsps/shared/start/bspreset-empty.c
+- bsps/shared/start/sbrk.c
+- bsps/shared/start/setvec.c
+type: build
diff --git a/spec/build/bsps/m68k/mvme147s/objmpci.yml b/spec/build/bsps/m68k/mvme147s/objmpci.yml
new file mode 100644
index 0000000000..2d7b87cf88
--- /dev/null
+++ b/spec/build/bsps/m68k/mvme147s/objmpci.yml
@@ -0,0 +1,18 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: objects
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by:
+- RTEMS_MULTIPROCESSING
+includes: []
+install: []
+links: []
+source:
+- bsps/m68k/mvme147s/mpci/addrconv.c
+- bsps/m68k/mvme147s/mpci/getcfg.c
+- bsps/m68k/mvme147s/mpci/lock.c
+- bsps/m68k/mvme147s/mpci/mpisr.c
+type: build
diff --git a/spec/build/bsps/m68k/mvme162/abi.yml b/spec/build/bsps/m68k/mvme162/abi.yml
new file mode 100644
index 0000000000..87a7b8c43a
--- /dev/null
+++ b/spec/build/bsps/m68k/mvme162/abi.yml
@@ -0,0 +1,18 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+actions:
+- get-string: null
+- split: null
+- env-append: null
+build-type: option
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+default:
+- -mcpu=68040
+- -msoft-float
+default-by-variant: []
+description: |
+ ABI flags
+enabled-by: true
+links: []
+name: ABI_FLAGS
+type: build
diff --git a/spec/build/bsps/m68k/mvme162/bspmvme162.yml b/spec/build/bsps/m68k/mvme162/bspmvme162.yml
new file mode 100644
index 0000000000..5d5f0d3911
--- /dev/null
+++ b/spec/build/bsps/m68k/mvme162/bspmvme162.yml
@@ -0,0 +1,21 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+arch: m68k
+bsp: mvme162
+build-type: bsp
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+enabled-by: true
+family: mvme162
+includes: []
+install: []
+links:
+- role: build-dependency
+ uid: grp
+- role: build-dependency
+ uid: tstmvme162
+- role: build-dependency
+ uid: ../../opto2
+source: []
+type: build
diff --git a/spec/build/bsps/m68k/mvme162/bspmvme162lx.yml b/spec/build/bsps/m68k/mvme162/bspmvme162lx.yml
new file mode 100644
index 0000000000..bcd810eb69
--- /dev/null
+++ b/spec/build/bsps/m68k/mvme162/bspmvme162lx.yml
@@ -0,0 +1,21 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+arch: m68k
+bsp: mvme162lx
+build-type: bsp
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+enabled-by: true
+family: mvme162
+includes: []
+install: []
+links:
+- role: build-dependency
+ uid: grp
+- role: build-dependency
+ uid: tstmvme162lx
+- role: build-dependency
+ uid: ../../opto2
+source: []
+type: build
diff --git a/spec/build/bsps/m68k/mvme162/grp.yml b/spec/build/bsps/m68k/mvme162/grp.yml
new file mode 100644
index 0000000000..12b102d57f
--- /dev/null
+++ b/spec/build/bsps/m68k/mvme162/grp.yml
@@ -0,0 +1,30 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: group
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+enabled-by: true
+includes: []
+install: []
+ldflags: []
+links:
+- role: build-dependency
+ uid: ../grp
+- role: build-dependency
+ uid: abi
+- role: build-dependency
+ uid: obj
+- role: build-dependency
+ uid: objnet
+- role: build-dependency
+ uid: ../objfpsp
+- role: build-dependency
+ uid: ../start
+- role: build-dependency
+ uid: ../../obj
+- role: build-dependency
+ uid: ../../objirqdflt
+- role: build-dependency
+ uid: ../../bspopts
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/bsps/m68k/mvme162/obj.yml b/spec/build/bsps/m68k/mvme162/obj.yml
new file mode 100644
index 0000000000..e009ed3bf4
--- /dev/null
+++ b/spec/build/bsps/m68k/mvme162/obj.yml
@@ -0,0 +1,41 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: objects
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by: true
+includes: []
+install:
+- destination: ${BSP_INCLUDEDIR}
+ source:
+ - bsps/m68k/mvme162/include/bsp.h
+ - bsps/m68k/mvme162/include/page_table.h
+ - bsps/m68k/mvme162/include/tm27.h
+- destination: ${BSP_INCLUDEDIR}/bsp
+ source:
+ - bsps/m68k/mvme162/include/bsp/irq.h
+- destination: ${BSP_LIBDIR}
+ source:
+ - bsps/m68k/mvme162/start/linkcmds
+ - bsps/m68k/shared/start/linkcmds.base
+links: []
+source:
+- bsps/m68k/mvme162/btimer/btimer.c
+- bsps/m68k/mvme162/btimer/timerisr.S
+- bsps/m68k/mvme162/clock/ckinit.c
+- bsps/m68k/mvme162/console/console.c
+- bsps/m68k/mvme162/rtc/tod.c
+- bsps/m68k/mvme162/start/bspclean.c
+- bsps/m68k/mvme162/start/bspstart.c
+- bsps/m68k/mvme162/start/page_table.c
+- bsps/m68k/shared/cache/cache.c
+- bsps/m68k/shared/m68kidle.c
+- bsps/m68k/shared/memProbe.c
+- bsps/shared/dev/getentropy/getentropy-cpucounter.c
+- bsps/shared/start/bspgetworkarea-default.c
+- bsps/shared/start/bspreset-empty.c
+- bsps/shared/start/sbrk.c
+- bsps/shared/start/setvec.c
+type: build
diff --git a/spec/build/bsps/m68k/mvme162/objnet.yml b/spec/build/bsps/m68k/mvme162/objnet.yml
new file mode 100644
index 0000000000..89344f51f6
--- /dev/null
+++ b/spec/build/bsps/m68k/mvme162/objnet.yml
@@ -0,0 +1,16 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: objects
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by:
+- RTEMS_NETWORKING
+includes:
+- cpukit/libnetworking
+install: []
+links: []
+source:
+- bsps/m68k/mvme167/net/network.c
+type: build
diff --git a/spec/build/bsps/m68k/mvme162/tstmvme162.yml b/spec/build/bsps/m68k/mvme162/tstmvme162.yml
new file mode 100644
index 0000000000..153cfab0e3
--- /dev/null
+++ b/spec/build/bsps/m68k/mvme162/tstmvme162.yml
@@ -0,0 +1,13 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+actions:
+- set-test-state:
+ fsdosfsname01: exclude
+build-type: option
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+default: null
+default-by-variant: []
+description: ''
+enabled-by: true
+links: []
+type: build
diff --git a/spec/build/bsps/m68k/mvme162/tstmvme162lx.yml b/spec/build/bsps/m68k/mvme162/tstmvme162lx.yml
new file mode 100644
index 0000000000..153cfab0e3
--- /dev/null
+++ b/spec/build/bsps/m68k/mvme162/tstmvme162lx.yml
@@ -0,0 +1,13 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+actions:
+- set-test-state:
+ fsdosfsname01: exclude
+build-type: option
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+default: null
+default-by-variant: []
+description: ''
+enabled-by: true
+links: []
+type: build
diff --git a/spec/build/bsps/m68k/mvme167/abi.yml b/spec/build/bsps/m68k/mvme167/abi.yml
new file mode 100644
index 0000000000..3bedb8a896
--- /dev/null
+++ b/spec/build/bsps/m68k/mvme167/abi.yml
@@ -0,0 +1,17 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+actions:
+- get-string: null
+- split: null
+- env-append: null
+build-type: option
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+default:
+- -mcpu=68040
+default-by-variant: []
+description: |
+ ABI flags
+enabled-by: true
+links: []
+name: ABI_FLAGS
+type: build
diff --git a/spec/build/bsps/m68k/mvme167/bspmvme167.yml b/spec/build/bsps/m68k/mvme167/bspmvme167.yml
new file mode 100644
index 0000000000..fd12e9b659
--- /dev/null
+++ b/spec/build/bsps/m68k/mvme167/bspmvme167.yml
@@ -0,0 +1,72 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+arch: m68k
+bsp: mvme167
+build-type: bsp
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+enabled-by: true
+family: mvme167
+includes: []
+install:
+- destination: ${BSP_INCLUDEDIR}
+ source:
+ - bsps/m68k/mvme167/include/bsp.h
+ - bsps/m68k/mvme167/include/page_table.h
+ - bsps/m68k/mvme167/include/tm27.h
+- destination: ${BSP_INCLUDEDIR}/bsp
+ source:
+ - bsps/m68k/mvme167/include/bsp/irq.h
+- destination: ${BSP_LIBDIR}
+ source:
+ - bsps/m68k/mvme167/start/linkcmds
+ - bsps/m68k/shared/start/linkcmds.base
+links:
+- role: build-dependency
+ uid: ../grp
+- role: build-dependency
+ uid: abi
+- role: build-dependency
+ uid: objnet
+- role: build-dependency
+ uid: optconminor
+- role: build-dependency
+ uid: optintlvl
+- role: build-dependency
+ uid: optiomode
+- role: build-dependency
+ uid: optmvme167
+- role: build-dependency
+ uid: optprintkminor
+- role: build-dependency
+ uid: optuseterm
+- role: build-dependency
+ uid: ../objfpsp
+- role: build-dependency
+ uid: ../start
+- role: build-dependency
+ uid: ../../obj
+- role: build-dependency
+ uid: ../../objirqdflt
+- role: build-dependency
+ uid: ../../opto2
+- role: build-dependency
+ uid: ../../bspopts
+source:
+- bsps/m68k/mvme167/btimer/btimer.c
+- bsps/m68k/mvme167/btimer/timerisr.S
+- bsps/m68k/mvme167/clock/ckinit.c
+- bsps/m68k/mvme167/console/console.c
+- bsps/m68k/mvme167/start/bspclean.c
+- bsps/m68k/mvme167/start/bspstart.c
+- bsps/m68k/mvme167/start/page_table.c
+- bsps/m68k/shared/cache/cache.c
+- bsps/m68k/shared/m68kidle.c
+- bsps/m68k/shared/memProbe.c
+- bsps/shared/dev/getentropy/getentropy-cpucounter.c
+- bsps/shared/start/bspgetworkarea-default.c
+- bsps/shared/start/bspreset-empty.c
+- bsps/shared/start/sbrk.c
+- bsps/shared/start/setvec.c
+type: build
diff --git a/spec/build/bsps/m68k/mvme167/objnet.yml b/spec/build/bsps/m68k/mvme167/objnet.yml
new file mode 100644
index 0000000000..89344f51f6
--- /dev/null
+++ b/spec/build/bsps/m68k/mvme167/objnet.yml
@@ -0,0 +1,16 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: objects
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by:
+- RTEMS_NETWORKING
+includes:
+- cpukit/libnetworking
+install: []
+links: []
+source:
+- bsps/m68k/mvme167/net/network.c
+type: build
diff --git a/spec/build/bsps/m68k/mvme167/optconminor.yml b/spec/build/bsps/m68k/mvme167/optconminor.yml
new file mode 100644
index 0000000000..f6694db348
--- /dev/null
+++ b/spec/build/bsps/m68k/mvme167/optconminor.yml
@@ -0,0 +1,15 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+actions:
+- get-boolean: null
+- define-condition: null
+build-type: option
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+default: true
+default-by-variant: []
+description: |
+ Port to use for the RTEMS console. 0 - /dev/tty0, Serial Port 1/Console on the MVME712M. 1 - /dev/tty1, Serial Port 2/TTY01 on the MVME712M. 2 - /dev/tty2, Serial Port 3 on the MVME712M. 3 - /dev/tty3, Serial Port 4 on the MVME712M.
+enabled-by: true
+links: []
+name: CONSOLE_MINOR
+type: build
diff --git a/spec/build/bsps/m68k/mvme167/optintlvl.yml b/spec/build/bsps/m68k/mvme167/optintlvl.yml
new file mode 100644
index 0000000000..6b5005c11d
--- /dev/null
+++ b/spec/build/bsps/m68k/mvme167/optintlvl.yml
@@ -0,0 +1,15 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+actions:
+- get-boolean: null
+- define-condition: null
+build-type: option
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+default: true
+default-by-variant: []
+description: |
+ Interrupt level for the CD2401(when CD2401_IO_MODE == 1).
+enabled-by: true
+links: []
+name: CD2401_INT_LEVEL
+type: build
diff --git a/spec/build/bsps/m68k/mvme167/optiomode.yml b/spec/build/bsps/m68k/mvme167/optiomode.yml
new file mode 100644
index 0000000000..44b38da713
--- /dev/null
+++ b/spec/build/bsps/m68k/mvme167/optiomode.yml
@@ -0,0 +1,15 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+actions:
+- get-boolean: null
+- define-condition: null
+build-type: option
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+default: false
+default-by-variant: []
+description: |
+ 0 for polled I/O, 1 for interrupt-driven.
+enabled-by: true
+links: []
+name: CD2401_IO_MODE
+type: build
diff --git a/spec/build/bsps/m68k/mvme167/optmvme167.yml b/spec/build/bsps/m68k/mvme167/optmvme167.yml
new file mode 100644
index 0000000000..b857d705bd
--- /dev/null
+++ b/spec/build/bsps/m68k/mvme167/optmvme167.yml
@@ -0,0 +1,14 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+actions:
+- set-value: true
+- define-condition: mvme167
+build-type: option
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+default: null
+default-by-variant: []
+description: |
+ Defines mvme167 in <bspopts.h>.
+enabled-by: true
+links: []
+type: build
diff --git a/spec/build/bsps/m68k/mvme167/optprintkminor.yml b/spec/build/bsps/m68k/mvme167/optprintkminor.yml
new file mode 100644
index 0000000000..5976e1dbbb
--- /dev/null
+++ b/spec/build/bsps/m68k/mvme167/optprintkminor.yml
@@ -0,0 +1,16 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+actions:
+- get-integer: null
+- define: null
+build-type: option
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+default: 1
+default-by-variant: []
+description: |
+ Port to use for printk debugging output. 0 - /dev/tty0, Serial Port 1/Console on the MVME712M. 1 - /dev/tty1, Serial Port 2/TTY01 on the MVME712M. 2 - /dev/tty2, Serial Port 3 on the MVME712M. 3 - /dev/tty3, Serial Port 4 on the MVME712M.
+enabled-by: true
+format: '{}'
+links: []
+name: PRINTK_MINOR
+type: build
diff --git a/spec/build/bsps/m68k/mvme167/optuseterm.yml b/spec/build/bsps/m68k/mvme167/optuseterm.yml
new file mode 100644
index 0000000000..585bd63329
--- /dev/null
+++ b/spec/build/bsps/m68k/mvme167/optuseterm.yml
@@ -0,0 +1,15 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+actions:
+- get-boolean: null
+- define-condition: null
+build-type: option
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+default: false
+default-by-variant: []
+description: |
+ 1 for using termios based console.
+enabled-by: true
+links: []
+name: CD2401_USE_TERMIOS
+type: build
diff --git a/spec/build/bsps/m68k/objfpsp.yml b/spec/build/bsps/m68k/objfpsp.yml
new file mode 100644
index 0000000000..cf8ebfbcd7
--- /dev/null
+++ b/spec/build/bsps/m68k/objfpsp.yml
@@ -0,0 +1,57 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: objects
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by:
+- m68k/gen68360_040
+- m68k/mvme167
+includes: []
+install: []
+links: []
+source:
+- bsps/m68k/shared/fpsp/bindec.S
+- bsps/m68k/shared/fpsp/binstr.S
+- bsps/m68k/shared/fpsp/bugfix.S
+- bsps/m68k/shared/fpsp/decbin.S
+- bsps/m68k/shared/fpsp/do_func.S
+- bsps/m68k/shared/fpsp/gen_except.S
+- bsps/m68k/shared/fpsp/get_op.S
+- bsps/m68k/shared/fpsp/kernel_ex.S
+- bsps/m68k/shared/fpsp/res_func.S
+- bsps/m68k/shared/fpsp/round.S
+- bsps/m68k/shared/fpsp/rtems_fpsp.c
+- bsps/m68k/shared/fpsp/rtems_skel.S
+- bsps/m68k/shared/fpsp/sacos.S
+- bsps/m68k/shared/fpsp/sasin.S
+- bsps/m68k/shared/fpsp/satanh.S
+- bsps/m68k/shared/fpsp/satan.S
+- bsps/m68k/shared/fpsp/scale.S
+- bsps/m68k/shared/fpsp/scosh.S
+- bsps/m68k/shared/fpsp/setox.S
+- bsps/m68k/shared/fpsp/sgetem.S
+- bsps/m68k/shared/fpsp/sint.S
+- bsps/m68k/shared/fpsp/slog2.S
+- bsps/m68k/shared/fpsp/slogn.S
+- bsps/m68k/shared/fpsp/smovecr.S
+- bsps/m68k/shared/fpsp/srem_mod.S
+- bsps/m68k/shared/fpsp/ssinh.S
+- bsps/m68k/shared/fpsp/ssin.S
+- bsps/m68k/shared/fpsp/stanh.S
+- bsps/m68k/shared/fpsp/stan.S
+- bsps/m68k/shared/fpsp/sto_res.S
+- bsps/m68k/shared/fpsp/stwotox.S
+- bsps/m68k/shared/fpsp/tbldo.S
+- bsps/m68k/shared/fpsp/util.S
+- bsps/m68k/shared/fpsp/x_bsun.S
+- bsps/m68k/shared/fpsp/x_fline.S
+- bsps/m68k/shared/fpsp/x_operr.S
+- bsps/m68k/shared/fpsp/x_ovfl.S
+- bsps/m68k/shared/fpsp/x_snan.S
+- bsps/m68k/shared/fpsp/x_store.S
+- bsps/m68k/shared/fpsp/x_unfl.S
+- bsps/m68k/shared/fpsp/x_unimp.S
+- bsps/m68k/shared/fpsp/x_unsupp.S
+type: build
diff --git a/spec/build/bsps/m68k/start.yml b/spec/build/bsps/m68k/start.yml
new file mode 100644
index 0000000000..0a5aa7cff5
--- /dev/null
+++ b/spec/build/bsps/m68k/start.yml
@@ -0,0 +1,14 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+asflags: []
+build-type: start-file
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+enabled-by: true
+includes: []
+install-path: ${BSP_LIBDIR}
+links: []
+source:
+- bsps/m68k/shared/start/start.S
+target: start.o
+type: build
diff --git a/spec/build/bsps/m68k/uC5282/abi.yml b/spec/build/bsps/m68k/uC5282/abi.yml
new file mode 100644
index 0000000000..a2d11d2bf3
--- /dev/null
+++ b/spec/build/bsps/m68k/uC5282/abi.yml
@@ -0,0 +1,17 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+actions:
+- get-string: null
+- split: null
+- env-append: null
+build-type: option
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+default:
+- -mcpu=5282
+default-by-variant: []
+description: |
+ ABI flags
+enabled-by: true
+links: []
+name: ABI_FLAGS
+type: build
diff --git a/spec/build/bsps/m68k/uC5282/bspuc5282.yml b/spec/build/bsps/m68k/uC5282/bspuc5282.yml
new file mode 100644
index 0000000000..310f7f336b
--- /dev/null
+++ b/spec/build/bsps/m68k/uC5282/bspuc5282.yml
@@ -0,0 +1,55 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+arch: m68k
+bsp: uC5282
+build-type: bsp
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+enabled-by: true
+family: uC5282
+includes: []
+install:
+- destination: ${BSP_INCLUDEDIR}
+ source:
+ - bsps/m68k/uC5282/include/bsp.h
+ - bsps/m68k/uC5282/include/tm27.h
+- destination: ${BSP_INCLUDEDIR}/bsp
+ source:
+ - bsps/m68k/uC5282/include/bsp/irq.h
+- destination: ${BSP_LIBDIR}
+ source:
+ - bsps/m68k/uC5282/start/linkcmds
+links:
+- role: build-dependency
+ uid: ../grp
+- role: build-dependency
+ uid: abi
+- role: build-dependency
+ uid: objnet
+- role: build-dependency
+ uid: start
+- role: build-dependency
+ uid: ../../obj
+- role: build-dependency
+ uid: ../../objirqdflt
+- role: build-dependency
+ uid: ../../opto2
+- role: build-dependency
+ uid: ../../bspopts
+source:
+- bsps/m68k/shared/cache/cache-mcf5282.c
+- bsps/m68k/shared/m68kidle.c
+- bsps/m68k/shared/memProbe.c
+- bsps/m68k/uC5282/btimer/btimer.c
+- bsps/m68k/uC5282/clock/clock.c
+- bsps/m68k/uC5282/console/console.c
+- bsps/m68k/uC5282/start/bspclean.c
+- bsps/m68k/uC5282/start/bspreset.c
+- bsps/m68k/uC5282/start/bspstart.c
+- bsps/m68k/uC5282/start/init5282.c
+- bsps/shared/dev/getentropy/getentropy-cpucounter.c
+- bsps/shared/start/bspgetworkarea-default.c
+- bsps/shared/start/sbrk.c
+- bsps/shared/start/setvec.c
+type: build
diff --git a/spec/build/bsps/m68k/uC5282/objnet.yml b/spec/build/bsps/m68k/uC5282/objnet.yml
new file mode 100644
index 0000000000..86e65eeb48
--- /dev/null
+++ b/spec/build/bsps/m68k/uC5282/objnet.yml
@@ -0,0 +1,16 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: objects
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by:
+- RTEMS_NETWORKING
+includes:
+- cpukit/libnetworking
+install: []
+links: []
+source:
+- bsps/m68k/uC5282/net/network.c
+type: build
diff --git a/spec/build/bsps/m68k/uC5282/start.yml b/spec/build/bsps/m68k/uC5282/start.yml
new file mode 100644
index 0000000000..6dc9769b53
--- /dev/null
+++ b/spec/build/bsps/m68k/uC5282/start.yml
@@ -0,0 +1,14 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+asflags: []
+build-type: start-file
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+enabled-by: true
+includes: []
+install-path: ${BSP_LIBDIR}
+links: []
+source:
+- bsps/m68k/uC5282/start/start.S
+target: start.o
+type: build
diff --git a/spec/build/bsps/makebsp.yml b/spec/build/bsps/makebsp.yml
new file mode 100644
index 0000000000..9ea6f53516
--- /dev/null
+++ b/spec/build/bsps/makebsp.yml
@@ -0,0 +1,41 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: config-file
+content: |
+ ## BSP configuration flags for BSP "${ARCH}/${BSP_NAME}"
+
+ ##
+ ## Does this BSP support multiprocessing ?
+ ##
+ HAS_MP = ${RTEMS_HAS_MULTIPROCESSING}
+
+ ##
+ ## Does this BSP support RTEMS's remote debugger ?
+ ##
+ HAS_RDBG = no
+
+ ##
+ ## Does this BSP support RTEMS's posix API ?
+ ##
+ HAS_POSIX_API = ${RTEMS_HAS_POSIX_API}
+
+ ##
+ ## Does this BSP support RTEMS's ITRON API ?
+ ##
+ HAS_ITRON_API = no
+
+ ##
+ ## Does this BSP support RTEMS's CXX API ?
+ ##
+ HAS_CPLUSPLUS = yes
+
+ ##
+ ## Does this BSP support RTEMS's networking ?
+ ##
+ HAS_NETWORKING = ${RTEMS_HAS_NETWORKING}
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+enabled-by: true
+install-path: ${PREFIX}/${ARCH}-rtems${__RTEMS_MAJOR__}/${BSP_NAME}/make
+links: []
+target: bsp.cfg
+type: build
diff --git a/spec/build/bsps/makecustom.yml b/spec/build/bsps/makecustom.yml
new file mode 100644
index 0000000000..e04d4281c7
--- /dev/null
+++ b/spec/build/bsps/makecustom.yml
@@ -0,0 +1,15 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: config-file
+content: |
+ include $$(RTEMS_ROOT)/make/custom/default.cfg
+ RTEMS_CPU = ${ARCH}
+ CPU_CFLAGS = ${ABI_FLAGS}
+ CFLAGS_OPTIMIZE_V = ${OPTIMIZATION_FLAGS}
+ LDFLAGS = ${LDFLAGS}
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+enabled-by: true
+install-path: ${PREFIX}/make/custom
+links: []
+target: ${BSP_NAME}.cfg
+type: build
diff --git a/spec/build/bsps/makeinc.yml b/spec/build/bsps/makeinc.yml
new file mode 100644
index 0000000000..afe135049d
--- /dev/null
+++ b/spec/build/bsps/makeinc.yml
@@ -0,0 +1,65 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: config-file
+content: |
+ #
+ # BSP specific settings. To be included in application Makefiles
+ #
+ # This support will be removed from RTEMS. Please consider other
+ # ways to build applications.
+ #
+
+ RTEMS_API = ${__RTEMS_MAJOR__}
+
+ RTEMS_CPU = ${ARCH}
+ RTEMS_BSP = ${BSP_NAME}
+
+ prefix = ${PREFIX}
+ exec_prefix = $${prefix}/${ARCH}-rtems${__RTEMS_MAJOR__}
+
+ CC_FOR_TARGET = ${ARCH}-rtems${__RTEMS_MAJOR__}-gcc
+ CXX_FOR_TARGET = ${ARCH}-rtems${__RTEMS_MAJOR__}-g++
+ AS_FOR_TARGET = ${ARCH}-rtems${__RTEMS_MAJOR__}-as
+ AR_FOR_TARGET = ${ARCH}-rtems${__RTEMS_MAJOR__}-ar
+ NM_FOR_TARGET = ${ARCH}-rtems${__RTEMS_MAJOR__}-nm
+ LD_FOR_TARGET = ${ARCH}-rtems${__RTEMS_MAJOR__}-ld
+ SIZE_FOR_TARGET = ${ARCH}-rtems${__RTEMS_MAJOR__}-size
+ OBJCOPY_FOR_TARGET = ${ARCH}-rtems${__RTEMS_MAJOR__}-objcopy
+
+ CC= $$(CC_FOR_TARGET)
+ CXX= $$(CXX_FOR_TARGET)
+ AS= $$(AS_FOR_TARGET)
+ LD= $$(LD_FOR_TARGET)
+ NM= $$(NM_FOR_TARGET)
+ AR= $$(AR_FOR_TARGET)
+ SIZE= $$(SIZE_FOR_TARGET)
+ OBJCOPY= $$(OBJCOPY_FOR_TARGET)
+
+ export CC
+ export CXX
+ export AS
+ export LD
+ export NM
+ export AR
+ export SIZE
+ export OBJCOPY
+
+ RTEMS_ROOT ?= $$(prefix)
+ PROJECT_ROOT = $$(RTEMS_ROOT)
+ RTEMS_CUSTOM = $$(RTEMS_ROOT)/make/custom/$$(RTEMS_BSP).cfg
+ RTEMS_SHARE = $$(RTEMS_ROOT)/share/rtems$$(RTEMS_API)
+
+ RTEMS_USE_OWN_PDIR = no
+ RTEMS_HAS_POSIX_API = ${RTEMS_HAS_POSIX_API}
+ RTEMS_HAS_ITRON_API = no
+ RTEMS_HAS_CPLUSPLUS = yes
+
+ export RTEMS_BSP
+ export RTEMS_CUSTOM
+ export PROJECT_ROOT
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+enabled-by: true
+install-path: ${PREFIX}/${ARCH}-rtems${__RTEMS_MAJOR__}/${BSP_NAME}
+links: []
+target: Makefile.inc
+type: build
diff --git a/spec/build/bsps/maketarget.yml b/spec/build/bsps/maketarget.yml
new file mode 100644
index 0000000000..dd920dcd1f
--- /dev/null
+++ b/spec/build/bsps/maketarget.yml
@@ -0,0 +1,55 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: config-file
+content: |
+ #
+ # Target specific settings.
+ #
+
+ CFLAGS = ${WARNING_FLAGS} ${CC_WARNING_FLAGS} ${OPTIMIZATION_FLAGS} ${ABI_FLAGS}
+ CPPFLAGS =
+ LDFLAGS =
+ LIBS =
+
+ RTEMS_API = ${__RTEMS_MAJOR__}
+ CC = ${ARCH}-rtems${__RTEMS_MAJOR__}-gcc --pipe
+ AS = ${ARCH}-rtems${__RTEMS_MAJOR__}-as
+ AR = ${ARCH}-rtems${__RTEMS_MAJOR__}-ar
+ NM = ${ARCH}-rtems${__RTEMS_MAJOR__}-nm
+ LD = ${ARCH}-rtems${__RTEMS_MAJOR__}-ld
+ SIZE = ${ARCH}-rtems${__RTEMS_MAJOR__}-size
+ STRIP = ${ARCH}-rtems${__RTEMS_MAJOR__}-strip
+ OBJCOPY = ${ARCH}-rtems${__RTEMS_MAJOR__}-objcopy
+ RANLIB = ${ARCH}-rtems${__RTEMS_MAJOR__}-ranlib
+
+ CXX = ${ARCH}-rtems${__RTEMS_MAJOR__}-g++
+
+ export CC
+ export AS
+ export LD
+ export NM
+ export AR
+ export SIZE
+ export OBJCOPY
+
+ export CXX
+
+ RTEMS_HAS_MULTIPROCESSING = ${RTEMS_HAS_MULTIPROCESSING}
+ RTEMS_HAS_POSIX_API = ${RTEMS_HAS_POSIX_API}
+ RTEMS_HAS_ITRON_API = no
+ RTEMS_HAS_NETWORKING = ${RTEMS_HAS_NETWORKING}
+ RTEMS_HAS_RDBG = no
+ RTEMS_HAS_CPLUSPLUS = yes
+ RTEMS_CPU = ${ARCH}
+
+ XCFLAGS=$$(CFLAGS_FOR_TARGET)
+
+ export RTEMS_BSP
+ export RTEMS_CUSTOM
+ export PROJECT_ROOT
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+enabled-by: true
+install-path: ${PREFIX}/${ARCH}-rtems${__RTEMS_MAJOR__}/${BSP_NAME}/make
+links: []
+target: target.cfg
+type: build
diff --git a/spec/build/bsps/mips/csb350/abi.yml b/spec/build/bsps/mips/csb350/abi.yml
new file mode 100644
index 0000000000..049de557ad
--- /dev/null
+++ b/spec/build/bsps/mips/csb350/abi.yml
@@ -0,0 +1,19 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+actions:
+- get-string: null
+- split: null
+- env-append: null
+build-type: option
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+default:
+- -mips32
+- -G0
+- -msoft-float
+default-by-variant: []
+description: |
+ ABI flags
+enabled-by: true
+links: []
+name: ABI_FLAGS
+type: build
diff --git a/spec/build/bsps/mips/csb350/bspcsb350.yml b/spec/build/bsps/mips/csb350/bspcsb350.yml
new file mode 100644
index 0000000000..3d29ba81d9
--- /dev/null
+++ b/spec/build/bsps/mips/csb350/bspcsb350.yml
@@ -0,0 +1,58 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+arch: mips
+bsp: csb350
+build-type: bsp
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+enabled-by: true
+family: csb350
+includes: []
+install:
+- destination: ${BSP_INCLUDEDIR}
+ source:
+ - bsps/mips/csb350/include/bsp.h
+ - bsps/mips/csb350/include/tm27.h
+- destination: ${BSP_INCLUDEDIR}/bsp
+ source:
+ - bsps/mips/csb350/include/bsp/irq.h
+- destination: ${BSP_LIBDIR}
+ source:
+ - bsps/mips/csb350/start/linkcmds
+links:
+- role: build-dependency
+ uid: ../grp
+- role: build-dependency
+ uid: abi
+- role: build-dependency
+ uid: objnet
+- role: build-dependency
+ uid: start
+- role: build-dependency
+ uid: ../../obj
+- role: build-dependency
+ uid: ../../objirq
+- role: build-dependency
+ uid: ../../opto2
+- role: build-dependency
+ uid: ../../bspopts
+source:
+- bsps/mips/csb350/btimer/btimer.c
+- bsps/mips/csb350/clock/clockdrv.c
+- bsps/mips/csb350/console/console-io.c
+- bsps/mips/csb350/irq/vectorisrs.c
+- bsps/mips/csb350/start/bspreset.c
+- bsps/mips/csb350/start/bspstart.c
+- bsps/mips/shared/irq/installisrentries.c
+- bsps/mips/shared/irq/interruptmask.c
+- bsps/mips/shared/irq/irq.c
+- bsps/mips/shared/irq/isr_entries.S
+- bsps/mips/shared/irq/vectorexceptions.c
+- bsps/shared/cache/nocache.c
+- bsps/shared/dev/getentropy/getentropy-cpucounter.c
+- bsps/shared/dev/serial/console-polled.c
+- bsps/shared/start/bspfatal-default.c
+- bsps/shared/start/bspgetworkarea-default.c
+- bsps/shared/start/sbrk.c
+type: build
diff --git a/spec/build/bsps/mips/csb350/objnet.yml b/spec/build/bsps/mips/csb350/objnet.yml
new file mode 100644
index 0000000000..6fc6c4e0fd
--- /dev/null
+++ b/spec/build/bsps/mips/csb350/objnet.yml
@@ -0,0 +1,16 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: objects
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by:
+- RTEMS_NETWORKING
+includes:
+- cpukit/libnetworking
+install: []
+links: []
+source:
+- bsps/mips/csb350/net/network.c
+type: build
diff --git a/spec/build/bsps/mips/csb350/start.yml b/spec/build/bsps/mips/csb350/start.yml
new file mode 100644
index 0000000000..5728c48d90
--- /dev/null
+++ b/spec/build/bsps/mips/csb350/start.yml
@@ -0,0 +1,14 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+asflags: []
+build-type: start-file
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+enabled-by: true
+includes: []
+install-path: ${BSP_LIBDIR}
+links: []
+source:
+- bsps/mips/csb350/start/start.S
+target: start.o
+type: build
diff --git a/spec/build/bsps/mips/grp.yml b/spec/build/bsps/mips/grp.yml
new file mode 100644
index 0000000000..359e9b74cc
--- /dev/null
+++ b/spec/build/bsps/mips/grp.yml
@@ -0,0 +1,24 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: group
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+enabled-by: true
+includes: []
+install:
+- destination: ${BSP_INCLUDEDIR}/bsp
+ source:
+ - bsps/mips/include/bsp/i8259.h
+ - bsps/mips/include/bsp/regs.h
+- destination: ${BSP_INCLUDEDIR}/libcpu
+ source:
+ - bsps/mips/include/libcpu/au1x00.h
+ - bsps/mips/include/libcpu/isr_entries.h
+ - bsps/mips/include/libcpu/rm5231.h
+ - bsps/mips/include/libcpu/tx3904.h
+ - bsps/mips/include/libcpu/tx4925.h
+ - bsps/mips/include/libcpu/tx4938.h
+ldflags: []
+links: []
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/bsps/mips/hurricane/abi.yml b/spec/build/bsps/mips/hurricane/abi.yml
new file mode 100644
index 0000000000..79408e4eb3
--- /dev/null
+++ b/spec/build/bsps/mips/hurricane/abi.yml
@@ -0,0 +1,19 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+actions:
+- get-string: null
+- split: null
+- env-append: null
+build-type: option
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+default:
+- -mips3
+- -G0
+- -EL
+default-by-variant: []
+description: |
+ ABI flags
+enabled-by: true
+links: []
+name: ABI_FLAGS
+type: build
diff --git a/spec/build/bsps/mips/hurricane/bsphurricane.yml b/spec/build/bsps/mips/hurricane/bsphurricane.yml
new file mode 100644
index 0000000000..9e934e3e34
--- /dev/null
+++ b/spec/build/bsps/mips/hurricane/bsphurricane.yml
@@ -0,0 +1,70 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+arch: mips
+bsp: hurricane
+build-type: bsp
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+enabled-by: true
+family: hurricane
+includes: []
+install:
+- destination: ${BSP_INCLUDEDIR}
+ source:
+ - bsps/mips/hurricane/include/bsp.h
+ - bsps/mips/hurricane/include/tm27.h
+ - bsps/mips/hurricane/include/usc.h
+- destination: ${BSP_INCLUDEDIR}/bsp
+ source:
+ - bsps/mips/hurricane/include/bsp/irq.h
+- destination: ${BSP_LIBDIR}
+ source:
+ - bsps/mips/hurricane/start/linkcmds
+links:
+- role: build-dependency
+ uid: ../grp
+- role: build-dependency
+ uid: abi
+- role: build-dependency
+ uid: optrm52xx
+- role: build-dependency
+ uid: optusc320
+- role: build-dependency
+ uid: start
+- role: build-dependency
+ uid: ../../obj
+- role: build-dependency
+ uid: ../../objirq
+- role: build-dependency
+ uid: ../../opto2
+- role: build-dependency
+ uid: ../../tstnolibdl
+- role: build-dependency
+ uid: ../../bspopts
+source:
+- bsps/mips/hurricane/clock/ckinit.c
+- bsps/mips/hurricane/console/console.c
+- bsps/mips/hurricane/irq/vectorisrs.c
+- bsps/mips/hurricane/start/bspstart.c
+- bsps/mips/hurricane/start/inittlb.c
+- bsps/mips/hurricane/start/usc.S
+- bsps/mips/shared/irq/exception.S
+- bsps/mips/shared/irq/installisrentries.c
+- bsps/mips/shared/irq/interruptmask.c
+- bsps/mips/shared/irq/irq.c
+- bsps/mips/shared/irq/isr_entries.S
+- bsps/mips/shared/irq/vectorexceptions.c
+- bsps/mips/shared/liblnk/lnklib.S
+- bsps/mips/shared/liblnk/pmon.S
+- bsps/mips/shared/start/idtmem.S
+- bsps/mips/shared/start/idttlb.S
+- bsps/mips/shared/timer/gettime.S
+- bsps/mips/shared/timer/timer.c
+- bsps/shared/cache/nocache.c
+- bsps/shared/dev/getentropy/getentropy-cpucounter.c
+- bsps/shared/start/bspfatal-default.c
+- bsps/shared/start/bspgetworkarea-default.c
+- bsps/shared/start/bspreset-empty.c
+- bsps/shared/start/sbrk.c
+type: build
diff --git a/spec/build/bsps/mips/hurricane/optrm52xx.yml b/spec/build/bsps/mips/hurricane/optrm52xx.yml
new file mode 100644
index 0000000000..1fc3d504e4
--- /dev/null
+++ b/spec/build/bsps/mips/hurricane/optrm52xx.yml
@@ -0,0 +1,15 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+actions:
+- get-boolean: null
+- define-condition: null
+build-type: option
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+default: true
+default-by-variant: []
+description: |
+ This BSP has a RM52xx compatible CPU.
+enabled-by: true
+links: []
+name: BSP_HAS_RM52xx
+type: build
diff --git a/spec/build/bsps/mips/hurricane/optusc320.yml b/spec/build/bsps/mips/hurricane/optusc320.yml
new file mode 100644
index 0000000000..74ddd56d4f
--- /dev/null
+++ b/spec/build/bsps/mips/hurricane/optusc320.yml
@@ -0,0 +1,15 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+actions:
+- get-boolean: null
+- define-condition: null
+build-type: option
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+default: true
+default-by-variant: []
+description: |
+ This BSP has a V3 USC320 system controller chip.
+enabled-by: true
+links: []
+name: BSP_HAS_USC320
+type: build
diff --git a/spec/build/bsps/mips/hurricane/start.yml b/spec/build/bsps/mips/hurricane/start.yml
new file mode 100644
index 0000000000..834ac8e1e3
--- /dev/null
+++ b/spec/build/bsps/mips/hurricane/start.yml
@@ -0,0 +1,14 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+asflags: []
+build-type: start-file
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+enabled-by: true
+includes: []
+install-path: ${BSP_LIBDIR}
+links: []
+source:
+- bsps/mips/hurricane/start/start.S
+target: start.o
+type: build
diff --git a/spec/build/bsps/mips/jmr3904/abi.yml b/spec/build/bsps/mips/jmr3904/abi.yml
new file mode 100644
index 0000000000..c46d4f8c3e
--- /dev/null
+++ b/spec/build/bsps/mips/jmr3904/abi.yml
@@ -0,0 +1,19 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+actions:
+- get-string: null
+- split: null
+- env-append: null
+build-type: option
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+default:
+- -march=r3900
+- -Wa,-xgot
+- -G0
+default-by-variant: []
+description: |
+ ABI flags
+enabled-by: true
+links: []
+name: ABI_FLAGS
+type: build
diff --git a/spec/build/bsps/mips/jmr3904/bspjmr3904.yml b/spec/build/bsps/mips/jmr3904/bspjmr3904.yml
new file mode 100644
index 0000000000..ccb4eebe44
--- /dev/null
+++ b/spec/build/bsps/mips/jmr3904/bspjmr3904.yml
@@ -0,0 +1,57 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+arch: mips
+bsp: jmr3904
+build-type: bsp
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+enabled-by: true
+family: jmr3904
+includes: []
+install:
+- destination: ${BSP_INCLUDEDIR}
+ source:
+ - bsps/mips/jmr3904/include/bsp.h
+ - bsps/mips/jmr3904/include/tm27.h
+- destination: ${BSP_INCLUDEDIR}/bsp
+ source:
+ - bsps/mips/jmr3904/include/bsp/irq.h
+- destination: ${BSP_LIBDIR}
+ source:
+ - bsps/mips/jmr3904/start/linkcmds
+links:
+- role: build-dependency
+ uid: ../grp
+- role: build-dependency
+ uid: abi
+- role: build-dependency
+ uid: start
+- role: build-dependency
+ uid: tstjmr3904
+- role: build-dependency
+ uid: ../../obj
+- role: build-dependency
+ uid: ../../objirq
+- role: build-dependency
+ uid: ../../opto2
+- role: build-dependency
+ uid: ../../bspopts
+source:
+- bsps/mips/jmr3904/btimer/btimer.c
+- bsps/mips/jmr3904/clock/clockdrv.c
+- bsps/mips/jmr3904/console/console-io.c
+- bsps/mips/jmr3904/irq/vectorisrs.c
+- bsps/mips/jmr3904/start/bspstart.c
+- bsps/mips/shared/irq/installisrentries.c
+- bsps/mips/shared/irq/interruptmask.c
+- bsps/mips/shared/irq/irq.c
+- bsps/mips/shared/irq/isr_entries.S
+- bsps/mips/shared/irq/vectorexceptions.c
+- bsps/shared/cache/nocache.c
+- bsps/shared/dev/getentropy/getentropy-cpucounter.c
+- bsps/shared/dev/serial/console-polled.c
+- bsps/shared/start/bspfatal-default.c
+- bsps/shared/start/bspgetworkarea-default.c
+- bsps/shared/start/sbrk.c
+type: build
diff --git a/spec/build/bsps/mips/jmr3904/start.yml b/spec/build/bsps/mips/jmr3904/start.yml
new file mode 100644
index 0000000000..c0868a88e9
--- /dev/null
+++ b/spec/build/bsps/mips/jmr3904/start.yml
@@ -0,0 +1,14 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+asflags: []
+build-type: start-file
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+enabled-by: true
+includes: []
+install-path: ${BSP_LIBDIR}
+links: []
+source:
+- bsps/mips/jmr3904/start/start.S
+target: start.o
+type: build
diff --git a/spec/build/bsps/mips/jmr3904/tstjmr3904.yml b/spec/build/bsps/mips/jmr3904/tstjmr3904.yml
new file mode 100644
index 0000000000..9ae030d919
--- /dev/null
+++ b/spec/build/bsps/mips/jmr3904/tstjmr3904.yml
@@ -0,0 +1,15 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+actions:
+- set-test-state:
+ spfatal26: exclude
+build-type: option
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+default: null
+default-by-variant: []
+description: ''
+enabled-by: true
+links:
+- role: build-dependency
+ uid: ../../tstnointrcrit
+type: build
diff --git a/spec/build/bsps/mips/malta/abi.yml b/spec/build/bsps/mips/malta/abi.yml
new file mode 100644
index 0000000000..99038088b2
--- /dev/null
+++ b/spec/build/bsps/mips/malta/abi.yml
@@ -0,0 +1,19 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+actions:
+- get-string: null
+- split: null
+- env-append: null
+build-type: option
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+default:
+- -march=24kf1_1
+- -Wa,-xgot
+- -G0
+default-by-variant: []
+description: |
+ ABI flags
+enabled-by: true
+links: []
+name: ABI_FLAGS
+type: build
diff --git a/spec/build/bsps/mips/malta/bspmalta.yml b/spec/build/bsps/mips/malta/bspmalta.yml
new file mode 100644
index 0000000000..74462018dc
--- /dev/null
+++ b/spec/build/bsps/mips/malta/bspmalta.yml
@@ -0,0 +1,67 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+arch: mips
+bsp: malta
+build-type: bsp
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+enabled-by: true
+family: malta
+includes: []
+install:
+- destination: ${BSP_INCLUDEDIR}
+ source:
+ - bsps/mips/malta/include/bsp.h
+ - bsps/mips/malta/include/tm27.h
+- destination: ${BSP_INCLUDEDIR}/bsp
+ source:
+ - bsps/mips/malta/include/bsp/irq.h
+ - bsps/mips/malta/include/bsp/pci.h
+- destination: ${BSP_LIBDIR}
+ source:
+ - bsps/mips/malta/start/linkcmds
+links:
+- role: build-dependency
+ uid: ../grp
+- role: build-dependency
+ uid: abi
+- role: build-dependency
+ uid: start
+- role: build-dependency
+ uid: ../../obj
+- role: build-dependency
+ uid: ../../objirq
+- role: build-dependency
+ uid: ../../opto0
+- role: build-dependency
+ uid: ../../bspopts
+source:
+- bsps/mips/malta/console/conscfg.c
+- bsps/mips/malta/console/printk_support.c
+- bsps/mips/malta/irq/interruptmask.c
+- bsps/mips/malta/irq/vectorisrs.c
+- bsps/mips/malta/pci/pci.c
+- bsps/mips/malta/start/bspreset.c
+- bsps/mips/malta/start/bspstart.c
+- bsps/mips/malta/start/inittlb.c
+- bsps/mips/malta/start/simple_access.c
+- bsps/mips/shared/clock/clockdrv.c
+- bsps/mips/shared/clock/mips_timer.S
+- bsps/mips/shared/irq/i8259.c
+- bsps/mips/shared/irq/installisrentries.c
+- bsps/mips/shared/irq/irq.c
+- bsps/mips/shared/irq/isr_entries.S
+- bsps/mips/shared/irq/vectorexceptions.c
+- bsps/mips/shared/start/idttlb.S
+- bsps/shared/cache/nocache.c
+- bsps/shared/dev/btimer/btimer-stub.c
+- bsps/shared/dev/getentropy/getentropy-cpucounter.c
+- bsps/shared/dev/pci/pci_find_device.c
+- bsps/shared/dev/serial/legacy-console-control.c
+- bsps/shared/dev/serial/legacy-console-select.c
+- bsps/shared/dev/serial/legacy-console.c
+- bsps/shared/start/bspfatal-default.c
+- bsps/shared/start/bspgetworkarea-default.c
+- bsps/shared/start/sbrk.c
+type: build
diff --git a/spec/build/bsps/mips/malta/start.yml b/spec/build/bsps/mips/malta/start.yml
new file mode 100644
index 0000000000..02487ecb2e
--- /dev/null
+++ b/spec/build/bsps/mips/malta/start.yml
@@ -0,0 +1,14 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+asflags: []
+build-type: start-file
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+enabled-by: true
+includes: []
+install-path: ${BSP_LIBDIR}
+links: []
+source:
+- bsps/mips/malta/start/start.S
+target: start.o
+type: build
diff --git a/spec/build/bsps/mips/rbtx4925/abi.yml b/spec/build/bsps/mips/rbtx4925/abi.yml
new file mode 100644
index 0000000000..79408e4eb3
--- /dev/null
+++ b/spec/build/bsps/mips/rbtx4925/abi.yml
@@ -0,0 +1,19 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+actions:
+- get-string: null
+- split: null
+- env-append: null
+build-type: option
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+default:
+- -mips3
+- -G0
+- -EL
+default-by-variant: []
+description: |
+ ABI flags
+enabled-by: true
+links: []
+name: ABI_FLAGS
+type: build
diff --git a/spec/build/bsps/mips/rbtx4925/bsprbtx4925.yml b/spec/build/bsps/mips/rbtx4925/bsprbtx4925.yml
new file mode 100644
index 0000000000..17af736a91
--- /dev/null
+++ b/spec/build/bsps/mips/rbtx4925/bsprbtx4925.yml
@@ -0,0 +1,66 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+arch: mips
+bsp: rbtx4925
+build-type: bsp
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+enabled-by: true
+family: rbtx4925
+includes: []
+install:
+- destination: ${BSP_INCLUDEDIR}
+ source:
+ - bsps/mips/rbtx4925/include/bsp.h
+ - bsps/mips/rbtx4925/include/tm27.h
+- destination: ${BSP_INCLUDEDIR}/bsp
+ source:
+ - bsps/mips/rbtx4925/include/bsp/irq.h
+- destination: ${BSP_LIBDIR}
+ source:
+ - bsps/mips/rbtx4925/start/linkcmds
+links:
+- role: build-dependency
+ uid: ../grp
+- role: build-dependency
+ uid: abi
+- role: build-dependency
+ uid: opttx49xx
+- role: build-dependency
+ uid: start
+- role: build-dependency
+ uid: ../../obj
+- role: build-dependency
+ uid: ../../objirq
+- role: build-dependency
+ uid: ../../opto2
+- role: build-dependency
+ uid: ../../tstnolibdl
+- role: build-dependency
+ uid: ../../bspopts
+source:
+- bsps/mips/rbtx4925/clock/clockdrv.c
+- bsps/mips/rbtx4925/console/console-io.c
+- bsps/mips/rbtx4925/irq/vectorisrs.c
+- bsps/mips/rbtx4925/start/bspstart.c
+- bsps/mips/rbtx4925/start/inittlb.c
+- bsps/mips/shared/irq/exception.S
+- bsps/mips/shared/irq/installisrentries.c
+- bsps/mips/shared/irq/interruptmask_TX49.c
+- bsps/mips/shared/irq/irq.c
+- bsps/mips/shared/irq/isr_entries.S
+- bsps/mips/shared/irq/vectorexceptions.c
+- bsps/mips/shared/liblnk/lnklib.S
+- bsps/mips/shared/liblnk/pmon.S
+- bsps/mips/shared/start/idtmem.S
+- bsps/mips/shared/start/idttlb.S
+- bsps/mips/shared/timer/gettime.S
+- bsps/mips/shared/timer/timer.c
+- bsps/shared/cache/nocache.c
+- bsps/shared/dev/getentropy/getentropy-cpucounter.c
+- bsps/shared/start/bspfatal-default.c
+- bsps/shared/start/bspgetworkarea-default.c
+- bsps/shared/start/bspreset-empty.c
+- bsps/shared/start/sbrk.c
+type: build
diff --git a/spec/build/bsps/mips/rbtx4925/opttx49xx.yml b/spec/build/bsps/mips/rbtx4925/opttx49xx.yml
new file mode 100644
index 0000000000..a9e7f96fe2
--- /dev/null
+++ b/spec/build/bsps/mips/rbtx4925/opttx49xx.yml
@@ -0,0 +1,15 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+actions:
+- get-boolean: null
+- define-condition: null
+build-type: option
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+default: true
+default-by-variant: []
+description: |
+ This BSP has a RM52xx compatible CPU.
+enabled-by: true
+links: []
+name: BSP_HAS_TX49xx
+type: build
diff --git a/spec/build/bsps/mips/rbtx4925/start.yml b/spec/build/bsps/mips/rbtx4925/start.yml
new file mode 100644
index 0000000000..13980cbbba
--- /dev/null
+++ b/spec/build/bsps/mips/rbtx4925/start.yml
@@ -0,0 +1,14 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+asflags: []
+build-type: start-file
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+enabled-by: true
+includes: []
+install-path: ${BSP_LIBDIR}
+links: []
+source:
+- bsps/mips/rbtx4925/start/start.S
+target: start.o
+type: build
diff --git a/spec/build/bsps/mips/rbtx4938/abi.yml b/spec/build/bsps/mips/rbtx4938/abi.yml
new file mode 100644
index 0000000000..79408e4eb3
--- /dev/null
+++ b/spec/build/bsps/mips/rbtx4938/abi.yml
@@ -0,0 +1,19 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+actions:
+- get-string: null
+- split: null
+- env-append: null
+build-type: option
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+default:
+- -mips3
+- -G0
+- -EL
+default-by-variant: []
+description: |
+ ABI flags
+enabled-by: true
+links: []
+name: ABI_FLAGS
+type: build
diff --git a/spec/build/bsps/mips/rbtx4938/bsprbtx4938.yml b/spec/build/bsps/mips/rbtx4938/bsprbtx4938.yml
new file mode 100644
index 0000000000..4215d0f9cc
--- /dev/null
+++ b/spec/build/bsps/mips/rbtx4938/bsprbtx4938.yml
@@ -0,0 +1,64 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+arch: mips
+bsp: rbtx4938
+build-type: bsp
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+enabled-by: true
+family: rbtx4938
+includes: []
+install:
+- destination: ${BSP_INCLUDEDIR}
+ source:
+ - bsps/mips/rbtx4938/include/bsp.h
+ - bsps/mips/rbtx4938/include/tm27.h
+- destination: ${BSP_INCLUDEDIR}/bsp
+ source:
+ - bsps/mips/rbtx4938/include/bsp/irq.h
+- destination: ${BSP_LIBDIR}
+ source:
+ - bsps/mips/rbtx4938/start/linkcmds
+links:
+- role: build-dependency
+ uid: ../grp
+- role: build-dependency
+ uid: abi
+- role: build-dependency
+ uid: start
+- role: build-dependency
+ uid: ../../obj
+- role: build-dependency
+ uid: ../../objirq
+- role: build-dependency
+ uid: ../../opto2
+- role: build-dependency
+ uid: ../../tstnolibdl
+- role: build-dependency
+ uid: ../../bspopts
+source:
+- bsps/mips/rbtx4938/clock/clockdrv.c
+- bsps/mips/rbtx4938/console/console-io.c
+- bsps/mips/rbtx4938/irq/vectorisrs.c
+- bsps/mips/rbtx4938/start/bspstart.c
+- bsps/mips/rbtx4938/start/inittlb.c
+- bsps/mips/shared/irq/exception.S
+- bsps/mips/shared/irq/installisrentries.c
+- bsps/mips/shared/irq/interruptmask_TX49.c
+- bsps/mips/shared/irq/irq.c
+- bsps/mips/shared/irq/isr_entries.S
+- bsps/mips/shared/irq/vectorexceptions.c
+- bsps/mips/shared/liblnk/lnklib.S
+- bsps/mips/shared/liblnk/pmon.S
+- bsps/mips/shared/start/idtmem.S
+- bsps/mips/shared/start/idttlb.S
+- bsps/mips/shared/timer/gettime.S
+- bsps/mips/shared/timer/timer.c
+- bsps/shared/cache/nocache.c
+- bsps/shared/dev/getentropy/getentropy-cpucounter.c
+- bsps/shared/start/bspfatal-default.c
+- bsps/shared/start/bspgetworkarea-default.c
+- bsps/shared/start/bspreset-empty.c
+- bsps/shared/start/sbrk.c
+type: build
diff --git a/spec/build/bsps/mips/rbtx4938/start.yml b/spec/build/bsps/mips/rbtx4938/start.yml
new file mode 100644
index 0000000000..1f74c12595
--- /dev/null
+++ b/spec/build/bsps/mips/rbtx4938/start.yml
@@ -0,0 +1,14 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+asflags: []
+build-type: start-file
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+enabled-by: true
+includes: []
+install-path: ${BSP_LIBDIR}
+links: []
+source:
+- bsps/mips/rbtx4938/start/start.S
+target: start.o
+type: build
diff --git a/spec/build/bsps/moxie/moxiesim/abi.yml b/spec/build/bsps/moxie/moxiesim/abi.yml
new file mode 100644
index 0000000000..530e7a5d14
--- /dev/null
+++ b/spec/build/bsps/moxie/moxiesim/abi.yml
@@ -0,0 +1,16 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+actions:
+- get-string: null
+- split: null
+- env-append: null
+build-type: option
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+default: []
+default-by-variant: []
+description: |
+ ABI flags
+enabled-by: true
+links: []
+name: ABI_FLAGS
+type: build
diff --git a/spec/build/bsps/moxie/moxiesim/bspmoxiesim.yml b/spec/build/bsps/moxie/moxiesim/bspmoxiesim.yml
new file mode 100644
index 0000000000..bf0388291f
--- /dev/null
+++ b/spec/build/bsps/moxie/moxiesim/bspmoxiesim.yml
@@ -0,0 +1,53 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+arch: moxie
+bsp: moxiesim
+build-type: bsp
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+enabled-by: true
+family: moxiesim
+includes: []
+install:
+- destination: ${BSP_INCLUDEDIR}
+ source:
+ - bsps/moxie/moxiesim/include/bsp.h
+ - bsps/moxie/moxiesim/include/tm27.h
+- destination: ${BSP_INCLUDEDIR}/bsp
+ source:
+ - bsps/moxie/moxiesim/include/bsp/irq.h
+- destination: ${BSP_LIBDIR}
+ source:
+ - bsps/moxie/moxiesim/start/linkcmds
+links:
+- role: build-dependency
+ uid: abi
+- role: build-dependency
+ uid: start
+- role: build-dependency
+ uid: ../../obj
+- role: build-dependency
+ uid: ../../objirqdflt
+- role: build-dependency
+ uid: ../../optos
+- role: build-dependency
+ uid: ../../tstnolibdl
+- role: build-dependency
+ uid: ../../tstreqtick
+- role: build-dependency
+ uid: ../../bspopts
+source:
+- bsps/moxie/moxiesim/console/console-io.c
+- bsps/moxie/moxiesim/console/syscalls.S
+- bsps/shared/cache/nocache.c
+- bsps/shared/dev/btimer/btimer-stub.c
+- bsps/shared/dev/clock/clock-simidle.c
+- bsps/shared/dev/getentropy/getentropy-cpucounter.c
+- bsps/shared/dev/serial/console-polled.c
+- bsps/shared/start/bspfatal-default.c
+- bsps/shared/start/bspgetworkarea-default.c
+- bsps/shared/start/bspreset-empty.c
+- bsps/shared/start/bspstart-empty.c
+- bsps/shared/start/sbrk.c
+type: build
diff --git a/spec/build/bsps/moxie/moxiesim/start.yml b/spec/build/bsps/moxie/moxiesim/start.yml
new file mode 100644
index 0000000000..d9d7418c34
--- /dev/null
+++ b/spec/build/bsps/moxie/moxiesim/start.yml
@@ -0,0 +1,14 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+asflags: []
+build-type: start-file
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+enabled-by: true
+includes: []
+install-path: ${BSP_LIBDIR}
+links: []
+source:
+- bsps/moxie/moxiesim/start/start.S
+target: start.o
+type: build
diff --git a/spec/build/bsps/nios2/nios2_iss/abi.yml b/spec/build/bsps/nios2/nios2_iss/abi.yml
new file mode 100644
index 0000000000..231cb54350
--- /dev/null
+++ b/spec/build/bsps/nios2/nios2_iss/abi.yml
@@ -0,0 +1,18 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+actions:
+- get-string: null
+- split: null
+- env-append: null
+build-type: option
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+default:
+- -mno-hw-mul
+- -mno-hw-div
+default-by-variant: []
+description: |
+ ABI flags
+enabled-by: true
+links: []
+name: ABI_FLAGS
+type: build
diff --git a/spec/build/bsps/nios2/nios2_iss/bspnios2iss.yml b/spec/build/bsps/nios2/nios2_iss/bspnios2iss.yml
new file mode 100644
index 0000000000..c62f0d0b65
--- /dev/null
+++ b/spec/build/bsps/nios2/nios2_iss/bspnios2iss.yml
@@ -0,0 +1,49 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+arch: nios2
+bsp: nios2_iss
+build-type: bsp
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+enabled-by: true
+family: nios2_iss
+includes: []
+install:
+- destination: ${BSP_INCLUDEDIR}
+ source:
+ - bsps/nios2/nios2_iss/include/bsp.h
+ - bsps/nios2/nios2_iss/include/tm27.h
+- destination: ${BSP_INCLUDEDIR}/bsp
+ source:
+ - bsps/nios2/nios2_iss/include/bsp/irq.h
+- destination: ${BSP_LIBDIR}
+ source:
+ - bsps/nios2/nios2_iss/start/linkcmds
+links:
+- role: build-dependency
+ uid: abi
+- role: build-dependency
+ uid: start
+- role: build-dependency
+ uid: ../../obj
+- role: build-dependency
+ uid: ../../objirqdflt
+- role: build-dependency
+ uid: ../../opto0
+- role: build-dependency
+ uid: ../../bspopts
+source:
+- bsps/nios2/nios2_iss/btimer/btimer.c
+- bsps/nios2/nios2_iss/clock/clock.c
+- bsps/nios2/nios2_iss/console/console.c
+- bsps/nios2/nios2_iss/start/bspstart.c
+- bsps/nios2/nios2_iss/start/setvec.c
+- bsps/shared/cache/nocache.c
+- bsps/shared/dev/getentropy/getentropy-cpucounter.c
+- bsps/shared/dev/serial/console-polled.c
+- bsps/shared/start/bspfatal-default.c
+- bsps/shared/start/bspgetworkarea-default.c
+- bsps/shared/start/bspreset-loop.c
+- bsps/shared/start/sbrk.c
+type: build
diff --git a/spec/build/bsps/nios2/nios2_iss/start.yml b/spec/build/bsps/nios2/nios2_iss/start.yml
new file mode 100644
index 0000000000..537aa67a88
--- /dev/null
+++ b/spec/build/bsps/nios2/nios2_iss/start.yml
@@ -0,0 +1,14 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+asflags: []
+build-type: start-file
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+enabled-by: true
+includes: []
+install-path: ${BSP_LIBDIR}
+links: []
+source:
+- bsps/nios2/nios2_iss/start/start.S
+target: start.o
+type: build
diff --git a/spec/build/bsps/obj.yml b/spec/build/bsps/obj.yml
new file mode 100644
index 0000000000..8809238057
--- /dev/null
+++ b/spec/build/bsps/obj.yml
@@ -0,0 +1,107 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: objects
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by: true
+includes: []
+install:
+- destination: ${BSP_INCLUDEDIR}/bsp
+ source:
+ - bsps/include/bsp/bootcard.h
+ - bsps/include/bsp/console-polled.h
+ - bsps/include/bsp/console-termios.h
+ - bsps/include/bsp/default-initial-extension.h
+ - bsps/include/bsp/fatal.h
+ - bsps/include/bsp/fdt.h
+ - bsps/include/bsp/gpio.h
+ - bsps/include/bsp/irq-default.h
+ - bsps/include/bsp/irq-generic.h
+ - bsps/include/bsp/irq-info.h
+ - bsps/include/bsp/stackalloc.h
+ - bsps/include/bsp/u-boot.h
+ - bsps/include/bsp/uart-output-char.h
+ - bsps/include/bsp/utility.h
+- destination: ${BSP_INCLUDEDIR}/libchip
+ source:
+ - bsps/include/libchip/am29lv160.h
+ - bsps/include/libchip/ata.h
+ - bsps/include/libchip/ata_internal.h
+ - bsps/include/libchip/disp_hcms29xx.h
+ - bsps/include/libchip/ds1375-rtc.h
+ - bsps/include/libchip/i2c-2b-eeprom.h
+ - bsps/include/libchip/i2c-ds1621.h
+ - bsps/include/libchip/i2c-sc620.h
+ - bsps/include/libchip/icm7170.h
+ - bsps/include/libchip/ide_ctrl.h
+ - bsps/include/libchip/ide_ctrl_cfg.h
+ - bsps/include/libchip/ide_ctrl_io.h
+ - bsps/include/libchip/m48t08.h
+ - bsps/include/libchip/mc146818a.h
+ - bsps/include/libchip/mc68681.h
+ - bsps/include/libchip/ns16550.h
+ - bsps/include/libchip/ns16550_p.h
+ - bsps/include/libchip/rtc.h
+ - bsps/include/libchip/serial.h
+ - bsps/include/libchip/sersupp.h
+ - bsps/include/libchip/spi-flash-m25p40.h
+ - bsps/include/libchip/spi-fram-fm25l256.h
+ - bsps/include/libchip/spi-memdrv.h
+ - bsps/include/libchip/spi-sd-card.h
+ - bsps/include/libchip/wd80x3.h
+ - bsps/include/libchip/z85c30.h
+- destination: ${BSP_INCLUDEDIR}/rtems/zilog
+ source:
+ - bsps/include/rtems/zilog/z8036.h
+ - bsps/include/rtems/zilog/z8530.h
+links:
+- role: build-dependency
+ uid: objmpci
+- role: build-dependency
+ uid: objnet
+- role: build-dependency
+ uid: objnetnosmp
+source:
+- bsps/shared/dev/display/disp_hcms29xx.c
+- bsps/shared/dev/display/font_hcms29xx.c
+- bsps/shared/dev/flash/am29lv160.c
+- bsps/shared/dev/i2c/i2c-2b-eeprom.c
+- bsps/shared/dev/i2c/i2c-ds1621.c
+- bsps/shared/dev/i2c/i2c-sc620.c
+- bsps/shared/dev/i2c/spi-flash-m25p40.c
+- bsps/shared/dev/i2c/spi-fram-fm25l256.c
+- bsps/shared/dev/i2c/spi-memdrv.c
+- bsps/shared/dev/i2c/spi-sd-card.c
+- bsps/shared/dev/ide/ata.c
+- bsps/shared/dev/ide/ata_util.c
+- bsps/shared/dev/ide/ide_controller.c
+- bsps/shared/dev/rtc/ds1375.c
+- bsps/shared/dev/rtc/icm7170.c
+- bsps/shared/dev/rtc/icm7170_reg2.c
+- bsps/shared/dev/rtc/icm7170_reg4.c
+- bsps/shared/dev/rtc/icm7170_reg8.c
+- bsps/shared/dev/rtc/icm7170_reg.c
+- bsps/shared/dev/rtc/m48t08.c
+- bsps/shared/dev/rtc/m48t08_reg2.c
+- bsps/shared/dev/rtc/m48t08_reg4.c
+- bsps/shared/dev/rtc/m48t08_reg8.c
+- bsps/shared/dev/rtc/m48t08_reg.c
+- bsps/shared/dev/rtc/mc146818a.c
+- bsps/shared/dev/rtc/mc146818a_ioreg.c
+- bsps/shared/dev/rtc/rtcprobe.c
+- bsps/shared/dev/serial/mc68681_baud.c
+- bsps/shared/dev/serial/mc68681.c
+- bsps/shared/dev/serial/mc68681_reg2.c
+- bsps/shared/dev/serial/mc68681_reg4.c
+- bsps/shared/dev/serial/mc68681_reg8.c
+- bsps/shared/dev/serial/mc68681_reg.c
+- bsps/shared/dev/serial/ns16550.c
+- bsps/shared/dev/serial/ns16550-context.c
+- bsps/shared/dev/serial/serprobe.c
+- bsps/shared/dev/serial/z85c30.c
+- bsps/shared/dev/serial/z85c30_reg.c
+- bsps/shared/start/bootcard.c
+- bsps/shared/rtems-version.c
+type: build
diff --git a/spec/build/bsps/objgrlib.yml b/spec/build/bsps/objgrlib.yml
new file mode 100644
index 0000000000..67a252f17a
--- /dev/null
+++ b/spec/build/bsps/objgrlib.yml
@@ -0,0 +1,142 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: objects
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by: true
+includes: []
+install:
+- destination: ${BSP_INCLUDEDIR}/grlib
+ source:
+ - bsps/include/grlib/ahbstat.h
+ - bsps/include/grlib/ambapp.h
+ - bsps/include/grlib/ambapp_bus.h
+ - bsps/include/grlib/ambapp_bus_grlib.h
+ - bsps/include/grlib/ambapp_ids.h
+ - bsps/include/grlib/apbuart.h
+ - bsps/include/grlib/apbuart_cons.h
+ - bsps/include/grlib/apbuart_termios.h
+ - bsps/include/grlib/b1553brm.h
+ - bsps/include/grlib/b1553rt.h
+ - bsps/include/grlib/bspcommon.h
+ - bsps/include/grlib/canmux.h
+ - bsps/include/grlib/cons.h
+ - bsps/include/grlib/debug_defs.h
+ - bsps/include/grlib/genirq.h
+ - bsps/include/grlib/gpiolib.h
+ - bsps/include/grlib/gptimer.h
+ - bsps/include/grlib/gr1553b.h
+ - bsps/include/grlib/gr1553bc.h
+ - bsps/include/grlib/gr1553bc_list.h
+ - bsps/include/grlib/gr1553bm.h
+ - bsps/include/grlib/gr1553rt.h
+ - bsps/include/grlib/gr_701.h
+ - bsps/include/grlib/gr_cpci_gr740.h
+ - bsps/include/grlib/gr_rasta_adcdac.h
+ - bsps/include/grlib/gr_rasta_io.h
+ - bsps/include/grlib/gr_rasta_spw_router.h
+ - bsps/include/grlib/gr_rasta_tmtc.h
+ - bsps/include/grlib/gr_tmtc_1553.h
+ - bsps/include/grlib/gradcdac.h
+ - bsps/include/grlib/grascs.h
+ - bsps/include/grlib/grcan.h
+ - bsps/include/grlib/grctm.h
+ - bsps/include/grlib/greth.h
+ - bsps/include/grlib/grgpio.h
+ - bsps/include/grlib/griommu.h
+ - bsps/include/grlib/grlib.h
+ - bsps/include/grlib/grlib_impl.h
+ - bsps/include/grlib/grpci.h
+ - bsps/include/grlib/grpci2.h
+ - bsps/include/grlib/grpci2dma.h
+ - bsps/include/grlib/grpwm.h
+ - bsps/include/grlib/grslink.h
+ - bsps/include/grlib/grspw.h
+ - bsps/include/grlib/grspw_pkt.h
+ - bsps/include/grlib/grspw_router.h
+ - bsps/include/grlib/grtc.h
+ - bsps/include/grlib/grtm.h
+ - bsps/include/grlib/i2cmst.h
+ - bsps/include/grlib/l2c.h
+ - bsps/include/grlib/l4stat.h
+ - bsps/include/grlib/mctrl.h
+ - bsps/include/grlib/memscrub.h
+ - bsps/include/grlib/network_interface_add.h
+ - bsps/include/grlib/occan.h
+ - bsps/include/grlib/pcif.h
+ - bsps/include/grlib/satcan.h
+ - bsps/include/grlib/spictrl.h
+ - bsps/include/grlib/spwcuc.h
+ - bsps/include/grlib/spwtdp.h
+ - bsps/include/grlib/tlib.h
+links:
+- role: build-dependency
+ uid: objgrlibnet
+- role: build-dependency
+ uid: objgrlibnosmp
+source:
+- bsps/shared/grlib/1553/b1553brm.c
+- bsps/shared/grlib/1553/b1553rt.c
+- bsps/shared/grlib/1553/gr1553b.c
+- bsps/shared/grlib/1553/gr1553bc.c
+- bsps/shared/grlib/1553/gr1553bm.c
+- bsps/shared/grlib/1553/gr1553rt.c
+- bsps/shared/grlib/amba/ahbstat.c
+- bsps/shared/grlib/amba/ambapp_alloc.c
+- bsps/shared/grlib/amba/ambapp.c
+- bsps/shared/grlib/amba/ambapp_count.c
+- bsps/shared/grlib/amba/ambapp_depth.c
+- bsps/shared/grlib/amba/ambapp_find_by_idx.c
+- bsps/shared/grlib/amba/ambapp_freq.c
+- bsps/shared/grlib/amba/ambapp_names.c
+- bsps/shared/grlib/amba/ambapp_old.c
+- bsps/shared/grlib/amba/ambapp_parent.c
+- bsps/shared/grlib/amba/ambapp_show.c
+- bsps/shared/grlib/analog/gradcdac.c
+- bsps/shared/grlib/ascs/grascs.c
+- bsps/shared/grlib/btimer/gptimer.c
+- bsps/shared/grlib/btimer/tlib.c
+- bsps/shared/grlib/btimer/tlib_ckinit.c
+- bsps/shared/grlib/can/canmux.c
+- bsps/shared/grlib/can/grcan.c
+- bsps/shared/grlib/can/occan.c
+- bsps/shared/grlib/can/satcan.c
+- bsps/shared/grlib/drvmgr/ambapp_bus.c
+- bsps/shared/grlib/drvmgr/ambapp_bus_grlib.c
+- bsps/shared/grlib/drvmgr/get_resarray_count.c
+- bsps/shared/grlib/gpio/gpiolib.c
+- bsps/shared/grlib/gpio/grgpio.c
+- bsps/shared/grlib/i2c/i2cmst.c
+- bsps/shared/grlib/iommu/griommu.c
+- bsps/shared/grlib/irq/genirq.c
+- bsps/shared/grlib/l2c/l2c.c
+- bsps/shared/grlib/mem/mctrl.c
+- bsps/shared/grlib/pci/gr_701.c
+- bsps/shared/grlib/pci/grpci2.c
+- bsps/shared/grlib/pci/grpci2dma.c
+- bsps/shared/grlib/pci/grpci.c
+- bsps/shared/grlib/pci/gr_rasta_adcdac.c
+- bsps/shared/grlib/pci/gr_rasta_io.c
+- bsps/shared/grlib/pci/gr_rasta_spw_router.c
+- bsps/shared/grlib/pci/gr_rasta_tmtc.c
+- bsps/shared/grlib/pci/gr_tmtc_1553.c
+- bsps/shared/grlib/pci/pcif.c
+- bsps/shared/grlib/pwm/grpwm.c
+- bsps/shared/grlib/scrub/memscrub.c
+- bsps/shared/grlib/slink/grslink.c
+- bsps/shared/grlib/spi/spictrl.c
+- bsps/shared/grlib/spw/grspw_pkt.c
+- bsps/shared/grlib/spw/grspw_router.c
+- bsps/shared/grlib/spw/spwtdp.c
+- bsps/shared/grlib/stat/l4stat.c
+- bsps/shared/grlib/time/grctm.c
+- bsps/shared/grlib/time/spwcuc.c
+- bsps/shared/grlib/tmtc/grtc.c
+- bsps/shared/grlib/tmtc/grtm.c
+- bsps/shared/grlib/uart/apbuart_cons.c
+- bsps/shared/grlib/uart/apbuart_polled.c
+- bsps/shared/grlib/uart/apbuart_termios.c
+- bsps/shared/grlib/uart/cons.c
+type: build
diff --git a/spec/build/bsps/objgrlibnet.yml b/spec/build/bsps/objgrlibnet.yml
new file mode 100644
index 0000000000..a8c109257c
--- /dev/null
+++ b/spec/build/bsps/objgrlibnet.yml
@@ -0,0 +1,17 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: objects
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by:
+- RTEMS_NETWORKING
+includes:
+- cpukit/libnetworking
+install: []
+links: []
+source:
+- bsps/shared/grlib/net/greth.c
+- bsps/shared/grlib/net/network_interface_add.c
+type: build
diff --git a/spec/build/bsps/objgrlibnosmp.yml b/spec/build/bsps/objgrlibnosmp.yml
new file mode 100644
index 0000000000..ad1b6262f6
--- /dev/null
+++ b/spec/build/bsps/objgrlibnosmp.yml
@@ -0,0 +1,15 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: objects
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by:
+- not: RTEMS_SMP
+includes: []
+install: []
+links: []
+source:
+- bsps/shared/grlib/spw/grspw.c
+type: build
diff --git a/spec/build/bsps/objirq.yml b/spec/build/bsps/objirq.yml
new file mode 100644
index 0000000000..aa3da23aa7
--- /dev/null
+++ b/spec/build/bsps/objirq.yml
@@ -0,0 +1,19 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: objects
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by: true
+includes: []
+install: []
+links: []
+source:
+- bsps/shared/irq/irq-generic.c
+- bsps/shared/irq/irq-info.c
+- bsps/shared/irq/irq-legacy.c
+- bsps/shared/irq/irq-lock.c
+- bsps/shared/irq/irq-server.c
+- bsps/shared/irq/irq-shell.c
+type: build
diff --git a/spec/build/bsps/objirqdflt.yml b/spec/build/bsps/objirqdflt.yml
new file mode 100644
index 0000000000..56c818d870
--- /dev/null
+++ b/spec/build/bsps/objirqdflt.yml
@@ -0,0 +1,17 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: objects
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by: true
+includes: []
+install: []
+links:
+- role: build-dependency
+ uid: objirq
+source:
+- bsps/shared/irq/irq-default.c
+- bsps/shared/irq/irq-default-handler.c
+type: build
diff --git a/spec/build/bsps/objmpci.yml b/spec/build/bsps/objmpci.yml
new file mode 100644
index 0000000000..e7b0c88057
--- /dev/null
+++ b/spec/build/bsps/objmpci.yml
@@ -0,0 +1,32 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: objects
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by:
+- RTEMS_MULTIPROCESSING
+includes: []
+install:
+- destination: ${BSP_INCLUDEDIR}
+ source:
+ - bsps/include/mpci.h
+ - bsps/include/shm_driver.h
+links: []
+source:
+- bsps/shared/shmdr/shmdr-addlq.c
+- bsps/shared/shmdr/shmdr-cnvpkt.c
+- bsps/shared/shmdr/shmdr-dump.c
+- bsps/shared/shmdr/shmdr-fatal.c
+- bsps/shared/shmdr/shmdr-getlq.c
+- bsps/shared/shmdr/shmdr-getpkt.c
+- bsps/shared/shmdr/shmdr-init.c
+- bsps/shared/shmdr/shmdr-initlq.c
+- bsps/shared/shmdr/shmdr-intr.c
+- bsps/shared/shmdr/shmdr-mpisr.c
+- bsps/shared/shmdr/shmdr-poll.c
+- bsps/shared/shmdr/shmdr-receive.c
+- bsps/shared/shmdr/shmdr-retpkt.c
+- bsps/shared/shmdr/shmdr-send.c
+type: build
diff --git a/spec/build/bsps/objnet.yml b/spec/build/bsps/objnet.yml
new file mode 100644
index 0000000000..fc002fce5a
--- /dev/null
+++ b/spec/build/bsps/objnet.yml
@@ -0,0 +1,34 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: objects
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by:
+- RTEMS_NETWORKING
+includes:
+- cpukit/libnetworking
+install:
+- destination: ${BSP_INCLUDEDIR}/libchip
+ source:
+ - bsps/include/libchip/cs8900.h
+ - bsps/include/libchip/i82586var.h
+ - bsps/include/libchip/if_dcreg.h
+ - bsps/include/libchip/if_fxpvar.h
+ - bsps/include/libchip/open_eth.h
+ - bsps/include/libchip/smc91111.h
+ - bsps/include/libchip/smc91111exp.h
+ - bsps/include/libchip/sonic.h
+links: []
+source:
+- bsps/shared/net/cs8900.c
+- bsps/shared/net/dec21140.c
+- bsps/shared/net/elnk.c
+- bsps/shared/net/i82586.c
+- bsps/shared/net/if_dc.c
+- bsps/shared/net/if_fxp.c
+- bsps/shared/net/open_eth.c
+- bsps/shared/net/smc91111.c
+- bsps/shared/net/sonic.c
+type: build
diff --git a/spec/build/bsps/objnetnosmp.yml b/spec/build/bsps/objnetnosmp.yml
new file mode 100644
index 0000000000..5a01e1b2bc
--- /dev/null
+++ b/spec/build/bsps/objnetnosmp.yml
@@ -0,0 +1,21 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: objects
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by:
+- and:
+ - RTEMS_NETWORKING
+ - not: RTEMS_SMP
+includes:
+- cpukit/libnetworking
+install:
+- destination: ${BSP_INCLUDEDIR}/libchip
+ source:
+ - bsps/include/libchip/greth.h
+links: []
+source:
+- bsps/shared/net/greth2.c
+type: build
diff --git a/spec/build/bsps/optabi.yml b/spec/build/bsps/optabi.yml
new file mode 100644
index 0000000000..d7852a082c
--- /dev/null
+++ b/spec/build/bsps/optabi.yml
@@ -0,0 +1,17 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+actions:
+- get-env: ABI_FLAGS
+- env-append: ASFLAGS
+- env-append: CFLAGS
+- env-append: CXXFLAGS
+- env-append: LDFLAGS
+build-type: option
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+default: null
+default-by-variant: []
+description: ''
+enabled-by: true
+links: []
+name: ABI_FLAGS
+type: build
diff --git a/spec/build/bsps/optasflags.yml b/spec/build/bsps/optasflags.yml
new file mode 100644
index 0000000000..1f10274103
--- /dev/null
+++ b/spec/build/bsps/optasflags.yml
@@ -0,0 +1,16 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+actions:
+- set-value:
+ - -DASM
+ - -g
+- env-append: null
+build-type: option
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+default: null
+default-by-variant: []
+description: ''
+enabled-by: true
+links: []
+name: ASFLAGS
+type: build
diff --git a/spec/build/bsps/optbsp.yml b/spec/build/bsps/optbsp.yml
new file mode 100644
index 0000000000..abe9fe840f
--- /dev/null
+++ b/spec/build/bsps/optbsp.yml
@@ -0,0 +1,15 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+actions:
+- set-value: ${BSP_BASE}
+- substitute: null
+- define-unquoted: null
+build-type: option
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+default: null
+default-by-variant: []
+description: ''
+enabled-by: true
+links: []
+name: RTEMS_BSP
+type: build
diff --git a/spec/build/bsps/optcachedata.yml b/spec/build/bsps/optcachedata.yml
new file mode 100644
index 0000000000..6e48d171ff
--- /dev/null
+++ b/spec/build/bsps/optcachedata.yml
@@ -0,0 +1,19 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+actions:
+- get-boolean: null
+- env-enable: null
+- define-condition: null
+build-type: option
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+default: true
+default-by-variant:
+- value: false
+ variants:
+ - .*qemu.*
+description: |
+ Enable data cache
+enabled-by: true
+links: []
+name: BSP_DATA_CACHE_ENABLED
+type: build
diff --git a/spec/build/bsps/optcacheinst.yml b/spec/build/bsps/optcacheinst.yml
new file mode 100644
index 0000000000..035414bf0c
--- /dev/null
+++ b/spec/build/bsps/optcacheinst.yml
@@ -0,0 +1,19 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+actions:
+- get-boolean: null
+- env-enable: null
+- define-condition: null
+build-type: option
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+default: true
+default-by-variant:
+- value: false
+ variants:
+ - .*qemu.*
+description: |
+ Enable instruction cache
+enabled-by: true
+links: []
+name: BSP_INSTRUCTION_CACHE_ENABLED
+type: build
diff --git a/spec/build/bsps/optclang.yml b/spec/build/bsps/optclang.yml
new file mode 100644
index 0000000000..14e13d32c4
--- /dev/null
+++ b/spec/build/bsps/optclang.yml
@@ -0,0 +1,17 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+actions:
+- set-value: INPUT
+- env-assign: LINKCMDS_START_DIRECTIVE
+- set-value: ALIGN(8)
+- env-assign: LINKCMDS_ALIGN_DIRECTIVE
+build-type: option
+copyrights:
+- Copyright (C) 2020 Hesham Almatary <Hesham.Almatary@cl.cam.ac.uk>
+default: null
+default-by-variant: []
+description: Provides clang support for linker command files.
+enabled-by:
+- clang
+links: []
+name: UNUSED
+type: build
diff --git a/spec/build/bsps/optclkbootcpu.yml b/spec/build/bsps/optclkbootcpu.yml
new file mode 100644
index 0000000000..d65cc2b67f
--- /dev/null
+++ b/spec/build/bsps/optclkbootcpu.yml
@@ -0,0 +1,20 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+actions:
+- get-boolean: null
+- env-assign: null
+- define-condition: null
+build-type: option
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+default: false
+default-by-variant:
+- value: true
+ variants:
+ - .*qemu.*
+description: |
+ Do the clock tick processing on the boot processor on behalf of all other
+ processors.
+enabled-by: true
+links: []
+name: CLOCK_DRIVER_USE_ONLY_BOOT_PROCESSOR
+type: build
diff --git a/spec/build/bsps/optclkfastidle.yml b/spec/build/bsps/optclkfastidle.yml
new file mode 100644
index 0000000000..31fb840a9c
--- /dev/null
+++ b/spec/build/bsps/optclkfastidle.yml
@@ -0,0 +1,20 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+actions:
+- get-boolean: null
+- define-condition: null
+build-type: option
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+default: false
+default-by-variant:
+- value: true
+ variants:
+ - .*qemu.*
+description: |
+ Set a mode where the time runs as fast as possible when a clock ISR occurs
+ while the IDLE thread is executing; this can significantly reduce simulation
+ times
+enabled-by: true
+links: []
+name: CLOCK_DRIVER_USE_FAST_IDLE
+type: build
diff --git a/spec/build/bsps/optconsolebaud.yml b/spec/build/bsps/optconsolebaud.yml
new file mode 100644
index 0000000000..3fe1eeec24
--- /dev/null
+++ b/spec/build/bsps/optconsolebaud.yml
@@ -0,0 +1,23 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+actions:
+- get-integer: null
+- define: null
+build-type: option
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+default: 115200
+default-by-variant:
+- value: 9600
+ variants:
+ - m68k/m5484FireEngine
+ - powerpc/hsc_cm01
+- value: 19200
+ variants:
+ - m68k/COBRA5475
+description: |
+ Default baud for console and other serial devices.
+enabled-by: true
+format: '{}'
+links: []
+name: BSP_CONSOLE_BAUD
+type: build
diff --git a/spec/build/bsps/optconsoleirq.yml b/spec/build/bsps/optconsoleirq.yml
new file mode 100644
index 0000000000..f20a56be37
--- /dev/null
+++ b/spec/build/bsps/optconsoleirq.yml
@@ -0,0 +1,16 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+actions:
+- get-boolean: null
+- define-condition: null
+build-type: option
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+default: true
+default-by-variant: []
+description: |
+ Use the Termios interrupt mode in the console driver.
+enabled-by: true
+format: '{}'
+links: []
+name: BSP_CONSOLE_USE_INTERRUPTS
+type: build
diff --git a/spec/build/bsps/optfatalverb.yml b/spec/build/bsps/optfatalverb.yml
new file mode 100644
index 0000000000..d5db6e6c21
--- /dev/null
+++ b/spec/build/bsps/optfatalverb.yml
@@ -0,0 +1,17 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+actions:
+- get-integer: null
+- define: null
+build-type: option
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+default: 1
+default-by-variant: []
+description: |
+ If defined to a non-zero value, prints the some information in case of a
+ fatal error.
+enabled-by: true
+format: '{}'
+links: []
+name: BSP_VERBOSE_FATAL_EXTENSION
+type: build
diff --git a/spec/build/bsps/optgcc.yml b/spec/build/bsps/optgcc.yml
new file mode 100644
index 0000000000..ee75b8397e
--- /dev/null
+++ b/spec/build/bsps/optgcc.yml
@@ -0,0 +1,17 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+actions:
+- set-value: STARTUP
+- env-assign: LINKCMDS_START_DIRECTIVE
+- set-value: ALIGN_WITH_INPUT
+- env-assign: LINKCMDS_ALIGN_DIRECTIVE
+build-type: option
+copyrights:
+- Copyright (C) 2020 Hesham Almatary <Hesham.Almatary@cl.cam.ac.uk>
+default: null
+default-by-variant: []
+description: Provides GNU ld support for linker command files.
+enabled-by:
+- gcc
+links: []
+name: UNUSED
+type: build
diff --git a/spec/build/bsps/optincludes.yml b/spec/build/bsps/optincludes.yml
new file mode 100644
index 0000000000..0b4a71031c
--- /dev/null
+++ b/spec/build/bsps/optincludes.yml
@@ -0,0 +1,16 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+actions:
+- set-value: |
+ bsps/include bsps/${ARCH}/include bsps/${ARCH}/${BSP_FAMILY}/include
+- substitute: null
+- env-assign: null
+build-type: option
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+default: null
+default-by-variant: []
+description: ''
+enabled-by: true
+links: []
+name: BSP_INCLUDES
+type: build
diff --git a/spec/build/bsps/optldflags.yml b/spec/build/bsps/optldflags.yml
new file mode 100644
index 0000000000..d0e365f407
--- /dev/null
+++ b/spec/build/bsps/optldflags.yml
@@ -0,0 +1,18 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+actions:
+- get-string: null
+- split: null
+- env-append: null
+- env-append: PKGCONFIG_LDFLAGS
+build-type: option
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+default:
+- -Wl,--gc-sections
+default-by-variant: []
+description: |
+ Flags passed to the linker (GNU ld)
+enabled-by: true
+links: []
+name: LDFLAGS
+type: build
diff --git a/spec/build/bsps/optldflagsbsp.yml b/spec/build/bsps/optldflagsbsp.yml
new file mode 100644
index 0000000000..74f15bd559
--- /dev/null
+++ b/spec/build/bsps/optldflagsbsp.yml
@@ -0,0 +1,17 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+actions:
+- set-value:
+ - -L${TOP}/bsps/${ARCH}/shared/start
+ - -L${TOP}/bsps/${ARCH}/${BSP_FAMILY}/start
+- substitute: null
+- env-append: LDFLAGS
+build-type: option
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+default: null
+default-by-variant: []
+description: ''
+enabled-by: true
+links: []
+name: LDFLAGS
+type: build
diff --git a/spec/build/bsps/optmake.yml b/spec/build/bsps/optmake.yml
new file mode 100644
index 0000000000..3ef1b515af
--- /dev/null
+++ b/spec/build/bsps/optmake.yml
@@ -0,0 +1,19 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+actions:
+- script: |
+ def yesno(conf, enable):
+ if enable in conf.env.ENABLE:
+ return "yes"
+ return "no"
+ conf.env["RTEMS_HAS_MULTIPROCESSING"] = yesno(conf, "RTEMS_MULTIPROCESSING")
+ conf.env["RTEMS_HAS_NETWORKING"] = yesno(conf, "RTEMS_NETWORKING")
+ conf.env["RTEMS_HAS_POSIX_API"] = yesno(conf, "RTEMS_POSIX_API")
+build-type: option
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+default: null
+default-by-variant: []
+description: ''
+enabled-by: true
+links: []
+type: build
diff --git a/spec/build/bsps/optmakelegacy.yml b/spec/build/bsps/optmakelegacy.yml
new file mode 100644
index 0000000000..3810761d3d
--- /dev/null
+++ b/spec/build/bsps/optmakelegacy.yml
@@ -0,0 +1,15 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+actions:
+- get-boolean: null
+- env-enable: null
+build-type: option
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+default: true
+default-by-variant: []
+description: |
+ Install the legacy application Makefile framework.
+enabled-by: true
+links: []
+name: INSTALL_LEGACY_MAKEFILES
+type: build
diff --git a/spec/build/bsps/opto0.yml b/spec/build/bsps/opto0.yml
new file mode 100644
index 0000000000..406286980f
--- /dev/null
+++ b/spec/build/bsps/opto0.yml
@@ -0,0 +1,22 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+actions:
+- get-string: null
+- split: null
+- env-assign: null
+- env-append: CFLAGS
+- env-append: CXXFLAGS
+build-type: option
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+default:
+- -O0
+- -g
+- -fdata-sections
+- -ffunction-sections
+default-by-variant: []
+description: |
+ Optimization flags passed to the C and C++ compiler
+enabled-by: true
+links: []
+name: OPTIMIZATION_FLAGS
+type: build
diff --git a/spec/build/bsps/opto1.yml b/spec/build/bsps/opto1.yml
new file mode 100644
index 0000000000..52d285c2ab
--- /dev/null
+++ b/spec/build/bsps/opto1.yml
@@ -0,0 +1,22 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+actions:
+- get-string: null
+- split: null
+- env-assign: null
+- env-append: CFLAGS
+- env-append: CXXFLAGS
+build-type: option
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+default:
+- -O1
+- -g
+- -fdata-sections
+- -ffunction-sections
+default-by-variant: []
+description: |
+ Optimization flags passed to the C and C++ compiler
+enabled-by: true
+links: []
+name: OPTIMIZATION_FLAGS
+type: build
diff --git a/spec/build/bsps/opto2.yml b/spec/build/bsps/opto2.yml
new file mode 100644
index 0000000000..071e5411d5
--- /dev/null
+++ b/spec/build/bsps/opto2.yml
@@ -0,0 +1,22 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+actions:
+- get-string: null
+- split: null
+- env-assign: null
+- env-append: CFLAGS
+- env-append: CXXFLAGS
+build-type: option
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+default:
+- -O2
+- -g
+- -fdata-sections
+- -ffunction-sections
+default-by-variant: []
+description: |
+ Optimization flags passed to the C and C++ compiler
+enabled-by: true
+links: []
+name: OPTIMIZATION_FLAGS
+type: build
diff --git a/spec/build/bsps/optobjcopy.yml b/spec/build/bsps/optobjcopy.yml
new file mode 100644
index 0000000000..c1d19476fa
--- /dev/null
+++ b/spec/build/bsps/optobjcopy.yml
@@ -0,0 +1,16 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+actions:
+- set-value: ${ARCH}-rtems${__RTEMS_MAJOR__}-objcopy
+- substitute: null
+- find-program: null
+- env-assign: OBJCOPY
+build-type: option
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+default: null
+default-by-variant: []
+description: ''
+enabled-by: true
+links: []
+name: OBJCOPY
+type: build
diff --git a/spec/build/bsps/optog.yml b/spec/build/bsps/optog.yml
new file mode 100644
index 0000000000..d08bd7b2b2
--- /dev/null
+++ b/spec/build/bsps/optog.yml
@@ -0,0 +1,22 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+actions:
+- get-string: null
+- split: null
+- env-assign: null
+- env-append: CFLAGS
+- env-append: CXXFLAGS
+build-type: option
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+default:
+- -Og
+- -g
+- -fdata-sections
+- -ffunction-sections
+default-by-variant: []
+description: |
+ Optimization flags passed to the C and C++ compiler
+enabled-by: true
+links: []
+name: OPTIMIZATION_FLAGS
+type: build
diff --git a/spec/build/bsps/optos.yml b/spec/build/bsps/optos.yml
new file mode 100644
index 0000000000..df9e0efd02
--- /dev/null
+++ b/spec/build/bsps/optos.yml
@@ -0,0 +1,22 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+actions:
+- get-string: null
+- split: null
+- env-assign: null
+- env-append: CFLAGS
+- env-append: CXXFLAGS
+build-type: option
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+default:
+- -Os
+- -g
+- -fdata-sections
+- -ffunction-sections
+default-by-variant: []
+description: |
+ Optimization flags passed to the C and C++ compiler
+enabled-by: true
+links: []
+name: OPTIMIZATION_FLAGS
+type: build
diff --git a/spec/build/bsps/optprintexcpt.yml b/spec/build/bsps/optprintexcpt.yml
new file mode 100644
index 0000000000..cf8ffc006c
--- /dev/null
+++ b/spec/build/bsps/optprintexcpt.yml
@@ -0,0 +1,17 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+actions:
+- get-integer: null
+- define: null
+build-type: option
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+default: 1
+default-by-variant: []
+description: |
+ If defined to a non-zero value, prints the exception context when an
+ unexpected exception occurs.
+enabled-by: true
+format: '{}'
+links: []
+name: BSP_PRINT_EXCEPTION_CONTEXT
+type: build
diff --git a/spec/build/bsps/optreset.yml b/spec/build/bsps/optreset.yml
new file mode 100644
index 0000000000..886a059392
--- /dev/null
+++ b/spec/build/bsps/optreset.yml
@@ -0,0 +1,16 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+actions:
+- get-integer: null
+- define: null
+build-type: option
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+default: 1
+default-by-variant: []
+description: |
+ If defined to a non-zero value, reset the board when the application exits.
+enabled-by: true
+format: '{}'
+links: []
+name: BSP_RESET_BOARD_AT_EXIT
+type: build
diff --git a/spec/build/bsps/optresetkey.yml b/spec/build/bsps/optresetkey.yml
new file mode 100644
index 0000000000..bcd7887962
--- /dev/null
+++ b/spec/build/bsps/optresetkey.yml
@@ -0,0 +1,17 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+actions:
+- get-integer: null
+- define: null
+build-type: option
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+default: 0
+default-by-variant: []
+description: |
+ If defined to a non-zero value, print a message and wait until pressed before
+ resetting board when application exits.
+enabled-by: true
+format: '{}'
+links: []
+name: BSP_PRESS_KEY_FOR_RESET
+type: build
diff --git a/spec/build/bsps/or1k/generic_or1k/abi.yml b/spec/build/bsps/or1k/generic_or1k/abi.yml
new file mode 100644
index 0000000000..48034df3b0
--- /dev/null
+++ b/spec/build/bsps/or1k/generic_or1k/abi.yml
@@ -0,0 +1,17 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+actions:
+- get-string: null
+- split: null
+- env-append: null
+build-type: option
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+default:
+- -O2
+default-by-variant: []
+description: |
+ ABI flags
+enabled-by: true
+links: []
+name: ABI_FLAGS
+type: build
diff --git a/spec/build/bsps/or1k/generic_or1k/bspgenericor1k.yml b/spec/build/bsps/or1k/generic_or1k/bspgenericor1k.yml
new file mode 100644
index 0000000000..321913e5ff
--- /dev/null
+++ b/spec/build/bsps/or1k/generic_or1k/bspgenericor1k.yml
@@ -0,0 +1,67 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+arch: or1k
+bsp: generic_or1k
+build-type: bsp
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+enabled-by: true
+family: generic_or1k
+includes: []
+install:
+- destination: ${BSP_INCLUDEDIR}
+ source:
+ - bsps/or1k/generic_or1k/include/bsp.h
+ - bsps/or1k/generic_or1k/include/tm27.h
+- destination: ${BSP_INCLUDEDIR}/bsp
+ source:
+ - bsps/or1k/generic_or1k/include/bsp/generic_or1k.h
+ - bsps/or1k/generic_or1k/include/bsp/irq.h
+ - bsps/or1k/generic_or1k/include/bsp/uart.h
+- destination: ${BSP_LIBDIR}
+ source:
+ - bsps/or1k/generic_or1k/start/linkcmds
+ - bsps/or1k/shared/start/linkcmds.base
+links:
+- role: build-dependency
+ uid: ../../obj
+- role: build-dependency
+ uid: ../../objirq
+- role: build-dependency
+ uid: ../../opto0
+- role: build-dependency
+ uid: abi
+- role: build-dependency
+ uid: optperiphclk
+- role: build-dependency
+ uid: optresetvec
+- role: build-dependency
+ uid: start
+- role: build-dependency
+ uid: ../grp
+- role: build-dependency
+ uid: ../../tstnoiconv
+- role: build-dependency
+ uid: ../../tstnointrcrit
+- role: build-dependency
+ uid: ../../bspopts
+source:
+- bsps/or1k/generic_or1k/btimer/btimer.c
+- bsps/or1k/generic_or1k/clock/clockdrv.c
+- bsps/or1k/generic_or1k/console/console-config.c
+- bsps/or1k/generic_or1k/console/uart.c
+- bsps/or1k/generic_or1k/irq/irq.c
+- bsps/or1k/generic_or1k/start/bspstart.c
+- bsps/or1k/shared/cache/cache.c
+- bsps/shared/dev/getentropy/getentropy-cpucounter.c
+- bsps/shared/dev/serial/legacy-console-control.c
+- bsps/shared/dev/serial/legacy-console-select.c
+- bsps/shared/dev/serial/legacy-console.c
+- bsps/shared/irq/irq-default-handler.c
+- bsps/shared/start/bspfatal-default.c
+- bsps/shared/start/bspgetworkarea-default.c
+- bsps/shared/start/bspreset-empty.c
+- bsps/shared/start/sbrk.c
+- bsps/shared/start/stackalloc.c
+type: build
diff --git a/spec/build/bsps/or1k/generic_or1k/optperiphclk.yml b/spec/build/bsps/or1k/generic_or1k/optperiphclk.yml
new file mode 100644
index 0000000000..ffe76b552b
--- /dev/null
+++ b/spec/build/bsps/or1k/generic_or1k/optperiphclk.yml
@@ -0,0 +1,16 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+actions:
+- get-integer: null
+- define: null
+build-type: option
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+default: 50000000
+default-by-variant: []
+description: |
+ or1k PERIPHCLK clock frequency in Hz
+enabled-by: true
+format: '{}'
+links: []
+name: BSP_GENERIC_OR1K_PERIPHCLK
+type: build
diff --git a/spec/build/bsps/or1k/generic_or1k/optresetvec.yml b/spec/build/bsps/or1k/generic_or1k/optresetvec.yml
new file mode 100644
index 0000000000..efd1ea2b2a
--- /dev/null
+++ b/spec/build/bsps/or1k/generic_or1k/optresetvec.yml
@@ -0,0 +1,15 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+actions:
+- get-boolean: null
+- define-condition: null
+build-type: option
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+default: false
+default-by-variant: []
+description: |
+ reset vector address for BSP start
+enabled-by: true
+links: []
+name: BSP_START_RESET_VECTOR
+type: build
diff --git a/spec/build/bsps/or1k/generic_or1k/start.yml b/spec/build/bsps/or1k/generic_or1k/start.yml
new file mode 100644
index 0000000000..b07312a0c6
--- /dev/null
+++ b/spec/build/bsps/or1k/generic_or1k/start.yml
@@ -0,0 +1,14 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+asflags: []
+build-type: start-file
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+enabled-by: true
+includes: []
+install-path: ${BSP_LIBDIR}
+links: []
+source:
+- bsps/or1k/generic_or1k/start/start.S
+target: start.o
+type: build
diff --git a/spec/build/bsps/or1k/grp.yml b/spec/build/bsps/or1k/grp.yml
new file mode 100644
index 0000000000..154f2cccc6
--- /dev/null
+++ b/spec/build/bsps/or1k/grp.yml
@@ -0,0 +1,15 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: group
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+enabled-by: true
+includes: []
+install:
+- destination: ${BSP_INCLUDEDIR}/bsp
+ source:
+ - bsps/or1k/include/bsp/linker-symbols.h
+ldflags: []
+links: []
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/bsps/pkgconfig.yml b/spec/build/bsps/pkgconfig.yml
new file mode 100644
index 0000000000..a9462fcc95
--- /dev/null
+++ b/spec/build/bsps/pkgconfig.yml
@@ -0,0 +1,34 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: config-file
+content: |
+ #
+ # pkg-config support file for RTEMS BSP ${ARCH}/${BSP_NAME}
+ #
+ # Warning: This stuff is experimental and may be changed at any time.
+ #
+
+ prefix=${PREFIX}
+ exec_prefix=$${prefix}/${ARCH}-rtems${__RTEMS_MAJOR__}
+ libdir=$${exec_prefix}/${BSP_NAME}/lib
+ includedir=$${libdir}/include
+
+ ABI_FLAGS=${ABI_FLAGS}
+ RTEMS_ARCH=${ARCH}
+ RTEMS_BSP=${BSP_NAME}
+ RTEMS_MAJOR=${__RTEMS_MAJOR__}
+ RTEMS_MINOR=${__RTEMS_MINOR__}
+ RTEMS_REVISION=${__RTEMS_REVISION__}
+
+ Name: ${ARCH}-rtems${__RTEMS_MAJOR__}-${BSP_NAME}
+ Version: ${RTEMS_VERSION}
+ Description: RTEMS BSP ${ARCH}/${BSP_NAME}
+ Cflags: $${ABI_FLAGS} -I$${includedir}
+ Ldflags: -B$${libdir} ${PKGCONFIG_LDFLAGS}
+ Libs: -B$${libdir} ${PKGCONFIG_LDFLAGS}
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+enabled-by: true
+install-path: ${PREFIX}/lib/pkgconfig
+links: []
+target: ${ARCH}-rtems${__RTEMS_MAJOR__}-${BSP_NAME}.pc
+type: build
diff --git a/spec/build/bsps/powerpc/beatnik/abi.yml b/spec/build/bsps/powerpc/beatnik/abi.yml
new file mode 100644
index 0000000000..e58eba74f5
--- /dev/null
+++ b/spec/build/bsps/powerpc/beatnik/abi.yml
@@ -0,0 +1,17 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+actions:
+- get-string: null
+- split: null
+- env-append: null
+build-type: option
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+default:
+- -mcpu=7400
+default-by-variant: []
+description: |
+ ABI flags
+enabled-by: true
+links: []
+name: ABI_FLAGS
+type: build
diff --git a/spec/build/bsps/powerpc/beatnik/bspbeatnik.yml b/spec/build/bsps/powerpc/beatnik/bspbeatnik.yml
new file mode 100644
index 0000000000..d83ab54f7f
--- /dev/null
+++ b/spec/build/bsps/powerpc/beatnik/bspbeatnik.yml
@@ -0,0 +1,107 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+arch: powerpc
+bsp: beatnik
+build-type: bsp
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+enabled-by: true
+family: beatnik
+includes: []
+install:
+- destination: ${BSP_INCLUDEDIR}
+ source:
+ - bsps/powerpc/beatnik/include/bsp.h
+ - bsps/powerpc/beatnik/include/tm27.h
+- destination: ${BSP_INCLUDEDIR}/bsp
+ source:
+ - bsps/powerpc/beatnik/include/bsp/VMEConfig.h
+ - bsps/powerpc/beatnik/include/bsp/bsp_bsdnet_attach.h
+ - bsps/powerpc/beatnik/include/bsp/early_enet_link_status.h
+ - bsps/powerpc/beatnik/include/bsp/gt_timer.h
+ - bsps/powerpc/beatnik/include/bsp/gti2c_busdrv.h
+ - bsps/powerpc/beatnik/include/bsp/gti2creg.h
+ - bsps/powerpc/beatnik/include/bsp/gtintrreg.h
+ - bsps/powerpc/beatnik/include/bsp/gtpcireg.h
+ - bsps/powerpc/beatnik/include/bsp/gtreg.h
+ - bsps/powerpc/beatnik/include/bsp/if_em_pub.h
+ - bsps/powerpc/beatnik/include/bsp/if_gfe_pub.h
+ - bsps/powerpc/beatnik/include/bsp/if_mve_pub.h
+ - bsps/powerpc/beatnik/include/bsp/irq.h
+- destination: ${BSP_LIBDIR}
+ source:
+ - bsps/powerpc/beatnik/start/linkcmds
+ - bsps/powerpc/shared/start/linkcmds.share
+links:
+- role: build-dependency
+ uid: ../../obj
+- role: build-dependency
+ uid: ../../objirqdflt
+- role: build-dependency
+ uid: ../../opto2
+- role: build-dependency
+ uid: abi
+- role: build-dependency
+ uid: objnet
+- role: build-dependency
+ uid: optsbrk
+- role: build-dependency
+ uid: ../crti
+- role: build-dependency
+ uid: ../crtn
+- role: build-dependency
+ uid: ../grp
+- role: build-dependency
+ uid: ../obj
+- role: build-dependency
+ uid: ../objexc
+- role: build-dependency
+ uid: ../objvme
+- role: build-dependency
+ uid: ../start
+- role: build-dependency
+ uid: ../motld
+- role: build-dependency
+ uid: ../../bspopts
+source:
+- bsps/powerpc/beatnik/flash/flashcfg.c
+- bsps/powerpc/beatnik/irq/discovery_pic.c
+- bsps/powerpc/beatnik/irq/irq_init.c
+- bsps/powerpc/beatnik/marvell/discovery.c
+- bsps/powerpc/beatnik/marvell/gt_timer.c
+- bsps/powerpc/beatnik/marvell/gti2c.c
+- bsps/powerpc/beatnik/pci/gt_pci_init.c
+- bsps/powerpc/beatnik/pci/motload_fixup.c
+- bsps/powerpc/beatnik/pci/pci_io_remap.c
+- bsps/powerpc/beatnik/rtc/todcfg.c
+- bsps/powerpc/beatnik/start/bspclean.c
+- bsps/powerpc/beatnik/start/bspreset.c
+- bsps/powerpc/beatnik/start/bspstart.c
+- bsps/powerpc/beatnik/start/i2c_init.c
+- bsps/powerpc/shared/altivec/vec_sup.c
+- bsps/powerpc/shared/altivec/vec_sup_asm.S
+- bsps/powerpc/shared/btimer/btimer-ppc-dec.c
+- bsps/powerpc/shared/cache/cache.c
+- bsps/powerpc/shared/clock/clock-ppc-dec.c
+- bsps/powerpc/shared/clock/p_clock.c
+- bsps/powerpc/shared/console/console.c
+- bsps/powerpc/shared/console/uart.c
+- bsps/powerpc/shared/flash/flash.c
+- bsps/powerpc/shared/flash/intelFlash.c
+- bsps/powerpc/shared/irq/ppc-irq-legacy.c
+- bsps/powerpc/shared/mmu/bat.c
+- bsps/powerpc/shared/mmu/mmuAsm.S
+- bsps/powerpc/shared/mmu/pte121.c
+- bsps/powerpc/shared/pci/pci.c
+- bsps/powerpc/shared/pci/pcifinddevice.c
+- bsps/powerpc/shared/start/bspgetworkarea.c
+- bsps/powerpc/shared/start/pgtbl_activate.c
+- bsps/powerpc/shared/start/pgtbl_setup.c
+- bsps/powerpc/shared/start/probeMemEnd.c
+- bsps/powerpc/shared/start/sbrk.c
+- bsps/powerpc/shared/start/vpd.c
+- bsps/powerpc/shared/start/zerobss.c
+- bsps/shared/dev/getentropy/getentropy-cpucounter.c
+- bsps/shared/dev/rtc/rtc-support.c
+type: build
diff --git a/spec/build/bsps/powerpc/beatnik/objnet.yml b/spec/build/bsps/powerpc/beatnik/objnet.yml
new file mode 100644
index 0000000000..8ee85f2df0
--- /dev/null
+++ b/spec/build/bsps/powerpc/beatnik/objnet.yml
@@ -0,0 +1,23 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: objects
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by:
+- RTEMS_NETWORKING
+includes:
+- cpukit/libnetworking
+install: []
+links: []
+source:
+- bsps/powerpc/beatnik/net/if_em/if_em.c
+- bsps/powerpc/beatnik/net/if_em/if_em_hw.c
+- bsps/powerpc/beatnik/net/if_em/if_em_rtems.c
+- bsps/powerpc/beatnik/net/if_gfe/if_gfe.c
+- bsps/powerpc/beatnik/net/if_gfe/if_gfe_rtems.c
+- bsps/powerpc/beatnik/net/if_mve/mv643xx_eth.c
+- bsps/powerpc/beatnik/net/support/bsp_attach.c
+- bsps/powerpc/beatnik/net/support/early_link_status.c
+type: build
diff --git a/spec/build/bsps/powerpc/beatnik/optsbrk.yml b/spec/build/bsps/powerpc/beatnik/optsbrk.yml
new file mode 100644
index 0000000000..05a1acd75f
--- /dev/null
+++ b/spec/build/bsps/powerpc/beatnik/optsbrk.yml
@@ -0,0 +1,15 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+actions:
+- get-boolean: null
+- define-condition: null
+build-type: option
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+default: true
+default-by-variant: []
+description: |
+ If defined then the BSP may reduce the available memory size initially. This can be useful for debugging (reduce the core size) or dynamic loading (std gcc text offsets/jumps are < +/-32M). Note that the policy can still be defined by the application (see sbrk.c, BSP_sbrk_policy). By undefining CONFIGURE_MALLOC_BSP_SUPPORTS_SBRK this feature is removed and a little memory is saved.
+enabled-by: true
+links: []
+name: CONFIGURE_MALLOC_BSP_SUPPORTS_SBRK
+type: build
diff --git a/spec/build/bsps/powerpc/crti.yml b/spec/build/bsps/powerpc/crti.yml
new file mode 100644
index 0000000000..01866225fa
--- /dev/null
+++ b/spec/build/bsps/powerpc/crti.yml
@@ -0,0 +1,14 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+asflags: []
+build-type: start-file
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+enabled-by: true
+includes: []
+install-path: ${BSP_LIBDIR}
+links: []
+source:
+- bsps/powerpc/shared/start/rtems_crti.S
+target: rtems_crti.o
+type: build
diff --git a/spec/build/bsps/powerpc/crtn.yml b/spec/build/bsps/powerpc/crtn.yml
new file mode 100644
index 0000000000..56669b9294
--- /dev/null
+++ b/spec/build/bsps/powerpc/crtn.yml
@@ -0,0 +1,14 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+asflags: []
+build-type: start-file
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+enabled-by: true
+includes: []
+install-path: ${BSP_LIBDIR}
+links: []
+source:
+- bsps/powerpc/shared/start/rtems_crtn.S
+target: rtems_crtn.o
+type: build
diff --git a/spec/build/bsps/powerpc/gen5200/abi.yml b/spec/build/bsps/powerpc/gen5200/abi.yml
new file mode 100644
index 0000000000..29fd9942f9
--- /dev/null
+++ b/spec/build/bsps/powerpc/gen5200/abi.yml
@@ -0,0 +1,20 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+actions:
+- get-string: null
+- split: null
+- env-append: null
+build-type: option
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+default:
+- -mcpu=603e
+- -mstrict-align
+- -meabi
+- -msdata=sysv
+default-by-variant: []
+description: |
+ ABI flags
+enabled-by: true
+links: []
+name: ABI_FLAGS
+type: build
diff --git a/spec/build/bsps/powerpc/gen5200/bspicecube.yml b/spec/build/bsps/powerpc/gen5200/bspicecube.yml
new file mode 100644
index 0000000000..7f95524151
--- /dev/null
+++ b/spec/build/bsps/powerpc/gen5200/bspicecube.yml
@@ -0,0 +1,19 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+arch: powerpc
+bsp: icecube
+build-type: bsp
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+enabled-by: true
+family: gen5200
+includes: []
+install: []
+links:
+- role: build-dependency
+ uid: ../../opto2
+- role: build-dependency
+ uid: grp
+source: []
+type: build
diff --git a/spec/build/bsps/powerpc/gen5200/bsppm520cr825.yml b/spec/build/bsps/powerpc/gen5200/bsppm520cr825.yml
new file mode 100644
index 0000000000..cb5aa0b048
--- /dev/null
+++ b/spec/build/bsps/powerpc/gen5200/bsppm520cr825.yml
@@ -0,0 +1,19 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+arch: powerpc
+bsp: pm520_cr825
+build-type: bsp
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+enabled-by: true
+family: gen5200
+includes: []
+install: []
+links:
+- role: build-dependency
+ uid: ../../opto2
+- role: build-dependency
+ uid: grp
+source: []
+type: build
diff --git a/spec/build/bsps/powerpc/gen5200/bsppm520ze30.yml b/spec/build/bsps/powerpc/gen5200/bsppm520ze30.yml
new file mode 100644
index 0000000000..cc005c5782
--- /dev/null
+++ b/spec/build/bsps/powerpc/gen5200/bsppm520ze30.yml
@@ -0,0 +1,19 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+arch: powerpc
+bsp: pm520_ze30
+build-type: bsp
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+enabled-by: true
+family: gen5200
+includes: []
+install: []
+links:
+- role: build-dependency
+ uid: ../../opto2
+- role: build-dependency
+ uid: grp
+source: []
+type: build
diff --git a/spec/build/bsps/powerpc/gen5200/grp.yml b/spec/build/bsps/powerpc/gen5200/grp.yml
new file mode 100644
index 0000000000..3132c60559
--- /dev/null
+++ b/spec/build/bsps/powerpc/gen5200/grp.yml
@@ -0,0 +1,64 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: group
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+enabled-by: true
+includes: []
+install: []
+ldflags: []
+links:
+- role: build-dependency
+ uid: ../../linkcmds
+- role: build-dependency
+ uid: ../../obj
+- role: build-dependency
+ uid: ../../objirq
+- role: build-dependency
+ uid: ../crti
+- role: build-dependency
+ uid: ../crtn
+- role: build-dependency
+ uid: abi
+- role: build-dependency
+ uid: obj
+- role: build-dependency
+ uid: objnet
+- role: build-dependency
+ uid: optbenchirq
+- role: build-dependency
+ uid: optenirqnest
+- role: build-dependency
+ uid: optgpiomsk
+- role: build-dependency
+ uid: optgpioval
+- role: build-dependency
+ uid: opticecub
+- role: build-dependency
+ uid: optpm520cr825
+- role: build-dependency
+ uid: optpm520ze30
+- role: build-dependency
+ uid: optprintkminor
+- role: build-dependency
+ uid: optpscgps
+- role: build-dependency
+ uid: optsinglechar
+- role: build-dependency
+ uid: optuartmsk
+- role: build-dependency
+ uid: optuartstermirq
+- role: build-dependency
+ uid: optuboot
+- role: build-dependency
+ uid: start
+- role: build-dependency
+ uid: ../grp
+- role: build-dependency
+ uid: ../obj
+- role: build-dependency
+ uid: ../objexc
+- role: build-dependency
+ uid: ../../bspopts
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/bsps/powerpc/gen5200/obj.yml b/spec/build/bsps/powerpc/gen5200/obj.yml
new file mode 100644
index 0000000000..2f83305cad
--- /dev/null
+++ b/spec/build/bsps/powerpc/gen5200/obj.yml
@@ -0,0 +1,117 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: objects
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by: true
+includes: []
+install:
+- destination: ${BSP_INCLUDEDIR}
+ source:
+ - bsps/powerpc/gen5200/include/bsp.h
+ - bsps/powerpc/gen5200/include/tm27.h
+- destination: ${BSP_INCLUDEDIR}/bsp
+ source:
+ - bsps/powerpc/gen5200/include/bsp/ata.h
+ - bsps/powerpc/gen5200/include/bsp/bestcomm.h
+ - bsps/powerpc/gen5200/include/bsp/bestcomm_ops.h
+ - bsps/powerpc/gen5200/include/bsp/i2c.h
+ - bsps/powerpc/gen5200/include/bsp/i2cdrv.h
+ - bsps/powerpc/gen5200/include/bsp/irq.h
+ - bsps/powerpc/gen5200/include/bsp/mpc5200.h
+ - bsps/powerpc/gen5200/include/bsp/mscan-base.h
+ - bsps/powerpc/gen5200/include/bsp/mscan.h
+ - bsps/powerpc/gen5200/include/bsp/nvram.h
+ - bsps/powerpc/gen5200/include/bsp/slicetimer.h
+ - bsps/powerpc/gen5200/include/bsp/u-boot-config.h
+- destination: ${BSP_INCLUDEDIR}/bsp/bestcomm
+ source:
+ - bsps/powerpc/gen5200/include/bsp/bestcomm/bestcomm_api.h
+ - bsps/powerpc/gen5200/include/bsp/bestcomm/bestcomm_glue.h
+ - bsps/powerpc/gen5200/include/bsp/bestcomm/bestcomm_priv.h
+ - bsps/powerpc/gen5200/include/bsp/bestcomm/dma_image.capi.h
+ - bsps/powerpc/gen5200/include/bsp/bestcomm/dma_image.h
+- destination: ${BSP_INCLUDEDIR}/bsp/bestcomm/${BSP_INCLUDEDIR}
+ source:
+ - bsps/powerpc/gen5200/include/bsp/bestcomm/include/ppctypes.h
+- destination: ${BSP_INCLUDEDIR}/bsp/bestcomm/${BSP_INCLUDEDIR}/mgt5200
+ source:
+ - bsps/powerpc/gen5200/include/bsp/bestcomm/include/mgt5200/mgt5200.h
+ - bsps/powerpc/gen5200/include/bsp/bestcomm/include/mgt5200/sdma.h
+- destination: ${BSP_INCLUDEDIR}/bsp/bestcomm/task/api
+ source:
+ - bsps/powerpc/gen5200/include/bsp/bestcomm/task_api/bestcomm_api_mem.h
+ - bsps/powerpc/gen5200/include/bsp/bestcomm/task_api/bestcomm_cntrl.h
+ - bsps/powerpc/gen5200/include/bsp/bestcomm/task_api/tasksetup_bdtable.h
+ - bsps/powerpc/gen5200/include/bsp/bestcomm/task_api/tasksetup_general.h
+- destination: ${BSP_LIBDIR}
+ source:
+ - bsps/powerpc/gen5200/start/linkcmds.gen5200_base
+ - bsps/powerpc/gen5200/start/linkcmds.icecube
+ - bsps/powerpc/gen5200/start/linkcmds.pm520_cr825
+ - bsps/powerpc/gen5200/start/linkcmds.pm520_ze30
+links: []
+source:
+- bsps/powerpc/gen5200/ata/ata-dma-pio-single.c
+- bsps/powerpc/gen5200/ata/ata-instance.c
+- bsps/powerpc/gen5200/ata/idecfg.c
+- bsps/powerpc/gen5200/ata/pcmcia_ide.c
+- bsps/powerpc/gen5200/bestcomm/bestcomm_api.c
+- bsps/powerpc/gen5200/bestcomm/bestcomm_glue.c
+- bsps/powerpc/gen5200/bestcomm/dma_image.c
+- bsps/powerpc/gen5200/bestcomm/dma_image.reloc.c
+- bsps/powerpc/gen5200/bestcomm/load_task.c
+- bsps/powerpc/gen5200/bestcomm/tasksetup_ata.c
+- bsps/powerpc/gen5200/bestcomm/tasksetup_bdtable.c
+- bsps/powerpc/gen5200/bestcomm/tasksetup_crc16_dp_0.c
+- bsps/powerpc/gen5200/bestcomm/tasksetup_crc16_dp_1.c
+- bsps/powerpc/gen5200/bestcomm/tasksetup_fec_rx_bd.c
+- bsps/powerpc/gen5200/bestcomm/tasksetup_fec_tx_bd.c
+- bsps/powerpc/gen5200/bestcomm/tasksetup_gen_dp_0.c
+- bsps/powerpc/gen5200/bestcomm/tasksetup_gen_dp_1.c
+- bsps/powerpc/gen5200/bestcomm/tasksetup_gen_dp_2.c
+- bsps/powerpc/gen5200/bestcomm/tasksetup_gen_dp_3.c
+- bsps/powerpc/gen5200/bestcomm/tasksetup_gen_dp_bd_0.c
+- bsps/powerpc/gen5200/bestcomm/tasksetup_gen_dp_bd_1.c
+- bsps/powerpc/gen5200/bestcomm/tasksetup_gen_rx_bd.c
+- bsps/powerpc/gen5200/bestcomm/tasksetup_gen_tx_bd.c
+- bsps/powerpc/gen5200/bestcomm/tasksetup_lpc.c
+- bsps/powerpc/gen5200/bestcomm/tasksetup_pci_rx.c
+- bsps/powerpc/gen5200/bestcomm/tasksetup_pci_tx.c
+- bsps/powerpc/gen5200/console/console.c
+- bsps/powerpc/gen5200/dev/mpc5200-ata.c
+- bsps/powerpc/gen5200/i2c/i2c.c
+- bsps/powerpc/gen5200/i2c/i2cdrv.c
+- bsps/powerpc/gen5200/i2c/mpc5200mbus.c
+- bsps/powerpc/gen5200/irq/irq.c
+- bsps/powerpc/gen5200/mscan/mscan-base.c
+- bsps/powerpc/gen5200/mscan/mscan.c
+- bsps/powerpc/gen5200/nvram/nvram.c
+- bsps/powerpc/gen5200/rtc/pcf8563.c
+- bsps/powerpc/gen5200/rtc/todcfg.c
+- bsps/powerpc/gen5200/slicetimer/slicetimer.c
+- bsps/powerpc/gen5200/start/bestcomm.c
+- bsps/powerpc/gen5200/start/bspreset.c
+- bsps/powerpc/gen5200/start/bspstart.c
+- bsps/powerpc/gen5200/start/cpuinit.c
+- bsps/powerpc/gen5200/start/uboot_support.c
+- bsps/powerpc/shared/btimer/btimer-ppc-dec.c
+- bsps/powerpc/shared/cache/cache.c
+- bsps/powerpc/shared/clock/clock.c
+- bsps/powerpc/shared/mmu/bat.c
+- bsps/powerpc/shared/mmu/mmuAsm.S
+- bsps/powerpc/shared/mmu/pte121.c
+- bsps/powerpc/shared/start/bspidle.c
+- bsps/powerpc/shared/start/memcpy.c
+- bsps/powerpc/shared/start/showbats.c
+- bsps/powerpc/shared/u-boot/uboot_dump_bdinfo.c
+- bsps/powerpc/shared/u-boot/uboot_getenv.c
+- bsps/shared/dev/getentropy/getentropy-cpucounter.c
+- bsps/shared/dev/rtc/rtc-support.c
+- bsps/shared/start/bsp-uboot-board-info.c
+- bsps/shared/start/bspfatal-default.c
+- bsps/shared/start/bspgetworkarea-default.c
+- bsps/shared/start/sbrk.c
+type: build
diff --git a/spec/build/bsps/powerpc/gen5200/objnet.yml b/spec/build/bsps/powerpc/gen5200/objnet.yml
new file mode 100644
index 0000000000..31f2ceff57
--- /dev/null
+++ b/spec/build/bsps/powerpc/gen5200/objnet.yml
@@ -0,0 +1,16 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: objects
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by:
+- RTEMS_NETWORKING
+includes:
+- cpukit/libnetworking
+install: []
+links: []
+source:
+- bsps/powerpc/gen5200/net/network.c
+type: build
diff --git a/spec/build/bsps/powerpc/gen5200/optbenchirq.yml b/spec/build/bsps/powerpc/gen5200/optbenchirq.yml
new file mode 100644
index 0000000000..3ade789573
--- /dev/null
+++ b/spec/build/bsps/powerpc/gen5200/optbenchirq.yml
@@ -0,0 +1,15 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+actions:
+- get-boolean: null
+- define-condition: null
+build-type: option
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+default: false
+default-by-variant: []
+description: |
+ If set to !0, enable code to benchmark IRQ processing.
+enabled-by: true
+links: []
+name: BENCHMARK_IRQ_PROCESSING
+type: build
diff --git a/spec/build/bsps/powerpc/gen5200/optenirqnest.yml b/spec/build/bsps/powerpc/gen5200/optenirqnest.yml
new file mode 100644
index 0000000000..2dfcefb5ea
--- /dev/null
+++ b/spec/build/bsps/powerpc/gen5200/optenirqnest.yml
@@ -0,0 +1,18 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+actions:
+- get-boolean: null
+- define-condition: null
+build-type: option
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+default: true
+default-by-variant:
+- value: false
+ variants:
+ - powerpc/icecube
+description: |
+ If set to !0, allow nested IRQ processing.
+enabled-by: true
+links: []
+name: ALLOW_IRQ_NESTING
+type: build
diff --git a/spec/build/bsps/powerpc/gen5200/optgpiomsk.yml b/spec/build/bsps/powerpc/gen5200/optgpiomsk.yml
new file mode 100644
index 0000000000..c39ec0ce43
--- /dev/null
+++ b/spec/build/bsps/powerpc/gen5200/optgpiomsk.yml
@@ -0,0 +1,22 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+actions:
+- get-integer: null
+- define: null
+build-type: option
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+default: 856625015
+default-by-variant:
+- value: 58670855
+ variants:
+ - powerpc/pm520_ze30
+description: |
+ Defines the bits cleared in the MPC5200 GPIOPCR register during
+ initialization. Must match the hardware requirements. Must be consistent
+ with BSP_GPIOPCR_INITVAL. The bits are cleared via BSP_GPIOPCR_INITMASK and
+ then set via BSP_GPIOPCR_INITVAL.
+enabled-by: true
+format: '{:#010x}'
+links: []
+name: BSP_GPIOPCR_INITMASK
+type: build
diff --git a/spec/build/bsps/powerpc/gen5200/optgpioval.yml b/spec/build/bsps/powerpc/gen5200/optgpioval.yml
new file mode 100644
index 0000000000..029df6a4f7
--- /dev/null
+++ b/spec/build/bsps/powerpc/gen5200/optgpioval.yml
@@ -0,0 +1,22 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+actions:
+- get-integer: null
+- define: null
+build-type: option
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+default: 17105988
+default-by-variant:
+- value: 22356228
+ variants:
+ - powerpc/pm520_ze30
+description: |
+ Defines the bits set in the MPC5200 GPIOPCR register during initialization.
+ Must match the hardware requirements. Must be consistent with
+ BSP_GPIOPCR_INITMASK. The bits are cleared via BSP_GPIOPCR_INITMASK and then
+ set via BSP_GPIOPCR_INITVAL.
+enabled-by: true
+format: '{:#010x}'
+links: []
+name: BSP_GPIOPCR_INITVAL
+type: build
diff --git a/spec/build/bsps/powerpc/gen5200/opticecub.yml b/spec/build/bsps/powerpc/gen5200/opticecub.yml
new file mode 100644
index 0000000000..c93eafa7b2
--- /dev/null
+++ b/spec/build/bsps/powerpc/gen5200/opticecub.yml
@@ -0,0 +1,18 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+actions:
+- get-boolean: null
+- define-condition: null
+build-type: option
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+default: false
+default-by-variant:
+- value: true
+ variants:
+ - powerpc/icecube
+description: |
+ enable settings for IceCube
+enabled-by: true
+links: []
+name: MPC5200_BOARD_ICECUBE
+type: build
diff --git a/spec/build/bsps/powerpc/gen5200/optpm520cr825.yml b/spec/build/bsps/powerpc/gen5200/optpm520cr825.yml
new file mode 100644
index 0000000000..72d96a0696
--- /dev/null
+++ b/spec/build/bsps/powerpc/gen5200/optpm520cr825.yml
@@ -0,0 +1,18 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+actions:
+- get-boolean: null
+- define-condition: null
+build-type: option
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+default: false
+default-by-variant:
+- value: true
+ variants:
+ - powerpc/pm520_cr825
+description: |
+ enable settings for PM520 CR825
+enabled-by: true
+links: []
+name: MPC5200_BOARD_PM520_CR825
+type: build
diff --git a/spec/build/bsps/powerpc/gen5200/optpm520ze30.yml b/spec/build/bsps/powerpc/gen5200/optpm520ze30.yml
new file mode 100644
index 0000000000..8a285a99aa
--- /dev/null
+++ b/spec/build/bsps/powerpc/gen5200/optpm520ze30.yml
@@ -0,0 +1,18 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+actions:
+- get-boolean: null
+- define-condition: null
+build-type: option
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+default: false
+default-by-variant:
+- value: true
+ variants:
+ - powerpc/pm520_ze30
+description: |
+ enable settings for PM520 ZE30
+enabled-by: true
+links: []
+name: MPC5200_BOARD_PM520_ZE30
+type: build
diff --git a/spec/build/bsps/powerpc/gen5200/optprintkminor.yml b/spec/build/bsps/powerpc/gen5200/optprintkminor.yml
new file mode 100644
index 0000000000..fd101467b9
--- /dev/null
+++ b/spec/build/bsps/powerpc/gen5200/optprintkminor.yml
@@ -0,0 +1,16 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+actions:
+- get-integer: null
+- define: null
+build-type: option
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+default: 0
+default-by-variant: []
+description: |
+ console minor number used by printk()
+enabled-by: true
+format: '{}'
+links: []
+name: PRINTK_MINOR
+type: build
diff --git a/spec/build/bsps/powerpc/gen5200/optpscgps.yml b/spec/build/bsps/powerpc/gen5200/optpscgps.yml
new file mode 100644
index 0000000000..1a80a6b34e
--- /dev/null
+++ b/spec/build/bsps/powerpc/gen5200/optpscgps.yml
@@ -0,0 +1,16 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+actions:
+- get-integer: null
+- define: null
+build-type: option
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+default: 0
+default-by-variant: []
+description: |
+ PSC index for GPS module, if defined results in '/dev/gps'
+enabled-by: true
+format: '{}'
+links: []
+name: MPC5200_PSC_INDEX_FOR_GPS_MODULE
+type: build
diff --git a/spec/build/bsps/powerpc/gen5200/optsinglechar.yml b/spec/build/bsps/powerpc/gen5200/optsinglechar.yml
new file mode 100644
index 0000000000..26f3e4b8a6
--- /dev/null
+++ b/spec/build/bsps/powerpc/gen5200/optsinglechar.yml
@@ -0,0 +1,15 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+actions:
+- get-boolean: null
+- define-condition: null
+build-type: option
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+default: false
+default-by-variant: []
+description: |
+ enable single character mode for the PSC console driver
+enabled-by: true
+links: []
+name: SINGLE_CHAR_MODE
+type: build
diff --git a/spec/build/bsps/powerpc/gen5200/optuartmsk.yml b/spec/build/bsps/powerpc/gen5200/optuartmsk.yml
new file mode 100644
index 0000000000..2a211006e4
--- /dev/null
+++ b/spec/build/bsps/powerpc/gen5200/optuartmsk.yml
@@ -0,0 +1,25 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+actions:
+- get-integer: null
+- define: null
+build-type: option
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+default: 1
+default-by-variant:
+- value: 57
+ variants:
+ - powerpc/pm520_ze30
+- value: 7
+ variants:
+ - powerpc/pm520_cr825
+- value: 1
+ variants:
+ - powerpc/icecube
+description: |
+ bit mask to specify the UARTS (PSCs), which should be enabled on this board. Must match the hardware requirements. PSC1 corresponds to the LSB
+enabled-by: true
+format: '{:#010x}'
+links: []
+name: BSP_UART_AVAIL_MASK
+type: build
diff --git a/spec/build/bsps/powerpc/gen5200/optuartstermirq.yml b/spec/build/bsps/powerpc/gen5200/optuartstermirq.yml
new file mode 100644
index 0000000000..219d19a564
--- /dev/null
+++ b/spec/build/bsps/powerpc/gen5200/optuartstermirq.yml
@@ -0,0 +1,15 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+actions:
+- get-boolean: null
+- define-condition: null
+build-type: option
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+default: true
+default-by-variant: []
+description: |
+ enable interrupt support for the PSC console driver
+enabled-by: true
+links: []
+name: UARTS_USE_TERMIOS_INT
+type: build
diff --git a/spec/build/bsps/powerpc/gen5200/optuboot.yml b/spec/build/bsps/powerpc/gen5200/optuboot.yml
new file mode 100644
index 0000000000..19ed770a9f
--- /dev/null
+++ b/spec/build/bsps/powerpc/gen5200/optuboot.yml
@@ -0,0 +1,21 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+actions:
+- get-boolean: null
+- define-condition: null
+build-type: option
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+default: false
+default-by-variant:
+- value: true
+ variants:
+ - powerpc/pm520.*
+- value: true
+ variants:
+ - powerpc/icecube
+description: |
+ enable U-Boot startup
+enabled-by: true
+links: []
+name: HAS_UBOOT
+type: build
diff --git a/spec/build/bsps/powerpc/gen5200/start.yml b/spec/build/bsps/powerpc/gen5200/start.yml
new file mode 100644
index 0000000000..22f4e14fb4
--- /dev/null
+++ b/spec/build/bsps/powerpc/gen5200/start.yml
@@ -0,0 +1,14 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+asflags: []
+build-type: start-file
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+enabled-by: true
+includes: []
+install-path: ${BSP_LIBDIR}
+links: []
+source:
+- bsps/powerpc/gen5200/start/start.S
+target: start.o
+type: build
diff --git a/spec/build/bsps/powerpc/gen83xx/abi.yml b/spec/build/bsps/powerpc/gen83xx/abi.yml
new file mode 100644
index 0000000000..003f7c77d5
--- /dev/null
+++ b/spec/build/bsps/powerpc/gen83xx/abi.yml
@@ -0,0 +1,20 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+actions:
+- get-string: null
+- split: null
+- env-append: null
+build-type: option
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+default:
+- -mcpu=603e
+- -meabi
+- -msdata=sysv
+- -mstrict-align
+default-by-variant: []
+description: |
+ ABI flags
+enabled-by: true
+links: []
+name: ABI_FLAGS
+type: build
diff --git a/spec/build/bsps/powerpc/gen83xx/bspbruid.yml b/spec/build/bsps/powerpc/gen83xx/bspbruid.yml
new file mode 100644
index 0000000000..dec3e58c8d
--- /dev/null
+++ b/spec/build/bsps/powerpc/gen83xx/bspbruid.yml
@@ -0,0 +1,19 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+arch: powerpc
+bsp: br_uid
+build-type: bsp
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+enabled-by: true
+family: gen83xx
+includes: []
+install: []
+links:
+- role: build-dependency
+ uid: ../../opto2
+- role: build-dependency
+ uid: grp
+source: []
+type: build
diff --git a/spec/build/bsps/powerpc/gen83xx/bsphsccm01.yml b/spec/build/bsps/powerpc/gen83xx/bsphsccm01.yml
new file mode 100644
index 0000000000..02dac5d72b
--- /dev/null
+++ b/spec/build/bsps/powerpc/gen83xx/bsphsccm01.yml
@@ -0,0 +1,19 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+arch: powerpc
+bsp: hsc_cm01
+build-type: bsp
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+enabled-by: true
+family: gen83xx
+includes: []
+install: []
+links:
+- role: build-dependency
+ uid: ../../opto2
+- role: build-dependency
+ uid: grp
+source: []
+type: build
diff --git a/spec/build/bsps/powerpc/gen83xx/bspmpc8309som.yml b/spec/build/bsps/powerpc/gen83xx/bspmpc8309som.yml
new file mode 100644
index 0000000000..9fa34b4fad
--- /dev/null
+++ b/spec/build/bsps/powerpc/gen83xx/bspmpc8309som.yml
@@ -0,0 +1,19 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+arch: powerpc
+bsp: mpc8309som
+build-type: bsp
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+enabled-by: true
+family: gen83xx
+includes: []
+install: []
+links:
+- role: build-dependency
+ uid: ../../opto2
+- role: build-dependency
+ uid: grp
+source: []
+type: build
diff --git a/spec/build/bsps/powerpc/gen83xx/bspmpc8313erdb.yml b/spec/build/bsps/powerpc/gen83xx/bspmpc8313erdb.yml
new file mode 100644
index 0000000000..f748df9ef6
--- /dev/null
+++ b/spec/build/bsps/powerpc/gen83xx/bspmpc8313erdb.yml
@@ -0,0 +1,19 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+arch: powerpc
+bsp: mpc8313erdb
+build-type: bsp
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+enabled-by: true
+family: gen83xx
+includes: []
+install: []
+links:
+- role: build-dependency
+ uid: ../../opto2
+- role: build-dependency
+ uid: grp
+source: []
+type: build
diff --git a/spec/build/bsps/powerpc/gen83xx/bspmpc8349eamds.yml b/spec/build/bsps/powerpc/gen83xx/bspmpc8349eamds.yml
new file mode 100644
index 0000000000..d50f84cdb9
--- /dev/null
+++ b/spec/build/bsps/powerpc/gen83xx/bspmpc8349eamds.yml
@@ -0,0 +1,19 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+arch: powerpc
+bsp: mpc8349eamds
+build-type: bsp
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+enabled-by: true
+family: gen83xx
+includes: []
+install: []
+links:
+- role: build-dependency
+ uid: ../../opto2
+- role: build-dependency
+ uid: grp
+source: []
+type: build
diff --git a/spec/build/bsps/powerpc/gen83xx/grp.yml b/spec/build/bsps/powerpc/gen83xx/grp.yml
new file mode 100644
index 0000000000..602c74524b
--- /dev/null
+++ b/spec/build/bsps/powerpc/gen83xx/grp.yml
@@ -0,0 +1,66 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: group
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+enabled-by: true
+includes: []
+install: []
+ldflags: []
+links:
+- role: build-dependency
+ uid: ../../linkcmds
+- role: build-dependency
+ uid: ../../obj
+- role: build-dependency
+ uid: ../../objirq
+- role: build-dependency
+ uid: ../../optconsolebaud
+- role: build-dependency
+ uid: ../crti
+- role: build-dependency
+ uid: ../crtn
+- role: build-dependency
+ uid: abi
+- role: build-dependency
+ uid: obj
+- role: build-dependency
+ uid: objnet
+- role: build-dependency
+ uid: optbruid
+- role: build-dependency
+ uid: optchiptype
+- role: build-dependency
+ uid: opthsccm01
+- role: build-dependency
+ uid: optirqnest
+- role: build-dependency
+ uid: optmpc8309som
+- role: build-dependency
+ uid: optmpc8313erdb
+- role: build-dependency
+ uid: optmpc8349eamds
+- role: build-dependency
+ uid: optnandcs0
+- role: build-dependency
+ uid: optnet0phy
+- role: build-dependency
+ uid: optuart2
+- role: build-dependency
+ uid: optuartirq
+- role: build-dependency
+ uid: optuboot
+- role: build-dependency
+ uid: optulpi
+- role: build-dependency
+ uid: start
+- role: build-dependency
+ uid: ../grp
+- role: build-dependency
+ uid: ../obj
+- role: build-dependency
+ uid: ../objexc
+- role: build-dependency
+ uid: ../../bspopts
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/bsps/powerpc/gen83xx/obj.yml b/spec/build/bsps/powerpc/gen83xx/obj.yml
new file mode 100644
index 0000000000..da7dcbc9f1
--- /dev/null
+++ b/spec/build/bsps/powerpc/gen83xx/obj.yml
@@ -0,0 +1,61 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: objects
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by: true
+includes: []
+install:
+- destination: ${BSP_INCLUDEDIR}
+ source:
+ - bsps/powerpc/gen83xx/include/bsp.h
+ - bsps/powerpc/gen83xx/include/tm27.h
+- destination: ${BSP_INCLUDEDIR}/bsp
+ source:
+ - bsps/powerpc/gen83xx/include/bsp/hwreg_vals.h
+ - bsps/powerpc/gen83xx/include/bsp/irq.h
+ - bsps/powerpc/gen83xx/include/bsp/tsec-config.h
+ - bsps/powerpc/gen83xx/include/bsp/u-boot-config.h
+- destination: ${BSP_LIBDIR}
+ source:
+ - bsps/powerpc/gen83xx/start/linkcmds.br_uid
+ - bsps/powerpc/gen83xx/start/linkcmds.hsc_cm01
+ - bsps/powerpc/gen83xx/start/linkcmds.mpc8309som
+ - bsps/powerpc/gen83xx/start/linkcmds.mpc8313erdb
+ - bsps/powerpc/gen83xx/start/linkcmds.mpc8349eamds
+ - bsps/powerpc/gen83xx/start/linkcmds.mpc83xx
+ - bsps/powerpc/shared/start/linkcmds.base
+links: []
+source:
+- bsps/powerpc/gen83xx/console/console-config.c
+- bsps/powerpc/gen83xx/dev/gtm.c
+- bsps/powerpc/gen83xx/dev/mpc83xx_i2cdrv.c
+- bsps/powerpc/gen83xx/dev/mpc83xx_spidrv.c
+- bsps/powerpc/gen83xx/i2c/i2c_init.c
+- bsps/powerpc/gen83xx/irq/irq.c
+- bsps/powerpc/gen83xx/spi/spi_init.c
+- bsps/powerpc/gen83xx/start/bspreset.c
+- bsps/powerpc/gen83xx/start/bsprestart.c
+- bsps/powerpc/gen83xx/start/bspstart.c
+- bsps/powerpc/gen83xx/start/cpuinit.c
+- bsps/powerpc/gen83xx/start/uboot_support.c
+- bsps/powerpc/shared/btimer/btimer-ppc-dec.c
+- bsps/powerpc/shared/cache/cache.c
+- bsps/powerpc/shared/clock/clock.c
+- bsps/powerpc/shared/mmu/bat.c
+- bsps/powerpc/shared/mmu/mmuAsm.S
+- bsps/powerpc/shared/mmu/pte121.c
+- bsps/powerpc/shared/start/bspidle.c
+- bsps/powerpc/shared/start/tictac.c
+- bsps/powerpc/shared/u-boot/uboot_getenv.c
+- bsps/shared/dev/getentropy/getentropy-cpucounter.c
+- bsps/shared/dev/serial/console-termios-init.c
+- bsps/shared/dev/serial/console-termios.c
+- bsps/shared/irq/irq-default-handler.c
+- bsps/shared/start/bsp-uboot-board-info.c
+- bsps/shared/start/bspfatal-default.c
+- bsps/shared/start/bspgetworkarea-default.c
+- bsps/shared/start/sbrk.c
+type: build
diff --git a/spec/build/bsps/powerpc/gen83xx/objnet.yml b/spec/build/bsps/powerpc/gen83xx/objnet.yml
new file mode 100644
index 0000000000..0a750f77de
--- /dev/null
+++ b/spec/build/bsps/powerpc/gen83xx/objnet.yml
@@ -0,0 +1,17 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: objects
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by:
+- RTEMS_NETWORKING
+includes:
+- cpukit/libnetworking
+install: []
+links: []
+source:
+- bsps/powerpc/gen83xx/net/network.c
+- bsps/powerpc/shared/net/tsec.c
+type: build
diff --git a/spec/build/bsps/powerpc/gen83xx/optbruid.yml b/spec/build/bsps/powerpc/gen83xx/optbruid.yml
new file mode 100644
index 0000000000..e5732379ea
--- /dev/null
+++ b/spec/build/bsps/powerpc/gen83xx/optbruid.yml
@@ -0,0 +1,18 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+actions:
+- get-boolean: null
+- define-condition: null
+build-type: option
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+default: false
+default-by-variant:
+- value: true
+ variants:
+ - powerpc/br_uid
+description: |
+ if defined, then use settings for the BR UID board
+enabled-by: true
+links: []
+name: MPC83XX_BOARD_BR_UID
+type: build
diff --git a/spec/build/bsps/powerpc/gen83xx/optchiptype.yml b/spec/build/bsps/powerpc/gen83xx/optchiptype.yml
new file mode 100644
index 0000000000..a46f38d4fd
--- /dev/null
+++ b/spec/build/bsps/powerpc/gen83xx/optchiptype.yml
@@ -0,0 +1,28 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+actions:
+- get-integer: null
+- define: null
+build-type: option
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+default: 8313
+default-by-variant:
+- value: 8309
+ variants:
+ - powerpc/mpc8309som
+- value: 8309
+ variants:
+ - powerpc/br_uid
+- value: 8349
+ variants:
+ - powerpc/mpc8349eamds
+- value: 8349
+ variants:
+ - powerpc/hsc_cm01
+description: |
+ chip type of the MPC83XX family
+enabled-by: true
+format: '{}'
+links: []
+name: MPC83XX_CHIP_TYPE
+type: build
diff --git a/spec/build/bsps/powerpc/gen83xx/opthsccm01.yml b/spec/build/bsps/powerpc/gen83xx/opthsccm01.yml
new file mode 100644
index 0000000000..d934919885
--- /dev/null
+++ b/spec/build/bsps/powerpc/gen83xx/opthsccm01.yml
@@ -0,0 +1,18 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+actions:
+- get-boolean: null
+- define-condition: null
+build-type: option
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+default: false
+default-by-variant:
+- value: true
+ variants:
+ - powerpc/hsc_cm01
+description: |
+ if defined, then use settings for the HSC_CM01 board
+enabled-by: true
+links: []
+name: MPC83XX_BOARD_HSC_CM01
+type: build
diff --git a/spec/build/bsps/powerpc/gen83xx/optirqnest.yml b/spec/build/bsps/powerpc/gen83xx/optirqnest.yml
new file mode 100644
index 0000000000..e24b81f9c6
--- /dev/null
+++ b/spec/build/bsps/powerpc/gen83xx/optirqnest.yml
@@ -0,0 +1,21 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+actions:
+- get-boolean: null
+- define-condition: null
+build-type: option
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+default: true
+default-by-variant:
+- value: false
+ variants:
+ - powerpc/mpc8313erdb
+- value: false
+ variants:
+ - powerpc/br_uid
+description: |
+ enable interrupt nesting
+enabled-by: true
+links: []
+name: GEN83XX_ENABLE_INTERRUPT_NESTING
+type: build
diff --git a/spec/build/bsps/powerpc/gen83xx/optmpc8309som.yml b/spec/build/bsps/powerpc/gen83xx/optmpc8309som.yml
new file mode 100644
index 0000000000..6722fa2fb3
--- /dev/null
+++ b/spec/build/bsps/powerpc/gen83xx/optmpc8309som.yml
@@ -0,0 +1,18 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+actions:
+- get-boolean: null
+- define-condition: null
+build-type: option
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+default: false
+default-by-variant:
+- value: true
+ variants:
+ - powerpc/mpc8309som
+description: |
+ if defined, then use settings for the MPC8309SOM board
+enabled-by: true
+links: []
+name: MPC83XX_BOARD_MPC8309SOM
+type: build
diff --git a/spec/build/bsps/powerpc/gen83xx/optmpc8313erdb.yml b/spec/build/bsps/powerpc/gen83xx/optmpc8313erdb.yml
new file mode 100644
index 0000000000..f8a9e0b47e
--- /dev/null
+++ b/spec/build/bsps/powerpc/gen83xx/optmpc8313erdb.yml
@@ -0,0 +1,18 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+actions:
+- get-boolean: null
+- define-condition: null
+build-type: option
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+default: false
+default-by-variant:
+- value: true
+ variants:
+ - powerpc/mpc8313erdb
+description: |
+ if defined, then use settings for the MPC8313ERDB board
+enabled-by: true
+links: []
+name: MPC83XX_BOARD_MPC8313ERDB
+type: build
diff --git a/spec/build/bsps/powerpc/gen83xx/optmpc8349eamds.yml b/spec/build/bsps/powerpc/gen83xx/optmpc8349eamds.yml
new file mode 100644
index 0000000000..f6b766099d
--- /dev/null
+++ b/spec/build/bsps/powerpc/gen83xx/optmpc8349eamds.yml
@@ -0,0 +1,18 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+actions:
+- get-boolean: null
+- define-condition: null
+build-type: option
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+default: false
+default-by-variant:
+- value: true
+ variants:
+ - powerpc/mpc8349eamds
+description: |
+ if defined, then use settings for the MPC8349EAMDS board
+enabled-by: true
+links: []
+name: MPC83XX_BOARD_MPC8349EAMDS
+type: build
diff --git a/spec/build/bsps/powerpc/gen83xx/optnandcs0.yml b/spec/build/bsps/powerpc/gen83xx/optnandcs0.yml
new file mode 100644
index 0000000000..d41820ea43
--- /dev/null
+++ b/spec/build/bsps/powerpc/gen83xx/optnandcs0.yml
@@ -0,0 +1,18 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+actions:
+- get-boolean: null
+- define-condition: null
+build-type: option
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+default: false
+default-by-variant:
+- value: true
+ variants:
+ - powerpc/br_uid
+description: |
+ indicates if the board has a NAND large page flash on chip select 0
+enabled-by: true
+links: []
+name: MPC83XX_HAS_NAND_LP_FLASH_ON_CS0
+type: build
diff --git a/spec/build/bsps/powerpc/gen83xx/optnet0phy.yml b/spec/build/bsps/powerpc/gen83xx/optnet0phy.yml
new file mode 100644
index 0000000000..70daf1fe3e
--- /dev/null
+++ b/spec/build/bsps/powerpc/gen83xx/optnet0phy.yml
@@ -0,0 +1,22 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+actions:
+- get-integer: null
+- define: null
+build-type: option
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+default: 0
+default-by-variant:
+- value: 17
+ variants:
+ - powerpc/mpc8309som
+- value: -1
+ variants:
+ - powerpc/br_uid
+description: |
+ PHY address of network interface 0
+enabled-by: true
+format: '{:#010x}'
+links: []
+name: MPC83XX_NETWORK_INTERFACE_0_PHY_ADDR
+type: build
diff --git a/spec/build/bsps/powerpc/gen83xx/optuart2.yml b/spec/build/bsps/powerpc/gen83xx/optuart2.yml
new file mode 100644
index 0000000000..c86b36f11b
--- /dev/null
+++ b/spec/build/bsps/powerpc/gen83xx/optuart2.yml
@@ -0,0 +1,15 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+actions:
+- get-boolean: null
+- define-condition: null
+build-type: option
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+default: true
+default-by-variant: []
+description: |
+ if defined, enables UART2
+enabled-by: true
+links: []
+name: BSP_USE_UART2
+type: build
diff --git a/spec/build/bsps/powerpc/gen83xx/optuartirq.yml b/spec/build/bsps/powerpc/gen83xx/optuartirq.yml
new file mode 100644
index 0000000000..5a845aa5fe
--- /dev/null
+++ b/spec/build/bsps/powerpc/gen83xx/optuartirq.yml
@@ -0,0 +1,18 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+actions:
+- get-boolean: null
+- define-condition: null
+build-type: option
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+default: true
+default-by-variant:
+- value: false
+ variants:
+ - powerpc/hsc_cm01
+description: |
+ enable usage of interrupts for the UART modules
+enabled-by: true
+links: []
+name: BSP_USE_UART_INTERRUPTS
+type: build
diff --git a/spec/build/bsps/powerpc/gen83xx/optuboot.yml b/spec/build/bsps/powerpc/gen83xx/optuboot.yml
new file mode 100644
index 0000000000..6b1166553e
--- /dev/null
+++ b/spec/build/bsps/powerpc/gen83xx/optuboot.yml
@@ -0,0 +1,24 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+actions:
+- get-boolean: null
+- define-condition: null
+build-type: option
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+default: false
+default-by-variant:
+- value: true
+ variants:
+ - powerpc/mpc8309som
+- value: true
+ variants:
+ - powerpc/mpc8313erdb
+- value: true
+ variants:
+ - powerpc/mpc8349eamds
+description: |
+ if defined, enables U-Boot support
+enabled-by: true
+links: []
+name: HAS_UBOOT
+type: build
diff --git a/spec/build/bsps/powerpc/gen83xx/optulpi.yml b/spec/build/bsps/powerpc/gen83xx/optulpi.yml
new file mode 100644
index 0000000000..fd9be9f12f
--- /dev/null
+++ b/spec/build/bsps/powerpc/gen83xx/optulpi.yml
@@ -0,0 +1,18 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+actions:
+- get-boolean: null
+- define-condition: null
+build-type: option
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+default: false
+default-by-variant:
+- value: true
+ variants:
+ - powerpc/br_uid
+description: |
+ the board has an ULPI PHY connected to the USB EHCI controller
+enabled-by: true
+links: []
+name: BSP_USB_EHCI_MPC83XX_HAS_ULPI
+type: build
diff --git a/spec/build/bsps/powerpc/gen83xx/start.yml b/spec/build/bsps/powerpc/gen83xx/start.yml
new file mode 100644
index 0000000000..64de86b044
--- /dev/null
+++ b/spec/build/bsps/powerpc/gen83xx/start.yml
@@ -0,0 +1,14 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+asflags: []
+build-type: start-file
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+enabled-by: true
+includes: []
+install-path: ${BSP_LIBDIR}
+links: []
+source:
+- bsps/powerpc/gen83xx/start/start.S
+target: start.o
+type: build
diff --git a/spec/build/bsps/powerpc/grp.yml b/spec/build/bsps/powerpc/grp.yml
new file mode 100644
index 0000000000..d10b1c7bb5
--- /dev/null
+++ b/spec/build/bsps/powerpc/grp.yml
@@ -0,0 +1,91 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: group
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+enabled-by: true
+includes: []
+install:
+- destination: ${BSP_INCLUDEDIR}
+ source:
+ - bsps/powerpc/include/ictrl.h
+ - bsps/powerpc/include/mpc5xx.h
+ - bsps/powerpc/include/mpc8260.h
+ - bsps/powerpc/include/mpc8xx.h
+ - bsps/powerpc/include/nvram.h
+- destination: ${BSP_INCLUDEDIR}/bsp
+ source:
+ - bsps/powerpc/include/bsp/VME.h
+ - bsps/powerpc/include/bsp/VMEDMA.h
+ - bsps/powerpc/include/bsp/bspVmeDmaList.h
+ - bsps/powerpc/include/bsp/consoleIo.h
+ - bsps/powerpc/include/bsp/flashPgm.h
+ - bsps/powerpc/include/bsp/flashPgmPvt.h
+ - bsps/powerpc/include/bsp/irq_supp.h
+ - bsps/powerpc/include/bsp/linker-symbols.h
+ - bsps/powerpc/include/bsp/motorola.h
+ - bsps/powerpc/include/bsp/openpic.h
+ - bsps/powerpc/include/bsp/pci.h
+ - bsps/powerpc/include/bsp/pnp.h
+ - bsps/powerpc/include/bsp/residual.h
+ - bsps/powerpc/include/bsp/start.h
+ - bsps/powerpc/include/bsp/tictac.h
+ - bsps/powerpc/include/bsp/tsec.h
+ - bsps/powerpc/include/bsp/u-boot-board-info.h
+ - bsps/powerpc/include/bsp/uart.h
+ - bsps/powerpc/include/bsp/vectors.h
+ - bsps/powerpc/include/bsp/vmeTsi148.h
+ - bsps/powerpc/include/bsp/vmeTsi148DMA.h
+ - bsps/powerpc/include/bsp/vmeUniverse.h
+ - bsps/powerpc/include/bsp/vmeUniverseDMA.h
+ - bsps/powerpc/include/bsp/vme_am_defs.h
+ - bsps/powerpc/include/bsp/vpd.h
+- destination: ${BSP_INCLUDEDIR}/libcpu
+ source:
+ - bsps/powerpc/include/libcpu/bat.h
+ - bsps/powerpc/include/libcpu/byteorder.h
+ - bsps/powerpc/include/libcpu/c_clock.h
+ - bsps/powerpc/include/libcpu/cpuIdent.h
+ - bsps/powerpc/include/libcpu/e500_mmu.h
+ - bsps/powerpc/include/libcpu/io.h
+ - bsps/powerpc/include/libcpu/irq.h
+ - bsps/powerpc/include/libcpu/mmu.h
+ - bsps/powerpc/include/libcpu/pgtable.h
+ - bsps/powerpc/include/libcpu/powerpc-utility.h
+ - bsps/powerpc/include/libcpu/pte121.h
+ - bsps/powerpc/include/libcpu/raw_exception.h
+ - bsps/powerpc/include/libcpu/spr.h
+ - bsps/powerpc/include/libcpu/stackTrace.h
+ - bsps/powerpc/include/libcpu/vectors.h
+- destination: ${BSP_INCLUDEDIR}/mpc5xx
+ source:
+ - bsps/powerpc/include/mpc5xx/console.h
+- destination: ${BSP_INCLUDEDIR}/mpc8260
+ source:
+ - bsps/powerpc/include/mpc8260/console.h
+ - bsps/powerpc/include/mpc8260/cpm.h
+ - bsps/powerpc/include/mpc8260/mmu.h
+- destination: ${BSP_INCLUDEDIR}/mpc83xx
+ source:
+ - bsps/powerpc/include/mpc83xx/gtm.h
+ - bsps/powerpc/include/mpc83xx/mpc83xx.h
+ - bsps/powerpc/include/mpc83xx/mpc83xx_i2cdrv.h
+ - bsps/powerpc/include/mpc83xx/mpc83xx_spidrv.h
+- destination: ${BSP_INCLUDEDIR}/mpc8xx
+ source:
+ - bsps/powerpc/include/mpc8xx/console.h
+ - bsps/powerpc/include/mpc8xx/cpm.h
+ - bsps/powerpc/include/mpc8xx/mmu.h
+- destination: ${BSP_INCLUDEDIR}/ppc4xx
+ source:
+ - bsps/powerpc/include/ppc4xx/ppc405ex.h
+ - bsps/powerpc/include/ppc4xx/ppc405gp.h
+- destination: ${BSP_INCLUDEDIR}/rtems/powerpc
+ source:
+ - bsps/powerpc/include/rtems/powerpc/cache.h
+ - bsps/powerpc/include/rtems/powerpc/debugmod.h
+ - bsps/powerpc/include/rtems/powerpc/powerpc.h
+ldflags: []
+links: []
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/bsps/powerpc/haleakala/abi.yml b/spec/build/bsps/powerpc/haleakala/abi.yml
new file mode 100644
index 0000000000..1fc318b3cb
--- /dev/null
+++ b/spec/build/bsps/powerpc/haleakala/abi.yml
@@ -0,0 +1,18 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+actions:
+- get-string: null
+- split: null
+- env-append: null
+build-type: option
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+default:
+- -Dppc405
+- -mcpu=405
+default-by-variant: []
+description: |
+ ABI flags
+enabled-by: true
+links: []
+name: ABI_FLAGS
+type: build
diff --git a/spec/build/bsps/powerpc/haleakala/bsphaleakala.yml b/spec/build/bsps/powerpc/haleakala/bsphaleakala.yml
new file mode 100644
index 0000000000..8076f1f55f
--- /dev/null
+++ b/spec/build/bsps/powerpc/haleakala/bsphaleakala.yml
@@ -0,0 +1,70 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+arch: powerpc
+bsp: haleakala
+build-type: bsp
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+enabled-by: true
+family: haleakala
+includes: []
+install:
+- destination: ${BSP_INCLUDEDIR}
+ source:
+ - bsps/powerpc/haleakala/include/bsp.h
+ - bsps/powerpc/haleakala/include/mmu_405.h
+ - bsps/powerpc/haleakala/include/tm27.h
+- destination: ${BSP_INCLUDEDIR}/bsp
+ source:
+ - bsps/powerpc/haleakala/include/bsp/irq.h
+- destination: ${BSP_LIBDIR}
+ source:
+ - bsps/powerpc/haleakala/start/linkcmds
+links:
+- role: build-dependency
+ uid: ../../obj
+- role: build-dependency
+ uid: ../../objirqdflt
+- role: build-dependency
+ uid: ../../opto1
+- role: build-dependency
+ uid: ../crti
+- role: build-dependency
+ uid: ../crtn
+- role: build-dependency
+ uid: ../grp
+- role: build-dependency
+ uid: abi
+- role: build-dependency
+ uid: objnet
+- role: build-dependency
+ uid: optsprg
+- role: build-dependency
+ uid: optvecbase
+- role: build-dependency
+ uid: start
+- role: build-dependency
+ uid: ../obj
+- role: build-dependency
+ uid: ../objexc
+- role: build-dependency
+ uid: ../../bspopts
+source:
+- bsps/powerpc/haleakala/irq/irq.c
+- bsps/powerpc/haleakala/irq/irq_init.c
+- bsps/powerpc/haleakala/start/bspstart.c
+- bsps/powerpc/haleakala/start/mmu_405.c
+- bsps/powerpc/haleakala/start/mmu_405asm.S
+- bsps/powerpc/shared/btimer/btimer-ppc-dec.c
+- bsps/powerpc/shared/cache/cache.c
+- bsps/powerpc/shared/clock/clock-ppc403.c
+- bsps/powerpc/shared/console/console.c
+- bsps/powerpc/shared/console/uart.c
+- bsps/powerpc/shared/irq/ppc-irq-legacy.c
+- bsps/shared/dev/getentropy/getentropy-cpucounter.c
+- bsps/shared/start/bspfatal-default.c
+- bsps/shared/start/bspgetworkarea-default.c
+- bsps/shared/start/bspreset-loop.c
+- bsps/shared/start/sbrk.c
+type: build
diff --git a/spec/build/bsps/powerpc/haleakala/objnet.yml b/spec/build/bsps/powerpc/haleakala/objnet.yml
new file mode 100644
index 0000000000..c308d98009
--- /dev/null
+++ b/spec/build/bsps/powerpc/haleakala/objnet.yml
@@ -0,0 +1,16 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: objects
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by:
+- RTEMS_NETWORKING
+includes:
+- cpukit/libnetworking
+install: []
+links: []
+source:
+- bsps/powerpc/haleakala/net/network.c
+type: build
diff --git a/spec/build/bsps/powerpc/haleakala/optsprg.yml b/spec/build/bsps/powerpc/haleakala/optsprg.yml
new file mode 100644
index 0000000000..1e1a112f43
--- /dev/null
+++ b/spec/build/bsps/powerpc/haleakala/optsprg.yml
@@ -0,0 +1,15 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+actions:
+- get-boolean: null
+- define-condition: null
+build-type: option
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+default: true
+default-by-variant: []
+description: |
+ If defined, then the PowerPC specific code in RTEMS will use some of the special purpose registers to slightly optimize interrupt response time. The use of these registers can conflict with other tools like debuggers.
+enabled-by: true
+links: []
+name: PPC_USE_SPRG
+type: build
diff --git a/spec/build/bsps/powerpc/haleakala/optvecbase.yml b/spec/build/bsps/powerpc/haleakala/optvecbase.yml
new file mode 100644
index 0000000000..93812ff965
--- /dev/null
+++ b/spec/build/bsps/powerpc/haleakala/optvecbase.yml
@@ -0,0 +1,16 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+actions:
+- get-integer: null
+- define: null
+build-type: option
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+default: 256
+default-by-variant: []
+description: |
+ This defines the base address of the exception table. NOTE: Vectors are actually at 0xFFF00000 but file starts at offset.
+enabled-by: true
+format: '{:#010x}'
+links: []
+name: PPC_VECTOR_FILE_BASE
+type: build
diff --git a/spec/build/bsps/powerpc/haleakala/start.yml b/spec/build/bsps/powerpc/haleakala/start.yml
new file mode 100644
index 0000000000..204dfd4180
--- /dev/null
+++ b/spec/build/bsps/powerpc/haleakala/start.yml
@@ -0,0 +1,14 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+asflags: []
+build-type: start-file
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+enabled-by: true
+includes: []
+install-path: ${BSP_LIBDIR}
+links: []
+source:
+- bsps/powerpc/haleakala/start/start.S
+target: start.o
+type: build
diff --git a/spec/build/bsps/powerpc/motld.yml b/spec/build/bsps/powerpc/motld.yml
new file mode 100644
index 0000000000..aa9b908403
--- /dev/null
+++ b/spec/build/bsps/powerpc/motld.yml
@@ -0,0 +1,28 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+asflags: []
+build-type: script
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+do-build: |
+ preload_o = "bsps/powerpc/shared/start/preload.o"
+ self.asm(bld, bic, "bsps/powerpc/shared/start/preload.S", preload_o)
+ vectors_entry_o = "bsps/powerpc/shared/start/vectors_entry.o"
+ self.asm(
+ bld, bic, "bsps/powerpc/shared/start/vectors_entry.S", vectors_entry_o
+ )
+ target = "motld_start.o"
+ bld(
+ before=["cstlib"],
+ rule="${LD} -o ${TGT} -r ${SRC}",
+ source=[preload_o, vectors_entry_o, "start.o"],
+ target=target,
+ )
+ bld.install_files("${BSP_LIBDIR}", target)
+do-configure: null
+enabled-by: true
+includes: []
+links: []
+prepare-build: null
+prepare-configure: null
+type: build
diff --git a/spec/build/bsps/powerpc/motorola_powerpc/abi.yml b/spec/build/bsps/powerpc/motorola_powerpc/abi.yml
new file mode 100644
index 0000000000..5e1d47b169
--- /dev/null
+++ b/spec/build/bsps/powerpc/motorola_powerpc/abi.yml
@@ -0,0 +1,40 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+actions:
+- get-string: null
+- split: null
+- env-append: null
+build-type: option
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+default:
+- -mcpu=603e
+default-by-variant:
+- value:
+ - -mcpu=7400
+ - -mmultiple
+ - -mstrict-align
+ variants:
+ - powerpc/qemuprep-altivec
+- value:
+ - -mcpu=powerpc
+ - -mmultiple
+ - -mstrict-align
+ variants:
+ - powerpc/qemuprep
+- value:
+ - -mcpu=604
+ - -mmultiple
+ - -mstrict-align
+ - -meabi
+ variants:
+ - powerpc/mvme2307
+- value:
+ - -mcpu=750
+ variants:
+ - powerpc/mcp750
+description: |
+ ABI flags
+enabled-by: true
+links: []
+name: ABI_FLAGS
+type: build
diff --git a/spec/build/bsps/powerpc/motorola_powerpc/boot.yml b/spec/build/bsps/powerpc/motorola_powerpc/boot.yml
new file mode 100644
index 0000000000..8c8c0eb372
--- /dev/null
+++ b/spec/build/bsps/powerpc/motorola_powerpc/boot.yml
@@ -0,0 +1,49 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: script
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+do-build: |
+ def cc(self, bld, bic, flags, source):
+ root, ext = os.path.splitext(source)
+ target = root + ".o"
+ bld(
+ features="asm c",
+ includes=bic.includes,
+ rule="${CC} " + flags + " ${CPPFLAGS} ${DEFINES_ST:DEFINES} ${CPPPATH_ST:INCPATHS} -c ${SRC} -o ${TGT}",
+ source=source,
+ target=target,
+ )
+ return target
+ flags = "-D__BOOT__ -mrelocatable"
+ for f in bld.env.ABI_FLAGS:
+ if f != "-meabi":
+ flags += " " + f
+ asmflags = "-DASM " + flags
+ cflags = "-msoft-float -mstrict-align -fno-builtin -Wall -mmultiple -O2 -fomit-frame-pointer -ffixed-r13 -mno-sdata " + flags
+ source = []
+ source.append(cc(self, bld, bic, asmflags, "bsps/powerpc/motorola_powerpc/bootloader/head.S"))
+ source.append(cc(self, bld, bic, asmflags, "bsps/powerpc/motorola_powerpc/bootloader/exception.S"))
+ source.append(cc(self, bld, bic, asmflags, "bsps/powerpc/motorola_powerpc/bootloader/em86real.S"))
+ source.append(cc(self, bld, bic, cflags, "bsps/powerpc/motorola_powerpc/bootloader/misc.c"))
+ source.append(cc(self, bld, bic, cflags, "bsps/powerpc/motorola_powerpc/bootloader/pci.c"))
+ source.append(cc(self, bld, bic, cflags, "bsps/powerpc/motorola_powerpc/bootloader/zlib.c"))
+ source.append(cc(self, bld, bic, cflags, "bsps/powerpc/motorola_powerpc/bootloader/mm.c"))
+ source.append(cc(self, bld, bic, cflags, "bsps/powerpc/motorola_powerpc/bootloader/em86.c"))
+ source.append(cc(self, bld, bic, cflags, "bsps/powerpc/motorola_powerpc/console/polled_io.c"))
+ source.append(cc(self, bld, bic, cflags, "bsps/powerpc/motorola_powerpc/bootloader/lib.c"))
+ target = "bootloader.o"
+ bld(
+ rule="${LD} -o ${TGT} -r ${SRC}",
+ source=source,
+ target=target,
+ )
+ bld.install_files(
+ "${BSP_LIBDIR}",
+ [target, "bsps/powerpc/motorola_powerpc/bootloader/ppcboot.lds"],
+ )
+do-configure: null
+enabled-by: true
+links: []
+prepare-build: null
+prepare-configure: null
+type: build
diff --git a/spec/build/bsps/powerpc/motorola_powerpc/bspmcp750.yml b/spec/build/bsps/powerpc/motorola_powerpc/bspmcp750.yml
new file mode 100644
index 0000000000..274c418212
--- /dev/null
+++ b/spec/build/bsps/powerpc/motorola_powerpc/bspmcp750.yml
@@ -0,0 +1,19 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+arch: powerpc
+bsp: mcp750
+build-type: bsp
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+enabled-by: true
+family: motorola_powerpc
+includes: []
+install: []
+links:
+- role: build-dependency
+ uid: ../../opto2
+- role: build-dependency
+ uid: grp
+source: []
+type: build
diff --git a/spec/build/bsps/powerpc/motorola_powerpc/bspmtx603e.yml b/spec/build/bsps/powerpc/motorola_powerpc/bspmtx603e.yml
new file mode 100644
index 0000000000..5564ae1d9f
--- /dev/null
+++ b/spec/build/bsps/powerpc/motorola_powerpc/bspmtx603e.yml
@@ -0,0 +1,19 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+arch: powerpc
+bsp: mtx603e
+build-type: bsp
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+enabled-by: true
+family: motorola_powerpc
+includes: []
+install: []
+links:
+- role: build-dependency
+ uid: ../../opto2
+- role: build-dependency
+ uid: grp
+source: []
+type: build
diff --git a/spec/build/bsps/powerpc/motorola_powerpc/bspmvme2100.yml b/spec/build/bsps/powerpc/motorola_powerpc/bspmvme2100.yml
new file mode 100644
index 0000000000..46bdc8933f
--- /dev/null
+++ b/spec/build/bsps/powerpc/motorola_powerpc/bspmvme2100.yml
@@ -0,0 +1,19 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+arch: powerpc
+bsp: mvme2100
+build-type: bsp
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+enabled-by: true
+family: motorola_powerpc
+includes: []
+install: []
+links:
+- role: build-dependency
+ uid: ../../opto2
+- role: build-dependency
+ uid: grp
+source: []
+type: build
diff --git a/spec/build/bsps/powerpc/motorola_powerpc/bspmvme2307.yml b/spec/build/bsps/powerpc/motorola_powerpc/bspmvme2307.yml
new file mode 100644
index 0000000000..8abf0d8afa
--- /dev/null
+++ b/spec/build/bsps/powerpc/motorola_powerpc/bspmvme2307.yml
@@ -0,0 +1,19 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+arch: powerpc
+bsp: mvme2307
+build-type: bsp
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+enabled-by: true
+family: motorola_powerpc
+includes: []
+install: []
+links:
+- role: build-dependency
+ uid: ../../opto2
+- role: build-dependency
+ uid: grp
+source: []
+type: build
diff --git a/spec/build/bsps/powerpc/motorola_powerpc/bspqemu.yml b/spec/build/bsps/powerpc/motorola_powerpc/bspqemu.yml
new file mode 100644
index 0000000000..eacdc84750
--- /dev/null
+++ b/spec/build/bsps/powerpc/motorola_powerpc/bspqemu.yml
@@ -0,0 +1,19 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+arch: powerpc
+bsp: qemuprep-altivec
+build-type: bsp
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+enabled-by: true
+family: motorola_powerpc
+includes: []
+install: []
+links:
+- role: build-dependency
+ uid: ../../opto2
+- role: build-dependency
+ uid: grp
+source: []
+type: build
diff --git a/spec/build/bsps/powerpc/motorola_powerpc/bspqemualtivec.yml b/spec/build/bsps/powerpc/motorola_powerpc/bspqemualtivec.yml
new file mode 100644
index 0000000000..eacdc84750
--- /dev/null
+++ b/spec/build/bsps/powerpc/motorola_powerpc/bspqemualtivec.yml
@@ -0,0 +1,19 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+arch: powerpc
+bsp: qemuprep-altivec
+build-type: bsp
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+enabled-by: true
+family: motorola_powerpc
+includes: []
+install: []
+links:
+- role: build-dependency
+ uid: ../../opto2
+- role: build-dependency
+ uid: grp
+source: []
+type: build
diff --git a/spec/build/bsps/powerpc/motorola_powerpc/grp.yml b/spec/build/bsps/powerpc/motorola_powerpc/grp.yml
new file mode 100644
index 0000000000..f256fec10f
--- /dev/null
+++ b/spec/build/bsps/powerpc/motorola_powerpc/grp.yml
@@ -0,0 +1,56 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: group
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+enabled-by: true
+includes: []
+install: []
+ldflags: []
+links:
+- role: build-dependency
+ uid: ../../obj
+- role: build-dependency
+ uid: ../../objirqdflt
+- role: build-dependency
+ uid: ../crti
+- role: build-dependency
+ uid: ../crtn
+- role: build-dependency
+ uid: ../grp
+- role: build-dependency
+ uid: abi
+- role: build-dependency
+ uid: obj
+- role: build-dependency
+ uid: objqemunet
+- role: build-dependency
+ uid: optmpc603e
+- role: build-dependency
+ uid: optmpc750
+- role: build-dependency
+ uid: optmpc8240
+- role: build-dependency
+ uid: optmvme2100
+- role: build-dependency
+ uid: optqemu
+- role: build-dependency
+ uid: optsbrk
+- role: build-dependency
+ uid: boot
+- role: build-dependency
+ uid: qemufakerom
+- role: build-dependency
+ uid: ../obj
+- role: build-dependency
+ uid: ../objexc
+- role: build-dependency
+ uid: ../objvme
+- role: build-dependency
+ uid: ../start
+- role: build-dependency
+ uid: ../vecentry
+- role: build-dependency
+ uid: ../../bspopts
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/bsps/powerpc/motorola_powerpc/obj.yml b/spec/build/bsps/powerpc/motorola_powerpc/obj.yml
new file mode 100644
index 0000000000..07ee6fa721
--- /dev/null
+++ b/spec/build/bsps/powerpc/motorola_powerpc/obj.yml
@@ -0,0 +1,61 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: objects
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by: true
+includes: []
+install:
+- destination: ${BSP_INCLUDEDIR}
+ source:
+ - bsps/powerpc/motorola_powerpc/include/bsp.h
+ - bsps/powerpc/motorola_powerpc/include/tm27.h
+- destination: ${BSP_INCLUDEDIR}/bsp
+ source:
+ - bsps/powerpc/motorola_powerpc/include/bsp/VMEConfig.h
+ - bsps/powerpc/motorola_powerpc/include/bsp/irq.h
+- destination: ${BSP_LIBDIR}
+ source:
+ - bsps/powerpc/motorola_powerpc/start/linkcmds
+ - bsps/powerpc/shared/start/linkcmds.share
+links: []
+source:
+- bsps/powerpc/motorola_powerpc/console/polled_io.c
+- bsps/powerpc/motorola_powerpc/start/bspreset.c
+- bsps/powerpc/motorola_powerpc/start/bspstart.c
+- bsps/powerpc/motorola_powerpc/start/motorola.c
+- bsps/powerpc/motorola_powerpc/start/residual.c
+- bsps/powerpc/shared/altivec/vec_sup.c
+- bsps/powerpc/shared/altivec/vec_sup_asm.S
+- bsps/powerpc/shared/btimer/btimer-ppc-dec.c
+- bsps/powerpc/shared/cache/cache.c
+- bsps/powerpc/shared/clock/clock-ppc-dec.c
+- bsps/powerpc/shared/clock/p_clock.c
+- bsps/powerpc/shared/console/console.c
+- bsps/powerpc/shared/console/uart.c
+- bsps/powerpc/shared/irq/i8259.c
+- bsps/powerpc/shared/irq/irq_init.c
+- bsps/powerpc/shared/irq/openpic.c
+- bsps/powerpc/shared/irq/openpic_i8259_irq.c
+- bsps/powerpc/shared/irq/ppc-irq-legacy.c
+- bsps/powerpc/shared/mmu/bat.c
+- bsps/powerpc/shared/mmu/mmuAsm.S
+- bsps/powerpc/shared/mmu/pte121.c
+- bsps/powerpc/shared/pci/detect_raven_bridge.c
+- bsps/powerpc/shared/pci/generic_clear_hberrs.c
+- bsps/powerpc/shared/pci/pci.c
+- bsps/powerpc/shared/pci/pcifinddevice.c
+- bsps/powerpc/shared/rtc/todcfg.c
+- bsps/powerpc/shared/start/bspgetworkarea.c
+- bsps/powerpc/shared/start/pgtbl_activate.c
+- bsps/powerpc/shared/start/pgtbl_setup.c
+- bsps/powerpc/shared/start/ppc_idle.c
+- bsps/powerpc/shared/start/sbrk.c
+- bsps/powerpc/shared/start/showbats.c
+- bsps/powerpc/shared/start/zerobss.c
+- bsps/shared/dev/getentropy/getentropy-cpucounter.c
+- bsps/shared/dev/rtc/rtc-support.c
+- bsps/shared/start/bspfatal-default.c
+type: build
diff --git a/spec/build/bsps/powerpc/motorola_powerpc/objqemunet.yml b/spec/build/bsps/powerpc/motorola_powerpc/objqemunet.yml
new file mode 100644
index 0000000000..f3cd85b6b9
--- /dev/null
+++ b/spec/build/bsps/powerpc/motorola_powerpc/objqemunet.yml
@@ -0,0 +1,18 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: objects
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by:
+- and:
+ - qemuprep
+ - RTEMS_NETWORKING
+includes:
+- cpukit/libnetworking
+install: []
+links: []
+source:
+- bsps/i386/pc386/net/ne2000.c
+type: build
diff --git a/spec/build/bsps/powerpc/motorola_powerpc/optmpc603e.yml b/spec/build/bsps/powerpc/motorola_powerpc/optmpc603e.yml
new file mode 100644
index 0000000000..509f6c9c8a
--- /dev/null
+++ b/spec/build/bsps/powerpc/motorola_powerpc/optmpc603e.yml
@@ -0,0 +1,21 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+actions:
+- get-boolean: null
+- define-condition: null
+build-type: option
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+default: false
+default-by-variant:
+- value: true
+ variants:
+ - powerpc/mtx603e
+- value: true
+ variants:
+ - powerpc/mvme2100
+description: |
+ Define when ppc603e -- undefined for others
+enabled-by: true
+links: []
+name: mpc603e
+type: build
diff --git a/spec/build/bsps/powerpc/motorola_powerpc/optmpc750.yml b/spec/build/bsps/powerpc/motorola_powerpc/optmpc750.yml
new file mode 100644
index 0000000000..d132c17552
--- /dev/null
+++ b/spec/build/bsps/powerpc/motorola_powerpc/optmpc750.yml
@@ -0,0 +1,18 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+actions:
+- get-boolean: null
+- define-condition: null
+build-type: option
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+default: false
+default-by-variant:
+- value: true
+ variants:
+ - powerpc/mcp750
+description: |
+ Define when mpc750 -- undefined for others
+enabled-by: true
+links: []
+name: mpc750
+type: build
diff --git a/spec/build/bsps/powerpc/motorola_powerpc/optmpc8240.yml b/spec/build/bsps/powerpc/motorola_powerpc/optmpc8240.yml
new file mode 100644
index 0000000000..5cc6475589
--- /dev/null
+++ b/spec/build/bsps/powerpc/motorola_powerpc/optmpc8240.yml
@@ -0,0 +1,18 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+actions:
+- get-boolean: null
+- define-condition: null
+build-type: option
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+default: false
+default-by-variant:
+- value: true
+ variants:
+ - powerpc/mvme2100
+description: |
+ Defined for boards with MPC8240 -- undefined for others
+enabled-by: true
+links: []
+name: mpc8240
+type: build
diff --git a/spec/build/bsps/powerpc/motorola_powerpc/optmvme2100.yml b/spec/build/bsps/powerpc/motorola_powerpc/optmvme2100.yml
new file mode 100644
index 0000000000..2443f4bfe8
--- /dev/null
+++ b/spec/build/bsps/powerpc/motorola_powerpc/optmvme2100.yml
@@ -0,0 +1,18 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+actions:
+- get-boolean: null
+- define-condition: null
+build-type: option
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+default: false
+default-by-variant:
+- value: true
+ variants:
+ - powerpc/mvme2100
+description: |
+ Defined for MVME2100 -- undefined for others
+enabled-by: true
+links: []
+name: mvme2100
+type: build
diff --git a/spec/build/bsps/powerpc/motorola_powerpc/optqemu.yml b/spec/build/bsps/powerpc/motorola_powerpc/optqemu.yml
new file mode 100644
index 0000000000..962584da83
--- /dev/null
+++ b/spec/build/bsps/powerpc/motorola_powerpc/optqemu.yml
@@ -0,0 +1,18 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+actions:
+- get-boolean: null
+- define-condition: null
+build-type: option
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+default: false
+default-by-variant:
+- value: true
+ variants:
+ - powerpc/qemuprep.*
+description: |
+ Defined for QEMU BSP -- undefined for others
+enabled-by: true
+links: []
+name: qemu
+type: build
diff --git a/spec/build/bsps/powerpc/motorola_powerpc/optsbrk.yml b/spec/build/bsps/powerpc/motorola_powerpc/optsbrk.yml
new file mode 100644
index 0000000000..1018b3a4a1
--- /dev/null
+++ b/spec/build/bsps/powerpc/motorola_powerpc/optsbrk.yml
@@ -0,0 +1,15 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+actions:
+- get-boolean: null
+- define-condition: null
+build-type: option
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+default: true
+default-by-variant: []
+description: |
+ None
+enabled-by: true
+links: []
+name: CONFIGURE_MALLOC_BSP_SUPPORTS_SBRK
+type: build
diff --git a/spec/build/bsps/powerpc/motorola_powerpc/qemufakerom.yml b/spec/build/bsps/powerpc/motorola_powerpc/qemufakerom.yml
new file mode 100644
index 0000000000..09e7f318c5
--- /dev/null
+++ b/spec/build/bsps/powerpc/motorola_powerpc/qemufakerom.yml
@@ -0,0 +1,38 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: script
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+do-build: |
+ def cc(self, bld, bic, flags, source):
+ root, ext = os.path.splitext(source)
+ target = root + ".o"
+ bld(
+ features="asm c",
+ includes=bic.includes,
+ rule="${CC} ${CPPFLAGS} " + flags + " ${DEFINES_ST:DEFINES} ${CPPPATH_ST:INCPATHS} -c ${SRC} -o ${TGT}",
+ source=source,
+ target=target,
+ )
+ return target
+ fakerom_o = cc(self, bld, bic, "-DASM", "bsps/powerpc/motorola_powerpc/bootloader/qemu_fakerom.S")
+ fakeres_o = cc(self, bld, bic, "", "bsps/powerpc/motorola_powerpc/bootloader/qemu_fakeres.c")
+ rule = "${LD} -o ${TGT} ${SRC} -nostdlib -Ttext 0xfff00000 --section-start=.romentry=0xfffffffc"
+ elf = "qemu_fakerom.elf"
+ bld(
+ rule=rule,
+ source=[fakerom_o, fakeres_o],
+ target=elf,
+ )
+ bin = "qemu_fakerom.bin"
+ bld(
+ rule=rule + " --oformat binary",
+ source=[fakerom_o, fakeres_o],
+ target=bin,
+ )
+ bld.install_files("${BSP_LIBDIR}", [fakerom_o, elf, bin])
+do-configure: null
+enabled-by: true
+links: []
+prepare-build: null
+prepare-configure: null
+type: build
diff --git a/spec/build/bsps/powerpc/mpc55xxevb/abi.yml b/spec/build/bsps/powerpc/mpc55xxevb/abi.yml
new file mode 100644
index 0000000000..dca50fca94
--- /dev/null
+++ b/spec/build/bsps/powerpc/mpc55xxevb/abi.yml
@@ -0,0 +1,21 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+actions:
+- get-string: null
+- split: null
+- env-append: null
+build-type: option
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+default:
+- -mcpu=8540
+- -msoft-float
+- -meabi
+- -msdata=sysv
+- -mstrict-align
+default-by-variant: []
+description: |
+ ABI flags
+enabled-by: true
+links: []
+name: ABI_FLAGS
+type: build
diff --git a/spec/build/bsps/powerpc/mpc55xxevb/bspgwlcfm.yml b/spec/build/bsps/powerpc/mpc55xxevb/bspgwlcfm.yml
new file mode 100644
index 0000000000..ade116468e
--- /dev/null
+++ b/spec/build/bsps/powerpc/mpc55xxevb/bspgwlcfm.yml
@@ -0,0 +1,21 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+arch: powerpc
+bsp: gwlcfm
+build-type: bsp
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+enabled-by: true
+family: mpc55xxevb
+includes: []
+install: []
+links:
+- role: build-dependency
+ uid: ../../opto2
+- role: build-dependency
+ uid: grp
+- role: build-dependency
+ uid: tstgwlcfm
+source: []
+type: build
diff --git a/spec/build/bsps/powerpc/mpc55xxevb/bspmpc5566evb.yml b/spec/build/bsps/powerpc/mpc55xxevb/bspmpc5566evb.yml
new file mode 100644
index 0000000000..7763c79f4e
--- /dev/null
+++ b/spec/build/bsps/powerpc/mpc55xxevb/bspmpc5566evb.yml
@@ -0,0 +1,21 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+arch: powerpc
+bsp: mpc5566evb
+build-type: bsp
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+enabled-by: true
+family: mpc55xxevb
+includes: []
+install: []
+links:
+- role: build-dependency
+ uid: ../../opto2
+- role: build-dependency
+ uid: grp
+- role: build-dependency
+ uid: ../../tstsmallmem
+source: []
+type: build
diff --git a/spec/build/bsps/powerpc/mpc55xxevb/bspmpc5643levb.yml b/spec/build/bsps/powerpc/mpc55xxevb/bspmpc5643levb.yml
new file mode 100644
index 0000000000..a34997e6e4
--- /dev/null
+++ b/spec/build/bsps/powerpc/mpc55xxevb/bspmpc5643levb.yml
@@ -0,0 +1,21 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+arch: powerpc
+bsp: mpc5643l_evb
+build-type: bsp
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+enabled-by: true
+family: mpc55xxevb
+includes: []
+install: []
+links:
+- role: build-dependency
+ uid: ../../opto2
+- role: build-dependency
+ uid: grp
+- role: build-dependency
+ uid: tstmpc5643levb
+source: []
+type: build
diff --git a/spec/build/bsps/powerpc/mpc55xxevb/bspmpc5668g.yml b/spec/build/bsps/powerpc/mpc55xxevb/bspmpc5668g.yml
new file mode 100644
index 0000000000..7a838a44a5
--- /dev/null
+++ b/spec/build/bsps/powerpc/mpc55xxevb/bspmpc5668g.yml
@@ -0,0 +1,21 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+arch: powerpc
+bsp: mpc5668g
+build-type: bsp
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+enabled-by: true
+family: mpc55xxevb
+includes: []
+install: []
+links:
+- role: build-dependency
+ uid: ../../opto2
+- role: build-dependency
+ uid: grp
+- role: build-dependency
+ uid: ../../tstsmallmem
+source: []
+type: build
diff --git a/spec/build/bsps/powerpc/mpc55xxevb/bspmpc5674fevb.yml b/spec/build/bsps/powerpc/mpc55xxevb/bspmpc5674fevb.yml
new file mode 100644
index 0000000000..281f160aef
--- /dev/null
+++ b/spec/build/bsps/powerpc/mpc55xxevb/bspmpc5674fevb.yml
@@ -0,0 +1,21 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+arch: powerpc
+bsp: mpc5674fevb
+build-type: bsp
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+enabled-by: true
+family: mpc55xxevb
+includes: []
+install: []
+links:
+- role: build-dependency
+ uid: ../../opto2
+- role: build-dependency
+ uid: grp
+- role: build-dependency
+ uid: ../../tstsmallmem
+source: []
+type: build
diff --git a/spec/build/bsps/powerpc/mpc55xxevb/bspphycorempc5554.yml b/spec/build/bsps/powerpc/mpc55xxevb/bspphycorempc5554.yml
new file mode 100644
index 0000000000..af2069fa30
--- /dev/null
+++ b/spec/build/bsps/powerpc/mpc55xxevb/bspphycorempc5554.yml
@@ -0,0 +1,21 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+arch: powerpc
+bsp: phycore_mpc5554
+build-type: bsp
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+enabled-by: true
+family: mpc55xxevb
+includes: []
+install: []
+links:
+- role: build-dependency
+ uid: ../../opto2
+- role: build-dependency
+ uid: grp
+- role: build-dependency
+ uid: ../../tstsmallmem
+source: []
+type: build
diff --git a/spec/build/bsps/powerpc/mpc55xxevb/grp.yml b/spec/build/bsps/powerpc/mpc55xxevb/grp.yml
new file mode 100644
index 0000000000..d811ad6bbb
--- /dev/null
+++ b/spec/build/bsps/powerpc/mpc55xxevb/grp.yml
@@ -0,0 +1,112 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: group
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+enabled-by: true
+includes: []
+install: []
+ldflags: []
+links:
+- role: build-dependency
+ uid: ../../linkcmds
+- role: build-dependency
+ uid: ../../obj
+- role: build-dependency
+ uid: ../../objirq
+- role: build-dependency
+ uid: ../crti
+- role: build-dependency
+ uid: ../crtn
+- role: build-dependency
+ uid: ../grp
+- role: build-dependency
+ uid: abi
+- role: build-dependency
+ uid: obj
+- role: build-dependency
+ uid: objnet
+- role: build-dependency
+ uid: ofmpllptmfd
+- role: build-dependency
+ uid: optbootflg
+- role: build-dependency
+ uid: optcachewritethru
+- role: build-dependency
+ uid: optchipfam
+- role: build-dependency
+ uid: optchiptype
+- role: build-dependency
+ uid: optclkemios
+- role: build-dependency
+ uid: optclkpit
+- role: build-dependency
+ uid: optconbaud
+- role: build-dependency
+ uid: optconminor
+- role: build-dependency
+ uid: optearlystksz
+- role: build-dependency
+ uid: opteepromname
+- role: build-dependency
+ uid: opteeprompath
+- role: build-dependency
+ uid: optemiosprescal
+- role: build-dependency
+ uid: optenstartpro
+- role: build-dependency
+ uid: optesciirq
+- role: build-dependency
+ uid: optexcbooke
+- role: build-dependency
+ uid: optexcfixdhdlr
+- role: build-dependency
+ uid: optfmpllesyncr1
+- role: build-dependency
+ uid: optfmpllprediv
+- role: build-dependency
+ uid: optgwlcfm
+- role: build-dependency
+ uid: optirqtblsz
+- role: build-dependency
+ uid: optlowinit
+- role: build-dependency
+ uid: optmpc5566evb
+- role: build-dependency
+ uid: optmpc5674fevb
+- role: build-dependency
+ uid: optnullprot
+- role: build-dependency
+ uid: optphycorempc5554
+- role: build-dependency
+ uid: optrefclk
+- role: build-dependency
+ uid: optsmc91111
+- role: build-dependency
+ uid: optsmc9111enaddr
+- role: build-dependency
+ uid: optsmc9218ibige
+- role: build-dependency
+ uid: optsmc9218iled
+- role: build-dependency
+ uid: optsmc9218ipinirq
+- role: build-dependency
+ uid: optsmc9218ipinrst
+- role: build-dependency
+ uid: optsmc9218irxchn
+- role: build-dependency
+ uid: optsmc9218itxchn
+- role: build-dependency
+ uid: optsysclk
+- role: build-dependency
+ uid: optsysclkdiv
+- role: build-dependency
+ uid: start
+- role: build-dependency
+ uid: ../obj
+- role: build-dependency
+ uid: ../objexc
+- role: build-dependency
+ uid: ../../bspopts
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/bsps/powerpc/mpc55xxevb/obj.yml b/spec/build/bsps/powerpc/mpc55xxevb/obj.yml
new file mode 100644
index 0000000000..d6af1201ab
--- /dev/null
+++ b/spec/build/bsps/powerpc/mpc55xxevb/obj.yml
@@ -0,0 +1,97 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: objects
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by: true
+includes: []
+install:
+- destination: ${BSP_INCLUDEDIR}
+ source:
+ - bsps/powerpc/mpc55xxevb/include/bsp.h
+ - bsps/powerpc/mpc55xxevb/include/tm27.h
+- destination: ${BSP_INCLUDEDIR}/bsp
+ source:
+ - bsps/powerpc/mpc55xxevb/include/bsp/console-esci.h
+ - bsps/powerpc/mpc55xxevb/include/bsp/console-generic.h
+ - bsps/powerpc/mpc55xxevb/include/bsp/console-linflex.h
+ - bsps/powerpc/mpc55xxevb/include/bsp/irq.h
+ - bsps/powerpc/mpc55xxevb/include/bsp/mpc55xx-config.h
+ - bsps/powerpc/mpc55xxevb/include/bsp/smsc9218i.h
+- destination: ${BSP_INCLUDEDIR}/mpc55xx
+ source:
+ - bsps/powerpc/mpc55xxevb/include/mpc55xx/dspi.h
+ - bsps/powerpc/mpc55xxevb/include/mpc55xx/edma.h
+ - bsps/powerpc/mpc55xxevb/include/mpc55xx/emios.h
+ - bsps/powerpc/mpc55xxevb/include/mpc55xx/fsl-mpc551x.h
+ - bsps/powerpc/mpc55xxevb/include/mpc55xx/fsl-mpc555x.h
+ - bsps/powerpc/mpc55xxevb/include/mpc55xx/fsl-mpc556x.h
+ - bsps/powerpc/mpc55xxevb/include/mpc55xx/fsl-mpc564xL.h
+ - bsps/powerpc/mpc55xxevb/include/mpc55xx/fsl-mpc5668.h
+ - bsps/powerpc/mpc55xxevb/include/mpc55xx/fsl-mpc567x.h
+ - bsps/powerpc/mpc55xxevb/include/mpc55xx/mpc55xx.h
+ - bsps/powerpc/mpc55xxevb/include/mpc55xx/reg-defs.h
+ - bsps/powerpc/mpc55xxevb/include/mpc55xx/regs-edma.h
+ - bsps/powerpc/mpc55xxevb/include/mpc55xx/regs-mmu.h
+ - bsps/powerpc/mpc55xxevb/include/mpc55xx/regs.h
+ - bsps/powerpc/mpc55xxevb/include/mpc55xx/siu.h
+ - bsps/powerpc/mpc55xxevb/include/mpc55xx/watchdog.h
+- destination: ${BSP_LIBDIR}
+ source:
+ - bsps/powerpc/mpc55xxevb/start/linkcmds.gwlcfm
+ - bsps/powerpc/mpc55xxevb/start/linkcmds.mpc5566evb
+ - bsps/powerpc/mpc55xxevb/start/linkcmds.mpc55xx
+ - bsps/powerpc/mpc55xxevb/start/linkcmds.mpc5668g
+ - bsps/powerpc/mpc55xxevb/start/linkcmds.mpc5674fevb
+ - bsps/powerpc/mpc55xxevb/start/linkcmds.phycore_mpc5554
+ - bsps/powerpc/shared/start/linkcmds.base
+links: []
+source:
+- bsps/powerpc/gen83xx/dev/mpc83xx_i2cdrv.c
+- bsps/powerpc/mpc55xxevb/clock/clock-config.c
+- bsps/powerpc/mpc55xxevb/console/console-config.c
+- bsps/powerpc/mpc55xxevb/console/console-esci.c
+- bsps/powerpc/mpc55xxevb/console/console-generic.c
+- bsps/powerpc/mpc55xxevb/console/console-linflex.c
+- bsps/powerpc/mpc55xxevb/dev/dspi.c
+- bsps/powerpc/mpc55xxevb/i2c/i2c_init.c
+- bsps/powerpc/mpc55xxevb/start/bspgetworkarea.c
+- bsps/powerpc/mpc55xxevb/start/bspreset.c
+- bsps/powerpc/mpc55xxevb/start/bspstart.c
+- bsps/powerpc/mpc55xxevb/start/copy.S
+- bsps/powerpc/mpc55xxevb/start/edma.c
+- bsps/powerpc/mpc55xxevb/start/emios.c
+- bsps/powerpc/mpc55xxevb/start/exc-vector-base.S
+- bsps/powerpc/mpc55xxevb/start/flash_support.c
+- bsps/powerpc/mpc55xxevb/start/get-system-clock.c
+- bsps/powerpc/mpc55xxevb/start/idle-thread.c
+- bsps/powerpc/mpc55xxevb/start/irq.c
+- bsps/powerpc/mpc55xxevb/start/restart.c
+- bsps/powerpc/mpc55xxevb/start/sd-card-init.c
+- bsps/powerpc/mpc55xxevb/start/siu.c
+- bsps/powerpc/mpc55xxevb/start/start-cache.S
+- bsps/powerpc/mpc55xxevb/start/start-clock.c
+- bsps/powerpc/mpc55xxevb/start/start-config-clock.c
+- bsps/powerpc/mpc55xxevb/start/start-config-ebi-cs-cal.c
+- bsps/powerpc/mpc55xxevb/start/start-config-ebi-cs.c
+- bsps/powerpc/mpc55xxevb/start/start-config-ebi.c
+- bsps/powerpc/mpc55xxevb/start/start-config-mmu-early.c
+- bsps/powerpc/mpc55xxevb/start/start-config-mmu.c
+- bsps/powerpc/mpc55xxevb/start/start-config-siu-pcr.c
+- bsps/powerpc/mpc55xxevb/start/start-early.c
+- bsps/powerpc/mpc55xxevb/start/start-flash.S
+- bsps/powerpc/mpc55xxevb/start/start-prologue.c
+- bsps/powerpc/mpc55xxevb/start/start-watchdog.c
+- bsps/powerpc/shared/btimer/btimer-ppc-dec.c
+- bsps/powerpc/shared/cache/cache.c
+- bsps/powerpc/shared/exceptions/ppc-exc-handler-table.c
+- bsps/powerpc/shared/start/bsp-start-zero.S
+- bsps/powerpc/shared/start/memcpy.c
+- bsps/powerpc/shared/start/tictac.c
+- bsps/shared/dev/getentropy/getentropy-cpucounter.c
+- bsps/shared/irq/irq-default-handler.c
+- bsps/shared/start/bspfatal-default.c
+- bsps/shared/start/stackalloc.c
+type: build
diff --git a/spec/build/bsps/powerpc/mpc55xxevb/objnet.yml b/spec/build/bsps/powerpc/mpc55xxevb/objnet.yml
new file mode 100644
index 0000000000..e11e7e1de6
--- /dev/null
+++ b/spec/build/bsps/powerpc/mpc55xxevb/objnet.yml
@@ -0,0 +1,17 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: objects
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by:
+- RTEMS_NETWORKING
+includes:
+- cpukit/libnetworking
+install: []
+links: []
+source:
+- bsps/powerpc/mpc55xxevb/net/if_smc.c
+- bsps/powerpc/mpc55xxevb/net/smsc9218i.c
+type: build
diff --git a/spec/build/bsps/powerpc/mpc55xxevb/ofmpllptmfd.yml b/spec/build/bsps/powerpc/mpc55xxevb/ofmpllptmfd.yml
new file mode 100644
index 0000000000..8918318f51
--- /dev/null
+++ b/spec/build/bsps/powerpc/mpc55xxevb/ofmpllptmfd.yml
@@ -0,0 +1,25 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+actions:
+- get-integer: null
+- define: null
+build-type: option
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+default: 0
+default-by-variant:
+- value: 99
+ variants:
+ - powerpc/gwlcfm
+- value: 111
+ variants:
+ - powerpc/mpc5668g.*
+- value: 66
+ variants:
+ - powerpc/mpc5674f.*
+description: |
+ Must be defined to be the PLL multiplication factor for clock generation
+enabled-by: true
+format: '{}'
+links: []
+name: MPC55XX_FMPLL_MFD
+type: build
diff --git a/spec/build/bsps/powerpc/mpc55xxevb/optbootflg.yml b/spec/build/bsps/powerpc/mpc55xxevb/optbootflg.yml
new file mode 100644
index 0000000000..a0ae88fc13
--- /dev/null
+++ b/spec/build/bsps/powerpc/mpc55xxevb/optbootflg.yml
@@ -0,0 +1,15 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+actions:
+- get-boolean: null
+- define-condition: null
+build-type: option
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+default: false
+default-by-variant: []
+description: |
+ if defined, builds in bootflags above the RCHW for setup in a debugger to avoid startup MMU setup
+enabled-by: true
+links: []
+name: MPC55XX_BOOTFLAGS
+type: build
diff --git a/spec/build/bsps/powerpc/mpc55xxevb/optcachewritethru.yml b/spec/build/bsps/powerpc/mpc55xxevb/optcachewritethru.yml
new file mode 100644
index 0000000000..0311e556f4
--- /dev/null
+++ b/spec/build/bsps/powerpc/mpc55xxevb/optcachewritethru.yml
@@ -0,0 +1,15 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+actions:
+- get-boolean: null
+- define-condition: null
+build-type: option
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+default: false
+default-by-variant: []
+description: |
+ use write-through for data cache
+enabled-by: true
+links: []
+name: BSP_DATA_CACHE_USE_WRITE_THROUGH
+type: build
diff --git a/spec/build/bsps/powerpc/mpc55xxevb/optchipfam.yml b/spec/build/bsps/powerpc/mpc55xxevb/optchipfam.yml
new file mode 100644
index 0000000000..38a1e3aaf4
--- /dev/null
+++ b/spec/build/bsps/powerpc/mpc55xxevb/optchipfam.yml
@@ -0,0 +1,16 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+actions:
+- get-string: null
+- define-unquoted: null
+build-type: option
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+default: (MPC55XX_CHIP_TYPE / 10)
+default-by-variant: []
+description: |
+ specifies the chip family in use (e.g. 555 for MPC5554)
+enabled-by: true
+format: '{}'
+links: []
+name: MPC55XX_CHIP_FAMILY
+type: build
diff --git a/spec/build/bsps/powerpc/mpc55xxevb/optchiptype.yml b/spec/build/bsps/powerpc/mpc55xxevb/optchiptype.yml
new file mode 100644
index 0000000000..ae9ed015e7
--- /dev/null
+++ b/spec/build/bsps/powerpc/mpc55xxevb/optchiptype.yml
@@ -0,0 +1,31 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+actions:
+- get-integer: null
+- define: null
+build-type: option
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+default: 5554
+default-by-variant:
+- value: 5516
+ variants:
+ - powerpc/gwlcfm
+- value: 5566
+ variants:
+ - powerpc/mpc5566.*
+- value: 5643
+ variants:
+ - powerpc/mpc5643l.*
+- value: 5668
+ variants:
+ - powerpc/mpc5668g.*
+- value: 5674
+ variants:
+ - powerpc/mpc5674f.*
+description: |
+ specifies the chip type in use (e.g. 5554 for MPC5554)
+enabled-by: true
+format: '{}'
+links: []
+name: MPC55XX_CHIP_TYPE
+type: build
diff --git a/spec/build/bsps/powerpc/mpc55xxevb/optclkemios.yml b/spec/build/bsps/powerpc/mpc55xxevb/optclkemios.yml
new file mode 100644
index 0000000000..e60b33217e
--- /dev/null
+++ b/spec/build/bsps/powerpc/mpc55xxevb/optclkemios.yml
@@ -0,0 +1,25 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+actions:
+- get-integer: null
+- define: null
+build-type: option
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+default: 23
+default-by-variant:
+- value: null
+ variants:
+ - powerpc/mpc5643l.*
+- value: null
+ variants:
+ - powerpc/mpc5668g.*
+- value: 31
+ variants:
+ - powerpc/mpc5674f.*
+description: |
+ selects the eMIOS channel for the RTEMS system tick (the default is the last channel)
+enabled-by: true
+format: '{}'
+links: []
+name: MPC55XX_CLOCK_EMIOS_CHANNEL
+type: build
diff --git a/spec/build/bsps/powerpc/mpc55xxevb/optclkpit.yml b/spec/build/bsps/powerpc/mpc55xxevb/optclkpit.yml
new file mode 100644
index 0000000000..3edac8e3f0
--- /dev/null
+++ b/spec/build/bsps/powerpc/mpc55xxevb/optclkpit.yml
@@ -0,0 +1,22 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+actions:
+- get-integer: null
+- define: null
+build-type: option
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+default: null
+default-by-variant:
+- value: 3
+ variants:
+ - powerpc/mpc5643l.*
+- value: 8
+ variants:
+ - powerpc/mpc5668g.*
+description: |
+ selects the PIT channel for the RTEMS system tick (the default is the last channel)
+enabled-by: true
+format: '{}'
+links: []
+name: MPC55XX_CLOCK_PIT_CHANNEL
+type: build
diff --git a/spec/build/bsps/powerpc/mpc55xxevb/optconbaud.yml b/spec/build/bsps/powerpc/mpc55xxevb/optconbaud.yml
new file mode 100644
index 0000000000..bd26c32da6
--- /dev/null
+++ b/spec/build/bsps/powerpc/mpc55xxevb/optconbaud.yml
@@ -0,0 +1,16 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+actions:
+- get-integer: null
+- define: null
+build-type: option
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+default: 115200
+default-by-variant: []
+description: |
+ default console baud
+enabled-by: true
+format: '{}'
+links: []
+name: BSP_DEFAULT_BAUD_RATE
+type: build
diff --git a/spec/build/bsps/powerpc/mpc55xxevb/optconminor.yml b/spec/build/bsps/powerpc/mpc55xxevb/optconminor.yml
new file mode 100644
index 0000000000..99b03fbde1
--- /dev/null
+++ b/spec/build/bsps/powerpc/mpc55xxevb/optconminor.yml
@@ -0,0 +1,16 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+actions:
+- get-integer: null
+- define: null
+build-type: option
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+default: 0
+default-by-variant: []
+description: |
+ determines which serial device will be registered as /dev/console
+enabled-by: true
+format: '{}'
+links: []
+name: MPC55XX_CONSOLE_MINOR
+type: build
diff --git a/spec/build/bsps/powerpc/mpc55xxevb/optearlystksz.yml b/spec/build/bsps/powerpc/mpc55xxevb/optearlystksz.yml
new file mode 100644
index 0000000000..7c0c8a13a5
--- /dev/null
+++ b/spec/build/bsps/powerpc/mpc55xxevb/optearlystksz.yml
@@ -0,0 +1,16 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+actions:
+- get-integer: null
+- define: null
+build-type: option
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+default: 1024
+default-by-variant: []
+description: |
+ size of the early initialization stack in bytes
+enabled-by: true
+format: '{}'
+links: []
+name: MPC55XX_EARLY_STACK_SIZE
+type: build
diff --git a/spec/build/bsps/powerpc/mpc55xxevb/opteepromname.yml b/spec/build/bsps/powerpc/mpc55xxevb/opteepromname.yml
new file mode 100644
index 0000000000..0ad69134d4
--- /dev/null
+++ b/spec/build/bsps/powerpc/mpc55xxevb/opteepromname.yml
@@ -0,0 +1,19 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+actions:
+- get-string: null
+- define: null
+build-type: option
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+default: false
+default-by-variant:
+- value: eeprom
+ variants:
+ - powerpc/gwlcfm
+description: |
+ EEPROM name for LibI2C
+enabled-by: true
+format: '{}'
+links: []
+name: RTEMS_BSP_I2C_EEPROM_DEVICE_NAME
+type: build
diff --git a/spec/build/bsps/powerpc/mpc55xxevb/opteeprompath.yml b/spec/build/bsps/powerpc/mpc55xxevb/opteeprompath.yml
new file mode 100644
index 0000000000..1ee19aff5e
--- /dev/null
+++ b/spec/build/bsps/powerpc/mpc55xxevb/opteeprompath.yml
@@ -0,0 +1,19 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+actions:
+- get-string: null
+- define: null
+build-type: option
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+default: false
+default-by-variant:
+- value: /dev/i2c1.eeprom
+ variants:
+ - powerpc/gwlcfm
+description: |
+ EEPROM device file path
+enabled-by: true
+format: '{}'
+links: []
+name: RTEMS_BSP_I2C_EEPROM_DEVICE_PATH
+type: build
diff --git a/spec/build/bsps/powerpc/mpc55xxevb/optemiosprescal.yml b/spec/build/bsps/powerpc/mpc55xxevb/optemiosprescal.yml
new file mode 100644
index 0000000000..78bc00dff8
--- /dev/null
+++ b/spec/build/bsps/powerpc/mpc55xxevb/optemiosprescal.yml
@@ -0,0 +1,22 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+actions:
+- get-integer: null
+- define: null
+build-type: option
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+default: 0
+default-by-variant:
+- value: 66
+ variants:
+ - powerpc/gwlcfm
+- value: null
+ variants:
+ - powerpc/mpc5643l.*
+description: |
+ Must be defined to set the EMIOS prescaler
+enabled-by: true
+format: '{}'
+links: []
+name: MPC55XX_EMIOS_PRESCALER
+type: build
diff --git a/spec/build/bsps/powerpc/mpc55xxevb/optenstartpro.yml b/spec/build/bsps/powerpc/mpc55xxevb/optenstartpro.yml
new file mode 100644
index 0000000000..5fd2f8715b
--- /dev/null
+++ b/spec/build/bsps/powerpc/mpc55xxevb/optenstartpro.yml
@@ -0,0 +1,15 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+actions:
+- get-boolean: null
+- define-condition: null
+build-type: option
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+default: false
+default-by-variant: []
+description: |
+ if defined, enable start prologue
+enabled-by: true
+links: []
+name: MPC55XX_ENABLE_START_PROLOGUE
+type: build
diff --git a/spec/build/bsps/powerpc/mpc55xxevb/optesciirq.yml b/spec/build/bsps/powerpc/mpc55xxevb/optesciirq.yml
new file mode 100644
index 0000000000..9724bdfddf
--- /dev/null
+++ b/spec/build/bsps/powerpc/mpc55xxevb/optesciirq.yml
@@ -0,0 +1,15 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+actions:
+- get-boolean: null
+- define-condition: null
+build-type: option
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+default: true
+default-by-variant: []
+description: |
+ define to zero or one to disable or enable interrupts for the eSCI devices
+enabled-by: true
+links: []
+name: MPC55XX_ESCI_USE_INTERRUPTS
+type: build
diff --git a/spec/build/bsps/powerpc/mpc55xxevb/optexcbooke.yml b/spec/build/bsps/powerpc/mpc55xxevb/optexcbooke.yml
new file mode 100644
index 0000000000..e27cb4ab44
--- /dev/null
+++ b/spec/build/bsps/powerpc/mpc55xxevb/optexcbooke.yml
@@ -0,0 +1,15 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+actions:
+- get-boolean: null
+- define-condition: null
+build-type: option
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+default: true
+default-by-variant: []
+description: |
+ only support Book E exception types
+enabled-by: true
+links: []
+name: PPC_EXC_CONFIG_BOOKE_ONLY
+type: build
diff --git a/spec/build/bsps/powerpc/mpc55xxevb/optexcfixdhdlr.yml b/spec/build/bsps/powerpc/mpc55xxevb/optexcfixdhdlr.yml
new file mode 100644
index 0000000000..b636d8022b
--- /dev/null
+++ b/spec/build/bsps/powerpc/mpc55xxevb/optexcfixdhdlr.yml
@@ -0,0 +1,15 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+actions:
+- get-boolean: null
+- define-condition: null
+build-type: option
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+default: true
+default-by-variant: []
+description: |
+ use fixed high-level exception handler
+enabled-by: true
+links: []
+name: PPC_EXC_CONFIG_USE_FIXED_HANDLER
+type: build
diff --git a/spec/build/bsps/powerpc/mpc55xxevb/optfmpllesyncr1.yml b/spec/build/bsps/powerpc/mpc55xxevb/optfmpllesyncr1.yml
new file mode 100644
index 0000000000..12e8d37ab5
--- /dev/null
+++ b/spec/build/bsps/powerpc/mpc55xxevb/optfmpllesyncr1.yml
@@ -0,0 +1,16 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+actions:
+- get-integer: null
+- define: null
+build-type: option
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+default: 7
+default-by-variant: []
+description: |
+ the FMPLL ESYNCR1[CLKCFG] value
+enabled-by: true
+format: '{}'
+links: []
+name: MPC55XX_FMPLL_ESYNCR1_CLKCFG
+type: build
diff --git a/spec/build/bsps/powerpc/mpc55xxevb/optfmpllprediv.yml b/spec/build/bsps/powerpc/mpc55xxevb/optfmpllprediv.yml
new file mode 100644
index 0000000000..fe81e18515
--- /dev/null
+++ b/spec/build/bsps/powerpc/mpc55xxevb/optfmpllprediv.yml
@@ -0,0 +1,25 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+actions:
+- get-integer: null
+- define: null
+build-type: option
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+default: 0
+default-by-variant:
+- value: 10
+ variants:
+ - powerpc/gwlcfm
+- value: 6
+ variants:
+ - powerpc/mpc5668g.*
+- value: 5
+ variants:
+ - powerpc/mpc5674f.*
+description: |
+ Must be defined to be the PLL predivider factor for clock generation
+enabled-by: true
+format: '{}'
+links: []
+name: MPC55XX_FMPLL_PREDIV
+type: build
diff --git a/spec/build/bsps/powerpc/mpc55xxevb/optgwlcfm.yml b/spec/build/bsps/powerpc/mpc55xxevb/optgwlcfm.yml
new file mode 100644
index 0000000000..a525ccf854
--- /dev/null
+++ b/spec/build/bsps/powerpc/mpc55xxevb/optgwlcfm.yml
@@ -0,0 +1,18 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+actions:
+- get-boolean: null
+- define-condition: null
+build-type: option
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+default: false
+default-by-variant:
+- value: true
+ variants:
+ - powerpc/gwlcfm
+description: |
+ if defined, use custom settings for GWLCFM board
+enabled-by: true
+links: []
+name: MPC55XX_BOARD_GWLCFM
+type: build
diff --git a/spec/build/bsps/powerpc/mpc55xxevb/optirqtblsz.yml b/spec/build/bsps/powerpc/mpc55xxevb/optirqtblsz.yml
new file mode 100644
index 0000000000..70b5fd0f25
--- /dev/null
+++ b/spec/build/bsps/powerpc/mpc55xxevb/optirqtblsz.yml
@@ -0,0 +1,25 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+actions:
+- get-integer: null
+- define: null
+build-type: option
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+default: 63
+default-by-variant:
+- value: 127
+ variants:
+ - powerpc/mpc5643l.*
+- value: 127
+ variants:
+ - powerpc/mpc5566.*
+- value: 255
+ variants:
+ - powerpc/mpc5674f.*
+description: |
+ defines the maximum number of interrupt handlers
+enabled-by: true
+format: '{}'
+links: []
+name: BSP_INTERRUPT_HANDLER_TABLE_SIZE
+type: build
diff --git a/spec/build/bsps/powerpc/mpc55xxevb/optlowinit.yml b/spec/build/bsps/powerpc/mpc55xxevb/optlowinit.yml
new file mode 100644
index 0000000000..615b68cdf9
--- /dev/null
+++ b/spec/build/bsps/powerpc/mpc55xxevb/optlowinit.yml
@@ -0,0 +1,18 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+actions:
+- get-boolean: null
+- define-condition: null
+build-type: option
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+default: true
+default-by-variant:
+- value: false
+ variants:
+ - powerpc/mpc5674f_.*app
+description: |
+ if defined, do low level initialization
+enabled-by: true
+links: []
+name: MPC55XX_NEEDS_LOW_LEVEL_INIT
+type: build
diff --git a/spec/build/bsps/powerpc/mpc55xxevb/optmpc5566evb.yml b/spec/build/bsps/powerpc/mpc55xxevb/optmpc5566evb.yml
new file mode 100644
index 0000000000..46d39d959d
--- /dev/null
+++ b/spec/build/bsps/powerpc/mpc55xxevb/optmpc5566evb.yml
@@ -0,0 +1,18 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+actions:
+- get-boolean: null
+- define-condition: null
+build-type: option
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+default: false
+default-by-variant:
+- value: true
+ variants:
+ - powerpc/mpc5566evb.*
+description: |
+ if defined, use custom settings for MPC5566EVB board
+enabled-by: true
+links: []
+name: MPC55XX_BOARD_MPC5566EVB
+type: build
diff --git a/spec/build/bsps/powerpc/mpc55xxevb/optmpc5674fevb.yml b/spec/build/bsps/powerpc/mpc55xxevb/optmpc5674fevb.yml
new file mode 100644
index 0000000000..05679fadb3
--- /dev/null
+++ b/spec/build/bsps/powerpc/mpc55xxevb/optmpc5674fevb.yml
@@ -0,0 +1,18 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+actions:
+- get-boolean: null
+- define-condition: null
+build-type: option
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+default: false
+default-by-variant:
+- value: true
+ variants:
+ - powerpc/mpc5674fevb.*
+description: |
+ if defined, use custom settings for MPC5674FEVB board
+enabled-by: true
+links: []
+name: MPC55XX_BOARD_MPC5674FEVB
+type: build
diff --git a/spec/build/bsps/powerpc/mpc55xxevb/optnullprot.yml b/spec/build/bsps/powerpc/mpc55xxevb/optnullprot.yml
new file mode 100644
index 0000000000..27747835fc
--- /dev/null
+++ b/spec/build/bsps/powerpc/mpc55xxevb/optnullprot.yml
@@ -0,0 +1,21 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+actions:
+- get-boolean: null
+- define-condition: null
+build-type: option
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+default: false
+default-by-variant:
+- value: true
+ variants:
+ - powerpc/mpc5566.*
+- value: true
+ variants:
+ - powerpc/mpc5674f.*
+description: |
+ enable NULL pointer protection
+enabled-by: true
+links: []
+name: MPC55XX_NULL_POINTER_PROTECTION
+type: build
diff --git a/spec/build/bsps/powerpc/mpc55xxevb/optphycorempc5554.yml b/spec/build/bsps/powerpc/mpc55xxevb/optphycorempc5554.yml
new file mode 100644
index 0000000000..0452770f84
--- /dev/null
+++ b/spec/build/bsps/powerpc/mpc55xxevb/optphycorempc5554.yml
@@ -0,0 +1,18 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+actions:
+- get-boolean: null
+- define-condition: null
+build-type: option
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+default: false
+default-by-variant:
+- value: true
+ variants:
+ - powerpc/phycore_mpc5554
+description: |
+ if defined, use custom settings for phyCORE MPC5554 board
+enabled-by: true
+links: []
+name: MPC55XX_BOARD_PHYCORE_MPC5554
+type: build
diff --git a/spec/build/bsps/powerpc/mpc55xxevb/optrefclk.yml b/spec/build/bsps/powerpc/mpc55xxevb/optrefclk.yml
new file mode 100644
index 0000000000..6748954449
--- /dev/null
+++ b/spec/build/bsps/powerpc/mpc55xxevb/optrefclk.yml
@@ -0,0 +1,28 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+actions:
+- get-integer: null
+- define: null
+build-type: option
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+default: 8000000
+default-by-variant:
+- value: 40000000
+ variants:
+ - powerpc/gwlcfm
+- value: 40000000
+ variants:
+ - powerpc/mpc5643l_evb.*
+- value: 25000000
+ variants:
+ - powerpc/mpc5668g.*
+- value: 40000000
+ variants:
+ - powerpc/mpc5674f.*
+description: |
+ None
+enabled-by: true
+format: '{}'
+links: []
+name: MPC55XX_REFERENCE_CLOCK
+type: build
diff --git a/spec/build/bsps/powerpc/mpc55xxevb/optsmc91111.yml b/spec/build/bsps/powerpc/mpc55xxevb/optsmc91111.yml
new file mode 100644
index 0000000000..04a224edd0
--- /dev/null
+++ b/spec/build/bsps/powerpc/mpc55xxevb/optsmc91111.yml
@@ -0,0 +1,18 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+actions:
+- get-boolean: null
+- define-condition: null
+build-type: option
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+default: false
+default-by-variant:
+- value: true
+ variants:
+ - powerpc/phycore_mpc5554
+description: |
+ If defined the board has the SMC91111 networking chip.
+enabled-by: true
+links: []
+name: HAS_SMC91111
+type: build
diff --git a/spec/build/bsps/powerpc/mpc55xxevb/optsmc9111enaddr.yml b/spec/build/bsps/powerpc/mpc55xxevb/optsmc9111enaddr.yml
new file mode 100644
index 0000000000..3bb67b7621
--- /dev/null
+++ b/spec/build/bsps/powerpc/mpc55xxevb/optsmc9111enaddr.yml
@@ -0,0 +1,18 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+actions:
+- get-boolean: null
+- define-condition: null
+build-type: option
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+default: false
+default-by-variant:
+- value: true
+ variants:
+ - powerpc/phycore_mpc5554
+description: |
+ If defined the SMC91111 chip has the ethernet address loaded at reset.
+enabled-by: true
+links: []
+name: SMC91111_ENADDR_IS_SETUP
+type: build
diff --git a/spec/build/bsps/powerpc/mpc55xxevb/optsmc9218ibige.yml b/spec/build/bsps/powerpc/mpc55xxevb/optsmc9218ibige.yml
new file mode 100644
index 0000000000..bf47d9429c
--- /dev/null
+++ b/spec/build/bsps/powerpc/mpc55xxevb/optsmc9218ibige.yml
@@ -0,0 +1,15 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+actions:
+- get-boolean: null
+- define-condition: null
+build-type: option
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+default: false
+default-by-variant: []
+description: |
+ enable big endian support for SMSC9218I network interface
+enabled-by: true
+links: []
+name: SMSC9218I_BIG_ENDIAN_SUPPORT
+type: build
diff --git a/spec/build/bsps/powerpc/mpc55xxevb/optsmc9218iled.yml b/spec/build/bsps/powerpc/mpc55xxevb/optsmc9218iled.yml
new file mode 100644
index 0000000000..a3de39efac
--- /dev/null
+++ b/spec/build/bsps/powerpc/mpc55xxevb/optsmc9218iled.yml
@@ -0,0 +1,15 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+actions:
+- get-boolean: null
+- define-condition: null
+build-type: option
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+default: false
+default-by-variant: []
+description: |
+ enable LED outputs for SMSC9218I network interface
+enabled-by: true
+links: []
+name: SMSC9218I_ENABLE_LED_OUTPUTS
+type: build
diff --git a/spec/build/bsps/powerpc/mpc55xxevb/optsmc9218ipinirq.yml b/spec/build/bsps/powerpc/mpc55xxevb/optsmc9218ipinirq.yml
new file mode 100644
index 0000000000..1a339c7e72
--- /dev/null
+++ b/spec/build/bsps/powerpc/mpc55xxevb/optsmc9218ipinirq.yml
@@ -0,0 +1,19 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+actions:
+- get-integer: null
+- define: null
+build-type: option
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+default: null
+default-by-variant:
+- value: 193
+ variants:
+ - powerpc/mpc5566.*
+description: |
+ IRQ pin for SMSC9218I network interface
+enabled-by: true
+format: '{}'
+links: []
+name: SMSC9218I_IRQ_PIN
+type: build
diff --git a/spec/build/bsps/powerpc/mpc55xxevb/optsmc9218ipinrst.yml b/spec/build/bsps/powerpc/mpc55xxevb/optsmc9218ipinrst.yml
new file mode 100644
index 0000000000..6f8585b6e2
--- /dev/null
+++ b/spec/build/bsps/powerpc/mpc55xxevb/optsmc9218ipinrst.yml
@@ -0,0 +1,19 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+actions:
+- get-integer: null
+- define: null
+build-type: option
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+default: null
+default-by-variant:
+- value: 186
+ variants:
+ - powerpc/mpc5566.*
+description: |
+ reset pin for SMSC9218I network interface
+enabled-by: true
+format: '{}'
+links: []
+name: SMSC9218I_RESET_PIN
+type: build
diff --git a/spec/build/bsps/powerpc/mpc55xxevb/optsmc9218irxchn.yml b/spec/build/bsps/powerpc/mpc55xxevb/optsmc9218irxchn.yml
new file mode 100644
index 0000000000..0753f5b85b
--- /dev/null
+++ b/spec/build/bsps/powerpc/mpc55xxevb/optsmc9218irxchn.yml
@@ -0,0 +1,16 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+actions:
+- get-integer: null
+- define: null
+build-type: option
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+default: 49
+default-by-variant: []
+description: |
+ receive eDMA channel for SMSC9218I network interface
+enabled-by: true
+format: '{}'
+links: []
+name: SMSC9218I_EDMA_RX_CHANNEL
+type: build
diff --git a/spec/build/bsps/powerpc/mpc55xxevb/optsmc9218itxchn.yml b/spec/build/bsps/powerpc/mpc55xxevb/optsmc9218itxchn.yml
new file mode 100644
index 0000000000..359fb5302c
--- /dev/null
+++ b/spec/build/bsps/powerpc/mpc55xxevb/optsmc9218itxchn.yml
@@ -0,0 +1,16 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+actions:
+- get-integer: null
+- define: null
+build-type: option
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+default: 48
+default-by-variant: []
+description: |
+ transmit eDMA channel for SMSC9218I network interface
+enabled-by: true
+format: '{}'
+links: []
+name: SMSC9218I_EDMA_TX_CHANNEL
+type: build
diff --git a/spec/build/bsps/powerpc/mpc55xxevb/optsysclk.yml b/spec/build/bsps/powerpc/mpc55xxevb/optsysclk.yml
new file mode 100644
index 0000000000..8edffed6e9
--- /dev/null
+++ b/spec/build/bsps/powerpc/mpc55xxevb/optsysclk.yml
@@ -0,0 +1,25 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+actions:
+- get-integer: null
+- define: null
+build-type: option
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+default: 0
+default-by-variant:
+- value: 66000000
+ variants:
+ - powerpc/gwlcfm
+- value: 116000000
+ variants:
+ - powerpc/mpc5668g.*
+- value: 264000000
+ variants:
+ - powerpc/mpc5674f.*
+description: |
+ The system clock frequency in Hz.
+enabled-by: true
+format: '{}'
+links: []
+name: MPC55XX_SYSTEM_CLOCK
+type: build
diff --git a/spec/build/bsps/powerpc/mpc55xxevb/optsysclkdiv.yml b/spec/build/bsps/powerpc/mpc55xxevb/optsysclkdiv.yml
new file mode 100644
index 0000000000..739f139e49
--- /dev/null
+++ b/spec/build/bsps/powerpc/mpc55xxevb/optsysclkdiv.yml
@@ -0,0 +1,19 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+actions:
+- get-integer: null
+- define: null
+build-type: option
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+default: 1
+default-by-variant:
+- value: 2
+ variants:
+ - powerpc/mpc5674f.*
+description: |
+ system clock divider
+enabled-by: true
+format: '{}'
+links: []
+name: MPC55XX_SYSTEM_CLOCK_DIVIDER
+type: build
diff --git a/spec/build/bsps/powerpc/mpc55xxevb/start.yml b/spec/build/bsps/powerpc/mpc55xxevb/start.yml
new file mode 100644
index 0000000000..56f52a20b6
--- /dev/null
+++ b/spec/build/bsps/powerpc/mpc55xxevb/start.yml
@@ -0,0 +1,14 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+asflags: []
+build-type: start-file
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+enabled-by: true
+includes: []
+install-path: ${BSP_LIBDIR}
+links: []
+source:
+- bsps/powerpc/mpc55xxevb/start/start.S
+target: start.o
+type: build
diff --git a/spec/build/bsps/powerpc/mpc55xxevb/tstgwlcfm.yml b/spec/build/bsps/powerpc/mpc55xxevb/tstgwlcfm.yml
new file mode 100644
index 0000000000..69acc1031a
--- /dev/null
+++ b/spec/build/bsps/powerpc/mpc55xxevb/tstgwlcfm.yml
@@ -0,0 +1,19 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+actions:
+- set-test-state:
+ fsdosfsname01: exclude
+ linpack: exclude
+ record02: exclude
+build-type: option
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+default: null
+default-by-variant: []
+description: ''
+enabled-by: true
+links:
+- role: build-dependency
+ uid: ../../tstnojffs2
+- role: build-dependency
+ uid: ../../tstnolibdl
+type: build
diff --git a/spec/build/bsps/powerpc/mpc55xxevb/tstmpc5643levb.yml b/spec/build/bsps/powerpc/mpc55xxevb/tstmpc5643levb.yml
new file mode 100644
index 0000000000..8fe17c8522
--- /dev/null
+++ b/spec/build/bsps/powerpc/mpc55xxevb/tstmpc5643levb.yml
@@ -0,0 +1,18 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+actions:
+- set-test-state:
+ fileio: exclude
+ mghttpd01: exclude
+ pppd: exclude
+ psxaio02: exclude
+build-type: option
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+default: null
+default-by-variant: []
+description: ''
+enabled-by: true
+links:
+- role: build-dependency
+ uid: ../../tstsmallmem
+type: build
diff --git a/spec/build/bsps/powerpc/mpc8260ads/abi.yml b/spec/build/bsps/powerpc/mpc8260ads/abi.yml
new file mode 100644
index 0000000000..16cd990e10
--- /dev/null
+++ b/spec/build/bsps/powerpc/mpc8260ads/abi.yml
@@ -0,0 +1,21 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+actions:
+- get-string: null
+- split: null
+- env-append: null
+build-type: option
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+default:
+- -Dmpc8260
+- -mcpu=603e
+- -mstrict-align
+- -meabi
+- -msdata=sysv
+default-by-variant: []
+description: |
+ ABI flags
+enabled-by: true
+links: []
+name: ABI_FLAGS
+type: build
diff --git a/spec/build/bsps/powerpc/mpc8260ads/bspmpc8260ads.yml b/spec/build/bsps/powerpc/mpc8260ads/bspmpc8260ads.yml
new file mode 100644
index 0000000000..3a16b096ec
--- /dev/null
+++ b/spec/build/bsps/powerpc/mpc8260ads/bspmpc8260ads.yml
@@ -0,0 +1,78 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+arch: powerpc
+bsp: mpc8260ads
+build-type: bsp
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+enabled-by: true
+family: mpc8260ads
+includes: []
+install:
+- destination: ${BSP_INCLUDEDIR}
+ source:
+ - bsps/powerpc/mpc8260ads/include/bsp.h
+ - bsps/powerpc/mpc8260ads/include/tm27.h
+- destination: ${BSP_INCLUDEDIR}/bsp
+ source:
+ - bsps/powerpc/mpc8260ads/include/bsp/irq.h
+- destination: ${BSP_LIBDIR}
+ source:
+ - bsps/powerpc/mpc8260ads/start/linkcmds
+links:
+- role: build-dependency
+ uid: ../../obj
+- role: build-dependency
+ uid: ../../objirq
+- role: build-dependency
+ uid: ../../opto2
+- role: build-dependency
+ uid: ../crti
+- role: build-dependency
+ uid: ../crtn
+- role: build-dependency
+ uid: ../grp
+- role: build-dependency
+ uid: abi
+- role: build-dependency
+ uid: objnet
+- role: build-dependency
+ uid: optconminor
+- role: build-dependency
+ uid: optdisphandstat
+- role: build-dependency
+ uid: optprintkminor
+- role: build-dependency
+ uid: optuartsiomode
+- role: build-dependency
+ uid: optuartsterm
+- role: build-dependency
+ uid: start
+- role: build-dependency
+ uid: ../obj
+- role: build-dependency
+ uid: ../objexc
+- role: build-dependency
+ uid: ../../bspopts
+source:
+- bsps/powerpc/mpc8260ads/console/console.c
+- bsps/powerpc/mpc8260ads/dev/console-generic.c
+- bsps/powerpc/mpc8260ads/irq/irq.c
+- bsps/powerpc/mpc8260ads/start/brg.c
+- bsps/powerpc/mpc8260ads/start/bspstart.c
+- bsps/powerpc/mpc8260ads/start/cp.c
+- bsps/powerpc/mpc8260ads/start/cpuinit.c
+- bsps/powerpc/mpc8260ads/start/dpram.c
+- bsps/powerpc/mpc8260ads/start/mmu.c
+- bsps/powerpc/shared/btimer/btimer-ppc-dec.c
+- bsps/powerpc/shared/cache/cache.c
+- bsps/powerpc/shared/clock/clock.c
+- bsps/powerpc/shared/start/bspidle.c
+- bsps/shared/dev/getentropy/getentropy-cpucounter.c
+- bsps/shared/irq/irq-default-handler.c
+- bsps/shared/start/bspfatal-default.c
+- bsps/shared/start/bspgetworkarea-default.c
+- bsps/shared/start/bspreset-empty.c
+- bsps/shared/start/sbrk.c
+type: build
diff --git a/spec/build/bsps/powerpc/mpc8260ads/objnet.yml b/spec/build/bsps/powerpc/mpc8260ads/objnet.yml
new file mode 100644
index 0000000000..4fbe8604b5
--- /dev/null
+++ b/spec/build/bsps/powerpc/mpc8260ads/objnet.yml
@@ -0,0 +1,17 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: objects
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by:
+- RTEMS_NETWORKING
+includes:
+- cpukit/libnetworking
+install: []
+links: []
+source:
+- bsps/powerpc/mpc8260ads/net/if_hdlcsubr.c
+- bsps/powerpc/mpc8260ads/net/network.c
+type: build
diff --git a/spec/build/bsps/powerpc/mpc8260ads/optconminor.yml b/spec/build/bsps/powerpc/mpc8260ads/optconminor.yml
new file mode 100644
index 0000000000..50755157e9
--- /dev/null
+++ b/spec/build/bsps/powerpc/mpc8260ads/optconminor.yml
@@ -0,0 +1,16 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+actions:
+- get-string: null
+- define-unquoted: null
+build-type: option
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+default: SCC2_MINOR
+default-by-variant: []
+description: |
+ (BSP--console driver) Must be defined to be one of SMC1_MINOR, SMC2_MINOR, SCC2_MINOR, SCC3_MINOR, or SCC4_MINOR. Determines which device will be registered as /dev/console.
+enabled-by: true
+format: '{}'
+links: []
+name: CONSOLE_MINOR
+type: build
diff --git a/spec/build/bsps/powerpc/mpc8260ads/optdisphandstat.yml b/spec/build/bsps/powerpc/mpc8260ads/optdisphandstat.yml
new file mode 100644
index 0000000000..b7bcab4e5c
--- /dev/null
+++ b/spec/build/bsps/powerpc/mpc8260ads/optdisphandstat.yml
@@ -0,0 +1,15 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+actions:
+- get-boolean: null
+- define-condition: null
+build-type: option
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+default: false
+default-by-variant: []
+description: |
+ used by irq/irq.c
+enabled-by: true
+links: []
+name: DISPATCH_HANDLER_STAT
+type: build
diff --git a/spec/build/bsps/powerpc/mpc8260ads/optprintkminor.yml b/spec/build/bsps/powerpc/mpc8260ads/optprintkminor.yml
new file mode 100644
index 0000000000..bb031dfa83
--- /dev/null
+++ b/spec/build/bsps/powerpc/mpc8260ads/optprintkminor.yml
@@ -0,0 +1,16 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+actions:
+- get-string: null
+- define-unquoted: null
+build-type: option
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+default: SMC2_MINOR
+default-by-variant: []
+description: |
+ (BSP--console driver) Must be defined to be one of SMC1_MINOR, SMC2_MINOR, SCC2_MINOR, SCC3_MINOR, or SCC4_MINOR. Determines which device is used for output by printk(). If the port that printk() uses is also used for other I/O (e.g. if PRINTK_MINOR == \$CONSOLE_MINOR), then both ports should use the same type of I/O, otherwise the drivers will likely conflict with each other.
+enabled-by: true
+format: '{}'
+links: []
+name: PRINTK_MINOR
+type: build
diff --git a/spec/build/bsps/powerpc/mpc8260ads/optuartsiomode.yml b/spec/build/bsps/powerpc/mpc8260ads/optuartsiomode.yml
new file mode 100644
index 0000000000..eb0d9d8bda
--- /dev/null
+++ b/spec/build/bsps/powerpc/mpc8260ads/optuartsiomode.yml
@@ -0,0 +1,15 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+actions:
+- get-boolean: null
+- define-condition: null
+build-type: option
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+default: false
+default-by-variant: []
+description: |
+ (BSP--console driver) Define to 0 or 1 if you want polled I/O performed by RTEMS. Define to 1 if you want interrupt-driven performed by RTEMS. Define to 2 if you want polled I/O performed by EPPCBug. There is no provision to have a mix of interrupt-driven and polled I/O ports, except that the printk port may use a different mode from the other ports. If this is done, do not open the printk port from an RTEMS application. With EPPCBug 1.1, if mode 2 is selected, CONSOLE_MINOR must be set to SMC1_MINOR. This is a deficiency of the firmware: it does not perform serial I/O on any port other than its default debug port, which must be SMC1.
+enabled-by: true
+links: []
+name: UARTS_IO_MODE
+type: build
diff --git a/spec/build/bsps/powerpc/mpc8260ads/optuartsterm.yml b/spec/build/bsps/powerpc/mpc8260ads/optuartsterm.yml
new file mode 100644
index 0000000000..1aa2122c24
--- /dev/null
+++ b/spec/build/bsps/powerpc/mpc8260ads/optuartsterm.yml
@@ -0,0 +1,15 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+actions:
+- get-boolean: null
+- define-condition: null
+build-type: option
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+default: false
+default-by-variant: []
+description: |
+ Define to 1 if you want termios support for every port. Termios support is independent of the choice of UART I/O mode.
+enabled-by: true
+links: []
+name: UARTS_USE_TERMIOS
+type: build
diff --git a/spec/build/bsps/powerpc/mpc8260ads/start.yml b/spec/build/bsps/powerpc/mpc8260ads/start.yml
new file mode 100644
index 0000000000..f44a4b52b4
--- /dev/null
+++ b/spec/build/bsps/powerpc/mpc8260ads/start.yml
@@ -0,0 +1,14 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+asflags: []
+build-type: start-file
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+enabled-by: true
+includes: []
+install-path: ${BSP_LIBDIR}
+links: []
+source:
+- bsps/powerpc/mpc8260ads/start/start.S
+target: start.o
+type: build
diff --git a/spec/build/bsps/powerpc/mvme3100/abi.yml b/spec/build/bsps/powerpc/mvme3100/abi.yml
new file mode 100644
index 0000000000..41a634b4dc
--- /dev/null
+++ b/spec/build/bsps/powerpc/mvme3100/abi.yml
@@ -0,0 +1,18 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+actions:
+- get-string: null
+- split: null
+- env-append: null
+build-type: option
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+default:
+- -mcpu=powerpc
+- -msoft-float
+default-by-variant: []
+description: |
+ ABI flags
+enabled-by: true
+links: []
+name: ABI_FLAGS
+type: build
diff --git a/spec/build/bsps/powerpc/mvme3100/bspmvme3100.yml b/spec/build/bsps/powerpc/mvme3100/bspmvme3100.yml
new file mode 100644
index 0000000000..f95367ceea
--- /dev/null
+++ b/spec/build/bsps/powerpc/mvme3100/bspmvme3100.yml
@@ -0,0 +1,90 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+arch: powerpc
+bsp: mvme3100
+build-type: bsp
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+enabled-by: true
+family: mvme3100
+includes: []
+install:
+- destination: ${BSP_INCLUDEDIR}
+ source:
+ - bsps/powerpc/mvme3100/include/bsp.h
+ - bsps/powerpc/mvme3100/include/tm27.h
+- destination: ${BSP_INCLUDEDIR}/bsp
+ source:
+ - bsps/powerpc/mvme3100/include/bsp/VMEConfig.h
+ - bsps/powerpc/mvme3100/include/bsp/if_tsec_pub.h
+ - bsps/powerpc/mvme3100/include/bsp/irq.h
+ - bsps/powerpc/mvme3100/include/bsp/mpc8540_i2c_busdrv.h
+- destination: ${BSP_LIBDIR}
+ source:
+ - bsps/powerpc/mvme3100/start/linkcmds
+ - bsps/powerpc/shared/start/linkcmds.share
+links:
+- role: build-dependency
+ uid: ../../obj
+- role: build-dependency
+ uid: ../../objirqdflt
+- role: build-dependency
+ uid: ../../opto2
+- role: build-dependency
+ uid: ../crti
+- role: build-dependency
+ uid: ../crtn
+- role: build-dependency
+ uid: ../grp
+- role: build-dependency
+ uid: abi
+- role: build-dependency
+ uid: objnet
+- role: build-dependency
+ uid: optsbrk
+- role: build-dependency
+ uid: start
+- role: build-dependency
+ uid: ../obj
+- role: build-dependency
+ uid: ../objexc
+- role: build-dependency
+ uid: ../objvme
+- role: build-dependency
+ uid: ../motld
+- role: build-dependency
+ uid: ../../bspopts
+source:
+- bsps/powerpc/mvme3100/flash/flashcfg.c
+- bsps/powerpc/mvme3100/i2c/i2c_init.c
+- bsps/powerpc/mvme3100/i2c/mpc8540_i2c.c
+- bsps/powerpc/mvme3100/irq/irq_init.c
+- bsps/powerpc/mvme3100/pci/detect_host_bridge.c
+- bsps/powerpc/mvme3100/rtc/todcfg.c
+- bsps/powerpc/mvme3100/start/bspstart.c
+- bsps/powerpc/mvme3100/start/misc.c
+- bsps/powerpc/shared/btimer/btimer-ppc-dec.c
+- bsps/powerpc/shared/cache/cache.c
+- bsps/powerpc/shared/clock/clock-ppc-dec.c
+- bsps/powerpc/shared/clock/p_clock.c
+- bsps/powerpc/shared/console/console.c
+- bsps/powerpc/shared/console/uart.c
+- bsps/powerpc/shared/flash/flash.c
+- bsps/powerpc/shared/flash/spansionFlash.c
+- bsps/powerpc/shared/irq/openpic.c
+- bsps/powerpc/shared/irq/openpic_i8259_irq.c
+- bsps/powerpc/shared/irq/ppc-irq-legacy.c
+- bsps/powerpc/shared/mmu/e500-mmu.c
+- bsps/powerpc/shared/pci/generic_clear_hberrs.c
+- bsps/powerpc/shared/pci/pci.c
+- bsps/powerpc/shared/pci/pcifinddevice.c
+- bsps/powerpc/shared/start/bspgetworkarea.c
+- bsps/powerpc/shared/start/sbrk.c
+- bsps/powerpc/shared/start/vpd.c
+- bsps/powerpc/shared/start/zerobss.c
+- bsps/shared/dev/getentropy/getentropy-cpucounter.c
+- bsps/shared/dev/rtc/rtc-support.c
+- bsps/shared/start/bspfatal-default.c
+- bsps/shared/start/bspreset-empty.c
+type: build
diff --git a/spec/build/bsps/powerpc/mvme3100/objnet.yml b/spec/build/bsps/powerpc/mvme3100/objnet.yml
new file mode 100644
index 0000000000..fd6e810168
--- /dev/null
+++ b/spec/build/bsps/powerpc/mvme3100/objnet.yml
@@ -0,0 +1,16 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: objects
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by:
+- RTEMS_NETWORKING
+includes:
+- cpukit/libnetworking
+install: []
+links: []
+source:
+- bsps/powerpc/mvme3100/net/tsec.c
+type: build
diff --git a/spec/build/bsps/powerpc/mvme3100/optsbrk.yml b/spec/build/bsps/powerpc/mvme3100/optsbrk.yml
new file mode 100644
index 0000000000..05a1acd75f
--- /dev/null
+++ b/spec/build/bsps/powerpc/mvme3100/optsbrk.yml
@@ -0,0 +1,15 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+actions:
+- get-boolean: null
+- define-condition: null
+build-type: option
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+default: true
+default-by-variant: []
+description: |
+ If defined then the BSP may reduce the available memory size initially. This can be useful for debugging (reduce the core size) or dynamic loading (std gcc text offsets/jumps are < +/-32M). Note that the policy can still be defined by the application (see sbrk.c, BSP_sbrk_policy). By undefining CONFIGURE_MALLOC_BSP_SUPPORTS_SBRK this feature is removed and a little memory is saved.
+enabled-by: true
+links: []
+name: CONFIGURE_MALLOC_BSP_SUPPORTS_SBRK
+type: build
diff --git a/spec/build/bsps/powerpc/mvme3100/start.yml b/spec/build/bsps/powerpc/mvme3100/start.yml
new file mode 100644
index 0000000000..e5980acc94
--- /dev/null
+++ b/spec/build/bsps/powerpc/mvme3100/start.yml
@@ -0,0 +1,14 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+asflags: []
+build-type: start-file
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+enabled-by: true
+includes: []
+install-path: ${BSP_LIBDIR}
+links: []
+source:
+- bsps/powerpc/mvme3100/start/start.S
+target: start.o
+type: build
diff --git a/spec/build/bsps/powerpc/mvme5500/abi.yml b/spec/build/bsps/powerpc/mvme5500/abi.yml
new file mode 100644
index 0000000000..5e31841a7c
--- /dev/null
+++ b/spec/build/bsps/powerpc/mvme5500/abi.yml
@@ -0,0 +1,19 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+actions:
+- get-string: null
+- split: null
+- env-append: null
+build-type: option
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+default:
+- -Dmpc7455
+- -mcpu=7450
+- -mtune=7450
+default-by-variant: []
+description: |
+ ABI flags
+enabled-by: true
+links: []
+name: ABI_FLAGS
+type: build
diff --git a/spec/build/bsps/powerpc/mvme5500/bspmvme5500.yml b/spec/build/bsps/powerpc/mvme5500/bspmvme5500.yml
new file mode 100644
index 0000000000..5c6159d655
--- /dev/null
+++ b/spec/build/bsps/powerpc/mvme5500/bspmvme5500.yml
@@ -0,0 +1,99 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+arch: powerpc
+bsp: mvme5500
+build-type: bsp
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+enabled-by: true
+family: mvme5500
+includes: []
+install:
+- destination: ${BSP_INCLUDEDIR}
+ source:
+ - bsps/powerpc/mvme5500/include/bsp.h
+ - bsps/powerpc/mvme5500/include/tm27.h
+- destination: ${BSP_INCLUDEDIR}/bsp
+ source:
+ - bsps/powerpc/mvme5500/include/bsp/GT64260TWSI.h
+ - bsps/powerpc/mvme5500/include/bsp/GT64260eth.h
+ - bsps/powerpc/mvme5500/include/bsp/GT64260ethreg.h
+ - bsps/powerpc/mvme5500/include/bsp/VMEConfig.h
+ - bsps/powerpc/mvme5500/include/bsp/VPD.h
+ - bsps/powerpc/mvme5500/include/bsp/bspException.h
+ - bsps/powerpc/mvme5500/include/bsp/bspMvme5500.h
+ - bsps/powerpc/mvme5500/include/bsp/gtpcireg.h
+ - bsps/powerpc/mvme5500/include/bsp/gtreg.h
+ - bsps/powerpc/mvme5500/include/bsp/if_wmreg.h
+ - bsps/powerpc/mvme5500/include/bsp/irq.h
+ - bsps/powerpc/mvme5500/include/bsp/pcireg.h
+- destination: ${BSP_LIBDIR}
+ source:
+ - bsps/powerpc/mvme5500/start/linkcmds
+ - bsps/powerpc/shared/start/linkcmds.share
+links:
+- role: build-dependency
+ uid: ../../obj
+- role: build-dependency
+ uid: ../../objirqdflt
+- role: build-dependency
+ uid: ../../opto2
+- role: build-dependency
+ uid: ../crti
+- role: build-dependency
+ uid: ../crtn
+- role: build-dependency
+ uid: ../grp
+- role: build-dependency
+ uid: abi
+- role: build-dependency
+ uid: objnet
+- role: build-dependency
+ uid: optsbrk
+- role: build-dependency
+ uid: start
+- role: build-dependency
+ uid: ../obj
+- role: build-dependency
+ uid: ../objexc
+- role: build-dependency
+ uid: ../objvme
+- role: build-dependency
+ uid: ../../bspopts
+source:
+- bsps/powerpc/mvme5500/GT64260/GT64260TWSI.c
+- bsps/powerpc/mvme5500/GT64260/MVME5500I2C.c
+- bsps/powerpc/mvme5500/irq/BSP_irq.c
+- bsps/powerpc/mvme5500/irq/irq_init.c
+- bsps/powerpc/mvme5500/pci/detect_host_bridge.c
+- bsps/powerpc/mvme5500/pci/pci.c
+- bsps/powerpc/mvme5500/pci/pci_interface.c
+- bsps/powerpc/mvme5500/rtc/todcfg.c
+- bsps/powerpc/mvme5500/start/bspclean.c
+- bsps/powerpc/mvme5500/start/bspreset.c
+- bsps/powerpc/mvme5500/start/bspstart.c
+- bsps/powerpc/mvme5500/start/exceptionhandler.c
+- bsps/powerpc/mvme5500/start/pgtbl_activate.c
+- bsps/powerpc/shared/altivec/vec_sup.c
+- bsps/powerpc/shared/altivec/vec_sup_asm.S
+- bsps/powerpc/shared/btimer/btimer-ppc-dec.c
+- bsps/powerpc/shared/cache/cache.c
+- bsps/powerpc/shared/clock/clock-ppc-dec.c
+- bsps/powerpc/shared/clock/p_clock.c
+- bsps/powerpc/shared/console/console.c
+- bsps/powerpc/shared/console/uart.c
+- bsps/powerpc/shared/irq/ppc-irq-legacy.c
+- bsps/powerpc/shared/mmu/bat.c
+- bsps/powerpc/shared/mmu/mmuAsm.S
+- bsps/powerpc/shared/mmu/pte121.c
+- bsps/powerpc/shared/start/bspgetworkarea.c
+- bsps/powerpc/shared/start/pgtbl_setup.c
+- bsps/powerpc/shared/start/probeMemEnd.c
+- bsps/powerpc/shared/start/sbrk.c
+- bsps/powerpc/shared/start/vectors_entry.S
+- bsps/powerpc/shared/start/zerobss.c
+- bsps/shared/dev/getentropy/getentropy-cpucounter.c
+- bsps/shared/dev/pci/pci_find_device.c
+- bsps/shared/dev/rtc/rtc-support.c
+type: build
diff --git a/spec/build/bsps/powerpc/mvme5500/objnet.yml b/spec/build/bsps/powerpc/mvme5500/objnet.yml
new file mode 100644
index 0000000000..77349d582b
--- /dev/null
+++ b/spec/build/bsps/powerpc/mvme5500/objnet.yml
@@ -0,0 +1,18 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: objects
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by:
+- RTEMS_NETWORKING
+includes:
+- cpukit/libnetworking
+install: []
+links: []
+source:
+- bsps/powerpc/mvme5500/net/if_100MHz/GT64260eth.c
+- bsps/powerpc/mvme5500/net/if_1GHz/if_wm.c
+- bsps/powerpc/mvme5500/net/if_1GHz/pci_map.c
+type: build
diff --git a/spec/build/bsps/powerpc/mvme5500/optsbrk.yml b/spec/build/bsps/powerpc/mvme5500/optsbrk.yml
new file mode 100644
index 0000000000..05a1acd75f
--- /dev/null
+++ b/spec/build/bsps/powerpc/mvme5500/optsbrk.yml
@@ -0,0 +1,15 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+actions:
+- get-boolean: null
+- define-condition: null
+build-type: option
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+default: true
+default-by-variant: []
+description: |
+ If defined then the BSP may reduce the available memory size initially. This can be useful for debugging (reduce the core size) or dynamic loading (std gcc text offsets/jumps are < +/-32M). Note that the policy can still be defined by the application (see sbrk.c, BSP_sbrk_policy). By undefining CONFIGURE_MALLOC_BSP_SUPPORTS_SBRK this feature is removed and a little memory is saved.
+enabled-by: true
+links: []
+name: CONFIGURE_MALLOC_BSP_SUPPORTS_SBRK
+type: build
diff --git a/spec/build/bsps/powerpc/mvme5500/start.yml b/spec/build/bsps/powerpc/mvme5500/start.yml
new file mode 100644
index 0000000000..07c201ed34
--- /dev/null
+++ b/spec/build/bsps/powerpc/mvme5500/start.yml
@@ -0,0 +1,26 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+asflags: []
+build-type: script
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+do-build: |
+ preload_o = "bsps/powerpc/shared/start/preload.o"
+ self.asm(bld, bic, "bsps/powerpc/shared/start/preload.S", preload_o)
+ start_o = "bsps/powerpc/mvme5500/start/start.o"
+ self.asm( bld, bic, "bsps/powerpc/mvme5500/start/start.S", start_o)
+ target = "mvme5500start.o"
+ bld(
+ before=["cstlib"],
+ rule="${LD} -o ${TGT} -r ${SRC}",
+ source=[preload_o, start_o],
+ target=target,
+ )
+ bld.install_files("${BSP_LIBDIR}", target)
+do-configure: null
+enabled-by: true
+includes: []
+links: []
+prepare-build: null
+prepare-configure: null
+type: build
diff --git a/spec/build/bsps/powerpc/obj.yml b/spec/build/bsps/powerpc/obj.yml
new file mode 100644
index 0000000000..d355509ad9
--- /dev/null
+++ b/spec/build/bsps/powerpc/obj.yml
@@ -0,0 +1,17 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: objects
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by: true
+includes: []
+install: []
+links: []
+source:
+- bsps/powerpc/shared/cpu_asm.S
+- bsps/powerpc/shared/cpu.c
+- bsps/powerpc/shared/cpuIdent.c
+- bsps/powerpc/shared/ppc-print-stack.c
+type: build
diff --git a/spec/build/bsps/powerpc/objexc.yml b/spec/build/bsps/powerpc/objexc.yml
new file mode 100644
index 0000000000..8a8b714857
--- /dev/null
+++ b/spec/build/bsps/powerpc/objexc.yml
@@ -0,0 +1,26 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: objects
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by: true
+includes: []
+install: []
+links: []
+source:
+- bsps/powerpc/shared/exceptions/ppc-code-copy.c
+- bsps/powerpc/shared/exceptions/ppc_exc_address.c
+- bsps/powerpc/shared/exceptions/ppc_exc_alignment.c
+- bsps/powerpc/shared/exceptions/ppc_exc_async_normal.S
+- bsps/powerpc/shared/exceptions/ppc_exc_categories.c
+- bsps/powerpc/shared/exceptions/ppc_exc_fatal.S
+- bsps/powerpc/shared/exceptions/ppc_exc_global_handler.c
+- bsps/powerpc/shared/exceptions/ppc_exc_hdl.c
+- bsps/powerpc/shared/exceptions/ppc_exc_initialize.c
+- bsps/powerpc/shared/exceptions/ppc_exc_naked.S
+- bsps/powerpc/shared/exceptions/ppc_exc_print.c
+- bsps/powerpc/shared/exceptions/ppc_exc_prologue.c
+- bsps/powerpc/shared/exceptions/ppc_exc.S
+type: build
diff --git a/spec/build/bsps/powerpc/objvme.yml b/spec/build/bsps/powerpc/objvme.yml
new file mode 100644
index 0000000000..5247228009
--- /dev/null
+++ b/spec/build/bsps/powerpc/objvme.yml
@@ -0,0 +1,18 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: objects
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by: true
+includes: []
+install: []
+links: []
+source:
+- bsps/powerpc/shared/vme/bspVmeDmaList.c
+- bsps/powerpc/shared/vme/vmeconfig.c
+- bsps/powerpc/shared/vme/vmeTsi148.c
+- bsps/powerpc/shared/vme/vme_universe.c
+- bsps/powerpc/shared/vme/vmeUniverse.c
+type: build
diff --git a/spec/build/bsps/powerpc/psim/abi.yml b/spec/build/bsps/powerpc/psim/abi.yml
new file mode 100644
index 0000000000..b9b2ae3002
--- /dev/null
+++ b/spec/build/bsps/powerpc/psim/abi.yml
@@ -0,0 +1,20 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+actions:
+- get-string: null
+- split: null
+- env-append: null
+build-type: option
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+default:
+- -Dppc603e
+- -meabi
+- -mcpu=603e
+- -msdata=sysv
+default-by-variant: []
+description: |
+ ABI flags
+enabled-by: true
+links: []
+name: ABI_FLAGS
+type: build
diff --git a/spec/build/bsps/powerpc/psim/bsppsim.yml b/spec/build/bsps/powerpc/psim/bsppsim.yml
new file mode 100644
index 0000000000..c281175c90
--- /dev/null
+++ b/spec/build/bsps/powerpc/psim/bsppsim.yml
@@ -0,0 +1,85 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+arch: powerpc
+bsp: psim
+build-type: bsp
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+enabled-by: true
+family: psim
+includes: []
+install:
+- destination: ${BSP_INCLUDEDIR}
+ source:
+ - bsps/powerpc/psim/include/bsp.h
+ - bsps/powerpc/psim/include/psim.h
+ - bsps/powerpc/psim/include/tm27.h
+- destination: ${BSP_INCLUDEDIR}/bsp
+ source:
+ - bsps/powerpc/psim/include/bsp/irq.h
+- destination: ${BSP_LIBDIR}
+ source:
+ - bsps/powerpc/psim/start/linkcmds
+ - bsps/powerpc/shared/start/linkcmds.base
+links:
+- role: build-dependency
+ uid: ../../obj
+- role: build-dependency
+ uid: ../../objirq
+- role: build-dependency
+ uid: ../../opto2
+- role: build-dependency
+ uid: ../crti
+- role: build-dependency
+ uid: ../crtn
+- role: build-dependency
+ uid: ../grp
+- role: build-dependency
+ uid: ../obj
+- role: build-dependency
+ uid: ../objexc
+- role: build-dependency
+ uid: abi
+- role: build-dependency
+ uid: objmpci
+- role: build-dependency
+ uid: objnet
+- role: build-dependency
+ uid: optclkfastidle
+- role: build-dependency
+ uid: optsbrk
+- role: build-dependency
+ uid: optsprg
+- role: build-dependency
+ uid: optvecbase
+- role: build-dependency
+ uid: start
+- role: build-dependency
+ uid: ../../bspopts
+source:
+- bsps/powerpc/psim/console/console-io.c
+- bsps/powerpc/psim/console/consupp.S
+- bsps/powerpc/psim/irq/irq_init.c
+- bsps/powerpc/psim/start/align_h.S
+- bsps/powerpc/psim/start/bspstart.c
+- bsps/powerpc/shared/altivec/vec_sup.c
+- bsps/powerpc/shared/altivec/vec_sup_asm.S
+- bsps/powerpc/shared/btimer/btimer-ppc-dec.c
+- bsps/powerpc/shared/cache/cache.c
+- bsps/powerpc/shared/clock/clock-ppc-dec.c
+- bsps/powerpc/shared/clock/p_clock.c
+- bsps/powerpc/shared/irq/openpic.c
+- bsps/powerpc/shared/irq/openpic_i8259_irq.c
+- bsps/powerpc/shared/irq/ppc-irq-legacy.c
+- bsps/powerpc/shared/mmu/bat.c
+- bsps/powerpc/shared/mmu/mmuAsm.S
+- bsps/powerpc/shared/mmu/pte121.c
+- bsps/powerpc/shared/start/sbrk.c
+- bsps/shared/dev/getentropy/getentropy-cpucounter.c
+- bsps/shared/dev/serial/console-polled.c
+- bsps/shared/irq/irq-default-handler.c
+- bsps/shared/start/bspfatal-default.c
+- bsps/shared/start/bspgetworkarea-default.c
+- bsps/shared/start/bspreset-empty.c
+type: build
diff --git a/spec/build/bsps/powerpc/psim/objmpci.yml b/spec/build/bsps/powerpc/psim/objmpci.yml
new file mode 100644
index 0000000000..01e44452f5
--- /dev/null
+++ b/spec/build/bsps/powerpc/psim/objmpci.yml
@@ -0,0 +1,18 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: objects
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by:
+- RTEMS_MULTIPROCESSING
+includes: []
+install: []
+links: []
+source:
+- bsps/powerpc/psim/mpci/addrconv.c
+- bsps/powerpc/psim/mpci/getcfg.c
+- bsps/powerpc/psim/mpci/lock.c
+- bsps/powerpc/psim/mpci/mpisr.c
+type: build
diff --git a/spec/build/bsps/powerpc/psim/objnet.yml b/spec/build/bsps/powerpc/psim/objnet.yml
new file mode 100644
index 0000000000..f54646395f
--- /dev/null
+++ b/spec/build/bsps/powerpc/psim/objnet.yml
@@ -0,0 +1,16 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: objects
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by:
+- RTEMS_NETWORKING
+includes:
+- cpukit/libnetworking
+install: []
+links: []
+source:
+- bsps/powerpc/psim/net/if_sim.c
+type: build
diff --git a/spec/build/bsps/powerpc/psim/optclkfastidle.yml b/spec/build/bsps/powerpc/psim/optclkfastidle.yml
new file mode 100644
index 0000000000..df86867fa7
--- /dev/null
+++ b/spec/build/bsps/powerpc/psim/optclkfastidle.yml
@@ -0,0 +1,18 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+actions:
+- get-boolean: null
+- define-condition: null
+build-type: option
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+default: false
+default-by-variant:
+- value: true
+ variants:
+ - powerpc/psim
+description: |
+ This sets a mode where the time runs as fast as possible when a clock ISR occurs while the IDLE thread is executing. This can significantly reduce simulation times.
+enabled-by: true
+links: []
+name: CLOCK_DRIVER_USE_FAST_IDLE
+type: build
diff --git a/spec/build/bsps/powerpc/psim/optsbrk.yml b/spec/build/bsps/powerpc/psim/optsbrk.yml
new file mode 100644
index 0000000000..05a1acd75f
--- /dev/null
+++ b/spec/build/bsps/powerpc/psim/optsbrk.yml
@@ -0,0 +1,15 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+actions:
+- get-boolean: null
+- define-condition: null
+build-type: option
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+default: true
+default-by-variant: []
+description: |
+ If defined then the BSP may reduce the available memory size initially. This can be useful for debugging (reduce the core size) or dynamic loading (std gcc text offsets/jumps are < +/-32M). Note that the policy can still be defined by the application (see sbrk.c, BSP_sbrk_policy). By undefining CONFIGURE_MALLOC_BSP_SUPPORTS_SBRK this feature is removed and a little memory is saved.
+enabled-by: true
+links: []
+name: CONFIGURE_MALLOC_BSP_SUPPORTS_SBRK
+type: build
diff --git a/spec/build/bsps/powerpc/psim/optsprg.yml b/spec/build/bsps/powerpc/psim/optsprg.yml
new file mode 100644
index 0000000000..89f5b47135
--- /dev/null
+++ b/spec/build/bsps/powerpc/psim/optsprg.yml
@@ -0,0 +1,15 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+actions:
+- get-boolean: null
+- define-condition: null
+build-type: option
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+default: false
+default-by-variant: []
+description: |
+ If defined, then the PowerPC specific code in RTEMS will use some of the special purpose registers to slightly optimize interrupt response time. The use of these registers can conflict with other tools like debuggers.
+enabled-by: true
+links: []
+name: PPC_USE_SPRG
+type: build
diff --git a/spec/build/bsps/powerpc/psim/optvecbase.yml b/spec/build/bsps/powerpc/psim/optvecbase.yml
new file mode 100644
index 0000000000..6de89c1aca
--- /dev/null
+++ b/spec/build/bsps/powerpc/psim/optvecbase.yml
@@ -0,0 +1,16 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+actions:
+- get-integer: null
+- define: null
+build-type: option
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+default: 4293918976
+default-by-variant: []
+description: |
+ This defines the base address of the exception table. NOTE: Vectors are actually at 0xFFF00000 but file starts at offset.
+enabled-by: true
+format: '{:#010x}'
+links: []
+name: PPC_VECTOR_FILE_BASE
+type: build
diff --git a/spec/build/bsps/powerpc/psim/start.yml b/spec/build/bsps/powerpc/psim/start.yml
new file mode 100644
index 0000000000..d4d2efd571
--- /dev/null
+++ b/spec/build/bsps/powerpc/psim/start.yml
@@ -0,0 +1,14 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+asflags: []
+build-type: start-file
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+enabled-by: true
+includes: []
+install-path: ${BSP_LIBDIR}
+links: []
+source:
+- bsps/powerpc/psim/start/start.S
+target: start.o
+type: build
diff --git a/spec/build/bsps/powerpc/qemuppc/abi.yml b/spec/build/bsps/powerpc/qemuppc/abi.yml
new file mode 100644
index 0000000000..df82553bcb
--- /dev/null
+++ b/spec/build/bsps/powerpc/qemuppc/abi.yml
@@ -0,0 +1,18 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+actions:
+- get-string: null
+- split: null
+- env-append: null
+build-type: option
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+default:
+- -Dppc603e
+- -mcpu=603e
+default-by-variant: []
+description: |
+ ABI flags
+enabled-by: true
+links: []
+name: ABI_FLAGS
+type: build
diff --git a/spec/build/bsps/powerpc/qemuppc/bspqemuppc.yml b/spec/build/bsps/powerpc/qemuppc/bspqemuppc.yml
new file mode 100644
index 0000000000..cb3fc46e7d
--- /dev/null
+++ b/spec/build/bsps/powerpc/qemuppc/bspqemuppc.yml
@@ -0,0 +1,65 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+arch: powerpc
+bsp: qemuppc
+build-type: bsp
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+enabled-by: true
+family: qemuppc
+includes: []
+install:
+- destination: ${BSP_INCLUDEDIR}
+ source:
+ - bsps/powerpc/qemuppc/include/bsp.h
+ - bsps/powerpc/qemuppc/include/tm27.h
+- destination: ${BSP_INCLUDEDIR}/bsp
+ source:
+ - bsps/powerpc/qemuppc/include/bsp/irq.h
+- destination: ${BSP_LIBDIR}
+ source:
+ - bsps/powerpc/qemuppc/start/linkcmds
+ - bsps/powerpc/shared/start/linkcmds.base
+links:
+- role: build-dependency
+ uid: ../../obj
+- role: build-dependency
+ uid: ../../objirq
+- role: build-dependency
+ uid: ../../opto2
+- role: build-dependency
+ uid: ../crti
+- role: build-dependency
+ uid: ../crtn
+- role: build-dependency
+ uid: ../grp
+- role: build-dependency
+ uid: ../obj
+- role: build-dependency
+ uid: ../objexc
+- role: build-dependency
+ uid: abi
+- role: build-dependency
+ uid: start
+- role: build-dependency
+ uid: ../../bspopts
+source:
+- bsps/powerpc/qemuppc/console/console-io.c
+- bsps/powerpc/qemuppc/irq/irq_init.c
+- bsps/powerpc/qemuppc/start/bspstart.c
+- bsps/powerpc/qemuppc/start/cmain.c
+- bsps/powerpc/shared/btimer/btimer-ppc-dec.c
+- bsps/powerpc/shared/cache/cache.c
+- bsps/powerpc/shared/clock/clock.c
+- bsps/powerpc/shared/mmu/bat.c
+- bsps/powerpc/shared/mmu/mmuAsm.S
+- bsps/powerpc/shared/mmu/pte121.c
+- bsps/shared/dev/getentropy/getentropy-cpucounter.c
+- bsps/shared/dev/serial/console-polled.c
+- bsps/shared/irq/irq-default-handler.c
+- bsps/shared/start/bspfatal-default.c
+- bsps/shared/start/bspgetworkarea-default.c
+- bsps/shared/start/bspreset-empty.c
+- bsps/shared/start/sbrk.c
+type: build
diff --git a/spec/build/bsps/powerpc/qemuppc/start.yml b/spec/build/bsps/powerpc/qemuppc/start.yml
new file mode 100644
index 0000000000..2911f795f9
--- /dev/null
+++ b/spec/build/bsps/powerpc/qemuppc/start.yml
@@ -0,0 +1,14 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+asflags: []
+build-type: start-file
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+enabled-by: true
+includes: []
+install-path: ${BSP_LIBDIR}
+links: []
+source:
+- bsps/powerpc/qemuppc/start/start.S
+target: start.o
+type: build
diff --git a/spec/build/bsps/powerpc/qoriq/abi.yml b/spec/build/bsps/powerpc/qoriq/abi.yml
new file mode 100644
index 0000000000..2d7477a565
--- /dev/null
+++ b/spec/build/bsps/powerpc/qoriq/abi.yml
@@ -0,0 +1,32 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+actions:
+- get-string: null
+- split: null
+- env-append: null
+build-type: option
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+default:
+- -mcpu=8540
+- -msoft-float
+- -meabi
+- -msdata=sysv
+- -mstrict-align
+default-by-variant:
+- value:
+ - -mcpu=e6500
+ - -m64
+ variants:
+ - powerpc/qoriq_e6500_64
+- value:
+ - -mcpu=e6500
+ - -m32
+ - -msdata=sysv
+ variants:
+ - powerpc/qoriq_e6500_32
+description: |
+ ABI flags
+enabled-by: true
+links: []
+name: ABI_FLAGS
+type: build
diff --git a/spec/build/bsps/powerpc/qoriq/bspcore0.yml b/spec/build/bsps/powerpc/qoriq/bspcore0.yml
new file mode 100644
index 0000000000..8f45629d43
--- /dev/null
+++ b/spec/build/bsps/powerpc/qoriq/bspcore0.yml
@@ -0,0 +1,21 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+arch: powerpc
+bsp: qoriq_core_0
+build-type: bsp
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+enabled-by: true
+family: qoriq
+includes: []
+install: []
+links:
+- role: build-dependency
+ uid: ../../opto2
+- role: build-dependency
+ uid: grp
+- role: build-dependency
+ uid: ../../tstnolibdl
+source: []
+type: build
diff --git a/spec/build/bsps/powerpc/qoriq/bspcore1.yml b/spec/build/bsps/powerpc/qoriq/bspcore1.yml
new file mode 100644
index 0000000000..9324812d54
--- /dev/null
+++ b/spec/build/bsps/powerpc/qoriq/bspcore1.yml
@@ -0,0 +1,21 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+arch: powerpc
+bsp: qoriq_core_1
+build-type: bsp
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+enabled-by: true
+family: qoriq
+includes: []
+install: []
+links:
+- role: build-dependency
+ uid: ../../opto2
+- role: build-dependency
+ uid: grp
+- role: build-dependency
+ uid: ../../tstnolibdl
+source: []
+type: build
diff --git a/spec/build/bsps/powerpc/qoriq/bspe500.yml b/spec/build/bsps/powerpc/qoriq/bspe500.yml
new file mode 100644
index 0000000000..06fd9dc25c
--- /dev/null
+++ b/spec/build/bsps/powerpc/qoriq/bspe500.yml
@@ -0,0 +1,21 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+arch: powerpc
+bsp: qoriq_e500
+build-type: bsp
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+enabled-by: true
+family: qoriq
+includes: []
+install: []
+links:
+- role: build-dependency
+ uid: ../../opto2
+- role: build-dependency
+ uid: grp
+- role: build-dependency
+ uid: ../../tstnolibdl
+source: []
+type: build
diff --git a/spec/build/bsps/powerpc/qoriq/bspe650032.yml b/spec/build/bsps/powerpc/qoriq/bspe650032.yml
new file mode 100644
index 0000000000..b558817e8d
--- /dev/null
+++ b/spec/build/bsps/powerpc/qoriq/bspe650032.yml
@@ -0,0 +1,21 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+arch: powerpc
+bsp: qoriq_e6500_32
+build-type: bsp
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+enabled-by: true
+family: qoriq
+includes: []
+install: []
+links:
+- role: build-dependency
+ uid: ../../opto2
+- role: build-dependency
+ uid: grp
+- role: build-dependency
+ uid: ../../tstnolibdl
+source: []
+type: build
diff --git a/spec/build/bsps/powerpc/qoriq/bspe650064.yml b/spec/build/bsps/powerpc/qoriq/bspe650064.yml
new file mode 100644
index 0000000000..3b375ebf78
--- /dev/null
+++ b/spec/build/bsps/powerpc/qoriq/bspe650064.yml
@@ -0,0 +1,21 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+arch: powerpc
+bsp: qoriq_e6500_64
+build-type: bsp
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+enabled-by: true
+family: qoriq
+includes: []
+install: []
+links:
+- role: build-dependency
+ uid: ../../opto2
+- role: build-dependency
+ uid: grp
+- role: build-dependency
+ uid: ../../tstnolibdl
+source: []
+type: build
diff --git a/spec/build/bsps/powerpc/qoriq/grp.yml b/spec/build/bsps/powerpc/qoriq/grp.yml
new file mode 100644
index 0000000000..270fe6e898
--- /dev/null
+++ b/spec/build/bsps/powerpc/qoriq/grp.yml
@@ -0,0 +1,118 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: group
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+enabled-by: true
+includes: []
+install: []
+ldflags: []
+links:
+- role: build-dependency
+ uid: ../../linkcmds
+- role: build-dependency
+ uid: ../../obj
+- role: build-dependency
+ uid: ../../objirq
+- role: build-dependency
+ uid: ../../optconsolebaud
+- role: build-dependency
+ uid: ../crti
+- role: build-dependency
+ uid: ../crtn
+- role: build-dependency
+ uid: ../grp
+- role: build-dependency
+ uid: ../obj
+- role: build-dependency
+ uid: ../objexc
+- role: build-dependency
+ uid: abi
+- role: build-dependency
+ uid: obj
+- role: build-dependency
+ uid: objnet
+- role: build-dependency
+ uid: objsmp
+- role: build-dependency
+ uid: optbucsr
+- role: build-dependency
+ uid: optbusclkdiv
+- role: build-dependency
+ uid: optcachealign
+- role: build-dependency
+ uid: optcacheblktouch
+- role: build-dependency
+ uid: optcachedatal1sz
+- role: build-dependency
+ uid: optcachedatal2sz
+- role: build-dependency
+ uid: optcacheinstl1sz
+- role: build-dependency
+ uid: optcacheinstl2sz
+- role: build-dependency
+ uid: optchipnum
+- role: build-dependency
+ uid: optchipser
+- role: build-dependency
+ uid: optclktmctr
+- role: build-dependency
+ uid: optclktmr
+- role: build-dependency
+ uid: optcpucnt
+- role: build-dependency
+ uid: optetsec1phy
+- role: build-dependency
+ uid: optetsec2phy
+- role: build-dependency
+ uid: optetsec3phy
+- role: build-dependency
+ uid: optexcbooke
+- role: build-dependency
+ uid: optexcfixdhdlr
+- role: build-dependency
+ uid: optfdtmxsz
+- role: build-dependency
+ uid: optfdtro
+- role: build-dependency
+ uid: opthid0
+- role: build-dependency
+ uid: opthyp
+- role: build-dependency
+ uid: opthypguest
+- role: build-dependency
+ uid: opticombegin
+- role: build-dependency
+ uid: opticomsz
+- role: build-dependency
+ uid: optmas7
+- role: build-dependency
+ uid: optmsr
+- role: build-dependency
+ uid: optspefscr
+- role: build-dependency
+ uid: optthrdcnt
+- role: build-dependency
+ uid: opttlb1cnt
+- role: build-dependency
+ uid: optuart0en
+- role: build-dependency
+ uid: optuart1en
+- role: build-dependency
+ uid: optuartbrg0en
+- role: build-dependency
+ uid: optuartbrg1en
+- role: build-dependency
+ uid: optuartbrgmas
+- role: build-dependency
+ uid: optuartbrgpri
+- role: build-dependency
+ uid: optuartbrgslv
+- role: build-dependency
+ uid: optuartirq
+- role: build-dependency
+ uid: start
+- role: build-dependency
+ uid: ../../bspopts
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/bsps/powerpc/qoriq/obj.yml b/spec/build/bsps/powerpc/qoriq/obj.yml
new file mode 100644
index 0000000000..0956313b77
--- /dev/null
+++ b/spec/build/bsps/powerpc/qoriq/obj.yml
@@ -0,0 +1,75 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: objects
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by: true
+includes: []
+install:
+- destination: ${BSP_INCLUDEDIR}
+ source:
+ - bsps/powerpc/qoriq/include/bsp.h
+ - bsps/powerpc/qoriq/include/tm27.h
+- destination: ${BSP_INCLUDEDIR}/asm
+ source:
+ - bsps/powerpc/qoriq/include/asm/epapr_hcalls.h
+ - bsps/powerpc/qoriq/include/asm/fsl_hcalls.h
+- destination: ${BSP_INCLUDEDIR}/bsp
+ source:
+ - bsps/powerpc/qoriq/include/bsp/intercom.h
+ - bsps/powerpc/qoriq/include/bsp/irq.h
+ - bsps/powerpc/qoriq/include/bsp/mmu.h
+ - bsps/powerpc/qoriq/include/bsp/qoriq.h
+ - bsps/powerpc/qoriq/include/bsp/tsec-config.h
+ - bsps/powerpc/qoriq/include/bsp/uart-bridge.h
+- destination: ${BSP_INCLUDEDIR}/uapi/asm
+ source:
+ - bsps/powerpc/qoriq/include/uapi/asm/epapr_hcalls.h
+- destination: ${BSP_LIBDIR}
+ source:
+ - bsps/powerpc/qoriq/start/linkcmds.qoriq_core_0
+ - bsps/powerpc/qoriq/start/linkcmds.qoriq_core_1
+ - bsps/powerpc/qoriq/start/linkcmds.qoriq_e500
+ - bsps/powerpc/qoriq/start/linkcmds.qoriq_e6500_32
+ - bsps/powerpc/qoriq/start/linkcmds.qoriq_e6500_64
+ - bsps/powerpc/shared/start/linkcmds.base
+links: []
+source:
+- bsps/powerpc/qoriq/btimer/btimer.c
+- bsps/powerpc/qoriq/clock/clock-config.c
+- bsps/powerpc/qoriq/console/console-config.c
+- bsps/powerpc/qoriq/console/uart-bridge-master.c
+- bsps/powerpc/qoriq/console/uart-bridge-slave.c
+- bsps/powerpc/qoriq/irq/irq.c
+- bsps/powerpc/qoriq/mpci/intercom-mpci.c
+- bsps/powerpc/qoriq/mpci/intercom.c
+- bsps/powerpc/qoriq/mpci/lock.S
+- bsps/powerpc/qoriq/rtc/rtc-config.c
+- bsps/powerpc/qoriq/start/bspreset.c
+- bsps/powerpc/qoriq/start/bsprestart.c
+- bsps/powerpc/qoriq/start/bspstart.c
+- bsps/powerpc/qoriq/start/epapr_hcalls.S
+- bsps/powerpc/qoriq/start/l1cache.S
+- bsps/powerpc/qoriq/start/l2cache.S
+- bsps/powerpc/qoriq/start/mmu-config.c
+- bsps/powerpc/qoriq/start/mmu-tlb1.S
+- bsps/powerpc/qoriq/start/mmu.c
+- bsps/powerpc/qoriq/start/portal.c
+- bsps/powerpc/qoriq/start/restart.S
+- bsps/powerpc/shared/cache/cache.c
+- bsps/powerpc/shared/exceptions/ppc-exc-handler-table.c
+- bsps/powerpc/shared/mmu/e500-mmu.c
+- bsps/powerpc/shared/start/bsp-start-zero.S
+- bsps/powerpc/shared/start/bspidle.c
+- bsps/powerpc/shared/start/tictac.c
+- bsps/shared/dev/getentropy/getentropy-cpucounter.c
+- bsps/shared/dev/rtc/rtc-support.c
+- bsps/shared/dev/serial/console-termios-init.c
+- bsps/shared/dev/serial/console-termios.c
+- bsps/shared/irq/irq-default-handler.c
+- bsps/shared/start/bsp-fdt.c
+- bsps/shared/start/bspfatal-default.c
+- bsps/shared/start/sbrk.c
+type: build
diff --git a/spec/build/bsps/powerpc/qoriq/objnet.yml b/spec/build/bsps/powerpc/qoriq/objnet.yml
new file mode 100644
index 0000000000..fa8c0a9f43
--- /dev/null
+++ b/spec/build/bsps/powerpc/qoriq/objnet.yml
@@ -0,0 +1,18 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: objects
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by:
+- RTEMS_NETWORKING
+includes:
+- cpukit/libnetworking
+install: []
+links: []
+source:
+- bsps/powerpc/qoriq/net/if_intercom.c
+- bsps/powerpc/qoriq/net/network.c
+- bsps/powerpc/shared/net/tsec.c
+type: build
diff --git a/spec/build/bsps/powerpc/qoriq/objsmp.yml b/spec/build/bsps/powerpc/qoriq/objsmp.yml
new file mode 100644
index 0000000000..766227b97d
--- /dev/null
+++ b/spec/build/bsps/powerpc/qoriq/objsmp.yml
@@ -0,0 +1,15 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: objects
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by:
+- RTEMS_SMP
+includes: []
+install: []
+links: []
+source:
+- bsps/powerpc/qoriq/start/bspsmp.c
+type: build
diff --git a/spec/build/bsps/powerpc/qoriq/optbucsr.yml b/spec/build/bsps/powerpc/qoriq/optbucsr.yml
new file mode 100644
index 0000000000..fe64767307
--- /dev/null
+++ b/spec/build/bsps/powerpc/qoriq/optbucsr.yml
@@ -0,0 +1,19 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+actions:
+- get-integer: null
+- define: null
+build-type: option
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+default: null
+default-by-variant:
+- value: 20972033
+ variants:
+ - powerpc/qoriq_e6500.*
+description: |
+ initial BUCSR value
+enabled-by: true
+format: '{:#010x}'
+links: []
+name: QORIQ_INITIAL_BUCSR
+type: build
diff --git a/spec/build/bsps/powerpc/qoriq/optbusclkdiv.yml b/spec/build/bsps/powerpc/qoriq/optbusclkdiv.yml
new file mode 100644
index 0000000000..217718a1dc
--- /dev/null
+++ b/spec/build/bsps/powerpc/qoriq/optbusclkdiv.yml
@@ -0,0 +1,19 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+actions:
+- get-integer: null
+- define: null
+build-type: option
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+default: 1
+default-by-variant:
+- value: 2
+ variants:
+ - powerpc/qoriq_e6500.*
+description: |
+ divider of the platform clock to get the clock most on-chip peripherals
+enabled-by: true
+format: '{}'
+links: []
+name: QORIQ_BUS_CLOCK_DIVIDER
+type: build
diff --git a/spec/build/bsps/powerpc/qoriq/optcachealign.yml b/spec/build/bsps/powerpc/qoriq/optcachealign.yml
new file mode 100644
index 0000000000..77e30c86c7
--- /dev/null
+++ b/spec/build/bsps/powerpc/qoriq/optcachealign.yml
@@ -0,0 +1,19 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+actions:
+- get-integer: null
+- define: null
+build-type: option
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+default: null
+default-by-variant:
+- value: 64
+ variants:
+ - powerpc/qoriq_e6500.*
+description: |
+ the cache alignment
+enabled-by: true
+format: '{}'
+links: []
+name: PPC_CACHE_ALIGNMENT
+type: build
diff --git a/spec/build/bsps/powerpc/qoriq/optcacheblktouch.yml b/spec/build/bsps/powerpc/qoriq/optcacheblktouch.yml
new file mode 100644
index 0000000000..3b9251a774
--- /dev/null
+++ b/spec/build/bsps/powerpc/qoriq/optcacheblktouch.yml
@@ -0,0 +1,15 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+actions:
+- get-boolean: null
+- define-condition: null
+build-type: option
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+default: true
+default-by-variant: []
+description: |
+ if defined use dcbt instruction
+enabled-by: true
+links: []
+name: BSP_USE_DATA_CACHE_BLOCK_TOUCH
+type: build
diff --git a/spec/build/bsps/powerpc/qoriq/optcachedatal1sz.yml b/spec/build/bsps/powerpc/qoriq/optcachedatal1sz.yml
new file mode 100644
index 0000000000..1717ff9660
--- /dev/null
+++ b/spec/build/bsps/powerpc/qoriq/optcachedatal1sz.yml
@@ -0,0 +1,16 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+actions:
+- get-integer: null
+- define: null
+build-type: option
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+default: 32768
+default-by-variant: []
+description: |
+ the L1 data cache size
+enabled-by: true
+format: '{}'
+links: []
+name: PPC_CACHE_DATA_L1_SIZE
+type: build
diff --git a/spec/build/bsps/powerpc/qoriq/optcachedatal2sz.yml b/spec/build/bsps/powerpc/qoriq/optcachedatal2sz.yml
new file mode 100644
index 0000000000..ef4ee635ef
--- /dev/null
+++ b/spec/build/bsps/powerpc/qoriq/optcachedatal2sz.yml
@@ -0,0 +1,19 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+actions:
+- get-integer: null
+- define: null
+build-type: option
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+default: 262144
+default-by-variant:
+- value: 2097152
+ variants:
+ - powerpc/qoriq_e6500.*
+description: |
+ the L2 data cache size
+enabled-by: true
+format: '{}'
+links: []
+name: PPC_CACHE_DATA_L2_SIZE
+type: build
diff --git a/spec/build/bsps/powerpc/qoriq/optcacheinstl1sz.yml b/spec/build/bsps/powerpc/qoriq/optcacheinstl1sz.yml
new file mode 100644
index 0000000000..10e96967f7
--- /dev/null
+++ b/spec/build/bsps/powerpc/qoriq/optcacheinstl1sz.yml
@@ -0,0 +1,16 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+actions:
+- get-integer: null
+- define: null
+build-type: option
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+default: 32768
+default-by-variant: []
+description: |
+ the L1 instruction cache size
+enabled-by: true
+format: '{}'
+links: []
+name: PPC_CACHE_INSTRUCTION_L1_SIZE
+type: build
diff --git a/spec/build/bsps/powerpc/qoriq/optcacheinstl2sz.yml b/spec/build/bsps/powerpc/qoriq/optcacheinstl2sz.yml
new file mode 100644
index 0000000000..133941ff7b
--- /dev/null
+++ b/spec/build/bsps/powerpc/qoriq/optcacheinstl2sz.yml
@@ -0,0 +1,19 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+actions:
+- get-integer: null
+- define: null
+build-type: option
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+default: 262144
+default-by-variant:
+- value: 2097152
+ variants:
+ - powerpc/qoriq_e6500.*
+description: |
+ the L2 instruction cache size
+enabled-by: true
+format: '{}'
+links: []
+name: PPC_CACHE_INSTRUCTION_L2_SIZE
+type: build
diff --git a/spec/build/bsps/powerpc/qoriq/optchipnum.yml b/spec/build/bsps/powerpc/qoriq/optchipnum.yml
new file mode 100644
index 0000000000..f8bb14166f
--- /dev/null
+++ b/spec/build/bsps/powerpc/qoriq/optchipnum.yml
@@ -0,0 +1,19 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+actions:
+- get-integer: null
+- define: null
+build-type: option
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+default: 1020
+default-by-variant:
+- value: 0
+ variants:
+ - powerpc/qoriq_e6500.*
+description: |
+ chip number, e.g. 1020, 2040, 2080, 4240
+enabled-by: true
+format: '{}'
+links: []
+name: QORIQ_CHIP_NUMBER
+type: build
diff --git a/spec/build/bsps/powerpc/qoriq/optchipser.yml b/spec/build/bsps/powerpc/qoriq/optchipser.yml
new file mode 100644
index 0000000000..c566b49761
--- /dev/null
+++ b/spec/build/bsps/powerpc/qoriq/optchipser.yml
@@ -0,0 +1,19 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+actions:
+- get-string: null
+- define-unquoted: null
+build-type: option
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+default: P
+default-by-variant:
+- value: T
+ variants:
+ - powerpc/qoriq_e6500.*
+description: |
+ chip series, e.g. 'P' or 'T'
+enabled-by: true
+format: '''{}'''
+links: []
+name: QORIQ_CHIP_SERIES
+type: build
diff --git a/spec/build/bsps/powerpc/qoriq/optclktmctr.yml b/spec/build/bsps/powerpc/qoriq/optclktmctr.yml
new file mode 100644
index 0000000000..f3d428e437
--- /dev/null
+++ b/spec/build/bsps/powerpc/qoriq/optclktmctr.yml
@@ -0,0 +1,19 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+actions:
+- get-integer: null
+- define: null
+build-type: option
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+default: 1
+default-by-variant:
+- value: 5
+ variants:
+ - powerpc/qoriq_core_1
+description: |
+ global timer used for the timecounter, 0..3 maps to A0..A3, and 4..7 maps to B0..B3
+enabled-by: true
+format: '{}'
+links: []
+name: QORIQ_CLOCK_TIMECOUNTER
+type: build
diff --git a/spec/build/bsps/powerpc/qoriq/optclktmr.yml b/spec/build/bsps/powerpc/qoriq/optclktmr.yml
new file mode 100644
index 0000000000..61596b518c
--- /dev/null
+++ b/spec/build/bsps/powerpc/qoriq/optclktmr.yml
@@ -0,0 +1,19 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+actions:
+- get-integer: null
+- define: null
+build-type: option
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+default: 0
+default-by-variant:
+- value: 4
+ variants:
+ - powerpc/qoriq_core_1
+description: |
+ global timer used for system clock, 0..3 maps to A0..A3, and 4..7 maps to B0..B3
+enabled-by: true
+format: '{}'
+links: []
+name: QORIQ_CLOCK_TIMER
+type: build
diff --git a/spec/build/bsps/powerpc/qoriq/optcpucnt.yml b/spec/build/bsps/powerpc/qoriq/optcpucnt.yml
new file mode 100644
index 0000000000..db805547e2
--- /dev/null
+++ b/spec/build/bsps/powerpc/qoriq/optcpucnt.yml
@@ -0,0 +1,19 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+actions:
+- get-integer: null
+- define: null
+build-type: option
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+default: 2
+default-by-variant:
+- value: 24
+ variants:
+ - powerpc/qoriq_e6500.*
+description: |
+ maximum virtual processor count
+enabled-by: true
+format: '{}'
+links: []
+name: QORIQ_CPU_COUNT
+type: build
diff --git a/spec/build/bsps/powerpc/qoriq/optetsec1phy.yml b/spec/build/bsps/powerpc/qoriq/optetsec1phy.yml
new file mode 100644
index 0000000000..93e44d817c
--- /dev/null
+++ b/spec/build/bsps/powerpc/qoriq/optetsec1phy.yml
@@ -0,0 +1,16 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+actions:
+- get-integer: null
+- define: null
+build-type: option
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+default: -1
+default-by-variant: []
+description: |
+ PHY address for eTSEC interface 1
+enabled-by: true
+format: '{}'
+links: []
+name: QORIQ_ETSEC_1_PHY_ADDR
+type: build
diff --git a/spec/build/bsps/powerpc/qoriq/optetsec2phy.yml b/spec/build/bsps/powerpc/qoriq/optetsec2phy.yml
new file mode 100644
index 0000000000..037db1630a
--- /dev/null
+++ b/spec/build/bsps/powerpc/qoriq/optetsec2phy.yml
@@ -0,0 +1,16 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+actions:
+- get-integer: null
+- define: null
+build-type: option
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+default: 0
+default-by-variant: []
+description: |
+ PHY address for eTSEC interface 2
+enabled-by: true
+format: '{}'
+links: []
+name: QORIQ_ETSEC_2_PHY_ADDR
+type: build
diff --git a/spec/build/bsps/powerpc/qoriq/optetsec3phy.yml b/spec/build/bsps/powerpc/qoriq/optetsec3phy.yml
new file mode 100644
index 0000000000..21a511339a
--- /dev/null
+++ b/spec/build/bsps/powerpc/qoriq/optetsec3phy.yml
@@ -0,0 +1,16 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+actions:
+- get-integer: null
+- define: null
+build-type: option
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+default: 1
+default-by-variant: []
+description: |
+ PHY address for eTSEC interface 3
+enabled-by: true
+format: '{}'
+links: []
+name: QORIQ_ETSEC_3_PHY_ADDR
+type: build
diff --git a/spec/build/bsps/powerpc/qoriq/optexcbooke.yml b/spec/build/bsps/powerpc/qoriq/optexcbooke.yml
new file mode 100644
index 0000000000..e27cb4ab44
--- /dev/null
+++ b/spec/build/bsps/powerpc/qoriq/optexcbooke.yml
@@ -0,0 +1,15 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+actions:
+- get-boolean: null
+- define-condition: null
+build-type: option
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+default: true
+default-by-variant: []
+description: |
+ only support Book E exception types
+enabled-by: true
+links: []
+name: PPC_EXC_CONFIG_BOOKE_ONLY
+type: build
diff --git a/spec/build/bsps/powerpc/qoriq/optexcfixdhdlr.yml b/spec/build/bsps/powerpc/qoriq/optexcfixdhdlr.yml
new file mode 100644
index 0000000000..b636d8022b
--- /dev/null
+++ b/spec/build/bsps/powerpc/qoriq/optexcfixdhdlr.yml
@@ -0,0 +1,15 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+actions:
+- get-boolean: null
+- define-condition: null
+build-type: option
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+default: true
+default-by-variant: []
+description: |
+ use fixed high-level exception handler
+enabled-by: true
+links: []
+name: PPC_EXC_CONFIG_USE_FIXED_HANDLER
+type: build
diff --git a/spec/build/bsps/powerpc/qoriq/optfdtmxsz.yml b/spec/build/bsps/powerpc/qoriq/optfdtmxsz.yml
new file mode 100644
index 0000000000..14af766230
--- /dev/null
+++ b/spec/build/bsps/powerpc/qoriq/optfdtmxsz.yml
@@ -0,0 +1,16 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+actions:
+- get-integer: null
+- define: null
+build-type: option
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+default: 262144
+default-by-variant: []
+description: |
+ maximum size of the FDT blob in bytes
+enabled-by: true
+format: '{}'
+links: []
+name: BSP_FDT_BLOB_SIZE_MAX
+type: build
diff --git a/spec/build/bsps/powerpc/qoriq/optfdtro.yml b/spec/build/bsps/powerpc/qoriq/optfdtro.yml
new file mode 100644
index 0000000000..a61bb2924b
--- /dev/null
+++ b/spec/build/bsps/powerpc/qoriq/optfdtro.yml
@@ -0,0 +1,15 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+actions:
+- get-boolean: null
+- define-condition: null
+build-type: option
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+default: true
+default-by-variant: []
+description: |
+ place the FDT blob into the read-only data area
+enabled-by: true
+links: []
+name: BSP_FDT_BLOB_READ_ONLY
+type: build
diff --git a/spec/build/bsps/powerpc/qoriq/opthid0.yml b/spec/build/bsps/powerpc/qoriq/opthid0.yml
new file mode 100644
index 0000000000..c0b1a56346
--- /dev/null
+++ b/spec/build/bsps/powerpc/qoriq/opthid0.yml
@@ -0,0 +1,19 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+actions:
+- get-integer: null
+- define: null
+build-type: option
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+default: null
+default-by-variant:
+- value: 1073741824
+ variants:
+ - powerpc/qoriq_e6500.*
+description: |
+ initial HID0 value (EN_L2MMU_MHD is set by default on the T-series)
+enabled-by: true
+format: '{:#010x}'
+links: []
+name: QORIQ_INITIAL_HID0
+type: build
diff --git a/spec/build/bsps/powerpc/qoriq/opthyp.yml b/spec/build/bsps/powerpc/qoriq/opthyp.yml
new file mode 100644
index 0000000000..ccb383c8b5
--- /dev/null
+++ b/spec/build/bsps/powerpc/qoriq/opthyp.yml
@@ -0,0 +1,18 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+actions:
+- get-boolean: null
+- define-condition: null
+build-type: option
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+default: false
+default-by-variant:
+- value: true
+ variants:
+ - powerpc/qoriq_e6500.*
+description: |
+ defined if the processor core has a hypervisor mode
+enabled-by: true
+links: []
+name: QORIQ_HAS_HYPERVISOR_MODE
+type: build
diff --git a/spec/build/bsps/powerpc/qoriq/opthypguest.yml b/spec/build/bsps/powerpc/qoriq/opthypguest.yml
new file mode 100644
index 0000000000..6e579dc06c
--- /dev/null
+++ b/spec/build/bsps/powerpc/qoriq/opthypguest.yml
@@ -0,0 +1,15 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+actions:
+- get-boolean: null
+- define-condition: null
+build-type: option
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+default: false
+default-by-variant: []
+description: |
+ defined if we are a hypervisor guest
+enabled-by: true
+links: []
+name: QORIQ_IS_HYPERVISOR_GUEST
+type: build
diff --git a/spec/build/bsps/powerpc/qoriq/opticombegin.yml b/spec/build/bsps/powerpc/qoriq/opticombegin.yml
new file mode 100644
index 0000000000..29dae8f4a5
--- /dev/null
+++ b/spec/build/bsps/powerpc/qoriq/opticombegin.yml
@@ -0,0 +1,16 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+actions:
+- get-integer: null
+- define: null
+build-type: option
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+default: 50331648
+default-by-variant: []
+description: |
+ inter-processor communication area begin
+enabled-by: true
+format: '{:#010x}'
+links: []
+name: QORIQ_INTERCOM_AREA_BEGIN
+type: build
diff --git a/spec/build/bsps/powerpc/qoriq/opticomsz.yml b/spec/build/bsps/powerpc/qoriq/opticomsz.yml
new file mode 100644
index 0000000000..ebb977bac9
--- /dev/null
+++ b/spec/build/bsps/powerpc/qoriq/opticomsz.yml
@@ -0,0 +1,16 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+actions:
+- get-integer: null
+- define: null
+build-type: option
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+default: 16777216
+default-by-variant: []
+description: |
+ inter-processor communication area size
+enabled-by: true
+format: '{:#010x}'
+links: []
+name: QORIQ_INTERCOM_AREA_SIZE
+type: build
diff --git a/spec/build/bsps/powerpc/qoriq/optmas7.yml b/spec/build/bsps/powerpc/qoriq/optmas7.yml
new file mode 100644
index 0000000000..77ed473263
--- /dev/null
+++ b/spec/build/bsps/powerpc/qoriq/optmas7.yml
@@ -0,0 +1,19 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+actions:
+- get-integer: null
+- define: null
+build-type: option
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+default: 0
+default-by-variant:
+- value: 15
+ variants:
+ - powerpc/qoriq_e6500.*
+description: |
+ MAS7 value for device TLB1 entries
+enabled-by: true
+format: '{:#010x}'
+links: []
+name: QORIQ_MMU_DEVICE_MAS7
+type: build
diff --git a/spec/build/bsps/powerpc/qoriq/optmsr.yml b/spec/build/bsps/powerpc/qoriq/optmsr.yml
new file mode 100644
index 0000000000..5327f63c6f
--- /dev/null
+++ b/spec/build/bsps/powerpc/qoriq/optmsr.yml
@@ -0,0 +1,22 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+actions:
+- get-integer: null
+- define: null
+build-type: option
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+default: 33554944
+default-by-variant:
+- value: 2181046784
+ variants:
+ - powerpc/qoriq_e6500_64.*
+- value: 33563136
+ variants:
+ - powerpc/qoriq_e6500_32.*
+description: |
+ initial MSR value
+enabled-by: true
+format: '{:#010x}'
+links: []
+name: QORIQ_INITIAL_MSR
+type: build
diff --git a/spec/build/bsps/powerpc/qoriq/optspefscr.yml b/spec/build/bsps/powerpc/qoriq/optspefscr.yml
new file mode 100644
index 0000000000..820eef00ec
--- /dev/null
+++ b/spec/build/bsps/powerpc/qoriq/optspefscr.yml
@@ -0,0 +1,19 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+actions:
+- get-integer: null
+- define: null
+build-type: option
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+default: 0
+default-by-variant:
+- value: null
+ variants:
+ - powerpc/qoriq_e6500.*
+description: |
+ initial SPEFSCR value
+enabled-by: true
+format: '{:#010x}'
+links: []
+name: QORIQ_INITIAL_SPEFSCR
+type: build
diff --git a/spec/build/bsps/powerpc/qoriq/optthrdcnt.yml b/spec/build/bsps/powerpc/qoriq/optthrdcnt.yml
new file mode 100644
index 0000000000..5a2b67bf5c
--- /dev/null
+++ b/spec/build/bsps/powerpc/qoriq/optthrdcnt.yml
@@ -0,0 +1,19 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+actions:
+- get-integer: null
+- define: null
+build-type: option
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+default: 1
+default-by-variant:
+- value: 2
+ variants:
+ - powerpc/qoriq_e6500.*
+description: |
+ the number of threads per core
+enabled-by: true
+format: '{}'
+links: []
+name: QORIQ_PHYSICAL_THREAD_COUNT
+type: build
diff --git a/spec/build/bsps/powerpc/qoriq/opttlb1cnt.yml b/spec/build/bsps/powerpc/qoriq/opttlb1cnt.yml
new file mode 100644
index 0000000000..4b9ed660b7
--- /dev/null
+++ b/spec/build/bsps/powerpc/qoriq/opttlb1cnt.yml
@@ -0,0 +1,19 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+actions:
+- get-integer: null
+- define: null
+build-type: option
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+default: 16
+default-by-variant:
+- value: 64
+ variants:
+ - powerpc/qoriq_e6500.*
+description: |
+ TLB1 entry count
+enabled-by: true
+format: '{}'
+links: []
+name: QORIQ_TLB1_ENTRY_COUNT
+type: build
diff --git a/spec/build/bsps/powerpc/qoriq/optuart0en.yml b/spec/build/bsps/powerpc/qoriq/optuart0en.yml
new file mode 100644
index 0000000000..c462db34d3
--- /dev/null
+++ b/spec/build/bsps/powerpc/qoriq/optuart0en.yml
@@ -0,0 +1,18 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+actions:
+- get-boolean: null
+- define-condition: null
+build-type: option
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+default: true
+default-by-variant:
+- value: false
+ variants:
+ - powerpc/qoriq_core_1
+description: |
+ use 1 to enable UART 0, otherwise use 0
+enabled-by: true
+links: []
+name: QORIQ_UART_0_ENABLE
+type: build
diff --git a/spec/build/bsps/powerpc/qoriq/optuart1en.yml b/spec/build/bsps/powerpc/qoriq/optuart1en.yml
new file mode 100644
index 0000000000..af613ec57f
--- /dev/null
+++ b/spec/build/bsps/powerpc/qoriq/optuart1en.yml
@@ -0,0 +1,18 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+actions:
+- get-boolean: null
+- define-condition: null
+build-type: option
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+default: true
+default-by-variant:
+- value: false
+ variants:
+ - powerpc/qoriq_core_1
+description: |
+ use 1 to enable UART 1, otherwise use 0
+enabled-by: true
+links: []
+name: QORIQ_UART_1_ENABLE
+type: build
diff --git a/spec/build/bsps/powerpc/qoriq/optuartbrg0en.yml b/spec/build/bsps/powerpc/qoriq/optuartbrg0en.yml
new file mode 100644
index 0000000000..05706d7ef7
--- /dev/null
+++ b/spec/build/bsps/powerpc/qoriq/optuartbrg0en.yml
@@ -0,0 +1,15 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+actions:
+- get-boolean: null
+- define-condition: null
+build-type: option
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+default: false
+default-by-variant: []
+description: |
+ use 1 to enable UART 0 to Intercom bridge, otherwise use 0
+enabled-by: true
+links: []
+name: QORIQ_UART_BRIDGE_0_ENABLE
+type: build
diff --git a/spec/build/bsps/powerpc/qoriq/optuartbrg1en.yml b/spec/build/bsps/powerpc/qoriq/optuartbrg1en.yml
new file mode 100644
index 0000000000..cc2c43c13a
--- /dev/null
+++ b/spec/build/bsps/powerpc/qoriq/optuartbrg1en.yml
@@ -0,0 +1,21 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+actions:
+- get-boolean: null
+- define-condition: null
+build-type: option
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+default: false
+default-by-variant:
+- value: true
+ variants:
+ - powerpc/qoriq_core_0
+- value: true
+ variants:
+ - powerpc/qoriq_core_1
+description: |
+ use 1 to enable UART 1 to Intercom bridge, otherwise use 0
+enabled-by: true
+links: []
+name: QORIQ_UART_BRIDGE_1_ENABLE
+type: build
diff --git a/spec/build/bsps/powerpc/qoriq/optuartbrgmas.yml b/spec/build/bsps/powerpc/qoriq/optuartbrgmas.yml
new file mode 100644
index 0000000000..8a58b8c518
--- /dev/null
+++ b/spec/build/bsps/powerpc/qoriq/optuartbrgmas.yml
@@ -0,0 +1,16 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+actions:
+- get-integer: null
+- define: null
+build-type: option
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+default: 0
+default-by-variant: []
+description: |
+ UART to Intercom bridge master core index
+enabled-by: true
+format: '{}'
+links: []
+name: QORIQ_UART_BRIDGE_MASTER_CORE
+type: build
diff --git a/spec/build/bsps/powerpc/qoriq/optuartbrgpri.yml b/spec/build/bsps/powerpc/qoriq/optuartbrgpri.yml
new file mode 100644
index 0000000000..b653aaf881
--- /dev/null
+++ b/spec/build/bsps/powerpc/qoriq/optuartbrgpri.yml
@@ -0,0 +1,16 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+actions:
+- get-integer: null
+- define: null
+build-type: option
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+default: 250
+default-by-variant: []
+description: |
+ UART to Intercom bridge task priority
+enabled-by: true
+format: '{}'
+links: []
+name: QORIQ_UART_BRIDGE_TASK_PRIORITY
+type: build
diff --git a/spec/build/bsps/powerpc/qoriq/optuartbrgslv.yml b/spec/build/bsps/powerpc/qoriq/optuartbrgslv.yml
new file mode 100644
index 0000000000..8a672326f9
--- /dev/null
+++ b/spec/build/bsps/powerpc/qoriq/optuartbrgslv.yml
@@ -0,0 +1,16 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+actions:
+- get-integer: null
+- define: null
+build-type: option
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+default: 0
+default-by-variant: []
+description: |
+ UART to Intercom bridge slave core index
+enabled-by: true
+format: '{}'
+links: []
+name: QORIQ_UART_BRIDGE_SLAVE_CORE
+type: build
diff --git a/spec/build/bsps/powerpc/qoriq/optuartirq.yml b/spec/build/bsps/powerpc/qoriq/optuartirq.yml
new file mode 100644
index 0000000000..152668b2d9
--- /dev/null
+++ b/spec/build/bsps/powerpc/qoriq/optuartirq.yml
@@ -0,0 +1,15 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+actions:
+- get-boolean: null
+- define-condition: null
+build-type: option
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+default: true
+default-by-variant: []
+description: |
+ enable usage of interrupts for the UART modules
+enabled-by: true
+links: []
+name: BSP_USE_UART_INTERRUPTS
+type: build
diff --git a/spec/build/bsps/powerpc/qoriq/start.yml b/spec/build/bsps/powerpc/qoriq/start.yml
new file mode 100644
index 0000000000..c3e8e5c95c
--- /dev/null
+++ b/spec/build/bsps/powerpc/qoriq/start.yml
@@ -0,0 +1,14 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+asflags: []
+build-type: start-file
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+enabled-by: true
+includes: []
+install-path: ${BSP_LIBDIR}
+links: []
+source:
+- bsps/powerpc/qoriq/start/start.S
+target: start.o
+type: build
diff --git a/spec/build/bsps/powerpc/ss555/abi.yml b/spec/build/bsps/powerpc/ss555/abi.yml
new file mode 100644
index 0000000000..5d49ce0905
--- /dev/null
+++ b/spec/build/bsps/powerpc/ss555/abi.yml
@@ -0,0 +1,18 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+actions:
+- get-string: null
+- split: null
+- env-append: null
+build-type: option
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+default:
+- -Dmpc555
+- -mcpu=505
+default-by-variant: []
+description: |
+ ABI flags
+enabled-by: true
+links: []
+name: ABI_FLAGS
+type: build
diff --git a/spec/build/bsps/powerpc/ss555/bspss555.yml b/spec/build/bsps/powerpc/ss555/bspss555.yml
new file mode 100644
index 0000000000..ee366fdec9
--- /dev/null
+++ b/spec/build/bsps/powerpc/ss555/bspss555.yml
@@ -0,0 +1,81 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+arch: powerpc
+bsp: ss555
+build-type: bsp
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+enabled-by: true
+family: ss555
+includes: []
+install:
+- destination: ${BSP_INCLUDEDIR}
+ source:
+ - bsps/powerpc/ss555/include/bsp.h
+ - bsps/powerpc/ss555/include/tm27.h
+- destination: ${BSP_INCLUDEDIR}/bsp
+ source:
+ - bsps/powerpc/ss555/include/bsp/irq.h
+- destination: ${BSP_LIBDIR}
+ source:
+ - bsps/powerpc/ss555/start/linkcmds
+links:
+- role: build-dependency
+ uid: ../../obj
+- role: build-dependency
+ uid: ../../opto2
+- role: build-dependency
+ uid: ../crti
+- role: build-dependency
+ uid: ../crtn
+- role: build-dependency
+ uid: ../grp
+- role: build-dependency
+ uid: ../obj
+- role: build-dependency
+ uid: abi
+- role: build-dependency
+ uid: optconminor
+- role: build-dependency
+ uid: optprintkminor
+- role: build-dependency
+ uid: optuartsiomode
+- role: build-dependency
+ uid: optuartsterm
+- role: build-dependency
+ uid: optwdgtimeout
+- role: build-dependency
+ uid: start
+- role: build-dependency
+ uid: ../../bspopts
+source:
+- bsps/powerpc/shared/btimer/btimer-ppc-dec.c
+- bsps/powerpc/shared/cache/cache.c
+- bsps/powerpc/shared/exceptions/ppc_exc_print.c
+- bsps/powerpc/ss555/clock/clock.c
+- bsps/powerpc/ss555/clock/p_clock.c
+- bsps/powerpc/ss555/console/console.c
+- bsps/powerpc/ss555/dev/console-generic.c
+- bsps/powerpc/ss555/start/bspstart.c
+- bsps/powerpc/ss555/start/irq.c
+- bsps/powerpc/ss555/start/irq_asm.S
+- bsps/powerpc/ss555/start/irq_init.c
+- bsps/powerpc/ss555/start/iss555.c
+- bsps/powerpc/ss555/start/raw_exception.c
+- bsps/powerpc/ss555/start/tm27supp.c
+- bsps/powerpc/ss555/start/vectors.S
+- bsps/powerpc/ss555/start/vectors_init.c
+- bsps/shared/dev/getentropy/getentropy-cpucounter.c
+- bsps/shared/irq/irq-default-handler.c
+- bsps/shared/irq/irq-default.c
+- bsps/shared/irq/irq-generic.c
+- bsps/shared/irq/irq-info.c
+- bsps/shared/irq/irq-lock.c
+- bsps/shared/irq/irq-server.c
+- bsps/shared/irq/irq-shell.c
+- bsps/shared/start/bspfatal-default.c
+- bsps/shared/start/bspgetworkarea-default.c
+- bsps/shared/start/bspreset-empty.c
+- bsps/shared/start/sbrk.c
+type: build
diff --git a/spec/build/bsps/powerpc/ss555/optconminor.yml b/spec/build/bsps/powerpc/ss555/optconminor.yml
new file mode 100644
index 0000000000..edadd92fe1
--- /dev/null
+++ b/spec/build/bsps/powerpc/ss555/optconminor.yml
@@ -0,0 +1,16 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+actions:
+- get-string: null
+- define-unquoted: null
+build-type: option
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+default: SCI2_MINOR
+default-by-variant: []
+description: |
+ Must be defined to be one of SCI1_MINOR or SCI2_MINOR. Determines which device will be registered as /dev/console.
+enabled-by: true
+format: '{}'
+links: []
+name: CONSOLE_MINOR
+type: build
diff --git a/spec/build/bsps/powerpc/ss555/optprintkminor.yml b/spec/build/bsps/powerpc/ss555/optprintkminor.yml
new file mode 100644
index 0000000000..86cb37b0ab
--- /dev/null
+++ b/spec/build/bsps/powerpc/ss555/optprintkminor.yml
@@ -0,0 +1,16 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+actions:
+- get-string: null
+- define-unquoted: null
+build-type: option
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+default: SCI2_MINOR
+default-by-variant: []
+description: |
+ Must be defined to be one of SCI1_MINOR or SCI2_MINOR. Determines which device is used for output by printk(). The printk port always uses polled I/O. Don't open the printk port from RTEMS unless also using polled I/O for the SCI ports.
+enabled-by: true
+format: '{}'
+links: []
+name: PRINTK_MINOR
+type: build
diff --git a/spec/build/bsps/powerpc/ss555/optuartsiomode.yml b/spec/build/bsps/powerpc/ss555/optuartsiomode.yml
new file mode 100644
index 0000000000..8e351bb7a1
--- /dev/null
+++ b/spec/build/bsps/powerpc/ss555/optuartsiomode.yml
@@ -0,0 +1,15 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+actions:
+- get-boolean: null
+- define-condition: null
+build-type: option
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+default: false
+default-by-variant: []
+description: |
+ Define to 1 if you want interrupt-driven I/O for the SCI ports.
+enabled-by: true
+links: []
+name: UARTS_IO_MODE
+type: build
diff --git a/spec/build/bsps/powerpc/ss555/optuartsterm.yml b/spec/build/bsps/powerpc/ss555/optuartsterm.yml
new file mode 100644
index 0000000000..1aa2122c24
--- /dev/null
+++ b/spec/build/bsps/powerpc/ss555/optuartsterm.yml
@@ -0,0 +1,15 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+actions:
+- get-boolean: null
+- define-condition: null
+build-type: option
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+default: false
+default-by-variant: []
+description: |
+ Define to 1 if you want termios support for every port. Termios support is independent of the choice of UART I/O mode.
+enabled-by: true
+links: []
+name: UARTS_USE_TERMIOS
+type: build
diff --git a/spec/build/bsps/powerpc/ss555/optwdgtimeout.yml b/spec/build/bsps/powerpc/ss555/optwdgtimeout.yml
new file mode 100644
index 0000000000..2cb717a1fc
--- /dev/null
+++ b/spec/build/bsps/powerpc/ss555/optwdgtimeout.yml
@@ -0,0 +1,16 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+actions:
+- get-integer: null
+- define: null
+build-type: option
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+default: 65535
+default-by-variant: []
+description: |
+ Define to the desired timeout (in steps of 1/20 msec) to enable the watchdog. Default is to disable the watchdog entirely.
+enabled-by: true
+format: '{:#010x}'
+links: []
+name: WATCHDOG_TIMEOUT
+type: build
diff --git a/spec/build/bsps/powerpc/ss555/start.yml b/spec/build/bsps/powerpc/ss555/start.yml
new file mode 100644
index 0000000000..67d16365b0
--- /dev/null
+++ b/spec/build/bsps/powerpc/ss555/start.yml
@@ -0,0 +1,14 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+asflags: []
+build-type: start-file
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+enabled-by: true
+includes: []
+install-path: ${BSP_LIBDIR}
+links: []
+source:
+- bsps/powerpc/ss555/start/start.S
+target: start.o
+type: build
diff --git a/spec/build/bsps/powerpc/start.yml b/spec/build/bsps/powerpc/start.yml
new file mode 100644
index 0000000000..6efecf617f
--- /dev/null
+++ b/spec/build/bsps/powerpc/start.yml
@@ -0,0 +1,14 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+asflags: []
+build-type: start-file
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+enabled-by: true
+includes: []
+install-path: ${BSP_LIBDIR}
+links: []
+source:
+- bsps/powerpc/shared/start/start.S
+target: start.o
+type: build
diff --git a/spec/build/bsps/powerpc/t32mppc/abi.yml b/spec/build/bsps/powerpc/t32mppc/abi.yml
new file mode 100644
index 0000000000..30d75f7e1d
--- /dev/null
+++ b/spec/build/bsps/powerpc/t32mppc/abi.yml
@@ -0,0 +1,20 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+actions:
+- get-string: null
+- split: null
+- env-append: null
+build-type: option
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+default:
+- -mcpu=8540
+- -msoft-float
+- -meabi
+- -msdata=sysv
+default-by-variant: []
+description: |
+ ABI flags
+enabled-by: true
+links: []
+name: ABI_FLAGS
+type: build
diff --git a/spec/build/bsps/powerpc/t32mppc/bspt32mppc.yml b/spec/build/bsps/powerpc/t32mppc/bspt32mppc.yml
new file mode 100644
index 0000000000..7c1c1ad4c4
--- /dev/null
+++ b/spec/build/bsps/powerpc/t32mppc/bspt32mppc.yml
@@ -0,0 +1,70 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+arch: powerpc
+bsp: t32mppc
+build-type: bsp
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+enabled-by: true
+family: t32mppc
+includes: []
+install:
+- destination: ${BSP_INCLUDEDIR}
+ source:
+ - bsps/powerpc/t32mppc/include/bsp.h
+ - bsps/powerpc/t32mppc/include/tm27.h
+- destination: ${BSP_INCLUDEDIR}/bsp
+ source:
+ - bsps/powerpc/t32mppc/include/bsp/irq.h
+- destination: ${BSP_LIBDIR}
+ source:
+ - bsps/powerpc/shared/start/linkcmds.base
+ - bsps/powerpc/t32mppc/start/linkcmds
+links:
+- role: build-dependency
+ uid: ../../obj
+- role: build-dependency
+ uid: ../../objirq
+- role: build-dependency
+ uid: ../../optog
+- role: build-dependency
+ uid: ../crti
+- role: build-dependency
+ uid: ../crtn
+- role: build-dependency
+ uid: ../grp
+- role: build-dependency
+ uid: ../obj
+- role: build-dependency
+ uid: ../objexc
+- role: build-dependency
+ uid: abi
+- role: build-dependency
+ uid: objsmp
+- role: build-dependency
+ uid: optexcbooke
+- role: build-dependency
+ uid: optexcfixdhdlr
+- role: build-dependency
+ uid: start
+- role: build-dependency
+ uid: ../../bspopts
+source:
+- bsps/powerpc/shared/cache/cache.c
+- bsps/powerpc/shared/exceptions/ppc-exc-handler-table.c
+- bsps/powerpc/shared/start/bsp-start-zero.S
+- bsps/powerpc/shared/start/tictac.c
+- bsps/powerpc/t32mppc/clock/clock-config.c
+- bsps/powerpc/t32mppc/console/console.c
+- bsps/powerpc/t32mppc/irq/irq.c
+- bsps/powerpc/t32mppc/start/bspreset.c
+- bsps/powerpc/t32mppc/start/bspstart.c
+- bsps/shared/dev/btimer/btimer-stub.c
+- bsps/shared/dev/getentropy/getentropy-cpucounter.c
+- bsps/shared/dev/serial/console-termios.c
+- bsps/shared/irq/irq-default-handler.c
+- bsps/shared/start/bspfatal-default.c
+- bsps/shared/start/bspgetworkarea-default.c
+- bsps/shared/start/sbrk.c
+type: build
diff --git a/spec/build/bsps/powerpc/t32mppc/objsmp.yml b/spec/build/bsps/powerpc/t32mppc/objsmp.yml
new file mode 100644
index 0000000000..c69a03be9b
--- /dev/null
+++ b/spec/build/bsps/powerpc/t32mppc/objsmp.yml
@@ -0,0 +1,15 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: objects
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by:
+- RTEMS_SMP
+includes: []
+install: []
+links: []
+source:
+- bsps/shared/start/bspsmp-dummy.c
+type: build
diff --git a/spec/build/bsps/powerpc/t32mppc/optexcbooke.yml b/spec/build/bsps/powerpc/t32mppc/optexcbooke.yml
new file mode 100644
index 0000000000..e27cb4ab44
--- /dev/null
+++ b/spec/build/bsps/powerpc/t32mppc/optexcbooke.yml
@@ -0,0 +1,15 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+actions:
+- get-boolean: null
+- define-condition: null
+build-type: option
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+default: true
+default-by-variant: []
+description: |
+ only support Book E exception types
+enabled-by: true
+links: []
+name: PPC_EXC_CONFIG_BOOKE_ONLY
+type: build
diff --git a/spec/build/bsps/powerpc/t32mppc/optexcfixdhdlr.yml b/spec/build/bsps/powerpc/t32mppc/optexcfixdhdlr.yml
new file mode 100644
index 0000000000..b636d8022b
--- /dev/null
+++ b/spec/build/bsps/powerpc/t32mppc/optexcfixdhdlr.yml
@@ -0,0 +1,15 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+actions:
+- get-boolean: null
+- define-condition: null
+build-type: option
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+default: true
+default-by-variant: []
+description: |
+ use fixed high-level exception handler
+enabled-by: true
+links: []
+name: PPC_EXC_CONFIG_USE_FIXED_HANDLER
+type: build
diff --git a/spec/build/bsps/powerpc/t32mppc/start.yml b/spec/build/bsps/powerpc/t32mppc/start.yml
new file mode 100644
index 0000000000..7a6d2bab5f
--- /dev/null
+++ b/spec/build/bsps/powerpc/t32mppc/start.yml
@@ -0,0 +1,14 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+asflags: []
+build-type: start-file
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+enabled-by: true
+includes: []
+install-path: ${BSP_LIBDIR}
+links: []
+source:
+- bsps/powerpc/t32mppc/start/start.S
+target: start.o
+type: build
diff --git a/spec/build/bsps/powerpc/tqm8xx/abi.yml b/spec/build/bsps/powerpc/tqm8xx/abi.yml
new file mode 100644
index 0000000000..42d984d9b2
--- /dev/null
+++ b/spec/build/bsps/powerpc/tqm8xx/abi.yml
@@ -0,0 +1,22 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+actions:
+- get-string: null
+- split: null
+- env-append: null
+build-type: option
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+default:
+- -Dmpc860
+- -mcpu=860
+- -mstrict-align
+- -fno-strict-aliasing
+- -meabi
+- -msdata=sysv
+default-by-variant: []
+description: |
+ ABI flags
+enabled-by: true
+links: []
+name: ABI_FLAGS
+type: build
diff --git a/spec/build/bsps/powerpc/tqm8xx/bsppghplus.yml b/spec/build/bsps/powerpc/tqm8xx/bsppghplus.yml
new file mode 100644
index 0000000000..cff38f2626
--- /dev/null
+++ b/spec/build/bsps/powerpc/tqm8xx/bsppghplus.yml
@@ -0,0 +1,19 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+arch: powerpc
+bsp: pghplus
+build-type: bsp
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+enabled-by: true
+family: tqm8xx
+includes: []
+install: []
+links:
+- role: build-dependency
+ uid: ../../opto2
+- role: build-dependency
+ uid: grp
+source: []
+type: build
diff --git a/spec/build/bsps/powerpc/tqm8xx/bspstk8xx.yml b/spec/build/bsps/powerpc/tqm8xx/bspstk8xx.yml
new file mode 100644
index 0000000000..0640e8b872
--- /dev/null
+++ b/spec/build/bsps/powerpc/tqm8xx/bspstk8xx.yml
@@ -0,0 +1,19 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+arch: powerpc
+bsp: tqm8xx_stk8xx
+build-type: bsp
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+enabled-by: true
+family: tqm8xx
+includes: []
+install: []
+links:
+- role: build-dependency
+ uid: ../../opto2
+- role: build-dependency
+ uid: grp
+source: []
+type: build
diff --git a/spec/build/bsps/powerpc/tqm8xx/grp.yml b/spec/build/bsps/powerpc/tqm8xx/grp.yml
new file mode 100644
index 0000000000..61e2b51baa
--- /dev/null
+++ b/spec/build/bsps/powerpc/tqm8xx/grp.yml
@@ -0,0 +1,56 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: group
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+enabled-by: true
+includes: []
+install: []
+ldflags: []
+links:
+- role: build-dependency
+ uid: ../../obj
+- role: build-dependency
+ uid: ../../objirq
+- role: build-dependency
+ uid: ../crti
+- role: build-dependency
+ uid: ../crtn
+- role: build-dependency
+ uid: ../grp
+- role: build-dependency
+ uid: ../obj
+- role: build-dependency
+ uid: ../objexc
+- role: build-dependency
+ uid: abi
+- role: build-dependency
+ uid: obj
+- role: build-dependency
+ uid: objnet
+- role: build-dependency
+ uid: optconchn
+- role: build-dependency
+ uid: optconscc1
+- role: build-dependency
+ uid: optconscc2
+- role: build-dependency
+ uid: optconscc3
+- role: build-dependency
+ uid: optconscc4
+- role: build-dependency
+ uid: optconsmc1
+- role: build-dependency
+ uid: optconsmc2
+- role: build-dependency
+ uid: optnetfec
+- role: build-dependency
+ uid: optnetscc
+- role: build-dependency
+ uid: optprintkchn
+- role: build-dependency
+ uid: start
+- role: build-dependency
+ uid: ../../bspopts
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/bsps/powerpc/tqm8xx/obj.yml b/spec/build/bsps/powerpc/tqm8xx/obj.yml
new file mode 100644
index 0000000000..124b0fb523
--- /dev/null
+++ b/spec/build/bsps/powerpc/tqm8xx/obj.yml
@@ -0,0 +1,49 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: objects
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by: true
+includes: []
+install:
+- destination: ${BSP_INCLUDEDIR}
+ source:
+ - bsps/powerpc/tqm8xx/include/bsp.h
+ - bsps/powerpc/tqm8xx/include/tm27.h
+- destination: ${BSP_INCLUDEDIR}/bsp
+ source:
+ - bsps/powerpc/tqm8xx/include/bsp/8xx_immap.h
+ - bsps/powerpc/tqm8xx/include/bsp/irq.h
+ - bsps/powerpc/tqm8xx/include/bsp/spi.h
+ - bsps/powerpc/tqm8xx/include/bsp/tqm.h
+- destination: ${BSP_LIBDIR}
+ source:
+ - bsps/powerpc/shared/start/linkcmds.base
+ - bsps/powerpc/tqm8xx/start/linkcmds
+links: []
+source:
+- bsps/powerpc/shared/btimer/btimer-ppc-dec.c
+- bsps/powerpc/shared/cache/cache.c
+- bsps/powerpc/shared/clock/clock.c
+- bsps/powerpc/shared/start/bspidle.c
+- bsps/powerpc/tqm8xx/btimer/btimer.c
+- bsps/powerpc/tqm8xx/clock/p_clock.c
+- bsps/powerpc/tqm8xx/console/console.c
+- bsps/powerpc/tqm8xx/irq/irq.c
+- bsps/powerpc/tqm8xx/spi/spi.c
+- bsps/powerpc/tqm8xx/start/bspgetworkarea.c
+- bsps/powerpc/tqm8xx/start/bspstart.c
+- bsps/powerpc/tqm8xx/start/cp.c
+- bsps/powerpc/tqm8xx/start/cpuinit.c
+- bsps/powerpc/tqm8xx/start/dpram.c
+- bsps/powerpc/tqm8xx/start/mmu.c
+- bsps/powerpc/tqm8xx/start/mmutlbtab.c
+- bsps/shared/dev/getentropy/getentropy-cpucounter.c
+- bsps/shared/dev/serial/console-termios.c
+- bsps/shared/irq/irq-default-handler.c
+- bsps/shared/start/bspfatal-default.c
+- bsps/shared/start/bspreset-empty.c
+- bsps/shared/start/sbrk.c
+type: build
diff --git a/spec/build/bsps/powerpc/tqm8xx/objnet.yml b/spec/build/bsps/powerpc/tqm8xx/objnet.yml
new file mode 100644
index 0000000000..3a3492c0ed
--- /dev/null
+++ b/spec/build/bsps/powerpc/tqm8xx/objnet.yml
@@ -0,0 +1,17 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: objects
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by:
+- RTEMS_NETWORKING
+includes:
+- cpukit/libnetworking
+install: []
+links: []
+source:
+- bsps/powerpc/tqm8xx/net/network_fec.c
+- bsps/powerpc/tqm8xx/net/network_scc.c
+type: build
diff --git a/spec/build/bsps/powerpc/tqm8xx/optconchn.yml b/spec/build/bsps/powerpc/tqm8xx/optconchn.yml
new file mode 100644
index 0000000000..a33cfc32ab
--- /dev/null
+++ b/spec/build/bsps/powerpc/tqm8xx/optconchn.yml
@@ -0,0 +1,16 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+actions:
+- get-string: null
+- define-unquoted: null
+build-type: option
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+default: CONS_CHN_SMC1
+default-by-variant: []
+description: |
+ (BSP--console driver) Must be defined to be one of CONS_CHN_SMC1, CONS_CHN_SMC2, CONS_CHN_SCC1, CONS_CHN_SCC2, CONS_CHN_SCC3, or CONS_CHN_SCC4. Determines which device will be registered as /dev/console.
+enabled-by: true
+format: '{}'
+links: []
+name: CONSOLE_CHN
+type: build
diff --git a/spec/build/bsps/powerpc/tqm8xx/optconscc1.yml b/spec/build/bsps/powerpc/tqm8xx/optconscc1.yml
new file mode 100644
index 0000000000..6c0499daf1
--- /dev/null
+++ b/spec/build/bsps/powerpc/tqm8xx/optconscc1.yml
@@ -0,0 +1,16 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+actions:
+- get-string: null
+- define-unquoted: null
+build-type: option
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+default: CONS_MODE_UNUSED
+default-by-variant: []
+description: |
+ (BSP--SCC1 UART IF mode) Must be defined if SCC1 is used as a tty (UART) channel. Set it to CONS_MODE_POLLED for polled operation, CONS_MODE_IRQ for interrupt driven (spooled) operation. Set it to CONS_MODE_UNUSED, if not used
+enabled-by: true
+format: '{}'
+links: []
+name: CONS_SCC1_MODE
+type: build
diff --git a/spec/build/bsps/powerpc/tqm8xx/optconscc2.yml b/spec/build/bsps/powerpc/tqm8xx/optconscc2.yml
new file mode 100644
index 0000000000..754abd522f
--- /dev/null
+++ b/spec/build/bsps/powerpc/tqm8xx/optconscc2.yml
@@ -0,0 +1,16 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+actions:
+- get-string: null
+- define-unquoted: null
+build-type: option
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+default: CONS_MODE_UNUSED
+default-by-variant: []
+description: |
+ (BSP--SCC2 UART IF mode) Must be defined if SCC2 is used as a tty (UART) channel. Set it to CONS_MODE_POLLED for polled operation, CONS_MODE_IRQ for interrupt driven (spooled) operation. Set it to CONS_MODE_UNUSED, if not used
+enabled-by: true
+format: '{}'
+links: []
+name: CONS_SCC2_MODE
+type: build
diff --git a/spec/build/bsps/powerpc/tqm8xx/optconscc3.yml b/spec/build/bsps/powerpc/tqm8xx/optconscc3.yml
new file mode 100644
index 0000000000..bdc665cbde
--- /dev/null
+++ b/spec/build/bsps/powerpc/tqm8xx/optconscc3.yml
@@ -0,0 +1,16 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+actions:
+- get-string: null
+- define-unquoted: null
+build-type: option
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+default: CONS_MODE_UNUSED
+default-by-variant: []
+description: |
+ (BSP--SCC3 UART IF mode) Must be defined if SCC3 is used as a tty (UART) channel. Set it to CONS_MODE_POLLED for polled operation, CONS_MODE_IRQ for interrupt driven (spooled) operation. Set it to CONS_MODE_UNUSED, if not used
+enabled-by: true
+format: '{}'
+links: []
+name: CONS_SCC3_MODE
+type: build
diff --git a/spec/build/bsps/powerpc/tqm8xx/optconscc4.yml b/spec/build/bsps/powerpc/tqm8xx/optconscc4.yml
new file mode 100644
index 0000000000..e26ffcad07
--- /dev/null
+++ b/spec/build/bsps/powerpc/tqm8xx/optconscc4.yml
@@ -0,0 +1,16 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+actions:
+- get-string: null
+- define-unquoted: null
+build-type: option
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+default: CONS_MODE_UNUSED
+default-by-variant: []
+description: |
+ (BSP--SCC4 UART IF mode) Must be defined if SCC4 is used as a tty (UART) channel. Set it to CONS_MODE_POLLED for polled operation, CONS_MODE_IRQ for interrupt driven (spooled) operation. Set it to CONS_MODE_UNUSED, if not used
+enabled-by: true
+format: '{}'
+links: []
+name: CONS_SCC4_MODE
+type: build
diff --git a/spec/build/bsps/powerpc/tqm8xx/optconsmc1.yml b/spec/build/bsps/powerpc/tqm8xx/optconsmc1.yml
new file mode 100644
index 0000000000..7c7f563d00
--- /dev/null
+++ b/spec/build/bsps/powerpc/tqm8xx/optconsmc1.yml
@@ -0,0 +1,22 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+actions:
+- get-string: null
+- define-unquoted: null
+build-type: option
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+default: CONS_MODE_UNUSED
+default-by-variant:
+- value: CONS_MODE_POLLED
+ variants:
+ - powerpc/tqm8xx_stk8xx
+- value: CONS_MODE_IRQ
+ variants:
+ - powerpc/pghplus
+description: |
+ (BSP--SMC1 UART IF mode) Must be defined if SMC1 is used as a tty (UART) channel. Set it to CONS_MODE_POLLED for polled operation, CONS_MODE_IRQ for interrupt driven (spooled) operation. Set it to CONS_MODE_UNUSED, if not used
+enabled-by: true
+format: '{}'
+links: []
+name: CONS_SMC1_MODE
+type: build
diff --git a/spec/build/bsps/powerpc/tqm8xx/optconsmc2.yml b/spec/build/bsps/powerpc/tqm8xx/optconsmc2.yml
new file mode 100644
index 0000000000..c19c2850fb
--- /dev/null
+++ b/spec/build/bsps/powerpc/tqm8xx/optconsmc2.yml
@@ -0,0 +1,19 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+actions:
+- get-string: null
+- define-unquoted: null
+build-type: option
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+default: CONS_MODE_UNUSED
+default-by-variant:
+- value: CONS_MODE_POLLED
+ variants:
+ - powerpc/tqm8xx_stk8xx
+description: |
+ (BSP--SMC2 UART IF mode) Must be defined if SMC2 is used as a tty (UART) channel. Set it to CONS_MODE_POLLED for polled operation, CONS_MODE_IRQ for interrupt driven (spooled) operation. Set it to CONS_MODE_UNUSED, if not used
+enabled-by: true
+format: '{}'
+links: []
+name: CONS_SMC2_MODE
+type: build
diff --git a/spec/build/bsps/powerpc/tqm8xx/optnetfec.yml b/spec/build/bsps/powerpc/tqm8xx/optnetfec.yml
new file mode 100644
index 0000000000..52a1fc7afe
--- /dev/null
+++ b/spec/build/bsps/powerpc/tqm8xx/optnetfec.yml
@@ -0,0 +1,18 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+actions:
+- get-boolean: null
+- define-condition: null
+build-type: option
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+default: false
+default-by-variant:
+- value: true
+ variants:
+ - powerpc/pghplus
+description: |
+ If defined, then the BSP will use the Fast Ethernet Controller for 10/100MBit networking and used as primary networking interface.
+enabled-by: true
+links: []
+name: BSP_USE_NETWORK_FEC
+type: build
diff --git a/spec/build/bsps/powerpc/tqm8xx/optnetscc.yml b/spec/build/bsps/powerpc/tqm8xx/optnetscc.yml
new file mode 100644
index 0000000000..fe3492accf
--- /dev/null
+++ b/spec/build/bsps/powerpc/tqm8xx/optnetscc.yml
@@ -0,0 +1,18 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+actions:
+- get-boolean: null
+- define-condition: null
+build-type: option
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+default: true
+default-by-variant:
+- value: false
+ variants:
+ - powerpc/pghplus
+description: |
+ If defined, then the BSP will use the Serial Communications Controller (SCC1) for 10MBit networking.
+enabled-by: true
+links: []
+name: BSP_USE_NETWORK_SCC
+type: build
diff --git a/spec/build/bsps/powerpc/tqm8xx/optprintkchn.yml b/spec/build/bsps/powerpc/tqm8xx/optprintkchn.yml
new file mode 100644
index 0000000000..cffd48009d
--- /dev/null
+++ b/spec/build/bsps/powerpc/tqm8xx/optprintkchn.yml
@@ -0,0 +1,16 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+actions:
+- get-string: null
+- define-unquoted: null
+build-type: option
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+default: CONS_CHN_SMC1
+default-by-variant: []
+description: |
+ (BSP--console driver) Must be defined to be one of CONS_CHN_SMC1, CONS_CHN_SMC2, CONS_CHN_SCC2, CONS_CHN_SCC3, or CONS_CHN_SCC4. Determines which device is used for output by printk(). If the port that printk() uses is also used for other I/O (e.g. if PRINTK_CHN == CONSOLE_CHN), then both ports should use the same type of I/O, otherwise the drivers will likely conflict with each other.
+enabled-by: true
+format: '{}'
+links: []
+name: PRINTK_CHN
+type: build
diff --git a/spec/build/bsps/powerpc/tqm8xx/start.yml b/spec/build/bsps/powerpc/tqm8xx/start.yml
new file mode 100644
index 0000000000..ac62e13991
--- /dev/null
+++ b/spec/build/bsps/powerpc/tqm8xx/start.yml
@@ -0,0 +1,14 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+asflags: []
+build-type: start-file
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+enabled-by: true
+includes: []
+install-path: ${BSP_LIBDIR}
+links: []
+source:
+- bsps/powerpc/tqm8xx/start/start.S
+target: start.o
+type: build
diff --git a/spec/build/bsps/powerpc/vecentry.yml b/spec/build/bsps/powerpc/vecentry.yml
new file mode 100644
index 0000000000..ba7d789c84
--- /dev/null
+++ b/spec/build/bsps/powerpc/vecentry.yml
@@ -0,0 +1,14 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+asflags: []
+build-type: start-file
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+enabled-by: true
+includes: []
+install-path: ${BSP_LIBDIR}
+links: []
+source:
+- bsps/powerpc/shared/start/vectors_entry.S
+target: vectors_entry.o
+type: build
diff --git a/spec/build/bsps/powerpc/virtex/abi.yml b/spec/build/bsps/powerpc/virtex/abi.yml
new file mode 100644
index 0000000000..c4c842a399
--- /dev/null
+++ b/spec/build/bsps/powerpc/virtex/abi.yml
@@ -0,0 +1,20 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+actions:
+- get-string: null
+- split: null
+- env-append: null
+build-type: option
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+default:
+- -Dppc405
+- -mcpu=403
+- -meabi
+- -msdata=sysv
+default-by-variant: []
+description: |
+ ABI flags
+enabled-by: true
+links: []
+name: ABI_FLAGS
+type: build
diff --git a/spec/build/bsps/powerpc/virtex/bspvirtex.yml b/spec/build/bsps/powerpc/virtex/bspvirtex.yml
new file mode 100644
index 0000000000..bf7eebe2b5
--- /dev/null
+++ b/spec/build/bsps/powerpc/virtex/bspvirtex.yml
@@ -0,0 +1,86 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+arch: powerpc
+bsp: virtex
+build-type: bsp
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+enabled-by: true
+family: virtex
+includes: []
+install:
+- destination: ${BSP_INCLUDEDIR}
+ source:
+ - bsps/powerpc/virtex/include/bsp.h
+ - bsps/powerpc/virtex/include/tm27.h
+ - bsps/powerpc/virtex/include/xiltemac.h
+ - bsps/powerpc/virtex/include/xparameters_dflt.h
+- destination: ${BSP_INCLUDEDIR}/bsp
+ source:
+ - bsps/powerpc/virtex/include/bsp/irq.h
+ - bsps/powerpc/virtex/include/bsp/opbintctrl.h
+- destination: ${BSP_LIBDIR}
+ source:
+ - bsps/powerpc/shared/start/linkcmds.base
+links:
+- role: build-dependency
+ uid: ../../obj
+- role: build-dependency
+ uid: ../../objirq
+- role: build-dependency
+ uid: ../../opto2
+- role: build-dependency
+ uid: ../crti
+- role: build-dependency
+ uid: ../crtn
+- role: build-dependency
+ uid: ../grp
+- role: build-dependency
+ uid: ../obj
+- role: build-dependency
+ uid: ../objexc
+- role: build-dependency
+ uid: abi
+- role: build-dependency
+ uid: objnet
+- role: build-dependency
+ uid: optconirq
+- role: build-dependency
+ uid: optfastramlen
+- role: build-dependency
+ uid: optfastramorg
+- role: build-dependency
+ uid: optramlen
+- role: build-dependency
+ uid: optramorg
+- role: build-dependency
+ uid: optresetlen
+- role: build-dependency
+ uid: optresetorg
+- role: build-dependency
+ uid: optxparam
+- role: build-dependency
+ uid: linkcmds
+- role: build-dependency
+ uid: start
+- role: build-dependency
+ uid: ../../bspopts
+source:
+- bsps/powerpc/shared/btimer/btimer-ppc-dec.c
+- bsps/powerpc/shared/cache/cache.c
+- bsps/powerpc/shared/clock/clock.c
+- bsps/powerpc/shared/start/bsp-start-zero.S
+- bsps/powerpc/virtex/console/consolelite.c
+- bsps/powerpc/virtex/irq/irq_init.c
+- bsps/powerpc/virtex/start/bspstart.c
+- bsps/shared/dev/getentropy/getentropy-cpucounter.c
+- bsps/shared/dev/serial/legacy-console-control.c
+- bsps/shared/dev/serial/legacy-console-select.c
+- bsps/shared/dev/serial/legacy-console.c
+- bsps/shared/irq/irq-default-handler.c
+- bsps/shared/start/bspfatal-default.c
+- bsps/shared/start/bspgetworkarea-default.c
+- bsps/shared/start/bspreset-loop.c
+- bsps/shared/start/sbrk.c
+type: build
diff --git a/spec/build/bsps/powerpc/virtex/linkcmds.yml b/spec/build/bsps/powerpc/virtex/linkcmds.yml
new file mode 100644
index 0000000000..6de570fbdd
--- /dev/null
+++ b/spec/build/bsps/powerpc/virtex/linkcmds.yml
@@ -0,0 +1,45 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: config-file
+content: |
+ EXTERN (__vectors)
+
+ MEMORY {
+ RAM : ORIGIN = ${VIRTEX_RAM_ORIGIN}, LENGTH = ${VIRTEX_RAM_LENGTH}
+ FAST_RAM : ORIGIN = ${VIRTEX_FAST_RAM_ORIGIN}, LENGTH = ${VIRTEX_FAST_RAM_LENGTH}
+ RESET : ORIGIN = ${VIRTEX_RESET_ORIGIN}, LENGTH = ${VIRTEX_RESET_LENGTH}
+ EMPTY : ORIGIN = 0x0, LENGTH = 0x0
+ }
+
+ REGION_ALIAS ("REGION_START", RAM);
+ REGION_ALIAS ("REGION_FAST_TEXT", FAST_RAM);
+ REGION_ALIAS ("REGION_FAST_TEXT_LOAD", RAM);
+ REGION_ALIAS ("REGION_TEXT", RAM);
+ REGION_ALIAS ("REGION_TEXT_LOAD", RAM);
+ REGION_ALIAS ("REGION_RODATA", RAM);
+ REGION_ALIAS ("REGION_RODATA_LOAD", RAM);
+ REGION_ALIAS ("REGION_FAST_DATA", FAST_RAM);
+ REGION_ALIAS ("REGION_FAST_DATA_LOAD", RAM);
+ REGION_ALIAS ("REGION_DATA", RAM);
+ REGION_ALIAS ("REGION_DATA_LOAD", RAM);
+ REGION_ALIAS ("REGION_BSS", RAM);
+ REGION_ALIAS ("REGION_RTEMSSTACK", RAM);
+ REGION_ALIAS ("REGION_WORK", RAM);
+ REGION_ALIAS ("REGION_STACK", RAM);
+ REGION_ALIAS ("REGION_NOCACHE", EMPTY);
+ REGION_ALIAS ("REGION_NOCACHE_LOAD", EMPTY);
+ REGION_ALIAS ("REGION_NVRAM", EMPTY);
+
+ SECTIONS {
+ .virtex_reset : {
+ KEEP (*(.virtex_reset))
+ } > RESET AT > RESET
+ }
+
+ INCLUDE linkcmds.base
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+enabled-by: true
+install-path: ${BSP_LIBDIR}
+links: []
+target: linkcmds
+type: build
diff --git a/spec/build/bsps/powerpc/virtex/objnet.yml b/spec/build/bsps/powerpc/virtex/objnet.yml
new file mode 100644
index 0000000000..7d902970a1
--- /dev/null
+++ b/spec/build/bsps/powerpc/virtex/objnet.yml
@@ -0,0 +1,16 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: objects
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by:
+- RTEMS_NETWORKING
+includes:
+- cpukit/libnetworking
+install: []
+links: []
+source:
+- bsps/powerpc/virtex/net/xiltemac.c
+type: build
diff --git a/spec/build/bsps/powerpc/virtex/optconirq.yml b/spec/build/bsps/powerpc/virtex/optconirq.yml
new file mode 100644
index 0000000000..d3e07791a8
--- /dev/null
+++ b/spec/build/bsps/powerpc/virtex/optconirq.yml
@@ -0,0 +1,15 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+actions:
+- get-boolean: null
+- define-condition: null
+build-type: option
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+default: true
+default-by-variant: []
+description: |
+ if defined use interrupt driven Termios mode
+enabled-by: true
+links: []
+name: VIRTEX_CONSOLE_USE_INTERRUPTS
+type: build
diff --git a/spec/build/bsps/powerpc/virtex/optfastramlen.yml b/spec/build/bsps/powerpc/virtex/optfastramlen.yml
new file mode 100644
index 0000000000..366457a492
--- /dev/null
+++ b/spec/build/bsps/powerpc/virtex/optfastramlen.yml
@@ -0,0 +1,18 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+actions:
+- get-integer: null
+- assert-uint32: null
+- env-assign: null
+- format-and-define: null
+build-type: option
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+default: 0
+default-by-variant: []
+description: |
+ fast RAM region length
+enabled-by: true
+format: '{:#010x}'
+links: []
+name: VIRTEX_FAST_RAM_LENGTH
+type: build
diff --git a/spec/build/bsps/powerpc/virtex/optfastramorg.yml b/spec/build/bsps/powerpc/virtex/optfastramorg.yml
new file mode 100644
index 0000000000..608ddb8c42
--- /dev/null
+++ b/spec/build/bsps/powerpc/virtex/optfastramorg.yml
@@ -0,0 +1,18 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+actions:
+- get-integer: null
+- assert-uint32: null
+- env-assign: null
+- format-and-define: null
+build-type: option
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+default: 0
+default-by-variant: []
+description: |
+ fast RAM region origin
+enabled-by: true
+format: '{:#010x}'
+links: []
+name: VIRTEX_FAST_RAM_ORIGIN
+type: build
diff --git a/spec/build/bsps/powerpc/virtex/optramlen.yml b/spec/build/bsps/powerpc/virtex/optramlen.yml
new file mode 100644
index 0000000000..e07b9b715e
--- /dev/null
+++ b/spec/build/bsps/powerpc/virtex/optramlen.yml
@@ -0,0 +1,18 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+actions:
+- get-integer: null
+- assert-uint32: null
+- env-assign: null
+- format-and-define: null
+build-type: option
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+default: 134217708
+default-by-variant: []
+description: |
+ normal RAM region length
+enabled-by: true
+format: '{:#010x}'
+links: []
+name: VIRTEX_RAM_LENGTH
+type: build
diff --git a/spec/build/bsps/powerpc/virtex/optramorg.yml b/spec/build/bsps/powerpc/virtex/optramorg.yml
new file mode 100644
index 0000000000..1c396974c9
--- /dev/null
+++ b/spec/build/bsps/powerpc/virtex/optramorg.yml
@@ -0,0 +1,18 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+actions:
+- get-integer: null
+- assert-uint32: null
+- env-assign: null
+- format-and-define: null
+build-type: option
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+default: 0
+default-by-variant: []
+description: |
+ normal RAM region origin
+enabled-by: true
+format: '{:#010x}'
+links: []
+name: VIRTEX_RAM_ORIGIN
+type: build
diff --git a/spec/build/bsps/powerpc/virtex/optresetlen.yml b/spec/build/bsps/powerpc/virtex/optresetlen.yml
new file mode 100644
index 0000000000..79892a4f41
--- /dev/null
+++ b/spec/build/bsps/powerpc/virtex/optresetlen.yml
@@ -0,0 +1,17 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+actions:
+- get-integer: null
+- assert-uint32: null
+- env-assign: null
+- format-and-define: null
+build-type: option
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+default: 20
+default-by-variant: []
+description: ''
+enabled-by: true
+format: '{:#010x}'
+links: []
+name: VIRTEX_RESET_LENGTH
+type: build
diff --git a/spec/build/bsps/powerpc/virtex/optresetorg.yml b/spec/build/bsps/powerpc/virtex/optresetorg.yml
new file mode 100644
index 0000000000..f60fc4646c
--- /dev/null
+++ b/spec/build/bsps/powerpc/virtex/optresetorg.yml
@@ -0,0 +1,18 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+actions:
+- get-integer: null
+- assert-uint32: null
+- env-assign: null
+- format-and-define: null
+build-type: option
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+default: 134217708
+default-by-variant: []
+description: |
+ reset region origin
+enabled-by: true
+format: '{:#010x}'
+links: []
+name: VIRTEX_RESET_ORIGIN
+type: build
diff --git a/spec/build/bsps/powerpc/virtex/optxparam.yml b/spec/build/bsps/powerpc/virtex/optxparam.yml
new file mode 100644
index 0000000000..4fd5f3d1c4
--- /dev/null
+++ b/spec/build/bsps/powerpc/virtex/optxparam.yml
@@ -0,0 +1,16 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+actions:
+- get-string: null
+- define-unquoted: null
+build-type: option
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+default: <xparameters_dflt.h>
+default-by-variant: []
+description: |
+ This defines the location of the hardware specific "xparameters.h" file. in the file system. Specify an absolute path. Do not forget the double quotes
+enabled-by: true
+format: '{}'
+links: []
+name: RTEMS_XPARAMETERS_H
+type: build
diff --git a/spec/build/bsps/powerpc/virtex/start.yml b/spec/build/bsps/powerpc/virtex/start.yml
new file mode 100644
index 0000000000..1548744a12
--- /dev/null
+++ b/spec/build/bsps/powerpc/virtex/start.yml
@@ -0,0 +1,14 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+asflags: []
+build-type: start-file
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+enabled-by: true
+includes: []
+install-path: ${BSP_LIBDIR}
+links: []
+source:
+- bsps/powerpc/virtex/start/start.S
+target: start.o
+type: build
diff --git a/spec/build/bsps/powerpc/virtex4/abi.yml b/spec/build/bsps/powerpc/virtex4/abi.yml
new file mode 100644
index 0000000000..1fc318b3cb
--- /dev/null
+++ b/spec/build/bsps/powerpc/virtex4/abi.yml
@@ -0,0 +1,18 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+actions:
+- get-string: null
+- split: null
+- env-append: null
+build-type: option
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+default:
+- -Dppc405
+- -mcpu=405
+default-by-variant: []
+description: |
+ ABI flags
+enabled-by: true
+links: []
+name: ABI_FLAGS
+type: build
diff --git a/spec/build/bsps/powerpc/virtex4/bspvirtex4.yml b/spec/build/bsps/powerpc/virtex4/bspvirtex4.yml
new file mode 100644
index 0000000000..8c5dca9955
--- /dev/null
+++ b/spec/build/bsps/powerpc/virtex4/bspvirtex4.yml
@@ -0,0 +1,70 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+arch: powerpc
+bsp: virtex4
+build-type: bsp
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+enabled-by: true
+family: virtex4
+includes: []
+install:
+- destination: ${BSP_INCLUDEDIR}
+ source:
+ - bsps/powerpc/virtex4/include/bsp.h
+ - bsps/powerpc/virtex4/include/tm27.h
+- destination: ${BSP_INCLUDEDIR}/bsp
+ source:
+ - bsps/powerpc/virtex4/include/bsp/irq.h
+ - bsps/powerpc/virtex4/include/bsp/mmu.h
+- destination: ${BSP_LIBDIR}
+ source:
+ - bsps/powerpc/virtex4/start/linkcmds
+links:
+- role: build-dependency
+ uid: ../../obj
+- role: build-dependency
+ uid: ../../objirqdflt
+- role: build-dependency
+ uid: ../../opto2
+- role: build-dependency
+ uid: ../crti
+- role: build-dependency
+ uid: ../crtn
+- role: build-dependency
+ uid: ../grp
+- role: build-dependency
+ uid: ../obj
+- role: build-dependency
+ uid: ../objexc
+- role: build-dependency
+ uid: abi
+- role: build-dependency
+ uid: optppccachedata
+- role: build-dependency
+ uid: optsprg
+- role: build-dependency
+ uid: optvecbase
+- role: build-dependency
+ uid: start
+- role: build-dependency
+ uid: ../../bspopts
+source:
+- bsps/powerpc/shared/btimer/btimer-ppc-dec.c
+- bsps/powerpc/shared/cache/cache.c
+- bsps/powerpc/shared/clock/clock-ppc403.c
+- bsps/powerpc/shared/start/memcpy.c
+- bsps/powerpc/shared/start/zerobss.c
+- bsps/powerpc/virtex4/irq/irq_init.c
+- bsps/powerpc/virtex4/start/bspclean.c
+- bsps/powerpc/virtex4/start/bspstart.c
+- bsps/powerpc/virtex4/start/dummy_console.c
+- bsps/powerpc/virtex4/start/mmu.c
+- bsps/powerpc/virtex4/start/start.S
+- bsps/shared/dev/getentropy/getentropy-cpucounter.c
+- bsps/shared/dev/serial/printk-dummy.c
+- bsps/shared/start/bspgetworkarea-default.c
+- bsps/shared/start/bspreset-empty.c
+- bsps/shared/start/sbrk.c
+type: build
diff --git a/spec/build/bsps/powerpc/virtex4/optppccachedata.yml b/spec/build/bsps/powerpc/virtex4/optppccachedata.yml
new file mode 100644
index 0000000000..ef96c06b8e
--- /dev/null
+++ b/spec/build/bsps/powerpc/virtex4/optppccachedata.yml
@@ -0,0 +1,15 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+actions:
+- get-boolean: null
+- define-condition: null
+build-type: option
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+default: true
+default-by-variant: []
+description: |
+ If defined, then the PowerPC specific code in RTEMS will use data cache instructions to optimize the context switch code. This code can conflict with debuggers or emulators. It is known to break the Corelis PowerPC emulator with at least some combinations of PowerPC 603e revisions and emulator versions. The BSP actually contains the call that enables this.
+enabled-by: true
+links: []
+name: PPC_USE_DATA_CACHE
+type: build
diff --git a/spec/build/bsps/powerpc/virtex4/optsprg.yml b/spec/build/bsps/powerpc/virtex4/optsprg.yml
new file mode 100644
index 0000000000..1e1a112f43
--- /dev/null
+++ b/spec/build/bsps/powerpc/virtex4/optsprg.yml
@@ -0,0 +1,15 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+actions:
+- get-boolean: null
+- define-condition: null
+build-type: option
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+default: true
+default-by-variant: []
+description: |
+ If defined, then the PowerPC specific code in RTEMS will use some of the special purpose registers to slightly optimize interrupt response time. The use of these registers can conflict with other tools like debuggers.
+enabled-by: true
+links: []
+name: PPC_USE_SPRG
+type: build
diff --git a/spec/build/bsps/powerpc/virtex4/optvecbase.yml b/spec/build/bsps/powerpc/virtex4/optvecbase.yml
new file mode 100644
index 0000000000..fdc72a1863
--- /dev/null
+++ b/spec/build/bsps/powerpc/virtex4/optvecbase.yml
@@ -0,0 +1,16 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+actions:
+- get-integer: null
+- define: null
+build-type: option
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+default: 256
+default-by-variant: []
+description: |
+ This defines the base address of the exception table.
+enabled-by: true
+format: '{:#010x}'
+links: []
+name: PPC_VECTOR_FILE_BASE
+type: build
diff --git a/spec/build/bsps/powerpc/virtex4/start.yml b/spec/build/bsps/powerpc/virtex4/start.yml
new file mode 100644
index 0000000000..e54271ee99
--- /dev/null
+++ b/spec/build/bsps/powerpc/virtex4/start.yml
@@ -0,0 +1,14 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+asflags: []
+build-type: start-file
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+enabled-by: true
+includes: []
+install-path: ${BSP_LIBDIR}
+links: []
+source:
+- bsps/powerpc/virtex4/start/start.S
+target: start.o
+type: build
diff --git a/spec/build/bsps/powerpc/virtex5/abi.yml b/spec/build/bsps/powerpc/virtex5/abi.yml
new file mode 100644
index 0000000000..3318bbbe42
--- /dev/null
+++ b/spec/build/bsps/powerpc/virtex5/abi.yml
@@ -0,0 +1,19 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+actions:
+- get-string: null
+- split: null
+- env-append: null
+build-type: option
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+default:
+- -Dppc440
+- -mcpu=440
+- -msoft-float
+default-by-variant: []
+description: |
+ ABI flags
+enabled-by: true
+links: []
+name: ABI_FLAGS
+type: build
diff --git a/spec/build/bsps/powerpc/virtex5/bspvirtex5.yml b/spec/build/bsps/powerpc/virtex5/bspvirtex5.yml
new file mode 100644
index 0000000000..c0c679f8b8
--- /dev/null
+++ b/spec/build/bsps/powerpc/virtex5/bspvirtex5.yml
@@ -0,0 +1,71 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+arch: powerpc
+bsp: virtex5
+build-type: bsp
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+enabled-by: true
+family: virtex5
+includes: []
+install:
+- destination: ${BSP_INCLUDEDIR}
+ source:
+ - bsps/powerpc/virtex5/include/bsp.h
+ - bsps/powerpc/virtex5/include/tm27.h
+- destination: ${BSP_INCLUDEDIR}/bsp
+ source:
+ - bsps/powerpc/virtex5/include/bsp/irq.h
+ - bsps/powerpc/virtex5/include/bsp/mmu.h
+- destination: ${BSP_LIBDIR}
+ source:
+ - bsps/powerpc/virtex5/start/linkcmds
+links:
+- role: build-dependency
+ uid: ../../obj
+- role: build-dependency
+ uid: ../../objirqdflt
+- role: build-dependency
+ uid: ../../opto2
+- role: build-dependency
+ uid: ../crti
+- role: build-dependency
+ uid: ../crtn
+- role: build-dependency
+ uid: ../grp
+- role: build-dependency
+ uid: ../obj
+- role: build-dependency
+ uid: ../objexc
+- role: build-dependency
+ uid: abi
+- role: build-dependency
+ uid: optppccachedata
+- role: build-dependency
+ uid: optsprg
+- role: build-dependency
+ uid: optvecbase
+- role: build-dependency
+ uid: start
+- role: build-dependency
+ uid: ../../bspopts
+source:
+- bsps/powerpc/shared/btimer/btimer-ppc-dec.c
+- bsps/powerpc/shared/cache/cache.c
+- bsps/powerpc/shared/clock/clock-ppc-dec.c
+- bsps/powerpc/shared/clock/p_clock.c
+- bsps/powerpc/shared/start/memcpy.c
+- bsps/powerpc/shared/start/zerobss.c
+- bsps/powerpc/virtex5/irq/irq_init.c
+- bsps/powerpc/virtex5/start/bspclean.c
+- bsps/powerpc/virtex5/start/bspstart.c
+- bsps/powerpc/virtex5/start/dummy_console.c
+- bsps/powerpc/virtex5/start/mmu.c
+- bsps/powerpc/virtex5/start/start.S
+- bsps/shared/dev/getentropy/getentropy-cpucounter.c
+- bsps/shared/dev/serial/printk-dummy.c
+- bsps/shared/start/bspgetworkarea-default.c
+- bsps/shared/start/bspreset-empty.c
+- bsps/shared/start/sbrk.c
+type: build
diff --git a/spec/build/bsps/powerpc/virtex5/optppccachedata.yml b/spec/build/bsps/powerpc/virtex5/optppccachedata.yml
new file mode 100644
index 0000000000..88fed61502
--- /dev/null
+++ b/spec/build/bsps/powerpc/virtex5/optppccachedata.yml
@@ -0,0 +1,15 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+actions:
+- get-boolean: null
+- define-condition: null
+build-type: option
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+default: true
+default-by-variant: []
+description: |
+ None
+enabled-by: true
+links: []
+name: PPC_USE_DATA_CACHE
+type: build
diff --git a/spec/build/bsps/powerpc/virtex5/optsprg.yml b/spec/build/bsps/powerpc/virtex5/optsprg.yml
new file mode 100644
index 0000000000..1bb5de32db
--- /dev/null
+++ b/spec/build/bsps/powerpc/virtex5/optsprg.yml
@@ -0,0 +1,15 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+actions:
+- get-boolean: null
+- define-condition: null
+build-type: option
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+default: true
+default-by-variant: []
+description: |
+ None
+enabled-by: true
+links: []
+name: PPC_USE_SPRG
+type: build
diff --git a/spec/build/bsps/powerpc/virtex5/optvecbase.yml b/spec/build/bsps/powerpc/virtex5/optvecbase.yml
new file mode 100644
index 0000000000..fdc72a1863
--- /dev/null
+++ b/spec/build/bsps/powerpc/virtex5/optvecbase.yml
@@ -0,0 +1,16 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+actions:
+- get-integer: null
+- define: null
+build-type: option
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+default: 256
+default-by-variant: []
+description: |
+ This defines the base address of the exception table.
+enabled-by: true
+format: '{:#010x}'
+links: []
+name: PPC_VECTOR_FILE_BASE
+type: build
diff --git a/spec/build/bsps/powerpc/virtex5/start.yml b/spec/build/bsps/powerpc/virtex5/start.yml
new file mode 100644
index 0000000000..082172f8ee
--- /dev/null
+++ b/spec/build/bsps/powerpc/virtex5/start.yml
@@ -0,0 +1,14 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+asflags: []
+build-type: start-file
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+enabled-by: true
+includes: []
+install-path: ${BSP_LIBDIR}
+links: []
+source:
+- bsps/powerpc/virtex5/start/start.S
+target: start.o
+type: build
diff --git a/spec/build/bsps/riscv/griscv/abi.yml b/spec/build/bsps/riscv/griscv/abi.yml
new file mode 100644
index 0000000000..fc915468ae
--- /dev/null
+++ b/spec/build/bsps/riscv/griscv/abi.yml
@@ -0,0 +1,38 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+actions:
+- get-string: null
+- split: null
+- env-append: null
+build-type: option
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+default:
+- -march=rv32imafdc
+- -mabi=ilp32d
+default-by-variant:
+- value:
+ - -march=rv32imac
+ - -mabi=ilp32
+ variants:
+ - riscv/grv32imac
+- value:
+ - -march=rv32im
+ - -mabi=ilp32
+ variants:
+ - riscv/grv32im
+- value:
+ - -march=rv32i
+ - -mabi=ilp32
+ variants:
+ - riscv/grv32i
+- value:
+ - -march=rv32imafd
+ - -mabi=ilp32d
+ variants:
+ - riscv/griscv
+description: |
+ ABI flags
+enabled-by: true
+links: []
+name: ABI_FLAGS
+type: build
diff --git a/spec/build/bsps/riscv/griscv/bspgriscv.yml b/spec/build/bsps/riscv/griscv/bspgriscv.yml
new file mode 100644
index 0000000000..1992d096de
--- /dev/null
+++ b/spec/build/bsps/riscv/griscv/bspgriscv.yml
@@ -0,0 +1,19 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+arch: riscv
+bsp: griscv
+build-type: bsp
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+enabled-by: true
+family: griscv
+includes: []
+install: []
+links:
+- role: build-dependency
+ uid: ../../opto2
+- role: build-dependency
+ uid: grp
+source: []
+type: build
diff --git a/spec/build/bsps/riscv/griscv/bspgrv32i.yml b/spec/build/bsps/riscv/griscv/bspgrv32i.yml
new file mode 100644
index 0000000000..4f130b6cc7
--- /dev/null
+++ b/spec/build/bsps/riscv/griscv/bspgrv32i.yml
@@ -0,0 +1,19 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+arch: riscv
+bsp: grv32i
+build-type: bsp
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+enabled-by: true
+family: griscv
+includes: []
+install: []
+links:
+- role: build-dependency
+ uid: ../../opto2
+- role: build-dependency
+ uid: grp
+source: []
+type: build
diff --git a/spec/build/bsps/riscv/griscv/bspgrv32im.yml b/spec/build/bsps/riscv/griscv/bspgrv32im.yml
new file mode 100644
index 0000000000..ed17f1ae11
--- /dev/null
+++ b/spec/build/bsps/riscv/griscv/bspgrv32im.yml
@@ -0,0 +1,19 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+arch: riscv
+bsp: grv32im
+build-type: bsp
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+enabled-by: true
+family: griscv
+includes: []
+install: []
+links:
+- role: build-dependency
+ uid: ../../opto2
+- role: build-dependency
+ uid: grp
+source: []
+type: build
diff --git a/spec/build/bsps/riscv/griscv/bspgrv32imac.yml b/spec/build/bsps/riscv/griscv/bspgrv32imac.yml
new file mode 100644
index 0000000000..32c4807b57
--- /dev/null
+++ b/spec/build/bsps/riscv/griscv/bspgrv32imac.yml
@@ -0,0 +1,19 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+arch: riscv
+bsp: grv32imac
+build-type: bsp
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+enabled-by: true
+family: griscv
+includes: []
+install: []
+links:
+- role: build-dependency
+ uid: ../../opto2
+- role: build-dependency
+ uid: grp
+source: []
+type: build
diff --git a/spec/build/bsps/riscv/griscv/bspgrv32imafdc.yml b/spec/build/bsps/riscv/griscv/bspgrv32imafdc.yml
new file mode 100644
index 0000000000..1448e19869
--- /dev/null
+++ b/spec/build/bsps/riscv/griscv/bspgrv32imafdc.yml
@@ -0,0 +1,19 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+arch: riscv
+bsp: grv32imafdc
+build-type: bsp
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+enabled-by: true
+family: griscv
+includes: []
+install: []
+links:
+- role: build-dependency
+ uid: ../../opto2
+- role: build-dependency
+ uid: grp
+source: []
+type: build
diff --git a/spec/build/bsps/riscv/griscv/grp.yml b/spec/build/bsps/riscv/griscv/grp.yml
new file mode 100644
index 0000000000..1945d984f5
--- /dev/null
+++ b/spec/build/bsps/riscv/griscv/grp.yml
@@ -0,0 +1,46 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: group
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+enabled-by: true
+includes: []
+install: []
+ldflags: []
+links:
+- role: build-dependency
+ uid: ../../obj
+- role: build-dependency
+ uid: ../../objgrlib
+- role: build-dependency
+ uid: ../../objirq
+- role: build-dependency
+ uid: ../../optclang
+- role: build-dependency
+ uid: ../../optconsolebaud
+- role: build-dependency
+ uid: ../../optgcc
+- role: build-dependency
+ uid: abi
+- role: build-dependency
+ uid: obj
+- role: build-dependency
+ uid: objsmp
+- role: build-dependency
+ uid: optextirqmax
+- role: build-dependency
+ uid: ../grp
+- role: build-dependency
+ uid: ../optrambegin
+- role: build-dependency
+ uid: ../optramsize
+- role: build-dependency
+ uid: ../linkcmds
+- role: build-dependency
+ uid: ../linkcmdsbase
+- role: build-dependency
+ uid: ../start
+- role: build-dependency
+ uid: ../../bspopts
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/bsps/riscv/griscv/obj.yml b/spec/build/bsps/riscv/griscv/obj.yml
new file mode 100644
index 0000000000..769364c8fc
--- /dev/null
+++ b/spec/build/bsps/riscv/griscv/obj.yml
@@ -0,0 +1,36 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: objects
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by: true
+includes: []
+install:
+- destination: ${BSP_INCLUDEDIR}
+ source:
+ - bsps/riscv/griscv/include/amba.h
+ - bsps/riscv/griscv/include/bsp.h
+ - bsps/riscv/griscv/include/tm27.h
+- destination: ${BSP_INCLUDEDIR}/bsp
+ source:
+ - bsps/riscv/griscv/include/bsp/irq.h
+links: []
+source:
+- bsps/riscv/griscv/clock/clockdrv.c
+- bsps/riscv/griscv/console/console.c
+- bsps/riscv/griscv/console/printk_support.c
+- bsps/riscv/griscv/irq/irq.c
+- bsps/riscv/griscv/start/amba.c
+- bsps/riscv/griscv/start/bsp_fatal_halt.c
+- bsps/riscv/griscv/start/bspstart.c
+- bsps/shared/cache/nocache.c
+- bsps/shared/dev/btimer/btimer-stub.c
+- bsps/shared/dev/getentropy/getentropy-cpucounter.c
+- bsps/shared/dev/serial/console-termios.c
+- bsps/shared/irq/irq-default-handler.c
+- bsps/shared/start/bspfatal-default.c
+- bsps/shared/start/bspgetworkarea-default.c
+- bsps/shared/start/bspreset-empty.c
+type: build
diff --git a/spec/build/bsps/riscv/griscv/objsmp.yml b/spec/build/bsps/riscv/griscv/objsmp.yml
new file mode 100644
index 0000000000..83f5bb7f31
--- /dev/null
+++ b/spec/build/bsps/riscv/griscv/objsmp.yml
@@ -0,0 +1,15 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: objects
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by:
+- RTEMS_SMP
+includes: []
+install: []
+links: []
+source:
+- bsps/riscv/griscv/start/bspsmp.c
+type: build
diff --git a/spec/build/bsps/riscv/griscv/optextirqmax.yml b/spec/build/bsps/riscv/griscv/optextirqmax.yml
new file mode 100644
index 0000000000..ffa84748b6
--- /dev/null
+++ b/spec/build/bsps/riscv/griscv/optextirqmax.yml
@@ -0,0 +1,16 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+actions:
+- get-integer: null
+- define: null
+build-type: option
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+default: 64
+default-by-variant: []
+description: |
+ maximum number of external interrupts supported by the BSP (default 64)
+enabled-by: true
+format: '{}'
+links: []
+name: RISCV_MAXIMUM_EXTERNAL_INTERRUPTS
+type: build
diff --git a/spec/build/bsps/riscv/grp.yml b/spec/build/bsps/riscv/grp.yml
new file mode 100644
index 0000000000..7dad3970c5
--- /dev/null
+++ b/spec/build/bsps/riscv/grp.yml
@@ -0,0 +1,15 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: group
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+enabled-by: true
+includes: []
+install:
+- destination: ${BSP_INCLUDEDIR}/bsp
+ source:
+ - bsps/riscv/include/bsp/linker-symbols.h
+ldflags: []
+links: []
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/bsps/riscv/linkcmds.yml b/spec/build/bsps/riscv/linkcmds.yml
new file mode 100644
index 0000000000..ed536b3c5d
--- /dev/null
+++ b/spec/build/bsps/riscv/linkcmds.yml
@@ -0,0 +1,29 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: config-file
+content: |
+ MEMORY {
+ RAM : ORIGIN = ${RISCV_RAM_REGION_BEGIN}, LENGTH = ${RISCV_RAM_REGION_SIZE}
+ }
+
+ REGION_ALIAS ("REGION_START", RAM);
+ REGION_ALIAS ("REGION_TEXT", RAM);
+ REGION_ALIAS ("REGION_TEXT_LOAD", RAM);
+ REGION_ALIAS ("REGION_FAST_TEXT", RAM);
+ REGION_ALIAS ("REGION_FAST_TEXT_LOAD", RAM);
+ REGION_ALIAS ("REGION_RODATA", RAM);
+ REGION_ALIAS ("REGION_RODATA_LOAD", RAM);
+ REGION_ALIAS ("REGION_DATA", RAM);
+ REGION_ALIAS ("REGION_DATA_LOAD", RAM);
+ REGION_ALIAS ("REGION_FAST_DATA", RAM);
+ REGION_ALIAS ("REGION_FAST_DATA_LOAD", RAM);
+ REGION_ALIAS ("REGION_RTEMSSTACK", RAM);
+ REGION_ALIAS ("REGION_WORK", RAM);
+
+ INCLUDE linkcmds.base
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+enabled-by: true
+install-path: ${BSP_LIBDIR}
+links: []
+target: linkcmds
+type: build
diff --git a/spec/build/bsps/riscv/linkcmdsbase.yml b/spec/build/bsps/riscv/linkcmdsbase.yml
new file mode 100644
index 0000000000..cbc769552e
--- /dev/null
+++ b/spec/build/bsps/riscv/linkcmdsbase.yml
@@ -0,0 +1,401 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: config-file
+content: |
+ /* Copyright (C) 2014-2018 Free Software Foundation, Inc.
+ Copying and distribution of this script, with or without modification,
+ are permitted in any medium without royalty provided the copyright
+ notice and this notice are preserved. */
+
+ /*
+ * Copyright (c) 2018 embedded brains GmbH.
+ *
+ * Copyright (c) 2015 University of York.
+ * Hesham ALMatary <hmka501@york.ac.uk>
+ *
+ * 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 AUTHOR 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 AUTHOR 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.
+ */
+
+ OUTPUT_ARCH(riscv)
+ ENTRY(_start)
+ ${LINKCMDS_START_DIRECTIVE}(start.o)
+
+ bsp_section_robarrier_align = DEFINED (bsp_section_robarrier_align) ? bsp_section_robarrier_align : 1;
+ bsp_section_rwbarrier_align = DEFINED (bsp_section_rwbarrier_align) ? bsp_section_rwbarrier_align : 1;
+
+ MEMORY {
+ UNEXPECTED_SECTIONS : ORIGIN = 0xffffffff, LENGTH = 0
+ }
+
+ SECTIONS {
+ .start : ${LINKCMDS_ALIGN_DIRECTIVE} {
+ bsp_section_start_begin = .;
+ KEEP (*(.bsp_start_text))
+ KEEP (*(.bsp_start_data))
+ bsp_section_start_end = .;
+ } > REGION_START AT > REGION_START
+ bsp_section_start_size = bsp_section_start_end - bsp_section_start_begin;
+
+ .text : ${LINKCMDS_ALIGN_DIRECTIVE} {
+ bsp_section_text_begin = .;
+ *(.text.unlikely .text.*_unlikely .text.unlikely.*)
+ *(.text.exit .text.exit.*)
+ *(.text.startup .text.startup.*)
+ *(.text.hot .text.hot.*)
+ *(.text .stub .text.* .gnu.linkonce.t.*)
+ /* .gnu.warning sections are handled specially by elf32.em. */
+ *(.gnu.warning)
+ } > REGION_TEXT AT > REGION_TEXT_LOAD
+ .init : ${LINKCMDS_ALIGN_DIRECTIVE} {
+ KEEP (*(SORT_NONE(.init)))
+ } > REGION_TEXT AT > REGION_TEXT_LOAD
+ .fini : ${LINKCMDS_ALIGN_DIRECTIVE} {
+ KEEP (*(SORT_NONE(.fini)))
+ bsp_section_text_end = .;
+ } > REGION_TEXT AT > REGION_TEXT_LOAD
+ bsp_section_text_size = bsp_section_text_end - bsp_section_text_begin;
+ bsp_section_text_load_begin = LOADADDR (.text);
+ bsp_section_text_load_end = bsp_section_text_load_begin + bsp_section_text_size;
+
+ .robarrier : ${LINKCMDS_ALIGN_DIRECTIVE} {
+ . = ALIGN (bsp_section_robarrier_align);
+ } > REGION_RODATA AT > REGION_RODATA
+
+ .rodata : ${LINKCMDS_ALIGN_DIRECTIVE} {
+ bsp_section_rodata_begin = .;
+ *(.rodata .rodata.* .gnu.linkonce.r.*)
+ } > REGION_RODATA AT > REGION_RODATA_LOAD
+ .rodata1 : ${LINKCMDS_ALIGN_DIRECTIVE} {
+ *(.rodata1)
+ } > REGION_RODATA AT > REGION_RODATA_LOAD
+ .sdata2 : ${LINKCMDS_ALIGN_DIRECTIVE} {
+ *(.sdata2 .sdata2.* .gnu.linkonce.s2.*)
+ } > REGION_RODATA AT > REGION_RODATA_LOAD
+ .sbss2 : ${LINKCMDS_ALIGN_DIRECTIVE} {
+ *(.sbss2 .sbss2.* .gnu.linkonce.sb2.*)
+ } > REGION_RODATA AT > REGION_RODATA_LOAD
+ .eh_frame_hdr : ${LINKCMDS_ALIGN_DIRECTIVE} {
+ *(.eh_frame_hdr) *(.eh_frame_entry .eh_frame_entry.*)
+ } > REGION_RODATA AT > REGION_RODATA_LOAD
+ .eh_frame : ${LINKCMDS_ALIGN_DIRECTIVE} {
+ KEEP (*(.eh_frame)) *(.eh_frame.*)
+ } > REGION_RODATA AT > REGION_RODATA_LOAD
+ .gcc_except_table : ${LINKCMDS_ALIGN_DIRECTIVE} {
+ *(.gcc_except_table .gcc_except_table.*)
+ } > REGION_RODATA AT > REGION_RODATA_LOAD
+ .gnu_extab : ${LINKCMDS_ALIGN_DIRECTIVE} {
+ *(.gnu_extab*)
+ } > REGION_RODATA AT > REGION_RODATA_LOAD
+ .tdata : ${LINKCMDS_ALIGN_DIRECTIVE} {
+ _TLS_Data_begin = .;
+ *(.tdata .tdata.* .gnu.linkonce.td.*)
+ _TLS_Data_end = .;
+ } > REGION_RODATA AT > REGION_RODATA_LOAD
+ .tbss : ${LINKCMDS_ALIGN_DIRECTIVE} {
+ _TLS_BSS_begin = .;
+ *(.tbss .tbss.* .gnu.linkonce.tb.*) *(.tcommon)
+ _TLS_BSS_end = .;
+ } > REGION_RODATA AT > REGION_RODATA_LOAD
+ _TLS_Data_size = _TLS_Data_end - _TLS_Data_begin;
+ _TLS_Data_begin = _TLS_Data_size != 0 ? _TLS_Data_begin : _TLS_BSS_begin;
+ _TLS_Data_end = _TLS_Data_size != 0 ? _TLS_Data_end : _TLS_BSS_begin;
+ _TLS_BSS_size = _TLS_BSS_end - _TLS_BSS_begin;
+ _TLS_Size = _TLS_BSS_end - _TLS_Data_begin;
+ _TLS_Alignment = MAX (ALIGNOF (.tdata), ALIGNOF (.tbss));
+ .preinit_array : ${LINKCMDS_ALIGN_DIRECTIVE} {
+ PROVIDE_HIDDEN (__preinit_array_start = .);
+ KEEP (*(.preinit_array))
+ PROVIDE_HIDDEN (__preinit_array_end = .);
+ } > REGION_RODATA AT > REGION_RODATA_LOAD
+ .init_array : ${LINKCMDS_ALIGN_DIRECTIVE} {
+ PROVIDE_HIDDEN (__init_array_start = .);
+ KEEP (*(SORT_BY_INIT_PRIORITY(.init_array.*) SORT_BY_INIT_PRIORITY(.ctors.*)))
+ KEEP (*(.init_array EXCLUDE_FILE (*crtbegin.o *crtbegin?.o *crtend.o *crtend?.o ) .ctors))
+ PROVIDE_HIDDEN (__init_array_end = .);
+ } > REGION_RODATA AT > REGION_RODATA_LOAD
+ .fini_array : ${LINKCMDS_ALIGN_DIRECTIVE} {
+ PROVIDE_HIDDEN (__fini_array_start = .);
+ KEEP (*(SORT_BY_INIT_PRIORITY(.fini_array.*) SORT_BY_INIT_PRIORITY(.dtors.*)))
+ KEEP (*(.fini_array EXCLUDE_FILE (*crtbegin.o *crtbegin?.o *crtend.o *crtend?.o ) .dtors))
+ PROVIDE_HIDDEN (__fini_array_end = .);
+ } > REGION_RODATA AT > REGION_RODATA_LOAD
+ .ctors : ${LINKCMDS_ALIGN_DIRECTIVE} {
+ /* gcc uses crtbegin.o to find the start of
+ the constructors, so we make sure it is
+ first. Because this is a wildcard, it
+ doesn't matter if the user does not
+ actually link against crtbegin.o; the
+ linker won't look for a file to match a
+ wildcard. The wildcard also means that it
+ doesn't matter which directory crtbegin.o
+ is in. */
+ KEEP (*crtbegin.o(.ctors))
+ KEEP (*crtbegin?.o(.ctors))
+ /* We don't want to include the .ctor section from
+ the crtend.o file until after the sorted ctors.
+ The .ctor section from the crtend file contains the
+ end of ctors marker and it must be last */
+ KEEP (*(EXCLUDE_FILE (*crtend.o *crtend?.o ) .ctors))
+ KEEP (*(SORT(.ctors.*)))
+ KEEP (*(.ctors))
+ } > REGION_RODATA AT > REGION_RODATA_LOAD
+ .dtors : ${LINKCMDS_ALIGN_DIRECTIVE} {
+ KEEP (*crtbegin.o(.dtors))
+ KEEP (*crtbegin?.o(.dtors))
+ KEEP (*(EXCLUDE_FILE (*crtend.o *crtend?.o ) .dtors))
+ KEEP (*(SORT(.dtors.*)))
+ KEEP (*(.dtors))
+ } > REGION_RODATA AT > REGION_RODATA_LOAD
+ .data.rel.ro : ${LINKCMDS_ALIGN_DIRECTIVE} {
+ *(.data.rel.ro.local* .gnu.linkonce.d.rel.ro.local.*)
+ *(.data.rel.ro .data.rel.ro.* .gnu.linkonce.d.rel.ro.*)
+ } > REGION_RODATA AT > REGION_RODATA_LOAD
+ .jcr : ${LINKCMDS_ALIGN_DIRECTIVE} {
+ KEEP (*(.jcr))
+ } > REGION_RODATA AT > REGION_RODATA_LOAD
+ .interp : ${LINKCMDS_ALIGN_DIRECTIVE} {
+ *(.interp)
+ } > REGION_RODATA AT > REGION_RODATA_LOAD
+ .note.gnu.build-id : { *(.note.gnu.build-id)
+ } > REGION_RODATA AT > REGION_RODATA_LOAD
+ .hash : ${LINKCMDS_ALIGN_DIRECTIVE} {
+ *(.hash)
+ } > REGION_RODATA AT > REGION_RODATA_LOAD
+ .gnu.hash : ${LINKCMDS_ALIGN_DIRECTIVE} {
+ *(.gnu.hash)
+ } > REGION_RODATA AT > REGION_RODATA_LOAD
+ .dynsym : ${LINKCMDS_ALIGN_DIRECTIVE} {
+ *(.dynsym)
+ } > REGION_RODATA AT > REGION_RODATA_LOAD
+ .dynstr : ${LINKCMDS_ALIGN_DIRECTIVE} {
+ *(.dynstr)
+ } > REGION_RODATA AT > REGION_RODATA_LOAD
+ .gnu.version : ${LINKCMDS_ALIGN_DIRECTIVE} {
+ *(.gnu.version)
+ } > REGION_RODATA AT > REGION_RODATA_LOAD
+ .gnu.version_d : ${LINKCMDS_ALIGN_DIRECTIVE} {
+ *(.gnu.version_d)
+ } > REGION_RODATA AT > REGION_RODATA_LOAD
+ .gnu.version_r : ${LINKCMDS_ALIGN_DIRECTIVE} {
+ *(.gnu.version_r)
+ } > REGION_RODATA AT > REGION_RODATA_LOAD
+ .rela.dyn : ${LINKCMDS_ALIGN_DIRECTIVE} {
+ *(.rela.init)
+ *(.rela.text .rela.text.* .rela.gnu.linkonce.t.*)
+ *(.rela.fini)
+ *(.rela.rodata .rela.rodata.* .rela.gnu.linkonce.r.*)
+ *(.rela.data .rela.data.* .rela.gnu.linkonce.d.*)
+ *(.rela.tdata .rela.tdata.* .rela.gnu.linkonce.td.*)
+ *(.rela.tbss .rela.tbss.* .rela.gnu.linkonce.tb.*)
+ *(.rela.ctors)
+ *(.rela.dtors)
+ *(.rela.got)
+ *(.rela.sdata .rela.sdata.* .rela.gnu.linkonce.s.*)
+ *(.rela.sbss .rela.sbss.* .rela.gnu.linkonce.sb.*)
+ *(.rela.sdata2 .rela.sdata2.* .rela.gnu.linkonce.s2.*)
+ *(.rela.sbss2 .rela.sbss2.* .rela.gnu.linkonce.sb2.*)
+ *(.rela.bss .rela.bss.* .rela.gnu.linkonce.b.*)
+ PROVIDE_HIDDEN (__rela_iplt_start = .);
+ *(.rela.iplt)
+ PROVIDE_HIDDEN (__rela_iplt_end = .);
+ } > REGION_RODATA AT > REGION_RODATA_LOAD
+ .rela.plt : ${LINKCMDS_ALIGN_DIRECTIVE} {
+ *(.rela.plt)
+ } > REGION_RODATA AT > REGION_RODATA_LOAD
+ .plt : ${LINKCMDS_ALIGN_DIRECTIVE} {
+ *(.plt)
+ } > REGION_RODATA AT > REGION_RODATA_LOAD
+ .iplt : ${LINKCMDS_ALIGN_DIRECTIVE} {
+ *(.iplt)
+ } > REGION_RODATA AT > REGION_RODATA_LOAD
+ .dynamic : ${LINKCMDS_ALIGN_DIRECTIVE} {
+ *(.dynamic)
+ } > REGION_RODATA AT > REGION_RODATA_LOAD
+ .tm_clone_table : ${LINKCMDS_ALIGN_DIRECTIVE} {
+ *(.tm_clone_table)
+ } > REGION_RODATA AT > REGION_RODATA_LOAD
+ .got : ${LINKCMDS_ALIGN_DIRECTIVE} {
+ *(.got.plt) *(.igot.plt) *(.got) *(.igot)
+ } > REGION_RODATA AT > REGION_RODATA_LOAD
+ .rtemsroset : ${LINKCMDS_ALIGN_DIRECTIVE} {
+ /* Special FreeBSD linker set sections */
+ __start_set_sysctl_set = .;
+ *(set_sysctl_*);
+ __stop_set_sysctl_set = .;
+ *(set_domain_*);
+ *(set_pseudo_*);
+
+ KEEP (*(SORT(.rtemsroset.*)))
+ bsp_section_rodata_end = .;
+ } > REGION_RODATA AT > REGION_RODATA_LOAD
+ bsp_section_rodata_size = bsp_section_rodata_end - bsp_section_rodata_begin;
+ bsp_section_rodata_load_begin = LOADADDR (.rodata);
+ bsp_section_rodata_load_end = bsp_section_rodata_load_begin + bsp_section_rodata_size;
+
+ .rwbarrier : ${LINKCMDS_ALIGN_DIRECTIVE} {
+ . = ALIGN (bsp_section_rwbarrier_align);
+ } > REGION_DATA AT > REGION_DATA
+
+ .fast_text : ${LINKCMDS_ALIGN_DIRECTIVE} {
+ bsp_section_fast_text_begin = .;
+ *(.bsp_fast_text)
+ bsp_section_fast_text_end = .;
+ } > REGION_FAST_TEXT AT > REGION_FAST_TEXT_LOAD
+ bsp_section_fast_text_size = bsp_section_fast_text_end - bsp_section_fast_text_begin;
+ bsp_section_fast_text_load_begin = LOADADDR (.fast_text);
+ bsp_section_fast_text_load_end = bsp_section_fast_text_load_begin + bsp_section_fast_text_size;
+
+ .fast_data : ${LINKCMDS_ALIGN_DIRECTIVE} {
+ bsp_section_fast_data_begin = .;
+ *(.bsp_fast_data)
+ bsp_section_fast_data_end = .;
+ } > REGION_FAST_DATA AT > REGION_FAST_DATA_LOAD
+ bsp_section_fast_data_size = bsp_section_fast_data_end - bsp_section_fast_data_begin;
+ bsp_section_fast_data_load_begin = LOADADDR (.fast_data);
+ bsp_section_fast_data_load_end = bsp_section_fast_data_load_begin + bsp_section_fast_data_size;
+
+ .data : ${LINKCMDS_ALIGN_DIRECTIVE} {
+ bsp_section_data_begin = .;
+ *(.data .data.* .gnu.linkonce.d.*)
+ SORT(CONSTRUCTORS)
+ } > REGION_DATA AT > REGION_DATA_LOAD
+ .data1 : ${LINKCMDS_ALIGN_DIRECTIVE} {
+ *(.data1)
+ } > REGION_DATA AT > REGION_DATA_LOAD
+ .rtemsrwset : ${LINKCMDS_ALIGN_DIRECTIVE} {
+ KEEP (*(SORT(.rtemsrwset.*)))
+ } > REGION_DATA AT > REGION_DATA_LOAD
+ .htif ALIGN(4096) : ${LINKCMDS_ALIGN_DIRECTIVE} {
+ *(.htif)
+ } > REGION_DATA AT > REGION_DATA_LOAD
+ .sdata : ${LINKCMDS_ALIGN_DIRECTIVE} {
+ __global_pointer$$ = . + 0x800;
+ *(.srodata.cst16) *(.srodata.cst8) *(.srodata.cst4) *(.srodata.cst2) *(.srodata .srodata.*)
+ *(.sdata .sdata.* .gnu.linkonce.s.*)
+ bsp_section_data_end = .;
+ } > REGION_DATA AT > REGION_DATA_LOAD
+ bsp_section_data_size = bsp_section_data_end - bsp_section_data_begin;
+ bsp_section_data_load_begin = LOADADDR (.data);
+ bsp_section_data_load_end = bsp_section_data_load_begin + bsp_section_data_size;
+
+ .sbss : ${LINKCMDS_ALIGN_DIRECTIVE} {
+ bsp_section_bss_begin = .;
+ *(.dynsbss)
+ *(.sbss .sbss.* .gnu.linkonce.sb.*)
+ *(.scommon)
+ } > REGION_DATA AT > REGION_DATA
+ .bss : ${LINKCMDS_ALIGN_DIRECTIVE} {
+ *(.dynbss)
+ *(.bss .bss.* .gnu.linkonce.b.*)
+ *(COMMON)
+ bsp_section_bss_end = .;
+ } > REGION_DATA AT > REGION_DATA
+ bsp_section_bss_size = bsp_section_bss_end - bsp_section_bss_begin;
+
+ .rtemsstack (NOLOAD) : ${LINKCMDS_ALIGN_DIRECTIVE} {
+ bsp_section_rtemsstack_begin = .;
+ *(SORT(.rtemsstack.*))
+ bsp_section_rtemsstack_end = .;
+ } > REGION_RTEMSSTACK AT > REGION_RTEMSSTACK
+ bsp_section_rtemsstack_size = bsp_section_rtemsstack_end - bsp_section_rtemsstack_begin;
+
+ .work (NOLOAD) : ${LINKCMDS_ALIGN_DIRECTIVE} {
+ /*
+ * The work section will occupy the remaining REGION_WORK region and
+ * contains the RTEMS work space and heap.
+ */
+ bsp_section_work_begin = .;
+ . += ORIGIN (REGION_WORK) + LENGTH (REGION_WORK) - ABSOLUTE (.);
+ bsp_section_work_end = .;
+ } > REGION_WORK AT > REGION_WORK
+ bsp_section_work_size = bsp_section_work_end - bsp_section_work_begin;
+
+ /* FIXME */
+ RamBase = ORIGIN (REGION_WORK);
+ RamSize = LENGTH (REGION_WORK);
+ RamEnd = RamBase + RamSize;
+ WorkAreaBase = bsp_section_work_begin;
+ HeapSize = 0;
+
+ /* Stabs debugging sections. */
+ .stab 0 : { *(.stab) }
+ .stabstr 0 : { *(.stabstr) }
+ .stab.excl 0 : { *(.stab.excl) }
+ .stab.exclstr 0 : { *(.stab.exclstr) }
+ .stab.index 0 : { *(.stab.index) }
+ .stab.indexstr 0 : { *(.stab.indexstr) }
+ .comment 0 : { *(.comment) }
+ /* DWARF debug sections.
+ Symbols in the DWARF debugging sections are relative to the beginning
+ of the section so we begin them at 0. */
+ /* DWARF 1 */
+ .debug 0 : { *(.debug) }
+ .line 0 : { *(.line) }
+ /* GNU DWARF 1 extensions */
+ .debug_srcinfo 0 : { *(.debug_srcinfo) }
+ .debug_sfnames 0 : { *(.debug_sfnames) }
+ /* DWARF 1.1 and DWARF 2 */
+ .debug_aranges 0 : { *(.debug_aranges) }
+ .debug_pubnames 0 : { *(.debug_pubnames) }
+ /* DWARF 2 */
+ .debug_info 0 : { *(.debug_info .gnu.linkonce.wi.*) }
+ .debug_abbrev 0 : { *(.debug_abbrev) }
+ .debug_line 0 : { *(.debug_line .debug_line.* .debug_line_end ) }
+ .debug_frame 0 : { *(.debug_frame) }
+ .debug_str 0 : { *(.debug_str) }
+ .debug_loc 0 : { *(.debug_loc) }
+ .debug_macinfo 0 : { *(.debug_macinfo) }
+ /* SGI/MIPS DWARF 2 extensions */
+ .debug_weaknames 0 : { *(.debug_weaknames) }
+ .debug_funcnames 0 : { *(.debug_funcnames) }
+ .debug_typenames 0 : { *(.debug_typenames) }
+ .debug_varnames 0 : { *(.debug_varnames) }
+ /* DWARF 3 */
+ .debug_pubtypes 0 : { *(.debug_pubtypes) }
+ .debug_ranges 0 : { *(.debug_ranges) }
+ /* DWARF Extension. */
+ .debug_macro 0 : { *(.debug_macro) }
+ .debug_addr 0 : { *(.debug_addr) }
+ .gnu.attributes 0 : { KEEP (*(.gnu.attributes)) }
+ /DISCARD/ : { *(.note.GNU-stack) *(.gnu_debuglink) *(.gnu.lto_*) }
+ .shstrtab 0 : { *(.shstrtab) }
+ .strtab 0 : { *(.strtab) }
+ .symtab 0 : { *(.symtab) }
+ .symtab_shndx 0 : { *(.symtab_shndx) }
+ __cap_relocs 0 : { *(__cap_relocs) }
+
+ /*
+ * This is a RTEMS specific section to catch all unexpected input
+ * sections. In case you get an error like
+ * "section `.unexpected_sections' will not fit in region
+ * `UNEXPECTED_SECTIONS'"
+ * you have to figure out the offending input section and add it to the
+ * appropriate output section definition above.
+ */
+ .unexpected_sections : { *(*) } > UNEXPECTED_SECTIONS
+ }
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+enabled-by: true
+install-path: ${BSP_LIBDIR}
+links: []
+target: linkcmds.base
+type: build
diff --git a/spec/build/bsps/riscv/optrambegin.yml b/spec/build/bsps/riscv/optrambegin.yml
new file mode 100644
index 0000000000..cf5d909562
--- /dev/null
+++ b/spec/build/bsps/riscv/optrambegin.yml
@@ -0,0 +1,24 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+actions:
+- get-integer: null
+- assert-uint32: null
+- assert-aligned: 1048576
+- env-assign: null
+- format-and-define: null
+build-type: option
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+default: 2147483648
+default-by-variant:
+- value: 2147483648
+ variants:
+ - riscv/rv64.*medany
+- value: 1879048192
+ variants:
+ - riscv/rv64.*
+description: ''
+enabled-by: true
+format: '{:#010x}'
+links: []
+name: RISCV_RAM_REGION_BEGIN
+type: build
diff --git a/spec/build/bsps/riscv/optramsize.yml b/spec/build/bsps/riscv/optramsize.yml
new file mode 100644
index 0000000000..bbc226cc13
--- /dev/null
+++ b/spec/build/bsps/riscv/optramsize.yml
@@ -0,0 +1,21 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+actions:
+- get-integer: null
+- assert-uint32: null
+- assert-aligned: 1048576
+- env-assign: null
+- format-and-define: null
+build-type: option
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+default: 67108864
+default-by-variant:
+- value: 268435456
+ variants:
+ - riscv/frdme310arty
+description: ''
+enabled-by: true
+format: '{:#010x}'
+links: []
+name: RISCV_RAM_REGION_SIZE
+type: build
diff --git a/spec/build/bsps/riscv/riscv/abi.yml b/spec/build/bsps/riscv/riscv/abi.yml
new file mode 100644
index 0000000000..e975b87c4c
--- /dev/null
+++ b/spec/build/bsps/riscv/riscv/abi.yml
@@ -0,0 +1,79 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+actions:
+- get-string: null
+- split: null
+- env-append: null
+build-type: option
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+default:
+- -march=rv32imac
+- -mabi=ilp32
+default-by-variant:
+- value:
+ - -march=rv64imafdc
+ - -mabi=lp64d
+ - -mcmodel=medany
+ variants:
+ - riscv/rv64imafdc_medany
+- value:
+ - -march=rv64imafdc
+ - -mabi=lp64d
+ variants:
+ - riscv/rv64imafdc
+- value:
+ - -march=rv64imafd
+ - -mabi=lp64d
+ - -mcmodel=medany
+ variants:
+ - riscv/rv64imafd_medany
+- value:
+ - -march=rv64imafd
+ - -mabi=lp64d
+ variants:
+ - riscv/rv64imafd
+- value:
+ - -march=rv64imac
+ - -mabi=lp64
+ - -mcmodel=medany
+ variants:
+ - riscv/rv64imac_medany
+- value:
+ - -march=rv64imac
+ - -mabi=lp64
+ variants:
+ - riscv/rv64imac
+- value: []
+ variants:
+ - riscv/rv32imafdc
+- value:
+ - -march=rv32imafd
+ - -mabi=ilp32d
+ variants:
+ - riscv/rv32imafd
+- value:
+ - -march=rv32imafc
+ - -mabi=ilp32f
+ variants:
+ - riscv/rv32imafc
+- value:
+ - -march=rv32im
+ - -mabi=ilp32
+ variants:
+ - riscv/rv32im
+- value:
+ - -march=rv32iac
+ - -mabi=ilp32
+ variants:
+ - riscv/rv32iac
+- value:
+ - -march=rv32i
+ - -mabi=ilp32
+ variants:
+ - riscv/rv32i
+description: |
+ ABI flags
+enabled-by: true
+links: []
+name: ABI_FLAGS
+type: build
diff --git a/spec/build/bsps/riscv/riscv/bspfrdme310arty.yml b/spec/build/bsps/riscv/riscv/bspfrdme310arty.yml
new file mode 100644
index 0000000000..a13b12dc3c
--- /dev/null
+++ b/spec/build/bsps/riscv/riscv/bspfrdme310arty.yml
@@ -0,0 +1,19 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+arch: riscv
+bsp: frdme310arty
+build-type: bsp
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+enabled-by: true
+family: riscv
+includes: []
+install: []
+links:
+- role: build-dependency
+ uid: ../../opto2
+- role: build-dependency
+ uid: grp
+source: []
+type: build
diff --git a/spec/build/bsps/riscv/riscv/bsprv32i.yml b/spec/build/bsps/riscv/riscv/bsprv32i.yml
new file mode 100644
index 0000000000..168839eb31
--- /dev/null
+++ b/spec/build/bsps/riscv/riscv/bsprv32i.yml
@@ -0,0 +1,19 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+arch: riscv
+bsp: rv32i
+build-type: bsp
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+enabled-by: true
+family: riscv
+includes: []
+install: []
+links:
+- role: build-dependency
+ uid: ../../opto2
+- role: build-dependency
+ uid: grp
+source: []
+type: build
diff --git a/spec/build/bsps/riscv/riscv/bsprv32iac.yml b/spec/build/bsps/riscv/riscv/bsprv32iac.yml
new file mode 100644
index 0000000000..ce226c6344
--- /dev/null
+++ b/spec/build/bsps/riscv/riscv/bsprv32iac.yml
@@ -0,0 +1,19 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+arch: riscv
+bsp: rv32iac
+build-type: bsp
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+enabled-by: true
+family: riscv
+includes: []
+install: []
+links:
+- role: build-dependency
+ uid: ../../opto2
+- role: build-dependency
+ uid: grp
+source: []
+type: build
diff --git a/spec/build/bsps/riscv/riscv/bsprv32im.yml b/spec/build/bsps/riscv/riscv/bsprv32im.yml
new file mode 100644
index 0000000000..a6c77b421b
--- /dev/null
+++ b/spec/build/bsps/riscv/riscv/bsprv32im.yml
@@ -0,0 +1,19 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+arch: riscv
+bsp: rv32im
+build-type: bsp
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+enabled-by: true
+family: riscv
+includes: []
+install: []
+links:
+- role: build-dependency
+ uid: ../../opto2
+- role: build-dependency
+ uid: grp
+source: []
+type: build
diff --git a/spec/build/bsps/riscv/riscv/bsprv32imac.yml b/spec/build/bsps/riscv/riscv/bsprv32imac.yml
new file mode 100644
index 0000000000..25b9a4d00f
--- /dev/null
+++ b/spec/build/bsps/riscv/riscv/bsprv32imac.yml
@@ -0,0 +1,19 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+arch: riscv
+bsp: rv32imac
+build-type: bsp
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+enabled-by: true
+family: riscv
+includes: []
+install: []
+links:
+- role: build-dependency
+ uid: ../../opto2
+- role: build-dependency
+ uid: grp
+source: []
+type: build
diff --git a/spec/build/bsps/riscv/riscv/bsprv32imafc.yml b/spec/build/bsps/riscv/riscv/bsprv32imafc.yml
new file mode 100644
index 0000000000..fa8ce6a1d1
--- /dev/null
+++ b/spec/build/bsps/riscv/riscv/bsprv32imafc.yml
@@ -0,0 +1,19 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+arch: riscv
+bsp: rv32imafc
+build-type: bsp
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+enabled-by: true
+family: riscv
+includes: []
+install: []
+links:
+- role: build-dependency
+ uid: ../../opto2
+- role: build-dependency
+ uid: grp
+source: []
+type: build
diff --git a/spec/build/bsps/riscv/riscv/bsprv32imafd.yml b/spec/build/bsps/riscv/riscv/bsprv32imafd.yml
new file mode 100644
index 0000000000..5ac45fdd2c
--- /dev/null
+++ b/spec/build/bsps/riscv/riscv/bsprv32imafd.yml
@@ -0,0 +1,19 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+arch: riscv
+bsp: rv32imafd
+build-type: bsp
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+enabled-by: true
+family: riscv
+includes: []
+install: []
+links:
+- role: build-dependency
+ uid: ../../opto2
+- role: build-dependency
+ uid: grp
+source: []
+type: build
diff --git a/spec/build/bsps/riscv/riscv/bsprv32imafdc.yml b/spec/build/bsps/riscv/riscv/bsprv32imafdc.yml
new file mode 100644
index 0000000000..104a7a1391
--- /dev/null
+++ b/spec/build/bsps/riscv/riscv/bsprv32imafdc.yml
@@ -0,0 +1,19 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+arch: riscv
+bsp: rv32imafdc
+build-type: bsp
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+enabled-by: true
+family: riscv
+includes: []
+install: []
+links:
+- role: build-dependency
+ uid: ../../opto2
+- role: build-dependency
+ uid: grp
+source: []
+type: build
diff --git a/spec/build/bsps/riscv/riscv/bsprv64imac.yml b/spec/build/bsps/riscv/riscv/bsprv64imac.yml
new file mode 100644
index 0000000000..99dab47754
--- /dev/null
+++ b/spec/build/bsps/riscv/riscv/bsprv64imac.yml
@@ -0,0 +1,19 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+arch: riscv
+bsp: rv64imac
+build-type: bsp
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+enabled-by: true
+family: riscv
+includes: []
+install: []
+links:
+- role: build-dependency
+ uid: ../../opto2
+- role: build-dependency
+ uid: grp
+source: []
+type: build
diff --git a/spec/build/bsps/riscv/riscv/bsprv64imacmedany.yml b/spec/build/bsps/riscv/riscv/bsprv64imacmedany.yml
new file mode 100644
index 0000000000..c0db3e0720
--- /dev/null
+++ b/spec/build/bsps/riscv/riscv/bsprv64imacmedany.yml
@@ -0,0 +1,19 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+arch: riscv
+bsp: rv64imac_medany
+build-type: bsp
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+enabled-by: true
+family: riscv
+includes: []
+install: []
+links:
+- role: build-dependency
+ uid: ../../opto2
+- role: build-dependency
+ uid: grp
+source: []
+type: build
diff --git a/spec/build/bsps/riscv/riscv/bsprv64imafd.yml b/spec/build/bsps/riscv/riscv/bsprv64imafd.yml
new file mode 100644
index 0000000000..730a76a41d
--- /dev/null
+++ b/spec/build/bsps/riscv/riscv/bsprv64imafd.yml
@@ -0,0 +1,19 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+arch: riscv
+bsp: rv64imafd
+build-type: bsp
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+enabled-by: true
+family: riscv
+includes: []
+install: []
+links:
+- role: build-dependency
+ uid: ../../opto2
+- role: build-dependency
+ uid: grp
+source: []
+type: build
diff --git a/spec/build/bsps/riscv/riscv/bsprv64imafdc.yml b/spec/build/bsps/riscv/riscv/bsprv64imafdc.yml
new file mode 100644
index 0000000000..32a0837941
--- /dev/null
+++ b/spec/build/bsps/riscv/riscv/bsprv64imafdc.yml
@@ -0,0 +1,19 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+arch: riscv
+bsp: rv64imafdc
+build-type: bsp
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+enabled-by: true
+family: riscv
+includes: []
+install: []
+links:
+- role: build-dependency
+ uid: ../../opto2
+- role: build-dependency
+ uid: grp
+source: []
+type: build
diff --git a/spec/build/bsps/riscv/riscv/bsprv64imafdcmedany.yml b/spec/build/bsps/riscv/riscv/bsprv64imafdcmedany.yml
new file mode 100644
index 0000000000..e4ecd4736a
--- /dev/null
+++ b/spec/build/bsps/riscv/riscv/bsprv64imafdcmedany.yml
@@ -0,0 +1,19 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+arch: riscv
+bsp: rv64imafdc_medany
+build-type: bsp
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+enabled-by: true
+family: riscv
+includes: []
+install: []
+links:
+- role: build-dependency
+ uid: ../../opto2
+- role: build-dependency
+ uid: grp
+source: []
+type: build
diff --git a/spec/build/bsps/riscv/riscv/bsprv64imafdmedany.yml b/spec/build/bsps/riscv/riscv/bsprv64imafdmedany.yml
new file mode 100644
index 0000000000..9e01572c70
--- /dev/null
+++ b/spec/build/bsps/riscv/riscv/bsprv64imafdmedany.yml
@@ -0,0 +1,19 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+arch: riscv
+bsp: rv64imafd_medany
+build-type: bsp
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+enabled-by: true
+family: riscv
+includes: []
+install: []
+links:
+- role: build-dependency
+ uid: ../../opto2
+- role: build-dependency
+ uid: grp
+source: []
+type: build
diff --git a/spec/build/bsps/riscv/riscv/grp.yml b/spec/build/bsps/riscv/riscv/grp.yml
new file mode 100644
index 0000000000..396f8986ec
--- /dev/null
+++ b/spec/build/bsps/riscv/riscv/grp.yml
@@ -0,0 +1,58 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: group
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+enabled-by: true
+includes: []
+install: []
+ldflags: []
+links:
+- role: build-dependency
+ uid: ../../obj
+- role: build-dependency
+ uid: ../../objirq
+- role: build-dependency
+ uid: ../../optclang
+- role: build-dependency
+ uid: ../../optconsolebaud
+- role: build-dependency
+ uid: ../../optgcc
+- role: build-dependency
+ uid: ../grp
+- role: build-dependency
+ uid: ../optrambegin
+- role: build-dependency
+ uid: ../optramsize
+- role: build-dependency
+ uid: abi
+- role: build-dependency
+ uid: obj
+- role: build-dependency
+ uid: objsmp
+- role: build-dependency
+ uid: optextirqmax
+- role: build-dependency
+ uid: optfdtcpyro
+- role: build-dependency
+ uid: optfdtmxsz
+- role: build-dependency
+ uid: optfdtro
+- role: build-dependency
+ uid: optfdtuboot
+- role: build-dependency
+ uid: optfrdme310arty
+- role: build-dependency
+ uid: opthtif
+- role: build-dependency
+ uid: optns16550max
+- role: build-dependency
+ uid: ../linkcmds
+- role: build-dependency
+ uid: ../linkcmdsbase
+- role: build-dependency
+ uid: ../start
+- role: build-dependency
+ uid: ../../bspopts
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/bsps/riscv/riscv/obj.yml b/spec/build/bsps/riscv/riscv/obj.yml
new file mode 100644
index 0000000000..c16dc226c7
--- /dev/null
+++ b/spec/build/bsps/riscv/riscv/obj.yml
@@ -0,0 +1,41 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: objects
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by: true
+includes: []
+install:
+- destination: ${BSP_INCLUDEDIR}
+ source:
+ - bsps/riscv/riscv/include/bsp.h
+ - bsps/riscv/riscv/include/tm27.h
+- destination: ${BSP_INCLUDEDIR}/bsp
+ source:
+ - bsps/riscv/riscv/include/bsp/fe310-uart.h
+ - bsps/riscv/riscv/include/bsp/irq.h
+ - bsps/riscv/riscv/include/bsp/riscv.h
+- destination: ${BSP_INCLUDEDIR}/dev/serial
+ source:
+ - bsps/riscv/riscv/include/dev/serial/htif.h
+links: []
+source:
+- bsps/riscv/riscv/clock/clockdrv.c
+- bsps/riscv/riscv/console/console-config.c
+- bsps/riscv/riscv/console/fe310-uart.c
+- bsps/riscv/riscv/console/htif.c
+- bsps/riscv/riscv/irq/irq.c
+- bsps/riscv/riscv/start/bsp_fatal_halt.c
+- bsps/riscv/riscv/start/bspstart.c
+- bsps/shared/cache/nocache.c
+- bsps/shared/dev/btimer/btimer-cpucounter.c
+- bsps/shared/dev/getentropy/getentropy-cpucounter.c
+- bsps/shared/dev/serial/console-termios.c
+- bsps/shared/irq/irq-default-handler.c
+- bsps/shared/start/bsp-fdt.c
+- bsps/shared/start/bspfatal-default.c
+- bsps/shared/start/bspgetworkarea-default.c
+- bsps/shared/start/bspreset-empty.c
+type: build
diff --git a/spec/build/bsps/riscv/riscv/objsmp.yml b/spec/build/bsps/riscv/riscv/objsmp.yml
new file mode 100644
index 0000000000..46369f977e
--- /dev/null
+++ b/spec/build/bsps/riscv/riscv/objsmp.yml
@@ -0,0 +1,15 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: objects
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by:
+- RTEMS_SMP
+includes: []
+install: []
+links: []
+source:
+- bsps/riscv/riscv/start/bspsmp.c
+type: build
diff --git a/spec/build/bsps/riscv/riscv/optextirqmax.yml b/spec/build/bsps/riscv/riscv/optextirqmax.yml
new file mode 100644
index 0000000000..ffa84748b6
--- /dev/null
+++ b/spec/build/bsps/riscv/riscv/optextirqmax.yml
@@ -0,0 +1,16 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+actions:
+- get-integer: null
+- define: null
+build-type: option
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+default: 64
+default-by-variant: []
+description: |
+ maximum number of external interrupts supported by the BSP (default 64)
+enabled-by: true
+format: '{}'
+links: []
+name: RISCV_MAXIMUM_EXTERNAL_INTERRUPTS
+type: build
diff --git a/spec/build/bsps/riscv/riscv/optfdtcpyro.yml b/spec/build/bsps/riscv/riscv/optfdtcpyro.yml
new file mode 100644
index 0000000000..c26b1ae051
--- /dev/null
+++ b/spec/build/bsps/riscv/riscv/optfdtcpyro.yml
@@ -0,0 +1,15 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+actions:
+- get-boolean: null
+- define-condition: null
+build-type: option
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+default: true
+default-by-variant: []
+description: |
+ copy the FDT blob into the read-only load area via bsp_fdt_copy()
+enabled-by: true
+links: []
+name: BSP_FDT_BLOB_COPY_TO_READ_ONLY_LOAD_AREA
+type: build
diff --git a/spec/build/bsps/riscv/riscv/optfdtmxsz.yml b/spec/build/bsps/riscv/riscv/optfdtmxsz.yml
new file mode 100644
index 0000000000..63a42f5a29
--- /dev/null
+++ b/spec/build/bsps/riscv/riscv/optfdtmxsz.yml
@@ -0,0 +1,16 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+actions:
+- get-integer: null
+- define: null
+build-type: option
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+default: 65536
+default-by-variant: []
+description: |
+ maximum size of the FDT blob in bytes
+enabled-by: true
+format: '{}'
+links: []
+name: BSP_FDT_BLOB_SIZE_MAX
+type: build
diff --git a/spec/build/bsps/riscv/riscv/optfdtro.yml b/spec/build/bsps/riscv/riscv/optfdtro.yml
new file mode 100644
index 0000000000..a61bb2924b
--- /dev/null
+++ b/spec/build/bsps/riscv/riscv/optfdtro.yml
@@ -0,0 +1,15 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+actions:
+- get-boolean: null
+- define-condition: null
+build-type: option
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+default: true
+default-by-variant: []
+description: |
+ place the FDT blob into the read-only data area
+enabled-by: true
+links: []
+name: BSP_FDT_BLOB_READ_ONLY
+type: build
diff --git a/spec/build/bsps/riscv/riscv/optfdtuboot.yml b/spec/build/bsps/riscv/riscv/optfdtuboot.yml
new file mode 100644
index 0000000000..5805e912ff
--- /dev/null
+++ b/spec/build/bsps/riscv/riscv/optfdtuboot.yml
@@ -0,0 +1,15 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+actions:
+- get-boolean: null
+- define-condition: null
+build-type: option
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+default: true
+default-by-variant: []
+description: |
+ copy the U-Boot provided FDT to an internal storage
+enabled-by: true
+links: []
+name: BSP_START_COPY_FDT_FROM_U_BOOT
+type: build
diff --git a/spec/build/bsps/riscv/riscv/optfrdme310arty.yml b/spec/build/bsps/riscv/riscv/optfrdme310arty.yml
new file mode 100644
index 0000000000..0623694cca
--- /dev/null
+++ b/spec/build/bsps/riscv/riscv/optfrdme310arty.yml
@@ -0,0 +1,18 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+actions:
+- get-boolean: null
+- define-condition: null
+build-type: option
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+default: false
+default-by-variant:
+- value: true
+ variants:
+ - riscv/frdme310arty.*
+description: |
+ enables support sifive Freedom E310 Arty board if defined to a non-zero value,otherwise it is disabled (disabled by default)
+enabled-by: true
+links: []
+name: RISCV_ENABLE_FRDME310ARTY_SUPPORT
+type: build
diff --git a/spec/build/bsps/riscv/riscv/opthtif.yml b/spec/build/bsps/riscv/riscv/opthtif.yml
new file mode 100644
index 0000000000..9161716869
--- /dev/null
+++ b/spec/build/bsps/riscv/riscv/opthtif.yml
@@ -0,0 +1,15 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+actions:
+- get-boolean: null
+- define-condition: null
+build-type: option
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+default: false
+default-by-variant: []
+description: |
+ enables the HTIF support if defined to a non-zero value, otherwise it is disabled (disabled by default)
+enabled-by: true
+links: []
+name: RISCV_ENABLE_HTIF_SUPPORT
+type: build
diff --git a/spec/build/bsps/riscv/riscv/optns16550max.yml b/spec/build/bsps/riscv/riscv/optns16550max.yml
new file mode 100644
index 0000000000..7e385a57b7
--- /dev/null
+++ b/spec/build/bsps/riscv/riscv/optns16550max.yml
@@ -0,0 +1,19 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+actions:
+- get-integer: null
+- define: null
+build-type: option
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+default: 2
+default-by-variant:
+- value: null
+ variants:
+ - riscv/frdme310arty.*
+description: |
+ maximum number of NS16550 devices supported by the console driver (2 by default)
+enabled-by: true
+format: '{}'
+links: []
+name: RISCV_CONSOLE_MAX_NS16550_DEVICES
+type: build
diff --git a/spec/build/bsps/riscv/start.yml b/spec/build/bsps/riscv/start.yml
new file mode 100644
index 0000000000..3b27ba1169
--- /dev/null
+++ b/spec/build/bsps/riscv/start.yml
@@ -0,0 +1,14 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+asflags: []
+build-type: start-file
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+enabled-by: true
+includes: []
+install-path: ${BSP_LIBDIR}
+links: []
+source:
+- bsps/riscv/shared/start/start.S
+target: start.o
+type: build
diff --git a/spec/build/bsps/sh/gensh1/abi.yml b/spec/build/bsps/sh/gensh1/abi.yml
new file mode 100644
index 0000000000..4e3646562a
--- /dev/null
+++ b/spec/build/bsps/sh/gensh1/abi.yml
@@ -0,0 +1,17 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+actions:
+- get-string: null
+- split: null
+- env-append: null
+build-type: option
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+default:
+- -m1
+default-by-variant: []
+description: |
+ ABI flags
+enabled-by: true
+links: []
+name: ABI_FLAGS
+type: build
diff --git a/spec/build/bsps/sh/gensh1/bspgensh1.yml b/spec/build/bsps/sh/gensh1/bspgensh1.yml
new file mode 100644
index 0000000000..1a87d55042
--- /dev/null
+++ b/spec/build/bsps/sh/gensh1/bspgensh1.yml
@@ -0,0 +1,69 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+arch: sh
+bsp: gensh1
+build-type: bsp
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+enabled-by: true
+family: gensh1
+includes: []
+install:
+- destination: ${BSP_INCLUDEDIR}
+ source:
+ - bsps/sh/gensh1/include/bsp.h
+ - bsps/sh/gensh1/include/tm27.h
+- destination: ${BSP_INCLUDEDIR}/bsp
+ source:
+ - bsps/sh/gensh1/include/bsp/irq.h
+- destination: ${BSP_INCLUDEDIR}/rtems/score
+ source:
+ - bsps/sh/gensh1/include/rtems/score/iosh7032.h
+ - bsps/sh/gensh1/include/rtems/score/ispsh7032.h
+- destination: ${BSP_INCLUDEDIR}/sh
+ source:
+ - bsps/sh/gensh1/include/sh/sci.h
+ - bsps/sh/gensh1/include/sh/sh7_pfc.h
+ - bsps/sh/gensh1/include/sh/sh7_sci.h
+- destination: ${BSP_LIBDIR}
+ source:
+ - bsps/sh/gensh1/start/linkcmds
+links:
+- role: build-dependency
+ uid: ../../obj
+- role: build-dependency
+ uid: ../../objirqdflt
+- role: build-dependency
+ uid: ../../opto2
+- role: build-dependency
+ uid: abi
+- role: build-dependency
+ uid: optcpuclk
+- role: build-dependency
+ uid: optlowinit
+- role: build-dependency
+ uid: start
+- role: build-dependency
+ uid: tstgensh1
+- role: build-dependency
+ uid: ../../bspopts
+source:
+- bsps/sh/gensh1/btimer/btimer.c
+- bsps/sh/gensh1/clock/ckinit.c
+- bsps/sh/gensh1/clock/delay.c
+- bsps/sh/gensh1/console/sci.c
+- bsps/sh/gensh1/console/scitab.c
+- bsps/sh/gensh1/start/cpu_asm.c
+- bsps/sh/gensh1/start/ispsh7032.c
+- bsps/sh/shared/console/console.c
+- bsps/sh/shared/start/bsphwinit.c
+- bsps/sh/shared/start/bspstart.c
+- bsps/shared/cache/nocache.c
+- bsps/shared/dev/getentropy/getentropy-cpucounter.c
+- bsps/shared/dev/serial/printk-dummy.c
+- bsps/shared/start/bspfatal-default.c
+- bsps/shared/start/bspgetworkarea-default.c
+- bsps/shared/start/bspreset-loop.c
+- bsps/shared/start/sbrk.c
+type: build
diff --git a/spec/build/bsps/sh/gensh1/optcpuclk.yml b/spec/build/bsps/sh/gensh1/optcpuclk.yml
new file mode 100644
index 0000000000..086145a786
--- /dev/null
+++ b/spec/build/bsps/sh/gensh1/optcpuclk.yml
@@ -0,0 +1,16 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+actions:
+- get-integer: null
+- define: null
+build-type: option
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+default: 20000000
+default-by-variant: []
+description: |
+ cpu clock rate in HZ
+enabled-by: true
+format: '{}'
+links: []
+name: CPU_CLOCK_RATE_HZ
+type: build
diff --git a/spec/build/bsps/sh/gensh1/optlowinit.yml b/spec/build/bsps/sh/gensh1/optlowinit.yml
new file mode 100644
index 0000000000..60f16b388b
--- /dev/null
+++ b/spec/build/bsps/sh/gensh1/optlowinit.yml
@@ -0,0 +1,15 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+actions:
+- get-boolean: null
+- define-condition: null
+build-type: option
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+default: false
+default-by-variant: []
+description: |
+ If defined, selects whether 'early_hw_init()' is called from 'start.S'; 'bsp_hw_init()' is always called from 'bspstart.c'
+enabled-by: true
+links: []
+name: START_HW_INIT
+type: build
diff --git a/spec/build/bsps/sh/gensh1/start.yml b/spec/build/bsps/sh/gensh1/start.yml
new file mode 100644
index 0000000000..010b43e35d
--- /dev/null
+++ b/spec/build/bsps/sh/gensh1/start.yml
@@ -0,0 +1,14 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+asflags: []
+build-type: start-file
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+enabled-by: true
+includes: []
+install-path: ${BSP_LIBDIR}
+links: []
+source:
+- bsps/sh/gensh1/start/start.S
+target: start.o
+type: build
diff --git a/spec/build/bsps/sh/gensh1/tstgensh1.yml b/spec/build/bsps/sh/gensh1/tstgensh1.yml
new file mode 100644
index 0000000000..6851063503
--- /dev/null
+++ b/spec/build/bsps/sh/gensh1/tstgensh1.yml
@@ -0,0 +1,20 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+actions:
+- set-test-state:
+ fileio: exclude
+ fsdosfsname01: exclude
+ iostream: exclude
+ linpack: exclude
+ record02: exclude
+ utf8proc01: exclude
+build-type: option
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+default: null
+default-by-variant: []
+description: ''
+enabled-by: true
+links:
+- role: build-dependency
+ uid: ../../tstnoiconv
+type: build
diff --git a/spec/build/bsps/sh/gensh2/abi.yml b/spec/build/bsps/sh/gensh2/abi.yml
new file mode 100644
index 0000000000..4bd34deb19
--- /dev/null
+++ b/spec/build/bsps/sh/gensh2/abi.yml
@@ -0,0 +1,17 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+actions:
+- get-string: null
+- split: null
+- env-append: null
+build-type: option
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+default:
+- -m2
+default-by-variant: []
+description: |
+ ABI flags
+enabled-by: true
+links: []
+name: ABI_FLAGS
+type: build
diff --git a/spec/build/bsps/sh/gensh2/bspgensh2.yml b/spec/build/bsps/sh/gensh2/bspgensh2.yml
new file mode 100644
index 0000000000..bbe027c54d
--- /dev/null
+++ b/spec/build/bsps/sh/gensh2/bspgensh2.yml
@@ -0,0 +1,77 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+arch: sh
+bsp: gensh2
+build-type: bsp
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+enabled-by: true
+family: gensh2
+includes: []
+install:
+- destination: ${BSP_INCLUDEDIR}
+ source:
+ - bsps/sh/gensh2/include/bsp.h
+ - bsps/sh/gensh2/include/tm27.h
+- destination: ${BSP_INCLUDEDIR}/bsp
+ source:
+ - bsps/sh/gensh2/include/bsp/irq.h
+- destination: ${BSP_INCLUDEDIR}/rtems/score
+ source:
+ - bsps/sh/gensh2/include/rtems/score/iosh7045.h
+ - bsps/sh/gensh2/include/rtems/score/ispsh7045.h
+- destination: ${BSP_INCLUDEDIR}/sh
+ source:
+ - bsps/sh/gensh2/include/sh/io_types.h
+ - bsps/sh/gensh2/include/sh/sci.h
+ - bsps/sh/gensh2/include/sh/sci_termios.h
+ - bsps/sh/gensh2/include/sh/sh7_pfc.h
+ - bsps/sh/gensh2/include/sh/sh7_sci.h
+- destination: ${BSP_LIBDIR}
+ source:
+ - bsps/sh/gensh2/start/linkcmds
+ - bsps/sh/gensh2/start/linkcmds.ram
+ - bsps/sh/gensh2/start/linkcmds.rom
+links:
+- role: build-dependency
+ uid: ../../obj
+- role: build-dependency
+ uid: ../../objirqdflt
+- role: build-dependency
+ uid: ../../opto2
+- role: build-dependency
+ uid: abi
+- role: build-dependency
+ uid: optcpuclk
+- role: build-dependency
+ uid: optevb
+- role: build-dependency
+ uid: optlowinit
+- role: build-dependency
+ uid: start
+- role: build-dependency
+ uid: tstgensh2
+- role: build-dependency
+ uid: ../../bspopts
+source:
+- bsps/sh/gensh2/btimer/btimer.c
+- bsps/sh/gensh2/clock/ckinit.c
+- bsps/sh/gensh2/console/config.c
+- bsps/sh/gensh2/console/sci.c
+- bsps/sh/gensh2/console/sci_termios.c
+- bsps/sh/gensh2/console/scitab.c
+- bsps/sh/gensh2/start/cpu_asm.c
+- bsps/sh/gensh2/start/hw_init.c
+- bsps/sh/gensh2/start/ispsh7045.c
+- bsps/sh/shared/console/console.c
+- bsps/sh/shared/start/bsphwinit.c
+- bsps/sh/shared/start/bspstart.c
+- bsps/shared/cache/nocache.c
+- bsps/shared/dev/getentropy/getentropy-cpucounter.c
+- bsps/shared/dev/serial/printk-dummy.c
+- bsps/shared/start/bspfatal-default.c
+- bsps/shared/start/bspgetworkarea-default.c
+- bsps/shared/start/bspreset-empty.c
+- bsps/shared/start/sbrk.c
+type: build
diff --git a/spec/build/bsps/sh/gensh2/optcpuclk.yml b/spec/build/bsps/sh/gensh2/optcpuclk.yml
new file mode 100644
index 0000000000..086145a786
--- /dev/null
+++ b/spec/build/bsps/sh/gensh2/optcpuclk.yml
@@ -0,0 +1,16 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+actions:
+- get-integer: null
+- define: null
+build-type: option
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+default: 20000000
+default-by-variant: []
+description: |
+ cpu clock rate in HZ
+enabled-by: true
+format: '{}'
+links: []
+name: CPU_CLOCK_RATE_HZ
+type: build
diff --git a/spec/build/bsps/sh/gensh2/optevb.yml b/spec/build/bsps/sh/gensh2/optevb.yml
new file mode 100644
index 0000000000..45d1a7d0bc
--- /dev/null
+++ b/spec/build/bsps/sh/gensh2/optevb.yml
@@ -0,0 +1,15 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+actions:
+- get-boolean: null
+- define-condition: null
+build-type: option
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+default: false
+default-by-variant: []
+description: |
+ If defined, compiles code to jump-start from FLASH, without a monitor
+enabled-by: true
+links: []
+name: STANDALONE_EVB
+type: build
diff --git a/spec/build/bsps/sh/gensh2/optlowinit.yml b/spec/build/bsps/sh/gensh2/optlowinit.yml
new file mode 100644
index 0000000000..60f16b388b
--- /dev/null
+++ b/spec/build/bsps/sh/gensh2/optlowinit.yml
@@ -0,0 +1,15 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+actions:
+- get-boolean: null
+- define-condition: null
+build-type: option
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+default: false
+default-by-variant: []
+description: |
+ If defined, selects whether 'early_hw_init()' is called from 'start.S'; 'bsp_hw_init()' is always called from 'bspstart.c'
+enabled-by: true
+links: []
+name: START_HW_INIT
+type: build
diff --git a/spec/build/bsps/sh/gensh2/start.yml b/spec/build/bsps/sh/gensh2/start.yml
new file mode 100644
index 0000000000..1dff0089a6
--- /dev/null
+++ b/spec/build/bsps/sh/gensh2/start.yml
@@ -0,0 +1,14 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+asflags: []
+build-type: start-file
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+enabled-by: true
+includes: []
+install-path: ${BSP_LIBDIR}
+links: []
+source:
+- bsps/sh/gensh2/start/start.S
+target: start.o
+type: build
diff --git a/spec/build/bsps/sh/gensh2/tstgensh2.yml b/spec/build/bsps/sh/gensh2/tstgensh2.yml
new file mode 100644
index 0000000000..6851063503
--- /dev/null
+++ b/spec/build/bsps/sh/gensh2/tstgensh2.yml
@@ -0,0 +1,20 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+actions:
+- set-test-state:
+ fileio: exclude
+ fsdosfsname01: exclude
+ iostream: exclude
+ linpack: exclude
+ record02: exclude
+ utf8proc01: exclude
+build-type: option
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+default: null
+default-by-variant: []
+description: ''
+enabled-by: true
+links:
+- role: build-dependency
+ uid: ../../tstnoiconv
+type: build
diff --git a/spec/build/bsps/sh/gensh4/abi.yml b/spec/build/bsps/sh/gensh4/abi.yml
new file mode 100644
index 0000000000..cc406a30b6
--- /dev/null
+++ b/spec/build/bsps/sh/gensh4/abi.yml
@@ -0,0 +1,18 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+actions:
+- get-string: null
+- split: null
+- env-append: null
+build-type: option
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+default:
+- -m4
+- -ml
+default-by-variant: []
+description: |
+ ABI flags
+enabled-by: true
+links: []
+name: ABI_FLAGS
+type: build
diff --git a/spec/build/bsps/sh/gensh4/bspgensh4.yml b/spec/build/bsps/sh/gensh4/bspgensh4.yml
new file mode 100644
index 0000000000..9eabffcc0a
--- /dev/null
+++ b/spec/build/bsps/sh/gensh4/bspgensh4.yml
@@ -0,0 +1,72 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+arch: sh
+bsp: gensh4
+build-type: bsp
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+enabled-by: true
+family: gensh4
+includes: []
+install:
+- destination: ${BSP_INCLUDEDIR}
+ source:
+ - bsps/sh/gensh4/include/bsp.h
+ - bsps/sh/gensh4/include/sdram.h
+ - bsps/sh/gensh4/include/tm27.h
+- destination: ${BSP_INCLUDEDIR}/bsp
+ source:
+ - bsps/sh/gensh4/include/bsp/irq.h
+- destination: ${BSP_INCLUDEDIR}/rtems/score
+ source:
+ - bsps/sh/gensh4/include/rtems/score/iosh7750.h
+ - bsps/sh/gensh4/include/rtems/score/ipl.h
+ - bsps/sh/gensh4/include/rtems/score/ispsh7750.h
+ - bsps/sh/gensh4/include/rtems/score/sh4_regs.h
+ - bsps/sh/gensh4/include/rtems/score/sh7750_regs.h
+- destination: ${BSP_INCLUDEDIR}/sh
+ source:
+ - bsps/sh/gensh4/include/sh/sh4uart.h
+- destination: ${BSP_LIBDIR}
+ source:
+ - bsps/sh/gensh4/start/linkcmds
+ - bsps/sh/gensh4/start/linkcmds.rom
+ - bsps/sh/gensh4/start/linkcmds.rom2ram
+links:
+- role: build-dependency
+ uid: ../../obj
+- role: build-dependency
+ uid: ../../objirqdflt
+- role: build-dependency
+ uid: ../../opto2
+- role: build-dependency
+ uid: abi
+- role: build-dependency
+ uid: optcpuclk
+- role: build-dependency
+ uid: optcpydata
+- role: build-dependency
+ uid: optlowinit
+- role: build-dependency
+ uid: start
+- role: build-dependency
+ uid: ../../bspopts
+source:
+- bsps/sh/gensh4/btimer/btimer.c
+- bsps/sh/gensh4/clock/ckinit.c
+- bsps/sh/gensh4/console/console.c
+- bsps/sh/gensh4/console/sh4uart.c
+- bsps/sh/gensh4/start/cpu_asm.c
+- bsps/sh/gensh4/start/hw_init.c
+- bsps/sh/gensh4/start/ispsh7750.c
+- bsps/sh/shared/start/bsphwinit.c
+- bsps/sh/shared/start/bspstart.c
+- bsps/shared/cache/nocache.c
+- bsps/shared/dev/getentropy/getentropy-cpucounter.c
+- bsps/shared/dev/serial/printk-dummy.c
+- bsps/shared/start/bspfatal-default.c
+- bsps/shared/start/bspgetworkarea-default.c
+- bsps/shared/start/bspreset-empty.c
+- bsps/shared/start/sbrk.c
+type: build
diff --git a/spec/build/bsps/sh/gensh4/optcpuclk.yml b/spec/build/bsps/sh/gensh4/optcpuclk.yml
new file mode 100644
index 0000000000..086145a786
--- /dev/null
+++ b/spec/build/bsps/sh/gensh4/optcpuclk.yml
@@ -0,0 +1,16 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+actions:
+- get-integer: null
+- define: null
+build-type: option
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+default: 20000000
+default-by-variant: []
+description: |
+ cpu clock rate in HZ
+enabled-by: true
+format: '{}'
+links: []
+name: CPU_CLOCK_RATE_HZ
+type: build
diff --git a/spec/build/bsps/sh/gensh4/optcpydata.yml b/spec/build/bsps/sh/gensh4/optcpydata.yml
new file mode 100644
index 0000000000..7d49b9b781
--- /dev/null
+++ b/spec/build/bsps/sh/gensh4/optcpydata.yml
@@ -0,0 +1,15 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+actions:
+- get-boolean: null
+- define-condition: null
+build-type: option
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+default: false
+default-by-variant: []
+description: |
+ Whether to copy data from ROM to RAM in start.S
+enabled-by: true
+links: []
+name: COPY_DATA_FROM_ROM
+type: build
diff --git a/spec/build/bsps/sh/gensh4/optlowinit.yml b/spec/build/bsps/sh/gensh4/optlowinit.yml
new file mode 100644
index 0000000000..2a90a73753
--- /dev/null
+++ b/spec/build/bsps/sh/gensh4/optlowinit.yml
@@ -0,0 +1,15 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+actions:
+- get-boolean: null
+- define-condition: null
+build-type: option
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+default: false
+default-by-variant: []
+description: |
+ Whether to call early_hw_init from start.S
+enabled-by: true
+links: []
+name: START_HW_INIT
+type: build
diff --git a/spec/build/bsps/sh/gensh4/start.yml b/spec/build/bsps/sh/gensh4/start.yml
new file mode 100644
index 0000000000..1a86ac5498
--- /dev/null
+++ b/spec/build/bsps/sh/gensh4/start.yml
@@ -0,0 +1,14 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+asflags: []
+build-type: start-file
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+enabled-by: true
+includes: []
+install-path: ${BSP_LIBDIR}
+links: []
+source:
+- bsps/sh/gensh4/start/start.S
+target: start.o
+type: build
diff --git a/spec/build/bsps/sh/shsim/abi.yml b/spec/build/bsps/sh/shsim/abi.yml
new file mode 100644
index 0000000000..f5dcf145dc
--- /dev/null
+++ b/spec/build/bsps/sh/shsim/abi.yml
@@ -0,0 +1,31 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+actions:
+- get-string: null
+- split: null
+- env-append: null
+build-type: option
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+default:
+- -m4
+- -ml
+default-by-variant:
+- value:
+ - -m2e
+ - -ml
+ variants:
+ - sh/simsh2e
+- value:
+ - -m2
+ variants:
+ - sh/simsh2
+- value:
+ - -m1
+ variants:
+ - sh/simsh1
+description: |
+ ABI flags
+enabled-by: true
+links: []
+name: ABI_FLAGS
+type: build
diff --git a/spec/build/bsps/sh/shsim/bspsimsh1.yml b/spec/build/bsps/sh/shsim/bspsimsh1.yml
new file mode 100644
index 0000000000..7789de35c7
--- /dev/null
+++ b/spec/build/bsps/sh/shsim/bspsimsh1.yml
@@ -0,0 +1,21 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+arch: sh
+bsp: simsh1
+build-type: bsp
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+enabled-by: true
+family: shsim
+includes: []
+install: []
+links:
+- role: build-dependency
+ uid: ../../opto2
+- role: build-dependency
+ uid: grp
+- role: build-dependency
+ uid: tstsimsh1
+source: []
+type: build
diff --git a/spec/build/bsps/sh/shsim/bspsimsh2.yml b/spec/build/bsps/sh/shsim/bspsimsh2.yml
new file mode 100644
index 0000000000..27486849b6
--- /dev/null
+++ b/spec/build/bsps/sh/shsim/bspsimsh2.yml
@@ -0,0 +1,21 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+arch: sh
+bsp: simsh2
+build-type: bsp
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+enabled-by: true
+family: shsim
+includes: []
+install: []
+links:
+- role: build-dependency
+ uid: ../../opto2
+- role: build-dependency
+ uid: grp
+- role: build-dependency
+ uid: tstsimsh2
+source: []
+type: build
diff --git a/spec/build/bsps/sh/shsim/bspsimsh2e.yml b/spec/build/bsps/sh/shsim/bspsimsh2e.yml
new file mode 100644
index 0000000000..098c9deb4b
--- /dev/null
+++ b/spec/build/bsps/sh/shsim/bspsimsh2e.yml
@@ -0,0 +1,21 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+arch: sh
+bsp: simsh2e
+build-type: bsp
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+enabled-by: true
+family: shsim
+includes: []
+install: []
+links:
+- role: build-dependency
+ uid: ../../opto2
+- role: build-dependency
+ uid: grp
+- role: build-dependency
+ uid: tstsimsh2e
+source: []
+type: build
diff --git a/spec/build/bsps/sh/shsim/bspsimsh4.yml b/spec/build/bsps/sh/shsim/bspsimsh4.yml
new file mode 100644
index 0000000000..1327583366
--- /dev/null
+++ b/spec/build/bsps/sh/shsim/bspsimsh4.yml
@@ -0,0 +1,21 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+arch: sh
+bsp: simsh4
+build-type: bsp
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+enabled-by: true
+family: shsim
+includes: []
+install: []
+links:
+- role: build-dependency
+ uid: ../../opto2
+- role: build-dependency
+ uid: grp
+- role: build-dependency
+ uid: tstsimsh4
+source: []
+type: build
diff --git a/spec/build/bsps/sh/shsim/grp.yml b/spec/build/bsps/sh/shsim/grp.yml
new file mode 100644
index 0000000000..9c73c7ca0f
--- /dev/null
+++ b/spec/build/bsps/sh/shsim/grp.yml
@@ -0,0 +1,28 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: group
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+enabled-by: true
+includes: []
+install: []
+ldflags: []
+links:
+- role: build-dependency
+ uid: ../../obj
+- role: build-dependency
+ uid: ../../objirqdflt
+- role: build-dependency
+ uid: abi
+- role: build-dependency
+ uid: obj
+- role: build-dependency
+ uid: optcpuclk
+- role: build-dependency
+ uid: optlowinit
+- role: build-dependency
+ uid: start
+- role: build-dependency
+ uid: ../../bspopts
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/bsps/sh/shsim/obj.yml b/spec/build/bsps/sh/shsim/obj.yml
new file mode 100644
index 0000000000..90de78fbf0
--- /dev/null
+++ b/spec/build/bsps/sh/shsim/obj.yml
@@ -0,0 +1,41 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: objects
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by: true
+includes: []
+install:
+- destination: ${BSP_INCLUDEDIR}
+ source:
+ - bsps/sh/shsim/include/bsp.h
+ - bsps/sh/shsim/include/tm27.h
+- destination: ${BSP_INCLUDEDIR}/bsp
+ source:
+ - bsps/sh/shsim/include/bsp/irq.h
+ - bsps/sh/shsim/include/bsp/syscall.h
+- destination: ${BSP_LIBDIR}
+ source:
+ - bsps/sh/shsim/start/linkcmds
+links: []
+source:
+- bsps/sh/shared/start/bsphwinit.c
+- bsps/sh/shared/start/bspstart.c
+- bsps/sh/shsim/console/console-debugio.c
+- bsps/sh/shsim/console/console-io.c
+- bsps/sh/shsim/console/console-support.S
+- bsps/sh/shsim/start/cpu_asm.c
+- bsps/sh/shsim/start/ispshgdb.c
+- bsps/sh/shsim/start/sysexit.c
+- bsps/shared/cache/nocache.c
+- bsps/shared/dev/btimer/btimer-stub.c
+- bsps/shared/dev/clock/clock-simidle.c
+- bsps/shared/dev/getentropy/getentropy-cpucounter.c
+- bsps/shared/dev/serial/console-polled.c
+- bsps/shared/start/bspfatal-default.c
+- bsps/shared/start/bspgetworkarea-default.c
+- bsps/shared/start/bspreset-empty.c
+- bsps/shared/start/sbrk.c
+type: build
diff --git a/spec/build/bsps/sh/shsim/optcpuclk.yml b/spec/build/bsps/sh/shsim/optcpuclk.yml
new file mode 100644
index 0000000000..086145a786
--- /dev/null
+++ b/spec/build/bsps/sh/shsim/optcpuclk.yml
@@ -0,0 +1,16 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+actions:
+- get-integer: null
+- define: null
+build-type: option
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+default: 20000000
+default-by-variant: []
+description: |
+ cpu clock rate in HZ
+enabled-by: true
+format: '{}'
+links: []
+name: CPU_CLOCK_RATE_HZ
+type: build
diff --git a/spec/build/bsps/sh/shsim/optlowinit.yml b/spec/build/bsps/sh/shsim/optlowinit.yml
new file mode 100644
index 0000000000..60f16b388b
--- /dev/null
+++ b/spec/build/bsps/sh/shsim/optlowinit.yml
@@ -0,0 +1,15 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+actions:
+- get-boolean: null
+- define-condition: null
+build-type: option
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+default: false
+default-by-variant: []
+description: |
+ If defined, selects whether 'early_hw_init()' is called from 'start.S'; 'bsp_hw_init()' is always called from 'bspstart.c'
+enabled-by: true
+links: []
+name: START_HW_INIT
+type: build
diff --git a/spec/build/bsps/sh/shsim/start.yml b/spec/build/bsps/sh/shsim/start.yml
new file mode 100644
index 0000000000..da632db0d7
--- /dev/null
+++ b/spec/build/bsps/sh/shsim/start.yml
@@ -0,0 +1,14 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+asflags: []
+build-type: start-file
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+enabled-by: true
+includes: []
+install-path: ${BSP_LIBDIR}
+links: []
+source:
+- bsps/sh/shsim/start/start.S
+target: start.o
+type: build
diff --git a/spec/build/bsps/sh/shsim/tstsimsh1.yml b/spec/build/bsps/sh/shsim/tstsimsh1.yml
new file mode 100644
index 0000000000..a915754a76
--- /dev/null
+++ b/spec/build/bsps/sh/shsim/tstsimsh1.yml
@@ -0,0 +1,24 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+actions:
+- set-test-state:
+ fileio: exclude
+ fsdosfsname01: exclude
+ iostream: exclude
+ linpack: exclude
+ record02: exclude
+ utf8proc01: exclude
+build-type: option
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+default: null
+default-by-variant: []
+description: ''
+enabled-by: true
+links:
+- role: build-dependency
+ uid: ../../tstnoiconv
+- role: build-dependency
+ uid: ../../tstnointrcrit
+- role: build-dependency
+ uid: ../../tstreqtick
+type: build
diff --git a/spec/build/bsps/sh/shsim/tstsimsh2.yml b/spec/build/bsps/sh/shsim/tstsimsh2.yml
new file mode 100644
index 0000000000..a915754a76
--- /dev/null
+++ b/spec/build/bsps/sh/shsim/tstsimsh2.yml
@@ -0,0 +1,24 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+actions:
+- set-test-state:
+ fileio: exclude
+ fsdosfsname01: exclude
+ iostream: exclude
+ linpack: exclude
+ record02: exclude
+ utf8proc01: exclude
+build-type: option
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+default: null
+default-by-variant: []
+description: ''
+enabled-by: true
+links:
+- role: build-dependency
+ uid: ../../tstnoiconv
+- role: build-dependency
+ uid: ../../tstnointrcrit
+- role: build-dependency
+ uid: ../../tstreqtick
+type: build
diff --git a/spec/build/bsps/sh/shsim/tstsimsh2e.yml b/spec/build/bsps/sh/shsim/tstsimsh2e.yml
new file mode 100644
index 0000000000..a915754a76
--- /dev/null
+++ b/spec/build/bsps/sh/shsim/tstsimsh2e.yml
@@ -0,0 +1,24 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+actions:
+- set-test-state:
+ fileio: exclude
+ fsdosfsname01: exclude
+ iostream: exclude
+ linpack: exclude
+ record02: exclude
+ utf8proc01: exclude
+build-type: option
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+default: null
+default-by-variant: []
+description: ''
+enabled-by: true
+links:
+- role: build-dependency
+ uid: ../../tstnoiconv
+- role: build-dependency
+ uid: ../../tstnointrcrit
+- role: build-dependency
+ uid: ../../tstreqtick
+type: build
diff --git a/spec/build/bsps/sh/shsim/tstsimsh4.yml b/spec/build/bsps/sh/shsim/tstsimsh4.yml
new file mode 100644
index 0000000000..a915754a76
--- /dev/null
+++ b/spec/build/bsps/sh/shsim/tstsimsh4.yml
@@ -0,0 +1,24 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+actions:
+- set-test-state:
+ fileio: exclude
+ fsdosfsname01: exclude
+ iostream: exclude
+ linpack: exclude
+ record02: exclude
+ utf8proc01: exclude
+build-type: option
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+default: null
+default-by-variant: []
+description: ''
+enabled-by: true
+links:
+- role: build-dependency
+ uid: ../../tstnoiconv
+- role: build-dependency
+ uid: ../../tstnointrcrit
+- role: build-dependency
+ uid: ../../tstreqtick
+type: build
diff --git a/spec/build/bsps/sparc/erc32/abi.yml b/spec/build/bsps/sparc/erc32/abi.yml
new file mode 100644
index 0000000000..f8ea9fb8da
--- /dev/null
+++ b/spec/build/bsps/sparc/erc32/abi.yml
@@ -0,0 +1,17 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+actions:
+- get-string: null
+- split: null
+- env-append: null
+build-type: option
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+default:
+- -mcpu=cypress
+default-by-variant: []
+description: |
+ ABI flags
+enabled-by: true
+links: []
+name: ABI_FLAGS
+type: build
diff --git a/spec/build/bsps/sparc/erc32/bsperc32.yml b/spec/build/bsps/sparc/erc32/bsperc32.yml
new file mode 100644
index 0000000000..ecf630278f
--- /dev/null
+++ b/spec/build/bsps/sparc/erc32/bsperc32.yml
@@ -0,0 +1,76 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+arch: sparc
+bsp: erc32
+build-type: bsp
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+enabled-by: true
+family: erc32
+includes: []
+install:
+- destination: ${BSP_INCLUDEDIR}
+ source:
+ - bsps/sparc/erc32/include/bsp.h
+ - bsps/sparc/erc32/include/erc32.h
+ - bsps/sparc/erc32/include/tm27.h
+- destination: ${BSP_INCLUDEDIR}/bsp
+ source:
+ - bsps/sparc/erc32/include/bsp/irq.h
+- destination: ${BSP_LIBDIR}
+ source:
+ - bsps/sparc/erc32/start/linkcmds
+ - bsps/sparc/shared/start/linkcmds.base
+links:
+- role: build-dependency
+ uid: ../../obj
+- role: build-dependency
+ uid: ../../objirq
+- role: build-dependency
+ uid: ../../opto2
+- role: build-dependency
+ uid: abi
+- role: build-dependency
+ uid: objnet
+- role: build-dependency
+ uid: objsmp
+- role: build-dependency
+ uid: optconirq
+- role: build-dependency
+ uid: optpwrdwnhlt
+- role: build-dependency
+ uid: ../grp
+- role: build-dependency
+ uid: ../start
+- role: build-dependency
+ uid: ../../bspopts
+source:
+- bsps/shared/cache/nocache.c
+- bsps/shared/dev/getentropy/getentropy-cpucounter.c
+- bsps/shared/dev/serial/legacy-console-control.c
+- bsps/shared/dev/serial/legacy-console-select.c
+- bsps/shared/dev/serial/legacy-console.c
+- bsps/shared/irq/irq-default-handler.c
+- bsps/shared/start/bspfatal-default.c
+- bsps/shared/start/bspreset-empty.c
+- bsps/shared/start/sbrk.c
+- bsps/sparc/erc32/btimer/btimer.c
+- bsps/sparc/erc32/clock/ckinit.c
+- bsps/sparc/erc32/console/debugputs.c
+- bsps/sparc/erc32/console/erc32_console.c
+- bsps/sparc/erc32/gnatsupp/gnatsupp.c
+- bsps/sparc/erc32/start/boardinit.S
+- bsps/sparc/erc32/start/bspdelay.c
+- bsps/sparc/erc32/start/bspidle.c
+- bsps/sparc/erc32/start/bspstart.c
+- bsps/sparc/erc32/start/erc32mec.c
+- bsps/sparc/erc32/start/setvec.c
+- bsps/sparc/erc32/start/spurious.c
+- bsps/sparc/shared/gnatcommon.c
+- bsps/sparc/shared/irq/bsp_isr_handler.c
+- bsps/sparc/shared/irq/irq-shared.c
+- bsps/sparc/shared/start/bsp_fatal_exit.c
+- bsps/sparc/shared/start/bsp_fatal_halt.c
+- bsps/sparc/shared/start/bspgetworkarea.c
+type: build
diff --git a/spec/build/bsps/sparc/erc32/objnet.yml b/spec/build/bsps/sparc/erc32/objnet.yml
new file mode 100644
index 0000000000..bc5c468579
--- /dev/null
+++ b/spec/build/bsps/sparc/erc32/objnet.yml
@@ -0,0 +1,16 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: objects
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by:
+- RTEMS_NETWORKING
+includes:
+- cpukit/libnetworking
+install: []
+links: []
+source:
+- bsps/sparc/erc32/net/erc32sonic.c
+type: build
diff --git a/spec/build/bsps/sparc/erc32/objsmp.yml b/spec/build/bsps/sparc/erc32/objsmp.yml
new file mode 100644
index 0000000000..05aa378fb7
--- /dev/null
+++ b/spec/build/bsps/sparc/erc32/objsmp.yml
@@ -0,0 +1,15 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: objects
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by:
+- RTEMS_SMP
+includes: []
+install: []
+links: []
+source:
+- bsps/sparc/erc32/start/bspsmp.c
+type: build
diff --git a/spec/build/bsps/sparc/erc32/optconirq.yml b/spec/build/bsps/sparc/erc32/optconirq.yml
new file mode 100644
index 0000000000..df25d621b4
--- /dev/null
+++ b/spec/build/bsps/sparc/erc32/optconirq.yml
@@ -0,0 +1,16 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+actions:
+- get-integer: null
+- define: null
+build-type: option
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+default: 0
+default-by-variant: []
+description: |
+ The erc32 console driver can operate in either polled or interrupt mode. Under the simulator (especially when FAST_UART is defined), polled seems to operate better. It is common for a task to print a line (like the end of test message) and then exit. In this case, the program returns control to the simulator command line before the program has even queued the output to the uart. Thus sis has no chance of getting the data out.
+enabled-by: true
+format: '{}'
+links: []
+name: CONSOLE_USE_INTERRUPTS
+type: build
diff --git a/spec/build/bsps/sparc/erc32/optpwrdwnhlt.yml b/spec/build/bsps/sparc/erc32/optpwrdwnhlt.yml
new file mode 100644
index 0000000000..6627a5b071
--- /dev/null
+++ b/spec/build/bsps/sparc/erc32/optpwrdwnhlt.yml
@@ -0,0 +1,15 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+actions:
+- get-boolean: null
+- define-condition: null
+build-type: option
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+default: false
+default-by-variant: []
+description: |
+ If defined, CPU is spinning on fatal exit. Otherwise generate system error which will hand over to debugger, simulator, etc.
+enabled-by: true
+links: []
+name: BSP_POWER_DOWN_AT_FATAL_HALT
+type: build
diff --git a/spec/build/bsps/sparc/grp.yml b/spec/build/bsps/sparc/grp.yml
new file mode 100644
index 0000000000..edae33b04a
--- /dev/null
+++ b/spec/build/bsps/sparc/grp.yml
@@ -0,0 +1,19 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: group
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+enabled-by: true
+includes: []
+install:
+- destination: ${BSP_INCLUDEDIR}/bsp
+ source:
+ - bsps/sparc/include/bsp/gnatcommon.h
+ - bsps/sparc/include/bsp/gr_leon4_n2x.h
+- destination: ${BSP_INCLUDEDIR}/drvmgr
+ source:
+ - bsps/sparc/include/drvmgr/leon2_amba_bus.h
+ldflags: []
+links: []
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/bsps/sparc/leon2/abi.yml b/spec/build/bsps/sparc/leon2/abi.yml
new file mode 100644
index 0000000000..21fe1b77ca
--- /dev/null
+++ b/spec/build/bsps/sparc/leon2/abi.yml
@@ -0,0 +1,22 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+actions:
+- get-string: null
+- split: null
+- env-append: null
+build-type: option
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+default:
+- -mcpu=leon
+default-by-variant:
+- value:
+ - -mcpu=leon
+ - -mfix-at697f
+ variants:
+ - sparc/at697f
+description: |
+ ABI flags
+enabled-by: true
+links: []
+name: ABI_FLAGS
+type: build
diff --git a/spec/build/bsps/sparc/leon2/bspat697f.yml b/spec/build/bsps/sparc/leon2/bspat697f.yml
new file mode 100644
index 0000000000..6cb215721c
--- /dev/null
+++ b/spec/build/bsps/sparc/leon2/bspat697f.yml
@@ -0,0 +1,19 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+arch: sparc
+bsp: at697f
+build-type: bsp
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+enabled-by: true
+family: leon2
+includes: []
+install: []
+links:
+- role: build-dependency
+ uid: ../../opto2
+- role: build-dependency
+ uid: grp
+source: []
+type: build
diff --git a/spec/build/bsps/sparc/leon2/bspleon2.yml b/spec/build/bsps/sparc/leon2/bspleon2.yml
new file mode 100644
index 0000000000..0ed296385d
--- /dev/null
+++ b/spec/build/bsps/sparc/leon2/bspleon2.yml
@@ -0,0 +1,19 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+arch: sparc
+bsp: leon2
+build-type: bsp
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+enabled-by: true
+family: leon2
+includes: []
+install: []
+links:
+- role: build-dependency
+ uid: ../../opto2
+- role: build-dependency
+ uid: grp
+source: []
+type: build
diff --git a/spec/build/bsps/sparc/leon2/grp.yml b/spec/build/bsps/sparc/leon2/grp.yml
new file mode 100644
index 0000000000..352576f157
--- /dev/null
+++ b/spec/build/bsps/sparc/leon2/grp.yml
@@ -0,0 +1,38 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: group
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+enabled-by: true
+includes: []
+install: []
+ldflags: []
+links:
+- role: build-dependency
+ uid: ../../linkcmds
+- role: build-dependency
+ uid: ../../obj
+- role: build-dependency
+ uid: ../../objgrlib
+- role: build-dependency
+ uid: ../../objirq
+- role: build-dependency
+ uid: ../grp
+- role: build-dependency
+ uid: abi
+- role: build-dependency
+ uid: obj
+- role: build-dependency
+ uid: objnet
+- role: build-dependency
+ uid: objsmp
+- role: build-dependency
+ uid: optconirq
+- role: build-dependency
+ uid: optpwrdwnhlt
+- role: build-dependency
+ uid: ../start
+- role: build-dependency
+ uid: ../../bspopts
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/bsps/sparc/leon2/obj.yml b/spec/build/bsps/sparc/leon2/obj.yml
new file mode 100644
index 0000000000..8f2d9a1394
--- /dev/null
+++ b/spec/build/bsps/sparc/leon2/obj.yml
@@ -0,0 +1,52 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: objects
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by: true
+includes: []
+install:
+- destination: ${BSP_INCLUDEDIR}
+ source:
+ - bsps/sparc/leon2/include/bsp.h
+ - bsps/sparc/leon2/include/leon.h
+ - bsps/sparc/leon2/include/tm27.h
+- destination: ${BSP_INCLUDEDIR}/bsp
+ source:
+ - bsps/sparc/leon2/include/bsp/at697_pci.h
+ - bsps/sparc/leon2/include/bsp/irq.h
+- destination: ${BSP_LIBDIR}
+ source:
+ - bsps/sparc/leon2/start/linkcmds.at697f
+ - bsps/sparc/leon2/start/linkcmds.leon2
+ - bsps/sparc/shared/start/linkcmds.base
+links: []
+source:
+- bsps/shared/dev/getentropy/getentropy-cpucounter.c
+- bsps/shared/irq/irq-default-handler.c
+- bsps/shared/start/bspfatal-default.c
+- bsps/shared/start/bspreset-empty.c
+- bsps/shared/start/sbrk.c
+- bsps/sparc/leon2/btimer/btimer.c
+- bsps/sparc/leon2/clock/ckinit.c
+- bsps/sparc/leon2/console/console.c
+- bsps/sparc/leon2/console/debugputs.c
+- bsps/sparc/leon2/gnatsupp/gnatsupp.c
+- bsps/sparc/leon2/pci/at697_pci.c
+- bsps/sparc/leon2/start/bspdelay.c
+- bsps/sparc/leon2/start/bspidle.c
+- bsps/sparc/leon2/start/bspstart.c
+- bsps/sparc/leon2/start/cache.c
+- bsps/sparc/leon2/start/setvec.c
+- bsps/sparc/leon2/start/spurious.c
+- bsps/sparc/shared/drvmgr/ambapp_bus_leon2.c
+- bsps/sparc/shared/drvmgr/leon2_amba_bus.c
+- bsps/sparc/shared/gnatcommon.c
+- bsps/sparc/shared/irq/bsp_isr_handler.c
+- bsps/sparc/shared/irq/irq-shared.c
+- bsps/sparc/shared/start/bsp_fatal_exit.c
+- bsps/sparc/shared/start/bsp_fatal_halt.c
+- bsps/sparc/shared/start/bspgetworkarea.c
+type: build
diff --git a/spec/build/bsps/sparc/leon2/objnet.yml b/spec/build/bsps/sparc/leon2/objnet.yml
new file mode 100644
index 0000000000..d27a71022a
--- /dev/null
+++ b/spec/build/bsps/sparc/leon2/objnet.yml
@@ -0,0 +1,17 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: objects
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by:
+- RTEMS_NETWORKING
+includes:
+- cpukit/libnetworking
+install: []
+links: []
+source:
+- bsps/sparc/leon2/net/leon_open_eth.c
+- bsps/sparc/leon2/net/leon_smc91111.c
+type: build
diff --git a/spec/build/bsps/sparc/leon2/objsmp.yml b/spec/build/bsps/sparc/leon2/objsmp.yml
new file mode 100644
index 0000000000..bf5d80637d
--- /dev/null
+++ b/spec/build/bsps/sparc/leon2/objsmp.yml
@@ -0,0 +1,16 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: objects
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by:
+- RTEMS_SMP
+includes: []
+install: []
+links: []
+source:
+- bsps/shared/start/bspsmp-dummy.c
+- bsps/shared/start/getcurrentprocessor-zero.c
+type: build
diff --git a/spec/build/bsps/sparc/leon2/optconirq.yml b/spec/build/bsps/sparc/leon2/optconirq.yml
new file mode 100644
index 0000000000..4163b30aff
--- /dev/null
+++ b/spec/build/bsps/sparc/leon2/optconirq.yml
@@ -0,0 +1,16 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+actions:
+- get-integer: null
+- define: null
+build-type: option
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+default: 0
+default-by-variant: []
+description: |
+ The leon2 console driver can operate in either polled or interrupt mode. Under the simulator (especially when FAST_UART is defined), polled seems to operate better. It is common for a task to print a line (like the end of test message) and then exit. In this case, the program returns control to the simulator command line before the program has even queued the output to the uart. Thus sis has no chance of getting the data out.
+enabled-by: true
+format: '{}'
+links: []
+name: CONSOLE_USE_INTERRUPTS
+type: build
diff --git a/spec/build/bsps/sparc/leon2/optpwrdwnhlt.yml b/spec/build/bsps/sparc/leon2/optpwrdwnhlt.yml
new file mode 100644
index 0000000000..6627a5b071
--- /dev/null
+++ b/spec/build/bsps/sparc/leon2/optpwrdwnhlt.yml
@@ -0,0 +1,15 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+actions:
+- get-boolean: null
+- define-condition: null
+build-type: option
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+default: false
+default-by-variant: []
+description: |
+ If defined, CPU is spinning on fatal exit. Otherwise generate system error which will hand over to debugger, simulator, etc.
+enabled-by: true
+links: []
+name: BSP_POWER_DOWN_AT_FATAL_HALT
+type: build
diff --git a/spec/build/bsps/sparc/leon3/abi.yml b/spec/build/bsps/sparc/leon3/abi.yml
new file mode 100644
index 0000000000..b725d5de48
--- /dev/null
+++ b/spec/build/bsps/sparc/leon3/abi.yml
@@ -0,0 +1,33 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+actions:
+- get-string: null
+- split: null
+- env-append: null
+build-type: option
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+default:
+- -mcpu=leon3
+default-by-variant:
+- value:
+ - -mcpu=leon3
+ - -mfix-ut700
+ variants:
+ - sparc/ut700
+- value:
+ - -mcpu=leon
+ - -mfix-ut699
+ variants:
+ - sparc/ut699
+- value:
+ - -mcpu=leon3
+ - -mfix-gr712rc
+ variants:
+ - sparc/gr712rc
+description: |
+ ABI flags
+enabled-by:
+- gcc
+links: []
+name: ABI_FLAGS
+type: build
diff --git a/spec/build/bsps/sparc/leon3/abiclang.yml b/spec/build/bsps/sparc/leon3/abiclang.yml
new file mode 100644
index 0000000000..6c9646e7cd
--- /dev/null
+++ b/spec/build/bsps/sparc/leon3/abiclang.yml
@@ -0,0 +1,36 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+actions:
+- get-string: null
+- split: null
+- env-append: null
+build-type: option
+copyrights:
+- Copyright (C) 2020 Hesham Almatary <Hesham.Almatary@cl.cam.ac.uk>
+default:
+- -mcpu=leon3
+default-by-variant:
+- value:
+ - -mcpu=leon3
+ - -mfix-ut700
+ variants:
+ - sparc/ut700
+- value:
+ - -mcpu=leon
+ - -mfix-ut699
+ variants:
+ - sparc/ut699
+- value:
+ - -mcpu=gr712rc
+ variants:
+ - sparc/gr712rc
+- value:
+ - -mcpu=gr740
+ variants:
+ - sparc/gr740
+description: |
+ ABI flags
+enabled-by:
+- clang
+links: []
+name: ABI_FLAGS
+type: build
diff --git a/spec/build/bsps/sparc/leon3/bspgr712rc.yml b/spec/build/bsps/sparc/leon3/bspgr712rc.yml
new file mode 100644
index 0000000000..8a065444ab
--- /dev/null
+++ b/spec/build/bsps/sparc/leon3/bspgr712rc.yml
@@ -0,0 +1,19 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+arch: sparc
+bsp: gr712rc
+build-type: bsp
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+enabled-by: true
+family: leon3
+includes: []
+install: []
+links:
+- role: build-dependency
+ uid: ../../opto2
+- role: build-dependency
+ uid: grp
+source: []
+type: build
diff --git a/spec/build/bsps/sparc/leon3/bspgr740.yml b/spec/build/bsps/sparc/leon3/bspgr740.yml
new file mode 100644
index 0000000000..a5f3cd30f6
--- /dev/null
+++ b/spec/build/bsps/sparc/leon3/bspgr740.yml
@@ -0,0 +1,19 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+arch: sparc
+bsp: gr740
+build-type: bsp
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+enabled-by: true
+family: leon3
+includes: []
+install: []
+links:
+- role: build-dependency
+ uid: ../../opto2
+- role: build-dependency
+ uid: grp
+source: []
+type: build
diff --git a/spec/build/bsps/sparc/leon3/bspleon3.yml b/spec/build/bsps/sparc/leon3/bspleon3.yml
new file mode 100644
index 0000000000..63b4e54f58
--- /dev/null
+++ b/spec/build/bsps/sparc/leon3/bspleon3.yml
@@ -0,0 +1,19 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+arch: sparc
+bsp: leon3
+build-type: bsp
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+enabled-by: true
+family: leon3
+includes: []
+install: []
+links:
+- role: build-dependency
+ uid: ../../opto2
+- role: build-dependency
+ uid: grp
+source: []
+type: build
diff --git a/spec/build/bsps/sparc/leon3/bsput699.yml b/spec/build/bsps/sparc/leon3/bsput699.yml
new file mode 100644
index 0000000000..0a2f9ce596
--- /dev/null
+++ b/spec/build/bsps/sparc/leon3/bsput699.yml
@@ -0,0 +1,19 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+arch: sparc
+bsp: ut699
+build-type: bsp
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+enabled-by: true
+family: leon3
+includes: []
+install: []
+links:
+- role: build-dependency
+ uid: ../../opto2
+- role: build-dependency
+ uid: grp
+source: []
+type: build
diff --git a/spec/build/bsps/sparc/leon3/bsput700.yml b/spec/build/bsps/sparc/leon3/bsput700.yml
new file mode 100644
index 0000000000..52353fda7d
--- /dev/null
+++ b/spec/build/bsps/sparc/leon3/bsput700.yml
@@ -0,0 +1,19 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+arch: sparc
+bsp: ut700
+build-type: bsp
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+enabled-by: true
+family: leon3
+includes: []
+install: []
+links:
+- role: build-dependency
+ uid: ../../opto2
+- role: build-dependency
+ uid: grp
+source: []
+type: build
diff --git a/spec/build/bsps/sparc/leon3/grp.yml b/spec/build/bsps/sparc/leon3/grp.yml
new file mode 100644
index 0000000000..48d73df908
--- /dev/null
+++ b/spec/build/bsps/sparc/leon3/grp.yml
@@ -0,0 +1,46 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: group
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+enabled-by: true
+includes: []
+install: []
+ldflags: []
+links:
+- role: build-dependency
+ uid: ../../linkcmds
+- role: build-dependency
+ uid: ../../obj
+- role: build-dependency
+ uid: ../../objgrlib
+- role: build-dependency
+ uid: ../../objirq
+- role: build-dependency
+ uid: ../grp
+- role: build-dependency
+ uid: abiclang
+- role: build-dependency
+ uid: abi
+- role: build-dependency
+ uid: obj
+- role: build-dependency
+ uid: objmpci
+- role: build-dependency
+ uid: objnet
+- role: build-dependency
+ uid: objnetnosmp
+- role: build-dependency
+ uid: objsmp
+- role: build-dependency
+ uid: optconirq
+- role: build-dependency
+ uid: optleon3smp
+- role: build-dependency
+ uid: optpwrdwnhlt
+- role: build-dependency
+ uid: ../start
+- role: build-dependency
+ uid: ../../bspopts
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/bsps/sparc/leon3/obj.yml b/spec/build/bsps/sparc/leon3/obj.yml
new file mode 100644
index 0000000000..03629ee620
--- /dev/null
+++ b/spec/build/bsps/sparc/leon3/obj.yml
@@ -0,0 +1,62 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: objects
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by: true
+includes: []
+install:
+- destination: ${BSP_INCLUDEDIR}
+ source:
+ - bsps/sparc/leon3/include/amba.h
+ - bsps/sparc/leon3/include/bsp.h
+ - bsps/sparc/leon3/include/leon.h
+ - bsps/sparc/leon3/include/tm27.h
+- destination: ${BSP_INCLUDEDIR}/bsp
+ source:
+ - bsps/sparc/leon3/include/bsp/irq.h
+ - bsps/sparc/leon3/include/bsp/watchdog.h
+- destination: ${BSP_LIBDIR}
+ source:
+ - bsps/sparc/leon3/start/linkcmds.gr712rc
+ - bsps/sparc/leon3/start/linkcmds.gr740
+ - bsps/sparc/leon3/start/linkcmds.leon3
+ - bsps/sparc/leon3/start/linkcmds.ut699
+ - bsps/sparc/leon3/start/linkcmds.ut700
+ - bsps/sparc/shared/start/linkcmds.base
+links: []
+source:
+- bsps/shared/dev/getentropy/getentropy-cpucounter.c
+- bsps/shared/dev/serial/console-termios.c
+- bsps/shared/irq/irq-default-handler.c
+- bsps/shared/start/bspreset-empty.c
+- bsps/shared/start/sbrk.c
+- bsps/sparc/leon3/btimer/btimer.c
+- bsps/sparc/leon3/btimer/watchdog.c
+- bsps/sparc/leon3/clock/ckinit.c
+- bsps/sparc/leon3/console/console.c
+- bsps/sparc/leon3/console/printk_support.c
+- bsps/sparc/leon3/gnatsupp/gnatsupp.c
+- bsps/sparc/leon3/start/amba.c
+- bsps/sparc/leon3/start/bsp_fatal_halt.c
+- bsps/sparc/leon3/start/bspclean.c
+- bsps/sparc/leon3/start/bspdelay.c
+- bsps/sparc/leon3/start/bspidle.S
+- bsps/sparc/leon3/start/bspstart.c
+- bsps/sparc/leon3/start/cache.c
+- bsps/sparc/leon3/start/cpucounter.c
+- bsps/sparc/leon3/start/eirq.c
+- bsps/sparc/leon3/start/setvec.c
+- bsps/sparc/leon3/start/spurious.c
+- bsps/sparc/shared/gnatcommon.c
+- bsps/sparc/shared/irq/bsp_isr_handler.c
+- bsps/sparc/shared/irq/irq-shared.c
+- bsps/sparc/shared/pci/gr_cpci_gr740.c
+- bsps/sparc/shared/pci/gr_leon4_n2x.c
+- bsps/sparc/shared/pci/pci_memreg_sparc_be.c
+- bsps/sparc/shared/pci/pci_memreg_sparc_le.c
+- bsps/sparc/shared/start/bsp_fatal_exit.c
+- bsps/sparc/shared/start/bspgetworkarea.c
+type: build
diff --git a/spec/build/bsps/sparc/leon3/objmpci.yml b/spec/build/bsps/sparc/leon3/objmpci.yml
new file mode 100644
index 0000000000..dee85a3cd1
--- /dev/null
+++ b/spec/build/bsps/sparc/leon3/objmpci.yml
@@ -0,0 +1,18 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: objects
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by:
+- RTEMS_MULTIPROCESSING
+includes: []
+install: []
+links: []
+source:
+- bsps/sparc/leon3/mpci/addrconv.c
+- bsps/sparc/leon3/mpci/getcfg.c
+- bsps/sparc/leon3/mpci/lock.c
+- bsps/sparc/leon3/mpci/mpisr.c
+type: build
diff --git a/spec/build/bsps/sparc/leon3/objnet.yml b/spec/build/bsps/sparc/leon3/objnet.yml
new file mode 100644
index 0000000000..2e7611e8bc
--- /dev/null
+++ b/spec/build/bsps/sparc/leon3/objnet.yml
@@ -0,0 +1,17 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: objects
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by:
+- RTEMS_NETWORKING
+includes:
+- cpukit/libnetworking
+install: []
+links: []
+source:
+- bsps/sparc/leon3/net/leon_open_eth.c
+- bsps/sparc/leon3/net/leon_smc91111.c
+type: build
diff --git a/spec/build/bsps/sparc/leon3/objnetnosmp.yml b/spec/build/bsps/sparc/leon3/objnetnosmp.yml
new file mode 100644
index 0000000000..3d4a2c3ed9
--- /dev/null
+++ b/spec/build/bsps/sparc/leon3/objnetnosmp.yml
@@ -0,0 +1,18 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: objects
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by:
+- and:
+ - RTEMS_NETWORKING
+ - not: RTEMS_SMP
+includes:
+- cpukit/libnetworking
+install: []
+links: []
+source:
+- bsps/sparc/leon3/net/leon_greth.c
+type: build
diff --git a/spec/build/bsps/sparc/leon3/objsmp.yml b/spec/build/bsps/sparc/leon3/objsmp.yml
new file mode 100644
index 0000000000..72a43f2a78
--- /dev/null
+++ b/spec/build/bsps/sparc/leon3/objsmp.yml
@@ -0,0 +1,15 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: objects
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by:
+- RTEMS_SMP
+includes: []
+install: []
+links: []
+source:
+- bsps/sparc/leon3/start/bspsmp.c
+type: build
diff --git a/spec/build/bsps/sparc/leon3/optconirq.yml b/spec/build/bsps/sparc/leon3/optconirq.yml
new file mode 100644
index 0000000000..2278f00ef3
--- /dev/null
+++ b/spec/build/bsps/sparc/leon3/optconirq.yml
@@ -0,0 +1,16 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+actions:
+- get-integer: null
+- define: null
+build-type: option
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+default: 0
+default-by-variant: []
+description: |
+ The leon3 console driver can operate in either polled or interrupt mode. Under the simulator (especially when FAST_UART is defined), polled seems to operate better.
+enabled-by: true
+format: '{}'
+links: []
+name: CONSOLE_USE_INTERRUPTS
+type: build
diff --git a/spec/build/bsps/sparc/leon3/optleon3smp.yml b/spec/build/bsps/sparc/leon3/optleon3smp.yml
new file mode 100644
index 0000000000..c78929c198
--- /dev/null
+++ b/spec/build/bsps/sparc/leon3/optleon3smp.yml
@@ -0,0 +1,15 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+actions:
+- get-boolean: null
+- define-condition: null
+build-type: option
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+default: true
+default-by-variant: []
+description: |
+ Always defined when on a LEON3 to enable the LEON3 support for determining the CPU core number in an SMP configuration.
+enabled-by: true
+links: []
+name: BSP_LEON3_SMP
+type: build
diff --git a/spec/build/bsps/sparc/leon3/optpwrdwnhlt.yml b/spec/build/bsps/sparc/leon3/optpwrdwnhlt.yml
new file mode 100644
index 0000000000..8923870017
--- /dev/null
+++ b/spec/build/bsps/sparc/leon3/optpwrdwnhlt.yml
@@ -0,0 +1,15 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+actions:
+- get-boolean: null
+- define-condition: null
+build-type: option
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+default: false
+default-by-variant: []
+description: |
+ If defined, CPU is powered down on fatal exit. Otherwise generate system error which will hand over to debugger, simulator, etc.
+enabled-by: true
+links: []
+name: BSP_POWER_DOWN_AT_FATAL_HALT
+type: build
diff --git a/spec/build/bsps/sparc/start.yml b/spec/build/bsps/sparc/start.yml
new file mode 100644
index 0000000000..65293d8d8a
--- /dev/null
+++ b/spec/build/bsps/sparc/start.yml
@@ -0,0 +1,14 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+asflags: []
+build-type: start-file
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+enabled-by: true
+includes: []
+install-path: ${BSP_LIBDIR}
+links: []
+source:
+- bsps/sparc/shared/start/start.S
+target: start.o
+type: build
diff --git a/spec/build/bsps/sparc64/grp.yml b/spec/build/bsps/sparc64/grp.yml
new file mode 100644
index 0000000000..83d85d1a01
--- /dev/null
+++ b/spec/build/bsps/sparc64/grp.yml
@@ -0,0 +1,58 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: group
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+enabled-by: true
+includes: []
+install:
+- destination: ${BSP_INCLUDEDIR}
+ source:
+ - bsps/sparc64/include/asm.h
+ - bsps/sparc64/include/traptable.h
+- destination: ${BSP_INCLUDEDIR}/arch
+ source:
+ - bsps/sparc64/include/arch/arch.h
+ - bsps/sparc64/include/arch/boot.h
+ - bsps/sparc64/include/arch/regdef.h
+ - bsps/sparc64/include/arch/stack.h
+- destination: ${BSP_INCLUDEDIR}/arch/mm
+ source:
+ - bsps/sparc64/include/arch/mm/cache_spec.h
+ - bsps/sparc64/include/arch/mm/doxygen.h
+ - bsps/sparc64/include/arch/mm/frame.h
+ - bsps/sparc64/include/arch/mm/mmu.h
+ - bsps/sparc64/include/arch/mm/page.h
+ - bsps/sparc64/include/arch/mm/tlb.h
+ - bsps/sparc64/include/arch/mm/tte.h
+- destination: ${BSP_INCLUDEDIR}/arch/mm/sun4u
+ source:
+ - bsps/sparc64/include/arch/mm/sun4u/frame.h
+ - bsps/sparc64/include/arch/mm/sun4u/mmu.h
+ - bsps/sparc64/include/arch/mm/sun4u/page.h
+ - bsps/sparc64/include/arch/mm/sun4u/tlb.h
+ - bsps/sparc64/include/arch/mm/sun4u/tte.h
+- destination: ${BSP_INCLUDEDIR}/arch/sun4u
+ source:
+ - bsps/sparc64/include/arch/sun4u/arch.h
+- destination: ${BSP_INCLUDEDIR}/boot
+ source:
+ - bsps/sparc64/include/boot/align.h
+ - bsps/sparc64/include/boot/balloc.h
+ - bsps/sparc64/include/boot/gentypes.h
+ - bsps/sparc64/include/boot/main.h
+ - bsps/sparc64/include/boot/ofw.h
+ - bsps/sparc64/include/boot/ofw_tree.h
+ - bsps/sparc64/include/boot/ofwarch.h
+ - bsps/sparc64/include/boot/register.h
+ - bsps/sparc64/include/boot/types.h
+- destination: ${BSP_INCLUDEDIR}/genarch/ofw
+ source:
+ - bsps/sparc64/include/genarch/ofw/ofw_tree.h
+- destination: ${BSP_INCLUDEDIR}/kernel
+ source:
+ - bsps/sparc64/include/kernel/align.h
+ldflags: []
+links: []
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/bsps/sparc64/niagara/abi.yml b/spec/build/bsps/sparc64/niagara/abi.yml
new file mode 100644
index 0000000000..d8aadc1831
--- /dev/null
+++ b/spec/build/bsps/sparc64/niagara/abi.yml
@@ -0,0 +1,18 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+actions:
+- get-string: null
+- split: null
+- env-append: null
+build-type: option
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+default:
+- -DSUN4V
+- -mcpu=niagara
+default-by-variant: []
+description: |
+ ABI flags
+enabled-by: true
+links: []
+name: ABI_FLAGS
+type: build
diff --git a/spec/build/bsps/sparc64/niagara/bspniagara.yml b/spec/build/bsps/sparc64/niagara/bspniagara.yml
new file mode 100644
index 0000000000..f92726a3a3
--- /dev/null
+++ b/spec/build/bsps/sparc64/niagara/bspniagara.yml
@@ -0,0 +1,63 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+arch: sparc64
+bsp: niagara
+build-type: bsp
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+enabled-by: true
+family: niagara
+includes: []
+install:
+- destination: ${BSP_INCLUDEDIR}
+ source:
+ - bsps/sparc64/niagara/include/bsp.h
+ - bsps/sparc64/niagara/include/tm27.h
+- destination: ${BSP_INCLUDEDIR}/bsp
+ source:
+ - bsps/sparc64/niagara/include/bsp/irq.h
+- destination: ${BSP_LIBDIR}
+ source:
+ - bsps/sparc64/shared/start/linkcmds
+ - bsps/sparc64/shared/start/linkcmds
+links:
+- role: build-dependency
+ uid: ../../obj
+- role: build-dependency
+ uid: ../../objirqdflt
+- role: build-dependency
+ uid: ../../opto2
+- role: build-dependency
+ uid: ../grp
+- role: build-dependency
+ uid: abi
+- role: build-dependency
+ uid: ../start
+- role: build-dependency
+ uid: ../../bspopts
+source:
+- bsps/shared/cache/nocache.c
+- bsps/shared/dev/btimer/btimer-stub.c
+- bsps/shared/dev/getentropy/getentropy-cpucounter.c
+- bsps/shared/dev/serial/legacy-console-control.c
+- bsps/shared/dev/serial/legacy-console-select.c
+- bsps/shared/dev/serial/legacy-console.c
+- bsps/shared/start/bspgetworkarea-default.c
+- bsps/shared/start/bspreset-empty.c
+- bsps/shared/start/bspstart-empty.c
+- bsps/shared/start/sbrk.c
+- bsps/sparc64/niagara/start/bspclean.c
+- bsps/sparc64/niagara/start/bspinit.S
+- bsps/sparc64/niagara/start/m5op_sparc.S
+- bsps/sparc64/shared/clock/ckinit.c
+- bsps/sparc64/shared/console/conscfg.c
+- bsps/sparc64/shared/helenos/boot/genarch/balloc.c
+- bsps/sparc64/shared/helenos/boot/genarch/ofw.c
+- bsps/sparc64/shared/helenos/boot/genarch/ofw_tree.c
+- bsps/sparc64/shared/helenos/boot/sparc64/loader/main.c
+- bsps/sparc64/shared/helenos/boot/sparc64/loader/ofwarch.c
+- bsps/sparc64/shared/helenos/boot/sparc64/loader/ofwasm.S
+- bsps/sparc64/shared/start/halt.S
+- bsps/sparc64/shared/start/setvec.c
+type: build
diff --git a/spec/build/bsps/sparc64/start.yml b/spec/build/bsps/sparc64/start.yml
new file mode 100644
index 0000000000..526fb049fd
--- /dev/null
+++ b/spec/build/bsps/sparc64/start.yml
@@ -0,0 +1,14 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+asflags: []
+build-type: start-file
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+enabled-by: true
+includes: []
+install-path: ${BSP_LIBDIR}
+links: []
+source:
+- bsps/sparc64/shared/start/start.S
+target: start.o
+type: build
diff --git a/spec/build/bsps/sparc64/usiii/abi.yml b/spec/build/bsps/sparc64/usiii/abi.yml
new file mode 100644
index 0000000000..77dce75223
--- /dev/null
+++ b/spec/build/bsps/sparc64/usiii/abi.yml
@@ -0,0 +1,19 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+actions:
+- get-string: null
+- split: null
+- env-append: null
+build-type: option
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+default:
+- -DSUN4U
+- -DUS3
+- -mcpu=ultrasparc3
+default-by-variant: []
+description: |
+ ABI flags
+enabled-by: true
+links: []
+name: ABI_FLAGS
+type: build
diff --git a/spec/build/bsps/sparc64/usiii/bspusiii.yml b/spec/build/bsps/sparc64/usiii/bspusiii.yml
new file mode 100644
index 0000000000..28057de722
--- /dev/null
+++ b/spec/build/bsps/sparc64/usiii/bspusiii.yml
@@ -0,0 +1,67 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+arch: sparc64
+bsp: usiii
+build-type: bsp
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+enabled-by: true
+family: usiii
+includes: []
+install:
+- destination: ${BSP_INCLUDEDIR}
+ source:
+ - bsps/sparc64/usiii/include/bsp.h
+ - bsps/sparc64/usiii/include/tm27.h
+- destination: ${BSP_INCLUDEDIR}/bsp
+ source:
+ - bsps/sparc64/usiii/include/bsp/irq.h
+- destination: ${BSP_LIBDIR}
+ source:
+ - bsps/sparc64/shared/start/linkcmds
+ - bsps/sparc64/shared/start/linkcmds
+links:
+- role: build-dependency
+ uid: ../../obj
+- role: build-dependency
+ uid: ../../objirqdflt
+- role: build-dependency
+ uid: ../../opto2
+- role: build-dependency
+ uid: ../grp
+- role: build-dependency
+ uid: ../start
+- role: build-dependency
+ uid: abi
+- role: build-dependency
+ uid: optclkfastidle
+- role: build-dependency
+ uid: ../../bspopts
+source:
+- bsps/shared/cache/nocache.c
+- bsps/shared/dev/btimer/btimer-stub.c
+- bsps/shared/dev/getentropy/getentropy-cpucounter.c
+- bsps/shared/dev/serial/legacy-console-control.c
+- bsps/shared/dev/serial/legacy-console-select.c
+- bsps/shared/dev/serial/legacy-console.c
+- bsps/shared/start/bspfatal-default.c
+- bsps/shared/start/bspgetworkarea-default.c
+- bsps/shared/start/bspreset-empty.c
+- bsps/shared/start/bspstart-empty.c
+- bsps/shared/start/sbrk.c
+- bsps/sparc64/shared/clock/ckinit.c
+- bsps/sparc64/shared/console/conscfg.c
+- bsps/sparc64/shared/helenos/boot/genarch/balloc.c
+- bsps/sparc64/shared/helenos/boot/genarch/ofw.c
+- bsps/sparc64/shared/helenos/boot/genarch/ofw_tree.c
+- bsps/sparc64/shared/helenos/boot/sparc64/loader/main.c
+- bsps/sparc64/shared/helenos/boot/sparc64/loader/ofwarch.c
+- bsps/sparc64/shared/helenos/boot/sparc64/loader/ofwasm.S
+- bsps/sparc64/shared/helenos/kernel/sparc64/src/cache.S
+- bsps/sparc64/shared/helenos/kernel/sparc64/src/sun4u/takemmu.S
+- bsps/sparc64/shared/start/halt.S
+- bsps/sparc64/shared/start/setvec.c
+- bsps/sparc64/shared/start/trap_table.S
+- bsps/sparc64/usiii/start/bspinit.S
+type: build
diff --git a/spec/build/bsps/sparc64/usiii/optclkfastidle.yml b/spec/build/bsps/sparc64/usiii/optclkfastidle.yml
new file mode 100644
index 0000000000..5aed542b4b
--- /dev/null
+++ b/spec/build/bsps/sparc64/usiii/optclkfastidle.yml
@@ -0,0 +1,15 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+actions:
+- get-boolean: null
+- define-condition: null
+build-type: option
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+default: false
+default-by-variant: []
+description: |
+ If defined, speed up the clock ticks while the idle task is running so time spent in the idle task is minimized. This significantly reduces the wall time required to execute the RTEMS test suites.
+enabled-by: true
+links: []
+name: SIMSPARC_FAST_IDLE
+type: build
diff --git a/spec/build/bsps/tst.yml b/spec/build/bsps/tst.yml
new file mode 100644
index 0000000000..8610b375c3
--- /dev/null
+++ b/spec/build/bsps/tst.yml
@@ -0,0 +1,23 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+actions:
+- set-test-state:
+ capture: user-input
+ dhrystone: benchmark
+ dl10: user-input
+ fileio: user-input
+ linpack: benchmark
+ monitor: user-input
+ psxfenv01: expected-fail
+ termios: user-input
+ top: user-input
+ whetstone: benchmark
+build-type: option
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+default: null
+default-by-variant: []
+description: |
+ Provides general test states.
+enabled-by: true
+links: []
+type: build
diff --git a/spec/build/bsps/tstnoiconv.yml b/spec/build/bsps/tstnoiconv.yml
new file mode 100644
index 0000000000..30de0ef1b4
--- /dev/null
+++ b/spec/build/bsps/tstnoiconv.yml
@@ -0,0 +1,15 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+actions:
+- set-test-state:
+ iconv: exclude
+ iconvclose: exclude
+ iconvopen: exclude
+build-type: option
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+default: null
+default-by-variant: []
+description: ''
+enabled-by: true
+links: []
+type: build
diff --git a/spec/build/bsps/tstnointrcrit.yml b/spec/build/bsps/tstnointrcrit.yml
new file mode 100644
index 0000000000..0460aaabb3
--- /dev/null
+++ b/spec/build/bsps/tstnointrcrit.yml
@@ -0,0 +1,35 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+actions:
+- set-test-state:
+ psxintrcritical01: exclude
+ spintrcritical01: exclude
+ spintrcritical02: exclude
+ spintrcritical03: exclude
+ spintrcritical04: exclude
+ spintrcritical05: exclude
+ spintrcritical06: exclude
+ spintrcritical07: exclude
+ spintrcritical08: exclude
+ spintrcritical09: exclude
+ spintrcritical10: exclude
+ spintrcritical11: exclude
+ spintrcritical12: exclude
+ spintrcritical13: exclude
+ spintrcritical14: exclude
+ spintrcritical15: exclude
+ spintrcritical16: exclude
+ spintrcritical17: exclude
+ spintrcritical18: exclude
+ spintrcritical20: exclude
+ spintrcritical21: exclude
+ spintrcritical22: exclude
+ spintrcritical23: exclude
+build-type: option
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+default: null
+default-by-variant: []
+description: ''
+enabled-by: true
+links: []
+type: build
diff --git a/spec/build/bsps/tstnojffs2.yml b/spec/build/bsps/tstnojffs2.yml
new file mode 100644
index 0000000000..4742d42919
--- /dev/null
+++ b/spec/build/bsps/tstnojffs2.yml
@@ -0,0 +1,21 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+actions:
+- set-test-state:
+ fsjffs2gc01: exclude
+ jffs2fserror: exclude
+ jffs2fslink: exclude
+ jffs2fspatheval: exclude
+ jffs2fspermission: exclude
+ jffs2fsrdwr: exclude
+ jffs2fsscandir01: exclude
+ jffs2fssymlink: exclude
+ jffs2fstime: exclude
+build-type: option
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+default: null
+default-by-variant: []
+description: ''
+enabled-by: true
+links: []
+type: build
diff --git a/spec/build/bsps/tstnolibdl.yml b/spec/build/bsps/tstnolibdl.yml
new file mode 100644
index 0000000000..db89e83130
--- /dev/null
+++ b/spec/build/bsps/tstnolibdl.yml
@@ -0,0 +1,22 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+actions:
+- set-test-state:
+ dl01: exclude
+ dl02: exclude
+ dl03: exclude
+ dl04: exclude
+ dl05: exclude
+ dl06: exclude
+ dl07: exclude
+ dl08: exclude
+ dl09: exclude
+ dl10: exclude
+build-type: option
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+default: null
+default-by-variant: []
+description: ''
+enabled-by: true
+links: []
+type: build
diff --git a/spec/build/bsps/tstnorfs.yml b/spec/build/bsps/tstnorfs.yml
new file mode 100644
index 0000000000..ba8ae1c21e
--- /dev/null
+++ b/spec/build/bsps/tstnorfs.yml
@@ -0,0 +1,22 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+actions:
+- set-test-state:
+ mrfsfserror: exclude
+ mrfsfsfpathconf: exclude
+ mrfsfslink: exclude
+ mrfsfspatheval: exclude
+ mrfsfspermission: exclude
+ mrfsfsrdwr: exclude
+ mrfsfsrename: exclude
+ mrfsfsscandir01: exclude
+ mrfsfssymlink: exclude
+ mrfsfstime: exclude
+build-type: option
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+default: null
+default-by-variant: []
+description: ''
+enabled-by: true
+links: []
+type: build
diff --git a/spec/build/bsps/tstreqtick.yml b/spec/build/bsps/tstreqtick.yml
new file mode 100644
index 0000000000..e3ff8389b3
--- /dev/null
+++ b/spec/build/bsps/tstreqtick.yml
@@ -0,0 +1,59 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+actions:
+- set-test-state:
+ cpuuse: exclude
+ psx07: exclude
+ psx09: exclude
+ psx10: exclude
+ psx11: exclude
+ psxcancel01: exclude
+ psxgetrusage01: exclude
+ psxintrcritical01: exclude
+ psxsignal01: exclude
+ psxsignal02: exclude
+ psxspin01: exclude
+ psxtime: exclude
+ psxtimes01: exclude
+ sp04: exclude
+ sp14: exclude
+ sp19: exclude
+ sp35: exclude
+ sp38: exclude
+ sp44: exclude
+ sp69: exclude
+ spcbssched02: exclude
+ spcbssched03: exclude
+ spcontext01: exclude
+ spcpucounter01: exclude
+ spedfsched03: exclude
+ spintrcritical01: exclude
+ spintrcritical02: exclude
+ spintrcritical03: exclude
+ spintrcritical04: exclude
+ spintrcritical05: exclude
+ spintrcritical06: exclude
+ spintrcritical07: exclude
+ spintrcritical08: exclude
+ spintrcritical09: exclude
+ spintrcritical10: exclude
+ spintrcritical11: exclude
+ spintrcritical12: exclude
+ spintrcritical13: exclude
+ spintrcritical14: exclude
+ spintrcritical15: exclude
+ spintrcritical16: exclude
+ spintrcritical17: exclude
+ spintrcritical18: exclude
+ spintrcritical19: exclude
+ spintrcritical20: exclude
+ spnsext01: exclude
+ spqreslib: exclude
+build-type: option
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+default: null
+default-by-variant: []
+description: ''
+enabled-by: true
+links: []
+type: build
diff --git a/spec/build/bsps/tstsmallmem.yml b/spec/build/bsps/tstsmallmem.yml
new file mode 100644
index 0000000000..0c329d6b22
--- /dev/null
+++ b/spec/build/bsps/tstsmallmem.yml
@@ -0,0 +1,129 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+actions:
+- set-test-state:
+ flashdisk01: exclude
+ fsdosfsname01: exclude
+ linpack: exclude
+ psxconfig01: exclude
+ psxusleep: exclude
+ record02: exclude
+ sp47: exclude
+ spstkalloc02: exclude
+ validation-0: exclude
+- set-value: -DPER_ALLOCATION=10
+- append-test-cppflags: sp71
+- set-value: -DMAXIMUM_DISTRIBUTION=10
+- append-test-cppflags: tmck
+- set-value: -DOPERATION_COUNT=3
+- append-test-cppflags: psxtmbarrier01
+- append-test-cppflags: psxtmbarrier02
+- append-test-cppflags: psxtmbarrier03
+- append-test-cppflags: psxtmbarrier04
+- append-test-cppflags: psxtmbarrierattr01
+- append-test-cppflags: psxtmcleanup01
+- append-test-cppflags: psxtmclocknanosleep01
+- append-test-cppflags: psxtmclocknanosleep02
+- append-test-cppflags: psxtmclocknanosleep03
+- append-test-cppflags: psxtmcond01
+- append-test-cppflags: psxtmcond02
+- append-test-cppflags: psxtmcond03
+- append-test-cppflags: psxtmcond04
+- append-test-cppflags: psxtmcond05
+- append-test-cppflags: psxtmcond06
+- append-test-cppflags: psxtmcond07
+- append-test-cppflags: psxtmcond08
+- append-test-cppflags: psxtmcond09
+- append-test-cppflags: psxtmcond10
+- append-test-cppflags: psxtmkey01
+- append-test-cppflags: psxtmkey02
+- append-test-cppflags: psxtmmq01
+- append-test-cppflags: psxtmmqrcvblock01
+- append-test-cppflags: psxtmmqrcvblock02
+- append-test-cppflags: psxtmmutex01
+- append-test-cppflags: psxtmmutex02
+- append-test-cppflags: psxtmmutex03
+- append-test-cppflags: psxtmmutex04
+- append-test-cppflags: psxtmmutex05
+- append-test-cppflags: psxtmmutex06
+- append-test-cppflags: psxtmmutex07
+- append-test-cppflags: psxtmmutexattr01
+- append-test-cppflags: psxtmnanosleep01
+- append-test-cppflags: psxtmnanosleep02
+- append-test-cppflags: psxtmonce01
+- append-test-cppflags: psxtmrwlock01
+- append-test-cppflags: psxtmrwlock02
+- append-test-cppflags: psxtmrwlock03
+- append-test-cppflags: psxtmrwlock04
+- append-test-cppflags: psxtmrwlock05
+- append-test-cppflags: psxtmrwlock06
+- append-test-cppflags: psxtmrwlock07
+- append-test-cppflags: psxtmsem01
+- append-test-cppflags: psxtmsem02
+- append-test-cppflags: psxtmsem03
+- append-test-cppflags: psxtmsem04
+- append-test-cppflags: psxtmsem05
+- append-test-cppflags: psxtmsleep01
+- append-test-cppflags: psxtmsleep02
+- append-test-cppflags: psxtmthread01
+- append-test-cppflags: psxtmthread02
+- append-test-cppflags: psxtmthread03
+- append-test-cppflags: psxtmthread04
+- append-test-cppflags: psxtmthread05
+- append-test-cppflags: psxtmthread06
+- append-test-cppflags: psxtmthreadattr01
+- append-test-cppflags: tm01
+- append-test-cppflags: tm02
+- append-test-cppflags: tm03
+- append-test-cppflags: tm04
+- append-test-cppflags: tm05
+- append-test-cppflags: tm06
+- append-test-cppflags: tm07
+- append-test-cppflags: tm08
+- append-test-cppflags: tm09
+- append-test-cppflags: tm10
+- append-test-cppflags: tm11
+- append-test-cppflags: tm12
+- append-test-cppflags: tm13
+- append-test-cppflags: tm14
+- append-test-cppflags: tm15
+- append-test-cppflags: tm16
+- append-test-cppflags: tm17
+- append-test-cppflags: tm18
+- append-test-cppflags: tm19
+- append-test-cppflags: tm20
+- append-test-cppflags: tm21
+- append-test-cppflags: tm22
+- append-test-cppflags: tm23
+- append-test-cppflags: tm24
+- append-test-cppflags: tm25
+- append-test-cppflags: tm26
+- append-test-cppflags: tm27
+- append-test-cppflags: tm28
+- append-test-cppflags: tm29
+- append-test-cppflags: tm30
+- append-test-cppflags: tm31
+- append-test-cppflags: tm32
+- append-test-cppflags: tm33
+- append-test-cppflags: tm34
+- append-test-cppflags: tm35
+- append-test-cppflags: tm36
+- append-test-cppflags: tmck
+- append-test-cppflags: tmcontext01
+- append-test-cppflags: tmfine01
+- append-test-cppflags: tmonetoone
+- append-test-cppflags: tmtimer01
+build-type: option
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+default: null
+default-by-variant: []
+description: ''
+enabled-by: true
+links:
+- role: build-dependency
+ uid: tstnoiconv
+- role: build-dependency
+ uid: tstnojffs2
+- role: build-dependency
+ uid: tstnolibdl
+type: build
diff --git a/spec/build/bsps/v850/gdbv850sim/abi.yml b/spec/build/bsps/v850/gdbv850sim/abi.yml
new file mode 100644
index 0000000000..7defa55c80
--- /dev/null
+++ b/spec/build/bsps/v850/gdbv850sim/abi.yml
@@ -0,0 +1,37 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+actions:
+- get-string: null
+- split: null
+- env-append: null
+build-type: option
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+default:
+- -mv850
+default-by-variant:
+- value:
+ - -mv850es
+ variants:
+ - v850/v850essim
+- value:
+ - -mv850e
+ variants:
+ - v850/v850esim
+- value:
+ - -mv850e2v3
+ variants:
+ - v850/v850e2v3sim
+- value:
+ - -mv850e2
+ variants:
+ - v850/v850e2sim
+- value:
+ - -mv850e1
+ variants:
+ - v850/v850e1sim
+description: |
+ ABI flags
+enabled-by: true
+links: []
+name: ABI_FLAGS
+type: build
diff --git a/spec/build/bsps/v850/gdbv850sim/bspv850e1sim.yml b/spec/build/bsps/v850/gdbv850sim/bspv850e1sim.yml
new file mode 100644
index 0000000000..b33b5d32f6
--- /dev/null
+++ b/spec/build/bsps/v850/gdbv850sim/bspv850e1sim.yml
@@ -0,0 +1,21 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+arch: v850
+bsp: v850e1sim
+build-type: bsp
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+enabled-by: true
+family: gdbv850sim
+includes: []
+install: []
+links:
+- role: build-dependency
+ uid: ../../opto2
+- role: build-dependency
+ uid: ../../tstreqtick
+- role: build-dependency
+ uid: grp
+source: []
+type: build
diff --git a/spec/build/bsps/v850/gdbv850sim/bspv850e2sim.yml b/spec/build/bsps/v850/gdbv850sim/bspv850e2sim.yml
new file mode 100644
index 0000000000..e9db30bea6
--- /dev/null
+++ b/spec/build/bsps/v850/gdbv850sim/bspv850e2sim.yml
@@ -0,0 +1,21 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+arch: v850
+bsp: v850e2sim
+build-type: bsp
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+enabled-by: true
+family: gdbv850sim
+includes: []
+install: []
+links:
+- role: build-dependency
+ uid: ../../opto2
+- role: build-dependency
+ uid: ../../tstreqtick
+- role: build-dependency
+ uid: grp
+source: []
+type: build
diff --git a/spec/build/bsps/v850/gdbv850sim/bspv850e2v3sim.yml b/spec/build/bsps/v850/gdbv850sim/bspv850e2v3sim.yml
new file mode 100644
index 0000000000..acc439b720
--- /dev/null
+++ b/spec/build/bsps/v850/gdbv850sim/bspv850e2v3sim.yml
@@ -0,0 +1,21 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+arch: v850
+bsp: v850e2v3sim
+build-type: bsp
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+enabled-by: true
+family: gdbv850sim
+includes: []
+install: []
+links:
+- role: build-dependency
+ uid: ../../opto2
+- role: build-dependency
+ uid: ../../tstreqtick
+- role: build-dependency
+ uid: grp
+source: []
+type: build
diff --git a/spec/build/bsps/v850/gdbv850sim/bspv850esim.yml b/spec/build/bsps/v850/gdbv850sim/bspv850esim.yml
new file mode 100644
index 0000000000..d6418536b3
--- /dev/null
+++ b/spec/build/bsps/v850/gdbv850sim/bspv850esim.yml
@@ -0,0 +1,21 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+arch: v850
+bsp: v850esim
+build-type: bsp
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+enabled-by: true
+family: gdbv850sim
+includes: []
+install: []
+links:
+- role: build-dependency
+ uid: ../../opto2
+- role: build-dependency
+ uid: ../../tstreqtick
+- role: build-dependency
+ uid: grp
+source: []
+type: build
diff --git a/spec/build/bsps/v850/gdbv850sim/bspv850essim.yml b/spec/build/bsps/v850/gdbv850sim/bspv850essim.yml
new file mode 100644
index 0000000000..5916a1ca6f
--- /dev/null
+++ b/spec/build/bsps/v850/gdbv850sim/bspv850essim.yml
@@ -0,0 +1,21 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+arch: v850
+bsp: v850essim
+build-type: bsp
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+enabled-by: true
+family: gdbv850sim
+includes: []
+install: []
+links:
+- role: build-dependency
+ uid: ../../opto2
+- role: build-dependency
+ uid: ../../tstreqtick
+- role: build-dependency
+ uid: grp
+source: []
+type: build
diff --git a/spec/build/bsps/v850/gdbv850sim/bspv850sim.yml b/spec/build/bsps/v850/gdbv850sim/bspv850sim.yml
new file mode 100644
index 0000000000..3288b8e63f
--- /dev/null
+++ b/spec/build/bsps/v850/gdbv850sim/bspv850sim.yml
@@ -0,0 +1,21 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+arch: v850
+bsp: v850sim
+build-type: bsp
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+enabled-by: true
+family: gdbv850sim
+includes: []
+install: []
+links:
+- role: build-dependency
+ uid: ../../opto2
+- role: build-dependency
+ uid: ../../tstreqtick
+- role: build-dependency
+ uid: grp
+source: []
+type: build
diff --git a/spec/build/bsps/v850/gdbv850sim/grp.yml b/spec/build/bsps/v850/gdbv850sim/grp.yml
new file mode 100644
index 0000000000..1c31b7abe3
--- /dev/null
+++ b/spec/build/bsps/v850/gdbv850sim/grp.yml
@@ -0,0 +1,24 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: group
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+enabled-by: true
+includes: []
+install: []
+ldflags: []
+links:
+- role: build-dependency
+ uid: ../../obj
+- role: build-dependency
+ uid: ../../objirqdflt
+- role: build-dependency
+ uid: abi
+- role: build-dependency
+ uid: obj
+- role: build-dependency
+ uid: start
+- role: build-dependency
+ uid: ../../bspopts
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/bsps/v850/gdbv850sim/obj.yml b/spec/build/bsps/v850/gdbv850sim/obj.yml
new file mode 100644
index 0000000000..384c23542e
--- /dev/null
+++ b/spec/build/bsps/v850/gdbv850sim/obj.yml
@@ -0,0 +1,37 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: objects
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by: true
+includes: []
+install:
+- destination: ${BSP_INCLUDEDIR}
+ source:
+ - bsps/v850/gdbv850sim/include/bsp.h
+ - bsps/v850/gdbv850sim/include/tm27.h
+- destination: ${BSP_INCLUDEDIR}/bsp
+ source:
+ - bsps/v850/gdbv850sim/include/bsp/irq.h
+ - bsps/v850/gdbv850sim/include/bsp/syscall.h
+- destination: ${BSP_LIBDIR}
+ source:
+ - bsps/v850/gdbv850sim/start/linkcmds
+links: []
+source:
+- bsps/shared/cache/nocache.c
+- bsps/shared/dev/btimer/btimer-stub.c
+- bsps/shared/dev/clock/clock-simidle.c
+- bsps/shared/dev/getentropy/getentropy-cpucounter.c
+- bsps/shared/dev/serial/console-polled.c
+- bsps/shared/start/bspfatal-default.c
+- bsps/shared/start/bspgetworkarea-default.c
+- bsps/shared/start/bspstart-empty.c
+- bsps/shared/start/sbrk.c
+- bsps/v850/gdbv850sim/console/console-io.c
+- bsps/v850/gdbv850sim/start/bspreset.c
+- bsps/v850/gdbv850sim/start/trap.S
+- bsps/v850/shared/start/crt1.c
+type: build
diff --git a/spec/build/bsps/v850/gdbv850sim/start.yml b/spec/build/bsps/v850/gdbv850sim/start.yml
new file mode 100644
index 0000000000..d1ffc46527
--- /dev/null
+++ b/spec/build/bsps/v850/gdbv850sim/start.yml
@@ -0,0 +1,14 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+asflags: []
+build-type: start-file
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+enabled-by: true
+includes: []
+install-path: ${BSP_LIBDIR}
+links: []
+source:
+- bsps/v850/gdbv850sim/start/start.S
+target: start.o
+type: build
diff --git a/spec/build/bsps/x86_64/amd64/abi.yml b/spec/build/bsps/x86_64/amd64/abi.yml
new file mode 100644
index 0000000000..ca5a815c24
--- /dev/null
+++ b/spec/build/bsps/x86_64/amd64/abi.yml
@@ -0,0 +1,19 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+actions:
+- get-string: null
+- split: null
+- env-append: null
+build-type: option
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+default:
+- -mno-red-zone
+- -mcmodel=large
+- -Werror=return-type
+default-by-variant: []
+description: |
+ ABI flags
+enabled-by: true
+links: []
+name: ABI_FLAGS
+type: build
diff --git a/spec/build/bsps/x86_64/amd64/bspamd64.yml b/spec/build/bsps/x86_64/amd64/bspamd64.yml
new file mode 100644
index 0000000000..f11beb15c3
--- /dev/null
+++ b/spec/build/bsps/x86_64/amd64/bspamd64.yml
@@ -0,0 +1,57 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+arch: x86_64
+bsp: amd64
+build-type: bsp
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+enabled-by: true
+family: amd64
+includes: []
+install:
+- destination: ${BSP_INCLUDEDIR}
+ source:
+ - bsps/x86_64/amd64/include/apic.h
+ - bsps/x86_64/amd64/include/bsp.h
+ - bsps/x86_64/amd64/include/clock.h
+ - bsps/x86_64/amd64/include/pic.h
+ - bsps/x86_64/amd64/include/start.h
+ - bsps/x86_64/amd64/include/tm27.h
+- destination: ${BSP_LIBDIR}
+ source:
+ - bsps/x86_64/amd64/start/linkcmds
+links:
+- role: build-dependency
+ uid: ../../obj
+- role: build-dependency
+ uid: ../../objirq
+- role: build-dependency
+ uid: ../../opto2
+- role: build-dependency
+ uid: abi
+- role: build-dependency
+ uid: start
+- role: build-dependency
+ uid: ../grp
+- role: build-dependency
+ uid: ../../bspopts
+source:
+- bsps/shared/cache/nocache.c
+- bsps/shared/dev/btimer/btimer-stub.c
+- bsps/shared/dev/getentropy/getentropy-cpucounter.c
+- bsps/shared/dev/serial/console-termios-init.c
+- bsps/shared/dev/serial/console-termios.c
+- bsps/shared/irq/irq-default-handler.c
+- bsps/shared/start/bspfatal-default.c
+- bsps/shared/start/bspgetworkarea-default.c
+- bsps/shared/start/bspreset-empty.c
+- bsps/shared/start/sbrk.c
+- bsps/x86_64/amd64/clock/clock.c
+- bsps/x86_64/amd64/console/console.c
+- bsps/x86_64/amd64/interrupts/idt.c
+- bsps/x86_64/amd64/interrupts/isr_handler.S
+- bsps/x86_64/amd64/interrupts/pic.c
+- bsps/x86_64/amd64/start/bspstart.c
+- bsps/x86_64/amd64/start/page.c
+type: build
diff --git a/spec/build/bsps/x86_64/amd64/start.yml b/spec/build/bsps/x86_64/amd64/start.yml
new file mode 100644
index 0000000000..3687f53f5b
--- /dev/null
+++ b/spec/build/bsps/x86_64/amd64/start.yml
@@ -0,0 +1,14 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+asflags: []
+build-type: start-file
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+enabled-by: true
+includes: []
+install-path: ${BSP_LIBDIR}
+links: []
+source:
+- bsps/x86_64/amd64/start/start.S
+target: start.o
+type: build
diff --git a/spec/build/bsps/x86_64/grp.yml b/spec/build/bsps/x86_64/grp.yml
new file mode 100644
index 0000000000..376bab2393
--- /dev/null
+++ b/spec/build/bsps/x86_64/grp.yml
@@ -0,0 +1,18 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: group
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+enabled-by: true
+includes: []
+install:
+- destination: ${BSP_INCLUDEDIR}/bsp
+ source:
+ - bsps/x86_64/include/bsp/irq.h
+- destination: ${BSP_INCLUDEDIR}/libcpu
+ source:
+ - bsps/x86_64/include/libcpu/page.h
+ldflags: []
+links: []
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/cpukit/cfgattrgetaff.yml b/spec/build/cpukit/cfgattrgetaff.yml
new file mode 100644
index 0000000000..d909a7ad81
--- /dev/null
+++ b/spec/build/cpukit/cfgattrgetaff.yml
@@ -0,0 +1,14 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+actions:
+- set-value: true
+- define-condition: null
+build-type: option
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+default: null
+default-by-variant: []
+description: ''
+enabled-by: true
+links: []
+name: HAVE_DECL_PTHREAD_ATTR_GETAFFINITY_NP
+type: build
diff --git a/spec/build/cpukit/cfgattrgetgrdsz.yml b/spec/build/cpukit/cfgattrgetgrdsz.yml
new file mode 100644
index 0000000000..e25c7d7d32
--- /dev/null
+++ b/spec/build/cpukit/cfgattrgetgrdsz.yml
@@ -0,0 +1,14 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+actions:
+- set-value: true
+- define-condition: null
+build-type: option
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+default: null
+default-by-variant: []
+description: ''
+enabled-by: true
+links: []
+name: HAVE_DECL_PTHREAD_ATTR_GETGUARDSIZE
+type: build
diff --git a/spec/build/cpukit/cfgattrgetstack.yml b/spec/build/cpukit/cfgattrgetstack.yml
new file mode 100644
index 0000000000..f0ac46a3c0
--- /dev/null
+++ b/spec/build/cpukit/cfgattrgetstack.yml
@@ -0,0 +1,14 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+actions:
+- set-value: true
+- define-condition: null
+build-type: option
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+default: null
+default-by-variant: []
+description: ''
+enabled-by: true
+links: []
+name: HAVE_DECL_PTHREAD_ATTR_GETSTACK
+type: build
diff --git a/spec/build/cpukit/cfgattrsetaff.yml b/spec/build/cpukit/cfgattrsetaff.yml
new file mode 100644
index 0000000000..9da99651df
--- /dev/null
+++ b/spec/build/cpukit/cfgattrsetaff.yml
@@ -0,0 +1,14 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+actions:
+- set-value: true
+- define-condition: null
+build-type: option
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+default: null
+default-by-variant: []
+description: ''
+enabled-by: true
+links: []
+name: HAVE_DECL_PTHREAD_ATTR_SETAFFINITY_NP
+type: build
diff --git a/spec/build/cpukit/cfgattrsetgrdsz.yml b/spec/build/cpukit/cfgattrsetgrdsz.yml
new file mode 100644
index 0000000000..7f2108a54e
--- /dev/null
+++ b/spec/build/cpukit/cfgattrsetgrdsz.yml
@@ -0,0 +1,14 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+actions:
+- set-value: true
+- define-condition: null
+build-type: option
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+default: null
+default-by-variant: []
+description: ''
+enabled-by: true
+links: []
+name: HAVE_DECL_PTHREAD_ATTR_SETGUARDSIZE
+type: build
diff --git a/spec/build/cpukit/cfgattrsetstack.yml b/spec/build/cpukit/cfgattrsetstack.yml
new file mode 100644
index 0000000000..6e5e8e1674
--- /dev/null
+++ b/spec/build/cpukit/cfgattrsetstack.yml
@@ -0,0 +1,14 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+actions:
+- set-value: true
+- define-condition: null
+build-type: option
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+default: null
+default-by-variant: []
+description: ''
+enabled-by: true
+links: []
+name: HAVE_DECL_PTHREAD_ATTR_SETSTACK
+type: build
diff --git a/spec/build/cpukit/cfgcfghdr.yml b/spec/build/cpukit/cfgcfghdr.yml
new file mode 100644
index 0000000000..efcf15ffd6
--- /dev/null
+++ b/spec/build/cpukit/cfgcfghdr.yml
@@ -0,0 +1,14 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+actions:
+- set-value: -DHAVE_CONFIG_H=1
+- env-append: CPPFLAGS
+build-type: option
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+default: null
+default-by-variant: []
+description: ''
+enabled-by: true
+links: []
+name: HAVE_CONFIG_H
+type: build
diff --git a/spec/build/cpukit/cfgcleanupctx.yml b/spec/build/cpukit/cfgcleanupctx.yml
new file mode 100644
index 0000000000..3f0d1a8e67
--- /dev/null
+++ b/spec/build/cpukit/cfgcleanupctx.yml
@@ -0,0 +1,14 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+actions:
+- set-value: true
+- define-condition: null
+build-type: option
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+default: null
+default-by-variant: []
+description: ''
+enabled-by: true
+links: []
+name: HAVE_STRUCT__PTHREAD_CLEANUP_CONTEXT
+type: build
diff --git a/spec/build/cpukit/cfggetaff.yml b/spec/build/cpukit/cfggetaff.yml
new file mode 100644
index 0000000000..b8c8f1ab06
--- /dev/null
+++ b/spec/build/cpukit/cfggetaff.yml
@@ -0,0 +1,14 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+actions:
+- set-value: true
+- define-condition: null
+build-type: option
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+default: null
+default-by-variant: []
+description: ''
+enabled-by: true
+links: []
+name: HAVE_DECL_PTHREAD_GETAFFINITY_NP
+type: build
diff --git a/spec/build/cpukit/cfggetattr.yml b/spec/build/cpukit/cfggetattr.yml
new file mode 100644
index 0000000000..fcfc3bcedc
--- /dev/null
+++ b/spec/build/cpukit/cfggetattr.yml
@@ -0,0 +1,14 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+actions:
+- set-value: true
+- define-condition: null
+build-type: option
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+default: null
+default-by-variant: []
+description: ''
+enabled-by: true
+links: []
+name: HAVE_DECL_PTHREAD_GETATTR_NP
+type: build
diff --git a/spec/build/cpukit/cfghdr.yml b/spec/build/cpukit/cfghdr.yml
new file mode 100644
index 0000000000..8106a3e227
--- /dev/null
+++ b/spec/build/cpukit/cfghdr.yml
@@ -0,0 +1,69 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: config-header
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+enabled-by: true
+guard: ''
+include-headers: []
+install-path: null
+links:
+- role: build-dependency
+ uid: cfgattrgetaff
+- role: build-dependency
+ uid: cfgattrgetgrdsz
+- role: build-dependency
+ uid: cfgattrgetstack
+- role: build-dependency
+ uid: cfgattrsetaff
+- role: build-dependency
+ uid: cfgattrsetgrdsz
+- role: build-dependency
+ uid: cfgattrsetstack
+- role: build-dependency
+ uid: cfgcfghdr
+- role: build-dependency
+ uid: cfgcleanupctx
+- role: build-dependency
+ uid: cfggetaff
+- role: build-dependency
+ uid: cfggetattr
+- role: build-dependency
+ uid: cfginttypes
+- role: build-dependency
+ uid: cfgmemory
+- role: build-dependency
+ uid: cfgnewlib
+- role: build-dependency
+ uid: cfgpmtxceilcnst
+- role: build-dependency
+ uid: cfgprionode
+- role: build-dependency
+ uid: cfgpshdprmcnst
+- role: build-dependency
+ uid: cfgrcmd
+- role: build-dependency
+ uid: cfgsetaff
+- role: build-dependency
+ uid: cfgstdatomic
+- role: build-dependency
+ uid: cfgstdint
+- role: build-dependency
+ uid: cfgstdlib
+- role: build-dependency
+ uid: cfgstring
+- role: build-dependency
+ uid: cfgstrings
+- role: build-dependency
+ uid: cfgsysstat
+- role: build-dependency
+ uid: cfgsystypes
+- role: build-dependency
+ uid: cfgszoff
+- role: build-dependency
+ uid: cfgszsize
+- role: build-dependency
+ uid: cfgsztime
+- role: build-dependency
+ uid: cfgunistd
+target: cpukit/include/config.h
+type: build
diff --git a/spec/build/cpukit/cfginttypes.yml b/spec/build/cpukit/cfginttypes.yml
new file mode 100644
index 0000000000..baa25af685
--- /dev/null
+++ b/spec/build/cpukit/cfginttypes.yml
@@ -0,0 +1,14 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+actions:
+- set-value: true
+- define-condition: null
+build-type: option
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+default: null
+default-by-variant: []
+description: ''
+enabled-by: true
+links: []
+name: HAVE_INTTYPES_H
+type: build
diff --git a/spec/build/cpukit/cfgmemory.yml b/spec/build/cpukit/cfgmemory.yml
new file mode 100644
index 0000000000..633d98d0cc
--- /dev/null
+++ b/spec/build/cpukit/cfgmemory.yml
@@ -0,0 +1,14 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+actions:
+- set-value: true
+- define-condition: null
+build-type: option
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+default: null
+default-by-variant: []
+description: ''
+enabled-by: true
+links: []
+name: HAVE_MEMORY_H
+type: build
diff --git a/spec/build/cpukit/cfgnewlib.yml b/spec/build/cpukit/cfgnewlib.yml
new file mode 100644
index 0000000000..d2ebadc808
--- /dev/null
+++ b/spec/build/cpukit/cfgnewlib.yml
@@ -0,0 +1,14 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+actions:
+- set-value: true
+- define-condition: null
+build-type: option
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+default: null
+default-by-variant: []
+description: ''
+enabled-by: RTEMS_NEWLIB
+links: []
+name: RTEMS_NEWLIB
+type: build
diff --git a/spec/build/cpukit/cfgpmtxceilcnst.yml b/spec/build/cpukit/cfgpmtxceilcnst.yml
new file mode 100644
index 0000000000..0baff35782
--- /dev/null
+++ b/spec/build/cpukit/cfgpmtxceilcnst.yml
@@ -0,0 +1,14 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+actions:
+- set-value: /**/
+- define-unquoted: null
+build-type: option
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+default: null
+default-by-variant: []
+description: ''
+enabled-by: true
+links: []
+name: HAVE_PTHREAD_MUTEX_GETCEILING_CONST
+type: build
diff --git a/spec/build/cpukit/cfgprionode.yml b/spec/build/cpukit/cfgprionode.yml
new file mode 100644
index 0000000000..e26ce4d970
--- /dev/null
+++ b/spec/build/cpukit/cfgprionode.yml
@@ -0,0 +1,14 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+actions:
+- set-value: true
+- define-condition: null
+build-type: option
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+default: null
+default-by-variant: []
+description: ''
+enabled-by: true
+links: []
+name: HAVE_STRUCT__PRIORITY_NODE
+type: build
diff --git a/spec/build/cpukit/cfgpshdprmcnst.yml b/spec/build/cpukit/cfgpshdprmcnst.yml
new file mode 100644
index 0000000000..04fa53d142
--- /dev/null
+++ b/spec/build/cpukit/cfgpshdprmcnst.yml
@@ -0,0 +1,14 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+actions:
+- set-value: /**/
+- define-unquoted: null
+build-type: option
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+default: null
+default-by-variant: []
+description: ''
+enabled-by: true
+links: []
+name: HAVE_PTHREAD_SETSCHEDPARAM_CONST
+type: build
diff --git a/spec/build/cpukit/cfgrcmd.yml b/spec/build/cpukit/cfgrcmd.yml
new file mode 100644
index 0000000000..f65980cbbb
--- /dev/null
+++ b/spec/build/cpukit/cfgrcmd.yml
@@ -0,0 +1,14 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+actions:
+- set-value: true
+- define-condition: null
+build-type: option
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+default: null
+default-by-variant: []
+description: ''
+enabled-by: true
+links: []
+name: HAVE_DECL_RCMD
+type: build
diff --git a/spec/build/cpukit/cfgsetaff.yml b/spec/build/cpukit/cfgsetaff.yml
new file mode 100644
index 0000000000..04a5f48e2c
--- /dev/null
+++ b/spec/build/cpukit/cfgsetaff.yml
@@ -0,0 +1,14 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+actions:
+- set-value: true
+- define-condition: null
+build-type: option
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+default: null
+default-by-variant: []
+description: ''
+enabled-by: true
+links: []
+name: HAVE_DECL_PTHREAD_SETAFFINITY_NP
+type: build
diff --git a/spec/build/cpukit/cfgstdatomic.yml b/spec/build/cpukit/cfgstdatomic.yml
new file mode 100644
index 0000000000..caa724a85e
--- /dev/null
+++ b/spec/build/cpukit/cfgstdatomic.yml
@@ -0,0 +1,14 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+actions:
+- set-value: true
+- define-condition: null
+build-type: option
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+default: null
+default-by-variant: []
+description: ''
+enabled-by: true
+links: []
+name: HAVE_STDATOMIC_H
+type: build
diff --git a/spec/build/cpukit/cfgstdint.yml b/spec/build/cpukit/cfgstdint.yml
new file mode 100644
index 0000000000..da6ee92d36
--- /dev/null
+++ b/spec/build/cpukit/cfgstdint.yml
@@ -0,0 +1,14 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+actions:
+- set-value: true
+- define-condition: null
+build-type: option
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+default: null
+default-by-variant: []
+description: ''
+enabled-by: true
+links: []
+name: HAVE_STDINT_H
+type: build
diff --git a/spec/build/cpukit/cfgstdlib.yml b/spec/build/cpukit/cfgstdlib.yml
new file mode 100644
index 0000000000..70ba02ab58
--- /dev/null
+++ b/spec/build/cpukit/cfgstdlib.yml
@@ -0,0 +1,14 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+actions:
+- set-value: true
+- define-condition: null
+build-type: option
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+default: null
+default-by-variant: []
+description: ''
+enabled-by: true
+links: []
+name: HAVE_STDLIB_H
+type: build
diff --git a/spec/build/cpukit/cfgstring.yml b/spec/build/cpukit/cfgstring.yml
new file mode 100644
index 0000000000..ebd444d539
--- /dev/null
+++ b/spec/build/cpukit/cfgstring.yml
@@ -0,0 +1,14 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+actions:
+- set-value: true
+- define-condition: null
+build-type: option
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+default: null
+default-by-variant: []
+description: ''
+enabled-by: true
+links: []
+name: HAVE_STRING_H
+type: build
diff --git a/spec/build/cpukit/cfgstrings.yml b/spec/build/cpukit/cfgstrings.yml
new file mode 100644
index 0000000000..4d202d90c9
--- /dev/null
+++ b/spec/build/cpukit/cfgstrings.yml
@@ -0,0 +1,14 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+actions:
+- set-value: true
+- define-condition: null
+build-type: option
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+default: null
+default-by-variant: []
+description: ''
+enabled-by: true
+links: []
+name: HAVE_STRINGS_H
+type: build
diff --git a/spec/build/cpukit/cfgsysstat.yml b/spec/build/cpukit/cfgsysstat.yml
new file mode 100644
index 0000000000..394618ff71
--- /dev/null
+++ b/spec/build/cpukit/cfgsysstat.yml
@@ -0,0 +1,14 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+actions:
+- set-value: true
+- define-condition: null
+build-type: option
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+default: null
+default-by-variant: []
+description: ''
+enabled-by: true
+links: []
+name: HAVE_SYS_STAT_H
+type: build
diff --git a/spec/build/cpukit/cfgsystypes.yml b/spec/build/cpukit/cfgsystypes.yml
new file mode 100644
index 0000000000..89494a4edc
--- /dev/null
+++ b/spec/build/cpukit/cfgsystypes.yml
@@ -0,0 +1,14 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+actions:
+- set-value: true
+- define-condition: null
+build-type: option
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+default: null
+default-by-variant: []
+description: ''
+enabled-by: true
+links: []
+name: HAVE_SYS_TYPES_H
+type: build
diff --git a/spec/build/cpukit/cfgszoff.yml b/spec/build/cpukit/cfgszoff.yml
new file mode 100644
index 0000000000..edd8861d2e
--- /dev/null
+++ b/spec/build/cpukit/cfgszoff.yml
@@ -0,0 +1,15 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+actions:
+- set-value: ${__RTEMS_SIZEOF_OFF_T__}
+- substitute: null
+- define-unquoted: null
+build-type: option
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+default: null
+default-by-variant: []
+description: ''
+enabled-by: true
+links: []
+name: SIZEOF_OFF_T
+type: build
diff --git a/spec/build/cpukit/cfgszsize.yml b/spec/build/cpukit/cfgszsize.yml
new file mode 100644
index 0000000000..84926d8e70
--- /dev/null
+++ b/spec/build/cpukit/cfgszsize.yml
@@ -0,0 +1,14 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+actions:
+- set-value: __SIZEOF_SIZE_T__
+- define-unquoted: null
+build-type: option
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+default: null
+default-by-variant: []
+description: ''
+enabled-by: true
+links: []
+name: SIZEOF_SIZE_T
+type: build
diff --git a/spec/build/cpukit/cfgsztime.yml b/spec/build/cpukit/cfgsztime.yml
new file mode 100644
index 0000000000..449eee7699
--- /dev/null
+++ b/spec/build/cpukit/cfgsztime.yml
@@ -0,0 +1,15 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+actions:
+- set-value: ${__RTEMS_SIZEOF_TIME_T__}
+- substitute: null
+- define-unquoted: null
+build-type: option
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+default: null
+default-by-variant: []
+description: ''
+enabled-by: true
+links: []
+name: SIZEOF_TIME_T
+type: build
diff --git a/spec/build/cpukit/cfgunistd.yml b/spec/build/cpukit/cfgunistd.yml
new file mode 100644
index 0000000000..c48ea77b8e
--- /dev/null
+++ b/spec/build/cpukit/cfgunistd.yml
@@ -0,0 +1,14 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+actions:
+- set-value: true
+- define-condition: null
+build-type: option
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+default: null
+default-by-variant: []
+description: ''
+enabled-by: true
+links: []
+name: HAVE_UNISTD_H
+type: build
diff --git a/spec/build/cpukit/cpuarm.yml b/spec/build/cpukit/cpuarm.yml
new file mode 100644
index 0000000000..6bbbb08c36
--- /dev/null
+++ b/spec/build/cpukit/cpuarm.yml
@@ -0,0 +1,62 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: objects
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by:
+- arm
+includes: []
+install:
+- destination: ${BSP_INCLUDEDIR}/libcpu
+ source:
+ - cpukit/score/cpu/arm/include/libcpu/arm-cp15.h
+- destination: ${BSP_INCLUDEDIR}/machine
+ source:
+ - cpukit/score/cpu/arm/include/machine/elf_machdep.h
+- destination: ${BSP_INCLUDEDIR}/rtems
+ source:
+ - cpukit/score/cpu/arm/include/rtems/asm.h
+- destination: ${BSP_INCLUDEDIR}/rtems/score
+ source:
+ - cpukit/score/cpu/arm/include/rtems/score/arm.h
+ - cpukit/score/cpu/arm/include/rtems/score/armv4.h
+ - cpukit/score/cpu/arm/include/rtems/score/armv7m.h
+ - cpukit/score/cpu/arm/include/rtems/score/cpu.h
+ - cpukit/score/cpu/arm/include/rtems/score/cpu_asm.h
+ - cpukit/score/cpu/arm/include/rtems/score/cpuatomic.h
+ - cpukit/score/cpu/arm/include/rtems/score/cpuimpl.h
+ - cpukit/score/cpu/arm/include/rtems/score/paravirt.h
+links: []
+source:
+- cpukit/score/cpu/arm/__aeabi_read_tp.c
+- cpukit/score/cpu/arm/arm-context-validate.S
+- cpukit/score/cpu/arm/arm-context-volatile-clobber.S
+- cpukit/score/cpu/arm/arm_exc_abort.S
+- cpukit/score/cpu/arm/arm-exception-default.c
+- cpukit/score/cpu/arm/arm-exception-frame-print.c
+- cpukit/score/cpu/arm/arm_exc_interrupt.S
+- cpukit/score/cpu/arm/armv4-exception-default.S
+- cpukit/score/cpu/arm/armv4-sync-synchronize.c
+- cpukit/score/cpu/arm/armv7m-context-initialize.c
+- cpukit/score/cpu/arm/armv7m-context-restore.c
+- cpukit/score/cpu/arm/armv7m-context-switch.c
+- cpukit/score/cpu/arm/armv7m-exception-default.c
+- cpukit/score/cpu/arm/armv7m-exception-handler-get.c
+- cpukit/score/cpu/arm/armv7m-exception-handler-set.c
+- cpukit/score/cpu/arm/armv7m-exception-priority-get.c
+- cpukit/score/cpu/arm/armv7m-exception-priority-handler.c
+- cpukit/score/cpu/arm/armv7m-exception-priority-set.c
+- cpukit/score/cpu/arm/armv7m-initialize.c
+- cpukit/score/cpu/arm/armv7m-isr-dispatch.c
+- cpukit/score/cpu/arm/armv7m-isr-enter-leave.c
+- cpukit/score/cpu/arm/armv7m-isr-level-get.c
+- cpukit/score/cpu/arm/armv7m-isr-level-set.c
+- cpukit/score/cpu/arm/armv7m-isr-vector-install.c
+- cpukit/score/cpu/arm/armv7m-multitasking-start-stop.c
+- cpukit/score/cpu/arm/armv7-thread-idle.c
+- cpukit/score/cpu/arm/cpu_asm.S
+- cpukit/score/cpu/arm/cpu.c
+- cpukit/score/cpu/arm/__tls_get_addr.c
+type: build
diff --git a/spec/build/cpukit/cpubfin.yml b/spec/build/cpukit/cpubfin.yml
new file mode 100644
index 0000000000..69698ba67d
--- /dev/null
+++ b/spec/build/cpukit/cpubfin.yml
@@ -0,0 +1,37 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: objects
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by:
+- bfin
+includes: []
+install:
+- destination: ${BSP_INCLUDEDIR}/machine
+ source:
+ - cpukit/score/cpu/bfin/include/machine/elf_machdep.h
+- destination: ${BSP_INCLUDEDIR}/rtems
+ source:
+ - cpukit/score/cpu/bfin/include/rtems/asm.h
+- destination: ${BSP_INCLUDEDIR}/rtems/bfin
+ source:
+ - cpukit/score/cpu/bfin/include/rtems/bfin/bf52x.h
+ - cpukit/score/cpu/bfin/include/rtems/bfin/bf533.h
+ - cpukit/score/cpu/bfin/include/rtems/bfin/bfin.h
+- destination: ${BSP_INCLUDEDIR}/rtems/score
+ source:
+ - cpukit/score/cpu/bfin/include/rtems/score/bfin.h
+ - cpukit/score/cpu/bfin/include/rtems/score/cpu.h
+ - cpukit/score/cpu/bfin/include/rtems/score/cpu_asm.h
+ - cpukit/score/cpu/bfin/include/rtems/score/cpuatomic.h
+ - cpukit/score/cpu/bfin/include/rtems/score/cpuimpl.h
+links: []
+source:
+- cpukit/score/cpu/bfin/bfin-exception-frame-print.c
+- cpukit/score/cpu/bfin/cpu_asm.S
+- cpukit/score/cpu/bfin/cpu.c
+- cpukit/score/cpu/no_cpu/cpucounterfrequency.c
+- cpukit/score/cpu/no_cpu/cpucounterread.c
+type: build
diff --git a/spec/build/cpukit/cpui386.yml b/spec/build/cpukit/cpui386.yml
new file mode 100644
index 0000000000..d24f2622b3
--- /dev/null
+++ b/spec/build/cpukit/cpui386.yml
@@ -0,0 +1,35 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: objects
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by:
+- i386
+includes: []
+install:
+- destination: ${BSP_INCLUDEDIR}/machine
+ source:
+ - cpukit/score/cpu/i386/include/machine/elf_machdep.h
+- destination: ${BSP_INCLUDEDIR}/rtems
+ source:
+ - cpukit/score/cpu/i386/include/rtems/asm.h
+- destination: ${BSP_INCLUDEDIR}/rtems/score
+ source:
+ - cpukit/score/cpu/i386/include/rtems/score/cpu.h
+ - cpukit/score/cpu/i386/include/rtems/score/cpuatomic.h
+ - cpukit/score/cpu/i386/include/rtems/score/cpuimpl.h
+ - cpukit/score/cpu/i386/include/rtems/score/i386.h
+ - cpukit/score/cpu/i386/include/rtems/score/idtr.h
+ - cpukit/score/cpu/i386/include/rtems/score/interrupts.h
+ - cpukit/score/cpu/i386/include/rtems/score/paravirt.h
+ - cpukit/score/cpu/i386/include/rtems/score/registers.h
+links: []
+source:
+- cpukit/score/cpu/i386/cpu_asm.S
+- cpukit/score/cpu/i386/cpu.c
+- cpukit/score/cpu/no_cpu/cpucounterfrequency.c
+- cpukit/score/cpu/no_cpu/cpucounterread.c
+- cpukit/score/cpu/no_cpu/cpuidle.c
+type: build
diff --git a/spec/build/cpukit/cpulm32.yml b/spec/build/cpukit/cpulm32.yml
new file mode 100644
index 0000000000..b9d1c0facb
--- /dev/null
+++ b/spec/build/cpukit/cpulm32.yml
@@ -0,0 +1,33 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: objects
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by:
+- lm32
+includes: []
+install:
+- destination: ${BSP_INCLUDEDIR}/machine
+ source:
+ - cpukit/score/cpu/lm32/include/machine/elf_machdep.h
+- destination: ${BSP_INCLUDEDIR}/rtems
+ source:
+ - cpukit/score/cpu/lm32/include/rtems/asm.h
+- destination: ${BSP_INCLUDEDIR}/rtems/score
+ source:
+ - cpukit/score/cpu/lm32/include/rtems/score/cpu.h
+ - cpukit/score/cpu/lm32/include/rtems/score/cpu_asm.h
+ - cpukit/score/cpu/lm32/include/rtems/score/cpuatomic.h
+ - cpukit/score/cpu/lm32/include/rtems/score/cpuimpl.h
+ - cpukit/score/cpu/lm32/include/rtems/score/lm32.h
+links: []
+source:
+- cpukit/score/cpu/lm32/cpu_asm.S
+- cpukit/score/cpu/lm32/cpu.c
+- cpukit/score/cpu/lm32/irq.c
+- cpukit/score/cpu/lm32/lm32-exception-frame-print.c
+- cpukit/score/cpu/no_cpu/cpucounterfrequency.c
+- cpukit/score/cpu/no_cpu/cpucounterread.c
+type: build
diff --git a/spec/build/cpukit/cpum68k.yml b/spec/build/cpukit/cpum68k.yml
new file mode 100644
index 0000000000..b6eb630078
--- /dev/null
+++ b/spec/build/cpukit/cpum68k.yml
@@ -0,0 +1,38 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: objects
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by:
+- m68k
+includes: []
+install:
+- destination: ${BSP_INCLUDEDIR}/machine
+ source:
+ - cpukit/score/cpu/m68k/include/machine/elf_machdep.h
+- destination: ${BSP_INCLUDEDIR}/rtems
+ source:
+ - cpukit/score/cpu/m68k/include/rtems/asm.h
+- destination: ${BSP_INCLUDEDIR}/rtems/m68k
+ source:
+ - cpukit/score/cpu/m68k/include/rtems/m68k/m68302.h
+ - cpukit/score/cpu/m68k/include/rtems/m68k/m68360.h
+ - cpukit/score/cpu/m68k/include/rtems/m68k/qsm.h
+ - cpukit/score/cpu/m68k/include/rtems/m68k/sim.h
+- destination: ${BSP_INCLUDEDIR}/rtems/score
+ source:
+ - cpukit/score/cpu/m68k/include/rtems/score/cpu.h
+ - cpukit/score/cpu/m68k/include/rtems/score/cpuatomic.h
+ - cpukit/score/cpu/m68k/include/rtems/score/cpuimpl.h
+ - cpukit/score/cpu/m68k/include/rtems/score/m68k.h
+links: []
+source:
+- cpukit/score/cpu/m68k/cpu_asm.S
+- cpukit/score/cpu/m68k/cpu.c
+- cpukit/score/cpu/m68k/m68k-exception-frame-print.c
+- cpukit/score/cpu/m68k/__m68k_read_tp.c
+- cpukit/score/cpu/no_cpu/cpucounterfrequency.c
+- cpukit/score/cpu/no_cpu/cpucounterread.c
+type: build
diff --git a/spec/build/cpukit/cpumips.yml b/spec/build/cpukit/cpumips.yml
new file mode 100644
index 0000000000..c9d5509804
--- /dev/null
+++ b/spec/build/cpukit/cpumips.yml
@@ -0,0 +1,34 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: objects
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by:
+- mips
+includes: []
+install:
+- destination: ${BSP_INCLUDEDIR}/machine
+ source:
+ - cpukit/score/cpu/mips/include/machine/elf_machdep.h
+- destination: ${BSP_INCLUDEDIR}/rtems
+ source:
+ - cpukit/score/cpu/mips/include/rtems/asm.h
+- destination: ${BSP_INCLUDEDIR}/rtems/mips
+ source:
+ - cpukit/score/cpu/mips/include/rtems/mips/idtcpu.h
+ - cpukit/score/cpu/mips/include/rtems/mips/iregdef.h
+- destination: ${BSP_INCLUDEDIR}/rtems/score
+ source:
+ - cpukit/score/cpu/mips/include/rtems/score/cpu.h
+ - cpukit/score/cpu/mips/include/rtems/score/cpuatomic.h
+ - cpukit/score/cpu/mips/include/rtems/score/cpuimpl.h
+ - cpukit/score/cpu/mips/include/rtems/score/mips.h
+links: []
+source:
+- cpukit/score/cpu/mips/cpu_asm.S
+- cpukit/score/cpu/mips/cpu.c
+- cpukit/score/cpu/no_cpu/cpucounterfrequency.c
+- cpukit/score/cpu/no_cpu/cpucounterread.c
+type: build
diff --git a/spec/build/cpukit/cpumoxie.yml b/spec/build/cpukit/cpumoxie.yml
new file mode 100644
index 0000000000..42a45155ec
--- /dev/null
+++ b/spec/build/cpukit/cpumoxie.yml
@@ -0,0 +1,32 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: objects
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by:
+- moxie
+includes: []
+install:
+- destination: ${BSP_INCLUDEDIR}/machine
+ source:
+ - cpukit/score/cpu/moxie/include/machine/elf_machdep.h
+- destination: ${BSP_INCLUDEDIR}/rtems
+ source:
+ - cpukit/score/cpu/moxie/include/rtems/asm.h
+- destination: ${BSP_INCLUDEDIR}/rtems/score
+ source:
+ - cpukit/score/cpu/moxie/include/rtems/score/cpu.h
+ - cpukit/score/cpu/moxie/include/rtems/score/cpuatomic.h
+ - cpukit/score/cpu/moxie/include/rtems/score/cpuimpl.h
+ - cpukit/score/cpu/moxie/include/rtems/score/moxie.h
+links: []
+source:
+- cpukit/score/cpu/moxie/cpu_asm.S
+- cpukit/score/cpu/moxie/cpu.c
+- cpukit/score/cpu/moxie/moxie-exception-frame-print.c
+- cpukit/score/cpu/no_cpu/cpucounterfrequency.c
+- cpukit/score/cpu/no_cpu/cpucounterread.c
+- cpukit/score/cpu/no_cpu/cpuidle.c
+type: build
diff --git a/spec/build/cpukit/cpunios2.yml b/spec/build/cpukit/cpunios2.yml
new file mode 100644
index 0000000000..4b43f852f9
--- /dev/null
+++ b/spec/build/cpukit/cpunios2.yml
@@ -0,0 +1,53 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: objects
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by:
+- nios2
+includes: []
+install:
+- destination: ${BSP_INCLUDEDIR}/machine
+ source:
+ - cpukit/score/cpu/nios2/include/machine/elf_machdep.h
+- destination: ${BSP_INCLUDEDIR}/rtems
+ source:
+ - cpukit/score/cpu/nios2/include/rtems/asm.h
+- destination: ${BSP_INCLUDEDIR}/rtems/score
+ source:
+ - cpukit/score/cpu/nios2/include/rtems/score/cpu.h
+ - cpukit/score/cpu/nios2/include/rtems/score/cpu_asm.h
+ - cpukit/score/cpu/nios2/include/rtems/score/cpuatomic.h
+ - cpukit/score/cpu/nios2/include/rtems/score/cpuimpl.h
+ - cpukit/score/cpu/nios2/include/rtems/score/nios2-count-zeros.h
+ - cpukit/score/cpu/nios2/include/rtems/score/nios2-utility.h
+ - cpukit/score/cpu/nios2/include/rtems/score/nios2.h
+links: []
+source:
+- cpukit/score/cpu/nios2/nios2-context-initialize.c
+- cpukit/score/cpu/nios2/nios2-context-switch.S
+- cpukit/score/cpu/nios2/nios2-context-validate.S
+- cpukit/score/cpu/nios2/nios2-context-volatile-clobber.S
+- cpukit/score/cpu/nios2/nios2-eic-il-low-level.S
+- cpukit/score/cpu/nios2/nios2-eic-rsie-low-level.S
+- cpukit/score/cpu/nios2/nios2-exception-frame-print.c
+- cpukit/score/cpu/nios2/nios2-fatal-halt.c
+- cpukit/score/cpu/nios2/nios2-iic-irq.c
+- cpukit/score/cpu/nios2/nios2-iic-low-level.S
+- cpukit/score/cpu/nios2/nios2-initialize.c
+- cpukit/score/cpu/nios2/nios2-isr-get-level.c
+- cpukit/score/cpu/nios2/nios2-isr-install-vector.c
+- cpukit/score/cpu/nios2/nios2-isr-is-in-progress.c
+- cpukit/score/cpu/nios2/nios2-isr-set-level.c
+- cpukit/score/cpu/nios2/nios2-mpu-add-region.c
+- cpukit/score/cpu/nios2/nios2-mpu-configuration.c
+- cpukit/score/cpu/nios2/nios2-mpu-descriptor.c
+- cpukit/score/cpu/nios2/nios2-mpu-disable-protected.c
+- cpukit/score/cpu/nios2/nios2-mpu-reset.c
+- cpukit/score/cpu/nios2/nios2-thread-dispatch-disabled.c
+- cpukit/score/cpu/no_cpu/cpucounterfrequency.c
+- cpukit/score/cpu/no_cpu/cpucounterread.c
+- cpukit/score/cpu/no_cpu/cpuidle.c
+type: build
diff --git a/spec/build/cpukit/cpuopts.yml b/spec/build/cpukit/cpuopts.yml
new file mode 100644
index 0000000000..5b72c6d8ca
--- /dev/null
+++ b/spec/build/cpukit/cpuopts.yml
@@ -0,0 +1,67 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: config-header
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+enabled-by: true
+guard: _RTEMS_SCORE_CPUOPTS_H
+include-headers: []
+install-path: ${BSP_INCLUDEDIR}/rtems/score
+links:
+- role: build-dependency
+ uid: optvermaj
+- role: build-dependency
+ uid: optvermin
+- role: build-dependency
+ uid: optverrev
+- role: build-dependency
+ uid: optgcc
+- role: build-dependency
+ uid: optarchbits
+- role: build-dependency
+ uid: optclang
+- role: build-dependency
+ uid: optarflags
+- role: build-dependency
+ uid: optwarn
+- role: build-dependency
+ uid: optwarncc
+- role: build-dependency
+ uid: optwarncxx
+- role: build-dependency
+ uid: optincludes
+- role: build-dependency
+ uid: optinstall
+- role: build-dependency
+ uid: optada
+- role: build-dependency
+ uid: optdebug
+- role: build-dependency
+ uid: optdrvmgr
+- role: build-dependency
+ uid: optmpci
+- role: build-dependency
+ uid: optnet
+- role: build-dependency
+ uid: optnewlib
+- role: build-dependency
+ uid: optparavirt
+- role: build-dependency
+ uid: optposix
+- role: build-dependency
+ uid: optsmp
+- role: build-dependency
+ uid: optlibdl
+- role: build-dependency
+ uid: optszblkcnt
+- role: build-dependency
+ uid: optszblksize
+- role: build-dependency
+ uid: optszmode
+- role: build-dependency
+ uid: optszoff
+- role: build-dependency
+ uid: optsztime
+- role: build-dependency
+ uid: optversion
+target: cpukit/include/rtems/score/cpuopts.h
+type: build
diff --git a/spec/build/cpukit/cpuor1k.yml b/spec/build/cpukit/cpuor1k.yml
new file mode 100644
index 0000000000..24045dc556
--- /dev/null
+++ b/spec/build/cpukit/cpuor1k.yml
@@ -0,0 +1,34 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: objects
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by:
+- or1k
+includes: []
+install:
+- destination: ${BSP_INCLUDEDIR}/rtems
+ source:
+ - cpukit/score/cpu/or1k/include/rtems/asm.h
+- destination: ${BSP_INCLUDEDIR}/rtems/score
+ source:
+ - cpukit/score/cpu/or1k/include/rtems/score/cpu.h
+ - cpukit/score/cpu/or1k/include/rtems/score/cpu_asm.h
+ - cpukit/score/cpu/or1k/include/rtems/score/cpuatomic.h
+ - cpukit/score/cpu/or1k/include/rtems/score/cpuimpl.h
+ - cpukit/score/cpu/or1k/include/rtems/score/or1k-utility.h
+ - cpukit/score/cpu/or1k/include/rtems/score/or1k.h
+links: []
+source:
+- cpukit/score/cpu/no_cpu/cpucounterfrequency.c
+- cpukit/score/cpu/or1k/cpu.c
+- cpukit/score/cpu/or1k/or1k-context-initialize.c
+- cpukit/score/cpu/or1k/or1k-context-switch.S
+- cpukit/score/cpu/or1k/or1k-context-validate.S
+- cpukit/score/cpu/or1k/or1k-context-volatile-clobber.S
+- cpukit/score/cpu/or1k/or1k-exception-default.c
+- cpukit/score/cpu/or1k/or1k-exception-frame-print.c
+- cpukit/score/cpu/or1k/or1k-exception-handler-low.S
+type: build
diff --git a/spec/build/cpukit/cpupowerpc.yml b/spec/build/cpukit/cpupowerpc.yml
new file mode 100644
index 0000000000..e2ffd90d86
--- /dev/null
+++ b/spec/build/cpukit/cpupowerpc.yml
@@ -0,0 +1,35 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: objects
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by:
+- powerpc
+includes: []
+install:
+- destination: ${BSP_INCLUDEDIR}/machine
+ source:
+ - cpukit/score/cpu/powerpc/include/machine/elf_machdep.h
+- destination: ${BSP_INCLUDEDIR}/rtems
+ source:
+ - cpukit/score/cpu/powerpc/include/rtems/asm.h
+- destination: ${BSP_INCLUDEDIR}/rtems/powerpc
+ source:
+ - cpukit/score/cpu/powerpc/include/rtems/powerpc/registers.h
+- destination: ${BSP_INCLUDEDIR}/rtems/score
+ source:
+ - cpukit/score/cpu/powerpc/include/rtems/score/cpu.h
+ - cpukit/score/cpu/powerpc/include/rtems/score/cpuatomic.h
+ - cpukit/score/cpu/powerpc/include/rtems/score/cpuimpl.h
+ - cpukit/score/cpu/powerpc/include/rtems/score/paravirt.h
+ - cpukit/score/cpu/powerpc/include/rtems/score/powerpc.h
+links: []
+source:
+- cpukit/score/cpu/no_cpu/cpuidle.c
+- cpukit/score/cpu/powerpc/cpu.c
+- cpukit/score/cpu/powerpc/ppc-context-validate.S
+- cpukit/score/cpu/powerpc/ppc-context-volatile-clobber.S
+- cpukit/score/cpu/powerpc/ppc-isr-disable-mask.S
+type: build
diff --git a/spec/build/cpukit/cpuriscv.yml b/spec/build/cpukit/cpuriscv.yml
new file mode 100644
index 0000000000..08ab96b3d2
--- /dev/null
+++ b/spec/build/cpukit/cpuriscv.yml
@@ -0,0 +1,37 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: objects
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by:
+- riscv
+includes: []
+install:
+- destination: ${BSP_INCLUDEDIR}/libcpu
+ source:
+ - cpukit/score/cpu/riscv/include/libcpu/access.h
+ - cpukit/score/cpu/riscv/include/libcpu/byteorder.h
+- destination: ${BSP_INCLUDEDIR}/rtems
+ source:
+ - cpukit/score/cpu/riscv/include/rtems/asm.h
+- destination: ${BSP_INCLUDEDIR}/rtems/score
+ source:
+ - cpukit/score/cpu/riscv/include/rtems/score/cpu.h
+ - cpukit/score/cpu/riscv/include/rtems/score/cpu_asm.h
+ - cpukit/score/cpu/riscv/include/rtems/score/cpuatomic.h
+ - cpukit/score/cpu/riscv/include/rtems/score/cpuimpl.h
+ - cpukit/score/cpu/riscv/include/rtems/score/riscv-utility.h
+ - cpukit/score/cpu/riscv/include/rtems/score/riscv.h
+links: []
+source:
+- cpukit/score/cpu/riscv/cpu.c
+- cpukit/score/cpu/riscv/riscv-exception-handler.S
+- cpukit/score/cpu/riscv/riscv-exception-frame-print.c
+- cpukit/score/cpu/riscv/riscv-context-switch.S
+- cpukit/score/cpu/riscv/riscv-context-initialize.c
+- cpukit/score/cpu/riscv/riscv-context-validate.S
+- cpukit/score/cpu/riscv/riscv-context-volatile-clobber.S
+- cpukit/score/cpu/riscv/riscv-counter.S
+type: build
diff --git a/spec/build/cpukit/cpush.yml b/spec/build/cpukit/cpush.yml
new file mode 100644
index 0000000000..cffba020a1
--- /dev/null
+++ b/spec/build/cpukit/cpush.yml
@@ -0,0 +1,30 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: objects
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by:
+- sh
+includes: []
+install:
+- destination: ${BSP_INCLUDEDIR}/rtems
+ source:
+ - cpukit/score/cpu/sh/include/rtems/asm.h
+- destination: ${BSP_INCLUDEDIR}/rtems/score
+ source:
+ - cpukit/score/cpu/sh/include/rtems/score/cpu.h
+ - cpukit/score/cpu/sh/include/rtems/score/cpuatomic.h
+ - cpukit/score/cpu/sh/include/rtems/score/cpuimpl.h
+ - cpukit/score/cpu/sh/include/rtems/score/sh.h
+ - cpukit/score/cpu/sh/include/rtems/score/sh_io.h
+links: []
+source:
+- cpukit/score/cpu/no_cpu/cpucounterfrequency.c
+- cpukit/score/cpu/no_cpu/cpucounterread.c
+- cpukit/score/cpu/no_cpu/cpuidle.c
+- cpukit/score/cpu/sh/context.c
+- cpukit/score/cpu/sh/cpu.c
+- cpukit/score/cpu/sh/sh-exception-frame-print.c
+type: build
diff --git a/spec/build/cpukit/cpusparc.yml b/spec/build/cpukit/cpusparc.yml
new file mode 100644
index 0000000000..c1f4d0720c
--- /dev/null
+++ b/spec/build/cpukit/cpusparc.yml
@@ -0,0 +1,41 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: objects
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by:
+- sparc
+includes: []
+install:
+- destination: ${BSP_INCLUDEDIR}/libcpu
+ source:
+ - cpukit/score/cpu/sparc/include/libcpu/access.h
+ - cpukit/score/cpu/sparc/include/libcpu/byteorder.h
+- destination: ${BSP_INCLUDEDIR}/machine
+ source:
+ - cpukit/score/cpu/sparc/include/machine/elf_machdep.h
+- destination: ${BSP_INCLUDEDIR}/rtems
+ source:
+ - cpukit/score/cpu/sparc/include/rtems/asm.h
+- destination: ${BSP_INCLUDEDIR}/rtems/score
+ source:
+ - cpukit/score/cpu/sparc/include/rtems/score/cpu.h
+ - cpukit/score/cpu/sparc/include/rtems/score/cpuatomic.h
+ - cpukit/score/cpu/sparc/include/rtems/score/cpuimpl.h
+ - cpukit/score/cpu/sparc/include/rtems/score/sparc.h
+ - cpukit/score/cpu/sparc/include/rtems/score/sparcimpl.h
+links: []
+source:
+- cpukit/score/cpu/no_cpu/cpuidle.c
+- cpukit/score/cpu/sparc/access_le.c
+- cpukit/score/cpu/sparc/cpu.c
+- cpukit/score/cpu/sparc/cpu_asm.S
+- cpukit/score/cpu/sparc/sparc-access.S
+- cpukit/score/cpu/sparc/sparc-context-validate.S
+- cpukit/score/cpu/sparc/sparc-context-volatile-clobber.S
+- cpukit/score/cpu/sparc/sparc-counter-asm.S
+- cpukit/score/cpu/sparc/syscall.S
+- cpukit/score/cpu/sparc/window.S
+type: build
diff --git a/spec/build/cpukit/cpusparc64.yml b/spec/build/cpukit/cpusparc64.yml
new file mode 100644
index 0000000000..687c0958e6
--- /dev/null
+++ b/spec/build/cpukit/cpusparc64.yml
@@ -0,0 +1,31 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: objects
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by:
+- sparc64
+includes: []
+install:
+- destination: ${BSP_INCLUDEDIR}/rtems
+ source:
+ - cpukit/score/cpu/sparc64/include/rtems/asm.h
+- destination: ${BSP_INCLUDEDIR}/rtems/score
+ source:
+ - cpukit/score/cpu/sparc64/include/rtems/score/cpu.h
+ - cpukit/score/cpu/sparc64/include/rtems/score/cpuatomic.h
+ - cpukit/score/cpu/sparc64/include/rtems/score/cpuimpl.h
+ - cpukit/score/cpu/sparc64/include/rtems/score/sparc64.h
+links: []
+source:
+- cpukit/score/cpu/no_cpu/cpucounterfrequency.c
+- cpukit/score/cpu/no_cpu/cpucounterread.c
+- cpukit/score/cpu/no_cpu/cpuidle.c
+- cpukit/score/cpu/sparc64/context.S
+- cpukit/score/cpu/sparc64/cpu.c
+- cpukit/score/cpu/sparc64/interrupt.S
+- cpukit/score/cpu/sparc64/sparc64-exception-frame-print.c
+- cpukit/score/cpu/sparc64/sparc64-syscall.S
+type: build
diff --git a/spec/build/cpukit/cpuv850.yml b/spec/build/cpukit/cpuv850.yml
new file mode 100644
index 0000000000..75f62b0d4a
--- /dev/null
+++ b/spec/build/cpukit/cpuv850.yml
@@ -0,0 +1,33 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: objects
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by:
+- v850
+includes: []
+install:
+- destination: ${BSP_INCLUDEDIR}/machine
+ source:
+ - cpukit/score/cpu/v850/include/machine/elf_machdep.h
+- destination: ${BSP_INCLUDEDIR}/rtems
+ source:
+ - cpukit/score/cpu/v850/include/rtems/asm.h
+- destination: ${BSP_INCLUDEDIR}/rtems/score
+ source:
+ - cpukit/score/cpu/v850/include/rtems/score/cpu.h
+ - cpukit/score/cpu/v850/include/rtems/score/cpu_asm.h
+ - cpukit/score/cpu/v850/include/rtems/score/cpuatomic.h
+ - cpukit/score/cpu/v850/include/rtems/score/cpuimpl.h
+ - cpukit/score/cpu/v850/include/rtems/score/v850.h
+links: []
+source:
+- cpukit/score/cpu/no_cpu/cpucounterfrequency.c
+- cpukit/score/cpu/no_cpu/cpucounterread.c
+- cpukit/score/cpu/no_cpu/cpuidle.c
+- cpukit/score/cpu/v850/cpu_asm.S
+- cpukit/score/cpu/v850/cpu.c
+- cpukit/score/cpu/v850/v850-exception-frame-print.c
+type: build
diff --git a/spec/build/cpukit/cpux8664.yml b/spec/build/cpukit/cpux8664.yml
new file mode 100644
index 0000000000..1268fca62d
--- /dev/null
+++ b/spec/build/cpukit/cpux8664.yml
@@ -0,0 +1,34 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: objects
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by:
+- x86_64
+includes: []
+install:
+- destination: ${BSP_INCLUDEDIR}/machine
+ source:
+ - cpukit/score/cpu/x86_64/include/machine/elf_machdep.h
+- destination: ${BSP_INCLUDEDIR}/rtems
+ source:
+ - cpukit/score/cpu/x86_64/include/rtems/asm.h
+- destination: ${BSP_INCLUDEDIR}/rtems/score
+ source:
+ - cpukit/score/cpu/x86_64/include/rtems/score/cpu.h
+ - cpukit/score/cpu/x86_64/include/rtems/score/cpu_asm.h
+ - cpukit/score/cpu/x86_64/include/rtems/score/cpuatomic.h
+ - cpukit/score/cpu/x86_64/include/rtems/score/cpuimpl.h
+ - cpukit/score/cpu/x86_64/include/rtems/score/idt.h
+ - cpukit/score/cpu/x86_64/include/rtems/score/x86_64.h
+links: []
+source:
+- cpukit/score/cpu/no_cpu/cpucounterfrequency.c
+- cpukit/score/cpu/no_cpu/cpucounterread.c
+- cpukit/score/cpu/no_cpu/cpuidle.c
+- cpukit/score/cpu/x86_64/cpu.c
+- cpukit/score/cpu/x86_64/x86_64-context-initialize.c
+- cpukit/score/cpu/x86_64/x86_64-context-switch.S
+type: build
diff --git a/spec/build/cpukit/grp.yml b/spec/build/cpukit/grp.yml
new file mode 100644
index 0000000000..3a285d03fc
--- /dev/null
+++ b/spec/build/cpukit/grp.yml
@@ -0,0 +1,42 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: group
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+enabled-by: true
+includes: []
+install: []
+ldflags: []
+links:
+- role: build-dependency
+ uid: cpuopts
+- role: build-dependency
+ uid: cfghdr
+- role: build-dependency
+ uid: libdebugger
+- role: build-dependency
+ uid: libftpd
+- role: build-dependency
+ uid: libftpfs
+- role: build-dependency
+ uid: libjffs2
+- role: build-dependency
+ uid: libmghttpd
+- role: build-dependency
+ uid: libnfs
+- role: build-dependency
+ uid: libpppd
+- role: build-dependency
+ uid: librtemscpu
+- role: build-dependency
+ uid: librtemsdfltcfg
+- role: build-dependency
+ uid: librtemstest
+- role: build-dependency
+ uid: libtelnetd
+- role: build-dependency
+ uid: libtftpfs
+- role: build-dependency
+ uid: libz
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/cpukit/libdebugger.yml b/spec/build/cpukit/libdebugger.yml
new file mode 100644
index 0000000000..f243e52b7a
--- /dev/null
+++ b/spec/build/cpukit/libdebugger.yml
@@ -0,0 +1,27 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: library
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by: true
+includes: []
+install: []
+install-path: ${BSP_LIBDIR}
+links:
+- role: build-dependency
+ uid: objdbgarm
+- role: build-dependency
+ uid: objdbgi386
+source:
+- cpukit/libdebugger/rtems-debugger-block.c
+- cpukit/libdebugger/rtems-debugger-bsp.c
+- cpukit/libdebugger/rtems-debugger-cmd.c
+- cpukit/libdebugger/rtems-debugger-remote.c
+- cpukit/libdebugger/rtems-debugger-remote-tcp.c
+- cpukit/libdebugger/rtems-debugger-server.c
+- cpukit/libdebugger/rtems-debugger-target.c
+- cpukit/libdebugger/rtems-debugger-threads.c
+target: debugger
+type: build
diff --git a/spec/build/cpukit/libftpd.yml b/spec/build/cpukit/libftpd.yml
new file mode 100644
index 0000000000..af75cca2cb
--- /dev/null
+++ b/spec/build/cpukit/libftpd.yml
@@ -0,0 +1,20 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: library
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by: true
+includes: []
+install:
+- destination: ${BSP_INCLUDEDIR}/rtems
+ source:
+ - cpukit/include/rtems/ftpd.h
+install-path: ${BSP_LIBDIR}
+links: []
+source:
+- cpukit/ftpd/ftpd.c
+- cpukit/ftpd/ftpd-init.c
+target: ftpd
+type: build
diff --git a/spec/build/cpukit/libftpfs.yml b/spec/build/cpukit/libftpfs.yml
new file mode 100644
index 0000000000..d32304fcf3
--- /dev/null
+++ b/spec/build/cpukit/libftpfs.yml
@@ -0,0 +1,19 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: library
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by: true
+includes: []
+install:
+- destination: ${BSP_INCLUDEDIR}/rtems
+ source:
+ - cpukit/include/rtems/ftpfs.h
+install-path: ${BSP_LIBDIR}
+links: []
+source:
+- cpukit/libnetworking/lib/ftpfs.c
+target: ftpfs
+type: build
diff --git a/spec/build/cpukit/libjffs2.yml b/spec/build/cpukit/libjffs2.yml
new file mode 100644
index 0000000000..bc57baa68b
--- /dev/null
+++ b/spec/build/cpukit/libjffs2.yml
@@ -0,0 +1,38 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: library
+cflags:
+- -Wno-pointer-sign
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by: true
+includes:
+- cpukit/libfs/src/jffs2/include
+install:
+- destination: ${BSP_INCLUDEDIR}/rtems
+ source:
+ - cpukit/include/rtems/jffs2.h
+install-path: ${BSP_LIBDIR}
+links: []
+source:
+- cpukit/libfs/src/jffs2/src/build.c
+- cpukit/libfs/src/jffs2/src/compat-crc32.c
+- cpukit/libfs/src/jffs2/src/compr.c
+- cpukit/libfs/src/jffs2/src/compr_rtime.c
+- cpukit/libfs/src/jffs2/src/compr_zlib.c
+- cpukit/libfs/src/jffs2/src/debug.c
+- cpukit/libfs/src/jffs2/src/dir-rtems.c
+- cpukit/libfs/src/jffs2/src/erase.c
+- cpukit/libfs/src/jffs2/src/flashio.c
+- cpukit/libfs/src/jffs2/src/fs-rtems.c
+- cpukit/libfs/src/jffs2/src/gc.c
+- cpukit/libfs/src/jffs2/src/malloc-rtems.c
+- cpukit/libfs/src/jffs2/src/nodelist.c
+- cpukit/libfs/src/jffs2/src/nodemgmt.c
+- cpukit/libfs/src/jffs2/src/read.c
+- cpukit/libfs/src/jffs2/src/readinode.c
+- cpukit/libfs/src/jffs2/src/scan.c
+- cpukit/libfs/src/jffs2/src/write.c
+target: jffs2
+type: build
diff --git a/spec/build/cpukit/libmghttpd.yml b/spec/build/cpukit/libmghttpd.yml
new file mode 100644
index 0000000000..959d1f5c25
--- /dev/null
+++ b/spec/build/cpukit/libmghttpd.yml
@@ -0,0 +1,19 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: library
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by: true
+includes: []
+install:
+- destination: ${BSP_INCLUDEDIR}/mghttpd
+ source:
+ - cpukit/include/mghttpd/mongoose.h
+install-path: ${BSP_LIBDIR}
+links: []
+source:
+- cpukit/mghttpd/mongoose.c
+target: mghttpd
+type: build
diff --git a/spec/build/cpukit/libnfs.yml b/spec/build/cpukit/libnfs.yml
new file mode 100644
index 0000000000..1607d4b340
--- /dev/null
+++ b/spec/build/cpukit/libnfs.yml
@@ -0,0 +1,23 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: library
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by:
+- RTEMS_NETWORKING
+includes:
+- cpukit/libnetworking
+install: []
+install-path: ${BSP_LIBDIR}
+links: []
+source:
+- cpukit/libfs/src/nfsclient/proto/mount_prot_xdr.c
+- cpukit/libfs/src/nfsclient/proto/nfs_prot_xdr.c
+- cpukit/libfs/src/nfsclient/src/nfs.c
+- cpukit/libfs/src/nfsclient/src/rpcio.c
+- cpukit/libfs/src/nfsclient/src/sock_mbuf.c
+- cpukit/libfs/src/nfsclient/src/xdr_mbuf.c
+target: nfs
+type: build
diff --git a/spec/build/cpukit/libpppd.yml b/spec/build/cpukit/libpppd.yml
new file mode 100644
index 0000000000..d67b93aef8
--- /dev/null
+++ b/spec/build/cpukit/libpppd.yml
@@ -0,0 +1,33 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: library
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by:
+- RTEMS_NETWORKING
+includes:
+- cpukit/libnetworking
+install: []
+install-path: ${BSP_LIBDIR}
+links: []
+source:
+- cpukit/pppd/auth.c
+- cpukit/pppd/ccp.c
+- cpukit/pppd/chap.c
+- cpukit/pppd/chap_ms.c
+- cpukit/pppd/chat.c
+- cpukit/pppd/demand.c
+- cpukit/pppd/fsm.c
+- cpukit/pppd/ipcp.c
+- cpukit/pppd/lcp.c
+- cpukit/pppd/magic.c
+- cpukit/pppd/options.c
+- cpukit/pppd/rtemsmain.c
+- cpukit/pppd/rtemspppd.c
+- cpukit/pppd/sys-rtems.c
+- cpukit/pppd/upap.c
+- cpukit/pppd/utils.c
+target: pppd
+type: build
diff --git a/spec/build/cpukit/librtemscpu.yml b/spec/build/cpukit/librtemscpu.yml
new file mode 100644
index 0000000000..e3606dbdc8
--- /dev/null
+++ b/spec/build/cpukit/librtemscpu.yml
@@ -0,0 +1,1577 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: library
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by: true
+includes: []
+install:
+- destination: ${BSP_INCLUDEDIR}
+ source:
+ - cpukit/include/aio.h
+ - cpukit/include/crypt.h
+ - cpukit/include/dlfcn.h
+ - cpukit/include/endian.h
+ - cpukit/include/fdt.h
+ - cpukit/include/libfdt.h
+ - cpukit/include/libfdt_env.h
+ - cpukit/include/link.h
+ - cpukit/include/link_elf.h
+ - cpukit/include/md4.h
+ - cpukit/include/md5.h
+ - cpukit/include/memory.h
+ - cpukit/include/mqueue.h
+ - cpukit/include/pci.h
+ - cpukit/include/poll.h
+ - cpukit/include/rtems.h
+ - cpukit/include/sha256.h
+ - cpukit/include/sha512.h
+ - cpukit/include/xz.h
+- destination: ${BSP_INCLUDEDIR}/arpa
+ source:
+ - cpukit/include/arpa/ftp.h
+- destination: ${BSP_INCLUDEDIR}/dev/i2c
+ source:
+ - cpukit/include/dev/i2c/eeprom.h
+ - cpukit/include/dev/i2c/fpga-i2c-slave.h
+ - cpukit/include/dev/i2c/gpio-nxp-pca9535.h
+ - cpukit/include/dev/i2c/i2c.h
+ - cpukit/include/dev/i2c/sensor-lm75a.h
+ - cpukit/include/dev/i2c/switch-nxp-pca9548a.h
+ - cpukit/include/dev/i2c/ti-ads-16bit-adc.h
+ - cpukit/include/dev/i2c/ti-lm25066a.h
+ - cpukit/include/dev/i2c/ti-tmp112.h
+ - cpukit/include/dev/i2c/xilinx-axi-i2c.h
+- destination: ${BSP_INCLUDEDIR}/dev/serial
+ source:
+ - cpukit/include/dev/serial/sc16is752.h
+- destination: ${BSP_INCLUDEDIR}/dev/spi
+ source:
+ - cpukit/include/dev/spi/spi.h
+- destination: ${BSP_INCLUDEDIR}/linux
+ source:
+ - cpukit/include/linux/i2c-dev.h
+ - cpukit/include/linux/i2c.h
+ - cpukit/include/linux/rbtree.h
+- destination: ${BSP_INCLUDEDIR}/linux/spi
+ source:
+ - cpukit/include/linux/spi/spidev.h
+- destination: ${BSP_INCLUDEDIR}/machine
+ source:
+ - cpukit/include/machine/_kernel_cpuset.h
+ - cpukit/include/machine/_kernel_in.h
+ - cpukit/include/machine/_kernel_in6.h
+ - cpukit/include/machine/_kernel_mman.h
+ - cpukit/include/machine/_kernel_param.h
+ - cpukit/include/machine/_kernel_time.h
+ - cpukit/include/machine/_kernel_types.h
+ - cpukit/include/machine/_kernel_uio.h
+ - cpukit/include/machine/_timecounter.h
+- destination: ${BSP_INCLUDEDIR}/rtems
+ source:
+ - cpukit/include/rtems/assoc.h
+ - cpukit/include/rtems/bdbuf.h
+ - cpukit/include/rtems/bdpart.h
+ - cpukit/include/rtems/blkdev.h
+ - cpukit/include/rtems/bsd.h
+ - cpukit/include/rtems/bspIo.h
+ - cpukit/include/rtems/bspcmdline.h
+ - cpukit/include/rtems/btimer.h
+ - cpukit/include/rtems/capture-cli.h
+ - cpukit/include/rtems/capture.h
+ - cpukit/include/rtems/captureimpl.h
+ - cpukit/include/rtems/cbs.h
+ - cpukit/include/rtems/chain.h
+ - cpukit/include/rtems/clockdrv.h
+ - cpukit/include/rtems/concat.h
+ - cpukit/include/rtems/confdefs.h
+ - cpukit/include/rtems/config.h
+ - cpukit/include/rtems/console.h
+ - cpukit/include/rtems/counter.h
+ - cpukit/include/rtems/cpuuse.h
+ - cpukit/include/rtems/deviceio.h
+ - cpukit/include/rtems/devnull.h
+ - cpukit/include/rtems/devzero.h
+ - cpukit/include/rtems/diskdevs.h
+ - cpukit/include/rtems/dosfs.h
+ - cpukit/include/rtems/dumpbuf.h
+ - cpukit/include/rtems/endian.h
+ - cpukit/include/rtems/error.h
+ - cpukit/include/rtems/extension.h
+ - cpukit/include/rtems/extensiondata.h
+ - cpukit/include/rtems/extensionimpl.h
+ - cpukit/include/rtems/fatal.h
+ - cpukit/include/rtems/fb.h
+ - cpukit/include/rtems/flashdisk.h
+ - cpukit/include/rtems/framebuffer.h
+ - cpukit/include/rtems/fs.h
+ - cpukit/include/rtems/fsmount.h
+ - cpukit/include/rtems/gxx_wrappers.h
+ - cpukit/include/rtems/ide_part_table.h
+ - cpukit/include/rtems/imfs.h
+ - cpukit/include/rtems/init.h
+ - cpukit/include/rtems/inttypes.h
+ - cpukit/include/rtems/io.h
+ - cpukit/include/rtems/ioimpl.h
+ - cpukit/include/rtems/iosupp.h
+ - cpukit/include/rtems/irq-extension.h
+ - cpukit/include/rtems/irq.h
+ - cpukit/include/rtems/jffs2.h
+ - cpukit/include/rtems/libcsupport.h
+ - cpukit/include/rtems/libi2c.h
+ - cpukit/include/rtems/libio.h
+ - cpukit/include/rtems/libio_.h
+ - cpukit/include/rtems/linkersets.h
+ - cpukit/include/rtems/malloc.h
+ - cpukit/include/rtems/media.h
+ - cpukit/include/rtems/monitor.h
+ - cpukit/include/rtems/mouse_parser.h
+ - cpukit/include/rtems/mptables.h
+ - cpukit/include/rtems/mw_uid.h
+ - cpukit/include/rtems/nvdisk-sram.h
+ - cpukit/include/rtems/nvdisk.h
+ - cpukit/include/rtems/passwd.h
+ - cpukit/include/rtems/pci.h
+ - cpukit/include/rtems/pipe.h
+ - cpukit/include/rtems/print.h
+ - cpukit/include/rtems/printer.h
+ - cpukit/include/rtems/profiling.h
+ - cpukit/include/rtems/pty.h
+ - cpukit/include/rtems/qreslib.h
+ - cpukit/include/rtems/ramdisk.h
+ - cpukit/include/rtems/rbheap.h
+ - cpukit/include/rtems/rbtree.h
+ - cpukit/include/rtems/record.h
+ - cpukit/include/rtems/recordclient.h
+ - cpukit/include/rtems/recorddata.h
+ - cpukit/include/rtems/recorddump.h
+ - cpukit/include/rtems/recordserver.h
+ - cpukit/include/rtems/ringbuf.h
+ - cpukit/include/rtems/rtc.h
+ - cpukit/include/rtems/rtems-debugger-remote-tcp.h
+ - cpukit/include/rtems/rtems-debugger.h
+ - cpukit/include/rtems/rtems-fdt-shell.h
+ - cpukit/include/rtems/rtems-fdt.h
+ - cpukit/include/rtems/rtems-rfs-format.h
+ - cpukit/include/rtems/rtems-rfs-shell.h
+ - cpukit/include/rtems/rtems-rfs.h
+ - cpukit/include/rtems/rtemsdialer.h
+ - cpukit/include/rtems/rtemspppd.h
+ - cpukit/include/rtems/scheduler.h
+ - cpukit/include/rtems/serdbg.h
+ - cpukit/include/rtems/serdbgcnf.h
+ - cpukit/include/rtems/serial_mouse.h
+ - cpukit/include/rtems/seterr.h
+ - cpukit/include/rtems/shell.h
+ - cpukit/include/rtems/shellconfig.h
+ - cpukit/include/rtems/sparse-disk.h
+ - cpukit/include/rtems/spurious.h
+ - cpukit/include/rtems/stackchk.h
+ - cpukit/include/rtems/status-checks.h
+ - cpukit/include/rtems/stdio-redirect.h
+ - cpukit/include/rtems/stringto.h
+ - cpukit/include/rtems/sysinit.h
+ - cpukit/include/rtems/termios_printk.h
+ - cpukit/include/rtems/termios_printk_cnf.h
+ - cpukit/include/rtems/termiostypes.h
+ - cpukit/include/rtems/test.h
+ - cpukit/include/rtems/test-info.h
+ - cpukit/include/rtems/thread.h
+ - cpukit/include/rtems/timecounter.h
+ - cpukit/include/rtems/timespec.h
+ - cpukit/include/rtems/tm27-default.h
+ - cpukit/include/rtems/tod.h
+ - cpukit/include/rtems/untar.h
+ - cpukit/include/rtems/userenv.h
+ - cpukit/include/rtems/version.h
+ - cpukit/include/rtems/vmeintr.h
+ - cpukit/include/rtems/watchdogdrv.h
+- destination: ${BSP_INCLUDEDIR}/rtems/confdefs
+ source:
+ - cpukit/include/rtems/confdefs/bdbuf.h
+ - cpukit/include/rtems/confdefs/bsp.h
+ - cpukit/include/rtems/confdefs/clock.h
+ - cpukit/include/rtems/confdefs/console.h
+ - cpukit/include/rtems/confdefs/extensions.h
+ - cpukit/include/rtems/confdefs/inittask.h
+ - cpukit/include/rtems/confdefs/initthread.h
+ - cpukit/include/rtems/confdefs/iodrivers.h
+ - cpukit/include/rtems/confdefs/libio.h
+ - cpukit/include/rtems/confdefs/libpci.h
+ - cpukit/include/rtems/confdefs/malloc.h
+ - cpukit/include/rtems/confdefs/mpci.h
+ - cpukit/include/rtems/confdefs/newlib.h
+ - cpukit/include/rtems/confdefs/objectsclassic.h
+ - cpukit/include/rtems/confdefs/objectsposix.h
+ - cpukit/include/rtems/confdefs/obsolete.h
+ - cpukit/include/rtems/confdefs/percpu.h
+ - cpukit/include/rtems/confdefs/scheduler.h
+ - cpukit/include/rtems/confdefs/threads.h
+ - cpukit/include/rtems/confdefs/unlimited.h
+ - cpukit/include/rtems/confdefs/wkspace.h
+ - cpukit/include/rtems/confdefs/wkspacesupport.h
+- destination: ${BSP_INCLUDEDIR}/rtems/debugger
+ source:
+ - cpukit/include/rtems/debugger/rtems-debugger-bsp.h
+ - cpukit/include/rtems/debugger/rtems-debugger-remote.h
+ - cpukit/include/rtems/debugger/rtems-debugger-server.h
+- destination: ${BSP_INCLUDEDIR}/rtems/posix
+ source:
+ - cpukit/include/rtems/posix/aio_misc.h
+ - cpukit/include/rtems/posix/barrierimpl.h
+ - cpukit/include/rtems/posix/condimpl.h
+ - cpukit/include/rtems/posix/key.h
+ - cpukit/include/rtems/posix/keyimpl.h
+ - cpukit/include/rtems/posix/mmanimpl.h
+ - cpukit/include/rtems/posix/mqueue.h
+ - cpukit/include/rtems/posix/mqueueimpl.h
+ - cpukit/include/rtems/posix/muteximpl.h
+ - cpukit/include/rtems/posix/posixapi.h
+ - cpukit/include/rtems/posix/priorityimpl.h
+ - cpukit/include/rtems/posix/psignal.h
+ - cpukit/include/rtems/posix/psignalimpl.h
+ - cpukit/include/rtems/posix/pthread.h
+ - cpukit/include/rtems/posix/pthreadattrimpl.h
+ - cpukit/include/rtems/posix/pthreadimpl.h
+ - cpukit/include/rtems/posix/rwlockimpl.h
+ - cpukit/include/rtems/posix/semaphore.h
+ - cpukit/include/rtems/posix/semaphoreimpl.h
+ - cpukit/include/rtems/posix/shm.h
+ - cpukit/include/rtems/posix/shmimpl.h
+ - cpukit/include/rtems/posix/sigset.h
+ - cpukit/include/rtems/posix/spinlockimpl.h
+ - cpukit/include/rtems/posix/threadsup.h
+ - cpukit/include/rtems/posix/timer.h
+ - cpukit/include/rtems/posix/timerimpl.h
+- destination: ${BSP_INCLUDEDIR}/rtems/rfs
+ source:
+ - cpukit/include/rtems/rfs/rtems-rfs-bitmaps.h
+ - cpukit/include/rtems/rfs/rtems-rfs-block-pos.h
+ - cpukit/include/rtems/rfs/rtems-rfs-block.h
+ - cpukit/include/rtems/rfs/rtems-rfs-buffer.h
+ - cpukit/include/rtems/rfs/rtems-rfs-data.h
+ - cpukit/include/rtems/rfs/rtems-rfs-dir-hash.h
+ - cpukit/include/rtems/rfs/rtems-rfs-dir.h
+ - cpukit/include/rtems/rfs/rtems-rfs-file-system-fwd.h
+ - cpukit/include/rtems/rfs/rtems-rfs-file-system.h
+ - cpukit/include/rtems/rfs/rtems-rfs-file.h
+ - cpukit/include/rtems/rfs/rtems-rfs-group.h
+ - cpukit/include/rtems/rfs/rtems-rfs-inode.h
+ - cpukit/include/rtems/rfs/rtems-rfs-link.h
+ - cpukit/include/rtems/rfs/rtems-rfs-mutex.h
+ - cpukit/include/rtems/rfs/rtems-rfs-trace.h
+- destination: ${BSP_INCLUDEDIR}/rtems/rtems
+ source:
+ - cpukit/include/rtems/rtems/asr.h
+ - cpukit/include/rtems/rtems/asrdata.h
+ - cpukit/include/rtems/rtems/asrimpl.h
+ - cpukit/include/rtems/rtems/attr.h
+ - cpukit/include/rtems/rtems/attrimpl.h
+ - cpukit/include/rtems/rtems/barrier.h
+ - cpukit/include/rtems/rtems/barrierdata.h
+ - cpukit/include/rtems/rtems/barrierimpl.h
+ - cpukit/include/rtems/rtems/cache.h
+ - cpukit/include/rtems/rtems/clock.h
+ - cpukit/include/rtems/rtems/config.h
+ - cpukit/include/rtems/rtems/dpmem.h
+ - cpukit/include/rtems/rtems/dpmemdata.h
+ - cpukit/include/rtems/rtems/dpmemimpl.h
+ - cpukit/include/rtems/rtems/event.h
+ - cpukit/include/rtems/rtems/eventdata.h
+ - cpukit/include/rtems/rtems/eventimpl.h
+ - cpukit/include/rtems/rtems/eventmp.h
+ - cpukit/include/rtems/rtems/intr.h
+ - cpukit/include/rtems/rtems/mainpage.h
+ - cpukit/include/rtems/rtems/message.h
+ - cpukit/include/rtems/rtems/messagedata.h
+ - cpukit/include/rtems/rtems/messageimpl.h
+ - cpukit/include/rtems/rtems/modes.h
+ - cpukit/include/rtems/rtems/modesimpl.h
+ - cpukit/include/rtems/rtems/mp.h
+ - cpukit/include/rtems/rtems/msgmp.h
+ - cpukit/include/rtems/rtems/object.h
+ - cpukit/include/rtems/rtems/objectimpl.h
+ - cpukit/include/rtems/rtems/options.h
+ - cpukit/include/rtems/rtems/optionsimpl.h
+ - cpukit/include/rtems/rtems/part.h
+ - cpukit/include/rtems/rtems/partdata.h
+ - cpukit/include/rtems/rtems/partimpl.h
+ - cpukit/include/rtems/rtems/partmp.h
+ - cpukit/include/rtems/rtems/ratemon.h
+ - cpukit/include/rtems/rtems/ratemondata.h
+ - cpukit/include/rtems/rtems/ratemonimpl.h
+ - cpukit/include/rtems/rtems/region.h
+ - cpukit/include/rtems/rtems/regiondata.h
+ - cpukit/include/rtems/rtems/regionimpl.h
+ - cpukit/include/rtems/rtems/sem.h
+ - cpukit/include/rtems/rtems/semdata.h
+ - cpukit/include/rtems/rtems/semimpl.h
+ - cpukit/include/rtems/rtems/semmp.h
+ - cpukit/include/rtems/rtems/signal.h
+ - cpukit/include/rtems/rtems/signalimpl.h
+ - cpukit/include/rtems/rtems/signalmp.h
+ - cpukit/include/rtems/rtems/status.h
+ - cpukit/include/rtems/rtems/statusimpl.h
+ - cpukit/include/rtems/rtems/support.h
+ - cpukit/include/rtems/rtems/taskmp.h
+ - cpukit/include/rtems/rtems/tasks.h
+ - cpukit/include/rtems/rtems/tasksdata.h
+ - cpukit/include/rtems/rtems/tasksimpl.h
+ - cpukit/include/rtems/rtems/timer.h
+ - cpukit/include/rtems/rtems/timerdata.h
+ - cpukit/include/rtems/rtems/timerimpl.h
+ - cpukit/include/rtems/rtems/types.h
+- destination: ${BSP_INCLUDEDIR}/rtems/score
+ source:
+ - cpukit/include/rtems/score/address.h
+ - cpukit/include/rtems/score/apimutex.h
+ - cpukit/include/rtems/score/assert.h
+ - cpukit/include/rtems/score/atomic.h
+ - cpukit/include/rtems/score/basedefs.h
+ - cpukit/include/rtems/score/chain.h
+ - cpukit/include/rtems/score/chainimpl.h
+ - cpukit/include/rtems/score/context.h
+ - cpukit/include/rtems/score/copyrt.h
+ - cpukit/include/rtems/score/corebarrier.h
+ - cpukit/include/rtems/score/corebarrierimpl.h
+ - cpukit/include/rtems/score/coremsg.h
+ - cpukit/include/rtems/score/coremsgimpl.h
+ - cpukit/include/rtems/score/coremutex.h
+ - cpukit/include/rtems/score/coremuteximpl.h
+ - cpukit/include/rtems/score/corerwlockimpl.h
+ - cpukit/include/rtems/score/coresem.h
+ - cpukit/include/rtems/score/coresemimpl.h
+ - cpukit/include/rtems/score/cpustdatomic.h
+ - cpukit/include/rtems/score/freechain.h
+ - cpukit/include/rtems/score/heap.h
+ - cpukit/include/rtems/score/heapimpl.h
+ - cpukit/include/rtems/score/heapinfo.h
+ - cpukit/include/rtems/score/interr.h
+ - cpukit/include/rtems/score/io.h
+ - cpukit/include/rtems/score/isr.h
+ - cpukit/include/rtems/score/isrlevel.h
+ - cpukit/include/rtems/score/isrlock.h
+ - cpukit/include/rtems/score/memory.h
+ - cpukit/include/rtems/score/mpci.h
+ - cpukit/include/rtems/score/mpciimpl.h
+ - cpukit/include/rtems/score/mppkt.h
+ - cpukit/include/rtems/score/mrsp.h
+ - cpukit/include/rtems/score/mrspimpl.h
+ - cpukit/include/rtems/score/muteximpl.h
+ - cpukit/include/rtems/score/object.h
+ - cpukit/include/rtems/score/objectdata.h
+ - cpukit/include/rtems/score/objectimpl.h
+ - cpukit/include/rtems/score/objectmp.h
+ - cpukit/include/rtems/score/onceimpl.h
+ - cpukit/include/rtems/score/percpu.h
+ - cpukit/include/rtems/score/percpudata.h
+ - cpukit/include/rtems/score/priority.h
+ - cpukit/include/rtems/score/prioritybitmap.h
+ - cpukit/include/rtems/score/prioritybitmapimpl.h
+ - cpukit/include/rtems/score/priorityimpl.h
+ - cpukit/include/rtems/score/processormask.h
+ - cpukit/include/rtems/score/profiling.h
+ - cpukit/include/rtems/score/protectedheap.h
+ - cpukit/include/rtems/score/rbtree.h
+ - cpukit/include/rtems/score/rbtreeimpl.h
+ - cpukit/include/rtems/score/scheduler.h
+ - cpukit/include/rtems/score/schedulercbs.h
+ - cpukit/include/rtems/score/schedulercbsimpl.h
+ - cpukit/include/rtems/score/scheduleredf.h
+ - cpukit/include/rtems/score/scheduleredfimpl.h
+ - cpukit/include/rtems/score/scheduleredfsmp.h
+ - cpukit/include/rtems/score/schedulerimpl.h
+ - cpukit/include/rtems/score/schedulernode.h
+ - cpukit/include/rtems/score/schedulernodeimpl.h
+ - cpukit/include/rtems/score/schedulerpriority.h
+ - cpukit/include/rtems/score/schedulerpriorityaffinitysmp.h
+ - cpukit/include/rtems/score/schedulerpriorityimpl.h
+ - cpukit/include/rtems/score/schedulerprioritysmp.h
+ - cpukit/include/rtems/score/schedulerprioritysmpimpl.h
+ - cpukit/include/rtems/score/schedulersimple.h
+ - cpukit/include/rtems/score/schedulersimpleimpl.h
+ - cpukit/include/rtems/score/schedulersimplesmp.h
+ - cpukit/include/rtems/score/schedulersmp.h
+ - cpukit/include/rtems/score/schedulersmpimpl.h
+ - cpukit/include/rtems/score/schedulerstrongapa.h
+ - cpukit/include/rtems/score/semaphoreimpl.h
+ - cpukit/include/rtems/score/smp.h
+ - cpukit/include/rtems/score/smpbarrier.h
+ - cpukit/include/rtems/score/smpimpl.h
+ - cpukit/include/rtems/score/smplock.h
+ - cpukit/include/rtems/score/smplockmcs.h
+ - cpukit/include/rtems/score/smplockseq.h
+ - cpukit/include/rtems/score/smplockstats.h
+ - cpukit/include/rtems/score/smplockticket.h
+ - cpukit/include/rtems/score/stack.h
+ - cpukit/include/rtems/score/stackimpl.h
+ - cpukit/include/rtems/score/states.h
+ - cpukit/include/rtems/score/statesimpl.h
+ - cpukit/include/rtems/score/status.h
+ - cpukit/include/rtems/score/sysstate.h
+ - cpukit/include/rtems/score/thread.h
+ - cpukit/include/rtems/score/threaddispatch.h
+ - cpukit/include/rtems/score/threadidledata.h
+ - cpukit/include/rtems/score/threadimpl.h
+ - cpukit/include/rtems/score/threadmp.h
+ - cpukit/include/rtems/score/threadq.h
+ - cpukit/include/rtems/score/threadqimpl.h
+ - cpukit/include/rtems/score/timecounter.h
+ - cpukit/include/rtems/score/timecounterimpl.h
+ - cpukit/include/rtems/score/timespec.h
+ - cpukit/include/rtems/score/timestamp.h
+ - cpukit/include/rtems/score/timestampimpl.h
+ - cpukit/include/rtems/score/tls.h
+ - cpukit/include/rtems/score/todimpl.h
+ - cpukit/include/rtems/score/userext.h
+ - cpukit/include/rtems/score/userextdata.h
+ - cpukit/include/rtems/score/userextimpl.h
+ - cpukit/include/rtems/score/watchdog.h
+ - cpukit/include/rtems/score/watchdogimpl.h
+ - cpukit/include/rtems/score/watchdogticks.h
+ - cpukit/include/rtems/score/wkspace.h
+ - cpukit/include/rtems/score/wkspacedata.h
+- destination: ${BSP_INCLUDEDIR}/rtems/trace
+ source:
+ - cpukit/include/rtems/trace/rtems-trace-buffer-vars.h
+- destination: ${BSP_INCLUDEDIR}/sys
+ source:
+ - cpukit/include/sys/_ffcounter.h
+ - cpukit/include/sys/cdefs_elf.h
+ - cpukit/include/sys/endian.h
+ - cpukit/include/sys/event.h
+ - cpukit/include/sys/exec_elf.h
+ - cpukit/include/sys/poll.h
+ - cpukit/include/sys/priority.h
+ - cpukit/include/sys/statvfs.h
+ - cpukit/include/sys/timeffc.h
+ - cpukit/include/sys/timepps.h
+ - cpukit/include/sys/timetc.h
+ - cpukit/include/sys/timex.h
+ - cpukit/include/sys/utsname.h
+- destination: ${BSP_INCLUDEDIR}/uuid
+ source:
+ - cpukit/include/uuid/uuid.h
+install-path: ${BSP_LIBDIR}
+links:
+- role: build-dependency
+ uid: cpuarm
+- role: build-dependency
+ uid: cpubfin
+- role: build-dependency
+ uid: cpui386
+- role: build-dependency
+ uid: cpulm32
+- role: build-dependency
+ uid: cpum68k
+- role: build-dependency
+ uid: cpumips
+- role: build-dependency
+ uid: cpumoxie
+- role: build-dependency
+ uid: cpunios2
+- role: build-dependency
+ uid: cpuor1k
+- role: build-dependency
+ uid: cpupowerpc
+- role: build-dependency
+ uid: cpuriscv
+- role: build-dependency
+ uid: cpush
+- role: build-dependency
+ uid: cpusparc
+- role: build-dependency
+ uid: cpusparc64
+- role: build-dependency
+ uid: cpuv850
+- role: build-dependency
+ uid: cpux8664
+- role: build-dependency
+ uid: objdl
+- role: build-dependency
+ uid: objdrvmgr
+- role: build-dependency
+ uid: objgnat
+- role: build-dependency
+ uid: objmpci
+- role: build-dependency
+ uid: objnet
+- role: build-dependency
+ uid: objpci
+- role: build-dependency
+ uid: objpsxsgnl
+- role: build-dependency
+ uid: objshell
+- role: build-dependency
+ uid: objsmp
+- role: build-dependency
+ uid: objutf8
+- role: build-dependency
+ uid: vckey
+source:
+- cpukit/dev/i2c/eeprom.c
+- cpukit/dev/i2c/fpga-i2c-slave.c
+- cpukit/dev/i2c/gpio-nxp-pca9535.c
+- cpukit/dev/i2c/i2c-bus.c
+- cpukit/dev/i2c/i2c-dev.c
+- cpukit/dev/i2c/sensor-lm75a.c
+- cpukit/dev/i2c/switch-nxp-pca9548a.c
+- cpukit/dev/i2c/ti-ads-16bit-adc.c
+- cpukit/dev/i2c/ti-lm25066a.c
+- cpukit/dev/i2c/ti-tmp112.c
+- cpukit/dev/i2c/xilinx-axi-i2c.c
+- cpukit/dev/serial/sc16is752.c
+- cpukit/dev/serial/sc16is752-spi.c
+- cpukit/dev/spi/spi-bus.c
+- cpukit/dtc/libfdt/fdt_addresses.c
+- cpukit/dtc/libfdt/fdt.c
+- cpukit/dtc/libfdt/fdt_empty_tree.c
+- cpukit/dtc/libfdt/fdt_ro.c
+- cpukit/dtc/libfdt/fdt_rw.c
+- cpukit/dtc/libfdt/fdt_strerror.c
+- cpukit/dtc/libfdt/fdt_sw.c
+- cpukit/dtc/libfdt/fdt_wip.c
+- cpukit/libblock/src/bdbuf.c
+- cpukit/libblock/src/bdpart-create.c
+- cpukit/libblock/src/bdpart-dump.c
+- cpukit/libblock/src/bdpart-mount.c
+- cpukit/libblock/src/bdpart-read.c
+- cpukit/libblock/src/bdpart-register.c
+- cpukit/libblock/src/bdpart-sort.c
+- cpukit/libblock/src/bdpart-write.c
+- cpukit/libblock/src/blkdev-blkstats.c
+- cpukit/libblock/src/blkdev.c
+- cpukit/libblock/src/blkdev-imfs.c
+- cpukit/libblock/src/blkdev-ioctl.c
+- cpukit/libblock/src/blkdev-ops.c
+- cpukit/libblock/src/blkdev-print-stats.c
+- cpukit/libblock/src/diskdevs.c
+- cpukit/libblock/src/diskdevs-init.c
+- cpukit/libblock/src/flashdisk.c
+- cpukit/libblock/src/ide_part_table.c
+- cpukit/libblock/src/media.c
+- cpukit/libblock/src/media-desc.c
+- cpukit/libblock/src/media-dev-ident.c
+- cpukit/libblock/src/media-path.c
+- cpukit/libblock/src/media-server.c
+- cpukit/libblock/src/nvdisk.c
+- cpukit/libblock/src/nvdisk-sram.c
+- cpukit/libblock/src/ramdisk-config.c
+- cpukit/libblock/src/ramdisk-driver.c
+- cpukit/libblock/src/ramdisk-init.c
+- cpukit/libblock/src/ramdisk-register.c
+- cpukit/libblock/src/sparse-disk.c
+- cpukit/libcrypt/crypt.c
+- cpukit/libcrypt/crypt-md5.c
+- cpukit/libcrypt/crypt-sha256.c
+- cpukit/libcrypt/crypt-sha512.c
+- cpukit/libcrypt/misc.c
+- cpukit/libcsupport/src/access.c
+- cpukit/libcsupport/src/alignedalloc.c
+- cpukit/libcsupport/src/arc4random_getentropy_fail.c
+- cpukit/libcsupport/src/__assert.c
+- cpukit/libcsupport/src/assoc32tostring.c
+- cpukit/libcsupport/src/assoclocalbyname.c
+- cpukit/libcsupport/src/assoclocalbyremotebitfield.c
+- cpukit/libcsupport/src/assoclocalbyremote.c
+- cpukit/libcsupport/src/assocnamebad.c
+- cpukit/libcsupport/src/assocnamebylocalbitfield.c
+- cpukit/libcsupport/src/assocnamebylocal.c
+- cpukit/libcsupport/src/assocnamebyremotebitfield.c
+- cpukit/libcsupport/src/assocnamebyremote.c
+- cpukit/libcsupport/src/assocptrbylocal.c
+- cpukit/libcsupport/src/assocptrbyname.c
+- cpukit/libcsupport/src/assocptrbyremote.c
+- cpukit/libcsupport/src/assocremotebylocalbitfield.c
+- cpukit/libcsupport/src/assocremotebylocal.c
+- cpukit/libcsupport/src/assocremotebyname.c
+- cpukit/libcsupport/src/assocthreadstatestostring.c
+- cpukit/libcsupport/src/base_fs.c
+- cpukit/libcsupport/src/cachealignedalloc.c
+- cpukit/libcsupport/src/cachecoherentalloc.c
+- cpukit/libcsupport/src/calloc.c
+- cpukit/libcsupport/src/_calloc_r.c
+- cpukit/libcsupport/src/cfgetispeed.c
+- cpukit/libcsupport/src/cfgetospeed.c
+- cpukit/libcsupport/src/cfmakeraw.c
+- cpukit/libcsupport/src/cfmakesane.c
+- cpukit/libcsupport/src/cfsetispeed.c
+- cpukit/libcsupport/src/cfsetospeed.c
+- cpukit/libcsupport/src/cfsetspeed.c
+- cpukit/libcsupport/src/chdir.c
+- cpukit/libcsupport/src/chmod.c
+- cpukit/libcsupport/src/chown.c
+- cpukit/libcsupport/src/chroot.c
+- cpukit/libcsupport/src/clock.c
+- cpukit/libcsupport/src/clonenode.c
+- cpukit/libcsupport/src/close.c
+- cpukit/libcsupport/src/consolesimple.c
+- cpukit/libcsupport/src/consolesimpleread.c
+- cpukit/libcsupport/src/consolesimpletask.c
+- cpukit/libcsupport/src/ctermid.c
+- cpukit/libcsupport/src/dup2.c
+- cpukit/libcsupport/src/dup.c
+- cpukit/libcsupport/src/error.c
+- cpukit/libcsupport/src/fchdir.c
+- cpukit/libcsupport/src/fchmod.c
+- cpukit/libcsupport/src/fchown.c
+- cpukit/libcsupport/src/fcntl.c
+- cpukit/libcsupport/src/fdatasync.c
+- cpukit/libcsupport/src/flockfile.c
+- cpukit/libcsupport/src/fpathconf.c
+- cpukit/libcsupport/src/free.c
+- cpukit/libcsupport/src/freenode.c
+- cpukit/libcsupport/src/_free_r.c
+- cpukit/libcsupport/src/fstat.c
+- cpukit/libcsupport/src/fsync.c
+- cpukit/libcsupport/src/ftruncate.c
+- cpukit/libcsupport/src/ftrylockfile.c
+- cpukit/libcsupport/src/funlockfile.c
+- cpukit/libcsupport/src/getchark.c
+- cpukit/libcsupport/src/getdents.c
+- cpukit/libcsupport/src/getegid.c
+- cpukit/libcsupport/src/geteuid.c
+- cpukit/libcsupport/src/getgid.c
+- cpukit/libcsupport/src/getgrent.c
+- cpukit/libcsupport/src/getgrnam.c
+- cpukit/libcsupport/src/getgroups.c
+- cpukit/libcsupport/src/getlogin.c
+- cpukit/libcsupport/src/getpagesize.c
+- cpukit/libcsupport/src/getpgrp.c
+- cpukit/libcsupport/src/__getpid.c
+- cpukit/libcsupport/src/getpid.c
+- cpukit/libcsupport/src/getppid.c
+- cpukit/libcsupport/src/getpwent.c
+- cpukit/libcsupport/src/getreentglobal.c
+- cpukit/libcsupport/src/getrusage.c
+- cpukit/libcsupport/src/__gettod.c
+- cpukit/libcsupport/src/getuid.c
+- cpukit/libcsupport/src/gxx_wrappers.c
+- cpukit/libcsupport/src/ioctl.c
+- cpukit/libcsupport/src/isatty_r.c
+- cpukit/libcsupport/src/issetugid.c
+- cpukit/libcsupport/src/kill_noposix.c
+- cpukit/libcsupport/src/lchown.c
+- cpukit/libcsupport/src/libio.c
+- cpukit/libcsupport/src/libio_exit.c
+- cpukit/libcsupport/src/libio_init.c
+- cpukit/libcsupport/src/libiozeroiops.c
+- cpukit/libcsupport/src/link.c
+- cpukit/libcsupport/src/lseek.c
+- cpukit/libcsupport/src/lstat.c
+- cpukit/libcsupport/src/malloc.c
+- cpukit/libcsupport/src/malloc_deferred.c
+- cpukit/libcsupport/src/malloc_dirtier.c
+- cpukit/libcsupport/src/mallocdirtydefault.c
+- cpukit/libcsupport/src/mallocextenddefault.c
+- cpukit/libcsupport/src/mallocfreespace.c
+- cpukit/libcsupport/src/mallocgetheapptr.c
+- cpukit/libcsupport/src/mallocinfo.c
+- cpukit/libcsupport/src/malloc_initialize.c
+- cpukit/libcsupport/src/_malloc_r.c
+- cpukit/libcsupport/src/mallocsetheapptr.c
+- cpukit/libcsupport/src/malloc_walk.c
+- cpukit/libcsupport/src/mkdir.c
+- cpukit/libcsupport/src/mkfifo.c
+- cpukit/libcsupport/src/mknod.c
+- cpukit/libcsupport/src/mount.c
+- cpukit/libcsupport/src/mount-mgr.c
+- cpukit/libcsupport/src/mount-mktgt.c
+- cpukit/libcsupport/src/newlibc_exit.c
+- cpukit/libcsupport/src/newlibc_reent.c
+- cpukit/libcsupport/src/open.c
+- cpukit/libcsupport/src/open_dev_console.c
+- cpukit/libcsupport/src/pathconf.c
+- cpukit/libcsupport/src/posix_devctl.c
+- cpukit/libcsupport/src/posix_memalign.c
+- cpukit/libcsupport/src/printerfprintfputc.c
+- cpukit/libcsupport/src/printertask.c
+- cpukit/libcsupport/src/printf_plugin.c
+- cpukit/libcsupport/src/print_fprintf.c
+- cpukit/libcsupport/src/printk.c
+- cpukit/libcsupport/src/printk_plugin.c
+- cpukit/libcsupport/src/print_printf.c
+- cpukit/libcsupport/src/privateenv.c
+- cpukit/libcsupport/src/putk.c
+- cpukit/libcsupport/src/pwdgrp.c
+- cpukit/libcsupport/src/read.c
+- cpukit/libcsupport/src/readlink.c
+- cpukit/libcsupport/src/readv.c
+- cpukit/libcsupport/src/realloc.c
+- cpukit/libcsupport/src/_realloc_r.c
+- cpukit/libcsupport/src/realpath.c
+- cpukit/libcsupport/src/_rename_r.c
+- cpukit/libcsupport/src/resource_snapshot.c
+- cpukit/libcsupport/src/rmdir.c
+- cpukit/libcsupport/src/rtems_heap_extend.c
+- cpukit/libcsupport/src/rtems_heap_extend_via_sbrk.c
+- cpukit/libcsupport/src/rtems_heap_greedy.c
+- cpukit/libcsupport/src/rtems_heap_null_extend.c
+- cpukit/libcsupport/src/rtems_memalign.c
+- cpukit/libcsupport/src/rtems_mkdir.c
+- cpukit/libcsupport/src/rtems_putc.c
+- cpukit/libcsupport/src/rtems_put_char.c
+- cpukit/libcsupport/src/setegid.c
+- cpukit/libcsupport/src/seteuid.c
+- cpukit/libcsupport/src/setgid.c
+- cpukit/libcsupport/src/setgroups.c
+- cpukit/libcsupport/src/setpgid.c
+- cpukit/libcsupport/src/setsid.c
+- cpukit/libcsupport/src/setuid.c
+- cpukit/libcsupport/src/stat.c
+- cpukit/libcsupport/src/statvfs.c
+- cpukit/libcsupport/src/sup_fs_check_permissions.c
+- cpukit/libcsupport/src/sup_fs_deviceio.c
+- cpukit/libcsupport/src/sup_fs_eval_path.c
+- cpukit/libcsupport/src/sup_fs_eval_path_generic.c
+- cpukit/libcsupport/src/sup_fs_exist_in_same_instance.c
+- cpukit/libcsupport/src/sup_fs_location.c
+- cpukit/libcsupport/src/sup_fs_mount_iterate.c
+- cpukit/libcsupport/src/sup_fs_next_token.c
+- cpukit/libcsupport/src/symlink.c
+- cpukit/libcsupport/src/sync.c
+- cpukit/libcsupport/src/tcdrain.c
+- cpukit/libcsupport/src/tcflow.c
+- cpukit/libcsupport/src/tcflush.c
+- cpukit/libcsupport/src/tcgetattr.c
+- cpukit/libcsupport/src/tcgetpgrp.c
+- cpukit/libcsupport/src/tcsendbreak.c
+- cpukit/libcsupport/src/tcsetattr.c
+- cpukit/libcsupport/src/tcsetpgrp.c
+- cpukit/libcsupport/src/termios_baud2index.c
+- cpukit/libcsupport/src/termios_baud2num.c
+- cpukit/libcsupport/src/termios_baudtable.c
+- cpukit/libcsupport/src/termios.c
+- cpukit/libcsupport/src/termiosinitialize.c
+- cpukit/libcsupport/src/termios_num2baud.c
+- cpukit/libcsupport/src/termios_posix_isig_handler.c
+- cpukit/libcsupport/src/termios_setbestbaud.c
+- cpukit/libcsupport/src/termios_setinitialbaud.c
+- cpukit/libcsupport/src/__times.c
+- cpukit/libcsupport/src/truncate.c
+- cpukit/libcsupport/src/uenvgetgroups.c
+- cpukit/libcsupport/src/umask.c
+- cpukit/libcsupport/src/unlink.c
+- cpukit/libcsupport/src/unmount.c
+- cpukit/libcsupport/src/__usrenv.c
+- cpukit/libcsupport/src/utime.c
+- cpukit/libcsupport/src/utimes.c
+- cpukit/libcsupport/src/utsname.c
+- cpukit/libcsupport/src/vprintk.c
+- cpukit/libcsupport/src/write.c
+- cpukit/libcsupport/src/write_r.c
+- cpukit/libcsupport/src/writev.c
+- cpukit/libfs/src/defaults/default_are_nodes_equal.c
+- cpukit/libfs/src/defaults/default_chown.c
+- cpukit/libfs/src/defaults/default_clone.c
+- cpukit/libfs/src/defaults/default_close.c
+- cpukit/libfs/src/defaults/default_eval_path.c
+- cpukit/libfs/src/defaults/default_fchmod.c
+- cpukit/libfs/src/defaults/default_fcntl.c
+- cpukit/libfs/src/defaults/default_freenode.c
+- cpukit/libfs/src/defaults/default_fstat.c
+- cpukit/libfs/src/defaults/default_fsunmount.c
+- cpukit/libfs/src/defaults/default_fsync.c
+- cpukit/libfs/src/defaults/default_fsync_success.c
+- cpukit/libfs/src/defaults/default_ftruncate.c
+- cpukit/libfs/src/defaults/default_ftruncate_directory.c
+- cpukit/libfs/src/defaults/default_handlers.c
+- cpukit/libfs/src/defaults/default_ioctl.c
+- cpukit/libfs/src/defaults/default_kqfilter.c
+- cpukit/libfs/src/defaults/default_link.c
+- cpukit/libfs/src/defaults/default_lock_and_unlock.c
+- cpukit/libfs/src/defaults/default_lseek.c
+- cpukit/libfs/src/defaults/default_lseek_directory.c
+- cpukit/libfs/src/defaults/default_lseek_file.c
+- cpukit/libfs/src/defaults/default_mknod.c
+- cpukit/libfs/src/defaults/default_mmap.c
+- cpukit/libfs/src/defaults/default_mount.c
+- cpukit/libfs/src/defaults/default_open.c
+- cpukit/libfs/src/defaults/default_ops.c
+- cpukit/libfs/src/defaults/default_poll.c
+- cpukit/libfs/src/defaults/default_read.c
+- cpukit/libfs/src/defaults/default_readlink.c
+- cpukit/libfs/src/defaults/default_readv.c
+- cpukit/libfs/src/defaults/default_rename.c
+- cpukit/libfs/src/defaults/default_rmnod.c
+- cpukit/libfs/src/defaults/default_statvfs.c
+- cpukit/libfs/src/defaults/default_symlink.c
+- cpukit/libfs/src/defaults/default_unmount.c
+- cpukit/libfs/src/defaults/default_utime.c
+- cpukit/libfs/src/defaults/default_write.c
+- cpukit/libfs/src/defaults/default_writev.c
+- cpukit/libfs/src/dosfs/fat.c
+- cpukit/libfs/src/dosfs/fat_fat_operations.c
+- cpukit/libfs/src/dosfs/fat_file.c
+- cpukit/libfs/src/dosfs/msdos_conv.c
+- cpukit/libfs/src/dosfs/msdos_conv_default.c
+- cpukit/libfs/src/dosfs/msdos_conv_utf8.c
+- cpukit/libfs/src/dosfs/msdos_create.c
+- cpukit/libfs/src/dosfs/msdos_dir.c
+- cpukit/libfs/src/dosfs/msdos_eval.c
+- cpukit/libfs/src/dosfs/msdos_file.c
+- cpukit/libfs/src/dosfs/msdos_format.c
+- cpukit/libfs/src/dosfs/msdos_free.c
+- cpukit/libfs/src/dosfs/msdos_fsunmount.c
+- cpukit/libfs/src/dosfs/msdos_handlers_dir.c
+- cpukit/libfs/src/dosfs/msdos_handlers_file.c
+- cpukit/libfs/src/dosfs/msdos_init.c
+- cpukit/libfs/src/dosfs/msdos_initsupp.c
+- cpukit/libfs/src/dosfs/msdos_misc.c
+- cpukit/libfs/src/dosfs/msdos_mknod.c
+- cpukit/libfs/src/dosfs/msdos_rename.c
+- cpukit/libfs/src/dosfs/msdos_rmnod.c
+- cpukit/libfs/src/dosfs/msdos_statvfs.c
+- cpukit/libfs/src/imfs/deviceio.c
+- cpukit/libfs/src/imfs/imfs_add_node.c
+- cpukit/libfs/src/imfs/imfs_chown.c
+- cpukit/libfs/src/imfs/imfs_config.c
+- cpukit/libfs/src/imfs/imfs_creat.c
+- cpukit/libfs/src/imfs/imfs_dir.c
+- cpukit/libfs/src/imfs/imfs_dir_default.c
+- cpukit/libfs/src/imfs/imfs_dir_minimal.c
+- cpukit/libfs/src/imfs/imfs_eval.c
+- cpukit/libfs/src/imfs/imfs_eval_devfs.c
+- cpukit/libfs/src/imfs/imfs_fchmod.c
+- cpukit/libfs/src/imfs/imfs_fifo.c
+- cpukit/libfs/src/imfs/imfs_fsunmount.c
+- cpukit/libfs/src/imfs/imfs_handlers_device.c
+- cpukit/libfs/src/imfs/imfs_init.c
+- cpukit/libfs/src/imfs/imfs_initsupp.c
+- cpukit/libfs/src/imfs/imfs_linfile.c
+- cpukit/libfs/src/imfs/imfs_link.c
+- cpukit/libfs/src/imfs/imfs_load_tar.c
+- cpukit/libfs/src/imfs/imfs_make_generic_node.c
+- cpukit/libfs/src/imfs/imfs_make_linfile.c
+- cpukit/libfs/src/imfs/imfs_memfile.c
+- cpukit/libfs/src/imfs/imfs_mknod.c
+- cpukit/libfs/src/imfs/imfs_mount.c
+- cpukit/libfs/src/imfs/imfs_node.c
+- cpukit/libfs/src/imfs/imfs_node_destroy_default.c
+- cpukit/libfs/src/imfs/imfs_rename.c
+- cpukit/libfs/src/imfs/imfs_rmnod.c
+- cpukit/libfs/src/imfs/imfs_stat.c
+- cpukit/libfs/src/imfs/imfs_stat_file.c
+- cpukit/libfs/src/imfs/imfs_symlink.c
+- cpukit/libfs/src/imfs/imfs_unmount.c
+- cpukit/libfs/src/imfs/imfs_utime.c
+- cpukit/libfs/src/imfs/ioman.c
+- cpukit/libfs/src/pipe/fifo.c
+- cpukit/libfs/src/pipe/pipe.c
+- cpukit/libfs/src/rfs/rtems-rfs-bitmaps.c
+- cpukit/libfs/src/rfs/rtems-rfs-block.c
+- cpukit/libfs/src/rfs/rtems-rfs-buffer-bdbuf.c
+- cpukit/libfs/src/rfs/rtems-rfs-buffer.c
+- cpukit/libfs/src/rfs/rtems-rfs-dir.c
+- cpukit/libfs/src/rfs/rtems-rfs-dir-hash.c
+- cpukit/libfs/src/rfs/rtems-rfs-file.c
+- cpukit/libfs/src/rfs/rtems-rfs-file-system.c
+- cpukit/libfs/src/rfs/rtems-rfs-format.c
+- cpukit/libfs/src/rfs/rtems-rfs-group.c
+- cpukit/libfs/src/rfs/rtems-rfs-inode.c
+- cpukit/libfs/src/rfs/rtems-rfs-link.c
+- cpukit/libfs/src/rfs/rtems-rfs-mutex.c
+- cpukit/libfs/src/rfs/rtems-rfs-rtems.c
+- cpukit/libfs/src/rfs/rtems-rfs-rtems-dev.c
+- cpukit/libfs/src/rfs/rtems-rfs-rtems-dir.c
+- cpukit/libfs/src/rfs/rtems-rfs-rtems-file.c
+- cpukit/libfs/src/rfs/rtems-rfs-rtems-utils.c
+- cpukit/libfs/src/rfs/rtems-rfs-shell.c
+- cpukit/libfs/src/rfs/rtems-rfs-trace.c
+- cpukit/libi2c/libi2c.c
+- cpukit/libmd/md4.c
+- cpukit/libmd/md5.c
+- cpukit/libmd/sha256c.c
+- cpukit/libmd/sha512c.c
+- cpukit/libmisc/bspcmdline/bspcmdline_get.c
+- cpukit/libmisc/bspcmdline/bspcmdline_getparam.c
+- cpukit/libmisc/bspcmdline/bspcmdline_getparamraw.c
+- cpukit/libmisc/bspcmdline/bspcmdline_getparamrhs.c
+- cpukit/libmisc/capture/capture_buffer.c
+- cpukit/libmisc/capture/capture.c
+- cpukit/libmisc/capture/capture-cli.c
+- cpukit/libmisc/capture/capture_support.c
+- cpukit/libmisc/capture/capture_user_extension.c
+- cpukit/libmisc/capture/rtems-trace-buffer-default.c
+- cpukit/libmisc/capture/rtems-trace-buffer-vars.c
+- cpukit/libmisc/cpuuse/cpuinforeport.c
+- cpukit/libmisc/cpuuse/cpuusagedata.c
+- cpukit/libmisc/cpuuse/cpuusagereport.c
+- cpukit/libmisc/cpuuse/cpuusagereset.c
+- cpukit/libmisc/cpuuse/cpuusagetop.c
+- cpukit/libmisc/devnull/devnull.c
+- cpukit/libmisc/devnull/devzero.c
+- cpukit/libmisc/dumpbuf/dumpbuf.c
+- cpukit/libmisc/fb/mw_print.c
+- cpukit/libmisc/fb/mw_uid.c
+- cpukit/libmisc/fsmount/fsmount.c
+- cpukit/libmisc/monitor/mon-command.c
+- cpukit/libmisc/monitor/mon-config.c
+- cpukit/libmisc/monitor/mon-driver.c
+- cpukit/libmisc/monitor/mon-editor.c
+- cpukit/libmisc/monitor/mon-extension.c
+- cpukit/libmisc/monitor/mon-itask.c
+- cpukit/libmisc/monitor/mon-manager.c
+- cpukit/libmisc/monitor/mon-monitor.c
+- cpukit/libmisc/monitor/mon-object.c
+- cpukit/libmisc/monitor/mon-part.c
+- cpukit/libmisc/monitor/mon-prmisc.c
+- cpukit/libmisc/monitor/mon-queue.c
+- cpukit/libmisc/monitor/mon-region.c
+- cpukit/libmisc/monitor/mon-sema.c
+- cpukit/libmisc/monitor/mon-server.c
+- cpukit/libmisc/monitor/mon-symbols.c
+- cpukit/libmisc/monitor/mon-task.c
+- cpukit/libmisc/mouse/mouse_parser.c
+- cpukit/libmisc/mouse/serial_mouse.c
+- cpukit/libmisc/redirector/stdio-redirect.c
+- cpukit/libmisc/rtems-fdt/rtems-fdt.c
+- cpukit/libmisc/rtems-fdt/rtems-fdt-shell.c
+- cpukit/libmisc/stackchk/check.c
+- cpukit/libmisc/stringto/stringtodouble.c
+- cpukit/libmisc/stringto/stringtofloat.c
+- cpukit/libmisc/stringto/stringtoint.c
+- cpukit/libmisc/stringto/stringtolong.c
+- cpukit/libmisc/stringto/stringtolongdouble.c
+- cpukit/libmisc/stringto/stringtolonglong.c
+- cpukit/libmisc/stringto/stringtopointer.c
+- cpukit/libmisc/stringto/stringtounsignedchar.c
+- cpukit/libmisc/stringto/stringtounsignedint.c
+- cpukit/libmisc/stringto/stringtounsignedlong.c
+- cpukit/libmisc/stringto/stringtounsignedlonglong.c
+- cpukit/libmisc/untar/untar.c
+- cpukit/libmisc/untar/untar_tgz.c
+- cpukit/libmisc/untar/untar_txz.c
+- cpukit/libmisc/uuid/clear.c
+- cpukit/libmisc/uuid/compare.c
+- cpukit/libmisc/uuid/copy.c
+- cpukit/libmisc/uuid/gen_uuid.c
+- cpukit/libmisc/uuid/isnull.c
+- cpukit/libmisc/uuid/pack.c
+- cpukit/libmisc/uuid/parse.c
+- cpukit/libmisc/uuid/unpack.c
+- cpukit/libmisc/uuid/unparse.c
+- cpukit/libmisc/uuid/uuid_time.c
+- cpukit/libmisc/xz/xz_crc32.c
+- cpukit/libmisc/xz/xz_dec_lzma2.c
+- cpukit/libmisc/xz/xz_dec_stream.c
+- cpukit/libstdthreads/call_once.c
+- cpukit/libstdthreads/cnd.c
+- cpukit/libstdthreads/mtx.c
+- cpukit/libstdthreads/thrd.c
+- cpukit/libstdthreads/tss.c
+- cpukit/libtrace/record/record.c
+- cpukit/libtrace/record/record-client.c
+- cpukit/libtrace/record/record-dump-base64.c
+- cpukit/libtrace/record/record-dump.c
+- cpukit/libtrace/record/record-dump-fatal.c
+- cpukit/libtrace/record/record-dump-zbase64.c
+- cpukit/libtrace/record/record-dump-zfatal.c
+- cpukit/libtrace/record/record-server.c
+- cpukit/libtrace/record/record-sysinit.c
+- cpukit/libtrace/record/record-text.c
+- cpukit/libtrace/record/record-userext.c
+- cpukit/libtrace/record/record-util.c
+- cpukit/posix/src/adjtime.c
+- cpukit/posix/src/aio_suspend.c
+- cpukit/posix/src/barrierattrdestroy.c
+- cpukit/posix/src/barrierattrgetpshared.c
+- cpukit/posix/src/barrierattrinit.c
+- cpukit/posix/src/barrierattrsetpshared.c
+- cpukit/posix/src/cancel.c
+- cpukit/posix/src/cleanuppush.c
+- cpukit/posix/src/clockgetcpuclockid.c
+- cpukit/posix/src/clockgetres.c
+- cpukit/posix/src/clockgettime.c
+- cpukit/posix/src/clocksettime.c
+- cpukit/posix/src/condattrdestroy.c
+- cpukit/posix/src/condattrgetclock.c
+- cpukit/posix/src/condattrgetpshared.c
+- cpukit/posix/src/condattrinit.c
+- cpukit/posix/src/condattrsetclock.c
+- cpukit/posix/src/condattrsetpshared.c
+- cpukit/posix/src/condbroadcast.c
+- cpukit/posix/src/conddefaultattributes.c
+- cpukit/posix/src/conddestroy.c
+- cpukit/posix/src/condinit.c
+- cpukit/posix/src/condsignal.c
+- cpukit/posix/src/condsignalsupp.c
+- cpukit/posix/src/condtimedwait.c
+- cpukit/posix/src/condwait.c
+- cpukit/posix/src/condwaitsupp.c
+- cpukit/posix/src/_execve.c
+- cpukit/posix/src/fork.c
+- cpukit/posix/src/key.c
+- cpukit/posix/src/keycreate.c
+- cpukit/posix/src/keydelete.c
+- cpukit/posix/src/keygetspecific.c
+- cpukit/posix/src/keysetspecific.c
+- cpukit/posix/src/keyzerokvp.c
+- cpukit/posix/src/lio_listio.c
+- cpukit/posix/src/mlockall.c
+- cpukit/posix/src/mlock.c
+- cpukit/posix/src/mmap.c
+- cpukit/posix/src/mprotect.c
+- cpukit/posix/src/mqueue.c
+- cpukit/posix/src/mqueueclose.c
+- cpukit/posix/src/mqueueconfig.c
+- cpukit/posix/src/mqueuedeletesupp.c
+- cpukit/posix/src/mqueuegetattr.c
+- cpukit/posix/src/mqueueopen.c
+- cpukit/posix/src/mqueuereceive.c
+- cpukit/posix/src/mqueuerecvsupp.c
+- cpukit/posix/src/mqueuesend.c
+- cpukit/posix/src/mqueuesendsupp.c
+- cpukit/posix/src/mqueuesetattr.c
+- cpukit/posix/src/mqueuetimedreceive.c
+- cpukit/posix/src/mqueuetimedsend.c
+- cpukit/posix/src/mqueueunlink.c
+- cpukit/posix/src/msync.c
+- cpukit/posix/src/munlockall.c
+- cpukit/posix/src/munlock.c
+- cpukit/posix/src/munmap.c
+- cpukit/posix/src/mutexattrdestroy.c
+- cpukit/posix/src/mutexattrgetprioceiling.c
+- cpukit/posix/src/mutexattrgetprotocol.c
+- cpukit/posix/src/mutexattrgetpshared.c
+- cpukit/posix/src/mutexattrgettype.c
+- cpukit/posix/src/mutexattrinit.c
+- cpukit/posix/src/mutexattrsetprioceiling.c
+- cpukit/posix/src/mutexattrsetprotocol.c
+- cpukit/posix/src/mutexattrsetpshared.c
+- cpukit/posix/src/mutexattrsettype.c
+- cpukit/posix/src/mutexdestroy.c
+- cpukit/posix/src/mutexgetprioceiling.c
+- cpukit/posix/src/mutexinit.c
+- cpukit/posix/src/mutexlock.c
+- cpukit/posix/src/mutexlocksupp.c
+- cpukit/posix/src/mutexsetprioceiling.c
+- cpukit/posix/src/mutextimedlock.c
+- cpukit/posix/src/mutextrylock.c
+- cpukit/posix/src/mutexunlock.c
+- cpukit/posix/src/nanosleep.c
+- cpukit/posix/src/pbarrierdestroy.c
+- cpukit/posix/src/pbarrierinit.c
+- cpukit/posix/src/pbarrierwait.c
+- cpukit/posix/src/posix_madvise.c
+- cpukit/posix/src/prwlockdestroy.c
+- cpukit/posix/src/prwlockinit.c
+- cpukit/posix/src/prwlockrdlock.c
+- cpukit/posix/src/prwlocktimedrdlock.c
+- cpukit/posix/src/prwlocktimedwrlock.c
+- cpukit/posix/src/prwlocktryrdlock.c
+- cpukit/posix/src/prwlocktrywrlock.c
+- cpukit/posix/src/prwlockunlock.c
+- cpukit/posix/src/prwlockwrlock.c
+- cpukit/posix/src/psignalconfig.c
+- cpukit/posix/src/pspindestroy.c
+- cpukit/posix/src/pspininit.c
+- cpukit/posix/src/pspinlock.c
+- cpukit/posix/src/pspinunlock.c
+- cpukit/posix/src/psxnametoid.c
+- cpukit/posix/src/psxpriorityisvalid.c
+- cpukit/posix/src/psxsemaphore.c
+- cpukit/posix/src/psxsemaphoreconfig.c
+- cpukit/posix/src/psxtimerconfig.c
+- cpukit/posix/src/psxtransschedparam.c
+- cpukit/posix/src/pthreadatfork.c
+- cpukit/posix/src/pthreadattrdefault.c
+- cpukit/posix/src/pthreadattrdestroy.c
+- cpukit/posix/src/pthreadattrgetaffinitynp.c
+- cpukit/posix/src/pthreadattrgetdetachstate.c
+- cpukit/posix/src/pthreadattrgetguardsize.c
+- cpukit/posix/src/pthreadattrgetinheritsched.c
+- cpukit/posix/src/pthreadattrgetschedparam.c
+- cpukit/posix/src/pthreadattrgetschedpolicy.c
+- cpukit/posix/src/pthreadattrgetscope.c
+- cpukit/posix/src/pthreadattrgetstackaddr.c
+- cpukit/posix/src/pthreadattrgetstack.c
+- cpukit/posix/src/pthreadattrgetstacksize.c
+- cpukit/posix/src/pthreadattrinit.c
+- cpukit/posix/src/pthreadattrsetaffinitynp.c
+- cpukit/posix/src/pthreadattrsetdetachstate.c
+- cpukit/posix/src/pthreadattrsetguardsize.c
+- cpukit/posix/src/pthreadattrsetinheritsched.c
+- cpukit/posix/src/pthreadattrsetschedparam.c
+- cpukit/posix/src/pthreadattrsetschedpolicy.c
+- cpukit/posix/src/pthreadattrsetscope.c
+- cpukit/posix/src/pthreadattrsetstackaddr.c
+- cpukit/posix/src/pthreadattrsetstack.c
+- cpukit/posix/src/pthreadattrsetstacksize.c
+- cpukit/posix/src/pthread.c
+- cpukit/posix/src/pthreadconcurrency.c
+- cpukit/posix/src/pthreadconfig.c
+- cpukit/posix/src/pthreadcreate.c
+- cpukit/posix/src/pthreaddetach.c
+- cpukit/posix/src/pthreadequal.c
+- cpukit/posix/src/pthreadexit.c
+- cpukit/posix/src/pthreadgetaffinitynp.c
+- cpukit/posix/src/pthreadgetattrnp.c
+- cpukit/posix/src/pthreadgetcpuclockid.c
+- cpukit/posix/src/pthreadgetnamenp.c
+- cpukit/posix/src/pthreadgetschedparam.c
+- cpukit/posix/src/pthreadinitthreads.c
+- cpukit/posix/src/pthreadjoin.c
+- cpukit/posix/src/pthreadonce.c
+- cpukit/posix/src/pthreadself.c
+- cpukit/posix/src/pthreadsetaffinitynp.c
+- cpukit/posix/src/pthreadsetnamenp.c
+- cpukit/posix/src/pthreadsetschedparam.c
+- cpukit/posix/src/pthreadsetschedprio.c
+- cpukit/posix/src/rwlockattrdestroy.c
+- cpukit/posix/src/rwlockattrgetpshared.c
+- cpukit/posix/src/rwlockattrinit.c
+- cpukit/posix/src/rwlockattrsetpshared.c
+- cpukit/posix/src/sched_getparam.c
+- cpukit/posix/src/sched_getprioritymax.c
+- cpukit/posix/src/sched_getprioritymin.c
+- cpukit/posix/src/sched_getscheduler.c
+- cpukit/posix/src/sched_rr_get_interval.c
+- cpukit/posix/src/sched_setparam.c
+- cpukit/posix/src/sched_setscheduler.c
+- cpukit/posix/src/sched_yield.c
+- cpukit/posix/src/semaphoredeletesupp.c
+- cpukit/posix/src/semclose.c
+- cpukit/posix/src/semdestroy.c
+- cpukit/posix/src/semgetvalue.c
+- cpukit/posix/src/seminit.c
+- cpukit/posix/src/semopen.c
+- cpukit/posix/src/sempost.c
+- cpukit/posix/src/semtimedwait.c
+- cpukit/posix/src/semtrywait.c
+- cpukit/posix/src/semunlink.c
+- cpukit/posix/src/semwait.c
+- cpukit/posix/src/setcancelstate.c
+- cpukit/posix/src/setcanceltype.c
+- cpukit/posix/src/shm.c
+- cpukit/posix/src/shmconfig.c
+- cpukit/posix/src/shmheap.c
+- cpukit/posix/src/shmopen.c
+- cpukit/posix/src/shmops.c
+- cpukit/posix/src/shmunlink.c
+- cpukit/posix/src/shmwkspace.c
+- cpukit/posix/src/sigaddset.c
+- cpukit/posix/src/sigdelset.c
+- cpukit/posix/src/sigemptyset.c
+- cpukit/posix/src/sigfillset.c
+- cpukit/posix/src/sigismember.c
+- cpukit/posix/src/sigprocmask.c
+- cpukit/posix/src/sysconf.c
+- cpukit/posix/src/testcancel.c
+- cpukit/posix/src/vfork.c
+- cpukit/posix/src/wait.c
+- cpukit/posix/src/waitpid.c
+- cpukit/rtems/src/barrier.c
+- cpukit/rtems/src/barriercreate.c
+- cpukit/rtems/src/barrierdelete.c
+- cpukit/rtems/src/barrierident.c
+- cpukit/rtems/src/barrierrelease.c
+- cpukit/rtems/src/barrierwait.c
+- cpukit/rtems/src/clockgetsecondssinceepoch.c
+- cpukit/rtems/src/clockgettickspersecond.c
+- cpukit/rtems/src/clockgettod.c
+- cpukit/rtems/src/clockgettodtimeval.c
+- cpukit/rtems/src/clockgetuptime.c
+- cpukit/rtems/src/clockgetuptimenanoseconds.c
+- cpukit/rtems/src/clockgetuptimeseconds.c
+- cpukit/rtems/src/clockgetuptimetimeval.c
+- cpukit/rtems/src/clockset.c
+- cpukit/rtems/src/clocktick.c
+- cpukit/rtems/src/clocktodtoseconds.c
+- cpukit/rtems/src/clocktodvalidate.c
+- cpukit/rtems/src/dpmem.c
+- cpukit/rtems/src/dpmemcreate.c
+- cpukit/rtems/src/dpmemdelete.c
+- cpukit/rtems/src/dpmemexternal2internal.c
+- cpukit/rtems/src/dpmemident.c
+- cpukit/rtems/src/dpmeminternal2external.c
+- cpukit/rtems/src/eventreceive.c
+- cpukit/rtems/src/eventseize.c
+- cpukit/rtems/src/eventsend.c
+- cpukit/rtems/src/eventsurrender.c
+- cpukit/rtems/src/getapiconfig.c
+- cpukit/rtems/src/intrbody.c
+- cpukit/rtems/src/intrcatch.c
+- cpukit/rtems/src/modes.c
+- cpukit/rtems/src/msg.c
+- cpukit/rtems/src/msgqbroadcast.c
+- cpukit/rtems/src/msgqcreate.c
+- cpukit/rtems/src/msgqdelete.c
+- cpukit/rtems/src/msgqflush.c
+- cpukit/rtems/src/msgqgetnumberpending.c
+- cpukit/rtems/src/msgqident.c
+- cpukit/rtems/src/msgqreceive.c
+- cpukit/rtems/src/msgqsend.c
+- cpukit/rtems/src/msgqurgent.c
+- cpukit/rtems/src/part.c
+- cpukit/rtems/src/partcreate.c
+- cpukit/rtems/src/partdelete.c
+- cpukit/rtems/src/partgetbuffer.c
+- cpukit/rtems/src/partident.c
+- cpukit/rtems/src/partreturnbuffer.c
+- cpukit/rtems/src/ratemon.c
+- cpukit/rtems/src/ratemoncancel.c
+- cpukit/rtems/src/ratemoncreate.c
+- cpukit/rtems/src/ratemondelete.c
+- cpukit/rtems/src/ratemongetstatistics.c
+- cpukit/rtems/src/ratemongetstatus.c
+- cpukit/rtems/src/ratemonident.c
+- cpukit/rtems/src/ratemonperiod.c
+- cpukit/rtems/src/ratemonreportstatistics.c
+- cpukit/rtems/src/ratemonresetall.c
+- cpukit/rtems/src/ratemonresetstatistics.c
+- cpukit/rtems/src/ratemontimeout.c
+- cpukit/rtems/src/region.c
+- cpukit/rtems/src/regioncreate.c
+- cpukit/rtems/src/regiondelete.c
+- cpukit/rtems/src/regionextend.c
+- cpukit/rtems/src/regiongetfreeinfo.c
+- cpukit/rtems/src/regiongetinfo.c
+- cpukit/rtems/src/regiongetsegment.c
+- cpukit/rtems/src/regiongetsegmentsize.c
+- cpukit/rtems/src/regionident.c
+- cpukit/rtems/src/regionprocessqueue.c
+- cpukit/rtems/src/regionresizesegment.c
+- cpukit/rtems/src/regionreturnsegment.c
+- cpukit/rtems/src/rtemsbuildid.c
+- cpukit/rtems/src/rtemsbuildname.c
+- cpukit/rtems/src/rtemsmaxprio.c
+- cpukit/rtems/src/rtemsnametoid.c
+- cpukit/rtems/src/rtemsobjectapimaximumclass.c
+- cpukit/rtems/src/rtemsobjectapiminimumclass.c
+- cpukit/rtems/src/rtemsobjectgetapiclassname.c
+- cpukit/rtems/src/rtemsobjectgetapiname.c
+- cpukit/rtems/src/rtemsobjectgetclassicname.c
+- cpukit/rtems/src/rtemsobjectgetclassinfo.c
+- cpukit/rtems/src/rtemsobjectgetname.c
+- cpukit/rtems/src/rtemsobjectidapimaximum.c
+- cpukit/rtems/src/rtemsobjectidapiminimum.c
+- cpukit/rtems/src/rtemsobjectidgetapi.c
+- cpukit/rtems/src/rtemsobjectidgetclass.c
+- cpukit/rtems/src/rtemsobjectidgetindex.c
+- cpukit/rtems/src/rtemsobjectidgetnode.c
+- cpukit/rtems/src/rtemsobjectsetname.c
+- cpukit/rtems/src/rtemstimer.c
+- cpukit/rtems/src/scheduleraddprocessor.c
+- cpukit/rtems/src/schedulergetmaxprio.c
+- cpukit/rtems/src/schedulergetprocessorset.c
+- cpukit/rtems/src/scheduleridentbyprocessor.c
+- cpukit/rtems/src/scheduleridentbyprocessorset.c
+- cpukit/rtems/src/schedulerident.c
+- cpukit/rtems/src/schedulermapfromposix.c
+- cpukit/rtems/src/schedulermaptoposix.c
+- cpukit/rtems/src/schedulerremoveprocessor.c
+- cpukit/rtems/src/sem.c
+- cpukit/rtems/src/semcreate.c
+- cpukit/rtems/src/semdelete.c
+- cpukit/rtems/src/semflush.c
+- cpukit/rtems/src/semident.c
+- cpukit/rtems/src/semobtain.c
+- cpukit/rtems/src/semrelease.c
+- cpukit/rtems/src/semsetpriority.c
+- cpukit/rtems/src/signalcatch.c
+- cpukit/rtems/src/signalsend.c
+- cpukit/rtems/src/status.c
+- cpukit/rtems/src/statustext.c
+- cpukit/rtems/src/statustoerrno.c
+- cpukit/rtems/src/systemeventreceive.c
+- cpukit/rtems/src/systemeventsend.c
+- cpukit/rtems/src/taskconstruct.c
+- cpukit/rtems/src/taskcreate.c
+- cpukit/rtems/src/taskdelete.c
+- cpukit/rtems/src/taskexit.c
+- cpukit/rtems/src/taskgetaffinity.c
+- cpukit/rtems/src/taskgetpriority.c
+- cpukit/rtems/src/taskgetscheduler.c
+- cpukit/rtems/src/taskident.c
+- cpukit/rtems/src/taskinitdefault.c
+- cpukit/rtems/src/taskinitusers.c
+- cpukit/rtems/src/taskissuspended.c
+- cpukit/rtems/src/taskiterate.c
+- cpukit/rtems/src/taskmode.c
+- cpukit/rtems/src/taskrestart.c
+- cpukit/rtems/src/taskresume.c
+- cpukit/rtems/src/tasks.c
+- cpukit/rtems/src/taskself.c
+- cpukit/rtems/src/tasksetaffinity.c
+- cpukit/rtems/src/tasksetpriority.c
+- cpukit/rtems/src/tasksetscheduler.c
+- cpukit/rtems/src/taskstart.c
+- cpukit/rtems/src/tasksuspend.c
+- cpukit/rtems/src/taskwakeafter.c
+- cpukit/rtems/src/taskwakewhen.c
+- cpukit/rtems/src/timercancel.c
+- cpukit/rtems/src/timercreate.c
+- cpukit/rtems/src/timerdelete.c
+- cpukit/rtems/src/timerfireafter.c
+- cpukit/rtems/src/timerfirewhen.c
+- cpukit/rtems/src/timergetinfo.c
+- cpukit/rtems/src/timerident.c
+- cpukit/rtems/src/timerreset.c
+- cpukit/rtems/src/timerserver.c
+- cpukit/rtems/src/timerserverfireafter.c
+- cpukit/rtems/src/timerserverfirewhen.c
+- cpukit/rtems/src/workspace.c
+- cpukit/rtems/src/workspacegreedy.c
+- cpukit/sapi/src/chainappendnotify.c
+- cpukit/sapi/src/chaingetnotify.c
+- cpukit/sapi/src/chaingetwait.c
+- cpukit/sapi/src/chainprependnotify.c
+- cpukit/sapi/src/chainprotected.c
+- cpukit/sapi/src/cpucounterconverter.c
+- cpukit/sapi/src/delaynano.c
+- cpukit/sapi/src/delayticks.c
+- cpukit/sapi/src/exinit.c
+- cpukit/sapi/src/exshutdown.c
+- cpukit/sapi/src/extension.c
+- cpukit/sapi/src/extensioncreate.c
+- cpukit/sapi/src/extensiondelete.c
+- cpukit/sapi/src/extensionident.c
+- cpukit/sapi/src/fatal.c
+- cpukit/sapi/src/fatalsrctext.c
+- cpukit/sapi/src/getconfigmax.c
+- cpukit/sapi/src/getcopyrightnotice.c
+- cpukit/sapi/src/getversionstring.c
+- cpukit/sapi/src/interrtext.c
+- cpukit/sapi/src/io.c
+- cpukit/sapi/src/ioclose.c
+- cpukit/sapi/src/iocontrol.c
+- cpukit/sapi/src/iodefault.c
+- cpukit/sapi/src/ioinitialize.c
+- cpukit/sapi/src/ioopen.c
+- cpukit/sapi/src/ioread.c
+- cpukit/sapi/src/ioregisterdriver.c
+- cpukit/sapi/src/iounregisterdriver.c
+- cpukit/sapi/src/iowrite.c
+- cpukit/sapi/src/panic.c
+- cpukit/sapi/src/posixapi.c
+- cpukit/sapi/src/profilingiterate.c
+- cpukit/sapi/src/profilingreportxml.c
+- cpukit/sapi/src/rbheap.c
+- cpukit/sapi/src/rbtree.c
+- cpukit/sapi/src/rbtreefind.c
+- cpukit/sapi/src/sapirbtreeinsert.c
+- cpukit/sapi/src/sysinitverbose.c
+- cpukit/sapi/src/tcsimpleinstall.c
+- cpukit/sapi/src/version.c
+- cpukit/score/src/allocatormutex.c
+- cpukit/score/src/apimutexisowner.c
+- cpukit/score/src/apimutexlock.c
+- cpukit/score/src/apimutexunlock.c
+- cpukit/score/src/chain.c
+- cpukit/score/src/chainnodecount.c
+- cpukit/score/src/condition.c
+- cpukit/score/src/configstackspacesize.c
+- cpukit/score/src/corebarrier.c
+- cpukit/score/src/corebarrierrelease.c
+- cpukit/score/src/corebarrierwait.c
+- cpukit/score/src/coremsgbroadcast.c
+- cpukit/score/src/coremsg.c
+- cpukit/score/src/coremsgclose.c
+- cpukit/score/src/coremsgflush.c
+- cpukit/score/src/coremsgflushwait.c
+- cpukit/score/src/coremsginsert.c
+- cpukit/score/src/coremsgseize.c
+- cpukit/score/src/coremsgsubmit.c
+- cpukit/score/src/coremutexseize.c
+- cpukit/score/src/corerwlock.c
+- cpukit/score/src/corerwlockobtainread.c
+- cpukit/score/src/corerwlockobtainwrite.c
+- cpukit/score/src/corerwlockrelease.c
+- cpukit/score/src/coresem.c
+- cpukit/score/src/coretodadjust.c
+- cpukit/score/src/coretod.c
+- cpukit/score/src/coretodhookdata.c
+- cpukit/score/src/coretodhookregister.c
+- cpukit/score/src/coretodhookrun.c
+- cpukit/score/src/coretodhookunregister.c
+- cpukit/score/src/coretodset.c
+- cpukit/score/src/coretodtickspersec.c
+- cpukit/score/src/debugisthreaddispatchingallowed.c
+- cpukit/score/src/freechain.c
+- cpukit/score/src/futex.c
+- cpukit/score/src/heapallocate.c
+- cpukit/score/src/heap.c
+- cpukit/score/src/heapextend.c
+- cpukit/score/src/heapfree.c
+- cpukit/score/src/heapgetfreeinfo.c
+- cpukit/score/src/heapgetinfo.c
+- cpukit/score/src/heapgreedy.c
+- cpukit/score/src/heapiterate.c
+- cpukit/score/src/heapnoextend.c
+- cpukit/score/src/heapresizeblock.c
+- cpukit/score/src/heapsizeofuserarea.c
+- cpukit/score/src/heapwalk.c
+- cpukit/score/src/interr.c
+- cpukit/score/src/iobase64.c
+- cpukit/score/src/ioprintf.c
+- cpukit/score/src/iovprintf.c
+- cpukit/score/src/isr.c
+- cpukit/score/src/isrisinprogress.c
+- cpukit/score/src/iterateoverthreads.c
+- cpukit/score/src/kern_tc.c
+- cpukit/score/src/libatomic.c
+- cpukit/score/src/log2table.c
+- cpukit/score/src/memoryallocate.c
+- cpukit/score/src/memorydirtyfreeareas.c
+- cpukit/score/src/memoryfill.c
+- cpukit/score/src/memoryzerobeforeuse.c
+- cpukit/score/src/memoryzerofreeareas.c
+- cpukit/score/src/mutex.c
+- cpukit/score/src/objectactivecount.c
+- cpukit/score/src/objectallocate.c
+- cpukit/score/src/objectallocatenone.c
+- cpukit/score/src/objectallocatestatic.c
+- cpukit/score/src/objectallocateunlimited.c
+- cpukit/score/src/objectapimaximumclass.c
+- cpukit/score/src/objectclose.c
+- cpukit/score/src/objectextendinformation.c
+- cpukit/score/src/objectfree.c
+- cpukit/score/src/objectfreestatic.c
+- cpukit/score/src/objectgetinfo.c
+- cpukit/score/src/objectgetinfoid.c
+- cpukit/score/src/objectgetlocal.c
+- cpukit/score/src/objectgetnameasstring.c
+- cpukit/score/src/objectgetnext.c
+- cpukit/score/src/objectgetnoprotection.c
+- cpukit/score/src/objectidtoname.c
+- cpukit/score/src/objectinitializeinformation.c
+- cpukit/score/src/objectnamespaceremove.c
+- cpukit/score/src/objectnametoid.c
+- cpukit/score/src/objectnametoidstring.c
+- cpukit/score/src/objectsetname.c
+- cpukit/score/src/objectshrinkinformation.c
+- cpukit/score/src/once.c
+- cpukit/score/src/percpuasm.c
+- cpukit/score/src/percpu.c
+- cpukit/score/src/pheapallocate.c
+- cpukit/score/src/pheapextend.c
+- cpukit/score/src/pheapfree.c
+- cpukit/score/src/pheapgetblocksize.c
+- cpukit/score/src/pheapgetfreeinfo.c
+- cpukit/score/src/pheapgetinfo.c
+- cpukit/score/src/pheapgetsize.c
+- cpukit/score/src/pheapinit.c
+- cpukit/score/src/pheapiterate.c
+- cpukit/score/src/pheapresizeblock.c
+- cpukit/score/src/pheapwalk.c
+- cpukit/score/src/processormaskcopy.c
+- cpukit/score/src/profilingisrentryexit.c
+- cpukit/score/src/rbtreeextract.c
+- cpukit/score/src/rbtreeinsert.c
+- cpukit/score/src/rbtreeiterate.c
+- cpukit/score/src/rbtreenext.c
+- cpukit/score/src/rbtreepostorder.c
+- cpukit/score/src/rbtreereplace.c
+- cpukit/score/src/sched.c
+- cpukit/score/src/scheduler.c
+- cpukit/score/src/schedulercbsattachthread.c
+- cpukit/score/src/schedulercbs.c
+- cpukit/score/src/schedulercbscleanup.c
+- cpukit/score/src/schedulercbscreateserver.c
+- cpukit/score/src/schedulercbsdestroyserver.c
+- cpukit/score/src/schedulercbsdetachthread.c
+- cpukit/score/src/schedulercbsgetapprovedbudget.c
+- cpukit/score/src/schedulercbsgetexecutiontime.c
+- cpukit/score/src/schedulercbsgetparameters.c
+- cpukit/score/src/schedulercbsgetremainingbudget.c
+- cpukit/score/src/schedulercbsgetserverid.c
+- cpukit/score/src/schedulercbsnodeinit.c
+- cpukit/score/src/schedulercbsreleasejob.c
+- cpukit/score/src/schedulercbssetparameters.c
+- cpukit/score/src/schedulercbsunblock.c
+- cpukit/score/src/schedulerdefaultmappriority.c
+- cpukit/score/src/schedulerdefaultnodedestroy.c
+- cpukit/score/src/schedulerdefaultnodeinit.c
+- cpukit/score/src/schedulerdefaultreleasejob.c
+- cpukit/score/src/schedulerdefaultschedule.c
+- cpukit/score/src/schedulerdefaultstartidle.c
+- cpukit/score/src/schedulerdefaulttick.c
+- cpukit/score/src/scheduleredfblock.c
+- cpukit/score/src/scheduleredf.c
+- cpukit/score/src/scheduleredfchangepriority.c
+- cpukit/score/src/scheduleredfnodeinit.c
+- cpukit/score/src/scheduleredfreleasejob.c
+- cpukit/score/src/scheduleredfschedule.c
+- cpukit/score/src/scheduleredfunblock.c
+- cpukit/score/src/scheduleredfyield.c
+- cpukit/score/src/schedulergetaffinity.c
+- cpukit/score/src/schedulerpriorityblock.c
+- cpukit/score/src/schedulerpriority.c
+- cpukit/score/src/schedulerprioritychangepriority.c
+- cpukit/score/src/schedulerpriorityschedule.c
+- cpukit/score/src/schedulerpriorityunblock.c
+- cpukit/score/src/schedulerpriorityyield.c
+- cpukit/score/src/schedulersetaffinity.c
+- cpukit/score/src/schedulersimpleblock.c
+- cpukit/score/src/schedulersimple.c
+- cpukit/score/src/schedulersimplechangepriority.c
+- cpukit/score/src/schedulersimpleschedule.c
+- cpukit/score/src/schedulersimpleunblock.c
+- cpukit/score/src/schedulersimpleyield.c
+- cpukit/score/src/semaphore.c
+- cpukit/score/src/stackallocatorfree.c
+- cpukit/score/src/stackallocatorfreenothing.c
+- cpukit/score/src/stackallocatorinit.c
+- cpukit/score/src/smpbarrierwait.c
+- cpukit/score/src/stackallocator.c
+- cpukit/score/src/threadallocateunlimited.c
+- cpukit/score/src/thread.c
+- cpukit/score/src/threadchangepriority.c
+- cpukit/score/src/threadclearstate.c
+- cpukit/score/src/threadcreateidle.c
+- cpukit/score/src/threaddispatch.c
+- cpukit/score/src/threadentryadaptoridle.c
+- cpukit/score/src/threadentryadaptornumeric.c
+- cpukit/score/src/threadentryadaptorpointer.c
+- cpukit/score/src/threadget.c
+- cpukit/score/src/threadgetcputimeused.c
+- cpukit/score/src/threadhandler.c
+- cpukit/score/src/threadidledefault.c
+- cpukit/score/src/threadinitialize.c
+- cpukit/score/src/threaditerate.c
+- cpukit/score/src/threadloadenv.c
+- cpukit/score/src/threadname.c
+- cpukit/score/src/threadq.c
+- cpukit/score/src/threadqenqueue.c
+- cpukit/score/src/threadqextractwithproxy.c
+- cpukit/score/src/threadqfirst.c
+- cpukit/score/src/threadqflush.c
+- cpukit/score/src/threadqops.c
+- cpukit/score/src/threadqtimeout.c
+- cpukit/score/src/threadrestart.c
+- cpukit/score/src/threadscheduler.c
+- cpukit/score/src/threadsetstate.c
+- cpukit/score/src/threadstackallocate.c
+- cpukit/score/src/threadstackfree.c
+- cpukit/score/src/threadstart.c
+- cpukit/score/src/threadstartmultitasking.c
+- cpukit/score/src/threadtimeout.c
+- cpukit/score/src/threadwaitgetid.c
+- cpukit/score/src/threadyield.c
+- cpukit/score/src/timespecaddto.c
+- cpukit/score/src/timespecdividebyinteger.c
+- cpukit/score/src/timespecdivide.c
+- cpukit/score/src/timespecfromticks.c
+- cpukit/score/src/timespecgetasnanoseconds.c
+- cpukit/score/src/timespecisvalid.c
+- cpukit/score/src/timespeclessthan.c
+- cpukit/score/src/timespecsubtract.c
+- cpukit/score/src/timespectoticks.c
+- cpukit/score/src/tlsallocsize.c
+- cpukit/score/src/userextaddset.c
+- cpukit/score/src/userext.c
+- cpukit/score/src/userextiterate.c
+- cpukit/score/src/userextremoveset.c
+- cpukit/score/src/watchdoginsert.c
+- cpukit/score/src/watchdogremove.c
+- cpukit/score/src/watchdogtick.c
+- cpukit/score/src/watchdogtickssinceboot.c
+- cpukit/score/src/watchdogtimeslicedefault.c
+- cpukit/score/src/wkspace.c
+- cpukit/score/src/wkspaceisunifieddefault.c
+- cpukit/score/src/wkstringduplicate.c
+target: rtemscpu
+type: build
diff --git a/spec/build/cpukit/librtemsdfltcfg.yml b/spec/build/cpukit/librtemsdfltcfg.yml
new file mode 100644
index 0000000000..aecbfd34b2
--- /dev/null
+++ b/spec/build/cpukit/librtemsdfltcfg.yml
@@ -0,0 +1,16 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: library
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by: true
+includes: []
+install: []
+install-path: ${BSP_LIBDIR}
+links: []
+source:
+- cpukit/libmisc/dummy/default-configuration.c
+target: rtemsdefaultconfig
+type: build
diff --git a/spec/build/cpukit/librtemstest.yml b/spec/build/cpukit/librtemstest.yml
new file mode 100644
index 0000000000..920ee7250c
--- /dev/null
+++ b/spec/build/cpukit/librtemstest.yml
@@ -0,0 +1,39 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: library
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by: true
+includes: []
+install: []
+install-path: ${BSP_LIBDIR}
+links: []
+source:
+- cpukit/libtest/testbeginend.c
+- cpukit/libtest/testbusy.c
+- cpukit/libtest/testextension.c
+- cpukit/libtest/testparallel.c
+- cpukit/libtest/testrun.c
+- cpukit/libtest/testwrappers.c
+- cpukit/libtest/t-test.c
+- cpukit/libtest/t-test-busy.c
+- cpukit/libtest/t-test-busy-tick.c
+- cpukit/libtest/t-test-checks.c
+- cpukit/libtest/t-test-checks-eno.c
+- cpukit/libtest/t-test-checks-psx.c
+- cpukit/libtest/t-test-hash-sha256.c
+- cpukit/libtest/t-test-interrupt.c
+- cpukit/libtest/t-test-malloc.c
+- cpukit/libtest/t-test-rtems.c
+- cpukit/libtest/t-test-rtems-context.c
+- cpukit/libtest/t-test-rtems-fds.c
+- cpukit/libtest/t-test-rtems-heap.c
+- cpukit/libtest/t-test-rtems-measure.c
+- cpukit/libtest/t-test-rtems-posix-keys.c
+- cpukit/libtest/t-test-rtems-objs.c
+- cpukit/libtest/t-test-time.c
+- cpukit/libtest/t-test-thread-switch.c
+target: rtemstest
+type: build
diff --git a/spec/build/cpukit/libtelnetd.yml b/spec/build/cpukit/libtelnetd.yml
new file mode 100644
index 0000000000..5c5c2409ec
--- /dev/null
+++ b/spec/build/cpukit/libtelnetd.yml
@@ -0,0 +1,24 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: library
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by: true
+includes:
+- cpukit/libnetworking
+install:
+- destination: ${BSP_INCLUDEDIR}/rtems
+ source:
+ - cpukit/include/rtems/telnetd.h
+install-path: ${BSP_LIBDIR}
+links: []
+source:
+- cpukit/telnetd/check_passwd.c
+- cpukit/telnetd/des.c
+- cpukit/telnetd/pty.c
+- cpukit/telnetd/telnetd.c
+- cpukit/telnetd/telnetd-init.c
+target: telnetd
+type: build
diff --git a/spec/build/cpukit/libtftpfs.yml b/spec/build/cpukit/libtftpfs.yml
new file mode 100644
index 0000000000..57c75c6639
--- /dev/null
+++ b/spec/build/cpukit/libtftpfs.yml
@@ -0,0 +1,20 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: library
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by: true
+includes:
+- cpukit/libnetworking
+install:
+- destination: ${BSP_INCLUDEDIR}/rtems
+ source:
+ - cpukit/include/rtems/tftp.h
+install-path: ${BSP_LIBDIR}
+links: []
+source:
+- cpukit/libnetworking/lib/tftpDriver.c
+target: tftpfs
+type: build
diff --git a/spec/build/cpukit/libz.yml b/spec/build/cpukit/libz.yml
new file mode 100644
index 0000000000..5e81384e28
--- /dev/null
+++ b/spec/build/cpukit/libz.yml
@@ -0,0 +1,34 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: library
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by: true
+includes: []
+install:
+- destination: ${BSP_INCLUDEDIR}
+ source:
+ - cpukit/include/zconf.h
+ - cpukit/include/zlib.h
+install-path: ${BSP_LIBDIR}
+links: []
+source:
+- cpukit/zlib/adler32.c
+- cpukit/zlib/compress.c
+- cpukit/zlib/crc32.c
+- cpukit/zlib/deflate.c
+- cpukit/zlib/gzclose.c
+- cpukit/zlib/gzlib.c
+- cpukit/zlib/gzread.c
+- cpukit/zlib/gzwrite.c
+- cpukit/zlib/infback.c
+- cpukit/zlib/inffast.c
+- cpukit/zlib/inflate.c
+- cpukit/zlib/inftrees.c
+- cpukit/zlib/trees.c
+- cpukit/zlib/uncompr.c
+- cpukit/zlib/zutil.c
+target: z
+type: build
diff --git a/spec/build/cpukit/objdbgarm.yml b/spec/build/cpukit/objdbgarm.yml
new file mode 100644
index 0000000000..4a2617334b
--- /dev/null
+++ b/spec/build/cpukit/objdbgarm.yml
@@ -0,0 +1,15 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: objects
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by:
+- arm
+includes: []
+install: []
+links: []
+source:
+- cpukit/libdebugger/rtems-debugger-arm.c
+type: build
diff --git a/spec/build/cpukit/objdbgi386.yml b/spec/build/cpukit/objdbgi386.yml
new file mode 100644
index 0000000000..ba67df5206
--- /dev/null
+++ b/spec/build/cpukit/objdbgi386.yml
@@ -0,0 +1,15 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: objects
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by:
+- i386
+includes: []
+install: []
+links: []
+source:
+- cpukit/libdebugger/rtems-debugger-i386.c
+type: build
diff --git a/spec/build/cpukit/objdl.yml b/spec/build/cpukit/objdl.yml
new file mode 100644
index 0000000000..15c7a27364
--- /dev/null
+++ b/spec/build/cpukit/objdl.yml
@@ -0,0 +1,71 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: objects
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by:
+- BUILD_LIBDL
+includes: []
+install:
+- destination: ${BSP_INCLUDEDIR}/rtems/rtl
+ source:
+ - cpukit/include/rtems/rtl/dlfcn-shell.h
+ - cpukit/include/rtems/rtl/rap-shell.h
+ - cpukit/include/rtems/rtl/rap.h
+ - cpukit/include/rtems/rtl/rtl-allocator.h
+ - cpukit/include/rtems/rtl/rtl-archive.h
+ - cpukit/include/rtems/rtl/rtl-fwd.h
+ - cpukit/include/rtems/rtl/rtl-indirect-ptr.h
+ - cpukit/include/rtems/rtl/rtl-obj-cache.h
+ - cpukit/include/rtems/rtl/rtl-obj-comp.h
+ - cpukit/include/rtems/rtl/rtl-obj-fwd.h
+ - cpukit/include/rtems/rtl/rtl-obj.h
+ - cpukit/include/rtems/rtl/rtl-shell.h
+ - cpukit/include/rtems/rtl/rtl-sym.h
+ - cpukit/include/rtems/rtl/rtl-trace.h
+ - cpukit/include/rtems/rtl/rtl-unresolved.h
+ - cpukit/include/rtems/rtl/rtl.h
+links:
+- role: build-dependency
+ uid: objdlarm
+- role: build-dependency
+ uid: objdli386
+- role: build-dependency
+ uid: objdlm68k
+- role: build-dependency
+ uid: objdlmips
+- role: build-dependency
+ uid: objdlmoxie
+- role: build-dependency
+ uid: objdlpowerpc
+- role: build-dependency
+ uid: objdlsparc
+source:
+- cpukit/libdl/dlfcn.c
+- cpukit/libdl/dlfcn-shell.c
+- cpukit/libdl/fastlz.c
+- cpukit/libdl/rap.c
+- cpukit/libdl/rap-shell.c
+- cpukit/libdl/rtl-allocator.c
+- cpukit/libdl/rtl-alloc-heap.c
+- cpukit/libdl/rtl-archive.c
+- cpukit/libdl/rtl-bit-alloc.c
+- cpukit/libdl/rtl.c
+- cpukit/libdl/rtl-chain-iterator.c
+- cpukit/libdl/rtl-debugger.c
+- cpukit/libdl/rtl-elf.c
+- cpukit/libdl/rtl-error.c
+- cpukit/libdl/rtl-find-file.c
+- cpukit/libdl/rtl-obj.c
+- cpukit/libdl/rtl-obj-cache.c
+- cpukit/libdl/rtl-obj-comp.c
+- cpukit/libdl/rtl-rap.c
+- cpukit/libdl/rtl-shell.c
+- cpukit/libdl/rtl-string.c
+- cpukit/libdl/rtl-sym.c
+- cpukit/libdl/rtl-trace.c
+- cpukit/libdl/rtl-unresolved.c
+- cpukit/libdl/rtl-unwind-dw2.c
+type: build
diff --git a/spec/build/cpukit/objdlarm.yml b/spec/build/cpukit/objdlarm.yml
new file mode 100644
index 0000000000..6edb3653f2
--- /dev/null
+++ b/spec/build/cpukit/objdlarm.yml
@@ -0,0 +1,15 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: objects
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by:
+- arm
+includes: []
+install: []
+links: []
+source:
+- cpukit/libdl/rtl-mdreloc-arm.c
+type: build
diff --git a/spec/build/cpukit/objdli386.yml b/spec/build/cpukit/objdli386.yml
new file mode 100644
index 0000000000..33c81d654e
--- /dev/null
+++ b/spec/build/cpukit/objdli386.yml
@@ -0,0 +1,15 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: objects
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by:
+- i386
+includes: []
+install: []
+links: []
+source:
+- cpukit/libdl/rtl-mdreloc-i386.c
+type: build
diff --git a/spec/build/cpukit/objdlm68k.yml b/spec/build/cpukit/objdlm68k.yml
new file mode 100644
index 0000000000..7e4bbc09ff
--- /dev/null
+++ b/spec/build/cpukit/objdlm68k.yml
@@ -0,0 +1,15 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: objects
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by:
+- m68k
+includes: []
+install: []
+links: []
+source:
+- cpukit/libdl/rtl-mdreloc-m68k.c
+type: build
diff --git a/spec/build/cpukit/objdlmips.yml b/spec/build/cpukit/objdlmips.yml
new file mode 100644
index 0000000000..83509aa510
--- /dev/null
+++ b/spec/build/cpukit/objdlmips.yml
@@ -0,0 +1,15 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: objects
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by:
+- mips
+includes: []
+install: []
+links: []
+source:
+- cpukit/libdl/rtl-mdreloc-mips.c
+type: build
diff --git a/spec/build/cpukit/objdlmoxie.yml b/spec/build/cpukit/objdlmoxie.yml
new file mode 100644
index 0000000000..96a46c7835
--- /dev/null
+++ b/spec/build/cpukit/objdlmoxie.yml
@@ -0,0 +1,15 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: objects
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by:
+- moxie
+includes: []
+install: []
+links: []
+source:
+- cpukit/libdl/rtl-mdreloc-moxie.c
+type: build
diff --git a/spec/build/cpukit/objdlpowerpc.yml b/spec/build/cpukit/objdlpowerpc.yml
new file mode 100644
index 0000000000..b9861de14c
--- /dev/null
+++ b/spec/build/cpukit/objdlpowerpc.yml
@@ -0,0 +1,15 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: objects
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by:
+- powerpc
+includes: []
+install: []
+links: []
+source:
+- cpukit/libdl/rtl-mdreloc-powerpc.c
+type: build
diff --git a/spec/build/cpukit/objdlsparc.yml b/spec/build/cpukit/objdlsparc.yml
new file mode 100644
index 0000000000..b4bd969081
--- /dev/null
+++ b/spec/build/cpukit/objdlsparc.yml
@@ -0,0 +1,15 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: objects
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by:
+- sparc
+includes: []
+install: []
+links: []
+source:
+- cpukit/libdl/rtl-mdreloc-sparc.c
+type: build
diff --git a/spec/build/cpukit/objdrvmgr.yml b/spec/build/cpukit/objdrvmgr.yml
new file mode 100644
index 0000000000..49af08f22e
--- /dev/null
+++ b/spec/build/cpukit/objdrvmgr.yml
@@ -0,0 +1,40 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: objects
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by:
+- riscv
+- sparc
+includes: []
+install:
+- destination: ${BSP_INCLUDEDIR}/drvmgr
+ source:
+ - cpukit/include/drvmgr/drvmgr.h
+ - cpukit/include/drvmgr/drvmgr_confdefs.h
+ - cpukit/include/drvmgr/drvmgr_list.h
+ - cpukit/include/drvmgr/pci_bus.h
+links: []
+source:
+- cpukit/libdrvmgr/drvmgr_by_id.c
+- cpukit/libdrvmgr/drvmgr_by_name.c
+- cpukit/libdrvmgr/drvmgr.c
+- cpukit/libdrvmgr/drvmgr_dev_by_name.c
+- cpukit/libdrvmgr/drvmgr_drvinf.c
+- cpukit/libdrvmgr/drvmgr_for_each_dev.c
+- cpukit/libdrvmgr/drvmgr_for_each_list_dev.c
+- cpukit/libdrvmgr/drvmgr_func.c
+- cpukit/libdrvmgr/drvmgr_func_call.c
+- cpukit/libdrvmgr/drvmgr_init.c
+- cpukit/libdrvmgr/drvmgr_list.c
+- cpukit/libdrvmgr/drvmgr_lock.c
+- cpukit/libdrvmgr/drvmgr_print.c
+- cpukit/libdrvmgr/drvmgr_res.c
+- cpukit/libdrvmgr/drvmgr_rw.c
+- cpukit/libdrvmgr/drvmgr_translate.c
+- cpukit/libdrvmgr/drvmgr_translate_check.c
+- cpukit/libdrvmgr/drvmgr_unregister.c
+- cpukit/libmisc/shell/main_drvmgr.c
+type: build
diff --git a/spec/build/cpukit/objgnat.yml b/spec/build/cpukit/objgnat.yml
new file mode 100644
index 0000000000..a52c884486
--- /dev/null
+++ b/spec/build/cpukit/objgnat.yml
@@ -0,0 +1,16 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: objects
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by:
+- __RTEMS_ADA__
+includes: []
+install: []
+links: []
+source:
+- cpukit/libgnat/ada_intrsupp.c
+- cpukit/libgnat/adasupp.c
+type: build
diff --git a/spec/build/cpukit/objmpci.yml b/spec/build/cpukit/objmpci.yml
new file mode 100644
index 0000000000..24cfca9888
--- /dev/null
+++ b/spec/build/cpukit/objmpci.yml
@@ -0,0 +1,26 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: objects
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by:
+- RTEMS_MULTIPROCESSING
+includes: []
+install: []
+links: []
+source:
+- cpukit/libmisc/monitor/mon-mpci.c
+- cpukit/rtems/src/eventmp.c
+- cpukit/rtems/src/mp.c
+- cpukit/rtems/src/msgmp.c
+- cpukit/rtems/src/partmp.c
+- cpukit/rtems/src/semmp.c
+- cpukit/rtems/src/signalmp.c
+- cpukit/rtems/src/taskmp.c
+- cpukit/score/src/mpci.c
+- cpukit/score/src/mpcidefault.c
+- cpukit/score/src/objectmp.c
+- cpukit/score/src/threadmp.c
+type: build
diff --git a/spec/build/cpukit/objnet.yml b/spec/build/cpukit/objnet.yml
new file mode 100644
index 0000000000..2957673ed2
--- /dev/null
+++ b/spec/build/cpukit/objnet.yml
@@ -0,0 +1,315 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: objects
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by:
+- RTEMS_NETWORKING
+includes:
+- cpukit/libnetworking
+install:
+- destination: ${BSP_INCLUDEDIR}
+ source:
+ - cpukit/libnetworking/ifaddrs.h
+ - cpukit/libnetworking/librtemsNfs.h
+ - cpukit/libnetworking/loop.h
+ - cpukit/libnetworking/resolv.h
+- destination: ${BSP_INCLUDEDIR}/arpa
+ source:
+ - cpukit/libnetworking/arpa/nameser.h
+ - cpukit/libnetworking/arpa/nameser_compat.h
+- destination: ${BSP_INCLUDEDIR}/dev/mii
+ source:
+ - cpukit/libnetworking/dev/mii/mii.h
+- destination: ${BSP_INCLUDEDIR}/machine
+ source:
+ - cpukit/libnetworking/machine/_align.h
+ - cpukit/libnetworking/machine/_kernel_if.h
+ - cpukit/libnetworking/machine/_kernel_lock.h
+ - cpukit/libnetworking/machine/_kernel_socket.h
+ - cpukit/libnetworking/machine/cpu.h
+ - cpukit/libnetworking/machine/cpufunc.h
+ - cpukit/libnetworking/machine/in_cksum.h
+ - cpukit/libnetworking/machine/limits.h
+ - cpukit/libnetworking/machine/vmparam.h
+- destination: ${BSP_INCLUDEDIR}/net
+ source:
+ - cpukit/libnetworking/net/bpf.h
+ - cpukit/libnetworking/net/ethernet.h
+ - cpukit/libnetworking/net/if_arp.h
+ - cpukit/libnetworking/net/if_dl.h
+ - cpukit/libnetworking/net/if_llc.h
+ - cpukit/libnetworking/net/if_media.h
+ - cpukit/libnetworking/net/if_ppp.h
+ - cpukit/libnetworking/net/if_pppvar.h
+ - cpukit/libnetworking/net/if_types.h
+ - cpukit/libnetworking/net/if_var.h
+ - cpukit/libnetworking/net/netisr.h
+ - cpukit/libnetworking/net/ppp_comp.h
+ - cpukit/libnetworking/net/ppp_defs.h
+ - cpukit/libnetworking/net/radix.h
+ - cpukit/libnetworking/net/raw_cb.h
+ - cpukit/libnetworking/net/route.h
+ - cpukit/libnetworking/net/slcompress.h
+- destination: ${BSP_INCLUDEDIR}/netinet
+ source:
+ - cpukit/libnetworking/netinet/icmp_var.h
+ - cpukit/libnetworking/netinet/if_ether.h
+ - cpukit/libnetworking/netinet/igmp.h
+ - cpukit/libnetworking/netinet/igmp_var.h
+ - cpukit/libnetworking/netinet/in_pcb.h
+ - cpukit/libnetworking/netinet/in_systm.h
+ - cpukit/libnetworking/netinet/in_var.h
+ - cpukit/libnetworking/netinet/ip.h
+ - cpukit/libnetworking/netinet/ip_fw.h
+ - cpukit/libnetworking/netinet/ip_icmp.h
+ - cpukit/libnetworking/netinet/ip_mroute.h
+ - cpukit/libnetworking/netinet/ip_var.h
+ - cpukit/libnetworking/netinet/tcp_debug.h
+ - cpukit/libnetworking/netinet/tcp_fsm.h
+ - cpukit/libnetworking/netinet/tcp_seq.h
+ - cpukit/libnetworking/netinet/tcp_timer.h
+ - cpukit/libnetworking/netinet/tcp_var.h
+ - cpukit/libnetworking/netinet/tcpip.h
+ - cpukit/libnetworking/netinet/udp.h
+ - cpukit/libnetworking/netinet/udp_var.h
+- destination: ${BSP_INCLUDEDIR}/nfs
+ source:
+ - cpukit/libnetworking/nfs/nfsproto.h
+ - cpukit/libnetworking/nfs/rpcv2.h
+ - cpukit/libnetworking/nfs/xdr_subs.h
+- destination: ${BSP_INCLUDEDIR}/nfsclient
+ source:
+ - cpukit/libnetworking/nfsclient/nfsargs.h
+ - cpukit/libnetworking/nfsclient/nfsdiskless.h
+- destination: ${BSP_INCLUDEDIR}/rpc
+ source:
+ - cpukit/libnetworking/rpc/auth.h
+ - cpukit/libnetworking/rpc/auth_unix.h
+ - cpukit/libnetworking/rpc/clnt.h
+ - cpukit/libnetworking/rpc/clnt_soc.h
+ - cpukit/libnetworking/rpc/clnt_stat.h
+ - cpukit/libnetworking/rpc/pmap_clnt.h
+ - cpukit/libnetworking/rpc/pmap_prot.h
+ - cpukit/libnetworking/rpc/pmap_rmt.h
+ - cpukit/libnetworking/rpc/rpc.h
+ - cpukit/libnetworking/rpc/rpc_com.h
+ - cpukit/libnetworking/rpc/rpc_msg.h
+ - cpukit/libnetworking/rpc/rpcent.h
+ - cpukit/libnetworking/rpc/svc.h
+ - cpukit/libnetworking/rpc/svc_auth.h
+ - cpukit/libnetworking/rpc/svc_soc.h
+ - cpukit/libnetworking/rpc/types.h
+ - cpukit/libnetworking/rpc/xdr.h
+- destination: ${BSP_INCLUDEDIR}/rtems
+ source:
+ - cpukit/libnetworking/rtems/bootp.h
+ - cpukit/libnetworking/rtems/dhcp.h
+ - cpukit/libnetworking/rtems/mkrootfs.h
+ - cpukit/libnetworking/rtems/rtems_bsdnet.h
+ - cpukit/libnetworking/rtems/rtems_bsdnet_internal.h
+ - cpukit/libnetworking/rtems/rtems_dhcp_failsafe.h
+ - cpukit/libnetworking/rtems/rtems_mii_ioctl.h
+ - cpukit/libnetworking/rtems/rtems_netdb.h
+ - cpukit/libnetworking/rtems/rtems_netinet_in.h
+ - cpukit/libnetworking/rtems/rtems_syscall.h
+- destination: ${BSP_INCLUDEDIR}/rtems/bsdnet
+ source:
+ - cpukit/libnetworking/rtems/bsdnet/_types.h
+ - cpukit/libnetworking/rtems/bsdnet/servers.h
+- destination: ${BSP_INCLUDEDIR}/sys
+ source:
+ - cpukit/libnetworking/sys/callout.h
+ - cpukit/libnetworking/sys/conf.h
+ - cpukit/libnetworking/sys/domain.h
+ - cpukit/libnetworking/sys/kernel.h
+ - cpukit/libnetworking/sys/libkern.h
+ - cpukit/libnetworking/sys/linker_set.h
+ - cpukit/libnetworking/sys/malloc.h
+ - cpukit/libnetworking/sys/mbuf.h
+ - cpukit/libnetworking/sys/mount.h
+ - cpukit/libnetworking/sys/proc.h
+ - cpukit/libnetworking/sys/protosw.h
+ - cpukit/libnetworking/sys/reboot.h
+ - cpukit/libnetworking/sys/resourcevar.h
+ - cpukit/libnetworking/sys/selinfo.h
+ - cpukit/libnetworking/sys/signalvar.h
+ - cpukit/libnetworking/sys/socketvar.h
+ - cpukit/libnetworking/sys/sysctl.h
+ - cpukit/libnetworking/sys/systm.h
+ - cpukit/libnetworking/sys/ucred.h
+- destination: ${BSP_INCLUDEDIR}/vm
+ source:
+ - cpukit/libnetworking/vm/vm.h
+ - cpukit/libnetworking/vm/vm_extern.h
+ - cpukit/libnetworking/vm/vm_kern.h
+ - cpukit/libnetworking/vm/vm_param.h
+links: []
+source:
+- cpukit/libmisc/dummy/dummy-networking.c
+- cpukit/libmisc/monitor/mon-network.c
+- cpukit/libmisc/shell/main_ifconfig.c
+- cpukit/libmisc/shell/main_netstats.c
+- cpukit/libmisc/shell/main_ping.c
+- cpukit/libmisc/shell/main_route.c
+- cpukit/libnetworking/kern/kern_mib.c
+- cpukit/libnetworking/kern/kern_subr.c
+- cpukit/libnetworking/kern/kern_sysctl.c
+- cpukit/libnetworking/kern/uipc_domain.c
+- cpukit/libnetworking/kern/uipc_mbuf.c
+- cpukit/libnetworking/kern/uipc_socket2.c
+- cpukit/libnetworking/kern/uipc_socket.c
+- cpukit/libnetworking/libc/base64.c
+- cpukit/libnetworking/libc/gethostbydns.c
+- cpukit/libnetworking/libc/gethostbyht.c
+- cpukit/libnetworking/libc/gethostbynis.c
+- cpukit/libnetworking/libc/gethostnamadr.c
+- cpukit/libnetworking/libc/getifaddrs.c
+- cpukit/libnetworking/libc/getnameinfo.c
+- cpukit/libnetworking/libc/getnetbydns.c
+- cpukit/libnetworking/libc/getnetbyht.c
+- cpukit/libnetworking/libc/getnetbynis.c
+- cpukit/libnetworking/libc/getnetnamadr.c
+- cpukit/libnetworking/libc/getproto.c
+- cpukit/libnetworking/libc/getprotoent.c
+- cpukit/libnetworking/libc/getprotoname.c
+- cpukit/libnetworking/libc/getservbyname.c
+- cpukit/libnetworking/libc/getservbyport.c
+- cpukit/libnetworking/libc/getservent.c
+- cpukit/libnetworking/libc/herror.c
+- cpukit/libnetworking/libc/if_indextoname.c
+- cpukit/libnetworking/libc/if_nameindex.c
+- cpukit/libnetworking/libc/inet_addr.c
+- cpukit/libnetworking/libc/inet_lnaof.c
+- cpukit/libnetworking/libc/inet_makeaddr.c
+- cpukit/libnetworking/libc/inet_netof.c
+- cpukit/libnetworking/libc/inet_network.c
+- cpukit/libnetworking/libc/inet_ntoa.c
+- cpukit/libnetworking/libc/inet_ntop.c
+- cpukit/libnetworking/libc/inet_pton.c
+- cpukit/libnetworking/libc/linkaddr.c
+- cpukit/libnetworking/libc/map_v4v6.c
+- cpukit/libnetworking/libc/nsap_addr.c
+- cpukit/libnetworking/libc/ns_name.c
+- cpukit/libnetworking/libc/ns_netint.c
+- cpukit/libnetworking/libc/ns_parse.c
+- cpukit/libnetworking/libc/ns_print.c
+- cpukit/libnetworking/libc/ns_ttl.c
+- cpukit/libnetworking/libc/rcmd.c
+- cpukit/libnetworking/libc/recv.c
+- cpukit/libnetworking/libc/res_comp.c
+- cpukit/libnetworking/libc/res_data.c
+- cpukit/libnetworking/libc/res_debug.c
+- cpukit/libnetworking/libc/res_init.c
+- cpukit/libnetworking/libc/res_mkquery.c
+- cpukit/libnetworking/libc/res_mkupdate.c
+- cpukit/libnetworking/libc/res_query.c
+- cpukit/libnetworking/libc/res_send.c
+- cpukit/libnetworking/libc/res_stubs.c
+- cpukit/libnetworking/libc/res_update.c
+- cpukit/libnetworking/libc/send.c
+- cpukit/libnetworking/lib/getprotoby.c
+- cpukit/libnetworking/lib/rtems_bsdnet_ntp.c
+- cpukit/libnetworking/lib/syslog.c
+- cpukit/libnetworking/net/if.c
+- cpukit/libnetworking/net/if_ethersubr.c
+- cpukit/libnetworking/net/if_loop.c
+- cpukit/libnetworking/net/if_ppp.c
+- cpukit/libnetworking/netinet/if_ether.c
+- cpukit/libnetworking/netinet/igmp.c
+- cpukit/libnetworking/netinet/in.c
+- cpukit/libnetworking/netinet/in_cksum.c
+- cpukit/libnetworking/netinet/in_pcb.c
+- cpukit/libnetworking/netinet/in_proto.c
+- cpukit/libnetworking/netinet/in_rmx.c
+- cpukit/libnetworking/netinet/ip_divert.c
+- cpukit/libnetworking/netinet/ip_fw.c
+- cpukit/libnetworking/netinet/ip_icmp.c
+- cpukit/libnetworking/netinet/ip_input.c
+- cpukit/libnetworking/netinet/ip_mroute.c
+- cpukit/libnetworking/netinet/ip_output.c
+- cpukit/libnetworking/netinet/raw_ip.c
+- cpukit/libnetworking/netinet/tcp_debug.c
+- cpukit/libnetworking/netinet/tcp_input.c
+- cpukit/libnetworking/netinet/tcp_output.c
+- cpukit/libnetworking/netinet/tcp_subr.c
+- cpukit/libnetworking/netinet/tcp_timer.c
+- cpukit/libnetworking/netinet/tcp_usrreq.c
+- cpukit/libnetworking/netinet/udp_usrreq.c
+- cpukit/libnetworking/net/ppp_tty.c
+- cpukit/libnetworking/net/radix.c
+- cpukit/libnetworking/net/raw_cb.c
+- cpukit/libnetworking/net/raw_usrreq.c
+- cpukit/libnetworking/net/route.c
+- cpukit/libnetworking/net/rtsock.c
+- cpukit/libnetworking/net/slcompress.c
+- cpukit/libnetworking/nfs/bootp_subr.c
+- cpukit/libnetworking/rtems/mkrootfs.c
+- cpukit/libnetworking/rtems/rtems_bootp.c
+- cpukit/libnetworking/rtems/rtems_bsdnet_malloc_starvation.c
+- cpukit/libnetworking/rtems/rtems_dhcp.c
+- cpukit/libnetworking/rtems/rtems_dhcp_failsafe.c
+- cpukit/libnetworking/rtems/rtems_glue.c
+- cpukit/libnetworking/rtems/rtems_malloc_mbuf.c
+- cpukit/libnetworking/rtems/rtems_mii_ioctl.c
+- cpukit/libnetworking/rtems/rtems_mii_ioctl_kern.c
+- cpukit/libnetworking/rtems/rtems_select.c
+- cpukit/libnetworking/rtems/rtems_showicmpstat.c
+- cpukit/libnetworking/rtems/rtems_showifstat.c
+- cpukit/libnetworking/rtems/rtems_showipstat.c
+- cpukit/libnetworking/rtems/rtems_showmbuf.c
+- cpukit/libnetworking/rtems/rtems_showroute.c
+- cpukit/libnetworking/rtems/rtems_showtcpstat.c
+- cpukit/libnetworking/rtems/rtems_showudpstat.c
+- cpukit/libnetworking/rtems/rtems_socketpair.c
+- cpukit/libnetworking/rtems/rtems_syscall_api.c
+- cpukit/libnetworking/rtems/rtems_syscall.c
+- cpukit/libnetworking/rtems/sghostname.c
+- cpukit/librpc/src/rpc/auth_none.c
+- cpukit/librpc/src/rpc/auth_unix.c
+- cpukit/librpc/src/rpc/authunix_prot.c
+- cpukit/librpc/src/rpc/bindresvport.c
+- cpukit/librpc/src/rpc/clnt_generic.c
+- cpukit/librpc/src/rpc/clnt_perror.c
+- cpukit/librpc/src/rpc/clnt_raw.c
+- cpukit/librpc/src/rpc/clnt_simple.c
+- cpukit/librpc/src/rpc/clnt_tcp.c
+- cpukit/librpc/src/rpc/clnt_udp.c
+- cpukit/librpc/src/rpc/get_myaddress.c
+- cpukit/librpc/src/rpc/getrpcent.c
+- cpukit/librpc/src/rpc/getrpcport.c
+- cpukit/librpc/src/rpc/netname.c
+- cpukit/librpc/src/rpc/netnamer.c
+- cpukit/librpc/src/rpc/pmap_clnt.c
+- cpukit/librpc/src/rpc/pmap_getmaps.c
+- cpukit/librpc/src/rpc/pmap_getport.c
+- cpukit/librpc/src/rpc/pmap_prot2.c
+- cpukit/librpc/src/rpc/pmap_prot.c
+- cpukit/librpc/src/rpc/pmap_rmt.c
+- cpukit/librpc/src/rpc/rpc_callmsg.c
+- cpukit/librpc/src/rpc/rpc_commondata.c
+- cpukit/librpc/src/rpc/rpcdname.c
+- cpukit/librpc/src/rpc/rpc_dtablesize.c
+- cpukit/librpc/src/rpc/rpc_prot.c
+- cpukit/librpc/src/rpc/rtems_portmapper.c
+- cpukit/librpc/src/rpc/rtems_rpc.c
+- cpukit/librpc/src/rpc/rtime.c
+- cpukit/librpc/src/rpc/svc_auth.c
+- cpukit/librpc/src/rpc/svc_auth_unix.c
+- cpukit/librpc/src/rpc/svc.c
+- cpukit/librpc/src/rpc/svc_raw.c
+- cpukit/librpc/src/rpc/svc_run.c
+- cpukit/librpc/src/rpc/svc_simple.c
+- cpukit/librpc/src/rpc/svc_tcp.c
+- cpukit/librpc/src/rpc/svc_udp.c
+- cpukit/librpc/src/xdr/xdr_array.c
+- cpukit/librpc/src/xdr/xdr.c
+- cpukit/librpc/src/xdr/xdr_float.c
+- cpukit/librpc/src/xdr/xdr_mem.c
+- cpukit/librpc/src/xdr/xdr_rec.c
+- cpukit/librpc/src/xdr/xdr_reference.c
+- cpukit/librpc/src/xdr/xdr_sizeof.c
+- cpukit/librpc/src/xdr/xdr_stdio.c
+type: build
diff --git a/spec/build/cpukit/objpci.yml b/spec/build/cpukit/objpci.yml
new file mode 100644
index 0000000000..aa7e8d1d25
--- /dev/null
+++ b/spec/build/cpukit/objpci.yml
@@ -0,0 +1,48 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: objects
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by:
+- sparc
+includes: []
+install:
+- destination: ${BSP_INCLUDEDIR}/pci
+ source:
+ - cpukit/include/pci/access.h
+ - cpukit/include/pci/cfg.h
+ - cpukit/include/pci/cfg_auto.h
+ - cpukit/include/pci/cfg_peripheral.h
+ - cpukit/include/pci/cfg_read.h
+ - cpukit/include/pci/cfg_static.h
+ - cpukit/include/pci/ids.h
+ - cpukit/include/pci/ids_extra.h
+ - cpukit/include/pci/irq.h
+ - cpukit/include/pci/pcireg.h
+links: []
+source:
+- cpukit/libmisc/shell/main_pci.c
+- cpukit/libpci/pci_access.c
+- cpukit/libpci/pci_access_func.c
+- cpukit/libpci/pci_access_io.c
+- cpukit/libpci/pci_access_mem_be.c
+- cpukit/libpci/pci_access_mem.c
+- cpukit/libpci/pci_access_mem_le.c
+- cpukit/libpci/pci_bus.c
+- cpukit/libpci/pci_cfg_auto.c
+- cpukit/libpci/pci_cfg.c
+- cpukit/libpci/pci_cfg_peripheral.c
+- cpukit/libpci/pci_cfg_print_code.c
+- cpukit/libpci/pci_cfg_read.c
+- cpukit/libpci/pci_cfg_static.c
+- cpukit/libpci/pci_find.c
+- cpukit/libpci/pci_find_dev.c
+- cpukit/libpci/pci_for_each.c
+- cpukit/libpci/pci_for_each_child.c
+- cpukit/libpci/pci_for_each_dev.c
+- cpukit/libpci/pci_get_dev.c
+- cpukit/libpci/pci_irq.c
+- cpukit/libpci/pci_print.c
+type: build
diff --git a/spec/build/cpukit/objpsxsgnl.yml b/spec/build/cpukit/objpsxsgnl.yml
new file mode 100644
index 0000000000..ef28eb9e50
--- /dev/null
+++ b/spec/build/cpukit/objpsxsgnl.yml
@@ -0,0 +1,52 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: objects
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by:
+- RTEMS_POSIX_API
+includes: []
+install: []
+links: []
+source:
+- cpukit/posix/src/aio_cancel.c
+- cpukit/posix/src/aio_error.c
+- cpukit/posix/src/aio_fsync.c
+- cpukit/posix/src/aio_misc.c
+- cpukit/posix/src/aio_read.c
+- cpukit/posix/src/aio_return.c
+- cpukit/posix/src/aio_write.c
+- cpukit/posix/src/alarm.c
+- cpukit/posix/src/getitimer.c
+- cpukit/posix/src/kill.c
+- cpukit/posix/src/killinfo.c
+- cpukit/posix/src/kill_r.c
+- cpukit/posix/src/mqueuenotify.c
+- cpukit/posix/src/pause.c
+- cpukit/posix/src/psignal.c
+- cpukit/posix/src/psignalclearprocesssignals.c
+- cpukit/posix/src/psignalclearsignals.c
+- cpukit/posix/src/psignalsetprocesssignals.c
+- cpukit/posix/src/psignalunblockthread.c
+- cpukit/posix/src/psxpriorityisvalid.c
+- cpukit/posix/src/psxtimercreate.c
+- cpukit/posix/src/psxtimerdelete.c
+- cpukit/posix/src/pthreadkill.c
+- cpukit/posix/src/pthreadsigmask.c
+- cpukit/posix/src/ptimer.c
+- cpukit/posix/src/setitimer.c
+- cpukit/posix/src/sigaction.c
+- cpukit/posix/src/signal_2.c
+- cpukit/posix/src/sigpending.c
+- cpukit/posix/src/sigqueue.c
+- cpukit/posix/src/sigsuspend.c
+- cpukit/posix/src/sigtimedwait.c
+- cpukit/posix/src/sigwait.c
+- cpukit/posix/src/sigwaitinfo.c
+- cpukit/posix/src/timergetoverrun.c
+- cpukit/posix/src/timergettime.c
+- cpukit/posix/src/timersettime.c
+- cpukit/posix/src/ualarm.c
+type: build
diff --git a/spec/build/cpukit/objshell.yml b/spec/build/cpukit/objshell.yml
new file mode 100644
index 0000000000..2ddcbd3053
--- /dev/null
+++ b/spec/build/cpukit/objshell.yml
@@ -0,0 +1,115 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: objects
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by: true
+includes: []
+install: []
+links: []
+source:
+- cpukit/libmisc/shell/cat_file.c
+- cpukit/libmisc/shell/cmds.c
+- cpukit/libmisc/shell/cmp-ls.c
+- cpukit/libmisc/shell/dd-args.c
+- cpukit/libmisc/shell/dd-conv.c
+- cpukit/libmisc/shell/dd-conv_tab.c
+- cpukit/libmisc/shell/dd-misc.c
+- cpukit/libmisc/shell/dd-position.c
+- cpukit/libmisc/shell/err.c
+- cpukit/libmisc/shell/errx.c
+- cpukit/libmisc/shell/fdisk.c
+- cpukit/libmisc/shell/filemode.c
+- cpukit/libmisc/shell/fts.c
+- cpukit/libmisc/shell/hexdump-conv.c
+- cpukit/libmisc/shell/hexdump-display.c
+- cpukit/libmisc/shell/hexdump-odsyntax.c
+- cpukit/libmisc/shell/hexdump-parse.c
+- cpukit/libmisc/shell/hexsyntax.c
+- cpukit/libmisc/shell/login_check.c
+- cpukit/libmisc/shell/login_prompt.c
+- cpukit/libmisc/shell/main_alias.c
+- cpukit/libmisc/shell/main_blkstats.c
+- cpukit/libmisc/shell/main_blksync.c
+- cpukit/libmisc/shell/main_cat.c
+- cpukit/libmisc/shell/main_cd.c
+- cpukit/libmisc/shell/main_chdir.c
+- cpukit/libmisc/shell/main_chmod.c
+- cpukit/libmisc/shell/main_chroot.c
+- cpukit/libmisc/shell/main_cmdchmod.c
+- cpukit/libmisc/shell/main_cmdchown.c
+- cpukit/libmisc/shell/main_cmdls.c
+- cpukit/libmisc/shell/main_cp.c
+- cpukit/libmisc/shell/main_cpuinfo.c
+- cpukit/libmisc/shell/main_cpuuse.c
+- cpukit/libmisc/shell/main_date.c
+- cpukit/libmisc/shell/main_dd.c
+- cpukit/libmisc/shell/main_debugrfs.c
+- cpukit/libmisc/shell/main_df.c
+- cpukit/libmisc/shell/main_dir.c
+- cpukit/libmisc/shell/main_echo.c
+- cpukit/libmisc/shell/main_edit.c
+- cpukit/libmisc/shell/main_exit.c
+- cpukit/libmisc/shell/main_getenv.c
+- cpukit/libmisc/shell/main_halt.c
+- cpukit/libmisc/shell/main_help.c
+- cpukit/libmisc/shell/main_hexdump.c
+- cpukit/libmisc/shell/main_id.c
+- cpukit/libmisc/shell/main_ln.c
+- cpukit/libmisc/shell/main_logoff.c
+- cpukit/libmisc/shell/main_ls.c
+- cpukit/libmisc/shell/main_lsof.c
+- cpukit/libmisc/shell/main_mallocinfo.c
+- cpukit/libmisc/shell/main_md5.c
+- cpukit/libmisc/shell/main_mdump.c
+- cpukit/libmisc/shell/main_medit.c
+- cpukit/libmisc/shell/main_mfill.c
+- cpukit/libmisc/shell/main_mkdir.c
+- cpukit/libmisc/shell/main_mknod.c
+- cpukit/libmisc/shell/main_mkrfs.c
+- cpukit/libmisc/shell/main_mmove.c
+- cpukit/libmisc/shell/main_mount.c
+- cpukit/libmisc/shell/main_msdosfmt.c
+- cpukit/libmisc/shell/main_mv.c
+- cpukit/libmisc/shell/main_perioduse.c
+- cpukit/libmisc/shell/main_profreport.c
+- cpukit/libmisc/shell/main_pwd.c
+- cpukit/libmisc/shell/main_rm.c
+- cpukit/libmisc/shell/main_rmdir.c
+- cpukit/libmisc/shell/main_rtc.c
+- cpukit/libmisc/shell/main_rtrace.c
+- cpukit/libmisc/shell/main_setenv.c
+- cpukit/libmisc/shell/main_sleep.c
+- cpukit/libmisc/shell/main_stackuse.c
+- cpukit/libmisc/shell/main_time.c
+- cpukit/libmisc/shell/main_top.c
+- cpukit/libmisc/shell/main_tty.c
+- cpukit/libmisc/shell/main_umask.c
+- cpukit/libmisc/shell/main_unmount.c
+- cpukit/libmisc/shell/main_unsetenv.c
+- cpukit/libmisc/shell/main_whoami.c
+- cpukit/libmisc/shell/main_wkspaceinfo.c
+- cpukit/libmisc/shell/print_heapinfo.c
+- cpukit/libmisc/shell/print-ls.c
+- cpukit/libmisc/shell/pwcache.c
+- cpukit/libmisc/shell/shell.c
+- cpukit/libmisc/shell/shell_cmdset.c
+- cpukit/libmisc/shell/shellconfig.c
+- cpukit/libmisc/shell/shell_getchar.c
+- cpukit/libmisc/shell/shell_getprompt.c
+- cpukit/libmisc/shell/shell_makeargs.c
+- cpukit/libmisc/shell/shell_script.c
+- cpukit/libmisc/shell/shell-wait-for-input.c
+- cpukit/libmisc/shell/utils-cp.c
+- cpukit/libmisc/shell/utils-ls.c
+- cpukit/libmisc/shell/verr.c
+- cpukit/libmisc/shell/verrx.c
+- cpukit/libmisc/shell/vis.c
+- cpukit/libmisc/shell/vwarn.c
+- cpukit/libmisc/shell/vwarnx.c
+- cpukit/libmisc/shell/warn.c
+- cpukit/libmisc/shell/warnx.c
+- cpukit/libmisc/shell/write_file.c
+type: build
diff --git a/spec/build/cpukit/objsmp.yml b/spec/build/cpukit/objsmp.yml
new file mode 100644
index 0000000000..1eb1faa3d6
--- /dev/null
+++ b/spec/build/cpukit/objsmp.yml
@@ -0,0 +1,31 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: objects
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by:
+- RTEMS_SMP
+includes: []
+install: []
+links: []
+source:
+- cpukit/score/src/percpustatewait.c
+- cpukit/score/src/profilingsmplock.c
+- cpukit/score/src/schedulerdefaultaskforhelp.c
+- cpukit/score/src/schedulerdefaultpinunpin.c
+- cpukit/score/src/schedulerdefaultsetaffinity.c
+- cpukit/score/src/scheduleredfsmp.c
+- cpukit/score/src/schedulerpriorityaffinitysmp.c
+- cpukit/score/src/schedulerprioritysmp.c
+- cpukit/score/src/schedulersimplesmp.c
+- cpukit/score/src/schedulersmp.c
+- cpukit/score/src/schedulersmpstartidle.c
+- cpukit/score/src/schedulerstrongapa.c
+- cpukit/score/src/smp.c
+- cpukit/score/src/smplock.c
+- cpukit/score/src/smpmulticastaction.c
+- cpukit/score/src/smpunicastaction.c
+- cpukit/score/src/threadunpin.c
+type: build
diff --git a/spec/build/cpukit/objutf8.yml b/spec/build/cpukit/objutf8.yml
new file mode 100644
index 0000000000..b38575c5f3
--- /dev/null
+++ b/spec/build/cpukit/objutf8.yml
@@ -0,0 +1,17 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: objects
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by: true
+includes: []
+install:
+- destination: ${BSP_INCLUDEDIR}/utf8proc
+ source:
+ - cpukit/include/utf8proc/utf8proc.h
+links: []
+source:
+- cpukit/libmisc/utf8proc/utf8proc.c
+type: build
diff --git a/spec/build/cpukit/optada.yml b/spec/build/cpukit/optada.yml
new file mode 100644
index 0000000000..df3111feaa
--- /dev/null
+++ b/spec/build/cpukit/optada.yml
@@ -0,0 +1,16 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+actions:
+- get-boolean: null
+- env-enable: null
+- define-condition: null
+build-type: option
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+default: false
+default-by-variant: []
+description: |
+ Enable the Ada support
+enabled-by: true
+links: []
+name: __RTEMS_ADA__
+type: build
diff --git a/spec/build/cpukit/optarchbits.yml b/spec/build/cpukit/optarchbits.yml
new file mode 100644
index 0000000000..ac9a1f19cd
--- /dev/null
+++ b/spec/build/cpukit/optarchbits.yml
@@ -0,0 +1,28 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+actions:
+- get-string: null
+- split: null
+- env-append: null
+build-type: option
+copyrights:
+- Copyright (C) 2020 Hesham Almatary <Hesham.Almatary@cl.cam.ac.uk>
+default: ''
+default-by-variant:
+- value:
+ - '64'
+ variants:
+ - riscv/rv64.*
+- value:
+ - '32'
+ variants:
+ - riscv/griscv
+ - riscv/rv32.*
+description: The architecture word bits for the clang target triple.
+enabled-by:
+- and:
+ - riscv
+ - clang
+format: '{}'
+links: []
+name: ARCH_BITS
+type: build
diff --git a/spec/build/cpukit/optarflags.yml b/spec/build/cpukit/optarflags.yml
new file mode 100644
index 0000000000..52a55544c2
--- /dev/null
+++ b/spec/build/cpukit/optarflags.yml
@@ -0,0 +1,17 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+actions:
+- get-string: null
+- split: null
+- env-assign: ARFLAGS
+build-type: option
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+default:
+- crD
+default-by-variant: []
+description: |
+ Flags passed to the library archiver
+enabled-by: true
+links: []
+name: ARFLAGS
+type: build
diff --git a/spec/build/cpukit/optclang.yml b/spec/build/cpukit/optclang.yml
new file mode 100644
index 0000000000..3eaf1fed87
--- /dev/null
+++ b/spec/build/cpukit/optclang.yml
@@ -0,0 +1,45 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+actions:
+- set-value: clang
+- find-program: null
+- env-assign: AS
+- env-assign: CC
+- env-assign: LINK_CC
+- set-value: clang++
+- find-program: null
+- env-assign: CXX
+- env-assign: LINK_CXX
+- set-value: llvm-ar
+- substitute: null
+- find-program: null
+- env-assign: AR
+- set-value: clang
+- env-assign: AS
+- env-assign: ASM_NAME
+- set-value:
+ - -c
+ - -o
+- env-assign: AS_TGT_F
+- set-value:
+ - -o
+- env-assign: ASLNK_TGT_F
+- set-value: --target=${ARCH}${ARCH_BITS}-unknown-rtems${__RTEMS_MAJOR__}
+- substitute: null
+- env-append: ABI_FLAGS
+- script: |
+ load = "ar asm clang clang++"
+ if not is_windows_host:
+ load += " gccdeps"
+ conf.load(load)
+build-type: option
+copyrights:
+- Copyright (C) 2020 Hesham Almatary <Hesham.Almatary@cl.cam.ac.uk>
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+default: null
+default-by-variant: []
+description: ''
+enabled-by:
+- clang
+links: []
+name: clang
+type: build
diff --git a/spec/build/cpukit/optdebug.yml b/spec/build/cpukit/optdebug.yml
new file mode 100644
index 0000000000..2c976a2f49
--- /dev/null
+++ b/spec/build/cpukit/optdebug.yml
@@ -0,0 +1,16 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+actions:
+- get-boolean: null
+- env-enable: null
+- define-condition: null
+build-type: option
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+default: false
+default-by-variant: []
+description: |
+ Enable the RTEMS internal debug support
+enabled-by: true
+links: []
+name: RTEMS_DEBUG
+type: build
diff --git a/spec/build/cpukit/optdrvmgr.yml b/spec/build/cpukit/optdrvmgr.yml
new file mode 100644
index 0000000000..f39313704c
--- /dev/null
+++ b/spec/build/cpukit/optdrvmgr.yml
@@ -0,0 +1,16 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+actions:
+- get-boolean: null
+- env-enable: null
+- define-condition: null
+build-type: option
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+default: false
+default-by-variant: []
+description: |
+ Enable the Driver Manager startup
+enabled-by: true
+links: []
+name: RTEMS_DRVMGR_STARTUP
+type: build
diff --git a/spec/build/cpukit/optgcc.yml b/spec/build/cpukit/optgcc.yml
new file mode 100644
index 0000000000..1e72232700
--- /dev/null
+++ b/spec/build/cpukit/optgcc.yml
@@ -0,0 +1,40 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+actions:
+- set-value: ${ARCH}-rtems${__RTEMS_MAJOR__}-gcc
+- substitute: null
+- find-program: null
+- env-assign: AS
+- env-assign: CC
+- env-assign: LINK_CC
+- set-value: ${ARCH}-rtems${__RTEMS_MAJOR__}-g++
+- substitute: null
+- find-program: null
+- env-assign: CXX
+- env-assign: LINK_CXX
+- set-value: ${ARCH}-rtems${__RTEMS_MAJOR__}-ar
+- substitute: null
+- find-program: null
+- env-assign: AR
+- set-value: ${ARCH}-rtems${__RTEMS_MAJOR__}-ld
+- substitute: null
+- find-program: null
+- env-assign: LD
+- script: |
+ load = "ar g++ gas gcc"
+ if not is_windows_host:
+ load += " gccdeps"
+ conf.load(load)
+- set-value: -qrtems
+- env-append: LDFLAGS
+- env-append: PKGCONFIG_LDFLAGS
+build-type: option
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+default: null
+default-by-variant: []
+description: ''
+enabled-by:
+- gcc
+links: []
+name: GCC
+type: build
diff --git a/spec/build/cpukit/optincludes.yml b/spec/build/cpukit/optincludes.yml
new file mode 100644
index 0000000000..dffd71eba8
--- /dev/null
+++ b/spec/build/cpukit/optincludes.yml
@@ -0,0 +1,15 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+actions:
+- set-value: cpukit/include cpukit/score/cpu/${ARCH}/include
+- substitute: null
+- env-assign: null
+build-type: option
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+default: null
+default-by-variant: []
+description: ''
+enabled-by: true
+links: []
+name: ARCH_INCLUDES
+type: build
diff --git a/spec/build/cpukit/optinstall.yml b/spec/build/cpukit/optinstall.yml
new file mode 100644
index 0000000000..6b39f95e85
--- /dev/null
+++ b/spec/build/cpukit/optinstall.yml
@@ -0,0 +1,21 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+actions:
+- set-value: ${PREFIX}/${ARCH}-rtems${__RTEMS_MAJOR__}/${BSP_NAME}
+- substitute: null
+- env-assign: BSP_PREFIX
+- set-value: ${BSP_PREFIX}/lib
+- substitute: null
+- env-assign: BSP_LIBDIR
+- set-value: ${BSP_LIBDIR}/include
+- substitute: null
+- env-assign: BSP_INCLUDEDIR
+build-type: option
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+default: null
+default-by-variant: []
+description: ''
+enabled-by: true
+links: []
+name: INSTALL
+type: build
diff --git a/spec/build/cpukit/optlibdl.yml b/spec/build/cpukit/optlibdl.yml
new file mode 100644
index 0000000000..8b9f5e1209
--- /dev/null
+++ b/spec/build/cpukit/optlibdl.yml
@@ -0,0 +1,21 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+actions:
+- set-value: true
+- env-enable: null
+build-type: option
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+default: null
+default-by-variant: []
+description: ''
+enabled-by:
+- arm
+- i386
+- m68k
+- mips
+- moxie
+- powerpc
+- sparc
+links: []
+name: BUILD_LIBDL
+type: build
diff --git a/spec/build/cpukit/optmpci.yml b/spec/build/cpukit/optmpci.yml
new file mode 100644
index 0000000000..cf72cf4b6e
--- /dev/null
+++ b/spec/build/cpukit/optmpci.yml
@@ -0,0 +1,16 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+actions:
+- get-boolean: null
+- env-enable: null
+- define-condition: null
+build-type: option
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+default: false
+default-by-variant: []
+description: |
+ Enable the message passing based multiprocessing support (MPCI); do not confuse this with the SMP support
+enabled-by: true
+links: []
+name: RTEMS_MULTIPROCESSING
+type: build
diff --git a/spec/build/cpukit/optnet.yml b/spec/build/cpukit/optnet.yml
new file mode 100644
index 0000000000..8678c8dbb8
--- /dev/null
+++ b/spec/build/cpukit/optnet.yml
@@ -0,0 +1,16 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+actions:
+- get-boolean: null
+- env-enable: null
+- define-condition: null
+build-type: option
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+default: false
+default-by-variant: []
+description: |
+ Enable the legacy TCP/IP network support
+enabled-by: true
+links: []
+name: RTEMS_NETWORKING
+type: build
diff --git a/spec/build/cpukit/optnewlib.yml b/spec/build/cpukit/optnewlib.yml
new file mode 100644
index 0000000000..a35156cafa
--- /dev/null
+++ b/spec/build/cpukit/optnewlib.yml
@@ -0,0 +1,16 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+actions:
+- get-boolean: null
+- env-enable: null
+- define-condition: null
+build-type: option
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+default: true
+default-by-variant: []
+description: |
+ Enable the Newlib C library support
+enabled-by: true
+links: []
+name: RTEMS_NEWLIB
+type: build
diff --git a/spec/build/cpukit/optparavirt.yml b/spec/build/cpukit/optparavirt.yml
new file mode 100644
index 0000000000..3a06ce7930
--- /dev/null
+++ b/spec/build/cpukit/optparavirt.yml
@@ -0,0 +1,16 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+actions:
+- get-boolean: null
+- env-enable: null
+- define-condition: null
+build-type: option
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+default: false
+default-by-variant: []
+description: |
+ Enable the para-virtualization support
+enabled-by: true
+links: []
+name: RTEMS_PARAVIRT
+type: build
diff --git a/spec/build/cpukit/optposix.yml b/spec/build/cpukit/optposix.yml
new file mode 100644
index 0000000000..15f6abc2a2
--- /dev/null
+++ b/spec/build/cpukit/optposix.yml
@@ -0,0 +1,16 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+actions:
+- get-boolean: null
+- env-enable: null
+- define-condition: null
+build-type: option
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+default: false
+default-by-variant: []
+description: |
+ Enable support for POSIX signals
+enabled-by: true
+links: []
+name: RTEMS_POSIX_API
+type: build
diff --git a/spec/build/cpukit/optsmp.yml b/spec/build/cpukit/optsmp.yml
new file mode 100644
index 0000000000..138837e575
--- /dev/null
+++ b/spec/build/cpukit/optsmp.yml
@@ -0,0 +1,16 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+actions:
+- get-boolean: null
+- env-enable: null
+- define-condition: null
+build-type: option
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+default: false
+default-by-variant: []
+description: |
+ Enable the Symmetric Multiprocessing (SMP) support
+enabled-by: true
+links: []
+name: RTEMS_SMP
+type: build
diff --git a/spec/build/cpukit/optszblkcnt.yml b/spec/build/cpukit/optszblkcnt.yml
new file mode 100644
index 0000000000..292c27c89b
--- /dev/null
+++ b/spec/build/cpukit/optszblkcnt.yml
@@ -0,0 +1,15 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+actions:
+- set-value: 4
+- env-assign: null
+- define: null
+build-type: option
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+default: null
+default-by-variant: []
+description: ''
+enabled-by: true
+links: []
+name: __RTEMS_SIZEOF_BLKCNT_T__
+type: build
diff --git a/spec/build/cpukit/optszblksize.yml b/spec/build/cpukit/optszblksize.yml
new file mode 100644
index 0000000000..4e11f51106
--- /dev/null
+++ b/spec/build/cpukit/optszblksize.yml
@@ -0,0 +1,15 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+actions:
+- set-value: 4
+- env-assign: null
+- define: null
+build-type: option
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+default: null
+default-by-variant: []
+description: ''
+enabled-by: true
+links: []
+name: __RTEMS_SIZEOF_BLKSIZE_T__
+type: build
diff --git a/spec/build/cpukit/optszmode.yml b/spec/build/cpukit/optszmode.yml
new file mode 100644
index 0000000000..d9e19ec814
--- /dev/null
+++ b/spec/build/cpukit/optszmode.yml
@@ -0,0 +1,15 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+actions:
+- set-value: 4
+- env-assign: null
+- define: null
+build-type: option
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+default: null
+default-by-variant: []
+description: ''
+enabled-by: true
+links: []
+name: __RTEMS_SIZEOF_MODE_T__
+type: build
diff --git a/spec/build/cpukit/optszoff.yml b/spec/build/cpukit/optszoff.yml
new file mode 100644
index 0000000000..49e9231dd3
--- /dev/null
+++ b/spec/build/cpukit/optszoff.yml
@@ -0,0 +1,15 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+actions:
+- set-value: 8
+- env-assign: null
+- define: null
+build-type: option
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+default: null
+default-by-variant: []
+description: ''
+enabled-by: true
+links: []
+name: __RTEMS_SIZEOF_OFF_T__
+type: build
diff --git a/spec/build/cpukit/optsztime.yml b/spec/build/cpukit/optsztime.yml
new file mode 100644
index 0000000000..85564321ca
--- /dev/null
+++ b/spec/build/cpukit/optsztime.yml
@@ -0,0 +1,15 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+actions:
+- set-value: 8
+- env-assign: null
+- define: null
+build-type: option
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+default: null
+default-by-variant: []
+description: ''
+enabled-by: true
+links: []
+name: __RTEMS_SIZEOF_TIME_T__
+type: build
diff --git a/spec/build/cpukit/optvermaj.yml b/spec/build/cpukit/optvermaj.yml
new file mode 100644
index 0000000000..2596e6ef6a
--- /dev/null
+++ b/spec/build/cpukit/optvermaj.yml
@@ -0,0 +1,14 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+actions:
+- set-value: '6'
+- env-assign: null
+build-type: option
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+default: null
+default-by-variant: []
+description: ''
+enabled-by: true
+links: []
+name: __RTEMS_MAJOR__
+type: build
diff --git a/spec/build/cpukit/optvermin.yml b/spec/build/cpukit/optvermin.yml
new file mode 100644
index 0000000000..29c01a7c91
--- /dev/null
+++ b/spec/build/cpukit/optvermin.yml
@@ -0,0 +1,14 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+actions:
+- set-value: '0'
+- env-assign: null
+build-type: option
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+default: null
+default-by-variant: []
+description: ''
+enabled-by: true
+links: []
+name: __RTEMS_MINOR__
+type: build
diff --git a/spec/build/cpukit/optverrev.yml b/spec/build/cpukit/optverrev.yml
new file mode 100644
index 0000000000..cbe7fecc66
--- /dev/null
+++ b/spec/build/cpukit/optverrev.yml
@@ -0,0 +1,14 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+actions:
+- set-value: '0'
+- env-assign: null
+build-type: option
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+default: null
+default-by-variant: []
+description: ''
+enabled-by: true
+links: []
+name: __RTEMS_REVISION__
+type: build
diff --git a/spec/build/cpukit/optversion.yml b/spec/build/cpukit/optversion.yml
new file mode 100644
index 0000000000..98a765e724
--- /dev/null
+++ b/spec/build/cpukit/optversion.yml
@@ -0,0 +1,25 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+actions:
+- set-value: ${__RTEMS_MAJOR__}
+- substitute: null
+- define-unquoted: __RTEMS_MAJOR__
+- set-value: ${__RTEMS_MINOR__}
+- substitute: null
+- define-unquoted: __RTEMS_MINOR__
+- set-value: ${__RTEMS_REVISION__}
+- substitute: null
+- define-unquoted: __RTEMS_REVISION__
+- set-value: ${__RTEMS_MAJOR__}.${__RTEMS_MINOR__}.${__RTEMS_REVISION__}
+- substitute: null
+- env-assign: null
+- define: null
+build-type: option
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+default: null
+default-by-variant: []
+description: ''
+enabled-by: true
+links: []
+name: RTEMS_VERSION
+type: build
diff --git a/spec/build/cpukit/optwarn.yml b/spec/build/cpukit/optwarn.yml
new file mode 100644
index 0000000000..fd97ec35b7
--- /dev/null
+++ b/spec/build/cpukit/optwarn.yml
@@ -0,0 +1,19 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+actions:
+- get-string: null
+- split: null
+- env-assign: null
+- env-append: CFLAGS
+- env-append: CXXFLAGS
+build-type: option
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+default:
+- -Wall
+default-by-variant: []
+description: |
+ Warning flags passed to the C and C++ compiler
+enabled-by: true
+links: []
+name: WARNING_FLAGS
+type: build
diff --git a/spec/build/cpukit/optwarncc.yml b/spec/build/cpukit/optwarncc.yml
new file mode 100644
index 0000000000..4992c36110
--- /dev/null
+++ b/spec/build/cpukit/optwarncc.yml
@@ -0,0 +1,21 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+actions:
+- get-string: null
+- split: null
+- env-assign: null
+- env-append: CFLAGS
+build-type: option
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+default:
+- -Wmissing-prototypes
+- -Wimplicit-function-declaration
+- -Wstrict-prototypes
+- -Wnested-externs
+default-by-variant: []
+description: |
+ Warning flags passed to the C compiler
+enabled-by: true
+links: []
+name: CC_WARNING_FLAGS
+type: build
diff --git a/spec/build/cpukit/optwarncxx.yml b/spec/build/cpukit/optwarncxx.yml
new file mode 100644
index 0000000000..cd05555923
--- /dev/null
+++ b/spec/build/cpukit/optwarncxx.yml
@@ -0,0 +1,17 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+actions:
+- get-string: null
+- split: null
+- env-assign: null
+- env-append: CXXFLAGS
+build-type: option
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+default: []
+default-by-variant: []
+description: |
+ Warning flags passed to the C++ compiler
+enabled-by: true
+links: []
+name: CXX_WARNING_FLAGS
+type: build
diff --git a/spec/build/cpukit/vckey.yml b/spec/build/cpukit/vckey.yml
new file mode 100644
index 0000000000..3a782be624
--- /dev/null
+++ b/spec/build/cpukit/vckey.yml
@@ -0,0 +1,12 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: script
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+do-build: |
+ VersionControlKeyHeader.write(bld, "cpukit/include/version-vc-key.h")
+do-configure: null
+enabled-by: true
+links: []
+prepare-build: null
+prepare-configure: null
+type: build
diff --git a/spec/build/grp.yml b/spec/build/grp.yml
new file mode 100644
index 0000000000..7ba22d105d
--- /dev/null
+++ b/spec/build/grp.yml
@@ -0,0 +1,16 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: group
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+enabled-by: true
+includes: []
+install: []
+ldflags: []
+links:
+- role: build-dependency
+ uid: cpukit/grp
+- role: build-dependency
+ uid: testsuites/grp
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/ada/adabasesp.yml b/spec/build/testsuites/ada/adabasesp.yml
new file mode 100644
index 0000000000..4b22cae263
--- /dev/null
+++ b/spec/build/testsuites/ada/adabasesp.yml
@@ -0,0 +1,23 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+ada-main: testsuites/ada/samples/base_sp/base_sp.adb
+ada-object-directory: testsuites/ada/samples/base_sp
+adaflags: []
+adaincludes:
+- cpukit/include/adainclude
+- testsuites/ada/support
+build-type: ada-test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+enabled-by: true
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/ada/samples/base_sp/init.c
+stlib: []
+target: testsuites/ada/ada_base_sp.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/ada/adahello.yml b/spec/build/testsuites/ada/adahello.yml
new file mode 100644
index 0000000000..379d252578
--- /dev/null
+++ b/spec/build/testsuites/ada/adahello.yml
@@ -0,0 +1,23 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+ada-main: testsuites/ada/samples/hello/hello.adb
+ada-object-directory: testsuites/ada/samples/hello
+adaflags: []
+adaincludes:
+- cpukit/include/adainclude
+- testsuites/ada/support
+build-type: ada-test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+enabled-by: true
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/ada/samples/hello/init.c
+stlib: []
+target: testsuites/ada/ada_hello.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/ada/adamp01node1.yml b/spec/build/testsuites/ada/adamp01node1.yml
new file mode 100644
index 0000000000..e3991d4cf6
--- /dev/null
+++ b/spec/build/testsuites/ada/adamp01node1.yml
@@ -0,0 +1,25 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+ada-main: testsuites/ada/mptests/mp01/node1/mp01_node1.adb
+ada-object-directory: testsuites/ada/mptests/mp01/node1
+adaflags: []
+adaincludes:
+- cpukit/include/adainclude
+- testsuites/ada/support
+- testsuites/ada/mptests/mp01
+build-type: ada-test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+enabled-by:
+- RTEMS_MULTIPROCESSING
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/ada/mptests/mp01/node1/init.c
+stlib: []
+target: testsuites/ada/ada_mp01_node1.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/ada/adamp01node2.yml b/spec/build/testsuites/ada/adamp01node2.yml
new file mode 100644
index 0000000000..a27e8fa164
--- /dev/null
+++ b/spec/build/testsuites/ada/adamp01node2.yml
@@ -0,0 +1,25 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+ada-main: testsuites/ada/mptests/mp01/node2/mp01_node2.adb
+ada-object-directory: testsuites/ada/mptests/mp01/node2
+adaflags: []
+adaincludes:
+- cpukit/include/adainclude
+- testsuites/ada/support
+- testsuites/ada/mptests/mp01
+build-type: ada-test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+enabled-by:
+- RTEMS_MULTIPROCESSING
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/ada/mptests/mp01/node2/init.c
+stlib: []
+target: testsuites/ada/ada_mp01_node2.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/ada/adamp03node1.yml b/spec/build/testsuites/ada/adamp03node1.yml
new file mode 100644
index 0000000000..7702b2ee8d
--- /dev/null
+++ b/spec/build/testsuites/ada/adamp03node1.yml
@@ -0,0 +1,25 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+ada-main: testsuites/ada/mptests/mp03/node1/mp03_node1.adb
+ada-object-directory: testsuites/ada/mptests/mp03/node1
+adaflags: []
+adaincludes:
+- cpukit/include/adainclude
+- testsuites/ada/support
+- testsuites/ada/mptests/mp03
+build-type: ada-test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+enabled-by:
+- RTEMS_MULTIPROCESSING
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/ada/mptests/mp03/node1/init.c
+stlib: []
+target: testsuites/ada/ada_mp03_node1.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/ada/adamp03node2.yml b/spec/build/testsuites/ada/adamp03node2.yml
new file mode 100644
index 0000000000..5e689afe7b
--- /dev/null
+++ b/spec/build/testsuites/ada/adamp03node2.yml
@@ -0,0 +1,25 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+ada-main: testsuites/ada/mptests/mp03/node2/mp03_node2.adb
+ada-object-directory: testsuites/ada/mptests/mp03/node2
+adaflags: []
+adaincludes:
+- cpukit/include/adainclude
+- testsuites/ada/support
+- testsuites/ada/mptests/mp03
+build-type: ada-test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+enabled-by:
+- RTEMS_MULTIPROCESSING
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/ada/mptests/mp03/node2/init.c
+stlib: []
+target: testsuites/ada/ada_mp03_node2.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/ada/adamp04node1.yml b/spec/build/testsuites/ada/adamp04node1.yml
new file mode 100644
index 0000000000..396d48ab25
--- /dev/null
+++ b/spec/build/testsuites/ada/adamp04node1.yml
@@ -0,0 +1,25 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+ada-main: testsuites/ada/mptests/mp04/node1/mp04_node1.adb
+ada-object-directory: testsuites/ada/mptests/mp04/node1
+adaflags: []
+adaincludes:
+- cpukit/include/adainclude
+- testsuites/ada/support
+- testsuites/ada/mptests/mp04
+build-type: ada-test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+enabled-by:
+- RTEMS_MULTIPROCESSING
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/ada/mptests/mp04/node1/init.c
+stlib: []
+target: testsuites/ada/ada_mp04_node1.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/ada/adamp04node2.yml b/spec/build/testsuites/ada/adamp04node2.yml
new file mode 100644
index 0000000000..36a576374a
--- /dev/null
+++ b/spec/build/testsuites/ada/adamp04node2.yml
@@ -0,0 +1,25 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+ada-main: testsuites/ada/mptests/mp04/node2/mp04_node2.adb
+ada-object-directory: testsuites/ada/mptests/mp04/node2
+adaflags: []
+adaincludes:
+- cpukit/include/adainclude
+- testsuites/ada/support
+- testsuites/ada/mptests/mp04
+build-type: ada-test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+enabled-by:
+- RTEMS_MULTIPROCESSING
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/ada/mptests/mp04/node2/init.c
+stlib: []
+target: testsuites/ada/ada_mp04_node2.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/ada/adamp05node1.yml b/spec/build/testsuites/ada/adamp05node1.yml
new file mode 100644
index 0000000000..0b4935555a
--- /dev/null
+++ b/spec/build/testsuites/ada/adamp05node1.yml
@@ -0,0 +1,25 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+ada-main: testsuites/ada/mptests/mp05/node1/mp05_node1.adb
+ada-object-directory: testsuites/ada/mptests/mp05/node1
+adaflags: []
+adaincludes:
+- cpukit/include/adainclude
+- testsuites/ada/support
+- testsuites/ada/mptests/mp05
+build-type: ada-test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+enabled-by:
+- RTEMS_MULTIPROCESSING
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/ada/mptests/mp05/node1/init.c
+stlib: []
+target: testsuites/ada/ada_mp05_node1.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/ada/adamp05node2.yml b/spec/build/testsuites/ada/adamp05node2.yml
new file mode 100644
index 0000000000..f71a7dbe9a
--- /dev/null
+++ b/spec/build/testsuites/ada/adamp05node2.yml
@@ -0,0 +1,25 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+ada-main: testsuites/ada/mptests/mp05/node2/mp05_node2.adb
+ada-object-directory: testsuites/ada/mptests/mp05/node2
+adaflags: []
+adaincludes:
+- cpukit/include/adainclude
+- testsuites/ada/support
+- testsuites/ada/mptests/mp05
+build-type: ada-test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+enabled-by:
+- RTEMS_MULTIPROCESSING
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/ada/mptests/mp05/node2/init.c
+stlib: []
+target: testsuites/ada/ada_mp05_node2.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/ada/adamp06node1.yml b/spec/build/testsuites/ada/adamp06node1.yml
new file mode 100644
index 0000000000..23a5c5cd19
--- /dev/null
+++ b/spec/build/testsuites/ada/adamp06node1.yml
@@ -0,0 +1,25 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+ada-main: testsuites/ada/mptests/mp06/node1/mp06_node1.adb
+ada-object-directory: testsuites/ada/mptests/mp06/node1
+adaflags: []
+adaincludes:
+- cpukit/include/adainclude
+- testsuites/ada/support
+- testsuites/ada/mptests/mp06
+build-type: ada-test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+enabled-by:
+- RTEMS_MULTIPROCESSING
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/ada/mptests/mp06/node1/init.c
+stlib: []
+target: testsuites/ada/ada_mp06_node1.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/ada/adamp06node2.yml b/spec/build/testsuites/ada/adamp06node2.yml
new file mode 100644
index 0000000000..4b6f6ea2d0
--- /dev/null
+++ b/spec/build/testsuites/ada/adamp06node2.yml
@@ -0,0 +1,25 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+ada-main: testsuites/ada/mptests/mp06/node2/mp06_node2.adb
+ada-object-directory: testsuites/ada/mptests/mp06/node2
+adaflags: []
+adaincludes:
+- cpukit/include/adainclude
+- testsuites/ada/support
+- testsuites/ada/mptests/mp06
+build-type: ada-test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+enabled-by:
+- RTEMS_MULTIPROCESSING
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/ada/mptests/mp06/node2/init.c
+stlib: []
+target: testsuites/ada/ada_mp06_node2.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/ada/adamp07node1.yml b/spec/build/testsuites/ada/adamp07node1.yml
new file mode 100644
index 0000000000..28940341e5
--- /dev/null
+++ b/spec/build/testsuites/ada/adamp07node1.yml
@@ -0,0 +1,25 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+ada-main: testsuites/ada/mptests/mp07/node1/mp07_node1.adb
+ada-object-directory: testsuites/ada/mptests/mp07/node1
+adaflags: []
+adaincludes:
+- cpukit/include/adainclude
+- testsuites/ada/support
+- testsuites/ada/mptests/mp07
+build-type: ada-test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+enabled-by:
+- RTEMS_MULTIPROCESSING
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/ada/mptests/mp07/node1/init.c
+stlib: []
+target: testsuites/ada/ada_mp07_node1.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/ada/adamp07node2.yml b/spec/build/testsuites/ada/adamp07node2.yml
new file mode 100644
index 0000000000..9aba0f81de
--- /dev/null
+++ b/spec/build/testsuites/ada/adamp07node2.yml
@@ -0,0 +1,25 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+ada-main: testsuites/ada/mptests/mp07/node2/mp07_node2.adb
+ada-object-directory: testsuites/ada/mptests/mp07/node2
+adaflags: []
+adaincludes:
+- cpukit/include/adainclude
+- testsuites/ada/support
+- testsuites/ada/mptests/mp07
+build-type: ada-test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+enabled-by:
+- RTEMS_MULTIPROCESSING
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/ada/mptests/mp07/node2/init.c
+stlib: []
+target: testsuites/ada/ada_mp07_node2.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/ada/adamp08node1.yml b/spec/build/testsuites/ada/adamp08node1.yml
new file mode 100644
index 0000000000..2ee9c77f39
--- /dev/null
+++ b/spec/build/testsuites/ada/adamp08node1.yml
@@ -0,0 +1,25 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+ada-main: testsuites/ada/mptests/mp08/node1/mp08_node1.adb
+ada-object-directory: testsuites/ada/mptests/mp08/node1
+adaflags: []
+adaincludes:
+- cpukit/include/adainclude
+- testsuites/ada/support
+- testsuites/ada/mptests/mp08
+build-type: ada-test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+enabled-by:
+- RTEMS_MULTIPROCESSING
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/ada/mptests/mp08/node1/init.c
+stlib: []
+target: testsuites/ada/ada_mp08_node1.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/ada/adamp08node2.yml b/spec/build/testsuites/ada/adamp08node2.yml
new file mode 100644
index 0000000000..e55d8cccd3
--- /dev/null
+++ b/spec/build/testsuites/ada/adamp08node2.yml
@@ -0,0 +1,25 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+ada-main: testsuites/ada/mptests/mp08/node2/mp08_node2.adb
+ada-object-directory: testsuites/ada/mptests/mp08/node2
+adaflags: []
+adaincludes:
+- cpukit/include/adainclude
+- testsuites/ada/support
+- testsuites/ada/mptests/mp08
+build-type: ada-test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+enabled-by:
+- RTEMS_MULTIPROCESSING
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/ada/mptests/mp08/node2/init.c
+stlib: []
+target: testsuites/ada/ada_mp08_node2.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/ada/adamp09node1.yml b/spec/build/testsuites/ada/adamp09node1.yml
new file mode 100644
index 0000000000..76235948e8
--- /dev/null
+++ b/spec/build/testsuites/ada/adamp09node1.yml
@@ -0,0 +1,25 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+ada-main: testsuites/ada/mptests/mp09/node1/mp09_node1.adb
+ada-object-directory: testsuites/ada/mptests/mp09/node1
+adaflags: []
+adaincludes:
+- cpukit/include/adainclude
+- testsuites/ada/support
+- testsuites/ada/mptests/mp09
+build-type: ada-test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+enabled-by:
+- RTEMS_MULTIPROCESSING
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/ada/mptests/mp09/node1/init.c
+stlib: []
+target: testsuites/ada/ada_mp09_node1.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/ada/adamp09node2.yml b/spec/build/testsuites/ada/adamp09node2.yml
new file mode 100644
index 0000000000..f117c82dc0
--- /dev/null
+++ b/spec/build/testsuites/ada/adamp09node2.yml
@@ -0,0 +1,25 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+ada-main: testsuites/ada/mptests/mp09/node2/mp09_node2.adb
+ada-object-directory: testsuites/ada/mptests/mp09/node2
+adaflags: []
+adaincludes:
+- cpukit/include/adainclude
+- testsuites/ada/support
+- testsuites/ada/mptests/mp09
+build-type: ada-test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+enabled-by:
+- RTEMS_MULTIPROCESSING
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/ada/mptests/mp09/node2/init.c
+stlib: []
+target: testsuites/ada/ada_mp09_node2.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/ada/adamp10node1.yml b/spec/build/testsuites/ada/adamp10node1.yml
new file mode 100644
index 0000000000..4ff7981270
--- /dev/null
+++ b/spec/build/testsuites/ada/adamp10node1.yml
@@ -0,0 +1,25 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+ada-main: testsuites/ada/mptests/mp10/node1/mp10_node1.adb
+ada-object-directory: testsuites/ada/mptests/mp10/node1
+adaflags: []
+adaincludes:
+- cpukit/include/adainclude
+- testsuites/ada/support
+- testsuites/ada/mptests/mp10
+build-type: ada-test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+enabled-by:
+- RTEMS_MULTIPROCESSING
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/ada/mptests/mp10/node1/init.c
+stlib: []
+target: testsuites/ada/ada_mp10_node1.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/ada/adamp10node2.yml b/spec/build/testsuites/ada/adamp10node2.yml
new file mode 100644
index 0000000000..fbe59f6d3f
--- /dev/null
+++ b/spec/build/testsuites/ada/adamp10node2.yml
@@ -0,0 +1,25 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+ada-main: testsuites/ada/mptests/mp10/node2/mp10_node2.adb
+ada-object-directory: testsuites/ada/mptests/mp10/node2
+adaflags: []
+adaincludes:
+- cpukit/include/adainclude
+- testsuites/ada/support
+- testsuites/ada/mptests/mp10
+build-type: ada-test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+enabled-by:
+- RTEMS_MULTIPROCESSING
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/ada/mptests/mp10/node2/init.c
+stlib: []
+target: testsuites/ada/ada_mp10_node2.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/ada/adamp11node1.yml b/spec/build/testsuites/ada/adamp11node1.yml
new file mode 100644
index 0000000000..d16fd1b62a
--- /dev/null
+++ b/spec/build/testsuites/ada/adamp11node1.yml
@@ -0,0 +1,25 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+ada-main: testsuites/ada/mptests/mp11/node1/mp11_node1.adb
+ada-object-directory: testsuites/ada/mptests/mp11/node1
+adaflags: []
+adaincludes:
+- cpukit/include/adainclude
+- testsuites/ada/support
+- testsuites/ada/mptests/mp11
+build-type: ada-test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+enabled-by:
+- RTEMS_MULTIPROCESSING
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/ada/mptests/mp11/node1/init.c
+stlib: []
+target: testsuites/ada/ada_mp11_node1.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/ada/adamp11node2.yml b/spec/build/testsuites/ada/adamp11node2.yml
new file mode 100644
index 0000000000..7f94e5cea0
--- /dev/null
+++ b/spec/build/testsuites/ada/adamp11node2.yml
@@ -0,0 +1,25 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+ada-main: testsuites/ada/mptests/mp11/node2/mp11_node2.adb
+ada-object-directory: testsuites/ada/mptests/mp11/node2
+adaflags: []
+adaincludes:
+- cpukit/include/adainclude
+- testsuites/ada/support
+- testsuites/ada/mptests/mp11
+build-type: ada-test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+enabled-by:
+- RTEMS_MULTIPROCESSING
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/ada/mptests/mp11/node2/init.c
+stlib: []
+target: testsuites/ada/ada_mp11_node2.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/ada/adamp12node1.yml b/spec/build/testsuites/ada/adamp12node1.yml
new file mode 100644
index 0000000000..fc81bfed14
--- /dev/null
+++ b/spec/build/testsuites/ada/adamp12node1.yml
@@ -0,0 +1,25 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+ada-main: testsuites/ada/mptests/mp12/node1/mp12_node1.adb
+ada-object-directory: testsuites/ada/mptests/mp12/node1
+adaflags: []
+adaincludes:
+- cpukit/include/adainclude
+- testsuites/ada/support
+- testsuites/ada/mptests/mp12
+build-type: ada-test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+enabled-by:
+- RTEMS_MULTIPROCESSING
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/ada/mptests/mp12/node1/init.c
+stlib: []
+target: testsuites/ada/ada_mp12_node1.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/ada/adamp12node2.yml b/spec/build/testsuites/ada/adamp12node2.yml
new file mode 100644
index 0000000000..3817ff83cd
--- /dev/null
+++ b/spec/build/testsuites/ada/adamp12node2.yml
@@ -0,0 +1,25 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+ada-main: testsuites/ada/mptests/mp12/node2/mp12_node2.adb
+ada-object-directory: testsuites/ada/mptests/mp12/node2
+adaflags: []
+adaincludes:
+- cpukit/include/adainclude
+- testsuites/ada/support
+- testsuites/ada/mptests/mp12
+build-type: ada-test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+enabled-by:
+- RTEMS_MULTIPROCESSING
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/ada/mptests/mp12/node2/init.c
+stlib: []
+target: testsuites/ada/ada_mp12_node2.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/ada/adamp13node1.yml b/spec/build/testsuites/ada/adamp13node1.yml
new file mode 100644
index 0000000000..947f89b652
--- /dev/null
+++ b/spec/build/testsuites/ada/adamp13node1.yml
@@ -0,0 +1,25 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+ada-main: testsuites/ada/mptests/mp13/node1/mp13_node1.adb
+ada-object-directory: testsuites/ada/mptests/mp13/node1
+adaflags: []
+adaincludes:
+- cpukit/include/adainclude
+- testsuites/ada/support
+- testsuites/ada/mptests/mp13
+build-type: ada-test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+enabled-by:
+- RTEMS_MULTIPROCESSING
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/ada/mptests/mp13/node1/init.c
+stlib: []
+target: testsuites/ada/ada_mp13_node1.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/ada/adamp13node2.yml b/spec/build/testsuites/ada/adamp13node2.yml
new file mode 100644
index 0000000000..5fe7bfa421
--- /dev/null
+++ b/spec/build/testsuites/ada/adamp13node2.yml
@@ -0,0 +1,25 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+ada-main: testsuites/ada/mptests/mp13/node2/mp13_node2.adb
+ada-object-directory: testsuites/ada/mptests/mp13/node2
+adaflags: []
+adaincludes:
+- cpukit/include/adainclude
+- testsuites/ada/support
+- testsuites/ada/mptests/mp13
+build-type: ada-test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+enabled-by:
+- RTEMS_MULTIPROCESSING
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/ada/mptests/mp13/node2/init.c
+stlib: []
+target: testsuites/ada/ada_mp13_node2.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/ada/adamp14node1.yml b/spec/build/testsuites/ada/adamp14node1.yml
new file mode 100644
index 0000000000..e6a753c4ad
--- /dev/null
+++ b/spec/build/testsuites/ada/adamp14node1.yml
@@ -0,0 +1,25 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+ada-main: testsuites/ada/mptests/mp14/node1/mp14_node1.adb
+ada-object-directory: testsuites/ada/mptests/mp14/node1
+adaflags: []
+adaincludes:
+- cpukit/include/adainclude
+- testsuites/ada/support
+- testsuites/ada/mptests/mp14
+build-type: ada-test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+enabled-by:
+- RTEMS_MULTIPROCESSING
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/ada/mptests/mp14/node1/init.c
+stlib: []
+target: testsuites/ada/ada_mp14_node1.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/ada/adamp14node2.yml b/spec/build/testsuites/ada/adamp14node2.yml
new file mode 100644
index 0000000000..1bdf3284aa
--- /dev/null
+++ b/spec/build/testsuites/ada/adamp14node2.yml
@@ -0,0 +1,25 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+ada-main: testsuites/ada/mptests/mp14/node2/mp14_node2.adb
+ada-object-directory: testsuites/ada/mptests/mp14/node2
+adaflags: []
+adaincludes:
+- cpukit/include/adainclude
+- testsuites/ada/support
+- testsuites/ada/mptests/mp14
+build-type: ada-test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+enabled-by:
+- RTEMS_MULTIPROCESSING
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/ada/mptests/mp14/node2/init.c
+stlib: []
+target: testsuites/ada/ada_mp14_node2.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/ada/adansecs.yml b/spec/build/testsuites/ada/adansecs.yml
new file mode 100644
index 0000000000..088baf2cc3
--- /dev/null
+++ b/spec/build/testsuites/ada/adansecs.yml
@@ -0,0 +1,23 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+ada-main: testsuites/ada/samples/nsecs/nsecs.adb
+ada-object-directory: testsuites/ada/samples/nsecs
+adaflags: []
+adaincludes:
+- cpukit/include/adainclude
+- testsuites/ada/support
+build-type: ada-test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+enabled-by: true
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/ada/samples/nsecs/init.c
+stlib: []
+target: testsuites/ada/ada_nsecs.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/ada/adasp01.yml b/spec/build/testsuites/ada/adasp01.yml
new file mode 100644
index 0000000000..2992e1eab7
--- /dev/null
+++ b/spec/build/testsuites/ada/adasp01.yml
@@ -0,0 +1,23 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+ada-main: testsuites/ada/sptests/sp01/sp01.adb
+ada-object-directory: testsuites/ada/sptests/sp01
+adaflags: []
+adaincludes:
+- cpukit/include/adainclude
+- testsuites/ada/support
+build-type: ada-test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+enabled-by: true
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/ada/sptests/sp01/init.c
+stlib: []
+target: testsuites/ada/ada_sp01.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/ada/adasp02.yml b/spec/build/testsuites/ada/adasp02.yml
new file mode 100644
index 0000000000..238b0ef71d
--- /dev/null
+++ b/spec/build/testsuites/ada/adasp02.yml
@@ -0,0 +1,23 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+ada-main: testsuites/ada/sptests/sp02/sp02.adb
+ada-object-directory: testsuites/ada/sptests/sp02
+adaflags: []
+adaincludes:
+- cpukit/include/adainclude
+- testsuites/ada/support
+build-type: ada-test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+enabled-by: true
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/ada/sptests/sp02/init.c
+stlib: []
+target: testsuites/ada/ada_sp02.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/ada/adasp03.yml b/spec/build/testsuites/ada/adasp03.yml
new file mode 100644
index 0000000000..7083244b93
--- /dev/null
+++ b/spec/build/testsuites/ada/adasp03.yml
@@ -0,0 +1,23 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+ada-main: testsuites/ada/sptests/sp03/sp03.adb
+ada-object-directory: testsuites/ada/sptests/sp03
+adaflags: []
+adaincludes:
+- cpukit/include/adainclude
+- testsuites/ada/support
+build-type: ada-test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+enabled-by: true
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/ada/sptests/sp03/init.c
+stlib: []
+target: testsuites/ada/ada_sp03.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/ada/adasp04.yml b/spec/build/testsuites/ada/adasp04.yml
new file mode 100644
index 0000000000..f6bf5b7837
--- /dev/null
+++ b/spec/build/testsuites/ada/adasp04.yml
@@ -0,0 +1,23 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+ada-main: testsuites/ada/sptests/sp04/sp04.adb
+ada-object-directory: testsuites/ada/sptests/sp04
+adaflags: []
+adaincludes:
+- cpukit/include/adainclude
+- testsuites/ada/support
+build-type: ada-test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+enabled-by: true
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/ada/sptests/sp04/init.c
+stlib: []
+target: testsuites/ada/ada_sp04.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/ada/adasp05.yml b/spec/build/testsuites/ada/adasp05.yml
new file mode 100644
index 0000000000..b2ee7bb3be
--- /dev/null
+++ b/spec/build/testsuites/ada/adasp05.yml
@@ -0,0 +1,23 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+ada-main: testsuites/ada/sptests/sp05/sp05.adb
+ada-object-directory: testsuites/ada/sptests/sp05
+adaflags: []
+adaincludes:
+- cpukit/include/adainclude
+- testsuites/ada/support
+build-type: ada-test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+enabled-by: true
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/ada/sptests/sp05/init.c
+stlib: []
+target: testsuites/ada/ada_sp05.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/ada/adasp06.yml b/spec/build/testsuites/ada/adasp06.yml
new file mode 100644
index 0000000000..d837c29e88
--- /dev/null
+++ b/spec/build/testsuites/ada/adasp06.yml
@@ -0,0 +1,23 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+ada-main: testsuites/ada/sptests/sp06/sp06.adb
+ada-object-directory: testsuites/ada/sptests/sp06
+adaflags: []
+adaincludes:
+- cpukit/include/adainclude
+- testsuites/ada/support
+build-type: ada-test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+enabled-by: true
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/ada/sptests/sp06/init.c
+stlib: []
+target: testsuites/ada/ada_sp06.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/ada/adasp07.yml b/spec/build/testsuites/ada/adasp07.yml
new file mode 100644
index 0000000000..7a646d8d8c
--- /dev/null
+++ b/spec/build/testsuites/ada/adasp07.yml
@@ -0,0 +1,23 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+ada-main: testsuites/ada/sptests/sp07/sp07.adb
+ada-object-directory: testsuites/ada/sptests/sp07
+adaflags: []
+adaincludes:
+- cpukit/include/adainclude
+- testsuites/ada/support
+build-type: ada-test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+enabled-by: true
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/ada/sptests/sp07/init.c
+stlib: []
+target: testsuites/ada/ada_sp07.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/ada/adasp08.yml b/spec/build/testsuites/ada/adasp08.yml
new file mode 100644
index 0000000000..25a91b75c1
--- /dev/null
+++ b/spec/build/testsuites/ada/adasp08.yml
@@ -0,0 +1,23 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+ada-main: testsuites/ada/sptests/sp08/sp08.adb
+ada-object-directory: testsuites/ada/sptests/sp08
+adaflags: []
+adaincludes:
+- cpukit/include/adainclude
+- testsuites/ada/support
+build-type: ada-test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+enabled-by: true
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/ada/sptests/sp08/init.c
+stlib: []
+target: testsuites/ada/ada_sp08.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/ada/adasp09.yml b/spec/build/testsuites/ada/adasp09.yml
new file mode 100644
index 0000000000..1396562583
--- /dev/null
+++ b/spec/build/testsuites/ada/adasp09.yml
@@ -0,0 +1,23 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+ada-main: testsuites/ada/sptests/sp09/sp09.adb
+ada-object-directory: testsuites/ada/sptests/sp09
+adaflags: []
+adaincludes:
+- cpukit/include/adainclude
+- testsuites/ada/support
+build-type: ada-test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+enabled-by: true
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/ada/sptests/sp09/init.c
+stlib: []
+target: testsuites/ada/ada_sp09.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/ada/adasp11.yml b/spec/build/testsuites/ada/adasp11.yml
new file mode 100644
index 0000000000..dbd158d515
--- /dev/null
+++ b/spec/build/testsuites/ada/adasp11.yml
@@ -0,0 +1,23 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+ada-main: testsuites/ada/sptests/sp11/sp11.adb
+ada-object-directory: testsuites/ada/sptests/sp11
+adaflags: []
+adaincludes:
+- cpukit/include/adainclude
+- testsuites/ada/support
+build-type: ada-test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+enabled-by: true
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/ada/sptests/sp11/init.c
+stlib: []
+target: testsuites/ada/ada_sp11.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/ada/adasp12.yml b/spec/build/testsuites/ada/adasp12.yml
new file mode 100644
index 0000000000..2da8f47504
--- /dev/null
+++ b/spec/build/testsuites/ada/adasp12.yml
@@ -0,0 +1,23 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+ada-main: testsuites/ada/sptests/sp12/sp12.adb
+ada-object-directory: testsuites/ada/sptests/sp12
+adaflags: []
+adaincludes:
+- cpukit/include/adainclude
+- testsuites/ada/support
+build-type: ada-test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+enabled-by: true
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/ada/sptests/sp12/init.c
+stlib: []
+target: testsuites/ada/ada_sp12.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/ada/adasp13.yml b/spec/build/testsuites/ada/adasp13.yml
new file mode 100644
index 0000000000..8110a2e5dc
--- /dev/null
+++ b/spec/build/testsuites/ada/adasp13.yml
@@ -0,0 +1,23 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+ada-main: testsuites/ada/sptests/sp13/sp13.adb
+ada-object-directory: testsuites/ada/sptests/sp13
+adaflags: []
+adaincludes:
+- cpukit/include/adainclude
+- testsuites/ada/support
+build-type: ada-test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+enabled-by: true
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/ada/sptests/sp13/init.c
+stlib: []
+target: testsuites/ada/ada_sp13.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/ada/adasp14.yml b/spec/build/testsuites/ada/adasp14.yml
new file mode 100644
index 0000000000..4804d93f7b
--- /dev/null
+++ b/spec/build/testsuites/ada/adasp14.yml
@@ -0,0 +1,23 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+ada-main: testsuites/ada/sptests/sp14/sp14.adb
+ada-object-directory: testsuites/ada/sptests/sp14
+adaflags: []
+adaincludes:
+- cpukit/include/adainclude
+- testsuites/ada/support
+build-type: ada-test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+enabled-by: true
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/ada/sptests/sp14/init.c
+stlib: []
+target: testsuites/ada/ada_sp14.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/ada/adasp15.yml b/spec/build/testsuites/ada/adasp15.yml
new file mode 100644
index 0000000000..896ddff66d
--- /dev/null
+++ b/spec/build/testsuites/ada/adasp15.yml
@@ -0,0 +1,23 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+ada-main: testsuites/ada/sptests/sp15/sp15.adb
+ada-object-directory: testsuites/ada/sptests/sp15
+adaflags: []
+adaincludes:
+- cpukit/include/adainclude
+- testsuites/ada/support
+build-type: ada-test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+enabled-by: true
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/ada/sptests/sp15/init.c
+stlib: []
+target: testsuites/ada/ada_sp15.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/ada/adasp16.yml b/spec/build/testsuites/ada/adasp16.yml
new file mode 100644
index 0000000000..fa775659c5
--- /dev/null
+++ b/spec/build/testsuites/ada/adasp16.yml
@@ -0,0 +1,23 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+ada-main: testsuites/ada/sptests/sp16/sp16.adb
+ada-object-directory: testsuites/ada/sptests/sp16
+adaflags: []
+adaincludes:
+- cpukit/include/adainclude
+- testsuites/ada/support
+build-type: ada-test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+enabled-by: true
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/ada/sptests/sp16/init.c
+stlib: []
+target: testsuites/ada/ada_sp16.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/ada/adasp17.yml b/spec/build/testsuites/ada/adasp17.yml
new file mode 100644
index 0000000000..1d1be12003
--- /dev/null
+++ b/spec/build/testsuites/ada/adasp17.yml
@@ -0,0 +1,23 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+ada-main: testsuites/ada/sptests/sp17/sp17.adb
+ada-object-directory: testsuites/ada/sptests/sp17
+adaflags: []
+adaincludes:
+- cpukit/include/adainclude
+- testsuites/ada/support
+build-type: ada-test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+enabled-by: true
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/ada/sptests/sp17/init.c
+stlib: []
+target: testsuites/ada/ada_sp17.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/ada/adasp19.yml b/spec/build/testsuites/ada/adasp19.yml
new file mode 100644
index 0000000000..2c3a0b01a9
--- /dev/null
+++ b/spec/build/testsuites/ada/adasp19.yml
@@ -0,0 +1,23 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+ada-main: testsuites/ada/sptests/sp19/sp19.adb
+ada-object-directory: testsuites/ada/sptests/sp19
+adaflags: []
+adaincludes:
+- cpukit/include/adainclude
+- testsuites/ada/support
+build-type: ada-test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+enabled-by: true
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/ada/sptests/sp19/init.c
+stlib: []
+target: testsuites/ada/ada_sp19.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/ada/adasp20.yml b/spec/build/testsuites/ada/adasp20.yml
new file mode 100644
index 0000000000..52d4cf4938
--- /dev/null
+++ b/spec/build/testsuites/ada/adasp20.yml
@@ -0,0 +1,23 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+ada-main: testsuites/ada/sptests/sp20/sp20.adb
+ada-object-directory: testsuites/ada/sptests/sp20
+adaflags: []
+adaincludes:
+- cpukit/include/adainclude
+- testsuites/ada/support
+build-type: ada-test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+enabled-by: true
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/ada/sptests/sp20/init.c
+stlib: []
+target: testsuites/ada/ada_sp20.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/ada/adasp22.yml b/spec/build/testsuites/ada/adasp22.yml
new file mode 100644
index 0000000000..6f297b99eb
--- /dev/null
+++ b/spec/build/testsuites/ada/adasp22.yml
@@ -0,0 +1,23 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+ada-main: testsuites/ada/sptests/sp22/sp22.adb
+ada-object-directory: testsuites/ada/sptests/sp22
+adaflags: []
+adaincludes:
+- cpukit/include/adainclude
+- testsuites/ada/support
+build-type: ada-test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+enabled-by: true
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/ada/sptests/sp22/init.c
+stlib: []
+target: testsuites/ada/ada_sp22.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/ada/adasp23.yml b/spec/build/testsuites/ada/adasp23.yml
new file mode 100644
index 0000000000..8ca322caf5
--- /dev/null
+++ b/spec/build/testsuites/ada/adasp23.yml
@@ -0,0 +1,23 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+ada-main: testsuites/ada/sptests/sp23/sp23.adb
+ada-object-directory: testsuites/ada/sptests/sp23
+adaflags: []
+adaincludes:
+- cpukit/include/adainclude
+- testsuites/ada/support
+build-type: ada-test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+enabled-by: true
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/ada/sptests/sp23/init.c
+stlib: []
+target: testsuites/ada/ada_sp23.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/ada/adasp24.yml b/spec/build/testsuites/ada/adasp24.yml
new file mode 100644
index 0000000000..0425ec9f11
--- /dev/null
+++ b/spec/build/testsuites/ada/adasp24.yml
@@ -0,0 +1,23 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+ada-main: testsuites/ada/sptests/sp24/sp24.adb
+ada-object-directory: testsuites/ada/sptests/sp24
+adaflags: []
+adaincludes:
+- cpukit/include/adainclude
+- testsuites/ada/support
+build-type: ada-test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+enabled-by: true
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/ada/sptests/sp24/init.c
+stlib: []
+target: testsuites/ada/ada_sp24.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/ada/adasp25.yml b/spec/build/testsuites/ada/adasp25.yml
new file mode 100644
index 0000000000..14c747d1e9
--- /dev/null
+++ b/spec/build/testsuites/ada/adasp25.yml
@@ -0,0 +1,23 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+ada-main: testsuites/ada/sptests/sp25/sp25.adb
+ada-object-directory: testsuites/ada/sptests/sp25
+adaflags: []
+adaincludes:
+- cpukit/include/adainclude
+- testsuites/ada/support
+build-type: ada-test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+enabled-by: true
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/ada/sptests/sp25/init.c
+stlib: []
+target: testsuites/ada/ada_sp25.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/ada/adaspatcb01.yml b/spec/build/testsuites/ada/adaspatcb01.yml
new file mode 100644
index 0000000000..5aa34a8644
--- /dev/null
+++ b/spec/build/testsuites/ada/adaspatcb01.yml
@@ -0,0 +1,24 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+ada-main: testsuites/ada/sptests/spatcb01/spatcb01.adb
+ada-object-directory: testsuites/ada/sptests/spatcb01
+adaflags: []
+adaincludes:
+- cpukit/include/adainclude
+- testsuites/ada/support
+build-type: ada-test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+enabled-by:
+- RTEMS_POSIX_API
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/ada/sptests/spatcb01/init.c
+stlib: []
+target: testsuites/ada/ada_spatcb01.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/ada/adaspname01.yml b/spec/build/testsuites/ada/adaspname01.yml
new file mode 100644
index 0000000000..2f28f328fa
--- /dev/null
+++ b/spec/build/testsuites/ada/adaspname01.yml
@@ -0,0 +1,24 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+ada-main: testsuites/ada/sptests/spname01/spname01.adb
+ada-object-directory: testsuites/ada/sptests/spname01
+adaflags: []
+adaincludes:
+- cpukit/include/adainclude
+- testsuites/ada/support
+build-type: ada-test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+enabled-by:
+- RTEMS_POSIX_API
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/ada/sptests/spname01/init.c
+stlib: []
+target: testsuites/ada/ada_spname01.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/ada/adaticker.yml b/spec/build/testsuites/ada/adaticker.yml
new file mode 100644
index 0000000000..29e16d7924
--- /dev/null
+++ b/spec/build/testsuites/ada/adaticker.yml
@@ -0,0 +1,23 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+ada-main: testsuites/ada/samples/ticker/ticker.adb
+ada-object-directory: testsuites/ada/samples/ticker
+adaflags: []
+adaincludes:
+- cpukit/include/adainclude
+- testsuites/ada/support
+build-type: ada-test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+enabled-by: true
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/ada/samples/ticker/init.c
+stlib: []
+target: testsuites/ada/ada_ticker.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/ada/adatm01.yml b/spec/build/testsuites/ada/adatm01.yml
new file mode 100644
index 0000000000..5513a2ff0f
--- /dev/null
+++ b/spec/build/testsuites/ada/adatm01.yml
@@ -0,0 +1,23 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+ada-main: testsuites/ada/tmtests/tm01/tm01.adb
+ada-object-directory: testsuites/ada/tmtests/tm01
+adaflags: []
+adaincludes:
+- cpukit/include/adainclude
+- testsuites/ada/support
+build-type: ada-test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+enabled-by: true
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/ada/tmtests/tm01/init.c
+stlib: []
+target: testsuites/ada/ada_tm01.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/ada/adatm02.yml b/spec/build/testsuites/ada/adatm02.yml
new file mode 100644
index 0000000000..d82e803e57
--- /dev/null
+++ b/spec/build/testsuites/ada/adatm02.yml
@@ -0,0 +1,23 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+ada-main: testsuites/ada/tmtests/tm02/tm02.adb
+ada-object-directory: testsuites/ada/tmtests/tm02
+adaflags: []
+adaincludes:
+- cpukit/include/adainclude
+- testsuites/ada/support
+build-type: ada-test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+enabled-by: true
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/ada/tmtests/tm02/init.c
+stlib: []
+target: testsuites/ada/ada_tm02.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/ada/adatm03.yml b/spec/build/testsuites/ada/adatm03.yml
new file mode 100644
index 0000000000..8c659efa17
--- /dev/null
+++ b/spec/build/testsuites/ada/adatm03.yml
@@ -0,0 +1,23 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+ada-main: testsuites/ada/tmtests/tm03/tm03.adb
+ada-object-directory: testsuites/ada/tmtests/tm03
+adaflags: []
+adaincludes:
+- cpukit/include/adainclude
+- testsuites/ada/support
+build-type: ada-test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+enabled-by: true
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/ada/tmtests/tm03/init.c
+stlib: []
+target: testsuites/ada/ada_tm03.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/ada/adatm04.yml b/spec/build/testsuites/ada/adatm04.yml
new file mode 100644
index 0000000000..dfcaa24e2b
--- /dev/null
+++ b/spec/build/testsuites/ada/adatm04.yml
@@ -0,0 +1,23 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+ada-main: testsuites/ada/tmtests/tm04/tm04.adb
+ada-object-directory: testsuites/ada/tmtests/tm04
+adaflags: []
+adaincludes:
+- cpukit/include/adainclude
+- testsuites/ada/support
+build-type: ada-test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+enabled-by: true
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/ada/tmtests/tm04/init.c
+stlib: []
+target: testsuites/ada/ada_tm04.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/ada/adatm05.yml b/spec/build/testsuites/ada/adatm05.yml
new file mode 100644
index 0000000000..0af8fcfba5
--- /dev/null
+++ b/spec/build/testsuites/ada/adatm05.yml
@@ -0,0 +1,23 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+ada-main: testsuites/ada/tmtests/tm05/tm05.adb
+ada-object-directory: testsuites/ada/tmtests/tm05
+adaflags: []
+adaincludes:
+- cpukit/include/adainclude
+- testsuites/ada/support
+build-type: ada-test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+enabled-by: true
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/ada/tmtests/tm05/init.c
+stlib: []
+target: testsuites/ada/ada_tm05.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/ada/adatm06.yml b/spec/build/testsuites/ada/adatm06.yml
new file mode 100644
index 0000000000..c1d50d33db
--- /dev/null
+++ b/spec/build/testsuites/ada/adatm06.yml
@@ -0,0 +1,23 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+ada-main: testsuites/ada/tmtests/tm06/tm06.adb
+ada-object-directory: testsuites/ada/tmtests/tm06
+adaflags: []
+adaincludes:
+- cpukit/include/adainclude
+- testsuites/ada/support
+build-type: ada-test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+enabled-by: true
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/ada/tmtests/tm06/init.c
+stlib: []
+target: testsuites/ada/ada_tm06.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/ada/adatm07.yml b/spec/build/testsuites/ada/adatm07.yml
new file mode 100644
index 0000000000..6a5fc6279f
--- /dev/null
+++ b/spec/build/testsuites/ada/adatm07.yml
@@ -0,0 +1,23 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+ada-main: testsuites/ada/tmtests/tm07/tm07.adb
+ada-object-directory: testsuites/ada/tmtests/tm07
+adaflags: []
+adaincludes:
+- cpukit/include/adainclude
+- testsuites/ada/support
+build-type: ada-test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+enabled-by: true
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/ada/tmtests/tm07/init.c
+stlib: []
+target: testsuites/ada/ada_tm07.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/ada/adatm08.yml b/spec/build/testsuites/ada/adatm08.yml
new file mode 100644
index 0000000000..5661bc23e9
--- /dev/null
+++ b/spec/build/testsuites/ada/adatm08.yml
@@ -0,0 +1,23 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+ada-main: testsuites/ada/tmtests/tm08/tm08.adb
+ada-object-directory: testsuites/ada/tmtests/tm08
+adaflags: []
+adaincludes:
+- cpukit/include/adainclude
+- testsuites/ada/support
+build-type: ada-test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+enabled-by: true
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/ada/tmtests/tm08/init.c
+stlib: []
+target: testsuites/ada/ada_tm08.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/ada/adatm09.yml b/spec/build/testsuites/ada/adatm09.yml
new file mode 100644
index 0000000000..c2fed17d04
--- /dev/null
+++ b/spec/build/testsuites/ada/adatm09.yml
@@ -0,0 +1,23 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+ada-main: testsuites/ada/tmtests/tm09/tm09.adb
+ada-object-directory: testsuites/ada/tmtests/tm09
+adaflags: []
+adaincludes:
+- cpukit/include/adainclude
+- testsuites/ada/support
+build-type: ada-test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+enabled-by: true
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/ada/tmtests/tm09/init.c
+stlib: []
+target: testsuites/ada/ada_tm09.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/ada/adatm10.yml b/spec/build/testsuites/ada/adatm10.yml
new file mode 100644
index 0000000000..1fe5441527
--- /dev/null
+++ b/spec/build/testsuites/ada/adatm10.yml
@@ -0,0 +1,23 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+ada-main: testsuites/ada/tmtests/tm10/tm10.adb
+ada-object-directory: testsuites/ada/tmtests/tm10
+adaflags: []
+adaincludes:
+- cpukit/include/adainclude
+- testsuites/ada/support
+build-type: ada-test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+enabled-by: true
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/ada/tmtests/tm10/init.c
+stlib: []
+target: testsuites/ada/ada_tm10.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/ada/adatm11.yml b/spec/build/testsuites/ada/adatm11.yml
new file mode 100644
index 0000000000..cd4d590ebc
--- /dev/null
+++ b/spec/build/testsuites/ada/adatm11.yml
@@ -0,0 +1,23 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+ada-main: testsuites/ada/tmtests/tm11/tm11.adb
+ada-object-directory: testsuites/ada/tmtests/tm11
+adaflags: []
+adaincludes:
+- cpukit/include/adainclude
+- testsuites/ada/support
+build-type: ada-test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+enabled-by: true
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/ada/tmtests/tm11/init.c
+stlib: []
+target: testsuites/ada/ada_tm11.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/ada/adatm12.yml b/spec/build/testsuites/ada/adatm12.yml
new file mode 100644
index 0000000000..ab3adc576f
--- /dev/null
+++ b/spec/build/testsuites/ada/adatm12.yml
@@ -0,0 +1,23 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+ada-main: testsuites/ada/tmtests/tm12/tm12.adb
+ada-object-directory: testsuites/ada/tmtests/tm12
+adaflags: []
+adaincludes:
+- cpukit/include/adainclude
+- testsuites/ada/support
+build-type: ada-test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+enabled-by: true
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/ada/tmtests/tm12/init.c
+stlib: []
+target: testsuites/ada/ada_tm12.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/ada/adatm13.yml b/spec/build/testsuites/ada/adatm13.yml
new file mode 100644
index 0000000000..b45d3210da
--- /dev/null
+++ b/spec/build/testsuites/ada/adatm13.yml
@@ -0,0 +1,23 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+ada-main: testsuites/ada/tmtests/tm13/tm13.adb
+ada-object-directory: testsuites/ada/tmtests/tm13
+adaflags: []
+adaincludes:
+- cpukit/include/adainclude
+- testsuites/ada/support
+build-type: ada-test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+enabled-by: true
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/ada/tmtests/tm13/init.c
+stlib: []
+target: testsuites/ada/ada_tm13.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/ada/adatm14.yml b/spec/build/testsuites/ada/adatm14.yml
new file mode 100644
index 0000000000..7c8a0f1a2b
--- /dev/null
+++ b/spec/build/testsuites/ada/adatm14.yml
@@ -0,0 +1,23 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+ada-main: testsuites/ada/tmtests/tm14/tm14.adb
+ada-object-directory: testsuites/ada/tmtests/tm14
+adaflags: []
+adaincludes:
+- cpukit/include/adainclude
+- testsuites/ada/support
+build-type: ada-test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+enabled-by: true
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/ada/tmtests/tm14/init.c
+stlib: []
+target: testsuites/ada/ada_tm14.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/ada/adatm15.yml b/spec/build/testsuites/ada/adatm15.yml
new file mode 100644
index 0000000000..8f92cdd76d
--- /dev/null
+++ b/spec/build/testsuites/ada/adatm15.yml
@@ -0,0 +1,23 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+ada-main: testsuites/ada/tmtests/tm15/tm15.adb
+ada-object-directory: testsuites/ada/tmtests/tm15
+adaflags: []
+adaincludes:
+- cpukit/include/adainclude
+- testsuites/ada/support
+build-type: ada-test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+enabled-by: true
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/ada/tmtests/tm15/init.c
+stlib: []
+target: testsuites/ada/ada_tm15.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/ada/adatm16.yml b/spec/build/testsuites/ada/adatm16.yml
new file mode 100644
index 0000000000..105f9a2594
--- /dev/null
+++ b/spec/build/testsuites/ada/adatm16.yml
@@ -0,0 +1,23 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+ada-main: testsuites/ada/tmtests/tm16/tm16.adb
+ada-object-directory: testsuites/ada/tmtests/tm16
+adaflags: []
+adaincludes:
+- cpukit/include/adainclude
+- testsuites/ada/support
+build-type: ada-test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+enabled-by: true
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/ada/tmtests/tm16/init.c
+stlib: []
+target: testsuites/ada/ada_tm16.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/ada/adatm17.yml b/spec/build/testsuites/ada/adatm17.yml
new file mode 100644
index 0000000000..ac8094bb2d
--- /dev/null
+++ b/spec/build/testsuites/ada/adatm17.yml
@@ -0,0 +1,23 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+ada-main: testsuites/ada/tmtests/tm17/tm17.adb
+ada-object-directory: testsuites/ada/tmtests/tm17
+adaflags: []
+adaincludes:
+- cpukit/include/adainclude
+- testsuites/ada/support
+build-type: ada-test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+enabled-by: true
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/ada/tmtests/tm17/init.c
+stlib: []
+target: testsuites/ada/ada_tm17.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/ada/adatm18.yml b/spec/build/testsuites/ada/adatm18.yml
new file mode 100644
index 0000000000..28a5f18b23
--- /dev/null
+++ b/spec/build/testsuites/ada/adatm18.yml
@@ -0,0 +1,23 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+ada-main: testsuites/ada/tmtests/tm18/tm18.adb
+ada-object-directory: testsuites/ada/tmtests/tm18
+adaflags: []
+adaincludes:
+- cpukit/include/adainclude
+- testsuites/ada/support
+build-type: ada-test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+enabled-by: true
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/ada/tmtests/tm18/init.c
+stlib: []
+target: testsuites/ada/ada_tm18.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/ada/adatm19.yml b/spec/build/testsuites/ada/adatm19.yml
new file mode 100644
index 0000000000..782a3687e8
--- /dev/null
+++ b/spec/build/testsuites/ada/adatm19.yml
@@ -0,0 +1,23 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+ada-main: testsuites/ada/tmtests/tm19/tm19.adb
+ada-object-directory: testsuites/ada/tmtests/tm19
+adaflags: []
+adaincludes:
+- cpukit/include/adainclude
+- testsuites/ada/support
+build-type: ada-test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+enabled-by: true
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/ada/tmtests/tm19/init.c
+stlib: []
+target: testsuites/ada/ada_tm19.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/ada/adatm20.yml b/spec/build/testsuites/ada/adatm20.yml
new file mode 100644
index 0000000000..d090f683a3
--- /dev/null
+++ b/spec/build/testsuites/ada/adatm20.yml
@@ -0,0 +1,23 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+ada-main: testsuites/ada/tmtests/tm20/tm20.adb
+ada-object-directory: testsuites/ada/tmtests/tm20
+adaflags: []
+adaincludes:
+- cpukit/include/adainclude
+- testsuites/ada/support
+build-type: ada-test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+enabled-by: true
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/ada/tmtests/tm20/init.c
+stlib: []
+target: testsuites/ada/ada_tm20.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/ada/adatm21.yml b/spec/build/testsuites/ada/adatm21.yml
new file mode 100644
index 0000000000..fc77f097af
--- /dev/null
+++ b/spec/build/testsuites/ada/adatm21.yml
@@ -0,0 +1,23 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+ada-main: testsuites/ada/tmtests/tm21/tm21.adb
+ada-object-directory: testsuites/ada/tmtests/tm21
+adaflags: []
+adaincludes:
+- cpukit/include/adainclude
+- testsuites/ada/support
+build-type: ada-test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+enabled-by: true
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/ada/tmtests/tm21/init.c
+stlib: []
+target: testsuites/ada/ada_tm21.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/ada/adatm22.yml b/spec/build/testsuites/ada/adatm22.yml
new file mode 100644
index 0000000000..5654a5b596
--- /dev/null
+++ b/spec/build/testsuites/ada/adatm22.yml
@@ -0,0 +1,23 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+ada-main: testsuites/ada/tmtests/tm22/tm22.adb
+ada-object-directory: testsuites/ada/tmtests/tm22
+adaflags: []
+adaincludes:
+- cpukit/include/adainclude
+- testsuites/ada/support
+build-type: ada-test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+enabled-by: true
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/ada/tmtests/tm22/init.c
+stlib: []
+target: testsuites/ada/ada_tm22.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/ada/adatm23.yml b/spec/build/testsuites/ada/adatm23.yml
new file mode 100644
index 0000000000..f44623c0f8
--- /dev/null
+++ b/spec/build/testsuites/ada/adatm23.yml
@@ -0,0 +1,23 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+ada-main: testsuites/ada/tmtests/tm23/tm23.adb
+ada-object-directory: testsuites/ada/tmtests/tm23
+adaflags: []
+adaincludes:
+- cpukit/include/adainclude
+- testsuites/ada/support
+build-type: ada-test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+enabled-by: true
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/ada/tmtests/tm23/init.c
+stlib: []
+target: testsuites/ada/ada_tm23.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/ada/adatm24.yml b/spec/build/testsuites/ada/adatm24.yml
new file mode 100644
index 0000000000..a7985ef544
--- /dev/null
+++ b/spec/build/testsuites/ada/adatm24.yml
@@ -0,0 +1,23 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+ada-main: testsuites/ada/tmtests/tm24/tm24.adb
+ada-object-directory: testsuites/ada/tmtests/tm24
+adaflags: []
+adaincludes:
+- cpukit/include/adainclude
+- testsuites/ada/support
+build-type: ada-test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+enabled-by: true
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/ada/tmtests/tm24/init.c
+stlib: []
+target: testsuites/ada/ada_tm24.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/ada/adatm25.yml b/spec/build/testsuites/ada/adatm25.yml
new file mode 100644
index 0000000000..312eff3cd1
--- /dev/null
+++ b/spec/build/testsuites/ada/adatm25.yml
@@ -0,0 +1,23 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+ada-main: testsuites/ada/tmtests/tm25/tm25.adb
+ada-object-directory: testsuites/ada/tmtests/tm25
+adaflags: []
+adaincludes:
+- cpukit/include/adainclude
+- testsuites/ada/support
+build-type: ada-test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+enabled-by: true
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/ada/tmtests/tm25/init.c
+stlib: []
+target: testsuites/ada/ada_tm25.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/ada/adatm28.yml b/spec/build/testsuites/ada/adatm28.yml
new file mode 100644
index 0000000000..c21f26c6f9
--- /dev/null
+++ b/spec/build/testsuites/ada/adatm28.yml
@@ -0,0 +1,23 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+ada-main: testsuites/ada/tmtests/tm28/tm28.adb
+ada-object-directory: testsuites/ada/tmtests/tm28
+adaflags: []
+adaincludes:
+- cpukit/include/adainclude
+- testsuites/ada/support
+build-type: ada-test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+enabled-by: true
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/ada/tmtests/tm28/init.c
+stlib: []
+target: testsuites/ada/ada_tm28.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/ada/adatm29.yml b/spec/build/testsuites/ada/adatm29.yml
new file mode 100644
index 0000000000..365b2916f2
--- /dev/null
+++ b/spec/build/testsuites/ada/adatm29.yml
@@ -0,0 +1,23 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+ada-main: testsuites/ada/tmtests/tm29/tm29.adb
+ada-object-directory: testsuites/ada/tmtests/tm29
+adaflags: []
+adaincludes:
+- cpukit/include/adainclude
+- testsuites/ada/support
+build-type: ada-test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+enabled-by: true
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/ada/tmtests/tm29/init.c
+stlib: []
+target: testsuites/ada/ada_tm29.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/ada/adatmck.yml b/spec/build/testsuites/ada/adatmck.yml
new file mode 100644
index 0000000000..410a083293
--- /dev/null
+++ b/spec/build/testsuites/ada/adatmck.yml
@@ -0,0 +1,23 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+ada-main: testsuites/ada/tmtests/tmck/tmck.adb
+ada-object-directory: testsuites/ada/tmtests/tmck
+adaflags: []
+adaincludes:
+- cpukit/include/adainclude
+- testsuites/ada/support
+build-type: ada-test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+enabled-by: true
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/ada/tmtests/tmck/init.c
+stlib: []
+target: testsuites/ada/ada_tmck.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/ada/grp.yml b/spec/build/testsuites/ada/grp.yml
new file mode 100644
index 0000000000..ef84203d35
--- /dev/null
+++ b/spec/build/testsuites/ada/grp.yml
@@ -0,0 +1,186 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: group
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+enabled-by:
+- and:
+ - __RTEMS_ADA__
+ - or:
+ - BUILD_TESTS
+ - BUILD_ADATESTS
+includes: []
+install: []
+ldflags:
+- -Wl,--wrap=printf
+- -Wl,--wrap=puts
+links:
+- role: build-dependency
+ uid: optgnat
+- role: build-dependency
+ uid: adabasesp
+- role: build-dependency
+ uid: adahello
+- role: build-dependency
+ uid: adamp01node1
+- role: build-dependency
+ uid: adamp01node2
+- role: build-dependency
+ uid: adamp03node1
+- role: build-dependency
+ uid: adamp03node2
+- role: build-dependency
+ uid: adamp04node1
+- role: build-dependency
+ uid: adamp04node2
+- role: build-dependency
+ uid: adamp05node1
+- role: build-dependency
+ uid: adamp05node2
+- role: build-dependency
+ uid: adamp06node1
+- role: build-dependency
+ uid: adamp06node2
+- role: build-dependency
+ uid: adamp07node1
+- role: build-dependency
+ uid: adamp07node2
+- role: build-dependency
+ uid: adamp08node1
+- role: build-dependency
+ uid: adamp08node2
+- role: build-dependency
+ uid: adamp09node1
+- role: build-dependency
+ uid: adamp09node2
+- role: build-dependency
+ uid: adamp10node1
+- role: build-dependency
+ uid: adamp10node2
+- role: build-dependency
+ uid: adamp11node1
+- role: build-dependency
+ uid: adamp11node2
+- role: build-dependency
+ uid: adamp12node1
+- role: build-dependency
+ uid: adamp12node2
+- role: build-dependency
+ uid: adamp13node1
+- role: build-dependency
+ uid: adamp13node2
+- role: build-dependency
+ uid: adamp14node1
+- role: build-dependency
+ uid: adamp14node2
+- role: build-dependency
+ uid: adansecs
+- role: build-dependency
+ uid: adasp01
+- role: build-dependency
+ uid: adasp02
+- role: build-dependency
+ uid: adasp03
+- role: build-dependency
+ uid: adasp04
+- role: build-dependency
+ uid: adasp05
+- role: build-dependency
+ uid: adasp06
+- role: build-dependency
+ uid: adasp07
+- role: build-dependency
+ uid: adasp08
+- role: build-dependency
+ uid: adasp09
+- role: build-dependency
+ uid: adasp11
+- role: build-dependency
+ uid: adasp12
+- role: build-dependency
+ uid: adasp13
+- role: build-dependency
+ uid: adasp14
+- role: build-dependency
+ uid: adasp15
+- role: build-dependency
+ uid: adasp16
+- role: build-dependency
+ uid: adasp17
+- role: build-dependency
+ uid: adasp19
+- role: build-dependency
+ uid: adasp20
+- role: build-dependency
+ uid: adasp22
+- role: build-dependency
+ uid: adasp23
+- role: build-dependency
+ uid: adasp24
+- role: build-dependency
+ uid: adasp25
+- role: build-dependency
+ uid: adaspatcb01
+- role: build-dependency
+ uid: adaspname01
+- role: build-dependency
+ uid: adaticker
+- role: build-dependency
+ uid: adatm01
+- role: build-dependency
+ uid: adatm02
+- role: build-dependency
+ uid: adatm03
+- role: build-dependency
+ uid: adatm04
+- role: build-dependency
+ uid: adatm05
+- role: build-dependency
+ uid: adatm06
+- role: build-dependency
+ uid: adatm07
+- role: build-dependency
+ uid: adatm08
+- role: build-dependency
+ uid: adatm09
+- role: build-dependency
+ uid: adatm10
+- role: build-dependency
+ uid: adatm11
+- role: build-dependency
+ uid: adatm12
+- role: build-dependency
+ uid: adatm13
+- role: build-dependency
+ uid: adatm14
+- role: build-dependency
+ uid: adatm15
+- role: build-dependency
+ uid: adatm16
+- role: build-dependency
+ uid: adatm17
+- role: build-dependency
+ uid: adatm18
+- role: build-dependency
+ uid: adatm19
+- role: build-dependency
+ uid: adatm20
+- role: build-dependency
+ uid: adatm21
+- role: build-dependency
+ uid: adatm22
+- role: build-dependency
+ uid: adatm23
+- role: build-dependency
+ uid: adatm24
+- role: build-dependency
+ uid: adatm25
+- role: build-dependency
+ uid: adatm28
+- role: build-dependency
+ uid: adatm29
+- role: build-dependency
+ uid: adatmck
+type: build
+use-after:
+- rtemstest
+use-before: []
diff --git a/spec/build/testsuites/ada/optgnat.yml b/spec/build/testsuites/ada/optgnat.yml
new file mode 100644
index 0000000000..82d940b502
--- /dev/null
+++ b/spec/build/testsuites/ada/optgnat.yml
@@ -0,0 +1,15 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+actions:
+- set-value: ${ARCH}-rtems${__RTEMS_MAJOR__}-gnatmake
+- substitute: null
+- find-program: null
+- env-assign: GNATMAKE
+build-type: option
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+default: null
+default-by-variant: []
+description: ''
+enabled-by: true
+links: []
+type: build
diff --git a/spec/build/testsuites/benchmarks/dhrystone.yml b/spec/build/testsuites/benchmarks/dhrystone.yml
new file mode 100644
index 0000000000..a52a997a7e
--- /dev/null
+++ b/spec/build/testsuites/benchmarks/dhrystone.yml
@@ -0,0 +1,21 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by: true
+features: c cprogram
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/benchmarks/dhrystone/init.c
+- testsuites/benchmarks/dhrystone/dhry_1.c
+- testsuites/benchmarks/dhrystone/dhry_2.c
+stlib: []
+target: testsuites/benchmarks/dhrystone.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/benchmarks/grp.yml b/spec/build/testsuites/benchmarks/grp.yml
new file mode 100644
index 0000000000..1189ec087e
--- /dev/null
+++ b/spec/build/testsuites/benchmarks/grp.yml
@@ -0,0 +1,24 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: group
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+enabled-by:
+- BUILD_TESTS
+- BUILD_BENCHMARKS
+includes:
+- testsuites/support/include
+install: []
+ldflags:
+- -Wl,--wrap=printf
+- -Wl,--wrap=puts
+links:
+- role: build-dependency
+ uid: dhrystone
+- role: build-dependency
+ uid: linpack
+- role: build-dependency
+ uid: whetstone
+type: build
+use-after:
+- rtemstest
+use-before: []
diff --git a/spec/build/testsuites/benchmarks/linpack.yml b/spec/build/testsuites/benchmarks/linpack.yml
new file mode 100644
index 0000000000..44b2264d3f
--- /dev/null
+++ b/spec/build/testsuites/benchmarks/linpack.yml
@@ -0,0 +1,21 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by: true
+features: c cprogram
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/benchmarks/linpack/init.c
+- testsuites/benchmarks/linpack/linpack-pc.c
+stlib:
+- m
+target: testsuites/benchmarks/linpack.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/benchmarks/whetstone.yml b/spec/build/testsuites/benchmarks/whetstone.yml
new file mode 100644
index 0000000000..362e75bacc
--- /dev/null
+++ b/spec/build/testsuites/benchmarks/whetstone.yml
@@ -0,0 +1,21 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by: true
+features: c cprogram
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/benchmarks/whetstone/init.c
+- testsuites/benchmarks/whetstone/whetstone.c
+stlib:
+- m
+target: testsuites/benchmarks/whetstone.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/fstests/fsbdpart01.yml b/spec/build/testsuites/fstests/fsbdpart01.yml
new file mode 100644
index 0000000000..db5d46887e
--- /dev/null
+++ b/spec/build/testsuites/fstests/fsbdpart01.yml
@@ -0,0 +1,19 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by: true
+features: c cprogram
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/fstests/fsbdpart01/init.c
+stlib: []
+target: testsuites/fstests/fsbdpart01.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/fstests/fsclose01.yml b/spec/build/testsuites/fstests/fsclose01.yml
new file mode 100644
index 0000000000..8e69ae0f87
--- /dev/null
+++ b/spec/build/testsuites/fstests/fsclose01.yml
@@ -0,0 +1,19 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by: true
+features: c cprogram
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/fstests/fsclose01/init.c
+stlib: []
+target: testsuites/fstests/fsclose01.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/fstests/fsdosfsformat01.yml b/spec/build/testsuites/fstests/fsdosfsformat01.yml
new file mode 100644
index 0000000000..b82204e2b1
--- /dev/null
+++ b/spec/build/testsuites/fstests/fsdosfsformat01.yml
@@ -0,0 +1,19 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by: true
+features: c cprogram
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/fstests/fsdosfsformat01/init.c
+stlib: []
+target: testsuites/fstests/fsdosfsformat01.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/fstests/fsdosfsname01.yml b/spec/build/testsuites/fstests/fsdosfsname01.yml
new file mode 100644
index 0000000000..98c2da7ff5
--- /dev/null
+++ b/spec/build/testsuites/fstests/fsdosfsname01.yml
@@ -0,0 +1,19 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by: true
+features: c cprogram
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/fstests/fsdosfsname01/init.c
+stlib: []
+target: testsuites/fstests/fsdosfsname01.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/fstests/fsdosfsname02.yml b/spec/build/testsuites/fstests/fsdosfsname02.yml
new file mode 100644
index 0000000000..951ad6953b
--- /dev/null
+++ b/spec/build/testsuites/fstests/fsdosfsname02.yml
@@ -0,0 +1,19 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by: true
+features: c cprogram
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/fstests/fsdosfsname02/init.c
+stlib: []
+target: testsuites/fstests/fsdosfsname02.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/fstests/fsdosfssync01.yml b/spec/build/testsuites/fstests/fsdosfssync01.yml
new file mode 100644
index 0000000000..7ab95705e6
--- /dev/null
+++ b/spec/build/testsuites/fstests/fsdosfssync01.yml
@@ -0,0 +1,19 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by: true
+features: c cprogram
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/fstests/fsdosfssync01/init.c
+stlib: []
+target: testsuites/fstests/fsdosfssync01.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/fstests/fsdosfswrite01.yml b/spec/build/testsuites/fstests/fsdosfswrite01.yml
new file mode 100644
index 0000000000..0dee967b39
--- /dev/null
+++ b/spec/build/testsuites/fstests/fsdosfswrite01.yml
@@ -0,0 +1,19 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by: true
+features: c cprogram
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/fstests/fsdosfswrite01/init.c
+stlib: []
+target: testsuites/fstests/fsdosfswrite01.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/fstests/fsfseeko01.yml b/spec/build/testsuites/fstests/fsfseeko01.yml
new file mode 100644
index 0000000000..6e0adac790
--- /dev/null
+++ b/spec/build/testsuites/fstests/fsfseeko01.yml
@@ -0,0 +1,19 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by: true
+features: c cprogram
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/fstests/fsfseeko01/init.c
+stlib: []
+target: testsuites/fstests/fsfseeko01.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/fstests/fsimfsconfig01.yml b/spec/build/testsuites/fstests/fsimfsconfig01.yml
new file mode 100644
index 0000000000..f4aa3693e2
--- /dev/null
+++ b/spec/build/testsuites/fstests/fsimfsconfig01.yml
@@ -0,0 +1,19 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by: true
+features: c cprogram
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/fstests/fsimfsconfig01/init.c
+stlib: []
+target: testsuites/fstests/fsimfsconfig01.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/fstests/fsimfsconfig02.yml b/spec/build/testsuites/fstests/fsimfsconfig02.yml
new file mode 100644
index 0000000000..cd8c8f7941
--- /dev/null
+++ b/spec/build/testsuites/fstests/fsimfsconfig02.yml
@@ -0,0 +1,19 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by: true
+features: c cprogram
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/fstests/fsimfsconfig02/init.c
+stlib: []
+target: testsuites/fstests/fsimfsconfig02.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/fstests/fsimfsconfig03.yml b/spec/build/testsuites/fstests/fsimfsconfig03.yml
new file mode 100644
index 0000000000..6378eaee67
--- /dev/null
+++ b/spec/build/testsuites/fstests/fsimfsconfig03.yml
@@ -0,0 +1,19 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by: true
+features: c cprogram
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/fstests/fsimfsconfig03/init.c
+stlib: []
+target: testsuites/fstests/fsimfsconfig03.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/fstests/fsimfsgeneric01.yml b/spec/build/testsuites/fstests/fsimfsgeneric01.yml
new file mode 100644
index 0000000000..b10d4a456f
--- /dev/null
+++ b/spec/build/testsuites/fstests/fsimfsgeneric01.yml
@@ -0,0 +1,19 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by: true
+features: c cprogram
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/fstests/fsimfsgeneric01/init.c
+stlib: []
+target: testsuites/fstests/fsimfsgeneric01.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/fstests/fsjffs2gc01.yml b/spec/build/testsuites/fstests/fsjffs2gc01.yml
new file mode 100644
index 0000000000..c474721533
--- /dev/null
+++ b/spec/build/testsuites/fstests/fsjffs2gc01.yml
@@ -0,0 +1,23 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by: true
+features: c cprogram
+includes:
+- testsuites/fstests/jffs2_support
+ldflags: []
+links: []
+source:
+- testsuites/fstests/fsjffs2gc01/init.c
+- testsuites/fstests/jffs2_support/fs_support.c
+- testsuites/fstests/support/fstest_support.c
+stlib:
+- jffs2
+target: testsuites/fstests/fsjffs2gc01.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/fstests/fsnofs01.yml b/spec/build/testsuites/fstests/fsnofs01.yml
new file mode 100644
index 0000000000..21bef08fc8
--- /dev/null
+++ b/spec/build/testsuites/fstests/fsnofs01.yml
@@ -0,0 +1,19 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by: true
+features: c cprogram
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/fstests/fsnofs01/init.c
+stlib: []
+target: testsuites/fstests/fsnofs01.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/fstests/fsrfsbitmap01.yml b/spec/build/testsuites/fstests/fsrfsbitmap01.yml
new file mode 100644
index 0000000000..5bc6919bf9
--- /dev/null
+++ b/spec/build/testsuites/fstests/fsrfsbitmap01.yml
@@ -0,0 +1,23 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by: true
+features: c cprogram
+includes:
+- testsuites/fstests/mrfs_support
+ldflags: []
+links: []
+source:
+- testsuites/fstests/fsrfsbitmap01/test.c
+- testsuites/fstests/mrfs_support/fs_support.c
+- testsuites/fstests/support/fstest_support.c
+- testsuites/fstests/support/ramdisk_support.c
+stlib: []
+target: testsuites/fstests/fsrfsbitmap01.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/fstests/fsrofs01.yml b/spec/build/testsuites/fstests/fsrofs01.yml
new file mode 100644
index 0000000000..1d4f895a17
--- /dev/null
+++ b/spec/build/testsuites/fstests/fsrofs01.yml
@@ -0,0 +1,19 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by: true
+features: c cprogram
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/fstests/fsrofs01/init.c
+stlib: []
+target: testsuites/fstests/fsrofs01.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/fstests/grp.yml b/spec/build/testsuites/fstests/grp.yml
new file mode 100644
index 0000000000..4c987785ed
--- /dev/null
+++ b/spec/build/testsuites/fstests/grp.yml
@@ -0,0 +1,143 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: group
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+enabled-by:
+- BUILD_TESTS
+- BUILD_FSTESTS
+includes:
+- testsuites/support/include
+- testsuites/fstests/support
+install: []
+ldflags:
+- -Wl,--wrap=printf
+- -Wl,--wrap=puts
+links:
+- role: build-dependency
+ uid: libdosfs
+- role: build-dependency
+ uid: libimfs
+- role: build-dependency
+ uid: libjffs2
+- role: build-dependency
+ uid: libmimfs
+- role: build-dependency
+ uid: librfs
+- role: build-dependency
+ uid: fsbdpart01
+- role: build-dependency
+ uid: fsclose01
+- role: build-dependency
+ uid: fsdosfsformat01
+- role: build-dependency
+ uid: fsdosfsname01
+- role: build-dependency
+ uid: fsdosfsname02
+- role: build-dependency
+ uid: fsdosfssync01
+- role: build-dependency
+ uid: fsdosfswrite01
+- role: build-dependency
+ uid: fsfseeko01
+- role: build-dependency
+ uid: fsimfsconfig01
+- role: build-dependency
+ uid: fsimfsconfig02
+- role: build-dependency
+ uid: fsimfsconfig03
+- role: build-dependency
+ uid: fsimfsgeneric01
+- role: build-dependency
+ uid: fsjffs2gc01
+- role: build-dependency
+ uid: fsnofs01
+- role: build-dependency
+ uid: fsrfsbitmap01
+- role: build-dependency
+ uid: fsrofs01
+- role: build-dependency
+ uid: imfsfserror
+- role: build-dependency
+ uid: imfsfslink
+- role: build-dependency
+ uid: imfsfspatheval
+- role: build-dependency
+ uid: imfsfspermission
+- role: build-dependency
+ uid: imfsfsrdwr
+- role: build-dependency
+ uid: imfsfsscandir01
+- role: build-dependency
+ uid: imfsfssymlink
+- role: build-dependency
+ uid: imfsfstime
+- role: build-dependency
+ uid: jffs2fserror
+- role: build-dependency
+ uid: jffs2fslink
+- role: build-dependency
+ uid: jffs2fspatheval
+- role: build-dependency
+ uid: jffs2fspermission
+- role: build-dependency
+ uid: jffs2fsrdwr
+- role: build-dependency
+ uid: jffs2fsscandir01
+- role: build-dependency
+ uid: jffs2fssymlink
+- role: build-dependency
+ uid: jffs2fstime
+- role: build-dependency
+ uid: mdosfsfserror
+- role: build-dependency
+ uid: mdosfsfspatheval
+- role: build-dependency
+ uid: mdosfsfsrdwr
+- role: build-dependency
+ uid: mdosfsfsscandir01
+- role: build-dependency
+ uid: mdosfsfsstatvfs
+- role: build-dependency
+ uid: mdosfsfstime
+- role: build-dependency
+ uid: mimfsfserror
+- role: build-dependency
+ uid: mimfsfslink
+- role: build-dependency
+ uid: mimfsfspatheval
+- role: build-dependency
+ uid: mimfsfspermission
+- role: build-dependency
+ uid: mimfsfsrdwr
+- role: build-dependency
+ uid: mimfsfsrename
+- role: build-dependency
+ uid: mimfsfsscandir01
+- role: build-dependency
+ uid: mimfsfssymlink
+- role: build-dependency
+ uid: mimfsfstime
+- role: build-dependency
+ uid: mrfsfserror
+- role: build-dependency
+ uid: mrfsfsfpathconf
+- role: build-dependency
+ uid: mrfsfslink
+- role: build-dependency
+ uid: mrfsfspatheval
+- role: build-dependency
+ uid: mrfsfspermission
+- role: build-dependency
+ uid: mrfsfsrdwr
+- role: build-dependency
+ uid: mrfsfsrename
+- role: build-dependency
+ uid: mrfsfsscandir01
+- role: build-dependency
+ uid: mrfsfssymlink
+- role: build-dependency
+ uid: mrfsfstime
+type: build
+use-after: []
+use-before:
+- rtemstest
diff --git a/spec/build/testsuites/fstests/imfsfserror.yml b/spec/build/testsuites/fstests/imfsfserror.yml
new file mode 100644
index 0000000000..246ddbce02
--- /dev/null
+++ b/spec/build/testsuites/fstests/imfsfserror.yml
@@ -0,0 +1,21 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by: true
+features: c cprogram
+includes:
+- testsuites/fstests/imfs_support
+ldflags: []
+links: []
+source:
+- testsuites/fstests/fserror/test.c
+stlib: []
+target: testsuites/fstests/imfs_fserror.exe
+type: build
+use-after: []
+use-before:
+- testimfs
diff --git a/spec/build/testsuites/fstests/imfsfslink.yml b/spec/build/testsuites/fstests/imfsfslink.yml
new file mode 100644
index 0000000000..e65c943af4
--- /dev/null
+++ b/spec/build/testsuites/fstests/imfsfslink.yml
@@ -0,0 +1,21 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by: true
+features: c cprogram
+includes:
+- testsuites/fstests/imfs_support
+ldflags: []
+links: []
+source:
+- testsuites/fstests/fslink/test.c
+stlib: []
+target: testsuites/fstests/imfs_fslink.exe
+type: build
+use-after: []
+use-before:
+- testimfs
diff --git a/spec/build/testsuites/fstests/imfsfspatheval.yml b/spec/build/testsuites/fstests/imfsfspatheval.yml
new file mode 100644
index 0000000000..8192a85427
--- /dev/null
+++ b/spec/build/testsuites/fstests/imfsfspatheval.yml
@@ -0,0 +1,21 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by: true
+features: c cprogram
+includes:
+- testsuites/fstests/imfs_support
+ldflags: []
+links: []
+source:
+- testsuites/fstests/fspatheval/test.c
+stlib: []
+target: testsuites/fstests/imfs_fspatheval.exe
+type: build
+use-after: []
+use-before:
+- testimfs
diff --git a/spec/build/testsuites/fstests/imfsfspermission.yml b/spec/build/testsuites/fstests/imfsfspermission.yml
new file mode 100644
index 0000000000..99f66276fd
--- /dev/null
+++ b/spec/build/testsuites/fstests/imfsfspermission.yml
@@ -0,0 +1,21 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by: true
+features: c cprogram
+includes:
+- testsuites/fstests/imfs_support
+ldflags: []
+links: []
+source:
+- testsuites/fstests/fspermission/test.c
+stlib: []
+target: testsuites/fstests/imfs_fspermission.exe
+type: build
+use-after: []
+use-before:
+- testimfs
diff --git a/spec/build/testsuites/fstests/imfsfsrdwr.yml b/spec/build/testsuites/fstests/imfsfsrdwr.yml
new file mode 100644
index 0000000000..88a4ba0e59
--- /dev/null
+++ b/spec/build/testsuites/fstests/imfsfsrdwr.yml
@@ -0,0 +1,21 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by: true
+features: c cprogram
+includes:
+- testsuites/fstests/imfs_support
+ldflags: []
+links: []
+source:
+- testsuites/fstests/fsrdwr/init.c
+stlib: []
+target: testsuites/fstests/imfs_fsrdwr.exe
+type: build
+use-after: []
+use-before:
+- testimfs
diff --git a/spec/build/testsuites/fstests/imfsfsscandir01.yml b/spec/build/testsuites/fstests/imfsfsscandir01.yml
new file mode 100644
index 0000000000..009ef6bdda
--- /dev/null
+++ b/spec/build/testsuites/fstests/imfsfsscandir01.yml
@@ -0,0 +1,21 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by: true
+features: c cprogram
+includes:
+- testsuites/fstests/imfs_support
+ldflags: []
+links: []
+source:
+- testsuites/fstests/fsscandir01/init.c
+stlib: []
+target: testsuites/fstests/imfs_fsscandir01.exe
+type: build
+use-after: []
+use-before:
+- testimfs
diff --git a/spec/build/testsuites/fstests/imfsfssymlink.yml b/spec/build/testsuites/fstests/imfsfssymlink.yml
new file mode 100644
index 0000000000..5ebdac605a
--- /dev/null
+++ b/spec/build/testsuites/fstests/imfsfssymlink.yml
@@ -0,0 +1,21 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by: true
+features: c cprogram
+includes:
+- testsuites/fstests/imfs_support
+ldflags: []
+links: []
+source:
+- testsuites/fstests/fssymlink/test.c
+stlib: []
+target: testsuites/fstests/imfs_fssymlink.exe
+type: build
+use-after: []
+use-before:
+- testimfs
diff --git a/spec/build/testsuites/fstests/imfsfstime.yml b/spec/build/testsuites/fstests/imfsfstime.yml
new file mode 100644
index 0000000000..77318d9d2f
--- /dev/null
+++ b/spec/build/testsuites/fstests/imfsfstime.yml
@@ -0,0 +1,21 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by: true
+features: c cprogram
+includes:
+- testsuites/fstests/imfs_support
+ldflags: []
+links: []
+source:
+- testsuites/fstests/fstime/test.c
+stlib: []
+target: testsuites/fstests/imfs_fstime.exe
+type: build
+use-after: []
+use-before:
+- testimfs
diff --git a/spec/build/testsuites/fstests/jffs2fserror.yml b/spec/build/testsuites/fstests/jffs2fserror.yml
new file mode 100644
index 0000000000..3ca33b0edf
--- /dev/null
+++ b/spec/build/testsuites/fstests/jffs2fserror.yml
@@ -0,0 +1,22 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by: true
+features: c cprogram
+includes:
+- testsuites/fstests/jffs2_support
+ldflags: []
+links: []
+source:
+- testsuites/fstests/fserror/test.c
+stlib:
+- jffs2
+target: testsuites/fstests/jffs2_fserror.exe
+type: build
+use-after: []
+use-before:
+- testjffs2
diff --git a/spec/build/testsuites/fstests/jffs2fslink.yml b/spec/build/testsuites/fstests/jffs2fslink.yml
new file mode 100644
index 0000000000..16851c8641
--- /dev/null
+++ b/spec/build/testsuites/fstests/jffs2fslink.yml
@@ -0,0 +1,22 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by: true
+features: c cprogram
+includes:
+- testsuites/fstests/jffs2_support
+ldflags: []
+links: []
+source:
+- testsuites/fstests/fslink/test.c
+stlib:
+- jffs2
+target: testsuites/fstests/jffs2_fslink.exe
+type: build
+use-after: []
+use-before:
+- testjffs2
diff --git a/spec/build/testsuites/fstests/jffs2fspatheval.yml b/spec/build/testsuites/fstests/jffs2fspatheval.yml
new file mode 100644
index 0000000000..4430ccd814
--- /dev/null
+++ b/spec/build/testsuites/fstests/jffs2fspatheval.yml
@@ -0,0 +1,22 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by: true
+features: c cprogram
+includes:
+- testsuites/fstests/jffs2_support
+ldflags: []
+links: []
+source:
+- testsuites/fstests/fspatheval/test.c
+stlib:
+- jffs2
+target: testsuites/fstests/jffs2_fspatheval.exe
+type: build
+use-after: []
+use-before:
+- testjffs2
diff --git a/spec/build/testsuites/fstests/jffs2fspermission.yml b/spec/build/testsuites/fstests/jffs2fspermission.yml
new file mode 100644
index 0000000000..c1e22dbecf
--- /dev/null
+++ b/spec/build/testsuites/fstests/jffs2fspermission.yml
@@ -0,0 +1,22 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by: true
+features: c cprogram
+includes:
+- testsuites/fstests/jffs2_support
+ldflags: []
+links: []
+source:
+- testsuites/fstests/fspermission/test.c
+stlib:
+- jffs2
+target: testsuites/fstests/jffs2_fspermission.exe
+type: build
+use-after: []
+use-before:
+- testjffs2
diff --git a/spec/build/testsuites/fstests/jffs2fsrdwr.yml b/spec/build/testsuites/fstests/jffs2fsrdwr.yml
new file mode 100644
index 0000000000..152f102ae6
--- /dev/null
+++ b/spec/build/testsuites/fstests/jffs2fsrdwr.yml
@@ -0,0 +1,22 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by: true
+features: c cprogram
+includes:
+- testsuites/fstests/jffs2_support
+ldflags: []
+links: []
+source:
+- testsuites/fstests/fsrdwr/init.c
+stlib:
+- jffs2
+target: testsuites/fstests/jffs2_fsrdwr.exe
+type: build
+use-after: []
+use-before:
+- testjffs2
diff --git a/spec/build/testsuites/fstests/jffs2fsscandir01.yml b/spec/build/testsuites/fstests/jffs2fsscandir01.yml
new file mode 100644
index 0000000000..48de404099
--- /dev/null
+++ b/spec/build/testsuites/fstests/jffs2fsscandir01.yml
@@ -0,0 +1,22 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by: true
+features: c cprogram
+includes:
+- testsuites/fstests/jffs2_support
+ldflags: []
+links: []
+source:
+- testsuites/fstests/fsscandir01/init.c
+stlib:
+- jffs2
+target: testsuites/fstests/jffs2_fsscandir01.exe
+type: build
+use-after: []
+use-before:
+- testjffs2
diff --git a/spec/build/testsuites/fstests/jffs2fssymlink.yml b/spec/build/testsuites/fstests/jffs2fssymlink.yml
new file mode 100644
index 0000000000..69fff0805e
--- /dev/null
+++ b/spec/build/testsuites/fstests/jffs2fssymlink.yml
@@ -0,0 +1,22 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by: true
+features: c cprogram
+includes:
+- testsuites/fstests/jffs2_support
+ldflags: []
+links: []
+source:
+- testsuites/fstests/fssymlink/test.c
+stlib:
+- jffs2
+target: testsuites/fstests/jffs2_fssymlink.exe
+type: build
+use-after: []
+use-before:
+- testjffs2
diff --git a/spec/build/testsuites/fstests/jffs2fstime.yml b/spec/build/testsuites/fstests/jffs2fstime.yml
new file mode 100644
index 0000000000..5af33c4d15
--- /dev/null
+++ b/spec/build/testsuites/fstests/jffs2fstime.yml
@@ -0,0 +1,22 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by: true
+features: c cprogram
+includes:
+- testsuites/fstests/jffs2_support
+ldflags: []
+links: []
+source:
+- testsuites/fstests/fstime/test.c
+stlib:
+- jffs2
+target: testsuites/fstests/jffs2_fstime.exe
+type: build
+use-after: []
+use-before:
+- testjffs2
diff --git a/spec/build/testsuites/fstests/libdosfs.yml b/spec/build/testsuites/fstests/libdosfs.yml
new file mode 100644
index 0000000000..b52edee0f7
--- /dev/null
+++ b/spec/build/testsuites/fstests/libdosfs.yml
@@ -0,0 +1,19 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: library
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by: true
+includes:
+- testsuites/fstests/mdosfs_support
+install: []
+install-path: null
+links: []
+source:
+- testsuites/fstests/mdosfs_support/fs_support.c
+- testsuites/fstests/support/fstest_support.c
+- testsuites/fstests/support/ramdisk_support.c
+target: testdosfs
+type: build
diff --git a/spec/build/testsuites/fstests/libimfs.yml b/spec/build/testsuites/fstests/libimfs.yml
new file mode 100644
index 0000000000..cbe01559cb
--- /dev/null
+++ b/spec/build/testsuites/fstests/libimfs.yml
@@ -0,0 +1,18 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: library
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by: true
+includes:
+- testsuites/fstests/imfs_support
+install: []
+install-path: null
+links: []
+source:
+- testsuites/fstests/imfs_support/fs_support.c
+- testsuites/fstests/support/fstest_support.c
+target: testimfs
+type: build
diff --git a/spec/build/testsuites/fstests/libjffs2.yml b/spec/build/testsuites/fstests/libjffs2.yml
new file mode 100644
index 0000000000..eb6a6b8206
--- /dev/null
+++ b/spec/build/testsuites/fstests/libjffs2.yml
@@ -0,0 +1,18 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: library
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by: true
+includes:
+- testsuites/fstests/jffs2_support
+install: []
+install-path: null
+links: []
+source:
+- testsuites/fstests/jffs2_support/fs_support.c
+- testsuites/fstests/support/fstest_support.c
+target: testjffs2
+type: build
diff --git a/spec/build/testsuites/fstests/libmimfs.yml b/spec/build/testsuites/fstests/libmimfs.yml
new file mode 100644
index 0000000000..d0486b3cb2
--- /dev/null
+++ b/spec/build/testsuites/fstests/libmimfs.yml
@@ -0,0 +1,18 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: library
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by: true
+includes:
+- testsuites/fstests/mimfs_support
+install: []
+install-path: null
+links: []
+source:
+- testsuites/fstests/mimfs_support/fs_support.c
+- testsuites/fstests/support/fstest_support.c
+target: testmimfs
+type: build
diff --git a/spec/build/testsuites/fstests/librfs.yml b/spec/build/testsuites/fstests/librfs.yml
new file mode 100644
index 0000000000..830dfa12fe
--- /dev/null
+++ b/spec/build/testsuites/fstests/librfs.yml
@@ -0,0 +1,19 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: library
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by: true
+includes:
+- testsuites/fstests/mrfs_support
+install: []
+install-path: null
+links: []
+source:
+- testsuites/fstests/mrfs_support/fs_support.c
+- testsuites/fstests/support/fstest_support.c
+- testsuites/fstests/support/ramdisk_support.c
+target: testrfs
+type: build
diff --git a/spec/build/testsuites/fstests/mdosfsfserror.yml b/spec/build/testsuites/fstests/mdosfsfserror.yml
new file mode 100644
index 0000000000..0ac2ac8fea
--- /dev/null
+++ b/spec/build/testsuites/fstests/mdosfsfserror.yml
@@ -0,0 +1,21 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by: true
+features: c cprogram
+includes:
+- testsuites/fstests/mdosfs_support
+ldflags: []
+links: []
+source:
+- testsuites/fstests/fserror/test.c
+stlib: []
+target: testsuites/fstests/mdosfs_fserror.exe
+type: build
+use-after: []
+use-before:
+- testdosfs
diff --git a/spec/build/testsuites/fstests/mdosfsfspatheval.yml b/spec/build/testsuites/fstests/mdosfsfspatheval.yml
new file mode 100644
index 0000000000..656960987b
--- /dev/null
+++ b/spec/build/testsuites/fstests/mdosfsfspatheval.yml
@@ -0,0 +1,21 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by: true
+features: c cprogram
+includes:
+- testsuites/fstests/mdosfs_support
+ldflags: []
+links: []
+source:
+- testsuites/fstests/fspatheval/test.c
+stlib: []
+target: testsuites/fstests/mdosfs_fspatheval.exe
+type: build
+use-after: []
+use-before:
+- testdosfs
diff --git a/spec/build/testsuites/fstests/mdosfsfsrdwr.yml b/spec/build/testsuites/fstests/mdosfsfsrdwr.yml
new file mode 100644
index 0000000000..36f9389e3d
--- /dev/null
+++ b/spec/build/testsuites/fstests/mdosfsfsrdwr.yml
@@ -0,0 +1,21 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by: true
+features: c cprogram
+includes:
+- testsuites/fstests/mdosfs_support
+ldflags: []
+links: []
+source:
+- testsuites/fstests/fsrdwr/init.c
+stlib: []
+target: testsuites/fstests/mdosfs_fsrdwr.exe
+type: build
+use-after: []
+use-before:
+- testdosfs
diff --git a/spec/build/testsuites/fstests/mdosfsfsscandir01.yml b/spec/build/testsuites/fstests/mdosfsfsscandir01.yml
new file mode 100644
index 0000000000..2b5ab695d4
--- /dev/null
+++ b/spec/build/testsuites/fstests/mdosfsfsscandir01.yml
@@ -0,0 +1,21 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by: true
+features: c cprogram
+includes:
+- testsuites/fstests/mdosfs_support
+ldflags: []
+links: []
+source:
+- testsuites/fstests/fsscandir01/init.c
+stlib: []
+target: testsuites/fstests/mdosfs_fsscandir01.exe
+type: build
+use-after: []
+use-before:
+- testdosfs
diff --git a/spec/build/testsuites/fstests/mdosfsfsstatvfs.yml b/spec/build/testsuites/fstests/mdosfsfsstatvfs.yml
new file mode 100644
index 0000000000..34011bcc47
--- /dev/null
+++ b/spec/build/testsuites/fstests/mdosfsfsstatvfs.yml
@@ -0,0 +1,21 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by: true
+features: c cprogram
+includes:
+- testsuites/fstests/mdosfs_support
+ldflags: []
+links: []
+source:
+- testsuites/fstests/fsstatvfs/test.c
+stlib: []
+target: testsuites/fstests/mdosfs_fsstatvfs.exe
+type: build
+use-after: []
+use-before:
+- testdosfs
diff --git a/spec/build/testsuites/fstests/mdosfsfstime.yml b/spec/build/testsuites/fstests/mdosfsfstime.yml
new file mode 100644
index 0000000000..fd4cf68ddb
--- /dev/null
+++ b/spec/build/testsuites/fstests/mdosfsfstime.yml
@@ -0,0 +1,21 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by: true
+features: c cprogram
+includes:
+- testsuites/fstests/mdosfs_support
+ldflags: []
+links: []
+source:
+- testsuites/fstests/fstime/test.c
+stlib: []
+target: testsuites/fstests/mdosfs_fstime.exe
+type: build
+use-after: []
+use-before:
+- testdosfs
diff --git a/spec/build/testsuites/fstests/mimfsfserror.yml b/spec/build/testsuites/fstests/mimfsfserror.yml
new file mode 100644
index 0000000000..d16d784c88
--- /dev/null
+++ b/spec/build/testsuites/fstests/mimfsfserror.yml
@@ -0,0 +1,21 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by: true
+features: c cprogram
+includes:
+- testsuites/fstests/mimfs_support
+ldflags: []
+links: []
+source:
+- testsuites/fstests/fserror/test.c
+stlib: []
+target: testsuites/fstests/mimfs_fserror.exe
+type: build
+use-after: []
+use-before:
+- testmimfs
diff --git a/spec/build/testsuites/fstests/mimfsfslink.yml b/spec/build/testsuites/fstests/mimfsfslink.yml
new file mode 100644
index 0000000000..dfbcde5fc6
--- /dev/null
+++ b/spec/build/testsuites/fstests/mimfsfslink.yml
@@ -0,0 +1,21 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by: true
+features: c cprogram
+includes:
+- testsuites/fstests/mimfs_support
+ldflags: []
+links: []
+source:
+- testsuites/fstests/fslink/test.c
+stlib: []
+target: testsuites/fstests/mimfs_fslink.exe
+type: build
+use-after: []
+use-before:
+- testmimfs
diff --git a/spec/build/testsuites/fstests/mimfsfspatheval.yml b/spec/build/testsuites/fstests/mimfsfspatheval.yml
new file mode 100644
index 0000000000..67a36a5b2c
--- /dev/null
+++ b/spec/build/testsuites/fstests/mimfsfspatheval.yml
@@ -0,0 +1,21 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by: true
+features: c cprogram
+includes:
+- testsuites/fstests/mimfs_support
+ldflags: []
+links: []
+source:
+- testsuites/fstests/fspatheval/test.c
+stlib: []
+target: testsuites/fstests/mimfs_fspatheval.exe
+type: build
+use-after: []
+use-before:
+- testmimfs
diff --git a/spec/build/testsuites/fstests/mimfsfspermission.yml b/spec/build/testsuites/fstests/mimfsfspermission.yml
new file mode 100644
index 0000000000..3257b36bbf
--- /dev/null
+++ b/spec/build/testsuites/fstests/mimfsfspermission.yml
@@ -0,0 +1,21 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by: true
+features: c cprogram
+includes:
+- testsuites/fstests/mimfs_support
+ldflags: []
+links: []
+source:
+- testsuites/fstests/fspermission/test.c
+stlib: []
+target: testsuites/fstests/mimfs_fspermission.exe
+type: build
+use-after: []
+use-before:
+- testmimfs
diff --git a/spec/build/testsuites/fstests/mimfsfsrdwr.yml b/spec/build/testsuites/fstests/mimfsfsrdwr.yml
new file mode 100644
index 0000000000..bf343a5bcd
--- /dev/null
+++ b/spec/build/testsuites/fstests/mimfsfsrdwr.yml
@@ -0,0 +1,21 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by: true
+features: c cprogram
+includes:
+- testsuites/fstests/mimfs_support
+ldflags: []
+links: []
+source:
+- testsuites/fstests/fsrdwr/init.c
+stlib: []
+target: testsuites/fstests/mimfs_fsrdwr.exe
+type: build
+use-after: []
+use-before:
+- testmimfs
diff --git a/spec/build/testsuites/fstests/mimfsfsrename.yml b/spec/build/testsuites/fstests/mimfsfsrename.yml
new file mode 100644
index 0000000000..b8ad300e22
--- /dev/null
+++ b/spec/build/testsuites/fstests/mimfsfsrename.yml
@@ -0,0 +1,21 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by: true
+features: c cprogram
+includes:
+- testsuites/fstests/mimfs_support
+ldflags: []
+links: []
+source:
+- testsuites/fstests/fsrename/test.c
+stlib: []
+target: testsuites/fstests/mimfs_fsrename.exe
+type: build
+use-after: []
+use-before:
+- testmimfs
diff --git a/spec/build/testsuites/fstests/mimfsfsscandir01.yml b/spec/build/testsuites/fstests/mimfsfsscandir01.yml
new file mode 100644
index 0000000000..d7335300ae
--- /dev/null
+++ b/spec/build/testsuites/fstests/mimfsfsscandir01.yml
@@ -0,0 +1,21 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by: true
+features: c cprogram
+includes:
+- testsuites/fstests/mimfs_support
+ldflags: []
+links: []
+source:
+- testsuites/fstests/fsscandir01/init.c
+stlib: []
+target: testsuites/fstests/mimfs_fsscandir01.exe
+type: build
+use-after: []
+use-before:
+- testmimfs
diff --git a/spec/build/testsuites/fstests/mimfsfssymlink.yml b/spec/build/testsuites/fstests/mimfsfssymlink.yml
new file mode 100644
index 0000000000..84b2cdd737
--- /dev/null
+++ b/spec/build/testsuites/fstests/mimfsfssymlink.yml
@@ -0,0 +1,21 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by: true
+features: c cprogram
+includes:
+- testsuites/fstests/mimfs_support
+ldflags: []
+links: []
+source:
+- testsuites/fstests/fssymlink/test.c
+stlib: []
+target: testsuites/fstests/mimfs_fssymlink.exe
+type: build
+use-after: []
+use-before:
+- testmimfs
diff --git a/spec/build/testsuites/fstests/mimfsfstime.yml b/spec/build/testsuites/fstests/mimfsfstime.yml
new file mode 100644
index 0000000000..1b1df5e62b
--- /dev/null
+++ b/spec/build/testsuites/fstests/mimfsfstime.yml
@@ -0,0 +1,21 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by: true
+features: c cprogram
+includes:
+- testsuites/fstests/mimfs_support
+ldflags: []
+links: []
+source:
+- testsuites/fstests/fstime/test.c
+stlib: []
+target: testsuites/fstests/mimfs_fstime.exe
+type: build
+use-after: []
+use-before:
+- testmimfs
diff --git a/spec/build/testsuites/fstests/mrfsfserror.yml b/spec/build/testsuites/fstests/mrfsfserror.yml
new file mode 100644
index 0000000000..6cf95388f6
--- /dev/null
+++ b/spec/build/testsuites/fstests/mrfsfserror.yml
@@ -0,0 +1,21 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by: true
+features: c cprogram
+includes:
+- testsuites/fstests/mrfs_support
+ldflags: []
+links: []
+source:
+- testsuites/fstests/fserror/test.c
+stlib: []
+target: testsuites/fstests/mrfs_fserror.exe
+type: build
+use-after: []
+use-before:
+- testrfs
diff --git a/spec/build/testsuites/fstests/mrfsfsfpathconf.yml b/spec/build/testsuites/fstests/mrfsfsfpathconf.yml
new file mode 100644
index 0000000000..d87c5eca5b
--- /dev/null
+++ b/spec/build/testsuites/fstests/mrfsfsfpathconf.yml
@@ -0,0 +1,21 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by: true
+features: c cprogram
+includes:
+- testsuites/fstests/mrfs_support
+ldflags: []
+links: []
+source:
+- testsuites/fstests/fsfpathconf/test.c
+stlib: []
+target: testsuites/fstests/mrfs_fsfpathconf.exe
+type: build
+use-after: []
+use-before:
+- testrfs
diff --git a/spec/build/testsuites/fstests/mrfsfslink.yml b/spec/build/testsuites/fstests/mrfsfslink.yml
new file mode 100644
index 0000000000..9d22ced2ef
--- /dev/null
+++ b/spec/build/testsuites/fstests/mrfsfslink.yml
@@ -0,0 +1,21 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by: true
+features: c cprogram
+includes:
+- testsuites/fstests/mrfs_support
+ldflags: []
+links: []
+source:
+- testsuites/fstests/fslink/test.c
+stlib: []
+target: testsuites/fstests/mrfs_fslink.exe
+type: build
+use-after: []
+use-before:
+- testrfs
diff --git a/spec/build/testsuites/fstests/mrfsfspatheval.yml b/spec/build/testsuites/fstests/mrfsfspatheval.yml
new file mode 100644
index 0000000000..a8f359569e
--- /dev/null
+++ b/spec/build/testsuites/fstests/mrfsfspatheval.yml
@@ -0,0 +1,21 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by: true
+features: c cprogram
+includes:
+- testsuites/fstests/mrfs_support
+ldflags: []
+links: []
+source:
+- testsuites/fstests/fspatheval/test.c
+stlib: []
+target: testsuites/fstests/mrfs_fspatheval.exe
+type: build
+use-after: []
+use-before:
+- testrfs
diff --git a/spec/build/testsuites/fstests/mrfsfspermission.yml b/spec/build/testsuites/fstests/mrfsfspermission.yml
new file mode 100644
index 0000000000..8755a9ba52
--- /dev/null
+++ b/spec/build/testsuites/fstests/mrfsfspermission.yml
@@ -0,0 +1,21 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by: true
+features: c cprogram
+includes:
+- testsuites/fstests/mrfs_support
+ldflags: []
+links: []
+source:
+- testsuites/fstests/fspermission/test.c
+stlib: []
+target: testsuites/fstests/mrfs_fspermission.exe
+type: build
+use-after: []
+use-before:
+- testrfs
diff --git a/spec/build/testsuites/fstests/mrfsfsrdwr.yml b/spec/build/testsuites/fstests/mrfsfsrdwr.yml
new file mode 100644
index 0000000000..e3a21f4acf
--- /dev/null
+++ b/spec/build/testsuites/fstests/mrfsfsrdwr.yml
@@ -0,0 +1,21 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by: true
+features: c cprogram
+includes:
+- testsuites/fstests/mrfs_support
+ldflags: []
+links: []
+source:
+- testsuites/fstests/fsrdwr/init.c
+stlib: []
+target: testsuites/fstests/mrfs_fsrdwr.exe
+type: build
+use-after: []
+use-before:
+- testrfs
diff --git a/spec/build/testsuites/fstests/mrfsfsrename.yml b/spec/build/testsuites/fstests/mrfsfsrename.yml
new file mode 100644
index 0000000000..c997ee4104
--- /dev/null
+++ b/spec/build/testsuites/fstests/mrfsfsrename.yml
@@ -0,0 +1,21 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by: true
+features: c cprogram
+includes:
+- testsuites/fstests/mrfs_support
+ldflags: []
+links: []
+source:
+- testsuites/fstests/fsrename/test.c
+stlib: []
+target: testsuites/fstests/mrfs_fsrename.exe
+type: build
+use-after: []
+use-before:
+- testrfs
diff --git a/spec/build/testsuites/fstests/mrfsfsscandir01.yml b/spec/build/testsuites/fstests/mrfsfsscandir01.yml
new file mode 100644
index 0000000000..98b88d09f9
--- /dev/null
+++ b/spec/build/testsuites/fstests/mrfsfsscandir01.yml
@@ -0,0 +1,21 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by: true
+features: c cprogram
+includes:
+- testsuites/fstests/mrfs_support
+ldflags: []
+links: []
+source:
+- testsuites/fstests/fsscandir01/init.c
+stlib: []
+target: testsuites/fstests/mrfs_fsscandir01.exe
+type: build
+use-after: []
+use-before:
+- testrfs
diff --git a/spec/build/testsuites/fstests/mrfsfssymlink.yml b/spec/build/testsuites/fstests/mrfsfssymlink.yml
new file mode 100644
index 0000000000..dd2906f30f
--- /dev/null
+++ b/spec/build/testsuites/fstests/mrfsfssymlink.yml
@@ -0,0 +1,21 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by: true
+features: c cprogram
+includes:
+- testsuites/fstests/mrfs_support
+ldflags: []
+links: []
+source:
+- testsuites/fstests/fssymlink/test.c
+stlib: []
+target: testsuites/fstests/mrfs_fssymlink.exe
+type: build
+use-after: []
+use-before:
+- testrfs
diff --git a/spec/build/testsuites/fstests/mrfsfstime.yml b/spec/build/testsuites/fstests/mrfsfstime.yml
new file mode 100644
index 0000000000..84051632f5
--- /dev/null
+++ b/spec/build/testsuites/fstests/mrfsfstime.yml
@@ -0,0 +1,21 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by: true
+features: c cprogram
+includes:
+- testsuites/fstests/mrfs_support
+ldflags: []
+links: []
+source:
+- testsuites/fstests/fstime/test.c
+stlib: []
+target: testsuites/fstests/mrfs_fstime.exe
+type: build
+use-after: []
+use-before:
+- testrfs
diff --git a/spec/build/testsuites/grp.yml b/spec/build/testsuites/grp.yml
new file mode 100644
index 0000000000..5c6457f06d
--- /dev/null
+++ b/spec/build/testsuites/grp.yml
@@ -0,0 +1,69 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: group
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+enabled-by: true
+includes:
+- ${BSP_INCLUDES}
+install: []
+ldflags: []
+links:
+- role: build-dependency
+ uid: optada
+- role: build-dependency
+ uid: optall
+- role: build-dependency
+ uid: optbenchmarks
+- role: build-dependency
+ uid: optfs
+- role: build-dependency
+ uid: optlib
+- role: build-dependency
+ uid: optmp
+- role: build-dependency
+ uid: optpsx
+- role: build-dependency
+ uid: optpsxtm
+- role: build-dependency
+ uid: optrhs
+- role: build-dependency
+ uid: optsamples
+- role: build-dependency
+ uid: optsmp
+- role: build-dependency
+ uid: optsp
+- role: build-dependency
+ uid: opttm
+- role: build-dependency
+ uid: optvalidation
+- role: build-dependency
+ uid: ada/grp
+- role: build-dependency
+ uid: benchmarks/grp
+- role: build-dependency
+ uid: fstests/grp
+- role: build-dependency
+ uid: libtests/grp
+- role: build-dependency
+ uid: mptests/grp
+- role: build-dependency
+ uid: psxtests/grp
+- role: build-dependency
+ uid: psxtmtests/grp
+- role: build-dependency
+ uid: rhealstone/grp
+- role: build-dependency
+ uid: samples/grp
+- role: build-dependency
+ uid: smptests/grp
+- role: build-dependency
+ uid: sptests/grp
+- role: build-dependency
+ uid: tmtests/grp
+- role: build-dependency
+ uid: validation/grp
+type: build
+use-after:
+- rtemscpu
+- rtemsbsp
+use-before: []
diff --git a/spec/build/testsuites/libtests/block01.yml b/spec/build/testsuites/libtests/block01.yml
new file mode 100644
index 0000000000..8b3bfac582
--- /dev/null
+++ b/spec/build/testsuites/libtests/block01.yml
@@ -0,0 +1,19 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by: true
+features: c cprogram
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/libtests/block01/init.c
+stlib: []
+target: testsuites/libtests/block01.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/libtests/block02.yml b/spec/build/testsuites/libtests/block02.yml
new file mode 100644
index 0000000000..89087ae5b3
--- /dev/null
+++ b/spec/build/testsuites/libtests/block02.yml
@@ -0,0 +1,19 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by: true
+features: c cprogram
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/libtests/block02/init.c
+stlib: []
+target: testsuites/libtests/block02.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/libtests/block03.yml b/spec/build/testsuites/libtests/block03.yml
new file mode 100644
index 0000000000..7377adb8b3
--- /dev/null
+++ b/spec/build/testsuites/libtests/block03.yml
@@ -0,0 +1,19 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by: true
+features: c cprogram
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/libtests/block03/init.c
+stlib: []
+target: testsuites/libtests/block03.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/libtests/block04.yml b/spec/build/testsuites/libtests/block04.yml
new file mode 100644
index 0000000000..07aa89a67e
--- /dev/null
+++ b/spec/build/testsuites/libtests/block04.yml
@@ -0,0 +1,19 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by: true
+features: c cprogram
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/libtests/block04/init.c
+stlib: []
+target: testsuites/libtests/block04.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/libtests/block05.yml b/spec/build/testsuites/libtests/block05.yml
new file mode 100644
index 0000000000..79e46a9310
--- /dev/null
+++ b/spec/build/testsuites/libtests/block05.yml
@@ -0,0 +1,19 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by: true
+features: c cprogram
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/libtests/block05/init.c
+stlib: []
+target: testsuites/libtests/block05.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/libtests/block06.yml b/spec/build/testsuites/libtests/block06.yml
new file mode 100644
index 0000000000..97e503080f
--- /dev/null
+++ b/spec/build/testsuites/libtests/block06.yml
@@ -0,0 +1,19 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by: true
+features: c cprogram
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/libtests/block06/init.c
+stlib: []
+target: testsuites/libtests/block06.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/libtests/block07.yml b/spec/build/testsuites/libtests/block07.yml
new file mode 100644
index 0000000000..1d5c85077c
--- /dev/null
+++ b/spec/build/testsuites/libtests/block07.yml
@@ -0,0 +1,19 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by: true
+features: c cprogram
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/libtests/block07/init.c
+stlib: []
+target: testsuites/libtests/block07.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/libtests/block08.yml b/spec/build/testsuites/libtests/block08.yml
new file mode 100644
index 0000000000..34f201e449
--- /dev/null
+++ b/spec/build/testsuites/libtests/block08.yml
@@ -0,0 +1,34 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by: true
+features: c cprogram
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/libtests/block08/init.c
+- testsuites/libtests/block08/bdbuf_tests.c
+- testsuites/libtests/block08/test_disk.c
+- testsuites/libtests/block08/bdbuf_test1_1.c
+- testsuites/libtests/block08/bdbuf_test1_2.c
+- testsuites/libtests/block08/bdbuf_test1_3.c
+- testsuites/libtests/block08/bdbuf_test1_4.c
+- testsuites/libtests/block08/bdbuf_test1_5.c
+- testsuites/libtests/block08/bdbuf_test2_1.c
+- testsuites/libtests/block08/bdbuf_test2_2.c
+- testsuites/libtests/block08/bdbuf_test3_1.c
+- testsuites/libtests/block08/bdbuf_test3_2.c
+- testsuites/libtests/block08/bdbuf_test3_3.c
+- testsuites/libtests/block08/bdbuf_test4_1.c
+- testsuites/libtests/block08/bdbuf_test4_2.c
+- testsuites/libtests/block08/bdbuf_test4_3.c
+stlib: []
+target: testsuites/libtests/block08.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/libtests/block09.yml b/spec/build/testsuites/libtests/block09.yml
new file mode 100644
index 0000000000..acd76712e5
--- /dev/null
+++ b/spec/build/testsuites/libtests/block09.yml
@@ -0,0 +1,19 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by: true
+features: c cprogram
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/libtests/block09/init.c
+stlib: []
+target: testsuites/libtests/block09.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/libtests/block10.yml b/spec/build/testsuites/libtests/block10.yml
new file mode 100644
index 0000000000..fa2a381b13
--- /dev/null
+++ b/spec/build/testsuites/libtests/block10.yml
@@ -0,0 +1,19 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by: true
+features: c cprogram
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/libtests/block10/init.c
+stlib: []
+target: testsuites/libtests/block10.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/libtests/block11.yml b/spec/build/testsuites/libtests/block11.yml
new file mode 100644
index 0000000000..ece975ccd8
--- /dev/null
+++ b/spec/build/testsuites/libtests/block11.yml
@@ -0,0 +1,19 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by: true
+features: c cprogram
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/libtests/block11/init.c
+stlib: []
+target: testsuites/libtests/block11.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/libtests/block12.yml b/spec/build/testsuites/libtests/block12.yml
new file mode 100644
index 0000000000..50a0986bc0
--- /dev/null
+++ b/spec/build/testsuites/libtests/block12.yml
@@ -0,0 +1,19 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by: true
+features: c cprogram
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/libtests/block12/init.c
+stlib: []
+target: testsuites/libtests/block12.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/libtests/block13.yml b/spec/build/testsuites/libtests/block13.yml
new file mode 100644
index 0000000000..2e3ae98c03
--- /dev/null
+++ b/spec/build/testsuites/libtests/block13.yml
@@ -0,0 +1,19 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by: true
+features: c cprogram
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/libtests/block13/init.c
+stlib: []
+target: testsuites/libtests/block13.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/libtests/block14.yml b/spec/build/testsuites/libtests/block14.yml
new file mode 100644
index 0000000000..01f35c78bb
--- /dev/null
+++ b/spec/build/testsuites/libtests/block14.yml
@@ -0,0 +1,19 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by: true
+features: c cprogram
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/libtests/block14/init.c
+stlib: []
+target: testsuites/libtests/block14.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/libtests/block15.yml b/spec/build/testsuites/libtests/block15.yml
new file mode 100644
index 0000000000..e9dcb846ff
--- /dev/null
+++ b/spec/build/testsuites/libtests/block15.yml
@@ -0,0 +1,19 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by: true
+features: c cprogram
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/libtests/block15/init.c
+stlib: []
+target: testsuites/libtests/block15.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/libtests/block16.yml b/spec/build/testsuites/libtests/block16.yml
new file mode 100644
index 0000000000..4ab8510a25
--- /dev/null
+++ b/spec/build/testsuites/libtests/block16.yml
@@ -0,0 +1,19 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by: true
+features: c cprogram
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/libtests/block16/init.c
+stlib: []
+target: testsuites/libtests/block16.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/libtests/block17.yml b/spec/build/testsuites/libtests/block17.yml
new file mode 100644
index 0000000000..e64af2d4c2
--- /dev/null
+++ b/spec/build/testsuites/libtests/block17.yml
@@ -0,0 +1,19 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by: true
+features: c cprogram
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/libtests/block17/init.c
+stlib: []
+target: testsuites/libtests/block17.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/libtests/bspcmdline01.yml b/spec/build/testsuites/libtests/bspcmdline01.yml
new file mode 100644
index 0000000000..9c63ce2805
--- /dev/null
+++ b/spec/build/testsuites/libtests/bspcmdline01.yml
@@ -0,0 +1,19 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by: true
+features: c cprogram
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/libtests/bspcmdline01/init.c
+stlib: []
+target: testsuites/libtests/bspcmdline01.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/libtests/calloc.yml b/spec/build/testsuites/libtests/calloc.yml
new file mode 100644
index 0000000000..473e3039d0
--- /dev/null
+++ b/spec/build/testsuites/libtests/calloc.yml
@@ -0,0 +1,20 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by: true
+features: c cprogram
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/libtests/POSIX/calloc.c
+stlib: []
+target: testsuites/libtests/calloc.norun.exe
+type: build
+use-after: []
+use-before:
+- rtemsdefaultconfig
diff --git a/spec/build/testsuites/libtests/capture01.yml b/spec/build/testsuites/libtests/capture01.yml
new file mode 100644
index 0000000000..50a69abf96
--- /dev/null
+++ b/spec/build/testsuites/libtests/capture01.yml
@@ -0,0 +1,20 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by: true
+features: c cprogram
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/libtests/capture01/init.c
+- testsuites/libtests/capture01/test1.c
+stlib: []
+target: testsuites/libtests/capture01.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/libtests/clockgettime.yml b/spec/build/testsuites/libtests/clockgettime.yml
new file mode 100644
index 0000000000..1810d3f40f
--- /dev/null
+++ b/spec/build/testsuites/libtests/clockgettime.yml
@@ -0,0 +1,20 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by: true
+features: c cprogram
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/libtests/POSIX/clock_gettime.c
+stlib: []
+target: testsuites/libtests/clock_gettime.norun.exe
+type: build
+use-after: []
+use-before:
+- rtemsdefaultconfig
diff --git a/spec/build/testsuites/libtests/close.yml b/spec/build/testsuites/libtests/close.yml
new file mode 100644
index 0000000000..a6c853ce57
--- /dev/null
+++ b/spec/build/testsuites/libtests/close.yml
@@ -0,0 +1,20 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by: true
+features: c cprogram
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/libtests/POSIX/close.c
+stlib: []
+target: testsuites/libtests/close.norun.exe
+type: build
+use-after: []
+use-before:
+- rtemsdefaultconfig
diff --git a/spec/build/testsuites/libtests/complex.yml b/spec/build/testsuites/libtests/complex.yml
new file mode 100644
index 0000000000..cda1511b3a
--- /dev/null
+++ b/spec/build/testsuites/libtests/complex.yml
@@ -0,0 +1,23 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by: true
+features: c cprogram
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/libtests/complex/init.c
+- testsuites/libtests/complex/docomplex.c
+- testsuites/libtests/complex/docomplexf.c
+- testsuites/libtests/complex/docomplexl.c
+stlib:
+- m
+target: testsuites/libtests/complex.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/libtests/cpuuse.yml b/spec/build/testsuites/libtests/cpuuse.yml
new file mode 100644
index 0000000000..f606d994fd
--- /dev/null
+++ b/spec/build/testsuites/libtests/cpuuse.yml
@@ -0,0 +1,23 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by: true
+features: c cprogram
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/libtests/cpuuse/init.c
+- testsuites/libtests/cpuuse/task1.c
+- testsuites/libtests/cpuuse/task2.c
+- testsuites/libtests/cpuuse/task3.c
+- testsuites/libtests/cpuuse/tswitch.c
+stlib: []
+target: testsuites/libtests/cpuuse.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/libtests/crypt01.yml b/spec/build/testsuites/libtests/crypt01.yml
new file mode 100644
index 0000000000..a1df725647
--- /dev/null
+++ b/spec/build/testsuites/libtests/crypt01.yml
@@ -0,0 +1,19 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by: true
+features: c cprogram
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/libtests/crypt01/init.c
+stlib: []
+target: testsuites/libtests/crypt01.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/libtests/debugger01.yml b/spec/build/testsuites/libtests/debugger01.yml
new file mode 100644
index 0000000000..720b643925
--- /dev/null
+++ b/spec/build/testsuites/libtests/debugger01.yml
@@ -0,0 +1,23 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by:
+- arm
+- i386
+features: c cprogram
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/libtests/debugger01/init.c
+- testsuites/libtests/debugger01/remote.c
+stlib: []
+target: testsuites/libtests/debugger01.exe
+type: build
+use-after:
+- debugger
+use-before: []
diff --git a/spec/build/testsuites/libtests/defaultconfig01.yml b/spec/build/testsuites/libtests/defaultconfig01.yml
new file mode 100644
index 0000000000..583da914d7
--- /dev/null
+++ b/spec/build/testsuites/libtests/defaultconfig01.yml
@@ -0,0 +1,20 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by: true
+features: c cprogram
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/libtests/defaultconfig01/init.c
+stlib: []
+target: testsuites/libtests/defaultconfig01.exe
+type: build
+use-after: []
+use-before:
+- rtemsdefaultconfig
diff --git a/spec/build/testsuites/libtests/devfs01.yml b/spec/build/testsuites/libtests/devfs01.yml
new file mode 100644
index 0000000000..660ec12074
--- /dev/null
+++ b/spec/build/testsuites/libtests/devfs01.yml
@@ -0,0 +1,19 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by: true
+features: c cprogram
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/libtests/devfs01/init.c
+stlib: []
+target: testsuites/libtests/devfs01.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/libtests/devfs04.yml b/spec/build/testsuites/libtests/devfs04.yml
new file mode 100644
index 0000000000..8ad0c038f1
--- /dev/null
+++ b/spec/build/testsuites/libtests/devfs04.yml
@@ -0,0 +1,20 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by: true
+features: c cprogram
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/libtests/devfs04/init.c
+- testsuites/libtests/devfs04/test_driver.c
+stlib: []
+target: testsuites/libtests/devfs04.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/libtests/deviceio01.yml b/spec/build/testsuites/libtests/deviceio01.yml
new file mode 100644
index 0000000000..a5ab0c5bdb
--- /dev/null
+++ b/spec/build/testsuites/libtests/deviceio01.yml
@@ -0,0 +1,20 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by: true
+features: c cprogram
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/libtests/deviceio01/init.c
+- testsuites/libtests/deviceio01/test_driver.c
+stlib: []
+target: testsuites/libtests/deviceio01.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/libtests/devnullfatal01.yml b/spec/build/testsuites/libtests/devnullfatal01.yml
new file mode 100644
index 0000000000..b9a4d326fb
--- /dev/null
+++ b/spec/build/testsuites/libtests/devnullfatal01.yml
@@ -0,0 +1,19 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by: true
+features: c cprogram
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/libtests/devnullfatal01/init.c
+stlib: []
+target: testsuites/libtests/devnullfatal01.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/libtests/dl01.yml b/spec/build/testsuites/libtests/dl01.yml
new file mode 100644
index 0000000000..49ff5a0eb1
--- /dev/null
+++ b/spec/build/testsuites/libtests/dl01.yml
@@ -0,0 +1,38 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: script
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+do-build: |
+ path = "testsuites/libtests/dl01/"
+ objs = []
+ objs.append(self.cc(bld, bic, path + "dl01-o1.c"))
+ tar = path + "dl01.tar"
+ self.tar(bld, objs, [path], tar)
+ tar_c, tar_h = self.bin2c(bld, tar)
+ objs = []
+ objs.append(self.cc(bld, bic, tar_c))
+ objs.append(self.cc(bld, bic, path + "init.c", deps=[tar_h], cppflags=bld.env.TEST_DL01_CPPFLAGS))
+ objs.append(self.cc(bld, bic, path + "dl-load.c"))
+ dl01_pre = path + "dl01.pre"
+ self.link_cc(bld, bic, objs, dl01_pre)
+ dl01_sym_o = path + "dl01-sym.o"
+ objs.append(dl01_sym_o)
+ self.rtems_syms(bld, dl01_pre, dl01_sym_o)
+ self.link_cc(bld, bic, objs, "testsuites/libtests/dl01.exe")
+do-configure: null
+enabled-by:
+- and:
+ - not: TEST_DL01_EXCLUDE
+ - BUILD_LIBDL
+includes:
+- testsuites/libtests/dl01
+ldflags: []
+links: []
+prepare-build: null
+prepare-configure: null
+stlib: []
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/libtests/dl02.yml b/spec/build/testsuites/libtests/dl02.yml
new file mode 100644
index 0000000000..e6b1d0fe11
--- /dev/null
+++ b/spec/build/testsuites/libtests/dl02.yml
@@ -0,0 +1,39 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: script
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+do-build: |
+ path = "testsuites/libtests/dl02/"
+ objs = []
+ objs.append(self.cc(bld, bic, path + "dl02-o1.c"))
+ objs.append(self.cc(bld, bic, path + "dl02-o2.c"))
+ tar = path + "dl02.tar"
+ self.tar(bld, objs, [path], tar)
+ tar_c, tar_h = self.bin2c(bld, tar)
+ objs = []
+ objs.append(self.cc(bld, bic, tar_c))
+ objs.append(self.cc(bld, bic, path + "init.c", deps=[tar_h], cppflags=bld.env.TEST_DL02_CPPFLAGS))
+ objs.append(self.cc(bld, bic, path + "dl-load.c"))
+ dl02_pre = path + "dl02.pre"
+ self.link_cc(bld, bic, objs, dl02_pre)
+ dl02_sym_o = path + "dl02-sym.o"
+ objs.append(dl02_sym_o)
+ self.rtems_syms(bld, dl02_pre, dl02_sym_o)
+ self.link_cc(bld, bic, objs, "testsuites/libtests/dl02.exe")
+do-configure: null
+enabled-by:
+- and:
+ - not: TEST_DL02_EXCLUDE
+ - BUILD_LIBDL
+includes:
+- testsuites/libtests/dl02
+ldflags: []
+links: []
+prepare-build: null
+prepare-configure: null
+stlib: []
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/libtests/dl03.yml b/spec/build/testsuites/libtests/dl03.yml
new file mode 100644
index 0000000000..68b575b3f4
--- /dev/null
+++ b/spec/build/testsuites/libtests/dl03.yml
@@ -0,0 +1,23 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by:
+- BUILD_LIBDL
+features: c cprogram
+includes:
+- cpukit/libdl
+ldflags: []
+links: []
+source:
+- testsuites/libtests/dl03/dl-bit-alloc.c
+- testsuites/libtests/dl03/dl-cache.c
+- testsuites/libtests/dl03/init.c
+stlib: []
+target: testsuites/libtests/dl03.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/libtests/dl04.yml b/spec/build/testsuites/libtests/dl04.yml
new file mode 100644
index 0000000000..061c655675
--- /dev/null
+++ b/spec/build/testsuites/libtests/dl04.yml
@@ -0,0 +1,39 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: script
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+do-build: |
+ path = "testsuites/libtests/dl04/"
+ objs = []
+ objs.append(self.cxx(bld, bic, path + "dl04-o4.cc"))
+ tar = path + "dl04.tar"
+ self.tar(bld, objs, [path], tar)
+ tar_c, tar_h = self.bin2c(bld, tar)
+ objs = []
+ objs.append(self.cc(bld, bic, tar_c))
+ objs.append(self.cc(bld, bic, path + "init.c", deps=[tar_h], cppflags=bld.env.TEST_DL04_CPPFLAGS))
+ objs.append(self.cc(bld, bic, path + "dl-load.c"))
+ dl04_pre = path + "dl04.pre"
+ self.link_cc(bld, bic, objs, dl04_pre)
+ dl04_sym_o = path + "dl04-sym.o"
+ objs.append(dl04_sym_o)
+ self.rtems_syms(bld, dl04_pre, dl04_sym_o)
+ self.link_cc(bld, bic, objs, "testsuites/libtests/dl04.exe")
+do-configure: null
+enabled-by:
+- and:
+ - not: TEST_DL04_EXCLUDE
+ - BUILD_LIBDL
+includes:
+- testsuites/libtests/dl04
+ldflags: []
+links: []
+prepare-build: null
+prepare-configure: null
+stlib: []
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/libtests/dl05.yml b/spec/build/testsuites/libtests/dl05.yml
new file mode 100644
index 0000000000..67370ccbc1
--- /dev/null
+++ b/spec/build/testsuites/libtests/dl05.yml
@@ -0,0 +1,40 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: script
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+do-build: |
+ path = "testsuites/libtests/dl05/"
+ objs = []
+ objs.append(self.cxx(bld, bic, path + "dl05-o5.cc"))
+ tar = path + "dl05.tar"
+ self.tar(bld, objs, [path], tar)
+ tar_c, tar_h = self.bin2c(bld, tar)
+ objs = []
+ objs.append(self.cc(bld, bic, tar_c))
+ objs.append(self.cc(bld, bic, path + "init.c", deps=[tar_h], cppflags=bld.env.TEST_DL05_CPPFLAGS))
+ objs.append(self.cxx(bld, bic, path + "dl-cpp.cc"))
+ objs.append(self.cc(bld, bic, path + "dl-load.c"))
+ dl05_pre = path + "dl05.pre"
+ self.link_cxx(bld, bic, objs, dl05_pre)
+ dl05_sym_o = path + "dl05-sym.o"
+ objs.append(dl05_sym_o)
+ self.rtems_syms(bld, dl05_pre, dl05_sym_o)
+ self.link_cxx(bld, bic, objs, "testsuites/libtests/dl05.exe")
+do-configure: null
+enabled-by:
+- and:
+ - not: TEST_DL05_EXCLUDE
+ - BUILD_LIBDL
+includes:
+- testsuites/libtests/dl05
+ldflags: []
+links: []
+prepare-build: null
+prepare-configure: null
+stlib: []
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/libtests/dl06.yml b/spec/build/testsuites/libtests/dl06.yml
new file mode 100644
index 0000000000..2f5d4ab08d
--- /dev/null
+++ b/spec/build/testsuites/libtests/dl06.yml
@@ -0,0 +1,48 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: script
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+do-build: |
+ path = "testsuites/libtests/dl06/"
+ pre_tar = path + "dl06-pre.tar"
+ self.tar(bld, path + "dl06_pre_file", [path], pre_tar)
+ pre_tar_c, pre_tar_h = self.bin2c(bld, pre_tar, name="dl06_tar")
+ objs = []
+ objs.append(self.cc(bld, bic, pre_tar_c))
+ objs.append(self.cc(bld, bic, path + "pre-init.c", deps=[pre_tar_h], cppflags=bld.env.TEST_DL06_CPPFLAGS))
+ dl_load_o = self.cc(bld, bic, path + "dl-load.c")
+ objs.append(dl_load_o)
+ dl06_pre = path + "dl06.pre"
+ self.link_cc(bld, bic, objs, dl06_pre)
+ objs = []
+ objs.append(self.cc(bld, bic, path + "dl06-o1.c"))
+ objs.append(self.cc(bld, bic, path + "dl06-o2.c"))
+ dl06_rap = path + "dl06.rap"
+ self.rtems_rap(bld, dl06_pre, objs, ["m"], dl06_rap)
+ tar = path + "dl06.tar"
+ self.tar(bld, dl06_rap, [path], tar)
+ tar_c, tar_h = self.bin2c(bld, tar)
+ objs.append(self.cc(bld, bic, tar_c))
+ objs.append(self.cc(bld, bic, path + "init.c", deps=[tar_h], cppflags=bld.env.TEST_DL06_CPPFLAGS))
+ objs.append(dl_load_o)
+ dl06_sym_o = path + "dl06-sym.o"
+ objs.append(dl06_sym_o)
+ self.rtems_syms(bld, dl06_pre, dl06_sym_o)
+ self.link_cc(bld, bic, objs, "testsuites/libtests/dl06.exe")
+do-configure: null
+enabled-by:
+- and:
+ - not: TEST_DL06_EXCLUDE
+ - BUILD_LIBDL
+includes:
+- testsuites/libtests/dl06
+ldflags: []
+links: []
+prepare-build: null
+prepare-configure: null
+stlib: []
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/libtests/dl07.yml b/spec/build/testsuites/libtests/dl07.yml
new file mode 100644
index 0000000000..2fedef4795
--- /dev/null
+++ b/spec/build/testsuites/libtests/dl07.yml
@@ -0,0 +1,42 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: script
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+do-build: |
+ path = "testsuites/libtests/dl07/"
+ objs = []
+ objs.append(self.cc(bld, bic, path + "dl07-o1.c"))
+ objs.append(self.cc(bld, bic, path + "dl07-o2.c"))
+ objs.append(self.cc(bld, bic, path + "dl07-o3.c"))
+ objs.append(self.cc(bld, bic, path + "dl07-o4.c"))
+ objs.append(self.cc(bld, bic, path + "dl07-o5.c"))
+ tar = path + "dl07.tar"
+ self.tar(bld, objs, [path], tar)
+ tar_c, tar_h = self.bin2c(bld, tar)
+ objs = []
+ objs.append(self.cc(bld, bic, tar_c))
+ objs.append(self.cc(bld, bic, path + "init.c", deps=[tar_h], cppflags=bld.env.TEST_DL07_CPPFLAGS))
+ objs.append(self.cc(bld, bic, path + "dl-load.c"))
+ dl07_pre = path + "dl07.pre"
+ self.link_cc(bld, bic, objs, dl07_pre)
+ dl07_sym_o = path + "dl07-sym.o"
+ objs.append(dl07_sym_o)
+ self.rtems_syms(bld, dl07_pre, dl07_sym_o)
+ self.link_cc(bld, bic, objs, "testsuites/libtests/dl07.exe")
+do-configure: null
+enabled-by:
+- and:
+ - not: TEST_DL07_EXCLUDE
+ - BUILD_LIBDL
+includes:
+- testsuites/libtests/dl07
+ldflags: []
+links: []
+prepare-build: null
+prepare-configure: null
+stlib: []
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/libtests/dl08.yml b/spec/build/testsuites/libtests/dl08.yml
new file mode 100644
index 0000000000..94f16fe196
--- /dev/null
+++ b/spec/build/testsuites/libtests/dl08.yml
@@ -0,0 +1,47 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: script
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+do-build: |
+ path = "testsuites/libtests/dl08/"
+ objs = []
+ lib_objs = []
+ lib_objs.append(self.cc(bld, bic, path + "dl08-o2.c"))
+ lib_objs.append(self.cc(bld, bic, path + "dl08-o4.c"))
+ objs.append(self.ar(bld, lib_objs, path + "libdl08_1.a"))
+ lib_objs = []
+ lib_objs.append(self.cc(bld, bic, path + "dl08-o3.c"))
+ lib_objs.append(self.cc(bld, bic, path + "dl08-o5.c"))
+ lib_objs.append(self.cc(bld, bic, path + "dl08-o6-123456789-123456789.c"))
+ objs.append(self.ar(bld, lib_objs, path + "libdl08_2.a"))
+ objs.append(self.cc(bld, bic, path + "dl08-o1.c"))
+ tar = path + "dl08.tar"
+ self.tar(bld, [path + "etc/libdl.conf"] + objs, [path], tar)
+ tar_c, tar_h = self.bin2c(bld, tar)
+ objs = []
+ objs.append(self.cc(bld, bic, tar_c))
+ objs.append(self.cc(bld, bic, path + "init.c", deps=[tar_h], cppflags=bld.env.TEST_DL08_CPPFLAGS))
+ objs.append(self.cc(bld, bic, path + "dl-load.c"))
+ dl08_pre = path + "dl08.pre"
+ self.link_cc(bld, bic, objs, dl08_pre)
+ dl08_sym_o = path + "dl08-sym.o"
+ objs.append(dl08_sym_o)
+ self.rtems_syms(bld, dl08_pre, dl08_sym_o)
+ self.link_cc(bld, bic, objs, "testsuites/libtests/dl08.exe")
+do-configure: null
+enabled-by:
+- and:
+ - not: TEST_DL08_EXCLUDE
+ - BUILD_LIBDL
+includes:
+- testsuites/libtests/dl08
+ldflags: []
+links: []
+prepare-build: null
+prepare-configure: null
+stlib: []
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/libtests/dl09.yml b/spec/build/testsuites/libtests/dl09.yml
new file mode 100644
index 0000000000..7f9da4c3b9
--- /dev/null
+++ b/spec/build/testsuites/libtests/dl09.yml
@@ -0,0 +1,42 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: script
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+do-build: |
+ path = "testsuites/libtests/dl09/"
+ objs = []
+ objs.append(self.cc(bld, bic, path + "dl09-o1.c"))
+ objs.append(self.cc(bld, bic, path + "dl09-o2.c"))
+ objs.append(self.cc(bld, bic, path + "dl09-o3.c"))
+ objs.append(self.cc(bld, bic, path + "dl09-o4.c"))
+ objs.append(self.cc(bld, bic, path + "dl09-o5.c"))
+ tar = path + "dl09.tar"
+ self.tar(bld, objs, [path], tar)
+ tar_c, tar_h = self.bin2c(bld, tar)
+ objs = []
+ objs.append(self.cc(bld, bic, tar_c))
+ objs.append(self.cc(bld, bic, path + "init.c", deps=[tar_h], cppflags=bld.env.TEST_DL09_CPPFLAGS))
+ objs.append(self.cc(bld, bic, path + "dl-load.c"))
+ dl09_pre = path + "dl09.pre"
+ self.link_cc(bld, bic, objs, dl09_pre)
+ dl09_sym_o = path + "dl09-sym.o"
+ objs.append(dl09_sym_o)
+ self.rtems_syms(bld, dl09_pre, dl09_sym_o)
+ self.link_cc(bld, bic, objs, "testsuites/libtests/dl09.exe")
+do-configure: null
+enabled-by:
+- and:
+ - not: TEST_DL09_EXCLUDE
+ - BUILD_LIBDL
+includes:
+- testsuites/libtests/dl09
+ldflags: []
+links: []
+prepare-build: null
+prepare-configure: null
+stlib: []
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/libtests/dl10.yml b/spec/build/testsuites/libtests/dl10.yml
new file mode 100644
index 0000000000..b3e4bc0ded
--- /dev/null
+++ b/spec/build/testsuites/libtests/dl10.yml
@@ -0,0 +1,47 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: script
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+do-build: |
+ path = "testsuites/libtests/dl10/"
+ objs = []
+ lib_objs = []
+ lib_objs.append(self.cc(bld, bic, path + "dl10-o2.c"))
+ lib_objs.append(self.cc(bld, bic, path + "dl10-o4.c"))
+ objs.append(self.ar(bld, lib_objs, path + "libdl10_1.a"))
+ lib_objs = []
+ lib_objs.append(self.cc(bld, bic, path + "dl10-o3.c"))
+ lib_objs.append(self.cc(bld, bic, path + "dl10-o5.c"))
+ lib_objs.append(self.cc(bld, bic, path + "dl10-o6.c"))
+ objs.append(self.ar(bld, lib_objs, path + "libdl10_2.a"))
+ objs.append(self.cc(bld, bic, path + "dl10-o1.c"))
+ tar = path + "dl10.tar"
+ self.tar(bld, [path + "etc/libdl.conf"] + objs, [path], tar)
+ tar_c, tar_h = self.bin2c(bld, tar)
+ objs = []
+ objs.append(self.cc(bld, bic, tar_c))
+ objs.append(self.cc(bld, bic, path + "init.c", deps=[tar_h], cppflags=bld.env.TEST_DL10_CPPFLAGS))
+ objs.append(self.cc(bld, bic, path + "dl-load.c"))
+ dl10_pre = path + "dl10.pre"
+ self.link_cc(bld, bic, objs, dl10_pre)
+ dl10_sym_o = path + "dl10-sym.o"
+ objs.append(dl10_sym_o)
+ self.rtems_syms(bld, dl10_pre, dl10_sym_o)
+ self.link_cc(bld, bic, objs, "testsuites/libtests/dl10.exe")
+do-configure: null
+enabled-by:
+- and:
+ - not: TEST_DL10_EXCLUDE
+ - BUILD_LIBDL
+includes:
+- testsuites/libtests/dl10
+ldflags: []
+links: []
+prepare-build: null
+prepare-configure: null
+stlib: []
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/libtests/dumpbuf01.yml b/spec/build/testsuites/libtests/dumpbuf01.yml
new file mode 100644
index 0000000000..6612744795
--- /dev/null
+++ b/spec/build/testsuites/libtests/dumpbuf01.yml
@@ -0,0 +1,19 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by: true
+features: c cprogram
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/libtests/dumpbuf01/init.c
+stlib: []
+target: testsuites/libtests/dumpbuf01.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/libtests/dup2.yml b/spec/build/testsuites/libtests/dup2.yml
new file mode 100644
index 0000000000..b7c687f721
--- /dev/null
+++ b/spec/build/testsuites/libtests/dup2.yml
@@ -0,0 +1,20 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by: true
+features: c cprogram
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/libtests/POSIX/dup2.c
+stlib: []
+target: testsuites/libtests/dup2.norun.exe
+type: build
+use-after: []
+use-before:
+- rtemsdefaultconfig
diff --git a/spec/build/testsuites/libtests/exit01.yml b/spec/build/testsuites/libtests/exit01.yml
new file mode 100644
index 0000000000..843a5274b7
--- /dev/null
+++ b/spec/build/testsuites/libtests/exit01.yml
@@ -0,0 +1,19 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by: true
+features: c cprogram
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/libtests/exit01/init.c
+stlib: []
+target: testsuites/libtests/exit01.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/libtests/exit02.yml b/spec/build/testsuites/libtests/exit02.yml
new file mode 100644
index 0000000000..dd5dda27db
--- /dev/null
+++ b/spec/build/testsuites/libtests/exit02.yml
@@ -0,0 +1,19 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by: true
+features: c cprogram
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/libtests/exit02/init.c
+stlib: []
+target: testsuites/libtests/exit02.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/libtests/fcntl.yml b/spec/build/testsuites/libtests/fcntl.yml
new file mode 100644
index 0000000000..7acd929c31
--- /dev/null
+++ b/spec/build/testsuites/libtests/fcntl.yml
@@ -0,0 +1,20 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by: true
+features: c cprogram
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/libtests/POSIX/fcntl.c
+stlib: []
+target: testsuites/libtests/fcntl.norun.exe
+type: build
+use-after: []
+use-before:
+- rtemsdefaultconfig
diff --git a/spec/build/testsuites/libtests/flashdisk01.yml b/spec/build/testsuites/libtests/flashdisk01.yml
new file mode 100644
index 0000000000..a20f37a8c4
--- /dev/null
+++ b/spec/build/testsuites/libtests/flashdisk01.yml
@@ -0,0 +1,20 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by: true
+features: c cprogram
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/libtests/flashdisk01/init.c
+- testsuites/libtests/flashdisk01/test-file-system.c
+stlib: []
+target: testsuites/libtests/flashdisk01.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/libtests/flockfile.yml b/spec/build/testsuites/libtests/flockfile.yml
new file mode 100644
index 0000000000..2a91885494
--- /dev/null
+++ b/spec/build/testsuites/libtests/flockfile.yml
@@ -0,0 +1,20 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by: true
+features: c cprogram
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/libtests/POSIX/flockfile.c
+stlib: []
+target: testsuites/libtests/flockfile.norun.exe
+type: build
+use-after: []
+use-before:
+- rtemsdefaultconfig
diff --git a/spec/build/testsuites/libtests/fork.yml b/spec/build/testsuites/libtests/fork.yml
new file mode 100644
index 0000000000..13799d20bf
--- /dev/null
+++ b/spec/build/testsuites/libtests/fork.yml
@@ -0,0 +1,20 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by: true
+features: c cprogram
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/libtests/POSIX/fork.c
+stlib: []
+target: testsuites/libtests/fork.norun.exe
+type: build
+use-after: []
+use-before:
+- rtemsdefaultconfig
diff --git a/spec/build/testsuites/libtests/free.yml b/spec/build/testsuites/libtests/free.yml
new file mode 100644
index 0000000000..bbc5ee340e
--- /dev/null
+++ b/spec/build/testsuites/libtests/free.yml
@@ -0,0 +1,20 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by: true
+features: c cprogram
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/libtests/POSIX/free.c
+stlib: []
+target: testsuites/libtests/free.norun.exe
+type: build
+use-after: []
+use-before:
+- rtemsdefaultconfig
diff --git a/spec/build/testsuites/libtests/fstat.yml b/spec/build/testsuites/libtests/fstat.yml
new file mode 100644
index 0000000000..8b4b506596
--- /dev/null
+++ b/spec/build/testsuites/libtests/fstat.yml
@@ -0,0 +1,20 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by: true
+features: c cprogram
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/libtests/POSIX/fstat.c
+stlib: []
+target: testsuites/libtests/fstat.norun.exe
+type: build
+use-after: []
+use-before:
+- rtemsdefaultconfig
diff --git a/spec/build/testsuites/libtests/ftp01.yml b/spec/build/testsuites/libtests/ftp01.yml
new file mode 100644
index 0000000000..2b19573bf7
--- /dev/null
+++ b/spec/build/testsuites/libtests/ftp01.yml
@@ -0,0 +1,23 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by:
+- RTEMS_NETWORKING
+features: c cprogram
+includes:
+- cpukit/libnetworking
+ldflags: []
+links: []
+source:
+- testsuites/libtests/ftp01/init.c
+stlib: []
+target: testsuites/libtests/ftp01.exe
+type: build
+use-after:
+- ftpd
+- ftpfs
+use-before: []
diff --git a/spec/build/testsuites/libtests/ftrylockfile.yml b/spec/build/testsuites/libtests/ftrylockfile.yml
new file mode 100644
index 0000000000..6a3935b71b
--- /dev/null
+++ b/spec/build/testsuites/libtests/ftrylockfile.yml
@@ -0,0 +1,20 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by: true
+features: c cprogram
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/libtests/POSIX/ftrylockfile.c
+stlib: []
+target: testsuites/libtests/ftrylockfile.norun.exe
+type: build
+use-after: []
+use-before:
+- rtemsdefaultconfig
diff --git a/spec/build/testsuites/libtests/funlockfile.yml b/spec/build/testsuites/libtests/funlockfile.yml
new file mode 100644
index 0000000000..5a91e1934d
--- /dev/null
+++ b/spec/build/testsuites/libtests/funlockfile.yml
@@ -0,0 +1,20 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by: true
+features: c cprogram
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/libtests/POSIX/funlockfile.c
+stlib: []
+target: testsuites/libtests/funlockfile.norun.exe
+type: build
+use-after: []
+use-before:
+- rtemsdefaultconfig
diff --git a/spec/build/testsuites/libtests/getentropy01.yml b/spec/build/testsuites/libtests/getentropy01.yml
new file mode 100644
index 0000000000..43a384b25d
--- /dev/null
+++ b/spec/build/testsuites/libtests/getentropy01.yml
@@ -0,0 +1,19 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by: true
+features: c cprogram
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/libtests/getentropy01/init.c
+stlib: []
+target: testsuites/libtests/getentropy01.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/libtests/getlogin.yml b/spec/build/testsuites/libtests/getlogin.yml
new file mode 100644
index 0000000000..b77349b4a9
--- /dev/null
+++ b/spec/build/testsuites/libtests/getlogin.yml
@@ -0,0 +1,20 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by: true
+features: c cprogram
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/libtests/POSIX/getlogin.c
+stlib: []
+target: testsuites/libtests/getlogin.norun.exe
+type: build
+use-after: []
+use-before:
+- rtemsdefaultconfig
diff --git a/spec/build/testsuites/libtests/getpwnam.yml b/spec/build/testsuites/libtests/getpwnam.yml
new file mode 100644
index 0000000000..097b0b5fad
--- /dev/null
+++ b/spec/build/testsuites/libtests/getpwnam.yml
@@ -0,0 +1,20 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by: true
+features: c cprogram
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/libtests/POSIX/getpwnam.c
+stlib: []
+target: testsuites/libtests/getpwnam.norun.exe
+type: build
+use-after: []
+use-before:
+- rtemsdefaultconfig
diff --git a/spec/build/testsuites/libtests/getpwuid.yml b/spec/build/testsuites/libtests/getpwuid.yml
new file mode 100644
index 0000000000..3c2ac96f34
--- /dev/null
+++ b/spec/build/testsuites/libtests/getpwuid.yml
@@ -0,0 +1,20 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by: true
+features: c cprogram
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/libtests/POSIX/getpwuid.c
+stlib: []
+target: testsuites/libtests/getpwuid.norun.exe
+type: build
+use-after: []
+use-before:
+- rtemsdefaultconfig
diff --git a/spec/build/testsuites/libtests/gettimeofday.yml b/spec/build/testsuites/libtests/gettimeofday.yml
new file mode 100644
index 0000000000..2d5f3bea6d
--- /dev/null
+++ b/spec/build/testsuites/libtests/gettimeofday.yml
@@ -0,0 +1,20 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by: true
+features: c cprogram
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/libtests/POSIX/gettimeofday.c
+stlib: []
+target: testsuites/libtests/gettimeofday.norun.exe
+type: build
+use-after: []
+use-before:
+- rtemsdefaultconfig
diff --git a/spec/build/testsuites/libtests/getuid.yml b/spec/build/testsuites/libtests/getuid.yml
new file mode 100644
index 0000000000..a51de287b1
--- /dev/null
+++ b/spec/build/testsuites/libtests/getuid.yml
@@ -0,0 +1,20 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by: true
+features: c cprogram
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/libtests/POSIX/getuid.c
+stlib: []
+target: testsuites/libtests/getuid.norun.exe
+type: build
+use-after: []
+use-before:
+- rtemsdefaultconfig
diff --git a/spec/build/testsuites/libtests/grp.yml b/spec/build/testsuites/libtests/grp.yml
new file mode 100644
index 0000000000..2b1f2727cf
--- /dev/null
+++ b/spec/build/testsuites/libtests/grp.yml
@@ -0,0 +1,320 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: group
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+enabled-by:
+- BUILD_TESTS
+- BUILD_LIBTESTS
+includes:
+- testsuites/support/include
+install: []
+ldflags:
+- -Wl,--wrap=printf
+- -Wl,--wrap=puts
+links:
+- role: build-dependency
+ uid: optbin2c
+- role: build-dependency
+ uid: optgzip
+- role: build-dependency
+ uid: optrtemsld
+- role: build-dependency
+ uid: optrtemssyms
+- role: build-dependency
+ uid: optxz
+- role: build-dependency
+ uid: block01
+- role: build-dependency
+ uid: block02
+- role: build-dependency
+ uid: block03
+- role: build-dependency
+ uid: block04
+- role: build-dependency
+ uid: block05
+- role: build-dependency
+ uid: block06
+- role: build-dependency
+ uid: block07
+- role: build-dependency
+ uid: block08
+- role: build-dependency
+ uid: block09
+- role: build-dependency
+ uid: block10
+- role: build-dependency
+ uid: block11
+- role: build-dependency
+ uid: block12
+- role: build-dependency
+ uid: block13
+- role: build-dependency
+ uid: block14
+- role: build-dependency
+ uid: block15
+- role: build-dependency
+ uid: block16
+- role: build-dependency
+ uid: block17
+- role: build-dependency
+ uid: bspcmdline01
+- role: build-dependency
+ uid: calloc
+- role: build-dependency
+ uid: capture01
+- role: build-dependency
+ uid: clockgettime
+- role: build-dependency
+ uid: close
+- role: build-dependency
+ uid: complex
+- role: build-dependency
+ uid: cpuuse
+- role: build-dependency
+ uid: crypt01
+- role: build-dependency
+ uid: debugger01
+- role: build-dependency
+ uid: defaultconfig01
+- role: build-dependency
+ uid: devfs01
+- role: build-dependency
+ uid: devfs04
+- role: build-dependency
+ uid: deviceio01
+- role: build-dependency
+ uid: devnullfatal01
+- role: build-dependency
+ uid: dl01
+- role: build-dependency
+ uid: dl02
+- role: build-dependency
+ uid: dl03
+- role: build-dependency
+ uid: dl04
+- role: build-dependency
+ uid: dl05
+- role: build-dependency
+ uid: dl06
+- role: build-dependency
+ uid: dl07
+- role: build-dependency
+ uid: dl08
+- role: build-dependency
+ uid: dl09
+- role: build-dependency
+ uid: dl10
+- role: build-dependency
+ uid: dumpbuf01
+- role: build-dependency
+ uid: dup2
+- role: build-dependency
+ uid: exit01
+- role: build-dependency
+ uid: exit02
+- role: build-dependency
+ uid: fcntl
+- role: build-dependency
+ uid: flashdisk01
+- role: build-dependency
+ uid: flockfile
+- role: build-dependency
+ uid: fork
+- role: build-dependency
+ uid: free
+- role: build-dependency
+ uid: fstat
+- role: build-dependency
+ uid: ftp01
+- role: build-dependency
+ uid: ftrylockfile
+- role: build-dependency
+ uid: funlockfile
+- role: build-dependency
+ uid: getentropy01
+- role: build-dependency
+ uid: getlogin
+- role: build-dependency
+ uid: getpwnam
+- role: build-dependency
+ uid: getpwuid
+- role: build-dependency
+ uid: gettimeofday
+- role: build-dependency
+ uid: getuid
+- role: build-dependency
+ uid: gxx01
+- role: build-dependency
+ uid: heapwalk
+- role: build-dependency
+ uid: htonl
+- role: build-dependency
+ uid: i2c01
+- role: build-dependency
+ uid: iconv
+- role: build-dependency
+ uid: iconvclose
+- role: build-dependency
+ uid: iconvopen
+- role: build-dependency
+ uid: irqs01
+- role: build-dependency
+ uid: kill
+- role: build-dependency
+ uid: libfdt01
+- role: build-dependency
+ uid: longjmp
+- role: build-dependency
+ uid: lseek
+- role: build-dependency
+ uid: lstat
+- role: build-dependency
+ uid: malloc
+- role: build-dependency
+ uid: malloc02
+- role: build-dependency
+ uid: malloc03
+- role: build-dependency
+ uid: malloc04
+- role: build-dependency
+ uid: malloctest
+- role: build-dependency
+ uid: math
+- role: build-dependency
+ uid: mathf
+- role: build-dependency
+ uid: mathl
+- role: build-dependency
+ uid: md501
+- role: build-dependency
+ uid: mghttpd01
+- role: build-dependency
+ uid: monitor
+- role: build-dependency
+ uid: monitor02
+- role: build-dependency
+ uid: mouse01
+- role: build-dependency
+ uid: nanosleep
+- role: build-dependency
+ uid: networking01
+- role: build-dependency
+ uid: newlib01
+- role: build-dependency
+ uid: open
+- role: build-dependency
+ uid: pipe
+- role: build-dependency
+ uid: posixmemalign
+- role: build-dependency
+ uid: putenvtest
+- role: build-dependency
+ uid: pwdgrp01
+- role: build-dependency
+ uid: pwdgrp02
+- role: build-dependency
+ uid: rbheap01
+- role: build-dependency
+ uid: read
+- role: build-dependency
+ uid: readv
+- role: build-dependency
+ uid: realloc
+- role: build-dependency
+ uid: record01
+- role: build-dependency
+ uid: record02
+- role: build-dependency
+ uid: rtmonuse
+- role: build-dependency
+ uid: setjmp
+- role: build-dependency
+ uid: sha
+- role: build-dependency
+ uid: shell01
+- role: build-dependency
+ uid: sigaddset
+- role: build-dependency
+ uid: sigdelset
+- role: build-dependency
+ uid: sigemptyset
+- role: build-dependency
+ uid: sigfillset
+- role: build-dependency
+ uid: sigismember
+- role: build-dependency
+ uid: sigprocmask
+- role: build-dependency
+ uid: sparsedisk01
+- role: build-dependency
+ uid: spi01
+- role: build-dependency
+ uid: stackchk
+- role: build-dependency
+ uid: stackchk01
+- role: build-dependency
+ uid: stat
+- role: build-dependency
+ uid: stringto01
+- role: build-dependency
+ uid: syscall01
+- role: build-dependency
+ uid: tar01
+- role: build-dependency
+ uid: tar02
+- role: build-dependency
+ uid: tar03
+- role: build-dependency
+ uid: telnetd01
+- role: build-dependency
+ uid: termios
+- role: build-dependency
+ uid: termios01
+- role: build-dependency
+ uid: termios02
+- role: build-dependency
+ uid: termios03
+- role: build-dependency
+ uid: termios04
+- role: build-dependency
+ uid: termios05
+- role: build-dependency
+ uid: termios06
+- role: build-dependency
+ uid: termios07
+- role: build-dependency
+ uid: termios08
+- role: build-dependency
+ uid: termios09
+- role: build-dependency
+ uid: termios10
+- role: build-dependency
+ uid: termios11
+- role: build-dependency
+ uid: top
+- role: build-dependency
+ uid: ttest01
+- role: build-dependency
+ uid: ttest02
+- role: build-dependency
+ uid: tztest
+- role: build-dependency
+ uid: uid01
+- role: build-dependency
+ uid: unlink
+- role: build-dependency
+ uid: utf8proc01
+- role: build-dependency
+ uid: vfork
+- role: build-dependency
+ uid: wait
+- role: build-dependency
+ uid: waitpid
+- role: build-dependency
+ uid: write
+- role: build-dependency
+ uid: writev
+type: build
+use-after:
+- rtemstest
+use-before: []
diff --git a/spec/build/testsuites/libtests/gxx01.yml b/spec/build/testsuites/libtests/gxx01.yml
new file mode 100644
index 0000000000..1027db9b9a
--- /dev/null
+++ b/spec/build/testsuites/libtests/gxx01.yml
@@ -0,0 +1,19 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by: true
+features: c cprogram
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/libtests/gxx01/init.c
+stlib: []
+target: testsuites/libtests/gxx01.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/libtests/heapwalk.yml b/spec/build/testsuites/libtests/heapwalk.yml
new file mode 100644
index 0000000000..627ddcff63
--- /dev/null
+++ b/spec/build/testsuites/libtests/heapwalk.yml
@@ -0,0 +1,19 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by: true
+features: c cprogram
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/libtests/heapwalk/init.c
+stlib: []
+target: testsuites/libtests/heapwalk.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/libtests/htonl.yml b/spec/build/testsuites/libtests/htonl.yml
new file mode 100644
index 0000000000..cc3306dd3b
--- /dev/null
+++ b/spec/build/testsuites/libtests/htonl.yml
@@ -0,0 +1,20 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by: true
+features: c cprogram
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/libtests/POSIX/htonl.c
+stlib: []
+target: testsuites/libtests/htonl.norun.exe
+type: build
+use-after: []
+use-before:
+- rtemsdefaultconfig
diff --git a/spec/build/testsuites/libtests/i2c01.yml b/spec/build/testsuites/libtests/i2c01.yml
new file mode 100644
index 0000000000..d7de2fb8b9
--- /dev/null
+++ b/spec/build/testsuites/libtests/i2c01.yml
@@ -0,0 +1,19 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by: true
+features: c cprogram
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/libtests/i2c01/init.c
+stlib: []
+target: testsuites/libtests/i2c01.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/libtests/iconv.yml b/spec/build/testsuites/libtests/iconv.yml
new file mode 100644
index 0000000000..28ebde37ff
--- /dev/null
+++ b/spec/build/testsuites/libtests/iconv.yml
@@ -0,0 +1,20 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by: true
+features: c cprogram
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/libtests/POSIX/iconv.c
+stlib: []
+target: testsuites/libtests/iconv.norun.exe
+type: build
+use-after: []
+use-before:
+- rtemsdefaultconfig
diff --git a/spec/build/testsuites/libtests/iconvclose.yml b/spec/build/testsuites/libtests/iconvclose.yml
new file mode 100644
index 0000000000..634b45b51f
--- /dev/null
+++ b/spec/build/testsuites/libtests/iconvclose.yml
@@ -0,0 +1,20 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by: true
+features: c cprogram
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/libtests/POSIX/iconv_close.c
+stlib: []
+target: testsuites/libtests/iconv_close.norun.exe
+type: build
+use-after: []
+use-before:
+- rtemsdefaultconfig
diff --git a/spec/build/testsuites/libtests/iconvopen.yml b/spec/build/testsuites/libtests/iconvopen.yml
new file mode 100644
index 0000000000..dd59e9bf66
--- /dev/null
+++ b/spec/build/testsuites/libtests/iconvopen.yml
@@ -0,0 +1,20 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by: true
+features: c cprogram
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/libtests/POSIX/iconv_open.c
+stlib: []
+target: testsuites/libtests/iconv_open.norun.exe
+type: build
+use-after: []
+use-before:
+- rtemsdefaultconfig
diff --git a/spec/build/testsuites/libtests/irqs01.yml b/spec/build/testsuites/libtests/irqs01.yml
new file mode 100644
index 0000000000..0ad3898317
--- /dev/null
+++ b/spec/build/testsuites/libtests/irqs01.yml
@@ -0,0 +1,19 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by: true
+features: c cprogram
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/libtests/irqs01/init.c
+stlib: []
+target: testsuites/libtests/irqs01.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/libtests/kill.yml b/spec/build/testsuites/libtests/kill.yml
new file mode 100644
index 0000000000..3cab7d2bbf
--- /dev/null
+++ b/spec/build/testsuites/libtests/kill.yml
@@ -0,0 +1,20 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by: true
+features: c cprogram
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/libtests/POSIX/kill.c
+stlib: []
+target: testsuites/libtests/kill.norun.exe
+type: build
+use-after: []
+use-before:
+- rtemsdefaultconfig
diff --git a/spec/build/testsuites/libtests/libdl081.yml b/spec/build/testsuites/libtests/libdl081.yml
new file mode 100644
index 0000000000..8c03f8c67d
--- /dev/null
+++ b/spec/build/testsuites/libtests/libdl081.yml
@@ -0,0 +1,17 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: library
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by: true
+includes: []
+install: []
+install-path: null
+links: []
+source:
+- testsuites/libtests/dl08-o2.c
+- testsuites/libtests/dl08-o4.c
+target: dl08_1
+type: build
diff --git a/spec/build/testsuites/libtests/libdl082.yml b/spec/build/testsuites/libtests/libdl082.yml
new file mode 100644
index 0000000000..d75f02bfa5
--- /dev/null
+++ b/spec/build/testsuites/libtests/libdl082.yml
@@ -0,0 +1,18 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: library
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by: true
+includes: []
+install: []
+install-path: null
+links: []
+source:
+- testsuites/libtests/dl08-o3.c
+- testsuites/libtests/dl08-o5.c
+- testsuites/libtests/dl08-o6-123456789-123456789.c
+target: dl08_2
+type: build
diff --git a/spec/build/testsuites/libtests/libdl101.yml b/spec/build/testsuites/libtests/libdl101.yml
new file mode 100644
index 0000000000..4270c3f129
--- /dev/null
+++ b/spec/build/testsuites/libtests/libdl101.yml
@@ -0,0 +1,17 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: library
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by: true
+includes: []
+install: []
+install-path: null
+links: []
+source:
+- testsuites/libtests/dl10-o2.c
+- testsuites/libtests/dl10-o4.c
+target: dl10_1
+type: build
diff --git a/spec/build/testsuites/libtests/libdl102.yml b/spec/build/testsuites/libtests/libdl102.yml
new file mode 100644
index 0000000000..7426e94a84
--- /dev/null
+++ b/spec/build/testsuites/libtests/libdl102.yml
@@ -0,0 +1,18 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: library
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by: true
+includes: []
+install: []
+install-path: null
+links: []
+source:
+- testsuites/libtests/dl10-o3.c
+- testsuites/libtests/dl10-o5.c
+- testsuites/libtests/dl10-o6.c
+target: dl10_2
+type: build
diff --git a/spec/build/testsuites/libtests/libfdt01.yml b/spec/build/testsuites/libtests/libfdt01.yml
new file mode 100644
index 0000000000..9d22f5c0e2
--- /dev/null
+++ b/spec/build/testsuites/libtests/libfdt01.yml
@@ -0,0 +1,20 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by: true
+features: c cprogram
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/libtests/libfdt01/init.c
+- testsuites/libtests/libfdt01/some.c
+stlib: []
+target: testsuites/libtests/libfdt01.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/libtests/longjmp.yml b/spec/build/testsuites/libtests/longjmp.yml
new file mode 100644
index 0000000000..dba164d53e
--- /dev/null
+++ b/spec/build/testsuites/libtests/longjmp.yml
@@ -0,0 +1,20 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by: true
+features: c cprogram
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/libtests/POSIX/longjmp.c
+stlib: []
+target: testsuites/libtests/longjmp.norun.exe
+type: build
+use-after: []
+use-before:
+- rtemsdefaultconfig
diff --git a/spec/build/testsuites/libtests/lseek.yml b/spec/build/testsuites/libtests/lseek.yml
new file mode 100644
index 0000000000..376d6e8e33
--- /dev/null
+++ b/spec/build/testsuites/libtests/lseek.yml
@@ -0,0 +1,20 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by: true
+features: c cprogram
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/libtests/POSIX/lseek.c
+stlib: []
+target: testsuites/libtests/lseek.norun.exe
+type: build
+use-after: []
+use-before:
+- rtemsdefaultconfig
diff --git a/spec/build/testsuites/libtests/lstat.yml b/spec/build/testsuites/libtests/lstat.yml
new file mode 100644
index 0000000000..06a23160e5
--- /dev/null
+++ b/spec/build/testsuites/libtests/lstat.yml
@@ -0,0 +1,20 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by: true
+features: c cprogram
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/libtests/POSIX/lstat.c
+stlib: []
+target: testsuites/libtests/lstat.norun.exe
+type: build
+use-after: []
+use-before:
+- rtemsdefaultconfig
diff --git a/spec/build/testsuites/libtests/malloc.yml b/spec/build/testsuites/libtests/malloc.yml
new file mode 100644
index 0000000000..8030add71c
--- /dev/null
+++ b/spec/build/testsuites/libtests/malloc.yml
@@ -0,0 +1,20 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by: true
+features: c cprogram
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/libtests/POSIX/malloc.c
+stlib: []
+target: testsuites/libtests/malloc.norun.exe
+type: build
+use-after: []
+use-before:
+- rtemsdefaultconfig
diff --git a/spec/build/testsuites/libtests/malloc02.yml b/spec/build/testsuites/libtests/malloc02.yml
new file mode 100644
index 0000000000..2414f33d1b
--- /dev/null
+++ b/spec/build/testsuites/libtests/malloc02.yml
@@ -0,0 +1,19 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by: true
+features: c cprogram
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/libtests/malloc02/init.c
+stlib: []
+target: testsuites/libtests/malloc02.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/libtests/malloc03.yml b/spec/build/testsuites/libtests/malloc03.yml
new file mode 100644
index 0000000000..7ed299bf09
--- /dev/null
+++ b/spec/build/testsuites/libtests/malloc03.yml
@@ -0,0 +1,19 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by: true
+features: c cprogram
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/libtests/malloc03/init.c
+stlib: []
+target: testsuites/libtests/malloc03.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/libtests/malloc04.yml b/spec/build/testsuites/libtests/malloc04.yml
new file mode 100644
index 0000000000..c3b884d0a0
--- /dev/null
+++ b/spec/build/testsuites/libtests/malloc04.yml
@@ -0,0 +1,19 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by: true
+features: c cprogram
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/libtests/malloc04/init.c
+stlib: []
+target: testsuites/libtests/malloc04.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/libtests/malloctest.yml b/spec/build/testsuites/libtests/malloctest.yml
new file mode 100644
index 0000000000..db426564cb
--- /dev/null
+++ b/spec/build/testsuites/libtests/malloctest.yml
@@ -0,0 +1,20 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by: true
+features: c cprogram
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/libtests/malloctest/init.c
+- testsuites/libtests/malloctest/task1.c
+stlib: []
+target: testsuites/libtests/malloctest.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/libtests/math.yml b/spec/build/testsuites/libtests/math.yml
new file mode 100644
index 0000000000..bbd07e5955
--- /dev/null
+++ b/spec/build/testsuites/libtests/math.yml
@@ -0,0 +1,22 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by: true
+features: c cprogram
+includes:
+- testsuites/libtests/math
+ldflags: []
+links: []
+source:
+- testsuites/libtests/math/init.c
+- testsuites/libtests/math/domath.c
+stlib:
+- m
+target: testsuites/libtests/math.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/libtests/mathf.yml b/spec/build/testsuites/libtests/mathf.yml
new file mode 100644
index 0000000000..95b06376d3
--- /dev/null
+++ b/spec/build/testsuites/libtests/mathf.yml
@@ -0,0 +1,22 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by: true
+features: c cprogram
+includes:
+- testsuites/libtests/math
+ldflags: []
+links: []
+source:
+- testsuites/libtests/mathf/init.c
+- testsuites/libtests/mathf/domathf.c
+stlib:
+- m
+target: testsuites/libtests/mathf.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/libtests/mathl.yml b/spec/build/testsuites/libtests/mathl.yml
new file mode 100644
index 0000000000..4e73fef6bb
--- /dev/null
+++ b/spec/build/testsuites/libtests/mathl.yml
@@ -0,0 +1,22 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by: true
+features: c cprogram
+includes:
+- testsuites/libtests/math
+ldflags: []
+links: []
+source:
+- testsuites/libtests/mathl/init.c
+- testsuites/libtests/mathl/domathl.c
+stlib:
+- m
+target: testsuites/libtests/mathl.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/libtests/md501.yml b/spec/build/testsuites/libtests/md501.yml
new file mode 100644
index 0000000000..2ef88600a6
--- /dev/null
+++ b/spec/build/testsuites/libtests/md501.yml
@@ -0,0 +1,19 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by: true
+features: c cprogram
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/libtests/md501/init.c
+stlib: []
+target: testsuites/libtests/md501.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/libtests/mghttpd01.yml b/spec/build/testsuites/libtests/mghttpd01.yml
new file mode 100644
index 0000000000..711ca3846d
--- /dev/null
+++ b/spec/build/testsuites/libtests/mghttpd01.yml
@@ -0,0 +1,32 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: script
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+do-build: |
+ path = "testsuites/libtests/mghttpd01/"
+ tar_c, tar_h = self.bin2c(bld, path + "mghttpd01.tar")
+ objs = []
+ objs.append(self.cc(bld, bic, tar_c))
+ objs.append(self.cc(bld, bic, path + "init.c", deps=[tar_h], cppflags=bld.env.TEST_MGHTTPD01_CPPFLAGS))
+ objs.append(self.cc(bld, bic, path + "test-http-client.c"))
+ self.link_cc(bld, bic, objs, "testsuites/libtests/mghttpd01.exe")
+do-configure: null
+enabled-by:
+- and:
+ - RTEMS_NETWORKING
+ - RTEMS_POSIX_API
+ - not: TEST_MGHTTPD01_EXCLUDE
+includes:
+- cpukit/libnetworking
+- testsuites/libtests/mghttpd01
+ldflags: []
+links: []
+prepare-build: null
+prepare-configure: null
+stlib: []
+type: build
+use-after:
+- mghttpd
+use-before: []
diff --git a/spec/build/testsuites/libtests/monitor.yml b/spec/build/testsuites/libtests/monitor.yml
new file mode 100644
index 0000000000..03849d08e3
--- /dev/null
+++ b/spec/build/testsuites/libtests/monitor.yml
@@ -0,0 +1,19 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by: true
+features: c cprogram
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/libtests/monitor/init.c
+stlib: []
+target: testsuites/libtests/monitor.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/libtests/monitor02.yml b/spec/build/testsuites/libtests/monitor02.yml
new file mode 100644
index 0000000000..f6d3a8e577
--- /dev/null
+++ b/spec/build/testsuites/libtests/monitor02.yml
@@ -0,0 +1,19 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by: true
+features: c cprogram
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/libtests/monitor02/init.c
+stlib: []
+target: testsuites/libtests/monitor02.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/libtests/mouse01.yml b/spec/build/testsuites/libtests/mouse01.yml
new file mode 100644
index 0000000000..7178981af8
--- /dev/null
+++ b/spec/build/testsuites/libtests/mouse01.yml
@@ -0,0 +1,22 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by: true
+features: c cprogram
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/libtests/mouse01/init.c
+- testsuites/libtests/mouse01/serial_mouse_config.c
+- testsuites/libtests/mouse01/msmouse.c
+- testsuites/libtests/termios04/termios_testdriver_intr.c
+stlib: []
+target: testsuites/libtests/mouse01.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/libtests/nanosleep.yml b/spec/build/testsuites/libtests/nanosleep.yml
new file mode 100644
index 0000000000..c3115dad58
--- /dev/null
+++ b/spec/build/testsuites/libtests/nanosleep.yml
@@ -0,0 +1,20 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by: true
+features: c cprogram
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/libtests/POSIX/nanosleep.c
+stlib: []
+target: testsuites/libtests/nanosleep.norun.exe
+type: build
+use-after: []
+use-before:
+- rtemsdefaultconfig
diff --git a/spec/build/testsuites/libtests/networking01.yml b/spec/build/testsuites/libtests/networking01.yml
new file mode 100644
index 0000000000..958134af27
--- /dev/null
+++ b/spec/build/testsuites/libtests/networking01.yml
@@ -0,0 +1,21 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by:
+- RTEMS_NETWORKING
+features: c cprogram
+includes:
+- cpukit/libnetworking
+ldflags: []
+links: []
+source:
+- testsuites/libtests/networking01/init.c
+stlib: []
+target: testsuites/libtests/networking01.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/libtests/newlib01.yml b/spec/build/testsuites/libtests/newlib01.yml
new file mode 100644
index 0000000000..0c187f9223
--- /dev/null
+++ b/spec/build/testsuites/libtests/newlib01.yml
@@ -0,0 +1,19 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by: true
+features: c cprogram
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/libtests/newlib01/init.c
+stlib: []
+target: testsuites/libtests/newlib01.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/libtests/open.yml b/spec/build/testsuites/libtests/open.yml
new file mode 100644
index 0000000000..3bbd93c83a
--- /dev/null
+++ b/spec/build/testsuites/libtests/open.yml
@@ -0,0 +1,20 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by: true
+features: c cprogram
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/libtests/POSIX/open.c
+stlib: []
+target: testsuites/libtests/open.norun.exe
+type: build
+use-after: []
+use-before:
+- rtemsdefaultconfig
diff --git a/spec/build/testsuites/libtests/optbin2c.yml b/spec/build/testsuites/libtests/optbin2c.yml
new file mode 100644
index 0000000000..0470905529
--- /dev/null
+++ b/spec/build/testsuites/libtests/optbin2c.yml
@@ -0,0 +1,14 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+actions:
+- set-value: rtems-bin2c
+- find-program: null
+- env-assign: BIN2C
+build-type: option
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+default: null
+default-by-variant: []
+description: ''
+enabled-by: true
+links: []
+type: build
diff --git a/spec/build/testsuites/libtests/optgzip.yml b/spec/build/testsuites/libtests/optgzip.yml
new file mode 100644
index 0000000000..d53136b076
--- /dev/null
+++ b/spec/build/testsuites/libtests/optgzip.yml
@@ -0,0 +1,14 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+actions:
+- set-value: gzip
+- find-program: null
+- env-assign: GZIP
+build-type: option
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+default: null
+default-by-variant: []
+description: ''
+enabled-by: true
+links: []
+type: build
diff --git a/spec/build/testsuites/libtests/optrtemsld.yml b/spec/build/testsuites/libtests/optrtemsld.yml
new file mode 100644
index 0000000000..1373023c7e
--- /dev/null
+++ b/spec/build/testsuites/libtests/optrtemsld.yml
@@ -0,0 +1,14 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+actions:
+- set-value: rtems-ld
+- find-program: null
+- env-assign: RTEMS_LD
+build-type: option
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+default: null
+default-by-variant: []
+description: ''
+enabled-by: true
+links: []
+type: build
diff --git a/spec/build/testsuites/libtests/optrtemssyms.yml b/spec/build/testsuites/libtests/optrtemssyms.yml
new file mode 100644
index 0000000000..51872b04b7
--- /dev/null
+++ b/spec/build/testsuites/libtests/optrtemssyms.yml
@@ -0,0 +1,14 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+actions:
+- set-value: rtems-syms
+- find-program: null
+- env-assign: RTEMS_SYMS
+build-type: option
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+default: null
+default-by-variant: []
+description: ''
+enabled-by: true
+links: []
+type: build
diff --git a/spec/build/testsuites/libtests/optxz.yml b/spec/build/testsuites/libtests/optxz.yml
new file mode 100644
index 0000000000..8bad91a7bb
--- /dev/null
+++ b/spec/build/testsuites/libtests/optxz.yml
@@ -0,0 +1,14 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+actions:
+- set-value: xz
+- find-program: null
+- env-assign: XZ
+build-type: option
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+default: null
+default-by-variant: []
+description: ''
+enabled-by: true
+links: []
+type: build
diff --git a/spec/build/testsuites/libtests/pipe.yml b/spec/build/testsuites/libtests/pipe.yml
new file mode 100644
index 0000000000..32ce03e3b7
--- /dev/null
+++ b/spec/build/testsuites/libtests/pipe.yml
@@ -0,0 +1,20 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by: true
+features: c cprogram
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/libtests/POSIX/pipe.c
+stlib: []
+target: testsuites/libtests/pipe.norun.exe
+type: build
+use-after: []
+use-before:
+- rtemsdefaultconfig
diff --git a/spec/build/testsuites/libtests/posix.yml b/spec/build/testsuites/libtests/posix.yml
new file mode 100644
index 0000000000..95d1e1c5ca
--- /dev/null
+++ b/spec/build/testsuites/libtests/posix.yml
@@ -0,0 +1,66 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by: true
+features: c cprogram
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/libtests/POSIX/calloc.c
+- testsuites/libtests/POSIX/clock_gettime.c
+- testsuites/libtests/POSIX/close.c
+- testsuites/libtests/POSIX/dup2.c
+- testsuites/libtests/POSIX/fcntl.c
+- testsuites/libtests/POSIX/flockfile.c
+- testsuites/libtests/POSIX/fork.c
+- testsuites/libtests/POSIX/free.c
+- testsuites/libtests/POSIX/fstat.c
+- testsuites/libtests/POSIX/ftrylockfile.c
+- testsuites/libtests/POSIX/funlockfile.c
+- testsuites/libtests/POSIX/getdents.c
+- testsuites/libtests/POSIX/getlogin.c
+- testsuites/libtests/POSIX/getpwnam.c
+- testsuites/libtests/POSIX/getpwuid.c
+- testsuites/libtests/POSIX/gettimeofday.c
+- testsuites/libtests/POSIX/getuid.c
+- testsuites/libtests/POSIX/htonl.c
+- testsuites/libtests/POSIX/iconv.c
+- testsuites/libtests/POSIX/iconv_close.c
+- testsuites/libtests/POSIX/iconv_open.c
+- testsuites/libtests/POSIX/issetugid.c
+- testsuites/libtests/POSIX/kill.c
+- testsuites/libtests/POSIX/longjmp.c
+- testsuites/libtests/POSIX/lseek.c
+- testsuites/libtests/POSIX/lstat.c
+- testsuites/libtests/POSIX/malloc.c
+- testsuites/libtests/POSIX/nanosleep.c
+- testsuites/libtests/POSIX/open.c
+- testsuites/libtests/POSIX/pipe.c
+- testsuites/libtests/POSIX/posix_memalign.c
+- testsuites/libtests/POSIX/read.c
+- testsuites/libtests/POSIX/readv.c
+- testsuites/libtests/POSIX/realloc.c
+- testsuites/libtests/POSIX/setjmp.c
+- testsuites/libtests/POSIX/sigaddset.c
+- testsuites/libtests/POSIX/sigdelset.c
+- testsuites/libtests/POSIX/sigemptyset.c
+- testsuites/libtests/POSIX/sigfillset.c
+- testsuites/libtests/POSIX/sigismember.c
+- testsuites/libtests/POSIX/sigprocmask.c
+- testsuites/libtests/POSIX/stat.c
+- testsuites/libtests/POSIX/unlink.c
+- testsuites/libtests/POSIX/vfork.c
+- testsuites/libtests/POSIX/wait.c
+- testsuites/libtests/POSIX/waitpid.c
+- testsuites/libtests/POSIX/write.c
+- testsuites/libtests/POSIX/writev.c
+stlib: []
+target: testsuites/libtests/POSIX.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/libtests/posixmemalign.yml b/spec/build/testsuites/libtests/posixmemalign.yml
new file mode 100644
index 0000000000..3ea147bc7d
--- /dev/null
+++ b/spec/build/testsuites/libtests/posixmemalign.yml
@@ -0,0 +1,20 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by: true
+features: c cprogram
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/libtests/POSIX/posix_memalign.c
+stlib: []
+target: testsuites/libtests/posix_memalign.norun.exe
+type: build
+use-after: []
+use-before:
+- rtemsdefaultconfig
diff --git a/spec/build/testsuites/libtests/putenvtest.yml b/spec/build/testsuites/libtests/putenvtest.yml
new file mode 100644
index 0000000000..d686be8e81
--- /dev/null
+++ b/spec/build/testsuites/libtests/putenvtest.yml
@@ -0,0 +1,19 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by: true
+features: c cprogram
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/libtests/putenvtest/init.c
+stlib: []
+target: testsuites/libtests/putenvtest.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/libtests/pwdgrp01.yml b/spec/build/testsuites/libtests/pwdgrp01.yml
new file mode 100644
index 0000000000..b254bd36bb
--- /dev/null
+++ b/spec/build/testsuites/libtests/pwdgrp01.yml
@@ -0,0 +1,19 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by: true
+features: c cprogram
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/libtests/pwdgrp01/init.c
+stlib: []
+target: testsuites/libtests/pwdgrp01.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/libtests/pwdgrp02.yml b/spec/build/testsuites/libtests/pwdgrp02.yml
new file mode 100644
index 0000000000..be74dd312e
--- /dev/null
+++ b/spec/build/testsuites/libtests/pwdgrp02.yml
@@ -0,0 +1,19 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by: true
+features: c cprogram
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/libtests/pwdgrp02/init.c
+stlib: []
+target: testsuites/libtests/pwdgrp02.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/libtests/rbheap01.yml b/spec/build/testsuites/libtests/rbheap01.yml
new file mode 100644
index 0000000000..140bfa2a3c
--- /dev/null
+++ b/spec/build/testsuites/libtests/rbheap01.yml
@@ -0,0 +1,19 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by: true
+features: c cprogram
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/libtests/rbheap01/init.c
+stlib: []
+target: testsuites/libtests/rbheap01.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/libtests/read.yml b/spec/build/testsuites/libtests/read.yml
new file mode 100644
index 0000000000..13f91e317b
--- /dev/null
+++ b/spec/build/testsuites/libtests/read.yml
@@ -0,0 +1,20 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by: true
+features: c cprogram
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/libtests/POSIX/read.c
+stlib: []
+target: testsuites/libtests/read.norun.exe
+type: build
+use-after: []
+use-before:
+- rtemsdefaultconfig
diff --git a/spec/build/testsuites/libtests/readv.yml b/spec/build/testsuites/libtests/readv.yml
new file mode 100644
index 0000000000..fb483d551b
--- /dev/null
+++ b/spec/build/testsuites/libtests/readv.yml
@@ -0,0 +1,20 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by: true
+features: c cprogram
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/libtests/POSIX/readv.c
+stlib: []
+target: testsuites/libtests/readv.norun.exe
+type: build
+use-after: []
+use-before:
+- rtemsdefaultconfig
diff --git a/spec/build/testsuites/libtests/realloc.yml b/spec/build/testsuites/libtests/realloc.yml
new file mode 100644
index 0000000000..f353038ca9
--- /dev/null
+++ b/spec/build/testsuites/libtests/realloc.yml
@@ -0,0 +1,20 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by: true
+features: c cprogram
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/libtests/POSIX/realloc.c
+stlib: []
+target: testsuites/libtests/realloc.norun.exe
+type: build
+use-after: []
+use-before:
+- rtemsdefaultconfig
diff --git a/spec/build/testsuites/libtests/record01.yml b/spec/build/testsuites/libtests/record01.yml
new file mode 100644
index 0000000000..e565d791fc
--- /dev/null
+++ b/spec/build/testsuites/libtests/record01.yml
@@ -0,0 +1,20 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by: true
+features: c cprogram
+includes:
+- cpukit/libnetworking
+ldflags: []
+links: []
+source:
+- testsuites/libtests/record01/init.c
+stlib: []
+target: testsuites/libtests/record01.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/libtests/record02.yml b/spec/build/testsuites/libtests/record02.yml
new file mode 100644
index 0000000000..47167be91f
--- /dev/null
+++ b/spec/build/testsuites/libtests/record02.yml
@@ -0,0 +1,20 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by: true
+features: c cprogram
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/libtests/record02/init.c
+stlib: []
+target: testsuites/libtests/record02.exe
+type: build
+use-after:
+- z
+use-before: []
diff --git a/spec/build/testsuites/libtests/rtmonuse.yml b/spec/build/testsuites/libtests/rtmonuse.yml
new file mode 100644
index 0000000000..33490f350f
--- /dev/null
+++ b/spec/build/testsuites/libtests/rtmonuse.yml
@@ -0,0 +1,21 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by: true
+features: c cprogram
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/libtests/rtmonuse/init.c
+- testsuites/libtests/rtmonuse/getall.c
+- testsuites/libtests/rtmonuse/task1.c
+stlib: []
+target: testsuites/libtests/rtmonuse.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/libtests/setjmp.yml b/spec/build/testsuites/libtests/setjmp.yml
new file mode 100644
index 0000000000..e74ed93787
--- /dev/null
+++ b/spec/build/testsuites/libtests/setjmp.yml
@@ -0,0 +1,20 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by: true
+features: c cprogram
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/libtests/POSIX/setjmp.c
+stlib: []
+target: testsuites/libtests/setjmp.norun.exe
+type: build
+use-after: []
+use-before:
+- rtemsdefaultconfig
diff --git a/spec/build/testsuites/libtests/sha.yml b/spec/build/testsuites/libtests/sha.yml
new file mode 100644
index 0000000000..d57de3b920
--- /dev/null
+++ b/spec/build/testsuites/libtests/sha.yml
@@ -0,0 +1,19 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by: true
+features: c cprogram
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/libtests/sha/init.c
+stlib: []
+target: testsuites/libtests/sha.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/libtests/shell01.yml b/spec/build/testsuites/libtests/shell01.yml
new file mode 100644
index 0000000000..ebf92a727d
--- /dev/null
+++ b/spec/build/testsuites/libtests/shell01.yml
@@ -0,0 +1,19 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by: true
+features: c cprogram
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/libtests/shell01/init.c
+stlib: []
+target: testsuites/libtests/shell01.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/libtests/sigaddset.yml b/spec/build/testsuites/libtests/sigaddset.yml
new file mode 100644
index 0000000000..5e72311b2b
--- /dev/null
+++ b/spec/build/testsuites/libtests/sigaddset.yml
@@ -0,0 +1,20 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by: true
+features: c cprogram
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/libtests/POSIX/sigaddset.c
+stlib: []
+target: testsuites/libtests/sigaddset.norun.exe
+type: build
+use-after: []
+use-before:
+- rtemsdefaultconfig
diff --git a/spec/build/testsuites/libtests/sigdelset.yml b/spec/build/testsuites/libtests/sigdelset.yml
new file mode 100644
index 0000000000..d0dc56c5c5
--- /dev/null
+++ b/spec/build/testsuites/libtests/sigdelset.yml
@@ -0,0 +1,20 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by: true
+features: c cprogram
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/libtests/POSIX/sigdelset.c
+stlib: []
+target: testsuites/libtests/sigdelset.norun.exe
+type: build
+use-after: []
+use-before:
+- rtemsdefaultconfig
diff --git a/spec/build/testsuites/libtests/sigemptyset.yml b/spec/build/testsuites/libtests/sigemptyset.yml
new file mode 100644
index 0000000000..fbf6ed85fa
--- /dev/null
+++ b/spec/build/testsuites/libtests/sigemptyset.yml
@@ -0,0 +1,20 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by: true
+features: c cprogram
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/libtests/POSIX/sigemptyset.c
+stlib: []
+target: testsuites/libtests/sigemptyset.norun.exe
+type: build
+use-after: []
+use-before:
+- rtemsdefaultconfig
diff --git a/spec/build/testsuites/libtests/sigfillset.yml b/spec/build/testsuites/libtests/sigfillset.yml
new file mode 100644
index 0000000000..ceac6ca442
--- /dev/null
+++ b/spec/build/testsuites/libtests/sigfillset.yml
@@ -0,0 +1,20 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by: true
+features: c cprogram
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/libtests/POSIX/sigfillset.c
+stlib: []
+target: testsuites/libtests/sigfillset.norun.exe
+type: build
+use-after: []
+use-before:
+- rtemsdefaultconfig
diff --git a/spec/build/testsuites/libtests/sigismember.yml b/spec/build/testsuites/libtests/sigismember.yml
new file mode 100644
index 0000000000..41b9ac24ae
--- /dev/null
+++ b/spec/build/testsuites/libtests/sigismember.yml
@@ -0,0 +1,20 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by: true
+features: c cprogram
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/libtests/POSIX/sigismember.c
+stlib: []
+target: testsuites/libtests/sigismember.norun.exe
+type: build
+use-after: []
+use-before:
+- rtemsdefaultconfig
diff --git a/spec/build/testsuites/libtests/sigprocmask.yml b/spec/build/testsuites/libtests/sigprocmask.yml
new file mode 100644
index 0000000000..67fcf27c79
--- /dev/null
+++ b/spec/build/testsuites/libtests/sigprocmask.yml
@@ -0,0 +1,20 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by: true
+features: c cprogram
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/libtests/POSIX/sigprocmask.c
+stlib: []
+target: testsuites/libtests/sigprocmask.norun.exe
+type: build
+use-after: []
+use-before:
+- rtemsdefaultconfig
diff --git a/spec/build/testsuites/libtests/sparsedisk01.yml b/spec/build/testsuites/libtests/sparsedisk01.yml
new file mode 100644
index 0000000000..bb6ebdc6d1
--- /dev/null
+++ b/spec/build/testsuites/libtests/sparsedisk01.yml
@@ -0,0 +1,19 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by: true
+features: c cprogram
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/libtests/sparsedisk01/init.c
+stlib: []
+target: testsuites/libtests/sparsedisk01.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/libtests/spi01.yml b/spec/build/testsuites/libtests/spi01.yml
new file mode 100644
index 0000000000..00aedbacd7
--- /dev/null
+++ b/spec/build/testsuites/libtests/spi01.yml
@@ -0,0 +1,19 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by: true
+features: c cprogram
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/libtests/spi01/init.c
+stlib: []
+target: testsuites/libtests/spi01.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/libtests/stackchk.yml b/spec/build/testsuites/libtests/stackchk.yml
new file mode 100644
index 0000000000..ac090c5136
--- /dev/null
+++ b/spec/build/testsuites/libtests/stackchk.yml
@@ -0,0 +1,21 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by: true
+features: c cprogram
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/libtests/stackchk/blow.c
+- testsuites/libtests/stackchk/init.c
+- testsuites/libtests/stackchk/task1.c
+stlib: []
+target: testsuites/libtests/stackchk.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/libtests/stackchk01.yml b/spec/build/testsuites/libtests/stackchk01.yml
new file mode 100644
index 0000000000..3f22545c9e
--- /dev/null
+++ b/spec/build/testsuites/libtests/stackchk01.yml
@@ -0,0 +1,19 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by: true
+features: c cprogram
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/libtests/stackchk01/init.c
+stlib: []
+target: testsuites/libtests/stackchk01.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/libtests/stat.yml b/spec/build/testsuites/libtests/stat.yml
new file mode 100644
index 0000000000..e6cf5d2a25
--- /dev/null
+++ b/spec/build/testsuites/libtests/stat.yml
@@ -0,0 +1,20 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by: true
+features: c cprogram
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/libtests/POSIX/stat.c
+stlib: []
+target: testsuites/libtests/stat.norun.exe
+type: build
+use-after: []
+use-before:
+- rtemsdefaultconfig
diff --git a/spec/build/testsuites/libtests/stringto01.yml b/spec/build/testsuites/libtests/stringto01.yml
new file mode 100644
index 0000000000..5a7327c493
--- /dev/null
+++ b/spec/build/testsuites/libtests/stringto01.yml
@@ -0,0 +1,19 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by: true
+features: c cprogram
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/libtests/stringto01/init.c
+stlib: []
+target: testsuites/libtests/stringto01.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/libtests/syscall01.yml b/spec/build/testsuites/libtests/syscall01.yml
new file mode 100644
index 0000000000..ff2d812c6d
--- /dev/null
+++ b/spec/build/testsuites/libtests/syscall01.yml
@@ -0,0 +1,21 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by:
+- RTEMS_NETWORKING
+features: c cprogram
+includes:
+- cpukit/libnetworking
+ldflags: []
+links: []
+source:
+- testsuites/libtests/syscall01/init.c
+stlib: []
+target: testsuites/libtests/syscall01.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/libtests/tar01.yml b/spec/build/testsuites/libtests/tar01.yml
new file mode 100644
index 0000000000..8c595c7be9
--- /dev/null
+++ b/spec/build/testsuites/libtests/tar01.yml
@@ -0,0 +1,35 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: script
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+do-build: |
+ path = "testsuites/libtests/tar01/"
+ tar = path + "tar01.tar"
+ tar_gz = self.gzip(bld, tar)
+ tar_xz = self.xz(bld, tar)
+ tar_c, tar_h = self.bin2c(bld, tar)
+ tar_gz_c, tar_gz_h = self.bin2c(bld, tar_gz)
+ tar_xz_c, tar_xz_h = self.bin2c(bld, tar_xz)
+ objs = []
+ objs.append(self.cc(bld, bic, tar_c))
+ objs.append(self.cc(bld, bic, tar_gz_c))
+ objs.append(self.cc(bld, bic, tar_xz_c))
+ objs.append(self.cc(bld, bic, path + "init.c", deps=[tar_h, tar_gz_h, tar_xz_h], cppflags=bld.env.TEST_TAR01_CPPFLAGS))
+ objs.append(self.cc(bld, bic, "testsuites/psxtests/psxfile01/test_cat.c", target=path + "test_cat.o"))
+ self.link_cc(bld, bic, objs, "testsuites/libtests/tar01.exe")
+do-configure: null
+enabled-by:
+- not: TEST_TAR01_EXCLUDE
+includes:
+- testsuites/libtests/tar01
+ldflags: []
+links: []
+prepare-build: null
+prepare-configure: null
+stlib: []
+type: build
+use-after:
+- z
+use-before: []
diff --git a/spec/build/testsuites/libtests/tar02.yml b/spec/build/testsuites/libtests/tar02.yml
new file mode 100644
index 0000000000..5a2a1dc60e
--- /dev/null
+++ b/spec/build/testsuites/libtests/tar02.yml
@@ -0,0 +1,29 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: script
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+do-build: |
+ path = "testsuites/libtests/tar02/"
+ tar = "testsuites/libtests/tar01/tar01.tar"
+ tar_c, tar_h = self.bin2c(bld, tar, target=path + "tar02-tar")
+ objs = []
+ objs.append(self.cc(bld, bic, tar_c))
+ objs.append(self.cc(bld, bic, path + "init.c", deps=[tar_h], cppflags=bld.env.TEST_TAR02_CPPFLAGS))
+ objs.append(self.cc(bld, bic, "testsuites/psxtests/psxfile01/test_cat.c", target=path + "test_cat.o"))
+ self.link_cc(bld, bic, objs, "testsuites/libtests/tar02.exe")
+do-configure: null
+enabled-by:
+- not: TEST_TAR02_EXCLUDE
+includes:
+- testsuites/libtests/tar02
+ldflags: []
+links: []
+prepare-build: null
+prepare-configure: null
+stlib: []
+type: build
+use-after:
+- z
+use-before: []
diff --git a/spec/build/testsuites/libtests/tar03.yml b/spec/build/testsuites/libtests/tar03.yml
new file mode 100644
index 0000000000..07f184bfdc
--- /dev/null
+++ b/spec/build/testsuites/libtests/tar03.yml
@@ -0,0 +1,19 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by: true
+features: c cprogram
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/libtests/tar03/init.c
+stlib: []
+target: testsuites/libtests/tar03.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/libtests/telnetd01.yml b/spec/build/testsuites/libtests/telnetd01.yml
new file mode 100644
index 0000000000..9f5bda84d9
--- /dev/null
+++ b/spec/build/testsuites/libtests/telnetd01.yml
@@ -0,0 +1,22 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by:
+- RTEMS_NETWORKING
+features: c cprogram
+includes:
+- cpukit/libnetworking
+ldflags: []
+links: []
+source:
+- testsuites/libtests/telnetd01/init.c
+stlib: []
+target: testsuites/libtests/telnetd01.exe
+type: build
+use-after:
+- telnetd
+use-before: []
diff --git a/spec/build/testsuites/libtests/termios.yml b/spec/build/testsuites/libtests/termios.yml
new file mode 100644
index 0000000000..6740353a77
--- /dev/null
+++ b/spec/build/testsuites/libtests/termios.yml
@@ -0,0 +1,19 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by: true
+features: c cprogram
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/libtests/termios/init.c
+stlib: []
+target: testsuites/libtests/termios.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/libtests/termios01.yml b/spec/build/testsuites/libtests/termios01.yml
new file mode 100644
index 0000000000..9008a04b10
--- /dev/null
+++ b/spec/build/testsuites/libtests/termios01.yml
@@ -0,0 +1,20 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by: true
+features: c cprogram
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/libtests/termios01/init.c
+- testsuites/libtests/termios01/termios_testdriver.c
+stlib: []
+target: testsuites/libtests/termios01.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/libtests/termios02.yml b/spec/build/testsuites/libtests/termios02.yml
new file mode 100644
index 0000000000..49d31526ce
--- /dev/null
+++ b/spec/build/testsuites/libtests/termios02.yml
@@ -0,0 +1,19 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by: true
+features: c cprogram
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/libtests/termios02/init.c
+stlib: []
+target: testsuites/libtests/termios02.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/libtests/termios03.yml b/spec/build/testsuites/libtests/termios03.yml
new file mode 100644
index 0000000000..e5ca148e7c
--- /dev/null
+++ b/spec/build/testsuites/libtests/termios03.yml
@@ -0,0 +1,20 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by: true
+features: c cprogram
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/libtests/termios03/init.c
+- testsuites/libtests/termios03/termios_testdriver_polled.c
+stlib: []
+target: testsuites/libtests/termios03.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/libtests/termios04.yml b/spec/build/testsuites/libtests/termios04.yml
new file mode 100644
index 0000000000..b5ea3416e5
--- /dev/null
+++ b/spec/build/testsuites/libtests/termios04.yml
@@ -0,0 +1,20 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by: true
+features: c cprogram
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/libtests/termios04/init.c
+- testsuites/libtests/termios04/termios_testdriver_intr.c
+stlib: []
+target: testsuites/libtests/termios04.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/libtests/termios05.yml b/spec/build/testsuites/libtests/termios05.yml
new file mode 100644
index 0000000000..e1cdb84b95
--- /dev/null
+++ b/spec/build/testsuites/libtests/termios05.yml
@@ -0,0 +1,20 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by: true
+features: c cprogram
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/libtests/termios05/init.c
+- testsuites/libtests/termios05/termios_testdriver_task.c
+stlib: []
+target: testsuites/libtests/termios05.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/libtests/termios06.yml b/spec/build/testsuites/libtests/termios06.yml
new file mode 100644
index 0000000000..a34bace23e
--- /dev/null
+++ b/spec/build/testsuites/libtests/termios06.yml
@@ -0,0 +1,21 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by: true
+features: c cprogram
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/libtests/termios06/init.c
+- testsuites/libtests/termios03/termios_testdriver_polled.c
+- testsuites/libtests/termios06/test_pppd.c
+stlib: []
+target: testsuites/libtests/termios06.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/libtests/termios07.yml b/spec/build/testsuites/libtests/termios07.yml
new file mode 100644
index 0000000000..8e2ce4df87
--- /dev/null
+++ b/spec/build/testsuites/libtests/termios07.yml
@@ -0,0 +1,20 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by: true
+features: c cprogram
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/libtests/termios07/init.c
+- testsuites/libtests/termios04/termios_testdriver_intr.c
+stlib: []
+target: testsuites/libtests/termios07.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/libtests/termios08.yml b/spec/build/testsuites/libtests/termios08.yml
new file mode 100644
index 0000000000..06072585fe
--- /dev/null
+++ b/spec/build/testsuites/libtests/termios08.yml
@@ -0,0 +1,20 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by: true
+features: c cprogram
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/libtests/termios08/init.c
+- testsuites/libtests/termios03/termios_testdriver_polled.c
+stlib: []
+target: testsuites/libtests/termios08.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/libtests/termios09.yml b/spec/build/testsuites/libtests/termios09.yml
new file mode 100644
index 0000000000..ddbee2e406
--- /dev/null
+++ b/spec/build/testsuites/libtests/termios09.yml
@@ -0,0 +1,19 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by: true
+features: c cprogram
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/libtests/termios09/init.c
+stlib: []
+target: testsuites/libtests/termios09.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/libtests/termios10.yml b/spec/build/testsuites/libtests/termios10.yml
new file mode 100644
index 0000000000..8364bbc624
--- /dev/null
+++ b/spec/build/testsuites/libtests/termios10.yml
@@ -0,0 +1,21 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by:
+- RTEMS_POSIX_API
+features: c cprogram
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/libtests/termios10/init.c
+- testsuites/libtests/termios03/termios_testdriver_polled.c
+stlib: []
+target: testsuites/libtests/termios10.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/libtests/termios11.yml b/spec/build/testsuites/libtests/termios11.yml
new file mode 100644
index 0000000000..d86b948b2a
--- /dev/null
+++ b/spec/build/testsuites/libtests/termios11.yml
@@ -0,0 +1,21 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by:
+- RTEMS_POSIX_API
+features: c cprogram
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/libtests/termios11/init.c
+- testsuites/libtests/termios04/termios_testdriver_intr.c
+stlib: []
+target: testsuites/libtests/termios11.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/libtests/top.yml b/spec/build/testsuites/libtests/top.yml
new file mode 100644
index 0000000000..90241e8fb0
--- /dev/null
+++ b/spec/build/testsuites/libtests/top.yml
@@ -0,0 +1,22 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by: true
+features: c cprogram
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/libtests/top/init.c
+- testsuites/libtests/top/task1.c
+- testsuites/libtests/top/task2.c
+- testsuites/libtests/top/task3.c
+stlib: []
+target: testsuites/libtests/top.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/libtests/ttest01.yml b/spec/build/testsuites/libtests/ttest01.yml
new file mode 100644
index 0000000000..5310dcfe35
--- /dev/null
+++ b/spec/build/testsuites/libtests/ttest01.yml
@@ -0,0 +1,36 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by: true
+features: c cprogram
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/libtests/ttest01/init.c
+- testsuites/libtests/ttest01/test-assert.c
+- testsuites/libtests/ttest01/test-checks.c
+- testsuites/libtests/ttest01/test-destructor.c
+- testsuites/libtests/ttest01/test-eno.c
+- testsuites/libtests/ttest01/test-example.c
+- testsuites/libtests/ttest01/test-fixture.c
+- testsuites/libtests/ttest01/test-leak.c
+- testsuites/libtests/ttest01/test-log.c
+- testsuites/libtests/ttest01/test-malloc.c
+- testsuites/libtests/ttest01/test-plan.c
+- testsuites/libtests/ttest01/test-psx.c
+- testsuites/libtests/ttest01/test-rtems.c
+- testsuites/libtests/ttest01/test-simple.c
+- testsuites/libtests/ttest01/test-step.c
+- testsuites/libtests/ttest01/test-task-context.c
+- testsuites/libtests/ttest01/test-time.c
+- testsuites/libtests/ttest01/test-verbosity.c
+stlib: []
+target: testsuites/libtests/ttest01.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/libtests/ttest02.yml b/spec/build/testsuites/libtests/ttest02.yml
new file mode 100644
index 0000000000..2f486ca287
--- /dev/null
+++ b/spec/build/testsuites/libtests/ttest02.yml
@@ -0,0 +1,19 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by: true
+features: c cprogram
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/libtests/ttest02/init.c
+stlib: []
+target: testsuites/libtests/ttest02.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/libtests/tztest.yml b/spec/build/testsuites/libtests/tztest.yml
new file mode 100644
index 0000000000..372a079689
--- /dev/null
+++ b/spec/build/testsuites/libtests/tztest.yml
@@ -0,0 +1,19 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by: true
+features: c cprogram
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/libtests/tztest/init.c
+stlib: []
+target: testsuites/libtests/tztest.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/libtests/uid01.yml b/spec/build/testsuites/libtests/uid01.yml
new file mode 100644
index 0000000000..fa5a57e21e
--- /dev/null
+++ b/spec/build/testsuites/libtests/uid01.yml
@@ -0,0 +1,22 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by: true
+features: c cprogram
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/libtests/uid01/init.c
+- testsuites/libtests/uid01/serial_mouse_config.c
+- testsuites/libtests/uid01/msmouse.c
+- testsuites/libtests/termios04/termios_testdriver_intr.c
+stlib: []
+target: testsuites/libtests/uid01.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/libtests/unlink.yml b/spec/build/testsuites/libtests/unlink.yml
new file mode 100644
index 0000000000..94ab37fc67
--- /dev/null
+++ b/spec/build/testsuites/libtests/unlink.yml
@@ -0,0 +1,20 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by: true
+features: c cprogram
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/libtests/POSIX/unlink.c
+stlib: []
+target: testsuites/libtests/unlink.norun.exe
+type: build
+use-after: []
+use-before:
+- rtemsdefaultconfig
diff --git a/spec/build/testsuites/libtests/utf8proc01.yml b/spec/build/testsuites/libtests/utf8proc01.yml
new file mode 100644
index 0000000000..83ac0742c4
--- /dev/null
+++ b/spec/build/testsuites/libtests/utf8proc01.yml
@@ -0,0 +1,19 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by: true
+features: c cprogram
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/libtests/utf8proc01/init.c
+stlib: []
+target: testsuites/libtests/utf8proc01.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/libtests/vfork.yml b/spec/build/testsuites/libtests/vfork.yml
new file mode 100644
index 0000000000..f868f95b79
--- /dev/null
+++ b/spec/build/testsuites/libtests/vfork.yml
@@ -0,0 +1,20 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by: true
+features: c cprogram
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/libtests/POSIX/vfork.c
+stlib: []
+target: testsuites/libtests/vfork.norun.exe
+type: build
+use-after: []
+use-before:
+- rtemsdefaultconfig
diff --git a/spec/build/testsuites/libtests/wait.yml b/spec/build/testsuites/libtests/wait.yml
new file mode 100644
index 0000000000..ff8128e439
--- /dev/null
+++ b/spec/build/testsuites/libtests/wait.yml
@@ -0,0 +1,20 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by: true
+features: c cprogram
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/libtests/POSIX/wait.c
+stlib: []
+target: testsuites/libtests/wait.norun.exe
+type: build
+use-after: []
+use-before:
+- rtemsdefaultconfig
diff --git a/spec/build/testsuites/libtests/waitpid.yml b/spec/build/testsuites/libtests/waitpid.yml
new file mode 100644
index 0000000000..f3d9f8e467
--- /dev/null
+++ b/spec/build/testsuites/libtests/waitpid.yml
@@ -0,0 +1,20 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by: true
+features: c cprogram
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/libtests/POSIX/waitpid.c
+stlib: []
+target: testsuites/libtests/waitpid.norun.exe
+type: build
+use-after: []
+use-before:
+- rtemsdefaultconfig
diff --git a/spec/build/testsuites/libtests/write.yml b/spec/build/testsuites/libtests/write.yml
new file mode 100644
index 0000000000..fa2fa6ce47
--- /dev/null
+++ b/spec/build/testsuites/libtests/write.yml
@@ -0,0 +1,20 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by: true
+features: c cprogram
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/libtests/POSIX/write.c
+stlib: []
+target: testsuites/libtests/write.norun.exe
+type: build
+use-after: []
+use-before:
+- rtemsdefaultconfig
diff --git a/spec/build/testsuites/libtests/writev.yml b/spec/build/testsuites/libtests/writev.yml
new file mode 100644
index 0000000000..a1e2e04ae0
--- /dev/null
+++ b/spec/build/testsuites/libtests/writev.yml
@@ -0,0 +1,20 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by: true
+features: c cprogram
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/libtests/POSIX/writev.c
+stlib: []
+target: testsuites/libtests/writev.norun.exe
+type: build
+use-after: []
+use-before:
+- rtemsdefaultconfig
diff --git a/spec/build/testsuites/mptests/grp.yml b/spec/build/testsuites/mptests/grp.yml
new file mode 100644
index 0000000000..6965b505ee
--- /dev/null
+++ b/spec/build/testsuites/mptests/grp.yml
@@ -0,0 +1,70 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: group
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+enabled-by:
+- BUILD_TESTS
+- BUILD_MPTESTS
+includes:
+- testsuites/support/include
+install: []
+ldflags:
+- -Wl,--wrap=printf
+- -Wl,--wrap=puts
+links:
+- role: build-dependency
+ uid: mp01node1
+- role: build-dependency
+ uid: mp01node2
+- role: build-dependency
+ uid: mp03node1
+- role: build-dependency
+ uid: mp03node2
+- role: build-dependency
+ uid: mp04node1
+- role: build-dependency
+ uid: mp04node2
+- role: build-dependency
+ uid: mp05node1
+- role: build-dependency
+ uid: mp05node2
+- role: build-dependency
+ uid: mp06node1
+- role: build-dependency
+ uid: mp06node2
+- role: build-dependency
+ uid: mp07node1
+- role: build-dependency
+ uid: mp07node2
+- role: build-dependency
+ uid: mp08node1
+- role: build-dependency
+ uid: mp08node2
+- role: build-dependency
+ uid: mp09node1
+- role: build-dependency
+ uid: mp09node2
+- role: build-dependency
+ uid: mp10node1
+- role: build-dependency
+ uid: mp10node2
+- role: build-dependency
+ uid: mp11node1
+- role: build-dependency
+ uid: mp11node2
+- role: build-dependency
+ uid: mp12node1
+- role: build-dependency
+ uid: mp12node2
+- role: build-dependency
+ uid: mp13node1
+- role: build-dependency
+ uid: mp13node2
+- role: build-dependency
+ uid: mp14node1
+- role: build-dependency
+ uid: mp14node2
+type: build
+use-after:
+- rtemstest
+use-before: []
diff --git a/spec/build/testsuites/mptests/mp01.yml b/spec/build/testsuites/mptests/mp01.yml
new file mode 100644
index 0000000000..75b6394701
--- /dev/null
+++ b/spec/build/testsuites/mptests/mp01.yml
@@ -0,0 +1,21 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by: true
+features: c cprogram
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/mptests/mp01/init1.c
+- testsuites/mptests/mp01/init2.c
+- testsuites/mptests/mp01/task1.c
+stlib: []
+target: testsuites/mptests/mp01.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/mptests/mp01node1.yml b/spec/build/testsuites/mptests/mp01node1.yml
new file mode 100644
index 0000000000..87fee1d663
--- /dev/null
+++ b/spec/build/testsuites/mptests/mp01node1.yml
@@ -0,0 +1,21 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by:
+- RTEMS_MULTIPROCESSING
+features: c cprogram
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/mptests/mp01/init1.c
+- testsuites/mptests/mp01/task1.c
+stlib: []
+target: testsuites/mptests/mp01_node1.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/mptests/mp01node2.yml b/spec/build/testsuites/mptests/mp01node2.yml
new file mode 100644
index 0000000000..3316edd75a
--- /dev/null
+++ b/spec/build/testsuites/mptests/mp01node2.yml
@@ -0,0 +1,21 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by:
+- RTEMS_MULTIPROCESSING
+features: c cprogram
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/mptests/mp01/init2.c
+- testsuites/mptests/mp01/task1.c
+stlib: []
+target: testsuites/mptests/mp01_node2.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/mptests/mp03.yml b/spec/build/testsuites/mptests/mp03.yml
new file mode 100644
index 0000000000..42a59d064f
--- /dev/null
+++ b/spec/build/testsuites/mptests/mp03.yml
@@ -0,0 +1,22 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by: true
+features: c cprogram
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/mptests/mp03/delay.c
+- testsuites/mptests/mp03/init1.c
+- testsuites/mptests/mp03/init2.c
+- testsuites/mptests/mp03/task1.c
+stlib: []
+target: testsuites/mptests/mp03.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/mptests/mp03node1.yml b/spec/build/testsuites/mptests/mp03node1.yml
new file mode 100644
index 0000000000..a231f3085a
--- /dev/null
+++ b/spec/build/testsuites/mptests/mp03node1.yml
@@ -0,0 +1,22 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by:
+- RTEMS_MULTIPROCESSING
+features: c cprogram
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/mptests/mp03/init1.c
+- testsuites/mptests/mp03/task1.c
+- testsuites/mptests/mp03/delay.c
+stlib: []
+target: testsuites/mptests/mp03_node1.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/mptests/mp03node2.yml b/spec/build/testsuites/mptests/mp03node2.yml
new file mode 100644
index 0000000000..81b93473a8
--- /dev/null
+++ b/spec/build/testsuites/mptests/mp03node2.yml
@@ -0,0 +1,22 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by:
+- RTEMS_MULTIPROCESSING
+features: c cprogram
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/mptests/mp03/init2.c
+- testsuites/mptests/mp03/task1.c
+- testsuites/mptests/mp03/delay.c
+stlib: []
+target: testsuites/mptests/mp03_node2.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/mptests/mp04.yml b/spec/build/testsuites/mptests/mp04.yml
new file mode 100644
index 0000000000..1fa17a1dbf
--- /dev/null
+++ b/spec/build/testsuites/mptests/mp04.yml
@@ -0,0 +1,21 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by: true
+features: c cprogram
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/mptests/mp04/init1.c
+- testsuites/mptests/mp04/init2.c
+- testsuites/mptests/mp04/task1.c
+stlib: []
+target: testsuites/mptests/mp04.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/mptests/mp04node1.yml b/spec/build/testsuites/mptests/mp04node1.yml
new file mode 100644
index 0000000000..731f7ca47a
--- /dev/null
+++ b/spec/build/testsuites/mptests/mp04node1.yml
@@ -0,0 +1,21 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by:
+- RTEMS_MULTIPROCESSING
+features: c cprogram
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/mptests/mp04/init1.c
+- testsuites/mptests/mp04/task1.c
+stlib: []
+target: testsuites/mptests/mp04_node1.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/mptests/mp04node2.yml b/spec/build/testsuites/mptests/mp04node2.yml
new file mode 100644
index 0000000000..6938f02001
--- /dev/null
+++ b/spec/build/testsuites/mptests/mp04node2.yml
@@ -0,0 +1,21 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by:
+- RTEMS_MULTIPROCESSING
+features: c cprogram
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/mptests/mp04/init2.c
+- testsuites/mptests/mp04/task1.c
+stlib: []
+target: testsuites/mptests/mp04_node2.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/mptests/mp05.yml b/spec/build/testsuites/mptests/mp05.yml
new file mode 100644
index 0000000000..3abffb39d2
--- /dev/null
+++ b/spec/build/testsuites/mptests/mp05.yml
@@ -0,0 +1,22 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by: true
+features: c cprogram
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/mptests/mp05/asr.c
+- testsuites/mptests/mp05/init1.c
+- testsuites/mptests/mp05/init2.c
+- testsuites/mptests/mp05/task1.c
+stlib: []
+target: testsuites/mptests/mp05.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/mptests/mp05node1.yml b/spec/build/testsuites/mptests/mp05node1.yml
new file mode 100644
index 0000000000..342ebce12b
--- /dev/null
+++ b/spec/build/testsuites/mptests/mp05node1.yml
@@ -0,0 +1,22 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by:
+- RTEMS_MULTIPROCESSING
+features: c cprogram
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/mptests/mp05/init1.c
+- testsuites/mptests/mp05/task1.c
+- testsuites/mptests/mp05/asr.c
+stlib: []
+target: testsuites/mptests/mp05_node1.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/mptests/mp05node2.yml b/spec/build/testsuites/mptests/mp05node2.yml
new file mode 100644
index 0000000000..8248ba18d0
--- /dev/null
+++ b/spec/build/testsuites/mptests/mp05node2.yml
@@ -0,0 +1,22 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by:
+- RTEMS_MULTIPROCESSING
+features: c cprogram
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/mptests/mp05/init2.c
+- testsuites/mptests/mp05/task1.c
+- testsuites/mptests/mp05/asr.c
+stlib: []
+target: testsuites/mptests/mp05_node2.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/mptests/mp06.yml b/spec/build/testsuites/mptests/mp06.yml
new file mode 100644
index 0000000000..4c07a3b3be
--- /dev/null
+++ b/spec/build/testsuites/mptests/mp06.yml
@@ -0,0 +1,21 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by: true
+features: c cprogram
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/mptests/mp06/init1.c
+- testsuites/mptests/mp06/init2.c
+- testsuites/mptests/mp06/task1.c
+stlib: []
+target: testsuites/mptests/mp06.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/mptests/mp06node1.yml b/spec/build/testsuites/mptests/mp06node1.yml
new file mode 100644
index 0000000000..6a01a7572f
--- /dev/null
+++ b/spec/build/testsuites/mptests/mp06node1.yml
@@ -0,0 +1,21 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by:
+- RTEMS_MULTIPROCESSING
+features: c cprogram
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/mptests/mp06/init1.c
+- testsuites/mptests/mp06/task1.c
+stlib: []
+target: testsuites/mptests/mp06_node1.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/mptests/mp06node2.yml b/spec/build/testsuites/mptests/mp06node2.yml
new file mode 100644
index 0000000000..2af00e4e36
--- /dev/null
+++ b/spec/build/testsuites/mptests/mp06node2.yml
@@ -0,0 +1,21 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by:
+- RTEMS_MULTIPROCESSING
+features: c cprogram
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/mptests/mp06/init2.c
+- testsuites/mptests/mp06/task1.c
+stlib: []
+target: testsuites/mptests/mp06_node2.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/mptests/mp07.yml b/spec/build/testsuites/mptests/mp07.yml
new file mode 100644
index 0000000000..e1e1d0f003
--- /dev/null
+++ b/spec/build/testsuites/mptests/mp07.yml
@@ -0,0 +1,21 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by: true
+features: c cprogram
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/mptests/mp07/init1.c
+- testsuites/mptests/mp07/init2.c
+- testsuites/mptests/mp07/task1.c
+stlib: []
+target: testsuites/mptests/mp07.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/mptests/mp07node1.yml b/spec/build/testsuites/mptests/mp07node1.yml
new file mode 100644
index 0000000000..948bcb3492
--- /dev/null
+++ b/spec/build/testsuites/mptests/mp07node1.yml
@@ -0,0 +1,21 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by:
+- RTEMS_MULTIPROCESSING
+features: c cprogram
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/mptests/mp07/init1.c
+- testsuites/mptests/mp07/task1.c
+stlib: []
+target: testsuites/mptests/mp07_node1.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/mptests/mp07node2.yml b/spec/build/testsuites/mptests/mp07node2.yml
new file mode 100644
index 0000000000..ec70919996
--- /dev/null
+++ b/spec/build/testsuites/mptests/mp07node2.yml
@@ -0,0 +1,21 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by:
+- RTEMS_MULTIPROCESSING
+features: c cprogram
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/mptests/mp07/init2.c
+- testsuites/mptests/mp07/task1.c
+stlib: []
+target: testsuites/mptests/mp07_node2.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/mptests/mp08.yml b/spec/build/testsuites/mptests/mp08.yml
new file mode 100644
index 0000000000..c9dc8e1d05
--- /dev/null
+++ b/spec/build/testsuites/mptests/mp08.yml
@@ -0,0 +1,21 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by: true
+features: c cprogram
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/mptests/mp08/init1.c
+- testsuites/mptests/mp08/init2.c
+- testsuites/mptests/mp08/task1.c
+stlib: []
+target: testsuites/mptests/mp08.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/mptests/mp08node1.yml b/spec/build/testsuites/mptests/mp08node1.yml
new file mode 100644
index 0000000000..1f1f42d53b
--- /dev/null
+++ b/spec/build/testsuites/mptests/mp08node1.yml
@@ -0,0 +1,21 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by:
+- RTEMS_MULTIPROCESSING
+features: c cprogram
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/mptests/mp08/init1.c
+- testsuites/mptests/mp08/task1.c
+stlib: []
+target: testsuites/mptests/mp08_node1.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/mptests/mp08node2.yml b/spec/build/testsuites/mptests/mp08node2.yml
new file mode 100644
index 0000000000..5fa4ea585c
--- /dev/null
+++ b/spec/build/testsuites/mptests/mp08node2.yml
@@ -0,0 +1,21 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by:
+- RTEMS_MULTIPROCESSING
+features: c cprogram
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/mptests/mp08/init2.c
+- testsuites/mptests/mp08/task1.c
+stlib: []
+target: testsuites/mptests/mp08_node2.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/mptests/mp09.yml b/spec/build/testsuites/mptests/mp09.yml
new file mode 100644
index 0000000000..aa087e2c25
--- /dev/null
+++ b/spec/build/testsuites/mptests/mp09.yml
@@ -0,0 +1,23 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by: true
+features: c cprogram
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/mptests/mp09/init1.c
+- testsuites/mptests/mp09/init2.c
+- testsuites/mptests/mp09/recvmsg.c
+- testsuites/mptests/mp09/sendmsg.c
+- testsuites/mptests/mp09/task1.c
+stlib: []
+target: testsuites/mptests/mp09.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/mptests/mp09node1.yml b/spec/build/testsuites/mptests/mp09node1.yml
new file mode 100644
index 0000000000..a2ea0e80ad
--- /dev/null
+++ b/spec/build/testsuites/mptests/mp09node1.yml
@@ -0,0 +1,23 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by:
+- RTEMS_MULTIPROCESSING
+features: c cprogram
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/mptests/mp09/init1.c
+- testsuites/mptests/mp09/task1.c
+- testsuites/mptests/mp09/recvmsg.c
+- testsuites/mptests/mp09/sendmsg.c
+stlib: []
+target: testsuites/mptests/mp09_node1.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/mptests/mp09node2.yml b/spec/build/testsuites/mptests/mp09node2.yml
new file mode 100644
index 0000000000..fdbccdcda8
--- /dev/null
+++ b/spec/build/testsuites/mptests/mp09node2.yml
@@ -0,0 +1,23 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by:
+- RTEMS_MULTIPROCESSING
+features: c cprogram
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/mptests/mp09/init2.c
+- testsuites/mptests/mp09/task1.c
+- testsuites/mptests/mp09/recvmsg.c
+- testsuites/mptests/mp09/sendmsg.c
+stlib: []
+target: testsuites/mptests/mp09_node2.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/mptests/mp10.yml b/spec/build/testsuites/mptests/mp10.yml
new file mode 100644
index 0000000000..d79f9def5d
--- /dev/null
+++ b/spec/build/testsuites/mptests/mp10.yml
@@ -0,0 +1,23 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by: true
+features: c cprogram
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/mptests/mp10/init1.c
+- testsuites/mptests/mp10/init2.c
+- testsuites/mptests/mp10/task1.c
+- testsuites/mptests/mp10/task2.c
+- testsuites/mptests/mp10/task3.c
+stlib: []
+target: testsuites/mptests/mp10.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/mptests/mp10node1.yml b/spec/build/testsuites/mptests/mp10node1.yml
new file mode 100644
index 0000000000..69d1736535
--- /dev/null
+++ b/spec/build/testsuites/mptests/mp10node1.yml
@@ -0,0 +1,23 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by:
+- RTEMS_MULTIPROCESSING
+features: c cprogram
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/mptests/mp10/init1.c
+- testsuites/mptests/mp10/task1.c
+- testsuites/mptests/mp10/task2.c
+- testsuites/mptests/mp10/task3.c
+stlib: []
+target: testsuites/mptests/mp10_node1.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/mptests/mp10node2.yml b/spec/build/testsuites/mptests/mp10node2.yml
new file mode 100644
index 0000000000..90b114454c
--- /dev/null
+++ b/spec/build/testsuites/mptests/mp10node2.yml
@@ -0,0 +1,23 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by:
+- RTEMS_MULTIPROCESSING
+features: c cprogram
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/mptests/mp10/init2.c
+- testsuites/mptests/mp10/task1.c
+- testsuites/mptests/mp10/task2.c
+- testsuites/mptests/mp10/task3.c
+stlib: []
+target: testsuites/mptests/mp10_node2.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/mptests/mp11.yml b/spec/build/testsuites/mptests/mp11.yml
new file mode 100644
index 0000000000..82b3099dcc
--- /dev/null
+++ b/spec/build/testsuites/mptests/mp11.yml
@@ -0,0 +1,20 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by: true
+features: c cprogram
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/mptests/mp11/init1.c
+- testsuites/mptests/mp11/init2.c
+stlib: []
+target: testsuites/mptests/mp11.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/mptests/mp11node1.yml b/spec/build/testsuites/mptests/mp11node1.yml
new file mode 100644
index 0000000000..fb81d7f9db
--- /dev/null
+++ b/spec/build/testsuites/mptests/mp11node1.yml
@@ -0,0 +1,20 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by:
+- RTEMS_MULTIPROCESSING
+features: c cprogram
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/mptests/mp11/init1.c
+stlib: []
+target: testsuites/mptests/mp11_node1.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/mptests/mp11node2.yml b/spec/build/testsuites/mptests/mp11node2.yml
new file mode 100644
index 0000000000..38ea46eb14
--- /dev/null
+++ b/spec/build/testsuites/mptests/mp11node2.yml
@@ -0,0 +1,20 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by:
+- RTEMS_MULTIPROCESSING
+features: c cprogram
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/mptests/mp11/init2.c
+stlib: []
+target: testsuites/mptests/mp11_node2.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/mptests/mp12.yml b/spec/build/testsuites/mptests/mp12.yml
new file mode 100644
index 0000000000..c49358ba09
--- /dev/null
+++ b/spec/build/testsuites/mptests/mp12.yml
@@ -0,0 +1,20 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by: true
+features: c cprogram
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/mptests/mp12/init1.c
+- testsuites/mptests/mp12/init2.c
+stlib: []
+target: testsuites/mptests/mp12.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/mptests/mp12node1.yml b/spec/build/testsuites/mptests/mp12node1.yml
new file mode 100644
index 0000000000..1b5e58cfa3
--- /dev/null
+++ b/spec/build/testsuites/mptests/mp12node1.yml
@@ -0,0 +1,20 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by:
+- RTEMS_MULTIPROCESSING
+features: c cprogram
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/mptests/mp12/init1.c
+stlib: []
+target: testsuites/mptests/mp12_node1.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/mptests/mp12node2.yml b/spec/build/testsuites/mptests/mp12node2.yml
new file mode 100644
index 0000000000..d2bcd185df
--- /dev/null
+++ b/spec/build/testsuites/mptests/mp12node2.yml
@@ -0,0 +1,20 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by:
+- RTEMS_MULTIPROCESSING
+features: c cprogram
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/mptests/mp12/init2.c
+stlib: []
+target: testsuites/mptests/mp12_node2.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/mptests/mp13.yml b/spec/build/testsuites/mptests/mp13.yml
new file mode 100644
index 0000000000..5714407954
--- /dev/null
+++ b/spec/build/testsuites/mptests/mp13.yml
@@ -0,0 +1,22 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by: true
+features: c cprogram
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/mptests/mp13/init1.c
+- testsuites/mptests/mp13/init2.c
+- testsuites/mptests/mp13/task1.c
+- testsuites/mptests/mp13/task2.c
+stlib: []
+target: testsuites/mptests/mp13.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/mptests/mp13node1.yml b/spec/build/testsuites/mptests/mp13node1.yml
new file mode 100644
index 0000000000..5a9a2df372
--- /dev/null
+++ b/spec/build/testsuites/mptests/mp13node1.yml
@@ -0,0 +1,22 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by:
+- RTEMS_MULTIPROCESSING
+features: c cprogram
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/mptests/mp13/init1.c
+- testsuites/mptests/mp13/task1.c
+- testsuites/mptests/mp13/task2.c
+stlib: []
+target: testsuites/mptests/mp13_node1.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/mptests/mp13node2.yml b/spec/build/testsuites/mptests/mp13node2.yml
new file mode 100644
index 0000000000..8e1eda3751
--- /dev/null
+++ b/spec/build/testsuites/mptests/mp13node2.yml
@@ -0,0 +1,22 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by:
+- RTEMS_MULTIPROCESSING
+features: c cprogram
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/mptests/mp13/init2.c
+- testsuites/mptests/mp13/task1.c
+- testsuites/mptests/mp13/task2.c
+stlib: []
+target: testsuites/mptests/mp13_node2.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/mptests/mp14.yml b/spec/build/testsuites/mptests/mp14.yml
new file mode 100644
index 0000000000..08c42e4f88
--- /dev/null
+++ b/spec/build/testsuites/mptests/mp14.yml
@@ -0,0 +1,27 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by: true
+features: c cprogram
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/mptests/mp14/delay.c
+- testsuites/mptests/mp14/evtask1.c
+- testsuites/mptests/mp14/evtmtask.c
+- testsuites/mptests/mp14/exit.c
+- testsuites/mptests/mp14/init1.c
+- testsuites/mptests/mp14/init2.c
+- testsuites/mptests/mp14/msgtask1.c
+- testsuites/mptests/mp14/pttask1.c
+- testsuites/mptests/mp14/smtask1.c
+stlib: []
+target: testsuites/mptests/mp14.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/mptests/mp14node1.yml b/spec/build/testsuites/mptests/mp14node1.yml
new file mode 100644
index 0000000000..031c23446f
--- /dev/null
+++ b/spec/build/testsuites/mptests/mp14node1.yml
@@ -0,0 +1,27 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by:
+- RTEMS_MULTIPROCESSING
+features: c cprogram
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/mptests/mp14/init1.c
+- testsuites/mptests/mp14/exit.c
+- testsuites/mptests/mp14/delay.c
+- testsuites/mptests/mp14/evtask1.c
+- testsuites/mptests/mp14/evtmtask.c
+- testsuites/mptests/mp14/pttask1.c
+- testsuites/mptests/mp14/smtask1.c
+- testsuites/mptests/mp14/msgtask1.c
+stlib: []
+target: testsuites/mptests/mp14_node1.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/mptests/mp14node2.yml b/spec/build/testsuites/mptests/mp14node2.yml
new file mode 100644
index 0000000000..524e1c786d
--- /dev/null
+++ b/spec/build/testsuites/mptests/mp14node2.yml
@@ -0,0 +1,27 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by:
+- RTEMS_MULTIPROCESSING
+features: c cprogram
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/mptests/mp14/init2.c
+- testsuites/mptests/mp14/exit.c
+- testsuites/mptests/mp14/delay.c
+- testsuites/mptests/mp14/evtask1.c
+- testsuites/mptests/mp14/evtmtask.c
+- testsuites/mptests/mp14/pttask1.c
+- testsuites/mptests/mp14/smtask1.c
+- testsuites/mptests/mp14/msgtask1.c
+stlib: []
+target: testsuites/mptests/mp14_node2.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/optada.yml b/spec/build/testsuites/optada.yml
new file mode 100644
index 0000000000..a1844c4f73
--- /dev/null
+++ b/spec/build/testsuites/optada.yml
@@ -0,0 +1,15 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+actions:
+- get-boolean: null
+- env-enable: null
+build-type: option
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+default: false
+default-by-variant: []
+description: |
+ Build the Ada test programs (may be also enabled by BUILD_TESTS)
+enabled-by: true
+links: []
+name: BUILD_ADATESTS
+type: build
diff --git a/spec/build/testsuites/optall.yml b/spec/build/testsuites/optall.yml
new file mode 100644
index 0000000000..437a4cb8ca
--- /dev/null
+++ b/spec/build/testsuites/optall.yml
@@ -0,0 +1,15 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+actions:
+- get-boolean: null
+- env-enable: null
+build-type: option
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+default: false
+default-by-variant: []
+description: |
+ Build the test programs
+enabled-by: true
+links: []
+name: BUILD_TESTS
+type: build
diff --git a/spec/build/testsuites/optbenchmarks.yml b/spec/build/testsuites/optbenchmarks.yml
new file mode 100644
index 0000000000..5452746d5c
--- /dev/null
+++ b/spec/build/testsuites/optbenchmarks.yml
@@ -0,0 +1,15 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+actions:
+- get-boolean: null
+- env-enable: null
+build-type: option
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+default: false
+default-by-variant: []
+description: |
+ Build the benchmark programs (may be also enabled by BUILD_TESTS)
+enabled-by: true
+links: []
+name: BUILD_BENCHMARKS
+type: build
diff --git a/spec/build/testsuites/optfs.yml b/spec/build/testsuites/optfs.yml
new file mode 100644
index 0000000000..bc479b8948
--- /dev/null
+++ b/spec/build/testsuites/optfs.yml
@@ -0,0 +1,15 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+actions:
+- get-boolean: null
+- env-enable: null
+build-type: option
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+default: false
+default-by-variant: []
+description: |
+ Build the file system test programs (may be also enabled by BUILD_TESTS)
+enabled-by: true
+links: []
+name: BUILD_FSTESTS
+type: build
diff --git a/spec/build/testsuites/optlib.yml b/spec/build/testsuites/optlib.yml
new file mode 100644
index 0000000000..c3d1e5e7a6
--- /dev/null
+++ b/spec/build/testsuites/optlib.yml
@@ -0,0 +1,15 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+actions:
+- get-boolean: null
+- env-enable: null
+build-type: option
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+default: false
+default-by-variant: []
+description: |
+ Build the library test programs (may be also enabled by BUILD_TESTS)
+enabled-by: true
+links: []
+name: BUILD_LIBTESTS
+type: build
diff --git a/spec/build/testsuites/optmp.yml b/spec/build/testsuites/optmp.yml
new file mode 100644
index 0000000000..6a7ff38730
--- /dev/null
+++ b/spec/build/testsuites/optmp.yml
@@ -0,0 +1,15 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+actions:
+- get-boolean: null
+- env-enable: null
+build-type: option
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+default: false
+default-by-variant: []
+description: |
+ Build the MPCI test programs (may be also enabled by BUILD_TESTS)
+enabled-by: true
+links: []
+name: BUILD_MPTESTS
+type: build
diff --git a/spec/build/testsuites/optpsx.yml b/spec/build/testsuites/optpsx.yml
new file mode 100644
index 0000000000..c3a821421e
--- /dev/null
+++ b/spec/build/testsuites/optpsx.yml
@@ -0,0 +1,15 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+actions:
+- get-boolean: null
+- env-enable: null
+build-type: option
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+default: false
+default-by-variant: []
+description: |
+ Build the POSIX test programs (may be also enabled by BUILD_TESTS)
+enabled-by: true
+links: []
+name: BUILD_PSXTESTS
+type: build
diff --git a/spec/build/testsuites/optpsxtm.yml b/spec/build/testsuites/optpsxtm.yml
new file mode 100644
index 0000000000..8452c3de8c
--- /dev/null
+++ b/spec/build/testsuites/optpsxtm.yml
@@ -0,0 +1,15 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+actions:
+- get-boolean: null
+- env-enable: null
+build-type: option
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+default: false
+default-by-variant: []
+description: |
+ Build the POSIX timing test programs (may be also enabled by BUILD_TESTS)
+enabled-by: true
+links: []
+name: BUILD_PSXTMTESTS
+type: build
diff --git a/spec/build/testsuites/optrhs.yml b/spec/build/testsuites/optrhs.yml
new file mode 100644
index 0000000000..e9e779660c
--- /dev/null
+++ b/spec/build/testsuites/optrhs.yml
@@ -0,0 +1,15 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+actions:
+- get-boolean: null
+- env-enable: null
+build-type: option
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+default: false
+default-by-variant: []
+description: |
+ Build the Rhealstone benchmark programs (may be also enabled by BUILD_TESTS)
+enabled-by: true
+links: []
+name: BUILD_RHEALSTONE
+type: build
diff --git a/spec/build/testsuites/optsamples.yml b/spec/build/testsuites/optsamples.yml
new file mode 100644
index 0000000000..0edef21734
--- /dev/null
+++ b/spec/build/testsuites/optsamples.yml
@@ -0,0 +1,15 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+actions:
+- get-boolean: null
+- env-enable: null
+build-type: option
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+default: true
+default-by-variant: []
+description: |
+ Build the sample programs (may be also enabled by BUILD_TESTS)
+enabled-by: true
+links: []
+name: BUILD_SAMPLES
+type: build
diff --git a/spec/build/testsuites/optsmp.yml b/spec/build/testsuites/optsmp.yml
new file mode 100644
index 0000000000..9851841aad
--- /dev/null
+++ b/spec/build/testsuites/optsmp.yml
@@ -0,0 +1,15 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+actions:
+- get-boolean: null
+- env-enable: null
+build-type: option
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+default: false
+default-by-variant: []
+description: |
+ Build the SMP test programs (may be also enabled by BUILD_TESTS)
+enabled-by: true
+links: []
+name: BUILD_SMPTESTS
+type: build
diff --git a/spec/build/testsuites/optsp.yml b/spec/build/testsuites/optsp.yml
new file mode 100644
index 0000000000..88f378f838
--- /dev/null
+++ b/spec/build/testsuites/optsp.yml
@@ -0,0 +1,15 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+actions:
+- get-boolean: null
+- env-enable: null
+build-type: option
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+default: false
+default-by-variant: []
+description: |
+ Build the single-processor test programs (may be also enabled by BUILD_TESTS)
+enabled-by: true
+links: []
+name: BUILD_SPTESTS
+type: build
diff --git a/spec/build/testsuites/opttm.yml b/spec/build/testsuites/opttm.yml
new file mode 100644
index 0000000000..f5ee6afd7d
--- /dev/null
+++ b/spec/build/testsuites/opttm.yml
@@ -0,0 +1,15 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+actions:
+- get-boolean: null
+- env-enable: null
+build-type: option
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+default: false
+default-by-variant: []
+description: |
+ Build the timing test programs (may be also enabled by BUILD_TESTS)
+enabled-by: true
+links: []
+name: BUILD_TMTESTS
+type: build
diff --git a/spec/build/testsuites/optvalidation.yml b/spec/build/testsuites/optvalidation.yml
new file mode 100644
index 0000000000..81eb320d53
--- /dev/null
+++ b/spec/build/testsuites/optvalidation.yml
@@ -0,0 +1,15 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+actions:
+- get-boolean: null
+- env-enable: null
+build-type: option
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+default: false
+default-by-variant: []
+description: |
+ Build the validation test programs (may be also enabled by BUILD_TESTS)
+enabled-by: true
+links: []
+name: BUILD_VALIDATIONTESTS
+type: build
diff --git a/spec/build/testsuites/psxtests/grp.yml b/spec/build/testsuites/psxtests/grp.yml
new file mode 100644
index 0000000000..47dedac275
--- /dev/null
+++ b/spec/build/testsuites/psxtests/grp.yml
@@ -0,0 +1,235 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: group
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+enabled-by:
+- BUILD_TESTS
+- BUILD_PSXTESTS
+includes:
+- testsuites/support/include
+- testsuites/psxtests/include
+install: []
+ldflags:
+- -Wl,--wrap=printf
+- -Wl,--wrap=puts
+links:
+- role: build-dependency
+ uid: libpsxhdrs
+- role: build-dependency
+ uid: psx01
+- role: build-dependency
+ uid: psx02
+- role: build-dependency
+ uid: psx03
+- role: build-dependency
+ uid: psx04
+- role: build-dependency
+ uid: psx05
+- role: build-dependency
+ uid: psx06
+- role: build-dependency
+ uid: psx07
+- role: build-dependency
+ uid: psx08
+- role: build-dependency
+ uid: psx09
+- role: build-dependency
+ uid: psx10
+- role: build-dependency
+ uid: psx11
+- role: build-dependency
+ uid: psx12
+- role: build-dependency
+ uid: psx13
+- role: build-dependency
+ uid: psx14
+- role: build-dependency
+ uid: psx15
+- role: build-dependency
+ uid: psx16
+- role: build-dependency
+ uid: psxaio01
+- role: build-dependency
+ uid: psxaio02
+- role: build-dependency
+ uid: psxaio03
+- role: build-dependency
+ uid: psxalarm01
+- role: build-dependency
+ uid: psxautoinit01
+- role: build-dependency
+ uid: psxautoinit02
+- role: build-dependency
+ uid: psxbarrier01
+- role: build-dependency
+ uid: psxcancel
+- role: build-dependency
+ uid: psxcancel01
+- role: build-dependency
+ uid: psxchroot01
+- role: build-dependency
+ uid: psxclassic01
+- role: build-dependency
+ uid: psxcleanup
+- role: build-dependency
+ uid: psxcleanup01
+- role: build-dependency
+ uid: psxcleanup02
+- role: build-dependency
+ uid: psxclock
+- role: build-dependency
+ uid: psxclock01
+- role: build-dependency
+ uid: psxclockrealtime01
+- role: build-dependency
+ uid: psxconcurrency01
+- role: build-dependency
+ uid: psxcond01
+- role: build-dependency
+ uid: psxcond02
+- role: build-dependency
+ uid: psxconfig01
+- role: build-dependency
+ uid: psxdevctl01
+- role: build-dependency
+ uid: psxeintrjoin
+- role: build-dependency
+ uid: psxenosys
+- role: build-dependency
+ uid: psxfatal01
+- role: build-dependency
+ uid: psxfatal02
+- role: build-dependency
+ uid: psxfchx01
+- role: build-dependency
+ uid: psxfenv01
+- role: build-dependency
+ uid: psxfile01
+- role: build-dependency
+ uid: psxfile02
+- role: build-dependency
+ uid: psxfilelock01
+- role: build-dependency
+ uid: psxgetattrnp01
+- role: build-dependency
+ uid: psxgetrusage01
+- role: build-dependency
+ uid: psxglobalcon01
+- role: build-dependency
+ uid: psxglobalcon02
+- role: build-dependency
+ uid: psxid01
+- role: build-dependency
+ uid: psximfs01
+- role: build-dependency
+ uid: psximfs02
+- role: build-dependency
+ uid: psxintrcritical01
+- role: build-dependency
+ uid: psxinttypes01
+- role: build-dependency
+ uid: psxitimer
+- role: build-dependency
+ uid: psxkey01
+- role: build-dependency
+ uid: psxkey02
+- role: build-dependency
+ uid: psxkey03
+- role: build-dependency
+ uid: psxkey04
+- role: build-dependency
+ uid: psxkey05
+- role: build-dependency
+ uid: psxkey06
+- role: build-dependency
+ uid: psxkey07
+- role: build-dependency
+ uid: psxkey08
+- role: build-dependency
+ uid: psxkey09
+- role: build-dependency
+ uid: psxkey10
+- role: build-dependency
+ uid: psxmmap01
+- role: build-dependency
+ uid: psxmount
+- role: build-dependency
+ uid: psxmsgq01
+- role: build-dependency
+ uid: psxmsgq02
+- role: build-dependency
+ uid: psxmsgq03
+- role: build-dependency
+ uid: psxmsgq04
+- role: build-dependency
+ uid: psxmutexattr01
+- role: build-dependency
+ uid: psxndbm01
+- role: build-dependency
+ uid: psxobj01
+- role: build-dependency
+ uid: psxonce01
+- role: build-dependency
+ uid: psxpasswd01
+- role: build-dependency
+ uid: psxpasswd02
+- role: build-dependency
+ uid: psxpipe01
+- role: build-dependency
+ uid: psxrdwrv
+- role: build-dependency
+ uid: psxreaddir
+- role: build-dependency
+ uid: psxrwlock01
+- role: build-dependency
+ uid: psxsem01
+- role: build-dependency
+ uid: psxshm01
+- role: build-dependency
+ uid: psxshm02
+- role: build-dependency
+ uid: psxsignal01
+- role: build-dependency
+ uid: psxsignal02
+- role: build-dependency
+ uid: psxsignal03
+- role: build-dependency
+ uid: psxsignal04
+- role: build-dependency
+ uid: psxsignal05
+- role: build-dependency
+ uid: psxsignal06
+- role: build-dependency
+ uid: psxsignal07
+- role: build-dependency
+ uid: psxsignal08
+- role: build-dependency
+ uid: psxspin01
+- role: build-dependency
+ uid: psxstack01
+- role: build-dependency
+ uid: psxstack02
+- role: build-dependency
+ uid: psxstat
+- role: build-dependency
+ uid: psxstrsignal01
+- role: build-dependency
+ uid: psxsysconf
+- role: build-dependency
+ uid: psxthreadname01
+- role: build-dependency
+ uid: psxtime
+- role: build-dependency
+ uid: psxtimer01
+- role: build-dependency
+ uid: psxtimer02
+- role: build-dependency
+ uid: psxtimes01
+- role: build-dependency
+ uid: psxualarm
+- role: build-dependency
+ uid: psxusleep
+type: build
+use-after:
+- rtemstest
+use-before: []
diff --git a/spec/build/testsuites/psxtests/libpsxhdrs.yml b/spec/build/testsuites/psxtests/libpsxhdrs.yml
new file mode 100644
index 0000000000..67171b1033
--- /dev/null
+++ b/spec/build/testsuites/psxtests/libpsxhdrs.yml
@@ -0,0 +1,928 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: library
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by: true
+includes: []
+install: []
+install-path: null
+links: []
+source:
+- testsuites/psxtests/psxhdrs/devctl/posix_devctl.c
+- testsuites/psxtests/psxhdrs/pthread/pthread_attr_destroy.c
+- testsuites/psxtests/psxhdrs/pthread/pthread_attr_getdetachstate.c
+- testsuites/psxtests/psxhdrs/pthread/pthread_attr_getguardsize.c
+- testsuites/psxtests/psxhdrs/pthread/pthread_attr_getinheritsched.c
+- testsuites/psxtests/psxhdrs/pthread/pthread_attr_getschedparam.c
+- testsuites/psxtests/psxhdrs/pthread/pthread_attr_getschedpolicy.c
+- testsuites/psxtests/psxhdrs/pthread/pthread_attr_getscope.c
+- testsuites/psxtests/psxhdrs/pthread/pthread_attr_getstackaddr.c
+- testsuites/psxtests/psxhdrs/pthread/pthread_attr_getstack.c
+- testsuites/psxtests/psxhdrs/pthread/pthread_attr_getstacksize.c
+- testsuites/psxtests/psxhdrs/pthread/pthread_attr_init.c
+- testsuites/psxtests/psxhdrs/pthread/pthread_attr_setdetachstate.c
+- testsuites/psxtests/psxhdrs/pthread/pthread_attr_setguardsize.c
+- testsuites/psxtests/psxhdrs/pthread/pthread_attr_setinheritsched.c
+- testsuites/psxtests/psxhdrs/pthread/pthread_attr_setschedparam.c
+- testsuites/psxtests/psxhdrs/pthread/pthread_attr_setschedpolicy.c
+- testsuites/psxtests/psxhdrs/pthread/pthread_attr_setscope.c
+- testsuites/psxtests/psxhdrs/pthread/pthread_attr_setstackaddr.c
+- testsuites/psxtests/psxhdrs/pthread/pthread_attr_setstack.c
+- testsuites/psxtests/psxhdrs/pthread/pthread_attr_setstacksize.c
+- testsuites/psxtests/psxhdrs/pthread/pthread_cancel.c
+- testsuites/psxtests/psxhdrs/pthread/pthread_cleanup.c
+- testsuites/psxtests/psxhdrs/pthread/pthread_condattr_destroy.c
+- testsuites/psxtests/psxhdrs/pthread/pthread_condattr_getpshared.c
+- testsuites/psxtests/psxhdrs/pthread/pthread_condattr_init.c
+- testsuites/psxtests/psxhdrs/pthread/pthread_condattr_setpshared.c
+- testsuites/psxtests/psxhdrs/pthread/pthread_cond_broadcast.c
+- testsuites/psxtests/psxhdrs/pthread/pthread_cond_destroy.c
+- testsuites/psxtests/psxhdrs/pthread/pthread_cond_init.c
+- testsuites/psxtests/psxhdrs/pthread/pthread_cond_signal.c
+- testsuites/psxtests/psxhdrs/pthread/pthread_cond_timedwait.c
+- testsuites/psxtests/psxhdrs/pthread/pthread_cond_wait.c
+- testsuites/psxtests/psxhdrs/pthread/pthread_create.c
+- testsuites/psxtests/psxhdrs/pthread/pthread_detach.c
+- testsuites/psxtests/psxhdrs/pthread/pthread_equal.c
+- testsuites/psxtests/psxhdrs/pthread/pthread_exit.c
+- testsuites/psxtests/psxhdrs/pthread/pthread_getconcurrency.c
+- testsuites/psxtests/psxhdrs/pthread/pthread_getcpuclockid.c
+- testsuites/psxtests/psxhdrs/pthread/pthread_getschedparam.c
+- testsuites/psxtests/psxhdrs/pthread/pthread_getspecific.c
+- testsuites/psxtests/psxhdrs/pthread/pthread_join.c
+- testsuites/psxtests/psxhdrs/pthread/pthread_key_create.c
+- testsuites/psxtests/psxhdrs/pthread/pthread_key_delete.c
+- testsuites/psxtests/psxhdrs/pthread/pthread_mutexattr_destroy.c
+- testsuites/psxtests/psxhdrs/pthread/pthread_mutexattr_getprioceiling.c
+- testsuites/psxtests/psxhdrs/pthread/pthread_mutexattr_getprotocol.c
+- testsuites/psxtests/psxhdrs/pthread/pthread_mutexattr_getpshared.c
+- testsuites/psxtests/psxhdrs/pthread/pthread_mutexattr_init.c
+- testsuites/psxtests/psxhdrs/pthread/pthread_mutexattr_setprioceiling.c
+- testsuites/psxtests/psxhdrs/pthread/pthread_mutexattr_setprotocol.c
+- testsuites/psxtests/psxhdrs/pthread/pthread_mutexattr_setpshared.c
+- testsuites/psxtests/psxhdrs/pthread/pthread_mutex_destroy.c
+- testsuites/psxtests/psxhdrs/pthread/pthread_mutex_getprioceiling.c
+- testsuites/psxtests/psxhdrs/pthread/pthread_mutex_init.c
+- testsuites/psxtests/psxhdrs/pthread/pthread_mutex_lock.c
+- testsuites/psxtests/psxhdrs/pthread/pthread_mutex_setprioceiling.c
+- testsuites/psxtests/psxhdrs/pthread/pthread_mutex_timedlock.c
+- testsuites/psxtests/psxhdrs/pthread/pthread_mutex_trylock.c
+- testsuites/psxtests/psxhdrs/pthread/pthread_mutex_unlock.c
+- testsuites/psxtests/psxhdrs/pthread/pthread_once.c
+- testsuites/psxtests/psxhdrs/pthread/pthread_self.c
+- testsuites/psxtests/psxhdrs/pthread/pthread_setcancelstate.c
+- testsuites/psxtests/psxhdrs/pthread/pthread_setcanceltype.c
+- testsuites/psxtests/psxhdrs/pthread/pthread_setconcurrency.c
+- testsuites/psxtests/psxhdrs/pthread/pthread_setschedparam.c
+- testsuites/psxtests/psxhdrs/pthread/pthread_setspecific.c
+- testsuites/psxtests/psxhdrs/pthread/pthread_testcancel.c
+- testsuites/psxtests/psxhdrs/sched/sched_getparam.c
+- testsuites/psxtests/psxhdrs/sched/sched_get_priority_max.c
+- testsuites/psxtests/psxhdrs/sched/sched_get_priority_min.c
+- testsuites/psxtests/psxhdrs/sched/sched_getscheduler.c
+- testsuites/psxtests/psxhdrs/sched/sched_rr_get_interval.c
+- testsuites/psxtests/psxhdrs/sched/sched_setparam.c
+- testsuites/psxtests/psxhdrs/sched/sched_setscheduler.c
+- testsuites/psxtests/psxhdrs/sched/sched_yield.c
+- testsuites/psxtests/psxhdrs/signal/pthread_sigmask.c
+- testsuites/psxtests/psxhdrs/signal/raise.c
+- testsuites/psxtests/psxhdrs/signal/signal.c
+- testsuites/psxtests/psxhdrs/signal/sigpending.c
+- testsuites/psxtests/psxhdrs/signal/sigprocmask.c
+- testsuites/psxtests/psxhdrs/signal/sigsuspend.c
+- testsuites/psxtests/psxhdrs/signal/sigtimedwait.c
+- testsuites/psxtests/psxhdrs/signal/sigwait.c
+- testsuites/psxtests/psxhdrs/signal/sigwaitinfo.c
+- testsuites/psxtests/psxhdrs/time/asctime.c
+- testsuites/psxtests/psxhdrs/time/asctime_r.c
+- testsuites/psxtests/psxhdrs/time/clock.c
+- testsuites/psxtests/psxhdrs/time/clock_getcpuclockid.c
+- testsuites/psxtests/psxhdrs/time/clock_getres.c
+- testsuites/psxtests/psxhdrs/time/clock_gettime.c
+- testsuites/psxtests/psxhdrs/time/clock_nanosleep.c
+- testsuites/psxtests/psxhdrs/time/clock_settime.c
+- testsuites/psxtests/psxhdrs/time/ctime.c
+- testsuites/psxtests/psxhdrs/time/ctime_r.c
+- testsuites/psxtests/psxhdrs/time/difftime.c
+- testsuites/psxtests/psxhdrs/time/gmtime.c
+- testsuites/psxtests/psxhdrs/time/gmtime_r.c
+- testsuites/psxtests/psxhdrs/time/localtime.c
+- testsuites/psxtests/psxhdrs/time/localtime_r.c
+- testsuites/psxtests/psxhdrs/time/mktime.c
+- testsuites/psxtests/psxhdrs/time/nanosleep.c
+- testsuites/psxtests/psxhdrs/time/strftime.c
+- testsuites/psxtests/psxhdrs/time/time.c
+- testsuites/psxtests/psxhdrs/time/timer_create.c
+- testsuites/psxtests/psxhdrs/time/timer_delete.c
+- testsuites/psxtests/psxhdrs/time/timer_getoverrun.c
+- testsuites/psxtests/psxhdrs/time/timer_gettime.c
+- testsuites/psxtests/psxhdrs/time/timer_settime.c
+- testsuites/psxtests/psxhdrs/unistd/alarm.c
+- testsuites/psxtests/psxhdrs/unistd/fdatasync.c
+- testsuites/psxtests/psxhdrs/unistd/fsync.c
+- testsuites/psxtests/psxhdrs/unistd/getegid.c
+- testsuites/psxtests/psxhdrs/unistd/geteuid.c
+- testsuites/psxtests/psxhdrs/unistd/getgid.c
+- testsuites/psxtests/psxhdrs/unistd/getgroups.c
+- testsuites/psxtests/psxhdrs/unistd/getlogin.c
+- testsuites/psxtests/psxhdrs/unistd/getlogin_r.c
+- testsuites/psxtests/psxhdrs/unistd/getpgrp.c
+- testsuites/psxtests/psxhdrs/unistd/getpid.c
+- testsuites/psxtests/psxhdrs/unistd/getppid.c
+- testsuites/psxtests/psxhdrs/unistd/getuid.c
+- testsuites/psxtests/psxhdrs/unistd/pause.c
+- testsuites/psxtests/psxhdrs/unistd/setgid.c
+- testsuites/psxtests/psxhdrs/unistd/setgroups.c
+- testsuites/psxtests/psxhdrs/unistd/setpgid.c
+- testsuites/psxtests/psxhdrs/unistd/setsid.c
+- testsuites/psxtests/psxhdrs/unistd/setuid.c
+- testsuites/psxtests/psxhdrs/unistd/sleep.c
+- testsuites/psxtests/psxhdrs/unistd/sync.c
+- testsuites/psxtests/psxhdrs/unistd/ualarm.c
+- testsuites/psxtests/psxhdrs/unistd/usleep.c
+- testsuites/psxtests/psxhdrs/sys/mman/mlockall.c
+- testsuites/psxtests/psxhdrs/utime/utime.c
+- testsuites/psxtests/psxhdrs/wordexp/wordexp.c
+- testsuites/psxtests/psxhdrs/wordexp/wordfree.c
+- testsuites/psxtests/psxhdrs/sys/mman/mlock.c
+- testsuites/psxtests/psxhdrs/sys/mman/mmap.c
+- testsuites/psxtests/psxhdrs/sys/mman/mprotect.c
+- testsuites/psxtests/psxhdrs/sys/mman/msync.c
+- testsuites/psxtests/psxhdrs/sys/mman/munlockall.c
+- testsuites/psxtests/psxhdrs/sys/mman/munlock.c
+- testsuites/psxtests/psxhdrs/sys/mman/munmap.c
+- testsuites/psxtests/psxhdrs/sys/mman/posix_madvise.c
+- testsuites/psxtests/psxhdrs/sys/mman/shm_open.c
+- testsuites/psxtests/psxhdrs/sys/mman/shm_unlink.c
+- testsuites/psxtests/psxhdrs/sys/socket/accept.c
+- testsuites/psxtests/psxhdrs/sys/socket/bind.c
+- testsuites/psxtests/psxhdrs/sys/socket/connect.c
+- testsuites/psxtests/psxhdrs/sys/socket/getpeername.c
+- testsuites/psxtests/psxhdrs/sys/socket/getsockname.c
+- testsuites/psxtests/psxhdrs/sys/socket/getsockopt.c
+- testsuites/psxtests/psxhdrs/sys/socket/listen.c
+- testsuites/psxtests/psxhdrs/sys/socket/recv.c
+- testsuites/psxtests/psxhdrs/sys/socket/recvfrom.c
+- testsuites/psxtests/psxhdrs/sys/socket/recvmsg.c
+- testsuites/psxtests/psxhdrs/sys/socket/send.c
+- testsuites/psxtests/psxhdrs/sys/socket/sendmsg.c
+- testsuites/psxtests/psxhdrs/sys/socket/sendto.c
+- testsuites/psxtests/psxhdrs/sys/socket/setsockopt.c
+- testsuites/psxtests/psxhdrs/sys/socket/shutdown.c
+- testsuites/psxtests/psxhdrs/sys/socket/socket.c
+- testsuites/psxtests/psxhdrs/sys/socket/socketpair.c
+- testsuites/psxtests/psxhdrs/sys/stat/chmod.c
+- testsuites/psxtests/psxhdrs/sys/stat/fchmodat.c
+- testsuites/psxtests/psxhdrs/sys/stat/fchmod.c
+- testsuites/psxtests/psxhdrs/sys/stat/fstatat.c
+- testsuites/psxtests/psxhdrs/sys/stat/fstat.c
+- testsuites/psxtests/psxhdrs/sys/stat/futimens.c
+- testsuites/psxtests/psxhdrs/sys/stat/lstat.c
+- testsuites/psxtests/psxhdrs/sys/stat/mkdirat.c
+- testsuites/psxtests/psxhdrs/sys/stat/mkdir.c
+- testsuites/psxtests/psxhdrs/sys/stat/mkfifoat.c
+- testsuites/psxtests/psxhdrs/sys/stat/mkfifo.c
+- testsuites/psxtests/psxhdrs/sys/stat/mknodat.c
+- testsuites/psxtests/psxhdrs/sys/stat/mknod.c
+- testsuites/psxtests/psxhdrs/sys/stat/stat.c
+- testsuites/psxtests/psxhdrs/sys/stat/umask.c
+- testsuites/psxtests/psxhdrs/sys/stat/utimensat.c
+- testsuites/psxtests/psxhdrs/sys/time/select.c
+- testsuites/psxtests/psxhdrs/sys/time/utimes.c
+- testsuites/psxtests/psxhdrs/sys/time/setitimer.c
+- testsuites/psxtests/psxhdrs/sys/time/getitimer.c
+- testsuites/psxtests/psxhdrs/sys/time/gettimeofday.c
+- testsuites/psxtests/psxhdrs/sys/utsname/uname.c
+- testsuites/psxtests/psxhdrs/dirent/alphasort.c
+- testsuites/psxtests/psxhdrs/dirent/closedir.c
+- testsuites/psxtests/psxhdrs/dirent/opendir.c
+- testsuites/psxtests/psxhdrs/dirent/readdir.c
+- testsuites/psxtests/psxhdrs/dirent/readdir_r.c
+- testsuites/psxtests/psxhdrs/dirent/rewinddir.c
+- testsuites/psxtests/psxhdrs/dirent/scandir.c
+- testsuites/psxtests/psxhdrs/dirent/seekdir.c
+- testsuites/psxtests/psxhdrs/dirent/telldir.c
+- testsuites/psxtests/psxhdrs/errno/errno.c
+- testsuites/psxtests/psxhdrs/glob/glob.c
+- testsuites/psxtests/psxhdrs/glob/globfree.c
+- testsuites/psxtests/psxhdrs/libgen/basename.c
+- testsuites/psxtests/psxhdrs/libgen/dirname.c
+- testsuites/psxtests/psxhdrs/math/acos.c
+- testsuites/psxtests/psxhdrs/math/acosf.c
+- testsuites/psxtests/psxhdrs/math/acosh.c
+- testsuites/psxtests/psxhdrs/math/acoshf.c
+- testsuites/psxtests/psxhdrs/math/acoshl.c
+- testsuites/psxtests/psxhdrs/math/acosl.c
+- testsuites/psxtests/psxhdrs/math/asin.c
+- testsuites/psxtests/psxhdrs/math/asinf.c
+- testsuites/psxtests/psxhdrs/math/asinh.c
+- testsuites/psxtests/psxhdrs/math/asinhf.c
+- testsuites/psxtests/psxhdrs/math/asinhl.c
+- testsuites/psxtests/psxhdrs/math/asinl.c
+- testsuites/psxtests/psxhdrs/math/atan2.c
+- testsuites/psxtests/psxhdrs/math/atan2f.c
+- testsuites/psxtests/psxhdrs/math/atan2l.c
+- testsuites/psxtests/psxhdrs/math/atan.c
+- testsuites/psxtests/psxhdrs/math/atanf.c
+- testsuites/psxtests/psxhdrs/math/atanh.c
+- testsuites/psxtests/psxhdrs/math/atanhf.c
+- testsuites/psxtests/psxhdrs/math/atanhl.c
+- testsuites/psxtests/psxhdrs/math/atanl.c
+- testsuites/psxtests/psxhdrs/math/cbrt.c
+- testsuites/psxtests/psxhdrs/math/cbrtf.c
+- testsuites/psxtests/psxhdrs/math/cbrtl.c
+- testsuites/psxtests/psxhdrs/math/ceil.c
+- testsuites/psxtests/psxhdrs/math/ceilf.c
+- testsuites/psxtests/psxhdrs/math/ceill.c
+- testsuites/psxtests/psxhdrs/math/copysign.c
+- testsuites/psxtests/psxhdrs/math/copysignf.c
+- testsuites/psxtests/psxhdrs/math/copysignl.c
+- testsuites/psxtests/psxhdrs/math/cos.c
+- testsuites/psxtests/psxhdrs/math/cosf.c
+- testsuites/psxtests/psxhdrs/math/cosh.c
+- testsuites/psxtests/psxhdrs/math/coshf.c
+- testsuites/psxtests/psxhdrs/math/coshl.c
+- testsuites/psxtests/psxhdrs/math/cosl.c
+- testsuites/psxtests/psxhdrs/math/erf.c
+- testsuites/psxtests/psxhdrs/math/erfc.c
+- testsuites/psxtests/psxhdrs/math/erfcf.c
+- testsuites/psxtests/psxhdrs/math/erfcl.c
+- testsuites/psxtests/psxhdrs/math/erff.c
+- testsuites/psxtests/psxhdrs/math/erfl.c
+- testsuites/psxtests/psxhdrs/math/exp2.c
+- testsuites/psxtests/psxhdrs/math/exp2f.c
+- testsuites/psxtests/psxhdrs/math/exp2l.c
+- testsuites/psxtests/psxhdrs/math/exp.c
+- testsuites/psxtests/psxhdrs/math/expf.c
+- testsuites/psxtests/psxhdrs/math/expl.c
+- testsuites/psxtests/psxhdrs/math/expm1.c
+- testsuites/psxtests/psxhdrs/math/expm1f.c
+- testsuites/psxtests/psxhdrs/math/expm1l.c
+- testsuites/psxtests/psxhdrs/math/fabs.c
+- testsuites/psxtests/psxhdrs/math/fabsf.c
+- testsuites/psxtests/psxhdrs/math/fabsl.c
+- testsuites/psxtests/psxhdrs/math/fdim.c
+- testsuites/psxtests/psxhdrs/math/fdimf.c
+- testsuites/psxtests/psxhdrs/math/fdiml.c
+- testsuites/psxtests/psxhdrs/math/floor.c
+- testsuites/psxtests/psxhdrs/math/floorf.c
+- testsuites/psxtests/psxhdrs/math/floorl.c
+- testsuites/psxtests/psxhdrs/math/fma.c
+- testsuites/psxtests/psxhdrs/math/fmaf.c
+- testsuites/psxtests/psxhdrs/math/fmal.c
+- testsuites/psxtests/psxhdrs/math/fmax.c
+- testsuites/psxtests/psxhdrs/math/fmaxf.c
+- testsuites/psxtests/psxhdrs/math/fmaxl.c
+- testsuites/psxtests/psxhdrs/math/fmin.c
+- testsuites/psxtests/psxhdrs/math/fminf.c
+- testsuites/psxtests/psxhdrs/math/fminl.c
+- testsuites/psxtests/psxhdrs/math/fmod.c
+- testsuites/psxtests/psxhdrs/math/fmodf.c
+- testsuites/psxtests/psxhdrs/math/fmodl.c
+- testsuites/psxtests/psxhdrs/math/fpclassify.c
+- testsuites/psxtests/psxhdrs/math/frexp.c
+- testsuites/psxtests/psxhdrs/math/frexpf.c
+- testsuites/psxtests/psxhdrs/math/frexpl.c
+- testsuites/psxtests/psxhdrs/math/hypot.c
+- testsuites/psxtests/psxhdrs/math/hypotf.c
+- testsuites/psxtests/psxhdrs/math/hypotl.c
+- testsuites/psxtests/psxhdrs/math/ilogb.c
+- testsuites/psxtests/psxhdrs/math/ilogbf.c
+- testsuites/psxtests/psxhdrs/math/ilogbl.c
+- testsuites/psxtests/psxhdrs/math/isfinite.c
+- testsuites/psxtests/psxhdrs/math/isgreater.c
+- testsuites/psxtests/psxhdrs/math/isgreaterequal.c
+- testsuites/psxtests/psxhdrs/math/isinf.c
+- testsuites/psxtests/psxhdrs/math/isless.c
+- testsuites/psxtests/psxhdrs/math/islessequal.c
+- testsuites/psxtests/psxhdrs/math/islessgreater.c
+- testsuites/psxtests/psxhdrs/math/isnan.c
+- testsuites/psxtests/psxhdrs/math/isnormal.c
+- testsuites/psxtests/psxhdrs/math/isunordered.c
+- testsuites/psxtests/psxhdrs/math/ldexp.c
+- testsuites/psxtests/psxhdrs/math/ldexpf.c
+- testsuites/psxtests/psxhdrs/math/ldexpl.c
+- testsuites/psxtests/psxhdrs/math/lgamma.c
+- testsuites/psxtests/psxhdrs/math/lgammaf.c
+- testsuites/psxtests/psxhdrs/math/lgammal.c
+- testsuites/psxtests/psxhdrs/math/llrint.c
+- testsuites/psxtests/psxhdrs/math/llrintf.c
+- testsuites/psxtests/psxhdrs/math/llrintl.c
+- testsuites/psxtests/psxhdrs/math/llround.c
+- testsuites/psxtests/psxhdrs/math/llroundf.c
+- testsuites/psxtests/psxhdrs/math/llroundl.c
+- testsuites/psxtests/psxhdrs/math/log10.c
+- testsuites/psxtests/psxhdrs/math/log10f.c
+- testsuites/psxtests/psxhdrs/math/log10l.c
+- testsuites/psxtests/psxhdrs/math/log1p.c
+- testsuites/psxtests/psxhdrs/math/log1pf.c
+- testsuites/psxtests/psxhdrs/math/log1pl.c
+- testsuites/psxtests/psxhdrs/math/log2.c
+- testsuites/psxtests/psxhdrs/math/log2f.c
+- testsuites/psxtests/psxhdrs/math/log2l.c
+- testsuites/psxtests/psxhdrs/math/logb.c
+- testsuites/psxtests/psxhdrs/math/logbf.c
+- testsuites/psxtests/psxhdrs/math/logbl.c
+- testsuites/psxtests/psxhdrs/math/log.c
+- testsuites/psxtests/psxhdrs/math/logf.c
+- testsuites/psxtests/psxhdrs/math/logl.c
+- testsuites/psxtests/psxhdrs/math/lrint.c
+- testsuites/psxtests/psxhdrs/math/lrintf.c
+- testsuites/psxtests/psxhdrs/math/lrintl.c
+- testsuites/psxtests/psxhdrs/math/lround.c
+- testsuites/psxtests/psxhdrs/math/lroundf.c
+- testsuites/psxtests/psxhdrs/math/lroundl.c
+- testsuites/psxtests/psxhdrs/math/modf.c
+- testsuites/psxtests/psxhdrs/math/modff.c
+- testsuites/psxtests/psxhdrs/math/modfl.c
+- testsuites/psxtests/psxhdrs/math/nan.c
+- testsuites/psxtests/psxhdrs/math/nanf.c
+- testsuites/psxtests/psxhdrs/math/nanl.c
+- testsuites/psxtests/psxhdrs/math/nearbyint.c
+- testsuites/psxtests/psxhdrs/math/nearbyintf.c
+- testsuites/psxtests/psxhdrs/math/nearbyintl.c
+- testsuites/psxtests/psxhdrs/math/nextafter.c
+- testsuites/psxtests/psxhdrs/math/nextafterf.c
+- testsuites/psxtests/psxhdrs/math/nextafterl.c
+- testsuites/psxtests/psxhdrs/math/nexttoward.c
+- testsuites/psxtests/psxhdrs/math/nexttowardf.c
+- testsuites/psxtests/psxhdrs/math/nexttowardl.c
+- testsuites/psxtests/psxhdrs/math/pow.c
+- testsuites/psxtests/psxhdrs/math/powf.c
+- testsuites/psxtests/psxhdrs/math/powl.c
+- testsuites/psxtests/psxhdrs/math/remainder.c
+- testsuites/psxtests/psxhdrs/math/remainderf.c
+- testsuites/psxtests/psxhdrs/math/remainderl.c
+- testsuites/psxtests/psxhdrs/math/remquo.c
+- testsuites/psxtests/psxhdrs/math/remquof.c
+- testsuites/psxtests/psxhdrs/math/remquol.c
+- testsuites/psxtests/psxhdrs/math/rint.c
+- testsuites/psxtests/psxhdrs/math/rintf.c
+- testsuites/psxtests/psxhdrs/math/rintl.c
+- testsuites/psxtests/psxhdrs/math/round.c
+- testsuites/psxtests/psxhdrs/math/roundf.c
+- testsuites/psxtests/psxhdrs/math/roundl.c
+- testsuites/psxtests/psxhdrs/math/scalbln.c
+- testsuites/psxtests/psxhdrs/math/scalblnf.c
+- testsuites/psxtests/psxhdrs/math/scalblnl.c
+- testsuites/psxtests/psxhdrs/math/scalbn.c
+- testsuites/psxtests/psxhdrs/math/scalbnf.c
+- testsuites/psxtests/psxhdrs/math/scalbnl.c
+- testsuites/psxtests/psxhdrs/math/signbit.c
+- testsuites/psxtests/psxhdrs/math/sin.c
+- testsuites/psxtests/psxhdrs/math/sinf.c
+- testsuites/psxtests/psxhdrs/math/sinh.c
+- testsuites/psxtests/psxhdrs/math/sinhf.c
+- testsuites/psxtests/psxhdrs/math/sinhl.c
+- testsuites/psxtests/psxhdrs/math/sinl.c
+- testsuites/psxtests/psxhdrs/math/sqrt.c
+- testsuites/psxtests/psxhdrs/math/sqrtf.c
+- testsuites/psxtests/psxhdrs/math/sqrtl.c
+- testsuites/psxtests/psxhdrs/math/tan.c
+- testsuites/psxtests/psxhdrs/math/tanf.c
+- testsuites/psxtests/psxhdrs/math/tanh.c
+- testsuites/psxtests/psxhdrs/math/tanhf.c
+- testsuites/psxtests/psxhdrs/math/tanhl.c
+- testsuites/psxtests/psxhdrs/math/tanl.c
+- testsuites/psxtests/psxhdrs/math/tgamma.c
+- testsuites/psxtests/psxhdrs/math/tgammaf.c
+- testsuites/psxtests/psxhdrs/math/tgammal.c
+- testsuites/psxtests/psxhdrs/math/trunc.c
+- testsuites/psxtests/psxhdrs/math/truncf.c
+- testsuites/psxtests/psxhdrs/math/truncl.c
+- testsuites/psxtests/psxhdrs/math/y0.c
+- testsuites/psxtests/psxhdrs/math/y0f.c
+- testsuites/psxtests/psxhdrs/math/y1.c
+- testsuites/psxtests/psxhdrs/math/y1f.c
+- testsuites/psxtests/psxhdrs/math/yn.c
+- testsuites/psxtests/psxhdrs/math/ynf.c
+- testsuites/psxtests/psxhdrs/mqueue/mq_open.c
+- testsuites/psxtests/psxhdrs/mqueue/mq_close.c
+- testsuites/psxtests/psxhdrs/mqueue/mq_getattr.c
+- testsuites/psxtests/psxhdrs/mqueue/mq_setattr.c
+- testsuites/psxtests/psxhdrs/mqueue/mq_notify.c
+- testsuites/psxtests/psxhdrs/mqueue/mq_receive.c
+- testsuites/psxtests/psxhdrs/mqueue/mq_send.c
+- testsuites/psxtests/psxhdrs/mqueue/mq_timedreceive.c
+- testsuites/psxtests/psxhdrs/mqueue/mq_timedsend.c
+- testsuites/psxtests/psxhdrs/mqueue/mq_unlink.c
+- testsuites/psxtests/psxhdrs/semaphore/sem_init.c
+- testsuites/psxtests/psxhdrs/semaphore/sem_destroy.c
+- testsuites/psxtests/psxhdrs/semaphore/sem_open.c
+- testsuites/psxtests/psxhdrs/semaphore/sem_close.c
+- testsuites/psxtests/psxhdrs/semaphore/sem_getvalue.c
+- testsuites/psxtests/psxhdrs/semaphore/sem_unlink.c
+- testsuites/psxtests/psxhdrs/semaphore/sem_post.c
+- testsuites/psxtests/psxhdrs/semaphore/sem_wait.c
+- testsuites/psxtests/psxhdrs/semaphore/sem_trywait.c
+- testsuites/psxtests/psxhdrs/semaphore/sem_timedwait.c
+- testsuites/psxtests/psxhdrs/stddef/offsetof.c
+- testsuites/psxtests/psxhdrs/stdio/clearerr.c
+- testsuites/psxtests/psxhdrs/stdio/ctermid.c
+- testsuites/psxtests/psxhdrs/stdio/dprintf.c
+- testsuites/psxtests/psxhdrs/stdio/fclose.c
+- testsuites/psxtests/psxhdrs/stdio/fdopen.c
+- testsuites/psxtests/psxhdrs/stdio/feof.c
+- testsuites/psxtests/psxhdrs/stdio/ferror.c
+- testsuites/psxtests/psxhdrs/stdio/fflush.c
+- testsuites/psxtests/psxhdrs/stdio/fgetc.c
+- testsuites/psxtests/psxhdrs/stdio/fgetpos.c
+- testsuites/psxtests/psxhdrs/stdio/fgets.c
+- testsuites/psxtests/psxhdrs/stdio/fileno.c
+- testsuites/psxtests/psxhdrs/stdio/flockfile.c
+- testsuites/psxtests/psxhdrs/stdio/fmemopen.c
+- testsuites/psxtests/psxhdrs/stdio/fopen.c
+- testsuites/psxtests/psxhdrs/stdio/fprintf.c
+- testsuites/psxtests/psxhdrs/stdio/fputc.c
+- testsuites/psxtests/psxhdrs/stdio/fputs.c
+- testsuites/psxtests/psxhdrs/stdio/fread.c
+- testsuites/psxtests/psxhdrs/stdio/freopen.c
+- testsuites/psxtests/psxhdrs/stdio/fscanf.c
+- testsuites/psxtests/psxhdrs/stdio/fseek.c
+- testsuites/psxtests/psxhdrs/stdio/fseeko.c
+- testsuites/psxtests/psxhdrs/stdio/fsetpos.c
+- testsuites/psxtests/psxhdrs/stdio/ftell.c
+- testsuites/psxtests/psxhdrs/stdio/ftello.c
+- testsuites/psxtests/psxhdrs/stdio/ftrylockfile.c
+- testsuites/psxtests/psxhdrs/stdio/funlockfile.c
+- testsuites/psxtests/psxhdrs/stdio/fwrite.c
+- testsuites/psxtests/psxhdrs/stdio/getc.c
+- testsuites/psxtests/psxhdrs/stdio/getc_unlocked.c
+- testsuites/psxtests/psxhdrs/stdio/getchar.c
+- testsuites/psxtests/psxhdrs/stdio/getchar_unlocked.c
+- testsuites/psxtests/psxhdrs/stdio/gets.c
+- testsuites/psxtests/psxhdrs/stdio/open_memstream.c
+- testsuites/psxtests/psxhdrs/stdio/perror.c
+- testsuites/psxtests/psxhdrs/stdio/printf.c
+- testsuites/psxtests/psxhdrs/stdio/putc.c
+- testsuites/psxtests/psxhdrs/stdio/putc_unlocked.c
+- testsuites/psxtests/psxhdrs/stdio/putchar.c
+- testsuites/psxtests/psxhdrs/stdio/putchar_unlocked.c
+- testsuites/psxtests/psxhdrs/stdio/puts.c
+- testsuites/psxtests/psxhdrs/stdio/remove.c
+- testsuites/psxtests/psxhdrs/stdio/rename.c
+- testsuites/psxtests/psxhdrs/stdio/rewind.c
+- testsuites/psxtests/psxhdrs/stdio/scanf.c
+- testsuites/psxtests/psxhdrs/stdio/setbuf.c
+- testsuites/psxtests/psxhdrs/stdio/setvbuf.c
+- testsuites/psxtests/psxhdrs/stdio/snprintf.c
+- testsuites/psxtests/psxhdrs/stdio/sprintf.c
+- testsuites/psxtests/psxhdrs/stdio/sscanf.c
+- testsuites/psxtests/psxhdrs/stdio/stderr.c
+- testsuites/psxtests/psxhdrs/stdio/stdin.c
+- testsuites/psxtests/psxhdrs/stdio/stdout.c
+- testsuites/psxtests/psxhdrs/stdio/tempnam.c
+- testsuites/psxtests/psxhdrs/stdio/tmpfile.c
+- testsuites/psxtests/psxhdrs/stdio/tmpnam.c
+- testsuites/psxtests/psxhdrs/stdio/ungetc.c
+- testsuites/psxtests/psxhdrs/stdio/vdprintf.c
+- testsuites/psxtests/psxhdrs/stdio/vfprintf.c
+- testsuites/psxtests/psxhdrs/stdio/vfscanf.c
+- testsuites/psxtests/psxhdrs/stdio/vprintf.c
+- testsuites/psxtests/psxhdrs/stdio/vscanf.c
+- testsuites/psxtests/psxhdrs/stdio/vsnprintf.c
+- testsuites/psxtests/psxhdrs/stdio/vsprintf.c
+- testsuites/psxtests/psxhdrs/stdio/vsscanf.c
+- testsuites/psxtests/psxhdrs/stdio/pclose.c
+- testsuites/psxtests/psxhdrs/stdio/popen.c
+- testsuites/psxtests/psxhdrs/string/memccpy.c
+- testsuites/psxtests/psxhdrs/string/memchr.c
+- testsuites/psxtests/psxhdrs/string/memcmp.c
+- testsuites/psxtests/psxhdrs/string/memcpy.c
+- testsuites/psxtests/psxhdrs/string/memmove.c
+- testsuites/psxtests/psxhdrs/string/memset.c
+- testsuites/psxtests/psxhdrs/string/stpcpy.c
+- testsuites/psxtests/psxhdrs/string/stpncpy.c
+- testsuites/psxtests/psxhdrs/string/strcat.c
+- testsuites/psxtests/psxhdrs/string/strchr.c
+- testsuites/psxtests/psxhdrs/string/strcmp.c
+- testsuites/psxtests/psxhdrs/string/strcoll.c
+- testsuites/psxtests/psxhdrs/string/strcoll_l.c
+- testsuites/psxtests/psxhdrs/string/strcpy.c
+- testsuites/psxtests/psxhdrs/string/strcspn.c
+- testsuites/psxtests/psxhdrs/string/strdup.c
+- testsuites/psxtests/psxhdrs/string/strerror.c
+- testsuites/psxtests/psxhdrs/string/strerror_l.c
+- testsuites/psxtests/psxhdrs/string/strerror_r.c
+- testsuites/psxtests/psxhdrs/string/strlen.c
+- testsuites/psxtests/psxhdrs/string/strncat.c
+- testsuites/psxtests/psxhdrs/string/strncmp.c
+- testsuites/psxtests/psxhdrs/string/strncpy.c
+- testsuites/psxtests/psxhdrs/string/strndup.c
+- testsuites/psxtests/psxhdrs/string/strnlen.c
+- testsuites/psxtests/psxhdrs/string/strpbrk.c
+- testsuites/psxtests/psxhdrs/string/strrchr.c
+- testsuites/psxtests/psxhdrs/string/strsignal.c
+- testsuites/psxtests/psxhdrs/string/strspn.c
+- testsuites/psxtests/psxhdrs/string/strstr.c
+- testsuites/psxtests/psxhdrs/string/strtok.c
+- testsuites/psxtests/psxhdrs/string/strtok_r.c
+- testsuites/psxtests/psxhdrs/string/strxfrm.c
+- testsuites/psxtests/psxhdrs/string/strxfrm_l.c
+- testsuites/psxtests/psxhdrs/strings/bcmp.c
+- testsuites/psxtests/psxhdrs/strings/bcopy.c
+- testsuites/psxtests/psxhdrs/strings/ffs.c
+- testsuites/psxtests/psxhdrs/strings/index.c
+- testsuites/psxtests/psxhdrs/strings/rindex.c
+- testsuites/psxtests/psxhdrs/strings/strcasecmp.c
+- testsuites/psxtests/psxhdrs/strings/strcasecmp_l.c
+- testsuites/psxtests/psxhdrs/strings/strncasecmp.c
+- testsuites/psxtests/psxhdrs/strings/strncasecmp_l.c
+- testsuites/psxtests/psxhdrs/dlfcn/dlopen.c
+- testsuites/psxtests/psxhdrs/dlfcn/dlclose.c
+- testsuites/psxtests/psxhdrs/dlfcn/dlerror.c
+- testsuites/psxtests/psxhdrs/dlfcn/dlsym.c
+- testsuites/psxtests/psxhdrs/fcntl/creat.c
+- testsuites/psxtests/psxhdrs/fcntl/fcntl.c
+- testsuites/psxtests/psxhdrs/fcntl/open.c
+- testsuites/psxtests/psxhdrs/fcntl/openat.c
+- testsuites/psxtests/psxhdrs/locale/newlocale.c
+- testsuites/psxtests/psxhdrs/locale/freelocale.c
+- testsuites/psxtests/psxhdrs/locale/uselocale.c
+- testsuites/psxtests/psxhdrs/locale/setlocale.c
+- testsuites/psxtests/psxhdrs/locale/duplocale.c
+- testsuites/psxtests/psxhdrs/locale/localeconv.c
+- testsuites/psxtests/psxhdrs/regex/regcomp.c
+- testsuites/psxtests/psxhdrs/regex/regerror.c
+- testsuites/psxtests/psxhdrs/regex/regexec.c
+- testsuites/psxtests/psxhdrs/regex/regfree.c
+- testsuites/psxtests/psxhdrs/fnmatch/fnmatch.c
+- testsuites/psxtests/psxhdrs/iconv/iconv.c
+- testsuites/psxtests/psxhdrs/iconv/iconv_close.c
+- testsuites/psxtests/psxhdrs/iconv/iconv_open.c
+- testsuites/psxtests/psxhdrs/langinfo/nl_langinfo.c
+- testsuites/psxtests/psxhdrs/langinfo/nl_langinfo_l.c
+- testsuites/psxtests/psxhdrs/assert/assert.c
+- testsuites/psxtests/psxhdrs/complex/cabs.c
+- testsuites/psxtests/psxhdrs/complex/cabsf.c
+- testsuites/psxtests/psxhdrs/complex/cabsl.c
+- testsuites/psxtests/psxhdrs/complex/cacos.c
+- testsuites/psxtests/psxhdrs/complex/cacosf.c
+- testsuites/psxtests/psxhdrs/complex/cacosh.c
+- testsuites/psxtests/psxhdrs/complex/cacoshf.c
+- testsuites/psxtests/psxhdrs/complex/cacoshl.c
+- testsuites/psxtests/psxhdrs/complex/cacosl.c
+- testsuites/psxtests/psxhdrs/complex/carg.c
+- testsuites/psxtests/psxhdrs/complex/cargf.c
+- testsuites/psxtests/psxhdrs/complex/cargl.c
+- testsuites/psxtests/psxhdrs/complex/casin.c
+- testsuites/psxtests/psxhdrs/complex/casinf.c
+- testsuites/psxtests/psxhdrs/complex/casinh.c
+- testsuites/psxtests/psxhdrs/complex/casinhf.c
+- testsuites/psxtests/psxhdrs/complex/casinhl.c
+- testsuites/psxtests/psxhdrs/complex/casinl.c
+- testsuites/psxtests/psxhdrs/complex/catan.c
+- testsuites/psxtests/psxhdrs/complex/catanf.c
+- testsuites/psxtests/psxhdrs/complex/catanh.c
+- testsuites/psxtests/psxhdrs/complex/catanhf.c
+- testsuites/psxtests/psxhdrs/complex/catanhl.c
+- testsuites/psxtests/psxhdrs/complex/catanl.c
+- testsuites/psxtests/psxhdrs/complex/ccos.c
+- testsuites/psxtests/psxhdrs/complex/ccosf.c
+- testsuites/psxtests/psxhdrs/complex/ccosh.c
+- testsuites/psxtests/psxhdrs/complex/ccoshf.c
+- testsuites/psxtests/psxhdrs/complex/ccoshl.c
+- testsuites/psxtests/psxhdrs/complex/ccosl.c
+- testsuites/psxtests/psxhdrs/complex/cexp.c
+- testsuites/psxtests/psxhdrs/complex/cexpf.c
+- testsuites/psxtests/psxhdrs/complex/cexpl.c
+- testsuites/psxtests/psxhdrs/complex/cimag.c
+- testsuites/psxtests/psxhdrs/complex/cimagf.c
+- testsuites/psxtests/psxhdrs/complex/cimagl.c
+- testsuites/psxtests/psxhdrs/complex/clog.c
+- testsuites/psxtests/psxhdrs/complex/clogf.c
+- testsuites/psxtests/psxhdrs/complex/clogl.c
+- testsuites/psxtests/psxhdrs/complex/conj.c
+- testsuites/psxtests/psxhdrs/complex/conjf.c
+- testsuites/psxtests/psxhdrs/complex/conjl.c
+- testsuites/psxtests/psxhdrs/complex/cpow.c
+- testsuites/psxtests/psxhdrs/complex/cpowf.c
+- testsuites/psxtests/psxhdrs/complex/cpowl.c
+- testsuites/psxtests/psxhdrs/complex/cproj.c
+- testsuites/psxtests/psxhdrs/complex/cprojf.c
+- testsuites/psxtests/psxhdrs/complex/cprojl.c
+- testsuites/psxtests/psxhdrs/complex/creal.c
+- testsuites/psxtests/psxhdrs/complex/crealf.c
+- testsuites/psxtests/psxhdrs/complex/creall.c
+- testsuites/psxtests/psxhdrs/complex/csin.c
+- testsuites/psxtests/psxhdrs/complex/csinf.c
+- testsuites/psxtests/psxhdrs/complex/csinh.c
+- testsuites/psxtests/psxhdrs/complex/csinhf.c
+- testsuites/psxtests/psxhdrs/complex/csinhl.c
+- testsuites/psxtests/psxhdrs/complex/csinl.c
+- testsuites/psxtests/psxhdrs/complex/csqrt.c
+- testsuites/psxtests/psxhdrs/complex/csqrtf.c
+- testsuites/psxtests/psxhdrs/complex/csqrtl.c
+- testsuites/psxtests/psxhdrs/complex/ctan.c
+- testsuites/psxtests/psxhdrs/complex/ctanf.c
+- testsuites/psxtests/psxhdrs/complex/ctanh.c
+- testsuites/psxtests/psxhdrs/complex/ctanhf.c
+- testsuites/psxtests/psxhdrs/complex/ctanhl.c
+- testsuites/psxtests/psxhdrs/complex/ctanl.c
+- testsuites/psxtests/psxhdrs/ctype/isalnum.c
+- testsuites/psxtests/psxhdrs/ctype/isalnum_l.c
+- testsuites/psxtests/psxhdrs/ctype/isalpha.c
+- testsuites/psxtests/psxhdrs/ctype/isalpha_l.c
+- testsuites/psxtests/psxhdrs/ctype/isascii.c
+- testsuites/psxtests/psxhdrs/ctype/isblank.c
+- testsuites/psxtests/psxhdrs/ctype/isblank_l.c
+- testsuites/psxtests/psxhdrs/ctype/iscntrl.c
+- testsuites/psxtests/psxhdrs/ctype/iscntrl_l.c
+- testsuites/psxtests/psxhdrs/ctype/isdigit.c
+- testsuites/psxtests/psxhdrs/ctype/isdigit_l.c
+- testsuites/psxtests/psxhdrs/ctype/isgraph.c
+- testsuites/psxtests/psxhdrs/ctype/isgraph_l.c
+- testsuites/psxtests/psxhdrs/ctype/islower.c
+- testsuites/psxtests/psxhdrs/ctype/islower_l.c
+- testsuites/psxtests/psxhdrs/ctype/isprint.c
+- testsuites/psxtests/psxhdrs/ctype/isprint_l.c
+- testsuites/psxtests/psxhdrs/ctype/ispunct.c
+- testsuites/psxtests/psxhdrs/ctype/ispunct_l.c
+- testsuites/psxtests/psxhdrs/ctype/isspace.c
+- testsuites/psxtests/psxhdrs/ctype/isspace_l.c
+- testsuites/psxtests/psxhdrs/ctype/isupper.c
+- testsuites/psxtests/psxhdrs/ctype/isupper_l.c
+- testsuites/psxtests/psxhdrs/ctype/isxdigit.c
+- testsuites/psxtests/psxhdrs/ctype/isxdigit_l.c
+- testsuites/psxtests/psxhdrs/ctype/toascii.c
+- testsuites/psxtests/psxhdrs/ctype/tolower.c
+- testsuites/psxtests/psxhdrs/ctype/tolower_l.c
+- testsuites/psxtests/psxhdrs/ctype/toupper.c
+- testsuites/psxtests/psxhdrs/ctype/toupper_l.c
+- testsuites/psxtests/psxhdrs/wctype/iswalnum.c
+- testsuites/psxtests/psxhdrs/wctype/iswalnum_l.c
+- testsuites/psxtests/psxhdrs/wctype/iswalpha.c
+- testsuites/psxtests/psxhdrs/wctype/iswalpha_l.c
+- testsuites/psxtests/psxhdrs/wctype/iswblank.c
+- testsuites/psxtests/psxhdrs/wctype/iswblank_l.c
+- testsuites/psxtests/psxhdrs/wctype/iswcntrl.c
+- testsuites/psxtests/psxhdrs/wctype/iswcntrl_l.c
+- testsuites/psxtests/psxhdrs/wctype/iswctype.c
+- testsuites/psxtests/psxhdrs/wctype/iswctype_l.c
+- testsuites/psxtests/psxhdrs/wctype/iswdigit.c
+- testsuites/psxtests/psxhdrs/wctype/iswdigit_l.c
+- testsuites/psxtests/psxhdrs/wctype/iswgraph.c
+- testsuites/psxtests/psxhdrs/wctype/iswgraph_l.c
+- testsuites/psxtests/psxhdrs/wctype/iswlower.c
+- testsuites/psxtests/psxhdrs/wctype/iswlower_l.c
+- testsuites/psxtests/psxhdrs/wctype/iswprint.c
+- testsuites/psxtests/psxhdrs/wctype/iswprint_l.c
+- testsuites/psxtests/psxhdrs/wctype/iswpunct.c
+- testsuites/psxtests/psxhdrs/wctype/iswpunct_l.c
+- testsuites/psxtests/psxhdrs/wctype/iswspace.c
+- testsuites/psxtests/psxhdrs/wctype/iswspace_l.c
+- testsuites/psxtests/psxhdrs/wctype/iswupper.c
+- testsuites/psxtests/psxhdrs/wctype/iswupper_l.c
+- testsuites/psxtests/psxhdrs/wctype/iswxdigit.c
+- testsuites/psxtests/psxhdrs/wctype/iswxdigit_l.c
+- testsuites/psxtests/psxhdrs/wctype/towctrans.c
+- testsuites/psxtests/psxhdrs/wctype/towctrans_l.c
+- testsuites/psxtests/psxhdrs/wctype/towlower.c
+- testsuites/psxtests/psxhdrs/wctype/towlower_l.c
+- testsuites/psxtests/psxhdrs/wctype/wctrans.c
+- testsuites/psxtests/psxhdrs/wctype/wctrans_l.c
+- testsuites/psxtests/psxhdrs/wctype/wctype.c
+- testsuites/psxtests/psxhdrs/wctype/wctype_l.c
+- testsuites/psxtests/psxhdrs/inttypes/imaxabs.c
+- testsuites/psxtests/psxhdrs/inttypes/imaxdiv.c
+- testsuites/psxtests/psxhdrs/inttypes/strtoimax.c
+- testsuites/psxtests/psxhdrs/inttypes/strtoumax.c
+- testsuites/psxtests/psxhdrs/inttypes/wcstoimax.c
+- testsuites/psxtests/psxhdrs/inttypes/wcstoumax.c
+- testsuites/psxtests/psxhdrs/netdb/endhostent.c
+- testsuites/psxtests/psxhdrs/netdb/endnetent.c
+- testsuites/psxtests/psxhdrs/netdb/endprotoent.c
+- testsuites/psxtests/psxhdrs/netdb/endservent.c
+- testsuites/psxtests/psxhdrs/netdb/sethostent.c
+- testsuites/psxtests/psxhdrs/netdb/setnetent.c
+- testsuites/psxtests/psxhdrs/netdb/setservent.c
+- testsuites/psxtests/psxhdrs/netdb/gethostent.c
+- testsuites/psxtests/psxhdrs/netdb/getprotoent.c
+- testsuites/psxtests/psxhdrs/netdb/getnetent.c
+- testsuites/psxtests/psxhdrs/netdb/getservent.c
+- testsuites/psxtests/psxhdrs/netdb/freeaddrinfo.c
+- testsuites/psxtests/psxhdrs/netdb/gai_strerror.c
+- testsuites/psxtests/psxhdrs/netdb/getaddrinfo.c
+- testsuites/psxtests/psxhdrs/netdb/gethostbyaddr.c
+- testsuites/psxtests/psxhdrs/netdb/gethostbyname.c
+- testsuites/psxtests/psxhdrs/netdb/getnameinfo.c
+- testsuites/psxtests/psxhdrs/netdb/getnetbyname.c
+- testsuites/psxtests/psxhdrs/netdb/getprotobyname.c
+- testsuites/psxtests/psxhdrs/netdb/getprotobynumber.c
+- testsuites/psxtests/psxhdrs/netdb/getservbyname.c
+- testsuites/psxtests/psxhdrs/netdb/getservbyport.c
+- testsuites/psxtests/psxhdrs/netdb/h_errno.c
+- testsuites/psxtests/psxhdrs/net/if/if_freenameindex.c
+- testsuites/psxtests/psxhdrs/net/if/if_indextoname.c
+- testsuites/psxtests/psxhdrs/net/if/if_nameindex.c
+- testsuites/psxtests/psxhdrs/net/if/if_nametoindex.c
+- testsuites/psxtests/psxhdrs/arpa/inet/inet_addr.c
+- testsuites/psxtests/psxhdrs/arpa/inet/inet_ntop.c
+- testsuites/psxtests/psxhdrs/arpa/inet/inet_ntoa.c
+- testsuites/psxtests/psxhdrs/arpa/inet/inet_pton.c
+- testsuites/psxtests/psxhdrs/pwd/endpwent.c
+- testsuites/psxtests/psxhdrs/pwd/getpwent.c
+- testsuites/psxtests/psxhdrs/pwd/getpwnam.c
+- testsuites/psxtests/psxhdrs/pwd/getpwnam_r.c
+- testsuites/psxtests/psxhdrs/pwd/setpwent.c
+- testsuites/psxtests/psxhdrs/pwd/getpwuid.c
+- testsuites/psxtests/psxhdrs/pwd/getpwuid_r.c
+- testsuites/psxtests/psxhdrs/syslog/closelog.c
+- testsuites/psxtests/psxhdrs/syslog/openlog.c
+- testsuites/psxtests/psxhdrs/syslog/setlogmask.c
+- testsuites/psxtests/psxhdrs/syslog/syslog.c
+- testsuites/psxtests/psxhdrs/c11/threads/call_once.c
+- testsuites/psxtests/psxhdrs/c11/threads/cnd_broadcast.c
+- testsuites/psxtests/psxhdrs/c11/threads/cnd_destroy.c
+- testsuites/psxtests/psxhdrs/c11/threads/cnd_init.c
+- testsuites/psxtests/psxhdrs/c11/threads/cnd_signal.c
+- testsuites/psxtests/psxhdrs/c11/threads/cnd_timedwait.c
+- testsuites/psxtests/psxhdrs/c11/threads/cnd_wait.c
+- testsuites/psxtests/psxhdrs/c11/threads/mtx_init.c
+- testsuites/psxtests/psxhdrs/c11/threads/mtx_destroy.c
+- testsuites/psxtests/psxhdrs/c11/threads/mtx_lock.c
+- testsuites/psxtests/psxhdrs/c11/threads/mtx_timedlock.c
+- testsuites/psxtests/psxhdrs/c11/threads/mtx_trylock.c
+- testsuites/psxtests/psxhdrs/c11/threads/mtx_unlock.c
+- testsuites/psxtests/psxhdrs/c11/threads/thrd_create.c
+- testsuites/psxtests/psxhdrs/c11/threads/thrd_current.c
+- testsuites/psxtests/psxhdrs/c11/threads/thrd_detach.c
+- testsuites/psxtests/psxhdrs/c11/threads/thrd_equal.c
+- testsuites/psxtests/psxhdrs/c11/threads/thrd_exit.c
+- testsuites/psxtests/psxhdrs/c11/threads/thrd_join.c
+- testsuites/psxtests/psxhdrs/c11/threads/thrd_sleep.c
+- testsuites/psxtests/psxhdrs/c11/threads/thrd_yield.c
+- testsuites/psxtests/psxhdrs/c11/threads/tss_create.c
+- testsuites/psxtests/psxhdrs/c11/threads/tss_delete.c
+- testsuites/psxtests/psxhdrs/c11/threads/tss_get.c
+- testsuites/psxtests/psxhdrs/c11/threads/tss_set.c
+- testsuites/psxtests/psxhdrs/wchar/btowc.c
+- testsuites/psxtests/psxhdrs/wchar/fgetwc.c
+- testsuites/psxtests/psxhdrs/wchar/fgetws.c
+- testsuites/psxtests/psxhdrs/wchar/fputwc.c
+- testsuites/psxtests/psxhdrs/wchar/fputws.c
+- testsuites/psxtests/psxhdrs/wchar/fwide.c
+- testsuites/psxtests/psxhdrs/wchar/fwprintf.c
+- testsuites/psxtests/psxhdrs/wchar/fwscanf.c
+- testsuites/psxtests/psxhdrs/wchar/getwc.c
+- testsuites/psxtests/psxhdrs/wchar/getwchar.c
+- testsuites/psxtests/psxhdrs/wchar/iswalnum.c
+- testsuites/psxtests/psxhdrs/wchar/iswalpha.c
+- testsuites/psxtests/psxhdrs/wchar/iswcntrl.c
+- testsuites/psxtests/psxhdrs/wchar/iswctype.c
+- testsuites/psxtests/psxhdrs/wchar/iswdigit.c
+- testsuites/psxtests/psxhdrs/wchar/iswgraph.c
+- testsuites/psxtests/psxhdrs/wchar/iswlower.c
+- testsuites/psxtests/psxhdrs/wchar/iswprint.c
+- testsuites/psxtests/psxhdrs/wchar/iswpunct.c
+- testsuites/psxtests/psxhdrs/wchar/iswspace.c
+- testsuites/psxtests/psxhdrs/wchar/iswupper.c
+- testsuites/psxtests/psxhdrs/wchar/iswxdigit.c
+- testsuites/psxtests/psxhdrs/wchar/mbrlen.c
+- testsuites/psxtests/psxhdrs/wchar/mbrtowc.c
+- testsuites/psxtests/psxhdrs/wchar/mbsinit.c
+- testsuites/psxtests/psxhdrs/wchar/mbsnrtowcs.c
+- testsuites/psxtests/psxhdrs/wchar/mbsrtowcs.c
+- testsuites/psxtests/psxhdrs/wchar/open_wmemstream.c
+- testsuites/psxtests/psxhdrs/wchar/putwc.c
+- testsuites/psxtests/psxhdrs/wchar/putwchar.c
+- testsuites/psxtests/psxhdrs/wchar/swprintf.c
+- testsuites/psxtests/psxhdrs/wchar/swscanf.c
+- testsuites/psxtests/psxhdrs/wchar/towlower.c
+- testsuites/psxtests/psxhdrs/wchar/towupper.c
+- testsuites/psxtests/psxhdrs/wchar/ungetwc.c
+- testsuites/psxtests/psxhdrs/wchar/vfwprintf.c
+- testsuites/psxtests/psxhdrs/wchar/vfwscanf.c
+- testsuites/psxtests/psxhdrs/wchar/vswprintf.c
+- testsuites/psxtests/psxhdrs/wchar/vswscanf.c
+- testsuites/psxtests/psxhdrs/wchar/vwprintf.c
+- testsuites/psxtests/psxhdrs/wchar/vwscanf.c
+- testsuites/psxtests/psxhdrs/wchar/wcpcpy.c
+- testsuites/psxtests/psxhdrs/wchar/wcpncpy.c
+- testsuites/psxtests/psxhdrs/wchar/wcrtomb.c
+- testsuites/psxtests/psxhdrs/wchar/wcscasecmp.c
+- testsuites/psxtests/psxhdrs/wchar/wcscasecmp_l.c
+- testsuites/psxtests/psxhdrs/wchar/wcscat.c
+- testsuites/psxtests/psxhdrs/wchar/wcschr.c
+- testsuites/psxtests/psxhdrs/wchar/wcscmp.c
+- testsuites/psxtests/psxhdrs/wchar/wcscoll.c
+- testsuites/psxtests/psxhdrs/wchar/wcscoll_l.c
+- testsuites/psxtests/psxhdrs/wchar/wcscpy.c
+- testsuites/psxtests/psxhdrs/wchar/wcscspn.c
+- testsuites/psxtests/psxhdrs/wchar/wcsdup.c
+- testsuites/psxtests/psxhdrs/wchar/wcsnlen.c
+- testsuites/psxtests/psxhdrs/wchar/wcsnrtombs.c
+- testsuites/psxtests/psxhdrs/wchar/wcspbrk.c
+- testsuites/psxtests/psxhdrs/wchar/wcsrchr.c
+- testsuites/psxtests/psxhdrs/wchar/wcsrtombs.c
+- testsuites/psxtests/psxhdrs/wchar/wcsspn.c
+- testsuites/psxtests/psxhdrs/wchar/wcsstr.c
+- testsuites/psxtests/psxhdrs/wchar/wcstod.c
+- testsuites/psxtests/psxhdrs/wchar/wcstof.c
+- testsuites/psxtests/psxhdrs/wchar/wcstok.c
+- testsuites/psxtests/psxhdrs/wchar/wcstol.c
+- testsuites/psxtests/psxhdrs/wchar/wcstold.c
+- testsuites/psxtests/psxhdrs/wchar/wcstoll.c
+- testsuites/psxtests/psxhdrs/wchar/wcstoul.c
+- testsuites/psxtests/psxhdrs/wchar/wcstoull.c
+- testsuites/psxtests/psxhdrs/wchar/wcswidth.c
+- testsuites/psxtests/psxhdrs/wchar/wcsxfrm.c
+- testsuites/psxtests/psxhdrs/wchar/wcsxfrm_l.c
+- testsuites/psxtests/psxhdrs/wchar/wctob.c
+- testsuites/psxtests/psxhdrs/wchar/wctype.c
+- testsuites/psxtests/psxhdrs/wchar/wcwidth.c
+- testsuites/psxtests/psxhdrs/wchar/wmemchr.c
+- testsuites/psxtests/psxhdrs/wchar/wmemcmp.c
+- testsuites/psxtests/psxhdrs/wchar/wmemcpy.c
+- testsuites/psxtests/psxhdrs/wchar/wmemmove.c
+- testsuites/psxtests/psxhdrs/wchar/wmemset.c
+- testsuites/psxtests/psxhdrs/wchar/wprintf.c
+- testsuites/psxtests/psxhdrs/wchar/wscanf.c
+- testsuites/psxtests/psxhdrs/stdlib/_Exit.c
+- testsuites/psxtests/psxhdrs/stdlib/a64l.c
+- testsuites/psxtests/psxhdrs/stdlib/abort.c
+- testsuites/psxtests/psxhdrs/stdlib/abs.c
+- testsuites/psxtests/psxhdrs/stdlib/atexit.c
+- testsuites/psxtests/psxhdrs/stdlib/atof.c
+- testsuites/psxtests/psxhdrs/stdlib/atoi.c
+- testsuites/psxtests/psxhdrs/stdlib/atol.c
+- testsuites/psxtests/psxhdrs/stdlib/atoll.c
+- testsuites/psxtests/psxhdrs/stdlib/bsearch.c
+- testsuites/psxtests/psxhdrs/stdlib/calloc.c
+- testsuites/psxtests/psxhdrs/stdlib/div.c
+- testsuites/psxtests/psxhdrs/stdlib/drand48.c
+- testsuites/psxtests/psxhdrs/stdlib/erand48.c
+- testsuites/psxtests/psxhdrs/stdlib/exit.c
+- testsuites/psxtests/psxhdrs/stdlib/free.c
+- testsuites/psxtests/psxhdrs/stdlib/getenv.c
+- testsuites/psxtests/psxhdrs/stdlib/initstate.c
+- testsuites/psxtests/psxhdrs/stdlib/jrand48.c
+- testsuites/psxtests/psxhdrs/stdlib/l64a.c
+- testsuites/psxtests/psxhdrs/stdlib/labs.c
+- testsuites/psxtests/psxhdrs/stdlib/lcong48.c
+- testsuites/psxtests/psxhdrs/stdlib/ldiv.c
+- testsuites/psxtests/psxhdrs/stdlib/llabs.c
+- testsuites/psxtests/psxhdrs/stdlib/lldiv.c
+- testsuites/psxtests/psxhdrs/stdlib/lrand48.c
+- testsuites/psxtests/psxhdrs/stdlib/malloc.c
+- testsuites/psxtests/psxhdrs/stdlib/mblen.c
+- testsuites/psxtests/psxhdrs/stdlib/mbstowcs.c
+- testsuites/psxtests/psxhdrs/stdlib/mbtowc.c
+- testsuites/psxtests/psxhdrs/stdlib/mkdtemp.c
+- testsuites/psxtests/psxhdrs/stdlib/mkstemp.c
+- testsuites/psxtests/psxhdrs/stdlib/mrand48.c
+- testsuites/psxtests/psxhdrs/stdlib/nrand48.c
+- testsuites/psxtests/psxhdrs/stdlib/posix_memalign.c
+- testsuites/psxtests/psxhdrs/stdlib/putenv.c
+- testsuites/psxtests/psxhdrs/stdlib/qsort.c
+- testsuites/psxtests/psxhdrs/stdlib/rand.c
+- testsuites/psxtests/psxhdrs/stdlib/rand_r.c
+- testsuites/psxtests/psxhdrs/stdlib/random.c
+- testsuites/psxtests/psxhdrs/stdlib/realloc.c
+- testsuites/psxtests/psxhdrs/stdlib/realpath.c
+- testsuites/psxtests/psxhdrs/stdlib/seed48.c
+- testsuites/psxtests/psxhdrs/stdlib/setenv.c
+- testsuites/psxtests/psxhdrs/stdlib/setkey.c
+- testsuites/psxtests/psxhdrs/stdlib/setstate.c
+- testsuites/psxtests/psxhdrs/stdlib/srand.c
+- testsuites/psxtests/psxhdrs/stdlib/srand48.c
+- testsuites/psxtests/psxhdrs/stdlib/srandom.c
+- testsuites/psxtests/psxhdrs/stdlib/strtod.c
+- testsuites/psxtests/psxhdrs/stdlib/strtof.c
+- testsuites/psxtests/psxhdrs/stdlib/strtol.c
+- testsuites/psxtests/psxhdrs/stdlib/strtold.c
+- testsuites/psxtests/psxhdrs/stdlib/strtoll.c
+- testsuites/psxtests/psxhdrs/stdlib/strtoul.c
+- testsuites/psxtests/psxhdrs/stdlib/strtoull.c
+- testsuites/psxtests/psxhdrs/stdlib/system.c
+- testsuites/psxtests/psxhdrs/stdlib/unsetenv.c
+- testsuites/psxtests/psxhdrs/stdlib/wcstombs.c
+- testsuites/psxtests/psxhdrs/stdlib/wctomb.c
+- testsuites/psxtests/psxhdrs/sys/times/times.c
+- testsuites/psxtests/psxhdrs/sys/resource/getrusage.c
+- testsuites/psxtests/psxhdrs/setjmp/longjmp.c
+- testsuites/psxtests/psxhdrs/setjmp/setjmp.c
+- testsuites/psxtests/psxhdrs/setjmp/siglongjmp.c
+- testsuites/psxtests/psxhdrs/setjmp/sigsetjmp.c
+- testsuites/psxtests/psxhdrs/sys/select/FD_CLR.c
+- testsuites/psxtests/psxhdrs/sys/select/FD_ISSET.c
+- testsuites/psxtests/psxhdrs/sys/select/FD_SET.c
+- testsuites/psxtests/psxhdrs/sys/select/FD_ZERO.c
+- testsuites/psxtests/psxhdrs/sys/select/pselect.c
+- testsuites/psxtests/psxhdrs/sys/select/select.c
+- testsuites/psxtests/psxhdrs/termios/cfgetispeed.c
+- testsuites/psxtests/psxhdrs/termios/cfgetospeed.c
+- testsuites/psxtests/psxhdrs/termios/cfsetispeed.c
+- testsuites/psxtests/psxhdrs/termios/cfsetospeed.c
+- testsuites/psxtests/psxhdrs/termios/tcdrain.c
+- testsuites/psxtests/psxhdrs/termios/tcflow.c
+- testsuites/psxtests/psxhdrs/termios/tcflush.c
+- testsuites/psxtests/psxhdrs/termios/tcgetattr.c
+- testsuites/psxtests/psxhdrs/termios/tcgetsid.c
+- testsuites/psxtests/psxhdrs/termios/tcsendbreak.c
+- testsuites/psxtests/psxhdrs/termios/tcsetattr.c
+target: psxhdrs
+type: build
diff --git a/spec/build/testsuites/psxtests/psx01.yml b/spec/build/testsuites/psxtests/psx01.yml
new file mode 100644
index 0000000000..b2374c1686
--- /dev/null
+++ b/spec/build/testsuites/psxtests/psx01.yml
@@ -0,0 +1,20 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by: true
+features: c cprogram
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/psxtests/psx01/init.c
+- testsuites/psxtests/psx01/task.c
+stlib: []
+target: testsuites/psxtests/psx01.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/psxtests/psx02.yml b/spec/build/testsuites/psxtests/psx02.yml
new file mode 100644
index 0000000000..2b8c69dff3
--- /dev/null
+++ b/spec/build/testsuites/psxtests/psx02.yml
@@ -0,0 +1,21 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by:
+- RTEMS_POSIX_API
+features: c cprogram
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/psxtests/psx02/init.c
+- testsuites/psxtests/psx02/task.c
+stlib: []
+target: testsuites/psxtests/psx02.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/psxtests/psx03.yml b/spec/build/testsuites/psxtests/psx03.yml
new file mode 100644
index 0000000000..d09b5d7fff
--- /dev/null
+++ b/spec/build/testsuites/psxtests/psx03.yml
@@ -0,0 +1,21 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by:
+- RTEMS_POSIX_API
+features: c cprogram
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/psxtests/psx03/init.c
+- testsuites/psxtests/psx03/task.c
+stlib: []
+target: testsuites/psxtests/psx03.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/psxtests/psx04.yml b/spec/build/testsuites/psxtests/psx04.yml
new file mode 100644
index 0000000000..7bba91fc1d
--- /dev/null
+++ b/spec/build/testsuites/psxtests/psx04.yml
@@ -0,0 +1,23 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by:
+- RTEMS_POSIX_API
+features: c cprogram
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/psxtests/psx04/init.c
+- testsuites/psxtests/psx04/task1.c
+- testsuites/psxtests/psx04/task2.c
+- testsuites/psxtests/psx04/task3.c
+stlib: []
+target: testsuites/psxtests/psx04.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/psxtests/psx05.yml b/spec/build/testsuites/psxtests/psx05.yml
new file mode 100644
index 0000000000..62ad43c440
--- /dev/null
+++ b/spec/build/testsuites/psxtests/psx05.yml
@@ -0,0 +1,22 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by: true
+features: c cprogram
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/psxtests/psx05/init.c
+- testsuites/psxtests/psx05/task.c
+- testsuites/psxtests/psx05/task2.c
+- testsuites/psxtests/psx05/task3.c
+stlib: []
+target: testsuites/psxtests/psx05.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/psxtests/psx06.yml b/spec/build/testsuites/psxtests/psx06.yml
new file mode 100644
index 0000000000..a2b7374240
--- /dev/null
+++ b/spec/build/testsuites/psxtests/psx06.yml
@@ -0,0 +1,21 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by: true
+features: c cprogram
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/psxtests/psx06/init.c
+- testsuites/psxtests/psx06/task.c
+- testsuites/psxtests/psx06/task2.c
+stlib: []
+target: testsuites/psxtests/psx06.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/psxtests/psx07.yml b/spec/build/testsuites/psxtests/psx07.yml
new file mode 100644
index 0000000000..f1fe7a7b3a
--- /dev/null
+++ b/spec/build/testsuites/psxtests/psx07.yml
@@ -0,0 +1,20 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by: true
+features: c cprogram
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/psxtests/psx07/init.c
+- testsuites/psxtests/psx07/task.c
+stlib: []
+target: testsuites/psxtests/psx07.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/psxtests/psx08.yml b/spec/build/testsuites/psxtests/psx08.yml
new file mode 100644
index 0000000000..c9801874f0
--- /dev/null
+++ b/spec/build/testsuites/psxtests/psx08.yml
@@ -0,0 +1,22 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by: true
+features: c cprogram
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/psxtests/psx08/init.c
+- testsuites/psxtests/psx08/task1.c
+- testsuites/psxtests/psx08/task2.c
+- testsuites/psxtests/psx08/task3.c
+stlib: []
+target: testsuites/psxtests/psx08.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/psxtests/psx09.yml b/spec/build/testsuites/psxtests/psx09.yml
new file mode 100644
index 0000000000..902fee641c
--- /dev/null
+++ b/spec/build/testsuites/psxtests/psx09.yml
@@ -0,0 +1,20 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by:
+- RTEMS_POSIX_API
+features: c cprogram
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/psxtests/psx09/init.c
+stlib: []
+target: testsuites/psxtests/psx09.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/psxtests/psx10.yml b/spec/build/testsuites/psxtests/psx10.yml
new file mode 100644
index 0000000000..504fc866e3
--- /dev/null
+++ b/spec/build/testsuites/psxtests/psx10.yml
@@ -0,0 +1,22 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by: true
+features: c cprogram
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/psxtests/psx10/init.c
+- testsuites/psxtests/psx10/task.c
+- testsuites/psxtests/psx10/task2.c
+- testsuites/psxtests/psx10/task3.c
+stlib: []
+target: testsuites/psxtests/psx10.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/psxtests/psx11.yml b/spec/build/testsuites/psxtests/psx11.yml
new file mode 100644
index 0000000000..726f415acd
--- /dev/null
+++ b/spec/build/testsuites/psxtests/psx11.yml
@@ -0,0 +1,20 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by: true
+features: c cprogram
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/psxtests/psx11/init.c
+- testsuites/psxtests/psx11/task.c
+stlib: []
+target: testsuites/psxtests/psx11.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/psxtests/psx12.yml b/spec/build/testsuites/psxtests/psx12.yml
new file mode 100644
index 0000000000..fff2c19968
--- /dev/null
+++ b/spec/build/testsuites/psxtests/psx12.yml
@@ -0,0 +1,20 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by:
+- RTEMS_POSIX_API
+features: c cprogram
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/psxtests/psx12/init.c
+stlib: []
+target: testsuites/psxtests/psx12.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/psxtests/psx13.yml b/spec/build/testsuites/psxtests/psx13.yml
new file mode 100644
index 0000000000..19f99593e0
--- /dev/null
+++ b/spec/build/testsuites/psxtests/psx13.yml
@@ -0,0 +1,20 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by: true
+features: c cprogram
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/psxtests/psx13/main.c
+- testsuites/psxtests/psx13/test.c
+stlib: []
+target: testsuites/psxtests/psx13.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/psxtests/psx14.yml b/spec/build/testsuites/psxtests/psx14.yml
new file mode 100644
index 0000000000..c8dbc07006
--- /dev/null
+++ b/spec/build/testsuites/psxtests/psx14.yml
@@ -0,0 +1,19 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by: true
+features: c cprogram
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/psxtests/psx14/init.c
+stlib: []
+target: testsuites/psxtests/psx14.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/psxtests/psx15.yml b/spec/build/testsuites/psxtests/psx15.yml
new file mode 100644
index 0000000000..daf6070dd8
--- /dev/null
+++ b/spec/build/testsuites/psxtests/psx15.yml
@@ -0,0 +1,19 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by: true
+features: c cprogram
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/psxtests/psx15/init.c
+stlib: []
+target: testsuites/psxtests/psx15.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/psxtests/psx16.yml b/spec/build/testsuites/psxtests/psx16.yml
new file mode 100644
index 0000000000..e63c7d28e2
--- /dev/null
+++ b/spec/build/testsuites/psxtests/psx16.yml
@@ -0,0 +1,19 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by: true
+features: c cprogram
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/psxtests/psx16/init.c
+stlib: []
+target: testsuites/psxtests/psx16.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/psxtests/psxaio01.yml b/spec/build/testsuites/psxtests/psxaio01.yml
new file mode 100644
index 0000000000..07bc451574
--- /dev/null
+++ b/spec/build/testsuites/psxtests/psxaio01.yml
@@ -0,0 +1,20 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by:
+- RTEMS_POSIX_API
+features: c cprogram
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/psxtests/psxaio01/init.c
+stlib: []
+target: testsuites/psxtests/psxaio01.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/psxtests/psxaio02.yml b/spec/build/testsuites/psxtests/psxaio02.yml
new file mode 100644
index 0000000000..9621cb1066
--- /dev/null
+++ b/spec/build/testsuites/psxtests/psxaio02.yml
@@ -0,0 +1,20 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by:
+- RTEMS_POSIX_API
+features: c cprogram
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/psxtests/psxaio02/init.c
+stlib: []
+target: testsuites/psxtests/psxaio02.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/psxtests/psxaio03.yml b/spec/build/testsuites/psxtests/psxaio03.yml
new file mode 100644
index 0000000000..77a3e13cbf
--- /dev/null
+++ b/spec/build/testsuites/psxtests/psxaio03.yml
@@ -0,0 +1,20 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by:
+- RTEMS_POSIX_API
+features: c cprogram
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/psxtests/psxaio03/init.c
+stlib: []
+target: testsuites/psxtests/psxaio03.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/psxtests/psxalarm01.yml b/spec/build/testsuites/psxtests/psxalarm01.yml
new file mode 100644
index 0000000000..0cc5509d2d
--- /dev/null
+++ b/spec/build/testsuites/psxtests/psxalarm01.yml
@@ -0,0 +1,20 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by:
+- RTEMS_POSIX_API
+features: c cprogram
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/psxtests/psxalarm01/init.c
+stlib: []
+target: testsuites/psxtests/psxalarm01.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/psxtests/psxautoinit01.yml b/spec/build/testsuites/psxtests/psxautoinit01.yml
new file mode 100644
index 0000000000..6eb7e43271
--- /dev/null
+++ b/spec/build/testsuites/psxtests/psxautoinit01.yml
@@ -0,0 +1,19 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by: true
+features: c cprogram
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/psxtests/psxautoinit01/init.c
+stlib: []
+target: testsuites/psxtests/psxautoinit01.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/psxtests/psxautoinit02.yml b/spec/build/testsuites/psxtests/psxautoinit02.yml
new file mode 100644
index 0000000000..79b624402a
--- /dev/null
+++ b/spec/build/testsuites/psxtests/psxautoinit02.yml
@@ -0,0 +1,19 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by: true
+features: c cprogram
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/psxtests/psxautoinit02/init.c
+stlib: []
+target: testsuites/psxtests/psxautoinit02.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/psxtests/psxbarrier01.yml b/spec/build/testsuites/psxtests/psxbarrier01.yml
new file mode 100644
index 0000000000..90b474379d
--- /dev/null
+++ b/spec/build/testsuites/psxtests/psxbarrier01.yml
@@ -0,0 +1,20 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by: true
+features: c cprogram
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/psxtests/psxbarrier01/main.c
+- testsuites/psxtests/psxbarrier01/test.c
+stlib: []
+target: testsuites/psxtests/psxbarrier01.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/psxtests/psxcancel.yml b/spec/build/testsuites/psxtests/psxcancel.yml
new file mode 100644
index 0000000000..2d0e9ff7ad
--- /dev/null
+++ b/spec/build/testsuites/psxtests/psxcancel.yml
@@ -0,0 +1,19 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by: true
+features: c cprogram
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/psxtests/psxcancel/init.c
+stlib: []
+target: testsuites/psxtests/psxcancel.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/psxtests/psxcancel01.yml b/spec/build/testsuites/psxtests/psxcancel01.yml
new file mode 100644
index 0000000000..7e3493ca23
--- /dev/null
+++ b/spec/build/testsuites/psxtests/psxcancel01.yml
@@ -0,0 +1,19 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by: true
+features: c cprogram
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/psxtests/psxcancel01/init.c
+stlib: []
+target: testsuites/psxtests/psxcancel01.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/psxtests/psxchroot01.yml b/spec/build/testsuites/psxtests/psxchroot01.yml
new file mode 100644
index 0000000000..614db58123
--- /dev/null
+++ b/spec/build/testsuites/psxtests/psxchroot01.yml
@@ -0,0 +1,20 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by: true
+features: c cprogram
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/psxtests/psxchroot01/main.c
+- testsuites/psxtests/psxchroot01/test.c
+stlib: []
+target: testsuites/psxtests/psxchroot01.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/psxtests/psxclassic01.yml b/spec/build/testsuites/psxtests/psxclassic01.yml
new file mode 100644
index 0000000000..cbba49f68f
--- /dev/null
+++ b/spec/build/testsuites/psxtests/psxclassic01.yml
@@ -0,0 +1,20 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by:
+- RTEMS_POSIX_API
+features: c cprogram
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/psxtests/psxclassic01/init.c
+stlib: []
+target: testsuites/psxtests/psxclassic01.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/psxtests/psxcleanup.yml b/spec/build/testsuites/psxtests/psxcleanup.yml
new file mode 100644
index 0000000000..6dbf100f4c
--- /dev/null
+++ b/spec/build/testsuites/psxtests/psxcleanup.yml
@@ -0,0 +1,19 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by: true
+features: c cprogram
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/psxtests/psxcleanup/psxcleanup.c
+stlib: []
+target: testsuites/psxtests/psxcleanup.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/psxtests/psxcleanup01.yml b/spec/build/testsuites/psxtests/psxcleanup01.yml
new file mode 100644
index 0000000000..f29320b4d0
--- /dev/null
+++ b/spec/build/testsuites/psxtests/psxcleanup01.yml
@@ -0,0 +1,19 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by: true
+features: c cprogram
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/psxtests/psxcleanup01/init.c
+stlib: []
+target: testsuites/psxtests/psxcleanup01.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/psxtests/psxcleanup02.yml b/spec/build/testsuites/psxtests/psxcleanup02.yml
new file mode 100644
index 0000000000..49640c330b
--- /dev/null
+++ b/spec/build/testsuites/psxtests/psxcleanup02.yml
@@ -0,0 +1,20 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by: true
+features: c cprogram
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/psxtests/psxcleanup02/init.c
+- testsuites/psxtests/psxcleanup02/main.c
+stlib: []
+target: testsuites/psxtests/psxcleanup02.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/psxtests/psxclock.yml b/spec/build/testsuites/psxtests/psxclock.yml
new file mode 100644
index 0000000000..1902e8eef2
--- /dev/null
+++ b/spec/build/testsuites/psxtests/psxclock.yml
@@ -0,0 +1,19 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by: true
+features: c cprogram
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/psxtests/psxclock/init.c
+stlib: []
+target: testsuites/psxtests/psxclock.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/psxtests/psxclock01.yml b/spec/build/testsuites/psxtests/psxclock01.yml
new file mode 100644
index 0000000000..fadcd1ec91
--- /dev/null
+++ b/spec/build/testsuites/psxtests/psxclock01.yml
@@ -0,0 +1,19 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by: true
+features: c cprogram
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/psxtests/psxclock01/init.c
+stlib: []
+target: testsuites/psxtests/psxclock01.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/psxtests/psxclockrealtime01.yml b/spec/build/testsuites/psxtests/psxclockrealtime01.yml
new file mode 100644
index 0000000000..f67b2cf3af
--- /dev/null
+++ b/spec/build/testsuites/psxtests/psxclockrealtime01.yml
@@ -0,0 +1,19 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by: true
+features: c cprogram
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/psxtests/psxclockrealtime01/init.c
+stlib: []
+target: testsuites/psxtests/psxclockrealtime01.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/psxtests/psxconcurrency01.yml b/spec/build/testsuites/psxtests/psxconcurrency01.yml
new file mode 100644
index 0000000000..eb6667203c
--- /dev/null
+++ b/spec/build/testsuites/psxtests/psxconcurrency01.yml
@@ -0,0 +1,19 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by: true
+features: c cprogram
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/psxtests/psxconcurrency01/init.c
+stlib: []
+target: testsuites/psxtests/psxconcurrency01.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/psxtests/psxcond01.yml b/spec/build/testsuites/psxtests/psxcond01.yml
new file mode 100644
index 0000000000..b7fe58ac5e
--- /dev/null
+++ b/spec/build/testsuites/psxtests/psxcond01.yml
@@ -0,0 +1,19 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by: true
+features: c cprogram
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/psxtests/psxcond01/init.c
+stlib: []
+target: testsuites/psxtests/psxcond01.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/psxtests/psxcond02.yml b/spec/build/testsuites/psxtests/psxcond02.yml
new file mode 100644
index 0000000000..abefe9cc1d
--- /dev/null
+++ b/spec/build/testsuites/psxtests/psxcond02.yml
@@ -0,0 +1,19 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by: true
+features: c cprogram
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/psxtests/psxcond02/init.c
+stlib: []
+target: testsuites/psxtests/psxcond02.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/psxtests/psxconfig01.yml b/spec/build/testsuites/psxtests/psxconfig01.yml
new file mode 100644
index 0000000000..17fa328c20
--- /dev/null
+++ b/spec/build/testsuites/psxtests/psxconfig01.yml
@@ -0,0 +1,19 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by: true
+features: c cprogram
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/psxtests/psxconfig01/init.c
+stlib: []
+target: testsuites/psxtests/psxconfig01.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/psxtests/psxdevctl01.yml b/spec/build/testsuites/psxtests/psxdevctl01.yml
new file mode 100644
index 0000000000..b0e75d2c06
--- /dev/null
+++ b/spec/build/testsuites/psxtests/psxdevctl01.yml
@@ -0,0 +1,20 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by: true
+features: c cprogram
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/psxtests/psxdevctl01/main.c
+- testsuites/psxtests/psxdevctl01/test.c
+stlib: []
+target: testsuites/psxtests/psxdevctl01.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/psxtests/psxeintrjoin.yml b/spec/build/testsuites/psxtests/psxeintrjoin.yml
new file mode 100644
index 0000000000..c6236f8b0a
--- /dev/null
+++ b/spec/build/testsuites/psxtests/psxeintrjoin.yml
@@ -0,0 +1,20 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by:
+- RTEMS_POSIX_API
+features: c cprogram
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/psxtests/psxeintr_join/init.c
+stlib: []
+target: testsuites/psxtests/psxeintr_join.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/psxtests/psxenosys.yml b/spec/build/testsuites/psxtests/psxenosys.yml
new file mode 100644
index 0000000000..781b1d29d5
--- /dev/null
+++ b/spec/build/testsuites/psxtests/psxenosys.yml
@@ -0,0 +1,19 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by: true
+features: c cprogram
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/psxtests/psxenosys/init.c
+stlib: []
+target: testsuites/psxtests/psxenosys.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/psxtests/psxfatal01.yml b/spec/build/testsuites/psxtests/psxfatal01.yml
new file mode 100644
index 0000000000..7f0fc1f913
--- /dev/null
+++ b/spec/build/testsuites/psxtests/psxfatal01.yml
@@ -0,0 +1,19 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by: true
+features: c cprogram
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/psxtests/psxfatal01/init.c
+stlib: []
+target: testsuites/psxtests/psxfatal01.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/psxtests/psxfatal02.yml b/spec/build/testsuites/psxtests/psxfatal02.yml
new file mode 100644
index 0000000000..202927df49
--- /dev/null
+++ b/spec/build/testsuites/psxtests/psxfatal02.yml
@@ -0,0 +1,19 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by: true
+features: c cprogram
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/psxtests/psxfatal02/init.c
+stlib: []
+target: testsuites/psxtests/psxfatal02.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/psxtests/psxfatalsupport.yml b/spec/build/testsuites/psxtests/psxfatalsupport.yml
new file mode 100644
index 0000000000..4b1ef109c3
--- /dev/null
+++ b/spec/build/testsuites/psxtests/psxfatalsupport.yml
@@ -0,0 +1,19 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by: true
+features: c cprogram
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/psxtests/psxfatal_support/init.c
+stlib: []
+target: testsuites/psxtests/psxfatal_support.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/psxtests/psxfchx01.yml b/spec/build/testsuites/psxtests/psxfchx01.yml
new file mode 100644
index 0000000000..50123bdb2a
--- /dev/null
+++ b/spec/build/testsuites/psxtests/psxfchx01.yml
@@ -0,0 +1,19 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by: true
+features: c cprogram
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/psxtests/psxfchx01/init.c
+stlib: []
+target: testsuites/psxtests/psxfchx01.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/psxtests/psxfenv01.yml b/spec/build/testsuites/psxtests/psxfenv01.yml
new file mode 100644
index 0000000000..c61bc34b58
--- /dev/null
+++ b/spec/build/testsuites/psxtests/psxfenv01.yml
@@ -0,0 +1,20 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by: true
+features: c cprogram
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/psxtests/psxfenv01/init.c
+stlib:
+- m
+target: testsuites/psxtests/psxfenv01.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/psxtests/psxfile01.yml b/spec/build/testsuites/psxtests/psxfile01.yml
new file mode 100644
index 0000000000..12b6e8f7a2
--- /dev/null
+++ b/spec/build/testsuites/psxtests/psxfile01.yml
@@ -0,0 +1,23 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by: true
+features: c cprogram
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/psxtests/psxfile01/main.c
+- testsuites/psxtests/psxfile01/test.c
+- testsuites/psxtests/psxfile01/test_cat.c
+- testsuites/psxtests/psxfile01/test_extend.c
+- testsuites/psxtests/psxfile01/test_write.c
+stlib: []
+target: testsuites/psxtests/psxfile01.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/psxtests/psxfile02.yml b/spec/build/testsuites/psxtests/psxfile02.yml
new file mode 100644
index 0000000000..c9c36ec9e1
--- /dev/null
+++ b/spec/build/testsuites/psxtests/psxfile02.yml
@@ -0,0 +1,20 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by: true
+features: c cprogram
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/psxtests/psxfile02/init.c
+- testsuites/support/src/spin.c
+stlib: []
+target: testsuites/psxtests/psxfile02.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/psxtests/psxfilelock01.yml b/spec/build/testsuites/psxtests/psxfilelock01.yml
new file mode 100644
index 0000000000..fc3e717f5e
--- /dev/null
+++ b/spec/build/testsuites/psxtests/psxfilelock01.yml
@@ -0,0 +1,19 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by: true
+features: c cprogram
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/psxtests/psxfilelock01/init.c
+stlib: []
+target: testsuites/psxtests/psxfilelock01.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/psxtests/psxgetattrnp01.yml b/spec/build/testsuites/psxtests/psxgetattrnp01.yml
new file mode 100644
index 0000000000..a106c31dbc
--- /dev/null
+++ b/spec/build/testsuites/psxtests/psxgetattrnp01.yml
@@ -0,0 +1,19 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by: true
+features: c cprogram
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/psxtests/psxgetattrnp01/init.c
+stlib: []
+target: testsuites/psxtests/psxgetattrnp01.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/psxtests/psxgetrusage01.yml b/spec/build/testsuites/psxtests/psxgetrusage01.yml
new file mode 100644
index 0000000000..3e2064dce2
--- /dev/null
+++ b/spec/build/testsuites/psxtests/psxgetrusage01.yml
@@ -0,0 +1,20 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by: true
+features: c cprogram
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/psxtests/psxgetrusage01/init.c
+- testsuites/support/src/spin.c
+stlib: []
+target: testsuites/psxtests/psxgetrusage01.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/psxtests/psxglobalcon01.yml b/spec/build/testsuites/psxtests/psxglobalcon01.yml
new file mode 100644
index 0000000000..dfad95acfd
--- /dev/null
+++ b/spec/build/testsuites/psxtests/psxglobalcon01.yml
@@ -0,0 +1,19 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by: true
+features: cxx cxxprogram
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/psxtests/psxglobalcon01/init.cc
+stlib: []
+target: testsuites/psxtests/psxglobalcon01.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/psxtests/psxglobalcon02.yml b/spec/build/testsuites/psxtests/psxglobalcon02.yml
new file mode 100644
index 0000000000..ef592d284f
--- /dev/null
+++ b/spec/build/testsuites/psxtests/psxglobalcon02.yml
@@ -0,0 +1,19 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by: true
+features: cxx cxxprogram
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/psxtests/psxglobalcon02/init.cc
+stlib: []
+target: testsuites/psxtests/psxglobalcon02.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/psxtests/psxhdrs.yml b/spec/build/testsuites/psxtests/psxhdrs.yml
new file mode 100644
index 0000000000..e8cbc31f7d
--- /dev/null
+++ b/spec/build/testsuites/psxtests/psxhdrs.yml
@@ -0,0 +1,18 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by: true
+features: c cprogram
+includes: []
+ldflags: []
+links: []
+source: []
+stlib: []
+target: testsuites/psxtests/psxhdrs.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/psxtests/psxid01.yml b/spec/build/testsuites/psxtests/psxid01.yml
new file mode 100644
index 0000000000..3e63341bda
--- /dev/null
+++ b/spec/build/testsuites/psxtests/psxid01.yml
@@ -0,0 +1,19 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by: true
+features: c cprogram
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/psxtests/psxid01/init.c
+stlib: []
+target: testsuites/psxtests/psxid01.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/psxtests/psximfs01.yml b/spec/build/testsuites/psxtests/psximfs01.yml
new file mode 100644
index 0000000000..a9c9cf490c
--- /dev/null
+++ b/spec/build/testsuites/psxtests/psximfs01.yml
@@ -0,0 +1,19 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by: true
+features: c cprogram
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/psxtests/psximfs01/init.c
+stlib: []
+target: testsuites/psxtests/psximfs01.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/psxtests/psximfs02.yml b/spec/build/testsuites/psxtests/psximfs02.yml
new file mode 100644
index 0000000000..d16e5bd61a
--- /dev/null
+++ b/spec/build/testsuites/psxtests/psximfs02.yml
@@ -0,0 +1,19 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by: true
+features: c cprogram
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/psxtests/psximfs02/init.c
+stlib: []
+target: testsuites/psxtests/psximfs02.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/psxtests/psxintrcritical01.yml b/spec/build/testsuites/psxtests/psxintrcritical01.yml
new file mode 100644
index 0000000000..b0f02f1646
--- /dev/null
+++ b/spec/build/testsuites/psxtests/psxintrcritical01.yml
@@ -0,0 +1,20 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by:
+- RTEMS_POSIX_API
+features: c cprogram
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/psxtests/psxintrcritical01/init.c
+stlib: []
+target: testsuites/psxtests/psxintrcritical01.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/psxtests/psxinttypes01.yml b/spec/build/testsuites/psxtests/psxinttypes01.yml
new file mode 100644
index 0000000000..d2aaeb66f6
--- /dev/null
+++ b/spec/build/testsuites/psxtests/psxinttypes01.yml
@@ -0,0 +1,19 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by: true
+features: c cprogram
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/psxtests/psxinttypes01/init.c
+stlib: []
+target: testsuites/psxtests/psxinttypes01.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/psxtests/psxitimer.yml b/spec/build/testsuites/psxtests/psxitimer.yml
new file mode 100644
index 0000000000..b5cb8461c2
--- /dev/null
+++ b/spec/build/testsuites/psxtests/psxitimer.yml
@@ -0,0 +1,20 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by:
+- RTEMS_POSIX_API
+features: c cprogram
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/psxtests/psxitimer/init.c
+stlib: []
+target: testsuites/psxtests/psxitimer.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/psxtests/psxkey01.yml b/spec/build/testsuites/psxtests/psxkey01.yml
new file mode 100644
index 0000000000..07608381bb
--- /dev/null
+++ b/spec/build/testsuites/psxtests/psxkey01.yml
@@ -0,0 +1,20 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by: true
+features: c cprogram
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/psxtests/psxkey01/init.c
+- testsuites/support/src/test_support.c
+stlib: []
+target: testsuites/psxtests/psxkey01.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/psxtests/psxkey02.yml b/spec/build/testsuites/psxtests/psxkey02.yml
new file mode 100644
index 0000000000..8eb148ba16
--- /dev/null
+++ b/spec/build/testsuites/psxtests/psxkey02.yml
@@ -0,0 +1,19 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by: true
+features: c cprogram
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/psxtests/psxkey02/init.c
+stlib: []
+target: testsuites/psxtests/psxkey02.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/psxtests/psxkey03.yml b/spec/build/testsuites/psxtests/psxkey03.yml
new file mode 100644
index 0000000000..b4a622fdc2
--- /dev/null
+++ b/spec/build/testsuites/psxtests/psxkey03.yml
@@ -0,0 +1,19 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by: true
+features: c cprogram
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/psxtests/psxkey03/init.c
+stlib: []
+target: testsuites/psxtests/psxkey03.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/psxtests/psxkey04.yml b/spec/build/testsuites/psxtests/psxkey04.yml
new file mode 100644
index 0000000000..4d27d90c78
--- /dev/null
+++ b/spec/build/testsuites/psxtests/psxkey04.yml
@@ -0,0 +1,19 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by: true
+features: c cprogram
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/psxtests/psxkey04/init.c
+stlib: []
+target: testsuites/psxtests/psxkey04.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/psxtests/psxkey05.yml b/spec/build/testsuites/psxtests/psxkey05.yml
new file mode 100644
index 0000000000..c526fb57cf
--- /dev/null
+++ b/spec/build/testsuites/psxtests/psxkey05.yml
@@ -0,0 +1,19 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by: true
+features: c cprogram
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/psxtests/psxkey05/init.c
+stlib: []
+target: testsuites/psxtests/psxkey05.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/psxtests/psxkey06.yml b/spec/build/testsuites/psxtests/psxkey06.yml
new file mode 100644
index 0000000000..6e5716e455
--- /dev/null
+++ b/spec/build/testsuites/psxtests/psxkey06.yml
@@ -0,0 +1,19 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by: true
+features: c cprogram
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/psxtests/psxkey06/init.c
+stlib: []
+target: testsuites/psxtests/psxkey06.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/psxtests/psxkey07.yml b/spec/build/testsuites/psxtests/psxkey07.yml
new file mode 100644
index 0000000000..923c29b9e9
--- /dev/null
+++ b/spec/build/testsuites/psxtests/psxkey07.yml
@@ -0,0 +1,19 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by: true
+features: c cprogram
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/psxtests/psxkey07/init.c
+stlib: []
+target: testsuites/psxtests/psxkey07.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/psxtests/psxkey08.yml b/spec/build/testsuites/psxtests/psxkey08.yml
new file mode 100644
index 0000000000..a1ce328f66
--- /dev/null
+++ b/spec/build/testsuites/psxtests/psxkey08.yml
@@ -0,0 +1,19 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by: true
+features: c cprogram
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/psxtests/psxkey08/init.c
+stlib: []
+target: testsuites/psxtests/psxkey08.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/psxtests/psxkey09.yml b/spec/build/testsuites/psxtests/psxkey09.yml
new file mode 100644
index 0000000000..b00c9853cb
--- /dev/null
+++ b/spec/build/testsuites/psxtests/psxkey09.yml
@@ -0,0 +1,19 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by: true
+features: c cprogram
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/psxtests/psxkey09/init.c
+stlib: []
+target: testsuites/psxtests/psxkey09.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/psxtests/psxkey10.yml b/spec/build/testsuites/psxtests/psxkey10.yml
new file mode 100644
index 0000000000..ffa9540c5b
--- /dev/null
+++ b/spec/build/testsuites/psxtests/psxkey10.yml
@@ -0,0 +1,19 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by: true
+features: c cprogram
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/psxtests/psxkey10/init.c
+stlib: []
+target: testsuites/psxtests/psxkey10.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/psxtests/psxmmap01.yml b/spec/build/testsuites/psxtests/psxmmap01.yml
new file mode 100644
index 0000000000..3a96ce63b2
--- /dev/null
+++ b/spec/build/testsuites/psxtests/psxmmap01.yml
@@ -0,0 +1,21 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by: true
+features: c cprogram
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/psxtests/psxmmap01/init.c
+- testsuites/psxtests/psxmmap01/test_helper.c
+- testsuites/psxtests/psxmmap01/test_driver.c
+stlib: []
+target: testsuites/psxtests/psxmmap01.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/psxtests/psxmount.yml b/spec/build/testsuites/psxtests/psxmount.yml
new file mode 100644
index 0000000000..9ad42bb4db
--- /dev/null
+++ b/spec/build/testsuites/psxtests/psxmount.yml
@@ -0,0 +1,20 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by: true
+features: c cprogram
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/psxtests/psxmount/main.c
+- testsuites/psxtests/psxmount/test.c
+stlib: []
+target: testsuites/psxtests/psxmount.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/psxtests/psxmsgq01.yml b/spec/build/testsuites/psxtests/psxmsgq01.yml
new file mode 100644
index 0000000000..0482e6d2b8
--- /dev/null
+++ b/spec/build/testsuites/psxtests/psxmsgq01.yml
@@ -0,0 +1,20 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by: true
+features: c cprogram
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/psxtests/psxmsgq01/init.c
+- testsuites/support/src/test_support.c
+stlib: []
+target: testsuites/psxtests/psxmsgq01.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/psxtests/psxmsgq02.yml b/spec/build/testsuites/psxtests/psxmsgq02.yml
new file mode 100644
index 0000000000..66f6dee4a3
--- /dev/null
+++ b/spec/build/testsuites/psxtests/psxmsgq02.yml
@@ -0,0 +1,20 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by: true
+features: c cprogram
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/psxtests/psxmsgq02/init.c
+- testsuites/support/src/test_support.c
+stlib: []
+target: testsuites/psxtests/psxmsgq02.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/psxtests/psxmsgq03.yml b/spec/build/testsuites/psxtests/psxmsgq03.yml
new file mode 100644
index 0000000000..18aaf18c52
--- /dev/null
+++ b/spec/build/testsuites/psxtests/psxmsgq03.yml
@@ -0,0 +1,20 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by: true
+features: c cprogram
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/psxtests/psxmsgq03/init.c
+- testsuites/support/src/test_support.c
+stlib: []
+target: testsuites/psxtests/psxmsgq03.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/psxtests/psxmsgq04.yml b/spec/build/testsuites/psxtests/psxmsgq04.yml
new file mode 100644
index 0000000000..a59e83d6a5
--- /dev/null
+++ b/spec/build/testsuites/psxtests/psxmsgq04.yml
@@ -0,0 +1,20 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by: true
+features: c cprogram
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/psxtests/psxmsgq04/init.c
+- testsuites/support/src/test_support.c
+stlib: []
+target: testsuites/psxtests/psxmsgq04.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/psxtests/psxmutexattr01.yml b/spec/build/testsuites/psxtests/psxmutexattr01.yml
new file mode 100644
index 0000000000..53eae57eb0
--- /dev/null
+++ b/spec/build/testsuites/psxtests/psxmutexattr01.yml
@@ -0,0 +1,19 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by: true
+features: c cprogram
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/psxtests/psxmutexattr01/init.c
+stlib: []
+target: testsuites/psxtests/psxmutexattr01.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/psxtests/psxndbm01.yml b/spec/build/testsuites/psxtests/psxndbm01.yml
new file mode 100644
index 0000000000..47d18f834e
--- /dev/null
+++ b/spec/build/testsuites/psxtests/psxndbm01.yml
@@ -0,0 +1,19 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by: true
+features: c cprogram
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/psxtests/psxndbm01/init.c
+stlib: []
+target: testsuites/psxtests/psxndbm01.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/psxtests/psxobj01.yml b/spec/build/testsuites/psxtests/psxobj01.yml
new file mode 100644
index 0000000000..ed2ab8021c
--- /dev/null
+++ b/spec/build/testsuites/psxtests/psxobj01.yml
@@ -0,0 +1,20 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by: true
+features: c cprogram
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/psxtests/psxobj01/init.c
+- testsuites/support/src/test_support.c
+stlib: []
+target: testsuites/psxtests/psxobj01.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/psxtests/psxonce01.yml b/spec/build/testsuites/psxtests/psxonce01.yml
new file mode 100644
index 0000000000..5fd2df5616
--- /dev/null
+++ b/spec/build/testsuites/psxtests/psxonce01.yml
@@ -0,0 +1,19 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by: true
+features: c cprogram
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/psxtests/psxonce01/init.c
+stlib: []
+target: testsuites/psxtests/psxonce01.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/psxtests/psxpasswd01.yml b/spec/build/testsuites/psxtests/psxpasswd01.yml
new file mode 100644
index 0000000000..aeb035e573
--- /dev/null
+++ b/spec/build/testsuites/psxtests/psxpasswd01.yml
@@ -0,0 +1,19 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by: true
+features: c cprogram
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/psxtests/psxpasswd01/init.c
+stlib: []
+target: testsuites/psxtests/psxpasswd01.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/psxtests/psxpasswd02.yml b/spec/build/testsuites/psxtests/psxpasswd02.yml
new file mode 100644
index 0000000000..990206988d
--- /dev/null
+++ b/spec/build/testsuites/psxtests/psxpasswd02.yml
@@ -0,0 +1,19 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by: true
+features: c cprogram
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/psxtests/psxpasswd02/init.c
+stlib: []
+target: testsuites/psxtests/psxpasswd02.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/psxtests/psxpipe01.yml b/spec/build/testsuites/psxtests/psxpipe01.yml
new file mode 100644
index 0000000000..ff1a88bfe5
--- /dev/null
+++ b/spec/build/testsuites/psxtests/psxpipe01.yml
@@ -0,0 +1,19 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by: true
+features: c cprogram
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/psxtests/psxpipe01/init.c
+stlib: []
+target: testsuites/psxtests/psxpipe01.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/psxtests/psxrdwrv.yml b/spec/build/testsuites/psxtests/psxrdwrv.yml
new file mode 100644
index 0000000000..c7ec810e1b
--- /dev/null
+++ b/spec/build/testsuites/psxtests/psxrdwrv.yml
@@ -0,0 +1,20 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by: true
+features: c cprogram
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/psxtests/psxrdwrv/main.c
+- testsuites/psxtests/psxrdwrv/test.c
+stlib: []
+target: testsuites/psxtests/psxrdwrv.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/psxtests/psxreaddir.yml b/spec/build/testsuites/psxtests/psxreaddir.yml
new file mode 100644
index 0000000000..1c1deef314
--- /dev/null
+++ b/spec/build/testsuites/psxtests/psxreaddir.yml
@@ -0,0 +1,20 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by: true
+features: c cprogram
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/psxtests/psxreaddir/main.c
+- testsuites/psxtests/psxreaddir/test.c
+stlib: []
+target: testsuites/psxtests/psxreaddir.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/psxtests/psxrwlock01.yml b/spec/build/testsuites/psxtests/psxrwlock01.yml
new file mode 100644
index 0000000000..ffc3cf7fcf
--- /dev/null
+++ b/spec/build/testsuites/psxtests/psxrwlock01.yml
@@ -0,0 +1,20 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by: true
+features: c cprogram
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/psxtests/psxrwlock01/main.c
+- testsuites/psxtests/psxrwlock01/test.c
+stlib: []
+target: testsuites/psxtests/psxrwlock01.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/psxtests/psxsem01.yml b/spec/build/testsuites/psxtests/psxsem01.yml
new file mode 100644
index 0000000000..1b5f721e33
--- /dev/null
+++ b/spec/build/testsuites/psxtests/psxsem01.yml
@@ -0,0 +1,20 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by: true
+features: c cprogram
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/psxtests/psxsem01/init.c
+- testsuites/support/src/test_support.c
+stlib: []
+target: testsuites/psxtests/psxsem01.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/psxtests/psxshm01.yml b/spec/build/testsuites/psxtests/psxshm01.yml
new file mode 100644
index 0000000000..a0974c2085
--- /dev/null
+++ b/spec/build/testsuites/psxtests/psxshm01.yml
@@ -0,0 +1,19 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by: true
+features: c cprogram
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/psxtests/psxshm01/init.c
+stlib: []
+target: testsuites/psxtests/psxshm01.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/psxtests/psxshm02.yml b/spec/build/testsuites/psxtests/psxshm02.yml
new file mode 100644
index 0000000000..37510452f7
--- /dev/null
+++ b/spec/build/testsuites/psxtests/psxshm02.yml
@@ -0,0 +1,19 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by: true
+features: c cprogram
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/psxtests/psxshm02/init.c
+stlib: []
+target: testsuites/psxtests/psxshm02.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/psxtests/psxsignal01.yml b/spec/build/testsuites/psxtests/psxsignal01.yml
new file mode 100644
index 0000000000..6f62176af3
--- /dev/null
+++ b/spec/build/testsuites/psxtests/psxsignal01.yml
@@ -0,0 +1,21 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by:
+- RTEMS_POSIX_API
+features: c cprogram
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/psxtests/psxsignal01/init.c
+- testsuites/psxtests/psxsignal01/task1.c
+stlib: []
+target: testsuites/psxtests/psxsignal01.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/psxtests/psxsignal02.yml b/spec/build/testsuites/psxtests/psxsignal02.yml
new file mode 100644
index 0000000000..04eafd45c0
--- /dev/null
+++ b/spec/build/testsuites/psxtests/psxsignal02.yml
@@ -0,0 +1,20 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by:
+- RTEMS_POSIX_API
+features: c cprogram
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/psxtests/psxsignal02/init.c
+stlib: []
+target: testsuites/psxtests/psxsignal02.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/psxtests/psxsignal03.yml b/spec/build/testsuites/psxtests/psxsignal03.yml
new file mode 100644
index 0000000000..771595df47
--- /dev/null
+++ b/spec/build/testsuites/psxtests/psxsignal03.yml
@@ -0,0 +1,20 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by:
+- RTEMS_POSIX_API
+features: c cprogram
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/psxtests/psxsignal03/init.c
+stlib: []
+target: testsuites/psxtests/psxsignal03.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/psxtests/psxsignal04.yml b/spec/build/testsuites/psxtests/psxsignal04.yml
new file mode 100644
index 0000000000..3da079df3b
--- /dev/null
+++ b/spec/build/testsuites/psxtests/psxsignal04.yml
@@ -0,0 +1,20 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by:
+- RTEMS_POSIX_API
+features: c cprogram
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/psxtests/psxsignal04/init.c
+stlib: []
+target: testsuites/psxtests/psxsignal04.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/psxtests/psxsignal05.yml b/spec/build/testsuites/psxtests/psxsignal05.yml
new file mode 100644
index 0000000000..9b8003aba9
--- /dev/null
+++ b/spec/build/testsuites/psxtests/psxsignal05.yml
@@ -0,0 +1,20 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by:
+- RTEMS_POSIX_API
+features: c cprogram
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/psxtests/psxsignal05/init.c
+stlib: []
+target: testsuites/psxtests/psxsignal05.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/psxtests/psxsignal06.yml b/spec/build/testsuites/psxtests/psxsignal06.yml
new file mode 100644
index 0000000000..bbdb7d6a99
--- /dev/null
+++ b/spec/build/testsuites/psxtests/psxsignal06.yml
@@ -0,0 +1,20 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by:
+- RTEMS_POSIX_API
+features: c cprogram
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/psxtests/psxsignal06/init.c
+stlib: []
+target: testsuites/psxtests/psxsignal06.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/psxtests/psxsignal07.yml b/spec/build/testsuites/psxtests/psxsignal07.yml
new file mode 100644
index 0000000000..b843f53de2
--- /dev/null
+++ b/spec/build/testsuites/psxtests/psxsignal07.yml
@@ -0,0 +1,21 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by:
+- RTEMS_POSIX_API
+features: c cprogram
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/psxtests/psxsignal07/main.c
+- testsuites/psxtests/psxsignal07/rtems_config.c
+stlib: []
+target: testsuites/psxtests/psxsignal07.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/psxtests/psxsignal08.yml b/spec/build/testsuites/psxtests/psxsignal08.yml
new file mode 100644
index 0000000000..7167009cb5
--- /dev/null
+++ b/spec/build/testsuites/psxtests/psxsignal08.yml
@@ -0,0 +1,21 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by:
+- RTEMS_POSIX_API
+features: c cprogram
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/psxtests/psxsignal08/main.c
+- testsuites/psxtests/psxsignal08/rtems_config.c
+stlib: []
+target: testsuites/psxtests/psxsignal08.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/psxtests/psxspin01.yml b/spec/build/testsuites/psxtests/psxspin01.yml
new file mode 100644
index 0000000000..063c03e3f1
--- /dev/null
+++ b/spec/build/testsuites/psxtests/psxspin01.yml
@@ -0,0 +1,20 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by: true
+features: c cprogram
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/psxtests/psxspin01/main.c
+- testsuites/psxtests/psxspin01/test.c
+stlib: []
+target: testsuites/psxtests/psxspin01.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/psxtests/psxstack01.yml b/spec/build/testsuites/psxtests/psxstack01.yml
new file mode 100644
index 0000000000..8655be36f9
--- /dev/null
+++ b/spec/build/testsuites/psxtests/psxstack01.yml
@@ -0,0 +1,19 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by: true
+features: c cprogram
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/psxtests/psxstack01/init.c
+stlib: []
+target: testsuites/psxtests/psxstack01.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/psxtests/psxstack02.yml b/spec/build/testsuites/psxtests/psxstack02.yml
new file mode 100644
index 0000000000..2975e07c79
--- /dev/null
+++ b/spec/build/testsuites/psxtests/psxstack02.yml
@@ -0,0 +1,19 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by: true
+features: c cprogram
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/psxtests/psxstack02/init.c
+stlib: []
+target: testsuites/psxtests/psxstack02.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/psxtests/psxstat.yml b/spec/build/testsuites/psxtests/psxstat.yml
new file mode 100644
index 0000000000..52fa36a4c3
--- /dev/null
+++ b/spec/build/testsuites/psxtests/psxstat.yml
@@ -0,0 +1,20 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by: true
+features: c cprogram
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/psxtests/psxstat/main.c
+- testsuites/psxtests/psxstat/test.c
+stlib: []
+target: testsuites/psxtests/psxstat.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/psxtests/psxstrsignal01.yml b/spec/build/testsuites/psxtests/psxstrsignal01.yml
new file mode 100644
index 0000000000..27073966ee
--- /dev/null
+++ b/spec/build/testsuites/psxtests/psxstrsignal01.yml
@@ -0,0 +1,19 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by: true
+features: c cprogram
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/psxtests/psxstrsignal01/init.c
+stlib: []
+target: testsuites/psxtests/psxstrsignal01.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/psxtests/psxsysconf.yml b/spec/build/testsuites/psxtests/psxsysconf.yml
new file mode 100644
index 0000000000..4f37806253
--- /dev/null
+++ b/spec/build/testsuites/psxtests/psxsysconf.yml
@@ -0,0 +1,19 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by: true
+features: c cprogram
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/psxtests/psxsysconf/init.c
+stlib: []
+target: testsuites/psxtests/psxsysconf.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/psxtests/psxthreadname01.yml b/spec/build/testsuites/psxtests/psxthreadname01.yml
new file mode 100644
index 0000000000..da03c78bc1
--- /dev/null
+++ b/spec/build/testsuites/psxtests/psxthreadname01.yml
@@ -0,0 +1,19 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by: true
+features: c cprogram
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/psxtests/psxthreadname01/init.c
+stlib: []
+target: testsuites/psxtests/psxthreadname01.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/psxtests/psxtime.yml b/spec/build/testsuites/psxtests/psxtime.yml
new file mode 100644
index 0000000000..6dd5aa1a96
--- /dev/null
+++ b/spec/build/testsuites/psxtests/psxtime.yml
@@ -0,0 +1,20 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by: true
+features: c cprogram
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/psxtests/psxtime/main.c
+- testsuites/psxtests/psxtime/test.c
+stlib: []
+target: testsuites/psxtests/psxtime.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/psxtests/psxtimer01.yml b/spec/build/testsuites/psxtests/psxtimer01.yml
new file mode 100644
index 0000000000..17b5a9a6f2
--- /dev/null
+++ b/spec/build/testsuites/psxtests/psxtimer01.yml
@@ -0,0 +1,20 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by:
+- RTEMS_POSIX_API
+features: c cprogram
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/psxtests/psxtimer01/psxtimer.c
+stlib: []
+target: testsuites/psxtests/psxtimer01.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/psxtests/psxtimer02.yml b/spec/build/testsuites/psxtests/psxtimer02.yml
new file mode 100644
index 0000000000..96b3a508b0
--- /dev/null
+++ b/spec/build/testsuites/psxtests/psxtimer02.yml
@@ -0,0 +1,20 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by:
+- RTEMS_POSIX_API
+features: c cprogram
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/psxtests/psxtimer02/psxtimer.c
+stlib: []
+target: testsuites/psxtests/psxtimer02.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/psxtests/psxtimes01.yml b/spec/build/testsuites/psxtests/psxtimes01.yml
new file mode 100644
index 0000000000..b99007af54
--- /dev/null
+++ b/spec/build/testsuites/psxtests/psxtimes01.yml
@@ -0,0 +1,20 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by: true
+features: c cprogram
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/psxtests/psxtimes01/init.c
+- testsuites/support/src/spin.c
+stlib: []
+target: testsuites/psxtests/psxtimes01.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/psxtests/psxualarm.yml b/spec/build/testsuites/psxtests/psxualarm.yml
new file mode 100644
index 0000000000..66224db118
--- /dev/null
+++ b/spec/build/testsuites/psxtests/psxualarm.yml
@@ -0,0 +1,20 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by:
+- RTEMS_POSIX_API
+features: c cprogram
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/psxtests/psxualarm/init.c
+stlib: []
+target: testsuites/psxtests/psxualarm.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/psxtests/psxusleep.yml b/spec/build/testsuites/psxtests/psxusleep.yml
new file mode 100644
index 0000000000..78f488742d
--- /dev/null
+++ b/spec/build/testsuites/psxtests/psxusleep.yml
@@ -0,0 +1,19 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by: true
+features: c cprogram
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/psxtests/psxusleep/init.c
+stlib: []
+target: testsuites/psxtests/psxusleep.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/psxtmtests/grp.yml b/spec/build/testsuites/psxtmtests/grp.yml
new file mode 100644
index 0000000000..2d4c5b2b97
--- /dev/null
+++ b/spec/build/testsuites/psxtmtests/grp.yml
@@ -0,0 +1,131 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: group
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+enabled-by:
+- BUILD_TESTS
+- BUILD_PSXTMTESTS
+includes:
+- testsuites/support/include
+- testsuites/tmtests/include
+install: []
+ldflags:
+- -Wl,--wrap=printf
+- -Wl,--wrap=puts
+links:
+- role: build-dependency
+ uid: psxtmbarrier01
+- role: build-dependency
+ uid: psxtmbarrier02
+- role: build-dependency
+ uid: psxtmbarrier03
+- role: build-dependency
+ uid: psxtmbarrier04
+- role: build-dependency
+ uid: psxtmbarrierattr01
+- role: build-dependency
+ uid: psxtmcleanup01
+- role: build-dependency
+ uid: psxtmclocknanosleep01
+- role: build-dependency
+ uid: psxtmclocknanosleep02
+- role: build-dependency
+ uid: psxtmclocknanosleep03
+- role: build-dependency
+ uid: psxtmcond01
+- role: build-dependency
+ uid: psxtmcond02
+- role: build-dependency
+ uid: psxtmcond03
+- role: build-dependency
+ uid: psxtmcond04
+- role: build-dependency
+ uid: psxtmcond05
+- role: build-dependency
+ uid: psxtmcond06
+- role: build-dependency
+ uid: psxtmcond07
+- role: build-dependency
+ uid: psxtmcond08
+- role: build-dependency
+ uid: psxtmcond09
+- role: build-dependency
+ uid: psxtmcond10
+- role: build-dependency
+ uid: psxtmkey01
+- role: build-dependency
+ uid: psxtmkey02
+- role: build-dependency
+ uid: psxtmmq01
+- role: build-dependency
+ uid: psxtmmqrcvblock01
+- role: build-dependency
+ uid: psxtmmqrcvblock02
+- role: build-dependency
+ uid: psxtmmutex01
+- role: build-dependency
+ uid: psxtmmutex02
+- role: build-dependency
+ uid: psxtmmutex03
+- role: build-dependency
+ uid: psxtmmutex04
+- role: build-dependency
+ uid: psxtmmutex05
+- role: build-dependency
+ uid: psxtmmutex06
+- role: build-dependency
+ uid: psxtmmutex07
+- role: build-dependency
+ uid: psxtmmutexattr01
+- role: build-dependency
+ uid: psxtmnanosleep01
+- role: build-dependency
+ uid: psxtmnanosleep02
+- role: build-dependency
+ uid: psxtmonce01
+- role: build-dependency
+ uid: psxtmrwlock01
+- role: build-dependency
+ uid: psxtmrwlock02
+- role: build-dependency
+ uid: psxtmrwlock03
+- role: build-dependency
+ uid: psxtmrwlock04
+- role: build-dependency
+ uid: psxtmrwlock05
+- role: build-dependency
+ uid: psxtmrwlock06
+- role: build-dependency
+ uid: psxtmrwlock07
+- role: build-dependency
+ uid: psxtmsem01
+- role: build-dependency
+ uid: psxtmsem02
+- role: build-dependency
+ uid: psxtmsem03
+- role: build-dependency
+ uid: psxtmsem04
+- role: build-dependency
+ uid: psxtmsem05
+- role: build-dependency
+ uid: psxtmsleep01
+- role: build-dependency
+ uid: psxtmsleep02
+- role: build-dependency
+ uid: psxtmthread01
+- role: build-dependency
+ uid: psxtmthread02
+- role: build-dependency
+ uid: psxtmthread03
+- role: build-dependency
+ uid: psxtmthread04
+- role: build-dependency
+ uid: psxtmthread05
+- role: build-dependency
+ uid: psxtmthread06
+- role: build-dependency
+ uid: psxtmthreadattr01
+type: build
+use-after:
+- rtemstest
+use-before: []
diff --git a/spec/build/testsuites/psxtmtests/psxtmbarrier01.yml b/spec/build/testsuites/psxtmtests/psxtmbarrier01.yml
new file mode 100644
index 0000000000..be54a8fad5
--- /dev/null
+++ b/spec/build/testsuites/psxtmtests/psxtmbarrier01.yml
@@ -0,0 +1,21 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by: true
+features: c cprogram
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/psxtmtests/psxtmbarrier01/init.c
+- testsuites/support/src/tmtests_empty_function.c
+- testsuites/support/src/tmtests_support.c
+stlib: []
+target: testsuites/psxtmtests/psxtmbarrier01.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/psxtmtests/psxtmbarrier02.yml b/spec/build/testsuites/psxtmtests/psxtmbarrier02.yml
new file mode 100644
index 0000000000..3ec13e8d1d
--- /dev/null
+++ b/spec/build/testsuites/psxtmtests/psxtmbarrier02.yml
@@ -0,0 +1,21 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by: true
+features: c cprogram
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/psxtmtests/psxtmbarrier02/init.c
+- testsuites/support/src/tmtests_empty_function.c
+- testsuites/support/src/tmtests_support.c
+stlib: []
+target: testsuites/psxtmtests/psxtmbarrier02.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/psxtmtests/psxtmbarrier03.yml b/spec/build/testsuites/psxtmtests/psxtmbarrier03.yml
new file mode 100644
index 0000000000..510d5ca0c0
--- /dev/null
+++ b/spec/build/testsuites/psxtmtests/psxtmbarrier03.yml
@@ -0,0 +1,21 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by: true
+features: c cprogram
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/psxtmtests/psxtmbarrier03/init.c
+- testsuites/support/src/tmtests_empty_function.c
+- testsuites/support/src/tmtests_support.c
+stlib: []
+target: testsuites/psxtmtests/psxtmbarrier03.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/psxtmtests/psxtmbarrier04.yml b/spec/build/testsuites/psxtmtests/psxtmbarrier04.yml
new file mode 100644
index 0000000000..ae54419739
--- /dev/null
+++ b/spec/build/testsuites/psxtmtests/psxtmbarrier04.yml
@@ -0,0 +1,21 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by: true
+features: c cprogram
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/psxtmtests/psxtmbarrier04/init.c
+- testsuites/support/src/tmtests_empty_function.c
+- testsuites/support/src/tmtests_support.c
+stlib: []
+target: testsuites/psxtmtests/psxtmbarrier04.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/psxtmtests/psxtmbarrierattr01.yml b/spec/build/testsuites/psxtmtests/psxtmbarrierattr01.yml
new file mode 100644
index 0000000000..87c1557699
--- /dev/null
+++ b/spec/build/testsuites/psxtmtests/psxtmbarrierattr01.yml
@@ -0,0 +1,21 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by: true
+features: c cprogram
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/psxtmtests/psxtmbarrierattr01/init.c
+- testsuites/support/src/tmtests_empty_function.c
+- testsuites/support/src/tmtests_support.c
+stlib: []
+target: testsuites/psxtmtests/psxtmbarrierattr01.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/psxtmtests/psxtmcleanup01.yml b/spec/build/testsuites/psxtmtests/psxtmcleanup01.yml
new file mode 100644
index 0000000000..b516a2e4b2
--- /dev/null
+++ b/spec/build/testsuites/psxtmtests/psxtmcleanup01.yml
@@ -0,0 +1,21 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by: true
+features: c cprogram
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/psxtmtests/psxtmcleanup01/init.c
+- testsuites/support/src/tmtests_empty_function.c
+- testsuites/support/src/tmtests_support.c
+stlib: []
+target: testsuites/psxtmtests/psxtmcleanup01.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/psxtmtests/psxtmclocknanosleep01.yml b/spec/build/testsuites/psxtmtests/psxtmclocknanosleep01.yml
new file mode 100644
index 0000000000..853884b746
--- /dev/null
+++ b/spec/build/testsuites/psxtmtests/psxtmclocknanosleep01.yml
@@ -0,0 +1,21 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by: true
+features: c cprogram
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/psxtmtests/psxtmclocknanosleep01/init.c
+- testsuites/support/src/tmtests_empty_function.c
+- testsuites/support/src/tmtests_support.c
+stlib: []
+target: testsuites/psxtmtests/psxtmclocknanosleep01.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/psxtmtests/psxtmclocknanosleep02.yml b/spec/build/testsuites/psxtmtests/psxtmclocknanosleep02.yml
new file mode 100644
index 0000000000..cb54f2c076
--- /dev/null
+++ b/spec/build/testsuites/psxtmtests/psxtmclocknanosleep02.yml
@@ -0,0 +1,21 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by: true
+features: c cprogram
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/psxtmtests/psxtmclocknanosleep02/init.c
+- testsuites/support/src/tmtests_empty_function.c
+- testsuites/support/src/tmtests_support.c
+stlib: []
+target: testsuites/psxtmtests/psxtmclocknanosleep02.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/psxtmtests/psxtmclocknanosleep03.yml b/spec/build/testsuites/psxtmtests/psxtmclocknanosleep03.yml
new file mode 100644
index 0000000000..fd036dfa7c
--- /dev/null
+++ b/spec/build/testsuites/psxtmtests/psxtmclocknanosleep03.yml
@@ -0,0 +1,21 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by: true
+features: c cprogram
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/psxtmtests/psxtmclocknanosleep03/init.c
+- testsuites/support/src/tmtests_empty_function.c
+- testsuites/support/src/tmtests_support.c
+stlib: []
+target: testsuites/psxtmtests/psxtmclocknanosleep03.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/psxtmtests/psxtmcond01.yml b/spec/build/testsuites/psxtmtests/psxtmcond01.yml
new file mode 100644
index 0000000000..6f65c9b4f6
--- /dev/null
+++ b/spec/build/testsuites/psxtmtests/psxtmcond01.yml
@@ -0,0 +1,21 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by: true
+features: c cprogram
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/psxtmtests/psxtmcond01/init.c
+- testsuites/support/src/tmtests_empty_function.c
+- testsuites/support/src/tmtests_support.c
+stlib: []
+target: testsuites/psxtmtests/psxtmcond01.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/psxtmtests/psxtmcond02.yml b/spec/build/testsuites/psxtmtests/psxtmcond02.yml
new file mode 100644
index 0000000000..af75234a1f
--- /dev/null
+++ b/spec/build/testsuites/psxtmtests/psxtmcond02.yml
@@ -0,0 +1,21 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by: true
+features: c cprogram
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/psxtmtests/psxtmcond02/init.c
+- testsuites/support/src/tmtests_empty_function.c
+- testsuites/support/src/tmtests_support.c
+stlib: []
+target: testsuites/psxtmtests/psxtmcond02.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/psxtmtests/psxtmcond03.yml b/spec/build/testsuites/psxtmtests/psxtmcond03.yml
new file mode 100644
index 0000000000..7a954bcdb2
--- /dev/null
+++ b/spec/build/testsuites/psxtmtests/psxtmcond03.yml
@@ -0,0 +1,21 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by: true
+features: c cprogram
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/psxtmtests/psxtmcond03/init.c
+- testsuites/support/src/tmtests_empty_function.c
+- testsuites/support/src/tmtests_support.c
+stlib: []
+target: testsuites/psxtmtests/psxtmcond03.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/psxtmtests/psxtmcond04.yml b/spec/build/testsuites/psxtmtests/psxtmcond04.yml
new file mode 100644
index 0000000000..b81e6febda
--- /dev/null
+++ b/spec/build/testsuites/psxtmtests/psxtmcond04.yml
@@ -0,0 +1,21 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by: true
+features: c cprogram
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/psxtmtests/psxtmcond04/init.c
+- testsuites/support/src/tmtests_empty_function.c
+- testsuites/support/src/tmtests_support.c
+stlib: []
+target: testsuites/psxtmtests/psxtmcond04.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/psxtmtests/psxtmcond05.yml b/spec/build/testsuites/psxtmtests/psxtmcond05.yml
new file mode 100644
index 0000000000..e13d1b33f5
--- /dev/null
+++ b/spec/build/testsuites/psxtmtests/psxtmcond05.yml
@@ -0,0 +1,21 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by: true
+features: c cprogram
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/psxtmtests/psxtmcond05/init.c
+- testsuites/support/src/tmtests_empty_function.c
+- testsuites/support/src/tmtests_support.c
+stlib: []
+target: testsuites/psxtmtests/psxtmcond05.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/psxtmtests/psxtmcond06.yml b/spec/build/testsuites/psxtmtests/psxtmcond06.yml
new file mode 100644
index 0000000000..8f14807582
--- /dev/null
+++ b/spec/build/testsuites/psxtmtests/psxtmcond06.yml
@@ -0,0 +1,21 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by: true
+features: c cprogram
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/psxtmtests/psxtmcond06/init.c
+- testsuites/support/src/tmtests_empty_function.c
+- testsuites/support/src/tmtests_support.c
+stlib: []
+target: testsuites/psxtmtests/psxtmcond06.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/psxtmtests/psxtmcond07.yml b/spec/build/testsuites/psxtmtests/psxtmcond07.yml
new file mode 100644
index 0000000000..c42d0716f0
--- /dev/null
+++ b/spec/build/testsuites/psxtmtests/psxtmcond07.yml
@@ -0,0 +1,21 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by: true
+features: c cprogram
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/psxtmtests/psxtmcond07/init.c
+- testsuites/support/src/tmtests_empty_function.c
+- testsuites/support/src/tmtests_support.c
+stlib: []
+target: testsuites/psxtmtests/psxtmcond07.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/psxtmtests/psxtmcond08.yml b/spec/build/testsuites/psxtmtests/psxtmcond08.yml
new file mode 100644
index 0000000000..387590dcaa
--- /dev/null
+++ b/spec/build/testsuites/psxtmtests/psxtmcond08.yml
@@ -0,0 +1,21 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by: true
+features: c cprogram
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/psxtmtests/psxtmcond08/init.c
+- testsuites/support/src/tmtests_empty_function.c
+- testsuites/support/src/tmtests_support.c
+stlib: []
+target: testsuites/psxtmtests/psxtmcond08.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/psxtmtests/psxtmcond09.yml b/spec/build/testsuites/psxtmtests/psxtmcond09.yml
new file mode 100644
index 0000000000..43ec0990c3
--- /dev/null
+++ b/spec/build/testsuites/psxtmtests/psxtmcond09.yml
@@ -0,0 +1,21 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by: true
+features: c cprogram
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/psxtmtests/psxtmcond09/init.c
+- testsuites/support/src/tmtests_empty_function.c
+- testsuites/support/src/tmtests_support.c
+stlib: []
+target: testsuites/psxtmtests/psxtmcond09.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/psxtmtests/psxtmcond10.yml b/spec/build/testsuites/psxtmtests/psxtmcond10.yml
new file mode 100644
index 0000000000..ba402b9d72
--- /dev/null
+++ b/spec/build/testsuites/psxtmtests/psxtmcond10.yml
@@ -0,0 +1,21 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by: true
+features: c cprogram
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/psxtmtests/psxtmcond10/init.c
+- testsuites/support/src/tmtests_empty_function.c
+- testsuites/support/src/tmtests_support.c
+stlib: []
+target: testsuites/psxtmtests/psxtmcond10.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/psxtmtests/psxtmkey01.yml b/spec/build/testsuites/psxtmtests/psxtmkey01.yml
new file mode 100644
index 0000000000..9e90f5b787
--- /dev/null
+++ b/spec/build/testsuites/psxtmtests/psxtmkey01.yml
@@ -0,0 +1,21 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by: true
+features: c cprogram
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/psxtmtests/psxtmkey01/init.c
+- testsuites/support/src/tmtests_empty_function.c
+- testsuites/support/src/tmtests_support.c
+stlib: []
+target: testsuites/psxtmtests/psxtmkey01.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/psxtmtests/psxtmkey02.yml b/spec/build/testsuites/psxtmtests/psxtmkey02.yml
new file mode 100644
index 0000000000..0e42d81b72
--- /dev/null
+++ b/spec/build/testsuites/psxtmtests/psxtmkey02.yml
@@ -0,0 +1,21 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by: true
+features: c cprogram
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/psxtmtests/psxtmkey02/init.c
+- testsuites/support/src/tmtests_empty_function.c
+- testsuites/support/src/tmtests_support.c
+stlib: []
+target: testsuites/psxtmtests/psxtmkey02.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/psxtmtests/psxtmmq01.yml b/spec/build/testsuites/psxtmtests/psxtmmq01.yml
new file mode 100644
index 0000000000..c71ca644e5
--- /dev/null
+++ b/spec/build/testsuites/psxtmtests/psxtmmq01.yml
@@ -0,0 +1,21 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by: true
+features: c cprogram
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/psxtmtests/psxtmmq01/init.c
+- testsuites/support/src/tmtests_empty_function.c
+- testsuites/support/src/tmtests_support.c
+stlib: []
+target: testsuites/psxtmtests/psxtmmq01.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/psxtmtests/psxtmmqrcvblock01.yml b/spec/build/testsuites/psxtmtests/psxtmmqrcvblock01.yml
new file mode 100644
index 0000000000..140d8a0a50
--- /dev/null
+++ b/spec/build/testsuites/psxtmtests/psxtmmqrcvblock01.yml
@@ -0,0 +1,21 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by: true
+features: c cprogram
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/psxtmtests/psxtmmqrcvblock01/init.c
+- testsuites/support/src/tmtests_empty_function.c
+- testsuites/support/src/tmtests_support.c
+stlib: []
+target: testsuites/psxtmtests/psxtmmqrcvblock01.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/psxtmtests/psxtmmqrcvblock02.yml b/spec/build/testsuites/psxtmtests/psxtmmqrcvblock02.yml
new file mode 100644
index 0000000000..f7503c65fd
--- /dev/null
+++ b/spec/build/testsuites/psxtmtests/psxtmmqrcvblock02.yml
@@ -0,0 +1,21 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by: true
+features: c cprogram
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/psxtmtests/psxtmmqrcvblock02/init.c
+- testsuites/support/src/tmtests_empty_function.c
+- testsuites/support/src/tmtests_support.c
+stlib: []
+target: testsuites/psxtmtests/psxtmmqrcvblock02.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/psxtmtests/psxtmmutex01.yml b/spec/build/testsuites/psxtmtests/psxtmmutex01.yml
new file mode 100644
index 0000000000..5ea686ef2b
--- /dev/null
+++ b/spec/build/testsuites/psxtmtests/psxtmmutex01.yml
@@ -0,0 +1,21 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by: true
+features: c cprogram
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/psxtmtests/psxtmmutex01/init.c
+- testsuites/support/src/tmtests_empty_function.c
+- testsuites/support/src/tmtests_support.c
+stlib: []
+target: testsuites/psxtmtests/psxtmmutex01.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/psxtmtests/psxtmmutex02.yml b/spec/build/testsuites/psxtmtests/psxtmmutex02.yml
new file mode 100644
index 0000000000..d9bfb29b23
--- /dev/null
+++ b/spec/build/testsuites/psxtmtests/psxtmmutex02.yml
@@ -0,0 +1,21 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by: true
+features: c cprogram
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/psxtmtests/psxtmmutex02/init.c
+- testsuites/support/src/tmtests_empty_function.c
+- testsuites/support/src/tmtests_support.c
+stlib: []
+target: testsuites/psxtmtests/psxtmmutex02.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/psxtmtests/psxtmmutex03.yml b/spec/build/testsuites/psxtmtests/psxtmmutex03.yml
new file mode 100644
index 0000000000..6c07fff450
--- /dev/null
+++ b/spec/build/testsuites/psxtmtests/psxtmmutex03.yml
@@ -0,0 +1,21 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by: true
+features: c cprogram
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/psxtmtests/psxtmmutex03/init.c
+- testsuites/support/src/tmtests_empty_function.c
+- testsuites/support/src/tmtests_support.c
+stlib: []
+target: testsuites/psxtmtests/psxtmmutex03.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/psxtmtests/psxtmmutex04.yml b/spec/build/testsuites/psxtmtests/psxtmmutex04.yml
new file mode 100644
index 0000000000..eb4b5e8be2
--- /dev/null
+++ b/spec/build/testsuites/psxtmtests/psxtmmutex04.yml
@@ -0,0 +1,21 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by: true
+features: c cprogram
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/psxtmtests/psxtmmutex04/init.c
+- testsuites/support/src/tmtests_empty_function.c
+- testsuites/support/src/tmtests_support.c
+stlib: []
+target: testsuites/psxtmtests/psxtmmutex04.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/psxtmtests/psxtmmutex05.yml b/spec/build/testsuites/psxtmtests/psxtmmutex05.yml
new file mode 100644
index 0000000000..fec07ec6d7
--- /dev/null
+++ b/spec/build/testsuites/psxtmtests/psxtmmutex05.yml
@@ -0,0 +1,21 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by: true
+features: c cprogram
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/psxtmtests/psxtmmutex05/init.c
+- testsuites/support/src/tmtests_empty_function.c
+- testsuites/support/src/tmtests_support.c
+stlib: []
+target: testsuites/psxtmtests/psxtmmutex05.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/psxtmtests/psxtmmutex06.yml b/spec/build/testsuites/psxtmtests/psxtmmutex06.yml
new file mode 100644
index 0000000000..1e5935812b
--- /dev/null
+++ b/spec/build/testsuites/psxtmtests/psxtmmutex06.yml
@@ -0,0 +1,21 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by: true
+features: c cprogram
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/psxtmtests/psxtmmutex06/init.c
+- testsuites/support/src/tmtests_empty_function.c
+- testsuites/support/src/tmtests_support.c
+stlib: []
+target: testsuites/psxtmtests/psxtmmutex06.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/psxtmtests/psxtmmutex07.yml b/spec/build/testsuites/psxtmtests/psxtmmutex07.yml
new file mode 100644
index 0000000000..3c3445baf9
--- /dev/null
+++ b/spec/build/testsuites/psxtmtests/psxtmmutex07.yml
@@ -0,0 +1,21 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by: true
+features: c cprogram
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/psxtmtests/psxtmmutex07/init.c
+- testsuites/support/src/tmtests_empty_function.c
+- testsuites/support/src/tmtests_support.c
+stlib: []
+target: testsuites/psxtmtests/psxtmmutex07.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/psxtmtests/psxtmmutexattr01.yml b/spec/build/testsuites/psxtmtests/psxtmmutexattr01.yml
new file mode 100644
index 0000000000..41e68f51d6
--- /dev/null
+++ b/spec/build/testsuites/psxtmtests/psxtmmutexattr01.yml
@@ -0,0 +1,21 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by: true
+features: c cprogram
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/psxtmtests/psxtmmutexattr01/init.c
+- testsuites/support/src/tmtests_empty_function.c
+- testsuites/support/src/tmtests_support.c
+stlib: []
+target: testsuites/psxtmtests/psxtmmutexattr01.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/psxtmtests/psxtmnanosleep01.yml b/spec/build/testsuites/psxtmtests/psxtmnanosleep01.yml
new file mode 100644
index 0000000000..52fa4d082a
--- /dev/null
+++ b/spec/build/testsuites/psxtmtests/psxtmnanosleep01.yml
@@ -0,0 +1,21 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by: true
+features: c cprogram
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/psxtmtests/psxtmnanosleep01/init.c
+- testsuites/support/src/tmtests_empty_function.c
+- testsuites/support/src/tmtests_support.c
+stlib: []
+target: testsuites/psxtmtests/psxtmnanosleep01.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/psxtmtests/psxtmnanosleep02.yml b/spec/build/testsuites/psxtmtests/psxtmnanosleep02.yml
new file mode 100644
index 0000000000..a3bb97e27f
--- /dev/null
+++ b/spec/build/testsuites/psxtmtests/psxtmnanosleep02.yml
@@ -0,0 +1,21 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by: true
+features: c cprogram
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/psxtmtests/psxtmnanosleep02/init.c
+- testsuites/support/src/tmtests_empty_function.c
+- testsuites/support/src/tmtests_support.c
+stlib: []
+target: testsuites/psxtmtests/psxtmnanosleep02.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/psxtmtests/psxtmonce01.yml b/spec/build/testsuites/psxtmtests/psxtmonce01.yml
new file mode 100644
index 0000000000..9120307354
--- /dev/null
+++ b/spec/build/testsuites/psxtmtests/psxtmonce01.yml
@@ -0,0 +1,21 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by: true
+features: c cprogram
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/psxtmtests/psxtmonce01/init.c
+- testsuites/support/src/tmtests_empty_function.c
+- testsuites/support/src/tmtests_support.c
+stlib: []
+target: testsuites/psxtmtests/psxtmonce01.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/psxtmtests/psxtmrwlock01.yml b/spec/build/testsuites/psxtmtests/psxtmrwlock01.yml
new file mode 100644
index 0000000000..e8185f97e1
--- /dev/null
+++ b/spec/build/testsuites/psxtmtests/psxtmrwlock01.yml
@@ -0,0 +1,21 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by: true
+features: c cprogram
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/psxtmtests/psxtmrwlock01/init.c
+- testsuites/support/src/tmtests_empty_function.c
+- testsuites/support/src/tmtests_support.c
+stlib: []
+target: testsuites/psxtmtests/psxtmrwlock01.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/psxtmtests/psxtmrwlock02.yml b/spec/build/testsuites/psxtmtests/psxtmrwlock02.yml
new file mode 100644
index 0000000000..6989bd55ca
--- /dev/null
+++ b/spec/build/testsuites/psxtmtests/psxtmrwlock02.yml
@@ -0,0 +1,21 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by: true
+features: c cprogram
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/psxtmtests/psxtmrwlock02/init.c
+- testsuites/support/src/tmtests_empty_function.c
+- testsuites/support/src/tmtests_support.c
+stlib: []
+target: testsuites/psxtmtests/psxtmrwlock02.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/psxtmtests/psxtmrwlock03.yml b/spec/build/testsuites/psxtmtests/psxtmrwlock03.yml
new file mode 100644
index 0000000000..5cc605efba
--- /dev/null
+++ b/spec/build/testsuites/psxtmtests/psxtmrwlock03.yml
@@ -0,0 +1,21 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by: true
+features: c cprogram
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/psxtmtests/psxtmrwlock03/init.c
+- testsuites/support/src/tmtests_empty_function.c
+- testsuites/support/src/tmtests_support.c
+stlib: []
+target: testsuites/psxtmtests/psxtmrwlock03.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/psxtmtests/psxtmrwlock04.yml b/spec/build/testsuites/psxtmtests/psxtmrwlock04.yml
new file mode 100644
index 0000000000..dccc122603
--- /dev/null
+++ b/spec/build/testsuites/psxtmtests/psxtmrwlock04.yml
@@ -0,0 +1,21 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by: true
+features: c cprogram
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/psxtmtests/psxtmrwlock04/init.c
+- testsuites/support/src/tmtests_empty_function.c
+- testsuites/support/src/tmtests_support.c
+stlib: []
+target: testsuites/psxtmtests/psxtmrwlock04.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/psxtmtests/psxtmrwlock05.yml b/spec/build/testsuites/psxtmtests/psxtmrwlock05.yml
new file mode 100644
index 0000000000..0a62296fff
--- /dev/null
+++ b/spec/build/testsuites/psxtmtests/psxtmrwlock05.yml
@@ -0,0 +1,21 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by: true
+features: c cprogram
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/psxtmtests/psxtmrwlock05/init.c
+- testsuites/support/src/tmtests_empty_function.c
+- testsuites/support/src/tmtests_support.c
+stlib: []
+target: testsuites/psxtmtests/psxtmrwlock05.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/psxtmtests/psxtmrwlock06.yml b/spec/build/testsuites/psxtmtests/psxtmrwlock06.yml
new file mode 100644
index 0000000000..9591d67b4b
--- /dev/null
+++ b/spec/build/testsuites/psxtmtests/psxtmrwlock06.yml
@@ -0,0 +1,21 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by: true
+features: c cprogram
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/psxtmtests/psxtmrwlock06/init.c
+- testsuites/support/src/tmtests_empty_function.c
+- testsuites/support/src/tmtests_support.c
+stlib: []
+target: testsuites/psxtmtests/psxtmrwlock06.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/psxtmtests/psxtmrwlock07.yml b/spec/build/testsuites/psxtmtests/psxtmrwlock07.yml
new file mode 100644
index 0000000000..f116a3823a
--- /dev/null
+++ b/spec/build/testsuites/psxtmtests/psxtmrwlock07.yml
@@ -0,0 +1,21 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by: true
+features: c cprogram
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/psxtmtests/psxtmrwlock07/init.c
+- testsuites/support/src/tmtests_empty_function.c
+- testsuites/support/src/tmtests_support.c
+stlib: []
+target: testsuites/psxtmtests/psxtmrwlock07.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/psxtmtests/psxtmsem01.yml b/spec/build/testsuites/psxtmtests/psxtmsem01.yml
new file mode 100644
index 0000000000..e28152e398
--- /dev/null
+++ b/spec/build/testsuites/psxtmtests/psxtmsem01.yml
@@ -0,0 +1,21 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by: true
+features: c cprogram
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/psxtmtests/psxtmsem01/init.c
+- testsuites/support/src/tmtests_empty_function.c
+- testsuites/support/src/tmtests_support.c
+stlib: []
+target: testsuites/psxtmtests/psxtmsem01.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/psxtmtests/psxtmsem02.yml b/spec/build/testsuites/psxtmtests/psxtmsem02.yml
new file mode 100644
index 0000000000..dc1e6c98b0
--- /dev/null
+++ b/spec/build/testsuites/psxtmtests/psxtmsem02.yml
@@ -0,0 +1,21 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by: true
+features: c cprogram
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/psxtmtests/psxtmsem02/init.c
+- testsuites/support/src/tmtests_empty_function.c
+- testsuites/support/src/tmtests_support.c
+stlib: []
+target: testsuites/psxtmtests/psxtmsem02.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/psxtmtests/psxtmsem03.yml b/spec/build/testsuites/psxtmtests/psxtmsem03.yml
new file mode 100644
index 0000000000..c4f3355f00
--- /dev/null
+++ b/spec/build/testsuites/psxtmtests/psxtmsem03.yml
@@ -0,0 +1,21 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by: true
+features: c cprogram
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/psxtmtests/psxtmsem03/init.c
+- testsuites/support/src/tmtests_empty_function.c
+- testsuites/support/src/tmtests_support.c
+stlib: []
+target: testsuites/psxtmtests/psxtmsem03.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/psxtmtests/psxtmsem04.yml b/spec/build/testsuites/psxtmtests/psxtmsem04.yml
new file mode 100644
index 0000000000..63184ecf78
--- /dev/null
+++ b/spec/build/testsuites/psxtmtests/psxtmsem04.yml
@@ -0,0 +1,21 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by: true
+features: c cprogram
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/psxtmtests/psxtmsem04/init.c
+- testsuites/support/src/tmtests_empty_function.c
+- testsuites/support/src/tmtests_support.c
+stlib: []
+target: testsuites/psxtmtests/psxtmsem04.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/psxtmtests/psxtmsem05.yml b/spec/build/testsuites/psxtmtests/psxtmsem05.yml
new file mode 100644
index 0000000000..d7176d0015
--- /dev/null
+++ b/spec/build/testsuites/psxtmtests/psxtmsem05.yml
@@ -0,0 +1,21 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by: true
+features: c cprogram
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/psxtmtests/psxtmsem05/init.c
+- testsuites/support/src/tmtests_empty_function.c
+- testsuites/support/src/tmtests_support.c
+stlib: []
+target: testsuites/psxtmtests/psxtmsem05.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/psxtmtests/psxtmsleep01.yml b/spec/build/testsuites/psxtmtests/psxtmsleep01.yml
new file mode 100644
index 0000000000..e8e241e973
--- /dev/null
+++ b/spec/build/testsuites/psxtmtests/psxtmsleep01.yml
@@ -0,0 +1,21 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by: true
+features: c cprogram
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/psxtmtests/psxtmsleep01/init.c
+- testsuites/support/src/tmtests_empty_function.c
+- testsuites/support/src/tmtests_support.c
+stlib: []
+target: testsuites/psxtmtests/psxtmsleep01.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/psxtmtests/psxtmsleep02.yml b/spec/build/testsuites/psxtmtests/psxtmsleep02.yml
new file mode 100644
index 0000000000..750dfb18aa
--- /dev/null
+++ b/spec/build/testsuites/psxtmtests/psxtmsleep02.yml
@@ -0,0 +1,21 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by: true
+features: c cprogram
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/psxtmtests/psxtmsleep02/init.c
+- testsuites/support/src/tmtests_empty_function.c
+- testsuites/support/src/tmtests_support.c
+stlib: []
+target: testsuites/psxtmtests/psxtmsleep02.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/psxtmtests/psxtmthread01.yml b/spec/build/testsuites/psxtmtests/psxtmthread01.yml
new file mode 100644
index 0000000000..db341b18e4
--- /dev/null
+++ b/spec/build/testsuites/psxtmtests/psxtmthread01.yml
@@ -0,0 +1,21 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by: true
+features: c cprogram
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/psxtmtests/psxtmthread01/init.c
+- testsuites/support/src/tmtests_empty_function.c
+- testsuites/support/src/tmtests_support.c
+stlib: []
+target: testsuites/psxtmtests/psxtmthread01.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/psxtmtests/psxtmthread02.yml b/spec/build/testsuites/psxtmtests/psxtmthread02.yml
new file mode 100644
index 0000000000..e6308973ee
--- /dev/null
+++ b/spec/build/testsuites/psxtmtests/psxtmthread02.yml
@@ -0,0 +1,21 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by: true
+features: c cprogram
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/psxtmtests/psxtmthread02/init.c
+- testsuites/support/src/tmtests_empty_function.c
+- testsuites/support/src/tmtests_support.c
+stlib: []
+target: testsuites/psxtmtests/psxtmthread02.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/psxtmtests/psxtmthread03.yml b/spec/build/testsuites/psxtmtests/psxtmthread03.yml
new file mode 100644
index 0000000000..13d1b5c594
--- /dev/null
+++ b/spec/build/testsuites/psxtmtests/psxtmthread03.yml
@@ -0,0 +1,21 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by: true
+features: c cprogram
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/psxtmtests/psxtmthread03/init.c
+- testsuites/support/src/tmtests_empty_function.c
+- testsuites/support/src/tmtests_support.c
+stlib: []
+target: testsuites/psxtmtests/psxtmthread03.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/psxtmtests/psxtmthread04.yml b/spec/build/testsuites/psxtmtests/psxtmthread04.yml
new file mode 100644
index 0000000000..b23d627ad3
--- /dev/null
+++ b/spec/build/testsuites/psxtmtests/psxtmthread04.yml
@@ -0,0 +1,21 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by: true
+features: c cprogram
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/psxtmtests/psxtmthread04/init.c
+- testsuites/support/src/tmtests_empty_function.c
+- testsuites/support/src/tmtests_support.c
+stlib: []
+target: testsuites/psxtmtests/psxtmthread04.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/psxtmtests/psxtmthread05.yml b/spec/build/testsuites/psxtmtests/psxtmthread05.yml
new file mode 100644
index 0000000000..ad58179aa1
--- /dev/null
+++ b/spec/build/testsuites/psxtmtests/psxtmthread05.yml
@@ -0,0 +1,21 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by: true
+features: c cprogram
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/psxtmtests/psxtmthread05/init.c
+- testsuites/support/src/tmtests_empty_function.c
+- testsuites/support/src/tmtests_support.c
+stlib: []
+target: testsuites/psxtmtests/psxtmthread05.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/psxtmtests/psxtmthread06.yml b/spec/build/testsuites/psxtmtests/psxtmthread06.yml
new file mode 100644
index 0000000000..5af6d71a94
--- /dev/null
+++ b/spec/build/testsuites/psxtmtests/psxtmthread06.yml
@@ -0,0 +1,21 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by: true
+features: c cprogram
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/psxtmtests/psxtmthread06/init.c
+- testsuites/support/src/tmtests_empty_function.c
+- testsuites/support/src/tmtests_support.c
+stlib: []
+target: testsuites/psxtmtests/psxtmthread06.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/psxtmtests/psxtmthreadattr01.yml b/spec/build/testsuites/psxtmtests/psxtmthreadattr01.yml
new file mode 100644
index 0000000000..cbbecc27cc
--- /dev/null
+++ b/spec/build/testsuites/psxtmtests/psxtmthreadattr01.yml
@@ -0,0 +1,21 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by: true
+features: c cprogram
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/psxtmtests/psxtmthreadattr01/init.c
+- testsuites/support/src/tmtests_empty_function.c
+- testsuites/support/src/tmtests_support.c
+stlib: []
+target: testsuites/psxtmtests/psxtmthreadattr01.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/rhealstone/grp.yml b/spec/build/testsuites/rhealstone/grp.yml
new file mode 100644
index 0000000000..272c65b22d
--- /dev/null
+++ b/spec/build/testsuites/rhealstone/grp.yml
@@ -0,0 +1,31 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: group
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+enabled-by:
+- BUILD_TESTS
+- BUILD_RHEALSTONE
+includes:
+- testsuites/support/include
+- testsuites/tmtests/include
+install: []
+ldflags:
+- -Wl,--wrap=printf
+- -Wl,--wrap=puts
+links:
+- role: build-dependency
+ uid: rhdeadlockbrk
+- role: build-dependency
+ uid: rhilatency
+- role: build-dependency
+ uid: rhmlatency
+- role: build-dependency
+ uid: rhsemshuffle
+- role: build-dependency
+ uid: rhtaskpreempt
+- role: build-dependency
+ uid: rhtaskswitch
+type: build
+use-after:
+- rtemstest
+use-before: []
diff --git a/spec/build/testsuites/rhealstone/rhdeadlockbrk.yml b/spec/build/testsuites/rhealstone/rhdeadlockbrk.yml
new file mode 100644
index 0000000000..4746406f79
--- /dev/null
+++ b/spec/build/testsuites/rhealstone/rhdeadlockbrk.yml
@@ -0,0 +1,19 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by: true
+features: c cprogram
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/rhealstone/rhdeadlockbrk/deadlockbrk.c
+stlib: []
+target: testsuites/rhealstone/rhdeadlockbrk.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/rhealstone/rhilatency.yml b/spec/build/testsuites/rhealstone/rhilatency.yml
new file mode 100644
index 0000000000..35b5229932
--- /dev/null
+++ b/spec/build/testsuites/rhealstone/rhilatency.yml
@@ -0,0 +1,19 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by: true
+features: c cprogram
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/rhealstone/rhilatency/ilatency.c
+stlib: []
+target: testsuites/rhealstone/rhilatency.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/rhealstone/rhmlatency.yml b/spec/build/testsuites/rhealstone/rhmlatency.yml
new file mode 100644
index 0000000000..8939823d4d
--- /dev/null
+++ b/spec/build/testsuites/rhealstone/rhmlatency.yml
@@ -0,0 +1,19 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by: true
+features: c cprogram
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/rhealstone/rhmlatency/mlatency.c
+stlib: []
+target: testsuites/rhealstone/rhmlatency.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/rhealstone/rhsemshuffle.yml b/spec/build/testsuites/rhealstone/rhsemshuffle.yml
new file mode 100644
index 0000000000..e3ea7ec012
--- /dev/null
+++ b/spec/build/testsuites/rhealstone/rhsemshuffle.yml
@@ -0,0 +1,19 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by: true
+features: c cprogram
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/rhealstone/rhsemshuffle/semshuffle.c
+stlib: []
+target: testsuites/rhealstone/rhsemshuffle.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/rhealstone/rhtaskpreempt.yml b/spec/build/testsuites/rhealstone/rhtaskpreempt.yml
new file mode 100644
index 0000000000..e2a3b8d2ad
--- /dev/null
+++ b/spec/build/testsuites/rhealstone/rhtaskpreempt.yml
@@ -0,0 +1,19 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by: true
+features: c cprogram
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/rhealstone/rhtaskpreempt/taskpreempt.c
+stlib: []
+target: testsuites/rhealstone/rhtaskpreempt.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/rhealstone/rhtaskswitch.yml b/spec/build/testsuites/rhealstone/rhtaskswitch.yml
new file mode 100644
index 0000000000..12cfacb790
--- /dev/null
+++ b/spec/build/testsuites/rhealstone/rhtaskswitch.yml
@@ -0,0 +1,19 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by: true
+features: c cprogram
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/rhealstone/rhtaskswitch/taskswitch.c
+stlib: []
+target: testsuites/rhealstone/rhtaskswitch.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/samples/basempnode1.yml b/spec/build/testsuites/samples/basempnode1.yml
new file mode 100644
index 0000000000..e4da6b6171
--- /dev/null
+++ b/spec/build/testsuites/samples/basempnode1.yml
@@ -0,0 +1,21 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by:
+- RTEMS_MULTIPROCESSING
+features: c cprogram
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/samples/base_mp/init1.c
+- testsuites/samples/base_mp/apptask.c
+stlib: []
+target: testsuites/samples/base_mp_node1.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/samples/basempnode2.yml b/spec/build/testsuites/samples/basempnode2.yml
new file mode 100644
index 0000000000..6a83bc67be
--- /dev/null
+++ b/spec/build/testsuites/samples/basempnode2.yml
@@ -0,0 +1,21 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by:
+- RTEMS_MULTIPROCESSING
+features: c cprogram
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/samples/base_mp/init2.c
+- testsuites/samples/base_mp/apptask.c
+stlib: []
+target: testsuites/samples/base_mp_node2.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/samples/basesp.yml b/spec/build/testsuites/samples/basesp.yml
new file mode 100644
index 0000000000..8431be7e2a
--- /dev/null
+++ b/spec/build/testsuites/samples/basesp.yml
@@ -0,0 +1,20 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by: true
+features: c cprogram
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/samples/base_sp/init.c
+- testsuites/samples/base_sp/apptask.c
+stlib: []
+target: testsuites/samples/base_sp.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/samples/capture.yml b/spec/build/testsuites/samples/capture.yml
new file mode 100644
index 0000000000..ad452f24d4
--- /dev/null
+++ b/spec/build/testsuites/samples/capture.yml
@@ -0,0 +1,20 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by: true
+features: c cprogram
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/samples/capture/init.c
+- testsuites/samples/capture/test1.c
+stlib: []
+target: testsuites/samples/capture.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/samples/cdtest.yml b/spec/build/testsuites/samples/cdtest.yml
new file mode 100644
index 0000000000..120076c884
--- /dev/null
+++ b/spec/build/testsuites/samples/cdtest.yml
@@ -0,0 +1,20 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by: true
+features: c cxx cxxprogram
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/samples/cdtest/init.c
+- testsuites/samples/cdtest/main.cc
+stlib: []
+target: testsuites/samples/cdtest.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/samples/fileio.yml b/spec/build/testsuites/samples/fileio.yml
new file mode 100644
index 0000000000..aaf81659ee
--- /dev/null
+++ b/spec/build/testsuites/samples/fileio.yml
@@ -0,0 +1,19 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by: true
+features: c cprogram
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/samples/fileio/init.c
+stlib: []
+target: testsuites/samples/fileio.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/samples/grp.yml b/spec/build/testsuites/samples/grp.yml
new file mode 100644
index 0000000000..c7591dc551
--- /dev/null
+++ b/spec/build/testsuites/samples/grp.yml
@@ -0,0 +1,48 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: group
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+enabled-by:
+- BUILD_TESTS
+- BUILD_SAMPLES
+includes:
+- testsuites/support/include
+install: []
+ldflags:
+- -Wl,--wrap=printf
+- -Wl,--wrap=puts
+links:
+- role: build-dependency
+ uid: basempnode1
+- role: build-dependency
+ uid: basempnode2
+- role: build-dependency
+ uid: basesp
+- role: build-dependency
+ uid: capture
+- role: build-dependency
+ uid: cdtest
+- role: build-dependency
+ uid: fileio
+- role: build-dependency
+ uid: hello
+- role: build-dependency
+ uid: iostream
+- role: build-dependency
+ uid: loopback
+- role: build-dependency
+ uid: minimum
+- role: build-dependency
+ uid: nsecs
+- role: build-dependency
+ uid: paranoia
+- role: build-dependency
+ uid: pppd
+- role: build-dependency
+ uid: ticker
+- role: build-dependency
+ uid: unlimited
+type: build
+use-after:
+- rtemstest
+use-before: []
diff --git a/spec/build/testsuites/samples/hello.yml b/spec/build/testsuites/samples/hello.yml
new file mode 100644
index 0000000000..8919a41886
--- /dev/null
+++ b/spec/build/testsuites/samples/hello.yml
@@ -0,0 +1,19 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by: true
+features: c cprogram
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/samples/hello/init.c
+stlib: []
+target: testsuites/samples/hello.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/samples/iostream.yml b/spec/build/testsuites/samples/iostream.yml
new file mode 100644
index 0000000000..97626895fe
--- /dev/null
+++ b/spec/build/testsuites/samples/iostream.yml
@@ -0,0 +1,19 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by: true
+features: cxx cxxprogram
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/samples/iostream/init.cc
+stlib: []
+target: testsuites/samples/iostream.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/samples/loopback.yml b/spec/build/testsuites/samples/loopback.yml
new file mode 100644
index 0000000000..09a816f9cc
--- /dev/null
+++ b/spec/build/testsuites/samples/loopback.yml
@@ -0,0 +1,21 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by:
+- RTEMS_NETWORKING
+features: c cprogram
+includes:
+- cpukit/libnetworking
+ldflags: []
+links: []
+source:
+- testsuites/samples/loopback/init.c
+stlib: []
+target: testsuites/samples/loopback.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/samples/minimum.yml b/spec/build/testsuites/samples/minimum.yml
new file mode 100644
index 0000000000..4a97a86f2f
--- /dev/null
+++ b/spec/build/testsuites/samples/minimum.yml
@@ -0,0 +1,19 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by: true
+features: c cprogram
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/samples/minimum/init.c
+stlib: []
+target: testsuites/samples/minimum.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/samples/nsecs.yml b/spec/build/testsuites/samples/nsecs.yml
new file mode 100644
index 0000000000..7f0c9827ee
--- /dev/null
+++ b/spec/build/testsuites/samples/nsecs.yml
@@ -0,0 +1,20 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by: true
+features: c cprogram
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/samples/nsecs/init.c
+- testsuites/samples/nsecs/empty.c
+stlib: []
+target: testsuites/samples/nsecs.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/samples/paranoia.yml b/spec/build/testsuites/samples/paranoia.yml
new file mode 100644
index 0000000000..39b2850f1e
--- /dev/null
+++ b/spec/build/testsuites/samples/paranoia.yml
@@ -0,0 +1,21 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by: true
+features: c cprogram
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/samples/paranoia/init.c
+- testsuites/samples/paranoia/paranoia.c
+stlib:
+- m
+target: testsuites/samples/paranoia.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/samples/pppd.yml b/spec/build/testsuites/samples/pppd.yml
new file mode 100644
index 0000000000..8747562be8
--- /dev/null
+++ b/spec/build/testsuites/samples/pppd.yml
@@ -0,0 +1,25 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by:
+- and:
+ - RTEMS_NETWORKING
+ - not: RTEMS_SMP
+features: c cprogram
+includes:
+- cpukit/libnetworking
+ldflags: []
+links: []
+source:
+- testsuites/samples/pppd/init.c
+- testsuites/samples/pppd/pppdapp.c
+stlib: []
+target: testsuites/samples/pppd.exe
+type: build
+use-after:
+- pppd
+use-before: []
diff --git a/spec/build/testsuites/samples/ticker.yml b/spec/build/testsuites/samples/ticker.yml
new file mode 100644
index 0000000000..55a2d433ee
--- /dev/null
+++ b/spec/build/testsuites/samples/ticker.yml
@@ -0,0 +1,20 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by: true
+features: c cprogram
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/samples/ticker/init.c
+- testsuites/samples/ticker/tasks.c
+stlib: []
+target: testsuites/samples/ticker.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/samples/unlimited.yml b/spec/build/testsuites/samples/unlimited.yml
new file mode 100644
index 0000000000..b468da80be
--- /dev/null
+++ b/spec/build/testsuites/samples/unlimited.yml
@@ -0,0 +1,22 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by: true
+features: c cprogram
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/samples/unlimited/init.c
+- testsuites/samples/unlimited/test1.c
+- testsuites/samples/unlimited/test2.c
+- testsuites/samples/unlimited/test3.c
+stlib: []
+target: testsuites/samples/unlimited.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/smptests/grp.yml b/spec/build/testsuites/smptests/grp.yml
new file mode 100644
index 0000000000..771708503e
--- /dev/null
+++ b/spec/build/testsuites/smptests/grp.yml
@@ -0,0 +1,141 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: group
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+enabled-by:
+- and:
+ - RTEMS_SMP
+ - or:
+ - BUILD_TESTS
+ - BUILD_SMPTESTS
+includes:
+- testsuites/support/include
+install: []
+ldflags:
+- -Wl,--wrap=printf
+- -Wl,--wrap=puts
+links:
+- role: build-dependency
+ uid: smp01
+- role: build-dependency
+ uid: smp02
+- role: build-dependency
+ uid: smp03
+- role: build-dependency
+ uid: smp05
+- role: build-dependency
+ uid: smp07
+- role: build-dependency
+ uid: smp08
+- role: build-dependency
+ uid: smp09
+- role: build-dependency
+ uid: smpaffinity01
+- role: build-dependency
+ uid: smpatomic01
+- role: build-dependency
+ uid: smpcache01
+- role: build-dependency
+ uid: smpcapture01
+- role: build-dependency
+ uid: smpcapture02
+- role: build-dependency
+ uid: smpclock01
+- role: build-dependency
+ uid: smpfatal01
+- role: build-dependency
+ uid: smpfatal02
+- role: build-dependency
+ uid: smpfatal03
+- role: build-dependency
+ uid: smpfatal04
+- role: build-dependency
+ uid: smpfatal05
+- role: build-dependency
+ uid: smpfatal06
+- role: build-dependency
+ uid: smpfatal08
+- role: build-dependency
+ uid: smpfatal09
+- role: build-dependency
+ uid: smpipi01
+- role: build-dependency
+ uid: smpirqs01
+- role: build-dependency
+ uid: smpload01
+- role: build-dependency
+ uid: smplock01
+- role: build-dependency
+ uid: smpmigration01
+- role: build-dependency
+ uid: smpmigration02
+- role: build-dependency
+ uid: smpmrsp01
+- role: build-dependency
+ uid: smpmulticast01
+- role: build-dependency
+ uid: smpmutex01
+- role: build-dependency
+ uid: smpmutex02
+- role: build-dependency
+ uid: smpopenmp01
+- role: build-dependency
+ uid: smppsxaffinity01
+- role: build-dependency
+ uid: smppsxaffinity02
+- role: build-dependency
+ uid: smppsxmutex01
+- role: build-dependency
+ uid: smppsxsignal01
+- role: build-dependency
+ uid: smpschedaffinity01
+- role: build-dependency
+ uid: smpschedaffinity02
+- role: build-dependency
+ uid: smpschedaffinity03
+- role: build-dependency
+ uid: smpschedaffinity04
+- role: build-dependency
+ uid: smpschedaffinity05
+- role: build-dependency
+ uid: smpschededf01
+- role: build-dependency
+ uid: smpschededf02
+- role: build-dependency
+ uid: smpschededf03
+- role: build-dependency
+ uid: smpschededf04
+- role: build-dependency
+ uid: smpschedsem01
+- role: build-dependency
+ uid: smpscheduler01
+- role: build-dependency
+ uid: smpscheduler02
+- role: build-dependency
+ uid: smpscheduler03
+- role: build-dependency
+ uid: smpscheduler04
+- role: build-dependency
+ uid: smpscheduler05
+- role: build-dependency
+ uid: smpscheduler06
+- role: build-dependency
+ uid: smpscheduler07
+- role: build-dependency
+ uid: smpsignal01
+- role: build-dependency
+ uid: smpstrongapa01
+- role: build-dependency
+ uid: smpswitchextension01
+- role: build-dependency
+ uid: smpthreadlife01
+- role: build-dependency
+ uid: smpthreadpin01
+- role: build-dependency
+ uid: smpunsupported01
+- role: build-dependency
+ uid: smpwakeafter01
+type: build
+use-after:
+- rtemstest
+use-before: []
diff --git a/spec/build/testsuites/smptests/smp01.yml b/spec/build/testsuites/smptests/smp01.yml
new file mode 100644
index 0000000000..19ab2463e5
--- /dev/null
+++ b/spec/build/testsuites/smptests/smp01.yml
@@ -0,0 +1,22 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by:
+- RTEMS_SMP
+features: c cprogram
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/smptests/smp01/init.c
+- testsuites/smptests/smp01/tasks.c
+- testsuites/support/src/locked_print.c
+stlib: []
+target: testsuites/smptests/smp01.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/smptests/smp02.yml b/spec/build/testsuites/smptests/smp02.yml
new file mode 100644
index 0000000000..6b89c3538d
--- /dev/null
+++ b/spec/build/testsuites/smptests/smp02.yml
@@ -0,0 +1,22 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by:
+- RTEMS_SMP
+features: c cprogram
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/smptests/smp02/init.c
+- testsuites/smptests/smp02/tasks.c
+- testsuites/support/src/locked_print.c
+stlib: []
+target: testsuites/smptests/smp02.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/smptests/smp03.yml b/spec/build/testsuites/smptests/smp03.yml
new file mode 100644
index 0000000000..3a484b42c7
--- /dev/null
+++ b/spec/build/testsuites/smptests/smp03.yml
@@ -0,0 +1,22 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by:
+- RTEMS_SMP
+features: c cprogram
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/smptests/smp03/init.c
+- testsuites/smptests/smp03/tasks.c
+- testsuites/support/src/locked_print.c
+stlib: []
+target: testsuites/smptests/smp03.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/smptests/smp05.yml b/spec/build/testsuites/smptests/smp05.yml
new file mode 100644
index 0000000000..4b72e3c644
--- /dev/null
+++ b/spec/build/testsuites/smptests/smp05.yml
@@ -0,0 +1,21 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by:
+- RTEMS_SMP
+features: c cprogram
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/smptests/smp05/init.c
+- testsuites/support/src/locked_print.c
+stlib: []
+target: testsuites/smptests/smp05.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/smptests/smp07.yml b/spec/build/testsuites/smptests/smp07.yml
new file mode 100644
index 0000000000..66f54a0506
--- /dev/null
+++ b/spec/build/testsuites/smptests/smp07.yml
@@ -0,0 +1,21 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by:
+- RTEMS_SMP
+features: c cprogram
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/smptests/smp07/init.c
+- testsuites/support/src/locked_print.c
+stlib: []
+target: testsuites/smptests/smp07.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/smptests/smp08.yml b/spec/build/testsuites/smptests/smp08.yml
new file mode 100644
index 0000000000..52a282e2f5
--- /dev/null
+++ b/spec/build/testsuites/smptests/smp08.yml
@@ -0,0 +1,22 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by:
+- RTEMS_SMP
+features: c cprogram
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/smptests/smp08/init.c
+- testsuites/smptests/smp08/tasks.c
+- testsuites/support/src/locked_print.c
+stlib: []
+target: testsuites/smptests/smp08.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/smptests/smp09.yml b/spec/build/testsuites/smptests/smp09.yml
new file mode 100644
index 0000000000..718b7970a5
--- /dev/null
+++ b/spec/build/testsuites/smptests/smp09.yml
@@ -0,0 +1,21 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by:
+- RTEMS_SMP
+features: c cprogram
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/smptests/smp09/init.c
+- testsuites/support/src/locked_print.c
+stlib: []
+target: testsuites/smptests/smp09.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/smptests/smpaffinity01.yml b/spec/build/testsuites/smptests/smpaffinity01.yml
new file mode 100644
index 0000000000..b9f61f5d01
--- /dev/null
+++ b/spec/build/testsuites/smptests/smpaffinity01.yml
@@ -0,0 +1,20 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by:
+- RTEMS_SMP
+features: c cprogram
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/smptests/smpaffinity01/init.c
+stlib: []
+target: testsuites/smptests/smpaffinity01.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/smptests/smpatomic01.yml b/spec/build/testsuites/smptests/smpatomic01.yml
new file mode 100644
index 0000000000..98c5c3a219
--- /dev/null
+++ b/spec/build/testsuites/smptests/smpatomic01.yml
@@ -0,0 +1,20 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by:
+- RTEMS_SMP
+features: c cprogram
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/smptests/smpatomic01/init.c
+stlib: []
+target: testsuites/smptests/smpatomic01.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/smptests/smpcache01.yml b/spec/build/testsuites/smptests/smpcache01.yml
new file mode 100644
index 0000000000..e3ae091117
--- /dev/null
+++ b/spec/build/testsuites/smptests/smpcache01.yml
@@ -0,0 +1,20 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by:
+- RTEMS_SMP
+features: c cprogram
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/smptests/smpcache01/init.c
+stlib: []
+target: testsuites/smptests/smpcache01.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/smptests/smpcapture01.yml b/spec/build/testsuites/smptests/smpcapture01.yml
new file mode 100644
index 0000000000..9bc6488250
--- /dev/null
+++ b/spec/build/testsuites/smptests/smpcapture01.yml
@@ -0,0 +1,20 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by:
+- RTEMS_SMP
+features: c cprogram
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/smptests/smpcapture01/init.c
+stlib: []
+target: testsuites/smptests/smpcapture01.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/smptests/smpcapture02.yml b/spec/build/testsuites/smptests/smpcapture02.yml
new file mode 100644
index 0000000000..e4be8239ac
--- /dev/null
+++ b/spec/build/testsuites/smptests/smpcapture02.yml
@@ -0,0 +1,20 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by:
+- RTEMS_SMP
+features: c cprogram
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/smptests/smpcapture02/init.c
+stlib: []
+target: testsuites/smptests/smpcapture02.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/smptests/smpclock01.yml b/spec/build/testsuites/smptests/smpclock01.yml
new file mode 100644
index 0000000000..c8850c7708
--- /dev/null
+++ b/spec/build/testsuites/smptests/smpclock01.yml
@@ -0,0 +1,21 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by:
+- RTEMS_SMP
+features: c cprogram
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/smptests/smpclock01/init.c
+- testsuites/support/src/spin.c
+stlib: []
+target: testsuites/smptests/smpclock01.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/smptests/smpfatal01.yml b/spec/build/testsuites/smptests/smpfatal01.yml
new file mode 100644
index 0000000000..91c07bdec5
--- /dev/null
+++ b/spec/build/testsuites/smptests/smpfatal01.yml
@@ -0,0 +1,20 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by:
+- RTEMS_SMP
+features: c cprogram
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/smptests/smpfatal01/init.c
+stlib: []
+target: testsuites/smptests/smpfatal01.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/smptests/smpfatal02.yml b/spec/build/testsuites/smptests/smpfatal02.yml
new file mode 100644
index 0000000000..8bf3cc8f3a
--- /dev/null
+++ b/spec/build/testsuites/smptests/smpfatal02.yml
@@ -0,0 +1,20 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by:
+- RTEMS_SMP
+features: c cprogram
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/smptests/smpfatal02/init.c
+stlib: []
+target: testsuites/smptests/smpfatal02.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/smptests/smpfatal03.yml b/spec/build/testsuites/smptests/smpfatal03.yml
new file mode 100644
index 0000000000..5a48a8d482
--- /dev/null
+++ b/spec/build/testsuites/smptests/smpfatal03.yml
@@ -0,0 +1,20 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by:
+- RTEMS_SMP
+features: c cprogram
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/smptests/smpfatal03/init.c
+stlib: []
+target: testsuites/smptests/smpfatal03.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/smptests/smpfatal04.yml b/spec/build/testsuites/smptests/smpfatal04.yml
new file mode 100644
index 0000000000..5340f9e47c
--- /dev/null
+++ b/spec/build/testsuites/smptests/smpfatal04.yml
@@ -0,0 +1,20 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by:
+- RTEMS_SMP
+features: c cprogram
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/smptests/smpfatal04/init.c
+stlib: []
+target: testsuites/smptests/smpfatal04.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/smptests/smpfatal05.yml b/spec/build/testsuites/smptests/smpfatal05.yml
new file mode 100644
index 0000000000..fd0ac2e907
--- /dev/null
+++ b/spec/build/testsuites/smptests/smpfatal05.yml
@@ -0,0 +1,20 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by:
+- RTEMS_SMP
+features: c cprogram
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/smptests/smpfatal05/init.c
+stlib: []
+target: testsuites/smptests/smpfatal05.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/smptests/smpfatal06.yml b/spec/build/testsuites/smptests/smpfatal06.yml
new file mode 100644
index 0000000000..f361f8f0c7
--- /dev/null
+++ b/spec/build/testsuites/smptests/smpfatal06.yml
@@ -0,0 +1,20 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by:
+- RTEMS_SMP
+features: c cprogram
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/smptests/smpfatal06/init.c
+stlib: []
+target: testsuites/smptests/smpfatal06.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/smptests/smpfatal08.yml b/spec/build/testsuites/smptests/smpfatal08.yml
new file mode 100644
index 0000000000..806970f8cb
--- /dev/null
+++ b/spec/build/testsuites/smptests/smpfatal08.yml
@@ -0,0 +1,20 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by:
+- RTEMS_SMP
+features: c cprogram
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/smptests/smpfatal08/init.c
+stlib: []
+target: testsuites/smptests/smpfatal08.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/smptests/smpfatal09.yml b/spec/build/testsuites/smptests/smpfatal09.yml
new file mode 100644
index 0000000000..a44e8b56ed
--- /dev/null
+++ b/spec/build/testsuites/smptests/smpfatal09.yml
@@ -0,0 +1,20 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by:
+- RTEMS_SMP
+features: c cprogram
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/smptests/smpfatal09/init.c
+stlib: []
+target: testsuites/smptests/smpfatal09.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/smptests/smpipi01.yml b/spec/build/testsuites/smptests/smpipi01.yml
new file mode 100644
index 0000000000..5c3b89b4de
--- /dev/null
+++ b/spec/build/testsuites/smptests/smpipi01.yml
@@ -0,0 +1,20 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by:
+- RTEMS_SMP
+features: c cprogram
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/smptests/smpipi01/init.c
+stlib: []
+target: testsuites/smptests/smpipi01.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/smptests/smpirqs01.yml b/spec/build/testsuites/smptests/smpirqs01.yml
new file mode 100644
index 0000000000..8e4e86ac09
--- /dev/null
+++ b/spec/build/testsuites/smptests/smpirqs01.yml
@@ -0,0 +1,20 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by:
+- RTEMS_SMP
+features: c cprogram
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/smptests/smpirqs01/init.c
+stlib: []
+target: testsuites/smptests/smpirqs01.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/smptests/smpload01.yml b/spec/build/testsuites/smptests/smpload01.yml
new file mode 100644
index 0000000000..2e6a6b7ae2
--- /dev/null
+++ b/spec/build/testsuites/smptests/smpload01.yml
@@ -0,0 +1,20 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by:
+- RTEMS_SMP
+features: c cprogram
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/smptests/smpload01/init.c
+stlib: []
+target: testsuites/smptests/smpload01.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/smptests/smplock01.yml b/spec/build/testsuites/smptests/smplock01.yml
new file mode 100644
index 0000000000..014e9df96f
--- /dev/null
+++ b/spec/build/testsuites/smptests/smplock01.yml
@@ -0,0 +1,20 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by:
+- RTEMS_SMP
+features: c cprogram
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/smptests/smplock01/init.c
+stlib: []
+target: testsuites/smptests/smplock01.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/smptests/smpmigration01.yml b/spec/build/testsuites/smptests/smpmigration01.yml
new file mode 100644
index 0000000000..551c9f918b
--- /dev/null
+++ b/spec/build/testsuites/smptests/smpmigration01.yml
@@ -0,0 +1,20 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by:
+- RTEMS_SMP
+features: c cprogram
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/smptests/smpmigration01/init.c
+stlib: []
+target: testsuites/smptests/smpmigration01.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/smptests/smpmigration02.yml b/spec/build/testsuites/smptests/smpmigration02.yml
new file mode 100644
index 0000000000..a7462d8700
--- /dev/null
+++ b/spec/build/testsuites/smptests/smpmigration02.yml
@@ -0,0 +1,20 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by:
+- RTEMS_SMP
+features: c cprogram
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/smptests/smpmigration02/init.c
+stlib: []
+target: testsuites/smptests/smpmigration02.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/smptests/smpmrsp01.yml b/spec/build/testsuites/smptests/smpmrsp01.yml
new file mode 100644
index 0000000000..9015b75dad
--- /dev/null
+++ b/spec/build/testsuites/smptests/smpmrsp01.yml
@@ -0,0 +1,20 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by:
+- RTEMS_SMP
+features: c cprogram
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/smptests/smpmrsp01/init.c
+stlib: []
+target: testsuites/smptests/smpmrsp01.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/smptests/smpmulticast01.yml b/spec/build/testsuites/smptests/smpmulticast01.yml
new file mode 100644
index 0000000000..03c72ea618
--- /dev/null
+++ b/spec/build/testsuites/smptests/smpmulticast01.yml
@@ -0,0 +1,20 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by:
+- RTEMS_SMP
+features: c cprogram
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/smptests/smpmulticast01/init.c
+stlib: []
+target: testsuites/smptests/smpmulticast01.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/smptests/smpmutex01.yml b/spec/build/testsuites/smptests/smpmutex01.yml
new file mode 100644
index 0000000000..c4aa6dcd29
--- /dev/null
+++ b/spec/build/testsuites/smptests/smpmutex01.yml
@@ -0,0 +1,20 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by:
+- RTEMS_SMP
+features: c cprogram
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/smptests/smpmutex01/init.c
+stlib: []
+target: testsuites/smptests/smpmutex01.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/smptests/smpmutex02.yml b/spec/build/testsuites/smptests/smpmutex02.yml
new file mode 100644
index 0000000000..550cdaa586
--- /dev/null
+++ b/spec/build/testsuites/smptests/smpmutex02.yml
@@ -0,0 +1,20 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by:
+- RTEMS_SMP
+features: c cprogram
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/smptests/smpmutex02/init.c
+stlib: []
+target: testsuites/smptests/smpmutex02.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/smptests/smpopenmp01.yml b/spec/build/testsuites/smptests/smpopenmp01.yml
new file mode 100644
index 0000000000..932c777ff1
--- /dev/null
+++ b/spec/build/testsuites/smptests/smpopenmp01.yml
@@ -0,0 +1,22 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags:
+- -fopenmp
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by:
+- RTEMS_SMP
+features: c cprogram
+includes: []
+ldflags:
+- -fopenmp
+links: []
+source:
+- testsuites/smptests/smpopenmp01/init.c
+stlib: []
+target: testsuites/smptests/smpopenmp01.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/smptests/smppsxaffinity01.yml b/spec/build/testsuites/smptests/smppsxaffinity01.yml
new file mode 100644
index 0000000000..9d70baa6ab
--- /dev/null
+++ b/spec/build/testsuites/smptests/smppsxaffinity01.yml
@@ -0,0 +1,20 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by:
+- RTEMS_SMP
+features: c cprogram
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/smptests/smppsxaffinity01/init.c
+stlib: []
+target: testsuites/smptests/smppsxaffinity01.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/smptests/smppsxaffinity02.yml b/spec/build/testsuites/smptests/smppsxaffinity02.yml
new file mode 100644
index 0000000000..bd896970e1
--- /dev/null
+++ b/spec/build/testsuites/smptests/smppsxaffinity02.yml
@@ -0,0 +1,20 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by:
+- RTEMS_SMP
+features: c cprogram
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/smptests/smppsxaffinity02/init.c
+stlib: []
+target: testsuites/smptests/smppsxaffinity02.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/smptests/smppsxmutex01.yml b/spec/build/testsuites/smptests/smppsxmutex01.yml
new file mode 100644
index 0000000000..645b36d4b0
--- /dev/null
+++ b/spec/build/testsuites/smptests/smppsxmutex01.yml
@@ -0,0 +1,20 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by:
+- RTEMS_SMP
+features: c cprogram
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/smptests/smppsxmutex01/init.c
+stlib: []
+target: testsuites/smptests/smppsxmutex01.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/smptests/smppsxsignal01.yml b/spec/build/testsuites/smptests/smppsxsignal01.yml
new file mode 100644
index 0000000000..95549c52cb
--- /dev/null
+++ b/spec/build/testsuites/smptests/smppsxsignal01.yml
@@ -0,0 +1,22 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by:
+- and:
+ - RTEMS_SMP
+ - RTEMS_POSIX_API
+features: c cprogram
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/smptests/smppsxsignal01/init.c
+stlib: []
+target: testsuites/smptests/smppsxsignal01.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/smptests/smpschedaffinity01.yml b/spec/build/testsuites/smptests/smpschedaffinity01.yml
new file mode 100644
index 0000000000..96a4a1cc03
--- /dev/null
+++ b/spec/build/testsuites/smptests/smpschedaffinity01.yml
@@ -0,0 +1,20 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by:
+- RTEMS_SMP
+features: c cprogram
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/smptests/smpschedaffinity01/init.c
+stlib: []
+target: testsuites/smptests/smpschedaffinity01.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/smptests/smpschedaffinity02.yml b/spec/build/testsuites/smptests/smpschedaffinity02.yml
new file mode 100644
index 0000000000..d573232934
--- /dev/null
+++ b/spec/build/testsuites/smptests/smpschedaffinity02.yml
@@ -0,0 +1,20 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by:
+- RTEMS_SMP
+features: c cprogram
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/smptests/smpschedaffinity02/init.c
+stlib: []
+target: testsuites/smptests/smpschedaffinity02.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/smptests/smpschedaffinity03.yml b/spec/build/testsuites/smptests/smpschedaffinity03.yml
new file mode 100644
index 0000000000..b80a48ec24
--- /dev/null
+++ b/spec/build/testsuites/smptests/smpschedaffinity03.yml
@@ -0,0 +1,20 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by:
+- RTEMS_SMP
+features: c cprogram
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/smptests/smpschedaffinity03/init.c
+stlib: []
+target: testsuites/smptests/smpschedaffinity03.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/smptests/smpschedaffinity04.yml b/spec/build/testsuites/smptests/smpschedaffinity04.yml
new file mode 100644
index 0000000000..7328111605
--- /dev/null
+++ b/spec/build/testsuites/smptests/smpschedaffinity04.yml
@@ -0,0 +1,20 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by:
+- RTEMS_SMP
+features: c cprogram
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/smptests/smpschedaffinity04/init.c
+stlib: []
+target: testsuites/smptests/smpschedaffinity04.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/smptests/smpschedaffinity05.yml b/spec/build/testsuites/smptests/smpschedaffinity05.yml
new file mode 100644
index 0000000000..32046be5de
--- /dev/null
+++ b/spec/build/testsuites/smptests/smpschedaffinity05.yml
@@ -0,0 +1,20 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by:
+- RTEMS_SMP
+features: c cprogram
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/smptests/smpschedaffinity05/init.c
+stlib: []
+target: testsuites/smptests/smpschedaffinity05.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/smptests/smpschededf01.yml b/spec/build/testsuites/smptests/smpschededf01.yml
new file mode 100644
index 0000000000..61be8f57fa
--- /dev/null
+++ b/spec/build/testsuites/smptests/smpschededf01.yml
@@ -0,0 +1,20 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by:
+- RTEMS_SMP
+features: c cprogram
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/smptests/smpschededf01/init.c
+stlib: []
+target: testsuites/smptests/smpschededf01.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/smptests/smpschededf02.yml b/spec/build/testsuites/smptests/smpschededf02.yml
new file mode 100644
index 0000000000..db5041a775
--- /dev/null
+++ b/spec/build/testsuites/smptests/smpschededf02.yml
@@ -0,0 +1,20 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by:
+- RTEMS_SMP
+features: c cprogram
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/smptests/smpschededf02/init.c
+stlib: []
+target: testsuites/smptests/smpschededf02.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/smptests/smpschededf03.yml b/spec/build/testsuites/smptests/smpschededf03.yml
new file mode 100644
index 0000000000..0c1af3e521
--- /dev/null
+++ b/spec/build/testsuites/smptests/smpschededf03.yml
@@ -0,0 +1,20 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by:
+- RTEMS_SMP
+features: c cprogram
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/smptests/smpschededf03/init.c
+stlib: []
+target: testsuites/smptests/smpschededf03.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/smptests/smpschededf04.yml b/spec/build/testsuites/smptests/smpschededf04.yml
new file mode 100644
index 0000000000..bd2a2014c2
--- /dev/null
+++ b/spec/build/testsuites/smptests/smpschededf04.yml
@@ -0,0 +1,20 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by:
+- RTEMS_SMP
+features: c cprogram
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/smptests/smpschededf04/init.c
+stlib: []
+target: testsuites/smptests/smpschededf04.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/smptests/smpschedsem01.yml b/spec/build/testsuites/smptests/smpschedsem01.yml
new file mode 100644
index 0000000000..8dde70355a
--- /dev/null
+++ b/spec/build/testsuites/smptests/smpschedsem01.yml
@@ -0,0 +1,20 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by:
+- RTEMS_SMP
+features: c cprogram
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/smptests/smpschedsem01/init.c
+stlib: []
+target: testsuites/smptests/smpschedsem01.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/smptests/smpscheduler01.yml b/spec/build/testsuites/smptests/smpscheduler01.yml
new file mode 100644
index 0000000000..1a79f22afa
--- /dev/null
+++ b/spec/build/testsuites/smptests/smpscheduler01.yml
@@ -0,0 +1,20 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by:
+- RTEMS_SMP
+features: c cprogram
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/smptests/smpscheduler01/init.c
+stlib: []
+target: testsuites/smptests/smpscheduler01.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/smptests/smpscheduler02.yml b/spec/build/testsuites/smptests/smpscheduler02.yml
new file mode 100644
index 0000000000..6fe5224e25
--- /dev/null
+++ b/spec/build/testsuites/smptests/smpscheduler02.yml
@@ -0,0 +1,20 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by:
+- RTEMS_SMP
+features: c cprogram
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/smptests/smpscheduler02/init.c
+stlib: []
+target: testsuites/smptests/smpscheduler02.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/smptests/smpscheduler03.yml b/spec/build/testsuites/smptests/smpscheduler03.yml
new file mode 100644
index 0000000000..957ceb7f33
--- /dev/null
+++ b/spec/build/testsuites/smptests/smpscheduler03.yml
@@ -0,0 +1,21 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by:
+- RTEMS_SMP
+features: c cprogram
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/smptests/smpscheduler03/init.c
+- testsuites/smptests/smpscheduler03/test.c
+stlib: []
+target: testsuites/smptests/smpscheduler03.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/smptests/smpscheduler04.yml b/spec/build/testsuites/smptests/smpscheduler04.yml
new file mode 100644
index 0000000000..3483e7f5c1
--- /dev/null
+++ b/spec/build/testsuites/smptests/smpscheduler04.yml
@@ -0,0 +1,20 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by:
+- RTEMS_SMP
+features: c cprogram
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/smptests/smpscheduler04/init.c
+stlib: []
+target: testsuites/smptests/smpscheduler04.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/smptests/smpscheduler05.yml b/spec/build/testsuites/smptests/smpscheduler05.yml
new file mode 100644
index 0000000000..e365f35d9d
--- /dev/null
+++ b/spec/build/testsuites/smptests/smpscheduler05.yml
@@ -0,0 +1,21 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by:
+- RTEMS_SMP
+features: c cprogram
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/smptests/smpscheduler05/init.c
+- testsuites/smptests/smpscheduler03/test.c
+stlib: []
+target: testsuites/smptests/smpscheduler05.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/smptests/smpscheduler06.yml b/spec/build/testsuites/smptests/smpscheduler06.yml
new file mode 100644
index 0000000000..9255a0227d
--- /dev/null
+++ b/spec/build/testsuites/smptests/smpscheduler06.yml
@@ -0,0 +1,21 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by:
+- RTEMS_SMP
+features: c cprogram
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/smptests/smpscheduler06/init.c
+- testsuites/smptests/smpscheduler03/test.c
+stlib: []
+target: testsuites/smptests/smpscheduler06.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/smptests/smpscheduler07.yml b/spec/build/testsuites/smptests/smpscheduler07.yml
new file mode 100644
index 0000000000..a26aa1f068
--- /dev/null
+++ b/spec/build/testsuites/smptests/smpscheduler07.yml
@@ -0,0 +1,21 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by:
+- RTEMS_SMP
+features: c cprogram
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/smptests/smpscheduler07/init.c
+- testsuites/smptests/smpscheduler03/test.c
+stlib: []
+target: testsuites/smptests/smpscheduler07.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/smptests/smpsignal01.yml b/spec/build/testsuites/smptests/smpsignal01.yml
new file mode 100644
index 0000000000..d2e841bc87
--- /dev/null
+++ b/spec/build/testsuites/smptests/smpsignal01.yml
@@ -0,0 +1,20 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by:
+- RTEMS_SMP
+features: c cprogram
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/smptests/smpsignal01/init.c
+stlib: []
+target: testsuites/smptests/smpsignal01.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/smptests/smpstrongapa01.yml b/spec/build/testsuites/smptests/smpstrongapa01.yml
new file mode 100644
index 0000000000..508c430f19
--- /dev/null
+++ b/spec/build/testsuites/smptests/smpstrongapa01.yml
@@ -0,0 +1,20 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by:
+- RTEMS_SMP
+features: c cprogram
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/smptests/smpstrongapa01/init.c
+stlib: []
+target: testsuites/smptests/smpstrongapa01.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/smptests/smpswitchextension01.yml b/spec/build/testsuites/smptests/smpswitchextension01.yml
new file mode 100644
index 0000000000..8a93f00dd3
--- /dev/null
+++ b/spec/build/testsuites/smptests/smpswitchextension01.yml
@@ -0,0 +1,20 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by:
+- RTEMS_SMP
+features: c cprogram
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/smptests/smpswitchextension01/init.c
+stlib: []
+target: testsuites/smptests/smpswitchextension01.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/smptests/smpthreadlife01.yml b/spec/build/testsuites/smptests/smpthreadlife01.yml
new file mode 100644
index 0000000000..d3a8e17fe9
--- /dev/null
+++ b/spec/build/testsuites/smptests/smpthreadlife01.yml
@@ -0,0 +1,20 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by:
+- RTEMS_SMP
+features: c cprogram
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/smptests/smpthreadlife01/init.c
+stlib: []
+target: testsuites/smptests/smpthreadlife01.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/smptests/smpthreadpin01.yml b/spec/build/testsuites/smptests/smpthreadpin01.yml
new file mode 100644
index 0000000000..9de0166819
--- /dev/null
+++ b/spec/build/testsuites/smptests/smpthreadpin01.yml
@@ -0,0 +1,20 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by:
+- RTEMS_SMP
+features: c cprogram
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/smptests/smpthreadpin01/init.c
+stlib: []
+target: testsuites/smptests/smpthreadpin01.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/smptests/smpunsupported01.yml b/spec/build/testsuites/smptests/smpunsupported01.yml
new file mode 100644
index 0000000000..cb6c040732
--- /dev/null
+++ b/spec/build/testsuites/smptests/smpunsupported01.yml
@@ -0,0 +1,20 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by:
+- RTEMS_SMP
+features: c cprogram
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/smptests/smpunsupported01/init.c
+stlib: []
+target: testsuites/smptests/smpunsupported01.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/smptests/smpwakeafter01.yml b/spec/build/testsuites/smptests/smpwakeafter01.yml
new file mode 100644
index 0000000000..cafe71ff83
--- /dev/null
+++ b/spec/build/testsuites/smptests/smpwakeafter01.yml
@@ -0,0 +1,20 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by:
+- RTEMS_SMP
+features: c cprogram
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/smptests/smpwakeafter01/init.c
+stlib: []
+target: testsuites/smptests/smpwakeafter01.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/sptests/grp.yml b/spec/build/testsuites/sptests/grp.yml
new file mode 100644
index 0000000000..64b0a54b0e
--- /dev/null
+++ b/spec/build/testsuites/sptests/grp.yml
@@ -0,0 +1,452 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: group
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+enabled-by:
+- BUILD_TESTS
+- BUILD_SPTESTS
+includes:
+- testsuites/support/include
+install: []
+ldflags:
+- -Wl,--wrap=printf
+- -Wl,--wrap=puts
+links:
+- role: build-dependency
+ uid: sp01
+- role: build-dependency
+ uid: sp02
+- role: build-dependency
+ uid: sp03
+- role: build-dependency
+ uid: sp04
+- role: build-dependency
+ uid: sp05
+- role: build-dependency
+ uid: sp06
+- role: build-dependency
+ uid: sp07
+- role: build-dependency
+ uid: sp08
+- role: build-dependency
+ uid: sp11
+- role: build-dependency
+ uid: sp12
+- role: build-dependency
+ uid: sp13
+- role: build-dependency
+ uid: sp14
+- role: build-dependency
+ uid: sp15
+- role: build-dependency
+ uid: sp16
+- role: build-dependency
+ uid: sp17
+- role: build-dependency
+ uid: sp18
+- role: build-dependency
+ uid: sp19
+- role: build-dependency
+ uid: sp20
+- role: build-dependency
+ uid: sp2038
+- role: build-dependency
+ uid: sp21
+- role: build-dependency
+ uid: sp22
+- role: build-dependency
+ uid: sp23
+- role: build-dependency
+ uid: sp24
+- role: build-dependency
+ uid: sp25
+- role: build-dependency
+ uid: sp26
+- role: build-dependency
+ uid: sp27
+- role: build-dependency
+ uid: sp27a
+- role: build-dependency
+ uid: sp29
+- role: build-dependency
+ uid: sp30
+- role: build-dependency
+ uid: sp31
+- role: build-dependency
+ uid: sp32
+- role: build-dependency
+ uid: sp33
+- role: build-dependency
+ uid: sp34
+- role: build-dependency
+ uid: sp35
+- role: build-dependency
+ uid: sp37
+- role: build-dependency
+ uid: sp38
+- role: build-dependency
+ uid: sp40
+- role: build-dependency
+ uid: sp41
+- role: build-dependency
+ uid: sp42
+- role: build-dependency
+ uid: sp43
+- role: build-dependency
+ uid: sp44
+- role: build-dependency
+ uid: sp45
+- role: build-dependency
+ uid: sp46
+- role: build-dependency
+ uid: sp47
+- role: build-dependency
+ uid: sp48
+- role: build-dependency
+ uid: sp49
+- role: build-dependency
+ uid: sp50
+- role: build-dependency
+ uid: sp51
+- role: build-dependency
+ uid: sp52
+- role: build-dependency
+ uid: sp53
+- role: build-dependency
+ uid: sp54
+- role: build-dependency
+ uid: sp55
+- role: build-dependency
+ uid: sp56
+- role: build-dependency
+ uid: sp57
+- role: build-dependency
+ uid: sp58
+- role: build-dependency
+ uid: sp59
+- role: build-dependency
+ uid: sp60
+- role: build-dependency
+ uid: sp62
+- role: build-dependency
+ uid: sp63
+- role: build-dependency
+ uid: sp64
+- role: build-dependency
+ uid: sp65
+- role: build-dependency
+ uid: sp66
+- role: build-dependency
+ uid: sp67
+- role: build-dependency
+ uid: sp68
+- role: build-dependency
+ uid: sp69
+- role: build-dependency
+ uid: sp70
+- role: build-dependency
+ uid: sp71
+- role: build-dependency
+ uid: sp72
+- role: build-dependency
+ uid: sp73
+- role: build-dependency
+ uid: sp74
+- role: build-dependency
+ uid: sp75
+- role: build-dependency
+ uid: sp76
+- role: build-dependency
+ uid: sp77
+- role: build-dependency
+ uid: spassoc01
+- role: build-dependency
+ uid: spatomic01
+- role: build-dependency
+ uid: spcache01
+- role: build-dependency
+ uid: spcbssched01
+- role: build-dependency
+ uid: spcbssched02
+- role: build-dependency
+ uid: spcbssched03
+- role: build-dependency
+ uid: spchain
+- role: build-dependency
+ uid: spclockerr01
+- role: build-dependency
+ uid: spclockerr02
+- role: build-dependency
+ uid: spclocktodhook01
+- role: build-dependency
+ uid: spconfig01
+- role: build-dependency
+ uid: spconfig02
+- role: build-dependency
+ uid: spconsole01
+- role: build-dependency
+ uid: spcontext01
+- role: build-dependency
+ uid: spcoverage
+- role: build-dependency
+ uid: spcpucounter01
+- role: build-dependency
+ uid: spcpuset01
+- role: build-dependency
+ uid: spcxx01
+- role: build-dependency
+ uid: spedfsched01
+- role: build-dependency
+ uid: spedfsched02
+- role: build-dependency
+ uid: spedfsched03
+- role: build-dependency
+ uid: spedfsched04
+- role: build-dependency
+ uid: sperror01
+- role: build-dependency
+ uid: sperror02
+- role: build-dependency
+ uid: sperror03
+- role: build-dependency
+ uid: speventerr03
+- role: build-dependency
+ uid: speventsystem01
+- role: build-dependency
+ uid: speventtransient01
+- role: build-dependency
+ uid: spextensions01
+- role: build-dependency
+ uid: spfatal01
+- role: build-dependency
+ uid: spfatal02
+- role: build-dependency
+ uid: spfatal03
+- role: build-dependency
+ uid: spfatal04
+- role: build-dependency
+ uid: spfatal05
+- role: build-dependency
+ uid: spfatal06
+- role: build-dependency
+ uid: spfatal09
+- role: build-dependency
+ uid: spfatal10
+- role: build-dependency
+ uid: spfatal11
+- role: build-dependency
+ uid: spfatal12
+- role: build-dependency
+ uid: spfatal14
+- role: build-dependency
+ uid: spfatal15
+- role: build-dependency
+ uid: spfatal24
+- role: build-dependency
+ uid: spfatal25
+- role: build-dependency
+ uid: spfatal26
+- role: build-dependency
+ uid: spfatal28
+- role: build-dependency
+ uid: spfatal29
+- role: build-dependency
+ uid: spfatal30
+- role: build-dependency
+ uid: spfatal31
+- role: build-dependency
+ uid: spfatal32
+- role: build-dependency
+ uid: spfatal33
+- role: build-dependency
+ uid: spfifo01
+- role: build-dependency
+ uid: spfifo02
+- role: build-dependency
+ uid: spfifo03
+- role: build-dependency
+ uid: spfifo04
+- role: build-dependency
+ uid: spfifo05
+- role: build-dependency
+ uid: spfreechain01
+- role: build-dependency
+ uid: spglobalcon01
+- role: build-dependency
+ uid: spglobalcon02
+- role: build-dependency
+ uid: spheapprot
+- role: build-dependency
+ uid: spinternalerror01
+- role: build-dependency
+ uid: spinternalerror02
+- role: build-dependency
+ uid: spintrcritical01
+- role: build-dependency
+ uid: spintrcritical02
+- role: build-dependency
+ uid: spintrcritical03
+- role: build-dependency
+ uid: spintrcritical04
+- role: build-dependency
+ uid: spintrcritical05
+- role: build-dependency
+ uid: spintrcritical08
+- role: build-dependency
+ uid: spintrcritical09
+- role: build-dependency
+ uid: spintrcritical10
+- role: build-dependency
+ uid: spintrcritical11
+- role: build-dependency
+ uid: spintrcritical12
+- role: build-dependency
+ uid: spintrcritical13
+- role: build-dependency
+ uid: spintrcritical14
+- role: build-dependency
+ uid: spintrcritical15
+- role: build-dependency
+ uid: spintrcritical16
+- role: build-dependency
+ uid: spintrcritical18
+- role: build-dependency
+ uid: spintrcritical20
+- role: build-dependency
+ uid: spintrcritical21
+- role: build-dependency
+ uid: spintrcritical22
+- role: build-dependency
+ uid: spintrcritical23
+- role: build-dependency
+ uid: spintrcritical24
+- role: build-dependency
+ uid: spintrerr01
+- role: build-dependency
+ uid: splinkersets01
+- role: build-dependency
+ uid: spmisc01
+- role: build-dependency
+ uid: spmkdir
+- role: build-dependency
+ uid: spmountmgr01
+- role: build-dependency
+ uid: spmrsp01
+- role: build-dependency
+ uid: spmsgqerr01
+- role: build-dependency
+ uid: spmsgqerr02
+- role: build-dependency
+ uid: spmutex01
+- role: build-dependency
+ uid: spnsext01
+- role: build-dependency
+ uid: spobjgetnext
+- role: build-dependency
+ uid: sppagesize
+- role: build-dependency
+ uid: sppartitionerr01
+- role: build-dependency
+ uid: sppercpudata01
+- role: build-dependency
+ uid: spporterr01
+- role: build-dependency
+ uid: spprintk
+- role: build-dependency
+ uid: spprivenv01
+- role: build-dependency
+ uid: spprofiling01
+- role: build-dependency
+ uid: spqreslib
+- role: build-dependency
+ uid: spratemonerr01
+- role: build-dependency
+ uid: sprbtree01
+- role: build-dependency
+ uid: spregionerr01
+- role: build-dependency
+ uid: sprmsched01
+- role: build-dependency
+ uid: sprmsched02
+- role: build-dependency
+ uid: spscheduler01
+- role: build-dependency
+ uid: spsem01
+- role: build-dependency
+ uid: spsem02
+- role: build-dependency
+ uid: spsem03
+- role: build-dependency
+ uid: spsemerr01
+- role: build-dependency
+ uid: spsemerr02
+- role: build-dependency
+ uid: spsignalerr01
+- role: build-dependency
+ uid: spsimplesched01
+- role: build-dependency
+ uid: spsimplesched02
+- role: build-dependency
+ uid: spsimplesched03
+- role: build-dependency
+ uid: spsize
+- role: build-dependency
+ uid: spstdthreads01
+- role: build-dependency
+ uid: spstkalloc
+- role: build-dependency
+ uid: spstkalloc02
+- role: build-dependency
+ uid: spsysinit01
+- role: build-dependency
+ uid: spsyslock01
+- role: build-dependency
+ uid: sptaskerr01
+- role: build-dependency
+ uid: sptaskerr02
+- role: build-dependency
+ uid: sptaskerr03
+- role: build-dependency
+ uid: sptaskerr04
+- role: build-dependency
+ uid: sptasknopreempt01
+- role: build-dependency
+ uid: spthread01
+- role: build-dependency
+ uid: spthreadlife01
+- role: build-dependency
+ uid: spthreadq01
+- role: build-dependency
+ uid: sptimecounter01
+- role: build-dependency
+ uid: sptimecounter02
+- role: build-dependency
+ uid: sptimecounter03
+- role: build-dependency
+ uid: sptimecounter04
+- role: build-dependency
+ uid: sptimererr01
+- role: build-dependency
+ uid: sptimererr02
+- role: build-dependency
+ uid: sptimerserver01
+- role: build-dependency
+ uid: sptimespec01
+- role: build-dependency
+ uid: sptls01
+- role: build-dependency
+ uid: sptls02
+- role: build-dependency
+ uid: sptls03
+- role: build-dependency
+ uid: sptls04
+- role: build-dependency
+ uid: spversion01
+- role: build-dependency
+ uid: spwatchdog
+- role: build-dependency
+ uid: spwkspace
+type: build
+use-after:
+- rtemstest
+use-before: []
diff --git a/spec/build/testsuites/sptests/sp01.yml b/spec/build/testsuites/sptests/sp01.yml
new file mode 100644
index 0000000000..342271f56e
--- /dev/null
+++ b/spec/build/testsuites/sptests/sp01.yml
@@ -0,0 +1,20 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by: true
+features: c cprogram
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/sptests/sp01/init.c
+- testsuites/sptests/sp01/task1.c
+stlib: []
+target: testsuites/sptests/sp01.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/sptests/sp02.yml b/spec/build/testsuites/sptests/sp02.yml
new file mode 100644
index 0000000000..b2f5c95aef
--- /dev/null
+++ b/spec/build/testsuites/sptests/sp02.yml
@@ -0,0 +1,23 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by: true
+features: c cprogram
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/sptests/sp02/init.c
+- testsuites/sptests/sp02/task1.c
+- testsuites/sptests/sp02/task2.c
+- testsuites/sptests/sp02/task3.c
+- testsuites/sptests/sp02/preempt.c
+stlib: []
+target: testsuites/sptests/sp02.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/sptests/sp03.yml b/spec/build/testsuites/sptests/sp03.yml
new file mode 100644
index 0000000000..0e93ab8a89
--- /dev/null
+++ b/spec/build/testsuites/sptests/sp03.yml
@@ -0,0 +1,21 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by: true
+features: c cprogram
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/sptests/sp03/init.c
+- testsuites/sptests/sp03/task1.c
+- testsuites/sptests/sp03/task2.c
+stlib: []
+target: testsuites/sptests/sp03.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/sptests/sp04.yml b/spec/build/testsuites/sptests/sp04.yml
new file mode 100644
index 0000000000..c3e0208531
--- /dev/null
+++ b/spec/build/testsuites/sptests/sp04.yml
@@ -0,0 +1,23 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by: true
+features: c cprogram
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/sptests/sp04/init.c
+- testsuites/sptests/sp04/task1.c
+- testsuites/sptests/sp04/task2.c
+- testsuites/sptests/sp04/task3.c
+- testsuites/sptests/sp04/tswitch.c
+stlib: []
+target: testsuites/sptests/sp04.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/sptests/sp05.yml b/spec/build/testsuites/sptests/sp05.yml
new file mode 100644
index 0000000000..6982f3aa60
--- /dev/null
+++ b/spec/build/testsuites/sptests/sp05.yml
@@ -0,0 +1,22 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by: true
+features: c cprogram
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/sptests/sp05/init.c
+- testsuites/sptests/sp05/task1.c
+- testsuites/sptests/sp05/task2.c
+- testsuites/sptests/sp05/task3.c
+stlib: []
+target: testsuites/sptests/sp05.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/sptests/sp06.yml b/spec/build/testsuites/sptests/sp06.yml
new file mode 100644
index 0000000000..534f2776c2
--- /dev/null
+++ b/spec/build/testsuites/sptests/sp06.yml
@@ -0,0 +1,22 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by: true
+features: c cprogram
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/sptests/sp06/init.c
+- testsuites/sptests/sp06/task1.c
+- testsuites/sptests/sp06/task2.c
+- testsuites/sptests/sp06/task3.c
+stlib: []
+target: testsuites/sptests/sp06.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/sptests/sp07.yml b/spec/build/testsuites/sptests/sp07.yml
new file mode 100644
index 0000000000..3e6e92c466
--- /dev/null
+++ b/spec/build/testsuites/sptests/sp07.yml
@@ -0,0 +1,28 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by: true
+features: c cprogram
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/sptests/sp07/init.c
+- testsuites/sptests/sp07/task1.c
+- testsuites/sptests/sp07/task2.c
+- testsuites/sptests/sp07/task3.c
+- testsuites/sptests/sp07/task4.c
+- testsuites/sptests/sp07/taskexit.c
+- testsuites/sptests/sp07/tcreate.c
+- testsuites/sptests/sp07/tdelete.c
+- testsuites/sptests/sp07/trestart.c
+- testsuites/sptests/sp07/tstart.c
+stlib: []
+target: testsuites/sptests/sp07.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/sptests/sp08.yml b/spec/build/testsuites/sptests/sp08.yml
new file mode 100644
index 0000000000..ec38b10918
--- /dev/null
+++ b/spec/build/testsuites/sptests/sp08.yml
@@ -0,0 +1,19 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by: true
+features: c cprogram
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/sptests/sp08/init.c
+stlib: []
+target: testsuites/sptests/sp08.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/sptests/sp11.yml b/spec/build/testsuites/sptests/sp11.yml
new file mode 100644
index 0000000000..8e071ffcd8
--- /dev/null
+++ b/spec/build/testsuites/sptests/sp11.yml
@@ -0,0 +1,22 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by: true
+features: c cprogram
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/sptests/sp11/init.c
+- testsuites/sptests/sp11/task1.c
+- testsuites/sptests/sp11/task2.c
+- testsuites/sptests/sp11/timer.c
+stlib: []
+target: testsuites/sptests/sp11.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/sptests/sp12.yml b/spec/build/testsuites/sptests/sp12.yml
new file mode 100644
index 0000000000..8a80f883a0
--- /dev/null
+++ b/spec/build/testsuites/sptests/sp12.yml
@@ -0,0 +1,26 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by: true
+features: c cprogram
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/sptests/sp12/init.c
+- testsuites/sptests/sp12/task1.c
+- testsuites/sptests/sp12/task2.c
+- testsuites/sptests/sp12/task3.c
+- testsuites/sptests/sp12/task4.c
+- testsuites/sptests/sp12/task5.c
+- testsuites/sptests/sp12/pridrv.c
+- testsuites/sptests/sp12/pritask.c
+stlib: []
+target: testsuites/sptests/sp12.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/sptests/sp13.yml b/spec/build/testsuites/sptests/sp13.yml
new file mode 100644
index 0000000000..96db9801dc
--- /dev/null
+++ b/spec/build/testsuites/sptests/sp13.yml
@@ -0,0 +1,24 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by: true
+features: c cprogram
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/sptests/sp13/init.c
+- testsuites/sptests/sp13/fillbuff.c
+- testsuites/sptests/sp13/putbuff.c
+- testsuites/sptests/sp13/task1.c
+- testsuites/sptests/sp13/task2.c
+- testsuites/sptests/sp13/task3.c
+stlib: []
+target: testsuites/sptests/sp13.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/sptests/sp14.yml b/spec/build/testsuites/sptests/sp14.yml
new file mode 100644
index 0000000000..0dae55025b
--- /dev/null
+++ b/spec/build/testsuites/sptests/sp14.yml
@@ -0,0 +1,22 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by: true
+features: c cprogram
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/sptests/sp14/init.c
+- testsuites/sptests/sp14/asr.c
+- testsuites/sptests/sp14/task1.c
+- testsuites/sptests/sp14/task2.c
+stlib: []
+target: testsuites/sptests/sp14.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/sptests/sp15.yml b/spec/build/testsuites/sptests/sp15.yml
new file mode 100644
index 0000000000..dac01b8a97
--- /dev/null
+++ b/spec/build/testsuites/sptests/sp15.yml
@@ -0,0 +1,20 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by: true
+features: c cprogram
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/sptests/sp15/init.c
+- testsuites/sptests/sp15/task1.c
+stlib: []
+target: testsuites/sptests/sp15.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/sptests/sp16.yml b/spec/build/testsuites/sptests/sp16.yml
new file mode 100644
index 0000000000..866817c0bc
--- /dev/null
+++ b/spec/build/testsuites/sptests/sp16.yml
@@ -0,0 +1,24 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by: true
+features: c cprogram
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/sptests/sp16/init.c
+- testsuites/sptests/sp16/task1.c
+- testsuites/sptests/sp16/task2.c
+- testsuites/sptests/sp16/task3.c
+- testsuites/sptests/sp16/task4.c
+- testsuites/sptests/sp16/task5.c
+stlib: []
+target: testsuites/sptests/sp16.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/sptests/sp17.yml b/spec/build/testsuites/sptests/sp17.yml
new file mode 100644
index 0000000000..75c60b994b
--- /dev/null
+++ b/spec/build/testsuites/sptests/sp17.yml
@@ -0,0 +1,22 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by: true
+features: c cprogram
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/sptests/sp17/init.c
+- testsuites/sptests/sp17/asr.c
+- testsuites/sptests/sp17/task1.c
+- testsuites/sptests/sp17/task2.c
+stlib: []
+target: testsuites/sptests/sp17.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/sptests/sp18.yml b/spec/build/testsuites/sptests/sp18.yml
new file mode 100644
index 0000000000..23af739ded
--- /dev/null
+++ b/spec/build/testsuites/sptests/sp18.yml
@@ -0,0 +1,19 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by: true
+features: c cprogram
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/sptests/sp18/init.c
+stlib: []
+target: testsuites/sptests/sp18.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/sptests/sp19.yml b/spec/build/testsuites/sptests/sp19.yml
new file mode 100644
index 0000000000..055d828cf5
--- /dev/null
+++ b/spec/build/testsuites/sptests/sp19.yml
@@ -0,0 +1,22 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by: true
+features: c cprogram
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/sptests/sp19/init.c
+- testsuites/sptests/sp19/first.c
+- testsuites/sptests/sp19/fptask.c
+- testsuites/sptests/sp19/task1.c
+stlib: []
+target: testsuites/sptests/sp19.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/sptests/sp20.yml b/spec/build/testsuites/sptests/sp20.yml
new file mode 100644
index 0000000000..eca28d6bab
--- /dev/null
+++ b/spec/build/testsuites/sptests/sp20.yml
@@ -0,0 +1,21 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by: true
+features: c cprogram
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/sptests/sp20/init.c
+- testsuites/sptests/sp20/getall.c
+- testsuites/sptests/sp20/task1.c
+stlib: []
+target: testsuites/sptests/sp20.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/sptests/sp2038.yml b/spec/build/testsuites/sptests/sp2038.yml
new file mode 100644
index 0000000000..ee42dc8196
--- /dev/null
+++ b/spec/build/testsuites/sptests/sp2038.yml
@@ -0,0 +1,19 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by: true
+features: c cprogram
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/sptests/sp2038/init.c
+stlib: []
+target: testsuites/sptests/sp2038.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/sptests/sp21.yml b/spec/build/testsuites/sptests/sp21.yml
new file mode 100644
index 0000000000..3c7780e4be
--- /dev/null
+++ b/spec/build/testsuites/sptests/sp21.yml
@@ -0,0 +1,19 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by: true
+features: c cprogram
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/sptests/sp21/init.c
+stlib: []
+target: testsuites/sptests/sp21.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/sptests/sp22.yml b/spec/build/testsuites/sptests/sp22.yml
new file mode 100644
index 0000000000..3f1d18ed22
--- /dev/null
+++ b/spec/build/testsuites/sptests/sp22.yml
@@ -0,0 +1,22 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by: true
+features: c cprogram
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/sptests/sp22/init.c
+- testsuites/sptests/sp22/prtime.c
+- testsuites/sptests/sp22/delay.c
+- testsuites/sptests/sp22/task1.c
+stlib: []
+target: testsuites/sptests/sp22.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/sptests/sp23.yml b/spec/build/testsuites/sptests/sp23.yml
new file mode 100644
index 0000000000..181b8ed4c9
--- /dev/null
+++ b/spec/build/testsuites/sptests/sp23.yml
@@ -0,0 +1,20 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by: true
+features: c cprogram
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/sptests/sp23/init.c
+- testsuites/sptests/sp23/task1.c
+stlib: []
+target: testsuites/sptests/sp23.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/sptests/sp24.yml b/spec/build/testsuites/sptests/sp24.yml
new file mode 100644
index 0000000000..93188689a1
--- /dev/null
+++ b/spec/build/testsuites/sptests/sp24.yml
@@ -0,0 +1,21 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by: true
+features: c cprogram
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/sptests/sp24/init.c
+- testsuites/sptests/sp24/resume.c
+- testsuites/sptests/sp24/task1.c
+stlib: []
+target: testsuites/sptests/sp24.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/sptests/sp25.yml b/spec/build/testsuites/sptests/sp25.yml
new file mode 100644
index 0000000000..34deadf4cc
--- /dev/null
+++ b/spec/build/testsuites/sptests/sp25.yml
@@ -0,0 +1,20 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by: true
+features: c cprogram
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/sptests/sp25/init.c
+- testsuites/sptests/sp25/task1.c
+stlib: []
+target: testsuites/sptests/sp25.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/sptests/sp26.yml b/spec/build/testsuites/sptests/sp26.yml
new file mode 100644
index 0000000000..dbff993ee2
--- /dev/null
+++ b/spec/build/testsuites/sptests/sp26.yml
@@ -0,0 +1,20 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by: true
+features: c cprogram
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/sptests/sp26/init.c
+- testsuites/sptests/sp26/task1.c
+stlib: []
+target: testsuites/sptests/sp26.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/sptests/sp27.yml b/spec/build/testsuites/sptests/sp27.yml
new file mode 100644
index 0000000000..7ccb24b65f
--- /dev/null
+++ b/spec/build/testsuites/sptests/sp27.yml
@@ -0,0 +1,19 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by: true
+features: c cprogram
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/sptests/sp27/init.c
+stlib: []
+target: testsuites/sptests/sp27.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/sptests/sp27a.yml b/spec/build/testsuites/sptests/sp27a.yml
new file mode 100644
index 0000000000..9707f9b409
--- /dev/null
+++ b/spec/build/testsuites/sptests/sp27a.yml
@@ -0,0 +1,19 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by: true
+features: c cprogram
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/sptests/sp27a/init.c
+stlib: []
+target: testsuites/sptests/sp27a.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/sptests/sp29.yml b/spec/build/testsuites/sptests/sp29.yml
new file mode 100644
index 0000000000..43c8abb8b9
--- /dev/null
+++ b/spec/build/testsuites/sptests/sp29.yml
@@ -0,0 +1,20 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by:
+- not: RTEMS_SMP
+features: c cprogram
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/sptests/sp29/init.c
+stlib: []
+target: testsuites/sptests/sp29.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/sptests/sp30.yml b/spec/build/testsuites/sptests/sp30.yml
new file mode 100644
index 0000000000..b59cfbe240
--- /dev/null
+++ b/spec/build/testsuites/sptests/sp30.yml
@@ -0,0 +1,21 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by: true
+features: c cprogram
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/sptests/sp30/init.c
+- testsuites/sptests/sp30/resume.c
+- testsuites/sptests/sp30/task1.c
+stlib: []
+target: testsuites/sptests/sp30.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/sptests/sp31.yml b/spec/build/testsuites/sptests/sp31.yml
new file mode 100644
index 0000000000..1620d6b999
--- /dev/null
+++ b/spec/build/testsuites/sptests/sp31.yml
@@ -0,0 +1,22 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by: true
+features: c cprogram
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/sptests/sp31/delay.c
+- testsuites/sptests/sp31/init.c
+- testsuites/sptests/sp31/prtime.c
+- testsuites/sptests/sp31/task1.c
+stlib: []
+target: testsuites/sptests/sp31.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/sptests/sp32.yml b/spec/build/testsuites/sptests/sp32.yml
new file mode 100644
index 0000000000..9460734648
--- /dev/null
+++ b/spec/build/testsuites/sptests/sp32.yml
@@ -0,0 +1,19 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by: true
+features: c cprogram
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/sptests/sp32/init.c
+stlib: []
+target: testsuites/sptests/sp32.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/sptests/sp33.yml b/spec/build/testsuites/sptests/sp33.yml
new file mode 100644
index 0000000000..ce04a2f871
--- /dev/null
+++ b/spec/build/testsuites/sptests/sp33.yml
@@ -0,0 +1,19 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by: true
+features: c cprogram
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/sptests/sp33/init.c
+stlib: []
+target: testsuites/sptests/sp33.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/sptests/sp34.yml b/spec/build/testsuites/sptests/sp34.yml
new file mode 100644
index 0000000000..cac2dfec41
--- /dev/null
+++ b/spec/build/testsuites/sptests/sp34.yml
@@ -0,0 +1,19 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by: true
+features: c cprogram
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/sptests/sp34/changepri.c
+stlib: []
+target: testsuites/sptests/sp34.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/sptests/sp35.yml b/spec/build/testsuites/sptests/sp35.yml
new file mode 100644
index 0000000000..2902856b90
--- /dev/null
+++ b/spec/build/testsuites/sptests/sp35.yml
@@ -0,0 +1,19 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by: true
+features: c cprogram
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/sptests/sp35/priinv.c
+stlib: []
+target: testsuites/sptests/sp35.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/sptests/sp36.yml b/spec/build/testsuites/sptests/sp36.yml
new file mode 100644
index 0000000000..cc16a01401
--- /dev/null
+++ b/spec/build/testsuites/sptests/sp36.yml
@@ -0,0 +1,18 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by: true
+features: c cprogram
+includes: []
+ldflags: []
+links: []
+source: []
+stlib: []
+target: testsuites/sptests/sp36.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/sptests/sp37.yml b/spec/build/testsuites/sptests/sp37.yml
new file mode 100644
index 0000000000..92c8e37348
--- /dev/null
+++ b/spec/build/testsuites/sptests/sp37.yml
@@ -0,0 +1,19 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by: true
+features: c cprogram
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/sptests/sp37/init.c
+stlib: []
+target: testsuites/sptests/sp37.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/sptests/sp38.yml b/spec/build/testsuites/sptests/sp38.yml
new file mode 100644
index 0000000000..f1c18db518
--- /dev/null
+++ b/spec/build/testsuites/sptests/sp38.yml
@@ -0,0 +1,19 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by: true
+features: c cprogram
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/sptests/sp38/init.c
+stlib: []
+target: testsuites/sptests/sp38.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/sptests/sp40.yml b/spec/build/testsuites/sptests/sp40.yml
new file mode 100644
index 0000000000..19e0a05e80
--- /dev/null
+++ b/spec/build/testsuites/sptests/sp40.yml
@@ -0,0 +1,19 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by: true
+features: c cprogram
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/sptests/sp40/init.c
+stlib: []
+target: testsuites/sptests/sp40.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/sptests/sp41.yml b/spec/build/testsuites/sptests/sp41.yml
new file mode 100644
index 0000000000..10f0ce88f5
--- /dev/null
+++ b/spec/build/testsuites/sptests/sp41.yml
@@ -0,0 +1,19 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by: true
+features: c cprogram
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/sptests/sp41/init.c
+stlib: []
+target: testsuites/sptests/sp41.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/sptests/sp42.yml b/spec/build/testsuites/sptests/sp42.yml
new file mode 100644
index 0000000000..a7a28bcd4e
--- /dev/null
+++ b/spec/build/testsuites/sptests/sp42.yml
@@ -0,0 +1,19 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by: true
+features: c cprogram
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/sptests/sp42/init.c
+stlib: []
+target: testsuites/sptests/sp42.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/sptests/sp43.yml b/spec/build/testsuites/sptests/sp43.yml
new file mode 100644
index 0000000000..f11b4349a3
--- /dev/null
+++ b/spec/build/testsuites/sptests/sp43.yml
@@ -0,0 +1,19 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by: true
+features: c cprogram
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/sptests/sp43/init.c
+stlib: []
+target: testsuites/sptests/sp43.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/sptests/sp44.yml b/spec/build/testsuites/sptests/sp44.yml
new file mode 100644
index 0000000000..8acf743215
--- /dev/null
+++ b/spec/build/testsuites/sptests/sp44.yml
@@ -0,0 +1,19 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by: true
+features: c cprogram
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/sptests/sp44/init.c
+stlib: []
+target: testsuites/sptests/sp44.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/sptests/sp45.yml b/spec/build/testsuites/sptests/sp45.yml
new file mode 100644
index 0000000000..a94487cf13
--- /dev/null
+++ b/spec/build/testsuites/sptests/sp45.yml
@@ -0,0 +1,19 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by: true
+features: c cprogram
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/sptests/sp45/init.c
+stlib: []
+target: testsuites/sptests/sp45.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/sptests/sp46.yml b/spec/build/testsuites/sptests/sp46.yml
new file mode 100644
index 0000000000..80a4ea4495
--- /dev/null
+++ b/spec/build/testsuites/sptests/sp46.yml
@@ -0,0 +1,19 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by: true
+features: c cprogram
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/sptests/sp46/init.c
+stlib: []
+target: testsuites/sptests/sp46.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/sptests/sp47.yml b/spec/build/testsuites/sptests/sp47.yml
new file mode 100644
index 0000000000..1555d1b198
--- /dev/null
+++ b/spec/build/testsuites/sptests/sp47.yml
@@ -0,0 +1,19 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by: true
+features: c cprogram
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/sptests/sp47/init.c
+stlib: []
+target: testsuites/sptests/sp47.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/sptests/sp48.yml b/spec/build/testsuites/sptests/sp48.yml
new file mode 100644
index 0000000000..ad7b94d1ef
--- /dev/null
+++ b/spec/build/testsuites/sptests/sp48.yml
@@ -0,0 +1,19 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by: true
+features: c cprogram
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/sptests/sp48/init.c
+stlib: []
+target: testsuites/sptests/sp48.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/sptests/sp49.yml b/spec/build/testsuites/sptests/sp49.yml
new file mode 100644
index 0000000000..a2a4d11b13
--- /dev/null
+++ b/spec/build/testsuites/sptests/sp49.yml
@@ -0,0 +1,19 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by: true
+features: c cprogram
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/sptests/sp49/init.c
+stlib: []
+target: testsuites/sptests/sp49.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/sptests/sp50.yml b/spec/build/testsuites/sptests/sp50.yml
new file mode 100644
index 0000000000..acccb3cc27
--- /dev/null
+++ b/spec/build/testsuites/sptests/sp50.yml
@@ -0,0 +1,19 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by: true
+features: c cprogram
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/sptests/sp50/init.c
+stlib: []
+target: testsuites/sptests/sp50.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/sptests/sp51.yml b/spec/build/testsuites/sptests/sp51.yml
new file mode 100644
index 0000000000..fcf4ae3169
--- /dev/null
+++ b/spec/build/testsuites/sptests/sp51.yml
@@ -0,0 +1,19 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by: true
+features: c cprogram
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/sptests/sp51/init.c
+stlib: []
+target: testsuites/sptests/sp51.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/sptests/sp52.yml b/spec/build/testsuites/sptests/sp52.yml
new file mode 100644
index 0000000000..4d71297818
--- /dev/null
+++ b/spec/build/testsuites/sptests/sp52.yml
@@ -0,0 +1,19 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by: true
+features: c cprogram
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/sptests/sp52/init.c
+stlib: []
+target: testsuites/sptests/sp52.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/sptests/sp53.yml b/spec/build/testsuites/sptests/sp53.yml
new file mode 100644
index 0000000000..7e347b587a
--- /dev/null
+++ b/spec/build/testsuites/sptests/sp53.yml
@@ -0,0 +1,19 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by: true
+features: c cprogram
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/sptests/sp53/init.c
+stlib: []
+target: testsuites/sptests/sp53.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/sptests/sp54.yml b/spec/build/testsuites/sptests/sp54.yml
new file mode 100644
index 0000000000..3f0b557a7a
--- /dev/null
+++ b/spec/build/testsuites/sptests/sp54.yml
@@ -0,0 +1,19 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by: true
+features: c cprogram
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/sptests/sp54/init.c
+stlib: []
+target: testsuites/sptests/sp54.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/sptests/sp55.yml b/spec/build/testsuites/sptests/sp55.yml
new file mode 100644
index 0000000000..ebcbadfb92
--- /dev/null
+++ b/spec/build/testsuites/sptests/sp55.yml
@@ -0,0 +1,19 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by: true
+features: c cprogram
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/sptests/sp55/init.c
+stlib: []
+target: testsuites/sptests/sp55.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/sptests/sp56.yml b/spec/build/testsuites/sptests/sp56.yml
new file mode 100644
index 0000000000..4356acefa2
--- /dev/null
+++ b/spec/build/testsuites/sptests/sp56.yml
@@ -0,0 +1,19 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by: true
+features: c cprogram
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/sptests/sp56/init.c
+stlib: []
+target: testsuites/sptests/sp56.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/sptests/sp57.yml b/spec/build/testsuites/sptests/sp57.yml
new file mode 100644
index 0000000000..139fb2008a
--- /dev/null
+++ b/spec/build/testsuites/sptests/sp57.yml
@@ -0,0 +1,19 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by: true
+features: c cprogram
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/sptests/sp57/init.c
+stlib: []
+target: testsuites/sptests/sp57.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/sptests/sp58.yml b/spec/build/testsuites/sptests/sp58.yml
new file mode 100644
index 0000000000..f4cea837d3
--- /dev/null
+++ b/spec/build/testsuites/sptests/sp58.yml
@@ -0,0 +1,19 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by: true
+features: c cprogram
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/sptests/sp58/init.c
+stlib: []
+target: testsuites/sptests/sp58.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/sptests/sp59.yml b/spec/build/testsuites/sptests/sp59.yml
new file mode 100644
index 0000000000..0f6bc1d3f2
--- /dev/null
+++ b/spec/build/testsuites/sptests/sp59.yml
@@ -0,0 +1,19 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by: true
+features: c cprogram
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/sptests/sp59/init.c
+stlib: []
+target: testsuites/sptests/sp59.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/sptests/sp60.yml b/spec/build/testsuites/sptests/sp60.yml
new file mode 100644
index 0000000000..bd8ffc32cf
--- /dev/null
+++ b/spec/build/testsuites/sptests/sp60.yml
@@ -0,0 +1,19 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by: true
+features: c cprogram
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/sptests/sp60/init.c
+stlib: []
+target: testsuites/sptests/sp60.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/sptests/sp62.yml b/spec/build/testsuites/sptests/sp62.yml
new file mode 100644
index 0000000000..95208fdabd
--- /dev/null
+++ b/spec/build/testsuites/sptests/sp62.yml
@@ -0,0 +1,19 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by: true
+features: c cprogram
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/sptests/sp62/init.c
+stlib: []
+target: testsuites/sptests/sp62.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/sptests/sp63.yml b/spec/build/testsuites/sptests/sp63.yml
new file mode 100644
index 0000000000..e335b0960f
--- /dev/null
+++ b/spec/build/testsuites/sptests/sp63.yml
@@ -0,0 +1,19 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by: true
+features: c cprogram
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/sptests/sp63/init.c
+stlib: []
+target: testsuites/sptests/sp63.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/sptests/sp64.yml b/spec/build/testsuites/sptests/sp64.yml
new file mode 100644
index 0000000000..950c46c2d0
--- /dev/null
+++ b/spec/build/testsuites/sptests/sp64.yml
@@ -0,0 +1,19 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by: true
+features: c cprogram
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/sptests/sp64/init.c
+stlib: []
+target: testsuites/sptests/sp64.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/sptests/sp65.yml b/spec/build/testsuites/sptests/sp65.yml
new file mode 100644
index 0000000000..af28284949
--- /dev/null
+++ b/spec/build/testsuites/sptests/sp65.yml
@@ -0,0 +1,19 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by: true
+features: c cprogram
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/sptests/sp65/init.c
+stlib: []
+target: testsuites/sptests/sp65.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/sptests/sp66.yml b/spec/build/testsuites/sptests/sp66.yml
new file mode 100644
index 0000000000..e90ff93d34
--- /dev/null
+++ b/spec/build/testsuites/sptests/sp66.yml
@@ -0,0 +1,19 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by: true
+features: c cprogram
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/sptests/sp66/init.c
+stlib: []
+target: testsuites/sptests/sp66.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/sptests/sp67.yml b/spec/build/testsuites/sptests/sp67.yml
new file mode 100644
index 0000000000..923b29262c
--- /dev/null
+++ b/spec/build/testsuites/sptests/sp67.yml
@@ -0,0 +1,19 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by: true
+features: c cprogram
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/sptests/sp67/init.c
+stlib: []
+target: testsuites/sptests/sp67.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/sptests/sp68.yml b/spec/build/testsuites/sptests/sp68.yml
new file mode 100644
index 0000000000..e07f98ebe9
--- /dev/null
+++ b/spec/build/testsuites/sptests/sp68.yml
@@ -0,0 +1,19 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by: true
+features: c cprogram
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/sptests/sp68/init.c
+stlib: []
+target: testsuites/sptests/sp68.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/sptests/sp69.yml b/spec/build/testsuites/sptests/sp69.yml
new file mode 100644
index 0000000000..a72ca09a46
--- /dev/null
+++ b/spec/build/testsuites/sptests/sp69.yml
@@ -0,0 +1,20 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by: true
+features: c cprogram
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/sptests/sp69/init.c
+- testsuites/support/src/spin.c
+stlib: []
+target: testsuites/sptests/sp69.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/sptests/sp70.yml b/spec/build/testsuites/sptests/sp70.yml
new file mode 100644
index 0000000000..8e6305df42
--- /dev/null
+++ b/spec/build/testsuites/sptests/sp70.yml
@@ -0,0 +1,19 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by: true
+features: c cprogram
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/sptests/sp70/init.c
+stlib: []
+target: testsuites/sptests/sp70.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/sptests/sp71.yml b/spec/build/testsuites/sptests/sp71.yml
new file mode 100644
index 0000000000..46f088e84c
--- /dev/null
+++ b/spec/build/testsuites/sptests/sp71.yml
@@ -0,0 +1,19 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by: true
+features: c cprogram
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/sptests/sp71/init.c
+stlib: []
+target: testsuites/sptests/sp71.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/sptests/sp72.yml b/spec/build/testsuites/sptests/sp72.yml
new file mode 100644
index 0000000000..1b61e1fe09
--- /dev/null
+++ b/spec/build/testsuites/sptests/sp72.yml
@@ -0,0 +1,19 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by: true
+features: c cprogram
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/sptests/sp72/init.c
+stlib: []
+target: testsuites/sptests/sp72.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/sptests/sp73.yml b/spec/build/testsuites/sptests/sp73.yml
new file mode 100644
index 0000000000..16ee8f43e9
--- /dev/null
+++ b/spec/build/testsuites/sptests/sp73.yml
@@ -0,0 +1,19 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by: true
+features: c cprogram
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/sptests/sp73/init.c
+stlib: []
+target: testsuites/sptests/sp73.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/sptests/sp74.yml b/spec/build/testsuites/sptests/sp74.yml
new file mode 100644
index 0000000000..f0daa24dc9
--- /dev/null
+++ b/spec/build/testsuites/sptests/sp74.yml
@@ -0,0 +1,19 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by: true
+features: c cprogram
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/sptests/sp74/init.c
+stlib: []
+target: testsuites/sptests/sp74.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/sptests/sp75.yml b/spec/build/testsuites/sptests/sp75.yml
new file mode 100644
index 0000000000..0e91d062d4
--- /dev/null
+++ b/spec/build/testsuites/sptests/sp75.yml
@@ -0,0 +1,19 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by: true
+features: c cprogram
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/sptests/sp75/init.c
+stlib: []
+target: testsuites/sptests/sp75.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/sptests/sp76.yml b/spec/build/testsuites/sptests/sp76.yml
new file mode 100644
index 0000000000..4313db1d47
--- /dev/null
+++ b/spec/build/testsuites/sptests/sp76.yml
@@ -0,0 +1,19 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by: true
+features: c cprogram
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/sptests/sp76/init.c
+stlib: []
+target: testsuites/sptests/sp76.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/sptests/sp77.yml b/spec/build/testsuites/sptests/sp77.yml
new file mode 100644
index 0000000000..87aa34bedd
--- /dev/null
+++ b/spec/build/testsuites/sptests/sp77.yml
@@ -0,0 +1,19 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by: true
+features: c cprogram
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/sptests/sp77/init.c
+stlib: []
+target: testsuites/sptests/sp77.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/sptests/spassoc01.yml b/spec/build/testsuites/sptests/spassoc01.yml
new file mode 100644
index 0000000000..817115cf9e
--- /dev/null
+++ b/spec/build/testsuites/sptests/spassoc01.yml
@@ -0,0 +1,19 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by: true
+features: c cprogram
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/sptests/spassoc01/init.c
+stlib: []
+target: testsuites/sptests/spassoc01.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/sptests/spatomic01.yml b/spec/build/testsuites/sptests/spatomic01.yml
new file mode 100644
index 0000000000..7cef621604
--- /dev/null
+++ b/spec/build/testsuites/sptests/spatomic01.yml
@@ -0,0 +1,19 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by: true
+features: c cprogram
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/sptests/spatomic01/init.c
+stlib: []
+target: testsuites/sptests/spatomic01.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/sptests/spcache01.yml b/spec/build/testsuites/sptests/spcache01.yml
new file mode 100644
index 0000000000..12be856569
--- /dev/null
+++ b/spec/build/testsuites/sptests/spcache01.yml
@@ -0,0 +1,19 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by: true
+features: c cprogram
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/sptests/spcache01/init.c
+stlib: []
+target: testsuites/sptests/spcache01.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/sptests/spcbssched01.yml b/spec/build/testsuites/sptests/spcbssched01.yml
new file mode 100644
index 0000000000..5063c5f761
--- /dev/null
+++ b/spec/build/testsuites/sptests/spcbssched01.yml
@@ -0,0 +1,20 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by: true
+features: c cprogram
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/sptests/spcbssched01/init.c
+- testsuites/sptests/spcbssched01/task1.c
+stlib: []
+target: testsuites/sptests/spcbssched01.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/sptests/spcbssched02.yml b/spec/build/testsuites/sptests/spcbssched02.yml
new file mode 100644
index 0000000000..e280e7c624
--- /dev/null
+++ b/spec/build/testsuites/sptests/spcbssched02.yml
@@ -0,0 +1,20 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by: true
+features: c cprogram
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/sptests/spcbssched02/init.c
+- testsuites/sptests/spcbssched02/task_periodic.c
+stlib: []
+target: testsuites/sptests/spcbssched02.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/sptests/spcbssched03.yml b/spec/build/testsuites/sptests/spcbssched03.yml
new file mode 100644
index 0000000000..0cfc61235e
--- /dev/null
+++ b/spec/build/testsuites/sptests/spcbssched03.yml
@@ -0,0 +1,21 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by: true
+features: c cprogram
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/sptests/spcbssched03/init.c
+- testsuites/sptests/spcbssched03/tasks_periodic.c
+- testsuites/sptests/spcbssched03/tasks_aperiodic.c
+stlib: []
+target: testsuites/sptests/spcbssched03.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/sptests/spchain.yml b/spec/build/testsuites/sptests/spchain.yml
new file mode 100644
index 0000000000..28df95136b
--- /dev/null
+++ b/spec/build/testsuites/sptests/spchain.yml
@@ -0,0 +1,19 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by: true
+features: c cprogram
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/sptests/spchain/init.c
+stlib: []
+target: testsuites/sptests/spchain.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/sptests/spclockerr01.yml b/spec/build/testsuites/sptests/spclockerr01.yml
new file mode 100644
index 0000000000..cf7cd2ffdc
--- /dev/null
+++ b/spec/build/testsuites/sptests/spclockerr01.yml
@@ -0,0 +1,20 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by: true
+features: c cprogram
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/sptests/spclock_err01/init.c
+- testsuites/sptests/spclock_err01/delay.c
+stlib: []
+target: testsuites/sptests/spclock_err01.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/sptests/spclockerr02.yml b/spec/build/testsuites/sptests/spclockerr02.yml
new file mode 100644
index 0000000000..a730c0777b
--- /dev/null
+++ b/spec/build/testsuites/sptests/spclockerr02.yml
@@ -0,0 +1,19 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by: true
+features: c cprogram
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/sptests/spclock_err02/init.c
+stlib: []
+target: testsuites/sptests/spclock_err02.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/sptests/spclocktodhook01.yml b/spec/build/testsuites/sptests/spclocktodhook01.yml
new file mode 100644
index 0000000000..1b09b23fed
--- /dev/null
+++ b/spec/build/testsuites/sptests/spclocktodhook01.yml
@@ -0,0 +1,19 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by: true
+features: c cprogram
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/sptests/spclock_todhook01/init.c
+stlib: []
+target: testsuites/sptests/spclock_todhook01.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/sptests/spconfig01.yml b/spec/build/testsuites/sptests/spconfig01.yml
new file mode 100644
index 0000000000..903ce9091f
--- /dev/null
+++ b/spec/build/testsuites/sptests/spconfig01.yml
@@ -0,0 +1,19 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by: true
+features: c cprogram
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/sptests/spconfig01/init.c
+stlib: []
+target: testsuites/sptests/spconfig01.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/sptests/spconfig02.yml b/spec/build/testsuites/sptests/spconfig02.yml
new file mode 100644
index 0000000000..852820f846
--- /dev/null
+++ b/spec/build/testsuites/sptests/spconfig02.yml
@@ -0,0 +1,19 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by: true
+features: c cprogram
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/sptests/spconfig02/init.c
+stlib: []
+target: testsuites/sptests/spconfig02.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/sptests/spconsole01.yml b/spec/build/testsuites/sptests/spconsole01.yml
new file mode 100644
index 0000000000..f53588d212
--- /dev/null
+++ b/spec/build/testsuites/sptests/spconsole01.yml
@@ -0,0 +1,20 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by: true
+features: c cprogram
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/sptests/spconsole01/init.c
+stlib:
+- m
+target: testsuites/sptests/spconsole01.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/sptests/spcontext01.yml b/spec/build/testsuites/sptests/spcontext01.yml
new file mode 100644
index 0000000000..100933e6f8
--- /dev/null
+++ b/spec/build/testsuites/sptests/spcontext01.yml
@@ -0,0 +1,19 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by: true
+features: c cprogram
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/sptests/spcontext01/init.c
+stlib: []
+target: testsuites/sptests/spcontext01.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/sptests/spcoverage.yml b/spec/build/testsuites/sptests/spcoverage.yml
new file mode 100644
index 0000000000..74705a976e
--- /dev/null
+++ b/spec/build/testsuites/sptests/spcoverage.yml
@@ -0,0 +1,19 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by: true
+features: c cprogram
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/sptests/spcoverage/init.c
+stlib: []
+target: testsuites/sptests/spcoverage.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/sptests/spcpucounter01.yml b/spec/build/testsuites/sptests/spcpucounter01.yml
new file mode 100644
index 0000000000..ea9a9874a0
--- /dev/null
+++ b/spec/build/testsuites/sptests/spcpucounter01.yml
@@ -0,0 +1,19 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by: true
+features: c cprogram
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/sptests/spcpucounter01/init.c
+stlib: []
+target: testsuites/sptests/spcpucounter01.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/sptests/spcpuset01.yml b/spec/build/testsuites/sptests/spcpuset01.yml
new file mode 100644
index 0000000000..c12c51c9e6
--- /dev/null
+++ b/spec/build/testsuites/sptests/spcpuset01.yml
@@ -0,0 +1,20 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by: true
+features: c cprogram
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/sptests/spcpuset01/test.c
+- testsuites/sptests/spcpuset01/init.c
+stlib: []
+target: testsuites/sptests/spcpuset01.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/sptests/spcxx01.yml b/spec/build/testsuites/sptests/spcxx01.yml
new file mode 100644
index 0000000000..5babb62be0
--- /dev/null
+++ b/spec/build/testsuites/sptests/spcxx01.yml
@@ -0,0 +1,20 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags:
+- -std=gnu++17
+enabled-by: true
+features: cxx cxxprogram
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/sptests/spcxx01/init.cc
+stlib: []
+target: testsuites/sptests/spcxx01.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/sptests/spedfsched01.yml b/spec/build/testsuites/sptests/spedfsched01.yml
new file mode 100644
index 0000000000..2f683e61d1
--- /dev/null
+++ b/spec/build/testsuites/sptests/spedfsched01.yml
@@ -0,0 +1,20 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by: true
+features: c cprogram
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/sptests/spedfsched01/init.c
+- testsuites/sptests/spedfsched01/task1.c
+stlib: []
+target: testsuites/sptests/spedfsched01.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/sptests/spedfsched02.yml b/spec/build/testsuites/sptests/spedfsched02.yml
new file mode 100644
index 0000000000..ba6561f7a7
--- /dev/null
+++ b/spec/build/testsuites/sptests/spedfsched02.yml
@@ -0,0 +1,21 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by: true
+features: c cprogram
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/sptests/spedfsched02/init.c
+- testsuites/sptests/spedfsched02/getall.c
+- testsuites/sptests/spedfsched02/task1.c
+stlib: []
+target: testsuites/sptests/spedfsched02.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/sptests/spedfsched03.yml b/spec/build/testsuites/sptests/spedfsched03.yml
new file mode 100644
index 0000000000..61ba624f59
--- /dev/null
+++ b/spec/build/testsuites/sptests/spedfsched03.yml
@@ -0,0 +1,21 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by: true
+features: c cprogram
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/sptests/spedfsched03/init.c
+- testsuites/sptests/spedfsched03/tasks_periodic.c
+- testsuites/sptests/spedfsched03/tasks_aperiodic.c
+stlib: []
+target: testsuites/sptests/spedfsched03.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/sptests/spedfsched04.yml b/spec/build/testsuites/sptests/spedfsched04.yml
new file mode 100644
index 0000000000..99f682dd59
--- /dev/null
+++ b/spec/build/testsuites/sptests/spedfsched04.yml
@@ -0,0 +1,20 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by: true
+features: c cprogram
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/sptests/spedfsched04/init.c
+- testsuites/support/src/spin.c
+stlib: []
+target: testsuites/sptests/spedfsched04.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/sptests/sperror01.yml b/spec/build/testsuites/sptests/sperror01.yml
new file mode 100644
index 0000000000..0be98f4483
--- /dev/null
+++ b/spec/build/testsuites/sptests/sperror01.yml
@@ -0,0 +1,19 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by: true
+features: c cprogram
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/sptests/sperror01/init.c
+stlib: []
+target: testsuites/sptests/sperror01.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/sptests/sperror02.yml b/spec/build/testsuites/sptests/sperror02.yml
new file mode 100644
index 0000000000..b23103f039
--- /dev/null
+++ b/spec/build/testsuites/sptests/sperror02.yml
@@ -0,0 +1,19 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by: true
+features: c cprogram
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/sptests/sperror02/init.c
+stlib: []
+target: testsuites/sptests/sperror02.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/sptests/sperror03.yml b/spec/build/testsuites/sptests/sperror03.yml
new file mode 100644
index 0000000000..51b61b7fab
--- /dev/null
+++ b/spec/build/testsuites/sptests/sperror03.yml
@@ -0,0 +1,19 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by: true
+features: c cprogram
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/sptests/sperror03/init.c
+stlib: []
+target: testsuites/sptests/sperror03.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/sptests/speventerr03.yml b/spec/build/testsuites/sptests/speventerr03.yml
new file mode 100644
index 0000000000..541d533e33
--- /dev/null
+++ b/spec/build/testsuites/sptests/speventerr03.yml
@@ -0,0 +1,19 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by: true
+features: c cprogram
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/sptests/spevent_err03/init.c
+stlib: []
+target: testsuites/sptests/spevent_err03.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/sptests/speventsystem01.yml b/spec/build/testsuites/sptests/speventsystem01.yml
new file mode 100644
index 0000000000..37b708d495
--- /dev/null
+++ b/spec/build/testsuites/sptests/speventsystem01.yml
@@ -0,0 +1,19 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by: true
+features: c cprogram
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/sptests/speventsystem01/init.c
+stlib: []
+target: testsuites/sptests/speventsystem01.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/sptests/speventtransient01.yml b/spec/build/testsuites/sptests/speventtransient01.yml
new file mode 100644
index 0000000000..0ac9deb430
--- /dev/null
+++ b/spec/build/testsuites/sptests/speventtransient01.yml
@@ -0,0 +1,19 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by: true
+features: c cprogram
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/sptests/speventtransient01/init.c
+stlib: []
+target: testsuites/sptests/speventtransient01.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/sptests/spextensions01.yml b/spec/build/testsuites/sptests/spextensions01.yml
new file mode 100644
index 0000000000..e09b18862c
--- /dev/null
+++ b/spec/build/testsuites/sptests/spextensions01.yml
@@ -0,0 +1,19 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by: true
+features: c cprogram
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/sptests/spextensions01/init.c
+stlib: []
+target: testsuites/sptests/spextensions01.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/sptests/spfatal01.yml b/spec/build/testsuites/sptests/spfatal01.yml
new file mode 100644
index 0000000000..ef048099e6
--- /dev/null
+++ b/spec/build/testsuites/sptests/spfatal01.yml
@@ -0,0 +1,19 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by: true
+features: c cprogram
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/sptests/spfatal01/init.c
+stlib: []
+target: testsuites/sptests/spfatal01.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/sptests/spfatal02.yml b/spec/build/testsuites/sptests/spfatal02.yml
new file mode 100644
index 0000000000..19e329a027
--- /dev/null
+++ b/spec/build/testsuites/sptests/spfatal02.yml
@@ -0,0 +1,19 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by: true
+features: c cprogram
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/sptests/spfatal02/init.c
+stlib: []
+target: testsuites/sptests/spfatal02.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/sptests/spfatal03.yml b/spec/build/testsuites/sptests/spfatal03.yml
new file mode 100644
index 0000000000..ec4737dbcd
--- /dev/null
+++ b/spec/build/testsuites/sptests/spfatal03.yml
@@ -0,0 +1,19 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by: true
+features: c cprogram
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/sptests/spfatal03/init.c
+stlib: []
+target: testsuites/sptests/spfatal03.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/sptests/spfatal04.yml b/spec/build/testsuites/sptests/spfatal04.yml
new file mode 100644
index 0000000000..e58d661f5e
--- /dev/null
+++ b/spec/build/testsuites/sptests/spfatal04.yml
@@ -0,0 +1,19 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by: true
+features: c cprogram
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/sptests/spfatal04/init.c
+stlib: []
+target: testsuites/sptests/spfatal04.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/sptests/spfatal05.yml b/spec/build/testsuites/sptests/spfatal05.yml
new file mode 100644
index 0000000000..48f14a4364
--- /dev/null
+++ b/spec/build/testsuites/sptests/spfatal05.yml
@@ -0,0 +1,19 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by: true
+features: c cprogram
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/sptests/spfatal05/init.c
+stlib: []
+target: testsuites/sptests/spfatal05.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/sptests/spfatal06.yml b/spec/build/testsuites/sptests/spfatal06.yml
new file mode 100644
index 0000000000..6e4be90a2a
--- /dev/null
+++ b/spec/build/testsuites/sptests/spfatal06.yml
@@ -0,0 +1,19 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by: true
+features: c cprogram
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/sptests/spfatal06/init.c
+stlib: []
+target: testsuites/sptests/spfatal06.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/sptests/spfatal07.yml b/spec/build/testsuites/sptests/spfatal07.yml
new file mode 100644
index 0000000000..2716728597
--- /dev/null
+++ b/spec/build/testsuites/sptests/spfatal07.yml
@@ -0,0 +1,18 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by: true
+features: c cprogram
+includes: []
+ldflags: []
+links: []
+source: []
+stlib: []
+target: testsuites/sptests/spfatal07.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/sptests/spfatal09.yml b/spec/build/testsuites/sptests/spfatal09.yml
new file mode 100644
index 0000000000..19996fd81f
--- /dev/null
+++ b/spec/build/testsuites/sptests/spfatal09.yml
@@ -0,0 +1,19 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by: true
+features: c cprogram
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/sptests/spfatal09/init.c
+stlib: []
+target: testsuites/sptests/spfatal09.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/sptests/spfatal10.yml b/spec/build/testsuites/sptests/spfatal10.yml
new file mode 100644
index 0000000000..57d441cd92
--- /dev/null
+++ b/spec/build/testsuites/sptests/spfatal10.yml
@@ -0,0 +1,19 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by: true
+features: c cprogram
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/sptests/spfatal10/init.c
+stlib: []
+target: testsuites/sptests/spfatal10.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/sptests/spfatal11.yml b/spec/build/testsuites/sptests/spfatal11.yml
new file mode 100644
index 0000000000..fdb04edd0a
--- /dev/null
+++ b/spec/build/testsuites/sptests/spfatal11.yml
@@ -0,0 +1,19 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by: true
+features: c cprogram
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/sptests/spfatal11/init.c
+stlib: []
+target: testsuites/sptests/spfatal11.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/sptests/spfatal12.yml b/spec/build/testsuites/sptests/spfatal12.yml
new file mode 100644
index 0000000000..8e074e6636
--- /dev/null
+++ b/spec/build/testsuites/sptests/spfatal12.yml
@@ -0,0 +1,19 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by: true
+features: c cprogram
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/sptests/spfatal12/init.c
+stlib: []
+target: testsuites/sptests/spfatal12.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/sptests/spfatal13.yml b/spec/build/testsuites/sptests/spfatal13.yml
new file mode 100644
index 0000000000..ac21b858b5
--- /dev/null
+++ b/spec/build/testsuites/sptests/spfatal13.yml
@@ -0,0 +1,18 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by: true
+features: c cprogram
+includes: []
+ldflags: []
+links: []
+source: []
+stlib: []
+target: testsuites/sptests/spfatal13.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/sptests/spfatal14.yml b/spec/build/testsuites/sptests/spfatal14.yml
new file mode 100644
index 0000000000..af4e68f451
--- /dev/null
+++ b/spec/build/testsuites/sptests/spfatal14.yml
@@ -0,0 +1,19 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by: true
+features: c cprogram
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/sptests/spfatal14/init.c
+stlib: []
+target: testsuites/sptests/spfatal14.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/sptests/spfatal15.yml b/spec/build/testsuites/sptests/spfatal15.yml
new file mode 100644
index 0000000000..9dca3df8d7
--- /dev/null
+++ b/spec/build/testsuites/sptests/spfatal15.yml
@@ -0,0 +1,19 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by: true
+features: c cprogram
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/sptests/spfatal15/init.c
+stlib: []
+target: testsuites/sptests/spfatal15.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/sptests/spfatal16.yml b/spec/build/testsuites/sptests/spfatal16.yml
new file mode 100644
index 0000000000..34b4284951
--- /dev/null
+++ b/spec/build/testsuites/sptests/spfatal16.yml
@@ -0,0 +1,18 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by: true
+features: c cprogram
+includes: []
+ldflags: []
+links: []
+source: []
+stlib: []
+target: testsuites/sptests/spfatal16.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/sptests/spfatal17.yml b/spec/build/testsuites/sptests/spfatal17.yml
new file mode 100644
index 0000000000..3d6e9726d0
--- /dev/null
+++ b/spec/build/testsuites/sptests/spfatal17.yml
@@ -0,0 +1,18 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by: true
+features: c cprogram
+includes: []
+ldflags: []
+links: []
+source: []
+stlib: []
+target: testsuites/sptests/spfatal17.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/sptests/spfatal18.yml b/spec/build/testsuites/sptests/spfatal18.yml
new file mode 100644
index 0000000000..9ba97542e8
--- /dev/null
+++ b/spec/build/testsuites/sptests/spfatal18.yml
@@ -0,0 +1,18 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by: true
+features: c cprogram
+includes: []
+ldflags: []
+links: []
+source: []
+stlib: []
+target: testsuites/sptests/spfatal18.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/sptests/spfatal19.yml b/spec/build/testsuites/sptests/spfatal19.yml
new file mode 100644
index 0000000000..1fc2e8dc1c
--- /dev/null
+++ b/spec/build/testsuites/sptests/spfatal19.yml
@@ -0,0 +1,18 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by: true
+features: c cprogram
+includes: []
+ldflags: []
+links: []
+source: []
+stlib: []
+target: testsuites/sptests/spfatal19.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/sptests/spfatal20.yml b/spec/build/testsuites/sptests/spfatal20.yml
new file mode 100644
index 0000000000..83260f27cd
--- /dev/null
+++ b/spec/build/testsuites/sptests/spfatal20.yml
@@ -0,0 +1,18 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by: true
+features: c cprogram
+includes: []
+ldflags: []
+links: []
+source: []
+stlib: []
+target: testsuites/sptests/spfatal20.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/sptests/spfatal24.yml b/spec/build/testsuites/sptests/spfatal24.yml
new file mode 100644
index 0000000000..22eefa9de5
--- /dev/null
+++ b/spec/build/testsuites/sptests/spfatal24.yml
@@ -0,0 +1,19 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by: true
+features: c cprogram
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/sptests/spfatal24/init.c
+stlib: []
+target: testsuites/sptests/spfatal24.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/sptests/spfatal25.yml b/spec/build/testsuites/sptests/spfatal25.yml
new file mode 100644
index 0000000000..f80f26abfa
--- /dev/null
+++ b/spec/build/testsuites/sptests/spfatal25.yml
@@ -0,0 +1,19 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by: true
+features: c cprogram
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/sptests/spfatal25/init.c
+stlib: []
+target: testsuites/sptests/spfatal25.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/sptests/spfatal26.yml b/spec/build/testsuites/sptests/spfatal26.yml
new file mode 100644
index 0000000000..78a73d9e8b
--- /dev/null
+++ b/spec/build/testsuites/sptests/spfatal26.yml
@@ -0,0 +1,19 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by: true
+features: c cprogram
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/sptests/spfatal26/init.c
+stlib: []
+target: testsuites/sptests/spfatal26.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/sptests/spfatal28.yml b/spec/build/testsuites/sptests/spfatal28.yml
new file mode 100644
index 0000000000..ca548a2dca
--- /dev/null
+++ b/spec/build/testsuites/sptests/spfatal28.yml
@@ -0,0 +1,19 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by: true
+features: c cprogram
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/sptests/spfatal28/init.c
+stlib: []
+target: testsuites/sptests/spfatal28.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/sptests/spfatal29.yml b/spec/build/testsuites/sptests/spfatal29.yml
new file mode 100644
index 0000000000..a097f5c348
--- /dev/null
+++ b/spec/build/testsuites/sptests/spfatal29.yml
@@ -0,0 +1,19 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by: true
+features: c cprogram
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/sptests/spfatal29/init.c
+stlib: []
+target: testsuites/sptests/spfatal29.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/sptests/spfatal30.yml b/spec/build/testsuites/sptests/spfatal30.yml
new file mode 100644
index 0000000000..0caaa83a77
--- /dev/null
+++ b/spec/build/testsuites/sptests/spfatal30.yml
@@ -0,0 +1,19 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by: true
+features: c cprogram
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/sptests/spfatal30/init.c
+stlib: []
+target: testsuites/sptests/spfatal30.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/sptests/spfatal31.yml b/spec/build/testsuites/sptests/spfatal31.yml
new file mode 100644
index 0000000000..9c0d207352
--- /dev/null
+++ b/spec/build/testsuites/sptests/spfatal31.yml
@@ -0,0 +1,19 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by: true
+features: c cprogram
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/sptests/spfatal31/init.c
+stlib: []
+target: testsuites/sptests/spfatal31.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/sptests/spfatal32.yml b/spec/build/testsuites/sptests/spfatal32.yml
new file mode 100644
index 0000000000..0caf149adc
--- /dev/null
+++ b/spec/build/testsuites/sptests/spfatal32.yml
@@ -0,0 +1,19 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by: true
+features: c cprogram
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/sptests/spfatal32/init.c
+stlib: []
+target: testsuites/sptests/spfatal32.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/sptests/spfatal33.yml b/spec/build/testsuites/sptests/spfatal33.yml
new file mode 100644
index 0000000000..4280f7059d
--- /dev/null
+++ b/spec/build/testsuites/sptests/spfatal33.yml
@@ -0,0 +1,19 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by: true
+features: c cprogram
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/sptests/spfatal33/init.c
+stlib: []
+target: testsuites/sptests/spfatal33.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/sptests/spfatalsupport.yml b/spec/build/testsuites/sptests/spfatalsupport.yml
new file mode 100644
index 0000000000..89a3de3d26
--- /dev/null
+++ b/spec/build/testsuites/sptests/spfatalsupport.yml
@@ -0,0 +1,19 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by: true
+features: c cprogram
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/sptests/spfatal_support/init.c
+stlib: []
+target: testsuites/sptests/spfatal_support.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/sptests/spfifo01.yml b/spec/build/testsuites/sptests/spfifo01.yml
new file mode 100644
index 0000000000..e6723f9416
--- /dev/null
+++ b/spec/build/testsuites/sptests/spfifo01.yml
@@ -0,0 +1,19 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by: true
+features: c cprogram
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/sptests/spfifo01/init.c
+stlib: []
+target: testsuites/sptests/spfifo01.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/sptests/spfifo02.yml b/spec/build/testsuites/sptests/spfifo02.yml
new file mode 100644
index 0000000000..2d7491879d
--- /dev/null
+++ b/spec/build/testsuites/sptests/spfifo02.yml
@@ -0,0 +1,19 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by: true
+features: c cprogram
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/sptests/spfifo02/init.c
+stlib: []
+target: testsuites/sptests/spfifo02.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/sptests/spfifo03.yml b/spec/build/testsuites/sptests/spfifo03.yml
new file mode 100644
index 0000000000..ad52d2a927
--- /dev/null
+++ b/spec/build/testsuites/sptests/spfifo03.yml
@@ -0,0 +1,19 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by: true
+features: c cprogram
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/sptests/spfifo03/init.c
+stlib: []
+target: testsuites/sptests/spfifo03.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/sptests/spfifo04.yml b/spec/build/testsuites/sptests/spfifo04.yml
new file mode 100644
index 0000000000..e1036b879f
--- /dev/null
+++ b/spec/build/testsuites/sptests/spfifo04.yml
@@ -0,0 +1,19 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by: true
+features: c cprogram
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/sptests/spfifo04/init.c
+stlib: []
+target: testsuites/sptests/spfifo04.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/sptests/spfifo05.yml b/spec/build/testsuites/sptests/spfifo05.yml
new file mode 100644
index 0000000000..49fd0e801b
--- /dev/null
+++ b/spec/build/testsuites/sptests/spfifo05.yml
@@ -0,0 +1,19 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by: true
+features: c cprogram
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/sptests/spfifo05/init.c
+stlib: []
+target: testsuites/sptests/spfifo05.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/sptests/spfreechain01.yml b/spec/build/testsuites/sptests/spfreechain01.yml
new file mode 100644
index 0000000000..0d8ec0c7d2
--- /dev/null
+++ b/spec/build/testsuites/sptests/spfreechain01.yml
@@ -0,0 +1,19 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by: true
+features: c cprogram
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/sptests/spfreechain01/init.c
+stlib: []
+target: testsuites/sptests/spfreechain01.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/sptests/spglobalcon01.yml b/spec/build/testsuites/sptests/spglobalcon01.yml
new file mode 100644
index 0000000000..bf8aa0bdcb
--- /dev/null
+++ b/spec/build/testsuites/sptests/spglobalcon01.yml
@@ -0,0 +1,19 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by: true
+features: cxx cxxprogram
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/sptests/spglobalcon01/init.cc
+stlib: []
+target: testsuites/sptests/spglobalcon01.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/sptests/spglobalcon02.yml b/spec/build/testsuites/sptests/spglobalcon02.yml
new file mode 100644
index 0000000000..2c45e790ec
--- /dev/null
+++ b/spec/build/testsuites/sptests/spglobalcon02.yml
@@ -0,0 +1,19 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by: true
+features: c cprogram
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/sptests/spglobalcon02/init.c
+stlib: []
+target: testsuites/sptests/spglobalcon02.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/sptests/spheapprot.yml b/spec/build/testsuites/sptests/spheapprot.yml
new file mode 100644
index 0000000000..de7629d5a6
--- /dev/null
+++ b/spec/build/testsuites/sptests/spheapprot.yml
@@ -0,0 +1,19 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by: true
+features: c cprogram
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/sptests/spheapprot/init.c
+stlib: []
+target: testsuites/sptests/spheapprot.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/sptests/spinternalerror01.yml b/spec/build/testsuites/sptests/spinternalerror01.yml
new file mode 100644
index 0000000000..490a9d863b
--- /dev/null
+++ b/spec/build/testsuites/sptests/spinternalerror01.yml
@@ -0,0 +1,19 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by: true
+features: c cprogram
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/sptests/spinternalerror01/init.c
+stlib: []
+target: testsuites/sptests/spinternalerror01.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/sptests/spinternalerror02.yml b/spec/build/testsuites/sptests/spinternalerror02.yml
new file mode 100644
index 0000000000..6482bc90d1
--- /dev/null
+++ b/spec/build/testsuites/sptests/spinternalerror02.yml
@@ -0,0 +1,19 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by: true
+features: c cprogram
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/sptests/spinternalerror02/init.c
+stlib: []
+target: testsuites/sptests/spinternalerror02.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/sptests/spintrcritical01.yml b/spec/build/testsuites/sptests/spintrcritical01.yml
new file mode 100644
index 0000000000..27a36b6932
--- /dev/null
+++ b/spec/build/testsuites/sptests/spintrcritical01.yml
@@ -0,0 +1,19 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by: true
+features: c cprogram
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/sptests/spintrcritical01/init.c
+stlib: []
+target: testsuites/sptests/spintrcritical01.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/sptests/spintrcritical02.yml b/spec/build/testsuites/sptests/spintrcritical02.yml
new file mode 100644
index 0000000000..39c6b6f8a8
--- /dev/null
+++ b/spec/build/testsuites/sptests/spintrcritical02.yml
@@ -0,0 +1,19 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by: true
+features: c cprogram
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/sptests/spintrcritical02/init.c
+stlib: []
+target: testsuites/sptests/spintrcritical02.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/sptests/spintrcritical03.yml b/spec/build/testsuites/sptests/spintrcritical03.yml
new file mode 100644
index 0000000000..c1fea49a03
--- /dev/null
+++ b/spec/build/testsuites/sptests/spintrcritical03.yml
@@ -0,0 +1,19 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by: true
+features: c cprogram
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/sptests/spintrcritical03/init.c
+stlib: []
+target: testsuites/sptests/spintrcritical03.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/sptests/spintrcritical04.yml b/spec/build/testsuites/sptests/spintrcritical04.yml
new file mode 100644
index 0000000000..115fe4e90c
--- /dev/null
+++ b/spec/build/testsuites/sptests/spintrcritical04.yml
@@ -0,0 +1,19 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by: true
+features: c cprogram
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/sptests/spintrcritical04/init.c
+stlib: []
+target: testsuites/sptests/spintrcritical04.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/sptests/spintrcritical05.yml b/spec/build/testsuites/sptests/spintrcritical05.yml
new file mode 100644
index 0000000000..885e551d1c
--- /dev/null
+++ b/spec/build/testsuites/sptests/spintrcritical05.yml
@@ -0,0 +1,19 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by: true
+features: c cprogram
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/sptests/spintrcritical05/init.c
+stlib: []
+target: testsuites/sptests/spintrcritical05.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/sptests/spintrcritical08.yml b/spec/build/testsuites/sptests/spintrcritical08.yml
new file mode 100644
index 0000000000..9b06d6c108
--- /dev/null
+++ b/spec/build/testsuites/sptests/spintrcritical08.yml
@@ -0,0 +1,19 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by: true
+features: c cprogram
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/sptests/spintrcritical08/init.c
+stlib: []
+target: testsuites/sptests/spintrcritical08.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/sptests/spintrcritical09.yml b/spec/build/testsuites/sptests/spintrcritical09.yml
new file mode 100644
index 0000000000..ec4e770ea1
--- /dev/null
+++ b/spec/build/testsuites/sptests/spintrcritical09.yml
@@ -0,0 +1,19 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by: true
+features: c cprogram
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/sptests/spintrcritical09/init.c
+stlib: []
+target: testsuites/sptests/spintrcritical09.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/sptests/spintrcritical10.yml b/spec/build/testsuites/sptests/spintrcritical10.yml
new file mode 100644
index 0000000000..b50c69e230
--- /dev/null
+++ b/spec/build/testsuites/sptests/spintrcritical10.yml
@@ -0,0 +1,19 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by: true
+features: c cprogram
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/sptests/spintrcritical10/init.c
+stlib: []
+target: testsuites/sptests/spintrcritical10.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/sptests/spintrcritical11.yml b/spec/build/testsuites/sptests/spintrcritical11.yml
new file mode 100644
index 0000000000..2b62d755a7
--- /dev/null
+++ b/spec/build/testsuites/sptests/spintrcritical11.yml
@@ -0,0 +1,19 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by: true
+features: c cprogram
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/sptests/spintrcritical11/init.c
+stlib: []
+target: testsuites/sptests/spintrcritical11.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/sptests/spintrcritical12.yml b/spec/build/testsuites/sptests/spintrcritical12.yml
new file mode 100644
index 0000000000..f84ba4d6ef
--- /dev/null
+++ b/spec/build/testsuites/sptests/spintrcritical12.yml
@@ -0,0 +1,19 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by: true
+features: c cprogram
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/sptests/spintrcritical12/init.c
+stlib: []
+target: testsuites/sptests/spintrcritical12.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/sptests/spintrcritical13.yml b/spec/build/testsuites/sptests/spintrcritical13.yml
new file mode 100644
index 0000000000..abef29b6b6
--- /dev/null
+++ b/spec/build/testsuites/sptests/spintrcritical13.yml
@@ -0,0 +1,19 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by: true
+features: c cprogram
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/sptests/spintrcritical13/init.c
+stlib: []
+target: testsuites/sptests/spintrcritical13.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/sptests/spintrcritical14.yml b/spec/build/testsuites/sptests/spintrcritical14.yml
new file mode 100644
index 0000000000..bf5c73bcf9
--- /dev/null
+++ b/spec/build/testsuites/sptests/spintrcritical14.yml
@@ -0,0 +1,19 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by: true
+features: c cprogram
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/sptests/spintrcritical14/init.c
+stlib: []
+target: testsuites/sptests/spintrcritical14.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/sptests/spintrcritical15.yml b/spec/build/testsuites/sptests/spintrcritical15.yml
new file mode 100644
index 0000000000..e99589a2e1
--- /dev/null
+++ b/spec/build/testsuites/sptests/spintrcritical15.yml
@@ -0,0 +1,19 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by: true
+features: c cprogram
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/sptests/spintrcritical15/init.c
+stlib: []
+target: testsuites/sptests/spintrcritical15.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/sptests/spintrcritical16.yml b/spec/build/testsuites/sptests/spintrcritical16.yml
new file mode 100644
index 0000000000..999ce1aee9
--- /dev/null
+++ b/spec/build/testsuites/sptests/spintrcritical16.yml
@@ -0,0 +1,19 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by: true
+features: c cprogram
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/sptests/spintrcritical16/init.c
+stlib: []
+target: testsuites/sptests/spintrcritical16.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/sptests/spintrcritical18.yml b/spec/build/testsuites/sptests/spintrcritical18.yml
new file mode 100644
index 0000000000..f535db2f5f
--- /dev/null
+++ b/spec/build/testsuites/sptests/spintrcritical18.yml
@@ -0,0 +1,19 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by: true
+features: c cprogram
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/sptests/spintrcritical18/init.c
+stlib: []
+target: testsuites/sptests/spintrcritical18.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/sptests/spintrcritical20.yml b/spec/build/testsuites/sptests/spintrcritical20.yml
new file mode 100644
index 0000000000..e4a9a4979b
--- /dev/null
+++ b/spec/build/testsuites/sptests/spintrcritical20.yml
@@ -0,0 +1,19 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by: true
+features: c cprogram
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/sptests/spintrcritical20/init.c
+stlib: []
+target: testsuites/sptests/spintrcritical20.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/sptests/spintrcritical21.yml b/spec/build/testsuites/sptests/spintrcritical21.yml
new file mode 100644
index 0000000000..4d4f9a14ff
--- /dev/null
+++ b/spec/build/testsuites/sptests/spintrcritical21.yml
@@ -0,0 +1,19 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by: true
+features: c cprogram
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/sptests/spintrcritical21/init.c
+stlib: []
+target: testsuites/sptests/spintrcritical21.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/sptests/spintrcritical22.yml b/spec/build/testsuites/sptests/spintrcritical22.yml
new file mode 100644
index 0000000000..cb4fac9e99
--- /dev/null
+++ b/spec/build/testsuites/sptests/spintrcritical22.yml
@@ -0,0 +1,19 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by: true
+features: c cprogram
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/sptests/spintrcritical22/init.c
+stlib: []
+target: testsuites/sptests/spintrcritical22.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/sptests/spintrcritical23.yml b/spec/build/testsuites/sptests/spintrcritical23.yml
new file mode 100644
index 0000000000..ab9f9962f8
--- /dev/null
+++ b/spec/build/testsuites/sptests/spintrcritical23.yml
@@ -0,0 +1,19 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by: true
+features: c cprogram
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/sptests/spintrcritical23/init.c
+stlib: []
+target: testsuites/sptests/spintrcritical23.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/sptests/spintrcritical24.yml b/spec/build/testsuites/sptests/spintrcritical24.yml
new file mode 100644
index 0000000000..b81a7a1a84
--- /dev/null
+++ b/spec/build/testsuites/sptests/spintrcritical24.yml
@@ -0,0 +1,19 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by: true
+features: c cprogram
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/sptests/spintrcritical24/init.c
+stlib: []
+target: testsuites/sptests/spintrcritical24.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/sptests/spintrerr01.yml b/spec/build/testsuites/sptests/spintrerr01.yml
new file mode 100644
index 0000000000..1b26e2dce7
--- /dev/null
+++ b/spec/build/testsuites/sptests/spintrerr01.yml
@@ -0,0 +1,20 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by: true
+features: c cprogram
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/sptests/spintr_err01/init.c
+- testsuites/sptests/spintr_err01/isr.c
+stlib: []
+target: testsuites/sptests/spintr_err01.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/sptests/splinkersets01.yml b/spec/build/testsuites/sptests/splinkersets01.yml
new file mode 100644
index 0000000000..a51b80cd75
--- /dev/null
+++ b/spec/build/testsuites/sptests/splinkersets01.yml
@@ -0,0 +1,22 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by: true
+features: c cprogram
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/sptests/splinkersets01/init.c
+- testsuites/sptests/splinkersets01/sets.c
+- testsuites/sptests/splinkersets01/items.c
+stlib: []
+target: testsuites/sptests/splinkersets01.exe
+type: build
+use-after:
+- splinkersets01
+use-before: []
diff --git a/spec/build/testsuites/sptests/spmisc01.yml b/spec/build/testsuites/sptests/spmisc01.yml
new file mode 100644
index 0000000000..793023e277
--- /dev/null
+++ b/spec/build/testsuites/sptests/spmisc01.yml
@@ -0,0 +1,20 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by: true
+features: c cprogram
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/sptests/spmisc01/init.c
+- testsuites/sptests/spmisc01/strong.c
+stlib: []
+target: testsuites/sptests/spmisc01.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/sptests/spmkdir.yml b/spec/build/testsuites/sptests/spmkdir.yml
new file mode 100644
index 0000000000..4919826f0d
--- /dev/null
+++ b/spec/build/testsuites/sptests/spmkdir.yml
@@ -0,0 +1,19 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by: true
+features: c cprogram
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/sptests/spmkdir/init.c
+stlib: []
+target: testsuites/sptests/spmkdir.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/sptests/spmountmgr01.yml b/spec/build/testsuites/sptests/spmountmgr01.yml
new file mode 100644
index 0000000000..794542dc26
--- /dev/null
+++ b/spec/build/testsuites/sptests/spmountmgr01.yml
@@ -0,0 +1,19 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by: true
+features: c cprogram
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/sptests/spmountmgr01/init.c
+stlib: []
+target: testsuites/sptests/spmountmgr01.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/sptests/spmrsp01.yml b/spec/build/testsuites/sptests/spmrsp01.yml
new file mode 100644
index 0000000000..5d9a736f80
--- /dev/null
+++ b/spec/build/testsuites/sptests/spmrsp01.yml
@@ -0,0 +1,19 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by: true
+features: c cprogram
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/sptests/spmrsp01/init.c
+stlib: []
+target: testsuites/sptests/spmrsp01.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/sptests/spmsgqerr01.yml b/spec/build/testsuites/sptests/spmsgqerr01.yml
new file mode 100644
index 0000000000..335940207b
--- /dev/null
+++ b/spec/build/testsuites/sptests/spmsgqerr01.yml
@@ -0,0 +1,19 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by: true
+features: c cprogram
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/sptests/spmsgq_err01/init.c
+stlib: []
+target: testsuites/sptests/spmsgq_err01.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/sptests/spmsgqerr02.yml b/spec/build/testsuites/sptests/spmsgqerr02.yml
new file mode 100644
index 0000000000..81f65466df
--- /dev/null
+++ b/spec/build/testsuites/sptests/spmsgqerr02.yml
@@ -0,0 +1,20 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by: true
+features: c cprogram
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/sptests/spmsgq_err02/init.c
+- testsuites/sptests/spmsgq_err02/task3.c
+stlib: []
+target: testsuites/sptests/spmsgq_err02.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/sptests/spmutex01.yml b/spec/build/testsuites/sptests/spmutex01.yml
new file mode 100644
index 0000000000..a695c15a89
--- /dev/null
+++ b/spec/build/testsuites/sptests/spmutex01.yml
@@ -0,0 +1,19 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by: true
+features: c cprogram
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/sptests/spmutex01/init.c
+stlib: []
+target: testsuites/sptests/spmutex01.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/sptests/spnsext01.yml b/spec/build/testsuites/sptests/spnsext01.yml
new file mode 100644
index 0000000000..da6074b484
--- /dev/null
+++ b/spec/build/testsuites/sptests/spnsext01.yml
@@ -0,0 +1,19 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by: true
+features: c cprogram
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/sptests/spnsext01/init.c
+stlib: []
+target: testsuites/sptests/spnsext01.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/sptests/spobjgetnext.yml b/spec/build/testsuites/sptests/spobjgetnext.yml
new file mode 100644
index 0000000000..5bb94374af
--- /dev/null
+++ b/spec/build/testsuites/sptests/spobjgetnext.yml
@@ -0,0 +1,19 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by: true
+features: c cprogram
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/sptests/spobjgetnext/init.c
+stlib: []
+target: testsuites/sptests/spobjgetnext.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/sptests/sppagesize.yml b/spec/build/testsuites/sptests/sppagesize.yml
new file mode 100644
index 0000000000..198822f33c
--- /dev/null
+++ b/spec/build/testsuites/sptests/sppagesize.yml
@@ -0,0 +1,19 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by: true
+features: c cprogram
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/sptests/sppagesize/init.c
+stlib: []
+target: testsuites/sptests/sppagesize.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/sptests/sppartitionerr01.yml b/spec/build/testsuites/sptests/sppartitionerr01.yml
new file mode 100644
index 0000000000..8e6479ab27
--- /dev/null
+++ b/spec/build/testsuites/sptests/sppartitionerr01.yml
@@ -0,0 +1,19 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by: true
+features: c cprogram
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/sptests/sppartition_err01/init.c
+stlib: []
+target: testsuites/sptests/sppartition_err01.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/sptests/sppercpudata01.yml b/spec/build/testsuites/sptests/sppercpudata01.yml
new file mode 100644
index 0000000000..f439578c1e
--- /dev/null
+++ b/spec/build/testsuites/sptests/sppercpudata01.yml
@@ -0,0 +1,20 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by: true
+features: c cprogram
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/sptests/sppercpudata01/init.c
+- testsuites/sptests/sppercpudata01/item.c
+stlib: []
+target: testsuites/sptests/sppercpudata01.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/sptests/spporterr01.yml b/spec/build/testsuites/sptests/spporterr01.yml
new file mode 100644
index 0000000000..e111cd6f56
--- /dev/null
+++ b/spec/build/testsuites/sptests/spporterr01.yml
@@ -0,0 +1,19 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by: true
+features: c cprogram
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/sptests/spport_err01/init.c
+stlib: []
+target: testsuites/sptests/spport_err01.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/sptests/spprintk.yml b/spec/build/testsuites/sptests/spprintk.yml
new file mode 100644
index 0000000000..5dbf7f9856
--- /dev/null
+++ b/spec/build/testsuites/sptests/spprintk.yml
@@ -0,0 +1,19 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by: true
+features: c cprogram
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/sptests/spprintk/init.c
+stlib: []
+target: testsuites/sptests/spprintk.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/sptests/spprivenv01.yml b/spec/build/testsuites/sptests/spprivenv01.yml
new file mode 100644
index 0000000000..60ba4e141a
--- /dev/null
+++ b/spec/build/testsuites/sptests/spprivenv01.yml
@@ -0,0 +1,19 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by: true
+features: c cprogram
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/sptests/spprivenv01/init.c
+stlib: []
+target: testsuites/sptests/spprivenv01.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/sptests/spprofiling01.yml b/spec/build/testsuites/sptests/spprofiling01.yml
new file mode 100644
index 0000000000..31d55be249
--- /dev/null
+++ b/spec/build/testsuites/sptests/spprofiling01.yml
@@ -0,0 +1,19 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by: true
+features: c cprogram
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/sptests/spprofiling01/init.c
+stlib: []
+target: testsuites/sptests/spprofiling01.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/sptests/spqreslib.yml b/spec/build/testsuites/sptests/spqreslib.yml
new file mode 100644
index 0000000000..b42da2873a
--- /dev/null
+++ b/spec/build/testsuites/sptests/spqreslib.yml
@@ -0,0 +1,20 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by: true
+features: c cprogram
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/sptests/spqreslib/init.c
+- testsuites/sptests/spqreslib/task_periodic.c
+stlib: []
+target: testsuites/sptests/spqreslib.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/sptests/spratemonerr01.yml b/spec/build/testsuites/sptests/spratemonerr01.yml
new file mode 100644
index 0000000000..db46968b63
--- /dev/null
+++ b/spec/build/testsuites/sptests/spratemonerr01.yml
@@ -0,0 +1,21 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by: true
+features: c cprogram
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/sptests/spratemon_err01/init.c
+- testsuites/sptests/spratemon_err01/screen10.c
+- testsuites/sptests/spratemon_err01/task4.c
+stlib: []
+target: testsuites/sptests/spratemon_err01.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/sptests/sprbtree01.yml b/spec/build/testsuites/sptests/sprbtree01.yml
new file mode 100644
index 0000000000..544993e4e7
--- /dev/null
+++ b/spec/build/testsuites/sptests/sprbtree01.yml
@@ -0,0 +1,19 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by: true
+features: c cprogram
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/sptests/sprbtree01/init.c
+stlib: []
+target: testsuites/sptests/sprbtree01.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/sptests/spregionerr01.yml b/spec/build/testsuites/sptests/spregionerr01.yml
new file mode 100644
index 0000000000..84859c6385
--- /dev/null
+++ b/spec/build/testsuites/sptests/spregionerr01.yml
@@ -0,0 +1,19 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by: true
+features: c cprogram
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/sptests/spregion_err01/init.c
+stlib: []
+target: testsuites/sptests/spregion_err01.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/sptests/sprmsched01.yml b/spec/build/testsuites/sptests/sprmsched01.yml
new file mode 100644
index 0000000000..6928ed175a
--- /dev/null
+++ b/spec/build/testsuites/sptests/sprmsched01.yml
@@ -0,0 +1,20 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by: true
+features: c cprogram
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/sptests/sprmsched01/init.c
+- testsuites/support/src/spin.c
+stlib: []
+target: testsuites/sptests/sprmsched01.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/sptests/sprmsched02.yml b/spec/build/testsuites/sptests/sprmsched02.yml
new file mode 100644
index 0000000000..2f0c6d0209
--- /dev/null
+++ b/spec/build/testsuites/sptests/sprmsched02.yml
@@ -0,0 +1,20 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by: true
+features: c cprogram
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/sptests/sprmsched02/init.c
+- testsuites/support/src/spin.c
+stlib: []
+target: testsuites/sptests/sprmsched02.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/sptests/spscheduler01.yml b/spec/build/testsuites/sptests/spscheduler01.yml
new file mode 100644
index 0000000000..f7be84ac1f
--- /dev/null
+++ b/spec/build/testsuites/sptests/spscheduler01.yml
@@ -0,0 +1,19 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by: true
+features: c cprogram
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/sptests/spscheduler01/init.c
+stlib: []
+target: testsuites/sptests/spscheduler01.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/sptests/spsem01.yml b/spec/build/testsuites/sptests/spsem01.yml
new file mode 100644
index 0000000000..3735581195
--- /dev/null
+++ b/spec/build/testsuites/sptests/spsem01.yml
@@ -0,0 +1,19 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by: true
+features: c cprogram
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/sptests/spsem01/init.c
+stlib: []
+target: testsuites/sptests/spsem01.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/sptests/spsem02.yml b/spec/build/testsuites/sptests/spsem02.yml
new file mode 100644
index 0000000000..8358dee492
--- /dev/null
+++ b/spec/build/testsuites/sptests/spsem02.yml
@@ -0,0 +1,19 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by: true
+features: c cprogram
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/sptests/spsem02/init.c
+stlib: []
+target: testsuites/sptests/spsem02.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/sptests/spsem03.yml b/spec/build/testsuites/sptests/spsem03.yml
new file mode 100644
index 0000000000..62ed9b7fe9
--- /dev/null
+++ b/spec/build/testsuites/sptests/spsem03.yml
@@ -0,0 +1,19 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by: true
+features: c cprogram
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/sptests/spsem03/init.c
+stlib: []
+target: testsuites/sptests/spsem03.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/sptests/spsemerr01.yml b/spec/build/testsuites/sptests/spsemerr01.yml
new file mode 100644
index 0000000000..cd1f6d96b6
--- /dev/null
+++ b/spec/build/testsuites/sptests/spsemerr01.yml
@@ -0,0 +1,19 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by: true
+features: c cprogram
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/sptests/spsem_err01/init.c
+stlib: []
+target: testsuites/sptests/spsem_err01.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/sptests/spsemerr02.yml b/spec/build/testsuites/sptests/spsemerr02.yml
new file mode 100644
index 0000000000..e0c6a94cd9
--- /dev/null
+++ b/spec/build/testsuites/sptests/spsemerr02.yml
@@ -0,0 +1,20 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by: true
+features: c cprogram
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/sptests/spsem_err02/init.c
+- testsuites/sptests/spsem_err02/task2.c
+stlib: []
+target: testsuites/sptests/spsem_err02.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/sptests/spsignalerr01.yml b/spec/build/testsuites/sptests/spsignalerr01.yml
new file mode 100644
index 0000000000..6d8788de2b
--- /dev/null
+++ b/spec/build/testsuites/sptests/spsignalerr01.yml
@@ -0,0 +1,20 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by: true
+features: c cprogram
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/sptests/spsignal_err01/init.c
+- testsuites/sptests/spsignal_err01/isr.c
+stlib: []
+target: testsuites/sptests/spsignal_err01.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/sptests/spsimplesched01.yml b/spec/build/testsuites/sptests/spsimplesched01.yml
new file mode 100644
index 0000000000..f1bf9d6cf3
--- /dev/null
+++ b/spec/build/testsuites/sptests/spsimplesched01.yml
@@ -0,0 +1,19 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by: true
+features: c cprogram
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/sptests/spsimplesched01/init.c
+stlib: []
+target: testsuites/sptests/spsimplesched01.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/sptests/spsimplesched02.yml b/spec/build/testsuites/sptests/spsimplesched02.yml
new file mode 100644
index 0000000000..4eb96e5355
--- /dev/null
+++ b/spec/build/testsuites/sptests/spsimplesched02.yml
@@ -0,0 +1,19 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by: true
+features: c cprogram
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/sptests/spsimplesched02/init.c
+stlib: []
+target: testsuites/sptests/spsimplesched02.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/sptests/spsimplesched03.yml b/spec/build/testsuites/sptests/spsimplesched03.yml
new file mode 100644
index 0000000000..b150f7fa9a
--- /dev/null
+++ b/spec/build/testsuites/sptests/spsimplesched03.yml
@@ -0,0 +1,19 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by: true
+features: c cprogram
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/sptests/spsimplesched03/init.c
+stlib: []
+target: testsuites/sptests/spsimplesched03.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/sptests/spsize.yml b/spec/build/testsuites/sptests/spsize.yml
new file mode 100644
index 0000000000..4bee0a43a8
--- /dev/null
+++ b/spec/build/testsuites/sptests/spsize.yml
@@ -0,0 +1,21 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by: true
+features: c cprogram
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/sptests/spsize/init.c
+- testsuites/sptests/spsize/getint.c
+- testsuites/sptests/spsize/size.c
+stlib: []
+target: testsuites/sptests/spsize.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/sptests/spstdthreads01.yml b/spec/build/testsuites/sptests/spstdthreads01.yml
new file mode 100644
index 0000000000..a1795a4139
--- /dev/null
+++ b/spec/build/testsuites/sptests/spstdthreads01.yml
@@ -0,0 +1,19 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by: true
+features: c cprogram
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/sptests/spstdthreads01/init.c
+stlib: []
+target: testsuites/sptests/spstdthreads01.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/sptests/spstkalloc.yml b/spec/build/testsuites/sptests/spstkalloc.yml
new file mode 100644
index 0000000000..8e313341e8
--- /dev/null
+++ b/spec/build/testsuites/sptests/spstkalloc.yml
@@ -0,0 +1,19 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by: true
+features: c cprogram
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/sptests/spstkalloc/init.c
+stlib: []
+target: testsuites/sptests/spstkalloc.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/sptests/spstkalloc02.yml b/spec/build/testsuites/sptests/spstkalloc02.yml
new file mode 100644
index 0000000000..ae644d0fb0
--- /dev/null
+++ b/spec/build/testsuites/sptests/spstkalloc02.yml
@@ -0,0 +1,19 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by: true
+features: c cprogram
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/sptests/spstkalloc02/init.c
+stlib: []
+target: testsuites/sptests/spstkalloc02.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/sptests/spsysinit01.yml b/spec/build/testsuites/sptests/spsysinit01.yml
new file mode 100644
index 0000000000..5640f7ec71
--- /dev/null
+++ b/spec/build/testsuites/sptests/spsysinit01.yml
@@ -0,0 +1,19 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by: true
+features: c cprogram
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/sptests/spsysinit01/init.c
+stlib: []
+target: testsuites/sptests/spsysinit01.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/sptests/spsyslock01.yml b/spec/build/testsuites/sptests/spsyslock01.yml
new file mode 100644
index 0000000000..b83c93813a
--- /dev/null
+++ b/spec/build/testsuites/sptests/spsyslock01.yml
@@ -0,0 +1,19 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by: true
+features: c cprogram
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/sptests/spsyslock01/init.c
+stlib: []
+target: testsuites/sptests/spsyslock01.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/sptests/sptaskerr01.yml b/spec/build/testsuites/sptests/sptaskerr01.yml
new file mode 100644
index 0000000000..5b0ec722c1
--- /dev/null
+++ b/spec/build/testsuites/sptests/sptaskerr01.yml
@@ -0,0 +1,20 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by: true
+features: c cprogram
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/sptests/sptask_err01/init.c
+- testsuites/sptests/sptask_err01/task2.c
+stlib: []
+target: testsuites/sptests/sptask_err01.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/sptests/sptaskerr02.yml b/spec/build/testsuites/sptests/sptaskerr02.yml
new file mode 100644
index 0000000000..dd265b7b75
--- /dev/null
+++ b/spec/build/testsuites/sptests/sptaskerr02.yml
@@ -0,0 +1,19 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by: true
+features: c cprogram
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/sptests/sptask_err02/init.c
+stlib: []
+target: testsuites/sptests/sptask_err02.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/sptests/sptaskerr03.yml b/spec/build/testsuites/sptests/sptaskerr03.yml
new file mode 100644
index 0000000000..48786b37bf
--- /dev/null
+++ b/spec/build/testsuites/sptests/sptaskerr03.yml
@@ -0,0 +1,19 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by: true
+features: c cprogram
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/sptests/sptask_err03/init.c
+stlib: []
+target: testsuites/sptests/sptask_err03.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/sptests/sptaskerr04.yml b/spec/build/testsuites/sptests/sptaskerr04.yml
new file mode 100644
index 0000000000..82ff215bb6
--- /dev/null
+++ b/spec/build/testsuites/sptests/sptaskerr04.yml
@@ -0,0 +1,20 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by: true
+features: c cprogram
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/sptests/sptask_err04/init.c
+- testsuites/sptests/sptask_err04/task1.c
+stlib: []
+target: testsuites/sptests/sptask_err04.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/sptests/sptasknopreempt01.yml b/spec/build/testsuites/sptests/sptasknopreempt01.yml
new file mode 100644
index 0000000000..077e7474bf
--- /dev/null
+++ b/spec/build/testsuites/sptests/sptasknopreempt01.yml
@@ -0,0 +1,19 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by: true
+features: c cprogram
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/sptests/sptasknopreempt01/init.c
+stlib: []
+target: testsuites/sptests/sptasknopreempt01.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/sptests/spthread01.yml b/spec/build/testsuites/sptests/spthread01.yml
new file mode 100644
index 0000000000..b911828aaa
--- /dev/null
+++ b/spec/build/testsuites/sptests/spthread01.yml
@@ -0,0 +1,19 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by: true
+features: c cprogram
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/sptests/spthread01/init.c
+stlib: []
+target: testsuites/sptests/spthread01.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/sptests/spthreadlife01.yml b/spec/build/testsuites/sptests/spthreadlife01.yml
new file mode 100644
index 0000000000..544de17845
--- /dev/null
+++ b/spec/build/testsuites/sptests/spthreadlife01.yml
@@ -0,0 +1,19 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by: true
+features: c cprogram
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/sptests/spthreadlife01/init.c
+stlib: []
+target: testsuites/sptests/spthreadlife01.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/sptests/spthreadq01.yml b/spec/build/testsuites/sptests/spthreadq01.yml
new file mode 100644
index 0000000000..e2b8a81047
--- /dev/null
+++ b/spec/build/testsuites/sptests/spthreadq01.yml
@@ -0,0 +1,19 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by: true
+features: c cprogram
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/sptests/spthreadq01/init.c
+stlib: []
+target: testsuites/sptests/spthreadq01.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/sptests/sptimecounter01.yml b/spec/build/testsuites/sptests/sptimecounter01.yml
new file mode 100644
index 0000000000..a7192e1262
--- /dev/null
+++ b/spec/build/testsuites/sptests/sptimecounter01.yml
@@ -0,0 +1,19 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by: true
+features: c cprogram
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/sptests/sptimecounter01/init.c
+stlib: []
+target: testsuites/sptests/sptimecounter01.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/sptests/sptimecounter02.yml b/spec/build/testsuites/sptests/sptimecounter02.yml
new file mode 100644
index 0000000000..142f9bb249
--- /dev/null
+++ b/spec/build/testsuites/sptests/sptimecounter02.yml
@@ -0,0 +1,20 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by: true
+features: c cprogram
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/sptests/sptimecounter02/init.c
+- testsuites/support/src/spin.c
+stlib: []
+target: testsuites/sptests/sptimecounter02.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/sptests/sptimecounter03.yml b/spec/build/testsuites/sptests/sptimecounter03.yml
new file mode 100644
index 0000000000..c211b7df62
--- /dev/null
+++ b/spec/build/testsuites/sptests/sptimecounter03.yml
@@ -0,0 +1,19 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by: true
+features: c cprogram
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/sptests/sptimecounter03/init.c
+stlib: []
+target: testsuites/sptests/sptimecounter03.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/sptests/sptimecounter04.yml b/spec/build/testsuites/sptests/sptimecounter04.yml
new file mode 100644
index 0000000000..f767f40022
--- /dev/null
+++ b/spec/build/testsuites/sptests/sptimecounter04.yml
@@ -0,0 +1,19 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by: true
+features: c cprogram
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/sptests/sptimecounter04/init.c
+stlib: []
+target: testsuites/sptests/sptimecounter04.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/sptests/sptimererr01.yml b/spec/build/testsuites/sptests/sptimererr01.yml
new file mode 100644
index 0000000000..58e5f0816b
--- /dev/null
+++ b/spec/build/testsuites/sptests/sptimererr01.yml
@@ -0,0 +1,19 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by: true
+features: c cprogram
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/sptests/sptimer_err01/init.c
+stlib: []
+target: testsuites/sptests/sptimer_err01.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/sptests/sptimererr02.yml b/spec/build/testsuites/sptests/sptimererr02.yml
new file mode 100644
index 0000000000..600c42b6a3
--- /dev/null
+++ b/spec/build/testsuites/sptests/sptimererr02.yml
@@ -0,0 +1,19 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by: true
+features: c cprogram
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/sptests/sptimer_err02/init.c
+stlib: []
+target: testsuites/sptests/sptimer_err02.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/sptests/sptimerserver01.yml b/spec/build/testsuites/sptests/sptimerserver01.yml
new file mode 100644
index 0000000000..60131702e2
--- /dev/null
+++ b/spec/build/testsuites/sptests/sptimerserver01.yml
@@ -0,0 +1,19 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by: true
+features: c cprogram
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/sptests/sptimerserver01/init.c
+stlib: []
+target: testsuites/sptests/sptimerserver01.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/sptests/sptimespec01.yml b/spec/build/testsuites/sptests/sptimespec01.yml
new file mode 100644
index 0000000000..63be684af2
--- /dev/null
+++ b/spec/build/testsuites/sptests/sptimespec01.yml
@@ -0,0 +1,19 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by: true
+features: c cprogram
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/sptests/sptimespec01/init.c
+stlib: []
+target: testsuites/sptests/sptimespec01.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/sptests/sptls01.yml b/spec/build/testsuites/sptests/sptls01.yml
new file mode 100644
index 0000000000..fc859b39f1
--- /dev/null
+++ b/spec/build/testsuites/sptests/sptls01.yml
@@ -0,0 +1,19 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by: true
+features: c cprogram
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/sptests/sptls01/init.c
+stlib: []
+target: testsuites/sptests/sptls01.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/sptests/sptls02.yml b/spec/build/testsuites/sptests/sptls02.yml
new file mode 100644
index 0000000000..e77806b22f
--- /dev/null
+++ b/spec/build/testsuites/sptests/sptls02.yml
@@ -0,0 +1,20 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by: true
+features: cxx cxxprogram
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/sptests/sptls02/init.cc
+- testsuites/sptests/sptls02/var.cc
+stlib: []
+target: testsuites/sptests/sptls02.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/sptests/sptls03.yml b/spec/build/testsuites/sptests/sptls03.yml
new file mode 100644
index 0000000000..41e10af474
--- /dev/null
+++ b/spec/build/testsuites/sptests/sptls03.yml
@@ -0,0 +1,19 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by: true
+features: c cprogram
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/sptests/sptls03/init.c
+stlib: []
+target: testsuites/sptests/sptls03.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/sptests/sptls04.yml b/spec/build/testsuites/sptests/sptls04.yml
new file mode 100644
index 0000000000..8243fb81b9
--- /dev/null
+++ b/spec/build/testsuites/sptests/sptls04.yml
@@ -0,0 +1,19 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by: true
+features: c cprogram
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/sptests/sptls04/init.c
+stlib: []
+target: testsuites/sptests/sptls04.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/sptests/spversion01.yml b/spec/build/testsuites/sptests/spversion01.yml
new file mode 100644
index 0000000000..068d98219d
--- /dev/null
+++ b/spec/build/testsuites/sptests/spversion01.yml
@@ -0,0 +1,19 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by: true
+features: c cprogram
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/sptests/spversion01/init.c
+stlib: []
+target: testsuites/sptests/spversion01.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/sptests/spwatchdog.yml b/spec/build/testsuites/sptests/spwatchdog.yml
new file mode 100644
index 0000000000..202ea83e96
--- /dev/null
+++ b/spec/build/testsuites/sptests/spwatchdog.yml
@@ -0,0 +1,22 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by: true
+features: c cprogram
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/sptests/spwatchdog/init.c
+- testsuites/sptests/spwatchdog/task1.c
+- testsuites/sptests/spwatchdog/prtime.c
+- testsuites/sptests/spwatchdog/delay.c
+stlib: []
+target: testsuites/sptests/spwatchdog.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/sptests/spwkspace.yml b/spec/build/testsuites/sptests/spwkspace.yml
new file mode 100644
index 0000000000..21914e90db
--- /dev/null
+++ b/spec/build/testsuites/sptests/spwkspace.yml
@@ -0,0 +1,19 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by: true
+features: c cprogram
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/sptests/spwkspace/init.c
+stlib: []
+target: testsuites/sptests/spwkspace.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/tmtests/grp.yml b/spec/build/testsuites/tmtests/grp.yml
new file mode 100644
index 0000000000..dba7115207
--- /dev/null
+++ b/spec/build/testsuites/tmtests/grp.yml
@@ -0,0 +1,101 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: group
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+enabled-by:
+- BUILD_TESTS
+- BUILD_TMTESTS
+includes:
+- testsuites/support/include
+- testsuites/tmtests/include
+install: []
+ldflags:
+- -Wl,--wrap=printf
+- -Wl,--wrap=puts
+links:
+- role: build-dependency
+ uid: tm01
+- role: build-dependency
+ uid: tm02
+- role: build-dependency
+ uid: tm03
+- role: build-dependency
+ uid: tm04
+- role: build-dependency
+ uid: tm05
+- role: build-dependency
+ uid: tm06
+- role: build-dependency
+ uid: tm07
+- role: build-dependency
+ uid: tm08
+- role: build-dependency
+ uid: tm09
+- role: build-dependency
+ uid: tm10
+- role: build-dependency
+ uid: tm11
+- role: build-dependency
+ uid: tm12
+- role: build-dependency
+ uid: tm13
+- role: build-dependency
+ uid: tm14
+- role: build-dependency
+ uid: tm15
+- role: build-dependency
+ uid: tm16
+- role: build-dependency
+ uid: tm17
+- role: build-dependency
+ uid: tm18
+- role: build-dependency
+ uid: tm19
+- role: build-dependency
+ uid: tm20
+- role: build-dependency
+ uid: tm21
+- role: build-dependency
+ uid: tm22
+- role: build-dependency
+ uid: tm23
+- role: build-dependency
+ uid: tm24
+- role: build-dependency
+ uid: tm25
+- role: build-dependency
+ uid: tm26
+- role: build-dependency
+ uid: tm27
+- role: build-dependency
+ uid: tm28
+- role: build-dependency
+ uid: tm29
+- role: build-dependency
+ uid: tm30
+- role: build-dependency
+ uid: tm31
+- role: build-dependency
+ uid: tm32
+- role: build-dependency
+ uid: tm33
+- role: build-dependency
+ uid: tm34
+- role: build-dependency
+ uid: tm35
+- role: build-dependency
+ uid: tm36
+- role: build-dependency
+ uid: tmck
+- role: build-dependency
+ uid: tmcontext01
+- role: build-dependency
+ uid: tmfine01
+- role: build-dependency
+ uid: tmonetoone
+- role: build-dependency
+ uid: tmtimer01
+type: build
+use-after:
+- rtemstest
+use-before: []
diff --git a/spec/build/testsuites/tmtests/tm01.yml b/spec/build/testsuites/tmtests/tm01.yml
new file mode 100644
index 0000000000..c8fe0db917
--- /dev/null
+++ b/spec/build/testsuites/tmtests/tm01.yml
@@ -0,0 +1,20 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by: true
+features: c cprogram
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/tmtests/tm01/task1.c
+- testsuites/support/src/tmtests_empty_function.c
+stlib: []
+target: testsuites/tmtests/tm01.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/tmtests/tm02.yml b/spec/build/testsuites/tmtests/tm02.yml
new file mode 100644
index 0000000000..9d8353ad0c
--- /dev/null
+++ b/spec/build/testsuites/tmtests/tm02.yml
@@ -0,0 +1,20 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by: true
+features: c cprogram
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/tmtests/tm02/task1.c
+- testsuites/support/src/tmtests_empty_function.c
+stlib: []
+target: testsuites/tmtests/tm02.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/tmtests/tm03.yml b/spec/build/testsuites/tmtests/tm03.yml
new file mode 100644
index 0000000000..39ae86d639
--- /dev/null
+++ b/spec/build/testsuites/tmtests/tm03.yml
@@ -0,0 +1,20 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by: true
+features: c cprogram
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/tmtests/tm03/task1.c
+- testsuites/support/src/tmtests_empty_function.c
+stlib: []
+target: testsuites/tmtests/tm03.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/tmtests/tm04.yml b/spec/build/testsuites/tmtests/tm04.yml
new file mode 100644
index 0000000000..e91976e9f7
--- /dev/null
+++ b/spec/build/testsuites/tmtests/tm04.yml
@@ -0,0 +1,20 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by: true
+features: c cprogram
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/tmtests/tm04/task1.c
+- testsuites/support/src/tmtests_empty_function.c
+stlib: []
+target: testsuites/tmtests/tm04.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/tmtests/tm05.yml b/spec/build/testsuites/tmtests/tm05.yml
new file mode 100644
index 0000000000..65cefa543d
--- /dev/null
+++ b/spec/build/testsuites/tmtests/tm05.yml
@@ -0,0 +1,20 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by: true
+features: c cprogram
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/tmtests/tm05/task1.c
+- testsuites/support/src/tmtests_empty_function.c
+stlib: []
+target: testsuites/tmtests/tm05.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/tmtests/tm06.yml b/spec/build/testsuites/tmtests/tm06.yml
new file mode 100644
index 0000000000..a6151e4d2a
--- /dev/null
+++ b/spec/build/testsuites/tmtests/tm06.yml
@@ -0,0 +1,20 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by: true
+features: c cprogram
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/tmtests/tm06/task1.c
+- testsuites/support/src/tmtests_empty_function.c
+stlib: []
+target: testsuites/tmtests/tm06.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/tmtests/tm07.yml b/spec/build/testsuites/tmtests/tm07.yml
new file mode 100644
index 0000000000..c9941f4990
--- /dev/null
+++ b/spec/build/testsuites/tmtests/tm07.yml
@@ -0,0 +1,20 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by: true
+features: c cprogram
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/tmtests/tm07/task1.c
+- testsuites/support/src/tmtests_empty_function.c
+stlib: []
+target: testsuites/tmtests/tm07.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/tmtests/tm08.yml b/spec/build/testsuites/tmtests/tm08.yml
new file mode 100644
index 0000000000..f10104fc3d
--- /dev/null
+++ b/spec/build/testsuites/tmtests/tm08.yml
@@ -0,0 +1,20 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by: true
+features: c cprogram
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/tmtests/tm08/task1.c
+- testsuites/support/src/tmtests_empty_function.c
+stlib: []
+target: testsuites/tmtests/tm08.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/tmtests/tm09.yml b/spec/build/testsuites/tmtests/tm09.yml
new file mode 100644
index 0000000000..336986bff8
--- /dev/null
+++ b/spec/build/testsuites/tmtests/tm09.yml
@@ -0,0 +1,20 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by: true
+features: c cprogram
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/tmtests/tm09/task1.c
+- testsuites/support/src/tmtests_empty_function.c
+stlib: []
+target: testsuites/tmtests/tm09.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/tmtests/tm10.yml b/spec/build/testsuites/tmtests/tm10.yml
new file mode 100644
index 0000000000..d018491f2c
--- /dev/null
+++ b/spec/build/testsuites/tmtests/tm10.yml
@@ -0,0 +1,20 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by: true
+features: c cprogram
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/tmtests/tm10/task1.c
+- testsuites/support/src/tmtests_empty_function.c
+stlib: []
+target: testsuites/tmtests/tm10.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/tmtests/tm11.yml b/spec/build/testsuites/tmtests/tm11.yml
new file mode 100644
index 0000000000..2da71bbe69
--- /dev/null
+++ b/spec/build/testsuites/tmtests/tm11.yml
@@ -0,0 +1,20 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by: true
+features: c cprogram
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/tmtests/tm11/task1.c
+- testsuites/support/src/tmtests_empty_function.c
+stlib: []
+target: testsuites/tmtests/tm11.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/tmtests/tm12.yml b/spec/build/testsuites/tmtests/tm12.yml
new file mode 100644
index 0000000000..76081f9afa
--- /dev/null
+++ b/spec/build/testsuites/tmtests/tm12.yml
@@ -0,0 +1,20 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by: true
+features: c cprogram
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/tmtests/tm12/task1.c
+- testsuites/support/src/tmtests_empty_function.c
+stlib: []
+target: testsuites/tmtests/tm12.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/tmtests/tm13.yml b/spec/build/testsuites/tmtests/tm13.yml
new file mode 100644
index 0000000000..91869c9020
--- /dev/null
+++ b/spec/build/testsuites/tmtests/tm13.yml
@@ -0,0 +1,20 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by: true
+features: c cprogram
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/tmtests/tm13/task1.c
+- testsuites/support/src/tmtests_empty_function.c
+stlib: []
+target: testsuites/tmtests/tm13.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/tmtests/tm14.yml b/spec/build/testsuites/tmtests/tm14.yml
new file mode 100644
index 0000000000..ed7d31244e
--- /dev/null
+++ b/spec/build/testsuites/tmtests/tm14.yml
@@ -0,0 +1,20 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by: true
+features: c cprogram
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/tmtests/tm14/task1.c
+- testsuites/support/src/tmtests_empty_function.c
+stlib: []
+target: testsuites/tmtests/tm14.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/tmtests/tm15.yml b/spec/build/testsuites/tmtests/tm15.yml
new file mode 100644
index 0000000000..61ed7ab61f
--- /dev/null
+++ b/spec/build/testsuites/tmtests/tm15.yml
@@ -0,0 +1,20 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by: true
+features: c cprogram
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/tmtests/tm15/task1.c
+- testsuites/support/src/tmtests_empty_function.c
+stlib: []
+target: testsuites/tmtests/tm15.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/tmtests/tm16.yml b/spec/build/testsuites/tmtests/tm16.yml
new file mode 100644
index 0000000000..a81c8858ef
--- /dev/null
+++ b/spec/build/testsuites/tmtests/tm16.yml
@@ -0,0 +1,20 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by: true
+features: c cprogram
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/tmtests/tm16/task1.c
+- testsuites/support/src/tmtests_empty_function.c
+stlib: []
+target: testsuites/tmtests/tm16.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/tmtests/tm17.yml b/spec/build/testsuites/tmtests/tm17.yml
new file mode 100644
index 0000000000..a7b89165b6
--- /dev/null
+++ b/spec/build/testsuites/tmtests/tm17.yml
@@ -0,0 +1,20 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by: true
+features: c cprogram
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/tmtests/tm17/task1.c
+- testsuites/support/src/tmtests_empty_function.c
+stlib: []
+target: testsuites/tmtests/tm17.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/tmtests/tm18.yml b/spec/build/testsuites/tmtests/tm18.yml
new file mode 100644
index 0000000000..b554f4f7a1
--- /dev/null
+++ b/spec/build/testsuites/tmtests/tm18.yml
@@ -0,0 +1,20 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by: true
+features: c cprogram
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/tmtests/tm18/task1.c
+- testsuites/support/src/tmtests_empty_function.c
+stlib: []
+target: testsuites/tmtests/tm18.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/tmtests/tm19.yml b/spec/build/testsuites/tmtests/tm19.yml
new file mode 100644
index 0000000000..4ae954b9d4
--- /dev/null
+++ b/spec/build/testsuites/tmtests/tm19.yml
@@ -0,0 +1,20 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by: true
+features: c cprogram
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/tmtests/tm19/task1.c
+- testsuites/support/src/tmtests_empty_function.c
+stlib: []
+target: testsuites/tmtests/tm19.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/tmtests/tm20.yml b/spec/build/testsuites/tmtests/tm20.yml
new file mode 100644
index 0000000000..1947f07d71
--- /dev/null
+++ b/spec/build/testsuites/tmtests/tm20.yml
@@ -0,0 +1,20 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by: true
+features: c cprogram
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/tmtests/tm20/task1.c
+- testsuites/support/src/tmtests_empty_function.c
+stlib: []
+target: testsuites/tmtests/tm20.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/tmtests/tm21.yml b/spec/build/testsuites/tmtests/tm21.yml
new file mode 100644
index 0000000000..6e6658ea3f
--- /dev/null
+++ b/spec/build/testsuites/tmtests/tm21.yml
@@ -0,0 +1,20 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by: true
+features: c cprogram
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/tmtests/tm21/task1.c
+- testsuites/support/src/tmtests_empty_function.c
+stlib: []
+target: testsuites/tmtests/tm21.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/tmtests/tm22.yml b/spec/build/testsuites/tmtests/tm22.yml
new file mode 100644
index 0000000000..e7ffc51058
--- /dev/null
+++ b/spec/build/testsuites/tmtests/tm22.yml
@@ -0,0 +1,20 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by: true
+features: c cprogram
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/tmtests/tm22/task1.c
+- testsuites/support/src/tmtests_empty_function.c
+stlib: []
+target: testsuites/tmtests/tm22.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/tmtests/tm23.yml b/spec/build/testsuites/tmtests/tm23.yml
new file mode 100644
index 0000000000..7d27a2aa20
--- /dev/null
+++ b/spec/build/testsuites/tmtests/tm23.yml
@@ -0,0 +1,20 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by: true
+features: c cprogram
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/tmtests/tm23/task1.c
+- testsuites/support/src/tmtests_empty_function.c
+stlib: []
+target: testsuites/tmtests/tm23.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/tmtests/tm24.yml b/spec/build/testsuites/tmtests/tm24.yml
new file mode 100644
index 0000000000..dba0fc5962
--- /dev/null
+++ b/spec/build/testsuites/tmtests/tm24.yml
@@ -0,0 +1,20 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by: true
+features: c cprogram
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/tmtests/tm24/task1.c
+- testsuites/support/src/tmtests_empty_function.c
+stlib: []
+target: testsuites/tmtests/tm24.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/tmtests/tm25.yml b/spec/build/testsuites/tmtests/tm25.yml
new file mode 100644
index 0000000000..51ce5d4cbc
--- /dev/null
+++ b/spec/build/testsuites/tmtests/tm25.yml
@@ -0,0 +1,20 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by: true
+features: c cprogram
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/tmtests/tm25/task1.c
+- testsuites/support/src/tmtests_empty_function.c
+stlib: []
+target: testsuites/tmtests/tm25.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/tmtests/tm26.yml b/spec/build/testsuites/tmtests/tm26.yml
new file mode 100644
index 0000000000..7fa7e08370
--- /dev/null
+++ b/spec/build/testsuites/tmtests/tm26.yml
@@ -0,0 +1,20 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by: true
+features: c cprogram
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/tmtests/tm26/task1.c
+- testsuites/support/src/tmtests_empty_function.c
+stlib: []
+target: testsuites/tmtests/tm26.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/tmtests/tm27.yml b/spec/build/testsuites/tmtests/tm27.yml
new file mode 100644
index 0000000000..4d08299961
--- /dev/null
+++ b/spec/build/testsuites/tmtests/tm27.yml
@@ -0,0 +1,20 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by: true
+features: c cprogram
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/tmtests/tm27/task1.c
+- testsuites/support/src/tmtests_empty_function.c
+stlib: []
+target: testsuites/tmtests/tm27.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/tmtests/tm28.yml b/spec/build/testsuites/tmtests/tm28.yml
new file mode 100644
index 0000000000..9a8c928adb
--- /dev/null
+++ b/spec/build/testsuites/tmtests/tm28.yml
@@ -0,0 +1,20 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by: true
+features: c cprogram
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/tmtests/tm28/task1.c
+- testsuites/support/src/tmtests_empty_function.c
+stlib: []
+target: testsuites/tmtests/tm28.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/tmtests/tm29.yml b/spec/build/testsuites/tmtests/tm29.yml
new file mode 100644
index 0000000000..7ef8070d74
--- /dev/null
+++ b/spec/build/testsuites/tmtests/tm29.yml
@@ -0,0 +1,20 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by: true
+features: c cprogram
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/tmtests/tm29/task1.c
+- testsuites/support/src/tmtests_empty_function.c
+stlib: []
+target: testsuites/tmtests/tm29.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/tmtests/tm30.yml b/spec/build/testsuites/tmtests/tm30.yml
new file mode 100644
index 0000000000..2f0b627e8e
--- /dev/null
+++ b/spec/build/testsuites/tmtests/tm30.yml
@@ -0,0 +1,21 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by: true
+features: c cprogram
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/tmtests/tm30/init.c
+- testsuites/support/src/tmtests_empty_function.c
+- testsuites/support/src/tmtests_support.c
+stlib: []
+target: testsuites/tmtests/tm30.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/tmtests/tm31.yml b/spec/build/testsuites/tmtests/tm31.yml
new file mode 100644
index 0000000000..4971f3bbf1
--- /dev/null
+++ b/spec/build/testsuites/tmtests/tm31.yml
@@ -0,0 +1,20 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by: true
+features: c cprogram
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/tmtests/tm31/task1.c
+- testsuites/support/src/tmtests_empty_function.c
+stlib: []
+target: testsuites/tmtests/tm31.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/tmtests/tm32.yml b/spec/build/testsuites/tmtests/tm32.yml
new file mode 100644
index 0000000000..1f4f288890
--- /dev/null
+++ b/spec/build/testsuites/tmtests/tm32.yml
@@ -0,0 +1,20 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by: true
+features: c cprogram
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/tmtests/tm32/task1.c
+- testsuites/support/src/tmtests_empty_function.c
+stlib: []
+target: testsuites/tmtests/tm32.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/tmtests/tm33.yml b/spec/build/testsuites/tmtests/tm33.yml
new file mode 100644
index 0000000000..ed202a65e3
--- /dev/null
+++ b/spec/build/testsuites/tmtests/tm33.yml
@@ -0,0 +1,20 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by: true
+features: c cprogram
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/tmtests/tm33/task1.c
+- testsuites/support/src/tmtests_empty_function.c
+stlib: []
+target: testsuites/tmtests/tm33.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/tmtests/tm34.yml b/spec/build/testsuites/tmtests/tm34.yml
new file mode 100644
index 0000000000..2f0b5754df
--- /dev/null
+++ b/spec/build/testsuites/tmtests/tm34.yml
@@ -0,0 +1,20 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by: true
+features: c cprogram
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/tmtests/tm34/task1.c
+- testsuites/support/src/tmtests_empty_function.c
+stlib: []
+target: testsuites/tmtests/tm34.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/tmtests/tm35.yml b/spec/build/testsuites/tmtests/tm35.yml
new file mode 100644
index 0000000000..95c2bd41e6
--- /dev/null
+++ b/spec/build/testsuites/tmtests/tm35.yml
@@ -0,0 +1,20 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by: true
+features: c cprogram
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/tmtests/tm35/task1.c
+- testsuites/support/src/tmtests_empty_function.c
+stlib: []
+target: testsuites/tmtests/tm35.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/tmtests/tm36.yml b/spec/build/testsuites/tmtests/tm36.yml
new file mode 100644
index 0000000000..5316e80a2a
--- /dev/null
+++ b/spec/build/testsuites/tmtests/tm36.yml
@@ -0,0 +1,20 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by: true
+features: c cprogram
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/tmtests/tm36/task1.c
+- testsuites/support/src/tmtests_empty_function.c
+stlib: []
+target: testsuites/tmtests/tm36.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/tmtests/tmck.yml b/spec/build/testsuites/tmtests/tmck.yml
new file mode 100644
index 0000000000..f4e7b96919
--- /dev/null
+++ b/spec/build/testsuites/tmtests/tmck.yml
@@ -0,0 +1,20 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by: true
+features: c cprogram
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/tmtests/tmck/task1.c
+- testsuites/support/src/tmtests_empty_function.c
+stlib: []
+target: testsuites/tmtests/tmck.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/tmtests/tmcontext01.yml b/spec/build/testsuites/tmtests/tmcontext01.yml
new file mode 100644
index 0000000000..1e53d65d8b
--- /dev/null
+++ b/spec/build/testsuites/tmtests/tmcontext01.yml
@@ -0,0 +1,19 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by: true
+features: c cprogram
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/tmtests/tmcontext01/init.c
+stlib: []
+target: testsuites/tmtests/tmcontext01.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/tmtests/tmfine01.yml b/spec/build/testsuites/tmtests/tmfine01.yml
new file mode 100644
index 0000000000..9d04bd0024
--- /dev/null
+++ b/spec/build/testsuites/tmtests/tmfine01.yml
@@ -0,0 +1,19 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by: true
+features: c cprogram
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/tmtests/tmfine01/init.c
+stlib: []
+target: testsuites/tmtests/tmfine01.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/tmtests/tmonetoone.yml b/spec/build/testsuites/tmtests/tmonetoone.yml
new file mode 100644
index 0000000000..7fdc8b86da
--- /dev/null
+++ b/spec/build/testsuites/tmtests/tmonetoone.yml
@@ -0,0 +1,19 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by: true
+features: c cprogram
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/tmtests/tmonetoone/init.c
+stlib: []
+target: testsuites/tmtests/tmonetoone.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/tmtests/tmtimer01.yml b/spec/build/testsuites/tmtests/tmtimer01.yml
new file mode 100644
index 0000000000..20e6271ec4
--- /dev/null
+++ b/spec/build/testsuites/tmtests/tmtimer01.yml
@@ -0,0 +1,19 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by: true
+features: c cprogram
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/tmtests/tmtimer01/init.c
+stlib: []
+target: testsuites/tmtests/tmtimer01.exe
+type: build
+use-after: []
+use-before: []
diff --git a/spec/build/testsuites/validation/grp.yml b/spec/build/testsuites/validation/grp.yml
new file mode 100644
index 0000000000..390fb48803
--- /dev/null
+++ b/spec/build/testsuites/validation/grp.yml
@@ -0,0 +1,18 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: group
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+enabled-by:
+- BUILD_TESTS
+- BUILD_VALIDATIONTESTS
+includes:
+- ${BSP_INCLUDES}
+install: []
+ldflags: []
+links:
+- role: build-dependency
+ uid: validation-0
+type: build
+use-after:
+- rtemstest
+use-before: []
diff --git a/spec/build/testsuites/validation/validation-0.yml b/spec/build/testsuites/validation/validation-0.yml
new file mode 100644
index 0000000000..edc0b570ae
--- /dev/null
+++ b/spec/build/testsuites/validation/validation-0.yml
@@ -0,0 +1,20 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: test-program
+cflags: []
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+cppflags: []
+cxxflags: []
+enabled-by: true
+features: c cprogram
+includes: []
+ldflags: []
+links: []
+source:
+- testsuites/validation/tc-task-construct-errors.c
+- testsuites/validation/ts-validation-0.c
+stlib: []
+target: testsuites/validation/ts-validation-0.exe
+type: build
+use-after: []
+use-before: []
diff --git a/testsuites/aclocal/version.m4 b/testsuites/aclocal/version.m4
index 7c8b9df348..69e3eea10a 100644
--- a/testsuites/aclocal/version.m4
+++ b/testsuites/aclocal/version.m4
@@ -1,4 +1,4 @@
AC_DEFUN([RTEMS_VERSIONING],
-m4_define([_RTEMS_VERSION],[5.0.0]))
+m4_define([_RTEMS_VERSION],[6.0.0]))
-m4_define([_RTEMS_API],[5])
+m4_define([_RTEMS_API],[6])
diff --git a/testsuites/ada/configure.ac b/testsuites/ada/configure.ac
index 4ec8532ada..2c9937131e 100644
--- a/testsuites/ada/configure.ac
+++ b/testsuites/ada/configure.ac
@@ -110,7 +110,6 @@ tmtests/tm25/Makefile
tmtests/tm28/Makefile
tmtests/tm29/Makefile
tmtests/tmck/Makefile
-tmtests/tmoverhd/Makefile
])
AC_CONFIG_FILES([
diff --git a/testsuites/ada/support/initimpl.h b/testsuites/ada/support/initimpl.h
index 8076194ff1..7fccfddcf7 100644
--- a/testsuites/ada/support/initimpl.h
+++ b/testsuites/ada/support/initimpl.h
@@ -10,7 +10,7 @@
#include <stdlib.h>
#include <rtems.h>
-#include <rtems/test.h>
+#include <rtems/test-info.h>
#include <rtems/score/threadimpl.h>
/*
diff --git a/testsuites/ada/tmtests/Makefile.am b/testsuites/ada/tmtests/Makefile.am
index ed9de68373..b4d96c150b 100644
--- a/testsuites/ada/tmtests/Makefile.am
+++ b/testsuites/ada/tmtests/Makefile.am
@@ -27,6 +27,5 @@ _SUBDIRS += tm25
_SUBDIRS += tm28
_SUBDIRS += tm29
_SUBDIRS += tmck
-_SUBDIRS += tmoverhd
include $(top_srcdir)/../automake/subdirs.am
diff --git a/testsuites/ada/tmtests/tmoverhd/Makefile.am b/testsuites/ada/tmtests/tmoverhd/Makefile.am
deleted file mode 100644
index 75e9719426..0000000000
--- a/testsuites/ada/tmtests/tmoverhd/Makefile.am
+++ /dev/null
@@ -1,13 +0,0 @@
-include $(RTEMS_ROOT)/make/custom/@RTEMS_BSP@.cfg
-include $(top_srcdir)/../automake/compile.am
-
-include $(top_srcdir)/ada.am
-
-noinst_PROGRAMS = ada_tmoverhd
-ada_tmoverhd_SOURCES = tmoverhd.adb config.h tmtest.adb tmtest.ads \
- dummy_rtems.adb dummy_rtems.ads
-ada_tmoverhd_SOURCES += init.c
-
-ada_tmoverhd$(EXEEXT): tmoverhd.adb init.$(OBJEXT)
- $(GNATCOMPILE) -margs -a $< -o $@
-
diff --git a/testsuites/ada/tmtests/tmoverhd/README b/testsuites/ada/tmtests/tmoverhd/README
deleted file mode 100644
index 4e66647830..0000000000
--- a/testsuites/ada/tmtests/tmoverhd/README
+++ /dev/null
@@ -1,5 +0,0 @@
-This test is of marginal usefulness in testing the bindings. It
-shows how much overhead is required to call the Ada binding
-routine but does not give any indication of how much overhead the
-binding itself adds. This information can be inferred by subtracting
-the C times from Ada times on the same target processor.
diff --git a/testsuites/ada/tmtests/tmoverhd/dummy_rtems.adb b/testsuites/ada/tmtests/tmoverhd/dummy_rtems.adb
deleted file mode 100644
index 62986dc465..0000000000
--- a/testsuites/ada/tmtests/tmoverhd/dummy_rtems.adb
+++ /dev/null
@@ -1,891 +0,0 @@
---
--- DUMMY_RTEMS / SPECIFICATION
---
--- DESCRIPTION:
---
--- This package contains implementation of stub routines
--- which are used to time the invocation overhead incurred
--- with an Ada application program invokes each RTEMS directive.
---
--- DEPENDENCIES:
---
---
---
--- COPYRIGHT (c) 1989-2009.
--- On-Line Applications Research Corporation (OAR).
---
--- The license and distribution terms for this file may in
--- the file LICENSE in this distribution or at
--- http://www.rtems.org/license/LICENSE.
---
-
-package body DUMMY_RTEMS is
-
--- Task Manager
-
- procedure TASK_CREATE (
- NAME : in RTEMS.NAME;
- INITIAL_PRIORITY : in RTEMS.TASKS.PRIORITY;
- STACK_SIZE : in RTEMS.UNSIGNED32;
- INITIAL_MODES : in RTEMS.MODE;
- ATTRIBUTE_SET : in RTEMS.ATTRIBUTE;
- ID : out RTEMS.ID;
- RESULT : out RTEMS.STATUS_CODES
- ) is
- pragma Unreferenced(NAME);
- pragma Unreferenced(INITIAL_PRIORITY);
- pragma Unreferenced(STACK_SIZE);
- pragma Unreferenced(INITIAL_MODES);
- pragma Unreferenced(ATTRIBUTE_SET);
- begin
-
- ID := 0;
- RESULT := RTEMS.SUCCESSFUL;
-
- end TASK_CREATE;
-
- procedure TASK_IDENT (
- NAME : in RTEMS.NAME;
- NODE : in RTEMS.UNSIGNED32;
- ID : out RTEMS.ID;
- RESULT : out RTEMS.STATUS_CODES
- ) is
- pragma Unreferenced(NAME);
- pragma Unreferenced(NODE);
- begin
-
- ID := 0;
- RESULT := RTEMS.SUCCESSFUL;
-
- end TASK_IDENT;
-
- procedure TASK_START (
- ID : in RTEMS.ID;
- ENTRY_POINT : in RTEMS.TASKS.ENTRY_POINT;
- ARGUMENT : in RTEMS.UNSIGNED32;
- RESULT : out RTEMS.STATUS_CODES
- ) is
- pragma Unreferenced(ID);
- pragma Unreferenced(ENTRY_POINT);
- pragma Unreferenced(ARGUMENT);
- begin
-
- RESULT := RTEMS.SUCCESSFUL;
-
- end TASK_START;
-
- procedure TASK_RESTART (
- ID : in RTEMS.ID;
- ARGUMENT : in RTEMS.UNSIGNED32;
- RESULT : out RTEMS.STATUS_CODES
- ) is
- pragma Unreferenced(ID);
- pragma Unreferenced(ARGUMENT);
- begin
-
- RESULT := RTEMS.SUCCESSFUL;
-
- end TASK_RESTART;
-
- procedure TASK_DELETE (
- ID : in RTEMS.ID;
- RESULT : out RTEMS.STATUS_CODES
- ) is
- pragma Unreferenced(ID);
- begin
-
- RESULT := RTEMS.SUCCESSFUL;
-
- end TASK_DELETE;
-
- procedure TASK_SUSPEND (
- ID : in RTEMS.ID;
- RESULT : out RTEMS.STATUS_CODES
- ) is
- pragma Unreferenced(ID);
- begin
-
- RESULT := RTEMS.SUCCESSFUL;
-
- end TASK_SUSPEND;
-
- procedure TASK_RESUME (
- ID : in RTEMS.ID;
- RESULT : out RTEMS.STATUS_CODES
- ) is
- pragma Unreferenced(ID);
- begin
-
- RESULT := RTEMS.SUCCESSFUL;
-
- end TASK_RESUME;
-
- procedure TASK_SET_PRIORITY (
- ID : in RTEMS.ID;
- NEW_PRIORITY : in RTEMS.TASKS.PRIORITY;
- OLD_PRIORITY : out RTEMS.TASKS.PRIORITY;
- RESULT : out RTEMS.STATUS_CODES
- ) is
- pragma Unreferenced(ID);
- pragma Unreferenced(NEW_PRIORITY);
- begin
-
- OLD_PRIORITY := 0;
- RESULT := RTEMS.SUCCESSFUL;
-
- end TASK_SET_PRIORITY;
-
- procedure TASK_MODE (
- MODE_SET : in RTEMS.MODE;
- MASK : in RTEMS.MODE;
- PREVIOUS_MODE_SET : out RTEMS.MODE;
- RESULT : out RTEMS.STATUS_CODES
- ) is
- pragma Unreferenced(MODE_SET);
- pragma Unreferenced(MASK);
- begin
-
- PREVIOUS_MODE_SET := 0;
- RESULT := RTEMS.SUCCESSFUL;
-
- end TASK_MODE;
-
- procedure TASK_WAKE_WHEN (
- TIME_BUFFER : in RTEMS.TIME_OF_DAY;
- RESULT : out RTEMS.STATUS_CODES
- ) is
- pragma Unreferenced(TIME_BUFFER);
- begin
-
- RESULT := RTEMS.SUCCESSFUL;
-
- end TASK_WAKE_WHEN;
-
- procedure TASK_WAKE_AFTER (
- TICKS : in RTEMS.INTERVAL;
- RESULT : out RTEMS.STATUS_CODES
- ) is
- pragma Unreferenced(TICKS);
- begin
-
- RESULT := RTEMS.SUCCESSFUL;
-
- end TASK_WAKE_AFTER;
-
--- Interrupt Manager
-
--- procedure INTERRUPT_CATCH (
--- NEW_ISR_HANDLER : in RTEMS.ADDRESS;
--- VECTOR : in RTEMS.VECTOR_NUMBER;
--- OLD_ISR_HANDLER : out RTEMS.ADDRESS;
--- RESULT : out RTEMS.STATUS_CODES
--- ) is
--- begin
---
--- OLD_ISR_HANDLER := RTEMS.Null_Address;
--- RESULT := RTEMS.SUCCESSFUL;
---
--- end INTERRUPT_CATCH;
-
--- Clock Manager
-
- procedure CLOCK_GET_TOD (
- TIME_BUFFER : out RTEMS.TIME_OF_DAY;
- RESULT : out RTEMS.STATUS_CODES
- ) is
- pragma Unreferenced(TIME_BUFFER);
- begin
-
- RESULT := RTEMS.SUCCESSFUL;
-
- end CLOCK_GET_TOD;
-
- procedure CLOCK_SET (
- TIME_BUFFER : in RTEMS.TIME_OF_DAY;
- RESULT : out RTEMS.STATUS_CODES
- ) is
- pragma Unreferenced(TIME_BUFFER);
- begin
-
- RESULT := RTEMS.SUCCESSFUL;
-
- end CLOCK_SET;
-
- procedure CLOCK_TICK (
- RESULT : out RTEMS.STATUS_CODES
- ) is
- begin
-
- RESULT := RTEMS.SUCCESSFUL;
-
- end CLOCK_TICK;
-
--- Timer Manager
-
- procedure TIMER_CREATE (
- NAME : in RTEMS.NAME;
- ID : out RTEMS.ID;
- RESULT : out RTEMS.STATUS_CODES
- ) is
- pragma Unreferenced(NAME);
- begin
-
- ID := 0;
- RESULT := RTEMS.SUCCESSFUL;
-
- end TIMER_CREATE;
-
- procedure TIMER_DELETE (
- ID : in RTEMS.ID;
- RESULT : out RTEMS.STATUS_CODES
- ) is
- pragma Unreferenced(ID);
- begin
-
- RESULT := RTEMS.SUCCESSFUL;
-
- end TIMER_DELETE;
-
- procedure TIMER_IDENT (
- NAME : in RTEMS.NAME;
- ID : out RTEMS.ID;
- RESULT : out RTEMS.STATUS_CODES
- ) is
- pragma Unreferenced(NAME);
- begin
-
- ID := 0;
- RESULT := RTEMS.SUCCESSFUL;
-
- end TIMER_IDENT;
-
- procedure TIMER_FIRE_AFTER (
- ID : in RTEMS.ID;
- TICKS : in RTEMS.INTERVAL;
- ROUTINE : in RTEMS.TIMER.SERVICE_ROUTINE;
- USER_DATA : in RTEMS.ADDRESS;
- RESULT : out RTEMS.STATUS_CODES
- ) is
- pragma Unreferenced(ID);
- pragma Unreferenced(TICKS);
- pragma Unreferenced(ROUTINE);
- pragma Unreferenced(USER_DATA);
- begin
-
- RESULT := RTEMS.SUCCESSFUL;
-
- end TIMER_FIRE_AFTER;
-
- procedure TIMER_FIRE_WHEN (
- ID : in RTEMS.ID;
- WALL_TIME : in RTEMS.TIME_OF_DAY;
- ROUTINE : in RTEMS.TIMER.SERVICE_ROUTINE;
- USER_DATA : in RTEMS.ADDRESS;
- RESULT : out RTEMS.STATUS_CODES
- ) is
- pragma Unreferenced(ID);
- pragma Unreferenced(WALL_TIME);
- pragma Unreferenced(ROUTINE);
- pragma Unreferenced(USER_DATA);
- begin
-
- RESULT := RTEMS.SUCCESSFUL;
-
- end TIMER_FIRE_WHEN;
-
- procedure TIMER_RESET (
- ID : in RTEMS.ID;
- RESULT : out RTEMS.STATUS_CODES
- ) is
- pragma Unreferenced(ID);
- begin
-
- RESULT := RTEMS.SUCCESSFUL;
-
- end TIMER_RESET;
-
- procedure TIMER_CANCEL (
- ID : in RTEMS.ID;
- RESULT : out RTEMS.STATUS_CODES
- ) is
- pragma Unreferenced(ID);
- begin
-
- RESULT := RTEMS.SUCCESSFUL;
-
- end TIMER_CANCEL;
-
--- Semaphore Manager
-
- procedure SEMAPHORE_CREATE (
- NAME : in RTEMS.NAME;
- COUNT : in RTEMS.UNSIGNED32;
- ATTRIBUTE_SET : in RTEMS.ATTRIBUTE;
- PRIORITY_CEILING : in RTEMS.TASKS.PRIORITY;
- ID : out RTEMS.ID;
- RESULT : out RTEMS.STATUS_CODES
- ) is
- pragma Unreferenced(NAME);
- pragma Unreferenced(COUNT);
- pragma Unreferenced(ATTRIBUTE_SET);
- pragma Unreferenced(PRIORITY_CEILING);
- begin
-
- ID := 0;
- RESULT := RTEMS.SUCCESSFUL;
-
- end SEMAPHORE_CREATE;
-
- procedure SEMAPHORE_DELETE (
- ID : in RTEMS.ID;
- RESULT : out RTEMS.STATUS_CODES
- ) is
- pragma Unreferenced(ID);
- begin
-
- RESULT := RTEMS.SUCCESSFUL;
-
- end SEMAPHORE_DELETE;
-
- procedure SEMAPHORE_IDENT (
- NAME : in RTEMS.NAME;
- NODE : in RTEMS.UNSIGNED32;
- ID : out RTEMS.ID;
- RESULT : out RTEMS.STATUS_CODES
- ) is
- pragma Unreferenced(NAME);
- pragma Unreferenced(NODE);
- begin
-
- ID := 0;
- RESULT := RTEMS.SUCCESSFUL;
-
- end SEMAPHORE_IDENT;
-
- procedure SEMAPHORE_OBTAIN (
- ID : in RTEMS.ID;
- OPTION_SET : in RTEMS.OPTION;
- TIMEOUT : in RTEMS.INTERVAL;
- RESULT : out RTEMS.STATUS_CODES
- ) is
- pragma Unreferenced(ID);
- pragma Unreferenced(OPTION_SET);
- pragma Unreferenced(TIMEOUT);
- begin
-
- RESULT := RTEMS.SUCCESSFUL;
-
- end SEMAPHORE_OBTAIN;
-
- procedure SEMAPHORE_RELEASE (
- ID : in RTEMS.ID;
- RESULT : out RTEMS.STATUS_CODES
- ) is
- pragma Unreferenced(ID);
- begin
-
- RESULT := RTEMS.SUCCESSFUL;
-
- end SEMAPHORE_RELEASE;
-
--- Message Queue Manager
-
- procedure MESSAGE_QUEUE_CREATE (
- Name : in RTEMS.Name;
- Count : in RTEMS.Unsigned32;
- Max_Message_Size : in RTEMS.Unsigned32;
- Attribute_Set : in RTEMS.Attribute;
- ID : out RTEMS.ID;
- Result : out RTEMS.Status_Codes
- ) is
- pragma Unreferenced(Name);
- pragma Unreferenced(Count);
- pragma Unreferenced(Max_Message_Size);
- pragma Unreferenced(Attribute_Set);
- begin
-
- ID := 0;
- RESULT := RTEMS.SUCCESSFUL;
-
- end MESSAGE_QUEUE_CREATE;
-
- procedure MESSAGE_QUEUE_IDENT (
- NAME : in RTEMS.NAME;
- NODE : in RTEMS.UNSIGNED32;
- ID : out RTEMS.ID;
- RESULT : out RTEMS.STATUS_CODES
- ) is
- pragma Unreferenced(NAME);
- pragma Unreferenced(NODE);
- begin
-
- ID := 0;
- RESULT := RTEMS.SUCCESSFUL;
-
- end MESSAGE_QUEUE_IDENT;
-
- procedure MESSAGE_QUEUE_DELETE (
- ID : in RTEMS.ID;
- RESULT : out RTEMS.STATUS_CODES
- ) is
- pragma Unreferenced(ID);
- begin
-
- RESULT := RTEMS.SUCCESSFUL;
-
- end MESSAGE_QUEUE_DELETE;
-
- procedure MESSAGE_QUEUE_SEND (
- ID : in RTEMS.ID;
- BUFFER : in RTEMS.ADDRESS;
- Size : in RTEMS.Unsigned32;
- RESULT : out RTEMS.STATUS_CODES
- ) is
- pragma Unreferenced(ID);
- pragma Unreferenced(BUFFER);
- pragma Unreferenced(Size);
- begin
-
- RESULT := RTEMS.SUCCESSFUL;
-
- end MESSAGE_QUEUE_SEND;
-
- procedure MESSAGE_QUEUE_URGENT (
- ID : in RTEMS.ID;
- BUFFER : in RTEMS.ADDRESS;
- Size : in RTEMS.Unsigned32;
- RESULT : out RTEMS.STATUS_CODES
- ) is
- pragma Unreferenced(ID);
- pragma Unreferenced(BUFFER);
- pragma Unreferenced(Size);
- begin
-
- RESULT := RTEMS.SUCCESSFUL;
-
- end MESSAGE_QUEUE_URGENT;
-
- procedure MESSAGE_QUEUE_BROADCAST (
- ID : in RTEMS.ID;
- BUFFER : in RTEMS.ADDRESS;
- Size : in RTEMS.Unsigned32;
- COUNT : out RTEMS.UNSIGNED32;
- RESULT : out RTEMS.STATUS_CODES
- ) is
- pragma Unreferenced(ID);
- pragma Unreferenced(BUFFER);
- pragma Unreferenced(Size);
- begin
-
- COUNT := 0;
- RESULT := RTEMS.SUCCESSFUL;
-
- end MESSAGE_QUEUE_BROADCAST;
-
- procedure MESSAGE_QUEUE_RECEIVE (
- ID : in RTEMS.ID;
- BUFFER : in RTEMS.ADDRESS;
- OPTION_SET : in RTEMS.OPTION;
- TIMEOUT : in RTEMS.INTERVAL;
- Size : out RTEMS.Unsigned32;
- RESULT : out RTEMS.STATUS_CODES
- ) is
- pragma Unreferenced(ID);
- pragma Unreferenced(BUFFER);
- pragma Unreferenced(OPTION_SET);
- pragma Unreferenced(TIMEOUT);
- begin
-
- Size := 0;
- RESULT := RTEMS.SUCCESSFUL;
-
- end MESSAGE_QUEUE_RECEIVE;
-
- procedure MESSAGE_QUEUE_FLUSH (
- ID : in RTEMS.ID;
- COUNT : out RTEMS.UNSIGNED32;
- RESULT : out RTEMS.STATUS_CODES
- ) is
- pragma Unreferenced(ID);
- begin
-
- COUNT := 0;
- RESULT := RTEMS.SUCCESSFUL;
-
- end MESSAGE_QUEUE_FLUSH;
-
--- Event Manager
-
- procedure EVENT_SEND (
- ID : in RTEMS.ID;
- EVENT_IN : in RTEMS.EVENT_SET;
- RESULT : out RTEMS.STATUS_CODES
- ) is
- pragma Unreferenced(ID);
- pragma Unreferenced(EVENT_IN);
- begin
-
- RESULT := RTEMS.SUCCESSFUL;
-
- end EVENT_SEND;
-
- procedure EVENT_RECEIVE (
- EVENT_IN : in RTEMS.EVENT_SET;
- OPTION_SET : in RTEMS.OPTION;
- TICKS : in RTEMS.INTERVAL;
- EVENT_OUT : out RTEMS.EVENT_SET;
- RESULT : out RTEMS.STATUS_CODES
- ) is
- pragma Unreferenced(EVENT_IN);
- pragma Unreferenced(OPTION_SET);
- pragma Unreferenced(TICKS);
- begin
-
- EVENT_OUT := 0;
- RESULT := RTEMS.SUCCESSFUL;
-
- end EVENT_RECEIVE;
-
--- Signal Manager
-
- procedure SIGNAL_CATCH (
- ASR_HANDLER : in RTEMS.ASR_HANDLER;
- MODE_SET : in RTEMS.MODE;
- RESULT : out RTEMS.STATUS_CODES
- ) is
- pragma Unreferenced(ASR_HANDLER);
- pragma Unreferenced(MODE_SET);
- begin
-
- RESULT := RTEMS.SUCCESSFUL;
-
- end SIGNAL_CATCH;
-
- procedure SIGNAL_SEND (
- ID : in RTEMS.ID;
- SIGNAL_SET : in RTEMS.SIGNAL_SET;
- RESULT : out RTEMS.STATUS_CODES
- ) is
- pragma Unreferenced(ID);
- pragma Unreferenced(SIGNAL_SET);
- begin
-
- RESULT := RTEMS.SUCCESSFUL;
-
- end SIGNAL_SEND;
-
--- Partition Manager
-
- procedure PARTITION_CREATE (
- NAME : in RTEMS.NAME;
- STARTING_ADDRESS : in RTEMS.ADDRESS;
- LENGTH : in RTEMS.UNSIGNED32;
- BUFFER_SIZE : in RTEMS.UNSIGNED32;
- ATTRIBUTE_SET : in RTEMS.ATTRIBUTE;
- ID : out RTEMS.ID;
- RESULT : out RTEMS.STATUS_CODES
- ) is
- pragma Unreferenced(NAME);
- pragma Unreferenced(STARTING_ADDRESS);
- pragma Unreferenced(LENGTH);
- pragma Unreferenced(BUFFER_SIZE);
- pragma Unreferenced(ATTRIBUTE_SET);
- begin
-
- ID := 0;
- RESULT := RTEMS.SUCCESSFUL;
-
- end PARTITION_CREATE;
-
- procedure PARTITION_IDENT (
- NAME : in RTEMS.NAME;
- NODE : in RTEMS.UNSIGNED32;
- ID : out RTEMS.ID;
- RESULT : out RTEMS.STATUS_CODES
- ) is
- pragma Unreferenced(NAME);
- pragma Unreferenced(NODE);
- begin
-
- ID := 0;
- RESULT := RTEMS.SUCCESSFUL;
-
- end PARTITION_IDENT;
-
- procedure PARTITION_DELETE (
- ID : in RTEMS.ID;
- RESULT : out RTEMS.STATUS_CODES
- ) is
- pragma Unreferenced(ID);
- begin
-
- RESULT := RTEMS.SUCCESSFUL;
-
- end PARTITION_DELETE;
-
- procedure PARTITION_GET_BUFFER (
- ID : in RTEMS.ID;
- BUFFER : out RTEMS.ADDRESS;
- RESULT : out RTEMS.STATUS_CODES
- ) is
- pragma Unreferenced(ID);
- begin
-
- BUFFER := RTEMS.Null_Address;
- RESULT := RTEMS.SUCCESSFUL;
-
- end PARTITION_GET_BUFFER;
-
- procedure PARTITION_RETURN_BUFFER (
- ID : in RTEMS.ID;
- BUFFER : in RTEMS.ADDRESS;
- RESULT : out RTEMS.STATUS_CODES
- ) is
- pragma Unreferenced(ID);
- pragma Unreferenced(BUFFER);
- begin
-
- RESULT := RTEMS.SUCCESSFUL;
-
- end PARTITION_RETURN_BUFFER;
-
--- Region Manager
-
- procedure REGION_CREATE (
- NAME : in RTEMS.NAME;
- STARTING_ADDRESS : in RTEMS.ADDRESS;
- LENGTH : in RTEMS.UNSIGNED32;
- PAGE_SIZE : in RTEMS.UNSIGNED32;
- ATTRIBUTE_SET : in RTEMS.ATTRIBUTE;
- ID : out RTEMS.ID;
- RESULT : out RTEMS.STATUS_CODES
- ) is
- pragma Unreferenced(NAME);
- pragma Unreferenced(STARTING_ADDRESS);
- pragma Unreferenced(LENGTH);
- pragma Unreferenced(PAGE_SIZE);
- pragma Unreferenced(ATTRIBUTE_SET);
- begin
-
- ID := 0;
- RESULT := RTEMS.SUCCESSFUL;
-
- end REGION_CREATE;
-
- procedure REGION_IDENT (
- NAME : in RTEMS.NAME;
- ID : out RTEMS.ID;
- RESULT : out RTEMS.STATUS_CODES
- ) is
- pragma Unreferenced(NAME);
- begin
-
- ID := 0;
- RESULT := RTEMS.SUCCESSFUL;
-
- end REGION_IDENT;
-
- procedure REGION_DELETE (
- ID : in RTEMS.ID;
- RESULT : out RTEMS.STATUS_CODES
- ) is
- pragma Unreferenced(ID);
- begin
-
- RESULT := RTEMS.SUCCESSFUL;
-
- end REGION_DELETE;
-
- procedure REGION_GET_SEGMENT (
- ID : in RTEMS.ID;
- SIZE : in RTEMS.UNSIGNED32;
- OPTION_SET : in RTEMS.OPTION;
- TIMEOUT : in RTEMS.INTERVAL;
- SEGMENT : out RTEMS.ADDRESS;
- RESULT : out RTEMS.STATUS_CODES
- ) is
- pragma Unreferenced(ID);
- pragma Unreferenced(SIZE);
- pragma Unreferenced(OPTION_SET);
- pragma Unreferenced(TIMEOUT);
- begin
-
- SEGMENT := RTEMS.Null_Address;
- RESULT := RTEMS.SUCCESSFUL;
-
- end REGION_GET_SEGMENT;
-
- procedure REGION_RETURN_SEGMENT (
- ID : in RTEMS.ID;
- SEGMENT : in RTEMS.ADDRESS;
- RESULT : out RTEMS.STATUS_CODES
- ) is
- pragma Unreferenced(ID);
- pragma Unreferenced(SEGMENT);
- begin
-
- RESULT := RTEMS.SUCCESSFUL;
-
- end REGION_RETURN_SEGMENT;
-
--- Dual Ported Memory Manager
-
- procedure PORT_CREATE (
- NAME : in RTEMS.NAME;
- INTERNAL_START : in RTEMS.ADDRESS;
- EXTERNAL_START : in RTEMS.ADDRESS;
- LENGTH : in RTEMS.UNSIGNED32;
- ID : out RTEMS.ID;
- RESULT : out RTEMS.STATUS_CODES
- ) is
- pragma Unreferenced(NAME);
- pragma Unreferenced(INTERNAL_START);
- pragma Unreferenced(EXTERNAL_START);
- pragma Unreferenced(LENGTH);
- begin
-
- ID := 0;
- RESULT := RTEMS.SUCCESSFUL;
-
- end PORT_CREATE;
-
- procedure PORT_IDENT (
- NAME : in RTEMS.NAME;
- ID : out RTEMS.ID;
- RESULT : out RTEMS.STATUS_CODES
- ) is
- pragma Unreferenced(NAME);
- begin
-
- ID := 0;
- RESULT := RTEMS.SUCCESSFUL;
-
- end PORT_IDENT;
-
- procedure PORT_DELETE (
- ID : in RTEMS.ID;
- RESULT : out RTEMS.STATUS_CODES
- ) is
- pragma Unreferenced(ID);
- begin
-
- RESULT := RTEMS.SUCCESSFUL;
-
- end PORT_DELETE;
-
- procedure PORT_EXTERNAL_TO_INTERNAL (
- ID : in RTEMS.ID;
- EXTERNAL : in RTEMS.ADDRESS;
- INTERNAL : out RTEMS.ADDRESS;
- RESULT : out RTEMS.STATUS_CODES
- ) is
- pragma Unreferenced(ID);
- pragma Unreferenced(EXTERNAL);
- begin
-
- INTERNAL := RTEMS.Null_Address;
- RESULT := RTEMS.SUCCESSFUL;
-
- end PORT_EXTERNAL_TO_INTERNAL;
-
- procedure PORT_INTERNAL_TO_EXTERNAL (
- ID : in RTEMS.ID;
- INTERNAL : in RTEMS.ADDRESS;
- EXTERNAL : out RTEMS.ADDRESS;
- RESULT : out RTEMS.STATUS_CODES
- ) is
- pragma Unreferenced(ID);
- pragma Unreferenced(INTERNAL);
- begin
-
- EXTERNAL := RTEMS.Null_Address;
- RESULT := RTEMS.SUCCESSFUL;
-
- end PORT_INTERNAL_TO_EXTERNAL;
-
--- Fatal Error Manager
-
- procedure FATAL_ERROR_OCCURRED (
- THE_ERROR : in RTEMS.UNSIGNED32
- ) is
- pragma Unreferenced(THE_ERROR);
- begin
-
- NULL;
-
- end FATAL_ERROR_OCCURRED;
-
--- Rate Monotonic Manager
-
- procedure RATE_MONOTONIC_CREATE (
- NAME : in RTEMS.NAME;
- ID : out RTEMS.ID;
- RESULT : out RTEMS.STATUS_CODES
- ) is
- pragma Unreferenced(NAME);
- begin
-
- ID := 0;
- RESULT := RTEMS.SUCCESSFUL;
-
- end RATE_MONOTONIC_CREATE;
-
- procedure RATE_MONOTONIC_IDENT (
- NAME : in RTEMS.NAME;
- ID : out RTEMS.ID;
- RESULT : out RTEMS.STATUS_CODES
- ) is
- pragma Unreferenced(NAME);
- begin
-
- ID := 0;
- RESULT := RTEMS.SUCCESSFUL;
-
- end RATE_MONOTONIC_IDENT;
-
- procedure RATE_MONOTONIC_DELETE (
- ID : in RTEMS.ID;
- RESULT : out RTEMS.STATUS_CODES
- ) is
- pragma Unreferenced(ID);
- begin
-
- RESULT := RTEMS.SUCCESSFUL;
-
- end RATE_MONOTONIC_DELETE;
-
- procedure RATE_MONOTONIC_CANCEL (
- ID : in RTEMS.ID;
- RESULT : out RTEMS.STATUS_CODES
- ) is
- pragma Unreferenced(ID);
- begin
-
- RESULT := RTEMS.SUCCESSFUL;
-
- end RATE_MONOTONIC_CANCEL;
-
- procedure RATE_MONOTONIC_PERIOD (
- ID : in RTEMS.ID;
- LENGTH : in RTEMS.INTERVAL;
- RESULT : out RTEMS.STATUS_CODES
- ) is
- pragma Unreferenced(ID);
- pragma Unreferenced(LENGTH);
- begin
-
- RESULT := RTEMS.SUCCESSFUL;
-
- end RATE_MONOTONIC_PERIOD;
-
--- Multiprocessing Manager
-
- procedure MULTIPROCESSING_ANNOUNCE
- is
- begin
-
- NULL;
-
- end MULTIPROCESSING_ANNOUNCE;
-
-end DUMMY_RTEMS;
diff --git a/testsuites/ada/tmtests/tmoverhd/dummy_rtems.ads b/testsuites/ada/tmtests/tmoverhd/dummy_rtems.ads
deleted file mode 100644
index ea4f129893..0000000000
--- a/testsuites/ada/tmtests/tmoverhd/dummy_rtems.ads
+++ /dev/null
@@ -1,445 +0,0 @@
---
--- DUMMY_RTEMS / SPECIFICATION
---
--- DESCRIPTION:
---
--- This package contains specifications for stub routines
--- which are used to time the invocation overhead incurred
--- with an Ada application program invokes each RTEMS directive.
---
--- DEPENDENCIES:
---
---
---
--- COPYRIGHT (c) 1989-2007.
--- On-Line Applications Research Corporation (OAR).
---
--- The license and distribution terms for this file may in
--- the file LICENSE in this distribution or at
--- http://www.rtems.org/license/LICENSE.
---
-
-with RTEMS;
-with RTEMS.CLOCK;
-with RTEMS.TASKS;
-with RTEMS.TIMER;
-
-package DUMMY_RTEMS is
-
--- Task Manager
-
- procedure TASK_CREATE (
- NAME : in RTEMS.NAME;
- INITIAL_PRIORITY : in RTEMS.TASKS.PRIORITY;
- STACK_SIZE : in RTEMS.UNSIGNED32;
- INITIAL_MODES : in RTEMS.MODE;
- ATTRIBUTE_SET : in RTEMS.ATTRIBUTE;
- ID : out RTEMS.ID;
- RESULT : out RTEMS.STATUS_CODES
- );
-
- procedure TASK_IDENT (
- NAME : in RTEMS.NAME;
- NODE : in RTEMS.UNSIGNED32;
- ID : out RTEMS.ID;
- RESULT : out RTEMS.STATUS_CODES
- );
-
- procedure TASK_START (
- ID : in RTEMS.ID;
- ENTRY_POINT : in RTEMS.TASKS.ENTRY_POINT;
- ARGUMENT : in RTEMS.UNSIGNED32;
- RESULT : out RTEMS.STATUS_CODES
- );
-
- procedure TASK_RESTART (
- ID : in RTEMS.ID;
- ARGUMENT : in RTEMS.UNSIGNED32;
- RESULT : out RTEMS.STATUS_CODES
- );
-
- procedure TASK_DELETE (
- ID : in RTEMS.ID;
- RESULT : out RTEMS.STATUS_CODES
- );
-
- procedure TASK_SUSPEND (
- ID : in RTEMS.ID;
- RESULT : out RTEMS.STATUS_CODES
- );
-
- procedure TASK_RESUME (
- ID : in RTEMS.ID;
- RESULT : out RTEMS.STATUS_CODES
- );
-
- procedure TASK_SET_PRIORITY (
- ID : in RTEMS.ID;
- NEW_PRIORITY : in RTEMS.TASKS.PRIORITY;
- OLD_PRIORITY : out RTEMS.TASKS.PRIORITY;
- RESULT : out RTEMS.STATUS_CODES
- );
-
- procedure TASK_MODE (
- MODE_SET : in RTEMS.MODE;
- MASK : in RTEMS.MODE;
- PREVIOUS_MODE_SET : out RTEMS.MODE;
- RESULT : out RTEMS.STATUS_CODES
- );
-
- procedure TASK_WAKE_WHEN (
- TIME_BUFFER : in RTEMS.TIME_OF_DAY;
- RESULT : out RTEMS.STATUS_CODES
- );
-
- procedure TASK_WAKE_AFTER (
- TICKS : in RTEMS.INTERVAL;
- RESULT : out RTEMS.STATUS_CODES
- );
-
--- Interrupt Manager
-
--- procedure INTERRUPT_CATCH (
--- NEW_ISR_HANDLER : in RTEMS.ADDRESS;
--- VECTOR : in RTEMS.VECTOR_NUMBER;
--- OLD_ISR_HANDLER : out RTEMS.ADDRESS;
--- RESULT : out RTEMS.STATUS_CODES
--- );
-
--- Clock Manager
-
- procedure CLOCK_GET_TOD (
- TIME_BUFFER : out RTEMS.TIME_OF_DAY;
- RESULT : out RTEMS.STATUS_CODES
- );
-
- procedure CLOCK_SET (
- TIME_BUFFER : in RTEMS.TIME_OF_DAY;
- RESULT : out RTEMS.STATUS_CODES
- );
-
- procedure CLOCK_TICK (
- RESULT : out RTEMS.STATUS_CODES
- );
-
--- Timer Manager
-
- procedure TIMER_CREATE (
- NAME : in RTEMS.NAME;
- ID : out RTEMS.ID;
- RESULT : out RTEMS.STATUS_CODES
- );
-
- procedure TIMER_DELETE (
- ID : in RTEMS.ID;
- RESULT : out RTEMS.STATUS_CODES
- );
-
- procedure TIMER_IDENT (
- NAME : in RTEMS.NAME;
- ID : out RTEMS.ID;
- RESULT : out RTEMS.STATUS_CODES
- );
-
- procedure TIMER_FIRE_AFTER (
- ID : in RTEMS.ID;
- TICKS : in RTEMS.INTERVAL;
- ROUTINE : in RTEMS.TIMER.SERVICE_ROUTINE;
- USER_DATA : in RTEMS.ADDRESS;
- RESULT : out RTEMS.STATUS_CODES
- );
-
- procedure TIMER_FIRE_WHEN (
- ID : in RTEMS.ID;
- WALL_TIME : in RTEMS.TIME_OF_DAY;
- ROUTINE : in RTEMS.TIMER.SERVICE_ROUTINE;
- USER_DATA : in RTEMS.ADDRESS;
- RESULT : out RTEMS.STATUS_CODES
- );
-
- procedure TIMER_RESET (
- ID : in RTEMS.ID;
- RESULT : out RTEMS.STATUS_CODES
- );
-
- procedure TIMER_CANCEL (
- ID : in RTEMS.ID;
- RESULT : out RTEMS.STATUS_CODES
- );
-
--- Semaphore Manager
-
- procedure SEMAPHORE_CREATE (
- NAME : in RTEMS.NAME;
- COUNT : in RTEMS.UNSIGNED32;
- ATTRIBUTE_SET : in RTEMS.ATTRIBUTE;
- PRIORITY_CEILING : in RTEMS.TASKS.PRIORITY;
- ID : out RTEMS.ID;
- RESULT : out RTEMS.STATUS_CODES
- );
-
- procedure SEMAPHORE_DELETE (
- ID : in RTEMS.ID;
- RESULT : out RTEMS.STATUS_CODES
- );
-
- procedure SEMAPHORE_IDENT (
- NAME : in RTEMS.NAME;
- NODE : in RTEMS.UNSIGNED32;
- ID : out RTEMS.ID;
- RESULT : out RTEMS.STATUS_CODES
- );
-
- procedure SEMAPHORE_OBTAIN (
- ID : in RTEMS.ID;
- OPTION_SET : in RTEMS.OPTION;
- TIMEOUT : in RTEMS.INTERVAL;
- RESULT : out RTEMS.STATUS_CODES
- );
-
- procedure SEMAPHORE_RELEASE (
- ID : in RTEMS.ID;
- RESULT : out RTEMS.STATUS_CODES
- );
-
--- Message Queue Manager
-
- procedure MESSAGE_QUEUE_CREATE (
- Name : in RTEMS.Name;
- Count : in RTEMS.Unsigned32;
- Max_Message_Size : in RTEMS.Unsigned32;
- Attribute_Set : in RTEMS.Attribute;
- ID : out RTEMS.ID;
- Result : out RTEMS.Status_Codes
- );
-
- procedure MESSAGE_QUEUE_IDENT (
- NAME : in RTEMS.NAME;
- NODE : in RTEMS.UNSIGNED32;
- ID : out RTEMS.ID;
- RESULT : out RTEMS.STATUS_CODES
- );
-
- procedure MESSAGE_QUEUE_DELETE (
- ID : in RTEMS.ID;
- RESULT : out RTEMS.STATUS_CODES
- );
-
- procedure MESSAGE_QUEUE_SEND (
- ID : in RTEMS.ID;
- BUFFER : in RTEMS.ADDRESS;
- SIZE : in RTEMS.UNSIGNED32;
- RESULT : out RTEMS.STATUS_CODES
- );
-
- procedure MESSAGE_QUEUE_URGENT (
- ID : in RTEMS.ID;
- BUFFER : in RTEMS.ADDRESS;
- SIZE : in RTEMS.UNSIGNED32;
- RESULT : out RTEMS.STATUS_CODES
- );
-
- procedure MESSAGE_QUEUE_BROADCAST (
- ID : in RTEMS.ID;
- BUFFER : in RTEMS.ADDRESS;
- SIZE : in RTEMS.UNSIGNED32;
- COUNT : out RTEMS.UNSIGNED32;
- RESULT : out RTEMS.STATUS_CODES
- );
-
- procedure MESSAGE_QUEUE_RECEIVE (
- ID : in RTEMS.ID;
- BUFFER : in RTEMS.ADDRESS;
- OPTION_SET : in RTEMS.OPTION;
- TIMEOUT : in RTEMS.INTERVAL;
- SIZE : out RTEMS.UNSIGNED32;
- RESULT : out RTEMS.STATUS_CODES
- );
-
- procedure MESSAGE_QUEUE_FLUSH (
- ID : in RTEMS.ID;
- COUNT : out RTEMS.UNSIGNED32;
- RESULT : out RTEMS.STATUS_CODES
- );
-
--- Event Manager
-
- procedure EVENT_SEND (
- ID : in RTEMS.ID;
- EVENT_IN : in RTEMS.EVENT_SET;
- RESULT : out RTEMS.STATUS_CODES
- );
-
- procedure EVENT_RECEIVE (
- EVENT_IN : in RTEMS.EVENT_SET;
- OPTION_SET : in RTEMS.OPTION;
- TICKS : in RTEMS.INTERVAL;
- EVENT_OUT : out RTEMS.EVENT_SET;
- RESULT : out RTEMS.STATUS_CODES
- );
-
--- Signal Manager
-
- procedure SIGNAL_CATCH (
- ASR_HANDLER : in RTEMS.ASR_HANDLER;
- MODE_SET : in RTEMS.MODE;
- RESULT : out RTEMS.STATUS_CODES
- );
-
- procedure SIGNAL_SEND (
- ID : in RTEMS.ID;
- SIGNAL_SET : in RTEMS.SIGNAL_SET;
- RESULT : out RTEMS.STATUS_CODES
- );
-
--- Partition Manager
-
- procedure PARTITION_CREATE (
- NAME : in RTEMS.NAME;
- STARTING_ADDRESS : in RTEMS.ADDRESS;
- LENGTH : in RTEMS.UNSIGNED32;
- BUFFER_SIZE : in RTEMS.UNSIGNED32;
- ATTRIBUTE_SET : in RTEMS.ATTRIBUTE;
- ID : out RTEMS.ID;
- RESULT : out RTEMS.STATUS_CODES
- );
-
- procedure PARTITION_IDENT (
- NAME : in RTEMS.NAME;
- NODE : in RTEMS.UNSIGNED32;
- ID : out RTEMS.ID;
- RESULT : out RTEMS.STATUS_CODES
- );
-
- procedure PARTITION_DELETE (
- ID : in RTEMS.ID;
- RESULT : out RTEMS.STATUS_CODES
- );
-
- procedure PARTITION_GET_BUFFER (
- ID : in RTEMS.ID;
- BUFFER : out RTEMS.ADDRESS;
- RESULT : out RTEMS.STATUS_CODES
- );
-
- procedure PARTITION_RETURN_BUFFER (
- ID : in RTEMS.ID;
- BUFFER : in RTEMS.ADDRESS;
- RESULT : out RTEMS.STATUS_CODES
- );
-
--- Region Manager
-
- procedure REGION_CREATE (
- NAME : in RTEMS.NAME;
- STARTING_ADDRESS : in RTEMS.ADDRESS;
- LENGTH : in RTEMS.UNSIGNED32;
- PAGE_SIZE : in RTEMS.UNSIGNED32;
- ATTRIBUTE_SET : in RTEMS.ATTRIBUTE;
- ID : out RTEMS.ID;
- RESULT : out RTEMS.STATUS_CODES
- );
-
- procedure REGION_IDENT (
- NAME : in RTEMS.NAME;
- ID : out RTEMS.ID;
- RESULT : out RTEMS.STATUS_CODES
- );
-
- procedure REGION_DELETE (
- ID : in RTEMS.ID;
- RESULT : out RTEMS.STATUS_CODES
- );
-
- procedure REGION_GET_SEGMENT (
- ID : in RTEMS.ID;
- SIZE : in RTEMS.UNSIGNED32;
- OPTION_SET : in RTEMS.OPTION;
- TIMEOUT : in RTEMS.INTERVAL;
- SEGMENT : out RTEMS.ADDRESS;
- RESULT : out RTEMS.STATUS_CODES
- );
-
- procedure REGION_RETURN_SEGMENT (
- ID : in RTEMS.ID;
- SEGMENT : in RTEMS.ADDRESS;
- RESULT : out RTEMS.STATUS_CODES
- );
-
--- Dual Ported Memory Manager
-
- procedure PORT_CREATE (
- NAME : in RTEMS.NAME;
- INTERNAL_START : in RTEMS.ADDRESS;
- EXTERNAL_START : in RTEMS.ADDRESS;
- LENGTH : in RTEMS.UNSIGNED32;
- ID : out RTEMS.ID;
- RESULT : out RTEMS.STATUS_CODES
- );
-
- procedure PORT_IDENT (
- NAME : in RTEMS.NAME;
- ID : out RTEMS.ID;
- RESULT : out RTEMS.STATUS_CODES
- );
-
- procedure PORT_DELETE (
- ID : in RTEMS.ID;
- RESULT : out RTEMS.STATUS_CODES
- );
-
- procedure PORT_EXTERNAL_TO_INTERNAL (
- ID : in RTEMS.ID;
- EXTERNAL : in RTEMS.ADDRESS;
- INTERNAL : out RTEMS.ADDRESS;
- RESULT : out RTEMS.STATUS_CODES
- );
-
- procedure PORT_INTERNAL_TO_EXTERNAL (
- ID : in RTEMS.ID;
- INTERNAL : in RTEMS.ADDRESS;
- EXTERNAL : out RTEMS.ADDRESS;
- RESULT : out RTEMS.STATUS_CODES
- );
-
--- Fatal Error Manager
-
- procedure FATAL_ERROR_OCCURRED (
- THE_ERROR : in RTEMS.UNSIGNED32
- );
-
--- Rate Monotonic Manager
-
- procedure RATE_MONOTONIC_CREATE (
- NAME : in RTEMS.NAME;
- ID : out RTEMS.ID;
- RESULT : out RTEMS.STATUS_CODES
- );
-
- procedure RATE_MONOTONIC_IDENT (
- NAME : in RTEMS.NAME;
- ID : out RTEMS.ID;
- RESULT : out RTEMS.STATUS_CODES
- );
-
- procedure RATE_MONOTONIC_DELETE (
- ID : in RTEMS.ID;
- RESULT : out RTEMS.STATUS_CODES
- );
-
- procedure RATE_MONOTONIC_CANCEL (
- ID : in RTEMS.ID;
- RESULT : out RTEMS.STATUS_CODES
- );
-
- procedure RATE_MONOTONIC_PERIOD (
- ID : in RTEMS.ID;
- LENGTH : in RTEMS.INTERVAL;
- RESULT : out RTEMS.STATUS_CODES
- );
-
--- Multiprocessing Manager
-
- procedure MULTIPROCESSING_ANNOUNCE;
-
-end DUMMY_RTEMS;
diff --git a/testsuites/ada/tmtests/tmoverhd/init.c b/testsuites/ada/tmtests/tmoverhd/init.c
deleted file mode 100644
index 37b6c28faa..0000000000
--- a/testsuites/ada/tmtests/tmoverhd/init.c
+++ /dev/null
@@ -1,34 +0,0 @@
-/* config.h
- *
- * This include file defines the Configuration Table for this test.
- *
- * COPYRIGHT (c) 1989-1997.
- * On-Line Applications Research Corporation (OAR).
- *
- * The license and distribution terms for this file may in
- * the file LICENSE in this distribution or at
- * http://www.rtems.org/license/LICENSE.
- */
-
-
-/* configuration information */
-
-#define CONFIGURE_TMTEST
-
-#define CONFIGURE_APPLICATION_NEEDS_SIMPLE_CONSOLE_DRIVER
-#define CONFIGURE_APPLICATION_NEEDS_TIMER_DRIVER
-
-#define CONFIGURE_MAXIMUM_TASKS 2
-
-#define ADA_TEST_NAME "ADA TMOVERHD"
-#define CONFIGURE_MAXIMUM_SEMAPHORES 1
-#define CONFIGURE_TICKS_PER_TIMESLICE 0
-
-#define CONFIGURE_POSIX_INIT_THREAD_TABLE
-
-#define CONFIGURE_MAXIMUM_POSIX_THREADS 10
-#define CONFIGURE_MAXIMUM_POSIX_KEYS 10
-
-#include "../../support/initimpl.h"
-
-/* end of include file */
diff --git a/testsuites/ada/tmtests/tmoverhd/tmoverhd.adb b/testsuites/ada/tmtests/tmoverhd/tmoverhd.adb
deleted file mode 100644
index bfe6de4f88..0000000000
--- a/testsuites/ada/tmtests/tmoverhd/tmoverhd.adb
+++ /dev/null
@@ -1,55 +0,0 @@
---
--- MAIN / BODY
---
--- DESCRIPTION:
---
--- This is the entry point for Test TMOVERHD of the Timing Test Suite.
---
--- DEPENDENCIES:
---
---
---
--- COPYRIGHT (c) 1989-1997.
--- On-Line Applications Research Corporation (OAR).
---
--- The license and distribution terms for this file may in
--- the file LICENSE in this distribution or at
--- http://www.rtems.org/license/LICENSE.
---
-
-with RTEMS;
-with RTEMS.TASKS;
-with TMTEST;
-with TEST_SUPPORT;
-
-procedure TMOVERHD is
- INIT_ID : RTEMS.ID;
- STATUS : RTEMS.STATUS_CODES;
-begin
-
- RTEMS.TASKS.CREATE(
- RTEMS.BUILD_NAME( 'I', 'N', 'I', 'T' ),
- 1,
- RTEMS.MINIMUM_STACK_SIZE,
- RTEMS.NO_PREEMPT,
- RTEMS.DEFAULT_ATTRIBUTES,
- INIT_ID,
- STATUS
- );
- TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_CREATE OF INIT" );
-
-
- RTEMS.TASKS.START(
- INIT_ID,
- TMTEST.INIT'ACCESS,
- 0,
- STATUS
- );
- TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_START OF INIT" );
-
- loop
- delay 120.0;
- end loop;
-
-end TMOVERHD;
-
diff --git a/testsuites/ada/tmtests/tmoverhd/tmtest.adb b/testsuites/ada/tmtests/tmoverhd/tmtest.adb
deleted file mode 100644
index d271ed220c..0000000000
--- a/testsuites/ada/tmtests/tmoverhd/tmtest.adb
+++ /dev/null
@@ -1,1363 +0,0 @@
---
--- TMTEST / BODY
---
--- DESCRIPTION:
---
--- This package is the implementation of Calling Overhead Test of the RTEMS
--- Timing Test Suite.
---
--- DEPENDENCIES:
---
---
---
--- COPYRIGHT (c) 1989-2009.
--- On-Line Applications Research Corporation (OAR).
---
--- The license and distribution terms for this file may in
--- the file LICENSE in this distribution or at
--- http://www.rtems.org/license/LICENSE.
---
-
-with DUMMY_RTEMS;
-with TEST_SUPPORT;
-with TEXT_IO;
-with TIME_TEST_SUPPORT;
-with TIMER_DRIVER;
-
-package body TMTEST is
-
---PAGE
---
--- INIT
---
-
- procedure INIT (
- ARGUMENT : in RTEMS.TASKS.ARGUMENT
- ) is
- pragma Unreferenced(ARGUMENT);
- STATUS : RTEMS.STATUS_CODES;
- begin
-
- TEXT_IO.NEW_LINE( 2 );
- TEST_SUPPORT.ADA_TEST_BEGIN;
-
- TIMER_DRIVER.SET_FIND_AVERAGE_OVERHEAD( TRUE );
-
- TMTEST.TASK_NAME( 1 ) := RTEMS.BUILD_NAME( 'T', 'A', '1', ' ' );
-
- RTEMS.TASKS.CREATE(
- TMTEST.TASK_NAME( 1 ),
- 254,
- 2048,
- RTEMS.DEFAULT_MODES,
- RTEMS.DEFAULT_ATTRIBUTES,
- TMTEST.TASK_ID( 1 ),
- STATUS
- );
- TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_CREATE OF TA1" );
-
- RTEMS.TASKS.START(
- TMTEST.TASK_ID( 1 ),
- TMTEST.TASK_1'ACCESS,
- 0,
- STATUS
- );
- TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_START OF TA1" );
-
- RTEMS.TASKS.DELETE( RTEMS.SELF, STATUS );
- TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_DELETE OF SELF" );
-
- end INIT;
-
---PAGE
---
--- TIMER_HANDLER
---
-
- procedure TIMER_HANDLER (
- IGNORED_ID : in RTEMS.ID;
- IGNORED_ADDRESS : in RTEMS.ADDRESS
- ) is
- begin
-
- NULL;
-
- end TIMER_HANDLER;
-
---PAGE
---
--- ISR_HANDLER
---
-
--- procedure ISR_HANDLER (
--- VECTOR : in RTEMS.VECTOR_NUMBER
--- ) is
--- begin
---
--- NULL;
---
--- end ISR_HANDLER;
-
---PAGE
---
--- ASR_HANDLER
---
-
- procedure ASR_HANDLER (
- SIGNALS : in RTEMS.SIGNAL_SET
- ) is
- begin
-
- NULL;
-
- end ASR_HANDLER;
-
---PAGE
---
--- TASK_1
---
-
- procedure TASK_1 (
- ARGUMENT : in RTEMS.TASKS.ARGUMENT
- ) is
- pragma Unreferenced(ARGUMENT);
- NAME : RTEMS.NAME;
- OVERHEAD : RTEMS.UNSIGNED32;
- ID : RTEMS.ID;
- IN_PRIORITY : RTEMS.TASKS.PRIORITY;
- OUT_PRIORITY : RTEMS.TASKS.PRIORITY;
- IN_MODE : RTEMS.MODE;
- MASK : RTEMS.MODE;
- OUT_MODE : RTEMS.MODE;
- TIME : RTEMS.TIME_OF_DAY;
- TIMEOUT : RTEMS.INTERVAL;
- SIGNALS : RTEMS.SIGNAL_SET;
- ADDRESS_1 : RTEMS.ADDRESS;
- EVENTS : RTEMS.SIGNAL_SET;
- BUFFER : TMTEST.BUFFER;
- BUFFER_POINTER : RTEMS.ADDRESS;
- MESSAGE_SIZE : RTEMS.UNSIGNED32;
- COUNT : RTEMS.UNSIGNED32;
- ERROR : RTEMS.UNSIGNED32;
- STATUS : RTEMS.STATUS_CODES;
- begin
-
- NAME := RTEMS.BUILD_NAME( 'N', 'A', 'M', 'E' );
-
- BUFFER_POINTER := BUFFER'ADDRESS;
- OVERHEAD := 0;
- IN_PRIORITY := 0;
- IN_MODE := 0;
- MASK := 0;
- SIGNALS := 0;
- EVENTS := 0;
- ERROR := 0;
-
--- TASK_CREATE
-
- TIMER_DRIVER.INITIALIZE;
- for INDEX in 1 .. TIME_TEST_SUPPORT.OPERATION_COUNT
- loop
- DUMMY_RTEMS.TASK_CREATE(
- NAME,
- IN_PRIORITY,
- 2048,
- RTEMS.DEFAULT_MODES,
- RTEMS.DEFAULT_ATTRIBUTES,
- ID,
- STATUS
- );
- end loop;
- TMTEST.END_TIME := TIMER_DRIVER.READ_TIMER;
-
- TIME_TEST_SUPPORT.PUT_TIME(
- "TASK_CREATE",
- TMTEST.END_TIME,
- TIME_TEST_SUPPORT.OPERATION_COUNT,
- OVERHEAD,
- 0
- );
-
--- TASK_IDENT
-
- TIMER_DRIVER.INITIALIZE;
- for INDEX in 1 .. TIME_TEST_SUPPORT.OPERATION_COUNT
- loop
- DUMMY_RTEMS.TASK_IDENT(
- NAME,
- RTEMS.SEARCH_ALL_NODES,
- ID,
- STATUS
- );
- end loop;
- TMTEST.END_TIME := TIMER_DRIVER.READ_TIMER;
-
- TIME_TEST_SUPPORT.PUT_TIME(
- "TASK_IDENT",
- TMTEST.END_TIME,
- TIME_TEST_SUPPORT.OPERATION_COUNT,
- OVERHEAD,
- 0
- );
-
--- TASK_START
-
- TIMER_DRIVER.INITIALIZE;
- for INDEX in 1 .. TIME_TEST_SUPPORT.OPERATION_COUNT
- loop
- DUMMY_RTEMS.TASK_START( ID, TMTEST.TASK_1'ACCESS, 0, STATUS );
- end loop;
- TMTEST.END_TIME := TIMER_DRIVER.READ_TIMER;
-
- TIME_TEST_SUPPORT.PUT_TIME(
- "TASK_START",
- TMTEST.END_TIME,
- TIME_TEST_SUPPORT.OPERATION_COUNT,
- OVERHEAD,
- 0
- );
-
--- TASK_RESTART
-
- TIMER_DRIVER.INITIALIZE;
- for INDEX in 1 .. TIME_TEST_SUPPORT.OPERATION_COUNT
- loop
- DUMMY_RTEMS.TASK_RESTART( ID, 0, STATUS );
- end loop;
- TMTEST.END_TIME := TIMER_DRIVER.READ_TIMER;
-
- TIME_TEST_SUPPORT.PUT_TIME(
- "TASK_RESTART",
- TMTEST.END_TIME,
- TIME_TEST_SUPPORT.OPERATION_COUNT,
- OVERHEAD,
- 0
- );
-
--- TASK_DELETE
-
- TIMER_DRIVER.INITIALIZE;
- for INDEX in 1 .. TIME_TEST_SUPPORT.OPERATION_COUNT
- loop
- DUMMY_RTEMS.TASK_DELETE( ID, STATUS );
- end loop;
- TMTEST.END_TIME := TIMER_DRIVER.READ_TIMER;
-
- TIME_TEST_SUPPORT.PUT_TIME(
- "TASK_DELETE",
- TMTEST.END_TIME,
- TIME_TEST_SUPPORT.OPERATION_COUNT,
- OVERHEAD,
- 0
- );
-
--- TASK_SUSPEND
-
- TIMER_DRIVER.INITIALIZE;
- for INDEX in 1 .. TIME_TEST_SUPPORT.OPERATION_COUNT
- loop
- DUMMY_RTEMS.TASK_SUSPEND( ID, STATUS );
- end loop;
- TMTEST.END_TIME := TIMER_DRIVER.READ_TIMER;
-
- TIME_TEST_SUPPORT.PUT_TIME(
- "TASK_SUSPEND",
- TMTEST.END_TIME,
- TIME_TEST_SUPPORT.OPERATION_COUNT,
- OVERHEAD,
- 0
- );
-
--- TASK_RESUME
-
- TIMER_DRIVER.INITIALIZE;
- for INDEX in 1 .. TIME_TEST_SUPPORT.OPERATION_COUNT
- loop
- DUMMY_RTEMS.TASK_RESUME( ID, STATUS );
- end loop;
- TMTEST.END_TIME := TIMER_DRIVER.READ_TIMER;
-
- TIME_TEST_SUPPORT.PUT_TIME(
- "TASK_RESUME",
- TMTEST.END_TIME,
- TIME_TEST_SUPPORT.OPERATION_COUNT,
- OVERHEAD,
- 0
- );
-
--- TASK_SET_PRIORITY
-
- TIMER_DRIVER.INITIALIZE;
- for INDEX in 1 .. TIME_TEST_SUPPORT.OPERATION_COUNT
- loop
- DUMMY_RTEMS.TASK_SET_PRIORITY(
- ID,
- IN_PRIORITY,
- OUT_PRIORITY,
- STATUS
- );
- end loop;
- TMTEST.END_TIME := TIMER_DRIVER.READ_TIMER;
-
- TIME_TEST_SUPPORT.PUT_TIME(
- "TASK_SET_PRIORITY",
- TMTEST.END_TIME,
- TIME_TEST_SUPPORT.OPERATION_COUNT,
- OVERHEAD,
- 0
- );
-
--- TASK_MODE
-
- TIMER_DRIVER.INITIALIZE;
- for INDEX in 1 .. TIME_TEST_SUPPORT.OPERATION_COUNT
- loop
- DUMMY_RTEMS.TASK_MODE(
- IN_MODE,
- MASK,
- OUT_MODE,
- STATUS
- );
- end loop;
- TMTEST.END_TIME := TIMER_DRIVER.READ_TIMER;
-
- TIME_TEST_SUPPORT.PUT_TIME(
- "TASK_MODE",
- TMTEST.END_TIME,
- TIME_TEST_SUPPORT.OPERATION_COUNT,
- OVERHEAD,
- 0
- );
-
--- TASK_WAKE_WHEN
-
- TIME.YEAR := 2000;
- TIME.MONTH := 12;
- TIME.DAY := 25;
- TIME.HOUR := 6;
- TIME.MINUTE := 1;
- TIME.SECOND := 2;
- TIME.TICKS := 0;
-
- TIMER_DRIVER.INITIALIZE;
- for INDEX in 1 .. TIME_TEST_SUPPORT.OPERATION_COUNT
- loop
- DUMMY_RTEMS.TASK_WAKE_WHEN( TIME, STATUS );
- end loop;
- TMTEST.END_TIME := TIMER_DRIVER.READ_TIMER;
-
- TIME_TEST_SUPPORT.PUT_TIME(
- "TASK_WAKE_WHEN",
- TMTEST.END_TIME,
- TIME_TEST_SUPPORT.OPERATION_COUNT,
- OVERHEAD,
- 0
- );
-
--- TASK_WAKE_AFTER
-
- TIMEOUT := 1;
-
- TIMER_DRIVER.INITIALIZE;
- for INDEX in 1 .. TIME_TEST_SUPPORT.OPERATION_COUNT
- loop
- DUMMY_RTEMS.TASK_WAKE_AFTER( TIMEOUT, STATUS );
- end loop;
- TMTEST.END_TIME := TIMER_DRIVER.READ_TIMER;
-
- TIME_TEST_SUPPORT.PUT_TIME(
- "TASK_WAKE_AFTER",
- TMTEST.END_TIME,
- TIME_TEST_SUPPORT.OPERATION_COUNT,
- OVERHEAD,
- 0
- );
-
--- INTERRUPT_CATCH
-
--- TIMER_DRIVER.INITIALIZE;
--- for INDEX in 1 .. TIME_TEST_SUPPORT.OPERATION_COUNT
--- loop
--- DUMMY_RTEMS.INTERRUPT_CATCH(
--- TMTEST.ISR_HANDLER'ADDRESS,
--- RTEMS.VECTOR_NUMBER'FIRST,
--- ADDRESS_1,
--- STATUS
--- );
--- end loop;
--- TMTEST.END_TIME := TIMER_DRIVER.READ_TIMER;
---
--- TIME_TEST_SUPPORT.PUT_TIME(
--- "INTERRUPT_CATCH",
--- TMTEST.END_TIME,
--- TIME_TEST_SUPPORT.OPERATION_COUNT,
--- OVERHEAD,
--- 0
--- );
-
--- CLOCK_GET_TOD
-
- TIMER_DRIVER.INITIALIZE;
- for INDEX in 1 .. TIME_TEST_SUPPORT.OPERATION_COUNT
- loop
- DUMMY_RTEMS.CLOCK_GET_TOD( TIME, STATUS );
- end loop;
- TMTEST.END_TIME := TIMER_DRIVER.READ_TIMER;
-
- TIME_TEST_SUPPORT.PUT_TIME(
- "CLOCK_GET",
- TMTEST.END_TIME,
- TIME_TEST_SUPPORT.OPERATION_COUNT,
- OVERHEAD,
- 0
- );
-
--- CLOCK_SET
-
- TIMER_DRIVER.INITIALIZE;
- for INDEX in 1 .. TIME_TEST_SUPPORT.OPERATION_COUNT
- loop
- DUMMY_RTEMS.CLOCK_SET( TIME, STATUS );
- end loop;
- TMTEST.END_TIME := TIMER_DRIVER.READ_TIMER;
-
- TIME_TEST_SUPPORT.PUT_TIME(
- "CLOCK_SET",
- TMTEST.END_TIME,
- TIME_TEST_SUPPORT.OPERATION_COUNT,
- OVERHEAD,
- 0
- );
-
--- CLOCK_TICK
-
- TIMER_DRIVER.INITIALIZE;
- for INDEX in 1 .. TIME_TEST_SUPPORT.OPERATION_COUNT
- loop
- DUMMY_RTEMS.CLOCK_TICK( STATUS );
- end loop;
- TMTEST.END_TIME := TIMER_DRIVER.READ_TIMER;
-
- TIME_TEST_SUPPORT.PUT_TIME(
- "CLOCK_TICK",
- TMTEST.END_TIME,
- TIME_TEST_SUPPORT.OPERATION_COUNT,
- OVERHEAD,
- 0
- );
-
-TEST_SUPPORT.PAUSE;
-
--- TIMER_CREATE
-
- TIMER_DRIVER.INITIALIZE;
- for INDEX in 1 .. TIME_TEST_SUPPORT.OPERATION_COUNT
- loop
- DUMMY_RTEMS.TIMER_CREATE( NAME, ID, STATUS );
- end loop;
- TMTEST.END_TIME := TIMER_DRIVER.READ_TIMER;
-
- TIME_TEST_SUPPORT.PUT_TIME(
- "TIMER_CREATE",
- TMTEST.END_TIME,
- TIME_TEST_SUPPORT.OPERATION_COUNT,
- OVERHEAD,
- 0
- );
-
--- TIMER_DELETE
-
- TIMER_DRIVER.INITIALIZE;
- for INDEX in 1 .. TIME_TEST_SUPPORT.OPERATION_COUNT
- loop
- DUMMY_RTEMS.TIMER_DELETE( ID, STATUS );
- end loop;
- TMTEST.END_TIME := TIMER_DRIVER.READ_TIMER;
-
- TIME_TEST_SUPPORT.PUT_TIME(
- "TIMER_DELETE",
- TMTEST.END_TIME,
- TIME_TEST_SUPPORT.OPERATION_COUNT,
- OVERHEAD,
- 0
- );
-
--- TIMER_IDENT
-
- TIMER_DRIVER.INITIALIZE;
- for INDEX in 1 .. TIME_TEST_SUPPORT.OPERATION_COUNT
- loop
- DUMMY_RTEMS.TIMER_IDENT(
- NAME,
- ID,
- STATUS
- );
- end loop;
- TMTEST.END_TIME := TIMER_DRIVER.READ_TIMER;
-
- TIME_TEST_SUPPORT.PUT_TIME(
- "TIMER_IDENT",
- TMTEST.END_TIME,
- TIME_TEST_SUPPORT.OPERATION_COUNT,
- OVERHEAD,
- 0
- );
-
--- TIMER_FIRE_AFTER
-
- TIMER_DRIVER.INITIALIZE;
- for INDEX in 1 .. TIME_TEST_SUPPORT.OPERATION_COUNT
- loop
- DUMMY_RTEMS.TIMER_FIRE_AFTER(
- ID,
- TIMEOUT,
- TMTEST.TIMER_HANDLER'ACCESS,
- RTEMS.NULL_ADDRESS,
- STATUS
- );
- end loop;
- TMTEST.END_TIME := TIMER_DRIVER.READ_TIMER;
-
- TIME_TEST_SUPPORT.PUT_TIME(
- "TIMER_FIRE_AFTER",
- TMTEST.END_TIME,
- TIME_TEST_SUPPORT.OPERATION_COUNT,
- OVERHEAD,
- 0
- );
-
--- TIMER_FIRE_WHEN
-
- TIMER_DRIVER.INITIALIZE;
- for INDEX in 1 .. TIME_TEST_SUPPORT.OPERATION_COUNT
- loop
- DUMMY_RTEMS.TIMER_FIRE_WHEN(
- ID,
- TIME,
- TMTEST.TIMER_HANDLER'ACCESS,
- RTEMS.NULL_ADDRESS,
- STATUS
- );
- end loop;
- TMTEST.END_TIME := TIMER_DRIVER.READ_TIMER;
-
- TIME_TEST_SUPPORT.PUT_TIME(
- "TIMER_FIRE_WHEN",
- TMTEST.END_TIME,
- TIME_TEST_SUPPORT.OPERATION_COUNT,
- OVERHEAD,
- 0
- );
-
--- TIMER_RESET
-
- TIMER_DRIVER.INITIALIZE;
- for INDEX in 1 .. TIME_TEST_SUPPORT.OPERATION_COUNT
- loop
- DUMMY_RTEMS.TIMER_RESET( ID, STATUS );
- end loop;
- TMTEST.END_TIME := TIMER_DRIVER.READ_TIMER;
-
- TIME_TEST_SUPPORT.PUT_TIME(
- "TIMER_RESET",
- TMTEST.END_TIME,
- TIME_TEST_SUPPORT.OPERATION_COUNT,
- OVERHEAD,
- 0
- );
-
--- TIMER_CANCEL
-
- TIMER_DRIVER.INITIALIZE;
- for INDEX in 1 .. TIME_TEST_SUPPORT.OPERATION_COUNT
- loop
- DUMMY_RTEMS.TIMER_CANCEL( ID, STATUS );
- end loop;
- TMTEST.END_TIME := TIMER_DRIVER.READ_TIMER;
-
- TIME_TEST_SUPPORT.PUT_TIME(
- "TIMER_CANCEL",
- TMTEST.END_TIME,
- TIME_TEST_SUPPORT.OPERATION_COUNT,
- OVERHEAD,
- 0
- );
-
--- SEMAPHORE_CREATE
-
- TIMER_DRIVER.INITIALIZE;
- for INDEX in 1 .. TIME_TEST_SUPPORT.OPERATION_COUNT
- loop
- DUMMY_RTEMS.SEMAPHORE_CREATE(
- NAME,
- 128,
- RTEMS.DEFAULT_ATTRIBUTES,
- RTEMS.TASKS.NO_PRIORITY,
- ID,
- STATUS
- );
- end loop;
- TMTEST.END_TIME := TIMER_DRIVER.READ_TIMER;
-
- TIME_TEST_SUPPORT.PUT_TIME(
- "SEMAPHORE_CREATE",
- TMTEST.END_TIME,
- TIME_TEST_SUPPORT.OPERATION_COUNT,
- OVERHEAD,
- 0
- );
-
--- SEMAPHORE_DELETE
-
- TIMER_DRIVER.INITIALIZE;
- for INDEX in 1 .. TIME_TEST_SUPPORT.OPERATION_COUNT
- loop
- DUMMY_RTEMS.SEMAPHORE_DELETE( ID, STATUS );
- end loop;
- TMTEST.END_TIME := TIMER_DRIVER.READ_TIMER;
-
- TIME_TEST_SUPPORT.PUT_TIME(
- "SEMAPHORE_DELETE",
- TMTEST.END_TIME,
- TIME_TEST_SUPPORT.OPERATION_COUNT,
- OVERHEAD,
- 0
- );
-
--- SEMAPHORE_IDENT
-
- TIMER_DRIVER.INITIALIZE;
- for INDEX in 1 .. TIME_TEST_SUPPORT.OPERATION_COUNT
- loop
- DUMMY_RTEMS.SEMAPHORE_IDENT(
- NAME,
- RTEMS.SEARCH_ALL_NODES,
- ID,
- STATUS
- );
- end loop;
- TMTEST.END_TIME := TIMER_DRIVER.READ_TIMER;
-
- TIME_TEST_SUPPORT.PUT_TIME(
- "SEMAPHORE_IDENT",
- TMTEST.END_TIME,
- TIME_TEST_SUPPORT.OPERATION_COUNT,
- OVERHEAD,
- 0
- );
-
--- SEMAPHORE_OBTAIN
-
- TIMER_DRIVER.INITIALIZE;
- for INDEX in 1 .. TIME_TEST_SUPPORT.OPERATION_COUNT
- loop
- DUMMY_RTEMS.SEMAPHORE_OBTAIN(
- ID,
- RTEMS.DEFAULT_OPTIONS,
- TIMEOUT,
- STATUS
- );
- end loop;
- TMTEST.END_TIME := TIMER_DRIVER.READ_TIMER;
-
- TIME_TEST_SUPPORT.PUT_TIME(
- "SEMAPHORE_OBTAIN",
- TMTEST.END_TIME,
- TIME_TEST_SUPPORT.OPERATION_COUNT,
- OVERHEAD,
- 0
- );
-
--- SEMAPHORE_RELEASE
-
- TIMER_DRIVER.INITIALIZE;
- for INDEX in 1 .. TIME_TEST_SUPPORT.OPERATION_COUNT
- loop
- DUMMY_RTEMS.SEMAPHORE_RELEASE( ID, STATUS );
- end loop;
- TMTEST.END_TIME := TIMER_DRIVER.READ_TIMER;
-
- TIME_TEST_SUPPORT.PUT_TIME(
- "SEMAPHORE_RELEASE",
- TMTEST.END_TIME,
- TIME_TEST_SUPPORT.OPERATION_COUNT,
- OVERHEAD,
- 0
- );
-
--- MESSAGE_QUEUE_CREATE
-
- TIMER_DRIVER.INITIALIZE;
- for INDEX in 1 .. TIME_TEST_SUPPORT.OPERATION_COUNT
- loop
- DUMMY_RTEMS.MESSAGE_QUEUE_CREATE(
- NAME,
- 128,
- 16,
- RTEMS.DEFAULT_ATTRIBUTES,
- ID,
- STATUS
- );
- end loop;
- TMTEST.END_TIME := TIMER_DRIVER.READ_TIMER;
-
- TIME_TEST_SUPPORT.PUT_TIME(
- "MESSAGE_QUEUE_CREATE",
- TMTEST.END_TIME,
- TIME_TEST_SUPPORT.OPERATION_COUNT,
- OVERHEAD,
- 0
- );
-
--- MESSAGE_QUEUE_IDENT
-
- TIMER_DRIVER.INITIALIZE;
- for INDEX in 1 .. TIME_TEST_SUPPORT.OPERATION_COUNT
- loop
- DUMMY_RTEMS.MESSAGE_QUEUE_IDENT(
- NAME,
- RTEMS.SEARCH_ALL_NODES,
- ID,
- STATUS
- );
- end loop;
- TMTEST.END_TIME := TIMER_DRIVER.READ_TIMER;
-
- TIME_TEST_SUPPORT.PUT_TIME(
- "MESSAGE_QUEUE_IDENT",
- TMTEST.END_TIME,
- TIME_TEST_SUPPORT.OPERATION_COUNT,
- OVERHEAD,
- 0
- );
-
--- MESSAGE_QUEUE_DELETE
-
- TIMER_DRIVER.INITIALIZE;
- for INDEX in 1 .. TIME_TEST_SUPPORT.OPERATION_COUNT
- loop
- DUMMY_RTEMS.MESSAGE_QUEUE_DELETE( ID, STATUS );
- end loop;
- TMTEST.END_TIME := TIMER_DRIVER.READ_TIMER;
-
- TIME_TEST_SUPPORT.PUT_TIME(
- "MESSAGE_QUEUE_DELETE",
- TMTEST.END_TIME,
- TIME_TEST_SUPPORT.OPERATION_COUNT,
- OVERHEAD,
- 0
- );
-
--- MESSAGE_QUEUE_SEND
-
- TIMER_DRIVER.INITIALIZE;
- for INDEX in 1 .. TIME_TEST_SUPPORT.OPERATION_COUNT
- loop
- DUMMY_RTEMS.MESSAGE_QUEUE_SEND( ID, BUFFER_POINTER, 16, STATUS );
- end loop;
- TMTEST.END_TIME := TIMER_DRIVER.READ_TIMER;
-
- TIME_TEST_SUPPORT.PUT_TIME(
- "MESSAGE_QUEUE_SEND",
- TMTEST.END_TIME,
- TIME_TEST_SUPPORT.OPERATION_COUNT,
- OVERHEAD,
- 0
- );
-
--- MESSAGE_QUEUE_URGENT
-
- TIMER_DRIVER.INITIALIZE;
- for INDEX in 1 .. TIME_TEST_SUPPORT.OPERATION_COUNT
- loop
- DUMMY_RTEMS.MESSAGE_QUEUE_URGENT( ID, BUFFER_POINTER, 16, STATUS );
- end loop;
- TMTEST.END_TIME := TIMER_DRIVER.READ_TIMER;
-
- TIME_TEST_SUPPORT.PUT_TIME(
- "MESSAGE_QUEUE_URGENT",
- TMTEST.END_TIME,
- TIME_TEST_SUPPORT.OPERATION_COUNT,
- OVERHEAD,
- 0
- );
-
--- MESSAGE_QUEUE_BROADCAST
-
- TIMER_DRIVER.INITIALIZE;
- for INDEX in 1 .. TIME_TEST_SUPPORT.OPERATION_COUNT
- loop
- DUMMY_RTEMS.MESSAGE_QUEUE_BROADCAST(
- ID,
- BUFFER_POINTER,
- 16,
- COUNT,
- STATUS
- );
- end loop;
- TMTEST.END_TIME := TIMER_DRIVER.READ_TIMER;
-
- TIME_TEST_SUPPORT.PUT_TIME(
- "MESSAGE_QUEUE_BROADCAST",
- TMTEST.END_TIME,
- TIME_TEST_SUPPORT.OPERATION_COUNT,
- OVERHEAD,
- 0
- );
-
--- MESSAGE_QUEUE_RECEIVE
-
- TIMER_DRIVER.INITIALIZE;
- for INDEX in 1 .. TIME_TEST_SUPPORT.OPERATION_COUNT
- loop
- DUMMY_RTEMS.MESSAGE_QUEUE_RECEIVE(
- ID,
- BUFFER_POINTER,
- RTEMS.DEFAULT_OPTIONS,
- TIMEOUT,
- MESSAGE_SIZE,
- STATUS
- );
- end loop;
- TMTEST.END_TIME := TIMER_DRIVER.READ_TIMER;
-
- TIME_TEST_SUPPORT.PUT_TIME(
- "MESSAGE_QUEUE_RECEIVE",
- TMTEST.END_TIME,
- TIME_TEST_SUPPORT.OPERATION_COUNT,
- OVERHEAD,
- 0
- );
-
--- MESSAGE_QUEUE_FLUSH
-
- TIMER_DRIVER.INITIALIZE;
- for INDEX in 1 .. TIME_TEST_SUPPORT.OPERATION_COUNT
- loop
- DUMMY_RTEMS.MESSAGE_QUEUE_FLUSH( ID, COUNT, STATUS );
- end loop;
- TMTEST.END_TIME := TIMER_DRIVER.READ_TIMER;
-
- TIME_TEST_SUPPORT.PUT_TIME(
- "MESSAGE_QUEUE_FLUSH",
- TMTEST.END_TIME,
- TIME_TEST_SUPPORT.OPERATION_COUNT,
- OVERHEAD,
- 0
- );
-
-TEST_SUPPORT.PAUSE;
-
--- EVENT_SEND
-
- TIMER_DRIVER.INITIALIZE;
- for INDEX in 1 .. TIME_TEST_SUPPORT.OPERATION_COUNT
- loop
- DUMMY_RTEMS.EVENT_SEND( ID, EVENTS, STATUS );
- end loop;
- TMTEST.END_TIME := TIMER_DRIVER.READ_TIMER;
-
- TIME_TEST_SUPPORT.PUT_TIME(
- "EVENT_SEND",
- TMTEST.END_TIME,
- TIME_TEST_SUPPORT.OPERATION_COUNT,
- OVERHEAD,
- 0
- );
-
--- EVENT_RECEIVE
-
- TIMER_DRIVER.INITIALIZE;
- for INDEX in 1 .. TIME_TEST_SUPPORT.OPERATION_COUNT
- loop
- DUMMY_RTEMS.EVENT_RECEIVE(
- RTEMS.EVENT_16,
- EVENTS,
- RTEMS.DEFAULT_OPTIONS,
- TIMEOUT,
- STATUS
- );
- end loop;
- TMTEST.END_TIME := TIMER_DRIVER.READ_TIMER;
-
- TIME_TEST_SUPPORT.PUT_TIME(
- "EVENT_RECEIVE",
- TMTEST.END_TIME,
- TIME_TEST_SUPPORT.OPERATION_COUNT,
- OVERHEAD,
- 0
- );
-
--- SIGNAL_CATCH
-
- TIMER_DRIVER.INITIALIZE;
- for INDEX in 1 .. TIME_TEST_SUPPORT.OPERATION_COUNT
- loop
- DUMMY_RTEMS.SIGNAL_CATCH(
- TMTEST.ASR_HANDLER'ACCESS,
- RTEMS.DEFAULT_MODES,
- STATUS
- );
- end loop;
- TMTEST.END_TIME := TIMER_DRIVER.READ_TIMER;
-
- TIME_TEST_SUPPORT.PUT_TIME(
- "SIGNAL_CATCH",
- TMTEST.END_TIME,
- TIME_TEST_SUPPORT.OPERATION_COUNT,
- OVERHEAD,
- 0
- );
-
--- SIGNAL_SEND
-
- TIMER_DRIVER.INITIALIZE;
- for INDEX in 1 .. TIME_TEST_SUPPORT.OPERATION_COUNT
- loop
- DUMMY_RTEMS.SIGNAL_SEND( ID, SIGNALS, STATUS );
- end loop;
- TMTEST.END_TIME := TIMER_DRIVER.READ_TIMER;
-
- TIME_TEST_SUPPORT.PUT_TIME(
- "SIGNAL_SEND",
- TMTEST.END_TIME,
- TIME_TEST_SUPPORT.OPERATION_COUNT,
- OVERHEAD,
- 0
- );
-
--- PARTITION_CREATE
-
- TIMER_DRIVER.INITIALIZE;
- for INDEX in 1 .. TIME_TEST_SUPPORT.OPERATION_COUNT
- loop
- DUMMY_RTEMS.PARTITION_CREATE(
- NAME,
- TMTEST.MEMORY_AREA'ADDRESS,
- 2048,
- 128,
- RTEMS.DEFAULT_ATTRIBUTES,
- ID,
- STATUS
- );
- end loop;
- TMTEST.END_TIME := TIMER_DRIVER.READ_TIMER;
-
- TIME_TEST_SUPPORT.PUT_TIME(
- "PARTITION_CREATE",
- TMTEST.END_TIME,
- TIME_TEST_SUPPORT.OPERATION_COUNT,
- OVERHEAD,
- 0
- );
-
--- PARTITION_IDENT
-
- TIMER_DRIVER.INITIALIZE;
- for INDEX in 1 .. TIME_TEST_SUPPORT.OPERATION_COUNT
- loop
- DUMMY_RTEMS.PARTITION_IDENT(
- NAME,
- RTEMS.SEARCH_ALL_NODES,
- ID,
- STATUS
- );
- end loop;
- TMTEST.END_TIME := TIMER_DRIVER.READ_TIMER;
-
- TIME_TEST_SUPPORT.PUT_TIME(
- "PARTITION_IDENT",
- TMTEST.END_TIME,
- TIME_TEST_SUPPORT.OPERATION_COUNT,
- OVERHEAD,
- 0
- );
-
--- PARTITION_DELETE
-
- TIMER_DRIVER.INITIALIZE;
- for INDEX in 1 .. TIME_TEST_SUPPORT.OPERATION_COUNT
- loop
- DUMMY_RTEMS.PARTITION_DELETE( ID, STATUS );
- end loop;
- TMTEST.END_TIME := TIMER_DRIVER.READ_TIMER;
-
- TIME_TEST_SUPPORT.PUT_TIME(
- "PARTITION_DELETE",
- TMTEST.END_TIME,
- TIME_TEST_SUPPORT.OPERATION_COUNT,
- OVERHEAD,
- 0
- );
-
--- PARTITION_GET_BUFFER
-
- TIMER_DRIVER.INITIALIZE;
- for INDEX in 1 .. TIME_TEST_SUPPORT.OPERATION_COUNT
- loop
- DUMMY_RTEMS.PARTITION_GET_BUFFER( ID, ADDRESS_1, STATUS );
- end loop;
- TMTEST.END_TIME := TIMER_DRIVER.READ_TIMER;
-
- TIME_TEST_SUPPORT.PUT_TIME(
- "PARTITION_GET_BUFFER",
- TMTEST.END_TIME,
- TIME_TEST_SUPPORT.OPERATION_COUNT,
- OVERHEAD,
- 0
- );
-
--- PARTITION_RETURN_BUFFER
-
- TIMER_DRIVER.INITIALIZE;
- for INDEX in 1 .. TIME_TEST_SUPPORT.OPERATION_COUNT
- loop
- DUMMY_RTEMS.PARTITION_RETURN_BUFFER( ID, ADDRESS_1, STATUS );
- end loop;
- TMTEST.END_TIME := TIMER_DRIVER.READ_TIMER;
-
- TIME_TEST_SUPPORT.PUT_TIME(
- "PARTITION_RETURN_BUFFER",
- TMTEST.END_TIME,
- TIME_TEST_SUPPORT.OPERATION_COUNT,
- OVERHEAD,
- 0
- );
-
--- REGION_CREATE
-
- TIMER_DRIVER.INITIALIZE;
- for INDEX in 1 .. TIME_TEST_SUPPORT.OPERATION_COUNT
- loop
- DUMMY_RTEMS.REGION_CREATE(
- NAME,
- TMTEST.MEMORY_AREA'ADDRESS,
- 2048,
- 128,
- RTEMS.DEFAULT_ATTRIBUTES,
- ID,
- STATUS
- );
- end loop;
- TMTEST.END_TIME := TIMER_DRIVER.READ_TIMER;
-
- TIME_TEST_SUPPORT.PUT_TIME(
- "REGION_CREATE",
- TMTEST.END_TIME,
- TIME_TEST_SUPPORT.OPERATION_COUNT,
- OVERHEAD,
- 0
- );
-
--- REGION_IDENT
-
- TIMER_DRIVER.INITIALIZE;
- for INDEX in 1 .. TIME_TEST_SUPPORT.OPERATION_COUNT
- loop
- DUMMY_RTEMS.REGION_IDENT(
- NAME,
- ID,
- STATUS
- );
- end loop;
- TMTEST.END_TIME := TIMER_DRIVER.READ_TIMER;
-
- TIME_TEST_SUPPORT.PUT_TIME(
- "REGION_IDENT",
- TMTEST.END_TIME,
- TIME_TEST_SUPPORT.OPERATION_COUNT,
- OVERHEAD,
- 0
- );
-
--- REGION_DELETE
-
- TIMER_DRIVER.INITIALIZE;
- for INDEX in 1 .. TIME_TEST_SUPPORT.OPERATION_COUNT
- loop
- DUMMY_RTEMS.REGION_DELETE( ID, STATUS );
- end loop;
- TMTEST.END_TIME := TIMER_DRIVER.READ_TIMER;
-
- TIME_TEST_SUPPORT.PUT_TIME(
- "REGION_DELETE",
- TMTEST.END_TIME,
- TIME_TEST_SUPPORT.OPERATION_COUNT,
- OVERHEAD,
- 0
- );
-
--- REGION_GET_SEGMENT
-
- TIMER_DRIVER.INITIALIZE;
- for INDEX in 1 .. TIME_TEST_SUPPORT.OPERATION_COUNT
- loop
- DUMMY_RTEMS.REGION_GET_SEGMENT(
- ID,
- 243,
- RTEMS.DEFAULT_OPTIONS,
- TIMEOUT,
- ADDRESS_1,
- STATUS
- );
- end loop;
- TMTEST.END_TIME := TIMER_DRIVER.READ_TIMER;
-
- TIME_TEST_SUPPORT.PUT_TIME(
- "REGION_GET_SEGMENT",
- TMTEST.END_TIME,
- TIME_TEST_SUPPORT.OPERATION_COUNT,
- OVERHEAD,
- 0
- );
-
--- REGION_RETURN_SEGMENT
-
- TIMER_DRIVER.INITIALIZE;
- for INDEX in 1 .. TIME_TEST_SUPPORT.OPERATION_COUNT
- loop
- DUMMY_RTEMS.REGION_RETURN_SEGMENT( ID, ADDRESS_1, STATUS );
- end loop;
- TMTEST.END_TIME := TIMER_DRIVER.READ_TIMER;
-
- TIME_TEST_SUPPORT.PUT_TIME(
- "REGION_RETURN_SEGMENT",
- TMTEST.END_TIME,
- TIME_TEST_SUPPORT.OPERATION_COUNT,
- OVERHEAD,
- 0
- );
-
--- PORT_CREATE
-
- TIMER_DRIVER.INITIALIZE;
- for INDEX in 1 .. TIME_TEST_SUPPORT.OPERATION_COUNT
- loop
- DUMMY_RTEMS.PORT_CREATE(
- NAME,
- TMTEST.INTERNAL_PORT_AREA'ADDRESS,
- TMTEST.EXTERNAL_PORT_AREA'ADDRESS,
- TMTEST.INTERNAL_PORT_AREA'LENGTH,
- ID,
- STATUS
- );
- end loop;
- TMTEST.END_TIME := TIMER_DRIVER.READ_TIMER;
-
- TIME_TEST_SUPPORT.PUT_TIME(
- "PORT_CREATE",
- TMTEST.END_TIME,
- TIME_TEST_SUPPORT.OPERATION_COUNT,
- OVERHEAD,
- 0
- );
-
--- PORT_IDENT
-
- TIMER_DRIVER.INITIALIZE;
- for INDEX in 1 .. TIME_TEST_SUPPORT.OPERATION_COUNT
- loop
- DUMMY_RTEMS.PORT_IDENT( NAME, ID, STATUS );
- end loop;
- TMTEST.END_TIME := TIMER_DRIVER.READ_TIMER;
-
- TIME_TEST_SUPPORT.PUT_TIME(
- "PORT_IDENT",
- TMTEST.END_TIME,
- TIME_TEST_SUPPORT.OPERATION_COUNT,
- OVERHEAD,
- 0
- );
-
--- PORT_DELETE
-
- TIMER_DRIVER.INITIALIZE;
- for INDEX in 1 .. TIME_TEST_SUPPORT.OPERATION_COUNT
- loop
- DUMMY_RTEMS.PORT_DELETE( ID, STATUS );
- end loop;
- TMTEST.END_TIME := TIMER_DRIVER.READ_TIMER;
-
- TIME_TEST_SUPPORT.PUT_TIME(
- "PORT_DELETE",
- TMTEST.END_TIME,
- TIME_TEST_SUPPORT.OPERATION_COUNT,
- OVERHEAD,
- 0
- );
-
--- PORT_EXTERNAL_TO_INTERNAL
-
- TIMER_DRIVER.INITIALIZE;
- for INDEX in 1 .. TIME_TEST_SUPPORT.OPERATION_COUNT
- loop
- DUMMY_RTEMS.PORT_EXTERNAL_TO_INTERNAL(
- ID,
- TMTEST.EXTERNAL_PORT_AREA( 7 )'ADDRESS,
- ADDRESS_1,
- STATUS
- );
- end loop;
- TMTEST.END_TIME := TIMER_DRIVER.READ_TIMER;
-
- TIME_TEST_SUPPORT.PUT_TIME(
- "PORT_EXTERNAL_TO_INTERNAL",
- TMTEST.END_TIME,
- TIME_TEST_SUPPORT.OPERATION_COUNT,
- OVERHEAD,
- 0
- );
-
--- PORT_INTERNAL_TO_EXTERNAL
-
- TIMER_DRIVER.INITIALIZE;
- for INDEX in 1 .. TIME_TEST_SUPPORT.OPERATION_COUNT
- loop
- DUMMY_RTEMS.PORT_INTERNAL_TO_EXTERNAL(
- ID,
- TMTEST.INTERNAL_PORT_AREA( 7 )'ADDRESS,
- ADDRESS_1,
- STATUS
- );
- end loop;
- TMTEST.END_TIME := TIMER_DRIVER.READ_TIMER;
-
- TIME_TEST_SUPPORT.PUT_TIME(
- "PORT_INTERNAL_TO_EXTERNAL",
- TMTEST.END_TIME,
- TIME_TEST_SUPPORT.OPERATION_COUNT,
- OVERHEAD,
- 0
- );
-
-TEST_SUPPORT.PAUSE;
-
--- FATAL_ERROR_OCCURRED
-
- TIMER_DRIVER.INITIALIZE;
- for INDEX in 1 .. TIME_TEST_SUPPORT.OPERATION_COUNT
- loop
- DUMMY_RTEMS.FATAL_ERROR_OCCURRED( ERROR );
- end loop;
- TMTEST.END_TIME := TIMER_DRIVER.READ_TIMER;
-
- TIME_TEST_SUPPORT.PUT_TIME(
- "FATAL_ERROR_OCCURRED",
- TMTEST.END_TIME,
- TIME_TEST_SUPPORT.OPERATION_COUNT,
- OVERHEAD,
- 0
- );
-
--- RATE_MONOTONIC_CREATE
-
- TIMER_DRIVER.INITIALIZE;
- for INDEX in 1 .. TIME_TEST_SUPPORT.OPERATION_COUNT
- loop
- DUMMY_RTEMS.RATE_MONOTONIC_CREATE( NAME, ID, STATUS );
- end loop;
- TMTEST.END_TIME := TIMER_DRIVER.READ_TIMER;
-
- TIME_TEST_SUPPORT.PUT_TIME(
- "RATE_MONOTONIC_CREATE",
- TMTEST.END_TIME,
- TIME_TEST_SUPPORT.OPERATION_COUNT,
- OVERHEAD,
- 0
- );
-
--- RATE_MONOTONIC_IDENT
-
- TIMER_DRIVER.INITIALIZE;
- for INDEX in 1 .. TIME_TEST_SUPPORT.OPERATION_COUNT
- loop
- DUMMY_RTEMS.RATE_MONOTONIC_IDENT(
- NAME,
- ID,
- STATUS
- );
- end loop;
- TMTEST.END_TIME := TIMER_DRIVER.READ_TIMER;
-
- TIME_TEST_SUPPORT.PUT_TIME(
- "RATE_MONOTONIC_IDENT",
- TMTEST.END_TIME,
- TIME_TEST_SUPPORT.OPERATION_COUNT,
- OVERHEAD,
- 0
- );
-
--- RATE_MONOTONIC_DELETE
-
- TIMER_DRIVER.INITIALIZE;
- for INDEX in 1 .. TIME_TEST_SUPPORT.OPERATION_COUNT
- loop
- DUMMY_RTEMS.RATE_MONOTONIC_DELETE( ID, STATUS );
- end loop;
- TMTEST.END_TIME := TIMER_DRIVER.READ_TIMER;
-
- TIME_TEST_SUPPORT.PUT_TIME(
- "RATE_MONOTONIC_DELETE",
- TMTEST.END_TIME,
- TIME_TEST_SUPPORT.OPERATION_COUNT,
- OVERHEAD,
- 0
- );
-
--- RATE_MONOTONIC_CANCEL
-
- TIMER_DRIVER.INITIALIZE;
- for INDEX in 1 .. TIME_TEST_SUPPORT.OPERATION_COUNT
- loop
- DUMMY_RTEMS.RATE_MONOTONIC_CANCEL( ID, STATUS );
- end loop;
- TMTEST.END_TIME := TIMER_DRIVER.READ_TIMER;
-
- TIME_TEST_SUPPORT.PUT_TIME(
- "RATE_MONOTONIC_CANCEL",
- TMTEST.END_TIME,
- TIME_TEST_SUPPORT.OPERATION_COUNT,
- OVERHEAD,
- 0
- );
-
--- RATE_MONOTONIC_PERIOD
-
- TIMER_DRIVER.INITIALIZE;
- for INDEX in 1 .. TIME_TEST_SUPPORT.OPERATION_COUNT
- loop
- DUMMY_RTEMS.RATE_MONOTONIC_PERIOD( ID, TIMEOUT, STATUS );
- end loop;
- TMTEST.END_TIME := TIMER_DRIVER.READ_TIMER;
-
- TIME_TEST_SUPPORT.PUT_TIME(
- "RATE_MONOTONIC_PERIOD",
- TMTEST.END_TIME,
- TIME_TEST_SUPPORT.OPERATION_COUNT,
- OVERHEAD,
- 0
- );
-
--- MULTIPROCESSING_ANNOUNCE
-
- TIMER_DRIVER.INITIALIZE;
- for INDEX in 1 .. TIME_TEST_SUPPORT.OPERATION_COUNT
- loop
- DUMMY_RTEMS.MULTIPROCESSING_ANNOUNCE;
- end loop;
- TMTEST.END_TIME := TIMER_DRIVER.READ_TIMER;
-
- TIME_TEST_SUPPORT.PUT_TIME(
- "MULTIPROCESSING_ANNOUNCE",
- TMTEST.END_TIME,
- TIME_TEST_SUPPORT.OPERATION_COUNT,
- OVERHEAD,
- 0
- );
-
- TEST_SUPPORT.ADA_TEST_END;
- RTEMS.SHUTDOWN_EXECUTIVE( 0 );
-
- end TASK_1;
-
-end TMTEST;
diff --git a/testsuites/ada/tmtests/tmoverhd/tmtest.ads b/testsuites/ada/tmtests/tmoverhd/tmtest.ads
deleted file mode 100644
index 48944077de..0000000000
--- a/testsuites/ada/tmtests/tmoverhd/tmtest.ads
+++ /dev/null
@@ -1,156 +0,0 @@
---
--- TMTEST / SPECIFICATION
---
--- DESCRIPTION:
---
--- This package is the specification for Calling Overhead Test of the RTEMS
--- Timing Test Suite.
---
--- DEPENDENCIES:
---
---
---
--- COPYRIGHT (c) 1989-2009.
--- On-Line Applications Research Corporation (OAR).
---
--- The license and distribution terms for this file may in
--- the file LICENSE in this distribution or at
--- http://www.rtems.org/license/LICENSE.
---
-
-with RTEMS;
-with RTEMS.TASKS;
-with SYSTEM;
-with System.Storage_Elements;
-
-package TMTEST is
-
---
--- Buffer Record similar to that used by RTEMS 3.2.1. Using this
--- avoids changes to the test.
---
-
- type BUFFER is
- record
- FIELD1 : RTEMS.UNSIGNED32; -- TEMPORARY UNTIL VARIABLE LENGTH
- FIELD2 : RTEMS.UNSIGNED32;
- FIELD3 : RTEMS.UNSIGNED32;
- FIELD4 : RTEMS.UNSIGNED32;
- end record;
-
---
--- These arrays contain the IDs and NAMEs of all RTEMS tasks created
--- by this test.
---
-
- TASK_ID : array ( RTEMS.UNSIGNED32 range 1 .. 3 ) of RTEMS.ID;
- TASK_NAME : array ( RTEMS.UNSIGNED32 range 1 .. 3 ) of RTEMS.NAME;
-
---
--- The following variable is set to the execution time returned
--- by the timer.
---
-
- END_TIME : RTEMS.UNSIGNED32;
-
---
--- The following area defines a memory area to be used as the
--- internal address space of the port.
---
-
- INTERNAL_PORT_AREA_ADDRESS : constant System.Address :=
- System.Storage_Elements.To_Address(16#00001000#);
-
- INTERNAL_PORT_AREA : array ( RTEMS.UNSIGNED32 range 0 .. 255 )
- of RTEMS.UNSIGNED8;
- for INTERNAL_PORT_AREA'Address use INTERNAL_PORT_AREA_ADDRESS;
-
---
--- The following area defines a memory area to be used as the
--- external address space of the port.
---
-
- EXTERNAL_PORT_AREA_ADDRESS : constant System.Address :=
- System.Storage_Elements.To_Address(16#00002000#);
-
- EXTERNAL_PORT_AREA : array ( RTEMS.UNSIGNED32 range 0 .. 255 )
- of RTEMS.UNSIGNED8;
- for EXTERNAL_PORT_AREA'Address use EXTERNAL_PORT_AREA_ADDRESS;
-
-
---
--- The following area defines a memory area to be used as the
--- memory space for a partition and later for a region.
---
-
- MEMORY_AREA : array ( RTEMS.UNSIGNED32 range 0 .. 255 ) of RTEMS.UNSIGNED8;
- for MEMORY_AREA'ALIGNMENT use RTEMS.STRUCTURE_ALIGNMENT;
-
---
--- INIT
---
--- DESCRIPTION:
---
--- This RTEMS task initializes the application.
---
-
- procedure INIT (
- ARGUMENT : in RTEMS.TASKS.ARGUMENT
- );
- pragma Convention (C, INIT);
-
---
--- TIMER_HANDLER
---
--- DESCRIPTION:
---
--- This subprogram is a timer service routine.
---
-
- procedure TIMER_HANDLER (
- IGNORED_ID : in RTEMS.ID;
- IGNORED_ADDRESS : in RTEMS.ADDRESS
- );
- pragma Convention (C, TIMER_HANDLER);
-
---
--- ISR_HANDLER
---
--- DESCRIPTION:
---
--- This subprogram is an interrupt service routine.
---
-
--- procedure ISR_HANDLER (
--- VECTOR : in RTEMS.VECTOR_NUMBER
--- );
-
---
--- ASR_HANDLER
---
--- DESCRIPTION:
---
--- This subprogram is an asynchronous signal routine.
---
-
- procedure ASR_HANDLER (
- SIGNALS : in RTEMS.SIGNAL_SET
- );
- pragma Convention (C, ASR_HANDLER);
-
---
--- TASK_1
---
--- DESCRIPTION:
---
--- This RTEMS task is responsible for measuring and
--- reporting the calling overhead for all RTEMS
--- directives.
---
-
- procedure TASK_1 (
- ARGUMENT : in RTEMS.TASKS.ARGUMENT
- );
- pragma Convention (C, TASK_1);
-
-end TMTEST;
diff --git a/testsuites/build/.doorstop.skip b/testsuites/build/.doorstop.skip
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/testsuites/build/.doorstop.skip
diff --git a/testsuites/build/bad-integer.ini b/testsuites/build/bad-integer.ini
new file mode 100644
index 0000000000..7bc5b72bc1
--- /dev/null
+++ b/testsuites/build/bad-integer.ini
@@ -0,0 +1,2 @@
+[fake/good]
+INTEGER = bad
diff --git a/testsuites/build/bin/fake-rtems5-ar b/testsuites/build/bin/fake-rtems5-ar
new file mode 100755
index 0000000000..1561e69e27
--- /dev/null
+++ b/testsuites/build/bin/fake-rtems5-ar
@@ -0,0 +1,31 @@
+#!/usr/bin/env python
+
+# SPDX-License-Identifier: BSD-2-Clause
+#
+# Copyright (C) 2019 embedded brains GmbH
+#
+# 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 sys
+
+print(sys.argv)
+exit(0)
diff --git a/testsuites/build/bin/fake-rtems5-gcc b/testsuites/build/bin/fake-rtems5-gcc
new file mode 100755
index 0000000000..f2ae2d92c5
--- /dev/null
+++ b/testsuites/build/bin/fake-rtems5-gcc
@@ -0,0 +1,43 @@
+#!/usr/bin/env python
+
+# SPDX-License-Identifier: BSD-2-Clause
+#
+# Copyright (C) 2019 embedded brains GmbH
+#
+# 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 argparse
+import sys
+
+sys.argv = list(filter(lambda a: a != '-', sys.argv))
+
+parser = argparse.ArgumentParser()
+parser.add_argument('-E', action='count')
+parser.add_argument('-dM', action='count')
+args = parser.parse_args()
+
+if args.E > 0:
+ print("#define __GNUC__ 7")
+ print("#define __GNUC_MINOR__ 4")
+ print("#define __GNUC_PATCHLEVEL__ 0")
+
+exit(0)
diff --git a/testsuites/build/bin/fake-rtems5-ld b/testsuites/build/bin/fake-rtems5-ld
new file mode 100755
index 0000000000..1561e69e27
--- /dev/null
+++ b/testsuites/build/bin/fake-rtems5-ld
@@ -0,0 +1,31 @@
+#!/usr/bin/env python
+
+# SPDX-License-Identifier: BSD-2-Clause
+#
+# Copyright (C) 2019 embedded brains GmbH
+#
+# 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 sys
+
+print(sys.argv)
+exit(0)
diff --git a/testsuites/build/fake-good.ini b/testsuites/build/fake-good.ini
new file mode 100644
index 0000000000..44c5aad131
--- /dev/null
+++ b/testsuites/build/fake-good.ini
@@ -0,0 +1 @@
+[fake/good]
diff --git a/testsuites/build/fake-inherit-good.ini b/testsuites/build/fake-inherit-good.ini
new file mode 100644
index 0000000000..c0e00ccc30
--- /dev/null
+++ b/testsuites/build/fake-inherit-good.ini
@@ -0,0 +1,2 @@
+[fake/very]
+INHERIT = good
diff --git a/testsuites/build/fake-inherit-loop.ini b/testsuites/build/fake-inherit-loop.ini
new file mode 100644
index 0000000000..e995b527d4
--- /dev/null
+++ b/testsuites/build/fake-inherit-loop.ini
@@ -0,0 +1,4 @@
+[fake/one]
+INHERIT = two
+[fake/two]
+INHERIT = one
diff --git a/testsuites/build/fake-inherit-none.ini b/testsuites/build/fake-inherit-none.ini
new file mode 100644
index 0000000000..aa7b0b5f38
--- /dev/null
+++ b/testsuites/build/fake-inherit-none.ini
@@ -0,0 +1,2 @@
+[fake/none]
+INHERIT = none2
diff --git a/testsuites/build/fake-none.ini b/testsuites/build/fake-none.ini
new file mode 100644
index 0000000000..fa9a6d7f5b
--- /dev/null
+++ b/testsuites/build/fake-none.ini
@@ -0,0 +1 @@
+[fake/none]
diff --git a/testsuites/build/good-integer.ini b/testsuites/build/good-integer.ini
new file mode 100644
index 0000000000..470d498a10
--- /dev/null
+++ b/testsuites/build/good-integer.ini
@@ -0,0 +1,2 @@
+[fake/good]
+INTEGER = 0x08
diff --git a/testsuites/build/not-power-of-two.ini b/testsuites/build/not-power-of-two.ini
new file mode 100644
index 0000000000..dad6115be9
--- /dev/null
+++ b/testsuites/build/not-power-of-two.ini
@@ -0,0 +1,2 @@
+[fake/good]
+INTEGER = 3
diff --git a/testsuites/build/spec/bsp.yml b/testsuites/build/spec/bsp.yml
new file mode 100644
index 0000000000..5b37a84dbc
--- /dev/null
+++ b/testsuites/build/spec/bsp.yml
@@ -0,0 +1,16 @@
+active: true
+arch: fake
+bsp: good
+build-type: bsp
+derived: true
+enabled-by: []
+family: good
+header: ''
+level: 1.0
+links: []
+normative: true
+order: 0
+ref: ''
+reviewed: null
+text: ''
+type: build
diff --git a/testsuites/build/spec/config-file.yml b/testsuites/build/spec/config-file.yml
new file mode 100644
index 0000000000..48a5a0bc55
--- /dev/null
+++ b/testsuites/build/spec/config-file.yml
@@ -0,0 +1,19 @@
+active: true
+build-type: config-file
+content: |
+ $$
+ a$$z
+ ${ABC}
+ 0$${NIX}1
+derived: false
+enabled-by: []
+header: ''
+level: 1.0
+links: []
+normative: true
+order: 0
+ref: ''
+reviewed: null
+target: config-file.txt
+text: ''
+type: build
diff --git a/testsuites/build/spec/config-header.yml b/testsuites/build/spec/config-header.yml
new file mode 100644
index 0000000000..22971c127f
--- /dev/null
+++ b/testsuites/build/spec/config-header.yml
@@ -0,0 +1,18 @@
+active: true
+build-type: config-header
+derived: false
+enabled-by: []
+header: ''
+level: 1.0
+links:
+- string-option: null
+- integer-option: null
+normative: true
+order: 0
+ref: ''
+reviewed: null
+target: config-header.h
+guard: CONFIG_HEADER_H
+include-headers: []
+text: ''
+type: build
diff --git a/testsuites/build/spec/gcc.yml b/testsuites/build/spec/gcc.yml
new file mode 100644
index 0000000000..18bf857ee1
--- /dev/null
+++ b/testsuites/build/spec/gcc.yml
@@ -0,0 +1,41 @@
+actions:
+- set-value: ${ARCH}-rtems5-gcc
+- substitute: null
+- find-program: null
+- env-assign: AS
+- env-assign: CC
+- env-assign: LINK_CC
+- set-value: ${ARCH}-rtems5-g++
+- substitute: null
+- find-program: null
+- env-assign: CXX
+- env-assign: LINK_CXX
+- set-value: ${ARCH}-rtems5-ar
+- substitute: null
+- find-program: null
+- env-assign: AR
+- set-value: ${ARCH}-rtems5-ld
+- substitute: null
+- find-program: null
+- env-assign: LD
+- script: |
+ load = "ar g++ gas gcc"
+ if not is_windows_host:
+ load += " gccdeps"
+ conf.load(load)
+active: true
+build-type: option
+default: null
+default-by-variant: []
+derived: false
+enabled-by: []
+header: ''
+level: 1.39
+links: []
+name: GCC
+normative: true
+order: -900
+ref: ''
+reviewed: oRRzhna6a47p0_QjPWqYLful9JgHGbxMqy-q7mSiZiU=
+text: ''
+type: build
diff --git a/testsuites/build/spec/integer-option.yml b/testsuites/build/spec/integer-option.yml
new file mode 100644
index 0000000000..bacdb2a83f
--- /dev/null
+++ b/testsuites/build/spec/integer-option.yml
@@ -0,0 +1,25 @@
+active: true
+build-type: option
+derived: false
+enabled-by: []
+format: '{:#010x}'
+header: ''
+level: 1.0
+links: []
+name: INTEGER
+normative: true
+order: 0
+ref: ''
+reviewed: null
+text: ''
+type: build
+default: 1
+default-by-variant: []
+actions:
+- get-integer: null
+- assert-in-interval:
+ - 1
+ - 16
+- assert-power-of-two: null
+- env-assign: null
+- format-and-define: null
diff --git a/testsuites/build/spec/string-option.yml b/testsuites/build/spec/string-option.yml
new file mode 100644
index 0000000000..c97c078868
--- /dev/null
+++ b/testsuites/build/spec/string-option.yml
@@ -0,0 +1,24 @@
+active: true
+build-type: option
+derived: false
+enabled-by: []
+format: '{}'
+header: ''
+level: 1.0
+links: []
+name: ABC
+normative: true
+order: 0
+ref: ''
+reviewed: null
+text: ''
+type: build
+default: ZYZ
+default-by-variant:
+- value: DEF
+ variants:
+ - .*go.*d
+actions:
+- get-string: null
+- env-assign: null
+- define: null
diff --git a/testsuites/build/spec/top-level-group.yml b/testsuites/build/spec/top-level-group.yml
new file mode 100644
index 0000000000..89b6c457f2
--- /dev/null
+++ b/testsuites/build/spec/top-level-group.yml
@@ -0,0 +1,17 @@
+active: true
+build-type: group
+derived: false
+enabled-by: []
+header: ''
+level: 1.82
+links:
+- config-header: null
+- config-file: null
+- gcc: null
+normative: true
+order: 0
+ref: ''
+reviewed: null
+text: ''
+top-level: true
+type: build
diff --git a/testsuites/build/spec2/config-file.yml b/testsuites/build/spec2/config-file.yml
new file mode 100644
index 0000000000..7aac892f2c
--- /dev/null
+++ b/testsuites/build/spec2/config-file.yml
@@ -0,0 +1,16 @@
+active: true
+build-type: config-file
+content: |
+ ${OPEN
+derived: false
+enabled-by: []
+header: ''
+level: 1.0
+links: []
+normative: true
+order: 0
+ref: ''
+reviewed: null
+target: config-file.txt
+text: ''
+type: build
diff --git a/testsuites/build/spec2/gcc.yml b/testsuites/build/spec2/gcc.yml
new file mode 100644
index 0000000000..18bf857ee1
--- /dev/null
+++ b/testsuites/build/spec2/gcc.yml
@@ -0,0 +1,41 @@
+actions:
+- set-value: ${ARCH}-rtems5-gcc
+- substitute: null
+- find-program: null
+- env-assign: AS
+- env-assign: CC
+- env-assign: LINK_CC
+- set-value: ${ARCH}-rtems5-g++
+- substitute: null
+- find-program: null
+- env-assign: CXX
+- env-assign: LINK_CXX
+- set-value: ${ARCH}-rtems5-ar
+- substitute: null
+- find-program: null
+- env-assign: AR
+- set-value: ${ARCH}-rtems5-ld
+- substitute: null
+- find-program: null
+- env-assign: LD
+- script: |
+ load = "ar g++ gas gcc"
+ if not is_windows_host:
+ load += " gccdeps"
+ conf.load(load)
+active: true
+build-type: option
+default: null
+default-by-variant: []
+derived: false
+enabled-by: []
+header: ''
+level: 1.39
+links: []
+name: GCC
+normative: true
+order: -900
+ref: ''
+reviewed: oRRzhna6a47p0_QjPWqYLful9JgHGbxMqy-q7mSiZiU=
+text: ''
+type: build
diff --git a/testsuites/build/spec2/top-level-group.yml b/testsuites/build/spec2/top-level-group.yml
new file mode 100644
index 0000000000..3cefcbdfe9
--- /dev/null
+++ b/testsuites/build/spec2/top-level-group.yml
@@ -0,0 +1,16 @@
+active: true
+build-type: group
+derived: false
+enabled-by: []
+header: ''
+level: 1.82
+links:
+- config-file: null
+- gcc: null
+normative: true
+order: 0
+ref: ''
+reviewed: null
+text: ''
+top-level: true
+type: build
diff --git a/testsuites/build/test.py b/testsuites/build/test.py
new file mode 100755
index 0000000000..e8b50983dd
--- /dev/null
+++ b/testsuites/build/test.py
@@ -0,0 +1,200 @@
+#!/usr/bin/env python
+
+# SPDX-License-Identifier: BSD-2-Clause
+#
+# Copyright (C) 2019 embedded brains GmbH
+#
+# 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 os
+import subprocess
+import unittest
+
+try:
+ os.symlink("../../wscript", "wscript")
+except FileExistsError:
+ pass
+try:
+ os.symlink("fake-rtems5-gcc", "bin/fake-rtems5-g++")
+except FileExistsError:
+ pass
+exec(open("../../wscript", "r").read())
+
+
+class TestWscript(unittest.TestCase):
+ def test_is_enabled(self):
+ self.assertTrue(_is_enabled([], None))
+ self.assertTrue(_is_enabled([], []))
+ self.assertFalse(_is_enabled([], ["A"]))
+ self.assertTrue(_is_enabled(["A"], "A"))
+ self.assertFalse(_is_enabled(["B"], "A"))
+ self.assertTrue(_is_enabled(["A"], ["A"]))
+ self.assertFalse(_is_enabled(["B"], ["A"]))
+ self.assertTrue(_is_enabled(["A"], ["A", "B"]))
+ self.assertTrue(_is_enabled(["B"], ["A", "B"]))
+ self.assertFalse(_is_enabled(["C"], ["A", "B"]))
+ self.assertFalse(_is_enabled(["A"], {"not": "A"}))
+ self.assertTrue(_is_enabled(["B"], {"not": "A"}))
+ self.assertFalse(_is_enabled(["A"], {"and": ["A", "B"]}))
+ self.assertTrue(_is_enabled(["A", "B"], {"and": ["A", "B"]}))
+ self.assertTrue(_is_enabled(["A", "B", "C"], {"and": ["A", "B"]}))
+ self.assertTrue(
+ _is_enabled(["A", "B"], {"and": ["A", "B", {"not": "C"}]})
+ )
+ self.assertFalse(
+ _is_enabled(["A", "B", "C"], {"and": ["A", "B", {"not": "C"}]})
+ )
+ self.assertFalse(_is_enabled(["A"], {"and": "A", "x": "y"}))
+ self.assertFalse(_is_enabled(["A"], {"x": "A"}))
+ self.assertTrue(_is_enabled([], {"not": {"and": ["A", {"not": "A"}]}}))
+
+
+class TestWaf(unittest.TestCase):
+ @staticmethod
+ def waf(args, returncode):
+ cmd = f"../../waf {args}"
+ print(cmd)
+ cp = subprocess.run(
+ cmd, shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE
+ )
+ if returncode != None and cp.returncode != returncode:
+ raise AssertionError(f"command failed: {cmd}")
+ return cp
+
+ def setUp(self):
+ self.waf("distclean", None)
+ self.tools = f"--rtems-tools={os.getcwd()}"
+ self.specs = "--rtems-specs=spec"
+
+ def test_specs_no_such_directory(self):
+ cp = self.waf("configure --rtems-specs=nix", 1)
+ self.assertIn(b"Cannot list build specification directory:", cp.stderr)
+
+ def test_specs_not_a_directory(self):
+ cp = self.waf("configure --rtems-specs=test.py", 1)
+ self.assertIn(b"Cannot list build specification directory:", cp.stderr)
+
+ def test_configure_no_bsp(self):
+ cp = self.waf(
+ f"configure {self.tools} {self.specs} --rtems-config=fake-none.ini",
+ 1,
+ )
+ self.assertIn(b"No such base BSP: 'fake/none'", cp.stderr)
+
+ def test_configure_inherit_loop(self):
+ cp = self.waf(
+ f"configure {self.tools} {self.specs} --rtems-config=fake-inherit-loop.ini",
+ 1,
+ )
+ self.assertIn(
+ b"Recursion in BSP options inheritance: fake/one -> fake/two -> fake/one",
+ cp.stderr,
+ )
+
+ def test_configure_inherit_none(self):
+ cp = self.waf(
+ f"configure {self.tools} {self.specs} --rtems-config=fake-inherit-none.ini",
+ 1,
+ )
+ self.assertIn(
+ b"BSP variant 'fake/none' cannot inherit options from not existing variant 'fake/none2'",
+ cp.stderr,
+ )
+
+ def test_configure_inherit_good(self):
+ self.waf(
+ f"configure {self.tools} {self.specs} --rtems-config=fake-inherit-good.ini",
+ 0,
+ )
+
+ def test_configure_good(self):
+ cp = self.waf(
+ f"configure {self.tools} {self.specs} --rtems-config=fake-good.ini",
+ 0,
+ )
+ content = """$
+a$z
+DEF
+0${NIX}1
+"""
+ with open("build/fake/good/config-file.txt", "r") as f:
+ self.assertEqual(content, f.read())
+
+ def test_bad_config_file(self):
+ cp = self.waf(
+ f"configure {self.tools} {self.specs}2 --rtems-config=fake-good.ini",
+ 1,
+ )
+ self.assertIn(
+ b"""In item 'config-file' substitution in '${OPEN
+' failed: Invalid placeholder in string: line 1, col 1
+""",
+ cp.stderr,
+ )
+
+ def test_ini_bad_integer(self):
+ cp = self.waf(
+ f"configure {self.tools} {self.specs} --rtems-config=bad-integer.ini",
+ 1,
+ )
+ self.assertIn(
+ b"Value 'bad' for option 'INTEGER' is an invalid integer", cp.stderr
+ )
+
+ def test_ini_too_small(self):
+ cp = self.waf(
+ f"configure {self.tools} {self.specs} --rtems-config=too-small.ini",
+ 1,
+ )
+ self.assertIn(
+ b"Value '-1' for option 'INTEGER' is not in closed interval [1, 16]",
+ cp.stderr,
+ )
+
+ def test_ini_too_big(self):
+ cp = self.waf(
+ f"configure {self.tools} {self.specs} --rtems-config=too-big.ini",
+ 1,
+ )
+ self.assertIn(
+ b"Value '100' for option 'INTEGER' is not in closed interval [1, 16]",
+ cp.stderr,
+ )
+
+ def test_ini_not_power_of_two(self):
+ cp = self.waf(
+ f"configure {self.tools} {self.specs} --rtems-config=not-power-of-two.ini",
+ 1,
+ )
+ self.assertIn(
+ b"Value '3' for option 'INTEGER' is not a power of two", cp.stderr
+ )
+
+ def test_good_integer(self):
+ self.waf(
+ f"configure {self.tools} {self.specs} --rtems-config=good-integer.ini",
+ 0,
+ )
+
+
+if __name__ == "__main__":
+ unittest.main()
diff --git a/testsuites/build/too-big.ini b/testsuites/build/too-big.ini
new file mode 100644
index 0000000000..3d0fba4671
--- /dev/null
+++ b/testsuites/build/too-big.ini
@@ -0,0 +1,2 @@
+[fake/good]
+INTEGER = 100
diff --git a/testsuites/build/too-small.ini b/testsuites/build/too-small.ini
new file mode 100644
index 0000000000..55464db1cf
--- /dev/null
+++ b/testsuites/build/too-small.ini
@@ -0,0 +1,2 @@
+[fake/good]
+INTEGER = -1
diff --git a/testsuites/libtests/Makefile.am b/testsuites/libtests/Makefile.am
index c312f14324..2ff05f2b74 100644
--- a/testsuites/libtests/Makefile.am
+++ b/testsuites/libtests/Makefile.am
@@ -1493,6 +1493,15 @@ ttest01_CPPFLAGS = $(AM_CPPFLAGS) $(TEST_FLAGS_ttest01) \
$(support_includes)
endif
+if TEST_ttest02
+lib_tests += ttest02
+lib_screens += ttest02/ttest02.scn
+lib_docs += ttest02/ttest02.doc
+ttest02_SOURCES = ttest02/init.c
+ttest02_CPPFLAGS = $(AM_CPPFLAGS) $(TEST_FLAGS_ttest02) \
+ $(support_includes)
+endif
+
if TEST_tztest
lib_tests += tztest
lib_screens += tztest/tztest.scn
diff --git a/testsuites/libtests/block08/system.h b/testsuites/libtests/block08/system.h
index 646de6da48..91227539dd 100644
--- a/testsuites/libtests/block08/system.h
+++ b/testsuites/libtests/block08/system.h
@@ -13,7 +13,7 @@
#include <rtems.h>
#include <rtems/blkdev.h>
-#include <rtems/test.h>
+#include <rtems/test-info.h>
#include <bsp.h>
diff --git a/testsuites/libtests/block09/init.c b/testsuites/libtests/block09/init.c
index 73bec67c3f..1dfce2c251 100644
--- a/testsuites/libtests/block09/init.c
+++ b/testsuites/libtests/block09/init.c
@@ -35,7 +35,7 @@
#include <rtems.h>
#include <rtems/bdbuf.h>
-#include <rtems/test.h>
+#include <rtems/test-info.h>
#include <bsp.h>
diff --git a/testsuites/libtests/block10/init.c b/testsuites/libtests/block10/init.c
index 8e67c055d1..1e57a65eb1 100644
--- a/testsuites/libtests/block10/init.c
+++ b/testsuites/libtests/block10/init.c
@@ -35,7 +35,7 @@
#include <rtems.h>
#include <rtems/bdbuf.h>
-#include <rtems/test.h>
+#include <rtems/test-info.h>
const char rtems_test_name[] = "BLOCK 10";
diff --git a/testsuites/libtests/capture01/system.h b/testsuites/libtests/capture01/system.h
index dc4a37a527..620b7b477f 100644
--- a/testsuites/libtests/capture01/system.h
+++ b/testsuites/libtests/capture01/system.h
@@ -12,7 +12,7 @@
*/
#include <rtems.h>
-#include <rtems/test.h>
+#include <rtems/test-info.h>
/* functions */
diff --git a/testsuites/libtests/configure.ac b/testsuites/libtests/configure.ac
index 3b5462600d..2fbcb61622 100644
--- a/testsuites/libtests/configure.ac
+++ b/testsuites/libtests/configure.ac
@@ -225,6 +225,7 @@ RTEMS_TEST_CHECK([termios10])
RTEMS_TEST_CHECK([termios11])
RTEMS_TEST_CHECK([top])
RTEMS_TEST_CHECK([ttest01])
+RTEMS_TEST_CHECK([ttest02])
RTEMS_TEST_CHECK([tztest])
RTEMS_TEST_CHECK([uid01])
RTEMS_TEST_CHECK([unlink])
diff --git a/testsuites/libtests/dl01/dl01-o1.c b/testsuites/libtests/dl01/dl01-o1.c
index a47beb1d51..70fa2d3be8 100644
--- a/testsuites/libtests/dl01/dl01-o1.c
+++ b/testsuites/libtests/dl01/dl01-o1.c
@@ -10,7 +10,7 @@
* Hello World as a loadable module.
*/
-#include <rtems/test.h>
+#include <rtems/test-info.h>
#define printf(...) rtems_printf(&rtems_test_printer, __VA_ARGS__);
diff --git a/testsuites/libtests/dl02/dl02-o1.c b/testsuites/libtests/dl02/dl02-o1.c
index 2afb618800..a7ab2d586c 100644
--- a/testsuites/libtests/dl02/dl02-o1.c
+++ b/testsuites/libtests/dl02/dl02-o1.c
@@ -10,7 +10,7 @@
#include <dlfcn.h>
-#include <rtems/test.h>
+#include <rtems/test-info.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 507333535b..331fd3bf25 100644
--- a/testsuites/libtests/dl02/dl02-o2.c
+++ b/testsuites/libtests/dl02/dl02-o2.c
@@ -8,7 +8,7 @@
#include "dl-o2.h"
-#include <rtems/test.h>
+#include <rtems/test-info.h>
#define printf(...) rtems_printf(&rtems_test_printer, __VA_ARGS__)
diff --git a/testsuites/libtests/dl05/dl05-o5.cc b/testsuites/libtests/dl05/dl05-o5.cc
index b70790ea7b..c861916ff0 100644
--- a/testsuites/libtests/dl05/dl05-o5.cc
+++ b/testsuites/libtests/dl05/dl05-o5.cc
@@ -2,7 +2,7 @@
#include <stdexcept>
-#include <rtems/test.h>
+#include <rtems/test-info.h>
#define printf(...) rtems_printf(&rtems_test_printer, __VA_ARGS__);
diff --git a/testsuites/libtests/dl06/dl06-o1.c b/testsuites/libtests/dl06/dl06-o1.c
index 32e9a4acd9..57124ccff5 100644
--- a/testsuites/libtests/dl06/dl06-o1.c
+++ b/testsuites/libtests/dl06/dl06-o1.c
@@ -11,7 +11,7 @@
#include <dlfcn.h>
#include <math.h>
-#include <rtems/test.h>
+#include <rtems/test-info.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 7d6f6c8d57..3c374b2371 100644
--- a/testsuites/libtests/dl06/dl06-o2.c
+++ b/testsuites/libtests/dl06/dl06-o2.c
@@ -11,7 +11,7 @@
#include <stdlib.h>
#include <math.h>
-#include <rtems/test.h>
+#include <rtems/test-info.h>
#define printf(...) rtems_printf(&rtems_test_printer, __VA_ARGS__);
diff --git a/testsuites/libtests/dl07/dl07-o1.c b/testsuites/libtests/dl07/dl07-o1.c
index e3a9cec6cf..adb452b96e 100644
--- a/testsuites/libtests/dl07/dl07-o1.c
+++ b/testsuites/libtests/dl07/dl07-o1.c
@@ -9,7 +9,7 @@
#include "dl-o1.h"
-#include <rtems/test.h>
+#include <rtems/test-info.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 bbb493ef21..d31d0e5f4e 100644
--- a/testsuites/libtests/dl07/dl07-o2.c
+++ b/testsuites/libtests/dl07/dl07-o2.c
@@ -10,7 +10,7 @@
#include "dl-o1.h"
#include "dl-o2.h"
-#include <rtems/test.h>
+#include <rtems/test-info.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 c499f6cab7..ecdd72f8a9 100644
--- a/testsuites/libtests/dl07/dl07-o3.c
+++ b/testsuites/libtests/dl07/dl07-o3.c
@@ -13,7 +13,7 @@
#include "dl-o5.h"
#include <inttypes.h>
-#include <rtems/test.h>
+#include <rtems/test-info.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 c9028ae808..ad9fe9da32 100644
--- a/testsuites/libtests/dl07/dl07-o4.c
+++ b/testsuites/libtests/dl07/dl07-o4.c
@@ -10,7 +10,7 @@
#include "dl-o1.h"
#include "dl-o4.h"
-#include <rtems/test.h>
+#include <rtems/test-info.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 fc56fd31a2..cb04a3e5be 100644
--- a/testsuites/libtests/dl07/dl07-o5.c
+++ b/testsuites/libtests/dl07/dl07-o5.c
@@ -11,7 +11,7 @@
#include "dl-o5.h"
#include <inttypes.h>
-#include <rtems/test.h>
+#include <rtems/test-info.h>
#define printf(...) rtems_printf(&rtems_test_printer, __VA_ARGS__);
diff --git a/testsuites/libtests/dl08/dl08-o1.c b/testsuites/libtests/dl08/dl08-o1.c
index e6173f3a78..422d25bb09 100644
--- a/testsuites/libtests/dl08/dl08-o1.c
+++ b/testsuites/libtests/dl08/dl08-o1.c
@@ -9,7 +9,7 @@
#include "dl-o1.h"
-#include <rtems/test.h>
+#include <rtems/test-info.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 e58c8750e9..f4a459f451 100644
--- a/testsuites/libtests/dl08/dl08-o2.c
+++ b/testsuites/libtests/dl08/dl08-o2.c
@@ -10,7 +10,7 @@
#include "dl-o2.h"
#include "dl-o3.h"
-#include <rtems/test.h>
+#include <rtems/test-info.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 c84b3d72ad..af5976c6de 100644
--- a/testsuites/libtests/dl08/dl08-o3.c
+++ b/testsuites/libtests/dl08/dl08-o3.c
@@ -12,7 +12,7 @@
#include "dl-o5.h"
#include <inttypes.h>
-#include <rtems/test.h>
+#include <rtems/test-info.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 72dfbc6850..7cbd4aadd6 100644
--- a/testsuites/libtests/dl08/dl08-o4.c
+++ b/testsuites/libtests/dl08/dl08-o4.c
@@ -10,7 +10,7 @@
#include "dl-o4.h"
#include "dl-o5.h"
-#include <rtems/test.h>
+#include <rtems/test-info.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 9257a684d7..c4fa9ecdf1 100644
--- a/testsuites/libtests/dl08/dl08-o5.c
+++ b/testsuites/libtests/dl08/dl08-o5.c
@@ -11,7 +11,7 @@
#include "dl-o6.h"
#include <inttypes.h>
-#include <rtems/test.h>
+#include <rtems/test-info.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 4aee277a3d..b8c4b2aac6 100644
--- a/testsuites/libtests/dl08/dl08-o6-123456789-123456789.c
+++ b/testsuites/libtests/dl08/dl08-o6-123456789-123456789.c
@@ -10,7 +10,7 @@
#include "dl-o6.h"
#include <inttypes.h>
-#include <rtems/test.h>
+#include <rtems/test-info.h>
#define printf(...) rtems_printf(&rtems_test_printer, __VA_ARGS__);
diff --git a/testsuites/libtests/dl09/dl09-o1.c b/testsuites/libtests/dl09/dl09-o1.c
index 9404a45732..45cc6edcfa 100644
--- a/testsuites/libtests/dl09/dl09-o1.c
+++ b/testsuites/libtests/dl09/dl09-o1.c
@@ -9,7 +9,7 @@
#include "dl-o1.h"
-#include <rtems/test.h>
+#include <rtems/test-info.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 4b9f15cd28..48a0786b9c 100644
--- a/testsuites/libtests/dl09/dl09-o2.c
+++ b/testsuites/libtests/dl09/dl09-o2.c
@@ -10,7 +10,7 @@
#include "dl-o2.h"
#include "dl-o3.h"
-#include <rtems/test.h>
+#include <rtems/test-info.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 7f8f419bb1..9fb0591d37 100644
--- a/testsuites/libtests/dl09/dl09-o3.c
+++ b/testsuites/libtests/dl09/dl09-o3.c
@@ -12,7 +12,7 @@
#include "dl-o5.h"
#include <inttypes.h>
-#include <rtems/test.h>
+#include <rtems/test-info.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 9fea2e5d5c..2ae0ef5ea8 100644
--- a/testsuites/libtests/dl09/dl09-o4.c
+++ b/testsuites/libtests/dl09/dl09-o4.c
@@ -10,7 +10,7 @@
#include "dl-o4.h"
#include "dl-o5.h"
-#include <rtems/test.h>
+#include <rtems/test-info.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 fb1169256c..badeaed53f 100644
--- a/testsuites/libtests/dl09/dl09-o5.c
+++ b/testsuites/libtests/dl09/dl09-o5.c
@@ -11,7 +11,7 @@
#include "dl-o5.h"
#include <inttypes.h>
-#include <rtems/test.h>
+#include <rtems/test-info.h>
#define printf(...) rtems_printf(&rtems_test_printer, __VA_ARGS__);
diff --git a/testsuites/libtests/dl10/dl-load.c b/testsuites/libtests/dl10/dl-load.c
index dee1d6e9cc..7a4bae9c17 100644
--- a/testsuites/libtests/dl10/dl-load.c
+++ b/testsuites/libtests/dl10/dl-load.c
@@ -96,28 +96,6 @@ static void* dl_load_obj(const char* name, bool has_unresolved)
return handle;
}
-static void dl_close (void* handle)
-{
- int r;
- printf ("handle: %p closing\n", handle);
- r = dlclose (handle);
- if (r != 0)
- printf("dlclose failed: %s\n", dlerror());
- rtems_test_assert (r == 0);
-}
-
-static int dl_call (void* handle, const char* func)
-{
- call_sig call = dlsym (handle, func);
- if (call == NULL)
- {
- printf("dlsym failed: symbol not found: %s\n", func);
- return 1;
- }
- call ();
- return 0;
-}
-
int dl_load_test(void)
{
void* o1;
diff --git a/testsuites/libtests/dl10/dl10-o1.c b/testsuites/libtests/dl10/dl10-o1.c
index e6173f3a78..422d25bb09 100644
--- a/testsuites/libtests/dl10/dl10-o1.c
+++ b/testsuites/libtests/dl10/dl10-o1.c
@@ -9,7 +9,7 @@
#include "dl-o1.h"
-#include <rtems/test.h>
+#include <rtems/test-info.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 e58c8750e9..f4a459f451 100644
--- a/testsuites/libtests/dl10/dl10-o2.c
+++ b/testsuites/libtests/dl10/dl10-o2.c
@@ -10,7 +10,7 @@
#include "dl-o2.h"
#include "dl-o3.h"
-#include <rtems/test.h>
+#include <rtems/test-info.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 c84b3d72ad..af5976c6de 100644
--- a/testsuites/libtests/dl10/dl10-o3.c
+++ b/testsuites/libtests/dl10/dl10-o3.c
@@ -12,7 +12,7 @@
#include "dl-o5.h"
#include <inttypes.h>
-#include <rtems/test.h>
+#include <rtems/test-info.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 72dfbc6850..7cbd4aadd6 100644
--- a/testsuites/libtests/dl10/dl10-o4.c
+++ b/testsuites/libtests/dl10/dl10-o4.c
@@ -10,7 +10,7 @@
#include "dl-o4.h"
#include "dl-o5.h"
-#include <rtems/test.h>
+#include <rtems/test-info.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 be496392c9..832c029ec8 100644
--- a/testsuites/libtests/dl10/dl10-o5.c
+++ b/testsuites/libtests/dl10/dl10-o5.c
@@ -10,7 +10,7 @@
#include "dl-o5.h"
#include <inttypes.h>
-#include <rtems/test.h>
+#include <rtems/test-info.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 5e03a30773..ab6deb189d 100644
--- a/testsuites/libtests/dl10/dl10-o6.c
+++ b/testsuites/libtests/dl10/dl10-o6.c
@@ -9,7 +9,7 @@
#include "dl-load.h"
#include <inttypes.h>
-#include <rtems/test.h>
+#include <rtems/test-info.h>
int rtems_main_o5 (void)
{
diff --git a/testsuites/libtests/irqs01/init.c b/testsuites/libtests/irqs01/init.c
new file mode 100644
index 0000000000..ab7ca926ca
--- /dev/null
+++ b/testsuites/libtests/irqs01/init.c
@@ -0,0 +1,299 @@
+/* SPDX-License-Identifier: BSD-2-Clause */
+
+/*
+ * Copyright (C) 2020 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.
+ */
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#include <rtems/test.h>
+#include <rtems/test-info.h>
+
+#include <rtems.h>
+#include <rtems/irq-extension.h>
+
+typedef struct {
+ rtems_interrupt_server_control base;
+ int magic;
+} server_control;
+
+static void destroy(rtems_interrupt_server_control *base)
+{
+ server_control *control;
+
+ control = (server_control *) base;
+ T_step_eq_int(2, control->magic, 0x54192a88);
+}
+
+static const rtems_interrupt_server_config valid_config = {
+ .name = rtems_build_name('N', 'A', 'M', 'E'),
+ .priority = 123,
+ .storage_size = RTEMS_MINIMUM_STACK_SIZE,
+ .modes = RTEMS_DEFAULT_MODES,
+ .attributes = RTEMS_DEFAULT_ATTRIBUTES,
+ .destroy = destroy
+};
+
+T_TEST_CASE(InterruptServerCreateDestroy)
+{
+ server_control control;
+ rtems_status_code sc;
+ uint32_t server_index;
+ rtems_task_priority prio;
+
+ T_plan(7);
+
+ memset(&control, 0xff, sizeof(control));
+ control.magic = 0x54192a88;
+ server_index = 0x2833763f;
+
+ sc = rtems_interrupt_server_create(
+ &control.base,
+ &valid_config,
+ &server_index
+ );
+ T_step_rsc_success(0, sc);
+ T_step_ne_u32(1, server_index, 0x2833763f);
+
+ sc = rtems_interrupt_server_delete(server_index);
+ T_step_rsc_success(3, sc);
+
+ /* Make sure the interrupt server terminated */
+ prio = 0;
+ sc = rtems_task_set_priority(RTEMS_SELF, 124, &prio);
+ T_step_rsc_success(4, sc);
+ sc = rtems_task_set_priority(RTEMS_SELF, prio, &prio);
+ T_step_rsc_success(5, sc);
+ T_step_eq_u32(6, prio, 124);
+}
+
+static const rtems_interrupt_server_config invalid_config = {
+ .name = rtems_build_name('N', 'A', 'M', 'E'),
+ .priority = 0,
+ .storage_size = RTEMS_MINIMUM_STACK_SIZE,
+ .modes = RTEMS_DEFAULT_MODES,
+ .attributes = RTEMS_DEFAULT_ATTRIBUTES,
+ .destroy = destroy
+};
+
+T_TEST_CASE(InterruptServerCreateError)
+{
+ rtems_interrupt_server_control control;
+ rtems_interrupt_server_control control_2;
+ rtems_status_code sc;
+ uint32_t server_index;
+
+ memset(&control, 0xff, sizeof(control));
+ memset(&control_2, 0xff, sizeof(control_2));
+ server_index = 0x235e8766;
+
+ sc = rtems_interrupt_server_create(&control, &invalid_config, &server_index);
+ T_rsc(sc, RTEMS_INVALID_PRIORITY);
+ T_eq_mem(&control, &control_2, sizeof(control));
+ T_eq_u32(server_index, 0x235e8766);
+}
+
+static const rtems_interrupt_server_config request_config = {
+ .name = rtems_build_name('N', 'A', 'M', 'E'),
+ .priority = 123,
+ .storage_size = RTEMS_MINIMUM_STACK_SIZE,
+ .modes = RTEMS_DEFAULT_MODES,
+ .attributes = RTEMS_DEFAULT_ATTRIBUTES
+};
+
+static void not_called(void *arg)
+{
+ (void) arg;
+ T_unreachable();
+}
+
+static void request(void *arg)
+{
+ rtems_id *id;
+ rtems_status_code sc;
+
+ id = arg;
+ T_step(4);
+ sc = rtems_event_transient_send(*id);
+ T_step_rsc_success(6, sc);
+}
+
+T_TEST_CASE(InterruptServerRequest)
+{
+ rtems_interrupt_server_control control;
+ rtems_interrupt_server_request req;
+ rtems_status_code sc;
+ uint32_t server_index;
+ rtems_id id;
+ rtems_task_priority prio;
+
+ T_plan(11);
+
+ memset(&control, 0xff, sizeof(control));
+ memset(&req, 0xff, sizeof(req));
+ server_index = 0x99d225bd;
+
+ sc = rtems_interrupt_server_create(
+ &control,
+ &request_config,
+ &server_index
+ );
+ T_step_rsc_success(0, sc);
+ T_step_ne_u32(1, server_index, 0x99d225bd);
+
+ sc = rtems_interrupt_server_request_initialize(
+ server_index,
+ &req,
+ not_called,
+ NULL
+ );
+ T_step_rsc_success(2, sc);
+
+ rtems_interrupt_server_request_submit(&req);
+ rtems_interrupt_server_request_destroy(&req);
+
+ id = rtems_task_self();
+ sc = rtems_interrupt_server_request_initialize(
+ server_index,
+ &req,
+ request,
+ &id
+ );
+ T_step_rsc_success(3, sc);
+
+ rtems_interrupt_server_request_submit(&req);
+ sc = rtems_event_transient_receive(RTEMS_WAIT, RTEMS_NO_TIMEOUT);
+ T_step_rsc_success(5, sc);
+
+ rtems_interrupt_server_request_destroy(&req);
+
+ sc = rtems_interrupt_server_delete(server_index);
+ T_step_rsc_success(7, sc);
+
+ /* Make sure the interrupt server terminated */
+ prio = 0;
+ sc = rtems_task_set_priority(RTEMS_SELF, 124, &prio);
+ T_step_rsc_success(8, sc);
+ sc = rtems_task_set_priority(RTEMS_SELF, prio, &prio);
+ T_step_rsc_success(9, sc);
+ T_step_eq_u32(10, prio, 124);
+}
+
+T_TEST_CASE(InterruptServerInitializeDestroy)
+{
+ rtems_status_code sc;
+ uint32_t server_count;
+ rtems_task_priority prio;
+
+ sc = rtems_interrupt_server_delete(0);
+ T_rsc(sc, RTEMS_INVALID_ID);
+
+ server_count = 456;
+ sc = rtems_interrupt_server_initialize(
+ 123,
+ RTEMS_MINIMUM_STACK_SIZE,
+ RTEMS_DEFAULT_MODES,
+ RTEMS_DEFAULT_ATTRIBUTES,
+ &server_count
+ );
+ T_rsc_success(sc);
+ T_eq_u32(server_count, 1);
+
+ server_count = 456;
+ sc = rtems_interrupt_server_initialize(
+ 123,
+ RTEMS_MINIMUM_STACK_SIZE,
+ RTEMS_DEFAULT_MODES,
+ RTEMS_DEFAULT_ATTRIBUTES,
+ &server_count
+ );
+ T_rsc(sc, RTEMS_INCORRECT_STATE);
+ T_eq_u32(server_count, 0);
+
+ sc = rtems_interrupt_server_delete(0);
+ T_rsc_success(sc);
+
+ /* Make sure the interrupt server terminated */
+ prio = 0;
+ sc = rtems_task_set_priority(RTEMS_SELF, 124, &prio);
+ T_rsc_success(sc);
+ sc = rtems_task_set_priority(RTEMS_SELF, prio, &prio);
+ T_rsc_success(sc);
+ T_eq_u32(prio, 124);
+
+ server_count = 456;
+ sc = rtems_interrupt_server_initialize(
+ 0,
+ RTEMS_MINIMUM_STACK_SIZE,
+ RTEMS_DEFAULT_MODES,
+ RTEMS_DEFAULT_ATTRIBUTES,
+ &server_count
+ );
+ T_rsc(sc, RTEMS_INVALID_PRIORITY);
+ T_eq_u32(server_count, 0);
+
+ server_count = 456;
+ sc = rtems_interrupt_server_initialize(
+ 123,
+ RTEMS_MINIMUM_STACK_SIZE,
+ RTEMS_DEFAULT_MODES,
+ RTEMS_DEFAULT_ATTRIBUTES,
+ &server_count
+ );
+ T_rsc_success(sc);
+ T_eq_u32(server_count, 1);
+
+ sc = rtems_interrupt_server_delete(0);
+ T_rsc_success(sc);
+
+ /* Make sure the interrupt server terminated */
+ prio = 0;
+ sc = rtems_task_set_priority(RTEMS_SELF, 124, &prio);
+ T_rsc_success(sc);
+ sc = rtems_task_set_priority(RTEMS_SELF, prio, &prio);
+ T_rsc_success(sc);
+ T_eq_u32(prio, 124);
+}
+
+const char rtems_test_name[] = "IRQS 1";
+
+static void Init(rtems_task_argument argument)
+{
+ rtems_test_run(argument, TEST_STATE);
+}
+
+#define CONFIGURE_APPLICATION_NEEDS_CLOCK_DRIVER
+#define CONFIGURE_APPLICATION_NEEDS_SIMPLE_CONSOLE_DRIVER
+
+#define CONFIGURE_MAXIMUM_TASKS 2
+
+#define CONFIGURE_RTEMS_INIT_TASKS_TABLE
+
+#define CONFIGURE_INIT_TASK_INITIAL_MODES RTEMS_DEFAULT_MODES
+
+#define CONFIGURE_INIT
+
+#include <rtems/confdefs.h>
diff --git a/testsuites/libtests/irqs01/irqs01.doc b/testsuites/libtests/irqs01/irqs01.doc
new file mode 100644
index 0000000000..29f9ad64ad
--- /dev/null
+++ b/testsuites/libtests/irqs01/irqs01.doc
@@ -0,0 +1,16 @@
+This file describes the directives and concepts tested by this test set.
+
+test set name: irqs01
+
+directives:
+
+ - rtems_interrupt_server_create()
+ - rtems_interrupt_server_delete()
+ - rtems_interrupt_server_initialize()
+ - rtems_interrupt_server_request_destroy()
+ - rtems_interrupt_server_request_initialize()
+ - rtems_interrupt_server_request_submit()
+
+concepts:
+
+ - Ensure that the interrupt server works.
diff --git a/testsuites/libtests/mathl/init.c b/testsuites/libtests/mathl/init.c
index af5eb9b4a5..fb390bb2c2 100644
--- a/testsuites/libtests/mathl/init.c
+++ b/testsuites/libtests/mathl/init.c
@@ -24,7 +24,7 @@
#if __rtems__
#include <bsp.h> /* for device driver prototypes */
-#include <rtems/test.h>
+#include <rtems/test-info.h>
const char rtems_test_name[] = "MATHL";
#endif
diff --git a/testsuites/libtests/tar01/home/abc/def/test_script b/testsuites/libtests/tar01/home/abc/def/test_script
deleted file mode 100755
index 884924820b..0000000000
--- a/testsuites/libtests/tar01/home/abc/def/test_script
+++ /dev/null
@@ -1,2 +0,0 @@
-#! joel
-ls -las /dev
diff --git a/testsuites/libtests/tar01/home/test_file b/testsuites/libtests/tar01/home/test_file
deleted file mode 100644
index 1a9e0f656f..0000000000
--- a/testsuites/libtests/tar01/home/test_file
+++ /dev/null
@@ -1,2 +0,0 @@
-This is a test of loading an RTEMS filesystem from an
-initial tar image.
diff --git a/testsuites/libtests/tar01/symlink b/testsuites/libtests/tar01/symlink
deleted file mode 120000
index 1f10c8dabe..0000000000
--- a/testsuites/libtests/tar01/symlink
+++ /dev/null
@@ -1 +0,0 @@
-home/test_file \ No newline at end of file
diff --git a/testsuites/libtests/ttest01/init.c b/testsuites/libtests/ttest01/init.c
index 7abbd9e364..c0ccee9aa4 100644
--- a/testsuites/libtests/ttest01/init.c
+++ b/testsuites/libtests/ttest01/init.c
@@ -25,7 +25,7 @@
* POSSIBILITY OF SUCH DAMAGE.
*/
-#include <t.h>
+#include <rtems/test.h>
#include <sys/time.h>
#include <string.h>
@@ -182,8 +182,8 @@ run_initialize(void)
T_set_putchar(censor_putchar, ctx, &ctx->putchar, &ctx->putchar_arg);
}
-static const char expected_final[] = "Z:ttest01:C:342:N:1316:F:791:D:0.687999\n"
-"Y:ReportHash:SHA256:d4c293b499e6e557afcf6123cb604e8976cc5b987021f1f8c9f6193fc38a386e\n";
+static const char expected_final[] = "Z:ttest01:C:344:N:1339:F:795:D:0.691999\n"
+"Y:ReportHash:SHA256:23dd328162c564ada3c4de97446801018ade051aaec3308bb9a7ef8f98041d67\n";
static void
run_finalize(void)
diff --git a/testsuites/libtests/ttest01/test-assert.c b/testsuites/libtests/ttest01/test-assert.c
index cd4d41ca74..398539fe8e 100644
--- a/testsuites/libtests/ttest01/test-assert.c
+++ b/testsuites/libtests/ttest01/test-assert.c
@@ -1,4 +1,4 @@
-#include <t.h>
+#include <rtems/test.h>
T_TEST_CASE(assert)
{
diff --git a/testsuites/libtests/ttest01/test-checks.c b/testsuites/libtests/ttest01/test-checks.c
index b1c109ca15..fa5591121e 100644
--- a/testsuites/libtests/ttest01/test-checks.c
+++ b/testsuites/libtests/ttest01/test-checks.c
@@ -1,4 +1,4 @@
-#include <t.h>
+#include <rtems/test.h>
#include <sys/types.h>
@@ -2880,6 +2880,18 @@ T_TEST_CASE(check_lt_sz)
T_assert_lt_sz((size_t)12, (size_t)12);
}
+T_TEST_CASE(check_false_no_fmt)
+{
+ T_false(false);
+ T_false(true);
+ T_quiet_false(false);
+ T_quiet_false(true);
+ T_step_false(2, false);
+ T_step_false(3, true);
+ T_assert_false(false);
+ T_assert_false(true);
+}
+
#include "t-self-test.h"
T_TEST_OUTPUT(step_assert_true,
@@ -5383,6 +5395,17 @@ T_TEST_OUTPUT(check_lt_sz,
"F:5:0:UI1:test-checks.c:2880:12 < 12\n"
"E:check_lt_sz:N:6:F:4:D:0.001000\n");
+T_TEST_OUTPUT(check_false_no_fmt,
+"B:check_false_no_fmt\n"
+"P:0:0:UI1:test-checks.c:2885\n"
+"F:1:0:UI1:test-checks.c:2886\n"
+"F:*:0:UI1:test-checks.c:2888\n"
+"P:2:0:UI1:test-checks.c:2889\n"
+"F:3:0:UI1:test-checks.c:2890\n"
+"P:4:0:UI1:test-checks.c:2891\n"
+"F:5:0:UI1:test-checks.c:2892\n"
+"E:check_false_no_fmt:N:6:F:4:D:0.001000\n");
+
/*
* The license is at the end of the file to be able to use the test code and
* output in examples in the documentation. This is also the reason for the
diff --git a/testsuites/libtests/ttest01/test-destructor.c b/testsuites/libtests/ttest01/test-destructor.c
index 9a0abb8b6e..0a2f650ed2 100644
--- a/testsuites/libtests/ttest01/test-destructor.c
+++ b/testsuites/libtests/ttest01/test-destructor.c
@@ -1,10 +1,10 @@
-#include <t.h>
+#include <rtems/test.h>
static void
destroy(T_destructor *dtor)
{
(void)dtor;
- T_step(0, "destroy");
+ T_step(0);
}
T_TEST_CASE(destructor)
diff --git a/testsuites/libtests/ttest01/test-eno.c b/testsuites/libtests/ttest01/test-eno.c
index f130525498..c334b5e1f7 100644
--- a/testsuites/libtests/ttest01/test-eno.c
+++ b/testsuites/libtests/ttest01/test-eno.c
@@ -1,4 +1,4 @@
-#include <t.h>
+#include <rtems/test.h>
#include <errno.h>
T_TEST_CASE(test_eno)
diff --git a/testsuites/libtests/ttest01/test-example.c b/testsuites/libtests/ttest01/test-example.c
index 211edbbbb8..6fa062f6c8 100644
--- a/testsuites/libtests/ttest01/test-example.c
+++ b/testsuites/libtests/ttest01/test-example.c
@@ -1,4 +1,4 @@
-#include <t.h>
+#include <rtems/test.h>
T_TEST_CASE(example)
{
diff --git a/testsuites/libtests/ttest01/test-fixture.c b/testsuites/libtests/ttest01/test-fixture.c
index 6c3c7ba168..e1f59876ca 100644
--- a/testsuites/libtests/ttest01/test-fixture.c
+++ b/testsuites/libtests/ttest01/test-fixture.c
@@ -1,4 +1,4 @@
-#include <t.h>
+#include <rtems/test.h>
static int initial_value = 3;
@@ -43,16 +43,92 @@ teardown(void *ctx)
T_log(T_QUIET, "teardown end");
}
+static size_t
+scope(void *ctx, char *buf, size_t n)
+{
+
+ return T_str_copy(buf, "/More", n);
+}
+
static const T_fixture fixture = {
.setup = setup,
.stop = stop,
.teardown = teardown,
+ .scope = scope,
.initial_context = &initial_value
};
+static int initial_value_2 = 7;
+
+static int counter_2;
+
+static void
+setup_2(void *ctx)
+{
+ int *c;
+
+ T_log(T_QUIET, "setup 2 begin");
+ T_eq_ptr(ctx, &initial_value_2);
+ T_eq_ptr(ctx, T_fixture_context());
+ c = ctx;
+ counter_2 = *c;
+ T_set_fixture_context(&counter_2);
+ T_eq_ptr(&counter_2, T_fixture_context());
+ T_log(T_QUIET, "setup 2 end");
+}
+
+static void
+stop_2(void *ctx)
+{
+ int *c;
+
+ T_log(T_QUIET, "stop 2 begin");
+ T_eq_ptr(ctx, &counter_2);
+ c = ctx;
+ ++(*c);
+ T_log(T_QUIET, "stop 2 end");
+}
+
+static void
+teardown_2(void *ctx)
+{
+ int *c;
+
+ T_log(T_QUIET, "teardown 2 begin");
+ T_eq_ptr(ctx, &counter_2);
+ c = ctx;
+ T_eq_int(*c, 8);
+ T_log(T_QUIET, "teardown 2 end");
+}
+
+static size_t
+scope_2(void *ctx, char *buf, size_t n)
+{
+
+ return T_str_copy(buf, "/AndMore", n);
+}
+
+static const T_fixture fixture_2 = {
+ .setup = setup_2,
+ .stop = stop_2,
+ .teardown = teardown_2,
+ .scope = scope_2,
+ .initial_context = &initial_value_2
+};
+
+static T_fixture_node node;
+
T_TEST_CASE_FIXTURE(fixture, &fixture)
{
+ void *ctx;
+
T_assert_true(true, "all right");
+ ctx = T_push_fixture(&node, &fixture_2);
+ T_eq_ptr(ctx, &initial_value_2);
+ ++counter_2;
+ T_pop_fixture();
+ ctx = T_push_fixture(&node, &fixture_2);
+ T_eq_ptr(ctx, &initial_value_2);
T_assert_true(false, "test fails and we stop the test case");
T_log(T_QUIET, "not reached");
}
@@ -62,20 +138,43 @@ T_TEST_CASE_FIXTURE(fixture, &fixture)
T_TEST_OUTPUT(fixture,
"B:fixture\n"
"L:setup begin\n"
-"P:0:0:UI1:test-fixture.c:13\n"
-"P:1:0:UI1:test-fixture.c:14\n"
-"P:2:0:UI1:test-fixture.c:18\n"
+"P:0:0:UI1/More:test-fixture.c:13\n"
+"P:1:0:UI1/More:test-fixture.c:14\n"
+"P:2:0:UI1/More:test-fixture.c:18\n"
"L:setup end\n"
-"P:3:0:UI1:test-fixture.c:55\n"
-"F:4:0:UI1:test-fixture.c:56:test fails and we stop the test case\n"
+"P:3:0:UI1/More:test-fixture.c:125\n"
+"L:setup 2 begin\n"
+"P:4.0:0:UI1/More/AndMore:test-fixture.c:71\n"
+"P:4.1:0:UI1/More/AndMore:test-fixture.c:72\n"
+"P:4.2:0:UI1/More/AndMore:test-fixture.c:76\n"
+"L:setup 2 end\n"
+"P:4.3:0:UI1/More/AndMore:test-fixture.c:127\n"
+"L:teardown 2 begin\n"
+"P:4.4:0:UI1/More/AndMore:test-fixture.c:98\n"
+"P:4.5:0:UI1/More/AndMore:test-fixture.c:100\n"
+"L:teardown 2 end\n"
+"L:setup 2 begin\n"
+"P:4.0:0:UI1/More/AndMore:test-fixture.c:71\n"
+"P:4.1:0:UI1/More/AndMore:test-fixture.c:72\n"
+"P:4.2:0:UI1/More/AndMore:test-fixture.c:76\n"
+"L:setup 2 end\n"
+"P:4.3:0:UI1/More/AndMore:test-fixture.c:131\n"
+"F:4.4:0:UI1/More/AndMore:test-fixture.c:132:test fails and we stop the test case\n"
+"L:stop 2 begin\n"
+"P:4.5:0:UI1/More/AndMore:test-fixture.c:86\n"
+"L:stop 2 end\n"
"L:stop begin\n"
-"P:5:0:UI1:test-fixture.c:28\n"
+"P:4.6:0:UI1/More/AndMore:test-fixture.c:28\n"
"L:stop end\n"
+"L:teardown 2 begin\n"
+"P:4.7:0:UI1/More/AndMore:test-fixture.c:98\n"
+"P:4.8:0:UI1/More/AndMore:test-fixture.c:100\n"
+"L:teardown 2 end\n"
"L:teardown begin\n"
-"P:6:0:UI1:test-fixture.c:40\n"
-"P:7:0:UI1:test-fixture.c:42\n"
+"P:4:0:UI1/More:test-fixture.c:40\n"
+"P:5:0:UI1/More:test-fixture.c:42\n"
"L:teardown end\n"
-"E:fixture:N:8:F:1:D:0.001000\n");
+"E:fixture:N:21:F:1:D:0.001000\n");
/*
* The license is at the end of the file to be able to use the test code and
@@ -86,7 +185,7 @@ T_TEST_OUTPUT(fixture,
/*
* SPDX-License-Identifier: BSD-2-Clause OR CC-BY-SA-4.0
*
- * Copyright (C) 2018, 2019 embedded brains GmbH
+ * Copyright (C) 2018, 2020 embedded brains GmbH
*
* 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 6fd0031133..923ad1989c 100644
--- a/testsuites/libtests/ttest01/test-leak.c
+++ b/testsuites/libtests/ttest01/test-leak.c
@@ -1,4 +1,4 @@
-#include <t.h>
+#include <rtems/test.h>
#include <stdlib.h>
diff --git a/testsuites/libtests/ttest01/test-log.c b/testsuites/libtests/ttest01/test-log.c
index f6734d4829..bf1b822c0e 100644
--- a/testsuites/libtests/ttest01/test-log.c
+++ b/testsuites/libtests/ttest01/test-log.c
@@ -1,4 +1,4 @@
-#include <t.h>
+#include <rtems/test.h>
T_TEST_CASE(log)
{
diff --git a/testsuites/libtests/ttest01/test-malloc.c b/testsuites/libtests/ttest01/test-malloc.c
index 4dcf1f35d5..14066ddf7b 100644
--- a/testsuites/libtests/ttest01/test-malloc.c
+++ b/testsuites/libtests/ttest01/test-malloc.c
@@ -1,4 +1,4 @@
-#include <t.h>
+#include <rtems/test.h>
T_TEST_CASE(malloc_free)
{
diff --git a/testsuites/libtests/ttest01/test-plan.c b/testsuites/libtests/ttest01/test-plan.c
index 0cbb196801..d7632b8590 100644
--- a/testsuites/libtests/ttest01/test-plan.c
+++ b/testsuites/libtests/ttest01/test-plan.c
@@ -1,4 +1,4 @@
-#include <t.h>
+#include <rtems/test.h>
T_TEST_CASE(wrong_step)
{
@@ -28,10 +28,23 @@ T_TEST_CASE(double_plan)
T_TEST_CASE(steps)
{
- T_step(0, "a");
+ T_step(0);
T_plan(3);
- T_step(1, "b");
- T_step(2, "c");
+ T_step(1);
+ T_step(2);
+}
+
+static T_fixture_node nested_plan_node;
+
+T_TEST_CASE(nested_plan)
+{
+ T_plan(2);
+ T_step(0);
+ T_push_plan(&nested_plan_node, 2);
+ T_step(0);
+ T_step(1);
+ T_pop_plan();
+ T_step(1);
}
#include "t-self-test.h"
@@ -65,6 +78,14 @@ T_TEST_OUTPUT(steps,
"P:2:0:UI1:test-plan.c:34\n"
"E:steps:N:3:F:0:D:0.001000\n");
+T_TEST_OUTPUT(nested_plan,
+"B:nested_plan\n"
+"P:0:0:UI1:test-plan.c:42\n"
+"P:1.0:0:UI1:test-plan.c:44\n"
+"P:1.1:0:UI1:test-plan.c:45\n"
+"P:1:0:UI1:test-plan.c:47\n"
+"E:nested_plan:N:4:F:0:D:0.001000\n");
+
/*
* The license is at the end of the file to be able to use the test code and
* output in examples in the documentation. This is also the reason for the
diff --git a/testsuites/libtests/ttest01/test-psx.c b/testsuites/libtests/ttest01/test-psx.c
index c080a15111..b43fd96846 100644
--- a/testsuites/libtests/ttest01/test-psx.c
+++ b/testsuites/libtests/ttest01/test-psx.c
@@ -1,4 +1,4 @@
-#include <t.h>
+#include <rtems/test.h>
#include <sys/stat.h>
#include <errno.h>
diff --git a/testsuites/libtests/ttest01/test-rtems.c b/testsuites/libtests/ttest01/test-rtems.c
index 1f9f37dfdf..1f94b7318c 100644
--- a/testsuites/libtests/ttest01/test-rtems.c
+++ b/testsuites/libtests/ttest01/test-rtems.c
@@ -1,4 +1,4 @@
-#include <t.h>
+#include <rtems/test.h>
#include <rtems.h>
diff --git a/testsuites/libtests/ttest01/test-simple.c b/testsuites/libtests/ttest01/test-simple.c
index 87954b4e22..f98e3a1dfa 100644
--- a/testsuites/libtests/ttest01/test-simple.c
+++ b/testsuites/libtests/ttest01/test-simple.c
@@ -1,4 +1,4 @@
-#include <t.h>
+#include <rtems/test.h>
static int add(int a, int b)
{
diff --git a/testsuites/libtests/ttest01/test-step.c b/testsuites/libtests/ttest01/test-step.c
index 3364ff5716..6d5ee9f7ab 100644
--- a/testsuites/libtests/ttest01/test-step.c
+++ b/testsuites/libtests/ttest01/test-step.c
@@ -1,4 +1,4 @@
-#include <t.h>
+#include <rtems/test.h>
T_TEST_CASE(step)
{
diff --git a/testsuites/libtests/ttest01/test-task-context.c b/testsuites/libtests/ttest01/test-task-context.c
index 1a82f745b5..56139f9474 100644
--- a/testsuites/libtests/ttest01/test-task-context.c
+++ b/testsuites/libtests/ttest01/test-task-context.c
@@ -1,4 +1,4 @@
-#include <t.h>
+#include <rtems/test.h>
#include <rtems/score/threaddispatch.h>
diff --git a/testsuites/libtests/ttest01/test-time.c b/testsuites/libtests/ttest01/test-time.c
index 20148d7ea1..a324290e56 100644
--- a/testsuites/libtests/ttest01/test-time.c
+++ b/testsuites/libtests/ttest01/test-time.c
@@ -1,4 +1,4 @@
-#include <t.h>
+#include <rtems/test.h>
T_TEST_CASE(time_to_string)
{
diff --git a/testsuites/libtests/ttest01/test-verbosity.c b/testsuites/libtests/ttest01/test-verbosity.c
index 0cf422a0c3..486969c85c 100644
--- a/testsuites/libtests/ttest01/test-verbosity.c
+++ b/testsuites/libtests/ttest01/test-verbosity.c
@@ -1,4 +1,4 @@
-#include <t.h>
+#include <rtems/test.h>
T_TEST_CASE(verbosity_changes)
{
diff --git a/testsuites/libtests/ttest02/init.c b/testsuites/libtests/ttest02/init.c
new file mode 100644
index 0000000000..7f972aec7e
--- /dev/null
+++ b/testsuites/libtests/ttest02/init.c
@@ -0,0 +1,295 @@
+/* SPDX-License-Identifier: BSD-2-Clause */
+
+/*
+ * Copyright (C) 2020 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.
+ */
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#include <rtems/test.h>
+#include <rtems/test-info.h>
+
+#include <string.h>
+
+#include <rtems.h>
+
+static void
+prepare(void *arg)
+{
+ Atomic_Uint *state;
+
+ state = arg;
+ _Atomic_Store_uint(state, 0, ATOMIC_ORDER_RELAXED);
+}
+
+static void
+action(void *arg)
+{
+ Atomic_Uint *state;
+ unsigned int expected;
+ bool success_0;
+ bool success_1;
+
+ state = arg;
+
+ /*
+ * This code models a critical section in the operating system. The
+ * interrupt should happen between the two atomic operations.
+ */
+ expected = 0;
+ success_0 = _Atomic_Compare_exchange_uint(state, &expected, 1,
+ ATOMIC_ORDER_RELAXED, ATOMIC_ORDER_RELAXED);
+ expected = 1;
+ success_1 = _Atomic_Compare_exchange_uint(state, &expected, 2,
+ ATOMIC_ORDER_RELAXED, ATOMIC_ORDER_RELAXED);
+ T_quiet_true(success_0);
+ T_quiet_true(success_1);
+
+ T_interrupt_test_busy_wait_for_interrupt();
+}
+
+static T_interrupt_test_state
+interrupt(void *arg)
+{
+ Atomic_Uint *state;
+ unsigned int expected;
+
+ if (T_interrupt_test_get_state() != T_INTERRUPT_TEST_ACTION) {
+ return T_INTERRUPT_TEST_CONTINUE;
+ }
+
+ state = arg;
+ expected = 1;
+
+ if (_Atomic_Compare_exchange_uint(state, &expected, expected,
+ ATOMIC_ORDER_RELAXED, ATOMIC_ORDER_RELAXED)) {
+ return T_INTERRUPT_TEST_DONE;
+ } else if (expected == 0) {
+ return T_INTERRUPT_TEST_EARLY;
+ } else {
+ T_quiet_eq_uint(expected, 2);
+ return T_INTERRUPT_TEST_LATE;
+ }
+}
+
+static const T_interrupt_test_config done_config = {
+ .prepare = prepare,
+ .action = action,
+ .interrupt = interrupt,
+ .max_iteration_count = 10000
+};
+
+T_TEST_CASE(TestInterruptDone)
+{
+ int i;
+
+ for (i = 0; i < 10; ++i) {
+ Atomic_Uint action_state;
+ T_interrupt_test_state state;
+
+ state = T_interrupt_test(&done_config, &action_state);
+ T_eq_int(state, T_INTERRUPT_TEST_DONE);
+ }
+}
+
+static const T_interrupt_test_config timeout_config = {
+ .interrupt = interrupt,
+ .action = action
+};
+
+T_TEST_CASE(TestInterruptTimeout)
+{
+ Atomic_Uint action_state;
+ T_interrupt_test_state state;
+
+ T_plan(1);
+ state = T_interrupt_test(&timeout_config, &action_state);
+ T_step_eq_int(0, state, T_INTERRUPT_TEST_TIMEOUT);
+}
+
+static void
+fatal(void *arg)
+{
+ (void)arg;
+ T_plan(1);
+ T_step(0);
+ T_stop();
+}
+
+static const T_interrupt_test_config fatal_config = {
+ .prepare = fatal,
+ .action = action,
+ .interrupt = interrupt,
+ .max_iteration_count = 10000
+};
+
+T_TEST_CASE(TestInterruptFatal)
+{
+ Atomic_Uint action_state;
+
+ T_interrupt_test(&fatal_config, &action_state);
+ T_unreachable();
+}
+
+static void
+suspend(void *arg)
+{
+ rtems_status_code sc;
+ rtems_id *id;
+
+ id = arg;
+ T_plan(2);
+ sc = rtems_task_suspend(*id);
+ T_step_rsc_success(1, sc);
+}
+
+static T_interrupt_test_state
+do_nothing(void *arg)
+{
+ (void)arg;
+ return T_INTERRUPT_TEST_ACTION;
+}
+
+static void
+resume(void *arg)
+{
+ T_interrupt_test_state state;
+
+ state = T_interrupt_test_change_state(T_INTERRUPT_TEST_ACTION,
+ T_INTERRUPT_TEST_DONE);
+
+ if (state == T_INTERRUPT_TEST_ACTION) {
+ rtems_status_code sc;
+ rtems_id *id;
+
+ id = arg;
+ sc = rtems_task_resume(*id);
+ T_step_rsc_success(0, sc);
+ }
+}
+
+static const T_interrupt_test_config blocked_config = {
+ .action = suspend,
+ .interrupt = do_nothing,
+ .blocked = resume,
+ .max_iteration_count = 10000
+};
+
+T_TEST_CASE(TestInterruptBlocked)
+{
+ T_interrupt_test_state state;
+ rtems_id id;
+
+ T_plan(1);
+ id = rtems_task_self();
+ state = T_interrupt_test(&blocked_config, &id);
+ T_step_eq_int(0, state, T_INTERRUPT_TEST_DONE);
+}
+
+T_TEST_CASE(TestThreadSwitch)
+{
+ T_thread_switch_log_2 log_2;
+ T_thread_switch_log_4 log_4;
+ T_thread_switch_log_10 log_10;
+ T_thread_switch_log *log;
+ uint32_t executing;
+ uint32_t heir;
+ size_t i;
+
+ memset(&log_2, 0xff, sizeof(log_2));
+ log = T_thread_switch_record_2(&log_2);
+ T_null(log);
+ T_eq_sz(log_2.log.recorded, 0);
+ T_eq_sz(log_2.log.capacity, 2);
+ T_eq_u64(log_2.log.switches, 0);
+
+ memset(&log_4, 0xff, sizeof(log_4));
+ log = T_thread_switch_record_4(&log_4);
+ T_eq_ptr(log, &log_2.log);
+ T_eq_sz(log_4.log.recorded, 0);
+ T_eq_sz(log_4.log.capacity, 4);
+ T_eq_u64(log_4.log.switches, 0);
+
+ memset(&log_10, 0xff, sizeof(log_10));
+ log = T_thread_switch_record_10(&log_10);
+ T_eq_ptr(log, &log_4.log);
+ T_eq_sz(log_10.log.recorded, 0);
+ T_eq_sz(log_10.log.capacity, 10);
+ T_eq_u64(log_10.log.switches, 0);
+
+ for (i = 0; i < 6; ++i) {
+ rtems_status_code sc;
+
+ sc = rtems_task_wake_after(2);
+ T_rsc_success(sc);
+ }
+
+ log = T_thread_switch_record(NULL);
+ T_eq_ptr(log, &log_10.log);
+ T_eq_sz(log->recorded, 10);
+ T_eq_sz(log->capacity, 10);
+ T_eq_u64(log->switches, 12);
+ executing = rtems_task_self();
+ T_eq_u32(log->events[0].executing, executing);
+ T_ne_u32(log->events[0].heir, 0);
+ heir = log->events[0].heir;
+ T_eq_u32(log->events[0].cpu, 0);
+ T_ne_u64(log->events[0].instant, 0);
+
+ for (i = 1; i < 10; ++i) {
+ uint32_t tmp;
+
+ tmp = executing;
+ executing = heir;
+ heir = tmp;
+
+ T_eq_u32(log->events[i].executing, executing);
+ T_eq_u32(log->events[i].heir, heir);
+ T_eq_u32(log->events[i].cpu, 0);
+ T_gt_u64(log->events[i].instant, log->events[i - 1].instant);
+ }
+}
+
+const char rtems_test_name[] = "TTEST 2";
+
+static void
+Init(rtems_task_argument argument)
+{
+ rtems_test_run(argument, TEST_STATE);
+}
+
+#define CONFIGURE_APPLICATION_NEEDS_CLOCK_DRIVER
+#define CONFIGURE_APPLICATION_NEEDS_SIMPLE_CONSOLE_DRIVER
+
+#define CONFIGURE_MICROSECONDS_PER_TICK 1000
+
+#define CONFIGURE_MAXIMUM_TASKS 1
+
+#define CONFIGURE_RTEMS_INIT_TASKS_TABLE
+
+#define CONFIGURE_INIT
+
+#include <rtems/confdefs.h>
diff --git a/testsuites/libtests/ttest02/ttest02.doc b/testsuites/libtests/ttest02/ttest02.doc
new file mode 100644
index 0000000000..193f288d71
--- /dev/null
+++ b/testsuites/libtests/ttest02/ttest02.doc
@@ -0,0 +1,11 @@
+This file describes the directives and concepts tested by this test set.
+
+test set name: ttest02
+
+directives:
+
+ - T_interrupt_test()
+
+concepts:
+
+ - Ensure that the interrupt test works.
diff --git a/testsuites/libtests/ttest02/ttest02.scn b/testsuites/libtests/ttest02/ttest02.scn
new file mode 100644
index 0000000000..7ff2fac704
--- /dev/null
+++ b/testsuites/libtests/ttest02/ttest02.scn
@@ -0,0 +1,37 @@
+*** BEGIN OF TEST TTEST 2 ***
+*** TEST VERSION: 6.0.0.133fcd71c16b87b5c3924c04039a125be9affcfa
+*** TEST STATE: EXPECTED_PASS
+*** TEST BUILD: RTEMS_SMP
+*** TEST TOOLS: 10.0.1 20200406 (RTEMS 6, RSB b69f54d51740810dc54a50662f5da4d4ba0ddd18, Newlib ece49e4)
+A:TTEST 2
+S:Platform:RTEMS
+S:Compiler:10.0.1 20200406 (RTEMS 6, RSB b69f54d51740810dc54a50662f5da4d4ba0ddd18, Newlib ece49e4)
+S:Version:6.0.0.133fcd71c16b87b5c3924c04039a125be9affcfa
+S:BSP:leon3
+S:RTEMS_DEBUG:0
+S:RTEMS_MULTIPROCESSING:0
+S:RTEMS_POSIX_API:0
+S:RTEMS_PROFILING:0
+S:RTEMS_SMP:1
+B:TestInterruptTimeout
+P:0:0:UI1:init.c:130
+E:TestInterruptTimeout:N:1:F:0:D:0.042180
+B:TestInterruptFatal
+P:0:0:UI1:init.c:137
+E:TestInterruptFatal:N:1:F:0:D:0.000360
+B:TestInterruptDone
+P:0:0:UI1:init.c:114
+P:1:0:UI1:init.c:114
+P:2:0:UI1:init.c:114
+P:3:0:UI1:init.c:114
+P:4:0:UI1:init.c:114
+P:5:0:UI1:init.c:114
+P:6:0:UI1:init.c:114
+P:7:0:UI1:init.c:114
+P:8:0:UI1:init.c:114
+P:9:0:UI1:init.c:114
+E:TestInterruptDone:N:10:F:0:D:1.233900
+Z:TTEST 2:C:3:N:12:F:0:D:1.277400
+Y:ReportHash:SHA256:308c997b3220d239738a11dac4133d9f987a34b3f5f9baf1158d1a54f85cc647
+
+*** END OF TEST TTEST 2 ***
diff --git a/testsuites/mptests/mp03/delay.c b/testsuites/mptests/mp03/delay.c
index 0e911171a8..ee0278b227 100644
--- a/testsuites/mptests/mp03/delay.c
+++ b/testsuites/mptests/mp03/delay.c
@@ -20,6 +20,8 @@
#include "system.h"
+#include <rtems/bspIo.h>
+
rtems_timer_service_routine Delayed_send_event(
rtems_id ignored_id,
void *ignored_address
diff --git a/testsuites/psxtests/Makefile.am b/testsuites/psxtests/Makefile.am
index 1f9e4233ec..d89bcd8801 100755
--- a/testsuites/psxtests/Makefile.am
+++ b/testsuites/psxtests/Makefile.am
@@ -525,8 +525,7 @@ if TEST_psxintrcritical01
psx_tests += psxintrcritical01
psx_screens += psxintrcritical01/psxintrcritical01.scn
psx_docs += psxintrcritical01/psxintrcritical01.doc
-psxintrcritical01_SOURCES = psxintrcritical01/init.c \
- ../sptests/spintrcritical_support/intrcritical.c
+psxintrcritical01_SOURCES = psxintrcritical01/init.c
psxintrcritical01_CPPFLAGS = $(AM_CPPFLAGS) \
$(TEST_FLAGS_psxintrcritical01) $(support_includes) \
-I$(top_srcdir)/../sptests/spintrcritical_support
diff --git a/testsuites/psxtests/psxbarrier01/main.c b/testsuites/psxtests/psxbarrier01/main.c
index 93aa9f788b..45d56d025b 100644
--- a/testsuites/psxtests/psxbarrier01/main.c
+++ b/testsuites/psxtests/psxbarrier01/main.c
@@ -12,7 +12,7 @@
#include "config.h"
#endif
-#include <rtems/test.h>
+#include <rtems/test-info.h>
#include <bsp.h>
#include <pmacros.h>
diff --git a/testsuites/psxtests/psxconfig01/init.c b/testsuites/psxtests/psxconfig01/init.c
index 038bbec43c..d2811b409a 100644
--- a/testsuites/psxtests/psxconfig01/init.c
+++ b/testsuites/psxtests/psxconfig01/init.c
@@ -27,7 +27,7 @@
#include "config.h"
#endif
-#include <rtems/test.h>
+#include <rtems/test-info.h>
#include <tmacros.h>
#include <sys/stat.h>
diff --git a/testsuites/psxtests/psxfenv01/init.c b/testsuites/psxtests/psxfenv01/init.c
index cdb0fa596e..15d383f211 100644
--- a/testsuites/psxtests/psxfenv01/init.c
+++ b/testsuites/psxtests/psxfenv01/init.c
@@ -6,6 +6,7 @@
/*
* SPDX-License-Identifier: BSD-2-Clause
*
+ * Copyright (C) 2020 Eshan Dhawan
* Copyright (C) 2019 Vaibhav Gupta
*
* Redistribution and use in source and binary forms, with or without
@@ -44,13 +45,14 @@
#include <stdint.h>
#include <stdio.h>
#include <string.h>
-#include <rtems/test.h>
+#include <rtems/test-info.h>
#include <tmacros.h>
+#include <float.h>
const char rtems_test_name[] = "PSXFENV 01";
/* forward declarations to avoid warnings */
-rtems_task Init(rtems_task_argument ignored);
+rtems_task Init( rtems_task_argument ignored );
/* Test Function Begins */
rtems_task Init(rtems_task_argument ignored)
@@ -62,42 +64,92 @@ rtems_task Init(rtems_task_argument ignored)
/*
* 'FE_ALL_EXCEPT' will be defined only when 'feclearexcept()',
- * 'fegetexceptflag()', 'feraiseexcept()', 'fesetexceptflag()' and
- * 'fetestexcept()' functions are supported by the architecture.
+ * fegetexceptflag() , feraiseexcept(), fesetexceptflag() and
+ * fetestexcept() functions are supported by the architecture.
* Hence their testcases can be wrapped under #ifdef and #endif.
*/
#ifdef FE_ALL_EXCEPT /* floating-point exceptions */
- puts( "fesetenv(FE_DFL_ENV)." );
- r = fesetenv(FE_DFL_ENV);
- if (r)
- printf("fesetenv ==> %d\n", r);
+ r = fesetenv( FE_DFL_ENV );
+ if ( r ) {
+ printf( "fesetenv ==> %d\n", r);
+ }
rtems_test_assert( r == 0 );
- /* Test 'feclearexcept()' and 'fetestexcept()' in one go. */
- puts( "feclearexcept(FE_ALL_EXCEPT)." );
- r = feclearexcept(FE_ALL_EXCEPT);
- if (r)
- printf("feclearexcept ==> 0x%x\n", r);
+ /* Test feclearexcept() and fetestexcept() in one go. */
+ r = feclearexcept( FE_ALL_EXCEPT );
+ if ( r ) {
+ printf( "feclearexcept ==> 0x%x\n", r );
+ }
rtems_test_assert( r == 0 );
r = fetestexcept( FE_ALL_EXCEPT );
- if (r)
- printf("fetestexcept ==> 0x%x\n", r);
+ if ( r ) {
+ printf( "fetestexcept ==> 0x%x\n", r );
+ }
rtems_test_assert( r == 0 );
- /* Test 'FE_DIVBYZERO' */
- puts( "Divide by zero and confirm fetestexcept()" );
+ /* Test 'FE_DIVBYZERO'
+ * Divide by zero and confirm fetestexcept() */
a = 0.0;
b = 1.0;
c = b/a;
(void) c;
+ /* Test fegetexceptflag() and fesetexceptflag() */
+ r = fegetexceptflag( &excepts, FE_ALL_EXCEPT );
+ if ( r ) {
+ printf( "fegetexceptflag ==> 0x%x\n", r );
+ }
+ rtems_test_assert( r == 0 );
+
+ r = fesetexceptflag( &excepts, FE_ALL_EXCEPT );
+ if ( r ) {
+ printf( "fesetexceptflag ==> 0x%x\n", r );
+ }
+ rtems_test_assert( r == 0 );
- fegetexceptflag(&excepts,FE_ALL_EXCEPT);
+ /* Test for fegetround() and fesetround()
+ * They have four main macros to be tested separated by ifdef
+ * Since not all architectures support them
+ * The test case gets and sets the rounding directions */
+ #ifdef FE_TONEAREST /* Rounding direction TONEAREST */
+ rtems_test_assert( fegetround() == FE_TONEAREST );
+ #endif /*rounding direction TONEAREST */
+ #ifdef FE_TOWARDZERO /* rounding direction TOWARDZERO */
+ r = fesetround( FE_TOWARDZERO );
+ if ( r ) {
+ printf( "fesetround ==> 0x%x\n", r );
+ }
+ rtems_test_assert( r == 0 );
+ rtems_test_assert( fegetround() == FE_TOWARDZERO );
+ #endif/*rounding direction TOWARDZERO */
+ #ifdef FE_DOWNWARD /* rounding direction DOWNWARD */
+ r = fesetround( FE_DOWNWARD );
+ if ( r ) {
+ printf( "fesetround ==> 0x%x\n", r );
+ }
+ rtems_test_assert( r == 0 );
+ rtems_test_assert( fegetround() == FE_DOWNWARD );
+ #endif /* rounding direction DOWNWARD */
+ #ifdef FE_UPWARD /* rounding direction UPWARD */
+ r = fesetround( FE_UPWARD );
+ if ( r ) {
+ printf( "fesetround ==> 0x%x\n", r );
+ }
+ rtems_test_assert( r == 0 );
+ rtems_test_assert( fegetround() == FE_UPWARD );
+ #endif /* rounding direction upward */
+ #ifdef FE_TONEAREST /* rounding direction TONEAREST */
+ r = fesetround( FE_TONEAREST );
+ if ( r ) {
+ printf( "fesetround ==> 0x%x\n", r );
+ }
+ rtems_test_assert( r == 0 );
+ #endif /* rounding direction TONEAREST */
-#ifdef FE_DIVBYZERO
- r = feraiseexcept(FE_DIVBYZERO);
+ #ifdef FE_DIVBYZERO /* divide by zero exeption */
+ r = feraiseexcept( FE_DIVBYZERO ) ;
rtems_test_assert( fetestexcept( FE_DIVBYZERO ) );
-#endif
+ #endif /* divide by zero exeption */
/* Test 'FE_INEXACT' */
a = 10.0;
diff --git a/testsuites/psxtests/psxfenv01/psxfenv01.doc b/testsuites/psxtests/psxfenv01/psxfenv01.doc
index 3aa7757496..32b0e0d9d3 100644
--- a/testsuites/psxtests/psxfenv01/psxfenv01.doc
+++ b/testsuites/psxtests/psxfenv01/psxfenv01.doc
@@ -1,4 +1,4 @@
-# COPYRIGHT (c) 2019
+# COPYRIGHT (c) 2019
# On-Line Applications Research Corporation (OAR).
#
# SPDX-License-Identifier: BSD-2-Clause
@@ -12,8 +12,11 @@ Directives:
fesetenv
feclearexcept
fetestexcept
- texceptflag
feraiseexcept
+ fesetexeptflag
+ fegetexeptflag
+ fegetround
+ fesetround
Concepts:
diff --git a/testsuites/psxtests/psxfenv01/psxfenv01.scn b/testsuites/psxtests/psxfenv01/psxfenv01.scn
index 21395e6712..6ea3bc255e 100644
--- a/testsuites/psxtests/psxfenv01/psxfenv01.scn
+++ b/testsuites/psxtests/psxfenv01/psxfenv01.scn
@@ -1,7 +1,3 @@
*** BEGIN OF TEST PSXFENV 01 ***
-fesetenv(FE_DFL_ENV).
-feclearexcept(FE_ALL_EXCEPT).
-Divide by zero and confirm fetestexcept()
-
*** END OF TEST PSXFENV 01 ***
diff --git a/testsuites/psxtests/psxhdrs/string/stpncpy.c b/testsuites/psxtests/psxhdrs/string/stpncpy.c
index f81752de76..f7433a136f 100644
--- a/testsuites/psxtests/psxhdrs/string/stpncpy.c
+++ b/testsuites/psxtests/psxhdrs/string/stpncpy.c
@@ -40,12 +40,11 @@
int test( void )
{
- char *dest = "Hello world";
- char *src = "Dude";
- size_t num = 2;
+ char src[] = "Dude";
+ char dest[ sizeof( src ) ];
char *result;
- result = stpncpy( dest, src, num );
+ result = stpncpy( dest, src, sizeof( dest ) );
return ( result != NULL );
}
diff --git a/testsuites/psxtests/psxhdrs/string/strncat.c b/testsuites/psxtests/psxhdrs/string/strncat.c
index 730a56cfa6..d872be3408 100644
--- a/testsuites/psxtests/psxhdrs/string/strncat.c
+++ b/testsuites/psxtests/psxhdrs/string/strncat.c
@@ -45,7 +45,7 @@
char buffer[SIZE] = "computer";
char *result;
- result = strncat( buffer, " program", 3 );
+ result = strncat( buffer, " program", sizeof( buffer ) - 1 );
return ( result != NULL );
}
diff --git a/testsuites/psxtests/psxhdrs/string/strncpy.c b/testsuites/psxtests/psxhdrs/string/strncpy.c
index 50b64b3d57..e80d6f6e64 100644
--- a/testsuites/psxtests/psxhdrs/string/strncpy.c
+++ b/testsuites/psxtests/psxhdrs/string/strncpy.c
@@ -35,16 +35,15 @@
#endif
#include <string.h>
-
int test( void );
int test( void )
{
- char *dest = "Hello";
- char *src = "World";
+ char src[] = "World";
+ char dest[ sizeof( src ) ];
char *result;
- result = strncpy( dest, src, 3 );
+ result = strncpy( dest, src, sizeof( dest ) );
return ( result != NULL );
}
diff --git a/testsuites/psxtests/psxintrcritical01/init.c b/testsuites/psxtests/psxintrcritical01/init.c
index 9830c41b71..ea60b38c5b 100644
--- a/testsuites/psxtests/psxintrcritical01/init.c
+++ b/testsuites/psxtests/psxintrcritical01/init.c
@@ -1,4 +1,6 @@
/*
+ * Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+ *
* COPYRIGHT (c) 1989-2012.
* On-Line Applications Research Corporation (OAR).
*
@@ -11,73 +13,117 @@
#include "config.h"
#endif
-#include <tmacros.h>
-#include <intrcritical.h>
+#include <string.h>
#include <time.h>
+#include <rtems/test.h>
+#include <rtems/test-info.h>
+
const char rtems_test_name[] = "PSXINTRCRITICAL 1";
-/* forward declarations to avoid warnings */
-rtems_task Init(rtems_task_argument ignored);
+typedef struct {
+ timer_t timer;
+ struct itimerspec spec;
+ volatile bool early;
+ volatile bool late;
+ long early_count;
+ long late_count;
+ long potential_hits;
+} test_context;
-#define TEST_NAME "01"
-#define TEST_STRING "POSIX Timer"
+#define POSIX_TIMER_RELATIVE 0
-static timer_t Timer;
-static struct itimerspec TimerParams;
+static void prepare(void *arg)
+{
+ test_context *ctx;
-#define POSIX_TIMER_RELATIVE 0
+ ctx = arg;
+ ctx->early = false;
+ ctx->late = false;
+}
-static bool test_body( void *arg )
+static void action(void *arg)
{
+ test_context *ctx;
int rv;
- (void) arg;
-
- rv = timer_settime(Timer, POSIX_TIMER_RELATIVE, &TimerParams, NULL);
- rtems_test_assert( rv == 0 );
+ ctx = arg;
+ ctx->early = true;
+ rv = timer_settime(ctx->timer, POSIX_TIMER_RELATIVE, &ctx->spec, NULL);
+ ctx->late = true;
+ T_quiet_psx_success(rv);
- return false;
+ T_interrupt_test_busy_wait_for_interrupt();
}
-static rtems_timer_service_routine test_release_from_isr(
- rtems_id timer,
- void *arg
-)
+static T_interrupt_test_state interrupt(void *arg)
{
- test_body( NULL );
+ test_context *ctx;
+ int rv;
+
+ if (T_interrupt_test_get_state() != T_INTERRUPT_TEST_ACTION) {
+ return T_INTERRUPT_TEST_EARLY;
+ }
+
+ ctx = arg;
+ rv = timer_settime(ctx->timer, POSIX_TIMER_RELATIVE, &ctx->spec, NULL);
+ T_quiet_psx_success(rv);
+
+ if (ctx->late) {
+ ++ctx->late_count;
+ return T_INTERRUPT_TEST_LATE;
+ } else if (ctx->early) {
+ ++ctx->early_count;
+ return T_INTERRUPT_TEST_EARLY;
+ } else {
+ ++ctx->potential_hits;
+
+ if (ctx->potential_hits > 13) {
+ return T_INTERRUPT_TEST_DONE;
+ } else {
+ return T_INTERRUPT_TEST_CONTINUE;
+ }
+ }
}
-rtems_task Init(
- rtems_task_argument ignored
-)
+static const T_interrupt_test_config config = {
+ .prepare = prepare,
+ .action = action,
+ .interrupt = interrupt,
+ .max_iteration_count = 10000
+};
+
+T_TEST_CASE(PSXSetTimerInterrupt)
{
+ test_context ctx;
int sc;
+ T_interrupt_test_state state;
- TEST_BEGIN();
-
- puts( "Init - Trying to generate timer fire from ISR while firing" );
- puts( "Init - Variation is: " TEST_STRING );
-
- puts( "Init - There is no way for the test to know if it hits the case" );
+ memset(&ctx, 0, sizeof(ctx));
/* create POSIX Timer */
- sc = timer_create (CLOCK_REALTIME, NULL, &Timer);
- if ( sc == -1 ) {
- perror ("Error in timer creation\n");
- rtems_test_exit(0);
- }
+ sc = timer_create (CLOCK_REALTIME, NULL, &ctx.timer);
+ T_psx_success(sc);
/* we don't care if it ever fires */
- TimerParams.it_interval.tv_sec = 10;
- TimerParams.it_interval.tv_nsec = 0;
- TimerParams.it_value.tv_sec = 10;
- TimerParams.it_value.tv_nsec = 0;
+ ctx.spec.it_interval.tv_sec = 10;
+ ctx.spec.it_value.tv_sec = 10;
+
+ state = T_interrupt_test(&config, &ctx);
+ T_eq_int(state, T_INTERRUPT_TEST_DONE);
- interrupt_critical_section_test( test_body, NULL, test_release_from_isr );
+ T_log(T_NORMAL, "early count = %ld", ctx.early_count);
+ T_log(T_NORMAL, "late count = %ld", ctx.late_count);
+ T_log(T_NORMAL, "potential hits = %ld", ctx.potential_hits);
+ T_gt_int(ctx.potential_hits, 0);
- TEST_END();
- rtems_test_exit(0);
+ sc = timer_delete(ctx.timer);
+ T_psx_success(sc);
+}
+
+static rtems_task Init(rtems_task_argument arg)
+{
+ rtems_test_run(arg, TEST_STATE);
}
/* configuration information */
@@ -86,9 +132,7 @@ rtems_task Init(
#define CONFIGURE_APPLICATION_NEEDS_CLOCK_DRIVER
#define CONFIGURE_MAXIMUM_TASKS 1
-#define CONFIGURE_MAXIMUM_TIMERS 1
#define CONFIGURE_MAXIMUM_POSIX_TIMERS 1
-#define CONFIGURE_MAXIMUM_USER_EXTENSIONS 1
#define CONFIGURE_MICROSECONDS_PER_TICK 1000
#define CONFIGURE_INITIAL_EXTENSIONS RTEMS_TEST_INITIAL_EXTENSION
diff --git a/testsuites/psxtests/psxintrcritical01/psxintrcritical01.scn b/testsuites/psxtests/psxintrcritical01/psxintrcritical01.scn
index d9f90364a7..b1fbe46de3 100644
--- a/testsuites/psxtests/psxintrcritical01/psxintrcritical01.scn
+++ b/testsuites/psxtests/psxintrcritical01/psxintrcritical01.scn
@@ -1,5 +1,28 @@
-*** TEST POSIX INTERRUPT CRITICAL SECTION 01 ***
-Init - Trying to generate timer fire from ISR while firing
-Init - Variation is: POSIX Timer
-Init - There is no way for the test to know if it hits the case
-Support - rtems_timer_create - creating timer 1
+*** BEGIN OF TEST PSXINTRCRITICAL 1 ***
+*** TEST VERSION: 6.0.0.2f9fa5f36a632a7acbab8ac3e6fc40ad36115ca0
+*** TEST STATE: EXPECTED_PASS
+*** TEST BUILD: RTEMS_DEBUG RTEMS_POSIX_API RTEMS_SMP
+*** TEST TOOLS: 10.0.1 20200406 (RTEMS 6, RSB bec88a6dd856892c3e66e4598252ea07d7a0d762, Newlib ece49e4)
+A:PSXINTRCRITICAL 1
+S:Platform:RTEMS
+S:Compiler:10.0.1 20200406 (RTEMS 6, RSB bec88a6dd856892c3e66e4598252ea07d7a0d762, Newlib ece49e4)
+S:Version:6.0.0.2f9fa5f36a632a7acbab8ac3e6fc40ad36115ca0
+S:BSP:realview_pbx_a9_qemu
+S:RTEMS_DEBUG:1
+S:RTEMS_MULTIPROCESSING:0
+S:RTEMS_POSIX_API:1
+S:RTEMS_PROFILING:0
+S:RTEMS_SMP:1
+B:PSXSetTimerInterrupt
+P:0:0:UI1:init.c:111
+P:1:0:UI1:init.c:118
+L:early count = 13
+L:late count = 46
+L:potential hits = 14
+P:2:0:UI1:init.c:123
+P:3:0:UI1:init.c:126
+E:PSXSetTimerInterrupt:N:4:F:0:D:0.117464
+Z:PSXINTRCRITICAL 1:C:1:N:4:F:0:D:0.118703
+Y:ReportHash:SHA256:ab4ae616216edb337cbe6b3adb8d62d1a98ff4f7422966689c6967cce78f9d69
+
+*** END OF TEST PSXINTRCRITICAL 1 ***
diff --git a/testsuites/psxtests/psxinttypes01/init.c b/testsuites/psxtests/psxinttypes01/init.c
index 615b9d9ab4..d17ad5bda3 100644
--- a/testsuites/psxtests/psxinttypes01/init.c
+++ b/testsuites/psxtests/psxinttypes01/init.c
@@ -35,7 +35,7 @@
#include "config.h"
#endif
-#include <rtems/test.h>
+#include <rtems/test-info.h>
#include <inttypes.h>
#include <stdio.h>
#include <errno.h>
diff --git a/testsuites/psxtests/psxkey01/system.h b/testsuites/psxtests/psxkey01/system.h
index 02d98b7623..186e1b71f0 100644
--- a/testsuites/psxtests/psxkey01/system.h
+++ b/testsuites/psxtests/psxkey01/system.h
@@ -41,7 +41,7 @@
#endif
TEST_EXTERN pthread_t Init_id;
-TEST_EXTERN pthread_key_t Key_id[CONFIGURE_MAXIMUM_POSIX_KEYS - 1];
+TEST_EXTERN pthread_key_t Key_id[ CONFIGURE_MAXIMUM_POSIX_KEYS ];
TEST_EXTERN uint32_t Data_array[ CONFIGURE_MAXIMUM_TASKS ];
#undef TEST_EXTERN
diff --git a/testsuites/psxtests/psxndbm01/init.c b/testsuites/psxtests/psxndbm01/init.c
index d696abf282..a13afa7315 100644
--- a/testsuites/psxtests/psxndbm01/init.c
+++ b/testsuites/psxtests/psxndbm01/init.c
@@ -45,7 +45,7 @@
#include <stdio.h>
#include <sys/stat.h> /* contains definitions of 'file_mode' */
#include <string.h>
-#include <rtems/test.h>
+#include <rtems/test-info.h>
#include <tmacros.h>
const char rtems_test_name[] = "PSXNDBM 01";
diff --git a/testsuites/psxtests/psxrwlock01/main.c b/testsuites/psxtests/psxrwlock01/main.c
index 2984ce965a..d71218bfff 100644
--- a/testsuites/psxtests/psxrwlock01/main.c
+++ b/testsuites/psxtests/psxrwlock01/main.c
@@ -12,7 +12,7 @@
#include "config.h"
#endif
-#include <rtems/test.h>
+#include <rtems/test-info.h>
#include <bsp.h>
#include <pmacros.h>
diff --git a/testsuites/psxtmtests/psxtmcond08/psxtmcond08impl.h b/testsuites/psxtmtests/psxtmcond08/psxtmcond08impl.h
index 7faffe1246..15664d5d6d 100644
--- a/testsuites/psxtmtests/psxtmcond08/psxtmcond08impl.h
+++ b/testsuites/psxtmtests/psxtmcond08/psxtmcond08impl.h
@@ -40,7 +40,7 @@
#include <pthread.h>
-const char rtems_test_name[] = "PSXTMCOND 08";
+const char rtems_test_name[] = "PSXTMCOND " TEST_NUMBER;
/* forward declarations to avoid warnings */
void *POSIX_Init(void *argument);
diff --git a/testsuites/samples/base_mp/system.h b/testsuites/samples/base_mp/system.h
index 3c434397b5..97c76f5e24 100644
--- a/testsuites/samples/base_mp/system.h
+++ b/testsuites/samples/base_mp/system.h
@@ -12,7 +12,7 @@
*/
#include <rtems.h>
-#include <rtems/test.h>
+#include <rtems/test-info.h>
/* functions */
diff --git a/testsuites/samples/base_sp/system.h b/testsuites/samples/base_sp/system.h
index 174496ecbf..0b49edb465 100644
--- a/testsuites/samples/base_sp/system.h
+++ b/testsuites/samples/base_sp/system.h
@@ -12,7 +12,7 @@
*/
#include <rtems.h>
-#include <rtems/test.h>
+#include <rtems/test-info.h>
/* functions */
diff --git a/testsuites/samples/capture/system.h b/testsuites/samples/capture/system.h
index 99c15ec740..7f915dc830 100644
--- a/testsuites/samples/capture/system.h
+++ b/testsuites/samples/capture/system.h
@@ -12,7 +12,7 @@
*/
#include <rtems.h>
-#include <rtems/test.h>
+#include <rtems/test-info.h>
/* functions */
diff --git a/testsuites/samples/cdtest/main.cc b/testsuites/samples/cdtest/main.cc
index 010bc221f0..894e404ba1 100644
--- a/testsuites/samples/cdtest/main.cc
+++ b/testsuites/samples/cdtest/main.cc
@@ -24,7 +24,7 @@
#include <rtems.h>
#include <rtems/bspIo.h>
-#include <rtems/test.h>
+#include <rtems/test-info.h>
#include <cstdio>
#include <cstdlib>
diff --git a/testsuites/samples/cdtest/system.h b/testsuites/samples/cdtest/system.h
index 6530682a93..7d14747a32 100644
--- a/testsuites/samples/cdtest/system.h
+++ b/testsuites/samples/cdtest/system.h
@@ -12,7 +12,7 @@
*/
#include <rtems.h>
-#include <rtems/test.h>
+#include <rtems/test-info.h>
/* functions */
diff --git a/testsuites/samples/fileio/system.h b/testsuites/samples/fileio/system.h
index 743acf8406..54e2441184 100644
--- a/testsuites/samples/fileio/system.h
+++ b/testsuites/samples/fileio/system.h
@@ -12,7 +12,7 @@
*/
#include <rtems.h>
-#include <rtems/test.h>
+#include <rtems/test-info.h>
#include "tmacros.h"
/* functions */
diff --git a/testsuites/samples/iostream/system.h b/testsuites/samples/iostream/system.h
index fbcc56e063..696cb8df34 100644
--- a/testsuites/samples/iostream/system.h
+++ b/testsuites/samples/iostream/system.h
@@ -12,7 +12,7 @@
*/
#include <rtems.h>
-#include <rtems/test.h>
+#include <rtems/test-info.h>
/* configuration information */
diff --git a/testsuites/samples/nsecs/system.h b/testsuites/samples/nsecs/system.h
index 29627e49db..31c17a4073 100644
--- a/testsuites/samples/nsecs/system.h
+++ b/testsuites/samples/nsecs/system.h
@@ -1,7 +1,7 @@
#ifndef SYSTEM_H
#define SYSTEM_H
-#include <rtems/test.h>
+#include <rtems/test-info.h>
#include <bsp.h> /* for device driver prototypes */
diff --git a/testsuites/samples/paranoia/system.h b/testsuites/samples/paranoia/system.h
index 6726f81873..740c8ec5b9 100644
--- a/testsuites/samples/paranoia/system.h
+++ b/testsuites/samples/paranoia/system.h
@@ -12,7 +12,7 @@
*/
#include <rtems.h>
-#include <rtems/test.h>
+#include <rtems/test-info.h>
/* functions */
diff --git a/testsuites/samples/pppd/system.h b/testsuites/samples/pppd/system.h
index f83212ed5a..c9972fe9b3 100644
--- a/testsuites/samples/pppd/system.h
+++ b/testsuites/samples/pppd/system.h
@@ -2,7 +2,7 @@
#define SYSTEM_H
#include <rtems.h>
-#include <rtems/test.h>
+#include <rtems/test-info.h>
#include <rtems/console.h>
#include <rtems/clockdrv.h>
diff --git a/testsuites/samples/ticker/system.h b/testsuites/samples/ticker/system.h
index 05261341f7..4ac3f59f16 100644
--- a/testsuites/samples/ticker/system.h
+++ b/testsuites/samples/ticker/system.h
@@ -12,7 +12,7 @@
*/
#include <rtems.h>
-#include <rtems/test.h>
+#include <rtems/test-info.h>
#include <inttypes.h>
#include "tmacros.h"
diff --git a/testsuites/smptests/smpatomic01/init.c b/testsuites/smptests/smpatomic01/init.c
index a3b9e1dc45..ba2ec7baba 100644
--- a/testsuites/smptests/smpatomic01/init.c
+++ b/testsuites/smptests/smpatomic01/init.c
@@ -22,7 +22,7 @@
#include <rtems/score/smpbarrier.h>
#include <rtems.h>
#include <rtems/bsd.h>
-#include <rtems/test.h>
+#include <rtems/test-info.h>
#include <limits.h>
#include <string.h>
diff --git a/testsuites/smptests/smpirqs01/init.c b/testsuites/smptests/smpirqs01/init.c
new file mode 100644
index 0000000000..4350647ca5
--- /dev/null
+++ b/testsuites/smptests/smpirqs01/init.c
@@ -0,0 +1,197 @@
+/* SPDX-License-Identifier: BSD-2-Clause */
+
+/*
+ * Copyright (C) 2020 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.
+ */
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#include <rtems/test.h>
+#include <rtems/test-info.h>
+
+#include <rtems.h>
+#include <rtems/irq-extension.h>
+#include <rtems/malloc.h>
+
+static void ensure_server_termination(void)
+{
+ rtems_status_code sc;
+ rtems_task_priority prio;
+ rtems_id id;
+ uint32_t cpu_self;
+ uint32_t cpu_other;
+
+ prio = 0;
+ sc = rtems_task_set_priority(RTEMS_SELF, 124, &prio);
+ T_rsc_success(sc);
+
+ cpu_self = rtems_scheduler_get_processor();
+ cpu_other = (cpu_self + 1) % 2;
+
+ sc = rtems_scheduler_ident_by_processor(cpu_other, &id);
+ T_rsc_success(sc);
+
+ sc = rtems_task_set_scheduler(RTEMS_SELF, id, 124);
+ T_rsc_success(sc);
+
+ sc = rtems_scheduler_ident_by_processor(cpu_self, &id);
+ T_rsc_success(sc);
+
+ sc = rtems_task_set_scheduler(RTEMS_SELF, id, prio);
+ T_rsc_success(sc);
+}
+
+T_TEST_CASE(InterruptServerSMPInitializeDestroy)
+{
+ rtems_status_code sc;
+ uint32_t server_count;
+ void *greedy;
+
+ T_assert_eq_u32(rtems_scheduler_get_processor_maximum(), 2);
+
+ sc = rtems_interrupt_server_delete(0);
+ T_rsc(sc, RTEMS_INVALID_ID);
+
+ server_count = 456;
+ sc = rtems_interrupt_server_initialize(
+ 123,
+ RTEMS_MINIMUM_STACK_SIZE,
+ RTEMS_DEFAULT_MODES,
+ RTEMS_DEFAULT_ATTRIBUTES,
+ &server_count
+ );
+ T_rsc_success(sc);
+ T_eq_u32(server_count, 2);
+
+ server_count = 456;
+ sc = rtems_interrupt_server_initialize(
+ 123,
+ RTEMS_MINIMUM_STACK_SIZE,
+ RTEMS_DEFAULT_MODES,
+ RTEMS_DEFAULT_ATTRIBUTES,
+ &server_count
+ );
+ T_rsc(sc, RTEMS_INCORRECT_STATE);
+ T_eq_u32(server_count, 0);
+
+ sc = rtems_interrupt_server_delete(0);
+ T_rsc_success(sc);
+ ensure_server_termination();
+
+ sc = rtems_interrupt_server_delete(1);
+ T_rsc_success(sc);
+ ensure_server_termination();
+
+ server_count = 456;
+ sc = rtems_interrupt_server_initialize(
+ 0,
+ RTEMS_MINIMUM_STACK_SIZE,
+ RTEMS_DEFAULT_MODES,
+ RTEMS_DEFAULT_ATTRIBUTES,
+ &server_count
+ );
+ T_rsc(sc, RTEMS_INVALID_PRIORITY);
+ T_eq_u32(server_count, 0);
+
+ server_count = 456;
+ sc = rtems_interrupt_server_initialize(
+ 123,
+ RTEMS_MINIMUM_STACK_SIZE,
+ RTEMS_DEFAULT_MODES,
+ RTEMS_DEFAULT_ATTRIBUTES,
+ &server_count
+ );
+ T_rsc_success(sc);
+ T_eq_u32(server_count, 2);
+
+ sc = rtems_interrupt_server_delete(0);
+ T_rsc_success(sc);
+ ensure_server_termination();
+
+ sc = rtems_interrupt_server_delete(1);
+ T_rsc_success(sc);
+ ensure_server_termination();
+
+ greedy = rtems_heap_greedy_allocate(NULL, 0);
+
+ server_count = 456;
+ sc = rtems_interrupt_server_initialize(
+ 123,
+ RTEMS_MINIMUM_STACK_SIZE,
+ RTEMS_DEFAULT_MODES,
+ RTEMS_DEFAULT_ATTRIBUTES,
+ &server_count
+ );
+ T_rsc(sc, RTEMS_NO_MEMORY);
+ T_eq_u32(server_count, 1);
+
+ rtems_heap_greedy_free(greedy);
+
+ sc = rtems_interrupt_server_delete(0);
+ T_rsc_success(sc);
+ ensure_server_termination();
+
+ sc = rtems_interrupt_server_delete(1);
+ T_rsc(sc, RTEMS_INVALID_ID);
+}
+
+const char rtems_test_name[] = "SMPIRQS 1";
+
+static void Init(rtems_task_argument argument)
+{
+ rtems_test_run(argument, TEST_STATE);
+}
+
+#define CONFIGURE_APPLICATION_NEEDS_CLOCK_DRIVER
+#define CONFIGURE_APPLICATION_NEEDS_SIMPLE_CONSOLE_DRIVER
+
+#define CONFIGURE_MAXIMUM_TASKS 3
+
+#define CONFIGURE_RTEMS_INIT_TASKS_TABLE
+
+#define CONFIGURE_INITIAL_EXTENSIONS RTEMS_TEST_INITIAL_EXTENSION
+
+#define CONFIGURE_MAXIMUM_PROCESSORS 2
+
+#define CONFIGURE_SCHEDULER_EDF_SMP
+
+#include <rtems/scheduler.h>
+
+RTEMS_SCHEDULER_EDF_SMP(a);
+
+RTEMS_SCHEDULER_EDF_SMP(b);
+
+#define CONFIGURE_SCHEDULER_TABLE_ENTRIES \
+ RTEMS_SCHEDULER_TABLE_EDF_SMP(a, rtems_build_name('A', ' ', ' ', ' ')), \
+ RTEMS_SCHEDULER_TABLE_EDF_SMP(b, rtems_build_name('B', ' ', ' ', ' '))
+
+#define CONFIGURE_SCHEDULER_ASSIGNMENTS \
+ RTEMS_SCHEDULER_ASSIGN(0, RTEMS_SCHEDULER_ASSIGN_PROCESSOR_MANDATORY), \
+ RTEMS_SCHEDULER_ASSIGN(1, RTEMS_SCHEDULER_ASSIGN_PROCESSOR_OPTIONAL)
+
+#define CONFIGURE_INIT
+
+#include <rtems/confdefs.h>
diff --git a/testsuites/smptests/smpirqs01/smpirqs01.doc b/testsuites/smptests/smpirqs01/smpirqs01.doc
new file mode 100644
index 0000000000..61812751a8
--- /dev/null
+++ b/testsuites/smptests/smpirqs01/smpirqs01.doc
@@ -0,0 +1,13 @@
+This file describes the directives and concepts tested by this test set.
+
+test set name: smpirqs01
+
+directives:
+
+ - rtems_interrupt_server_delete()
+ - rtems_interrupt_server_initialize()
+
+concepts:
+
+ - Ensure that the interrupt server initialization with more than one
+ processor works.
diff --git a/testsuites/smptests/smplock01/init.c b/testsuites/smptests/smplock01/init.c
index bfaa755150..1c33911732 100644
--- a/testsuites/smptests/smplock01/init.c
+++ b/testsuites/smptests/smplock01/init.c
@@ -19,7 +19,7 @@
#include <rtems/score/smplock.h>
#include <rtems/score/smplockmcs.h>
#include <rtems/score/smplockseq.h>
-#include <rtems/test.h>
+#include <rtems/test-info.h>
#include <rtems.h>
#include "tmacros.h"
diff --git a/testsuites/smptests/smpmulticast01/init.c b/testsuites/smptests/smpmulticast01/init.c
index d4269e92d8..f5ed70952a 100644
--- a/testsuites/smptests/smpmulticast01/init.c
+++ b/testsuites/smptests/smpmulticast01/init.c
@@ -33,7 +33,7 @@
#include <string.h>
-#include <t.h>
+#include <rtems/test.h>
#include <tmacros.h>
#define CPU_COUNT 32
@@ -432,17 +432,17 @@ static Per_CPU_Job job_order_jobs[TEST_JOB_ORDER_JOBS];
static void job_order_handler_0(void *arg)
{
- T_step(1, "invalid job order");
+ T_step(1);
}
static void job_order_handler_1(void *arg)
{
- T_step(2, "invalid job order");
+ T_step(2);
}
static void job_order_handler_2(void *arg)
{
- T_step(3, "invalid job order");
+ T_step(3);
}
static const Per_CPU_Job_context job_order_contexts[TEST_JOB_ORDER_JOBS] = {
@@ -464,7 +464,7 @@ T_TEST_CASE(JobOrder)
_Per_CPU_Add_job(cpu_self, &job_order_jobs[i]);
}
- T_step(0, "wrong job processing time");
+ T_step(0);
_SMP_Send_message(_Per_CPU_Get_index(cpu_self), SMP_MESSAGE_PERFORM_JOBS);
_Thread_Dispatch_enable(cpu_self);
}
@@ -475,13 +475,13 @@ static Per_CPU_Job add_job_in_job_jobs[TEST_ADD_JOB_IN_JOB_JOBS];
static void add_job_in_job_handler_0(void *arg)
{
- T_step(1, "invalid job order");
+ T_step(1);
_Per_CPU_Add_job(_Per_CPU_Get(), &add_job_in_job_jobs[1]);
}
static void add_job_in_job_handler_1(void *arg)
{
- T_step(3, "invalid job order");
+ T_step(3);
}
static const Per_CPU_Job_context
@@ -503,9 +503,9 @@ T_TEST_CASE(AddJobInJob)
}
_Per_CPU_Add_job(cpu_self, &add_job_in_job_jobs[0]);
- T_step(0, "wrong job processing time");
+ T_step(0);
_SMP_Send_message(_Per_CPU_Get_index(cpu_self), SMP_MESSAGE_PERFORM_JOBS);
- T_step(2, "wrong job processing time");
+ T_step(2);
_SMP_Send_message(_Per_CPU_Get_index(cpu_self), SMP_MESSAGE_PERFORM_JOBS);
_Thread_Dispatch_enable(cpu_self);
}
diff --git a/testsuites/smptests/smpschededf02/init.c b/testsuites/smptests/smpschededf02/init.c
index cd8895edd5..fae2d76bf3 100644
--- a/testsuites/smptests/smpschededf02/init.c
+++ b/testsuites/smptests/smpschededf02/init.c
@@ -216,6 +216,12 @@ static void set_affinity(rtems_id id, uint32_t cpu_set_32)
rtems_test_assert(sc == RTEMS_SUCCESSFUL);
}
+/*
+ * The goal of the reset() function is to bring back a defined initial system
+ * state for each test case. All tasks of the test shall be suspended. The
+ * idle threads shall be ordered in the scheduled chain according to the CPU
+ * index.
+ */
static void reset(test_context *ctx)
{
rtems_status_code sc;
@@ -236,7 +242,13 @@ static void reset(test_context *ctx)
rtems_test_assert(sc == RTEMS_SUCCESSFUL || sc == RTEMS_INCORRECT_STATE);
}
- /* Order the idle threads explicitly */
+ /*
+ * Order the idle threads explicitly. Test cases may move the idle threads
+ * around. We have to ensure that the idle threads are ordered according to
+ * the CPU index, otherwise the processor allocations cannot be specified for
+ * a test case. The idle threads of a scheduler have all the same priority,
+ * so we have to take the FIFO ordering within a priority group into account.
+ */
for (i = 0; i < CPU_COUNT; ++i) {
const Per_CPU_Control *c;
const Thread_Control *h;
diff --git a/testsuites/smptests/smpscheduler03/init.c b/testsuites/smptests/smpscheduler03/init.c
index 024e3cdd48..33b076b045 100644
--- a/testsuites/smptests/smpscheduler03/init.c
+++ b/testsuites/smptests/smpscheduler03/init.c
@@ -17,7 +17,7 @@
#endif
#include <rtems.h>
-#include <rtems/test.h>
+#include <rtems/test-info.h>
void Init(rtems_task_argument arg);
diff --git a/testsuites/smptests/smpscheduler05/init.c b/testsuites/smptests/smpscheduler05/init.c
index 4a1d0b6db3..90147ea9d7 100644
--- a/testsuites/smptests/smpscheduler05/init.c
+++ b/testsuites/smptests/smpscheduler05/init.c
@@ -17,7 +17,7 @@
#endif
#include <rtems.h>
-#include <rtems/test.h>
+#include <rtems/test-info.h>
void Init(rtems_task_argument arg);
diff --git a/testsuites/smptests/smpscheduler06/init.c b/testsuites/smptests/smpscheduler06/init.c
index 1559e04d43..6f26639a86 100644
--- a/testsuites/smptests/smpscheduler06/init.c
+++ b/testsuites/smptests/smpscheduler06/init.c
@@ -17,7 +17,7 @@
#endif
#include <rtems.h>
-#include <rtems/test.h>
+#include <rtems/test-info.h>
void Init(rtems_task_argument arg);
diff --git a/testsuites/smptests/smpscheduler07/init.c b/testsuites/smptests/smpscheduler07/init.c
index 4583a5eb2a..cdd3370413 100644
--- a/testsuites/smptests/smpscheduler07/init.c
+++ b/testsuites/smptests/smpscheduler07/init.c
@@ -17,7 +17,7 @@
#endif
#include <rtems.h>
-#include <rtems/test.h>
+#include <rtems/test-info.h>
void Init(rtems_task_argument arg);
diff --git a/testsuites/smptests/smpsignal01/init.c b/testsuites/smptests/smpsignal01/init.c
index 36a66bea9b..025e84c6a2 100644
--- a/testsuites/smptests/smpsignal01/init.c
+++ b/testsuites/smptests/smpsignal01/init.c
@@ -81,10 +81,10 @@ static void signal_send(test_context *ctx, test_state new_state)
{
rtems_status_code sc;
+ change_state(ctx, new_state);
sc = rtems_signal_send(ctx->consumer, TEST_SIGNAL);
rtems_test_assert(sc == RTEMS_SUCCESSFUL);
- change_state(ctx, new_state);
}
static void check_consumer_processor(const test_context *ctx)
diff --git a/testsuites/sptests/Makefile.am b/testsuites/sptests/Makefile.am
index 62bb1aa685..854ec3daf8 100644
--- a/testsuites/sptests/Makefile.am
+++ b/testsuites/sptests/Makefile.am
@@ -1190,9 +1190,7 @@ if TEST_spintrcritical01
sp_tests += spintrcritical01
sp_screens += spintrcritical01/spintrcritical01.scn
sp_docs += spintrcritical01/spintrcritical01.doc
-spintrcritical01_SOURCES = spintrcritical01/init.c \
- spintrcritical_support/intrcritical.c \
- spintrcritical_support/intrcritical.h
+spintrcritical01_SOURCES = spintrcritical01/init.c
spintrcritical01_CPPFLAGS = $(AM_CPPFLAGS) \
$(TEST_FLAGS_spintrcritical01) $(support_includes) \
-I$(top_srcdir)/spintrcritical_support
@@ -1202,8 +1200,7 @@ if TEST_spintrcritical02
sp_tests += spintrcritical02
sp_screens += spintrcritical02/spintrcritical02.scn
sp_docs += spintrcritical02/spintrcritical02.doc
-spintrcritical02_SOURCES = spintrcritical02/init.c \
- spintrcritical_support/intrcritical.c
+spintrcritical02_SOURCES = spintrcritical02/init.c
spintrcritical02_CPPFLAGS = $(AM_CPPFLAGS) \
$(TEST_FLAGS_spintrcritical02) $(support_includes) \
-I$(top_srcdir)/spintrcritical_support
@@ -1213,8 +1210,7 @@ if TEST_spintrcritical03
sp_tests += spintrcritical03
sp_screens += spintrcritical03/spintrcritical03.scn
sp_docs += spintrcritical03/spintrcritical03.doc
-spintrcritical03_SOURCES = spintrcritical03/init.c \
- spintrcritical_support/intrcritical.c
+spintrcritical03_SOURCES = spintrcritical03/init.c
spintrcritical03_CPPFLAGS = $(AM_CPPFLAGS) \
$(TEST_FLAGS_spintrcritical03) $(support_includes) \
-I$(top_srcdir)/spintrcritical_support
@@ -1224,8 +1220,7 @@ if TEST_spintrcritical04
sp_tests += spintrcritical04
sp_screens += spintrcritical04/spintrcritical04.scn
sp_docs += spintrcritical04/spintrcritical04.doc
-spintrcritical04_SOURCES = spintrcritical04/init.c \
- spintrcritical_support/intrcritical.c
+spintrcritical04_SOURCES = spintrcritical04/init.c
spintrcritical04_CPPFLAGS = $(AM_CPPFLAGS) \
$(TEST_FLAGS_spintrcritical04) $(support_includes) \
-I$(top_srcdir)/spintrcritical_support
@@ -1235,43 +1230,17 @@ if TEST_spintrcritical05
sp_tests += spintrcritical05
sp_screens += spintrcritical05/spintrcritical05.scn
sp_docs += spintrcritical05/spintrcritical05.doc
-spintrcritical05_SOURCES = spintrcritical05/init.c \
- spintrcritical_support/intrcritical.c
+spintrcritical05_SOURCES = spintrcritical05/init.c
spintrcritical05_CPPFLAGS = $(AM_CPPFLAGS) \
$(TEST_FLAGS_spintrcritical05) $(support_includes) \
-I$(top_srcdir)/spintrcritical_support
endif
-if TEST_spintrcritical06
-sp_tests += spintrcritical06
-sp_screens += spintrcritical06/spintrcritical06.scn
-sp_docs += spintrcritical06/spintrcritical06.doc
-spintrcritical06_SOURCES = spintrcritical06/init.c \
- spintrcritical_support/intrcritical.c \
- spintrcritical_support/intrcritical.h
-spintrcritical06_CPPFLAGS = $(AM_CPPFLAGS) \
- $(TEST_FLAGS_spintrcritical06) $(support_includes) \
- -I$(top_srcdir)/spintrcritical_support
-endif
-
-if TEST_spintrcritical07
-sp_tests += spintrcritical07
-sp_screens += spintrcritical07/spintrcritical07.scn
-sp_docs += spintrcritical07/spintrcritical07.doc
-spintrcritical07_SOURCES = spintrcritical07/init.c \
- spintrcritical_support/intrcritical.c
-spintrcritical07_CPPFLAGS = $(AM_CPPFLAGS) \
- $(TEST_FLAGS_spintrcritical07) $(support_includes) \
- -I$(top_srcdir)/spintrcritical_support
-endif
-
if TEST_spintrcritical08
sp_tests += spintrcritical08
sp_screens += spintrcritical08/spintrcritical08.scn
sp_docs += spintrcritical08/spintrcritical08.doc
-spintrcritical08_SOURCES = spintrcritical08/init.c \
- spintrcritical_support/intrcritical.c \
- spintrcritical_support/intrcritical.h
+spintrcritical08_SOURCES = spintrcritical08/init.c
spintrcritical08_CPPFLAGS = $(AM_CPPFLAGS) \
$(TEST_FLAGS_spintrcritical08) $(support_includes) \
-I$(top_srcdir)/spintrcritical_support
@@ -1281,9 +1250,7 @@ if TEST_spintrcritical09
sp_tests += spintrcritical09
sp_screens += spintrcritical09/spintrcritical09.scn
sp_docs += spintrcritical09/spintrcritical09.doc
-spintrcritical09_SOURCES = spintrcritical09/init.c \
- spintrcritical_support/intrcritical.c \
- spintrcritical_support/intrcritical.h
+spintrcritical09_SOURCES = spintrcritical09/init.c
spintrcritical09_CPPFLAGS = $(AM_CPPFLAGS) \
$(TEST_FLAGS_spintrcritical09) $(support_includes) \
-I$(top_srcdir)/spintrcritical_support
@@ -1293,9 +1260,7 @@ if TEST_spintrcritical10
sp_tests += spintrcritical10
sp_screens += spintrcritical10/spintrcritical10.scn
sp_docs += spintrcritical10/spintrcritical10.doc
-spintrcritical10_SOURCES = spintrcritical10/init.c \
- spintrcritical_support/intrcritical.c \
- spintrcritical_support/intrcritical.h
+spintrcritical10_SOURCES = spintrcritical10/init.c
spintrcritical10_CPPFLAGS = $(AM_CPPFLAGS) \
$(TEST_FLAGS_spintrcritical10) $(support_includes) \
-I$(top_srcdir)/spintrcritical_support
@@ -1305,9 +1270,7 @@ if TEST_spintrcritical11
sp_tests += spintrcritical11
sp_screens += spintrcritical11/spintrcritical11.scn
sp_docs += spintrcritical11/spintrcritical11.doc
-spintrcritical11_SOURCES = spintrcritical11/init.c \
- spintrcritical_support/intrcritical.c \
- spintrcritical_support/intrcritical.h
+spintrcritical11_SOURCES = spintrcritical11/init.c
spintrcritical11_CPPFLAGS = $(AM_CPPFLAGS) \
$(TEST_FLAGS_spintrcritical11) $(support_includes) \
-I$(top_srcdir)/spintrcritical_support
@@ -1317,8 +1280,7 @@ if TEST_spintrcritical12
sp_tests += spintrcritical12
sp_screens += spintrcritical12/spintrcritical12.scn
sp_docs += spintrcritical12/spintrcritical12.doc
-spintrcritical12_SOURCES = spintrcritical12/init.c \
- spintrcritical_support/intrcritical.c
+spintrcritical12_SOURCES = spintrcritical12/init.c
spintrcritical12_CPPFLAGS = $(AM_CPPFLAGS) \
$(TEST_FLAGS_spintrcritical12) $(support_includes) \
-I$(top_srcdir)/spintrcritical_support
@@ -1328,9 +1290,7 @@ if TEST_spintrcritical13
sp_tests += spintrcritical13
sp_screens += spintrcritical13/spintrcritical13.scn
sp_docs += spintrcritical13/spintrcritical13.doc
-spintrcritical13_SOURCES = spintrcritical13/init.c \
- spintrcritical_support/intrcritical.c \
- spintrcritical_support/intrcritical.h
+spintrcritical13_SOURCES = spintrcritical13/init.c
spintrcritical13_CPPFLAGS = $(AM_CPPFLAGS) \
$(TEST_FLAGS_spintrcritical13) $(support_includes) \
-I$(top_srcdir)/spintrcritical_support
@@ -1340,8 +1300,7 @@ if TEST_spintrcritical14
sp_tests += spintrcritical14
sp_screens += spintrcritical14/spintrcritical14.scn
sp_docs += spintrcritical14/spintrcritical14.doc
-spintrcritical14_SOURCES = spintrcritical14/init.c \
- spintrcritical_support/intrcritical.c
+spintrcritical14_SOURCES = spintrcritical14/init.c
spintrcritical14_CPPFLAGS = $(AM_CPPFLAGS) \
$(TEST_FLAGS_spintrcritical14) $(support_includes) \
-I$(top_srcdir)/spintrcritical_support
@@ -1351,9 +1310,7 @@ if TEST_spintrcritical15
sp_tests += spintrcritical15
sp_screens += spintrcritical15/spintrcritical15.scn
sp_docs += spintrcritical15/spintrcritical15.doc
-spintrcritical15_SOURCES = spintrcritical15/init.c \
- spintrcritical_support/intrcritical.c \
- spintrcritical_support/intrcritical.h
+spintrcritical15_SOURCES = spintrcritical15/init.c
spintrcritical15_CPPFLAGS = $(AM_CPPFLAGS) \
$(TEST_FLAGS_spintrcritical15) $(support_includes) \
-I$(top_srcdir)/spintrcritical_support
@@ -1363,9 +1320,7 @@ if TEST_spintrcritical16
sp_tests += spintrcritical16
sp_screens += spintrcritical16/spintrcritical16.scn
sp_docs += spintrcritical16/spintrcritical16.doc
-spintrcritical16_SOURCES = spintrcritical16/init.c \
- spintrcritical_support/intrcritical.c \
- spintrcritical_support/intrcritical.h
+spintrcritical16_SOURCES = spintrcritical16/init.c
spintrcritical16_CPPFLAGS = $(AM_CPPFLAGS) \
$(TEST_FLAGS_spintrcritical16) $(support_includes) \
-I$(top_srcdir)/spintrcritical_support
@@ -1375,9 +1330,7 @@ if TEST_spintrcritical18
sp_tests += spintrcritical18
sp_screens += spintrcritical18/spintrcritical18.scn
sp_docs += spintrcritical18/spintrcritical18.doc
-spintrcritical18_SOURCES = spintrcritical18/init.c \
- spintrcritical_support/intrcritical.h \
- spintrcritical_support/intrcritical.c
+spintrcritical18_SOURCES = spintrcritical18/init.c
spintrcritical18_CPPFLAGS = $(AM_CPPFLAGS) \
$(TEST_FLAGS_spintrcritical18) $(support_includes) \
-I$(top_srcdir)/spintrcritical_support
@@ -1387,8 +1340,7 @@ if TEST_spintrcritical20
sp_tests += spintrcritical20
sp_screens += spintrcritical20/spintrcritical20.scn
sp_docs += spintrcritical20/spintrcritical20.doc
-spintrcritical20_SOURCES = spintrcritical20/init.c \
- spintrcritical_support/intrcritical.c
+spintrcritical20_SOURCES = spintrcritical20/init.c
spintrcritical20_CPPFLAGS = $(AM_CPPFLAGS) \
$(TEST_FLAGS_spintrcritical20) $(support_includes) \
-I$(top_srcdir)/spintrcritical_support
@@ -1398,8 +1350,7 @@ if TEST_spintrcritical21
sp_tests += spintrcritical21
sp_screens += spintrcritical21/spintrcritical21.scn
sp_docs += spintrcritical21/spintrcritical21.doc
-spintrcritical21_SOURCES = spintrcritical21/init.c \
- spintrcritical_support/intrcritical.c
+spintrcritical21_SOURCES = spintrcritical21/init.c
spintrcritical21_CPPFLAGS = $(AM_CPPFLAGS) \
$(TEST_FLAGS_spintrcritical21) $(support_includes) \
-I$(top_srcdir)/spintrcritical_support
@@ -1409,9 +1360,7 @@ if TEST_spintrcritical22
sp_tests += spintrcritical22
sp_screens += spintrcritical22/spintrcritical22.scn
sp_docs += spintrcritical22/spintrcritical22.doc
-spintrcritical22_SOURCES = spintrcritical22/init.c \
- spintrcritical_support/intrcritical.h \
- spintrcritical_support/intrcritical.c
+spintrcritical22_SOURCES = spintrcritical22/init.c
spintrcritical22_CPPFLAGS = $(AM_CPPFLAGS) \
$(TEST_FLAGS_spintrcritical22) $(support_includes) \
-I$(top_srcdir)/spintrcritical_support
@@ -1421,9 +1370,7 @@ if TEST_spintrcritical23
sp_tests += spintrcritical23
sp_screens += spintrcritical23/spintrcritical23.scn
sp_docs += spintrcritical23/spintrcritical23.doc
-spintrcritical23_SOURCES = spintrcritical23/init.c \
- spintrcritical_support/intrcritical.h \
- spintrcritical_support/intrcritical.c
+spintrcritical23_SOURCES = spintrcritical23/init.c
spintrcritical23_CPPFLAGS = $(AM_CPPFLAGS) \
$(TEST_FLAGS_spintrcritical23) $(support_includes) \
-I$(top_srcdir)/spintrcritical_support
@@ -1433,9 +1380,7 @@ if TEST_spintrcritical24
sp_tests += spintrcritical24
sp_screens += spintrcritical24/spintrcritical24.scn
sp_docs += spintrcritical24/spintrcritical24.doc
-spintrcritical24_SOURCES = spintrcritical24/init.c \
- spintrcritical_support/intrcritical.h \
- spintrcritical_support/intrcritical.c
+spintrcritical24_SOURCES = spintrcritical24/init.c
spintrcritical24_CPPFLAGS = $(AM_CPPFLAGS) \
$(TEST_FLAGS_spintrcritical24) $(support_includes) \
-I$(top_srcdir)/spintrcritical_support
@@ -1464,7 +1409,7 @@ if TEST_spmisc01
sp_tests += spmisc01
sp_screens += spmisc01/spmisc01.scn
sp_docs += spmisc01/spmisc01.doc
-spmisc01_SOURCES = spmisc01/init.c
+spmisc01_SOURCES = spmisc01/init.c spmisc01/strong.c
spmisc01_CPPFLAGS = $(AM_CPPFLAGS) $(TEST_FLAGS_spmisc01) \
$(support_includes)
endif
diff --git a/testsuites/sptests/configure.ac b/testsuites/sptests/configure.ac
index 9476e3b0d7..460917dd04 100644
--- a/testsuites/sptests/configure.ac
+++ b/testsuites/sptests/configure.ac
@@ -174,8 +174,6 @@ RTEMS_TEST_CHECK([spintrcritical02])
RTEMS_TEST_CHECK([spintrcritical03])
RTEMS_TEST_CHECK([spintrcritical04])
RTEMS_TEST_CHECK([spintrcritical05])
-RTEMS_TEST_CHECK([spintrcritical06])
-RTEMS_TEST_CHECK([spintrcritical07])
RTEMS_TEST_CHECK([spintrcritical08])
RTEMS_TEST_CHECK([spintrcritical09])
RTEMS_TEST_CHECK([spintrcritical10])
diff --git a/testsuites/sptests/sp01/init.c b/testsuites/sptests/sp01/init.c
index 2719c84fc8..e0072a615c 100644
--- a/testsuites/sptests/sp01/init.c
+++ b/testsuites/sptests/sp01/init.c
@@ -16,6 +16,19 @@
const char rtems_test_name[] = "SP 1";
+RTEMS_ALIGNED( RTEMS_TASK_STORAGE_ALIGNMENT ) static char Task_1_storage[
+ RTEMS_TASK_STORAGE_SIZE( 2 * RTEMS_MINIMUM_STACK_SIZE, RTEMS_FLOATING_POINT )
+];
+
+static const rtems_task_config Task_1_config = {
+ .name = rtems_build_name( 'T', 'A', '1', ' ' ),
+ .initial_priority = 1,
+ .storage_area = Task_1_storage,
+ .storage_size = sizeof( Task_1_storage ),
+ .initial_modes = RTEMS_DEFAULT_MODES,
+ .attributes = RTEMS_FLOATING_POINT
+};
+
rtems_task Init(
rtems_task_argument argument
)
@@ -30,15 +43,8 @@ rtems_task Init(
status = rtems_clock_set( &time );
directive_failed( status, "rtems_clock_set" );
- status = rtems_task_create(
- rtems_build_name( 'T', 'A', '1', ' ' ),
- 1,
- RTEMS_MINIMUM_STACK_SIZE * 2,
- RTEMS_DEFAULT_MODES,
- RTEMS_DEFAULT_ATTRIBUTES,
- &id
- );
- directive_failed( status, "rtems_task_create of TA1" );
+ status = rtems_task_construct( &Task_1_config, &id );
+ directive_failed( status, "rtems_task_construct of TA1" );
status = rtems_task_start( id, Task_1_through_3, 1 );
directive_failed( status, "rtems_task_start of TA1" );
diff --git a/testsuites/sptests/sp01/sp01.doc b/testsuites/sptests/sp01/sp01.doc
index d7d9f5d902..43c8ee0116 100644
--- a/testsuites/sptests/sp01/sp01.doc
+++ b/testsuites/sptests/sp01/sp01.doc
@@ -9,6 +9,7 @@
test name: sp01
directives:
+ rtems_task_construct
rtems_task_create
rtems_task_start
rtems_task_wake_after
diff --git a/testsuites/sptests/sp01/system.h b/testsuites/sptests/sp01/system.h
index bde5328aa9..d7990aeca8 100644
--- a/testsuites/sptests/sp01/system.h
+++ b/testsuites/sptests/sp01/system.h
@@ -28,8 +28,9 @@ rtems_task Task_1_through_3(
#define CONFIGURE_RTEMS_INIT_TASKS_TABLE
-#define CONFIGURE_EXTRA_TASK_STACKS (4 * RTEMS_MINIMUM_STACK_SIZE)
+#define CONFIGURE_EXTRA_TASK_STACKS (3 * RTEMS_MINIMUM_STACK_SIZE)
#define CONFIGURE_MAXIMUM_TASKS 4
+#define CONFIGURE_MINIMUM_TASKS_WITH_USER_PROVIDED_STORAGE 1
#include <rtems/confdefs.h>
diff --git a/testsuites/sptests/sp04/init.c b/testsuites/sptests/sp04/init.c
index 11aae46ea3..b163aec8ed 100644
--- a/testsuites/sptests/sp04/init.c
+++ b/testsuites/sptests/sp04/init.c
@@ -84,7 +84,7 @@ rtems_task Init(
1,
RTEMS_MINIMUM_STACK_SIZE * 2,
RTEMS_PREEMPT|RTEMS_TIMESLICE,
- RTEMS_DEFAULT_ATTRIBUTES,
+ RTEMS_GLOBAL,
&Task_id[ 2 ]
);
directive_failed( status, "rtems_task_create of TA2" );
diff --git a/testsuites/sptests/sp12/init.c b/testsuites/sptests/sp12/init.c
index 789f7e3249..7aa09d3676 100644
--- a/testsuites/sptests/sp12/init.c
+++ b/testsuites/sptests/sp12/init.c
@@ -73,7 +73,7 @@ rtems_task Init(
status = rtems_semaphore_create(
Semaphore_name[ 3 ],
1,
- RTEMS_DEFAULT_ATTRIBUTES,
+ RTEMS_GLOBAL,
RTEMS_NO_PRIORITY,
&Semaphore_id[ 3 ]
);
diff --git a/testsuites/sptests/sp13/init.c b/testsuites/sptests/sp13/init.c
index 7ed8dabc53..a23d369001 100644
--- a/testsuites/sptests/sp13/init.c
+++ b/testsuites/sptests/sp13/init.c
@@ -105,7 +105,7 @@ rtems_task Init(
Queue_name[ 3 ],
100,
MESSAGE_SIZE,
- RTEMS_DEFAULT_ATTRIBUTES,
+ RTEMS_GLOBAL,
&Queue_id[ 3 ]
);
directive_failed( status, "rtems_message_queue_create of Q3" );
diff --git a/testsuites/sptests/sp15/init.c b/testsuites/sptests/sp15/init.c
index 25be0425e2..2565495a06 100644
--- a/testsuites/sptests/sp15/init.c
+++ b/testsuites/sptests/sp15/init.c
@@ -71,7 +71,7 @@ rtems_task Init(
Area_2,
274,
128,
- RTEMS_DEFAULT_ATTRIBUTES,
+ RTEMS_GLOBAL,
&Partition_id[ 2 ]
);
directive_failed( status, "rtems_partition_create of PT2" );
diff --git a/testsuites/sptests/sp21/init.c b/testsuites/sptests/sp21/init.c
index f44f2ba851..bd0ae2b6a1 100644
--- a/testsuites/sptests/sp21/init.c
+++ b/testsuites/sptests/sp21/init.c
@@ -21,7 +21,6 @@ const char rtems_test_name[] = "SP 21";
/* forward declarations to avoid warnings */
rtems_task Init(rtems_task_argument argument);
void do_test_io_manager(void);
-void do_test_io_lookup_name(void);
void do_test_zero_driver(void);
#define PRIurtems_device_major_number PRIu32
@@ -193,24 +192,6 @@ void do_test_io_manager(void)
puts( "rtems_io_unregister_driver - RTEMS_SUCCESSFUL" );
}
-void do_test_io_lookup_name(void)
-{
- rtems_status_code sc;
- rtems_driver_name_t info;
-
- puts( "rtems_io_lookup_name( \"\", &info ) - RTEMS_UNSATISFIED" );
- sc = rtems_io_lookup_name( "", &info );
- fatal_directive_status( sc, RTEMS_UNSATISFIED, "lookup empty string" );
-
- puts( "rtems_io_lookup_name( \"/dev\", &info ) - RTEMS_UNSATISFIED" );
- sc = rtems_io_lookup_name( "/dev", &info );
- fatal_directive_status( sc, RTEMS_UNSATISFIED, "lookup empty string" );
-
- puts( "rtems_io_lookup_name( \"/dev/null\", &info ) - RTEMS_SUCCESSFUL" );
- sc = rtems_io_lookup_name( "/dev/null", &info );
- directive_failed( sc, "lookup /dev/null" );
-}
-
void do_test_zero_driver(void)
{
rtems_status_code sc = RTEMS_SUCCESSFUL;
@@ -258,8 +239,6 @@ rtems_task Init(
do_test_io_manager();
- do_test_io_lookup_name();
-
do_test_zero_driver();
TEST_END();
diff --git a/testsuites/sptests/sp37/init.c b/testsuites/sptests/sp37/init.c
index 22c7d4f2ef..4c8e1a7f64 100644
--- a/testsuites/sptests/sp37/init.c
+++ b/testsuites/sptests/sp37/init.c
@@ -169,7 +169,9 @@ static void test_isr_level( void )
static void test_isr_locks( void )
{
+#if defined(RTEMS_SMP)
static const char name[] = "test";
+#endif
ISR_Level normal_interrupt_level = _ISR_Get_level();
ISR_lock_Control initialized = ISR_LOCK_INITIALIZER( name );
ISR_lock_Control zero_initialized;
diff --git a/testsuites/sptests/spfatal33/init.c b/testsuites/sptests/spfatal33/init.c
new file mode 100644
index 0000000000..3cdce7d931
--- /dev/null
+++ b/testsuites/sptests/spfatal33/init.c
@@ -0,0 +1,55 @@
+/* SPDX-License-Identifier: BSD-2-Clause */
+
+/*
+ * Copyright (C) 2020 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.
+ */
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#include "../spfatal_support/spfatal.h"
+
+#define FATAL_ERROR_TEST_NAME "33"
+#define FATAL_ERROR_DESCRIPTION "provoke too large TLS size"
+#define FATAL_ERROR_EXPECTED_SOURCE INTERNAL_ERROR_CORE
+#define FATAL_ERROR_EXPECTED_ERROR INTERNAL_ERROR_TOO_LARGE_TLS_SIZE
+
+static _Thread_local short tls;
+
+static void force_error(void)
+{
+ long var;
+
+ var = tls;
+ RTEMS_OBFUSCATE_VARIABLE( var );
+ tls = var;
+
+ /* Not reached */
+ rtems_test_assert( 0 );
+}
+
+#define CONFIGURE_MAXIMUM_THREAD_LOCAL_STORAGE_SIZE 1
+
+#include "../spfatal_support/spfatalimpl.h"
diff --git a/testsuites/sptests/spfatal33/spfatal33.doc b/testsuites/sptests/spfatal33/spfatal33.doc
new file mode 100644
index 0000000000..190e1ad4eb
--- /dev/null
+++ b/testsuites/sptests/spfatal33/spfatal33.doc
@@ -0,0 +1,11 @@
+This file describes the directives and concepts tested by this test set.
+
+test set name: spfatal33
+
+directives:
+
+ - _TLS_Get_allocation_size()
+
+concepts:
+
+ - Provoke a too large TLS size.
diff --git a/testsuites/sptests/spfatal33/spfatal33.scn b/testsuites/sptests/spfatal33/spfatal33.scn
new file mode 100644
index 0000000000..80e3dd40a4
--- /dev/null
+++ b/testsuites/sptests/spfatal33/spfatal33.scn
@@ -0,0 +1,16 @@
+*** BEGIN OF TEST SPFATAL 33 ***
+*** TEST VERSION: 6.0.0.40a6a37e27a5e112bb3e383c196c6094f3498298
+*** TEST STATE: EXPECTED_PASS
+*** TEST BUILD: RTEMS_DEBUG
+*** TEST TOOLS: 10.2.1 20200904 (RTEMS 6, RSB 47f32b8b1a597b5ed3475722bdc155249ef51115, Newlib a0d7982)
+Fatal error (provoke too large TLS size) hit
+
+*** END OF TEST SPFATAL 33 ***
+
+
+*** FATAL ***
+fatal source: 0 (INTERNAL_ERROR_CORE)
+fatal code: 41 (INTERNAL_ERROR_TOO_LARGE_TLS_SIZE)
+RTEMS version: 6.0.0.40a6a37e27a5e112bb3e383c196c6094f3498298
+RTEMS tools: 10.2.1 20200904 (RTEMS 6, RSB 47f32b8b1a597b5ed3475722bdc155249ef51115, Newlib a0d7982)
+executing thread is NULL
diff --git a/testsuites/sptests/spfreechain01/init.c b/testsuites/sptests/spfreechain01/init.c
index 72cd7920c5..8132757031 100644
--- a/testsuites/sptests/spfreechain01/init.c
+++ b/testsuites/sptests/spfreechain01/init.c
@@ -12,7 +12,7 @@
#include <tmacros.h>
#include <rtems/score/chainimpl.h>
-#include <rtems/score/freechain.h>
+#include <rtems/score/freechainimpl.h>
const char rtems_test_name[] = "SPFREECHAIN 1";
diff --git a/testsuites/sptests/spheapprot/init.c b/testsuites/sptests/spheapprot/init.c
index 8046100091..7428f38830 100644
--- a/testsuites/sptests/spheapprot/init.c
+++ b/testsuites/sptests/spheapprot/init.c
@@ -22,7 +22,7 @@
#include <bsp.h>
-#include <rtems/test.h>
+#include <rtems/test-info.h>
#include <rtems/score/heapimpl.h>
#include <tmacros.h>
diff --git a/testsuites/sptests/spinternalerror02/init.c b/testsuites/sptests/spinternalerror02/init.c
index bf589473de..1b7d0b4388 100644
--- a/testsuites/sptests/spinternalerror02/init.c
+++ b/testsuites/sptests/spinternalerror02/init.c
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2012, 2018 embedded brains GmbH. All rights reserved.
+ * Copyright (c) 2012, 2020 embedded brains GmbH. All rights reserved.
*
* embedded brains GmbH
* Donierstr. 4
@@ -36,7 +36,7 @@ static void test_internal_error_text(void)
} while ( text != text_last );
rtems_test_assert(
- error - 3 == INTERNAL_ERROR_NO_MEMORY_FOR_PER_CPU_DATA
+ error - 3 == INTERNAL_ERROR_TOO_LARGE_TLS_SIZE
);
}
diff --git a/testsuites/sptests/spintrcritical01/spintrcritical01.scn b/testsuites/sptests/spintrcritical01/spintrcritical01.scn
index cb51f99ae7..417c078724 100644
--- a/testsuites/sptests/spintrcritical01/spintrcritical01.scn
+++ b/testsuites/sptests/spintrcritical01/spintrcritical01.scn
@@ -1,6 +1,24 @@
-*** TEST INTERRUPT CRITICAL SECTION 01 ***
-Init - Trying to generate semaphore release from ISR while blocking
-Init - Variation is: FIFO/Without Timeout
-Support - rtems_timer_create - creating timer 1
-Init - Case hit
-*** END OF TEST INTERRUPT CRITICAL SECTION 01 ***
+*** BEGIN OF TEST SPINTRCRITICAL 1 ***
+*** TEST VERSION: 6.0.0.929e49a54ab4d2d18c9fb8d03610614f63e25b8d
+*** TEST STATE: EXPECTED_PASS
+*** TEST BUILD: RTEMS_DEBUG RTEMS_POSIX_API RTEMS_SMP
+*** TEST TOOLS: 10.0.1 20200406 (RTEMS 6, RSB bec88a6dd856892c3e66e4598252ea07d7a0d762, Newlib ece49e4)
+A:SPINTRCRITICAL 1
+S:Platform:RTEMS
+S:Compiler:10.0.1 20200406 (RTEMS 6, RSB bec88a6dd856892c3e66e4598252ea07d7a0d762, Newlib ece49e4)
+S:Version:6.0.0.929e49a54ab4d2d18c9fb8d03610614f63e25b8d
+S:BSP:realview_pbx_a9_qemu
+S:RTEMS_DEBUG:1
+S:RTEMS_MULTIPROCESSING:0
+S:RTEMS_POSIX_API:1
+S:RTEMS_PROFILING:0
+S:RTEMS_SMP:1
+B:SemaphoreReleaseFIFOWithoutTimeout
+P:0:0:UI1:spintrcritical01impl.h:133
+P:1:0:UI1:spintrcritical01impl.h:136
+P:2:0:UI1:spintrcritical01impl.h:139
+E:SemaphoreReleaseFIFOWithoutTimeout:N:3:F:0:D:0.991790
+Z:SPINTRCRITICAL 1:C:1:N:3:F:0:D:0.992984
+Y:ReportHash:SHA256:5ae7281f5dd710e1c043bbff2fa3ddff47dc22aa5c35cff545601c8156ec1a87
+
+*** END OF TEST SPINTRCRITICAL 1 ***
diff --git a/testsuites/sptests/spintrcritical01/spintrcritical01impl.h b/testsuites/sptests/spintrcritical01/spintrcritical01impl.h
index 5c480b4bb3..57c88fb423 100644
--- a/testsuites/sptests/spintrcritical01/spintrcritical01impl.h
+++ b/testsuites/sptests/spintrcritical01/spintrcritical01impl.h
@@ -1,4 +1,6 @@
/*
+ * Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+ *
* COPYRIGHT (c) 1989-2012.
* On-Line Applications Research Corporation (OAR).
*
@@ -11,38 +13,38 @@
#include "config.h"
#endif
-#include <tmacros.h>
-#include <intrcritical.h>
+#include <rtems/test.h>
+#include <rtems/test-info.h>
#include <rtems/score/threadimpl.h>
#if defined(FIFO_NO_TIMEOUT)
#define TEST_NAME "1"
- #define TEST_STRING "FIFO/Without Timeout"
+ #define TEST_STRING FIFOWithoutTimeout
#define SEMAPHORE_OBTAIN_TIMEOUT 0
#define SEMAPHORE_ATTRIBUTES RTEMS_DEFAULT_ATTRIBUTES
#elif defined(FIFO_WITH_TIMEOUT)
#define TEST_NAME "2"
- #define TEST_STRING "FIFO/With Timeout"
+ #define TEST_STRING FIFOWithTimeout
#define SEMAPHORE_OBTAIN_TIMEOUT 10
#define SEMAPHORE_ATTRIBUTES RTEMS_DEFAULT_ATTRIBUTES
#elif defined(PRIORITY_NO_TIMEOUT)
#define TEST_NAME "3"
- #define TEST_STRING "Priority/Without Timeout"
+ #define TEST_STRING PriorityWithoutTimeout
#define SEMAPHORE_OBTAIN_TIMEOUT 0
#define SEMAPHORE_ATTRIBUTES RTEMS_PRIORITY
#elif defined(PRIORITY_WITH_TIMEOUT)
#define TEST_NAME "4"
- #define TEST_STRING "Priority/With Timeout"
+ #define TEST_STRING PriorityWithTimeout
#define SEMAPHORE_OBTAIN_TIMEOUT 10
#define SEMAPHORE_ATTRIBUTES RTEMS_PRIORITY
#elif defined(PRIORITY_NO_TIMEOUT_REVERSE)
#define TEST_NAME "5"
- #define TEST_STRING "Priority/Without Timeout (Reverse)"
+ #define TEST_STRING PriorityWithoutTimeoutReverse
#define SEMAPHORE_OBTAIN_TIMEOUT 0
#define SEMAPHORE_ATTRIBUTES RTEMS_PRIORITY
@@ -53,82 +55,93 @@
const char rtems_test_name[] = "SPINTRCRITICAL " TEST_NAME;
-static Thread_Control *thread;
-
-static rtems_id Semaphore;
+typedef struct {
+ Thread_Control *thread;
+ rtems_id semaphore;
+} test_context;
-static bool case_hit;
-
-static bool interrupts_blocking_op(void)
+static bool is_blocked( Thread_Wait_flags flags )
{
- Thread_Wait_flags flags = _Thread_Wait_flags_get( thread );
-
- return
- flags == ( THREAD_WAIT_CLASS_OBJECT | THREAD_WAIT_STATE_INTEND_TO_BLOCK );
+ return flags == ( THREAD_WAIT_CLASS_OBJECT | THREAD_WAIT_STATE_BLOCKED );
}
-static rtems_timer_service_routine test_release_from_isr(
- rtems_id timer,
- void *arg
-)
+static bool interrupts_blocking_op( Thread_Wait_flags flags )
{
- rtems_status_code status;
+ return flags
+ == ( THREAD_WAIT_CLASS_OBJECT | THREAD_WAIT_STATE_INTEND_TO_BLOCK );
+}
- if ( interrupts_blocking_op() ) {
- case_hit = true;
+static T_interrupt_test_state interrupt( void *arg )
+{
+ test_context *ctx;
+ T_interrupt_test_state state;
+ Thread_Wait_flags flags;
+ rtems_status_code status;
+
+ ctx = arg;
+ flags = _Thread_Wait_flags_get( ctx->thread );
+
+ if ( interrupts_blocking_op( flags ) ) {
+ state = T_INTERRUPT_TEST_DONE;
+ } else if ( is_blocked( flags ) ) {
+ state = T_INTERRUPT_TEST_LATE;
+ } else {
+ state = T_INTERRUPT_TEST_EARLY;
}
- status = rtems_semaphore_release( Semaphore );
- directive_failed_with_level( status, "release", -1 );
-}
+ status = rtems_semaphore_release( ctx->semaphore );
+ T_quiet_rsc_success( status );
+ return state;
+}
-static bool test_body( void *arg )
+static void action( void *arg )
{
- rtems_status_code status;
-
- (void) arg;
+ test_context *ctx;
+ rtems_status_code status;
+ ctx = arg;
status = rtems_semaphore_obtain(
- Semaphore,
+ ctx->semaphore,
RTEMS_DEFAULT_OPTIONS,
SEMAPHORE_OBTAIN_TIMEOUT
);
- directive_failed( status, "rtems_semaphore_obtain" );
-
- return case_hit;
+ T_quiet_rsc_success( status );
}
-static rtems_task Init(
- rtems_task_argument ignored
-)
-{
- rtems_status_code status;
+static const T_interrupt_test_config config = {
+ .action = action,
+ .interrupt = interrupt,
+ .max_iteration_count = 10000
+};
- TEST_BEGIN();
+T_TEST_CASE( RTEMS_XCONCAT( SemaphoreRelease, TEST_STRING ) )
+{
+ test_context ctx;
+ rtems_status_code status;
+ T_interrupt_test_state state;
- thread = _Thread_Get_executing();
+ ctx.thread = _Thread_Get_executing();
- puts( "Init - Trying to generate semaphore release from ISR while blocking" );
- puts( "Init - Variation is: " TEST_STRING );
status = rtems_semaphore_create(
rtems_build_name( 'S', 'M', '1', ' ' ),
0,
SEMAPHORE_ATTRIBUTES,
RTEMS_NO_PRIORITY,
- &Semaphore
+ &ctx.semaphore
);
- directive_failed( status, "rtems_semaphore_create of SM1" );
+ T_rsc_success( status );
- interrupt_critical_section_test( test_body, NULL, test_release_from_isr );
+ state = T_interrupt_test( &config, &ctx );
+ T_eq_int( state, T_INTERRUPT_TEST_DONE );
- if ( case_hit ) {
- puts( "Init - Case hit" );
- TEST_END();
- } else
- puts( "Init - Case not hit - ran too long" );
+ rtems_semaphore_delete( ctx.semaphore );
+ T_rsc_success( status );
+}
- rtems_test_exit(0);
+static rtems_task Init( rtems_task_argument argument )
+{
+ rtems_test_run( argument, TEST_STATE );
}
/* configuration information */
@@ -137,9 +150,7 @@ static rtems_task Init(
#define CONFIGURE_APPLICATION_NEEDS_CLOCK_DRIVER
#define CONFIGURE_MAXIMUM_TASKS 1
-#define CONFIGURE_MAXIMUM_TIMERS 1
#define CONFIGURE_MAXIMUM_SEMAPHORES 1
-#define CONFIGURE_MAXIMUM_USER_EXTENSIONS 1
#define CONFIGURE_MICROSECONDS_PER_TICK 1000
#if defined(PRIORITY_NO_TIMEOUT_REVERSE)
#define CONFIGURE_INIT_TASK_PRIORITY 250
diff --git a/testsuites/sptests/spintrcritical02/spintrcritical02.scn b/testsuites/sptests/spintrcritical02/spintrcritical02.scn
index ed16ba3f43..3fdb60d20b 100644
--- a/testsuites/sptests/spintrcritical02/spintrcritical02.scn
+++ b/testsuites/sptests/spintrcritical02/spintrcritical02.scn
@@ -1,6 +1,24 @@
-*** TEST INTERRUPT CRITICAL SECTION 02 ***
-Init - Trying to generate semaphore release from ISR while blocking
-Init - Variation is: FIFO/With Timeout
-Support - rtems_timer_create - creating timer 1
-Init - Case hit
-*** END OF TEST INTERRUPT CRITICAL SECTION 02 ***
+*** BEGIN OF TEST SPINTRCRITICAL 2 ***
+*** TEST VERSION: 6.0.0.929e49a54ab4d2d18c9fb8d03610614f63e25b8d
+*** TEST STATE: EXPECTED_PASS
+*** TEST BUILD: RTEMS_DEBUG RTEMS_POSIX_API RTEMS_SMP
+*** TEST TOOLS: 10.0.1 20200406 (RTEMS 6, RSB bec88a6dd856892c3e66e4598252ea07d7a0d762, Newlib ece49e4)
+A:SPINTRCRITICAL 2
+S:Platform:RTEMS
+S:Compiler:10.0.1 20200406 (RTEMS 6, RSB bec88a6dd856892c3e66e4598252ea07d7a0d762, Newlib ece49e4)
+S:Version:6.0.0.929e49a54ab4d2d18c9fb8d03610614f63e25b8d
+S:BSP:realview_pbx_a9_qemu
+S:RTEMS_DEBUG:1
+S:RTEMS_MULTIPROCESSING:0
+S:RTEMS_POSIX_API:1
+S:RTEMS_PROFILING:0
+S:RTEMS_SMP:1
+B:SemaphoreReleaseFIFOWithTimeout
+P:0:0:UI1:spintrcritical01impl.h:133
+P:1:0:UI1:spintrcritical01impl.h:136
+P:2:0:UI1:spintrcritical01impl.h:139
+E:SemaphoreReleaseFIFOWithTimeout:N:3:F:0:D:0.993665
+Z:SPINTRCRITICAL 2:C:1:N:3:F:0:D:0.994790
+Y:ReportHash:SHA256:39afd278c3a718205440e47e93954d7a87f2bbd49fbae108199b2dbdaeadc79e
+
+*** END OF TEST SPINTRCRITICAL 2 ***
diff --git a/testsuites/sptests/spintrcritical03/spintrcritical03.scn b/testsuites/sptests/spintrcritical03/spintrcritical03.scn
index 65b8eace3b..0d28186110 100644
--- a/testsuites/sptests/spintrcritical03/spintrcritical03.scn
+++ b/testsuites/sptests/spintrcritical03/spintrcritical03.scn
@@ -1,6 +1,24 @@
-*** TEST INTERRUPT CRITICAL SECTION 03 ***
-Init - Trying to generate semaphore release from ISR while blocking
-Init - Variation is: Priority/Without Timeout
-Support - rtems_timer_create - creating timer 1
-Init - Case hit
-*** END OF TEST INTERRUPT CRITICAL SECTION 03 ***
+*** BEGIN OF TEST SPINTRCRITICAL 3 ***
+*** TEST VERSION: 6.0.0.929e49a54ab4d2d18c9fb8d03610614f63e25b8d
+*** TEST STATE: EXPECTED_PASS
+*** TEST BUILD: RTEMS_DEBUG RTEMS_POSIX_API RTEMS_SMP
+*** TEST TOOLS: 10.0.1 20200406 (RTEMS 6, RSB bec88a6dd856892c3e66e4598252ea07d7a0d762, Newlib ece49e4)
+A:SPINTRCRITICAL 3
+S:Platform:RTEMS
+S:Compiler:10.0.1 20200406 (RTEMS 6, RSB bec88a6dd856892c3e66e4598252ea07d7a0d762, Newlib ece49e4)
+S:Version:6.0.0.929e49a54ab4d2d18c9fb8d03610614f63e25b8d
+S:BSP:realview_pbx_a9_qemu
+S:RTEMS_DEBUG:1
+S:RTEMS_MULTIPROCESSING:0
+S:RTEMS_POSIX_API:1
+S:RTEMS_PROFILING:0
+S:RTEMS_SMP:1
+B:SemaphoreReleasePriorityWithoutTimeout
+P:0:0:UI1:spintrcritical01impl.h:133
+P:1:0:UI1:spintrcritical01impl.h:136
+P:2:0:UI1:spintrcritical01impl.h:139
+E:SemaphoreReleasePriorityWithoutTimeout:N:3:F:0:D:0.992575
+Z:SPINTRCRITICAL 3:C:1:N:3:F:0:D:0.993746
+Y:ReportHash:SHA256:99f47d1893183fe1353cf36b2de6f27e11bae6e1fe4ce30a88e2140d941f93aa
+
+*** END OF TEST SPINTRCRITICAL 3 ***
diff --git a/testsuites/sptests/spintrcritical04/spintrcritical04.scn b/testsuites/sptests/spintrcritical04/spintrcritical04.scn
index 39c54dcefa..984fe8fff6 100644
--- a/testsuites/sptests/spintrcritical04/spintrcritical04.scn
+++ b/testsuites/sptests/spintrcritical04/spintrcritical04.scn
@@ -1,6 +1,24 @@
-*** TEST INTERRUPT CRITICAL SECTION 04 ***
-Init - Trying to generate semaphore release from ISR while blocking
-Init - Variation is: Priority/With Timeout
-Support - rtems_timer_create - creating timer 1
-Init - Case hit
-*** END OF TEST INTERRUPT CRITICAL SECTION 04 ***
+*** BEGIN OF TEST SPINTRCRITICAL 4 ***
+*** TEST VERSION: 6.0.0.929e49a54ab4d2d18c9fb8d03610614f63e25b8d
+*** TEST STATE: EXPECTED_PASS
+*** TEST BUILD: RTEMS_DEBUG RTEMS_POSIX_API RTEMS_SMP
+*** TEST TOOLS: 10.0.1 20200406 (RTEMS 6, RSB bec88a6dd856892c3e66e4598252ea07d7a0d762, Newlib ece49e4)
+A:SPINTRCRITICAL 4
+S:Platform:RTEMS
+S:Compiler:10.0.1 20200406 (RTEMS 6, RSB bec88a6dd856892c3e66e4598252ea07d7a0d762, Newlib ece49e4)
+S:Version:6.0.0.929e49a54ab4d2d18c9fb8d03610614f63e25b8d
+S:BSP:realview_pbx_a9_qemu
+S:RTEMS_DEBUG:1
+S:RTEMS_MULTIPROCESSING:0
+S:RTEMS_POSIX_API:1
+S:RTEMS_PROFILING:0
+S:RTEMS_SMP:1
+B:SemaphoreReleasePriorityWithTimeout
+P:0:0:UI1:spintrcritical01impl.h:133
+P:1:0:UI1:spintrcritical01impl.h:136
+P:2:0:UI1:spintrcritical01impl.h:139
+E:SemaphoreReleasePriorityWithTimeout:N:3:F:0:D:0.992884
+Z:SPINTRCRITICAL 4:C:1:N:3:F:0:D:0.994078
+Y:ReportHash:SHA256:9881b621230969971c290ca60c366534be09a32a291699bcc786d1e654ce305c
+
+*** END OF TEST SPINTRCRITICAL 4 ***
diff --git a/testsuites/sptests/spintrcritical05/spintrcritical05.scn b/testsuites/sptests/spintrcritical05/spintrcritical05.scn
index 3caec8f311..e109d5ccd4 100644
--- a/testsuites/sptests/spintrcritical05/spintrcritical05.scn
+++ b/testsuites/sptests/spintrcritical05/spintrcritical05.scn
@@ -1,6 +1,24 @@
-*** TEST INTERRUPT CRITICAL SECTION 05 ***
-Init - Trying to generate semaphore release from ISR while blocking
-Init - Variation is: Priority/Without Timeout (Reverse)
-Support - rtems_timer_create - creating timer 1
-Init - Case hit
-*** END OF TEST INTERRUPT CRITICAL SECTION 05 ***
+*** BEGIN OF TEST SPINTRCRITICAL 5 ***
+*** TEST VERSION: 6.0.0.929e49a54ab4d2d18c9fb8d03610614f63e25b8d
+*** TEST STATE: EXPECTED_PASS
+*** TEST BUILD: RTEMS_DEBUG RTEMS_POSIX_API RTEMS_SMP
+*** TEST TOOLS: 10.0.1 20200406 (RTEMS 6, RSB bec88a6dd856892c3e66e4598252ea07d7a0d762, Newlib ece49e4)
+A:SPINTRCRITICAL 5
+S:Platform:RTEMS
+S:Compiler:10.0.1 20200406 (RTEMS 6, RSB bec88a6dd856892c3e66e4598252ea07d7a0d762, Newlib ece49e4)
+S:Version:6.0.0.929e49a54ab4d2d18c9fb8d03610614f63e25b8d
+S:BSP:realview_pbx_a9_qemu
+S:RTEMS_DEBUG:1
+S:RTEMS_MULTIPROCESSING:0
+S:RTEMS_POSIX_API:1
+S:RTEMS_PROFILING:0
+S:RTEMS_SMP:1
+B:SemaphoreReleasePriorityWithoutTimeoutReverse
+P:0:0:UI1:spintrcritical01impl.h:133
+P:1:0:UI1:spintrcritical01impl.h:136
+P:2:0:UI1:spintrcritical01impl.h:139
+E:SemaphoreReleasePriorityWithoutTimeoutReverse:N:3:F:0:D:0.992161
+Z:SPINTRCRITICAL 5:C:1:N:3:F:0:D:0.993438
+Y:ReportHash:SHA256:577ac55f827103c83e8a851796041d45d9545e7f02e49417fdb0b876108c6327
+
+*** END OF TEST SPINTRCRITICAL 5 ***
diff --git a/testsuites/sptests/spintrcritical06/init.c b/testsuites/sptests/spintrcritical06/init.c
deleted file mode 100644
index d8fedae772..0000000000
--- a/testsuites/sptests/spintrcritical06/init.c
+++ /dev/null
@@ -1,2 +0,0 @@
-#define PRIORITY_NO_TIMEOUT_FORWARD
-#include "spintrcritical06impl.h"
diff --git a/testsuites/sptests/spintrcritical06/spintrcritical06.doc b/testsuites/sptests/spintrcritical06/spintrcritical06.doc
deleted file mode 100644
index 6100a91218..0000000000
--- a/testsuites/sptests/spintrcritical06/spintrcritical06.doc
+++ /dev/null
@@ -1,28 +0,0 @@
-# COPYRIGHT (c) 1989-2009.
-# 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.
-#
-
-This file describes the directives and concepts tested by this test set.
-
-test set name: spintrcritical06
-
-directives:
-
- _Thread_queue_Enqueue_priority
- - interrupt synchronization
- rtems_task_restart
- _Thread_queue_Extract_priority
-
-concepts:
-
-+ Ensure that removing the "search task" from the thread queue while we
- are looping and enqueuing another works as expected. This case is where
- the TCB we are using as a current pointer is removed from the thread queue
- when we flash interrupts WHILE SEARCHING FORWARD.
-
-NOTE: There is no way to know this case is hit from a test perspective. The
- test just runs and we check the coverage report.
diff --git a/testsuites/sptests/spintrcritical06/spintrcritical06.scn b/testsuites/sptests/spintrcritical06/spintrcritical06.scn
deleted file mode 100644
index fdcf91c4f1..0000000000
--- a/testsuites/sptests/spintrcritical06/spintrcritical06.scn
+++ /dev/null
@@ -1,6 +0,0 @@
-*** TEST INTERRUPT CRITICAL SECTION 06 ***
-Init - Trying to generate semaphore release from ISR while blocking
-Init - There is no way for the test to know if it hits the case
-Init - Variation is: Priority/Restart Search Task (Forward)
-Support - rtems_timer_create - creating timer 1
-*** END OF TEST INTERRUPT CRITICAL SECTION 06 ***
diff --git a/testsuites/sptests/spintrcritical06/spintrcritical06impl.h b/testsuites/sptests/spintrcritical06/spintrcritical06impl.h
deleted file mode 100644
index f0424e3dc8..0000000000
--- a/testsuites/sptests/spintrcritical06/spintrcritical06impl.h
+++ /dev/null
@@ -1,145 +0,0 @@
-/*
- * 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.
- */
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#include <tmacros.h>
-#include <intrcritical.h>
-
-/* forward declarations to avoid warnings */
-rtems_task Init(rtems_task_argument argument);
-rtems_timer_service_routine test_release_from_isr(rtems_id timer, void *arg);
-rtems_task Secondary_task(rtems_task_argument arg);
-
-/* common parameters */
-#define SEMAPHORE_ATTRIBUTES RTEMS_PRIORITY
-
-#if defined(PRIORITY_NO_TIMEOUT_FORWARD)
- #define TEST_NAME "6"
- #define TEST_STRING "Priority/Restart Search Task (Forward)"
-
- #define INIT_PRIORITY 2
- #define BLOCKER_PRIORITY 1
- #define SEMAPHORE_OBTAIN_TIMEOUT 2
-
-#elif defined(PRIORITY_NO_TIMEOUT_REVERSE)
- #define TEST_NAME "7"
- #define TEST_STRING "Priority/Restart Search Task (Backward)"
- #define INIT_PRIORITY 126
- #define BLOCKER_PRIORITY 127
- #define SEMAPHORE_OBTAIN_TIMEOUT 0
-
-#else
-
- #error "Test Mode not defined"
-#endif
-
-const char rtems_test_name[] = "SPINTRCRITICAL " TEST_NAME;
-
-rtems_id Secondary_task_id;
-rtems_id Semaphore;
-
-rtems_timer_service_routine test_release_from_isr(
- rtems_id timer,
- void *arg
-)
-{
- (void) rtems_task_restart( Secondary_task_id, 1 );
-}
-
-rtems_task Secondary_task(
- rtems_task_argument arg
-)
-{
- if ( arg )
- (void) rtems_semaphore_flush( Semaphore );
-
- (void) rtems_semaphore_obtain(
- Semaphore,
- RTEMS_DEFAULT_OPTIONS,
- RTEMS_NO_TIMEOUT
- );
-
- rtems_test_assert(0);
-}
-
-static bool test_body( void *arg )
-{
- (void) arg;
-
- rtems_semaphore_obtain(
- Semaphore,
- RTEMS_DEFAULT_OPTIONS,
- SEMAPHORE_OBTAIN_TIMEOUT
- );
-
- return false;
-}
-
-rtems_task Init(
- rtems_task_argument ignored
-)
-{
- rtems_status_code status;
-
- TEST_BEGIN();
-
- puts( "Init - Trying to generate semaphore release from ISR while blocking" );
- puts( "Init - There is no way for the test to know if it hits the case" );
- puts( "Init - Variation is: " TEST_STRING );
- status = rtems_semaphore_create(
- rtems_build_name( 'S', 'M', '1', ' ' ),
- 0,
- SEMAPHORE_ATTRIBUTES,
- RTEMS_NO_PRIORITY,
- &Semaphore
- );
- directive_failed( status, "rtems_semaphore_create of SM1" );
-
- status = rtems_task_create(
- rtems_build_name( 'B', 'L', 'C', 'K' ),
- BLOCKER_PRIORITY,
- RTEMS_MINIMUM_STACK_SIZE,
- RTEMS_NO_PREEMPT,
- RTEMS_DEFAULT_ATTRIBUTES,
- &Secondary_task_id
- );
- directive_failed( status, "rtems_task_create" );
-
- status = rtems_task_start( Secondary_task_id, Secondary_task, 0 );
- directive_failed( status, "rtems_task_start" );
-
- interrupt_critical_section_test( test_body, NULL, test_release_from_isr );
-
- TEST_END();
- rtems_test_exit(0);
-}
-
-/* configuration information */
-
-#define CONFIGURE_APPLICATION_NEEDS_SIMPLE_CONSOLE_DRIVER
-#define CONFIGURE_APPLICATION_NEEDS_CLOCK_DRIVER
-
-#define CONFIGURE_MAXIMUM_TASKS 2
-#define CONFIGURE_MAXIMUM_TIMERS 1
-#define CONFIGURE_MAXIMUM_SEMAPHORES 1
-#define CONFIGURE_MAXIMUM_USER_EXTENSIONS 1
-#define CONFIGURE_INIT_TASK_PRIORITY INIT_PRIORITY
-#define CONFIGURE_INIT_TASK_INITIAL_MODES RTEMS_PREEMPT
-#define CONFIGURE_MICROSECONDS_PER_TICK 2000
-#define CONFIGURE_INITIAL_EXTENSIONS RTEMS_TEST_INITIAL_EXTENSION
-
-#define CONFIGURE_RTEMS_INIT_TASKS_TABLE
-
-#define CONFIGURE_INIT
-#include <rtems/confdefs.h>
-
-/* global variables */
diff --git a/testsuites/sptests/spintrcritical07/init.c b/testsuites/sptests/spintrcritical07/init.c
deleted file mode 100644
index 0c4f2a7f78..0000000000
--- a/testsuites/sptests/spintrcritical07/init.c
+++ /dev/null
@@ -1,2 +0,0 @@
-#define PRIORITY_NO_TIMEOUT_REVERSE
-#include "../spintrcritical06/spintrcritical06impl.h"
diff --git a/testsuites/sptests/spintrcritical07/spintrcritical07.doc b/testsuites/sptests/spintrcritical07/spintrcritical07.doc
deleted file mode 100644
index 2d8e2cd045..0000000000
--- a/testsuites/sptests/spintrcritical07/spintrcritical07.doc
+++ /dev/null
@@ -1,28 +0,0 @@
-# COPYRIGHT (c) 1989-2009.
-# 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.
-#
-
-This file describes the directives and concepts tested by this test set.
-
-test set name: spintrcritical07
-
-directives:
-
- _Thread_queue_Enqueue_priority
- - interrupt synchronization
- rtems_task_restart
- _Thread_queue_Extract_priority
-
-concepts:
-
-+ Ensure that removing the "search task" from the thread queue while we
- are looping and enqueuing another works as expected. This case is where
- the TCB we are using as a current pointer is removed from the thread queue
- when we flash interrupts WHILE SEARCHING FORWARD.
-
-NOTE: There is no way to know this case is hit from a test perspective. The
- test just runs and we check the coverage report.
diff --git a/testsuites/sptests/spintrcritical07/spintrcritical07.scn b/testsuites/sptests/spintrcritical07/spintrcritical07.scn
deleted file mode 100644
index 0f6dd8a3a3..0000000000
--- a/testsuites/sptests/spintrcritical07/spintrcritical07.scn
+++ /dev/null
@@ -1,6 +0,0 @@
-*** TEST INTERRUPT CRITICAL SECTION 07 ***
-Init - Trying to generate semaphore release from ISR while blocking
-Init - There is no way for the test to know if it hits the case
-Init - Variation is: Priority/Restart Search Task (Backward)
-Support - rtems_timer_create - creating timer 1
-*** END OF TEST INTERRUPT CRITICAL SECTION 07 ***
diff --git a/testsuites/sptests/spintrcritical08/init.c b/testsuites/sptests/spintrcritical08/init.c
index aab5701ed4..7b55a2e328 100644
--- a/testsuites/sptests/spintrcritical08/init.c
+++ b/testsuites/sptests/spintrcritical08/init.c
@@ -1,4 +1,6 @@
/*
+ * Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+ *
* COPYRIGHT (c) 1989-2012.
* On-Line Applications Research Corporation (OAR).
*
@@ -11,111 +13,168 @@
#include "config.h"
#endif
-#include <tmacros.h>
-#include <intrcritical.h>
+#include <string.h>
+
+#include <rtems/test.h>
+#include <rtems/test-info.h>
+
#include <rtems/score/watchdogimpl.h>
#include <rtems/rtems/ratemonimpl.h>
const char rtems_test_name[] = "SPINTRCRITICAL 8";
-/* forward declarations to avoid warnings */
-rtems_task Init(rtems_task_argument argument);
-
-static rtems_id Period;
-
-static volatile bool case_hit = false;
-
-static Thread_Control *thread;
+typedef struct {
+ rtems_id period;
+ Thread_Control *thread;
+} test_context;
-static rtems_rate_monotonic_period_states getState(void)
+static rtems_rate_monotonic_period_states getState(test_context *ctx)
{
Rate_monotonic_Control *the_period;
ISR_lock_Context lock_context;
- the_period = _Rate_monotonic_Get( Period, &lock_context );
- rtems_test_assert( the_period != NULL );
+ the_period = _Rate_monotonic_Get( ctx->period, &lock_context );
+ T_quiet_assert_not_null( the_period );
_ISR_lock_ISR_enable( &lock_context );
return the_period->state;
}
-static rtems_timer_service_routine test_release_from_isr(
- rtems_id timer,
- void *arg
-)
+static T_interrupt_test_state interrupt( void *arg )
{
- Per_CPU_Control *cpu = _Per_CPU_Get();
- Watchdog_Header *header = &cpu->Watchdog.Header[ PER_CPU_WATCHDOG_TICKS ];
- Watchdog_Control *watchdog = (Watchdog_Control *) header->first;
-
- if (
- watchdog != NULL
- && watchdog->expire == cpu->Watchdog.ticks
- && watchdog->routine == _Rate_monotonic_Timeout
- ) {
- Thread_Wait_flags flags = _Thread_Wait_flags_get( thread );
-
- _Watchdog_Per_CPU_remove_ticks( watchdog );
-
- rtems_test_assert( getState() == RATE_MONOTONIC_ACTIVE );
-
- (*watchdog->routine)( watchdog );
-
- if ( flags == RATE_MONOTONIC_INTEND_TO_BLOCK ) {
- rtems_test_assert(
- _Thread_Wait_flags_get( thread ) == RATE_MONOTONIC_READY_AGAIN
- );
- rtems_test_assert( getState() == RATE_MONOTONIC_ACTIVE );
- case_hit = true;
- }
+ test_context *ctx;
+ Per_CPU_Control *cpu_self;
+ Watchdog_Header *header;
+ Watchdog_Control *watchdog;
+ T_interrupt_test_state state;
+ Thread_Wait_flags flags;
+ ISR_Level level;
+ rtems_rate_monotonic_period_states previous_period_state;
+
+ state = T_interrupt_test_get_state();
+
+ if ( state != T_INTERRUPT_TEST_ACTION ) {
+ return T_INTERRUPT_TEST_CONTINUE;
}
+
+ ctx = arg;
+ cpu_self = _Per_CPU_Get();
+ header = &cpu_self->Watchdog.Header[ PER_CPU_WATCHDOG_TICKS ];
+ watchdog = (Watchdog_Control *) header->first;
+ T_quiet_assert_not_null( watchdog );
+ T_quiet_eq_u64( watchdog->expire, cpu_self->Watchdog.ticks );
+ T_quiet_eq_ptr( watchdog->routine, _Rate_monotonic_Timeout );
+
+ flags = _Thread_Wait_flags_get( ctx->thread );
+
+ _ISR_Local_disable( level );
+ _Watchdog_Per_CPU_remove( watchdog, cpu_self, header );
+ _ISR_Local_enable( level );
+
+ previous_period_state = getState( ctx );
+ ( *watchdog->routine )( watchdog );
+
+ if ( flags == RATE_MONOTONIC_INTEND_TO_BLOCK ) {
+ T_quiet_eq_int( previous_period_state, RATE_MONOTONIC_ACTIVE );
+ T_quiet_eq_int( getState( ctx ), RATE_MONOTONIC_ACTIVE );
+ state = T_INTERRUPT_TEST_DONE;
+ } else if ( flags == THREAD_WAIT_FLAGS_INITIAL ) {
+ T_quiet_true(
+ previous_period_state == RATE_MONOTONIC_ACTIVE
+ || previous_period_state == RATE_MONOTONIC_EXPIRED
+ );
+ state = T_INTERRUPT_TEST_EARLY;
+ } else {
+ T_quiet_eq_int( flags, RATE_MONOTONIC_BLOCKED );
+ T_quiet_true(
+ previous_period_state == RATE_MONOTONIC_ACTIVE
+ || previous_period_state == RATE_MONOTONIC_EXPIRED
+ );
+ state = T_INTERRUPT_TEST_LATE;
+ }
+
+ return state;
}
-static bool test_body( void *arg )
+static void prepare( void *arg )
{
- rtems_status_code sc;
-
- (void) arg;
+ test_context *ctx;
+ rtems_status_code sc;
+ ISR_Level level;
+ bool success;
+
+ ctx = arg;
+
+ do {
+ sc = rtems_rate_monotonic_cancel( ctx->period );
+ T_quiet_rsc_success( sc );
+
+ sc = rtems_rate_monotonic_period( ctx->period, 1 );
+ T_quiet_rsc_success( sc );
+
+ /*
+ * Depending on the time to the next clock tick and the CPU time available
+ * to a simulator, we may get sporadic RTEMS_TIMEOUT here. In the next
+ * round we are synchronized with the clock tick.
+ */
+ sc = rtems_rate_monotonic_period( ctx->period, 1 );
+ } while ( sc != RTEMS_SUCCESSFUL );
+
+ _ISR_Local_disable( level );
+ success = _Thread_Wait_flags_try_change_release(
+ ctx->thread,
+ RATE_MONOTONIC_READY_AGAIN,
+ THREAD_WAIT_FLAGS_INITIAL
+ );
+ _ISR_Local_enable( level );
+ T_quiet_true( success );
+}
- sc = rtems_rate_monotonic_cancel( Period );
- rtems_test_assert( sc == RTEMS_SUCCESSFUL );
+static void action( void *arg )
+{
+ test_context *ctx;
+ rtems_status_code sc;
- sc = rtems_rate_monotonic_period( Period, 1 );
- rtems_test_assert( sc == RTEMS_SUCCESSFUL );
+ ctx = arg;
- sc = rtems_rate_monotonic_period( Period, 1 );
- rtems_test_assert( sc == RTEMS_SUCCESSFUL || sc == RTEMS_TIMEOUT );
+ sc = rtems_rate_monotonic_period( ctx->period, 1 );
+ T_quiet_true( sc == RTEMS_SUCCESSFUL || sc == RTEMS_TIMEOUT );
- return case_hit;
+ T_interrupt_test_busy_wait_for_interrupt();
}
-rtems_task Init(
- rtems_task_argument ignored
-)
-{
- rtems_status_code sc;
-
- TEST_BEGIN();
+static const T_interrupt_test_config config = {
+ .prepare = prepare,
+ .action = action,
+ .interrupt = interrupt,
+ .max_iteration_count = 10000
+};
- puts( "Init - Trying to generate period ending while blocking" );
+T_TEST_CASE( RateMonotonicPeriodInterrupt )
+{
+ test_context ctx;
+ rtems_status_code sc;
+ T_interrupt_test_state state;
- thread = _Thread_Get_executing();
+ memset( &ctx, 0 , sizeof( ctx ) );
+ ctx.thread = _Thread_Get_executing();
- puts( "Init - rtems_rate_monotonic_create - OK" );
sc = rtems_rate_monotonic_create(
rtems_build_name( 'P', 'E', 'R', '1' ),
- &Period
+ &ctx.period
);
- directive_failed( sc, "rtems_rate_monotonic_create" );
+ T_rsc_success( sc );
- interrupt_critical_section_test( test_body, NULL, test_release_from_isr );
+ state = T_interrupt_test( &config, &ctx );
+ T_eq_int( state, T_INTERRUPT_TEST_DONE );
- if ( case_hit ) {
- puts( "Init - It appears the case has been hit" );
- TEST_END();
- } else
- puts( "Init - Case not hit - ran too long" );
- rtems_test_exit(0);
+ sc = rtems_rate_monotonic_delete( ctx.period );
+ T_rsc_success( sc );
+}
+
+static rtems_task Init( rtems_task_argument argument )
+{
+ rtems_test_run( argument, TEST_STATE );
}
/* configuration information */
@@ -123,11 +182,10 @@ rtems_task Init(
#define CONFIGURE_APPLICATION_NEEDS_SIMPLE_CONSOLE_DRIVER
#define CONFIGURE_APPLICATION_NEEDS_CLOCK_DRIVER
-#define CONFIGURE_MAXIMUM_TASKS 2
-#define CONFIGURE_MAXIMUM_TIMERS 1
+#define CONFIGURE_MAXIMUM_TASKS 1
#define CONFIGURE_MAXIMUM_PERIODS 1
-#define CONFIGURE_MAXIMUM_USER_EXTENSIONS 1
-#define CONFIGURE_MICROSECONDS_PER_TICK 1000
+
+#define CONFIGURE_MICROSECONDS_PER_TICK 10000
#define CONFIGURE_INITIAL_EXTENSIONS RTEMS_TEST_INITIAL_EXTENSION
#define CONFIGURE_RTEMS_INIT_TASKS_TABLE
diff --git a/testsuites/sptests/spintrcritical08/spintrcritical08.scn b/testsuites/sptests/spintrcritical08/spintrcritical08.scn
index 86aa7fad54..c9791a9e42 100644
--- a/testsuites/sptests/spintrcritical08/spintrcritical08.scn
+++ b/testsuites/sptests/spintrcritical08/spintrcritical08.scn
@@ -1,6 +1,24 @@
-*** TEST INTERRUPT CRITICAL SECTION 08 ***
-Init - Trying to generate period ending while blocking
-Init - rtems_rate_monotonic_create - OK
-Support - rtems_timer_create - creating timer 1
-Init - It appears the case has been hit
-*** END OF TEST INTERRUPT CRITICAL SECTION 08 ***
+*** BEGIN OF TEST SPINTRCRITICAL 8 ***
+*** TEST VERSION: 6.0.0.929e49a54ab4d2d18c9fb8d03610614f63e25b8d
+*** TEST STATE: EXPECTED_PASS
+*** TEST BUILD: RTEMS_DEBUG RTEMS_POSIX_API RTEMS_SMP
+*** TEST TOOLS: 10.0.1 20200406 (RTEMS 6, RSB bec88a6dd856892c3e66e4598252ea07d7a0d762, Newlib ece49e4)
+A:SPINTRCRITICAL 8
+S:Platform:RTEMS
+S:Compiler:10.0.1 20200406 (RTEMS 6, RSB bec88a6dd856892c3e66e4598252ea07d7a0d762, Newlib ece49e4)
+S:Version:6.0.0.929e49a54ab4d2d18c9fb8d03610614f63e25b8d
+S:BSP:realview_pbx_a9_qemu
+S:RTEMS_DEBUG:1
+S:RTEMS_MULTIPROCESSING:0
+S:RTEMS_POSIX_API:1
+S:RTEMS_PROFILING:0
+S:RTEMS_SMP:1
+B:RateMonotonicPeriodInterrupt
+P:0:0:UI1:init.c:156
+P:1:0:UI1:init.c:159
+P:2:0:UI1:init.c:162
+E:RateMonotonicPeriodInterrupt:N:3:F:0:D:0.057652
+Z:SPINTRCRITICAL 8:C:1:N:3:F:0:D:0.058758
+Y:ReportHash:SHA256:381af5dc18c561d18b7b3ead593defa1aef4835f918df9edee7fe1ded0e089da
+
+*** END OF TEST SPINTRCRITICAL 8 ***
diff --git a/testsuites/sptests/spintrcritical09/init.c b/testsuites/sptests/spintrcritical09/init.c
index 63cfa2b5fb..3d82febd6f 100644
--- a/testsuites/sptests/spintrcritical09/init.c
+++ b/testsuites/sptests/spintrcritical09/init.c
@@ -1,4 +1,6 @@
/*
+ * Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+ *
* COPYRIGHT (c) 1989-2012.
* On-Line Applications Research Corporation (OAR).
*
@@ -11,8 +13,8 @@
#include "config.h"
#endif
-#include <tmacros.h>
-#include <intrcritical.h>
+#include <rtems/test.h>
+#include <rtems/test-info.h>
#include <rtems/score/threadimpl.h>
#include <rtems/score/threadimpl.h>
@@ -20,82 +22,117 @@
const char rtems_test_name[] = "SPINTRCRITICAL 9";
-static Thread_Control *thread;
-
-static rtems_id Semaphore;
+typedef struct {
+ Thread_Control *thread;
+ rtems_id semaphore;
+ volatile bool early;
+} test_context;
-static bool case_hit;
-
-static bool is_interrupt_timeout(void)
+static bool is_interrupt_timeout( test_context *ctx )
{
- Thread_Wait_flags flags = _Thread_Wait_flags_get( thread );
+ Thread_Wait_flags flags = _Thread_Wait_flags_get( ctx->thread );
return flags == ( THREAD_WAIT_CLASS_OBJECT | THREAD_WAIT_STATE_READY_AGAIN );
}
-static rtems_timer_service_routine test_release_from_isr(
- rtems_id timer,
- void *arg
-)
+static T_interrupt_test_state interrupt( void *arg )
{
- Per_CPU_Control *cpu_self = _Per_CPU_Get();
- Watchdog_Header *header = &cpu_self->Watchdog.Header[ PER_CPU_WATCHDOG_TICKS ];
- Watchdog_Control *watchdog = (Watchdog_Control *) header->first;
+ test_context *ctx;
+ Per_CPU_Control *cpu_self;
+ Watchdog_Header *header;
+ Watchdog_Control *watchdog;
+ T_interrupt_test_state state;
+
+ ctx = arg;
+ cpu_self = _Per_CPU_Get();
+ header = &cpu_self->Watchdog.Header[ PER_CPU_WATCHDOG_TICKS ];
+ watchdog = (Watchdog_Control *) header->first;
if (
watchdog != NULL
&& watchdog->expire == cpu_self->Watchdog.ticks
&& watchdog->routine == _Thread_Timeout
) {
+ ISR_Level level;
+
+ _ISR_Local_disable( level );
_Watchdog_Per_CPU_remove( watchdog, cpu_self, header );
+ _ISR_Local_enable( level );
- (*watchdog->routine)( watchdog );
+ ( *watchdog->routine )( watchdog );
- if ( is_interrupt_timeout() ) {
- case_hit = true;
+ if ( is_interrupt_timeout( ctx ) ) {
+ state = T_INTERRUPT_TEST_DONE;
+ } else {
+ state = T_INTERRUPT_TEST_LATE;
+ }
+ } else {
+ if ( ctx->early ) {
+ state = T_INTERRUPT_TEST_EARLY;
+ } else {
+ state = T_INTERRUPT_TEST_LATE;
}
}
+
+ return state;
}
-static bool test_body( void *arg )
+static void prepare( void *arg )
{
- (void) arg;
+ test_context *ctx;
+ rtems_status_code sc;
- rtems_semaphore_obtain( Semaphore, RTEMS_DEFAULT_OPTIONS, 1 );
-
- return case_hit;
+ ctx = arg;
+ ctx->early = true;
+ sc = rtems_semaphore_obtain( ctx->semaphore, RTEMS_NO_WAIT, 0 );
+ T_quiet_true( sc == RTEMS_SUCCESSFUL || sc == RTEMS_UNSATISFIED );
}
-static rtems_task Init(
- rtems_task_argument ignored
-)
+static void action( void *arg )
{
- rtems_status_code sc;
+ test_context *ctx;
+ rtems_status_code sc;
+
+ ctx = arg;
+ ctx->early = false;
+ sc = rtems_semaphore_obtain( ctx->semaphore, RTEMS_DEFAULT_OPTIONS, 1 );
+ T_quiet_rsc( sc, RTEMS_TIMEOUT );
+}
- TEST_BEGIN();
+static const T_interrupt_test_config config = {
+ .prepare = prepare,
+ .action = action,
+ .interrupt = interrupt,
+ .max_iteration_count = 10000
+};
- thread = _Thread_Get_executing();
+T_TEST_CASE( SemaphoreObtainInterrupt )
+{
+ test_context ctx;
+ rtems_status_code sc;
+ T_interrupt_test_state state;
+
+ ctx.thread = _Thread_Get_executing();
- puts( "Init - Test may not be able to detect case is hit reliably" );
- puts( "Init - Trying to generate timeout from ISR while blocking" );
sc = rtems_semaphore_create(
rtems_build_name( 'S', 'M', '1', ' ' ),
0,
RTEMS_DEFAULT_ATTRIBUTES,
RTEMS_NO_PRIORITY,
- &Semaphore
+ &ctx.semaphore
);
- directive_failed( sc, "rtems_semaphore_create of SM1" );
+ T_assert_rsc_success( sc );
- interrupt_critical_section_test( test_body, NULL, test_release_from_isr );
+ state = T_interrupt_test( &config, &ctx );
+ T_eq_int( state, T_INTERRUPT_TEST_DONE );
- if ( case_hit ) {
- puts( "Init - It appears the case has been hit" );
- TEST_END();
- } else
- puts( "Init - Case not hit - ran too long" );
+ sc = rtems_semaphore_delete( ctx.semaphore );
+ T_rsc_success( sc );
+}
- rtems_test_exit(0);
+static rtems_task Init( rtems_task_argument argument )
+{
+ rtems_test_run( argument, TEST_STATE );
}
/* configuration information */
@@ -104,9 +141,7 @@ static rtems_task Init(
#define CONFIGURE_APPLICATION_NEEDS_CLOCK_DRIVER
#define CONFIGURE_MAXIMUM_TASKS 1
-#define CONFIGURE_MAXIMUM_TIMERS 1
#define CONFIGURE_MAXIMUM_SEMAPHORES 1
-#define CONFIGURE_MAXIMUM_USER_EXTENSIONS 1
#define CONFIGURE_INITIAL_EXTENSIONS RTEMS_TEST_INITIAL_EXTENSION
#define CONFIGURE_RTEMS_INIT_TASKS_TABLE
diff --git a/testsuites/sptests/spintrcritical09/spintrcritical09.scn b/testsuites/sptests/spintrcritical09/spintrcritical09.scn
index 19f11b127b..ef203c0700 100644
--- a/testsuites/sptests/spintrcritical09/spintrcritical09.scn
+++ b/testsuites/sptests/spintrcritical09/spintrcritical09.scn
@@ -1,4 +1,24 @@
-*** TEST INTERRUPT CRITICAL SECTION 09 ***
-Init - Test may not be able to detect case is hit reliably
-Init - Trying to generate timeout from ISR while blocking
-Support - rtems_timer_create - creating timer 1
+*** BEGIN OF TEST SPINTRCRITICAL 9 ***
+*** TEST VERSION: 6.0.0.929e49a54ab4d2d18c9fb8d03610614f63e25b8d
+*** TEST STATE: EXPECTED_PASS
+*** TEST BUILD: RTEMS_DEBUG RTEMS_POSIX_API RTEMS_SMP
+*** TEST TOOLS: 10.0.1 20200406 (RTEMS 6, RSB bec88a6dd856892c3e66e4598252ea07d7a0d762, Newlib ece49e4)
+A:SPINTRCRITICAL 9
+S:Platform:RTEMS
+S:Compiler:10.0.1 20200406 (RTEMS 6, RSB bec88a6dd856892c3e66e4598252ea07d7a0d762, Newlib ece49e4)
+S:Version:6.0.0.929e49a54ab4d2d18c9fb8d03610614f63e25b8d
+S:BSP:realview_pbx_a9_qemu
+S:RTEMS_DEBUG:1
+S:RTEMS_MULTIPROCESSING:0
+S:RTEMS_POSIX_API:1
+S:RTEMS_PROFILING:0
+S:RTEMS_SMP:1
+B:SemaphoreObtainInterrupt
+P:0:0:UI1:init.c:124
+P:1:0:UI1:init.c:127
+P:2:0:UI1:init.c:130
+E:SemaphoreObtainInterrupt:N:3:F:0:D:0.060862
+Z:SPINTRCRITICAL 9:C:1:N:3:F:0:D:0.061985
+Y:ReportHash:SHA256:432e69ffa61dcb2eaef5b67504104b7da761a56e2c1943cf64973c4a89885008
+
+*** END OF TEST SPINTRCRITICAL 9 ***
diff --git a/testsuites/sptests/spintrcritical10/init.c b/testsuites/sptests/spintrcritical10/init.c
index fff1991cbc..8210853588 100644
--- a/testsuites/sptests/spintrcritical10/init.c
+++ b/testsuites/sptests/spintrcritical10/init.c
@@ -2,7 +2,7 @@
* COPYRIGHT (c) 1989-2012.
* On-Line Applications Research Corporation (OAR).
*
- * Copyright (c) 2013 embedded brains GmbH.
+ * Copyright (c) 2013, 2020 embedded brains GmbH.
*
* The license and distribution terms for this file may be
* found in the file LICENSE in this distribution or at
@@ -14,13 +14,15 @@
#endif
#include <tmacros.h>
-#include <intrcritical.h>
+#include <rtems/test.h>
#include <rtems/score/threadimpl.h>
#include <rtems/rtems/eventimpl.h>
const char rtems_test_name[] = "SPINTRCRITICAL 10";
+#define MAX_ITERATION_COUNT 10000
+
#define GREEN RTEMS_EVENT_0
#define RED RTEMS_EVENT_1
@@ -30,9 +32,7 @@ const char rtems_test_name[] = "SPINTRCRITICAL 10";
#define DEADBEEF 0xdeadbeef
typedef struct {
- rtems_id timer;
Thread_Control *thread;
- bool hit;
} test_context;
static bool blocks_for_event(Thread_Wait_flags flags)
@@ -47,15 +47,20 @@ static bool interrupts_blocking_op(Thread_Wait_flags flags)
flags == (THREAD_WAIT_CLASS_EVENT | THREAD_WAIT_STATE_INTEND_TO_BLOCK);
}
-static void any_satisfy_before_timeout(rtems_id timer, void *arg)
+static T_interrupt_test_state any_satisfy_before_timeout_interrupt(void *arg)
{
rtems_status_code sc;
test_context *ctx = arg;
Thread_Control *thread = ctx->thread;
Thread_Wait_flags flags = _Thread_Wait_flags_get(thread);
+ T_interrupt_test_state state;
if (blocks_for_event(flags)) {
- ctx->hit = interrupts_blocking_op(flags);
+ if (interrupts_blocking_op(flags)) {
+ state = T_INTERRUPT_TEST_DONE;
+ } else {
+ state = T_INTERRUPT_TEST_LATE;
+ }
rtems_test_assert(
*(rtems_event_set *) thread->Wait.return_argument == DEADBEEF
@@ -85,7 +90,7 @@ static void any_satisfy_before_timeout(rtems_id timer, void *arg)
);
rtems_test_assert(_Thread_Wait_get_status(thread) == STATUS_SUCCESSFUL);
- if (ctx->hit) {
+ if (state == T_INTERRUPT_TEST_DONE) {
rtems_test_assert(
_Thread_Wait_flags_get(thread)
== (THREAD_WAIT_CLASS_EVENT | THREAD_WAIT_STATE_READY_AGAIN)
@@ -93,18 +98,20 @@ static void any_satisfy_before_timeout(rtems_id timer, void *arg)
}
rtems_test_assert(thread->Wait.count == EVENTS);
+ } else {
+ state = T_INTERRUPT_TEST_EARLY;
}
- sc = rtems_timer_reset(timer);
- rtems_test_assert(sc == RTEMS_SUCCESSFUL);
+ return state;
}
-static bool test_body_any_satisfy_before_timeout(void *arg)
+static void any_satisfy_before_timeout_action(void *arg)
{
- test_context *ctx = arg;
rtems_status_code sc;
rtems_event_set out;
+ (void) arg;
+
out = DEADBEEF;
sc = rtems_event_receive(EVENTS, RTEMS_EVENT_ANY | RTEMS_WAIT, 1, &out);
rtems_test_assert(sc == RTEMS_SUCCESSFUL);
@@ -114,45 +121,38 @@ static bool test_body_any_satisfy_before_timeout(void *arg)
sc = rtems_event_receive(EVENTS, RTEMS_EVENT_ANY | RTEMS_NO_WAIT, 0, &out);
rtems_test_assert(sc == RTEMS_SUCCESSFUL);
rtems_test_assert(out == RED);
-
- return ctx->hit;
}
-static void test_any_satisfy_before_timeout(test_context *ctx)
-{
- rtems_status_code sc;
-
- puts(
- "Init - Trying to generate any satisfied before timeout "
- "while blocking on event"
- );
-
- ctx->hit = false;
-
- sc = rtems_timer_fire_after(ctx->timer, 1, any_satisfy_before_timeout, ctx);
- rtems_test_assert(sc == RTEMS_SUCCESSFUL);
-
- interrupt_critical_section_test(
- test_body_any_satisfy_before_timeout,
- ctx,
- NULL
- );
+static const T_interrupt_test_config any_satisfy_before_timeout_config = {
+ .action = any_satisfy_before_timeout_action,
+ .interrupt = any_satisfy_before_timeout_interrupt,
+ .max_iteration_count = MAX_ITERATION_COUNT
+};
- sc = rtems_timer_cancel(ctx->timer);
- rtems_test_assert(sc == RTEMS_SUCCESSFUL);
+T_TEST_CASE(EventAnySatisfyBeforeTimeout)
+{
+ test_context ctx;
+ T_interrupt_test_state state;
- rtems_test_assert(ctx->hit);
+ ctx.thread = _Thread_Get_executing();
+ state = T_interrupt_test(&any_satisfy_before_timeout_config, &ctx);
+ T_eq_int(state, T_INTERRUPT_TEST_DONE);
}
-static void all_satisfy_before_timeout(rtems_id timer, void *arg)
+static T_interrupt_test_state all_satisfy_before_timeout_interrupt(void *arg)
{
rtems_status_code sc;
test_context *ctx = arg;
Thread_Control *thread = ctx->thread;
Thread_Wait_flags flags = _Thread_Wait_flags_get(thread);
+ T_interrupt_test_state state;
if (blocks_for_event(flags)) {
- ctx->hit = interrupts_blocking_op(flags);
+ if (interrupts_blocking_op(flags)) {
+ state = T_INTERRUPT_TEST_DONE;
+ } else {
+ state = T_INTERRUPT_TEST_LATE;
+ }
rtems_test_assert(
*(rtems_event_set *) thread->Wait.return_argument == DEADBEEF
@@ -182,7 +182,7 @@ static void all_satisfy_before_timeout(rtems_id timer, void *arg)
);
rtems_test_assert(_Thread_Wait_get_status(thread) == STATUS_SUCCESSFUL);
- if (ctx->hit) {
+ if (state == T_INTERRUPT_TEST_DONE) {
rtems_test_assert(
_Thread_Wait_flags_get(thread)
== (THREAD_WAIT_CLASS_EVENT | THREAD_WAIT_STATE_READY_AGAIN)
@@ -190,15 +190,15 @@ static void all_satisfy_before_timeout(rtems_id timer, void *arg)
}
rtems_test_assert(thread->Wait.count == EVENTS);
+ } else {
+ state = T_INTERRUPT_TEST_EARLY;
}
- sc = rtems_timer_reset(timer);
- rtems_test_assert(sc == RTEMS_SUCCESSFUL);
+ return state;
}
-static bool test_body_all_satisfy_before_timeout(void *arg)
+static void all_satisfy_before_timeout_action(void *arg)
{
- test_context *ctx = arg;
rtems_status_code sc;
rtems_event_set out;
@@ -206,45 +206,38 @@ static bool test_body_all_satisfy_before_timeout(void *arg)
sc = rtems_event_receive(EVENTS, RTEMS_EVENT_ALL | RTEMS_WAIT, 1, &out);
rtems_test_assert(sc == RTEMS_SUCCESSFUL);
rtems_test_assert(out == EVENTS);
-
- return ctx->hit;
}
-static void test_all_satisfy_before_timeout(test_context *ctx)
-{
- rtems_status_code sc;
-
- puts(
- "Init - Trying to generate all satisfied before timeout "
- "while blocking on event"
- );
-
- ctx->hit = false;
+static const T_interrupt_test_config all_satisfy_before_timeout_config = {
+ .action = all_satisfy_before_timeout_action,
+ .interrupt = all_satisfy_before_timeout_interrupt,
+ .max_iteration_count = MAX_ITERATION_COUNT
+};
- sc = rtems_timer_fire_after(ctx->timer, 1, all_satisfy_before_timeout, ctx);
- rtems_test_assert(sc == RTEMS_SUCCESSFUL);
-
- interrupt_critical_section_test(
- test_body_all_satisfy_before_timeout,
- ctx,
- NULL
- );
-
- sc = rtems_timer_cancel(ctx->timer);
- rtems_test_assert(sc == RTEMS_SUCCESSFUL);
+T_TEST_CASE(EventAllSatisfyBeforeTimeout)
+{
+ test_context ctx;
+ T_interrupt_test_state state;
- rtems_test_assert(ctx->hit);
+ ctx.thread = _Thread_Get_executing();
+ state = T_interrupt_test(&all_satisfy_before_timeout_config, &ctx);
+ T_eq_int(state, T_INTERRUPT_TEST_DONE);
}
-static void timeout_before_satisfied(rtems_id timer, void *arg)
+static T_interrupt_test_state timeout_before_satisfied_interrupt(void *arg)
{
rtems_status_code sc;
test_context *ctx = arg;
Thread_Control *thread = ctx->thread;
Thread_Wait_flags flags = _Thread_Wait_flags_get(thread);
+ T_interrupt_test_state state;
if (blocks_for_event(flags)) {
- ctx->hit = interrupts_blocking_op(flags);
+ if (interrupts_blocking_op(flags)) {
+ state = T_INTERRUPT_TEST_DONE;
+ } else {
+ state = T_INTERRUPT_TEST_LATE;
+ }
rtems_test_assert(
*(rtems_event_set *) thread->Wait.return_argument == DEADBEEF
@@ -266,7 +259,7 @@ static void timeout_before_satisfied(rtems_id timer, void *arg)
);
rtems_test_assert(_Thread_Wait_get_status(thread) == STATUS_TIMEOUT);
- if (ctx->hit) {
+ if (state == T_INTERRUPT_TEST_DONE) {
rtems_test_assert(
_Thread_Wait_flags_get(thread)
== (THREAD_WAIT_CLASS_EVENT | THREAD_WAIT_STATE_READY_AGAIN)
@@ -274,15 +267,15 @@ static void timeout_before_satisfied(rtems_id timer, void *arg)
}
rtems_test_assert(thread->Wait.count == EVENTS);
+ } else {
+ state = T_INTERRUPT_TEST_EARLY;
}
- sc = rtems_timer_reset(timer);
- rtems_test_assert(sc == RTEMS_SUCCESSFUL);
+ return state;
}
-static bool test_body_timeout_before_all_satisfy(void *arg)
+static void timeout_before_satisfied_action(void *arg)
{
- test_context *ctx = arg;
rtems_event_set out;
rtems_status_code sc;
@@ -295,56 +288,27 @@ static bool test_body_timeout_before_all_satisfy(void *arg)
sc = rtems_event_receive(EVENTS, RTEMS_EVENT_ALL | RTEMS_NO_WAIT, 0, &out);
rtems_test_assert(sc == RTEMS_SUCCESSFUL);
rtems_test_assert(out == EVENTS);
-
- return ctx->hit;
}
-static void test_timeout_before_all_satisfy(test_context *ctx)
-{
- rtems_status_code sc;
-
- puts(
- "Init - Trying to generate timeout before all satisfied "
- "while blocking on event"
- );
-
- ctx->hit = false;
+static const T_interrupt_test_config timeout_before_satisfied_config = {
+ .action = timeout_before_satisfied_action,
+ .interrupt = timeout_before_satisfied_interrupt,
+ .max_iteration_count = MAX_ITERATION_COUNT
+};
- sc = rtems_timer_fire_after(ctx->timer, 1, timeout_before_satisfied, ctx);
- rtems_test_assert(sc == RTEMS_SUCCESSFUL);
-
- interrupt_critical_section_test(
- test_body_timeout_before_all_satisfy,
- ctx,
- NULL
- );
-
- sc = rtems_timer_cancel(ctx->timer);
- rtems_test_assert(sc == RTEMS_SUCCESSFUL);
+T_TEST_CASE(EventTimeoutBeforeSatisfied)
+{
+ test_context ctx;
+ T_interrupt_test_state state;
- rtems_test_assert(ctx->hit);
+ ctx.thread = _Thread_Get_executing();
+ state = T_interrupt_test(&timeout_before_satisfied_config, &ctx);
+ T_eq_int(state, T_INTERRUPT_TEST_DONE);
}
-static rtems_task Init(
- rtems_task_argument ignored
-)
+static rtems_task Init( rtems_task_argument argument )
{
- rtems_status_code sc;
- test_context ctx = {
- .thread = _Thread_Get_executing()
- };
-
- TEST_BEGIN();
-
- sc = rtems_timer_create(rtems_build_name('T', 'I', 'M', 'R'), &ctx.timer);
- rtems_test_assert(sc == RTEMS_SUCCESSFUL);
-
- test_any_satisfy_before_timeout(&ctx);
- test_all_satisfy_before_timeout(&ctx);
- test_timeout_before_all_satisfy(&ctx);
-
- TEST_END();
- rtems_test_exit(0);
+ rtems_test_run( argument, TEST_STATE );
}
/* configuration information */
@@ -353,8 +317,6 @@ static rtems_task Init(
#define CONFIGURE_APPLICATION_NEEDS_CLOCK_DRIVER
#define CONFIGURE_MAXIMUM_TASKS 1
-#define CONFIGURE_MAXIMUM_TIMERS 1
-#define CONFIGURE_MAXIMUM_USER_EXTENSIONS 1
#define CONFIGURE_INITIAL_EXTENSIONS RTEMS_TEST_INITIAL_EXTENSION
#define CONFIGURE_RTEMS_INIT_TASKS_TABLE
diff --git a/testsuites/sptests/spintrcritical10/spintrcritical10.scn b/testsuites/sptests/spintrcritical10/spintrcritical10.scn
index e8db0c576a..968f052190 100644
--- a/testsuites/sptests/spintrcritical10/spintrcritical10.scn
+++ b/testsuites/sptests/spintrcritical10/spintrcritical10.scn
@@ -1,5 +1,28 @@
-*** TEST INTERRUPT CRITICAL SECTION 10 ***
-Init - Trying to generate any satisfied before timeout while blocking on event
-Init - Trying to generate all satisfied before timeout while blocking on event
-Init - Trying to generate timeout before all satisfied while blocking on event
-*** END OF TEST INTERRUPT CRITICAL SECTION 10 ***
+*** BEGIN OF TEST SPINTRCRITICAL 10 ***
+*** TEST VERSION: 6.0.0.929e49a54ab4d2d18c9fb8d03610614f63e25b8d
+*** TEST STATE: EXPECTED_PASS
+*** TEST BUILD: RTEMS_DEBUG RTEMS_POSIX_API RTEMS_SMP
+*** TEST TOOLS: 10.0.1 20200406 (RTEMS 6, RSB bec88a6dd856892c3e66e4598252ea07d7a0d762, Newlib ece49e4)
+A:SPINTRCRITICAL 10
+S:Platform:RTEMS
+S:Compiler:10.0.1 20200406 (RTEMS 6, RSB bec88a6dd856892c3e66e4598252ea07d7a0d762, Newlib ece49e4)
+S:Version:6.0.0.929e49a54ab4d2d18c9fb8d03610614f63e25b8d
+S:BSP:realview_pbx_a9_qemu
+S:RTEMS_DEBUG:1
+S:RTEMS_MULTIPROCESSING:0
+S:RTEMS_POSIX_API:1
+S:RTEMS_PROFILING:0
+S:RTEMS_SMP:1
+B:EventTimeoutBeforeSatisfied
+P:0:0:UI1:init.c:306
+E:EventTimeoutBeforeSatisfied:N:1:F:0:D:0.062089
+B:EventAnySatisfyBeforeTimeout
+P:0:0:UI1:init.c:139
+E:EventAnySatisfyBeforeTimeout:N:1:F:0:D:0.009101
+B:EventAllSatisfyBeforeTimeout
+P:0:0:UI1:init.c:224
+E:EventAllSatisfyBeforeTimeout:N:1:F:0:D:0.008658
+Z:SPINTRCRITICAL 10:C:3:N:3:F:0:D:0.081653
+Y:ReportHash:SHA256:e2da8e487b37934523fa5810dc7d76f8ca736168d3019b09db80edb40dffff34
+
+*** END OF TEST SPINTRCRITICAL 10 ***
diff --git a/testsuites/sptests/spintrcritical11/spintrcritical11.scn b/testsuites/sptests/spintrcritical11/spintrcritical11.scn
index 9451d04292..26f38d037e 100644
--- a/testsuites/sptests/spintrcritical11/spintrcritical11.scn
+++ b/testsuites/sptests/spintrcritical11/spintrcritical11.scn
@@ -1,6 +1,24 @@
-*** TEST INTERRUPT CRITICAL SECTION 11 ***
-Init - Test may not be able to detect case is hit reliably
-Init - Trying to generate event send from ISR while blocking
-Init - Variation is: Event Any condition
-Support - rtems_timer_create - creating timer 1
-*** END OF TEST INTERRUPT CRITICAL SECTION 11 ***
+*** BEGIN OF TEST SPINTRCRITICAL 11 ***
+*** TEST VERSION: 6.0.0.929e49a54ab4d2d18c9fb8d03610614f63e25b8d
+*** TEST STATE: EXPECTED_PASS
+*** TEST BUILD: RTEMS_DEBUG RTEMS_POSIX_API RTEMS_SMP
+*** TEST TOOLS: 10.0.1 20200406 (RTEMS 6, RSB bec88a6dd856892c3e66e4598252ea07d7a0d762, Newlib ece49e4)
+A:SPINTRCRITICAL 11
+S:Platform:RTEMS
+S:Compiler:10.0.1 20200406 (RTEMS 6, RSB bec88a6dd856892c3e66e4598252ea07d7a0d762, Newlib ece49e4)
+S:Version:6.0.0.929e49a54ab4d2d18c9fb8d03610614f63e25b8d
+S:BSP:realview_pbx_a9_qemu
+S:RTEMS_DEBUG:1
+S:RTEMS_MULTIPROCESSING:0
+S:RTEMS_POSIX_API:1
+S:RTEMS_PROFILING:0
+S:RTEMS_SMP:1
+B:EventReceiveInterruptAny
+P:0:0:UI1:spintrcritical11impl.h:113
+L:potential hits = 999
+P:1:0:UI1:spintrcritical11impl.h:116
+E:EventReceiveInterruptAny:N:2:F:0:D:1.058417
+Z:SPINTRCRITICAL 11:C:1:N:2:F:0:D:1.059457
+Y:ReportHash:SHA256:e666eb8c6287c596e6d1851fea90f50fdcc8a52c7799ede485964d09de3fc9ed
+
+*** END OF TEST SPINTRCRITICAL 11 ***
diff --git a/testsuites/sptests/spintrcritical11/spintrcritical11impl.h b/testsuites/sptests/spintrcritical11/spintrcritical11impl.h
index fb0d320dea..162fb431b0 100644
--- a/testsuites/sptests/spintrcritical11/spintrcritical11impl.h
+++ b/testsuites/sptests/spintrcritical11/spintrcritical11impl.h
@@ -1,4 +1,6 @@
/*
+ * Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+ *
* COPYRIGHT (c) 1989-2012.
* On-Line Applications Research Corporation (OAR).
*
@@ -11,24 +13,20 @@
#include "config.h"
#endif
-#include <tmacros.h>
-#include <intrcritical.h>
-
-/* forward declarations to avoid warnings */
-rtems_task Init(rtems_task_argument argument);
-rtems_timer_service_routine test_release_from_isr(rtems_id timer, void *arg);
+#include <string.h>
-rtems_id Main_task;
+#include <rtems/test.h>
+#include <rtems/test-info.h>
#if defined(EVENT_ANY)
#define TEST_NAME "11"
- #define TEST_STRING "Event Any condition"
+ #define TEST_STRING Any
#define EVENTS_TO_SEND 0x1
#define EVENTS_TO_RECEIVE 0x3
#elif defined(EVENT_ALL)
#define TEST_NAME "12"
- #define TEST_STRING "Event All condition"
+ #define TEST_STRING All
#define EVENTS_TO_SEND 0x3
#define EVENTS_TO_RECEIVE 0x3
@@ -39,41 +37,88 @@ rtems_id Main_task;
const char rtems_test_name[] = "SPINTRCRITICAL " TEST_NAME;
-rtems_timer_service_routine test_release_from_isr(
- rtems_id timer,
- void *arg
-)
+typedef struct {
+ rtems_id main_task;
+ long potential_hits;
+ volatile bool early;
+ volatile bool late;
+} test_context;
+
+static T_interrupt_test_state interrupt( void *arg )
{
- (void) rtems_event_send( Main_task, EVENTS_TO_SEND );
+ test_context *ctx;
+ T_interrupt_test_state state;
+ rtems_status_code sc;
+
+ state = T_interrupt_test_get_state();
+
+ if ( state != T_INTERRUPT_TEST_ACTION ) {
+ return T_INTERRUPT_TEST_CONTINUE;
+ }
+
+ ctx = arg;
+ sc = rtems_event_send( ctx->main_task, EVENTS_TO_SEND );
+ T_quiet_rsc_success( sc );
+
+ if ( ctx->early ) {
+ state = T_INTERRUPT_TEST_EARLY;
+ } else if ( ctx->late ) {
+ state = T_INTERRUPT_TEST_LATE;
+ } else {
+ ++ctx->potential_hits;
+ state = T_INTERRUPT_TEST_CONTINUE;
+ }
+
+ return state;
}
-static bool test_body( void *arg )
+static void prepare( void *arg )
{
- rtems_event_set out;
+ test_context *ctx;
+ rtems_event_set out;
- (void) arg;
+ ctx = arg;
+ ctx->early = true;
+ ctx->late = false;
+ (void ) rtems_event_receive( RTEMS_PENDING_EVENTS, RTEMS_NO_WAIT, 0, &out );
+}
- rtems_event_receive( EVENTS_TO_RECEIVE, RTEMS_EVENT_ANY, 1, &out );
+static void action( void *arg )
+{
+ test_context *ctx;
+ rtems_event_set out;
- return false;
+ ctx = arg;
+ ctx->early = false;
+ (void ) rtems_event_receive( EVENTS_TO_RECEIVE, RTEMS_EVENT_ANY, 1, &out );
+ ctx->late = true;
}
-rtems_task Init(
- rtems_task_argument ignored
-)
+static const T_interrupt_test_config config = {
+ .prepare = prepare,
+ .action = action,
+ .interrupt = interrupt,
+ .max_iteration_count = 1000
+};
+
+T_TEST_CASE( RTEMS_XCONCAT( EventReceiveInterrupt, TEST_STRING ) )
{
- TEST_BEGIN();
+ test_context ctx;
+ T_interrupt_test_state state;
- puts( "Init - Test may not be able to detect case is hit reliably" );
- puts( "Init - Trying to generate event send from ISR while blocking" );
- puts( "Init - Variation is: " TEST_STRING );
+ memset( &ctx, 0, sizeof( ctx ) );
+ ctx.main_task = rtems_task_self();
- Main_task = rtems_task_self();
+ state = T_interrupt_test( &config, &ctx );
+ T_eq_int( state, T_INTERRUPT_TEST_TIMEOUT );
- interrupt_critical_section_test( test_body, NULL, test_release_from_isr );
+ T_log( T_NORMAL, "potential hits = %ld", ctx.potential_hits );
+ T_gt_long( ctx.potential_hits, 0 );
+}
- TEST_END();
- rtems_test_exit(0);
+static rtems_task Init( rtems_task_argument argument )
+{
+ rtems_test_run( argument, TEST_STATE );
}
/* configuration information */
@@ -81,10 +126,7 @@ rtems_task Init(
#define CONFIGURE_APPLICATION_NEEDS_SIMPLE_CONSOLE_DRIVER
#define CONFIGURE_APPLICATION_NEEDS_CLOCK_DRIVER
-#define CONFIGURE_MAXIMUM_TASKS 2
-#define CONFIGURE_MAXIMUM_TIMERS 1
-#define CONFIGURE_MAXIMUM_SEMAPHORES 1
-#define CONFIGURE_MAXIMUM_USER_EXTENSIONS 1
+#define CONFIGURE_MAXIMUM_TASKS 1
#define CONFIGURE_INITIAL_EXTENSIONS RTEMS_TEST_INITIAL_EXTENSION
#define CONFIGURE_RTEMS_INIT_TASKS_TABLE
diff --git a/testsuites/sptests/spintrcritical12/spintrcritical12.scn b/testsuites/sptests/spintrcritical12/spintrcritical12.scn
index 6b04a9ee7b..6447d63fbe 100644
--- a/testsuites/sptests/spintrcritical12/spintrcritical12.scn
+++ b/testsuites/sptests/spintrcritical12/spintrcritical12.scn
@@ -1,6 +1,24 @@
-*** TEST INTERRUPT CRITICAL SECTION 12 ***
-Init - Test may not be able to detect case is hit reliably
-Init - Trying to generate event send from ISR while blocking
-Init - Variation is: Event All condition
-Support - rtems_timer_create - creating timer 1
-*** END OF TEST INTERRUPT CRITICAL SECTION 12 ***
+*** BEGIN OF TEST SPINTRCRITICAL 12 ***
+*** TEST VERSION: 6.0.0.929e49a54ab4d2d18c9fb8d03610614f63e25b8d
+*** TEST STATE: EXPECTED_PASS
+*** TEST BUILD: RTEMS_DEBUG RTEMS_POSIX_API RTEMS_SMP
+*** TEST TOOLS: 10.0.1 20200406 (RTEMS 6, RSB bec88a6dd856892c3e66e4598252ea07d7a0d762, Newlib ece49e4)
+A:SPINTRCRITICAL 12
+S:Platform:RTEMS
+S:Compiler:10.0.1 20200406 (RTEMS 6, RSB bec88a6dd856892c3e66e4598252ea07d7a0d762, Newlib ece49e4)
+S:Version:6.0.0.929e49a54ab4d2d18c9fb8d03610614f63e25b8d
+S:BSP:realview_pbx_a9_qemu
+S:RTEMS_DEBUG:1
+S:RTEMS_MULTIPROCESSING:0
+S:RTEMS_POSIX_API:1
+S:RTEMS_PROFILING:0
+S:RTEMS_SMP:1
+B:EventReceiveInterruptAll
+P:0:0:UI1:spintrcritical11impl.h:113
+L:potential hits = 999
+P:1:0:UI1:spintrcritical11impl.h:116
+E:EventReceiveInterruptAll:N:2:F:0:D:1.057546
+Z:SPINTRCRITICAL 12:C:1:N:2:F:0:D:1.058728
+Y:ReportHash:SHA256:3b2267f65c7604b1fbf3da33492b23a658b32021755868bcf69b04fe69c7f85d
+
+*** END OF TEST SPINTRCRITICAL 12 ***
diff --git a/testsuites/sptests/spintrcritical13/spintrcritical13.scn b/testsuites/sptests/spintrcritical13/spintrcritical13.scn
index 712706caae..8181218b5f 100644
--- a/testsuites/sptests/spintrcritical13/spintrcritical13.scn
+++ b/testsuites/sptests/spintrcritical13/spintrcritical13.scn
@@ -1,7 +1,24 @@
-*** TEST INTERRUPT CRITICAL SECTION 13 ***
-Init - Trying to generate timer fire from ISR while firing
-Init - Variation is: Timer Fire After
-Init - There is no way for the test to know if it hits the case
-Init - rtems_timer_create - OK
-Support - rtems_timer_create - creating timer 1
-*** END OF TEST INTERRUPT CRITICAL SECTION 13 ***
+*** BEGIN OF TEST SPINTRCRITICAL 13 ***
+*** TEST VERSION: 6.0.0.929e49a54ab4d2d18c9fb8d03610614f63e25b8d
+*** TEST STATE: EXPECTED_PASS
+*** TEST BUILD: RTEMS_DEBUG RTEMS_POSIX_API RTEMS_SMP
+*** TEST TOOLS: 10.0.1 20200406 (RTEMS 6, RSB bec88a6dd856892c3e66e4598252ea07d7a0d762, Newlib ece49e4)
+A:SPINTRCRITICAL 13
+S:Platform:RTEMS
+S:Compiler:10.0.1 20200406 (RTEMS 6, RSB bec88a6dd856892c3e66e4598252ea07d7a0d762, Newlib ece49e4)
+S:Version:6.0.0.929e49a54ab4d2d18c9fb8d03610614f63e25b8d
+S:BSP:realview_pbx_a9_qemu
+S:RTEMS_DEBUG:1
+S:RTEMS_MULTIPROCESSING:0
+S:RTEMS_POSIX_API:1
+S:RTEMS_PROFILING:0
+S:RTEMS_SMP:1
+B:TimerFireAfterInterrupt
+P:0:0:UI1:spintrcritical13impl.h:131
+P:1:0:UI1:spintrcritical13impl.h:134
+P:2:0:UI1:spintrcritical13impl.h:137
+E:TimerFireAfterInterrupt:N:3:F:0:D:0.116053
+Z:SPINTRCRITICAL 13:C:1:N:3:F:0:D:0.117144
+Y:ReportHash:SHA256:66bf247c36962dc930b099cc4979215b4cadb41edd8925097a91e8e7a4356725
+
+*** END OF TEST SPINTRCRITICAL 13 ***
diff --git a/testsuites/sptests/spintrcritical13/spintrcritical13impl.h b/testsuites/sptests/spintrcritical13/spintrcritical13impl.h
index e284d3c33d..55fc964bb6 100644
--- a/testsuites/sptests/spintrcritical13/spintrcritical13impl.h
+++ b/testsuites/sptests/spintrcritical13/spintrcritical13impl.h
@@ -1,4 +1,6 @@
/*
+ * Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+ *
* COPYRIGHT (c) 1989-2009.
* On-Line Applications Research Corporation (OAR).
*
@@ -11,17 +13,19 @@
#include "config.h"
#endif
-#include <tmacros.h>
-#include <intrcritical.h>
+#include <string.h>
+
+#include <rtems/test.h>
+#include <rtems/test-info.h>
#if defined(FIRE_AFTER)
#define TEST_NAME "13"
- #define TEST_STRING "Timer Fire After"
+ #define TEST_STRING TimerFireAfterInterrupt
#define TEST_DIRECTIVE rtems_timer_fire_after
#elif defined(SERVER_FIRE_AFTER)
#define TEST_NAME "14"
- #define TEST_STRING "Timer Server Fire After"
+ #define TEST_STRING TimerServerFireAfterInterrupt
#define TEST_DIRECTIVE rtems_timer_server_fire_after
#else
@@ -30,71 +34,117 @@
const char rtems_test_name[] = "SPINTRCRITICAL " TEST_NAME;
-/* forward declarations to avoid warnings */
-rtems_task Init(rtems_task_argument argument);
-rtems_timer_service_routine test_release_from_isr(rtems_id timer, void *arg);
-rtems_timer_service_routine TimerMethod(rtems_id timer, void *arg);
-
-rtems_id Timer;
+typedef struct {
+ rtems_id timer;
+ long potential_hits;
+ volatile bool early;
+ volatile bool late;
+} test_context;
-rtems_timer_service_routine TimerMethod(
+static rtems_timer_service_routine TimerMethod(
rtems_id timer,
void *arg
)
{
+ (void) timer;
+ (void) arg;
}
-rtems_timer_service_routine test_release_from_isr(
- rtems_id timer,
- void *arg
-)
+static T_interrupt_test_state interrupt( void *arg )
{
- (void) rtems_timer_fire_after( Timer, 10, TimerMethod, NULL );
+ test_context *ctx;
+ rtems_status_code sc;
+ T_interrupt_test_state state;
+
+ state = T_interrupt_test_get_state();
+
+ if ( state != T_INTERRUPT_TEST_ACTION ) {
+ return T_INTERRUPT_TEST_CONTINUE;
+ }
+
+ ctx = arg;
+ sc = TEST_DIRECTIVE( ctx->timer, 10, TimerMethod, NULL );
+ T_quiet_rsc_success( sc );
+
+ if ( ctx->early ) {
+ state = T_INTERRUPT_TEST_EARLY;
+ } else if ( ctx->late ) {
+ state = T_INTERRUPT_TEST_LATE;
+ } else {
+ ++ctx->potential_hits;
+
+ if ( ctx->potential_hits > 13 ) {
+ state = T_INTERRUPT_TEST_DONE;
+ } else {
+ state = T_INTERRUPT_TEST_CONTINUE;
+ }
+ }
+
+ return state;
}
-static bool test_body( void *arg )
+static void prepare( void *arg )
{
- rtems_status_code sc;
+ test_context *ctx;
- (void) arg;
+ ctx = arg;
+ ctx->early = true;
+ ctx->late = false;
+}
- sc = TEST_DIRECTIVE( Timer, 10, TimerMethod, NULL );
- rtems_test_assert( sc == RTEMS_SUCCESSFUL );
+static void action( void *arg )
+{
+ test_context *ctx;
+ rtems_status_code sc;
+
+ ctx = arg;
+ ctx->early = false;
+ sc = TEST_DIRECTIVE( ctx->timer, 10, TimerMethod, NULL );
+ T_quiet_rsc_success( sc );
+ ctx->late = true;
- return false;
+ T_interrupt_test_busy_wait_for_interrupt();
}
-rtems_task Init(
- rtems_task_argument ignored
-)
-{
- rtems_status_code sc;
+static const T_interrupt_test_config config = {
+ .prepare = prepare,
+ .action = action,
+ .interrupt = interrupt,
+ .max_iteration_count = 10000
+};
- TEST_BEGIN();
+T_TEST_CASE( TEST_STRING )
+{
+ test_context ctx;
+ rtems_status_code sc;
+ T_interrupt_test_state state;
- puts( "Init - Trying to generate timer fire from ISR while firing" );
- puts( "Init - Variation is: " TEST_STRING );
+ memset( &ctx, 0, sizeof( ctx ) );
- puts( "Init - There is no way for the test to know if it hits the case" );
+ sc = rtems_timer_create(
+ rtems_build_name( 'P', 'E', 'R', '1' ),
+ &ctx.timer
+ );
+ T_assert_rsc_success( sc );
- #if defined(SERVER_FIRE_AFTER)
- /* initiate timer server */
- sc = rtems_timer_initiate_server(
- RTEMS_MINIMUM_PRIORITY,
- RTEMS_MINIMUM_STACK_SIZE,
- RTEMS_DEFAULT_ATTRIBUTES
- );
- directive_failed( sc, "rtems_timer_initiate_server" );
- #endif
+ state = T_interrupt_test( &config, &ctx );
+ T_eq_int( state, T_INTERRUPT_TEST_DONE );
- puts( "Init - rtems_timer_create - OK" );
- sc = rtems_timer_create( rtems_build_name( 'P', 'E', 'R', '1' ), &Timer);
- directive_failed( sc, "rtems_timer_create" );
+ sc = rtems_timer_delete( ctx.timer );
+ T_rsc_success( sc );
+}
- interrupt_critical_section_test( test_body, NULL, test_release_from_isr );
+static rtems_task Init( rtems_task_argument argument )
+{
+#if defined(SERVER_FIRE_AFTER)
+ (void) rtems_timer_initiate_server(
+ RTEMS_MINIMUM_PRIORITY,
+ RTEMS_MINIMUM_STACK_SIZE,
+ RTEMS_DEFAULT_ATTRIBUTES
+ );
+#endif
- TEST_END();
- rtems_test_exit(0);
+ rtems_test_run( argument, TEST_STATE );
}
/* configuration information */
@@ -107,8 +157,7 @@ rtems_task Init(
#else
#define CONFIGURE_MAXIMUM_TASKS 2
#endif
-#define CONFIGURE_MAXIMUM_TIMERS 2
-#define CONFIGURE_MAXIMUM_USER_EXTENSIONS 1
+#define CONFIGURE_MAXIMUM_TIMERS 1
#define CONFIGURE_MICROSECONDS_PER_TICK 1000
#define CONFIGURE_INITIAL_EXTENSIONS RTEMS_TEST_INITIAL_EXTENSION
diff --git a/testsuites/sptests/spintrcritical14/spintrcritical14.scn b/testsuites/sptests/spintrcritical14/spintrcritical14.scn
index 43079695f5..3f4aca3959 100644
--- a/testsuites/sptests/spintrcritical14/spintrcritical14.scn
+++ b/testsuites/sptests/spintrcritical14/spintrcritical14.scn
@@ -1,7 +1,24 @@
-*** TEST INTERRUPT CRITICAL SECTION 14 ***
-Init - Trying to generate timer fire from ISR while firing
-Init - Variation is: Timer Server Fire After
-Init - There is no way for the test to know if it hits the case
-Init - rtems_timer_create - OK
-Support - rtems_timer_create - creating timer 1
-*** END OF TEST INTERRUPT CRITICAL SECTION 14 ***
+*** BEGIN OF TEST SPINTRCRITICAL 14 ***
+*** TEST VERSION: 6.0.0.929e49a54ab4d2d18c9fb8d03610614f63e25b8d
+*** TEST STATE: EXPECTED_PASS
+*** TEST BUILD: RTEMS_DEBUG RTEMS_POSIX_API RTEMS_SMP
+*** TEST TOOLS: 10.0.1 20200406 (RTEMS 6, RSB bec88a6dd856892c3e66e4598252ea07d7a0d762, Newlib ece49e4)
+A:SPINTRCRITICAL 14
+S:Platform:RTEMS
+S:Compiler:10.0.1 20200406 (RTEMS 6, RSB bec88a6dd856892c3e66e4598252ea07d7a0d762, Newlib ece49e4)
+S:Version:6.0.0.929e49a54ab4d2d18c9fb8d03610614f63e25b8d
+S:BSP:realview_pbx_a9_qemu
+S:RTEMS_DEBUG:1
+S:RTEMS_MULTIPROCESSING:0
+S:RTEMS_POSIX_API:1
+S:RTEMS_PROFILING:0
+S:RTEMS_SMP:1
+B:TimerServerFireAfterInterrupt
+P:0:0:UI1:spintrcritical13impl.h:131
+P:1:0:UI1:spintrcritical13impl.h:134
+P:2:0:UI1:spintrcritical13impl.h:137
+E:TimerServerFireAfterInterrupt:N:3:F:0:D:0.086586
+Z:SPINTRCRITICAL 14:C:1:N:3:F:0:D:0.087802
+Y:ReportHash:SHA256:d6f998056acf55838c88d67702cb4fee07f862f8d2eaa9638a606bd9da4d5c17
+
+*** END OF TEST SPINTRCRITICAL 14 ***
diff --git a/testsuites/sptests/spintrcritical15/init.c b/testsuites/sptests/spintrcritical15/init.c
index 9de33b3cfb..3b58dc045c 100644
--- a/testsuites/sptests/spintrcritical15/init.c
+++ b/testsuites/sptests/spintrcritical15/init.c
@@ -1,4 +1,6 @@
/*
+ * Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+ *
* COPYRIGHT (c) 1989-2009.
* On-Line Applications Research Corporation (OAR).
*
@@ -11,89 +13,133 @@
#include "config.h"
#endif
-#include <tmacros.h>
-#include <intrcritical.h>
+#include <rtems/test.h>
+#include <rtems/test-info.h>
-const char rtems_test_name[] = "SPINTRCRITICAL 15";
+#include <rtems/score/threadimpl.h>
-/* forward declarations to avoid warnings */
-rtems_task Init(rtems_task_argument argument);
-rtems_task Secondary_task(rtems_task_argument ignored);
+const char rtems_test_name[] = "SPINTRCRITICAL 15";
#define INIT_PRIORITY 2
#define BLOCKER_PRIORITY 1
-rtems_id Secondary_task_id;
-rtems_id Semaphore;
+typedef struct {
+ rtems_id secondary_task_id;
+ rtems_id semaphore;
+ Thread_Control *main_thread;
+} test_context;
-rtems_task Secondary_task(
- rtems_task_argument ignored
-)
+static rtems_task Secondary_task( rtems_task_argument arg )
{
- rtems_status_code sc;
+ test_context *ctx;
+ rtems_status_code sc;
+
+ ctx = (test_context *) arg;
while (1) {
- sc = rtems_semaphore_obtain( Semaphore, RTEMS_DEFAULT_OPTIONS, 1 );
- fatal_directive_status( sc, RTEMS_TIMEOUT, "rtems_semaphore_obtain" );
+ sc = rtems_semaphore_obtain( ctx->semaphore, RTEMS_DEFAULT_OPTIONS, 1 );
+ T_quiet_rsc( sc, RTEMS_TIMEOUT );
}
}
-static bool test_body( void *arg )
+static T_interrupt_test_state interrupt(void *arg)
{
- rtems_status_code sc;
+ test_context *ctx;
+ Thread_Wait_flags flags;
+ T_interrupt_test_state state;
+
+ ctx = arg;
+ flags = _Thread_Wait_flags_get( ctx->main_thread );
+
+ if (
+ flags == ( THREAD_WAIT_CLASS_OBJECT | THREAD_WAIT_STATE_INTEND_TO_BLOCK )
+ ) {
+ state = T_INTERRUPT_TEST_DONE;
+ } else if (
+ flags == ( THREAD_WAIT_CLASS_OBJECT | THREAD_WAIT_STATE_BLOCKED )
+ ) {
+ state = T_INTERRUPT_TEST_LATE;
+ } else {
+ state = T_INTERRUPT_TEST_EARLY;
+ }
- (void) arg;
+ return state;
+}
- sc = rtems_task_restart( Secondary_task_id, 1 );
- rtems_test_assert( sc == RTEMS_SUCCESSFUL );
+static void prepare( void *arg )
+{
+ test_context *ctx;
+ rtems_status_code sc;
- sc = rtems_semaphore_obtain( Semaphore, RTEMS_DEFAULT_OPTIONS, 1 );
- rtems_test_assert( sc == RTEMS_TIMEOUT );
+ ctx = arg;
+ sc = rtems_task_restart( ctx->secondary_task_id, (rtems_task_argument) ctx );
+ T_quiet_rsc_success( sc );
+}
- return false;
+static void action( void *arg )
+{
+ test_context *ctx;
+ rtems_status_code sc;
+
+ ctx = arg;
+ sc = rtems_semaphore_obtain( ctx->semaphore, RTEMS_DEFAULT_OPTIONS, 1 );
+ T_quiet_rsc( sc, RTEMS_TIMEOUT );
}
-rtems_task Init(
- rtems_task_argument ignored
-)
+static const T_interrupt_test_config config = {
+ .prepare = prepare,
+ .action = action,
+ .interrupt = interrupt,
+ .max_iteration_count = 10000
+};
+
+T_TEST_CASE( SemaphoreObtainBlockedInterrupt )
{
- rtems_status_code sc;
+ test_context ctx;
+ rtems_status_code sc;
+ T_interrupt_test_state state;
- TEST_BEGIN();
- puts(
- "Init - Trying to generate timeout of a thread while another is blocking\n"
- "Init - on the same thread queue\n"
- "Init - There is no way for the test to know if it hits the case"
- );
+ ctx.main_thread = _Thread_Get_executing();
- puts( "Init - rtems_semaphore_create - OK" );
sc = rtems_semaphore_create(
rtems_build_name( 'S', 'M', '1', ' ' ),
0,
RTEMS_DEFAULT_ATTRIBUTES,
RTEMS_NO_PRIORITY,
- &Semaphore
+ &ctx.semaphore
);
- directive_failed( sc, "rtems_semaphore_create of SM1" );
+ T_assert_rsc_success( sc );
- puts( "Init - rtems_task_create - OK" );
sc = rtems_task_create(
rtems_build_name( 'B', 'L', 'C', 'K' ),
BLOCKER_PRIORITY,
RTEMS_MINIMUM_STACK_SIZE,
RTEMS_NO_PREEMPT,
RTEMS_DEFAULT_ATTRIBUTES,
- &Secondary_task_id
+ &ctx.secondary_task_id
+ );
+ T_assert_rsc_success( sc );
+
+ sc = rtems_task_start(
+ ctx.secondary_task_id,
+ Secondary_task,
+ (rtems_task_argument) &ctx
);
- directive_failed( sc, "rtems_task_create" );
+ T_assert_rsc_success( sc );
+
+ state = T_interrupt_test( &config, &ctx );
+ T_eq_int( state, T_INTERRUPT_TEST_DONE );
- sc = rtems_task_start( Secondary_task_id, Secondary_task, 0 );
- directive_failed( sc, "rtems_task_start" );
+ sc = rtems_task_delete( ctx.secondary_task_id );
+ T_rsc_success( sc );
- interrupt_critical_section_test( test_body, NULL, NULL );
+ sc = rtems_semaphore_delete( ctx.semaphore );
+ T_rsc_success( sc );
+}
- TEST_END();
- rtems_test_exit(0);
+static rtems_task Init( rtems_task_argument argument )
+{
+ rtems_test_run( argument, TEST_STATE );
}
/* configuration information */
@@ -103,7 +149,6 @@ rtems_task Init(
#define CONFIGURE_MAXIMUM_TASKS 2
#define CONFIGURE_MAXIMUM_SEMAPHORES 1
-#define CONFIGURE_MAXIMUM_USER_EXTENSIONS 1
#define CONFIGURE_MICROSECONDS_PER_TICK 1000
#define CONFIGURE_INIT_TASK_PRIORITY INIT_PRIORITY
#define CONFIGURE_INIT_TASK_INITIAL_MODES RTEMS_PREEMPT
diff --git a/testsuites/sptests/spintrcritical15/spintrcritical15.scn b/testsuites/sptests/spintrcritical15/spintrcritical15.scn
index ee8db40cdd..937b05ea24 100644
--- a/testsuites/sptests/spintrcritical15/spintrcritical15.scn
+++ b/testsuites/sptests/spintrcritical15/spintrcritical15.scn
@@ -1,7 +1,27 @@
-*** TEST INTERRUPT CRITICAL SECTION 15 ***
-Init - Trying to generate timeout of a thread while another is blocking
-Init - on the same thread queue
-Init - There is no way for the test to know if it hits the case
-Init - rtems_semaphore_create - OK
-Init - rtems_task_create - OK
-*** END OF TEST INTERRUPT CRITICAL SECTION 15 ***
+*** BEGIN OF TEST SPINTRCRITICAL 15 ***
+*** TEST VERSION: 6.0.0.929e49a54ab4d2d18c9fb8d03610614f63e25b8d
+*** TEST STATE: EXPECTED_PASS
+*** TEST BUILD: RTEMS_DEBUG RTEMS_POSIX_API RTEMS_SMP
+*** TEST TOOLS: 10.0.1 20200406 (RTEMS 6, RSB bec88a6dd856892c3e66e4598252ea07d7a0d762, Newlib ece49e4)
+A:SPINTRCRITICAL 15
+S:Platform:RTEMS
+S:Compiler:10.0.1 20200406 (RTEMS 6, RSB bec88a6dd856892c3e66e4598252ea07d7a0d762, Newlib ece49e4)
+S:Version:6.0.0.929e49a54ab4d2d18c9fb8d03610614f63e25b8d
+S:BSP:realview_pbx_a9_qemu
+S:RTEMS_DEBUG:1
+S:RTEMS_MULTIPROCESSING:0
+S:RTEMS_POSIX_API:1
+S:RTEMS_PROFILING:0
+S:RTEMS_SMP:1
+B:SemaphoreObtainBlockedInterrupt
+P:0:0:UI1:init.c:111
+P:1:0:UI1:init.c:121
+P:2:0:UI1:init.c:128
+P:3:0:UI1:init.c:131
+P:4:0:UI1:init.c:134
+P:5:0:UI1:init.c:137
+E:SemaphoreObtainBlockedInterrupt:N:6:F:0:D:0.063907
+Z:SPINTRCRITICAL 15:C:1:N:6:F:0:D:0.065120
+Y:ReportHash:SHA256:198a9452944e985b137ec4b427be51cef71af413f6e3bfdf03a2f29a9bd81259
+
+*** END OF TEST SPINTRCRITICAL 15 ***
diff --git a/testsuites/sptests/spintrcritical16/init.c b/testsuites/sptests/spintrcritical16/init.c
index 1879cbd189..6f087dad7f 100644
--- a/testsuites/sptests/spintrcritical16/init.c
+++ b/testsuites/sptests/spintrcritical16/init.c
@@ -1,4 +1,6 @@
/*
+ * Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+ *
* COPYRIGHT (c) 1989-2009.
* On-Line Applications Research Corporation (OAR).
*
@@ -11,88 +13,128 @@
#include "config.h"
#endif
-#include <tmacros.h>
-#include <intrcritical.h>
+#include <rtems/test.h>
+#include <rtems/test-info.h>
#include <rtems/score/threadimpl.h>
const char rtems_test_name[] = "SPINTRCRITICAL 16";
-static Thread_Control *Main_TCB;
-
-static rtems_id Semaphore;
+typedef struct {
+ Thread_Control *thread;
+ rtems_id semaphore;
+} test_context;
-static bool case_hit;
-
-static bool interrupts_blocking_op(void)
+static T_interrupt_test_state interrupt( void *arg )
{
- Thread_Wait_flags flags = _Thread_Wait_flags_get( Main_TCB );
+ test_context *ctx;
+ T_interrupt_test_state state;
+ Thread_Wait_flags flags;
+ rtems_status_code sc;
- return
- flags == ( THREAD_WAIT_CLASS_OBJECT | THREAD_WAIT_STATE_INTEND_TO_BLOCK );
-}
+ state = T_interrupt_test_get_state();
-static rtems_timer_service_routine test_release_from_isr(
- rtems_id timer,
- void *arg
-)
-{
- if ( interrupts_blocking_op() ) {
- case_hit = true;
- (void) rtems_semaphore_release( Semaphore );
+ if (state != T_INTERRUPT_TEST_ACTION) {
+ return T_INTERRUPT_TEST_CONTINUE;
}
- if ( Main_TCB->Wait.queue != NULL ) {
- _Thread_Timeout( &Main_TCB->Timer.Watchdog );
+ ctx = arg;
+ flags = _Thread_Wait_flags_get( ctx->thread );
+
+ if (
+ flags == ( THREAD_WAIT_CLASS_OBJECT | THREAD_WAIT_STATE_INTEND_TO_BLOCK )
+ ) {
+ state = T_INTERRUPT_TEST_DONE;
+ } else if (
+ flags == ( THREAD_WAIT_CLASS_OBJECT | THREAD_WAIT_STATE_BLOCKED )
+ ) {
+ state = T_INTERRUPT_TEST_LATE;
+ } else {
+ state = T_INTERRUPT_TEST_EARLY;
}
+
+ sc = rtems_semaphore_release( ctx->semaphore );
+ T_quiet_rsc_success( sc );
+
+ return state;
}
-static bool test_body( void *arg )
+static void prepare( void *arg )
{
+ test_context *ctx;
rtems_status_code sc;
- (void) arg;
+ ctx = arg;
+
+ do {
+ sc = rtems_semaphore_obtain( ctx->semaphore, RTEMS_NO_WAIT, 0 );
+ } while ( sc == RTEMS_SUCCESSFUL );
+}
- sc = rtems_semaphore_obtain( Semaphore, RTEMS_DEFAULT_OPTIONS, 2 );
- rtems_test_assert( sc == RTEMS_SUCCESSFUL || sc == RTEMS_TIMEOUT );
+static void action( void *arg )
+{
+ test_context *ctx;
+ rtems_status_code sc;
- return case_hit;
+ ctx = arg;
+ sc = rtems_semaphore_obtain( ctx->semaphore, RTEMS_DEFAULT_OPTIONS, 2 );
+ T_quiet_rsc_success( sc );
}
-static rtems_task Init(
- rtems_task_argument ignored
-)
+static void blocked( void *arg )
{
- rtems_status_code sc;
+ test_context *ctx;
+ rtems_status_code sc;
- TEST_BEGIN();
- puts(
- "Init - Trying to generate timeout of a thread that had its blocking\n"
- "Init - request satisfied while blocking but before time timeout"
+ T_interrupt_test_change_state(
+ T_INTERRUPT_TEST_ACTION,
+ T_INTERRUPT_TEST_LATE
);
- puts( "Init - rtems_semaphore_create - OK" );
+ ctx = arg;
+ sc = rtems_semaphore_release( ctx->semaphore );
+ T_quiet_rsc_success( sc );
+}
+
+static const T_interrupt_test_config config = {
+ .prepare = prepare,
+ .action = action,
+ .interrupt = interrupt,
+ .blocked = blocked,
+ .max_iteration_count = 10000
+};
+
+/*
+ * Trying to generate timeout of a thread that had its blocking request
+ * satisfied while blocking but before time timeout.
+ */
+T_TEST_CASE( SemaphoreSatisfyBeforeTimeout )
+{
+ test_context ctx;
+ rtems_status_code sc;
+ T_interrupt_test_state state;
+
+ ctx.thread = _Thread_Get_executing();
+
sc = rtems_semaphore_create(
rtems_build_name( 'S', 'M', '1', ' ' ),
0,
RTEMS_DEFAULT_ATTRIBUTES,
RTEMS_NO_PRIORITY,
- &Semaphore
+ &ctx.semaphore
);
- directive_failed( sc, "rtems_semaphore_create of SM1" );
-
- Main_TCB = _Thread_Get_executing();
+ T_assert_rsc_success( sc );
- interrupt_critical_section_test( test_body, NULL, test_release_from_isr );
-
- if ( case_hit ) {
- puts( "Init - Case hit" );
- TEST_END();
- } else
- puts( "Init - Case not hit - ran too long" );
+ state = T_interrupt_test( &config, &ctx );
+ T_eq_int( state, T_INTERRUPT_TEST_DONE );
+ sc = rtems_semaphore_delete( ctx.semaphore );
+ T_rsc_success( sc );
+}
- rtems_test_exit(0);
+static rtems_task Init( rtems_task_argument argument )
+{
+ rtems_test_run( argument, TEST_STATE );
}
/* configuration information */
@@ -101,9 +143,7 @@ static rtems_task Init(
#define CONFIGURE_APPLICATION_NEEDS_CLOCK_DRIVER
#define CONFIGURE_MAXIMUM_TASKS 1
-#define CONFIGURE_MAXIMUM_TIMERS 1
#define CONFIGURE_MAXIMUM_SEMAPHORES 1
-#define CONFIGURE_MAXIMUM_USER_EXTENSIONS 1
#define CONFIGURE_MICROSECONDS_PER_TICK 1000
#define CONFIGURE_INITIAL_EXTENSIONS RTEMS_TEST_INITIAL_EXTENSION
diff --git a/testsuites/sptests/spintrcritical16/spintrcritical16.scn b/testsuites/sptests/spintrcritical16/spintrcritical16.scn
index 49e6597047..aeb8946788 100644
--- a/testsuites/sptests/spintrcritical16/spintrcritical16.scn
+++ b/testsuites/sptests/spintrcritical16/spintrcritical16.scn
@@ -1,7 +1,24 @@
-*** TEST INTERRUPT CRITICAL SECTION 16 ***
-Init - Trying to generate timeout of a thread that had its blocking
-Init - request satisfied while blocking but before time timeout
-Init - rtems_semaphore_create - OK
-Support - rtems_timer_create - creating timer 1
-Init - Case hit
-*** END OF TEST INTERRUPT CRITICAL SECTION 16 ***
+*** BEGIN OF TEST SPINTRCRITICAL 16 ***
+*** TEST VERSION: 6.0.0.929e49a54ab4d2d18c9fb8d03610614f63e25b8d
+*** TEST STATE: EXPECTED_PASS
+*** TEST BUILD: RTEMS_DEBUG RTEMS_POSIX_API RTEMS_SMP
+*** TEST TOOLS: 10.0.1 20200406 (RTEMS 6, RSB bec88a6dd856892c3e66e4598252ea07d7a0d762, Newlib ece49e4)
+A:SPINTRCRITICAL 16
+S:Platform:RTEMS
+S:Compiler:10.0.1 20200406 (RTEMS 6, RSB bec88a6dd856892c3e66e4598252ea07d7a0d762, Newlib ece49e4)
+S:Version:6.0.0.929e49a54ab4d2d18c9fb8d03610614f63e25b8d
+S:BSP:realview_pbx_a9_qemu
+S:RTEMS_DEBUG:1
+S:RTEMS_MULTIPROCESSING:0
+S:RTEMS_POSIX_API:1
+S:RTEMS_PROFILING:0
+S:RTEMS_SMP:1
+B:SemaphoreSatisfyBeforeTimeout
+P:0:0:UI1:init.c:119
+P:1:0:UI1:init.c:122
+P:2:0:UI1:init.c:125
+E:SemaphoreSatisfyBeforeTimeout:N:3:F:0:D:0.058378
+Z:SPINTRCRITICAL 16:C:1:N:3:F:0:D:0.059654
+Y:ReportHash:SHA256:c1e358e47313edf10cbf9e1aef2cdd06ce96bc85c69d109e3494b4d1e0880f8f
+
+*** END OF TEST SPINTRCRITICAL 16 ***
diff --git a/testsuites/sptests/spintrcritical18/init.c b/testsuites/sptests/spintrcritical18/init.c
index 000f081f60..64adda80b7 100644
--- a/testsuites/sptests/spintrcritical18/init.c
+++ b/testsuites/sptests/spintrcritical18/init.c
@@ -1,11 +1,5 @@
/*
- * Copyright (c) 2012 embedded brains GmbH. All rights reserved.
- *
- * embedded brains GmbH
- * Obere Lagerstr. 30
- * 82178 Puchheim
- * Germany
- * <rtems@embedded-brains.de>
+ * Copyright (C) 2012, 2020 embedded brains GmbH (http://www.embedded-brains.de)
*
* The license and distribution terms for this file may be
* found in the file LICENSE in this distribution or at
@@ -16,8 +10,8 @@
#include "config.h"
#endif
-#include <tmacros.h>
-#include <intrcritical.h>
+#include <rtems/test.h>
+#include <rtems/test-info.h>
const char rtems_test_name[] = "SPINTRCRITICAL 18";
@@ -29,22 +23,22 @@ const char rtems_test_name[] = "SPINTRCRITICAL 18";
#define PRIORITY_HIGH 1
-#define ASSERT_SC(sc) rtems_test_assert( (sc) == RTEMS_SUCCESSFUL )
-
typedef struct {
rtems_id middle_priority_task;
rtems_id high_priority_task;
bool high_priority_task_activated;
+ volatile bool early;
+ volatile bool switching;
+ volatile bool late;
+ long potential_hits;
} test_context;
-static test_context global_ctx;
-
-static void wake_up(rtems_id task)
+static void wake_up( rtems_id task )
{
rtems_status_code sc;
sc = rtems_event_send( task, WAKE_UP );
- ASSERT_SC( sc );
+ T_quiet_rsc_success( sc );
}
static void wait_for_wake_up( void )
@@ -58,18 +52,40 @@ static void wait_for_wake_up( void )
RTEMS_NO_TIMEOUT,
&events
);
- ASSERT_SC( sc );
- rtems_test_assert( events == WAKE_UP );
+ T_quiet_rsc_success( sc );
+ T_quiet_eq_u32( events, WAKE_UP );
}
-static void active_high_priority_task( rtems_id timer, void *arg )
+static T_interrupt_test_state active_high_priority_task( void *arg )
{
- /* The arg is NULL */
- test_context *ctx = &global_ctx;
+ test_context *ctx = arg;
+ T_interrupt_test_state state;
+
+ state = T_interrupt_test_get_state();
+
+ if ( state != T_INTERRUPT_TEST_ACTION ) {
+ return T_INTERRUPT_TEST_CONTINUE;
+ }
- rtems_test_assert( !ctx->high_priority_task_activated );
+ T_quiet_false( ctx->high_priority_task_activated );
ctx->high_priority_task_activated = true;
wake_up( ctx->high_priority_task );
+
+ if ( ctx->early ) {
+ state = T_INTERRUPT_TEST_EARLY;
+ } else if ( ctx->late ) {
+ state = T_INTERRUPT_TEST_LATE;
+ } else {
+ ++ctx->potential_hits;
+
+ if ( ctx->potential_hits > 13 ) {
+ state = T_INTERRUPT_TEST_DONE;
+ } else {
+ state = T_INTERRUPT_TEST_CONTINUE;
+ }
+ }
+
+ return state;
}
static void middle_priority_task( rtems_task_argument arg )
@@ -78,8 +94,9 @@ static void middle_priority_task( rtems_task_argument arg )
while ( true ) {
wait_for_wake_up();
+ ctx->late = true;
- rtems_test_assert( !ctx->high_priority_task_activated );
+ T_quiet_false( ctx->high_priority_task_activated );
}
}
@@ -90,26 +107,60 @@ static void high_priority_task( rtems_task_argument arg )
while ( true ) {
wait_for_wake_up();
- rtems_test_assert( ctx->high_priority_task_activated );
+ T_quiet_true( ctx->high_priority_task_activated );
ctx->high_priority_task_activated = false;
}
}
-static bool test_body( void *arg )
+static void prepare( void *arg )
+{
+ test_context *ctx = arg;
+
+ ctx->early = true;
+ ctx->switching = false;
+ ctx->late = false;
+}
+
+static void action( void *arg )
{
test_context *ctx = arg;
+ ctx->early = false;
wake_up( ctx->middle_priority_task );
+}
- return false;
+static void blocked( void *arg )
+{
+ test_context *ctx = arg;
+ T_interrupt_test_state state;
+
+ state = T_interrupt_test_change_state(
+ T_INTERRUPT_TEST_ACTION,
+ T_INTERRUPT_TEST_LATE
+ );
+
+ if ( state == T_INTERRUPT_TEST_ACTION ) {
+ ctx->switching = true;
+ T_busy( 100 );
+ ctx->switching = false;
+ }
}
-static void Init( rtems_task_argument ignored )
+static const T_interrupt_test_config config = {
+ .prepare = prepare,
+ .action = action,
+ .interrupt = active_high_priority_task,
+ .blocked = blocked,
+ .max_iteration_count = 10000
+};
+
+T_TEST_CASE(InterruptDuringThreadDispatch)
{
- test_context *ctx = &global_ctx;
+ T_interrupt_test_state state;
+ test_context ctx;
rtems_status_code sc;
- TEST_BEGIN();
+ memset( &ctx, 0, sizeof( ctx ) );
sc = rtems_task_create(
rtems_build_name( 'H', 'I', 'G', 'H' ),
@@ -117,16 +168,16 @@ static void Init( rtems_task_argument ignored )
RTEMS_MINIMUM_STACK_SIZE,
RTEMS_DEFAULT_MODES,
RTEMS_DEFAULT_ATTRIBUTES,
- &ctx->high_priority_task
+ &ctx.high_priority_task
);
- ASSERT_SC(sc);
+ T_assert_rsc_success( sc );
sc = rtems_task_start(
- ctx->high_priority_task,
+ ctx.high_priority_task,
high_priority_task,
- (rtems_task_argument) ctx
+ (rtems_task_argument) &ctx
);
- ASSERT_SC(sc);
+ T_assert_rsc_success( sc );
sc = rtems_task_create(
rtems_build_name( 'M', 'I', 'D', 'L' ),
@@ -134,22 +185,30 @@ static void Init( rtems_task_argument ignored )
RTEMS_MINIMUM_STACK_SIZE,
RTEMS_DEFAULT_MODES,
RTEMS_DEFAULT_ATTRIBUTES,
- &ctx->middle_priority_task
+ &ctx.middle_priority_task
);
- ASSERT_SC(sc);
+ T_assert_rsc_success( sc );
sc = rtems_task_start(
- ctx->middle_priority_task,
+ ctx.middle_priority_task,
middle_priority_task,
- (rtems_task_argument) ctx
+ (rtems_task_argument) &ctx
);
- ASSERT_SC(sc);
+ T_assert_rsc_success( sc );
- interrupt_critical_section_test( test_body, ctx, active_high_priority_task );
+ state = T_interrupt_test( &config, &ctx );
+ T_eq_int( state, T_INTERRUPT_TEST_DONE );
- TEST_END();
+ sc = rtems_task_delete( ctx.high_priority_task );
+ T_rsc_success( sc );
- rtems_test_exit( 0 );
+ sc = rtems_task_delete( ctx.middle_priority_task );
+ 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
@@ -158,8 +217,6 @@ static void Init( rtems_task_argument ignored )
#define CONFIGURE_MICROSECONDS_PER_TICK 1000
#define CONFIGURE_MAXIMUM_TASKS 3
-#define CONFIGURE_MAXIMUM_TIMERS 1
-#define CONFIGURE_MAXIMUM_USER_EXTENSIONS 1
#define CONFIGURE_INIT_TASK_PRIORITY PRIORITY_LOW
#define CONFIGURE_INIT_TASK_ATTRIBUTES RTEMS_DEFAULT_ATTRIBUTES
diff --git a/testsuites/sptests/spintrcritical18/spintrcritical18.scn b/testsuites/sptests/spintrcritical18/spintrcritical18.scn
index 4cf1d938e9..51f6199881 100644
--- a/testsuites/sptests/spintrcritical18/spintrcritical18.scn
+++ b/testsuites/sptests/spintrcritical18/spintrcritical18.scn
@@ -1,4 +1,28 @@
-*** TEST INTERRUPT CRITICAL SECTION 18 ***
+*** BEGIN OF TEST SPINTRCRITICAL 18 ***
+*** TEST VERSION: 6.0.0.929e49a54ab4d2d18c9fb8d03610614f63e25b8d
+*** TEST STATE: EXPECTED_PASS
+*** TEST BUILD: RTEMS_DEBUG RTEMS_POSIX_API RTEMS_SMP
+*** TEST TOOLS: 10.0.1 20200406 (RTEMS 6, RSB bec88a6dd856892c3e66e4598252ea07d7a0d762, Newlib ece49e4)
+A:SPINTRCRITICAL 18
+S:Platform:RTEMS
+S:Compiler:10.0.1 20200406 (RTEMS 6, RSB bec88a6dd856892c3e66e4598252ea07d7a0d762, Newlib ece49e4)
+S:Version:6.0.0.929e49a54ab4d2d18c9fb8d03610614f63e25b8d
+S:BSP:realview_pbx_a9_qemu
+S:RTEMS_DEBUG:1
+S:RTEMS_MULTIPROCESSING:0
+S:RTEMS_POSIX_API:1
+S:RTEMS_PROFILING:0
+S:RTEMS_SMP:1
+B:InterruptDuringThreadDispatch
+P:0:0:UI1:init.c:176
+P:1:0:UI1:init.c:183
+P:2:0:UI1:init.c:193
+P:3:0:UI1:init.c:200
+P:4:0:UI1:init.c:203
+P:5:0:UI1:init.c:206
+P:6:0:UI1:init.c:209
+E:InterruptDuringThreadDispatch:N:7:F:0:D:0.096291
+Z:SPINTRCRITICAL 18:C:1:N:7:F:0:D:0.097615
+Y:ReportHash:SHA256:60e93b7dd3417ceb3b6374392e8dd8e1b16279a45bf6ae7ccca3c67bb9ee298f
-Support - rtems_timer_create - creating timer 1
-*** END OF TEST INTERRUPT CRITICAL SECTION 18 ***
+*** END OF TEST SPINTRCRITICAL 18 ***
diff --git a/testsuites/sptests/spintrcritical20/init.c b/testsuites/sptests/spintrcritical20/init.c
index 60af3adebd..df83ee416a 100644
--- a/testsuites/sptests/spintrcritical20/init.c
+++ b/testsuites/sptests/spintrcritical20/init.c
@@ -1,11 +1,5 @@
/*
- * Copyright (c) 2013 embedded brains GmbH. All rights reserved.
- *
- * embedded brains GmbH
- * Dornierstr. 4
- * 82178 Puchheim
- * Germany
- * <rtems@embedded-brains.de>
+ * Copyright (C) 2013, 2020 embedded brains GmbH (http://www.embedded-brains.de)
*
* The license and distribution terms for this file may be
* found in the file LICENSE in this distribution or at
@@ -16,8 +10,11 @@
#include "config.h"
#endif
-#include <tmacros.h>
-#include <intrcritical.h>
+#include <string.h>
+
+#include <rtems/test.h>
+#include <rtems/test-info.h>
+
#include <rtems/score/threadimpl.h>
#include <rtems/score/threadqimpl.h>
#include <rtems/rtems/semimpl.h>
@@ -36,10 +33,10 @@ typedef struct {
bool thread_queue_was_null;
bool status_was_successful;
bool status_was_timeout;
+ volatile bool early;
+ volatile bool late;
} test_context;
-static test_context ctx_instance;
-
static void semaphore_task(rtems_task_argument arg)
{
test_context *ctx = (test_context *) arg;
@@ -52,37 +49,59 @@ static void semaphore_task(rtems_task_argument arg)
RTEMS_WAIT,
RTEMS_NO_TIMEOUT
);
- rtems_test_assert(sc == RTEMS_SUCCESSFUL || sc == RTEMS_TIMEOUT);
+ T_quiet_true(sc == RTEMS_SUCCESSFUL || sc == RTEMS_TIMEOUT);
}
}
-static void release_semaphore(rtems_id timer, void *arg)
+static T_interrupt_test_state interrupt(void *arg)
{
- /* The arg is NULL */
- test_context *ctx = &ctx_instance;
- rtems_status_code sc = rtems_semaphore_release(ctx->semaphore_id);
- rtems_test_assert(sc == RTEMS_SUCCESSFUL);
+ test_context *ctx = arg;
+ T_interrupt_test_state state;
+ rtems_status_code sc;
+
+ state = T_interrupt_test_get_state();
+
+ if (state != T_INTERRUPT_TEST_ACTION) {
+ return T_INTERRUPT_TEST_CONTINUE;
+ }
+
+ sc = rtems_semaphore_release(ctx->semaphore_id);
+ T_quiet_rsc_success(sc);
+
+ if ( ctx->early ) {
+ state = T_INTERRUPT_TEST_EARLY;
+ } else if ( ctx->late ) {
+ state = T_INTERRUPT_TEST_LATE;
+ } else if (
+ ctx->thread_queue_was_null
+ && ctx->status_was_successful
+ && ctx->status_was_timeout
+ ) {
+ state = T_INTERRUPT_TEST_DONE;
+ } else {
+ state = T_INTERRUPT_TEST_CONTINUE;
+ }
+
+ return state;
}
-static bool test_body(void *arg)
+static void prepare(void *arg)
+{
+ test_context *ctx = arg;
+
+ ctx->early = true;
+ ctx->late = false;
+}
+
+static void action(void *arg)
{
test_context *ctx = arg;
- int busy;
Per_CPU_Control *cpu_self;
cpu_self = _Thread_Dispatch_disable();
+ ctx->early = false;
- rtems_test_assert(
- _Thread_Wait_get_status( ctx->semaphore_task_tcb ) == STATUS_SUCCESSFUL
- );
-
- /*
- * Spend some time to make it more likely that we hit the test condition
- * below.
- */
- for (busy = 0; busy < 1000; ++busy) {
- __asm__ volatile ("");
- }
+ T_quiet_rsc_success(_Thread_Wait_get_status( ctx->semaphore_task_tcb ));
if (ctx->semaphore_task_tcb->Wait.queue == NULL) {
ctx->thread_queue_was_null = true;
@@ -98,34 +117,40 @@ static bool test_body(void *arg)
ctx->status_was_timeout = true;
break;
default:
- rtems_test_assert(0);
+ T_unreachable();
break;
}
+ ctx->late = true;
_Thread_Dispatch_enable(cpu_self);
- return ctx->thread_queue_was_null
- && ctx->status_was_successful
- && ctx->status_was_timeout;
+ T_interrupt_test_busy_wait_for_interrupt();
}
-static void Init(rtems_task_argument ignored)
+static const T_interrupt_test_config config = {
+ .prepare = prepare,
+ .action = action,
+ .interrupt = interrupt,
+ .max_iteration_count = 10000
+};
+
+T_TEST_CASE(SemaphoreObtainTimeoutInterrupt)
{
- test_context *ctx = &ctx_instance;
+ test_context ctx;
rtems_status_code sc;
+ T_interrupt_test_state state;
- TEST_BEGIN();
-
- ctx->master_task = rtems_task_self();
+ memset(&ctx, 0, sizeof(ctx));
+ ctx.master_task = rtems_task_self();
sc = rtems_semaphore_create(
rtems_build_name('S', 'E', 'M', 'A'),
1,
RTEMS_COUNTING_SEMAPHORE,
0,
- &ctx->semaphore_id
+ &ctx.semaphore_id
);
- rtems_test_assert(sc == RTEMS_SUCCESSFUL);
+ T_assert_rsc_success(sc);
sc = rtems_task_create(
rtems_build_name('S', 'E', 'M', 'A'),
@@ -133,26 +158,34 @@ static void Init(rtems_task_argument ignored)
RTEMS_MINIMUM_STACK_SIZE,
RTEMS_DEFAULT_MODES,
RTEMS_DEFAULT_ATTRIBUTES,
- &ctx->semaphore_task
+ &ctx.semaphore_task
);
- rtems_test_assert(sc == RTEMS_SUCCESSFUL);
+ T_assert_rsc_success(sc);
sc = rtems_task_start(
- ctx->semaphore_task,
+ ctx.semaphore_task,
semaphore_task,
- (rtems_task_argument) ctx
+ (rtems_task_argument) &ctx
);
- rtems_test_assert(sc == RTEMS_SUCCESSFUL);
+ T_assert_rsc_success(sc);
- interrupt_critical_section_test(test_body, ctx, release_semaphore);
+ state = T_interrupt_test(&config, &ctx);
+ T_eq_int(state, T_INTERRUPT_TEST_DONE);
- rtems_test_assert(ctx->thread_queue_was_null);
- rtems_test_assert(ctx->status_was_successful);
- rtems_test_assert(ctx->status_was_timeout);
+ T_true(ctx.thread_queue_was_null);
+ T_true(ctx.status_was_successful);
+ T_true(ctx.status_was_timeout);
- TEST_END();
+ sc = rtems_task_delete(ctx.semaphore_task);
+ T_rsc_success(sc);
- rtems_test_exit(0);
+ sc = rtems_semaphore_delete(ctx.semaphore_id);
+ 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
@@ -162,8 +195,6 @@ static void Init(rtems_task_argument ignored)
#define CONFIGURE_MAXIMUM_SEMAPHORES 1
#define CONFIGURE_MAXIMUM_TASKS 2
-#define CONFIGURE_MAXIMUM_TIMERS 1
-#define CONFIGURE_MAXIMUM_USER_EXTENSIONS 1
#define CONFIGURE_INIT_TASK_PRIORITY PRIORITY_MASTER
#define CONFIGURE_INIT_TASK_ATTRIBUTES RTEMS_DEFAULT_ATTRIBUTES
diff --git a/testsuites/sptests/spintrcritical20/spintrcritical20.scn b/testsuites/sptests/spintrcritical20/spintrcritical20.scn
index 867d2a26e3..7f5ec87aba 100644
--- a/testsuites/sptests/spintrcritical20/spintrcritical20.scn
+++ b/testsuites/sptests/spintrcritical20/spintrcritical20.scn
@@ -1,4 +1,30 @@
-*** TEST INTERRUPT CRITICAL SECTION 20 ***
+*** BEGIN OF TEST SPINTRCRITICAL 20 ***
+*** TEST VERSION: 6.0.0.929e49a54ab4d2d18c9fb8d03610614f63e25b8d
+*** TEST STATE: EXPECTED_PASS
+*** TEST BUILD: RTEMS_DEBUG RTEMS_POSIX_API RTEMS_SMP
+*** TEST TOOLS: 10.0.1 20200406 (RTEMS 6, RSB bec88a6dd856892c3e66e4598252ea07d7a0d762, Newlib ece49e4)
+A:SPINTRCRITICAL 20
+S:Platform:RTEMS
+S:Compiler:10.0.1 20200406 (RTEMS 6, RSB bec88a6dd856892c3e66e4598252ea07d7a0d762, Newlib ece49e4)
+S:Version:6.0.0.929e49a54ab4d2d18c9fb8d03610614f63e25b8d
+S:BSP:realview_pbx_a9_qemu
+S:RTEMS_DEBUG:1
+S:RTEMS_MULTIPROCESSING:0
+S:RTEMS_POSIX_API:1
+S:RTEMS_PROFILING:0
+S:RTEMS_SMP:1
+B:SemaphoreObtainTimeoutInterrupt
+P:0:0:UI1:init.c:159
+P:1:0:UI1:init.c:169
+P:2:0:UI1:init.c:176
+P:3:0:UI1:init.c:179
+P:4:0:UI1:init.c:181
+P:5:0:UI1:init.c:182
+P:6:0:UI1:init.c:183
+P:7:0:UI1:init.c:186
+P:8:0:UI1:init.c:189
+E:SemaphoreObtainTimeoutInterrupt:N:9:F:0:D:0.105419
+Z:SPINTRCRITICAL 20:C:1:N:9:F:0:D:0.106593
+Y:ReportHash:SHA256:8429590b312ac9e661529a4a932470feefd05747f60d30afaee1486259d26972
-Support - rtems_timer_create - creating timer 1
-*** END OF TEST INTERRUPT CRITICAL SECTION 20 ***
+*** END OF TEST SPINTRCRITICAL 20 ***
diff --git a/testsuites/sptests/spintrcritical21/init.c b/testsuites/sptests/spintrcritical21/init.c
index faa48f717c..032ee89eac 100644
--- a/testsuites/sptests/spintrcritical21/init.c
+++ b/testsuites/sptests/spintrcritical21/init.c
@@ -1,6 +1,8 @@
/*
* Classic API Signal to Task from ISR
*
+ * Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+ *
* COPYRIGHT (c) 1989-2011.
* On-Line Applications Research Corporation (OAR).
*
@@ -13,67 +15,74 @@
#include "config.h"
#endif
-#define CONFIGURE_INIT
-#include "system.h"
-
-#include <intrcritical.h>
+#include <rtems/test.h>
+#include <rtems/test-info.h>
#include <rtems/score/threadimpl.h>
#include <rtems/rtems/eventimpl.h>
const char rtems_test_name[] = "SPINTRCRITICAL 21";
-/*
- * ERROR CHECKING NOTE:
- *
- * We are either at dispatch disable level 1 or 2. Either way, it is
- * safer not to check the dispatch level explicitly so we are using
- * fatal_directive_check_status_only() not directive_failed().
- */
-
-static volatile bool case_hit;
+#define MAX_ITERATION_COUNT 10000
-static rtems_id main_task;
+typedef struct {
+ rtems_id main_task;
+ Thread_Control *main_thread;
+ rtems_id other_task;
+} test_context;
-static Thread_Control *main_thread;
-
-static rtems_id other_task;
+static bool is_blocked( Thread_Wait_flags flags )
+{
+ return flags == ( THREAD_WAIT_CLASS_EVENT | THREAD_WAIT_STATE_BLOCKED );
+}
-static bool is_case_hit( void )
+static bool interrupts_blocking_op( Thread_Wait_flags flags )
{
- return _Thread_Wait_flags_get( main_thread)
+ return flags
== ( THREAD_WAIT_CLASS_EVENT | THREAD_WAIT_STATE_INTEND_TO_BLOCK );
}
-static rtems_timer_service_routine test_event_from_isr(
- rtems_id timer,
- void *arg
+static T_interrupt_test_state event_from_isr_interrupt(
+ void *arg
)
{
- rtems_status_code status;
+ test_context *ctx;
+ T_interrupt_test_state state;
+ Thread_Wait_flags flags;
+ rtems_status_code status;
- if ( is_case_hit() ) {
+ ctx = arg;
+ flags = _Thread_Wait_flags_get( ctx->main_thread );
+
+ if ( interrupts_blocking_op( flags ) ) {
/*
* This event send hits the critical section but sends to
* another task so doesn't impact this critical section.
*/
- status = rtems_event_send( other_task, 0x02 );
- fatal_directive_check_status_only( status, RTEMS_SUCCESSFUL, "event send" );
+ status = rtems_event_send( ctx->other_task, 0x02 );
+ T_quiet_rsc_success( status );
/*
* This event send hits the main task but doesn't satisfy
* it's blocking condition so it will still block
*/
- status = rtems_event_send( main_task, 0x02 );
- fatal_directive_check_status_only( status, RTEMS_SUCCESSFUL, "event send" );
-
- case_hit = true;
+ status = rtems_event_send( ctx->main_task, 0x02 );
+ T_quiet_rsc_success( status );
+
+ state = T_INTERRUPT_TEST_DONE;
+ } else if ( is_blocked( flags ) ) {
+ state = T_INTERRUPT_TEST_LATE;
+ } else {
+ state = T_INTERRUPT_TEST_EARLY;
}
- status = rtems_event_send( main_task, 0x01 );
- fatal_directive_check_status_only( status, RTEMS_SUCCESSFUL, "event send" );
+
+ status = rtems_event_send( ctx->main_task, 0x01 );
+ T_quiet_rsc_success( status );
+
+ return state;
}
-static bool test_body_event_from_isr( void *arg )
+static void event_from_isr_action( void *arg )
{
rtems_status_code status;
rtems_event_set out;
@@ -81,30 +90,72 @@ static bool test_body_event_from_isr( void *arg )
(void) arg;
status = rtems_event_receive( 0x01, RTEMS_DEFAULT_OPTIONS, 0, &out );
- rtems_test_assert( status == RTEMS_SUCCESSFUL );
+ T_quiet_rsc_success( status );
+}
+
+static const T_interrupt_test_config event_from_isr_config = {
+ .action = event_from_isr_action,
+ .interrupt = event_from_isr_interrupt,
+ .max_iteration_count = MAX_ITERATION_COUNT
+};
+
+T_TEST_CASE(EventFromISR)
+{
+ test_context ctx;
+ T_interrupt_test_state state;
+ rtems_status_code status;
+
+ ctx.main_task = rtems_task_self();
+ ctx.main_thread = _Thread_Get_executing();
+
+ status = rtems_task_create(
+ 0xa5a5a5a5,
+ 1,
+ RTEMS_MINIMUM_STACK_SIZE,
+ RTEMS_DEFAULT_MODES,
+ RTEMS_DEFAULT_ATTRIBUTES,
+ &ctx.other_task
+ );
+ T_assert_rsc_success( status );
+
+ state = T_interrupt_test( &event_from_isr_config, &ctx );
+ T_eq_int( state, T_INTERRUPT_TEST_DONE );
- return case_hit;
+ status = rtems_task_delete( ctx.other_task );
+ T_rsc_success( status );
}
-static rtems_timer_service_routine test_event_with_timeout_from_isr(
- rtems_id timer,
- void *arg
+static T_interrupt_test_state event_with_timeout_from_isr_interrupt(
+ void *arg
)
{
- rtems_status_code status;
+ test_context *ctx;
+ T_interrupt_test_state state;
+ Thread_Wait_flags flags;
+ rtems_status_code status;
- if ( is_case_hit() ) {
+ ctx = arg;
+ flags = _Thread_Wait_flags_get( ctx->main_thread );
+
+ if ( interrupts_blocking_op( flags ) ) {
/*
* We want to catch the task while it is blocking. Otherwise
* just send and make it happy.
*/
- case_hit = true;
+ state = T_INTERRUPT_TEST_DONE;
+ } else if ( is_blocked( flags ) ) {
+ state = T_INTERRUPT_TEST_LATE;
+ } else {
+ state = T_INTERRUPT_TEST_EARLY;
}
- status = rtems_event_send( main_task, 0x01 );
- fatal_directive_check_status_only( status, RTEMS_SUCCESSFUL, "event send" );
+
+ status = rtems_event_send( ctx->main_task, 0x01 );
+ T_quiet_rsc_success( status );
+
+ return state;
}
-static bool test_body_event_with_timeout_from_isr( void *arg )
+static void event_with_timeout_from_isr_action( void *arg )
{
rtems_status_code status;
rtems_event_set out;
@@ -112,69 +163,44 @@ static bool test_body_event_with_timeout_from_isr( void *arg )
(void) arg;
status = rtems_event_receive( 0x01, RTEMS_DEFAULT_OPTIONS, 1, &out );
- rtems_test_assert( status == RTEMS_SUCCESSFUL || status == RTEMS_TIMEOUT );
-
- return case_hit;
+ T_quiet_true( status == RTEMS_SUCCESSFUL || status == RTEMS_TIMEOUT );
}
-rtems_task Init(
- rtems_task_argument argument
-)
-{
- rtems_status_code status;
-
- TEST_BEGIN();
+static const T_interrupt_test_config event_with_timeout_from_isr_config = {
+ .action = event_with_timeout_from_isr_action,
+ .interrupt = event_with_timeout_from_isr_interrupt,
+ .max_iteration_count = MAX_ITERATION_COUNT
+};
- main_task = rtems_task_self();
- main_thread = _Thread_Get_executing();
+T_TEST_CASE( EventWithTimeoutFromISR )
+{
+ test_context ctx;
+ T_interrupt_test_state state;
- status = rtems_task_create(
- 0xa5a5a5a5,
- 1,
- RTEMS_MINIMUM_STACK_SIZE,
- RTEMS_DEFAULT_MODES,
- RTEMS_DEFAULT_ATTRIBUTES,
- &other_task
- );
- directive_failed( status, "rtems_task_create" );
+ ctx.main_task = rtems_task_self();
+ ctx.main_thread = _Thread_Get_executing();
+ ctx.other_task = 0xdeadbeef;
- /*
- * Test Event send successful from ISR -- receive is forever
- */
+ state = T_interrupt_test( &event_with_timeout_from_isr_config, &ctx );
+ T_eq_int( state, T_INTERRUPT_TEST_DONE );
+}
- case_hit = false;
- interrupt_critical_section_test(
- test_body_event_from_isr,
- NULL,
- test_event_from_isr
- );
+static rtems_task Init( rtems_task_argument argument )
+{
+ rtems_test_run( argument, TEST_STATE );
+}
- printf(
- "Event sent from ISR hitting synchronization point has %soccurred\n",
- case_hit ? "" : "NOT "
- );
+#define CONFIGURE_INIT
- rtems_test_assert( case_hit );
+#define CONFIGURE_APPLICATION_NEEDS_SIMPLE_CONSOLE_DRIVER
+#define CONFIGURE_APPLICATION_NEEDS_CLOCK_DRIVER
- /*
- * Test Event send successful from ISR -- receive has timeout
- */
+#define CONFIGURE_INITIAL_EXTENSIONS RTEMS_TEST_INITIAL_EXTENSION
- case_hit = false;
- interrupt_critical_section_test(
- test_body_event_with_timeout_from_isr,
- NULL,
- test_event_with_timeout_from_isr
- );
+#define CONFIGURE_RTEMS_INIT_TASKS_TABLE
- printf(
- "Event sent from ISR (with timeout) hitting synchronization "
- "point has %soccurred\n",
- case_hit ? "" : "NOT "
- );
+#define CONFIGURE_MICROSECONDS_PER_TICK 1000
- rtems_test_assert( case_hit );
+#define CONFIGURE_MAXIMUM_TASKS 2
- TEST_END();
- rtems_test_exit( 0 );
-}
+#include <rtems/confdefs.h>
diff --git a/testsuites/sptests/spintrcritical21/spintrcritical21.scn b/testsuites/sptests/spintrcritical21/spintrcritical21.scn
index d7a1998d0a..f20fff9b69 100644
--- a/testsuites/sptests/spintrcritical21/spintrcritical21.scn
+++ b/testsuites/sptests/spintrcritical21/spintrcritical21.scn
@@ -1,4 +1,27 @@
*** BEGIN OF TEST SPINTRCRITICAL 21 ***
-Event sent from ISR hitting synchronization point has occurred
-Event sent from ISR (with timeout) hitting synchronization point has occurred
+*** TEST VERSION: 6.0.0.929e49a54ab4d2d18c9fb8d03610614f63e25b8d
+*** TEST STATE: EXPECTED_PASS
+*** TEST BUILD: RTEMS_DEBUG RTEMS_POSIX_API RTEMS_SMP
+*** TEST TOOLS: 10.0.1 20200406 (RTEMS 6, RSB bec88a6dd856892c3e66e4598252ea07d7a0d762, Newlib ece49e4)
+A:SPINTRCRITICAL 21
+S:Platform:RTEMS
+S:Compiler:10.0.1 20200406 (RTEMS 6, RSB bec88a6dd856892c3e66e4598252ea07d7a0d762, Newlib ece49e4)
+S:Version:6.0.0.929e49a54ab4d2d18c9fb8d03610614f63e25b8d
+S:BSP:realview_pbx_a9_qemu
+S:RTEMS_DEBUG:1
+S:RTEMS_MULTIPROCESSING:0
+S:RTEMS_POSIX_API:1
+S:RTEMS_PROFILING:0
+S:RTEMS_SMP:1
+B:EventWithTimeoutFromISR
+P:0:0:UI1:init.c:185
+E:EventWithTimeoutFromISR:N:1:F:0:D:0.990057
+B:EventFromISR
+P:0:0:UI1:init.c:119
+P:1:0:UI1:init.c:122
+P:2:0:UI1:init.c:125
+E:EventFromISR:N:3:F:0:D:0.042543
+Z:SPINTRCRITICAL 21:C:2:N:4:F:0:D:1.034216
+Y:ReportHash:SHA256:64aa73f53f6e67b5eb349f0dcf4e2246ce87d7e3e8c201f9ee26ec4e3bfc30f6
+
*** END OF TEST SPINTRCRITICAL 21 ***
diff --git a/testsuites/sptests/spintrcritical21/system.h b/testsuites/sptests/spintrcritical21/system.h
deleted file mode 100644
index 04b9050598..0000000000
--- a/testsuites/sptests/spintrcritical21/system.h
+++ /dev/null
@@ -1,39 +0,0 @@
-/* system.h
- *
- * This include file contains information that is included in every
- * function in the test set.
- *
- * COPYRIGHT (c) 1989-2007.
- * 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.
- */
-
-#include <tmacros.h>
-
-/* functions */
-
-rtems_task Init(
- rtems_task_argument argument
-);
-
-/* configuration information */
-
-#define CONFIGURE_APPLICATION_NEEDS_SIMPLE_CONSOLE_DRIVER
-#define CONFIGURE_APPLICATION_NEEDS_CLOCK_DRIVER
-
-#define CONFIGURE_INITIAL_EXTENSIONS RTEMS_TEST_INITIAL_EXTENSION
-
-#define CONFIGURE_RTEMS_INIT_TASKS_TABLE
-
-#define CONFIGURE_MICROSECONDS_PER_TICK 1000
-
-#define CONFIGURE_MAXIMUM_TASKS 2
-#define CONFIGURE_MAXIMUM_TIMERS 1
-#define CONFIGURE_MAXIMUM_USER_EXTENSIONS 1
-
-#include <rtems/confdefs.h>
-
-/* end of include file */
diff --git a/testsuites/sptests/spintrcritical22/init.c b/testsuites/sptests/spintrcritical22/init.c
index b7cd430867..192a5a98b3 100644
--- a/testsuites/sptests/spintrcritical22/init.c
+++ b/testsuites/sptests/spintrcritical22/init.c
@@ -1,11 +1,5 @@
/*
- * Copyright (c) 2014 embedded brains GmbH. All rights reserved.
- *
- * embedded brains GmbH
- * Dornierstr. 4
- * 82178 Puchheim
- * Germany
- * <rtems@embedded-brains.de>
+ * Copyright (C) 2014, 2020 embedded brains GmbH (http://www.embedded-brains.de)
*
* The license and distribution terms for this file may be
* found in the file LICENSE in this distribution or at
@@ -17,7 +11,8 @@
#endif
#include <tmacros.h>
-#include <intrcritical.h>
+#include <rtems/test.h>
+
#include <rtems/rtems/semimpl.h>
const char rtems_test_name[] = "SPINTRCRITICAL 22";
@@ -26,11 +21,8 @@ typedef struct {
rtems_id semaphore_id;
Semaphore_Control *semaphore_control;
Thread_Control *main_task_control;
- volatile bool done;
} test_context;
-static test_context ctx_instance;
-
static Semaphore_Control *get_semaphore_control(rtems_id id)
{
Thread_queue_Context queue_context;
@@ -43,19 +35,21 @@ static Semaphore_Control *get_semaphore_control(rtems_id id)
return sem;
}
-static void release_semaphore(rtems_id timer, void *arg)
+static T_interrupt_test_state release_semaphore(void *arg)
{
- /* The arg is NULL */
- test_context *ctx = &ctx_instance;
+ test_context *ctx = arg;
rtems_status_code sc;
+ Thread_Wait_flags flags;
+ T_interrupt_test_state state;
+
+ flags = _Thread_Wait_flags_get(ctx->main_task_control);
if (
- _Thread_Wait_flags_get(ctx->main_task_control)
- == (THREAD_WAIT_CLASS_OBJECT | THREAD_WAIT_STATE_INTEND_TO_BLOCK)
+ flags == (THREAD_WAIT_CLASS_OBJECT | THREAD_WAIT_STATE_INTEND_TO_BLOCK)
) {
CORE_semaphore_Control *sem;
- ctx->done = true;
+ state = T_INTERRUPT_TEST_DONE;
sc = rtems_semaphore_release(ctx->semaphore_id);
rtems_test_assert(sc == RTEMS_SUCCESSFUL);
@@ -67,12 +61,33 @@ static void release_semaphore(rtems_id timer, void *arg)
sem = &ctx->semaphore_control->Core_control.Semaphore;
rtems_test_assert(sem->count == 0);
} else {
+ if (flags == (THREAD_WAIT_CLASS_OBJECT | THREAD_WAIT_STATE_BLOCKED)) {
+ state = T_INTERRUPT_TEST_LATE;
+ } else {
+ state = T_INTERRUPT_TEST_EARLY;
+ }
+
sc = rtems_semaphore_release(ctx->semaphore_id);
rtems_test_assert(sc == RTEMS_SUCCESSFUL);
}
+
+ return state;
+}
+
+static void action(void *arg)
+{
+ test_context *ctx = arg;
+ rtems_status_code sc;
+
+ sc = rtems_semaphore_obtain(
+ ctx->semaphore_id,
+ RTEMS_WAIT,
+ 2
+ );
+ rtems_test_assert(sc == RTEMS_SUCCESSFUL);
}
-static bool test_body(void *arg)
+static void prepare(void *arg)
{
test_context *ctx = arg;
rtems_status_code sc;
@@ -83,43 +98,59 @@ static bool test_body(void *arg)
0
);
rtems_test_assert(sc == RTEMS_SUCCESSFUL || sc == RTEMS_UNSATISFIED);
+}
- sc = rtems_semaphore_obtain(
- ctx->semaphore_id,
- RTEMS_WAIT,
- 2
+static void blocked(void *arg)
+{
+ test_context *ctx = arg;
+ rtems_status_code sc;
+
+ T_interrupt_test_change_state(
+ T_INTERRUPT_TEST_ACTION,
+ T_INTERRUPT_TEST_LATE
);
- rtems_test_assert(sc == RTEMS_SUCCESSFUL || sc == RTEMS_TIMEOUT);
- return ctx->done;
+ sc = rtems_semaphore_release(ctx->semaphore_id);
+ rtems_test_assert(sc == RTEMS_SUCCESSFUL);
}
-static void Init(rtems_task_argument ignored)
+static const T_interrupt_test_config config = {
+ .prepare = prepare,
+ .action = action,
+ .interrupt = release_semaphore,
+ .blocked = blocked,
+ .max_iteration_count = 10000
+};
+
+T_TEST_CASE(InterruptSemaphoreObtain)
{
- test_context *ctx = &ctx_instance;
+ test_context ctx;
rtems_status_code sc;
+ T_interrupt_test_state state;
- TEST_BEGIN();
-
- ctx->main_task_control = _Thread_Get_executing();
+ ctx.main_task_control = _Thread_Get_executing();
sc = rtems_semaphore_create(
rtems_build_name('S', 'E', 'M', 'A'),
1,
RTEMS_SIMPLE_BINARY_SEMAPHORE,
0,
- &ctx->semaphore_id
+ &ctx.semaphore_id
);
rtems_test_assert(sc == RTEMS_SUCCESSFUL);
- ctx->semaphore_control = get_semaphore_control(ctx->semaphore_id);
+ ctx.semaphore_control = get_semaphore_control(ctx.semaphore_id);
- interrupt_critical_section_test(test_body, ctx, release_semaphore);
- rtems_test_assert(ctx->done);
+ state = T_interrupt_test(&config, &ctx);
+ T_eq_int(state, T_INTERRUPT_TEST_DONE);
- TEST_END();
+ sc = rtems_semaphore_delete(ctx.semaphore_id);
+ rtems_test_assert(sc == RTEMS_SUCCESSFUL);
+}
- rtems_test_exit(0);
+static void Init(rtems_task_argument argument)
+{
+ rtems_test_run(argument, TEST_STATE);
}
#define CONFIGURE_APPLICATION_NEEDS_SIMPLE_CONSOLE_DRIVER
@@ -129,8 +160,6 @@ static void Init(rtems_task_argument ignored)
#define CONFIGURE_MAXIMUM_SEMAPHORES 1
#define CONFIGURE_MAXIMUM_TASKS 1
-#define CONFIGURE_MAXIMUM_TIMERS 1
-#define CONFIGURE_MAXIMUM_USER_EXTENSIONS 1
#define CONFIGURE_INITIAL_EXTENSIONS RTEMS_TEST_INITIAL_EXTENSION
diff --git a/testsuites/sptests/spintrcritical22/spintrcritical22.scn b/testsuites/sptests/spintrcritical22/spintrcritical22.scn
index 7cf4ed2850..ed8863b98b 100644
--- a/testsuites/sptests/spintrcritical22/spintrcritical22.scn
+++ b/testsuites/sptests/spintrcritical22/spintrcritical22.scn
@@ -1,2 +1,22 @@
*** BEGIN OF TEST SPINTRCRITICAL 22 ***
+*** TEST VERSION: 6.0.0.929e49a54ab4d2d18c9fb8d03610614f63e25b8d
+*** TEST STATE: EXPECTED_PASS
+*** TEST BUILD: RTEMS_DEBUG RTEMS_POSIX_API RTEMS_SMP
+*** TEST TOOLS: 10.0.1 20200406 (RTEMS 6, RSB bec88a6dd856892c3e66e4598252ea07d7a0d762, Newlib ece49e4)
+A:SPINTRCRITICAL 22
+S:Platform:RTEMS
+S:Compiler:10.0.1 20200406 (RTEMS 6, RSB bec88a6dd856892c3e66e4598252ea07d7a0d762, Newlib ece49e4)
+S:Version:6.0.0.929e49a54ab4d2d18c9fb8d03610614f63e25b8d
+S:BSP:realview_pbx_a9_qemu
+S:RTEMS_DEBUG:1
+S:RTEMS_MULTIPROCESSING:0
+S:RTEMS_POSIX_API:1
+S:RTEMS_PROFILING:0
+S:RTEMS_SMP:1
+B:InterruptSemaphoreObtain
+P:0:0:UI1:init.c:145
+E:InterruptSemaphoreObtain:N:1:F:0:D:0.432627
+Z:SPINTRCRITICAL 22:C:1:N:1:F:0:D:0.433689
+Y:ReportHash:SHA256:0a161773566007e97ab42b4a9303b6937c1a3fceac5201aba50f9755cd880459
+
*** END OF TEST SPINTRCRITICAL 22 ***
diff --git a/testsuites/sptests/spintrcritical23/init.c b/testsuites/sptests/spintrcritical23/init.c
index 70907f0112..5959153b71 100644
--- a/testsuites/sptests/spintrcritical23/init.c
+++ b/testsuites/sptests/spintrcritical23/init.c
@@ -1,11 +1,5 @@
/*
- * Copyright (c) 2015, 2017 embedded brains GmbH. All rights reserved.
- *
- * embedded brains GmbH
- * Dornierstr. 4
- * 82178 Puchheim
- * Germany
- * <rtems@embedded-brains.de>
+ * Copyright (C) 2015, 2020 embedded brains GmbH (http://www.embedded-brains.de)
*
* The license and distribution terms for this file may be
* found in the file LICENSE in this distribution or at
@@ -16,8 +10,8 @@
#include "config.h"
#endif
-#include <tmacros.h>
-#include <intrcritical.h>
+#include <rtems/test.h>
+#include <rtems/test-info.h>
#include <string.h>
@@ -33,18 +27,23 @@ typedef struct {
Scheduler_priority_Node *scheduler_node;
rtems_task_priority priority_task;
rtems_task_priority priority_interrupt;
- bool done;
+ volatile bool early;
+ volatile bool late;
} test_context;
-static test_context ctx_instance;
-
-static void change_priority(rtems_id timer, void *arg)
+static T_interrupt_test_state interrupt(void *arg)
{
- /* The arg is NULL */
- test_context *ctx = &ctx_instance;
+ test_context *ctx = arg;
+ T_interrupt_test_state state;
rtems_interrupt_lock_context lock_context;
unsigned int next_priority;
+ state = T_interrupt_test_get_state();
+
+ if (state != T_INTERRUPT_TEST_ACTION) {
+ return T_INTERRUPT_TEST_CONTINUE;
+ }
+
rtems_interrupt_lock_acquire(&ctx->lock, &lock_context);
next_priority = SCHEDULER_PRIORITY_UNMAP(
@@ -67,16 +66,34 @@ static void change_priority(rtems_id timer, void *arg)
priority_interrupt,
&previous
);
- rtems_test_assert(sc == RTEMS_SUCCESSFUL);
- rtems_test_assert(previous == priority_task);
+ T_quiet_rsc_success(sc);
+ T_quiet_eq_u32(previous, priority_task);
- ctx->done = true;
+ state = T_INTERRUPT_TEST_DONE;
} else {
rtems_interrupt_lock_release(&ctx->lock, &lock_context);
+
+ if ( ctx->early ) {
+ state = T_INTERRUPT_TEST_EARLY;
+ } else if ( ctx->late ) {
+ state = T_INTERRUPT_TEST_LATE;
+ } else {
+ state = T_INTERRUPT_TEST_CONTINUE;
+ }
}
+
+ return state;
+}
+
+static void prepare(void *arg)
+{
+ test_context *ctx = arg;
+
+ ctx->early = true;
+ ctx->late = false;
}
-static bool test_body(void *arg)
+static void action(void *arg)
{
test_context *ctx = arg;
rtems_status_code sc;
@@ -96,44 +113,63 @@ static bool test_body(void *arg)
rtems_interrupt_lock_release(&ctx->lock, &lock_context);
+ ctx->early = false;
sc = rtems_task_set_priority(
ctx->task_id,
priority_task,
&previous
);
- rtems_test_assert(sc == RTEMS_SUCCESSFUL);
- rtems_test_assert(previous == priority_last);
+ T_quiet_rsc_success(RTEMS_SUCCESSFUL);
+ T_quiet_eq_u32(previous, priority_last);
+ ctx->late = true;
- if (ctx->done) {
+ if (T_interrupt_test_get_state() == T_INTERRUPT_TEST_DONE) {
sc = rtems_task_set_priority(
ctx->task_id,
RTEMS_CURRENT_PRIORITY,
&previous
);
- rtems_test_assert(sc == RTEMS_SUCCESSFUL);
- rtems_test_assert(previous == priority_interrupt);
+ T_quiet_rsc_success(sc);
+ T_quiet_eq_u32(previous, priority_interrupt);
}
-
- return ctx->done;
}
-static void Init(rtems_task_argument arg)
+static const T_interrupt_test_config config = {
+ .prepare = prepare,
+ .action = action,
+ .interrupt = interrupt,
+ .max_iteration_count = 10000
+};
+
+T_TEST_CASE(TaskSetPriorityInterrupt)
{
- test_context *ctx = &ctx_instance;
+ test_context ctx;
+ T_interrupt_test_state state;
+ rtems_status_code sc;
+ rtems_task_priority prio;
- TEST_BEGIN();
+ sc = rtems_task_set_priority(RTEMS_SELF, RTEMS_CURRENT_PRIORITY, &prio);
+ T_rsc_success(sc);
- rtems_interrupt_lock_initialize(&ctx->lock, "Test");
- ctx->priority_task = 1;
- ctx->task_id = rtems_task_self();
- ctx->scheduler_node =
+ memset(&ctx, 0, sizeof(ctx));
+ rtems_interrupt_lock_initialize(&ctx.lock, "Test");
+ ctx.priority_task = 1;
+ ctx.task_id = rtems_task_self();
+ ctx.scheduler_node =
_Scheduler_priority_Thread_get_node(_Thread_Get_executing());
- interrupt_critical_section_test(test_body, ctx, change_priority);
- rtems_test_assert(ctx->done);
+ state = T_interrupt_test(&config, &ctx);
+ T_eq_int(state, T_INTERRUPT_TEST_DONE);
+
+ rtems_interrupt_lock_destroy(&ctx.lock);
- TEST_END();
- rtems_test_exit(0);
+ sc = rtems_task_set_priority(RTEMS_SELF, prio, &prio);
+ T_rsc_success(sc);
+}
+
+static rtems_task Init(rtems_task_argument argument)
+{
+ rtems_test_run(argument, TEST_STATE);
}
#define CONFIGURE_APPLICATION_NEEDS_CLOCK_DRIVER
@@ -142,8 +178,6 @@ static void Init(rtems_task_argument arg)
#define CONFIGURE_MICROSECONDS_PER_TICK 1000
#define CONFIGURE_MAXIMUM_TASKS 1
-#define CONFIGURE_MAXIMUM_TIMERS 1
-#define CONFIGURE_MAXIMUM_USER_EXTENSIONS 1
/* We use internal data structures of this scheduler in this test */
#define CONFIGURE_SCHEDULER_PRIORITY
diff --git a/testsuites/sptests/spintrcritical23/spintrcritical23.scn b/testsuites/sptests/spintrcritical23/spintrcritical23.scn
index cea3292ded..fe3641a78c 100644
--- a/testsuites/sptests/spintrcritical23/spintrcritical23.scn
+++ b/testsuites/sptests/spintrcritical23/spintrcritical23.scn
@@ -1,2 +1,22 @@
*** BEGIN OF TEST SPINTRCRITICAL 23 ***
+*** TEST VERSION: 6.0.0.929e49a54ab4d2d18c9fb8d03610614f63e25b8d
+*** TEST STATE: EXPECTED_PASS
+*** TEST BUILD: RTEMS_DEBUG RTEMS_POSIX_API RTEMS_SMP
+*** TEST TOOLS: 10.0.1 20200406 (RTEMS 6, RSB bec88a6dd856892c3e66e4598252ea07d7a0d762, Newlib ece49e4)
+A:SPINTRCRITICAL 23
+S:Platform:RTEMS
+S:Compiler:10.0.1 20200406 (RTEMS 6, RSB bec88a6dd856892c3e66e4598252ea07d7a0d762, Newlib ece49e4)
+S:Version:6.0.0.929e49a54ab4d2d18c9fb8d03610614f63e25b8d
+S:BSP:realview_pbx_a9_qemu
+S:RTEMS_DEBUG:1
+S:RTEMS_MULTIPROCESSING:0
+S:RTEMS_POSIX_API:1
+S:RTEMS_PROFILING:0
+S:RTEMS_SMP:1
+B:TaskSetPriorityInterrupt
+P:0:0:UI1:init.c:166
+E:TaskSetPriorityInterrupt:N:1:F:0:D:0.914959
+Z:SPINTRCRITICAL 23:C:1:N:1:F:0:D:0.916110
+Y:ReportHash:SHA256:b4aa098c47f8352ac00c37c1b61aabebd8770febfa4fd8821a1121a59b3c2b80
+
*** END OF TEST SPINTRCRITICAL 23 ***
diff --git a/testsuites/sptests/spintrcritical24/init.c b/testsuites/sptests/spintrcritical24/init.c
index 785ebacadd..347b707355 100644
--- a/testsuites/sptests/spintrcritical24/init.c
+++ b/testsuites/sptests/spintrcritical24/init.c
@@ -1,11 +1,5 @@
/*
- * Copyright (c) 2017 embedded brains GmbH. All rights reserved.
- *
- * embedded brains GmbH
- * Dornierstr. 4
- * 82178 Puchheim
- * Germany
- * <rtems@embedded-brains.de>
+ * Copyright (C) 2017, 2020 embedded brains GmbH (http://www.embedded-brains.de)
*
* The license and distribution terms for this file may be
* found in the file LICENSE in this distribution or at
@@ -17,25 +11,29 @@
#endif
#include <sys/stat.h>
+#include <errno.h>
#include <fcntl.h>
+#include <string.h>
#include <unistd.h>
-#include <errno.h>
#include <rtems/imfs.h>
-
-#include <tmacros.h>
-#include <intrcritical.h>
+#include <rtems/libio_.h>
+#include <rtems/test-info.h>
+#include <rtems/test.h>
const char rtems_test_name[] = "SPINTRCRITICAL 24";
typedef struct {
int fd;
+ rtems_libio_t *iop;
+ long early_count;
+ long late_count;
+ long potential_hit_count;
long append_count;
long no_append_count;
+ volatile bool closed;
} test_context;
-static test_context test_instance;
-
static const char path[] = "generic";
static int handler_close(rtems_libio_t *iop)
@@ -43,6 +41,7 @@ static int handler_close(rtems_libio_t *iop)
test_context *ctx;
ctx = IMFS_generic_get_context_by_iop(iop);
+ ctx->closed = true;
if (rtems_libio_iop_is_append(iop)) {
++ctx->append_count;
@@ -67,67 +66,120 @@ static const IMFS_node_control node_control = {
.node_destroy = IMFS_node_destroy_default
};
-static void do_fcntl(rtems_id timer, void *arg)
+static T_interrupt_test_state interrupt(void *arg)
{
- /* The arg is NULL */
test_context *ctx;
+ T_interrupt_test_state state;
int rv;
+ unsigned int flags;
+
+ state = T_interrupt_test_get_state();
- ctx = &test_instance;
+ if (state != T_INTERRUPT_TEST_ACTION) {
+ return T_INTERRUPT_TEST_CONTINUE;
+ }
+
+ ctx = arg;
+ flags = rtems_libio_iop_flags_set(ctx->iop, 0);
+
+ if ((flags & LIBIO_FLAGS_OPEN) != 0) {
+ ++ctx->early_count;
+ state = T_INTERRUPT_TEST_EARLY;
+ } else if (ctx->closed) {
+ ++ctx->late_count;
+ state = T_INTERRUPT_TEST_LATE;
+ } else {
+ ++ctx->potential_hit_count;
+
+ if (ctx->potential_hit_count >= 13) {
+ state = T_INTERRUPT_TEST_DONE;
+ } else {
+ state = T_INTERRUPT_TEST_CONTINUE;
+ }
+ }
rv = fcntl(ctx->fd, F_SETFL, O_APPEND);
if (rv != 0) {
- rtems_test_assert(rv == -1);
- rtems_test_assert(errno == EBADF);
+ T_quiet_psx_error(rv, EBADF);
}
+
+ return state;
}
-static bool test_body(void *arg)
+static void prepare(void *arg)
{
test_context *ctx;
- int rv;
ctx = arg;
ctx->fd = open(path, O_RDWR);
- rtems_test_assert(ctx->fd >= 0);
+ T_quiet_ge_int(ctx->fd, 0);
+
+ ctx->closed = false;
+ ctx->iop = rtems_libio_iop(ctx->fd);
+}
+
+static void action(void *arg)
+{
+ test_context *ctx;
+ int rv;
+
+ ctx = arg;
rv = close(ctx->fd);
- rtems_test_assert(rv == 0);
+ T_quiet_psx_success(rv);
- return false;
+ T_interrupt_test_busy_wait_for_interrupt();
}
-static void test(test_context *ctx)
+static const T_interrupt_test_config config = {
+ .prepare = prepare,
+ .action = action,
+ .interrupt = interrupt,
+ .max_iteration_count = 10000
+};
+
+T_TEST_CASE(CloseInterrupt)
{
+ test_context ctx;
const char *path = "generic";
int rv;
+ T_interrupt_test_state state;
+
+ memset(&ctx, 0, sizeof(ctx));
rv = IMFS_make_generic_node(
path,
S_IFCHR | S_IRWXU | S_IRWXG | S_IRWXO,
&node_control,
- ctx
+ &ctx
);
- rtems_test_assert(rv == 0);
+ T_psx_success(rv);
+
+ state = T_interrupt_test(&config, &ctx);
+ T_eq_int(state, T_INTERRUPT_TEST_DONE);
- interrupt_critical_section_test(test_body, ctx, do_fcntl);
+ T_log(T_NORMAL, "early count = %ld", ctx.early_count);
+ T_log(T_NORMAL, "late count = %ld", ctx.late_count);
+ T_log(T_NORMAL, "potential hit count = %ld", ctx.potential_hit_count);
+ T_log(T_NORMAL, "append count = %ld", ctx.append_count);
+ T_log(T_NORMAL, "no append count = %ld", ctx.no_append_count);
/* There is no reliable indicator if the test case has been hit */
- rtems_test_assert(ctx->append_count > 0);
- rtems_test_assert(ctx->no_append_count > 0);
+ T_gt_int(ctx.early_count, 0);
+ T_gt_int(ctx.late_count, 0);
+ T_gt_int(ctx.potential_hit_count, 0);
+ T_gt_int(ctx.append_count, 0);
+ T_gt_int(ctx.no_append_count, 0);
rv = unlink(path);
- rtems_test_assert(rv == 0);
+ T_psx_success(rv);
}
static void Init(rtems_task_argument arg)
{
- TEST_BEGIN();
- test(&test_instance);
- TEST_END();
- rtems_test_exit(0);
+ rtems_test_run(arg, TEST_STATE);
}
#define CONFIGURE_APPLICATION_NEEDS_CLOCK_DRIVER
@@ -138,8 +190,6 @@ static void Init(rtems_task_argument arg)
#define CONFIGURE_MAXIMUM_FILE_DESCRIPTORS 4
#define CONFIGURE_MAXIMUM_TASKS 1
-#define CONFIGURE_MAXIMUM_TIMERS 1
-#define CONFIGURE_MAXIMUM_USER_EXTENSIONS 1
#define CONFIGURE_INITIAL_EXTENSIONS RTEMS_TEST_INITIAL_EXTENSION
diff --git a/testsuites/sptests/spintrcritical24/spintrcritical24.scn b/testsuites/sptests/spintrcritical24/spintrcritical24.scn
index 3f2eef3853..9022f5d6e4 100644
--- a/testsuites/sptests/spintrcritical24/spintrcritical24.scn
+++ b/testsuites/sptests/spintrcritical24/spintrcritical24.scn
@@ -1,2 +1,34 @@
*** BEGIN OF TEST SPINTRCRITICAL 24 ***
+*** TEST VERSION: 6.0.0.929e49a54ab4d2d18c9fb8d03610614f63e25b8d
+*** TEST STATE: EXPECTED_PASS
+*** TEST BUILD: RTEMS_DEBUG RTEMS_POSIX_API RTEMS_SMP
+*** TEST TOOLS: 10.0.1 20200406 (RTEMS 6, RSB bec88a6dd856892c3e66e4598252ea07d7a0d762, Newlib ece49e4)
+A:SPINTRCRITICAL 24
+S:Platform:RTEMS
+S:Compiler:10.0.1 20200406 (RTEMS 6, RSB bec88a6dd856892c3e66e4598252ea07d7a0d762, Newlib ece49e4)
+S:Version:6.0.0.929e49a54ab4d2d18c9fb8d03610614f63e25b8d
+S:BSP:realview_pbx_a9_qemu
+S:RTEMS_DEBUG:1
+S:RTEMS_MULTIPROCESSING:0
+S:RTEMS_POSIX_API:1
+S:RTEMS_PROFILING:0
+S:RTEMS_SMP:1
+B:CloseInterrupt
+P:0:0:UI1:init.c:164
+P:1:0:UI1:init.c:167
+L:early count = 743
+L:late count = 805
+L:potential hit count = 13
+L:append count = 743
+L:no append count = 818
+P:2:0:UI1:init.c:176
+P:3:0:UI1:init.c:177
+P:4:0:UI1:init.c:178
+P:5:0:UI1:init.c:179
+P:6:0:UI1:init.c:180
+P:7:0:UI1:init.c:183
+E:CloseInterrupt:N:8:F:0:D:2.052931
+Z:SPINTRCRITICAL 24:C:1:N:8:F:0:D:2.054026
+Y:ReportHash:SHA256:950758e81490ad319486e6dc135fe5634bc9c9e7b19537346335e759f932fb56
+
*** END OF TEST SPINTRCRITICAL 24 ***
diff --git a/testsuites/sptests/spintrcritical_support/intrcritical.c b/testsuites/sptests/spintrcritical_support/intrcritical.c
deleted file mode 100644
index 51ab42f5d6..0000000000
--- a/testsuites/sptests/spintrcritical_support/intrcritical.c
+++ /dev/null
@@ -1,171 +0,0 @@
-/*
- * COPYRIGHT (c) 1989-2009.
- * 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.
- */
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#include <tmacros.h>
-#include <intrcritical.h>
-
-#define INTERRUPT_CRITICAL_NAME rtems_build_name( 'I', 'C', 'R', 'I' )
-
-typedef struct {
- uint_fast32_t minimum;
- uint_fast32_t maximum;
- uint_fast32_t maximum_current;
- rtems_timer_service_routine_entry tsr;
- rtems_id timer;
- uint64_t t0;
- uint64_t t1;
-} interrupt_critical_control;
-
-static interrupt_critical_control interrupt_critical;
-
-static void wait_for_tick_change( void )
-{
- rtems_interval initial = rtems_clock_get_ticks_since_boot();
- rtems_interval now;
-
- do {
- now = rtems_clock_get_ticks_since_boot();
- } while ( now == initial );
-}
-
-static bool interrupt_critical_busy_wait( void )
-{
- uint_fast32_t max = interrupt_critical.maximum_current;
- bool reset = max <= interrupt_critical.minimum;
-
- if ( reset ) {
- interrupt_critical.maximum_current = interrupt_critical.maximum;
- } else {
- interrupt_critical.maximum_current = max - 1;
- }
-
- rtems_test_busy( max );
-
- return reset;
-}
-
-void interrupt_critical_section_test_support_initialize(
- rtems_timer_service_routine_entry tsr
-)
-{
- uint_fast32_t m;
-
- interrupt_critical.tsr = tsr;
-
- if ( tsr != NULL && interrupt_critical.timer == 0 ) {
- rtems_status_code sc = rtems_timer_create(
- INTERRUPT_CRITICAL_NAME,
- &interrupt_critical.timer
- );
- rtems_test_assert( sc == RTEMS_SUCCESSFUL );
- }
-
- m = rtems_test_get_one_tick_busy_count();
-
- interrupt_critical.minimum = 0;
- interrupt_critical.maximum = m;
- interrupt_critical.maximum_current = m;
-}
-
-static void timer_fire_after(void)
-{
- if ( interrupt_critical.tsr != NULL ) {
- rtems_status_code sc = rtems_timer_fire_after(
- interrupt_critical.timer,
- 1,
- interrupt_critical.tsr,
- NULL
- );
- rtems_test_assert( sc == RTEMS_SUCCESSFUL );
- }
-}
-
-bool interrupt_critical_section_test_support_delay(void)
-{
- timer_fire_after();
-
- return interrupt_critical_busy_wait();
-}
-
-static void thread_switch( Thread_Control *executing, Thread_Control *heir )
-{
- (void) executing;
- (void) heir;
-
- if ( interrupt_critical.t1 == 0 && heir->is_idle ) {
- interrupt_critical.t1 = rtems_clock_get_uptime_nanoseconds();
- }
-}
-
-static const rtems_extensions_table extensions = {
- .thread_switch = thread_switch
-};
-
-bool interrupt_critical_section_test(
- bool ( *test_body )( void * ),
- void *test_body_arg,
- rtems_timer_service_routine_entry tsr
-)
-{
- bool done;
- rtems_status_code sc;
- rtems_id id;
- uint64_t delta;
- uint_fast32_t busy_delta;
- int retries = 3;
-
- interrupt_critical_section_test_support_initialize( tsr );
-
- sc = rtems_extension_create(
- INTERRUPT_CRITICAL_NAME,
- &extensions,
- &id
- );
- rtems_test_assert( sc == RTEMS_SUCCESSFUL );
-
- wait_for_tick_change();
- timer_fire_after();
-
- /* Get estimate for test body duration */
- interrupt_critical.t0 = rtems_clock_get_uptime_nanoseconds();
- done = ( *test_body )( test_body_arg );
- if ( interrupt_critical.t1 == 0 ) {
- interrupt_critical.t1 = rtems_clock_get_uptime_nanoseconds();
- }
-
- /* Update minimum */
-
- delta = interrupt_critical.t1 - interrupt_critical.t0;
- busy_delta = (uint_fast32_t)
- ( ( interrupt_critical.maximum * ( 2 * delta ) )
- / rtems_configuration_get_nanoseconds_per_tick() );
-
- if ( busy_delta < interrupt_critical.maximum ) {
- interrupt_critical.minimum = interrupt_critical.maximum - busy_delta;
- }
-
- sc = rtems_extension_delete( id );
- rtems_test_assert( sc == RTEMS_SUCCESSFUL );
-
- while ( !done && retries >= 0 ) {
- wait_for_tick_change();
-
- if ( interrupt_critical_section_test_support_delay() ) {
- --retries;
- }
-
- done = ( *test_body )( test_body_arg );
- }
-
- return done;
-}
diff --git a/testsuites/sptests/spintrcritical_support/intrcritical.h b/testsuites/sptests/spintrcritical_support/intrcritical.h
deleted file mode 100644
index aca1ee0f2c..0000000000
--- a/testsuites/sptests/spintrcritical_support/intrcritical.h
+++ /dev/null
@@ -1,52 +0,0 @@
-/*
- * COPYRIGHT (c) 1989-2009.
- * 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.
- */
-
-#ifndef __INTERRUPT_CRITICAL_SECTIONS_TEST_SUPPORT_h
-#define __INTERRUPT_CRITICAL_SECTIONS_TEST_SUPPORT_h
-
-/**
- * @brief Initialize Test Support
- *
- * @param[in] tsr is the optional timer service routine to fire
- */
-void interrupt_critical_section_test_support_initialize(
- rtems_timer_service_routine_entry tsr
-);
-
-/**
- * @brief Delay Test Support
- *
- * This method delays a varying amount of time each call.
- *
- * @return This method returns true each time the delay counter has
- * to be reset.
- */
-bool interrupt_critical_section_test_support_delay(void);
-
-/**
- * @brief Interrupt critical section test.
- *
- * This function first estimates the test body duration and then repeatedly
- * calls the test body with varying times to the next clock tick interrupt.
- *
- * @param[in] test_body The test body function. In case the test body returns
- * true, then the test iteration stops.
- * @param[in] test_body_arg The argument for the test body function.
- * @param[in] tsr An optional timer service routine.
- *
- * @return The test body return status.
- */
-bool interrupt_critical_section_test(
- bool ( *test_body )( void * ),
- void *test_body_arg,
- rtems_timer_service_routine_entry tsr
-);
-
-#endif
-
diff --git a/testsuites/sptests/spmisc01/init.c b/testsuites/sptests/spmisc01/init.c
index 9090069973..e64fa4e480 100644
--- a/testsuites/sptests/spmisc01/init.c
+++ b/testsuites/sptests/spmisc01/init.c
@@ -21,6 +21,8 @@
#include <tmacros.h>
+#include "spmisc01.h"
+
const char rtems_test_name[] = "SPMISC 1";
RTEMS_INLINE_ROUTINE int inline_func(void)
@@ -70,6 +72,16 @@ static int alias_func(void) RTEMS_ALIAS(noinline_func);
int weak_alias_func(void) RTEMS_WEAK_ALIAS(noinline_func);
+RTEMS_WEAK int weak_or_strong(void)
+{
+ return 99;
+}
+
+RTEMS_WEAK int weak_2(void)
+{
+ return 111;
+}
+
static char aligned_variable RTEMS_ALIGNED(64);
typedef struct {
@@ -205,6 +217,9 @@ static void Init(rtems_task_argument arg)
rtems_test_assert(sizeof(packed_struct) == 5);
rtems_test_assert(alias_func() == 14);
rtems_test_assert(weak_alias_func() == 14);
+ pull_in_strong();
+ rtems_test_assert(weak_or_strong() == 77);
+ rtems_test_assert(weak_2() == 111);
rtems_test_assert(((uintptr_t) &aligned_variable) % 64 == 0);
rtems_test_assert(offsetof(aligned_member_struct, aligned_member) % 64 == 0);
unreachable();
diff --git a/testsuites/sptests/spmisc01/spmisc01.h b/testsuites/sptests/spmisc01/spmisc01.h
new file mode 100644
index 0000000000..6dbf9ca23c
--- /dev/null
+++ b/testsuites/sptests/spmisc01/spmisc01.h
@@ -0,0 +1,45 @@
+/* SPDX-License-Identifier: BSD-2-Clause */
+
+/*
+ * Copyright (C) 2020 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.
+ */
+
+#ifndef _SPMISC01_H
+#define _SPMISC01_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+int weak_or_strong(void);
+
+void pull_in_strong(void);
+
+int weak_2(void);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* _SPMISC01_H */
diff --git a/testsuites/sptests/spmisc01/strong.c b/testsuites/sptests/spmisc01/strong.c
new file mode 100644
index 0000000000..6a3d9c8561
--- /dev/null
+++ b/testsuites/sptests/spmisc01/strong.c
@@ -0,0 +1,49 @@
+/* SPDX-License-Identifier: BSD-2-Clause */
+
+/*
+ * Copyright (C) 2020 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.
+ */
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#include "spmisc01.h"
+
+#include <rtems.h>
+
+int weak_or_strong(void)
+{
+ return 77;
+}
+
+void pull_in_strong(void)
+{
+ /* Do nothing */
+}
+
+RTEMS_WEAK int weak_2(void)
+{
+ return 222;
+}
diff --git a/testsuites/sptests/spmsgq_err01/init.c b/testsuites/sptests/spmsgq_err01/init.c
index 24537725dc..1ff8490d1a 100644
--- a/testsuites/sptests/spmsgq_err01/init.c
+++ b/testsuites/sptests/spmsgq_err01/init.c
@@ -98,27 +98,6 @@ rtems_task Init(
);
puts( "TA1 - rtems_message_queue_create - Q 1 - RTEMS_INVALID_NAME" );
- /*
- * The check for an object being global is only made if
- * multiprocessing is enabled.
- */
-
-#if defined(RTEMS_MULTIPROCESSING)
- status = rtems_message_queue_create(
- Queue_name[ 1 ],
- 1,
- MESSAGE_SIZE,
- RTEMS_GLOBAL,
- &Junk_id
- );
- fatal_directive_status(
- status,
- RTEMS_MP_NOT_CONFIGURED,
- "rtems_message_queue_create of mp not configured"
- );
-#endif
- puts( "TA1 - rtems_message_queue_create - Q 1 - RTEMS_MP_NOT_CONFIGURED" );
-
/* not enough memory for messages */
status = rtems_message_queue_create(
Queue_name[ 1 ],
diff --git a/testsuites/sptests/spmsgq_err01/spmsgq_err01.scn b/testsuites/sptests/spmsgq_err01/spmsgq_err01.scn
index 7bd31fc744..26add5eb82 100644
--- a/testsuites/sptests/spmsgq_err01/spmsgq_err01.scn
+++ b/testsuites/sptests/spmsgq_err01/spmsgq_err01.scn
@@ -4,7 +4,6 @@ TA1 - rtems_message_queue_create - NULL Id - RTEMS_INVALID_ADDRESS
TA1 - rtems_message_queue_create - count = 0 - RTEMS_INVALID_NUMBER
TA1 - rtems_message_queue_create - size = 0 - RTEMS_INVALID_SIZE
TA1 - rtems_message_queue_create - Q 1 - RTEMS_INVALID_NAME
-TA1 - rtems_message_queue_create - Q 1 - RTEMS_MP_NOT_CONFIGURED
TA1 - rtems_message_queue_create - Q 2 - RTEMS_UNSATISFIED
TA1 - rtems_message_queue_create - Q 2 - RTEMS_UNSATISFIED #2
TA1 - rtems_message_queue_create - Q 1 - 2 DEEP - RTEMS_SUCCESSFUL
diff --git a/testsuites/sptests/sppartition_err01/init.c b/testsuites/sptests/sppartition_err01/init.c
index 39ee700daa..39373852fb 100644
--- a/testsuites/sptests/sppartition_err01/init.c
+++ b/testsuites/sptests/sppartition_err01/init.c
@@ -126,28 +126,6 @@ void test_partition_errors(void)
);
}
- /*
- * The check for an object being global is only made if
- * multiprocessing is enabled.
- */
-
-#if defined(RTEMS_MULTIPROCESSING)
- status = rtems_partition_create(
- Partition_name[ 1 ],
- Partition_good_area,
- 128,
- 64,
- RTEMS_GLOBAL,
- &junk_id
- );
- fatal_directive_status(
- status,
- RTEMS_MP_NOT_CONFIGURED,
- "rtems_partition_create of global"
- );
-#endif
- puts( "TA1 - rtems_partition_create - RTEMS_MP_NOT_CONFIGURED" );
-
#if defined(_C3x) || defined(_C4x)
puts( "TA1 - rtems_partition_create - RTEMS_INVALID_ADDRESS - SKIPPED" );
#else
diff --git a/testsuites/sptests/sppartition_err01/sppartition_err01.scn b/testsuites/sptests/sppartition_err01/sppartition_err01.scn
index 2b010ee6d4..01319353e7 100644
--- a/testsuites/sptests/sppartition_err01/sppartition_err01.scn
+++ b/testsuites/sptests/sppartition_err01/sppartition_err01.scn
@@ -4,7 +4,6 @@ TA1 - rtems_partition_create - length - RTEMS_INVALID_SIZE
TA1 - rtems_partition_create - buffer size - RTEMS_INVALID_SIZE
TA1 - rtems_partition_create - length < buffer size - RTEMS_INVALID_SIZE
TA1 - rtems_partition_create - buffer size < overhead - RTEMS_INVALID_SIZE
-TA1 - rtems_partition_create - RTEMS_MP_NOT_CONFIGURED
TA1 - rtems_partition_create - RTEMS_INVALID_ADDRESS
TA1 - rtems_partition_create - RTEMS_INVALID_SIZE
TA1 - rtems_partition_delete - unknown RTEMS_INVALID_ID
diff --git a/testsuites/sptests/spsem_err01/init.c b/testsuites/sptests/spsem_err01/init.c
index 39a366b41a..f1f1592ebf 100644
--- a/testsuites/sptests/spsem_err01/init.c
+++ b/testsuites/sptests/spsem_err01/init.c
@@ -199,27 +199,6 @@ rtems_task Init(
);
puts( "TA1 - rtems_semaphore_create - RTEMS_INVALID_NUMBER" );
- /*
- * The check for an object being global is only made if
- * multiprocessing is enabled.
- */
-
-#if defined(RTEMS_MULTIPROCESSING)
- status = rtems_semaphore_create(
- Semaphore_name[ 3 ],
- 1,
- RTEMS_GLOBAL,
- RTEMS_NO_PRIORITY,
- &Junk_id
- );
- fatal_directive_status(
- status,
- RTEMS_MP_NOT_CONFIGURED,
- "rtems_semaphore_create of mp not configured"
- );
-#endif
- puts( "TA1 - rtems_semaphore_create - RTEMS_MP_NOT_CONFIGURED" );
-
status = rtems_semaphore_delete( 100 );
fatal_directive_status(
status,
diff --git a/testsuites/sptests/spsem_err01/spsem_err01.scn b/testsuites/sptests/spsem_err01/spsem_err01.scn
index b6172196b0..5adf40f865 100644
--- a/testsuites/sptests/spsem_err01/spsem_err01.scn
+++ b/testsuites/sptests/spsem_err01/spsem_err01.scn
@@ -12,7 +12,6 @@ TA1 - rtems_semaphore_create - FIFO and ceiling - RTEMS_NOT_DEFINED
TA1 - rtems_semaphore_create - ceiling and inherit - RTEMS_NOT_DEFINED
TA1 - rtems_semaphore_create - RTEMS_NOT_DEFINED
TA1 - rtems_semaphore_create - RTEMS_INVALID_NUMBER
-TA1 - rtems_semaphore_create - RTEMS_MP_NOT_CONFIGURED
TA1 - rtems_semaphore_delete - RTEMS_INVALID_ID
TA1 - rtems_semaphore_delete - local RTEMS_INVALID_ID
TA1 - rtems_semaphore_ident - global RTEMS_INVALID_NAME
diff --git a/testsuites/sptests/spsimplesched02/init.c b/testsuites/sptests/spsimplesched02/init.c
index 27e2f6577c..d19d3553d9 100644
--- a/testsuites/sptests/spsimplesched02/init.c
+++ b/testsuites/sptests/spsimplesched02/init.c
@@ -81,10 +81,10 @@ rtems_task Init(
TEST_BEGIN();
status = _Objects_Name_to_id_u32(
- &_Thread_Information.Objects,
rtems_build_name( 'I', 'D', 'L', 'E' ),
RTEMS_SEARCH_LOCAL_NODE,
- &Idle_id
+ &Idle_id,
+ &_Thread_Information.Objects
);
rtems_test_assert( status == RTEMS_SUCCESSFUL );
diff --git a/testsuites/sptests/sptask_err03/init.c b/testsuites/sptests/sptask_err03/init.c
index 2ac54b9037..bda2cd4a1f 100644
--- a/testsuites/sptests/sptask_err03/init.c
+++ b/testsuites/sptests/sptask_err03/init.c
@@ -228,27 +228,5 @@ rtems_task Init(
);
puts( "TA1 - rtems_task_create - 11 - RTEMS_TOO_MANY" );
- /*
- * The check for an object being global is only made if
- * multiprocessing is enabled.
- */
-
-#if defined(RTEMS_MULTIPROCESSING)
- status = rtems_task_create(
- task_name,
- 4,
- RTEMS_MINIMUM_STACK_SIZE,
- RTEMS_DEFAULT_MODES,
- RTEMS_GLOBAL,
- &Junk_id
- );
- fatal_directive_status(
- status,
- RTEMS_MP_NOT_CONFIGURED,
- "rtems_task_create of global task in a single cpu system"
- );
-#endif
- puts( "TA1 - rtems_task_create - RTEMS_MP_NOT_CONFIGURED" );
-
TEST_END();
}
diff --git a/testsuites/sptests/sptask_err03/sptask_err03.scn b/testsuites/sptests/sptask_err03/sptask_err03.scn
index 2787bafba5..e6047e4476 100644
--- a/testsuites/sptests/sptask_err03/sptask_err03.scn
+++ b/testsuites/sptests/sptask_err03/sptask_err03.scn
@@ -14,5 +14,4 @@ TA1 - rtems_task_create - 8 created - RTEMS_SUCCESSFUL
TA1 - rtems_task_create - 9 created - RTEMS_SUCCESSFUL
TA1 - rtems_task_create - 10 created - RTEMS_SUCCESSFUL
TA1 - rtems_task_create - 11 - RTEMS_TOO_MANY
-TA1 - rtems_task_create - RTEMS_MP_NOT_CONFIGURED
*** END TEST TASK ERROR 03 ***
diff --git a/testsuites/sptests/sptimecounter02/init.c b/testsuites/sptests/sptimecounter02/init.c
index fafbaf8af1..ffa53edfd8 100644
--- a/testsuites/sptests/sptimecounter02/init.c
+++ b/testsuites/sptests/sptimecounter02/init.c
@@ -30,7 +30,7 @@
#include <rtems.h>
#include <rtems/counter.h>
-#include <rtems/test.h>
+#include <rtems/test-info.h>
#include <rtems/score/timecounterimpl.h>
#include <rtems/timecounter.h>
diff --git a/testsuites/sptests/sptimecounter03/init.c b/testsuites/sptests/sptimecounter03/init.c
index 4ef084d3d2..dd4c100b64 100644
--- a/testsuites/sptests/sptimecounter03/init.c
+++ b/testsuites/sptests/sptimecounter03/init.c
@@ -16,7 +16,7 @@
#include "config.h"
#endif
-#include <rtems/test.h>
+#include <rtems/test-info.h>
#include <rtems/bsd.h>
diff --git a/testsuites/sptests/sptimecounter04/init.c b/testsuites/sptests/sptimecounter04/init.c
index 42c31277b9..a0645a0895 100644
--- a/testsuites/sptests/sptimecounter04/init.c
+++ b/testsuites/sptests/sptimecounter04/init.c
@@ -18,7 +18,7 @@
#include <time.h>
#include <rtems.h>
-#include <rtems/test.h>
+#include <rtems/test-info.h>
#include <rtems/timespec.h>
#include "tmacros.h"
diff --git a/testsuites/support/include/buffer_test_io.h b/testsuites/support/include/buffer_test_io.h
index ea68fea0d8..f0eae50fbd 100644
--- a/testsuites/support/include/buffer_test_io.h
+++ b/testsuites/support/include/buffer_test_io.h
@@ -5,7 +5,7 @@
#ifndef __BUFFER_TEST_IO_h
#define __BUFFER_TEST_IO_h
-#include <rtems/test.h>
+#include <rtems/test-info.h>
#ifdef __cplusplus
extern "C" {
diff --git a/testsuites/support/include/tmacros.h b/testsuites/support/include/tmacros.h
index 2c885c6ecc..fe17bc01e7 100644
--- a/testsuites/support/include/tmacros.h
+++ b/testsuites/support/include/tmacros.h
@@ -26,7 +26,7 @@
#include <stdlib.h>
#include <string.h>
#include <rtems/error.h>
-#include <rtems/test.h>
+#include <rtems/test-info.h>
#include <rtems/score/threaddispatch.h>
#include <buffer_test_io.h>
diff --git a/testsuites/tmtests/Makefile.am b/testsuites/tmtests/Makefile.am
index 70b67fa6dd..096f3ad346 100644
--- a/testsuites/tmtests/Makefile.am
+++ b/testsuites/tmtests/Makefile.am
@@ -374,16 +374,6 @@ tmonetoone_CPPFLAGS = $(AM_CPPFLAGS) $(TEST_FLAGS_tmonetoone) \
$(support_includes)
endif
-if TEST_tmoverhd
-tm_tests += tmoverhd
-tm_docs += tmoverhd/tmoverhd.doc
-tmoverhd_SOURCES = tmoverhd/testtask.c tmoverhd/empty.c \
- tmoverhd/system.h tmoverhd/dumrtems.h include/timesys.h \
- ../support/src/tmtests_empty_function.c
-tmoverhd_CPPFLAGS = $(AM_CPPFLAGS) $(TEST_FLAGS_tmoverhd) \
- $(support_includes) -I$(top_srcdir)/include
-endif
-
if TEST_tmtimer01
tm_tests += tmtimer01
tm_screens += tmtimer01/tmtimer01.scn
diff --git a/testsuites/tmtests/configure.ac b/testsuites/tmtests/configure.ac
index c696965c2f..ea821b9a00 100644
--- a/testsuites/tmtests/configure.ac
+++ b/testsuites/tmtests/configure.ac
@@ -64,7 +64,6 @@ RTEMS_TEST_CHECK([tmck])
RTEMS_TEST_CHECK([tmcontext01])
RTEMS_TEST_CHECK([tmfine01])
RTEMS_TEST_CHECK([tmonetoone])
-RTEMS_TEST_CHECK([tmoverhd])
RTEMS_TEST_CHECK([tmtimer01])
AC_CONFIG_FILES([Makefile])
diff --git a/testsuites/tmtests/tmfine01/init.c b/testsuites/tmtests/tmfine01/init.c
index bf24ca138f..d62278cb07 100644
--- a/testsuites/tmtests/tmfine01/init.c
+++ b/testsuites/tmtests/tmfine01/init.c
@@ -24,7 +24,7 @@
#include <sched.h>
#include <stdio.h>
-#include <rtems/test.h>
+#include <rtems/test-info.h>
const char rtems_test_name[] = "TMFINE 1";
diff --git a/testsuites/tmtests/tmonetoone/init.c b/testsuites/tmtests/tmonetoone/init.c
index b721a8c531..70f3f51eb2 100644
--- a/testsuites/tmtests/tmonetoone/init.c
+++ b/testsuites/tmtests/tmonetoone/init.c
@@ -19,7 +19,7 @@
#include <sched.h>
#include <rtems.h>
-#include <rtems/test.h>
+#include <rtems/test-info.h>
#include <rtems/thread.h>
#include <tmacros.h>
diff --git a/testsuites/tmtests/tmoverhd/dumrtems.h b/testsuites/tmtests/tmoverhd/dumrtems.h
deleted file mode 100644
index 4beae9e39f..0000000000
--- a/testsuites/tmtests/tmoverhd/dumrtems.h
+++ /dev/null
@@ -1,250 +0,0 @@
-/* dumrtems.h
- *
- * This include file contains phony macros to map
- * executive calls to Empty_directive().
- *
- * 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.
- */
-
-#ifndef __DUMRTEMS_h
-#define __DUMRTEMS_h
-
-/* RTEMS call redefinition macros */
-
-#undef rtems_signal_catch
-#undef rtems_signal_send
-#undef rtems_io_close
-#undef rtems_io_control
-#undef rtems_io_initialize
-#undef rtems_io_open
-#undef rtems_io_read
-#undef rtems_io_write
-#undef rtems_port_internal_to_external
-#undef rtems_port_external_to_internal
-#undef rtems_port_create
-#undef rtems_port_delete
-#undef rtems_port_ident
-#undef rtems_event_receive
-#undef rtems_event_send
-#undef rtems_initialize_data_structures
-#undef rtems_shutdown_executive
-#undef rtems_interrupt_catch
-#undef rtems_partition_create
-#undef rtems_partition_delete
-#undef rtems_partition_get_buffer
-#undef rtems_partition_ident
-#undef rtems_partition_return_buffer
-#undef rtems_message_queue_broadcast
-#undef rtems_message_queue_create
-#undef rtems_message_queue_delete
-#undef rtems_message_queue_flush
-#undef rtems_message_queue_ident
-#undef rtems_message_queue_receive
-#undef rtems_message_queue_send
-#undef rtems_message_queue_urgent
-#undef rtems_region_create
-#undef rtems_region_delete
-#undef rtems_region_get_segment
-#undef rtems_region_ident
-#undef rtems_region_return_segment
-#undef rtems_semaphore_create
-#undef rtems_semaphore_delete
-#undef rtems_semaphore_ident
-#undef rtems_semaphore_obtain
-#undef rtems_semaphore_release
-#undef rtems_task_create
-#undef rtems_task_delete
-#undef rtems_task_ident
-#undef rtems_task_mode
-#undef rtems_task_restart
-#undef rtems_task_resume
-#undef rtems_task_set_priority
-#undef rtems_task_start
-#undef rtems_task_suspend
-#undef rtems_clock_get
-#undef rtems_clock_set
-#undef rtems_clock_tick
-#undef rtems_task_wake_after
-#undef rtems_task_wake_when
-#undef rtems_fatal_error_occurred
-#undef rtems_rate_monotonic_create
-#undef rtems_rate_monotonic_ident
-#undef rtems_rate_monotonic_delete
-#undef rtems_rate_monotonic_cancel
-#undef rtems_rate_monotonic_period
-#undef rtems_multiprocessing_announce
-#undef rtems_timer_create
-#undef rtems_timer_ident
-#undef rtems_timer_delete
-#undef rtems_timer_cancel
-#undef rtems_timer_fire_after
-#undef rtems_timer_fire_when
-#undef rtems_timer_reset
-
-#define rtems_signal_catch( asraddr, mode ) \
- Empty_directive()
-#define rtems_signal_send( tid, signal ) \
- Empty_directive()
-
-#define rtems_io_close( major, minor, argp, rval ) \
- Empty_directive()
-#define rtems_io_control( major, minor, argp, rval ) \
- Empty_directive()
-#define rtems_io_initialize( major, minor, argp, rval ) \
- Empty_directive()
-#define rtems_io_open( major, minor, argp, rval ) \
- Empty_directive()
-#define rtems_io_read( major, minor, argp, rval ) \
- Empty_directive()
-#define rtems_io_write( major, minor, argp, rval ) \
- Empty_directive()
-
-#define rtems_port_internal_to_external( dpid, internal, external ) \
- Empty_directive()
-#define rtems_port_external_to_internal( dpid, external, internal ) \
- Empty_directive()
-#define rtems_port_create( name, intaddr, extaddr, length, dpid ) \
- Empty_directive()
-#define rtems_port_delete( dpid ) \
- Empty_directive()
-#define rtems_port_ident( name, dpid ) \
- Empty_directive()
-
-#define rtems_event_receive( eventin, options, timeout, eventout ) \
- Empty_directive()
-#define rtems_event_send( tid, event ) \
- Empty_directive()
-
-#define rtems_initialize_executive( conftbl, cputbl ) \
- Empty_directive()
-#define rtems_shutdown_executive( the_error ) \
- Empty_directive()
-
-#define rtems_interrupt_catch( israddr, vector, oldisr ) \
- Empty_directive()
-
-#define rtems_partition_create( name, paddr, length, bsize, attr, ptid ) \
- Empty_directive()
-#define rtems_partition_delete( ptid ) \
- Empty_directive()
-#define rtems_partition_get_buffer( ptid, bufaddr ) \
- Empty_directive()
-#define rtems_partition_ident( name, node, ptid ) \
- Empty_directive()
-#define rtems_partition_return_buffer( ptid, bufaddr ) \
- Empty_directive()
-
-#define rtems_message_queue_broadcast( qid, buffer, count ) \
- Empty_directive()
-#define rtems_message_queue_create( name, count, attr, qid ) \
- Empty_directive()
-#define rtems_message_queue_delete( qid ) \
- Empty_directive()
-#define rtems_message_queue_flush( qid, count ) \
- Empty_directive()
-#define rtems_message_queue_ident( name, node, qid ) \
- Empty_directive()
-#define rtems_message_queue_receive( qid, buffer, options, timeout ) \
- Empty_directive()
-#define rtems_message_queue_send( qid, buffer ) \
- Empty_directive()
-#define rtems_message_queue_urgent( qid, buffer ) \
- Empty_directive()
-
-#define rtems_region_create( name, paddr, length, pagesize, attr, rnid ) \
- Empty_directive()
-#define rtems_region_delete( rnid ) \
- Empty_directive()
-#define rtems_region_get_segment( rnid, size, options, timeout, segaddr ) \
- Empty_directive()
-#define rtems_region_ident( name, rnid ) \
- Empty_directive()
-#define rtems_region_return_segment( rnid, segaddr ) \
- Empty_directive()
-
-#define rtems_semaphore_create( name, count, attr, priceil, smid ) \
- Empty_directive()
-#define rtems_semaphore_delete( smid ) \
- Empty_directive()
-#define rtems_semaphore_ident( name, node, smid ) \
- Empty_directive()
-#define rtems_semaphore_obtain( smid, options, timeout ) \
- Empty_directive()
-#define rtems_semaphore_release( smid ) \
- Empty_directive()
-
-#define rtems_task_create( name, priority, stack_size, mode, attr, tid ) \
- Empty_directive()
-#define rtems_task_delete( tid ) \
- Empty_directive()
-#define rtems_task_ident( name, node, tid ) \
- Empty_directive()
-#define rtems_task_mode( mode, mask, pmode ) \
- Empty_directive()
-#define rtems_task_restart( tid, arg ) \
- Empty_directive()
-#define rtems_task_resume( tid ) \
- Empty_directive()
-#define rtems_task_set_priority( tid, priority, ppriority ) \
- Empty_directive()
-#define rtems_task_start( tid, saddr, arg ) \
- Empty_directive()
-#define rtems_task_suspend( tid ) \
- Empty_directive()
-
-#define rtems_clock_get_tod( tod ) \
- Empty_directive()
-#define rtems_clock_set( time ) \
- Empty_directive()
-#define rtems_clock_tick() \
- Empty_directive()
-#define rtems_task_wake_after( ticks ) \
- Empty_directive()
-#define rtems_task_wake_when( time ) \
- Empty_directive()
-
-#define rtems_fatal_error_occurred( errcode ) \
- Empty_directive()
-
-#define rtems_rate_monotonic_create( name, id ) \
- Empty_directive()
-#define rtems_rate_monotonic_ident( name, id ) \
- Empty_directive()
-#define rtems_rate_monotonic_delete( id ) \
- Empty_directive()
-#define rtems_rate_monotonic_cancel( id ) \
- Empty_directive()
-#define rtems_rate_monotonic_period( id, period ) \
- Empty_directive()
-
-#define rtems_multiprocessing_announce() \
- Empty_directive()
-
-#define rtems_timer_create( name, tmid ) \
- Empty_directive()
-#define rtems_timer_delete( tmid ) \
- Empty_directive()
-#define rtems_timer_cancel( tmid ) \
- Empty_directive()
-#define rtems_timer_ident( name, tmid ) \
- Empty_directive()
-#define rtems_timer_fire_after( tmid, ticks, routine, user_data ) \
- Empty_directive()
-#define rtems_timer_fire_when( tmid, time, routine, user_data ) \
- Empty_directive()
-#define rtems_timer_reset( tmid ) \
- Empty_directive()
-
-#if defined(__GNUC__)
-#define RTEMS_GCC_NOWARN_UNUSED RTEMS_UNUSED
-#else
-#define RTEMS_GCC_NOWARN_UNUSED
-#endif
-
-#endif
-/* end of include file */
diff --git a/testsuites/tmtests/tmoverhd/empty.c b/testsuites/tmtests/tmoverhd/empty.c
deleted file mode 100644
index 97477c1298..0000000000
--- a/testsuites/tmtests/tmoverhd/empty.c
+++ /dev/null
@@ -1,45 +0,0 @@
-/*
- * 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.
- */
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#include "system.h"
-
-rtems_timer_service_routine Timer_handler(
- rtems_id argument
-)
-{
-}
-
-rtems_asr Isr_handler(
- rtems_signal_set signals
-)
-{
-}
-
-rtems_asr Asr_handler(
- rtems_signal_set signals
-)
-{
-}
-
-rtems_task task_func(void)
-{
-}
-
-void null_func(void)
-{
-}
-
-rtems_status_code Empty_directive(void)
-{
- return( RTEMS_SUCCESSFUL );
-}
diff --git a/testsuites/tmtests/tmoverhd/system.h b/testsuites/tmtests/tmoverhd/system.h
deleted file mode 100644
index afe0fe3d10..0000000000
--- a/testsuites/tmtests/tmoverhd/system.h
+++ /dev/null
@@ -1,54 +0,0 @@
-/* system.h
- *
- * This include file is used by all tests in the Time Suite.
- *
- * 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.
- */
-
-
-#include <tmacros.h>
-
-/* functions */
-
-rtems_task Init(
- rtems_task_argument argument
-);
-
-rtems_timer_service_routine Timer_handler(
- rtems_id argument
-);
-
-rtems_asr Isr_handler(
- rtems_signal_set signals
-);
-
-rtems_asr Asr_handler(
- rtems_signal_set signals
-);
-
-extern rtems_task task_func(void);
-
-extern void null_func(void);
-
-extern rtems_status_code Empty_directive(void);
-
-#include <timesys.h>
-
-/* configuration information */
-
-#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
-
-#include <rtems/confdefs.h>
-
-/* end of include file */
diff --git a/testsuites/tmtests/tmoverhd/testtask.c b/testsuites/tmtests/tmoverhd/testtask.c
deleted file mode 100644
index 2461759f9f..0000000000
--- a/testsuites/tmtests/tmoverhd/testtask.c
+++ /dev/null
@@ -1,1232 +0,0 @@
-/*
- * 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.
- */
-
-#if !defined(OPERATION_COUNT)
-#define OPERATION_COUNT 100
-#endif
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#include <rtems/btimer.h>
-
-#define CONFIGURE_INIT
-#include "system.h"
-
-const char rtems_test_name[] = "OVERHEAD";
-
-uint8_t Memory_area[ 2048 ];
-uint8_t Internal_port_area[ 256 ];
-uint8_t External_port_area[ 256 ];
-
-rtems_task Task_1(
- rtems_task_argument argument
-);
-
-rtems_task Init(
- rtems_task_argument argument
-)
-{ rtems_id id;
- rtems_status_code status;
-
- benchmark_timer_disable_subtracting_average_overhead( TRUE );
-
- Print_Warning();
-
- TEST_BEGIN();
-
- status = rtems_task_create(
- rtems_build_name( 'T', 'A', '1', ' ' ),
- RTEMS_MAXIMUM_PRIORITY - 1,
- RTEMS_MINIMUM_STACK_SIZE,
- RTEMS_DEFAULT_MODES,
- RTEMS_DEFAULT_ATTRIBUTES,
- &id
- );
- directive_failed( status, "rtems_task_create of TA1" );
-
- status = rtems_task_start( id, Task_1, 0 );
- directive_failed( status, "rtems_task_start of TA1" );
-
- rtems_task_exit();
-}
-
-/* comment out the following include to verify type are correct */
-#include "dumrtems.h"
-
-rtems_task Task_1(
- rtems_task_argument argument
-)
-{
- rtems_name name RTEMS_GCC_NOWARN_UNUSED;
- uint32_t index RTEMS_GCC_NOWARN_UNUSED;
- rtems_id id RTEMS_GCC_NOWARN_UNUSED;
- rtems_task_priority in_priority RTEMS_GCC_NOWARN_UNUSED;
- rtems_task_priority out_priority RTEMS_GCC_NOWARN_UNUSED;
- rtems_mode in_mode RTEMS_GCC_NOWARN_UNUSED;
- rtems_mode mask RTEMS_GCC_NOWARN_UNUSED;
- rtems_mode out_mode RTEMS_GCC_NOWARN_UNUSED;
- rtems_time_of_day time RTEMS_GCC_NOWARN_UNUSED;
- rtems_interval timeout RTEMS_GCC_NOWARN_UNUSED;
- rtems_signal_set signals RTEMS_GCC_NOWARN_UNUSED;
- void *address_1 RTEMS_GCC_NOWARN_UNUSED;
- rtems_event_set events RTEMS_GCC_NOWARN_UNUSED;
- long buffer[ 4 ] RTEMS_GCC_NOWARN_UNUSED;
- uint32_t count RTEMS_GCC_NOWARN_UNUSED;
- rtems_device_major_number major RTEMS_GCC_NOWARN_UNUSED;
- rtems_device_minor_number minor RTEMS_GCC_NOWARN_UNUSED;
- uint32_t io_result RTEMS_GCC_NOWARN_UNUSED;
- uint32_t error RTEMS_GCC_NOWARN_UNUSED;
- rtems_time_of_day tod RTEMS_GCC_NOWARN_UNUSED;
-
- name = rtems_build_name( 'N', 'A', 'M', 'E' );
- in_priority = 250;
- in_mode = RTEMS_NO_PREEMPT;
- mask = RTEMS_PREEMPT_MASK;
- timeout = 100;
- signals = RTEMS_SIGNAL_1 | RTEMS_SIGNAL_3;
- major = 10;
- minor = 0;
- error = 100;
-
-/* rtems_shutdown_executive */
-
- benchmark_timer_initialize();
- for ( index=1 ; index <= OPERATION_COUNT ; index++ )
- (void) rtems_shutdown_executive( error );
- end_time = benchmark_timer_read();
-
- put_time(
- "overhead: rtems_shutdown_executive",
- end_time,
- OPERATION_COUNT,
- overhead,
- 0
- );
-
-/* rtems_task_create */
-
- benchmark_timer_initialize();
- for ( index = 1 ; index <= OPERATION_COUNT ; index ++ )
- (void) rtems_task_create(
- name,
- in_priority,
- RTEMS_MINIMUM_STACK_SIZE,
- RTEMS_DEFAULT_MODES,
- RTEMS_DEFAULT_ATTRIBUTES,
- &id
- );
- end_time = benchmark_timer_read();
-
- put_time(
- "overhead: rtems_task_create",
- end_time,
- OPERATION_COUNT,
- overhead,
- 0
- );
-
-/* rtems_task_ident */
-
- benchmark_timer_initialize();
- for ( index = 1 ; index <= OPERATION_COUNT ; index ++ )
- (void) rtems_task_ident( name, RTEMS_SEARCH_ALL_NODES, id );
- end_time = benchmark_timer_read();
-
- put_time(
- "overhead: rtems_task_ident",
- end_time,
- OPERATION_COUNT,
- overhead,
- 0
- );
-
-/* rtems_task_start */
-
- benchmark_timer_initialize();
- for ( index = 1 ; index <= OPERATION_COUNT ; index ++ )
- (void) rtems_task_start( id, Task_1, 0 );
- end_time = benchmark_timer_read();
-
- put_time(
- "overhead: rtems_task_start",
- end_time,
- OPERATION_COUNT,
- overhead,
- 0
- );
-
-/* rtems_task_restart */
-
- benchmark_timer_initialize();
- for ( index = 1 ; index <= OPERATION_COUNT ; index ++ )
- (void) rtems_task_restart( id, 0 );
- end_time = benchmark_timer_read();
-
- put_time(
- "overhead: rtems_task_restart",
- end_time,
- OPERATION_COUNT,
- overhead,
- 0
- );
-
-/* rtems_task_delete */
-
- benchmark_timer_initialize();
- for ( index = 1 ; index <= OPERATION_COUNT ; index ++ )
- (void) rtems_task_delete( id );
- end_time = benchmark_timer_read();
-
- put_time(
- "overhead: rtems_task_delete",
- end_time,
- OPERATION_COUNT,
- overhead,
- 0
- );
-
-/* rtems_task_suspend */
-
- benchmark_timer_initialize();
- for ( index = 1 ; index <= OPERATION_COUNT ; index ++ )
- (void) rtems_task_suspend( id );
- end_time = benchmark_timer_read();
-
- put_time(
- "overhead: rtems_task_suspend",
- end_time,
- OPERATION_COUNT,
- overhead,
- 0
- );
-
-/* rtems_task_resume */
-
- benchmark_timer_initialize();
- for ( index = 1 ; index <= OPERATION_COUNT ; index ++ )
- (void) rtems_task_resume( id );
- end_time = benchmark_timer_read();
-
- put_time(
- "overhead: rtems_task_resume",
- end_time,
- OPERATION_COUNT,
- overhead,
- 0
- );
-
-/* rtems_task_set_priority */
-
- benchmark_timer_initialize();
- for ( index = 1 ; index <= OPERATION_COUNT ; index ++ )
- (void) rtems_task_set_priority( id, in_priority, &out_priority );
- end_time = benchmark_timer_read();
-
- put_time(
- "overhead: rtems_task_set_priority",
- end_time,
- OPERATION_COUNT,
- overhead,
- 0
- );
-
-/* rtems_task_mode */
-
- benchmark_timer_initialize();
- for ( index = 1 ; index <= OPERATION_COUNT ; index ++ )
- (void) rtems_task_mode( in_mode, mask, &out_mode );
- end_time = benchmark_timer_read();
-
- put_time(
- "overhead: rtems_task_mode",
- end_time,
- OPERATION_COUNT,
- overhead,
- 0
- );
-
-/* rtems_task_wake_when */
-
- benchmark_timer_initialize();
- for ( index = 1 ; index <= OPERATION_COUNT ; index ++ )
- (void) rtems_task_wake_when( time );
- end_time = benchmark_timer_read();
-
- put_time(
- "overhead: rtems_task_wake_when",
- end_time,
- OPERATION_COUNT,
- overhead,
- 0
- );
-
-/* rtems_task_wake_after */
-
- benchmark_timer_initialize();
- for ( index = 1 ; index <= OPERATION_COUNT ; index ++ )
- (void) rtems_task_wake_after( timeout );
- end_time = benchmark_timer_read();
-
- put_time(
- "overhead: rtems_task_wake_after",
- end_time,
- OPERATION_COUNT,
- overhead,
- 0
- );
-
-/* rtems_interrupt_catch */
-
- benchmark_timer_initialize();
- for ( index = 1 ; index <= OPERATION_COUNT ; index ++ )
- (void) rtems_interrupt_catch( Isr_handler, 5, address_1 );
- end_time = benchmark_timer_read();
-
- put_time(
- "overhead: rtems_interrupt_catch",
- end_time,
- OPERATION_COUNT,
- overhead,
- 0
- );
-
-/* rtems_clock_get_tod */
-
- benchmark_timer_initialize();
- for ( index = 1 ; index <= OPERATION_COUNT ; index ++ )
- (void) rtems_clock_get_tod( &tod );
- end_time = benchmark_timer_read();
-
- put_time(
- "overhead: rtems_clock_get_tod",
- end_time,
- OPERATION_COUNT,
- overhead,
- 0
- );
-
-/* rtems_clock_set */
-
- benchmark_timer_initialize();
- for ( index = 1 ; index <= OPERATION_COUNT ; index ++ )
- (void) rtems_clock_set( time );
- end_time = benchmark_timer_read();
-
- put_time(
- "overhead: rtems_clock_set",
- end_time,
- OPERATION_COUNT,
- overhead,
- 0
- );
-
-/* rtems_clock_tick */
-
- benchmark_timer_initialize();
- for ( index = 1 ; index <= OPERATION_COUNT ; index ++ )
- (void) rtems_clock_tick();
- end_time = benchmark_timer_read();
-
- put_time(
- "overhead: rtems_clock_tick",
- end_time,
- OPERATION_COUNT,
- overhead,
- 0
- );
-
-/* rtems_timer_create */
-
- benchmark_timer_initialize();
- for ( index = 1 ; index <= OPERATION_COUNT ; index ++ )
- (void) rtems_timer_create( name, &id );
- end_time = benchmark_timer_read();
-
- put_time(
- "overhead: rtems_timer_create",
- end_time,
- OPERATION_COUNT,
- overhead,
- 0
- );
-
-/* rtems_timer_delete */
-
- benchmark_timer_initialize();
- for ( index = 1 ; index <= OPERATION_COUNT ; index ++ )
- (void) rtems_timer_delete( id );
- end_time = benchmark_timer_read();
-
- put_time(
- "overhead: rtems_timer_delete",
- end_time,
- OPERATION_COUNT,
- overhead,
- 0
- );
-
-/* rtems_timer_ident */
-
- benchmark_timer_initialize();
- for ( index = 1 ; index <= OPERATION_COUNT ; index ++ )
- (void) rtems_timer_ident( name, id );
- end_time = benchmark_timer_read();
-
- put_time(
- "overhead: rtems_timer_ident",
- end_time,
- OPERATION_COUNT,
- overhead,
- 0
- );
-
-/* rtems_timer_fire_after */
-
- benchmark_timer_initialize();
- for ( index = 1 ; index <= OPERATION_COUNT ; index ++ )
- (void) rtems_timer_fire_after(
- id,
- timeout,
- Timer_handler,
- NULL
- );
- end_time = benchmark_timer_read();
-
- put_time(
- "overhead: rtems_timer_fire_after",
- end_time,
- OPERATION_COUNT,
- overhead,
- 0
- );
-
-/* rtems_timer_fire_when */
-
- benchmark_timer_initialize();
- for ( index = 1 ; index <= OPERATION_COUNT ; index ++ )
- (void) rtems_timer_fire_when(
- id,
- time,
- Timer_handler,
- NULL
- );
- end_time = benchmark_timer_read();
-
- put_time(
- "overhead: rtems_timer_fire_when",
- end_time,
- OPERATION_COUNT,
- overhead,
- 0
- );
-
-/* rtems_timer_reset */
-
- benchmark_timer_initialize();
- for ( index = 1 ; index <= OPERATION_COUNT ; index ++ )
- (void) rtems_timer_reset( id );
- end_time = benchmark_timer_read();
-
- put_time(
- "overhead: rtems_timer_reset",
- end_time,
- OPERATION_COUNT,
- overhead,
- 0
- );
-
-/* rtems_timer_cancel */
-
- benchmark_timer_initialize();
- for ( index = 1 ; index <= OPERATION_COUNT ; index ++ )
- (void) rtems_timer_cancel( id );
- end_time = benchmark_timer_read();
-
- put_time(
- "overhead: rtems_timer_cancel",
- end_time,
- OPERATION_COUNT,
- overhead,
- 0
- );
-
-/* rtems_semaphore_create */
-
- benchmark_timer_initialize();
- for ( index = 1 ; index <= OPERATION_COUNT ; index ++ )
- (void) rtems_semaphore_create(
- name,
- 128,
- RTEMS_DEFAULT_ATTRIBUTES,
- RTEMS_NO_PRIORITY,
- &id
- );
- end_time = benchmark_timer_read();
-
- put_time(
- "overhead: rtems_semaphore_create",
- end_time,
- OPERATION_COUNT,
- overhead,
- 0
- );
-
-/* rtems_semaphore_delete */
-
- benchmark_timer_initialize();
- for ( index = 1 ; index <= OPERATION_COUNT ; index ++ )
- (void) rtems_semaphore_delete( id );
- end_time = benchmark_timer_read();
-
- put_time(
- "overhead: rtems_semaphore_delete",
- end_time,
- OPERATION_COUNT,
- overhead,
- 0
- );
-
-/* rtems_semaphore_ident */
-
- benchmark_timer_initialize();
- for ( index = 1 ; index <= OPERATION_COUNT ; index ++ )
- (void) rtems_semaphore_ident( name, RTEMS_SEARCH_ALL_NODES, id );
- end_time = benchmark_timer_read();
-
- put_time(
- "overhead: rtems_semaphore_ident",
- end_time,
- OPERATION_COUNT,
- overhead,
- 0
- );
-
-/* rtems_semaphore_obtain */
-
- benchmark_timer_initialize();
- for ( index = 1 ; index <= OPERATION_COUNT ; index ++ )
- (void) rtems_semaphore_obtain( id, RTEMS_DEFAULT_OPTIONS, timeout );
- end_time = benchmark_timer_read();
-
- put_time(
- "overhead: rtems_semaphore_obtain",
- end_time,
- OPERATION_COUNT,
- overhead,
- 0
- );
-
-/* rtems_semaphore_release */
-
- benchmark_timer_initialize();
- for ( index = 1 ; index <= OPERATION_COUNT ; index ++ )
- (void) rtems_semaphore_release( id );
- end_time = benchmark_timer_read();
-
- put_time(
- "overhead: rtems_semaphore_release",
- end_time,
- OPERATION_COUNT,
- overhead,
- 0
- );
-
-/* rtems_message_queue_create */
-
- benchmark_timer_initialize();
- for ( index = 1 ; index <= OPERATION_COUNT ; index ++ )
- (void) rtems_message_queue_create(
- name,
- 128,
- RTEMS_DEFAULT_ATTRIBUTES,
- &id
- );
- end_time = benchmark_timer_read();
-
- put_time(
- "overhead: rtems_message_queue_create",
- end_time,
- OPERATION_COUNT,
- overhead,
- 0
- );
-
-/* rtems_message_queue_ident */
-
- benchmark_timer_initialize();
- for ( index = 1 ; index <= OPERATION_COUNT ; index ++ )
- (void) rtems_message_queue_ident(
- name,
- RTEMS_SEARCH_ALL_NODES,
- id
- );
- end_time = benchmark_timer_read();
-
- put_time(
- "overhead: rtems_message_queue_ident",
- end_time,
- OPERATION_COUNT,
- overhead,
- 0
- );
-
-/* rtems_message_queue_delete */
-
- benchmark_timer_initialize();
- for ( index = 1 ; index <= OPERATION_COUNT ; index ++ )
- (void) rtems_message_queue_delete( id );
- end_time = benchmark_timer_read();
-
- put_time(
- "overhead: rtems_message_queue_delete",
- end_time,
- OPERATION_COUNT,
- overhead,
- 0
- );
-
-/* rtems_message_queue_send */
-
- benchmark_timer_initialize();
- for ( index = 1 ; index <= OPERATION_COUNT ; index ++ )
- (void) rtems_message_queue_send( id, (long (*)[4])buffer );
- end_time = benchmark_timer_read();
-
- put_time(
- "overhead: rtems_message_queue_send",
- end_time,
- OPERATION_COUNT,
- overhead,
- 0
- );
-
-/* rtems_message_queue_urgent */
-
- benchmark_timer_initialize();
- for ( index = 1 ; index <= OPERATION_COUNT ; index ++ )
- (void) rtems_message_queue_urgent( id, (long (*)[4])buffer );
- end_time = benchmark_timer_read();
-
- put_time(
- "overhead: rtems_message_queue_urgent",
- end_time,
- OPERATION_COUNT,
- overhead,
- 0
- );
-
-/* rtems_message_queue_broadcast */
-
- benchmark_timer_initialize();
- for ( index = 1 ; index <= OPERATION_COUNT ; index ++ )
- (void) rtems_message_queue_broadcast(
- id,
- (long (*)[4])buffer,
- &count
- );
- end_time = benchmark_timer_read();
-
- put_time(
- "overhead: rtems_message_queue_broadcast",
- end_time,
- OPERATION_COUNT,
- overhead,
- 0
- );
-
-/* rtems_message_queue_receive */
-
- benchmark_timer_initialize();
- for ( index = 1 ; index <= OPERATION_COUNT ; index ++ )
- (void) rtems_message_queue_receive(
- id,
- (long (*)[4])buffer,
- RTEMS_DEFAULT_OPTIONS,
- timeout
- );
- end_time = benchmark_timer_read();
-
- put_time(
- "overhead: rtems_message_queue_receive",
- end_time,
- OPERATION_COUNT,
- overhead,
- 0
- );
-
-/* rtems_message_queue_flush */
-
- benchmark_timer_initialize();
- for ( index = 1 ; index <= OPERATION_COUNT ; index ++ )
- (void) rtems_message_queue_flush( id, &count );
- end_time = benchmark_timer_read();
-
- put_time(
- "overhead: rtems_message_queue_flush",
- end_time,
- OPERATION_COUNT,
- overhead,
- 0
- );
-
-/* rtems_event_send */
-
- benchmark_timer_initialize();
- for ( index = 1 ; index <= OPERATION_COUNT ; index ++ )
- (void) rtems_event_send( id, events );
- end_time = benchmark_timer_read();
-
- put_time(
- "overhead: rtems_event_send",
- end_time,
- OPERATION_COUNT,
- overhead,
- 0
- );
-
-/* rtems_event_receive */
-
- benchmark_timer_initialize();
- for ( index = 1 ; index <= OPERATION_COUNT ; index ++ )
- (void) rtems_event_receive(
- RTEMS_EVENT_16,
- RTEMS_DEFAULT_OPTIONS,
- timeout,
- &events
- );
- end_time = benchmark_timer_read();
-
- put_time(
- "overhead: rtems_event_receive",
- end_time,
- OPERATION_COUNT,
- overhead,
- 0
- );
-
-/* rtems_signal_catch */
-
- benchmark_timer_initialize();
- for ( index = 1 ; index <= OPERATION_COUNT ; index ++ )
- (void) rtems_signal_catch( Asr_handler, RTEMS_DEFAULT_MODES );
- end_time = benchmark_timer_read();
-
- put_time(
- "overhead: rtems_signal_catch",
- end_time,
- OPERATION_COUNT,
- overhead,
- 0
- );
-
-/* rtems_signal_send */
-
- benchmark_timer_initialize();
- for ( index = 1 ; index <= OPERATION_COUNT ; index ++ )
- (void) rtems_signal_send( id, signals );
- end_time = benchmark_timer_read();
-
- put_time(
- "overhead: rtems_signal_send",
- end_time,
- OPERATION_COUNT,
- overhead,
- 0
- );
-
-/* rtems_partition_create */
-
- benchmark_timer_initialize();
- for ( index = 1 ; index <= OPERATION_COUNT ; index ++ )
- (void) rtems_partition_create(
- name,
- Memory_area,
- 2048,
- 128,
- RTEMS_DEFAULT_ATTRIBUTES,
- &id
- );
- end_time = benchmark_timer_read();
-
- put_time(
- "overhead: rtems_partition_create",
- end_time,
- OPERATION_COUNT,
- overhead,
- 0
- );
-
-/* rtems_partition_ident */
-
- benchmark_timer_initialize();
- for ( index = 1 ; index <= OPERATION_COUNT ; index ++ )
- (void) rtems_partition_ident( name, RTEMS_SEARCH_ALL_NODES, id );
- end_time = benchmark_timer_read();
-
- put_time(
- "overhead: rtems_partition_ident",
- end_time,
- OPERATION_COUNT,
- overhead,
- 0
- );
-
-/* rtems_partition_delete */
-
- benchmark_timer_initialize();
- for ( index = 1 ; index <= OPERATION_COUNT ; index ++ )
- (void) rtems_partition_delete( id );
- end_time = benchmark_timer_read();
-
- put_time(
- "overhead: rtems_partition_delete",
- end_time,
- OPERATION_COUNT,
- overhead,
- 0
- );
-
-/* rtems_partition_get_buffer */
-
- benchmark_timer_initialize();
- for ( index = 1 ; index <= OPERATION_COUNT ; index ++ )
- (void) rtems_partition_get_buffer( id, address_1 );
- end_time = benchmark_timer_read();
-
- put_time(
- "overhead: rtems_partition_get_buffer",
- end_time,
- OPERATION_COUNT,
- overhead,
- 0
- );
-
-/* rtems_partition_return_buffer */
-
- benchmark_timer_initialize();
- for ( index = 1 ; index <= OPERATION_COUNT ; index ++ )
- (void) rtems_partition_return_buffer( id, address_1 );
- end_time = benchmark_timer_read();
-
- put_time(
- "overhead: rtems_partition_return_buffer",
- end_time,
- OPERATION_COUNT,
- overhead,
- 0
- );
-
-/* rtems_region_create */
-
- benchmark_timer_initialize();
- for ( index = 1 ; index <= OPERATION_COUNT ; index ++ )
- (void) rtems_region_create(
- name,
- Memory_area,
- 2048,
- 128,
- RTEMS_DEFAULT_ATTRIBUTES,
- &id
- );
- end_time = benchmark_timer_read();
-
- put_time(
- "overhead: rtems_region_create",
- end_time,
- OPERATION_COUNT,
- overhead,
- 0
- );
-
-/* rtems_region_ident */
-
- benchmark_timer_initialize();
- for ( index = 1 ; index <= OPERATION_COUNT ; index ++ )
- (void) rtems_region_ident( name, id );
- end_time = benchmark_timer_read();
-
- put_time(
- "overhead: rtems_region_ident",
- end_time,
- OPERATION_COUNT,
- overhead,
- 0
- );
-
-/* rtems_region_delete */
-
- benchmark_timer_initialize();
- for ( index = 1 ; index <= OPERATION_COUNT ; index ++ )
- (void) rtems_region_delete( id );
- end_time = benchmark_timer_read();
-
- put_time(
- "overhead: rtems_region_delete",
- end_time,
- OPERATION_COUNT,
- overhead,
- 0
- );
-
-/* rtems_region_get_segment */
-
- benchmark_timer_initialize();
- for ( index = 1 ; index <= OPERATION_COUNT ; index ++ )
- (void) rtems_region_get_segment(
- id,
- 243,
- RTEMS_DEFAULT_OPTIONS,
- timeout,
- &address_1
- );
- end_time = benchmark_timer_read();
-
- put_time(
- "overhead: rtems_region_get_segment",
- end_time,
- OPERATION_COUNT,
- overhead,
- 0
- );
-
-/* rtems_region_return_segment */
-
- benchmark_timer_initialize();
- for ( index = 1 ; index <= OPERATION_COUNT ; index ++ )
- (void) rtems_region_return_segment( id, address_1 );
- end_time = benchmark_timer_read();
-
- put_time(
- "overhead: rtems_region_return_segment",
- end_time,
- OPERATION_COUNT,
- overhead,
- 0
- );
-
-/* rtems_port_create */
-
- benchmark_timer_initialize();
- for ( index = 1 ; index <= OPERATION_COUNT ; index ++ )
- (void) rtems_port_create(
- name,
- Internal_port_area,
- External_port_area,
- 0xff,
- &id
- );
- end_time = benchmark_timer_read();
-
- put_time(
- "overhead: rtems_port_create",
- end_time,
- OPERATION_COUNT,
- overhead,
- 0
- );
-
-/* rtems_port_ident */
-
- benchmark_timer_initialize();
- for ( index = 1 ; index <= OPERATION_COUNT ; index ++ )
- (void) rtems_port_ident( name, id );
- end_time = benchmark_timer_read();
-
- put_time(
- "overhead: rtems_port_ident",
- end_time,
- OPERATION_COUNT,
- overhead,
- 0
- );
-
-/* rtems_port_delete */
-
- benchmark_timer_initialize();
- for ( index = 1 ; index <= OPERATION_COUNT ; index ++ )
- (void) rtems_port_delete( id );
- end_time = benchmark_timer_read();
-
- put_time(
- "overhead: rtems_port_delete",
- end_time,
- OPERATION_COUNT,
- overhead,
- 0
- );
-
-/* rtems_port_external_to_internal */
-
- benchmark_timer_initialize();
- for ( index = 1 ; index <= OPERATION_COUNT ; index ++ )
- (void) rtems_port_external_to_internal(
- id,
- &External_port_area[ 7 ],
- address_1
- );
- end_time = benchmark_timer_read();
-
- put_time(
- "overhead: rtems_port_external_to_internal",
- end_time,
- OPERATION_COUNT,
- overhead,
- 0
- );
-
-/* rtems_port_internal_to_external */
-
- benchmark_timer_initialize();
- for ( index = 1 ; index <= OPERATION_COUNT ; index ++ )
- (void) rtems_port_internal_to_external(
- id,
- &Internal_port_area[ 7 ],
- address_1
- );
- end_time = benchmark_timer_read();
-
- put_time(
- "overhead: rtems_port_internal_to_external",
- end_time,
- OPERATION_COUNT,
- overhead,
- 0
- );
-
-/* rtems_io_initialize */
-
- benchmark_timer_initialize();
- for ( index = 1 ; index <= OPERATION_COUNT ; index ++ )
- (void) rtems_io_initialize(
- major,
- minor,
- address_1,
- &io_result
- );
- end_time = benchmark_timer_read();
-
- put_time(
- "overhead: rtems_io_initialize",
- end_time,
- OPERATION_COUNT,
- overhead,
- 0
- );
-
-/* rtems_io_open */
-
- benchmark_timer_initialize();
- for ( index = 1 ; index <= OPERATION_COUNT ; index ++ )
- (void) rtems_io_open(
- major,
- minor,
- address_1,
- &io_result
- );
- end_time = benchmark_timer_read();
-
- put_time(
- "overhead: rtems_io_open",
- end_time,
- OPERATION_COUNT,
- overhead,
- 0
- );
-
-/* rtems_io_close */
-
- benchmark_timer_initialize();
- for ( index = 1 ; index <= OPERATION_COUNT ; index ++ )
- (void) rtems_io_close(
- major,
- minor,
- address_1,
- &io_result
- );
- end_time = benchmark_timer_read();
-
- put_time(
- "overhead: rtems_io_close",
- end_time,
- OPERATION_COUNT,
- overhead,
- 0
- );
-
-/* rtems_io_read */
-
- benchmark_timer_initialize();
- for ( index = 1 ; index <= OPERATION_COUNT ; index ++ )
- (void) rtems_io_read(
- major,
- minor,
- address_1,
- &io_result
- );
- end_time = benchmark_timer_read();
-
- put_time(
- "overhead: rtems_io_read",
- end_time,
- OPERATION_COUNT,
- overhead,
- 0
- );
-
-/* rtems_io_write */
-
- benchmark_timer_initialize();
- for ( index = 1 ; index <= OPERATION_COUNT ; index ++ )
- (void) rtems_io_write(
- major,
- minor,
- address_1,
- &io_result
- );
- end_time = benchmark_timer_read();
-
- put_time(
- "overhead: rtems_io_write",
- end_time,
- OPERATION_COUNT,
- overhead,
- 0
- );
-
-/* rtems_io_control */
-
- benchmark_timer_initialize();
- for ( index = 1 ; index <= OPERATION_COUNT ; index ++ )
- (void) rtems_io_control(
- major,
- minor,
- address_1,
- &io_result
- );
- end_time = benchmark_timer_read();
-
- put_time(
- "overhead: rtems_io_control",
- end_time,
- OPERATION_COUNT,
- overhead,
- 0
- );
-
-/* rtems_fatal_error_occurred */
-
- benchmark_timer_initialize();
- for ( index = 1 ; index <= OPERATION_COUNT ; index ++ )
- (void) rtems_fatal_error_occurred( error );
- end_time = benchmark_timer_read();
-
- put_time(
- "overhead: rtems_fatal_error_occurred",
- end_time,
- OPERATION_COUNT,
- overhead,
- 0
- );
-
-/* rtems_rate_monotonic_create */
-
- benchmark_timer_initialize();
- for ( index = 1 ; index <= OPERATION_COUNT ; index ++ )
- (void) rtems_rate_monotonic_create( name, &id );
- end_time = benchmark_timer_read();
-
- put_time(
- "overhead: rtems_rate_monotonic_create",
- end_time,
- OPERATION_COUNT,
- overhead,
- 0
- );
-
-/* rtems_rate_monotonic_ident */
-
- benchmark_timer_initialize();
- for ( index = 1 ; index <= OPERATION_COUNT ; index ++ )
- (void) rtems_rate_monotonic_ident( name, id );
- end_time = benchmark_timer_read();
-
- put_time(
- "overhead: rtems_rate_monotonic_ident",
- end_time,
- OPERATION_COUNT,
- overhead,
- 0
- );
-
-/* rtems_rate_monotonic_delete */
-
- benchmark_timer_initialize();
- for ( index = 1 ; index <= OPERATION_COUNT ; index ++ )
- (void) rtems_rate_monotonic_delete( id );
- end_time = benchmark_timer_read();
-
- put_time(
- "overhead: rtems_rate_monotonic_delete",
- end_time,
- OPERATION_COUNT,
- overhead,
- 0
- );
-
-/* rtems_rate_monotonic_cancel */
-
- benchmark_timer_initialize();
- for ( index = 1 ; index <= OPERATION_COUNT ; index ++ )
- (void) rtems_rate_monotonic_cancel( id );
- end_time = benchmark_timer_read();
-
- put_time(
- "overhead: rtems_rate_monotonic_cancel",
- end_time,
- OPERATION_COUNT,
- overhead,
- 0
- );
-
-/* rtems_rate_monotonic_period */
-
- benchmark_timer_initialize();
- for ( index = 1 ; index <= OPERATION_COUNT ; index ++ )
- (void) rtems_rate_monotonic_period( id, timeout );
- end_time = benchmark_timer_read();
-
- put_time(
- "overhead: rtems_rate_monotonic_period",
- end_time,
- OPERATION_COUNT,
- overhead,
- 0
- );
-
-/* rtems_multiprocessing_announce */
-
- benchmark_timer_initialize();
- for ( index = 1 ; index <= OPERATION_COUNT ; index ++ )
- (void) rtems_multiprocessing_announce();
- end_time = benchmark_timer_read();
-
- put_time(
- "overhead: rtems_multiprocessing_announce",
- end_time,
- OPERATION_COUNT,
- overhead,
- 0
- );
-
- TEST_END();
-
- rtems_test_exit( 0 );
-}
diff --git a/testsuites/tmtests/tmoverhd/tmoverhd.doc b/testsuites/tmtests/tmoverhd/tmoverhd.doc
deleted file mode 100644
index 8c1d97ed28..0000000000
--- a/testsuites/tmtests/tmoverhd/tmoverhd.doc
+++ /dev/null
@@ -1,82 +0,0 @@
-# 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.
-#
-
-directives:
-
-+ rtems shutdown executive
-+ rtems task create
-+ rtems task ident
-+ rtems task start
-+ rtems task restart
-+ rtems task delete
-+ rtems task suspend
-+ rtems task resume
-+ rtems task set priority
-+ rtems task mode
-+ rtems task wake when
-+ rtems task wake after
-+ rtems interrupt catch
-+ rtems clock get
-+ rtems clock set
-+ rtems clock tick
-+ rtems timer create
-+ rtems timer delete
-+ rtems timer ident
-+ rtems timer fire after
-+ rtems timer fire when
-+ rtems timer reset
-+ rtems timer cancel
-+ rtems semaphore create
-+ rtems semaphore delete
-+ rtems semaphore ident
-+ rtems semaphore obtain
-+ rtems semaphore release
-+ rtems message queue create
-+ rtems message queue ident
-+ rtems message queue delete
-+ rtems message queue send
-+ rtems message queue urgent
-+ rtems message queue broadcast
-+ rtems message queue receive
-+ rtems message queue flush
-+ rtems event send
-+ rtems event receive
-+ rtems signal catch
-+ rtems signal send
-+ rtems partition create
-+ rtems partition ident
-+ rtems partition delete
-+ rtems partition get buffer
-+ rtems partition return buffer
-+ rtems region create
-+ rtems region ident
-+ rtems region delete
-+ rtems region get segment
-+ rtems region return segment
-+ rtems port create
-+ rtems port ident
-+ rtems port delete
-+ rtems port external to internal
-+ rtems port internal to external
-+ rtems io initialize
-+ rtems io open
-+ rtems io close
-+ rtems io read
-+ rtems io write
-+ rtems io control
-+ rtems fatal error occurred
-+ rtems rate monotonic create
-+ rtems rate monotonic ident
-+ rtems rate monotonic delete
-+ rtems rate monotonic cancel
-+ rtems rate monotonic period
-+ rtems multiprocessing announce
-
-concepts:
-
-+ Test the overhead of various classic RTEMS directives.
diff --git a/testsuites/validation/tc-task-construct-errors.c b/testsuites/validation/tc-task-construct-errors.c
new file mode 100644
index 0000000000..615186e092
--- /dev/null
+++ b/testsuites/validation/tc-task-construct-errors.c
@@ -0,0 +1,2367 @@
+/* SPDX-License-Identifier: BSD-2-Clause */
+
+/**
+ * @file
+ *
+ * @ingroup RTEMSTestCaseRtemsTaskReqConstructErrors
+ */
+
+/*
+ * Copyright (C) 2020 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 was automatically generated. Do not edit it manually.
+ * Please have a look at
+ *
+ * https://docs.rtems.org/branches/master/eng/req/howto.html
+ *
+ * for information how to maintain and re-generate this file.
+ */
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#include <rtems.h>
+#include <string.h>
+#include <rtems/score/chainimpl.h>
+#include <rtems/score/objectimpl.h>
+
+#include <rtems/test.h>
+
+/**
+ * @defgroup RTEMSTestCaseRtemsTaskReqConstructErrors \
+ * spec:/rtems/task/req/construct-errors
+ *
+ * @ingroup RTEMSTestSuiteTestsuitesValidation0
+ *
+ * @{
+ */
+
+typedef enum {
+ RtemsTaskReqConstructErrors_Pre_Id_Id,
+ RtemsTaskReqConstructErrors_Pre_Id_Null,
+ RtemsTaskReqConstructErrors_Pre_Id_NA
+} RtemsTaskReqConstructErrors_Pre_Id;
+
+typedef enum {
+ RtemsTaskReqConstructErrors_Pre_Name_Valid,
+ RtemsTaskReqConstructErrors_Pre_Name_Inv,
+ RtemsTaskReqConstructErrors_Pre_Name_NA
+} RtemsTaskReqConstructErrors_Pre_Name;
+
+typedef enum {
+ RtemsTaskReqConstructErrors_Pre_Prio_Valid,
+ RtemsTaskReqConstructErrors_Pre_Prio_Zero,
+ RtemsTaskReqConstructErrors_Pre_Prio_Inv,
+ RtemsTaskReqConstructErrors_Pre_Prio_NA
+} RtemsTaskReqConstructErrors_Pre_Prio;
+
+typedef enum {
+ RtemsTaskReqConstructErrors_Pre_Tasks_Avail,
+ RtemsTaskReqConstructErrors_Pre_Tasks_None,
+ RtemsTaskReqConstructErrors_Pre_Tasks_NA
+} RtemsTaskReqConstructErrors_Pre_Tasks;
+
+typedef enum {
+ RtemsTaskReqConstructErrors_Pre_TLS_Enough,
+ RtemsTaskReqConstructErrors_Pre_TLS_Small,
+ RtemsTaskReqConstructErrors_Pre_TLS_NA
+} RtemsTaskReqConstructErrors_Pre_TLS;
+
+typedef enum {
+ RtemsTaskReqConstructErrors_Pre_Stack_Enough,
+ RtemsTaskReqConstructErrors_Pre_Stack_Small,
+ RtemsTaskReqConstructErrors_Pre_Stack_NA
+} RtemsTaskReqConstructErrors_Pre_Stack;
+
+typedef enum {
+ RtemsTaskReqConstructErrors_Pre_Ext_Ok,
+ RtemsTaskReqConstructErrors_Pre_Ext_Err,
+ RtemsTaskReqConstructErrors_Pre_Ext_NA
+} RtemsTaskReqConstructErrors_Pre_Ext;
+
+typedef enum {
+ RtemsTaskReqConstructErrors_Pre_Preempt_Yes,
+ RtemsTaskReqConstructErrors_Pre_Preempt_No,
+ RtemsTaskReqConstructErrors_Pre_Preempt_NA
+} RtemsTaskReqConstructErrors_Pre_Preempt;
+
+typedef enum {
+ RtemsTaskReqConstructErrors_Post_Status_Ok,
+ RtemsTaskReqConstructErrors_Post_Status_InvAddress,
+ RtemsTaskReqConstructErrors_Post_Status_InvName,
+ RtemsTaskReqConstructErrors_Post_Status_InvPrio,
+ RtemsTaskReqConstructErrors_Post_Status_InvSize,
+ RtemsTaskReqConstructErrors_Post_Status_TooMany,
+ RtemsTaskReqConstructErrors_Post_Status_Unsatisfied,
+ RtemsTaskReqConstructErrors_Post_Status_NA
+} RtemsTaskReqConstructErrors_Post_Status;
+
+/**
+ * @brief Test context for spec:/rtems/task/req/construct-errors test case.
+ */
+typedef struct {
+ rtems_status_code status;
+
+ rtems_task_config config;
+
+ rtems_id *id;
+
+ rtems_id id_value;
+
+ bool create_extension_status;
+
+ size_t stack_size;
+
+ rtems_id extension_id;
+
+ Chain_Control tasks;
+
+ /**
+ * @brief This member defines the pre-condition states for the next action.
+ */
+ size_t pcs[ 8 ];
+
+ /**
+ * @brief This member indicates if the test action loop is currently
+ * executed.
+ */
+ bool in_action_loop;
+} RtemsTaskReqConstructErrors_Context;
+
+static RtemsTaskReqConstructErrors_Context
+ RtemsTaskReqConstructErrors_Instance;
+
+static const char * const RtemsTaskReqConstructErrors_PreDesc_Id[] = {
+ "Id",
+ "Null",
+ "NA"
+};
+
+static const char * const RtemsTaskReqConstructErrors_PreDesc_Name[] = {
+ "Valid",
+ "Inv",
+ "NA"
+};
+
+static const char * const RtemsTaskReqConstructErrors_PreDesc_Prio[] = {
+ "Valid",
+ "Zero",
+ "Inv",
+ "NA"
+};
+
+static const char * const RtemsTaskReqConstructErrors_PreDesc_Tasks[] = {
+ "Avail",
+ "None",
+ "NA"
+};
+
+static const char * const RtemsTaskReqConstructErrors_PreDesc_TLS[] = {
+ "Enough",
+ "Small",
+ "NA"
+};
+
+static const char * const RtemsTaskReqConstructErrors_PreDesc_Stack[] = {
+ "Enough",
+ "Small",
+ "NA"
+};
+
+static const char * const RtemsTaskReqConstructErrors_PreDesc_Ext[] = {
+ "Ok",
+ "Err",
+ "NA"
+};
+
+static const char * const RtemsTaskReqConstructErrors_PreDesc_Preempt[] = {
+ "Yes",
+ "No",
+ "NA"
+};
+
+static const char * const * const RtemsTaskReqConstructErrors_PreDesc[] = {
+ RtemsTaskReqConstructErrors_PreDesc_Id,
+ RtemsTaskReqConstructErrors_PreDesc_Name,
+ RtemsTaskReqConstructErrors_PreDesc_Prio,
+ RtemsTaskReqConstructErrors_PreDesc_Tasks,
+ RtemsTaskReqConstructErrors_PreDesc_TLS,
+ RtemsTaskReqConstructErrors_PreDesc_Stack,
+ RtemsTaskReqConstructErrors_PreDesc_Ext,
+ RtemsTaskReqConstructErrors_PreDesc_Preempt,
+ NULL
+};
+
+static _Thread_local int tls_variable;
+
+#define MAX_TLS_SIZE RTEMS_ALIGN_UP( 128, RTEMS_TASK_STORAGE_ALIGNMENT )
+
+RTEMS_ALIGNED( RTEMS_TASK_STORAGE_ALIGNMENT ) static char task_storage[
+ RTEMS_TASK_STORAGE_SIZE(
+ MAX_TLS_SIZE + RTEMS_MINIMUM_STACK_SIZE,
+ RTEMS_FLOATING_POINT
+ )
+];
+
+static const rtems_task_config valid_task_config = {
+ .name = rtems_build_name( 'T', 'A', 'S', 'K' ),
+ .initial_priority = 1,
+ .storage_area = task_storage,
+ .storage_size = sizeof( task_storage ),
+ .maximum_thread_local_storage_size = MAX_TLS_SIZE,
+ .initial_modes = RTEMS_DEFAULT_MODES,
+ .attributes = RTEMS_DEFAULT_MODES
+};
+
+static bool ThreadCreate( rtems_tcb *executing, rtems_tcb *created )
+{
+ (void) executing;
+ (void) created;
+
+ return RtemsTaskReqConstructErrors_Instance.create_extension_status;
+}
+
+static const rtems_extensions_table extensions = {
+ .thread_create = ThreadCreate
+};
+
+static void RtemsTaskReqConstructErrors_Pre_Id_Prepare(
+ RtemsTaskReqConstructErrors_Context *ctx,
+ RtemsTaskReqConstructErrors_Pre_Id state
+)
+{
+ switch ( state ) {
+ case RtemsTaskReqConstructErrors_Pre_Id_Id: {
+ ctx->id = &ctx->id_value;
+ break;
+ }
+
+ case RtemsTaskReqConstructErrors_Pre_Id_Null: {
+ ctx->id = NULL;
+ break;
+ }
+
+ case RtemsTaskReqConstructErrors_Pre_Id_NA:
+ break;
+ }
+}
+
+static void RtemsTaskReqConstructErrors_Pre_Name_Prepare(
+ RtemsTaskReqConstructErrors_Context *ctx,
+ RtemsTaskReqConstructErrors_Pre_Name state
+)
+{
+ switch ( state ) {
+ case RtemsTaskReqConstructErrors_Pre_Name_Valid: {
+ ctx->config.name = rtems_build_name( 'N', 'A', 'M', 'E' );
+ break;
+ }
+
+ case RtemsTaskReqConstructErrors_Pre_Name_Inv: {
+ ctx->config.name = 0;
+ break;
+ }
+
+ case RtemsTaskReqConstructErrors_Pre_Name_NA:
+ break;
+ }
+}
+
+static void RtemsTaskReqConstructErrors_Pre_Prio_Prepare(
+ RtemsTaskReqConstructErrors_Context *ctx,
+ RtemsTaskReqConstructErrors_Pre_Prio state
+)
+{
+ switch ( state ) {
+ case RtemsTaskReqConstructErrors_Pre_Prio_Valid: {
+ ctx->config.initial_priority = 254;
+ break;
+ }
+
+ case RtemsTaskReqConstructErrors_Pre_Prio_Zero: {
+ ctx->config.initial_priority = 0;
+ break;
+ }
+
+ case RtemsTaskReqConstructErrors_Pre_Prio_Inv: {
+ ctx->config.initial_priority = 0xffffffff;
+ break;
+ }
+
+ case RtemsTaskReqConstructErrors_Pre_Prio_NA:
+ break;
+ }
+}
+
+static void RtemsTaskReqConstructErrors_Pre_Tasks_Prepare(
+ RtemsTaskReqConstructErrors_Context *ctx,
+ RtemsTaskReqConstructErrors_Pre_Tasks state
+)
+{
+ bool create_extension_status;
+
+ switch ( state ) {
+ case RtemsTaskReqConstructErrors_Pre_Tasks_Avail: {
+ /* Nothing to do */
+ break;
+ }
+
+ case RtemsTaskReqConstructErrors_Pre_Tasks_None: {
+ create_extension_status = ctx->create_extension_status;
+ ctx->create_extension_status = true;
+
+ while ( true ) {
+ rtems_status_code sc;
+ rtems_id id;
+
+ sc = rtems_task_construct( &valid_task_config, &id );
+
+ if ( sc == RTEMS_SUCCESSFUL ) {
+ Objects_Control *obj;
+ const Objects_Information *info;
+
+ info = _Objects_Get_information_id( id );
+ T_quiet_assert_not_null( info );
+ obj = _Objects_Get_no_protection( id, info );
+ T_quiet_assert_not_null( obj );
+ _Chain_Append_unprotected( &ctx->tasks, &obj->Node );
+ } else {
+ T_quiet_rsc( sc, RTEMS_TOO_MANY );
+ break;
+ }
+ }
+
+ ctx->create_extension_status = create_extension_status;
+ break;
+ }
+
+ case RtemsTaskReqConstructErrors_Pre_Tasks_NA:
+ break;
+ }
+}
+
+static void RtemsTaskReqConstructErrors_Pre_TLS_Prepare(
+ RtemsTaskReqConstructErrors_Context *ctx,
+ RtemsTaskReqConstructErrors_Pre_TLS state
+)
+{
+ switch ( state ) {
+ case RtemsTaskReqConstructErrors_Pre_TLS_Enough: {
+ ctx->config.maximum_thread_local_storage_size = MAX_TLS_SIZE;
+ break;
+ }
+
+ case RtemsTaskReqConstructErrors_Pre_TLS_Small: {
+ ctx->config.maximum_thread_local_storage_size = 0;
+ break;
+ }
+
+ case RtemsTaskReqConstructErrors_Pre_TLS_NA:
+ break;
+ }
+}
+
+static void RtemsTaskReqConstructErrors_Pre_Stack_Prepare(
+ RtemsTaskReqConstructErrors_Context *ctx,
+ RtemsTaskReqConstructErrors_Pre_Stack state
+)
+{
+ switch ( state ) {
+ case RtemsTaskReqConstructErrors_Pre_Stack_Enough: {
+ ctx->stack_size = RTEMS_MINIMUM_STACK_SIZE;
+ break;
+ }
+
+ case RtemsTaskReqConstructErrors_Pre_Stack_Small: {
+ ctx->stack_size = 0;
+ break;
+ }
+
+ case RtemsTaskReqConstructErrors_Pre_Stack_NA:
+ break;
+ }
+}
+
+static void RtemsTaskReqConstructErrors_Pre_Ext_Prepare(
+ RtemsTaskReqConstructErrors_Context *ctx,
+ RtemsTaskReqConstructErrors_Pre_Ext state
+)
+{
+ switch ( state ) {
+ case RtemsTaskReqConstructErrors_Pre_Ext_Ok: {
+ ctx->create_extension_status = true;
+ break;
+ }
+
+ case RtemsTaskReqConstructErrors_Pre_Ext_Err: {
+ ctx->create_extension_status = false;
+ break;
+ }
+
+ case RtemsTaskReqConstructErrors_Pre_Ext_NA:
+ break;
+ }
+}
+
+static void RtemsTaskReqConstructErrors_Pre_Preempt_Prepare(
+ RtemsTaskReqConstructErrors_Context *ctx,
+ RtemsTaskReqConstructErrors_Pre_Preempt state
+)
+{
+ switch ( state ) {
+ case RtemsTaskReqConstructErrors_Pre_Preempt_Yes: {
+ ctx->config.initial_modes &= ~RTEMS_PREEMPT_MASK;
+ ctx->config.initial_modes |= RTEMS_PREEMPT;
+ break;
+ }
+
+ case RtemsTaskReqConstructErrors_Pre_Preempt_No: {
+ ctx->config.initial_modes &= ~RTEMS_PREEMPT_MASK;
+ ctx->config.initial_modes |= RTEMS_NO_PREEMPT;
+ break;
+ }
+
+ case RtemsTaskReqConstructErrors_Pre_Preempt_NA:
+ break;
+ }
+}
+
+static void RtemsTaskReqConstructErrors_Post_Status_Check(
+ RtemsTaskReqConstructErrors_Context *ctx,
+ RtemsTaskReqConstructErrors_Post_Status state
+)
+{
+ rtems_status_code sc;
+
+ switch ( state ) {
+ case RtemsTaskReqConstructErrors_Post_Status_Ok: {
+ T_rsc_success( ctx->status );
+ T_eq_ptr( ctx->id, &ctx->id_value );
+ T_ne_u32( ctx->id_value, 0xffffffff );
+
+ sc = rtems_task_delete( ctx->id_value );
+ T_rsc_success( sc );
+ break;
+ }
+
+ case RtemsTaskReqConstructErrors_Post_Status_InvAddress: {
+ T_rsc( ctx->status, RTEMS_INVALID_ADDRESS );
+ T_null( ctx->id );
+ T_eq_u32( ctx->id_value, 0xffffffff );
+ break;
+ }
+
+ case RtemsTaskReqConstructErrors_Post_Status_InvName: {
+ T_rsc( ctx->status, RTEMS_INVALID_NAME );
+ T_eq_u32( ctx->id_value, 0xffffffff );
+ break;
+ }
+
+ case RtemsTaskReqConstructErrors_Post_Status_InvPrio: {
+ T_rsc( ctx->status, RTEMS_INVALID_PRIORITY );
+ T_eq_u32( ctx->id_value, 0xffffffff );
+ break;
+ }
+
+ case RtemsTaskReqConstructErrors_Post_Status_InvSize: {
+ T_rsc( ctx->status, RTEMS_INVALID_SIZE );
+ T_eq_u32( ctx->id_value, 0xffffffff );
+ break;
+ }
+
+ case RtemsTaskReqConstructErrors_Post_Status_TooMany: {
+ T_rsc( ctx->status, RTEMS_TOO_MANY );
+ T_eq_u32( ctx->id_value, 0xffffffff );
+ break;
+ }
+
+ case RtemsTaskReqConstructErrors_Post_Status_Unsatisfied: {
+ T_rsc( ctx->status, RTEMS_UNSATISFIED );
+ T_eq_u32( ctx->id_value, 0xffffffff );
+ break;
+ }
+
+ case RtemsTaskReqConstructErrors_Post_Status_NA:
+ break;
+ }
+}
+
+static void RtemsTaskReqConstructErrors_Setup(
+ RtemsTaskReqConstructErrors_Context *ctx
+)
+{
+ rtems_status_code sc;
+ int var;
+
+ var = tls_variable;
+ RTEMS_OBFUSCATE_VARIABLE( var );
+ tls_variable = var;
+
+ sc = rtems_extension_create(
+ rtems_build_name( 'T', 'C', 'F', 'C' ),
+ &extensions,
+ &ctx->extension_id
+ );
+ T_rsc_success( sc );
+
+ _Chain_Initialize_empty( &ctx->tasks );
+}
+
+static void RtemsTaskReqConstructErrors_Setup_Wrap( void *arg )
+{
+ RtemsTaskReqConstructErrors_Context *ctx;
+
+ ctx = arg;
+ ctx->in_action_loop = false;
+ RtemsTaskReqConstructErrors_Setup( ctx );
+}
+
+static void RtemsTaskReqConstructErrors_Teardown(
+ RtemsTaskReqConstructErrors_Context *ctx
+)
+{
+ rtems_status_code sc;
+
+ sc = rtems_extension_delete( ctx->extension_id );
+ T_rsc_success( sc );
+}
+
+static void RtemsTaskReqConstructErrors_Teardown_Wrap( void *arg )
+{
+ RtemsTaskReqConstructErrors_Context *ctx;
+
+ ctx = arg;
+ ctx->in_action_loop = false;
+ RtemsTaskReqConstructErrors_Teardown( ctx );
+}
+
+static size_t RtemsTaskReqConstructErrors_Scope(
+ void *arg,
+ char *buf,
+ size_t n
+)
+{
+ RtemsTaskReqConstructErrors_Context *ctx;
+
+ ctx = arg;
+
+ if ( ctx->in_action_loop ) {
+ return T_get_scope(
+ RtemsTaskReqConstructErrors_PreDesc,
+ buf,
+ n,
+ ctx->pcs
+ );
+ }
+
+ return 0;
+}
+
+static T_fixture RtemsTaskReqConstructErrors_Fixture = {
+ .setup = RtemsTaskReqConstructErrors_Setup_Wrap,
+ .stop = NULL,
+ .teardown = RtemsTaskReqConstructErrors_Teardown_Wrap,
+ .scope = RtemsTaskReqConstructErrors_Scope,
+ .initial_context = &RtemsTaskReqConstructErrors_Instance
+};
+
+static const uint8_t RtemsTaskReqConstructErrors_TransitionMap[][ 1 ] = {
+ {
+ RtemsTaskReqConstructErrors_Post_Status_Ok
+ }, {
+#if defined(RTEMS_SMP)
+ RtemsTaskReqConstructErrors_Post_Status_Unsatisfied
+#else
+ RtemsTaskReqConstructErrors_Post_Status_Ok
+#endif
+ }, {
+ RtemsTaskReqConstructErrors_Post_Status_Unsatisfied
+ }, {
+ RtemsTaskReqConstructErrors_Post_Status_Unsatisfied
+ }, {
+ RtemsTaskReqConstructErrors_Post_Status_InvSize
+ }, {
+ RtemsTaskReqConstructErrors_Post_Status_InvSize
+ }, {
+ RtemsTaskReqConstructErrors_Post_Status_InvSize
+ }, {
+ RtemsTaskReqConstructErrors_Post_Status_InvSize
+ }, {
+ RtemsTaskReqConstructErrors_Post_Status_InvSize
+ }, {
+ RtemsTaskReqConstructErrors_Post_Status_InvSize
+ }, {
+ RtemsTaskReqConstructErrors_Post_Status_InvSize
+ }, {
+ RtemsTaskReqConstructErrors_Post_Status_InvSize
+ }, {
+ RtemsTaskReqConstructErrors_Post_Status_InvSize
+ }, {
+ RtemsTaskReqConstructErrors_Post_Status_InvSize
+ }, {
+ RtemsTaskReqConstructErrors_Post_Status_InvSize
+ }, {
+ RtemsTaskReqConstructErrors_Post_Status_InvSize
+ }, {
+ RtemsTaskReqConstructErrors_Post_Status_TooMany
+ }, {
+ RtemsTaskReqConstructErrors_Post_Status_TooMany
+ }, {
+ RtemsTaskReqConstructErrors_Post_Status_TooMany
+ }, {
+ RtemsTaskReqConstructErrors_Post_Status_TooMany
+ }, {
+ RtemsTaskReqConstructErrors_Post_Status_TooMany
+ }, {
+ RtemsTaskReqConstructErrors_Post_Status_TooMany
+ }, {
+ RtemsTaskReqConstructErrors_Post_Status_TooMany
+ }, {
+ RtemsTaskReqConstructErrors_Post_Status_TooMany
+ }, {
+ RtemsTaskReqConstructErrors_Post_Status_TooMany
+ }, {
+ RtemsTaskReqConstructErrors_Post_Status_TooMany
+ }, {
+ RtemsTaskReqConstructErrors_Post_Status_TooMany
+ }, {
+ RtemsTaskReqConstructErrors_Post_Status_TooMany
+ }, {
+ RtemsTaskReqConstructErrors_Post_Status_TooMany
+ }, {
+ RtemsTaskReqConstructErrors_Post_Status_TooMany
+ }, {
+ RtemsTaskReqConstructErrors_Post_Status_TooMany
+ }, {
+ RtemsTaskReqConstructErrors_Post_Status_TooMany
+ }, {
+ RtemsTaskReqConstructErrors_Post_Status_InvPrio
+ }, {
+ RtemsTaskReqConstructErrors_Post_Status_InvPrio
+ }, {
+ RtemsTaskReqConstructErrors_Post_Status_InvPrio
+ }, {
+ RtemsTaskReqConstructErrors_Post_Status_InvPrio
+ }, {
+ RtemsTaskReqConstructErrors_Post_Status_InvPrio
+ }, {
+ RtemsTaskReqConstructErrors_Post_Status_InvPrio
+ }, {
+ RtemsTaskReqConstructErrors_Post_Status_InvPrio
+ }, {
+ RtemsTaskReqConstructErrors_Post_Status_InvPrio
+ }, {
+ RtemsTaskReqConstructErrors_Post_Status_InvPrio
+ }, {
+ RtemsTaskReqConstructErrors_Post_Status_InvPrio
+ }, {
+ RtemsTaskReqConstructErrors_Post_Status_InvPrio
+ }, {
+ RtemsTaskReqConstructErrors_Post_Status_InvPrio
+ }, {
+ RtemsTaskReqConstructErrors_Post_Status_InvPrio
+ }, {
+ RtemsTaskReqConstructErrors_Post_Status_InvPrio
+ }, {
+ RtemsTaskReqConstructErrors_Post_Status_InvPrio
+ }, {
+ RtemsTaskReqConstructErrors_Post_Status_InvPrio
+ }, {
+ RtemsTaskReqConstructErrors_Post_Status_InvPrio
+ }, {
+ RtemsTaskReqConstructErrors_Post_Status_InvPrio
+ }, {
+ RtemsTaskReqConstructErrors_Post_Status_InvPrio
+ }, {
+ RtemsTaskReqConstructErrors_Post_Status_InvPrio
+ }, {
+ RtemsTaskReqConstructErrors_Post_Status_InvPrio
+ }, {
+ RtemsTaskReqConstructErrors_Post_Status_InvPrio
+ }, {
+ RtemsTaskReqConstructErrors_Post_Status_InvPrio
+ }, {
+ RtemsTaskReqConstructErrors_Post_Status_InvPrio
+ }, {
+ RtemsTaskReqConstructErrors_Post_Status_InvPrio
+ }, {
+ RtemsTaskReqConstructErrors_Post_Status_InvPrio
+ }, {
+ RtemsTaskReqConstructErrors_Post_Status_InvPrio
+ }, {
+ RtemsTaskReqConstructErrors_Post_Status_InvPrio
+ }, {
+ RtemsTaskReqConstructErrors_Post_Status_InvPrio
+ }, {
+ RtemsTaskReqConstructErrors_Post_Status_InvPrio
+ }, {
+ RtemsTaskReqConstructErrors_Post_Status_InvPrio
+ }, {
+ RtemsTaskReqConstructErrors_Post_Status_InvPrio
+ }, {
+ RtemsTaskReqConstructErrors_Post_Status_InvPrio
+ }, {
+ RtemsTaskReqConstructErrors_Post_Status_InvPrio
+ }, {
+ RtemsTaskReqConstructErrors_Post_Status_InvPrio
+ }, {
+ RtemsTaskReqConstructErrors_Post_Status_InvPrio
+ }, {
+ RtemsTaskReqConstructErrors_Post_Status_InvPrio
+ }, {
+ RtemsTaskReqConstructErrors_Post_Status_InvPrio
+ }, {
+ RtemsTaskReqConstructErrors_Post_Status_InvPrio
+ }, {
+ RtemsTaskReqConstructErrors_Post_Status_InvPrio
+ }, {
+ RtemsTaskReqConstructErrors_Post_Status_InvPrio
+ }, {
+ RtemsTaskReqConstructErrors_Post_Status_InvPrio
+ }, {
+ RtemsTaskReqConstructErrors_Post_Status_InvPrio
+ }, {
+ RtemsTaskReqConstructErrors_Post_Status_InvPrio
+ }, {
+ RtemsTaskReqConstructErrors_Post_Status_InvPrio
+ }, {
+ RtemsTaskReqConstructErrors_Post_Status_InvPrio
+ }, {
+ RtemsTaskReqConstructErrors_Post_Status_InvPrio
+ }, {
+ RtemsTaskReqConstructErrors_Post_Status_InvPrio
+ }, {
+ RtemsTaskReqConstructErrors_Post_Status_InvPrio
+ }, {
+ RtemsTaskReqConstructErrors_Post_Status_InvPrio
+ }, {
+ RtemsTaskReqConstructErrors_Post_Status_InvPrio
+ }, {
+ RtemsTaskReqConstructErrors_Post_Status_InvPrio
+ }, {
+ RtemsTaskReqConstructErrors_Post_Status_InvPrio
+ }, {
+ RtemsTaskReqConstructErrors_Post_Status_InvPrio
+ }, {
+ RtemsTaskReqConstructErrors_Post_Status_InvPrio
+ }, {
+ RtemsTaskReqConstructErrors_Post_Status_InvPrio
+ }, {
+ RtemsTaskReqConstructErrors_Post_Status_InvPrio
+ }, {
+ RtemsTaskReqConstructErrors_Post_Status_InvPrio
+ }, {
+ RtemsTaskReqConstructErrors_Post_Status_InvPrio
+ }, {
+ RtemsTaskReqConstructErrors_Post_Status_InvPrio
+ }, {
+ RtemsTaskReqConstructErrors_Post_Status_InvPrio
+ }, {
+ RtemsTaskReqConstructErrors_Post_Status_InvPrio
+ }, {
+ RtemsTaskReqConstructErrors_Post_Status_InvPrio
+ }, {
+ RtemsTaskReqConstructErrors_Post_Status_InvPrio
+ }, {
+ RtemsTaskReqConstructErrors_Post_Status_InvName
+ }, {
+ RtemsTaskReqConstructErrors_Post_Status_InvName
+ }, {
+ RtemsTaskReqConstructErrors_Post_Status_InvName
+ }, {
+ RtemsTaskReqConstructErrors_Post_Status_InvName
+ }, {
+ RtemsTaskReqConstructErrors_Post_Status_InvName
+ }, {
+ RtemsTaskReqConstructErrors_Post_Status_InvName
+ }, {
+ RtemsTaskReqConstructErrors_Post_Status_InvName
+ }, {
+ RtemsTaskReqConstructErrors_Post_Status_InvName
+ }, {
+ RtemsTaskReqConstructErrors_Post_Status_InvName
+ }, {
+ RtemsTaskReqConstructErrors_Post_Status_InvName
+ }, {
+ RtemsTaskReqConstructErrors_Post_Status_InvName
+ }, {
+ RtemsTaskReqConstructErrors_Post_Status_InvName
+ }, {
+ RtemsTaskReqConstructErrors_Post_Status_InvName
+ }, {
+ RtemsTaskReqConstructErrors_Post_Status_InvName
+ }, {
+ RtemsTaskReqConstructErrors_Post_Status_InvName
+ }, {
+ RtemsTaskReqConstructErrors_Post_Status_InvName
+ }, {
+ RtemsTaskReqConstructErrors_Post_Status_InvName
+ }, {
+ RtemsTaskReqConstructErrors_Post_Status_InvName
+ }, {
+ RtemsTaskReqConstructErrors_Post_Status_InvName
+ }, {
+ RtemsTaskReqConstructErrors_Post_Status_InvName
+ }, {
+ RtemsTaskReqConstructErrors_Post_Status_InvName
+ }, {
+ RtemsTaskReqConstructErrors_Post_Status_InvName
+ }, {
+ RtemsTaskReqConstructErrors_Post_Status_InvName
+ }, {
+ RtemsTaskReqConstructErrors_Post_Status_InvName
+ }, {
+ RtemsTaskReqConstructErrors_Post_Status_InvName
+ }, {
+ RtemsTaskReqConstructErrors_Post_Status_InvName
+ }, {
+ RtemsTaskReqConstructErrors_Post_Status_InvName
+ }, {
+ RtemsTaskReqConstructErrors_Post_Status_InvName
+ }, {
+ RtemsTaskReqConstructErrors_Post_Status_InvName
+ }, {
+ RtemsTaskReqConstructErrors_Post_Status_InvName
+ }, {
+ RtemsTaskReqConstructErrors_Post_Status_InvName
+ }, {
+ RtemsTaskReqConstructErrors_Post_Status_InvName
+ }, {
+ RtemsTaskReqConstructErrors_Post_Status_InvName
+ }, {
+ RtemsTaskReqConstructErrors_Post_Status_InvName
+ }, {
+ RtemsTaskReqConstructErrors_Post_Status_InvName
+ }, {
+ RtemsTaskReqConstructErrors_Post_Status_InvName
+ }, {
+ RtemsTaskReqConstructErrors_Post_Status_InvName
+ }, {
+ RtemsTaskReqConstructErrors_Post_Status_InvName
+ }, {
+ RtemsTaskReqConstructErrors_Post_Status_InvName
+ }, {
+ RtemsTaskReqConstructErrors_Post_Status_InvName
+ }, {
+ RtemsTaskReqConstructErrors_Post_Status_InvName
+ }, {
+ RtemsTaskReqConstructErrors_Post_Status_InvName
+ }, {
+ RtemsTaskReqConstructErrors_Post_Status_InvName
+ }, {
+ RtemsTaskReqConstructErrors_Post_Status_InvName
+ }, {
+ RtemsTaskReqConstructErrors_Post_Status_InvName
+ }, {
+ RtemsTaskReqConstructErrors_Post_Status_InvName
+ }, {
+ RtemsTaskReqConstructErrors_Post_Status_InvName
+ }, {
+ RtemsTaskReqConstructErrors_Post_Status_InvName
+ }, {
+ RtemsTaskReqConstructErrors_Post_Status_InvName
+ }, {
+ RtemsTaskReqConstructErrors_Post_Status_InvName
+ }, {
+ RtemsTaskReqConstructErrors_Post_Status_InvName
+ }, {
+ RtemsTaskReqConstructErrors_Post_Status_InvName
+ }, {
+ RtemsTaskReqConstructErrors_Post_Status_InvName
+ }, {
+ RtemsTaskReqConstructErrors_Post_Status_InvName
+ }, {
+ RtemsTaskReqConstructErrors_Post_Status_InvName
+ }, {
+ RtemsTaskReqConstructErrors_Post_Status_InvName
+ }, {
+ RtemsTaskReqConstructErrors_Post_Status_InvName
+ }, {
+ RtemsTaskReqConstructErrors_Post_Status_InvName
+ }, {
+ RtemsTaskReqConstructErrors_Post_Status_InvName
+ }, {
+ RtemsTaskReqConstructErrors_Post_Status_InvName
+ }, {
+ RtemsTaskReqConstructErrors_Post_Status_InvName
+ }, {
+ RtemsTaskReqConstructErrors_Post_Status_InvName
+ }, {
+ RtemsTaskReqConstructErrors_Post_Status_InvName
+ }, {
+ RtemsTaskReqConstructErrors_Post_Status_InvName
+ }, {
+ RtemsTaskReqConstructErrors_Post_Status_InvName
+ }, {
+ RtemsTaskReqConstructErrors_Post_Status_InvName
+ }, {
+ RtemsTaskReqConstructErrors_Post_Status_InvName
+ }, {
+ RtemsTaskReqConstructErrors_Post_Status_InvName
+ }, {
+ RtemsTaskReqConstructErrors_Post_Status_InvName
+ }, {
+ RtemsTaskReqConstructErrors_Post_Status_InvName
+ }, {
+ RtemsTaskReqConstructErrors_Post_Status_InvName
+ }, {
+ RtemsTaskReqConstructErrors_Post_Status_InvName
+ }, {
+ RtemsTaskReqConstructErrors_Post_Status_InvName
+ }, {
+ RtemsTaskReqConstructErrors_Post_Status_InvName
+ }, {
+ RtemsTaskReqConstructErrors_Post_Status_InvName
+ }, {
+ RtemsTaskReqConstructErrors_Post_Status_InvName
+ }, {
+ RtemsTaskReqConstructErrors_Post_Status_InvName
+ }, {
+ RtemsTaskReqConstructErrors_Post_Status_InvName
+ }, {
+ RtemsTaskReqConstructErrors_Post_Status_InvName
+ }, {
+ RtemsTaskReqConstructErrors_Post_Status_InvName
+ }, {
+ RtemsTaskReqConstructErrors_Post_Status_InvName
+ }, {
+ RtemsTaskReqConstructErrors_Post_Status_InvName
+ }, {
+ RtemsTaskReqConstructErrors_Post_Status_InvName
+ }, {
+ RtemsTaskReqConstructErrors_Post_Status_InvName
+ }, {
+ RtemsTaskReqConstructErrors_Post_Status_InvName
+ }, {
+ RtemsTaskReqConstructErrors_Post_Status_InvName
+ }, {
+ RtemsTaskReqConstructErrors_Post_Status_InvName
+ }, {
+ RtemsTaskReqConstructErrors_Post_Status_InvName
+ }, {
+ RtemsTaskReqConstructErrors_Post_Status_InvName
+ }, {
+ RtemsTaskReqConstructErrors_Post_Status_InvName
+ }, {
+ RtemsTaskReqConstructErrors_Post_Status_InvName
+ }, {
+ RtemsTaskReqConstructErrors_Post_Status_InvName
+ }, {
+ RtemsTaskReqConstructErrors_Post_Status_InvName
+ }, {
+ RtemsTaskReqConstructErrors_Post_Status_InvName
+ }, {
+ RtemsTaskReqConstructErrors_Post_Status_InvName
+ }, {
+ RtemsTaskReqConstructErrors_Post_Status_InvName
+ }, {
+ RtemsTaskReqConstructErrors_Post_Status_InvAddress
+ }, {
+ RtemsTaskReqConstructErrors_Post_Status_InvAddress
+ }, {
+ RtemsTaskReqConstructErrors_Post_Status_InvAddress
+ }, {
+ RtemsTaskReqConstructErrors_Post_Status_InvAddress
+ }, {
+ RtemsTaskReqConstructErrors_Post_Status_InvAddress
+ }, {
+ RtemsTaskReqConstructErrors_Post_Status_InvAddress
+ }, {
+ RtemsTaskReqConstructErrors_Post_Status_InvAddress
+ }, {
+ RtemsTaskReqConstructErrors_Post_Status_InvAddress
+ }, {
+ RtemsTaskReqConstructErrors_Post_Status_InvAddress
+ }, {
+ RtemsTaskReqConstructErrors_Post_Status_InvAddress
+ }, {
+ RtemsTaskReqConstructErrors_Post_Status_InvAddress
+ }, {
+ RtemsTaskReqConstructErrors_Post_Status_InvAddress
+ }, {
+ RtemsTaskReqConstructErrors_Post_Status_InvAddress
+ }, {
+ RtemsTaskReqConstructErrors_Post_Status_InvAddress
+ }, {
+ RtemsTaskReqConstructErrors_Post_Status_InvAddress
+ }, {
+ RtemsTaskReqConstructErrors_Post_Status_InvAddress
+ }, {
+ RtemsTaskReqConstructErrors_Post_Status_InvAddress
+ }, {
+ RtemsTaskReqConstructErrors_Post_Status_InvAddress
+ }, {
+ RtemsTaskReqConstructErrors_Post_Status_InvAddress
+ }, {
+ RtemsTaskReqConstructErrors_Post_Status_InvAddress
+ }, {
+ RtemsTaskReqConstructErrors_Post_Status_InvAddress
+ }, {
+ RtemsTaskReqConstructErrors_Post_Status_InvAddress
+ }, {
+ RtemsTaskReqConstructErrors_Post_Status_InvAddress
+ }, {
+ RtemsTaskReqConstructErrors_Post_Status_InvAddress
+ }, {
+ RtemsTaskReqConstructErrors_Post_Status_InvAddress
+ }, {
+ RtemsTaskReqConstructErrors_Post_Status_InvAddress
+ }, {
+ RtemsTaskReqConstructErrors_Post_Status_InvAddress
+ }, {
+ RtemsTaskReqConstructErrors_Post_Status_InvAddress
+ }, {
+ RtemsTaskReqConstructErrors_Post_Status_InvAddress
+ }, {
+ RtemsTaskReqConstructErrors_Post_Status_InvAddress
+ }, {
+ RtemsTaskReqConstructErrors_Post_Status_InvAddress
+ }, {
+ RtemsTaskReqConstructErrors_Post_Status_InvAddress
+ }, {
+ RtemsTaskReqConstructErrors_Post_Status_InvAddress
+ }, {
+ RtemsTaskReqConstructErrors_Post_Status_InvAddress
+ }, {
+ RtemsTaskReqConstructErrors_Post_Status_InvAddress
+ }, {
+ RtemsTaskReqConstructErrors_Post_Status_InvAddress
+ }, {
+ RtemsTaskReqConstructErrors_Post_Status_InvAddress
+ }, {
+ RtemsTaskReqConstructErrors_Post_Status_InvAddress
+ }, {
+ RtemsTaskReqConstructErrors_Post_Status_InvAddress
+ }, {
+ RtemsTaskReqConstructErrors_Post_Status_InvAddress
+ }, {
+ RtemsTaskReqConstructErrors_Post_Status_InvAddress
+ }, {
+ RtemsTaskReqConstructErrors_Post_Status_InvAddress
+ }, {
+ RtemsTaskReqConstructErrors_Post_Status_InvAddress
+ }, {
+ RtemsTaskReqConstructErrors_Post_Status_InvAddress
+ }, {
+ RtemsTaskReqConstructErrors_Post_Status_InvAddress
+ }, {
+ RtemsTaskReqConstructErrors_Post_Status_InvAddress
+ }, {
+ RtemsTaskReqConstructErrors_Post_Status_InvAddress
+ }, {
+ RtemsTaskReqConstructErrors_Post_Status_InvAddress
+ }, {
+ RtemsTaskReqConstructErrors_Post_Status_InvAddress
+ }, {
+ RtemsTaskReqConstructErrors_Post_Status_InvAddress
+ }, {
+ RtemsTaskReqConstructErrors_Post_Status_InvAddress
+ }, {
+ RtemsTaskReqConstructErrors_Post_Status_InvAddress
+ }, {
+ RtemsTaskReqConstructErrors_Post_Status_InvAddress
+ }, {
+ RtemsTaskReqConstructErrors_Post_Status_InvAddress
+ }, {
+ RtemsTaskReqConstructErrors_Post_Status_InvAddress
+ }, {
+ RtemsTaskReqConstructErrors_Post_Status_InvAddress
+ }, {
+ RtemsTaskReqConstructErrors_Post_Status_InvAddress
+ }, {
+ RtemsTaskReqConstructErrors_Post_Status_InvAddress
+ }, {
+ RtemsTaskReqConstructErrors_Post_Status_InvAddress
+ }, {
+ RtemsTaskReqConstructErrors_Post_Status_InvAddress
+ }, {
+ RtemsTaskReqConstructErrors_Post_Status_InvAddress
+ }, {
+ RtemsTaskReqConstructErrors_Post_Status_InvAddress
+ }, {
+ RtemsTaskReqConstructErrors_Post_Status_InvAddress
+ }, {
+ RtemsTaskReqConstructErrors_Post_Status_InvAddress
+ }, {
+ RtemsTaskReqConstructErrors_Post_Status_InvAddress
+ }, {
+ RtemsTaskReqConstructErrors_Post_Status_InvAddress
+ }, {
+ RtemsTaskReqConstructErrors_Post_Status_InvAddress
+ }, {
+ RtemsTaskReqConstructErrors_Post_Status_InvAddress
+ }, {
+ RtemsTaskReqConstructErrors_Post_Status_InvAddress
+ }, {
+ RtemsTaskReqConstructErrors_Post_Status_InvAddress
+ }, {
+ RtemsTaskReqConstructErrors_Post_Status_InvAddress
+ }, {
+ RtemsTaskReqConstructErrors_Post_Status_InvAddress
+ }, {
+ RtemsTaskReqConstructErrors_Post_Status_InvAddress
+ }, {
+ RtemsTaskReqConstructErrors_Post_Status_InvAddress
+ }, {
+ RtemsTaskReqConstructErrors_Post_Status_InvAddress
+ }, {
+ RtemsTaskReqConstructErrors_Post_Status_InvAddress
+ }, {
+ RtemsTaskReqConstructErrors_Post_Status_InvAddress
+ }, {
+ RtemsTaskReqConstructErrors_Post_Status_InvAddress
+ }, {
+ RtemsTaskReqConstructErrors_Post_Status_InvAddress
+ }, {
+ RtemsTaskReqConstructErrors_Post_Status_InvAddress
+ }, {
+ RtemsTaskReqConstructErrors_Post_Status_InvAddress
+ }, {
+ RtemsTaskReqConstructErrors_Post_Status_InvAddress
+ }, {
+ RtemsTaskReqConstructErrors_Post_Status_InvAddress
+ }, {
+ RtemsTaskReqConstructErrors_Post_Status_InvAddress
+ }, {
+ RtemsTaskReqConstructErrors_Post_Status_InvAddress
+ }, {
+ RtemsTaskReqConstructErrors_Post_Status_InvAddress
+ }, {
+ RtemsTaskReqConstructErrors_Post_Status_InvAddress
+ }, {
+ RtemsTaskReqConstructErrors_Post_Status_InvAddress
+ }, {
+ RtemsTaskReqConstructErrors_Post_Status_InvAddress
+ }, {
+ RtemsTaskReqConstructErrors_Post_Status_InvAddress
+ }, {
+ RtemsTaskReqConstructErrors_Post_Status_InvAddress
+ }, {
+ RtemsTaskReqConstructErrors_Post_Status_InvAddress
+ }, {
+ RtemsTaskReqConstructErrors_Post_Status_InvAddress
+ }, {
+ RtemsTaskReqConstructErrors_Post_Status_InvAddress
+ }, {
+ RtemsTaskReqConstructErrors_Post_Status_InvAddress
+ }, {
+ RtemsTaskReqConstructErrors_Post_Status_InvAddress
+ }, {
+ RtemsTaskReqConstructErrors_Post_Status_InvAddress
+ }, {
+ RtemsTaskReqConstructErrors_Post_Status_InvAddress
+ }, {
+ RtemsTaskReqConstructErrors_Post_Status_InvAddress
+ }, {
+ RtemsTaskReqConstructErrors_Post_Status_InvAddress
+ }, {
+ RtemsTaskReqConstructErrors_Post_Status_InvAddress
+ }, {
+ RtemsTaskReqConstructErrors_Post_Status_InvAddress
+ }, {
+ RtemsTaskReqConstructErrors_Post_Status_InvAddress
+ }, {
+ RtemsTaskReqConstructErrors_Post_Status_InvAddress
+ }, {
+ RtemsTaskReqConstructErrors_Post_Status_InvAddress
+ }, {
+ RtemsTaskReqConstructErrors_Post_Status_InvAddress
+ }, {
+ RtemsTaskReqConstructErrors_Post_Status_InvAddress
+ }, {
+ RtemsTaskReqConstructErrors_Post_Status_InvAddress
+ }, {
+ RtemsTaskReqConstructErrors_Post_Status_InvAddress
+ }, {
+ RtemsTaskReqConstructErrors_Post_Status_InvAddress
+ }, {
+ RtemsTaskReqConstructErrors_Post_Status_InvAddress
+ }, {
+ RtemsTaskReqConstructErrors_Post_Status_InvAddress
+ }, {
+ RtemsTaskReqConstructErrors_Post_Status_InvAddress
+ }, {
+ RtemsTaskReqConstructErrors_Post_Status_InvAddress
+ }, {
+ RtemsTaskReqConstructErrors_Post_Status_InvAddress
+ }, {
+ RtemsTaskReqConstructErrors_Post_Status_InvAddress
+ }, {
+ RtemsTaskReqConstructErrors_Post_Status_InvAddress
+ }, {
+ RtemsTaskReqConstructErrors_Post_Status_InvAddress
+ }, {
+ RtemsTaskReqConstructErrors_Post_Status_InvAddress
+ }, {
+ RtemsTaskReqConstructErrors_Post_Status_InvAddress
+ }, {
+ RtemsTaskReqConstructErrors_Post_Status_InvAddress
+ }, {
+ RtemsTaskReqConstructErrors_Post_Status_InvAddress
+ }, {
+ RtemsTaskReqConstructErrors_Post_Status_InvAddress
+ }, {
+ RtemsTaskReqConstructErrors_Post_Status_InvAddress
+ }, {
+ RtemsTaskReqConstructErrors_Post_Status_InvAddress
+ }, {
+ RtemsTaskReqConstructErrors_Post_Status_InvAddress
+ }, {
+ RtemsTaskReqConstructErrors_Post_Status_InvAddress
+ }, {
+ RtemsTaskReqConstructErrors_Post_Status_InvAddress
+ }, {
+ RtemsTaskReqConstructErrors_Post_Status_InvAddress
+ }, {
+ RtemsTaskReqConstructErrors_Post_Status_InvAddress
+ }, {
+ RtemsTaskReqConstructErrors_Post_Status_InvAddress
+ }, {
+ RtemsTaskReqConstructErrors_Post_Status_InvAddress
+ }, {
+ RtemsTaskReqConstructErrors_Post_Status_InvAddress
+ }, {
+ RtemsTaskReqConstructErrors_Post_Status_InvAddress
+ }, {
+ RtemsTaskReqConstructErrors_Post_Status_InvAddress
+ }, {
+ RtemsTaskReqConstructErrors_Post_Status_InvAddress
+ }, {
+ RtemsTaskReqConstructErrors_Post_Status_InvAddress
+ }, {
+ RtemsTaskReqConstructErrors_Post_Status_InvAddress
+ }, {
+ RtemsTaskReqConstructErrors_Post_Status_InvAddress
+ }, {
+ RtemsTaskReqConstructErrors_Post_Status_InvAddress
+ }, {
+ RtemsTaskReqConstructErrors_Post_Status_InvAddress
+ }, {
+ RtemsTaskReqConstructErrors_Post_Status_InvAddress
+ }, {
+ RtemsTaskReqConstructErrors_Post_Status_InvAddress
+ }, {
+ RtemsTaskReqConstructErrors_Post_Status_InvAddress
+ }, {
+ RtemsTaskReqConstructErrors_Post_Status_InvAddress
+ }, {
+ RtemsTaskReqConstructErrors_Post_Status_InvAddress
+ }, {
+ RtemsTaskReqConstructErrors_Post_Status_InvAddress
+ }, {
+ RtemsTaskReqConstructErrors_Post_Status_InvAddress
+ }, {
+ RtemsTaskReqConstructErrors_Post_Status_InvAddress
+ }, {
+ RtemsTaskReqConstructErrors_Post_Status_InvAddress
+ }, {
+ RtemsTaskReqConstructErrors_Post_Status_InvAddress
+ }, {
+ RtemsTaskReqConstructErrors_Post_Status_InvAddress
+ }, {
+ RtemsTaskReqConstructErrors_Post_Status_InvAddress
+ }, {
+ RtemsTaskReqConstructErrors_Post_Status_InvAddress
+ }, {
+ RtemsTaskReqConstructErrors_Post_Status_InvAddress
+ }, {
+ RtemsTaskReqConstructErrors_Post_Status_InvAddress
+ }, {
+ RtemsTaskReqConstructErrors_Post_Status_InvAddress
+ }, {
+ RtemsTaskReqConstructErrors_Post_Status_InvAddress
+ }, {
+ RtemsTaskReqConstructErrors_Post_Status_InvAddress
+ }, {
+ RtemsTaskReqConstructErrors_Post_Status_InvAddress
+ }, {
+ RtemsTaskReqConstructErrors_Post_Status_InvAddress
+ }, {
+ RtemsTaskReqConstructErrors_Post_Status_InvAddress
+ }, {
+ RtemsTaskReqConstructErrors_Post_Status_InvAddress
+ }, {
+ RtemsTaskReqConstructErrors_Post_Status_InvAddress
+ }, {
+ RtemsTaskReqConstructErrors_Post_Status_InvAddress
+ }, {
+ RtemsTaskReqConstructErrors_Post_Status_InvAddress
+ }, {
+ RtemsTaskReqConstructErrors_Post_Status_InvAddress
+ }, {
+ RtemsTaskReqConstructErrors_Post_Status_InvAddress
+ }, {
+ RtemsTaskReqConstructErrors_Post_Status_InvAddress
+ }, {
+ RtemsTaskReqConstructErrors_Post_Status_InvAddress
+ }, {
+ RtemsTaskReqConstructErrors_Post_Status_InvAddress
+ }, {
+ RtemsTaskReqConstructErrors_Post_Status_InvAddress
+ }, {
+ RtemsTaskReqConstructErrors_Post_Status_InvAddress
+ }, {
+ RtemsTaskReqConstructErrors_Post_Status_InvAddress
+ }, {
+ RtemsTaskReqConstructErrors_Post_Status_InvAddress
+ }, {
+ RtemsTaskReqConstructErrors_Post_Status_InvAddress
+ }, {
+ RtemsTaskReqConstructErrors_Post_Status_InvAddress
+ }, {
+ RtemsTaskReqConstructErrors_Post_Status_InvAddress
+ }, {
+ RtemsTaskReqConstructErrors_Post_Status_InvAddress
+ }, {
+ RtemsTaskReqConstructErrors_Post_Status_InvAddress
+ }, {
+ RtemsTaskReqConstructErrors_Post_Status_InvAddress
+ }, {
+ RtemsTaskReqConstructErrors_Post_Status_InvAddress
+ }, {
+ RtemsTaskReqConstructErrors_Post_Status_InvAddress
+ }, {
+ RtemsTaskReqConstructErrors_Post_Status_InvAddress
+ }, {
+ RtemsTaskReqConstructErrors_Post_Status_InvAddress
+ }, {
+ RtemsTaskReqConstructErrors_Post_Status_InvAddress
+ }, {
+ RtemsTaskReqConstructErrors_Post_Status_InvAddress
+ }, {
+ RtemsTaskReqConstructErrors_Post_Status_InvAddress
+ }, {
+ RtemsTaskReqConstructErrors_Post_Status_InvAddress
+ }, {
+ RtemsTaskReqConstructErrors_Post_Status_InvAddress
+ }, {
+ RtemsTaskReqConstructErrors_Post_Status_InvAddress
+ }, {
+ RtemsTaskReqConstructErrors_Post_Status_InvAddress
+ }
+};
+
+static const struct {
+ uint16_t Skip : 1;
+ uint16_t Pre_Id_NA : 1;
+ uint16_t Pre_Name_NA : 1;
+ uint16_t Pre_Prio_NA : 1;
+ uint16_t Pre_Tasks_NA : 1;
+ uint16_t Pre_TLS_NA : 1;
+ uint16_t Pre_Stack_NA : 1;
+ uint16_t Pre_Ext_NA : 1;
+ uint16_t Pre_Preempt_NA : 1;
+} RtemsTaskReqConstructErrors_TransitionInfo[] = {
+ {
+ 0, 0, 0, 0, 0, 0, 0, 0, 0
+ }, {
+#if defined(RTEMS_SMP)
+ 0, 0, 0, 0, 0, 0, 0, 0, 0
+#else
+ 0, 0, 0, 0, 0, 0, 0, 0, 0
+#endif
+ }, {
+ 0, 0, 0, 0, 0, 0, 0, 0, 0
+ }, {
+ 0, 0, 0, 0, 0, 0, 0, 0, 0
+ }, {
+ 0, 0, 0, 0, 0, 0, 0, 0, 0
+ }, {
+ 0, 0, 0, 0, 0, 0, 0, 0, 0
+ }, {
+ 0, 0, 0, 0, 0, 0, 0, 0, 0
+ }, {
+ 0, 0, 0, 0, 0, 0, 0, 0, 0
+ }, {
+ 0, 0, 0, 0, 0, 0, 0, 0, 0
+ }, {
+ 0, 0, 0, 0, 0, 0, 0, 0, 0
+ }, {
+ 0, 0, 0, 0, 0, 0, 0, 0, 0
+ }, {
+ 0, 0, 0, 0, 0, 0, 0, 0, 0
+ }, {
+ 0, 0, 0, 0, 0, 0, 0, 0, 0
+ }, {
+ 0, 0, 0, 0, 0, 0, 0, 0, 0
+ }, {
+ 0, 0, 0, 0, 0, 0, 0, 0, 0
+ }, {
+ 0, 0, 0, 0, 0, 0, 0, 0, 0
+ }, {
+ 0, 0, 0, 0, 0, 0, 0, 0, 0
+ }, {
+ 0, 0, 0, 0, 0, 0, 0, 0, 0
+ }, {
+ 0, 0, 0, 0, 0, 0, 0, 0, 0
+ }, {
+ 0, 0, 0, 0, 0, 0, 0, 0, 0
+ }, {
+ 0, 0, 0, 0, 0, 0, 0, 0, 0
+ }, {
+ 0, 0, 0, 0, 0, 0, 0, 0, 0
+ }, {
+ 0, 0, 0, 0, 0, 0, 0, 0, 0
+ }, {
+ 0, 0, 0, 0, 0, 0, 0, 0, 0
+ }, {
+ 0, 0, 0, 0, 0, 0, 0, 0, 0
+ }, {
+ 0, 0, 0, 0, 0, 0, 0, 0, 0
+ }, {
+ 0, 0, 0, 0, 0, 0, 0, 0, 0
+ }, {
+ 0, 0, 0, 0, 0, 0, 0, 0, 0
+ }, {
+ 0, 0, 0, 0, 0, 0, 0, 0, 0
+ }, {
+ 0, 0, 0, 0, 0, 0, 0, 0, 0
+ }, {
+ 0, 0, 0, 0, 0, 0, 0, 0, 0
+ }, {
+ 0, 0, 0, 0, 0, 0, 0, 0, 0
+ }, {
+ 0, 0, 0, 0, 0, 0, 0, 0, 0
+ }, {
+ 0, 0, 0, 0, 0, 0, 0, 0, 0
+ }, {
+ 0, 0, 0, 0, 0, 0, 0, 0, 0
+ }, {
+ 0, 0, 0, 0, 0, 0, 0, 0, 0
+ }, {
+ 0, 0, 0, 0, 0, 0, 0, 0, 0
+ }, {
+ 0, 0, 0, 0, 0, 0, 0, 0, 0
+ }, {
+ 0, 0, 0, 0, 0, 0, 0, 0, 0
+ }, {
+ 0, 0, 0, 0, 0, 0, 0, 0, 0
+ }, {
+ 0, 0, 0, 0, 0, 0, 0, 0, 0
+ }, {
+ 0, 0, 0, 0, 0, 0, 0, 0, 0
+ }, {
+ 0, 0, 0, 0, 0, 0, 0, 0, 0
+ }, {
+ 0, 0, 0, 0, 0, 0, 0, 0, 0
+ }, {
+ 0, 0, 0, 0, 0, 0, 0, 0, 0
+ }, {
+ 0, 0, 0, 0, 0, 0, 0, 0, 0
+ }, {
+ 0, 0, 0, 0, 0, 0, 0, 0, 0
+ }, {
+ 0, 0, 0, 0, 0, 0, 0, 0, 0
+ }, {
+ 0, 0, 0, 0, 0, 0, 0, 0, 0
+ }, {
+ 0, 0, 0, 0, 0, 0, 0, 0, 0
+ }, {
+ 0, 0, 0, 0, 0, 0, 0, 0, 0
+ }, {
+ 0, 0, 0, 0, 0, 0, 0, 0, 0
+ }, {
+ 0, 0, 0, 0, 0, 0, 0, 0, 0
+ }, {
+ 0, 0, 0, 0, 0, 0, 0, 0, 0
+ }, {
+ 0, 0, 0, 0, 0, 0, 0, 0, 0
+ }, {
+ 0, 0, 0, 0, 0, 0, 0, 0, 0
+ }, {
+ 0, 0, 0, 0, 0, 0, 0, 0, 0
+ }, {
+ 0, 0, 0, 0, 0, 0, 0, 0, 0
+ }, {
+ 0, 0, 0, 0, 0, 0, 0, 0, 0
+ }, {
+ 0, 0, 0, 0, 0, 0, 0, 0, 0
+ }, {
+ 0, 0, 0, 0, 0, 0, 0, 0, 0
+ }, {
+ 0, 0, 0, 0, 0, 0, 0, 0, 0
+ }, {
+ 0, 0, 0, 0, 0, 0, 0, 0, 0
+ }, {
+ 0, 0, 0, 0, 0, 0, 0, 0, 0
+ }, {
+ 0, 0, 0, 0, 0, 0, 0, 0, 0
+ }, {
+ 0, 0, 0, 0, 0, 0, 0, 0, 0
+ }, {
+ 0, 0, 0, 0, 0, 0, 0, 0, 0
+ }, {
+ 0, 0, 0, 0, 0, 0, 0, 0, 0
+ }, {
+ 0, 0, 0, 0, 0, 0, 0, 0, 0
+ }, {
+ 0, 0, 0, 0, 0, 0, 0, 0, 0
+ }, {
+ 0, 0, 0, 0, 0, 0, 0, 0, 0
+ }, {
+ 0, 0, 0, 0, 0, 0, 0, 0, 0
+ }, {
+ 0, 0, 0, 0, 0, 0, 0, 0, 0
+ }, {
+ 0, 0, 0, 0, 0, 0, 0, 0, 0
+ }, {
+ 0, 0, 0, 0, 0, 0, 0, 0, 0
+ }, {
+ 0, 0, 0, 0, 0, 0, 0, 0, 0
+ }, {
+ 0, 0, 0, 0, 0, 0, 0, 0, 0
+ }, {
+ 0, 0, 0, 0, 0, 0, 0, 0, 0
+ }, {
+ 0, 0, 0, 0, 0, 0, 0, 0, 0
+ }, {
+ 0, 0, 0, 0, 0, 0, 0, 0, 0
+ }, {
+ 0, 0, 0, 0, 0, 0, 0, 0, 0
+ }, {
+ 0, 0, 0, 0, 0, 0, 0, 0, 0
+ }, {
+ 0, 0, 0, 0, 0, 0, 0, 0, 0
+ }, {
+ 0, 0, 0, 0, 0, 0, 0, 0, 0
+ }, {
+ 0, 0, 0, 0, 0, 0, 0, 0, 0
+ }, {
+ 0, 0, 0, 0, 0, 0, 0, 0, 0
+ }, {
+ 0, 0, 0, 0, 0, 0, 0, 0, 0
+ }, {
+ 0, 0, 0, 0, 0, 0, 0, 0, 0
+ }, {
+ 0, 0, 0, 0, 0, 0, 0, 0, 0
+ }, {
+ 0, 0, 0, 0, 0, 0, 0, 0, 0
+ }, {
+ 0, 0, 0, 0, 0, 0, 0, 0, 0
+ }, {
+ 0, 0, 0, 0, 0, 0, 0, 0, 0
+ }, {
+ 0, 0, 0, 0, 0, 0, 0, 0, 0
+ }, {
+ 0, 0, 0, 0, 0, 0, 0, 0, 0
+ }, {
+ 0, 0, 0, 0, 0, 0, 0, 0, 0
+ }, {
+ 0, 0, 0, 0, 0, 0, 0, 0, 0
+ }, {
+ 0, 0, 0, 0, 0, 0, 0, 0, 0
+ }, {
+ 0, 0, 0, 0, 0, 0, 0, 0, 0
+ }, {
+ 0, 0, 0, 0, 0, 0, 0, 0, 0
+ }, {
+ 0, 0, 0, 0, 0, 0, 0, 0, 0
+ }, {
+ 0, 0, 0, 0, 0, 0, 0, 0, 0
+ }, {
+ 0, 0, 0, 0, 0, 0, 0, 0, 0
+ }, {
+ 0, 0, 0, 0, 0, 0, 0, 0, 0
+ }, {
+ 0, 0, 0, 0, 0, 0, 0, 0, 0
+ }, {
+ 0, 0, 0, 0, 0, 0, 0, 0, 0
+ }, {
+ 0, 0, 0, 0, 0, 0, 0, 0, 0
+ }, {
+ 0, 0, 0, 0, 0, 0, 0, 0, 0
+ }, {
+ 0, 0, 0, 0, 0, 0, 0, 0, 0
+ }, {
+ 0, 0, 0, 0, 0, 0, 0, 0, 0
+ }, {
+ 0, 0, 0, 0, 0, 0, 0, 0, 0
+ }, {
+ 0, 0, 0, 0, 0, 0, 0, 0, 0
+ }, {
+ 0, 0, 0, 0, 0, 0, 0, 0, 0
+ }, {
+ 0, 0, 0, 0, 0, 0, 0, 0, 0
+ }, {
+ 0, 0, 0, 0, 0, 0, 0, 0, 0
+ }, {
+ 0, 0, 0, 0, 0, 0, 0, 0, 0
+ }, {
+ 0, 0, 0, 0, 0, 0, 0, 0, 0
+ }, {
+ 0, 0, 0, 0, 0, 0, 0, 0, 0
+ }, {
+ 0, 0, 0, 0, 0, 0, 0, 0, 0
+ }, {
+ 0, 0, 0, 0, 0, 0, 0, 0, 0
+ }, {
+ 0, 0, 0, 0, 0, 0, 0, 0, 0
+ }, {
+ 0, 0, 0, 0, 0, 0, 0, 0, 0
+ }, {
+ 0, 0, 0, 0, 0, 0, 0, 0, 0
+ }, {
+ 0, 0, 0, 0, 0, 0, 0, 0, 0
+ }, {
+ 0, 0, 0, 0, 0, 0, 0, 0, 0
+ }, {
+ 0, 0, 0, 0, 0, 0, 0, 0, 0
+ }, {
+ 0, 0, 0, 0, 0, 0, 0, 0, 0
+ }, {
+ 0, 0, 0, 0, 0, 0, 0, 0, 0
+ }, {
+ 0, 0, 0, 0, 0, 0, 0, 0, 0
+ }, {
+ 0, 0, 0, 0, 0, 0, 0, 0, 0
+ }, {
+ 0, 0, 0, 0, 0, 0, 0, 0, 0
+ }, {
+ 0, 0, 0, 0, 0, 0, 0, 0, 0
+ }, {
+ 0, 0, 0, 0, 0, 0, 0, 0, 0
+ }, {
+ 0, 0, 0, 0, 0, 0, 0, 0, 0
+ }, {
+ 0, 0, 0, 0, 0, 0, 0, 0, 0
+ }, {
+ 0, 0, 0, 0, 0, 0, 0, 0, 0
+ }, {
+ 0, 0, 0, 0, 0, 0, 0, 0, 0
+ }, {
+ 0, 0, 0, 0, 0, 0, 0, 0, 0
+ }, {
+ 0, 0, 0, 0, 0, 0, 0, 0, 0
+ }, {
+ 0, 0, 0, 0, 0, 0, 0, 0, 0
+ }, {
+ 0, 0, 0, 0, 0, 0, 0, 0, 0
+ }, {
+ 0, 0, 0, 0, 0, 0, 0, 0, 0
+ }, {
+ 0, 0, 0, 0, 0, 0, 0, 0, 0
+ }, {
+ 0, 0, 0, 0, 0, 0, 0, 0, 0
+ }, {
+ 0, 0, 0, 0, 0, 0, 0, 0, 0
+ }, {
+ 0, 0, 0, 0, 0, 0, 0, 0, 0
+ }, {
+ 0, 0, 0, 0, 0, 0, 0, 0, 0
+ }, {
+ 0, 0, 0, 0, 0, 0, 0, 0, 0
+ }, {
+ 0, 0, 0, 0, 0, 0, 0, 0, 0
+ }, {
+ 0, 0, 0, 0, 0, 0, 0, 0, 0
+ }, {
+ 0, 0, 0, 0, 0, 0, 0, 0, 0
+ }, {
+ 0, 0, 0, 0, 0, 0, 0, 0, 0
+ }, {
+ 0, 0, 0, 0, 0, 0, 0, 0, 0
+ }, {
+ 0, 0, 0, 0, 0, 0, 0, 0, 0
+ }, {
+ 0, 0, 0, 0, 0, 0, 0, 0, 0
+ }, {
+ 0, 0, 0, 0, 0, 0, 0, 0, 0
+ }, {
+ 0, 0, 0, 0, 0, 0, 0, 0, 0
+ }, {
+ 0, 0, 0, 0, 0, 0, 0, 0, 0
+ }, {
+ 0, 0, 0, 0, 0, 0, 0, 0, 0
+ }, {
+ 0, 0, 0, 0, 0, 0, 0, 0, 0
+ }, {
+ 0, 0, 0, 0, 0, 0, 0, 0, 0
+ }, {
+ 0, 0, 0, 0, 0, 0, 0, 0, 0
+ }, {
+ 0, 0, 0, 0, 0, 0, 0, 0, 0
+ }, {
+ 0, 0, 0, 0, 0, 0, 0, 0, 0
+ }, {
+ 0, 0, 0, 0, 0, 0, 0, 0, 0
+ }, {
+ 0, 0, 0, 0, 0, 0, 0, 0, 0
+ }, {
+ 0, 0, 0, 0, 0, 0, 0, 0, 0
+ }, {
+ 0, 0, 0, 0, 0, 0, 0, 0, 0
+ }, {
+ 0, 0, 0, 0, 0, 0, 0, 0, 0
+ }, {
+ 0, 0, 0, 0, 0, 0, 0, 0, 0
+ }, {
+ 0, 0, 0, 0, 0, 0, 0, 0, 0
+ }, {
+ 0, 0, 0, 0, 0, 0, 0, 0, 0
+ }, {
+ 0, 0, 0, 0, 0, 0, 0, 0, 0
+ }, {
+ 0, 0, 0, 0, 0, 0, 0, 0, 0
+ }, {
+ 0, 0, 0, 0, 0, 0, 0, 0, 0
+ }, {
+ 0, 0, 0, 0, 0, 0, 0, 0, 0
+ }, {
+ 0, 0, 0, 0, 0, 0, 0, 0, 0
+ }, {
+ 0, 0, 0, 0, 0, 0, 0, 0, 0
+ }, {
+ 0, 0, 0, 0, 0, 0, 0, 0, 0
+ }, {
+ 0, 0, 0, 0, 0, 0, 0, 0, 0
+ }, {
+ 0, 0, 0, 0, 0, 0, 0, 0, 0
+ }, {
+ 0, 0, 0, 0, 0, 0, 0, 0, 0
+ }, {
+ 0, 0, 0, 0, 0, 0, 0, 0, 0
+ }, {
+ 0, 0, 0, 0, 0, 0, 0, 0, 0
+ }, {
+ 0, 0, 0, 0, 0, 0, 0, 0, 0
+ }, {
+ 0, 0, 0, 0, 0, 0, 0, 0, 0
+ }, {
+ 0, 0, 0, 0, 0, 0, 0, 0, 0
+ }, {
+ 0, 0, 0, 0, 0, 0, 0, 0, 0
+ }, {
+ 0, 0, 0, 0, 0, 0, 0, 0, 0
+ }, {
+ 0, 0, 0, 0, 0, 0, 0, 0, 0
+ }, {
+ 0, 0, 0, 0, 0, 0, 0, 0, 0
+ }, {
+ 0, 0, 0, 0, 0, 0, 0, 0, 0
+ }, {
+ 0, 0, 0, 0, 0, 0, 0, 0, 0
+ }, {
+ 0, 0, 0, 0, 0, 0, 0, 0, 0
+ }, {
+ 0, 0, 0, 0, 0, 0, 0, 0, 0
+ }, {
+ 0, 0, 0, 0, 0, 0, 0, 0, 0
+ }, {
+ 0, 0, 0, 0, 0, 0, 0, 0, 0
+ }, {
+ 0, 0, 0, 0, 0, 0, 0, 0, 0
+ }, {
+ 0, 0, 0, 0, 0, 0, 0, 0, 0
+ }, {
+ 0, 0, 0, 0, 0, 0, 0, 0, 0
+ }, {
+ 0, 0, 0, 0, 0, 0, 0, 0, 0
+ }, {
+ 0, 0, 0, 0, 0, 0, 0, 0, 0
+ }, {
+ 0, 0, 0, 0, 0, 0, 0, 0, 0
+ }, {
+ 0, 0, 0, 0, 0, 0, 0, 0, 0
+ }, {
+ 0, 0, 0, 0, 0, 0, 0, 0, 0
+ }, {
+ 0, 0, 0, 0, 0, 0, 0, 0, 0
+ }, {
+ 0, 0, 0, 0, 0, 0, 0, 0, 0
+ }, {
+ 0, 0, 0, 0, 0, 0, 0, 0, 0
+ }, {
+ 0, 0, 0, 0, 0, 0, 0, 0, 0
+ }, {
+ 0, 0, 0, 0, 0, 0, 0, 0, 0
+ }, {
+ 0, 0, 0, 0, 0, 0, 0, 0, 0
+ }, {
+ 0, 0, 0, 0, 0, 0, 0, 0, 0
+ }, {
+ 0, 0, 0, 0, 0, 0, 0, 0, 0
+ }, {
+ 0, 0, 0, 0, 0, 0, 0, 0, 0
+ }, {
+ 0, 0, 0, 0, 0, 0, 0, 0, 0
+ }, {
+ 0, 0, 0, 0, 0, 0, 0, 0, 0
+ }, {
+ 0, 0, 0, 0, 0, 0, 0, 0, 0
+ }, {
+ 0, 0, 0, 0, 0, 0, 0, 0, 0
+ }, {
+ 0, 0, 0, 0, 0, 0, 0, 0, 0
+ }, {
+ 0, 0, 0, 0, 0, 0, 0, 0, 0
+ }, {
+ 0, 0, 0, 0, 0, 0, 0, 0, 0
+ }, {
+ 0, 0, 0, 0, 0, 0, 0, 0, 0
+ }, {
+ 0, 0, 0, 0, 0, 0, 0, 0, 0
+ }, {
+ 0, 0, 0, 0, 0, 0, 0, 0, 0
+ }, {
+ 0, 0, 0, 0, 0, 0, 0, 0, 0
+ }, {
+ 0, 0, 0, 0, 0, 0, 0, 0, 0
+ }, {
+ 0, 0, 0, 0, 0, 0, 0, 0, 0
+ }, {
+ 0, 0, 0, 0, 0, 0, 0, 0, 0
+ }, {
+ 0, 0, 0, 0, 0, 0, 0, 0, 0
+ }, {
+ 0, 0, 0, 0, 0, 0, 0, 0, 0
+ }, {
+ 0, 0, 0, 0, 0, 0, 0, 0, 0
+ }, {
+ 0, 0, 0, 0, 0, 0, 0, 0, 0
+ }, {
+ 0, 0, 0, 0, 0, 0, 0, 0, 0
+ }, {
+ 0, 0, 0, 0, 0, 0, 0, 0, 0
+ }, {
+ 0, 0, 0, 0, 0, 0, 0, 0, 0
+ }, {
+ 0, 0, 0, 0, 0, 0, 0, 0, 0
+ }, {
+ 0, 0, 0, 0, 0, 0, 0, 0, 0
+ }, {
+ 0, 0, 0, 0, 0, 0, 0, 0, 0
+ }, {
+ 0, 0, 0, 0, 0, 0, 0, 0, 0
+ }, {
+ 0, 0, 0, 0, 0, 0, 0, 0, 0
+ }, {
+ 0, 0, 0, 0, 0, 0, 0, 0, 0
+ }, {
+ 0, 0, 0, 0, 0, 0, 0, 0, 0
+ }, {
+ 0, 0, 0, 0, 0, 0, 0, 0, 0
+ }, {
+ 0, 0, 0, 0, 0, 0, 0, 0, 0
+ }, {
+ 0, 0, 0, 0, 0, 0, 0, 0, 0
+ }, {
+ 0, 0, 0, 0, 0, 0, 0, 0, 0
+ }, {
+ 0, 0, 0, 0, 0, 0, 0, 0, 0
+ }, {
+ 0, 0, 0, 0, 0, 0, 0, 0, 0
+ }, {
+ 0, 0, 0, 0, 0, 0, 0, 0, 0
+ }, {
+ 0, 0, 0, 0, 0, 0, 0, 0, 0
+ }, {
+ 0, 0, 0, 0, 0, 0, 0, 0, 0
+ }, {
+ 0, 0, 0, 0, 0, 0, 0, 0, 0
+ }, {
+ 0, 0, 0, 0, 0, 0, 0, 0, 0
+ }, {
+ 0, 0, 0, 0, 0, 0, 0, 0, 0
+ }, {
+ 0, 0, 0, 0, 0, 0, 0, 0, 0
+ }, {
+ 0, 0, 0, 0, 0, 0, 0, 0, 0
+ }, {
+ 0, 0, 0, 0, 0, 0, 0, 0, 0
+ }, {
+ 0, 0, 0, 0, 0, 0, 0, 0, 0
+ }, {
+ 0, 0, 0, 0, 0, 0, 0, 0, 0
+ }, {
+ 0, 0, 0, 0, 0, 0, 0, 0, 0
+ }, {
+ 0, 0, 0, 0, 0, 0, 0, 0, 0
+ }, {
+ 0, 0, 0, 0, 0, 0, 0, 0, 0
+ }, {
+ 0, 0, 0, 0, 0, 0, 0, 0, 0
+ }, {
+ 0, 0, 0, 0, 0, 0, 0, 0, 0
+ }, {
+ 0, 0, 0, 0, 0, 0, 0, 0, 0
+ }, {
+ 0, 0, 0, 0, 0, 0, 0, 0, 0
+ }, {
+ 0, 0, 0, 0, 0, 0, 0, 0, 0
+ }, {
+ 0, 0, 0, 0, 0, 0, 0, 0, 0
+ }, {
+ 0, 0, 0, 0, 0, 0, 0, 0, 0
+ }, {
+ 0, 0, 0, 0, 0, 0, 0, 0, 0
+ }, {
+ 0, 0, 0, 0, 0, 0, 0, 0, 0
+ }, {
+ 0, 0, 0, 0, 0, 0, 0, 0, 0
+ }, {
+ 0, 0, 0, 0, 0, 0, 0, 0, 0
+ }, {
+ 0, 0, 0, 0, 0, 0, 0, 0, 0
+ }, {
+ 0, 0, 0, 0, 0, 0, 0, 0, 0
+ }, {
+ 0, 0, 0, 0, 0, 0, 0, 0, 0
+ }, {
+ 0, 0, 0, 0, 0, 0, 0, 0, 0
+ }, {
+ 0, 0, 0, 0, 0, 0, 0, 0, 0
+ }, {
+ 0, 0, 0, 0, 0, 0, 0, 0, 0
+ }, {
+ 0, 0, 0, 0, 0, 0, 0, 0, 0
+ }, {
+ 0, 0, 0, 0, 0, 0, 0, 0, 0
+ }, {
+ 0, 0, 0, 0, 0, 0, 0, 0, 0
+ }, {
+ 0, 0, 0, 0, 0, 0, 0, 0, 0
+ }, {
+ 0, 0, 0, 0, 0, 0, 0, 0, 0
+ }, {
+ 0, 0, 0, 0, 0, 0, 0, 0, 0
+ }, {
+ 0, 0, 0, 0, 0, 0, 0, 0, 0
+ }, {
+ 0, 0, 0, 0, 0, 0, 0, 0, 0
+ }, {
+ 0, 0, 0, 0, 0, 0, 0, 0, 0
+ }, {
+ 0, 0, 0, 0, 0, 0, 0, 0, 0
+ }, {
+ 0, 0, 0, 0, 0, 0, 0, 0, 0
+ }, {
+ 0, 0, 0, 0, 0, 0, 0, 0, 0
+ }, {
+ 0, 0, 0, 0, 0, 0, 0, 0, 0
+ }, {
+ 0, 0, 0, 0, 0, 0, 0, 0, 0
+ }, {
+ 0, 0, 0, 0, 0, 0, 0, 0, 0
+ }, {
+ 0, 0, 0, 0, 0, 0, 0, 0, 0
+ }, {
+ 0, 0, 0, 0, 0, 0, 0, 0, 0
+ }, {
+ 0, 0, 0, 0, 0, 0, 0, 0, 0
+ }, {
+ 0, 0, 0, 0, 0, 0, 0, 0, 0
+ }, {
+ 0, 0, 0, 0, 0, 0, 0, 0, 0
+ }, {
+ 0, 0, 0, 0, 0, 0, 0, 0, 0
+ }, {
+ 0, 0, 0, 0, 0, 0, 0, 0, 0
+ }, {
+ 0, 0, 0, 0, 0, 0, 0, 0, 0
+ }, {
+ 0, 0, 0, 0, 0, 0, 0, 0, 0
+ }, {
+ 0, 0, 0, 0, 0, 0, 0, 0, 0
+ }, {
+ 0, 0, 0, 0, 0, 0, 0, 0, 0
+ }, {
+ 0, 0, 0, 0, 0, 0, 0, 0, 0
+ }, {
+ 0, 0, 0, 0, 0, 0, 0, 0, 0
+ }, {
+ 0, 0, 0, 0, 0, 0, 0, 0, 0
+ }, {
+ 0, 0, 0, 0, 0, 0, 0, 0, 0
+ }, {
+ 0, 0, 0, 0, 0, 0, 0, 0, 0
+ }, {
+ 0, 0, 0, 0, 0, 0, 0, 0, 0
+ }, {
+ 0, 0, 0, 0, 0, 0, 0, 0, 0
+ }, {
+ 0, 0, 0, 0, 0, 0, 0, 0, 0
+ }, {
+ 0, 0, 0, 0, 0, 0, 0, 0, 0
+ }, {
+ 0, 0, 0, 0, 0, 0, 0, 0, 0
+ }, {
+ 0, 0, 0, 0, 0, 0, 0, 0, 0
+ }, {
+ 0, 0, 0, 0, 0, 0, 0, 0, 0
+ }, {
+ 0, 0, 0, 0, 0, 0, 0, 0, 0
+ }, {
+ 0, 0, 0, 0, 0, 0, 0, 0, 0
+ }, {
+ 0, 0, 0, 0, 0, 0, 0, 0, 0
+ }, {
+ 0, 0, 0, 0, 0, 0, 0, 0, 0
+ }, {
+ 0, 0, 0, 0, 0, 0, 0, 0, 0
+ }, {
+ 0, 0, 0, 0, 0, 0, 0, 0, 0
+ }, {
+ 0, 0, 0, 0, 0, 0, 0, 0, 0
+ }, {
+ 0, 0, 0, 0, 0, 0, 0, 0, 0
+ }, {
+ 0, 0, 0, 0, 0, 0, 0, 0, 0
+ }, {
+ 0, 0, 0, 0, 0, 0, 0, 0, 0
+ }, {
+ 0, 0, 0, 0, 0, 0, 0, 0, 0
+ }, {
+ 0, 0, 0, 0, 0, 0, 0, 0, 0
+ }, {
+ 0, 0, 0, 0, 0, 0, 0, 0, 0
+ }, {
+ 0, 0, 0, 0, 0, 0, 0, 0, 0
+ }, {
+ 0, 0, 0, 0, 0, 0, 0, 0, 0
+ }, {
+ 0, 0, 0, 0, 0, 0, 0, 0, 0
+ }, {
+ 0, 0, 0, 0, 0, 0, 0, 0, 0
+ }, {
+ 0, 0, 0, 0, 0, 0, 0, 0, 0
+ }, {
+ 0, 0, 0, 0, 0, 0, 0, 0, 0
+ }, {
+ 0, 0, 0, 0, 0, 0, 0, 0, 0
+ }, {
+ 0, 0, 0, 0, 0, 0, 0, 0, 0
+ }, {
+ 0, 0, 0, 0, 0, 0, 0, 0, 0
+ }, {
+ 0, 0, 0, 0, 0, 0, 0, 0, 0
+ }, {
+ 0, 0, 0, 0, 0, 0, 0, 0, 0
+ }, {
+ 0, 0, 0, 0, 0, 0, 0, 0, 0
+ }, {
+ 0, 0, 0, 0, 0, 0, 0, 0, 0
+ }, {
+ 0, 0, 0, 0, 0, 0, 0, 0, 0
+ }, {
+ 0, 0, 0, 0, 0, 0, 0, 0, 0
+ }, {
+ 0, 0, 0, 0, 0, 0, 0, 0, 0
+ }, {
+ 0, 0, 0, 0, 0, 0, 0, 0, 0
+ }, {
+ 0, 0, 0, 0, 0, 0, 0, 0, 0
+ }, {
+ 0, 0, 0, 0, 0, 0, 0, 0, 0
+ }, {
+ 0, 0, 0, 0, 0, 0, 0, 0, 0
+ }, {
+ 0, 0, 0, 0, 0, 0, 0, 0, 0
+ }, {
+ 0, 0, 0, 0, 0, 0, 0, 0, 0
+ }, {
+ 0, 0, 0, 0, 0, 0, 0, 0, 0
+ }, {
+ 0, 0, 0, 0, 0, 0, 0, 0, 0
+ }, {
+ 0, 0, 0, 0, 0, 0, 0, 0, 0
+ }, {
+ 0, 0, 0, 0, 0, 0, 0, 0, 0
+ }, {
+ 0, 0, 0, 0, 0, 0, 0, 0, 0
+ }, {
+ 0, 0, 0, 0, 0, 0, 0, 0, 0
+ }, {
+ 0, 0, 0, 0, 0, 0, 0, 0, 0
+ }, {
+ 0, 0, 0, 0, 0, 0, 0, 0, 0
+ }, {
+ 0, 0, 0, 0, 0, 0, 0, 0, 0
+ }, {
+ 0, 0, 0, 0, 0, 0, 0, 0, 0
+ }, {
+ 0, 0, 0, 0, 0, 0, 0, 0, 0
+ }, {
+ 0, 0, 0, 0, 0, 0, 0, 0, 0
+ }, {
+ 0, 0, 0, 0, 0, 0, 0, 0, 0
+ }, {
+ 0, 0, 0, 0, 0, 0, 0, 0, 0
+ }, {
+ 0, 0, 0, 0, 0, 0, 0, 0, 0
+ }, {
+ 0, 0, 0, 0, 0, 0, 0, 0, 0
+ }, {
+ 0, 0, 0, 0, 0, 0, 0, 0, 0
+ }, {
+ 0, 0, 0, 0, 0, 0, 0, 0, 0
+ }, {
+ 0, 0, 0, 0, 0, 0, 0, 0, 0
+ }, {
+ 0, 0, 0, 0, 0, 0, 0, 0, 0
+ }, {
+ 0, 0, 0, 0, 0, 0, 0, 0, 0
+ }, {
+ 0, 0, 0, 0, 0, 0, 0, 0, 0
+ }, {
+ 0, 0, 0, 0, 0, 0, 0, 0, 0
+ }, {
+ 0, 0, 0, 0, 0, 0, 0, 0, 0
+ }, {
+ 0, 0, 0, 0, 0, 0, 0, 0, 0
+ }, {
+ 0, 0, 0, 0, 0, 0, 0, 0, 0
+ }, {
+ 0, 0, 0, 0, 0, 0, 0, 0, 0
+ }, {
+ 0, 0, 0, 0, 0, 0, 0, 0, 0
+ }, {
+ 0, 0, 0, 0, 0, 0, 0, 0, 0
+ }, {
+ 0, 0, 0, 0, 0, 0, 0, 0, 0
+ }, {
+ 0, 0, 0, 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 void RtemsTaskReqConstructErrors_Prepare(
+ RtemsTaskReqConstructErrors_Context *ctx
+)
+{
+ ctx->id_value = 0xffffffff;
+ memset( &ctx->config, 0, sizeof( ctx->config ) );
+}
+
+static void RtemsTaskReqConstructErrors_Action(
+ RtemsTaskReqConstructErrors_Context *ctx
+)
+{
+ ctx->config.storage_size = RTEMS_TASK_STORAGE_SIZE(
+ ctx->config.maximum_thread_local_storage_size + ctx->stack_size,
+ ctx->config.attributes
+ );
+ ctx->status = rtems_task_construct( &ctx->config, ctx->id );
+}
+
+static void RtemsTaskReqConstructErrors_Cleanup(
+ RtemsTaskReqConstructErrors_Context *ctx
+)
+{
+ Chain_Node *node;
+
+ while ( ( node = _Chain_Get_unprotected( &ctx->tasks ) ) ) {
+ Objects_Control *obj;
+ rtems_status_code sc;
+
+ obj = (Objects_Control *) node;
+ sc = rtems_task_delete( obj->id );
+ T_quiet_rsc_success( sc );
+ }
+}
+
+/**
+ * @fn void T_case_body_RtemsTaskReqConstructErrors( void )
+ */
+T_TEST_CASE_FIXTURE(
+ RtemsTaskReqConstructErrors,
+ &RtemsTaskReqConstructErrors_Fixture
+)
+{
+ RtemsTaskReqConstructErrors_Context *ctx;
+ size_t index;
+
+ ctx = T_fixture_context();
+ ctx->in_action_loop = true;
+ index = 0;
+
+ for (
+ ctx->pcs[ 0 ] = RtemsTaskReqConstructErrors_Pre_Id_Id;
+ ctx->pcs[ 0 ] < RtemsTaskReqConstructErrors_Pre_Id_NA;
+ ++ctx->pcs[ 0 ]
+ ) {
+ if ( RtemsTaskReqConstructErrors_TransitionInfo[ index ].Pre_Id_NA ) {
+ ctx->pcs[ 0 ] = RtemsTaskReqConstructErrors_Pre_Id_NA;
+ index += ( RtemsTaskReqConstructErrors_Pre_Id_NA - 1 )
+ * RtemsTaskReqConstructErrors_Pre_Name_NA
+ * RtemsTaskReqConstructErrors_Pre_Prio_NA
+ * RtemsTaskReqConstructErrors_Pre_Tasks_NA
+ * RtemsTaskReqConstructErrors_Pre_TLS_NA
+ * RtemsTaskReqConstructErrors_Pre_Stack_NA
+ * RtemsTaskReqConstructErrors_Pre_Ext_NA
+ * RtemsTaskReqConstructErrors_Pre_Preempt_NA;
+ }
+
+ for (
+ ctx->pcs[ 1 ] = RtemsTaskReqConstructErrors_Pre_Name_Valid;
+ ctx->pcs[ 1 ] < RtemsTaskReqConstructErrors_Pre_Name_NA;
+ ++ctx->pcs[ 1 ]
+ ) {
+ if ( RtemsTaskReqConstructErrors_TransitionInfo[ index ].Pre_Name_NA ) {
+ ctx->pcs[ 1 ] = RtemsTaskReqConstructErrors_Pre_Name_NA;
+ index += ( RtemsTaskReqConstructErrors_Pre_Name_NA - 1 )
+ * RtemsTaskReqConstructErrors_Pre_Prio_NA
+ * RtemsTaskReqConstructErrors_Pre_Tasks_NA
+ * RtemsTaskReqConstructErrors_Pre_TLS_NA
+ * RtemsTaskReqConstructErrors_Pre_Stack_NA
+ * RtemsTaskReqConstructErrors_Pre_Ext_NA
+ * RtemsTaskReqConstructErrors_Pre_Preempt_NA;
+ }
+
+ for (
+ ctx->pcs[ 2 ] = RtemsTaskReqConstructErrors_Pre_Prio_Valid;
+ ctx->pcs[ 2 ] < RtemsTaskReqConstructErrors_Pre_Prio_NA;
+ ++ctx->pcs[ 2 ]
+ ) {
+ if ( RtemsTaskReqConstructErrors_TransitionInfo[ index ].Pre_Prio_NA ) {
+ ctx->pcs[ 2 ] = RtemsTaskReqConstructErrors_Pre_Prio_NA;
+ index += ( RtemsTaskReqConstructErrors_Pre_Prio_NA - 1 )
+ * RtemsTaskReqConstructErrors_Pre_Tasks_NA
+ * RtemsTaskReqConstructErrors_Pre_TLS_NA
+ * RtemsTaskReqConstructErrors_Pre_Stack_NA
+ * RtemsTaskReqConstructErrors_Pre_Ext_NA
+ * RtemsTaskReqConstructErrors_Pre_Preempt_NA;
+ }
+
+ for (
+ ctx->pcs[ 3 ] = RtemsTaskReqConstructErrors_Pre_Tasks_Avail;
+ ctx->pcs[ 3 ] < RtemsTaskReqConstructErrors_Pre_Tasks_NA;
+ ++ctx->pcs[ 3 ]
+ ) {
+ if ( RtemsTaskReqConstructErrors_TransitionInfo[ index ].Pre_Tasks_NA ) {
+ ctx->pcs[ 3 ] = RtemsTaskReqConstructErrors_Pre_Tasks_NA;
+ index += ( RtemsTaskReqConstructErrors_Pre_Tasks_NA - 1 )
+ * RtemsTaskReqConstructErrors_Pre_TLS_NA
+ * RtemsTaskReqConstructErrors_Pre_Stack_NA
+ * RtemsTaskReqConstructErrors_Pre_Ext_NA
+ * RtemsTaskReqConstructErrors_Pre_Preempt_NA;
+ }
+
+ for (
+ ctx->pcs[ 4 ] = RtemsTaskReqConstructErrors_Pre_TLS_Enough;
+ ctx->pcs[ 4 ] < RtemsTaskReqConstructErrors_Pre_TLS_NA;
+ ++ctx->pcs[ 4 ]
+ ) {
+ if ( RtemsTaskReqConstructErrors_TransitionInfo[ index ].Pre_TLS_NA ) {
+ ctx->pcs[ 4 ] = RtemsTaskReqConstructErrors_Pre_TLS_NA;
+ index += ( RtemsTaskReqConstructErrors_Pre_TLS_NA - 1 )
+ * RtemsTaskReqConstructErrors_Pre_Stack_NA
+ * RtemsTaskReqConstructErrors_Pre_Ext_NA
+ * RtemsTaskReqConstructErrors_Pre_Preempt_NA;
+ }
+
+ for (
+ ctx->pcs[ 5 ] = RtemsTaskReqConstructErrors_Pre_Stack_Enough;
+ ctx->pcs[ 5 ] < RtemsTaskReqConstructErrors_Pre_Stack_NA;
+ ++ctx->pcs[ 5 ]
+ ) {
+ if ( RtemsTaskReqConstructErrors_TransitionInfo[ index ].Pre_Stack_NA ) {
+ ctx->pcs[ 5 ] = RtemsTaskReqConstructErrors_Pre_Stack_NA;
+ index += ( RtemsTaskReqConstructErrors_Pre_Stack_NA - 1 )
+ * RtemsTaskReqConstructErrors_Pre_Ext_NA
+ * RtemsTaskReqConstructErrors_Pre_Preempt_NA;
+ }
+
+ for (
+ ctx->pcs[ 6 ] = RtemsTaskReqConstructErrors_Pre_Ext_Ok;
+ ctx->pcs[ 6 ] < RtemsTaskReqConstructErrors_Pre_Ext_NA;
+ ++ctx->pcs[ 6 ]
+ ) {
+ if ( RtemsTaskReqConstructErrors_TransitionInfo[ index ].Pre_Ext_NA ) {
+ ctx->pcs[ 6 ] = RtemsTaskReqConstructErrors_Pre_Ext_NA;
+ index += ( RtemsTaskReqConstructErrors_Pre_Ext_NA - 1 )
+ * RtemsTaskReqConstructErrors_Pre_Preempt_NA;
+ }
+
+ for (
+ ctx->pcs[ 7 ] = RtemsTaskReqConstructErrors_Pre_Preempt_Yes;
+ ctx->pcs[ 7 ] < RtemsTaskReqConstructErrors_Pre_Preempt_NA;
+ ++ctx->pcs[ 7 ]
+ ) {
+ if ( RtemsTaskReqConstructErrors_TransitionInfo[ index ].Pre_Preempt_NA ) {
+ ctx->pcs[ 7 ] = RtemsTaskReqConstructErrors_Pre_Preempt_NA;
+ index += ( RtemsTaskReqConstructErrors_Pre_Preempt_NA - 1 );
+ }
+
+ if ( RtemsTaskReqConstructErrors_TransitionInfo[ index ].Skip ) {
+ ++index;
+ continue;
+ }
+
+ RtemsTaskReqConstructErrors_Prepare( ctx );
+ RtemsTaskReqConstructErrors_Pre_Id_Prepare(
+ ctx,
+ ctx->pcs[ 0 ]
+ );
+ RtemsTaskReqConstructErrors_Pre_Name_Prepare(
+ ctx,
+ ctx->pcs[ 1 ]
+ );
+ RtemsTaskReqConstructErrors_Pre_Prio_Prepare(
+ ctx,
+ ctx->pcs[ 2 ]
+ );
+ RtemsTaskReqConstructErrors_Pre_Tasks_Prepare(
+ ctx,
+ ctx->pcs[ 3 ]
+ );
+ RtemsTaskReqConstructErrors_Pre_TLS_Prepare(
+ ctx,
+ ctx->pcs[ 4 ]
+ );
+ RtemsTaskReqConstructErrors_Pre_Stack_Prepare(
+ ctx,
+ ctx->pcs[ 5 ]
+ );
+ RtemsTaskReqConstructErrors_Pre_Ext_Prepare(
+ ctx,
+ ctx->pcs[ 6 ]
+ );
+ RtemsTaskReqConstructErrors_Pre_Preempt_Prepare(
+ ctx,
+ ctx->pcs[ 7 ]
+ );
+ RtemsTaskReqConstructErrors_Action( ctx );
+ RtemsTaskReqConstructErrors_Post_Status_Check(
+ ctx,
+ RtemsTaskReqConstructErrors_TransitionMap[ index ][ 0 ]
+ );
+ RtemsTaskReqConstructErrors_Cleanup( ctx );
+ ++index;
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+}
+
+/** @} */
diff --git a/testsuites/validation/ts-validation-0.c b/testsuites/validation/ts-validation-0.c
new file mode 100644
index 0000000000..3e60fb6ab8
--- /dev/null
+++ b/testsuites/validation/ts-validation-0.c
@@ -0,0 +1,222 @@
+/* SPDX-License-Identifier: BSD-2-Clause */
+
+/**
+ * @file
+ *
+ * @ingroup RTEMSTestSuiteTestsuitesValidation0
+ */
+
+/*
+ * Copyright (C) 2020 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 was automatically generated. Do not edit it manually.
+ * Please have a look at
+ *
+ * https://docs.rtems.org/branches/master/eng/req/howto.html
+ *
+ * for information how to maintain and re-generate this file.
+ */
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#include <rtems.h>
+#include <rtems/bspIo.h>
+#include <rtems/sysinit.h>
+
+#include <rtems/test.h>
+
+/**
+ * @defgroup RTEMSTestSuiteTestsuitesValidation0 spec:/testsuites/validation-0
+ *
+ * @ingroup RTEMSTestSuites
+ *
+ * @brief This general purpose validation test suite provides enough resources
+ * to run basic tests for all specified managers and functions.
+ *
+ * In SMP configurations, up to three scheduler instances using the SMP EDF
+ * scheduler are provided using up to four processors.
+ *
+ * @{
+ */
+
+#include <rtems/test-info.h>
+
+const char rtems_test_name[] = "Validation0";
+
+static char buffer[ 512 ];
+
+static const T_action actions[] = {
+ T_report_hash_sha256,
+ T_check_task_context,
+ T_check_rtems_barriers,
+ T_check_rtems_extensions,
+ T_check_rtems_message_queues,
+ T_check_rtems_partitions,
+ T_check_rtems_periods,
+ T_check_rtems_semaphores,
+ T_check_rtems_tasks,
+ T_check_rtems_timers
+};
+
+static const T_config test_config = {
+ .name = rtems_test_name,
+ .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 void runner_task( rtems_task_argument arg )
+{
+ int exit_code;
+
+ (void) arg;
+
+ rtems_test_begin( rtems_test_name, TEST_STATE );
+ T_register();
+ exit_code = T_main( &test_config );
+
+ if ( exit_code == 0 ) {
+ rtems_test_end( rtems_test_name );
+ }
+
+ rtems_fatal( RTEMS_FATAL_SOURCE_EXIT, (uint32_t) exit_code );
+}
+
+#define MAX_TLS_SIZE RTEMS_ALIGN_UP( 64, RTEMS_TASK_STORAGE_ALIGNMENT )
+
+#define ATTRIBUTES RTEMS_FLOATING_POINT
+
+RTEMS_ALIGNED( RTEMS_TASK_STORAGE_ALIGNMENT )
+static char runner_task_storage[
+ RTEMS_TASK_STORAGE_SIZE(
+ MAX_TLS_SIZE + RTEMS_MINIMUM_STACK_SIZE,
+ ATTRIBUTES
+ )
+];
+
+static const rtems_task_config runner_task_config = {
+ .name = rtems_build_name( 'R', 'U', 'N', ' ' ),
+ .initial_priority = 1,
+ .storage_area = runner_task_storage,
+ .storage_size = sizeof( runner_task_storage ),
+ .maximum_thread_local_storage_size = MAX_TLS_SIZE,
+ .initial_modes = RTEMS_DEFAULT_MODES,
+ .attributes = ATTRIBUTES
+};
+
+static void init_runner_task(void)
+{
+ rtems_id id;
+ rtems_status_code sc;
+
+ sc = rtems_task_construct( &runner_task_config, &id );
+ if ( sc != RTEMS_SUCCESSFUL ) {
+ rtems_fatal( RTEMS_FATAL_SOURCE_EXIT, 1 );
+ }
+
+ sc = rtems_task_start( id, runner_task, 0 );
+ if ( sc != RTEMS_SUCCESSFUL ) {
+ rtems_fatal( RTEMS_FATAL_SOURCE_EXIT, 1 );
+ }
+}
+
+RTEMS_SYSINIT_ITEM(
+ init_runner_task,
+ RTEMS_SYSINIT_CLASSIC_USER_TASKS,
+ RTEMS_SYSINIT_ORDER_MIDDLE
+);
+
+#define CONFIGURE_APPLICATION_NEEDS_CLOCK_DRIVER
+
+#define CONFIGURE_MAXIMUM_PROCESSORS 4
+
+#define CONFIGURE_MAXIMUM_BARRIERS 3
+
+#define CONFIGURE_MAXIMUM_MESSAGE_QUEUES 3
+
+#define CONFIGURE_MAXIMUM_PARTITIONS 3
+
+#define CONFIGURE_MAXIMUM_PERIODS 3
+
+#define CONFIGURE_MAXIMUM_SEMAPHORES 3
+
+#define CONFIGURE_MAXIMUM_TASKS 3
+
+#define CONFIGURE_MINIMUM_TASKS_WITH_USER_PROVIDED_STORAGE \
+ CONFIGURE_MAXIMUM_TASKS
+
+#define CONFIGURE_MAXIMUM_TIMERS 3
+
+#define CONFIGURE_MAXIMUM_USER_EXTENSIONS 3
+
+#define CONFIGURE_MICROSECONDS_PER_TICK 1000
+
+#define CONFIGURE_MAXIMUM_FILE_DESCRIPTORS 0
+
+#define CONFIGURE_DISABLE_NEWLIB_REENTRANCY
+
+#define CONFIGURE_APPLICATION_DISABLE_FILESYSTEM
+
+#define CONFIGURE_IDLE_TASK_INITIALIZES_APPLICATION
+
+#define CONFIGURE_IDLE_TASK_BODY _CPU_Thread_Idle_body
+
+#if defined(RTEMS_SMP)
+
+#define CONFIGURE_SCHEDULER_EDF_SMP
+
+#include <rtems/scheduler.h>
+
+RTEMS_SCHEDULER_EDF_SMP(a);
+
+RTEMS_SCHEDULER_EDF_SMP(b);
+
+RTEMS_SCHEDULER_EDF_SMP(c);
+
+#define CONFIGURE_SCHEDULER_TABLE_ENTRIES \
+ RTEMS_SCHEDULER_TABLE_EDF_SMP(a, rtems_build_name('A', ' ', ' ', ' ')), \
+ RTEMS_SCHEDULER_TABLE_EDF_SMP(b, rtems_build_name('B', ' ', ' ', ' ')), \
+ RTEMS_SCHEDULER_TABLE_EDF_SMP(c, rtems_build_name('C', ' ', ' ', ' '))
+
+#define CONFIGURE_SCHEDULER_ASSIGNMENTS \
+ RTEMS_SCHEDULER_ASSIGN(0, RTEMS_SCHEDULER_ASSIGN_PROCESSOR_MANDATORY), \
+ RTEMS_SCHEDULER_ASSIGN(1, RTEMS_SCHEDULER_ASSIGN_PROCESSOR_OPTIONAL), \
+ RTEMS_SCHEDULER_ASSIGN(2, RTEMS_SCHEDULER_ASSIGN_PROCESSOR_OPTIONAL), \
+ RTEMS_SCHEDULER_ASSIGN(2, RTEMS_SCHEDULER_ASSIGN_PROCESSOR_OPTIONAL)
+
+#endif /* RTEMS_SMP */
+
+#define CONFIGURE_INIT
+
+#include <rtems/confdefs.h>
+
+/** @} */
diff --git a/waf b/waf
new file mode 100755
index 0000000000..ba9ee0bf62
--- /dev/null
+++ b/waf
@@ -0,0 +1,173 @@
+#!/usr/bin/env python
+# encoding: latin-1
+# Thomas Nagy, 2005-2018
+#
+"""
+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.
+
+3. The name of the author may not be used to endorse or promote products
+ derived from this software without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE AUTHOR "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 AUTHOR 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 os, sys, inspect
+
+VERSION="2.0.20"
+REVISION="36f5354d605298f6a89c09e0c7ef6c1d"
+GIT="f1d78d12462b1fddda21584dedc83a1d269f0970"
+INSTALL=''
+C1='#2'
+C2='#,'
+C3='#%'
+cwd = os.getcwd()
+join = os.path.join
+
+
+WAF='waf'
+def b(x):
+ return x
+if sys.hexversion>0x300000f:
+ WAF='waf3'
+ def b(x):
+ return x.encode()
+
+def err(m):
+ print(('\033[91mError: %s\033[0m' % m))
+ sys.exit(1)
+
+def unpack_wafdir(dir, src):
+ f = open(src,'rb')
+ c = 'corrupt archive (%d)'
+ while 1:
+ line = f.readline()
+ if not line: err('run waf-light from a folder containing waflib')
+ if line == b('#==>\n'):
+ txt = f.readline()
+ if not txt: err(c % 1)
+ if f.readline() != b('#<==\n'): err(c % 2)
+ break
+ if not txt: err(c % 3)
+ txt = txt[1:-1].replace(b(C1), b('\n')).replace(b(C2), b('\r')).replace(b(C3), b('\x00'))
+
+ import shutil, tarfile
+ try: shutil.rmtree(dir)
+ except OSError: pass
+ try:
+ for x in ('Tools', 'extras'):
+ os.makedirs(join(dir, 'waflib', x))
+ except OSError:
+ err("Cannot unpack waf lib into %s\nMove waf in a writable directory" % dir)
+
+ os.chdir(dir)
+ tmp = 't.bz2'
+ t = open(tmp,'wb')
+ try: t.write(txt)
+ finally: t.close()
+
+ try:
+ t = tarfile.open(tmp)
+ except:
+ try:
+ os.system('bunzip2 t.bz2')
+ t = tarfile.open('t')
+ tmp = 't'
+ except:
+ os.chdir(cwd)
+ try: shutil.rmtree(dir)
+ except OSError: pass
+ err("Waf cannot be unpacked, check that bzip2 support is present")
+
+ try:
+ for x in t: t.extract(x)
+ finally:
+ t.close()
+
+ for x in ('Tools', 'extras'):
+ os.chmod(join('waflib',x), 493)
+
+ if sys.hexversion<0x300000f:
+ sys.path = [join(dir, 'waflib')] + sys.path
+ import fixpy2
+ fixpy2.fixdir(dir)
+
+ os.remove(tmp)
+ os.chdir(cwd)
+
+ try: dir = unicode(dir, 'mbcs')
+ except: pass
+ try:
+ from ctypes import windll
+ windll.kernel32.SetFileAttributesW(dir, 2)
+ except:
+ pass
+
+def test(dir):
+ try:
+ os.stat(join(dir, 'waflib'))
+ return os.path.abspath(dir)
+ except OSError:
+ pass
+
+def find_lib():
+ src = os.path.abspath(inspect.getfile(inspect.getmodule(err)))
+ base, name = os.path.split(src)
+
+ #devs use $WAFDIR
+ w=test(os.environ.get('WAFDIR', ''))
+ if w: return w
+
+ #waf-light
+ if name.endswith('waf-light'):
+ w = test(base)
+ if w: return w
+ for dir in sys.path:
+ if test(dir):
+ return dir
+ err('waf-light requires waflib -> export WAFDIR=/folder')
+
+ dirname = '%s-%s-%s' % (WAF, VERSION, REVISION)
+ for i in (INSTALL,'/usr','/usr/local','/opt'):
+ w = test(i + '/lib/' + dirname)
+ if w: return w
+
+ #waf-local
+ dir = join(base, (sys.platform != 'win32' and '.' or '') + dirname)
+ w = test(dir)
+ if w: return w
+
+ #unpack
+ unpack_wafdir(dir, src)
+ return dir
+
+wafdir = find_lib()
+sys.path.insert(0, wafdir)
+
+if __name__ == '__main__':
+
+ from waflib import Scripting
+ Scripting.waf_entry_point(cwd, VERSION, wafdir)
+
+#==>
+#BZh91AY&SY:DvE]«ÿÿ°DPÿÿÿÿÿÿÿÿÿÿÿm (¬#%0E0m bÜ÷z`p#%#%#%#%#%#%#%#%#%#%#%#%#%#%#%#%#%#%#%#%#%ú÷_O^m´µf¶±‡wÝîÓe*hiÛvÓµ}Ý;X¡Ý«½í²Í²KW£ݳ}Öݶµ‰tw+»ÐËíï§ß{\3»fÎíº=í»<RQïnÙw½x[ÚïN·pq{Ûl×½˜ô÷º“AžùÞé«-—6ïçhØdî44m²}{ïn÷ÃAêíï´ª;žå0;¾æ¦Þ®m÷Úà#%#%ì€;#%Àz:pï³AG¼PvmÍ°tiNå†Í vÁÜw3Kkj#%Q¦ºW:³º}ž¢†šiíÍ€ëT6÷5»‚…T©R( ÷°q E$B€QA¶:j(zÒ•Vm:ÀëCϾíæõ¢û½^Ùí›–eÞ̪¶*Tm›uÄ®Ùwc¾sÛÉ­­#%Y¾øû¾û½ßvëlÏ*ôÝÝíæáç¶vó{½Îû×{½}î÷¯­žÖîSvzó|³¯7×8³n^—»F׃E g‰Ö@õPöÄ5èéÌÝté»=æö÷w®­æ74ðiJÓxÑÖflôÈ©'{½àÀ@TT#2U$ž(¤TõˬvÞ½ïz ©>àmïióÝÅ;±Zô£l©öÆÌ:êsßÀ#2wØÙ›¾;yàhW½í·¼¾Þ÷½±oê’WÝä=}㶯ºpõÞ#2h#2¨û¸so«¨èãƒ\Û_XÃ<ÍóÛíçvë9ÝÕÊlæ»wÛ‡³ßmím$ÍåÆî[ºì®ÆéÇr>¼w|ê]ŠjSL°ÖßY×@_a—¼c—lÒå…ïjÝ÷nörû:|øRŸnÝ•`´›çÜ×nîlí»½îÞݙ˭‰{.©}îëÖÉ}rŽ=ÜÞiæœ êº¹Ýâì#%=§=^oO^¹¾ÁîðhL:©EDªURKBÌéÙÝw@n!&e¶v¶îo°{½.¹îôÈ1,gvlé¯m¯]»œµU9Ó©íãÞd¦×{Ùš4 î¶Æmìçx#%ÝŽâ#%#%o¸ûïW.'wÄï³»ÁÛî]Ûë½ìëU×»<fñó]6åî·-Ceïg^º{åƒÑälUQõŒÚœèˆ7ÛŽ¦ófŽ/ŽóÜçkx*èéJ÷4áïn£ÚÎÀ¯x¼e{(zì맷»iÙŽo·¾fÒÉn¦¹ƒl^8îõŽwÝãÞíÓ»²î>;›/r˜Ý»ëÎ}ÅhlÆ€}ëz·®—ªZ»¯[nwA«Ö ’yâΗ®º×9ÂõïYשÎv{@ 6z×#2ª}w›i^»»tèéÝÓp:Ý÷hî.0‡i§o^…OŸ¾ÅîÝuºÛZûµ—a{¯¦íó|Þµ§+°C {ÜçA¦—u»¦½yÖ»aÍ.¨ Ý:s޻˻æ×ØkyÒ€¶C¾Û沸#%#‡“Wn¦ú£g¸ØR‰©@¦Þõ”ôÕÒ²ïwW™áÝÝÙÀ6½Ãª»W5ÚË·p7wH‘E˧ZnΩ5Ý·Ow®öÔÆìã©›=w·»%µ+ÈQÌÇ«_WÞxƒÏžÓ¹ÝßO|BÙƒ&›çÝãØÙ¼à‘Ú:÷fûz÷Þî÷—uÉóÙ÷ݶÀîï··Æ7}KÇx3æ·¸i¢#%€ h#%˜#, “C&†€!’#2<¦ž¦Ô#%ÈjSj{E6 ”Ð!&Aa4žEO4§¤išhÚ˜h#%#%#%#%#%#%‚DAh  MLLšj3TØ'ªOôL¤Ójzžõ44~”# €#%#%#%$õJH„F“4 ”ÒmO"ž¦˜Êié#%hP#%Ñ¡å€#%#%h#%#%#%D„#% #%ÓSЙM&Fš&#,Bb #%#%#%#%$ÔDh#%ƒM@%?$=QúIúòŸ©<P#%#%È#%—ÿÑþ…U¥qþ¥ÎUW*îèÝ¿¨ªÓÌÑ•>5Zu!J$Ë",!2D¨"#%H#%§ŠÀAŠ?OÏôƒòüãôý†.©ìWbâ LÔâԬøÔßä.Cy®5ÖõfRçó>gùRø¤üÁ 7a†å 3ƒl#%ÃòŸtûÉguDÝDó7+OˆW4]\=clª0Š‰ŒI‡ÄbòÏ9kÚûlˆ“ïÝ[~„(ÞAR R1B@¤Š(È‚1Š)"ˆ²#%²#2p‚¢ÔPœç9`I(‰£C"ˆ¨9E,DFÄ#%HDöÀ"¥„E ¨@*‰#%Ã#%rBfL…’ŒÍCLÓd@M$Rj6Ñ35–25)F”Sm&‰šÉ4Œ–¦£TlÑšK&’#D´BŒR&Òš #%6KbÊ›Fˆ¤Ù-¢(JYiM-¢!e¤6h& £31IFÔdš#,)²E ©%a¢Ë-#Jmšl‰m6ÚËVѦbK™3!4D˜2ɶ›m4ÚÔ”l¤´ÖÆZ›lÍ”´™&b(*"Íi‰¢ÉE2(Ù6„B¢Í#h¤Àh¨BÁ±ISÍ*"#2”Ä`Ø„!A"$±ÐÈŒ’6¤L„ib †Ùš$LR„Œ3 ¥•– ÌH¤²1²k&ÆÆ‹L*E’,¤$hÚSLbJLŠ2‰4dÐÑ“#2’"QI²#2lh’,E2–E3ØÖHfÄIŠhfl ­&À$²°„X$¤ØÔDIi( ¤‰*!$J4H¢`Š Ã!Œ’˜F(L¤”š‹3cF°‘¤Ô‘$Ä"Ò› HD‘d¶ $Å–e™%e26"fÄÈŠQ›#0Lªi‰!Rƒf¢ÀY ÓM#,ŒDjVK$lQ(¤&E4“MHÃf™Æ“„“RK(Ê j4™¤mM4Q5¨, ÒYÅ’“"h&™H•3 ›J˜Ôbe I˜À‰#–He„Ål“*fjÌQ¶RØ”D̆¤S¤FlhP¬¦Š’(£Rd“dŒlc%M#S4X±I#2LÌ#2YY´ÂV"0DQ%&š™4Ì‚ÆQ†Í©±Eš•)IM†ÈÉŒ™ÚB‹$b”e$)EŠ¢’LI&”Ú4š"E#,#`LF4*4Ó"mŒÁ–Bi2ŒE"d,È‚Sd¥1J"³L„µ›66²X ’K&2¢¨-‰¬)d1±˜aA©,j,Ò%F"Ô¦”#2-L4$̤ÅdÙ”Á"–hҘƒBY2‘%VšÚÑ‚e ©š2™šQI3""´”Û–h³šFP–YSfˆµ2°¶Q‰#2)±¥4ˆF”Úþ;k¢¦©aˆÍ¢ŒlVƶ*6L¥4ÔR¤š44´…¨ØFÉ5Y†¡¦c(É)€•$[" ÄÌÓ-’Ú(Ĥ¥¨ÚŠBÑ“L&¦³,,jAL´³&L©6‚£eZFŠ›(El™dU*šJ˜SfÆc3VÆ‹"+dÓ+"TË)µ’¬¶R”Ó"Û#@d¤mEŠk,Ii ”µ¨*£Z2TUdÖJ6¨¬TT‰F´M2FرŒX­FÃ-XØ I“ T˜ E š4c!i’iZ[lhÚbk¶H±¶ˆ-j¥­eŠ†Be3RÖMTŒHDÓiH­©VmŒR›J¥”©–XV¦‘­¥RÈ™KSSFÄ-¡%2šË,šÊË![,Å  ¨ÒD…bÃ4˜‰!´…-£T%¢†KQY&š6LšJ,ˆ&ËŠl¤#,"+,‚E1”ÌJ”lÓ4 AE¢Ó$&Fm6“F6ÆÈS¦™cE%bHɨ,F$6B h$™¨£D”È¥ , j„©€24i1¦•3d„ÔZ2E›Q”£fRIF@Ѥ1e5ˆŠa´š#“d°Š $Ya#22Z(h,R‰4h³)S))e+0ÉX 4Y#bÔ‹Qª6kFhŠ†JRl4ÅKfRZFBL1i‰±%IRe#2*SLl’™¬%)¨¬f4–MŒÒh±³4ÒŒ–™­dFš3D ¥…$„(Ì š*šFÅ k4›%1 4”Z-ÂTj5b±‹Fe°Òa¤“B…“#c¢Ø£`KAY¦ÅÌ¢#,ŠŒ†ÉK)*dE´mƨÕh¡2ÍQAb‚ 5&¨Ô0Ä,#¥(mch4¦™d(£D‘TÉ-F¨±#)[dT¢¨Ö4˜",š"™”-J) ÉD•6%2­DjÁ¢¦E‹%FÑ…1f”[&Jŵ¤Å%e6Ȗɱ´4J’S ÊTX@lll”lš$Äb6ÉŠI˜ Õ™0h!Q¥6fÄÄSXÕ2²k24…4“QAQDÓjJŲ’XÙ1hÐF“IZ‘-,´m µZ-QV2”m&¶Dª6Ƥ¢Å"š"™‘˜ÓR#©›$ÍhŠ¤±m’¥•dÖ‰›R-DlldŠ¨¦U4«Fѱ¶Æ-©3J!,ÖV%¨ÅbÍ*6¢6•*)JÒŒÅB3HAeF‹IQ¤ÛÅ™REi+bɶRehѬCLZ)1£hÕ¶ËjÅ"eB¢bJ# $4hئ’mL1’m£l[bÓ5mÖ²ÒTÐË[)dÛSSl…µ&š±4eDhÈÚIEÃY©5&fË*"#2‰1$™I2##²[E™m™Ùãýì'©4¬e&o7ÿE™gü5¢a(ÆjNWøëäþ²ýÜ{¾*ÜßÙeéh4i}GD¿Óbmc÷ñ¦#,HÜd‡ýÛ2'ó¿íò,¦q:dPCoüÕÀ¨°"P`¸tqKá‚’AÉÛ{~›kDçúUHÿ_þ0Ïþu­ôJµÊâ/e¸+(U"/›šaþ{ÜàôJ´›q×êÄq¾Î…sƒPÈý–Ù«±9'|µüjŽ%¡²N(mÉÉb#ü5»fÍI­ D)#1$v—l‰³1¢#,Ñ¢:8ÆŽ»'yÝ!1½rïOJ½Kƹg;–_ÄëÏÀë3š¹›‡j˜ˆM^,Ñ2©Ù.e•)„¤ŠD˜šlK]ö1 c3ˆ(À¯Î»PËâܲ3znhÐl‘AL^,0˜ª·¹qÊÿÛ²ÃúØîó{nfˆÑgÉÑs_&¼š<rÂû}®R[ŒR~_éuãÙó·ÖùÞ™­íulEÃ#2m#2E“¿–J³êhIµ›Ÿ.c`cCbyª“< ”xþÍË?Ø0íBÄäî…°(aB!„Ò±^'»û³Ù¹Êæû¢åRSo×´1†#%Þß Ö­nó¹,3ۼåÑwÊæÝ,†¢®mÓÎâ$ØØžŒ%² X{êãGÅ O5¹Êø¹Øܹé7Z¿aéY³òuð ˆL‡ŽaÆÓÉ–"3lÖ7UU‹ ëºÑË—D#%¤ˆm9Á¼qƒkÂs¸ð’"0Þ¥]s{«š5]r»ÎìnQÒ¹s%uÝ$Žs#æ¿›^6¯Wu¯w—Åu¾+¡‹O{®ÙÀ…43ÃleƉÈe«#2û(¥Dš~ãF4­»K¯£Ù™#,("Wü4Rn‡M0Z¬@Gô¡€d³ŸÐš° )p3ƾÜ@ãš:?- 7Ëly™27DUÕ ;Õù²6 ö×ÆÈê/mß®I”ÐüZ‘QB«Ã¶¼,ò>ü)Äruj³oQß#,¼‘i›aCG/ð‡Ù5 ¦yæu혬¸?‡|YH)ɨ¥>~Ûõ9é| äíÝ­Ó“_J‡,‚xµr·Ñ<›·Ö¾KÛÝÚ·#,“Þ̤lòj¸èŸº»ƒí²•­8²˜Tú)b#Œó¼}¯Ï:«•&ü¸‡,ÂH _†Z‡Òm<‘_s(WÞO£¬,‰±Èj[ÿ-‡žE6(àÇðºÃ2b—Ñ×_®™ï~n¯$7Ím‰Z½&#2”*‰£NŒ¼Pâ-#2¬AË@‰*•{iX<ÙZøWø;(Êü8®ÑQQF¯–MFñµS$?êýµb Á c!”+Æ‚†+»Çø¬;3DR5A)AX«Óoå¹ 0ˆ‘ŒbSQIðîÜ®÷uVé¨i%"÷@Xš'+¬¥&D§)J¢‹šå¢¶/]ø·¯W‘)VJ‡µÜ±h¯Õ-×»±øºãE ¾~½þ·Š{÷tuÌlj6M¾gÛoÔK}Ž‹>Îìaôä÷oš`4¾¦E‘¥h;q¬5C—2ƒŒbfµ³V}é&Aú5Ÿƒ­»(dk&Å}]Õ|_:9jç½—†ˆ‘"˜,5m’è)J´„âÚDí¨C–´ð¢hzQàíºQL¡—UiNÍ-wÕ¬üªÔðХ߲œœ²ôî²Á‹¨ÀSE#2lÃQ MZD1Š>„Ä2Z~ø£GvˆÅ¶-5mãe—¥Â„S²ŠŸD+ b¨¬N¬<ÙkH](©É#2<*žo±/΂–ìãˆûã˜6ŇD› µË½×2ÃØqÃëýÐøçzˆrõW~`cí su‹$ßœR׌#,Xe†xY`E#%F#¨,b4¦ü]ÌÇëw´óM×W)–¦½þ¸/Ÿ¤}àGyØcøÉ-SL„€Æ ˆ÷µ84¦µöÕ¯»—n~(â=,¬¥sðÍýz 5ÃI4#,«É•î!¦7ž²’\‰crFÓD³Ýaõe» Â#,œn#»Ù_óMŒcRé°GÆ.]ŽQ¤LR1ø¹•9£Â©Ô§J¯#2Ëœœ(œš>Ô¥S¹?_;ç›ì°HƒdÓ é¶~°?]…¯GĺùcŠä¾iÕØÛ–ÝöÛ·Æ”ú÷¢MŠ©øâÈZ°‘ò‚¸lLçCÑÐmJ-Áî9Rr3T·ÞHÝ‹Å”/CåHñáaÎygL1¥óN”8žrâø\É~Ÿ^u{Æ€xÙ•\HÎpÊ6熴zmï*'Ú©Õ1Ù»a?>·Ô*­Fù”Œñõ•¾Z‡4¡&…Qøý.ûS2 Ýk¶þ6Ôâxñ‹¡uqÒC¢6:D}_&ŸÂ#ZN¼]•ëed¢˜#F¢“T×¾ŽlÏKjƒàλaшÃp?,ä†0#+‰ÈG¯·)9”4è=Fj/nvfgÒÑøó=½u™Â8Ô¾ß(SÀùz^$#m§ÉôZü<¨¶ûäkO ‚3è–jœ0Vµ(G}öÄï#,ô ¸áÒÖ«ƒ²ÉË#[“mŽ=@Ž.Ú.5êíÝÆÃrÉèuµmžîÆÛý§Å£\ÃË]}6´ßyŽ»!$’"Åíæ=yR‘øÔ`ëM aœ~LѸnÇ7|ßÐL³¨¿(HÓ ¿orjÌé›]õÛ«ÎåeUé(¤ÉqáÂé¨c¼T˜ì˜í§ @^†Ç¡hôÒÓ»œƒ+åkn5¿úT^¶cm†ŶÕH‡q¥ÚÈúý¾¨¥ò¾TJNm™­NÚ÷S#Yõâùä6CTEMØßÙ'ÓßÓ家´ë¹RK*‰É«*VØ_kBŠ#2#,ô¸†åu뺟Cq—ÛêêkHLÑ(S#,ô¹~- UKTWý†¢¤&|¯ùn¿ïþ÷[OŸáÝx꒾梾æb[y'Š´Qª#2(®¥3æÏA?ÜÛ÷ý-¶ïŒO­«rÆýLÊÏ©ý\çž(/§r²HŸ©š6…­àª½†¨×e” ‡zª`@bX+Äú;\}£e2™Ê`Iªiª^PO¯-nô†™ŸšX#ä~›†‡\mƒ¼è¨Ï•mr}iÕÀ³#,DæÙV‰ó¬Kœ*^ÝL’ÙÃ7õ€uêíÜXv ™ió Š‚:;µÕßŠÒ &Ÿ›Ž„’þ(ÀÍû3q󢑚°c‹##2Nrßk•‘nSç¹£÷tuO¯~™¾$_®Î抠Êsß¾4?„Zu>v.„Œ^1F¾-¿WšôÑmvÖ#2cÏÊiúÜM§®v™]}<°{sÒçÖ †ÕÁß2•À® ŒTSó2˜ëœ]Þ0ì;„C²ö¼ifšDMkË?A­Pø0/¤#V¸¨ÇÏš±ý¬¼å Ä-€Š­%x^‘šDES#2‡‡è”ÛÙUHx3s0)S»JÄ:¥xÑJîÈØ·<o.¤ífHg„+Cm¬úê©·’<÷Ú#,tz²8ï5›`BüéÙââ…ïuš(¤¡`ô¨n2_­£fR¤Dbòà:qúû§Ž­ÁþÞôÙØ,P˜:Œ–Ϲe(+vteFW=uëá¸öðÊƶ& :F‘÷ÉcÓ~0Bi¥y*éù'ö¹æ]L³u¿ªßêgežÚú6i˜wd~4åÍöÉý,¥óvÌ"ÑGšóc•îˆçÙêgd$™”¸rkhÖììz‰ÿê¸^×;¼ëøæ[(/ËÂc#¤ÎMýß*Ü]]ǛšöT¹4Fz+j+g1U 1Õ!Q ×ÚYî>°PŠ*„#,Ê¢2,Sè\&¹X±@jŠ9Ô¡ƒ#%Éjô°Œ÷ÓÎMô4O|®®Ö‚Ë$’½ªÞù¹p^C˜T‹a½#—â…Çڇ±3áç‡?N6æN›¼£ýˆáEüÕK±)'.:üØo¤1ò÷>>!º?”?cÆ7Žn&¯Á+5ÝÊŽ6PeÉÏ7Ωf²»ë µyϪ-Ç_5˜vʇGžœ/>Sž´=°:%o.6ºoχ1û– â‡óq·×¾%¸ÝµoDeŸÅ|3ZξWX1òæÇ—íÉÄzÓó‘øs¸]Ó('°ÒŽayzŽƒq©+¥µL”GÓkš|¼¯g—§+0=é±`•MF0T٧ܠĂ&®w"”ù}°Ö³gØiÕTÞä¤F¥â_?ƒ±Qž,mo‰m¡Ñ£¦§ºÅ¾%ŽC{³åŽìÜ­vჿÂRåfµ(YUG \ŸÃJÝöAæ}¸öíÖÆêªYØòäŇtj@K·ë€GŒòŒØë9*±‘1Z´ceC¹ê‡]3®!»j²ðÑj+­3ÅDhŸ•TTÁó†O*e8T!§_׉% ¨­9Dæ9Ó©u뢇«õ2mŠu¡V±FzP«L^oácßñ28mDzXÆó-·ðž8¼µÀ<+½—f—JøãÒü®– —«qÝú_W#,Õ$Uh÷cʸæ1;ÜÂõ˜x< •”փܛùªE''Ni<·XõD}S¡*¼Áq½Él‚Sòy Ù@isoåŸHm2LˆMå»ù¹d{šMybÉZÞ0PÁW®j^¿¿_f#J<Y˜*1b,þ.™·±*ª',cgUIßc¤±1Ñþ”T ï¬Ò*2ðÁblX’, x²YˆÓ Gø¢ß£b‚ÓY,HÓú¾“S&BîñóÙSR´ÿ*’®2Ný¢V®o;2ûö“(7C¦™v¾—†þŽ3Ö1.…m±þ“É+ûQeëyB>ä~ém}6ÇXŇèÕTýPŒÝ˜Ç’7úbðnþbôŠ#æÑC7mDý¥?†´›V]6k)0úiFM²ª…«ãA`«DYëO^;ê+÷8WŸÁlŸ¥X6µÉ nŒÔ÷`+ò£ñ÷PëGkÀ~Yæ–ª}©Í˜Ä䖖ǘgjÏœŒr PLoQa6›àSÎÑq 6@,|7™Ö×¼®Ó³¯ìv@©í’ù§´•Ù-›íG:ü{¶ÛH~—€!ºpLÛF#(KB‹ˆ*c*kma±n*ÀÂèQíÍN©LÅ^ph‡&™–ùÚè'ÍÓ¦K<˜qÖ¡‚Íêª'–4VÚDâO f8Fl‘²ãUóìÞðlÞOÛDõT&ANÿ7?’hAÓ0ÑψfÍѧk=™uò—BŒL“£ôÛ5˜ˆÚó‘s­_ÎÊò-"Q±DÍ@ú²vÔ=`Ú6ø{mû£˜ÊÑ°Þ9žýVN#,ä÷A“ô„£§OkM3 ¨î2<ýj¨ñ5€[*Yû"”PÊfª´©Ñ˜Î-]Ô=.µ@ÊDfjJª% UÏÃ#y#%Ñm  ®){Äír)qÕuÉ×YyôìjÁX£ kLFéoñùwÙê§Óócßîìåî†x•š–lI>2¤’\’#”¡Õ{âS§#%bŸmê‹€¡ÎzÍG?åìÚÈQ·Ø)û@Pveòóç¼ð½/ñÜFÄ÷ä°z(T 9hÝßõüâ_ÂÜÜ£<Ti>}+_T‹yþ'4ÀŽ)˜Nq%울 (ˆ8˜LÍÕ7Ñ–ë ¢ÞÐæ*󷺢;yÆT¦6kÎ êÕaÖuuBC5˜<áÖ3¹oÆî’˜Õfî}œ®¦i¤¥Í”0;™ú²Ÿkvµ¤2C8îù¸¥Ñe»–½-ó´m7ClƒÅ¬ëú®pNm~åÊÒ»*se¦Ü™L3•‹8«|Êãýn®#%úÞÁ®ù”}F0ÄÛ#%Íæ ¸å'E<¬åÐ ¤`4—Š*€aù}·?^•º­Ê#,0qˆ¯m€|42eoåmÚàù>÷UÇ˦.òËdÔ}&ݪˆ%”côõB±Û=Šò«<©Ô÷œw?üEÒ£‰F-Uú ËȳܠD†ùø†ƒÞ´µ,Üû(„iÜÂâ5#,VG¿ò™ÚÇ$‚åÜZ‡>ˬ;qˆ€¯«¶¦ãxºæ­Ò¨…ÚÏd§·8êåèŤp'y:è‚G;žÖxëãrO$¦É0ÍXY+iBÆq©É½ªÂÍÊáÈðÆ’Ëíþ†óÔ-­4ºD¬Û÷¹.[ ùŸJ :÷ïW–àj4.²y¿&¹iu“ðÜ|Lh¬”_sÖr2NÝð÷³ÇÂaÃŒ4SŽÕÁƉ”ê¯VÛÝ{ã6@¥`¬Ò4ê1ö¸›îû¬¢“,¾<:A-tlôˆ@œN,¨æMCJ/,Ä8‡»øwþÁ™Àä:]Þ³Ue×*£-':&ºò{v{h ¼±r*“™ ÓJ<ŸoÊÜõ!a™pá:xÏeÐü;ç°l°ðƒƒQ¼Õ({۹˵m§"—;<i#%㙦°j"Ä(I¡g(Nä·X¸ØµÏ+uìÜÆ(}•;MûNǸ°PYš vf«EG¢Óä‚Žímn/>75ÿ]ÊÏZ2ä_†û[7E½ïŽ›Dy–[žÚŠ#2Å(EsÜÞÊ:h;E™lÝ‚ËŽ–ÆuëÒ$¤é–K€ÈF— V`›R6Õå9X}Í»BïîáÆÆ-ÛR ûAÿ€ö#%$QÔküýÜGã¦âB7¹³r˜ü÷)ƒáŸ9ï|y|0e6{ìêÒðÃü…Í¢–>(ì:˜˜ä£ËùKªéBBÅ«*`³†#,™[÷;¯‚…>¸#,’)#ã@—ÿU~yÜðfÐHëH»èTEÝñløQ4öü¿óqÛN\ø’¯vŸð#LlÇ܃BÛT`Ð)6Ñ4<V:wÌwA &ñ訜`6_Hù¨é¬eG-/¹°ºêþýiW‘”¢ºf¿ÜQÞ°)^tqö—ý¤ONÉ×£˜êí‹€´r¾‚4°sâex}—JvôïÖ°K½z>Ü5a;饊ñ¾kΣ?]rŽš·EöÚrQ¨\¢èÑÇ 0xævª¸k8#%í•a„xe€é?-3¤•ÜzÔïzM)ÍCKv ÷ï¦þQcãLð˜ðr9TbO|Ó¦Q/ÿŸåk©äD[é·ž3z3Ó+@½4ÉC«Ö1`íÃ…1Ø íåò,‹QÉ[‘ÍeÛU¬"p#2”A™Xçù¶ºsk6éPÎ#%‡fž½Ø÷Ư]‚ ê–X8 C󔳸Aݼjçþm kŸÔÃS¨¯ù2˜ß»Ð_úb5ü—cõnËÆFf¡8%_®õö‡Îô†oŒ;2ëðÿ’ß//G){#IÉë. W‘ÁY‡êe †= z=v°(qÌÔ;¨ŸXU~D8ÍûYú<xpå»È6pý#% ·Ý¤$ÀA7ýŸËp @ @HƒÐKý5ë¢k–å9Øãáá]UGôZY"E6I#ÅÛo*9/„QÉ?JuœkÓm-Ç6ê<>-^__¶£§×¬m@'ò(¢ù*÷z©|G´§_Ù«[ºl1ä1øÈ6C¸™;‡7Äþ¾Pq9»0DR #%À‚„þ_ós÷ÿO"N{ú~«ìÏû{q·uë¾PØ6º!Ü#2"#,”Mq Ä#%ýYGïp¨jþ›Ûf£ neEXQ×ã›.cþmظpá¯ð—·‚$ØÅÎê¡2(ŠAúJ›‘€~íëG• )–"éôˆ/TjÕ ü9í%Ö]~g7u:Aí–ò‚µ`÷#%AžoôÚé°ÆrÙ0Þ ØFj†Y.@º*"K‡=œXô3 ËÇ'ÏRgb#…¾šUzÀ¾F5©µ^1€±D©ÓñÅ&c#%%;#%1óÛoÃísÊ°ý¸é?ÀRaùõþ¹~ïᦳ>õãŸü¿­Oøf'ͤb£ª*ì„bFß¹øÿ <Ú]úÔèÃRËá±µL±Y|SÜ܆(Hù>§ul<Ѐ^~ƒ_õ 2X‘H;ÁÈ#%X Ÿkȵxz˦©¹ÿ.xÀÛ9¾}:ÇÓîó@aºÛ2ŸÙ¿6Õ4ŒÜåßj]›´¬:;ãú®Š>’Ÿò;?v`0é )®ÙfÛ×m¾¡ß(þP}÷ïæQœ+èè~7§wîô¹É(=£šco>{:ë±1gŸß÷ë_—ÁÉfª 0;šüJ¬‹—¢ûÒ³&PÀÓ_¸û¯êšÝzËXɲQPñ=§‰Ç—êuߢpâºdÍ~}¯÷ôgS³wÓ>¬XB§<ÈIÁM•mGý‡ùubœÑÅOz¹ðþ}¸'^Í¡c®¶7B ª‹W‡ €f âr˜\«pw®_`–íÛõE‚TÁÖ“qÖžêìØÐii5$Dè?ãäÙœ³[Ê+Yý,2#^Ôe4ÜíãV@‚f붼8ŠP,†9UaGm–Ñ¢%å„ ’šÈ@ì7k“È"‰%y”zËxþûÊÂÙã2´J¶’PÝ×z¨HñòÐéð͘¬PaLYIJ¿7MC *Å‹Õ⮈þ¿âÞ*í‡cPÌÔ߯VsÃsÓèïø½­$ßÊËj¤ˆŽ¤çsøõ.a'‡®°cµ¨É00µêSf·¢‚öÕ’`zklûES¿Â±alÃç§ÃÅÚBêcýö_FígÉÚ,[3ÂŽq1?&òµHuHô‰M™ÇXÞØ ¤­Ï›ð‹)ðí>˜“ܘº#,a§¿O¶#,Ö½rÚG(zØ mԜ㬆0°ÐÃþTu’ÂÞD½#,·ßÏ^vU(¤(7®¶qµTZª…d·ÿ§q@!UÇ ¾Îwáz;‘/°7ÇxºáXþùä –!!#¡6Ðýu¦;(JHëæon™„õ|Y5ÖCÖûÈѸäwJÒ2s#,V‰UžAf‘ÁL¯ÑR#%bM|3ôÎÏC÷:ƒÀßëäVâŸØ#%žtn„Ð’Œ€Êçƒ 6ÖR2ùâßé&öôæœk*¼(cé®~ïͽþ‡Æ„NIŠwSnqMñLöYjÕ#%îËË#,$×ö^òáƒ3ÇöðÖnq©6%U4Ѳ…¸–¦£0Dj«é#,ïÊ|©½.üÃÄ°:àxMÖ£«RI|ðcƒçç´³*ç.7Ÿ%^tB:öÏÇzþ—¨3×|¨½Ð¤FèQë‡ÕáîjÙ]5e‡%.„T¤ïŸq¾ þ»3+8ZåÍ¥=üµ”ÆVGDwïVIBÜwîªqÐHì:ù»úW‡Ä#,Ã}_OçÎ,v8•ë#)&±#,Ž~ôÁ.$‚Ú¡M°™Új÷Q釤  žÜ5“˜ïp¬vþÇÛ…m}M‚îsÄùAB)2MBÀŠ·L ÷¿´Ü;=ñ¾úlŒïešÄPé#2¦h˜"# _ ßzéôùÍ3ã 2&ˆBžÑ…5Â6‡…ܦ2,,»¹Ç|زØR¢"ÈQˆæY…y`A¥+Ž˜:Ö4Ž{ÏðZ¼µ¾ìæÍŠktÒŸË00Èyk¯W–f»Äc*DX EY'ÔcLmXêpÎÈÑ]Úð½6/g—áüÀ ¯ I°¡Õ¡!"D-;¹Ðp!ý}™§Gȸ7ôQor‹´q#,Ù/ÁÕÁ3ÕG ÖeäíA  Æ b@1@00À¨#%¬¨!¬ÝÚ)Ƶæâ"]!¹¶hhRv»*>°½áåÃ@z •íQ‡NUáH¶† ŠÚ­$—Ô¥º–”*r¢Ì-,P™G¾ºìŠ;. ìsw‰=.†wª¿L3È0ÉžòŒ´j”†¡1¾‚sŽ©DÔéμÈr¯ö…(ݽ‡Ý!H>’ÕÀ´^k âR˜;#2(=xˆq¡”Õ#Ig»xÙ4çhVÆKD"e˜¡ÍœØ=Iȼ•]7>Æ=xôÇ)¸áÛѽS¥ÛÝpýtt'çš‹áë:TPýQ£ÃîÏC3ª(ÒÖíá#,PluÅ‹›Èkqéó£Ì±œÆˆpÎæ‡#1s—¨B˜s”n¶‰CÕg,[÷êç#2]¹P3y ÁQÓ'«ãÛ c­zÜôcvˆ¥!#ŠV:;ͽŠ:y±·£Gª6He­Ê;>Féç×ã±æ½pImÖ½¹ªO8«,›}YEÏy{^ÜIfxOÐpLÂÅGŠàÃö?q”²‹DYP™¾î5`!/˜2Ì^‹@õ{¨÷OZÎcæ\ff•€ W=ï°Î=Mn æá¶kð!?"Š;‰A8°¶x»¢€=µ#2Í–2],P‰zî×wžeÚîî´ñÙŒhæé›rÑQ£Äøù÷þØ=“ˆÃ¿M4Íý6Šøò¾éª^±Ñ¸ú.`bš#Bm¦¢!I Ø5LUaL`ÆÑ•F ög·ÄÑ0iP¸”ˆ"ÓH`b#%ô:Äàã[Ü5Ï—‡}q&ªóã k1ÅËF‰HØv½ªàÔåèàqé(¤í$ÿt“¢Çcµ+Úî,üeØ7ª#e³¥R­Rûxš}‡êqàdÕÚb.6Lj/¶ù77j^&¨þ*R˱Ê!}9§!‰8TT)‘h7ÎxÉ«ª#2x!¼ˆ¸1BDõˆ¶‡}Ö5ìé¬Ñ%·ÁCSZ¥\#,nVÙ®~=·¦Ë´.Òã)Ý¡AñHøõ†;U·ÖM­S«hòŸ_IÉKNÀá®Wû»'Ëãеç[l3ñ]y¾ÜaŒ©3^}ù³‰çxú5¶Î8;x¥Îˆî©2S+­‘ÒѦßõä©‹^h¼3Ù'Ff†¡î³cu³´T74Å6LÂVñB¼hxªìT&­É‡˜dŒ5PeAŒ£[0¬aX£@Ã…£Hý̈3#%ÑZ\´±,qbBfÊY`@Ë#24`Äòãõ§iÃÃKêÇêؾ]›ôç#2H(l’SF*KÅtÕé‹WÚWžý¶äØÓ"ŒXš2Ñ·²J6Ò­#,¤Øi ² †ñŠØõÝU0Âbµl´ IL´P0©#2B! 0 3îí™èøõnŸv3;„‘¿åãÝź¯~¶`+Ef,Uq0…X3Jó¬óÊZ(¦5`±|]ƒmH!–ëU#Ø€Wâ)|ðÆÔÖ@zä°DK@Œvœv á°[F âölò'ðžë½7í¨w»tDèქ´{c^# DÊ#,äߣPþ\{›”€³¢Ñ7`š•-ѯòHzè¶Ñù<–èßB¾AÅìÓÚÁÅ;âVð¦ðšH3±öËm7P!fGÇ*] %·m¬)b²KoS¾‡•Ïá©rÚÔáÈ™ÖËWZ 8Øc@©|µ›â:_i%­IùlÎÁ÷T½`‘Í=Æï¢Ù¿U¼ØBBþ_Ýh1÷Fx^9Ko«ã9ø>øs÷‘4èQùÅêí€ì'ML¼'#,&Ñ”ÝHÂÂvÔÚ i;| é[¾¶Ÿì¶aç#—üû<u½“csÝ—MÖþ@ jýºÌ÷™I$¡¸šèémô†j´•?H°„áŠp@i¿fÏYy#,m ­RQŠ‘(00²Z ÀîÇ.³a½Äp{¯ˆ¿aê}¿TJŽÍu<ðG‡ÁÕåEjÜ¡ˆøØ¢Öˆö%ˆ#d¶{Oì9˜î@ÉÁ(ñåú4þ‚ù#u¹í¾ep„* 8'mJäÂU'öºà¤ÑMýw §r­Á·÷ í˜Óä^tNˆ¹þ~Ù-˜%#%“#,¦2!Š Gy;É«"+ ѧJf¦ zRéY% ‹2h°†„à:ÈØ6²R(ÇH¢Ž y’*Iº†[û®…ÀMH†Ò+J†ÉvÒ#2”’jÒ7—lB”ŠmEhÒ±dt(ÂhÜ1bfZT˜q¶àëÐÐ;F¤ˆÇ¦a¢A‰±!ˆbÓK³#,åú}Ü^Ïטq¡%Zl žv‰g¤Æ#2Bc5 h#,™Ÿe35Ò·Í©#¹pPÒ¸F‘å.Ìðá¸4vM³sŠÄÕÝø†r‡³\dÊó¹\lä^¥&ŸÉÊ‘tGŒG-9Ì3OäGS(Ç÷þÏ^V3¹´w¨I3Æã"–]e¥w#,rÚ uŠì¾˽Nóç†ùóé Ç p#fâ‘ ›Œz܈ñ×¢¿#ˆ#,Ê]C“·k–Þ£Ììó³ðâz™)aH±‚›€nŠV¿ØrðuÆŸŒ&GÉð¨ÁC%9ȳµq›„ùCåÊjm·}ø(Pír’õ’E)"Ô…5Íâvyrn.#,lGHR囋‹Eÿ}©e㺇<¯¿g¼~m–q#Ö§i¸>NcUGEæÿÛ¯mÒdÇ&#,<É a0NÏŠsfEÛ‰²Áàÿb-Mù‡Çö²Ú4óY,Ħܨ҇ZéEX4èçE \×O7¦AÆ,÷©@¤GnP‘:è´OÊcJ­:7 Zf6O+ù&¤H-‡vÄÆeãã˜ú.ûûòü€1úyc@öýš¶f±¡3¿¶ÃUÕRÓn11¦ÆÂjDd Ó~^R¾¼*·÷‹˜q}/l†t:¤ã'ò– øV§Cû#27³ær¾2©îʼnùcá€TØðf#,¢‰B–Zô¶:»3ÿ'V;ÌÏX 퀞ʴmzõöê¬xÛàϤ>¨^ÛNþÒ]#Ó‘¸ûKs8f:­FÄ!Žy÷ÓSh²iN³8¥„EˆÈ –æ­t²F®mÓZ-¹mºi!¡ŠD=hh³ÃÈéU²î‰a#2]ÂîÊÓC«0‘wúmœy ¦fÖ¡Ìâ€Þ+PjðÅiú+ÿ Ù6Èl&©ËØžÓÚzÂxi#%ò %#%&ï.e¿%nåtX{såUâ?soÚõp@~(Mû¯kkàø÷㸠ùBýþu.Èu(pÔMÑ °bh3öÝú¶ÄpütèèëAfÕ´„ö½RÒ9'š"ÃÝQê;ø9¿<6ørá‡ÉÑÀjò#2j+ãÛ‹¬~óNÐjú§µ3bJ±V#2&Úù •ÞDì'[Ö.dõ¦¸þõY%ñŸ‘þ…y¢ùªÉ' ŸTWfBƒ“Êàû(&esày£Ã¹öCËb·t‡.Kô4w¬H–Œè1YwÁ|>ÿÙ]¿#,ã«PˆÙ |’÷þ/ÕµÞ+,£7=·uô]:Ÿ…xõõ¿òð¶}ž}SªÝ0ÞŒ<ÿͧíñýÛ:+]·‹ Þ~¸`"1€Ú|Z˜ {ÁÔ¬ƒ€‹$#½’Hò—`ßw¯˜z4IôK®¾w[ï‹òz: ³îÃÛîžö6²’1e‘ª1ÚTWÃôüÊ1Aæù~Ÿ£<%Ú(ìh·‚C‚«Š)Te æóÑW“8¥ÖSn¿©Å[-I[rÂØ}ßů÷P×Mõ#%&/‡ôÚ²I¯îýŸ£¿O  Ί @¨ K¹wôÛt+†=ŽÀx÷•õ§tdzê+â¦Ç‚~,÷bLO혩R* ¤Äg©ÚÐE3jK&‰1›*X”_‘ÆbhÓb¯ë—£¶íEËw:íÒ®[À—÷%#2’þÀ>SpìÕúÿ˜¼´ ¤­ŠL#2òçõ?‡,· ”Ô]Zm¾`bPáŸ}öy½”jñ ‹›w][©W-‚yÕÝ Øšüºò¿¿Ÿïêjý²°Qr‰hÔäñÿJ@ˆ‡Ï§áþN§¿O¶²ŽˆÂŽY›²)£¿¹k[›F¾ë맟µÆýŽ×J:3#Þ'$!êÿA”AVD6Þ’FÖù-W“kW­ê(ÈÔaûÞøÇCïp¼ŽÊ¨ÛMˆÄãK0…É5@´Tª%†M+ü†“Gôíä8Á¤?ÕU;pW°¬ qþÛœò­çüÆ-X}Q–_è?–ŸÊՋϼÿ3K¨uc BÑ‘ sÙêÕ³úŽû™ÃZ°#,ö¨ð;`"°nxùiepz8yù.'#%øÅê¡B‘C«¡h#2Ví-9ú[­]èhl§¥!î ¦é$<곸ÐpÑPÂýpÿ#2ZŒAU  é\o¿í®Oæ€Jí•#2(Ãû—&›ÖT#8zµé… cñ— yËþÀeoÅá?Œ±ŸNõ&*Å{Q?:õ6ÝÙÒŠÂB¡ý•&‚ `‰?¤Ù·?ëÙ¡@õ0RqéAò#|ø½¿tùj—óyþAø]ø~Æýoö÷ˆý?OÔ+ìê_'$Ο耴9m?Ž¦2·õ#,sãw¢‰¥ž<ç©ÿréôßt¸ýqò‘«àÆ núOÖlÁm9ó…㢭ùw+ÃñϽG@R-Ñ`ÓÝû"à:D&HÀ:öõ®›…Ô¬çÍbÆGœ¹ÄL¯—D„OmпõÉGß=7›’ô,kµÞñ=~x…ÜË´érÆnþý>(ø·IµR6»ñÈu~Üàio#2èaÁÛ{ ‘»gŽgÃÆN2ª-YSÕòÛrCø(#2‹ù˜Ó>0«ã‘æFoZRÿ%ZX|i­üÜ°Ê`·ºüZ™|I")Xï#,”Ë ›î²–;Cœî}4ÇÓ4¾Pdê:/Ñæp.Q³ŒŸ~9ò—i#,xR_ ŒÅ¹›¥H»y(â>£û¨±9ý‡å?QûÙOä3å˜Ï¥c„'õ„Уÿ0,ièæa×óÙw”<w H†T—‘¨ýOç 3r‚ð$s#¥óΞ~¾¸#%ؽ£YX7˜DÛNÂ$çoÚÂçôõíµÇ3—ÓŠ–÷"“¤ëqàý|m±X¶ï¾nè?$é5;špòëj*©¢³ÔB''5=Mž…û»THOßeCÞ¡þRû3MƒÄÁ¯¾³Ù©u–‚·JËB±}lþí?†›~Vû&-Š¹1!1ï! kœ ÎP>2HÐDh†“)»‘þ:£SoêÿGïgHþ¡'m“¯Ò¨¿Z]Š#,ÿŸ\û)ébIŠÂ|·øQ\F™Z Ó¡ ˜Hl}zM=~0Ÿ9³[‹õñŸ‡éøݵé#ä<#,,°°‘ÁF–ÉA9Ùį¡X“¯TCiŠÕ áZ¿V3XÀŸÅÐõ~nÅ\¡Å"…>#%>rê:kMO;\«Åv}»rîØwvO;ûxrÖ?âFÉF–Äþ•7óCœ«µ.0¤¶ )„.A ~ôïp‹x ¨¯»?¼Ó<Ó¯]ô7ºç[dä<¦œúðçÕüº»ýþ/¦~¿£è´ú›yuÁU³ÓÏì:}TËRkù¾«,¯b?5}mœý°W®Ý#O–cIKk¢üî\µÙØï["ËÛßû›Åë#õðÝ}¶?Eº{¾Þýƒ~ߎ\·Ø!kÊôÃÏ~8EDµUí¯ú?]Ráä>nåèã&÷ß#28ëpboÙŸŸCìv诹ZSyŽ·jû·G÷ðökîôèÏÊm‡y²åžŸñé÷¸îÓeÁEÂÀ2wgŸSëÕ=<þ¶ƒÏN‹qÀx=†þ !÷§¯ùËÝ}Èä s$“â·ô?¯n‡utc²’žÓeü‡ÐôßÇùÞ9”Ù!-2ãÍÒɈòÝl¡ºîu²›âÚqç{^û1¹“¦z<ï›f²Öv¦_5iëõëû#,®ãÕ’rãùÎØƪÚþgR=o¡çÙ·Lnµô£¹ï倶ð¶žçCΕnèÖ…Û.éjõK@ïœ,m¾ýÖÄï¶Û5ÒëºämÁ@ÛÈ¥(ý}ùÙJ‰y4ñaóÆÁÃM4F£Þ0¹ÏÓÀF%Ì.lAÀ>2.sº•Í?Ëñ9ïQ§šÌñæÕ'qôrãŽÛ||9aäßÃÎwk&éc½Þb%ëõp•Ú®¿º“ßÌØîÙ¡¡ãPàˆ²k'w•Œ†þ4´èõYŽUqI|:€æzx¤¬Déâ¨Xiÿk¬1Ýßïök|G#àef¾Šu¿„{¿7Œbìã­]ú9¸ý!6ŒüþŽ¥ïýžïG {›|†·Òq˜q;…5ŒìˆÃ¿lmöCj*¾ªïºÊýz<š¯³§KüZ…µl-›;âóÏJúpØÉôÇH`~Þ·»RC%Ôÿ ^eö›TVˆŒi‡Ó' USVüotvÊ[ÛØ:Dr§Ûäþm¶áEß¹DŠWåªsâ¿WÏ¿W ¿Øtä/m†ÿËØž_çí÷Æz}¿†¦×´éÆ1ô¼þЮë]×z/íǵ¡³Ü„ÆiŸ¶s0ƒ/f±Íñõÿ.!Aô:Ð}ú^9ŠâvaæøWìÀu0Ù¦Kì[Gͯ‹¾gÏaÑÒæÎ'T›ç3±ÓÍ_þöw^2lS –7µ|’¯ý~ö†ÿÑž„pÃC"§%#% Àñ8W–ØÏUžïgñ­ŸU£Ÿnx'ÀþÓðúÚÎí=Ú6VîPLƒ…;þ9úý5î¶ßäTz5ÃôþЊ<ÿ¤,­sºt#,ò¶M.ß+¿SS÷û¿rƒÜ Cbt—½‘‘•Ûý¬ÂQ÷uâÕû=å9ºwY…ü寮-† ÷îà×áö~›·Éþ_è6ÑûûÃÀТÓ€tÆzÉÿ‡Õ«AÑöú‚~îáÊž~‘‡Ã_æ÷ÛÊþmÑîùý}™÷ }ÂÆf×ßÖ;nÇÏ=OÔw}æý>–íËŒA¶Î­›-]›&Ëú<æ¤.ÝHœ¾õïAÞPhêì±ÃúrÒ<~/Ž}½Ÿ·]ó¿Ú=ÃóŽ#¬yðçòùà.[‡Slü³3˾ø;#%Ùúõn±#%PŠýý×$ßãaóXš:Û³üÇ#2u[§òW7#,#‡ÍÌÕ»ñø¯F±Q³Òœ9ã¿ìÍÃlÕÚn0ú|¿:ú>Þ:S厡Aäþ/ñ-#2@†Ÿ‡G6Þ {ÇëûOÄ–§xñy8ŽnPåVˆQô•ñ½€ëþíëc¿ÊÚ‚ã#2`¿É™«–+¿÷¶ÔºÇ%7þäãɆvyéÛûûú»×ˆ»o?Oñ‘çݘ±_ÒÜ]ˆ>k;ù—G'~Ùï¬É’ýGÇ;iäš(úOåûð²"„ƒ¸y<P§½Tc¤áá1}ß^Ä7ß>=|’:Ÿ¾#["I¶XTSâÑ s6–#%c¼¨NL‰_EãUI{0¶Z¥ÒW!‚% ™ ›ÝG’¶b€QqªñG4îIçB'#¤®ÉXκ#2`ú&•èdž™×ǵÜÞë‹ÝžxS¦î~.¸qJ†Ú¥Hˆë`Ài}vÇ©ëãú8Í-….j8Šî^À‹‡®fp$–:‚ yänÔ>´Ûú¸iÛ垟ŸÖ€Îçú÷þ‘·»L8ØM{ºX<ãc¥·ÞE;A—ƒ–`×|©ZQÃœñ2qèǃ]kX+GtOŒ§6¬ˆrÊÜÆÝï|àÜÖ²òÙÄQ9\èÝܵÊÊl,mŒKÌPŠÔÇøçµæïõÕ÷¨¾žjèÓ‡!<yá“õ‘{š\œ%ã xäí4¬ƒdò¤kÅÍêŒ$$’vYgÆÔ³p$þ[Ƭ÷$¬Óé kž)nAuèAѬ]¼[y½8Q¢Xá¢qxŠ¹4yð¯{ÆŸŒQãàG¡¼¶ßs¬øÄ“!ÈHBJNâ(Q#¯s⇈ÁÖ}ƒÇ™µÌ¹—ŒífÓ^ßvM°Õ¥ž„|YïîH<G¹ÛH ƒ,~]•êäùõŽÏm¢ÃH¢|Z<PÛ¥lŠí#,Ýe*ùš¥üáSé¬$éIÇœŽw©Ö Ð(ö‡BMÿ4û|†¢Ž½:@­ú¬ÓÏ£¶Ù_]UþÎ÷œ¿OçiR9v»†ê[õN…¢yó&LÏï,|·³a¸õ¾.vŸwÑÄ8û Œ˜x¼Ã`#‚aÌ/Sâ™Ò>¶ÖÃÊyåþWC¨¥åg7¥Ÿócóæ›næ¿Ñwž=`õ©Ú’Nݯ§·>›ú©;¤÷F!î­Ž¶cË•á9º?K«g«$ïñ~¯ŠƒG¬fÀ Ðo’õ½„:T’W–#‡ôíšTOÜÉT§,†$xý;ïÄ:¢d”ò—áê+Ö0È#%QÙ{Ll/Ž°1VñèÎçùþ‚6C'Áú?Ù-Ff\ÈÚ–7a+,ƒDpaSòzTcZƒF•A¶ÅHâðMJ*Q&íˆÑ#,cqa ª­(8Ü#2*"ÇOß»Si6×£Ó8kMjDöàÆ †°°ŽÅ-ŽÀ¦°Aȱ¬a¦ILA«"hhn„)"–4±[VWŒc€ì'Ç#,Ss¦ ÁdÞ!IUPßñÌÓ|ѱš›Jí„õÅhá“iÖ'÷~»ÝoG|ˆþ,ç1  úwHüV¨¦xMf@zÂkþahf ä®¢ÛשÈN¤,;#,Œ.EÚL°ˆ%.«÷|7þûÔþ?Ý?U¹ G#%çëÈìQMF2DHèé@ŒÖbí¡i7¨1lXT¥Q&FÈCV ±6Æ›f’J•Tꪀ”-m³öf„Êq·á—ÏäÆ噧?½4_Ø'ùðí—I¾öFþþœi|8Z4ϬÙf™c9ÎÕnºëñgË}¾oã£ËfÊòöW^¿ÇÉëÚ%æ…[?7åôçñØ1üzaÓϯØ<qM☧wáüp}¹Ùôcú³‘þˆp׈«c¾Ûóû4˜ÅÎîó¬«eVMq×eoùç²9ü5Ã0¶Žê‡ #20Ê}È(H’AáßauÕ yû=ß«ð_¯W³N¯_yDµ ñ+öŽ\#%pÐjªmøø8 m:½|â˜þxYÃG^péÁxYu¯í¯÷¹ås•ì¯“šÀÂÐÃËÓkù¿Ÿ^#2šÔ·S¾?ŽßwF¿.Ïãn¾:®âM?B&ì¬üg÷iK &ñ‹í œ óŽ¿B°(¤~^ÀôÖ‹Žú±NÑðâþßNvÆ&ŒÚð1[ª-«DŠÚPÈ9+¥®V#2a"XÕ#2%¦ ·wL–Ŧ˜F ™6EnÝñó^zÝz×ÉUÚÕ*zr(ˆ5ØÚ F)X¡`2(ì-p°#,È”¬¶g¥FŒ#ƒÆUZ¹ÍÚŒ‚–©Z¢Ê…¢Ø„`£$éÒMæîx3‘vä%r(*`¥2ƒshÙÀXœ;]g6®›%4#,Œcª!´ŒbY‘0̳¥Qiˆ#N㣩e-®g´8ož)(–Ö‚#%Ê#24×ô¶œ€ËéaWZíwºêiŠ”ÁDˆ²D™PáSˆ‘îÀÇáQ!4™?¹ˆ”ZÒÄ«™NB(ÐEsEQUÖ™QŽuÖJF1“Ì®t~ VÎ Ü|ªÃAI$Š9ˆ%!ìú¡Åy- ºEïd½c=.Ä Ã½]Q“½Fh2Â_í;¹:Ë9‘©‹Ûʶxé‡ç_­;h×QONœ×¯‡ÛDõÃÝðvà ÕSž›ú(}öfŠÃãÍjºúþqñhçÓ4;÷–ýçf¶£û#2ÆÞ¼&tèÇ2ß|ÿMO×ÝݹáìñÙ‡šÇ¬/}Ëò—Çá¢6DDNE랺qo^Zì3ñÛðépYe©Î&ö~?ƒês|ÝPþ§¨²§±Ì0èaÎH.FWð)ÜA~ƒÂ‘ì^¾SR8Ày›´ÙPøÅ6 Ò¾ßAp:\#2©$–eUV·µGä‚Gp„Ò’Ä–'£‡x€æ8¡ú?¤åÌú¥ù|ˆÏa§ö=sË>Úš·ôågÓßøúä1<ÕTa@Ï:žqî;‰íÏ€ñº}k•ñö5¾Û¨,§fÉÇõ%÷ÖCì‘‘ŽÎ…™¶îêÿfä¶#,ô\—ÝS]Îy$Ú$%øŠ×§^“abõÈÀ;·>B#`ŸÓé·?áþ<KDª—p¡YûšÊ¨¯ñU¶ŒVR62B8È+ÔKú˜­€OóeÓy¶‰yteŠ(È7b–¥Uðïúÿ“Ÿö¿§ÓùÿOñ~_Ýâi[ñÏ··å‡ƒÄÖ²`Ê(!$„%`Œg¯\Øz“2"Žc™E—éEh÷ œ¼i KC„¥Á­Û¦ôR6ŠkÀÌOZ¨,[ÀW2ÆažjViV»ëEXf …aF•y# â¨=¦fhPi12ŠÔX_4MZ^%뱉¯¦Lˆ{¦ñ#[h>Ù©“”‚X,ãmµ‰îš#,ß°Œ†hŒ5`£yTîeLzDm,ݹÁ²#2¬ä$d]_#%Ë’ËtG5h|j¢³oVa#,j¶ãnDÉMNš‰™T#2J lXdL1aˆ4Klí#,­‹Grí3«t†èp˜ÛIÖÐë¶X6 ‡jn¬Èeɶ”*Ž<ÙûßÕ“&C’;àÆÖ^h¡EQXaű‘‘¶x¸dæ4 Q'¶AájÛðº)Ú„o˜ùàÂ6L(:qQY!.hôÈzüáR”#%„(APE½wnåÉñp†îàwç¾ÑS§HGߣ â$¡#2Ze2CŒˆÄË8©0[É„äPâ§J¥µõùé°Ž§øþ2âqµBÝŽt¢z8mG¿6 ózÁ>“ï*èÇW-~Œ:S¤Òâ0üpmÔæk<ˆŒ°²ÛbÅ…¥UOÏJª `ÓŒÛw‹r+¤DjGH¸¸ÂðâÒŒi§Oª|t°Ud—N¤G#"DÔÂfý65[ÒDé-¦„ÒJýtå;÷¸Ëñ†¶p°ï´±G¤Ózt(qPGcÈE{ž/F°4¤´RéhƒDâ*t6àØÞc™Š¦ç6®•U¢¨D*rÛËø¼²vkµÝÒ5¶ù˜$<¥BPXY®[`‘!Àü5oþáûÞ_]û}~aÓûys@xyñÅß'^‘vZ¼C$ùñ/_òð•{ªÀ†¨yÔ/PdVnŸlÙ÷É ‘rÒ´‹uF:;H3Î+™`› ´è˜°PJ()¿Í!±¨8ÈÆÓ s¡#.´Â@ƒÌimÆÞê£);Bº.¬ƒû²–R7x266~clyUE#Pm§]ŽB½9"XÞ<(²ÀÐœk]7™ßf`q¤Mš¥Î%ÜZ8& eXP„“XJe@¸‘­0ß…+#%hfú¢FR¥ÓPCª !¤YJ(KòLÄ—6Jš3¸%¢ŽÕFHp,7q¦¥ªÉÏ‚j ì]d“#ttpÓÑ +4’غÕ&3ˆ6uvh.>‰µìÐhÔ4ã#2ƙԡ–3$c#k±ÐÊ&E½À¬vÅ`j0t¡E&Y#FS%|åVn×~Âîç÷^Žþ+ýO¿ŸE½øš6â0ó°ýæ[Êá¡îj;ã:„¥'>*SˆV4›^õ:r=dý“C`M„\}“vâ|éœEŽd+ô w–¤-x@˜UTwC‹$'w×5±HKûÖÆ›o«må³ìhÊbØ9rS³–^@/$T‡Djm¤Y.¹ã#Ô‹äî#,KqªëΟS6ÛÇã]ÃyÇ}ôf£nMÉ*éKqŒ{±µZ$Â-à<¡Ä;²HUPßs=ÀºmŸ(#, ¦f{xmãEï˜×M±›bˆ‹Œ‘4Ó“I›D)’‡0Û8ÌR ()ñ¬#2ùª¼á5FvÄ(_ÁBô/ƒcüãbÍXR#,Š§Ón¾è¸|J#/¹¶Æj Ë… †Ö¥³…Cˆš¼7æp(“ˈ°ËF†DÇd"3]ä(Ø£Àæ#¨pkƒ}÷ó-ÇÄò°ÛŽ6óÅ@·dÔí1³‘Õ­ógmÆpÛ5‡Â¶†¸yQ…boyN·>ôtØA‰mÎ&#,ðXß)ÈÞn‹TRÚO,YL¾î¹Úó»F:Ƶ»êò-#%é¯Ë]Ú—PÒLJ*Ù:âõ*·yZªÖòeTpÒêJJG±ã†ïÊ»Nêçs¶˜ápq2[ò[`ƒ;š€ŽFáá2£iJ-âß8¶M»k]+•øÉ(5¸ÐÜ#2#Éࣣ#`Ø¥åqåÆÓ½¼…mGQ×gudÞbY+£s‚Žo-ÓoŽÈ¥×#2ÀO¾ƒX°Ü#,¶µ¾×.:1î]"µc´"tb›®®Ž3™93³eL¡¥«–k1âf©t鳜f,œ1²+ ³„ç&5¡SaÈÍõrIÎ6A(¤%ÍÍh®·vÀ°­:†0lrí¶ÆNZA<“kRhdA†ÓÌØæ2û=Ç+^]¬ ~™ÖÌÚ!'}—àJ¸,yvÕ c ZÜí9ë÷z±£ÞÓ2ƃ¦7æàÈËÄ9S!mDø¨í;¥ëôÞ[iËë\QÀœŒ=Ñð·'„#*£}yæյᯡ¤¯ü—q9‰"êÇË'êaMm×M?"˜‡‹wþ¹­ö]x¸Þ¡nó,˜œ›þÝë»ôŽÞ<ÃXM|an‰¸ê!Ô¥•“ÄAl©·K¾;Æ–°´‘¼)ÁF§P6ø¤,½¬-®eß4öÜe.ôáµ—œ•ÁÀ§~nük{`ZŒVÝùº(³ý~–Ý’­±é2e“ “$#,{Fã(qCv)5¿ïP¬¥UD/‹âaXäÐÊO ÖI#¦í3Œ+–/ üu]k]V–Ó°B|'˜6‡¡rÎÜâ°ñ©lš¿ð¸ûÊ"¼ÄÒ¤²£|â-I°šYºç´D„ß\ñ`%dn½;lù²BÂ#,gPc “B._}íÒ¤“z)‡$‡Š᫲i^Šò«)fÙ]y1„¸W#4ü*ùõ¹µÄ-îýùÑ¡‡èꢧÍÍÄtm‚˜Q‹„¦S3u#,:yé,éÛ€-Ôç8QÑÖug2`ñ¬Ü#,1µ(zoZUå†Þ¬M#EŠ°îö×wey¶ðy›ý‡1v“Û‚ñO'ºg³yBtÙ¼¦2Òœ!5%M¶µ†«`”Æ3ëÊ„ÿä1GQ÷ê!ÍN¶‰ø+¾ñÁ°0¢¨$‹ÞìÛô-Fñàtø‘ÇùÝ1¨ÆÏÌn£ÙY±zYàB5ÚÄÝÎ98À(vAÌä²3ij/ÏäQÙáõ7vÇiÕ'²8u¬Ü.´ñùþ é}ÆžÀ!4‰#2*©åd2M@*Ø_ìK\p_{Ôª,W§,y“‡«?B>zµö`׫¤xœíê$@“Ñöa@ŸªÀˆŒõÄYñ3¡ðø¼E¥rظêò>Šáè\›â>]šð ø2Ý倹Ðiß©þSÒKÄ“,Mà@ùÜšÔ@HÝQHº Ú¢À åAÂKäM£!uÌÆ‹mgÓåðüÖmñŒ»ñýËà)–>!e(D*e™lœ¡`Ê#%'ã÷ÝßÕý5l²ô¾óˆdwÁ†AÁ<7¸F#HX(Ö#%Çéüysd;ý­qQùí¶ŽVwìДpUBLAsvÁ¡…€K‡Ezä?¨·+!Ü Xätõ‡/dDF@É󀓱ü;O-îdÞ1èN9KÉÀÖªŸÔxήQvÁ‹ÁëhJ?W">Y"ådÚp{ê#2’Ü“lÀí8š{`†B”ª‡¼ütfýoÝý²Ø”ì*ç.ïôîŽ [ÎÐ5¿‘., MKÀx¾À£ɘª|¦7_<¡øoàlŠRU»%—eË¡L¬?°–Ü`ÚÙ1l<Èí EjX+”˜—kN< â³Ø÷qò¾Ç‡ÒÏ®î¡I’b%àãË0ò&ß³1CÀ™ßIü5Vʵš÷9º©:`Ê#•ÆlíL:ß•ém6Æ®Ýj'ɺn#%®÷}'÷Šž][gÉ¥bÞQæ,·tv¾ÛL莓¥ˆœhÊ,‘LT&ŸÍºžÉ€€žk0ð7+Á½4̪¥È£œÉC–ã¤è{Œ¯%}}a{±”M ¡AÎ <¯ ’MMé€-eÙqÑI¸öG¿£îäטVbàÇMó䆇'd(uNl/­B‘d ‡fÎMõŸ×™ÖïåfíMt“ú’ômêFìPø¿ÜËiòŽ³Ží1}‘CMM<» Ô¤k>uÊä1ûÚè¶aþ¾xòÕzS‹N榈Ÿ¥®W¡ÂÛãÎMvÚŸ˜š;â•#27¸4û1§¹~<øc5Ðqáø^íÛÈn£©M2sº=õ‹]ó'?ßíðöfö(~ ]Nc¼B9ä~Q86ž‚à72{àÎ[ÚuˆáÎY4ü¶ÒÒbG6‚“H°’cƒçfseXuazí‡>x© L:- @~ºà½ƒÌˆã¯?_צŽŠô"ˆ!4²~ks6Çë#*g-ƒêÑMò¬/\Fd- àF`ÍÏq#22ö¦Ë’BÆ‚>?#<i"A#,­Õ/q/Côø_ŽÑ k‡Ú›C œ æ;ò™È÷OW wîZzÌ`y´.n’Ú¡-´é×'§WÓb_Êv1ÊÉ'ú™ uæ vžË£C˜7Ù“Ä4ÆçOËåešÇÅ#,6µð7èx­3LuGY¶ü>S„!Œ•Üñjanêf¸•¹08ä¦"æ@è@«üR>\}[ˆìäåúžŽÝÓc‡ríàXZ.ê,¥®ýÏØ#Îfi?#úGî¤è—DÁµÊŠ©æÔø=`£Ñ@ˆ¨úã´#2ˆoÚㇿg´enkòkP4÷ÿ¡Þ4Úg>^¯ŒùÔ:Û½vÐ$N™×„ÌJ:Œƒ´ÃC1Ú­„aÚqPLEs‘¦\ã5¼¿ÜCåüúdψÃÖAZÊŠù.0[¬ñnq²ŠöFÜaøñ ŸÏ‡‘¢Qö—Ùj:9‰9l#±H%˜n+©î€ÏÈ©ßA¯f ~«®ˆ{NT‚0 •’¹ÀVŽ&±½g|ÃÍ‹@…)Õ§)OˆübªH„žg¼êÉ}¶b^j~8y$*×WÍ«VðÉ7Ú²÷±ÖÛâ™Ñ„ùäÚr¶†gìÖs5;¹Guµ9#¢é—Êã úS© º”#Ü©“1¸È±f\l£¢þ.ušŸÌ_Jèk¥¨8wÆa&×J/OÒK3b^oB™Ý:^¾»Y'ŸíÜ m"€š;Úµ3ÞØs¢­Ç™#,[öÅÛùoÏ…U"Û‘ãÄÌ[~ÊÚ‹Ä&Á*ÎM.Ö`âV”Á’“*¹³$¥'3¹¯˜gDPÑ€eÊÕ˽(CÌÃ;oÛ©¡Â6ˆÁäÕЊ#,˜"#2*‹VÀÞ#‘Š¦ïÅR3–¥ð6„ç–|)¤8ÕÝà7Õ¿QúÜïeìî#$†ãXJljUçä£Öc:=\Ö»íÒKtÏœáž7¸‰jmcԮȶÙòd#,wgk]ÁÅæßz(ÕŽãÁÌô\VÍêÓ¸¾†æL6Û$ûE)}ë'Êï}'n‹cg6|$ PàòŽMÑSAͽÈàœBÒw!bÍ^†üîö(|ÑþѤS˜¼bŸ¾ùôñî»*y9N’Û_¡Ç‘Fo%ë*œ¡açgþÙô›¹Ê_=øRoŸVþÙέº Pü[+ƒ8Q‡¶h’‰áà|¿8¨¼ƒ_ÊgccùËäÈXÚ*èQ§o³HòG‰dðP3­4 Ò3#2.IDg_Ï#2ãÖÛ~!ÞʨÁõs›=TŽhŠq?ò—Ë¥±µ ~Æm‡Éi¹ÁölíÄíJÙ{–Ó̘dˆì‹½¶óeÔð³%ÛÕÕÐ^áQF%’iä!0ßP¿8âÞ}´s^G aÐZ{x]#eíÂå-×,TÊeÞôñ-Ä6HŸ~†Åmó2&–Oý¤xr6ó–Ë['ï3ßÝ껶ýºc}H|Â%Èx;ŽN+wD³!#JŠAcFQ bSS›üp?DC&7(eò–‰ãŽ›óVÜ°dQê<£š€ëñ)·Cî–‹§Ù<!]:CçßX,Æd³Këì듧ZEŠžtãZƒ#AtœF:ÓeӇ͚òŠH6Ò¶|™º×ļkg‡X3s­S§¶‡–„ûtc˜Ê •æö#ò{ƒ|OÃ;ör¬®Ò!&€tv|©j{#%‹`™—¹ƒWÔ’ñ"qñì5X-£ çûœã$[òÑ ¹°aöù•"G“õQ£fÅÓv:®²`u#'<uþ±*=ä$­5ÇUgO–tÀ¹Vç-¥ê­cëÔiHktÞÒÍØzZ·'W³]¡p‰zÜÆšn D…c×FóÜÏå¦ê ÓsT»f«øW#2­/ã9=jÑ´S½e˜Ž‡Iã Œôk‡“@„µb뛣•­Xœ˜Lm…'ìz:;`»òt)”E<PXí]Rå†×¨e¿û|¶¤¬Ú(à³ç¬7ážÑ9¹ÙVÜ•;b¸_k¢»Ì3òVMq‹Š«îÓu‹<ÿvó×Ůխ^Þ^Q˜_™íÞ^WÆ«WÍùGEVf¨Æ!Ñy0ƒ¬±¬>6sòÕL.ŸËbi#,Ud¶ÛÏj1ÎY—½÷X€>Ǽ9ÁF†¬"¼¥+–èí}o­Ï’^†×o|*ìî™ã”ZY$'´´°èîHd ¼«Ý ¡é].\®LØ7Âü§/q°X4VتÆÚ†-. › éÌÖÙ‹EðR´t­}yeQ³…[Cî¨ÆûïŸç­^`~½`JžRS*;-SʤR9âJô¿ôã宜ä#íÆ×FNvשξVC)½Ú (B#%¡pÚ¶_’Œ¬.•‘»_M~a$˜×Ím,EÊç[¡Ÿ×¬Ë‰ÀdÍM<­ê±RÚ¸6»uá÷ZV‚iT“#23X»¯±W (ñ]‚Ju«‹äñ(+CÏ‹;¥ôáâ×k0Ã+ž'bS<õõøw2n³<vSKÍî½9#{åßÕf§YžtØ?XÚçÜôTðQåj?°½Èo]yѵ夶™©gÃiQö›¤Åz^}Û̹ó‡m¾ëœc¾’£4ü"R“ÔNmÝ•/£I—nd'ö¬/aC+fP·Rìǃi/eÛ¥¹„ø=½‘í†é—Ó'®’w¨ {öý¬ô³¦3жÉaQµãn¹™¥g“Ï'­Ìt569ôæS7ήxz¶^,9£ï£é`kÉ[Üå#, [rüAtÓj<—ûÆøÞães;ÁRÏÉT2)¦…•–LÈh½´ÅÔ¡€#2G]ÉŽ6ŽQø¥k´ÍÝÌ4Î C=bM¼›o£¹éÄÊêÕÐdžšGfÃ[Îwßz’ÕÑuâøœ/’2—7L¢;®•Ò?—+jZ¢È³Èà¢Õ —½áÔé«°ËȺ]\T:üZmû>}J,+êþoªŸøHùnCê,{ΫŸMe×qöÇotÞügëA¥ë9üqÂ{}æ*™Ý§Ó˦xÍcÁ™ei.ÚJèÑ€TXÝV3yMã#2F7>Ëžóa{…mÎ{(éQ°9Ú²ÏË7K*_jº÷:/a P…„´PæNÛ_#˜ñ‘•¦­€6ÍmÙOðˆ5µ†íÉñ¿zæzþƨÞcUï·]tò§HËKóW/ÆÔÚV-Š¨!yŒ¼ô¼è¶Q{ó,ûÔiá.xÌ<\ ÇÒ @§&˜jÕQI¤–;21Ö1æÑ*ªñ¼|wΈä–âuÅÂdœéW)ã'@™ÁÖö¥ÝqŸJŒI››rËLÜ`øa ø÷õ³é?Ë·YÞ9áá[è³#2¾±š0;Í· ¾NÝ„lRÖjáÀNYX0 +ZV6A-“IW{ºV‚Ž°GÒ)Ú…"$u‘Ɖ++â­´®·'Éd¤-dæ-ú-~ åaxÆ«aãzß6D7Âm.\T‹PH†‚ÙÏLÄ’ÚUñ¥CåŸnV»hÒÔ{Y*Ý®ë´9jæ9L,°‚,#¤‘×7Î Z1V~<k–Í\o«LdZõZC¨_8ÙŠÁ³òJn]„QdÃüûà…È0‚Á‰ÍÝ1áX¯ Òæ€ì17˜óPÔŒÊB„sÝ#,.†ùa©Í¿Xñ…©ŠÁÂ5 ÙL·=ÖǘÝÆb#,.‹ß~ËŸd/3–ŒÑwPÎR  íÌ`Ý965 ÛZk¦¨Å¡ž€÷B°q6BLìXÂuµüŽzgªŽ°´¼?1MøÀ¨+ÒÖgØ#,“¤#EÖ-æè_+g –.Ô;· żŽIöóÍJÏY“'_–$ÕœÆ;^ÞœzXâ×íPwÙ¡ÅË·å,?ïP§Þöç‹Ó¯tÌqÁ8=þø´¼Ç_¯?5b·1z‚ÃòL˜Yã‰áÕ)ÜÒVyí-U~œóv‰C#2É%PoYZ”QÍNN–°Á¿¢ü·,ŒU”(Q@¡oµì÷›ü—å){%á“[(©^ˆÚ]c-M´zBÏ"H!à^6CU^`ÛH5ð§1äáüd@’:Â#,?$tæY<^Õ×.Ýžë®­¥P/Xsªs?¦!N#,üˆiæéù9/ðÓã1㉬MŸ7©Ùð^ýVÛVï@V¬ÖÛ79Î[“Fp#2ÆÅ N–dGNãõû£i{Æ¥8SµLzôöÞmÇXõqÃÍøÛ“3‡¨bWñw!ŸÛyi½œJ#1ºLÊaÿW选¯êV}HñAÓœGq·YÛßt&³Ž5ò;àÊ8¤.ò7MÖ2ÐWU/p&Å\b27½_9_ºƒÓB‘ÓDÃo‘ ¥ ëz³ë¬6W­oeñV«(ÕKô‚ÒõJUo뢋BÞÙχñªñ¬8#,Tpòq v¿­’á¢üœØuÒŒ`55Bv@ipxº#2˜yÝkŸ­§¥í{ùÝÎ2BBâI½‚IŠ=ÎMä[ÁïS»¹ê¯¦Mîa#¹MãÖôöûé县¥ÀÆûc*/W÷öj“;gRÔ”Fͱs})¤YŒ´½åðmç1#즫YíŸXÛ|ÃâÜ)ÃcÖ#2LxN×%ÐWŽB¶âðý=YÄTÇ÷[ó‘13y FG{Sâ¬6:e#%”}„+Ë€é|2ÅoiµKJˆ¡1Ó“©i\7¬lÂõQÔþ8Þ—”ÉãUa–H A®É°“ÃŽ¹)‚¦÷µ¨$Åþh>r4MG*ŸŸƒ™t½Ö@rƒö¦î¾‹Ë\ýóቘ-™×ÝÑ–èÉ9Š|—(läX”§G:\C×j»©Í¿XÔ÷ÏžëfÜÆ¡IçsWDÚ/ ²#,—­{‡®ü¢4€JPntÅ“UMëæt8,Ñl×±¾Ñ°ý˜§*k9DD°#2T2À¦‰ Áq¢Ð²#2襣Ôk1~6ó#,6 Ïêóìqt}Óýë©Ø[D4j4™%ý¡³…u³fv*P…æVDujš%·}¬†ã„–‡\{ÕÔ)Áxô¹,’pß1ƒ8AYë{A¾žBxãh—<ª²˜{˜nÁ¶ºN.šX”.é5œ«4tÚÓ6 ýÕºÁh„‚]7ów>(÷Ãì!*ñÒ{ób€ë婹jßöyFÎÒu–, °SkÄéö.ÛwNT€ä5¯Øë•âøÍúRsÌ—WàëâuZЊɰ_nQ±÷A;\¤V Œvóg½Z’`ÔÛr{xÁ²óGÛ#2WÓÝF"»\ÀYÊw;(]½Çñë!T÷å×ø{cé&[·oH°ÃÚoj£{s¹–X5•³r‡ïåH<BssZa啸{¾%m¬©3¶[…ƒÅ…ôD­`«ÖªAÆÝåov¥”0ƒ˜œâÁHçpø)tú¹ä(wÑQ°ÀµIº*^<€ºµQÄ0P¨UA#2Ñ£c¿wv»ç8%x.LàÚýn·ú®ªFD¡oVé§W!tß,´tšÒeJûÜä™îaAð~½l¹Í»K,3Ÿæêþ'Ÿ–·¿dvFãƒYf…âÎ<x»>ûÛøý«ÑR?ì*@^2].\}ý¯–±%c£S\iÓÈö¸»®­eý#%öw.mM“Bªò‡ß6èÖ¢sÜÒ½KRBaãÖš³ùŸRbˆB ¦ã§7vBñ'Í샚;s]ŽùcG³ÓÆÛÑ8M‘7KÝIò…›³}4i§CÆH¸åæËt‘£NX#2S£zº3fY…Rî$&_}é|ÈœwÔaªKÓ%tXàÕg ¨¿%”—\U×{›jjÙÉùjù^72O]ãÈç·;×ci!"`}¸’\ñ‘Ôx¾0’팺)¦¢rRF£«U™,q”o"•\N€SŸlÌâ3F”Û”o0B1CÖÅñœOTy—QºètÛwå¶Æùm.¾OÆw7™íÚŽh*Âf—¹’Ÿê‰ëAs¹ƒå}5žMž·ŸÛ¡ùÖ£+“Ωº’`±-Æ|nßIéœÅ¶À@[¡ÐÊ2Òù‰˜PÆ Tèøƺ<®Ì{ÈRÑéG2{E,òvNºEÊÏšjüµP/%]&³ÞnÝ®ŒPß;ßÎ[×ã’/ËÕ¸FµÒqå5ÌÓZ:ad*”u™ãÚÛ¿Eôƒ•<3‘ëŽ6$¶åñ¼¦tcQ\\<jÞ\ú.žƒ™ëx#,îÕÍŠ°¦ãÜEOWÃAý'Sh;Þ½!O£¿ÿq%´\ÝÃÀYâ4_ÇÜ®ÙÞ¤¹ wçH#2*Ú-ºÈBö7O~‘"Bdp„­Üý#,Û^Þ)ñç4máΚÕKûvŽ·õƒ…z~Šër¯“ÅÅ>HاŒ«[»%6iÊŸé˜~È.sežë3ì0Ó{#%û>Vt$ÏmhÂ/É›T"yŸÆØõór`˜‹C¢–ü`ÂköõÌþ;@Ï0AñGéµÔ1²mÑŠcâíèC6yv¿§=¹âS£@¡ ŽvÕÆÈ#2?íÆr)Ńå{ôá#,»"Ðdn#2ÚçÂs™©IÞ3×Þë‡ÆaÓƒ¡ÑÀÿ–öÐ,º{` Œ–A–#2/, (ç%ˆ+zïué[Ã:mPžÌG~楲%ïsB4$…Ú'³Åª:£G]›Ñ8q}.¾±B0±EÉh0 g0%œ[9HW¦„‘Ï;ÌÛ;÷t…i³ÛÚÕpV2pvÊ|]x-§º´OgeâbGùŽ6J7ërý*â J—«×—1á9]<¶%±½ƒÓ);/ŽàÙØ‚¤Qƒ5§¦Ö 5›ªÕ“j•¦Cµ(Æ=«¿2Õ6$vYÉàÉ%¹*¢ Äš–i=߆õ†âƒº½ÑÝà©aç=¤ ú»¶¯H\ùiìê8XL QP¤ƒã/ÒsÛ¤¸zµkÓ¾!½5ý«ÒœÐÈgq#%{‘ôzú.¡[v ßü÷lé¸Ûõ0¢¿#,Ub™uª ¡ ÚoÐF%ÌŠZZÒ4{¼. Ú:7w¨x šAõ²vÇ”Þñ#%“Í#2ùÕONʆ’KE¹m›ß³åÆÁ¯Hù÷C«—¨ý Ùv€N ­SßnAáÈR¸÷ñùñyÛÚ¼–Û7¼HgþõEZû'ÄvélÆ*¤vØ­©IÓñëO$_*:*a :À¤Õ¥€¡š‹ jË°[è¸ûCË}è´å’Š üÏÕççžGŽ^$ÌÙäõøYsC¤Þ#%sLÞ€­u‰G'6õ×â$·¤<À¶†à|®‰¦Ý!žŸõóÔø@¼_Ë`ÚuäÑÇ4·7ÈÑ$³£®Œå cc’ˆ”!nØXbQåf¡Šã“@á#2€é°„0Yû=-Å|ã^f8Fëý{àþ‚À</—Ï}~þïwÄûyºÿ óJZWÅ˘ #%§ÃÖ ØŸÔ‡Z+žÃ`å5Ü9‡®P”˜VŽv¢æ4ýŸŸ·‹b†Yê…æ„gíxTWÆ®òØ] —÷œào¿ûʇõ"ÑT’(‰~Ù_¿FĤZ“l›ÖÔ‚…{4'"%¢!D¯J ³eÁ~ýì0(#2èç´qxŽú"|„ Œ‡x0¦"Лê³b±bšjømm_ž_uÛØŒ.MÏ9&“'¿Ûò3)Ú³‹g.ËGñO6dj³`ú<’W.¡ÿýäìQa >ßFþð´(˜µ{î…ï°‘®¸<?$Có¿¹9³ vZ(ÒmWr¯ÇîŸÈ *’*‡…F‘P²-Ã÷&ïÙQgöE(69[ëD#23h[×$×¹ÿ(Ï]>Nt©"rNK(ö·ËçzÔöKíˆd¾n*²Å–@¹…G…Eã½uo›^Ž ®ÚÃàîÝ0nCqý¬.û¼ÌŸ›é†×BÕ=w·c«HÝ5# 6¤´ô¥6.Öçô3ƒŠ\ª#%±|Ì#|Àý#2Bó[’4ÔÍ#2Íù"z#,:qï,±!÷c&d‘?WèTÑ=úµ™H¶.™DhøêˆãG‰OÚ0ø´0"#%…>©ÙÄîKN¥¢½@ *«2Þ(ƒF°ëõýKöéöýÄ«™à¸•hAºlK×:²r^€—¯Ö쳯t\e¡‚ÿìgr´Tg¨ÔdÙ ÜeÑÈ:¢!匔,ÍÂö¥ÍãÕ&ðœóÛoaž\Öߟrv „@@ÆP£E3÷ÓºøÅ?4øCçï†R˜®€7CŸæþ»à… CÀÖ¤îBJ@×®”ÝÃ#%Ä+7ag81ôʼn–øéXtÍ IâÊHn]I0!²aT67a0ÞG‡#%¼h€À¡´ç¸M1¤°{bìò 2!”doêç¬ïÚdít±a?¥“É Ô}ÿäÍÓ}c<hË>••n~”V:–íB•¯®´CêœÇÖßÛÝv¾œ|3K{¥C>h‘ÀÒÂ&AÅĽ‰+"éï]°Öez9lÁºB~º9§:8B_¬é©•„‹•]ƒ{UP ¼’e„’`«Ú»¹i/HÓ7#,l.Oj­ü:ãç¶AgEçöÜ°èê†ß³ãJ'æÖèÜŸ `/ÞõgñwG=æP#qžZ@5ø ?ÒábøðþÊ<A~òH'§ÝœõÇjÒŠ§©Óe’ϯ¼¾æßó½}tMÖ1ŽÕëFQǧôé‘Ùî»á̪ÚéZÁCìªIë•)@¡jVTÔ¿Fçs¼fØ4E”{QO5pçÚÓÌ‘¥dd$óULÀc#2Hç·{ê±'Æ ¥Õi“Ž8cmþS(k3ˆ8{†ÓHV#,÷ß|Nò¹6EŠI›0—t:ÕQƒ3J'K¨g(H%ÃE7‘GtDÆ8º¼‡éI×øê^G‰Ó@PL!Ø»Øs¬Ô)Ù#2ë£vEúµn×·eQ³Ey2! ¸ˆ‚œÝ†W<„1”ˆJ¡`Qf¡YAá¾7MÉòu0*"%l+a僿#%(1A&×Ç]ß;ºhàÂrr^õ{ñä$ #2gô¤ÄtŽùÇñ’PâO#2B œT* šõ†7L‘C7‹#û5Œ£hü'Ë‘øÝØ”e3ðº{óŒâ~ÛC"a!¨$¤ÉÆÛzáðÞ±å=HÍ÷ 8±3hô+Ý#,„Ü l "Š§Z¡‚“’iµ'Wž1e0ûôãß@ž"ûöÝÓŠWW@U=E…¸Á‡WbB3(ˆe  6Ò&ÛÙuôFËÉ P câÁÍÂø¥ŸÙɉ<ÀõÙ£»ôñë ƒÈL`ð<ò•8“ŠŽOguKçAå#?ùŒë ½%ôâû†æê-Û¤&í±®‚ø©¹^Ö<a£Ê-@&œ9õ„¦SnepNýW/YåæþóæyAÓÙœÐw"½ 0âmzg]%¬$%s6Já¢H—@€^V.›Dwg€ÏR<Ï,IüaÈëÓÞòuZùž‡–©´O”-qŽ~aN‘«‹~‹Ÿr¸ŠWžiJ`89z„Qî@€-˜&w¡oĪåÏõk7›Áb“ÂPÀèI"(ócb“r-îÛh|Ï#%GcNN²¦3Oh4‘»ˆ*H-ãÍÞt,¹?oÙns÷­^´ˆ8ÏR&CÓ1Ý37OõYjìí×ä绣DàÊ¡-8}r!e½Üg:`¼d¬‰uÕ™Þ`ÔQP+&Ø—ã`KH²µ6ÑàC’Aݲ‚ÖQ"Ê<š/pp~Ž{Ü»a®;p¨x›öõIþâãküžjXÙ‰×t%¾kõéµ™ýèß–×!¶û´_ìáuÎdÎØ vL1”ù¡,F<JÒQ5<ƳÔü%~¹é \:m­Íz?MQü¬ „a•KË‘äʧ¹yä³ßƒ²¶OKîu‚.-­×?Eo3à Ì$¨‰#,Æô¶h¯B3gÆ#,›–?(Pq#29dÌ7ÖĵB*@!¨&`(ouGÝÚ#9É$í9ì‹>UÉmß(ü¨3-¥¸/+‘ Qh¼sórP#¡sݘ\‰%®ºãq{;†¢z|Þû*ÚìE8¾iñ’ËqIIh‰ B+ÉË Å<›Cû)^®`¸ýaÍqß‹ÁÛFRç牻8BB#2÷\E&e.ëõ¹‘µZO4¸qpÁ€[@(FB†x3¯\@H‚ ˆyº.ÒëúÃÞ£`;kjÙι?;”ªÆ¥XŽ¨®[so•ã{”I#,&óÂàûŽ±äìáuŒÔ/fôô2<ö¯Í¸#%×mòÄù? ”Ì*$~”°Ò´ŠQ3ÛGCyû§¶ÇÏ۬œ:Ñ—ÖQќ΋Hw*´·ŽîÁ”`é&ÂxÖ ©¹á‘{ZR÷|#2=‘q¬<õñ*£¥p›îÞzÇ&­÷íH#Ñs[9•ûïÛÔ” ƒdÄ“ÅXoòRÄáúm¾ážÞï]FSÕË6)8xLŠ¦7/>s€õaѱŒ«G¡Oô˜T5åÙïÄïÚ?.Éðý\îß3c£{ ž±ë[Û[Gã/yêbBõTÚo>“Ädáãt¡E€ »|6¥Ï^Ü\I@dŸ˜Q6GXºÞFât“ˆä"îƒÍœ8EÖŽv¤ŽšcΓã¸^©z»"S9žÞsÙྪäÄYRîÒƒ[Ö&Mnß*IómRt¨-ôóá¢ß#[ƒ4Õ•v[7¥×'Ó~¼¼KôOžüý²Íª2kM@‘…ìy˜Ý5[z¶‘šyn_o÷”@[Zô‰!û&(GbL##%ßm1œìÁÒ‚Vñ¼¥_F‡”mÅ?Æø2_P|ÆT¾9­3‚jõIôÈ€#° ˼°û–s"c5 äxÉ£{?(l{¼Ý¥ˆ7þ:{s3–•©Òö†¨ÕvïۤȜh£RqG=»#21³ÚRPÆ*lÒ‹I¦Æ¡;ãïÜWË:c ºðk“;ˆ´öà,p¾kñ›¦¦7ìç=k…”z{¿.ºm¶#,³¯roÌŸÕ¸Ý-¥ù¨|S˜Ï™„þ’Ä‹:21ÅNžø¡MTËÑ›ìU¡%=h² Ä”Öyòüßká¾ø-éýãû¥ÊÑuœ"‹JVíÝ¿:ví^yåy˜—5¸«û?Ýÿ/¹ðÚ¦™ä”¯øüYuÅû*¡ÿ2—ªŒQˆB½ÇÝýχ¥iª:úPUTõì#%Ÿßõò'WŸË)Ùù<<Rð?¾„ôãÂò0€Õz[ûÅ}¥xµ2þÂkodø(#%ê>ï¹7ܾ$öyüÌñÀ'Á•/”¥¾Aয়B AWÀ€å´¤z@¯›¯g5Ê®rñ¥×8ÎgvíMÄ?3#2!ñÚÏ!x/²Œ^¨‘嶹Ջ¦ÕºYøpõ:1ÖñÑÌuúõØŸ:õ„/>>¹bþ5NP¤ÞÂG¿Ë¯‰Žf¶__KW@ÀÄâ*’²¨ßJš!ÚqîïTSlÄc«fªV…›y΢WÓ>4ñ¾UÀÅ5‹À"÷† ™§K¦ÄôÔ‚eé=ýÖ½Æáz—=`ÉÁ¤´¡™ì°Ý¿ˆYh6Gôž:#2*_LIÛ§³ÃõNb¦€ÉÊÜꊂ¯«"i(GW¹‚_r„™áYŒEu¤I$ù ³ZˇÃîªú¾Ë8?—Ù×Ý­èàTJ/¨frÐ?kýš›_§»ýä<#ý=,dÕW´Çù“Aßáï†õ}èC„þ'`YrÍaƒÖlÊt2Tj J ;T ˆtˆY‡µŠ‰”ëˆäß[b‡,ÒÀ"äZ\, 7@¾¤.!f#%[e,ì¦#2Ù2¢)¬¤±‘$àér‘ÑFéAdŒPs(hàÊ‚f:÷X_›€Â6ƪP#dÔ”i´]Âéc2±˜ƒ¶,‰aÂD²©™)K5@(ȃA’›Ÿ-A â¯ô!BÛ=³Â?%_ÝTÿ§n¿ ýCÒRÌx²¨ˆ EU., `FzUÌìÐúêø×É1@ ¡°AÀWé üæ3PŽóܬ….9XÔà2!°ŠšØÙô°vW¤œÙs·ël"w ÖÓå6f) k§}êÓøEçÖ‡ÛÏXÅgQåHJïQO½Õ= î÷ý\Û9ÔgMoÓ†r#%I°1·4Š^ûn•Ï¡#£’·¶¯ÂÇ~ðR&Þ(“†`<‘$dÄLÑEͺÝÞJ1çVùž7ÒôÞ>šÝɪAI-2š'-±GZ÷]Ý÷5½}z÷¸®:ã*ýÒp½¨¥ï¸îu£í=дÝ+ªYÅG¾&ÍŠ†¬F!”S¡:8iƒ5;<­@ÆFI4ô?Q«$7@îfŒÕ¬¡ëÇSâÓQè’Ï @y7gèzÌ6 ¶/U]¶^`—Æ•”NÞ®ál¦>qø!àÏhó£ÔZÓBû s?D(›˜Jö›öAê`!P‰»hP.Ž ‰d»#%äOnvx·–;ËÝâ­4T,ÒYd¦iRÍi˜ Å"÷·Øzι9*ª˜ÒÊ*˜ƒË5í'Á¹<‘…®!œ÷†ÀÜ—#%ª—lCV†,­ÆfÛu ‰!{é*"bcaÔÏHEŠ{K"¾èY2¦Ÿ<pÛ·}EOYãvh5&ìc$!Q8š(®)Ÿ:5›²·€ëP [ŒrH1TÎä;hÅld—hfÉݵYpp“\Dq#%À†ªl(h=d#2%•Z$ÝÙ’R Ãʹ ÂHQ­ÌìçM‡6`hLÁÄw=>s¶~,×óêx;5µSo +!á 9ØÕq#[µœ`iÅÀã#’Dõ<d!'š<îæ{¢ÂD,;ÕYäsuü¶%¦•n¼½+#'ZuÔb˜xÎIÜž÷ºYŠ{;YQ#%”,j·²ÜÖÉZÆ­ðu•dµ±V¹m\Û&Õr«¥µz²%Ñ^MÕc¢‡**‚0Xª^‘‹¢“ef •ÄÈ›ã¨ræìÙओ¯m%#,ÒOJj^ô4´xÝt}د~å›óÀðrÆÔµRÍŽ†<Mù;:‚ÇD‹ƒÏ¹7Ÿ Êøq·‘#2:5ô¨PÎò—ñÀZŸT¬xÐt3Â|¼nH¾ÖÛéZM“hÖÆÌÛHb:‹dê‚:‹cV#2Žrñ©Ã¯ Á£íu6—¼ùrUðÈ¥X¹ÝÉ£@ǪKÀËT”²“$’2ÞxªIIkáP¤¡¹(S’ßçZÁÔO²¿-Š‰<JfÙ›+ç\0nxE¾Ä: ZpAÔ74(Á( cmŠ„¨ÙÝk{íµçö׸ر ­{Ë¥]Û[¶ZúüùSåáYÔwßðq·¼}Òvo. x±HL“ w|mÛŠ°¹6©ä£!Õ’Ä<†ø2‹‚ ³2¦x†8箇]»ïã1òÇg4c<Ôe«7d6Á$2“‡oË—Tß_5èŸÍç=V¼7à$•9òè·äŘÖ%yRZQ#j‚RKDÐ cö«×·÷rÔ¡Þtæ€u:‡„cHñÄì)c#%4{8Æ’ÄG©FÙåÆ›ë¨ùüHˆi… ,’Ј” ï꣥YÓ&‰j¤ŠÈ¡6µAÃo.9Ý;fF[¼uÎܱX Èa•Rsˆ'o—:H èzq–FÌÏÑÏšŽ±î—Ûü·ÊÊGŠšªÇ‘<}è($(*½F1`ÔR\®¥Ã=yy¸ë³UÝÒ’X‚ènc/]¨Ô÷û»áe0.ã¯URŽUÛЈªXðÔ`ÙÏ…‡¸K?=UÅù ®ú£}Oµl^ÀWh»FAPÈP3›hO'Ô©¢WÒ¤”$C6E†3Ë87Xd]ä#2­èmóŽ±2c uscÁÃ;¸œ_r'φœô#ÖÉÐÁfÞî,Ü ›;èΗm0T&âS+š¤’a8GÙ?64Æ1ržÍ/xwÕ›#,yàfü±ñ#_jL ª2r"nã2TS¬Éa0šFò¿/.ìdñ£` J%¡6ªE@ÂfT›÷è<ª©‘j¸¶#%½3:h ã5Qº¬Œ°VbXµD¨ûúÕÓ­Bà„#,.”rªü0Û}"÷6\q³6š»–n瀑$[`Pß MÁûxσâ»Fm`rÁ P!9ÄP ¼L>íÛ;ÅÙ^ŽY5ˤÈã‘’6NëòÔ®Ð4H²ˆÂ, yT)Aãs®êãÛ¸Èóלò2™0Ñn§Ócyô›o4vÓ;;Š‹tâ9ä‚_lÞÀÐÂØO‡Ç‹›e<jQ`x½dom¨QUÍóçÓ;âHs¦ H¶„¡‘´P¶a‡eâɘÙP"°^ÓŠO#23˜/s\Õ3Ñø'jÍ o wêŒ>Y¢vJC‚JcÚÇj‹•ÛdŠRAÉ¿jš«Ö˜à'„=2gBkV.(Ñ;ŽèöÚKc¤Ldq=F8ÑG((0UE‚ädQe#2¤:êk¯.?¡iÛkÅÎÐõ£§U›žÊîm”{ã¼ðŒßfm4¹Õs®«h/l¯¾{ï,yòýs‰ëõù¯Z桧•£ocÞ0rt3é,4² †&Û˜: cU:çÙ›ëBû³(‚èû!y¦mtØÀòòŠ6¡ ’O‹ý×ﵟuª7•&Ž`àFkzúf¼‘ÔX¹%Åõ_¸0»òN:ÄÉÝ:!Hi Ò蜎¥MÄÉê*…ZÙh~Ý”1!ç§$H±eÃ:“…n³ £ºùƒØsª†„áÑ5c_óÙ×<4®šÃdànUµˆœèíÉHPÊ1‡¹»!²|6<Li—(SÄK<>BŸµà+9ú¦¤ÝÜó·‹ðÒèÃC‹S@™ÂJ wE¨×¦ò‰-QX‚”"õ¥#,-È–£uÙˆbØÈuø)`~㶙%‡ ¥T9™l àüŸµ#2ªÆ€nx!›=tÑ+­4¾q Í#,vg¦¼~W£_#,¦Âxõ)ÄÛ‰'ö-º×s+ÑÕ×pÌìϱÞÀÝ#2Ï_#%âÓq5í¯)SÀˆL³6ÔòÅùžã…×hQÆr ‡(¯B !”]‘7N$in²ÖOE¡k–'Z.a å±ÔêB‘vÚ䫨֖øÝ×jå¤eE¤ñnÛ&“&ScyÚÞã½6¾Úù{ç]Ž6@‘³4wÊ3tõ«¡ø%lG†e›£$9Ê€mv x¦a;÷ûñÏ*Ƚœß¢²m‡fûÔÔÈ|«¥Š<¯xT'U+92 4áCÎËNúë à@õ¥=Õ_€ëŒÈº¢QzªwÊ"¡¬½@ç#2xÂþÞõö~»júüyRÄ™­˜cÞîtäv#%6#~,Ø2bJ¹ÆpZRþ–ºlŒ à–>ÁÛ?/v|JOÙ©iþëñá=àûìÊL=h#2²AQ;%¯ì£âˆ”š„#%ðÊ#%?/‡6–`áöQågö`í“íJРõ² Q4ZÝ+qìÅìªøÏ×ú4 ̨Ÿ;ì߯òÔò#%L²#%M¯e—ÆÅ.<hµ¹y#%'f1¼)Ϋ2j‰êí ¥TôЉ¦Ó÷²N؃ôá„ó$ƒ?ÒüýÓ pÌ|ÍÝ¢{:Ž_ Êe%A7â~8–-¬ÓñÖß·ÞÀ1gQ7Õ2PîÅqð[`]a˜o>ãûDì%¿eÿÅ V´§ E_áý¤Ý?k#2AQ’#2CD\°´Ï#2þOèõ]óÁ¿#,Ãî´ñN^;üñmYmΉaûçc?£«#2C~µ I:ý¯ èuÖ^çÇ›ŸÓÆãª4í½3!ô·¥þ£úIý®Þ;zµ^xmÈVeÕ *ýÿãþï/¯õýÿÓõËñ‘ýªù«ÿoùš R’²M­ÌÒ±œãYAÏ„TWóÁߥõ,(·+•©pyëZG~CxDB€Šü#%)—vygÜwåZ¯¢izQ ýyºùäü}Û37Gëhåã¶ñšÔW7ñDùÕ}_`H³ëª%Q#2„7½Ûú>Þ='¿0G8‚§Ûÿ¦¯Œ³i¸Þ’Q*°¥å@qgëûwœøüqûlºSáeøÛt×ýŒ^,Q¤/ó(2#"ŠºŸÔØÊ’•õxߌøÇÐ÷{½3pô‚ÀRJ£óAÈ>ö{@%Ê@{“MtܞѾõ¦'ý25ìå×YgÕíí~“g™éŒ/uDç|B_ptÄmWAuЦ]#ôv#,B›54Ò¨1*:íÃDŸ“ˆüÜ—ú‡þMà#%€®àÝ=z7¤Åö#2DIg±ÖÒ]– ¤ºŸ}zç|»ø#%KŠRÌÚdÝ›çÇ|I7f‰ ©Ûñ•aÚÖ{xbï‘Ó)þê×Þ¾ Àmz|©Fú&y]<"z$4£,(õµ;¾ÚО¨²j˜Å:Ê>¯o³g¶ËOu ô•R—¿×õÇŽØ}òˆ6Æ€‘`BF S"Pä/ðlëúüÎ~™^}~‹ÛLLNã윿mwc«:¿We†£i"¿GtO{˜j2iì9œ·ýŸéÜgF“D8§ô&Ø¥Œó©BE‹&¬?¨éϳç¯è¾Æª¼[ëÕÂN`PbtjÖ² NN·Ó³¨]ô#,·y¸[ßûD°æ—„aÌ4f8¢zϧÃX7@j¤tgÎ~¥ÕÍçèõõoùìôÏÄ°ñ–$¹–ç+´/¢câµ”¦ ©åYôd!#2*¥=æxÿ0ë#%”¤V6âb|Tf#2WðfgÚæmŒJz·· Ô·®¡<¦@¥^¤D+wh_%}›ä.¼~R}>¤±!$!g]Ž¿äáô¯ÑÐ.†?9¢3ºû#°Žî•R #%zCʹŸÎ3óêï<œO‡AM®\ðšý•î”GVÐ(ý´¦y(@ÚÔË,„{ý­º} wÁ~’„ŽûŸúù=û·|nh¯g4óVØù þ=‹Ž3>šqÜ]ü l™Ü2Š¶:'ÍèýY+õiÆÇO·½»º[œÙÄD¹¹à¢“ºøRHº„QÞ\âÀ#%D¥€ #% |5üXÝèÚ6<D3‡^¿8òùü‰S4T»OÑ–ýx®´D@#`~˜\°:òº#˜„A¨ûu(¯hZÞQþ™|=;wiøÆ6'›@†Ø®ý—¹·Ž¨3•D}¶™)l~o¡Š«-%JU Aö~5\h½P&ƒ™åRÝŒ”lå#,ëåøþÿñü1Ô}‡ —n›´ ÚŸ$˜mêóQR§<ôé#2æ{ñ‡YÌ(æHã‰$„+"¡O àÂH½¬ÁÄ #2Yótc‡^žÙ<qÊ‚Ÿïwcœyßo~u—ûóÅ ˆp8ûßm[Ãñ¤ðÚsFËïÏ”Ægem[a§#2“¨ž3žfžð©Sâûuü>EúNBÁÄÌ&jBˆpº€¥ÂÀ·aW­îey„cÍáŠ"4˜k›ÏËVr•/§±wc€#% Ãaœ%<j÷=€ÝÏשÜ$©ÅûÏ·÷Ny™—#,zžÍ>Õù×ïUèPþTav8•Àd3¦ÍªÇ^[64^ŸS×sžRÄê‰ÔŽÉ«ëyˆ\ÅWñ³èkù6Æ?³xâMÍvæ0ó¨r"¿j»zz‘ä¬C•¯+Î~?žä#%÷ª·Í+]ä\4zõFÍöèñ€ X¯怞Çs_Ó»Å_Š¾nî¨D2Çéêz>Ç÷öÌl»/FzõYÃk#,ÙþB p¥—§?ß9²&ÎÀ`‰·á» ^#2#%¿¼|J'öíoá«ã <ø»Ö.OŒüt9IŸCê@>%sϪ€Z>7ÕÂRE[kãgØÃ9ÊnL”W]ãÔ03ž©{!Î뵋û§äXÍî¼5à‡(Ȩš…f5ÞtBÙBaÇIÂÕ’:¦s‡K=·íýÙ^}L–rãWú¾<ر*ñŒ_ÒæÁÁAÁFLÉì>`ðj)Fy\ô‹—‡…÷ßwúoq…¸‡1¼Qq;ãË5U^)õ\þec7þ)3ÄÒS+ÏPhÅu·¯cãßj!%²§´º)$y£¥êó‹ªO×Þôè¯+ÛÚ³—êøÞ`Ì¢ûKCHî!Ñ¥ä´ZkV<—Ö½ñŸïÈz™Ìlçhu³îAÆù_%Sw6˜Šîþûq&S"*Þ™;ïc¤¥oƨÂ]*ˆí¦Ûo}¼” e;xó@<‡Š³G‚­Ï#,ú´Eë|9Ÿ{¸Y>˜q5º!rñ ÍÜ‚^ Í÷Çãæøõm7khúUÖ[„—‘ÐDéM69ò`ÂQk"åzJ¦%Ì IRŽTy`¸­ñ´,y¡FPèL*3(#,ÝàtGÏ(Ç+†}ÀüÜÞz; ›A^[ŠÂ0MÆÇ¿ž*waFš¸7Ó#%÷Ðhˆ}lɤÿ¡ƒØZÃ89¨=þ>$fëåÞ/ÁÑý/ǹµ.´¾M¼ûîÍ*úIœõ^=vrÓþ÷„ÊÝ,­þMY|¬WšD‰©Ÿßµµ`횘:2Š‚ é)pe7idvÎʽËFU„Zn²WÜVá5ù`#,_+–]é &‡Ø$‚6ƽSërÏöMÇ:\YÖHs–ßdxX-f¨|ÒŽQ è¥wëvB¯ÛÏ–œPg3—w[Ì‚®”Þ‡wgFcÏ'º¸3ëzgmœœúÅz¹1;¾!ëð¬Ç_¢œK‹H£·MqÞ³®×:§¨1åîŒÒ²¢›Ï)ƒËÏR”ñqêv›ÝjûƵüòņÈvõ»•Ó[40½©8Jõd¿Vþ­N»”ª«£ÙDuÔ ‡ô©hØOû¨—o¯œ¾½löyšâÍ!Ì·ýªà0ÂÕM¾Ó€º…u«@_v§°Ôª àXä¬#,ÒÙŸž”G¨Ó>Eé•’;í”à<+˜¬ÚžÿíTSj¢Ô¤ˆtËìæ¡Æ­ˆSí9Q>Ñø³ á¿´¹³°˜§Ûӯç4qONÑÔ4Ê)ÍDŠ_äE®Ôê<·5ªNþš7Îåí}uKfs=}éØŠzÚ_CŽ¿|hŸmseTåôJž?d?&·úëÖ–u]g··c¬žQ7nó62jLKÍg䉎šË±¸‡„†uèCmüïzËž8­øÛ>S¢ØëN°áBt(Ž’N碌΄Œeþ.â›høEN ¼»§t[áЕ¹=™üÄg6㩆ŒvŸ—éÍtÝùxÖN͇$“ …²™ãÎó®æ²ƒ9…‡xIEËü·J"­üŒLªé C“k÷LrPG;AC•?–³>/9Ïï·Ë)kµÚÖ éø¢Ð#2ü;9´EMIÚ±zù—+À~Û×d0zÀŠç²çOœæÉ¢¨;)p ……Ý|ºš÷Ø&¨ê=QˆØ­Ç9Õ3f·ºc,÷þ4S‹64k½/ÑÏ:û«"êÉÅ:tùú¯ß÷t¯GÀ¡³X©M™/È]‘Sü‘J|¿;™%Çm·Ë¯Ã#2ÏÂ97$ç/·Û)³üvsÉzÎ¥­<‚vÉ[ñ‡šµ˜xb1ê(èï“ánþúª>•fÜø"-?k$µWjÆ!Öôƒ¥Ü|‹‘MLœŠ÷)»xü´zg嶾tÜ~;pDÁÄ;«Ú+®o´èâ*#2ýïdrm~v×n?Öî&5´J…~è?X ³Ìvxd~ Ô¹bQ€k°iÞp ³VWÕÝÓÁËŸCl,îÌ!÷hPñû|¡‰Ç¦dñ¨Ÿ“0wÎiÐøw¾s!ë<G’Òb¨Ü¯ÛøaN8ü5½@þíÜ2eHã¡™hÍ'  ŸˆKwñݶñ. ËtúÈ‹„ù}Ñ|.¿–òÿœ5§ò“¬ü´žÛQzmƒz1Gº?ÚšŽA#åDyÀ-Œ}f}ïÇÑåBâiÍHB8®ÏÐáЖ_òW¹.Yß5nú{nðˆ|}ú¸\B œ!ãÛ[:Q‘80””ÀË°ýOVdN ê–Ònà0¥}L§Ã5c2|u¾m>ÑÑÞ±ðü ôì Ý*5Ô»Ž5hd²î!^ ÖzÌrá¶;8¬m"ÁÁ‚Ø[ŽË¦.Iœ<;h‹#2¨Q.AQÁƒ´·‚xoZÿMS÷QB 0ÀãÝFpqu&÷Ýê¸m‡gÛš1Ž9ÅþßžèmúH¾?@‡†EÓ¼Ï?>××wíQ:)þ$ø/KyÎi6¡+u´kJª¢ÕE‰B¹À¸ÊƉðˆP¦úzÅ¢Û!–ªÙm–¿¢„ÛiKˆ»eïAxý"¿d`¨($æR}#2yw:De Øq Dl‹MʨZ D]Î*çDíCEÇüc¤ô¡cÒžVO¸Žûz×Ñêç’cpÌÚUÊUÒ@‘ ,ZV#™%ý(äÃ='âëg/l?>ϹÃâE8ꦡº¸Ñ¶°8Ân¤ÚP«4¹=ŒÃ<Øx9M IìBðQI€lV) i6ùu³õc†¸^Ÿ~È|ã¶Ú×¾Àövu_Y˜>LÔžhó oxÙ}Ò\Ù­B×1è 1.6È þ0 .ˆÛhlS"¯“®cR(ä?—1Go#2Š®ª¬@LC¥Qx’#%r @‹ÇM·v’È6|NiÖ!O_–P5}œÞX8>Qù#2”…× dguAX¯|¹Üá\iWœÕÔ­ž/†fx˜©Y¾ëp®f(Uù:œyáÃÓC±ÏÓ4 ^¸5EEÁEà#%‚Ltg§ðœzüØY­\?±;_ºò"à{^¢#%qPÇ:¯cœè=FñEîåüX6~ßÚHa‚dkôq@Ow'q¨ƒ÷jŒ øžáý–sÿ‹ŠpȤXð)?i#%…„ H}Ü<ýó³Ëê7Ô¢¯õßë$¦¾Ö/kE¨ð~Ú´óû=w3?ŒýE²xôöú¨uWŒ`œõ]'Ã$(oíÿiüG÷œ4Õ/ý‡+xÌÚ±?×/øpçðö†M ¯¹1R05+È)ð ;u%ào= 'ŸÎŸèçM]ÂCñ¶ßZóqü°K^‘#ñpî–=Cgb¹öýŸŸåíèÌv’AH½ÌGGH`®Ó¤xEî:ŸW>pZg(”ý‹¶SWõH*Q/ùG‘oʃôu…ˆÊÁDÆ®aÂjÝb(ÛU ¸ú!ôÄi’D©‹+h¯öÿ@äÿ·ãŸŸoOEܨ-c¬?˜¯‘/—òˆè#%ÁšN}¿Îñ 4°Eõ8,‡Ê\K#2SÆÂûßôûž¬ï™zÀÕù7 ºZuÛ¬xdºJ{È$FC…SÞœ¨Ä‹h¹;žãlíuqá[gÚgæê’i‘vˆ ÝôßÓÏpÀtAƒî»VÕ#¹tšÀé€?8N5\Ëɤ7ßM{¡σv/3óÄ8§5AÞÈ\ì¤õæ^‰-zcž¬û´êÿ§Ì¨ž²C¡ð×(H’HMPef1¤ÃA¿ø{©W‰Ç\ÅÜÂ@XÀÆ\¶%AC¯_Ž¢5äñÒF¾›ÐQô<0àá,ÿÌ À/R…(1ì,A‰Ö¸_!}ª¾Å'Ì|û1nCs2 #2 •#%‚EMr ï—¸I#1;¬5M9å¥Ë¢ÉÒ&k)°°EÑŸ;œÊ!ª]‰?¥9#%[ ÄÞÓÄšüôP)Mµ1é@øéDãÙÜÜÛú9]V¾¼¢²ÿŽ_ ûã4Äú<îÛXG‚é暉+Àšëï{³à–Ke(Ö½#2¦±©0½Q,OùIý=­°¡`᜛áÞ”„nŒý?N, Ò>Ë9½íPïÃpÜM3l²¸šòRw>LÃ)Øpã8쮧â`wc‰ˆöèH}yA@èÇŽ9jW$±ÂO²éƒÑ*jW¶ØÉÐïÉ…mïãyÚ–Cò´ìÛ(¡*NÜú#šhŒ£4€¤ðÄyÞ¥ñI‘Ç#%‚m h” Þµ@qÖúgÑâ6#%ý3TÚJ#…þ\ÞU#,>”ÕÏIÌzÛ•œ^án;ƒ· {$PkÏÛÏ>n:ÃkžBøE³±ú¢ù9Bƒº²•Y·™ …òÓ<tG²º/¸i¸ ê?¢„‰H‡ûÙgáÖ¥||ßìçG¨BÓJ Ò‰žUe•ì*Óó)(ÂZ¡þÞÎÛO×ú^÷o ßã1¿x\†õŠ b‡Zé­aø<r?ßÎ0ÁÂÂ’ßÖØÕ7Ü£Ç%˜ði8`ÿO—ã;¼ŽµàÊÛ˜—û¾öW<T‚0Löã¦|õм³WÉ¿ÌxÆË9m°~}[ΧíÔÕÉݦÖÅ•÷õYÆØ"4oËm‡²”uÙü6/‹¦pþòŸŸæšÃáZöi+ ‡:‡†ãõ“øNCùáñ‚Zck…é;Ù÷.‡ª`æ¦BW]¢—zˆ¶4+ƒÌ§qŠ©$B1ÓH©(Q”—}XÙ`}Rƒs‡lÅÂãfžj5°¹yv*ÑܧìñÏ 0ôgb]âŽ<Ë8Sw§´yD1Ñ-#,–@fBçÊ÷)Häê önøç ŠÛ¯šßº){؆”‚°}iš±â‰™6úÜ{-–KsÇ•w´·\'ÍqâÎËFãndn<‚i†’±Y™ˆ1îÄo0i¸£ãxtóÍ/‚¢Êù44! 4¸ßª#›ñ¨º×üCœfðEúáìŽ}.¦Èµu©`¢[YÚžÎZÊÓ`vi‹A¢2¥<õɨôZ]&r®æÞ[=î©}sãˆU¥—ª]ËÍâiöó[­a\Óˆ?™¾z4ù{0%)Á¨§Í꺟Å#)LR°UÃfzgt§·1¶é¼ÞqZK ÙÃ_•úü%ÉééÕIÅç WDßwÆ:Y}½ë‰ïÄ’LÕÙuDuÏh{Ùó²I¹øÝl€æŒWX—Ô#%¸Z kì1{,3V³#€‚ˆ#2àœæ`—Ñ-¶™¡L €˜7ÞyPŸ½£t@ÅQר¨èl×\¼Û| ®=Cœë}Ú9ä&Kˆˆ}µáDJ)6½}ÛpÝŒ,)@%XMvþŒœ^ÂÏY5?v„Naæ|ÀF±•aÀ³+‘Fçó{ñd¹õ~6Ó`÷[ì,›R¨2ÊjÖP+ikÔQî‹ÑÉV^Äs”‡Ú>Œùÿ³ð¹~ÙnZô>i?'ák|Å9‘ðE#,8œúöv'Hn˜s×ìö´†Ö°&ÒáÉS<ÇxtºmÌøjâ\B-áB´s´ÁÝ:öæ? cS=ßSêÇw†N¡×ÐqÁÕ‡ºzvꢡ~È6ÓòîÏáX)‰#¤”™¤Z÷èŠeËþ }‹#2–tDZ#,ŸîWCl—SÏW´·§g =0µ€É+A7¨) îôÒùþoœRZÞ3­Å#%ƒ`ƒ¸ç¸]˜Ó!hi¶ö¯®·^êœE‹T]rÛp²#äù}:z²¾”È9@¹Խ͠{ ‹õ@+”ýŽi(sÕ#Fn½4ìÖ<ÕŸ©V*ª ”á„)ÈifK’^ºw'“ͪíRJ°¾°*ûaÂ!5Éåúõ…`ØYèöx¼,KQDJ0#2Ðy½á Å#Ï785ïaÚ$‚P’IåeÉ#%…-ÒO'W‹fÛüâÛ—E®ÒB*£˜oÐæp¥_†¼Ž[²5Qà€A¥÷ÀwÀy»ÑÔŠò- 2«TQ4óU³æ.¼$ź€aÚëî ’ˆœ¶Ló rdŒöÌ']ž"ÀtÚ×¼&É Ÿd0ÝJD pã­¼^9e!$ 82È#, f˜®õñ4þYéÜ{lAÒ2aêÇj:»;%ã–£ÐCª‰ Wvü7gÿµG„0ýŽ`‘AS0º;{ÚUR&ƒ‘nFº¬YKªpÉå8¡ÙÐk#,žh™îãú×lz]ð}õBûùxò¯·Êk$ ŽyäëðÀ`lA¾ÁÙdí:æµp•lïÃ#,&s\]ÛSÚx–hÁÕ´xÇ÷¨Ûá3 ° ®é 9å<ÅÂ9 Å’”:1²ò#=RÐív¬w^µú_¸Ã1ïm3¿=;šK†x‰9¬ÌÊ%d°¦j%AŒ†ÌLS#%œ£dTL¨‘P/"r›=¨)ƒ©“zLÆíGv¨'¸t|5ªã”õ…m'^Ö©qXfBæP Ò¡¶VfnÞ¡Â%21mîÜ. ȶº6Ìqv‰I¯|ƒ_ãÂ2GOJô;S·Å}ª6Ëf½­g¯×'\±¿t8FÉišÁAc:#ˆdñhɪ"Ì5e±î8Õ˜:È"‚—55¬:¼™Ó¿ÑNN¦ÂìÜ»W$”r‰«ù|\Ía…ý"}›žÊýä‘Rvm¡OçW_|C_šxŒdK}V‰c*×c¥BüÍïóy-Ųï±ðIÍË¡÷•êŠž9Ôï;ú=o¤Õ7/Ô¨¡uÌ4œÝZ^åñƒÔx%¦ÿ¯™îE·›Dbæ›="‚£fWÌhŒefKÕ m!óèU,"8^Ã.Ü5í®ÓÔ-· •pÈë¬ÇdEñ»¾àÕ¶+’L‚Ǻ³øvÃxu¦Ð* #,çí+{XÏ âˆH¡­ý" «ó »çA=Ý£ÂÈu!ÊÄé`BP¦ŒF‹ÙðƒXí{²…™>ÁŒ­±Éu¢ÄìŸV=öQE»ÂNsô”VÁ-hµ#,D@| iÕAÆý¸¦ƒ¨BÜ"ƒ"S'Eg7ÈÑÑ‘’m½xhhÛNfäCcÓÓ #,h@€•/È6NñjÀ«r"VË©ÜÞ|Îص†Û–Þ° „†£"::Ÿb6ů}’ˆ°Ö(§·º_9ó\ì3V¢¡Z–ëó‰Šè¾´ò+AŽ­u#,²ŒŸ¹ašâÚoR-½uH7o‡dÃÞˆYVLâýÙ²ƒ™m w:Øh2Q“³·x®í=á(DßØ+y¼puKÓD‚à!v#+à6RV¸#,¹ª'I@ãÐm#%Ö9í®GNŽcnbàKiÂH=úb#%ñnçA)ãÆØ¥kNvŒyÃ…ÛïN`óìí&²8y€‰I(­ñì…â —ñ,[‹tòü!Òß­'Ü«Ê Ìd<·‰Ö‘¼ÌÌDåå-JwšÅól×à"õÀ«í–Øhdƒ:\4¡nE¶Ñ‚'ɹg» ^xŠ$ƸãbRÒp­¸ÖÔŽGŠ5âí±2’xê꺉¬pQ~Ýpw õ#×^·iP ´M¬h˜„ÇYAlD¡XÈ,;^–ŽÀ>O*/o¨¿·Æœá#2Ej¸#,pÀC áÀ<)Mg†¹pÖxEáÚüf£ب·#%<*&ùÜÐA@n~~~·á<8œ,¼[ l#2 È·²"{çvÊŠÎSǯªá«Ú¼.Z¨Jj¡–|?‹’[ê]Mt™oÛÕÍK€¾å·i>éÇ¢r²®.` MŸÏïÕ³ï÷û¿Ì=ß“@¼Ž„íô¹~ éý#%¢(üš  'ý -¼ìé>VJتiÄxÐI#22Äøð}\#21¥P°DtªÝ”(Ó8ñ'†ET#,àÀöüAwŸ5-¼ZûñÄOáóVÔò9Îf¡»“#%|'Û¹yyBÌ#,Õ£N'Òe:ïÍŸ£ö¯_ŽîÞ¾\߀øçøy”ì=Äe”?€o¼Ü?D-#,යYàØMfÕÿÔ‰þ)ÇÙÇ#2$ר6l,Üþ×Ê×å×Ó÷ÿ‡ŒªªÎßÇ—ö ‡Ûî¿ápl U;#2¥8…DAƒÞ!#2§â‡±}ŸÜ#%ñ3ÿ–û@úû¾£ Oâ€~°(R…,åñà z†rJ¿üy$TÅIþª¡Sý¯í%Ô²ŠwóëWÑ?­„ŽÁxv#bQ` †¤â(ÄX£þ+B`vjÏö³úKyg­îí±Àú¡vçv…†ßí›ûîšÖáýõÒ¹ÞŽc€ËŸb0¾î®óx©©A3CaÚ— ï:Æ]Û¸…xn4©—ÙâŒrk¼òÔ8”*ÉŸøLcT%xÅù)F#2†ÃeÙ-uTyü|ƒ;ª§`xµÑG°{‘Ú€ÀÞó÷_HÃáïô¹Ñ}Ÿq¢èj†GÛíGlVÑ_õÅRȾ!Ýî"v ©,´ŽŒ/rçòÝþà¾i¬¡Ìiìm°.ìÉ#%r5”5#,rN³«ôlnfž÷/1Öƒü™" ¼ü¿ÀºÏîû]MéÒÉìÊ ~Èø¿ðU°«³øœ_9æ YªBÝþ o@0 |Jôƒ‹q™rIßLØ+Õì‚É—öÞ"8¥Ä (#%¬YB²¼Žpû£úý?œ¯è¶ârô°kmd#,š£ÙPŠ6}|Ú‡ÀTí` 3´²ÊãÞnŸ„çÈ$ A’TÒ¥‹¾ô%Ãê„y ÞbƵ%$ù¾?»o!|˜e ô1‚¡þá°a <BÅ#,µø†þ¯Ø\½6Mû¨´h!f K”åÜ0“e#w °#%ý²ÉHm5°ÖîE8‰ãá±0iÌ-Eb‹±#%ͤ16Z‡ù'P8nÊõö/µ³Ô ¿¼Àφ•*¸Ü´=æùýþAâåÔê{°èÞtímÜ µh þòM#,ƒ¯Œ%Ó1ñÏÐÞÙû;Ž´ò°¶6EAº–#,†1uÆD‘BA…¬Ã€åè{Ü\kÁiJ0!dìöÍè.d'%{¼#,®c”ì×báÁ6˜V9'Tï+a(-­¬7§Ùó$¨I÷W•êé¥#ú¿Æ×þo¤Še‰HÕ„¾<½Æ!èð‡Mö H„š²Ë61L•þr÷Óýp>9 O°#%@#2éÜ]k"M~˜ÚŽw‡ê²¿Áßš£ l²vFl}&Î ??³¹æRÇý—FvÜ7aב°±`o¾±f$=#У#Ãûêñ'#2”0E#,%Ažr­æ”J"ÒkmbƒÃå!p †¢+$‚~Yõyv§#Â’•†wÃÕ@{%WÂß SQ_ßÙ[vQǪ|þê<àÉ‘¶:0ÙY¹š¬¤Ÿ™ìÓk ºûuA, àŒ;¬qù6=È&@Sj[ñDyÑ>­¨Y:èZŒü "1,ÍN†RQŸfKÜ#2‘#,æÔdŸ¤÷x›¸ºŽ"#,?ã#2ª[pÌñ”·ç4ï* *˜D¨ uåsØmos¬!Ö¦‘t¨§úeÃSžE›Í•û&ë‘›ïxå­ü6°4ýÄ[yñšýüB›}!(×<r×]**êeç9ªUU5ªÒ>RižÌc‡#%öœ›÷:÷Ü?Ì{ ·¼éžàÖô×#,¡2C!8:–Z7;ž 3e#,ËsùgL©Ø–m“ŒÉ,]ª)ËÑoæ3Ûóõгö™WâžueàGóŸŸ×©æû‡Úr;TŒ×#2,ûʃmX¿Õ¿è\ˆú¸ˆ6˯¦Œ^¾GèF1²}wUz‚#,‡‡ÿI2p~Ÿ@¥ߨ<‡ ±20Ïü>_Ø…t¨î b{†ÆBm#2gSS®a”’ØŒÛÀ¨à0UÙÜøkÂùÃ.§h:€¸Pd03þf‰E}Ë>ìçJ¾R›Ø11‰¡ÂsYeÎsC˜Ç>QË Ø7Á„€lh4~­à»6‡íD‰‘½ÍÞQñó “B!¢Ž£!5„>‚þOÉþÞhlû_»«¸‚A¢†™éÖ¦Ór}üsAëœëí##,òËœ–¢û+B…ð2@É@u<wµ#%j#2'à—= ã:_}•ëJTÀÖø°ú󊼋Û&BØx .Œˆ³t)¦‚cP¨ â)#–¢š3S 9335"Ó`â¡êíÕë+í#,Mc,º,}³*€°¦˜gŸë×$ᛨ׈¼B员‡sÕi Ñ:CC<µ™½Al#,S A#,ƒ€« ’ƒ#%j'å?ÁáûÇÄŸÏ‚ýX£ò@9@ÀWíÖ!UÚµøòW¤¯Ñöc +·ïpã]=zíI½)2õÛ¶I±ƒ`üºå’XjÿŸò\Änwd´»Ônc)š%u‘µš5šzÖ¡Sl‡Hú³OÉm#,SŠ›¹,Êå)Ñf¤uä’I&j£Mb“2ëSRZZÛiæj欵š¸Þ™Y„uã.¡Ž½aG‰êךÐjÄ45­è¦™º]a‘ï1ÕŽÃA´±PJL«üì”g~Ÿt…F€œ´mE«}mmý_ó>;^Vûr0O©€LÄêö MW%ƒ? Ó£ÉɺUbÄ3w¹ý{«ÙÒÚïÞàÌÒH ÷;B­­+™j’O®‹“WHŒgž]æJKòkõ][ÅC»ÃÚŸb>ï´N4ðàB Cî!ÏÂЖÈ`nãM‡5tFÞi;¶çvÕövñûË.Û2pDÄv"š†ÒJwÔ["t*»Õ–k " …-”›GÝL“§þ{q¾»ln;ã¥éj«8¯VØ$I)¬íÑ2½ó2ñ(ŸÍ<z¥MU–š©5éÂ_.zÍÌ¿ŸÂ19l=1IAJ~ýûu:¢øƒë—/Cß’›Dôoï…¬Y±¼ê|ÑÌát应ÁÛ¹7±I$I2@ÌÑ~ZéÆnÔ¦åE.50 j„môãÎÖ8ü­ò,Î>ÀùÛÑŽ£ßødc_dDôvö´€’»~²µQ‹ýÂÛ÷±‹h$¸Åø §×nGýMúÏ@#bHS> ¾Ó©óÏd³Ëê*¥%)H¢)¾#,ÈM›#%ôÍL·D×q f#2¢#%^ìÖ–T/%(4³¥*&GËèmÏ“\CsJíÐhþ”›·¯²' õœ„ãì,B‚Š7CÒLR…§øÙ Yí†ôN²²7ͽÞAlÖ% ݃#,p®CØýÒ6À9 fÑþDÁB?aqg鳆8}t9Â#% O=~PY6¸þ÷y \‹x]¼õ[p$ £´|•a2ˆ'¾ªIô¿Õ½a-êzÄRÏ¢ˆ*%ö›Q<ìr0}™,þQ=}k­ÇÆOr;@qùÁ°z†ÀYa^ýf ±óÒSAßú\Î;_x}Ðsßå„XÆœ€ïìý×ë; CeSœ]Œ`Ž~p=®Íž ùâÓÀ=â¤T ‰º;ÀÚøö¨$Êd”k¼<¬H"§NªîñwžaÅÜÑ€lz=Fœ¶„+Pg#%sðüJm%OòmâÔÑáootCÈX,‘HEbˆ}‡M~AgZ¿Àt €w¨'¸È g–«éÅñûô7;ø˜Z‚>`t‚Òªƒ7”;8 ü§ë¡õõô/ùrö–B¾cü”}á}‘_°Ÿ`úß\šÎµ}¥êªZP›@öAɲ|¤"nð#pWo}€háã!¬€\`)ïËUùÀ.*žcë} ›¿‡P…X¬tÀÐ’#%ú|¿J¿™"’}}ˆ§dvj5sèBÓÜrû%~–ˆ Í«÷hj¨Ó•ÉÈ…¬Ì½¹Û1ïC"æ”lÒ¤.O#,ð@¯/³×½‘…r¯´öT•Âj Ó³»0¹1ØÚǸªýžS$ú©<xuXCÜs³8郋‰Ä,Xz¡Ï˜íð8þS“™‘GT¡ƒvà^¡x<´¤>Ó%Y½U¨ˆÒ£å% ›‘ Ë?\âmUM(œ8lk#2º¬¢~Z’Ù¤ÐÎ’‰tj>?%0À15QÈ$Š¢T…œuzóæí´2цb×X·#mh¶7°—;Þ¢º&ç×ÃÖ›:rs"™„Uà?¬ñÕ3ÆAdV@ùuÝiNIZϿͧÀðT£(â/Õæw‰óˆÕoAv(ÙT¬ß„çÌà€{ùúž³Ö‰â4ñ4«7¬=€;wðY|•{¦¾ØÃÃðKhò À)àSj©Eîxûþ§‹ûﺿF^þ ©|Âþ8ƒXq{‹­E“Ý%½¡ýïþ3#%þ"hrOß*(ò©(Wþ—#, Ëo#,,AÀÓYÓiøbäÆmJ”ªj·f‡çðñõ?Ô¾o¶ï'ì>Ú<¤09ÄâšSö^°öž”Jãd«[áÛUVÔ‘Ê*æ#2?äLý®äwšžò!³Ý(TöC’ÇÙxÛ°Ùóú¿#,ånèÄ$cU HD…@b>jx§#î/É’.a.pXÖ¨ƒW” æ(ìäN€»¦æzø 6¹0Ò¿O;ßɶƟ~r»Þ–F>zÝü§¾cƒâ=æ)Jô#2 G ‹üf g×+@ܵ’Àn8&YBtöo#,ÿ‹œô~ͽ6ÇÜq$ŸK^úcEZúØ:F?ªhÞÓXfåÊð0Þ¢Þ´‰qø£¦s+P#%m$˜uT-Á#,CÀ×ò”#,T’`H€ÊfÀT7dShɈ"Š2\.Â%ì ‡œEÄF*AÄJ*"9®µÍîÏ’#2#%H:&°!©©kó;ð짿¨Óà%¡X£ü¯·S:• ±A5…:‹@@H;I"WÚ†´ô‡á»MÈÔzu%’‚“¡v#Af R!ÓûÓÐ^ÎâSÔüüìÉFiV}Ÿ„3ŠÛõ„–¹¯oSðùêµðSá×#,£F‰LÊ#7˼Úù(×*½+†éµÓ#,• ˆ+-–ÝÅÜJ„(¦ØZÂ,PÄÿ)Îö»ô|?N’þÐ3MãÊ ³ìóžAì};`%õñº:{™ƒ ~²@%¯Iï"–s}~o4a­Ø‘È4¸ÇaµúµMýÐiÖíBÄK F#"0ˆP™À%œ8T†C€!ÒtRˆ}(⥅¬ÄñRòœ ;+Ó³xBJ<ò:/;3§˜¼[÷Ñi^Cµ#2@Õ£wëÜŸ¦}´RN5 7ö†n:Póˆ°àÞQÖ@æöm(ÛÛ­ÃɤçÌŽz3Ë×;mÒßm¶9¹"í2@æÂÚB h0ó¾«(ô=Ÿ˜²vvàÎÂð¸ŸQY”˜’縒'í7KK„¦((¤„骰Sû#%ü<lBO2J’Pvy÷®Sáï}wOª?¢B¶Mžàú~Mî{*T?ã !ûÉ6}ÂЫKLÌoL˜a© ÂÂ0…¬_qd•d’Gàç«Û|›¡™Ã˳Z A‡u ïeÁ/ !E­Sí7ò>|h¤>„ ´#×G<’:Š#žY9!|úÿjôŒ<Ð#,›€àeBV„G°#2Öo¯Ýúê*KHÍÁÙ·Z<ƒ°ïC$"4˜ëç×Ò%,~ú(î !ìIøCèý0Éëåóî@ötÿ$$xË)âB0®¡øo%hŒœÃ¾ ȬŒb‚’ÎæzÐÂW’@ÅŸžèÙ¡¸Ãgq#ó‰÷#,g÷Uqü|ï÷â€#,רK!™ÓÞû¾Ã,柺BŸñ{OVgê0vb¡Š(¡! 9)Uhª<ÇxÆp ÈOåÂœ¨ûo—žêƒ"üúÑ;TÏ%`1EcÂ2 9©…&KÊp°Æq'P‘&1\Åe „E þ*þ)püH}N4ê õ_0®þçëKeËæ¤%¦ÅZE)`²\\Ÿ˜Á`±àfn„X‡A ÓÈ@ÐÃì ·#,sê…Ó–îãfôy#%îÏz½¡÷<Ã!RسåöY. S#2 žŠê=‡,”ê Ÿ^ß=cاXu‡`pz måS•¤Œ’ð Š´»dë·SÄ9YRx`çd9`1Nœ#%ÃÌãÒ]DPI(3B€€Á€ŸZ w|ˆ£o%7y»}|¡SãÞªMœOf Ë #2ª„ M=X—oÉÁ %Ê,' Á;1`þŒ•+$^DyÌÏ´‡Å|*Èœä ½ÁVÕt” Ôb¼^Þݤ›lI›ˆLF$M¦¶(Ä/]zà·ÃpsÏkðv?¶·?†TÖtÎ#lš1绸UgP=`Š‡*•IûdÙQ]åTZS£RÄõ¨l Û/§pŽ ÄÁºÆRÙÖÀåÚŽòéî«ä–V¬Æã=¾ä‘Wy¿º“èÙÈØ),’IºU €øk!œêLβ@pñ(;®½Yt‡b'TVA‰pÌú´ê´‚T<-ÁB{>Ì®øü eÀ„ä 9 âp]û-³•¦hêØzš¡¥ÖEM`èx'3{q¤b#6ê$¬! l #ˆFû×Kq>PžÀóy¨wwò'RznAÀ»‘‘ •Y•TKH¶sþ¾'3›Û°ì5#»J B;Ïà‡â}{rÛTrJO0àìBŒçžuáÁS(7ÀbúÇÑF#2Òwü‰IÖà­¾¤kd#2)röÁ}˜˜›œÍy2#%~Ø}ÝžŸ?—iiÏîÿ2BÝ5‡ÌË-žïö Ze¶“ÇÀÏêäñþ#,RÓí&7 êo‘œÿhÒýJp$ò+é_ÅG×øBëN¶†ÐÌâö1q£?†‚û±ÆüOÊ€ƒ™ÍV÷4f?õï÷`ÙÙÖWÙÃëÀ-Å [Ì Š¿N¶wB°šB8Tr§¹K\H·¬y F†Û#%]H+.ÊÊjР“ 4Ù†½£ö2#,Ûïa©‚:BƒlŠ¤¨~e¡¼gY“b p,óµT¡ü±÷w˜*÷oF`>ßʆÔ?–+&|"H±‚Èíê{ì ª/rm^IÑåÜ™wÐ惬L„´î6#,~gYÅÝÓVmAÝôý¶¸^¡²z—]Ç*Åá Â/‘̯EÉgت™$ôèdOż¶•¨;î²Æ-•M¸B„Þä`Ž4¨vX,ódï"ˆ[4ÇðG#%rahhôôúýð=íYý·¾<”¼Y#%#2µà„‰6÷Òî»yÛ¨x¯·[iú/×hÞ!›¡¶[wÄÇãê³u7]¼Üm£B2΋N;šÈá­bð\¥ñlDi™Ø¯ð‡Ëܦ~˜ÈR“(CX{’í7‰°»^¹B†‡VÆšK]Œ€ ÑE{ýZçÛë%»ºŠaݨ¢ÄŸs$Ääf‰ßóö{ÉïOs]V°úoC秶‡Ü34†@]>idƒíNéê>ÀàŒÔ#%k„a5/»³g³ï< ˜6Ýð8Ñè£_~¡!&Ö$…tð¿p!äÎÄà“E/oä¿ýGSqê:-²¿¤ú»Ç„ˆcÇk®î‰‡—ä*—Œ‰&Ë‘’~í¬U¦A‡ ù?q¤,ZÓtäüv®=±¹¹ÏX±#,¬"ÓC4N°6ÓÔJ ÓalU6Ù d¤„c.ª @Md[™§è9ÿ ŸÝ‹Îà|ü*šÐBêzN$D~aqûÏMbÉù<ß­ú(j£åG<š·#2k΀´QµÚŽ¡±´ö›|§Óäû¥Rœ­õþ’<|?¨6Ñ?f¨Oó ˆÂo§æ¨5ñ«>•€û¡9@W=K“!Ý„Œ?#Ú‹s¼Ë·»QÂ^p«þÍGÖSY€„†™• è#%÷žÇOèÕØkŽJ¦õ&ÓäŸ8VýÖÆÞ7‡ ZÑ ……IðÉx¢™*1¤B¢OŠ“Ÿ™P±@Y#%"X ë,']Y#,YRÜ :ÿ’Û?l:€Šê‰b.ïwU²$pG§ï>û~KçÙùMXkB"i^[]†ýÒµ#,|‚I-€‚£\ôžÐ9Üö.à´"A–xm¾è¹+0Øž—8=3LÐb<žDAàã 7ë#%J§õìê._8þŠàçëã_«"¿ˆŸÑÉ#,9ûÿe ßöê6˜Å‡ëh$ºË\ÔÍç:é™lžRç›nØFÞ^'yKšö¯Õ6ö”‚ Â&iºÂjO#¡/hq9"ºT"Õ#2+èAá©…¤©˜¥q„¬©æŸö‰µ?·èf†jBÞf~à›*B†¶c¯aj1þÐý[˜ ´ÄëÔ@U‹‰®Rc'ƒ›¢W&]k® ¬g¡øÜÎf»Pº›–ôh#{´[`;.ån@?‘€B²¤;HSz8Á,–%:ìÏö¦ÿü?·ÂÆÙ› $AfWÈXl^®»¾tûõgâl;OZ¨ÅX£$ýî|½J™Žd“¡Ó®r©X/íiþvg6ËØo÷wÙóˆ[F/øZäq¸|ÅA¡Ih²[ H³N53]½™!þcBº¿|sVûª“œÉ`ûOÿ¡¿ŸlëíáºJþ.#%M Ī-ÏÅÍÅmÄ*ßõ­ù½µ˜É@ÓvG˜ªˆD#¸ç5§ócö„N?_B°‰×Oºìa ¤‰´°kEQ ¢À`nå(@ŽÑfÿ‡Ó*Ç ¼>©>V~ú ¬ â#%@#,c„)”Â(výcðâ¡2›!$¤„ß®b^êÂUêúa·;qgÙr‰èõÛC¯óQfF[ÉøÎú¢@Ôù®/=?mŠîëØ}ïcØO¿!¿9à0O†“Ó«Qù#¼wÕ2®†Içþ?ív`ù#2tßq#%øòs[ÄüÆ&ŒÝ,“.]Ó{ò×™6ɾï#%d˜„*6<}¹ü¤ó8öƒ6â5˜{È®[#,ƒÐ_Šc7YÈ$Þø³lÐj|ûóÝj1O‰×yG¹ø¸¸hÖü©¤2Ysxl"™ŽΧlÅ‚¼;8Æ\Ê ¢#2o™‘K÷à^#,£lÄ9<)däíE™“Ú¥ ¹TMƒ0×#%æA‰cAýe¼Ç·=Ÿñ)º1V6D=Þ)=†b.Äw Nçô5ÜLUl(?’wñØBó<9Ñï@‚ ßQÂTo—ËŸÒïQÒÂTÝthÿõgc‘Hm•QÇO©Q#%r€rz àp !ú|í¯Í±KöðU#2‹†’3 ªŽ@†Æ‡{ê¾o»ÉåÀ9ÑáùÕzeÚŠpÉë7>Høæh‹’ÊÔL#2r6_ì³·óu]C8½ÚÀæ(M¶¹T*²öÃ>Ù~u‡¶ÒºÈ9͈Y t®§ÔÕV óq½Øß`1æì:`«ÿo,0ÿ¿¼>Ò®*(çæ“X(ÿ>Ž¾G¦úX2hÛ”lÕ–Û·¼FÌúÜQøòÉPAʽ7Uosüàc(æ|¥À~ öÙÛï[T?Üï1Ý =!dy¦E7Oèx–÷Düóø7ò’QÑÆå¹Dõ”âû¿Jú9…°W6W°^!#%me~WÄ9ÑÃEÔÔ0{}#,%{ÕU:V^¶‰B4ž¬–:¿²õMÕ½ÿ;O KM]~rƒG7 †jìPƱ/k¯Ö;tN®É~gŽ±îe±»10(7VlÇ-*™ºß5Áòr¶«J˜ïòœð¬éãyóÙ‰7ïÔg#Ž™ÄÎÁ§‚î¤îÔ±Bt:ȲX¦eÅ‘TI:Õ³äë©œF#2÷­vg#, t<¸%–Ä#%ðÒ~Ï3®0h\®B@3Ö×:-0ÐÚWÌñ</“fø½o5-{;uÍÁQáIqvsÝÂG•fÜ?r¯½·çÇn8Àx°ÀÜÄ7 ¡tw7vÙb{ ¯"L¿Lá2Í6eå¨ÕC¦ø*å>#,ÛÞƒ„¡ÄÂ’¥š*f¯WM#œhÖy'-zjn꽕ºm‰)…Q–0Gy”-ŠƒÔm˜PE!“ø*жÃ~Ž+ƒÀÌë´˜[«üÒ@"@"Éøy>1ô~izràŽƒ#Qf[;IËZÆ2Ýd‡9¡©\"ÚÖ þ¢üD>i9øÌÞøÈDŽÇÊë§'¬Ýß7½Pu‘}V3IÉíI¹¤H·tOÛ•äë˜ËõÐù=Ÿ7ŸÖîs®ŸP¨ÏY³0õõ·ëNÉ¿¾žå>k<¹Ã³€ý¢-x®Ó5UXðÕ08ó.©PÑ5{^,“×åF©Íïü¹Û1u<_šèÒå·U<‹Ê y¤´Œbi}{ öÍÙ†¨÷iœXOÆ5ñ(êð£ÕŠ1Îß×Þ ìÿNjП“ò§Wl)oz£¿‡”;".ö›ávñ·ÕÏm¨Ðã?Ãß÷=uÝÏÕ¨ñ¯]Œ ³£øG¡õÖ¨Æ{¾Jl».WzŽf€>÷OBb!3”:’+ñÚWl/p‰²D#2–5ú~ŸGó¹dtíg¯Ïpá1×»ë`± æ=†)Š›~!ëçÇo‚q+#,»çœIïš–æ÷ú¸è•È½èÊ1Ø£öIÔP™™ B5üûú\ÎÚaàлvâ¦LÈd„Ýd^äÝe£ys1Øz<ýŸà›;%¦„ˆLÌ„»‡¦í$TÌ×<Ͻrt7Ö>xX‰E|ÿtïÉ´KË·„E»SC°‰˜GÁÂNÞ¬øÛ98³0«R!NyëÙ«(¬F‘z *›ˆó(¤FîzŽÅZ2U"Â6·3 ªÉnq‚õè蘫‚o×!ƒbÖ™&¦Òê`Áª9Gƒ$d#àB"¡!—窧Ì{#%Œ1G2Åwžd@‘O£æôÿª>O„ü¿›Ï¯ú¿¶´ã´!hRéÿwÍ8_‡ú«ƒvá4¼þˆÓÆ*‰ÒÿÓ÷úºÎ´49¿Ù#%Ì^wB¥}ÿ u¹iDLÙAĵIúv}Ïñÿúíþ¯å|Æâå<SXiéKÁËû±‘oMUU‡ûOSê`Â&c#,‹q@tÙ·8@vž‚Àmä¢M·±Ã;tÞ#2.þ—óDi¤$¤HÅŒŸèœ¡ýW'PóÝç6<JjŽFšØ«ŒžLÜêuͤ#%¸6×£«u®ê¼Åñ‡œ†Ol’Á:è !7-Üï°º´ƒK5ðýqëÇÒ›r#2 §÷ý'áÔx#%xáÕÄy†Ð#,1×Ïø®#,(ÑÈ’žŠ†õL‰M¬=¡c#2fbKü†¿í4Ù0Œ“ÇÛknËcr7,%˜‰rg¦ƒ­^Ó§'P.„k-Ϧ±ƒ©Ý Bs<oìJû¾Ûw×ñ¡sC@,,©„’h–eï;§.>¸«òý'œÈQÕÔk¶‹|eËk˜þFD7 r#ÊžiU¹P÷hòƒ\#,šlù0à“•‡_°gÊ)T"j§Hë:¿.áÂL0aÀÌa Ô5† ÀXšˆÄ@ˆ …(Ô¥ "ÀpàúŽ¦=ÀfÑ¥wÓcvqõ†q3XŒËE¥6—Ú;“‚ØÖ½ûݦtH#Ëb™éõê:°Ú«%@ã;­¦ŽâM{úŒìÿ÷>gˆýl|JÅ}¼Ðvèû‰#2uçÝɬ‹—Ýíê½ÒÜŸ¶‡«†¨CÏ­ÝÞª‹3Ñgvàu#%iĨb’œ°„M˜£BêÂHŠÑ³†”ZÉÆ£m•¦6É–‰QƒA ò¨†\eŽ °¹Aû„!#%¡J¨µ!‚U/&Eåô‹ÚÞÒÍfh6‹ó7½Ö•¬þ:o:#®¯ß×t¸DŸùç(}ROœÔCà£jîÛ³mÎÄC¨è’Û<ç ݱ ÌÐîËo{X‹¤Bƒ§#¿Â@³õì.ÝŒ¥ÁUˆˆò¾nñýùÛÜYôÜ*Ip5’¤Ô§"þ1VCšÁ¶"`ŠÃ•‘ÅUíÅm«¼Rñ.ò®ß'†I´r†i#2¦‹µc|©%A±ºIÈÈZ8#%‹hcñqÔ°ÇxF$Ýh –Ý`8–ÌFEÜTóéˆÃî 4ƃi¨4TRÏ°Ö4pÆ ÇŽ½ÖÝìßqôóï,¾"^#%35’˜#,n1É°·`Ùô0Æ- hIÆïºb°$¸gnö”‡™.Àý„vé)2>ê‰Þwnäs¦]¢À:#,o²oOêã+Òª×å…MÇCAM¦wY2!ƒ¬²vR¯CQ‰s­ÜâfRPm^¿e 'kå}½w¹³Á…bó‘N:Þ#qè^+Ú½¥:O$<<D/S¯»Ÿ“¶L%“ÎN–õÚâ0ºîÇ0;¢”­&hö7ZÞu¼o*SŽ,Ž-·–¬ÔÂÉ!¶u³ ¾/9¢)±ÄâÄms3X…Bam²H|MÜ4"qrÿŒ¥KM–­¯7C…³'w”<˜Q'¹ow oäǃÔçMjf[,ŽãXŒW¦A×Y…™Ó, ±DdÜ6k R#GÀº½ŽfÖ@ƒ¬næ¨|¦©£_w³Ý¨Ï«hp,Êg`6zŒ’æaÓË#% (9É ÷õpåŸoÑÓèðíâHC}èXDD˜2D;O¡˜± èçƒÛ®¼ñ&)>ÆY˜÷9™·¢”QP^^"SÆbmƒGÑ»‡¨r1£^©ÄW#%™?ÎÐ0˜u¸Î&sZw›,A"–»­œ #,è!¤.N=¬à ±ÈžÞ> #%¤‘¿ÑsÑ`³Þç#2Mw…ðÑ ²Øg6Ó‹d³hvá‡c#2ì8æû(ùB„âë¢^»bhlwº‡«Ì,I¨M†£kÒ @i#àvÅKÑ FÙ2}»—3c#2L7{I„„#,¾!ea¨ØÃJdåÓ@GCÔ«1¢‡<«Ño~Å¢TBˆ#,³^Å6‡¡Á'àø=Q¢>g ¬wšM„A±èô8m'Üö&eÃkNWØ@YÍ N¨Q#%ÑARº±á¿‚™Ú›•]³^0Zÿ†ª mEÁ§[Ún†JQ78fMÅíÓ`›ÂéM² ¨%èù.ãÑÜaÀðØy"¥ˆw'°«¦†i8YΠwûÍ#,91)77,xúpå6dYÓ» €Ô³¼á;5Ëf|ÚÅÎiQV²R@æÁøë‚ñ|+ cƒÂ¬ÕÒÛÕ7iwºF^¢4B,s‡‰ ¹2]¤Ú†Æ(lwHAdˆÁT š87“IC9yµeÕEbJB˜vo.S¯d{NéÉccL9TjEn$£Õ2<I¹¹M±é|öÆå®N¦k)£i Q¤ä­T Jô(ó3×”9hº\à@ Ø+¿¯53¢!ÚÌÄ©™—˜™Ì̱¶cYVe™’J±Û3ÉK÷궵ìºÒ#2@âÃ]qŽ´T¹\š¡¨F(,X0zHØÚWäÓRÁ¬Z~ï-úMY^länl#%…ê!²xú²ÝŹíðèFØåÞV#žtÉ×2”FU8ò RTK¯=k9çÓpº.›Dæ™y§]Þ!¹±6LÏ•P(Èyf‰‘0„53„r·Ó™ZÜ|óZìÔqÀíÝšúš Œˆ¶"”z‚µÛ·2PšAñ'gϸR]Æ,ª(IuK,Z’&Kb–Ò¼v>œE ¬eÜé‘«<Ü­HÔ¢Â#Pbâ,Ìé%±/§4ŒkfsiÇN$|qc°Û|¿s<ꩱZãL°]]x==a¬šrHvˆå4R‚ˆ-mîŒ`¼ô…‰ï€B‚s'QQVŽ#2í!»©Ôªmµ<"´øÀ¸}28`ÕÛþ›àص^zËIAàí#s¨·‡"ªŒ€TPªs3#2pês…À7€Ãß×äàõë½Uq­†“˯<óOçxmž¿E#%Þ§„²ÃÆð-{u»û”i­ÄÐé–v,çy0®‰h¦BaŠÕ¶Ùn™ñ¾Ú#,¬èJB@G/ÈÊoÀJlðtkRkhâÄ$&@àhëÖÇ6Ç–\¹X°øñ¦6Ö¸i‘|#2D£ÜnZC‚(¢/C‰!®É™“ƪéÕäŽÐÛÉBp„‘™¾LBq6†³<_ŒP„,éý›#%9öyÉk#2\!)6©­@ë¹0%&dÍ Ã…ö(“¡ÑT™]ç›>#2`HéAçÈÜåÞb<BÑ#,#,¤E¡F<#%Ü%Á½¶E¸ ­38aû’‰Cqît¡#¸#kkϲ#,‘„&6öEìF¸#,Y‚)tˆ¯ûz1âM)1ÑZ‘TJ7%@ŒwÓ‰é$Ãgg´áí—Ó&¤,Ħiéȳ°—X{O¯ê¢ñô9æ$›æo#,!ÃæÀD¢Cs#,†àƒ5Ö)a• ‡x”T»P¢sCš ÂC<"çm4›I#,€qÉÆpã#,f¶MÃQCƒˆä˜± C2Dø*M&i£“(äÁèxi1¤9–šÖ¯P×¹ÇHÍ»[”ˆ Ä39ñ÷5€…÷º¥&»VsC´#,TAækž);¾5^±À-¸ì¼€ܾü˜7+€,Aˆ‘d`ÈÀÅf¤ØØF!‰Ú\yÞL›ª8š1YÌ3UñvG¼é\ŠkìõÉkuÆr5òÑy§¬°¯cÜgGgr5™ÊHl^¾ÆR½eɺ•ÎNÀàpñ <]ˆr(EÌÂ4¶ŽyìFàTbû¹I|ð`×õÕ˦9¢•`÷‰$ˆ÷1ïöí–s»u'ãðæ—6‘1U Enðñ>ž.†ÌÜÓ*&Í©€¡5%âWôp½Õ“Ùy¿?#,\ºÓÍé i#, CÆ íì n øE¼€“seY$ÚL·#,À•ó–(#2 ?wZ7d}Œ˜ÇýmÊk¨2KàŠ)õîW¡ê*eñf[C4»ý˜3RÛˤÍmSð2™’bѱ©ÔþÔ½9ûEï¨>»»l—JÄÏÒÑZDŠ‡œx¼2|aÒ¢‘üÓªÿ2?b2,óë|WêÇ«–åpedtÚtîú_¦­rBnßoofzÐy‹AJÒR~«ÏMÞdž„ébÑ¢aŠì— #,ˆÁ6C¾‘êØ>(Q6ÿ‚o!¶UJJœP—#2 !`Ê‘ >ßkÓŠyw¸+ñ#2G~ç0sÓüäz¿Ð‡ý~É–aþÏöN+QY-ܻƔA#%h¤¥ùá M­ùmj~Zž¥ÚR‹fl™Fu«ølëìû?7ãžñê%PÙé CîÏÞEöiÒýìô‡ÎiJMRÚdÕ)··PHB?ÎAi# y O#,†A(Þå("—<|MW…ÃU£n7 ÅÑM~¿Ë½ï\µbجøRäx•]i¦¨TÆÖPK3^ÜðîçЇ{#%»àI )kØ®3½%výóòýrA»T#2j-"ŽÊ#%ÍæòN#,¬ŽV¿;Äì|°V_îUË;É$#«Y¼z¡àÉIOH¥Ô5Œ³òˆƒ3.ÁD– –‹h®@9 ôÐõB"@ˆæ|ç®\¦€úâÆ*X4GZ#,ʛáx‚{i#,¤`E! Ö@‘f»}At̬el¾[å4hºÙxt˜¼ó¾ç«\fwV.‰2»4€Ô©™#,ʆH¢ÄH]”I³X3ƒé„ÌÀÿ²"Ý#,}ÇyJÈÒfŸ]Ÿˆv“SŠ@œN]T_㘬;‡Æè›â×Ú¢©;<‚àX€H$Ñ£3¬%„_¶Ÿ\$Í•>*8#%NÍÄ „Üp5oMw²á¾ ×ø#2å>{W¡¾\ÝFG~`6ç«–Àî?•Eô]YŽ"Œ`¬@M½S'˜ƒ+·Ò¬m\´U-%›J’mo`d;ˆá;`‚þ؈ ˆ¤€ "±"(Ñ#%È€ ‚œ q~a‡¿¶ ò¾ëép¸Ì=N2QðaB6ÒÕE“Þ–¬ÙĪ º²¹‹–0—"ÂpƒvµD4-^YëäWùú2¿Éšõ¼kÑR’L[Õݼzm¹½Mênk±(ÝÝ ’ðë¨×-ßãyæÞ.n˜îäwW7,••Ý£’_.jé£K@”$R™þÜø“¤Hegð_D› Ð&É#,umú+ïvˆ78#%OtÉ †Ÿá”6̱¹êXuˆª‚±ìcäÉìÂü¾sýÌ¿i\š¢™';ê¢sPq–BŽ>Ÿ†r=Žž^…ø3¸zž{šbÆ_æ ‚$| |θ_7æMtÊØ&ÎGË®_¯³WN®³Ù›G[»s>aP’–+¯ž¾Ò­tùîšlÿ-;Û@˜¢¦U*VÜÕcO«YëM3²š}28™Ðågû¢ñžürÝ€ êøŠ©êU8ÇõÏÒ_·KƒGWôÁ. #WŠ%Ù p.@´fÚÜÄ ƒ¤Sy¡dñ…AÀÉYˆJPÒÚn¥Mî†#2iaIq° Ÿçb€bD2ë°vŽþ-ÅðÃÇ+U‡®Øbå¿x0S•vÍâôMÜwâ°â·”¹MÁ¤HMÞ3]ºÓÜ~_(Ÿœ,6ï5„8*ûªÕ`îwÞØBK /x]ìgfûI g—sCõ·EœWÀ<7Ÿß«ž^²ûøñÕs4ê—«R¹5mÄ&ÎèŸÏû®ñ±Ä©ãgB˨óó\s‚ÚU’Á´ýrLKÛ¹Šfƒ²ãQ(Û:‚TOaøA_«ÙÌ¢•RªQIÛÙô­éÀñh¢‚QÖ¢lOU&ª^Þ“ÍÉUë€H 4#,hï„ŽàafjVD$}*œÑæe+äRt‹ÕI"n,דƒ½"Ž#,àâh ]OÛê‹Í¥±ÆÄØ3ìÏÉYá¼YŒÉ]QWPÓ@»ü·å¾¶‡ŽŸ/l!AK#)‰Q×-è<ÃÛå%HRö¡€Ä'ÖŠ‚ƒ¥h-¶J´[%³V4“eTb±YYmXšm’ÒJØÖ’ÚÈÊ6f#%$H±ˆ,ˆž£ñ??W5Ä´–©Îßd£®«ª7ˆž„9D*Œ€2=~´>ÂL €ð@ëüuÜËà3r×}‘n«é`M¡ÏÓnd(`<46:â¨æ¢#,C#š@oB>C`*Ë"—ðŠ¡…`æÄe:dšgZã·(†}Õ¢?LR*˜ÔD3‰'r²hd­¼Hšt¯•MÍ#,%€hkI”‚/¤Ò²fIš¯s«rÝw‚§º*(»w*R Z(íxÇÕ˜N{Òup£&šÝ¨$[j]8l JÄ*ʽ‘mî°s‚û<‡—*#,YAÕ*F#% R¢›DuíßLHT HÏpzg„è„"ŠA‚¡2N‘!HCZŠÕ͹²W5¹LØR¦QTÌŠ“[HSQE'Ù™÷Ï°h!ØÜÓ&²Ð8@#% HAdA•NÔUÔ£Êúø>}î½÷zËêŹSMå¤20âáwÍ@3 ž—™…yžwßv) ß#%ÖHˆ}!C…§ÊCØÏÝÿ/á÷~ÏÑèÿO÷ìU8>s†úO„`,’Îï;<x¨,SP#T%â£D#%-$¿:ƒ£©ÑAˆ„VD|êªmï}ÇiÓ§+.¨š¥BP¼PÙ?Õ(é$&Ï·M.¢Ÿ[?š¸>Te4g\dKA~¸SŽmz¼Û-V²™D¾)N¢þºN\çfóûÁÄ“õR+µ˜A#,¬Zb ‚¡žÿià1픉Œ;+.ýú‘©:›u§@È>—„—CU8/¹Gá¨j{¬ISì¶IÉfQäT¿¼³ËzIÊk¨l€(2‚hÒ5¥ÛMÝO4ê>]gO*;B ³q@lŠi8"lHfýIèBPéMdéæGú¸¶~ñi‚v$‘¶¯SÕë}Ûß͉âí_êwèÜàû(wÛ~’Ð7ëMÔóG¯U+Ñm³õØø~¶¬Üam‰0~ì°%#­á‘iõS§ŒÉXèÞŒÛ*¶@ÛÁùMA K¥ÀPg4@ª¼C”>>÷#,£ {üðÙÙÖ5:£"íu!îÝvâ#,³yÕ#2Q6Ù”¦Ò™õ§¥ÄcìL(Åg¾žñc'vÖ d„î:Ó1©œ=cÐæŠQ©ƿǛÞÍößmtÒ‘I[‰A6Xãk°¿*#2‰.ššíXRka\¹ÙrÇŒh„X#%FOqIQPõyQà#%ϼEÓ4>§œ6uò9Öb¶îþæ¢$!f9þ?L¡¥!A«)ª¢ ÒDAAþ#2£íûWÞ«îý8²l}•wv»”(°ËHB'OOêhŽÍPÊ+Ë4 ×·­|gg£.|³„3ž…ˆ—¶–żԗà¢tc\Õô´²8xÈŠ~_³®†Á¸¹Ñ€|:ä¤)UbôYÎ’@Ó8û,™ºŸÞéê®éjøWëµ@ãáØÖå¬É»®÷ƒÚ¡ÖAá™Câ*‡nø‡â®´,¬Ø´^Ìr¾È2T°Þ.W ÷¿. ”J{VÇ= neç^sÑw7çÏD…‡Ìy+‹Ûã½çB¥[k¼zDÀ¶1Ó?£Mô£}ÕwL(è€æ*ÖGw£Ž–Ütí]—NüuŽÚç•ÃœqÅí«1в÷f‘·[d¨F%Ê;pûg¾¹ë]øÞzl] ì؈Êñy´EE0º7ƒ~6Ù®2.H¥¶Æ×#2öƒ7ylÓs­y6ÎÔm\9œ7Ç`¯WpS³cïÓƦÝóï‹Sµ™ PV;Vì¡ÒEº#–Ö³#,jw¢Ôh˜R {(ÀZ"¸¹™´^Ýñ[57K¨îlÊÄ0(ô4|>œØué¼úñÀX™Ôó‚1 C\þçÜã^îòcÛ 7>ö©«ËŠÞÎz‰¡ãô )=t&~aõ|ÊN¾*{L0#%BV¤%QŸD¬‚‘R”/³Óx¾ïõêÓ£ÆZœ¿¦ÎÒ±ØW–<”»'¨=åùz&œÐ+…Ã"xžG^}±56#2ÐzJ·„#2YÚ"ˆºòÐÏœ0bÛ7ôPüà©É•÷FËà#c Ë£¬8Ÿ”kÕËfÁ´\þ¾Û˾‡¬Å!~‹7zx†9d$#,gxÀU¨j¹6/]f_™wѸíÛ«u°ohƒÞÜØ–$äG5ºnÀšº™;Zл“\n‡#,œ+Öp@8i¤à}H@ˆm1ç×Èl³pnX˜ÝÎ{(ͦ¼ûNa}"…C¶PdÜä§^DZª•,AFÎÏõóß$Lâ9˜4¢‘Oªñ~+"0F;4ÑZU7T'¶±‰î÷p1ê=h )G§#,îLäAaƒ1ê€zÙ&§ŽtöרýwNÝ:cnÒìSQ1Ö0UéÓÞKH ©GmûØN˜BòƒÓØ;ô1­°oG÷™1,Š.ÂŽ“Ϻ&®\ÆÕI•ÿG»qÀ'´ïÕ§¬¬±|8âôöh¥(r¡é}ê’N£T{榤m»¿³"<ô$IÅõÒøIS¿;Ä )=Y§ªñÕÇFª²0¸°&ÃaÅ?“׳h„FE5}\2öuî^™ÔH/˜uÀ“¯Ý“Z÷(ß~Äèñ á[>#,D†p°²ê‚ ‚:«˜¥‘¡›%µÒæÊNêêlä\–*ÓKk·âò廚darÁQ±V8â`… IMË%.Ó—sw2#…Ìl£5—#,™’È 6„V GFàë†#,º-#,Mb™„«2‹m£_Õ;ÁÞÃÑÄ£c#2låؘҳµçÇi±÷îõ3ζ¿gÙWîÜŸŸÅ¢R¢ŠR¤ATm%øUÒÈ2k6߆ë«ð«®“Ýc¢í¡#%* €1¶A|CÚy$ &éø—!ô³ð{“ÁØ®¨}yl)iÑAaL“vÖ Ó%šy¤Ñ‘³¶¶q—±°æ´Sà¨P©Í#2fD㪵ma·Ô¢žÏÏ:a]»çˆò¡%‘Û¬  e~ìV¬Š‚za¸©‰n5›ÚV:‡»M5qÚym½ œŸL×Ñô¬ò÷è]<3ÃwZ5\×W˜KD"D©HÆ#,Fš$n:„¶B#2RD(4-*,)Ea»IÍ[E3#%Ôðì>º€Ùã0Bø^«î_\ÊƃnëµXÚŠÑ«ÎXüDR`lÕIÖ˜…"bì¢þ[²z뀼’ü×|« [TéMŸ5Ÿ©ºªäêxð½$¿&ïÄ(ßÞ`S'\DP ij©MÏÎÒD×-nóD¿|“iKÛ6ªª§Í½†b)"D€ÝŽ!\57ßß쬒ˆö¼-fvc)´õ mÅÖÕ C!DgrB4Ó ª'ÉëÓ#|íutF‰ãõâ bÀ„‰´ÐØêfÊÍ‘3 ~#,:×1¦*™!s·Çåêò;»ÇÉúDBƒ®ÜÍÛT{«»µé—B«àO¢ÑÊbŠ'òõÛéŽF̆‰µ‹H°zÑB$YÌó:1ŒÕçWI\ªbª™Ïw ú¾‡’©5–•¬µ >Bq†û}9?©¦ëNs¼zk3Õ¬; ~ÕÄ{ìø'@Ï/KÞ×·t) Õ"vÓj7®Ç[ÏWÒ%¶“xEîærî\à\–(§Õ©“q>æi ”‚àœtÙ3šñŸ·¶´É3þívÃ,#,gb†ÚN¿&RI6/¬>ηÙ5ÛZàÈ€Ž0è쀂Öá „Ú]ƒeƒ46ñÔ«uA ”¸_³J@È"‘„ÉÔh]°,,‚:!Áx7 f j2B„º+N„¹Ë (°È îHÈ‹ü\Þì¯gÃ>4Dg‚1 •Ö$pÙ–‘zÀ€!PU¨4ºúŠÍAM`ð`¶³u›Ë±ˆÊ’#2Qª„¸2B7¬ŒEu0ÐÓDÃyšZÑ'”[x3#,Bg ¹c$)i/¡ ñ±h!¬ qJb`b(Òj!”Ù[|®®¶×yuð˜À%Ô¥†-Ù_—9ÃÏ<vÏ#%¦4ûp?dHãÍ6Ù“q86ÂÀ;ëáQ‹ÝË"ù²®» ‚4uhÎm>|¯‰Á’of†äô‰B<;“:¹ð©Š>b.K#"ÈêÈïãRÚìC°Ø{Ë™w—r1]’g›ìq>é¤9#%³É'8\KX6UoÙÄøÝË$¸dXÕpͯwŽ¿ìíGÖ.KßÉànpì…‡.±qé]ÿWY"Ž\º›¤8îXýý,ò‰ÒgáB& I±EªU#,Ùêî?È1P=J§R5°øyù(—:ÄKd<¡œ°*Y:ŽIß0Ïh•#%o¹ì‹»»—àÞY}<âó ’ Ï€,¢`LQðL©x)Ž`újnþ¢'²‰Qj#Æ%…ŒN¨^AиT¢,‚'êJU…ÓP¼´\ÁT¿ ¬¬ãb¨LcC@! ƒV%áJé1bN~–"(˜€SWŸ;ÎH…@4‹L]qB$w¼ÎŽ}!ØïW¢EIÂæ6b ›²ý;SkæbÅZFt$#lh¾Ñ¦Œ0‰áiòG¸†˜–òbš6´ŽüPʳÎÐïÂkAÔ!Iªx—#%¯O”ª§BB33 Šö¯eÅ!7u%q֪Р|3:‚3‘¤cC}Χ#,¤Ý#ξèàml6ÖQǧ,ÀË2K³@‡ß“hÌb®D•BðŘŽèø<0Ð9#% ;‰”ž¥ýOU >4LžB¸hÇWž¦ë(¿ÈÉ$1À®è†¶»Øò³ˆ,dÓU”¬ly#9#2œ«›Ò^ÌF=† ­¢‘R( éCìï³Ã8ápÁ‡Ôêéžm¯ièÂpMyõ-Aš‚Œ«Øˆ@‘“¥ ÌBÓXÀýlHALyæ½Jj6ÆÖXÙ#2b*#%Æ‘›šx åŸlà©ÆFSÁ‡#,cot¢,{)Ù0Xö”7#k°Í…tëW&ZIß?£¶k«žq¤·xK5jH^¨g¯&èKÝb&TÁ"ëĉ1eÆ4ÿfÖnH Þ½.¦•\y'ÙÒ ‡¦3G\mž-u†vG; S¾éÑÎb,mg‘?l®:ó¢ˆïå¨edÝƬƒdRЀÖßLÚ¾k[Ëvš)ÝÉrÓ[(˜¸!@êc…jøÚ\U7Ë.JÊQÉj¯ GRÆÚO|±ph¾ÿqÙ#2ª\ È®Q3%Ë9Õº#, Ì¦‰HVÍ’j4(†é£m0…$“Q ²L 6l11ˆñBŽîðí5‡irÝâ‘õÂìÎèd­'D%TR ›a-&D)i4•JZ¡£Ž#,KbȃÃCv­ØV­“3+wFÑñüdñ.Û¹ð‡Ç9ÝML™Í5#›Ô’#|¼™[A‹Úæèu˜‰_kØaß#¾ çª)Ì¥Ô…£Å’9] i]dã‡!rˆ•l˜Ù0sA(j\8$~µ@6°eôf”C#2ÔÖÝ[‰cqj6ªfdQr2å)Q"õE5 vøÐ!³À v‘ÕŒoÀ#2Zû> v—±³hca7ƒ&s:ª¿œ 2ÿs=Ì3²2ñ„é6×z‰dMuSŒ\îÄëbR1ÐÎ+n[´ö»f ]€Î6ƒ‚ØÙkå>)4+.b‹$í¦¬û„ÔeÛ¤6Âá©Ÿ/'âøqÆÙŽ•~dæ´sO“Ù¿MµK˜sjÝ–§w@Í2Û#×äÙœ¤Ho£¤íd¹XŽ½7@øNCß¾r[=dËq»N£,ìøôl#%SŠÇq³åéë'$}#2רÖv4PÈ¢‹ t…#2 >A¤XœðZ#%Òc>ïm) ø,,·57¹†å#%¶K¬iQмMW©#˜šhÐ&€#2’M#2š^]0TØæúÖÁ‡D#%„P$¾í,d5fh#.†b@¦)@`€"!¼9†`M S%#,Úù7‡ëÛ&&À­Y—T«&ÿTï°ªu“,ÆoÊîËø“¹Ù¬?¥tg÷[j¼ÑèêŽM“9íîj¥7’ÀîÞ=ÊaÎHÜôIL–Ëë ”œ{òÁà“û%\™üFŠiTÛS+Ö¦½ï“ûþa=p„@Ó²ÊxÓ<éí+_´ÐIJšµø—<[qZ6µ׊\ڶƵµÚ¹­¹¶ÅªÆÕt´ºÝm°úµgœ¸œÈ_½Æ#2)«ª:IØm·z­ºLì€pîL°}:Ã0݃³£gé'Ìý4šÖ¾ô™¢IA)“2™¥i–d”¤Óš¢Òf þ;©0–´† TM5(d¦ˆ”(­,kß·(dÖ“ID¦VÍ#2dÄÍ3$fTPÄ¥Céî¢#i,Š‰LRJK(aª ’ƒQiQ¢ˆ&S£4c&JÓÖ*BeA’¦ ÊTf ÓA¦m1%  ‹4ÑÜS¹&óg¶§äe/Ø!#,ñmñ`™½ù²µU}La vc_é›2#ûŠ‰8óˆvp‘Q¸Tr}Ç+à çgX&éΧdåƒx.³õqœS(hÆô–Èãj\ ‚0Ž¬Î]N´ìÞÞIŒü(= Kð6í ·ëMÔK–6¢x¹˜YÇR»½Ø—nk—øc{8Œh_ÚËëº&÷7<ðñmˆ„$ãË7“%ýBs-g§Ú’q«­Õv×»# Ø›l1Ã#*™…*Bk`{þÎÖ¾¶Ûõµö,Lcf´dlÖJÅE²m2Ì¡Â,<¶gLJN®Ó#,ÛÑo*Å€™°¢(=vüÙÙìϼô'*¦ósŒ0õê,Â1ILá#ç§1!†#,ŒšW>ý˜/öW#,­ó—±Ú½«æ$0'qÚGÐÕÔîØzz“çµ"'£í×s´Ff.%Qê¢Àk¸Æ§˜i(6k/Õñ³râ;“>­ /SrÅ%œ¸†Ü›P½¼®°c=òJ«­F„Hb Ø•$I#%‹Ú™1ê­é³¯î¸HûfQ¿vÛ~})õŒ|f”¿OHŠ:Ì¢Q—ƒO¶ÜlcñÉJˆÌwŽ nk‹wèï<ÄÊÇ;YñãýPháÙ#!õkIûšÕÐU$¶Ó}<úὧãe{H¸¥…†*t*.#2mfà9¢¬t(Gç|áCllîÝï®ütá½9—#Xc~Mö˜;t°Í>ɇ<G÷£œp¸$šú,nm_&·É‚Ôè2…ò˜í¶£·~WÂc.[õ"^7L³§<1YCŒu-Í4î'¼Ñ¯ thcdµäg’Œ ®„Ä©OSãÆk’÷ÙxIJÃÚq¢fi<ûé4Š#,Cóqï„ÉÙ:œ6“ˆ…Ui”ñ–Wu³T(@1«k½‘3ª"úTéÐÛx[nfeï ¶RDØ7´ê@íË#2'îú¦«½Ë^©ç·svwò#%äl¤€„9nø“­«}zBzëÕÜo¾ËW«È`‰q œ>ß®¸Þÿ¨éi:’$3Ǿ;êN#2åžüž‹ˆvÛ>Þ¯¦[ ~»Y~¾ª#,ð~aÓ+O‚©b6%Ü'sÓ~rz4ÖãOt7WqKõùs¿“Ôg&û´ ¶8«ZX{SaÇ“8ÛmØ*ìÔ©+é°±ÞbîD‘tuàèe g>ZÓ2­3RuÚ`ødxLÌÈQß\Ùã–èI2áø¾°–,"@‘C‰\#%kX>êÿ#2tð£ŸCÕëý;>h¨ÃãUŸ·ÁíJºÿ[*Í.¢TŽ+Ü›™„-¦f©\ZbïS92jŠXR„W#22rEÓN#,îk0m3ßÆfÊçÛ1csQºt™Î£ÍCLË[lÓËÍŒÓ9—BÉ XgFE5(Ô¦.3ZÄH²„X\o m.t²fÚº‡zsÖ°'›|JÒ” –¦wÄþ³U/ø’Béº^,3ç©úå7½±ÖQæÀá¦ø Á2¦8©?k«zàK#2âjf[CÕ’f5£f2°U¶™=Ú˜øÝœaÚÌgmgfüí]iÚƒK„Tâ -…žÔåÒt‡§¹x3FÓ•’ï3¨ÔX¬Û$0Ô7 $°Àl—Ø’rV‘Ò“£`üµžwß©ƒ&Bôoâ,7#2ÁŒR[Ì&*_¨€ÊÐõ¡‰êìí§ž4ÍTo#,ª?.02!ðnÐ6#,ÂΩª²æÑóÄï4Á&:ÏJFìÀ9^HÒ.éV:°ÈW<CM 5sy‹™767¶ŒLªL¹‚$ôgî¿-bí¨Ç<wÜ ã;am<Fµ OK9–{OÎb0ëcM5% ÜšÀ„ ¥­öÄ0ÿ“¶ñ01€HŠIÚ#Ó­4Ó5u’®,Zêù:¼qæÞ•ãhÃM…¤ÔGŽ‘ˆsÓОõ³|¨ˆØØãNUåãe—QoDJÍÞÙ¬ÎLâôbº>*u½n)Ðâg@:wC¶ÆÖ‡ªËüÖÙ²„o‰ã×mcXÚGãƒ|6ä'àFv(„ýn$é=àJL%‡Ùfµ©ÏLxÅglhpI £S˜Ïn+ƒ4G`7îæ)¬Rãžw¾_<ã0Ý®È^ÏP•Üd>ÃÜllg:Žûà5Úã%¬GQÞvY0™ÌÓÓtiXÑ 2cÇX8ò¤ò"$ÂkfM‹(}m«çÌ%§]²éÅ B0HîЂv”¡ÒÁ®„MqdKZàÉ2D½CȹiawPPe†#20¢á¨qL,}´Ô)«”y[6ÛiT¿•aS“ J*V*·ÍÄU“|;î«kÙL BeŒPcUpA±³=yÏä©<—;C¸Y¿»™+êžYt–WΨÐë~뜷y–Óffå#,5¥ˆ1ÖLPŠMÄÁYzŒt$#,hi®Ým<-œbmu:aœœÊmx2¾ÒG(Ý0냮`á\6§%‹C’šõ“j£œf§àq Ãbaöv„ÄdHK“ý#,ûóŽ?+¥#,æí +DLzY¦UoeS².i8u‚åÈe´E•Â‚q»œY¦ÎջΠ¼ÙÖ+/Iž#,re”먱L -šTHlúiv3ss4tÓ•§Ó¶ WCBn´R œo!±N©³ ’Q€…2(dØ´Ï#Ô.G âu&p°-JO¶Í­ Ü0¥‘Èí¾´\âbœB¸fY|c³4D#2àv$7ÃíF7w¿¾¨¼"Ä‹ˆ!4™tçäÉp‘†üÑš¶Ž°n©Þ¡¿,IL¥cs/{‚z·VŽÊ’‰Ê˜Æ1¾Sœ[O§s5mÖi¾¼­š­¹fÊL²F!ÈŸÞ£ k| ‰.¦9"ffPÈd¦x§6—ÍÄ!° ®\Ô8u|"ÜÈm¢qßKf‰¹¼s%O6;­a5c|ìÓ7$t5¦÷q¹¬µš£ÖŒne˜Ìdwvt[¸—LLLb||µž1©ÂŒÇ3ÔŠ-Íáæpó*!LÜE }¦°#2•¤›?›—–Væ©Û=Ý'Æd\r^rV6Ü$M¦¤Œeµ4Kbá3à#,e™ºª°mÊ+kƒs2úBº9‰“†H4qÆ:jn¬21É O)&PmV†Ìâë\—[™lÖfõŽ™5,yU–LbÇ0vB‰ÓEÍhÖtzÓ#lÈ[ÃKÁ›~Å2îÁC.|î®pª¤,áƒÌpe¼ós¢…Žê´S±žï,VÃØNÎÔa59eª«œÅ1;3Ø姬T˜'|IO”fîWG¼‹|’&í²¾"ƒP¡$'I#%Ç·œÚ—£@ÅM¨@ŽS0ƒBƯŠÔÜ0„1¢ºŒîY2ÇFç&ÕÃÂmlÍJûZ–5/EpfôÇ•˜ÍãÓ=3•­>ô³."qÝ¢ÝÚY¯ò$íœhà«[Kµ]qÛ€¬P®õ™¤$8È)´[½ T$™#,íGHØšò5Ñ}fŽŠ#%¶‰7ÙI()^£Ÿ£5_^¤#,"Û&‰T©•;3±ˆ`“tíG£°#€˜wbÓðhTkÔ!Kႃm‚Ò‚`6‘Þ`qºBrìdvl'Öd¹Ï^­kJ$ÐC¶ÀÔa8 l'`®ØõŶ2–*6ˆ×J„ŠÈô‰ŒSR™ 3ƒ @±0îÃt¬wÜ)&Œ#,7HkÒ«lÉ®h9°¼×a2µDË#%Ù›‚jÉ”ÔÍ°Ë" di‰¥¶JfÕJEË»4éZéN”(XŽ”S7p‚ÛͤˆËCÂsÖ´ÍM’RC ÑÙ9$´‹iL7Ílž.DË‘ƒ¥IŘx3‚aÕ—­Jtf¨05aÍ0•Æ¹­²f8¥ övã!=ù¬eV'…ÈüA… ÖÜØ짒´Û6Ñу•:8DÎ …Q ©”ÆÆpõç™r™µlÃf#,§To&¦Æ¹×ù콇z».N'ZB2Þ9CËºq+›YÁL¹F†ãj¼ãfcO¸åó:[!ÍŽ Ë@:Å4cC#C8-Aon¶4>É« ÊYÚU“¶qÔ˜/Œ±Œ}×ýFjPÜLÒç„ІÔ45±›0¬5š¥¦ÎÐÉÅg€Ôç  Ó+ödÂC:8Å”‘A­²±ÑPôOjï|"Ç­Ì\Ë!`êC‘Fšu ¡÷L3[Q<w‘Ýx¤½ST)„PÊRT´ 5‚áL¶#I-© ðN¬(ö{àäì("<#%âL²1¶F6—_ Çå×0¶\«cKYÿ,¤E‚Dv ‡JíèlÆqú>šî’#%Tà˜êÕ¶š+”˜p:Ž¨!”!±CU-œ%±iuÇ1`hqßy2C¨ÅfLÍ.cX›„#,‘õæk0غÂWU)¡¹£}ÀÒ0ƒ‰2,.í®ó@Á@mÞRd'¨Å{±£± †UPÏCƒ„¨@Cc„04pæo£6pŠÜbIy†Ìnéhg4g.3hnÃ" K´nÈxGŠ6QE¬èiuA³&O¤”“H6G¡¨®ÉPì·,Ûv“¬Ú¹—CXèº2'#RàÈͦMIHàGLîškÊLïÀªÈÖâ.«#,;#,†Ài3»-‰g8f#%b¡Ò€ç¼¾}<·«_êTÚÉš2f¬Ð¿ØA(PýýÅóE!\4{3¼•6Šk(\¢>Ô¤AŠ×ùõñQúüá͈jÕ{š¤’$ˆ22FI!#%'¨Ü}cûLƒ1‚NBˆÄ®ÇF韺‡8Ô‘„Ù€¢P*€ˆg2€2 ]€we§·-gžã@i°u× “Ⲫ“†}(=üï´ÚßÚpcõ‹/yÒ¼êYËK›ƒW)LÖã&ïÔ[¬¢‹±ay×/¶×(U‡FùÜuðÍ“)±´Æ\©s'M•.áiR¸k5†…ÜÖBh7„nÂ20+aÀ6t:’Û²Ç<7B,èêÆûz€1žÒéÀæ^çô5’§4pu\0R g8`"}Î ‰R†–#,S#2u2Úûé–ÛI¼”š­Jµyf¢6Eßã ,¨B-¦¨MDíú=¨hØUëÉæ V ´*¨N¼qT"Q“K”=¾Þð5ˆd‡zûáçêmçðÍ;U~#%7|w)(%Ë÷•9uwu]˜Öë»2æë¦ê‚×6JþróSË÷·vE­ñnWò]g¦‚ƒÃ¬yÀ¡CûÏ5þÂ;e1ت;ÐÊÀà~œ#%ròx¡Í}äCŒãÔPÁœHµj(ŠõQÁ÷˜q`OÖæ€n<|;26©wØÞ~æ©2.‰ýf`­Ðy9?ce}¸6¸ù|Xå´{s/²'²î4ŽSk /ˆš hiQ‘€6Y8v¦Òo@–P¼o„Æn F¿§k`ÄÑ c ˆSLA-ê%T¦GL0—.Ö”™Ò.eÆùA2Ac¿´yñÈÍ H³½¡¢Æïbf!üDCXu?;óù†QäÀðHˆ>ƶÖ6é±ôsòÔõúšûZmJf±Tk5´mD˜ÔDÉ6 Ó2Ѩ(¶ÅŒWÏñÕ£EŽËDøŽÿk+ENàE+­N:»×$È2]åÑÔvÀY«´CÔêHÑ|ík‰¯ DK1L!$Â8±DV£´€ŽQÚX·vzÅÔð;»ÞÍN ˆÀ–·¥“¾f¿®ÖC¡rzM#,£¶«"ýv¢ÄT‘Y©öé*É…~ íßd’vP#2r:m±m2¼3+¬ƒé4ÑLÔdÂËp‘çRˆ7ùN(ŠÒcKi"ÈF'¸„Üf4jå]*¾M½KÓoB5L­â×›&1lÊRÈ#,ˆh¬q…ipÖh„bÆQÏç8ÊDÍŒpgܨEbÚù`)ð8Yv S©H°pѪ $i0`_¦–÷ï˜0Þ¤sL©wß„óþ#2<±=/RÒ®rLŒ›Ýµq$¹ä”1ùñãdÞ7a¢PʨTŽ^õJ\Z!ZìèÛØf2†™› tV Õâhë- nQ¤‰§S3ˆ¸…x¸º¢é#Ú#M TK&Bºäf¬¯:bÙxþ0â€yŒӻȧbm´’lc+A)aLDHÀ c%ÏÒ®dÄ•ÈH]Há~lA ÅP`‘#%Ðæ’Á¿4#%È}øûáß'=b!¯S2¾4LY‹A‡tš]'è•mƒZú7p£˜ÀßH¹U¹¾NJÚ## ‘qõå]rgÜRšrE0ªÎgi#2Ò˜oÃ*#¾|1)¬7v‹¢#Hˆ®õPÞŠpÃ(eß\†Ã#,!6¯~–•«YÔf¿o`Ã8dd9:pD«ÕTLí³H#2_ ;>ÆaÔ!9¬Ä«hÇB³n›Ü¢ðÖ°2AÀ}Nƒ'.ü¬·Nû›YVá•£”‚£úi8f~>[/<¶š;‘y˜Y"„èu›n­L3”RAÀ>U ª²R¨’ XÆU”ák¼+£"­saZmC—7—›Rí×’«3Ëbh¸Ä('<»ÅÄ;XöB&§[M"ÍòÎÕ½1¡ ]˜ €€ÂŽŒ C’ÖXÄ)£(ݺ»d‰ ­Ñ²Ð<àHB0¦L2 ¦ ¡F”™€Ç@8#%Z H#2 ÂÂ-Þ º06:¸¶3Ô F¦f†hðP(+¹P#,{BÀgêÊñ‘Q#2ÿFdϹ\¦œR(±=” £ûÕºPaë(=•`,\ó'ìΆÅ|iìl!šáŽÆ¶3;Ø.?ÐhîÄ™ˆ}Ñu™ÏJb`FCÍ+édŠ& ’I#^#%¯ÿVÅQµ“mXµ´›*H$‰ KÞ¦h}Jž~zñ)ܹz—>*•Ë‘÷¾æ·”=}Oì€ÒÖŠ_N+‰­ñÒÙÔ­^ù Ü]Y[ QÕY½¨å°åZI\Š&ötÓ†³¼JÙ4ËÉ•j¦`teJ—³¾ØißjÓm&ìÙ&èd­ñv5-zÔbŠ½ÆÆ3fƒœFá4‘¤]2—‰§máHm”|æo$Ã)ƶjÆÞ¡(ef^iåËW%íÓÃíÉJÅ4äD™æ\5&艹’èp0â›NhÆùSPÄpJ4c:Úo“‰’!›F✩Y³·…ã8ûÙiÖ1ÉÔs\ ŽXwܺÛ]œ E2±J|Å&-MØ 31Ò5Ä™›ˆdgZ³3¤ëm⪆›ß…·©´× 5Ì䯙§Ó)LçiÙ1íôŠã$™#2 ˆcÃ#,TáŽC KÊŠÖ‰Znç±ÒdØ¢™­¨sLìgòg(mIAȈņääcŒëVéJ°‹#%*"À5˜$b ’ÁhÚ²fz{Yayž/&Árå}ªÍqê¼k”ñ@hX2ÐÁ¡"–6&ÑI#2” "D‹"·5œÒèP*¹HE_ƈՃT‰`¼²ð½O©˜¸s¿½å=»§QU¯>ÎJîâªívÅÙ®›Ý^’s×—äe’¦HÜ!²ŽæVÁ–i¹«¡WV»I¬¥w]wqI¼W-zíre§iæë¼Ê¼›VêkpØ×i¨Ú1,Ê·C%"G¢›FÍHZ+mãc)m2©$,¤È›5±­5"™®¥®•¥”´É­,Êšª4ùµòóÂj-P`±S4Z¶„¨ÊÄ©o-ìó3y è+ôDZSV¤¦#2!Å2.À“ ¡B¢m76.Ä¢%"¢QP´X!º+çÚD='qí°z³ÄõŒ.‡kÕ«÷XR÷Ž@…”Ð45û¿faá­âÄäxœãêP_X'ÅÙ„Ó¢ÌàUÆ ;4zëÇKS-Àº#%DŒFßÆÎÁ&d©©c&«M´œsLU<Žìï93#%êz“aŠTâŸsøY:Þt¸Å*URŠ#,bQ‰#,"¯å‰Zm¦`Än€)’ '':+“Ë.#{÷硈M˜šÉGóîi×…—øë6³OÁ†èD)­5©r;3#%XQ•pµ©”ȯŒô‚†$HZ5C^ý=ÆïÛËXlw0ê#Ä7LõÙW¨ÑráQß·«S°Ú~ dè/ÐßÝ¥™ßIyU „\ˆ«#%rãÑânU¿3%œÜ¤1¦l C)$<ÙDµ°ò….Àî~ÖÈl„¨íx3äϱBæ‹Üâ4@Þ¹5Êä‹9œ‰r§±€™FØßî£JÑÐ÷W‚ß8Ü^"ýÅjï²€Ì&’jßÞ¡ö ~üˆD*DBUË×õ1®¼ûºàŒž (ýQP'gRŽ?ãÐÀP©·äT@€ùä Kt¼vKQµÑî¨Õ’/aD´“*ŒL’nkk‘e ´Md˜Ö÷Ý«\šm6Œ¥´›(Ø´ˆ¦™d²™)TS²Ô#2QŸu…6¬¦a³hf4Ä›EjšÕ4ON(¬ŠÔ®ë¦Ô%ôív·jöíØÑSAS5¶”f´¦µ%¬A©£•_¶ªº×ÎäK½û¶I²(µ’µ¶È’DÛ6µ¹u¥£I•I5-·žw…6&Ói²„Ì*jÃm¥³i7³µZ–ØÆ*#ÆÝ›-çW^w$¥ZdÐ×-Õš¤¯Öjñ]±)‰¶Ð‘¶ðšìb²Ößޗ€ÏOÎæ®TÏCÝ*’oÙϵ°ØV–QÎ#2òÈø|;+ÑÕ¦á’j4ªÖxI`®wÌ’a:}Z¢ÔFŽS }þ½ÚÒcÊÑìr—U‡±’ÚiÑ:K@¬¶å‹€¤™MxÐ&¤TAÖ¨bA È$A‚H,F#%!ÊÊ=œ6½¯¾Õ_¤"-³JÙ¦Ú÷lDTdå0³IP"]P–Dd¢ÈŒ‚[éD,¤TÌ:SJl)«iJ)’AÔ*Û›UE’Ö–ÍFÌRÓ3ÚE E¥&©Kmi¶i›Y5°Òš)R›|Vå (“-EeQ-%£(ÓJHQ¡´Û)M"jLÑ°Ó1”b‚Äa£+eØÙ2IdhXÔš±j”ª#2Š”ÙR”ÉT•¢’©-$mJ!µ³i¡d(II‹&Ra)’i’¥š©¶#TEY6¢–&mI’E›kRÍdÉ£JIiM¶Y[RV­{êµÝ«iYm¦ÒYjCIoymk¦Í›Z”ÕY+VW³W›=•\Ö½f«ÛF©K`¶£jÒ%V•6¶Ñ­}b´mæ>àë8\pÒu9XE™ÒpRãUM$j0¬R¶ÄFs~Ù„ÞŠ€ôÌê OÌp¢j2{ἯAp7;Ü4ÚŠygI*L#%Ôxø#Ê7#xž=•-Q$!óÃ+þ¿¬÷*/¾'¢÷OD7Çdzá!‹>ÐÐ(ºŒWçßÉtlë¦ì[4m¬ ™F—GVÓC%ÉÉJ7i(wr©Jí1.«æƒ^õïíÀs1ý»©=ú_f8½r‡J~ãa‹"€ 6„®1´0ÞCBGp)Ìæ]28ÐÆ"Flk‚„b¨‚ £]z#%v‰ÈCÅ%~²‚Þ€#2–çB\rƒè6j¹ºŽ“Xl‚rä¨bŠ•ú{ÊPO#,yÁ6G$û†`A÷Qƒ¿§$ûßsDŠb¦"Áኜqݶӳ\wÞ zèUÚjV7»bb—M<Âå3l(n¦Ø‘e?R>ÿB±.rû)Vá²nýåõM#,÷ïó²!)iêÍR”ñ¨}J—#áTè”´ý²­Ô1ò¡>í±¬áµ‰¡‚öÞ YÎ#,Ü…$ój(°$÷T ƒáΖü_#,±êÙFâŽ&óY¬ÐU&F5ÓPÐ̵¨}!¾‘²»H…íÙjýΗÚ{úÛ{vœb¤]À#%±mU6ß<«ºê¹S‡³µ¾VªÀo(Õàž ‚"2! ÖDëçK¢ñ5ÚÅtªçz±VbÂ$öÎù}ÛÏJE`0“¥nx˜Qå†X˜ipQRU#,á†(’0ª¡Œl4R¨‚MMSY>ñ$¸„˜@©âç³o½Ó q.›üžþ®ÕÖq·¡Ø7œý­:ëÛáJ`ÈËäÖš‡¡#%Ë0>ÞV°ô$Òko[úÏÇ•w›Åéõ®ˆ£\¹òÅ\G÷ËR’dA] %Ù@ÿ³ùm|°­or²Ø£hee$H£KFsU@Ʊ¢&F¶h4=â!©&·Qk†#, m&†=:Åbb)¸FIÆÍ´q¨ba¬qV Õ‘M–V6pãP`Û´µH£9±0ÅA@Ä@¦ in1v8¥ŠŒ·D1†–U"€£].’L-Z)˜TÇè¨Râ‘¿UIª º#%/Nú#2:œ\åz5J<TBGâµó”B)Á5Ú5­NÔ Û7íª#,´Ctâ‘£T•Ž`Sƒã£ó°Gv£Í¥P†þ¦x'Myüùšìeì>)ã0wyˆ¨·sRpäÓ·£z·±¢œØ÷ ô‡‚P#%TFÐAj#2Àº#2__mnÐ?«Z¶‹Ù©®’ÄH|Aû> ¸ ÐêUv.ná·kmÿW…ûÃÀ ³âÝc)Ý4½¤j[Ǻ%1‹ÄÜîI9Ó0¯%mŧÅ֪žwÉfðÀ·Uñj[ëmrkŒ“iˆQÄIìfœ!µ@¨dÅ#,njßRY²’VTÊÀúß“Âf=ÒŒÂÛد±aµd Ô¡îè/ ¼ãž±JÇϾaƒòU¢cäC˜y‡üÜcHd›H&@lFظ`V(Ä–Ó Maüþ—V/û’)})N0$#,qKJŽ–7~™‚rL Ú…ð~?[“ZáRU´²–Öå(40i!´ƒ:I$š””ž-Zˆ¬††á5#%¡c(ÆI€1èó€´âÚs½s¯gÙ™² .Û!›L #2áPªR3ºxQȵÛxÇÄ©`ÅXÔh°N½ÕâÂÚwÍm’f‹F¤„ÉÃ'3ÔGÃœxÍk¥ii¿}'Së¿qU‰Øz¹”I#~MDÁÙ÷Ò•5¯)û[ïS>ˆÀ"*ÌŠ!kkenÖkI¡ÇI¥LzÐQ `U2ÐÚížœq s ûo{ÈâK(€®¦¼#,ä<6‚2#2çÐxd)`ÀXQ‘OÔ@ " ªZ,+‘úñXý¾0œâÒxº@ÌPo§~˜ÌˆÆ‰Â›š&#,¶ºh„"vˆé ‡,÷Ìjœ7vçòÄ&ä29mÐÚšˆˆ5§$k1«» Dzc[¶†¶Øª‰lÍ#% `E3òÛÍÀ6á*ÄUõQJ¼!=eê,Äõvœ3»¬ÞVÌòT.4ï;¡3sÎŒø9öAŠD¨±dB4ÐjH‚^‹§*¯jíÄš™k”IXB“%ÉË9˜FœCqp¿£GâîÚH¡Ô®ð]3iB"sŽ¬"HÒªqAß‚×,UŒ¾Ìfõm×}rõæ·Qê——ðqS—­8eë»Î=ë£mY &&´Ú²4î¤.!¾=È ñc©~øKůuÉ4ªuÔ›3U1‚³z*]£³5¹w®îë¥çv”óµÎn&p¸y]mÉf—<ó­‰ãÆ~V±2ÈÆØà@’(IÈÎÖ F!U*ÏǶíwªŠ#4Ja .°×6†á–Á{ÜLƒ¿‘ P¯'±uúµÞäµ Ð_"*C»Z&»ã=ËÜ#Ým°Ýá¯oN½ÞU¿ œ:Äuä '™ÅšòÅ(Uá…ËÉ°6ÞÒBõ*³K*lnìÇðüzÓCÓ½5#2QÂpÛãèϨJ¨:c‡¯Ÿ³#ÔI]ïX¦áA:ø´íÊBúÁìÂ'n3Œ|³Ù’b#%ÆÅ$OWa–ÇIR×éвÒMdRf©‚¬Œ>ßσAÉÜÁ,øuODB…‘‡«¾å†¼Rqa‡L/eÔ’(¤ ˜¢K)*Ù@Œž쉙D„ï^kÕ«Ö®’l&¢H’ 8"HÆ:A(Ę:Â3Û¼¥ã§vâš¹s½‘¸. »)%Ùe# ³_Ul2Ã’D:#2;¢¾âênïÕ¢ìÑç3OÙ·ˆèœP€9uøk5Ü“Ë­ßÆ=$…™MqÞv$Sµ®Ú Œtªb |DÂx_yu™ Ù¢Ûù.Ÿ%ËãåzBÕûZ׫F¬›Udfó¤ déTÉ‘¾3ͶÞ*+{ªi£h™Eµ\£*ši4Ô®º.mÐäÄ–I±X¶¿"­Èň­×Æ”U^—¥êZ×PF _çþš´U„H¬ðŠF…¡Š7ĸeÀ ®h 'kåŠг)ïÆ–.»YœË!hE l”•¢+#%¡°¾2¾“8A€ü`d‘Íé{„”#%áܲÒ# ä·†"« À.†±ZhÕ#2ÅÖÓHFÇП>ÞN|ÙËã¨Ö7,#íÞ’Á@Ø<#,Ɔ÷eëŠ{¤¢¡©Eÿ8G-bÒ”<aªŽ¹"–…@¶Â§çªUj¬õPT*éd“W˜e¦\˜°b(xÐuëp:wú(ÈvGõUBˆóW6škºí¦EF“h ‘ B«@ ¬7{wJò #\$lÍèÖQxUƒ_(Ï)å¡O‹)<¬@B*èLƒ+(6ô[á>|_`ow“Ž Z(3¦±E¸ÒP!@¦ÀXÚZÏ0É?#,¼3‰¦~8û¿åÀ…k¤Map.E´.ˆ$çíø›1…Œ‘#%¨!G÷0Ü&?šÉ¤“CŸ•ÏªýS`ï;‡Š¤lƒ¨„‚°‚H¨ýœ4@OÏ}ÀÅšH݆&Í5’Ï›·JøçþYq6?Q»™Ò‚F’‰aKÃ1#,×dÛïhOEñaæÝc<ªž@¯hsOÙã÷È(#2ŠƒžYì!À‡!]_f\^Þ¨o·¡G\3ïш¨YPê;u#%Å„~a9Â@8:Ï|)ª)±ÇÈgz¿/Cé¿Ìw.;=#%žd#%RIí #2J¥*#2¡DYX@¨©PPfŽôlY‚!x¥EdBD ² *ÓPÆp;­Ì¦["7̸ÿb?GŒ’º0V(-4–,Ì…‰#2-ê¿PêÌ#‘ÜtN‡Ûcí{Ô~?~ÕåµX†"O¬y¤›SÒžÔ£C¨'¨^6r+/ê0å$$TC€Dhˆ'ñ-î0¹’Õ"…¤¤W#,/"‰ß«±ñ>y…Þ)Tbb³ñõùòâÂp,°qCœ²ÃÚk( ðy£™v‚µ÷O†Àö|>‘"|ÂÖë´¯œ¿J${ÃNYvå¼êï£ÔŸ™HÄT̉I:(™¦¤¯V–¾t­¡"Ž´†õ"þ¦´ÑúšÆ-ìÊ_›á†Œ3TAb¢¨UH)Ÿà»qML°)òU0)”°–;²Vha–…É hÿ}/oð\«­U€-*DÆ9±ò$› ÂuÔ*¯µÉኒeb•mqÆøÛ0ÂÝÑ!ªbY„dÈ‚µÒLÖ[\KÈpdÃïPÀ&Qd¢š•XˆÙBˆ‹j³yQ£!¦6†Æ3+%hQ¥#”Vk²ÙÁ”€ÝBS ,†‰H춨„)&Y#2³p–›2SŒPa D‹²Yš êC £#2d‚›pƽ›Æɵx±·¿®Ö½*ô¸Rm‹jéÑ„&!5e¤Ñ2¢Mƒ1••´7HÚ­ |™ÉcxðÂlŠ°¬1‡ +E‰½T=eX¥ÖAÉF¶Ñ×PÖâJ¶ÆÆÓaG$NMÍr×.m£i]Ñb¹nmŠå¹|Æ$ƽwz\hyuÛ|[#aH‰/Y5M¦hÐÞ¨š¦vp¤±˜ÂaF“£:‘vÿF³#,2ÂF›áÉ5fn¢0åŠ(2ƤÙÕ#,ª0eŽ17F H-kjVVÚ¦©ã‚¬mœD…ÀTxµ¼Ï#,õ¡þdsð}"0I™,¿3¶‡È¥-¶IçR`B扭<x:ØÝû_¥„gÙ@™”ÕI¬ÆñÚ­ÞvëÉ–ë5ÐÀ.¬Oã褦Ž™hþ~¬­ÀãÇÚôø·‡~Ž€<¹ £Ô›¨'°7¾?Tüh…˜@`UÑW°ŒÕþˆ÷‘KNèÔn^VÆ¥K%¢Ê®ª1¥D™/é*£ Å-UÔ¬jÅmÍÖÚH‘™%ƒ YPuŠ«#%–¥IIÀ²n>Äþ È#2r,;Q5R1iìÞx‘ìæX#,Gꂤ@ƒÆYÁáöWg¿Â¬{S(±ƒk—Ûæf¹!¡ç¨1#%¨REVŠ(F¥T¨˜F1%ùèD*¢l#»þú`3#2¥Ó(<÷]_n3”æ{@ñrÚ8ó A2TÚÄý±Ê#,ãzªˆH’*üj°SBmËrø¯)d­“o;u)RÊ®kšÞ6¾ÓmyfDQl•¬6Bª=MbÅu]Õ½5{(ØÌ‚‰ˆÑ¡ BmRE˜˜RKjMZ“4¡ŒÖâ#%ÛlM Ó TQ#Ö2<ã¢Ô¬~|º!ÔÑù$ZÚÁ&Q]…‡H#²#,E*\+ñHÊ¢—$€>—`@Â#2HÂe†`ØÉ–@2…‰9$±„ 㨋kÜë˜'%™#%GA .ÊŸCö¨ö±1ÔÂíù×cs|ËS/F凱IÂ{WÝ$Ö¢\{úó<¼)Øbµ ÏLþÓîâŬg*ªá+:wü}ý#,½»R#]•Bq.*Ø\W0Ïa6 ]‚\°æX7åÇ:èŸ\^¨)QPÓä° Ê/â3íå{«™XU#,œunEØj!ä„=Ã`ì+Á‚ZTëvÝÅ%RÒ•5XÚ†m5ï+¶4ÕfšÊz•Ômbfe$M·eyùýoµ}ëé°Ó·}ƒèÕvÀíí»GÞÕ(PHðØÉÞÃíòHØ>Ï™8!y~„Gðó°ý§µÅÂtĹ³ißZxt|Ø`É|tê“I“mÈ*“N.÷¼7/1œâ¢òƉ CZÃh¡ªS#,÷×3GK†÷\$‰‚VRÛE µ¬pc#,°vº¢ ÄÓÃܘ‘”}†#%Œ(r¶ˆ7Û‚ Yˆä> ¿Ü ž)èzû «¬’I$HI ="ª?ª72r=‡™âZÞÜ´ÈËÙùo«’×®k¶ Œùìâ¹WÑbÈï#2”å5C -E¦¤!l Éþ÷ÙÈ„[œ•›ntsú¯S<0gQÒUɳšb?…Ž51º“GÏÏ#%Ž5Ò×!$@C÷1Jt³ff¸#“}l;›À#1?ÎÕ+¡F‘4”L ¤# J ]‚5 4ãUŠSDóCtÙ~ßÈÙøjL‘Y p]!:@éGų¯U?Ú–€?³á¸ª'ý?Ñɦß'+’á#%ì¹M{ žźœ5Øúkf´¿7‹áàCóCàSíMZʸk2PùüCTà€‘¨ðÛ‡äÚÂ5ˆ¶PajJL–i˜¶¦¶–¤ØÖŒŒe5øåtA&‰•2ÒÏÐÕ¹mLËSdZ(YšÁ+f*˜–6Ùj¥iµše¬Ël±%¬ZQM©˜›5Y¢iªmŠª‹`#KA›Mžú¯•û»¶·éìšÿ7Qõ6N;®%±¢B&€®rz¢œ?‰:K[›h­k©Ê­Eµ‹]Mk\ÖìÞ#2¼Â£ßÍÚkÑCël$pB'buý|4àÚ6DÜÕÎbÖæÅ—RüV–öª:ä$Š~áÙüKÐ<â¾Í´‘ ‰ÄÓŽ0)!ô4F #2}Š ?ÃÍÁ>Y1q@a>;ÎVGª ‚ŽÍÅÛE/iÐ #2z<Sû]9 8Ä (ŠT#%=±¼CCØœØÄÀ h~"‰ ¨C'‚Il¤)òcr—µ-Ò)8R§± ä³â,[Çï><4ÏM¦í·5à°bÀ j±Â`TЂ,ïò©iÁjClnIrzˆÉ6Ý)¼ ™u—2š^³30xã—é—pþ#2XXPµÈ…p>w·ÃÖªp"wCHÏ#â:Edì$ð‡‘(J;™Ýuwv£&¬0jO´ÃÀT/Wb†nòâ#%AÁlÅÚnï,ef ¼¼0#2OtPܘpqC„Kšcò‡FŽüÏVÆ"µŒ!¨ŠÐÐÑ$p¬/ô/Ó4tv…›‹Yr§ƒÀý=§6Ï”Rbâ]Cï†ZN?›5¤ˆt­T/àãëŠ}ò}}#2h^0û ¶£a4÷ áît¿×Æàà Ó…pMaj4†ºþŽGF*AD—¿îëÃŽxÝ¿ù/:)yµ$$=À¦³~FÖúœ•à©?a¹L ó}=(#2IªB„iÁVBÁe%,¤¡- &ø|¼#,1×jÔ>i¹.¤RôEebRb·Ýuë¯óº©ßψ0æô×@wõÿŽòÈ¢¥˜FÖ˜ÓVYd„AHÆxÑ@±B0ܶHFšaS°$RFÚd_o³ëÁ£ Ý)œøâ`H‹¥E)ƒ–°·*#Ó²vDIUãÆVÒJ!€Æ FÂñ ú˜–’0.âŒcÖ­=×ó©ë/ÃP#,™3ÍU¤2øŽß6ÉbAÊȤ@ÆT7F2¤ñKAþzYn̲C<®Í¦£(‘"b‡×#,0R!ãÈ5éŒ5RÕž5—Ÿ»Kžy—¥%Âk«…ë0Ž3¦óxÐÚäˉ¤…ƒDpa‡Bæ ódÀ»7Sªq#2Ĩ‘(ÏB \i¸¹²óXb§ç Z/9°íÞH£EG€Di@…ÈBŠ!ICbšˆ¥„ˆBÈ”ÅPe'‚Î#2z<TC;4žŸ?#2^WÖ¨è:À?/‰˜!—_D}.Þß'}U2#JdŒ"ª!M£¾j¬UQßIìOÅ3˹@Óx‡4mÆÁ½0áK ùÍæÌyî`àBá››f­Yº‹% ÙB‚ù¶ÛÛƽ#já©0‘Y6J-…1d…5##,p>mý3;ñ>09*(Nl…0)êóe ’ÊĹ„°žMD›hFYH9) ¼óÊ}·Iéww`¼ò¢ˆtg¨}\l¢È¡îk‰ =åP¤Œ"ˆu2îÖƒM3¦‹L<òô´pÀ‰ƒFÆ%üHbz ¸¦K#,,J¥IZäÌk…æD½#X=<C¹¦v% v"|Jr+wt•ö}•>Ȉ«#,#,²¡´®\©er(¶zÌ|´½ Ö#%!^¹ªCÌÍ­ŸÆœ_±â¨èâB4Ä{®w%?#,þŸ95†á/›üçh~D$Á߸–&M›eÖ” je 5VWE·[Ñ$F¥”¤ŽÂB°ƒNÄx#ö/tŽ•»»'ò“7¢@n0Ç”áLî΄5N•6‡ÍD]Iã èŠ4^›/&sAn\\(8#,ŸZ‘#zJX”ýÓ²3Oo«Ò­Nº¨§S‰uªVÜÕ ¸…Ýéªýõi®s›Å „åí¦>YÁ{ðc¤#2Ó]Y¦YÜÝŒ_]#îûc«Ÿ–»‘ošØê5ÐY•Tñ0X#%I#% ¤€b$¢‚T-’Ëa@C¤,Y,Š"n1€l+p<;ŠTÈ)í ˜©Ù¿Ó:þÀUyónê.ïôô^ô#%èjü5Æ©ÜþCG›&,éàקذå@B8¼t(è'_R4/†‰È@nYGC•–é#%–€<ÁpÆâ:—ç³ß@këëõmCVÝçv™“Và{Àü™ÄØ@„_[ïõ:µÌòOB§¯ÆSÌ‚Nl®Ý^º¯E0M‘6Òó·5ʶ#,BÔ¸‘ØÆ’Bc#%@ÆI‰mˆ, Ü„²¡B\©)è‚Á—Ó¨ê6”P[Cý´.ÝÕ­ *î '€á #@!õƒ]¶~ï ˆZŒ‚0#2Ä»!¡ñ*Ù–Ò#2f1kR&'Ñ“=¥¯ÝÖÛ»Ûzë+º.™pÌk£ŸX‚0c#2™S+Ô–«›yxí]-ð^«ºÇ7Š’aÊZYlÍVP‹lTÚ,‹C:E¤ ¡Ò^öM± †$AMž=(Mj˜°+ÔÖ(lYC™\m§–î˜tx&ò%¶FѨ‘ HÙ’ð aÃX%ûö­46¶ôlJðëÏ;·ŠnæÙ‚(aÖ”^,C6Ëf#j—pQ¦åö@_æÎqS´â¦~FðQÏ…ŒäUÈL÷·ݽôû}ÿ¦µõïÈ.þ@Øœ„ú}´¹Ê¶7{½^‘{$<%ÓPÔ#%•@° üùVº¬E„3”LÙLJêwuv ²„¡¯¼«ØZ5_•[}ö×™Y¤²£Y+be£d´š¶5JjôFH#¢ î¶ËbÂÙ%!P*#$ˆ}ÝÃÞ^¹¼cö0éw,%6õ6©ƒô;UU‡§¶ÖjÈT>Pr)N=G.;ÎÃO~YeÄUO”kÙ>EØØýY˜#R&@óÁ‡mžôŸ7º<âyçý½®ÚÖøm£S…Wó?%‘m—›Ý>“Ák}LÖãi„“dÙTA¿G”Ê#,åöõã™2ÆÿA½ß³7؆V8šÀè´#,ê¢hHÜÄêÂpÅ&/m…ÇãîI “&ÛŸNœƒ˜ÅŒX£=›È^„ÃÄÒ$Ρӂ kˆ¨ìro€è1mÍ7ñyÓ3´S-ÌÒš‚{O‚—Æ]íõm‹sî6H_ÇÆ;ïm×ô#sµz÷%ªì2t‹¹„Õ1&yýr÷žäó×ÕŽ9ˆ<‡Ë^™j¶ ݤճ¨ïòöž*õ¢>gŠª>ìé ³iìîû®è¼`Rv™…@òð £ æ*hia W˜”Ü\èE637ó#,>OrcLëǽ.í'XÎtÖ¯<q:¬±uŠkC2™ït×D‘¾fsMÖï%çHTb»üè[³ùöS·Fíð‘AÊî¹ØbÎ;¢~Yú™ÐÉ Õ±P§›&©PŸ“!/g£fÿslì2÷,Ës´Èg«|]•Ç/ èD=`¢Ü*L®íB,…S ’˜(Œ…ñÉrf¨–Š°¨#20‘Q·™KAŠCo·UïÔQ‹tÝ©Da¥/Ðå& ü„…Çþ‡Þ_¦ dº ±MÇ:ÖÑ`±b!A1ÖL’Œ±$‚Aƒuƒb€ŠG#…\"ÑF˜ Þ ”DDøV/ @„VĸÊ&£*AÆÓQó½s7àð:Ž¸\ç—C³ÔœÇ¨äëÔYV_»þ…çt”PJªÅ¬ZÕ±[›Ðö"û·'Ç4Š|÷låËMÓGÎòç3ºž=Œ þí”J™J–µq4a«\!yNHRe¬L‰Òº6yàÒÃ.¬z i£ è0#N»‹‘ä$µµ©-ââhG¥>1"°‘5eË%ÉzÑ¿¹Á>|MBÇw«ã´$ E††ŽÑ fhlæMï ê”Ò0¢š†©bÍEJnNeEh ’m¢7(ŵ4Õ”ÛiÛ¶®¤Ø›[f–Õu[+”ËÅËË»JÞV·Í–Q°¥J­•ª±m«îù6#,îªxxC>¯/rR´×¬¥1¨féÊÝLæ²äVH$p×ÛQ`RM±é|Rl<3©òi>LÞ Úëò»)ÁuITU¬õÝ·ÇÕÚ†a!}†Ý)un”²'1/ÈÀ]N…h×_>Ð9\LNÌPŒ3&r\4ÓXvÈpngS)d,¥1§ÈkŽúwóøÜ#äÄœËcÕ·“net+÷!¸n#,|r¹2²ïô{²#Ù8ûë¼ß´|ÄF#%©=ÍèúÛïÞ…Œ›±àrõë yk•ñé蹃#%Lq '[÷ù<1ó¤âõ¶þ¡¯§+þýv4U‚³#,@yJ›íFì´?>›k&Ù1 p«]c†?jma'zÝÜɼçÖm³€ˆg Œ×´ÿ‹ýOøŸáý{~ë#%µ?‘ B–':£\Úˆs`ÊFN‹‹‚EÊHH‡tãÝIj¡6¨é–ªº·kBÃdˆ ضÄÂñT‡æ5—´¢B¬VÙ™†µüCÖ¡p…Éo&ƒ`#,B#2bÜà8Û±dˆS#,ê.ˆ.¾xxá¤Ó›Áâ}S¡‰‘bsÞh8Ô¡Øwâ Oû2Q9Þx"ÉiѸtSHË¥À€{üå|]™ÒÜÙ°­Œ<Ê¢š*ÿWÙÂû5?6Š«á&ᤎ§n¸<ypÍñJi´ûî¹"&.#,™º ÓKõ☠àw˜^¤# sƃj¹žo˜4Úl^6†ñüÌFx„ܽ:[mötÆP‰¸#2eИl %&ðLáÒHbs­Aõe,tÍr#,ç¹¹á¤^HAY}ŸU–GüÓ#2ÙLÏætñÈ'± Œ¤²Ým$1Ó#%ÍÉxFQá§ô­š´xÞ¥t,d4qüv4†tØ–¹&AŽc}ÜÔø[u¬ì|RFÎÍm AÂ+Å`Z4{hÔŒ:Óé¼!å¹»Pm×”ÆôaШT%_o-U—€tä)eü7•ÓëÚùkËÔˆ?Y„#%:à"W¦ª†O#ƒ3Ç’™¨š¢ªcWfÛŽB" KvÕsk§Ýl^6‹V+Qm¬V£h´jÛ6ÉRkF²XÚÅm^*Û›cms[kçLÛ0k±Ðà^Ï£ø¯·0ž±¨Œb)Š”?>#,Ê«Ñaw IåÙ´àu6ßvýøg7nYÁÞúËÝ;«Üd(]Š)5«=:•¸}Çm0 Ÿä£fÝ°šÝtõû\ û)‹×M]ßÆÔa6Ù Á$6ƳRjÊf1’e0—í^eü{SÞuˆi6ѯÑí#%H¡##,Gš¾{s0PÚl¥D.äÆ =2{}ÑzûuP{rÃù?'l˜uû„#,²lÿc³eƒƒ·\æ;ÖL2Ù ý§@qÌ^=v-}Ä…#T¡é¡ì­ÅEœT„ÎuëÓg¼ó·¦4˜«V÷`ÚŠZTÕ+f–-þþ×®º`”&#,I+o#%='Í@±ùöß[­š{(P¨; •ªé%UIAæGÈ’>^zóg;¹™âÈš²oAL›2e!Ñ€{S,…´ë,¶(S+‹êXë¸A¡A®§2@°$ÿB¤U £a[#,aA˜‘¹óçª×¶fpÒpPc€ÈÎ!¼1#$Ù•R ¢«T*ŽÌü~Ÿk¾¬§ÍÏË©þ­Œs^†±4ˆl$r,&Àª XŒ„Õ!'±=uíÎ0_,]Å:gT9üÏ~#2ì©”;äwŸ™­ª\Z¥„ríÊß*¶&='¬…4u†gCªª-Ó't;v3‡„psבbÐ1|_²Àì\°X€êªŒ¦ j ŒtX :gù´ô.ª#,þ^°Ëܯ°{ÐÔ^9·‡3D'¬÷#,ÐÙëØ]N~“­Ú´>:™ûê–û/Ô˜dÅPªŠÍu£fÚÖY£!L…2UP±`€Cîv#,h)›%“äƒe5'ÔorLo¢c`ë#2;ªj*(A'˜#2BiHÚ™™¬T4Z5×]F,hB_À{*#,èQfðÀÆÀnBhT¬ci0xÈ`hpUÔJÄ0`Ä28Ü«hãÕ!ÁÑ­S£‘ ÉLkLD²ü!Ð6™Ú(ÚßspHêÃWÍ3óÕÝ¢ìTªˆ¨ˆE€*æú&æE›%ZR®t™æ묙R¢Ò»èóÉæOSnøõëųzÝnÍ—]KÚˆX^ãziP¶ˆ ¨ÌÝZ@ŒÎôÞ^Jôמ5u¦ÍL¤hA©[)Y¡”ÆÆ-I$YM¦ÆK6ÌÉ26ÙKK×vòí\šwræÜYºë–ÜÓ·oys^o;Èš(Tµ Æå¾]ìöfÃ&™¨yz*F÷ÕÒ#2›ÄÒ”<·šA°ÝMlÄVDe à­LÝÌ •(`6Xñ==YŒcnµ#,»§dÃZŠ´ØÜhj4r 05õÕZÆ,ÞF4=Åm|¸ði<÷Tq“i´ @Ü ¹´× Ã3u¡¾˜š¦4Üpiõ)‚ªjÅPHV½mt¢#_ä"A#,RPŽBÇ#,9³2Éj±m»¬Õd¦„bR.Y A@Ë1š¨Ð™0æ£m#@20€×-6šaÛM´láT«2¼VDVm&!#qm,d‰3-$¬­{]kƯ'z]ïîIÉçv“Lfc¶¦0ÍúåÎ8Dj0ÆðÄ2·a”ØÙpÌÈ4Ôâ°¡»±×Rµ-¥.&‚±9—óÖÖÆÖ¤2EôµŸÝ`i’l(A££ÃÑÄ£ÞÂ&ìÛÒ™#%9å[­ÔÕ#ûÜÖÞ÷ž,ôÏ]­%c)ŒY<¨GÚ.ÃN'ÊIJG†¬ÜÚÚ0qÂÙÖ‘¥Ã#%Õ4‹†À5˜ÒÛ1½½U%Sg†!K`Jù–$}fèl8Úøž¦e™þFŒ%9¸i‡ x¡¬†ÃC?Tñ€ Ú}Ƨ"Û1ÈM°˜Ý—Öd6róŠÔ<åA#2ŠµŠš£Ómäå…tÈWÑŠÈcØBÍ×™P[i†Œ„ͲKŠ¥¦šÖfÃÕ7ǨM%8œk$4$îr«P‹Fͬ4¨jáQËb¥ àµ4q³ ™ÁÆѾ7oÃ=ßlèÖÃŽ8X#PX‚Tƒ÷dB N!.ÐZaÔbÓ`õrn2ƒ2ªÝ±ù ¹¸ GßO8a¤)¡ ä¥P4-(ˆ‚ƒB[wš¢®š³o.ÞSR½mRµX‚”lFÊ,…€Â$¸#±Av D$—›þЀrÓÕÖ|CÅŸN'ÏË'ÏðÝÛ¡ÁѪiú·ßz öõE«÷bÄ?tÊhý4Qˆ”ÖÊi&½µÝºÅ­}(ɳù4¬FAžï›JRš-!wQ•Qø»õ£É½b¹ë4<5£ŒÏVÓonî¦JYÚ¸¦Pí”ë²xSpT`VR›¨š—¨”ˆ‘²¬Ë_$§o—BiY<úë©ÎŸ_Õ6vŒÜQ˜ˆI!Ës36äê6o:+®xó6á&œRWº®±“­Ö¾f¯#,¨°*°ƒ&cŽv i"9z]#,r6ǽkØn Þ¹§Áå¹ûûÌA¿=EÑA¢vÚ ;}Õ¸m#,Áƒ¬£—‚ã¬âYÈòSxïj1_‡Vvu曞8"åÃÀ{³P’X§·ê³xFpSÔšSvTDË@#m–A šŒ¾Î¬á‚»³«ó²›¯*5Ä•5é9؇IÛªâÆÎ`Ø´·Å8eh&—–8ŽÌIœú{ÔÔý³–\}(qH àZ6ÂU+|«ömc[lö™tÖ„º’À\ SSeHüèT#2 x4lAR|ERŽFȤm!¡Û¼žVñÒ£xªìÚÜ6·MªM«¼tX«¼ë—M]­¹·væC^6¢žd±i‘Š•5sŽê»»V5©Zkâµ^5¼•´›¥[¶ëÏ7ŒV4’ÒA`!æ–Ð’„=z_“У£a‘I}ا3ß„ÖE±$V HÂÊ QB¢F¡Zb‹µ€ é’ ]àRAw±²ÃA(×{–†¯œÖ»^Û^LÑ-Â@1 ¢–úe#,b¡)„í´®µìÖ¢*5R”µ"þZŠl¢Ö+13M*-±¨ÔÌTlj-E±µ™X4hÆ™ªM’Ì¢fLJ¦Š#jfM3iX…©‰5 0’n>XT¿W½ï_Èý;$L…>}«kÏPi6@d„DRËñ:l¿äŸ“ÆýÜüØñZ^~|’—ää¯qðDll…|ÃÄG)‰XA n-õÑÅêUH2>Q‘D’™Z7Ðæú7«¨Y£UŠk}ŠÖáV¼Zéû]]AhÒžnê#m;»:í®í%-mÌTUXÒ[s\¹¬êí7gV´­ezíÙ¬ÔQŠ«¶›vëú¯7ð—Âw²³‘“,Ä>¢$óJ#%L&D#,âh’LA"#2 b#,‹€‰7“–`Ij¨ !&ÃJ:…Q"'#ËŸ¶¤¡Pm+¤Ä4ÚÁ €™—Nκk‘fñÖ¶!4ž‡× Sï»Sà:ß>-{Þ>¶#2'·%œ'ÐÌ~úó¢¢0u¢C*"Â}3M€Cî<`lØyÕGô³†µ`ÞÕ31˜Üü,°q±Œew2M5 ‰0Å"°fÔÓtpI¦’<áÜ{ZQÁ‡xBŒH“©ý÷7>ý¯aI¯O å4C¡““¦Ï€Ê·õ—‡1Æ©Ýa<ˆ5²“ð+¤»/¹Þñ¼hÀðš]™3aÌ8fùã—=¹6´ì§Í„%µÀ{+ž3“Fpì,¶Ú;]ÑR9©–„î0`áƒ)dÃLK»Ùîx&‘`«üvбŒ°wÄ$ésüµa=óBZ»,‡b‰µM™ÆËgåƒ÷|hÃXðÁR˜«úLË)Õ+j¥b‡¤“aô6¢tÒ!uöš''Ê0ŠÂ,€†©-¾TûŠÕÓRcI¯ð²¿Ã‹•é;b+œTnM £b‚Ea#%m$#,¤ˆBÃéºÐwødÂsø+Ä8co:.3éH†"¯ÊÍþ% tíL_ÉÆ$†Y„‘A…“ È"ÈÆ(E E±„ô5…-37lZRE ÀÁê™ñ ÀH¹‚·A²QVIŒlš¶®i¬_l•^wUÄOeÞ*í"#is]äëŸZGá*Æ’F2€“€œãKÁhã*7j*”˜°„±X»±SV¥(1Ä*ÛAÍXU¬!R#, aS#2$D•Q#2#2ŠÆ,€ÊŽXI˜…¼aV²“BB–ŠL@^4 ?UãÚÆa84Æ1zÊœŸÝïóç{ùÊ…ã )H^v{:!ÏÐý’O¹‡kh0°U9õ87ks®ÞR2qeÄœ¹q9>Ó oš1Œ˜ÖKQ·nžíùîÑ¡ÛÐ *Šœˆ"%k_‚ð˜‰Võjû*õm­ì€‘ÝùûCÇLþ³âB@ªPþJ3µ†Ÿìþö%èa!‡t?Bj™?<kÒ0âmCõÿ`Eäs™ýl#,7¢©©‡®ªé+[;~:q>ÉzXÓcñ"<ßËÆËWO¬ù»7îS6r^'oÁk±Ó^#,ÐêeÜ-—/#%¨³†ü8`èþ! ¸1Ué×YÖÁxÙÝÓ!¸(ƒM!#2‰%¡–(žf¶i¢ÛÐ6&r½õ#2ôÇÅFƒU‚;20Æ„Ä5ª*·†&’ƒk8( DRª%+H£I#%¤ ®6²0š@±“%É°dX<¿2¢^/Þ#%×ez5r³ÂŸ— %Õò;¸ž>ÕHש÷ÔÙ7”9°ÙlÞ­`gĪtçœ$éSÔ‹úŸÚ }s¨<ü ƒÂ ªUSE2@¡€JÁ ªdb†"`A,ÿ’áßIB .Grc>?®ÏÇx¡²^BSUwUÇkl&VvV»1ùëÍå©ÐýÞ2|˜²,‚Ðnì]PRP±)µpÒŽ»¼^CbS›™y¸¬ÙdM$„ÙRÔxÛv›dÑbŠfƉ Â\ەʹ±»ŽëÎÍåÛŽºí”s¡r»»tŠåâÞ<•G4Ùo'™n®]ÍfXÐíÞmR­vÛ\ܵÓjÉm”±YÖå6e“dñ[»»£tæ®ìΚäŠZ3œ9Wl¹Öj-9Z‹]´Ûrn ­ÛfÈ#%nn–Øž¸†áv"AÒ#%=›}[Á ríÃÕ±(#%;‘ÿpwÂñA`Äj€ ”('k,-ˆ ¯¹CÅQMéÕš‡ïÎÜ#2£‚6ÒR#,Á)ˆßT{¼a=a^›ì6{­|M+@>1/°CÑŸx¤ü”(P~>ýÉùûN†Ó¬÷!`¾V5™‚5j2™š_=½UAì‚%F@R¨,ÿ¬¹gúã #2Æ#%™Î¯w#2)ˆƒ"," €‚* bBh #,#æÌp(> ZZøòíÉ\·nv©Ç]ÝK+0ÝÛ^¥¯ä›ïy¼ÄÌ¡žà†®ä%‡%Zé÷BFcÕ¹n”ó­¾)éÓ&IU‘E4HãRQHCL#%L st{nô£I…ô½-ªòR #,)k‹`&Q@´ƒL`BA¨.Ž©ü{—12#2Sä"•y‰ýÜ`e~6(La¡aÅb”CÀýŸÅ5ÊÀjp‡@Ö™ÅÞ)U_}«b¦«+RÍ–Öiµ@R#%Å‚Gzˆ›rúÐëµ[ák|vÙdÙµ#KL£$UBH¢ÓÌòc›ÐÔ¦ú/Óõ{ê(¤Ô–™Œ&¶¿±P‘ˆ’@#X„.\1¸DýtÌ×jgm<f¸»#%=QRFœâ¦») #%üBw P"’I¨#29û2tÀJ&bÌùlí²Ú'îáæ¿{#ø!0S÷ {ߧ¾¿=õÞ(MË­#,`bè×f¿Jr.#2±hR$ âMNÖsÌ#,© øZ.¬#,>2Õш’) $àÆE!ãN:ðøè>‚Ôu?ÒKºÁ:aקh ÒõÜ»æhiðBí”ÂD€Êª“#,²KE(,”H›PHÜ€4,*1h¥rç„°„FüÍ¥… …0(D@¤#,dŠLéP–6VjBTBW@#2Ö#,c0f+vʆ0TÆ—- „´’-½¬ÐSÒ®T–åïfÚ׊¶ÞMb—¶©#~NÍŠªð»/8Áo:¶g>”-i\4ÕÁTÌc3h~`ÉÊ$.*™ÁjÀÛKƒ¨ð»ÄžY%zýBµ5†õ{Ü6;cIãÍw”£¯3.ZZA‘#%$TG¤ JTÚn~öÙ678ä™ä ÍWYI»vàØ1£óPèMÝ#2‰ C]ƒÓ#2CÈ«åí:QÁú›FЦå’êĈ0°¨(V4ݨTr°)-P·Fékxú)ØÃê@ØöÃG߉#IjÄ’§^è4T#%”´€A`ăD¨UÌUNAk÷VÚ÷[¥~´S4®Þ­;b#,AÌ#PZ¤Štg[1¡„ ¢ s©xOd#,Ášy§GP’)ò)þ±DM¯pú~êÞë š6º¡ijª¬L[D M©tœgø! ×ÎUô°Úà›¯Œåù'צ½V—;\ÉZšã6›¬‰¶òÉ’c‚„$‘¦ÖcÁ¨ñ©˜ÛvHEJèGt+úrf–€©lc—©œ›ÛQÚ¨KKÚ\ÑP´ÊÖ.Zi÷NKÉáC¯^˜G¨4CÀ"‰ö…4ž–·Úhv‡Úƒ¦#2‚~ö€ýqØÕñ•vÏÓT@GaÏx(›€d<B’#2 =t4ÁUcì•"‚CÀ ­DC¨!QîNÉ¢ÎEÍ)°v?|žáN,m¯Ãü3†#,š¶ö!þmßzLŽ×­?=)&ŒBÁS4iú5¯”a6¶|¢#š#%:š¢šƒ÷Âý|9Ä}¯èÓÁ»,ÇÖWëúëèºÔ ¯Ý(Th¾}Uèuýº)op–V]½L±æ5ö±!9B4ÙûUèÃ-!¢TQä-±B2ƒ6Pnoû“)– µ¶÷Y…ÄLm§(íÍT)ˆáˆüZð;xxLœ)«iÈs\ò¶6EУÅ"c"ªhœ³ÂÌJeKjK‰IœUÁ¾j 3 &4hȉi <Áü|ÀD7÷6(Æ9Ä?/Þ¶õàŒ“ëÐ LEj#2bƒÞ†w}~g__º4ðÚHü)\j$sèóö˜^'bvÆ=ŒoiËs EQƒç$Â0û»#…U9³0$‰{Š‡~*à”#ûϾ­ëúÇÍ1L}â,³jÛ„­¡ {Žr=œWÁ—óí”Ãz4È Á›ŒXÓÂÐƧÓ!d$rÈ6iãÆ1’@òx `؃õ [›Z"Ù­b1´´Ç¢M&ŒTÒì}s»!‘dævgÛ#Ê^­ýlsNèÝïÄŽˆBÄ“Š6Š½>²Ø3Z)EÌAí<´ígJy¥íý´ólؼ—ñ:•Ä°cÊ=‰7Fð>ÌW`´ŒüY8rËW·—öÛ`§(7¦k¦ñ¿Ž²º<ð-»Öa/<˜ßËìî\׶s‚#KK³0:¤µ7‰#,Û}™ =#£xàòÖžûÑ”êŽxbçÇUÏL·WKÙû6SY#¼äö¿3Äï‹®«’#–á:@ˆbF#,¡âT©r¥"Àñf)¡#,ı¹];¹ž#ØzÏWjXq;ýõF?žÓþQ˜âôýüÀ8ndwpä]}[tÌ Sõ–yÂ+­ –p@ô•ÇÙ›|‹ñð8¯i#bf†ÈV””6[k¤HŒ á¼Òa¯bIÈF‡È;güÿ#27”Šá-]õ–K†IçÛS½£qÑKP*Hˆf›eú·S¶×È#@èh8áŽOu—m­×î7íÎ]©‡ƒ«fj„|X±®=³©%l’MfGïú&-@ÙüBŒß°ñMZç®í[Ô²[ŵÒð‚9í¦”³‡+.jíéjïWîó!=g¬K‘Æ’‡’¬*©£±³Æ3¬çEnñVWûâõz|4Gè@Ë¿kñój“¶“]Ñȶ×c@2NÕR§b÷qÓÊ÷ÙÀ™B#,í1ÞýaðGQG<†‚g¤ hÆHË›G¼Å@”‰¡Œk˜nxy}¼çNÆGÍÜ´Ï\Õe®,<ˆåýø¦á4·tÏ°Nüg«ÆïWBŽC±HÎÇÓáNw3‰QóL7HöÏZ7I$#,LÛëÊ%ºQ™1‚Ù}ûÒ2wÃER…¦§‘±PL¿@ÜtIz…$“4ÛnûÝD_}š>€P#,¹a°A”¢“{ƒJ‚÷eÎ#%DýÐ#,}Ø0c1ŸÑÛíÐ+eO¶PÞ ]ƒ "ýx#%I ¡Þ‚CæX_ã ô#2Á»âADI‘!dH(wn/WAØ©ðßËHöWyù+ÒzS!™›¨§M½‡1æØC³iïNÙq#%ú“s#,Anã#ªù–Þˆ#¡ê:¹ ŽHïùï½Çì5„âc¸> yý+M ¢¤¯/€¦9Ù«jÛçÈrdÑ‹>‰¢Šò(XtÈ9CÍYe×H'@çD’H:cñ¯‡W|ÎLûy"!ìçGžÓ+Îe“W«Ÿ+qµ¥g#¶s9eYýbÎ0j†6“ãlvª)ˆ0€#R°0*$Ô=;#,îSƭᮡ=›œuj:„@¯Þã7;ƒl;Á°1ŠÂ@q+œZ××ÏúÏê÷³+)$ð³ò,à ވŠÉ.?¶[µÒ¡Ü>ý»<C%PAª‘ PÔ<Aèʘ~º!‘Ýâô#ßä9™àq¼Ø[eRqóI~qî‚Š™Ÿ²†™ÚKPfÛáOì)rÝž²¥J'úæØÐÔJœ 1sèU’Ñ;â”Ü/³Š>ÛÅÙ[ævš¤/²>%“žî}vÿ3þ?dëõŒçê°õ;¥7”¬#\Òÿçéxºä!¹'cï»`.s§cj*³³¼¸T€qòŠNšLh1bB$èZ$Õ¹pc"í…>8Jô h\Rgæ¿Ûú{ÎèjôFÝÚX$~YG¾'ôçã?iz*Š©þ·#2¬U1¸ÎRHæD¾ÌºÄ¦;“Û¿QÞW8K—hB`éÓ‚zÏ6†yO³¥Ä°áðÃ=ËàˆìP’AÙÈÑo¢¢?|»–|—L˜ûÚ­;×v‰±50@“:ã—~Ë}"ŠGJT§]¬­["@ÙÓÓP‘Œlý9tI:β÷ËÁlB‡Ð–LgJöÙf?*Â2Z…Jšy9ŽW*îŸÖUÚ©4km²Ù¬ÓT³X–”­SP E›¶Ysʵ$‘Ès\Ö.^»›}¾'à‘º(Šº!éR­#%X "…üÕôo^¤ÿGõü<ÈÚ3(Ê’#F`,ÑA4Ú%Q˜„˜Ñ(ÄFšTŒ”M#2BM›&•c!ú$åÅö猀ɳ'€«:ûÓ7Þ›omõºó?X¥$›6í™A¹Œa°Ðh™3td ÒŠ‘„i/›xÝÒÙé –@L@š5!0¿#,Ú%«ÄýäôX0Ë'N¸>ÁKn,Û>2Q#2öÔŠF¥Vj(æ£%ÛVG÷»ÌoGTa“"P•³!èbcm»ç1½.é†À[]4šªœ„>n¨¤ôÜŸ`°™&A߬rÞÄÖ6š—¤ëª]„ÕêB e™tÔæ ½×±¬qØ>ßÝéPÍÑœ·ŽA/οPL¦ýáÊU%@â@’Ã=[Hg»·õrL¿äÿ[;çQöÎ2¤Ó|Ú#%Œ'ñ¢¢Ö[©Œ”¥m¦œiG#%0NPÈ©-D‚„#21u2H€âˆë—Tm¹guÉJåmÚî—7WZìŽö¼ï!µ™­¸{x“zè¹q¶ÌcI¶ŒdÀi#„Š 8x)[¢R¡ ´ )(î²mÑ#R¬5LÆ’M¤!°MªMi•x«W.—,î·-$”Frã=ÁóÖÅ\èmx3* ´Ä_{¨¹H%¢é)fGHë .P’ñÊZì¦Ù#r'âÔNŒ¹Œ¸bš.fš"ÿb˜Wî~òõ8YÞ!q6Ž ]5Ñ Æ\(IQȆyNODj¤¿ˆë® #,è¥qFD…SV®*Š@ܨtQãÄi66UŒ±®#,”VÍLjÑBÒˆ’¼«³5A”«¥¨Š<w›nå”]vñ­õ]Ý®è#)çµFÁ¤f‰&”#8œ”ÓB¨…¢ ˜m68äMD–2ËmM6¦ÜM3ñFSLlkp’%#,X•#,‰ènKª'\ª´éIrŽÌ#l®¶Ö@¡¶W„ë#2%]R(܉#2…p¬¶ŒiÖÐÚn´ÙJ*[Ì%Taª˜ðo#2¬TÔ#,#,ƒ#%Ô:o.MƒyÑåŽnãÀJUŠ.à»*.ÔÝUËKµ¨$MTƒc£SOy‹lË2-«½ðƒŒc4Ngš9zØÆŒ8£xæãq!عÊR°UªãU Ë HVI†@”È:±„j§>™†3OK »>UÛã¨Ðc)Wi‰Š“a(‚ ³‚Km‘ÔáE®®!è½ÓTÓ#¥˜²(F5µOƒ4ÇA›7†2H»É­IA¸1ÈR£¹‰ið£NôÈ4«X#,/)ÂTqZáÕF`ß)Á‹Z´œjŒ#, ‚iQn…Í@dWc ÔB„64¦¤bŒ^)™†0Ê#,býßZ ÷Øsȱ˜T}f×Í›Ã77|{ƬZòQ²r­ÚLâ­!ILs­C#&D™VE ¶Fi›„‚¨(a S#2Hƺ+Bd€2´*šNDbƒÜwÕPÙ—OK‚Ø«å 3‡†!·Ì˜”K‰˜¤A³¡ˆØ¡)‘"ã±Ë7ŠQ¶ôÅÒ&ŒçQ# x>lÁ¦=ÃUEÑ8Ãña›‹§ëL½&ÊfÂÀ ÃMˆg%FSE AÕǹ”VG§•¸5ºC¡2#2>"žr5¶ƒW€¨•¾} 6¯*16K¾B/­Ö›ÜK#2ï€Õß©3+_ŽL†å.€1½cQlBb8O›er{ýk“8YX E«-‚6™4Æx5H1Ä#,‹»§]Ä`Å°K4©J¸(©0Ö\±‚’…0¸#,Š(ƒæ!B†ÐQ!bJŠ£"¤Á€4‰Š ­Õƒµ$C  M‘5$P¤6àå¡P‡qsïá»»xŸ¿çytŨÉ!X ¡'åE(à¤Z¡ªD"Öæ¤á_^ÒP[Qm±BÔÙ´Í Â0ˆ:Õª‚QÌ=€RŸ¬p»ý>„ݶhjÔ4íGexþŽê#%ʱB¢",~p\€XîÀ‹¨ý¹bßuꢿ¦5Q=TQ¯ê’«2à›GÎH¨B  ’#Š”h ;’(\¶½/aê’º¥%D8Uèb9éž_ ¼© ,ÀÈT"É÷N‘+î`YÏ/5Q‚ZƒcÞ¦’#2å•’â`zõÜX»»b1±­ÕÕÓkomu#,¹ Ý„ ö)#241UÃ)¡ÚÔ9”¸Ø=Â4H¡ËM„iH~±K,!Õ›šîÌ9ÅBƒ–A¬×ADG8Þº…/øþµ°·¨°ØBfÚ›—gy,k„»ÐíËí³]x·†·ì„‹:˜#,¾/=–µŽIÂEJÍž&«Þ€j€ËÓnâƒk%ïR;tÅôŒG>M§3‹êÕá¢W¨A+hú”#,_ðÄTˆ><…ÒrŸy¯%C°Ë‚ðPÃTP‡`ÆîN„•Ÿ½xš“£¸ü:ö½Úñ|/b…2A4<!„ʲ%u¯»ñŠ{ÏHÿ?»¯bÂ|Êct õõÝüèý§^]ÂÃ}¯âúŒý²’^ý¾#,¼¯Hœµ\9–ƒ Môq¬Sò–û5ÚÛòÒ:é!bëÕä¿TÞdâ|Æ„ 4šñG‘rA¨ªWÔ‚d礇¼ì½¦ÐðÉßz†R‰Ê'j[br¬#,v#%ôηUŠšûʸT71wV­fºËmŽEçа>•N¼í®F($èȇ`ò;bY*AØ‚eb‚ Š©ö0’á™ôNÊR¨QmTÎÞ¤ª£H«és¬k"ÕU– Lè0ß߉cYHj樤0À—mE„ý-g‘¾#,Α9`8šã:i64Ir+üUA†ªåD*"% "•RR„Lþ6ÑkÚr¶Kh·²ÖìKrîêÛù²×#,¯F±£›•ºmmÓVCXÛ›I¶¹¬šåËmsgw»\‹dÚƒjŠåi ‹#%þÜ0Ñ'{,»°âNyç`OLCTWâå8”fk离ᙉY‡­6ûCÐd…ì®â-Œè©"CtE¢ @«MéCÚþÌ.D@»I;»÷oªåøfùš¨8»ê /×#ï”~`®™þ"(3M`|gôRK10Ž'ÁƒblL-o”»!DÐÄHÚJFâ Æá$ñù逑^#%Äc!‘¬T0ÅU$@#,mm&ÖÝkC[]&Ái¬tØ-äK·*™ v÷ytH«¶úÛT²&²F¶Ù*ÚD?Œñ> Q ‚#¨:¨Gþõ#%&¿ÜˆyõRuÛ¡F-P¬ÐKÅ2PôÑHDÊò¥OEíiA×ÁC¤BRñ@t#%îÉ™~c¹?ßbDïô›R²n‡3ž#2úê@çCÌöj Øtp$‘(¿&ÚºÚ¿Ÿe-LÍ’IJ1idŒ´i66hmIEbÆÊRRJdÚ4)[h‹TU±­¨ÖÔ´­2Ô´jeJÅ­ÆÒ!&…~³>uºÜAŒmÖ³ VÈ"8-8d)Kj¤+áx0bÁ"¨S‹ ¤pcq1Á¼`DîA€P#v#L G•$…M( ’%yé 1&áQX›Cdc`DÆIk PªF L4 `JZˆQJÀ#DQ”4€Å¢Š" E®³B‹ä*#%-@¥Œ³íýììwR–„Z"èÛ¦¦îéݘÜ:Óó+µén Õ1RÑ‚"V$ ¶1V€‘´;#%átÛ\Eï±»8D#>V¼tóVtü<%þ^¬úëKžZ(¥QJöô RD`^Ü?—cdFnh{Z§èPòl3vÙú›¬,~a¡ %—ˆÀ—nã!#,†ZäåÄ0#@ð¿0#2!HT?oN*bá¬C©˜B,¡Â”êÅ&ª¤pêÃG¹8'jêœØBIDóšénãɼ•ÖòË©R™”/Ò»Õjå£kbѪµ@$.#,-ˆg›„±Ð? è{µÑþ)"0‹2FnOWÓ6Â5ËûwÌÖÖT ë/”ßX{Ap–Â!ê?óÊ?\VQ*rè’.&ŽotzY÷F"Ë`ç`΃՚‚RúÕ ÿ¡ùêÑJ—Šê%áMY¢ªS|š²|‰š®#2‘u¡“CíÛñÞvöq8l‘>œí²[,ðª0›óÇ\O•“Êžwö[›c¢Žø%aö¡ÚÖéÒ„èè~—¿¬S¿ï¸¨=EÏh»&/½ïüÛ§“òêD'Ü€Àu –3KÅ.¯£†èžxª'ÓÑÚ4› nŠŠ%·f{ET¼R!#%êŸÙø¦”[#%]œúoåc6:b›tu«0bªY·©|u\kmÆ '#,åÜíª5×Xõ̪Ԯ8•.¸#2º`f)‰bm&ZYLÄ’8œn]µ=´öÈ­¶~cßî7šêíÞwlÒ݇Žh€Hr§‰T2Ô!#Þ«ké$Úš™ëê÷-k†á¨BLwó©7ºd!øÈA#«7fÊh›à‘+e_¯¾÷‘rùž5kâ$Iև׭-“ƒ±K(’CÝtSIÉ‚:@GH²\ÙJm‚6¹8Êëÿ}º÷%á¹7ÕnJêy;k„Σݹ;,Ñî)å-@û^ÒÐ#2£lgö`"fP0ÚÂ]…A¸ØwíÑAy.N¾¥6»mf%®®&’0Æ.3KÇ) íËëI£-ýùËT»a8ìêâ3Ð{ŽŠ›º+!-c©å%KÂÞpÈ÷êïw‰fI¡ÜêV/J…ÍÍËì˜Óg¬p\£¸æ>קLãwI¤ÔOÝQ¯;`p†ÄTq]8¢Ø×RÏ|¿:¾€ïCƒt42‚ŠÙoåÆx<,ñ.m­§"e7ÍJãç¾Úxm±lÖ2a$3¶ü@ÕÇ#,xzk}"y'ÑëçæÓ9ïR£ó^0˜ò2.Íe0cš’I!ÝÑ||Ï3¹UY¹Ð!b<o…,pѾa& q<G&ÔÌS¡²Ý·;hY£mñeåfÙbªlC"´q8•1D”lÝðÌc#%´ãˆ~#2'^YâÚ3™zY†mSï•®ò)]»­ ÚNÍ´ñÙçø>µº}±.·£ÎÐœ’^I'—ŒÍ4oSI­>%é+횎øÄH‡K¯wÔ‡,†uµ¤ç^û¢ïO•àFÙ%*1»mSÍGµ¨CÝã6þIäÄAƒØ„EzÖŽ„Æ»-¥²¿^g»Î}s×¾Òµì)¢º^`Úqqž$®Ýa·wÛ)s¯Û8(u§<dÂH9ñò›÷ûï7«åå1û6÷–MÏrJÁúÑZæÓ(Ê–Vx˜«­¶®œ§|ʼntªCVo…Ž–.ï=綔$èÞ#]^UQu½=íŒôCåøãg£srXf¸½!߃š˜MÞåß_ç³½Ýz “/f˜ö¬í_›ÊW>ùóäìêÇ++d]zÌc¼_¯¶=½MüƒÂ%œ`vØÉ豋x<ï9]tâï9Û—œ¾rg„¼3;+™iö&v·¬Ø^(mF´äm<ˆê9†2m”ÇB›ØYMÎÏ*waü¹#ÃU429r…†–ö—Åk¡ø@“2UÔ—.õL“§œs¶Œa›ÑÇÏ*ñÆ$øÅ3â½—W=©Å5 F÷0d, â xZ¢Ã!Ýxi "e†ðœ6áIÂjp¢ù&XwÄx]É1¼yÍÌw^˜B/Ä$gCÅÈ×4!×­usJQ¹¢S]üĆhq3åq冂ZÀYv^A£Ì0#2sÀ:LØ”oíöëlˆVÀƲ v`ÈqÁÛ<%?UIáÎ׬ …ÄJfo8t¹vpƒÀÀ˜ÙÃ#%œ4˜¾±Ï=tðÄë]vØC hdçLC÷*ñ#%€@=Ü#2  "`Ö#2ˆ"#2€Â*Z‘Ë–ò¸QHædç»6öe–zX¤vès(Z–nUÅ÷˜ÈÛÂTé¢WY­Mx°ÍP D žR÷3Õû´L¬ˆJÑš\D¹™uVñ6\ÛÆçQøUZú# šàóŠ  ëDj^º&±¡òï'–Œ¬* i·j°Œi¨cA>÷[ ²÷Oô¨ÉÂ'âa3a_*TÎ+9÷çÚ‘å¶]'`ã\éµÎ£it°ü¡ÛÄúÏòghæz¢:§ç™ŽŠ–”žç—>ýcšŠETÚQSSNFüb((±SöÛœM—Ä e²Ú{Að]‘Ák]zVÔ4nû““Œ{#,”Uû¼¸ €bœã£ëIy[OD3´}«éÓi PóXLÌKC b_ÜläBmß w¾{ñ- #™iæj£z#2Õ®c#,‘Û­áÝÔ>ºù)­h´í£#I¢9ñÌ¥°-‹Oáö•Xµ}Tpö(fy߉bP/]‚7ZUšÔKLŽo‡Þ\Ź'LÑ<q{ÊV5õv²fˆ‚ÇÄQŽ™hÎÑ‚±åÓr»7–}ºzbnøqœjãmú®<ŒÈ»+ðç’$71ƒ¯`Ö¼‘×]²ÍʧÜßDà]zÜ·¦9£±£uKþ8«Ç¸ŽŽyßFèYòÝü­Îòæîü_hÕL0xNq]åÒÞ3—Ͷ •#2îñ©4vK#2z©ópÄÜB^$wÛ¾ ¼§ñþ²ç‚_€—‘ë»áÛƒLñ‘Î’¶­P®5<Œ¨ÃG»äzð`rÐ¥‰K/V–¬#%ô#XeAO™ATCKxÌY°½†uòSUÀè²G·œáP;ƒÁœ'ˆ°¹" 1PКÁ]°/Cr̆Š‹wG£Ñ“»yt2yÑ´øsVž#2ÞoÔrãAaߘ…ëW+gú"l#,aO=gr&Ä9fí^â:p.XC;–mrçyÄ»¼Ú0¥Í™ppö»,<´¡G7k[óT/Ø– aër‚K•ÈcÓ¹lªFªê ðQä[Og:C¦bÏu*ÒlžA]ÃP”a \†ôÉ­å¶!eø#2™Ò “4#,¯YÞÂí¦qbBI‘¾I®ï@âs8—Z‚ 2°IÞ@5VH˜p÷üÅùªë¯-F§~ÐÃidj†6M¯îû1è»ÞBß&­k]š—ë­ð»¡ð~#>“¶É±?Aå(ä·°Çæáp>þ r”0öÎæø:ýþʕ﮿ÔÑÚc³~ÏÛ}\äÖ†"^ðö‡µ{K`ä†}Sß 6…5J´>]|;Êɯ…c}íÈvuùáØœ‘=7‡Xîå.lÑö•¥1„‹$CèÒ¡E€|ã>j a!)ªºÁÝzc:Bè©¡YŠç1©qU%&F’–Ä =#¡ Ø¢d SÌkzkW“\«ÅäÕËh¼P‚U@’ ¦4„ŠÄ¤µé¡V¶É55£UŠÖô­ÜÖ £˜A¶ku¦R,ˆ¢`k¦°‹APcJ*"‰…EJ”ÃÞ„zøoœòÎ7ó9ïÔ¯®ÑR…#%ØÔ?.'hœœ…˶„/#,'I ¨‹7Ó¾…ø9ÜW¦ñ·¹&Æ´ªÖ¿*Ú5m­\ª£j€”΀¤D/zNè›ú¹šp×ôÃSUhûÜÍ}·XñËe©ÐRÞ9Š±Œc`ÒÅ#2ÝD"5Ëçj4°{nmŽÚæðÍÀÖŒt†Ÿæ1h‘]…2¸™÷M*Ÿvlé­8щ*ÌGÃXêᔳ^&‚X ÈHR UÐe!ʼn•A¤WË=HïwMãY„H– ‘"À…ZLÝZcÜsd0¢j4›M¥I°—u‰¦˜Ñ ¹4#2ÞóTÊ4øN±n锎’B¬—§ß3R¹£7‚9#2-“uAH &a“T-G†$ÙŽÝ˃ÍJÜabnF;Û¯c/MJi•£¯íe›ÜŒÔÑFš!!¨«XôÚÖµLƒp˜Ö\y'[#,jÇ©Ðç9«eo†L¶$1±Š Œˆo0)­T,Y¦hX±Áx±´¼‹j#,Y²m°É3¤µùojsÎNÍÚ4ÀXVC3”ﳯ$Háƒ`˜Ð†=ÐsaPBPÊ"4Ò1aÒéĶыW;Q U¡„Gu„:T‰y#,¬ªs«™[é#,+&JV°’ï[1¸Lº”L`ΰ4Ý€ÞéŽ=¾±ZæÒ’FèF襳VïšiÏ]P \‰ªR8ÙFö0TjŒŽÇxHéòç1FV´‚ò£œµ.¨CZF“Làè2V8Ôjm•UJahÜJhpÒ6˜6˜š„ÅÅ£o7ÞL–Y]½9ØfÖÂn]>tÈ ­Ù*(×W‰ŒwV¶J¹CZ#DQ†F¨fìeÚÞBᇫ®3`Pˆ™`p3DË_ðœÍ‡­eï°<·´,*FÜeÇ®)UW$y%áQ¾%w£¤L ¥šllé0á˜Þ€ôäcL…"½®ûb†[¥cMUSWË„!K#2P­6«¬ãŽ´c¡kDäf™ÉŠy虜ÛTDÍËŒtï(æ%££‹7å‰bã“Lf#,–œ/*ªÚ"h·÷v§õïEÐV£é^f>Œ 2 @£cr-HëvS=ài Ç«¸5€ç#†9”Ðñ¤ƒš$)ÃÓoÌ¥08âd€Ó#,XÌî›ih¸«#2ÕÁ–B1ØÓ<ÂFCŸT³gAîš…u2&8¼ipÀÄšlBÌðCV#2æebkw9*hÛ2B¡‚è• F Ö§P×V06ÈÎû ¦àp25o¶³ÖYÐ/AŽ°g^ 19\Èi]ª¢™i¸ù ÌÍí‹wuˆÀSÕ4÷ýþfªPÈ‘R#(í,»¨l\»³>XÙ ·m ½9½Ð#Â+7O͵~”šá÷5Ûv¹\CW©túp¡Þ(vïž6¨Á?!ˆ'D)å$‡:±›Õ¸ÅJc-»?|âPa"ª¢dw¬¥_s#2zškÁ²~.7VV,ºtÆ]ÜIð{±ðêŸD#,_“¸7IÝA¨,åYÅIH)0!Â|üý?NÃèþΣ 3´yúü½*³ÓÅóÌ‚ N[í95ƒ6•0£Aü ûbsË%bƒeª•Áå˜ó=ZãM+³Fƒ ‚© ªªªF*(§å*…U±¤j¥FFUS§0Òz˜‹gŸ²º·<¹EôJ=@r;XàƺiTZHê·]%”ÓC[ÂÊü°ýG‡ODÐàyѸøW å@Hµð†ç˜¢C¢/$j&¶ìÛIIWj™KV——\ÀÈ*FÐPlPPH¯Á#,Xw졬ÓÈG™ñýÞ&ëwW¿º¯~^‚H’ „bÕ5CLµ¶ci1ŒLcH‰RPµL«ÒضKImX¤£lIY4hQM•F!›BšjF”›$£f”’¢41¦Ñ‰H–Œ¦h©M‘J¦Œ-$Ãl0Ù„JP‚1`B*Š ÿìÜé·°ÇÁÖ@'~§´æt5!’§¶-s°{º§s9î?4Ð]Uçs@}ûÁ_©äækü^D‘œ<Ä8à§_ j×–»N_,ÔâIi R8©p=1@#2°9ƒGå ĆuCmª‘ש¾ÈhÅØ;#’R& ¾®ÙŒ¨aö"#Ìò¢„ŒV^ÝÀ|܃¸®Ã¦Þ´0èÜ„$4b(ÜaïìXUSqÂïÜ}Ÿn°Aøjë7=;£õQªj@ÛiNö}¸µ¦÷é¨Õâi¡F®øÞ™´yy2ÀÛ&ÑXªKXÑõ-ZæÓcR…&£F)d$g2¨À! *•HûÂXA—~a;¯‘‚DÃDT£éãºj¦ÔhT½ü˃`Ï‚á(TGaE¨i˜Œ7? º5XÑ›‹£Æ¡Ò¢Ž •ŠjHå&"(¶Ùƒ’&ÄÁ°¶=0&¡ËV`‘Z´ƒcÄæZ’ÃÒbDyòIlZ¢YU(TF³šöó«ÌÑŒ¦»6ö•å&ñq#,ŒLbŽýP9k5 ¢àðÆ#2Ü]âA6­#2pAÈÊmJT“¨ë£fYdõª ÉPöKÅ‘#,²|œ˜-ÔÅÀÙ–‘*@1!E‰ƒƒ¼FÜÖì)3r×o³’85ü…€ÖÏÓ6#x¼mæäb•UFÆ’¦òŒ“L„¬!ÚæŽQžˆhNð3¤Ä‘AB ÕRÍ]P¤hlä“„¡"Àpä#2K†Hä[É’D’I#UlTCÙ¿žé09#%&š&A”®7´ô,$#%#2õv¶SÒýøÝŽüŽÒ€û~ø#ßßÈz gü)Q=†Ìê½Q¿ß‹ûÉ‘2uBÂN•lß?4ÆÐêôt¢@j¨tÝrÁqŽ†‘"ž%H-IP²a˜ÙJÚÔÍ<ƒ<ýCà#%|¦ýû#2ÐÈŠÅÜ#,´¢Ð:ý[z¾é­“ãTi’××4Y¯·ÛîÍ6ÆÇ}x§‰!K6×­jãe%=gȹ#,´éLˆ̃Kê„ãjÛD½h=‚OŽ–çÌä·î£ôŠ9-¤>E2Q(NЇU&ÄÎnŠHÐ2I(ˆÔ¢#,7bƒïˆåÍu׊<­9Z­¾¿Qì°j‰Õäž+±M•ö'$åk’^ƒß@”W<M¯q!"EÀ鬰ëËwwÛ—lš¯œ›—`4™ úŠÛéSQ‡¤**ˆ•B§#ÖkÔŸóflSÌÁ±/ÎÀT ̹ÔXîv¼ ë ‚RhÏ0Ôùx‡fsë(ÜߥXóÄh8a6hZü=­ÓTÐ8UC2`ÃïÝõ£tö@Ê'3õýGƒ „V $ˆˆ‚ª`ÓëB÷Õ!ì+æÿ-`ÔH÷Û\%0·ã÷ÉÍO…ó¾qYqt<%Œf||ªCl5ée½m¦‹ d†ëvT×vx 3Íž.kïcÈÌ"9•_ÜÃõO>ýàyy‘ôû¬O×!û"×ÒURa —ÌJ*é.=3²”¯X‰Y„ 9¢\nc¡bSº2‡!Äž]­]½šÉb2FÊûpÓÐÛ:±îvÈõ‹µÜ,3âÍ„JS»uUtDÀý19Wž53ÝÀz:ª™Ñ‘Œ@#%!¢M€&vÄfDÁÁ@@5„ÝU‚ÁKýÈQT´Nr$Ã|œ¨»rkFöo€Ô9&cq€È2š„rNb²ä„ã#†Kn” ®ÒŠ5ça|j"3eæh@ e /HaÀ\â–v£<vé‚K~ÎÅ:é èÒà±´‰"q“H£·Nz5#,·Zuˆ%1•i>:A$äÝ&Á5åD ˆEPÚ¥HŒA±ê?a™€A@ĦDLÕ˜6k#¤ÌP;S¦ZÇÖfÃè+a\ïFP/#-*<óµšHÅKÅ!!± „ ê÷w8â€DˆˆšT-ëÏmúhíÁÅ ®µ(èÃLØå¼ pTæ¦j ‚Á¨‚À½Aƒ(Ö÷Šóñ^Üo·<®AùßX2Eòu‘Ÿ¦n¤Á€¤n÷L„È°ÎMà&§P,ÌKI(’aávYÛû¿ä•¶ÜD¶uS2ºcre38ºt#%™aÁ%ç­»#2Lp²O§oÉ,…Òp]«¢QA»5±J]Hc¼rÊBŽ9ò³]haCRd"×qß5jd@Ê)Iz°“„=t i‹k¯ÕÜÍ [¤òÒ¶3Öë Ô¨•)x¨SqÖ4EÌ««š<±…‚‘0eÈàèÆ;:ÞX#¾e\$Ò<Ê,do®b9Έ#,aÝ]Vñ„ø<z6:kbÏ>x’D^øPM²L¦aÓ\¹¤ÀÇBÚs&´… !ßH‘Ó¤ÃB¶TÎåž©#ˆ©Ã±¨Í¦bv“ A»m¶ÒÁL\RE΢ŒFe¥%o˜Ý“*—,už›pÙ2oO¼hNl¹&#–FæŽ%5í!¤Òžùq È#2ÕtØ„N“³YNÛlmt²CHgPà1]0êóFq†Èš‹!¼Ž^¬ºÙñ m¦ O-eÌ¡ÑHÕré¿Á©"Ù 5ù;âÄÏ#2Ý;‚›#2¸í-Ö;Em¸vã4h¥ädÅ4Z›:»Ä} £ŒÊ²ÂY“‰†s-š00¹â§ ¬IÓœ„+^±*f¯zk×0òèyÄÒçv'#,tÞIõÄ*ñs&âiÒtîÔ­qÒu!h„5eá .W+#2³UµÙn²!ÆmgîðÌ•*8²Òëçεl.ç€úuß4×;—Å<­Ùؘ#2èýËïz뜣‘WC“]&&b±(ÔnÌHÛ&l‡‘¡·3ϦµytÀÒ¥ÅÌëgÁ¬;˜9õ :Þ¡¼{ååºAÓ±Mw´ÄHFÏÁðÊŽŽáAx5™-gDàLÈ ‡X<dM63 4«1CMuÚ#%9ÚjÀV"Š "h4à±Nœµ¡‹Su …tÒ7÷AºZHº+¤‚BN\¯…mgY¬ñ[6L†ÎÀV£6¡ľ˜&ø¸—dYH——æ¸ã,iÍ?5Ç–ôi¯-ž•Žš(“Udžz‡“¡½¦ÑkŠm‚ãb5éhÚÎÜè.£¦m#„Iû/ùþ2ˆ{l¹—M‘KÖ¼ñ4Ò~ÏLœtÏ#,â* H#2`9³_ÝÔp|§_‡ŽºyScPC¹Y÷j鵦%=áÛ(™v~zZb˜ú¾\„kQó~ñœ<“'êø}a[&½œ&Ú7›ð, –VJMjfÁ‰LX|rÜX[[ï˜#5…0CB±°ö.qQñÕØÀÝ•” VMè–Ý,ÔL’Š¸KÂcŽk“æĦHkÞß]!7r¶ÜcBË@ä½Ì·gnªÕ ³ ŠP—JPÍ HÆÜq!¦YÛ%j®`ÞÁR“1ga0 Ð£ h3×¾ø8ó»pàÑ Â&&Ú¦š ,¸ÓÖß*™®`—sªÙñ¨‹Ó¹Y¦³²k€|°š”ÔäçÜœµtErô…‡n\Z†€43öŽÝ;^PIêX©gaÄ×;„ÌE2êãɃ7j$ÓM÷ÉaŽ#Žr†hv ]! a"Ö`Åé‹«ó×5oÁGÜ…¶ðætL|0È$6d9Ò›ÛŽûÐI  €æœ‹¥j`TnC]F&&gã$pÓ$Š#,µ*CÉ b©¡…i Šâ©CTÖ6#%}ÚPVëàëÂkFQ†b³†4ÁE’÷ê¬@uòˆì¸TÄ0ê,¤RÆ H‰74%ÜÔ]£TК÷™‚Y0#,#,L#%ŒN„\ÔÉÖd³E"+¨•°†¦ «ÅjMe™4Y* ân°³3,UD w<ßÔÕê´ËJ-vÚêâ‰&.;B¦UqÑ ì„»Q”hYPlD û°Y¼dEÒ lY2Òi½‘‰C}»ªÈÉÕ…¥K›*› lN!@‰ '#%.DÈÖa6´U@¨†·SP#,F†Àm*’éÐÎ(Ú€@SD]ð,ÔÛmxri§S@ؤ#29 ÝqbQH‡`H‰¾¥B¦…Œei3…ÙQH¤Xˆ"O¬ž^}'ÈDZµŽQª eTDX kգÜ!¼9l{üäK#,CþD#%Hv¤E„HH ¬UB ŠÈ!øoýòÞ—°yg?]bÞtW ì…»f™V)Áeû;ÚÆ¥Ãì5^KBµ4F} ˜à¸ØÊ°0¦ä9OâvÀãÙ«ßjQthÚ¾HüJà­6Ôß’L#,%˜21ÍF™Â+®ïQK—$.C!r5ýIf¾½#%מº¹*¨=v¢/è‚nŒ†rîQ½´ŠÈ#%p‘éJvfIMìÐN¬:ØÃ]¬ÑómÞšdà<Up•w%Fdw—*DáÊàe"diZ ûì²M1ݼôGÞV‘|äM2dïÉÚí¹ˆæ­4xôwŽ)øµ¥u#œæ*f -_¨)6Ó`»…M—ÏUV·A^G#nuã#,¹£ê{Üò³µšÎZcci7«wt'}eÓp!>°=uý1õ#2"ESÛF\8?è§C–[äL«3õlrøª–~H¶ÈnÉË™ñÓ%ä$>¹#%ÙnÐÕT‘{ÒÂ茊#,ŽDàÈ L:{Nâîñj)x›¸NÕ+F Dm,…n2D*†1·’J-âjwÒÞní#,‘]å2ĘéÆÈBY!H2;†B²bA¸‘«4„b C†%?«±€@}ÌW½’m’YA¤:énbª&±¼Fœ¡Šæ¯Ñ«—M#2κ$“á,ŽZ€Âd”t}þ>Oœúz½ ŸjgÐõïØ´‡Ôˆô‚'$æ ñ„-™ô ZˆÈÖ[ÉŠO•ÚÛF'„j#%ðƒ¤Ì5™‘Í#2´4V%vH˜†Ja^‹†CŠ™´9-IÓ€”ŠÓÌ&µ9w²#2nc±ì´ï{c¸ÎxXÝÅ2pòmŒÛRGåRO~’/æöÍì!®B'¾ò²J°,<€Åkr,A-Ùa…M²n\Í—Ë1ˆsåfÑÌ}yJeV¸¥˜…CYé2ßjj~ ©™6å7rÃpñÄÂ!²")ïõ=S6mÁä»RB@^Ì+š4º8i¬|.6÷Æ°`³”M#,uúû{¡¬Ü4ظº»ü? ›M•‹#ˆ|aG°Í×xîÀg¼ÊŒʸ öó…0„~Ãkµ×ìµ·kQIE¬ÚÖ”„­Mõu&Ù5¶MªEGE„ìE—¹´¨‰{°P l‘áÃDÖ#2ô€Àžì½QHR¤.™~#%ö€‰¡³Ã*ÛÜj`p‰ÏK›Ÿ¶6–l–MQ¢J·ËׯÇáñ|ƒ£ìSR«7ᇠ~¡`Á@$#% RE@×ÛóËv©ãÆú¼¯¤q³g@Ú.Œá¬Ö;×qÖ˜·«:œþEK˜£Ëkdq(1 I#2x€ƒF6U4Ú8%‰&²\ª´Q$QŠŽÔH—̳º[s¼UÂë×yåmÊ^¶²cViºíX¼Ë\µ<Ý‘V@IÅN£~«¨e™d¢£¯)š#%nRÂÒ&Ë™`9šZÓò('oO3ÓÅè–“cÛÕû‡º™˜d¸Àê«^”“0…ô£/eÆt¡‰U¹¸ÌV(éìÞm“xìižEr@1@!wN;Ør"/Ž~©Ú¢HIµdüSârkb¢|;\ÖêX™{6×Mïóö„ÁAV¨y#,Ø"ªµ;¦ÃÀ‹B/ˆQI>_M2LxÚÀZ(ù)ñf•êû ŸdÍÍ÷ê²mé·#ž¦ÜÜrɸåÙ¨Š•â+®ô@,q(b …MãYˆöÜÄMeïWÓ „fìDÛJóü‚|Ñ`B϶#2'2à i¦ˆ-HÏt!¯Y/Y ’_{c韭>ÓÒw+ïÜ‘ŠÙ=FÖ·¿ãõz#,5šÚ)›I©&¥–˜Åd” ª¶-fBlH¢¦´ÆÛRmûm#%…HʉD‘$F,R‡s¼ßÛ<“ÕXªå‘˜ûµ£aÞ¢þ“”Ôæ: ÇÉ#,#,¾®¾¥ÏÌXŽ{yaÀ&È$‹ .lú²z°/‡Ù°n„ÕNÑ=ǾꉑäKÁŸ õô„’¯WQo}÷øI÷£ïw¼4|¦2á—‚%µ-/PA@<Móñ¦Ú+ÛSÓ`µ)m¡æ¨tcÎâIˆ7;p´#,MÓIÓqA’q«)\»’ÄùÑe®qÄAàÒå¬a¶!ñ#2 8:ß 7$™l·}uqžî;9ráHÚ@li&„”…Á©mœˆ£×”ôaä%¡j2Ä­õ½ël¥ÃmNÌ#,¹H#% ²Ùc%´B¬¹œ#,6Œ-#,Ó­ÞîôÅN‚¡ê€ÂNോF•¨>c)•‘dÝŠh7ü#2Ö† bÕk#,¥÷–?c5²c,d_C+#2h|ËÜ#%ÔLLgo©êÉa¼®K;ú!J#%+»è —TýJ "AÄ„È÷ðäa:ƒºN1|Ø—L¯#2‰Ì6 â$`D`C ÄÍPAŠ¦×¤yÝ,|O#,ãè(D+Ë‘¿Òr lTØdZaÞz(Î+4S(•÷x¿?x7ìʈ2J cÊAÐ*rÃ]ö>[oòýÖ­ÙF]˜Ïº‡GBÇóéÌJ(JÖA-e2[ÞáùO¼£oÃßõwðžÚ¬Ît< ¿ŸÙ Þ'¸wó·}ÿàEÉñ£DüûQµ8fÇÓ500.=Ô–l×Äÿ-#,NÖ9¯¤-÷”T<A¸ÐÒ)°€#˜ëŠœÂNê —#-ÈB YÄ*¢1™.£b#F“.êè$6F™_Gy‡éîÚå\Üç¯7žzî-œ$6L¢›!¨¢ŒKÉ»šèäY66·‹šå¸†1]ݼ[Ï+´¤„¨Ù„_Ð#,D¨ÈC±TýIØ$#,¦[v}^ó¿ÂQAEWȯ—¶Ç‰‚ög¨;É+5L'™§Òú@1OEŸ`uuƒ $ˆÅXÈ1F*K¨ø›‡­2ê‹D´ØÈTT¤lmHÒÊJ¦Í«ð~XÔo«Uû{è4‚ÅMEb¨ÚR™ŠÚûö§h’—µ¼kö¦Þš„@ DLþØJZØzÆ9FSĈØ䜩IÐ~(ˆb ª)‘#2lk Y«ThÙ‘ŠÆV*eË'¯;ÆÛHˆ@"„¢uÒh EÞ£@·DÕþÿ/ÞšžÄ÷>žfyO| ¯Xp#22{‡Ðy|öTÇÕ™SUÈXWìÙp…˜„0†L[ðG¼‘aÐÕ€àœä‚çœÆBH¾¥SÏ1ǶŠ¯~7½‚ÄQ* È):4ϘÿЂx™¹æ“cy#2FØ ŠD#,Ãõ!Ò{¸|ð0„½[Ô©­BçÈ‘0ŠtOrµBAyˆ…*)Nci© ¢Dˆ„ ŽíÒkTÛRiIª[NÓ– É¦Éæ¦Úö#2‚õe !¨"‰B°EÂò¥=å*È°öZ̲öê4ðùœ{ª‰õ3ÙáˆÅ øjÏ£Wà`Î [–i`MÄljh™ü4-™©hëm!Ï„á#•ù˜Ðó`›M¢ ›@s¶Õé5åy,`ÿ6z¹oxté/^Q±î¤Ž9±Bæfˆ}ɨ.=èƒðCÓü*ÿ”(<•Õ¥ù8Ý“E±Ji‰RlE-ŒT˜5µI¶Â–øÛoÀÕâl4VŠ6“H‚ªÈ¢IßÜsõöYÙ,ÒB6ÁBª$a=*hUÐ>!slŒ s*F‘F&L(ôQMCfÒa`¤7ë@ô¾3ìŽ{×nÉx;®êT‚øÀ„ˆˆY [Q‹h6¥#,Q¡*Í(¤"c„B|‰G™Ã=}MþlîÞÚUe’’ðûqúÙö!B#,¢ᬱTaŠ\PŠaª¶W,Â5¾š†ØŽ¯ÒûÉ>ŽÄ™m ­(ퟕáà–[#{fdC`1a`¥LLg}ZÐÚx~Œ”D­|Ô·h®êºoo’Ýf“SE*[Öl+¶Ùk»²¼kÍåkªmMoJ¹*-æî³7feW\ݵsµ–ȳjòîÆš&×wWw[I²¤ÀiŒM¡YT4XXH’§*ÂC‘m¨ÅFƨІ›Eé½yq©M-”Ô™e^•®­çW^yÖ«ÆÆÒŒ¦ZËe-yÝËv»·E–2¶]5ÐB’)Éfé‘À›ÄEªÀ:qV„m —3öŽ{¤šƒ{Œm,›‡Ö_#22ȨÅPLYàH$#2|rT1µŸÉzL¥´fŠPüÉ2ƒU —¾LÓ]uÌ’jsB¤!ÊzUÊîØ46 Yç¦ %ÈíEÙû\¿‚â…Ã䋈Š÷ óøï–aêb-а+žß^01#,¦oqœ6郕)¶uF±±á¼÷âBÝÖøðð> ´ÈĘõ"hjªTâé|'Fu‹xÖi¦˜ £[ëñ30õÈS°ÃíÛÊ ÉQÅrŠFq/ ƒ}z“ÅË_²ö$ÁÐB0î¡5$ÑÇÇ3U‘wà°ÿ3)#ð#,r# P3>`Óœ.rp|•MÏpÕ:À ï"`ä#2— PyС†µFˆkŠ‘/€gWåU‹foÕòŠDÑ´R£¾kª|g¡¸j” ~{7î;J†øï8bˆ°k¦Eî×å{ø4—F›¯èÑ8–ð¡y~éfkƒðrèýçÑ(œY<à¦åÀ¹ÐZ´I-‚¢±¸Ž¡˜Ó“!³?=F7-¦B`Ù·[0QýPÈä¶1Ýæ…l®äÚX“®¸¤LPI†Ú2X0¡E#2®DC%¿ê8OðŒaø Xbå #%í]Ý:°KÉÎ6 ï}Îa´ŠóF’„ÂscF|Í{ÜG9­ºþú¢XŽ5h=¿bã‚8“ù‹çoVƒYÁêF8hý­+-DEC=µvNÅ|ªÖÞm¨7…J?š…˜nŠœ’^eBš#2V–ɤ3#2ºwãúhT1¸5±Ã„#,0œ§Kcb~Äp Óc¦tñ,ü#2ƒÌ`¹b(d7¥‘IL¢Ñ5Èæ$$:(å®Æ;Î àÿvdlƒ#%Pl~FNxêÍÀô£ÌÆ;Òq°HH÷‹í™Ôq¢!Ep{ág3¸ò÷èd@Þæe­¼­§¶QÝvü^ï¿Ým<ƒMzâ}×%Q'݈…¡ð‰ŸÇ ,€šeAoU*#”lÒ„)óÌŸY!#2+e¼»¡‚­*çqÝ,eÚ#%žÜ²ïÖfk‡ž5j½ô.*æÅBeú¬#%€OßýÏ÷Ëÿgûÿåô~?÷Ü¿öÿ»þ?ïoøúñ—üÿúÿ—üéÿû÷xµ~OoÓþíGÉþéîþÞÏø_ÿËÿÿ¸òÿ‡úÿçý¿åÿÃÿ_ü¿éòÿ—üðÿžì#Óÿ?úÓÏèùÇö_úuýoåبüªŸÐ y!ü§øs>ßöŸâÈDÊy; ™e\?ËþiMä*â"áÁª\ð°S+VEÀÿˆe—½oðZ¯×lX·½ê-Þ~åüYüîçwQ$&f}ß+e[î5]Àq(ŽYîÈHVz5!Ù¦Ñ#,qärBÌ)¬ÄDm–쳿…ì–@NÁÿ^ýûS!ÓiAsT?Ì-º<Cu¸ õÿp9=ñ¼I¢îÇ‘^A‰:Õó»0ÌsÆ,{#%íÔB<ÈïBR®?æPI\¦ÎœèÊxÿ`D)}‹?}þ®7ÃÈ÷µK¶=>=Ü#.”®]·#,ÍX.·$0€x¡4B@ŽÛýÒ_÷êå¹Oü#,ÌoÆ—þêÝeN–&!2ã¥n²3¹[3?¯‹°0#,íJš’!¿­‘¯në4ÆÆ·f‚Ghl´€èwðJ˜1†?›ŠeTïhÞ¶ñïËKŸ°<νŽ°R3³Uï®ÍÜ4²µZhBê‰`å‡Á§›2›ÕŽÔ¶í:¸öÍɦˆ6ã[ª ÔTuƒg†™D…ÛU&aœ]ä÷K6K¹ Á!„Íj}^}^#2±iÍ⑳»œè‚Ð„8ƒ+Þ^è†{Í:‡² ¾pøGê™­69nË–(W3ñ$‹$b1k‡žØ¼†@Ë#%häƒóÇB#,ù™Ÿ†˜xe:ù”Õ½kÁA¾¼›Âê#:Ó¤lh× f4S¸Íà xã¦#2¾™M÷{Oõ«;×@Ðg8¼Ô ¯‘ÇwÔÂÇnfªb»Ò\Á:"‚‘q#‚"aèïÂ]Â’ !‚®W˜×Û!±b•('˜ŒÌ!J+À*{ôíÂírd*&1ç¨XÎÉš‚*#2 zñR#2˜éË»¦™~Ýf``3(HÈ&½®épØæ&‘V†"€ø „Pñ;¢ýVl(bH€$`¡$eÜ2âï(wæ¹QVƒH1Mï}>ÓÄÌá‹ÿí-×+&|à9äî2ågvÉb0P#%œµÒ¡¹„›68—ëï®;Ñ)”Á"ÌjÄÔJƒlkY¥3[FÔm’¨ÌÒDÅ…‘S_EÛWmU|>k_[B:?#âE3€yÿ|#%¿]Tµi¸$HB…£"ï<ZíJ@ŠÄP÷õ|€Ÿ7èÍ##, ¿\·¾V¸Ÿ[¯Ys#ð¾fsî£Y¯VåU1Š"ü„«Çí'_úç1#2Õ×By¢aE»’î Â_ù£ù@Z>‘™ÛÝ#%½!Ë‹ŽÐ\¤íjoEw°5噫w#%ÂŽa”—Jž™ø‡éßYúDà£<¦tÉfƨ`TÑá›èð¨Ù¨àŒ'ÓE†¢è¸QïW8U|ních·W‘¬µôÓzýÆËhÊR›Ý1·#,—å 0[âÛ|íÙc^+I·Ük˜Ø´|nmcãm½(ÕìµoSEªMAj½óZåUìÞ<óv m×#%º\9!ÍÈ£"¦FIó@ÿ¤…ố8ÉÀŒADÇS¶ÅÎñÁvê…˜P†E<öí$½ûe,Ê×U®FFzÚZ7yõÀðMû`®¥áA®H²#7b•ÿ[íÝÿk(ôhôGr:Ÿo!|¹`Oë`ÅCÐ?-b‡þHŒŠ,X mv£¸îÔP¥Eˆ£:™šé­Õ«²Õô¬Mš“^­h é! H¤€ £þßÇ3ÏìÿÏÚ¦¨¤"Žþž˜™áã(øûfYr0Ûm‹C÷'`¼Ž§Só‰ó– Èž“ðÜáøê ÈHËÿkŸíI—†xŸ$„EOýþ@P‹_÷¸s]9ÿYTŸòãÈ£Ú­- ݦþÏý-þз§øm¿˜Û¤Yâ rÐ~¿ûü}õ;O~ù °ÓÇBr¯TrâCΗuÇ“Þ;ðë¡Og™Éï òdò–K½¯70àNøŒü_EÕµúýgþc(¢?t-A!óÏKº'ç—€$#%£Ø*Qv˜%?ÊJÝHÂÍì\¡]DÛ§þÿXŽÏá.¨3ŸÑv¿òù }p¨ œý9ÂÉ“GmGJíâqTE3‚ož«…ÆY̘wÈâM§NÚ gA••çÎX›Â7 ^[ c~¢qQ-y[Na Âò;üøfJÃ$É o§‚èºÃö¡"(‘eë׿P`ôvËd%¨býûæ9£Õÿb¼…=g&(mööKUcÇó><qÃþSN3÷á7™~çð#2ˆŸÿÅÜ‘N$‘‘@
+#<==
+#-----BEGIN PGP SIGNATURE-----\n\niQIyBAABCgAdFiEEivIt5aBoIuNHTzxwSbTGfAUneqoFAl5/EXAACgkQSbTGfAUn\neqp2nQ/46vvYBUDSJoGs14ZwZvCon9BigvosXc8by8ncPXNS1GIzbO9oxjjrK70v\nwsFrBJ+gEn4p4x2fR9yXuYcZr0mUVm0rqchXUJRAuwP8zvdDcYS8KZ2t34H4NarK\njGj+tRDQbBa+SmUcJvUFSnesdtm/OFAAJ1JayAzJqvoV9a78fenc3boJ7ag/v1+Y\nIcKscr5FIz4FQk0JBQa2i/DwvmJFlmP2nP589xdtRldbcQjXF24PxnFlGejGf5EY\nWtLPNl0WRSzgcMbN2O/aEAFq8TkCgak36fGeFcIO+2EqQ4Z03QvKwlA0JinmgJSl\nu0I6Pu/YHs3MvrbzZZBEtEhnxKBkilkHFNi4RWymKHBUOqcfpGyDIrDnFiXzoqcs\nsQTJ+Cv95Fm0xbcsiIFbNG/XRWcfvdk7bSb0C3VsVehWS+LyK4twXD9U7iHzPsLM\nHQ0oUqxfMwqp0NgwWeIMhSNROj3eYbHbgn131Dpxad4N5M3ajA/dl/u6T+qVkBh/\nR7hh6g+Q7FwxFyOm82uA0igZhRy0rCvIjpLbteAufA/VUjhSNLha0pYeOKTGkFXr\ndtmgvC77EgAN0lG0/76UTI2NRIeNevcCmFsQvT7/13gusIh/vFetPfKJxXzZNnAw\nlutXw20Mp9LcvdY/vSDCEqrQzB2bJsvF02jlRCGhkumrzEi+Xw==\n=y9ft\n-----END PGP SIGNATURE-----\n
diff --git a/wscript b/wscript
new file mode 100755
index 0000000000..59782c3e1b
--- /dev/null
+++ b/wscript
@@ -0,0 +1,1565 @@
+#!/usr/bin/env python
+
+# SPDX-License-Identifier: BSD-2-Clause
+#
+# Copyright (C) 2020 Hesham Almatary <Hesham.Almatary@cl.cam.ac.uk>
+# Copyright (C) 2019, 2020 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.
+
+from __future__ import print_function
+
+import pickle
+import os
+import re
+import stat
+import string
+import sys
+
+try:
+ import configparser
+except:
+ import ConfigParser as configparser
+
+from waflib.TaskGen import after, before_method, feature
+
+is_windows_host = os.name == "nt" or sys.platform in ["msys", "cygwin"]
+default_prefix = "/opt/rtems/6"
+compilers = ["gcc", "clang"]
+items = {}
+bsps = {}
+
+
+def no_unicode(value):
+ if sys.version_info[0] > 2:
+ return value
+ if isinstance(value, unicode):
+ return str(value)
+ return value
+
+
+class VersionControlKeyHeader:
+ _content = None
+
+ @staticmethod
+ def write(bld, filename):
+ if VersionControlKeyHeader._content is None:
+ from waflib.Build import Context
+ from waflib.Errors import WafError
+
+ content = """/*
+ * Automatically generated. Do not edit.
+ */
+#if !defined(_RTEMS_VERSION_VC_KEY_H_)
+#define _RTEMS_VERSION_VC_KEY_H_
+"""
+ try:
+ rev = bld.cmd_and_log(
+ "git rev-parse HEAD", quiet=Context.STDOUT
+ ).strip()
+ content += """#define RTEMS_VERSION_VC_KEY "{}"
+""".format(
+ rev
+ )
+ except WafError:
+ content += """/* No version control key found; release? */
+"""
+ content += """#endif
+"""
+ VersionControlKeyHeader._content = content
+ f = bld.bldnode.make_node(filename)
+ f.parent.mkdir()
+ try:
+ if content != f.read():
+ f.write(VersionControlKeyHeader._content)
+ except:
+ f.write(VersionControlKeyHeader._content)
+
+
+class EnvWrapper(object):
+ def __init__(self, env):
+ self._env = env
+
+ def __getitem__(self, name):
+ fields = name.split(":")
+ v = self._env[fields[0]]
+ try:
+ fmt = "{:" + fields[1] + "}"
+ except IndexError:
+ fmt = "{}"
+ if isinstance(v, list):
+ return " ".join([fmt.format(w) for w in v])
+ return fmt.format(v)
+
+
+class Template(string.Template):
+ idpattern = "[_a-z][_a-z0-9:#]*"
+
+
+def _is_enabled_op_and(enabled, enabled_by):
+ for next_enabled_by in enabled_by:
+ if not _is_enabled(enabled, next_enabled_by):
+ return False
+ return True
+
+
+def _is_enabled_op_not(enabled, enabled_by):
+ return not _is_enabled(enabled, enabled_by)
+
+
+def _is_enabled_op_or(enabled, enabled_by):
+ for next_enabled_by in enabled_by:
+ if _is_enabled(enabled, next_enabled_by):
+ return True
+ return False
+
+
+_IS_ENABLED_OP = {
+ "and": _is_enabled_op_and,
+ "not": _is_enabled_op_not,
+ "or": _is_enabled_op_or,
+}
+
+
+def _is_enabled(enabled, enabled_by):
+ if isinstance(enabled_by, bool):
+ return enabled_by
+ if isinstance(enabled_by, list):
+ return _is_enabled_op_or(enabled, enabled_by)
+ if isinstance(enabled_by, dict):
+ key, value = next(iter(enabled_by.items()))
+ return _IS_ENABLED_OP[key](enabled, value)
+ return enabled_by in enabled
+
+
+def _asm_explicit_target(self, node):
+ task = self.create_task(
+ "asm", node, self.bld.bldnode.make_node(self.target)
+ )
+ try:
+ self.compiled_tasks.append(task)
+ except AttributeError:
+ self.compiled_tasks = [task]
+ return task
+
+
+@feature("asm_explicit_target")
+@before_method("process_source")
+def _enable_asm_explicit_target(self):
+ self.mappings = dict(self.mappings) # Copy
+ self.mappings[".S"] = _asm_explicit_target
+
+
+@after("apply_link")
+@feature("cprogram", "cxxprogram")
+def process_start_files(self):
+ if getattr(self, "start_files", False):
+ self.link_task.dep_nodes.extend(self.bld.start_files)
+
+
+class Item(object):
+ def __init__(self, uid, data):
+ self.uid = uid
+ self.data = data
+ self.links = self._init_links
+
+ def _init_links(self):
+ self._links = []
+ for link in self.data["links"]:
+ if link["role"] == "build-dependency":
+ uid = link["uid"]
+ if not os.path.isabs(uid):
+ uid = os.path.normpath(
+ os.path.join(os.path.dirname(self.uid), uid)
+ )
+ self._links.append(items[uid])
+ self.links = self._yield_links
+ for link in self._links:
+ yield link
+
+ def _yield_links(self):
+ for link in self._links:
+ yield link
+
+ def get_enabled_by(self):
+ return self.data["enabled-by"]
+
+ def defaults(self, enable, variant):
+ if _is_enabled(enable, self.get_enabled_by()):
+ for p in self.links():
+ p.defaults(enable, variant)
+ self.do_defaults(variant)
+
+ def configure(self, conf, cic):
+ if _is_enabled(conf.env.ENABLE, self.get_enabled_by()):
+ self.prepare_configure(conf, cic)
+ for p in self.links():
+ p.configure(conf, cic)
+ self.do_configure(conf, cic)
+
+ def build(self, bld, bic):
+ if _is_enabled(bld.env.ENABLE, self.get_enabled_by()):
+ bic = self.prepare_build(bld, bic)
+ for p in self.links():
+ p.build(bld, bic)
+ self.do_build(bld, bic)
+
+ def do_defaults(self, variant):
+ return
+
+ def prepare_configure(self, conf, cic):
+ return
+
+ def do_configure(self, conf, cic):
+ return
+
+ def prepare_build(self, bld, bic):
+ return bic
+
+ def do_build(self, bld, bic):
+ return
+
+ def substitute(self, ctx, value):
+ if isinstance(value, str):
+ try:
+ return Template(value).substitute(EnvWrapper(ctx.env))
+ except Exception as e:
+ ctx.fatal(
+ "In item '{}' substitution in '{}' failed: {}".format(
+ self.uid, value, e
+ )
+ )
+ return value
+
+ def get(self, ctx, name):
+ return self.substitute(ctx, self.data[name])
+
+ def get_values(self, ctx, name):
+ more = []
+ for value in self.data[name]:
+ more.extend(self.substitute(ctx, value).split())
+ return more
+
+ def install_target(self, bld):
+ install_path = self.data["install-path"]
+ if install_path:
+ bld.install_files(install_path, self.get(bld, "target"))
+
+ def install_files(self, bld):
+ for install in self.data["install"]:
+ bld.install_files(install["destination"], install["source"])
+
+ def asm(self, bld, bic, source, target=None):
+ if target is None:
+ target = os.path.splitext(source)[0] + ".o"
+ bld(
+ asflags=self.data["asflags"],
+ cppflags=self.data["cppflags"],
+ features="asm_explicit_target asm c",
+ includes=bic.includes + self.data["includes"],
+ source=[source],
+ target=target,
+ )
+ return target
+
+ def cc(self, bld, bic, source, target=None, deps=[], cppflags=[]):
+ if target is None:
+ target = os.path.splitext(source)[0] + ".o"
+ bld(
+ cflags=self.data["cflags"],
+ cppflags=cppflags + self.data["cppflags"],
+ features="c",
+ includes=bic.includes + self.data["includes"],
+ rule="${CC} ${CFLAGS} ${CPPFLAGS} ${DEFINES_ST:DEFINES} ${CPPPATH_ST:INCPATHS} -c ${SRC[0]} -o ${TGT}",
+ source=[source] + deps,
+ target=target,
+ )
+ return target
+
+ def cxx(self, bld, bic, source, target=None, deps=[], cppflags=[]):
+ if target is None:
+ target = os.path.splitext(source)[0] + ".o"
+ bld(
+ cppflags=cppflags + self.data["cppflags"],
+ cxxflags=self.data["cxxflags"],
+ features="cxx",
+ includes=bic.includes + self.data["includes"],
+ rule="${CXX} ${CXXFLAGS} ${CPPFLAGS} ${DEFINES_ST:DEFINES} ${CPPPATH_ST:INCPATHS} -c ${SRC[0]} -o ${TGT}",
+ source=[source] + deps,
+ target=target,
+ )
+ return target
+
+ def link(self, bld, bic, cmd, source, target):
+ from waflib.Task import Task
+
+ class link(Task):
+ def __init__(self, item, bic, cmd, env):
+ super(link, self).__init__(self, env=env)
+ self.cmd = cmd
+ self.ldflags = bic.ldflags + item.data["ldflags"]
+ self.stlib = item.data["stlib"]
+ self.use = (
+ item.data["use-before"] + bic.use + item.data["use-after"]
+ )
+
+ def run(self):
+ cmd = [self.cmd]
+ cmd.extend(self.env.LINKFLAGS)
+ cmd.extend([i.abspath() for i in self.inputs])
+ cmd.append("-o" + self.outputs[0].abspath())
+ cmd.extend(self.ldflags)
+ cmd.append("-L.")
+ cmd.extend(["-l" + l for l in self.stlib])
+ cmd.extend(["-l" + l for l in self.use])
+ cmd.extend(self.env.LDFLAGS)
+ return self.exec_command(cmd)
+
+ def scan(self):
+ return (
+ [
+ self.generator.bld.bldnode.make_node("lib" + u + ".a")
+ for u in self.use
+ ],
+ [],
+ )
+
+ tsk = link(self, bic, cmd, bld.env)
+ tsk.set_inputs([bld.bldnode.make_node(s) for s in source])
+ tsk.set_outputs(bld.bldnode.make_node(target))
+ bld.add_to_group(tsk)
+ return target
+
+ def link_cc(self, bld, bic, source, target):
+ return self.link(bld, bic, bld.env.LINK_CC[0], source, target)
+
+ def link_cxx(self, bld, bic, source, target):
+ return self.link(bld, bic, bld.env.LINK_CXX[0], source, target)
+
+ def gnatmake(self, bld, bic, objdir, objs, main, target):
+ from waflib.Task import Task
+
+ class gnatmake(Task):
+ def __init__(self, bld, bic, objdir, objs, main, target, item):
+ super(gnatmake, self).__init__(self, env=bld.env)
+ self.objdir = objdir
+ self.objs = [bld.bldnode.make_node(o) for o in objs]
+ self.main = bld.path.make_node(main)
+ self.set_inputs(self.objs + [self.main])
+ self.set_outputs(bld.bldnode.make_node(target))
+ self.adaflags = item.data["adaflags"]
+ self.adaincludes = []
+ for i in item.data["adaincludes"]:
+ self.adaincludes.append(bld.bldnode.make_node(i))
+ self.adaincludes.append(bld.path.make_node(i))
+ self.ldflags = bic.ldflags + item.data["ldflags"]
+ self.stlib = item.data["stlib"]
+ self.use = (
+ item.data["use-before"] + bic.use + item.data["use-after"]
+ )
+
+ def run(self):
+ cwd = self.get_cwd()
+ cmd = [
+ self.env.GNATMAKE[0],
+ "-D",
+ self.objdir,
+ "-bargs",
+ "-Mgnat_main",
+ "-margs",
+ ]
+ cmd.extend(self.adaflags)
+ cmd.extend(["-I" + i.path_from(cwd) for i in self.adaincludes])
+ cmd.append("-largs")
+ cmd.extend([o.path_from(cwd) for o in self.objs])
+ cmd.extend(self.env.LINKFLAGS)
+ cmd.extend(self.ldflags)
+ cmd.append("-L.")
+ cmd.extend(["-l" + l for l in self.stlib])
+ cmd.extend(["-l" + l for l in self.use])
+ cmd.extend(self.env.LDFLAGS)
+ cmd.extend(["-margs", "-a"])
+ cmd.append(self.main.abspath())
+ cmd.append("-o")
+ cmd.append(self.outputs[0].abspath())
+ return self.exec_command(cmd)
+
+ def scan(self):
+ return (
+ [
+ self.generator.bld.bldnode.make_node("lib" + u + ".a")
+ for u in self.use
+ ],
+ [],
+ )
+
+ tsk = gnatmake(bld, bic, objdir, objs, main, target, self)
+ bld.add_to_group(tsk)
+ return target
+
+ def ar(self, bld, source, target):
+ bld(rule="${AR} ${ARFLAGS} ${TGT} ${SRC}", source=source, target=target)
+ return target
+
+ def gzip(self, bld, source):
+ target = source + ".gz"
+ bld(rule="${GZIP} < ${SRC} > ${TGT}", source=source, target=target)
+ return target
+
+ def xz(self, bld, source):
+ target = source + ".xz"
+ bld(rule="${XZ} < ${SRC} > ${TGT}", source=source, target=target)
+ return target
+
+ def tar(self, bld, source, remove, target):
+ def run(task):
+ import tarfile
+
+ tar = tarfile.TarFile(
+ task.outputs[0].abspath(), "w", format=tarfile.USTAR_FORMAT
+ )
+ srcpath = bld.path.abspath() + "/"
+ bldpath = bld.bldnode.abspath() + "/"
+ for src in task.inputs:
+ src = src.abspath()
+ dst = src
+ for r in remove:
+ dst = src.replace(srcpath + r, "").replace(bldpath + r, "")
+ tar.add(src, dst)
+ tar.close()
+ return 0
+
+ bld(rule=run, source=source, target=target)
+ return target
+
+ def bin2c(self, bld, source, name=None, target=None):
+ def run(task):
+ cmd = [bld.env.BIN2C[0]]
+ if name is not None:
+ cmd.extend(["-N", name])
+ cmd.append(task.inputs[0].abspath())
+ cmd.append(task.outputs[0].abspath())
+ return task.exec_command(cmd)
+
+ path, base = os.path.split(source)
+ if target is None:
+ target = path + "/" + base.replace(".", "-")
+ target_c = target + ".c"
+ target_h = target + ".h"
+ bld(rule=run, source=source, target=[target_c, target_h])
+ return target_c, target_h
+
+ def rtems_syms(self, bld, source, target):
+ bld(
+ rule='${RTEMS_SYMS} -e -C ${CC} -c "${CFLAGS}" -o ${TGT} ${SRC}',
+ source=source,
+ target=target,
+ )
+ return target
+
+ def rtems_rap(self, bld, base, objects, libs, target):
+ def run(task):
+ cmd = [
+ bld.env.RTEMS_LD[0],
+ "-C",
+ bld.env.CC[0],
+ "-c",
+ " ".join(bld.env.CFLAGS),
+ "-O",
+ "rap",
+ "-b",
+ task.inputs[0].abspath(),
+ "-e",
+ "rtems_main",
+ "-s",
+ "-o",
+ ]
+ cmd.append(task.outputs[0].abspath())
+ cmd.extend([i.abspath() for i in task.inputs[1:]])
+ cmd.extend(["-l" + l for l in libs])
+ return task.exec_command(cmd)
+
+ bld(rule=run, source=[base] + objects, target=target)
+ return target
+
+
+class GroupItem(Item):
+ def __init__(self, uid, data):
+ super(GroupItem, self).__init__(uid, data)
+
+ def prepare_build(self, bld, bic):
+ return BuildItemContext(
+ bic.includes + self.get_values(bld, "includes"),
+ self.data["use-before"] + bic.use + self.data["use-after"],
+ bic.ldflags + self.get_values(bld, "ldflags"),
+ bic.objects,
+ )
+
+ def do_build(self, bld, bic):
+ self.install_files(bld)
+
+
+class ConfigFileItem(Item):
+ def __init__(self, uid, data):
+ super(ConfigFileItem, self).__init__(uid, data)
+
+ def do_configure(self, conf, cic):
+ content = self.substitute(conf, self.data["content"])
+ f = conf.bldnode.make_node(
+ conf.env.VARIANT + "/" + self.get(conf, "target")
+ )
+ f.parent.mkdir()
+ f.write(content)
+ conf.env.append_value("cfg_files", f.abspath())
+
+ def do_build(self, bld, bic):
+ self.install_target(bld)
+
+
+class ConfigHeaderItem(Item):
+ def __init__(self, uid, data):
+ super(ConfigHeaderItem, self).__init__(uid, data)
+
+ def do_configure(self, conf, cic):
+ conf.env.include_key = self.data["include-headers"]
+ conf.write_config_header(
+ conf.env.VARIANT + "/" + self.get(conf, "target"),
+ guard=self.data["guard"],
+ headers=True,
+ )
+ conf.env.include_key = None
+
+ def do_build(self, bld, bic):
+ self.install_target(bld)
+
+
+class StartFileItem(Item):
+ def __init__(self, uid, data):
+ super(StartFileItem, self).__init__(uid, data)
+
+ def do_build(self, bld, bic):
+ tgt = self.asm(bld, bic, self.data["source"], self.get(bld, "target"))
+ node = bld.bldnode.make_node(tgt)
+ try:
+ bld.start_files.append(node)
+ except AttributeError:
+ bld.start_files = [node]
+ self.install_target(bld)
+
+
+class ObjectsItem(Item):
+ def __init__(self, uid, data):
+ super(ObjectsItem, self).__init__(uid, data)
+
+ def do_build(self, bld, bic):
+ bld.objects(
+ cflags=self.data["cflags"],
+ cppflags=self.data["cppflags"],
+ cxxflags=self.data["cxxflags"],
+ includes=bic.includes + self.data["includes"],
+ source=self.data["source"],
+ target=self.uid,
+ )
+ bic.objects.append(self.uid)
+ self.install_files(bld)
+
+
+class BSPItem(Item):
+ def __init__(self, uid, data):
+ super(BSPItem, self).__init__(uid, data)
+ arch_bsps = bsps.setdefault(data["arch"].strip(), {})
+ arch_bsps[data["bsp"].strip()] = self
+
+ def prepare_configure(self, conf, cic):
+ conf.env.BSP_FAMILY = self.data["family"]
+
+ def prepare_build(self, bld, bic):
+ return BuildItemContext(
+ bic.includes + bld.env.BSP_INCLUDES.split(), [], [], []
+ )
+
+ def do_build(self, bld, bic):
+ bld(
+ cflags=self.data["cflags"],
+ cppflags=self.data["cppflags"],
+ features="c cstlib",
+ includes=bic.includes + self.data["includes"],
+ install_path="${BSP_LIBDIR}",
+ source=self.data["source"],
+ target="rtemsbsp",
+ use=bic.objects,
+ )
+ self.install_files(bld)
+
+
+class LibraryItem(Item):
+ def __init__(self, uid, data):
+ super(LibraryItem, self).__init__(uid, data)
+
+ def prepare_build(self, bld, bic):
+ return BuildItemContext(bic.includes, [], [], [])
+
+ def do_build(self, bld, bic):
+ bld(
+ cflags=self.data["cflags"],
+ cppflags=self.data["cppflags"],
+ cxxflags=self.data["cxxflags"],
+ features="c cxx cstlib",
+ includes=bic.includes + self.data["includes"],
+ install_path=self.data["install-path"],
+ source=self.data["source"],
+ target=self.get(bld, "target"),
+ use=bic.objects,
+ )
+ self.install_files(bld)
+
+
+class TestProgramItem(Item):
+ def __init__(self, uid, data):
+ super(TestProgramItem, self).__init__(uid, data)
+ name = uid.split("/")[-1].upper().replace("-", "_")
+ self.exclude = "TEST_" + name + "_EXCLUDE"
+ self.cppflags = "TEST_" + name + "_CPPFLAGS"
+
+ def get_enabled_by(self):
+ return [{"and": [{"not": self.exclude}, self.data["enabled-by"]]}]
+
+ def prepare_build(self, bld, bic):
+ return BuildItemContext(bic.includes, bic.use, bic.ldflags, [])
+
+ def do_build(self, bld, bic):
+ bld(
+ cflags=self.data["cflags"],
+ cppflags=bld.env[self.cppflags] + self.data["cppflags"],
+ cxxflags=self.data["cxxflags"],
+ features=self.data["features"],
+ includes=bic.includes + self.data["includes"],
+ install_path=None,
+ ldflags=bic.ldflags + self.data["ldflags"],
+ source=self.data["source"],
+ start_files=True,
+ stlib=self.data["stlib"],
+ target=self.get(bld, "target"),
+ use=self.data["use-before"] + bic.use + self.data["use-after"],
+ )
+
+
+class AdaTestProgramItem(TestProgramItem):
+ def __init__(self, uid, data):
+ super(AdaTestProgramItem, self).__init__(uid, data)
+
+ def do_build(self, bld, bic):
+ objs = []
+ for s in self.data["source"]:
+ objs.append(self.cc(bld, bic, s))
+ self.gnatmake(
+ bld,
+ bic,
+ self.data["ada-object-directory"],
+ objs,
+ self.data["ada-main"],
+ self.data["target"],
+ )
+
+
+class OptionItem(Item):
+ def __init__(self, uid, data):
+ super(OptionItem, self).__init__(uid, data)
+
+ @staticmethod
+ def _is_variant(variants, variant):
+ for pattern in variants:
+ if re.search("^" + pattern + "$", variant):
+ return True
+ return False
+
+ def default_value(self, variant):
+ value = self.data["default"]
+ for default in self.data["default-by-variant"]:
+ if OptionItem._is_variant(default["variants"], variant):
+ value = default["value"]
+ break
+ if value is None:
+ return value
+ if isinstance(value, list):
+ return " ".join(value)
+ if isinstance(value, bool):
+ return value
+ return self.data["format"].format(value)
+
+ def do_defaults(self, variant):
+ value = self.default_value(variant)
+ if value is None:
+ return
+ description = self.data["description"]
+ if description:
+ import textwrap
+
+ tw = textwrap.TextWrapper()
+ tw.drop_whitespace = True
+ tw.initial_indent = "# "
+ tw.subsequent_indent = "# "
+ for line in tw.wrap(description):
+ print(line)
+ print("{} = {}".format(self.data["name"], value))
+
+ def _do_append_test_cppflags(self, conf, name, state):
+ conf.env.append_value("TEST_" + name.upper() + "_CPPFLAGS", state)
+
+ def _append_test_cppflags(self, conf, cic, value, arg):
+ self._do_append_test_cppflags(conf, arg, value)
+ return value
+
+ def _assert_aligned(self, conf, cic, value, arg):
+ if value % arg != 0:
+ conf.fatal(
+ "Value '{}' for option '{}' is not aligned by '{}'".format(
+ value, self.data["name"], arg
+ )
+ )
+ return value
+
+ def _assert_eq(self, conf, cic, value, arg):
+ if value != arg:
+ conf.fatal(
+ "Value '{}' for option '{}' is not equal to {}".format(
+ value, self.data["name"], arg
+ )
+ )
+ return value
+
+ def _assert_ge(self, conf, cic, value, arg):
+ if value < arg:
+ conf.fatal(
+ "Value '{}' for option '{}' is not greater than or equal to {}".format(
+ value, self.data["name"], arg
+ )
+ )
+ return value
+
+ def _assert_gt(self, conf, cic, value, arg):
+ if value <= arg:
+ conf.fatal(
+ "Value '{}' for option '{}' is not greater than {}".format(
+ value, self.data["name"], arg
+ )
+ )
+ return value
+
+ def _assert_in_interval(self, conf, cic, value, arg):
+ if value < arg[0] or value > arg[1]:
+ conf.fatal(
+ "Value '{}' for option '{}' is not in closed interval [{}, {}]".format(
+ value, self.data["name"], arg[0], arg[1]
+ )
+ )
+ return value
+
+ def _assert_int8(self, conf, cic, value, arg):
+ return self._assert_in_interval(conf, cic, value, [-128, 127])
+
+ def _assert_int16(self, conf, cic, value, arg):
+ return self._assert_in_interval(conf, cic, value, [-32768, 32767])
+
+ def _assert_int32(self, conf, cic, value, arg):
+ return self._assert_in_interval(
+ conf, cic, value, [-2147483648, 2147483647]
+ )
+
+ def _assert_int64(self, conf, cic, value, arg):
+ return self._assert_in_interval(
+ conf, cic, value, [-9223372036854775808, 9223372036854775807]
+ )
+
+ def _assert_le(self, conf, cic, value, arg):
+ if value > arg:
+ conf.fatal(
+ "Value '{}' for option '{}' is not less than or equal to {}".format(
+ value, self.data["name"], arg
+ )
+ )
+ return value
+
+ def _assert_lt(self, conf, cic, value, arg):
+ if value >= arg:
+ conf.fatal(
+ "Value '{}' for option '{}' is not less than {}".format(
+ value, self.data["name"], arg
+ )
+ )
+ return value
+
+ def _assert_ne(self, conf, cic, value, arg):
+ if value == arg:
+ conf.fatal(
+ "Value '{}' for option '{}' is not unequal to {}".format(
+ value, self.data["name"], arg
+ )
+ )
+ return value
+
+ def _assert_power_of_two(self, conf, cic, value, arg):
+ if value <= 0 or (value & (value - 1)) != 0:
+ conf.fatal(
+ "Value '{}' for option '{}' is not a power of two".format(
+ value, self.data["name"]
+ )
+ )
+ return value
+
+ def _assert_uint8(self, conf, cic, value, arg):
+ return self._assert_in_interval(conf, cic, value, [0, 255])
+
+ def _assert_uint16(self, conf, cic, value, arg):
+ return self._assert_in_interval(conf, cic, value, [0, 65535])
+
+ def _assert_uint32(self, conf, cic, value, arg):
+ return self._assert_in_interval(conf, cic, value, [0, 4294967295])
+
+ def _assert_uint64(self, conf, cic, value, arg):
+ return self._assert_in_interval(
+ conf, cic, value, [0, 18446744073709551615]
+ )
+
+ def _check_cc(self, conf, cic, value, arg):
+ result = conf.check_cc(
+ fragment=arg["fragment"],
+ cflags=arg["cflags"],
+ msg="Checking for " + arg["message"],
+ mandatory=False,
+ )
+ return value and result
+
+ def _check_cxx(self, conf, cic, value, arg):
+ result = conf.check_cxx(
+ fragment=arg["fragment"],
+ cxxflags=arg["cxxflags"],
+ msg="Checking for " + arg["message"],
+ mandatory=False,
+ )
+ return value and result
+
+ def _define_condition(self, conf, cic, value, arg):
+ name = self.data["name"] if arg is None else arg
+ conf.define_cond(name, value)
+ return value
+
+ def _define(self, conf, cic, value, arg):
+ name = self.data["name"] if arg is None else arg
+ if value is not None:
+ conf.define(name, value)
+ else:
+ conf.define_cond(name, False)
+ return value
+
+ def _define_unquoted(self, conf, cic, value, arg):
+ name = self.data["name"] if arg is None else arg
+ if value is not None:
+ conf.define(name, value, quote=False)
+ else:
+ conf.define_cond(name, False)
+ return value
+
+ def _env_append(self, conf, cic, value, arg):
+ name = self.data["name"] if arg is None else arg
+ conf.env.append_value(name, value)
+ return value
+
+ def _env_assign(self, conf, cic, value, arg):
+ name = self.data["name"] if arg is None else arg
+ conf.env[name] = value
+ return value
+
+ def _env_enable(self, conf, cic, value, arg):
+ if value:
+ name = self.data["name"] if arg is None else arg
+ conf.env.append_value("ENABLE", name)
+ return value
+
+ def _find_program(self, conf, cic, value, arg):
+ return conf.find_program(value, path_list=cic.path_list)
+
+ def _format_and_define(self, conf, cic, value, arg):
+ name = self.data["name"] if arg is None else arg
+ if value is not None:
+ conf.define(name, self.data["format"].format(value), quote=False)
+ else:
+ conf.define_cond(name, False)
+ return value
+
+ def _get_boolean(self, conf, cic, value, arg):
+ name = self.data["name"]
+ try:
+ value = cic.cp.getboolean(conf.variant, name)
+ cic.add_option(name)
+ except configparser.NoOptionError:
+ value = self.default_value(conf.variant)
+ except ValueError as ve:
+ conf.fatal(
+ "Invalid value for configuration option {}: {}".format(name, ve)
+ )
+ return value
+
+ def _get_env(self, conf, cic, value, arg):
+ return conf.env[arg]
+
+ def _get_integer(self, conf, cic, value, arg):
+ name = self.data["name"]
+ try:
+ value = cic.cp.get(conf.variant, name)
+ cic.add_option(name)
+ except configparser.NoOptionError:
+ value = self.default_value(conf.variant)
+ if value is None:
+ return value
+ try:
+ return eval(value)
+ except Exception as e:
+ conf.fatal(
+ "Value '{}' for option '{}' is an invalid integer expression: {}".format(
+ value, name, e
+ )
+ )
+
+ def _get_string(self, conf, cic, value, arg):
+ name = self.data["name"]
+ try:
+ value = cic.cp.get(conf.variant, name)
+ cic.add_option(name)
+ value = no_unicode(value)
+ except configparser.NoOptionError:
+ value = self.default_value(conf.variant)
+ return value
+
+ def _script(self, conf, cic, value, arg):
+ exec(arg)
+ return value
+
+ def _test_state_benchmark(self, conf, name):
+ self._do_append_test_cppflags(conf, name, "-DTEST_STATE_BENCHMARK=1")
+
+ def _test_state_exclude(self, conf, name):
+ conf.env.append_value(
+ "ENABLE", "TEST_" + name.upper().replace("-", "_") + "_EXCLUDE"
+ )
+
+ def _test_state_expected_fail(self, conf, name):
+ self._do_append_test_cppflags(
+ conf, name, "-DTEST_STATE_EXPECTED_FAIL=1"
+ )
+
+ def _test_state_indeterminate(self, conf, name):
+ self._do_append_test_cppflags(
+ conf, name, "-DTEST_STATE_INDETERMINATE=1"
+ )
+
+ def _test_state_user_input(self, conf, name):
+ self._do_append_test_cppflags(conf, name, "-DTEST_STATE_USER_INPUT=1")
+
+ def _set_test_state(self, conf, cic, value, arg):
+ actions = {
+ "benchmark": self._test_state_benchmark,
+ "exclude": self._test_state_exclude,
+ "expected-fail": self._test_state_expected_fail,
+ "indeterminate": self._test_state_indeterminate,
+ "user-input": self._test_state_user_input,
+ }
+ for k, v in arg.items():
+ actions[v](conf, k)
+ return value
+
+ def _set_value(self, conf, cic, value, arg):
+ return arg
+
+ def _split(self, conf, cic, value, arg):
+ return value.split()
+
+ def _substitute(self, conf, cic, value, arg):
+ if isinstance(value, list):
+ return [self.substitute(conf, v) for v in value]
+ else:
+ return self.substitute(conf, value)
+
+ def do_configure(self, conf, cic):
+ actions = {
+ "append-test-cppflags": self._append_test_cppflags,
+ "assert-aligned": self._assert_aligned,
+ "assert-eq": self._assert_eq,
+ "assert-ge": self._assert_ge,
+ "assert-gt": self._assert_gt,
+ "assert-int8": self._assert_int8,
+ "assert-int16": self._assert_int16,
+ "assert-int32": self._assert_int32,
+ "assert-int64": self._assert_int64,
+ "assert-le": self._assert_le,
+ "assert-lt": self._assert_lt,
+ "assert-ne": self._assert_ne,
+ "assert-power-of-two": self._assert_power_of_two,
+ "assert-uint8": self._assert_uint8,
+ "assert-uint16": self._assert_uint16,
+ "assert-uint32": self._assert_uint32,
+ "assert-uint64": self._assert_uint64,
+ "check-cc": self._check_cc,
+ "check-cxx": self._check_cxx,
+ "define-condition": self._define_condition,
+ "define": self._define,
+ "define-unquoted": self._define_unquoted,
+ "env-append": self._env_append,
+ "env-assign": self._env_assign,
+ "env-enable": self._env_enable,
+ "find-program": self._find_program,
+ "format-and-define": self._format_and_define,
+ "get-boolean": self._get_boolean,
+ "get-env": self._get_env,
+ "get-integer": self._get_integer,
+ "get-string": self._get_string,
+ "script": self._script,
+ "set-test-state": self._set_test_state,
+ "set-value": self._set_value,
+ "split": self._split,
+ "substitute": self._substitute,
+ }
+ value = None
+ for action in self.data["actions"]:
+ for action_arg in action.items():
+ value = actions[action_arg[0]](conf, cic, value, action_arg[1])
+
+
+class ScriptItem(Item):
+ def __init__(self, uid, data):
+ super(ScriptItem, self).__init__(uid, data)
+
+ def prepare_configure(self, conf, cic):
+ script = self.data["prepare-configure"]
+ if script:
+ exec(script)
+
+ def do_configure(self, conf, cic):
+ script = self.data["do-configure"]
+ if script:
+ exec(script)
+
+ def prepare_build(self, bld, bic):
+ script = self.data["prepare-build"]
+ if script:
+ exec(script)
+ return bic
+
+ def do_build(self, bld, bic):
+ script = self.data["do-build"]
+ if script:
+ exec(script)
+
+
+class ConfigItemContext(object):
+ def __init__(self, cp, path_list):
+ self.cp = cp
+ self.options = set()
+ self.path_list = path_list
+
+ def add_option(self, name):
+ self.options.add(name.upper())
+
+
+class BuildItemContext(object):
+ def __init__(self, includes, use, ldflags, objects):
+ self.includes = includes
+ self.use = use
+ self.ldflags = ldflags
+ self.objects = objects
+
+
+def is_one_item_newer(ctx, path, mtime):
+ try:
+ names = os.listdir(path)
+ except Exception as e:
+ ctx.fatal("Cannot list build specification directory: {}".format(e))
+ for name in names:
+ path2 = os.path.join(path, name)
+ if name.endswith(".yml") and not name.startswith("."):
+ mtime2 = os.path.getmtime(path2)
+ if mtime <= mtime2:
+ return True
+ else:
+ mode = os.lstat(path2).st_mode
+ if stat.S_ISDIR(mode) and is_one_item_newer(ctx, path2, mtime):
+ return True
+ return False
+
+
+def must_update_item_cache(ctx, path, cache_file):
+ try:
+ mtime = os.path.getmtime(cache_file)
+ return is_one_item_newer(ctx, path, mtime)
+ except:
+ return True
+
+
+def load_from_yaml(load, ctx, data_by_uid, base, path):
+ try:
+ names = os.listdir(path)
+ except Exception as e:
+ ctx.fatal("Cannot list build specification directory: {}".format(e))
+ for name in names:
+ path2 = os.path.join(path, name)
+ if name.endswith(".yml") and not name.startswith("."):
+ uid = "/" + os.path.relpath(path2, base).replace(".yml", "")
+ with open(path2, "r") as f:
+ data_by_uid[uid] = load(f.read())
+ else:
+ mode = os.lstat(path2).st_mode
+ if stat.S_ISDIR(mode):
+ load_from_yaml(load, ctx, data_by_uid, base, path2)
+
+
+def load_items_in_directory(ctx, ctors, path):
+ f = ctx.path.make_node(
+ "build/c4che/" + re.sub(r"[^\w]", "_", path) + ".pickle"
+ )
+ f.parent.mkdir()
+ cache_file = f.abspath()
+ data_by_uid = {}
+ if must_update_item_cache(ctx, path, cache_file):
+ from waflib import Logs
+
+ Logs.warn(
+ "Regenerate build specification cache (needs a couple of seconds)..."
+ )
+
+ #
+ # Do not use a system provided yaml module and instead import it from
+ # the project. This reduces the host system requirements to a simple
+ # Python 2.7 or 3 installation without extra modules.
+ #
+ if sys.version_info[0] == 2:
+ yaml_path = "yaml/lib"
+ else:
+ yaml_path = "yaml/lib3"
+ sys.path += [yaml_path]
+ from yaml import safe_load
+
+ load_from_yaml(safe_load, ctx, data_by_uid, path, path)
+ with open(cache_file, "wb") as f:
+ pickle.dump(data_by_uid, f)
+ else:
+ with open(cache_file, "rb") as f:
+ data_by_uid = pickle.load(f)
+ for uid, data in data_by_uid.items():
+ if data["type"] == "build":
+ items[uid] = ctors[data["build-type"]](uid, data)
+
+
+def load_items(ctx, specs):
+ if items:
+ return
+
+ ctors = {
+ "ada-test-program": AdaTestProgramItem,
+ "bsp": BSPItem,
+ "config-file": ConfigFileItem,
+ "config-header": ConfigHeaderItem,
+ "test-program": TestProgramItem,
+ "group": GroupItem,
+ "library": LibraryItem,
+ "objects": ObjectsItem,
+ "option": OptionItem,
+ "script": ScriptItem,
+ "start-file": StartFileItem,
+ }
+
+ for path in specs:
+ load_items_in_directory(ctx, ctors, path)
+
+
+def load_items_from_options(ctx):
+ specs = ctx.options.rtems_specs
+ if specs is not None:
+ specs = specs.split(",")
+ else:
+ specs = ["spec/build"]
+ load_items(ctx, specs)
+ return specs
+
+
+def options(ctx):
+ prefix = ctx.parser.get_option("--prefix")
+ prefix.default = default_prefix
+ prefix.help = "installation prefix [default: '{}']".format(default_prefix)
+ rg = ctx.add_option_group("RTEMS options")
+ rg.add_option(
+ "--rtems-bsps",
+ metavar="REGEX,...",
+ help="a comma-separated list of Python regular expressions which select the desired BSP variants (e.g. 'sparc/erc32'); it may be used in the bsp_defaults and bsp_list commands",
+ )
+ rg.add_option(
+ "--rtems-compiler",
+ metavar="COMPILER",
+ help="determines which compiler is used to list the BSP option defaults [default: 'gcc']; it may be used in the bsp_defaults command; valid compilers are: {}".format(
+ ", ".join(compilers)
+ ),
+ )
+ rg.add_option(
+ "--rtems-config",
+ metavar="CONFIG.INI,...",
+ help="a comma-separated list of paths to the BSP configuration option files [default: 'config.ini']; default option values can be obtained via the bsp_defaults command; it may be used in the configure command",
+ )
+ rg.add_option(
+ "--rtems-specs",
+ metavar="SPECDIRS,...",
+ help="a comma-separated list of directory paths to build specification items [default: 'spec/build']; it may be used in the bsp_defaults, bsp_list, and configure commands",
+ )
+ rg.add_option(
+ "--rtems-tools",
+ metavar="PREFIX,...",
+ help="a comma-separated list of prefix paths to tools, e.g. compiler, linker, etc. [default: the installation prefix]; tools are searched in the prefix path and also in a 'bin' subdirectory of the prefix path; it may be used in the configure command",
+ )
+ rg.add_option(
+ "--rtems-top-group",
+ metavar="UID",
+ help="the UID of the top-level group [default: '/grp']; it may be used in the bsp_defaults and configure commands",
+ )
+
+
+def check_environment(conf):
+ for ev in [
+ "AR",
+ "AS",
+ "ASFLAGS",
+ "CC",
+ "CFLAGS",
+ "CPPFLAGS",
+ "CXX",
+ "CXXFLAGS",
+ "IFLAGS",
+ "LD",
+ "LIB",
+ "LINK_CC",
+ "LINK_CXX",
+ "LINKFLAGS",
+ "MFLAGS",
+ "RFLAGS",
+ "WFLAGS",
+ ]:
+ if ev in os.environ:
+ conf.msg("Environment variable set", ev, color="RED")
+
+
+def load_config_files(ctx):
+ cp = configparser.ConfigParser()
+ files = ctx.options.rtems_config
+ if files is not None:
+ files = files.split(",")
+ else:
+ files = ["config.ini"]
+ actual_files = cp.read(files)
+ for o in files:
+ if not o in actual_files:
+ ctx.fatal("Option file '{}' was not readable".format(o))
+ return cp
+
+
+def inherit(conf, cp, bsp_map, arch, bsp, path):
+ variant = arch + "/" + bsp
+ if variant in path:
+ path = " -> ".join(path + [variant])
+ conf.fatal("Recursion in BSP options inheritance: {}".format(path))
+
+ try:
+ base = cp.get(variant, "INHERIT")
+ cp.remove_option(variant, "INHERIT")
+ base = no_unicode(base)
+ base_variant = arch + "/" + base
+ conf.msg(
+ "Inherit options from '{}'".format(base_variant),
+ variant,
+ color="YELLOW",
+ )
+ if not cp.has_section(base_variant):
+ if (not arch in bsps) or (not base in bsps[arch]):
+ conf.fatal(
+ "BSP variant '{}' cannot inherit options from not existing variant '{}'".format(
+ variant, base_variant
+ )
+ )
+ bsp_map[bsp] = base
+ return base
+ top = inherit(conf, cp, bsp_map, arch, base, path + [variant])
+ for i in cp.items(base_variant):
+ name = i[0]
+ if not cp.has_option(variant, name):
+ cp.set(variant, name, i[1])
+ bsp_map[bsp] = top
+ return top
+ except configparser.NoOptionError:
+ return bsp_map.get(bsp, bsp)
+
+
+def resolve_option_inheritance(conf, cp):
+ bsp_map = {}
+ for variant in cp.sections():
+ variant = no_unicode(variant)
+ try:
+ arch, bsp = variant.split("/")
+ except:
+ conf.fatal(
+ "Section name '{}' is a malformed 'arch/bsp' tuple".format(
+ variant
+ )
+ )
+ inherit(conf, cp, bsp_map, arch, bsp, [])
+ return bsp_map
+
+
+def check_compiler(ctx, compiler):
+ if compiler not in compilers:
+ ctx.fatal(
+ "Specified compiler '{}' is not one of {}".format(
+ compiler, compilers
+ )
+ )
+
+
+def get_compiler(conf, cp, variant):
+ try:
+ value = cp.get(conf.variant, "COMPILER")
+ cp.remove_option(conf.variant, "COMPILER")
+ value = no_unicode(value)
+ check_compiler(conf, value)
+ except configparser.NoOptionError:
+ value = "gcc"
+ return value
+
+
+def configure_variant(conf, cp, bsp_map, path_list, top_group, variant):
+ conf.msg("Configure board support package (BSP)", variant, color="YELLOW")
+
+ conf.setenv(variant)
+ arch, bsp_name = variant.split("/")
+ bsp_base = bsp_map.get(bsp_name, bsp_name)
+
+ conf.env["ARCH"] = arch
+ conf.env["BSP_BASE"] = bsp_base
+ conf.env["BSP_NAME"] = bsp_name
+ conf.env["DEST_OS"] = "rtems"
+ conf.env["ENABLE"] = [get_compiler(conf, cp, variant), arch, variant]
+ conf.env["TOP"] = conf.path.abspath()
+ conf.env["TOPGROUP"] = top_group
+ conf.env["VARIANT"] = variant
+
+ cic = ConfigItemContext(cp, path_list)
+
+ items[conf.env.TOPGROUP].configure(conf, cic)
+
+ try:
+ bsp_item = bsps[arch][bsp_base]
+ except KeyError:
+ conf.fatal("No such base BSP: '{}'".format(variant))
+ bsp_item.configure(conf, cic)
+
+ options = set([o[0].upper() for o in cp.items(variant)])
+ for o in options.difference(cic.options):
+ conf.msg("Unknown configuration option", o.upper(), color="RED")
+
+
+def check_forbidden_options(ctx, opts):
+ for o in opts:
+ if getattr(ctx.options, "rtems_" + o):
+ ctx.fatal(
+ "The --rtems-{} command line option is not allowed in the {} command".format(
+ o.replace("_", "-"), ctx.cmd
+ )
+ )
+
+
+def get_path_list(conf):
+ path_list = []
+ tools = conf.options.rtems_tools
+ if tools is not None:
+ for t in tools.split(","):
+ path_list.extend([t + "/bin", t])
+ path_list.append(conf.env.PREFIX + "/bin")
+ path_list.extend(os.environ.get("PATH", "").split(os.pathsep))
+ return path_list
+
+
+def get_top_group(ctx):
+ top_group = ctx.options.rtems_top_group
+ if top_group is None:
+ top_group = "/grp"
+ if top_group not in items:
+ ctx.fatal(
+ "There is no top-level group with UID '{}' in the specification".format(
+ top_group
+ )
+ )
+ return top_group
+
+
+def configure(conf):
+ check_forbidden_options(conf, ["compiler"])
+ check_environment(conf)
+ conf.env["SPECS"] = load_items_from_options(conf)
+ top_group = get_top_group(conf)
+ cp = load_config_files(conf)
+ bsp_map = resolve_option_inheritance(conf, cp)
+ path_list = get_path_list(conf)
+ variant_list = []
+ for variant in cp.sections():
+ variant = no_unicode(variant)
+ variant_list.append(variant)
+ configure_variant(conf, cp, bsp_map, path_list, top_group, variant)
+ conf.setenv("")
+ conf.env["VARIANTS"] = variant_list
+
+
+def append_variant_builds(bld):
+ import waflib.Options
+ from waflib.Build import (
+ BuildContext,
+ CleanContext,
+ InstallContext,
+ UninstallContext,
+ )
+
+ for var in bld.env["VARIANTS"]:
+ for c in (BuildContext, CleanContext, InstallContext, UninstallContext):
+ name = c.__name__.replace("Context", "").lower()
+
+ class magic(c):
+ cmd = name + "_" + var
+ variant = var
+
+ waflib.Options.commands.append(bld.cmd + "_" + var)
+
+
+def long_command_line_workaround(bld):
+ if is_windows_host:
+ bld.load("long_gcc")
+
+
+def build(bld):
+ if not bld.variant:
+ check_forbidden_options(
+ bld, ["compiler", "config", "specs", "tools", "top_group"]
+ )
+ load_items(bld, bld.env.SPECS)
+ append_variant_builds(bld)
+ return
+ long_command_line_workaround(bld)
+ bic = BuildItemContext(bld.env.ARCH_INCLUDES.split(), [], [], [])
+ bsps[bld.env.ARCH][bld.env.BSP_BASE].build(bld, bic)
+ items[bld.env.TOPGROUP].build(bld, bic)
+
+
+def add_log_filter(name):
+ msg = "'" + name + "' finished successfully"
+
+ class Filter:
+ def filter(self, rec):
+ return not msg in rec.getMessage()
+
+ import logging
+
+ logging.getLogger("waflib").addFilter(Filter())
+
+
+def get_white_list(ctx):
+ white_list = ctx.options.rtems_bsps
+ if white_list:
+ white_list = white_list.split(",")
+ return white_list
+
+
+def is_in_white_list(variant, white_list):
+ if not white_list:
+ return True
+ for pattern in white_list:
+ if re.search(pattern, variant):
+ return True
+ return False
+
+
+def no_matches_error(ctx, white_list):
+ if white_list:
+ ctx.fatal(
+ "No BSP matches with the specified patterns: '{}'".format(
+ "', '".join(white_list)
+ )
+ )
+ else:
+ ctx.fatal("The build specification contains no BSPs")
+
+
+def bsp_defaults(ctx):
+ """get all options with default values for base BSP variants"""
+ check_forbidden_options(ctx, ["config", "tools"])
+ add_log_filter(ctx.cmd)
+ load_items_from_options(ctx)
+ top_group = get_top_group(ctx)
+ white_list = get_white_list(ctx)
+ compiler = ctx.options.rtems_compiler
+ if compiler is not None:
+ check_compiler(ctx, compiler)
+ else:
+ compiler = "gcc"
+ first = True
+ for arch in sorted(bsps):
+ for bsp in sorted(bsps[arch]):
+ variant = arch + "/" + bsp
+ if is_in_white_list(variant, white_list):
+ if not first:
+ print("")
+ first = False
+ print(
+ """[{}]
+# Selects the compiler used to build the BSP (allowed values are "gcc" and
+# "clang"). Please note that the values of some options depend on the compiler
+# selection and changing the compiler may lead to unpredictable behaviour if
+# these options are not adjusted as well. Use the --rtems-compiler command line
+# option to get the default values for a particular compiler via
+# ./waf bsp_defaults.
+COMPILER = {}""".format(
+ variant, compiler
+ )
+ )
+ enable = [compiler, arch, variant]
+ items[top_group].defaults(enable, variant)
+ bsps[arch][bsp].defaults(enable, variant)
+ if first:
+ no_matches_error(ctx, white_list)
+
+
+def bsp_list(ctx):
+ """lists base BSP variants"""
+ check_forbidden_options(ctx, ["compiler", "config", "tools", "top_group"])
+ add_log_filter(ctx.cmd)
+ load_items_from_options(ctx)
+ white_list = get_white_list(ctx)
+ first = True
+ for arch in sorted(bsps):
+ for bsp in sorted(bsps[arch]):
+ variant = arch + "/" + bsp
+ if is_in_white_list(variant, white_list):
+ first = False
+ print(variant)
+ if first:
+ no_matches_error(ctx, white_list)
diff --git a/yaml/LICENSE b/yaml/LICENSE
new file mode 100644
index 0000000000..3d82c281ee
--- /dev/null
+++ b/yaml/LICENSE
@@ -0,0 +1,20 @@
+Copyright (c) 2017-2020 Ingy döt Net
+Copyright (c) 2006-2016 Kirill Simonov
+
+Permission is hereby granted, free of charge, to any person obtaining a copy of
+this software and associated documentation files (the "Software"), to deal in
+the Software without restriction, including without limitation the rights to
+use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
+of the Software, and to permit persons to whom the Software is furnished to do
+so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
diff --git a/yaml/PKG-INFO b/yaml/PKG-INFO
new file mode 100644
index 0000000000..bf47ef4b35
--- /dev/null
+++ b/yaml/PKG-INFO
@@ -0,0 +1,38 @@
+Metadata-Version: 1.1
+Name: PyYAML
+Version: 5.3.1
+Summary: YAML parser and emitter for Python
+Home-page: https://github.com/yaml/pyyaml
+Author: Kirill Simonov
+Author-email: xi@resolvent.net
+License: MIT
+Download-URL: https://pypi.org/project/PyYAML/
+Description: YAML is a data serialization format designed for human readability
+ and interaction with scripting languages. PyYAML is a YAML parser
+ and emitter for Python.
+
+ PyYAML features a complete YAML 1.1 parser, Unicode support, pickle
+ support, capable extension API, and sensible error messages. PyYAML
+ supports standard YAML tags and provides Python-specific tags that
+ allow to represent an arbitrary Python object.
+
+ PyYAML is applicable for a broad range of tasks from complex
+ configuration files to object serialization and persistence.
+Platform: Any
+Classifier: Development Status :: 5 - Production/Stable
+Classifier: Intended Audience :: Developers
+Classifier: License :: OSI Approved :: MIT License
+Classifier: Operating System :: OS Independent
+Classifier: Programming Language :: Cython
+Classifier: Programming Language :: Python
+Classifier: Programming Language :: Python :: 2
+Classifier: Programming Language :: Python :: 2.7
+Classifier: Programming Language :: Python :: 3
+Classifier: Programming Language :: Python :: 3.5
+Classifier: Programming Language :: Python :: 3.6
+Classifier: Programming Language :: Python :: 3.7
+Classifier: Programming Language :: Python :: 3.8
+Classifier: Programming Language :: Python :: Implementation :: CPython
+Classifier: Programming Language :: Python :: Implementation :: PyPy
+Classifier: Topic :: Software Development :: Libraries :: Python Modules
+Classifier: Topic :: Text Processing :: Markup
diff --git a/yaml/lib/yaml/__init__.py b/yaml/lib/yaml/__init__.py
new file mode 100644
index 0000000000..211fc8665e
--- /dev/null
+++ b/yaml/lib/yaml/__init__.py
@@ -0,0 +1,431 @@
+
+from error import *
+
+from tokens import *
+from events import *
+from nodes import *
+
+from loader import *
+from dumper import *
+
+__version__ = '5.3.1'
+
+try:
+ from cyaml import *
+ __with_libyaml__ = True
+except ImportError:
+ __with_libyaml__ = False
+
+
+#------------------------------------------------------------------------------
+# Warnings control
+#------------------------------------------------------------------------------
+
+# 'Global' warnings state:
+_warnings_enabled = {
+ 'YAMLLoadWarning': True,
+}
+
+# Get or set global warnings' state
+def warnings(settings=None):
+ if settings is None:
+ return _warnings_enabled
+
+ if type(settings) is dict:
+ for key in settings:
+ if key in _warnings_enabled:
+ _warnings_enabled[key] = settings[key]
+
+# Warn when load() is called without Loader=...
+class YAMLLoadWarning(RuntimeWarning):
+ pass
+
+def load_warning(method):
+ if _warnings_enabled['YAMLLoadWarning'] is False:
+ return
+
+ import warnings
+
+ message = (
+ "calling yaml.%s() without Loader=... is deprecated, as the "
+ "default Loader is unsafe. Please read "
+ "https://msg.pyyaml.org/load for full details."
+ ) % method
+
+ warnings.warn(message, YAMLLoadWarning, stacklevel=3)
+
+#------------------------------------------------------------------------------
+def scan(stream, Loader=Loader):
+ """
+ Scan a YAML stream and produce scanning tokens.
+ """
+ loader = Loader(stream)
+ try:
+ while loader.check_token():
+ yield loader.get_token()
+ finally:
+ loader.dispose()
+
+def parse(stream, Loader=Loader):
+ """
+ Parse a YAML stream and produce parsing events.
+ """
+ loader = Loader(stream)
+ try:
+ while loader.check_event():
+ yield loader.get_event()
+ finally:
+ loader.dispose()
+
+def compose(stream, Loader=Loader):
+ """
+ Parse the first YAML document in a stream
+ and produce the corresponding representation tree.
+ """
+ loader = Loader(stream)
+ try:
+ return loader.get_single_node()
+ finally:
+ loader.dispose()
+
+def compose_all(stream, Loader=Loader):
+ """
+ Parse all YAML documents in a stream
+ and produce corresponding representation trees.
+ """
+ loader = Loader(stream)
+ try:
+ while loader.check_node():
+ yield loader.get_node()
+ finally:
+ loader.dispose()
+
+def load(stream, Loader=None):
+ """
+ Parse the first YAML document in a stream
+ and produce the corresponding Python object.
+ """
+ if Loader is None:
+ load_warning('load')
+ Loader = FullLoader
+
+ loader = Loader(stream)
+ try:
+ return loader.get_single_data()
+ finally:
+ loader.dispose()
+
+def load_all(stream, Loader=None):
+ """
+ Parse all YAML documents in a stream
+ and produce corresponding Python objects.
+ """
+ if Loader is None:
+ load_warning('load_all')
+ Loader = FullLoader
+
+ loader = Loader(stream)
+ try:
+ while loader.check_data():
+ yield loader.get_data()
+ finally:
+ loader.dispose()
+
+def full_load(stream):
+ """
+ Parse the first YAML document in a stream
+ and produce the corresponding Python object.
+
+ Resolve all tags except those known to be
+ unsafe on untrusted input.
+ """
+ return load(stream, FullLoader)
+
+def full_load_all(stream):
+ """
+ Parse all YAML documents in a stream
+ and produce corresponding Python objects.
+
+ Resolve all tags except those known to be
+ unsafe on untrusted input.
+ """
+ return load_all(stream, FullLoader)
+
+def safe_load(stream):
+ """
+ Parse the first YAML document in a stream
+ and produce the corresponding Python object.
+
+ Resolve only basic YAML tags. This is known
+ to be safe for untrusted input.
+ """
+ return load(stream, SafeLoader)
+
+def safe_load_all(stream):
+ """
+ Parse all YAML documents in a stream
+ and produce corresponding Python objects.
+
+ Resolve only basic YAML tags. This is known
+ to be safe for untrusted input.
+ """
+ return load_all(stream, SafeLoader)
+
+def unsafe_load(stream):
+ """
+ Parse the first YAML document in a stream
+ and produce the corresponding Python object.
+
+ Resolve all tags, even those known to be
+ unsafe on untrusted input.
+ """
+ return load(stream, UnsafeLoader)
+
+def unsafe_load_all(stream):
+ """
+ Parse all YAML documents in a stream
+ and produce corresponding Python objects.
+
+ Resolve all tags, even those known to be
+ unsafe on untrusted input.
+ """
+ return load_all(stream, UnsafeLoader)
+
+def emit(events, stream=None, Dumper=Dumper,
+ canonical=None, indent=None, width=None,
+ allow_unicode=None, line_break=None):
+ """
+ Emit YAML parsing events into a stream.
+ If stream is None, return the produced string instead.
+ """
+ getvalue = None
+ if stream is None:
+ from StringIO import StringIO
+ stream = StringIO()
+ getvalue = stream.getvalue
+ dumper = Dumper(stream, canonical=canonical, indent=indent, width=width,
+ allow_unicode=allow_unicode, line_break=line_break)
+ try:
+ for event in events:
+ dumper.emit(event)
+ finally:
+ dumper.dispose()
+ if getvalue:
+ return getvalue()
+
+def serialize_all(nodes, stream=None, Dumper=Dumper,
+ canonical=None, indent=None, width=None,
+ allow_unicode=None, line_break=None,
+ encoding='utf-8', explicit_start=None, explicit_end=None,
+ version=None, tags=None):
+ """
+ Serialize a sequence of representation trees into a YAML stream.
+ If stream is None, return the produced string instead.
+ """
+ getvalue = None
+ if stream is None:
+ if encoding is None:
+ from StringIO import StringIO
+ else:
+ from cStringIO import StringIO
+ stream = StringIO()
+ getvalue = stream.getvalue
+ dumper = Dumper(stream, canonical=canonical, indent=indent, width=width,
+ allow_unicode=allow_unicode, line_break=line_break,
+ encoding=encoding, version=version, tags=tags,
+ explicit_start=explicit_start, explicit_end=explicit_end)
+ try:
+ dumper.open()
+ for node in nodes:
+ dumper.serialize(node)
+ dumper.close()
+ finally:
+ dumper.dispose()
+ if getvalue:
+ return getvalue()
+
+def serialize(node, stream=None, Dumper=Dumper, **kwds):
+ """
+ Serialize a representation tree into a YAML stream.
+ If stream is None, return the produced string instead.
+ """
+ return serialize_all([node], stream, Dumper=Dumper, **kwds)
+
+def dump_all(documents, stream=None, Dumper=Dumper,
+ default_style=None, default_flow_style=False,
+ canonical=None, indent=None, width=None,
+ allow_unicode=None, line_break=None,
+ encoding='utf-8', explicit_start=None, explicit_end=None,
+ version=None, tags=None, sort_keys=True):
+ """
+ Serialize a sequence of Python objects into a YAML stream.
+ If stream is None, return the produced string instead.
+ """
+ getvalue = None
+ if stream is None:
+ if encoding is None:
+ from StringIO import StringIO
+ else:
+ from cStringIO import StringIO
+ stream = StringIO()
+ getvalue = stream.getvalue
+ dumper = Dumper(stream, default_style=default_style,
+ default_flow_style=default_flow_style,
+ canonical=canonical, indent=indent, width=width,
+ allow_unicode=allow_unicode, line_break=line_break,
+ encoding=encoding, version=version, tags=tags,
+ explicit_start=explicit_start, explicit_end=explicit_end, sort_keys=sort_keys)
+ try:
+ dumper.open()
+ for data in documents:
+ dumper.represent(data)
+ dumper.close()
+ finally:
+ dumper.dispose()
+ if getvalue:
+ return getvalue()
+
+def dump(data, stream=None, Dumper=Dumper, **kwds):
+ """
+ Serialize a Python object into a YAML stream.
+ If stream is None, return the produced string instead.
+ """
+ return dump_all([data], stream, Dumper=Dumper, **kwds)
+
+def safe_dump_all(documents, stream=None, **kwds):
+ """
+ Serialize a sequence of Python objects into a YAML stream.
+ Produce only basic YAML tags.
+ If stream is None, return the produced string instead.
+ """
+ return dump_all(documents, stream, Dumper=SafeDumper, **kwds)
+
+def safe_dump(data, stream=None, **kwds):
+ """
+ Serialize a Python object into a YAML stream.
+ Produce only basic YAML tags.
+ If stream is None, return the produced string instead.
+ """
+ return dump_all([data], stream, Dumper=SafeDumper, **kwds)
+
+def add_implicit_resolver(tag, regexp, first=None,
+ Loader=None, Dumper=Dumper):
+ """
+ Add an implicit scalar detector.
+ If an implicit scalar value matches the given regexp,
+ the corresponding tag is assigned to the scalar.
+ first is a sequence of possible initial characters or None.
+ """
+ if Loader is None:
+ loader.Loader.add_implicit_resolver(tag, regexp, first)
+ loader.FullLoader.add_implicit_resolver(tag, regexp, first)
+ loader.UnsafeLoader.add_implicit_resolver(tag, regexp, first)
+ else:
+ Loader.add_implicit_resolver(tag, regexp, first)
+ Dumper.add_implicit_resolver(tag, regexp, first)
+
+def add_path_resolver(tag, path, kind=None, Loader=None, Dumper=Dumper):
+ """
+ Add a path based resolver for the given tag.
+ A path is a list of keys that forms a path
+ to a node in the representation tree.
+ Keys can be string values, integers, or None.
+ """
+ if Loader is None:
+ loader.Loader.add_path_resolver(tag, path, kind)
+ loader.FullLoader.add_path_resolver(tag, path, kind)
+ loader.UnsafeLoader.add_path_resolver(tag, path, kind)
+ else:
+ Loader.add_path_resolver(tag, path, kind)
+ Dumper.add_path_resolver(tag, path, kind)
+
+def add_constructor(tag, constructor, Loader=None):
+ """
+ Add a constructor for the given tag.
+ Constructor is a function that accepts a Loader instance
+ and a node object and produces the corresponding Python object.
+ """
+ if Loader is None:
+ loader.Loader.add_constructor(tag, constructor)
+ loader.FullLoader.add_constructor(tag, constructor)
+ loader.UnsafeLoader.add_constructor(tag, constructor)
+ else:
+ Loader.add_constructor(tag, constructor)
+
+def add_multi_constructor(tag_prefix, multi_constructor, Loader=None):
+ """
+ Add a multi-constructor for the given tag prefix.
+ Multi-constructor is called for a node if its tag starts with tag_prefix.
+ Multi-constructor accepts a Loader instance, a tag suffix,
+ and a node object and produces the corresponding Python object.
+ """
+ if Loader is None:
+ loader.Loader.add_multi_constructor(tag_prefix, multi_constructor)
+ loader.FullLoader.add_multi_constructor(tag_prefix, multi_constructor)
+ loader.UnsafeLoader.add_multi_constructor(tag_prefix, multi_constructor)
+ else:
+ Loader.add_multi_constructor(tag_prefix, multi_constructor)
+
+def add_representer(data_type, representer, Dumper=Dumper):
+ """
+ Add a representer for the given type.
+ Representer is a function accepting a Dumper instance
+ and an instance of the given data type
+ and producing the corresponding representation node.
+ """
+ Dumper.add_representer(data_type, representer)
+
+def add_multi_representer(data_type, multi_representer, Dumper=Dumper):
+ """
+ Add a representer for the given type.
+ Multi-representer is a function accepting a Dumper instance
+ and an instance of the given data type or subtype
+ and producing the corresponding representation node.
+ """
+ Dumper.add_multi_representer(data_type, multi_representer)
+
+class YAMLObjectMetaclass(type):
+ """
+ The metaclass for YAMLObject.
+ """
+ def __init__(cls, name, bases, kwds):
+ super(YAMLObjectMetaclass, cls).__init__(name, bases, kwds)
+ if 'yaml_tag' in kwds and kwds['yaml_tag'] is not None:
+ if isinstance(cls.yaml_loader, list):
+ for loader in cls.yaml_loader:
+ loader.add_constructor(cls.yaml_tag, cls.from_yaml)
+ else:
+ cls.yaml_loader.add_constructor(cls.yaml_tag, cls.from_yaml)
+
+ cls.yaml_dumper.add_representer(cls, cls.to_yaml)
+
+class YAMLObject(object):
+ """
+ An object that can dump itself to a YAML stream
+ and load itself from a YAML stream.
+ """
+
+ __metaclass__ = YAMLObjectMetaclass
+ __slots__ = () # no direct instantiation, so allow immutable subclasses
+
+ yaml_loader = [Loader, FullLoader, UnsafeLoader]
+ yaml_dumper = Dumper
+
+ yaml_tag = None
+ yaml_flow_style = None
+
+ def from_yaml(cls, loader, node):
+ """
+ Convert a representation node to a Python object.
+ """
+ return loader.construct_yaml_object(node, cls)
+ from_yaml = classmethod(from_yaml)
+
+ def to_yaml(cls, dumper, data):
+ """
+ Convert a Python object to a representation node.
+ """
+ return dumper.represent_yaml_object(cls.yaml_tag, data, cls,
+ flow_style=cls.yaml_flow_style)
+ to_yaml = classmethod(to_yaml)
+
diff --git a/yaml/lib/yaml/composer.py b/yaml/lib/yaml/composer.py
new file mode 100644
index 0000000000..df85ef653b
--- /dev/null
+++ b/yaml/lib/yaml/composer.py
@@ -0,0 +1,139 @@
+
+__all__ = ['Composer', 'ComposerError']
+
+from error import MarkedYAMLError
+from events import *
+from nodes import *
+
+class ComposerError(MarkedYAMLError):
+ pass
+
+class Composer(object):
+
+ def __init__(self):
+ self.anchors = {}
+
+ def check_node(self):
+ # Drop the STREAM-START event.
+ if self.check_event(StreamStartEvent):
+ self.get_event()
+
+ # If there are more documents available?
+ return not self.check_event(StreamEndEvent)
+
+ def get_node(self):
+ # Get the root node of the next document.
+ if not self.check_event(StreamEndEvent):
+ return self.compose_document()
+
+ def get_single_node(self):
+ # Drop the STREAM-START event.
+ self.get_event()
+
+ # Compose a document if the stream is not empty.
+ document = None
+ if not self.check_event(StreamEndEvent):
+ document = self.compose_document()
+
+ # Ensure that the stream contains no more documents.
+ if not self.check_event(StreamEndEvent):
+ event = self.get_event()
+ raise ComposerError("expected a single document in the stream",
+ document.start_mark, "but found another document",
+ event.start_mark)
+
+ # Drop the STREAM-END event.
+ self.get_event()
+
+ return document
+
+ def compose_document(self):
+ # Drop the DOCUMENT-START event.
+ self.get_event()
+
+ # Compose the root node.
+ node = self.compose_node(None, None)
+
+ # Drop the DOCUMENT-END event.
+ self.get_event()
+
+ self.anchors = {}
+ return node
+
+ def compose_node(self, parent, index):
+ if self.check_event(AliasEvent):
+ event = self.get_event()
+ anchor = event.anchor
+ if anchor not in self.anchors:
+ raise ComposerError(None, None, "found undefined alias %r"
+ % anchor.encode('utf-8'), event.start_mark)
+ return self.anchors[anchor]
+ event = self.peek_event()
+ anchor = event.anchor
+ if anchor is not None:
+ if anchor in self.anchors:
+ raise ComposerError("found duplicate anchor %r; first occurrence"
+ % anchor.encode('utf-8'), self.anchors[anchor].start_mark,
+ "second occurrence", event.start_mark)
+ self.descend_resolver(parent, index)
+ if self.check_event(ScalarEvent):
+ node = self.compose_scalar_node(anchor)
+ elif self.check_event(SequenceStartEvent):
+ node = self.compose_sequence_node(anchor)
+ elif self.check_event(MappingStartEvent):
+ node = self.compose_mapping_node(anchor)
+ self.ascend_resolver()
+ return node
+
+ def compose_scalar_node(self, anchor):
+ event = self.get_event()
+ tag = event.tag
+ if tag is None or tag == u'!':
+ tag = self.resolve(ScalarNode, event.value, event.implicit)
+ node = ScalarNode(tag, event.value,
+ event.start_mark, event.end_mark, style=event.style)
+ if anchor is not None:
+ self.anchors[anchor] = node
+ return node
+
+ def compose_sequence_node(self, anchor):
+ start_event = self.get_event()
+ tag = start_event.tag
+ if tag is None or tag == u'!':
+ tag = self.resolve(SequenceNode, None, start_event.implicit)
+ node = SequenceNode(tag, [],
+ start_event.start_mark, None,
+ flow_style=start_event.flow_style)
+ if anchor is not None:
+ self.anchors[anchor] = node
+ index = 0
+ while not self.check_event(SequenceEndEvent):
+ node.value.append(self.compose_node(node, index))
+ index += 1
+ end_event = self.get_event()
+ node.end_mark = end_event.end_mark
+ return node
+
+ def compose_mapping_node(self, anchor):
+ start_event = self.get_event()
+ tag = start_event.tag
+ if tag is None or tag == u'!':
+ tag = self.resolve(MappingNode, None, start_event.implicit)
+ node = MappingNode(tag, [],
+ start_event.start_mark, None,
+ flow_style=start_event.flow_style)
+ if anchor is not None:
+ self.anchors[anchor] = node
+ while not self.check_event(MappingEndEvent):
+ #key_event = self.peek_event()
+ item_key = self.compose_node(node, None)
+ #if item_key in node.value:
+ # raise ComposerError("while composing a mapping", start_event.start_mark,
+ # "found duplicate key", key_event.start_mark)
+ item_value = self.compose_node(node, item_key)
+ #node.value[item_key] = item_value
+ node.value.append((item_key, item_value))
+ end_event = self.get_event()
+ node.end_mark = end_event.end_mark
+ return node
+
diff --git a/yaml/lib/yaml/constructor.py b/yaml/lib/yaml/constructor.py
new file mode 100644
index 0000000000..794681cb7f
--- /dev/null
+++ b/yaml/lib/yaml/constructor.py
@@ -0,0 +1,760 @@
+
+__all__ = [
+ 'BaseConstructor',
+ 'SafeConstructor',
+ 'FullConstructor',
+ 'UnsafeConstructor',
+ 'Constructor',
+ 'ConstructorError'
+]
+
+from error import *
+from nodes import *
+
+import datetime
+
+import binascii, re, sys, types
+
+class ConstructorError(MarkedYAMLError):
+ pass
+
+
+class timezone(datetime.tzinfo):
+ def __init__(self, offset):
+ self._offset = offset
+ seconds = abs(offset).total_seconds()
+ self._name = 'UTC%s%02d:%02d' % (
+ '-' if offset.days < 0 else '+',
+ seconds // 3600,
+ seconds % 3600 // 60
+ )
+
+ def tzname(self, dt=None):
+ return self._name
+
+ def utcoffset(self, dt=None):
+ return self._offset
+
+ def dst(self, dt=None):
+ return datetime.timedelta(0)
+
+ __repr__ = __str__ = tzname
+
+
+class BaseConstructor(object):
+
+ yaml_constructors = {}
+ yaml_multi_constructors = {}
+
+ def __init__(self):
+ self.constructed_objects = {}
+ self.recursive_objects = {}
+ self.state_generators = []
+ self.deep_construct = False
+
+ def check_data(self):
+ # If there are more documents available?
+ return self.check_node()
+
+ def check_state_key(self, key):
+ """Block special attributes/methods from being set in a newly created
+ object, to prevent user-controlled methods from being called during
+ deserialization"""
+ if self.get_state_keys_blacklist_regexp().match(key):
+ raise ConstructorError(None, None,
+ "blacklisted key '%s' in instance state found" % (key,), None)
+
+ def get_data(self):
+ # Construct and return the next document.
+ if self.check_node():
+ return self.construct_document(self.get_node())
+
+ def get_single_data(self):
+ # Ensure that the stream contains a single document and construct it.
+ node = self.get_single_node()
+ if node is not None:
+ return self.construct_document(node)
+ return None
+
+ def construct_document(self, node):
+ data = self.construct_object(node)
+ while self.state_generators:
+ state_generators = self.state_generators
+ self.state_generators = []
+ for generator in state_generators:
+ for dummy in generator:
+ pass
+ self.constructed_objects = {}
+ self.recursive_objects = {}
+ self.deep_construct = False
+ return data
+
+ def construct_object(self, node, deep=False):
+ if node in self.constructed_objects:
+ return self.constructed_objects[node]
+ if deep:
+ old_deep = self.deep_construct
+ self.deep_construct = True
+ if node in self.recursive_objects:
+ raise ConstructorError(None, None,
+ "found unconstructable recursive node", node.start_mark)
+ self.recursive_objects[node] = None
+ constructor = None
+ tag_suffix = None
+ if node.tag in self.yaml_constructors:
+ constructor = self.yaml_constructors[node.tag]
+ else:
+ for tag_prefix in self.yaml_multi_constructors:
+ if tag_prefix is not None and node.tag.startswith(tag_prefix):
+ tag_suffix = node.tag[len(tag_prefix):]
+ constructor = self.yaml_multi_constructors[tag_prefix]
+ break
+ else:
+ if None in self.yaml_multi_constructors:
+ tag_suffix = node.tag
+ constructor = self.yaml_multi_constructors[None]
+ elif None in self.yaml_constructors:
+ constructor = self.yaml_constructors[None]
+ elif isinstance(node, ScalarNode):
+ constructor = self.__class__.construct_scalar
+ elif isinstance(node, SequenceNode):
+ constructor = self.__class__.construct_sequence
+ elif isinstance(node, MappingNode):
+ constructor = self.__class__.construct_mapping
+ if tag_suffix is None:
+ data = constructor(self, node)
+ else:
+ data = constructor(self, tag_suffix, node)
+ if isinstance(data, types.GeneratorType):
+ generator = data
+ data = generator.next()
+ if self.deep_construct:
+ for dummy in generator:
+ pass
+ else:
+ self.state_generators.append(generator)
+ self.constructed_objects[node] = data
+ del self.recursive_objects[node]
+ if deep:
+ self.deep_construct = old_deep
+ return data
+
+ def construct_scalar(self, node):
+ if not isinstance(node, ScalarNode):
+ raise ConstructorError(None, None,
+ "expected a scalar node, but found %s" % node.id,
+ node.start_mark)
+ return node.value
+
+ def construct_sequence(self, node, deep=False):
+ if not isinstance(node, SequenceNode):
+ raise ConstructorError(None, None,
+ "expected a sequence node, but found %s" % node.id,
+ node.start_mark)
+ return [self.construct_object(child, deep=deep)
+ for child in node.value]
+
+ def construct_mapping(self, node, deep=False):
+ if not isinstance(node, MappingNode):
+ raise ConstructorError(None, None,
+ "expected a mapping node, but found %s" % node.id,
+ node.start_mark)
+ mapping = {}
+ for key_node, value_node in node.value:
+ key = self.construct_object(key_node, deep=deep)
+ try:
+ hash(key)
+ except TypeError, exc:
+ raise ConstructorError("while constructing a mapping", node.start_mark,
+ "found unacceptable key (%s)" % exc, key_node.start_mark)
+ value = self.construct_object(value_node, deep=deep)
+ mapping[key] = value
+ return mapping
+
+ def construct_pairs(self, node, deep=False):
+ if not isinstance(node, MappingNode):
+ raise ConstructorError(None, None,
+ "expected a mapping node, but found %s" % node.id,
+ node.start_mark)
+ pairs = []
+ for key_node, value_node in node.value:
+ key = self.construct_object(key_node, deep=deep)
+ value = self.construct_object(value_node, deep=deep)
+ pairs.append((key, value))
+ return pairs
+
+ def add_constructor(cls, tag, constructor):
+ if not 'yaml_constructors' in cls.__dict__:
+ cls.yaml_constructors = cls.yaml_constructors.copy()
+ cls.yaml_constructors[tag] = constructor
+ add_constructor = classmethod(add_constructor)
+
+ def add_multi_constructor(cls, tag_prefix, multi_constructor):
+ if not 'yaml_multi_constructors' in cls.__dict__:
+ cls.yaml_multi_constructors = cls.yaml_multi_constructors.copy()
+ cls.yaml_multi_constructors[tag_prefix] = multi_constructor
+ add_multi_constructor = classmethod(add_multi_constructor)
+
+class SafeConstructor(BaseConstructor):
+
+ def construct_scalar(self, node):
+ if isinstance(node, MappingNode):
+ for key_node, value_node in node.value:
+ if key_node.tag == u'tag:yaml.org,2002:value':
+ return self.construct_scalar(value_node)
+ return BaseConstructor.construct_scalar(self, node)
+
+ def flatten_mapping(self, node):
+ merge = []
+ index = 0
+ while index < len(node.value):
+ key_node, value_node = node.value[index]
+ if key_node.tag == u'tag:yaml.org,2002:merge':
+ del node.value[index]
+ if isinstance(value_node, MappingNode):
+ self.flatten_mapping(value_node)
+ merge.extend(value_node.value)
+ elif isinstance(value_node, SequenceNode):
+ submerge = []
+ for subnode in value_node.value:
+ if not isinstance(subnode, MappingNode):
+ raise ConstructorError("while constructing a mapping",
+ node.start_mark,
+ "expected a mapping for merging, but found %s"
+ % subnode.id, subnode.start_mark)
+ self.flatten_mapping(subnode)
+ submerge.append(subnode.value)
+ submerge.reverse()
+ for value in submerge:
+ merge.extend(value)
+ else:
+ raise ConstructorError("while constructing a mapping", node.start_mark,
+ "expected a mapping or list of mappings for merging, but found %s"
+ % value_node.id, value_node.start_mark)
+ elif key_node.tag == u'tag:yaml.org,2002:value':
+ key_node.tag = u'tag:yaml.org,2002:str'
+ index += 1
+ else:
+ index += 1
+ if merge:
+ node.value = merge + node.value
+
+ def construct_mapping(self, node, deep=False):
+ if isinstance(node, MappingNode):
+ self.flatten_mapping(node)
+ return BaseConstructor.construct_mapping(self, node, deep=deep)
+
+ def construct_yaml_null(self, node):
+ self.construct_scalar(node)
+ return None
+
+ bool_values = {
+ u'yes': True,
+ u'no': False,
+ u'true': True,
+ u'false': False,
+ u'on': True,
+ u'off': False,
+ }
+
+ def construct_yaml_bool(self, node):
+ value = self.construct_scalar(node)
+ return self.bool_values[value.lower()]
+
+ def construct_yaml_int(self, node):
+ value = str(self.construct_scalar(node))
+ value = value.replace('_', '')
+ sign = +1
+ if value[0] == '-':
+ sign = -1
+ if value[0] in '+-':
+ value = value[1:]
+ if value == '0':
+ return 0
+ elif value.startswith('0b'):
+ return sign*int(value[2:], 2)
+ elif value.startswith('0x'):
+ return sign*int(value[2:], 16)
+ elif value[0] == '0':
+ return sign*int(value, 8)
+ elif ':' in value:
+ digits = [int(part) for part in value.split(':')]
+ digits.reverse()
+ base = 1
+ value = 0
+ for digit in digits:
+ value += digit*base
+ base *= 60
+ return sign*value
+ else:
+ return sign*int(value)
+
+ inf_value = 1e300
+ while inf_value != inf_value*inf_value:
+ inf_value *= inf_value
+ nan_value = -inf_value/inf_value # Trying to make a quiet NaN (like C99).
+
+ def construct_yaml_float(self, node):
+ value = str(self.construct_scalar(node))
+ value = value.replace('_', '').lower()
+ sign = +1
+ if value[0] == '-':
+ sign = -1
+ if value[0] in '+-':
+ value = value[1:]
+ if value == '.inf':
+ return sign*self.inf_value
+ elif value == '.nan':
+ return self.nan_value
+ elif ':' in value:
+ digits = [float(part) for part in value.split(':')]
+ digits.reverse()
+ base = 1
+ value = 0.0
+ for digit in digits:
+ value += digit*base
+ base *= 60
+ return sign*value
+ else:
+ return sign*float(value)
+
+ def construct_yaml_binary(self, node):
+ value = self.construct_scalar(node)
+ try:
+ return str(value).decode('base64')
+ except (binascii.Error, UnicodeEncodeError), exc:
+ raise ConstructorError(None, None,
+ "failed to decode base64 data: %s" % exc, node.start_mark)
+
+ timestamp_regexp = re.compile(
+ ur'''^(?P<year>[0-9][0-9][0-9][0-9])
+ -(?P<month>[0-9][0-9]?)
+ -(?P<day>[0-9][0-9]?)
+ (?:(?:[Tt]|[ \t]+)
+ (?P<hour>[0-9][0-9]?)
+ :(?P<minute>[0-9][0-9])
+ :(?P<second>[0-9][0-9])
+ (?:\.(?P<fraction>[0-9]*))?
+ (?:[ \t]*(?P<tz>Z|(?P<tz_sign>[-+])(?P<tz_hour>[0-9][0-9]?)
+ (?::(?P<tz_minute>[0-9][0-9]))?))?)?$''', re.X)
+
+ def construct_yaml_timestamp(self, node):
+ value = self.construct_scalar(node)
+ match = self.timestamp_regexp.match(node.value)
+ values = match.groupdict()
+ year = int(values['year'])
+ month = int(values['month'])
+ day = int(values['day'])
+ if not values['hour']:
+ return datetime.date(year, month, day)
+ hour = int(values['hour'])
+ minute = int(values['minute'])
+ second = int(values['second'])
+ fraction = 0
+ tzinfo = None
+ if values['fraction']:
+ fraction = values['fraction'][:6]
+ while len(fraction) < 6:
+ fraction += '0'
+ fraction = int(fraction)
+ if values['tz_sign']:
+ tz_hour = int(values['tz_hour'])
+ tz_minute = int(values['tz_minute'] or 0)
+ delta = datetime.timedelta(hours=tz_hour, minutes=tz_minute)
+ if values['tz_sign'] == '-':
+ delta = -delta
+ tzinfo = timezone(delta)
+ elif values['tz']:
+ tzinfo = timezone(datetime.timedelta(0))
+ return datetime.datetime(year, month, day, hour, minute, second, fraction,
+ tzinfo=tzinfo)
+
+ def construct_yaml_omap(self, node):
+ # Note: we do not check for duplicate keys, because it's too
+ # CPU-expensive.
+ omap = []
+ yield omap
+ if not isinstance(node, SequenceNode):
+ raise ConstructorError("while constructing an ordered map", node.start_mark,
+ "expected a sequence, but found %s" % node.id, node.start_mark)
+ for subnode in node.value:
+ if not isinstance(subnode, MappingNode):
+ raise ConstructorError("while constructing an ordered map", node.start_mark,
+ "expected a mapping of length 1, but found %s" % subnode.id,
+ subnode.start_mark)
+ if len(subnode.value) != 1:
+ raise ConstructorError("while constructing an ordered map", node.start_mark,
+ "expected a single mapping item, but found %d items" % len(subnode.value),
+ subnode.start_mark)
+ key_node, value_node = subnode.value[0]
+ key = self.construct_object(key_node)
+ value = self.construct_object(value_node)
+ omap.append((key, value))
+
+ def construct_yaml_pairs(self, node):
+ # Note: the same code as `construct_yaml_omap`.
+ pairs = []
+ yield pairs
+ if not isinstance(node, SequenceNode):
+ raise ConstructorError("while constructing pairs", node.start_mark,
+ "expected a sequence, but found %s" % node.id, node.start_mark)
+ for subnode in node.value:
+ if not isinstance(subnode, MappingNode):
+ raise ConstructorError("while constructing pairs", node.start_mark,
+ "expected a mapping of length 1, but found %s" % subnode.id,
+ subnode.start_mark)
+ if len(subnode.value) != 1:
+ raise ConstructorError("while constructing pairs", node.start_mark,
+ "expected a single mapping item, but found %d items" % len(subnode.value),
+ subnode.start_mark)
+ key_node, value_node = subnode.value[0]
+ key = self.construct_object(key_node)
+ value = self.construct_object(value_node)
+ pairs.append((key, value))
+
+ def construct_yaml_set(self, node):
+ data = set()
+ yield data
+ value = self.construct_mapping(node)
+ data.update(value)
+
+ def construct_yaml_str(self, node):
+ value = self.construct_scalar(node)
+ try:
+ return value.encode('ascii')
+ except UnicodeEncodeError:
+ return value
+
+ def construct_yaml_seq(self, node):
+ data = []
+ yield data
+ data.extend(self.construct_sequence(node))
+
+ def construct_yaml_map(self, node):
+ data = {}
+ yield data
+ value = self.construct_mapping(node)
+ data.update(value)
+
+ def construct_yaml_object(self, node, cls):
+ data = cls.__new__(cls)
+ yield data
+ if hasattr(data, '__setstate__'):
+ state = self.construct_mapping(node, deep=True)
+ data.__setstate__(state)
+ else:
+ state = self.construct_mapping(node)
+ data.__dict__.update(state)
+
+ def construct_undefined(self, node):
+ raise ConstructorError(None, None,
+ "could not determine a constructor for the tag %r" % node.tag.encode('utf-8'),
+ node.start_mark)
+
+SafeConstructor.add_constructor(
+ u'tag:yaml.org,2002:null',
+ SafeConstructor.construct_yaml_null)
+
+SafeConstructor.add_constructor(
+ u'tag:yaml.org,2002:bool',
+ SafeConstructor.construct_yaml_bool)
+
+SafeConstructor.add_constructor(
+ u'tag:yaml.org,2002:int',
+ SafeConstructor.construct_yaml_int)
+
+SafeConstructor.add_constructor(
+ u'tag:yaml.org,2002:float',
+ SafeConstructor.construct_yaml_float)
+
+SafeConstructor.add_constructor(
+ u'tag:yaml.org,2002:binary',
+ SafeConstructor.construct_yaml_binary)
+
+SafeConstructor.add_constructor(
+ u'tag:yaml.org,2002:timestamp',
+ SafeConstructor.construct_yaml_timestamp)
+
+SafeConstructor.add_constructor(
+ u'tag:yaml.org,2002:omap',
+ SafeConstructor.construct_yaml_omap)
+
+SafeConstructor.add_constructor(
+ u'tag:yaml.org,2002:pairs',
+ SafeConstructor.construct_yaml_pairs)
+
+SafeConstructor.add_constructor(
+ u'tag:yaml.org,2002:set',
+ SafeConstructor.construct_yaml_set)
+
+SafeConstructor.add_constructor(
+ u'tag:yaml.org,2002:str',
+ SafeConstructor.construct_yaml_str)
+
+SafeConstructor.add_constructor(
+ u'tag:yaml.org,2002:seq',
+ SafeConstructor.construct_yaml_seq)
+
+SafeConstructor.add_constructor(
+ u'tag:yaml.org,2002:map',
+ SafeConstructor.construct_yaml_map)
+
+SafeConstructor.add_constructor(None,
+ SafeConstructor.construct_undefined)
+
+class FullConstructor(SafeConstructor):
+ # 'extend' is blacklisted because it is used by
+ # construct_python_object_apply to add `listitems` to a newly generate
+ # python instance
+ def get_state_keys_blacklist(self):
+ return ['^extend$', '^__.*__$']
+
+ def get_state_keys_blacklist_regexp(self):
+ if not hasattr(self, 'state_keys_blacklist_regexp'):
+ self.state_keys_blacklist_regexp = re.compile('(' + '|'.join(self.get_state_keys_blacklist()) + ')')
+ return self.state_keys_blacklist_regexp
+
+ def construct_python_str(self, node):
+ return self.construct_scalar(node).encode('utf-8')
+
+ def construct_python_unicode(self, node):
+ return self.construct_scalar(node)
+
+ def construct_python_long(self, node):
+ return long(self.construct_yaml_int(node))
+
+ def construct_python_complex(self, node):
+ return complex(self.construct_scalar(node))
+
+ def construct_python_tuple(self, node):
+ return tuple(self.construct_sequence(node))
+
+ def find_python_module(self, name, mark, unsafe=False):
+ if not name:
+ raise ConstructorError("while constructing a Python module", mark,
+ "expected non-empty name appended to the tag", mark)
+ if unsafe:
+ try:
+ __import__(name)
+ except ImportError, exc:
+ raise ConstructorError("while constructing a Python module", mark,
+ "cannot find module %r (%s)" % (name.encode('utf-8'), exc), mark)
+ if name not in sys.modules:
+ raise ConstructorError("while constructing a Python module", mark,
+ "module %r is not imported" % name.encode('utf-8'), mark)
+ return sys.modules[name]
+
+ def find_python_name(self, name, mark, unsafe=False):
+ if not name:
+ raise ConstructorError("while constructing a Python object", mark,
+ "expected non-empty name appended to the tag", mark)
+ if u'.' in name:
+ module_name, object_name = name.rsplit('.', 1)
+ else:
+ module_name = '__builtin__'
+ object_name = name
+ if unsafe:
+ try:
+ __import__(module_name)
+ except ImportError, exc:
+ raise ConstructorError("while constructing a Python object", mark,
+ "cannot find module %r (%s)" % (module_name.encode('utf-8'), exc), mark)
+ if module_name not in sys.modules:
+ raise ConstructorError("while constructing a Python object", mark,
+ "module %r is not imported" % module_name.encode('utf-8'), mark)
+ module = sys.modules[module_name]
+ if not hasattr(module, object_name):
+ raise ConstructorError("while constructing a Python object", mark,
+ "cannot find %r in the module %r" % (object_name.encode('utf-8'),
+ module.__name__), mark)
+ return getattr(module, object_name)
+
+ def construct_python_name(self, suffix, node):
+ value = self.construct_scalar(node)
+ if value:
+ raise ConstructorError("while constructing a Python name", node.start_mark,
+ "expected the empty value, but found %r" % value.encode('utf-8'),
+ node.start_mark)
+ return self.find_python_name(suffix, node.start_mark)
+
+ def construct_python_module(self, suffix, node):
+ value = self.construct_scalar(node)
+ if value:
+ raise ConstructorError("while constructing a Python module", node.start_mark,
+ "expected the empty value, but found %r" % value.encode('utf-8'),
+ node.start_mark)
+ return self.find_python_module(suffix, node.start_mark)
+
+ class classobj: pass
+
+ def make_python_instance(self, suffix, node,
+ args=None, kwds=None, newobj=False, unsafe=False):
+ if not args:
+ args = []
+ if not kwds:
+ kwds = {}
+ cls = self.find_python_name(suffix, node.start_mark)
+ if not (unsafe or isinstance(cls, type) or isinstance(cls, type(self.classobj))):
+ raise ConstructorError("while constructing a Python instance", node.start_mark,
+ "expected a class, but found %r" % type(cls),
+ node.start_mark)
+ if newobj and isinstance(cls, type(self.classobj)) \
+ and not args and not kwds:
+ instance = self.classobj()
+ instance.__class__ = cls
+ return instance
+ elif newobj and isinstance(cls, type):
+ return cls.__new__(cls, *args, **kwds)
+ else:
+ return cls(*args, **kwds)
+
+ def set_python_instance_state(self, instance, state, unsafe=False):
+ if hasattr(instance, '__setstate__'):
+ instance.__setstate__(state)
+ else:
+ slotstate = {}
+ if isinstance(state, tuple) and len(state) == 2:
+ state, slotstate = state
+ if hasattr(instance, '__dict__'):
+ if not unsafe and state:
+ for key in state.keys():
+ self.check_state_key(key)
+ instance.__dict__.update(state)
+ elif state:
+ slotstate.update(state)
+ for key, value in slotstate.items():
+ if not unsafe:
+ self.check_state_key(key)
+ setattr(instance, key, value)
+
+ def construct_python_object(self, suffix, node):
+ # Format:
+ # !!python/object:module.name { ... state ... }
+ instance = self.make_python_instance(suffix, node, newobj=True)
+ yield instance
+ deep = hasattr(instance, '__setstate__')
+ state = self.construct_mapping(node, deep=deep)
+ self.set_python_instance_state(instance, state)
+
+ def construct_python_object_apply(self, suffix, node, newobj=False):
+ # Format:
+ # !!python/object/apply # (or !!python/object/new)
+ # args: [ ... arguments ... ]
+ # kwds: { ... keywords ... }
+ # state: ... state ...
+ # listitems: [ ... listitems ... ]
+ # dictitems: { ... dictitems ... }
+ # or short format:
+ # !!python/object/apply [ ... arguments ... ]
+ # The difference between !!python/object/apply and !!python/object/new
+ # is how an object is created, check make_python_instance for details.
+ if isinstance(node, SequenceNode):
+ args = self.construct_sequence(node, deep=True)
+ kwds = {}
+ state = {}
+ listitems = []
+ dictitems = {}
+ else:
+ value = self.construct_mapping(node, deep=True)
+ args = value.get('args', [])
+ kwds = value.get('kwds', {})
+ state = value.get('state', {})
+ listitems = value.get('listitems', [])
+ dictitems = value.get('dictitems', {})
+ instance = self.make_python_instance(suffix, node, args, kwds, newobj)
+ if state:
+ self.set_python_instance_state(instance, state)
+ if listitems:
+ instance.extend(listitems)
+ if dictitems:
+ for key in dictitems:
+ instance[key] = dictitems[key]
+ return instance
+
+ def construct_python_object_new(self, suffix, node):
+ return self.construct_python_object_apply(suffix, node, newobj=True)
+
+FullConstructor.add_constructor(
+ u'tag:yaml.org,2002:python/none',
+ FullConstructor.construct_yaml_null)
+
+FullConstructor.add_constructor(
+ u'tag:yaml.org,2002:python/bool',
+ FullConstructor.construct_yaml_bool)
+
+FullConstructor.add_constructor(
+ u'tag:yaml.org,2002:python/str',
+ FullConstructor.construct_python_str)
+
+FullConstructor.add_constructor(
+ u'tag:yaml.org,2002:python/unicode',
+ FullConstructor.construct_python_unicode)
+
+FullConstructor.add_constructor(
+ u'tag:yaml.org,2002:python/int',
+ FullConstructor.construct_yaml_int)
+
+FullConstructor.add_constructor(
+ u'tag:yaml.org,2002:python/long',
+ FullConstructor.construct_python_long)
+
+FullConstructor.add_constructor(
+ u'tag:yaml.org,2002:python/float',
+ FullConstructor.construct_yaml_float)
+
+FullConstructor.add_constructor(
+ u'tag:yaml.org,2002:python/complex',
+ FullConstructor.construct_python_complex)
+
+FullConstructor.add_constructor(
+ u'tag:yaml.org,2002:python/list',
+ FullConstructor.construct_yaml_seq)
+
+FullConstructor.add_constructor(
+ u'tag:yaml.org,2002:python/tuple',
+ FullConstructor.construct_python_tuple)
+
+FullConstructor.add_constructor(
+ u'tag:yaml.org,2002:python/dict',
+ FullConstructor.construct_yaml_map)
+
+FullConstructor.add_multi_constructor(
+ u'tag:yaml.org,2002:python/name:',
+ FullConstructor.construct_python_name)
+
+FullConstructor.add_multi_constructor(
+ u'tag:yaml.org,2002:python/module:',
+ FullConstructor.construct_python_module)
+
+FullConstructor.add_multi_constructor(
+ u'tag:yaml.org,2002:python/object:',
+ FullConstructor.construct_python_object)
+
+FullConstructor.add_multi_constructor(
+ u'tag:yaml.org,2002:python/object/new:',
+ FullConstructor.construct_python_object_new)
+
+class UnsafeConstructor(FullConstructor):
+
+ def find_python_module(self, name, mark):
+ return super(UnsafeConstructor, self).find_python_module(name, mark, unsafe=True)
+
+ def find_python_name(self, name, mark):
+ return super(UnsafeConstructor, self).find_python_name(name, mark, unsafe=True)
+
+ def make_python_instance(self, suffix, node, args=None, kwds=None, newobj=False):
+ return super(UnsafeConstructor, self).make_python_instance(
+ suffix, node, args, kwds, newobj, unsafe=True)
+
+ def set_python_instance_state(self, instance, state):
+ return super(UnsafeConstructor, self).set_python_instance_state(
+ instance, state, unsafe=True)
+
+UnsafeConstructor.add_multi_constructor(
+ u'tag:yaml.org,2002:python/object/apply:',
+ UnsafeConstructor.construct_python_object_apply)
+
+# Constructor is same as UnsafeConstructor. Need to leave this in place in case
+# people have extended it directly.
+class Constructor(UnsafeConstructor):
+ pass
diff --git a/yaml/lib/yaml/cyaml.py b/yaml/lib/yaml/cyaml.py
new file mode 100644
index 0000000000..ebb8959352
--- /dev/null
+++ b/yaml/lib/yaml/cyaml.py
@@ -0,0 +1,101 @@
+
+__all__ = [
+ 'CBaseLoader', 'CSafeLoader', 'CFullLoader', 'CUnsafeLoader', 'CLoader',
+ 'CBaseDumper', 'CSafeDumper', 'CDumper'
+]
+
+from _yaml import CParser, CEmitter
+
+from constructor import *
+
+from serializer import *
+from representer import *
+
+from resolver import *
+
+class CBaseLoader(CParser, BaseConstructor, BaseResolver):
+
+ def __init__(self, stream):
+ CParser.__init__(self, stream)
+ BaseConstructor.__init__(self)
+ BaseResolver.__init__(self)
+
+class CSafeLoader(CParser, SafeConstructor, Resolver):
+
+ def __init__(self, stream):
+ CParser.__init__(self, stream)
+ SafeConstructor.__init__(self)
+ Resolver.__init__(self)
+
+class CFullLoader(CParser, FullConstructor, Resolver):
+
+ def __init__(self, stream):
+ CParser.__init__(self, stream)
+ FullConstructor.__init__(self)
+ Resolver.__init__(self)
+
+class CUnsafeLoader(CParser, UnsafeConstructor, Resolver):
+
+ def __init__(self, stream):
+ CParser.__init__(self, stream)
+ UnsafeConstructor.__init__(self)
+ Resolver.__init__(self)
+
+class CLoader(CParser, Constructor, Resolver):
+
+ def __init__(self, stream):
+ CParser.__init__(self, stream)
+ Constructor.__init__(self)
+ Resolver.__init__(self)
+
+class CBaseDumper(CEmitter, BaseRepresenter, BaseResolver):
+
+ def __init__(self, stream,
+ default_style=None, default_flow_style=False,
+ canonical=None, indent=None, width=None,
+ allow_unicode=None, line_break=None,
+ encoding=None, explicit_start=None, explicit_end=None,
+ version=None, tags=None, sort_keys=True):
+ CEmitter.__init__(self, stream, canonical=canonical,
+ indent=indent, width=width, encoding=encoding,
+ allow_unicode=allow_unicode, line_break=line_break,
+ explicit_start=explicit_start, explicit_end=explicit_end,
+ version=version, tags=tags)
+ Representer.__init__(self, default_style=default_style,
+ default_flow_style=default_flow_style, sort_keys=sort_keys)
+ Resolver.__init__(self)
+
+class CSafeDumper(CEmitter, SafeRepresenter, Resolver):
+
+ def __init__(self, stream,
+ default_style=None, default_flow_style=False,
+ canonical=None, indent=None, width=None,
+ allow_unicode=None, line_break=None,
+ encoding=None, explicit_start=None, explicit_end=None,
+ version=None, tags=None, sort_keys=True):
+ CEmitter.__init__(self, stream, canonical=canonical,
+ indent=indent, width=width, encoding=encoding,
+ allow_unicode=allow_unicode, line_break=line_break,
+ explicit_start=explicit_start, explicit_end=explicit_end,
+ version=version, tags=tags)
+ SafeRepresenter.__init__(self, default_style=default_style,
+ default_flow_style=default_flow_style, sort_keys=sort_keys)
+ Resolver.__init__(self)
+
+class CDumper(CEmitter, Serializer, Representer, Resolver):
+
+ def __init__(self, stream,
+ default_style=None, default_flow_style=False,
+ canonical=None, indent=None, width=None,
+ allow_unicode=None, line_break=None,
+ encoding=None, explicit_start=None, explicit_end=None,
+ version=None, tags=None, sort_keys=True):
+ CEmitter.__init__(self, stream, canonical=canonical,
+ indent=indent, width=width, encoding=encoding,
+ allow_unicode=allow_unicode, line_break=line_break,
+ explicit_start=explicit_start, explicit_end=explicit_end,
+ version=version, tags=tags)
+ Representer.__init__(self, default_style=default_style,
+ default_flow_style=default_flow_style, sort_keys=sort_keys)
+ Resolver.__init__(self)
+
diff --git a/yaml/lib/yaml/dumper.py b/yaml/lib/yaml/dumper.py
new file mode 100644
index 0000000000..f9cd49fda5
--- /dev/null
+++ b/yaml/lib/yaml/dumper.py
@@ -0,0 +1,62 @@
+
+__all__ = ['BaseDumper', 'SafeDumper', 'Dumper']
+
+from emitter import *
+from serializer import *
+from representer import *
+from resolver import *
+
+class BaseDumper(Emitter, Serializer, BaseRepresenter, BaseResolver):
+
+ def __init__(self, stream,
+ default_style=None, default_flow_style=False,
+ canonical=None, indent=None, width=None,
+ allow_unicode=None, line_break=None,
+ encoding=None, explicit_start=None, explicit_end=None,
+ version=None, tags=None, sort_keys=True):
+ Emitter.__init__(self, stream, canonical=canonical,
+ indent=indent, width=width,
+ allow_unicode=allow_unicode, line_break=line_break)
+ Serializer.__init__(self, encoding=encoding,
+ explicit_start=explicit_start, explicit_end=explicit_end,
+ version=version, tags=tags)
+ Representer.__init__(self, default_style=default_style,
+ default_flow_style=default_flow_style, sort_keys=sort_keys)
+ Resolver.__init__(self)
+
+class SafeDumper(Emitter, Serializer, SafeRepresenter, Resolver):
+
+ def __init__(self, stream,
+ default_style=None, default_flow_style=False,
+ canonical=None, indent=None, width=None,
+ allow_unicode=None, line_break=None,
+ encoding=None, explicit_start=None, explicit_end=None,
+ version=None, tags=None, sort_keys=True):
+ Emitter.__init__(self, stream, canonical=canonical,
+ indent=indent, width=width,
+ allow_unicode=allow_unicode, line_break=line_break)
+ Serializer.__init__(self, encoding=encoding,
+ explicit_start=explicit_start, explicit_end=explicit_end,
+ version=version, tags=tags)
+ SafeRepresenter.__init__(self, default_style=default_style,
+ default_flow_style=default_flow_style, sort_keys=sort_keys)
+ Resolver.__init__(self)
+
+class Dumper(Emitter, Serializer, Representer, Resolver):
+
+ def __init__(self, stream,
+ default_style=None, default_flow_style=False,
+ canonical=None, indent=None, width=None,
+ allow_unicode=None, line_break=None,
+ encoding=None, explicit_start=None, explicit_end=None,
+ version=None, tags=None, sort_keys=True):
+ Emitter.__init__(self, stream, canonical=canonical,
+ indent=indent, width=width,
+ allow_unicode=allow_unicode, line_break=line_break)
+ Serializer.__init__(self, encoding=encoding,
+ explicit_start=explicit_start, explicit_end=explicit_end,
+ version=version, tags=tags)
+ Representer.__init__(self, default_style=default_style,
+ default_flow_style=default_flow_style, sort_keys=sort_keys)
+ Resolver.__init__(self)
+
diff --git a/yaml/lib/yaml/emitter.py b/yaml/lib/yaml/emitter.py
new file mode 100644
index 0000000000..23c25ca80a
--- /dev/null
+++ b/yaml/lib/yaml/emitter.py
@@ -0,0 +1,1144 @@
+
+# Emitter expects events obeying the following grammar:
+# stream ::= STREAM-START document* STREAM-END
+# document ::= DOCUMENT-START node DOCUMENT-END
+# node ::= SCALAR | sequence | mapping
+# sequence ::= SEQUENCE-START node* SEQUENCE-END
+# mapping ::= MAPPING-START (node node)* MAPPING-END
+
+__all__ = ['Emitter', 'EmitterError']
+
+import sys
+
+from error import YAMLError
+from events import *
+
+has_ucs4 = sys.maxunicode > 0xffff
+
+class EmitterError(YAMLError):
+ pass
+
+class ScalarAnalysis(object):
+ def __init__(self, scalar, empty, multiline,
+ allow_flow_plain, allow_block_plain,
+ allow_single_quoted, allow_double_quoted,
+ allow_block):
+ self.scalar = scalar
+ self.empty = empty
+ self.multiline = multiline
+ self.allow_flow_plain = allow_flow_plain
+ self.allow_block_plain = allow_block_plain
+ self.allow_single_quoted = allow_single_quoted
+ self.allow_double_quoted = allow_double_quoted
+ self.allow_block = allow_block
+
+class Emitter(object):
+
+ DEFAULT_TAG_PREFIXES = {
+ u'!' : u'!',
+ u'tag:yaml.org,2002:' : u'!!',
+ }
+
+ def __init__(self, stream, canonical=None, indent=None, width=None,
+ allow_unicode=None, line_break=None):
+
+ # The stream should have the methods `write` and possibly `flush`.
+ self.stream = stream
+
+ # Encoding can be overridden by STREAM-START.
+ self.encoding = None
+
+ # Emitter is a state machine with a stack of states to handle nested
+ # structures.
+ self.states = []
+ self.state = self.expect_stream_start
+
+ # Current event and the event queue.
+ self.events = []
+ self.event = None
+
+ # The current indentation level and the stack of previous indents.
+ self.indents = []
+ self.indent = None
+
+ # Flow level.
+ self.flow_level = 0
+
+ # Contexts.
+ self.root_context = False
+ self.sequence_context = False
+ self.mapping_context = False
+ self.simple_key_context = False
+
+ # Characteristics of the last emitted character:
+ # - current position.
+ # - is it a whitespace?
+ # - is it an indention character
+ # (indentation space, '-', '?', or ':')?
+ self.line = 0
+ self.column = 0
+ self.whitespace = True
+ self.indention = True
+
+ # Whether the document requires an explicit document indicator
+ self.open_ended = False
+
+ # Formatting details.
+ self.canonical = canonical
+ self.allow_unicode = allow_unicode
+ self.best_indent = 2
+ if indent and 1 < indent < 10:
+ self.best_indent = indent
+ self.best_width = 80
+ if width and width > self.best_indent*2:
+ self.best_width = width
+ self.best_line_break = u'\n'
+ if line_break in [u'\r', u'\n', u'\r\n']:
+ self.best_line_break = line_break
+
+ # Tag prefixes.
+ self.tag_prefixes = None
+
+ # Prepared anchor and tag.
+ self.prepared_anchor = None
+ self.prepared_tag = None
+
+ # Scalar analysis and style.
+ self.analysis = None
+ self.style = None
+
+ def dispose(self):
+ # Reset the state attributes (to clear self-references)
+ self.states = []
+ self.state = None
+
+ def emit(self, event):
+ self.events.append(event)
+ while not self.need_more_events():
+ self.event = self.events.pop(0)
+ self.state()
+ self.event = None
+
+ # In some cases, we wait for a few next events before emitting.
+
+ def need_more_events(self):
+ if not self.events:
+ return True
+ event = self.events[0]
+ if isinstance(event, DocumentStartEvent):
+ return self.need_events(1)
+ elif isinstance(event, SequenceStartEvent):
+ return self.need_events(2)
+ elif isinstance(event, MappingStartEvent):
+ return self.need_events(3)
+ else:
+ return False
+
+ def need_events(self, count):
+ level = 0
+ for event in self.events[1:]:
+ if isinstance(event, (DocumentStartEvent, CollectionStartEvent)):
+ level += 1
+ elif isinstance(event, (DocumentEndEvent, CollectionEndEvent)):
+ level -= 1
+ elif isinstance(event, StreamEndEvent):
+ level = -1
+ if level < 0:
+ return False
+ return (len(self.events) < count+1)
+
+ def increase_indent(self, flow=False, indentless=False):
+ self.indents.append(self.indent)
+ if self.indent is None:
+ if flow:
+ self.indent = self.best_indent
+ else:
+ self.indent = 0
+ elif not indentless:
+ self.indent += self.best_indent
+
+ # States.
+
+ # Stream handlers.
+
+ def expect_stream_start(self):
+ if isinstance(self.event, StreamStartEvent):
+ if self.event.encoding and not getattr(self.stream, 'encoding', None):
+ self.encoding = self.event.encoding
+ self.write_stream_start()
+ self.state = self.expect_first_document_start
+ else:
+ raise EmitterError("expected StreamStartEvent, but got %s"
+ % self.event)
+
+ def expect_nothing(self):
+ raise EmitterError("expected nothing, but got %s" % self.event)
+
+ # Document handlers.
+
+ def expect_first_document_start(self):
+ return self.expect_document_start(first=True)
+
+ def expect_document_start(self, first=False):
+ if isinstance(self.event, DocumentStartEvent):
+ if (self.event.version or self.event.tags) and self.open_ended:
+ self.write_indicator(u'...', True)
+ self.write_indent()
+ if self.event.version:
+ version_text = self.prepare_version(self.event.version)
+ self.write_version_directive(version_text)
+ self.tag_prefixes = self.DEFAULT_TAG_PREFIXES.copy()
+ if self.event.tags:
+ handles = self.event.tags.keys()
+ handles.sort()
+ for handle in handles:
+ prefix = self.event.tags[handle]
+ self.tag_prefixes[prefix] = handle
+ handle_text = self.prepare_tag_handle(handle)
+ prefix_text = self.prepare_tag_prefix(prefix)
+ self.write_tag_directive(handle_text, prefix_text)
+ implicit = (first and not self.event.explicit and not self.canonical
+ and not self.event.version and not self.event.tags
+ and not self.check_empty_document())
+ if not implicit:
+ self.write_indent()
+ self.write_indicator(u'---', True)
+ if self.canonical:
+ self.write_indent()
+ self.state = self.expect_document_root
+ elif isinstance(self.event, StreamEndEvent):
+ if self.open_ended:
+ self.write_indicator(u'...', True)
+ self.write_indent()
+ self.write_stream_end()
+ self.state = self.expect_nothing
+ else:
+ raise EmitterError("expected DocumentStartEvent, but got %s"
+ % self.event)
+
+ def expect_document_end(self):
+ if isinstance(self.event, DocumentEndEvent):
+ self.write_indent()
+ if self.event.explicit:
+ self.write_indicator(u'...', True)
+ self.write_indent()
+ self.flush_stream()
+ self.state = self.expect_document_start
+ else:
+ raise EmitterError("expected DocumentEndEvent, but got %s"
+ % self.event)
+
+ def expect_document_root(self):
+ self.states.append(self.expect_document_end)
+ self.expect_node(root=True)
+
+ # Node handlers.
+
+ def expect_node(self, root=False, sequence=False, mapping=False,
+ simple_key=False):
+ self.root_context = root
+ self.sequence_context = sequence
+ self.mapping_context = mapping
+ self.simple_key_context = simple_key
+ if isinstance(self.event, AliasEvent):
+ self.expect_alias()
+ elif isinstance(self.event, (ScalarEvent, CollectionStartEvent)):
+ self.process_anchor(u'&')
+ self.process_tag()
+ if isinstance(self.event, ScalarEvent):
+ self.expect_scalar()
+ elif isinstance(self.event, SequenceStartEvent):
+ if self.flow_level or self.canonical or self.event.flow_style \
+ or self.check_empty_sequence():
+ self.expect_flow_sequence()
+ else:
+ self.expect_block_sequence()
+ elif isinstance(self.event, MappingStartEvent):
+ if self.flow_level or self.canonical or self.event.flow_style \
+ or self.check_empty_mapping():
+ self.expect_flow_mapping()
+ else:
+ self.expect_block_mapping()
+ else:
+ raise EmitterError("expected NodeEvent, but got %s" % self.event)
+
+ def expect_alias(self):
+ if self.event.anchor is None:
+ raise EmitterError("anchor is not specified for alias")
+ self.process_anchor(u'*')
+ self.state = self.states.pop()
+
+ def expect_scalar(self):
+ self.increase_indent(flow=True)
+ self.process_scalar()
+ self.indent = self.indents.pop()
+ self.state = self.states.pop()
+
+ # Flow sequence handlers.
+
+ def expect_flow_sequence(self):
+ self.write_indicator(u'[', True, whitespace=True)
+ self.flow_level += 1
+ self.increase_indent(flow=True)
+ self.state = self.expect_first_flow_sequence_item
+
+ def expect_first_flow_sequence_item(self):
+ if isinstance(self.event, SequenceEndEvent):
+ self.indent = self.indents.pop()
+ self.flow_level -= 1
+ self.write_indicator(u']', False)
+ self.state = self.states.pop()
+ else:
+ if self.canonical or self.column > self.best_width:
+ self.write_indent()
+ self.states.append(self.expect_flow_sequence_item)
+ self.expect_node(sequence=True)
+
+ def expect_flow_sequence_item(self):
+ if isinstance(self.event, SequenceEndEvent):
+ self.indent = self.indents.pop()
+ self.flow_level -= 1
+ if self.canonical:
+ self.write_indicator(u',', False)
+ self.write_indent()
+ self.write_indicator(u']', False)
+ self.state = self.states.pop()
+ else:
+ self.write_indicator(u',', False)
+ if self.canonical or self.column > self.best_width:
+ self.write_indent()
+ self.states.append(self.expect_flow_sequence_item)
+ self.expect_node(sequence=True)
+
+ # Flow mapping handlers.
+
+ def expect_flow_mapping(self):
+ self.write_indicator(u'{', True, whitespace=True)
+ self.flow_level += 1
+ self.increase_indent(flow=True)
+ self.state = self.expect_first_flow_mapping_key
+
+ def expect_first_flow_mapping_key(self):
+ if isinstance(self.event, MappingEndEvent):
+ self.indent = self.indents.pop()
+ self.flow_level -= 1
+ self.write_indicator(u'}', False)
+ self.state = self.states.pop()
+ else:
+ if self.canonical or self.column > self.best_width:
+ self.write_indent()
+ if not self.canonical and self.check_simple_key():
+ self.states.append(self.expect_flow_mapping_simple_value)
+ self.expect_node(mapping=True, simple_key=True)
+ else:
+ self.write_indicator(u'?', True)
+ self.states.append(self.expect_flow_mapping_value)
+ self.expect_node(mapping=True)
+
+ def expect_flow_mapping_key(self):
+ if isinstance(self.event, MappingEndEvent):
+ self.indent = self.indents.pop()
+ self.flow_level -= 1
+ if self.canonical:
+ self.write_indicator(u',', False)
+ self.write_indent()
+ self.write_indicator(u'}', False)
+ self.state = self.states.pop()
+ else:
+ self.write_indicator(u',', False)
+ if self.canonical or self.column > self.best_width:
+ self.write_indent()
+ if not self.canonical and self.check_simple_key():
+ self.states.append(self.expect_flow_mapping_simple_value)
+ self.expect_node(mapping=True, simple_key=True)
+ else:
+ self.write_indicator(u'?', True)
+ self.states.append(self.expect_flow_mapping_value)
+ self.expect_node(mapping=True)
+
+ def expect_flow_mapping_simple_value(self):
+ self.write_indicator(u':', False)
+ self.states.append(self.expect_flow_mapping_key)
+ self.expect_node(mapping=True)
+
+ def expect_flow_mapping_value(self):
+ if self.canonical or self.column > self.best_width:
+ self.write_indent()
+ self.write_indicator(u':', True)
+ self.states.append(self.expect_flow_mapping_key)
+ self.expect_node(mapping=True)
+
+ # Block sequence handlers.
+
+ def expect_block_sequence(self):
+ indentless = (self.mapping_context and not self.indention)
+ self.increase_indent(flow=False, indentless=indentless)
+ self.state = self.expect_first_block_sequence_item
+
+ def expect_first_block_sequence_item(self):
+ return self.expect_block_sequence_item(first=True)
+
+ def expect_block_sequence_item(self, first=False):
+ if not first and isinstance(self.event, SequenceEndEvent):
+ self.indent = self.indents.pop()
+ self.state = self.states.pop()
+ else:
+ self.write_indent()
+ self.write_indicator(u'-', True, indention=True)
+ self.states.append(self.expect_block_sequence_item)
+ self.expect_node(sequence=True)
+
+ # Block mapping handlers.
+
+ def expect_block_mapping(self):
+ self.increase_indent(flow=False)
+ self.state = self.expect_first_block_mapping_key
+
+ def expect_first_block_mapping_key(self):
+ return self.expect_block_mapping_key(first=True)
+
+ def expect_block_mapping_key(self, first=False):
+ if not first and isinstance(self.event, MappingEndEvent):
+ self.indent = self.indents.pop()
+ self.state = self.states.pop()
+ else:
+ self.write_indent()
+ if self.check_simple_key():
+ self.states.append(self.expect_block_mapping_simple_value)
+ self.expect_node(mapping=True, simple_key=True)
+ else:
+ self.write_indicator(u'?', True, indention=True)
+ self.states.append(self.expect_block_mapping_value)
+ self.expect_node(mapping=True)
+
+ def expect_block_mapping_simple_value(self):
+ self.write_indicator(u':', False)
+ self.states.append(self.expect_block_mapping_key)
+ self.expect_node(mapping=True)
+
+ def expect_block_mapping_value(self):
+ self.write_indent()
+ self.write_indicator(u':', True, indention=True)
+ self.states.append(self.expect_block_mapping_key)
+ self.expect_node(mapping=True)
+
+ # Checkers.
+
+ def check_empty_sequence(self):
+ return (isinstance(self.event, SequenceStartEvent) and self.events
+ and isinstance(self.events[0], SequenceEndEvent))
+
+ def check_empty_mapping(self):
+ return (isinstance(self.event, MappingStartEvent) and self.events
+ and isinstance(self.events[0], MappingEndEvent))
+
+ def check_empty_document(self):
+ if not isinstance(self.event, DocumentStartEvent) or not self.events:
+ return False
+ event = self.events[0]
+ return (isinstance(event, ScalarEvent) and event.anchor is None
+ and event.tag is None and event.implicit and event.value == u'')
+
+ def check_simple_key(self):
+ length = 0
+ if isinstance(self.event, NodeEvent) and self.event.anchor is not None:
+ if self.prepared_anchor is None:
+ self.prepared_anchor = self.prepare_anchor(self.event.anchor)
+ length += len(self.prepared_anchor)
+ if isinstance(self.event, (ScalarEvent, CollectionStartEvent)) \
+ and self.event.tag is not None:
+ if self.prepared_tag is None:
+ self.prepared_tag = self.prepare_tag(self.event.tag)
+ length += len(self.prepared_tag)
+ if isinstance(self.event, ScalarEvent):
+ if self.analysis is None:
+ self.analysis = self.analyze_scalar(self.event.value)
+ length += len(self.analysis.scalar)
+ return (length < 128 and (isinstance(self.event, AliasEvent)
+ or (isinstance(self.event, ScalarEvent)
+ and not self.analysis.empty and not self.analysis.multiline)
+ or self.check_empty_sequence() or self.check_empty_mapping()))
+
+ # Anchor, Tag, and Scalar processors.
+
+ def process_anchor(self, indicator):
+ if self.event.anchor is None:
+ self.prepared_anchor = None
+ return
+ if self.prepared_anchor is None:
+ self.prepared_anchor = self.prepare_anchor(self.event.anchor)
+ if self.prepared_anchor:
+ self.write_indicator(indicator+self.prepared_anchor, True)
+ self.prepared_anchor = None
+
+ def process_tag(self):
+ tag = self.event.tag
+ if isinstance(self.event, ScalarEvent):
+ if self.style is None:
+ self.style = self.choose_scalar_style()
+ if ((not self.canonical or tag is None) and
+ ((self.style == '' and self.event.implicit[0])
+ or (self.style != '' and self.event.implicit[1]))):
+ self.prepared_tag = None
+ return
+ if self.event.implicit[0] and tag is None:
+ tag = u'!'
+ self.prepared_tag = None
+ else:
+ if (not self.canonical or tag is None) and self.event.implicit:
+ self.prepared_tag = None
+ return
+ if tag is None:
+ raise EmitterError("tag is not specified")
+ if self.prepared_tag is None:
+ self.prepared_tag = self.prepare_tag(tag)
+ if self.prepared_tag:
+ self.write_indicator(self.prepared_tag, True)
+ self.prepared_tag = None
+
+ def choose_scalar_style(self):
+ if self.analysis is None:
+ self.analysis = self.analyze_scalar(self.event.value)
+ if self.event.style == '"' or self.canonical:
+ return '"'
+ if not self.event.style and self.event.implicit[0]:
+ if (not (self.simple_key_context and
+ (self.analysis.empty or self.analysis.multiline))
+ and (self.flow_level and self.analysis.allow_flow_plain
+ or (not self.flow_level and self.analysis.allow_block_plain))):
+ return ''
+ if self.event.style and self.event.style in '|>':
+ if (not self.flow_level and not self.simple_key_context
+ and self.analysis.allow_block):
+ return self.event.style
+ if not self.event.style or self.event.style == '\'':
+ if (self.analysis.allow_single_quoted and
+ not (self.simple_key_context and self.analysis.multiline)):
+ return '\''
+ return '"'
+
+ def process_scalar(self):
+ if self.analysis is None:
+ self.analysis = self.analyze_scalar(self.event.value)
+ if self.style is None:
+ self.style = self.choose_scalar_style()
+ split = (not self.simple_key_context)
+ #if self.analysis.multiline and split \
+ # and (not self.style or self.style in '\'\"'):
+ # self.write_indent()
+ if self.style == '"':
+ self.write_double_quoted(self.analysis.scalar, split)
+ elif self.style == '\'':
+ self.write_single_quoted(self.analysis.scalar, split)
+ elif self.style == '>':
+ self.write_folded(self.analysis.scalar)
+ elif self.style == '|':
+ self.write_literal(self.analysis.scalar)
+ else:
+ self.write_plain(self.analysis.scalar, split)
+ self.analysis = None
+ self.style = None
+
+ # Analyzers.
+
+ def prepare_version(self, version):
+ major, minor = version
+ if major != 1:
+ raise EmitterError("unsupported YAML version: %d.%d" % (major, minor))
+ return u'%d.%d' % (major, minor)
+
+ def prepare_tag_handle(self, handle):
+ if not handle:
+ raise EmitterError("tag handle must not be empty")
+ if handle[0] != u'!' or handle[-1] != u'!':
+ raise EmitterError("tag handle must start and end with '!': %r"
+ % (handle.encode('utf-8')))
+ for ch in handle[1:-1]:
+ if not (u'0' <= ch <= u'9' or u'A' <= ch <= u'Z' or u'a' <= ch <= u'z' \
+ or ch in u'-_'):
+ raise EmitterError("invalid character %r in the tag handle: %r"
+ % (ch.encode('utf-8'), handle.encode('utf-8')))
+ return handle
+
+ def prepare_tag_prefix(self, prefix):
+ if not prefix:
+ raise EmitterError("tag prefix must not be empty")
+ chunks = []
+ start = end = 0
+ if prefix[0] == u'!':
+ end = 1
+ while end < len(prefix):
+ ch = prefix[end]
+ if u'0' <= ch <= u'9' or u'A' <= ch <= u'Z' or u'a' <= ch <= u'z' \
+ or ch in u'-;/?!:@&=+$,_.~*\'()[]':
+ end += 1
+ else:
+ if start < end:
+ chunks.append(prefix[start:end])
+ start = end = end+1
+ data = ch.encode('utf-8')
+ for ch in data:
+ chunks.append(u'%%%02X' % ord(ch))
+ if start < end:
+ chunks.append(prefix[start:end])
+ return u''.join(chunks)
+
+ def prepare_tag(self, tag):
+ if not tag:
+ raise EmitterError("tag must not be empty")
+ if tag == u'!':
+ return tag
+ handle = None
+ suffix = tag
+ prefixes = self.tag_prefixes.keys()
+ prefixes.sort()
+ for prefix in prefixes:
+ if tag.startswith(prefix) \
+ and (prefix == u'!' or len(prefix) < len(tag)):
+ handle = self.tag_prefixes[prefix]
+ suffix = tag[len(prefix):]
+ chunks = []
+ start = end = 0
+ while end < len(suffix):
+ ch = suffix[end]
+ if u'0' <= ch <= u'9' or u'A' <= ch <= u'Z' or u'a' <= ch <= u'z' \
+ or ch in u'-;/?:@&=+$,_.~*\'()[]' \
+ or (ch == u'!' and handle != u'!'):
+ end += 1
+ else:
+ if start < end:
+ chunks.append(suffix[start:end])
+ start = end = end+1
+ data = ch.encode('utf-8')
+ for ch in data:
+ chunks.append(u'%%%02X' % ord(ch))
+ if start < end:
+ chunks.append(suffix[start:end])
+ suffix_text = u''.join(chunks)
+ if handle:
+ return u'%s%s' % (handle, suffix_text)
+ else:
+ return u'!<%s>' % suffix_text
+
+ def prepare_anchor(self, anchor):
+ if not anchor:
+ raise EmitterError("anchor must not be empty")
+ for ch in anchor:
+ if not (u'0' <= ch <= u'9' or u'A' <= ch <= u'Z' or u'a' <= ch <= u'z' \
+ or ch in u'-_'):
+ raise EmitterError("invalid character %r in the anchor: %r"
+ % (ch.encode('utf-8'), anchor.encode('utf-8')))
+ return anchor
+
+ def analyze_scalar(self, scalar):
+
+ # Empty scalar is a special case.
+ if not scalar:
+ return ScalarAnalysis(scalar=scalar, empty=True, multiline=False,
+ allow_flow_plain=False, allow_block_plain=True,
+ allow_single_quoted=True, allow_double_quoted=True,
+ allow_block=False)
+
+ # Indicators and special characters.
+ block_indicators = False
+ flow_indicators = False
+ line_breaks = False
+ special_characters = False
+
+ # Important whitespace combinations.
+ leading_space = False
+ leading_break = False
+ trailing_space = False
+ trailing_break = False
+ break_space = False
+ space_break = False
+
+ # Check document indicators.
+ if scalar.startswith(u'---') or scalar.startswith(u'...'):
+ block_indicators = True
+ flow_indicators = True
+
+ # First character or preceded by a whitespace.
+ preceded_by_whitespace = True
+
+ # Last character or followed by a whitespace.
+ followed_by_whitespace = (len(scalar) == 1 or
+ scalar[1] in u'\0 \t\r\n\x85\u2028\u2029')
+
+ # The previous character is a space.
+ previous_space = False
+
+ # The previous character is a break.
+ previous_break = False
+
+ index = 0
+ while index < len(scalar):
+ ch = scalar[index]
+
+ # Check for indicators.
+ if index == 0:
+ # Leading indicators are special characters.
+ if ch in u'#,[]{}&*!|>\'\"%@`':
+ flow_indicators = True
+ block_indicators = True
+ if ch in u'?:':
+ flow_indicators = True
+ if followed_by_whitespace:
+ block_indicators = True
+ if ch == u'-' and followed_by_whitespace:
+ flow_indicators = True
+ block_indicators = True
+ else:
+ # Some indicators cannot appear within a scalar as well.
+ if ch in u',?[]{}':
+ flow_indicators = True
+ if ch == u':':
+ flow_indicators = True
+ if followed_by_whitespace:
+ block_indicators = True
+ if ch == u'#' and preceded_by_whitespace:
+ flow_indicators = True
+ block_indicators = True
+
+ # Check for line breaks, special, and unicode characters.
+ if ch in u'\n\x85\u2028\u2029':
+ line_breaks = True
+ if not (ch == u'\n' or u'\x20' <= ch <= u'\x7E'):
+ if (ch == u'\x85' or u'\xA0' <= ch <= u'\uD7FF'
+ or u'\uE000' <= ch <= u'\uFFFD'
+ or (u'\U00010000' <= ch < u'\U0010ffff')) and ch != u'\uFEFF':
+ unicode_characters = True
+ if not self.allow_unicode:
+ special_characters = True
+ else:
+ special_characters = True
+
+ # Detect important whitespace combinations.
+ if ch == u' ':
+ if index == 0:
+ leading_space = True
+ if index == len(scalar)-1:
+ trailing_space = True
+ if previous_break:
+ break_space = True
+ previous_space = True
+ previous_break = False
+ elif ch in u'\n\x85\u2028\u2029':
+ if index == 0:
+ leading_break = True
+ if index == len(scalar)-1:
+ trailing_break = True
+ if previous_space:
+ space_break = True
+ previous_space = False
+ previous_break = True
+ else:
+ previous_space = False
+ previous_break = False
+
+ # Prepare for the next character.
+ index += 1
+ preceded_by_whitespace = (ch in u'\0 \t\r\n\x85\u2028\u2029')
+ followed_by_whitespace = (index+1 >= len(scalar) or
+ scalar[index+1] in u'\0 \t\r\n\x85\u2028\u2029')
+
+ # Let's decide what styles are allowed.
+ allow_flow_plain = True
+ allow_block_plain = True
+ allow_single_quoted = True
+ allow_double_quoted = True
+ allow_block = True
+
+ # Leading and trailing whitespaces are bad for plain scalars.
+ if (leading_space or leading_break
+ or trailing_space or trailing_break):
+ allow_flow_plain = allow_block_plain = False
+
+ # We do not permit trailing spaces for block scalars.
+ if trailing_space:
+ allow_block = False
+
+ # Spaces at the beginning of a new line are only acceptable for block
+ # scalars.
+ if break_space:
+ allow_flow_plain = allow_block_plain = allow_single_quoted = False
+
+ # Spaces followed by breaks, as well as special character are only
+ # allowed for double quoted scalars.
+ if space_break or special_characters:
+ allow_flow_plain = allow_block_plain = \
+ allow_single_quoted = allow_block = False
+
+ # Although the plain scalar writer supports breaks, we never emit
+ # multiline plain scalars.
+ if line_breaks:
+ allow_flow_plain = allow_block_plain = False
+
+ # Flow indicators are forbidden for flow plain scalars.
+ if flow_indicators:
+ allow_flow_plain = False
+
+ # Block indicators are forbidden for block plain scalars.
+ if block_indicators:
+ allow_block_plain = False
+
+ return ScalarAnalysis(scalar=scalar,
+ empty=False, multiline=line_breaks,
+ allow_flow_plain=allow_flow_plain,
+ allow_block_plain=allow_block_plain,
+ allow_single_quoted=allow_single_quoted,
+ allow_double_quoted=allow_double_quoted,
+ allow_block=allow_block)
+
+ # Writers.
+
+ def flush_stream(self):
+ if hasattr(self.stream, 'flush'):
+ self.stream.flush()
+
+ def write_stream_start(self):
+ # Write BOM if needed.
+ if self.encoding and self.encoding.startswith('utf-16'):
+ self.stream.write(u'\uFEFF'.encode(self.encoding))
+
+ def write_stream_end(self):
+ self.flush_stream()
+
+ def write_indicator(self, indicator, need_whitespace,
+ whitespace=False, indention=False):
+ if self.whitespace or not need_whitespace:
+ data = indicator
+ else:
+ data = u' '+indicator
+ self.whitespace = whitespace
+ self.indention = self.indention and indention
+ self.column += len(data)
+ self.open_ended = False
+ if self.encoding:
+ data = data.encode(self.encoding)
+ self.stream.write(data)
+
+ def write_indent(self):
+ indent = self.indent or 0
+ if not self.indention or self.column > indent \
+ or (self.column == indent and not self.whitespace):
+ self.write_line_break()
+ if self.column < indent:
+ self.whitespace = True
+ data = u' '*(indent-self.column)
+ self.column = indent
+ if self.encoding:
+ data = data.encode(self.encoding)
+ self.stream.write(data)
+
+ def write_line_break(self, data=None):
+ if data is None:
+ data = self.best_line_break
+ self.whitespace = True
+ self.indention = True
+ self.line += 1
+ self.column = 0
+ if self.encoding:
+ data = data.encode(self.encoding)
+ self.stream.write(data)
+
+ def write_version_directive(self, version_text):
+ data = u'%%YAML %s' % version_text
+ if self.encoding:
+ data = data.encode(self.encoding)
+ self.stream.write(data)
+ self.write_line_break()
+
+ def write_tag_directive(self, handle_text, prefix_text):
+ data = u'%%TAG %s %s' % (handle_text, prefix_text)
+ if self.encoding:
+ data = data.encode(self.encoding)
+ self.stream.write(data)
+ self.write_line_break()
+
+ # Scalar streams.
+
+ def write_single_quoted(self, text, split=True):
+ self.write_indicator(u'\'', True)
+ spaces = False
+ breaks = False
+ start = end = 0
+ while end <= len(text):
+ ch = None
+ if end < len(text):
+ ch = text[end]
+ if spaces:
+ if ch is None or ch != u' ':
+ if start+1 == end and self.column > self.best_width and split \
+ and start != 0 and end != len(text):
+ self.write_indent()
+ else:
+ data = text[start:end]
+ self.column += len(data)
+ if self.encoding:
+ data = data.encode(self.encoding)
+ self.stream.write(data)
+ start = end
+ elif breaks:
+ if ch is None or ch not in u'\n\x85\u2028\u2029':
+ if text[start] == u'\n':
+ self.write_line_break()
+ for br in text[start:end]:
+ if br == u'\n':
+ self.write_line_break()
+ else:
+ self.write_line_break(br)
+ self.write_indent()
+ start = end
+ else:
+ if ch is None or ch in u' \n\x85\u2028\u2029' or ch == u'\'':
+ if start < end:
+ data = text[start:end]
+ self.column += len(data)
+ if self.encoding:
+ data = data.encode(self.encoding)
+ self.stream.write(data)
+ start = end
+ if ch == u'\'':
+ data = u'\'\''
+ self.column += 2
+ if self.encoding:
+ data = data.encode(self.encoding)
+ self.stream.write(data)
+ start = end + 1
+ if ch is not None:
+ spaces = (ch == u' ')
+ breaks = (ch in u'\n\x85\u2028\u2029')
+ end += 1
+ self.write_indicator(u'\'', False)
+
+ ESCAPE_REPLACEMENTS = {
+ u'\0': u'0',
+ u'\x07': u'a',
+ u'\x08': u'b',
+ u'\x09': u't',
+ u'\x0A': u'n',
+ u'\x0B': u'v',
+ u'\x0C': u'f',
+ u'\x0D': u'r',
+ u'\x1B': u'e',
+ u'\"': u'\"',
+ u'\\': u'\\',
+ u'\x85': u'N',
+ u'\xA0': u'_',
+ u'\u2028': u'L',
+ u'\u2029': u'P',
+ }
+
+ def write_double_quoted(self, text, split=True):
+ self.write_indicator(u'"', True)
+ start = end = 0
+ while end <= len(text):
+ ch = None
+ if end < len(text):
+ ch = text[end]
+ if ch is None or ch in u'"\\\x85\u2028\u2029\uFEFF' \
+ or not (u'\x20' <= ch <= u'\x7E'
+ or (self.allow_unicode
+ and (u'\xA0' <= ch <= u'\uD7FF'
+ or u'\uE000' <= ch <= u'\uFFFD'))):
+ if start < end:
+ data = text[start:end]
+ self.column += len(data)
+ if self.encoding:
+ data = data.encode(self.encoding)
+ self.stream.write(data)
+ start = end
+ if ch is not None:
+ if ch in self.ESCAPE_REPLACEMENTS:
+ data = u'\\'+self.ESCAPE_REPLACEMENTS[ch]
+ elif ch <= u'\xFF':
+ data = u'\\x%02X' % ord(ch)
+ elif ch <= u'\uFFFF':
+ data = u'\\u%04X' % ord(ch)
+ else:
+ data = u'\\U%08X' % ord(ch)
+ self.column += len(data)
+ if self.encoding:
+ data = data.encode(self.encoding)
+ self.stream.write(data)
+ start = end+1
+ if 0 < end < len(text)-1 and (ch == u' ' or start >= end) \
+ and self.column+(end-start) > self.best_width and split:
+ data = text[start:end]+u'\\'
+ if start < end:
+ start = end
+ self.column += len(data)
+ if self.encoding:
+ data = data.encode(self.encoding)
+ self.stream.write(data)
+ self.write_indent()
+ self.whitespace = False
+ self.indention = False
+ if text[start] == u' ':
+ data = u'\\'
+ self.column += len(data)
+ if self.encoding:
+ data = data.encode(self.encoding)
+ self.stream.write(data)
+ end += 1
+ self.write_indicator(u'"', False)
+
+ def determine_block_hints(self, text):
+ hints = u''
+ if text:
+ if text[0] in u' \n\x85\u2028\u2029':
+ hints += unicode(self.best_indent)
+ if text[-1] not in u'\n\x85\u2028\u2029':
+ hints += u'-'
+ elif len(text) == 1 or text[-2] in u'\n\x85\u2028\u2029':
+ hints += u'+'
+ return hints
+
+ def write_folded(self, text):
+ hints = self.determine_block_hints(text)
+ self.write_indicator(u'>'+hints, True)
+ if hints[-1:] == u'+':
+ self.open_ended = True
+ self.write_line_break()
+ leading_space = True
+ spaces = False
+ breaks = True
+ start = end = 0
+ while end <= len(text):
+ ch = None
+ if end < len(text):
+ ch = text[end]
+ if breaks:
+ if ch is None or ch not in u'\n\x85\u2028\u2029':
+ if not leading_space and ch is not None and ch != u' ' \
+ and text[start] == u'\n':
+ self.write_line_break()
+ leading_space = (ch == u' ')
+ for br in text[start:end]:
+ if br == u'\n':
+ self.write_line_break()
+ else:
+ self.write_line_break(br)
+ if ch is not None:
+ self.write_indent()
+ start = end
+ elif spaces:
+ if ch != u' ':
+ if start+1 == end and self.column > self.best_width:
+ self.write_indent()
+ else:
+ data = text[start:end]
+ self.column += len(data)
+ if self.encoding:
+ data = data.encode(self.encoding)
+ self.stream.write(data)
+ start = end
+ else:
+ if ch is None or ch in u' \n\x85\u2028\u2029':
+ data = text[start:end]
+ self.column += len(data)
+ if self.encoding:
+ data = data.encode(self.encoding)
+ self.stream.write(data)
+ if ch is None:
+ self.write_line_break()
+ start = end
+ if ch is not None:
+ breaks = (ch in u'\n\x85\u2028\u2029')
+ spaces = (ch == u' ')
+ end += 1
+
+ def write_literal(self, text):
+ hints = self.determine_block_hints(text)
+ self.write_indicator(u'|'+hints, True)
+ if hints[-1:] == u'+':
+ self.open_ended = True
+ self.write_line_break()
+ breaks = True
+ start = end = 0
+ while end <= len(text):
+ ch = None
+ if end < len(text):
+ ch = text[end]
+ if breaks:
+ if ch is None or ch not in u'\n\x85\u2028\u2029':
+ for br in text[start:end]:
+ if br == u'\n':
+ self.write_line_break()
+ else:
+ self.write_line_break(br)
+ if ch is not None:
+ self.write_indent()
+ start = end
+ else:
+ if ch is None or ch in u'\n\x85\u2028\u2029':
+ data = text[start:end]
+ if self.encoding:
+ data = data.encode(self.encoding)
+ self.stream.write(data)
+ if ch is None:
+ self.write_line_break()
+ start = end
+ if ch is not None:
+ breaks = (ch in u'\n\x85\u2028\u2029')
+ end += 1
+
+ def write_plain(self, text, split=True):
+ if self.root_context:
+ self.open_ended = True
+ if not text:
+ return
+ if not self.whitespace:
+ data = u' '
+ self.column += len(data)
+ if self.encoding:
+ data = data.encode(self.encoding)
+ self.stream.write(data)
+ self.whitespace = False
+ self.indention = False
+ spaces = False
+ breaks = False
+ start = end = 0
+ while end <= len(text):
+ ch = None
+ if end < len(text):
+ ch = text[end]
+ if spaces:
+ if ch != u' ':
+ if start+1 == end and self.column > self.best_width and split:
+ self.write_indent()
+ self.whitespace = False
+ self.indention = False
+ else:
+ data = text[start:end]
+ self.column += len(data)
+ if self.encoding:
+ data = data.encode(self.encoding)
+ self.stream.write(data)
+ start = end
+ elif breaks:
+ if ch not in u'\n\x85\u2028\u2029':
+ if text[start] == u'\n':
+ self.write_line_break()
+ for br in text[start:end]:
+ if br == u'\n':
+ self.write_line_break()
+ else:
+ self.write_line_break(br)
+ self.write_indent()
+ self.whitespace = False
+ self.indention = False
+ start = end
+ else:
+ if ch is None or ch in u' \n\x85\u2028\u2029':
+ data = text[start:end]
+ self.column += len(data)
+ if self.encoding:
+ data = data.encode(self.encoding)
+ self.stream.write(data)
+ start = end
+ if ch is not None:
+ spaces = (ch == u' ')
+ breaks = (ch in u'\n\x85\u2028\u2029')
+ end += 1
diff --git a/yaml/lib/yaml/error.py b/yaml/lib/yaml/error.py
new file mode 100644
index 0000000000..577686db5f
--- /dev/null
+++ b/yaml/lib/yaml/error.py
@@ -0,0 +1,75 @@
+
+__all__ = ['Mark', 'YAMLError', 'MarkedYAMLError']
+
+class Mark(object):
+
+ def __init__(self, name, index, line, column, buffer, pointer):
+ self.name = name
+ self.index = index
+ self.line = line
+ self.column = column
+ self.buffer = buffer
+ self.pointer = pointer
+
+ def get_snippet(self, indent=4, max_length=75):
+ if self.buffer is None:
+ return None
+ head = ''
+ start = self.pointer
+ while start > 0 and self.buffer[start-1] not in u'\0\r\n\x85\u2028\u2029':
+ start -= 1
+ if self.pointer-start > max_length/2-1:
+ head = ' ... '
+ start += 5
+ break
+ tail = ''
+ end = self.pointer
+ while end < len(self.buffer) and self.buffer[end] not in u'\0\r\n\x85\u2028\u2029':
+ end += 1
+ if end-self.pointer > max_length/2-1:
+ tail = ' ... '
+ end -= 5
+ break
+ snippet = self.buffer[start:end].encode('utf-8')
+ return ' '*indent + head + snippet + tail + '\n' \
+ + ' '*(indent+self.pointer-start+len(head)) + '^'
+
+ def __str__(self):
+ snippet = self.get_snippet()
+ where = " in \"%s\", line %d, column %d" \
+ % (self.name, self.line+1, self.column+1)
+ if snippet is not None:
+ where += ":\n"+snippet
+ return where
+
+class YAMLError(Exception):
+ pass
+
+class MarkedYAMLError(YAMLError):
+
+ def __init__(self, context=None, context_mark=None,
+ problem=None, problem_mark=None, note=None):
+ self.context = context
+ self.context_mark = context_mark
+ self.problem = problem
+ self.problem_mark = problem_mark
+ self.note = note
+
+ def __str__(self):
+ lines = []
+ if self.context is not None:
+ lines.append(self.context)
+ if self.context_mark is not None \
+ and (self.problem is None or self.problem_mark is None
+ or self.context_mark.name != self.problem_mark.name
+ or self.context_mark.line != self.problem_mark.line
+ or self.context_mark.column != self.problem_mark.column):
+ lines.append(str(self.context_mark))
+ if self.problem is not None:
+ lines.append(self.problem)
+ if self.problem_mark is not None:
+ lines.append(str(self.problem_mark))
+ if self.note is not None:
+ lines.append(self.note)
+ return '\n'.join(lines)
+
diff --git a/yaml/lib/yaml/events.py b/yaml/lib/yaml/events.py
new file mode 100644
index 0000000000..f79ad389cb
--- /dev/null
+++ b/yaml/lib/yaml/events.py
@@ -0,0 +1,86 @@
+
+# Abstract classes.
+
+class Event(object):
+ def __init__(self, start_mark=None, end_mark=None):
+ self.start_mark = start_mark
+ self.end_mark = end_mark
+ def __repr__(self):
+ attributes = [key for key in ['anchor', 'tag', 'implicit', 'value']
+ if hasattr(self, key)]
+ arguments = ', '.join(['%s=%r' % (key, getattr(self, key))
+ for key in attributes])
+ return '%s(%s)' % (self.__class__.__name__, arguments)
+
+class NodeEvent(Event):
+ def __init__(self, anchor, start_mark=None, end_mark=None):
+ self.anchor = anchor
+ self.start_mark = start_mark
+ self.end_mark = end_mark
+
+class CollectionStartEvent(NodeEvent):
+ def __init__(self, anchor, tag, implicit, start_mark=None, end_mark=None,
+ flow_style=None):
+ self.anchor = anchor
+ self.tag = tag
+ self.implicit = implicit
+ self.start_mark = start_mark
+ self.end_mark = end_mark
+ self.flow_style = flow_style
+
+class CollectionEndEvent(Event):
+ pass
+
+# Implementations.
+
+class StreamStartEvent(Event):
+ def __init__(self, start_mark=None, end_mark=None, encoding=None):
+ self.start_mark = start_mark
+ self.end_mark = end_mark
+ self.encoding = encoding
+
+class StreamEndEvent(Event):
+ pass
+
+class DocumentStartEvent(Event):
+ def __init__(self, start_mark=None, end_mark=None,
+ explicit=None, version=None, tags=None):
+ self.start_mark = start_mark
+ self.end_mark = end_mark
+ self.explicit = explicit
+ self.version = version
+ self.tags = tags
+
+class DocumentEndEvent(Event):
+ def __init__(self, start_mark=None, end_mark=None,
+ explicit=None):
+ self.start_mark = start_mark
+ self.end_mark = end_mark
+ self.explicit = explicit
+
+class AliasEvent(NodeEvent):
+ pass
+
+class ScalarEvent(NodeEvent):
+ def __init__(self, anchor, tag, implicit, value,
+ start_mark=None, end_mark=None, style=None):
+ self.anchor = anchor
+ self.tag = tag
+ self.implicit = implicit
+ self.value = value
+ self.start_mark = start_mark
+ self.end_mark = end_mark
+ self.style = style
+
+class SequenceStartEvent(CollectionStartEvent):
+ pass
+
+class SequenceEndEvent(CollectionEndEvent):
+ pass
+
+class MappingStartEvent(CollectionStartEvent):
+ pass
+
+class MappingEndEvent(CollectionEndEvent):
+ pass
+
diff --git a/yaml/lib/yaml/loader.py b/yaml/lib/yaml/loader.py
new file mode 100644
index 0000000000..4d773c3cc1
--- /dev/null
+++ b/yaml/lib/yaml/loader.py
@@ -0,0 +1,63 @@
+
+__all__ = ['BaseLoader', 'FullLoader', 'SafeLoader', 'Loader', 'UnsafeLoader']
+
+from reader import *
+from scanner import *
+from parser import *
+from composer import *
+from constructor import *
+from resolver import *
+
+class BaseLoader(Reader, Scanner, Parser, Composer, BaseConstructor, BaseResolver):
+
+ def __init__(self, stream):
+ Reader.__init__(self, stream)
+ Scanner.__init__(self)
+ Parser.__init__(self)
+ Composer.__init__(self)
+ BaseConstructor.__init__(self)
+ BaseResolver.__init__(self)
+
+class FullLoader(Reader, Scanner, Parser, Composer, FullConstructor, Resolver):
+
+ def __init__(self, stream):
+ Reader.__init__(self, stream)
+ Scanner.__init__(self)
+ Parser.__init__(self)
+ Composer.__init__(self)
+ FullConstructor.__init__(self)
+ Resolver.__init__(self)
+
+class SafeLoader(Reader, Scanner, Parser, Composer, SafeConstructor, Resolver):
+
+ def __init__(self, stream):
+ Reader.__init__(self, stream)
+ Scanner.__init__(self)
+ Parser.__init__(self)
+ Composer.__init__(self)
+ SafeConstructor.__init__(self)
+ Resolver.__init__(self)
+
+class Loader(Reader, Scanner, Parser, Composer, Constructor, Resolver):
+
+ def __init__(self, stream):
+ Reader.__init__(self, stream)
+ Scanner.__init__(self)
+ Parser.__init__(self)
+ Composer.__init__(self)
+ Constructor.__init__(self)
+ Resolver.__init__(self)
+
+# UnsafeLoader is the same as Loader (which is and was always unsafe on
+# untrusted input). Use of either Loader or UnsafeLoader should be rare, since
+# FullLoad should be able to load almost all YAML safely. Loader is left intact
+# to ensure backwards compatibility.
+class UnsafeLoader(Reader, Scanner, Parser, Composer, Constructor, Resolver):
+
+ def __init__(self, stream):
+ Reader.__init__(self, stream)
+ Scanner.__init__(self)
+ Parser.__init__(self)
+ Composer.__init__(self)
+ Constructor.__init__(self)
+ Resolver.__init__(self)
diff --git a/yaml/lib/yaml/nodes.py b/yaml/lib/yaml/nodes.py
new file mode 100644
index 0000000000..c4f070c41e
--- /dev/null
+++ b/yaml/lib/yaml/nodes.py
@@ -0,0 +1,49 @@
+
+class Node(object):
+ def __init__(self, tag, value, start_mark, end_mark):
+ self.tag = tag
+ self.value = value
+ self.start_mark = start_mark
+ self.end_mark = end_mark
+ def __repr__(self):
+ value = self.value
+ #if isinstance(value, list):
+ # if len(value) == 0:
+ # value = '<empty>'
+ # elif len(value) == 1:
+ # value = '<1 item>'
+ # else:
+ # value = '<%d items>' % len(value)
+ #else:
+ # if len(value) > 75:
+ # value = repr(value[:70]+u' ... ')
+ # else:
+ # value = repr(value)
+ value = repr(value)
+ return '%s(tag=%r, value=%s)' % (self.__class__.__name__, self.tag, value)
+
+class ScalarNode(Node):
+ id = 'scalar'
+ def __init__(self, tag, value,
+ start_mark=None, end_mark=None, style=None):
+ self.tag = tag
+ self.value = value
+ self.start_mark = start_mark
+ self.end_mark = end_mark
+ self.style = style
+
+class CollectionNode(Node):
+ def __init__(self, tag, value,
+ start_mark=None, end_mark=None, flow_style=None):
+ self.tag = tag
+ self.value = value
+ self.start_mark = start_mark
+ self.end_mark = end_mark
+ self.flow_style = flow_style
+
+class SequenceNode(CollectionNode):
+ id = 'sequence'
+
+class MappingNode(CollectionNode):
+ id = 'mapping'
+
diff --git a/yaml/lib/yaml/parser.py b/yaml/lib/yaml/parser.py
new file mode 100644
index 0000000000..f9e3057f33
--- /dev/null
+++ b/yaml/lib/yaml/parser.py
@@ -0,0 +1,589 @@
+
+# The following YAML grammar is LL(1) and is parsed by a recursive descent
+# parser.
+#
+# stream ::= STREAM-START implicit_document? explicit_document* STREAM-END
+# implicit_document ::= block_node DOCUMENT-END*
+# explicit_document ::= DIRECTIVE* DOCUMENT-START block_node? DOCUMENT-END*
+# block_node_or_indentless_sequence ::=
+# ALIAS
+# | properties (block_content | indentless_block_sequence)?
+# | block_content
+# | indentless_block_sequence
+# block_node ::= ALIAS
+# | properties block_content?
+# | block_content
+# flow_node ::= ALIAS
+# | properties flow_content?
+# | flow_content
+# properties ::= TAG ANCHOR? | ANCHOR TAG?
+# block_content ::= block_collection | flow_collection | SCALAR
+# flow_content ::= flow_collection | SCALAR
+# block_collection ::= block_sequence | block_mapping
+# flow_collection ::= flow_sequence | flow_mapping
+# block_sequence ::= BLOCK-SEQUENCE-START (BLOCK-ENTRY block_node?)* BLOCK-END
+# indentless_sequence ::= (BLOCK-ENTRY block_node?)+
+# block_mapping ::= BLOCK-MAPPING_START
+# ((KEY block_node_or_indentless_sequence?)?
+# (VALUE block_node_or_indentless_sequence?)?)*
+# BLOCK-END
+# flow_sequence ::= FLOW-SEQUENCE-START
+# (flow_sequence_entry FLOW-ENTRY)*
+# flow_sequence_entry?
+# FLOW-SEQUENCE-END
+# flow_sequence_entry ::= flow_node | KEY flow_node? (VALUE flow_node?)?
+# flow_mapping ::= FLOW-MAPPING-START
+# (flow_mapping_entry FLOW-ENTRY)*
+# flow_mapping_entry?
+# FLOW-MAPPING-END
+# flow_mapping_entry ::= flow_node | KEY flow_node? (VALUE flow_node?)?
+#
+# FIRST sets:
+#
+# stream: { STREAM-START }
+# explicit_document: { DIRECTIVE DOCUMENT-START }
+# implicit_document: FIRST(block_node)
+# block_node: { ALIAS TAG ANCHOR SCALAR BLOCK-SEQUENCE-START BLOCK-MAPPING-START FLOW-SEQUENCE-START FLOW-MAPPING-START }
+# flow_node: { ALIAS ANCHOR TAG SCALAR FLOW-SEQUENCE-START FLOW-MAPPING-START }
+# block_content: { BLOCK-SEQUENCE-START BLOCK-MAPPING-START FLOW-SEQUENCE-START FLOW-MAPPING-START SCALAR }
+# flow_content: { FLOW-SEQUENCE-START FLOW-MAPPING-START SCALAR }
+# block_collection: { BLOCK-SEQUENCE-START BLOCK-MAPPING-START }
+# flow_collection: { FLOW-SEQUENCE-START FLOW-MAPPING-START }
+# block_sequence: { BLOCK-SEQUENCE-START }
+# block_mapping: { BLOCK-MAPPING-START }
+# block_node_or_indentless_sequence: { ALIAS ANCHOR TAG SCALAR BLOCK-SEQUENCE-START BLOCK-MAPPING-START FLOW-SEQUENCE-START FLOW-MAPPING-START BLOCK-ENTRY }
+# indentless_sequence: { ENTRY }
+# flow_collection: { FLOW-SEQUENCE-START FLOW-MAPPING-START }
+# flow_sequence: { FLOW-SEQUENCE-START }
+# flow_mapping: { FLOW-MAPPING-START }
+# flow_sequence_entry: { ALIAS ANCHOR TAG SCALAR FLOW-SEQUENCE-START FLOW-MAPPING-START KEY }
+# flow_mapping_entry: { ALIAS ANCHOR TAG SCALAR FLOW-SEQUENCE-START FLOW-MAPPING-START KEY }
+
+__all__ = ['Parser', 'ParserError']
+
+from error import MarkedYAMLError
+from tokens import *
+from events import *
+from scanner import *
+
+class ParserError(MarkedYAMLError):
+ pass
+
+class Parser(object):
+ # Since writing a recursive-descendant parser is a straightforward task, we
+ # do not give many comments here.
+
+ DEFAULT_TAGS = {
+ u'!': u'!',
+ u'!!': u'tag:yaml.org,2002:',
+ }
+
+ def __init__(self):
+ self.current_event = None
+ self.yaml_version = None
+ self.tag_handles = {}
+ self.states = []
+ self.marks = []
+ self.state = self.parse_stream_start
+
+ def dispose(self):
+ # Reset the state attributes (to clear self-references)
+ self.states = []
+ self.state = None
+
+ def check_event(self, *choices):
+ # Check the type of the next event.
+ if self.current_event is None:
+ if self.state:
+ self.current_event = self.state()
+ if self.current_event is not None:
+ if not choices:
+ return True
+ for choice in choices:
+ if isinstance(self.current_event, choice):
+ return True
+ return False
+
+ def peek_event(self):
+ # Get the next event.
+ if self.current_event is None:
+ if self.state:
+ self.current_event = self.state()
+ return self.current_event
+
+ def get_event(self):
+ # Get the next event and proceed further.
+ if self.current_event is None:
+ if self.state:
+ self.current_event = self.state()
+ value = self.current_event
+ self.current_event = None
+ return value
+
+ # stream ::= STREAM-START implicit_document? explicit_document* STREAM-END
+ # implicit_document ::= block_node DOCUMENT-END*
+ # explicit_document ::= DIRECTIVE* DOCUMENT-START block_node? DOCUMENT-END*
+
+ def parse_stream_start(self):
+
+ # Parse the stream start.
+ token = self.get_token()
+ event = StreamStartEvent(token.start_mark, token.end_mark,
+ encoding=token.encoding)
+
+ # Prepare the next state.
+ self.state = self.parse_implicit_document_start
+
+ return event
+
+ def parse_implicit_document_start(self):
+
+ # Parse an implicit document.
+ if not self.check_token(DirectiveToken, DocumentStartToken,
+ StreamEndToken):
+ self.tag_handles = self.DEFAULT_TAGS
+ token = self.peek_token()
+ start_mark = end_mark = token.start_mark
+ event = DocumentStartEvent(start_mark, end_mark,
+ explicit=False)
+
+ # Prepare the next state.
+ self.states.append(self.parse_document_end)
+ self.state = self.parse_block_node
+
+ return event
+
+ else:
+ return self.parse_document_start()
+
+ def parse_document_start(self):
+
+ # Parse any extra document end indicators.
+ while self.check_token(DocumentEndToken):
+ self.get_token()
+
+ # Parse an explicit document.
+ if not self.check_token(StreamEndToken):
+ token = self.peek_token()
+ start_mark = token.start_mark
+ version, tags = self.process_directives()
+ if not self.check_token(DocumentStartToken):
+ raise ParserError(None, None,
+ "expected '<document start>', but found %r"
+ % self.peek_token().id,
+ self.peek_token().start_mark)
+ token = self.get_token()
+ end_mark = token.end_mark
+ event = DocumentStartEvent(start_mark, end_mark,
+ explicit=True, version=version, tags=tags)
+ self.states.append(self.parse_document_end)
+ self.state = self.parse_document_content
+ else:
+ # Parse the end of the stream.
+ token = self.get_token()
+ event = StreamEndEvent(token.start_mark, token.end_mark)
+ assert not self.states
+ assert not self.marks
+ self.state = None
+ return event
+
+ def parse_document_end(self):
+
+ # Parse the document end.
+ token = self.peek_token()
+ start_mark = end_mark = token.start_mark
+ explicit = False
+ if self.check_token(DocumentEndToken):
+ token = self.get_token()
+ end_mark = token.end_mark
+ explicit = True
+ event = DocumentEndEvent(start_mark, end_mark,
+ explicit=explicit)
+
+ # Prepare the next state.
+ self.state = self.parse_document_start
+
+ return event
+
+ def parse_document_content(self):
+ if self.check_token(DirectiveToken,
+ DocumentStartToken, DocumentEndToken, StreamEndToken):
+ event = self.process_empty_scalar(self.peek_token().start_mark)
+ self.state = self.states.pop()
+ return event
+ else:
+ return self.parse_block_node()
+
+ def process_directives(self):
+ self.yaml_version = None
+ self.tag_handles = {}
+ while self.check_token(DirectiveToken):
+ token = self.get_token()
+ if token.name == u'YAML':
+ if self.yaml_version is not None:
+ raise ParserError(None, None,
+ "found duplicate YAML directive", token.start_mark)
+ major, minor = token.value
+ if major != 1:
+ raise ParserError(None, None,
+ "found incompatible YAML document (version 1.* is required)",
+ token.start_mark)
+ self.yaml_version = token.value
+ elif token.name == u'TAG':
+ handle, prefix = token.value
+ if handle in self.tag_handles:
+ raise ParserError(None, None,
+ "duplicate tag handle %r" % handle.encode('utf-8'),
+ token.start_mark)
+ self.tag_handles[handle] = prefix
+ if self.tag_handles:
+ value = self.yaml_version, self.tag_handles.copy()
+ else:
+ value = self.yaml_version, None
+ for key in self.DEFAULT_TAGS:
+ if key not in self.tag_handles:
+ self.tag_handles[key] = self.DEFAULT_TAGS[key]
+ return value
+
+ # block_node_or_indentless_sequence ::= ALIAS
+ # | properties (block_content | indentless_block_sequence)?
+ # | block_content
+ # | indentless_block_sequence
+ # block_node ::= ALIAS
+ # | properties block_content?
+ # | block_content
+ # flow_node ::= ALIAS
+ # | properties flow_content?
+ # | flow_content
+ # properties ::= TAG ANCHOR? | ANCHOR TAG?
+ # block_content ::= block_collection | flow_collection | SCALAR
+ # flow_content ::= flow_collection | SCALAR
+ # block_collection ::= block_sequence | block_mapping
+ # flow_collection ::= flow_sequence | flow_mapping
+
+ def parse_block_node(self):
+ return self.parse_node(block=True)
+
+ def parse_flow_node(self):
+ return self.parse_node()
+
+ def parse_block_node_or_indentless_sequence(self):
+ return self.parse_node(block=True, indentless_sequence=True)
+
+ def parse_node(self, block=False, indentless_sequence=False):
+ if self.check_token(AliasToken):
+ token = self.get_token()
+ event = AliasEvent(token.value, token.start_mark, token.end_mark)
+ self.state = self.states.pop()
+ else:
+ anchor = None
+ tag = None
+ start_mark = end_mark = tag_mark = None
+ if self.check_token(AnchorToken):
+ token = self.get_token()
+ start_mark = token.start_mark
+ end_mark = token.end_mark
+ anchor = token.value
+ if self.check_token(TagToken):
+ token = self.get_token()
+ tag_mark = token.start_mark
+ end_mark = token.end_mark
+ tag = token.value
+ elif self.check_token(TagToken):
+ token = self.get_token()
+ start_mark = tag_mark = token.start_mark
+ end_mark = token.end_mark
+ tag = token.value
+ if self.check_token(AnchorToken):
+ token = self.get_token()
+ end_mark = token.end_mark
+ anchor = token.value
+ if tag is not None:
+ handle, suffix = tag
+ if handle is not None:
+ if handle not in self.tag_handles:
+ raise ParserError("while parsing a node", start_mark,
+ "found undefined tag handle %r" % handle.encode('utf-8'),
+ tag_mark)
+ tag = self.tag_handles[handle]+suffix
+ else:
+ tag = suffix
+ #if tag == u'!':
+ # raise ParserError("while parsing a node", start_mark,
+ # "found non-specific tag '!'", tag_mark,
+ # "Please check 'http://pyyaml.org/wiki/YAMLNonSpecificTag' and share your opinion.")
+ if start_mark is None:
+ start_mark = end_mark = self.peek_token().start_mark
+ event = None
+ implicit = (tag is None or tag == u'!')
+ if indentless_sequence and self.check_token(BlockEntryToken):
+ end_mark = self.peek_token().end_mark
+ event = SequenceStartEvent(anchor, tag, implicit,
+ start_mark, end_mark)
+ self.state = self.parse_indentless_sequence_entry
+ else:
+ if self.check_token(ScalarToken):
+ token = self.get_token()
+ end_mark = token.end_mark
+ if (token.plain and tag is None) or tag == u'!':
+ implicit = (True, False)
+ elif tag is None:
+ implicit = (False, True)
+ else:
+ implicit = (False, False)
+ event = ScalarEvent(anchor, tag, implicit, token.value,
+ start_mark, end_mark, style=token.style)
+ self.state = self.states.pop()
+ elif self.check_token(FlowSequenceStartToken):
+ end_mark = self.peek_token().end_mark
+ event = SequenceStartEvent(anchor, tag, implicit,
+ start_mark, end_mark, flow_style=True)
+ self.state = self.parse_flow_sequence_first_entry
+ elif self.check_token(FlowMappingStartToken):
+ end_mark = self.peek_token().end_mark
+ event = MappingStartEvent(anchor, tag, implicit,
+ start_mark, end_mark, flow_style=True)
+ self.state = self.parse_flow_mapping_first_key
+ elif block and self.check_token(BlockSequenceStartToken):
+ end_mark = self.peek_token().start_mark
+ event = SequenceStartEvent(anchor, tag, implicit,
+ start_mark, end_mark, flow_style=False)
+ self.state = self.parse_block_sequence_first_entry
+ elif block and self.check_token(BlockMappingStartToken):
+ end_mark = self.peek_token().start_mark
+ event = MappingStartEvent(anchor, tag, implicit,
+ start_mark, end_mark, flow_style=False)
+ self.state = self.parse_block_mapping_first_key
+ elif anchor is not None or tag is not None:
+ # Empty scalars are allowed even if a tag or an anchor is
+ # specified.
+ event = ScalarEvent(anchor, tag, (implicit, False), u'',
+ start_mark, end_mark)
+ self.state = self.states.pop()
+ else:
+ if block:
+ node = 'block'
+ else:
+ node = 'flow'
+ token = self.peek_token()
+ raise ParserError("while parsing a %s node" % node, start_mark,
+ "expected the node content, but found %r" % token.id,
+ token.start_mark)
+ return event
+
+ # block_sequence ::= BLOCK-SEQUENCE-START (BLOCK-ENTRY block_node?)* BLOCK-END
+
+ def parse_block_sequence_first_entry(self):
+ token = self.get_token()
+ self.marks.append(token.start_mark)
+ return self.parse_block_sequence_entry()
+
+ def parse_block_sequence_entry(self):
+ if self.check_token(BlockEntryToken):
+ token = self.get_token()
+ if not self.check_token(BlockEntryToken, BlockEndToken):
+ self.states.append(self.parse_block_sequence_entry)
+ return self.parse_block_node()
+ else:
+ self.state = self.parse_block_sequence_entry
+ return self.process_empty_scalar(token.end_mark)
+ if not self.check_token(BlockEndToken):
+ token = self.peek_token()
+ raise ParserError("while parsing a block collection", self.marks[-1],
+ "expected <block end>, but found %r" % token.id, token.start_mark)
+ token = self.get_token()
+ event = SequenceEndEvent(token.start_mark, token.end_mark)
+ self.state = self.states.pop()
+ self.marks.pop()
+ return event
+
+ # indentless_sequence ::= (BLOCK-ENTRY block_node?)+
+
+ def parse_indentless_sequence_entry(self):
+ if self.check_token(BlockEntryToken):
+ token = self.get_token()
+ if not self.check_token(BlockEntryToken,
+ KeyToken, ValueToken, BlockEndToken):
+ self.states.append(self.parse_indentless_sequence_entry)
+ return self.parse_block_node()
+ else:
+ self.state = self.parse_indentless_sequence_entry
+ return self.process_empty_scalar(token.end_mark)
+ token = self.peek_token()
+ event = SequenceEndEvent(token.start_mark, token.start_mark)
+ self.state = self.states.pop()
+ return event
+
+ # block_mapping ::= BLOCK-MAPPING_START
+ # ((KEY block_node_or_indentless_sequence?)?
+ # (VALUE block_node_or_indentless_sequence?)?)*
+ # BLOCK-END
+
+ def parse_block_mapping_first_key(self):
+ token = self.get_token()
+ self.marks.append(token.start_mark)
+ return self.parse_block_mapping_key()
+
+ def parse_block_mapping_key(self):
+ if self.check_token(KeyToken):
+ token = self.get_token()
+ if not self.check_token(KeyToken, ValueToken, BlockEndToken):
+ self.states.append(self.parse_block_mapping_value)
+ return self.parse_block_node_or_indentless_sequence()
+ else:
+ self.state = self.parse_block_mapping_value
+ return self.process_empty_scalar(token.end_mark)
+ if not self.check_token(BlockEndToken):
+ token = self.peek_token()
+ raise ParserError("while parsing a block mapping", self.marks[-1],
+ "expected <block end>, but found %r" % token.id, token.start_mark)
+ token = self.get_token()
+ event = MappingEndEvent(token.start_mark, token.end_mark)
+ self.state = self.states.pop()
+ self.marks.pop()
+ return event
+
+ def parse_block_mapping_value(self):
+ if self.check_token(ValueToken):
+ token = self.get_token()
+ if not self.check_token(KeyToken, ValueToken, BlockEndToken):
+ self.states.append(self.parse_block_mapping_key)
+ return self.parse_block_node_or_indentless_sequence()
+ else:
+ self.state = self.parse_block_mapping_key
+ return self.process_empty_scalar(token.end_mark)
+ else:
+ self.state = self.parse_block_mapping_key
+ token = self.peek_token()
+ return self.process_empty_scalar(token.start_mark)
+
+ # flow_sequence ::= FLOW-SEQUENCE-START
+ # (flow_sequence_entry FLOW-ENTRY)*
+ # flow_sequence_entry?
+ # FLOW-SEQUENCE-END
+ # flow_sequence_entry ::= flow_node | KEY flow_node? (VALUE flow_node?)?
+ #
+ # Note that while production rules for both flow_sequence_entry and
+ # flow_mapping_entry are equal, their interpretations are different.
+ # For `flow_sequence_entry`, the part `KEY flow_node? (VALUE flow_node?)?`
+ # generate an inline mapping (set syntax).
+
+ def parse_flow_sequence_first_entry(self):
+ token = self.get_token()
+ self.marks.append(token.start_mark)
+ return self.parse_flow_sequence_entry(first=True)
+
+ def parse_flow_sequence_entry(self, first=False):
+ if not self.check_token(FlowSequenceEndToken):
+ if not first:
+ if self.check_token(FlowEntryToken):
+ self.get_token()
+ else:
+ token = self.peek_token()
+ raise ParserError("while parsing a flow sequence", self.marks[-1],
+ "expected ',' or ']', but got %r" % token.id, token.start_mark)
+
+ if self.check_token(KeyToken):
+ token = self.peek_token()
+ event = MappingStartEvent(None, None, True,
+ token.start_mark, token.end_mark,
+ flow_style=True)
+ self.state = self.parse_flow_sequence_entry_mapping_key
+ return event
+ elif not self.check_token(FlowSequenceEndToken):
+ self.states.append(self.parse_flow_sequence_entry)
+ return self.parse_flow_node()
+ token = self.get_token()
+ event = SequenceEndEvent(token.start_mark, token.end_mark)
+ self.state = self.states.pop()
+ self.marks.pop()
+ return event
+
+ def parse_flow_sequence_entry_mapping_key(self):
+ token = self.get_token()
+ if not self.check_token(ValueToken,
+ FlowEntryToken, FlowSequenceEndToken):
+ self.states.append(self.parse_flow_sequence_entry_mapping_value)
+ return self.parse_flow_node()
+ else:
+ self.state = self.parse_flow_sequence_entry_mapping_value
+ return self.process_empty_scalar(token.end_mark)
+
+ def parse_flow_sequence_entry_mapping_value(self):
+ if self.check_token(ValueToken):
+ token = self.get_token()
+ if not self.check_token(FlowEntryToken, FlowSequenceEndToken):
+ self.states.append(self.parse_flow_sequence_entry_mapping_end)
+ return self.parse_flow_node()
+ else:
+ self.state = self.parse_flow_sequence_entry_mapping_end
+ return self.process_empty_scalar(token.end_mark)
+ else:
+ self.state = self.parse_flow_sequence_entry_mapping_end
+ token = self.peek_token()
+ return self.process_empty_scalar(token.start_mark)
+
+ def parse_flow_sequence_entry_mapping_end(self):
+ self.state = self.parse_flow_sequence_entry
+ token = self.peek_token()
+ return MappingEndEvent(token.start_mark, token.start_mark)
+
+ # flow_mapping ::= FLOW-MAPPING-START
+ # (flow_mapping_entry FLOW-ENTRY)*
+ # flow_mapping_entry?
+ # FLOW-MAPPING-END
+ # flow_mapping_entry ::= flow_node | KEY flow_node? (VALUE flow_node?)?
+
+ def parse_flow_mapping_first_key(self):
+ token = self.get_token()
+ self.marks.append(token.start_mark)
+ return self.parse_flow_mapping_key(first=True)
+
+ def parse_flow_mapping_key(self, first=False):
+ if not self.check_token(FlowMappingEndToken):
+ if not first:
+ if self.check_token(FlowEntryToken):
+ self.get_token()
+ else:
+ token = self.peek_token()
+ raise ParserError("while parsing a flow mapping", self.marks[-1],
+ "expected ',' or '}', but got %r" % token.id, token.start_mark)
+ if self.check_token(KeyToken):
+ token = self.get_token()
+ if not self.check_token(ValueToken,
+ FlowEntryToken, FlowMappingEndToken):
+ self.states.append(self.parse_flow_mapping_value)
+ return self.parse_flow_node()
+ else:
+ self.state = self.parse_flow_mapping_value
+ return self.process_empty_scalar(token.end_mark)
+ elif not self.check_token(FlowMappingEndToken):
+ self.states.append(self.parse_flow_mapping_empty_value)
+ return self.parse_flow_node()
+ token = self.get_token()
+ event = MappingEndEvent(token.start_mark, token.end_mark)
+ self.state = self.states.pop()
+ self.marks.pop()
+ return event
+
+ def parse_flow_mapping_value(self):
+ if self.check_token(ValueToken):
+ token = self.get_token()
+ if not self.check_token(FlowEntryToken, FlowMappingEndToken):
+ self.states.append(self.parse_flow_mapping_key)
+ return self.parse_flow_node()
+ else:
+ self.state = self.parse_flow_mapping_key
+ return self.process_empty_scalar(token.end_mark)
+ else:
+ self.state = self.parse_flow_mapping_key
+ token = self.peek_token()
+ return self.process_empty_scalar(token.start_mark)
+
+ def parse_flow_mapping_empty_value(self):
+ self.state = self.parse_flow_mapping_key
+ return self.process_empty_scalar(self.peek_token().start_mark)
+
+ def process_empty_scalar(self, mark):
+ return ScalarEvent(None, None, (True, False), u'', mark, mark)
+
diff --git a/yaml/lib/yaml/reader.py b/yaml/lib/yaml/reader.py
new file mode 100644
index 0000000000..4b377d61e2
--- /dev/null
+++ b/yaml/lib/yaml/reader.py
@@ -0,0 +1,188 @@
+# This module contains abstractions for the input stream. You don't have to
+# looks further, there are no pretty code.
+#
+# We define two classes here.
+#
+# Mark(source, line, column)
+# It's just a record and its only use is producing nice error messages.
+# Parser does not use it for any other purposes.
+#
+# Reader(source, data)
+# Reader determines the encoding of `data` and converts it to unicode.
+# Reader provides the following methods and attributes:
+# reader.peek(length=1) - return the next `length` characters
+# reader.forward(length=1) - move the current position to `length` characters.
+# reader.index - the number of the current character.
+# reader.line, stream.column - the line and the column of the current character.
+
+__all__ = ['Reader', 'ReaderError']
+
+from error import YAMLError, Mark
+
+import codecs, re, sys
+
+has_ucs4 = sys.maxunicode > 0xffff
+
+class ReaderError(YAMLError):
+
+ def __init__(self, name, position, character, encoding, reason):
+ self.name = name
+ self.character = character
+ self.position = position
+ self.encoding = encoding
+ self.reason = reason
+
+ def __str__(self):
+ if isinstance(self.character, str):
+ return "'%s' codec can't decode byte #x%02x: %s\n" \
+ " in \"%s\", position %d" \
+ % (self.encoding, ord(self.character), self.reason,
+ self.name, self.position)
+ else:
+ return "unacceptable character #x%04x: %s\n" \
+ " in \"%s\", position %d" \
+ % (self.character, self.reason,
+ self.name, self.position)
+
+class Reader(object):
+ # Reader:
+ # - determines the data encoding and converts it to unicode,
+ # - checks if characters are in allowed range,
+ # - adds '\0' to the end.
+
+ # Reader accepts
+ # - a `str` object,
+ # - a `unicode` object,
+ # - a file-like object with its `read` method returning `str`,
+ # - a file-like object with its `read` method returning `unicode`.
+
+ # Yeah, it's ugly and slow.
+
+ def __init__(self, stream):
+ self.name = None
+ self.stream = None
+ self.stream_pointer = 0
+ self.eof = True
+ self.buffer = u''
+ self.pointer = 0
+ self.raw_buffer = None
+ self.raw_decode = None
+ self.encoding = None
+ self.index = 0
+ self.line = 0
+ self.column = 0
+ if isinstance(stream, unicode):
+ self.name = "<unicode string>"
+ self.check_printable(stream)
+ self.buffer = stream+u'\0'
+ elif isinstance(stream, str):
+ self.name = "<string>"
+ self.raw_buffer = stream
+ self.determine_encoding()
+ else:
+ self.stream = stream
+ self.name = getattr(stream, 'name', "<file>")
+ self.eof = False
+ self.raw_buffer = ''
+ self.determine_encoding()
+
+ def peek(self, index=0):
+ try:
+ return self.buffer[self.pointer+index]
+ except IndexError:
+ self.update(index+1)
+ return self.buffer[self.pointer+index]
+
+ def prefix(self, length=1):
+ if self.pointer+length >= len(self.buffer):
+ self.update(length)
+ return self.buffer[self.pointer:self.pointer+length]
+
+ def forward(self, length=1):
+ if self.pointer+length+1 >= len(self.buffer):
+ self.update(length+1)
+ while length:
+ ch = self.buffer[self.pointer]
+ self.pointer += 1
+ self.index += 1
+ if ch in u'\n\x85\u2028\u2029' \
+ or (ch == u'\r' and self.buffer[self.pointer] != u'\n'):
+ self.line += 1
+ self.column = 0
+ elif ch != u'\uFEFF':
+ self.column += 1
+ length -= 1
+
+ def get_mark(self):
+ if self.stream is None:
+ return Mark(self.name, self.index, self.line, self.column,
+ self.buffer, self.pointer)
+ else:
+ return Mark(self.name, self.index, self.line, self.column,
+ None, None)
+
+ def determine_encoding(self):
+ while not self.eof and len(self.raw_buffer) < 2:
+ self.update_raw()
+ if not isinstance(self.raw_buffer, unicode):
+ if self.raw_buffer.startswith(codecs.BOM_UTF16_LE):
+ self.raw_decode = codecs.utf_16_le_decode
+ self.encoding = 'utf-16-le'
+ elif self.raw_buffer.startswith(codecs.BOM_UTF16_BE):
+ self.raw_decode = codecs.utf_16_be_decode
+ self.encoding = 'utf-16-be'
+ else:
+ self.raw_decode = codecs.utf_8_decode
+ self.encoding = 'utf-8'
+ self.update(1)
+
+ if has_ucs4:
+ NON_PRINTABLE = re.compile(u'[^\x09\x0A\x0D\x20-\x7E\x85\xA0-\uD7FF\uE000-\uFFFD\U00010000-\U0010ffff]')
+ else:
+ NON_PRINTABLE = re.compile(u'[^\x09\x0A\x0D\x20-\x7E\x85\xA0-\uFFFD]|(?:^|[^\uD800-\uDBFF])[\uDC00-\uDFFF]|[\uD800-\uDBFF](?:[^\uDC00-\uDFFF]|$)')
+ def check_printable(self, data):
+ match = self.NON_PRINTABLE.search(data)
+ if match:
+ character = match.group()
+ position = self.index+(len(self.buffer)-self.pointer)+match.start()
+ raise ReaderError(self.name, position, ord(character),
+ 'unicode', "special characters are not allowed")
+
+ def update(self, length):
+ if self.raw_buffer is None:
+ return
+ self.buffer = self.buffer[self.pointer:]
+ self.pointer = 0
+ while len(self.buffer) < length:
+ if not self.eof:
+ self.update_raw()
+ if self.raw_decode is not None:
+ try:
+ data, converted = self.raw_decode(self.raw_buffer,
+ 'strict', self.eof)
+ except UnicodeDecodeError, exc:
+ character = exc.object[exc.start]
+ if self.stream is not None:
+ position = self.stream_pointer-len(self.raw_buffer)+exc.start
+ else:
+ position = exc.start
+ raise ReaderError(self.name, position, character,
+ exc.encoding, exc.reason)
+ else:
+ data = self.raw_buffer
+ converted = len(data)
+ self.check_printable(data)
+ self.buffer += data
+ self.raw_buffer = self.raw_buffer[converted:]
+ if self.eof:
+ self.buffer += u'\0'
+ self.raw_buffer = None
+ break
+
+ def update_raw(self, size=1024):
+ data = self.stream.read(size)
+ if data:
+ self.raw_buffer += data
+ self.stream_pointer += len(data)
+ else:
+ self.eof = True
diff --git a/yaml/lib/yaml/representer.py b/yaml/lib/yaml/representer.py
new file mode 100644
index 0000000000..93e09b67b3
--- /dev/null
+++ b/yaml/lib/yaml/representer.py
@@ -0,0 +1,489 @@
+
+__all__ = ['BaseRepresenter', 'SafeRepresenter', 'Representer',
+ 'RepresenterError']
+
+from error import *
+
+from nodes import *
+
+import datetime
+
+import copy_reg, types
+
+class RepresenterError(YAMLError):
+ pass
+
+class BaseRepresenter(object):
+
+ yaml_representers = {}
+ yaml_multi_representers = {}
+
+ def __init__(self, default_style=None, default_flow_style=False, sort_keys=True):
+ self.default_style = default_style
+ self.default_flow_style = default_flow_style
+ self.sort_keys = sort_keys
+ self.represented_objects = {}
+ self.object_keeper = []
+ self.alias_key = None
+
+ def represent(self, data):
+ node = self.represent_data(data)
+ self.serialize(node)
+ self.represented_objects = {}
+ self.object_keeper = []
+ self.alias_key = None
+
+ def get_classobj_bases(self, cls):
+ bases = [cls]
+ for base in cls.__bases__:
+ bases.extend(self.get_classobj_bases(base))
+ return bases
+
+ def represent_data(self, data):
+ if self.ignore_aliases(data):
+ self.alias_key = None
+ else:
+ self.alias_key = id(data)
+ if self.alias_key is not None:
+ if self.alias_key in self.represented_objects:
+ node = self.represented_objects[self.alias_key]
+ #if node is None:
+ # raise RepresenterError("recursive objects are not allowed: %r" % data)
+ return node
+ #self.represented_objects[alias_key] = None
+ self.object_keeper.append(data)
+ data_types = type(data).__mro__
+ if type(data) is types.InstanceType:
+ data_types = self.get_classobj_bases(data.__class__)+list(data_types)
+ if data_types[0] in self.yaml_representers:
+ node = self.yaml_representers[data_types[0]](self, data)
+ else:
+ for data_type in data_types:
+ if data_type in self.yaml_multi_representers:
+ node = self.yaml_multi_representers[data_type](self, data)
+ break
+ else:
+ if None in self.yaml_multi_representers:
+ node = self.yaml_multi_representers[None](self, data)
+ elif None in self.yaml_representers:
+ node = self.yaml_representers[None](self, data)
+ else:
+ node = ScalarNode(None, unicode(data))
+ #if alias_key is not None:
+ # self.represented_objects[alias_key] = node
+ return node
+
+ def add_representer(cls, data_type, representer):
+ if not 'yaml_representers' in cls.__dict__:
+ cls.yaml_representers = cls.yaml_representers.copy()
+ cls.yaml_representers[data_type] = representer
+ add_representer = classmethod(add_representer)
+
+ def add_multi_representer(cls, data_type, representer):
+ if not 'yaml_multi_representers' in cls.__dict__:
+ cls.yaml_multi_representers = cls.yaml_multi_representers.copy()
+ cls.yaml_multi_representers[data_type] = representer
+ add_multi_representer = classmethod(add_multi_representer)
+
+ def represent_scalar(self, tag, value, style=None):
+ if style is None:
+ style = self.default_style
+ node = ScalarNode(tag, value, style=style)
+ if self.alias_key is not None:
+ self.represented_objects[self.alias_key] = node
+ return node
+
+ def represent_sequence(self, tag, sequence, flow_style=None):
+ value = []
+ node = SequenceNode(tag, value, flow_style=flow_style)
+ if self.alias_key is not None:
+ self.represented_objects[self.alias_key] = node
+ best_style = True
+ for item in sequence:
+ node_item = self.represent_data(item)
+ if not (isinstance(node_item, ScalarNode) and not node_item.style):
+ best_style = False
+ value.append(node_item)
+ if flow_style is None:
+ if self.default_flow_style is not None:
+ node.flow_style = self.default_flow_style
+ else:
+ node.flow_style = best_style
+ return node
+
+ def represent_mapping(self, tag, mapping, flow_style=None):
+ value = []
+ node = MappingNode(tag, value, flow_style=flow_style)
+ if self.alias_key is not None:
+ self.represented_objects[self.alias_key] = node
+ best_style = True
+ if hasattr(mapping, 'items'):
+ mapping = mapping.items()
+ if self.sort_keys:
+ mapping.sort()
+ for item_key, item_value in mapping:
+ node_key = self.represent_data(item_key)
+ node_value = self.represent_data(item_value)
+ if not (isinstance(node_key, ScalarNode) and not node_key.style):
+ best_style = False
+ if not (isinstance(node_value, ScalarNode) and not node_value.style):
+ best_style = False
+ value.append((node_key, node_value))
+ if flow_style is None:
+ if self.default_flow_style is not None:
+ node.flow_style = self.default_flow_style
+ else:
+ node.flow_style = best_style
+ return node
+
+ def ignore_aliases(self, data):
+ return False
+
+class SafeRepresenter(BaseRepresenter):
+
+ def ignore_aliases(self, data):
+ if data is None:
+ return True
+ if isinstance(data, tuple) and data == ():
+ return True
+ if isinstance(data, (str, unicode, bool, int, float)):
+ return True
+
+ def represent_none(self, data):
+ return self.represent_scalar(u'tag:yaml.org,2002:null',
+ u'null')
+
+ def represent_str(self, data):
+ tag = None
+ style = None
+ try:
+ data = unicode(data, 'ascii')
+ tag = u'tag:yaml.org,2002:str'
+ except UnicodeDecodeError:
+ try:
+ data = unicode(data, 'utf-8')
+ tag = u'tag:yaml.org,2002:str'
+ except UnicodeDecodeError:
+ data = data.encode('base64')
+ tag = u'tag:yaml.org,2002:binary'
+ style = '|'
+ return self.represent_scalar(tag, data, style=style)
+
+ def represent_unicode(self, data):
+ return self.represent_scalar(u'tag:yaml.org,2002:str', data)
+
+ def represent_bool(self, data):
+ if data:
+ value = u'true'
+ else:
+ value = u'false'
+ return self.represent_scalar(u'tag:yaml.org,2002:bool', value)
+
+ def represent_int(self, data):
+ return self.represent_scalar(u'tag:yaml.org,2002:int', unicode(data))
+
+ def represent_long(self, data):
+ return self.represent_scalar(u'tag:yaml.org,2002:int', unicode(data))
+
+ inf_value = 1e300
+ while repr(inf_value) != repr(inf_value*inf_value):
+ inf_value *= inf_value
+
+ def represent_float(self, data):
+ if data != data or (data == 0.0 and data == 1.0):
+ value = u'.nan'
+ elif data == self.inf_value:
+ value = u'.inf'
+ elif data == -self.inf_value:
+ value = u'-.inf'
+ else:
+ value = unicode(repr(data)).lower()
+ # Note that in some cases `repr(data)` represents a float number
+ # without the decimal parts. For instance:
+ # >>> repr(1e17)
+ # '1e17'
+ # Unfortunately, this is not a valid float representation according
+ # to the definition of the `!!float` tag. We fix this by adding
+ # '.0' before the 'e' symbol.
+ if u'.' not in value and u'e' in value:
+ value = value.replace(u'e', u'.0e', 1)
+ return self.represent_scalar(u'tag:yaml.org,2002:float', value)
+
+ def represent_list(self, data):
+ #pairs = (len(data) > 0 and isinstance(data, list))
+ #if pairs:
+ # for item in data:
+ # if not isinstance(item, tuple) or len(item) != 2:
+ # pairs = False
+ # break
+ #if not pairs:
+ return self.represent_sequence(u'tag:yaml.org,2002:seq', data)
+ #value = []
+ #for item_key, item_value in data:
+ # value.append(self.represent_mapping(u'tag:yaml.org,2002:map',
+ # [(item_key, item_value)]))
+ #return SequenceNode(u'tag:yaml.org,2002:pairs', value)
+
+ def represent_dict(self, data):
+ return self.represent_mapping(u'tag:yaml.org,2002:map', data)
+
+ def represent_set(self, data):
+ value = {}
+ for key in data:
+ value[key] = None
+ return self.represent_mapping(u'tag:yaml.org,2002:set', value)
+
+ def represent_date(self, data):
+ value = unicode(data.isoformat())
+ return self.represent_scalar(u'tag:yaml.org,2002:timestamp', value)
+
+ def represent_datetime(self, data):
+ value = unicode(data.isoformat(' '))
+ return self.represent_scalar(u'tag:yaml.org,2002:timestamp', value)
+
+ def represent_yaml_object(self, tag, data, cls, flow_style=None):
+ if hasattr(data, '__getstate__'):
+ state = data.__getstate__()
+ else:
+ state = data.__dict__.copy()
+ return self.represent_mapping(tag, state, flow_style=flow_style)
+
+ def represent_undefined(self, data):
+ raise RepresenterError("cannot represent an object", data)
+
+SafeRepresenter.add_representer(type(None),
+ SafeRepresenter.represent_none)
+
+SafeRepresenter.add_representer(str,
+ SafeRepresenter.represent_str)
+
+SafeRepresenter.add_representer(unicode,
+ SafeRepresenter.represent_unicode)
+
+SafeRepresenter.add_representer(bool,
+ SafeRepresenter.represent_bool)
+
+SafeRepresenter.add_representer(int,
+ SafeRepresenter.represent_int)
+
+SafeRepresenter.add_representer(long,
+ SafeRepresenter.represent_long)
+
+SafeRepresenter.add_representer(float,
+ SafeRepresenter.represent_float)
+
+SafeRepresenter.add_representer(list,
+ SafeRepresenter.represent_list)
+
+SafeRepresenter.add_representer(tuple,
+ SafeRepresenter.represent_list)
+
+SafeRepresenter.add_representer(dict,
+ SafeRepresenter.represent_dict)
+
+SafeRepresenter.add_representer(set,
+ SafeRepresenter.represent_set)
+
+SafeRepresenter.add_representer(datetime.date,
+ SafeRepresenter.represent_date)
+
+SafeRepresenter.add_representer(datetime.datetime,
+ SafeRepresenter.represent_datetime)
+
+SafeRepresenter.add_representer(None,
+ SafeRepresenter.represent_undefined)
+
+class Representer(SafeRepresenter):
+
+ def represent_str(self, data):
+ tag = None
+ style = None
+ try:
+ data = unicode(data, 'ascii')
+ tag = u'tag:yaml.org,2002:str'
+ except UnicodeDecodeError:
+ try:
+ data = unicode(data, 'utf-8')
+ tag = u'tag:yaml.org,2002:python/str'
+ except UnicodeDecodeError:
+ data = data.encode('base64')
+ tag = u'tag:yaml.org,2002:binary'
+ style = '|'
+ return self.represent_scalar(tag, data, style=style)
+
+ def represent_unicode(self, data):
+ tag = None
+ try:
+ data.encode('ascii')
+ tag = u'tag:yaml.org,2002:python/unicode'
+ except UnicodeEncodeError:
+ tag = u'tag:yaml.org,2002:str'
+ return self.represent_scalar(tag, data)
+
+ def represent_long(self, data):
+ tag = u'tag:yaml.org,2002:int'
+ if int(data) is not data:
+ tag = u'tag:yaml.org,2002:python/long'
+ return self.represent_scalar(tag, unicode(data))
+
+ def represent_complex(self, data):
+ if data.imag == 0.0:
+ data = u'%r' % data.real
+ elif data.real == 0.0:
+ data = u'%rj' % data.imag
+ elif data.imag > 0:
+ data = u'%r+%rj' % (data.real, data.imag)
+ else:
+ data = u'%r%rj' % (data.real, data.imag)
+ return self.represent_scalar(u'tag:yaml.org,2002:python/complex', data)
+
+ def represent_tuple(self, data):
+ return self.represent_sequence(u'tag:yaml.org,2002:python/tuple', data)
+
+ def represent_name(self, data):
+ name = u'%s.%s' % (data.__module__, data.__name__)
+ return self.represent_scalar(u'tag:yaml.org,2002:python/name:'+name, u'')
+
+ def represent_module(self, data):
+ return self.represent_scalar(
+ u'tag:yaml.org,2002:python/module:'+data.__name__, u'')
+
+ def represent_instance(self, data):
+ # For instances of classic classes, we use __getinitargs__ and
+ # __getstate__ to serialize the data.
+
+ # If data.__getinitargs__ exists, the object must be reconstructed by
+ # calling cls(**args), where args is a tuple returned by
+ # __getinitargs__. Otherwise, the cls.__init__ method should never be
+ # called and the class instance is created by instantiating a trivial
+ # class and assigning to the instance's __class__ variable.
+
+ # If data.__getstate__ exists, it returns the state of the object.
+ # Otherwise, the state of the object is data.__dict__.
+
+ # We produce either a !!python/object or !!python/object/new node.
+ # If data.__getinitargs__ does not exist and state is a dictionary, we
+ # produce a !!python/object node . Otherwise we produce a
+ # !!python/object/new node.
+
+ cls = data.__class__
+ class_name = u'%s.%s' % (cls.__module__, cls.__name__)
+ args = None
+ state = None
+ if hasattr(data, '__getinitargs__'):
+ args = list(data.__getinitargs__())
+ if hasattr(data, '__getstate__'):
+ state = data.__getstate__()
+ else:
+ state = data.__dict__
+ if args is None and isinstance(state, dict):
+ return self.represent_mapping(
+ u'tag:yaml.org,2002:python/object:'+class_name, state)
+ if isinstance(state, dict) and not state:
+ return self.represent_sequence(
+ u'tag:yaml.org,2002:python/object/new:'+class_name, args)
+ value = {}
+ if args:
+ value['args'] = args
+ value['state'] = state
+ return self.represent_mapping(
+ u'tag:yaml.org,2002:python/object/new:'+class_name, value)
+
+ def represent_object(self, data):
+ # We use __reduce__ API to save the data. data.__reduce__ returns
+ # a tuple of length 2-5:
+ # (function, args, state, listitems, dictitems)
+
+ # For reconstructing, we calls function(*args), then set its state,
+ # listitems, and dictitems if they are not None.
+
+ # A special case is when function.__name__ == '__newobj__'. In this
+ # case we create the object with args[0].__new__(*args).
+
+ # Another special case is when __reduce__ returns a string - we don't
+ # support it.
+
+ # We produce a !!python/object, !!python/object/new or
+ # !!python/object/apply node.
+
+ cls = type(data)
+ if cls in copy_reg.dispatch_table:
+ reduce = copy_reg.dispatch_table[cls](data)
+ elif hasattr(data, '__reduce_ex__'):
+ reduce = data.__reduce_ex__(2)
+ elif hasattr(data, '__reduce__'):
+ reduce = data.__reduce__()
+ else:
+ raise RepresenterError("cannot represent an object", data)
+ reduce = (list(reduce)+[None]*5)[:5]
+ function, args, state, listitems, dictitems = reduce
+ args = list(args)
+ if state is None:
+ state = {}
+ if listitems is not None:
+ listitems = list(listitems)
+ if dictitems is not None:
+ dictitems = dict(dictitems)
+ if function.__name__ == '__newobj__':
+ function = args[0]
+ args = args[1:]
+ tag = u'tag:yaml.org,2002:python/object/new:'
+ newobj = True
+ else:
+ tag = u'tag:yaml.org,2002:python/object/apply:'
+ newobj = False
+ function_name = u'%s.%s' % (function.__module__, function.__name__)
+ if not args and not listitems and not dictitems \
+ and isinstance(state, dict) and newobj:
+ return self.represent_mapping(
+ u'tag:yaml.org,2002:python/object:'+function_name, state)
+ if not listitems and not dictitems \
+ and isinstance(state, dict) and not state:
+ return self.represent_sequence(tag+function_name, args)
+ value = {}
+ if args:
+ value['args'] = args
+ if state or not isinstance(state, dict):
+ value['state'] = state
+ if listitems:
+ value['listitems'] = listitems
+ if dictitems:
+ value['dictitems'] = dictitems
+ return self.represent_mapping(tag+function_name, value)
+
+Representer.add_representer(str,
+ Representer.represent_str)
+
+Representer.add_representer(unicode,
+ Representer.represent_unicode)
+
+Representer.add_representer(long,
+ Representer.represent_long)
+
+Representer.add_representer(complex,
+ Representer.represent_complex)
+
+Representer.add_representer(tuple,
+ Representer.represent_tuple)
+
+Representer.add_representer(type,
+ Representer.represent_name)
+
+Representer.add_representer(types.ClassType,
+ Representer.represent_name)
+
+Representer.add_representer(types.FunctionType,
+ Representer.represent_name)
+
+Representer.add_representer(types.BuiltinFunctionType,
+ Representer.represent_name)
+
+Representer.add_representer(types.ModuleType,
+ Representer.represent_module)
+
+Representer.add_multi_representer(types.InstanceType,
+ Representer.represent_instance)
+
+Representer.add_multi_representer(object,
+ Representer.represent_object)
+
diff --git a/yaml/lib/yaml/resolver.py b/yaml/lib/yaml/resolver.py
new file mode 100644
index 0000000000..528fbc0ead
--- /dev/null
+++ b/yaml/lib/yaml/resolver.py
@@ -0,0 +1,227 @@
+
+__all__ = ['BaseResolver', 'Resolver']
+
+from error import *
+from nodes import *
+
+import re
+
+class ResolverError(YAMLError):
+ pass
+
+class BaseResolver(object):
+
+ DEFAULT_SCALAR_TAG = u'tag:yaml.org,2002:str'
+ DEFAULT_SEQUENCE_TAG = u'tag:yaml.org,2002:seq'
+ DEFAULT_MAPPING_TAG = u'tag:yaml.org,2002:map'
+
+ yaml_implicit_resolvers = {}
+ yaml_path_resolvers = {}
+
+ def __init__(self):
+ self.resolver_exact_paths = []
+ self.resolver_prefix_paths = []
+
+ def add_implicit_resolver(cls, tag, regexp, first):
+ if not 'yaml_implicit_resolvers' in cls.__dict__:
+ implicit_resolvers = {}
+ for key in cls.yaml_implicit_resolvers:
+ implicit_resolvers[key] = cls.yaml_implicit_resolvers[key][:]
+ cls.yaml_implicit_resolvers = implicit_resolvers
+ if first is None:
+ first = [None]
+ for ch in first:
+ cls.yaml_implicit_resolvers.setdefault(ch, []).append((tag, regexp))
+ add_implicit_resolver = classmethod(add_implicit_resolver)
+
+ def add_path_resolver(cls, tag, path, kind=None):
+ # Note: `add_path_resolver` is experimental. The API could be changed.
+ # `new_path` is a pattern that is matched against the path from the
+ # root to the node that is being considered. `node_path` elements are
+ # tuples `(node_check, index_check)`. `node_check` is a node class:
+ # `ScalarNode`, `SequenceNode`, `MappingNode` or `None`. `None`
+ # matches any kind of a node. `index_check` could be `None`, a boolean
+ # value, a string value, or a number. `None` and `False` match against
+ # any _value_ of sequence and mapping nodes. `True` matches against
+ # any _key_ of a mapping node. A string `index_check` matches against
+ # a mapping value that corresponds to a scalar key which content is
+ # equal to the `index_check` value. An integer `index_check` matches
+ # against a sequence value with the index equal to `index_check`.
+ if not 'yaml_path_resolvers' in cls.__dict__:
+ cls.yaml_path_resolvers = cls.yaml_path_resolvers.copy()
+ new_path = []
+ for element in path:
+ if isinstance(element, (list, tuple)):
+ if len(element) == 2:
+ node_check, index_check = element
+ elif len(element) == 1:
+ node_check = element[0]
+ index_check = True
+ else:
+ raise ResolverError("Invalid path element: %s" % element)
+ else:
+ node_check = None
+ index_check = element
+ if node_check is str:
+ node_check = ScalarNode
+ elif node_check is list:
+ node_check = SequenceNode
+ elif node_check is dict:
+ node_check = MappingNode
+ elif node_check not in [ScalarNode, SequenceNode, MappingNode] \
+ and not isinstance(node_check, basestring) \
+ and node_check is not None:
+ raise ResolverError("Invalid node checker: %s" % node_check)
+ if not isinstance(index_check, (basestring, int)) \
+ and index_check is not None:
+ raise ResolverError("Invalid index checker: %s" % index_check)
+ new_path.append((node_check, index_check))
+ if kind is str:
+ kind = ScalarNode
+ elif kind is list:
+ kind = SequenceNode
+ elif kind is dict:
+ kind = MappingNode
+ elif kind not in [ScalarNode, SequenceNode, MappingNode] \
+ and kind is not None:
+ raise ResolverError("Invalid node kind: %s" % kind)
+ cls.yaml_path_resolvers[tuple(new_path), kind] = tag
+ add_path_resolver = classmethod(add_path_resolver)
+
+ def descend_resolver(self, current_node, current_index):
+ if not self.yaml_path_resolvers:
+ return
+ exact_paths = {}
+ prefix_paths = []
+ if current_node:
+ depth = len(self.resolver_prefix_paths)
+ for path, kind in self.resolver_prefix_paths[-1]:
+ if self.check_resolver_prefix(depth, path, kind,
+ current_node, current_index):
+ if len(path) > depth:
+ prefix_paths.append((path, kind))
+ else:
+ exact_paths[kind] = self.yaml_path_resolvers[path, kind]
+ else:
+ for path, kind in self.yaml_path_resolvers:
+ if not path:
+ exact_paths[kind] = self.yaml_path_resolvers[path, kind]
+ else:
+ prefix_paths.append((path, kind))
+ self.resolver_exact_paths.append(exact_paths)
+ self.resolver_prefix_paths.append(prefix_paths)
+
+ def ascend_resolver(self):
+ if not self.yaml_path_resolvers:
+ return
+ self.resolver_exact_paths.pop()
+ self.resolver_prefix_paths.pop()
+
+ def check_resolver_prefix(self, depth, path, kind,
+ current_node, current_index):
+ node_check, index_check = path[depth-1]
+ if isinstance(node_check, basestring):
+ if current_node.tag != node_check:
+ return
+ elif node_check is not None:
+ if not isinstance(current_node, node_check):
+ return
+ if index_check is True and current_index is not None:
+ return
+ if (index_check is False or index_check is None) \
+ and current_index is None:
+ return
+ if isinstance(index_check, basestring):
+ if not (isinstance(current_index, ScalarNode)
+ and index_check == current_index.value):
+ return
+ elif isinstance(index_check, int) and not isinstance(index_check, bool):
+ if index_check != current_index:
+ return
+ return True
+
+ def resolve(self, kind, value, implicit):
+ if kind is ScalarNode and implicit[0]:
+ if value == u'':
+ resolvers = self.yaml_implicit_resolvers.get(u'', [])
+ else:
+ resolvers = self.yaml_implicit_resolvers.get(value[0], [])
+ resolvers += self.yaml_implicit_resolvers.get(None, [])
+ for tag, regexp in resolvers:
+ if regexp.match(value):
+ return tag
+ implicit = implicit[1]
+ if self.yaml_path_resolvers:
+ exact_paths = self.resolver_exact_paths[-1]
+ if kind in exact_paths:
+ return exact_paths[kind]
+ if None in exact_paths:
+ return exact_paths[None]
+ if kind is ScalarNode:
+ return self.DEFAULT_SCALAR_TAG
+ elif kind is SequenceNode:
+ return self.DEFAULT_SEQUENCE_TAG
+ elif kind is MappingNode:
+ return self.DEFAULT_MAPPING_TAG
+
+class Resolver(BaseResolver):
+ pass
+
+Resolver.add_implicit_resolver(
+ u'tag:yaml.org,2002:bool',
+ re.compile(ur'''^(?:yes|Yes|YES|no|No|NO
+ |true|True|TRUE|false|False|FALSE
+ |on|On|ON|off|Off|OFF)$''', re.X),
+ list(u'yYnNtTfFoO'))
+
+Resolver.add_implicit_resolver(
+ u'tag:yaml.org,2002:float',
+ re.compile(ur'''^(?:[-+]?(?:[0-9][0-9_]*)\.[0-9_]*(?:[eE][-+][0-9]+)?
+ |\.[0-9_]+(?:[eE][-+][0-9]+)?
+ |[-+]?[0-9][0-9_]*(?::[0-5]?[0-9])+\.[0-9_]*
+ |[-+]?\.(?:inf|Inf|INF)
+ |\.(?:nan|NaN|NAN))$''', re.X),
+ list(u'-+0123456789.'))
+
+Resolver.add_implicit_resolver(
+ u'tag:yaml.org,2002:int',
+ re.compile(ur'''^(?:[-+]?0b[0-1_]+
+ |[-+]?0[0-7_]+
+ |[-+]?(?:0|[1-9][0-9_]*)
+ |[-+]?0x[0-9a-fA-F_]+
+ |[-+]?[1-9][0-9_]*(?::[0-5]?[0-9])+)$''', re.X),
+ list(u'-+0123456789'))
+
+Resolver.add_implicit_resolver(
+ u'tag:yaml.org,2002:merge',
+ re.compile(ur'^(?:<<)$'),
+ [u'<'])
+
+Resolver.add_implicit_resolver(
+ u'tag:yaml.org,2002:null',
+ re.compile(ur'''^(?: ~
+ |null|Null|NULL
+ | )$''', re.X),
+ [u'~', u'n', u'N', u''])
+
+Resolver.add_implicit_resolver(
+ u'tag:yaml.org,2002:timestamp',
+ re.compile(ur'''^(?:[0-9][0-9][0-9][0-9]-[0-9][0-9]-[0-9][0-9]
+ |[0-9][0-9][0-9][0-9] -[0-9][0-9]? -[0-9][0-9]?
+ (?:[Tt]|[ \t]+)[0-9][0-9]?
+ :[0-9][0-9] :[0-9][0-9] (?:\.[0-9]*)?
+ (?:[ \t]*(?:Z|[-+][0-9][0-9]?(?::[0-9][0-9])?))?)$''', re.X),
+ list(u'0123456789'))
+
+Resolver.add_implicit_resolver(
+ u'tag:yaml.org,2002:value',
+ re.compile(ur'^(?:=)$'),
+ [u'='])
+
+# The following resolver is only for documentation purposes. It cannot work
+# because plain scalars cannot start with '!', '&', or '*'.
+Resolver.add_implicit_resolver(
+ u'tag:yaml.org,2002:yaml',
+ re.compile(ur'^(?:!|&|\*)$'),
+ list(u'!&*'))
+
diff --git a/yaml/lib/yaml/scanner.py b/yaml/lib/yaml/scanner.py
new file mode 100644
index 0000000000..098ea7be82
--- /dev/null
+++ b/yaml/lib/yaml/scanner.py
@@ -0,0 +1,1444 @@
+
+# Scanner produces tokens of the following types:
+# STREAM-START
+# STREAM-END
+# DIRECTIVE(name, value)
+# DOCUMENT-START
+# DOCUMENT-END
+# BLOCK-SEQUENCE-START
+# BLOCK-MAPPING-START
+# BLOCK-END
+# FLOW-SEQUENCE-START
+# FLOW-MAPPING-START
+# FLOW-SEQUENCE-END
+# FLOW-MAPPING-END
+# BLOCK-ENTRY
+# FLOW-ENTRY
+# KEY
+# VALUE
+# ALIAS(value)
+# ANCHOR(value)
+# TAG(value)
+# SCALAR(value, plain, style)
+#
+# Read comments in the Scanner code for more details.
+#
+
+__all__ = ['Scanner', 'ScannerError']
+
+from error import MarkedYAMLError
+from tokens import *
+
+class ScannerError(MarkedYAMLError):
+ pass
+
+class SimpleKey(object):
+ # See below simple keys treatment.
+
+ def __init__(self, token_number, required, index, line, column, mark):
+ self.token_number = token_number
+ self.required = required
+ self.index = index
+ self.line = line
+ self.column = column
+ self.mark = mark
+
+class Scanner(object):
+
+ def __init__(self):
+ """Initialize the scanner."""
+ # It is assumed that Scanner and Reader will have a common descendant.
+ # Reader do the dirty work of checking for BOM and converting the
+ # input data to Unicode. It also adds NUL to the end.
+ #
+ # Reader supports the following methods
+ # self.peek(i=0) # peek the next i-th character
+ # self.prefix(l=1) # peek the next l characters
+ # self.forward(l=1) # read the next l characters and move the pointer.
+
+ # Had we reached the end of the stream?
+ self.done = False
+
+ # The number of unclosed '{' and '['. `flow_level == 0` means block
+ # context.
+ self.flow_level = 0
+
+ # List of processed tokens that are not yet emitted.
+ self.tokens = []
+
+ # Add the STREAM-START token.
+ self.fetch_stream_start()
+
+ # Number of tokens that were emitted through the `get_token` method.
+ self.tokens_taken = 0
+
+ # The current indentation level.
+ self.indent = -1
+
+ # Past indentation levels.
+ self.indents = []
+
+ # Variables related to simple keys treatment.
+
+ # A simple key is a key that is not denoted by the '?' indicator.
+ # Example of simple keys:
+ # ---
+ # block simple key: value
+ # ? not a simple key:
+ # : { flow simple key: value }
+ # We emit the KEY token before all keys, so when we find a potential
+ # simple key, we try to locate the corresponding ':' indicator.
+ # Simple keys should be limited to a single line and 1024 characters.
+
+ # Can a simple key start at the current position? A simple key may
+ # start:
+ # - at the beginning of the line, not counting indentation spaces
+ # (in block context),
+ # - after '{', '[', ',' (in the flow context),
+ # - after '?', ':', '-' (in the block context).
+ # In the block context, this flag also signifies if a block collection
+ # may start at the current position.
+ self.allow_simple_key = True
+
+ # Keep track of possible simple keys. This is a dictionary. The key
+ # is `flow_level`; there can be no more that one possible simple key
+ # for each level. The value is a SimpleKey record:
+ # (token_number, required, index, line, column, mark)
+ # A simple key may start with ALIAS, ANCHOR, TAG, SCALAR(flow),
+ # '[', or '{' tokens.
+ self.possible_simple_keys = {}
+
+ # Public methods.
+
+ def check_token(self, *choices):
+ # Check if the next token is one of the given types.
+ while self.need_more_tokens():
+ self.fetch_more_tokens()
+ if self.tokens:
+ if not choices:
+ return True
+ for choice in choices:
+ if isinstance(self.tokens[0], choice):
+ return True
+ return False
+
+ def peek_token(self):
+ # Return the next token, but do not delete if from the queue.
+ # Return None if no more tokens.
+ while self.need_more_tokens():
+ self.fetch_more_tokens()
+ if self.tokens:
+ return self.tokens[0]
+ else:
+ return None
+
+ def get_token(self):
+ # Return the next token.
+ while self.need_more_tokens():
+ self.fetch_more_tokens()
+ if self.tokens:
+ self.tokens_taken += 1
+ return self.tokens.pop(0)
+
+ # Private methods.
+
+ def need_more_tokens(self):
+ if self.done:
+ return False
+ if not self.tokens:
+ return True
+ # The current token may be a potential simple key, so we
+ # need to look further.
+ self.stale_possible_simple_keys()
+ if self.next_possible_simple_key() == self.tokens_taken:
+ return True
+
+ def fetch_more_tokens(self):
+
+ # Eat whitespaces and comments until we reach the next token.
+ self.scan_to_next_token()
+
+ # Remove obsolete possible simple keys.
+ self.stale_possible_simple_keys()
+
+ # Compare the current indentation and column. It may add some tokens
+ # and decrease the current indentation level.
+ self.unwind_indent(self.column)
+
+ # Peek the next character.
+ ch = self.peek()
+
+ # Is it the end of stream?
+ if ch == u'\0':
+ return self.fetch_stream_end()
+
+ # Is it a directive?
+ if ch == u'%' and self.check_directive():
+ return self.fetch_directive()
+
+ # Is it the document start?
+ if ch == u'-' and self.check_document_start():
+ return self.fetch_document_start()
+
+ # Is it the document end?
+ if ch == u'.' and self.check_document_end():
+ return self.fetch_document_end()
+
+ # TODO: support for BOM within a stream.
+ #if ch == u'\uFEFF':
+ # return self.fetch_bom() <-- issue BOMToken
+
+ # Note: the order of the following checks is NOT significant.
+
+ # Is it the flow sequence start indicator?
+ if ch == u'[':
+ return self.fetch_flow_sequence_start()
+
+ # Is it the flow mapping start indicator?
+ if ch == u'{':
+ return self.fetch_flow_mapping_start()
+
+ # Is it the flow sequence end indicator?
+ if ch == u']':
+ return self.fetch_flow_sequence_end()
+
+ # Is it the flow mapping end indicator?
+ if ch == u'}':
+ return self.fetch_flow_mapping_end()
+
+ # Is it the flow entry indicator?
+ if ch == u',':
+ return self.fetch_flow_entry()
+
+ # Is it the block entry indicator?
+ if ch == u'-' and self.check_block_entry():
+ return self.fetch_block_entry()
+
+ # Is it the key indicator?
+ if ch == u'?' and self.check_key():
+ return self.fetch_key()
+
+ # Is it the value indicator?
+ if ch == u':' and self.check_value():
+ return self.fetch_value()
+
+ # Is it an alias?
+ if ch == u'*':
+ return self.fetch_alias()
+
+ # Is it an anchor?
+ if ch == u'&':
+ return self.fetch_anchor()
+
+ # Is it a tag?
+ if ch == u'!':
+ return self.fetch_tag()
+
+ # Is it a literal scalar?
+ if ch == u'|' and not self.flow_level:
+ return self.fetch_literal()
+
+ # Is it a folded scalar?
+ if ch == u'>' and not self.flow_level:
+ return self.fetch_folded()
+
+ # Is it a single quoted scalar?
+ if ch == u'\'':
+ return self.fetch_single()
+
+ # Is it a double quoted scalar?
+ if ch == u'\"':
+ return self.fetch_double()
+
+ # It must be a plain scalar then.
+ if self.check_plain():
+ return self.fetch_plain()
+
+ # No? It's an error. Let's produce a nice error message.
+ raise ScannerError("while scanning for the next token", None,
+ "found character %r that cannot start any token"
+ % ch.encode('utf-8'), self.get_mark())
+
+ # Simple keys treatment.
+
+ def next_possible_simple_key(self):
+ # Return the number of the nearest possible simple key. Actually we
+ # don't need to loop through the whole dictionary. We may replace it
+ # with the following code:
+ # if not self.possible_simple_keys:
+ # return None
+ # return self.possible_simple_keys[
+ # min(self.possible_simple_keys.keys())].token_number
+ min_token_number = None
+ for level in self.possible_simple_keys:
+ key = self.possible_simple_keys[level]
+ if min_token_number is None or key.token_number < min_token_number:
+ min_token_number = key.token_number
+ return min_token_number
+
+ def stale_possible_simple_keys(self):
+ # Remove entries that are no longer possible simple keys. According to
+ # the YAML specification, simple keys
+ # - should be limited to a single line,
+ # - should be no longer than 1024 characters.
+ # Disabling this procedure will allow simple keys of any length and
+ # height (may cause problems if indentation is broken though).
+ for level in self.possible_simple_keys.keys():
+ key = self.possible_simple_keys[level]
+ if key.line != self.line \
+ or self.index-key.index > 1024:
+ if key.required:
+ raise ScannerError("while scanning a simple key", key.mark,
+ "could not find expected ':'", self.get_mark())
+ del self.possible_simple_keys[level]
+
+ def save_possible_simple_key(self):
+ # The next token may start a simple key. We check if it's possible
+ # and save its position. This function is called for
+ # ALIAS, ANCHOR, TAG, SCALAR(flow), '[', and '{'.
+
+ # Check if a simple key is required at the current position.
+ required = not self.flow_level and self.indent == self.column
+
+ # The next token might be a simple key. Let's save it's number and
+ # position.
+ if self.allow_simple_key:
+ self.remove_possible_simple_key()
+ token_number = self.tokens_taken+len(self.tokens)
+ key = SimpleKey(token_number, required,
+ self.index, self.line, self.column, self.get_mark())
+ self.possible_simple_keys[self.flow_level] = key
+
+ def remove_possible_simple_key(self):
+ # Remove the saved possible key position at the current flow level.
+ if self.flow_level in self.possible_simple_keys:
+ key = self.possible_simple_keys[self.flow_level]
+
+ if key.required:
+ raise ScannerError("while scanning a simple key", key.mark,
+ "could not find expected ':'", self.get_mark())
+
+ del self.possible_simple_keys[self.flow_level]
+
+ # Indentation functions.
+
+ def unwind_indent(self, column):
+
+ ## In flow context, tokens should respect indentation.
+ ## Actually the condition should be `self.indent >= column` according to
+ ## the spec. But this condition will prohibit intuitively correct
+ ## constructions such as
+ ## key : {
+ ## }
+ #if self.flow_level and self.indent > column:
+ # raise ScannerError(None, None,
+ # "invalid indentation or unclosed '[' or '{'",
+ # self.get_mark())
+
+ # In the flow context, indentation is ignored. We make the scanner less
+ # restrictive then specification requires.
+ if self.flow_level:
+ return
+
+ # In block context, we may need to issue the BLOCK-END tokens.
+ while self.indent > column:
+ mark = self.get_mark()
+ self.indent = self.indents.pop()
+ self.tokens.append(BlockEndToken(mark, mark))
+
+ def add_indent(self, column):
+ # Check if we need to increase indentation.
+ if self.indent < column:
+ self.indents.append(self.indent)
+ self.indent = column
+ return True
+ return False
+
+ # Fetchers.
+
+ def fetch_stream_start(self):
+ # We always add STREAM-START as the first token and STREAM-END as the
+ # last token.
+
+ # Read the token.
+ mark = self.get_mark()
+
+ # Add STREAM-START.
+ self.tokens.append(StreamStartToken(mark, mark,
+ encoding=self.encoding))
+
+
+ def fetch_stream_end(self):
+
+ # Set the current indentation to -1.
+ self.unwind_indent(-1)
+
+ # Reset simple keys.
+ self.remove_possible_simple_key()
+ self.allow_simple_key = False
+ self.possible_simple_keys = {}
+
+ # Read the token.
+ mark = self.get_mark()
+
+ # Add STREAM-END.
+ self.tokens.append(StreamEndToken(mark, mark))
+
+ # The steam is finished.
+ self.done = True
+
+ def fetch_directive(self):
+
+ # Set the current indentation to -1.
+ self.unwind_indent(-1)
+
+ # Reset simple keys.
+ self.remove_possible_simple_key()
+ self.allow_simple_key = False
+
+ # Scan and add DIRECTIVE.
+ self.tokens.append(self.scan_directive())
+
+ def fetch_document_start(self):
+ self.fetch_document_indicator(DocumentStartToken)
+
+ def fetch_document_end(self):
+ self.fetch_document_indicator(DocumentEndToken)
+
+ def fetch_document_indicator(self, TokenClass):
+
+ # Set the current indentation to -1.
+ self.unwind_indent(-1)
+
+ # Reset simple keys. Note that there could not be a block collection
+ # after '---'.
+ self.remove_possible_simple_key()
+ self.allow_simple_key = False
+
+ # Add DOCUMENT-START or DOCUMENT-END.
+ start_mark = self.get_mark()
+ self.forward(3)
+ end_mark = self.get_mark()
+ self.tokens.append(TokenClass(start_mark, end_mark))
+
+ def fetch_flow_sequence_start(self):
+ self.fetch_flow_collection_start(FlowSequenceStartToken)
+
+ def fetch_flow_mapping_start(self):
+ self.fetch_flow_collection_start(FlowMappingStartToken)
+
+ def fetch_flow_collection_start(self, TokenClass):
+
+ # '[' and '{' may start a simple key.
+ self.save_possible_simple_key()
+
+ # Increase the flow level.
+ self.flow_level += 1
+
+ # Simple keys are allowed after '[' and '{'.
+ self.allow_simple_key = True
+
+ # Add FLOW-SEQUENCE-START or FLOW-MAPPING-START.
+ start_mark = self.get_mark()
+ self.forward()
+ end_mark = self.get_mark()
+ self.tokens.append(TokenClass(start_mark, end_mark))
+
+ def fetch_flow_sequence_end(self):
+ self.fetch_flow_collection_end(FlowSequenceEndToken)
+
+ def fetch_flow_mapping_end(self):
+ self.fetch_flow_collection_end(FlowMappingEndToken)
+
+ def fetch_flow_collection_end(self, TokenClass):
+
+ # Reset possible simple key on the current level.
+ self.remove_possible_simple_key()
+
+ # Decrease the flow level.
+ self.flow_level -= 1
+
+ # No simple keys after ']' or '}'.
+ self.allow_simple_key = False
+
+ # Add FLOW-SEQUENCE-END or FLOW-MAPPING-END.
+ start_mark = self.get_mark()
+ self.forward()
+ end_mark = self.get_mark()
+ self.tokens.append(TokenClass(start_mark, end_mark))
+
+ def fetch_flow_entry(self):
+
+ # Simple keys are allowed after ','.
+ self.allow_simple_key = True
+
+ # Reset possible simple key on the current level.
+ self.remove_possible_simple_key()
+
+ # Add FLOW-ENTRY.
+ start_mark = self.get_mark()
+ self.forward()
+ end_mark = self.get_mark()
+ self.tokens.append(FlowEntryToken(start_mark, end_mark))
+
+ def fetch_block_entry(self):
+
+ # Block context needs additional checks.
+ if not self.flow_level:
+
+ # Are we allowed to start a new entry?
+ if not self.allow_simple_key:
+ raise ScannerError(None, None,
+ "sequence entries are not allowed here",
+ self.get_mark())
+
+ # We may need to add BLOCK-SEQUENCE-START.
+ if self.add_indent(self.column):
+ mark = self.get_mark()
+ self.tokens.append(BlockSequenceStartToken(mark, mark))
+
+ # It's an error for the block entry to occur in the flow context,
+ # but we let the parser detect this.
+ else:
+ pass
+
+ # Simple keys are allowed after '-'.
+ self.allow_simple_key = True
+
+ # Reset possible simple key on the current level.
+ self.remove_possible_simple_key()
+
+ # Add BLOCK-ENTRY.
+ start_mark = self.get_mark()
+ self.forward()
+ end_mark = self.get_mark()
+ self.tokens.append(BlockEntryToken(start_mark, end_mark))
+
+ def fetch_key(self):
+
+ # Block context needs additional checks.
+ if not self.flow_level:
+
+ # Are we allowed to start a key (not necessary a simple)?
+ if not self.allow_simple_key:
+ raise ScannerError(None, None,
+ "mapping keys are not allowed here",
+ self.get_mark())
+
+ # We may need to add BLOCK-MAPPING-START.
+ if self.add_indent(self.column):
+ mark = self.get_mark()
+ self.tokens.append(BlockMappingStartToken(mark, mark))
+
+ # Simple keys are allowed after '?' in the block context.
+ self.allow_simple_key = not self.flow_level
+
+ # Reset possible simple key on the current level.
+ self.remove_possible_simple_key()
+
+ # Add KEY.
+ start_mark = self.get_mark()
+ self.forward()
+ end_mark = self.get_mark()
+ self.tokens.append(KeyToken(start_mark, end_mark))
+
+ def fetch_value(self):
+
+ # Do we determine a simple key?
+ if self.flow_level in self.possible_simple_keys:
+
+ # Add KEY.
+ key = self.possible_simple_keys[self.flow_level]
+ del self.possible_simple_keys[self.flow_level]
+ self.tokens.insert(key.token_number-self.tokens_taken,
+ KeyToken(key.mark, key.mark))
+
+ # If this key starts a new block mapping, we need to add
+ # BLOCK-MAPPING-START.
+ if not self.flow_level:
+ if self.add_indent(key.column):
+ self.tokens.insert(key.token_number-self.tokens_taken,
+ BlockMappingStartToken(key.mark, key.mark))
+
+ # There cannot be two simple keys one after another.
+ self.allow_simple_key = False
+
+ # It must be a part of a complex key.
+ else:
+
+ # Block context needs additional checks.
+ # (Do we really need them? They will be caught by the parser
+ # anyway.)
+ if not self.flow_level:
+
+ # We are allowed to start a complex value if and only if
+ # we can start a simple key.
+ if not self.allow_simple_key:
+ raise ScannerError(None, None,
+ "mapping values are not allowed here",
+ self.get_mark())
+
+ # If this value starts a new block mapping, we need to add
+ # BLOCK-MAPPING-START. It will be detected as an error later by
+ # the parser.
+ if not self.flow_level:
+ if self.add_indent(self.column):
+ mark = self.get_mark()
+ self.tokens.append(BlockMappingStartToken(mark, mark))
+
+ # Simple keys are allowed after ':' in the block context.
+ self.allow_simple_key = not self.flow_level
+
+ # Reset possible simple key on the current level.
+ self.remove_possible_simple_key()
+
+ # Add VALUE.
+ start_mark = self.get_mark()
+ self.forward()
+ end_mark = self.get_mark()
+ self.tokens.append(ValueToken(start_mark, end_mark))
+
+ def fetch_alias(self):
+
+ # ALIAS could be a simple key.
+ self.save_possible_simple_key()
+
+ # No simple keys after ALIAS.
+ self.allow_simple_key = False
+
+ # Scan and add ALIAS.
+ self.tokens.append(self.scan_anchor(AliasToken))
+
+ def fetch_anchor(self):
+
+ # ANCHOR could start a simple key.
+ self.save_possible_simple_key()
+
+ # No simple keys after ANCHOR.
+ self.allow_simple_key = False
+
+ # Scan and add ANCHOR.
+ self.tokens.append(self.scan_anchor(AnchorToken))
+
+ def fetch_tag(self):
+
+ # TAG could start a simple key.
+ self.save_possible_simple_key()
+
+ # No simple keys after TAG.
+ self.allow_simple_key = False
+
+ # Scan and add TAG.
+ self.tokens.append(self.scan_tag())
+
+ def fetch_literal(self):
+ self.fetch_block_scalar(style='|')
+
+ def fetch_folded(self):
+ self.fetch_block_scalar(style='>')
+
+ def fetch_block_scalar(self, style):
+
+ # A simple key may follow a block scalar.
+ self.allow_simple_key = True
+
+ # Reset possible simple key on the current level.
+ self.remove_possible_simple_key()
+
+ # Scan and add SCALAR.
+ self.tokens.append(self.scan_block_scalar(style))
+
+ def fetch_single(self):
+ self.fetch_flow_scalar(style='\'')
+
+ def fetch_double(self):
+ self.fetch_flow_scalar(style='"')
+
+ def fetch_flow_scalar(self, style):
+
+ # A flow scalar could be a simple key.
+ self.save_possible_simple_key()
+
+ # No simple keys after flow scalars.
+ self.allow_simple_key = False
+
+ # Scan and add SCALAR.
+ self.tokens.append(self.scan_flow_scalar(style))
+
+ def fetch_plain(self):
+
+ # A plain scalar could be a simple key.
+ self.save_possible_simple_key()
+
+ # No simple keys after plain scalars. But note that `scan_plain` will
+ # change this flag if the scan is finished at the beginning of the
+ # line.
+ self.allow_simple_key = False
+
+ # Scan and add SCALAR. May change `allow_simple_key`.
+ self.tokens.append(self.scan_plain())
+
+ # Checkers.
+
+ def check_directive(self):
+
+ # DIRECTIVE: ^ '%' ...
+ # The '%' indicator is already checked.
+ if self.column == 0:
+ return True
+
+ def check_document_start(self):
+
+ # DOCUMENT-START: ^ '---' (' '|'\n')
+ if self.column == 0:
+ if self.prefix(3) == u'---' \
+ and self.peek(3) in u'\0 \t\r\n\x85\u2028\u2029':
+ return True
+
+ def check_document_end(self):
+
+ # DOCUMENT-END: ^ '...' (' '|'\n')
+ if self.column == 0:
+ if self.prefix(3) == u'...' \
+ and self.peek(3) in u'\0 \t\r\n\x85\u2028\u2029':
+ return True
+
+ def check_block_entry(self):
+
+ # BLOCK-ENTRY: '-' (' '|'\n')
+ return self.peek(1) in u'\0 \t\r\n\x85\u2028\u2029'
+
+ def check_key(self):
+
+ # KEY(flow context): '?'
+ if self.flow_level:
+ return True
+
+ # KEY(block context): '?' (' '|'\n')
+ else:
+ return self.peek(1) in u'\0 \t\r\n\x85\u2028\u2029'
+
+ def check_value(self):
+
+ # VALUE(flow context): ':'
+ if self.flow_level:
+ return True
+
+ # VALUE(block context): ':' (' '|'\n')
+ else:
+ return self.peek(1) in u'\0 \t\r\n\x85\u2028\u2029'
+
+ def check_plain(self):
+
+ # A plain scalar may start with any non-space character except:
+ # '-', '?', ':', ',', '[', ']', '{', '}',
+ # '#', '&', '*', '!', '|', '>', '\'', '\"',
+ # '%', '@', '`'.
+ #
+ # It may also start with
+ # '-', '?', ':'
+ # if it is followed by a non-space character.
+ #
+ # Note that we limit the last rule to the block context (except the
+ # '-' character) because we want the flow context to be space
+ # independent.
+ ch = self.peek()
+ return ch not in u'\0 \t\r\n\x85\u2028\u2029-?:,[]{}#&*!|>\'\"%@`' \
+ or (self.peek(1) not in u'\0 \t\r\n\x85\u2028\u2029'
+ and (ch == u'-' or (not self.flow_level and ch in u'?:')))
+
+ # Scanners.
+
+ def scan_to_next_token(self):
+ # We ignore spaces, line breaks and comments.
+ # If we find a line break in the block context, we set the flag
+ # `allow_simple_key` on.
+ # The byte order mark is stripped if it's the first character in the
+ # stream. We do not yet support BOM inside the stream as the
+ # specification requires. Any such mark will be considered as a part
+ # of the document.
+ #
+ # TODO: We need to make tab handling rules more sane. A good rule is
+ # Tabs cannot precede tokens
+ # BLOCK-SEQUENCE-START, BLOCK-MAPPING-START, BLOCK-END,
+ # KEY(block), VALUE(block), BLOCK-ENTRY
+ # So the checking code is
+ # if <TAB>:
+ # self.allow_simple_keys = False
+ # We also need to add the check for `allow_simple_keys == True` to
+ # `unwind_indent` before issuing BLOCK-END.
+ # Scanners for block, flow, and plain scalars need to be modified.
+
+ if self.index == 0 and self.peek() == u'\uFEFF':
+ self.forward()
+ found = False
+ while not found:
+ while self.peek() == u' ':
+ self.forward()
+ if self.peek() == u'#':
+ while self.peek() not in u'\0\r\n\x85\u2028\u2029':
+ self.forward()
+ if self.scan_line_break():
+ if not self.flow_level:
+ self.allow_simple_key = True
+ else:
+ found = True
+
+ def scan_directive(self):
+ # See the specification for details.
+ start_mark = self.get_mark()
+ self.forward()
+ name = self.scan_directive_name(start_mark)
+ value = None
+ if name == u'YAML':
+ value = self.scan_yaml_directive_value(start_mark)
+ end_mark = self.get_mark()
+ elif name == u'TAG':
+ value = self.scan_tag_directive_value(start_mark)
+ end_mark = self.get_mark()
+ else:
+ end_mark = self.get_mark()
+ while self.peek() not in u'\0\r\n\x85\u2028\u2029':
+ self.forward()
+ self.scan_directive_ignored_line(start_mark)
+ return DirectiveToken(name, value, start_mark, end_mark)
+
+ def scan_directive_name(self, start_mark):
+ # See the specification for details.
+ length = 0
+ ch = self.peek(length)
+ while u'0' <= ch <= u'9' or u'A' <= ch <= u'Z' or u'a' <= ch <= u'z' \
+ or ch in u'-_':
+ length += 1
+ ch = self.peek(length)
+ if not length:
+ raise ScannerError("while scanning a directive", start_mark,
+ "expected alphabetic or numeric character, but found %r"
+ % ch.encode('utf-8'), self.get_mark())
+ value = self.prefix(length)
+ self.forward(length)
+ ch = self.peek()
+ if ch not in u'\0 \r\n\x85\u2028\u2029':
+ raise ScannerError("while scanning a directive", start_mark,
+ "expected alphabetic or numeric character, but found %r"
+ % ch.encode('utf-8'), self.get_mark())
+ return value
+
+ def scan_yaml_directive_value(self, start_mark):
+ # See the specification for details.
+ while self.peek() == u' ':
+ self.forward()
+ major = self.scan_yaml_directive_number(start_mark)
+ if self.peek() != '.':
+ raise ScannerError("while scanning a directive", start_mark,
+ "expected a digit or '.', but found %r"
+ % self.peek().encode('utf-8'),
+ self.get_mark())
+ self.forward()
+ minor = self.scan_yaml_directive_number(start_mark)
+ if self.peek() not in u'\0 \r\n\x85\u2028\u2029':
+ raise ScannerError("while scanning a directive", start_mark,
+ "expected a digit or ' ', but found %r"
+ % self.peek().encode('utf-8'),
+ self.get_mark())
+ return (major, minor)
+
+ def scan_yaml_directive_number(self, start_mark):
+ # See the specification for details.
+ ch = self.peek()
+ if not (u'0' <= ch <= u'9'):
+ raise ScannerError("while scanning a directive", start_mark,
+ "expected a digit, but found %r" % ch.encode('utf-8'),
+ self.get_mark())
+ length = 0
+ while u'0' <= self.peek(length) <= u'9':
+ length += 1
+ value = int(self.prefix(length))
+ self.forward(length)
+ return value
+
+ def scan_tag_directive_value(self, start_mark):
+ # See the specification for details.
+ while self.peek() == u' ':
+ self.forward()
+ handle = self.scan_tag_directive_handle(start_mark)
+ while self.peek() == u' ':
+ self.forward()
+ prefix = self.scan_tag_directive_prefix(start_mark)
+ return (handle, prefix)
+
+ def scan_tag_directive_handle(self, start_mark):
+ # See the specification for details.
+ value = self.scan_tag_handle('directive', start_mark)
+ ch = self.peek()
+ if ch != u' ':
+ raise ScannerError("while scanning a directive", start_mark,
+ "expected ' ', but found %r" % ch.encode('utf-8'),
+ self.get_mark())
+ return value
+
+ def scan_tag_directive_prefix(self, start_mark):
+ # See the specification for details.
+ value = self.scan_tag_uri('directive', start_mark)
+ ch = self.peek()
+ if ch not in u'\0 \r\n\x85\u2028\u2029':
+ raise ScannerError("while scanning a directive", start_mark,
+ "expected ' ', but found %r" % ch.encode('utf-8'),
+ self.get_mark())
+ return value
+
+ def scan_directive_ignored_line(self, start_mark):
+ # See the specification for details.
+ while self.peek() == u' ':
+ self.forward()
+ if self.peek() == u'#':
+ while self.peek() not in u'\0\r\n\x85\u2028\u2029':
+ self.forward()
+ ch = self.peek()
+ if ch not in u'\0\r\n\x85\u2028\u2029':
+ raise ScannerError("while scanning a directive", start_mark,
+ "expected a comment or a line break, but found %r"
+ % ch.encode('utf-8'), self.get_mark())
+ self.scan_line_break()
+
+ def scan_anchor(self, TokenClass):
+ # The specification does not restrict characters for anchors and
+ # aliases. This may lead to problems, for instance, the document:
+ # [ *alias, value ]
+ # can be interpreted in two ways, as
+ # [ "value" ]
+ # and
+ # [ *alias , "value" ]
+ # Therefore we restrict aliases to numbers and ASCII letters.
+ start_mark = self.get_mark()
+ indicator = self.peek()
+ if indicator == u'*':
+ name = 'alias'
+ else:
+ name = 'anchor'
+ self.forward()
+ length = 0
+ ch = self.peek(length)
+ while u'0' <= ch <= u'9' or u'A' <= ch <= u'Z' or u'a' <= ch <= u'z' \
+ or ch in u'-_':
+ length += 1
+ ch = self.peek(length)
+ if not length:
+ raise ScannerError("while scanning an %s" % name, start_mark,
+ "expected alphabetic or numeric character, but found %r"
+ % ch.encode('utf-8'), self.get_mark())
+ value = self.prefix(length)
+ self.forward(length)
+ ch = self.peek()
+ if ch not in u'\0 \t\r\n\x85\u2028\u2029?:,]}%@`':
+ raise ScannerError("while scanning an %s" % name, start_mark,
+ "expected alphabetic or numeric character, but found %r"
+ % ch.encode('utf-8'), self.get_mark())
+ end_mark = self.get_mark()
+ return TokenClass(value, start_mark, end_mark)
+
+ def scan_tag(self):
+ # See the specification for details.
+ start_mark = self.get_mark()
+ ch = self.peek(1)
+ if ch == u'<':
+ handle = None
+ self.forward(2)
+ suffix = self.scan_tag_uri('tag', start_mark)
+ if self.peek() != u'>':
+ raise ScannerError("while parsing a tag", start_mark,
+ "expected '>', but found %r" % self.peek().encode('utf-8'),
+ self.get_mark())
+ self.forward()
+ elif ch in u'\0 \t\r\n\x85\u2028\u2029':
+ handle = None
+ suffix = u'!'
+ self.forward()
+ else:
+ length = 1
+ use_handle = False
+ while ch not in u'\0 \r\n\x85\u2028\u2029':
+ if ch == u'!':
+ use_handle = True
+ break
+ length += 1
+ ch = self.peek(length)
+ handle = u'!'
+ if use_handle:
+ handle = self.scan_tag_handle('tag', start_mark)
+ else:
+ handle = u'!'
+ self.forward()
+ suffix = self.scan_tag_uri('tag', start_mark)
+ ch = self.peek()
+ if ch not in u'\0 \r\n\x85\u2028\u2029':
+ raise ScannerError("while scanning a tag", start_mark,
+ "expected ' ', but found %r" % ch.encode('utf-8'),
+ self.get_mark())
+ value = (handle, suffix)
+ end_mark = self.get_mark()
+ return TagToken(value, start_mark, end_mark)
+
+ def scan_block_scalar(self, style):
+ # See the specification for details.
+
+ if style == '>':
+ folded = True
+ else:
+ folded = False
+
+ chunks = []
+ start_mark = self.get_mark()
+
+ # Scan the header.
+ self.forward()
+ chomping, increment = self.scan_block_scalar_indicators(start_mark)
+ self.scan_block_scalar_ignored_line(start_mark)
+
+ # Determine the indentation level and go to the first non-empty line.
+ min_indent = self.indent+1
+ if min_indent < 1:
+ min_indent = 1
+ if increment is None:
+ breaks, max_indent, end_mark = self.scan_block_scalar_indentation()
+ indent = max(min_indent, max_indent)
+ else:
+ indent = min_indent+increment-1
+ breaks, end_mark = self.scan_block_scalar_breaks(indent)
+ line_break = u''
+
+ # Scan the inner part of the block scalar.
+ while self.column == indent and self.peek() != u'\0':
+ chunks.extend(breaks)
+ leading_non_space = self.peek() not in u' \t'
+ length = 0
+ while self.peek(length) not in u'\0\r\n\x85\u2028\u2029':
+ length += 1
+ chunks.append(self.prefix(length))
+ self.forward(length)
+ line_break = self.scan_line_break()
+ breaks, end_mark = self.scan_block_scalar_breaks(indent)
+ if self.column == indent and self.peek() != u'\0':
+
+ # Unfortunately, folding rules are ambiguous.
+ #
+ # This is the folding according to the specification:
+
+ if folded and line_break == u'\n' \
+ and leading_non_space and self.peek() not in u' \t':
+ if not breaks:
+ chunks.append(u' ')
+ else:
+ chunks.append(line_break)
+
+ # This is Clark Evans's interpretation (also in the spec
+ # examples):
+ #
+ #if folded and line_break == u'\n':
+ # if not breaks:
+ # if self.peek() not in ' \t':
+ # chunks.append(u' ')
+ # else:
+ # chunks.append(line_break)
+ #else:
+ # chunks.append(line_break)
+ else:
+ break
+
+ # Chomp the tail.
+ if chomping is not False:
+ chunks.append(line_break)
+ if chomping is True:
+ chunks.extend(breaks)
+
+ # We are done.
+ return ScalarToken(u''.join(chunks), False, start_mark, end_mark,
+ style)
+
+ def scan_block_scalar_indicators(self, start_mark):
+ # See the specification for details.
+ chomping = None
+ increment = None
+ ch = self.peek()
+ if ch in u'+-':
+ if ch == '+':
+ chomping = True
+ else:
+ chomping = False
+ self.forward()
+ ch = self.peek()
+ if ch in u'0123456789':
+ increment = int(ch)
+ if increment == 0:
+ raise ScannerError("while scanning a block scalar", start_mark,
+ "expected indentation indicator in the range 1-9, but found 0",
+ self.get_mark())
+ self.forward()
+ elif ch in u'0123456789':
+ increment = int(ch)
+ if increment == 0:
+ raise ScannerError("while scanning a block scalar", start_mark,
+ "expected indentation indicator in the range 1-9, but found 0",
+ self.get_mark())
+ self.forward()
+ ch = self.peek()
+ if ch in u'+-':
+ if ch == '+':
+ chomping = True
+ else:
+ chomping = False
+ self.forward()
+ ch = self.peek()
+ if ch not in u'\0 \r\n\x85\u2028\u2029':
+ raise ScannerError("while scanning a block scalar", start_mark,
+ "expected chomping or indentation indicators, but found %r"
+ % ch.encode('utf-8'), self.get_mark())
+ return chomping, increment
+
+ def scan_block_scalar_ignored_line(self, start_mark):
+ # See the specification for details.
+ while self.peek() == u' ':
+ self.forward()
+ if self.peek() == u'#':
+ while self.peek() not in u'\0\r\n\x85\u2028\u2029':
+ self.forward()
+ ch = self.peek()
+ if ch not in u'\0\r\n\x85\u2028\u2029':
+ raise ScannerError("while scanning a block scalar", start_mark,
+ "expected a comment or a line break, but found %r"
+ % ch.encode('utf-8'), self.get_mark())
+ self.scan_line_break()
+
+ def scan_block_scalar_indentation(self):
+ # See the specification for details.
+ chunks = []
+ max_indent = 0
+ end_mark = self.get_mark()
+ while self.peek() in u' \r\n\x85\u2028\u2029':
+ if self.peek() != u' ':
+ chunks.append(self.scan_line_break())
+ end_mark = self.get_mark()
+ else:
+ self.forward()
+ if self.column > max_indent:
+ max_indent = self.column
+ return chunks, max_indent, end_mark
+
+ def scan_block_scalar_breaks(self, indent):
+ # See the specification for details.
+ chunks = []
+ end_mark = self.get_mark()
+ while self.column < indent and self.peek() == u' ':
+ self.forward()
+ while self.peek() in u'\r\n\x85\u2028\u2029':
+ chunks.append(self.scan_line_break())
+ end_mark = self.get_mark()
+ while self.column < indent and self.peek() == u' ':
+ self.forward()
+ return chunks, end_mark
+
+ def scan_flow_scalar(self, style):
+ # See the specification for details.
+ # Note that we loose indentation rules for quoted scalars. Quoted
+ # scalars don't need to adhere indentation because " and ' clearly
+ # mark the beginning and the end of them. Therefore we are less
+ # restrictive then the specification requires. We only need to check
+ # that document separators are not included in scalars.
+ if style == '"':
+ double = True
+ else:
+ double = False
+ chunks = []
+ start_mark = self.get_mark()
+ quote = self.peek()
+ self.forward()
+ chunks.extend(self.scan_flow_scalar_non_spaces(double, start_mark))
+ while self.peek() != quote:
+ chunks.extend(self.scan_flow_scalar_spaces(double, start_mark))
+ chunks.extend(self.scan_flow_scalar_non_spaces(double, start_mark))
+ self.forward()
+ end_mark = self.get_mark()
+ return ScalarToken(u''.join(chunks), False, start_mark, end_mark,
+ style)
+
+ ESCAPE_REPLACEMENTS = {
+ u'0': u'\0',
+ u'a': u'\x07',
+ u'b': u'\x08',
+ u't': u'\x09',
+ u'\t': u'\x09',
+ u'n': u'\x0A',
+ u'v': u'\x0B',
+ u'f': u'\x0C',
+ u'r': u'\x0D',
+ u'e': u'\x1B',
+ u' ': u'\x20',
+ u'\"': u'\"',
+ u'\\': u'\\',
+ u'/': u'/',
+ u'N': u'\x85',
+ u'_': u'\xA0',
+ u'L': u'\u2028',
+ u'P': u'\u2029',
+ }
+
+ ESCAPE_CODES = {
+ u'x': 2,
+ u'u': 4,
+ u'U': 8,
+ }
+
+ def scan_flow_scalar_non_spaces(self, double, start_mark):
+ # See the specification for details.
+ chunks = []
+ while True:
+ length = 0
+ while self.peek(length) not in u'\'\"\\\0 \t\r\n\x85\u2028\u2029':
+ length += 1
+ if length:
+ chunks.append(self.prefix(length))
+ self.forward(length)
+ ch = self.peek()
+ if not double and ch == u'\'' and self.peek(1) == u'\'':
+ chunks.append(u'\'')
+ self.forward(2)
+ elif (double and ch == u'\'') or (not double and ch in u'\"\\'):
+ chunks.append(ch)
+ self.forward()
+ elif double and ch == u'\\':
+ self.forward()
+ ch = self.peek()
+ if ch in self.ESCAPE_REPLACEMENTS:
+ chunks.append(self.ESCAPE_REPLACEMENTS[ch])
+ self.forward()
+ elif ch in self.ESCAPE_CODES:
+ length = self.ESCAPE_CODES[ch]
+ self.forward()
+ for k in range(length):
+ if self.peek(k) not in u'0123456789ABCDEFabcdef':
+ raise ScannerError("while scanning a double-quoted scalar", start_mark,
+ "expected escape sequence of %d hexdecimal numbers, but found %r" %
+ (length, self.peek(k).encode('utf-8')), self.get_mark())
+ code = int(self.prefix(length), 16)
+ chunks.append(unichr(code))
+ self.forward(length)
+ elif ch in u'\r\n\x85\u2028\u2029':
+ self.scan_line_break()
+ chunks.extend(self.scan_flow_scalar_breaks(double, start_mark))
+ else:
+ raise ScannerError("while scanning a double-quoted scalar", start_mark,
+ "found unknown escape character %r" % ch.encode('utf-8'), self.get_mark())
+ else:
+ return chunks
+
+ def scan_flow_scalar_spaces(self, double, start_mark):
+ # See the specification for details.
+ chunks = []
+ length = 0
+ while self.peek(length) in u' \t':
+ length += 1
+ whitespaces = self.prefix(length)
+ self.forward(length)
+ ch = self.peek()
+ if ch == u'\0':
+ raise ScannerError("while scanning a quoted scalar", start_mark,
+ "found unexpected end of stream", self.get_mark())
+ elif ch in u'\r\n\x85\u2028\u2029':
+ line_break = self.scan_line_break()
+ breaks = self.scan_flow_scalar_breaks(double, start_mark)
+ if line_break != u'\n':
+ chunks.append(line_break)
+ elif not breaks:
+ chunks.append(u' ')
+ chunks.extend(breaks)
+ else:
+ chunks.append(whitespaces)
+ return chunks
+
+ def scan_flow_scalar_breaks(self, double, start_mark):
+ # See the specification for details.
+ chunks = []
+ while True:
+ # Instead of checking indentation, we check for document
+ # separators.
+ prefix = self.prefix(3)
+ if (prefix == u'---' or prefix == u'...') \
+ and self.peek(3) in u'\0 \t\r\n\x85\u2028\u2029':
+ raise ScannerError("while scanning a quoted scalar", start_mark,
+ "found unexpected document separator", self.get_mark())
+ while self.peek() in u' \t':
+ self.forward()
+ if self.peek() in u'\r\n\x85\u2028\u2029':
+ chunks.append(self.scan_line_break())
+ else:
+ return chunks
+
+ def scan_plain(self):
+ # See the specification for details.
+ # We add an additional restriction for the flow context:
+ # plain scalars in the flow context cannot contain ',' or '?'.
+ # We also keep track of the `allow_simple_key` flag here.
+ # Indentation rules are loosed for the flow context.
+ chunks = []
+ start_mark = self.get_mark()
+ end_mark = start_mark
+ indent = self.indent+1
+ # We allow zero indentation for scalars, but then we need to check for
+ # document separators at the beginning of the line.
+ #if indent == 0:
+ # indent = 1
+ spaces = []
+ while True:
+ length = 0
+ if self.peek() == u'#':
+ break
+ while True:
+ ch = self.peek(length)
+ if ch in u'\0 \t\r\n\x85\u2028\u2029' \
+ or (ch == u':' and
+ self.peek(length+1) in u'\0 \t\r\n\x85\u2028\u2029'
+ + (u',[]{}' if self.flow_level else u''))\
+ or (self.flow_level and ch in u',?[]{}'):
+ break
+ length += 1
+ if length == 0:
+ break
+ self.allow_simple_key = False
+ chunks.extend(spaces)
+ chunks.append(self.prefix(length))
+ self.forward(length)
+ end_mark = self.get_mark()
+ spaces = self.scan_plain_spaces(indent, start_mark)
+ if not spaces or self.peek() == u'#' \
+ or (not self.flow_level and self.column < indent):
+ break
+ return ScalarToken(u''.join(chunks), True, start_mark, end_mark)
+
+ def scan_plain_spaces(self, indent, start_mark):
+ # See the specification for details.
+ # The specification is really confusing about tabs in plain scalars.
+ # We just forbid them completely. Do not use tabs in YAML!
+ chunks = []
+ length = 0
+ while self.peek(length) in u' ':
+ length += 1
+ whitespaces = self.prefix(length)
+ self.forward(length)
+ ch = self.peek()
+ if ch in u'\r\n\x85\u2028\u2029':
+ line_break = self.scan_line_break()
+ self.allow_simple_key = True
+ prefix = self.prefix(3)
+ if (prefix == u'---' or prefix == u'...') \
+ and self.peek(3) in u'\0 \t\r\n\x85\u2028\u2029':
+ return
+ breaks = []
+ while self.peek() in u' \r\n\x85\u2028\u2029':
+ if self.peek() == ' ':
+ self.forward()
+ else:
+ breaks.append(self.scan_line_break())
+ prefix = self.prefix(3)
+ if (prefix == u'---' or prefix == u'...') \
+ and self.peek(3) in u'\0 \t\r\n\x85\u2028\u2029':
+ return
+ if line_break != u'\n':
+ chunks.append(line_break)
+ elif not breaks:
+ chunks.append(u' ')
+ chunks.extend(breaks)
+ elif whitespaces:
+ chunks.append(whitespaces)
+ return chunks
+
+ def scan_tag_handle(self, name, start_mark):
+ # See the specification for details.
+ # For some strange reasons, the specification does not allow '_' in
+ # tag handles. I have allowed it anyway.
+ ch = self.peek()
+ if ch != u'!':
+ raise ScannerError("while scanning a %s" % name, start_mark,
+ "expected '!', but found %r" % ch.encode('utf-8'),
+ self.get_mark())
+ length = 1
+ ch = self.peek(length)
+ if ch != u' ':
+ while u'0' <= ch <= u'9' or u'A' <= ch <= u'Z' or u'a' <= ch <= u'z' \
+ or ch in u'-_':
+ length += 1
+ ch = self.peek(length)
+ if ch != u'!':
+ self.forward(length)
+ raise ScannerError("while scanning a %s" % name, start_mark,
+ "expected '!', but found %r" % ch.encode('utf-8'),
+ self.get_mark())
+ length += 1
+ value = self.prefix(length)
+ self.forward(length)
+ return value
+
+ def scan_tag_uri(self, name, start_mark):
+ # See the specification for details.
+ # Note: we do not check if URI is well-formed.
+ chunks = []
+ length = 0
+ ch = self.peek(length)
+ while u'0' <= ch <= u'9' or u'A' <= ch <= u'Z' or u'a' <= ch <= u'z' \
+ or ch in u'-;/?:@&=+$,_.!~*\'()[]%':
+ if ch == u'%':
+ chunks.append(self.prefix(length))
+ self.forward(length)
+ length = 0
+ chunks.append(self.scan_uri_escapes(name, start_mark))
+ else:
+ length += 1
+ ch = self.peek(length)
+ if length:
+ chunks.append(self.prefix(length))
+ self.forward(length)
+ length = 0
+ if not chunks:
+ raise ScannerError("while parsing a %s" % name, start_mark,
+ "expected URI, but found %r" % ch.encode('utf-8'),
+ self.get_mark())
+ return u''.join(chunks)
+
+ def scan_uri_escapes(self, name, start_mark):
+ # See the specification for details.
+ bytes = []
+ mark = self.get_mark()
+ while self.peek() == u'%':
+ self.forward()
+ for k in range(2):
+ if self.peek(k) not in u'0123456789ABCDEFabcdef':
+ raise ScannerError("while scanning a %s" % name, start_mark,
+ "expected URI escape sequence of 2 hexdecimal numbers, but found %r" %
+ (self.peek(k).encode('utf-8')), self.get_mark())
+ bytes.append(chr(int(self.prefix(2), 16)))
+ self.forward(2)
+ try:
+ value = unicode(''.join(bytes), 'utf-8')
+ except UnicodeDecodeError, exc:
+ raise ScannerError("while scanning a %s" % name, start_mark, str(exc), mark)
+ return value
+
+ def scan_line_break(self):
+ # Transforms:
+ # '\r\n' : '\n'
+ # '\r' : '\n'
+ # '\n' : '\n'
+ # '\x85' : '\n'
+ # '\u2028' : '\u2028'
+ # '\u2029 : '\u2029'
+ # default : ''
+ ch = self.peek()
+ if ch in u'\r\n\x85':
+ if self.prefix(2) == u'\r\n':
+ self.forward(2)
+ else:
+ self.forward()
+ return u'\n'
+ elif ch in u'\u2028\u2029':
+ self.forward()
+ return ch
+ return u''
diff --git a/yaml/lib/yaml/serializer.py b/yaml/lib/yaml/serializer.py
new file mode 100644
index 0000000000..0bf1e96dc1
--- /dev/null
+++ b/yaml/lib/yaml/serializer.py
@@ -0,0 +1,111 @@
+
+__all__ = ['Serializer', 'SerializerError']
+
+from error import YAMLError
+from events import *
+from nodes import *
+
+class SerializerError(YAMLError):
+ pass
+
+class Serializer(object):
+
+ ANCHOR_TEMPLATE = u'id%03d'
+
+ def __init__(self, encoding=None,
+ explicit_start=None, explicit_end=None, version=None, tags=None):
+ self.use_encoding = encoding
+ self.use_explicit_start = explicit_start
+ self.use_explicit_end = explicit_end
+ self.use_version = version
+ self.use_tags = tags
+ self.serialized_nodes = {}
+ self.anchors = {}
+ self.last_anchor_id = 0
+ self.closed = None
+
+ def open(self):
+ if self.closed is None:
+ self.emit(StreamStartEvent(encoding=self.use_encoding))
+ self.closed = False
+ elif self.closed:
+ raise SerializerError("serializer is closed")
+ else:
+ raise SerializerError("serializer is already opened")
+
+ def close(self):
+ if self.closed is None:
+ raise SerializerError("serializer is not opened")
+ elif not self.closed:
+ self.emit(StreamEndEvent())
+ self.closed = True
+
+ #def __del__(self):
+ # self.close()
+
+ def serialize(self, node):
+ if self.closed is None:
+ raise SerializerError("serializer is not opened")
+ elif self.closed:
+ raise SerializerError("serializer is closed")
+ self.emit(DocumentStartEvent(explicit=self.use_explicit_start,
+ version=self.use_version, tags=self.use_tags))
+ self.anchor_node(node)
+ self.serialize_node(node, None, None)
+ self.emit(DocumentEndEvent(explicit=self.use_explicit_end))
+ self.serialized_nodes = {}
+ self.anchors = {}
+ self.last_anchor_id = 0
+
+ def anchor_node(self, node):
+ if node in self.anchors:
+ if self.anchors[node] is None:
+ self.anchors[node] = self.generate_anchor(node)
+ else:
+ self.anchors[node] = None
+ if isinstance(node, SequenceNode):
+ for item in node.value:
+ self.anchor_node(item)
+ elif isinstance(node, MappingNode):
+ for key, value in node.value:
+ self.anchor_node(key)
+ self.anchor_node(value)
+
+ def generate_anchor(self, node):
+ self.last_anchor_id += 1
+ return self.ANCHOR_TEMPLATE % self.last_anchor_id
+
+ def serialize_node(self, node, parent, index):
+ alias = self.anchors[node]
+ if node in self.serialized_nodes:
+ self.emit(AliasEvent(alias))
+ else:
+ self.serialized_nodes[node] = True
+ self.descend_resolver(parent, index)
+ if isinstance(node, ScalarNode):
+ detected_tag = self.resolve(ScalarNode, node.value, (True, False))
+ default_tag = self.resolve(ScalarNode, node.value, (False, True))
+ implicit = (node.tag == detected_tag), (node.tag == default_tag)
+ self.emit(ScalarEvent(alias, node.tag, implicit, node.value,
+ style=node.style))
+ elif isinstance(node, SequenceNode):
+ implicit = (node.tag
+ == self.resolve(SequenceNode, node.value, True))
+ self.emit(SequenceStartEvent(alias, node.tag, implicit,
+ flow_style=node.flow_style))
+ index = 0
+ for item in node.value:
+ self.serialize_node(item, node, index)
+ index += 1
+ self.emit(SequenceEndEvent())
+ elif isinstance(node, MappingNode):
+ implicit = (node.tag
+ == self.resolve(MappingNode, node.value, True))
+ self.emit(MappingStartEvent(alias, node.tag, implicit,
+ flow_style=node.flow_style))
+ for key, value in node.value:
+ self.serialize_node(key, node, None)
+ self.serialize_node(value, node, key)
+ self.emit(MappingEndEvent())
+ self.ascend_resolver()
+
diff --git a/yaml/lib/yaml/tokens.py b/yaml/lib/yaml/tokens.py
new file mode 100644
index 0000000000..4d0b48a394
--- /dev/null
+++ b/yaml/lib/yaml/tokens.py
@@ -0,0 +1,104 @@
+
+class Token(object):
+ def __init__(self, start_mark, end_mark):
+ self.start_mark = start_mark
+ self.end_mark = end_mark
+ def __repr__(self):
+ attributes = [key for key in self.__dict__
+ if not key.endswith('_mark')]
+ attributes.sort()
+ arguments = ', '.join(['%s=%r' % (key, getattr(self, key))
+ for key in attributes])
+ return '%s(%s)' % (self.__class__.__name__, arguments)
+
+#class BOMToken(Token):
+# id = '<byte order mark>'
+
+class DirectiveToken(Token):
+ id = '<directive>'
+ def __init__(self, name, value, start_mark, end_mark):
+ self.name = name
+ self.value = value
+ self.start_mark = start_mark
+ self.end_mark = end_mark
+
+class DocumentStartToken(Token):
+ id = '<document start>'
+
+class DocumentEndToken(Token):
+ id = '<document end>'
+
+class StreamStartToken(Token):
+ id = '<stream start>'
+ def __init__(self, start_mark=None, end_mark=None,
+ encoding=None):
+ self.start_mark = start_mark
+ self.end_mark = end_mark
+ self.encoding = encoding
+
+class StreamEndToken(Token):
+ id = '<stream end>'
+
+class BlockSequenceStartToken(Token):
+ id = '<block sequence start>'
+
+class BlockMappingStartToken(Token):
+ id = '<block mapping start>'
+
+class BlockEndToken(Token):
+ id = '<block end>'
+
+class FlowSequenceStartToken(Token):
+ id = '['
+
+class FlowMappingStartToken(Token):
+ id = '{'
+
+class FlowSequenceEndToken(Token):
+ id = ']'
+
+class FlowMappingEndToken(Token):
+ id = '}'
+
+class KeyToken(Token):
+ id = '?'
+
+class ValueToken(Token):
+ id = ':'
+
+class BlockEntryToken(Token):
+ id = '-'
+
+class FlowEntryToken(Token):
+ id = ','
+
+class AliasToken(Token):
+ id = '<alias>'
+ def __init__(self, value, start_mark, end_mark):
+ self.value = value
+ self.start_mark = start_mark
+ self.end_mark = end_mark
+
+class AnchorToken(Token):
+ id = '<anchor>'
+ def __init__(self, value, start_mark, end_mark):
+ self.value = value
+ self.start_mark = start_mark
+ self.end_mark = end_mark
+
+class TagToken(Token):
+ id = '<tag>'
+ def __init__(self, value, start_mark, end_mark):
+ self.value = value
+ self.start_mark = start_mark
+ self.end_mark = end_mark
+
+class ScalarToken(Token):
+ id = '<scalar>'
+ def __init__(self, value, plain, start_mark, end_mark, style=None):
+ self.value = value
+ self.plain = plain
+ self.start_mark = start_mark
+ self.end_mark = end_mark
+ self.style = style
+
diff --git a/yaml/lib3/yaml/__init__.py b/yaml/lib3/yaml/__init__.py
new file mode 100644
index 0000000000..13d687c501
--- /dev/null
+++ b/yaml/lib3/yaml/__init__.py
@@ -0,0 +1,427 @@
+
+from .error import *
+
+from .tokens import *
+from .events import *
+from .nodes import *
+
+from .loader import *
+from .dumper import *
+
+__version__ = '5.3.1'
+try:
+ from .cyaml import *
+ __with_libyaml__ = True
+except ImportError:
+ __with_libyaml__ = False
+
+import io
+
+#------------------------------------------------------------------------------
+# Warnings control
+#------------------------------------------------------------------------------
+
+# 'Global' warnings state:
+_warnings_enabled = {
+ 'YAMLLoadWarning': True,
+}
+
+# Get or set global warnings' state
+def warnings(settings=None):
+ if settings is None:
+ return _warnings_enabled
+
+ if type(settings) is dict:
+ for key in settings:
+ if key in _warnings_enabled:
+ _warnings_enabled[key] = settings[key]
+
+# Warn when load() is called without Loader=...
+class YAMLLoadWarning(RuntimeWarning):
+ pass
+
+def load_warning(method):
+ if _warnings_enabled['YAMLLoadWarning'] is False:
+ return
+
+ import warnings
+
+ message = (
+ "calling yaml.%s() without Loader=... is deprecated, as the "
+ "default Loader is unsafe. Please read "
+ "https://msg.pyyaml.org/load for full details."
+ ) % method
+
+ warnings.warn(message, YAMLLoadWarning, stacklevel=3)
+
+#------------------------------------------------------------------------------
+def scan(stream, Loader=Loader):
+ """
+ Scan a YAML stream and produce scanning tokens.
+ """
+ loader = Loader(stream)
+ try:
+ while loader.check_token():
+ yield loader.get_token()
+ finally:
+ loader.dispose()
+
+def parse(stream, Loader=Loader):
+ """
+ Parse a YAML stream and produce parsing events.
+ """
+ loader = Loader(stream)
+ try:
+ while loader.check_event():
+ yield loader.get_event()
+ finally:
+ loader.dispose()
+
+def compose(stream, Loader=Loader):
+ """
+ Parse the first YAML document in a stream
+ and produce the corresponding representation tree.
+ """
+ loader = Loader(stream)
+ try:
+ return loader.get_single_node()
+ finally:
+ loader.dispose()
+
+def compose_all(stream, Loader=Loader):
+ """
+ Parse all YAML documents in a stream
+ and produce corresponding representation trees.
+ """
+ loader = Loader(stream)
+ try:
+ while loader.check_node():
+ yield loader.get_node()
+ finally:
+ loader.dispose()
+
+def load(stream, Loader=None):
+ """
+ Parse the first YAML document in a stream
+ and produce the corresponding Python object.
+ """
+ if Loader is None:
+ load_warning('load')
+ Loader = FullLoader
+
+ loader = Loader(stream)
+ try:
+ return loader.get_single_data()
+ finally:
+ loader.dispose()
+
+def load_all(stream, Loader=None):
+ """
+ Parse all YAML documents in a stream
+ and produce corresponding Python objects.
+ """
+ if Loader is None:
+ load_warning('load_all')
+ Loader = FullLoader
+
+ loader = Loader(stream)
+ try:
+ while loader.check_data():
+ yield loader.get_data()
+ finally:
+ loader.dispose()
+
+def full_load(stream):
+ """
+ Parse the first YAML document in a stream
+ and produce the corresponding Python object.
+
+ Resolve all tags except those known to be
+ unsafe on untrusted input.
+ """
+ return load(stream, FullLoader)
+
+def full_load_all(stream):
+ """
+ Parse all YAML documents in a stream
+ and produce corresponding Python objects.
+
+ Resolve all tags except those known to be
+ unsafe on untrusted input.
+ """
+ return load_all(stream, FullLoader)
+
+def safe_load(stream):
+ """
+ Parse the first YAML document in a stream
+ and produce the corresponding Python object.
+
+ Resolve only basic YAML tags. This is known
+ to be safe for untrusted input.
+ """
+ return load(stream, SafeLoader)
+
+def safe_load_all(stream):
+ """
+ Parse all YAML documents in a stream
+ and produce corresponding Python objects.
+
+ Resolve only basic YAML tags. This is known
+ to be safe for untrusted input.
+ """
+ return load_all(stream, SafeLoader)
+
+def unsafe_load(stream):
+ """
+ Parse the first YAML document in a stream
+ and produce the corresponding Python object.
+
+ Resolve all tags, even those known to be
+ unsafe on untrusted input.
+ """
+ return load(stream, UnsafeLoader)
+
+def unsafe_load_all(stream):
+ """
+ Parse all YAML documents in a stream
+ and produce corresponding Python objects.
+
+ Resolve all tags, even those known to be
+ unsafe on untrusted input.
+ """
+ return load_all(stream, UnsafeLoader)
+
+def emit(events, stream=None, Dumper=Dumper,
+ canonical=None, indent=None, width=None,
+ allow_unicode=None, line_break=None):
+ """
+ Emit YAML parsing events into a stream.
+ If stream is None, return the produced string instead.
+ """
+ getvalue = None
+ if stream is None:
+ stream = io.StringIO()
+ getvalue = stream.getvalue
+ dumper = Dumper(stream, canonical=canonical, indent=indent, width=width,
+ allow_unicode=allow_unicode, line_break=line_break)
+ try:
+ for event in events:
+ dumper.emit(event)
+ finally:
+ dumper.dispose()
+ if getvalue:
+ return getvalue()
+
+def serialize_all(nodes, stream=None, Dumper=Dumper,
+ canonical=None, indent=None, width=None,
+ allow_unicode=None, line_break=None,
+ encoding=None, explicit_start=None, explicit_end=None,
+ version=None, tags=None):
+ """
+ Serialize a sequence of representation trees into a YAML stream.
+ If stream is None, return the produced string instead.
+ """
+ getvalue = None
+ if stream is None:
+ if encoding is None:
+ stream = io.StringIO()
+ else:
+ stream = io.BytesIO()
+ getvalue = stream.getvalue
+ dumper = Dumper(stream, canonical=canonical, indent=indent, width=width,
+ allow_unicode=allow_unicode, line_break=line_break,
+ encoding=encoding, version=version, tags=tags,
+ explicit_start=explicit_start, explicit_end=explicit_end)
+ try:
+ dumper.open()
+ for node in nodes:
+ dumper.serialize(node)
+ dumper.close()
+ finally:
+ dumper.dispose()
+ if getvalue:
+ return getvalue()
+
+def serialize(node, stream=None, Dumper=Dumper, **kwds):
+ """
+ Serialize a representation tree into a YAML stream.
+ If stream is None, return the produced string instead.
+ """
+ return serialize_all([node], stream, Dumper=Dumper, **kwds)
+
+def dump_all(documents, stream=None, Dumper=Dumper,
+ default_style=None, default_flow_style=False,
+ canonical=None, indent=None, width=None,
+ allow_unicode=None, line_break=None,
+ encoding=None, explicit_start=None, explicit_end=None,
+ version=None, tags=None, sort_keys=True):
+ """
+ Serialize a sequence of Python objects into a YAML stream.
+ If stream is None, return the produced string instead.
+ """
+ getvalue = None
+ if stream is None:
+ if encoding is None:
+ stream = io.StringIO()
+ else:
+ stream = io.BytesIO()
+ getvalue = stream.getvalue
+ dumper = Dumper(stream, default_style=default_style,
+ default_flow_style=default_flow_style,
+ canonical=canonical, indent=indent, width=width,
+ allow_unicode=allow_unicode, line_break=line_break,
+ encoding=encoding, version=version, tags=tags,
+ explicit_start=explicit_start, explicit_end=explicit_end, sort_keys=sort_keys)
+ try:
+ dumper.open()
+ for data in documents:
+ dumper.represent(data)
+ dumper.close()
+ finally:
+ dumper.dispose()
+ if getvalue:
+ return getvalue()
+
+def dump(data, stream=None, Dumper=Dumper, **kwds):
+ """
+ Serialize a Python object into a YAML stream.
+ If stream is None, return the produced string instead.
+ """
+ return dump_all([data], stream, Dumper=Dumper, **kwds)
+
+def safe_dump_all(documents, stream=None, **kwds):
+ """
+ Serialize a sequence of Python objects into a YAML stream.
+ Produce only basic YAML tags.
+ If stream is None, return the produced string instead.
+ """
+ return dump_all(documents, stream, Dumper=SafeDumper, **kwds)
+
+def safe_dump(data, stream=None, **kwds):
+ """
+ Serialize a Python object into a YAML stream.
+ Produce only basic YAML tags.
+ If stream is None, return the produced string instead.
+ """
+ return dump_all([data], stream, Dumper=SafeDumper, **kwds)
+
+def add_implicit_resolver(tag, regexp, first=None,
+ Loader=None, Dumper=Dumper):
+ """
+ Add an implicit scalar detector.
+ If an implicit scalar value matches the given regexp,
+ the corresponding tag is assigned to the scalar.
+ first is a sequence of possible initial characters or None.
+ """
+ if Loader is None:
+ loader.Loader.add_implicit_resolver(tag, regexp, first)
+ loader.FullLoader.add_implicit_resolver(tag, regexp, first)
+ loader.UnsafeLoader.add_implicit_resolver(tag, regexp, first)
+ else:
+ Loader.add_implicit_resolver(tag, regexp, first)
+ Dumper.add_implicit_resolver(tag, regexp, first)
+
+def add_path_resolver(tag, path, kind=None, Loader=None, Dumper=Dumper):
+ """
+ Add a path based resolver for the given tag.
+ A path is a list of keys that forms a path
+ to a node in the representation tree.
+ Keys can be string values, integers, or None.
+ """
+ if Loader is None:
+ loader.Loader.add_path_resolver(tag, path, kind)
+ loader.FullLoader.add_path_resolver(tag, path, kind)
+ loader.UnsafeLoader.add_path_resolver(tag, path, kind)
+ else:
+ Loader.add_path_resolver(tag, path, kind)
+ Dumper.add_path_resolver(tag, path, kind)
+
+def add_constructor(tag, constructor, Loader=None):
+ """
+ Add a constructor for the given tag.
+ Constructor is a function that accepts a Loader instance
+ and a node object and produces the corresponding Python object.
+ """
+ if Loader is None:
+ loader.Loader.add_constructor(tag, constructor)
+ loader.FullLoader.add_constructor(tag, constructor)
+ loader.UnsafeLoader.add_constructor(tag, constructor)
+ else:
+ Loader.add_constructor(tag, constructor)
+
+def add_multi_constructor(tag_prefix, multi_constructor, Loader=None):
+ """
+ Add a multi-constructor for the given tag prefix.
+ Multi-constructor is called for a node if its tag starts with tag_prefix.
+ Multi-constructor accepts a Loader instance, a tag suffix,
+ and a node object and produces the corresponding Python object.
+ """
+ if Loader is None:
+ loader.Loader.add_multi_constructor(tag_prefix, multi_constructor)
+ loader.FullLoader.add_multi_constructor(tag_prefix, multi_constructor)
+ loader.UnsafeLoader.add_multi_constructor(tag_prefix, multi_constructor)
+ else:
+ Loader.add_multi_constructor(tag_prefix, multi_constructor)
+
+def add_representer(data_type, representer, Dumper=Dumper):
+ """
+ Add a representer for the given type.
+ Representer is a function accepting a Dumper instance
+ and an instance of the given data type
+ and producing the corresponding representation node.
+ """
+ Dumper.add_representer(data_type, representer)
+
+def add_multi_representer(data_type, multi_representer, Dumper=Dumper):
+ """
+ Add a representer for the given type.
+ Multi-representer is a function accepting a Dumper instance
+ and an instance of the given data type or subtype
+ and producing the corresponding representation node.
+ """
+ Dumper.add_multi_representer(data_type, multi_representer)
+
+class YAMLObjectMetaclass(type):
+ """
+ The metaclass for YAMLObject.
+ """
+ def __init__(cls, name, bases, kwds):
+ super(YAMLObjectMetaclass, cls).__init__(name, bases, kwds)
+ if 'yaml_tag' in kwds and kwds['yaml_tag'] is not None:
+ if isinstance(cls.yaml_loader, list):
+ for loader in cls.yaml_loader:
+ loader.add_constructor(cls.yaml_tag, cls.from_yaml)
+ else:
+ cls.yaml_loader.add_constructor(cls.yaml_tag, cls.from_yaml)
+
+ cls.yaml_dumper.add_representer(cls, cls.to_yaml)
+
+class YAMLObject(metaclass=YAMLObjectMetaclass):
+ """
+ An object that can dump itself to a YAML stream
+ and load itself from a YAML stream.
+ """
+
+ __slots__ = () # no direct instantiation, so allow immutable subclasses
+
+ yaml_loader = [Loader, FullLoader, UnsafeLoader]
+ yaml_dumper = Dumper
+
+ yaml_tag = None
+ yaml_flow_style = None
+
+ @classmethod
+ def from_yaml(cls, loader, node):
+ """
+ Convert a representation node to a Python object.
+ """
+ return loader.construct_yaml_object(node, cls)
+
+ @classmethod
+ def to_yaml(cls, dumper, data):
+ """
+ Convert a Python object to a representation node.
+ """
+ return dumper.represent_yaml_object(cls.yaml_tag, data, cls,
+ flow_style=cls.yaml_flow_style)
+
diff --git a/yaml/lib3/yaml/composer.py b/yaml/lib3/yaml/composer.py
new file mode 100644
index 0000000000..6d15cb40e3
--- /dev/null
+++ b/yaml/lib3/yaml/composer.py
@@ -0,0 +1,139 @@
+
+__all__ = ['Composer', 'ComposerError']
+
+from .error import MarkedYAMLError
+from .events import *
+from .nodes import *
+
+class ComposerError(MarkedYAMLError):
+ pass
+
+class Composer:
+
+ def __init__(self):
+ self.anchors = {}
+
+ def check_node(self):
+ # Drop the STREAM-START event.
+ if self.check_event(StreamStartEvent):
+ self.get_event()
+
+ # If there are more documents available?
+ return not self.check_event(StreamEndEvent)
+
+ def get_node(self):
+ # Get the root node of the next document.
+ if not self.check_event(StreamEndEvent):
+ return self.compose_document()
+
+ def get_single_node(self):
+ # Drop the STREAM-START event.
+ self.get_event()
+
+ # Compose a document if the stream is not empty.
+ document = None
+ if not self.check_event(StreamEndEvent):
+ document = self.compose_document()
+
+ # Ensure that the stream contains no more documents.
+ if not self.check_event(StreamEndEvent):
+ event = self.get_event()
+ raise ComposerError("expected a single document in the stream",
+ document.start_mark, "but found another document",
+ event.start_mark)
+
+ # Drop the STREAM-END event.
+ self.get_event()
+
+ return document
+
+ def compose_document(self):
+ # Drop the DOCUMENT-START event.
+ self.get_event()
+
+ # Compose the root node.
+ node = self.compose_node(None, None)
+
+ # Drop the DOCUMENT-END event.
+ self.get_event()
+
+ self.anchors = {}
+ return node
+
+ def compose_node(self, parent, index):
+ if self.check_event(AliasEvent):
+ event = self.get_event()
+ anchor = event.anchor
+ if anchor not in self.anchors:
+ raise ComposerError(None, None, "found undefined alias %r"
+ % anchor, event.start_mark)
+ return self.anchors[anchor]
+ event = self.peek_event()
+ anchor = event.anchor
+ if anchor is not None:
+ if anchor in self.anchors:
+ raise ComposerError("found duplicate anchor %r; first occurrence"
+ % anchor, self.anchors[anchor].start_mark,
+ "second occurrence", event.start_mark)
+ self.descend_resolver(parent, index)
+ if self.check_event(ScalarEvent):
+ node = self.compose_scalar_node(anchor)
+ elif self.check_event(SequenceStartEvent):
+ node = self.compose_sequence_node(anchor)
+ elif self.check_event(MappingStartEvent):
+ node = self.compose_mapping_node(anchor)
+ self.ascend_resolver()
+ return node
+
+ def compose_scalar_node(self, anchor):
+ event = self.get_event()
+ tag = event.tag
+ if tag is None or tag == '!':
+ tag = self.resolve(ScalarNode, event.value, event.implicit)
+ node = ScalarNode(tag, event.value,
+ event.start_mark, event.end_mark, style=event.style)
+ if anchor is not None:
+ self.anchors[anchor] = node
+ return node
+
+ def compose_sequence_node(self, anchor):
+ start_event = self.get_event()
+ tag = start_event.tag
+ if tag is None or tag == '!':
+ tag = self.resolve(SequenceNode, None, start_event.implicit)
+ node = SequenceNode(tag, [],
+ start_event.start_mark, None,
+ flow_style=start_event.flow_style)
+ if anchor is not None:
+ self.anchors[anchor] = node
+ index = 0
+ while not self.check_event(SequenceEndEvent):
+ node.value.append(self.compose_node(node, index))
+ index += 1
+ end_event = self.get_event()
+ node.end_mark = end_event.end_mark
+ return node
+
+ def compose_mapping_node(self, anchor):
+ start_event = self.get_event()
+ tag = start_event.tag
+ if tag is None or tag == '!':
+ tag = self.resolve(MappingNode, None, start_event.implicit)
+ node = MappingNode(tag, [],
+ start_event.start_mark, None,
+ flow_style=start_event.flow_style)
+ if anchor is not None:
+ self.anchors[anchor] = node
+ while not self.check_event(MappingEndEvent):
+ #key_event = self.peek_event()
+ item_key = self.compose_node(node, None)
+ #if item_key in node.value:
+ # raise ComposerError("while composing a mapping", start_event.start_mark,
+ # "found duplicate key", key_event.start_mark)
+ item_value = self.compose_node(node, item_key)
+ #node.value[item_key] = item_value
+ node.value.append((item_key, item_value))
+ end_event = self.get_event()
+ node.end_mark = end_event.end_mark
+ return node
+
diff --git a/yaml/lib3/yaml/constructor.py b/yaml/lib3/yaml/constructor.py
new file mode 100644
index 0000000000..1948b125c2
--- /dev/null
+++ b/yaml/lib3/yaml/constructor.py
@@ -0,0 +1,748 @@
+
+__all__ = [
+ 'BaseConstructor',
+ 'SafeConstructor',
+ 'FullConstructor',
+ 'UnsafeConstructor',
+ 'Constructor',
+ 'ConstructorError'
+]
+
+from .error import *
+from .nodes import *
+
+import collections.abc, datetime, base64, binascii, re, sys, types
+
+class ConstructorError(MarkedYAMLError):
+ pass
+
+class BaseConstructor:
+
+ yaml_constructors = {}
+ yaml_multi_constructors = {}
+
+ def __init__(self):
+ self.constructed_objects = {}
+ self.recursive_objects = {}
+ self.state_generators = []
+ self.deep_construct = False
+
+ def check_data(self):
+ # If there are more documents available?
+ return self.check_node()
+
+ def check_state_key(self, key):
+ """Block special attributes/methods from being set in a newly created
+ object, to prevent user-controlled methods from being called during
+ deserialization"""
+ if self.get_state_keys_blacklist_regexp().match(key):
+ raise ConstructorError(None, None,
+ "blacklisted key '%s' in instance state found" % (key,), None)
+
+ def get_data(self):
+ # Construct and return the next document.
+ if self.check_node():
+ return self.construct_document(self.get_node())
+
+ def get_single_data(self):
+ # Ensure that the stream contains a single document and construct it.
+ node = self.get_single_node()
+ if node is not None:
+ return self.construct_document(node)
+ return None
+
+ def construct_document(self, node):
+ data = self.construct_object(node)
+ while self.state_generators:
+ state_generators = self.state_generators
+ self.state_generators = []
+ for generator in state_generators:
+ for dummy in generator:
+ pass
+ self.constructed_objects = {}
+ self.recursive_objects = {}
+ self.deep_construct = False
+ return data
+
+ def construct_object(self, node, deep=False):
+ if node in self.constructed_objects:
+ return self.constructed_objects[node]
+ if deep:
+ old_deep = self.deep_construct
+ self.deep_construct = True
+ if node in self.recursive_objects:
+ raise ConstructorError(None, None,
+ "found unconstructable recursive node", node.start_mark)
+ self.recursive_objects[node] = None
+ constructor = None
+ tag_suffix = None
+ if node.tag in self.yaml_constructors:
+ constructor = self.yaml_constructors[node.tag]
+ else:
+ for tag_prefix in self.yaml_multi_constructors:
+ if tag_prefix is not None and node.tag.startswith(tag_prefix):
+ tag_suffix = node.tag[len(tag_prefix):]
+ constructor = self.yaml_multi_constructors[tag_prefix]
+ break
+ else:
+ if None in self.yaml_multi_constructors:
+ tag_suffix = node.tag
+ constructor = self.yaml_multi_constructors[None]
+ elif None in self.yaml_constructors:
+ constructor = self.yaml_constructors[None]
+ elif isinstance(node, ScalarNode):
+ constructor = self.__class__.construct_scalar
+ elif isinstance(node, SequenceNode):
+ constructor = self.__class__.construct_sequence
+ elif isinstance(node, MappingNode):
+ constructor = self.__class__.construct_mapping
+ if tag_suffix is None:
+ data = constructor(self, node)
+ else:
+ data = constructor(self, tag_suffix, node)
+ if isinstance(data, types.GeneratorType):
+ generator = data
+ data = next(generator)
+ if self.deep_construct:
+ for dummy in generator:
+ pass
+ else:
+ self.state_generators.append(generator)
+ self.constructed_objects[node] = data
+ del self.recursive_objects[node]
+ if deep:
+ self.deep_construct = old_deep
+ return data
+
+ def construct_scalar(self, node):
+ if not isinstance(node, ScalarNode):
+ raise ConstructorError(None, None,
+ "expected a scalar node, but found %s" % node.id,
+ node.start_mark)
+ return node.value
+
+ def construct_sequence(self, node, deep=False):
+ if not isinstance(node, SequenceNode):
+ raise ConstructorError(None, None,
+ "expected a sequence node, but found %s" % node.id,
+ node.start_mark)
+ return [self.construct_object(child, deep=deep)
+ for child in node.value]
+
+ def construct_mapping(self, node, deep=False):
+ if not isinstance(node, MappingNode):
+ raise ConstructorError(None, None,
+ "expected a mapping node, but found %s" % node.id,
+ node.start_mark)
+ mapping = {}
+ for key_node, value_node in node.value:
+ key = self.construct_object(key_node, deep=deep)
+ if not isinstance(key, collections.abc.Hashable):
+ raise ConstructorError("while constructing a mapping", node.start_mark,
+ "found unhashable key", key_node.start_mark)
+ value = self.construct_object(value_node, deep=deep)
+ mapping[key] = value
+ return mapping
+
+ def construct_pairs(self, node, deep=False):
+ if not isinstance(node, MappingNode):
+ raise ConstructorError(None, None,
+ "expected a mapping node, but found %s" % node.id,
+ node.start_mark)
+ pairs = []
+ for key_node, value_node in node.value:
+ key = self.construct_object(key_node, deep=deep)
+ value = self.construct_object(value_node, deep=deep)
+ pairs.append((key, value))
+ return pairs
+
+ @classmethod
+ def add_constructor(cls, tag, constructor):
+ if not 'yaml_constructors' in cls.__dict__:
+ cls.yaml_constructors = cls.yaml_constructors.copy()
+ cls.yaml_constructors[tag] = constructor
+
+ @classmethod
+ def add_multi_constructor(cls, tag_prefix, multi_constructor):
+ if not 'yaml_multi_constructors' in cls.__dict__:
+ cls.yaml_multi_constructors = cls.yaml_multi_constructors.copy()
+ cls.yaml_multi_constructors[tag_prefix] = multi_constructor
+
+class SafeConstructor(BaseConstructor):
+
+ def construct_scalar(self, node):
+ if isinstance(node, MappingNode):
+ for key_node, value_node in node.value:
+ if key_node.tag == 'tag:yaml.org,2002:value':
+ return self.construct_scalar(value_node)
+ return super().construct_scalar(node)
+
+ def flatten_mapping(self, node):
+ merge = []
+ index = 0
+ while index < len(node.value):
+ key_node, value_node = node.value[index]
+ if key_node.tag == 'tag:yaml.org,2002:merge':
+ del node.value[index]
+ if isinstance(value_node, MappingNode):
+ self.flatten_mapping(value_node)
+ merge.extend(value_node.value)
+ elif isinstance(value_node, SequenceNode):
+ submerge = []
+ for subnode in value_node.value:
+ if not isinstance(subnode, MappingNode):
+ raise ConstructorError("while constructing a mapping",
+ node.start_mark,
+ "expected a mapping for merging, but found %s"
+ % subnode.id, subnode.start_mark)
+ self.flatten_mapping(subnode)
+ submerge.append(subnode.value)
+ submerge.reverse()
+ for value in submerge:
+ merge.extend(value)
+ else:
+ raise ConstructorError("while constructing a mapping", node.start_mark,
+ "expected a mapping or list of mappings for merging, but found %s"
+ % value_node.id, value_node.start_mark)
+ elif key_node.tag == 'tag:yaml.org,2002:value':
+ key_node.tag = 'tag:yaml.org,2002:str'
+ index += 1
+ else:
+ index += 1
+ if merge:
+ node.value = merge + node.value
+
+ def construct_mapping(self, node, deep=False):
+ if isinstance(node, MappingNode):
+ self.flatten_mapping(node)
+ return super().construct_mapping(node, deep=deep)
+
+ def construct_yaml_null(self, node):
+ self.construct_scalar(node)
+ return None
+
+ bool_values = {
+ 'yes': True,
+ 'no': False,
+ 'true': True,
+ 'false': False,
+ 'on': True,
+ 'off': False,
+ }
+
+ def construct_yaml_bool(self, node):
+ value = self.construct_scalar(node)
+ return self.bool_values[value.lower()]
+
+ def construct_yaml_int(self, node):
+ value = self.construct_scalar(node)
+ value = value.replace('_', '')
+ sign = +1
+ if value[0] == '-':
+ sign = -1
+ if value[0] in '+-':
+ value = value[1:]
+ if value == '0':
+ return 0
+ elif value.startswith('0b'):
+ return sign*int(value[2:], 2)
+ elif value.startswith('0x'):
+ return sign*int(value[2:], 16)
+ elif value[0] == '0':
+ return sign*int(value, 8)
+ elif ':' in value:
+ digits = [int(part) for part in value.split(':')]
+ digits.reverse()
+ base = 1
+ value = 0
+ for digit in digits:
+ value += digit*base
+ base *= 60
+ return sign*value
+ else:
+ return sign*int(value)
+
+ inf_value = 1e300
+ while inf_value != inf_value*inf_value:
+ inf_value *= inf_value
+ nan_value = -inf_value/inf_value # Trying to make a quiet NaN (like C99).
+
+ def construct_yaml_float(self, node):
+ value = self.construct_scalar(node)
+ value = value.replace('_', '').lower()
+ sign = +1
+ if value[0] == '-':
+ sign = -1
+ if value[0] in '+-':
+ value = value[1:]
+ if value == '.inf':
+ return sign*self.inf_value
+ elif value == '.nan':
+ return self.nan_value
+ elif ':' in value:
+ digits = [float(part) for part in value.split(':')]
+ digits.reverse()
+ base = 1
+ value = 0.0
+ for digit in digits:
+ value += digit*base
+ base *= 60
+ return sign*value
+ else:
+ return sign*float(value)
+
+ def construct_yaml_binary(self, node):
+ try:
+ value = self.construct_scalar(node).encode('ascii')
+ except UnicodeEncodeError as exc:
+ raise ConstructorError(None, None,
+ "failed to convert base64 data into ascii: %s" % exc,
+ node.start_mark)
+ try:
+ if hasattr(base64, 'decodebytes'):
+ return base64.decodebytes(value)
+ else:
+ return base64.decodestring(value)
+ except binascii.Error as exc:
+ raise ConstructorError(None, None,
+ "failed to decode base64 data: %s" % exc, node.start_mark)
+
+ timestamp_regexp = re.compile(
+ r'''^(?P<year>[0-9][0-9][0-9][0-9])
+ -(?P<month>[0-9][0-9]?)
+ -(?P<day>[0-9][0-9]?)
+ (?:(?:[Tt]|[ \t]+)
+ (?P<hour>[0-9][0-9]?)
+ :(?P<minute>[0-9][0-9])
+ :(?P<second>[0-9][0-9])
+ (?:\.(?P<fraction>[0-9]*))?
+ (?:[ \t]*(?P<tz>Z|(?P<tz_sign>[-+])(?P<tz_hour>[0-9][0-9]?)
+ (?::(?P<tz_minute>[0-9][0-9]))?))?)?$''', re.X)
+
+ def construct_yaml_timestamp(self, node):
+ value = self.construct_scalar(node)
+ match = self.timestamp_regexp.match(node.value)
+ values = match.groupdict()
+ year = int(values['year'])
+ month = int(values['month'])
+ day = int(values['day'])
+ if not values['hour']:
+ return datetime.date(year, month, day)
+ hour = int(values['hour'])
+ minute = int(values['minute'])
+ second = int(values['second'])
+ fraction = 0
+ tzinfo = None
+ if values['fraction']:
+ fraction = values['fraction'][:6]
+ while len(fraction) < 6:
+ fraction += '0'
+ fraction = int(fraction)
+ if values['tz_sign']:
+ tz_hour = int(values['tz_hour'])
+ tz_minute = int(values['tz_minute'] or 0)
+ delta = datetime.timedelta(hours=tz_hour, minutes=tz_minute)
+ if values['tz_sign'] == '-':
+ delta = -delta
+ tzinfo = datetime.timezone(delta)
+ elif values['tz']:
+ tzinfo = datetime.timezone.utc
+ return datetime.datetime(year, month, day, hour, minute, second, fraction,
+ tzinfo=tzinfo)
+
+ def construct_yaml_omap(self, node):
+ # Note: we do not check for duplicate keys, because it's too
+ # CPU-expensive.
+ omap = []
+ yield omap
+ if not isinstance(node, SequenceNode):
+ raise ConstructorError("while constructing an ordered map", node.start_mark,
+ "expected a sequence, but found %s" % node.id, node.start_mark)
+ for subnode in node.value:
+ if not isinstance(subnode, MappingNode):
+ raise ConstructorError("while constructing an ordered map", node.start_mark,
+ "expected a mapping of length 1, but found %s" % subnode.id,
+ subnode.start_mark)
+ if len(subnode.value) != 1:
+ raise ConstructorError("while constructing an ordered map", node.start_mark,
+ "expected a single mapping item, but found %d items" % len(subnode.value),
+ subnode.start_mark)
+ key_node, value_node = subnode.value[0]
+ key = self.construct_object(key_node)
+ value = self.construct_object(value_node)
+ omap.append((key, value))
+
+ def construct_yaml_pairs(self, node):
+ # Note: the same code as `construct_yaml_omap`.
+ pairs = []
+ yield pairs
+ if not isinstance(node, SequenceNode):
+ raise ConstructorError("while constructing pairs", node.start_mark,
+ "expected a sequence, but found %s" % node.id, node.start_mark)
+ for subnode in node.value:
+ if not isinstance(subnode, MappingNode):
+ raise ConstructorError("while constructing pairs", node.start_mark,
+ "expected a mapping of length 1, but found %s" % subnode.id,
+ subnode.start_mark)
+ if len(subnode.value) != 1:
+ raise ConstructorError("while constructing pairs", node.start_mark,
+ "expected a single mapping item, but found %d items" % len(subnode.value),
+ subnode.start_mark)
+ key_node, value_node = subnode.value[0]
+ key = self.construct_object(key_node)
+ value = self.construct_object(value_node)
+ pairs.append((key, value))
+
+ def construct_yaml_set(self, node):
+ data = set()
+ yield data
+ value = self.construct_mapping(node)
+ data.update(value)
+
+ def construct_yaml_str(self, node):
+ return self.construct_scalar(node)
+
+ def construct_yaml_seq(self, node):
+ data = []
+ yield data
+ data.extend(self.construct_sequence(node))
+
+ def construct_yaml_map(self, node):
+ data = {}
+ yield data
+ value = self.construct_mapping(node)
+ data.update(value)
+
+ def construct_yaml_object(self, node, cls):
+ data = cls.__new__(cls)
+ yield data
+ if hasattr(data, '__setstate__'):
+ state = self.construct_mapping(node, deep=True)
+ data.__setstate__(state)
+ else:
+ state = self.construct_mapping(node)
+ data.__dict__.update(state)
+
+ def construct_undefined(self, node):
+ raise ConstructorError(None, None,
+ "could not determine a constructor for the tag %r" % node.tag,
+ node.start_mark)
+
+SafeConstructor.add_constructor(
+ 'tag:yaml.org,2002:null',
+ SafeConstructor.construct_yaml_null)
+
+SafeConstructor.add_constructor(
+ 'tag:yaml.org,2002:bool',
+ SafeConstructor.construct_yaml_bool)
+
+SafeConstructor.add_constructor(
+ 'tag:yaml.org,2002:int',
+ SafeConstructor.construct_yaml_int)
+
+SafeConstructor.add_constructor(
+ 'tag:yaml.org,2002:float',
+ SafeConstructor.construct_yaml_float)
+
+SafeConstructor.add_constructor(
+ 'tag:yaml.org,2002:binary',
+ SafeConstructor.construct_yaml_binary)
+
+SafeConstructor.add_constructor(
+ 'tag:yaml.org,2002:timestamp',
+ SafeConstructor.construct_yaml_timestamp)
+
+SafeConstructor.add_constructor(
+ 'tag:yaml.org,2002:omap',
+ SafeConstructor.construct_yaml_omap)
+
+SafeConstructor.add_constructor(
+ 'tag:yaml.org,2002:pairs',
+ SafeConstructor.construct_yaml_pairs)
+
+SafeConstructor.add_constructor(
+ 'tag:yaml.org,2002:set',
+ SafeConstructor.construct_yaml_set)
+
+SafeConstructor.add_constructor(
+ 'tag:yaml.org,2002:str',
+ SafeConstructor.construct_yaml_str)
+
+SafeConstructor.add_constructor(
+ 'tag:yaml.org,2002:seq',
+ SafeConstructor.construct_yaml_seq)
+
+SafeConstructor.add_constructor(
+ 'tag:yaml.org,2002:map',
+ SafeConstructor.construct_yaml_map)
+
+SafeConstructor.add_constructor(None,
+ SafeConstructor.construct_undefined)
+
+class FullConstructor(SafeConstructor):
+ # 'extend' is blacklisted because it is used by
+ # construct_python_object_apply to add `listitems` to a newly generate
+ # python instance
+ def get_state_keys_blacklist(self):
+ return ['^extend$', '^__.*__$']
+
+ def get_state_keys_blacklist_regexp(self):
+ if not hasattr(self, 'state_keys_blacklist_regexp'):
+ self.state_keys_blacklist_regexp = re.compile('(' + '|'.join(self.get_state_keys_blacklist()) + ')')
+ return self.state_keys_blacklist_regexp
+
+ def construct_python_str(self, node):
+ return self.construct_scalar(node)
+
+ def construct_python_unicode(self, node):
+ return self.construct_scalar(node)
+
+ def construct_python_bytes(self, node):
+ try:
+ value = self.construct_scalar(node).encode('ascii')
+ except UnicodeEncodeError as exc:
+ raise ConstructorError(None, None,
+ "failed to convert base64 data into ascii: %s" % exc,
+ node.start_mark)
+ try:
+ if hasattr(base64, 'decodebytes'):
+ return base64.decodebytes(value)
+ else:
+ return base64.decodestring(value)
+ except binascii.Error as exc:
+ raise ConstructorError(None, None,
+ "failed to decode base64 data: %s" % exc, node.start_mark)
+
+ def construct_python_long(self, node):
+ return self.construct_yaml_int(node)
+
+ def construct_python_complex(self, node):
+ return complex(self.construct_scalar(node))
+
+ def construct_python_tuple(self, node):
+ return tuple(self.construct_sequence(node))
+
+ def find_python_module(self, name, mark, unsafe=False):
+ if not name:
+ raise ConstructorError("while constructing a Python module", mark,
+ "expected non-empty name appended to the tag", mark)
+ if unsafe:
+ try:
+ __import__(name)
+ except ImportError as exc:
+ raise ConstructorError("while constructing a Python module", mark,
+ "cannot find module %r (%s)" % (name, exc), mark)
+ if name not in sys.modules:
+ raise ConstructorError("while constructing a Python module", mark,
+ "module %r is not imported" % name, mark)
+ return sys.modules[name]
+
+ def find_python_name(self, name, mark, unsafe=False):
+ if not name:
+ raise ConstructorError("while constructing a Python object", mark,
+ "expected non-empty name appended to the tag", mark)
+ if '.' in name:
+ module_name, object_name = name.rsplit('.', 1)
+ else:
+ module_name = 'builtins'
+ object_name = name
+ if unsafe:
+ try:
+ __import__(module_name)
+ except ImportError as exc:
+ raise ConstructorError("while constructing a Python object", mark,
+ "cannot find module %r (%s)" % (module_name, exc), mark)
+ if module_name not in sys.modules:
+ raise ConstructorError("while constructing a Python object", mark,
+ "module %r is not imported" % module_name, mark)
+ module = sys.modules[module_name]
+ if not hasattr(module, object_name):
+ raise ConstructorError("while constructing a Python object", mark,
+ "cannot find %r in the module %r"
+ % (object_name, module.__name__), mark)
+ return getattr(module, object_name)
+
+ def construct_python_name(self, suffix, node):
+ value = self.construct_scalar(node)
+ if value:
+ raise ConstructorError("while constructing a Python name", node.start_mark,
+ "expected the empty value, but found %r" % value, node.start_mark)
+ return self.find_python_name(suffix, node.start_mark)
+
+ def construct_python_module(self, suffix, node):
+ value = self.construct_scalar(node)
+ if value:
+ raise ConstructorError("while constructing a Python module", node.start_mark,
+ "expected the empty value, but found %r" % value, node.start_mark)
+ return self.find_python_module(suffix, node.start_mark)
+
+ def make_python_instance(self, suffix, node,
+ args=None, kwds=None, newobj=False, unsafe=False):
+ if not args:
+ args = []
+ if not kwds:
+ kwds = {}
+ cls = self.find_python_name(suffix, node.start_mark)
+ if not (unsafe or isinstance(cls, type)):
+ raise ConstructorError("while constructing a Python instance", node.start_mark,
+ "expected a class, but found %r" % type(cls),
+ node.start_mark)
+ if newobj and isinstance(cls, type):
+ return cls.__new__(cls, *args, **kwds)
+ else:
+ return cls(*args, **kwds)
+
+ def set_python_instance_state(self, instance, state, unsafe=False):
+ if hasattr(instance, '__setstate__'):
+ instance.__setstate__(state)
+ else:
+ slotstate = {}
+ if isinstance(state, tuple) and len(state) == 2:
+ state, slotstate = state
+ if hasattr(instance, '__dict__'):
+ if not unsafe and state:
+ for key in state.keys():
+ self.check_state_key(key)
+ instance.__dict__.update(state)
+ elif state:
+ slotstate.update(state)
+ for key, value in slotstate.items():
+ if not unsafe:
+ self.check_state_key(key)
+ setattr(instance, key, value)
+
+ def construct_python_object(self, suffix, node):
+ # Format:
+ # !!python/object:module.name { ... state ... }
+ instance = self.make_python_instance(suffix, node, newobj=True)
+ yield instance
+ deep = hasattr(instance, '__setstate__')
+ state = self.construct_mapping(node, deep=deep)
+ self.set_python_instance_state(instance, state)
+
+ def construct_python_object_apply(self, suffix, node, newobj=False):
+ # Format:
+ # !!python/object/apply # (or !!python/object/new)
+ # args: [ ... arguments ... ]
+ # kwds: { ... keywords ... }
+ # state: ... state ...
+ # listitems: [ ... listitems ... ]
+ # dictitems: { ... dictitems ... }
+ # or short format:
+ # !!python/object/apply [ ... arguments ... ]
+ # The difference between !!python/object/apply and !!python/object/new
+ # is how an object is created, check make_python_instance for details.
+ if isinstance(node, SequenceNode):
+ args = self.construct_sequence(node, deep=True)
+ kwds = {}
+ state = {}
+ listitems = []
+ dictitems = {}
+ else:
+ value = self.construct_mapping(node, deep=True)
+ args = value.get('args', [])
+ kwds = value.get('kwds', {})
+ state = value.get('state', {})
+ listitems = value.get('listitems', [])
+ dictitems = value.get('dictitems', {})
+ instance = self.make_python_instance(suffix, node, args, kwds, newobj)
+ if state:
+ self.set_python_instance_state(instance, state)
+ if listitems:
+ instance.extend(listitems)
+ if dictitems:
+ for key in dictitems:
+ instance[key] = dictitems[key]
+ return instance
+
+ def construct_python_object_new(self, suffix, node):
+ return self.construct_python_object_apply(suffix, node, newobj=True)
+
+FullConstructor.add_constructor(
+ 'tag:yaml.org,2002:python/none',
+ FullConstructor.construct_yaml_null)
+
+FullConstructor.add_constructor(
+ 'tag:yaml.org,2002:python/bool',
+ FullConstructor.construct_yaml_bool)
+
+FullConstructor.add_constructor(
+ 'tag:yaml.org,2002:python/str',
+ FullConstructor.construct_python_str)
+
+FullConstructor.add_constructor(
+ 'tag:yaml.org,2002:python/unicode',
+ FullConstructor.construct_python_unicode)
+
+FullConstructor.add_constructor(
+ 'tag:yaml.org,2002:python/bytes',
+ FullConstructor.construct_python_bytes)
+
+FullConstructor.add_constructor(
+ 'tag:yaml.org,2002:python/int',
+ FullConstructor.construct_yaml_int)
+
+FullConstructor.add_constructor(
+ 'tag:yaml.org,2002:python/long',
+ FullConstructor.construct_python_long)
+
+FullConstructor.add_constructor(
+ 'tag:yaml.org,2002:python/float',
+ FullConstructor.construct_yaml_float)
+
+FullConstructor.add_constructor(
+ 'tag:yaml.org,2002:python/complex',
+ FullConstructor.construct_python_complex)
+
+FullConstructor.add_constructor(
+ 'tag:yaml.org,2002:python/list',
+ FullConstructor.construct_yaml_seq)
+
+FullConstructor.add_constructor(
+ 'tag:yaml.org,2002:python/tuple',
+ FullConstructor.construct_python_tuple)
+
+FullConstructor.add_constructor(
+ 'tag:yaml.org,2002:python/dict',
+ FullConstructor.construct_yaml_map)
+
+FullConstructor.add_multi_constructor(
+ 'tag:yaml.org,2002:python/name:',
+ FullConstructor.construct_python_name)
+
+FullConstructor.add_multi_constructor(
+ 'tag:yaml.org,2002:python/module:',
+ FullConstructor.construct_python_module)
+
+FullConstructor.add_multi_constructor(
+ 'tag:yaml.org,2002:python/object:',
+ FullConstructor.construct_python_object)
+
+FullConstructor.add_multi_constructor(
+ 'tag:yaml.org,2002:python/object/new:',
+ FullConstructor.construct_python_object_new)
+
+class UnsafeConstructor(FullConstructor):
+
+ def find_python_module(self, name, mark):
+ return super(UnsafeConstructor, self).find_python_module(name, mark, unsafe=True)
+
+ def find_python_name(self, name, mark):
+ return super(UnsafeConstructor, self).find_python_name(name, mark, unsafe=True)
+
+ def make_python_instance(self, suffix, node, args=None, kwds=None, newobj=False):
+ return super(UnsafeConstructor, self).make_python_instance(
+ suffix, node, args, kwds, newobj, unsafe=True)
+
+ def set_python_instance_state(self, instance, state):
+ return super(UnsafeConstructor, self).set_python_instance_state(
+ instance, state, unsafe=True)
+
+UnsafeConstructor.add_multi_constructor(
+ 'tag:yaml.org,2002:python/object/apply:',
+ UnsafeConstructor.construct_python_object_apply)
+
+# Constructor is same as UnsafeConstructor. Need to leave this in place in case
+# people have extended it directly.
+class Constructor(UnsafeConstructor):
+ pass
diff --git a/yaml/lib3/yaml/cyaml.py b/yaml/lib3/yaml/cyaml.py
new file mode 100644
index 0000000000..1e606c74b9
--- /dev/null
+++ b/yaml/lib3/yaml/cyaml.py
@@ -0,0 +1,101 @@
+
+__all__ = [
+ 'CBaseLoader', 'CSafeLoader', 'CFullLoader', 'CUnsafeLoader', 'CLoader',
+ 'CBaseDumper', 'CSafeDumper', 'CDumper'
+]
+
+from _yaml import CParser, CEmitter
+
+from .constructor import *
+
+from .serializer import *
+from .representer import *
+
+from .resolver import *
+
+class CBaseLoader(CParser, BaseConstructor, BaseResolver):
+
+ def __init__(self, stream):
+ CParser.__init__(self, stream)
+ BaseConstructor.__init__(self)
+ BaseResolver.__init__(self)
+
+class CSafeLoader(CParser, SafeConstructor, Resolver):
+
+ def __init__(self, stream):
+ CParser.__init__(self, stream)
+ SafeConstructor.__init__(self)
+ Resolver.__init__(self)
+
+class CFullLoader(CParser, FullConstructor, Resolver):
+
+ def __init__(self, stream):
+ CParser.__init__(self, stream)
+ FullConstructor.__init__(self)
+ Resolver.__init__(self)
+
+class CUnsafeLoader(CParser, UnsafeConstructor, Resolver):
+
+ def __init__(self, stream):
+ CParser.__init__(self, stream)
+ UnsafeConstructor.__init__(self)
+ Resolver.__init__(self)
+
+class CLoader(CParser, Constructor, Resolver):
+
+ def __init__(self, stream):
+ CParser.__init__(self, stream)
+ Constructor.__init__(self)
+ Resolver.__init__(self)
+
+class CBaseDumper(CEmitter, BaseRepresenter, BaseResolver):
+
+ def __init__(self, stream,
+ default_style=None, default_flow_style=False,
+ canonical=None, indent=None, width=None,
+ allow_unicode=None, line_break=None,
+ encoding=None, explicit_start=None, explicit_end=None,
+ version=None, tags=None, sort_keys=True):
+ CEmitter.__init__(self, stream, canonical=canonical,
+ indent=indent, width=width, encoding=encoding,
+ allow_unicode=allow_unicode, line_break=line_break,
+ explicit_start=explicit_start, explicit_end=explicit_end,
+ version=version, tags=tags)
+ Representer.__init__(self, default_style=default_style,
+ default_flow_style=default_flow_style, sort_keys=sort_keys)
+ Resolver.__init__(self)
+
+class CSafeDumper(CEmitter, SafeRepresenter, Resolver):
+
+ def __init__(self, stream,
+ default_style=None, default_flow_style=False,
+ canonical=None, indent=None, width=None,
+ allow_unicode=None, line_break=None,
+ encoding=None, explicit_start=None, explicit_end=None,
+ version=None, tags=None, sort_keys=True):
+ CEmitter.__init__(self, stream, canonical=canonical,
+ indent=indent, width=width, encoding=encoding,
+ allow_unicode=allow_unicode, line_break=line_break,
+ explicit_start=explicit_start, explicit_end=explicit_end,
+ version=version, tags=tags)
+ SafeRepresenter.__init__(self, default_style=default_style,
+ default_flow_style=default_flow_style, sort_keys=sort_keys)
+ Resolver.__init__(self)
+
+class CDumper(CEmitter, Serializer, Representer, Resolver):
+
+ def __init__(self, stream,
+ default_style=None, default_flow_style=False,
+ canonical=None, indent=None, width=None,
+ allow_unicode=None, line_break=None,
+ encoding=None, explicit_start=None, explicit_end=None,
+ version=None, tags=None, sort_keys=True):
+ CEmitter.__init__(self, stream, canonical=canonical,
+ indent=indent, width=width, encoding=encoding,
+ allow_unicode=allow_unicode, line_break=line_break,
+ explicit_start=explicit_start, explicit_end=explicit_end,
+ version=version, tags=tags)
+ Representer.__init__(self, default_style=default_style,
+ default_flow_style=default_flow_style, sort_keys=sort_keys)
+ Resolver.__init__(self)
+
diff --git a/yaml/lib3/yaml/dumper.py b/yaml/lib3/yaml/dumper.py
new file mode 100644
index 0000000000..6aadba551f
--- /dev/null
+++ b/yaml/lib3/yaml/dumper.py
@@ -0,0 +1,62 @@
+
+__all__ = ['BaseDumper', 'SafeDumper', 'Dumper']
+
+from .emitter import *
+from .serializer import *
+from .representer import *
+from .resolver import *
+
+class BaseDumper(Emitter, Serializer, BaseRepresenter, BaseResolver):
+
+ def __init__(self, stream,
+ default_style=None, default_flow_style=False,
+ canonical=None, indent=None, width=None,
+ allow_unicode=None, line_break=None,
+ encoding=None, explicit_start=None, explicit_end=None,
+ version=None, tags=None, sort_keys=True):
+ Emitter.__init__(self, stream, canonical=canonical,
+ indent=indent, width=width,
+ allow_unicode=allow_unicode, line_break=line_break)
+ Serializer.__init__(self, encoding=encoding,
+ explicit_start=explicit_start, explicit_end=explicit_end,
+ version=version, tags=tags)
+ Representer.__init__(self, default_style=default_style,
+ default_flow_style=default_flow_style, sort_keys=sort_keys)
+ Resolver.__init__(self)
+
+class SafeDumper(Emitter, Serializer, SafeRepresenter, Resolver):
+
+ def __init__(self, stream,
+ default_style=None, default_flow_style=False,
+ canonical=None, indent=None, width=None,
+ allow_unicode=None, line_break=None,
+ encoding=None, explicit_start=None, explicit_end=None,
+ version=None, tags=None, sort_keys=True):
+ Emitter.__init__(self, stream, canonical=canonical,
+ indent=indent, width=width,
+ allow_unicode=allow_unicode, line_break=line_break)
+ Serializer.__init__(self, encoding=encoding,
+ explicit_start=explicit_start, explicit_end=explicit_end,
+ version=version, tags=tags)
+ SafeRepresenter.__init__(self, default_style=default_style,
+ default_flow_style=default_flow_style, sort_keys=sort_keys)
+ Resolver.__init__(self)
+
+class Dumper(Emitter, Serializer, Representer, Resolver):
+
+ def __init__(self, stream,
+ default_style=None, default_flow_style=False,
+ canonical=None, indent=None, width=None,
+ allow_unicode=None, line_break=None,
+ encoding=None, explicit_start=None, explicit_end=None,
+ version=None, tags=None, sort_keys=True):
+ Emitter.__init__(self, stream, canonical=canonical,
+ indent=indent, width=width,
+ allow_unicode=allow_unicode, line_break=line_break)
+ Serializer.__init__(self, encoding=encoding,
+ explicit_start=explicit_start, explicit_end=explicit_end,
+ version=version, tags=tags)
+ Representer.__init__(self, default_style=default_style,
+ default_flow_style=default_flow_style, sort_keys=sort_keys)
+ Resolver.__init__(self)
+
diff --git a/yaml/lib3/yaml/emitter.py b/yaml/lib3/yaml/emitter.py
new file mode 100644
index 0000000000..a664d01116
--- /dev/null
+++ b/yaml/lib3/yaml/emitter.py
@@ -0,0 +1,1137 @@
+
+# Emitter expects events obeying the following grammar:
+# stream ::= STREAM-START document* STREAM-END
+# document ::= DOCUMENT-START node DOCUMENT-END
+# node ::= SCALAR | sequence | mapping
+# sequence ::= SEQUENCE-START node* SEQUENCE-END
+# mapping ::= MAPPING-START (node node)* MAPPING-END
+
+__all__ = ['Emitter', 'EmitterError']
+
+from .error import YAMLError
+from .events import *
+
+class EmitterError(YAMLError):
+ pass
+
+class ScalarAnalysis:
+ def __init__(self, scalar, empty, multiline,
+ allow_flow_plain, allow_block_plain,
+ allow_single_quoted, allow_double_quoted,
+ allow_block):
+ self.scalar = scalar
+ self.empty = empty
+ self.multiline = multiline
+ self.allow_flow_plain = allow_flow_plain
+ self.allow_block_plain = allow_block_plain
+ self.allow_single_quoted = allow_single_quoted
+ self.allow_double_quoted = allow_double_quoted
+ self.allow_block = allow_block
+
+class Emitter:
+
+ DEFAULT_TAG_PREFIXES = {
+ '!' : '!',
+ 'tag:yaml.org,2002:' : '!!',
+ }
+
+ def __init__(self, stream, canonical=None, indent=None, width=None,
+ allow_unicode=None, line_break=None):
+
+ # The stream should have the methods `write` and possibly `flush`.
+ self.stream = stream
+
+ # Encoding can be overridden by STREAM-START.
+ self.encoding = None
+
+ # Emitter is a state machine with a stack of states to handle nested
+ # structures.
+ self.states = []
+ self.state = self.expect_stream_start
+
+ # Current event and the event queue.
+ self.events = []
+ self.event = None
+
+ # The current indentation level and the stack of previous indents.
+ self.indents = []
+ self.indent = None
+
+ # Flow level.
+ self.flow_level = 0
+
+ # Contexts.
+ self.root_context = False
+ self.sequence_context = False
+ self.mapping_context = False
+ self.simple_key_context = False
+
+ # Characteristics of the last emitted character:
+ # - current position.
+ # - is it a whitespace?
+ # - is it an indention character
+ # (indentation space, '-', '?', or ':')?
+ self.line = 0
+ self.column = 0
+ self.whitespace = True
+ self.indention = True
+
+ # Whether the document requires an explicit document indicator
+ self.open_ended = False
+
+ # Formatting details.
+ self.canonical = canonical
+ self.allow_unicode = allow_unicode
+ self.best_indent = 2
+ if indent and 1 < indent < 10:
+ self.best_indent = indent
+ self.best_width = 80
+ if width and width > self.best_indent*2:
+ self.best_width = width
+ self.best_line_break = '\n'
+ if line_break in ['\r', '\n', '\r\n']:
+ self.best_line_break = line_break
+
+ # Tag prefixes.
+ self.tag_prefixes = None
+
+ # Prepared anchor and tag.
+ self.prepared_anchor = None
+ self.prepared_tag = None
+
+ # Scalar analysis and style.
+ self.analysis = None
+ self.style = None
+
+ def dispose(self):
+ # Reset the state attributes (to clear self-references)
+ self.states = []
+ self.state = None
+
+ def emit(self, event):
+ self.events.append(event)
+ while not self.need_more_events():
+ self.event = self.events.pop(0)
+ self.state()
+ self.event = None
+
+ # In some cases, we wait for a few next events before emitting.
+
+ def need_more_events(self):
+ if not self.events:
+ return True
+ event = self.events[0]
+ if isinstance(event, DocumentStartEvent):
+ return self.need_events(1)
+ elif isinstance(event, SequenceStartEvent):
+ return self.need_events(2)
+ elif isinstance(event, MappingStartEvent):
+ return self.need_events(3)
+ else:
+ return False
+
+ def need_events(self, count):
+ level = 0
+ for event in self.events[1:]:
+ if isinstance(event, (DocumentStartEvent, CollectionStartEvent)):
+ level += 1
+ elif isinstance(event, (DocumentEndEvent, CollectionEndEvent)):
+ level -= 1
+ elif isinstance(event, StreamEndEvent):
+ level = -1
+ if level < 0:
+ return False
+ return (len(self.events) < count+1)
+
+ def increase_indent(self, flow=False, indentless=False):
+ self.indents.append(self.indent)
+ if self.indent is None:
+ if flow:
+ self.indent = self.best_indent
+ else:
+ self.indent = 0
+ elif not indentless:
+ self.indent += self.best_indent
+
+ # States.
+
+ # Stream handlers.
+
+ def expect_stream_start(self):
+ if isinstance(self.event, StreamStartEvent):
+ if self.event.encoding and not hasattr(self.stream, 'encoding'):
+ self.encoding = self.event.encoding
+ self.write_stream_start()
+ self.state = self.expect_first_document_start
+ else:
+ raise EmitterError("expected StreamStartEvent, but got %s"
+ % self.event)
+
+ def expect_nothing(self):
+ raise EmitterError("expected nothing, but got %s" % self.event)
+
+ # Document handlers.
+
+ def expect_first_document_start(self):
+ return self.expect_document_start(first=True)
+
+ def expect_document_start(self, first=False):
+ if isinstance(self.event, DocumentStartEvent):
+ if (self.event.version or self.event.tags) and self.open_ended:
+ self.write_indicator('...', True)
+ self.write_indent()
+ if self.event.version:
+ version_text = self.prepare_version(self.event.version)
+ self.write_version_directive(version_text)
+ self.tag_prefixes = self.DEFAULT_TAG_PREFIXES.copy()
+ if self.event.tags:
+ handles = sorted(self.event.tags.keys())
+ for handle in handles:
+ prefix = self.event.tags[handle]
+ self.tag_prefixes[prefix] = handle
+ handle_text = self.prepare_tag_handle(handle)
+ prefix_text = self.prepare_tag_prefix(prefix)
+ self.write_tag_directive(handle_text, prefix_text)
+ implicit = (first and not self.event.explicit and not self.canonical
+ and not self.event.version and not self.event.tags
+ and not self.check_empty_document())
+ if not implicit:
+ self.write_indent()
+ self.write_indicator('---', True)
+ if self.canonical:
+ self.write_indent()
+ self.state = self.expect_document_root
+ elif isinstance(self.event, StreamEndEvent):
+ if self.open_ended:
+ self.write_indicator('...', True)
+ self.write_indent()
+ self.write_stream_end()
+ self.state = self.expect_nothing
+ else:
+ raise EmitterError("expected DocumentStartEvent, but got %s"
+ % self.event)
+
+ def expect_document_end(self):
+ if isinstance(self.event, DocumentEndEvent):
+ self.write_indent()
+ if self.event.explicit:
+ self.write_indicator('...', True)
+ self.write_indent()
+ self.flush_stream()
+ self.state = self.expect_document_start
+ else:
+ raise EmitterError("expected DocumentEndEvent, but got %s"
+ % self.event)
+
+ def expect_document_root(self):
+ self.states.append(self.expect_document_end)
+ self.expect_node(root=True)
+
+ # Node handlers.
+
+ def expect_node(self, root=False, sequence=False, mapping=False,
+ simple_key=False):
+ self.root_context = root
+ self.sequence_context = sequence
+ self.mapping_context = mapping
+ self.simple_key_context = simple_key
+ if isinstance(self.event, AliasEvent):
+ self.expect_alias()
+ elif isinstance(self.event, (ScalarEvent, CollectionStartEvent)):
+ self.process_anchor('&')
+ self.process_tag()
+ if isinstance(self.event, ScalarEvent):
+ self.expect_scalar()
+ elif isinstance(self.event, SequenceStartEvent):
+ if self.flow_level or self.canonical or self.event.flow_style \
+ or self.check_empty_sequence():
+ self.expect_flow_sequence()
+ else:
+ self.expect_block_sequence()
+ elif isinstance(self.event, MappingStartEvent):
+ if self.flow_level or self.canonical or self.event.flow_style \
+ or self.check_empty_mapping():
+ self.expect_flow_mapping()
+ else:
+ self.expect_block_mapping()
+ else:
+ raise EmitterError("expected NodeEvent, but got %s" % self.event)
+
+ def expect_alias(self):
+ if self.event.anchor is None:
+ raise EmitterError("anchor is not specified for alias")
+ self.process_anchor('*')
+ self.state = self.states.pop()
+
+ def expect_scalar(self):
+ self.increase_indent(flow=True)
+ self.process_scalar()
+ self.indent = self.indents.pop()
+ self.state = self.states.pop()
+
+ # Flow sequence handlers.
+
+ def expect_flow_sequence(self):
+ self.write_indicator('[', True, whitespace=True)
+ self.flow_level += 1
+ self.increase_indent(flow=True)
+ self.state = self.expect_first_flow_sequence_item
+
+ def expect_first_flow_sequence_item(self):
+ if isinstance(self.event, SequenceEndEvent):
+ self.indent = self.indents.pop()
+ self.flow_level -= 1
+ self.write_indicator(']', False)
+ self.state = self.states.pop()
+ else:
+ if self.canonical or self.column > self.best_width:
+ self.write_indent()
+ self.states.append(self.expect_flow_sequence_item)
+ self.expect_node(sequence=True)
+
+ def expect_flow_sequence_item(self):
+ if isinstance(self.event, SequenceEndEvent):
+ self.indent = self.indents.pop()
+ self.flow_level -= 1
+ if self.canonical:
+ self.write_indicator(',', False)
+ self.write_indent()
+ self.write_indicator(']', False)
+ self.state = self.states.pop()
+ else:
+ self.write_indicator(',', False)
+ if self.canonical or self.column > self.best_width:
+ self.write_indent()
+ self.states.append(self.expect_flow_sequence_item)
+ self.expect_node(sequence=True)
+
+ # Flow mapping handlers.
+
+ def expect_flow_mapping(self):
+ self.write_indicator('{', True, whitespace=True)
+ self.flow_level += 1
+ self.increase_indent(flow=True)
+ self.state = self.expect_first_flow_mapping_key
+
+ def expect_first_flow_mapping_key(self):
+ if isinstance(self.event, MappingEndEvent):
+ self.indent = self.indents.pop()
+ self.flow_level -= 1
+ self.write_indicator('}', False)
+ self.state = self.states.pop()
+ else:
+ if self.canonical or self.column > self.best_width:
+ self.write_indent()
+ if not self.canonical and self.check_simple_key():
+ self.states.append(self.expect_flow_mapping_simple_value)
+ self.expect_node(mapping=True, simple_key=True)
+ else:
+ self.write_indicator('?', True)
+ self.states.append(self.expect_flow_mapping_value)
+ self.expect_node(mapping=True)
+
+ def expect_flow_mapping_key(self):
+ if isinstance(self.event, MappingEndEvent):
+ self.indent = self.indents.pop()
+ self.flow_level -= 1
+ if self.canonical:
+ self.write_indicator(',', False)
+ self.write_indent()
+ self.write_indicator('}', False)
+ self.state = self.states.pop()
+ else:
+ self.write_indicator(',', False)
+ if self.canonical or self.column > self.best_width:
+ self.write_indent()
+ if not self.canonical and self.check_simple_key():
+ self.states.append(self.expect_flow_mapping_simple_value)
+ self.expect_node(mapping=True, simple_key=True)
+ else:
+ self.write_indicator('?', True)
+ self.states.append(self.expect_flow_mapping_value)
+ self.expect_node(mapping=True)
+
+ def expect_flow_mapping_simple_value(self):
+ self.write_indicator(':', False)
+ self.states.append(self.expect_flow_mapping_key)
+ self.expect_node(mapping=True)
+
+ def expect_flow_mapping_value(self):
+ if self.canonical or self.column > self.best_width:
+ self.write_indent()
+ self.write_indicator(':', True)
+ self.states.append(self.expect_flow_mapping_key)
+ self.expect_node(mapping=True)
+
+ # Block sequence handlers.
+
+ def expect_block_sequence(self):
+ indentless = (self.mapping_context and not self.indention)
+ self.increase_indent(flow=False, indentless=indentless)
+ self.state = self.expect_first_block_sequence_item
+
+ def expect_first_block_sequence_item(self):
+ return self.expect_block_sequence_item(first=True)
+
+ def expect_block_sequence_item(self, first=False):
+ if not first and isinstance(self.event, SequenceEndEvent):
+ self.indent = self.indents.pop()
+ self.state = self.states.pop()
+ else:
+ self.write_indent()
+ self.write_indicator('-', True, indention=True)
+ self.states.append(self.expect_block_sequence_item)
+ self.expect_node(sequence=True)
+
+ # Block mapping handlers.
+
+ def expect_block_mapping(self):
+ self.increase_indent(flow=False)
+ self.state = self.expect_first_block_mapping_key
+
+ def expect_first_block_mapping_key(self):
+ return self.expect_block_mapping_key(first=True)
+
+ def expect_block_mapping_key(self, first=False):
+ if not first and isinstance(self.event, MappingEndEvent):
+ self.indent = self.indents.pop()
+ self.state = self.states.pop()
+ else:
+ self.write_indent()
+ if self.check_simple_key():
+ self.states.append(self.expect_block_mapping_simple_value)
+ self.expect_node(mapping=True, simple_key=True)
+ else:
+ self.write_indicator('?', True, indention=True)
+ self.states.append(self.expect_block_mapping_value)
+ self.expect_node(mapping=True)
+
+ def expect_block_mapping_simple_value(self):
+ self.write_indicator(':', False)
+ self.states.append(self.expect_block_mapping_key)
+ self.expect_node(mapping=True)
+
+ def expect_block_mapping_value(self):
+ self.write_indent()
+ self.write_indicator(':', True, indention=True)
+ self.states.append(self.expect_block_mapping_key)
+ self.expect_node(mapping=True)
+
+ # Checkers.
+
+ def check_empty_sequence(self):
+ return (isinstance(self.event, SequenceStartEvent) and self.events
+ and isinstance(self.events[0], SequenceEndEvent))
+
+ def check_empty_mapping(self):
+ return (isinstance(self.event, MappingStartEvent) and self.events
+ and isinstance(self.events[0], MappingEndEvent))
+
+ def check_empty_document(self):
+ if not isinstance(self.event, DocumentStartEvent) or not self.events:
+ return False
+ event = self.events[0]
+ return (isinstance(event, ScalarEvent) and event.anchor is None
+ and event.tag is None and event.implicit and event.value == '')
+
+ def check_simple_key(self):
+ length = 0
+ if isinstance(self.event, NodeEvent) and self.event.anchor is not None:
+ if self.prepared_anchor is None:
+ self.prepared_anchor = self.prepare_anchor(self.event.anchor)
+ length += len(self.prepared_anchor)
+ if isinstance(self.event, (ScalarEvent, CollectionStartEvent)) \
+ and self.event.tag is not None:
+ if self.prepared_tag is None:
+ self.prepared_tag = self.prepare_tag(self.event.tag)
+ length += len(self.prepared_tag)
+ if isinstance(self.event, ScalarEvent):
+ if self.analysis is None:
+ self.analysis = self.analyze_scalar(self.event.value)
+ length += len(self.analysis.scalar)
+ return (length < 128 and (isinstance(self.event, AliasEvent)
+ or (isinstance(self.event, ScalarEvent)
+ and not self.analysis.empty and not self.analysis.multiline)
+ or self.check_empty_sequence() or self.check_empty_mapping()))
+
+ # Anchor, Tag, and Scalar processors.
+
+ def process_anchor(self, indicator):
+ if self.event.anchor is None:
+ self.prepared_anchor = None
+ return
+ if self.prepared_anchor is None:
+ self.prepared_anchor = self.prepare_anchor(self.event.anchor)
+ if self.prepared_anchor:
+ self.write_indicator(indicator+self.prepared_anchor, True)
+ self.prepared_anchor = None
+
+ def process_tag(self):
+ tag = self.event.tag
+ if isinstance(self.event, ScalarEvent):
+ if self.style is None:
+ self.style = self.choose_scalar_style()
+ if ((not self.canonical or tag is None) and
+ ((self.style == '' and self.event.implicit[0])
+ or (self.style != '' and self.event.implicit[1]))):
+ self.prepared_tag = None
+ return
+ if self.event.implicit[0] and tag is None:
+ tag = '!'
+ self.prepared_tag = None
+ else:
+ if (not self.canonical or tag is None) and self.event.implicit:
+ self.prepared_tag = None
+ return
+ if tag is None:
+ raise EmitterError("tag is not specified")
+ if self.prepared_tag is None:
+ self.prepared_tag = self.prepare_tag(tag)
+ if self.prepared_tag:
+ self.write_indicator(self.prepared_tag, True)
+ self.prepared_tag = None
+
+ def choose_scalar_style(self):
+ if self.analysis is None:
+ self.analysis = self.analyze_scalar(self.event.value)
+ if self.event.style == '"' or self.canonical:
+ return '"'
+ if not self.event.style and self.event.implicit[0]:
+ if (not (self.simple_key_context and
+ (self.analysis.empty or self.analysis.multiline))
+ and (self.flow_level and self.analysis.allow_flow_plain
+ or (not self.flow_level and self.analysis.allow_block_plain))):
+ return ''
+ if self.event.style and self.event.style in '|>':
+ if (not self.flow_level and not self.simple_key_context
+ and self.analysis.allow_block):
+ return self.event.style
+ if not self.event.style or self.event.style == '\'':
+ if (self.analysis.allow_single_quoted and
+ not (self.simple_key_context and self.analysis.multiline)):
+ return '\''
+ return '"'
+
+ def process_scalar(self):
+ if self.analysis is None:
+ self.analysis = self.analyze_scalar(self.event.value)
+ if self.style is None:
+ self.style = self.choose_scalar_style()
+ split = (not self.simple_key_context)
+ #if self.analysis.multiline and split \
+ # and (not self.style or self.style in '\'\"'):
+ # self.write_indent()
+ if self.style == '"':
+ self.write_double_quoted(self.analysis.scalar, split)
+ elif self.style == '\'':
+ self.write_single_quoted(self.analysis.scalar, split)
+ elif self.style == '>':
+ self.write_folded(self.analysis.scalar)
+ elif self.style == '|':
+ self.write_literal(self.analysis.scalar)
+ else:
+ self.write_plain(self.analysis.scalar, split)
+ self.analysis = None
+ self.style = None
+
+ # Analyzers.
+
+ def prepare_version(self, version):
+ major, minor = version
+ if major != 1:
+ raise EmitterError("unsupported YAML version: %d.%d" % (major, minor))
+ return '%d.%d' % (major, minor)
+
+ def prepare_tag_handle(self, handle):
+ if not handle:
+ raise EmitterError("tag handle must not be empty")
+ if handle[0] != '!' or handle[-1] != '!':
+ raise EmitterError("tag handle must start and end with '!': %r" % handle)
+ for ch in handle[1:-1]:
+ if not ('0' <= ch <= '9' or 'A' <= ch <= 'Z' or 'a' <= ch <= 'z' \
+ or ch in '-_'):
+ raise EmitterError("invalid character %r in the tag handle: %r"
+ % (ch, handle))
+ return handle
+
+ def prepare_tag_prefix(self, prefix):
+ if not prefix:
+ raise EmitterError("tag prefix must not be empty")
+ chunks = []
+ start = end = 0
+ if prefix[0] == '!':
+ end = 1
+ while end < len(prefix):
+ ch = prefix[end]
+ if '0' <= ch <= '9' or 'A' <= ch <= 'Z' or 'a' <= ch <= 'z' \
+ or ch in '-;/?!:@&=+$,_.~*\'()[]':
+ end += 1
+ else:
+ if start < end:
+ chunks.append(prefix[start:end])
+ start = end = end+1
+ data = ch.encode('utf-8')
+ for ch in data:
+ chunks.append('%%%02X' % ord(ch))
+ if start < end:
+ chunks.append(prefix[start:end])
+ return ''.join(chunks)
+
+ def prepare_tag(self, tag):
+ if not tag:
+ raise EmitterError("tag must not be empty")
+ if tag == '!':
+ return tag
+ handle = None
+ suffix = tag
+ prefixes = sorted(self.tag_prefixes.keys())
+ for prefix in prefixes:
+ if tag.startswith(prefix) \
+ and (prefix == '!' or len(prefix) < len(tag)):
+ handle = self.tag_prefixes[prefix]
+ suffix = tag[len(prefix):]
+ chunks = []
+ start = end = 0
+ while end < len(suffix):
+ ch = suffix[end]
+ if '0' <= ch <= '9' or 'A' <= ch <= 'Z' or 'a' <= ch <= 'z' \
+ or ch in '-;/?:@&=+$,_.~*\'()[]' \
+ or (ch == '!' and handle != '!'):
+ end += 1
+ else:
+ if start < end:
+ chunks.append(suffix[start:end])
+ start = end = end+1
+ data = ch.encode('utf-8')
+ for ch in data:
+ chunks.append('%%%02X' % ch)
+ if start < end:
+ chunks.append(suffix[start:end])
+ suffix_text = ''.join(chunks)
+ if handle:
+ return '%s%s' % (handle, suffix_text)
+ else:
+ return '!<%s>' % suffix_text
+
+ def prepare_anchor(self, anchor):
+ if not anchor:
+ raise EmitterError("anchor must not be empty")
+ for ch in anchor:
+ if not ('0' <= ch <= '9' or 'A' <= ch <= 'Z' or 'a' <= ch <= 'z' \
+ or ch in '-_'):
+ raise EmitterError("invalid character %r in the anchor: %r"
+ % (ch, anchor))
+ return anchor
+
+ def analyze_scalar(self, scalar):
+
+ # Empty scalar is a special case.
+ if not scalar:
+ return ScalarAnalysis(scalar=scalar, empty=True, multiline=False,
+ allow_flow_plain=False, allow_block_plain=True,
+ allow_single_quoted=True, allow_double_quoted=True,
+ allow_block=False)
+
+ # Indicators and special characters.
+ block_indicators = False
+ flow_indicators = False
+ line_breaks = False
+ special_characters = False
+
+ # Important whitespace combinations.
+ leading_space = False
+ leading_break = False
+ trailing_space = False
+ trailing_break = False
+ break_space = False
+ space_break = False
+
+ # Check document indicators.
+ if scalar.startswith('---') or scalar.startswith('...'):
+ block_indicators = True
+ flow_indicators = True
+
+ # First character or preceded by a whitespace.
+ preceded_by_whitespace = True
+
+ # Last character or followed by a whitespace.
+ followed_by_whitespace = (len(scalar) == 1 or
+ scalar[1] in '\0 \t\r\n\x85\u2028\u2029')
+
+ # The previous character is a space.
+ previous_space = False
+
+ # The previous character is a break.
+ previous_break = False
+
+ index = 0
+ while index < len(scalar):
+ ch = scalar[index]
+
+ # Check for indicators.
+ if index == 0:
+ # Leading indicators are special characters.
+ if ch in '#,[]{}&*!|>\'\"%@`':
+ flow_indicators = True
+ block_indicators = True
+ if ch in '?:':
+ flow_indicators = True
+ if followed_by_whitespace:
+ block_indicators = True
+ if ch == '-' and followed_by_whitespace:
+ flow_indicators = True
+ block_indicators = True
+ else:
+ # Some indicators cannot appear within a scalar as well.
+ if ch in ',?[]{}':
+ flow_indicators = True
+ if ch == ':':
+ flow_indicators = True
+ if followed_by_whitespace:
+ block_indicators = True
+ if ch == '#' and preceded_by_whitespace:
+ flow_indicators = True
+ block_indicators = True
+
+ # Check for line breaks, special, and unicode characters.
+ if ch in '\n\x85\u2028\u2029':
+ line_breaks = True
+ if not (ch == '\n' or '\x20' <= ch <= '\x7E'):
+ if (ch == '\x85' or '\xA0' <= ch <= '\uD7FF'
+ or '\uE000' <= ch <= '\uFFFD'
+ or '\U00010000' <= ch < '\U0010ffff') and ch != '\uFEFF':
+ unicode_characters = True
+ if not self.allow_unicode:
+ special_characters = True
+ else:
+ special_characters = True
+
+ # Detect important whitespace combinations.
+ if ch == ' ':
+ if index == 0:
+ leading_space = True
+ if index == len(scalar)-1:
+ trailing_space = True
+ if previous_break:
+ break_space = True
+ previous_space = True
+ previous_break = False
+ elif ch in '\n\x85\u2028\u2029':
+ if index == 0:
+ leading_break = True
+ if index == len(scalar)-1:
+ trailing_break = True
+ if previous_space:
+ space_break = True
+ previous_space = False
+ previous_break = True
+ else:
+ previous_space = False
+ previous_break = False
+
+ # Prepare for the next character.
+ index += 1
+ preceded_by_whitespace = (ch in '\0 \t\r\n\x85\u2028\u2029')
+ followed_by_whitespace = (index+1 >= len(scalar) or
+ scalar[index+1] in '\0 \t\r\n\x85\u2028\u2029')
+
+ # Let's decide what styles are allowed.
+ allow_flow_plain = True
+ allow_block_plain = True
+ allow_single_quoted = True
+ allow_double_quoted = True
+ allow_block = True
+
+ # Leading and trailing whitespaces are bad for plain scalars.
+ if (leading_space or leading_break
+ or trailing_space or trailing_break):
+ allow_flow_plain = allow_block_plain = False
+
+ # We do not permit trailing spaces for block scalars.
+ if trailing_space:
+ allow_block = False
+
+ # Spaces at the beginning of a new line are only acceptable for block
+ # scalars.
+ if break_space:
+ allow_flow_plain = allow_block_plain = allow_single_quoted = False
+
+ # Spaces followed by breaks, as well as special character are only
+ # allowed for double quoted scalars.
+ if space_break or special_characters:
+ allow_flow_plain = allow_block_plain = \
+ allow_single_quoted = allow_block = False
+
+ # Although the plain scalar writer supports breaks, we never emit
+ # multiline plain scalars.
+ if line_breaks:
+ allow_flow_plain = allow_block_plain = False
+
+ # Flow indicators are forbidden for flow plain scalars.
+ if flow_indicators:
+ allow_flow_plain = False
+
+ # Block indicators are forbidden for block plain scalars.
+ if block_indicators:
+ allow_block_plain = False
+
+ return ScalarAnalysis(scalar=scalar,
+ empty=False, multiline=line_breaks,
+ allow_flow_plain=allow_flow_plain,
+ allow_block_plain=allow_block_plain,
+ allow_single_quoted=allow_single_quoted,
+ allow_double_quoted=allow_double_quoted,
+ allow_block=allow_block)
+
+ # Writers.
+
+ def flush_stream(self):
+ if hasattr(self.stream, 'flush'):
+ self.stream.flush()
+
+ def write_stream_start(self):
+ # Write BOM if needed.
+ if self.encoding and self.encoding.startswith('utf-16'):
+ self.stream.write('\uFEFF'.encode(self.encoding))
+
+ def write_stream_end(self):
+ self.flush_stream()
+
+ def write_indicator(self, indicator, need_whitespace,
+ whitespace=False, indention=False):
+ if self.whitespace or not need_whitespace:
+ data = indicator
+ else:
+ data = ' '+indicator
+ self.whitespace = whitespace
+ self.indention = self.indention and indention
+ self.column += len(data)
+ self.open_ended = False
+ if self.encoding:
+ data = data.encode(self.encoding)
+ self.stream.write(data)
+
+ def write_indent(self):
+ indent = self.indent or 0
+ if not self.indention or self.column > indent \
+ or (self.column == indent and not self.whitespace):
+ self.write_line_break()
+ if self.column < indent:
+ self.whitespace = True
+ data = ' '*(indent-self.column)
+ self.column = indent
+ if self.encoding:
+ data = data.encode(self.encoding)
+ self.stream.write(data)
+
+ def write_line_break(self, data=None):
+ if data is None:
+ data = self.best_line_break
+ self.whitespace = True
+ self.indention = True
+ self.line += 1
+ self.column = 0
+ if self.encoding:
+ data = data.encode(self.encoding)
+ self.stream.write(data)
+
+ def write_version_directive(self, version_text):
+ data = '%%YAML %s' % version_text
+ if self.encoding:
+ data = data.encode(self.encoding)
+ self.stream.write(data)
+ self.write_line_break()
+
+ def write_tag_directive(self, handle_text, prefix_text):
+ data = '%%TAG %s %s' % (handle_text, prefix_text)
+ if self.encoding:
+ data = data.encode(self.encoding)
+ self.stream.write(data)
+ self.write_line_break()
+
+ # Scalar streams.
+
+ def write_single_quoted(self, text, split=True):
+ self.write_indicator('\'', True)
+ spaces = False
+ breaks = False
+ start = end = 0
+ while end <= len(text):
+ ch = None
+ if end < len(text):
+ ch = text[end]
+ if spaces:
+ if ch is None or ch != ' ':
+ if start+1 == end and self.column > self.best_width and split \
+ and start != 0 and end != len(text):
+ self.write_indent()
+ else:
+ data = text[start:end]
+ self.column += len(data)
+ if self.encoding:
+ data = data.encode(self.encoding)
+ self.stream.write(data)
+ start = end
+ elif breaks:
+ if ch is None or ch not in '\n\x85\u2028\u2029':
+ if text[start] == '\n':
+ self.write_line_break()
+ for br in text[start:end]:
+ if br == '\n':
+ self.write_line_break()
+ else:
+ self.write_line_break(br)
+ self.write_indent()
+ start = end
+ else:
+ if ch is None or ch in ' \n\x85\u2028\u2029' or ch == '\'':
+ if start < end:
+ data = text[start:end]
+ self.column += len(data)
+ if self.encoding:
+ data = data.encode(self.encoding)
+ self.stream.write(data)
+ start = end
+ if ch == '\'':
+ data = '\'\''
+ self.column += 2
+ if self.encoding:
+ data = data.encode(self.encoding)
+ self.stream.write(data)
+ start = end + 1
+ if ch is not None:
+ spaces = (ch == ' ')
+ breaks = (ch in '\n\x85\u2028\u2029')
+ end += 1
+ self.write_indicator('\'', False)
+
+ ESCAPE_REPLACEMENTS = {
+ '\0': '0',
+ '\x07': 'a',
+ '\x08': 'b',
+ '\x09': 't',
+ '\x0A': 'n',
+ '\x0B': 'v',
+ '\x0C': 'f',
+ '\x0D': 'r',
+ '\x1B': 'e',
+ '\"': '\"',
+ '\\': '\\',
+ '\x85': 'N',
+ '\xA0': '_',
+ '\u2028': 'L',
+ '\u2029': 'P',
+ }
+
+ def write_double_quoted(self, text, split=True):
+ self.write_indicator('"', True)
+ start = end = 0
+ while end <= len(text):
+ ch = None
+ if end < len(text):
+ ch = text[end]
+ if ch is None or ch in '"\\\x85\u2028\u2029\uFEFF' \
+ or not ('\x20' <= ch <= '\x7E'
+ or (self.allow_unicode
+ and ('\xA0' <= ch <= '\uD7FF'
+ or '\uE000' <= ch <= '\uFFFD'))):
+ if start < end:
+ data = text[start:end]
+ self.column += len(data)
+ if self.encoding:
+ data = data.encode(self.encoding)
+ self.stream.write(data)
+ start = end
+ if ch is not None:
+ if ch in self.ESCAPE_REPLACEMENTS:
+ data = '\\'+self.ESCAPE_REPLACEMENTS[ch]
+ elif ch <= '\xFF':
+ data = '\\x%02X' % ord(ch)
+ elif ch <= '\uFFFF':
+ data = '\\u%04X' % ord(ch)
+ else:
+ data = '\\U%08X' % ord(ch)
+ self.column += len(data)
+ if self.encoding:
+ data = data.encode(self.encoding)
+ self.stream.write(data)
+ start = end+1
+ if 0 < end < len(text)-1 and (ch == ' ' or start >= end) \
+ and self.column+(end-start) > self.best_width and split:
+ data = text[start:end]+'\\'
+ if start < end:
+ start = end
+ self.column += len(data)
+ if self.encoding:
+ data = data.encode(self.encoding)
+ self.stream.write(data)
+ self.write_indent()
+ self.whitespace = False
+ self.indention = False
+ if text[start] == ' ':
+ data = '\\'
+ self.column += len(data)
+ if self.encoding:
+ data = data.encode(self.encoding)
+ self.stream.write(data)
+ end += 1
+ self.write_indicator('"', False)
+
+ def determine_block_hints(self, text):
+ hints = ''
+ if text:
+ if text[0] in ' \n\x85\u2028\u2029':
+ hints += str(self.best_indent)
+ if text[-1] not in '\n\x85\u2028\u2029':
+ hints += '-'
+ elif len(text) == 1 or text[-2] in '\n\x85\u2028\u2029':
+ hints += '+'
+ return hints
+
+ def write_folded(self, text):
+ hints = self.determine_block_hints(text)
+ self.write_indicator('>'+hints, True)
+ if hints[-1:] == '+':
+ self.open_ended = True
+ self.write_line_break()
+ leading_space = True
+ spaces = False
+ breaks = True
+ start = end = 0
+ while end <= len(text):
+ ch = None
+ if end < len(text):
+ ch = text[end]
+ if breaks:
+ if ch is None or ch not in '\n\x85\u2028\u2029':
+ if not leading_space and ch is not None and ch != ' ' \
+ and text[start] == '\n':
+ self.write_line_break()
+ leading_space = (ch == ' ')
+ for br in text[start:end]:
+ if br == '\n':
+ self.write_line_break()
+ else:
+ self.write_line_break(br)
+ if ch is not None:
+ self.write_indent()
+ start = end
+ elif spaces:
+ if ch != ' ':
+ if start+1 == end and self.column > self.best_width:
+ self.write_indent()
+ else:
+ data = text[start:end]
+ self.column += len(data)
+ if self.encoding:
+ data = data.encode(self.encoding)
+ self.stream.write(data)
+ start = end
+ else:
+ if ch is None or ch in ' \n\x85\u2028\u2029':
+ data = text[start:end]
+ self.column += len(data)
+ if self.encoding:
+ data = data.encode(self.encoding)
+ self.stream.write(data)
+ if ch is None:
+ self.write_line_break()
+ start = end
+ if ch is not None:
+ breaks = (ch in '\n\x85\u2028\u2029')
+ spaces = (ch == ' ')
+ end += 1
+
+ def write_literal(self, text):
+ hints = self.determine_block_hints(text)
+ self.write_indicator('|'+hints, True)
+ if hints[-1:] == '+':
+ self.open_ended = True
+ self.write_line_break()
+ breaks = True
+ start = end = 0
+ while end <= len(text):
+ ch = None
+ if end < len(text):
+ ch = text[end]
+ if breaks:
+ if ch is None or ch not in '\n\x85\u2028\u2029':
+ for br in text[start:end]:
+ if br == '\n':
+ self.write_line_break()
+ else:
+ self.write_line_break(br)
+ if ch is not None:
+ self.write_indent()
+ start = end
+ else:
+ if ch is None or ch in '\n\x85\u2028\u2029':
+ data = text[start:end]
+ if self.encoding:
+ data = data.encode(self.encoding)
+ self.stream.write(data)
+ if ch is None:
+ self.write_line_break()
+ start = end
+ if ch is not None:
+ breaks = (ch in '\n\x85\u2028\u2029')
+ end += 1
+
+ def write_plain(self, text, split=True):
+ if self.root_context:
+ self.open_ended = True
+ if not text:
+ return
+ if not self.whitespace:
+ data = ' '
+ self.column += len(data)
+ if self.encoding:
+ data = data.encode(self.encoding)
+ self.stream.write(data)
+ self.whitespace = False
+ self.indention = False
+ spaces = False
+ breaks = False
+ start = end = 0
+ while end <= len(text):
+ ch = None
+ if end < len(text):
+ ch = text[end]
+ if spaces:
+ if ch != ' ':
+ if start+1 == end and self.column > self.best_width and split:
+ self.write_indent()
+ self.whitespace = False
+ self.indention = False
+ else:
+ data = text[start:end]
+ self.column += len(data)
+ if self.encoding:
+ data = data.encode(self.encoding)
+ self.stream.write(data)
+ start = end
+ elif breaks:
+ if ch not in '\n\x85\u2028\u2029':
+ if text[start] == '\n':
+ self.write_line_break()
+ for br in text[start:end]:
+ if br == '\n':
+ self.write_line_break()
+ else:
+ self.write_line_break(br)
+ self.write_indent()
+ self.whitespace = False
+ self.indention = False
+ start = end
+ else:
+ if ch is None or ch in ' \n\x85\u2028\u2029':
+ data = text[start:end]
+ self.column += len(data)
+ if self.encoding:
+ data = data.encode(self.encoding)
+ self.stream.write(data)
+ start = end
+ if ch is not None:
+ spaces = (ch == ' ')
+ breaks = (ch in '\n\x85\u2028\u2029')
+ end += 1
diff --git a/yaml/lib3/yaml/error.py b/yaml/lib3/yaml/error.py
new file mode 100644
index 0000000000..b796b4dc51
--- /dev/null
+++ b/yaml/lib3/yaml/error.py
@@ -0,0 +1,75 @@
+
+__all__ = ['Mark', 'YAMLError', 'MarkedYAMLError']
+
+class Mark:
+
+ def __init__(self, name, index, line, column, buffer, pointer):
+ self.name = name
+ self.index = index
+ self.line = line
+ self.column = column
+ self.buffer = buffer
+ self.pointer = pointer
+
+ def get_snippet(self, indent=4, max_length=75):
+ if self.buffer is None:
+ return None
+ head = ''
+ start = self.pointer
+ while start > 0 and self.buffer[start-1] not in '\0\r\n\x85\u2028\u2029':
+ start -= 1
+ if self.pointer-start > max_length/2-1:
+ head = ' ... '
+ start += 5
+ break
+ tail = ''
+ end = self.pointer
+ while end < len(self.buffer) and self.buffer[end] not in '\0\r\n\x85\u2028\u2029':
+ end += 1
+ if end-self.pointer > max_length/2-1:
+ tail = ' ... '
+ end -= 5
+ break
+ snippet = self.buffer[start:end]
+ return ' '*indent + head + snippet + tail + '\n' \
+ + ' '*(indent+self.pointer-start+len(head)) + '^'
+
+ def __str__(self):
+ snippet = self.get_snippet()
+ where = " in \"%s\", line %d, column %d" \
+ % (self.name, self.line+1, self.column+1)
+ if snippet is not None:
+ where += ":\n"+snippet
+ return where
+
+class YAMLError(Exception):
+ pass
+
+class MarkedYAMLError(YAMLError):
+
+ def __init__(self, context=None, context_mark=None,
+ problem=None, problem_mark=None, note=None):
+ self.context = context
+ self.context_mark = context_mark
+ self.problem = problem
+ self.problem_mark = problem_mark
+ self.note = note
+
+ def __str__(self):
+ lines = []
+ if self.context is not None:
+ lines.append(self.context)
+ if self.context_mark is not None \
+ and (self.problem is None or self.problem_mark is None
+ or self.context_mark.name != self.problem_mark.name
+ or self.context_mark.line != self.problem_mark.line
+ or self.context_mark.column != self.problem_mark.column):
+ lines.append(str(self.context_mark))
+ if self.problem is not None:
+ lines.append(self.problem)
+ if self.problem_mark is not None:
+ lines.append(str(self.problem_mark))
+ if self.note is not None:
+ lines.append(self.note)
+ return '\n'.join(lines)
+
diff --git a/yaml/lib3/yaml/events.py b/yaml/lib3/yaml/events.py
new file mode 100644
index 0000000000..f79ad389cb
--- /dev/null
+++ b/yaml/lib3/yaml/events.py
@@ -0,0 +1,86 @@
+
+# Abstract classes.
+
+class Event(object):
+ def __init__(self, start_mark=None, end_mark=None):
+ self.start_mark = start_mark
+ self.end_mark = end_mark
+ def __repr__(self):
+ attributes = [key for key in ['anchor', 'tag', 'implicit', 'value']
+ if hasattr(self, key)]
+ arguments = ', '.join(['%s=%r' % (key, getattr(self, key))
+ for key in attributes])
+ return '%s(%s)' % (self.__class__.__name__, arguments)
+
+class NodeEvent(Event):
+ def __init__(self, anchor, start_mark=None, end_mark=None):
+ self.anchor = anchor
+ self.start_mark = start_mark
+ self.end_mark = end_mark
+
+class CollectionStartEvent(NodeEvent):
+ def __init__(self, anchor, tag, implicit, start_mark=None, end_mark=None,
+ flow_style=None):
+ self.anchor = anchor
+ self.tag = tag
+ self.implicit = implicit
+ self.start_mark = start_mark
+ self.end_mark = end_mark
+ self.flow_style = flow_style
+
+class CollectionEndEvent(Event):
+ pass
+
+# Implementations.
+
+class StreamStartEvent(Event):
+ def __init__(self, start_mark=None, end_mark=None, encoding=None):
+ self.start_mark = start_mark
+ self.end_mark = end_mark
+ self.encoding = encoding
+
+class StreamEndEvent(Event):
+ pass
+
+class DocumentStartEvent(Event):
+ def __init__(self, start_mark=None, end_mark=None,
+ explicit=None, version=None, tags=None):
+ self.start_mark = start_mark
+ self.end_mark = end_mark
+ self.explicit = explicit
+ self.version = version
+ self.tags = tags
+
+class DocumentEndEvent(Event):
+ def __init__(self, start_mark=None, end_mark=None,
+ explicit=None):
+ self.start_mark = start_mark
+ self.end_mark = end_mark
+ self.explicit = explicit
+
+class AliasEvent(NodeEvent):
+ pass
+
+class ScalarEvent(NodeEvent):
+ def __init__(self, anchor, tag, implicit, value,
+ start_mark=None, end_mark=None, style=None):
+ self.anchor = anchor
+ self.tag = tag
+ self.implicit = implicit
+ self.value = value
+ self.start_mark = start_mark
+ self.end_mark = end_mark
+ self.style = style
+
+class SequenceStartEvent(CollectionStartEvent):
+ pass
+
+class SequenceEndEvent(CollectionEndEvent):
+ pass
+
+class MappingStartEvent(CollectionStartEvent):
+ pass
+
+class MappingEndEvent(CollectionEndEvent):
+ pass
+
diff --git a/yaml/lib3/yaml/loader.py b/yaml/lib3/yaml/loader.py
new file mode 100644
index 0000000000..e90c11224c
--- /dev/null
+++ b/yaml/lib3/yaml/loader.py
@@ -0,0 +1,63 @@
+
+__all__ = ['BaseLoader', 'FullLoader', 'SafeLoader', 'Loader', 'UnsafeLoader']
+
+from .reader import *
+from .scanner import *
+from .parser import *
+from .composer import *
+from .constructor import *
+from .resolver import *
+
+class BaseLoader(Reader, Scanner, Parser, Composer, BaseConstructor, BaseResolver):
+
+ def __init__(self, stream):
+ Reader.__init__(self, stream)
+ Scanner.__init__(self)
+ Parser.__init__(self)
+ Composer.__init__(self)
+ BaseConstructor.__init__(self)
+ BaseResolver.__init__(self)
+
+class FullLoader(Reader, Scanner, Parser, Composer, FullConstructor, Resolver):
+
+ def __init__(self, stream):
+ Reader.__init__(self, stream)
+ Scanner.__init__(self)
+ Parser.__init__(self)
+ Composer.__init__(self)
+ FullConstructor.__init__(self)
+ Resolver.__init__(self)
+
+class SafeLoader(Reader, Scanner, Parser, Composer, SafeConstructor, Resolver):
+
+ def __init__(self, stream):
+ Reader.__init__(self, stream)
+ Scanner.__init__(self)
+ Parser.__init__(self)
+ Composer.__init__(self)
+ SafeConstructor.__init__(self)
+ Resolver.__init__(self)
+
+class Loader(Reader, Scanner, Parser, Composer, Constructor, Resolver):
+
+ def __init__(self, stream):
+ Reader.__init__(self, stream)
+ Scanner.__init__(self)
+ Parser.__init__(self)
+ Composer.__init__(self)
+ Constructor.__init__(self)
+ Resolver.__init__(self)
+
+# UnsafeLoader is the same as Loader (which is and was always unsafe on
+# untrusted input). Use of either Loader or UnsafeLoader should be rare, since
+# FullLoad should be able to load almost all YAML safely. Loader is left intact
+# to ensure backwards compatibility.
+class UnsafeLoader(Reader, Scanner, Parser, Composer, Constructor, Resolver):
+
+ def __init__(self, stream):
+ Reader.__init__(self, stream)
+ Scanner.__init__(self)
+ Parser.__init__(self)
+ Composer.__init__(self)
+ Constructor.__init__(self)
+ Resolver.__init__(self)
diff --git a/yaml/lib3/yaml/nodes.py b/yaml/lib3/yaml/nodes.py
new file mode 100644
index 0000000000..c4f070c41e
--- /dev/null
+++ b/yaml/lib3/yaml/nodes.py
@@ -0,0 +1,49 @@
+
+class Node(object):
+ def __init__(self, tag, value, start_mark, end_mark):
+ self.tag = tag
+ self.value = value
+ self.start_mark = start_mark
+ self.end_mark = end_mark
+ def __repr__(self):
+ value = self.value
+ #if isinstance(value, list):
+ # if len(value) == 0:
+ # value = '<empty>'
+ # elif len(value) == 1:
+ # value = '<1 item>'
+ # else:
+ # value = '<%d items>' % len(value)
+ #else:
+ # if len(value) > 75:
+ # value = repr(value[:70]+u' ... ')
+ # else:
+ # value = repr(value)
+ value = repr(value)
+ return '%s(tag=%r, value=%s)' % (self.__class__.__name__, self.tag, value)
+
+class ScalarNode(Node):
+ id = 'scalar'
+ def __init__(self, tag, value,
+ start_mark=None, end_mark=None, style=None):
+ self.tag = tag
+ self.value = value
+ self.start_mark = start_mark
+ self.end_mark = end_mark
+ self.style = style
+
+class CollectionNode(Node):
+ def __init__(self, tag, value,
+ start_mark=None, end_mark=None, flow_style=None):
+ self.tag = tag
+ self.value = value
+ self.start_mark = start_mark
+ self.end_mark = end_mark
+ self.flow_style = flow_style
+
+class SequenceNode(CollectionNode):
+ id = 'sequence'
+
+class MappingNode(CollectionNode):
+ id = 'mapping'
+
diff --git a/yaml/lib3/yaml/parser.py b/yaml/lib3/yaml/parser.py
new file mode 100644
index 0000000000..13a5995d29
--- /dev/null
+++ b/yaml/lib3/yaml/parser.py
@@ -0,0 +1,589 @@
+
+# The following YAML grammar is LL(1) and is parsed by a recursive descent
+# parser.
+#
+# stream ::= STREAM-START implicit_document? explicit_document* STREAM-END
+# implicit_document ::= block_node DOCUMENT-END*
+# explicit_document ::= DIRECTIVE* DOCUMENT-START block_node? DOCUMENT-END*
+# block_node_or_indentless_sequence ::=
+# ALIAS
+# | properties (block_content | indentless_block_sequence)?
+# | block_content
+# | indentless_block_sequence
+# block_node ::= ALIAS
+# | properties block_content?
+# | block_content
+# flow_node ::= ALIAS
+# | properties flow_content?
+# | flow_content
+# properties ::= TAG ANCHOR? | ANCHOR TAG?
+# block_content ::= block_collection | flow_collection | SCALAR
+# flow_content ::= flow_collection | SCALAR
+# block_collection ::= block_sequence | block_mapping
+# flow_collection ::= flow_sequence | flow_mapping
+# block_sequence ::= BLOCK-SEQUENCE-START (BLOCK-ENTRY block_node?)* BLOCK-END
+# indentless_sequence ::= (BLOCK-ENTRY block_node?)+
+# block_mapping ::= BLOCK-MAPPING_START
+# ((KEY block_node_or_indentless_sequence?)?
+# (VALUE block_node_or_indentless_sequence?)?)*
+# BLOCK-END
+# flow_sequence ::= FLOW-SEQUENCE-START
+# (flow_sequence_entry FLOW-ENTRY)*
+# flow_sequence_entry?
+# FLOW-SEQUENCE-END
+# flow_sequence_entry ::= flow_node | KEY flow_node? (VALUE flow_node?)?
+# flow_mapping ::= FLOW-MAPPING-START
+# (flow_mapping_entry FLOW-ENTRY)*
+# flow_mapping_entry?
+# FLOW-MAPPING-END
+# flow_mapping_entry ::= flow_node | KEY flow_node? (VALUE flow_node?)?
+#
+# FIRST sets:
+#
+# stream: { STREAM-START }
+# explicit_document: { DIRECTIVE DOCUMENT-START }
+# implicit_document: FIRST(block_node)
+# block_node: { ALIAS TAG ANCHOR SCALAR BLOCK-SEQUENCE-START BLOCK-MAPPING-START FLOW-SEQUENCE-START FLOW-MAPPING-START }
+# flow_node: { ALIAS ANCHOR TAG SCALAR FLOW-SEQUENCE-START FLOW-MAPPING-START }
+# block_content: { BLOCK-SEQUENCE-START BLOCK-MAPPING-START FLOW-SEQUENCE-START FLOW-MAPPING-START SCALAR }
+# flow_content: { FLOW-SEQUENCE-START FLOW-MAPPING-START SCALAR }
+# block_collection: { BLOCK-SEQUENCE-START BLOCK-MAPPING-START }
+# flow_collection: { FLOW-SEQUENCE-START FLOW-MAPPING-START }
+# block_sequence: { BLOCK-SEQUENCE-START }
+# block_mapping: { BLOCK-MAPPING-START }
+# block_node_or_indentless_sequence: { ALIAS ANCHOR TAG SCALAR BLOCK-SEQUENCE-START BLOCK-MAPPING-START FLOW-SEQUENCE-START FLOW-MAPPING-START BLOCK-ENTRY }
+# indentless_sequence: { ENTRY }
+# flow_collection: { FLOW-SEQUENCE-START FLOW-MAPPING-START }
+# flow_sequence: { FLOW-SEQUENCE-START }
+# flow_mapping: { FLOW-MAPPING-START }
+# flow_sequence_entry: { ALIAS ANCHOR TAG SCALAR FLOW-SEQUENCE-START FLOW-MAPPING-START KEY }
+# flow_mapping_entry: { ALIAS ANCHOR TAG SCALAR FLOW-SEQUENCE-START FLOW-MAPPING-START KEY }
+
+__all__ = ['Parser', 'ParserError']
+
+from .error import MarkedYAMLError
+from .tokens import *
+from .events import *
+from .scanner import *
+
+class ParserError(MarkedYAMLError):
+ pass
+
+class Parser:
+ # Since writing a recursive-descendant parser is a straightforward task, we
+ # do not give many comments here.
+
+ DEFAULT_TAGS = {
+ '!': '!',
+ '!!': 'tag:yaml.org,2002:',
+ }
+
+ def __init__(self):
+ self.current_event = None
+ self.yaml_version = None
+ self.tag_handles = {}
+ self.states = []
+ self.marks = []
+ self.state = self.parse_stream_start
+
+ def dispose(self):
+ # Reset the state attributes (to clear self-references)
+ self.states = []
+ self.state = None
+
+ def check_event(self, *choices):
+ # Check the type of the next event.
+ if self.current_event is None:
+ if self.state:
+ self.current_event = self.state()
+ if self.current_event is not None:
+ if not choices:
+ return True
+ for choice in choices:
+ if isinstance(self.current_event, choice):
+ return True
+ return False
+
+ def peek_event(self):
+ # Get the next event.
+ if self.current_event is None:
+ if self.state:
+ self.current_event = self.state()
+ return self.current_event
+
+ def get_event(self):
+ # Get the next event and proceed further.
+ if self.current_event is None:
+ if self.state:
+ self.current_event = self.state()
+ value = self.current_event
+ self.current_event = None
+ return value
+
+ # stream ::= STREAM-START implicit_document? explicit_document* STREAM-END
+ # implicit_document ::= block_node DOCUMENT-END*
+ # explicit_document ::= DIRECTIVE* DOCUMENT-START block_node? DOCUMENT-END*
+
+ def parse_stream_start(self):
+
+ # Parse the stream start.
+ token = self.get_token()
+ event = StreamStartEvent(token.start_mark, token.end_mark,
+ encoding=token.encoding)
+
+ # Prepare the next state.
+ self.state = self.parse_implicit_document_start
+
+ return event
+
+ def parse_implicit_document_start(self):
+
+ # Parse an implicit document.
+ if not self.check_token(DirectiveToken, DocumentStartToken,
+ StreamEndToken):
+ self.tag_handles = self.DEFAULT_TAGS
+ token = self.peek_token()
+ start_mark = end_mark = token.start_mark
+ event = DocumentStartEvent(start_mark, end_mark,
+ explicit=False)
+
+ # Prepare the next state.
+ self.states.append(self.parse_document_end)
+ self.state = self.parse_block_node
+
+ return event
+
+ else:
+ return self.parse_document_start()
+
+ def parse_document_start(self):
+
+ # Parse any extra document end indicators.
+ while self.check_token(DocumentEndToken):
+ self.get_token()
+
+ # Parse an explicit document.
+ if not self.check_token(StreamEndToken):
+ token = self.peek_token()
+ start_mark = token.start_mark
+ version, tags = self.process_directives()
+ if not self.check_token(DocumentStartToken):
+ raise ParserError(None, None,
+ "expected '<document start>', but found %r"
+ % self.peek_token().id,
+ self.peek_token().start_mark)
+ token = self.get_token()
+ end_mark = token.end_mark
+ event = DocumentStartEvent(start_mark, end_mark,
+ explicit=True, version=version, tags=tags)
+ self.states.append(self.parse_document_end)
+ self.state = self.parse_document_content
+ else:
+ # Parse the end of the stream.
+ token = self.get_token()
+ event = StreamEndEvent(token.start_mark, token.end_mark)
+ assert not self.states
+ assert not self.marks
+ self.state = None
+ return event
+
+ def parse_document_end(self):
+
+ # Parse the document end.
+ token = self.peek_token()
+ start_mark = end_mark = token.start_mark
+ explicit = False
+ if self.check_token(DocumentEndToken):
+ token = self.get_token()
+ end_mark = token.end_mark
+ explicit = True
+ event = DocumentEndEvent(start_mark, end_mark,
+ explicit=explicit)
+
+ # Prepare the next state.
+ self.state = self.parse_document_start
+
+ return event
+
+ def parse_document_content(self):
+ if self.check_token(DirectiveToken,
+ DocumentStartToken, DocumentEndToken, StreamEndToken):
+ event = self.process_empty_scalar(self.peek_token().start_mark)
+ self.state = self.states.pop()
+ return event
+ else:
+ return self.parse_block_node()
+
+ def process_directives(self):
+ self.yaml_version = None
+ self.tag_handles = {}
+ while self.check_token(DirectiveToken):
+ token = self.get_token()
+ if token.name == 'YAML':
+ if self.yaml_version is not None:
+ raise ParserError(None, None,
+ "found duplicate YAML directive", token.start_mark)
+ major, minor = token.value
+ if major != 1:
+ raise ParserError(None, None,
+ "found incompatible YAML document (version 1.* is required)",
+ token.start_mark)
+ self.yaml_version = token.value
+ elif token.name == 'TAG':
+ handle, prefix = token.value
+ if handle in self.tag_handles:
+ raise ParserError(None, None,
+ "duplicate tag handle %r" % handle,
+ token.start_mark)
+ self.tag_handles[handle] = prefix
+ if self.tag_handles:
+ value = self.yaml_version, self.tag_handles.copy()
+ else:
+ value = self.yaml_version, None
+ for key in self.DEFAULT_TAGS:
+ if key not in self.tag_handles:
+ self.tag_handles[key] = self.DEFAULT_TAGS[key]
+ return value
+
+ # block_node_or_indentless_sequence ::= ALIAS
+ # | properties (block_content | indentless_block_sequence)?
+ # | block_content
+ # | indentless_block_sequence
+ # block_node ::= ALIAS
+ # | properties block_content?
+ # | block_content
+ # flow_node ::= ALIAS
+ # | properties flow_content?
+ # | flow_content
+ # properties ::= TAG ANCHOR? | ANCHOR TAG?
+ # block_content ::= block_collection | flow_collection | SCALAR
+ # flow_content ::= flow_collection | SCALAR
+ # block_collection ::= block_sequence | block_mapping
+ # flow_collection ::= flow_sequence | flow_mapping
+
+ def parse_block_node(self):
+ return self.parse_node(block=True)
+
+ def parse_flow_node(self):
+ return self.parse_node()
+
+ def parse_block_node_or_indentless_sequence(self):
+ return self.parse_node(block=True, indentless_sequence=True)
+
+ def parse_node(self, block=False, indentless_sequence=False):
+ if self.check_token(AliasToken):
+ token = self.get_token()
+ event = AliasEvent(token.value, token.start_mark, token.end_mark)
+ self.state = self.states.pop()
+ else:
+ anchor = None
+ tag = None
+ start_mark = end_mark = tag_mark = None
+ if self.check_token(AnchorToken):
+ token = self.get_token()
+ start_mark = token.start_mark
+ end_mark = token.end_mark
+ anchor = token.value
+ if self.check_token(TagToken):
+ token = self.get_token()
+ tag_mark = token.start_mark
+ end_mark = token.end_mark
+ tag = token.value
+ elif self.check_token(TagToken):
+ token = self.get_token()
+ start_mark = tag_mark = token.start_mark
+ end_mark = token.end_mark
+ tag = token.value
+ if self.check_token(AnchorToken):
+ token = self.get_token()
+ end_mark = token.end_mark
+ anchor = token.value
+ if tag is not None:
+ handle, suffix = tag
+ if handle is not None:
+ if handle not in self.tag_handles:
+ raise ParserError("while parsing a node", start_mark,
+ "found undefined tag handle %r" % handle,
+ tag_mark)
+ tag = self.tag_handles[handle]+suffix
+ else:
+ tag = suffix
+ #if tag == '!':
+ # raise ParserError("while parsing a node", start_mark,
+ # "found non-specific tag '!'", tag_mark,
+ # "Please check 'http://pyyaml.org/wiki/YAMLNonSpecificTag' and share your opinion.")
+ if start_mark is None:
+ start_mark = end_mark = self.peek_token().start_mark
+ event = None
+ implicit = (tag is None or tag == '!')
+ if indentless_sequence and self.check_token(BlockEntryToken):
+ end_mark = self.peek_token().end_mark
+ event = SequenceStartEvent(anchor, tag, implicit,
+ start_mark, end_mark)
+ self.state = self.parse_indentless_sequence_entry
+ else:
+ if self.check_token(ScalarToken):
+ token = self.get_token()
+ end_mark = token.end_mark
+ if (token.plain and tag is None) or tag == '!':
+ implicit = (True, False)
+ elif tag is None:
+ implicit = (False, True)
+ else:
+ implicit = (False, False)
+ event = ScalarEvent(anchor, tag, implicit, token.value,
+ start_mark, end_mark, style=token.style)
+ self.state = self.states.pop()
+ elif self.check_token(FlowSequenceStartToken):
+ end_mark = self.peek_token().end_mark
+ event = SequenceStartEvent(anchor, tag, implicit,
+ start_mark, end_mark, flow_style=True)
+ self.state = self.parse_flow_sequence_first_entry
+ elif self.check_token(FlowMappingStartToken):
+ end_mark = self.peek_token().end_mark
+ event = MappingStartEvent(anchor, tag, implicit,
+ start_mark, end_mark, flow_style=True)
+ self.state = self.parse_flow_mapping_first_key
+ elif block and self.check_token(BlockSequenceStartToken):
+ end_mark = self.peek_token().start_mark
+ event = SequenceStartEvent(anchor, tag, implicit,
+ start_mark, end_mark, flow_style=False)
+ self.state = self.parse_block_sequence_first_entry
+ elif block and self.check_token(BlockMappingStartToken):
+ end_mark = self.peek_token().start_mark
+ event = MappingStartEvent(anchor, tag, implicit,
+ start_mark, end_mark, flow_style=False)
+ self.state = self.parse_block_mapping_first_key
+ elif anchor is not None or tag is not None:
+ # Empty scalars are allowed even if a tag or an anchor is
+ # specified.
+ event = ScalarEvent(anchor, tag, (implicit, False), '',
+ start_mark, end_mark)
+ self.state = self.states.pop()
+ else:
+ if block:
+ node = 'block'
+ else:
+ node = 'flow'
+ token = self.peek_token()
+ raise ParserError("while parsing a %s node" % node, start_mark,
+ "expected the node content, but found %r" % token.id,
+ token.start_mark)
+ return event
+
+ # block_sequence ::= BLOCK-SEQUENCE-START (BLOCK-ENTRY block_node?)* BLOCK-END
+
+ def parse_block_sequence_first_entry(self):
+ token = self.get_token()
+ self.marks.append(token.start_mark)
+ return self.parse_block_sequence_entry()
+
+ def parse_block_sequence_entry(self):
+ if self.check_token(BlockEntryToken):
+ token = self.get_token()
+ if not self.check_token(BlockEntryToken, BlockEndToken):
+ self.states.append(self.parse_block_sequence_entry)
+ return self.parse_block_node()
+ else:
+ self.state = self.parse_block_sequence_entry
+ return self.process_empty_scalar(token.end_mark)
+ if not self.check_token(BlockEndToken):
+ token = self.peek_token()
+ raise ParserError("while parsing a block collection", self.marks[-1],
+ "expected <block end>, but found %r" % token.id, token.start_mark)
+ token = self.get_token()
+ event = SequenceEndEvent(token.start_mark, token.end_mark)
+ self.state = self.states.pop()
+ self.marks.pop()
+ return event
+
+ # indentless_sequence ::= (BLOCK-ENTRY block_node?)+
+
+ def parse_indentless_sequence_entry(self):
+ if self.check_token(BlockEntryToken):
+ token = self.get_token()
+ if not self.check_token(BlockEntryToken,
+ KeyToken, ValueToken, BlockEndToken):
+ self.states.append(self.parse_indentless_sequence_entry)
+ return self.parse_block_node()
+ else:
+ self.state = self.parse_indentless_sequence_entry
+ return self.process_empty_scalar(token.end_mark)
+ token = self.peek_token()
+ event = SequenceEndEvent(token.start_mark, token.start_mark)
+ self.state = self.states.pop()
+ return event
+
+ # block_mapping ::= BLOCK-MAPPING_START
+ # ((KEY block_node_or_indentless_sequence?)?
+ # (VALUE block_node_or_indentless_sequence?)?)*
+ # BLOCK-END
+
+ def parse_block_mapping_first_key(self):
+ token = self.get_token()
+ self.marks.append(token.start_mark)
+ return self.parse_block_mapping_key()
+
+ def parse_block_mapping_key(self):
+ if self.check_token(KeyToken):
+ token = self.get_token()
+ if not self.check_token(KeyToken, ValueToken, BlockEndToken):
+ self.states.append(self.parse_block_mapping_value)
+ return self.parse_block_node_or_indentless_sequence()
+ else:
+ self.state = self.parse_block_mapping_value
+ return self.process_empty_scalar(token.end_mark)
+ if not self.check_token(BlockEndToken):
+ token = self.peek_token()
+ raise ParserError("while parsing a block mapping", self.marks[-1],
+ "expected <block end>, but found %r" % token.id, token.start_mark)
+ token = self.get_token()
+ event = MappingEndEvent(token.start_mark, token.end_mark)
+ self.state = self.states.pop()
+ self.marks.pop()
+ return event
+
+ def parse_block_mapping_value(self):
+ if self.check_token(ValueToken):
+ token = self.get_token()
+ if not self.check_token(KeyToken, ValueToken, BlockEndToken):
+ self.states.append(self.parse_block_mapping_key)
+ return self.parse_block_node_or_indentless_sequence()
+ else:
+ self.state = self.parse_block_mapping_key
+ return self.process_empty_scalar(token.end_mark)
+ else:
+ self.state = self.parse_block_mapping_key
+ token = self.peek_token()
+ return self.process_empty_scalar(token.start_mark)
+
+ # flow_sequence ::= FLOW-SEQUENCE-START
+ # (flow_sequence_entry FLOW-ENTRY)*
+ # flow_sequence_entry?
+ # FLOW-SEQUENCE-END
+ # flow_sequence_entry ::= flow_node | KEY flow_node? (VALUE flow_node?)?
+ #
+ # Note that while production rules for both flow_sequence_entry and
+ # flow_mapping_entry are equal, their interpretations are different.
+ # For `flow_sequence_entry`, the part `KEY flow_node? (VALUE flow_node?)?`
+ # generate an inline mapping (set syntax).
+
+ def parse_flow_sequence_first_entry(self):
+ token = self.get_token()
+ self.marks.append(token.start_mark)
+ return self.parse_flow_sequence_entry(first=True)
+
+ def parse_flow_sequence_entry(self, first=False):
+ if not self.check_token(FlowSequenceEndToken):
+ if not first:
+ if self.check_token(FlowEntryToken):
+ self.get_token()
+ else:
+ token = self.peek_token()
+ raise ParserError("while parsing a flow sequence", self.marks[-1],
+ "expected ',' or ']', but got %r" % token.id, token.start_mark)
+
+ if self.check_token(KeyToken):
+ token = self.peek_token()
+ event = MappingStartEvent(None, None, True,
+ token.start_mark, token.end_mark,
+ flow_style=True)
+ self.state = self.parse_flow_sequence_entry_mapping_key
+ return event
+ elif not self.check_token(FlowSequenceEndToken):
+ self.states.append(self.parse_flow_sequence_entry)
+ return self.parse_flow_node()
+ token = self.get_token()
+ event = SequenceEndEvent(token.start_mark, token.end_mark)
+ self.state = self.states.pop()
+ self.marks.pop()
+ return event
+
+ def parse_flow_sequence_entry_mapping_key(self):
+ token = self.get_token()
+ if not self.check_token(ValueToken,
+ FlowEntryToken, FlowSequenceEndToken):
+ self.states.append(self.parse_flow_sequence_entry_mapping_value)
+ return self.parse_flow_node()
+ else:
+ self.state = self.parse_flow_sequence_entry_mapping_value
+ return self.process_empty_scalar(token.end_mark)
+
+ def parse_flow_sequence_entry_mapping_value(self):
+ if self.check_token(ValueToken):
+ token = self.get_token()
+ if not self.check_token(FlowEntryToken, FlowSequenceEndToken):
+ self.states.append(self.parse_flow_sequence_entry_mapping_end)
+ return self.parse_flow_node()
+ else:
+ self.state = self.parse_flow_sequence_entry_mapping_end
+ return self.process_empty_scalar(token.end_mark)
+ else:
+ self.state = self.parse_flow_sequence_entry_mapping_end
+ token = self.peek_token()
+ return self.process_empty_scalar(token.start_mark)
+
+ def parse_flow_sequence_entry_mapping_end(self):
+ self.state = self.parse_flow_sequence_entry
+ token = self.peek_token()
+ return MappingEndEvent(token.start_mark, token.start_mark)
+
+ # flow_mapping ::= FLOW-MAPPING-START
+ # (flow_mapping_entry FLOW-ENTRY)*
+ # flow_mapping_entry?
+ # FLOW-MAPPING-END
+ # flow_mapping_entry ::= flow_node | KEY flow_node? (VALUE flow_node?)?
+
+ def parse_flow_mapping_first_key(self):
+ token = self.get_token()
+ self.marks.append(token.start_mark)
+ return self.parse_flow_mapping_key(first=True)
+
+ def parse_flow_mapping_key(self, first=False):
+ if not self.check_token(FlowMappingEndToken):
+ if not first:
+ if self.check_token(FlowEntryToken):
+ self.get_token()
+ else:
+ token = self.peek_token()
+ raise ParserError("while parsing a flow mapping", self.marks[-1],
+ "expected ',' or '}', but got %r" % token.id, token.start_mark)
+ if self.check_token(KeyToken):
+ token = self.get_token()
+ if not self.check_token(ValueToken,
+ FlowEntryToken, FlowMappingEndToken):
+ self.states.append(self.parse_flow_mapping_value)
+ return self.parse_flow_node()
+ else:
+ self.state = self.parse_flow_mapping_value
+ return self.process_empty_scalar(token.end_mark)
+ elif not self.check_token(FlowMappingEndToken):
+ self.states.append(self.parse_flow_mapping_empty_value)
+ return self.parse_flow_node()
+ token = self.get_token()
+ event = MappingEndEvent(token.start_mark, token.end_mark)
+ self.state = self.states.pop()
+ self.marks.pop()
+ return event
+
+ def parse_flow_mapping_value(self):
+ if self.check_token(ValueToken):
+ token = self.get_token()
+ if not self.check_token(FlowEntryToken, FlowMappingEndToken):
+ self.states.append(self.parse_flow_mapping_key)
+ return self.parse_flow_node()
+ else:
+ self.state = self.parse_flow_mapping_key
+ return self.process_empty_scalar(token.end_mark)
+ else:
+ self.state = self.parse_flow_mapping_key
+ token = self.peek_token()
+ return self.process_empty_scalar(token.start_mark)
+
+ def parse_flow_mapping_empty_value(self):
+ self.state = self.parse_flow_mapping_key
+ return self.process_empty_scalar(self.peek_token().start_mark)
+
+ def process_empty_scalar(self, mark):
+ return ScalarEvent(None, None, (True, False), '', mark, mark)
+
diff --git a/yaml/lib3/yaml/reader.py b/yaml/lib3/yaml/reader.py
new file mode 100644
index 0000000000..774b0219b5
--- /dev/null
+++ b/yaml/lib3/yaml/reader.py
@@ -0,0 +1,185 @@
+# This module contains abstractions for the input stream. You don't have to
+# looks further, there are no pretty code.
+#
+# We define two classes here.
+#
+# Mark(source, line, column)
+# It's just a record and its only use is producing nice error messages.
+# Parser does not use it for any other purposes.
+#
+# Reader(source, data)
+# Reader determines the encoding of `data` and converts it to unicode.
+# Reader provides the following methods and attributes:
+# reader.peek(length=1) - return the next `length` characters
+# reader.forward(length=1) - move the current position to `length` characters.
+# reader.index - the number of the current character.
+# reader.line, stream.column - the line and the column of the current character.
+
+__all__ = ['Reader', 'ReaderError']
+
+from .error import YAMLError, Mark
+
+import codecs, re
+
+class ReaderError(YAMLError):
+
+ def __init__(self, name, position, character, encoding, reason):
+ self.name = name
+ self.character = character
+ self.position = position
+ self.encoding = encoding
+ self.reason = reason
+
+ def __str__(self):
+ if isinstance(self.character, bytes):
+ return "'%s' codec can't decode byte #x%02x: %s\n" \
+ " in \"%s\", position %d" \
+ % (self.encoding, ord(self.character), self.reason,
+ self.name, self.position)
+ else:
+ return "unacceptable character #x%04x: %s\n" \
+ " in \"%s\", position %d" \
+ % (self.character, self.reason,
+ self.name, self.position)
+
+class Reader(object):
+ # Reader:
+ # - determines the data encoding and converts it to a unicode string,
+ # - checks if characters are in allowed range,
+ # - adds '\0' to the end.
+
+ # Reader accepts
+ # - a `bytes` object,
+ # - a `str` object,
+ # - a file-like object with its `read` method returning `str`,
+ # - a file-like object with its `read` method returning `unicode`.
+
+ # Yeah, it's ugly and slow.
+
+ def __init__(self, stream):
+ self.name = None
+ self.stream = None
+ self.stream_pointer = 0
+ self.eof = True
+ self.buffer = ''
+ self.pointer = 0
+ self.raw_buffer = None
+ self.raw_decode = None
+ self.encoding = None
+ self.index = 0
+ self.line = 0
+ self.column = 0
+ if isinstance(stream, str):
+ self.name = "<unicode string>"
+ self.check_printable(stream)
+ self.buffer = stream+'\0'
+ elif isinstance(stream, bytes):
+ self.name = "<byte string>"
+ self.raw_buffer = stream
+ self.determine_encoding()
+ else:
+ self.stream = stream
+ self.name = getattr(stream, 'name', "<file>")
+ self.eof = False
+ self.raw_buffer = None
+ self.determine_encoding()
+
+ def peek(self, index=0):
+ try:
+ return self.buffer[self.pointer+index]
+ except IndexError:
+ self.update(index+1)
+ return self.buffer[self.pointer+index]
+
+ def prefix(self, length=1):
+ if self.pointer+length >= len(self.buffer):
+ self.update(length)
+ return self.buffer[self.pointer:self.pointer+length]
+
+ def forward(self, length=1):
+ if self.pointer+length+1 >= len(self.buffer):
+ self.update(length+1)
+ while length:
+ ch = self.buffer[self.pointer]
+ self.pointer += 1
+ self.index += 1
+ if ch in '\n\x85\u2028\u2029' \
+ or (ch == '\r' and self.buffer[self.pointer] != '\n'):
+ self.line += 1
+ self.column = 0
+ elif ch != '\uFEFF':
+ self.column += 1
+ length -= 1
+
+ def get_mark(self):
+ if self.stream is None:
+ return Mark(self.name, self.index, self.line, self.column,
+ self.buffer, self.pointer)
+ else:
+ return Mark(self.name, self.index, self.line, self.column,
+ None, None)
+
+ def determine_encoding(self):
+ while not self.eof and (self.raw_buffer is None or len(self.raw_buffer) < 2):
+ self.update_raw()
+ if isinstance(self.raw_buffer, bytes):
+ if self.raw_buffer.startswith(codecs.BOM_UTF16_LE):
+ self.raw_decode = codecs.utf_16_le_decode
+ self.encoding = 'utf-16-le'
+ elif self.raw_buffer.startswith(codecs.BOM_UTF16_BE):
+ self.raw_decode = codecs.utf_16_be_decode
+ self.encoding = 'utf-16-be'
+ else:
+ self.raw_decode = codecs.utf_8_decode
+ self.encoding = 'utf-8'
+ self.update(1)
+
+ NON_PRINTABLE = re.compile('[^\x09\x0A\x0D\x20-\x7E\x85\xA0-\uD7FF\uE000-\uFFFD\U00010000-\U0010ffff]')
+ def check_printable(self, data):
+ match = self.NON_PRINTABLE.search(data)
+ if match:
+ character = match.group()
+ position = self.index+(len(self.buffer)-self.pointer)+match.start()
+ raise ReaderError(self.name, position, ord(character),
+ 'unicode', "special characters are not allowed")
+
+ def update(self, length):
+ if self.raw_buffer is None:
+ return
+ self.buffer = self.buffer[self.pointer:]
+ self.pointer = 0
+ while len(self.buffer) < length:
+ if not self.eof:
+ self.update_raw()
+ if self.raw_decode is not None:
+ try:
+ data, converted = self.raw_decode(self.raw_buffer,
+ 'strict', self.eof)
+ except UnicodeDecodeError as exc:
+ character = self.raw_buffer[exc.start]
+ if self.stream is not None:
+ position = self.stream_pointer-len(self.raw_buffer)+exc.start
+ else:
+ position = exc.start
+ raise ReaderError(self.name, position, character,
+ exc.encoding, exc.reason)
+ else:
+ data = self.raw_buffer
+ converted = len(data)
+ self.check_printable(data)
+ self.buffer += data
+ self.raw_buffer = self.raw_buffer[converted:]
+ if self.eof:
+ self.buffer += '\0'
+ self.raw_buffer = None
+ break
+
+ def update_raw(self, size=4096):
+ data = self.stream.read(size)
+ if self.raw_buffer is None:
+ self.raw_buffer = data
+ else:
+ self.raw_buffer += data
+ self.stream_pointer += len(data)
+ if not data:
+ self.eof = True
diff --git a/yaml/lib3/yaml/representer.py b/yaml/lib3/yaml/representer.py
new file mode 100644
index 0000000000..3b0b192ef3
--- /dev/null
+++ b/yaml/lib3/yaml/representer.py
@@ -0,0 +1,389 @@
+
+__all__ = ['BaseRepresenter', 'SafeRepresenter', 'Representer',
+ 'RepresenterError']
+
+from .error import *
+from .nodes import *
+
+import datetime, copyreg, types, base64, collections
+
+class RepresenterError(YAMLError):
+ pass
+
+class BaseRepresenter:
+
+ yaml_representers = {}
+ yaml_multi_representers = {}
+
+ def __init__(self, default_style=None, default_flow_style=False, sort_keys=True):
+ self.default_style = default_style
+ self.sort_keys = sort_keys
+ self.default_flow_style = default_flow_style
+ self.represented_objects = {}
+ self.object_keeper = []
+ self.alias_key = None
+
+ def represent(self, data):
+ node = self.represent_data(data)
+ self.serialize(node)
+ self.represented_objects = {}
+ self.object_keeper = []
+ self.alias_key = None
+
+ def represent_data(self, data):
+ if self.ignore_aliases(data):
+ self.alias_key = None
+ else:
+ self.alias_key = id(data)
+ if self.alias_key is not None:
+ if self.alias_key in self.represented_objects:
+ node = self.represented_objects[self.alias_key]
+ #if node is None:
+ # raise RepresenterError("recursive objects are not allowed: %r" % data)
+ return node
+ #self.represented_objects[alias_key] = None
+ self.object_keeper.append(data)
+ data_types = type(data).__mro__
+ if data_types[0] in self.yaml_representers:
+ node = self.yaml_representers[data_types[0]](self, data)
+ else:
+ for data_type in data_types:
+ if data_type in self.yaml_multi_representers:
+ node = self.yaml_multi_representers[data_type](self, data)
+ break
+ else:
+ if None in self.yaml_multi_representers:
+ node = self.yaml_multi_representers[None](self, data)
+ elif None in self.yaml_representers:
+ node = self.yaml_representers[None](self, data)
+ else:
+ node = ScalarNode(None, str(data))
+ #if alias_key is not None:
+ # self.represented_objects[alias_key] = node
+ return node
+
+ @classmethod
+ def add_representer(cls, data_type, representer):
+ if not 'yaml_representers' in cls.__dict__:
+ cls.yaml_representers = cls.yaml_representers.copy()
+ cls.yaml_representers[data_type] = representer
+
+ @classmethod
+ def add_multi_representer(cls, data_type, representer):
+ if not 'yaml_multi_representers' in cls.__dict__:
+ cls.yaml_multi_representers = cls.yaml_multi_representers.copy()
+ cls.yaml_multi_representers[data_type] = representer
+
+ def represent_scalar(self, tag, value, style=None):
+ if style is None:
+ style = self.default_style
+ node = ScalarNode(tag, value, style=style)
+ if self.alias_key is not None:
+ self.represented_objects[self.alias_key] = node
+ return node
+
+ def represent_sequence(self, tag, sequence, flow_style=None):
+ value = []
+ node = SequenceNode(tag, value, flow_style=flow_style)
+ if self.alias_key is not None:
+ self.represented_objects[self.alias_key] = node
+ best_style = True
+ for item in sequence:
+ node_item = self.represent_data(item)
+ if not (isinstance(node_item, ScalarNode) and not node_item.style):
+ best_style = False
+ value.append(node_item)
+ if flow_style is None:
+ if self.default_flow_style is not None:
+ node.flow_style = self.default_flow_style
+ else:
+ node.flow_style = best_style
+ return node
+
+ def represent_mapping(self, tag, mapping, flow_style=None):
+ value = []
+ node = MappingNode(tag, value, flow_style=flow_style)
+ if self.alias_key is not None:
+ self.represented_objects[self.alias_key] = node
+ best_style = True
+ if hasattr(mapping, 'items'):
+ mapping = list(mapping.items())
+ if self.sort_keys:
+ try:
+ mapping = sorted(mapping)
+ except TypeError:
+ pass
+ for item_key, item_value in mapping:
+ node_key = self.represent_data(item_key)
+ node_value = self.represent_data(item_value)
+ if not (isinstance(node_key, ScalarNode) and not node_key.style):
+ best_style = False
+ if not (isinstance(node_value, ScalarNode) and not node_value.style):
+ best_style = False
+ value.append((node_key, node_value))
+ if flow_style is None:
+ if self.default_flow_style is not None:
+ node.flow_style = self.default_flow_style
+ else:
+ node.flow_style = best_style
+ return node
+
+ def ignore_aliases(self, data):
+ return False
+
+class SafeRepresenter(BaseRepresenter):
+
+ def ignore_aliases(self, data):
+ if data is None:
+ return True
+ if isinstance(data, tuple) and data == ():
+ return True
+ if isinstance(data, (str, bytes, bool, int, float)):
+ return True
+
+ def represent_none(self, data):
+ return self.represent_scalar('tag:yaml.org,2002:null', 'null')
+
+ def represent_str(self, data):
+ return self.represent_scalar('tag:yaml.org,2002:str', data)
+
+ def represent_binary(self, data):
+ if hasattr(base64, 'encodebytes'):
+ data = base64.encodebytes(data).decode('ascii')
+ else:
+ data = base64.encodestring(data).decode('ascii')
+ return self.represent_scalar('tag:yaml.org,2002:binary', data, style='|')
+
+ def represent_bool(self, data):
+ if data:
+ value = 'true'
+ else:
+ value = 'false'
+ return self.represent_scalar('tag:yaml.org,2002:bool', value)
+
+ def represent_int(self, data):
+ return self.represent_scalar('tag:yaml.org,2002:int', str(data))
+
+ inf_value = 1e300
+ while repr(inf_value) != repr(inf_value*inf_value):
+ inf_value *= inf_value
+
+ def represent_float(self, data):
+ if data != data or (data == 0.0 and data == 1.0):
+ value = '.nan'
+ elif data == self.inf_value:
+ value = '.inf'
+ elif data == -self.inf_value:
+ value = '-.inf'
+ else:
+ value = repr(data).lower()
+ # Note that in some cases `repr(data)` represents a float number
+ # without the decimal parts. For instance:
+ # >>> repr(1e17)
+ # '1e17'
+ # Unfortunately, this is not a valid float representation according
+ # to the definition of the `!!float` tag. We fix this by adding
+ # '.0' before the 'e' symbol.
+ if '.' not in value and 'e' in value:
+ value = value.replace('e', '.0e', 1)
+ return self.represent_scalar('tag:yaml.org,2002:float', value)
+
+ def represent_list(self, data):
+ #pairs = (len(data) > 0 and isinstance(data, list))
+ #if pairs:
+ # for item in data:
+ # if not isinstance(item, tuple) or len(item) != 2:
+ # pairs = False
+ # break
+ #if not pairs:
+ return self.represent_sequence('tag:yaml.org,2002:seq', data)
+ #value = []
+ #for item_key, item_value in data:
+ # value.append(self.represent_mapping(u'tag:yaml.org,2002:map',
+ # [(item_key, item_value)]))
+ #return SequenceNode(u'tag:yaml.org,2002:pairs', value)
+
+ def represent_dict(self, data):
+ return self.represent_mapping('tag:yaml.org,2002:map', data)
+
+ def represent_set(self, data):
+ value = {}
+ for key in data:
+ value[key] = None
+ return self.represent_mapping('tag:yaml.org,2002:set', value)
+
+ def represent_date(self, data):
+ value = data.isoformat()
+ return self.represent_scalar('tag:yaml.org,2002:timestamp', value)
+
+ def represent_datetime(self, data):
+ value = data.isoformat(' ')
+ return self.represent_scalar('tag:yaml.org,2002:timestamp', value)
+
+ def represent_yaml_object(self, tag, data, cls, flow_style=None):
+ if hasattr(data, '__getstate__'):
+ state = data.__getstate__()
+ else:
+ state = data.__dict__.copy()
+ return self.represent_mapping(tag, state, flow_style=flow_style)
+
+ def represent_undefined(self, data):
+ raise RepresenterError("cannot represent an object", data)
+
+SafeRepresenter.add_representer(type(None),
+ SafeRepresenter.represent_none)
+
+SafeRepresenter.add_representer(str,
+ SafeRepresenter.represent_str)
+
+SafeRepresenter.add_representer(bytes,
+ SafeRepresenter.represent_binary)
+
+SafeRepresenter.add_representer(bool,
+ SafeRepresenter.represent_bool)
+
+SafeRepresenter.add_representer(int,
+ SafeRepresenter.represent_int)
+
+SafeRepresenter.add_representer(float,
+ SafeRepresenter.represent_float)
+
+SafeRepresenter.add_representer(list,
+ SafeRepresenter.represent_list)
+
+SafeRepresenter.add_representer(tuple,
+ SafeRepresenter.represent_list)
+
+SafeRepresenter.add_representer(dict,
+ SafeRepresenter.represent_dict)
+
+SafeRepresenter.add_representer(set,
+ SafeRepresenter.represent_set)
+
+SafeRepresenter.add_representer(datetime.date,
+ SafeRepresenter.represent_date)
+
+SafeRepresenter.add_representer(datetime.datetime,
+ SafeRepresenter.represent_datetime)
+
+SafeRepresenter.add_representer(None,
+ SafeRepresenter.represent_undefined)
+
+class Representer(SafeRepresenter):
+
+ def represent_complex(self, data):
+ if data.imag == 0.0:
+ data = '%r' % data.real
+ elif data.real == 0.0:
+ data = '%rj' % data.imag
+ elif data.imag > 0:
+ data = '%r+%rj' % (data.real, data.imag)
+ else:
+ data = '%r%rj' % (data.real, data.imag)
+ return self.represent_scalar('tag:yaml.org,2002:python/complex', data)
+
+ def represent_tuple(self, data):
+ return self.represent_sequence('tag:yaml.org,2002:python/tuple', data)
+
+ def represent_name(self, data):
+ name = '%s.%s' % (data.__module__, data.__name__)
+ return self.represent_scalar('tag:yaml.org,2002:python/name:'+name, '')
+
+ def represent_module(self, data):
+ return self.represent_scalar(
+ 'tag:yaml.org,2002:python/module:'+data.__name__, '')
+
+ def represent_object(self, data):
+ # We use __reduce__ API to save the data. data.__reduce__ returns
+ # a tuple of length 2-5:
+ # (function, args, state, listitems, dictitems)
+
+ # For reconstructing, we calls function(*args), then set its state,
+ # listitems, and dictitems if they are not None.
+
+ # A special case is when function.__name__ == '__newobj__'. In this
+ # case we create the object with args[0].__new__(*args).
+
+ # Another special case is when __reduce__ returns a string - we don't
+ # support it.
+
+ # We produce a !!python/object, !!python/object/new or
+ # !!python/object/apply node.
+
+ cls = type(data)
+ if cls in copyreg.dispatch_table:
+ reduce = copyreg.dispatch_table[cls](data)
+ elif hasattr(data, '__reduce_ex__'):
+ reduce = data.__reduce_ex__(2)
+ elif hasattr(data, '__reduce__'):
+ reduce = data.__reduce__()
+ else:
+ raise RepresenterError("cannot represent an object", data)
+ reduce = (list(reduce)+[None]*5)[:5]
+ function, args, state, listitems, dictitems = reduce
+ args = list(args)
+ if state is None:
+ state = {}
+ if listitems is not None:
+ listitems = list(listitems)
+ if dictitems is not None:
+ dictitems = dict(dictitems)
+ if function.__name__ == '__newobj__':
+ function = args[0]
+ args = args[1:]
+ tag = 'tag:yaml.org,2002:python/object/new:'
+ newobj = True
+ else:
+ tag = 'tag:yaml.org,2002:python/object/apply:'
+ newobj = False
+ function_name = '%s.%s' % (function.__module__, function.__name__)
+ if not args and not listitems and not dictitems \
+ and isinstance(state, dict) and newobj:
+ return self.represent_mapping(
+ 'tag:yaml.org,2002:python/object:'+function_name, state)
+ if not listitems and not dictitems \
+ and isinstance(state, dict) and not state:
+ return self.represent_sequence(tag+function_name, args)
+ value = {}
+ if args:
+ value['args'] = args
+ if state or not isinstance(state, dict):
+ value['state'] = state
+ if listitems:
+ value['listitems'] = listitems
+ if dictitems:
+ value['dictitems'] = dictitems
+ return self.represent_mapping(tag+function_name, value)
+
+ def represent_ordered_dict(self, data):
+ # Provide uniform representation across different Python versions.
+ data_type = type(data)
+ tag = 'tag:yaml.org,2002:python/object/apply:%s.%s' \
+ % (data_type.__module__, data_type.__name__)
+ items = [[key, value] for key, value in data.items()]
+ return self.represent_sequence(tag, [items])
+
+Representer.add_representer(complex,
+ Representer.represent_complex)
+
+Representer.add_representer(tuple,
+ Representer.represent_tuple)
+
+Representer.add_representer(type,
+ Representer.represent_name)
+
+Representer.add_representer(collections.OrderedDict,
+ Representer.represent_ordered_dict)
+
+Representer.add_representer(types.FunctionType,
+ Representer.represent_name)
+
+Representer.add_representer(types.BuiltinFunctionType,
+ Representer.represent_name)
+
+Representer.add_representer(types.ModuleType,
+ Representer.represent_module)
+
+Representer.add_multi_representer(object,
+ Representer.represent_object)
+
diff --git a/yaml/lib3/yaml/resolver.py b/yaml/lib3/yaml/resolver.py
new file mode 100644
index 0000000000..02b82e73ee
--- /dev/null
+++ b/yaml/lib3/yaml/resolver.py
@@ -0,0 +1,227 @@
+
+__all__ = ['BaseResolver', 'Resolver']
+
+from .error import *
+from .nodes import *
+
+import re
+
+class ResolverError(YAMLError):
+ pass
+
+class BaseResolver:
+
+ DEFAULT_SCALAR_TAG = 'tag:yaml.org,2002:str'
+ DEFAULT_SEQUENCE_TAG = 'tag:yaml.org,2002:seq'
+ DEFAULT_MAPPING_TAG = 'tag:yaml.org,2002:map'
+
+ yaml_implicit_resolvers = {}
+ yaml_path_resolvers = {}
+
+ def __init__(self):
+ self.resolver_exact_paths = []
+ self.resolver_prefix_paths = []
+
+ @classmethod
+ def add_implicit_resolver(cls, tag, regexp, first):
+ if not 'yaml_implicit_resolvers' in cls.__dict__:
+ implicit_resolvers = {}
+ for key in cls.yaml_implicit_resolvers:
+ implicit_resolvers[key] = cls.yaml_implicit_resolvers[key][:]
+ cls.yaml_implicit_resolvers = implicit_resolvers
+ if first is None:
+ first = [None]
+ for ch in first:
+ cls.yaml_implicit_resolvers.setdefault(ch, []).append((tag, regexp))
+
+ @classmethod
+ def add_path_resolver(cls, tag, path, kind=None):
+ # Note: `add_path_resolver` is experimental. The API could be changed.
+ # `new_path` is a pattern that is matched against the path from the
+ # root to the node that is being considered. `node_path` elements are
+ # tuples `(node_check, index_check)`. `node_check` is a node class:
+ # `ScalarNode`, `SequenceNode`, `MappingNode` or `None`. `None`
+ # matches any kind of a node. `index_check` could be `None`, a boolean
+ # value, a string value, or a number. `None` and `False` match against
+ # any _value_ of sequence and mapping nodes. `True` matches against
+ # any _key_ of a mapping node. A string `index_check` matches against
+ # a mapping value that corresponds to a scalar key which content is
+ # equal to the `index_check` value. An integer `index_check` matches
+ # against a sequence value with the index equal to `index_check`.
+ if not 'yaml_path_resolvers' in cls.__dict__:
+ cls.yaml_path_resolvers = cls.yaml_path_resolvers.copy()
+ new_path = []
+ for element in path:
+ if isinstance(element, (list, tuple)):
+ if len(element) == 2:
+ node_check, index_check = element
+ elif len(element) == 1:
+ node_check = element[0]
+ index_check = True
+ else:
+ raise ResolverError("Invalid path element: %s" % element)
+ else:
+ node_check = None
+ index_check = element
+ if node_check is str:
+ node_check = ScalarNode
+ elif node_check is list:
+ node_check = SequenceNode
+ elif node_check is dict:
+ node_check = MappingNode
+ elif node_check not in [ScalarNode, SequenceNode, MappingNode] \
+ and not isinstance(node_check, str) \
+ and node_check is not None:
+ raise ResolverError("Invalid node checker: %s" % node_check)
+ if not isinstance(index_check, (str, int)) \
+ and index_check is not None:
+ raise ResolverError("Invalid index checker: %s" % index_check)
+ new_path.append((node_check, index_check))
+ if kind is str:
+ kind = ScalarNode
+ elif kind is list:
+ kind = SequenceNode
+ elif kind is dict:
+ kind = MappingNode
+ elif kind not in [ScalarNode, SequenceNode, MappingNode] \
+ and kind is not None:
+ raise ResolverError("Invalid node kind: %s" % kind)
+ cls.yaml_path_resolvers[tuple(new_path), kind] = tag
+
+ def descend_resolver(self, current_node, current_index):
+ if not self.yaml_path_resolvers:
+ return
+ exact_paths = {}
+ prefix_paths = []
+ if current_node:
+ depth = len(self.resolver_prefix_paths)
+ for path, kind in self.resolver_prefix_paths[-1]:
+ if self.check_resolver_prefix(depth, path, kind,
+ current_node, current_index):
+ if len(path) > depth:
+ prefix_paths.append((path, kind))
+ else:
+ exact_paths[kind] = self.yaml_path_resolvers[path, kind]
+ else:
+ for path, kind in self.yaml_path_resolvers:
+ if not path:
+ exact_paths[kind] = self.yaml_path_resolvers[path, kind]
+ else:
+ prefix_paths.append((path, kind))
+ self.resolver_exact_paths.append(exact_paths)
+ self.resolver_prefix_paths.append(prefix_paths)
+
+ def ascend_resolver(self):
+ if not self.yaml_path_resolvers:
+ return
+ self.resolver_exact_paths.pop()
+ self.resolver_prefix_paths.pop()
+
+ def check_resolver_prefix(self, depth, path, kind,
+ current_node, current_index):
+ node_check, index_check = path[depth-1]
+ if isinstance(node_check, str):
+ if current_node.tag != node_check:
+ return
+ elif node_check is not None:
+ if not isinstance(current_node, node_check):
+ return
+ if index_check is True and current_index is not None:
+ return
+ if (index_check is False or index_check is None) \
+ and current_index is None:
+ return
+ if isinstance(index_check, str):
+ if not (isinstance(current_index, ScalarNode)
+ and index_check == current_index.value):
+ return
+ elif isinstance(index_check, int) and not isinstance(index_check, bool):
+ if index_check != current_index:
+ return
+ return True
+
+ def resolve(self, kind, value, implicit):
+ if kind is ScalarNode and implicit[0]:
+ if value == '':
+ resolvers = self.yaml_implicit_resolvers.get('', [])
+ else:
+ resolvers = self.yaml_implicit_resolvers.get(value[0], [])
+ resolvers += self.yaml_implicit_resolvers.get(None, [])
+ for tag, regexp in resolvers:
+ if regexp.match(value):
+ return tag
+ implicit = implicit[1]
+ if self.yaml_path_resolvers:
+ exact_paths = self.resolver_exact_paths[-1]
+ if kind in exact_paths:
+ return exact_paths[kind]
+ if None in exact_paths:
+ return exact_paths[None]
+ if kind is ScalarNode:
+ return self.DEFAULT_SCALAR_TAG
+ elif kind is SequenceNode:
+ return self.DEFAULT_SEQUENCE_TAG
+ elif kind is MappingNode:
+ return self.DEFAULT_MAPPING_TAG
+
+class Resolver(BaseResolver):
+ pass
+
+Resolver.add_implicit_resolver(
+ 'tag:yaml.org,2002:bool',
+ re.compile(r'''^(?:yes|Yes|YES|no|No|NO
+ |true|True|TRUE|false|False|FALSE
+ |on|On|ON|off|Off|OFF)$''', re.X),
+ list('yYnNtTfFoO'))
+
+Resolver.add_implicit_resolver(
+ 'tag:yaml.org,2002:float',
+ re.compile(r'''^(?:[-+]?(?:[0-9][0-9_]*)\.[0-9_]*(?:[eE][-+][0-9]+)?
+ |\.[0-9_]+(?:[eE][-+][0-9]+)?
+ |[-+]?[0-9][0-9_]*(?::[0-5]?[0-9])+\.[0-9_]*
+ |[-+]?\.(?:inf|Inf|INF)
+ |\.(?:nan|NaN|NAN))$''', re.X),
+ list('-+0123456789.'))
+
+Resolver.add_implicit_resolver(
+ 'tag:yaml.org,2002:int',
+ re.compile(r'''^(?:[-+]?0b[0-1_]+
+ |[-+]?0[0-7_]+
+ |[-+]?(?:0|[1-9][0-9_]*)
+ |[-+]?0x[0-9a-fA-F_]+
+ |[-+]?[1-9][0-9_]*(?::[0-5]?[0-9])+)$''', re.X),
+ list('-+0123456789'))
+
+Resolver.add_implicit_resolver(
+ 'tag:yaml.org,2002:merge',
+ re.compile(r'^(?:<<)$'),
+ ['<'])
+
+Resolver.add_implicit_resolver(
+ 'tag:yaml.org,2002:null',
+ re.compile(r'''^(?: ~
+ |null|Null|NULL
+ | )$''', re.X),
+ ['~', 'n', 'N', ''])
+
+Resolver.add_implicit_resolver(
+ 'tag:yaml.org,2002:timestamp',
+ re.compile(r'''^(?:[0-9][0-9][0-9][0-9]-[0-9][0-9]-[0-9][0-9]
+ |[0-9][0-9][0-9][0-9] -[0-9][0-9]? -[0-9][0-9]?
+ (?:[Tt]|[ \t]+)[0-9][0-9]?
+ :[0-9][0-9] :[0-9][0-9] (?:\.[0-9]*)?
+ (?:[ \t]*(?:Z|[-+][0-9][0-9]?(?::[0-9][0-9])?))?)$''', re.X),
+ list('0123456789'))
+
+Resolver.add_implicit_resolver(
+ 'tag:yaml.org,2002:value',
+ re.compile(r'^(?:=)$'),
+ ['='])
+
+# The following resolver is only for documentation purposes. It cannot work
+# because plain scalars cannot start with '!', '&', or '*'.
+Resolver.add_implicit_resolver(
+ 'tag:yaml.org,2002:yaml',
+ re.compile(r'^(?:!|&|\*)$'),
+ list('!&*'))
+
diff --git a/yaml/lib3/yaml/scanner.py b/yaml/lib3/yaml/scanner.py
new file mode 100644
index 0000000000..7437ede1c6
--- /dev/null
+++ b/yaml/lib3/yaml/scanner.py
@@ -0,0 +1,1435 @@
+
+# Scanner produces tokens of the following types:
+# STREAM-START
+# STREAM-END
+# DIRECTIVE(name, value)
+# DOCUMENT-START
+# DOCUMENT-END
+# BLOCK-SEQUENCE-START
+# BLOCK-MAPPING-START
+# BLOCK-END
+# FLOW-SEQUENCE-START
+# FLOW-MAPPING-START
+# FLOW-SEQUENCE-END
+# FLOW-MAPPING-END
+# BLOCK-ENTRY
+# FLOW-ENTRY
+# KEY
+# VALUE
+# ALIAS(value)
+# ANCHOR(value)
+# TAG(value)
+# SCALAR(value, plain, style)
+#
+# Read comments in the Scanner code for more details.
+#
+
+__all__ = ['Scanner', 'ScannerError']
+
+from .error import MarkedYAMLError
+from .tokens import *
+
+class ScannerError(MarkedYAMLError):
+ pass
+
+class SimpleKey:
+ # See below simple keys treatment.
+
+ def __init__(self, token_number, required, index, line, column, mark):
+ self.token_number = token_number
+ self.required = required
+ self.index = index
+ self.line = line
+ self.column = column
+ self.mark = mark
+
+class Scanner:
+
+ def __init__(self):
+ """Initialize the scanner."""
+ # It is assumed that Scanner and Reader will have a common descendant.
+ # Reader do the dirty work of checking for BOM and converting the
+ # input data to Unicode. It also adds NUL to the end.
+ #
+ # Reader supports the following methods
+ # self.peek(i=0) # peek the next i-th character
+ # self.prefix(l=1) # peek the next l characters
+ # self.forward(l=1) # read the next l characters and move the pointer.
+
+ # Had we reached the end of the stream?
+ self.done = False
+
+ # The number of unclosed '{' and '['. `flow_level == 0` means block
+ # context.
+ self.flow_level = 0
+
+ # List of processed tokens that are not yet emitted.
+ self.tokens = []
+
+ # Add the STREAM-START token.
+ self.fetch_stream_start()
+
+ # Number of tokens that were emitted through the `get_token` method.
+ self.tokens_taken = 0
+
+ # The current indentation level.
+ self.indent = -1
+
+ # Past indentation levels.
+ self.indents = []
+
+ # Variables related to simple keys treatment.
+
+ # A simple key is a key that is not denoted by the '?' indicator.
+ # Example of simple keys:
+ # ---
+ # block simple key: value
+ # ? not a simple key:
+ # : { flow simple key: value }
+ # We emit the KEY token before all keys, so when we find a potential
+ # simple key, we try to locate the corresponding ':' indicator.
+ # Simple keys should be limited to a single line and 1024 characters.
+
+ # Can a simple key start at the current position? A simple key may
+ # start:
+ # - at the beginning of the line, not counting indentation spaces
+ # (in block context),
+ # - after '{', '[', ',' (in the flow context),
+ # - after '?', ':', '-' (in the block context).
+ # In the block context, this flag also signifies if a block collection
+ # may start at the current position.
+ self.allow_simple_key = True
+
+ # Keep track of possible simple keys. This is a dictionary. The key
+ # is `flow_level`; there can be no more that one possible simple key
+ # for each level. The value is a SimpleKey record:
+ # (token_number, required, index, line, column, mark)
+ # A simple key may start with ALIAS, ANCHOR, TAG, SCALAR(flow),
+ # '[', or '{' tokens.
+ self.possible_simple_keys = {}
+
+ # Public methods.
+
+ def check_token(self, *choices):
+ # Check if the next token is one of the given types.
+ while self.need_more_tokens():
+ self.fetch_more_tokens()
+ if self.tokens:
+ if not choices:
+ return True
+ for choice in choices:
+ if isinstance(self.tokens[0], choice):
+ return True
+ return False
+
+ def peek_token(self):
+ # Return the next token, but do not delete if from the queue.
+ # Return None if no more tokens.
+ while self.need_more_tokens():
+ self.fetch_more_tokens()
+ if self.tokens:
+ return self.tokens[0]
+ else:
+ return None
+
+ def get_token(self):
+ # Return the next token.
+ while self.need_more_tokens():
+ self.fetch_more_tokens()
+ if self.tokens:
+ self.tokens_taken += 1
+ return self.tokens.pop(0)
+
+ # Private methods.
+
+ def need_more_tokens(self):
+ if self.done:
+ return False
+ if not self.tokens:
+ return True
+ # The current token may be a potential simple key, so we
+ # need to look further.
+ self.stale_possible_simple_keys()
+ if self.next_possible_simple_key() == self.tokens_taken:
+ return True
+
+ def fetch_more_tokens(self):
+
+ # Eat whitespaces and comments until we reach the next token.
+ self.scan_to_next_token()
+
+ # Remove obsolete possible simple keys.
+ self.stale_possible_simple_keys()
+
+ # Compare the current indentation and column. It may add some tokens
+ # and decrease the current indentation level.
+ self.unwind_indent(self.column)
+
+ # Peek the next character.
+ ch = self.peek()
+
+ # Is it the end of stream?
+ if ch == '\0':
+ return self.fetch_stream_end()
+
+ # Is it a directive?
+ if ch == '%' and self.check_directive():
+ return self.fetch_directive()
+
+ # Is it the document start?
+ if ch == '-' and self.check_document_start():
+ return self.fetch_document_start()
+
+ # Is it the document end?
+ if ch == '.' and self.check_document_end():
+ return self.fetch_document_end()
+
+ # TODO: support for BOM within a stream.
+ #if ch == '\uFEFF':
+ # return self.fetch_bom() <-- issue BOMToken
+
+ # Note: the order of the following checks is NOT significant.
+
+ # Is it the flow sequence start indicator?
+ if ch == '[':
+ return self.fetch_flow_sequence_start()
+
+ # Is it the flow mapping start indicator?
+ if ch == '{':
+ return self.fetch_flow_mapping_start()
+
+ # Is it the flow sequence end indicator?
+ if ch == ']':
+ return self.fetch_flow_sequence_end()
+
+ # Is it the flow mapping end indicator?
+ if ch == '}':
+ return self.fetch_flow_mapping_end()
+
+ # Is it the flow entry indicator?
+ if ch == ',':
+ return self.fetch_flow_entry()
+
+ # Is it the block entry indicator?
+ if ch == '-' and self.check_block_entry():
+ return self.fetch_block_entry()
+
+ # Is it the key indicator?
+ if ch == '?' and self.check_key():
+ return self.fetch_key()
+
+ # Is it the value indicator?
+ if ch == ':' and self.check_value():
+ return self.fetch_value()
+
+ # Is it an alias?
+ if ch == '*':
+ return self.fetch_alias()
+
+ # Is it an anchor?
+ if ch == '&':
+ return self.fetch_anchor()
+
+ # Is it a tag?
+ if ch == '!':
+ return self.fetch_tag()
+
+ # Is it a literal scalar?
+ if ch == '|' and not self.flow_level:
+ return self.fetch_literal()
+
+ # Is it a folded scalar?
+ if ch == '>' and not self.flow_level:
+ return self.fetch_folded()
+
+ # Is it a single quoted scalar?
+ if ch == '\'':
+ return self.fetch_single()
+
+ # Is it a double quoted scalar?
+ if ch == '\"':
+ return self.fetch_double()
+
+ # It must be a plain scalar then.
+ if self.check_plain():
+ return self.fetch_plain()
+
+ # No? It's an error. Let's produce a nice error message.
+ raise ScannerError("while scanning for the next token", None,
+ "found character %r that cannot start any token" % ch,
+ self.get_mark())
+
+ # Simple keys treatment.
+
+ def next_possible_simple_key(self):
+ # Return the number of the nearest possible simple key. Actually we
+ # don't need to loop through the whole dictionary. We may replace it
+ # with the following code:
+ # if not self.possible_simple_keys:
+ # return None
+ # return self.possible_simple_keys[
+ # min(self.possible_simple_keys.keys())].token_number
+ min_token_number = None
+ for level in self.possible_simple_keys:
+ key = self.possible_simple_keys[level]
+ if min_token_number is None or key.token_number < min_token_number:
+ min_token_number = key.token_number
+ return min_token_number
+
+ def stale_possible_simple_keys(self):
+ # Remove entries that are no longer possible simple keys. According to
+ # the YAML specification, simple keys
+ # - should be limited to a single line,
+ # - should be no longer than 1024 characters.
+ # Disabling this procedure will allow simple keys of any length and
+ # height (may cause problems if indentation is broken though).
+ for level in list(self.possible_simple_keys):
+ key = self.possible_simple_keys[level]
+ if key.line != self.line \
+ or self.index-key.index > 1024:
+ if key.required:
+ raise ScannerError("while scanning a simple key", key.mark,
+ "could not find expected ':'", self.get_mark())
+ del self.possible_simple_keys[level]
+
+ def save_possible_simple_key(self):
+ # The next token may start a simple key. We check if it's possible
+ # and save its position. This function is called for
+ # ALIAS, ANCHOR, TAG, SCALAR(flow), '[', and '{'.
+
+ # Check if a simple key is required at the current position.
+ required = not self.flow_level and self.indent == self.column
+
+ # The next token might be a simple key. Let's save it's number and
+ # position.
+ if self.allow_simple_key:
+ self.remove_possible_simple_key()
+ token_number = self.tokens_taken+len(self.tokens)
+ key = SimpleKey(token_number, required,
+ self.index, self.line, self.column, self.get_mark())
+ self.possible_simple_keys[self.flow_level] = key
+
+ def remove_possible_simple_key(self):
+ # Remove the saved possible key position at the current flow level.
+ if self.flow_level in self.possible_simple_keys:
+ key = self.possible_simple_keys[self.flow_level]
+
+ if key.required:
+ raise ScannerError("while scanning a simple key", key.mark,
+ "could not find expected ':'", self.get_mark())
+
+ del self.possible_simple_keys[self.flow_level]
+
+ # Indentation functions.
+
+ def unwind_indent(self, column):
+
+ ## In flow context, tokens should respect indentation.
+ ## Actually the condition should be `self.indent >= column` according to
+ ## the spec. But this condition will prohibit intuitively correct
+ ## constructions such as
+ ## key : {
+ ## }
+ #if self.flow_level and self.indent > column:
+ # raise ScannerError(None, None,
+ # "invalid indentation or unclosed '[' or '{'",
+ # self.get_mark())
+
+ # In the flow context, indentation is ignored. We make the scanner less
+ # restrictive then specification requires.
+ if self.flow_level:
+ return
+
+ # In block context, we may need to issue the BLOCK-END tokens.
+ while self.indent > column:
+ mark = self.get_mark()
+ self.indent = self.indents.pop()
+ self.tokens.append(BlockEndToken(mark, mark))
+
+ def add_indent(self, column):
+ # Check if we need to increase indentation.
+ if self.indent < column:
+ self.indents.append(self.indent)
+ self.indent = column
+ return True
+ return False
+
+ # Fetchers.
+
+ def fetch_stream_start(self):
+ # We always add STREAM-START as the first token and STREAM-END as the
+ # last token.
+
+ # Read the token.
+ mark = self.get_mark()
+
+ # Add STREAM-START.
+ self.tokens.append(StreamStartToken(mark, mark,
+ encoding=self.encoding))
+
+
+ def fetch_stream_end(self):
+
+ # Set the current indentation to -1.
+ self.unwind_indent(-1)
+
+ # Reset simple keys.
+ self.remove_possible_simple_key()
+ self.allow_simple_key = False
+ self.possible_simple_keys = {}
+
+ # Read the token.
+ mark = self.get_mark()
+
+ # Add STREAM-END.
+ self.tokens.append(StreamEndToken(mark, mark))
+
+ # The steam is finished.
+ self.done = True
+
+ def fetch_directive(self):
+
+ # Set the current indentation to -1.
+ self.unwind_indent(-1)
+
+ # Reset simple keys.
+ self.remove_possible_simple_key()
+ self.allow_simple_key = False
+
+ # Scan and add DIRECTIVE.
+ self.tokens.append(self.scan_directive())
+
+ def fetch_document_start(self):
+ self.fetch_document_indicator(DocumentStartToken)
+
+ def fetch_document_end(self):
+ self.fetch_document_indicator(DocumentEndToken)
+
+ def fetch_document_indicator(self, TokenClass):
+
+ # Set the current indentation to -1.
+ self.unwind_indent(-1)
+
+ # Reset simple keys. Note that there could not be a block collection
+ # after '---'.
+ self.remove_possible_simple_key()
+ self.allow_simple_key = False
+
+ # Add DOCUMENT-START or DOCUMENT-END.
+ start_mark = self.get_mark()
+ self.forward(3)
+ end_mark = self.get_mark()
+ self.tokens.append(TokenClass(start_mark, end_mark))
+
+ def fetch_flow_sequence_start(self):
+ self.fetch_flow_collection_start(FlowSequenceStartToken)
+
+ def fetch_flow_mapping_start(self):
+ self.fetch_flow_collection_start(FlowMappingStartToken)
+
+ def fetch_flow_collection_start(self, TokenClass):
+
+ # '[' and '{' may start a simple key.
+ self.save_possible_simple_key()
+
+ # Increase the flow level.
+ self.flow_level += 1
+
+ # Simple keys are allowed after '[' and '{'.
+ self.allow_simple_key = True
+
+ # Add FLOW-SEQUENCE-START or FLOW-MAPPING-START.
+ start_mark = self.get_mark()
+ self.forward()
+ end_mark = self.get_mark()
+ self.tokens.append(TokenClass(start_mark, end_mark))
+
+ def fetch_flow_sequence_end(self):
+ self.fetch_flow_collection_end(FlowSequenceEndToken)
+
+ def fetch_flow_mapping_end(self):
+ self.fetch_flow_collection_end(FlowMappingEndToken)
+
+ def fetch_flow_collection_end(self, TokenClass):
+
+ # Reset possible simple key on the current level.
+ self.remove_possible_simple_key()
+
+ # Decrease the flow level.
+ self.flow_level -= 1
+
+ # No simple keys after ']' or '}'.
+ self.allow_simple_key = False
+
+ # Add FLOW-SEQUENCE-END or FLOW-MAPPING-END.
+ start_mark = self.get_mark()
+ self.forward()
+ end_mark = self.get_mark()
+ self.tokens.append(TokenClass(start_mark, end_mark))
+
+ def fetch_flow_entry(self):
+
+ # Simple keys are allowed after ','.
+ self.allow_simple_key = True
+
+ # Reset possible simple key on the current level.
+ self.remove_possible_simple_key()
+
+ # Add FLOW-ENTRY.
+ start_mark = self.get_mark()
+ self.forward()
+ end_mark = self.get_mark()
+ self.tokens.append(FlowEntryToken(start_mark, end_mark))
+
+ def fetch_block_entry(self):
+
+ # Block context needs additional checks.
+ if not self.flow_level:
+
+ # Are we allowed to start a new entry?
+ if not self.allow_simple_key:
+ raise ScannerError(None, None,
+ "sequence entries are not allowed here",
+ self.get_mark())
+
+ # We may need to add BLOCK-SEQUENCE-START.
+ if self.add_indent(self.column):
+ mark = self.get_mark()
+ self.tokens.append(BlockSequenceStartToken(mark, mark))
+
+ # It's an error for the block entry to occur in the flow context,
+ # but we let the parser detect this.
+ else:
+ pass
+
+ # Simple keys are allowed after '-'.
+ self.allow_simple_key = True
+
+ # Reset possible simple key on the current level.
+ self.remove_possible_simple_key()
+
+ # Add BLOCK-ENTRY.
+ start_mark = self.get_mark()
+ self.forward()
+ end_mark = self.get_mark()
+ self.tokens.append(BlockEntryToken(start_mark, end_mark))
+
+ def fetch_key(self):
+
+ # Block context needs additional checks.
+ if not self.flow_level:
+
+ # Are we allowed to start a key (not necessary a simple)?
+ if not self.allow_simple_key:
+ raise ScannerError(None, None,
+ "mapping keys are not allowed here",
+ self.get_mark())
+
+ # We may need to add BLOCK-MAPPING-START.
+ if self.add_indent(self.column):
+ mark = self.get_mark()
+ self.tokens.append(BlockMappingStartToken(mark, mark))
+
+ # Simple keys are allowed after '?' in the block context.
+ self.allow_simple_key = not self.flow_level
+
+ # Reset possible simple key on the current level.
+ self.remove_possible_simple_key()
+
+ # Add KEY.
+ start_mark = self.get_mark()
+ self.forward()
+ end_mark = self.get_mark()
+ self.tokens.append(KeyToken(start_mark, end_mark))
+
+ def fetch_value(self):
+
+ # Do we determine a simple key?
+ if self.flow_level in self.possible_simple_keys:
+
+ # Add KEY.
+ key = self.possible_simple_keys[self.flow_level]
+ del self.possible_simple_keys[self.flow_level]
+ self.tokens.insert(key.token_number-self.tokens_taken,
+ KeyToken(key.mark, key.mark))
+
+ # If this key starts a new block mapping, we need to add
+ # BLOCK-MAPPING-START.
+ if not self.flow_level:
+ if self.add_indent(key.column):
+ self.tokens.insert(key.token_number-self.tokens_taken,
+ BlockMappingStartToken(key.mark, key.mark))
+
+ # There cannot be two simple keys one after another.
+ self.allow_simple_key = False
+
+ # It must be a part of a complex key.
+ else:
+
+ # Block context needs additional checks.
+ # (Do we really need them? They will be caught by the parser
+ # anyway.)
+ if not self.flow_level:
+
+ # We are allowed to start a complex value if and only if
+ # we can start a simple key.
+ if not self.allow_simple_key:
+ raise ScannerError(None, None,
+ "mapping values are not allowed here",
+ self.get_mark())
+
+ # If this value starts a new block mapping, we need to add
+ # BLOCK-MAPPING-START. It will be detected as an error later by
+ # the parser.
+ if not self.flow_level:
+ if self.add_indent(self.column):
+ mark = self.get_mark()
+ self.tokens.append(BlockMappingStartToken(mark, mark))
+
+ # Simple keys are allowed after ':' in the block context.
+ self.allow_simple_key = not self.flow_level
+
+ # Reset possible simple key on the current level.
+ self.remove_possible_simple_key()
+
+ # Add VALUE.
+ start_mark = self.get_mark()
+ self.forward()
+ end_mark = self.get_mark()
+ self.tokens.append(ValueToken(start_mark, end_mark))
+
+ def fetch_alias(self):
+
+ # ALIAS could be a simple key.
+ self.save_possible_simple_key()
+
+ # No simple keys after ALIAS.
+ self.allow_simple_key = False
+
+ # Scan and add ALIAS.
+ self.tokens.append(self.scan_anchor(AliasToken))
+
+ def fetch_anchor(self):
+
+ # ANCHOR could start a simple key.
+ self.save_possible_simple_key()
+
+ # No simple keys after ANCHOR.
+ self.allow_simple_key = False
+
+ # Scan and add ANCHOR.
+ self.tokens.append(self.scan_anchor(AnchorToken))
+
+ def fetch_tag(self):
+
+ # TAG could start a simple key.
+ self.save_possible_simple_key()
+
+ # No simple keys after TAG.
+ self.allow_simple_key = False
+
+ # Scan and add TAG.
+ self.tokens.append(self.scan_tag())
+
+ def fetch_literal(self):
+ self.fetch_block_scalar(style='|')
+
+ def fetch_folded(self):
+ self.fetch_block_scalar(style='>')
+
+ def fetch_block_scalar(self, style):
+
+ # A simple key may follow a block scalar.
+ self.allow_simple_key = True
+
+ # Reset possible simple key on the current level.
+ self.remove_possible_simple_key()
+
+ # Scan and add SCALAR.
+ self.tokens.append(self.scan_block_scalar(style))
+
+ def fetch_single(self):
+ self.fetch_flow_scalar(style='\'')
+
+ def fetch_double(self):
+ self.fetch_flow_scalar(style='"')
+
+ def fetch_flow_scalar(self, style):
+
+ # A flow scalar could be a simple key.
+ self.save_possible_simple_key()
+
+ # No simple keys after flow scalars.
+ self.allow_simple_key = False
+
+ # Scan and add SCALAR.
+ self.tokens.append(self.scan_flow_scalar(style))
+
+ def fetch_plain(self):
+
+ # A plain scalar could be a simple key.
+ self.save_possible_simple_key()
+
+ # No simple keys after plain scalars. But note that `scan_plain` will
+ # change this flag if the scan is finished at the beginning of the
+ # line.
+ self.allow_simple_key = False
+
+ # Scan and add SCALAR. May change `allow_simple_key`.
+ self.tokens.append(self.scan_plain())
+
+ # Checkers.
+
+ def check_directive(self):
+
+ # DIRECTIVE: ^ '%' ...
+ # The '%' indicator is already checked.
+ if self.column == 0:
+ return True
+
+ def check_document_start(self):
+
+ # DOCUMENT-START: ^ '---' (' '|'\n')
+ if self.column == 0:
+ if self.prefix(3) == '---' \
+ and self.peek(3) in '\0 \t\r\n\x85\u2028\u2029':
+ return True
+
+ def check_document_end(self):
+
+ # DOCUMENT-END: ^ '...' (' '|'\n')
+ if self.column == 0:
+ if self.prefix(3) == '...' \
+ and self.peek(3) in '\0 \t\r\n\x85\u2028\u2029':
+ return True
+
+ def check_block_entry(self):
+
+ # BLOCK-ENTRY: '-' (' '|'\n')
+ return self.peek(1) in '\0 \t\r\n\x85\u2028\u2029'
+
+ def check_key(self):
+
+ # KEY(flow context): '?'
+ if self.flow_level:
+ return True
+
+ # KEY(block context): '?' (' '|'\n')
+ else:
+ return self.peek(1) in '\0 \t\r\n\x85\u2028\u2029'
+
+ def check_value(self):
+
+ # VALUE(flow context): ':'
+ if self.flow_level:
+ return True
+
+ # VALUE(block context): ':' (' '|'\n')
+ else:
+ return self.peek(1) in '\0 \t\r\n\x85\u2028\u2029'
+
+ def check_plain(self):
+
+ # A plain scalar may start with any non-space character except:
+ # '-', '?', ':', ',', '[', ']', '{', '}',
+ # '#', '&', '*', '!', '|', '>', '\'', '\"',
+ # '%', '@', '`'.
+ #
+ # It may also start with
+ # '-', '?', ':'
+ # if it is followed by a non-space character.
+ #
+ # Note that we limit the last rule to the block context (except the
+ # '-' character) because we want the flow context to be space
+ # independent.
+ ch = self.peek()
+ return ch not in '\0 \t\r\n\x85\u2028\u2029-?:,[]{}#&*!|>\'\"%@`' \
+ or (self.peek(1) not in '\0 \t\r\n\x85\u2028\u2029'
+ and (ch == '-' or (not self.flow_level and ch in '?:')))
+
+ # Scanners.
+
+ def scan_to_next_token(self):
+ # We ignore spaces, line breaks and comments.
+ # If we find a line break in the block context, we set the flag
+ # `allow_simple_key` on.
+ # The byte order mark is stripped if it's the first character in the
+ # stream. We do not yet support BOM inside the stream as the
+ # specification requires. Any such mark will be considered as a part
+ # of the document.
+ #
+ # TODO: We need to make tab handling rules more sane. A good rule is
+ # Tabs cannot precede tokens
+ # BLOCK-SEQUENCE-START, BLOCK-MAPPING-START, BLOCK-END,
+ # KEY(block), VALUE(block), BLOCK-ENTRY
+ # So the checking code is
+ # if <TAB>:
+ # self.allow_simple_keys = False
+ # We also need to add the check for `allow_simple_keys == True` to
+ # `unwind_indent` before issuing BLOCK-END.
+ # Scanners for block, flow, and plain scalars need to be modified.
+
+ if self.index == 0 and self.peek() == '\uFEFF':
+ self.forward()
+ found = False
+ while not found:
+ while self.peek() == ' ':
+ self.forward()
+ if self.peek() == '#':
+ while self.peek() not in '\0\r\n\x85\u2028\u2029':
+ self.forward()
+ if self.scan_line_break():
+ if not self.flow_level:
+ self.allow_simple_key = True
+ else:
+ found = True
+
+ def scan_directive(self):
+ # See the specification for details.
+ start_mark = self.get_mark()
+ self.forward()
+ name = self.scan_directive_name(start_mark)
+ value = None
+ if name == 'YAML':
+ value = self.scan_yaml_directive_value(start_mark)
+ end_mark = self.get_mark()
+ elif name == 'TAG':
+ value = self.scan_tag_directive_value(start_mark)
+ end_mark = self.get_mark()
+ else:
+ end_mark = self.get_mark()
+ while self.peek() not in '\0\r\n\x85\u2028\u2029':
+ self.forward()
+ self.scan_directive_ignored_line(start_mark)
+ return DirectiveToken(name, value, start_mark, end_mark)
+
+ def scan_directive_name(self, start_mark):
+ # See the specification for details.
+ length = 0
+ ch = self.peek(length)
+ while '0' <= ch <= '9' or 'A' <= ch <= 'Z' or 'a' <= ch <= 'z' \
+ or ch in '-_':
+ length += 1
+ ch = self.peek(length)
+ if not length:
+ raise ScannerError("while scanning a directive", start_mark,
+ "expected alphabetic or numeric character, but found %r"
+ % ch, self.get_mark())
+ value = self.prefix(length)
+ self.forward(length)
+ ch = self.peek()
+ if ch not in '\0 \r\n\x85\u2028\u2029':
+ raise ScannerError("while scanning a directive", start_mark,
+ "expected alphabetic or numeric character, but found %r"
+ % ch, self.get_mark())
+ return value
+
+ def scan_yaml_directive_value(self, start_mark):
+ # See the specification for details.
+ while self.peek() == ' ':
+ self.forward()
+ major = self.scan_yaml_directive_number(start_mark)
+ if self.peek() != '.':
+ raise ScannerError("while scanning a directive", start_mark,
+ "expected a digit or '.', but found %r" % self.peek(),
+ self.get_mark())
+ self.forward()
+ minor = self.scan_yaml_directive_number(start_mark)
+ if self.peek() not in '\0 \r\n\x85\u2028\u2029':
+ raise ScannerError("while scanning a directive", start_mark,
+ "expected a digit or ' ', but found %r" % self.peek(),
+ self.get_mark())
+ return (major, minor)
+
+ def scan_yaml_directive_number(self, start_mark):
+ # See the specification for details.
+ ch = self.peek()
+ if not ('0' <= ch <= '9'):
+ raise ScannerError("while scanning a directive", start_mark,
+ "expected a digit, but found %r" % ch, self.get_mark())
+ length = 0
+ while '0' <= self.peek(length) <= '9':
+ length += 1
+ value = int(self.prefix(length))
+ self.forward(length)
+ return value
+
+ def scan_tag_directive_value(self, start_mark):
+ # See the specification for details.
+ while self.peek() == ' ':
+ self.forward()
+ handle = self.scan_tag_directive_handle(start_mark)
+ while self.peek() == ' ':
+ self.forward()
+ prefix = self.scan_tag_directive_prefix(start_mark)
+ return (handle, prefix)
+
+ def scan_tag_directive_handle(self, start_mark):
+ # See the specification for details.
+ value = self.scan_tag_handle('directive', start_mark)
+ ch = self.peek()
+ if ch != ' ':
+ raise ScannerError("while scanning a directive", start_mark,
+ "expected ' ', but found %r" % ch, self.get_mark())
+ return value
+
+ def scan_tag_directive_prefix(self, start_mark):
+ # See the specification for details.
+ value = self.scan_tag_uri('directive', start_mark)
+ ch = self.peek()
+ if ch not in '\0 \r\n\x85\u2028\u2029':
+ raise ScannerError("while scanning a directive", start_mark,
+ "expected ' ', but found %r" % ch, self.get_mark())
+ return value
+
+ def scan_directive_ignored_line(self, start_mark):
+ # See the specification for details.
+ while self.peek() == ' ':
+ self.forward()
+ if self.peek() == '#':
+ while self.peek() not in '\0\r\n\x85\u2028\u2029':
+ self.forward()
+ ch = self.peek()
+ if ch not in '\0\r\n\x85\u2028\u2029':
+ raise ScannerError("while scanning a directive", start_mark,
+ "expected a comment or a line break, but found %r"
+ % ch, self.get_mark())
+ self.scan_line_break()
+
+ def scan_anchor(self, TokenClass):
+ # The specification does not restrict characters for anchors and
+ # aliases. This may lead to problems, for instance, the document:
+ # [ *alias, value ]
+ # can be interpreted in two ways, as
+ # [ "value" ]
+ # and
+ # [ *alias , "value" ]
+ # Therefore we restrict aliases to numbers and ASCII letters.
+ start_mark = self.get_mark()
+ indicator = self.peek()
+ if indicator == '*':
+ name = 'alias'
+ else:
+ name = 'anchor'
+ self.forward()
+ length = 0
+ ch = self.peek(length)
+ while '0' <= ch <= '9' or 'A' <= ch <= 'Z' or 'a' <= ch <= 'z' \
+ or ch in '-_':
+ length += 1
+ ch = self.peek(length)
+ if not length:
+ raise ScannerError("while scanning an %s" % name, start_mark,
+ "expected alphabetic or numeric character, but found %r"
+ % ch, self.get_mark())
+ value = self.prefix(length)
+ self.forward(length)
+ ch = self.peek()
+ if ch not in '\0 \t\r\n\x85\u2028\u2029?:,]}%@`':
+ raise ScannerError("while scanning an %s" % name, start_mark,
+ "expected alphabetic or numeric character, but found %r"
+ % ch, self.get_mark())
+ end_mark = self.get_mark()
+ return TokenClass(value, start_mark, end_mark)
+
+ def scan_tag(self):
+ # See the specification for details.
+ start_mark = self.get_mark()
+ ch = self.peek(1)
+ if ch == '<':
+ handle = None
+ self.forward(2)
+ suffix = self.scan_tag_uri('tag', start_mark)
+ if self.peek() != '>':
+ raise ScannerError("while parsing a tag", start_mark,
+ "expected '>', but found %r" % self.peek(),
+ self.get_mark())
+ self.forward()
+ elif ch in '\0 \t\r\n\x85\u2028\u2029':
+ handle = None
+ suffix = '!'
+ self.forward()
+ else:
+ length = 1
+ use_handle = False
+ while ch not in '\0 \r\n\x85\u2028\u2029':
+ if ch == '!':
+ use_handle = True
+ break
+ length += 1
+ ch = self.peek(length)
+ handle = '!'
+ if use_handle:
+ handle = self.scan_tag_handle('tag', start_mark)
+ else:
+ handle = '!'
+ self.forward()
+ suffix = self.scan_tag_uri('tag', start_mark)
+ ch = self.peek()
+ if ch not in '\0 \r\n\x85\u2028\u2029':
+ raise ScannerError("while scanning a tag", start_mark,
+ "expected ' ', but found %r" % ch, self.get_mark())
+ value = (handle, suffix)
+ end_mark = self.get_mark()
+ return TagToken(value, start_mark, end_mark)
+
+ def scan_block_scalar(self, style):
+ # See the specification for details.
+
+ if style == '>':
+ folded = True
+ else:
+ folded = False
+
+ chunks = []
+ start_mark = self.get_mark()
+
+ # Scan the header.
+ self.forward()
+ chomping, increment = self.scan_block_scalar_indicators(start_mark)
+ self.scan_block_scalar_ignored_line(start_mark)
+
+ # Determine the indentation level and go to the first non-empty line.
+ min_indent = self.indent+1
+ if min_indent < 1:
+ min_indent = 1
+ if increment is None:
+ breaks, max_indent, end_mark = self.scan_block_scalar_indentation()
+ indent = max(min_indent, max_indent)
+ else:
+ indent = min_indent+increment-1
+ breaks, end_mark = self.scan_block_scalar_breaks(indent)
+ line_break = ''
+
+ # Scan the inner part of the block scalar.
+ while self.column == indent and self.peek() != '\0':
+ chunks.extend(breaks)
+ leading_non_space = self.peek() not in ' \t'
+ length = 0
+ while self.peek(length) not in '\0\r\n\x85\u2028\u2029':
+ length += 1
+ chunks.append(self.prefix(length))
+ self.forward(length)
+ line_break = self.scan_line_break()
+ breaks, end_mark = self.scan_block_scalar_breaks(indent)
+ if self.column == indent and self.peek() != '\0':
+
+ # Unfortunately, folding rules are ambiguous.
+ #
+ # This is the folding according to the specification:
+
+ if folded and line_break == '\n' \
+ and leading_non_space and self.peek() not in ' \t':
+ if not breaks:
+ chunks.append(' ')
+ else:
+ chunks.append(line_break)
+
+ # This is Clark Evans's interpretation (also in the spec
+ # examples):
+ #
+ #if folded and line_break == '\n':
+ # if not breaks:
+ # if self.peek() not in ' \t':
+ # chunks.append(' ')
+ # else:
+ # chunks.append(line_break)
+ #else:
+ # chunks.append(line_break)
+ else:
+ break
+
+ # Chomp the tail.
+ if chomping is not False:
+ chunks.append(line_break)
+ if chomping is True:
+ chunks.extend(breaks)
+
+ # We are done.
+ return ScalarToken(''.join(chunks), False, start_mark, end_mark,
+ style)
+
+ def scan_block_scalar_indicators(self, start_mark):
+ # See the specification for details.
+ chomping = None
+ increment = None
+ ch = self.peek()
+ if ch in '+-':
+ if ch == '+':
+ chomping = True
+ else:
+ chomping = False
+ self.forward()
+ ch = self.peek()
+ if ch in '0123456789':
+ increment = int(ch)
+ if increment == 0:
+ raise ScannerError("while scanning a block scalar", start_mark,
+ "expected indentation indicator in the range 1-9, but found 0",
+ self.get_mark())
+ self.forward()
+ elif ch in '0123456789':
+ increment = int(ch)
+ if increment == 0:
+ raise ScannerError("while scanning a block scalar", start_mark,
+ "expected indentation indicator in the range 1-9, but found 0",
+ self.get_mark())
+ self.forward()
+ ch = self.peek()
+ if ch in '+-':
+ if ch == '+':
+ chomping = True
+ else:
+ chomping = False
+ self.forward()
+ ch = self.peek()
+ if ch not in '\0 \r\n\x85\u2028\u2029':
+ raise ScannerError("while scanning a block scalar", start_mark,
+ "expected chomping or indentation indicators, but found %r"
+ % ch, self.get_mark())
+ return chomping, increment
+
+ def scan_block_scalar_ignored_line(self, start_mark):
+ # See the specification for details.
+ while self.peek() == ' ':
+ self.forward()
+ if self.peek() == '#':
+ while self.peek() not in '\0\r\n\x85\u2028\u2029':
+ self.forward()
+ ch = self.peek()
+ if ch not in '\0\r\n\x85\u2028\u2029':
+ raise ScannerError("while scanning a block scalar", start_mark,
+ "expected a comment or a line break, but found %r" % ch,
+ self.get_mark())
+ self.scan_line_break()
+
+ def scan_block_scalar_indentation(self):
+ # See the specification for details.
+ chunks = []
+ max_indent = 0
+ end_mark = self.get_mark()
+ while self.peek() in ' \r\n\x85\u2028\u2029':
+ if self.peek() != ' ':
+ chunks.append(self.scan_line_break())
+ end_mark = self.get_mark()
+ else:
+ self.forward()
+ if self.column > max_indent:
+ max_indent = self.column
+ return chunks, max_indent, end_mark
+
+ def scan_block_scalar_breaks(self, indent):
+ # See the specification for details.
+ chunks = []
+ end_mark = self.get_mark()
+ while self.column < indent and self.peek() == ' ':
+ self.forward()
+ while self.peek() in '\r\n\x85\u2028\u2029':
+ chunks.append(self.scan_line_break())
+ end_mark = self.get_mark()
+ while self.column < indent and self.peek() == ' ':
+ self.forward()
+ return chunks, end_mark
+
+ def scan_flow_scalar(self, style):
+ # See the specification for details.
+ # Note that we loose indentation rules for quoted scalars. Quoted
+ # scalars don't need to adhere indentation because " and ' clearly
+ # mark the beginning and the end of them. Therefore we are less
+ # restrictive then the specification requires. We only need to check
+ # that document separators are not included in scalars.
+ if style == '"':
+ double = True
+ else:
+ double = False
+ chunks = []
+ start_mark = self.get_mark()
+ quote = self.peek()
+ self.forward()
+ chunks.extend(self.scan_flow_scalar_non_spaces(double, start_mark))
+ while self.peek() != quote:
+ chunks.extend(self.scan_flow_scalar_spaces(double, start_mark))
+ chunks.extend(self.scan_flow_scalar_non_spaces(double, start_mark))
+ self.forward()
+ end_mark = self.get_mark()
+ return ScalarToken(''.join(chunks), False, start_mark, end_mark,
+ style)
+
+ ESCAPE_REPLACEMENTS = {
+ '0': '\0',
+ 'a': '\x07',
+ 'b': '\x08',
+ 't': '\x09',
+ '\t': '\x09',
+ 'n': '\x0A',
+ 'v': '\x0B',
+ 'f': '\x0C',
+ 'r': '\x0D',
+ 'e': '\x1B',
+ ' ': '\x20',
+ '\"': '\"',
+ '\\': '\\',
+ '/': '/',
+ 'N': '\x85',
+ '_': '\xA0',
+ 'L': '\u2028',
+ 'P': '\u2029',
+ }
+
+ ESCAPE_CODES = {
+ 'x': 2,
+ 'u': 4,
+ 'U': 8,
+ }
+
+ def scan_flow_scalar_non_spaces(self, double, start_mark):
+ # See the specification for details.
+ chunks = []
+ while True:
+ length = 0
+ while self.peek(length) not in '\'\"\\\0 \t\r\n\x85\u2028\u2029':
+ length += 1
+ if length:
+ chunks.append(self.prefix(length))
+ self.forward(length)
+ ch = self.peek()
+ if not double and ch == '\'' and self.peek(1) == '\'':
+ chunks.append('\'')
+ self.forward(2)
+ elif (double and ch == '\'') or (not double and ch in '\"\\'):
+ chunks.append(ch)
+ self.forward()
+ elif double and ch == '\\':
+ self.forward()
+ ch = self.peek()
+ if ch in self.ESCAPE_REPLACEMENTS:
+ chunks.append(self.ESCAPE_REPLACEMENTS[ch])
+ self.forward()
+ elif ch in self.ESCAPE_CODES:
+ length = self.ESCAPE_CODES[ch]
+ self.forward()
+ for k in range(length):
+ if self.peek(k) not in '0123456789ABCDEFabcdef':
+ raise ScannerError("while scanning a double-quoted scalar", start_mark,
+ "expected escape sequence of %d hexdecimal numbers, but found %r" %
+ (length, self.peek(k)), self.get_mark())
+ code = int(self.prefix(length), 16)
+ chunks.append(chr(code))
+ self.forward(length)
+ elif ch in '\r\n\x85\u2028\u2029':
+ self.scan_line_break()
+ chunks.extend(self.scan_flow_scalar_breaks(double, start_mark))
+ else:
+ raise ScannerError("while scanning a double-quoted scalar", start_mark,
+ "found unknown escape character %r" % ch, self.get_mark())
+ else:
+ return chunks
+
+ def scan_flow_scalar_spaces(self, double, start_mark):
+ # See the specification for details.
+ chunks = []
+ length = 0
+ while self.peek(length) in ' \t':
+ length += 1
+ whitespaces = self.prefix(length)
+ self.forward(length)
+ ch = self.peek()
+ if ch == '\0':
+ raise ScannerError("while scanning a quoted scalar", start_mark,
+ "found unexpected end of stream", self.get_mark())
+ elif ch in '\r\n\x85\u2028\u2029':
+ line_break = self.scan_line_break()
+ breaks = self.scan_flow_scalar_breaks(double, start_mark)
+ if line_break != '\n':
+ chunks.append(line_break)
+ elif not breaks:
+ chunks.append(' ')
+ chunks.extend(breaks)
+ else:
+ chunks.append(whitespaces)
+ return chunks
+
+ def scan_flow_scalar_breaks(self, double, start_mark):
+ # See the specification for details.
+ chunks = []
+ while True:
+ # Instead of checking indentation, we check for document
+ # separators.
+ prefix = self.prefix(3)
+ if (prefix == '---' or prefix == '...') \
+ and self.peek(3) in '\0 \t\r\n\x85\u2028\u2029':
+ raise ScannerError("while scanning a quoted scalar", start_mark,
+ "found unexpected document separator", self.get_mark())
+ while self.peek() in ' \t':
+ self.forward()
+ if self.peek() in '\r\n\x85\u2028\u2029':
+ chunks.append(self.scan_line_break())
+ else:
+ return chunks
+
+ def scan_plain(self):
+ # See the specification for details.
+ # We add an additional restriction for the flow context:
+ # plain scalars in the flow context cannot contain ',' or '?'.
+ # We also keep track of the `allow_simple_key` flag here.
+ # Indentation rules are loosed for the flow context.
+ chunks = []
+ start_mark = self.get_mark()
+ end_mark = start_mark
+ indent = self.indent+1
+ # We allow zero indentation for scalars, but then we need to check for
+ # document separators at the beginning of the line.
+ #if indent == 0:
+ # indent = 1
+ spaces = []
+ while True:
+ length = 0
+ if self.peek() == '#':
+ break
+ while True:
+ ch = self.peek(length)
+ if ch in '\0 \t\r\n\x85\u2028\u2029' \
+ or (ch == ':' and
+ self.peek(length+1) in '\0 \t\r\n\x85\u2028\u2029'
+ + (u',[]{}' if self.flow_level else u''))\
+ or (self.flow_level and ch in ',?[]{}'):
+ break
+ length += 1
+ if length == 0:
+ break
+ self.allow_simple_key = False
+ chunks.extend(spaces)
+ chunks.append(self.prefix(length))
+ self.forward(length)
+ end_mark = self.get_mark()
+ spaces = self.scan_plain_spaces(indent, start_mark)
+ if not spaces or self.peek() == '#' \
+ or (not self.flow_level and self.column < indent):
+ break
+ return ScalarToken(''.join(chunks), True, start_mark, end_mark)
+
+ def scan_plain_spaces(self, indent, start_mark):
+ # See the specification for details.
+ # The specification is really confusing about tabs in plain scalars.
+ # We just forbid them completely. Do not use tabs in YAML!
+ chunks = []
+ length = 0
+ while self.peek(length) in ' ':
+ length += 1
+ whitespaces = self.prefix(length)
+ self.forward(length)
+ ch = self.peek()
+ if ch in '\r\n\x85\u2028\u2029':
+ line_break = self.scan_line_break()
+ self.allow_simple_key = True
+ prefix = self.prefix(3)
+ if (prefix == '---' or prefix == '...') \
+ and self.peek(3) in '\0 \t\r\n\x85\u2028\u2029':
+ return
+ breaks = []
+ while self.peek() in ' \r\n\x85\u2028\u2029':
+ if self.peek() == ' ':
+ self.forward()
+ else:
+ breaks.append(self.scan_line_break())
+ prefix = self.prefix(3)
+ if (prefix == '---' or prefix == '...') \
+ and self.peek(3) in '\0 \t\r\n\x85\u2028\u2029':
+ return
+ if line_break != '\n':
+ chunks.append(line_break)
+ elif not breaks:
+ chunks.append(' ')
+ chunks.extend(breaks)
+ elif whitespaces:
+ chunks.append(whitespaces)
+ return chunks
+
+ def scan_tag_handle(self, name, start_mark):
+ # See the specification for details.
+ # For some strange reasons, the specification does not allow '_' in
+ # tag handles. I have allowed it anyway.
+ ch = self.peek()
+ if ch != '!':
+ raise ScannerError("while scanning a %s" % name, start_mark,
+ "expected '!', but found %r" % ch, self.get_mark())
+ length = 1
+ ch = self.peek(length)
+ if ch != ' ':
+ while '0' <= ch <= '9' or 'A' <= ch <= 'Z' or 'a' <= ch <= 'z' \
+ or ch in '-_':
+ length += 1
+ ch = self.peek(length)
+ if ch != '!':
+ self.forward(length)
+ raise ScannerError("while scanning a %s" % name, start_mark,
+ "expected '!', but found %r" % ch, self.get_mark())
+ length += 1
+ value = self.prefix(length)
+ self.forward(length)
+ return value
+
+ def scan_tag_uri(self, name, start_mark):
+ # See the specification for details.
+ # Note: we do not check if URI is well-formed.
+ chunks = []
+ length = 0
+ ch = self.peek(length)
+ while '0' <= ch <= '9' or 'A' <= ch <= 'Z' or 'a' <= ch <= 'z' \
+ or ch in '-;/?:@&=+$,_.!~*\'()[]%':
+ if ch == '%':
+ chunks.append(self.prefix(length))
+ self.forward(length)
+ length = 0
+ chunks.append(self.scan_uri_escapes(name, start_mark))
+ else:
+ length += 1
+ ch = self.peek(length)
+ if length:
+ chunks.append(self.prefix(length))
+ self.forward(length)
+ length = 0
+ if not chunks:
+ raise ScannerError("while parsing a %s" % name, start_mark,
+ "expected URI, but found %r" % ch, self.get_mark())
+ return ''.join(chunks)
+
+ def scan_uri_escapes(self, name, start_mark):
+ # See the specification for details.
+ codes = []
+ mark = self.get_mark()
+ while self.peek() == '%':
+ self.forward()
+ for k in range(2):
+ if self.peek(k) not in '0123456789ABCDEFabcdef':
+ raise ScannerError("while scanning a %s" % name, start_mark,
+ "expected URI escape sequence of 2 hexdecimal numbers, but found %r"
+ % self.peek(k), self.get_mark())
+ codes.append(int(self.prefix(2), 16))
+ self.forward(2)
+ try:
+ value = bytes(codes).decode('utf-8')
+ except UnicodeDecodeError as exc:
+ raise ScannerError("while scanning a %s" % name, start_mark, str(exc), mark)
+ return value
+
+ def scan_line_break(self):
+ # Transforms:
+ # '\r\n' : '\n'
+ # '\r' : '\n'
+ # '\n' : '\n'
+ # '\x85' : '\n'
+ # '\u2028' : '\u2028'
+ # '\u2029 : '\u2029'
+ # default : ''
+ ch = self.peek()
+ if ch in '\r\n\x85':
+ if self.prefix(2) == '\r\n':
+ self.forward(2)
+ else:
+ self.forward()
+ return '\n'
+ elif ch in '\u2028\u2029':
+ self.forward()
+ return ch
+ return ''
diff --git a/yaml/lib3/yaml/serializer.py b/yaml/lib3/yaml/serializer.py
new file mode 100644
index 0000000000..fe911e67ae
--- /dev/null
+++ b/yaml/lib3/yaml/serializer.py
@@ -0,0 +1,111 @@
+
+__all__ = ['Serializer', 'SerializerError']
+
+from .error import YAMLError
+from .events import *
+from .nodes import *
+
+class SerializerError(YAMLError):
+ pass
+
+class Serializer:
+
+ ANCHOR_TEMPLATE = 'id%03d'
+
+ def __init__(self, encoding=None,
+ explicit_start=None, explicit_end=None, version=None, tags=None):
+ self.use_encoding = encoding
+ self.use_explicit_start = explicit_start
+ self.use_explicit_end = explicit_end
+ self.use_version = version
+ self.use_tags = tags
+ self.serialized_nodes = {}
+ self.anchors = {}
+ self.last_anchor_id = 0
+ self.closed = None
+
+ def open(self):
+ if self.closed is None:
+ self.emit(StreamStartEvent(encoding=self.use_encoding))
+ self.closed = False
+ elif self.closed:
+ raise SerializerError("serializer is closed")
+ else:
+ raise SerializerError("serializer is already opened")
+
+ def close(self):
+ if self.closed is None:
+ raise SerializerError("serializer is not opened")
+ elif not self.closed:
+ self.emit(StreamEndEvent())
+ self.closed = True
+
+ #def __del__(self):
+ # self.close()
+
+ def serialize(self, node):
+ if self.closed is None:
+ raise SerializerError("serializer is not opened")
+ elif self.closed:
+ raise SerializerError("serializer is closed")
+ self.emit(DocumentStartEvent(explicit=self.use_explicit_start,
+ version=self.use_version, tags=self.use_tags))
+ self.anchor_node(node)
+ self.serialize_node(node, None, None)
+ self.emit(DocumentEndEvent(explicit=self.use_explicit_end))
+ self.serialized_nodes = {}
+ self.anchors = {}
+ self.last_anchor_id = 0
+
+ def anchor_node(self, node):
+ if node in self.anchors:
+ if self.anchors[node] is None:
+ self.anchors[node] = self.generate_anchor(node)
+ else:
+ self.anchors[node] = None
+ if isinstance(node, SequenceNode):
+ for item in node.value:
+ self.anchor_node(item)
+ elif isinstance(node, MappingNode):
+ for key, value in node.value:
+ self.anchor_node(key)
+ self.anchor_node(value)
+
+ def generate_anchor(self, node):
+ self.last_anchor_id += 1
+ return self.ANCHOR_TEMPLATE % self.last_anchor_id
+
+ def serialize_node(self, node, parent, index):
+ alias = self.anchors[node]
+ if node in self.serialized_nodes:
+ self.emit(AliasEvent(alias))
+ else:
+ self.serialized_nodes[node] = True
+ self.descend_resolver(parent, index)
+ if isinstance(node, ScalarNode):
+ detected_tag = self.resolve(ScalarNode, node.value, (True, False))
+ default_tag = self.resolve(ScalarNode, node.value, (False, True))
+ implicit = (node.tag == detected_tag), (node.tag == default_tag)
+ self.emit(ScalarEvent(alias, node.tag, implicit, node.value,
+ style=node.style))
+ elif isinstance(node, SequenceNode):
+ implicit = (node.tag
+ == self.resolve(SequenceNode, node.value, True))
+ self.emit(SequenceStartEvent(alias, node.tag, implicit,
+ flow_style=node.flow_style))
+ index = 0
+ for item in node.value:
+ self.serialize_node(item, node, index)
+ index += 1
+ self.emit(SequenceEndEvent())
+ elif isinstance(node, MappingNode):
+ implicit = (node.tag
+ == self.resolve(MappingNode, node.value, True))
+ self.emit(MappingStartEvent(alias, node.tag, implicit,
+ flow_style=node.flow_style))
+ for key, value in node.value:
+ self.serialize_node(key, node, None)
+ self.serialize_node(value, node, key)
+ self.emit(MappingEndEvent())
+ self.ascend_resolver()
+
diff --git a/yaml/lib3/yaml/tokens.py b/yaml/lib3/yaml/tokens.py
new file mode 100644
index 0000000000..4d0b48a394
--- /dev/null
+++ b/yaml/lib3/yaml/tokens.py
@@ -0,0 +1,104 @@
+
+class Token(object):
+ def __init__(self, start_mark, end_mark):
+ self.start_mark = start_mark
+ self.end_mark = end_mark
+ def __repr__(self):
+ attributes = [key for key in self.__dict__
+ if not key.endswith('_mark')]
+ attributes.sort()
+ arguments = ', '.join(['%s=%r' % (key, getattr(self, key))
+ for key in attributes])
+ return '%s(%s)' % (self.__class__.__name__, arguments)
+
+#class BOMToken(Token):
+# id = '<byte order mark>'
+
+class DirectiveToken(Token):
+ id = '<directive>'
+ def __init__(self, name, value, start_mark, end_mark):
+ self.name = name
+ self.value = value
+ self.start_mark = start_mark
+ self.end_mark = end_mark
+
+class DocumentStartToken(Token):
+ id = '<document start>'
+
+class DocumentEndToken(Token):
+ id = '<document end>'
+
+class StreamStartToken(Token):
+ id = '<stream start>'
+ def __init__(self, start_mark=None, end_mark=None,
+ encoding=None):
+ self.start_mark = start_mark
+ self.end_mark = end_mark
+ self.encoding = encoding
+
+class StreamEndToken(Token):
+ id = '<stream end>'
+
+class BlockSequenceStartToken(Token):
+ id = '<block sequence start>'
+
+class BlockMappingStartToken(Token):
+ id = '<block mapping start>'
+
+class BlockEndToken(Token):
+ id = '<block end>'
+
+class FlowSequenceStartToken(Token):
+ id = '['
+
+class FlowMappingStartToken(Token):
+ id = '{'
+
+class FlowSequenceEndToken(Token):
+ id = ']'
+
+class FlowMappingEndToken(Token):
+ id = '}'
+
+class KeyToken(Token):
+ id = '?'
+
+class ValueToken(Token):
+ id = ':'
+
+class BlockEntryToken(Token):
+ id = '-'
+
+class FlowEntryToken(Token):
+ id = ','
+
+class AliasToken(Token):
+ id = '<alias>'
+ def __init__(self, value, start_mark, end_mark):
+ self.value = value
+ self.start_mark = start_mark
+ self.end_mark = end_mark
+
+class AnchorToken(Token):
+ id = '<anchor>'
+ def __init__(self, value, start_mark, end_mark):
+ self.value = value
+ self.start_mark = start_mark
+ self.end_mark = end_mark
+
+class TagToken(Token):
+ id = '<tag>'
+ def __init__(self, value, start_mark, end_mark):
+ self.value = value
+ self.start_mark = start_mark
+ self.end_mark = end_mark
+
+class ScalarToken(Token):
+ id = '<scalar>'
+ def __init__(self, value, plain, start_mark, end_mark, style=None):
+ self.value = value
+ self.plain = plain
+ self.start_mark = start_mark
+ self.end_mark = end_mark
+ self.style = style
+