[RFC,1/2] RISC-V: Move TSO check to elf_machine_matches_host()
Checks
Context |
Check |
Description |
redhat-pt-bot/TryBot-apply_patch |
success
|
Patch applied to master at the time it was sent
|
linaro-tcwg-bot/tcwg_glibc_build--master-arm |
success
|
Testing passed
|
linaro-tcwg-bot/tcwg_glibc_build--master-aarch64 |
success
|
Testing passed
|
linaro-tcwg-bot/tcwg_glibc_check--master-arm |
success
|
Testing passed
|
linaro-tcwg-bot/tcwg_glibc_check--master-aarch64 |
success
|
Testing passed
|
Commit Message
From: Christoph Müllner <christoph.muellner@vrull.eu>
The current implementation does not support ELF files which have the
EF_RISCV_TSO ELF flag set. This is implemented in process_elf64_file(),
with the assumption that no TSO-capable hosts exists.
In order to weaken this restriction, let's move the TSO flag check
into elf_machine_matches_host(), where compatibility with the host
can be checked.
This patch serves as a preparation for further changes and does
not intend to implement any functional changes.
Signed-off-by: Christoph Müllner <christoph.muellner@vrull.eu>
---
sysdeps/riscv/dl-machine.h | 4 ++++
sysdeps/unix/sysv/linux/riscv/readelflib.c | 5 ++---
2 files changed, 6 insertions(+), 3 deletions(-)
@@ -72,6 +72,10 @@ elf_machine_matches_host (const ElfW(Ehdr) *ehdr)
return 0;
#endif
+ /* Execution of TSO binaries is not supported at this time. */
+ if (ehdr->e_flags & EF_RISCV_TSO)
+ return 0;
+
return 1;
}
@@ -30,10 +30,9 @@ int process_elf64_file (const char *file_name, const char *lib,
extension, we can still support libraries compiled without that extension
so we just ignore this flag.
- EF_RISCV_RVE: glibc (and Linux) don't support RV32E based systems.
- - EF_RISCV_TSO: The TSO extension isn't supported, as doing so would require
- some mechanism to ensure that the TSO extension is enabled which doesn't
+ - EF_RISCV_TSO: Accepted with restrictions (see elf_machine_matches_host).
currently exist. */
-#define SUPPORTED_ELF_FLAGS (EF_RISCV_FLOAT_ABI | EF_RISCV_RVC)
+#define SUPPORTED_ELF_FLAGS (EF_RISCV_FLOAT_ABI | EF_RISCV_RVC | EF_RISCV_TSO)
/* Returns 0 if everything is ok, != 0 in case of error. */
int