nuttx/include
Ville Juven 996625ec58 riscv/arch_elf.c: Handle PCREL_HI20/LO12_I/S relocations correctly
There is a problem with the current elf loader for risc-v: when a pair of
PCREL_HI20 / LO12 relocations are encountered, it is assumed that these
will follow each other immediately, as follows:

label:
	auipc      a0, %pcrel_hi(symbol)    // R_RISCV_PCREL_HI20
	load/store a0, %pcrel_lo(label)(a0) // R_RISCV_PCREL_LO12_I/S

With this assumption, the hi/lo relocations are both done when a hi20
relocation entry is encountered, first to the current instruction (addr)
and to the next instruction (addr + 4).

However, this assumption is wrong. There is nothing in the elf relocation
specification[1] that mandates this. Thus, the hi/lo relocation always
needs to first fixup the hi-part, and when the lo-part is encountered, it
needs to find the corresponding hi relocation entry, via the given "label".
This necessitates (re-)visiting the relocation entries for the current
section as well as looking for "label" in the symbol table.

The NuttX elf loader does not allow such operations to be done in the
machine specific part, so this patch fixes the relocation issue by
introducing an architecture specific cache for the hi20 relocation and
symbol table entries. When a lo12 relocation is encountered, the cache
can be consulted to find the hi20 part.

[1] https://github.com/riscv-non-isa/riscv-elf-psabi-doc/blob/master/riscv-elf.adoc
2023-12-12 17:32:36 -08:00
..
android libc/misc: add fdsan module 2023-05-17 10:24:42 +08:00
arpa
crypto crypto/rsa_verify: export rsa verify via /dev/crypto 2023-10-18 12:23:13 +08:00
cxx libc: Implement quick_exit and at_quick_exit 2023-01-25 14:31:37 +02:00
net ioctl: add definitions related to ethtool 2023-11-03 22:37:50 +08:00
netinet Remove @ and % tag from all comments 2023-12-11 17:00:10 -03:00
netpacket Remove @ and % tag from all comments 2023-12-11 17:00:10 -03:00
nuttx riscv/arch_elf.c: Handle PCREL_HI20/LO12_I/S relocations correctly 2023-12-12 17:32:36 -08:00
ssp
sys Remove @ and % tag from all comments 2023-12-11 17:00:10 -03:00
.gitignore libs/libc/gpsutils/minmea: move minmea library from apps/gpsutils 2023-08-01 23:09:46 -07:00
aio.h aio: change aio_fildes int type 2023-09-08 00:59:31 +03:00
alloca.h libs/alloca: add alloca implement for MSVC 2023-08-28 11:10:08 -03:00
assert.h assert: rename __ASSERT to __ASSERT__ to avoid conflict 2023-10-26 16:21:02 +08:00
byteswap.h
ctype.h libs/ctype/toupper_l: Implement function toupper_l instead of macro 2023-08-22 00:07:16 +08:00
debug.h Add a stepper generic upperhalf driver 2023-10-14 12:28:41 -04:00
dirent.h fs: Undefine CONFIG_FS_LARGEFILE if compiler doesn't support long long 2023-03-02 09:37:58 +01:00
dlfcn.h
dsp.h libdsp: update LP_FILTER comment 2023-10-19 21:38:45 +08:00
dspb16.h libdsp: update LP_FILTER comment 2023-10-19 21:38:45 +08:00
elf32.h Fix and improve dynamic loader 2023-07-13 10:11:58 +08:00
elf64.h Fix loading of ET_DYN type of shared objects 2023-09-20 09:35:28 -04:00
elf.h arch/arm64: support relocate for aarch64 2023-10-30 18:20:22 +08:00
endian.h libc: Add sys/endian.h to improve the compatiblity with bionic libc 2023-01-15 12:26:15 -03:00
err.h include/err: Enforce c linkage for err and warn functions. 2023-05-01 12:48:55 +08:00
errno.h Fix nuttx coding style 2023-07-11 23:32:17 +08:00
execinfo.h sched_backtrace: define sched_dumpstack when not enable SCHED_BACKTRACE 2023-07-31 05:46:37 -07:00
fcntl.h include/fcntl.h: add O_NOATIME flags 2023-07-28 20:56:22 -07:00
fixedmath.h fixedmath: add abs and sign operations 2023-10-07 21:25:56 +08:00
fnmatch.h
ftw.h fs: Undefine CONFIG_FS_LARGEFILE if compiler doesn't support long long 2023-03-02 09:37:58 +01:00
getopt.h
glob.h
grp.h
hex2bin.h libs/libc/hex2bin: enhance 64-bit compatibility 2023-08-11 19:43:37 +08:00
iconv.h libc/locale: support iconv_open,iconv,iconv_close 2023-04-25 19:12:53 +01:00
ifaddrs.h ifaddrs: add union ifa_ifu include ifu_broadaddr and ifu_dstaddr 2023-07-08 15:42:11 +08:00
inttypes.h fs: Undefine CONFIG_FS_LARGEFILE if compiler doesn't support long long 2023-03-02 09:37:58 +01:00
iso646.h
langinfo.h The character U+ff0c "," could be confused with the ASCII character U+002c ",", which is more common in source code. 2023-10-03 16:53:12 -04:00
libgen.h
libintl.h
limits.h clock: replace all up_perf_xx with perf_xx 2023-10-02 16:11:43 +02:00
locale.h
lzf.h Indent the define statement by two spaces 2023-05-21 09:52:08 -03:00
malloc.h mm: record the maximum system memory usage 2023-11-09 09:08:49 +08:00
mqueue.h fs/mqueue: Fix the wrong field type in mq_attr as the spec and add the logical judgment to deal with the condition when mq_maxmsg or mq_msgsize is less than zero or equal to zero. 2023-08-03 03:10:56 -07:00
netdb.h
nl_types.h
nxflat.h
obstack.h
poll.h
pthread.h pthread_once: g_lock may lead deadlock 2023-09-26 10:13:00 +08:00
pty.h drivers/serial: Always support c_oflag, c_iflag and c_lflag in termios 2023-03-19 14:54:59 -06:00
pwd.h pwd: Add initial implementation of getpwent 2023-07-31 07:50:10 -07:00
regex.h include/regex.h: add missing FAR 2023-05-19 02:40:38 +08:00
resolv.h
sched.h sched: Define sched_getcpu return 0 when CONFIG_SMP equals n 2023-08-06 11:28:49 +02:00
semaphore.h semaphore: Optimize priority inheritance with only one holder 2023-06-17 08:26:46 +03:00
signal.h sigaction: Expand si_user for non-kernel signals 2023-11-22 08:00:43 -08:00
spawn.h libs/libc/spawn: Add minimal implementation for posix_spawnattr_destory. 2023-10-31 13:42:00 +08:00
stdbool.h
stddef.h
stdint.h Fix nuttx coding style 2023-07-11 23:32:17 +08:00
stdio.h libc: add support for open_memstream 2023-11-29 02:13:19 -08:00
stdlib.h libc/rand_r: support rand_r api 2023-07-29 07:28:23 -07:00
stdnoreturn.h
string.h Support gcc FORTIFY_SOURCE features for nuttx libc 2023-06-22 20:38:45 +08:00
strings.h Revert "libc/lib_bzero:Add bzero prototype." 2023-11-21 07:56:52 -08:00
syscall.h
syslog.h syslog: add syslog option definition 2023-05-05 18:36:36 +08:00
termios.h
threads.h sched/getpid: replace syscall getpid/tid/ppid() to kernel version 2023-02-02 10:33:01 +08:00
time.h include: move clockid_t and time[r]_t define to sys/types.h 2023-08-19 09:08:40 +03:00
unistd.h fs/dup3: impletement dup3/nx_dup3_from_tcb function 2023-10-27 21:15:07 +08:00
utime.h
uuid.h
wchar.h stdio: Implement [clearerr|putc|fflush]_unlocked 2023-10-29 17:09:18 +02:00
wctype.h