| # |
| # Copyright (c) 2024, Arm Limited. All rights reserved. |
| # |
| # SPDX-License-Identifier: BSD-3-Clause |
| # |
| |
| # Generate random fuzzing seeds |
| # If no instance count is provided, default to 1 instance |
| # If no seeds are provided, generate them randomly |
| # The number of seeds provided must match the instance count |
| SMC_FUZZ_INSTANCE_COUNT ?= 1 |
| SMC_FUZZ_SEEDS ?= $(shell python -c "from random import randint; seeds = [randint(0, 4294967295) for i in range($(SMC_FUZZ_INSTANCE_COUNT))];print(\",\".join(str(x) for x in seeds));") |
| SMC_FUZZ_CALLS_PER_INSTANCE ?= 100 |
| # ADDED: which fuzz call to start with per instance |
| SMC_FUZZ_CALL_START ?= 0 |
| SMC_FUZZ_CALL_END ?= $(SMC_FUZZ_CALLS_PER_INSTANCE) |
| # ADDED: define whether events should specifically be constrained |
| EXCLUDE_FUNCID ?= 0 |
| CONSTRAIN_EVENTS ?= 0 |
| INTR_ASSERT ?= 0 |
| |
| # Validate SMC fuzzer parameters |
| |
| # Instance count must not be zero |
| ifeq ($(SMC_FUZZ_INSTANCE_COUNT),0) |
| $(error SMC_FUZZ_INSTANCE_COUNT must not be zero!) |
| endif |
| |
| # Calls per instance must not be zero |
| ifeq ($(SMC_FUZZ_CALLS_PER_INSTANCE),0) |
| $(error SMC_FUZZ_CALLS_PER_INSTANCE must not be zero!) |
| endif |
| |
| # Make sure seed count and instance count match |
| TEST_SEED_COUNT = $(shell python -c "print(len(\"$(SMC_FUZZ_SEEDS)\".split(\",\")))") |
| ifneq ($(TEST_SEED_COUNT), $(SMC_FUZZ_INSTANCE_COUNT)) |
| $(error Number of seeds does not match SMC_FUZZ_INSTANCE_COUNT!) |
| endif |
| |
| # Start must be nonnegative and less than calls per instance |
| ifeq ($(shell test $(SMC_FUZZ_CALL_START) -lt 0; echo $$?),0) |
| $(error SMC_FUZZ_CALL_START must be nonnegative!) |
| endif |
| |
| ifeq ($(shell test $(SMC_FUZZ_CALL_START) -gt $(shell expr $(SMC_FUZZ_CALLS_PER_INSTANCE) - 1); echo $$?),0) |
| $(error SMC_FUZZ_CALL_START must be less than SMC_FUZZ_CALLS_PER_INSTANCE!) |
| endif |
| |
| # End must be greater than start and less than or equal to calls per instance |
| ifneq ($(shell test $(SMC_FUZZ_CALL_START) -lt $(SMC_FUZZ_CALL_END); echo $$?),0) |
| $(error SMC_FUZZ_CALL_END must be greater than SMC_FUZZ_CALL_START!) |
| endif |
| |
| ifeq ($(shell test $(SMC_FUZZ_CALL_END) -gt $(SMC_FUZZ_CALLS_PER_INSTANCE); echo $$?),0) |
| $(error SMC_FUZZ_CALL_END must not be greater than SMC_FUZZ_CALLS_PER_INSTANCE!) |
| endif |
| |
| |
| # Add definitions to TFTF_DEFINES so they can be used in the code |
| $(eval $(call add_define,TFTF_DEFINES,SMC_FUZZ_SEEDS)) |
| $(eval $(call add_define,TFTF_DEFINES,SMC_FUZZ_INSTANCE_COUNT)) |
| $(eval $(call add_define,TFTF_DEFINES,SMC_FUZZ_CALLS_PER_INSTANCE)) |
| ifeq ($(SMC_FUZZER_DEBUG),1) |
| $(eval $(call add_define,TFTF_DEFINES,SMC_FUZZER_DEBUG)) |
| endif |
| ifeq ($(MULTI_CPU_SMC_FUZZER),1) |
| $(eval $(call add_define,TFTF_DEFINES,MULTI_CPU_SMC_FUZZER)) |
| endif |
| $(eval $(call add_define,TFTF_DEFINES,SMC_FUZZ_SANITY_LEVEL)) |
| $(eval $(call add_define,TFTF_DEFINES,SMC_FUZZ_CALL_START)) |
| $(eval $(call add_define,TFTF_DEFINES,SMC_FUZZ_CALL_END)) |
| $(eval $(call add_define,TFTF_DEFINES,CONSTRAIN_EVENTS)) |
| $(eval $(call add_define,TFTF_DEFINES,EXCLUDE_FUNCID)) |
| $(eval $(call add_define,TFTF_DEFINES,INTR_ASSERT)) |
| |
| TESTS_SOURCES += \ |
| $(addprefix tftf/tests/runtime_services/standard_service/sdei/system_tests/, \ |
| sdei_entrypoint.S \ |
| test_sdei.c \ |
| ) |
| |
| TESTS_SOURCES += \ |
| $(addprefix smc_fuzz/src/, \ |
| randsmcmod.c \ |
| smcmalloc.c \ |
| fifo3d.c \ |
| runtestfunction_helpers.c \ |
| sdei_fuzz_helper.c \ |
| tsp_fuzz_helper.c \ |
| nfifo.c \ |
| constraint.c \ |
| vendor_fuzz_helper.c \ |
| ) |