From f5f673de0f615327465640e87ab5b4be561fbb8d Mon Sep 17 00:00:00 2001 From: Akash Levy Date: Thu, 14 Nov 2024 04:53:58 -0800 Subject: [PATCH] Add segv pass to trigger a segfault --- Makefile | 2 ++ passes/cmds/segv.cc | 43 +++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 45 insertions(+) create mode 100644 passes/cmds/segv.cc diff --git a/Makefile b/Makefile index 8c5548d30..7a1c64645 100644 --- a/Makefile +++ b/Makefile @@ -750,6 +750,8 @@ OBJS += passes/cmds/splitnetlist.o OBJS += passes/cmds/reconstructbusses.o OBJS += passes/sat/sim.o +OBJS += passes/cmds/segv.o + include $(YOSYS_SRC)/passes/hierarchy/Makefile.inc include $(YOSYS_SRC)/passes/memory/Makefile.inc include $(YOSYS_SRC)/passes/pmgen/Makefile.inc diff --git a/passes/cmds/segv.cc b/passes/cmds/segv.cc new file mode 100644 index 000000000..5b1383950 --- /dev/null +++ b/passes/cmds/segv.cc @@ -0,0 +1,43 @@ +/* + * yosys -- Yosys Open SYnthesis Suite + * + * Copyright (C) 2024 Akash Levy + * + * Permission to use, copy, modify, and/or distribute this software for any + * purpose with or without fee is hereby granted, provided that the above + * copyright notice and this permission notice appear in all copies. + * + * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES + * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR + * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN + * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF + * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + * + */ + +#include "kernel/yosys.h" +#include "kernel/sigtools.h" + +USING_YOSYS_NAMESPACE +PRIVATE_NAMESPACE_BEGIN + +struct SegvPass : public Pass { + SegvPass() : Pass("segv", "trigger a segfault") { } + void help() override + { + // |---v---|---v---|---v---|---v---|---v---|---v---|---v---|---v---|---v---|---v---| + log("\n"); + log(" segv\n"); + log("\n"); + log("This command triggers a segfault for debugging.\n"); + log("\n"); + } + void execute(std::vector, RTLIL::Design *) override + { + raise(SIGSEGV); + } +} SegvPass; + +PRIVATE_NAMESPACE_END