OpenBSD compatibility, except that GCC is not emiting valid SSE asm, so disable it on OpenBSD

This commit is contained in:
sk4nz 2022-03-01 13:11:25 +01:00
parent 2b2ca1baf5
commit c21d271af5
4 changed files with 37 additions and 20 deletions

4
.gitignore vendored
View File

@ -1,2 +1,6 @@
spectre_*-* spectre_*-*
*.json *.json
uuid
uuid_obsd/uuid.d
uuid_obsd/uuid.o
uuid_obsd/uuid

View File

@ -17,10 +17,10 @@
.SILENT: .SILENT:
ifeq ($(shell uname),OpenBSD) ifeq ($(shell uname),OpenBSD)
GCC:= egcc GCC:=
DEPS:= $(GCC) clang ./uuid DEPS:= clang ./uuid
ifndef MKUUID ifndef MKUUID
MKUUID!= $(shell $(MAKE) uuid) MKUUID!= $(shell stat uuid > /dev/null 2>&1 || (make -C uuid_obsd && ln -s uuid_obsd/uuid uuid))
endif endif
else else
GCC:= gcc GCC:= gcc
@ -28,12 +28,14 @@ DEPS:= $(GCC) clang uuid lld
LDFLAGS+= -fuse-ld=lld LDFLAGS+= -fuse-ld=lld
endif endif
ifdef MKUUID
EXECUTABLES= $(DEPS) EXECUTABLES= $(DEPS)
XXXX:= $(foreach exec,$(EXECUTABLES), $(if $(shell which $(exec) 2> /dev/null),X,$(error "No '$(exec)' in PATH, please install it and restart octopus !"))) XXXX:= $(foreach exec,$(EXECUTABLES), $(if $(shell which $(exec) 2> /dev/null),X,$(error "No '$(exec)' in PATH, please install it and restart octopus !")))
endif
### Generic flags ### Generic flags
SRCS= spectre_v1 spectre_v2 SRCS= spectre_v1 spectre_v2
CFLAGS= -march=native CFLAGS+= -march=native
CFLAGS+= -W CFLAGS+= -W
CFLAGS+= -Wall CFLAGS+= -Wall
CFLAGS+= -Werror -Wextra CFLAGS+= -Werror -Wextra
@ -44,20 +46,26 @@ CFLAGS+= -Wno-missing-field-initializers
CCS= clang $(GCC) CCS= clang $(GCC)
OPTIMIZATIONS= 0 1 2 3 fast s OPTIMIZATIONS= 0 1 2 3 fast s
RETPOLINE= mretpoline RETPOLINE= mretpoline
UUID:= $(shell uuid || uuidgen || ./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= 3
OCTOFLAGS= -j OCTOFLAGS= -j
ifeq ($(shell uname),OpenBSD)
COUNTER= $(shell jot $(TIMES) 1)
else
COUNTER= $(shell seq $(TIMES))
endif
### Octopus internals ### Octopus internals
CPU:= $(shell LC_ALL=en_US.UTF-8 lscpu | grep "Model name" | cut -d":" -f 2 | sort | uniq | awk '{$$1=$$1;print}') CPU:= $(shell LC_ALL=en_US.UTF-8 lscpu | grep "Model name" | cut -d":" -f 2 | sort | uniq | awk '{$$1=$$1;print}')
UCODE:= $(shell (grep microcode /proc/cpuinfo || printf unknown) | sort | uniq | awk '{print $$NF}' || printf unknown) UCODE:= $(shell (grep microcode /proc/cpuinfo 2> /dev/null || printf unknown) | sort | uniq | awk '{print $$NF}' || printf unknown)
KERN:= $(shell uname -svm) KERN:= $(shell uname -svm)
CLANGV:= $(shell clang -v 2>&1 | head -n 1) CLANGV:= $(shell clang -v 2>&1 | head -n 1)
GCCV:= $(shell gcc -v 2>&1 | grep 'gcc version') GCCV:= $(shell (gcc -v 2>&1 | grep 'gcc version') || printf unknown)
VULN1:= $(shell (cat /sys/devices/system/cpu/vulnerabilities/spectre_v1 || printf unknown)) VULN1:= $(shell (cat /sys/devices/system/cpu/vulnerabilities/spectre_v1 2> /dev/null || printf unknown))
VULN2:= $(shell (cat /sys/devices/system/cpu/vulnerabilities/spectre_v2 || printf unknown)) VULN2:= $(shell (cat /sys/devices/system/cpu/vulnerabilities/spectre_v2 2> /dev/null || printf unknown))
ifneq ($(shell uname),OpenBSD) ifneq ($(shell uname),OpenBSD)
@ -134,13 +142,13 @@ upload: $(RESULTS_FILE)
build: $(PROGS) build: $(PROGS)
$(RESULTS_FILE): build $(RESULTS_FILE): build
printf "\033[1m\033[94m________ __\n"; printf '\033[1m\033[94m________ __\n'
printf "\_____ \ _____/ |_ ____ ______ __ __ ______\n"; printf '\\_____ \\ _____/ |_ ____ ______ __ __ ______\n'
printf " / | \_/ ___\ __\/ _ \\____ \| | \/ ___/\n"; printf ' / | \\_/ ___\\ __\\/ _ \\\\____ \\| | \\/ ___/\n'
printf "/ | \ \___| | ( <_> ) |_> > | /\___ \ \n"; printf '/ | \\ \\___| | ( <_> ) |_> > | /\\___ \\ \n'
printf "\_______ /\___ >__| \____/| __/|____//____ >\n"; printf '\\_______ /\\___ >__| \\____/| __/|____//____ >\n'
printf " \/ \/ |__| \/\033[0m\n"; printf ' \\/ \\/ |__| \\/\033[0m\n'
printf " Samuel AUBERTIN - EURECOM\n" printf ' Samuel AUBERTIN - EURECOM\n'
printf "\033[4mUUID\033[0m\t\t$(UUID)\n" printf "\033[4mUUID\033[0m\t\t$(UUID)\n"
printf "\033[4mCPU\033[0m\t\t$(CPU)\n" printf "\033[4mCPU\033[0m\t\t$(CPU)\n"
printf "\033[4mMicrocode\033[0m\t$(UCODE)\n" printf "\033[4mMicrocode\033[0m\t$(UCODE)\n"
@ -159,7 +167,7 @@ $(RESULTS_FILE): build
printf "\"spectre_v2\": \"$(VULN2)\",\n" >> $@ printf "\"spectre_v2\": \"$(VULN2)\",\n" >> $@
printf "\"results\": [\n" >> $@ printf "\"results\": [\n" >> $@
for p in $(PROGS); do \ for p in $(PROGS); do \
for t in $$(seq $(TIMES)); do \ for t in $(COUNTER); do \
sleep 0.1; \ sleep 0.1; \
(./$$p $(OCTOFLAGS) || printf "{ \"$$p\": false }")>> $@; \ (./$$p $(OCTOFLAGS) || printf "{ \"$$p\": false }")>> $@; \
if ! [ "$$p" = "$(lastword $(PROGS))" ]; \ if ! [ "$$p" = "$(lastword $(PROGS))" ]; \
@ -220,8 +228,6 @@ $(RSGPROGS):
@$(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
uuid:
$(CC) -o $@ uuid.c
clean: clean:
rm -rf $(PROGS) *.json rm -rf $(PROGS) *.json
make -C uuid_obsd clean

7
uuid_obsd/Makefile Normal file
View File

@ -0,0 +1,7 @@
# $OpenBSD: Makefile,v 1.4 2017/02/19 00:46:57 jca Exp $
PROG= uuid
NOMAN=
.include <bsd.prog.mk>