Refactor PROGS dependencies names and enable a target-specific CFLAG (no function inlining) for programs compiled with GCC.

This commit is contained in:
sk4nz 2022-04-07 11:45:36 +02:00
parent 5e59829c5d
commit 7740718f91

View File

@ -16,6 +16,7 @@
.PHONY: clean build upload findfalses .PHONY: clean build upload findfalses
.SILENT: .SILENT:
MAKEFLAGS:= -j4
ifeq ($(shell uname),OpenBSD) ifeq ($(shell uname),OpenBSD)
GCC:= GCC:=
DEPS:= clang ./uuid DEPS:= clang ./uuid
@ -35,15 +36,18 @@ endif
### Generic flags ### Generic flags
SRCS= spectre_v1 spectre_v2 SRCS= spectre_v1 spectre_v2
CFLAGS+= -march=native -g CFLAGS+= -march=native
CFLAGS+= -W CFLAGS+= -W
CFLAGS+= -Wall CFLAGS+= -Wall
CFLAGS+= -Werror -Wextra CFLAGS+= -Werror -Wextra
CFLAGS+= -Wno-unused-parameter CFLAGS+= -Wno-unused-parameter
CFLAGS+= -Wno-missing-field-initializers CFLAGS+= -Wno-missing-field-initializers
# Fixes segfaults on clang's O2 O3 and gcc's O1 O2 # Multiples optimization levels break when inlining victim_function for spectre v2
CFLAGS+= -fno-inline-functions CFLAGS+= -fno-inline-functions
# Debug symbols
#CFLAGS+= -g
### Octopus flags ### Octopus flags
CCS= clang $(GCC) 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) UUID:= $(shell uuid 2> /dev/null || uuidgen 2> /dev/null || ./uuid)
RESULTS_FILE:= results-$(UUID).json RESULTS_FILE:= results-$(UUID).json
SSH_KEY= octoupload SSH_KEY= octoupload
TIMES= 3 TIMES= 1
OCTOFLAGS= -j OCTOFLAGS= -j
ifeq ($(shell uname),OpenBSD) ifeq ($(shell uname),OpenBSD)
@ -87,50 +91,46 @@ SUB_FOUR= $(word 4, $(subst -, ,$@))
CPROGS= $(foreach C, $(CCS), $(addsuffix -$(C), $(SRCS))) CPROGS= $(foreach C, $(CCS), $(addsuffix -$(C), $(SRCS)))
### Optimizations ### Optimizations
OPROGS= $(foreach O, $(OPTIMIZATIONS), $(addsuffix -O$(O), $(CPROGS))) OPTIMIZED_PROGRAMS= $(foreach O, $(OPTIMIZATIONS), $(addsuffix -O$(O), $(CPROGS)))
### Static ### Static
SPROGS= $(addsuffix -static, $(foreach O, $(OPTIMIZATIONS), $(addsuffix -O$(O), $(CPROGS)))) STATIC_PROGRAMS= $(addsuffix -static, $(foreach O, $(OPTIMIZATIONS), $(addsuffix -O$(O), $(CPROGS))))
##### V1 ##### V1
### Masking mitigation ### Masking mitigation
MPROGS= $(addsuffix -mask, $(filter spectre_v1%, $(OPROGS))) MASKING_PROGRAMS= $(addsuffix -mask, $(filter spectre_v1%, $(OPTIMIZED_PROGRAMS)))
MSPROGS= $(addsuffix -mask, $(filter spectre_v1%, $(SPROGS))) MASKING_STATIC_PROGRAMS= $(addsuffix -mask, $(filter spectre_v1%, $(STATIC_PROGRAMS)))
### Lfence mitigation ### Lfence mitigation
LPROGS= $(addsuffix -fence, $(filter spectre_v1%, $(OPROGS))) LFENCE_PROGRAMS= $(addsuffix -fence, $(filter spectre_v1%, $(OPTIMIZED_PROGRAMS)))
LSPROGS= $(addsuffix -fence, $(filter spectre_v1%, $(SPROGS))) LFENCE_STATIC_PROGRAMS= $(addsuffix -fence, $(filter spectre_v1%, $(STATIC_PROGRAMS)))
### Masking + Lfence mitigations ###### V2
#MLPROGS= $(addsuffix -maskfence, $(filter spectre_v1%, $(OPROGS)))
#MLSPROGS= $(addsuffix -maskfence, $(filter spectre_v1%, $(SPROGS)))
###### V2
### Retpoline ### Retpoline
## clang ## clang
# dynamic # dynamic
RCPROGS= $(addsuffix -retpoline, $(filter spectre_v2-clang%, $(OPROGS))) RETPOLINE_CLANG_PROGRAMS= $(addsuffix -retpoline, $(filter spectre_v2-clang%, $(OPTIMIZED_PROGRAMS)))
# static # static
RSCPROGS= $(addsuffix -retpoline, $(filter spectre_v2-clang%, $(SPROGS))) RETPOLINE_STATIC_CLANG_PROGRAMS= $(addsuffix -retpoline, $(filter spectre_v2-clang%, $(STATIC_PROGRAMS)))
## gcc ## gcc
# dynamic # dynamic
RGPROGS= $(addsuffix -retpoline, $(filter spectre_v2-gcc%, $(OPROGS))) RETPOLINE_GCC_PROGRAMS= $(addsuffix -retpoline, $(filter spectre_v2-gcc%, $(OPTIMIZED_PROGRAMS)))
# static # static
RSGPROGS= $(addsuffix -retpoline, $(filter spectre_v2-gcc%, $(SPROGS))) RETPOLINE_STATIC_GCC_PROGRAMS= $(addsuffix -retpoline, $(filter spectre_v2-gcc%, $(STATIC_PROGRAMS)))
PROGS= $(OPROGS) # Add GCC's specific flag
PROGS+= $(SPROGS) V2_GCC_PROGRAMS= $(filter spectre_v2-gcc%, $(STATIC_PROGRAMS)) $(filter spectre_v2-gcc%, $(OPTIMIZED_PROGRAMS)) $(RETPOLINE_GCC_PROGRAMS) $(RETPOLINE_STATIC_GCC_PROGRAMS)
PROGS+= $(MPROGS) $(V2_GCC_PROGRAMS): CFLAGS+=-fno-inline-small-functions
PROGS+= $(MSPROGS)
PROGS+= $(LPROGS)
PROGS+= $(LSPROGS)
#PROGS+= $(MLPROGS)
#PROGS+= $(MLSPROGS)
PROGS+= $(RCPROGS)
PROGS+= $(RSCPROGS)
PROGS+= $(RGROGS)
PROGS+= $(RSGPROGS)
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 all: upload
printf "\033[1mThank you for helping science today !\033[0m\n" printf "\033[1mThank you for helping science today !\033[0m\n"
@ -185,52 +185,44 @@ $(RESULTS_FILE): build
done done
printf "\n]}}\n" >> $@ printf "\n]}}\n" >> $@
$(OPROGS): $(OPTIMIZED_PROGRAMS):
@$(PROGRESS) $(SUB_TWO) $(CFLAGS) $(LDFLAGS) -$(SUB_THREE) -o $@ $(SUB_ONE).c @$(PROGRESS) $(SUB_TWO) $(CFLAGS) $(LDFLAGS) -$(SUB_THREE) -o $@ $(SUB_ONE).c
$(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 @$(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 $(SUB_TWO) $(addprefix -, $(SUB_FOUR)) $(CFLAGS) -$(SUB_THREE) -o $@ $(SUB_ONE).c
$(MASKING_PROGRAMS):
$(MPROGS):
@$(PROGRESS) $(SUB_TWO) $(CFLAGS) -DMASKING_MITIGATION $(LDFLAGS) -$(SUB_THREE) -o $@ $(SUB_ONE).c @$(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 $(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 @$(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 $(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 @$(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 $(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 @$(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 $(SUB_TWO) $(addprefix -, $(SUB_FOUR)) $(CFLAGS) -DLFENCE_MITIGATION -$(SUB_THREE) -o $@ $(SUB_ONE).c
#$(MLPROGS): $(RETPOLINE_CLANG_PROGRAMS):
# @$(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):
@$(PROGRESS) $(SUB_TWO) $(CFLAGS) -mretpoline $(LDFLAGS) -z retpolineplt -$(SUB_THREE) -o $@ $(SUB_ONE).c @$(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 $(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 @$(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 $(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 @$(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 $(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 @$(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 $(SUB_TWO) $(addprefix -, $(SUB_FOUR)) $(CFLAGS) -mfunction-return=thunk -mindirect-branch=thunk -mindirect-branch-register -$(SUB_THREE) -o $@ $(SUB_ONE).c