aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlan Modra <amodra@gmail.com>2025-01-01 22:49:48 +1030
committerAlan Modra <amodra@gmail.com>2025-01-01 22:49:48 +1030
commitd4faef1077bdd21d3515eb0355bd406652758b3a (patch)
tree79a1712fa53951519e8e906853dde7bd0f1b6fcb
parent3fb6f5457e5b53fdb73a98a24b3764e821e8ccc5 (diff)
downloadgdb-d4faef1077bdd21d3515eb0355bd406652758b3a.zip
gdb-d4faef1077bdd21d3515eb0355bd406652758b3a.tar.gz
gdb-d4faef1077bdd21d3515eb0355bd406652758b3a.tar.bz2
gas reloc_list memory leaks
Put these on the notes obstack too. * config/tc-wasm32.c (wasm32_leb128): Use notes_alloc for reloc_list vars. * read.c (s_reloc): Likewise. * write.c (create_note_reloc): Likewise. (write_object_file): Reset reloc_list after write_relocs.
-rw-r--r--gas/config/tc-wasm32.c4
-rw-r--r--gas/read.c3
-rw-r--r--gas/write.c3
3 files changed, 5 insertions, 5 deletions
diff --git a/gas/config/tc-wasm32.c b/gas/config/tc-wasm32.c
index e7db729..88a2080 100644
--- a/gas/config/tc-wasm32.c
+++ b/gas/config/tc-wasm32.c
@@ -368,7 +368,7 @@ wasm32_leb128 (char **line, int bits, int sign)
return str != str0;
}
- reloc = XNEW (struct reloc_list);
+ reloc = notes_alloc (sizeof (*reloc));
reloc->u.a.offset_sym = expr_build_dot ();
if (ex.X_op == O_symbol)
{
@@ -411,7 +411,7 @@ wasm32_leb128 (char **line, int bits, int sign)
signature = strndup (input_line_pointer + 1, siglength);
- reloc2 = XNEW (struct reloc_list);
+ reloc2 = notes_alloc (sizeof (*reloc2));
reloc2->u.a.offset_sym = expr_build_dot ();
reloc2->u.a.sym = symbol_find_or_make (signature);
reloc2->u.a.addend = 0;
diff --git a/gas/read.c b/gas/read.c
index 94e1254..5be2686 100644
--- a/gas/read.c
+++ b/gas/read.c
@@ -4354,7 +4354,7 @@ s_reloc (int ignore ATTRIBUTE_UNUSED)
{ "64", BFD_RELOC_64 }
};
- reloc = XNEW (struct reloc_list);
+ reloc = notes_alloc (sizeof (*reloc));
if (flag_mri)
stop = mri_comment_field (&stopc);
@@ -4433,7 +4433,6 @@ s_reloc (int ignore ATTRIBUTE_UNUSED)
as_bad (_("bad reloc expression"));
err_out:
ignore_rest_of_line ();
- free (reloc);
if (flag_mri)
mri_comment_end (stop, stopc);
return;
diff --git a/gas/write.c b/gas/write.c
index d96d8c2..c52a169 100644
--- a/gas/write.c
+++ b/gas/write.c
@@ -1975,7 +1975,7 @@ create_note_reloc (segT sec,
{
struct reloc_list * reloc;
- reloc = XNEW (struct reloc_list);
+ reloc = notes_alloc (sizeof (*reloc));
/* We create a .b type reloc as resolve_reloc_expr_symbols() has already been called. */
reloc->u.b.sec = sec;
@@ -2535,6 +2535,7 @@ write_object_file (void)
#endif
bfd_map_over_sections (stdoutput, write_relocs, (char *) 0);
+ reloc_list = NULL;
#ifdef tc_frob_file_after_relocs
tc_frob_file_after_relocs ();