From 7740718f914f18e5a895b1ce8131e765b28f194d Mon Sep 17 00:00:00 2001 From: sk4nz Date: Thu, 7 Apr 2022 11:45:36 +0200 Subject: [PATCH] Refactor PROGS dependencies names and enable a target-specific CFLAG (no function inlining) for programs compiled with GCC. --- Makefile | 92 ++++++++++++++++++++++++++------------------------------ 1 file changed, 42 insertions(+), 50 deletions(-) diff --git a/Makefile b/Makefile index 76ed061..7b1b929 100644 --- a/Makefile +++ b/Makefile @@ -16,6 +16,7 @@ .PHONY: clean build upload findfalses .SILENT: +MAKEFLAGS:= -j4 ifeq ($(shell uname),OpenBSD) GCC:= DEPS:= clang ./uuid @@ -35,15 +36,18 @@ endif ### Generic flags SRCS= spectre_v1 spectre_v2 -CFLAGS+= -march=native -g +CFLAGS+= -march=native CFLAGS+= -W CFLAGS+= -Wall CFLAGS+= -Werror -Wextra CFLAGS+= -Wno-unused-parameter CFLAGS+= -Wno-missing-field-initializers -# Fixes segfaults on clang's O2 O3 and gcc's O1 O2 -CFLAGS+= -fno-inline-functions +# Multiples optimization levels break when inlining victim_function for spectre v2 +CFLAGS+= -fno-inline-functions + +# Debug symbols +#CFLAGS+= -g ### Octopus flags CCS= clang $(GCC) @@ -51,7 +55,7 @@ OPTIMIZATIONS= 0 1 2 3 fast s UUID:= $(shell uuid 2> /dev/null || uuidgen 2> /dev/null || ./uuid) RESULTS_FILE:= results-$(UUID).json SSH_KEY= octoupload -TIMES= 3 +TIMES= 1 OCTOFLAGS= -j ifeq ($(shell uname),OpenBSD) @@ -87,50 +91,46 @@ SUB_FOUR= $(word 4, $(subst -, ,$@)) CPROGS= $(foreach C, $(CCS), $(addsuffix -$(C), $(SRCS))) ### Optimizations -OPROGS= $(foreach O, $(OPTIMIZATIONS), $(addsuffix -O$(O), $(CPROGS))) +OPTIMIZED_PROGRAMS= $(foreach O, $(OPTIMIZATIONS), $(addsuffix -O$(O), $(CPROGS))) ### Static -SPROGS= $(addsuffix -static, $(foreach O, $(OPTIMIZATIONS), $(addsuffix -O$(O), $(CPROGS)))) +STATIC_PROGRAMS= $(addsuffix -static, $(foreach O, $(OPTIMIZATIONS), $(addsuffix -O$(O), $(CPROGS)))) ##### V1 ### Masking mitigation -MPROGS= $(addsuffix -mask, $(filter spectre_v1%, $(OPROGS))) -MSPROGS= $(addsuffix -mask, $(filter spectre_v1%, $(SPROGS))) +MASKING_PROGRAMS= $(addsuffix -mask, $(filter spectre_v1%, $(OPTIMIZED_PROGRAMS))) +MASKING_STATIC_PROGRAMS= $(addsuffix -mask, $(filter spectre_v1%, $(STATIC_PROGRAMS))) ### Lfence mitigation -LPROGS= $(addsuffix -fence, $(filter spectre_v1%, $(OPROGS))) -LSPROGS= $(addsuffix -fence, $(filter spectre_v1%, $(SPROGS))) +LFENCE_PROGRAMS= $(addsuffix -fence, $(filter spectre_v1%, $(OPTIMIZED_PROGRAMS))) +LFENCE_STATIC_PROGRAMS= $(addsuffix -fence, $(filter spectre_v1%, $(STATIC_PROGRAMS))) -### Masking + Lfence mitigations -#MLPROGS= $(addsuffix -maskfence, $(filter spectre_v1%, $(OPROGS))) -#MLSPROGS= $(addsuffix -maskfence, $(filter spectre_v1%, $(SPROGS))) - -###### V2 +###### V2 ### Retpoline ## clang # dynamic -RCPROGS= $(addsuffix -retpoline, $(filter spectre_v2-clang%, $(OPROGS))) +RETPOLINE_CLANG_PROGRAMS= $(addsuffix -retpoline, $(filter spectre_v2-clang%, $(OPTIMIZED_PROGRAMS))) # static -RSCPROGS= $(addsuffix -retpoline, $(filter spectre_v2-clang%, $(SPROGS))) +RETPOLINE_STATIC_CLANG_PROGRAMS= $(addsuffix -retpoline, $(filter spectre_v2-clang%, $(STATIC_PROGRAMS))) ## gcc # dynamic -RGPROGS= $(addsuffix -retpoline, $(filter spectre_v2-gcc%, $(OPROGS))) +RETPOLINE_GCC_PROGRAMS= $(addsuffix -retpoline, $(filter spectre_v2-gcc%, $(OPTIMIZED_PROGRAMS))) # static -RSGPROGS= $(addsuffix -retpoline, $(filter spectre_v2-gcc%, $(SPROGS))) +RETPOLINE_STATIC_GCC_PROGRAMS= $(addsuffix -retpoline, $(filter spectre_v2-gcc%, $(STATIC_PROGRAMS))) -PROGS= $(OPROGS) -PROGS+= $(SPROGS) -PROGS+= $(MPROGS) -PROGS+= $(MSPROGS) -PROGS+= $(LPROGS) -PROGS+= $(LSPROGS) -#PROGS+= $(MLPROGS) -#PROGS+= $(MLSPROGS) -PROGS+= $(RCPROGS) -PROGS+= $(RSCPROGS) -PROGS+= $(RGROGS) -PROGS+= $(RSGPROGS) +# Add GCC's specific flag +V2_GCC_PROGRAMS= $(filter spectre_v2-gcc%, $(STATIC_PROGRAMS)) $(filter spectre_v2-gcc%, $(OPTIMIZED_PROGRAMS)) $(RETPOLINE_GCC_PROGRAMS) $(RETPOLINE_STATIC_GCC_PROGRAMS) +$(V2_GCC_PROGRAMS): CFLAGS+=-fno-inline-small-functions +PROGS= $(OPTIMIZED_PROGRAMS) +PROGS+= $(STATIC_PROGRAMS) +PROGS+= $(MASKING_PROGRAMS) +PROGS+= $(MASKING_STATIC_PROGRAMS) +PROGS+= $(LFENCE_PROGRAMS) +PROGS+= $(LFENCE_STATIC_PROGRAMS) +PROGS+= $(RETPOLINE_CLANG_PROGRAMS) +PROGS+= $(RETPOLINE_STATIC_CLANG_PROGRAMS) +PROGS+= $(V2_GCC_PROGRAMS) all: upload printf "\033[1mThank you for helping science today !\033[0m\n" @@ -185,52 +185,44 @@ $(RESULTS_FILE): build done printf "\n]}}\n" >> $@ -$(OPROGS): +$(OPTIMIZED_PROGRAMS): @$(PROGRESS) $(SUB_TWO) $(CFLAGS) $(LDFLAGS) -$(SUB_THREE) -o $@ $(SUB_ONE).c $(SUB_TWO) $(CFLAGS) $(LDFLAGS) -$(SUB_THREE) -o $@ $(SUB_ONE).c -$(SPROGS): +$(STATIC_PROGRAMS): @$(PROGRESS) $(SUB_TWO) $(addprefix -, $(SUB_FOUR)) $(CFLAGS) -$(SUB_THREE) -o $@ $(SUB_ONE).c $(SUB_TWO) $(addprefix -, $(SUB_FOUR)) $(CFLAGS) -$(SUB_THREE) -o $@ $(SUB_ONE).c - -$(MPROGS): +$(MASKING_PROGRAMS): @$(PROGRESS) $(SUB_TWO) $(CFLAGS) -DMASKING_MITIGATION $(LDFLAGS) -$(SUB_THREE) -o $@ $(SUB_ONE).c $(SUB_TWO) $(CFLAGS) -DMASKING_MITIGATION $(LDFLAGS) -$(SUB_THREE) -o $@ $(SUB_ONE).c -$(MSPROGS): +$(MASKING_STATIC_PROGRAMS): @$(PROGRESS) $(SUB_TWO) $(addprefix -, $(SUB_FOUR)) $(CFLAGS) -DMASKING_MITIGATION -$(SUB_THREE) -o $@ $(SUB_ONE).c $(SUB_TWO) $(addprefix -, $(SUB_FOUR)) $(CFLAGS) -DMASKING_MITIGATION -$(SUB_THREE) -o $@ $(SUB_ONE).c -$(LPROGS): +$(LFENCE_PROGRAMS): @$(PROGRESS) $(SUB_TWO) $(CFLAGS) -DLFENCE_MITIGATION $(LDFLAGS) -$(SUB_THREE) -o $@ $(SUB_ONE).c $(SUB_TWO) $(CFLAGS) -DLFENCE_MITIGATION $(LDFLAGS) -$(SUB_THREE) -o $@ $(SUB_ONE).c -$(LSPROGS): +$(LFENCE_STATIC_PROGRAMS): @$(PROGRESS) $(SUB_TWO) $(addprefix -, $(SUB_FOUR)) $(CFLAGS) -DLFENCE_MITIGATION -$(SUB_THREE) -o $@ $(SUB_ONE).c $(SUB_TWO) $(addprefix -, $(SUB_FOUR)) $(CFLAGS) -DLFENCE_MITIGATION -$(SUB_THREE) -o $@ $(SUB_ONE).c -#$(MLPROGS): -# @$(PROGRESS) $(SUB_TWO) $(CFLAGS) -DLFENCE_MITIGATION -DMASKING_MITIGATION $(LDFLAGS) -$(SUB_THREE) -o $@ $(SUB_ONE).c -# $(SUB_TWO) $(CFLAGS) -DLFENCE_MITIGATION -DMASKING_MITIGATION $(LDFLAGS) -$(SUB_THREE) -o $@ $(SUB_ONE).c -# -#$(MLSPROGS): -# @$(PROGRESS) $(SUB_TWO) $(addprefix -, $(SUB_FOUR)) $(CFLAGS) -DLFENCE_MITIGATION -DMASKING_MITIGATION -$(SUB_THREE) -o $@ $(SUB_ONE).c -# $(SUB_TWO) $(addprefix -, $(SUB_FOUR)) $(CFLAGS) -DLFENCE_MITIGATION -DMASKING_MITIGATION -$(SUB_THREE) -o $@ $(SUB_ONE).c - -$(RCPROGS): +$(RETPOLINE_CLANG_PROGRAMS): @$(PROGRESS) $(SUB_TWO) $(CFLAGS) -mretpoline $(LDFLAGS) -z retpolineplt -$(SUB_THREE) -o $@ $(SUB_ONE).c $(SUB_TWO) $(CFLAGS) -mretpoline $(LDFLAGS) -z retpolineplt -$(SUB_THREE) -o $@ $(SUB_ONE).c -$(RSCPROGS): +$(RETPOLINE_STATIC_CLANG_PROGRAMS): @$(PROGRESS) $(SUB_TWO) $(addprefix -, $(SUB_FOUR)) $(CFLAGS) -mretpoline -$(SUB_THREE) -o $@ $(SUB_ONE).c $(SUB_TWO) $(addprefix -, $(SUB_FOUR)) $(CFLAGS) -mretpoline -$(SUB_THREE) -o $@ $(SUB_ONE).c -$(RGPROGS): + +$(RETPOLINE_GCC_PROGRAMS): @$(PROGRESS) $(SUB_TWO) $(CFLAGS) -mfunction-return=thunk -mindirect-branch=thunk -mindirect-branch-register $(LDFLAGS) -z retpolineplt -$(SUB_THREE) -o $@ $(SUB_ONE).c $(SUB_TWO) $(CFLAGS) -mfunction-return=thunk -mindirect-branch=thunk -mindirect-branch-register $(LDFLAGS) -z retpolineplt -$(SUB_THREE) -o $@ $(SUB_ONE).c -$(RSGPROGS): +$(RETPOLINE_STATIC_GCC_PROGRAMS): @$(PROGRESS) $(SUB_TWO) $(addprefix -, $(SUB_FOUR)) $(CFLAGS) -mfunction-return=thunk -mindirect-branch=thunk -mindirect-branch-register -$(SUB_THREE) -o $@ $(SUB_ONE).c $(SUB_TWO) $(addprefix -, $(SUB_FOUR)) $(CFLAGS) -mfunction-return=thunk -mindirect-branch=thunk -mindirect-branch-register -$(SUB_THREE) -o $@ $(SUB_ONE).c