https://gcc.gnu.org/bugzilla/show_bug.cgi?id=96828
Bug ID: 96828 Summary: Wrong code generated with -fstack-protector and -msingle-pic-base Product: gcc Version: 10.1.1 Status: UNCONFIRMED Severity: normal Priority: P3 Component: target Assignee: unassigned at gcc dot gnu.org Reporter: abatur45 at gmail dot com Target Milestone: --- Created attachment 49143 --> https://gcc.gnu.org/bugzilla/attachment.cgi?id=49143&action=edit test case $ arm-none-eabi-gcc -v Using built-in specs. COLLECT_GCC=./gcc/gcc-arm-none-eabi-10-2020-q2-preview/bin/arm-none-eabi-gcc COLLECT_LTO_WRAPPER=/mnt/c/Users/Ilya/Desktop/bug/gcc/gcc-arm-none-eabi-10-2020-q2-preview/bin/../lib/gcc/arm-none-eabi/10.1.1/lto-wrapper Target: arm-none-eabi Configured with: /mnt/workspace/workspace/GCC-10-pipeline/jenkins-GCC-10-pipeline-13_20200625_1593044217/src/gcc/configure --target=arm-none-eabi --prefix=/mnt/workspace/workspace/GCC-10-pipeline/jenkins-GCC-10-pipeline-13_20200625_1593044217/install-native --libexecdir=/mnt/workspace/workspace/GCC-10-pipeline/jenkins-GCC-10-pipeline-13_20200625_1593044217/install-native/lib --infodir=/mnt/workspace/workspace/GCC-10-pipeline/jenkins-GCC-10-pipeline-13_20200625_1593044217/install-native/share/doc/gcc-arm-none-eabi/info --mandir=/mnt/workspace/workspace/GCC-10-pipeline/jenkins-GCC-10-pipeline-13_20200625_1593044217/install-native/share/doc/gcc-arm-none-eabi/man --htmldir=/mnt/workspace/workspace/GCC-10-pipeline/jenkins-GCC-10-pipeline-13_20200625_1593044217/install-native/share/doc/gcc-arm-none-eabi/html --pdfdir=/mnt/workspace/workspace/GCC-10-pipeline/jenkins-GCC-10-pipeline-13_20200625_1593044217/install-native/share/doc/gcc-arm-none-eabi/pdf --enable-languages=c,c++ --enable-plugins --disable-decimal-float --disable-libffi --disable-libgomp --disable-libmudflap --disable-libquadmath --disable-libssp --disable-libstdcxx-pch --disable-nls --disable-shared --disable-threads --disable-tls --with-gnu-as --with-gnu-ld --with-newlib --with-headers=yes --with-python-dir=share/gcc-arm-none-eabi --with-sysroot=/mnt/workspace/workspace/GCC-10-pipeline/jenkins-GCC-10-pipeline-13_20200625_1593044217/install-native/arm-none-eabi --build=x86_64-linux-gnu --host=x86_64-linux-gnu --with-gmp=/mnt/workspace/workspace/GCC-10-pipeline/jenkins-GCC-10-pipeline-13_20200625_1593044217/build-native/host-libs/usr --with-mpfr=/mnt/workspace/workspace/GCC-10-pipeline/jenkins-GCC-10-pipeline-13_20200625_1593044217/build-native/host-libs/usr --with-mpc=/mnt/workspace/workspace/GCC-10-pipeline/jenkins-GCC-10-pipeline-13_20200625_1593044217/build-native/host-libs/usr --with-isl=/mnt/workspace/workspace/GCC-10-pipeline/jenkins-GCC-10-pipeline-13_20200625_1593044217/build-native/host-libs/usr --with-libelf=/mnt/workspace/workspace/GCC-10-pipeline/jenkins-GCC-10-pipeline-13_20200625_1593044217/build-native/host-libs/usr --with-host-libstdcxx='-static-libgcc -Wl,-Bstatic,-lstdc++,-Bdynamic -lm' --with-pkgversion='GNU Arm Embedded Toolchain 10-2020-q2-preview' --with-multilib-list=rmprofile,aprofile Thread model: single Supported LTO compression algorithms: zlib gcc version 10.1.1 20200529 (release) (GNU Arm Embedded Toolchain 10-2020-q2-preview) Compilation of the test case with options "arm-none-eabi-gcc -c bug.c -fstack-protector -fpie -mno-pic-data-is-text-relative -msingle-pic-base", uses wrong register for GOT access when storing and loading stack canary (variable access included to demonstrate correct behavior): push {fp, lr} add fp, sp, #4 sub sp, sp, #8 ldr r3, .L4 @ r2 is used instead of r9 ldr r3, [r2, r3] ldr r3, [r3] str r3, [fp, #-8] mov r3, #0 ldr r3, .L4+4 @ correct behavior, r9 is used as base ldr r3, [r9, r3] ldr r3, [r3] ldr r2, .L4 @ r1 is used instead of r9 ldr r2, [r1, r2] ldr r1, [r2] ldr r2, [fp, #-8] eors r1, r2, r1 beq .L3 bl __stack_chk_fail(PLT) .L3: mov r0, r3 sub sp, fp, #4 pop {fp, lr} bx lr