load("//tools:arch.bzl", "arch_genrule", "select_arch") load("//tools:defs.bzl", "cc_flags_supplier", "cc_toolchain", "go_library") load("build.bzl", "cc_pie_obj") package( default_applicable_licenses = ["//:license"], licenses = ["notice"], ) cc_flags_supplier( name = "no_pie_cc_flags", features = ["-pie"], ) cc_pie_obj( name = "sighandler", srcs = select_arch( amd64 = [ "sighandler_amd64.c", "sysmsg_offsets_amd64.h", ], arm64 = ["sighandler_arm64.c"], ) + [ "atomic.h", "sysmsg.h", "sysmsg_offsets.h", ], outs = ["sighandler.o"], ) cc_pie_obj( name = "sysmsg_lib", srcs = [ "atomic.h", "sysmsg.h", "sysmsg_lib.c", "sysmsg_offsets.h", ], outs = ["sysmsg_lib.o"], ) cc_pie_obj( name = "sysrestorer", srcs = select_arch( amd64 = ["sigrestorer_amd64.S"], arm64 = ["sigrestorer_arm64.S"], ), outs = ["sysrestorer.o"], ) cc_pie_obj( name = "syshandler", srcs = select_arch( amd64 = [ "syshandler_amd64.S", "sysmsg_offsets_amd64.h", ], arm64 = ["syshandler_arm64.S"], ) + [ "sysmsg_offsets.h", ], outs = ["syshandler.o"], ) genrule( name = "sighandler_object", srcs = [ "pie.lds.S", ":sighandler", ":syshandler", ":sysrestorer", ":sysmsg_lib", ], outs = ["sighandler.built-in.bin.o"], cmd = "$(LD) " + "-pie -z noexecstack -T $(location pie.lds.S) " + "$(location :sysrestorer) $(location :sighandler) " + "$(location :syshandler) $(location :sysmsg_lib) " + "-o $@", features = ["-pie"], toolchains = [ cc_toolchain, ], ) genrule( name = "sighandler_binary", srcs = [":sighandler_object"], outs = ["sighandler.built-in.bin"], cmd = "$(OBJCOPY) -O binary $(SRCS) $@", toolchains = [ cc_toolchain, ], ) arch_genrule( name = "sighandler_binary_arch", src = ":sighandler_binary", template = "sighandler.built-in.%s.bin", ) genrule( name = "sighandler_go", srcs = [":sighandler_object"], outs = ["sighandler.go.arch"], cmd = "bash -x $(location gen_offsets_go.sh) sighandler Sighandler " + "$(SRCS) > $@", tools = ["gen_offsets_go.sh"], ) arch_genrule( name = "sighandler_go_arch", src = ":sighandler_go", template = "sighandler_%s.go", ) go_library( name = "sysmsg", srcs = [ "sysmsg.go", "sysmsg_amd64.go", "sysmsg_arm64.go", "sysmsg_unsafe.go", ":sighandler_go_arch", ], embedsrcs = [ ":sighandler_binary_arch", # keep ], visibility = ["//:sandbox"], deps = [ "//pkg/abi/linux", "//pkg/cpuid", "//pkg/hostarch", "//pkg/hostsyscall", "//pkg/sentry/platform", "@org_golang_x_sys//unix:go_default_library", ], )