projects
/
deliverable
/
binutils-gdb.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Add markers for release 2.26
[deliverable/binutils-gdb.git]
/
binutils
/
nlmconv.c
diff --git
a/binutils/nlmconv.c
b/binutils/nlmconv.c
index 2fb74bfe0e85057b09c8e055cb9b87646a8f2333..751cf081c42ceefbf0ba17a20789e43fdbdb254f 100644
(file)
--- a/
binutils/nlmconv.c
+++ b/
binutils/nlmconv.c
@@
-1,6
+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 Free Software Foundation, Inc.
+ Copyright (C) 1993-2015 Free Software Foundation, Inc.
This file is part of GNU Binutils.
This file is part of GNU Binutils.
@@
-37,12
+36,11
@@
#include "sysdep.h"
#include "bfd.h"
#include "libiberty.h"
#include "sysdep.h"
#include "bfd.h"
#include "libiberty.h"
+#include "filenames.h"
#include "safe-ctype.h"
#include "ansidecl.h"
#include <time.h>
#include "safe-ctype.h"
#include "ansidecl.h"
#include <time.h>
-#include <sys/stat.h>
-#include <sys/file.h>
#include <assert.h>
#include "getopt.h"
#include <assert.h>
#include "getopt.h"
@@
-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);
@@
-268,7
+267,7
@@
main (int argc, char **argv)
++optind;
if (optind < argc)
show_usage (stderr, 1);
++optind;
if (optind < argc)
show_usage (stderr, 1);
- if (
str
cmp (input_file, output_file) == 0)
+ if (
filename_
cmp (input_file, output_file) == 0)
{
fatal (_("input and output files must be different"));
}
{
fatal (_("input and output files must be different"));
}
@@
-395,9
+394,10
@@
main (int argc, char **argv)
bss_sec = bfd_get_section_by_name (outbfd, NLM_UNINITIALIZED_DATA_NAME);
if (bss_sec == NULL)
{
bss_sec = bfd_get_section_by_name (outbfd, NLM_UNINITIALIZED_DATA_NAME);
if (bss_sec == NULL)
{
- bss_sec = bfd_make_section (outbfd, NLM_UNINITIALIZED_DATA_NAME);
+ bss_sec = bfd_make_section_with_flags (outbfd,
+ NLM_UNINITIALIZED_DATA_NAME,
+ SEC_ALLOC);
if (bss_sec == NULL
if (bss_sec == NULL
- || ! bfd_set_section_flags (outbfd, bss_sec, SEC_ALLOC)
|| ! bfd_set_section_alignment (outbfd, bss_sec, 1))
bfd_fatal (_("make .bss section"));
}
|| ! bfd_set_section_alignment (outbfd, bss_sec, 1))
bfd_fatal (_("make .bss section"));
}
@@
-406,11
+406,10
@@
main (int argc, char **argv)
so that programs which understand it can resurrect the original
sections from the NLM. We will put a pointer to .nlmsections in
the NLM header area. */
so that programs which understand it can resurrect the original
sections from the NLM. We will put a pointer to .nlmsections in
the NLM header area. */
- secsec = bfd_make_section (outbfd, ".nlmsections");
+ secsec = bfd_make_section_with_flags (outbfd, ".nlmsections",
+ SEC_HAS_CONTENTS);
if (secsec == NULL)
bfd_fatal (_("make .nlmsections section"));
if (secsec == NULL)
bfd_fatal (_("make .nlmsections section"));
- if (! bfd_set_section_flags (outbfd, secsec, SEC_HAS_CONTENTS))
- bfd_fatal (_("set .nlmsections flags"));
#ifdef NLMCONV_POWERPC
/* For PowerPC NetWare we need to build stubs for calls to undefined
#ifdef NLMCONV_POWERPC
/* For PowerPC NetWare we need to build stubs for calls to undefined
@@
-476,23
+475,23
@@
main (int argc, char **argv)
++sym->name;
else
{
++sym->name;
else
{
- char *new;
+ char *new
_name
;
- new = xmalloc (strlen (bfd_asymbol_name (sym)) + 1);
- new[0] = outlead;
- strcpy (new + 1, bfd_asymbol_name (sym) + 1);
- sym->name = new;
+ new
_name
= xmalloc (strlen (bfd_asymbol_name (sym)) + 1);
+ new
_name
[0] = outlead;
+ strcpy (new
_name
+ 1, bfd_asymbol_name (sym) + 1);
+ sym->name = new
_name
;
}
}
}
else
{
}
}
}
else
{
- char *new;
+ char *new
_name
;
- new = xmalloc (strlen (bfd_asymbol_name (sym)) + 2);
- new[0] = outlead;
- strcpy (new + 1, bfd_asymbol_name (sym));
- sym->name = new;
+ new
_name
= xmalloc (strlen (bfd_asymbol_name (sym)) + 2);
+ new
_name
[0] = outlead;
+ strcpy (new
_name
+ 1, bfd_asymbol_name (sym));
+ sym->name = new
_name
;
}
}
}
}
@@
-714,11
+713,10
@@
main (int argc, char **argv)
else
{
custom_size = st.st_size;
else
{
custom_size = st.st_size;
- custom_section = bfd_make_section (outbfd, ".nlmcustom");
+ custom_section = bfd_make_section_with_flags (outbfd, ".nlmcustom",
+ SEC_HAS_CONTENTS);
if (custom_section == NULL
if (custom_section == NULL
- || ! bfd_set_section_size (outbfd, custom_section, custom_size)
- || ! bfd_set_section_flags (outbfd, custom_section,
- SEC_HAS_CONTENTS))
+ || ! bfd_set_section_size (outbfd, custom_section, custom_size))
bfd_fatal (_("custom section"));
}
}
bfd_fatal (_("custom section"));
}
}
@@
-735,11
+733,10
@@
main (int argc, char **argv)
else
{
help_size = st.st_size;
else
{
help_size = st.st_size;
- help_section = bfd_make_section (outbfd, ".nlmhelp");
+ help_section = bfd_make_section_with_flags (outbfd, ".nlmhelp",
+ SEC_HAS_CONTENTS);
if (help_section == NULL
if (help_section == NULL
- || ! bfd_set_section_size (outbfd, help_section, help_size)
- || ! bfd_set_section_flags (outbfd, help_section,
- SEC_HAS_CONTENTS))
+ || ! bfd_set_section_size (outbfd, help_section, help_size))
bfd_fatal (_("help section"));
LITMEMCPY (nlm_extended_header (outbfd)->stamp, "MeSsAgEs");
}
bfd_fatal (_("help section"));
LITMEMCPY (nlm_extended_header (outbfd)->stamp, "MeSsAgEs");
}
@@
-757,11
+754,11
@@
main (int argc, char **argv)
else
{
message_size = st.st_size;
else
{
message_size = st.st_size;
- message_section = bfd_make_section (outbfd, ".nlmmessages");
+ message_section = bfd_make_section_with_flags (outbfd,
+ ".nlmmessages",
+ SEC_HAS_CONTENTS);
if (message_section == NULL
if (message_section == NULL
- || ! bfd_set_section_size (outbfd, message_section, message_size)
- || ! bfd_set_section_flags (outbfd, message_section,
- SEC_HAS_CONTENTS))
+ || ! bfd_set_section_size (outbfd, message_section, message_size))
bfd_fatal (_("message section"));
LITMEMCPY (nlm_extended_header (outbfd)->stamp, "MeSsAgEs");
}
bfd_fatal (_("message section"));
LITMEMCPY (nlm_extended_header (outbfd)->stamp, "MeSsAgEs");
}
@@
-773,11
+770,10
@@
main (int argc, char **argv)
module_size = 0;
for (l = modules; l != NULL; l = l->next)
module_size += strlen (l->string) + 1;
module_size = 0;
for (l = modules; l != NULL; l = l->next)
module_size += strlen (l->string) + 1;
- module_section = bfd_make_section (outbfd, ".nlmmodules");
+ module_section = bfd_make_section_with_flags (outbfd, ".nlmmodules",
+ SEC_HAS_CONTENTS);
if (module_section == NULL
if (module_section == NULL
- || ! bfd_set_section_size (outbfd, module_section, module_size)
- || ! bfd_set_section_flags (outbfd, module_section,
- SEC_HAS_CONTENTS))
+ || ! bfd_set_section_size (outbfd, module_section, module_size))
bfd_fatal (_("module section"));
}
if (rpc_file != NULL)
bfd_fatal (_("module section"));
}
if (rpc_file != NULL)
@@
-793,11
+789,10
@@
main (int argc, char **argv)
else
{
rpc_size = st.st_size;
else
{
rpc_size = st.st_size;
- rpc_section = bfd_make_section (outbfd, ".nlmrpc");
+ rpc_section = bfd_make_section_with_flags (outbfd, ".nlmrpc",
+ SEC_HAS_CONTENTS);
if (rpc_section == NULL
if (rpc_section == NULL
- || ! bfd_set_section_size (outbfd, rpc_section, rpc_size)
- || ! bfd_set_section_flags (outbfd, rpc_section,
- SEC_HAS_CONTENTS))
+ || ! bfd_set_section_size (outbfd, rpc_section, rpc_size))
bfd_fatal (_("rpc section"));
LITMEMCPY (nlm_extended_header (outbfd)->stamp, "MeSsAgEs");
}
bfd_fatal (_("rpc section"));
LITMEMCPY (nlm_extended_header (outbfd)->stamp, "MeSsAgEs");
}
@@
-849,12
+844,12
@@
main (int argc, char **argv)
if (shared_offset > (size_t) sharedhdr.publicsOffset)
shared_offset = sharedhdr.publicsOffset;
shared_size = st.st_size - shared_offset;
if (shared_offset > (size_t) sharedhdr.publicsOffset)
shared_offset = sharedhdr.publicsOffset;
shared_size = st.st_size - shared_offset;
- shared_section = bfd_make_section (outbfd, ".nlmshared");
+ shared_section = bfd_make_section_with_flags (outbfd,
+ ".nlmshared",
+ SEC_HAS_CONTENTS);
if (shared_section == NULL
|| ! bfd_set_section_size (outbfd, shared_section,
if (shared_section == NULL
|| ! bfd_set_section_size (outbfd, shared_section,
- shared_size)
- || ! bfd_set_section_flags (outbfd, shared_section,
- SEC_HAS_CONTENTS))
+ shared_size))
bfd_fatal (_("shared section"));
LITMEMCPY (nlm_extended_header (outbfd)->stamp, "MeSsAgEs");
}
bfd_fatal (_("shared section"));
LITMEMCPY (nlm_extended_header (outbfd)->stamp, "MeSsAgEs");
}
@@
-1063,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;
@@
-1421,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
@@
-1701,13
+1699,12
@@
powerpc_build_stubs (bfd *inbfd, bfd *outbfd ATTRIBUTE_UNUSED,
/* Make a section to hold stubs. We don't set SEC_HAS_CONTENTS for
the section to prevent copy_sections from reading from it. */
/* Make a section to hold stubs. We don't set SEC_HAS_CONTENTS for
the section to prevent copy_sections from reading from it. */
- stub_sec = bfd_make_section (inbfd, ".stubs");
+ stub_sec = bfd_make_section_with_flags (inbfd, ".stubs",
+ (SEC_CODE
+ | SEC_RELOC
+ | SEC_ALLOC
+ | SEC_LOAD));
if (stub_sec == (asection *) NULL
if (stub_sec == (asection *) NULL
- || ! bfd_set_section_flags (inbfd, stub_sec,
- (SEC_CODE
- | SEC_RELOC
- | SEC_ALLOC
- | SEC_LOAD))
|| ! bfd_set_section_alignment (inbfd, stub_sec, 2))
bfd_fatal (".stubs");
|| ! bfd_set_section_alignment (inbfd, stub_sec, 2))
bfd_fatal (".stubs");
@@
-1715,14
+1712,13
@@
powerpc_build_stubs (bfd *inbfd, bfd *outbfd ATTRIBUTE_UNUSED,
got_sec = bfd_get_section_by_name (inbfd, ".got");
if (got_sec == (asection *) NULL)
{
got_sec = bfd_get_section_by_name (inbfd, ".got");
if (got_sec == (asection *) NULL)
{
- got_sec = bfd_make_section (inbfd, ".got");
+ got_sec = bfd_make_section_with_flags (inbfd, ".got",
+ (SEC_DATA
+ | SEC_RELOC
+ | SEC_ALLOC
+ | SEC_LOAD
+ | SEC_HAS_CONTENTS));
if (got_sec == (asection *) NULL
if (got_sec == (asection *) NULL
- || ! bfd_set_section_flags (inbfd, got_sec,
- (SEC_DATA
- | SEC_RELOC
- | SEC_ALLOC
- | SEC_LOAD
- | SEC_HAS_CONTENTS))
|| ! bfd_set_section_alignment (inbfd, got_sec, 2))
bfd_fatal (".got");
}
|| ! bfd_set_section_alignment (inbfd, got_sec, 2))
bfd_fatal (".got");
}
@@
-1879,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
@@
-1918,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
@@
-1935,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)
@@
-1984,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)
@@
-1999,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)
@@
-2010,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)))
@@
-2045,7
+2067,7
@@
powerpc_mangle_relocs (bfd *outbfd, asection *insec,
file. */
static char *
file. */
static char *
-link_inputs (struct string_list *inputs, char *ld, char * m
ap_
file)
+link_inputs (struct string_list *inputs, char *ld, char * mfile)
{
size_t c;
struct string_list *q;
{
size_t c;
struct string_list *q;
@@
-2094,12
+2116,12
@@
link_inputs (struct string_list *inputs, char *ld, char * map_file)
argv[3] = unlink_on_exit;
/* If we have been given the name of a mapfile and that
name is not 'stderr' then pass it on to the linker. */
argv[3] = unlink_on_exit;
/* If we have been given the name of a mapfile and that
name is not 'stderr' then pass it on to the linker. */
- if (m
ap_
file
- && * m
ap_
file
- && strcmp (m
ap_
file, "stderr") == 0)
+ if (mfile
+ && * mfile
+ && strcmp (mfile, "stderr") == 0)
{
argv[4] = (char *) "-Map";
{
argv[4] = (char *) "-Map";
- argv[5] = m
ap_
file;
+ argv[5] = mfile;
i = 6;
}
else
i = 6;
}
else
This page took
0.029351 seconds
and
4
git commands to generate.