[Bug backends/27925] riscv backend only provides return value locations for code compiled for LP64D ABI

wcohen at redhat dot com sourceware-bugzilla@sourceware.org
Sun Sep 19 23:22:02 GMT 2021


https://sourceware.org/bugzilla/show_bug.cgi?id=27925

--- Comment #4 from William Cohen <wcohen at redhat dot com> ---
The patch was a first attempt to get something that addresses the issue. 
Thanks for pointing out where it needs improvements.

Don't have a good way to test the issue in user-space so far as the 64-bit
risc-v gcc environment seems the expect to have have floating point support. 
One way to test might to use perf to set up a probe point
(https://www.brendangregg.com/perf.html), but I don't know if perf is using
elfutils to get the return value location. Based on the pfault.stp example
would have something like:

sudo perf probe handle_mm_fault%return $retval
sudo perf record -e probe:handle_mm_fault__return -aR sleep 1
sudo perf report
sudo perf probe --del="handle_mm_fault__return"


This issue occurs when using systemtap on the RISC-V linux kernel which doesn't
link against the normal glibc runtime and takes steps to ensure that the
floating point hardware is not used.  Below is a example gcc commandline from a
native build (note the -mabi=lp64 -march=rv64imac options):

  gcc -Wp,-MMD,arch/riscv/kernel/probes/.kprobes.o.d -nostdinc -isystem
/usr/lib/gcc/riscv64-redhat-linux/10/include -I./arch/riscv/include
-I./arch/riscv/include/generated  -I./include -I./arch/riscv/include/uapi
-I./arch/riscv/include/generated/uapi -I./include/uapi
-I./include/generated/uapi -include ./include/linux/compiler-version.h -include
./include/linux/kconfig.h -include ./include/linux/compiler_types.h
-D__KERNEL__ -DCC_USING_PATCHABLE_FUNCTION_ENTRY -fmacro-prefix-map=./= -Wall
-Wundef -Werror=strict-prototypes -Wno-trigraphs -fno-strict-aliasing
-fno-common -fshort-wchar -fno-PIE -Werror=implicit-function-declaration
-Werror=implicit-int -Werror=return-type -Wno-format-security -std=gnu89
-mabi=lp64 -march=rv64imac -mno-save-restore
-DCONFIG_PAGE_OFFSET=0xffffffe000000000 -mcmodel=medany -fno-omit-frame-pointer
-mstrict-align -fno-delete-null-pointer-checks -Wno-frame-address
-Wno-format-truncation -Wno-format-overflow -Wno-address-of-packed-member -O2
-fno-allow-store-data-races -Wframe-larger-than=2048 -fno-stack-protector
-Wimplicit-fallthrough=5 -Wno-unused-but-set-variable
-Wno-unused-const-variable -fno-omit-frame-pointer -fno-optimize-sibling-calls
-fno-stack-clash-protection -g -fpatchable-function-entry=8
-Wdeclaration-after-statement -Wvla -Wno-pointer-sign -Wno-stringop-truncation
-Wno-zero-length-bounds -Wno-array-bounds -Wno-stringop-overflow -Wno-restrict
-Wno-maybe-uninitialized -fno-strict-overflow -fno-stack-check -fconserve-stack
-Werror=date-time -Werror=incompatible-pointer-types -Werror=designated-init
-Wno-packed-not-aligned   
-DKBUILD_MODFILE='"arch/riscv/kernel/probes/kprobes"'
-DKBUILD_BASENAME='"kprobes"' -DKBUILD_MODNAME='"kprobes"'
-D__KBUILD_MODNAME=kmod_kprobes -c -o arch/riscv/kernel/probes/kprobes.o
arch/riscv/kernel/probes/kprobes.c

-- 
You are receiving this mail because:
You are on the CC list for the bug.


More information about the Elfutils-devel mailing list