Use bfd_set_filename more
Fixes a few leaks in bfd and ld. bfd/ * mach-o.c (bfd_mach_o_fat_member_init): Likewise. Replace xstrdup and xmalloc with bfd_strdup and bfd_malloc. Return an error status. Adjust calls. * vms-lib.c (_bfd_vms_lib_get_module): Test mhd->id earlier. Close bfd on failure. Replace xstrdup/bfd_alloc use with bfd_malloc. Use bfd_set_filename. gdb/ * solib-spu.c (spu_bfd_open): Use bfd_set_filename. * spu-linux-nat.c (spu_bfd_open): Likewise. ld/ * emultempl/pe.em (after_open): Use bfd_set_filename. * emultempl/pep.em (after_open): Use bfd_set_filename.
This commit is contained in:
parent
1bdd8facfb
commit
90d92a632a
@ -1,3 +1,12 @@
|
|||||||
|
2019-09-18 Alan Modra <amodra@gmail.com>
|
||||||
|
|
||||||
|
* mach-o.c (bfd_mach_o_fat_member_init): Likewise. Replace
|
||||||
|
xstrdup and xmalloc with bfd_strdup and bfd_malloc. Return an
|
||||||
|
error status. Adjust calls.
|
||||||
|
* vms-lib.c (_bfd_vms_lib_get_module): Test mhd->id earlier.
|
||||||
|
Close bfd on failure. Replace xstrdup/bfd_alloc use with
|
||||||
|
bfd_malloc. Use bfd_set_filename.
|
||||||
|
|
||||||
2019-09-18 Alan Modra <amodra@gmail.com>
|
2019-09-18 Alan Modra <amodra@gmail.com>
|
||||||
|
|
||||||
* elf64-ppc.c (must_be_dyn_reloc): Return 0 for TOC16 relocs.
|
* elf64-ppc.c (must_be_dyn_reloc): Return 0 for TOC16 relocs.
|
||||||
|
29
bfd/mach-o.c
29
bfd/mach-o.c
@ -5417,7 +5417,7 @@ bfd_mach_o_fat_archive_p (bfd *abfd)
|
|||||||
ARCH_TYPE/ARCH_SUBTYPE and corresponding entry in header is ENTRY.
|
ARCH_TYPE/ARCH_SUBTYPE and corresponding entry in header is ENTRY.
|
||||||
Set arelt_data and origin fields too. */
|
Set arelt_data and origin fields too. */
|
||||||
|
|
||||||
static void
|
static bfd_boolean
|
||||||
bfd_mach_o_fat_member_init (bfd *abfd,
|
bfd_mach_o_fat_member_init (bfd *abfd,
|
||||||
enum bfd_architecture arch_type,
|
enum bfd_architecture arch_type,
|
||||||
unsigned long arch_subtype,
|
unsigned long arch_subtype,
|
||||||
@ -5426,27 +5426,35 @@ bfd_mach_o_fat_member_init (bfd *abfd,
|
|||||||
struct areltdata *areltdata;
|
struct areltdata *areltdata;
|
||||||
/* Create the member filename. Use ARCH_NAME. */
|
/* Create the member filename. Use ARCH_NAME. */
|
||||||
const bfd_arch_info_type *ap = bfd_lookup_arch (arch_type, arch_subtype);
|
const bfd_arch_info_type *ap = bfd_lookup_arch (arch_type, arch_subtype);
|
||||||
|
char *filename;
|
||||||
|
|
||||||
if (ap)
|
if (ap)
|
||||||
{
|
{
|
||||||
/* Use the architecture name if known. */
|
/* Use the architecture name if known. */
|
||||||
abfd->filename = xstrdup (ap->printable_name);
|
filename = bfd_strdup (ap->printable_name);
|
||||||
|
if (filename == NULL)
|
||||||
|
return FALSE;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
/* Forge a uniq id. */
|
/* Forge a uniq id. */
|
||||||
const size_t namelen = 2 + 8 + 1 + 2 + 8 + 1;
|
const size_t namelen = 2 + 8 + 1 + 2 + 8 + 1;
|
||||||
char *name = xmalloc (namelen);
|
filename = bfd_malloc (namelen);
|
||||||
snprintf (name, namelen, "0x%lx-0x%lx",
|
if (filename == NULL)
|
||||||
|
return FALSE;
|
||||||
|
snprintf (filename, namelen, "0x%lx-0x%lx",
|
||||||
entry->cputype, entry->cpusubtype);
|
entry->cputype, entry->cpusubtype);
|
||||||
abfd->filename = name;
|
|
||||||
}
|
}
|
||||||
|
bfd_set_filename (abfd, filename);
|
||||||
|
|
||||||
areltdata = bfd_zmalloc (sizeof (struct areltdata));
|
areltdata = bfd_zmalloc (sizeof (struct areltdata));
|
||||||
|
if (areltdata == NULL)
|
||||||
|
return FALSE;
|
||||||
areltdata->parsed_size = entry->size;
|
areltdata->parsed_size = entry->size;
|
||||||
abfd->arelt_data = areltdata;
|
abfd->arelt_data = areltdata;
|
||||||
abfd->iostream = NULL;
|
abfd->iostream = NULL;
|
||||||
abfd->origin = entry->offset;
|
abfd->origin = entry->offset;
|
||||||
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
bfd *
|
bfd *
|
||||||
@ -5502,7 +5510,11 @@ bfd_mach_o_fat_openr_next_archived_file (bfd *archive, bfd *prev)
|
|||||||
bfd_mach_o_convert_architecture (entry->cputype, entry->cpusubtype,
|
bfd_mach_o_convert_architecture (entry->cputype, entry->cpusubtype,
|
||||||
&arch_type, &arch_subtype);
|
&arch_type, &arch_subtype);
|
||||||
|
|
||||||
bfd_mach_o_fat_member_init (nbfd, arch_type, arch_subtype, entry);
|
if (!bfd_mach_o_fat_member_init (nbfd, arch_type, arch_subtype, entry))
|
||||||
|
{
|
||||||
|
bfd_close (nbfd);
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
bfd_set_arch_mach (nbfd, arch_type, arch_subtype);
|
bfd_set_arch_mach (nbfd, arch_type, arch_subtype);
|
||||||
|
|
||||||
@ -5574,9 +5586,8 @@ bfd_mach_o_fat_extract (bfd *abfd,
|
|||||||
if (res == NULL)
|
if (res == NULL)
|
||||||
return NULL;
|
return NULL;
|
||||||
|
|
||||||
bfd_mach_o_fat_member_init (res, cpu_type, cpu_subtype, e);
|
if (bfd_mach_o_fat_member_init (res, cpu_type, cpu_subtype, e)
|
||||||
|
&& bfd_check_format (res, format))
|
||||||
if (bfd_check_format (res, format))
|
|
||||||
{
|
{
|
||||||
BFD_ASSERT (bfd_get_arch_info (res) == arch);
|
BFD_ASSERT (bfd_get_arch_info (res) == arch);
|
||||||
return res;
|
return res;
|
||||||
|
@ -1297,7 +1297,9 @@ _bfd_vms_lib_get_module (bfd *abfd, unsigned int modidx)
|
|||||||
struct lib_tdata *tdata = bfd_libdata (abfd);
|
struct lib_tdata *tdata = bfd_libdata (abfd);
|
||||||
bfd *res;
|
bfd *res;
|
||||||
file_ptr file_off;
|
file_ptr file_off;
|
||||||
char *name;
|
const char *name;
|
||||||
|
char *newname;
|
||||||
|
size_t namelen;
|
||||||
|
|
||||||
/* Sanity check. */
|
/* Sanity check. */
|
||||||
if (modidx >= tdata->nbr_modules)
|
if (modidx >= tdata->nbr_modules)
|
||||||
@ -1335,18 +1337,22 @@ _bfd_vms_lib_get_module (bfd *abfd, unsigned int modidx)
|
|||||||
if (bfd_bread (buf, tdata->mhd_size, abfd) != tdata->mhd_size)
|
if (bfd_bread (buf, tdata->mhd_size, abfd) != tdata->mhd_size)
|
||||||
return NULL;
|
return NULL;
|
||||||
|
|
||||||
|
mhd = (struct vms_mhd *) buf;
|
||||||
|
if (mhd->id != MHD__C_MHDID)
|
||||||
|
return NULL;
|
||||||
|
|
||||||
res = _bfd_create_empty_archive_element_shell (abfd);
|
res = _bfd_create_empty_archive_element_shell (abfd);
|
||||||
if (res == NULL)
|
if (res == NULL)
|
||||||
return NULL;
|
return NULL;
|
||||||
arelt = bfd_zmalloc (sizeof (*arelt));
|
arelt = bfd_zmalloc (sizeof (*arelt));
|
||||||
if (arelt == NULL)
|
if (arelt == NULL)
|
||||||
return NULL;
|
{
|
||||||
|
bfd_close (res);
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
res->arelt_data = arelt;
|
res->arelt_data = arelt;
|
||||||
|
|
||||||
/* Get info from mhd. */
|
/* Get info from mhd. */
|
||||||
mhd = (struct vms_mhd *)buf;
|
|
||||||
if (mhd->id != MHD__C_MHDID)
|
|
||||||
return NULL;
|
|
||||||
if (tdata->mhd_size >= offsetof (struct vms_mhd, objstat) + 1)
|
if (tdata->mhd_size >= offsetof (struct vms_mhd, objstat) + 1)
|
||||||
res->selective_search = (mhd->objstat & MHD__M_SELSRC) ? 1 : 0;
|
res->selective_search = (mhd->objstat & MHD__M_SELSRC) ? 1 : 0;
|
||||||
res->mtime = vms_rawtime_to_time_t (mhd->datim);
|
res->mtime = vms_rawtime_to_time_t (mhd->datim);
|
||||||
@ -1361,23 +1367,25 @@ _bfd_vms_lib_get_module (bfd *abfd, unsigned int modidx)
|
|||||||
|
|
||||||
/* Set filename. */
|
/* Set filename. */
|
||||||
name = tdata->modules[modidx].name;
|
name = tdata->modules[modidx].name;
|
||||||
|
namelen = strlen (name);
|
||||||
|
newname = bfd_malloc (namelen + 4 + 1);
|
||||||
|
if (newname == NULL)
|
||||||
|
{
|
||||||
|
bfd_close (res);
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
strcpy (newname, name);
|
||||||
switch (tdata->type)
|
switch (tdata->type)
|
||||||
{
|
{
|
||||||
case LBR__C_TYP_IOBJ:
|
case LBR__C_TYP_IOBJ:
|
||||||
case LBR__C_TYP_EOBJ:
|
case LBR__C_TYP_EOBJ:
|
||||||
/* For object archives, append .obj to mimic standard behaviour. */
|
/* For object archives, append .obj to mimic standard behaviour. */
|
||||||
{
|
strcpy (newname + namelen, ".obj");
|
||||||
size_t namelen = strlen (name);
|
|
||||||
char *name1 = bfd_alloc (res, namelen + 4 + 1);
|
|
||||||
memcpy (name1, name, namelen);
|
|
||||||
strcpy (name1 + namelen, ".obj");
|
|
||||||
name = name1;
|
|
||||||
}
|
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
res->filename = xstrdup (name);
|
bfd_set_filename (res, newname);
|
||||||
|
|
||||||
tdata->cache[modidx] = res;
|
tdata->cache[modidx] = res;
|
||||||
|
|
||||||
|
@ -1,3 +1,8 @@
|
|||||||
|
2019-09-18 Alan Modra <amodra@gmail.com>
|
||||||
|
|
||||||
|
* solib-spu.c (spu_bfd_open): Use bfd_set_filename.
|
||||||
|
* spu-linux-nat.c (spu_bfd_open): Likewise.
|
||||||
|
|
||||||
2019-09-18 Christian Biesinger <cbiesinger@google.com>
|
2019-09-18 Christian Biesinger <cbiesinger@google.com>
|
||||||
|
|
||||||
* dwarf2loc.c: Change extern declaration of dwarf_always_disassemble
|
* dwarf2loc.c: Change extern declaration of dwarf_always_disassemble
|
||||||
|
@ -377,8 +377,7 @@ spu_bfd_open (const char *pathname)
|
|||||||
|
|
||||||
strcat (buf, original_name);
|
strcat (buf, original_name);
|
||||||
|
|
||||||
xfree ((char *)abfd->filename);
|
bfd_set_filename (abfd.get (), xstrdup (buf));
|
||||||
abfd->filename = xstrdup (buf);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -371,8 +371,7 @@ spu_bfd_open (ULONGEST addr)
|
|||||||
sect_size - 20);
|
sect_size - 20);
|
||||||
buf[sect_size - 20] = '\0';
|
buf[sect_size - 20] = '\0';
|
||||||
|
|
||||||
xfree ((char *)nbfd->filename);
|
bfd_set_filename (nbfd.get (), xstrdup (buf));
|
||||||
nbfd->filename = xstrdup (buf);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1,3 +1,8 @@
|
|||||||
|
2019-09-18 Alan Modra <amodra@gmail.com>
|
||||||
|
|
||||||
|
* emultempl/pe.em (after_open): Use bfd_set_filename.
|
||||||
|
* emultempl/pep.em (after_open): Use bfd_set_filename.
|
||||||
|
|
||||||
2019-09-16 Alan Modra <amodra@gmail.com>
|
2019-09-16 Alan Modra <amodra@gmail.com>
|
||||||
|
|
||||||
PR 25002
|
PR 25002
|
||||||
|
@ -1543,7 +1543,7 @@ gld_${EMULATION_NAME}_after_open (void)
|
|||||||
/* Rename this implib to match the other one. */
|
/* Rename this implib to match the other one. */
|
||||||
n = xmalloc (strlen (other_bfd_filename) + 1);
|
n = xmalloc (strlen (other_bfd_filename) + 1);
|
||||||
strcpy (n, other_bfd_filename);
|
strcpy (n, other_bfd_filename);
|
||||||
is->the_bfd->my_archive->filename = n;
|
bfd_set_filename (is->the_bfd->my_archive, n);
|
||||||
}
|
}
|
||||||
|
|
||||||
free (relocs);
|
free (relocs);
|
||||||
@ -1648,7 +1648,7 @@ gld_${EMULATION_NAME}_after_open (void)
|
|||||||
|
|
||||||
new_name = xmalloc (strlen (is->the_bfd->filename) + 3);
|
new_name = xmalloc (strlen (is->the_bfd->filename) + 3);
|
||||||
sprintf (new_name, "%s.%c", is->the_bfd->filename, seq);
|
sprintf (new_name, "%s.%c", is->the_bfd->filename, seq);
|
||||||
is->the_bfd->filename = new_name;
|
bfd_set_filename (is->the_bfd, new_name);
|
||||||
|
|
||||||
new_name = xmalloc (strlen (is->filename) + 3);
|
new_name = xmalloc (strlen (is->filename) + 3);
|
||||||
sprintf (new_name, "%s.%c", is->filename, seq);
|
sprintf (new_name, "%s.%c", is->filename, seq);
|
||||||
|
@ -1510,7 +1510,7 @@ gld_${EMULATION_NAME}_after_open (void)
|
|||||||
/* Rename this implib to match the other one. */
|
/* Rename this implib to match the other one. */
|
||||||
n = xmalloc (strlen (other_bfd_filename) + 1);
|
n = xmalloc (strlen (other_bfd_filename) + 1);
|
||||||
strcpy (n, other_bfd_filename);
|
strcpy (n, other_bfd_filename);
|
||||||
is->the_bfd->my_archive->filename = n;
|
bfd_set_filename (is->the_bfd->my_archive, n);
|
||||||
}
|
}
|
||||||
|
|
||||||
free (relocs);
|
free (relocs);
|
||||||
@ -1615,7 +1615,7 @@ gld_${EMULATION_NAME}_after_open (void)
|
|||||||
|
|
||||||
new_name = xmalloc (strlen (is->the_bfd->filename) + 3);
|
new_name = xmalloc (strlen (is->the_bfd->filename) + 3);
|
||||||
sprintf (new_name, "%s.%c", is->the_bfd->filename, seq);
|
sprintf (new_name, "%s.%c", is->the_bfd->filename, seq);
|
||||||
is->the_bfd->filename = new_name;
|
bfd_set_filename (is->the_bfd, new_name);
|
||||||
|
|
||||||
new_name = xmalloc (strlen (is->filename) + 3);
|
new_name = xmalloc (strlen (is->filename) + 3);
|
||||||
sprintf (new_name, "%s.%c", is->filename, seq);
|
sprintf (new_name, "%s.%c", is->filename, seq);
|
||||||
|
Loading…
Reference in New Issue
Block a user