diff --git a/CMakeLists.txt b/CMakeLists.txt index 23bff52..e8fb27e 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -5,5 +5,7 @@ set(CMAKE_CXX_COMPILER g++-16 CACHE FILEPATH "C++ compiler" FORCE) project(SelfPatchSLR LANGUAGES C CXX) -add_subdirectory(plugin) +add_subdirectory(pinpoint) +add_subdirectory(finalize) +add_subdirectory(selfpatch) add_subdirectory(subject) diff --git a/plugin/CMakeLists.txt b/deprecated/plugin/CMakeLists.txt similarity index 100% rename from plugin/CMakeLists.txt rename to deprecated/plugin/CMakeLists.txt diff --git a/plugin/access_discover.cpp b/deprecated/plugin/access_discover.cpp similarity index 100% rename from plugin/access_discover.cpp rename to deprecated/plugin/access_discover.cpp diff --git a/plugin/access_discover.h b/deprecated/plugin/access_discover.h similarity index 100% rename from plugin/access_discover.h rename to deprecated/plugin/access_discover.h diff --git a/plugin/attrib.cpp b/deprecated/plugin/attrib.cpp similarity index 100% rename from plugin/attrib.cpp rename to deprecated/plugin/attrib.cpp diff --git a/plugin/attrib.h b/deprecated/plugin/attrib.h similarity index 100% rename from plugin/attrib.h rename to deprecated/plugin/attrib.h diff --git a/plugin/gcc_includes.h b/deprecated/plugin/gcc_includes.h similarity index 100% rename from plugin/gcc_includes.h rename to deprecated/plugin/gcc_includes.h diff --git a/plugin/main.cpp b/deprecated/plugin/main.cpp similarity index 100% rename from plugin/main.cpp rename to deprecated/plugin/main.cpp diff --git a/plugin/pattern.cpp b/deprecated/plugin/pattern.cpp similarity index 100% rename from plugin/pattern.cpp rename to deprecated/plugin/pattern.cpp diff --git a/plugin/pattern.h b/deprecated/plugin/pattern.h similarity index 100% rename from plugin/pattern.h rename to deprecated/plugin/pattern.h diff --git a/finalize/CMakeLists.txt b/finalize/CMakeLists.txt new file mode 100644 index 0000000..828fc5a --- /dev/null +++ b/finalize/CMakeLists.txt @@ -0,0 +1 @@ +add_executable(spslr_finalize finalize.cpp) diff --git a/finalize/finalize.cpp b/finalize/finalize.cpp new file mode 100644 index 0000000..bdcdb7b --- /dev/null +++ b/finalize/finalize.cpp @@ -0,0 +1,5 @@ +#include + +int main(int argc, char** argv) { + std::cout << "Hello World!" << std::endl; +} diff --git a/pinpoint/CMakeLists.txt b/pinpoint/CMakeLists.txt new file mode 100644 index 0000000..47ba4a1 --- /dev/null +++ b/pinpoint/CMakeLists.txt @@ -0,0 +1,9 @@ +add_library(spslr_pinpoint SHARED pinpoint.cpp) + +set_target_properties(spslr_pinpoint PROPERTIES PREFIX "") +target_compile_definitions(spslr_pinpoint PRIVATE _GNU_SOURCE) +target_compile_options(spslr_pinpoint PRIVATE -fno-rtti -fno-exceptions) + +execute_process(COMMAND ${CMAKE_C_COMPILER} -print-file-name=plugin OUTPUT_VARIABLE GCC_PLUGIN_PATH OUTPUT_STRIP_TRAILING_WHITESPACE) +message(STATUS "GCC plugin path: ${GCC_PLUGIN_PATH}") +target_include_directories(spslr_pinpoint PRIVATE ${GCC_PLUGIN_PATH}/include ${CMAKE_CURRENT_SOURCE_DIR}/safegcc) diff --git a/pinpoint/pinpoint.cpp b/pinpoint/pinpoint.cpp new file mode 100644 index 0000000..7ad1fe9 --- /dev/null +++ b/pinpoint/pinpoint.cpp @@ -0,0 +1,16 @@ +#include + +#include +#include + +int plugin_is_GPL_compatible; + +int plugin_init(struct plugin_name_args* plugin_info, struct plugin_gcc_version* version) { + if (!plugin_default_version_check(version, &gcc_version)) { + std::cerr << "spslr_pinpoint -> GCC version mismatch" << std::endl; + return 1; + } + + // TODO + return 0; +} diff --git a/pinpoint/safegcc/safe-gcc-plugin.h b/pinpoint/safegcc/safe-gcc-plugin.h new file mode 100644 index 0000000..fcd1116 --- /dev/null +++ b/pinpoint/safegcc/safe-gcc-plugin.h @@ -0,0 +1,6 @@ +#ifndef SAFEGCC_GCC_PLUGIN_H +#define SAFEGCC_GCC_PLUGIN_H + +#include + +#endif diff --git a/pinpoint/safegcc/safe-plugin-version.h b/pinpoint/safegcc/safe-plugin-version.h new file mode 100644 index 0000000..d816648 --- /dev/null +++ b/pinpoint/safegcc/safe-plugin-version.h @@ -0,0 +1,6 @@ +#ifndef SAFEGCC_PLUGIN_VERSION_H +#define SAFEGCC_PLUGIN_VERSION_H + +#include + +#endif diff --git a/selfpatch/CMakeLists.txt b/selfpatch/CMakeLists.txt new file mode 100644 index 0000000..4771ad7 --- /dev/null +++ b/selfpatch/CMakeLists.txt @@ -0,0 +1,6 @@ +add_library(spslr_selfpatch STATIC src/selfpatch.cpp) + +target_include_directories(spslr_selfpatch PUBLIC + $ + $ +) diff --git a/selfpatch/src/selfpatch.cpp b/selfpatch/src/selfpatch.cpp new file mode 100644 index 0000000..e69de29 diff --git a/subject/CMakeLists.txt b/subject/CMakeLists.txt index 342ca19..108c03f 100644 --- a/subject/CMakeLists.txt +++ b/subject/CMakeLists.txt @@ -1,4 +1,4 @@ add_executable(subject main.c) -add_dependencies(subject selfpatch-slr) -target_compile_options(subject PRIVATE -fplugin=$ - -include ${CMAKE_CURRENT_SOURCE_DIR}/offsetof_passthrough.h) +add_dependencies(subject spslr_pinpoint spslr_finalize spslr_selfpatch) +target_link_libraries(subject PRIVATE spslr_selfpatch) +target_compile_options(subject PRIVATE -fplugin=$)