diff options
Diffstat (limited to 'vdso/BUILD')
-rw-r--r-- | vdso/BUILD | 81 |
1 files changed, 81 insertions, 0 deletions
diff --git a/vdso/BUILD b/vdso/BUILD new file mode 100644 index 000000000..c70bb8218 --- /dev/null +++ b/vdso/BUILD @@ -0,0 +1,81 @@ +# Description: +# This VDSO is a shared library that provides the same interfaces as the +# normal system VDSO (time, gettimeofday, clock_gettimeofday) but which uses +# timekeeping parameters managed by the sandbox kernel. + +load("//tools:defs.bzl", "cc_flags_supplier", "cc_toolchain", "select_arch", "vdso_linker_option") + +package(licenses = ["notice"]) + +genrule( + name = "vdso", + srcs = [ + "barrier.h", + "compiler.h", + "cycle_clock.h", + "seqlock.h", + "syscalls.h", + "vdso.cc", + "vdso_amd64.lds", + "vdso_arm64.lds", + "vdso_time.h", + "vdso_time.cc", + ], + outs = [ + "vdso.so", + ], + cmd = "$(CC) $(CC_FLAGS) " + + "-I. " + + "-O2 " + + "-std=c++11 " + + "-fPIC " + + "-fno-sanitize=all " + + # Some toolchains enable stack protector by default. Disable it, the + # VDSO has no hooks to handle failures. + "-fno-stack-protector " + + vdso_linker_option + + select_arch( + amd64 = "-m64 ", + arm64 = "", + ) + + "-shared " + + "-nostdlib " + + "-Wl,-soname=linux-vdso.so.1 " + + "-Wl,--hash-style=sysv " + + "-Wl,--no-undefined " + + "-Wl,-Bsymbolic " + + "-Wl,-z,max-page-size=4096 " + + "-Wl,-z,common-page-size=4096 " + + select_arch( + amd64 = "-Wl,-T$(location vdso_amd64.lds) ", + arm64 = "-Wl,-T$(location vdso_arm64.lds) ", + no_match_error = "unsupported architecture", + ) + + "-o $(location vdso.so) " + + "$(location vdso.cc) " + + "$(location vdso_time.cc) " + + "&& $(location :check_vdso) " + + "--check-data " + + "--vdso $(location vdso.so) ", + exec_tools = [ + ":check_vdso", + ], + features = ["-pie"], + toolchains = [ + cc_toolchain, + ":no_pie_cc_flags", + ], + visibility = ["//:sandbox"], +) + +cc_flags_supplier( + name = "no_pie_cc_flags", + features = ["-pie"], +) + +py_binary( + name = "check_vdso", + srcs = ["check_vdso.py"], + python_version = "PY3", + visibility = ["//:sandbox"], +) |