diff options
author | Nelson Chu <nelson@rivosinc.com> | 2025-03-13 10:31:35 +0800 |
---|---|---|
committer | Nelson Chu <nelson@rivosinc.com> | 2025-03-18 12:15:11 +0800 |
commit | 433ccc440b51673ed3fce85a8dedca24f16ccab2 (patch) | |
tree | 119a85a613c8eb377472acbc39d86251553dfe14 /bfd | |
parent | 921d65b3f0751b714f9859496946e9560001b18f (diff) | |
download | binutils-433ccc440b51673ed3fce85a8dedca24f16ccab2.zip binutils-433ccc440b51673ed3fce85a8dedca24f16ccab2.tar.gz binutils-433ccc440b51673ed3fce85a8dedca24f16ccab2.tar.bz2 |
RISC-V: Free the returned string of riscv_arch_str if we call it multiple times
The string returned from riscv_arch_str is allocated by xmalloc, so once we
called it multiple times, we should keep the newest one for the output elf
architecture attribute, but free the remaining unused strings.
Diffstat (limited to 'bfd')
-rw-r--r-- | bfd/elfnn-riscv.c | 5 |
1 files changed, 4 insertions, 1 deletions
diff --git a/bfd/elfnn-riscv.c b/bfd/elfnn-riscv.c index 06e9940..873e268 100644 --- a/bfd/elfnn-riscv.c +++ b/bfd/elfnn-riscv.c @@ -3940,7 +3940,7 @@ static char * riscv_merge_arch_attr_info (bfd *ibfd, char *in_arch, char *out_arch) { riscv_subset_t *in, *out; - char *merged_arch_str; + static char *merged_arch_str = NULL; unsigned xlen_in, xlen_out; merged_subsets.head = NULL; @@ -4001,6 +4001,9 @@ riscv_merge_arch_attr_info (bfd *ibfd, char *in_arch, char *out_arch) return NULL; } + /* Free the previous merged_arch_str which called xmalloc. */ + free (merged_arch_str); + merged_arch_str = riscv_arch_str (ARCH_SIZE, &merged_subsets); /* Release the subset lists. */ |