projects
/
deliverable
/
binutils-gdb.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
[GDBserver] Replace "reinsert_breakpoint" with "single_step_breakpoint"
[deliverable/binutils-gdb.git]
/
binutils
/
nlmconv.c
diff --git
a/binutils/nlmconv.c
b/binutils/nlmconv.c
index 64214e7132366f08651d3bd218cef7e083654082..eff15c5e2a8355b63f4787ff4585a9e0c98f0885 100644
(file)
--- a/
binutils/nlmconv.c
+++ b/
binutils/nlmconv.c
@@
-1,7
+1,5
@@
/* nlmconv.c -- NLM conversion program
/* nlmconv.c -- NLM conversion program
- Copyright 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
- 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2011, 2012
- Free Software Foundation, Inc.
+ Copyright (C) 1993-2016 Free Software Foundation, Inc.
This file is part of GNU Binutils.
This file is part of GNU Binutils.
@@
-213,6
+211,7
@@
main (int argc, char **argv)
program_name = argv[0];
xmalloc_set_program_name (program_name);
program_name = argv[0];
xmalloc_set_program_name (program_name);
+ bfd_set_error_program_name (program_name);
expandargv (&argc, &argv);
expandargv (&argc, &argv);
@@
-1059,7
+1058,7
@@
main (int argc, char **argv)
{
const int max_len = NLM_MODULE_NAME_SIZE - 2;
const char * filename = lbasename (output_file);
{
const int max_len = NLM_MODULE_NAME_SIZE - 2;
const char * filename = lbasename (output_file);
-
+
len = strlen (filename);
if (len > max_len)
len = max_len;
len = strlen (filename);
if (len > max_len)
len = max_len;
@@
-1417,6
+1416,9
@@
i386_mangle_relocs (bfd *outbfd, asection *insec, arelent ***relocs_ptr,
bfd_vma addend;
rel = *relocs++;
bfd_vma addend;
rel = *relocs++;
+ /* PR 17512: file: 057f89c1. */
+ if (rel->sym_ptr_ptr == NULL)
+ continue;
sym = *rel->sym_ptr_ptr;
/* We're moving the relocs from the input section to the output
sym = *rel->sym_ptr_ptr;
/* We're moving the relocs from the input section to the output
@@
-1873,7
+1875,7
@@
powerpc_mangle_relocs (bfd *outbfd, asection *insec,
toc_howto = bfd_reloc_type_lookup (insec->owner, BFD_RELOC_PPC_TOC16);
if (toc_howto == (reloc_howto_type *) NULL)
toc_howto = bfd_reloc_type_lookup (insec->owner, BFD_RELOC_PPC_TOC16);
if (toc_howto == (reloc_howto_type *) NULL)
-
abort (
);
+
fatal (_("Unable to locate PPC_TOC16 reloc information")
);
/* If this is the .got section, clear out all the contents beyond
the initial size. We must do this here because copy_sections is
/* If this is the .got section, clear out all the contents beyond
the initial size. We must do this here because copy_sections is
@@
-1912,6
+1914,10
@@
powerpc_mangle_relocs (bfd *outbfd, asection *insec,
}
}
}
}
+ /* PR 17512: file: 70cfde95. */
+ if (rel->howto == NULL)
+ continue;
+
/* We must be able to resolve all PC relative relocs at this
point. If we get a branch to an undefined symbol we build a
stub, since NetWare will resolve undefined symbols into a
/* We must be able to resolve all PC relative relocs at this
point. If we get a branch to an undefined symbol we build a
stub, since NetWare will resolve undefined symbols into a
@@
-1929,6
+1935,13
@@
powerpc_mangle_relocs (bfd *outbfd, asection *insec,
{
bfd_vma val;
{
bfd_vma val;
+ if (rel->address > contents_size - 4)
+ {
+ non_fatal (_("Out of range relocation: %lx"),
+ (long) rel->address);
+ break;
+ }
+
assert (rel->howto->size == 2 && rel->howto->pcrel_offset);
val = bfd_get_32 (outbfd, (bfd_byte *) contents + rel->address);
val = ((val &~ rel->howto->dst_mask)
assert (rel->howto->size == 2 && rel->howto->pcrel_offset);
val = bfd_get_32 (outbfd, (bfd_byte *) contents + rel->address);
val = ((val &~ rel->howto->dst_mask)
@@
-1978,6
+1991,13
@@
powerpc_mangle_relocs (bfd *outbfd, asection *insec,
switch (rel->howto->size)
{
case 1:
switch (rel->howto->size)
{
case 1:
+ if (rel->address > contents_size - 2)
+ {
+ non_fatal (_("Out of range relocation: %lx"),
+ (long) rel->address);
+ break;
+ }
+
val = bfd_get_16 (outbfd,
(bfd_byte *) contents + rel->address);
val = ((val &~ rel->howto->dst_mask)
val = bfd_get_16 (outbfd,
(bfd_byte *) contents + rel->address);
val = ((val &~ rel->howto->dst_mask)
@@
-1993,6
+2013,14
@@
powerpc_mangle_relocs (bfd *outbfd, asection *insec,
break;
case 2:
break;
case 2:
+ /* PR 17512: file: 0455a112. */
+ if (rel->address > contents_size - 4)
+ {
+ non_fatal (_("Out of range relocation: %lx"),
+ (long) rel->address);
+ break;
+ }
+
val = bfd_get_32 (outbfd,
(bfd_byte *) contents + rel->address);
val = ((val &~ rel->howto->dst_mask)
val = bfd_get_32 (outbfd,
(bfd_byte *) contents + rel->address);
val = ((val &~ rel->howto->dst_mask)
@@
-2004,7
+2032,7
@@
powerpc_mangle_relocs (bfd *outbfd, asection *insec,
break;
default:
break;
default:
-
abort (
);
+
fatal (_("Unsupported relocation size: %d"), rel->howto->size
);
}
if (! bfd_is_und_section (bfd_get_section (sym)))
}
if (! bfd_is_und_section (bfd_get_section (sym)))
@@
-2054,7
+2082,7
@@
link_inputs (struct string_list *inputs, char *ld, char * mfile)
for (q = inputs; q != NULL; q = q->next)
++c;
for (q = inputs; q != NULL; q = q->next)
++c;
- argv = (char **)
alloca
((c + 7) * sizeof (char *));
+ argv = (char **)
xmalloc
((c + 7) * sizeof (char *));
#ifndef __MSDOS__
if (ld == NULL)
#ifndef __MSDOS__
if (ld == NULL)
@@
-2112,6
+2140,8
@@
link_inputs (struct string_list *inputs, char *ld, char * mfile)
pid = pexecute (ld, argv, program_name, (char *) NULL, &errfmt, &errarg,
PEXECUTE_SEARCH | PEXECUTE_ONE);
pid = pexecute (ld, argv, program_name, (char *) NULL, &errfmt, &errarg,
PEXECUTE_SEARCH | PEXECUTE_ONE);
+ free (argv);
+
if (pid == -1)
{
fprintf (stderr, _("%s: execution of %s failed: "), program_name, ld);
if (pid == -1)
{
fprintf (stderr, _("%s: execution of %s failed: "), program_name, ld);
This page took
0.025398 seconds
and
4
git commands to generate.