mirror of
https://github.com/xen-project/xen.git
synced 2026-10-28 10:11:27 +01:00
x86: Use control flow typechecking where possible
Now all indirect branch targets have been annotated, turn on typechecking to catch issues in the future. This extension isn't in a released version of GCC yet, so provide a container to use with the extension included, and add it to CI. RANDCONFIG is necessary because some stubs for compiled-out subsystems are used as function pointer targets. Signed-off-by: Andrew Cooper <andrew.cooper3@citrix.com> Acked-by: Jan Beulich <jbeulich@suse.com>
This commit is contained in:
1 parent
640ce8af9c
commit
5d59421815
4 files changed
+74
No files matched your search
@@ -0,0 +1,66 @@
|
||||
FROM debian:buster-slim AS builder
|
||||
|
||||
ENV DEBIAN_FRONTEND=noninteractive
|
||||
ENV USER root
|
||||
|
||||
RUN apt-get update && \
|
||||
apt-get --quiet --yes install \
|
||||
bison \
|
||||
build-essential \
|
||||
flex \
|
||||
libc6-dev-i386 \
|
||||
libgmp-dev \
|
||||
libisl-dev \
|
||||
libmpc-dev \
|
||||
libmpfr-dev \
|
||||
patch \
|
||||
wget
|
||||
|
||||
RUN mkdir /build
|
||||
WORKDIR /build
|
||||
|
||||
RUN wget -q https://ftp.gnu.org/gnu/gcc/gcc-11.2.0/gcc-11.2.0.tar.xz -O - | tar xJ --strip=1
|
||||
RUN wget -q https://xenbits.xen.org/people/andrewcoop/gcc-11.2-Add-fcf-check-attribute-yes-no.patch -O - | patch -p1
|
||||
RUN ./configure \
|
||||
--prefix=/opt/gcc-11-ibt \
|
||||
--enable-languages=c \
|
||||
--disable-nls \
|
||||
--disable-threads \
|
||||
--disable-bootstrap \
|
||||
--disable-shared \
|
||||
--disable-libmudflap \
|
||||
--disable-libssp \
|
||||
--disable-libgomp \
|
||||
--disable-decimal-float \
|
||||
--disable-libquadmath \
|
||||
--disable-libatomic \
|
||||
--disable-libcc1 \
|
||||
--disable-libmpx
|
||||
RUN make -j`nproc` && make -j`nproc` install
|
||||
|
||||
|
||||
FROM debian:buster-slim
|
||||
COPY --from=builder /opt/gcc-11-ibt /opt/gcc-11-ibt
|
||||
|
||||
LABEL maintainer.name="The Xen Project" \
|
||||
maintainer.email="xen-devel@lists.xenproject.org"
|
||||
|
||||
ENV DEBIAN_FRONTEND=noninteractive
|
||||
ENV USER root
|
||||
ENV PATH="/opt/gcc-11-ibt/bin:${PATH}"
|
||||
|
||||
RUN mkdir /build
|
||||
WORKDIR /build
|
||||
|
||||
RUN apt-get update && \
|
||||
apt-get --quiet --yes install \
|
||||
bison \
|
||||
checkpolicy \
|
||||
flex \
|
||||
gawk \
|
||||
make \
|
||||
python3 \
|
||||
&& \
|
||||
apt-get autoremove -y && \
|
||||
apt-get clean && \
|
||||
rm -rf /var/lib/apt/lists* /tmp/* /var/tmp/*
|
||||
@@ -294,6 +294,12 @@ debian-stretch-32-gcc-debug:
|
||||
variables:
|
||||
CONTAINER: debian:stretch-i386
|
||||
|
||||
debian-buster-gcc-ibt:
|
||||
extends: .gcc-x86-64-build
|
||||
variables:
|
||||
CONTAINER: debian:buster-gcc-ibt
|
||||
RANDCONFIG: y
|
||||
|
||||
debian-unstable-clang:
|
||||
extends: .clang-x86-64-build
|
||||
variables:
|
||||
|
||||
@@ -33,6 +33,7 @@ case "_${CONTAINER}" in
|
||||
_focal) CONTAINER="${BASE}/ubuntu:focal" ;;
|
||||
_jessie) CONTAINER="${BASE}/debian:jessie" ;;
|
||||
_stretch|_) CONTAINER="${BASE}/debian:stretch" ;;
|
||||
_buster-gcc-ibt) CONTAINER="${BASE}/debian:buster-gcc-ibt" ;;
|
||||
_unstable|_) CONTAINER="${BASE}/debian:unstable" ;;
|
||||
_trusty) CONTAINER="${BASE}/ubuntu:trusty" ;;
|
||||
_xenial) CONTAINER="${BASE}/ubuntu:xenial" ;;
|
||||
|
||||
@@ -54,6 +54,7 @@ endif
|
||||
|
||||
ifdef CONFIG_XEN_IBT
|
||||
CFLAGS += -fcf-protection=branch -mmanual-endbr
|
||||
$(call cc-option-add,CFLAGS,CC,-fcf-check-attribute=no)
|
||||
else
|
||||
$(call cc-option-add,CFLAGS,CC,-fcf-protection=none)
|
||||
endif
|
||||
|
||||