I need to use glibc v2.35, with memory tagging support (to be used on aarch64, linux 5.16.10 VM running in QEMU). I am trying to cross-compile glibc from source on my machine which is x86_64. I first made a glibc-2.35-build folder, then run configure :
../glibc-2.35/configure aarch64-linux-gnu --prefix=/home/aditi712/glibc-2.35-usr-local --with-headers=/usr/aarch64-linux-gnu/include --enable-memory-tagging --host=aarch64-linux-gnu --build=x86-64-linux-gnu CC="aarch64-linux-gnu-gcc" CFLAGS="-g -O2"
which runs successfully.
Then, I made a configparams file in the build folder, which contains:
CC="aarch64-linux-gnu-gcc"
BUILD_CC="gcc"
Then I run 'make' in the build folder. I get the following error:
In file included from ../sysdeps/unix/sysv/linux/aarch64/libc-start.c:26:
../sysdeps/unix/sysv/linux/aarch64/cpu-features.c: In function ‘init_cpu_features’:
../sysdeps/unix/sysv/linux/aarch64/cpu-features.c:112:14: error:
‘PR_SET_TAGGED_ADDR_CTRL’ undeclared (first use in this function); did you mean
‘NT_ARM_TAGGED_ADDR_CTRL’?
__prctl (PR_SET_TAGGED_ADDR_CTRL,
^~~~~~~~~~~~~~~~~~~~~~~
NT_ARM_TAGGED_ADDR_CTRL
../sysdeps/unix/sysv/linux/aarch64/cpu-features.c:112:14: note: each undeclared
identifier is reported only once for each function it appears in
../sysdeps/unix/sysv/linux/aarch64/cpu-features.c:113:8: error: ‘PR_TAGGED_ADDR_ENABLE’
undeclared (first use in this function); did you mean ‘PR_GET_DUMPABLE’?
(PR_TAGGED_ADDR_ENABLE | PR_MTE_TCF_SYNC | MTE_ALLOWED_TAGS),
^~~~~~~~~~~~~~~~~~~~~
PR_GET_DUMPABLE
make[2]: *** [/home/aditi712/glibc-2.35-build/sysd-rules:9: /home/aditi712/glibc-2.35-
build/csu/libc-start.o] Error 1
make[1]: *** [Makefile:483: csu/subdir_lib] Error 2
make: *** [Makefile:9: all] Error 2
My linux kernel version is 5.10 (glibc claims to require 5.10). I have also updated binutils to v2.34 [I downloaded the source and installed manually]
uname -a output:
Linux instance-1 5.10.0-0.bpo.9-cloud-amd64 #1 SMP Debian 5.10.70-1~bpo10+1 (2021-10-10) x86_64 GNU/Linux
ld -v output:
GNU ld (GNU Binutils) 2.34
How can I solve the above error?
Update: I was able to get past the above problem by downloading latest aarch64-linux-gnu headers from here, and copying them to /usr/aarch64-linux-gnu/include folder. Now, I am getting the error:
../sysdeps/aarch64/__mtag_tag_zero_region.S: Assembler messages:
../sysdeps/aarch64/__mtag_tag_zero_region.S:32: Error: unknown architecture `armv8.5-a'
../sysdeps/aarch64/__mtag_tag_zero_region.S:33: Error: unknown architectural extension `memtag'
How can I solve this?