* elf32-hppa.c (hppa_add_stub): Likewise.
* elflink.c (_bfd_elf_link_record_dynamic_symbol): Likewise.
* elflink.h (elf_add_default_symbol): Fix comment typo.
(elf_add_default_symbol): Replace strcpy and strncpy with memcpy.
(elf_link_add_object_symbols): Likewise.
(elf_link_assign_sym_version): Likewise.
* hash.c (bfd_hash_lookup): Likewise.
* linker.c (_bfd_generic_link_add_one_symbol): Likewise.
* section.c (bfd_get_unique_section_name): Likewise.
* syms.c (_bfd_stab_section_find_nearest_line): Likewise.
* elf.c (_bfd_elf_make_section_from_phdr): Likewise.
(assign_section_numbers): Likewise.
(_bfd_elfcore_make_pseudosection): Likewise.
(elfcore_grok_lwpstatus): Likewise.
(elfcore_grok_win32pstatus): Likewise.
(elfcore_write_note): Constify input params. Use PTR instead of
void *. Include terminating NUL in namesz. Correct padding.
Support NULL "name" param. Use memcpy instead of strcpy.
(elfcore_write_prpsinfo): Constify input params.
(elfcore_write_prstatus): Likewise. Use PTR instead of void *.
(elfcore_write_lwpstatus): Likewise.
(elfcore_write_pstatus): Likewise.
(elfcore_write_prfpreg): Likewise.
(elfcore_write_prxfpreg): Likewise.
* elf-bfd.h (elfcore_write_note): Update declaration.
(elfcore_write_prpsinfo): Likewise.
(elfcore_write_prstatus): Likewise.
(elfcore_write_pstatus): Likewise.
(elfcore_write_prfpreg): Likewise.
(elfcore_write_prxfpreg): Likewise.
(elfcore_write_lwpstatus): Likewise.
+2002-06-25 Alan Modra <amodra@bigpond.net.au>
+
+ * elf64-ppc.c (ppc_add_stub): Replace strcpy/strncpy with memcpy.
+ * elf32-hppa.c (hppa_add_stub): Likewise.
+ * elflink.c (_bfd_elf_link_record_dynamic_symbol): Likewise.
+ * elflink.h (elf_add_default_symbol): Fix comment typo.
+ (elf_add_default_symbol): Replace strcpy and strncpy with memcpy.
+ (elf_link_add_object_symbols): Likewise.
+ (elf_link_assign_sym_version): Likewise.
+ * hash.c (bfd_hash_lookup): Likewise.
+ * linker.c (_bfd_generic_link_add_one_symbol): Likewise.
+ * section.c (bfd_get_unique_section_name): Likewise.
+ * syms.c (_bfd_stab_section_find_nearest_line): Likewise.
+ * elf.c (_bfd_elf_make_section_from_phdr): Likewise.
+ (assign_section_numbers): Likewise.
+ (_bfd_elfcore_make_pseudosection): Likewise.
+ (elfcore_grok_lwpstatus): Likewise.
+ (elfcore_grok_win32pstatus): Likewise.
+ (elfcore_write_note): Constify input params. Use PTR instead of
+ void *. Include terminating NUL in namesz. Correct padding.
+ Support NULL "name" param. Use memcpy instead of strcpy.
+ (elfcore_write_prpsinfo): Constify input params.
+ (elfcore_write_prstatus): Likewise. Use PTR instead of void *.
+ (elfcore_write_lwpstatus): Likewise.
+ (elfcore_write_pstatus): Likewise.
+ (elfcore_write_prfpreg): Likewise.
+ (elfcore_write_prxfpreg): Likewise.
+ * elf-bfd.h (elfcore_write_note): Update declaration.
+ (elfcore_write_prpsinfo): Likewise.
+ (elfcore_write_prstatus): Likewise.
+ (elfcore_write_pstatus): Likewise.
+ (elfcore_write_prfpreg): Likewise.
+ (elfcore_write_prxfpreg): Likewise.
+ (elfcore_write_lwpstatus): Likewise.
+
2002-06-25 Jason Eckhardt <jle@rice.edu>
* ecoff.c (ecoff_set_symbol_info): Set BSF_FUNCTION for
PARAMS ((bfd *, struct bfd_link_info *, PTR,
boolean (*) (PTR, const char *, Elf_Internal_Sym *, asection *)));
- /* Copy any information related to dynamic linking from a pre-existing
+ /* Copy any information related to dynamic linking from a pre-existing
symbol to a newly created symbol. Also called to copy flags and
other back-end info to a weakdef, in which case the symbol is not
newly created and plt/got refcounts and dynamic indices should not
PARAMS ((asection *, Elf_Internal_Phdr *));
/* This function, if defined, returns true if copy_private_bfd_data
- should be called. It provides a way of overriding default
+ should be called. It provides a way of overriding default
test conditions in _bfd_elf_copy_private_section_data. */
boolean (*copy_private_bfd_data_p)
PARAMS ((bfd *, asection *, bfd *, asection *));
PARAMS ((bfd_vma, PTR));
/* Exported interface for writing elf corefile notes. */
-extern char *elfcore_write_note
- PARAMS ((bfd *, char *, int *, char *, int, void *, int));
-extern char *elfcore_write_prpsinfo
- PARAMS ((bfd *, char *, int *, char *, char *));
-extern char *elfcore_write_prstatus
- PARAMS ((bfd *, char *, int *, long, int, void *));
-extern char * elfcore_write_pstatus
- PARAMS ((bfd *, char *, int *, long, int, void *));
-extern char *elfcore_write_prfpreg
- PARAMS ((bfd *, char *, int *, void *, int));
-extern char *elfcore_write_prxfpreg
- PARAMS ((bfd *, char *, int *, void *, int));
-extern char *elfcore_write_lwpstatus
- PARAMS ((bfd*, char*, int*, long, int, void*));
+extern char *elfcore_write_note
+ PARAMS ((bfd *, char *, int *, const char *, int, const PTR, int));
+extern char *elfcore_write_prpsinfo
+ PARAMS ((bfd *, char *, int *, const char *, const char *));
+extern char *elfcore_write_prstatus
+ PARAMS ((bfd *, char *, int *, long, int, const PTR));
+extern char * elfcore_write_pstatus
+ PARAMS ((bfd *, char *, int *, long, int, const PTR));
+extern char *elfcore_write_prfpreg
+ PARAMS ((bfd *, char *, int *, const PTR, int));
+extern char *elfcore_write_prxfpreg
+ PARAMS ((bfd *, char *, int *, const PTR, int));
+extern char *elfcore_write_lwpstatus
+ PARAMS ((bfd *, char *, int *, long, int, const PTR));
/* SH ELF specific routine. */
asection *newsect;
char *name;
char namebuf[64];
+ size_t len;
int split;
split = ((hdr->p_memsz > 0)
&& (hdr->p_filesz > 0)
&& (hdr->p_memsz > hdr->p_filesz));
sprintf (namebuf, "%s%d%s", typename, index, split ? "a" : "");
- name = bfd_alloc (abfd, (bfd_size_type) strlen (namebuf) + 1);
+ len = strlen (namebuf) + 1;
+ name = bfd_alloc (abfd, (bfd_size_type) len);
if (!name)
return false;
- strcpy (name, namebuf);
+ memcpy (name, namebuf, len);
newsect = bfd_make_section (abfd, name);
if (newsect == NULL)
return false;
if (split)
{
sprintf (namebuf, "%s%db", typename, index);
- name = bfd_alloc (abfd, (bfd_size_type) strlen (namebuf) + 1);
+ len = strlen (namebuf) + 1;
+ name = bfd_alloc (abfd, (bfd_size_type) len);
if (!name)
return false;
- strcpy (name, namebuf);
+ memcpy (name, namebuf, len);
newsect = bfd_make_section (abfd, name);
if (newsect == NULL)
return false;
char *alc;
len = strlen (sec->name);
- alc = (char *) bfd_malloc ((bfd_size_type) len - 2);
+ alc = (char *) bfd_malloc ((bfd_size_type) (len - 2));
if (alc == NULL)
return false;
- strncpy (alc, sec->name, len - 3);
+ memcpy (alc, sec->name, len - 3);
alc[len - 3] = '\0';
s = bfd_get_section_by_name (abfd, alc);
free (alc);
{
char buf[100];
char *threaded_name;
+ size_t len;
asection *sect;
/* Build the section name. */
sprintf (buf, "%s/%d", name, elfcore_make_pid (abfd));
- threaded_name = bfd_alloc (abfd, (bfd_size_type) strlen (buf) + 1);
+ len = strlen (buf) + 1;
+ threaded_name = bfd_alloc (abfd, (bfd_size_type) len);
if (threaded_name == NULL)
return false;
- strcpy (threaded_name, buf);
+ memcpy (threaded_name, buf, len);
sect = bfd_make_section (abfd, threaded_name);
if (sect == NULL)
lwpstatus_t lwpstat;
char buf[100];
char *name;
+ size_t len;
asection *sect;
if (note->descsz != sizeof (lwpstat)
/* Make a ".reg/999" section. */
sprintf (buf, ".reg/%d", elfcore_make_pid (abfd));
- name = bfd_alloc (abfd, (bfd_size_type) strlen (buf) + 1);
+ len = strlen (buf) + 1;
+ name = bfd_alloc (abfd, (bfd_size_type) len);
if (name == NULL)
return false;
- strcpy (name, buf);
+ memcpy (name, buf, len);
sect = bfd_make_section (abfd, name);
if (sect == NULL)
/* Make a ".reg2/999" section */
sprintf (buf, ".reg2/%d", elfcore_make_pid (abfd));
- name = bfd_alloc (abfd, (bfd_size_type) strlen (buf) + 1);
+ len = strlen (buf) + 1;
+ name = bfd_alloc (abfd, (bfd_size_type) len);
if (name == NULL)
return false;
- strcpy (name, buf);
+ memcpy (name, buf, len);
sect = bfd_make_section (abfd, name);
if (sect == NULL)
{
char buf[30];
char *name;
+ size_t len;
asection *sect;
win32_pstatus_t pstatus;
/* Make a ".reg/999" section. */
sprintf (buf, ".reg/%d", pstatus.data.thread_info.tid);
- name = bfd_alloc (abfd, (bfd_size_type) strlen (buf) + 1);
+ len = strlen (buf) + 1;
+ name = bfd_alloc (abfd, (bfd_size_type) len);
if (name == NULL)
return false;
- strcpy (name, buf);
+ memcpy (name, buf, len);
sect = bfd_make_section (abfd, name);
if (sect == NULL)
/* Make a ".module/xxxxxxxx" section. */
sprintf (buf, ".module/%08x", pstatus.data.module_info.base_address);
- name = bfd_alloc (abfd, (bfd_size_type) strlen (buf) + 1);
+ len = strlen (buf) + 1;
+ name = bfd_alloc (abfd, (bfd_size_type) len);
if (name == NULL)
return false;
- strcpy (name, buf);
+ memcpy (name, buf, len);
sect = bfd_make_section (abfd, name);
bfd *abfd;
char *buf;
int *bufsiz;
- char *name;
+ const char *name;
int type;
- void *input;
+ const PTR input;
int size;
{
Elf_External_Note *xnp;
- int namesz = strlen (name);
- int newspace = BFD_ALIGN (sizeof (Elf_External_Note) + size + namesz - 1, 4);
+ size_t namesz;
+ size_t pad;
+ size_t newspace;
char *p, *dest;
+ namesz = 0;
+ pad = 0;
+ if (name != NULL)
+ {
+ struct elf_backend_data *bed;
+
+ namesz = strlen (name) + 1;
+ bed = get_elf_backend_data (abfd);
+ pad = -namesz & (bed->s->file_align - 1);
+ }
+
+ newspace = sizeof (Elf_External_Note) - 1 + namesz + pad + size;
+
p = realloc (buf, *bufsiz + newspace);
dest = p + *bufsiz;
*bufsiz += newspace;
H_PUT_32 (abfd, namesz, xnp->namesz);
H_PUT_32 (abfd, size, xnp->descsz);
H_PUT_32 (abfd, type, xnp->type);
- strcpy (xnp->name, name);
- memcpy (xnp->name + BFD_ALIGN (namesz, 4), input, size);
+ dest = xnp->name;
+ if (name != NULL)
+ {
+ memcpy (dest, name, namesz);
+ dest += namesz;
+ while (pad != 0)
+ {
+ *dest++ = '\0';
+ --pad;
+ }
+ }
+ memcpy (dest, input, size);
return p;
}
bfd *abfd;
char *buf;
int *bufsiz;
- char *fname;
- char *psargs;
+ const char *fname;
+ const char *psargs;
{
int note_type;
char *note_name = "CORE";
int *bufsiz;
long pid;
int cursig;
- void *gregs;
+ const PTR gregs;
{
prstatus_t prstat;
char *note_name = "CORE";
int *bufsiz;
long pid;
int cursig;
- void *gregs;
+ const PTR gregs;
{
lwpstatus_t lwpstat;
char *note_name = "CORE";
int *bufsiz;
long pid;
int cursig;
- void *gregs;
+ const PTR gregs;
{
pstatus_t pstat;
char *note_name = "CORE";
bfd *abfd;
char *buf;
int *bufsiz;
- void *fpregs;
+ const PTR fpregs;
int size;
{
char *note_name = "CORE";
bfd *abfd;
char *buf;
int *bufsiz;
- void *xfpregs;
+ const PTR xfpregs;
int size;
{
char *note_name = "LINUX";
stub_sec = htab->stub_group[link_sec->id].stub_sec;
if (stub_sec == NULL)
{
+ size_t namelen;
bfd_size_type len;
char *s_name;
- len = strlen (link_sec->name) + sizeof (STUB_SUFFIX);
+ namelen = strlen (link_sec->name);
+ len = namelen + sizeof (STUB_SUFFIX);
s_name = bfd_alloc (htab->stub_bfd, len);
if (s_name == NULL)
return NULL;
- strcpy (s_name, link_sec->name);
- strcpy (s_name + len - sizeof (STUB_SUFFIX), STUB_SUFFIX);
+ memcpy (s_name, link_sec->name, namelen);
+ memcpy (s_name + namelen, STUB_SUFFIX, sizeof (STUB_SUFFIX));
stub_sec = (*htab->add_stub_section) (s_name, link_sec);
if (stub_sec == NULL)
return NULL;
stub_sec = htab->stub_group[link_sec->id].stub_sec;
if (stub_sec == NULL)
{
+ size_t namelen;
bfd_size_type len;
char *s_name;
- len = strlen (link_sec->name) + sizeof (STUB_SUFFIX);
+ namelen = strlen (link_sec->name);
+ len = namelen + sizeof (STUB_SUFFIX);
s_name = bfd_alloc (htab->stub_bfd, len);
if (s_name == NULL)
return NULL;
- strcpy (s_name, link_sec->name);
- strcpy (s_name + len - sizeof (STUB_SUFFIX), STUB_SUFFIX);
+ memcpy (s_name, link_sec->name, namelen);
+ memcpy (s_name + namelen, STUB_SUFFIX, sizeof (STUB_SUFFIX));
stub_sec = (*htab->add_stub_section) (s_name, link_sec);
if (stub_sec == NULL)
return NULL;
}
else
{
- alc = bfd_malloc ((bfd_size_type) (p - name + 1));
+ size_t len = p - name + 1;
+
+ alc = bfd_malloc ((bfd_size_type) len);
if (alc == NULL)
return false;
- strncpy (alc, name, (size_t) (p - name));
- alc[p - name] = '\0';
+ memcpy (alc, name, len - 1);
+ alc[len - 1] = '\0';
name = alc;
copy = true;
}
boolean collect;
boolean dynamic;
char *p;
+ size_t len, shortlen;
/* If this symbol has a version, and it is the default version, we
create an indirect symbol from the default name to the fully
if (override)
{
/* We are overridden by an old defition. We need to check if we
- need to crreate the indirect symbol from the default name. */
+ need to create the indirect symbol from the default name. */
hi = elf_link_hash_lookup (elf_hash_table (info), name, true,
false, false);
BFD_ASSERT (hi != NULL);
collect = bed->collect;
dynamic = (abfd->flags & DYNAMIC) != 0;
- shortname = bfd_hash_allocate (&info->hash->table,
- (size_t) (p - name + 1));
+ shortlen = p - name;
+ shortname = bfd_hash_allocate (&info->hash->table, shortlen + 1);
if (shortname == NULL)
return false;
- strncpy (shortname, name, (size_t) (p - name));
- shortname [p - name] = '\0';
+ memcpy (shortname, name, shortlen);
+ shortname[shortlen] = '\0';
/* We are going to create a new symbol. Merge it with any existing
symbol with this name. For the purposes of the merge, act as
/* We also need to define an indirection from the nondefault version
of the symbol. */
- shortname = bfd_hash_allocate (&info->hash->table, strlen (name));
+ len = strlen (name);
+ shortname = bfd_hash_allocate (&info->hash->table, len);
if (shortname == NULL)
return false;
- strncpy (shortname, name, (size_t) (p - name));
- strcpy (shortname + (p - name), p + 1);
+ memcpy (shortname, name, shortlen);
+ memcpy (shortname + shortlen, p + 1, len - shortlen);
/* Once again, merge with any existing symbol. */
type_change_ok = false;
fnm = bfd_elf_string_from_elf_section (abfd, shlink, tagv);
if (n == NULL || fnm == NULL)
goto error_return;
- anm = bfd_alloc (abfd, (bfd_size_type) strlen (fnm) + 1);
+ amt = strlen (fnm) + 1;
+ anm = bfd_alloc (abfd, amt);
if (anm == NULL)
goto error_return;
- strcpy (anm, fnm);
+ memcpy (anm, fnm, (size_t) amt);
n->name = anm;
n->by = abfd;
n->next = NULL;
fnm = bfd_elf_string_from_elf_section (abfd, shlink, tagv);
if (n == NULL || fnm == NULL)
goto error_return;
- anm = bfd_alloc (abfd, (bfd_size_type) strlen (fnm) + 1);
+ amt = strlen (fnm) + 1;
+ anm = bfd_alloc (abfd, amt);
if (anm == NULL)
goto error_return;
- strcpy (anm, fnm);
+ memcpy (anm, fnm, (size_t) amt);
n->name = anm;
n->by = abfd;
n->next = NULL;
fnm = bfd_elf_string_from_elf_section (abfd, shlink, tagv);
if (n == NULL || fnm == NULL)
goto error_return;
- anm = bfd_alloc (abfd, (bfd_size_type) strlen (fnm) + 1);
+ amt = strlen (fnm) + 1;
+ anm = bfd_alloc (abfd, amt);
if (anm == NULL)
goto error_return;
- strcpy (anm, fnm);
+ memcpy (anm, fnm, (size_t) amt);
n->name = anm;
n->by = abfd;
n->next = NULL;
|| (vernum > 1 && ! bfd_is_abs_section (sec)))
{
const char *verstr;
- unsigned int namelen;
- bfd_size_type newlen;
+ size_t namelen, verlen, newlen;
char *newname, *p;
if (sym.st_shndx != SHN_UNDEF)
}
namelen = strlen (name);
- newlen = namelen + strlen (verstr) + 2;
- if ((iver.vs_vers & VERSYM_HIDDEN) == 0)
+ verlen = strlen (verstr);
+ newlen = namelen + verlen + 2;
+ if ((iver.vs_vers & VERSYM_HIDDEN) == 0
+ && sym.st_shndx != SHN_UNDEF)
++newlen;
- newname = (char *) bfd_alloc (abfd, newlen);
+ newname = (char *) bfd_alloc (abfd, (bfd_size_type) newlen);
if (newname == NULL)
goto error_return;
- strcpy (newname, name);
+ memcpy (newname, name, namelen);
p = newname + namelen;
*p++ = ELF_VER_CHR;
/* If this is a defined non-hidden version symbol,
if ((iver.vs_vers & VERSYM_HIDDEN) == 0
&& sym.st_shndx != SHN_UNDEF)
*p++ = ELF_VER_CHR;
- strcpy (p, verstr);
+ memcpy (p, verstr, verlen + 1);
name = newname;
}
alc = bfd_malloc ((bfd_size_type) len);
if (alc == NULL)
return false;
- strncpy (alc, h->root.root.string, len - 1);
+ memcpy (alc, h->root.root.string, len - 1);
alc[len - 1] = '\0';
if (alc[len - 2] == ELF_VER_CHR)
alc[len - 2] = '\0';
/* hash.c -- hash table routines for BFD
- Copyright 1993, 1994, 1995, 1997, 1999, 2001
+ Copyright 1993, 1994, 1995, 1997, 1999, 2001, 2002
Free Software Foundation, Inc.
Written by Steve Chamberlain <sac@cygnus.com>
bfd_set_error (bfd_error_no_memory);
return (struct bfd_hash_entry *) NULL;
}
- strcpy (new, string);
+ memcpy (new, string, len + 1);
string = new;
}
hashp->string = string;
else
{
char *w;
+ size_t len = strlen (string) + 1;
- w = bfd_hash_allocate (&info->hash->table,
- strlen (string) + 1);
+ w = bfd_hash_allocate (&info->hash->table, len);
if (w == NULL)
return false;
- strcpy (w, string);
+ memcpy (w, string, len);
sub->u.i.warning = w;
}
sname = bfd_malloc ((bfd_size_type) len + 8);
if (sname == NULL)
return NULL;
- strcpy (sname, templat);
+ memcpy (sname, templat, len);
num = 1;
if (count != NULL)
num = *count;
|| strncmp (info->filename, directory_name, dirlen) != 0
|| strcmp (info->filename + dirlen, file_name) != 0)
{
+ size_t len;
+
if (info->filename != NULL)
free (info->filename);
- info->filename = (char *) bfd_malloc ((bfd_size_type) dirlen
- + strlen (file_name) + 1);
+ len = strlen (file_name) + 1;
+ info->filename = (char *) bfd_malloc ((bfd_size_type) dirlen + len);
if (info->filename == NULL)
return false;
- strcpy (info->filename, directory_name);
- strcpy (info->filename + dirlen, file_name);
+ memcpy (info->filename, directory_name, dirlen);
+ memcpy (info->filename + dirlen, file_name, len);
}
*pfilename = info->filename;