Hi,

After enabling -fcf-protection=branch for the kernel, we have a new
.plt section in the kernel.  It was not there before.

$ objdump -s .../snapshots/amd64/bsd
...
 ffffffff82048540 c7c13140 0682c9e9 c43646ff           ..1@.....6F.
Contents of section .plt:
 ffffffff82048550 00000000 00000000 00000000 00000000  ................
Contents of section .rodata:
 ffffffff82049000 cccccccc cccccccc cccccccc cccccccc  ................

This is caused by compiling gapdummy.c with -fcf-protection=branch.
Then gapdummy.o gets a new .note.gnu.property section.

$ objdump -s arch/amd64/compile/GENERIC.MP/obj/gapdummy.o

arch/amd64/compile/GENERIC.MP/obj/gapdummy.o:     file format elf64-x86-64

Contents of section .note.gnu.property:
 0000 04000000 10000000 05000000 474e5500  ............GNU.
 0010 020000c0 04000000 01000000 00000000  ................

When creating gap.o from that, the linker adds a .plt section which
finally shows up in the kernel.

Diff below restores old behavior.  I stumbled over this when linking
kernel with sorted and aligned objects for my performance tests.
There it resulted in unexpexted gaps within the kernel image.

I am not sure if we want to fix this.  If not, I can probly add
another workaround for my use case.  But this new .plt does not
make much sense.

ok?

bluhm

Index: sys/arch/amd64/conf/Makefile.amd64
===================================================================
RCS file: /mount/openbsd/cvs/src/sys/arch/amd64/conf/Makefile.amd64,v
retrieving revision 1.131
diff -u -p -r1.131 Makefile.amd64
--- sys/arch/amd64/conf/Makefile.amd64  17 Apr 2023 01:14:24 -0000      1.131
+++ sys/arch/amd64/conf/Makefile.amd64  20 Apr 2023 21:25:05 -0000
@@ -177,7 +177,7 @@ ld.script: ${_machdir}/conf/ld.script
 
 gapdummy.o:
        echo '__asm(".section .rodata,\"a\"");' > gapdummy.c
-       ${CC} -c ${CFLAGS} ${CPPFLAGS} gapdummy.c -o $@
+       ${CC} -c ${CFLAGS} ${CPPFLAGS} -fcf-protection=none gapdummy.c -o $@
 
 makegap.sh:
        cp $S/conf/makegap.sh $@

Reply via email to