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
.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