[PATCH 0/2] riscv: add support for GNU indirect function
Vincent Chen
vincent.chen@sifive.com
Tue Dec 1 10:22:58 GMT 2020
The riscv Binutils supported GNU indirect function in the commit
02dd9d25. In order to make the whole mechanism work properly, the
first patch adds the required ports to enable Glibc to address the
riscv IRELATIVE relocation.
In addition, since the dynamic linker resolves the IRELATIVE relocation
before jumping into the executable program, the $gp register has not
been initialized when the IFUNC resolver function is executed. It cause
that some unexpected error may occur when the dynamic loader resolves the
IREALTIVE relocation of the position-dependent executable program. To
solve this problem, a new RISCV specific dynamic entry, DT_RISCV_GP,
created by Binutils is used to record the gp address. The dynamic
linker can use it to initialize $gp register before resolving the
IREALTIVE relocation of the PDE program.
The related patch of DT_RISCV_GP in Binutils could be found in
https://sourceware.org/pipermail/binutils/2020-December/114346.html
Vincent Chen (2):
riscv: Add support for GNU indirect function
riscv: Initialize $gp before resolving the IRELATIVE relocation
elf/elf.h | 4 +++
libc-abis | 1 +
sysdeps/riscv/dl-dtprocnum.h | 22 +++++++++++++++
sysdeps/riscv/dl-irel.h | 53 ++++++++++++++++++++++++++++++++++++
sysdeps/riscv/dl-machine.h | 31 +++++++++++++++++++++
5 files changed, 111 insertions(+)
create mode 100644 sysdeps/riscv/dl-dtprocnum.h
create mode 100644 sysdeps/riscv/dl-irel.h
--
2.29.2
More information about the Libc-alpha
mailing list