diff --git a/c/.gitignore b/c/.gitignore new file mode 100644 index 0000000..0994f69 --- /dev/null +++ b/c/.gitignore @@ -0,0 +1,2 @@ +/app/app +/target/libtarget.so diff --git a/c/app/build.sh b/c/app/build.sh new file mode 100755 index 0000000..5490c90 --- /dev/null +++ b/c/app/build.sh @@ -0,0 +1,7 @@ +#!/usr/bin/bash + +if [[ -f ./app ]]; then + rm ./app +fi + +clang -I../target/include -L../target/ -ltarget src/app.c -o app diff --git a/c/app/run.sh b/c/app/run.sh new file mode 100755 index 0000000..320911e --- /dev/null +++ b/c/app/run.sh @@ -0,0 +1,3 @@ +#!/usr/bin/bash + +LD_LIBRARY_PATH="../target/" ./app "$@" diff --git a/c/app/src/app.c b/c/app/src/app.c new file mode 100644 index 0000000..a3da316 --- /dev/null +++ b/c/app/src/app.c @@ -0,0 +1,15 @@ +#include +#include +#include "target.h" + +int main(int argc, char **argv) { + if(argc < 2) { + printf("Usage: %s \n", argv[0]); + exit(EXIT_FAILURE); + } + + int input = atoi(argv[1]); + maybe_say(input); + + exit(EXIT_SUCCESS); +} diff --git a/c/target/build.sh b/c/target/build.sh new file mode 100755 index 0000000..aa91a85 --- /dev/null +++ b/c/target/build.sh @@ -0,0 +1,10 @@ +#!/usr/bin/bash + +if [[ -f ./libtarget.so ]]; then + rm ./libtarget.so +fi + +clang -shared -I./include/ ./src/target.c -o ./libtarget.so + +# Don't include the local function symbol +strip -N say_something ./libtarget.so diff --git a/c/target/include/target.h b/c/target/include/target.h new file mode 100644 index 0000000..28d5e3a --- /dev/null +++ b/c/target/include/target.h @@ -0,0 +1,3 @@ +#pragma once + +void maybe_say(int num); diff --git a/c/target/src/target.c b/c/target/src/target.c new file mode 100644 index 0000000..6f62176 --- /dev/null +++ b/c/target/src/target.c @@ -0,0 +1,13 @@ +#include +#include +#include "target.h" + +static void __attribute__((__noinline__)) say_something() { + puts("This is really something!\n"); +} + +void maybe_say(int num) { + if(num == rand()) { + say_something(); + } +}